From 945f4d7267dedfa22337d3705c510f0e3612ace6 Mon Sep 17 00:00:00 2001 From: Anago GCB Date: Wed, 26 Aug 2020 14:22:05 +0000 Subject: [PATCH 01/96] Release commit for Kubernetes v1.19.1-rc.0 From 1934870cdd5bf38d8b469118b60d36991940f4fc Mon Sep 17 00:00:00 2001 From: Anago GCB Date: Wed, 26 Aug 2020 15:16:01 +0000 Subject: [PATCH 02/96] Update CHANGELOG/CHANGELOG-1.19.md for v1.19.0 --- CHANGELOG/CHANGELOG-1.16.md | 2941 ----------------------------------- CHANGELOG/CHANGELOG-1.17.md | 2610 ------------------------------- CHANGELOG/CHANGELOG-1.18.md | 2267 --------------------------- CHANGELOG/CHANGELOG-1.19.md | 1365 +++++++++++++++- 4 files changed, 1283 insertions(+), 7900 deletions(-) delete mode 100644 CHANGELOG/CHANGELOG-1.16.md delete mode 100644 CHANGELOG/CHANGELOG-1.17.md delete mode 100644 CHANGELOG/CHANGELOG-1.18.md diff --git a/CHANGELOG/CHANGELOG-1.16.md b/CHANGELOG/CHANGELOG-1.16.md deleted file mode 100644 index 0b4553963d082..0000000000000 --- a/CHANGELOG/CHANGELOG-1.16.md +++ /dev/null @@ -1,2941 +0,0 @@ - - -- [v1.16.14](#v11614) - - [Downloads for v1.16.14](#downloads-for-v11614) - - [Source Code](#source-code) - - [Client binaries](#client-binaries) - - [Server binaries](#server-binaries) - - [Node binaries](#node-binaries) - - [Changelog since v1.16.13](#changelog-since-v11613) - - [Changes by Kind](#changes-by-kind) - - [Bug or Regression](#bug-or-regression) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake) - - [Dependencies](#dependencies) - - [Added](#added) - - [Changed](#changed) - - [Removed](#removed) -- [v1.16.13](#v11613) - - [Downloads for v1.16.13](#downloads-for-v11613) - - [Source Code](#source-code-1) - - [Client binaries](#client-binaries-1) - - [Server binaries](#server-binaries-1) - - [Node binaries](#node-binaries-1) - - [Changelog since v1.16.12](#changelog-since-v11612) - - [Urgent Upgrade Notes](#urgent-upgrade-notes) - - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade) - - [Changes by Kind](#changes-by-kind-1) - - [Bug or Regression](#bug-or-regression-1) - - [Dependencies](#dependencies-1) - - [Added](#added-1) - - [Changed](#changed-1) - - [Removed](#removed-1) -- [v1.16.12](#v11612) - - [Downloads for v1.16.12](#downloads-for-v11612) - - [Source Code](#source-code-2) - - [Client binaries](#client-binaries-2) - - [Server binaries](#server-binaries-2) - - [Node binaries](#node-binaries-2) - - [Changelog since v1.16.11](#changelog-since-v11611) - - [Changes by Kind](#changes-by-kind-2) - - [API Change](#api-change) - - [Bug or Regression](#bug-or-regression-2) - - [Dependencies](#dependencies-2) - - [Added](#added-2) - - [Changed](#changed-2) - - [Removed](#removed-2) -- [v1.16.12-rc.1](#v11612-rc1) - - [Downloads for v1.16.12-rc.1](#downloads-for-v11612-rc1) - - [Source Code](#source-code-3) - - [Client binaries](#client-binaries-3) - - [Server binaries](#server-binaries-3) - - [Node binaries](#node-binaries-3) - - [Changelog since v1.16.11](#changelog-since-v11611-1) - - [Changes by Kind](#changes-by-kind-3) - - [API Change](#api-change-1) - - [Bug or Regression](#bug-or-regression-3) - - [Dependencies](#dependencies-3) - - [Added](#added-3) - - [Changed](#changed-3) - - [Removed](#removed-3) -- [v1.16.11](#v11611) - - [Downloads for v1.16.11](#downloads-for-v11611) - - [Source Code](#source-code-4) - - [Client binaries](#client-binaries-4) - - [Server binaries](#server-binaries-4) - - [Node binaries](#node-binaries-4) - - [Changelog since v1.16.10](#changelog-since-v11610) - - [Changes by Kind](#changes-by-kind-4) - - [API Change](#api-change-2) - - [Feature](#feature) - - [Bug or Regression](#bug-or-regression-4) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake-1) - - [Dependencies](#dependencies-4) - - [Added](#added-4) - - [Changed](#changed-4) - - [Removed](#removed-4) -- [v1.16.10](#v11610) - - [Downloads for v1.16.10](#downloads-for-v11610) - - [Source Code](#source-code-5) - - [Client binaries](#client-binaries-5) - - [Server binaries](#server-binaries-5) - - [Node binaries](#node-binaries-5) - - [Changelog since v1.16.9](#changelog-since-v1169) - - [Changes by Kind](#changes-by-kind-5) - - [API Change](#api-change-3) - - [Bug or Regression](#bug-or-regression-5) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake-2) - - [Dependencies](#dependencies-5) - - [Added](#added-5) - - [Changed](#changed-5) - - [Removed](#removed-5) -- [v1.16.9](#v1169) - - [Downloads for v1.16.9](#downloads-for-v1169) - - [Client Binaries](#client-binaries-6) - - [Server Binaries](#server-binaries-6) - - [Node Binaries](#node-binaries-6) - - [Changelog since v1.16.8](#changelog-since-v1168) - - [Changes by Kind](#changes-by-kind-6) - - [Feature](#feature-1) - - [Bug or Regression](#bug-or-regression-6) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake-3) -- [v1.16.8](#v1168) - - [Downloads for v1.16.8](#downloads-for-v1168) - - [Client Binaries](#client-binaries-7) - - [Server Binaries](#server-binaries-7) - - [Node Binaries](#node-binaries-7) - - [Changelog since v1.16.7](#changelog-since-v1167) - - [Changes by Kind](#changes-by-kind-7) - - [API Change](#api-change-4) - - [Other (Bug, Cleanup or Flake)](#other-bug-cleanup-or-flake) -- [v1.16.7](#v1167) - - [Downloads for v1.16.7](#downloads-for-v1167) - - [Client Binaries](#client-binaries-8) - - [Server Binaries](#server-binaries-8) - - [Node Binaries](#node-binaries-8) - - [Changelog since v1.16.6](#changelog-since-v1166) - - [Changes by Kind](#changes-by-kind-8) - - [Other (Bug, Cleanup or Flake)](#other-bug-cleanup-or-flake-1) -- [v1.16.6](#v1166) - - [Downloads for v1.16.6](#downloads-for-v1166) - - [Client Binaries](#client-binaries-9) - - [Server Binaries](#server-binaries-9) - - [Node Binaries](#node-binaries-9) - - [Changelog since v1.16.5](#changelog-since-v1165) -- [v1.16.5](#v1165) - - [Downloads for v1.16.5](#downloads-for-v1165) - - [Client Binaries](#client-binaries-10) - - [Server Binaries](#server-binaries-10) - - [Node Binaries](#node-binaries-10) - - [Changelog since v1.16.4](#changelog-since-v1164) - - [Other notable changes](#other-notable-changes) -- [v1.16.4](#v1164) - - [Downloads for v1.16.4](#downloads-for-v1164) - - [Client Binaries](#client-binaries-11) - - [Server Binaries](#server-binaries-11) - - [Node Binaries](#node-binaries-11) - - [Changelog since v1.16.3](#changelog-since-v1163) - - [Other notable changes](#other-notable-changes-1) -- [v1.16.3](#v1163) - - [Downloads for v1.16.3](#downloads-for-v1163) - - [Client Binaries](#client-binaries-12) - - [Server Binaries](#server-binaries-12) - - [Node Binaries](#node-binaries-12) - - [Changelog since v1.16.2](#changelog-since-v1162) - - [Other notable changes](#other-notable-changes-2) -- [v1.16.2](#v1162) - - [Downloads for v1.16.2](#downloads-for-v1162) - - [Client Binaries](#client-binaries-13) - - [Server Binaries](#server-binaries-13) - - [Node Binaries](#node-binaries-13) - - [Changelog since v1.16.1](#changelog-since-v1161) - - [Other notable changes](#other-notable-changes-3) -- [v1.16.1](#v1161) - - [Downloads for v1.16.1](#downloads-for-v1161) - - [Client Binaries](#client-binaries-14) - - [Server Binaries](#server-binaries-14) - - [Node Binaries](#node-binaries-14) - - [Changelog since v1.16.0](#changelog-since-v1160) - - [Other notable changes](#other-notable-changes-4) -- [v1.16.0](#v1160) - - [Downloads for v1.16.0](#downloads-for-v1160) - - [Client Binaries](#client-binaries-15) - - [Server Binaries](#server-binaries-15) - - [Node Binaries](#node-binaries-15) -- [Kubernetes v1.16.0 Release Notes](#kubernetes-v1160-release-notes) - - [What’s New (Major Themes)](#what’s-new-major-themes) - - [Additional Notable Feature Updates](#additional-notable-feature-updates) - - [Known Issues](#known-issues) - - [Urgent Upgrade Notes](#urgent-upgrade-notes-1) - - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-1) - - [Cluster Lifecycle](#cluster-lifecycle) - - [Storage](#storage) - - [Deprecations and Removals](#deprecations-and-removals) - - [Metrics Changes](#metrics-changes) - - [Added metrics](#added-metrics) - - [Removed metrics](#removed-metrics) - - [Deprecated/changed metrics](#deprecated/changed-metrics) - - [Notable Features](#notable-features) - - [Beta](#beta) - - [Alpha](#alpha) - - [CLI Improvements](#cli-improvements) - - [Misc](#misc) - - [API Changes](#api-changes) - - [Other notable changes](#other-notable-changes-5) - - [API Machinery](#api-machinery) - - [Apps](#apps) - - [Auth](#auth) - - [CLI](#cli) - - [Cloud Provider](#cloud-provider) - - [Cluster Lifecycle](#cluster-lifecycle-1) - - [Instrumentation](#instrumentation) - - [Network](#network) - - [Node](#node) - - [Scheduling](#scheduling) - - [Storage](#storage-1) - - [Testing](#testing) - - [Windows](#windows) - - [Dependencies](#dependencies-6) - - [Changed](#changed-6) - - [Unchanged](#unchanged) - - [Removed](#removed-6) - - [Detailed go Dependency Changes](#detailed-go-dependency-changes) - - [Added](#added-6) - - [Changed](#changed-7) - - [Removed](#removed-7) -- [v1.16.0-rc.2](#v1160-rc2) - - [Downloads for v1.16.0-rc.2](#downloads-for-v1160-rc2) - - [Client Binaries](#client-binaries-16) - - [Server Binaries](#server-binaries-16) - - [Node Binaries](#node-binaries-16) - - [Changelog since v1.16.0-rc.1](#changelog-since-v1160-rc1) - - [Other notable changes](#other-notable-changes-6) -- [v1.16.0-rc.1](#v1160-rc1) - - [Downloads for v1.16.0-rc.1](#downloads-for-v1160-rc1) - - [Client Binaries](#client-binaries-17) - - [Server Binaries](#server-binaries-17) - - [Node Binaries](#node-binaries-17) - - [Changelog since v1.16.0-beta.2](#changelog-since-v1160-beta2) - - [Other notable changes](#other-notable-changes-7) -- [v1.16.0-beta.2](#v1160-beta2) - - [Downloads for v1.16.0-beta.2](#downloads-for-v1160-beta2) - - [Client Binaries](#client-binaries-18) - - [Server Binaries](#server-binaries-18) - - [Node Binaries](#node-binaries-18) - - [Changelog since v1.16.0-beta.1](#changelog-since-v1160-beta1) - - [Other notable changes](#other-notable-changes-8) -- [v1.16.0-beta.1](#v1160-beta1) - - [Downloads for v1.16.0-beta.1](#downloads-for-v1160-beta1) - - [Client Binaries](#client-binaries-19) - - [Server Binaries](#server-binaries-19) - - [Node Binaries](#node-binaries-19) - - [Changelog since v1.16.0-alpha.3](#changelog-since-v1160-alpha3) - - [Action Required](#action-required) - - [Other notable changes](#other-notable-changes-9) -- [v1.16.0-alpha.3](#v1160-alpha3) - - [Downloads for v1.16.0-alpha.3](#downloads-for-v1160-alpha3) - - [Client Binaries](#client-binaries-20) - - [Server Binaries](#server-binaries-20) - - [Node Binaries](#node-binaries-20) - - [Changelog since v1.16.0-alpha.2](#changelog-since-v1160-alpha2) - - [Action Required](#action-required-1) - - [Other notable changes](#other-notable-changes-10) -- [v1.16.0-alpha.2](#v1160-alpha2) - - [Downloads for v1.16.0-alpha.2](#downloads-for-v1160-alpha2) - - [Client Binaries](#client-binaries-21) - - [Server Binaries](#server-binaries-21) - - [Node Binaries](#node-binaries-21) - - [Changelog since v1.16.0-alpha.1](#changelog-since-v1160-alpha1) - - [Action Required](#action-required-2) - - [Other notable changes](#other-notable-changes-11) -- [v1.16.0-alpha.1](#v1160-alpha1) - - [Downloads for v1.16.0-alpha.1](#downloads-for-v1160-alpha1) - - [Client Binaries](#client-binaries-22) - - [Server Binaries](#server-binaries-22) - - [Node Binaries](#node-binaries-22) - - [Changelog since v1.15.0](#changelog-since-v1150) - - [Action Required](#action-required-3) - - [Other notable changes](#other-notable-changes-12) - - - -# v1.16.14 - - -## Downloads for v1.16.14 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes.tar.gz) | 6c55864d3666aadcbec712e7cc68d6c3e2f7efd7ce3880250c56bc237506fc88f94fa778da466fb4efe724bf5b216dc9a3e7f5e576574b6d9a8745ce40cf3c37 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-src.tar.gz) | ae1b2951e5fbaa6841d1d98d472c1d0f0652edebfa941f18d144124040a0281f0d70eef0b66324d35d7e08fdb8d20478591118a437a240b9cae4d669b37f1b76 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-client-darwin-386.tar.gz) | a9541c9078639169ec4c35af238447dca1bdb9200f6f2515d9e10d5395ab78aa4f52681849d6945e2bc42f4aeae22a9d25592ef5df509250bccc4cc655776254 -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-client-darwin-amd64.tar.gz) | 41e597fcb6d0f4ed2dfdd0ce1b3610375f80d9f196de7f6ff202eb4afb694fcf0b8e7a787ba308a953d48323883e5791137535626d9169e88a5c1a56f99514a2 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-client-linux-386.tar.gz) | 29ff8f0c5aa363594d4dfd9bde811c0b446c3a4d0b2084685ec7c63af32a1c9066a5e7f3be959d0914288d9dfe9f171cf3d6e2db3511bc15abb6543dd1508a4d -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-client-linux-amd64.tar.gz) | 86d20c7c8d6bc61a82aa47aea136160867978df1bd04a6a23d46c04b814b52a0335f81f9c44882db2c12c551e84ea34bd2fc9934daa64ad46929a3082faeb32f -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-client-linux-arm.tar.gz) | 75b6d341a18bb2d5cc48957bac738151047904ccbb001450a18fd705a3064963d6b8df08bc099d683d383af365743f884fbfd2f97160065cb0ab51693efd94db -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-client-linux-arm64.tar.gz) | 5513b6e7e598906f6f7c391516d68f06686cf644d19eb31110c194c53fbf4465635c578636e7f876eb4aa99141c7463b131cf8da84c3485b3928601cd06c7d64 -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-client-linux-ppc64le.tar.gz) | 7ad76ce53abee3f1381cc0cb69e4183dd265744cf608f465ff2f18266edbb8ad72e4ba0fda1794f59cce2c3764bb61bf65537dbc9fb7e6fbb2d1ed6518c6ad40 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-client-linux-s390x.tar.gz) | a6f7ee7bcfd48fc56e33323a05670a27fdb58ca965660a94e91af99dff25b7fbe73041fdb98e61966351dcbabc693f61b603bdf1b200e3dd20ce4e13d3ccb8f2 -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-client-windows-386.tar.gz) | ffce29187ed9721709cb0f53dd95ab92973a877e1af6874186f61fc610d710afd7d213cebd57177ce729f2e045262ab9383a010b823e188cb0d685bc06ae8072 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-client-windows-amd64.tar.gz) | ebafa35cc5cc07a43dcb52e36475ae55c9ed505728eae12d470d2f05a26c4b4e7001377d5057952ed2e482ad01079f7b9efb4f9d489511c8f31277a24df251b2 - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-server-linux-amd64.tar.gz) | 12698c56c7dd1f87a24a1b49969b74940246a24aadc7dc2f96f175bb1b8293632dbd2b78da7e5490574778c5b045821105623e1273640f3eec1156cdfdd8c046 -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-server-linux-arm.tar.gz) | 89d573c24ffc039c89bee51144fea17bf363f46bc9b2c575b6ed2cd7422cea79a16d6f0ccbbc68692cd754e4a7c6f8b9fd7c5282e6e0e714203b2de34d4e4979 -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-server-linux-arm64.tar.gz) | af7cfd6d1fc7b8eef636acfc3b35411d63607a57d1273e37b724f01a9e9f6afea7ad3366689d3a80ca31b6f8c0dc4db5aa91e94984967c3ba20002c1f50caa2d -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-server-linux-ppc64le.tar.gz) | e5b27fb3993041f65d6e954e23d7918746229fd39ee3a69ba834e7d8e4f04a669eb075d98de86df7056cf50a25cc4f3baae2f4d97e16398bcfad6239fa37fd12 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-server-linux-s390x.tar.gz) | f6b6b7457a31e3d4cf19762791966d477e845ab37a94ea8ce037c949072dc90ca7fe54be7aac9d0bbceda5ec518d97a2c8aca4af1434b26bd8ba7190a2d2656d - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-node-linux-amd64.tar.gz) | 0d5184716900e8263c99ebfba2cc50b20156dc6c01cafabc1aec2815a89187b534ed167ab202e12d5f5aaf8ff15396737a0b62aa3437c0812d91173a5893ac5f -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-node-linux-arm.tar.gz) | 5a8c336c629a4afdc5bc3ac29c1d0feb1afd742d0cfa4c3aea23421fa7d4020b9926b6f077777f4b9a298e868e86ba745f70e43e0dd16b2ac000225e4670fdf1 -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-node-linux-arm64.tar.gz) | 7a3925fa1be72dbcda446590484a867c85e3828890a8dfdfbca223a5db9395ba38763f88d8601a34b1d621f2af0d799d41904f51e43efe135b01f54daef31c78 -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-node-linux-ppc64le.tar.gz) | 694a9b50751cb09d7f46b97e8d5a99a3d552265e8b7c0761272d987c37a6e911008840a472752063f18b47575080c5fc110f1cbb26b9c2c6ce72de5b4fd421ce -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-node-linux-s390x.tar.gz) | 942d2ab526fe76851b923f4f2d5c4a4f2af12325e4a3013180797218e55dc078684f3319a75944824a16f53ea1e2f017bc59b0c41e063ffcf72f2dec806a1ab4 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.14/kubernetes-node-windows-amd64.tar.gz) | bdb1fb0eeed3170ff2764aea27fe695d4d4eb313371033f633c06ac5666de668a9c16704666c97548fc8e67a2774652b660dcdfa12a861d833056021234d8a92 - -## Changelog since v1.16.13 - -## Changes by Kind - -### Bug or Regression - -- Do not add nodes labeled with kubernetes.azure.com/managed=false to backend pool of load balancer. ([#93034](https://github.com/kubernetes/kubernetes/pull/93034), [@matthias50](https://github.com/matthias50)) [SIG Cloud Provider] -- Fix instance not found issues when an Azure Node is recreated in a short time ([#93316](https://github.com/kubernetes/kubernetes/pull/93316), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix: don't use docker config cache if it's empty ([#92330](https://github.com/kubernetes/kubernetes/pull/92330), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fix: initial delay in mounting azure disk & file ([#93052](https://github.com/kubernetes/kubernetes/pull/93052), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fixed a performance issue applying json patches to deeply nested objects ([#93813](https://github.com/kubernetes/kubernetes/pull/93813), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, CLI, Cloud Provider and Cluster Lifecycle] -- Fixed a regression in kubeadm manifests for kube-scheduler and kube-controller-manager which caused continuous restarts because of failing health checks ([#93208](https://github.com/kubernetes/kubernetes/pull/93208), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- Fixes a regression in kube-apiserver causing 500 errors from the `/readyz` endpoint ([#93645](https://github.com/kubernetes/kubernetes/pull/93645), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG API Machinery] - -### Other (Cleanup or Flake) - -- Build: Update Debian base images - - debian-base:v2.1.3 - - debian-iptables:v12.1.2 - - debian-hyperkube-base:v1.1.3 ([#93927](https://github.com/kubernetes/kubernetes/pull/93927), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Cluster Lifecycle and Release] -- Kubernetes is now built with go1.13.15 ([#93956](https://github.com/kubernetes/kubernetes/pull/93956), [@justaugustus](https://github.com/justaugustus)) [SIG Release and Testing] -- Update Golang to v1.13.14 - - Update bazel to 2.2.0 - - Update repo-infra to 0.0.8 (to support go1.14.6 and go1.13.14) - - Includes: - - bazelbuild/bazel-toolchains@3.4.0 - - bazelbuild/rules_go@v0.22.8 ([#93235](https://github.com/kubernetes/kubernetes/pull/93235), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Release and Testing] - -## Dependencies - -### Added -- github.com/jessevdk/go-flags: [v1.4.0](https://github.com/jessevdk/go-flags/tree/v1.4.0) - -### Changed -- github.com/evanphx/json-patch: [v4.2.0+incompatible → 162e562](https://github.com/evanphx/json-patch/compare/v4.2.0...162e562) - -### Removed -_Nothing has changed._ - - - -# v1.16.13 - - -## Downloads for v1.16.13 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes.tar.gz) | 8491ac95464beb9333e3bc731bfe024af63af568e8fe13ad3ea727338167ec58ee361896e26d4bd0688317f243876b531b07409ef229bbdd659a69093d7c4e7d -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-src.tar.gz) | edaca169bcb59b42a165b9343337c0c574fbcfc97291b84a7bd50d38afa468791cde4db983ae9019a6ba0d10e5b0aeba3665690c54139d21a7711e0118d2c517 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-client-darwin-386.tar.gz) | 6e720c2259ec62f0d898804ca55c20ea50034c15a5871b7037edd11c043f95243c792a9fb1890084351ddf3bb7d8ad9e549d80b817f904224033183ddd5ee47b -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-client-darwin-amd64.tar.gz) | 0fe4ac6853922b7d20b5381991dda48eb9ad11c79b368516e3c1c83227dc617f540f64040550f60bdc2892fc6fda6abc13464a9e51376ccb4ac860fb0154bffb -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-client-linux-386.tar.gz) | 2d3f59f907311e0ccbc261ac9f0ad24876f6954f2e22d4954456f6c7a1ea99616d97beecf352fc90b225d1ec20df45e599ed0dc9e90f46ac56c843346766fb4f -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-client-linux-amd64.tar.gz) | 587c9f192fbc46e04201906fd8e24c71b18838c13722b743b1d7b60d65cd0c1bd48ffa4bd7e82a9b3f05ff482747f2afde17975e01d2400b14ce3ed864f4308d -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-client-linux-arm.tar.gz) | 757f8b512f28d4c62b217dec13963f21bb0dc6ec083deef74974c79f2d989c033a88a8a5d7c206304d2f7499da7343dbc2015f4000e8d38c83fa524283e09721 -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-client-linux-arm64.tar.gz) | 6ec7749f380185f8db968964af9822debc509dd4168242a142bbbcd1f2bfb3310534b985c6280f18684e1670d7fbb82806c471a1d87e44c08a13836915f6e9ae -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-client-linux-ppc64le.tar.gz) | e34fe6eeb48e40755201e72270077cb7e78e9c9832cae6e6ba59c643f47c2079310577357563908ad79e9d46704eb1abdae93b2671bc7b5afeb0964f4e47f4b5 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-client-linux-s390x.tar.gz) | 1efb4e00b80c6d59472d94e2a016f1e4e48025e7d204a93a89796574c28a6705386fc4eea8a3364083de2b74a0378a61c392b45a975c605f56b1c5192b232a0e -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-client-windows-386.tar.gz) | ad450577697549e8a492edf4a2cb895c854aa726c3d1025782c1834308619f6123cee1d7072152d7bd5d5e707aa8800e1a88a1a1738813f7aeb9b67d8e12cd1a -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-client-windows-amd64.tar.gz) | 151854b9ad1ddda0f6027248ef369b55f05cc7bb301a2a9def40f4acb62b09612623bf1f862b6ff2f4d51abf12352877c79bbaa6dc37d891ffdab461b70f1441 - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-server-linux-amd64.tar.gz) | 59b9cc215e8cae581c0918fcdfc5bde2dd7ed871e5a71ee9b17fccc2d951e20e74e05abf0091ebd52801b8c998df560860844ab9b1b00d3a76ae3919ca0a338f -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-server-linux-arm.tar.gz) | 5d1a9266d1a741933c7e7d5cda3ccefd064d299a35b282df04266aeeab3744ffb160f754c1098413341743ac280405d30e57d2b4a70deb32251a21d79b6f640f -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-server-linux-arm64.tar.gz) | a0bc61b3ae50fd039388caf23d959666169f4f4537db4a835ad6af2035113c36e7249058242b4090ea89f86671d1def8d8a555b2680741a4b741e2b0b2e6a119 -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-server-linux-ppc64le.tar.gz) | 1636bb2837ec997659648f33505cbaf32e567d6073e6d636180d7a3e603762a8df38d925fe3b7978e218d6e6dc168e884732a4b867dc0b0e60dd3558ab71b5ae -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-server-linux-s390x.tar.gz) | 10db780e2abe2031888ee48c16ea023ffb799937c50c3505357083d7ce2adfc302975d3af1a50312ffd058b3f6902bc0e4c6f47e7be537ccfbbb539f58f36897 - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-node-linux-amd64.tar.gz) | fb2381e684b3260a4d5a3b6410054bc9521f545b3730fd76de8131c6625019290d43fe5d611b774e8f3ff1ed0f2044e6a7104fc2aa30ef9fffa20383d958e415 -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-node-linux-arm.tar.gz) | 537cd5bcf614cef80409962294b34537e7977224e82aadb66706f3a6c6fcb3de8cc696c7ddea3b04838f006d2a89d289dc38a92e7fd2c7abb8ca77a0b53e4b7f -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-node-linux-arm64.tar.gz) | 07f38550fecc6e9ecbcbbdf74db6ca4ba71b4081d6d7077db9c583da56e6d56ce5bd84211f1f2c3657d8b0dc52c1c533e33e8e174443fd5f170c4168485a0bde -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-node-linux-ppc64le.tar.gz) | 34416a3dc2b1e6c38b658c565539246830dec46bb6a0daf093eab0897c82fe0f364102537783dfd802443ddb637df67c13b2fa72035b44a05e2b73b96a3ad594 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-node-linux-s390x.tar.gz) | fdc87ad8aec7cffbf0f95d0bdec18325e0966b3b935ec288d2d14d612d531e12fc8d2085a3afe81a97b81440fd782ccc898d4d05ec531bee9e7159c168d5469c -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.13/kubernetes-node-windows-amd64.tar.gz) | abfaa76e0c67067668013ebba39c70a76dff291da2da403d1161785979051c09e6f40d59513ae76c5248c3e775c4484219cad72783adf0204731051f09f87daa - -## Changelog since v1.16.12 - -## Urgent Upgrade Notes - -### (No, really, you MUST read this before you upgrade) - - - CVE-2020-8559 (Medium): Privilege escalation from compromised node to cluster. See https://github.com/kubernetes/kubernetes/issues/92914 for more details. - The API Server will no longer proxy non-101 responses for upgrade requests. This could break proxied backends (such as an extension API server) that respond to upgrade requests with a non-101 response code. ([#92941](https://github.com/kubernetes/kubernetes/pull/92941), [@tallclair](https://github.com/tallclair)) [SIG API Machinery] - -## Changes by Kind - -### Bug or Regression - -- CVE-2020-8557 (Medium): Node-local denial of service via container /etc/hosts file. See https://github.com/kubernetes/kubernetes/issues/93032 for more details. ([#92916](https://github.com/kubernetes/kubernetes/pull/92916), [@joelsmith](https://github.com/joelsmith)) [SIG Node] -- Extend kube-apiserver /readyz with new "informer-sync" check ensuring that internal informers are synced. ([#92644](https://github.com/kubernetes/kubernetes/pull/92644), [@wojtek-t](https://github.com/wojtek-t)) [SIG API Machinery and Testing] -- Fix: GetLabelsForVolume panic issue for azure disk PV ([#92166](https://github.com/kubernetes/kubernetes/pull/92166), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fix: use force detach for azure disk ([#91948](https://github.com/kubernetes/kubernetes/pull/91948), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fixes a problem with 63-second or 1-second connection delays with some VXLAN-based - network plugins which was first widely noticed in 1.16 (though some users saw it - earlier than that, possibly only with specific network plugins). If you were previously - using ethtool to disable checksum offload on your primary network interface, you should - now be able to stop doing that. ([#92035](https://github.com/kubernetes/kubernetes/pull/92035), [@danwinship](https://github.com/danwinship)) [SIG Network and Node] -- Kubeadm: add the deprecated flag --port=0 to kube-controller-manager and kube-scheduler manifests to disable insecure serving. Without this flag the components by default serve (e.g. /metrics) insecurely on the default node interface (controlled by --address). Users that wish to override this behavior and enable insecure serving can pass a custom --port=X via kubeadm's "extraArgs" mechanic for these components. ([#92720](https://github.com/kubernetes/kubernetes/pull/92720), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- hyperkube: Use debian-hyperkube-base@v1.1.1 image - - Includes iproute2 to fix a regression in hyperkube images - when using hyperkube as a kubelet ([#92626](https://github.com/kubernetes/kubernetes/pull/92626), [@justaugustus](https://github.com/justaugustus)) [SIG Cluster Lifecycle, Network and Release] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -_Nothing has changed._ - -### Removed -_Nothing has changed._ - - - -# v1.16.12 - - -## Downloads for v1.16.12 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes.tar.gz) | 16aead0c708f1a64ee8b4723551c0e27f3661b06997fe5f32543b9c8f46d89e277d8845248725c64cdfbed9030cdee73e5e6a73acd7775bd5f54f7abab1817a7 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-src.tar.gz) | f78c645f6662e0593fa90946df136ad24f76f87ec75ba3131f52eef42c25948b3d49b2139bdb14e73a2bb203489b06e041441c8bf83373bb095bdd6271bcb8e6 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-client-darwin-386.tar.gz) | d0c8b3d3bfd2a74f2c4335aa7d0f1d51bc5b5249431e88c1e3f83842640b30ec8e4185c4c8cc8be6b51d296e5c62a5cd4363b73c99ff665a9bd0ad609e7b5913 -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-client-darwin-amd64.tar.gz) | d4e6b09cc24c04d04bf31510fbbfdc56b63ad2c95a977f22f962f4cd3c1c2ada8e6730ccce1ea3506cd74f9477aa6194221af593c50072b0615ae4c8150a7fa9 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-client-linux-386.tar.gz) | d801441d1e61cf80adea0f556fdc6b6c6b6d3950ae3f5f349d21b45b2ee87635f31b2eff18f491fb95e8f78aebf504809b7695d1ec7dfa5bfa5b47f4c3a624cf -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-client-linux-amd64.tar.gz) | 5f64aebafd1f5c3d2974a7ecf15defb6f82b4a03f4402555bf973a4fde40de3e81b62a92ef4cafee26a40ff6d4c8fc82580c26855ee587835a5f6740d4c89759 -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-client-linux-arm.tar.gz) | 49d0c00ac8764c8632d4ffe64b9e0558eb69156bdfbdf56b142082e3ccdc5b4df404600a867de4bd5be40050eefd298fec638b65a7b288d601c0da6c5d97d7b1 -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-client-linux-arm64.tar.gz) | 6a8690a22884e9527518e7ba79760b78af426c4b5f6a7b6ceabe7a44658a5459349f6e2342993bcbc82c5b77f3640602a2033ba5390f0c13489bdcbd620834db -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-client-linux-ppc64le.tar.gz) | 8325e3ded3ce32d4c6f778f7247a80900c5bdbb6ce965a83b8a267f60f9508031ab9429b1c622b0026e70ffdd0d1b1384ccb1e0d5b79a059e5c4cfbf8274819c -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-client-linux-s390x.tar.gz) | 160fab60b192c13da14cbb7f35d49d084550401758f7622656b278c09f4b1bb0454ff6507c065f0b446ddbbc92f1a1121c4302203cb032029644009c8c904ac9 -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-client-windows-386.tar.gz) | 129d9ec1da5d562693d807f37e73e6a394ebbde9ea421b148eb72ce004e09939530d470d10d118f8894310df4581139a33dd38efcf4c09e7f04f1c58882a08b6 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-client-windows-amd64.tar.gz) | 8b8ec10129bfac6490a73898eee8583959f67f43b729a3ef7f55bad05a3b826dbdc6690bfe207260d0bbc8fcb1cc45d995d0046b78dc70c2fa18be984caa8c21 - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-server-linux-amd64.tar.gz) | 990903598f44df71f9c31c51be50c1f17449443bd2b2be77344fd7c77d8373eefb8763ea1841d4c831310c94eb7e3de0e1229498ebb70d0e11469d1aa8ca65b0 -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-server-linux-arm.tar.gz) | 9b3f9a8152d52dd35e1b29da2b3ab88afed8ea93be493c464ba4b11bbd81983686604e178b5e779e95982e42a7ca65ace5c382a34c5809a9903d9efd51c67a0c -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-server-linux-arm64.tar.gz) | 9275700fb89441230810d844f63913bb235b4aa4122bb69bf95ba05040175bb176301db2642265caf76dc47ab00919e65020debc973a5e4d339919861d1bc33d -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-server-linux-ppc64le.tar.gz) | eb342c35660a3de9991b5e54dbd75c598031a42eb9b0b58f034bbefc401a4c645bc99737025e849acdf34ab06d4b5e16be09141b95d11e3d2cc21c86e27c23dc -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-server-linux-s390x.tar.gz) | d52252d386c5387534a62dc26a59c5a8eb175cdedbd79b2d752d9602bb46426f344aedd0f24dda053561f46e172027b4ad8cd67f8472f3cbea8645a3e4138449 - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-node-linux-amd64.tar.gz) | 54a5ff3b8e33eb0ca299e758170f8aeb0c931bd7700ac80dde56359ca388e6dc4442dd022bbe1b2a1ecbb8ed92f13624aa41859cbd1cd0a1d2f1a7c86f048d0a -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-node-linux-arm.tar.gz) | 494f15950d8ba4e33d71a1dd8c500c78c7e07690b94fe9da87242a8bfe78b3258ff1e522a620449998f36029b4ac013386c800662cda55d4a3933a80c7e9742d -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-node-linux-arm64.tar.gz) | 02d87a40a2de13ecb17a30ef80c2b4116cd7690b7aa2e2f685e79d35024f143c131e5943676656f8692a8efb69592f230e4b844690c96e4faff215de4e9d371a -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-node-linux-ppc64le.tar.gz) | 1993ad9137602fc706e2d088c17c3c20e80254f450c13f0ccec8c81160da13fbc41c4e7fca22161500494ef62ba3256415fc1f917212c1d5896119a5988ebd67 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-node-linux-s390x.tar.gz) | 1cd922e7d15292e3512d501303a08b98133d046467d117323501f0dc477da404b27297e3615c7db26b7e24df75d42ca54569980169be6cbe6f76d3045f4d53db -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.12/kubernetes-node-windows-amd64.tar.gz) | 697c10a14cb4f8f021907ec46096c98d3ec69d3d865ad0194a31ae5d3901ba3669f7b82c9b8f08ee7153ba8c730b072ce14dcbe8351db8ca17bbbfd624841a40 - -## Changelog since v1.16.11 - -## Changes by Kind - -### API Change - -- Fixed: log timestamps now include trailing zeros to maintain a fixed width ([#91207](https://github.com/kubernetes/kubernetes/pull/91207), [@iamchuckss](https://github.com/iamchuckss)) [SIG Apps and Node] - -### Bug or Regression - -- If firstTimestamp is not set use firstTimestamp or eventTime when printing event ([#91056](https://github.com/kubernetes/kubernetes/pull/91056), [@soltysh](https://github.com/soltysh)) [SIG CLI] -- hyperkube: Use debian-hyperkube-base@v1.1.0 image - - A previous release built hyperkube using the debian-hyperkube-base@v1.0.0, - which was updated to address a CVE in the CNI plugins. - - A side-effect of using this new image was that the networking packages - (namely `iptables`) drifted from the versions used in the kube-proxy images. - - The following issues were filed on kube-proxy failures when using hyperkube: - - https://github.com/kubernetes/kubernetes/issues/92275 - - https://github.com/kubernetes/kubernetes/issues/92272 - - https://github.com/kubernetes/kubernetes/issues/92250 - - To address this, the new debian-hyperkube-base image (v1.1.0) uses the - debian-iptables base image (v12.1.0), which includes iptables-wrapper, a - script used to determine the correct iptables mode to run in. ([#92495](https://github.com/kubernetes/kubernetes/pull/92495), [@justaugustus](https://github.com/justaugustus)) [SIG Cluster Lifecycle and Release] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -_Nothing has changed._ - -### Removed -_Nothing has changed._ - - - -# v1.16.12-rc.1 - - -## Downloads for v1.16.12-rc.1 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes.tar.gz) | 1aea402d8a608320ed420291f560523e2f3cb0c9d748ab9068c65bf41ca7a698bee9d3380951ae60548832196be35150d0de6295ba431d9480cb5b9f431b6916 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-src.tar.gz) | 887cef5ebf5958b4d1e924499dbd1d89054bd7bd16326c28dfc3912e880172febbd0037121a1d57b6a39b84e9f0c57a3b4a2b553582947442530b8c8d053db0a - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-client-darwin-386.tar.gz) | 86323ec3741ac367d937504bafdf14896d5cb086022cad057641d47f39688dc743c3868b4493c976fc3ce0822ce5865889a77234cd2604e65b924c358ac7f89e -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-client-darwin-amd64.tar.gz) | 332c541a3bca1328776a5f27c9f5d6dd162499424bd4fcd1f2ef2f5b68d7ebcecef249cf4f981ecf05d66e3d3c80d85a7e074c5403647428cbca6d3678583db0 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-client-linux-386.tar.gz) | 7a91e23bb34c5ce0c81a625676fa22561cfe09dba292460f28df9f697b0b14d7bbd6688c00aea6c6a213a4dea56b6c7bbf3f136020700e8b01a0449614fada4a -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-client-linux-amd64.tar.gz) | 3da004d95a4e94c6f12bf7323340da4ebe6064582b91ae8d081330a1c578f6de59dfb94aff5ce6f4570c060aa43388116b9cb6193783221340d4a3c957a6fc3c -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-client-linux-arm.tar.gz) | b93385aaf9e9790a6b5277a3f4a2b86f90502ac7309e841d43144df667baa50fc2ebba3de3e261280b807f077905fcaf3b2b7102e12b17d2501e0ad7b639313e -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-client-linux-arm64.tar.gz) | ca94841465a723682fae0c91130fed5fa071a8527e4fa9ce9ed250092d1a82d79e5efdc0f648a89d27e4fcc052db5ae47fad7b8d0ff8403da8564021b6b8ab46 -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-client-linux-ppc64le.tar.gz) | b5611661e2bc086ce065067c502ece68004bf95ed4978438b1503caf981698e63a633a03892bf9a4f60fa93b083f5eae5b6798d3b155a8d81f4af556f545fcf6 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-client-linux-s390x.tar.gz) | 06ef2e0b53c288e7cd26576681a51fafe3f864cb196da9a12c2f2ee20be2c571b500f0b1abfa2e0d71c9b6c58bb25fd6944190a5410ad73a15b0b9518c854451 -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-client-windows-386.tar.gz) | 48a8d5a4967eeed59167e141bddaf6bce4d09dae13db03742f28037e9d5cb50adb1fbdab91225ae4ea6aff17b50b7ed9349dd027ae1eb6d3457ef2bddd3e37c8 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-client-windows-amd64.tar.gz) | 720823ec97ecfe588f428f4c876ea6d8597293d14ecc846e766cde3f1a77e8dd47171084066051b328d86629983ceddee02dc30efabe2884bb041985842b819f - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-server-linux-amd64.tar.gz) | 28fd9bbbd831d129e5f7bc495179b0e6b6aaf21f5e2db8c163cd13406a3916c26d4f94dc9cd844ba7274ee2ec519024019ae403cd3a779c3c8654c5de7e2ec9f -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-server-linux-arm.tar.gz) | ad20d7ba5b7c559206aa4253b9ad79e43bf4f054799cb5e241b9675aed04db5102b519e43c58b0c1e7022c77f016a57ba9f72bdd22cd48d8136b1de8e1e23a1b -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-server-linux-arm64.tar.gz) | c4d09fbd0576e1048d6ba404a68abb15f57b1af4daf4321b01a8799d9f3696afe6d01b2a956ba203f99e2c2352fef356f7ec4d38bb5fd51d8ea864776d05e81e -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-server-linux-ppc64le.tar.gz) | 07085ba7b027be4df44c95b54b8972150bcf9a965fe9a767f8371c71f5746b6214fd8f206a9917e17ac0bf969443f25199eb4a05c8302b43b2fa57b40775b01c -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-server-linux-s390x.tar.gz) | b03b616f9e52397bf6c4ea1cfb952b994d3d12c52761d43bd967ebe1857c0d1ce434df69c51ac9695495f1bd074ad5e739407a1c5a1adc4650b019231a344cad - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-node-linux-amd64.tar.gz) | 8b15546050327feed884c2f05b0d2b34d95d475688e2c1a809f964f47b6f16a59e31d0caafc8b09f46301d0a6fd9c411be9469bbbea626d78dbe17f9988e03c8 -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-node-linux-arm.tar.gz) | 38555ae95278a585d1c104c9198d6b9504ceff5c750e1b8fe2d00d3c2846ffb8ff4f3d3cd31ad4dc328c1d026537007de32958c85113a48bede6be727aea047d -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-node-linux-arm64.tar.gz) | 047b53bc59737b142cc9a3098ae284ed38c8f80f3d9cd747c25eef3f5871e6cd5d1e5443f521dea4b7ffebd7495110cbe47b293b8394b9636ac7c2d9ec7be1df -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-node-linux-ppc64le.tar.gz) | 05b138594fcbbb0ffd531b78e0b09fa2300b8fbf013c88f9d0f083b392f7a3642dfb8ebadae79e3a5f0a85ddac35f0e88c11a2e62e2bd335b8ca85a64a7fed96 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-node-linux-s390x.tar.gz) | f29940c3063d9e738dbe77b6813940efb34b333197464557664a232ee6e5adc075a9a206cab00ff2f478230da5f20e6055e8802b336b0ecd3764d3641b48d7e3 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.12-rc.1/kubernetes-node-windows-amd64.tar.gz) | 381a3065d15737b6e1a6fbd59ad66a41cc55d84a550c3037137ad64dc535a371876fb85fddda97742f2402fe9ec6e6ab67013aa49ac7ada224dba3b565b89214 - -## Changelog since v1.16.11 - -## Changes by Kind - -### API Change - -- Fixed: log timestamps now include trailing zeros to maintain a fixed width ([#91207](https://github.com/kubernetes/kubernetes/pull/91207), [@iamchuckss](https://github.com/iamchuckss)) [SIG Apps and Node] - -### Bug or Regression - -- If firstTimestamp is not set use firstTimestamp or eventTime when printing event ([#91056](https://github.com/kubernetes/kubernetes/pull/91056), [@soltysh](https://github.com/soltysh)) [SIG CLI] -- hyperkube: Use debian-hyperkube-base@v1.1.0 image - - A previous release built hyperkube using the debian-hyperkube-base@v1.0.0, - which was updated to address a CVE in the CNI plugins. - - A side-effect of using this new image was that the networking packages - (namely `iptables`) drifted from the versions used in the kube-proxy images. - - The following issues were filed on kube-proxy failures when using hyperkube: - - https://github.com/kubernetes/kubernetes/issues/92275 - - https://github.com/kubernetes/kubernetes/issues/92272 - - https://github.com/kubernetes/kubernetes/issues/92250 - - To address this, the new debian-hyperkube-base image (v1.1.0) uses the - debian-iptables base image (v12.1.0), which includes iptables-wrapper, a - script used to determine the correct iptables mode to run in. ([#92495](https://github.com/kubernetes/kubernetes/pull/92495), [@justaugustus](https://github.com/justaugustus)) [SIG Cluster Lifecycle and Release] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -_Nothing has changed._ - -### Removed -_Nothing has changed._ - - - -# v1.16.11 - - -## Downloads for v1.16.11 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes.tar.gz) | 3830d26b53cc18be80a40249f9db01bde72d3f0f222252cfccd46416ec1725527dcc04aa85f8af4b2847c041807b08b9e4b78a6748b589592399a15160e2467e -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-src.tar.gz) | 86c376157342758e346bfd028ff7d8dfd0a40afe96c4d77835c2bd71ef999643c9e1961a9549caf3595bd158dc025e858183544cf4ccac59d5951fa440f93802 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-client-darwin-386.tar.gz) | f8147e6dfc8348c59848fdabbb8ce89e9b7f7c4999de26c82c6caa2cafda24cce8b89dcaa53caf3c39fb319104ec5203482127daec68aa2cd629a6c29a50e747 -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-client-darwin-amd64.tar.gz) | 35c45d7ac5ba281daa4b504f1256b9b67a1cb3476b394ce2b19f5363fb9da4ecac5f923fbe7d7ade3d636bde3646965424408b4a7b6f1ee0a2892383419f8d97 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-client-linux-386.tar.gz) | 2d185a2f3daf3ea0ff7e0b3eec98c3159d238db5be4dc8423e8ecfbff9d1b6ca17dc7ee3cfff8a52c8cccecc27ae5a2c393fa84c1c2237336ee898c409e0fdd8 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-client-linux-amd64.tar.gz) | 5181f29e832a46bcd454c812cfbabb7a0786434796d893086c29013e59288e56a611892fe4f85d9ba56a70699bf26e50ab61acbe6eb99b06eddd2a6fe4841824 -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-client-linux-arm.tar.gz) | 7c87111b4bdf94b1305551bbc9e4aab1edf660867a1346f133ef079354c8c7b8af71fd1ebf46eb8544a887cf0e1dba3fdf0dcdb40fbd9fecff58b098c2491b2e -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-client-linux-arm64.tar.gz) | 2241c28ab4d08338cadc43862d0daa235158237cf5e3caa0d7d755ac0cb44039c0200e14abd2e41454d5880b8ff11c811dff0c05e88405b04192f1f342914dad -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-client-linux-ppc64le.tar.gz) | a052f627964db4c68268a37afda32af637f74876f254633de16f0e56fe1c3fbba13e67a8a0c4f2a475c5cb69038c6fff545a50e8a9658eb20037020a96cf08b8 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-client-linux-s390x.tar.gz) | cd43ef6f58451e5b4a5c02b27beefd69b6b08bf4846b920c83e9886cb17dce72d358b7d138515454d9c802f327edb3e9b17e8a4319a19b806fdca0f2a857f9b0 -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-client-windows-386.tar.gz) | 94108a54806d28edf6e0f75124bfe192be415e6245e03963c93cc20b9b8eeec48d66e4b7c4e99fca5b6e23628f2925f6c163d910614260c4c1bd32274abb9a3e -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-client-windows-amd64.tar.gz) | f5139a7ceb8f3f9f07bd5ab2f6762b166152e886a78149264789b7f6cad15773e76d4acb42f46c2c6af7c4ec4e8c30f32ce089c92d28cab74e6f6f978f839d4b - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-server-linux-amd64.tar.gz) | 548e9d9c09458ecd3a5ec83560ecc53fce589edf85b27776d0f501547492a46405be33997e740c1d69dddda3038d8aed7886a26364c9925c50e54aabe4a035fa -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-server-linux-arm.tar.gz) | 3858a3a1f5e5edaa48e4ccae37936426222d440802c195923cb29bc02bcf7e2fb18928e6084bb93c20deb59898e7d9ecf43fc8702049caea83233d79bd438456 -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-server-linux-arm64.tar.gz) | 7ab1a2018eb190385744799af48362ec9fbde5cff42433b71aa73700033103e3c67a168d981b636da81f712fa01eda73a2010c3de5768e2333b1c0cfce3ccc5f -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-server-linux-ppc64le.tar.gz) | e6463da01ac934cc826ae781281737cfe6f42b4355d68e0b90a589af0e14ece1ad59523799b7470ae9d49a735137a6d371933ccc04de6a7c99731ca6822cfb0d -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-server-linux-s390x.tar.gz) | 8be2923df4fa559b647550aba78d3e0a82b1c3d22d7e7043424ce265c9bff593cb7c78d3d3e92d8a973fc4df5a4f118edba3c50ae32ee54fa56e220d1bf9a10b - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-node-linux-amd64.tar.gz) | ba0f723f05201a0ce7cb8655484f530e22959c21ef7da32eaab95741b97fd9487622bdc229c7b02c14978301dff020939cf88e31f1032110c6722b76c6a7c0a9 -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-node-linux-arm.tar.gz) | e81998954ca0349169c76385f57dc0bf480f803e191f79c15cbc2eed4ed5f59ca3c991fe0316b590624518b80be2d790c2bb6ba0421854cc84226d74d725a5ed -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-node-linux-arm64.tar.gz) | afbc62f35d7f36a424edbb728b4c1030a594e81666137bff566f7de824b9c4479c8e3a18bf827257d1b14f6aa33efdf27f1259eef014c37742e1a29a84891ee3 -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-node-linux-ppc64le.tar.gz) | ae544dc78ec673aaabae89e0542579eca19344edac2b830d280cc763c583a84c0978725ac162c875e1d237db1e763d27d2d9ebfa3b272959ccc57676ac28bf49 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-node-linux-s390x.tar.gz) | 727d3aa9fe8a4a3e7cfa2b151afe5e43a94579b55c7c5e603659a686349dc4141a8b8df9d92bb4fe9078f2b9fc877fc02afc6dc30826a5ac0d3d9f4a74e641f6 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.11/kubernetes-node-windows-amd64.tar.gz) | a7dfa7f10868b061dacde037d1fb8763387724310271cb4cf8d3a5a270a0dc1c52beda81abbdf934217634c8c253d2d48d43ece4538863016a68db6301730bfb - -## Changelog since v1.16.10 - -## Changes by Kind - -### API Change - -- Resolve regression in metadata.managedFields handling in update/patch requests submitted by older API clients ([#91748](https://github.com/kubernetes/kubernetes/pull/91748), [@apelisse](https://github.com/apelisse)) [SIG API Machinery and Testing] - -### Feature - -- Extend AWS azToRegion method to support Local Zones ([#90874](https://github.com/kubernetes/kubernetes/pull/90874), [@Jeffwan](https://github.com/Jeffwan)) [SIG Cloud Provider] - -### Bug or Regression - -- Azure: set dest prefix and port for IPv6 inbound security rule ([#91831](https://github.com/kubernetes/kubernetes/pull/91831), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] -- Fix internal loadbalancer configuration failure when subnet name too long ([#86276](https://github.com/kubernetes/kubernetes/pull/86276), [@yangl900](https://github.com/yangl900)) [SIG Cloud Provider] -- Fix public IP not shown issues after assigning public IP to Azure VMs ([#90886](https://github.com/kubernetes/kubernetes/pull/90886), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fixed a regression preventing garbage collection of RBAC role and binding objects ([#90534](https://github.com/kubernetes/kubernetes/pull/90534), [@apelisse](https://github.com/apelisse)) [SIG Auth] -- Fixed cleanup of raw block devices after kubelet restart. ([#83451](https://github.com/kubernetes/kubernetes/pull/83451), [@jsafrane](https://github.com/jsafrane)) [SIG Node, Storage and Testing] -- Kubelet podresources API now provides the information about active pods only. ([#79409](https://github.com/kubernetes/kubernetes/pull/79409), [@takmatsu](https://github.com/takmatsu)) [SIG Node] -- Pod Finalizers and Conditions updates are skipped for re-scheduling attempts ([#91953](https://github.com/kubernetes/kubernetes/pull/91953), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] -- Resolve regression in metadata.managedFields handling in create/update/patch requests not using server-side apply ([#91690](https://github.com/kubernetes/kubernetes/pull/91690), [@apelisse](https://github.com/apelisse)) [SIG API Machinery and Testing] -- Resolves an issue using `kubectl certificate approve/deny` against a server serving the v1 CSR API ([#91691](https://github.com/kubernetes/kubernetes/pull/91691), [@liggitt](https://github.com/liggitt)) [SIG Auth and CLI] - -### Other (Cleanup or Flake) - -- Update CNI to v0.8.6 - - build: Use debian-hyperkube-base@v1.0.0 image ([#91388](https://github.com/kubernetes/kubernetes/pull/91388), [@justaugustus](https://github.com/justaugustus)) [SIG Cluster Lifecycle, Network, Release and Testing] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -_Nothing has changed._ - -### Removed -_Nothing has changed._ - - - -# v1.16.10 - - -## Downloads for v1.16.10 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes.tar.gz) | 5925579630fa2c3f78c1e17b4c2aca3e23cad5db7721b34b9e8d8eb8a443d4ea4cb87369d9d254dfd35603a1f12825a1167ccd2b71e1e1f3eb7676ad4a143276 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-src.tar.gz) | 5d265121125e940ea43a54df7ef6ed072598d5d4dcfcbf7173ad252d016869db938c50865aaff31ef7ebd0399fa0de87b4248285b3c7f1abdf813cda0df585b2 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-client-darwin-386.tar.gz) | da77e3fc2bdcc5c6c6dd8c92c2f8fc23ea2974cb36e08316830631132005c03513296179b1ba5e77d9dc3346ce273207f9ae4ae822b13b1a361f6543a4df4bcc -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-client-darwin-amd64.tar.gz) | f56f42a525e723fdcb203d7671fc8586c45a9987e8f4ffbe9467beefe0af12f8158bba1257392f21cca3cf75c9f8db803d644135da5e2fb2cc74ced858c9f294 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-client-linux-386.tar.gz) | 10241604f0fec126f696f33963ec607abf378b44524f3dcc3ab26cfcad894d1ab1f3fa06af2ee6619ac3aa43eef6edb46bb7cdb3e5c9e813009a5373b99e1598 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-client-linux-amd64.tar.gz) | 455d8bd8881aa996dd35969b2448fa54ab15650ce2d58c19bf89ff8e11f287beb136ba64ca62d64c958a1227dfee1e94408941258f0b9421ef06bb48a09bbcd2 -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-client-linux-arm.tar.gz) | a30b1840f7ca2f13468a142f69b1806cf9950d67f5c42cb30972c23704c4c66d47c16245096ddb3245ab9d7a002ae37a944822ef4d8d7d21a253f8cf59d861c8 -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-client-linux-arm64.tar.gz) | 1247c48d1abe3d04d8ecc08c34bc627961cc2a830893a039366e36da66ce96431d2d9b8ebb0e4893260195ba702f8a5e9935ac5a043ea0a9b0e34b64682f394b -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-client-linux-ppc64le.tar.gz) | c793de5dbe35708ba7992cae395e3c70e48e5ecb57bba73d87496dbccde216b777f60ff41ff10d565e06f48bf18b72f97df12446722860a72a55c46dcdf8bd7e -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-client-linux-s390x.tar.gz) | a71420474b115e5114628b09744a1929163931550d5fbfffbc6c12c7531c6e9769ab5125148a72d151fe6392c8c96d6a4736348a67fa02e66ac8afac6defe13b -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-client-windows-386.tar.gz) | 42a44700becf4556473498c95561aced6704a49800bf1b96a776607903eca97f77aa208e29d99c963a7e00a8af72540c45572f1fad59d74f3736b180e60f7411 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-client-windows-amd64.tar.gz) | 0fffcf5012ae9495396c64a8b3bea3389456ba5844d44b5b8ae619752011101864eb7ed6ea6fe2fedeb8a07e36a097cd84b79a62b9004e457105f0c0895f7be8 - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-server-linux-amd64.tar.gz) | bb2c68409878c1037f8d2924b010f6e13cb28969046faf75a5e9e16d90e8167223f9ecab0866ba1c3998360d1da87863d3626dada226b153733f39e6d53e710c -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-server-linux-arm.tar.gz) | 42dddd7699b77c12690b525dd9c0643e529589a84628c3fa6b7f8ffad064dc1fb93cd3e37aa606d113f4c18833ad6e404af86f0dba5b92238c2410f9bdeb16fa -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-server-linux-arm64.tar.gz) | 0c0e9b484576559eb2d894aef9b705472d31b459123ca4dec61fa0fd9a6d5ddb844003dfbbaa596e3d60fbabfdbd57424053a89c0d9969d181e5e9b820c49d86 -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-server-linux-ppc64le.tar.gz) | 9a6c12f1c6a442d59f8eb2affa3c980e35c0e85a70ec97d565c660c4bf041257d98f8588280a1e4b28f9a2589c5f8f5ef105030a29271c4bd0faf67b79eb37b6 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-server-linux-s390x.tar.gz) | f4a272179806dc174177c4ae860a8f8dd67743ed1eedab2720761a008e8bf15646c39e0a8a176e980a2e43d2c8068f78f19c35295ceb097e40eea904d5e6c253 - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-node-linux-amd64.tar.gz) | bcd8abebedbb20f93259ccfddefe4f7f5583d2572a8bdb011715b737c88927a89f90923856e43ed6b6b9d6fdd7ce6f348de5e632f63abe16ee66828a33842844 -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-node-linux-arm.tar.gz) | 9089881d92640de936c07b25ed398e338d95a0b684891377835341e47f868fa0f3337ac8e93307937d2ccdb694da72fc6ca275f1bb2803ae55fe06c7a1d47cd2 -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-node-linux-arm64.tar.gz) | b5844cfcbdc13888c3150348252cdf38c39a19fc0e69b1bff42178e10b608e8500e7e527a285c20be0e9ca1ea785c7ff9a198c9e151e7e9ebed694fc7780214c -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-node-linux-ppc64le.tar.gz) | bda2e59f704cb314397302a3365f8a2dcbd7663277ede11fe5f69c346ab5ef26103542849751a3c8cd2a72c9819cbc4900b52a0f941d47fb7d774caaa94fda24 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-node-linux-s390x.tar.gz) | 0574ccf4677f8333b6a64c91fcfc4e3d037eec05f3983df647d8d5505ef57a3c6d41e93fbb35ad1f228b3673ee0d6084610054e397714ba0bd86c949455122d9 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.10/kubernetes-node-windows-amd64.tar.gz) | e5a5bfb79f1e45f13da3dfaa13c44264e099d08c535d6a9c63819685be186f8a84a518468720cd56dc1434aec10d40aa4c929d62fdd7f43b749e05c7572fb2f9 - -## Changelog since v1.16.9 - -## Changes by Kind - -### API Change - - Fix bug where sending a status update completely wipes managedFields for some types. ([#90033](https://github.com/kubernetes/kubernetes/pull/90033), [@apelisse](https://github.com/apelisse)) [SIG API Machinery and Testing] - -### Bug or Regression - - Base-images: Update to kube-cross:v1.13.9-5 ([#90966](https://github.com/kubernetes/kubernetes/pull/90966), [@justaugustus](https://github.com/justaugustus)) [SIG Release] - - Fix HPA when using init containers and CRI-O ([#90900](https://github.com/kubernetes/kubernetes/pull/90900), [@joelsmith](https://github.com/joelsmith)) [SIG Node] - - Fix: Init containers are now considered for the calculation of resource requests when scheduling ([#90455](https://github.com/kubernetes/kubernetes/pull/90455), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] - - Fix: azure disk dangling attach issue which would cause API throttling ([#90749](https://github.com/kubernetes/kubernetes/pull/90749), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] - - Fix: get attach disk error due to missing item in max count table ([#89768](https://github.com/kubernetes/kubernetes/pull/89768), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] - - Fix: support removal of nodes backed by deleted non VMSS instances on Azure ([#91184](https://github.com/kubernetes/kubernetes/pull/91184), [@bpineau](https://github.com/bpineau)) [SIG Cloud Provider] - - Fixes a bug defining a default value for a replicas field in a custom resource definition that has the scale subresource enabled ([#90022](https://github.com/kubernetes/kubernetes/pull/90022), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, CLI, Cloud Provider and Cluster Lifecycle] - - Pods that are considered for preemption and haven't started don't produce an error log. ([#90241](https://github.com/kubernetes/kubernetes/pull/90241), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] - - Provides a fix to allow a cluster in a private Azure cloud to authenticate to ACR in the same cloud. ([#90425](https://github.com/kubernetes/kubernetes/pull/90425), [@DavidParks8](https://github.com/DavidParks8)) [SIG Cloud Provider] - - Reduced frequency of DescribeVolumes calls of AWS API when attaching/detaching a volume. - Fixed "requested device X but found Y" attach error on AWS. ([#89894](https://github.com/kubernetes/kubernetes/pull/89894), [@johanneswuerbach](https://github.com/johanneswuerbach)) [SIG Cloud Provider] - - Scheduling failures due to no nodes available are now reported as unschedulable under ```schedule_attempts_total``` metric. ([#90989](https://github.com/kubernetes/kubernetes/pull/90989), [@ahg-g](https://github.com/ahg-g)) [SIG Scheduling] - -### Other (Cleanup or Flake) - - base-images: Use debian-base:v2.1.0 (update to Debian Buster, includes CVE fixes) - - base-images: Use debian-iptables:v12.1.0 (update to Debian Buster, includes CVE fixes and iptables-nft/iptables-legacy wrapper) ([#90940](https://github.com/kubernetes/kubernetes/pull/90940), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Cluster Lifecycle and Release] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -- k8s.io/kube-openapi: 743ec37 → 594e756 - -### Removed -_Nothing has changed._ - - - -# v1.16.9 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.9 - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes.tar.gz) | `524cb2d5a748e4e0b78aec357b479b8b810fa3bf875b85682d30fe5e4e3d5c6b0a90d0a0ab4dd9866e73a9d78fdbc67de9903bf069e4ee5e303997355e891a54` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-src.tar.gz) | `a5b1d1cbf871d11838ff5be961f22dfaa564f8f3e938571fc0ff87639cfb16193ecdb34ccba922f69f80769fb3f2cd78655fad3a3f4d3f5ebfe9834afbfc5293` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-client-darwin-386.tar.gz) | `a876d5eba6955dcf868c6cb105c39a80dea4eea8de88aef464c8619bbd2a002d88598d50697d8a7d1490d21b3184b6107132bcb821d49da1e469a1ad19b549e4` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-client-darwin-amd64.tar.gz) | `fad0cc9f88371c909490aa3430d060a8841cceebbb981b404447f933aeb8d4f35107a38f402705bbc7e7741a4a14c34bb6b8078b536865b3708329348e0a79c1` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-client-linux-386.tar.gz) | `2dcde1c42b85875bd90b04a9301a73144c0b0f768f585c6bb501f327e0652af62fad8d7a029d6753d6bcb9108b67a34725656906d8c065813fd0d9c9b84d5240` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-client-linux-amd64.tar.gz) | `c2e69794ad86799cf42aefa26f84d1353984c27eb6a5f360388c6bbfe9389ca5e1cf41a4dabf04a9d2b36557a7054a4623bf2c845508b483a982e77827f06629` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-client-linux-arm.tar.gz) | `876aea3c3ab73765efa6eb657219b36501254a66d36b98274d730035b11cba48aaa9904181afb2df403f176c19d944564455d7af7d918a81dcc83cad07cb70d2` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-client-linux-arm64.tar.gz) | `d2892e6d81af5ed77186f620a67bf2fc4358d33af8fd818eb6952114df924d834d40efd12ba91e3cce07c664f3f7e902cf0413d86335b6b40c6f53b170ccf66f` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-client-linux-ppc64le.tar.gz) | `dfbf993cad3f8b65c0addaa5f7d5e74490ef4e77abfeafc1111fea5a86a649bb5ad0300871c64270c5d6e6a779b000442fc7b56447565be18266c8088f65e1f4` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-client-linux-s390x.tar.gz) | `aa5a41350682300f1cb61230dd26f54135aa74eb537754ea8bdf7aff76a3d534c08730170ba80033c0c4d3628d22122bbd9c7b7d6768ac674cfa980cf0c04395` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-client-windows-386.tar.gz) | `6e81194ac21e37fd708371ef2df5a5c1276716dd7c9ac71023b7a53e8ba61e7e743fc93eafe0fe4d3be0ec521904dd0db98ea223dbfc3bc89536d9015701eaab` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-client-windows-amd64.tar.gz) | `79f9cdd12cb97b452fc0c66bb812eb0b78278714432c8b801ff3aef96da877fc5b6ed265bd58ae954a56fea9ec4a664fbaff50dacc76d632daa9671b05f8ea1b` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-server-linux-amd64.tar.gz) | `79d6e3f984134ede83e7ae1f9b072969a4e43d834815f772eba852c77eccc765b24a68f79514c0074cc3240c796d0be9b166957b7bc539394ded5f5c75cc9ea3` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-server-linux-arm.tar.gz) | `7737906093c273324e0598ac60742ad748023d69c1d7bd151d0643d973a99c163fe309210e3f395f600ed77a4e1f39dc6c3db945728df10a0ebce706e8ee902e` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-server-linux-arm64.tar.gz) | `ff0138d2c91098b380c057db1562d90628806a0508b71ee702bc0608fbd460518cf47064338b569c3c2ff750b69ce6c1c9e6a6649865bed6d834325350e5bc83` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-server-linux-ppc64le.tar.gz) | `b5d8f9271c9ab56a6417a54ff8a51772a465b2ef88713cea5349270c0b56c1e05e09033e69ebb4de3d73975f2ae100d56072e8af7f161f1c7f8e1d7348f25423` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-server-linux-s390x.tar.gz) | `3183d105eb334a2c82d5344b3b77d504daa5ec3310c0268e297014fe624f655febe7a7b515d28a8ffd19ceb083e5306dd2774e9b1623f2aec75983c11f913e49` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-node-linux-amd64.tar.gz) | `84a3c9e36835f8efa807569556a228c4a99582e1e559733152a6c02dd8a7b1bcdd3d5c722d34dcffbca898813b7d69cb9e1a338cbeb67a8142b91e091ee7b5ef` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-node-linux-arm.tar.gz) | `4b68a56141351dc2bf5f7368b4cc7caa4f6320bfc98d9cf45d246ef7083bec2f90273b2fee700fdcb10e5123463bf2352af515be2a0b28b410a6a4f5358bcaa7` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-node-linux-arm64.tar.gz) | `798928c0904e1b02c5fb2963e8b9402f0847866a326765d070a27a9ea45c333f004f7b39a31dee8ac7d7bb2b40717419d4b0601346c78ac5ff39905211874c08` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-node-linux-ppc64le.tar.gz) | `b417782b3d18a655ca4c52ce64eb8584e5e71ccefe6989c17d02e553f2f8e0be338ec5a0791e19439e48fe50562fda641828b73deb4e48239ae5a94dfdfb8d56` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-node-linux-s390x.tar.gz) | `3cff6b2fc22a29204c4d4dffd4e5f54e9f551f3adeaf512463523c1dfd1771316fb5da83b02a0dd1c124f4ef402d674b30bcc1b8c634ce61450f06c4f31f10db` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.9/kubernetes-node-windows-amd64.tar.gz) | `0e178894edde44dd43fe9aac94b2ff51c7ba239c0a3827c8dddac4970c361e3d72e44848af731c8b443c25a9ca3ca96b7aa24f42505fe27ccc401fc8e21050ec` - -## Changelog since v1.16.8 - -## Changes by Kind - -### Feature - -- deps: Update to Golang 1.13.9 - - build: Remove kube-cross image building ([#89400](https://github.com/kubernetes/kubernetes/pull/89400), [@justaugustus](https://github.com/justaugustus)) [SIG Release and Testing] - -### Bug or Regression - -- Client-go: resolves an issue with informers falling back to full list requests when timeouts are encountered, rather than re-establishing a watch. ([#89977](https://github.com/kubernetes/kubernetes/pull/89977), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Testing] -- Ensure Azure availability zone is always in lower cases. ([#89722](https://github.com/kubernetes/kubernetes/pull/89722), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix invalid VMSS updates due to incorrect cache ([#89002](https://github.com/kubernetes/kubernetes/pull/89002), [@ArchangelSDY](https://github.com/ArchangelSDY)) [SIG Cloud Provider] -- Fix panic in kubelet when running IPv4/IPv6 dual-stack mode with a CNI plugin ([#82508](https://github.com/kubernetes/kubernetes/pull/82508), [@aanm](https://github.com/aanm)) [SIG Network and Node] -- Fix the VMSS name and resource group name when updating Azure VMSS for LoadBalancer backendPools ([#89337](https://github.com/kubernetes/kubernetes/pull/89337), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix: check disk status before delete azure disk ([#88360](https://github.com/kubernetes/kubernetes/pull/88360), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fixed a data race in kubelet image manager that can cause static pod workers to silently stop working. ([#88915](https://github.com/kubernetes/kubernetes/pull/88915), [@roycaihw](https://github.com/roycaihw)) [SIG Node] -- Fixed an issue that could cause the kubelet to incorrectly run concurrent pod reconciliation loops and crash. ([#89055](https://github.com/kubernetes/kubernetes/pull/89055), [@tedyu](https://github.com/tedyu)) [SIG Node] -- Fixes conversion error for HorizontalPodAutoscaler objects with invalid annotations ([#89968](https://github.com/kubernetes/kubernetes/pull/89968), [@liggitt](https://github.com/liggitt)) [SIG Autoscaling] -- Fixes conversion error in multi-version custom resources that could cause metadata.generation to increment on no-op patches or updates of a custom resource. ([#88995](https://github.com/kubernetes/kubernetes/pull/88995), [@liggitt](https://github.com/liggitt)) [SIG API Machinery] -- For GCE cluster provider, fix bug of not being able to create internal type load balancer for clusters with more than 1000 nodes in a single zone. ([#89902](https://github.com/kubernetes/kubernetes/pull/89902), [@wojtek-t](https://github.com/wojtek-t)) [SIG Cloud Provider, Network and Scalability] -- For volumes that allow attaches across multiple nodes, attach and detach operations across different nodes are now executed in parallel. ([#89240](https://github.com/kubernetes/kubernetes/pull/89240), [@verult](https://github.com/verult)) [SIG Apps, Node and Storage] -- Kubelet metrics gathered through metrics-server or prometheus should no longer timeout for Windows nodes running more than 3 pods. ([#87730](https://github.com/kubernetes/kubernetes/pull/87730), [@marosset](https://github.com/marosset)) [SIG Node, Testing and Windows] -- Restores priority of static control plane pods in the cluster/gce/manifests control-plane manifests ([#89970](https://github.com/kubernetes/kubernetes/pull/89970), [@liggitt](https://github.com/liggitt)) [SIG Cluster Lifecycle and Node] - -### Other (Cleanup or Flake) - -- Reduce event spam during a volume operation error. ([#89794](https://github.com/kubernetes/kubernetes/pull/89794), [@msau42](https://github.com/msau42)) [SIG Storage] - - -# v1.16.8 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.8 - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes.tar.gz) | `405aab246b6b49fa6654f982a11af0118ca86d33e84975f26c26e2f09a0781f7578d4ac90f2c889f12c600a93cdc7c57e91e29df6f67b3822573faba889f8fde` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-src.tar.gz) | `553ad557dec7664ac910a2011c563c2f2960add05d88135a4832a601bea5afdf4145d30c64c27f2d95f3f7b33d9a401f1cd48a5fcba67ed5b45adbb493339f1f` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-client-darwin-386.tar.gz) | `b16757163f07c44dc75464b9d08bd175c2e6c2d079455c83ffeefcbb65fe17ea638d6e5ce5106983f747414f63c5c8884db8ee28d284d96a1cfdada664928787` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-client-darwin-amd64.tar.gz) | `9c8b1876385bf7c5f4cccf1f463b42ed588831e4168623e6076ae3709195398d53ab5b73c9a123d12caa26275fd889f3517b30f024038a96d98061568ee3484a` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-client-linux-386.tar.gz) | `64760d8861d12f79b78b09d8da02bddb6e3f4b069c4ba5e5e99cf057dc94741db06c91bfc5cc90e0194f4adaed52336c1676b5f35fa48e7d98c7553bb3443a29` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-client-linux-amd64.tar.gz) | `cbe62c70acd576ad3a84c34df50bb8c9f6245662b185f64064f5323da0b9d712c426f255458f6761d39fa004b22b86e773906d54f7e7f0489a02672fc0fab6f6` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-client-linux-arm.tar.gz) | `8d84e5c19299d8d7ed4b064a3cac2f9168b6bd3d867f7a1d18f20ac122a071d3513e150efa1d1763e99b2d2c4d1c27b06e8daf80ad4daa60a98ea99a9f15884f` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-client-linux-arm64.tar.gz) | `e2d1c29733ee713788e6b863f4cbbb9064db788fa2a96d4307bb59d9d96bd5caf6932a04fc6e291e1031079725452e40774647ed9c23250faa1c6edc151036fe` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-client-linux-ppc64le.tar.gz) | `54d749f7582614bc1b44ae41e001d8ec9073f764f15c4b243cbbb1d384ee4f5dc910ebb1cf4d0e46e6d5491f3834e1a793966a0b53786a76a2477948bd9baac1` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-client-linux-s390x.tar.gz) | `e3d5036e77f919a1f0270d5c8342e615dd411ed19cc766844a55872cd903892086ae50f247aea469b671cc45ebc78818023e0bb42db4d3e5f2efa9298f2e080b` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-client-windows-386.tar.gz) | `f845e73d36e222c60f04b614a800af46d1ed7b6775300cde7bd2188067a8e01896cb452d171b187c399c568cb6a87a36837488b50556fb1f053a81efd4e16a8d` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-client-windows-amd64.tar.gz) | `66ab87a9156c8ea290ccded3511e81048e1f99a8db713ad2f15c2af68ac55c74ec4aa718e7835cbf12e97be43ca9bf3e770cbae321d5e3270af42b0d778f6f47` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-server-linux-amd64.tar.gz) | `335ade6adf7704b232e0bea7c6556d46d235d0c963a04c0dda8b783c91a06a5b7656226bc977234dfbd596d43ee6183291f969110fb74dc70df1eacd4bb633a7` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-server-linux-arm.tar.gz) | `7902321cad51c10104d9346939df3f0377c71da40fccc9d459b3cdd83ce96fcdcc69dfe4a5cbad05cfc2eaa0655e4fb197fff4a04122808f06f1b62f7f290828` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-server-linux-arm64.tar.gz) | `82c57aa319237a26c5e97cf3d8394f8f71475f5c307c5cb244cd70aca5e5c87a3a1397b9d1f1ebf864a5f32cd2f0427ce38b2ae41003c08a7a145b29fa470545` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-server-linux-ppc64le.tar.gz) | `971836cda047974048f55db5478e5c250ded6b55077bb73cf05f53e7a9be0fa88ab8003064c6bea1c002818ef18f72fe72cb3e25ae89b3fe062086ee9f8d06ae` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-server-linux-s390x.tar.gz) | `6595619e59cf26725c4e5570226931e544c895e1e75dc2d9779ae8f222c68dfbaebe080f582634cc3398cd158b4cb489ff45ac412756a20755d57f9471f2dd76` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-node-linux-amd64.tar.gz) | `6b55c0d7375310ea35a12f312ae95d789ce44e590945748c6825bcc8778542865d6d2e09ed1f51af7cd1786a4aa5e47edc86690dae9abd28b11c34d570f963a4` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-node-linux-arm.tar.gz) | `a06012a6c51a66f59fd3bd0675d20c167d8530998bce630fc9390c26c9b45f59acdde01f71269911d5842591a0dab186c550d1e3cb1a0a65f2d7623f6648a1a2` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-node-linux-arm64.tar.gz) | `81332cdd792efbc9caf2c3ee57567934155c84f813476305da958d5b69e200e42a10f5d2b2e495b4c66fa127709a01e343b7612bcba2c39ecaf5fe03a284a638` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-node-linux-ppc64le.tar.gz) | `fcbf2c8cbc893bed8c949005f2a9ad2ed461d30eb15d066c37ae14f35f745e701b207eaa425a8af76de54762d3046c2d68cffacaf4e9c78e82195db586c8b021` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-node-linux-s390x.tar.gz) | `8bb5852950167ee3c9402434b661e96764e915da6aa5101b99079ab2a181525ea417b64a4ea4a19313be843fdc68f42d92d4ab577ee9d2126a65c2bd37960146` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.8/kubernetes-node-windows-amd64.tar.gz) | `d22d00291b7ae6dcda480f65c1c20cec6bc430cb4bd679bcf5328c8a9d46dd9f23bcc1bbf6bf037ed3488603a050c5346b494cf153053aa2354634c0cf7aae06` - -## Changelog since v1.16.7 - -## Changes by Kind - -### API Change - -- Fixes a regression with clients prior to 1.15 not being able to update podIP in pod status, or podCIDR in node spec, against >= 1.16 API servers ([#88505](https://github.com/kubernetes/kubernetes/pull/88505), [@liggitt](https://github.com/liggitt)) [SIG Apps and Network] - -### Other (Bug, Cleanup or Flake) - -- Add delays between goroutines for vm instance update ([#88094](https://github.com/kubernetes/kubernetes/pull/88094), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] -- Build: Enable kube-cross image-building on K8s Infra ([#88596](https://github.com/kubernetes/kubernetes/pull/88596), [@justaugustus](https://github.com/justaugustus)) [SIG Release and Testing] -- Fix /readyz to return error immediately after a shutdown is initiated, before the --shutdown-delay-duration has elapsed. ([#88954](https://github.com/kubernetes/kubernetes/pull/88954), [@tkashem](https://github.com/tkashem)) [SIG API Machinery] -- Fix a bug in kube-proxy that caused it to crash when using load balancers with a different IP family ([#87117](https://github.com/kubernetes/kubernetes/pull/87117), [@aojea](https://github.com/aojea)) [SIG Network] -- Fix a regression in kubenet that prevent pods to obtain ip addresses ([#87287](https://github.com/kubernetes/kubernetes/pull/87287), [@aojea](https://github.com/aojea)) [SIG Network and Node] -- Fix handling of aws-load-balancer-security-groups annotation. Security-Groups assigned with this annotation are no longer modified by kubernetes which is the expected behaviour of most users. Also no unnecessary Security-Groups are created anymore if this annotation is used. ([#88690](https://github.com/kubernetes/kubernetes/pull/88690), [@Elias481](https://github.com/Elias481)) [SIG Cloud Provider] -- Fix route conflicted operations when updating multiple routes together ([#88209](https://github.com/kubernetes/kubernetes/pull/88209), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix the problem where couple nodes becoming NotReady at the same time could cause master instability or even complete outage in large enough clusters. ([#88959](https://github.com/kubernetes/kubernetes/pull/88959), [@mborsz](https://github.com/mborsz)) [SIG Apps] -- Fix: add remediation in azure disk attach/detach ([#88444](https://github.com/kubernetes/kubernetes/pull/88444), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fix: azure file mount timeout issue ([#88610](https://github.com/kubernetes/kubernetes/pull/88610), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fix: corrupted mount point in csi driver ([#88569](https://github.com/kubernetes/kubernetes/pull/88569), [@andyzhangx](https://github.com/andyzhangx)) [SIG Storage] -- Fix: get azure disk lun timeout issue ([#88158](https://github.com/kubernetes/kubernetes/pull/88158), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fixed `threadSafeMap` high memory usage caused by indices that have churn of high-cardinality keys. E.g. namespaces ([#88007](https://github.com/kubernetes/kubernetes/pull/88007), [@patrickshan](https://github.com/patrickshan)) [SIG API Machinery] -- Fixes issue where you can't attach more than 15 GCE Persistent Disks to c2, n2, m1, m2 machine types. ([#88602](https://github.com/kubernetes/kubernetes/pull/88602), [@yuga711](https://github.com/yuga711)) [SIG Storage] -- Fixes kubelet crash in client certificate rotation cases ([#88079](https://github.com/kubernetes/kubernetes/pull/88079), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, Auth and Node] -- Get-kube.sh uses the gcloud's current local GCP service account for auth when the provider is GCE or GKE instead of the metadata server default ([#88383](https://github.com/kubernetes/kubernetes/pull/88383), [@BenTheElder](https://github.com/BenTheElder)) [SIG Cluster Lifecycle] -- Golang/x/net has been updated to bring in fixes for CVE-2020-9283 ([#88381](https://github.com/kubernetes/kubernetes/pull/88381), [@BenTheElder](https://github.com/BenTheElder)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation] -- Limit number of instances in a single update to GCE target pool to 1000. ([#87881](https://github.com/kubernetes/kubernetes/pull/87881), [@wojtek-t](https://github.com/wojtek-t)) [SIG Cloud Provider, Network and Scalability] -- Update to use golang 1.13.8 ([#87648](https://github.com/kubernetes/kubernetes/pull/87648), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG Release and Testing] - - -# v1.16.7 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.7 - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes.tar.gz) | `dc95ba079242d2cd0b4b48f960c2b7c097e25228a2e36f08e3a611c91eedeed2d58971bf33604d28e50aae5068f04d669a8889b619d9cee5b1e71f7b5d7f2206` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-src.tar.gz) | `d8f41693601a2876f537239b43ce30cf5162d30152ced81c63d0fc01560a884abfc3c99a632285f73ab5b6292a508c00b8f0b07d6f6a5b52ce34b4b6549a70ee` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-client-darwin-386.tar.gz) | `d80cdde0ee493da3e7780a2468031554bea1c6e9f078e2b15c2fc688472d1ba591ded2653b5c011ec6b11e5671194a166f83ae375d192df7b59437e6c3c3a09a` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-client-darwin-amd64.tar.gz) | `6379aa1a10dd6922ca4ef4e03d34c0ab02a7c955052f533c2023b34f9b79f27baec0adcee0f0da83e034de019f4c0c66738e4879505016dc47a70a57b44b100e` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-client-linux-386.tar.gz) | `07f33999629f88dbad5dad1cf56671795d003506ab2c8295ff77ad1470d887f551927dd201a625dafef3f93fb283f6b7366509c050bdfe16cdd45d779c61f7ac` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-client-linux-amd64.tar.gz) | `df4b8ef210f5daf5b75000f2ebc54c3e10d0f30da97adcd83eeef7bd3f193df440c47da73bc71e83dae8d52a3ea7251d2b3293c84594da36187d193a5d26576f` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-client-linux-arm.tar.gz) | `d33f094701da1c35c83459648beba90bf525375b82831e34a45da46ac11013b42ba3aa8270a9e3af14f6afae980b298383759e477a492980f868cc18a9510f1b` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-client-linux-arm64.tar.gz) | `9024da038c0ebfb739787e75ca2a78fff0265d4b0bb241648f76ff18f0bdd731da6617182d0f0d827668d81c27f24e95dd26102f5e297ba46a2fbd3dfb2d05d9` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-client-linux-ppc64le.tar.gz) | `362e67bf6f9d8c8dff2c7e8ef0fab6701992575c9afe640edccbe86426dfe98864be663217b7354e1ae1701c505786256b740a98fed2c08338e0caa132bb1faa` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-client-linux-s390x.tar.gz) | `958f1d9a98e2b75aebb3a5e33882205a0935f8cf812dbcd152242a295a5534b592c3ffada169f0ed183ab32f87929f5c706aa1db0ab1ec4be2d88a3819480d8e` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-client-windows-386.tar.gz) | `87e58926ffabe47b42dedcecf34212a92f67326826b6928cf8143f0baf03cc71cd4b2bcd0f01b9947742bac4ab4cbd24c5c0770aabc4be38e36481d2dd280bb1` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-client-windows-amd64.tar.gz) | `c7e7892b7845246670bb2d309c55196e4635e10f5c651de281a1f8045f122a70194a397e4ee900e1a0cd65761d6a03b76843ca8c16ddc89420df28a20bc9b999` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-server-linux-amd64.tar.gz) | `e49a47530efc893118e0042e0f0ee3d04f01240bddf7f4e1e440d0da27f822a51e9504c08cfd7b28c0d82dc43252f64ed46c9eb7f31f7c8da88098705174a16e` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-server-linux-arm.tar.gz) | `7b5f3f9a82d2864bd155339ecdc260aaa09bd0d95a594599583f57dade5ad43238b77a8d1c83a46e25a899693ce2dcc07fddbefab4ef6c3ec6266cad126dca41` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-server-linux-arm64.tar.gz) | `66a2d2b49045a38aa6a1797aba3cae676aee5e21816096f3853efe2ab050575739e01c361bc8377f2af065f6e41e8ecdf99e73fb5cf619263778aef31fd630f6` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-server-linux-ppc64le.tar.gz) | `ff8c651bce2bbd271e90f3964cb5e0674dd20054c451ccb9f542c4f8b7b75ad71f477981c6d59135d424b5ce0f69484fa9376398de9837a7cf34d58fb4a94bf8` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-server-linux-s390x.tar.gz) | `5836ee2774de947ebaa5ae08a8a86bc0213c7c3518de2461a4b5aa7e4a60d49556c27bacada22b848522a937cb9f6765272dacb2c664d4adf46ea7e8a51fd527` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-node-linux-amd64.tar.gz) | `1bc7b5eac5e36b3215356e8d2447cfd7061571dfc0a8a87d9d021da0b38e904ac2a6a8a9652adea619063aa09e6b74a014cbeb20ec67a62ced81917392dfeac4` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-node-linux-arm.tar.gz) | `4f0950d43478c8f94030fd25a30c21d9d9555465fc7183aa4325564dbd223c21038aaa02becd629ac3990bc5a4d0b7fcdec386b9dc8b60efd7d5041be6c12fa2` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-node-linux-arm64.tar.gz) | `f272c4ad555ba8d5d4fbb5650edf11c1ee0cd5bdee53df06a494108661be450d101a4c9cd4df16709d88d36287e6bdd8aa4431b7d87c79e3efddd3a8ecb43eb1` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-node-linux-ppc64le.tar.gz) | `2b0c908e2167c919b2e7e85df7160de7815949e95f4fef00b767cb931924ad4119294dc8784aed2531db2dc3ed99942fb1efa03cf4b844ad896111f50a23c06f` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-node-linux-s390x.tar.gz) | `295e451c9e278ebb8b6fa15f5df43ab127f7acf02fcaba609de2ab4b36f12077fe74716773f4e23f1acbba8a14619ed84a407834b1ee8694f0af95f5b0cf800d` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.7/kubernetes-node-windows-amd64.tar.gz) | `53af7e2ffb41a7f87160128326657d8a73549ffb22c7b6d17a4283f8f574bf60fd5c3b2a2d8ca92058b0943be3d1323f668329b3fac3b7a53ab853298c0f17b8` - -## Changelog since v1.16.6 - -## Changes by Kind - -### Other (Bug, Cleanup or Flake) - -- Bind metrics-server containers to linux nodes to avoid Windows scheduling on kubernetes cluster includes linux nodes and windows nodes ([#87022](https://github.com/kubernetes/kubernetes/pull/87022), [@wawa0210](https://github.com/wawa0210)) [SIG Cluster Lifecycle] -- Fix the bug PIP's DNS is deleted if no DNS label service annotation isn't set. ([#87311](https://github.com/kubernetes/kubernetes/pull/87311), [@nilo19](https://github.com/nilo19)) [SIG Cloud Provider] -- Fix: set nil cache entry based on old cache ([#87592](https://github.com/kubernetes/kubernetes/pull/87592), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] -- Fixed a bug which could prevent a provider ID from ever being set for node if an error occurred determining the provider ID when the node was added. ([#87043](https://github.com/kubernetes/kubernetes/pull/87043), [@zjs](https://github.com/zjs)) [SIG Apps and Cloud Provider] -- Fixed the following - - AWS Cloud Provider attempts to delete LoadBalancer security group it didn’t provision - - AWS Cloud Provider creates default LoadBalancer security group even if annotation [service.beta.kubernetes.io/aws-load-balancer-security-groups] is present ([#87207](https://github.com/kubernetes/kubernetes/pull/87207), [@bhagwat070919](https://github.com/bhagwat070919)) [SIG Cloud Provider] -- Fixed two scheduler metrics (pending_pods and schedule_attempts_total) not being recorded ([#87692](https://github.com/kubernetes/kubernetes/pull/87692), [@everpeace](https://github.com/everpeace)) [SIG Scheduling] -- Kubelet metrics have been changed to buckets. - For example the exec/{podNamespace}/{podID}/{containerName} is now just exec. ([#87913](https://github.com/kubernetes/kubernetes/pull/87913), [@cheftako](https://github.com/cheftako)) [SIG Node] -- Openstack: Do not delete managed LB in case of security group reconciliation errors ([#82264](https://github.com/kubernetes/kubernetes/pull/82264), [@multi-io](https://github.com/multi-io)) [SIG Cloud Provider] -- Reverted a kubectl azure auth module change where oidc claim spn: prefix was omitted resulting a breaking behavior with existing Azure AD OIDC enabled api-server ([#87507](https://github.com/kubernetes/kubernetes/pull/87507), [@weinong](https://github.com/weinong)) [SIG API Machinery, Auth and Cloud Provider] -- The client label for apiserver_request_count and apiserver_request_total now no-opts and merely records an empty string. ([#87673](https://github.com/kubernetes/kubernetes/pull/87673), [@logicalhan](https://github.com/logicalhan)) [SIG API Machinery, Instrumentation and Scalability] -- The docker container runtime now enforces a 220 second timeout on container network operations. ([#71653](https://github.com/kubernetes/kubernetes/pull/71653), [@liucimin](https://github.com/liucimin)) [SIG Network and Node] - - - - - -# v1.16.6 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.6 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes.tar.gz) | `cde4a4285400f92a47ced2c0bced384408b2e38c429726ea8a60ea63bd0bb6efb67282c424409ba92c8e97334708820a21b3b639364c6b2184ae4d5a3a254f82` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-src.tar.gz) | `1d534f5f014e3a0d876932ecf932000622c8d435c056e553630898c017fd19cfd9408ad887a61c252f232bbbd5d7535b2a0f8dccda362ca1468a5ef1a3b40602` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-client-darwin-386.tar.gz) | `6f83f4a85110d778120da77c4ae9bbbd2ad3cb39ff2bdeb4966452fdd8e27f73f287a7d2a7aff82dcf45de973d655cc026cb874a3cd63dbbd3a939db12327a74` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-client-darwin-amd64.tar.gz) | `7708012605e73ee16edb9124a714571ef943a702eb8e7e20a63932d75a56bfcde46020f0babada681cb2858bb4dfa30749c6b00534a6a70e0d682634507887a4` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-client-linux-386.tar.gz) | `9de5684263db702f42a38ff770f35601118320edf8e9d48887b24d55af84571e7e13baf68e2a64ec2a349f740a9d8dedee882b144ed46dd86a8fb33993887c01` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-client-linux-amd64.tar.gz) | `fa078c6e66c7fc7ec5a7551c714b14b44b68817d87d8a4238a17f1452a382cfc6455a2c3468ce45ba4edf473036af7b92668ce1ba6df05c5dbd902f6f308d5f9` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-client-linux-arm.tar.gz) | `7f0ac2703407e159fee2159056127a45e9c4538763ebb69b5085e3edece22b31d0fdf2b7b1d3febc2d495c7e187033638d8f721e052f510dbd4c1a18435f5764` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-client-linux-arm64.tar.gz) | `ea83f7c5b6376437d1c5d87dc833e78b4931b4b3b1fc2a4e0a0076483a850c1cb48099ab53f414ab0e38c206ead4cbbfb08c45871b928823b77a6d90fe72867c` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-client-linux-ppc64le.tar.gz) | `29038b137eb9e00767e3faeb2d72f45c3495c273c88541330ad870089ec868c96ab7ce826c059858760500a4bbc0623ffa434b42ff528f1984eafa3223e5bd2d` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-client-linux-s390x.tar.gz) | `f7a31fccf23c3ba114efb087facf2ef729a3c5288d0e53da550a25c0756554e7740e6ba4d058c7e0098b5cebc42298ad3d8237b94c395f2adb37c8de552c8c07` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-client-windows-386.tar.gz) | `de14a4a163bcd6b38edadb22a440d9fcd70d69ac4fa81b11d00c860d8bfda4698be588f3823234dbae7ea6195e7968b510065f2111d70e274fdf667a5aa7a648` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-client-windows-amd64.tar.gz) | `c209002db706691e3a44bdf65ed99d36878c0fc59df0121c74a4e32f35a701bdd30fe3c5ed3424b1e85c94b7df41ec657e93f60d2c9b5ce9115250e18f172d42` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-server-linux-amd64.tar.gz) | `eb647feb475550c3bb3841a91a1512b0836d0cee9eef0cda3292fe182307caa27be8a589dcfae8ad7cd70d0b028ea3645a36e7d486a03bcb84d351d08c5e79b6` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-server-linux-arm.tar.gz) | `cd1994e92768b5f879ff856ccb6f688646d2f6011c543192b1ece16a25e585b2baece4bd74341d95daa2c78d60fe6c0b0d96e8ea8691bd109529290770438115` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-server-linux-arm64.tar.gz) | `6119311e77d194b3daa81d71fe3e2bf8762ea9c48417215b9a52d2b351c45751b4d4222afb21ea33f205451c6e183ccb224bf60b939a085f9dcb7c321e855407` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-server-linux-ppc64le.tar.gz) | `5f6ff761146ec59cf118caf36c89545b5ff3c6a3536a5c7a275da365d9dbf420a80af45e809830f4d27e72b2d94b62206c6e3c229152b4dfe80eb205f2278b7f` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-server-linux-s390x.tar.gz) | `7d35c984bfbd520078785d2164d5a96e27953536adad1f7b0f39f3f6fe82461dcce8f0fec5fc13720446a9a4380288ae7cee523632aa8e2dd2e4a053c8aeb3b2` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-node-linux-amd64.tar.gz) | `a39c7ab21f58f7d47ec17a8ecdb6f08a3f6302ea6dcdd54fee87660df4325cc3557055a60da190f545b1c763140eceaa44bfa5ee86c24a8062a5652bb441e62b` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-node-linux-arm.tar.gz) | `ab7ea3164f83a719a6dabf701e6673b5c082fe9b26a111fb354eb772a355d077c5ff992331683b22b970706d4badc2a35bdd32b4c1a17e9fcb0a40f48925aaab` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-node-linux-arm64.tar.gz) | `5c4f788f37d48fedf95ea8ed9e5778219c2847e40e63de06b5342aa8564321bdcf3dc224cc9bfe13526a31ee3d1353230abdbe59bc0119e5f231a48e8264df17` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-node-linux-ppc64le.tar.gz) | `2a67a8c2b0455077aa35a8b949854a27a9ce7c36f169a75ecec638fba9115eef4949f6c6be9f0dd3f8dc1485b47dc5ab5938d77391b921edfc224d9e774e770b` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-node-linux-s390x.tar.gz) | `cced562021cf512967fe2c3ee169d6f20c00df242b47d4a3d7c8dce47da3a622bcb8f50cf10fa92e6b9a1e2f345487d58f1926188cab9df09142fdf26078a88f` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.6/kubernetes-node-windows-amd64.tar.gz) | `cb0ca5f0b7e051409d8da99c8d8270d4fb7565e85f963dc55d8874f9d686f9050ffedeb84a0b82a26921ab75ff87d854c7b6849231f34c8cdbae275cfec15189` - -## Changelog since v1.16.5 - -**No notable changes for this release** - - - -# v1.16.5 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.5 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes.tar.gz) | `574c4abd42d3640eb98bf4144afc64bbe25b752235d3398e3717a64fa505b5848e3e0b7a31cbea13d936201844c4f6385006556cf8c191f7bdac638a388345b9` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-src.tar.gz) | `b85014dd97af562f966505cfaf7346aea61ed4a027d58655dc0c6148f2893e8f4309465fc0f66e3abc1e394c34f64754df78229384aacf529e834b026b84f96b` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-client-darwin-386.tar.gz) | `becf76f632c6e1cb65074e0a0f9b4d978d9f2c6896faca29a46d4059d4ee5d8663c44dfc868157a1549c333c010015cb91fa1299c224c38af2ee49d84801bfa2` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-client-darwin-amd64.tar.gz) | `b073fbe7c435b8498e1a154ba4c50aec7bc75956c3ba3d9679ecb3e172716aabf3e6190309ee508449efe0bf01eeec0bccf4620d0cbd73323e6af9ba09e65cb3` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-client-linux-386.tar.gz) | `e6462531b8e2df8e04aae1e75bcf78cdc5879ff90d09438355388d14cbee5b0d1895c1f9cfb8acfe50cb0aa246d8a900050b52b77383e76497417d810f7bf7d4` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-client-linux-amd64.tar.gz) | `d37424d8d5a275aa949d9b92d448643e4951ae16458135f44f2f4e3c66f379a4fe53e4d46bb0abd07623bf7b8b7bfd7bf9de019a3077dc28e26d13b0533c5559` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-client-linux-arm.tar.gz) | `9b47ed83fcf48355b7ed53619aa6cb32401e367de839f71d316b9ce52000180a358547bf03b58e1cfb763c5bafb6c8841c1b4bfbc6ab8428a51024323549270d` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-client-linux-arm64.tar.gz) | `762c8a4f65b370c4707770cb211014d4fe2e6f0a19eab883bb06a36a29cd8db3e30a044a11d327d11140b4fb1f555849730c71b08b469f9edc13def79df0cad3` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-client-linux-ppc64le.tar.gz) | `a84010df85b0bb4e8f3e75ad2566fe1e5378dcb812cbd2888c9c5f81640db849b0f82f5ebac3d585e67c37b2c6ec74d425870a66a89e399a64cf59d414afbc6c` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-client-linux-s390x.tar.gz) | `268dcae0bea43cc91f7eaca7695ffa037875de9f0dfa723667dad24dca569083a609f8873e4c4491ecbdba902b61ec3c39a223ca5e5c4455142109fc5c9c428d` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-client-windows-386.tar.gz) | `90895ca4a375fbb4f638d29cd5fb6ea7a49bbb8a6d608fbf4474e99a5b82903a0b7a71fb7234d9abe410100616072ac5560bf5a6698bd41cb23e7c0fa5beec88` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-client-windows-amd64.tar.gz) | `df6655957b8f8aa0e2baae25b7018753a9f921b4b08a509d9ac22fb299151fe04e5aded9196b7c5b0e5d42a02791d7e973266825fa938479746052f2fa1a7c02` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-server-linux-amd64.tar.gz) | `673308a4a5e4f01aa45d44f7fdbb4c66f7158f47e74cd0f8dd2b0877f18dee71b71973ca94e2a8c075014a14542c680d4b0c43cd9794245965577e929ee0b736` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-server-linux-arm.tar.gz) | `646cf65bae430d78e201c3c4a5c1fbdbc5361cc07e4271b3d04f28d5838060a7f5e47f1bafaeac26862d1a484ec6d2f5c4ae1163609ccf0c4b2a640ebcb7198e` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-server-linux-arm64.tar.gz) | `c0fd58e4fb4fb923a5d9f421fb3f574940c99e71343bc7bfa06b24be45b4f4053fc6fe1e6ad1bc6585dfd54a4350864edbec75f376dbb5609fb158da122676ad` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-server-linux-ppc64le.tar.gz) | `3ea6a69d4ca2254f0e4df61e57de9cffdd0e5fcd1fbba5b3772e969f54f1399847c3f580a3f7573d7a720d066122c504f8093ca0b8fcb61b2e7040dd7b99d174` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-server-linux-s390x.tar.gz) | `a00cc44fa9a3ad320573cff4142a9edb80e7c1305827ba81a4c6bbaf92870215d05b63280de721d3d8015bc721d2e5cbef67e23ba949d36c361cb4e519d6829e` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-node-linux-amd64.tar.gz) | `5ea212cb4cb06f099639d5a573e3ac3c4df38d12a76695298abffaedae6a7c0259b974e7b185f67fca39791cedef7e827a908e0c2e0f6ead87010ab8d7bd0fe9` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-node-linux-arm.tar.gz) | `173c7aa6268747f594d8edf355fd392dcc29b8685c002f54e8577fd6797cc8bf8e4599e728eb40b9d41239b420596cb1acc79a4e6430d1d51f62b002753e15b7` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-node-linux-arm64.tar.gz) | `d302eee8cf5b851db3b3d7ef5ae1e1f2f8b930d44d03df94507d54ba04f0a9f1960a387db17014e815043f77ed66477037b4602896030bbb2b7421be000db981` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-node-linux-ppc64le.tar.gz) | `284afd70e3bd37bf4dc1967ea04f7584e1f9387282416940f5ab720f626e070dc0a5383c90035a1280294dc2e4097650f896f2dc40c47954795348ca9db8d173` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-node-linux-s390x.tar.gz) | `a600f3872c8a4a8207e384792286da96f3fee58ba488fa3491901d90e3a67abe2d1c2f3642b1551593e0fa7364a01b10aa25b49bddfd97df8ac642583842675f` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.5/kubernetes-node-windows-amd64.tar.gz) | `fc8267a1ad5f470b6a630f2b6c1bf812cd41d86e7cc77f938f07d7cb88ec795b24b271f3b49cffe9762fe7a507fdcdd7b59ca36afb40466bbf44d9bda01d1cf0` - -## Changelog since v1.16.4 - -### Other notable changes - -* Fixed a regression where the kubelet would fail to update the ready status of pods. ([#86191](https://github.com/kubernetes/kubernetes/pull/86191), [@tedyu](https://github.com/tedyu)) -* Fix nil pointer dereference in azure cloud provider ([#85975](https://github.com/kubernetes/kubernetes/pull/85975), [@ldx](https://github.com/ldx)) -* fix: azure disk could not mounted on Standard_DC4s/DC2s instances ([#86612](https://github.com/kubernetes/kubernetes/pull/86612), [@andyzhangx](https://github.com/andyzhangx)) -* Fixes issue where AAD token obtained by kubectl is incompatible with on-behalf-of flow and oidc. ([#86412](https://github.com/kubernetes/kubernetes/pull/86412), [@weinong](https://github.com/weinong)) - * The audience claim before this fix has "spn:" prefix. After this fix, "spn:" prefix is omitted. -* Fixes an issue with kubelet-reported pod status on deleted/recreated pods. ([#86320](https://github.com/kubernetes/kubernetes/pull/86320), [@liggitt](https://github.com/liggitt)) -* Kubernetes 1.16.5+ now requires go1.13.4+ to build ([#85019](https://github.com/kubernetes/kubernetes/pull/85019), [@liggitt](https://github.com/liggitt)) -* Fix LoadBalancer rule checking so that no unexpected LoadBalancer updates are made ([#85990](https://github.com/kubernetes/kubernetes/pull/85990), [@feiskyer](https://github.com/feiskyer)) -* cherry pick of [#85885](https://github.com/kubernetes/kubernetes/pull/85885): Provider/Azure: Add cache for VMSS. ([#86049](https://github.com/kubernetes/kubernetes/pull/86049), [@nilo19](https://github.com/nilo19)) -* Fixed a bug in the single-numa-policy of the TopologyManager. Previously, best-effort pods would result in a terminated state with a TopologyAffinity error. Now they will run as expected. ([#83777](https://github.com/kubernetes/kubernetes/pull/83777), [@lmdaly](https://github.com/lmdaly)) - - - -# v1.16.4 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.4 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes.tar.gz) | `c81e0e69b81b2dcd3d2397bc54756d77a8d41b88adba12eb5a1ffe71672554ecb1ff97c3979d0a81a218477440308860f9076124d6c0a3f0670ea21759a6621b` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-src.tar.gz) | `b27c3946a6b466e5c1c0f1ce25d6af037ee0842d52be424d75ccfc10f9c7b6acc061b03d327ddd1889c0ec11dd46ea0872eed8d428013ae1e69d712b32f78c2e` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-client-darwin-386.tar.gz) | `26d6708b788a8524513897133199b7c0737d0578bdf944692c9393f635fe8f0a202a147eabf33748ec7e849045f5a0a19ae0ff1b04b1de7d565dd7fdec797a08` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-client-darwin-amd64.tar.gz) | `d4efd604d166f12bd860888dfe379490b64e05ff615855e45314ef405a8d5fa6dc51c1da3abe20b15b155dc7742ac2b929d32c66c3de3e5b497b18685f5fb9e2` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-client-linux-386.tar.gz) | `8366ed646ab3a387341455e3059ea02f5238e515303969155d48d735e4af9e8cc47eb9eddca370c854cbe599c4615a77c46dd0be1f893dd252dc1d3246c6304c` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-client-linux-amd64.tar.gz) | `30aa7aab0f82b1ad20f53ed693666bf39a84c3891549c58988de8e0106f4e5f46725f78de0d149ecdbb6e6f48d8ee7891d2b64c81a9a13cdae41ca6b147500b5` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-client-linux-arm.tar.gz) | `61eb1750800f07b4f8c41da9f87e3fed5c6a42543c46031087ddf334aab3baa413433f66cc3314b62ab23aba594811dc1e363b2b56d9c0c4413135f33b4e1343` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-client-linux-arm64.tar.gz) | `ffce76381f999ccd51383321824404ee240d69374720077fcd2fa5b0b523584f1d4504538377f3c9a07ee4ad38ad2bdaf5ba1b80c1dbe3998f07a386ea26ca5b` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-client-linux-ppc64le.tar.gz) | `c76d6250028122e2e63ca2ba447b989d4bb476c0eddfb0d0152d33a11e00bf189fd954456fb6d4508505523d8d13f2218878aafba62b114244cd10d328a88a0a` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-client-linux-s390x.tar.gz) | `cf293f9c8c02201e143aeb3eb6157621156883057b187d0cabc0ec196b7690eeac387dc306053b14c78657cd880a7e775bd966395102bba6cb8580a717b49bb7` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-client-windows-386.tar.gz) | `189bd08bb875d5b98bdcdc45b0ae498f52bc438bc59c45080e280349ca92f77a1b05d0677d52421b89f4d1123585f6c9618f97016eaad1d64eb4ede6922facfa` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-client-windows-amd64.tar.gz) | `ce437278896a75d0f5d13f318b59b6f48f39dd04cf70ca982fe5fe9edf4da23691b3993e5dd8fde1acd7aff8d599ac27d78887fd1253b80a9b65c14f7833eac3` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-server-linux-amd64.tar.gz) | `ed3a3130c34aff712d8591ac2119fe4f6a8ea430afd1d88fb987dbd6f4e61f1a1d734d8491348ee4fd71ca04f2592accbd9d2666d2c816949c8111dcd9e99233` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-server-linux-arm.tar.gz) | `60d537ae2a94f7e3573ee5085eb14ef715a53b4c71516dbbdefc483a809b16fec26d8a112382a35bb4b26ef8c11ed985529d1d7dcc50a4526ec9ffdcd43648b0` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-server-linux-arm64.tar.gz) | `afb0f2ac7bd92ba107d9cffc9d3723a732d3c51d8b0956af7cc243dc74bee496f7995de75fd9cc758b2b4cd498db8552c3a7ac5c44a6c57fd97a6728a37b4a85` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-server-linux-ppc64le.tar.gz) | `54a9d9c48259718fbe1b49cdd6ea699b8542633bd2ec676ee13e725104064ab7525aefa712b283177dbfc2c71bda2348344fa229c737b1ce35cfdf0aa6c6dcc1` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-server-linux-s390x.tar.gz) | `15525320b414ab13975c08fefa3272928615f8c3898780103fb33f6ade4342e478a566f31b876b78484fb06e39a2ccfbc9986f781642414b7760fc295f1eb10b` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-node-linux-amd64.tar.gz) | `c25fa6dcd8a62338a4fa748ae6be4c6501733d6012fffd73d61f2d7c9322d6fa8fef18c149f6ea9232bd65cc4d31f8500d25e6c9dc36fd8b0606f934bc5a7d40` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-node-linux-arm.tar.gz) | `3093693fc1af4e319d0fe17700e5ad79a0780db03893e201188e7c5f4ad501761b90ebec251eb63c5a2355ea1d922e04172f86bebd560b07f20d39a72b4fea70` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-node-linux-arm64.tar.gz) | `93d96b1cd33ada44c8d2f97775edc2782c042d88389b556deec04e8876cc32a726ead5ef4ed3342fa1af2cb23927c3fa43af440d685c340146de6f122c4d5f03` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-node-linux-ppc64le.tar.gz) | `7b607c0afd4cc373d57efdbe88b0e82d087c790d35bd1b98fe12b0b9321dd10d8189cdf9b3c5cf36b674aaeefb2bc6234dde2f83d9adfb8a9c8160fb26335d86` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-node-linux-s390x.tar.gz) | `43120a2a3b741ad2f40e17156963a5cb0af49190e820ce75808fa1c3969e1dfc96d509a591c328fd6c037e2b4f6380bfd6f0dad5c2675eaa92d635cfe3f74c49` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.4/kubernetes-node-windows-amd64.tar.gz) | `fc769cdcbc5eeac8ad6776864a21bc75d2d1cfc682d0c0c51128b3cfcadf8cb14b815c29e545491028c99c35c6ab5a2a4dbfb9e462a92c5d1bc2ab98f8c70a65` - -## Changelog since v1.16.3 - -### Other notable changes - -* Fixed issue with addon-resizer using deprecated extensions APIs ([#85793](https://github.com/kubernetes/kubernetes/pull/85793), [@bskiba](https://github.com/bskiba)) -* Fixes a performance issue when using server-side apply with objects with very large atomic maps. ([#85462](https://github.com/kubernetes/kubernetes/pull/85462), [@jennybuckley](https://github.com/jennybuckley)) -* azure: update disk lock logic per vm during attach/detach to allow concurrent updates for different nodes. ([#85115](https://github.com/kubernetes/kubernetes/pull/85115), [@aramase](https://github.com/aramase)) -* Filter published OpenAPI schema by making nullable, required fields non-required in order to avoid kubectl to wrongly reject null values. ([#85733](https://github.com/kubernetes/kubernetes/pull/85733), [@sttts](https://github.com/sttts)) -* For x-kubernetes-list-type=set a scalar or atomic item type is now required, as documented. Persisted, invalid data is tolerated. ([#85385](https://github.com/kubernetes/kubernetes/pull/85385), [@sttts](https://github.com/sttts)) -* Fixes a bug in kubeadm that caused init and join to hang indefinitely in specific conditions. ([#85156](https://github.com/kubernetes/kubernetes/pull/85156), [@chuckha](https://github.com/chuckha)) -* Ensure health probes are created for local traffic policy UDP services on Azure ([#84802](https://github.com/kubernetes/kubernetes/pull/84802), [@feiskyer](https://github.com/feiskyer)) -* fix vmss dirty cache issue in disk attach/detach on vmss node ([#85158](https://github.com/kubernetes/kubernetes/pull/85158), [@andyzhangx](https://github.com/andyzhangx)) -* fix race condition when attach/delete azure disk in same time ([#84917](https://github.com/kubernetes/kubernetes/pull/84917), [@andyzhangx](https://github.com/andyzhangx)) -* set config.BindAddress to IPv4 address "127.0.0.1" if not specified ([#83822](https://github.com/kubernetes/kubernetes/pull/83822), [@zouyee](https://github.com/zouyee)) -* Change GCP ILB firewall names to contain the "k8s-fw-" prefix like the rest of the firewall rules. This is needed for consistency and also for other components to identify the firewall rule as k8s/service-controller managed. ([#84622](https://github.com/kubernetes/kubernetes/pull/84622), [@prameshj](https://github.com/prameshj)) -* kube-controller-manager: Fixes bug setting headless service labels on endpoints ([#85361](https://github.com/kubernetes/kubernetes/pull/85361), [@liggitt](https://github.com/liggitt)) - - - -# v1.16.3 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.3 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes.tar.gz) | `17618d2ece64346d03db6a6c31eb3c38bbc3aa206005e99032791bdbe7dad1f401bdb9d707995ff83b658dd1ad59d9b53489e5ee45b9f209edf09b35326aac4a` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-src.tar.gz) | `e51d3418b006fb28039dc30095333f9e362c785eb27778554005a83e70860b33b554f61ddb6dd83e05d1ca0dda4c6f9bf2812347109e83ff72ad4d355bd22546` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-client-darwin-386.tar.gz) | `15d3316afc04ae959658cc4489347b1e425df37ce7438e79357bd7fde783766374315c4c6e4ea8a94dab8d113c1871aff70de84e3181d08c37849c4971f6ad7e` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-client-darwin-amd64.tar.gz) | `82c2af675d77dea335d99247df9136668bda81d64da82a949543369bb31e0bc2963f9de83cb34174b01a93f6a1acab3459fb64621e771e4f7362c090ac2a256d` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-client-linux-386.tar.gz) | `193ae911e58fa61e001730cfa8018cb77b672b77cba6b3916bde53a73add160641085176d8bc60ea25e22f7b9a8d2a9ec17da139ec234771939cc55d5b2c0931` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-client-linux-amd64.tar.gz) | `904604839bbf46c11c7934f6f906adbc968234044b9f3268b71c175241626f8d4076812aca789dc5aa2f85fd25a384ad779638231d4d94f3f3c6d043b5d9f062` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-client-linux-arm.tar.gz) | `016e9a5662afa27da5ffb055fbf2bf4135b8521deb6bd3dea565f250f611f1690be9d6ea18c3fd1053c71c03213bc53441d88e70633192a443b838d353783278` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-client-linux-arm64.tar.gz) | `2ee032304114556bf3ab78c000f32ab9605e294030d83edbe013fdeb19eb49283d8b8a9c120e2d076f394f2e0d74015384754e6876e62f68ec515378ddbce77e` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-client-linux-ppc64le.tar.gz) | `07299344bc4c2da573b2bc4b2fa9c7a60358c4a591d711f8a9ce45768543fe678d1f15412db0fa02b777964cebcee2bcf9dea16d94a97754eac163b77cb6ddc8` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-client-linux-s390x.tar.gz) | `83e6a17b86740199788b48e94534ea6cd08c9325325a7f75a7073771a1de421843c2898ef385a9d8912d7cfd99c09b60a4bb4f3c6220c8f212c08a72a85661b2` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-client-windows-386.tar.gz) | `bfc6ff8fcc7e1219074df6db5d42fb38af4b6c10e36fb0fd7c6d8aa72fc01cbca5658d8c6a9882ed234cc20652511f551c5f59d77a0a46fc2b27f96e6f4e385a` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-client-windows-amd64.tar.gz) | `ccd9d4f53152f1c09cb5c2194892afaf93faf7bfbbf0b8ea0d6c333f121593b7c7d0039246af9234b684ac8501e4f778de8ddf02d4b34ca191621f7c74c811ba` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-server-linux-amd64.tar.gz) | `040f6bfb78cb336d2d23360c0921ef7e008561b2f10bed3261c33811d1d818693cd24dcb5bf52cbf854f4209a8968a5e07ff8356e3e061a4db14623469098e5f` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-server-linux-arm.tar.gz) | `e8d8312f44ecd38d8d88300cda22ef364a637af4a666869e0926bb25008b31eceb5cbdc4ba2fda9358d996c1b9776fe4ae49693b3e95237bd82c2ec7898b4249` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-server-linux-arm64.tar.gz) | `39e7d76e88da1ac712faf6d61bb980c0a4ac01d4996bb559cc6a9c132105a5b073d7833d431ba44418b4981a190ff613463cbf16f25e4ce38a31f43191842680` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-server-linux-ppc64le.tar.gz) | `72c418ade3291911da4a654ae4c4a88f7d02ad1608d9d9721e9ce7199c4dc07090c9f53b6350911050f25c7e583423ba9e985260e94982e217119b2b0a7be501` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-server-linux-s390x.tar.gz) | `7405ca92726fb8e4083ee66a996df98e37c1a04b679634fadb0f2e64aa7e264a5e55b1149fede58d7dc693c71551e31abbc1e2bd8b137686debd2091ce9059b4` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-node-linux-amd64.tar.gz) | `6074a03879f385fb3411b024ada7e1d2b8ae89990fe4f5a9c6046424cbb567afaf24264a003157b682c91eedcbd09bca75a51265fbdb3a948930fe7494c997e2` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-node-linux-arm.tar.gz) | `277432b212c98e7eb8020b17745d4c90dbc6c359148efc38e41e0836085eac4655effd9e5a694162d61ee31adc8eb1e9f6196fa9f05d898e2f4d596a1e097055` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-node-linux-arm64.tar.gz) | `6354e8862e60d6c6d60a115dd6043beed8205991c833716426071dc70d3658da1ddc9b23c4e16cae0410a86ea82eab3240f2a5123e753ff55a151e6f96db436e` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-node-linux-ppc64le.tar.gz) | `2e5bdf3a64b5387fe60aff1b05ccf0f822a3955815576f979e2e8b7673373c49b602ab53fc1a63dd4467787e9b62f3f369f4a656812078709be795e85aaf253b` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-node-linux-s390x.tar.gz) | `44632772ac2e13b91e9b04c05c42522f8fdcf574daff6e98719724ed0e07c44e1d01c0f047bf462e00f092a21b617822063ee6cc987c531fc7f0980c6b1319ba` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.3/kubernetes-node-windows-amd64.tar.gz) | `eb6128b0aa1001b0fea5d458692c96191bfaa51c4a8736a9c370e38fffb9d72a28937581cf79a1ea529058f039a08a3b8a23e7372c7f8a8265a5f9acd252a4c1` - -## Changelog since v1.16.2 - -### Other notable changes - -* kubeadm: fix skipped etcd upgrade on secondary control-plane nodes when the command "kubeadm upgrade node" is used. ([#85024](https://github.com/kubernetes/kubernetes/pull/85024), [@neolit123](https://github.com/neolit123)) -* Fix kubelet metrics gathering on non-English Windows hosts ([#84156](https://github.com/kubernetes/kubernetes/pull/84156), [@wawa0210](https://github.com/wawa0210)) -* Bump metrics-server to v0.3.5 ([#83015](https://github.com/kubernetes/kubernetes/pull/83015), [@olagacek](https://github.com/olagacek)) -* Bumps metrics-server version to v0.3.6 with following bugfix: ([#83907](https://github.com/kubernetes/kubernetes/pull/83907), [@olagacek](https://github.com/olagacek)) - * Don't break metric storage when duplicate pod metrics encountered causing hpa to fail -* kube-apiserver: Fixed a regression accepting patch requests > 1MB ([#84963](https://github.com/kubernetes/kubernetes/pull/84963), [@liggitt](https://github.com/liggitt)) -* kube-apiserver: fixed a bug that could cause a goroutine leak if the apiserver encountered an encoding error serving a watch to a websocket watcher ([#84693](https://github.com/kubernetes/kubernetes/pull/84693), [@tedyu](https://github.com/tedyu)) -* azure: Add allow unsafe read from cache ([#83685](https://github.com/kubernetes/kubernetes/pull/83685), [@aramase](https://github.com/aramase)) -* Add data cache flushing during unmount device for GCE-PD driver in Windows Server. ([#83591](https://github.com/kubernetes/kubernetes/pull/83591), [@jingxu97](https://github.com/jingxu97)) -* Fixed binding of block PersistentVolumes / PersistentVolumeClaims when BlockVolume feature is off. ([#84049](https://github.com/kubernetes/kubernetes/pull/84049), [@jsafrane](https://github.com/jsafrane)) -* kube-scheduler now fallbacks to emitting events using core/v1 Events when events.k8s.io/v1beta1 is disabled. ([#83692](https://github.com/kubernetes/kubernetes/pull/83692), [@yastij](https://github.com/yastij)) -* Adds a metric apiserver_request_error_total to kube-apiserver. This metric tallies the number of request_errors encountered by verb, group, version, resource, subresource, scope, component, and code. ([#83427](https://github.com/kubernetes/kubernetes/pull/83427), [@logicalhan](https://github.com/logicalhan)) -* Update Cluster Autoscaler version to 1.16.2 (CA release docs: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.16.2) ([#84038](https://github.com/kubernetes/kubernetes/pull/84038), [@losipiuk](https://github.com/losipiuk)) -* Fixed an issue with informers missing an `Added` event if a recently deleted object was immediately recreated at the same time the informer dropped a watch and relisted. ([#83911](https://github.com/kubernetes/kubernetes/pull/83911), [@matte21](https://github.com/matte21)) -* CSI detach timeout increased from 10 seconds to 2 minutes ([#84321](https://github.com/kubernetes/kubernetes/pull/84321), [@cduchesne](https://github.com/cduchesne)) -* Switched intstr.Type to sized integer to follow API guidelines and improve compatibility with proto libraries ([#83956](https://github.com/kubernetes/kubernetes/pull/83956), [@liggitt](https://github.com/liggitt)) -* Upgrade to etcd client 3.3.17 to fix bug where etcd client does not parse IPv6 addresses correctly when members are joining, and to fix bug where failover on multi-member etcd cluster fails certificate check on DNS mismatch ([#83968](https://github.com/kubernetes/kubernetes/pull/83968), [@jpbetz](https://github.com/jpbetz)) -* Update to use go1.12.12 ([#84064](https://github.com/kubernetes/kubernetes/pull/84064), [@cblecker](https://github.com/cblecker)) -* Fix handling tombstones in pod-disruption-budged controller. ([#83951](https://github.com/kubernetes/kubernetes/pull/83951), [@zouyee](https://github.com/zouyee)) - - - -# v1.16.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.2 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes.tar.gz) | `9e21ab6317fe209dabac72444273b493f5f7639f73c489cc233da3a0205a93f8779964fe2cf2237bb6ca7535560c7c8ac48e25e75a1fbe97dc5b51f248ed7eeb` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-src.tar.gz) | `2e52029a8669f51020f689b0da481f56ab922ecd2c4495e37cb8456e9b10fee50f97bf9faa6a3bc947e4142aa4e5374d7f905a22e5f18830610eacfdf47adbc6` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-client-darwin-386.tar.gz) | `6424b3047c5d7557b6c5536f29139bb6f71e4357b5e181d62bfd5fbf7d5575c9d5eeeab531b0afcc72ac17dd6609162bebc1045932ee58cbeb3093a4107cbf3a` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-client-darwin-amd64.tar.gz) | `791d2a4f965130ea1d7033f807b29015520afa317f97643f27480a6530213fd3fa06817ba9ce04e81f843b8420f05baa25e597e5880f99cc2ffbfc8b8ebf18cf` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-client-linux-386.tar.gz) | `fd727fe3200975f71d1f5b21991e5b8d2471e92dc3185df29b8ef21a9aa87d270baa1bd2f9f2dbe61abe9e9541ee806709d6ed08aa13254a5953ddc1f1ddb5a6` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-client-linux-amd64.tar.gz) | `69bb92c9b16c0286d7401d87cc73b85c88d6f9a17d2cf1748060e44525194b5be860daf7554c4c6319a546c9ff10f2b4df42a27e32d8f95a4052993b17ef57c0` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-client-linux-arm.tar.gz) | `f846f6018eb3d82741e6d2e8fd2f9f7ca8768ead56c3e2c330ba7e7dbba3209dd66f793b37d330134d3e8f38a03d6492e0054e55fcf32f74743b7b26f3159210` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-client-linux-arm64.tar.gz) | `49cb3495fa8bbe64cefdb9aab83d4cfbe6a0f3a0e58b1685a49244df02e5ee8bbfaf0be133f5cf5231b1470bb62bd699cd6aba8072cb6ea3542f3ccfd42d3813` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-client-linux-ppc64le.tar.gz) | `35a8b25309150cf5e1dab2af1d5118a24d296e21cdaf4bdec615badbc27a109ffb8b0e1cd93439fb728ec4905178eae2eb9d2ec2760053211b495c103d76fe3b` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-client-linux-s390x.tar.gz) | `ffd5ab012d38b7a7b9e0acd8339c30545a60bcabba5642f5020464846391ae41930e84c0103231f850f0f0c86e064c18f47bff95ccf11b410c0216a4d887b2fb` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-client-windows-386.tar.gz) | `c04d33b31734c7b25c54daa361986fcb745178320daa54d76b7627c475346a87c65443f7b139e1c86436b27eb9d10ed4a61ba5a64e0420bb6ce2f68fbad0a1b0` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-client-windows-amd64.tar.gz) | `e81fcf83523dd1dc79de7b498df6115465eb83d31a400853cdf143870a281322f24be5609d0c541810f90047a3c4e75530b9a6e872e51ed00d268530f2ed7ca9` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-server-linux-amd64.tar.gz) | `4aa3da6d146db878f4605ea6334925e925268808856f482ea7f9d131dce76ee30d4ba077a6b35de34a68d8d9ca005cccd2e7e4866b775c1f7eaba1320a1b8ec5` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-server-linux-arm.tar.gz) | `0a9cea07a1172038d300277f1d305d99b147ae5949df3dd63856944cc0e4724105a0d79bf9ea39dface923d794b71e9f40d4104218167e56096a9e82a422864a` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-server-linux-arm64.tar.gz) | `b1aadb87ff310aec7292df5386613c4c0036c0e3c20e0a4ab7bd3d5eea8fff0116c8b8b47289e894950b249be4207daac58449ec9a587353873890b47217ecd8` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-server-linux-ppc64le.tar.gz) | `2aecda7fb53efd23c34cfe90ae37d55efec513996573c9124d9bf94809ea5a86bcd786e84d646039fbaff2e42d7e8f9c5db179beec3fac1f0a420920c93dce35` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-server-linux-s390x.tar.gz) | `74fd3d5dbedac211570ef011f14e98d37848587b670038c69354c0162668aa2c6789835a5dbfc82f43fb9662444756f974de75917f75f59ab51e6ae9183e5c20` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-node-linux-amd64.tar.gz) | `d1e139006e1ce6b66a1c0b9dd90509db712e5e024e1c5a4c0a1bb185211dd138cbcf201e6a9cdf7df9b78b6817523da23097c8396c0afb98481052447d329cc9` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-node-linux-arm.tar.gz) | `5779c23d4f77edf5d5c3b8bb55fd190bf180f13c782e44a50a96572477af30008685c4e670c07ceb56c8e64390be7e7cbf14a9b25c894c66f90131a993bda4fc` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-node-linux-arm64.tar.gz) | `f09bc220a05b8f5fca6d4575198ac2b7625fcbceb09ffd6da587c8b13a5b93365b601b94a25fb8cc360c7521ccc30d11d86d88490f5a48369f6078c4395593c2` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-node-linux-ppc64le.tar.gz) | `96b3f8578e4f5e5261489ba392e7167bfdbe5ec6fb60a369455edffbc027b3086bd99055f7e3cabbf56426b7b181764d5cd5979bacd3ad8c26b541cd94ce62d8` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-node-linux-s390x.tar.gz) | `4c9c7e541164781231378091cae0ab693c29b517b7737be191436c5e85ea4702cdd640890ae7c1295273270cb7944e2a250e2791a9a07bb415dac67d3129d1c1` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.2/kubernetes-node-windows-amd64.tar.gz) | `a88e7a1c6f72ea6073dbb4ddfe2e7c8bd37c9a56d94a33823f531e303a9915e7a844ac5880097724e44dfa7f4a9659d14b79cc46e2067f6b13e6df3f3f1b0f64` - -## Changelog since v1.16.1 - -### Other notable changes - -* Fixed panic when accessing CustomResources of a CRD with x-kubernetes-int-or-string. ([#83789](https://github.com/kubernetes/kubernetes/pull/83789), [@sttts](https://github.com/sttts)) -* Fixed a bug in the single-numa-node policy of the TopologyManager. Previously, pods that only requested CPU resources and did not request any third-party devices would fail to launch with a TopologyAffinity error. Now they will launch successfully. ([#83697](https://github.com/kubernetes/kubernetes/pull/83697), [@klueska](https://github.com/klueska)) -* Fixes kube-proxy bug accessing self nodeip:port on windows ([#83027](https://github.com/kubernetes/kubernetes/pull/83027), [@liggitt](https://github.com/liggitt)) -* Fix error where metrics related to dynamic kubelet config isn't registered ([#83184](https://github.com/kubernetes/kubernetes/pull/83184), [@odinuge](https://github.com/odinuge)) -* Use online nodes instead of possible nodes when discovering available NUMA nodes ([#83196](https://github.com/kubernetes/kubernetes/pull/83196), [@zouyee](https://github.com/zouyee)) -* Update Azure load balancer to prevent orphaned public IP addresses ([#82890](https://github.com/kubernetes/kubernetes/pull/82890), [@chewong](https://github.com/chewong)) -* Fixes a goroutine leak in kube-apiserver when a request times out. ([#83333](https://github.com/kubernetes/kubernetes/pull/83333), [@lavalamp](https://github.com/lavalamp)) -* Fix aggressive VM calls for Azure VMSS ([#83102](https://github.com/kubernetes/kubernetes/pull/83102), [@feiskyer](https://github.com/feiskyer)) -* Fixes a flaw (CVE-2019-11253) in json/yaml decoding where large or malformed documents could consume excessive server resources. Request bodies for normal API requests (create/delete/update/patch operations of regular resources) are now limited to 3MB. ([#83261](https://github.com/kubernetes/kubernetes/pull/83261), [@liggitt](https://github.com/liggitt)) - - - -# v1.16.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.1 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes.tar.gz) | `3dc4f0f2a208d3f235b4dc579418c503ba64fec261294c3683268259117e5c82f56db3f0c4ad63199f0f35f0de21df0b13ca00a74efe7b3142b275f0733e9219` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-src.tar.gz) | `2d79b1e4e43c57c0e24da07f1312d0e49f8c43ebba0231dd5d628a52c25e929fed34c3d34b2ab739c0348c2f42c88feea8f1a4c2d821ace170f451bf74903ae3` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-client-darwin-386.tar.gz) | `f7139df5f06f3fc9d1944058e7ba40a482621d6a169bc2f09a50dfa8f903866706051cded14fbd39d8d03c576f9e5219b0887f029ee1cac45919dc5ff232cdcd` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-client-darwin-amd64.tar.gz) | `c4d458a0c3ef2dc9e4527daecf6b34da065d1ae7fd245f8b8aceca43467f03073f538e65e504f9800d3db0c64d88fc41f687b493be4d9a8283f39dd001a86a7d` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-client-linux-386.tar.gz) | `82d79bc833ae5317c4a1d0d397ccaa9aef616e0c2e5ff2166da8c66a4f55851f4bfa3b57708f75dc12eabefdee35b08d8f7bee74cfaf38a0339ee927f90e1655` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-client-linux-amd64.tar.gz) | `e355a74a17d96785b0b217673e67fa0f02daa1939f10d410602ac0a0d061a4db71d727b67f75aa886007dab95dd5c7f8cc38253d291dc4d2504ce673df69fb32` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-client-linux-arm.tar.gz) | `b9fba5995a7a02d001bead0305ae2a0c8ee7d2a98069aad6e57612988e298972cb6f69267afb79df292195958871c56a2cc5ec7a8e180a8d56c428f82bbbece8` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-client-linux-arm64.tar.gz) | `64917bd6c4b277f4cb676b2e3d69cb12148bc90e2b04011d11985e492d525646fd13021b74f93914d37849fba87c07c513fafc1bd07edc7d3e4415fe8bd9ea37` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-client-linux-ppc64le.tar.gz) | `258cc1b13f3ef90c52d401190f4d59c8c0d10367a6d960c6273522a15b879de2df4d141461d80338144e83995422da802a417a55911d7a4d8aeeec5aecd2adec` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-client-linux-s390x.tar.gz) | `adaa34bde363a030f099a96417e257688e6280d86bdd3e04f7c06b6bccce639f599d494b5181a78e91c7f50207c53fa1a04b3b2fbd65be91512e51441e66a2e8` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-client-windows-386.tar.gz) | `3ed99240a99a2d9f4193264f14168896a2418f296e5a2372e4e6aac44b65cd6a531ceec71d24333a7c825ba02acec63fdb51b97aa9fb4665048e929b7e4b774d` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-client-windows-amd64.tar.gz) | `cbf8363147e44bfadee4da9ced9ab7bfc3c88ba7dcfa3f64803376efa5adc6dbb38519f73253aa9ea8b12bb42a92f5ea78e8b63fb082e4ace04d3ee3e285f549` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-server-linux-amd64.tar.gz) | `c43795fc2bfaee240f1e32e0b523cbbc8a888a40efa85371e682433d6f60dd1f3225ca34484fc9db54e68e250acbb5c2c388071bcd033fed0d8a47d044708b0b` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-server-linux-arm.tar.gz) | `3a6c38db6d6c0950f6d3cd4c158ba9c816dcbf1b1959a74d55ead53b1df2cf9131f56d5b0f5720f9c2000085ada1fd4d48439ea20f4ba35764e1a54f94848697` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-server-linux-arm64.tar.gz) | `3cbde62bb5ef0af033d643cea800e891c199f9d6e9f0a3e1131bebe6759fd72b2c8d1f86d92ab5d1c352297b57320b47c70a6422768656b2c44c4ef4b7e3c721` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-server-linux-ppc64le.tar.gz) | `a60a25a346de61e705d416b50f8eac582a36faa622c6c45d4e3af92c46f48409b4c2a9bcbfd9297cc77d747cf1a96721146a24a48500a55b806c6fc0d9008e21` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-server-linux-s390x.tar.gz) | `1ee9bbb36245825604d7cf4c9bdb2e43d0d755958413809ae7d3c9448ada567c0ab510f68318055dd71ec73d2ccce5b8d23faa698fd42772e3bd3c9592006d80` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-node-linux-amd64.tar.gz) | `4ef686de6aa5a2bdcb8034b3def008995fc4474f34f939620c657ae115c61403c8d5698c9af68d3fe7015beaa8d578edc9f1a62b08dea92d99a3c73c9fe9e7a6` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-node-linux-arm.tar.gz) | `58607b1cf68e8420bacc8dc3f95b19b7f90fe4fda1255814c76e66f67638b8db150eb464f85e1b625e13a74b0d86a973e54da87e2fb41985eff14b25a7761b1d` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-node-linux-arm64.tar.gz) | `f02417299b5b6f3ee4b325d4a23b0ca19ee3c10dbe871a716470e68a3e89f4b84232eac1048dc9dc88a00ed069a8fd3b4f7817664e296e8842322379702e67e4` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-node-linux-ppc64le.tar.gz) | `fa3b44b668d0a341847601a18c463698810457e113459d6f8ddbce6f9305b613c4f61f9831e16d8bab128efdd69524c86981785f9703e248eff11f95e9330e74` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-node-linux-s390x.tar.gz) | `afe166d9245bd35fbc21763b9ef24bf174396c0611f75ddf93f1e4f3fb3e1cf1d4e7998d963e26fe3761bf4984ea33a5d6656035092c9b0d35e94f97882a5595` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.1/kubernetes-node-windows-amd64.tar.gz) | `93ebe21c147dcb38cb1ee222975f35f7c8c8175255cfce09381c8852734d054def58bc630cf868d99baa7f90bd2c201ccaa42dbae3ef360c3135c825ec2c74b1` - -## Changelog since v1.16.0 - -### Other notable changes - -* Limit the body length of exec readiness/liveness probes. remote CRIs and Docker shim read a max of 16MB output of which the exec probe itself inspects 10kb. ([#82514](https://github.com/kubernetes/kubernetes/pull/82514), [@dims](https://github.com/dims)) -* Fix possible fd leak and closing of dirs when using openstack ([#82873](https://github.com/kubernetes/kubernetes/pull/82873), [@odinuge](https://github.com/odinuge)) -* Update to go 1.12.10 ([#83139](https://github.com/kubernetes/kubernetes/pull/83139), [@cblecker](https://github.com/cblecker)) -* Use ipv4 in wincat port forward. ([#83036](https://github.com/kubernetes/kubernetes/pull/83036), [@liyanhui1228](https://github.com/liyanhui1228)) -* Fixes a panic in kube-controller-manager cleaning up bootstrap tokens ([#82887](https://github.com/kubernetes/kubernetes/pull/82887), [@tedyu](https://github.com/tedyu)) -* Resolves bottleneck in internal API server communication that can cause increased goroutines and degrade API Server performance ([#80465](https://github.com/kubernetes/kubernetes/pull/80465), [@answer1991](https://github.com/answer1991)) -* Resolves regression generating informers for packages whose names contain `.` characters ([#82410](https://github.com/kubernetes/kubernetes/pull/82410), [@nikhita](https://github.com/nikhita)) -* Fixed a scheduler panic when using PodAffinity. ([#82841](https://github.com/kubernetes/kubernetes/pull/82841), [@Huang-Wei](https://github.com/Huang-Wei)) -* Update Cluster Autoscaler version to 1.16.1 (release notes: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.16.1) ([#83052](https://github.com/kubernetes/kubernetes/pull/83052), [@losipiuk](https://github.com/losipiuk)) -* Resolves issue with /readyz and /livez not including etcd and kms health checks ([#82713](https://github.com/kubernetes/kubernetes/pull/82713), [@logicalhan](https://github.com/logicalhan)) -* fix: azure disk detach failure if node not exists ([#82640](https://github.com/kubernetes/kubernetes/pull/82640), [@andyzhangx](https://github.com/andyzhangx)) - - - -# v1.16.0 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.0 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes.tar.gz) | `99aa74225dd999d112ebc3e7b7d586a2312ec9c99de7a7fef8bbbfb198a5b4cf740baa57ea262995303e2a5060d26397775d928a086acd926042a41ef00f200b` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-src.tar.gz) | `0be7d1d6564385cc20ff4d26bab55b71cc8657cf795429d04caa5db133a6725108d6a116553bf55081ccd854a4078e84d26366022634cdbfffd1a34a10b566cf` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-client-darwin-386.tar.gz) | `a5fb80d26c2a75741ad0efccdacd5d5869fbc303ae4bb1920a6883ebd93a6b41969f898d177f2602faf23a7462867e1235edeb0ba0675041d0c8d5ab266ec62d` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-client-darwin-amd64.tar.gz) | `47a9a78fada4b840d9ae4dac2b469a36d0812ac83d22fd798c4cb0f1673fb65c6558383c19a7268ed7101ac9fa32d53d79498407bdf94923f4f8f019ea39e912` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-client-linux-386.tar.gz) | `916e4dd98f5ed8ee111eeb6c2cf5c5f313e1d98f3531b40a5a777240ddb96b9cc53df101daa077ffff52cf01167fdcc39d38a8655631bac846641308634e127a` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-client-linux-amd64.tar.gz) | `fccf152588edbaaa21ca94c67408b8754f8bc55e49470380e10cf987be27495a8411d019d807df2b2c1c7620f8535e8f237848c3c1ac3791b91da8df59dea5aa` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-client-linux-arm.tar.gz) | `066c55fabbe3434604c46574c51c324336a02a5bfaed2e4d83b67012d26bf98354928c9c12758b53ece16b8567e2b5ce6cb88d5cf3008c7baf3c5df02611a610` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-client-linux-arm64.tar.gz) | `e41be74cc36240a64ecc962a066988b5ef7c3f3112977efd4e307b35dd78688f41d6c5b376a6d1152d843182bbbe75d179de75675548bb846f8c1e28827e0e0c` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-client-linux-ppc64le.tar.gz) | `08783eb3bb2e35b48dab3481e17d6e345d43bab8b8dee25bb5ff184ba46cb632750d4c38e9982366050aecce6e121c67bb6812dbfd607216acd3a2d19e05f5a1` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-client-linux-s390x.tar.gz) | `bcb6eb9cd3d8c92dfaf4f102ff2dc7517f632b1e955be6a02e7f223b15fc09c4ca2d6d9cd5b23871168cf6b455e2368daf17025c9cd61bf43d2ea72676db913a` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-client-windows-386.tar.gz) | `efbc764d8e2889ce13c9eaaa61f685a8714563ddc20464523140d6f5bef0dfd51b745c3bd3fe2093258db242bf9b3207f8e9f451b0484de64f18cdb7162ec30e` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-client-windows-amd64.tar.gz) | `b34bce694c6a0e4c8c5ddabcecb6adcb4d35f8c126b4b5ced7e44ef39cd45982dd9f6483a38e04430846f4da592dc74b475c37da7fe08444ef4eb5efde85e0b2` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-server-linux-amd64.tar.gz) | `a6bdac1eba1b87dc98b2bf5bf3690758960ecb50ed067736459b757fca0c3b01dd01fd215b4c06a653964048c6a81ea80b61ee8c7e4c98241409c091faf0cee1` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-server-linux-arm.tar.gz) | `0560e1e893fe175d74465065d43081ee7f40ba7e7d7cafa53e5d7491f89c61957cf0d3abfa4620cd0f33b6e44911b43184199761005d20b72e3cd2ddc1224f9f` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-server-linux-arm64.tar.gz) | `4d5dd001fa3ac2b28bfee64e85dbedab0706302ffd634c34330617674e7a90e0108710f4248a2145676bd72f0bbc3598ed61e1e739c64147ea00d3b6a4ba4604` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-server-linux-ppc64le.tar.gz) | `cc642fca57e22bf6edd371e61e254b369b760c67fa00cac50e34464470f7eea624953deff800fa1e4f7791fe06791c48dbba3ed47e789297ead889c2aa7b2bbf` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-server-linux-s390x.tar.gz) | `1f480ba6f593a3aa20203e82e9e34ac206e35839fd9135f495c5d154480c57d1118673dcb5a6b112c18025fb4a847f65dc7aac470f01d2f06ad3da6aa63d98a3` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-node-linux-amd64.tar.gz) | `e987f141bc0a248e99a371ce220403b78678c739a39dad1c1612e63a0bee4525fbca5ee8c2b5e5332a553cc5f63bce9ec95645589298f41fe83e1fd41faa538e` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-node-linux-arm.tar.gz) | `8b084c1063beda2dd4000e8004634d82e580f05cc300c2ee13ad84bb884987b2c7fd1f033fb2ed46941dfc311249acef06efe5044fb72dc4b6089c66388e1f61` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-node-linux-arm64.tar.gz) | `365bdf9759e24d22cf507a0a5a507895ed44723496985e6d8f0bd10b03ffe7c78198732ee39873912147f2dd840d2e284118fc6fc1e3876d8f4c2c3a441def0b` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-node-linux-ppc64le.tar.gz) | `ff54d83dd0fd3c447cdd76cdffd253598f6800045d2b6b91b513849d15b0b602590002e7fe2a55dc25ed5a05787f4973c480126491d24be7c5fce6ce98d0b6b6` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-node-linux-s390x.tar.gz) | `527cd9bf4bf392c3f097f232264c0f0e096ac410b5211b0f308c9d964f86900f5875012353b0b787efc9104f51ad90880f118efb1da54eba5c7675c1840eae5f` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0/kubernetes-node-windows-amd64.tar.gz) | `4f76a94c70481dd1d57941f156f395df008835b5d1cc17708945e8f560234dbd426f3cff7586f10fd4c24e14e3dfdce28e90c8ec213c23d6ed726aec94e9b0ff` - -# Kubernetes v1.16.0 Release Notes - -A complete changelog for the release notes is now hosted in a customizable format at [relnotes.k8s.io](https://relnotes.k8s.io/?releaseVersions=1.16.0). Check it out and please give us your feedback! - -## What’s New (Major Themes) - -We’re pleased to announce the delivery of Kubernetes 1.16, our third release of 2019! Kubernetes 1.16 consists of 31 enhancements: 8 enhancements moving to stable, 8 enhancements in beta, and 15 enhancements in alpha. - -The main themes of this release are: - -- **Custom resources:** CRDs are in widespread use as a way to extend Kubernetes to persist and serve new resource types, and have been available in beta since the 1.7 release. The 1.16 release marks the graduation of CRDs to general availability (GA). -- **Admission webhooks:** Admission webhooks are in widespread use as a Kubernetes extensibility mechanism and have been available in beta since the 1.9 release. The 1.16 release marks the graduation of admission webhooks to general availability (GA). -- **Overhauled metrics**: Kubernetes has previously made extensive use of a global metrics registry to register metrics to be exposed. By implementing a metrics registry, metrics are registered in more transparent means. Previously, Kubernetes metrics have been excluded from any kind of stability requirements. -- **Volume Extension**: There are quite a few enhancements in this release that pertain to volumes and volume modifications. Volume resizing support in CSI specs is moving to beta which allows for any CSI spec volume plugin to be resizable. - -### Additional Notable Feature Updates - -- [Topology Manager](https://github.com/kubernetes/enhancements/issues/693), a new Kubelet component, aims to co-ordinate resource assignment decisions to provide optimized resource allocations. -- [IPv4/IPv6 dual-stack](https://kubernetes.io/docs/concepts/services-networking/dual-stack) enables the allocation of both IPv4 and IPv6 addresses to Pods and Services. -- [API Server Network Proxy](https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/20190226-network-proxy.md) going alpha in 1.16. -- [Extensions](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/20190422-cloud-controller-manager-migration.md) for Cloud Controller Manager Migration. -- Continued deprecation of extensions/v1beta1, apps/v1beta1, and apps/v1beta2 APIs; these extensions will be retired in 1.16! - -## Known Issues - -- The etcd and KMS plugin health checks are not exposed in the new `livez` and `readyz` endpoints. This will be fixed in 1.16.1. -- Systems running `iptables` 1.8.0 or newer should start it in legacy mode. Please note that this affects all versions of Kubernetes and not only v1.16.0. For more detailed information about the issue and how to apply a workaround, please refer to the official documentation -- Generating informers for packages in directories containing dots in their name is broken. This will be fixed in v1.16.1. ([#82860](https://github.com/kubernetes/kubernetes/issues/82860)) -- kube-scheduler won't be able to report scheduling Events if `events.k8s.io/v1beta1` API is disabled. We are targeting the fix for v1.16.2 ([#83203](https://github.com/kubernetes/kubernetes/issues/83203)) -- The etcd client library vendored in v1.16 (github.com/coreos/etcd/clientv3) has a bug where IPv6 IP addresses get incorrectly trimmed to the first occurance of the `:` character. This affects all users of the client library including the kube-apiserver and kubeadm. We are targeting the fix for this bug in v1.16.3. ([#83550](https://github.com/kubernetes/kubernetes/issues/83550)) - -## Urgent Upgrade Notes - -### (No, really, you MUST read this before you upgrade) - -#### Cluster Lifecycle - -- Container images tar files for `amd64` will now contain the architecture in the RepoTags manifest.json section. - If you are using docker manifests there are not visible changes. ([#80266](https://github.com/kubernetes/kubernetes/pull/80266), [@javier-b-perez](https://github.com/javier-b-perez)) -- kubeadm now deletes the bootstrap-kubelet.conf file after TLS bootstrap - User relying on bootstrap-kubelet.conf should switch to kubelet.conf that contains node credentials ([#80676](https://github.com/kubernetes/kubernetes/pull/80676), [@fabriziopandini](https://github.com/fabriziopandini)) -- Node labels `beta.kubernetes.io/metadata-proxy-ready`, `beta.kubernetes.io/metadata-proxy-ready` and `beta.kubernetes.io/kube-proxy-ds-ready` are no longer added on new nodes. - - ip-mask-agent addon starts to use the label `node.kubernetes.io/masq-agent-ds-ready` instead of `beta.kubernetes.io/masq-agent-ds-ready` as its node selector. - - kube-proxy addon starts to use the label `node.kubernetes.io/kube-proxy-ds-ready` instead of `beta.kubernetes.io/kube-proxy-ds-ready` as its node selector. - - metadata-proxy addon starts to use the label `cloud.google.com/metadata-proxy-ready` instead of `beta.kubernetes.io/metadata-proxy-ready` as its node selector. - -#### Storage - -- When PodInfoOnMount is enabled for a CSI driver, the new csi.storage.k8s.io/ephemeral parameter in the volume context allows a driver's NodePublishVolume implementation to determine on a case-by-case basis whether the volume is ephemeral or a normal persistent volume ([#79983](https://github.com/kubernetes/kubernetes/pull/79983), [@pohly](https://github.com/pohly)) -- Add CSI Migration Shim for VerifyVolumesAreAttached and BulkVolumeVerify ([#80443](https://github.com/kubernetes/kubernetes/pull/80443), [@davidz627](https://github.com/davidz627)) -- Promotes VolumePVCDataSource (Cloning) feature to beta for 1.16 release ([#81792](https://github.com/kubernetes/kubernetes/pull/81792), [@j-griffith](https://github.com/j-griffith)) -- Integrated volume limits for in-tree and CSI volumes into one scheduler predicate. ([#77595](https://github.com/kubernetes/kubernetes/pull/77595), [@bertinatto](https://github.com/bertinatto)) - -## Deprecations and Removals - -- API - - - The following APIs are no longer served by default: - - - All resources under `apps/v1beta1` and `apps/v1beta2` - use `apps/v1` instead - - `daemonsets`, `deployments`, `replicasets` resources under `extensions/v1beta1` - use `apps/v1` instead - - `networkpolicies` resources under `extensions/v1beta1` - use `networking.k8s.io/v1` instead - - `podsecuritypolicies` resources under `extensions/v1beta1` - use `policy/v1beta1` instead - - Serving these resources can be temporarily re-enabled using the `--runtime-config` apiserver flag. - - - `apps/v1beta1=true` - - `apps/v1beta2=true` - - `extensions/v1beta1/daemonsets=true,extensions/v1beta1/deployments=true,extensions/v1beta1/replicasets=true,extensions/v1beta1/networkpolicies=true,extensions/v1beta1/podsecuritypolicies=true` - - The ability to serve these resources will be completely removed in v1.18. ([#70672](https://github.com/kubernetes/kubernetes/pull/70672), [@liggitt](https://github.com/liggitt)) - - - Ingress resources will no longer be served from `extensions/v1beta1` in v1.20. Migrate use to the `networking.k8s.io/v1beta1` API, available since v1.14. Existing persisted data can be retrieved via the `networking.k8s.io/v1beta1` API. - - PriorityClass resources will no longer be served from `scheduling.k8s.io/v1beta1` and `scheduling.k8s.io/v1alpha1` in v1.17. Migrate to the `scheduling.k8s.io/v1` API, available since v1.14. Existing persisted data can be retrieved via the `scheduling.k8s.io/v1` API. - - The `export` query parameter for list API calls, deprecated since v1.14, will be removed in v1.18. - - The `series.state` field in the events.k8s.io/v1beta1 Event API is deprecated and will be removed in v1.18 ([#75987](https://github.com/kubernetes/kubernetes/pull/75987), [@yastij](https://github.com/yastij)) - - The `apiextensions.k8s.io/v1beta1` version of `CustomResourceDefinition` is deprecated and will no longer be served in v1.19. Use `apiextensions.k8s.io/v1` instead. ([#79604](https://github.com/kubernetes/kubernetes/pull/79604), [@liggitt](https://github.com/liggitt)) - - The `admissionregistration.k8s.io/v1beta1` versions of `MutatingWebhookConfiguration` and `ValidatingWebhookConfiguration` are deprecated and will no longer be served in v1.19. Use `admissionregistration.k8s.io/v1` instead. ([#79549](https://github.com/kubernetes/kubernetes/pull/79549), [@liggitt](https://github.com/liggitt)) - - The alpha `metadata.initializers` field, deprecated in 1.13, has been removed. ([#79504](https://github.com/kubernetes/kubernetes/pull/79504), [@yue9944882](https://github.com/yue9944882)) - - The deprecated node condition type `OutOfDisk` has been removed. Use the `DiskPressure` condition instead. ([#72420](https://github.com/kubernetes/kubernetes/pull/72420), [@Pingan2017](https://github.com/Pingan2017)) - - The `metadata.selfLink` field is deprecated in individual and list objects. It will no longer be returned starting in v1.20, and the field will be removed entirely in v1.21. ([#80978](https://github.com/kubernetes/kubernetes/pull/80978), [@wojtek-t](https://github.com/wojtek-t)) - - The deprecated cloud providers `ovirt`, `cloudstack` and `photon` have been removed ([#72178](https://github.com/kubernetes/kubernetes/pull/72178), [@dims](https://github.com/dims)) - - The `Cinder` and `ScaleIO` volume providers have been deprecated and will be removed in a future release. ([#80099](https://github.com/kubernetes/kubernetes/pull/80099), [@dims](https://github.com/dims)) - - The GA `PodPriority` feature gate is now on by default and cannot be disabled. The feature gate will be removed in v1.18. ([#79262](https://github.com/kubernetes/kubernetes/pull/79262), [@draveness](https://github.com/draveness)) - - Aggregated discovery requests can now timeout. Aggregated API servers must complete discovery calls within 5 seconds (other requests can take longer). Use the feature gate `EnableAggregatedDiscoveryTimeout=false` to temporarily revert behavior to the previous 30 second timeout if required (the temporary `EnableAggregatedDiscoveryTimeout` feature gate will be removed in v1.17). ([#82146](https://github.com/kubernetes/kubernetes/pull/82146), [@deads2k](https://github.com/deads2k)) - - the `scheduler.alpha.kubernetes.io/critical-pod` annotation is removed. Pod priority (`spec.priorityClassName`) should be used instead to mark pods as critical. ([#80342](https://github.com/kubernetes/kubernetes/pull/80342), [@draveness](https://github.com/draveness)) - - the NormalizeScore plugin set is removed from scheduler framework config API. Use ScorePlugin only. ([#80930](https://github.com/kubernetes/kubernetes/pull/80930), [@liu-cong](https://github.com/liu-cong)) - - the node label `alpha.service-controller.kubernetes.io/exclude-balancer` which excludes a node from cloud load balancers (using Service Type=LoadBalancer) is deprecated in favor of `node.kubernetes.io/exclude-balancer`. Support for `alpha.service-controller.kubernetes.io/exclude-balancer` will be removed in v1.18. - -- Features: - - - The following features are now GA, and the associated feature gates are deprecated and will be removed in v1.17: - - `GCERegionalPersistentDisk` (since 1.15.0) - - `CustomResourcePublishOpenAPI` - - `CustomResourceSubresources` - - `CustomResourceValidation` - - `CustomResourceWebhookConversion` - - The feature flags `HugePages`, `VolumeScheduling`, `CustomPodDNS` and `PodReadinessGates` have been removed ([#79307](https://github.com/kubernetes/kubernetes/pull/79307), [@draveness](https://github.com/draveness)) - -- hyperkube - - - the `--make-symlinks` flag, deprecated in v1.14, has been removed. ([#80017](https://github.com/kubernetes/kubernetes/pull/80017), [@Pothulapati](https://github.com/Pothulapati)) - -- kube-apiserver - - - the `--basic-auth-file` flag and authentication mode is deprecated and will be removed in a future release. It is not recommended for production environments. ([#81152](https://github.com/kubernetes/kubernetes/pull/81152), [@tedyu](https://github.com/tedyu)) - - the `--cloud-provider-gce-lb-src-cidrs` flag has been deprecated. This flag will be removed once the GCE Cloud Provider is removed from kube-apiserver. ([#81094](https://github.com/kubernetes/kubernetes/pull/81094), [@andrewsykim](https://github.com/andrewsykim)) - - the `--enable-logs-handler` flag and log-serving functionality is deprecated since v1.15, and scheduled to be removed in v1.19. ([#77611](https://github.com/kubernetes/kubernetes/pull/77611), [@rohitsardesai83](https://github.com/rohitsardesai83)) - - Deprecate the default service IP CIDR. The previous default was `10.0.0.0/24` which will be removed in 6 months/2 releases. Cluster admins must specify their own desired value, by using `--service-cluster-ip-range` on kube-apiserver. ([#81668](https://github.com/kubernetes/kubernetes/pull/81668), [@darshanime](https://github.com/darshanime)) - -- kube-proxy - - - the `--resource-container` flag has been removed from kube-proxy, and specifying it will now cause an error. The behavior is now as if you specified `--resource-container=""`. If you previously specified a non-empty `--resource-container`, you can no longer do so as of kubernetes 1.16. ([#78294](https://github.com/kubernetes/kubernetes/pull/78294), [@vllry](https://github.com/vllry)) - -- kube-scheduler - - - Migrate scheduler to use v1beta1 Event API. any tool targeting scheduler events needs to use v1beta1 Event API ([#78447](https://github.com/kubernetes/kubernetes/pull/78447), [@yastij](https://github.com/yastij)) - -- kubeadm - - - The CoreDNS Deployment now checks readiness via the `ready` plugin. - - The `proxy` plugin has been deprecated. The `forward` plugin is to be used instead. - - `kubernetes` plugin removes the `resyncperiod` option. - - The `upstream` option is deprecated and ignored if included. - ([#82127](https://github.com/kubernetes/kubernetes/pull/82127), [@rajansandeep](https://github.com/rajansandeep)) - -- kubectl - - - `kubectl convert`, deprecated since v1.14, will be removed in v1.17. - - The `--export` flag for the `kubectl get` command, deprecated since v1.14, will be removed in v1.18. - - `kubectl cp` no longer supports copying symbolic links from containers; to support this use case, see `kubectl exec --help` for examples using `tar` directly ([#82143](https://github.com/kubernetes/kubernetes/pull/82143), [@soltysh](https://github.com/soltysh)) - - Removed deprecated flag `--include-uninitialized`. ([#80337](https://github.com/kubernetes/kubernetes/pull/80337), [@draveness](https://github.com/draveness)) - -- kubelet - - - the `--containerized` flag was deprecated in 1.14 and has been removed ([#80043](https://github.com/kubernetes/kubernetes/pull/80043), [@dims](https://github.com/dims)) - - the `beta.kubernetes.io/os` and `beta.kubernetes.io/arch` labels, deprecated since v1.14, are targeted for removal in v1.18. - - cAdvisor json endpoints have been deprecated since 1.15. ([#78504](https://github.com/kubernetes/kubernetes/pull/78504), [@dashpole](https://github.com/dashpole)) - - removed the ability to set `kubernetes.io`- or `k8s.io`-prefixed labels via `--node-labels`, other than the [specifically allowed labels/prefixes](https://github.com/kubernetes/enhancements/blob/master/keps/sig-auth/0000-20170814-bounding-self-labeling-kubelets.md#proposal). ([#79305](https://github.com/kubernetes/kubernetes/pull/79305), [@paivagustavo](https://github.com/paivagustavo)) - -- client-go - - Remove `DirectCodecFactory` (replaced with `serializer.WithoutConversionCodecFactory`), `DirectEncoder` (replaced with `runtime.WithVersionEncoder`) and `DirectDecoder` (replaced with `runtime.WithoutVersionDecoder`). ([#79263](https://github.com/kubernetes/kubernetes/pull/79263), [@draveness](https://github.com/draveness)) - -## Metrics Changes - -### Added metrics - -- Added metrics `aggregator_openapi_v2_regeneration_count`, `aggregator_openapi_v2_regeneration_gauge` and `apiextension_openapi_v2_regeneration_count` counting the triggering APIService and CRDs and the reason (add, update, delete) when kube-apiserver regenerates the OpenAPI spec. ([#81786](https://github.com/kubernetes/kubernetes/pull/81786), [@sttts](https://github.com/sttts)) -- Added metrics `authentication_attempts` that can be used to understand the attempts of authentication. ([#81509](https://github.com/kubernetes/kubernetes/pull/81509), [@RainbowMango](https://github.com/RainbowMango)) -- Add a new counter metrics `apiserver_admission_webhook_rejection_count` with details about the causing for a webhook rejection. ([#81399](https://github.com/kubernetes/kubernetes/pull/81399), [@roycaihw](https://github.com/roycaihw)) -- NFS Drivers are now enabled to collect metrics, StatFS metrics provider is used to collect the metrics. (@brahmaroutu) ([#75805](https://github.com/kubernetes/kubernetes/pull/75805), [@brahmaroutu](https://github.com/brahmaroutu)) -- Add `container_sockets`, `container_threads`, and `container_threads_max` metrics ([#81972](https://github.com/kubernetes/kubernetes/pull/81972), [@dashpole](https://github.com/dashpole)) -- Add `container_state` label to `running_container_count` kubelet metrics, to get count of containers based on their state(running/exited/created/unknown) ([#81573](https://github.com/kubernetes/kubernetes/pull/81573), [@irajdeep](https://github.com/irajdeep)) -- Added metric `apiserver_watch_events_total` that can be used to understand the number of watch events in the system. ([#78732](https://github.com/kubernetes/kubernetes/pull/78732), [@mborsz](https://github.com/mborsz)) -- Added metric `apiserver_watch_events_sizes` that can be used to estimate sizes of watch events in the system. ([#80477](https://github.com/kubernetes/kubernetes/pull/80477), [@mborsz](https://github.com/mborsz)) -- Added a new Prometheus counter metric `sync_proxy_rules_iptables_restore_failures_total` for kube-proxy iptables-restore failures (both ipvs and iptables modes) - ([#81210](https://github.com/kubernetes/kubernetes/pull/81210), [@figo](https://github.com/figo)) -- kubelet now exports an `kubelet_evictions` metric that counts the number of pod evictions carried out by the kubelet to reclaim resources ([#81377](https://github.com/kubernetes/kubernetes/pull/81377), [@sjenning](https://github.com/sjenning)) - -### Removed metrics - -- Removed cadvisor metric labels `pod_name` and `container_name` to match instrumentation guidelines. Any Prometheus queries that match `pod_name` and `container_name` labels (e.g. cadvisor or kubelet probe metrics) must be updated to use `pod` and `container` instead. ([#80376](https://github.com/kubernetes/kubernetes/pull/80376), [@ehashman](https://github.com/ehashman)) - -### Deprecated/changed metrics - -- kube-controller-manager and cloud-controller-manager metrics are now marked as with the ALPHA stability level. ([#81624](https://github.com/kubernetes/kubernetes/pull/81624), [@logicalhan](https://github.com/logicalhan)) -- kube-proxy metrics are now marked as with the ALPHA stability level. ([#81626](https://github.com/kubernetes/kubernetes/pull/81626), [@logicalhan](https://github.com/logicalhan)) -- kube-apiserver metrics are now marked as with the ALPHA stability level. ([#81531](https://github.com/kubernetes/kubernetes/pull/81531), [@logicalhan](https://github.com/logicalhan)) -- kubelet metrics for /metrics and /metrics/probes are now marked as with the ALPHA stability level. ([#81534](https://github.com/kubernetes/kubernetes/pull/81534), [@logicalhan](https://github.com/logicalhan)) -- Scheduler metrics are now marked as with the ALPHA stability level. ([#81576](https://github.com/kubernetes/kubernetes/pull/81576), [@logicalhan](https://github.com/logicalhan)) -- The `rejected` label in `apiserver_admission_webhook_admission_duration_seconds` metrics now properly indicates if the request was rejected. ([#81399](https://github.com/kubernetes/kubernetes/pull/81399), [@roycaihw](https://github.com/roycaihw)) -- Fixed a bug in the CSI metrics that does not return not supported error when a CSI driver does not support metrics. ([#79851](https://github.com/kubernetes/kubernetes/pull/79851), [@jparklab](https://github.com/jparklab)) -- Fix disk stats in LXD using ZFS storage pool and CRI-O missing network metris bug ([#81972](https://github.com/kubernetes/kubernetes/pull/81972), [@dashpole](https://github.com/dashpole)) - -## Notable Features - -### Beta - -- Promote WatchBookmark feature to beta and enable it by default. - With WatchBookmark feature, clients are able to request watch events with BOOKMARK type. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. ([#79786](https://github.com/kubernetes/kubernetes/pull/79786), [@wojtek-t](https://github.com/wojtek-t)) -- The server-side apply feature is now beta ([#81956](https://github.com/kubernetes/kubernetes/pull/81956), [@apelisse](https://github.com/apelisse)) -- Server-side apply will now use the openapi provided in the CRD validation field to help figure out how to correctly merge objects and update ownership. ([#77354](https://github.com/kubernetes/kubernetes/pull/77354), [@jennybuckley](https://github.com/jennybuckley)) -- The `CustomResourceDefaulting` feature is promoted to beta and enabled by default. Defaults may be specified in structural schemas via the `apiextensions.k8s.io/v1` API. See https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#specifying-a-structural-schema for details. ([#81872](https://github.com/kubernetes/kubernetes/pull/81872), [@sttts](https://github.com/sttts)) -- Finalizer Protection for Service LoadBalancers is now in beta (enabled by default). This feature ensures the Service resource is not fully deleted until the correlating load balancer resources are deleted. ([#81691](https://github.com/kubernetes/kubernetes/pull/81691), [@MrHohn](https://github.com/MrHohn)) -- Graduating Windows GMSA support from alpha to beta ([#82110](https://github.com/kubernetes/kubernetes/pull/82110), [@wk8](https://github.com/wk8)) - -### Alpha - -- Introduce a new admission controller for RuntimeClass. Initially, RuntimeClass will be used to apply the pod overhead associated with a given RuntimeClass to the Pod `spec` if a corresponding RuntimeClassName is specified. PodOverhead is an alpha feature as of Kubernetes 1.16. ([#78484](https://github.com/kubernetes/kubernetes/pull/78484), [@egernst](https://github.com/egernst)) -- Introduction of the pod overhead feature to the scheduler. This functionality is alpha-level as of - Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature.gate. ([#78319](https://github.com/kubernetes/kubernetes/pull/78319), [@egernst](https://github.com/egernst)) -- Ephemeral containers have been added in alpha. These temporary containers can be added to running pods for purposes such as debugging, similar to how `kubectl exec` runs a process in an existing container. Also like `kubectl exec`, no resources are reserved for ephemeral containers and they are not restarted when they exit. Note that container namespace targeting is not yet implemented, so [process namespace sharing](https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/) must be enabled to view process from other containers in the pod. ([#59484](https://github.com/kubernetes/kubernetes/pull/59484), [@verb](https://github.com/verb)) -- Pod spread constraints have been added in alpha. You can use these constraints to control how Pods are spread across the cluster among failure-domains. ([#77327](https://github.com/kubernetes/kubernetes/pull/77327), [#77760](https://github.com/kubernetes/kubernetes/pull/77760), [#77828](https://github.com/kubernetes/kubernetes/pull/77828), [#79062](https://github.com/kubernetes/kubernetes/pull/79062), [#80011](https://github.com/kubernetes/kubernetes/pull/80011), [#81068](https://github.com/kubernetes/kubernetes/pull/81068), [@Huang-Wei](https://github.com/Huang-Wei)) - -### CLI Improvements - -- the new flag `--endpoint-updates-batch-period` in kube-controller-manager can be used to reduce the number of endpoints updates generated by pod changes. ([#80509](https://github.com/kubernetes/kubernetes/pull/80509), [@mborsz](https://github.com/mborsz)) -- the kubectl `--all-namespaces` flag is now honored by `kubectl wait` ([#81468](https://github.com/kubernetes/kubernetes/pull/81468), [@ashutoshgngwr](https://github.com/ashutoshgngwr)) -- `kubectl get -w` now takes an `--output-watch-events` flag to indicate the event type (ADDED, MODIFIED, DELETED) ([#72416](https://github.com/kubernetes/kubernetes/pull/72416), [@liggitt](https://github.com/liggitt)) -- Adds Endpoint Slice support for kubectl when discovery API group is enabled. ([#81795](https://github.com/kubernetes/kubernetes/pull/81795), [@robscott](https://github.com/robscott)) - -### Misc - -- Add `--shutdown-delay-duration` to kube-apiserver in order to delay a graceful shutdown. `/healthz` will keep returning success during this time and requests are normally served, but `/readyz` will return failure immediately. This delay can be used to allow the SDN to update iptables on all nodes and stop sending traffic. ([#74416](https://github.com/kubernetes/kubernetes/pull/74416), [@sttts](https://github.com/sttts)) - Kubeadm now seamlessly migrates the CoreDNS Configuration when upgrading CoreDNS. ([#78033](https://github.com/kubernetes/kubernetes/pull/78033), [@rajansandeep](https://github.com/rajansandeep)) -- Add Endpoint Slice Controller for managing new EndpointSlice resource, disabled by default. ([#81048](https://github.com/kubernetes/kubernetes/pull/81048), [@robscott](https://github.com/robscott)) -- Adds `\livez` for liveness health checking for kube-apiserver. Using the parameter `--maximum-startup-sequence-duration` will allow the liveness endpoint to defer boot-sequence failures for the specified duration period. ([#81969](https://github.com/kubernetes/kubernetes/pull/81969), [@logicalhan](https://github.com/logicalhan)) -- Adds EndpointSlice integration to kube-proxy, can be enabled with EndpointSlice feature gate. ([#81430](https://github.com/kubernetes/kubernetes/pull/81430), [@robscott](https://github.com/robscott)) -- Add status condition to namespace resource ([#73405](https://github.com/kubernetes/kubernetes/pull/73405), [@wozniakjan](https://github.com/wozniakjan)) -- Enhance Azure cloud provider code to support both AAD and ADFS authentication. ([#80841](https://github.com/kubernetes/kubernetes/pull/80841), [@rjaini](https://github.com/rjaini)) -- kubeadm: implement support for concurrent add/remove of stacked etcd members ([#79677](https://github.com/kubernetes/kubernetes/pull/79677), [@neolit123](https://github.com/neolit123)) -- kubeadm: support any Linux kernel version newer than 3.10 ([#81623](https://github.com/kubernetes/kubernetes/pull/81623), [@neolit123](https://github.com/neolit123)) -- Volume expansion is enabled in the default GCE storageclass ([#78672](https://github.com/kubernetes/kubernetes/pull/78672), [@msau42](https://github.com/msau42)) -- kubeadm ClusterConfiguration now supports featureGates: IPv6DualStack: true ([#80145](https://github.com/kubernetes/kubernetes/pull/80145), [@Arvinderpal](https://github.com/Arvinderpal)) -- In order to enable dual-stack support within kubeadm and kubernetes components, as part of the init config file, the user should set feature-gate `IPv6DualStack=true` in the ClusterConfiguration. Additionally, for each worker node, the user should set the feature-gate for kubelet using either `nodeRegistration.kubeletExtraArgs` or `KUBELET_EXTRA_ARGS`. ([#80531](https://github.com/kubernetes/kubernetes/pull/80531), [@Arvinderpal](https://github.com/Arvinderpal)) -- Add possibility to configure controller manager to use IPv6 dual stack: - use `--cluster-cidr=","`. - Notes: - 1. Only the first two CIDRs are used (soft limits for Alpha, might be lifted later on). - 2. Only the "RangeAllocator" (default) is allowed as a value for `--cidr-allocator-type`. Cloud allocators are not compatible with IPv6 dual stack - ([#73977](https://github.com/kubernetes/kubernetes/pull/73977), [@khenidak](https://github.com/khenidak)) -- Add scheduling support for RuntimeClasses. RuntimeClasses can now specify nodeSelector constraints & tolerations, which are merged into the PodSpec for pods using that RuntimeClass. ([#80825](https://github.com/kubernetes/kubernetes/pull/80825), [@tallclair](https://github.com/tallclair)) -- When specifying `--(kube|system)-reserved-cgroup`, with `--cgroup-driver=systemd`, it is now possible to use the fully qualified cgroupfs name (i.e. `/test-cgroup.slice`). ([#78793](https://github.com/kubernetes/kubernetes/pull/78793), [@mattjmcnaughton](https://github.com/mattjmcnaughton)) -- Adds support for vSphere volumes on Windows ([#80911](https://github.com/kubernetes/kubernetes/pull/80911), [@gab-satchi](https://github.com/gab-satchi)) - -## API Changes - -- The `MutatingWebhookConfiguration` and `ValidatingWebhookConfiguration` APIs have been promoted to `admissionregistration.k8s.io/v1`: - - `failurePolicy` default changed from `Ignore` to `Fail` for v1 - - `matchPolicy` default changed from `Exact` to `Equivalent` for v1 - - `timeout` default changed from `30s` to `10s` for v1 - - `sideEffects` default value is removed, and the field made required, and only `None` and `NoneOnDryRun` are permitted for v1 - - `admissionReviewVersions` default value is removed and the field made required for v1 (supported versions for AdmissionReview are `v1` and `v1beta1`) - - The `name` field for specified webhooks must be unique for `MutatingWebhookConfiguration` and `ValidatingWebhookConfiguration` objects created via `admissionregistration.k8s.io/v1` -- The `AdmissionReview` API sent to and received from admission webhooks has been promoted to `admission.k8s.io/v1`. Webhooks can specify a preference for receiving `v1` AdmissionReview objects with `admissionReviewVersions: ["v1","v1beta1"]`, and must respond with an API object in the same `apiVersion` they are sent. When webhooks use `admission.k8s.io/v1`, the following additional validation is performed on their responses: - - `response.patch` and `response.patchType` are not permitted from validating admission webhooks - - `apiVersion: "admission.k8s.io/v1"` is required - - `kind: "AdmissionReview"` is required - - `response.uid: ""` is required - - `response.patchType: "JSONPatch"` is required (if `response.patch` is set) ([#80231](https://github.com/kubernetes/kubernetes/pull/80231), [@liggitt](https://github.com/liggitt)) -- The `CustomResourceDefinition` API type is promoted to `apiextensions.k8s.io/v1` with the following changes: - - Use of the new `default` feature in validation schemas is limited to v1 - - `spec.scope` is no longer defaulted to `Namespaced` and must be explicitly specified - - `spec.version` is removed in v1; use `spec.versions` instead - - `spec.validation` is removed in v1; use `spec.versions[*].schema` instead - - `spec.subresources` is removed in v1; use `spec.versions[*].subresources` instead - - `spec.additionalPrinterColumns` is removed in v1; use `spec.versions[*].additionalPrinterColumns` instead - - `spec.conversion.webhookClientConfig` is moved to `spec.conversion.webhook.clientConfig` in v1 - - `spec.conversion.conversionReviewVersions` is moved to `spec.conversion.webhook.conversionReviewVersions` in v1 - - `spec.versions[*].schema.openAPIV3Schema` is now required when creating v1 CustomResourceDefinitions - - `spec.preserveUnknownFields: true` is disallowed when creating v1 CustomResourceDefinitions; it must be specified within schema definitions as `x-kubernetes-preserve-unknown-fields: true` - - In `additionalPrinterColumns` items, the `JSONPath` field was renamed to `jsonPath` in v1 (fixes https://github.com/kubernetes/kubernetes/issues/66531) - The `apiextensions.k8s.io/v1beta1` version of `CustomResourceDefinition` is deprecated and will no longer be served in v1.19. ([#79604](https://github.com/kubernetes/kubernetes/pull/79604), [@liggitt](https://github.com/liggitt)) -- The `ConversionReview` API sent to and received from custom resource CustomResourceDefinition conversion webhooks has been promoted to `apiextensions.k8s.io/v1`. CustomResourceDefinition conversion webhooks can now indicate they support receiving and responding with `ConversionReview` API objects in the `apiextensions.k8s.io/v1` version by including `v1` in the `conversionReviewVersions` list in their CustomResourceDefinition. Conversion webhooks must respond with a ConversionReview object in the same apiVersion they receive. `apiextensions.k8s.io/v1` `ConversionReview` responses must specify a `response.uid` that matches the `request.uid` of the object they were sent. ([#81476](https://github.com/kubernetes/kubernetes/pull/81476), [@liggitt](https://github.com/liggitt)) -- Add scheduling support for RuntimeClasses. RuntimeClasses can now specify nodeSelector constraints & tolerations, which are merged into the PodSpec for pods using that RuntimeClass. ([#80825](https://github.com/kubernetes/kubernetes/pull/80825), [@tallclair](https://github.com/tallclair)) -- Kubelet should now more reliably report the same primary node IP even if the set of node IPs reported by the CloudProvider changes. ([#79391](https://github.com/kubernetes/kubernetes/pull/79391), [@danwinship](https://github.com/danwinship)) -- Omit nil or empty field when calculating container hash value to avoid hash changed. For a new field with a non-nil default value in the container spec, the hash would still get changed. ([#57741](https://github.com/kubernetes/kubernetes/pull/57741), [@dixudx](https://github.com/dixudx)) -- Property `conditions` in `apiextensions.v1beta1.CustomResourceDefinitionStatus` and `apiextensions.v1.CustomResourceDefinitionStatus` is now optional instead of required. ([#64996](https://github.com/kubernetes/kubernetes/pull/64996), [@roycaihw](https://github.com/roycaihw)) -- When the status of a CustomResourceDefinition condition changes, its corresponding `lastTransitionTime` is now updated. ([#69655](https://github.com/kubernetes/kubernetes/pull/69655), [@CaoShuFeng](https://github.com/CaoShuFeng)) - -## Other notable changes - -### API Machinery - -- Remove `GetReference()` and `GetPartialReference()` function from `pkg/api/ref`, as the same function exists also in `staging/src/k8s.io/client-go/tools/ref` ([#80361](https://github.com/kubernetes/kubernetes/pull/80361), [@wojtek-t](https://github.com/wojtek-t)) -- Verify that CRD default values in OpenAPI specs are pruned, with the exceptions of values under `metadata`. ([#78829](https://github.com/kubernetes/kubernetes/pull/78829), [@sttts](https://github.com/sttts)) -- Fixes a bug that when there is a "connection refused" error, the reflector's ListAndWatch func will return directly but what expected is that sleep 1 second and rewatch since the specified resourceVersion. - ([#81634](https://github.com/kubernetes/kubernetes/pull/81634), [@likakuli](https://github.com/likakuli)) -- Resolves an issue serving aggregated APIs backed by services that respond to requests to `/` with non-2xx HTTP responses ([#79895](https://github.com/kubernetes/kubernetes/pull/79895), [@deads2k](https://github.com/deads2k)) -- The CRD handler now properly re-creates stale CR storage to reflect CRD update. ([#79114](https://github.com/kubernetes/kubernetes/pull/79114), [@roycaihw](https://github.com/roycaihw)) -- Fix CVE-2019-11247: API server allows access to custom resources via wrong scope ([#80750](https://github.com/kubernetes/kubernetes/pull/80750), [@sttts](https://github.com/sttts)) -- Fixed a bug with the openAPI definition for `io.k8s.apimachinery.pkg.runtime.RawExtension`, which previously required a field `raw` to be specified ([#80773](https://github.com/kubernetes/kubernetes/pull/80773), [@jennybuckley](https://github.com/jennybuckley)) -- Property `conditions` in `apiextensions.v1beta1.CustomResourceDefinitionStatus` and `apiextensions.v1.CustomResourceDefinitionStatus` is now optional instead of required. ([#64996](https://github.com/kubernetes/kubernetes/pull/64996), [@roycaihw](https://github.com/roycaihw)) -- Resolves a transient 404 response to custom resource requests during server startup ([#81244](https://github.com/kubernetes/kubernetes/pull/81244), [@liggitt](https://github.com/liggitt)) -- OpenAPI now advertises correctly supported patch types for custom resources ([#81515](https://github.com/kubernetes/kubernetes/pull/81515), [@liggitt](https://github.com/liggitt)) -- When the status of a CRD Condition changes, it's corresponding `LastTransitionTime` is now updated. ([#69655](https://github.com/kubernetes/kubernetes/pull/69655), [@CaoShuFeng](https://github.com/CaoShuFeng)) -- Add `metadata.generation=1` to old CustomResources. ([#82005](https://github.com/kubernetes/kubernetes/pull/82005), [@sttts](https://github.com/sttts)) -- Fix a bug in the apiserver that could cause a valid update request to be rejected with a precondition check failure. ([#82303](https://github.com/kubernetes/kubernetes/pull/82303), [@roycaihw](https://github.com/roycaihw)) -- Fixes regression in logging spurious stack traces when proxied connections are closed by the backend ([#82588](https://github.com/kubernetes/kubernetes/pull/82588), [@liggitt](https://github.com/liggitt)) -- RateLimiter add a context-aware method, fix client-go request goruntine backlog in async timeout scene. ([#79375](https://github.com/kubernetes/kubernetes/pull/79375), [@answer1991](https://github.com/answer1991)) -- Add a `Patch` method to `ScaleInterface` ([#80699](https://github.com/kubernetes/kubernetes/pull/80699), [@knight42](https://github.com/knight42)) -- CRDs under k8s.io and kubernetes.io must have the `api-approved.kubernetes.io` set to either `unapproved.*` or a link to the pull request approving the schema. See https://github.com/kubernetes/enhancements/pull/1111 for more details. ([#79992](https://github.com/kubernetes/kubernetes/pull/79992), [@deads2k](https://github.com/deads2k)) -- KMS Providers will install a healthz check for the status of kms-plugin in kube-apiservers' encryption config. ([#78540](https://github.com/kubernetes/kubernetes/pull/78540), [@immutableT](https://github.com/immutableT)) -- Improves validation errors for custom resources ([#81212](https://github.com/kubernetes/kubernetes/pull/81212), [@liggitt](https://github.com/liggitt)) -- Populate object name for admission attributes when CREATE ([#53185](https://github.com/kubernetes/kubernetes/pull/53185), [@dixudx](https://github.com/dixudx)) -- Add Overhead field to the PodSpec and RuntimeClass types as part of the Pod Overhead KEP ([#76968](https://github.com/kubernetes/kubernetes/pull/76968), [@egernst](https://github.com/egernst)) - -### Apps - -- Fix a bug that pods not be deleted from unmatched nodes by daemon controller ([#78974](https://github.com/kubernetes/kubernetes/pull/78974), [@DaiHao](https://github.com/DaiHao)) -- Fix a bug that causes DaemonSet rolling update hang when there exist failed pods. ([#78170](https://github.com/kubernetes/kubernetes/pull/78170), [@DaiHao](https://github.com/DaiHao)) - -### Auth - -- Service account tokens now include the JWT Key ID field in their header. ([#78502](https://github.com/kubernetes/kubernetes/pull/78502), [@ahmedtd](https://github.com/ahmedtd)) -- The nbf (not before) claim, if present in ID token, is now enforced. ([#81413](https://github.com/kubernetes/kubernetes/pull/81413), [@anderseknert](https://github.com/anderseknert)) - -### CLI - -- Fix CVE-2019-11249: Incomplete fixes for CVE-2019-1002101 and CVE-2019-11246, kubectl cp potential directory traversal ([#80436](https://github.com/kubernetes/kubernetes/pull/80436), [@M00nF1sh](https://github.com/M00nF1sh)) -- Fix the bash completion error with override flags. ([#80802](https://github.com/kubernetes/kubernetes/pull/80802), [@dtaniwaki](https://github.com/dtaniwaki)) -- Fix a bug in server printer that could cause kube-apiserver to panic. ([#79349](https://github.com/kubernetes/kubernetes/pull/79349), [@roycaihw](https://github.com/roycaihw)) -- Fix invalid "time stamp is the future" error when kubectl cp-ing a file ([#73982](https://github.com/kubernetes/kubernetes/pull/73982), [@tanshanshan](https://github.com/tanshanshan)) -- Fix a bug where `kubectl set config` hangs and uses 100% CPU on some invalid property names ([#79000](https://github.com/kubernetes/kubernetes/pull/79000), [@pswica](https://github.com/pswica)) -- Fix output of `kubectl get --watch-only` when watching a single resource ([#79345](https://github.com/kubernetes/kubernetes/pull/79345), [@liggitt](https://github.com/liggitt)) -- Make kubectl get `--ignore-not-found` continue processing when encountering error. ([#82120](https://github.com/kubernetes/kubernetes/pull/82120), [@soltysh](https://github.com/soltysh)) -- Correct a reference to a not/no longer used kustomize subcommand in the documentation ([#82535](https://github.com/kubernetes/kubernetes/pull/82535), [@demobox](https://github.com/demobox)) -- kubectl could scale custom resource again ([#81342](https://github.com/kubernetes/kubernetes/pull/81342), [@knight42](https://github.com/knight42)) -- Add PodOverhead awareness to kubectl ([#81929](https://github.com/kubernetes/kubernetes/pull/81929), [@egernst](https://github.com/egernst)) - -### Cloud Provider - -- When a load balancer type service is created in a k8s cluster that is backed by Azure Standard Load Balancer, the corresponding load balancer rule added in the Azure Standard Load Balancer would now have the "EnableTcpReset" property set to true. ([#80624](https://github.com/kubernetes/kubernetes/pull/80624), [@xuto2](https://github.com/xuto2)) -- Switch to VM Update call in attach/detach disk operation, original CreateOrUpdate call may lead to orphaned VMs or blocked resources ([#81208](https://github.com/kubernetes/kubernetes/pull/81208), [@andyzhangx](https://github.com/andyzhangx)) -- Fix azure disk naming matching issue due to case sensitive comparison ([#81720](https://github.com/kubernetes/kubernetes/pull/81720), [@andyzhangx](https://github.com/andyzhangx)) -- Fix retry issues when the nodes are under deleting on Azure ([#80419](https://github.com/kubernetes/kubernetes/pull/80419), [@feiskyer](https://github.com/feiskyer)) -- Fix conflicted cache when the requests are canceled by other Azure operations. ([#81282](https://github.com/kubernetes/kubernetes/pull/81282), [@feiskyer](https://github.com/feiskyer)) -- Fix make azure disk URI as case insensitive ([#79020](https://github.com/kubernetes/kubernetes/pull/79020), [@andyzhangx](https://github.com/andyzhangx)) -- Fix VMSS LoadBalancer backend pools so that the network won't be broken when instances are upgraded to latest model ([#81411](https://github.com/kubernetes/kubernetes/pull/81411), [@nilo19](https://github.com/nilo19)) -- Default resourceGroup should be used when the value of annotation azure-load-balancer-resource-group is an empty string. ([#79514](https://github.com/kubernetes/kubernetes/pull/79514), [@feiskyer](https://github.com/feiskyer)) -- Kubelet could be run with no Azure identity without subscriptionId configured now. - A sample cloud provider configure is: '{"vmType": "vmss", "useInstanceMetadata": true}'. ([#81500](https://github.com/kubernetes/kubernetes/pull/81500), [@feiskyer](https://github.com/feiskyer)) -- Fix public IP not found issues for VMSS nodes ([#80703](https://github.com/kubernetes/kubernetes/pull/80703), [@feiskyer](https://github.com/feiskyer)) -- Fix Azure client requests stuck issues on http.StatusTooManyRequests (HTTP Code 429). ([#81279](https://github.com/kubernetes/kubernetes/pull/81279), [@feiskyer](https://github.com/feiskyer)) -- Add a service annotation `service.beta.kubernetes.io/azure-pip-name` to specify the public IP name for Azure load balancer. ([#81213](https://github.com/kubernetes/kubernetes/pull/81213), [@nilo19](https://github.com/nilo19)) -- Optimize EC2 DescribeInstances API calls in aws cloud provider library by querying instance ID instead of EC2 filters when possible ([#78140](https://github.com/kubernetes/kubernetes/pull/78140), [@zhan849](https://github.com/zhan849)) -- Creates an annotation `service.beta.kubernetes.io/aws-load-balancer-eip-allocations` to assign AWS EIP to the newly created Network Load Balancer. Number of allocations and subnets must match. ([#69263](https://github.com/kubernetes/kubernetes/pull/69263), [@brooksgarrett](https://github.com/brooksgarrett)) -- Add an azure cloud configuration `LoadBalancerName` and `LoadBalancerResourceGroup` to allow the corresponding customizations of azure load balancer. ([#81054](https://github.com/kubernetes/kubernetes/pull/81054), [@nilo19](https://github.com/nilo19)) - -### Cluster Lifecycle - -- Fix error handling and potential go null pointer exception in kubeadm upgrade diff ([#80648](https://github.com/kubernetes/kubernetes/pull/80648), [@odinuge](https://github.com/odinuge)) -- kubeadm: fall back to client version in case of certain HTTP errors ([#80024](https://github.com/kubernetes/kubernetes/pull/80024), [@RainbowMango](https://github.com/RainbowMango)) -- kubeadm: fix a potential panic if kubeadm discovers an invalid, existing kubeconfig file ([#79165](https://github.com/kubernetes/kubernetes/pull/79165), [@neolit123](https://github.com/neolit123)) -- kubeadm: treat non-fatal errors as warnings when doing reset ([#80862](https://github.com/kubernetes/kubernetes/pull/80862), [@drpaneas](https://github.com/drpaneas)) -- kubeadm: prevent PSP blocking of upgrade image prepull by using a non-root user ([#77792](https://github.com/kubernetes/kubernetes/pull/77792), [@neolit123](https://github.com/neolit123)) -- kubeadm: fix "certificate-authority" files not being pre-loaded when using file discovery ([#80966](https://github.com/kubernetes/kubernetes/pull/80966), [@neolit123](https://github.com/neolit123)) -- Add instruction to setup "Application Default Credentials" to run GCE Windows e2e tests locally. ([#81337](https://github.com/kubernetes/kubernetes/pull/81337), [@YangLu1031](https://github.com/YangLu1031)) -- Fix error in `kubeadm join --discovery-file` when using discovery files with embedded credentials ([#80675](https://github.com/kubernetes/kubernetes/pull/80675), [@fabriziopandini](https://github.com/fabriziopandini)) -- Fix remove the etcd member from the cluster during a kubeadm reset. ([#79326](https://github.com/kubernetes/kubernetes/pull/79326), [@bradbeam](https://github.com/bradbeam)) -- kubeadm: the permissions of generated CSR files are changed from 0644 to 0600 ([#81217](https://github.com/kubernetes/kubernetes/pull/81217), [@SataQiu](https://github.com/SataQiu)) -- kubeadm: avoid double deletion of the upgrade prepull DaemonSet ([#80798](https://github.com/kubernetes/kubernetes/pull/80798), [@xlgao-zju](https://github.com/xlgao-zju)) -- kubeadm: introduce deterministic ordering for the certificates generation in the phase command `kubeadm init phase certs`. ([#78556](https://github.com/kubernetes/kubernetes/pull/78556), [@neolit123](https://github.com/neolit123)) -- kubeadm: implement retry logic for certain ConfigMap failures when joining nodes ([#78915](https://github.com/kubernetes/kubernetes/pull/78915), [@ereslibre](https://github.com/ereslibre)) -- kubeadm: use etcd's /health endpoint for a HTTP liveness probe on localhost instead of having a custom health check using etcdctl ([#81385](https://github.com/kubernetes/kubernetes/pull/81385), [@neolit123](https://github.com/neolit123)) -- kubeadm reset: unmount directories under `/var/lib/kubelet` for Linux only ([#81494](https://github.com/kubernetes/kubernetes/pull/81494), [@Klaven](https://github.com/Klaven)) -- kubeadm: fix the bug that `--cri-socket` flag does not work for `kubeadm reset` ([#79498](https://github.com/kubernetes/kubernetes/pull/79498), [@SataQiu](https://github.com/SataQiu)) -- kubeadm: produce errors if they occur when resetting cluster status for a control-plane node ([#80573](https://github.com/kubernetes/kubernetes/pull/80573), [@bart0sh](https://github.com/bart0sh)) -- Fix an error when using external etcd but storing etcd certificates in the same folder with the same name used by kubeadm for local etcd certificates; for an older version of kubeadm, the workaround is to avoid file name used by kubeadm for local etcd. ([#80867](https://github.com/kubernetes/kubernetes/pull/80867), [@fabriziopandini](https://github.com/fabriziopandini)) -- `kubeadm join` fails if file-based discovery is too long, with a default timeout of 5 minutes. ([#80804](https://github.com/kubernetes/kubernetes/pull/80804), [@olivierlemasle](https://github.com/olivierlemasle)) -- kubeadm: fixed ignoring errors when pulling control plane images ([#80529](https://github.com/kubernetes/kubernetes/pull/80529), [@bart0sh](https://github.com/bart0sh)) -- Fix a bug in kube-addon-manager's leader election logic that made all replicas active. ([#80575](https://github.com/kubernetes/kubernetes/pull/80575), [@mborsz](https://github.com/mborsz)) -- kubeadm: prevent overriding of certain kubelet security configuration parameters if the user wished to modify them ([#81903](https://github.com/kubernetes/kubernetes/pull/81903), [@jfbai](https://github.com/jfbai)) -- kubeadm no longer performs IPVS checks as part of its preflight checks ([#81791](https://github.com/kubernetes/kubernetes/pull/81791), [@yastij](https://github.com/yastij)) -- kubeadm: fix for HTTPProxy check for IPv6 addresses ([#82267](https://github.com/kubernetes/kubernetes/pull/82267), [@kad](https://github.com/kad)) -- kubeadm: Allow users to skip the kube-proxy init addon phase during init and still be able to join a cluster and perform some other minor operations (but not upgrade). ([#82248](https://github.com/kubernetes/kubernetes/pull/82248), [@rosti](https://github.com/rosti)) -- Mounts `/home/kubernetes/bin/nvidia/vulkan/icd.d` on the host to `/etc/vulkan/icd.d` inside containers requesting GPU. ([#78868](https://github.com/kubernetes/kubernetes/pull/78868), [@chardch](https://github.com/chardch)) -- kubeadm: use the `--pod-network-cidr` flag to init or use the podSubnet field in the kubeadm config to pass a comma separated list of pod CIDRs. ([#79033](https://github.com/kubernetes/kubernetes/pull/79033), [@Arvinderpal](https://github.com/Arvinderpal)) -- kubeadm: provide `--control-plane-endpoint` flag for `controlPlaneEndpoint` ([#79270](https://github.com/kubernetes/kubernetes/pull/79270), [@SataQiu](https://github.com/SataQiu)) -- kubeadm: enable secure serving for the kube-scheduler ([#80951](https://github.com/kubernetes/kubernetes/pull/80951), [@neolit123](https://github.com/neolit123)) -- kubeadm: print the stack trace of an error for klog level `--v>=5` ([#80937](https://github.com/kubernetes/kubernetes/pull/80937), [@neolit123](https://github.com/neolit123)) -- Add `--kubernetes-version` to `kubeadm init phase certs ca` and `kubeadm init phase kubeconfig` ([#80115](https://github.com/kubernetes/kubernetes/pull/80115), [@gyuho](https://github.com/gyuho)) -- kubeadm: support fetching configuration from the original cluster for `upgrade diff` ([#80025](https://github.com/kubernetes/kubernetes/pull/80025), [@SataQiu](https://github.com/SataQiu)) -- When using the conformance test image, a new environment variable `E2E_USE_GO_RUNNER` will cause the tests to be run with the new golang-based test runner rather than the current bash wrapper. ([#79284](https://github.com/kubernetes/kubernetes/pull/79284), [@johnSchnake](https://github.com/johnSchnake)) -- Implement a new feature that allows applying kustomize patches to static pod manifests generated by kubeadm. ([#80905](https://github.com/kubernetes/kubernetes/pull/80905), [@fabriziopandini](https://github.com/fabriziopandini)) -- The 404 request handler for the GCE Ingress load balancer now exports prometheus metrics, including: - - - `http_404_request_total` (the number of 404 requests handled) - - `http_404_request_duration_ms` (the amount of time the server took to respond in ms) - - Also includes percentile groupings. The directory for the default 404 handler includes instructions on how to enable prometheus for monitoring and setting alerts. - ([#79106](https://github.com/kubernetes/kubernetes/pull/79106), [@vbannai](https://github.com/vbannai)) - -### Instrumentation - -- Kibana has been slightly revamped/improved in the latest version ([#80421](https://github.com/kubernetes/kubernetes/pull/80421), [@lostick](https://github.com/lostick)) - -### Network - -- Fix a string comparison bug in IPVS graceful termination where UDP real servers are not deleted. ([#78999](https://github.com/kubernetes/kubernetes/pull/78999), [@andrewsykim](https://github.com/andrewsykim)) -- `kube-proxy --cleanup will` return the correct exit code if the cleanup was successful ([#78775](https://github.com/kubernetes/kubernetes/pull/78775), [@johscheuer](https://github.com/johscheuer)) -- Fix a bug in the IPVS proxier where virtual servers are not cleaned up even though the corresponding Service object was deleted. ([#80942](https://github.com/kubernetes/kubernetes/pull/80942), [@gongguan](https://github.com/gongguan)) -- kube-proxy waits for some duration for the node to be defined. ([#77167](https://github.com/kubernetes/kubernetes/pull/77167), [@paulsubrata55](https://github.com/paulsubrata55)) -- Increase log level for graceful termination to `v=5` ([#80100](https://github.com/kubernetes/kubernetes/pull/80100), [@andrewsykim](https://github.com/andrewsykim)) -- Reduce kube-proxy CPU usage in IPVS mode when a large number of nodePort services exist. ([#79444](https://github.com/kubernetes/kubernetes/pull/79444), [@cezarsa](https://github.com/cezarsa)) -- Fix in kube-proxy for SCTP nodeport service which only works for node's InternalIP, but doesn't work for other IPs present in the node when ipvs is enabled. ([#81477](https://github.com/kubernetes/kubernetes/pull/81477), [@paulsubrata55](https://github.com/paulsubrata55)) -- Ensure the `KUBE-MARK-DROP` chain in kube-proxy IPVS mode. The chain is ensured for both IPv4 and IPv6 in dual-stack operation. ([#82214](https://github.com/kubernetes/kubernetes/pull/82214), [@uablrek](https://github.com/uablrek)) -- Introduce `node.kubernetes.io/exclude-balancer` and `node.kubernetes.io/exclude-disruption` labels in alpha to prevent cluster deployers from being dependent on the optional `node-role` labels which not all clusters may provide. ([#80238](https://github.com/kubernetes/kubernetes/pull/80238), [@smarterclayton](https://github.com/smarterclayton)) -- If targetPort is changed that will process by service controller ([#77712](https://github.com/kubernetes/kubernetes/pull/77712), [@Sn0rt](https://github.com/Sn0rt)) - -### Node - -- Remove PIDs cgroup controller requirement when related feature gates are disabled - ([#79073](https://github.com/kubernetes/kubernetes/pull/79073), [@rafatio](https://github.com/rafatio)) -- Fix kubelet NodeLease potential performance issues. Kubelet now will try to update lease using cached one instead of get from API Server every time. ([#81174](https://github.com/kubernetes/kubernetes/pull/81174), [@answer1991](https://github.com/answer1991)) -- Passing an invalid policy name in the `--cpu-manager-policy` flag will now cause the kubelet to fail instead of simply ignoring the flag and running the `cpumanager`’s default policy instead. ([#80294](https://github.com/kubernetes/kubernetes/pull/80294), [@klueska](https://github.com/klueska)) -- Make node lease renew interval more heuristic based on node-status-update-frequency in kubelet ([#80173](https://github.com/kubernetes/kubernetes/pull/80173), [@gaorong](https://github.com/gaorong)) -- Kubelet should now more reliably report the same primary node IP even if the set of node IPs reported by the CloudProvider changes. ([#79391](https://github.com/kubernetes/kubernetes/pull/79391), [@danwinship](https://github.com/danwinship)) -- Omit `nil` or empty field when calculating container hash value to avoid hash changed. For a new field with a non-nil default value in the container spec, the hash would still get changed. ([#57741](https://github.com/kubernetes/kubernetes/pull/57741), [@dixudx](https://github.com/dixudx)) -- Fix a bug where kubelet would not retry pod sandbox creation when the restart policy of the pod is Never ([#79451](https://github.com/kubernetes/kubernetes/pull/79451), [@yujuhong](https://github.com/yujuhong)) -- Limit the body length of exec readiness/liveness probes. remote CRIs and Docker shim read a max of 16MB output of which the exec probe itself inspects 10kb. ([#82514](https://github.com/kubernetes/kubernetes/pull/82514), [@dims](https://github.com/dims)) -- Single static pod files and pod files from http endpoints cannot be larger than 10 MB. HTTP probe payloads are now truncated to 10KB. ([#82669](https://github.com/kubernetes/kubernetes/pull/82669), [@rphillips](https://github.com/rphillips)) -- Introduce support for applying pod overhead to pod cgroups, if the PodOverhead feature is enabled. ([#79247](https://github.com/kubernetes/kubernetes/pull/79247), [@egernst](https://github.com/egernst)) -- Node-Problem-Detector v0.7.1 is used on GCI ([#80726](https://github.com/kubernetes/kubernetes/pull/80726), [@wangzhen127](https://github.com/wangzhen127)) -- Node-Problem-Detector v0.7.1 is used for addon daemonset. ([#82140](https://github.com/kubernetes/kubernetes/pull/82140), [@wangzhen127](https://github.com/wangzhen127)) -- Enable cAdvisor ProcessMetrics collecting. ([#79002](https://github.com/kubernetes/kubernetes/pull/79002), [@jiayingz](https://github.com/jiayingz)) -- kubelet: change `node-lease-renew-interval` to 0.25 of lease-renew-duration ([#80429](https://github.com/kubernetes/kubernetes/pull/80429), [@gaorong](https://github.com/gaorong)) -- Attempt to set the kubelet's hostname & internal IP if `--cloud-provider=external` and no node addresses exists ([#75229](https://github.com/kubernetes/kubernetes/pull/75229), [@andrewsykim](https://github.com/andrewsykim)) - -### Scheduling - -- Scheduler should terminate when it loses leader lock. ([#81306](https://github.com/kubernetes/kubernetes/pull/81306), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla)) -- If scheduler extender filtered a not found node, current scheduling round for this pod will just be skipped. - ([#79641](https://github.com/kubernetes/kubernetes/pull/79641), [@yqwang-ms](https://github.com/yqwang-ms)) -- Extender bind should respect IsInterested ([#79804](https://github.com/kubernetes/kubernetes/pull/79804), [@yqwang-ms](https://github.com/yqwang-ms)) -- Fix an issue with toleration merging & whitelist checking in the PodTolerationRestriction admission controller. ([#81732](https://github.com/kubernetes/kubernetes/pull/81732), [@tallclair](https://github.com/tallclair)) -- Add a helper function to decode scheduler plugin args. ([#80696](https://github.com/kubernetes/kubernetes/pull/80696), [@hex108](https://github.com/hex108)) -- Fix filter plugins are not been called during preemption ([#81876](https://github.com/kubernetes/kubernetes/pull/81876), [@wgliang](https://github.com/wgliang)) -- Fix an issue that the correct PluginConfig.Args is not passed to the corresponding PluginFactory in kube-scheduler when multiple PluginConfig items are defined. ([#82483](https://github.com/kubernetes/kubernetes/pull/82483), [@everpeace](https://github.com/everpeace)) -- Take the context as the first argument of Schedule. ([#82119](https://github.com/kubernetes/kubernetes/pull/82119), [@wgliang](https://github.com/wgliang)) -- Implement `post-filter` extension point for scheduling framework ([#78097](https://github.com/kubernetes/kubernetes/pull/78097), [@draveness](https://github.com/draveness)) -- Add Bind extension point of the scheduling framework ([#78513](https://github.com/kubernetes/kubernetes/pull/78513), [@chenchun](https://github.com/chenchun)) -- Add Filter extension point to the scheduling framework. ([#78477](https://github.com/kubernetes/kubernetes/pull/78477), [@YoubingLi](https://github.com/YoubingLi)) -- Return error when the scoring plugin returns score out of range `[0, 100]`. ([#81015](https://github.com/kubernetes/kubernetes/pull/81015), [@draveness](https://github.com/draveness)) -- Use a named array instead of a score array in normalizing-score phase. ([#80901](https://github.com/kubernetes/kubernetes/pull/80901), [@draveness](https://github.com/draveness)) -- Updates the `requestedToCapacityRatioArguments` to add resources parameter that allows the users to specify the resource name along with weights for each resource to score nodes based on the request to capacity ratio. ([#77688](https://github.com/kubernetes/kubernetes/pull/77688), [@sudeshsh](https://github.com/sudeshsh)) -- Add `UnschedulableAndUnresolvable` status code for scheduling framework ([#82034](https://github.com/kubernetes/kubernetes/pull/82034), [@alculquicondor](https://github.com/alculquicondor)) -- Add normalize plugin extension point for the scheduling framework. - ([#80383](https://github.com/kubernetes/kubernetes/pull/80383), [@liu-cong](https://github.com/liu-cong)) -- Add Bind extension point to the scheduling framework. ([#79313](https://github.com/kubernetes/kubernetes/pull/79313), [@chenchun](https://github.com/chenchun)) -- Add Score extension point to the scheduling framework. ([#79109](https://github.com/kubernetes/kubernetes/pull/79109), [@ahg-g](https://github.com/ahg-g)) -- Add Pre-filter extension point to the scheduling framework. ([#78005](https://github.com/kubernetes/kubernetes/pull/78005), [@ahg-g](https://github.com/ahg-g)) -- Add support for writing out of tree custom scheduler plugins. ([#78162](https://github.com/kubernetes/kubernetes/pull/78162), [@hex108](https://github.com/hex108)) - -### Storage - -- Fix possible file descriptor leak and closing of dirs in `doSafeMakeDir` ([#79534](https://github.com/kubernetes/kubernetes/pull/79534), [@odinuge](https://github.com/odinuge)) -- Azure disks of shared kind will no longer fail if they do not contain `skuname` or `storageaccounttype`. ([#80837](https://github.com/kubernetes/kubernetes/pull/80837), [@rmweir](https://github.com/rmweir)) -- Fix CSI plugin supporting raw block that does not need attach mounted failed ([#79920](https://github.com/kubernetes/kubernetes/pull/79920), [@cwdsuzhou](https://github.com/cwdsuzhou)) -- Reduces GCE PD Node Attach Limits by 1 since the node boot disk is considered an attachable disk ([#80923](https://github.com/kubernetes/kubernetes/pull/80923), [@davidz627](https://github.com/davidz627)) -- Remove iSCSI volume storage cleartext secrets in logs ([#81215](https://github.com/kubernetes/kubernetes/pull/81215), [@zouyee](https://github.com/zouyee)) -- Fixes validation of VolumeAttachment API objects created with inline volume sources. ([#80945](https://github.com/kubernetes/kubernetes/pull/80945), [@tedyu](https://github.com/tedyu)) -- Changes timeout value in csi plugin from 15s to 2min which fixes the timeout issue ([#79529](https://github.com/kubernetes/kubernetes/pull/79529), [@andyzhangx](https://github.com/andyzhangx)) -- Fix kubelet fail to delete orphaned pod directory when the kubelet's pods directory (default is `/var/lib/kubelet/pods`) symbolically links to another disk device's directory ([#79094](https://github.com/kubernetes/kubernetes/pull/79094), [@gaorong](https://github.com/gaorong)) - -## Testing - -- Fix pod list return value of `framework.WaitForPodsWithLabelRunningReady` ([#78687](https://github.com/kubernetes/kubernetes/pull/78687), [@pohly](https://github.com/pohly)) -- Adding `TerminationGracePeriodSeconds` to the test framework API ([#82170](https://github.com/kubernetes/kubernetes/pull/82170), [@vivekbagade](https://github.com/vivekbagade)) -- `/test/e2e/framework`: Adds a flag `non-blocking-taints` which allows tests to run in environments with tainted nodes. String value should be a comma-separated list. ([#81043](https://github.com/kubernetes/kubernetes/pull/81043), [@johnSchnake](https://github.com/johnSchnake)) -- Move CSI volume expansion to beta. ([#81467](https://github.com/kubernetes/kubernetes/pull/81467), [@bertinatto](https://github.com/bertinatto)) -- Added E2E tests validating WindowsOptions.RunAsUserName. ([#79539](https://github.com/kubernetes/kubernetes/pull/79539), [@bclau](https://github.com/bclau)) -- `framework.ExpectNoError` no longer logs the error and instead relies on using the new `log.Fail` as gomega fail handler. ([#80253](https://github.com/kubernetes/kubernetes/pull/80253), [@pohly](https://github.com/pohly)) - -### Windows - -- On Windows systems, `%USERPROFILE%` is now preferred over `%HOMEDRIVE%\%HOMEPATH%` as the home folder if `%HOMEDRIVE%\%HOMEPATH%` does not contain a `.kube\config` file, and `%USERPROFILE%` exists and is writable. ([#73923](https://github.com/kubernetes/kubernetes/pull/73923), [@liggitt](https://github.com/liggitt)) -- Add support for AWS EBS on windows ([#79552](https://github.com/kubernetes/kubernetes/pull/79552), [@wongma7](https://github.com/wongma7)) -- Support Kubelet plugin watcher on Windows nodes. ([#81397](https://github.com/kubernetes/kubernetes/pull/81397), [@ddebroy](https://github.com/ddebroy)) - -## Dependencies - -### Changed - -- the default Go version was updated to v1.12.9. ([#78958](https://github.com/kubernetes/kubernetes/pull/78958), [#79966](https://github.com/kubernetes/kubernetes/pull/79966), [#81390](https://github.com/kubernetes/kubernetes/pull/81390), [#81489](https://github.com/kubernetes/kubernetes/pull/81489)) -- etcd has been updated to v3.3.15 ([#82199](https://github.com/kubernetes/kubernetes/pull/82199), [@dims](https://github.com/dims)) -- CoreDNS for kubeadm and kube-up has been updated to v1.6.2 ([#82127](https://github.com/kubernetes/kubernetes/pull/82127)) -- Cluster Autoscaler has been updated to v1.16.0 ([#82501](https://github.com/kubernetes/kubernetes/pull/82501), [@losipiuk](https://github.com/losipiuk)) -- fluentd has been updated to v1.5.1 ([#79014](https://github.com/kubernetes/kubernetes/pull/79014)) -- fluentd-elasticsearch plugin has been updated to v3.5.3 ([#79014](https://github.com/kubernetes/kubernetes/pull/79014)) -- elasticsearch has been updated to v7.1.1 ([#79014](https://github.com/kubernetes/kubernetes/pull/79014)) -- kibana has been updated to v7.1.1 ([#79014](https://github.com/kubernetes/kubernetes/pull/79014)) -- Azure SDK and go-autorest API versions have been updated ([#79574](https://github.com/kubernetes/kubernetes/pull/79574)) -- Azure API versions have been updated (container registry to 2018-09-01, network to 2018-08-01) ([#79583](https://github.com/kubernetes/kubernetes/pull/79583)) -- kube-addon-manager has been updated to v9.0.2 ([#80861](https://github.com/kubernetes/kubernetes/pull/80861)) -- golang/x/net has been updated to bring in fixes for CVE-2019-9512, CVE-2019-9514 ([#81394](https://github.com/kubernetes/kubernetes/pull/81394)) -- GCE windows node image has been updated. ([#81106](https://github.com/kubernetes/kubernetes/pull/81106)) -- portworx plugin has been updated on libopenstorage/openstorage to v1.0.0 ([#80495](https://github.com/kubernetes/kubernetes/pull/80495)) -- metrics-server has been updated to v0.3.4 ([#82322](https://github.com/kubernetes/kubernetes/pull/82322), [@olagacek](https://github.com/olagacek)) -- klog has been updated to v0.4.0 ([#81164](https://github.com/kubernetes/kubernetes/pull/81164)) - -### Unchanged - -- The list of validated docker versions remains unchanged. - - The current list is 1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09. ([#72823](https://github.com/kubernetes/kubernetes/pull/72823), [#72831](https://github.com/kubernetes/kubernetes/pull/72831)) -- CNI remains unchanged at v0.7.5. ([#75455](https://github.com/kubernetes/kubernetes/pull/75455)) -- cri-tools remains unchanged at v1.14.0. ([#75658](https://github.com/kubernetes/kubernetes/pull/75658)) -- CAdvisor remains unchanged at v0.33.2. ([#76291](https://github.com/kubernetes/kubernetes/pull/76291)) -- event-exporter remains unchanged at v0.2.5. ([#77815](https://github.com/kubernetes/kubernetes/pull/77815)) -- ip-masq-agent remains unchanged at v2.4.1. ([#77844](https://github.com/kubernetes/kubernetes/pull/77844)) -- k8s-dns-node-cache remains unchanged at v1.15.1 ([#76640](https://github.com/kubernetes/kubernetes/pull/76640), [@george-angel](https://github.com/george-angel)) -- CSI remains unchanged at to v1.1.0. ([#75391](https://github.com/kubernetes/kubernetes/pull/75391)) -- The dashboard add-on remains unchanged at v1.10.1. ([#72495](https://github.com/kubernetes/kubernetes/pull/72495)) -- kube-dns is unchanged at v1.14.13 as of Kubernetes 1.12. ([#68900](https://github.com/kubernetes/kubernetes/pull/68900)) -- Influxdb is unchanged at v1.3.3 as of Kubernetes 1.10. ([#53319](https://github.com/kubernetes/kubernetes/pull/53319)) -- Grafana is unchanged at v4.4.3 as of Kubernetes 1.10. ([#53319](https://github.com/kubernetes/kubernetes/pull/53319)) -- The fluent-plugin-kubernetes_metadata_filter plugin in fluentd-elasticsearch is unchanged at v2.1.6. ([#71180](https://github.com/kubernetes/kubernetes/pull/71180)) -- fluentd-gcp is unchanged at v3.2.0 as of Kubernetes 1.13. ([#70954](https://github.com/kubernetes/kubernetes/pull/70954)) -- OIDC authentication is unchanged at coreos/go-oidc v2 as of Kubernetes 1.10. ([#58544](https://github.com/kubernetes/kubernetes/pull/58544)) -- Calico is unchanged at v3.3.1 as of Kubernetes 1.13. ([#70932](https://github.com/kubernetes/kubernetes/pull/70932)) -- GLBC remains unchanged at v1.2.3 as of Kubernetes 1.12. ([#66793](https://github.com/kubernetes/kubernetes/pull/66793)) -- Ingress-gce remains unchanged at v1.2.3 as of Kubernetes 1.12. ([#66793](https://github.com/kubernetes/kubernetes/pull/66793)) - -### Removed - -- Remove deprecated github.com/kardianos/osext dependency ([#80142](https://github.com/kubernetes/kubernetes/pull/80142)) - -### Detailed go Dependency Changes - -#### Added - -- github.com/Azure/go-autorest/autorest/adal: [v0.5.0](https://github.com/Azure/go-autorest/autorest/adal/tree/v0.5.0) -- github.com/Azure/go-autorest/autorest/date: [v0.1.0](https://github.com/Azure/go-autorest/autorest/date/tree/v0.1.0) -- github.com/Azure/go-autorest/autorest/mocks: [v0.2.0](https://github.com/Azure/go-autorest/autorest/mocks/tree/v0.2.0) -- github.com/Azure/go-autorest/autorest/to: [v0.2.0](https://github.com/Azure/go-autorest/autorest/to/tree/v0.2.0) -- github.com/Azure/go-autorest/autorest/validation: [v0.1.0](https://github.com/Azure/go-autorest/autorest/validation/tree/v0.1.0) -- github.com/Azure/go-autorest/autorest: [v0.9.0](https://github.com/Azure/go-autorest/autorest/tree/v0.9.0) -- github.com/Azure/go-autorest/logger: [v0.1.0](https://github.com/Azure/go-autorest/logger/tree/v0.1.0) -- github.com/Azure/go-autorest/tracing: [v0.5.0](https://github.com/Azure/go-autorest/tracing/tree/v0.5.0) -- github.com/armon/consul-api: [eb2c6b5](https://github.com/armon/consul-api/tree/eb2c6b5) -- github.com/bifurcation/mint: [93c51c6](https://github.com/bifurcation/mint/tree/93c51c6) -- github.com/caddyserver/caddy: [v1.0.3](https://github.com/caddyserver/caddy/tree/v1.0.3) -- github.com/cenkalti/backoff: [v2.1.1+incompatible](https://github.com/cenkalti/backoff/tree/v2.1.1) -- github.com/checkpoint-restore/go-criu: [bdb7599](https://github.com/checkpoint-restore/go-criu/tree/bdb7599) -- github.com/cheekybits/genny: [9127e81](https://github.com/cheekybits/genny/tree/9127e81) -- github.com/coredns/corefile-migration: [v1.0.2](https://github.com/coredns/corefile-migration/tree/v1.0.2) -- github.com/coreos/go-etcd: [v2.0.0+incompatible](https://github.com/coreos/go-etcd/tree/v2.0.0) -- github.com/dustin/go-humanize: [v1.0.0](https://github.com/dustin/go-humanize/tree/v1.0.0) -- github.com/fatih/color: [v1.6.0](https://github.com/fatih/color/tree/v1.6.0) -- github.com/flynn/go-shlex: [3f9db97](https://github.com/flynn/go-shlex/tree/3f9db97) -- github.com/go-acme/lego: [v2.5.0+incompatible](https://github.com/go-acme/lego/tree/v2.5.0) -- github.com/go-bindata/go-bindata: [v3.1.1+incompatible](https://github.com/go-bindata/go-bindata/tree/v3.1.1) -- github.com/go-logr/logr: [v0.1.0](https://github.com/go-logr/logr/tree/v0.1.0) -- github.com/google/martian: [v2.1.0+incompatible](https://github.com/google/martian/tree/v2.1.0) -- github.com/google/pprof: [3ea8567](https://github.com/google/pprof/tree/3ea8567) -- github.com/google/renameio: [v0.1.0](https://github.com/google/renameio/tree/v0.1.0) -- github.com/googleapis/gax-go/v2: [v2.0.4](https://github.com/googleapis/gax-go/v2/tree/v2.0.4) -- github.com/hashicorp/go-syslog: [v1.0.0](https://github.com/hashicorp/go-syslog/tree/v1.0.0) -- github.com/jimstudt/http-authentication: [3eca13d](https://github.com/jimstudt/http-authentication/tree/3eca13d) -- github.com/kisielk/errcheck: [v1.2.0](https://github.com/kisielk/errcheck/tree/v1.2.0) -- github.com/kisielk/gotool: [v1.0.0](https://github.com/kisielk/gotool/tree/v1.0.0) -- github.com/klauspost/cpuid: [v1.2.0](https://github.com/klauspost/cpuid/tree/v1.2.0) -- github.com/kr/pty: [v1.1.5](https://github.com/kr/pty/tree/v1.1.5) -- github.com/kylelemons/godebug: [d65d576](https://github.com/kylelemons/godebug/tree/d65d576) -- github.com/lucas-clemente/aes12: [cd47fb3](https://github.com/lucas-clemente/aes12/tree/cd47fb3) -- github.com/lucas-clemente/quic-clients: [v0.1.0](https://github.com/lucas-clemente/quic-clients/tree/v0.1.0) -- github.com/lucas-clemente/quic-go-certificates: [d2f8652](https://github.com/lucas-clemente/quic-go-certificates/tree/d2f8652) -- github.com/lucas-clemente/quic-go: [v0.10.2](https://github.com/lucas-clemente/quic-go/tree/v0.10.2) -- github.com/marten-seemann/qtls: [v0.2.3](https://github.com/marten-seemann/qtls/tree/v0.2.3) -- github.com/mattn/go-colorable: [v0.0.9](https://github.com/mattn/go-colorable/tree/v0.0.9) -- github.com/mattn/go-isatty: [v0.0.3](https://github.com/mattn/go-isatty/tree/v0.0.3) -- github.com/mholt/certmagic: [6a42ef9](https://github.com/mholt/certmagic/tree/6a42ef9) -- github.com/mitchellh/go-homedir: [v1.1.0](https://github.com/mitchellh/go-homedir/tree/v1.1.0) -- github.com/naoina/go-stringutil: [v0.1.0](https://github.com/naoina/go-stringutil/tree/v0.1.0) -- github.com/naoina/toml: [v0.1.1](https://github.com/naoina/toml/tree/v0.1.1) -- github.com/rogpeppe/go-internal: [v1.3.0](https://github.com/rogpeppe/go-internal/tree/v1.3.0) -- github.com/thecodeteam/goscaleio: [v0.1.0](https://github.com/thecodeteam/goscaleio/tree/v0.1.0) -- github.com/ugorji/go/codec: [d75b2dc](https://github.com/ugorji/go/codec/tree/d75b2dc) -- github.com/xordataexchange/crypt: [b2862e3](https://github.com/xordataexchange/crypt/tree/b2862e3) -- go.opencensus.io: v0.21.0 -- golang.org/x/mod: 4bf6d31 -- gopkg.in/airbrake/gobrake.v2: v2.0.9 -- gopkg.in/errgo.v2: v2.1.0 -- gopkg.in/gemnasium/logrus-airbrake-hook.v2: v2.1.2 -- gopkg.in/mcuadros/go-syslog.v2: v2.2.1 -- gotest.tools/gotestsum: v0.3.5 -- honnef.co/go/tools: v0.0.1-2019.2.2 - -#### Changed - -- cloud.google.com/go: v0.34.0 → v0.38.0 -- github.com/Azure/azure-sdk-for-go: [v21.4.0+incompatible → v32.5.0+incompatible](https://github.com/Azure/azure-sdk-for-go/compare/v21.4.0...v32.5.0) -- github.com/BurntSushi/toml: [v0.3.0 → v0.3.1](https://github.com/BurntSushi/toml/compare/v0.3.0...v0.3.1) -- github.com/GoogleCloudPlatform/k8s-cloud-provider: [f8e9959 → 27a4ced](https://github.com/GoogleCloudPlatform/k8s-cloud-provider/compare/f8e9959...27a4ced) -- github.com/PuerkitoBio/purell: [v1.1.0 → v1.1.1](https://github.com/PuerkitoBio/purell/compare/v1.1.0...v1.1.1) -- github.com/asaskevich/govalidator: [f9ffefc → f61b66f](https://github.com/asaskevich/govalidator/compare/f9ffefc...f61b66f) -- github.com/client9/misspell: [9ce5d97 → v0.3.4](https://github.com/client9/misspell/compare/9ce5d97...v0.3.4) -- github.com/containernetworking/cni: [v0.6.0 → v0.7.1](https://github.com/containernetworking/cni/compare/v0.6.0...v0.7.1) -- github.com/coreos/etcd: [v3.3.13+incompatible → v3.3.15+incompatible](https://github.com/coreos/etcd/compare/v3.3.13...v3.3.15) -- github.com/coreos/go-oidc: [065b426 → v2.1.0+incompatible](https://github.com/coreos/go-oidc/compare/065b426...v2.1.0) -- github.com/coreos/go-semver: [e214231 → v0.3.0](https://github.com/coreos/go-semver/compare/e214231...v0.3.0) -- github.com/cpuguy83/go-md2man: [v1.0.4 → v1.0.10](https://github.com/cpuguy83/go-md2man/compare/v1.0.4...v1.0.10) -- github.com/cyphar/filepath-securejoin: [ae69057 → v0.2.2](https://github.com/cyphar/filepath-securejoin/compare/ae69057...v0.2.2) -- github.com/dgrijalva/jwt-go: [01aeca5 → v3.2.0+incompatible](https://github.com/dgrijalva/jwt-go/compare/01aeca5...v3.2.0) -- github.com/docker/distribution: [edc3ab2 → v2.7.1+incompatible](https://github.com/docker/distribution/compare/edc3ab2...v2.7.1) -- github.com/emicklei/go-restful: [ff4f55a → v2.9.5+incompatible](https://github.com/emicklei/go-restful/compare/ff4f55a...v2.9.5) -- github.com/evanphx/json-patch: [5858425 → v4.2.0+incompatible](https://github.com/evanphx/json-patch/compare/5858425...v4.2.0) -- github.com/fatih/camelcase: [f6a740d → v1.0.0](https://github.com/fatih/camelcase/compare/f6a740d...v1.0.0) -- github.com/go-openapi/analysis: [v0.17.2 → v0.19.2](https://github.com/go-openapi/analysis/compare/v0.17.2...v0.19.2) -- github.com/go-openapi/errors: [v0.17.2 → v0.19.2](https://github.com/go-openapi/errors/compare/v0.17.2...v0.19.2) -- github.com/go-openapi/jsonpointer: [v0.19.0 → v0.19.2](https://github.com/go-openapi/jsonpointer/compare/v0.19.0...v0.19.2) -- github.com/go-openapi/jsonreference: [v0.19.0 → v0.19.2](https://github.com/go-openapi/jsonreference/compare/v0.19.0...v0.19.2) -- github.com/go-openapi/loads: [v0.17.2 → v0.19.2](https://github.com/go-openapi/loads/compare/v0.17.2...v0.19.2) -- github.com/go-openapi/runtime: [v0.17.2 → v0.19.0](https://github.com/go-openapi/runtime/compare/v0.17.2...v0.19.0) -- github.com/go-openapi/spec: [v0.17.2 → v0.19.2](https://github.com/go-openapi/spec/compare/v0.17.2...v0.19.2) -- github.com/go-openapi/strfmt: [v0.17.0 → v0.19.0](https://github.com/go-openapi/strfmt/compare/v0.17.0...v0.19.0) -- github.com/go-openapi/swag: [v0.17.2 → v0.19.2](https://github.com/go-openapi/swag/compare/v0.17.2...v0.19.2) -- github.com/go-openapi/validate: [v0.18.0 → v0.19.2](https://github.com/go-openapi/validate/compare/v0.18.0...v0.19.2) -- github.com/godbus/dbus: [c7fdd8b → v4.1.0+incompatible](https://github.com/godbus/dbus/compare/c7fdd8b...v4.1.0) -- github.com/gogo/protobuf: [342cbe0 → 65acae2](https://github.com/gogo/protobuf/compare/342cbe0...65acae2) -- github.com/golang/mock: [bd3c8e8 → v1.2.0](https://github.com/golang/mock/compare/bd3c8e8...v1.2.0) -- github.com/golang/protobuf: [v1.2.0 → v1.3.1](https://github.com/golang/protobuf/compare/v1.2.0...v1.3.1) -- github.com/google/btree: [7d79101 → 4030bb1](https://github.com/google/btree/compare/7d79101...4030bb1) -- github.com/google/cadvisor: [9db8c7d → v0.34.0](https://github.com/google/cadvisor/compare/9db8c7d...v0.34.0) -- github.com/google/gofuzz: [24818f7 → v1.0.0](https://github.com/google/gofuzz/compare/24818f7...v1.0.0) -- github.com/google/uuid: [v1.0.0 → v1.1.1](https://github.com/google/uuid/compare/v1.0.0...v1.1.1) -- github.com/gophercloud/gophercloud: [c818fa6 → v0.1.0](https://github.com/gophercloud/gophercloud/compare/c818fa6...v0.1.0) -- github.com/gorilla/websocket: [4201258 → v1.4.0](https://github.com/gorilla/websocket/compare/4201258...v1.4.0) -- github.com/grpc-ecosystem/go-grpc-prometheus: [2500245 → v1.2.0](https://github.com/grpc-ecosystem/go-grpc-prometheus/compare/2500245...v1.2.0) -- github.com/hashicorp/golang-lru: [v0.5.0 → v0.5.1](https://github.com/hashicorp/golang-lru/compare/v0.5.0...v0.5.1) -- github.com/hashicorp/hcl: [d8c773c → v1.0.0](https://github.com/hashicorp/hcl/compare/d8c773c...v1.0.0) -- github.com/heketi/heketi: [558b292 → v9.0.0+incompatible](https://github.com/heketi/heketi/compare/558b292...v9.0.0) -- github.com/jonboulle/clockwork: [72f9bd7 → v0.1.0](https://github.com/jonboulle/clockwork/compare/72f9bd7...v0.1.0) -- github.com/json-iterator/go: [ab8a2e0 → v1.1.7](https://github.com/json-iterator/go/compare/ab8a2e0...v1.1.7) -- github.com/kr/pretty: [f31442d → v0.1.0](https://github.com/kr/pretty/compare/f31442d...v0.1.0) -- github.com/kr/text: [6807e77 → v0.1.0](https://github.com/kr/text/compare/6807e77...v0.1.0) -- github.com/libopenstorage/openstorage: [093a0c3 → v1.0.0](https://github.com/libopenstorage/openstorage/compare/093a0c3...v1.0.0) -- github.com/magiconair/properties: [61b492c → v1.8.1](https://github.com/magiconair/properties/compare/61b492c...v1.8.1) -- github.com/mailru/easyjson: [60711f1 → 94de47d](https://github.com/mailru/easyjson/compare/60711f1...94de47d) -- github.com/mattn/go-shellwords: [f8471b0 → v1.0.5](https://github.com/mattn/go-shellwords/compare/f8471b0...v1.0.5) -- github.com/miekg/dns: [5d001d0 → v1.1.4](https://github.com/miekg/dns/compare/5d001d0...v1.1.4) -- github.com/mistifyio/go-zfs: [1b4ae6f → v2.1.1+incompatible](https://github.com/mistifyio/go-zfs/compare/1b4ae6f...v2.1.1) -- github.com/mitchellh/go-wordwrap: [ad45545 → v1.0.0](https://github.com/mitchellh/go-wordwrap/compare/ad45545...v1.0.0) -- github.com/mvdan/xurls: [1b768d7 → v1.1.0](https://github.com/mvdan/xurls/compare/1b768d7...v1.1.0) -- github.com/onsi/ginkgo: [v1.6.0 → v1.8.0](https://github.com/onsi/ginkgo/compare/v1.6.0...v1.8.0) -- github.com/onsi/gomega: [5533ce8 → v1.5.0](https://github.com/onsi/gomega/compare/5533ce8...v1.5.0) -- github.com/opencontainers/go-digest: [a6d0ee4 → v1.0.0-rc1](https://github.com/opencontainers/go-digest/compare/a6d0ee4...v1.0.0-rc1) -- github.com/opencontainers/image-spec: [372ad78 → v1.0.1](https://github.com/opencontainers/image-spec/compare/372ad78...v1.0.1) -- github.com/opencontainers/runc: [f000fe1 → 6cc5158](https://github.com/opencontainers/runc/compare/f000fe1...6cc5158) -- github.com/opencontainers/selinux: [4a2974b → v1.2.2](https://github.com/opencontainers/selinux/compare/4a2974b...v1.2.2) -- github.com/robfig/cron: [df38d32 → v1.1.0](https://github.com/robfig/cron/compare/df38d32...v1.1.0) -- github.com/russross/blackfriday: [300106c → v1.5.2](https://github.com/russross/blackfriday/compare/300106c...v1.5.2) -- github.com/seccomp/libseccomp-golang: [1b506fc → v0.9.1](https://github.com/seccomp/libseccomp-golang/compare/1b506fc...v0.9.1) -- github.com/sirupsen/logrus: [v1.2.0 → v1.4.2](https://github.com/sirupsen/logrus/compare/v1.2.0...v1.4.2) -- github.com/spf13/afero: [b28a7ef → v1.2.2](https://github.com/spf13/afero/compare/b28a7ef...v1.2.2) -- github.com/spf13/cast: [e31f36f → v1.3.0](https://github.com/spf13/cast/compare/e31f36f...v1.3.0) -- github.com/spf13/cobra: [c439c4f → v0.0.5](https://github.com/spf13/cobra/compare/c439c4f...v0.0.5) -- github.com/spf13/jwalterweatherman: [33c24e7 → v1.1.0](https://github.com/spf13/jwalterweatherman/compare/33c24e7...v1.1.0) -- github.com/spf13/pflag: [v1.0.1 → v1.0.3](https://github.com/spf13/pflag/compare/v1.0.1...v1.0.3) -- github.com/spf13/viper: [7fb2782 → v1.3.2](https://github.com/spf13/viper/compare/7fb2782...v1.3.2) -- github.com/stretchr/objx: [v0.1.1 → v0.2.0](https://github.com/stretchr/objx/compare/v0.1.1...v0.2.0) -- github.com/stretchr/testify: [v1.2.2 → v1.3.0](https://github.com/stretchr/testify/compare/v1.2.2...v1.3.0) -- golang.org/x/net: 65e2d4e → cdfb69a -- golang.org/x/tools: aa82965 → 6e04913 -- google.golang.org/api: 583d854 → 5213b80 -- google.golang.org/genproto: 09f6ed2 → 54afdca -- google.golang.org/grpc: v1.13.0 → v1.23.0 -- gopkg.in/check.v1: 20d25e2 → 788fd78 -- gopkg.in/natefinch/lumberjack.v2: 20b71e5 → v2.0.0 -- gopkg.in/square/go-jose.v2: 89060de → v2.2.2 -- gopkg.in/yaml.v2: v2.2.1 → v2.2.2 -- k8s.io/gengo: f8a0810 → 26a6646 -- k8s.io/klog: v0.3.1 → v0.4.0 -- k8s.io/kube-openapi: b3a7cee → 743ec37 -- k8s.io/utils: c2654d5 → 581e001 -- sigs.k8s.io/structured-merge-diff: e85c7b2 → 6149e45 - -#### Removed - -- github.com/Azure/go-autorest: [v11.1.2+incompatible](https://github.com/Azure/go-autorest/tree/v11.1.2) -- github.com/codedellemc/goscaleio: [20e2ce2](https://github.com/codedellemc/goscaleio/tree/20e2ce2) -- github.com/d2g/dhcp4: [a1d1b6c](https://github.com/d2g/dhcp4/tree/a1d1b6c) -- github.com/d2g/dhcp4client: [6e570ed](https://github.com/d2g/dhcp4client/tree/6e570ed) -- github.com/jteeuwen/go-bindata: [a0ff256](https://github.com/jteeuwen/go-bindata/tree/a0ff256) -- github.com/kardianos/osext: [8fef92e](https://github.com/kardianos/osext/tree/8fef92e) -- github.com/kr/fs: [2788f0d](https://github.com/kr/fs/tree/2788f0d) -- github.com/marstr/guid: [8bdf7d1](https://github.com/marstr/guid/tree/8bdf7d1) -- github.com/mholt/caddy: [2de4950](https://github.com/mholt/caddy/tree/2de4950) -- github.com/natefinch/lumberjack: [v2.0.0+incompatible](https://github.com/natefinch/lumberjack/tree/v2.0.0) -- github.com/pkg/sftp: [4d0e916](https://github.com/pkg/sftp/tree/4d0e916) -- github.com/shurcooL/sanitized_anchor_name: [10ef21a](https://github.com/shurcooL/sanitized_anchor_name/tree/10ef21a) -- github.com/sigma/go-inotify: [c87b6cf](https://github.com/sigma/go-inotify/tree/c87b6cf) -- github.com/vmware/photon-controller-go-sdk: [4a435da](https://github.com/vmware/photon-controller-go-sdk/tree/4a435da) -- github.com/xanzy/go-cloudstack: [1e2cbf6](https://github.com/xanzy/go-cloudstack/tree/1e2cbf6) -- gopkg.in/yaml.v1: 9f9df34 -- [v1.16.0-rc.2](#v1160-rc2) -- [v1.16.0-rc.1](#v1160-rc1) -- [v1.16.0-beta.2](#v1160-beta2) -- [v1.16.0-beta.1](#v1160-beta1) -- [v1.16.0-alpha.3](#v1160-alpha3) -- [v1.16.0-alpha.2](#v1160-alpha2) -- [v1.16.0-alpha.1](#v1160-alpha1) - - - -# v1.16.0-rc.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.0-rc.2 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes.tar.gz) | `68837f83bcf380e22b50f145fb64404584e96e5714a6c0cbc1ba76e290dc267f6b53194e2b51f19c1145ae7c3e5874124d35ff430cda15f67b0f9c954803389c` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-src.tar.gz) | `922552ed60d425fa6d126ffb34db6a7f123e1b9104e751edaed57b4992826620383446e6cf4f8a9fd55aac72f95a69b45e53274a41aaa838c2c2ae15ff4ddad2` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-client-darwin-386.tar.gz) | `d0df8f57f4d9c2822badc507345f82f87d0e8e49c79ca907a0e4e4dd634db964b84572f88b8ae7eaf50a20965378d464e0d1e7f588e84e926edfb741b859e7d2` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-client-darwin-amd64.tar.gz) | `0bc7daaf1165189b57dcdbe59f402731830b6f4db53b853350056822602579d52fe43ce5ac6b7d4b6d89d81036ae94eab6b7167e78011a96792acfbf6892fa39` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-client-linux-386.tar.gz) | `7735c607bb99b47924140a6a3e794912b2b97b6b54024af1de5db6765b8cc518cba6b145c25dc67c8d8f827805d9a61f676b4ae67b8ef86cfda2fe76de822c6a` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-client-linux-amd64.tar.gz) | `d35f70cea4780a80c24588bc760c38c138d73e5f80f9fe89d952075c24cbf179dd504c2bd7ddb1756c2632ffbcc69a334684710a2d702443043998f66bec4a25` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-client-linux-arm.tar.gz) | `e1fc50b6884c42e92649a231db60e35d4e13e58728e4af7f6eca8b0baa719108cdd960db1f1dbd623085610dbccf7f17df733de1faf10ebf6cd1977ecd7f6213` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-client-linux-arm64.tar.gz) | `defc25fe403c20ef322b2149be28a5b44c28c7284f11bcf193a07d7f45110ce2bd6227d3a4aa48859aaeb67796809962785651ca9f76121fb9534366b40c4b7d` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-client-linux-ppc64le.tar.gz) | `e87b16c948d09ddbc5d6e3fab05ad3c5a58aa7836d4f42c59edab640465531869c92ecdfa2845ec3eecd95b8ccba3dafdd9337f4c313763c6e5105b8740f2dca` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-client-linux-s390x.tar.gz) | `2c25a1860fa81cea05a1840d6a200a3a794cc50cfe45a4efec57d7122208b1354e86f698437bbe5c915d6fb70ef9525f844edc0fa63387ab8c1586a6b22008a5` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-client-windows-386.tar.gz) | `267654a7ecfa37c800c1c94ea78343f5466783881cfac62091cfbd8c62489f04bd74a7a39a08253cb51d7ba52c207f56da371f992f61c1468b595c094f0e080f` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-client-windows-amd64.tar.gz) | `bd4c25b80e54f9fc0c07f64550d020878f899e4e3a28ca57dd532fdbab9ab700d296d2890185591ac27bce6fde336ab90f3102a6797e174d233db76f24f5ac1b` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-server-linux-amd64.tar.gz) | `13a93bb9bd5599b669af7bd25537ee81cefd6d8c73bedfbac845703c01950c70b2aa39f94f2346d935bc167bae435dbcd6e1758341b634102265657e1b1c1259` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-server-linux-arm.tar.gz) | `781d127f32d8479bc21beed855ec73e383702e6e982854138adce8edb0ee4d1d4b0c6e723532bc761689d17512c18b1945d05b0e4adb3fe4b98428cce40d52c8` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-server-linux-arm64.tar.gz) | `6d6dfa49288e4a4ce77ca4f7e83a51c78a2b1844dd95df10cb12fff5a104e750d8e4e117b631448e066487c4c71648e822c87ed83a213f17f27f8c7ecb328ca4` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-server-linux-ppc64le.tar.gz) | `97804d87ea984167fdbdedcfb38380bd98bb2ef150c1a631c6822905ce5270931a907226d5ddefc8d98d5326610daa79a08964fc4d7e8b438832beb966efd214` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-server-linux-s390x.tar.gz) | `d45bd651c7f4b6e62ceb661c2ec70afca06a8d1fde1e50bb7783d05401c37823cf21b9f0d3ac87e6b91eeec9d03fc539c3713fd46beff6207e8ebac1bf9d1dd5` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-node-linux-amd64.tar.gz) | `42c57b59ce43f8961e427d622ee9cfa85cc23468779945262d59aa8cd31afd495c7abaaef7263b9db60ec939ba5e9898ebc3281e8ec81298237123ce4739cbff` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-node-linux-arm.tar.gz) | `034a5611909df462ef6408f5ba5ff5ebfb4e1178b2ad06a59097560040c4fcdb163faec48ab4297ca6c21282d7b146f9a5eebd3f2573f7d6d7189d6d29f2cf34` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-node-linux-arm64.tar.gz) | `df1493fa2d67b59eaf02096889223bbf0d71797652d3cbd89e8a3106ff6012ea17d25daaa4baf9f26c2e061afb4b69e3e6814ba66e9c4744f04230c922fbc251` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-node-linux-ppc64le.tar.gz) | `812a5057bbf832c93f741cc39d04fc0087e36b81b6b123ec5ef02465f7ab145c5152cfc1f7c76032240695c7d7ab71ddb9a2a4f5e1f1a2abb63f32afa3fb6c7c` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-node-linux-s390x.tar.gz) | `2a58a4b201631789d4309ddc665829aedcc05ec4fe6ad6e4d965ef3283a381b8a4980b4b728cfe9a38368dac49921f61ac6938f0208b671afd2327f2013db22a` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0-rc.2/kubernetes-node-windows-amd64.tar.gz) | `7fb09e7667715f539766398fc1bbbc4bf17c64913ca09d4e3535dfc4d1ba2bf6f1a3fcc6d81dbf473ba3f10fd29c537ce5debc17268698048ce7b378802a6c46` - -## Changelog since v1.16.0-rc.1 - -### Other notable changes - -* Single static pod files and pod files from http endpoints cannot be larger than 10 MB. HTTP probe payloads are now truncated to 10KB. ([#82669](https://github.com/kubernetes/kubernetes/pull/82669), [@rphillips](https://github.com/rphillips)) -* Restores compatibility with <=1.15.x custom resources by not publishing OpenAPI for non-structural custom resource definitions ([#82653](https://github.com/kubernetes/kubernetes/pull/82653), [@liggitt](https://github.com/liggitt)) -* Fixes regression in logging spurious stack traces when proxied connections are closed by the backend ([#82588](https://github.com/kubernetes/kubernetes/pull/82588), [@liggitt](https://github.com/liggitt)) - - - -# v1.16.0-rc.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.0-rc.1 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes.tar.gz) | `2feadb470a8b0d498dff2c122d792109bc48e24bfc7f49b4b2b40a268061c83d9541cbcf902f2b992d6675e38d69ccdded9435ac488e041ff73d0c2dc518a5a9` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-src.tar.gz) | `6d8877e735e041c989c0fca9dd9e57e5960299e74f66f69907b5e1265419c69ed3006c0161e0ced63073e28073355a5627154cf5db53b296b4a209b006b45db0` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-client-darwin-386.tar.gz) | `27bbfcb709854a9625dbb22c357492c1818bc1986b94e8cf727c046d596c4f1fe385df5b2ce61baaf95b066d584a8c04190215eaf979e12707c6449766e84810` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-client-darwin-amd64.tar.gz) | `9c2ea22e188282356cd532801cb94d799bde5a5716f037b81e7f83273f699bf80776b253830e3a4e1a72c420f0c0b84e28ae043c9d28a49e9455e6b1449a353c` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-client-linux-386.tar.gz) | `bbba78b8f972d0c247ed11e88010fc934a694efce8d2605635902b4a22f5ecc7e710f640bcefbba97ef28f6db68b9d8fb9e6a4a099603493c1ddcc5fd50c0d17` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-client-linux-amd64.tar.gz) | `f2f04dc9b93d1c8f5295d3f559a3abdd19ea7011741aa006b2cd96542c06a6892d7ed2bad8479c89e7d6ae0ed0685e68d5096bd5a46431c8cab8a90c04f1f00c` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-client-linux-arm.tar.gz) | `77d1f5b4783f7480d879d0b7682b1d46e730e7fb8edbc6eccd96986c31ceecbf123cd9fd11c5a388218a8c693b1b545daed28ca88f36ddaca06adac4422e4be5` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-client-linux-arm64.tar.gz) | `0b57aa1dbbce51136789cb373d93e641d1f095a4bc9695d60917e85c814c8959a4d6e33224dc86295210d01e73e496091a191f303348f3b652a2b6160b1e6059` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-client-linux-ppc64le.tar.gz) | `847065d541dece0fc931947146dbc90b181f923137772f26c7c93476e022f4f654e00f9928df7a13a9dec27075dd8134bdb168b5c57d4efa29ed20a6a2112272` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-client-linux-s390x.tar.gz) | `d7e8a808da9e2551ca7d8e7cb25222cb9ac01595f78ebbc86152ae1c21620d4d8478ef3d374d69f47403ca913fc716fbaa81bd3ff082db2fc5814ef8dc66eeec` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-client-windows-386.tar.gz) | `c9cf6a6b9f2f29152af974d30f3fd97ba33693d5cbbf8fc76bcf6590979e7ac8307e5da4f84a646cec6b68f6fa1a83aa1ce24eb6429baa0a39c92d5901bd80be` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-client-windows-amd64.tar.gz) | `ebea0c0b64d251e6023e8a5a100aa609bc278c797170765da2e35c8997efc233bec9f8d1436aeee1cd6459e30ec78ba64b84de47c26a4e4645e153e5e598202b` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-server-linux-amd64.tar.gz) | `2fe7ccce15e705826c4ccfce48df8130ba89a0c930bca4b61f49267e9d490f57cf6220671752e44e55502bee501a9af2f0ac3927378a87b466f2526fa6e45834` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-server-linux-arm.tar.gz) | `6eb77e59095a1de9eb21e7065e8d10b7d0baf1888991a42089ede6d4f8a8cac0b17ae793914eef5796d56d8f0b958203d5df1f7ed45856dce7244c9f047f9793` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-server-linux-arm64.tar.gz) | `429ce0d5459384c9d3a2bb103924eebc4c30343c821252dde8f4413fcf29cc73728d378bfd193c443479bde6bfd26e0a13c036d4d4ae22034d66f6cad70f684d` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-server-linux-ppc64le.tar.gz) | `18041d9c99efc00c8c9dbb6444974efdbf4969a4f75faea75a3c859b1ee8485d2bf3f01b7942a524dcd6a71c82af7a5937fc9120286e920cf2d501b7c76ab160` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-server-linux-s390x.tar.gz) | `2124c3d8856e50ca6b2b61d83f108ab921a1217fac2a80bf765d51b68f4e67d504471787d375524974173782aa37c57b6bf1fc6c7704ed7e6cabe15ec3c543b1` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-node-linux-amd64.tar.gz) | `ea1bcd8cc51fbc95058a8a592eb454c07ab5dadc1c237bbc59f278f8adc46bda1f334e73463e1edbd6da5469c4a527ceb1cb0a96686493d3ff4e8878dd1c9a20` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-node-linux-arm.tar.gz) | `e5d62df5fd086ff5712f59f71ade9efcf617a13c567de965ce54c79f3909372bed4edbf6639cf058fe1d5c4042f794e1c6a91e5e20d9dcce597a95dedf2474b2` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-node-linux-arm64.tar.gz) | `5aa0a7a3d02b65253e4e814e51cea6dd895170f2838fea02f94e4efd3f938dbf83bc7f209801856b98420373c04147fab9cb8791d24d51dcedf960068dfe6fda` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-node-linux-ppc64le.tar.gz) | `f54bc5ae188f8ecb3ddcae20e06237430dd696f444a5c65b0aa3be79ad85c5b500625fa47ed0e126f6e738eb5d9ee082b52482a6913ec6d22473520fa6582e66` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-node-linux-s390x.tar.gz) | `afa4f9b747fff20ed03d40092a2df60dbd6ced0de7fd0c83c001866c4fe5b7117468e2f8c73cbef26f376b69b4750f188143076953fc200e8a5cc002c8ac705b` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0-rc.1/kubernetes-node-windows-amd64.tar.gz) | `e9b76014a1d4268ad66ade06883dd3344c6312ece14ee988af645bdf9c5e9b62c31a0e339f774c67799b777314db6016d86a3753855c7d2eb461fbbf4e154ae7` - -## Changelog since v1.16.0-beta.2 - -### Other notable changes - -* Update Cluster Autoscaler to 1.16.0; changelog: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.16.0 ([#82501](https://github.com/kubernetes/kubernetes/pull/82501), [@losipiuk](https://github.com/losipiuk)) -* Resolved regression serving custom resources with unhandled validation schemas with the ServerSideApply feature enabled ([#82438](https://github.com/kubernetes/kubernetes/pull/82438), [@liggitt](https://github.com/liggitt)) -* Fix filter plugins are not been called during preemption ([#81876](https://github.com/kubernetes/kubernetes/pull/81876), [@wgliang](https://github.com/wgliang)) -* Fix the dns suffix search list for GCE window clusters. ([#82314](https://github.com/kubernetes/kubernetes/pull/82314), [@lzang](https://github.com/lzang)) -* Install and start logging agent based on kube env ENABLE_NODE_LOGGING. ([#81300](https://github.com/kubernetes/kubernetes/pull/81300), [@liyanhui1228](https://github.com/liyanhui1228)) -* kubeadm: Allow users to skip the kube-proxy init addon phase during init and still be able to join a cluster and perform some other minor operations (but not upgrade). ([#82248](https://github.com/kubernetes/kubernetes/pull/82248), [@rosti](https://github.com/rosti)) -* Bump metrics-server to v0.3.4 ([#82322](https://github.com/kubernetes/kubernetes/pull/82322), [@olagacek](https://github.com/olagacek)) -* Updated default etcd service used by kubernetes to 3.3.15 ([#82199](https://github.com/kubernetes/kubernetes/pull/82199), [@dims](https://github.com/dims)) - - - -# v1.16.0-beta.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.0-beta.2 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes.tar.gz) | `d1f4e9badc6a4422b9a261a5375769d63f0cac7fff2aff4122a325417b77d5e5317ba76a180cda2baa9fb1079c33e396fc16f82b31eeebea61004b0aabdf8c32` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-src.tar.gz) | `2ab20b777311746bf9af0947a2bea8ae36e27da7d917149518d7c2d2612f513bbf88d1f2c7efff6dc169aa43c2dd3be73985ef619172d50d99faa56492b35ce4` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-client-darwin-386.tar.gz) | `55523fd5cfce0c5b79e981c6a4d5572790cfe4488ed23588be45ee13367e374cf703f611769751583986557b2607f271704d9f27e03f558e35e7c75796476b10` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-client-darwin-amd64.tar.gz) | `13e696782713da96f5fb2c3fa54d99ca40bc71262cb2cbc8e77a6d19ffd33b0767d3f27e693aa84103aca465f9b00ed109996d3579b4bd28566b8998212a0872` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-client-linux-386.tar.gz) | `7f4818599b84712edd2bf1d94f02f9a53c1f827b428a888356e793ff62e897276afcbc97f03bc0317e7d729740410037c57e6443f65c691eb959b676833511fa` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-client-linux-amd64.tar.gz) | `8a2656289d7d86cbded42831f6bc660b579609622c16428cf6cc782ac8b52df4c8511c5aad65aa520f398a65e35dee6ea5b5ad8e5fd14c5a8690a7248dc4c109` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-client-linux-arm.tar.gz) | `418606bc109b9acb2687ed297fa2eec272e8cb4ad3ce1173acd15a4b43cec0ecfd95e944faeecf862b349114081dd99dfac8615dc95cffc1cd4983c5b38e9c4e` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-client-linux-arm64.tar.gz) | `2eb943b745c270cd161e01a12195cfb38565de892a1da89e851495fb6f9d6664055e384e30d3551c25f120964e816e44df5415aff7c12a8639c30a42271abef7` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-client-linux-ppc64le.tar.gz) | `262e7d61e167e7accd43c47e9ce28323ae4614939a5af09ecc1023299cd2580220646e7c90d31fee0a17302f5d9df1e7da1e6774cc7e087248666b33399e8821` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-client-linux-s390x.tar.gz) | `8f0cfe669a211423dd697fdab722011ea9641ce3db64debafa539d4a424dd26065c8de5da7502a4d40235ff39158f3935bd337b807a63771391dffb282563ccf` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-client-windows-386.tar.gz) | `b1deab89653f4cd3ad8ad68b8ec3e1c038d1ef35bd2e4475d71d4781acf0b2002443f9c2b7d2cf06cbb9c568bea3881c06d723b0529cc8210f99450dc2dc5e43` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-client-windows-amd64.tar.gz) | `0e3b5150767efd0ed5d60b2327d2b7f6f2bda1a3532fca8e84a7ca161f6e069fae15af37d3fe8a641d34c9a65fc61f1c44dd3265ef6cacfd2df55c9c004bc6bd` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-server-linux-amd64.tar.gz) | `32688295df1fcdb9472ed040dc5e8b19d04d62789d2eca64cfe08080d08ffee1eaa4853ce40bd336aabd2f764dd65b36237d4f9f1c697e2d6572861c0c8eff01` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-server-linux-arm.tar.gz) | `c8ea6d66e966889a54194f9dce2021131e9bae34040c56d8839341c47fc4074d6322cc8aadce28e7cdcee88ec79d37a73d52276deb1cc1eee231e4d3083d54e5` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-server-linux-arm64.tar.gz) | `12b42cfa33ff824392b81a604b7edcab95ecc67cddfc24c47ef67adb356a333998bc7b913b00daf7a213692d8d441153904474947b46c7f76ef03d4b2a63eab0` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-server-linux-ppc64le.tar.gz) | `e03f0eba181c03ddb7535e56ff330dafebb7dcb40889fd04f5609617ebb717f9f833e89810bff36d5299f72ae75d356fffb80f7b3bab2232c7597abcc003b8ba` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-server-linux-s390x.tar.gz) | `4e7bd061317a3445ad4b6b308f26218777677a1fef5fda181ee1a19e532a758f6bd3746a3fe1917a057ed71c94892aeaf00dd4eb008f61418ec3c80169a1f057` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-node-linux-amd64.tar.gz) | `dc5606c17f0191afc6f28dce5ab566fd8f21a69fa3989a1c8f0976d7b8ccd32e26bb21e9fec9f4529c5a6c8301747d278484688a0592da291866f8fa4893dcbb` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-node-linux-arm.tar.gz) | `3d5d9893e06fd7be51dca11182ecb9e93108e86af40298fe66bb62e5e86f0bf4713667ba63d00b02cfddaf20878dd78cc738e76bf1ca715bbbe79347ca518ec4` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-node-linux-arm64.tar.gz) | `fd18a02f32aeafc5cce8f3f2eadd0e532857bd5264b7299b4e48f458f77ebaa53be94b1d1fe2062168f9d88c8a97e6c2d904fc3401a2d9e69dd4e8c87d01d915` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-node-linux-ppc64le.tar.gz) | `703afd80140db2fae897d83b3d2bc8889ff6c6249bb79be7a1cce6f0c9326148d22585a5249c2e976c69a2518e3f887eef4c9dc4a970ebb854a78e72c1385ccb` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-node-linux-s390x.tar.gz) | `445d4ef4f9d63eabe3b7c16114906bc450cfde3e7bf7c8aedd084c79a5e399bd24a7a9c2283b58d382fb11885bb2b412773a36fffb6fc2fac15d696439a0b800` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0-beta.2/kubernetes-node-windows-amd64.tar.gz) | `88b04171c3c0134044b7555fbc9b88071f5a73dbf2dac21f8a27b394b0870dff349a56b0ee4d8e1d9cfbeb98645e485f40b8d8863f3f3e833cba0ca6b1383ccf` - -## Changelog since v1.16.0-beta.1 - -### Other notable changes - -* Fix a bug in apiserver that could cause a valid update request to be rejected with a precondition check failure. ([#82303](https://github.com/kubernetes/kubernetes/pull/82303), [@roycaihw](https://github.com/roycaihw)) -* Webhook client credentials configured with `--admission-control-config-file` must include non-default ports in the configured hostnames. For example, a webhook configured to speak to port 8443 on service `mysvc` in namespace `myns` would specify client credentials in a stanza with `name: mysvc.myns.svc:8443`. See https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#authenticate-apiservers for more details. ([#82252](https://github.com/kubernetes/kubernetes/pull/82252), [@liggitt](https://github.com/liggitt)) -* Ensure the KUBE-MARK-DROP chain in kube-proxy mode=ipvs. The chain is ensured for both ipv4 and ipv6 in dual-stack operation. ([#82214](https://github.com/kubernetes/kubernetes/pull/82214), [@uablrek](https://github.com/uablrek)) -* `kubectl cp` no longer supports copying symbolic links from containers; to support this use case, see `kubectl exec --help` for examples using `tar` directly ([#82143](https://github.com/kubernetes/kubernetes/pull/82143), [@soltysh](https://github.com/soltysh)) -* kubeadm: fix for HTTPProxy check for IPv6 addresses (kubernetes/kubeadm#1769) ([#82267](https://github.com/kubernetes/kubernetes/pull/82267), [@kad](https://github.com/kad)) -* Add PodOverhead awareness to kubectl ([#81929](https://github.com/kubernetes/kubernetes/pull/81929), [@egernst](https://github.com/egernst)) -* The nbf (not before) claim, if present in ID token, is now enforced. ([#81413](https://github.com/kubernetes/kubernetes/pull/81413), [@anderseknert](https://github.com/anderseknert)) -* Server-side apply will now use the openapi provided in the CRD validation field to help figure out how to correctly merge objects and update ownership. ([#77354](https://github.com/kubernetes/kubernetes/pull/77354), [@jennybuckley](https://github.com/jennybuckley)) -* - Fix disk stats in LXD using ZFS storage pool ([#81972](https://github.com/kubernetes/kubernetes/pull/81972), [@dashpole](https://github.com/dashpole)) - * - Fix CRI-O missing network metris bug - * - Add `container_sockets`, `container_threads`, and `container_threads_max` metrics -* Adds Endpoint Slice support for kubectl when discovery API group is enabled. ([#81795](https://github.com/kubernetes/kubernetes/pull/81795), [@robscott](https://github.com/robscott)) -* Node-Problem-Detector v0.7.1 is used for addon daemonset. ([#82140](https://github.com/kubernetes/kubernetes/pull/82140), [@wangzhen127](https://github.com/wangzhen127)) -* aggregated discovery requests can now timeout. Aggregated apiserver *must* complete discovery calls within five seconds. Other requests can take longer. ([#82146](https://github.com/kubernetes/kubernetes/pull/82146), [@deads2k](https://github.com/deads2k)) - * Use feature gate `EnableAggregatedDiscoveryTimeout=false` if you *must* remove this check, but that feature gate will be removed next release. -* Graduating Windows GMSA support from alpha to beta ([#82110](https://github.com/kubernetes/kubernetes/pull/82110), [@wk8](https://github.com/wk8)) -* Add UnschedulableAndUnresolvable status code for Scheduler Framework ([#82034](https://github.com/kubernetes/kubernetes/pull/82034), [@alculquicondor](https://github.com/alculquicondor)) -* Kubeadm now includes CoreDNS version 1.6.2 ([#82127](https://github.com/kubernetes/kubernetes/pull/82127), [@rajansandeep](https://github.com/rajansandeep)) - * - The CoreDNS Deployment now checks readiness via the `ready` plugin. - * - The `proxy` plugin has been deprecated. The `forward` plugin is to be used instead. - * - `kubernetes` plugin removes the `resyncperiod` option. - * - The `upstream` option is deprecated and ignored if included. -* Make kubectl get --ignore-not-found continue processing when encountering error. ([#82120](https://github.com/kubernetes/kubernetes/pull/82120), [@soltysh](https://github.com/soltysh)) -* Dual stack services (Phase II of IPv6DualStack feature) are enabled via the IPVS proxier. iptables proxier does not support dualstack yet. Dualstack iptables proxier is WIP and should catchup soon. ([#82091](https://github.com/kubernetes/kubernetes/pull/82091), [@khenidak](https://github.com/khenidak)) - * to enable, kube-proxy must be have the following flags: - * --proxy-mode=ipvs - * --cluster-cidrs=, -* The apiserver now uses http/1.1 to communicate with admission webhooks, opening multiple connections to satisfy concurrent requests, and allowing spreading requests across multiple backing pods. ([#82090](https://github.com/kubernetes/kubernetes/pull/82090), [@liggitt](https://github.com/liggitt)) -* Added support to specify a global-access annotation for gce ILB. ([#81549](https://github.com/kubernetes/kubernetes/pull/81549), [@prameshj](https://github.com/prameshj)) -* Added new startupProbe, related to KEP https://github.com/kubernetes/enhancements/issues/950. ([#77807](https://github.com/kubernetes/kubernetes/pull/77807), [@matthyx](https://github.com/matthyx)) -* Adds \livez for liveness health checking for kube-apiserver. Using the parameter `--maximum-startup-sequence-duration` will allow the liveness endpoint to defer boot-sequence failures for the specified duration period. ([#81969](https://github.com/kubernetes/kubernetes/pull/81969), [@logicalhan](https://github.com/logicalhan)) -* Server-side apply is now Beta. ([#81956](https://github.com/kubernetes/kubernetes/pull/81956), [@apelisse](https://github.com/apelisse)) -* The `rejected` label in `apiserver_admission_webhook_admission_duration_seconds` metrics now properly indicates if a request was rejected. Add a new counter metrics `apiserver_admission_webhook_rejection_count` with details about the causing for a webhook rejection. ([#81399](https://github.com/kubernetes/kubernetes/pull/81399), [@roycaihw](https://github.com/roycaihw)) -* Add `container_state` label to `running_container_count` kubelet metrics, to get count of containers based on their state(running/exited/created/unknown) ([#81573](https://github.com/kubernetes/kubernetes/pull/81573), [@irajdeep](https://github.com/irajdeep)) -* Fix a bug in CRD openapi controller that user-defined CRD can overwrite OpenAPI definition/path for the CRD API. ([#81436](https://github.com/kubernetes/kubernetes/pull/81436), [@roycaihw](https://github.com/roycaihw)) -* Service account tokens now include the JWT Key ID field in their header. ([#78502](https://github.com/kubernetes/kubernetes/pull/78502), [@ahmedtd](https://github.com/ahmedtd)) -* Adds EndpointSlice integration to kube-proxy, can be enabled with EndpointSlice feature gate. ([#81430](https://github.com/kubernetes/kubernetes/pull/81430), [@robscott](https://github.com/robscott)) -* Azure supports IPv6 only on ELB not ILB. The cloud provider will return an error if the service is internal and is IPv6. ([#80485](https://github.com/kubernetes/kubernetes/pull/80485), [@khenidak](https://github.com/khenidak)) - * Notes on LB name: - * to ensure backword and forward compat: - * - SingleStack -v4 (pre v1.16) => BackendPool name == clusterName - * - SingleStack -v6 => BackendPool name == clusterName (all cluster bootstrap uses this name) - * DualStack: - * => IPv4 BackendPool name == clusterName - * => IPv6 BackendPool name == -IPv6 - * This result into: - * - clusters moving from IPv4 to duakstack will require no changes - * - clusters moving from IPv6 (while not seen in the wild, we can not rule out their existence) to dualstack will require deleting backend pools (the reconciler will take care of creating correct backendpools) -* Promotes VolumePVCDataSource (Cloning) feature to beta for 1.16 release ([#81792](https://github.com/kubernetes/kubernetes/pull/81792), [@j-griffith](https://github.com/j-griffith)) -* Remove kubectl log, use kubectl logs instead ([#78098](https://github.com/kubernetes/kubernetes/pull/78098), [@soltysh](https://github.com/soltysh)) -* CSI ephemeral inline volume support is beta, i.e. the CSIInlineVolume feature gate is enabled by default ([#82004](https://github.com/kubernetes/kubernetes/pull/82004), [@pohly](https://github.com/pohly)) -* kubectl: the --all-namespaces flag is now honored by `kubectl wait` ([#81468](https://github.com/kubernetes/kubernetes/pull/81468), [@ashutoshgngwr](https://github.com/ashutoshgngwr)) -* Kube-proxy metrics are now marked as with the ALPHA stability level. ([#81626](https://github.com/kubernetes/kubernetes/pull/81626), [@logicalhan](https://github.com/logicalhan)) -* Kube-controller-manager and cloud-controller-manager metrics are now marked as with the ALPHA stability level. ([#81624](https://github.com/kubernetes/kubernetes/pull/81624), [@logicalhan](https://github.com/logicalhan)) -* Adds Endpoint Slice Controller for managing new EndpointSlice resource, disabled by default. ([#81048](https://github.com/kubernetes/kubernetes/pull/81048), [@robscott](https://github.com/robscott)) -* + to run: ([#79386](https://github.com/kubernetes/kubernetes/pull/79386), [@khenidak](https://github.com/khenidak)) - * Master: convert service CIDR to list `--service-cluster-ip-range=,` and make sure `IPv6DualStack` feature flag is turned on. The flag is validated and used as the following: - * 1. `--service-cluster-ip-range[0]` is consider primary service range, and will be used for any service with `Service.Spec.IPFamily = nil` or any service in the at the time of turning on the feature flag. - * 2. A cluster can be dualstack (i.e. Pods and nodes carry dualstack IPs) but does not need to support ingress on dualstack. In this case the cluster can perform egress using `PodIPs` (according to family and binding selection in user code) but will ingress will only be performed against the pod primary IP. This can be configured by supplying single entry to `--service-cluster-ip-range` flag. - * 3. Maximum of two entries is allowed in `--service-cluster-ip-range` and they are validated to be dual stacked `i.e. --service-cluster-ip-range=, or --service-cluster-ip-range=,` - * 4. Max 20 bit for range (min network bits `/108` or /12) - * kube-controller-manager: convert service CIDR to list `--service-cluster-ip-range=,` and make sure `IPv6DualStack` feature flag is turned on. The flag is validated as above. - * + to use: - * A new service spec field `Service.Spec.IPFamily` has been added. The default of this field is family of (first service cidr in --service-cluster-ip-range flag). The value is defaulted as described above once the feature gate is turned on. Here are the possible values for this field: - * 2. IPv4: api-server will assign an IP from a `service-cluster-ip-range` that is `ipv4` (either the primary or the secondary, according to how they were configured). - * 2. IPv6: api-server will assign an IP from a `service-cluster-ip-range` that is `ipv6` (either the primary or the secondary, according to how they were configured). - * Notes (v1.16): - * 1. IPVS is the only proxy supported (as of v1.16 ) by Dualstack. - * 2. Dualstack is mutually exclusive with `EndpointSlice` feature. They can not be turned on together. `metaproxy` is yet to implement EndpointSlice handling. -* Kubelet metrics for /metrics and /metrics/probes are now marked as with the ALPHA stability level. ([#81534](https://github.com/kubernetes/kubernetes/pull/81534), [@logicalhan](https://github.com/logicalhan)) -* Added metrics 'authentication_attempts' that can be used to understand the attempts of authentication. ([#81509](https://github.com/kubernetes/kubernetes/pull/81509), [@RainbowMango](https://github.com/RainbowMango)) -* Fix in kube-proxy for SCTP nodeport service which only works for node's InternalIP, but doesn't work for other IPs present in the node when ipvs is enabled. ([#81477](https://github.com/kubernetes/kubernetes/pull/81477), [@paulsubrata55](https://github.com/paulsubrata55)) -* The `CustomResourceValidation`, `CustomResourceSubresources`, `CustomResourceWebhookConversion` and `CustomResourcePublishOpenAPI` features are now GA, and the associated feature gates deprecated and will be removed in v1.18. ([#81965](https://github.com/kubernetes/kubernetes/pull/81965), [@roycaihw](https://github.com/roycaihw)) -* Node-Problem-Detector v0.7.1 is used on GCI. ([#80726](https://github.com/kubernetes/kubernetes/pull/80726), [@wangzhen127](https://github.com/wangzhen127)) -* kubeadm: prevent overriding of certain kubelet security configuration parameters if the user wished to modify them ([#81903](https://github.com/kubernetes/kubernetes/pull/81903), [@jfbai](https://github.com/jfbai)) -* Introduce `node.kubernetes.io/exclude-balancer` and `node.kubernetes.io/exclude-disruption` labels in alpha to prevent cluster deployers from being dependent on the optional `node-role` labels which not all clusters may provide. ([#80238](https://github.com/kubernetes/kubernetes/pull/80238), [@smarterclayton](https://github.com/smarterclayton)) -* Scheduler metrics are now marked as with the ALPHA stability level. ([#81576](https://github.com/kubernetes/kubernetes/pull/81576), [@logicalhan](https://github.com/logicalhan)) -* cache-control headers are now set appropriately. Only openapi is cacheable if etags match. ([#81946](https://github.com/kubernetes/kubernetes/pull/81946), [@deads2k](https://github.com/deads2k)) -* Added E2E tests validating WindowsOptions.RunAsUserName. ([#79539](https://github.com/kubernetes/kubernetes/pull/79539), [@bclau](https://github.com/bclau)) -* Kube-apiserver metrics are now marked as with the ALPHA stability level. ([#81531](https://github.com/kubernetes/kubernetes/pull/81531), [@logicalhan](https://github.com/logicalhan)) -* Move CSI volume expansion to beta. ([#81467](https://github.com/kubernetes/kubernetes/pull/81467), [@bertinatto](https://github.com/bertinatto)) -* Support Kubelet plugin watcher on Windows nodes. ([#81397](https://github.com/kubernetes/kubernetes/pull/81397), [@ddebroy](https://github.com/ddebroy)) -* Updates the requestedToCapacityRatioArguments to add resources parameter that allows the users to specify the resource name along with weights for each resource to score nodes based on the request to capacity ratio. ([#77688](https://github.com/kubernetes/kubernetes/pull/77688), [@sudeshsh](https://github.com/sudeshsh)) -* Finalizer Protection for Service LoadBalancers is now in Beta (enabled by default). This feature ensures the Service resource is not fully deleted until the correlating load balancer resources are deleted. ([#81691](https://github.com/kubernetes/kubernetes/pull/81691), [@MrHohn](https://github.com/MrHohn)) -* Adds support for vSphere volumes on Windows ([#80911](https://github.com/kubernetes/kubernetes/pull/80911), [@gab-satchi](https://github.com/gab-satchi)) -* Log when kube-apiserver regenerates the OpenAPI spec and why. OpenAPI spec generation is a very CPU-heavy process that is sensitive to continuous updates of CRDs and APIServices. ([#81786](https://github.com/kubernetes/kubernetes/pull/81786), [@sttts](https://github.com/sttts)) - * Added metrics aggregator_openapi_v2_regeneration_count, aggregator_openapi_v2_regeneration_gauge and apiextension_openapi_v2_regeneration_count metrics counting the triggering APIService and CRDs and the reason (add, update, delete). -* Fix an issue with toleration merging & whitelist checking in the PodTolerationRestriction admission controller. ([#81732](https://github.com/kubernetes/kubernetes/pull/81732), [@tallclair](https://github.com/tallclair)) -* Add a helper function to decode scheduler plugin args. ([#80696](https://github.com/kubernetes/kubernetes/pull/80696), [@hex108](https://github.com/hex108)) -* Add metadata.generation=1 to old CustomResources. ([#82005](https://github.com/kubernetes/kubernetes/pull/82005), [@sttts](https://github.com/sttts)) -* kubeadm no longer performs IPVS checks as part of its preflight checks ([#81791](https://github.com/kubernetes/kubernetes/pull/81791), [@yastij](https://github.com/yastij)) -* The RemainingItemCount feature is now beta. ([#81682](https://github.com/kubernetes/kubernetes/pull/81682), [@caesarxuchao](https://github.com/caesarxuchao)) - * remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact. -* The CustomResourceDefaulting feature is promoted to beta and enabled by default. Defaults may be specified in structural schemas via the `apiextensions.k8s.io/v1` API. See https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#specifying-a-structural-schema for details. ([#81872](https://github.com/kubernetes/kubernetes/pull/81872), [@sttts](https://github.com/sttts)) -* kubectl could scale custom resource again ([#81342](https://github.com/kubernetes/kubernetes/pull/81342), [@knight42](https://github.com/knight42)) -* a CSI driver that supports ephemeral inline volumes must explicitly declare that by providing a CSIDriver object where the new "mode" field is set to "ephemeral" or "persistent+ephemeral" ([#80568](https://github.com/kubernetes/kubernetes/pull/80568), [@pohly](https://github.com/pohly)) -* `framework.ExpectNoError` no longer logs the error and instead relies on using the new `log.Fail` as Gomega fail handler. ([#80253](https://github.com/kubernetes/kubernetes/pull/80253), [@pohly](https://github.com/pohly)) -* Audit events now log the existence and patch of mutating webhooks. ([#77824](https://github.com/kubernetes/kubernetes/pull/77824), [@roycaihw](https://github.com/roycaihw)) - * At Metadata audit level or higher, an annotation with key "mutation.webhook.admission.k8s.io/round_{round idx}_index_{order idx}" gets logged with JSON payload indicating a webhook gets invoked for given request and whether it mutated the object or not. - * At Request audit level or higher, an annotation with key "patch.webhook.admission.k8s.io/round_{round idx}_index_{order idx}" get logged with the JSON payload logging the patch sent by a webhook for given request. -* Resolves an issue that prevented block volumes from being resized. ([#81429](https://github.com/kubernetes/kubernetes/pull/81429), [@huffmanca](https://github.com/huffmanca)) -* Verify that CRD default values in OpenAPI specs are pruned, with the exceptions of values under `metadata`. ([#78829](https://github.com/kubernetes/kubernetes/pull/78829), [@sttts](https://github.com/sttts)) -* Use PostFilter instead of Postfilter in the scheduling framework ([#81800](https://github.com/kubernetes/kubernetes/pull/81800), [@draveness](https://github.com/draveness)) - * Use PreFilter instead of Prefilter in the scheduling framework - * Use PreBind instead of Prebind in the scheduling framework -* Fix `kubectl logs -f` for windows server containers. ([#81747](https://github.com/kubernetes/kubernetes/pull/81747), [@Random-Liu](https://github.com/Random-Liu)) -* fix azure disk naming matching issue due to case sensitive comparison ([#81720](https://github.com/kubernetes/kubernetes/pull/81720), [@andyzhangx](https://github.com/andyzhangx)) -* Fixes a bug that when there is a "connection refused" error, the reflector's ListAndWatch func will return directly but what expected is that sleep 1 second and rewatch since the specified resourceVersion. ([#81634](https://github.com/kubernetes/kubernetes/pull/81634), [@likakuli](https://github.com/likakuli)) -* Fixed a bug with the openAPI definition for io.k8s.apimachinery.pkg.runtime.RawExtension, which previously required a field "raw" to be specified ([#80773](https://github.com/kubernetes/kubernetes/pull/80773), [@jennybuckley](https://github.com/jennybuckley)) -* kubeadm: print the stack trace of an error for klog level --v>=5 ([#80937](https://github.com/kubernetes/kubernetes/pull/80937), [@neolit123](https://github.com/neolit123)) -* Fixes a problem with the iptables proxy mode that could result in long delays ([#80368](https://github.com/kubernetes/kubernetes/pull/80368), [@danwinship](https://github.com/danwinship)) - * updating Service/Endpoints IPs in very large clusters on RHEL/CentOS 7. -* kubeadm: support any Linux kernel version newer than 3.10 ([#81623](https://github.com/kubernetes/kubernetes/pull/81623), [@neolit123](https://github.com/neolit123)) -* Added a metric 'apiserver_watch_events_sizes' that can be used to estimate sizes of watch events in the system. ([#80477](https://github.com/kubernetes/kubernetes/pull/80477), [@mborsz](https://github.com/mborsz)) -* NormalizeScore plugin set is removed from scheduler framework config API. Use ScorePlugin only. ([#80930](https://github.com/kubernetes/kubernetes/pull/80930), [@liu-cong](https://github.com/liu-cong)) -* kubeadm reset: unmount directories under "/var/lib/kubelet" for linux only ([#81494](https://github.com/kubernetes/kubernetes/pull/81494), [@Klaven](https://github.com/Klaven)) -* updates fluentd-elasticsearch docker image to fluentd 1.6.3 ([#80912](https://github.com/kubernetes/kubernetes/pull/80912), [@monotek](https://github.com/monotek)) -* Kubeadm now seamlessly migrates the CoreDNS Configuration when upgrading CoreDNS. ([#78033](https://github.com/kubernetes/kubernetes/pull/78033), [@rajansandeep](https://github.com/rajansandeep)) -* Introduce support for applying pod overhead to pod cgroups, if the PodOverhead feature is enabled. ([#79247](https://github.com/kubernetes/kubernetes/pull/79247), [@egernst](https://github.com/egernst)) -* Windows nodes on GCE now run with Windows Defender enabled. ([#81625](https://github.com/kubernetes/kubernetes/pull/81625), [@pjh](https://github.com/pjh)) - - - -# v1.16.0-beta.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.0-beta.1 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes.tar.gz) | `16513ebb52b01afee26156dcd4c449455dc328d7a080ba54b3f3a4584dbd9297025e33a9dafe758b259ae6e33ccb84a18038f6f415e98be298761c4d3dfee94b` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-src.tar.gz) | `3933f441ebca812835d6f893ec378896a8adb7ae88ca53247fa402aee1fda00d533301ac806f6bf106badf2f91be8c2524fd98e9757244b4b597c39124c59d01` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-client-darwin-386.tar.gz) | `28f0a8979f956aa5b3be1c1158a3ade1b242aac332696cb604fbdba44c4279caa1008840af01e50692bf48d0342018f882dd6e30f9fe3279e9784094cfc9ff3c` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-client-darwin-amd64.tar.gz) | `8804f60b690e5180125cf6ac6d739ad5432b364c5e0d0ee0d2f06220c86ca3a2cffc475e0e3c46c19466e5d1566a5b8bf0a33191cba5bbd3ff27ac64ceee57a0` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-client-linux-386.tar.gz) | `8f7f86db5a496afd269b926b6baf341bbd4208f49b48fad1a44c5424812667b3bd7912b5b97bd7844dee2a7c6f9441628f7b5db3caa14429020de7788289191c` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-client-linux-amd64.tar.gz) | `7407dc1216cac39f15ca9f75be47c0463a151a3fda7d9843a67c0043c69858fb36eaa6b4194ce5cefd125acd7f521c4b958d446bb0c95ca73a3b3ae47af2c3ee` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-client-linux-arm.tar.gz) | `249a82a0af7d8062f49edd9221b3823590b6d166c1bca12c787ae640d6a131bd6a3d7c99136de62074afa6cabe8900dcf4e11037ddbfdf9d5252fc16e256eeb5` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-client-linux-arm64.tar.gz) | `3a8416d99b6ae9bb6d568ff15d1783dc521fe58c60230f38126c64a7739bf03d8490a9a10042d1c4ef07290eaced6cb9d42a9728d4b937305d63f8d3cc7a66f8` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-client-linux-ppc64le.tar.gz) | `105bf4afeccf0b314673265b969d1a7f3796ca3098afa788c43cd9ff3e14ee409392caa5766631cca180e790d92731a48f5e7156167637b97abc7c178dd390f3` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-client-linux-s390x.tar.gz) | `98de73accb7deba9896e14a5012a112f6fd00d6e6868e4d21f61b06605efa8868f1965a1c1ba72bb8847416bc789bd7ef5c1a125811b6c6df060217cd84fdb2c` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-client-windows-386.tar.gz) | `7a43f3285b0ab617990497d41ceadfbd2be2b72d433b02508c198e9d380fb5e0a96863cc14d0e9bf0317df13810af1ab6b7c47cd4fa1d0619a00c9536dc60f0f` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-client-windows-amd64.tar.gz) | `f3fafcffc949bd7f8657dd684c901e199b21c4812009aca1f8cf3c8bf3c3230cab072208d3702d7a248c0b957bc513306dd437fb6a54e1e64b4d7dc8c3c180cd` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-server-linux-amd64.tar.gz) | `87b46e73ae2162ee49f510da6549e57503d3ea94b3c4488f39b0b93d45603f540ece30c3784c5e201711a7ddd1260481cd20ac4c618eaf46879e841d054a115a` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-server-linux-arm.tar.gz) | `80ba8e615497c0b9c339fbd2d6a4dda54fdbd5659abd7d8e8d448d8d8c24ba7f0ec48693e4bf8ed20513c46432f2a0f1039ab9044f0ed006b935a58772372d95` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-server-linux-arm64.tar.gz) | `b4a76a5fc026b4b3b5f9666df05e46896220591b21c147982ff3d91cec7330ed78cf1fc63f5ab759820aadbcfe400c1ad75d5151d9217d42e3da5873e0ff540d` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-server-linux-ppc64le.tar.gz) | `fb435dfd5514e4cd3bc16b9e71865bff3cdd5123fc272c8cbc5956c260449e0dcfd30d2fdb120da73134e62f48507c5a02d4528d7b9d978765ff4ed740b274e8` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-server-linux-s390x.tar.gz) | `65ed3d372a4d03493d0a586c7f67f1236aa99f02552195f1fb58079bc24787200d9a0f34d0c311a846345d0d70d02ad726f74376a91d3ced234bbfdce80c5133` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-node-linux-amd64.tar.gz) | `c9161689532a5e995a68bb0985a983dc43d8e747a05f37849cd33062c07e5202417b26bff652b8bc9c0005026618b7ebc56f918c71747a3addb5da044e683b4a` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-node-linux-arm.tar.gz) | `7dba9fdb290f33678983c046eb145446edb1b7479c2403f9e8bd835c3d832ab1f2acb28124c53af5b046d47ab433312d6a654f000a22f8e10795b0bc45bfbddb` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-node-linux-arm64.tar.gz) | `8c435824667cd9ec7efdfb72c1d060f62ca61b285cbb9575a6e6013e20ec5b379f77f51d43ae21c1778a3eb3ef69df8895213c54e4b9f39c67c929a276be12de` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-node-linux-ppc64le.tar.gz) | `2cfca30dbe49a38cd1f3c78135f60bf7cb3dae0a8ec5d7fa651e1c5949254876fbab8a724ed9a13f733a85b9960edcc4cc971dc3c16297db609209c4270f144f` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-node-linux-s390x.tar.gz) | `63bbe469ddd1be48624ef5627fef1e1557a691819c71a77d419d59d101e8e6ee391eb8545da35b412b94974c06d73329a13660484ab26087a178f34a827a3dcb` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0-beta.1/kubernetes-node-windows-amd64.tar.gz) | `07cb97d5a3b7d0180a9e22696f417422a0c043754c81ae68338aab7b520aa7c119ff53b9ad835f9a0bc9ea8c07483ce506af48d65641dd15d30209a696b064bb` - -## Changelog since v1.16.0-alpha.3 - -### Action Required - -* scheduler.alpha.kubernetes.io/critical-pod annotation is removed. Pod priority (spec.priorityClassName) should be used instead to mark pods as critical. Action required! ([#80342](https://github.com/kubernetes/kubernetes/pull/80342), [@draveness](https://github.com/draveness)) -* Removed cadvisor metric labels `pod_name` and `container_name` to match instrumentation guidelines. ([#80376](https://github.com/kubernetes/kubernetes/pull/80376), [@ehashman](https://github.com/ehashman)) - * Action required: any Prometheus queries that match `pod_name` and `container_name` labels (e.g. cadvisor or kubelet probe metrics) must be updated to use `pod` and `container` instead. -* Remove DirectCodecFactory(replace with serializer.WithoutConversionCodecFactory), DirectEncoder(replace with runtime.WithVersionEncoder) and DirectDecoder(replace with runtime.WithoutVersionDecoder). action required ([#79263](https://github.com/kubernetes/kubernetes/pull/79263), [@draveness](https://github.com/draveness)) - -### Other notable changes - -* fix: detach azure disk issue using dangling error ([#81266](https://github.com/kubernetes/kubernetes/pull/81266), [@andyzhangx](https://github.com/andyzhangx)) -* Conversion webhooks can now indicate they support receiving and responding with `ConversionReview` API objects in the `apiextensions.k8s.io/v1` version by including `v1` in the `conversionReviewVersions` list in their CustomResourceDefinition. Conversion webhooks must respond with a ConversionReview object in the same apiVersion they receive. `apiextensions.k8s.io/v1` `ConversionReview` responses must specify a `response.uid` that matches the `request.uid` of the object they were sent. ([#81476](https://github.com/kubernetes/kubernetes/pull/81476), [@liggitt](https://github.com/liggitt)) -* The `CustomResourceDefinition` API type is promoted to `apiextensions.k8s.io/v1` with the following changes: ([#79604](https://github.com/kubernetes/kubernetes/pull/79604), [@liggitt](https://github.com/liggitt)) - * Use of the new `default` feature in validation schemas is limited to v1 - * `spec.scope` is no longer defaulted to `Namespaced` and must be explicitly specified - * `spec.version` is removed; use `spec.versions` instead - * `spec.validation` is removed; use `spec.versions[*].schema` instead - * `spec.subresources` is removed; use `spec.versions[*].subresources` instead - * `spec.additionalPrinterColumns` is removed; use `spec.versions[*].additionalPrinterColumns` instead - * `spec.conversion.webhookClientConfig` is moved to `spec.conversion.webhook.clientConfig` - * `spec.conversion.conversionReviewVersions` is moved to `spec.conversion.webhook.conversionReviewVersions` - * `spec.versions[*].schema.openAPIV3Schema` is now required when creating v1 CustomResourceDefinitions - * `spec.preserveUnknownFields: true` is disallowed when creating v1 CustomResourceDefinitions; it must be specified within schema definitions as `x-kubernetes-preserve-unknown-fields: true` - * In `additionalPrinterColumns` items, the `JSONPath` field was renamed to `jsonPath` (fixes https://github.com/kubernetes/kubernetes/issues/66531) -* openapi now advertises correctly supported patch types for custom resources ([#81515](https://github.com/kubernetes/kubernetes/pull/81515), [@liggitt](https://github.com/liggitt)) -* Kubelet could be run with no Azure identity without subscriptionId configured now. ([#81500](https://github.com/kubernetes/kubernetes/pull/81500), [@feiskyer](https://github.com/feiskyer)) - * A sample cloud provider configure is: '{"vmType": "vmss", "useInstanceMetadata": true}'. -* Volumes specified in a pod but not used in it are no longer unnecessarily formatted, mounted and reported in `node.status.volumesInUse`. ([#81163](https://github.com/kubernetes/kubernetes/pull/81163), [@jsafrane](https://github.com/jsafrane)) -* kubeadm: use etcd's /health endpoint for a HTTP liveness probe on localhost instead of having a custom health check using etcdctl ([#81385](https://github.com/kubernetes/kubernetes/pull/81385), [@neolit123](https://github.com/neolit123)) -* kubeamd: use the --pod-network-cidr flag to init or use the podSubnet field in the kubeadm config to pass a comma separated list of pod CIDRs. ([#79033](https://github.com/kubernetes/kubernetes/pull/79033), [@Arvinderpal](https://github.com/Arvinderpal)) -* Update to use go 1.12.9 ([#81489](https://github.com/kubernetes/kubernetes/pull/81489), [@BenTheElder](https://github.com/BenTheElder)) -* Update Azure SDK + go-autorest API versions ([#79574](https://github.com/kubernetes/kubernetes/pull/79574), [@justaugustus](https://github.com/justaugustus)) -* Extender bind should respect IsInterested ([#79804](https://github.com/kubernetes/kubernetes/pull/79804), [@yqwang-ms](https://github.com/yqwang-ms)) -* Add instruction to setup "Application Default Credentials" to run GCE Windows e2e tests locally. ([#81337](https://github.com/kubernetes/kubernetes/pull/81337), [@YangLu1031](https://github.com/YangLu1031)) -* Scheduler should terminate when it looses leader lock. ([#81306](https://github.com/kubernetes/kubernetes/pull/81306), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla)) -* kubelet now exports an "kubelet_evictions" metric that counts the number of pod evictions carried out by the kubelet to reclaim resources ([#81377](https://github.com/kubernetes/kubernetes/pull/81377), [@sjenning](https://github.com/sjenning)) -* Return error when the scoring plugin returns score out of range [0, 100]. ([#81015](https://github.com/kubernetes/kubernetes/pull/81015), [@draveness](https://github.com/draveness)) -* Update to use go 1.12.8 ([#81390](https://github.com/kubernetes/kubernetes/pull/81390), [@cblecker](https://github.com/cblecker)) -* kube-proxy --cleanup will return the correct exit code if the cleanup was successful ([#78775](https://github.com/kubernetes/kubernetes/pull/78775), [@johscheuer](https://github.com/johscheuer)) -* remove iSCSI volume storage cleartext secrets in logs ([#81215](https://github.com/kubernetes/kubernetes/pull/81215), [@zouyee](https://github.com/zouyee)) -* Use a named array instead of a score array in normalizing-score phase. ([#80901](https://github.com/kubernetes/kubernetes/pull/80901), [@draveness](https://github.com/draveness)) -* If scheduler extender filtered a not found node, current scheduling round for this pod will just be skipped. ([#79641](https://github.com/kubernetes/kubernetes/pull/79641), [@yqwang-ms](https://github.com/yqwang-ms)) -* Update golang/x/net dependency to bring in fixes for CVE-2019-9512, CVE-2019-9514 ([#81394](https://github.com/kubernetes/kubernetes/pull/81394), [@cblecker](https://github.com/cblecker)) -* Fixes CVE-2019-11250: client-go header logging (at verbosity levels >= 7) now masks `Authorization` header contents ([#81330](https://github.com/kubernetes/kubernetes/pull/81330), [@tedyu](https://github.com/tedyu)) -* Resolves a transient 404 response to custom resource requests during server startup ([#81244](https://github.com/kubernetes/kubernetes/pull/81244), [@liggitt](https://github.com/liggitt)) -* Non nil DataSource entries on PVC's are now displayed as part of `describe pvc` output. ([#76463](https://github.com/kubernetes/kubernetes/pull/76463), [@j-griffith](https://github.com/j-griffith)) -* Fix Azure client requests stuck issues on http.StatusTooManyRequests (HTTP Code 429). ([#81279](https://github.com/kubernetes/kubernetes/pull/81279), [@feiskyer](https://github.com/feiskyer)) -* Implement a new feature that allows applying kustomize patches to static pod manifests generated by kubeadm. ([#80905](https://github.com/kubernetes/kubernetes/pull/80905), [@fabriziopandini](https://github.com/fabriziopandini)) -* Add a service annotation `service.beta.kubernetes.io/azure-pip-name` to specify the public IP name for Azure load balancer. ([#81213](https://github.com/kubernetes/kubernetes/pull/81213), [@nilo19](https://github.com/nilo19)) -* Fix a bug in the IPVS proxier where virtual servers are not cleaned up even though the corresponding Service object was deleted. ([#80942](https://github.com/kubernetes/kubernetes/pull/80942), [@gongguan](https://github.com/gongguan)) -* Add scheduling support for RuntimeClasses. RuntimeClasses can now specify nodeSelector constraints & tolerations, which are merged into the PodSpec for pods using that RuntimeClass. ([#80825](https://github.com/kubernetes/kubernetes/pull/80825), [@tallclair](https://github.com/tallclair)) -* etcd Docker image can be run as non-root ([#79722](https://github.com/kubernetes/kubernetes/pull/79722), [@randomvariable](https://github.com/randomvariable)) -* kubeadm: the permissions of generated CSR files are changed from 0644 to 0600 ([#81217](https://github.com/kubernetes/kubernetes/pull/81217), [@SataQiu](https://github.com/SataQiu)) -* Fix conflicted cache when the requests are canceled by other Azure operations. ([#81282](https://github.com/kubernetes/kubernetes/pull/81282), [@feiskyer](https://github.com/feiskyer)) -* Fix kubelet NodeLease potential performance issues. Kubelet now will try to update lease using cached one instead of get from API Server every time. ([#81174](https://github.com/kubernetes/kubernetes/pull/81174), [@answer1991](https://github.com/answer1991)) -* Improves validation errors for custom resources ([#81212](https://github.com/kubernetes/kubernetes/pull/81212), [@liggitt](https://github.com/liggitt)) -* Improvement in Kube-proxy. Kube-proxy waits for some duration for the node to be defined. ([#77167](https://github.com/kubernetes/kubernetes/pull/77167), [@paulsubrata55](https://github.com/paulsubrata55)) -* hyperkube will drop support for cloud-controller-manager in a future release ([#81219](https://github.com/kubernetes/kubernetes/pull/81219), [@dims](https://github.com/dims)) -* added an new Prometheus counter metric "sync_proxy_rules_iptables_restore_failures_total" for kube-proxy iptables-restore failures (both ipvs and iptables modes) ([#81210](https://github.com/kubernetes/kubernetes/pull/81210), [@figo](https://github.com/figo)) -* Add a `Patch` method to `ScaleInterface` ([#80699](https://github.com/kubernetes/kubernetes/pull/80699), [@knight42](https://github.com/knight42)) -* switch to VM Update call in attach/detach disk operation, original CreateOrUpdate call may lead to orphaned VMs or blocked resources ([#81208](https://github.com/kubernetes/kubernetes/pull/81208), [@andyzhangx](https://github.com/andyzhangx)) -* Add a azure cloud configuration `LoadBalancerName` and `LoadBalancerResourceGroup` to allow the corresponding customizations of azure load balancer. ([#81054](https://github.com/kubernetes/kubernetes/pull/81054), [@nilo19](https://github.com/nilo19)) -* Update the GCE windows node image to include hot fixes since July. ([#81106](https://github.com/kubernetes/kubernetes/pull/81106), [@YangLu1031](https://github.com/YangLu1031)) -* Kubelet considers all static pods as critical. Static pods pass kubelet admission even if a node does not have enough resources. Users must ensure that they account for resources when creating static pods. ([#80491](https://github.com/kubernetes/kubernetes/pull/80491), [@hpandeycodeit](https://github.com/hpandeycodeit)) -* kube-apiserver: the `--basic-auth-file` flag and authentication mode is deprecated and will be removed in a future release. It is not recommended for production environments. ([#81152](https://github.com/kubernetes/kubernetes/pull/81152), [@tedyu](https://github.com/tedyu)) -* Fix a bug that pretty printer marshals empty byte or uint8 slice as null ([#81096](https://github.com/kubernetes/kubernetes/pull/81096), [@roycaihw](https://github.com/roycaihw)) -* Deprecate the `--cloud-provider-gce-lb-src-cidrs` flag in the kube-apiserver. This flag will be removed once the GCE Cloud Provider is removed from kube-apiserver. ([#81094](https://github.com/kubernetes/kubernetes/pull/81094), [@andrewsykim](https://github.com/andrewsykim)) -* cloud-controller-manager binaries and docker images are no longer shipped with kubernetes releases. ([#81029](https://github.com/kubernetes/kubernetes/pull/81029), [@dims](https://github.com/dims)) -* API: the metadata.selfLink field is deprecated in individual and list objects. It will no longer be returned starting in v1.20, and the field will be removed entirely in v1.21. ([#80978](https://github.com/kubernetes/kubernetes/pull/80978), [@wojtek-t](https://github.com/wojtek-t)) - - - -# v1.16.0-alpha.3 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.0-alpha.3 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes.tar.gz) | `82bc119f8d1e44518ab4f4bdefb96158b1a3634c003fe1bc8dcd62410189449fbd6736126409d39a6e2d211a036b4aa98baef3b3c6d9f7505e63430847d127c2` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-src.tar.gz) | `bbf330b887a5839e3d3219f5f4aa38f1c70eab64228077f846da80395193b2b402b60030741de14a9dd4de963662cfe694f6ab04035309e54dc48e6dddd5c05d` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-client-darwin-386.tar.gz) | `8d509bdc1ca62463cbb25548ec270792630f6a883f3194e5bdbbb3d6f8568b00f695e39950b7b01713f2f05f206c4d1df1959c6ee80f8a3e390eb94759d344b2` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-client-darwin-amd64.tar.gz) | `1b00b3a478c210e3c3e6c346f5c4f7f43a00d5ef6acb8d9c1feaf26f913b9d4f97eb6db99bbf67953ef6399abe4fbb79324973c1744a6a8cd76067cb2aeed2ca` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-client-linux-386.tar.gz) | `82424207b4ef52c3722436eaaf86dbe5c93c6670fd09c2b04320251028fd1bb75724b4f490b6e8b443bd8e5f892ab64612cd22206119924dafde424bdee9348a` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-client-linux-amd64.tar.gz) | `57ba937e58755d3b7dfd19626fedb95718f9c1d44ac1c5b4c8c46d11ba0f8783f3611c7b946b563cac9a3cf104c35ba5605e5e76b48ba2a707d787a7f50f7027` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-client-linux-arm.tar.gz) | `3a3601026e019b299a6f662b887ebe749f08782d7ed0d37a807c38a01c6ba19f23e2837c9fb886053ad6e236a329f58a11ee3ec4ba96a8729905ae78a7f6c58c` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-client-linux-arm64.tar.gz) | `4cdeb2e678c6b817a04f9f5d92c5c6df88e0f954550961813fca63af4501d04c08e3f4353dd8b6dce96e2ee197a4c688245f03c888417a436b3cf70abd4ba53a` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-client-linux-ppc64le.tar.gz) | `0cc7c8f7b48f5affb679352a94e42d8b4003b9ca6f8cbeaf315d2eceddd2e8446a58ba1d4a0df18e8f9c69d0d3b5a46f25b2e6a916e57975381e504d1a4daa1b` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-client-linux-s390x.tar.gz) | `9d8fa639f543e707dc65f24ce2f8c73a50c606ec7bc27d17840f45ac150d00b3b3f83de5e3b21f72b598acf08273e4b9a889f199f4ce1b1d239b28659e6cd131` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-client-windows-386.tar.gz) | `05bf6e696da680bb8feec4f411f342a9661b6165f4f0c72c069871983f199418c4d4fa1e034136bc8be41c5fecc9934a123906f2d5666c09a876db16ae8c11ad` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-client-windows-amd64.tar.gz) | `b2097bc851f5d3504e562f68161910098b46c66c726b92b092a040acda965fed01f45e7b9e513a4259c7a5ebd65d7aa3e3b711f4179139a935720d91216ef5c2` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-server-linux-amd64.tar.gz) | `721bd09b64e5c8f220332417089a772d9073c0dc5cdfa240984cfeb0d681b4a02620fb3ebf1b9f6a82a4dd3423f5831c259d4bad502dce87f145e0a08cb73ee9` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-server-linux-arm.tar.gz) | `e7638ce4b88b4282f0a157593cfe809fa9cc9139ea7ebae4762ef5ac1dfaa516903a8acb34a45937eb94b2699e5d4c68c639cbe40cbed2a6b97681aeace9948e` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-server-linux-arm64.tar.gz) | `395566c4be3c2ca5b07e81221b3370bc7ccbef0879f96a9384650fcaf4f699f3b2744ba1d97ae42cc6c5d9e1a65a41a793a8b0c9e01a0a65f57c56b1420f8141` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-server-linux-ppc64le.tar.gz) | `90fcba066efd76d2f271a0eb26ed4d90483674d04f5e8cc39ec1e5b7f343311f2f1c40de386f35d3c69759628a1c7c075559c09b6c4542e42fbbe0daeb61a5fa` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-server-linux-s390x.tar.gz) | `b25014bcf4138722a710451f6e58ee57588b4d47fcceeda8f6866073c1cc08641082ec56e94b0c6d586c0835ce9b55d205d254436fc22a744b24d8c74e8e5cce` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-node-linux-amd64.tar.gz) | `6925a71096530f7114a68e755d07cb8ba714bc60b477360c85d76d7b71d3a3c0b78a650877d81aae35b308ded27c8207b5fe72d990abc43db3aa8a7d6d7f94f4` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-node-linux-arm.tar.gz) | `073310e1ccf9a8af998d4c0402ae86bee4f253d2af233b0c45cea55902268c2fe7190a41a990b079e24536e9efa27b94249c3a9236531a166ba3ac06c0f26f92` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-node-linux-arm64.tar.gz) | `c55e9aecef906e56a6003f441a7d336846edb269aed1c7a31cf834b0730508706e73ea0ae135c1604b0697c9e2582480fbfba8ba105152698c240e324da0cbd2` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-node-linux-ppc64le.tar.gz) | `e89d72d27bb0a7f9133ef7310f455ba2b4c46e9852c43e0a981b68a413bcdd18de7168eb16d93cf87a5ada6a4958592d3be80c9be1e6895fa48e2f7fa70f188d` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-node-linux-s390x.tar.gz) | `6ef8a25f2f80a806672057dc030654345e87d269babe7cf166f7443e04c0b3a9bc1928cbcf5abef1f0f0fcd37f3a727f789887dbbdae62f9d1fd90a71ed26b39` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.3/kubernetes-node-windows-amd64.tar.gz) | `22fd1cea6e0150c06dbdc7249635bbf93c4297565d5a9d13e653f9365cd61a0b8306312efc806d267c47be81621016b114510a269c622cccc916ecff4d10f33c` - -## Changelog since v1.16.0-alpha.2 - -### Action Required - -* ACTION REQUIRED: ([#80676](https://github.com/kubernetes/kubernetes/pull/80676), [@fabriziopandini](https://github.com/fabriziopandini)) - * kubeadm now deletes the bootstrap-kubelet.conf file after TLS bootstrap - * User relying on bootstrap-kubelet.conf should switch to kubelet.conf that contains node credentials - -### Other notable changes - -* Fixes validation of VolumeAttachment API objects created with inline volume sources. ([#80945](https://github.com/kubernetes/kubernetes/pull/80945), [@tedyu](https://github.com/tedyu)) -* Azure disks of shared kind will no longer fail if they do not contain skuname or ([#80837](https://github.com/kubernetes/kubernetes/pull/80837), [@rmweir](https://github.com/rmweir)) - * storageaccounttype. -* kubeadm: fix "certificate-authority" files not being pre-loaded when using file discovery ([#80966](https://github.com/kubernetes/kubernetes/pull/80966), [@neolit123](https://github.com/neolit123)) -* Errors from pod volume set up are now propagated as pod events. ([#80369](https://github.com/kubernetes/kubernetes/pull/80369), [@jsafrane](https://github.com/jsafrane)) -* kubeadm: enable secure serving for the kube-scheduler ([#80951](https://github.com/kubernetes/kubernetes/pull/80951), [@neolit123](https://github.com/neolit123)) -* Kubernetes client users may disable automatic compression when invoking Kubernetes APIs by setting the `DisableCompression` field on their rest.Config. This is recommended when clients communicate primarily over high bandwidth / low latency networks where response compression does not improve end to end latency. ([#80919](https://github.com/kubernetes/kubernetes/pull/80919), [@smarterclayton](https://github.com/smarterclayton)) -* kubectl get did not correctly count the number of binaryData keys when listing config maps. ([#80827](https://github.com/kubernetes/kubernetes/pull/80827), [@smarterclayton](https://github.com/smarterclayton)) -* Implement "post-filter" extension point for scheduling framework ([#78097](https://github.com/kubernetes/kubernetes/pull/78097), [@draveness](https://github.com/draveness)) -* Reduces GCE PD Node Attach Limits by 1 since the node boot disk is considered an attachable disk ([#80923](https://github.com/kubernetes/kubernetes/pull/80923), [@davidz627](https://github.com/davidz627)) -* This PR fixes an error when using external etcd but storing etcd certificates in the same folder and with the same name used by kubeadm for local etcd certificates; for an older version of kubeadm, the workaround is to avoid file name used by kubeadm for local etcd. ([#80867](https://github.com/kubernetes/kubernetes/pull/80867), [@fabriziopandini](https://github.com/fabriziopandini)) -* When specifying `--(kube|system)-reserved-cgroup`, with `--cgroup-driver=systemd`, it is now possible to use the fully qualified cgroupfs name (i.e. `/test-cgroup.slice`). ([#78793](https://github.com/kubernetes/kubernetes/pull/78793), [@mattjmcnaughton](https://github.com/mattjmcnaughton)) -* kubeadm: treat non-fatal errors as warnings when doing reset ([#80862](https://github.com/kubernetes/kubernetes/pull/80862), [@drpaneas](https://github.com/drpaneas)) -* kube-addon-manager has been updated to v9.0.2 to fix a bug in leader election (https://github.com/kubernetes/kubernetes/pull/80575) ([#80861](https://github.com/kubernetes/kubernetes/pull/80861), [@mborsz](https://github.com/mborsz)) -* Determine system model to get credentials for windows nodes. ([#80764](https://github.com/kubernetes/kubernetes/pull/80764), [@liyanhui1228](https://github.com/liyanhui1228)) -* TBD ([#80730](https://github.com/kubernetes/kubernetes/pull/80730), [@jennybuckley](https://github.com/jennybuckley)) -* The `AdmissionReview` API sent to and received from admission webhooks has been promoted to `admission.k8s.io/v1`. Webhooks can specify a preference for receiving `v1` AdmissionReview objects with `admissionReviewVersions: ["v1","v1beta1"]`, and must respond with an API object in the same `apiVersion` they are sent. When webhooks use `admission.k8s.io/v1`, the following additional validation is performed on their responses: ([#80231](https://github.com/kubernetes/kubernetes/pull/80231), [@liggitt](https://github.com/liggitt)) - * `response.patch` and `response.patchType` are not permitted from validating admission webhooks - * `apiVersion: "admission.k8s.io/v1"` is required - * `kind: "AdmissionReview"` is required - * `response.uid: ""` is required - * `response.patchType: "JSONPatch"` is required (if `response.patch` is set) -* "kubeadm join" fails if file-based discovery is too long, with a default timeout of 5 minutes. ([#80804](https://github.com/kubernetes/kubernetes/pull/80804), [@olivierlemasle](https://github.com/olivierlemasle)) -* enhance Azure cloud provider code to support both AAD and ADFS authentication. ([#80841](https://github.com/kubernetes/kubernetes/pull/80841), [@rjaini](https://github.com/rjaini)) -* Attempt to set the kubelet's hostname & internal IP if `--cloud-provider=external` and no node addresses exists ([#75229](https://github.com/kubernetes/kubernetes/pull/75229), [@andrewsykim](https://github.com/andrewsykim)) -* kubeadm: avoid double deletion of the upgrade prepull DaemonSet ([#80798](https://github.com/kubernetes/kubernetes/pull/80798), [@xlgao-zju](https://github.com/xlgao-zju)) -* Fixes problems with connecting to services on localhost on some systems; in particular, DNS queries to systemd-resolved on Ubuntu. ([#80591](https://github.com/kubernetes/kubernetes/pull/80591), [@danwinship](https://github.com/danwinship)) -* Implement normalize plugin extension point for the scheduler framework. ([#80383](https://github.com/kubernetes/kubernetes/pull/80383), [@liu-cong](https://github.com/liu-cong)) -* Fixed the bash completion error with override flags. ([#80802](https://github.com/kubernetes/kubernetes/pull/80802), [@dtaniwaki](https://github.com/dtaniwaki)) -* Fix CVE-2019-11247: API server allows access to custom resources via wrong scope ([#80750](https://github.com/kubernetes/kubernetes/pull/80750), [@sttts](https://github.com/sttts)) -* Failed iscsi logout is now re-tried periodically. ([#78941](https://github.com/kubernetes/kubernetes/pull/78941), [@jsafrane](https://github.com/jsafrane)) -* Fix public IP not found issues for VMSS nodes ([#80703](https://github.com/kubernetes/kubernetes/pull/80703), [@feiskyer](https://github.com/feiskyer)) -* In order to enable dual-stack support within kubeadm and kubernetes components, as part of the init config file, the user should set feature-gate IPv6DualStack=true in the ClusterConfiguration. Additionally, for each worker node, the user should set the feature-gate for kubelet using either nodeRegistration.kubeletExtraArgs or KUBELET_EXTRA_ARGS. ([#80531](https://github.com/kubernetes/kubernetes/pull/80531), [@Arvinderpal](https://github.com/Arvinderpal)) -* Fix error in `kubeadm join --discovery-file` when using discovery files with embedded credentials ([#80675](https://github.com/kubernetes/kubernetes/pull/80675), [@fabriziopandini](https://github.com/fabriziopandini)) - - - -# v1.16.0-alpha.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.0-alpha.2 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes.tar.gz) | `7dfa3f8b9e98e528e2b49ed9cca5e95f265b9e102faac636ff0c29e045689145be236b98406a62eb0385154dc0c1233cac049806c99c9e46590cad5aa729183f` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-src.tar.gz) | `7cf14b92c96cab5fcda3115ec66b44562ca26ea6aa46bc7fa614fa66bda1bdf9ac1f3c94ef0dfa0e37c992c7187ecf4205b253f37f280857e88a318f8479c9a9` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-client-darwin-386.tar.gz) | `4871756de2cd1add0b07ec1e577c500d18a59e2f761595b939e1d4e10fbe0a119479ecaaf53d75cb2138363deae23cc88cba24fe3018cec6a27a3182f37cae92` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-client-darwin-amd64.tar.gz) | `dbd9ca5fd90652ffc1606f50029d711eb52d34b707b7c04f29201f85aa8a5081923a53585513634f3adb6ace2bc59be9d4ad2abc49fdc3790ef805378c111e68` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-client-linux-386.tar.gz) | `6b049098b1dc65416c5dcc30346b82e5cf69a1cdd7e7b065429a76d302ef4b2a1c8e2dc621e9d5c1a6395a1fbd97f196d99404810880d118576e7b94e5621e4c` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-client-linux-amd64.tar.gz) | `7240a9d49e445e9fb0c9d360a9287933c6c6e7d81d6e11b0d645d3f9b6f3f1372cc343f03d10026518df5d6c95525e84c41b06a034c9ec2c9e306323dbd9325b` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-client-linux-arm.tar.gz) | `947b0d9aeeef08961c0582b4c3c94b7ae1016d20b0c9f50af5fe760b3573f17497059511bcb57ac971a5bdadeb5c77dfd639d5745042ecc67541dd702ee7c657` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-client-linux-arm64.tar.gz) | `aff0258a223f5061552d340cda36872e3cd7017368117bbb14dc0f8a3a4db8c715c11743bedd72189cd43082aa9ac1ced64a6337c2f174bdcbeef094b47e76b0` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-client-linux-ppc64le.tar.gz) | `3eabecd62290ae8d876ae45333777b2c9959e39461197dbe90e6ba07d0a4c50328cbdf44e77d2bd626e435ffc69593d0e8b807b36601c19dd1a1ef17e6810b4f` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-client-linux-s390x.tar.gz) | `6651b2d95d0a8dd748c33c9e8018ab606b4061956cc2b6775bd0b008b04ea33df27be819ce6c391ceb2191b53acbbc088d602ed2d86bdd7a3a3fc1c8f876798a` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-client-windows-386.tar.gz) | `4b6c11b7a318e5fcac19144f6ab1638126c299e08c7b908495591674abcf4c7dd16f63c74c7d901beff24006150d2a31e0f75e28a9e14d6d0d88a09dafb014f0` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-client-windows-amd64.tar.gz) | `760ae08da6045ae7089fb27a9324e77bed907662659364857e1a8d103d19ba50e80544d8c21a086738b15baebfd9a5fa78d63638eff7bbe725436c054ba649cc` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-server-linux-amd64.tar.gz) | `69db41f3d79aa0581c36a3736ab8dc96c92127b82d3cf25c5effc675758fe713ca7aa7e5b414914f1bc73187c6cee5f76d76b74a2ee1c0e7fa61557328f1b8ef` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-server-linux-arm.tar.gz) | `ca302f53ee91ab4feb697bb34d360d0872a7abea59c5f28cceefe9237a914c77d68722b85743998ab12bf8e42005e63a1d1a441859c2426c1a8d745dd33f4276` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-server-linux-arm64.tar.gz) | `79ab1f0a542ce576ea6d81cd2a7c068da6674177b72f1b5f5e3ca47edfdb228f533683a073857b6bc53225a230d15d3ba4b0cb9b6d5d78a309aa6e24c2f6c500` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-server-linux-ppc64le.tar.gz) | `fbe5b45326f1d03bcdd9ffd46ab454917d79f629ba23dae9d667d0c7741bc2f5db2960bf3c989bb75c19c9dc1609dacbb8a6dc9a440e5b192648e70db7f68721` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-server-linux-s390x.tar.gz) | `eb13ac306793679a3a489136bb7eb6588472688b2bb2aa0e54e61647d8c9da6d3589c19e7ac434c24defa78cb65f7b72593eedec1e7431c7ecae872298efc4de` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-node-linux-amd64.tar.gz) | `a4bde88f3e0f6233d04f04d380d5f612cd3c574bd66b9f3ee531fa76e3e0f1c6597edbc9fa61251a377e8230bce0ce6dc1cf57fd19080bb7d13f14a391b27fe8` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-node-linux-arm.tar.gz) | `7d72aa8c1d883b9f047e5b98dbb662bdfd314f9c06af4213068381ffaac116e68d1aad76327ead7a4fd97976ea72277cebcf765c56b265334cb3a02c83972ec1` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-node-linux-arm64.tar.gz) | `c9380bb59ba26dcfe1ab52b5cb02e2d920313defda09ec7d19ccbc18f54def4b57cf941ac8a397392beb5836fdc12bc9600d4055f2cfd1319896cfc9631cab10` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-node-linux-ppc64le.tar.gz) | `7bcd79b368a62c24465fce7dcb024bb629eae034e09fb522fb43bb5798478ca2660a3ccc596b424325c6f69e675468900f3b41f3924e7ff453e3db40150b3c16` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-node-linux-s390x.tar.gz) | `9bda9dd24ee5ca65aaefece4213b46ef57cde4904542d94e6147542e42766f8b80fe24d99a6b8711bd7dbe00c415169a9f258f433c5f5345c2e17c2bb82f2670` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.2/kubernetes-node-windows-amd64.tar.gz) | `d5906f229d2d8e99bdb37e7d155d54560b82ea28ce881c5a0cde8f8d20bff8fd2e82ea4b289ae3e58616d3ec8c23ac9b473cb714892a377feb87ecbce156147d` - -## Changelog since v1.16.0-alpha.1 - -### Action Required - -* Revert "scheduler.alpha.kubernetes.io/critical-pod annotation is removed. Pod priority (spec.priorityClassName) should be used instead to mark pods as critical. Action required!" ([#80277](https://github.com/kubernetes/kubernetes/pull/80277), [@draveness](https://github.com/draveness)) -* ACTION REQUIRED: container images tar files for 'amd64' will now contain the architecture in the RepoTags manifest.json section. ([#80266](https://github.com/kubernetes/kubernetes/pull/80266), [@javier-b-perez](https://github.com/javier-b-perez)) - * If you are using docker manifests there are not visible changes. - -### Other notable changes - -* Use HTTPS as etcd-apiserver protocol when mTLS between etcd and kube-apiserver on master is enabled, change etcd metrics/health port to 2382. ([#77561](https://github.com/kubernetes/kubernetes/pull/77561), [@wenjiaswe](https://github.com/wenjiaswe)) -* kubelet: change node-lease-renew-interval to 0.25 of lease-renew-duration ([#80429](https://github.com/kubernetes/kubernetes/pull/80429), [@gaorong](https://github.com/gaorong)) -* Fix error handling and potential go null pointer exception in kubeadm upgrade diff ([#80648](https://github.com/kubernetes/kubernetes/pull/80648), [@odinuge](https://github.com/odinuge)) -* New flag --endpoint-updates-batch-period in kube-controller-manager can be used to reduce number of endpoints updates generated by pod changes. ([#80509](https://github.com/kubernetes/kubernetes/pull/80509), [@mborsz](https://github.com/mborsz)) -* kubeadm: produce errors if they occur when resetting cluster status for a control-plane node ([#80573](https://github.com/kubernetes/kubernetes/pull/80573), [@bart0sh](https://github.com/bart0sh)) -* When a load balancer type service is created in a k8s cluster that is backed by Azure Standard Load Balancer, the corresponding load balancer rule added in the Azure Standard Load Balancer would now have the "EnableTcpReset" property set to true. ([#80624](https://github.com/kubernetes/kubernetes/pull/80624), [@xuto2](https://github.com/xuto2)) -* Update portworx plugin dependency on libopenstorage/openstorage to v1.0.0 ([#80495](https://github.com/kubernetes/kubernetes/pull/80495), [@adityadani](https://github.com/adityadani)) -* Fixed detachment of deleted volumes on OpenStack / Cinder. ([#80518](https://github.com/kubernetes/kubernetes/pull/80518), [@jsafrane](https://github.com/jsafrane)) -* when PodInfoOnMount is enabled for a CSI driver, the new csi.storage.k8s.io/ephemeral parameter in the volume context allows a driver's NodePublishVolume implementation to determine on a case-by-case basis whether the volume is ephemeral or a normal persistent volume ([#79983](https://github.com/kubernetes/kubernetes/pull/79983), [@pohly](https://github.com/pohly)) -* Update gogo/protobuf to serialize backward, as to get better performance on deep objects. ([#77355](https://github.com/kubernetes/kubernetes/pull/77355), [@apelisse](https://github.com/apelisse)) -* Remove GetReference() and GetPartialReference() function from pkg/api/ref, as the same function exists also in staging/src/k8s.io/client-go/tools/ref ([#80361](https://github.com/kubernetes/kubernetes/pull/80361), [@wojtek-t](https://github.com/wojtek-t)) -* Fixed a bug in the CSI metrics that does not return not supported error when a CSI driver does not support metrics. ([#79851](https://github.com/kubernetes/kubernetes/pull/79851), [@jparklab](https://github.com/jparklab)) -* Fixed a bug in kube-addon-manager's leader election logic that made all replicas active. ([#80575](https://github.com/kubernetes/kubernetes/pull/80575), [@mborsz](https://github.com/mborsz)) -* Kibana has been slightly revamped/improved in the latest version ([#80421](https://github.com/kubernetes/kubernetes/pull/80421), [@lostick](https://github.com/lostick)) -* kubeadm: fixed ignoring errors when pulling control plane images ([#80529](https://github.com/kubernetes/kubernetes/pull/80529), [@bart0sh](https://github.com/bart0sh)) -* CRDs under k8s.io and kubernetes.io must have the "api-approved.kubernetes.io" set to either `unapproved.*` or a link to the pull request approving the schema. See https://github.com/kubernetes/enhancements/pull/1111 for more details. ([#79992](https://github.com/kubernetes/kubernetes/pull/79992), [@deads2k](https://github.com/deads2k)) -* Reduce kube-proxy cpu usage in IPVS mode when a large number of nodePort services exist. ([#79444](https://github.com/kubernetes/kubernetes/pull/79444), [@cezarsa](https://github.com/cezarsa)) -* Add CSI Migration Shim for VerifyVolumesAreAttached and BulkVolumeVerify ([#80443](https://github.com/kubernetes/kubernetes/pull/80443), [@davidz627](https://github.com/davidz627)) -* Fix a bug that causes DaemonSet rolling update hang when there exist failed pods. ([#78170](https://github.com/kubernetes/kubernetes/pull/78170), [@DaiHao](https://github.com/DaiHao)) -* Fix retry issues when the nodes are under deleting on Azure ([#80419](https://github.com/kubernetes/kubernetes/pull/80419), [@feiskyer](https://github.com/feiskyer)) -* Add support for AWS EBS on windows ([#79552](https://github.com/kubernetes/kubernetes/pull/79552), [@wongma7](https://github.com/wongma7)) -* Passing an invalid policy name in the `--cpu-manager-policy` flag will now cause the kubelet to fail instead of simply ignoring the flag and running the `cpumanager`s default policy instead. ([#80294](https://github.com/kubernetes/kubernetes/pull/80294), [@klueska](https://github.com/klueska)) -* Add Filter extension point to the scheduling framework. ([#78477](https://github.com/kubernetes/kubernetes/pull/78477), [@YoubingLi](https://github.com/YoubingLi)) -* cpuUsageNanoCores is now reported in the Kubelet summary API on Windows nodes ([#80176](https://github.com/kubernetes/kubernetes/pull/80176), [@liyanhui1228](https://github.com/liyanhui1228)) -* `[]TopologySpreadConstraint` is introduced into PodSpec to support the "Even Pods Spread" alpha feature. ([#77327](https://github.com/kubernetes/kubernetes/pull/77327), [@Huang-Wei](https://github.com/Huang-Wei)) -* kubeadm: fall back to client version in case of certain HTTP errors ([#80024](https://github.com/kubernetes/kubernetes/pull/80024), [@RainbowMango](https://github.com/RainbowMango)) -* NFS Drivers are now enabled to collect metrics, StatFS metrics provider is used to collect the metrics. ([#75805](https://github.com/kubernetes/kubernetes/pull/75805) , [@brahmaroutu](https://github.com/brahmaroutu)) ([#75805](https://github.com/kubernetes/kubernetes/pull/75805), [@brahmaroutu](https://github.com/brahmaroutu)) -* make node lease renew interval more heuristic based on node-status-update-frequency in kubelet ([#80173](https://github.com/kubernetes/kubernetes/pull/80173), [@gaorong](https://github.com/gaorong)) -* Introduction of the pod overhead feature to the scheduler. This functionality is alpha-level as of ([#78319](https://github.com/kubernetes/kubernetes/pull/78319), [@egernst](https://github.com/egernst)) - * Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature.gate. -* N/A ([#80260](https://github.com/kubernetes/kubernetes/pull/80260), [@khenidak](https://github.com/khenidak)) -* Add v1.Container.SecurityContext.WindowsOptions.RunAsUserName to the pod spec ([#79489](https://github.com/kubernetes/kubernetes/pull/79489), [@bclau](https://github.com/bclau)) -* Pass-through volume MountOptions to global mount (NodeStageVolume) on the node for CSI ([#80191](https://github.com/kubernetes/kubernetes/pull/80191), [@davidz627](https://github.com/davidz627)) -* Add Score extension point to the scheduling framework. ([#79109](https://github.com/kubernetes/kubernetes/pull/79109), [@ahg-g](https://github.com/ahg-g)) - - - -# v1.16.0-alpha.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.16.0-alpha.1 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes.tar.gz) | `4834c52267414000fa93c0626bded5a969cf65d3d4681c20e5ae2c5f62002a51dfb8ee869484f141b147990915ba57be96108227f86c4e9f571b4b25e7ed0773` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-src.tar.gz) | `9329d51f5c73f830f3c895c2601bc78e51d2d412b928c9dae902e9ba8d46338f246a79329a27e4248ec81410ff103510ba9b605bb03e08a48414b2935d2c164b` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-client-darwin-386.tar.gz) | `3cedffb92a0fca4f0b2d41f8b09baa59dff58df96446e8eece4e1b81022d9fdda8da41b5f73a3468435474721f03cffc6e7beabb25216b089a991b68366c73bc` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-client-darwin-amd64.tar.gz) | `14de6bb296b4d022f50778b160c98db3508c9c7230946e2af4eb2a1d662d45b86690e9e04bf3e592ec094e12bed1f2bb74cd59d769a0eaac3c81d9b80e0a79c8` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-client-linux-386.tar.gz) | `8b2b9fa55890895239b99fabb866babe50aca599591db1ecf9429e49925ae478b7c813b9d7704a20f41f2d50947c3b3deecb594544f1f3eae6c4e97ae9bb9b70` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-client-linux-amd64.tar.gz) | `e927ac7b314777267b95e0871dd70c352ec0fc967ba221cb6cba523fa6f18d9d193e4ce92a1f9fa669f9c961de0e34d69e770ef745199ed3693647dd0d692e57` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-client-linux-arm.tar.gz) | `4a230a6d34e2ffd7df40c5b726fbcbb7ef1373d81733bfb75685b2448ed181eb49ef27668fc33700f30de88e5bbdcc1e52649b9d31c7940760f48c6e6eb2f403` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-client-linux-arm64.tar.gz) | `87c8d7185df23b3496ceb74606558d895a64daf0c41185c833a233e29216131baac6e356a57bb78293ed9d0396966ecc3b00789f2b66af352dc286b101bcc69a` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-client-linux-ppc64le.tar.gz) | `16ea5efa2fc29bc7448a609a7118e7994e901ab26462aac52f03b4851d4c9d103ee12d2335360f8aa503ddbb2a71f3000f0fcb33597dd813df4f5ad5f4819fa9` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-client-linux-s390x.tar.gz) | `7390ad1682227a70550b20425fa5287fecf6a5d413493b03df3a7795614263e7883f30f3078bbb9fbd389d2a1dab073f8f401be89b82bd5861fa6b0aeda579eb` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-client-windows-386.tar.gz) | `88251896dfe38e59699b879f643704c0195e7a5af2cb00078886545f49364a2e3b497590781f135b80d60e256bad3a4ea197211f4f061c98dee096f0845e7a9b` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-client-windows-amd64.tar.gz) | `766b2a9bf097e45b2549536682cf25129110bd0562ab0df70e841ff8657dd7033119b0929e7a213454f90594b19b90fa57d89918cee33ceadba7d689449fe333` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-server-linux-amd64.tar.gz) | `dfd5c2609990c9b9b94249c654931b240dc072f2cc303e1e1d6dec1fddfb0a9e127e3898421ace00ab1947a3ad2f87cfd1266fd0b6193ef00f942269388ef372` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-server-linux-arm.tar.gz) | `7704c2d3c57950f184322263ac2be1649a0d737d176e7fed1897031d0efb8375805b5f12c7cf9ba87ac06ad8a635d6e399382d99f3cbb418961a4f0901465f50` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-server-linux-arm64.tar.gz) | `fbbd87cc38cfb6429e3741bfd87ecec4b69b551df6fb7c121900ced4c1cd0bc77a317ca8abd41f71ffd7bc0b1c7144fecb22fa405d0b211b238df24d28599333` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-server-linux-ppc64le.tar.gz) | `cfed5b936eb2fe44df5d0c9c6484bee38ef370fb1258522e8c62fb6a526e9440c1dc768d8bf33403451ae00519cab1450444da854fd6c6a37665ce925c4e7d69` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-server-linux-s390x.tar.gz) | `317681141734347260ad9f918fa4b67e48751f5a7df64a848d2a83c79a4e9dba269c51804b09444463ba88a2c0efa1c307795cd8f06ed840964eb2c725a4ecc3` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-node-linux-amd64.tar.gz) | `b3b1013453d35251b8fc4759f6ac26bdeb37f14a98697078535f7f902e8ebca581b5629bbb4493188a7e6077eb5afc61cf275f42bf4d9f503b70bfc58b9730b2` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-node-linux-arm.tar.gz) | `0bacc1791d260d2863ab768b48daf66f0f7f89eeee70e68dd515b05fc9d7f14b466382fe16fa84a103e0023324f681767489d9485560baf9eb80fe0e7ffab503` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-node-linux-arm64.tar.gz) | `73bd70cb9d27ce424828a95d715c16fd9dd22396dbe1dfe721eb0aea9e186ec46e6978956613b0978a8da3c22df39790739b038991c0192281881fce41d7c9f1` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-node-linux-ppc64le.tar.gz) | `a865f98838143dc7e1e12d1e258e5f5f2855fcf6e88488fb164ad62cf886d8e2a47fdf186ad6b55172f73826ae19da9b2642b9a0df0fa08f9351a66aeef3cf17` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-node-linux-s390x.tar.gz) | `d2f9f746ed0fe00be982a847a3ae1b6a698d5c506be1d3171156902140fec64642ec6d99aa68de08bdc7d65c9a35ac2c36bda53c4db873cb8e7edc419a4ab958` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.16.0-alpha.1/kubernetes-node-windows-amd64.tar.gz) | `37f48a6d8174f38668bc41c81222615942bfe07e01f319bdfed409f83a3de3773dceb09fd86330018bb05f830e165e7bd85b3d23d26a50227895e4ec07f8ab98` - -## Changelog since v1.15.0 - -### Action Required - -* Migrate scheduler to use v1beta1 Event API. action required: any tool targeting scheduler events needs to use v1beta1 Event API ([#78447](https://github.com/kubernetes/kubernetes/pull/78447), [@yastij](https://github.com/yastij)) -* scheduler.alpha.kubernetes.io/critical-pod annotation is removed. Pod priority (spec.priorityClassName) should be used instead to mark pods as critical. Action required! ([#79554](https://github.com/kubernetes/kubernetes/pull/79554), [@draveness](https://github.com/draveness)) -* hyperkube: the `--make-symlinks` flag, deprecated in v1.14, has been removed. ([#80017](https://github.com/kubernetes/kubernetes/pull/80017), [@Pothulapati](https://github.com/Pothulapati)) -* Node labels `beta.kubernetes.io/metadata-proxy-ready`, `beta.kubernetes.io/metadata-proxy-ready` and `beta.kubernetes.io/kube-proxy-ds-ready` are no longer added on new nodes. ([#79305](https://github.com/kubernetes/kubernetes/pull/79305), [@paivagustavo](https://github.com/paivagustavo)) - * ip-mask-agent addon starts to use the label `node.kubernetes.io/masq-agent-ds-ready` instead of `beta.kubernetes.io/masq-agent-ds-ready` as its node selector. - * kube-proxy addon starts to use the label `node.kubernetes.io/kube-proxy-ds-ready` instead of `beta.kubernetes.io/kube-proxy-ds-ready` as its node selector. - * metadata-proxy addon starts to use the label `cloud.google.com/metadata-proxy-ready` instead of `beta.kubernetes.io/metadata-proxy-ready` as its node selector. - * Kubelet removes the ability to set `kubernetes.io` or `k8s.io` labels via --node-labels other than the [specifically allowed labels/prefixes](https://github.com/kubernetes/enhancements/blob/master/keps/sig-auth/0000-20170814-bounding-self-labeling-kubelets.md#proposal). -* The following APIs are no longer served by default: ([#70672](https://github.com/kubernetes/kubernetes/pull/70672), [@liggitt](https://github.com/liggitt)) - * All resources under `apps/v1beta1` and `apps/v1beta2` - use `apps/v1` instead - * `daemonsets`, `deployments`, `replicasets` resources under `extensions/v1beta1` - use `apps/v1` instead - * `networkpolicies` resources under `extensions/v1beta1` - use `networking.k8s.io/v1` instead - * `podsecuritypolicies` resources under `extensions/v1beta1` - use `policy/v1beta1` instead - * Serving these resources can be temporarily re-enabled using the `--runtime-config` apiserver flag. - * `apps/v1beta1=true` - * `apps/v1beta2=true` - * `extensions/v1beta1/daemonsets=true,extensions/v1beta1/deployments=true,extensions/v1beta1/replicasets=true,extensions/v1beta1/networkpolicies=true,extensions/v1beta1/podsecuritypolicies=true` - * The ability to serve these resources will be completely removed in v1.18. -* ACTION REQUIRED: Removed deprecated flag `--resource-container` from kube-proxy. ([#78294](https://github.com/kubernetes/kubernetes/pull/78294), [@vllry](https://github.com/vllry)) - * The deprecated `--resource-container` flag has been removed from kube-proxy, and specifying it will now cause an error. The behavior is now as if you specified `--resource-container=""`. If you previously specified a non-empty `--resource-container`, you can no longer do so as of kubernetes 1.16. - -### Other notable changes - -* When HPAScaleToZero feature gate is enabled HPA supports scaling to zero pods based on object or external metrics. HPA remains active as long as at least one metric value available. ([#74526](https://github.com/kubernetes/kubernetes/pull/74526), [@DXist](https://github.com/DXist)) - * To downgrade the cluster to version that does not support scale-to-zero feature: - * 1. make sure there are no hpa objects with minReplicas=0. Here is a oneliner to update it to 1: - * $ kubectl get hpa --all-namespaces --no-headers=true | awk '{if($6==0) printf "kubectl patch hpa/%s --namespace=%s -p \"{\\"spec\\":{\\"minReplicas\\":1}}\" -", $2, $1 }' | sh - * 2. disable HPAScaleToZero feature gate -* Add support for writing out of tree custom scheduler plugins. ([#78162](https://github.com/kubernetes/kubernetes/pull/78162), [@hex108](https://github.com/hex108)) -* Remove deprecated github.com/kardianos/osext dependency ([#80142](https://github.com/kubernetes/kubernetes/pull/80142), [@loqutus](https://github.com/loqutus)) -* Add Bind extension point to the scheduling framework. ([#79313](https://github.com/kubernetes/kubernetes/pull/79313), [@chenchun](https://github.com/chenchun)) -* On Windows systems, %USERPROFILE% is now preferred over %HOMEDRIVE%\%HOMEPATH% as the home folder if %HOMEDRIVE%\%HOMEPATH% does not contain a .kube* Add --kubernetes-version to "kubeadm init phase certs ca" and "kubeadm init phase kubeconfig" ([#80115](https://github.com/kubernetes/kubernetes/pull/80115), [@gyuho](https://github.com/gyuho)) -* kubeadm ClusterConfiguration now supports featureGates: IPv6DualStack: true ([#80145](https://github.com/kubernetes/kubernetes/pull/80145), [@Arvinderpal](https://github.com/Arvinderpal)) -* Fix a bug that ListOptions.AllowWatchBookmarks wasn't propagating correctly in kube-apiserver. ([#80157](https://github.com/kubernetes/kubernetes/pull/80157), [@wojtek-t](https://github.com/wojtek-t)) -* Bugfix: csi plugin supporting raw block that does not need attach mounted failed ([#79920](https://github.com/kubernetes/kubernetes/pull/79920), [@cwdsuzhou](https://github.com/cwdsuzhou)) -* Increase log level for graceful termination to v=5 ([#80100](https://github.com/kubernetes/kubernetes/pull/80100), [@andrewsykim](https://github.com/andrewsykim)) -* kubeadm: support fetching configuration from the original cluster for 'upgrade diff' ([#80025](https://github.com/kubernetes/kubernetes/pull/80025), [@SataQiu](https://github.com/SataQiu)) -* The sample-apiserver gains support for OpenAPI v2 spec serving at `/openapi/v2`. ([#79843](https://github.com/kubernetes/kubernetes/pull/79843), [@sttts](https://github.com/sttts)) - * The `generate-internal-groups.sh` script in k8s.io/code-generator will generate OpenAPI definitions by default in `pkg/generated/openapi`. Additional API group dependencies can be added via `OPENAPI_EXTRA_PACKAGES=/ /...`. -* Cinder and ScaleIO volume providers have been deprecated and will be removed in a future release. ([#80099](https://github.com/kubernetes/kubernetes/pull/80099), [@dims](https://github.com/dims)) -* kubelet's --containerized flag was deprecated in 1.14. This flag is removed in 1.16. ([#80043](https://github.com/kubernetes/kubernetes/pull/80043), [@dims](https://github.com/dims)) -* Optimize EC2 DescribeInstances API calls in aws cloud provider library by querying instance ID instead of EC2 filters when possible ([#78140](https://github.com/kubernetes/kubernetes/pull/78140), [@zhan849](https://github.com/zhan849)) -* etcd migration image no longer supports etcd2 version. ([#80037](https://github.com/kubernetes/kubernetes/pull/80037), [@dims](https://github.com/dims)) -* Promote WatchBookmark feature to beta and enable it by default. ([#79786](https://github.com/kubernetes/kubernetes/pull/79786), [@wojtek-t](https://github.com/wojtek-t)) - * With WatchBookmark feature, clients are able to request watch events with BOOKMARK type. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. -* update to use go 1.12.7 ([#79966](https://github.com/kubernetes/kubernetes/pull/79966), [@tao12345666333](https://github.com/tao12345666333)) -* Add --shutdown-delay-duration to kube-apiserver in order to delay a graceful shutdown. `/healthz` will keep returning success during this time and requests are normally served, but `/readyz` will return faillure immediately. This delay can be used to allow the SDN to update iptables on all nodes and stop sending traffic. ([#74416](https://github.com/kubernetes/kubernetes/pull/74416), [@sttts](https://github.com/sttts)) -* The `MutatingWebhookConfiguration` and `ValidatingWebhookConfiguration` APIs have been promoted to `admissionregistration.k8s.io/v1`: ([#79549](https://github.com/kubernetes/kubernetes/pull/79549), [@liggitt](https://github.com/liggitt)) - * `failurePolicy` default changed from `Ignore` to `Fail` for v1 - * `matchPolicy` default changed from `Exact` to `Equivalent` for v1 - * `timeout` default changed from `30s` to `10s` for v1 - * `sideEffects` default value is removed and the field made required for v1 - * `admissionReviewVersions` default value is removed and the field made required for v1 (supported versions for AdmissionReview are `v1` and `v1beta1`) - * The `name` field for specified webhooks must be unique for `MutatingWebhookConfiguration` and `ValidatingWebhookConfiguration` objects created via `admissionregistration.k8s.io/v1` - * The `admissionregistration.k8s.io/v1beta1` versions of `MutatingWebhookConfiguration` and `ValidatingWebhookConfiguration` are deprecated and will no longer be served in v1.19. -* The garbage collector and generic object quota controller have been updated to use the metadata client which improves memory ([#78742](https://github.com/kubernetes/kubernetes/pull/78742), [@smarterclayton](https://github.com/smarterclayton)) - * and CPU usage of the Kube controller manager. -* SubjectAccessReview requests sent for RBAC escalation, impersonation, and pod security policy authorization checks now populate the version attribute. ([#80007](https://github.com/kubernetes/kubernetes/pull/80007), [@liggitt](https://github.com/liggitt)) -* na ([#79892](https://github.com/kubernetes/kubernetes/pull/79892), [@mikebrow](https://github.com/mikebrow)) -* Use O_CLOEXEC to ensure file descriptors do not leak to subprocesses. ([#74691](https://github.com/kubernetes/kubernetes/pull/74691), [@cpuguy83](https://github.com/cpuguy83)) -* The namespace controller has been updated to use the metadata client which improves memory ([#78744](https://github.com/kubernetes/kubernetes/pull/78744), [@smarterclayton](https://github.com/smarterclayton)) - * and CPU usage of the Kube controller manager. -* NONE ([#79933](https://github.com/kubernetes/kubernetes/pull/79933), [@mm4tt](https://github.com/mm4tt)) -* add `kubectl replace --raw` and `kubectl delete --raw` to have parity with create and get ([#79724](https://github.com/kubernetes/kubernetes/pull/79724), [@deads2k](https://github.com/deads2k)) -* E2E tests no longer add command line flags directly to the command line, test suites that want that need to be updated if they don't use HandleFlags ([#75593](https://github.com/kubernetes/kubernetes/pull/75593), [@pohly](https://github.com/pohly)) - * loading a -viper-config=e2e.yaml with suffix (introduced in 1.13) works again and now has a regression test -* Kubernetes now supports transparent compression of API responses. Clients that send `Accept-Encoding: gzip` will now receive a GZIP compressed response body if the API call was larger than 128KB. Go clients automatically request gzip-encoding by default and should see reduced transfer times for very large API requests. Clients in other languages may need to make changes to benefit from compression. ([#77449](https://github.com/kubernetes/kubernetes/pull/77449), [@smarterclayton](https://github.com/smarterclayton)) -* Resolves an issue serving aggregated APIs backed by services that respond to requests to `/` with non-2xx HTTP responses ([#79895](https://github.com/kubernetes/kubernetes/pull/79895), [@deads2k](https://github.com/deads2k)) -* updated fluentd to 1.5.1, elasticsearchs & kibana to 7.1.1 ([#79014](https://github.com/kubernetes/kubernetes/pull/79014), [@monotek](https://github.com/monotek)) -* kubeadm: implement support for concurrent add/remove of stacked etcd members ([#79677](https://github.com/kubernetes/kubernetes/pull/79677), [@neolit123](https://github.com/neolit123)) -* Added a metric 'apiserver_watch_events_total' that can be used to understand the number of watch events in the system. ([#78732](https://github.com/kubernetes/kubernetes/pull/78732), [@mborsz](https://github.com/mborsz)) -* KMS Providers will install a healthz check for the status of kms-pluign in kube-apiservers' encryption config. ([#78540](https://github.com/kubernetes/kubernetes/pull/78540), [@immutableT](https://github.com/immutableT)) -* Fixes a bug in openapi published for custom resources using x-kubernetes-preserve-unknown-fields extensions, so that kubectl will allow sending unknown fields for that portion of the object. ([#79636](https://github.com/kubernetes/kubernetes/pull/79636), [@liggitt](https://github.com/liggitt)) -* A new client `k8s.io/client-go/metadata.Client` has been added for accessing objects generically. This client makes it easier to retrieve only the metadata (the `metadata` sub-section) from resources on the cluster in an efficient manner for use cases that deal with objects generically, like the garbage collector, quota, or the namespace controller. The client asks the server to return a `meta.k8s.io/v1 PartialObjectMetadata` object for list, get, delete, watch, and patch operations on both normal APIs and custom resources which can be encoded in protobuf for additional work. If the server does not yet support this API the client will gracefully fall back to JSON and transform the response objects into PartialObjectMetadata. ([#77819](https://github.com/kubernetes/kubernetes/pull/77819), [@smarterclayton](https://github.com/smarterclayton)) -* changes timeout value in csi plugin from 15s to 2min which fixes the timeout issue ([#79529](https://github.com/kubernetes/kubernetes/pull/79529), [@andyzhangx](https://github.com/andyzhangx)) -* kubeadm: provide "--control-plane-endpoint" flag for `controlPlaneEndpoint` ([#79270](https://github.com/kubernetes/kubernetes/pull/79270), [@SataQiu](https://github.com/SataQiu)) -* Fixes invalid "time stamp is the future" error when kubectl cp-ing a file ([#73982](https://github.com/kubernetes/kubernetes/pull/73982), [@tanshanshan](https://github.com/tanshanshan)) -* Kubelet should now more reliably report the same primary node IP even if the set of node IPs reported by the CloudProvider changes. ([#79391](https://github.com/kubernetes/kubernetes/pull/79391), [@danwinship](https://github.com/danwinship)) -* To configure controller manager to use ipv6dual stack: ([#73977](https://github.com/kubernetes/kubernetes/pull/73977), [@khenidak](https://github.com/khenidak)) - * use --cluster-cidr=",". - * Notes: - - * 1. Only the first two cidrs are used (soft limits for Alpha, might be lifted later on). - * 2. Only the "RangeAllocator" (default) is allowed as a value for --cidr-allocator-type . Cloud allocators are not compatible with ipv6dualstack -* When using the conformance test image, a new environment variable E2E_USE_GO_RUNNER will cause the tests to be run with the new Golang-based test runner rather than the current bash wrapper. ([#79284](https://github.com/kubernetes/kubernetes/pull/79284), [@johnSchnake](https://github.com/johnSchnake)) -* kubeadm: prevent PSP blocking of upgrade image prepull by using a non-root user ([#77792](https://github.com/kubernetes/kubernetes/pull/77792), [@neolit123](https://github.com/neolit123)) -* kubelet now accepts a --cni-cache-dir option, which defaults to /var/lib/cni/cache, where CNI stores cache files. ([#78908](https://github.com/kubernetes/kubernetes/pull/78908), [@dcbw](https://github.com/dcbw)) -* Update Azure API versions (containerregistry --> 2018-09-01, network --> 2018-08-01) ([#79583](https://github.com/kubernetes/kubernetes/pull/79583), [@justaugustus](https://github.com/justaugustus)) -* Fix possible fd leak and closing of dirs in doSafeMakeDir ([#79534](https://github.com/kubernetes/kubernetes/pull/79534), [@odinuge](https://github.com/odinuge)) -* kubeadm: fix the bug that "--cri-socket" flag does not work for `kubeadm reset` ([#79498](https://github.com/kubernetes/kubernetes/pull/79498), [@SataQiu](https://github.com/SataQiu)) -* kubectl logs --selector will support --tail=-1. ([#74943](https://github.com/kubernetes/kubernetes/pull/74943), [@JishanXing](https://github.com/JishanXing)) -* Introduce a new admission controller for RuntimeClass. Initially, RuntimeClass will be used to apply the pod overhead associated with a given RuntimeClass to the Pod.Spec if a corresponding RuntimeClassName is specified. ([#78484](https://github.com/kubernetes/kubernetes/pull/78484), [@egernst](https://github.com/egernst)) - * PodOverhead is an alpha feature as of Kubernetes 1.16. -* Fix kubelet errors in AArch64 with huge page sizes smaller than 1MiB ([#78495](https://github.com/kubernetes/kubernetes/pull/78495), [@odinuge](https://github.com/odinuge)) -* The alpha `metadata.initializers` field, deprecated in 1.13, has been removed. ([#79504](https://github.com/kubernetes/kubernetes/pull/79504), [@yue9944882](https://github.com/yue9944882)) -* Fix duplicate error messages in cli commands ([#79493](https://github.com/kubernetes/kubernetes/pull/79493), [@odinuge](https://github.com/odinuge)) -* Default resourceGroup should be used when the value of annotation azure-load-balancer-resource-group is an empty string. ([#79514](https://github.com/kubernetes/kubernetes/pull/79514), [@feiskyer](https://github.com/feiskyer)) -* Fixes output of `kubectl get --watch-only` when watching a single resource ([#79345](https://github.com/kubernetes/kubernetes/pull/79345), [@liggitt](https://github.com/liggitt)) -* RateLimiter add a context-aware method, fix client-go request goruntine backlog in async timeout scene. ([#79375](https://github.com/kubernetes/kubernetes/pull/79375), [@answer1991](https://github.com/answer1991)) -* Fix a bug where kubelet would not retry pod sandbox creation when the restart policy of the pod is Never ([#79451](https://github.com/kubernetes/kubernetes/pull/79451), [@yujuhong](https://github.com/yujuhong)) -* Fix CRD validation error on 'items' field. ([#76124](https://github.com/kubernetes/kubernetes/pull/76124), [@tossmilestone](https://github.com/tossmilestone)) -* The CRD handler now properly re-creates stale CR storage to reflect CRD update. ([#79114](https://github.com/kubernetes/kubernetes/pull/79114), [@roycaihw](https://github.com/roycaihw)) -* Integrated volume limits for in-tree and CSI volumes into one scheduler predicate. ([#77595](https://github.com/kubernetes/kubernetes/pull/77595), [@bertinatto](https://github.com/bertinatto)) -* Fix a bug in server printer that could cause kube-apiserver to panic. ([#79349](https://github.com/kubernetes/kubernetes/pull/79349), [@roycaihw](https://github.com/roycaihw)) -* Mounts /home/kubernetes/bin/nvidia/vulkan/icd.d on the host to /etc/vulkan/icd.d inside containers requesting GPU. ([#78868](https://github.com/kubernetes/kubernetes/pull/78868), [@chardch](https://github.com/chardch)) -* Remove CSIPersistentVolume feature gates ([#79309](https://github.com/kubernetes/kubernetes/pull/79309), [@draveness](https://github.com/draveness)) -* Init container resource requests now impact pod QoS class ([#75223](https://github.com/kubernetes/kubernetes/pull/75223), [@sjenning](https://github.com/sjenning)) -* Correct the maximum allowed insecure bind port for the kube-scheduler and kube-apiserver to 65535. ([#79346](https://github.com/kubernetes/kubernetes/pull/79346), [@ncdc](https://github.com/ncdc)) -* Fix remove the etcd member from the cluster during a kubeadm reset. ([#79326](https://github.com/kubernetes/kubernetes/pull/79326), [@bradbeam](https://github.com/bradbeam)) -* Remove KubeletPluginsWatcher feature gates ([#79310](https://github.com/kubernetes/kubernetes/pull/79310), [@draveness](https://github.com/draveness)) -* Remove HugePages, VolumeScheduling, CustomPodDNS and PodReadinessGates feature flags ([#79307](https://github.com/kubernetes/kubernetes/pull/79307), [@draveness](https://github.com/draveness)) -* The GA PodPriority feature gate is now on by default and cannot be disabled. The feature gate will be removed in v1.18. ([#79262](https://github.com/kubernetes/kubernetes/pull/79262), [@draveness](https://github.com/draveness)) -* Remove pids cgroup controller requirement when related feature gates are disabled ([#79073](https://github.com/kubernetes/kubernetes/pull/79073), [@rafatio](https://github.com/rafatio)) -* Add Bind extension point of the scheduling framework ([#78513](https://github.com/kubernetes/kubernetes/pull/78513), [@chenchun](https://github.com/chenchun)) -* if targetPort is changed that will process by service controller ([#77712](https://github.com/kubernetes/kubernetes/pull/77712), [@Sn0rt](https://github.com/Sn0rt)) -* update to use go 1.12.6 ([#78958](https://github.com/kubernetes/kubernetes/pull/78958), [@tao12345666333](https://github.com/tao12345666333)) -* kubeadm: fix a potential panic if kubeadm discovers an invalid, existing kubeconfig file ([#79165](https://github.com/kubernetes/kubernetes/pull/79165), [@neolit123](https://github.com/neolit123)) -* fix kubelet fail to delete orphaned pod directory when the kubelet's pods directory (default is "/var/lib/kubelet/pods") symbolically links to another disk device's directory ([#79094](https://github.com/kubernetes/kubernetes/pull/79094), [@gaorong](https://github.com/gaorong)) -* Addition of Overhead field to the PodSpec and RuntimeClass types as part of the Pod Overhead KEP ([#76968](https://github.com/kubernetes/kubernetes/pull/76968), [@egernst](https://github.com/egernst)) -* fix pod list return value of framework.WaitForPodsWithLabelRunningReady ([#78687](https://github.com/kubernetes/kubernetes/pull/78687), [@pohly](https://github.com/pohly)) -* The behavior of the default handler for 404 requests fro the GCE Ingress load balancer is slightly modified in the sense that it now exports metrics using prometheus. The metrics exported include: ([#79106](https://github.com/kubernetes/kubernetes/pull/79106), [@vbannai](https://github.com/vbannai)) - * - http_404_request_total (the number of 404 requests handled) - * - http_404_request_duration_ms (the amount of time the server took to respond in ms) - * Also includes percentile groupings. The directory for the default 404 handler includes instructions on how to enable prometheus for monitoring and setting alerts. -* The kube-apiserver has improved behavior for both startup and shutdown sequences and also now exposes `/readyz` for readiness checking. Readyz includes all existing healthz checks but also adds a shutdown check. When a cluster admin initiates a shutdown, the kube-apiserver will try to process existing requests (for the duration of request timeout) before killing the apiserver process. ([#78458](https://github.com/kubernetes/kubernetes/pull/78458), [@logicalhan](https://github.com/logicalhan)) - * The apiserver also now takes an optional flag "--maximum-startup-sequence-duration". This allows you to explicitly define an upper bound on the apiserver startup sequences before healthz begins to fail. By keeping the kubelet liveness initial delay short, this can enable quick kubelet recovery as soon as we have a boot sequence which has not completed in our expected time frame, despite lack of completion from longer boot sequences (like RBAC). Kube-apiserver behavior when the value of this flag is zero is backwards compatible (this is as the defaulted value of the flag). -* fix: make azure disk URI as case insensitive ([#79020](https://github.com/kubernetes/kubernetes/pull/79020), [@andyzhangx](https://github.com/andyzhangx)) -* Enable cadvisor ProcessMetrics collecting. ([#79002](https://github.com/kubernetes/kubernetes/pull/79002), [@jiayingz](https://github.com/jiayingz)) -* Fixes a bug where `kubectl set config` hangs and uses 100% CPU on some invalid property names ([#79000](https://github.com/kubernetes/kubernetes/pull/79000), [@pswica](https://github.com/pswica)) -* Fix a string comparison bug in IPVS graceful termination where UDP real servers are not deleted. ([#78999](https://github.com/kubernetes/kubernetes/pull/78999), [@andrewsykim](https://github.com/andrewsykim)) -* Reflector watchHandler Warning log 'The resourceVersion for the provided watch is too old.' is now logged as Info. ([#78991](https://github.com/kubernetes/kubernetes/pull/78991), [@sallyom](https://github.com/sallyom)) -* fix a bug that pods not be deleted from unmatched nodes by daemon controller ([#78974](https://github.com/kubernetes/kubernetes/pull/78974), [@DaiHao](https://github.com/DaiHao)) -* NONE ([#78821](https://github.com/kubernetes/kubernetes/pull/78821), [@jhedev](https://github.com/jhedev)) -* Volume expansion is enabled in the default GCE storageclass ([#78672](https://github.com/kubernetes/kubernetes/pull/78672), [@msau42](https://github.com/msau42)) -* kubeadm: use the service-cidr flag to pass the desired service CIDR to the kube-controller-manager via its service-cluster-ip-range flag. ([#78625](https://github.com/kubernetes/kubernetes/pull/78625), [@Arvinderpal](https://github.com/Arvinderpal)) -* kubeadm: introduce deterministic ordering for the certificates generation in the phase command "kubeadm init phase certs" . ([#78556](https://github.com/kubernetes/kubernetes/pull/78556), [@neolit123](https://github.com/neolit123)) -* Add Pre-filter extension point to the scheduling framework. ([#78005](https://github.com/kubernetes/kubernetes/pull/78005), [@ahg-g](https://github.com/ahg-g)) -* fix pod stuck issue due to corrupt mnt point in flexvol plugin, call Unmount if PathExists returns any error ([#75234](https://github.com/kubernetes/kubernetes/pull/75234), [@andyzhangx](https://github.com/andyzhangx)) \ No newline at end of file diff --git a/CHANGELOG/CHANGELOG-1.17.md b/CHANGELOG/CHANGELOG-1.17.md deleted file mode 100644 index 177f719a20c74..0000000000000 --- a/CHANGELOG/CHANGELOG-1.17.md +++ /dev/null @@ -1,2610 +0,0 @@ - - -- [v1.17.11](#v11711) - - [Downloads for v1.17.11](#downloads-for-v11711) - - [Source Code](#source-code) - - [Client binaries](#client-binaries) - - [Server binaries](#server-binaries) - - [Node binaries](#node-binaries) - - [Changelog since v1.17.10](#changelog-since-v11710) - - [Changes by Kind](#changes-by-kind) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake) - - [Dependencies](#dependencies) - - [Added](#added) - - [Changed](#changed) - - [Removed](#removed) -- [v1.17.10](#v11710) - - [Downloads for v1.17.10](#downloads-for-v11710) - - [Changelog since v1.17.9](#changelog-since-v1179) - - [Changes by Kind](#changes-by-kind) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake) - - [Dependencies](#dependencies) - - [Added](#added) - - [Changed](#changed) - - [Removed](#removed) -- [v1.17.9](#v1179) - - [Downloads for v1.17.9](#downloads-for-v1179) - - [Source Code](#source-code-1) - - [Client binaries](#client-binaries-1) - - [Server binaries](#server-binaries-1) - - [Node binaries](#node-binaries-1) - - [Changelog since v1.17.8](#changelog-since-v1178) - - [Urgent Upgrade Notes](#urgent-upgrade-notes) - - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade) - - [Changes by Kind](#changes-by-kind-1) - - [Bug or Regression](#bug-or-regression) - - [Dependencies](#dependencies-1) - - [Added](#added-1) - - [Changed](#changed-1) - - [Removed](#removed-1) -- [v1.17.8](#v1178) - - [Downloads for v1.17.8](#downloads-for-v1178) - - [Source Code](#source-code-2) - - [Client binaries](#client-binaries-2) - - [Server binaries](#server-binaries-2) - - [Node binaries](#node-binaries-2) - - [Changelog since v1.17.7](#changelog-since-v1177) - - [Changes by Kind](#changes-by-kind-2) - - [API Change](#api-change) - - [Bug or Regression](#bug-or-regression-1) - - [Dependencies](#dependencies-2) - - [Added](#added-2) - - [Changed](#changed-2) - - [Removed](#removed-2) -- [v1.17.8-rc.1](#v1178-rc1) - - [Downloads for v1.17.8-rc.1](#downloads-for-v1178-rc1) - - [Source Code](#source-code-3) - - [Client binaries](#client-binaries-3) - - [Server binaries](#server-binaries-3) - - [Node binaries](#node-binaries-3) - - [Changelog since v1.17.7](#changelog-since-v1177-1) - - [Changes by Kind](#changes-by-kind-3) - - [API Change](#api-change-1) - - [Bug or Regression](#bug-or-regression-2) - - [Dependencies](#dependencies-3) - - [Added](#added-3) - - [Changed](#changed-3) - - [Removed](#removed-3) -- [v1.17.7](#v1177) - - [Downloads for v1.17.7](#downloads-for-v1177) - - [Source Code](#source-code-4) - - [Client binaries](#client-binaries-4) - - [Server binaries](#server-binaries-4) - - [Node binaries](#node-binaries-4) - - [Changelog since v1.17.6](#changelog-since-v1176) - - [Changes by Kind](#changes-by-kind-4) - - [API Change](#api-change-2) - - [Feature](#feature) - - [Bug or Regression](#bug-or-regression-3) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake-1) - - [Dependencies](#dependencies-4) - - [Added](#added-4) - - [Changed](#changed-4) - - [Removed](#removed-4) -- [v1.17.6](#v1176) - - [Downloads for v1.17.6](#downloads-for-v1176) - - [Source Code](#source-code-5) - - [Client binaries](#client-binaries-5) - - [Server binaries](#server-binaries-5) - - [Node binaries](#node-binaries-5) - - [Changelog since v1.17.5](#changelog-since-v1175) - - [Changes by Kind](#changes-by-kind-5) - - [API Change](#api-change-3) - - [Bug or Regression](#bug-or-regression-4) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake-2) - - [Dependencies](#dependencies-5) - - [Added](#added-5) - - [Changed](#changed-5) - - [Removed](#removed-5) -- [v1.17.5](#v1175) - - [Downloads for v1.17.5](#downloads-for-v1175) - - [Client Binaries](#client-binaries-6) - - [Server Binaries](#server-binaries-6) - - [Node Binaries](#node-binaries-6) - - [Changelog since v1.17.4](#changelog-since-v1174) - - [Changes by Kind](#changes-by-kind-6) - - [Feature](#feature-1) - - [Bug or Regression](#bug-or-regression-5) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake-3) -- [v1.17.4](#v1174) - - [Downloads for v1.17.4](#downloads-for-v1174) - - [Client Binaries](#client-binaries-7) - - [Server Binaries](#server-binaries-7) - - [Node Binaries](#node-binaries-7) - - [Changelog since v1.17.3](#changelog-since-v1173) - - [Changes by Kind](#changes-by-kind-7) - - [API Change](#api-change-4) - - [Other (Bug, Cleanup or Flake)](#other-bug-cleanup-or-flake) -- [v1.17.3](#v1173) - - [Downloads for v1.17.3](#downloads-for-v1173) - - [Client Binaries](#client-binaries-8) - - [Server Binaries](#server-binaries-8) - - [Node Binaries](#node-binaries-8) - - [Changelog since v1.17.2](#changelog-since-v1172) - - [Changes by Kind](#changes-by-kind-8) - - [Other (Bug, Cleanup or Flake)](#other-bug-cleanup-or-flake-1) -- [v1.17.2](#v1172) - - [Downloads for v1.17.2](#downloads-for-v1172) - - [Client Binaries](#client-binaries-9) - - [Server Binaries](#server-binaries-9) - - [Node Binaries](#node-binaries-9) - - [Changelog since v1.17.1](#changelog-since-v1171) -- [v1.17.1](#v1171) - - [Downloads for v1.17.1](#downloads-for-v1171) - - [Client Binaries](#client-binaries-10) - - [Server Binaries](#server-binaries-10) - - [Node Binaries](#node-binaries-10) - - [Changelog since v1.17.0](#changelog-since-v1170) - - [Other notable changes](#other-notable-changes) -- [v1.17.0](#v1170) - - [Downloads for v1.17.0](#downloads-for-v1170) - - [Client Binaries](#client-binaries-11) - - [Server Binaries](#server-binaries-11) - - [Node Binaries](#node-binaries-11) -- [Changes](#changes) - - [What’s New (Major Themes)](#what’s-new-major-themes) - - [Cloud Provider Labels reach General Availability](#cloud-provider-labels-reach-general-availability) - - [Volume Snapshot Moves to Beta](#volume-snapshot-moves-to-beta) - - [CSI Migration Beta](#csi-migration-beta) - - [Known Issues](#known-issues) - - [Urgent Upgrade Notes](#urgent-upgrade-notes-1) - - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-1) - - [Cluster Lifecycle](#cluster-lifecycle) - - [Network](#network) - - [Scheduling](#scheduling) - - [Storage](#storage) - - [Windows](#windows) - - [Deprecations and Removals](#deprecations-and-removals) - - [Metrics Changes](#metrics-changes) - - [Added metrics](#added-metrics) - - [Deprecated/changed metrics](#deprecated/changed-metrics) - - [Notable Features](#notable-features) - - [Stable](#stable) - - [Beta](#beta) - - [CLI Improvements](#cli-improvements) - - [API Changes](#api-changes) - - [Other notable changes](#other-notable-changes-1) - - [API Machinery](#api-machinery) - - [Apps](#apps) - - [Auth](#auth) - - [CLI](#cli) - - [Cloud Provider](#cloud-provider) - - [Cluster Lifecycle](#cluster-lifecycle-1) - - [Instrumentation](#instrumentation) - - [Network](#network-1) - - [Node](#node) - - [Release](#release) - - [Scheduling](#scheduling-1) - - [Storage](#storage-1) - - [Windows](#windows-1) - - [Dependencies](#dependencies-6) - - [Detailed go Dependency Changes](#detailed-go-dependency-changes) - - [Added](#added-6) - - [Changed](#changed-6) - - [Removed](#removed-6) -- [v1.17.0-rc.2](#v1170-rc2) - - [Downloads for v1.17.0-rc.2](#downloads-for-v1170-rc2) - - [Client Binaries](#client-binaries-12) - - [Server Binaries](#server-binaries-12) - - [Node Binaries](#node-binaries-12) - - [Changelog since v1.17.0-rc.1](#changelog-since-v1170-rc1) - - [Other notable changes](#other-notable-changes-2) -- [v1.17.0-rc.1](#v1170-rc1) - - [Downloads for v1.17.0-rc.1](#downloads-for-v1170-rc1) - - [Client Binaries](#client-binaries-13) - - [Server Binaries](#server-binaries-13) - - [Node Binaries](#node-binaries-13) - - [Changelog since v1.17.0-beta.2](#changelog-since-v1170-beta2) - - [Other notable changes](#other-notable-changes-3) -- [v1.17.0-beta.2](#v1170-beta2) - - [Downloads for v1.17.0-beta.2](#downloads-for-v1170-beta2) - - [Client Binaries](#client-binaries-14) - - [Server Binaries](#server-binaries-14) - - [Node Binaries](#node-binaries-14) - - [Changelog since v1.17.0-beta.1](#changelog-since-v1170-beta1) - - [Action Required](#action-required) - - [Other notable changes](#other-notable-changes-4) -- [v1.17.0-beta.1](#v1170-beta1) - - [Downloads for v1.17.0-beta.1](#downloads-for-v1170-beta1) - - [Client Binaries](#client-binaries-15) - - [Server Binaries](#server-binaries-15) - - [Node Binaries](#node-binaries-15) - - [Changelog since v1.17.0-alpha.3](#changelog-since-v1170-alpha3) - - [Action Required](#action-required-1) - - [Other notable changes](#other-notable-changes-5) -- [v1.17.0-alpha.3](#v1170-alpha3) - - [Downloads for v1.17.0-alpha.3](#downloads-for-v1170-alpha3) - - [Client Binaries](#client-binaries-16) - - [Server Binaries](#server-binaries-16) - - [Node Binaries](#node-binaries-16) - - [Changelog since v1.17.0-alpha.2](#changelog-since-v1170-alpha2) - - [Action Required](#action-required-2) - - [Other notable changes](#other-notable-changes-6) -- [v1.17.0-alpha.2](#v1170-alpha2) - - [Downloads for v1.17.0-alpha.2](#downloads-for-v1170-alpha2) - - [Client Binaries](#client-binaries-17) - - [Server Binaries](#server-binaries-17) - - [Node Binaries](#node-binaries-17) - - [Changelog since v1.17.0-alpha.1](#changelog-since-v1170-alpha1) - - [Action Required](#action-required-3) - - [Other notable changes](#other-notable-changes-7) -- [v1.17.0-alpha.1](#v1170-alpha1) - - [Downloads for v1.17.0-alpha.1](#downloads-for-v1170-alpha1) - - [Client Binaries](#client-binaries-18) - - [Server Binaries](#server-binaries-18) - - [Node Binaries](#node-binaries-18) - - [Changelog since v1.16.0](#changelog-since-v1160) - - [Action Required](#action-required-4) - - [Other notable changes](#other-notable-changes-8) - - - -# v1.17.11 - - -## Downloads for v1.17.11 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes.tar.gz) | c257902ffc2c1f9f72a7693f84ab77c3f044f154e94bf3d48ebfa807fa8089c8caa9e874f842c8050d260f68b06125446dbb870b87776f5d758a203af23d6dc7 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-src.tar.gz) | 98fc4ae961ad30a57ded51cb387a393d0c981eb2bb0e9ff6f8ad9b0461372ab50cf2268cad50457fc0e7b5b659efff1c7b468ed75287446247e21bc35780417a - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-client-darwin-386.tar.gz) | 9dd0f75d90659826f648a1fdf8664f1c96760b7a53022e803df403c3da69b7db6039918638f2d02baa20f30a68bd771d7de7da9024a6533d0f23a0ce9e308af3 -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-client-darwin-amd64.tar.gz) | c12c1eda25b6d4a2744489e391277eb7a5b8d0ef8b14b220118ef3890fd0ade4f97d99bbfc9cc4362a9082c9049ba26073c1ac4d91ab50953edec13d7702ad6b -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-client-linux-386.tar.gz) | 17753de2bb354cf211918d6daaa8592aeac04dc431b9b682fd023098ae90da9d63676a704fc7aed3634bbb091a1da8b8808e67880e0821d6b0f635994d97e8aa -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-client-linux-amd64.tar.gz) | 2f98d43173a8b5f670f6d579d954da97b17ba36f2966fcc52e661cca63338f41a9beac69924af58d0f81801d2e48eec539faee863205f4841b0f3e3976f9f6e8 -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-client-linux-arm.tar.gz) | 0a15261c5a8264e42d5f1710adac4ce016de895aac1b4221288dcbcbee0bb32aff493f3e762fd2ab789b761c19246b604b8326d450417718cb1cca5ed1642835 -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-client-linux-arm64.tar.gz) | 2c127091b645a6f18cf1404aa3e94f0b0c71bb2f8414331768bb1cd5fbe753553cab7c8ccf16fe5dae6e41043fb90e36b7683929680bd621a842892243a29d1b -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-client-linux-ppc64le.tar.gz) | 3a45c717a1452c2a165ff43ae6a75e66066ba8184657afd4c8abe4519ef2fb04e58d93b3b4864b8b3f7e1747b02aeaa77beb402edc5e6ae09a3b7dd9c7ad1302 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-client-linux-s390x.tar.gz) | 8adcca31fa72212d1b3c49debfdb07e0214cd6629b9e0af25458ea710d554035b0de0e52ba8ee98e887afef98e510559a95b1b170961a834096f5b9589db73e8 -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-client-windows-386.tar.gz) | 0a03a18ab8f2d0b166f0935e45c295a539118b369406fa1732f8afde6fd5a2c8cd96a85f7b81e3557ee95e01cea880de03f57f88eb0a0fab4f43215405131eb1 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-client-windows-amd64.tar.gz) | 5c90075eba8ae031edc0c017c015a1c47f178aeed4cf5be53fa347e052fb34be8fcd4cb5f9286f11656c40d5c9badba95ed80b339098854ee183ffd537d7c8a8 - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-server-linux-amd64.tar.gz) | 38f931bcd9e16b0888fd1891d26eecb04f7ff53eba99f4436effcf2bf32db29ed2cc63c4673d27501d8752712e9a0e3719a5cf8a98a85206deb777351e9667bc -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-server-linux-arm.tar.gz) | 7ba11b771667298c330b3147cf1c25060d24cd8a195a6400957d038d1437f8d1605f14a22aebe8df7f3393318a57360b0b02043f6afa3bcd034e37b38c2a8902 -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-server-linux-arm64.tar.gz) | 63fe2bfc55035bec95526bf18ce124c750cc08808732ca9ea15de53db4f378af37f9afdbc85837475869c111d92a39bc436f5649f7fddac5907bc2a49789c851 -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-server-linux-ppc64le.tar.gz) | 370d2ef12f247321427f48793ebd1c9a889cfd43510e1b8aea7b8b9bb4e56cab9eac075466ddb28d5522218222a5931871da2d0f23403986b94dd56ff45c5574 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-server-linux-s390x.tar.gz) | 2e62fc0d42433b7abaadcb481769f52894a754179dc9c51270b8723f0e43633624d724c696cbdd01ba2c4096c449dbc42532e41bd0ac97d5decca6ded29c7fc3 - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-node-linux-amd64.tar.gz) | 749f9dbb569cd7120c26bf05903b8a9d9758324b0d013f60bde6575c5c8330d0f6634ff56c59b365f392ef272f2f1a5aa9c566c0ea0259705fc52890f2025fd1 -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-node-linux-arm.tar.gz) | ac9617906896762010ee0f8a13e135f5da87b612f907800936beb498f78d80f71e02947820e30c364d7b64b4f2c07c8128fe3352143a743fbab8464de6462549 -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-node-linux-arm64.tar.gz) | 299fc1379bcc22a7e59092a7ba9fee1c42ef1dd27586fc85ce303171dac15bba7eea8be02c5d9db999ec4f5f8597882922fbefdf220758f7b0220f9120cfc4c4 -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-node-linux-ppc64le.tar.gz) | e6942158ebfefb0a3176ae38e9a0806769ddb661e7db53f68a2d43f1aa39a9e70af24e76ff3993ea9b640fd2fb50b1ec39b6affe0fbb234f89595d114e0d3441 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-node-linux-s390x.tar.gz) | c0138687e0d8c12a11b986f36257d9202c451040d33d55aedc9b3f6ebaea65fa6583a86cafebe01038699092a14b30c52990cb65fa8849e889c8286a60f18c4b -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.11/kubernetes-node-windows-amd64.tar.gz) | 16783c6f337c7e92a5a32b2b9495f65c3a6b869a36b053d3c86047355f4c83a16d508f1f79e128735053efe574099e319c73db7dae7e9c36a4a0be1992c018fb - -## Changelog since v1.17.10 - -## Changes by Kind - -### Other (Cleanup or Flake) - -- Kubernetes is now built with go1.13.15 ([#93955](https://github.com/kubernetes/kubernetes/pull/93955), [@justaugustus](https://github.com/justaugustus)) [SIG Release and Testing] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -_Nothing has changed._ - -### Removed -_Nothing has changed._ - -# v1.17.10 - - -## Downloads for v1.17.10 - -Release artifacts for 1.18.7 and 1.17.10 are incomplete. __Do not use these releases.__ - -# Changelog since v1.17.9 - -## Changes by Kind - -### Bug or Regression - -- Do not add nodes labeled with kubernetes.azure.com/managed=false to backend pool of load balancer. ([#93034](https://github.com/kubernetes/kubernetes/pull/93034), [@matthias50](https://github.com/matthias50)) [SIG Cloud Provider] -- Fix instance not found issues when an Azure Node is recreated in a short time ([#93316](https://github.com/kubernetes/kubernetes/pull/93316), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix: don't use docker config cache if it's empty ([#92330](https://github.com/kubernetes/kubernetes/pull/92330), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fix: initial delay in mounting azure disk & file ([#93052](https://github.com/kubernetes/kubernetes/pull/93052), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fixed a performance issue applying json patches to deeply nested objects ([#93812](https://github.com/kubernetes/kubernetes/pull/93812), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation] -- Fixes a regression in kube-apiserver causing 500 errors from the `/readyz` endpoint ([#93643](https://github.com/kubernetes/kubernetes/pull/93643), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG API Machinery] -- Terminating a restartPolicy=Never pod no longer has a chance to report the pod succeeded when it actually failed. ([#88440](https://github.com/kubernetes/kubernetes/pull/88440), [@smarterclayton](https://github.com/smarterclayton)) [SIG Node and Testing] - -### Other (Cleanup or Flake) - -- Build: Update Debian base images - - debian-base:v2.1.3 - - debian-iptables:v12.1.2 - - debian-hyperkube-base:v1.1.3 ([#93924](https://github.com/kubernetes/kubernetes/pull/93924), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Cluster Lifecycle and Release] -- Update Golang to v1.13.14 - - Update bazel to 2.2.0 - - Update repo-infra to 0.0.8 (to support go1.14.6 and go1.13.14) - - Includes: - - bazelbuild/bazel-toolchains@3.4.0 - - bazelbuild/rules_go@v0.22.8 ([#93233](https://github.com/kubernetes/kubernetes/pull/93233), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Release and Testing] - -## Dependencies - -### Added -- github.com/jessevdk/go-flags: [v1.4.0](https://github.com/jessevdk/go-flags/tree/v1.4.0) - -### Changed -- github.com/evanphx/json-patch: [v4.2.0+incompatible → 162e562](https://github.com/evanphx/json-patch/compare/v4.2.0...162e562) - -### Removed -_Nothing has changed._ - - - -# v1.17.9 - - -## Downloads for v1.17.9 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes.tar.gz) | c6d71667ec516c150e27f0d81868b90b04f620656c081c85e570f5fa8bb6e1fd70bc305f7e7826a56a7ed4ccbdf061147c69cb39c44e756ca090acc5ee189d67 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-src.tar.gz) | 24dc550d00e8ad57b100f19ae33080079c8d274abea1709cf7f45f807e2f9d59bafe1c6ad0fc3aac9992040680b5478c3e8133975ab1b1ef9fb4118033ca7914 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-client-darwin-386.tar.gz) | ba2ac4b1444edb6b40e1537fa77c11796708b2a068791ee39fc54d64d31f9c2503df4316ef00b464988a3f8b5efd17e37fce889d19fb00bc814ca91e215d8b81 -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-client-darwin-amd64.tar.gz) | bb15d61ef2623d007bbda18571a864b13735a20a303a6250a1cd57e25d53cd81179c669440717884d1911aaa04a0bfbb7789330d4cefcd3f32a8233b0d664384 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-client-linux-386.tar.gz) | 6a121fcacff561b2c3040bd0803d00368743e3c7529597d1b66ea2bcba2f7caeff0ef7fb4bb5f10c83a206c50eece18e227bb2de5175eb3f3cf00b9569b4a762 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-client-linux-amd64.tar.gz) | 57fe9caf9d40e8b3e9e1b58552af1b74bf3cdccb3bd50fb5e51ba95d3e08263dad831724d79f2b99c0d67b03a1e533667422a20ba4159234b3452cdffbb814d4 -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-client-linux-arm.tar.gz) | 2cbfca1133446dff4d8bbf82976ba14345dfea4c2940d841949bb323c2bd338409280da9789d7f872f41903a5bfb9852547dc548e7aff3d21375f7ff3c4b9d2b -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-client-linux-arm64.tar.gz) | 68ab42f2844ed6f9fb9e71945f0ef30468542997a0c4bb6f39776d266fd18f26e14182c642c4a82c39e36c5deff5e9e056ed0ca4b4505f0faaade19401f5d4df -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-client-linux-ppc64le.tar.gz) | baeba57a163248d404f70b83bd2ee2458afec619f5c7ab0da656a96634db4dc841fd86e34a3d849e2847b6f97b15bd3be12f34f03e7296a4b4e9a7c9d4a26049 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-client-linux-s390x.tar.gz) | d4d9c7b152d31b83a49fd4140f88e3014b4571a31b4694fd62ce1e436872cc0227a2192581e7b007f32b0ba397e16611a2dbc29bd2ac7f8da5106b3519ab807d -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-client-windows-386.tar.gz) | b3ebeaf6b83da17f7facd6029af64f4e98512e49a63188eaa59d2d8dc54ec4eb9c78e48eb9635f73fc13bd899269eeb005264402712b617e9607200aee270367 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-client-windows-amd64.tar.gz) | 1ea45f8d99cf1bb69e330b81f476d6cc6d1ac4ccfe7aa56dc7a02b269e2bbb52351c0ee6e06115d2ba0096ec8e151e09dcdb57351f873fd8ce98a5949178e298 - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-server-linux-amd64.tar.gz) | 5b3123e442e64637d086ff154c1338ad7a63ddfe2e738dce11b590bf50f663de2d067ea902aac81ecf15f72bd0455fa8dc1166132d6335901424e7a385b56e66 -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-server-linux-arm.tar.gz) | d8b26e70921113fe94da89ab448aea41b8c7e280abf65be569dc198d2904fc07266ee372d4ca5fe9532666846af46161f2c8ea1f7fb99a31ebbbdf93055d786f -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-server-linux-arm64.tar.gz) | 23dab56cdd5eb320bb28d4b1fbdf452cbd9c18c38fad77796f76e0039d3c390024c543e2a3d2da7a843258bc6e6a47e5f546491ffb06b58f0e5196286f640339 -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-server-linux-ppc64le.tar.gz) | e109727a2bd63edcefa1d25fbe24280db8fd62711edd2ff1d30b748c500d8bb0a7e9f5c10c889a975840b8ee91424c4d3b9ce5d30e8543befdddc368b93f7d20 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-server-linux-s390x.tar.gz) | 7a1757ef6f5f2c5b3c3a3fffea0ee5abc42578331da32decce0581b37cc4a331bdaf15cea4561093a1ddd2a15932edea883cdfa89dff8a82ca93ed0ffbc9bc97 - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-node-linux-amd64.tar.gz) | a8baebd0725d69cde59e5eaad5fbcd9b35911b67539df0d28407f96b8baafc854e7e043af7139c9fc4126bae7bebfe6ca7dfb80180c56399819593d31b96a6d5 -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-node-linux-arm.tar.gz) | 21c5e452391f39203cab2225204b95a7ffd223da31d95998116ed04bd0b60b9c039ef2db57e747342f5615e1c9858a698a54a1ff0666e79f866ee42fa21c8ecd -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-node-linux-arm64.tar.gz) | 329df0d659ab2b0daecbb5a337ecbca496db5dedb81493850eda3b8abeb24b408ff40e2f1b74d23db2fce568dabacec8f5c069625af39ca8154251a7260d2502 -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-node-linux-ppc64le.tar.gz) | 913a93cee4b34613ecb0ecc5560e51bef8a8377f7ff6d07561fb2cc37d794c6b80c516bf3961d17aba35c2735314f086939bb21b7cf4559d8547466a60691d76 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-node-linux-s390x.tar.gz) | 0c388b817c9209ff73d13cf50fea545baf0b6bfd4764d045a08451c725671ef27992cac084636da5161df32fb8aa1359306fe96f96c49250ab03eaf70da1b496 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.9/kubernetes-node-windows-amd64.tar.gz) | 77b6fb8c19c38d5faad7477e4430586fc99e589a668c61043c1e59da551bbe796dc30f2d391dece8fef53516fd2293a634fc96acf82033ce84b9b8c6deb1cf9f - -## Changelog since v1.17.8 - -## Urgent Upgrade Notes - -### (No, really, you MUST read this before you upgrade) - - - CVE-2020-8559 (Medium): Privilege escalation from compromised node to cluster. See https://github.com/kubernetes/kubernetes/issues/92914 for more details. - The API Server will no longer proxy non-101 responses for upgrade requests. This could break proxied backends (such as an extension API server) that respond to upgrade requests with a non-101 response code. ([#92941](https://github.com/kubernetes/kubernetes/pull/92941), [@tallclair](https://github.com/tallclair)) [SIG API Machinery] - -## Changes by Kind - -### Bug or Regression - -- CVE-2020-8557 (Medium): Node-local denial of service via container /etc/hosts file. See https://github.com/kubernetes/kubernetes/issues/93032 for more details. ([#92916](https://github.com/kubernetes/kubernetes/pull/92916), [@joelsmith](https://github.com/joelsmith)) [SIG Node] -- Extend kube-apiserver /readyz with new "informer-sync" check ensuring that internal informers are synced. ([#92644](https://github.com/kubernetes/kubernetes/pull/92644), [@wojtek-t](https://github.com/wojtek-t)) [SIG API Machinery and Testing] -- Fix: GetLabelsForVolume panic issue for azure disk PV ([#92166](https://github.com/kubernetes/kubernetes/pull/92166), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fix: use force detach for azure disk ([#91948](https://github.com/kubernetes/kubernetes/pull/91948), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fixes a problem with 63-second or 1-second connection delays with some VXLAN-based - network plugins which was first widely noticed in 1.16 (though some users saw it - earlier than that, possibly only with specific network plugins). If you were previously - using ethtool to disable checksum offload on your primary network interface, you should - now be able to stop doing that. ([#92035](https://github.com/kubernetes/kubernetes/pull/92035), [@danwinship](https://github.com/danwinship)) [SIG Network and Node] -- Kubeadm: add the deprecated flag --port=0 to kube-controller-manager and kube-scheduler manifests to disable insecure serving. Without this flag the components by default serve (e.g. /metrics) insecurely on the default node interface (controlled by --address). Users that wish to override this behavior and enable insecure serving can pass a custom --port=X via kubeadm's "extraArgs" mechanic for these components. ([#92720](https://github.com/kubernetes/kubernetes/pull/92720), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: during "join", don't re-add an etcd member if it already exists in the cluster. ([#92118](https://github.com/kubernetes/kubernetes/pull/92118), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- hyperkube: Use debian-hyperkube-base@v1.1.1 image - - Includes iproute2 to fix a regression in hyperkube images - when using hyperkube as a kubelet ([#92625](https://github.com/kubernetes/kubernetes/pull/92625), [@justaugustus](https://github.com/justaugustus)) [SIG Cluster Lifecycle, Network and Release] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -_Nothing has changed._ - -### Removed -_Nothing has changed._ - - - -# v1.17.8 - - -## Downloads for v1.17.8 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes.tar.gz) | 8212fb4e823fbae81cd7817a3a7abe5a49503b01163fb6805e40791d0639a1b22ababa14fd1e2c545a1c37f89e1110b58fe2f18e6367ecb17cf84f5657f7e106 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-src.tar.gz) | f4838e9950ccc64f9670ce1349f24667825305d7d8d8fc3a9f5f6cc8c51c4edbb00331d528ebcb29489bc0f3df283c6f4c1ea86647ff9ced992adfb0b5269533 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-client-darwin-386.tar.gz) | 6fb3bb627a18d44bf3738d8c9d2ef8a4a624835c345447b92cfb4032f9f475d86c004f2dc61289539cbe132120f8961786829ebd088b3d7a9feee67a3a30f11f -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-client-darwin-amd64.tar.gz) | 500e9a056a2e9b8a7744e390bedaf233c3809c789d902969e085826a0b38662e08f98df681b87d9b13343bd47bd7a3acafa84cc2c81f3a5a1948c255489e92cd -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-client-linux-386.tar.gz) | 64515e5358fd8b462ecde19dbeca108843ac164026ed76002032f07366d121eb5489a4608b62eb12b759f47222b4ac92c45c43c9f177693cb601bd673db992bf -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-client-linux-amd64.tar.gz) | 87da207547a5fa06836afa7f8fc15af4b8950e4a263367a8eb59eccb2a13bb7f98db2bb5731444fcc5313d80e28d3992579742d8a7ed26c48ae425f16ced449a -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-client-linux-arm.tar.gz) | 7d4151b63589b5271922b1fb350c403c0e4d44465daa6e1931336ce6080f443bc087d4bfaad7f94b5324e9b5d726e22b08734aedad2783bbc50cf01e6ea882a6 -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-client-linux-arm64.tar.gz) | 39c1651217f51c168329d490d2c4fa9f1a572bcf016c4c13228f8ae805c63a527e69a09228846a302a1c9aa4bbdd7de05a07f2c3597bdfcb94fd5959f8d19bd0 -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-client-linux-ppc64le.tar.gz) | c4de90aa7bc7125ad8bad6b940cc8af911cd1e9a7533aec28cf32438c04188da16f6d05673ad5a5a79d2c0bea54fe1d953ee95ff74dddf8b44d4590ba4364f76 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-client-linux-s390x.tar.gz) | 08ec9b6abfb0c0e4874a9ff0d6b43d71ce8bd77f764293c8df755827c811e243d2ba2b589bced1234d1ef1e8da5f74ffa38639246d9b2a0bfb6dc353d5d3421b -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-client-windows-386.tar.gz) | c2edcce0a450b02432af56775eddbf49e0b031e8a9cb94a0c4320a400d2a1353a4c6d986b57c0115642ac27c8438889a7938987badc03ac42e37e5075f9ec8e4 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-client-windows-amd64.tar.gz) | e3c31ebb172d3077cca2d796af020ba5cb90df552a607ef54e80cdd7aa6f50d2b7cd108d80a6f4fdade90c9340a1c50c13d7b11ab91dfcff9add634272f97bc7 - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-server-linux-amd64.tar.gz) | 8872e69c391e36d8ce2d307858108d69cf5d45202f012f8a1a019d3705c3d91a7dd3c08ee0c8f5f022f69fad0cce945ac92f492043ce113cc5367ddefb1ecb5e -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-server-linux-arm.tar.gz) | a0d7086fd78dd5d1e8ad91859b25346b531cde97a9f8916c4dd9ea66aba91d334b1600180795aea8102a76e6e4945dfb3f788e3648db2f98a9f542beb8a2b7f3 -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-server-linux-arm64.tar.gz) | 2cd42e859fd6519370b496da7c0b2b0d9ce47f0f8323f3384c7eca5327cd5a0be75978fcced3012ceff52cfc2e8625c0d8f2ad024cf380e7c1e6fb424ac39164 -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-server-linux-ppc64le.tar.gz) | 97edd2f2e88f77e98bc4e30e8bcd044a16aaa96a486178806e7b9d3fe231310b183c0dc6b9e66ca86f17caede16369f0a1ca91c31755011170f88d5b12b25f9b -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-server-linux-s390x.tar.gz) | a33c746865216dfee05e0718e4b91708c455e18b6b611cfecca1f4efc4f7101cfeeda1e31f84ad116ca3b9392f1c6a8bcae626d69e6726f6427696d6423dcfa1 - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-node-linux-amd64.tar.gz) | 16ae1e32bb0f7b6f8809ab5c20ca7c16cfcc9780476e08f18b4af36f3cb3d6004aecb2833b026cb8b08378b2b499a566d6c72b411df5db9ee6f1cbfd3a750374 -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-node-linux-arm.tar.gz) | 0e4dbb87bb19422faaefd213baac1e962feeec7a3d22396436709795479bd2bcbef1e7708e561e4421503e81e47c2d24af14a76bb63550db85a37a10980ce790 -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-node-linux-arm64.tar.gz) | 4a431e0565c5e2c5029c6f414cb694d6e3e7ee2e056868b6e99542eb163c740d9c73556de3f1e039f081adddcedf52099ff8cd74f7a2618cfa7ab5e3ee63f0a4 -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-node-linux-ppc64le.tar.gz) | c8868091220993cd4002e125508fc01e327f8025f6012ddc6bba31d785079d7dea20ceb97d70dd1ae452fc4a6bed4a52e8a511122ce4d65af030cb1e7d40fd60 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-node-linux-s390x.tar.gz) | 22463fb6907c28fff6ffe950a03fc9cc9877b3384d3f8a166979fb6334178b1e6d0d86bc5a07b8e04be82afbe2d8085eec565b2614f5112c47fd80af825f9e11 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.8/kubernetes-node-windows-amd64.tar.gz) | 08b34e5a9a6c529afc23ce57acf62eaf17174812c801f3918599c407832b5b0c7b177f01c5aa66a7d753ec1b9c420cf4d4bda1dab7cf0c8cafb014551306cce7 - -## Changelog since v1.17.7 - -## Changes by Kind - -### API Change - -- Fixed: log timestamps now include trailing zeros to maintain a fixed width ([#91207](https://github.com/kubernetes/kubernetes/pull/91207), [@iamchuckss](https://github.com/iamchuckss)) [SIG Apps and Node] - -### Bug or Regression - -- Fixes CSI volume attachment scaling issue by using informers. ([#91307](https://github.com/kubernetes/kubernetes/pull/91307), [@yuga711](https://github.com/yuga711)) [SIG API Machinery, Apps, Node, Storage and Testing] -- If firstTimestamp is not set use firstTimestamp or eventTime when printing event ([#91055](https://github.com/kubernetes/kubernetes/pull/91055), [@soltysh](https://github.com/soltysh)) [SIG CLI] -- Kubeadm increased to 5 minutes its timeout for the TLS bootstrapping process to complete upon join ([#89735](https://github.com/kubernetes/kubernetes/pull/89735), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle] -- hyperkube: Use debian-hyperkube-base@v1.1.0 image - - A previous release built hyperkube using the debian-hyperkube-base@v1.0.0, - which was updated to address a CVE in the CNI plugins. - - A side-effect of using this new image was that the networking packages - (namely `iptables`) drifted from the versions used in the kube-proxy images. - - The following issues were filed on kube-proxy failures when using hyperkube: - - https://github.com/kubernetes/kubernetes/issues/92275 - - https://github.com/kubernetes/kubernetes/issues/92272 - - https://github.com/kubernetes/kubernetes/issues/92250 - - To address this, the new debian-hyperkube-base image (v1.1.0) uses the - debian-iptables base image (v12.1.0), which includes iptables-wrapper, a - script used to determine the correct iptables mode to run in. ([#92494](https://github.com/kubernetes/kubernetes/pull/92494), [@justaugustus](https://github.com/justaugustus)) [SIG Cluster Lifecycle and Release] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -_Nothing has changed._ - -### Removed -_Nothing has changed._ - - - -# v1.17.8-rc.1 - - -## Downloads for v1.17.8-rc.1 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes.tar.gz) | da3cb0b669e7f3c698911d819a743439e4633da49812d072105acff5122bd308863fd3216c5fced32f0843ad698b0da9344849fdb1b3f414a6839697864ee6ec -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-src.tar.gz) | 6f429fd968450dc0cc3ed02a81ebf521ed8d87880def7498004eee9b9990effd7e3908a1d8bc8eebf1fea1d932209aee1677b4f4ecbd1dd98a3f97d4cd5f6096 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-client-darwin-386.tar.gz) | fa8eda07a4b96e530d8add858ee673df0dbd57d52f642d41d948bd09bdd309b7454af86b11691821c6d89b198c0d8703eb20bbef9e0ef008006f5dc3719386fe -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-client-darwin-amd64.tar.gz) | 635eacbe628705bbd33c31321b069a1853fe2cb2a7fbb44a28e86c62ca2a46d2ebce7d08131594b8b0aa205350de16fc1de41d0ed14c095fbb10929d9c3f5cbd -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-client-linux-386.tar.gz) | b2920840fa9fe79d76a869f4021fdfecbdf8821e94270ca469be6c7ae6025991da1a8dffe4b7c5c828eac64e62473b98a7a30aa6e772257beae08458ff2cf5d3 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-client-linux-amd64.tar.gz) | 6beb451d551764eab4e24a463c5c1b2c5430a6a62f5e77153189a5e23268c314f5fd97096d5bd4c9d19906443e3be6f79dfe68fc3080b0cc8cc611e37dcc17ce -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-client-linux-arm.tar.gz) | 334db1268b23c4d9ff56ccbfd90a5d0cd0ca4bf2874426a45d56e11f501212f2d00e7efdd41ecfdb820bb37cad04776741cfb3f26c9f2d1e9c22e7e82f5a45cc -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-client-linux-arm64.tar.gz) | e81fc23422ce62e15e02f4abc1b70dbf1ed566d400df40e5acccbe89d25bfcad466076d48ebd79389acc3759589bb09f9eed319bfd566c207874be571346a37c -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-client-linux-ppc64le.tar.gz) | df6320c33daae7a86a77904bd194fec51692f6de0778a95f62ad8a7b156043c04cca394159afea06aa219201732f5cc075f4040c4458abbf06793cc1c38a4812 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-client-linux-s390x.tar.gz) | d2286ba60a862184694dec22be601bb45abe33ae37936de497bbd290889e4b383e0cea0ba577d52562da5f4b2d36da100e6fd23a704f6b97ed945346ed57a5a7 -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-client-windows-386.tar.gz) | 148214721c7165169b382161e093d7828a15ad0149e67624f0c8c16d0e974ad941471fdbacabf0a30eb704eff8a569f11d01930a773334de8617bb60d28cb865 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-client-windows-amd64.tar.gz) | 9bd0fb1f2cd30ab2c5f05a294bb4f72a004627a72ed5fe8b66e76b72d97f8378e68f5d84649e4919d9859579712744b16954205ed134c11fdb0b01dd70c41992 - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-server-linux-amd64.tar.gz) | 09e4c5eb9eea18702e267a7f3e64e74e16287cb88573940f89010eeed4d6c7a3a35de5fe928ec17361e9738bc8196221e4d37261c1c0032dd4ddaa020b423d67 -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-server-linux-arm.tar.gz) | 8a42e10d04f4093ddfce217081e2020165344e41df8f78ec48938adc40ae6f2c66e832d0f9d1c5f57559550811a53d0d749e7e20fd1fee0f9d03d8aeabaca0f5 -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-server-linux-arm64.tar.gz) | 61d4ba59824f272530f6ef957a66aad6b7394442062b3b9dfdca7b2f08fe2117f238a6f8465d1648c77f77feadf83e3a9d891606f285ce48886563b1929ccfab -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-server-linux-ppc64le.tar.gz) | 5693d18a66104fe1d49900297d9bb6c75fe22ee890ae0d40a6e6afb3e63a63cfbf39b4ee697ecd769f7108959f7f0dc62f1237026a59c71a2c883b124e358872 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-server-linux-s390x.tar.gz) | 4780f1df8236e0e3fc69c4e1fda45dcc280358215b7f834a63790226e2ae8f28295bc922b257f10bc4aeb2493061caaa5e05cd0e1d113b303375da519de54498 - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-node-linux-amd64.tar.gz) | 981058f903a8fc69730d3255778ca0ad095dd8c2cd92cbf2c510ec6921bc753da736ef918d28f7de3a80433b28da77fecdcab10edfa3cbf5f16f5dc2593ff4fd -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-node-linux-arm.tar.gz) | 50134de1a08dee324ea147e46e5ca805a7cea0846d832c734c6db193c2642311a6c9d8e36c81c2740afb08e62f592486b094360fae28c11fcb3240a74099efbe -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-node-linux-arm64.tar.gz) | b570c281cc639a22d63a1caaf8478b80a88d27521a844799cc3153d7cdd9b8a13de14d4a6f986b5530a31f7e367336921547a7e4ab710af938abccbdba16a21a -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-node-linux-ppc64le.tar.gz) | 357ac7d9f4b26efdd425088eb2fd966af6602c72ffb1f2a661390ec8c930b0f5a6df3879ad74edc115322dad4e2c0e1c0d6db74f07938f39af72d1ee6685c696 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-node-linux-s390x.tar.gz) | d6369c4e72cd27c2b2232ca3e5e70dfcdad878122bde90b4f7328a27fafaee47cfdacac51202b3f9e7d984ca050617414fd901aefff7f5add745003952166eb4 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.8-rc.1/kubernetes-node-windows-amd64.tar.gz) | 8b2f568cfddad0ab47376aaefca8ad4a69b821891e8311c96f014a92f31ac3ae114f38a5e2bcb3a0e625060109cb430f53a447b481e42d59300c53cad71323e5 - -## Changelog since v1.17.7 - -## Changes by Kind - -### API Change - -- Fixed: log timestamps now include trailing zeros to maintain a fixed width ([#91207](https://github.com/kubernetes/kubernetes/pull/91207), [@iamchuckss](https://github.com/iamchuckss)) [SIG Apps and Node] - -### Bug or Regression - -- Fixes CSI volume attachment scaling issue by using informers. ([#91307](https://github.com/kubernetes/kubernetes/pull/91307), [@yuga711](https://github.com/yuga711)) [SIG API Machinery, Apps, Node, Storage and Testing] -- If firstTimestamp is not set use firstTimestamp or eventTime when printing event ([#91055](https://github.com/kubernetes/kubernetes/pull/91055), [@soltysh](https://github.com/soltysh)) [SIG CLI] -- Kubeadm increased to 5 minutes its timeout for the TLS bootstrapping process to complete upon join ([#89735](https://github.com/kubernetes/kubernetes/pull/89735), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle] -- hyperkube: Use debian-hyperkube-base@v1.1.0 image - - A previous release built hyperkube using the debian-hyperkube-base@v1.0.0, - which was updated to address a CVE in the CNI plugins. - - A side-effect of using this new image was that the networking packages - (namely `iptables`) drifted from the versions used in the kube-proxy images. - - The following issues were filed on kube-proxy failures when using hyperkube: - - https://github.com/kubernetes/kubernetes/issues/92275 - - https://github.com/kubernetes/kubernetes/issues/92272 - - https://github.com/kubernetes/kubernetes/issues/92250 - - To address this, the new debian-hyperkube-base image (v1.1.0) uses the - debian-iptables base image (v12.1.0), which includes iptables-wrapper, a - script used to determine the correct iptables mode to run in. ([#92494](https://github.com/kubernetes/kubernetes/pull/92494), [@justaugustus](https://github.com/justaugustus)) [SIG Cluster Lifecycle and Release] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -_Nothing has changed._ - -### Removed -_Nothing has changed._ - - - -# v1.17.7 - - -## Downloads for v1.17.7 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes.tar.gz) | b98b4e1fae60a50fe23ead412c700f8d0250d9dd327d0012efa3e4b74ff21a33bb6cf3df67f9fd04f92aec4ee369bb7d68ca1380dda32caff9e19b2bdb810abd -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-src.tar.gz) | 8be11a7f7696aa19319c0676c1c31db37439e95ac32578d53a21dd1cf7a92ff5f5f795dff6fc7251b47296431dd70a6c4338daf33c342ee6f46387b3a858206a - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-client-darwin-386.tar.gz) | 9c40a33687e212b712e904c8710b3fe4ed4d27542ffde63e40a5e19000cb9b1a3328a292d4e969111ac39cacaf78e210bf44e999ab0c6af118e3c0cd3f311902 -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-client-darwin-amd64.tar.gz) | 8d294e6c28f15ee6518d0a60b809b51bfc3954e139735380305756622debf5a40437b53f57d39afa30b4393ad3c64c65a6eded9faafda8e9a1f9189d89f4ecbc -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-client-linux-386.tar.gz) | 68e4839c4867172315fd1b163d2df51c588f349dd43f978dcaeb471ea44e06333e54f79f38b6bc8ceb732aaed41a2adf0f517db7a03fe4987b372dab5c72a4d8 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-client-linux-amd64.tar.gz) | a0196a68e70422cc220e5f77d7d0104b4248c0ab03f5d1858655bb522071f22f3e9cb76bced170acaebab8e1f4fc7dbcf879b230c0cfd291afc621bb5debd150 -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-client-linux-arm.tar.gz) | 2cf7efedbfde502c28b7a0c70d8a29b46a9bd12423d3d4a88429f8b19545eea1fb37e1ebe870a7d6ea11a8388dfe1a25e7b61a559acac80610540d1b49cda27c -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-client-linux-arm64.tar.gz) | 931d5463ec4f93c0522767f8ff35d2e59115191d93f352d68de860d6c59b8238ae6311942b6f7acf69afcbce323268dbd7f541203d162e3398121ca0853fd139 -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-client-linux-ppc64le.tar.gz) | 0f27cc434068ffd14c5b301f9c9e3f6fcf7e003817b7b831b33fcf38292de51b645be1f30f063b90a64cc4c625ba7c84c96f31f65d6fc7b272ef3ecc2a0f82f8 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-client-linux-s390x.tar.gz) | 5030d86f1516e6d48f3d29ec20f5c9d3a7b578935cef28c1512b2b67548ce8c0a6b128ac8a402fdbb33c04091e3adeecaac405f626b0a34b91dc055a64eded9f -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-client-windows-386.tar.gz) | 3d5b4689a0ed8bd935cf116cc6c8c43663d0d7a208811075ebe6af26434d4d9280f758df3793d3e676192201dddaa4b2ce8d3ee077df6e1d22c876474bc3936f -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-client-windows-amd64.tar.gz) | e54073dae3b756b899caf4298db20e2da2986fe7539a3b4aaa960bb8341021cb3f3ed4a2a69a62d0804e32b006c9dc1a1ab36cb67f4b6d2a3502668f5c928332 - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-server-linux-amd64.tar.gz) | 2fa986227f26663708dc2062e72160eef46931b561f97e9e81b9156b7cf1338da3d9c0940feae832368142009a9949ca191a76498eb7e354bf2b516f083add54 -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-server-linux-arm.tar.gz) | 8335b464da28d66c773dd3fb96846b20104fcae656d41edec1bc5212a0a5bf843a02001e13d95640650b1c723adde3606c669ba13e3855ddc77a79bdd8ff1ab9 -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-server-linux-arm64.tar.gz) | 7c19c83dda8d501249fdac24d07fe5ab7a99d5c540967107c2c4ec8561b5362d8ae3bddfdbedb75def3bd5c1ce9fd5396410d72698c70b9bf92c85286fc11f22 -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-server-linux-ppc64le.tar.gz) | ac954e3c467a144b59168b67b7153050260531b3560edf101f4be77cca8bd81b3dd89c4af6ad13d3b65caa6c68eeb595d17ab7f738c8f7fab3b1db430cbf8b74 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-server-linux-s390x.tar.gz) | ca673ec937d28e90eb2c0e8d7ce2b83e823ea4221435b15b244bce30909839f5721e637d28d343e00e9a729542eadf67ce70bc5777d095e8fe5f91a39bd8f798 - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-node-linux-amd64.tar.gz) | 8da87e04eea4fedd7462992042894aab97052e09fd68c4a7e47bf70d6ad411b214ec37ab6dcfb4bec28759a4214e752e805b42adc9563d15cf668cbda25d8a65 -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-node-linux-arm.tar.gz) | 458d8f4e52995581a163ac51c7f6b6e06a11a900494d92d1a290d78dc03cb2ebe0cb55376c813f600f133f556ca4e4b5859c2e6be1c0c0791550dc5c76884d9b -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-node-linux-arm64.tar.gz) | 7ed90a0028a5205e1b2fd41058260b7497dc9718773f9bef828d3b6e7457a136072c5c583ba61739c0c3ef6b685493e06bb30bc463be00a8a93ca291226913eb -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-node-linux-ppc64le.tar.gz) | 59500c1fc178afe92ad8799c2c622586f80209112b966ea20adbcee9a6dc68c3b5c39033d8590a45ddd2f3afe1e9ea19887b29e612cf96a9e77af547c71a937a -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-node-linux-s390x.tar.gz) | e10f2ca363a02ba786d92ae8e2ab502afd434560dc83e2f5b1c9bd8ca9b076b9c53c5a277fe025face69b380d977c1d090817637091ba5a0504be16f73a5a59b -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.7/kubernetes-node-windows-amd64.tar.gz) | 67a7b24e93597eb5a7de462d379ee7e1a7c878dd04eda4fd5eb01b4ed0ac161cc67d22293265e7227a98fcccaef74f656245dfc4350e985e9ce8b0a0a3dd3484 - -## Changelog since v1.17.6 - -## Changes by Kind - -### API Change - -- Resolve regression in metadata.managedFields handling in update/patch requests submitted by older API clients ([#92008](https://github.com/kubernetes/kubernetes/pull/92008), [@apelisse](https://github.com/apelisse)) [SIG API Machinery and Testing] - -### Feature - -- Extend AWS azToRegion method to support Local Zones ([#90874](https://github.com/kubernetes/kubernetes/pull/90874), [@Jeffwan](https://github.com/Jeffwan)) [SIG Cloud Provider] - -### Bug or Regression - -- Azure: set dest prefix and port for IPv6 inbound security rule ([#91831](https://github.com/kubernetes/kubernetes/pull/91831), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] -- Fix internal loadbalancer configuration failure when subnet name too long ([#86276](https://github.com/kubernetes/kubernetes/pull/86276), [@yangl900](https://github.com/yangl900)) [SIG Cloud Provider] -- Fix public IP not shown issues after assigning public IP to Azure VMs ([#90886](https://github.com/kubernetes/kubernetes/pull/90886), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fixed a regression preventing garbage collection of RBAC role and binding objects ([#90534](https://github.com/kubernetes/kubernetes/pull/90534), [@apelisse](https://github.com/apelisse)) [SIG Auth] -- Kubeadm: increase robustness for "kubeadm join" when adding etcd members on slower setups ([#90645](https://github.com/kubernetes/kubernetes/pull/90645), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubelet podresources API now provides the information about active pods only. ([#79409](https://github.com/kubernetes/kubernetes/pull/79409), [@takmatsu](https://github.com/takmatsu)) [SIG Node] -- Pod Finalizers and Conditions updates are skipped for re-scheduling attempts ([#91950](https://github.com/kubernetes/kubernetes/pull/91950), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] -- Resolve regression in metadata.managedFields handling in create/update/patch requests not using server-side apply ([#91794](https://github.com/kubernetes/kubernetes/pull/91794), [@apelisse](https://github.com/apelisse)) [SIG API Machinery and Testing] -- Resolves an issue using `kubectl certificate approve/deny` against a server serving the v1 CSR API ([#91691](https://github.com/kubernetes/kubernetes/pull/91691), [@liggitt](https://github.com/liggitt)) [SIG Auth and CLI] - -### Other (Cleanup or Flake) - -- Update CNI to v0.8.6 - - build: Use debian-hyperkube-base@v1.0.0 image ([#91386](https://github.com/kubernetes/kubernetes/pull/91386), [@justaugustus](https://github.com/justaugustus)) [SIG Cluster Lifecycle, Network, Release and Testing] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -_Nothing has changed._ - -### Removed -_Nothing has changed._ - - - -# v1.17.6 - - -## Downloads for v1.17.6 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes.tar.gz) | 90b10c16aea412c39ea57f6ebb0f5cb74f939089ebad91cdc1a3c2d83890a88305b2e10e9cee4563258c718383be66ee9e90f06c6b07b8d6eb2d11a473ffd670 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-src.tar.gz) | ea8bff7a3c607d1d10787d5160527ac26e05c11fd7247e9db2066e55f1514d8d8e0ee034c209e3cb0227a89d8f2a14bf23ea960ed04a7ee4ccf179c0f60ec93b - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-client-darwin-386.tar.gz) | a828219247db473d0e83e72d6b16811da5f6568ed6df9c62b81e42be97e74bebe2006f7890f4b2fb11bace912a60dd389030a82cf177de0720e7baa4e9ca375e -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-client-darwin-amd64.tar.gz) | 99accc972bd3c3412916867e8fa29ba7895f3f74b1d63999d8a7ba686a34be616962e4320dd078ea74e58242d7a183401c0858e19d2ac25b21e50868cdc24be3 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-client-linux-386.tar.gz) | 591211c27a91c3890530a90a0afc16a53a965e518b0db0e17024efeb34ee7c2279532357b019743164c7542c3e030d7e822c5fa3a9076291eb202ddb9f90872b -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-client-linux-amd64.tar.gz) | 43ed75d64419d965c5f42dafe06ab8c511001883d91c93ca68d90f36c7f5f2014fd29ecd7bbb2b91e0cf2ebfeffa2223dacb07bf00f9d2c30cc5041849e3438d -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-client-linux-arm.tar.gz) | faf2a45cfd178cc1bacaca3d1df6e109ce423214cbc3ef7ea45fae19bc8e4be058ecd0ae04dcc7a4770dee622d37e2a247dc664c17c8fe37c62421e465defc4b -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-client-linux-arm64.tar.gz) | a3d58a6d4accebecb15d7d53f89b1a198db3563f4986a96f38537dec939836f03958e5bfdd0a83afd983f1bbaac3eee72dea99b2b70544c03612416525637a49 -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-client-linux-ppc64le.tar.gz) | b65305e339f6e4daeaa098baeae16688d99a5e1d869d3f1d875b98ab309f26b7ee352dd0a6c86a67462eb184cff4ff8f650a488ef28a13c9a71b1a89f72a43c8 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-client-linux-s390x.tar.gz) | 31448fc881a4e03cf494615cfc11605c432e8db30eff5355a3e331b65836a23cecfc0a74c0baa30e8a97d0381b37517a87249fd1036b3a165150175bf7c1c201 -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-client-windows-386.tar.gz) | e3943a7030298ffa3ecd49636df99e1786d079db9765ca1b6ac090300224e6fa29e7c2fc5f0928f264db3553019f4c343dfa539cdff1f39a9ab0d50a1506e27b -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-client-windows-amd64.tar.gz) | 4d48a854a66700aa84774219ea647803cbfb93ffd4d392d1b73c85f1aae2457c634bc44ae303ab1fd30aecc1ffe56f8865717c4b68b16dffdeeb60f1ead15294 - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-server-linux-amd64.tar.gz) | aea400c0debb56417d113fa733d6434dff0db8a38f425b307fc204b7035a2b15f4529cb2384a5345fb13947a2fb2120832432371d36bbbdc9de9f7b302a44bd6 -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-server-linux-arm.tar.gz) | 4d5370b5b4aed73bbda6adf4bfbc2dee2c7dea61af6041c9e7f2713e727d653b218b1080b10b23ba949a7cb5ff9d6a35115d99165a1d2bc394840e2176b8d1c6 -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-server-linux-arm64.tar.gz) | 1e6972d013ef6a365175dc621fb72f5b3fad5bb239947bd2ffcc348c0179b565cb4d217ec64717cd5d8651beb004746288264a0aeaf6c337f85d08bdec1d5851 -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-server-linux-ppc64le.tar.gz) | f3ac669007db1ff156349f80511e8768eef4e0fb6032074549bc779b78f0810abd7592ebf9a9dc7f0015dad9e7f248bd4ea9f2755b38403738781b034de95520 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-server-linux-s390x.tar.gz) | 2cb7e373aeda7e76edaa5576280d8944ae8c9b09905ae82e884f2a769a92ec06c0f5d2cc934d9a5871e2285a91ceb0da2eff1e6daf53d4ab360037254d30edd1 - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-node-linux-amd64.tar.gz) | f6eb62e4939c166f2b0b5ed4b7acf723220f6b30d896b281387af8790a0598fb126221321382d53e82b3dbb0039d8dc25edf00b3b910cc106ebacd0bed8861be -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-node-linux-arm.tar.gz) | b945c9c7645b65e7c34bab8f9b3038d4f07b14ccb0cf1ce3bc92bcede90b971a2efe726ae94bb346bfe4d14e9db99c1c4d465c17908805df254fd500bda4c255 -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-node-linux-arm64.tar.gz) | b642196aca36c3079b1cf9ff942369976f1291d91393b3c6e8fdcd1df7415636de29bbf03c2af46707af34ed6a535a3be3c396958d464d5dee51518a50f23dbd -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-node-linux-ppc64le.tar.gz) | 4fb68986045b2725eeb7a9089fafe99f4faa37e366e494282e07f6c2b957170b0ae962014a36fab1e86ebcd5c7f521e8de2271c4ab7b44aa9d0740a8cebb76d5 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-node-linux-s390x.tar.gz) | f237a2992907c59b71593fedcc3aea993d2c1eca2c8cd0025e9b79d4b193aee4c9aabe8e6b623d2c82f51f97661117c80a5c5052641877497ccfa2d2d8c4b71c -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.6/kubernetes-node-windows-amd64.tar.gz) | 5c591a1907e01047b8ead6f23a1a0cd08b82b7fd88d93d72ba8d79dfd24ae28550d22d03e131c7e68c305d69786e7123a7b3c60e9172089c4994be3423976e40 - -## Changelog since v1.17.5 - -## Changes by Kind - -### API Change - - Fix bug where sending a status update completely wipes managedFields for some types. ([#90032](https://github.com/kubernetes/kubernetes/pull/90032), [@apelisse](https://github.com/apelisse)) [SIG API Machinery and Testing] - -### Bug or Regression - - Base-images: Update to kube-cross:v1.13.9-5 ([#90965](https://github.com/kubernetes/kubernetes/pull/90965), [@justaugustus](https://github.com/justaugustus)) [SIG Release] - - CSINode initialization does not crash kubelet on startup when APIServer is not reachable or kubelet has not the right credentials yet. ([#89589](https://github.com/kubernetes/kubernetes/pull/89589), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] - - Fix HPA when using init containers and CRI-O ([#90901](https://github.com/kubernetes/kubernetes/pull/90901), [@joelsmith](https://github.com/joelsmith)) [SIG Node] - - Fix flaws in Azure CSI translation ([#90325](https://github.com/kubernetes/kubernetes/pull/90325), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] - - Fix: Init containers are now considered for the calculation of resource requests when scheduling ([#90414](https://github.com/kubernetes/kubernetes/pull/90414), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] - - Fix: azure disk dangling attach issue which would cause API throttling ([#90749](https://github.com/kubernetes/kubernetes/pull/90749), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] - - Fix: get attach disk error due to missing item in max count table ([#89768](https://github.com/kubernetes/kubernetes/pull/89768), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] - - Fix: support removal of nodes backed by deleted non VMSS instances on Azure ([#91184](https://github.com/kubernetes/kubernetes/pull/91184), [@bpineau](https://github.com/bpineau)) [SIG Cloud Provider] - - Fixed "requested device X but found Y" attach error on AWS. ([#85675](https://github.com/kubernetes/kubernetes/pull/85675), [@jsafrane](https://github.com/jsafrane)) [SIG Cloud Provider and Storage] - - Fixes a bug defining a default value for a replicas field in a custom resource definition that has the scale subresource enabled ([#90020](https://github.com/kubernetes/kubernetes/pull/90020), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation] - - Fixes a regression in 1.17 that dropped cache-control headers on API requests ([#90468](https://github.com/kubernetes/kubernetes/pull/90468), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Testing] - - Provides a fix to allow a cluster in a private Azure cloud to authenticate to ACR in the same cloud. ([#90425](https://github.com/kubernetes/kubernetes/pull/90425), [@DavidParks8](https://github.com/DavidParks8)) [SIG Cloud Provider] - - Scheduling failures due to no nodes available are now reported as unschedulable under ```schedule_attempts_total``` metric. ([#90989](https://github.com/kubernetes/kubernetes/pull/90989), [@ahg-g](https://github.com/ahg-g)) [SIG Scheduling] - -### Other (Cleanup or Flake) - - base-images: Use debian-base:v2.1.0 (includes CVE fixes) - - base-images: Use debian-iptables:v12.1.0 (includes CVE fixes) ([#90938](https://github.com/kubernetes/kubernetes/pull/90938), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Cluster Lifecycle and Release] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -- k8s.io/kube-openapi: 82d701f → bcb3869 - -### Removed -_Nothing has changed._ - - - -# v1.17.5 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.17.5 - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes.tar.gz) | `d0d1b451d5cafd3e909ba15d09c7277a85eba682696cd60684dca8c5ce8db06c1dbab046ec933931e3122c06f9f5b86eddce40856671d3b8b255b338a1bdcd3e` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-src.tar.gz) | `b7a78f9ea3e8088ac3f7dfd671d011fdb0a6cd28342fc19cf35d183f7cf8ffc9e5d4679af3c42d4e5ae49e388e8b8e37f9d0239c0eb8c2da6c9a6b9677d9cf61` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-client-darwin-386.tar.gz) | `8fc24f1f69052372078d76208f9137cf38a3ba689580cf197ab8fff503663e01bce8b0d0c37051b07216be460d6ef492d9319f6206d5a30519ca7e25ab4e742e` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-client-darwin-amd64.tar.gz) | `fb7ff087cc82b930399c5512656de68a8b9c61f54e3bd3e627fff097e67a18411e0268b6cec0e40a96d596618002ccc2417deba5c0eba2dcb195813bdd40cc35` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-client-linux-386.tar.gz) | `544a71885ac66ba4911db7d086880badbf395518b1e6d7bcc03ffc2139c1dc0adf83c4a3e0b4be069217dec335cf40f0e7a81bc5db187dd8d659e847ac4500f0` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-client-linux-amd64.tar.gz) | `4cf67f972aad3425bccc48af83f8cb59ddcc96de49d3bb21cdbbcbbeee31718ef681e551d13343538a6e70c2a4ea0435e4540bc1f8cf1a91a2f73265f52b9429` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-client-linux-arm.tar.gz) | `c90a93b3ffc5d2fc41bb913b6b698b5e9a54c737ea13738dc94ef8baed88d0b02ad03b291a54c21c16ecc6c83f300fd4187e7b6112210fcee4d897bd6fa0a3fe` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-client-linux-arm64.tar.gz) | `c2e2f02a75e92a0505db81941e03cc42effc7f49b89a0c151f5389d57cbc44c8e05d8b7def2d9e17a7928c342e32c0afb0931ea4e22a37ea5dbaaabbfcd89bfa` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-client-linux-ppc64le.tar.gz) | `f1b023d6ae59c5f0f7bbb44f23c7f6185673ff834dd6929e23d14e190a5d0154519a39df072e7801484333eae8e8b53932e918b90e859f2e1317d9e267fac873` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-client-linux-s390x.tar.gz) | `b7f4e92ee30a57f2f20244e092614ea7dc5bb0791b041b39f9593b35bd10afeeda03892b6da7c89ae791e8c0313eae7351f4d88d9faf689b47df778fa1bd026b` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-client-windows-386.tar.gz) | `d21824110b75cfbe3d144eb303560e0a193c9d998be00d4f1f77c672c6fbea487cfda758202487d649c29e52e668ee369a98138a1d32872ef107a74fbbd2f769` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-client-windows-amd64.tar.gz) | `5dc5d50b85aaa40998b3ade4fd51fffe3c4be4bad4382495cf9f6a3e910de23a35c3747e7f63b79af7989a2943c645724e72da06593329939eaf5b25cd4f96bd` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-server-linux-amd64.tar.gz) | `90f571a24527a119499a1546c44dfdb29df74f302a2907ce14f378d79c5e9fd3db075709ce19f75e853dceb720344fcf46fc24225fadbe7b4f71587e1089f1d6` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-server-linux-arm.tar.gz) | `0555e1969f5fa44ecbe331c4ed75df6d56e929e123d9abe6f4ba75c0ffb1ae1a10cc6c8d0b1336f3915398e9e149ac6d87b95cb671770c96dd5fe159a4a60db1` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-server-linux-arm64.tar.gz) | `2e8e446d7a132227c0e926504e65bf9ff6180b7171ac16d51dd92c1729161c591c2f2ce828fba0b790147a69e76815da0f720aa7b90f1d343035deaac2ea8721` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-server-linux-ppc64le.tar.gz) | `08733b06f4174cd14d27d33966fe821b20abd67da94f3aa90b146a3d9ce6f28ff25153667d4175cd67af8055c7197f7c6e37d3bfb5f18eb09c75b499759cc7e4` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-server-linux-s390x.tar.gz) | `a170a62da4e3d5d27c0af7d03aa9db5a947a5d296ccba40fc283fb0da671a395dc5ee1dc7cb7ec662ec562a7bb611eb6cc0f5529f9f58b689cf546542e25d6fa` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-node-linux-amd64.tar.gz) | `99d92cbc9227b49d52fdec303aca4c529bcb45ed66ecbd559803b6d68314b390d7f368c4a803679fe19ed5bba7785948adb1ccc8362334c54067425d4d23775a` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-node-linux-arm.tar.gz) | `931dd0c7b56c7914495cbcba7df998d1db335d635d457c0cf062a3db0c2ec0a1a2a7ae9c51d9711ad744c201c24c2ab7cf8a0718b4cf172a9e3dbffdd910d1dd` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-node-linux-arm64.tar.gz) | `23bbfe1f60b95705846f214bbe243beaeec6c53de33b15231b99094914584da5589cf55340636f7daf46d3b8b75d2f77a1320093f84288ccba502467568b0a56` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-node-linux-ppc64le.tar.gz) | `808abe9a96f461ac303b020c716e3a7fc94b1901cbd56bba836f2caf8292e7f14a112ae2189916a2a5654fe6a55a25d29b0b1fee31e834416c541ff689214421` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-node-linux-s390x.tar.gz) | `a645d8e8ade9af849764755165cdf0fc9eb04671afe2610562082f27f2aba7492f4c735e1ad3bff3cf26318674145da18c50df73506276563d3569b3ecea5b1c` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.5/kubernetes-node-windows-amd64.tar.gz) | `501a5d52229012e8bfcf1e8f7e4cf72f226d5aac451cc70ca23ead5ed3f9d5fe01952d6ea100330ef9daa56fd3bbd07c1c0ea81a918a432a9d47579a35c8e97d` - -## Changelog since v1.17.4 - -## Changes by Kind - -### Feature - -- deps: Update to Golang 1.13.9 - - build: Remove kube-cross image building ([#89399](https://github.com/kubernetes/kubernetes/pull/89399), [@justaugustus](https://github.com/justaugustus)) [SIG Release, Storage and Testing] - -### Bug or Regression - -- Client-go: resolves an issue with informers falling back to full list requests when timeouts are encountered, rather than re-establishing a watch. ([#89976](https://github.com/kubernetes/kubernetes/pull/89976), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Testing] -- EndpointSlice controller now handles terminating pods correctly and is better at preventing race conditions. ([#89118](https://github.com/kubernetes/kubernetes/pull/89118), [@robscott](https://github.com/robscott)) [SIG Apps and Network] -- Ensure Azure availability zone is always in lower cases. ([#89722](https://github.com/kubernetes/kubernetes/pull/89722), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix failing conformance when using docker container runtime w/ the docker/journald logging driver. #87933 ([#88586](https://github.com/kubernetes/kubernetes/pull/88586), [@jdef](https://github.com/jdef)) [SIG Node] -- Fix invalid VMSS updates due to incorrect cache ([#89002](https://github.com/kubernetes/kubernetes/pull/89002), [@ArchangelSDY](https://github.com/ArchangelSDY)) [SIG Cloud Provider] -- Fix the VMSS name and resource group name when updating Azure VMSS for LoadBalancer backendPools ([#89337](https://github.com/kubernetes/kubernetes/pull/89337), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix: check disk status before delete azure disk ([#88360](https://github.com/kubernetes/kubernetes/pull/88360), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fixed a data race in kubelet image manager that can cause static pod workers to silently stop working. ([#88915](https://github.com/kubernetes/kubernetes/pull/88915), [@roycaihw](https://github.com/roycaihw)) [SIG Node] -- Fixed an issue that could cause the kubelet to incorrectly run concurrent pod reconciliation loops and crash. ([#89055](https://github.com/kubernetes/kubernetes/pull/89055), [@tedyu](https://github.com/tedyu)) [SIG Node] -- Fixed the EndpointSlice controller to run without error on a cluster with the OwnerReferencesPermissionEnforcement validating admission plugin enabled. ([#89805](https://github.com/kubernetes/kubernetes/pull/89805), [@marun](https://github.com/marun)) [SIG Auth and Network] -- Fixes conversion error for HorizontalPodAutoscaler objects with invalid annotations ([#89967](https://github.com/kubernetes/kubernetes/pull/89967), [@liggitt](https://github.com/liggitt)) [SIG Autoscaling] -- Fixes conversion error in multi-version custom resources that could cause metadata.generation to increment on no-op patches or updates of a custom resource. ([#88995](https://github.com/kubernetes/kubernetes/pull/88995), [@liggitt](https://github.com/liggitt)) [SIG API Machinery] -- Fixes kubectl apply/prune in namespace other than default. ([#90024](https://github.com/kubernetes/kubernetes/pull/90024), [@seans3](https://github.com/seans3)) [SIG CLI and Testing] -- For GCE cluster provider, fix bug of not being able to create internal type load balancer for clusters with more than 1000 nodes in a single zone. ([#89902](https://github.com/kubernetes/kubernetes/pull/89902), [@wojtek-t](https://github.com/wojtek-t)) [SIG Cloud Provider, Network and Scalability] -- For volumes that allow attaches across multiple nodes, attach and detach operations across different nodes are now executed in parallel. ([#89239](https://github.com/kubernetes/kubernetes/pull/89239), [@verult](https://github.com/verult)) [SIG Apps, Node and Storage] -- Kube-proxy no longer modifies shared EndpointSlices and will not break with EndpointSlice feature gate enabled on Windows. ([#89117](https://github.com/kubernetes/kubernetes/pull/89117), [@robscott](https://github.com/robscott)) [SIG Network] -- Kubeadm: apply further improvements to the tentative support for concurrent etcd member join. Fixes a bug where multiple members can receive the same hostname. Increase the etcd client dial timeout and retry timeout for add/remove/... operations. ([#87505](https://github.com/kubernetes/kubernetes/pull/87505), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubelet metrics gathered through metrics-server or prometheus should no longer timeout for Windows nodes running more than 3 pods. ([#87730](https://github.com/kubernetes/kubernetes/pull/87730), [@marosset](https://github.com/marosset)) [SIG Node, Testing and Windows] -- Restores priority of static control plane pods in the cluster/gce/manifests control-plane manifests ([#89970](https://github.com/kubernetes/kubernetes/pull/89970), [@liggitt](https://github.com/liggitt)) [SIG Cluster Lifecycle and Node] - -### Other (Cleanup or Flake) - -- Reduce event spam during a volume operation error. ([#89794](https://github.com/kubernetes/kubernetes/pull/89794), [@msau42](https://github.com/msau42)) [SIG Storage] - - -# v1.17.4 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.17.4 - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes.tar.gz) | `cf69ebcaddc3902008399b96a18548d9a2a551d9fa6a1e34533f0f83ef10ab501030c3310cbaa593d550905d23c23ad7c8901720fe61f89d466f49bdac5554e8` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-src.tar.gz) | `c638e47bc54754842a018e2cd2e724357f5e3906c0971dad76656e8a8e0ced65e5919b9b83a89a251b3458fd17802bfa7f4d37a0ccb9475558b5be5774888497` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-client-darwin-386.tar.gz) | `64eee9f00ce02b6a139bd20512130f5d193d3862853460fa94b43c946cbcc90e40254786288263cb589ae730d778766e6204768fbd2292f91ee12ea1ad940a8a` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-client-darwin-amd64.tar.gz) | `02646ce4087a59c2b6a3e398554173f969639d47ef6b14f384812f44f5dbbb76d13ec69bc086fb74390eedbbf6d3976c1506b3cec74411a39b19b337a0060dc6` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-client-linux-386.tar.gz) | `bef8fe2453666b9e8a4b5f130b95b1dfaf1294d30cbc08eea53caaa715db0ba63bb5f532abe825c55a51d66eef2db47073e0925c10db92ea76e4250b89a5cd70` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-client-linux-amd64.tar.gz) | `42907ace0672b839f656e3afa09827725cdb94980435b186221c36f7a9e2d6eb39b97ee4ef9848ed817066e6ba7c10d7d29b3e3674c82218c1f5ef1227668ae7` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-client-linux-arm.tar.gz) | `f50785865d8830fa05bc27f7812e213c4ab4b1d020b5eb919bbf20910cfd98c2f55211211b927111a88d054338e965fdaab44128a8317615fa8b785418aa2c0a` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-client-linux-arm64.tar.gz) | `13b0ec947cb186e17fbb571ad1bceef84cf236a8ab3bf52679006f30bbafa8fa6d40a6926adbabcea8b93e504f25ecbb61ec043e7b4469a9269baded7608cfaa` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-client-linux-ppc64le.tar.gz) | `e4727134da0b01a31977f225794cff9d9860b0f62b670fb525cba1b686d7d733b3ded8150185085b8fb7cd49d7ac05d78b8901e7d33e1c3162f4e115b10c7ec3` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-client-linux-s390x.tar.gz) | `368b03ac429d2c8368312214be0ce656e7d9ac7ae334a3659b8fbb8c75713d57c09944c72a77bd199f03b2936bdc4751a4fa5e94f471c91ddf9d8b306c273269` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-client-windows-386.tar.gz) | `962779586897ec218afad31178b547b2eec1e79c434ead49d51459174cca3578b40ff80b3db2b52d0b0270319a8ff1d3c8d458e72ac30d1e15fc854c9f3308be` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-client-windows-amd64.tar.gz) | `c905c5ed45bd430aa9c8f2147edb0a0ac7d5bbd934a77ac6b9527dd5f0abc04ee6f9f69de75a26db279e785ca6fa0631b244ea6bdc31866a557b5fbcb50654a0` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-server-linux-amd64.tar.gz) | `a26953a277a383629139651913b85092ef722cf00722193df31ff977cac70a7441bb10d124159527ed8d5eede24208bd95c13a24590ad87c3d831f1a67532940` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-server-linux-arm.tar.gz) | `0c8def28b67d7a8e2644662f8a42aeda5536249d8c7f63e0bbe225e1dab45a1773b5fae49590acb307f9e4f32cfdcad29b1ec5593552d2016d509ff84f0c5be1` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-server-linux-arm64.tar.gz) | `95285714bf8542bbc482b0544eb6cdfcb0cf217e6863c27810dfe10371674d539cb372ee35a8513fc5710c48cd969ce88c11b020382324650a709b83c39d9466` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-server-linux-ppc64le.tar.gz) | `5cb63c371dc9b2ad7a1d665debd1e9890cc49235b61767aa5244141989e90bf1d0e678c2c89bdcec31b2cb23aa6481deebe7e8291f71ee7c8911ad3b55c8e8e8` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-server-linux-s390x.tar.gz) | `fd26e9f6d8dc473c75f83ffd5c0fed0e28d307d88915db7c3152804e7728504a9958e6fee0ee21418f146876fcf107ef521eb42d6d2a64d97055db1367e7c0ee` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-node-linux-amd64.tar.gz) | `31cfbc4610504a02c7b3fcd0b97b48b27afdf9232fa0d02527c7873a78bb72f9f3c8fac77a2187695da5cfd40f4d42691d188fa142da3d3b7807e034a279d477` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-node-linux-arm.tar.gz) | `5f458a3b8d91cd9b5fb47a9f6d1091bc960115140d4ed6f6dab7d275599b80f7bc62b3869e1cf7121a3ca34b6a50fb026aed104e9036a4157e6208f404e1f288` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-node-linux-arm64.tar.gz) | `1d92b3de82c9db491a2281a684d9a2dd86e998b66455ab2b48a4449e50aedd2605a2be04d930696c119b08f3a3eea5ec0afac0ae6735ebbaf968de1e064bbb80` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-node-linux-ppc64le.tar.gz) | `ee17d8964217e6a53b2e9a93edecb882a8e8ad9c6d40c2875bc61f35a5e1dfdd08a9a80f4567578858e3b48b822bb4ce2a52c63258e569b0346c13bfd0fa45bb` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-node-linux-s390x.tar.gz) | `7e38f136462d6edfe117d8c98da5e5011d4a21bd5e9121649a73ca29d0ed36e877582107a20c52f8d43097d5d9343834f85a309c985e079e5223bfa96af27458` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.4/kubernetes-node-windows-amd64.tar.gz) | `1f36238ced406817dd25971616b6bbb3ff595b334442ce614c611e4ef3bde626771390446b90e1f38ebc7c89c236fa44e8c520fbc2a45e22e008cadd41368874` - -## Changelog since v1.17.3 - -## Changes by Kind - -### API Change - -- Fixes a regression with clients prior to 1.15 not being able to update podIP in pod status, or podCIDR in node spec, against >= 1.16 API servers ([#88505](https://github.com/kubernetes/kubernetes/pull/88505), [@liggitt](https://github.com/liggitt)) [SIG Apps and Network] - -### Other (Bug, Cleanup or Flake) - -- Add delays between goroutines for vm instance update ([#88094](https://github.com/kubernetes/kubernetes/pull/88094), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] -- Adds "volume.beta.kubernetes.io/migrated-to" annotation to PV's and PVC's when they are migrated to signal external provisioners to pick up those objects for Provisioning and Deleting. ([#87098](https://github.com/kubernetes/kubernetes/pull/87098), [@davidz627](https://github.com/davidz627)) [SIG Apps and Storage] -- Build: Enable kube-cross image-building on K8s Infra ([#88595](https://github.com/kubernetes/kubernetes/pull/88595), [@justaugustus](https://github.com/justaugustus)) [SIG Release and Testing] -- Fix /readyz to return error immediately after a shutdown is initiated, before the --shutdown-delay-duration has elapsed. ([#88953](https://github.com/kubernetes/kubernetes/pull/88953), [@tkashem](https://github.com/tkashem)) [SIG API Machinery] -- Fix a bug in kube-proxy that caused it to crash when using load balancers with a different IP family ([#87117](https://github.com/kubernetes/kubernetes/pull/87117), [@aojea](https://github.com/aojea)) [SIG Network] -- Fix handling of aws-load-balancer-security-groups annotation. Security-Groups assigned with this annotation are no longer modified by kubernetes which is the expected behaviour of most users. Also no unnecessary Security-Groups are created anymore if this annotation is used. ([#88689](https://github.com/kubernetes/kubernetes/pull/88689), [@Elias481](https://github.com/Elias481)) [SIG Cloud Provider] -- Fix route conflicted operations when updating multiple routes together ([#88209](https://github.com/kubernetes/kubernetes/pull/88209), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix: add azure disk migration support for CSINode ([#88014](https://github.com/kubernetes/kubernetes/pull/88014), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fix: add remediation in azure disk attach/detach ([#88444](https://github.com/kubernetes/kubernetes/pull/88444), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fix: azure file mount timeout issue ([#88610](https://github.com/kubernetes/kubernetes/pull/88610), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fix: corrupted mount point in csi driver ([#88569](https://github.com/kubernetes/kubernetes/pull/88569), [@andyzhangx](https://github.com/andyzhangx)) [SIG Storage] -- Fix: get azure disk lun timeout issue ([#88158](https://github.com/kubernetes/kubernetes/pull/88158), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fixes issue where you can't attach more than 15 GCE Persistent Disks to c2, n2, m1, m2 machine types. ([#88602](https://github.com/kubernetes/kubernetes/pull/88602), [@yuga711](https://github.com/yuga711)) [SIG Storage] -- Fixes kubelet crash in client certificate rotation cases ([#88079](https://github.com/kubernetes/kubernetes/pull/88079), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, Auth and Node] -- Get-kube.sh uses the gcloud's current local GCP service account for auth when the provider is GCE or GKE instead of the metadata server default ([#88383](https://github.com/kubernetes/kubernetes/pull/88383), [@BenTheElder](https://github.com/BenTheElder)) [SIG Cluster Lifecycle] -- Golang/x/net has been updated to bring in fixes for CVE-2020-9283 ([#88381](https://github.com/kubernetes/kubernetes/pull/88381), [@BenTheElder](https://github.com/BenTheElder)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation] -- Limit number of instances in a single update to GCE target pool to 1000. ([#87881](https://github.com/kubernetes/kubernetes/pull/87881), [@wojtek-t](https://github.com/wojtek-t)) [SIG Cloud Provider, Network and Scalability] -- Update to use golang 1.13.8 ([#87648](https://github.com/kubernetes/kubernetes/pull/87648), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG Release and Testing] - - -# v1.17.3 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.17.3 - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes.tar.gz) | `63e54488630e41488f7153583b3c536df766a623c9eb41634e09a113e2ffdaf973c85ddb5d13adc2727fcf262895ce2552507bdeaf2646c00097f4e24f2b9937` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-src.tar.gz) | `e09b1010d1673faeba6684d28405ee0963c1b42a28da4b00c38169b0422ab86eadf01efdc190066b1556026f5cdc02214cb1237bdfc6e4db332f2c367fa8da8f` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-client-darwin-386.tar.gz) | `00233c38903b92cd328b5bf4f48df47df9d858690887e46647e29f2453778ab53b16fe898476451c943e1d6aac4232c6ef2e36309296ea4ca423a7701f9c9feb` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-client-darwin-amd64.tar.gz) | `587b2f0e4a8b4e736dfc480a939ad866f5cea8b28fe7cfd34bc383f9150096f6f9cfe43f8d902e06fca7eb51e58fd4a2769b6294e26d92e6f45554b93d92c5f5` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-client-linux-386.tar.gz) | `4ab88ef8526ee5a3fdffe3f6fcd85d0314c80cc079cc50945c073849dcc1dc0d0eb1595ce24b1f74494e18a4fa1d0770c15feb41b9b5b183c42a6bae88523968` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-client-linux-amd64.tar.gz) | `351d6b0d8077cadd8d4b95c145b165be5bc5cd07b59d44b7e81e6dc46f5b85f7419642f8273520ea1b63c9ac6f98c832c9cd46db8a1ca7dd03423f94d782557f` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-client-linux-arm.tar.gz) | `0b2c490398001aa363b4e4dd3ac93abbcb6330e76a54534b6c66dbcd356f5fe7dadc51c8c4eda1ad2e842ff25301b3e54d24ae5b841f4e4c156b6299469ec207` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-client-linux-arm64.tar.gz) | `be0cab0399bea7aa78f286031328b049177107168a9ed28f0c7f0e38a04813b9a7f0570f3fd4f28080d12e4e4f8fd80c432a44f80fcfc5b872909d486096940f` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-client-linux-ppc64le.tar.gz) | `8ce6ba5ee2f4867786dd279c016f1a2ac3355898cbe647455e108348131cb6df52fdbab3da1f60f0fcdad94da5787c99d5e762e7c7ce6da18526e3df16b64cc4` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-client-linux-s390x.tar.gz) | `88f20dd15d89b8134240c6c1c036529f1deca1e8f32860c2043147cfd533097d6fe8359f6673f3e2215a910ff4943542b5769a0033e543c26a8658b8277c260a` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-client-windows-386.tar.gz) | `71cdda152a25556743f7c83164b45988c9844fe3eae9033d76177a2615f84413f12867b9621762f4c0269caa758508b2eb3c09fb682b06d98f8668934c68ec67` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-client-windows-amd64.tar.gz) | `19f2a02540c9348b235e43854b3093989c41de0dcfc57df9ad9d63a339d9df13e87649c1675e475f45349fcb89fdea64efa12776f0817e0ae55e09764a95621d` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-server-linux-amd64.tar.gz) | `12f86462f6ab4c1fd1d057d4f8c874bd8782174966ffb3cb2477f0f68c3ede8e8119259f1cad18988ab38879de6e68c7be7ea4d7c6f7565621e82a4e9e949503` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-server-linux-arm.tar.gz) | `ada379873db29c3f6eefcb5efa2b027ae835beb20b39c03fbbbf1c8490f447d888ee56944ca37c9c7054caf728247387509f82fc60d734b0692f9f810cc50b8e` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-server-linux-arm64.tar.gz) | `e3fc5cf9b111e232d28879116434481a45e2c38ad56a349a7353e020ab88baf492130172cd5a3f99234c5f38eddc63588e6798176191ce993585433aa5fe744a` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-server-linux-ppc64le.tar.gz) | `8b8f8af3864fe71c4fb8f767a42dc47882816216da41c0b5d114a75b37c50c97dda58eb3681e829a5cd6339b4c390d3c7f3e4a157783d6732856bc94e2de6c26` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-server-linux-s390x.tar.gz) | `5483e4835ea03686b0f79413c3cde16305d752fd15665b3f78848c90f0ee7bcdc41c0869f203ddceb4a31ee43fce9a7e754a42f0b7827608da2e8defc62cf892` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-node-linux-amd64.tar.gz) | `74f34a4c00b6b9350d978bcdd06f6adce55b211876186e98bcef4eef35008ab9d1a39c5fec9f7fb3e6eafa382c2780f665ea52dae36fbbbb5d3bd5eb1f65c7ad` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-node-linux-arm.tar.gz) | `6cd247524ca8373e0f23eba5a2021844a12d068dee64aaf195b8c430c7fc0ac66d3f30abde4cb425de87a0f94e5bd5f17e4e5a6f069b4dd90cdcfb1ec7be9097` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-node-linux-arm64.tar.gz) | `238e02534c2b905987fe54df477a793561d1e79c40a6c669cabdbec025e17cb186f1f543fb92459e1b1b6211ad670a7a722137800794c2cd4faf3a237910045f` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-node-linux-ppc64le.tar.gz) | `a8d0ff718320cfa2771e4010d970f4e27c80daa2eb7e082be03d4310cf512926e099de9a47abcae5acc3db1ad41c4e9ce843b83ea3930a4fdb97d2d2a8919070` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-node-linux-s390x.tar.gz) | `c323ad2690a7924a0b264de678a01b4948cdfbac0d0cc357fcdc17c31ebc9debf7c0de5c18da23b533c480c04ffcc8140eb93442d3c5bf641344b0997f542e49` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.3/kubernetes-node-windows-amd64.tar.gz) | `7323b7adf83fccc65eea9f23370794aa9901e9a9b3b1ac90403197448408eee5be84f541aa2448ceaa12fe6278814575a26132cf6e0ddd2f8aa5fa47bd127c71` - -## Changelog since v1.17.2 - -## Changes by Kind - -### Other (Bug, Cleanup or Flake) - -- Bind metrics-server containers to linux nodes to avoid Windows scheduling on kubernetes cluster includes linux nodes and windows nodes ([#87020](https://github.com/kubernetes/kubernetes/pull/87020), [@wawa0210](https://github.com/wawa0210)) [SIG Cluster Lifecycle and Instrumentation] -- Bug fixes for EndpointSlice controller that prevent race condition and modifying shared objects. ([#87731](https://github.com/kubernetes/kubernetes/pull/87731), [@robscott](https://github.com/robscott)) [SIG Apps and Network] -- Fix a regression in kubenet that prevent pods to obtain ip addresses ([#87286](https://github.com/kubernetes/kubernetes/pull/87286), [@aojea](https://github.com/aojea)) [SIG Network and Node] -- Fix regression in statefulset conversion which prevented applying a statefulset multiple times. ([#87721](https://github.com/kubernetes/kubernetes/pull/87721), [@liggitt](https://github.com/liggitt)) [SIG Apps and Testing] -- Fix the bug PIP's DNS is deleted if no DNS label service annotation isn't set. ([#87312](https://github.com/kubernetes/kubernetes/pull/87312), [@nilo19](https://github.com/nilo19)) [SIG Cloud Provider] -- Fix: set nil cache entry based on old cache ([#87591](https://github.com/kubernetes/kubernetes/pull/87591), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] -- Fixed a bug which could prevent a provider ID from ever being set for node if an error occurred determining the provider ID when the node was added. ([#87043](https://github.com/kubernetes/kubernetes/pull/87043), [@zjs](https://github.com/zjs)) [SIG Apps and Cloud Provider] -- Fixed the following - - AWS Cloud Provider attempts to delete LoadBalancer security group it didn’t provision - - AWS Cloud Provider creates default LoadBalancer security group even if annotation [service.beta.kubernetes.io/aws-load-balancer-security-groups] is present ([#87206](https://github.com/kubernetes/kubernetes/pull/87206), [@bhagwat070919](https://github.com/bhagwat070919)) [SIG Cloud Provider] -- Fixed two scheduler metrics (pending_pods and schedule_attempts_total) not being recorded ([#87692](https://github.com/kubernetes/kubernetes/pull/87692), [@everpeace](https://github.com/everpeace)) [SIG Scheduling] -- Kubelet metrics have been changed to buckets. - For example the exec/{podNamespace}/{podID}/{containerName} is now just exec. ([#87913](https://github.com/kubernetes/kubernetes/pull/87913), [@cheftako](https://github.com/cheftako)) [SIG Node] -- Pods that are considered for preemption and haven't started don't produce an error log. ([#87900](https://github.com/kubernetes/kubernetes/pull/87900), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] -- Reverted a kubectl azure auth module change where oidc claim spn: prefix was omitted resulting a breaking behavior with existing Azure AD OIDC enabled api-server ([#87507](https://github.com/kubernetes/kubernetes/pull/87507), [@weinong](https://github.com/weinong)) [SIG API Machinery, Auth and Cloud Provider] -- The client label for apiserver_request_count and apiserver_request_total now no-opts and merely records an empty string. ([#87673](https://github.com/kubernetes/kubernetes/pull/87673), [@logicalhan](https://github.com/logicalhan)) [SIG API Machinery, Instrumentation and Scalability] - - - - - -# v1.17.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.17.2 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes.tar.gz) | `82771f9ea6e1da774473500e03bbb8ad8328c27c05ee79514528df5283556f8803763b47a4d815db8f1c0a007d9cdfbb845c985562fb7a5a5386d80b765c4355` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-src.tar.gz) | `117222d9590e17e5f932644e54299cf35c870b7969b12aff51392ba958a298793fee54d7346c64d973a92b1d94a9271fb28ecc68157023fa2424f74a647bacff` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-client-darwin-386.tar.gz) | `fb0163fd0f8e8372c6f6424097badf1ee0b9af1aff5aa6331bdfebf529e71c30a3f5eb062e0b9312afb51e7946d35c426631998c7c0e569b888788bee0a851ca` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-client-darwin-amd64.tar.gz) | `b8cc6dde28dbf06ecfdad6917e1707c3e776aca05d6d3bf782cc26210d87fd2c6abac4cfa73de8d4df7bbd4a46a637e73e90c02b0ca1aa9d98110153e291398f` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-client-linux-386.tar.gz) | `bb2ba270c7953a5ff020cd28116c6067c4299af31c2b2521fd54296b66047c6c4e46731b6293350470ad35a1d4ea90bbd501cbcfa4db8b7aec15f6bcf3e0118f` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-client-linux-amd64.tar.gz) | `c5cd8954953ea348318f207c99c9dcb679d73dbaf562ac72660f7dab85616fd45b0f349d49eae9ea1f6aac7cae5bba839bf70f40b8be686d35605ae147339399` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-client-linux-arm.tar.gz) | `e53a85f0ff2f522603005fec16a9019794f6c7b2704b66e2a963909193caff92737d48a305a10ce40a829cef916fbfed88b31c7d0cc009816da1c714cf902add` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-client-linux-arm64.tar.gz) | `9cdd0e75bc67f8197c50d7b07ef3aa5b59882cb50ac06abf56d4897b12dc7579759963eee2cba2ed8d638ff5466879077c69cf555ed2104f37c6880001e93e23` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-client-linux-ppc64le.tar.gz) | `f0ae9f154146047c8153df0de7d085977ff308227503e8cb673d8c97af933a4093ec26f7676acbaf7e44b7a999817dad02696a754298ce949ceb3fd0dbd3dadb` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-client-linux-s390x.tar.gz) | `203d030803959df4dab13e17e57cfd9ece1e68b09c769172475b73268c3d25bbe7b197c29f7925fe9d79078aa415f91998f319ccfdde9d983218528b85018966` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-client-windows-386.tar.gz) | `de36a20e3484c2039344123853cf3b60bd9ce49e248a2d0c821aeb7a9d9051558c3a60b5f8b528dc3173f6ea32c9a57bf9c4f15ea53c2b1c9732b912c5076639` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-client-windows-amd64.tar.gz) | `e43beb437f077dd995b28bf8a306c413117315612eb5cf2ecbb686b2420d6d2bb4eca387fe9aa5adcc26599a57a7918ff6b558351ca2c6e4bfdf4001806cdb6f` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-server-linux-amd64.tar.gz) | `472e911bf28a6fc583c20cf56eee4a8ec2ede557454b4f5dabc668cd211aeada3cc3486ea104d786105babd9e7de4f817961e6290edfcd073849c6a1de566402` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-server-linux-arm.tar.gz) | `14b95f7e8ecf75026f19e4f28c53ed6d1bc82b5577c045168c787cd95cff9975b610a1f3b9125dc1145eed5313f34d10e8b8884cbeb173db69e6c6a533e4f898` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-server-linux-arm64.tar.gz) | `cec1cc9a4f99295a9c98467ac76cec50f7da23ed45f21ad9bf860fb950f4ffeb0786ca8929b0d749e7786644d0a5bbe132445d1930d53226ce88551583329f18` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-server-linux-ppc64le.tar.gz) | `4727e58ba35303280a4203b2a09b4344cfed372e943a29176e43b3877c1b854b72519b62dbfdcb536f885068c102fa905f8da20d61fdafa2f6451c79b836f28e` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-server-linux-s390x.tar.gz) | `e178c46402b9c308ff915a5f7675fead8a43de45fe1c55b0b36b26aa6fe2c97ac853fa937817fb3345df45b93ec19ee11e9e3c64a7ba865d4ddbaba151566e33` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-node-linux-amd64.tar.gz) | `e7546138dd1768716e7bbfe6136625ff2023293ec1f62741b63c167aaebe9b200314f140608445fa5393512aebe7c2eece17d5935c9257fe05d3b9d9ac25c9b3` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-node-linux-arm.tar.gz) | `0360d2676726a6884d6a2a66ecfe77e1b50882ab1301bd9bfb935b958de4da710a9f748a45641c7131863b763df579a1e8f09a940effedee67fe3d903ec9e9c8` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-node-linux-arm64.tar.gz) | `4ca031a44f2dbbca883406258904e11e11360ab80300f5c422e88103545214a180a6718eb423404f6421f20a2f04863cf6d90c116c95dac962de618f7d2097a8` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-node-linux-ppc64le.tar.gz) | `79a20f5c2acc454e9803bd9ece890ebc0564a45471e4afa03c92b6b489354466081639b779433f6a511a22e3303e7332704f3ba7188b17b4d3861a609c875fc2` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-node-linux-s390x.tar.gz) | `553b5fccf539da0f149b97ba47d4d1e163c86a6a057132fa308f9eb2e3df728ba692c98000fab977b2900980f20cd58f0482c2cdc0044d5a6d71e4b14e9acf83` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.2/kubernetes-node-windows-amd64.tar.gz) | `0d17642c68aeaffa276ee92c87181a3ef6d9e4dd2b41d6b064f7a20bb3ad9cd7d29a8494006c520771e48469049a0d0c146ccd2991199ad5fceda178a03c2ba9` - -## Changelog since v1.17.1 - -**No notable changes for this release** - - - -# v1.17.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.17.1 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes.tar.gz) | `b75a513ac1edc366a0ab829866687c4937485a00a0621a729860ae95fa278ecdadf37d63e608b2259e1c683dd01faf26eb828636710d9864e6f092b1a3cfd1cf` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-src.tar.gz) | `18402d56c7b4b01b59bd8fb6251bf53dcbd1b68b79ca5d7cf0ca6789d8ad9cc5849fe470d018319f1f26a8780d2746be0ead556d00fcc6baf1b675fe8bb7c121` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-client-darwin-386.tar.gz) | `160471e49fd1117154bd22b4aabe2c61051db5c0160c4ea32f9341a3f9b2e1a2a04d43588b618a8c3673db8ffcf3df74e523eed614f9f89ff9439a5e8ce83e04` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-client-darwin-amd64.tar.gz) | `29291fc2c8b36d13590c7cfdf423ac64d102962c39470398ee7b9e6191c44da29ca2e8c1c82cdae4a97b32f33f781be8b718512033172d03d29ae2e448bb66fe` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-client-linux-386.tar.gz) | `41dafee8a1e73a56a25d87b93c2d8287145cfcd3a844a085c34cd6cafdbb229548d11c8e0ddfc776b873d5f2cbfedd8b7f7c607c2a850dc686dccca655807199` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-client-linux-amd64.tar.gz) | `0f8b21ce610b738d0a993b40134edf4ce5ef3d2b020f2bf2ca5a5f142bbe5d0070004796ae7e617441c524ba27712db1c54c00596b768ec0d592e4bc0cc97d48` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-client-linux-arm.tar.gz) | `c7d4d89c06161ffedec679bc5697b7975bfd4ad40df3d083ef056db0a8c3851f7ffe7d727d360881c7cfb24fea78a49e5396469200078aeab7de19cceeaca272` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-client-linux-arm64.tar.gz) | `60d5edd8cd48b2facb3e1c5b347ed0f204e7c808933453abd6ed11586cf01272455bf675c77e6bd87aaf8b6acac29d82548be7c4c97c8d475804a7e5290a9da8` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-client-linux-ppc64le.tar.gz) | `0b7c8275bde773fbf5be33522e8f5397646d812b82fd76c94a5267d75695ba1a3f13b2e165c2b5bed9594b719a523fedcb3ef964d7f52293030d4e3ec23b87a8` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-client-linux-s390x.tar.gz) | `b6e71cb554e521a15c132910c603aee5a6af1e1c5626dbddeb34f1185a6ee77fbf6fa6ede50c7e082abbe425152d25616d31ad67a4e5d02e7f41739575b660bc` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-client-windows-386.tar.gz) | `ecb66c26b38e5ef7e4e8a56387abb04c91db4986b3cd7ef885c1f483064f166be0a30267fafd9fe0725313e726af5c19175691085df978d9f9126671fe375a9e` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-client-windows-amd64.tar.gz) | `84892304a154f52815211c4b34f6d2d733edca81bb7cb9b9f82b57dd80d276b842c81fbaf76becf5a02827b54eb5f02733fccd36da9c9d6a4815d5df14afc49c` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-server-linux-amd64.tar.gz) | `6167314423333f34a4850bd3860617217650f6d2cabf1c287de868040c594601c7d84d2ab17adfa2caf937d74339ae07c71a89af57c2408f5f0e81a347185683` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-server-linux-arm.tar.gz) | `87e04427e7001cb065d1de505f250e054ed3b11d6d3e35b19d830c4040dcf96d3eb3df2247791d5b4e2e593751b1a360a53a7bac54a517248e838b1682f6b768` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-server-linux-arm64.tar.gz) | `6c6e58a97a6235b37be076439b76f3b102a131b87371793833b420d5b22ae7cfb9b2c201f710a6fd34bef1440a1232d2706019cbd2fa10fe0ec699bd98c34fe0` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-server-linux-ppc64le.tar.gz) | `31aa35a2fff29f54183f1ca82ca7cf3ae1796e1f49592f2f789597edb300364631f46b795f13fbb152ea822a666e3ebcac0837bfa32791bfac3d104556f4baca` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-server-linux-s390x.tar.gz) | `287eaa186dde6858c84234f7219bb4959476033805294e7d9cddb8b097644b218c5119e2e5c8fffbd1244f948b4e431ea75c7159e4913ae5651abe23aec78f78` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-node-linux-amd64.tar.gz) | `c91c314caa7a5a7ad6d7bf1663b5fd7a7d4a125c250dc1442bae6d742f964e1e5d936740571e89f29b68806f9c220072a2c61ba4ddbed355004d006cee1fd195` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-node-linux-arm.tar.gz) | `c3cefebf12aa0848201cf68d32227386498180c31c78a38e81988953bd0dc387697e164e593482b5c39001cc01b94e274e550091d3312d6c53eb0a4c9f8ac933` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-node-linux-arm64.tar.gz) | `a278b708b1d68405315128619fca63a7cd35cd980575309a8893c8d128e4cc5c76a0feaac9669ce56524f3c839126eca149e0ea5b20f0da8ca45c954a0c4eda8` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-node-linux-ppc64le.tar.gz) | `8a74e82b6e07203d273c598c6c63af16f278d4d42224157a82b52a490f9549cfe0f3bb72fe05ffc5b1c1fe20e7aacbfcd35b8aadbc77a749a49ef1ddeb911af9` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-node-linux-s390x.tar.gz) | `fd35476eff035bcf35423a5fec3579861c5b2bd7b970c47075cc3f314be6988323505f526dd4cd46e9a90a4985491a4dca39deb5481c4bcf6a50270beb28bc80` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.1/kubernetes-node-windows-amd64.tar.gz) | `feddf53e05819f081d08d8d4086b395848d638c728a8aaa30e7d83cdfdbbbfc2a786a389f9b27c33b00fd42237e5976be1f706734563e1c35cc675bb87a909c2` - -## Changelog since v1.17.0 - -### Other notable changes - -* Fixed a regression where the kubelet would fail to update the ready status of pods. ([#84951](https://github.com/kubernetes/kubernetes/pull/84951), [@tedyu](https://github.com/tedyu)) -* Fix nil pointer dereference in azure cloud provider ([#85975](https://github.com/kubernetes/kubernetes/pull/85975), [@ldx](https://github.com/ldx)) -* fix: azure disk could not mounted on Standard_DC4s/DC2s instances ([#86612](https://github.com/kubernetes/kubernetes/pull/86612), [@andyzhangx](https://github.com/andyzhangx)) -* Fix v1.17.0 regression in reflector relist causing master rolling upgrade to fail for large clusters due to excessive list calls to etcd ([#86824](https://github.com/kubernetes/kubernetes/pull/86824), [@jpbetz](https://github.com/jpbetz)) -* Fixes issue where AAD token obtained by kubectl is incompatible with on-behalf-of flow and oidc. ([#86412](https://github.com/kubernetes/kubernetes/pull/86412), [@weinong](https://github.com/weinong)) - * The audience claim before this fix has "spn:" prefix. After this fix, "spn:" prefix is omitted. -* fix: azure data disk should use same key as os disk by default ([#86351](https://github.com/kubernetes/kubernetes/pull/86351), [@andyzhangx](https://github.com/andyzhangx)) -* Fixes an issue with kubelet-reported pod status on deleted/recreated pods. ([#86320](https://github.com/kubernetes/kubernetes/pull/86320), [@liggitt](https://github.com/liggitt)) -* Fixes v1.17.0 regression in --service-cluster-ip-range handling with IPv4 ranges larger than 65536 IP addresses ([#86534](https://github.com/kubernetes/kubernetes/pull/86534), [@liggitt](https://github.com/liggitt)) -* Fixed a panic in the kubelet cleaning up pod volumes ([#86277](https://github.com/kubernetes/kubernetes/pull/86277), [@tedyu](https://github.com/tedyu)) -* Resolves performance regression in `kubectl get all` and in client-go discovery clients constructed using `NewDiscoveryClientForConfig` or `NewDiscoveryClientForConfigOrDie`. ([#86168](https://github.com/kubernetes/kubernetes/pull/86168), [@liggitt](https://github.com/liggitt)) -* Fix LoadBalancer rule checking so that no unexpected LoadBalancer updates are made ([#85990](https://github.com/kubernetes/kubernetes/pull/85990), [@feiskyer](https://github.com/feiskyer)) - - - -# v1.17.0 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.17.0 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes.tar.gz) | `68d5af15901281954de01164426cfb5ca31c14341387fad34d0cb9aa5f40c932ad44f0de4f987caf2be6bdcea2051e589d25878cf4f9ac0ee73048029a11825f` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-src.tar.gz) | `5424576d7f7936df15243fee0036e7936d2d6224e98ac805ce96cdf7b83a7c5b66dfffc8823d7bc0c17c700fa3c01841208e8cf89be91d237d12e18f3d2f307c` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-client-darwin-386.tar.gz) | `4c9a06409561b8ecc8901d0b88bc955ab8b8c99256b3f6066811539211cff5ba7fb9e3802ac2d8b00a14ce619fa82aeebe83eae9f4b0774bedabd3da0235b78b` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-client-darwin-amd64.tar.gz) | `78ce6875c5f5a03bc057e7194fd1966beb621f825ba786d35a9921ab1ae33ed781d0f93a473a6b985da1ba4fbe95c15b23cdca9e439dfd653dbcf5a2b23d1a73` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-client-linux-386.tar.gz) | `7a4bcd7d06d0f4ba929451f652c92a3c4d428f9b38ed83093f076bb25699b9c4e82f8f851ab981e68becbf10b148ddab4f7dce3743e84d642baa24c00312a2aa` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-client-linux-amd64.tar.gz) | `7f9fc9ac07e9acbf12b58ae9077a8ce1f7fb4b5ceccd3856b55d2beb5e435d4fd27884c10ffdf3e2e18cafd4acc001ed5cf2a0a9a5b0545d9be570f63012d9c0` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-client-linux-arm.tar.gz) | `8f74fff80a000cfaefa2409bdce6fd0d546008c7942a7178a4fa88a9b3ca05d10f34352e2ea2aec5297aa5c630c2b9701b507273c0ed0ddc0c297e57b655d62e` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-client-linux-arm64.tar.gz) | `18d92b320f138f5080f98f1ffee20e405187549ab3aad55b7f60f02e3b7f5a44eb9826098576b42937fd0aac01fe6bcae36b5a8ee52ddde3571a1281b279c114` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-client-linux-ppc64le.tar.gz) | `fd9b15a88b3d5a506a84ebfb56de291b85978b14f61a2c05f4bdb6a7e45a36f92af5a024a6178dbebd82a92574ec6d8cf9d8ac912f868f757649a2a8434011fe` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-client-linux-s390x.tar.gz) | `ae3b284a78975cbfccaac04ea802085c31fd75cccf4ece3a983f44faf755dd94c43833e60f52c5ea57bc462cb24268ef4b7246876189113f588a012dd58e9630` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-client-windows-386.tar.gz) | `4ba83b068e7f4a203bcc5cc8bb2c456a6a9c468e695f86f69d8f2ac81be9a1ce156f9a2f28286cb7eb0480faac397d964821c009473bdb443d84a30b6d020551` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-client-windows-amd64.tar.gz) | `fc79b0e926a823c7d8b9010dee0c559587b7f97c9290b2126d517c4272891ce36e310a64c85f3861a1c951da8dc21f46244a59ff9d52b7b7a3f84879f533e6aa` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-server-linux-amd64.tar.gz) | `28b2703c95894ab0565e372517c4a4b2c33d1be3d778fae384a6ab52c06cea7dd7ec80060dbdba17c8ab23bbedcde751cccee7657eba254f7d322cf7c4afc701` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-server-linux-arm.tar.gz) | `b36a9f602131dba23f267145399aad0b19e97ab7b5194b2e3c01c57f678d7b0ea30c1ea6b4c15fd87b1fd3bf06abd4ec443bef5a3792c0d813356cdeb3b6a935` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-server-linux-arm64.tar.gz) | `42adae077603f25b194e893f15e7f415011f25e173507a190bafbee0d0e86cdd6ee8f11f1bcf0a5366e845bd968f92e5bf66785f20c1125c801cf3ec9850d0bd` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-server-linux-ppc64le.tar.gz) | `7e72d4255e661e946203c1c0c684cd0923034eb112c35e3ba08fbf9d1ef5e8bb291840c6ff99aea6180083846f9a9ba88387e176ee7a5def49e1d19366e2789f` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-server-linux-s390x.tar.gz) | `00bc634654ec7d1ec2eca7a3e943ac287395503a06c8da22b7efb3a35435ceb323618c6d9931d6693bfb19f2b8467ae8f05f98392df8ee4954556c438409c8d4` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-node-linux-amd64.tar.gz) | `49ef6a41c65b3f26a4f3ffe63b92c8096c26aa27a89d227d935bc06a497c97505ad8bc215b4c5d5ad3af6489c1366cd26ecc8e2781a83f46a91503678abba71b` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-node-linux-arm.tar.gz) | `21a213fd572200998bdd71f5ebbb96576fc7a7e7cfb1469f028cc1a310bc2b5c0ce32660629beb166b88f54e6ebecb2022b2ed1fdb902a9b9d5acb193d76fa0f` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-node-linux-arm64.tar.gz) | `3642ee5e7476080a44005db8e7282fdbe4e4f220622761b95951c2c15b3e10d7b70566bfb7a9a58574f3fc385d5aae80738d88195fa308a07f199cee70f912f4` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-node-linux-ppc64le.tar.gz) | `99687088be50a794894911d43827b7e1125fbc86bfba799f77c096ddaa5b2341b31d009b8063a177e503ce2ce0dafbda1115216f8a5777f34e0e2d81f0114104` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-node-linux-s390x.tar.gz) | `73b9bc356de43fbed7d3294be747b83e0aac47051d09f1df7be52c33be670b63c2ea35856a483ebc2f57e30a295352b77f1b1a6728afa10ec1f3338cafbdb2bb` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0/kubernetes-node-windows-amd64.tar.gz) | `2fbc80f928231f60a5a7e4f427953ef17244b3a8f6fdeebcbfceb05b0587b84933fa723898c64488d94b9ce180357d6d4ca1505ca3c3c7fb11067b7b3bf6361b` - -# Changes - -A complete changelog for the release notes is now hosted in a customizable format at [relnotes.k8s.io](https://relnotes.k8s.io). Check it out and please give us your feedback! - -## What’s New (Major Themes) - -### Cloud Provider Labels reach General Availability - -Added as a beta feature way back in v1.2, v1.17 sees the general availability of cloud provider labels. - -### Volume Snapshot Moves to Beta - -The Kubernetes Volume Snapshot feature is now beta in Kubernetes v1.17. It was introduced as alpha in Kubernetes v1.12, with a second alpha with breaking changes in Kubernetes v1.13. - -### CSI Migration Beta - -The Kubernetes in-tree storage plugin to Container Storage Interface (CSI) migration infrastructure is now beta in Kubernetes v1.17. CSI migration was introduced as alpha in Kubernetes v1.14. - -## Known Issues -- volumeDevices mapping ignored when container is privileged -- The `Should recreate evicted statefulset` conformance [test]( https://github.com/kubernetes/kubernetes/blob/master/test/e2e/apps/statefulset.go) fails because `Pod ss-0 expected to be re-created at least once`. This was caused by the `Predicate PodFitsHostPorts failed` scheduling error. The root cause was a host port conflict for port `21017`. This port was in-use as an ephemeral port by another application running on the node. This will be looked at for the 1.18 release. -- client-go discovery clients constructed using `NewDiscoveryClientForConfig` or `NewDiscoveryClientForConfigOrDie` default to rate limits that cause normal discovery request patterns to take several seconds. This is fixed in https://issue.k8s.io/86168 and will be resolved in v1.17.1. As a workaround, the `Burst` value can be adjusted higher in the rest.Config passed into `NewDiscoveryClientForConfig` or `NewDiscoveryClientForConfigOrDie`. -- the IP allocator in v1.17.0 can return errors such as `the cluster IP for service is not within the service CIDR ; please recreate` in the logs of the kube-apiserver. The cause is incorrect CIDR calculations if the service CIDR (`--service-cluster-ip-range`) is set to bits lower than `/16`. This is fixed in http://issue.k8s.io/86534 and will be resolved in v1.17.1. - -## Urgent Upgrade Notes -### (No, really, you MUST read this before you upgrade) -#### Cluster Lifecycle -- Kubeadm: add a new `kubelet-finalize` phase as part of the `init` workflow and an experimental sub-phase to enable automatic kubelet client certificate rotation on primary control-plane nodes. -Prior to 1.17 and for existing nodes created by `kubeadm init` where kubelet client certificate rotation is desired, you must modify `/etc/kubernetes/kubelet.conf` to point to the PEM symlink for rotation: -`client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem` and `client-key: /var/lib/kubelet/pki/kubelet-client-current.pem`, replacing the embedded client certificate and key. ([#84118](https://github.com/kubernetes/kubernetes/pull/84118), [@neolit123](https://github.com/neolit123)) -#### Network -- EndpointSlices: If upgrading a cluster with EndpointSlices already enabled, any EndpointSlices that should be managed by the EndpointSlice controller should have a `endpointslice.kubernetes.io/managed-by` label set to `endpointslice-controller.k8s.io`. - -#### Scheduling - -- Kubeadm: when adding extra apiserver authorization-modes, the defaults `Node,RBAC` are no longer prepended in the resulting static Pod manifests and a full override is allowed. ([#82616](https://github.com/kubernetes/kubernetes/pull/82616), [@ghouscht](https://github.com/ghouscht)) - -#### Storage -- A node that uses a CSI raw block volume needs to be drained before kubelet can be upgraded to 1.17. ([#74026](https://github.com/kubernetes/kubernetes/pull/74026), [@mkimuram](https://github.com/mkimuram)) - -#### Windows -- The Windows containers RunAsUsername feature is now beta. -- Windows worker nodes in a Kubernetes cluster now support Windows Server version 1903 in addition to the existing support for Windows Server 2019 -- The RuntimeClass scheduler can now simplify steering Linux or Windows pods to appropriate nodes -- All Windows nodes now get the new label `node.kubernetes.io/windows-build` that reflects the Windows major, minor, and build number that are needed to match compatibility between Windows containers and Windows worker nodes. - - -## Deprecations and Removals -- `kubeadm.k8s.io/v1beta1` has been deprecated, you should update your config to use newer non-deprecated API versions. ([#83276](https://github.com/kubernetes/kubernetes/pull/83276), [@Klaven](https://github.com/Klaven)) -- The deprecated feature gates GCERegionalPersistentDisk, EnableAggregatedDiscoveryTimeout and PersistentLocalVolumes are now unconditionally enabled and can no longer be specified in component invocations. ([#82472](https://github.com/kubernetes/kubernetes/pull/82472), [@draveness](https://github.com/draveness)) -- Deprecate the default service IP CIDR. The previous default was `10.0.0.0/24` which will be removed in 6 months/2 releases. Cluster admins must specify their own desired value, by using `--service-cluster-ip-range` on kube-apiserver. ([#81668](https://github.com/kubernetes/kubernetes/pull/81668), [@darshanime](https://github.com/darshanime)) -- Remove deprecated "include-uninitialized" flag. ([#80337](https://github.com/kubernetes/kubernetes/pull/80337), [@draveness](https://github.com/draveness)) -- All resources within the `rbac.authorization.k8s.io/v1alpha1` and `rbac.authorization.k8s.io/v1beta1` API groups are deprecated in favor of `rbac.authorization.k8s.io/v1`, and will no longer be served in v1.20. ([#84758](https://github.com/kubernetes/kubernetes/pull/84758), [@liggitt](https://github.com/liggitt)) -- The certificate signer no longer accepts ca.key passwords via the `CFSSL_CA_PK_PASSWORD` environment variable. This capability was not prompted by user request, never advertised, and recommended against in the security audit. ([#84677](https://github.com/kubernetes/kubernetes/pull/84677), [@mikedanese](https://github.com/mikedanese)) -- Deprecate the instance type beta label (`beta.kubernetes.io/instance-type`) in favor of its GA equivalent: `node.kubernetes.io/instance-type` ([#82049](https://github.com/kubernetes/kubernetes/pull/82049), [@andrewsykim](https://github.com/andrewsykim)) -- The built-in system:csi-external-provisioner and system:csi-external-attacher cluster roles are removed as of 1.17 release ([#84282](https://github.com/kubernetes/kubernetes/pull/84282), [@tedyu](https://github.com/tedyu)) -- The in-tree GCE PD plugin `kubernetes.io/gce-pd` is now deprecated and will be removed in 1.21. Users that self-deploy Kubernetes on GCP should enable CSIMigration + CSIMigrationGCE features and install the GCE PD CSI Driver (https://github.com/kubernetes-sigs/gcp-compute-persistent-disk-csi-driver) to avoid disruption to existing Pod and PVC objects at that time. Users should start using the GCE PD CSI CSI Driver directly for any new volumes. ([#85231](https://github.com/kubernetes/kubernetes/pull/85231), [@davidz627](https://github.com/davidz627)) -- The in-tree AWS EBS plugin `kubernetes.io/aws-ebs` is now deprecated and will be removed in 1.21. Users that self-deploy Kubernetes on AWS should enable CSIMigration + CSIMigrationAWS features and install the AWS EBS CSI Driver (https://github.com/kubernetes-sigs/aws-ebs-csi-driver) to avoid disruption to existing Pod and PVC objects at that time. Users should start using the AWS EBS CSI CSI Driver directly for any new volumes. ([#85237](https://github.com/kubernetes/kubernetes/pull/85237), [@leakingtapan](https://github.com/leakingtapan)) -- The CSINodeInfo feature gate is deprecated and will be removed in a future release. The storage.k8s.io/v1beta1 CSINode object is deprecated and will be removed in a future release. ([#83474](https://github.com/kubernetes/kubernetes/pull/83474), [@msau42](https://github.com/msau42)) -- Removed Alpha feature `MountContainers` ([#84365](https://github.com/kubernetes/kubernetes/pull/84365), [@codenrhoden](https://github.com/codenrhoden)) -- Removed plugin watching of the deprecated directory `{kubelet_root_dir}/plugins` and CSI V0 support in accordance with deprecation announcement in https://v1-13.docs.kubernetes.io/docs/setup/release/notes ([#84533](https://github.com/kubernetes/kubernetes/pull/84533), [@davidz627](https://github.com/davidz627)) -- kubeadm deprecates the use of the hyperkube image ([#85094](https://github.com/kubernetes/kubernetes/pull/85094), [@rosti](https://github.com/rosti)) -## Metrics Changes -### Added metrics -- Add `scheduler_goroutines` metric to track number of kube-scheduler binding and prioritizing goroutines ([#83535](https://github.com/kubernetes/kubernetes/pull/83535), [@wgliang](https://github.com/wgliang)) -- Adding initial EndpointSlice metrics. ([#83257](https://github.com/kubernetes/kubernetes/pull/83257), [@robscott](https://github.com/robscott)) -- Adds a metric `apiserver_request_error_total` to kube-apiserver. This metric tallies the number of `request_errors` encountered by verb, group, version, resource, subresource, scope, component, and code. ([#83427](https://github.com/kubernetes/kubernetes/pull/83427), [@logicalhan](https://github.com/logicalhan)) -- A new `kubelet_preemptions` metric is reported from Kubelets to track the number of preemptions occuring over time, and which resource is triggering those preemptions. ([#84120](https://github.com/kubernetes/kubernetes/pull/84120), [@smarterclayton](https://github.com/smarterclayton)) -- Kube-apiserver: Added metrics `authentication_latency_seconds` that can be used to understand the latency of authentication. ([#82409](https://github.com/kubernetes/kubernetes/pull/82409), [@RainbowMango](https://github.com/RainbowMango)) -- Add `plugin_execution_duration_seconds` metric for scheduler framework plugins. ([#84522](https://github.com/kubernetes/kubernetes/pull/84522), [@liu-cong](https://github.com/liu-cong)) -- Add `permit_wait_duration_seconds` metric to the scheduler. ([#84011](https://github.com/kubernetes/kubernetes/pull/84011), [@liu-cong](https://github.com/liu-cong)) - -### Deprecated/changed metrics -- etcd version monitor metrics are now marked as with the ALPHA stability level. ([#83283](https://github.com/kubernetes/kubernetes/pull/83283), [@RainbowMango](https://github.com/RainbowMango)) -- Change `pod_preemption_victims` metric from Gauge to Histogram. ([#83603](https://github.com/kubernetes/kubernetes/pull/83603), [@Tabrizian](https://github.com/Tabrizian)) -- Following metrics from kubelet are now marked as with the ALPHA stability level: - `kubelet_container_log_filesystem_used_bytes` - `kubelet_volume_stats_capacity_bytes` - `kubelet_volume_stats_available_bytes` - `kubelet_volume_stats_used_bytes` - `kubelet_volume_stats_inodes` - `kubelet_volume_stats_inodes_free` - `kubelet_volume_stats_inodes_used` - `plugin_manager_total_plugins` - `volume_manager_total_volumes` - ([#84907](https://github.com/kubernetes/kubernetes/pull/84907), [@RainbowMango](https://github.com/RainbowMango)) -- Deprecated metric `rest_client_request_latency_seconds` has been turned off. ([#83836](https://github.com/kubernetes/kubernetes/pull/83836), [@RainbowMango](https://github.com/RainbowMango)) -- Following metrics from kubelet are now marked as with the ALPHA stability level: - `node_cpu_usage_seconds_total` - `node_memory_working_set_bytes` - `container_cpu_usage_seconds_total` - `container_memory_working_set_bytes` - `scrape_error` - ([#84987](https://github.com/kubernetes/kubernetes/pull/84987), [@RainbowMango](https://github.com/RainbowMango)) -- Deprecated prometheus request meta-metrics have been removed - `http_request_duration_microseconds` `http_request_duration_microseconds_sum` `http_request_duration_microseconds_count` - `http_request_size_bytes` - `http_request_size_bytes_sum` - `http_request_size_bytes_count` - `http_requests_total, http_response_size_bytes` - `http_response_size_bytes_sum` - `http_response_size_bytes_count` - due to removal from the prometheus client library. Prometheus http request meta-metrics are now generated from [`promhttp.InstrumentMetricHandler`](https://godoc.org/github.com/prometheus/client_golang/prometheus/promhttp#InstrumentMetricHandler) instead. -- Following metrics from kube-controller-manager are now marked as with the ALPHA stability level: - `storage_count_attachable_volumes_in_use` - `attachdetach_controller_total_volumes` - `pv_collector_bound_pv_count` - `pv_collector_unbound_pv_count` - `pv_collector_bound_pvc_count` - `pv_collector_unbound_pvc_count` - ([#84896](https://github.com/kubernetes/kubernetes/pull/84896), [@RainbowMango](https://github.com/RainbowMango)) -- Following metrics have been turned off: - `apiserver_request_count` - `apiserver_request_latencies` - `apiserver_request_latencies_summary` - `apiserver_dropped_requests` - `etcd_request_latencies_summary` - `apiserver_storage_transformation_latencies_microseconds` - `apiserver_storage_data_key_generation_latencies_microseconds` - `apiserver_storage_transformation_failures_total` - ([#83837](https://github.com/kubernetes/kubernetes/pull/83837), [@RainbowMango](https://github.com/RainbowMango)) -- Following metrics have been turned off: - `scheduler_scheduling_latency_seconds` - `scheduler_e2e_scheduling_latency_microseconds` - `scheduler_scheduling_algorithm_latency_microseconds` - `scheduler_scheduling_algorithm_predicate_evaluation` - `scheduler_scheduling_algorithm_priority_evaluation` - `scheduler_scheduling_algorithm_preemption_evaluation` - `scheduler_scheduling_binding_latency_microseconds ([#83838](https://github.com/kubernetes/kubernetes/pull/83838`), [@RainbowMango](https://github.com/RainbowMango)) -- Deprecated metric `kubeproxy_sync_proxy_rules_latency_microseconds` has been turned off. ([#83839](https://github.com/kubernetes/kubernetes/pull/83839), [@RainbowMango](https://github.com/RainbowMango)) - -## Notable Features -### Stable -- Graduate ScheduleDaemonSetPods to GA. (feature gate will be removed in 1.18) ([#82795](https://github.com/kubernetes/kubernetes/pull/82795), [@draveness](https://github.com/draveness)) -- Graduate TaintNodesByCondition to GA in 1.17. (feature gate will be removed in 1.18) ([#82703](https://github.com/kubernetes/kubernetes/pull/82703), [@draveness](https://github.com/draveness)) -- The WatchBookmark feature is promoted to GA. With WatchBookmark feature, clients are able to request watch events with BOOKMARK type. See https://kubernetes.io/docs/reference/using-api/api-concepts/#watch-bookmarks for more details. ([#83195](https://github.com/kubernetes/kubernetes/pull/83195), [@wojtek-t](https://github.com/wojtek-t)) -- Promote NodeLease feature to GA. -The feature make Lease object changes an additional healthiness signal from Node. Together with that, we reduce frequency of NodeStatus updates to 5m by default in case of no changes to status itself ([#84351](https://github.com/kubernetes/kubernetes/pull/84351), [@wojtek-t](https://github.com/wojtek-t)) -- CSI Topology feature is GA. ([#83474](https://github.com/kubernetes/kubernetes/pull/83474), [@msau42](https://github.com/msau42)) -- The VolumeSubpathEnvExpansion feature is graduating to GA. The `VolumeSubpathEnvExpansion` feature gate is unconditionally enabled, and will be removed in v1.19. ([#82578](https://github.com/kubernetes/kubernetes/pull/82578), [@kevtaylor](https://github.com/kevtaylor)) -- Node-specific volume limits has graduated to GA. ([#83568](https://github.com/kubernetes/kubernetes/pull/83568), [@bertinatto](https://github.com/bertinatto)) -- The ResourceQuotaScopeSelectors feature has graduated to GA. The `ResourceQuotaScopeSelectors` feature gate is now unconditionally enabled and will be removed in 1.18. ([#82690](https://github.com/kubernetes/kubernetes/pull/82690), [@draveness](https://github.com/draveness)) - -### Beta -- The Kubernetes Volume Snapshot feature has been moved to beta. The VolumeSnapshotDataSource feature gate is on by default in this release. This feature enables you to take a snapshot of a volume (if supported by the CSI driver), and use the snapshot to provision a new volume, pre-populated with data from the snapshot. -- Feature gates CSIMigration to Beta (on by default) and CSIMigrationGCE to Beta (off by default since it requires installation of the GCE PD CSI Driver) ([#85231](https://github.com/kubernetes/kubernetes/pull/85231), [@davidz627](https://github.com/davidz627)) -- EndpointSlices are now beta but not yet enabled by default. Use the EndpointSlice feature gate to enable this feature. ([#85365](https://github.com/kubernetes/kubernetes/pull/85365), [@robscott](https://github.com/robscott)) -- Promote CSIMigrationAWS to Beta (off by default since it requires installation of the AWS EBS CSI Driver) ([#85237](https://github.com/kubernetes/kubernetes/pull/85237), [@leakingtapan](https://github.com/leakingtapan)) -- Moving Windows RunAsUserName feature to beta ([#84882](https://github.com/kubernetes/kubernetes/pull/84882), [@marosset](https://github.com/marosset)) - -### CLI Improvements -- The kubectl's api-resource command now has a `--sort-by` flag to sort resources by name or kind. ([#81971](https://github.com/kubernetes/kubernetes/pull/81971), [@laddng](https://github.com/laddng)) -- A new `--prefix` flag added into kubectl logs which prepends each log line with information about it's source (pod name and container name) ([#76471](https://github.com/kubernetes/kubernetes/pull/76471), [@m1kola](https://github.com/m1kola)) - -## API Changes -- CustomResourceDefinitions now validate documented API semantics of `x-kubernetes-list-type` and `x-kubernetes-map-type` atomic to reject non-atomic sub-types. ([#84722](https://github.com/kubernetes/kubernetes/pull/84722), [@sttts](https://github.com/sttts)) -- Kube-apiserver: The `AdmissionConfiguration` type accepted by `--admission-control-config-file` has been promoted to `apiserver.config.k8s.io/v1` with no schema changes. ([#85098](https://github.com/kubernetes/kubernetes/pull/85098), [@liggitt](https://github.com/liggitt)) -- Fixed EndpointSlice port name validation to match Endpoint port name validation (allowing port names longer than 15 characters) ([#84481](https://github.com/kubernetes/kubernetes/pull/84481), [@robscott](https://github.com/robscott)) -- CustomResourceDefinitions introduce `x-kubernetes-map-type` annotation as a CRD API extension. Enables this particular validation for server-side apply. ([#84113](https://github.com/kubernetes/kubernetes/pull/84113), [@enxebre](https://github.com/enxebre)) - -## Other notable changes -### API Machinery - -- kube-apiserver: the `--runtime-config` flag now supports an `api/beta=false` value which disables all built-in REST API versions matching `v[0-9]+beta[0-9]+`. ([#84304](https://github.com/kubernetes/kubernetes/pull/84304), [@liggitt](https://github.com/liggitt)) -The `--feature-gates` flag now supports an `AllBeta=false` value which disables all beta feature gates. ([#84304](https://github.com/kubernetes/kubernetes/pull/84304), [@liggitt](https://github.com/liggitt)) -- New flag `--show-hidden-metrics-for-version` in kube-apiserver can be used to show all hidden metrics that deprecated in the previous minor release. ([#84292](https://github.com/kubernetes/kubernetes/pull/84292), [@RainbowMango](https://github.com/RainbowMango)) -- kube-apiserver: Authentication configuration for mutating and validating admission webhooks referenced from an `--admission-control-config-file` can now be specified with `apiVersion: apiserver.config.k8s.io/v1, kind: WebhookAdmissionConfiguration`. ([#85138](https://github.com/kubernetes/kubernetes/pull/85138), [@liggitt](https://github.com/liggitt)) -- kube-apiserver: The `ResourceQuota` admission plugin configuration referenced from `--admission-control-config-file` admission config has been promoted to `apiVersion: apiserver.config.k8s.io/v1`, `kind: ResourceQuotaConfiguration` with no schema changes. ([#85099](https://github.com/kubernetes/kubernetes/pull/85099), [@liggitt](https://github.com/liggitt)) -- kube-apiserver: fixed a bug that could cause a goroutine leak if the apiserver encountered an encoding error serving a watch to a websocket watcher ([#84693](https://github.com/kubernetes/kubernetes/pull/84693), [@tedyu](https://github.com/tedyu)) -- Fix the bug that EndpointSlice for masters wasn't created after enabling EndpointSlice feature on a pre-existing cluster. ([#84421](https://github.com/kubernetes/kubernetes/pull/84421), [@tnqn](https://github.com/tnqn)) -- Switched intstr.Type to sized integer to follow API guidelines and improve compatibility with proto libraries ([#83956](https://github.com/kubernetes/kubernetes/pull/83956), [@liggitt](https://github.com/liggitt)) -- Client-go: improved allocation behavior of the delaying workqueue when handling objects with far-future ready times. ([#83945](https://github.com/kubernetes/kubernetes/pull/83945), [@barkbay](https://github.com/barkbay)) -- Fixed an issue with informers missing an `Added` event if a recently deleted object was immediately recreated at the same time the informer dropped a watch and relisted. ([#83911](https://github.com/kubernetes/kubernetes/pull/83911), [@matte21](https://github.com/matte21)) -- Fixed panic when accessing CustomResources of a CRD with `x-kubernetes-int-or-string`. ([#83787](https://github.com/kubernetes/kubernetes/pull/83787), [@sttts](https://github.com/sttts)) -- The resource version option, when passed to a list call, is now consistently interpreted as the minimum allowed resource version. Previously when listing resources that had the watch cache disabled clients could retrieve a snapshot at that exact resource version. If the client requests a resource version newer than the current state, a TimeoutError is returned suggesting the client retry in a few seconds. This behavior is now consistent for both single item retrieval and list calls, and for when the watch cache is enabled or disabled. ([#72170](https://github.com/kubernetes/kubernetes/pull/72170), [@jpbetz](https://github.com/jpbetz)) -- Fixes a goroutine leak in kube-apiserver when a request times out. ([#83333](https://github.com/kubernetes/kubernetes/pull/83333), [@lavalamp](https://github.com/lavalamp)) -- Fixes the bug in informer-gen that it produces incorrect code if a type has nonNamespaced tag set. ([#80458](https://github.com/kubernetes/kubernetes/pull/80458), [@tatsuhiro-t](https://github.com/tatsuhiro-t)) -- Resolves bottleneck in internal API server communication that can cause increased goroutines and degrade API Server performance ([#80465](https://github.com/kubernetes/kubernetes/pull/80465), [@answer1991](https://github.com/answer1991)) -- Resolves regression generating informers for packages whose names contain `.` characters ([#82410](https://github.com/kubernetes/kubernetes/pull/82410), [@nikhita](https://github.com/nikhita)) -- Resolves issue with `/readyz` and `/livez` not including etcd and kms health checks ([#82713](https://github.com/kubernetes/kubernetes/pull/82713), [@logicalhan](https://github.com/logicalhan)) -- Fixes regression in logging spurious stack traces when proxied connections are closed by the backend ([#82588](https://github.com/kubernetes/kubernetes/pull/82588), [@liggitt](https://github.com/liggitt)) -- Kube-apiserver now reloads serving certificates from disk every minute to allow rotation without restarting the server process ([#84200](https://github.com/kubernetes/kubernetes/pull/84200), [@jackkleeman](https://github.com/jackkleeman)) -- Client-ca bundles for the all generic-apiserver based servers will dynamically reload from disk on content changes ([#83579](https://github.com/kubernetes/kubernetes/pull/83579), [@deads2k](https://github.com/deads2k)) -- Client-go: Clients can request protobuf and json and correctly negotiate with the server for JSON for CRD objects, allowing all client libraries to request protobuf if it is available. If an error occurs negotiating a watch with the server, the error is immediately return by the client `Watch()` method instead of being sent as an `Error` event on the watch stream. ([#84692](https://github.com/kubernetes/kubernetes/pull/84692), [@smarterclayton](https://github.com/smarterclayton)) -Renamed FeatureGate RequestManagement to APIPriorityAndFairness. This feature gate is an alpha and has not yet been associated with any actual functionality. ([#85260](https://github.com/kubernetes/kubernetes/pull/85260), [@MikeSpreitzer](https://github.com/MikeSpreitzer)) -- Filter published OpenAPI schema by making nullable, required fields non-required in order to avoid kubectl to wrongly reject null values. ([#85722](https://github.com/kubernetes/kubernetes/pull/85722), [@sttts](https://github.com/sttts)) -- kube-apiserver: fixed a conflict error encountered attempting to delete a pod with `gracePeriodSeconds=0` and a resourceVersion precondition ([#85516](https://github.com/kubernetes/kubernetes/pull/85516), [@michaelgugino](https://github.com/michaelgugino)) -- Use context to check client closed instead of http.CloseNotifier in processing watch request which will reduce 1 goroutine for each request if proto is HTTP/2.x . ([#85408](https://github.com/kubernetes/kubernetes/pull/85408), [@answer1991](https://github.com/answer1991)) -- Reload apiserver SNI certificates from disk every minute ([#84303](https://github.com/kubernetes/kubernetes/pull/84303), [@jackkleeman](https://github.com/jackkleeman)) -- The mutating and validating admission webhook plugins now read configuration from the admissionregistration.k8s.io/v1 API. ([#80883](https://github.com/kubernetes/kubernetes/pull/80883), [@liggitt](https://github.com/liggitt)) -- kube-proxy: a configuration file specified via `--config` is now loaded with strict deserialization, which fails if the config file contains duplicate or unknown fields. This protects against accidentally running with config files that are malformed, mis-indented, or have typos in field names, and getting unexpected behavior. ([#82927](https://github.com/kubernetes/kubernetes/pull/82927), [@obitech](https://github.com/obitech)) -- When registering with a 1.17+ API server, MutatingWebhookConfiguration and ValidatingWebhookConfiguration objects can now request that only `v1` AdmissionReview requests be sent to them. Previously, webhooks were required to support receiving `v1beta1` AdmissionReview requests as well for compatibility with API servers <= 1.15. - - When registering with a 1.17+ API server, a CustomResourceDefinition conversion webhook can now request that only `v1` ConversionReview requests be sent to them. Previously, conversion webhooks were required to support receiving `v1beta1` ConversionReview requests as well for compatibility with API servers <= 1.15. ([#82707](https://github.com/kubernetes/kubernetes/pull/82707), [@liggitt](https://github.com/liggitt)) -- OpenAPI v3 format in CustomResourceDefinition schemas are now documented. ([#85381](https://github.com/kubernetes/kubernetes/pull/85381), [@sttts](https://github.com/sttts)) -- kube-apiserver: Fixed a regression accepting patch requests > 1MB ([#84963](https://github.com/kubernetes/kubernetes/pull/84963), [@liggitt](https://github.com/liggitt)) -- The example API server has renamed its `wardle.k8s.io` API group to `wardle.example.com` ([#81670](https://github.com/kubernetes/kubernetes/pull/81670), [@liggitt](https://github.com/liggitt)) -- CRDs defaulting is promoted to GA. Note: the feature gate CustomResourceDefaulting will be removed in 1.18. ([#84713](https://github.com/kubernetes/kubernetes/pull/84713), [@sttts](https://github.com/sttts)) -- Restores compatibility with <=1.15.x custom resources by not publishing OpenAPI for non-structural custom resource definitions ([#82653](https://github.com/kubernetes/kubernetes/pull/82653), [@liggitt](https://github.com/liggitt)) -- If given an IPv6 bind-address, kube-apiserver will now advertise an IPv6 endpoint for the kubernetes.default service. ([#84727](https://github.com/kubernetes/kubernetes/pull/84727), [@danwinship](https://github.com/danwinship)) -- Add table convertor to component status. ([#85174](https://github.com/kubernetes/kubernetes/pull/85174), [@zhouya0](https://github.com/zhouya0)) -- Scale custom resource unconditionally if resourceVersion is not provided ([#80572](https://github.com/kubernetes/kubernetes/pull/80572), [@knight42](https://github.com/knight42)) -- When the go-client reflector relists, the ResourceVersion list option is set to the reflector's latest synced resource version to ensure the reflector does not "go back in time" and reprocess events older than it has already processed. If the server responds with an HTTP 410 (Gone) status code response, the relist falls back to using `resourceVersion=""`. ([#83520](https://github.com/kubernetes/kubernetes/pull/83520), [@jpbetz](https://github.com/jpbetz)) -- Fix unsafe JSON construction in a number of locations in the codebase ([#81158](https://github.com/kubernetes/kubernetes/pull/81158), [@zouyee](https://github.com/zouyee)) -- Fixes a flaw (CVE-2019-11253) in json/yaml decoding where large or malformed documents could consume excessive server resources. Request bodies for normal API requests (create/delete/update/patch operations of regular resources) are now limited to 3MB. ([#83261](https://github.com/kubernetes/kubernetes/pull/83261), [@liggitt](https://github.com/liggitt)) -- CRDs can have fields named `type` with value `array` and nested array with `items` fields without validation to fall over this. ([#85223](https://github.com/kubernetes/kubernetes/pull/85223), [@sttts](https://github.com/sttts)) - -### Apps - -- Support Service Topology ([#72046](https://github.com/kubernetes/kubernetes/pull/72046), [@m1093782566](https://github.com/m1093782566)) -- Finalizer Protection for Service LoadBalancers is now in GA (enabled by default). This feature ensures the Service resource is not fully deleted until the correlating load balancer resources are deleted. ([#85023](https://github.com/kubernetes/kubernetes/pull/85023), [@MrHohn](https://github.com/MrHohn)) -- Pod process namespace sharing is now Generally Available. The `PodShareProcessNamespace` feature gate is now deprecated and will be removed in Kubernetes 1.19. ([#84356](https://github.com/kubernetes/kubernetes/pull/84356), [@verb](https://github.com/verb)) -- Fix handling tombstones in pod-disruption-budged controller. ([#83951](https://github.com/kubernetes/kubernetes/pull/83951), [@zouyee](https://github.com/zouyee)) -- Fixed the bug that deleted services were processed by EndpointSliceController repeatedly even their cleanup were successful. ([#82996](https://github.com/kubernetes/kubernetes/pull/82996), [@tnqn](https://github.com/tnqn)) -- Add `RequiresExactMatch` for `label.Selector` ([#85048](https://github.com/kubernetes/kubernetes/pull/85048), [@shaloulcy](https://github.com/shaloulcy)) -- Adds a new label to indicate what is managing an EndpointSlice. ([#83965](https://github.com/kubernetes/kubernetes/pull/83965), [@robscott](https://github.com/robscott)) -- Fix handling tombstones in pod-disruption-budged controller. ([#83951](https://github.com/kubernetes/kubernetes/pull/83951), [@zouyee](https://github.com/zouyee)) -- Fixed the bug that deleted services were processed by EndpointSliceController repeatedly even their cleanup were successful. ([#82996](https://github.com/kubernetes/kubernetes/pull/82996), [@tnqn](https://github.com/tnqn)) -- An end-user may choose to request logs without confirming the identity of the backing kubelet. This feature can be disabled by setting the `AllowInsecureBackendProxy` feature-gate to false. ([#83419](https://github.com/kubernetes/kubernetes/pull/83419), [@deads2k](https://github.com/deads2k)) -- When scaling down a ReplicaSet, delete doubled up replicas first, where a "doubled up replica" is defined as one that is on the same node as an active replica belonging to a related ReplicaSet. ReplicaSets are considered "related" if they have a common controller (typically a Deployment). ([#80004](https://github.com/kubernetes/kubernetes/pull/80004), [@Miciah](https://github.com/Miciah)) -- Kube-controller-manager: Fixes bug setting headless service labels on endpoints ([#85361](https://github.com/kubernetes/kubernetes/pull/85361), [@liggitt](https://github.com/liggitt)) -- People can see the right log and note. ([#84637](https://github.com/kubernetes/kubernetes/pull/84637), [@zhipengzuo](https://github.com/zhipengzuo)) -- Clean duplicate GetPodServiceMemberships function ([#83902](https://github.com/kubernetes/kubernetes/pull/83902), [@gongguan](https://github.com/gongguan)) - -### Auth - -- K8s docker config json secrets are now compatible with docker config desktop authentication credentials files ([#82148](https://github.com/kubernetes/kubernetes/pull/82148), [@bbourbie](https://github.com/bbourbie)) -- Kubelet and aggregated API servers now use v1 TokenReview and SubjectAccessReview endpoints to check authentication/authorization. ([#84768](https://github.com/kubernetes/kubernetes/pull/84768), [@liggitt](https://github.com/liggitt)) -- Kube-apiserver can now specify `--authentication-token-webhook-version=v1` or `--authorization-webhook-version=v1` to use `v1` TokenReview and SubjectAccessReview API objects when communicating with authentication and authorization webhooks. ([#84768](https://github.com/kubernetes/kubernetes/pull/84768), [@liggitt](https://github.com/liggitt)) -- Authentication token cache size is increased (from 4k to 32k) to support clusters with many nodes or many namespaces with active service accounts. ([#83643](https://github.com/kubernetes/kubernetes/pull/83643), [@lavalamp](https://github.com/lavalamp)) -- Apiservers based on k8s.io/apiserver with delegated authn based on cluster authentication will automatically update to new authentication information when the authoritative configmap is updated. ([#85004](https://github.com/kubernetes/kubernetes/pull/85004), [@deads2k](https://github.com/deads2k)) -- Configmaps/extension-apiserver-authentication in kube-system is continuously updated by kube-apiservers, instead of just at apiserver start ([#82705](https://github.com/kubernetes/kubernetes/pull/82705), [@deads2k](https://github.com/deads2k)) - -### CLI -- Fixed kubectl endpointslice output for get requests ([#82603](https://github.com/kubernetes/kubernetes/pull/82603), [@robscott](https://github.com/robscott)) -- Gives the right error message when using `kubectl delete` a wrong resource. ([#83825](https://github.com/kubernetes/kubernetes/pull/83825), [@zhouya0](https://github.com/zhouya0)) -- If a bad flag is supplied to a kubectl command, only a tip to run `--help` is printed, instead of the usage menu. Usage menu is printed upon running `kubectl command --help`. ([#82423](https://github.com/kubernetes/kubernetes/pull/82423), [@sallyom](https://github.com/sallyom)) -- Commands like `kubectl apply` now return errors if schema-invalid annotations are specified, rather than silently dropping the entire annotations section. ([#83552](https://github.com/kubernetes/kubernetes/pull/83552), [@liggitt](https://github.com/liggitt)) -- Fixes spurious 0 revisions listed when running `kubectl rollout history` for a StatefulSet ([#82643](https://github.com/kubernetes/kubernetes/pull/82643), [@ZP-AlwaysWin](https://github.com/ZP-AlwaysWin)) -- Correct a reference to a not/no longer used kustomize subcommand in the documentation ([#82535](https://github.com/kubernetes/kubernetes/pull/82535), [@demobox](https://github.com/demobox)) -- Kubectl set resources will no longer return an error if passed an empty change for a resource. kubectl set subject will no longer return an error if passed an empty change for a resource. ([#85490](https://github.com/kubernetes/kubernetes/pull/85490), [@sallyom](https://github.com/sallyom)) -- Kubectl: --resource-version now works properly in label/annotate/set selector commands when racing with other clients to update the target object ([#85285](https://github.com/kubernetes/kubernetes/pull/85285), [@liggitt](https://github.com/liggitt)) -- The `--certificate-authority` flag now correctly overrides existing skip-TLS or CA data settings in the kubeconfig file ([#83547](https://github.com/kubernetes/kubernetes/pull/83547), [@liggitt](https://github.com/liggitt)) -### Cloud Provider -- Azure: update disk lock logic per vm during attach/detach to allow concurrent updates for different nodes. ([#85115](https://github.com/kubernetes/kubernetes/pull/85115), [@aramase](https://github.com/aramase)) -- Fix vmss dirty cache issue in disk attach/detach on vmss node ([#85158](https://github.com/kubernetes/kubernetes/pull/85158), [@andyzhangx](https://github.com/andyzhangx)) -- Fix race condition when attach/delete azure disk in same time ([#84917](https://github.com/kubernetes/kubernetes/pull/84917), [@andyzhangx](https://github.com/andyzhangx)) -- Change GCP ILB firewall names to contain the `k8s-fw-` prefix like the rest of the firewall rules. This is needed for consistency and also for other components to identify the firewall rule as k8s/service-controller managed. ([#84622](https://github.com/kubernetes/kubernetes/pull/84622), [@prameshj](https://github.com/prameshj)) -- Ensure health probes are created for local traffic policy UDP services on Azure ([#84802](https://github.com/kubernetes/kubernetes/pull/84802), [@feiskyer](https://github.com/feiskyer)) -- Openstack: Do not delete managed LB in case of security group reconciliation errors ([#82264](https://github.com/kubernetes/kubernetes/pull/82264), [@multi-io](https://github.com/multi-io)) -- Fix aggressive VM calls for Azure VMSS ([#83102](https://github.com/kubernetes/kubernetes/pull/83102), [@feiskyer](https://github.com/feiskyer)) -- Fix: azure disk detach failure if node not exists ([#82640](https://github.com/kubernetes/kubernetes/pull/82640), [@andyzhangx](https://github.com/andyzhangx)) -- Add azure disk encryption(SSE+CMK) support ([#84605](https://github.com/kubernetes/kubernetes/pull/84605), [@andyzhangx](https://github.com/andyzhangx)) -- Update Azure SDK versions to v35.0.0 ([#84543](https://github.com/kubernetes/kubernetes/pull/84543), [@andyzhangx](https://github.com/andyzhangx)) -- Azure: Add allow unsafe read from cache ([#83685](https://github.com/kubernetes/kubernetes/pull/83685), [@aramase](https://github.com/aramase)) -- Reduces the number of calls made to the Azure API when requesting the instance view of a virtual machine scale set node. ([#82496](https://github.com/kubernetes/kubernetes/pull/82496), [@hasheddan](https://github.com/hasheddan)) -- Added cloud operation count metrics to azure cloud controller manager. ([#82574](https://github.com/kubernetes/kubernetes/pull/82574), [@kkmsft](https://github.com/kkmsft)) -- On AWS nodes with multiple network interfaces, kubelet should now more reliably report the same primary node IP. ([#80747](https://github.com/kubernetes/kubernetes/pull/80747), [@danwinship](https://github.com/danwinship)) -- Update Azure load balancer to prevent orphaned public IP addresses ([#82890](https://github.com/kubernetes/kubernetes/pull/82890), [@chewong](https://github.com/chewong)) -### Cluster Lifecycle -- Kubeadm alpha certs command now skip missing files ([#85092](https://github.com/kubernetes/kubernetes/pull/85092), [@fabriziopandini](https://github.com/fabriziopandini)) -- Kubeadm: the command "kubeadm token create" now has a "--certificate-key" flag that can be used for the formation of join commands for control-planes with automatic copy of certificates ([#84591](https://github.com/kubernetes/kubernetes/pull/84591), [@TheLastProject](https://github.com/TheLastProject)) -- Kubeadm: Fix a bug where kubeadm cannot parse kubelet's version if the latter dumps logs on the standard error. ([#85351](https://github.com/kubernetes/kubernetes/pull/85351), [@rosti](https://github.com/rosti)) -- Kubeadm: added retry to all the calls to the etcd API so kubeadm will be more resilient to network glitches ([#85201](https://github.com/kubernetes/kubernetes/pull/85201), [@fabriziopandini](https://github.com/fabriziopandini)) -- Fixes a bug in kubeadm that caused init and join to hang indefinitely in specific conditions. ([#85156](https://github.com/kubernetes/kubernetes/pull/85156), [@chuckha](https://github.com/chuckha)) -- Kubeadm now includes CoreDNS version 1.6.5 - - `kubernetes` plugin adds metrics to measure kubernetes control plane latency. - - the `health` plugin now includes the `lameduck` option by default, which waits for a duration before shutting down. ([#85109](https://github.com/kubernetes/kubernetes/pull/85109), [@rajansandeep](https://github.com/rajansandeep)) -- Fixed bug when using kubeadm alpha certs commands with clusters using external etcd ([#85091](https://github.com/kubernetes/kubernetes/pull/85091), [@fabriziopandini](https://github.com/fabriziopandini)) -- Kubeadm no longer defaults or validates the component configs of the kubelet or kube-proxy ([#79223](https://github.com/kubernetes/kubernetes/pull/79223), [@rosti](https://github.com/rosti)) -- Kubeadm: remove the deprecated `--cri-socket` flag for `kubeadm upgrade apply`. The flag has been deprecated since v1.14. ([#85044](https://github.com/kubernetes/kubernetes/pull/85044), [@neolit123](https://github.com/neolit123)) -- Kubeadm: prevent potential hanging of commands such as "kubeadm reset" if the apiserver endpoint is not reachable. ([#84648](https://github.com/kubernetes/kubernetes/pull/84648), [@neolit123](https://github.com/neolit123)) -- Kubeadm: fix skipped etcd upgrade on secondary control-plane nodes when the command `kubeadm upgrade node` is used. ([#85024](https://github.com/kubernetes/kubernetes/pull/85024), [@neolit123](https://github.com/neolit123)) -- Kubeadm: fix an issue with the kube-proxy container env. variables ([#84888](https://github.com/kubernetes/kubernetes/pull/84888), [@neolit123](https://github.com/neolit123)) -- Utilize diagnostics tool to dump GKE windows test logs ([#83517](https://github.com/kubernetes/kubernetes/pull/83517), [@YangLu1031](https://github.com/YangLu1031)) -- Kubeadm: always mount the kube-controller-manager hostPath volume that is given by the `--flex-volume-plugin-dir` flag. ([#84468](https://github.com/kubernetes/kubernetes/pull/84468), [@neolit123](https://github.com/neolit123)) -- Update Cluster Autoscaler version to 1.16.2 (CA release docs: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.16.2) ([#84038](https://github.com/kubernetes/kubernetes/pull/84038), [@losipiuk](https://github.com/losipiuk)) -- Kubeadm no longer removes /etc/cni/net.d as it does not install it. Users should remove files from it manually or rely on the component that created them ([#83950](https://github.com/kubernetes/kubernetes/pull/83950), [@yastij](https://github.com/yastij)) -- Kubeadm: fix wrong default value for the `upgrade node --certificate-renewal` flag. ([#83528](https://github.com/kubernetes/kubernetes/pull/83528), [@neolit123](https://github.com/neolit123)) -- Bump metrics-server to v0.3.5 ([#83015](https://github.com/kubernetes/kubernetes/pull/83015), [@olagacek](https://github.com/olagacek)) -- Dashboard: disable the dashboard Deployment on non-Linux nodes. This step is required to support Windows worker nodes. ([#82975](https://github.com/kubernetes/kubernetes/pull/82975), [@wawa0210](https://github.com/wawa0210)) -- Fixes a panic in kube-controller-manager cleaning up bootstrap tokens ([#82887](https://github.com/kubernetes/kubernetes/pull/82887), [@tedyu](https://github.com/tedyu)) -- Kubeadm: add a new `kubelet-finalize` phase as part of the `init` workflow and an experimental sub-phase to enable automatic kubelet client certificate rotation on primary control-plane nodes. - - Prior to 1.17 and for existing nodes created by `kubeadm init` where kubelet client certificate rotation is desired, you must modify "/etc/kubernetes/kubelet.conf" to point to the PEM symlink for rotation: -`client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem` and `client-key: /var/lib/kubelet/pki/kubelet-client-current.pem`, replacing the embedded client certificate and key. ([#84118](https://github.com/kubernetes/kubernetes/pull/84118), [@neolit123](https://github.com/neolit123)) -- Kubeadm: add a upgrade health check that deploys a Job ([#81319](https://github.com/kubernetes/kubernetes/pull/81319), [@neolit123](https://github.com/neolit123)) -- Kubeadm now supports automatic calculations of dual-stack node cidr masks to kube-controller-manager. ([#85609](https://github.com/kubernetes/kubernetes/pull/85609), [@Arvinderpal](https://github.com/Arvinderpal)) -- Kubeadm: reset raises warnings if it cannot delete folders ([#85265](https://github.com/kubernetes/kubernetes/pull/85265), [@SataQiu](https://github.com/SataQiu)) -- Kubeadm: enable the usage of the secure kube-scheduler and kube-controller-manager ports for health checks. For kube-scheduler was 10251, becomes 10259. For kube-controller-manager was 10252, becomes 10257. ([#85043](https://github.com/kubernetes/kubernetes/pull/85043), [@neolit123](https://github.com/neolit123)) -- A new kubelet command line option, `--reserved-cpus`, is introduced to explicitly define the CPU list that will be reserved for system. For example, if `--reserved-cpus=0,1,2,3` is specified, then cpu 0,1,2,3 will be reserved for the system. On a system with 24 CPUs, the user may specify `isolcpus=4-23` for the kernel option and use CPU 4-23 for the user containers. ([#83592](https://github.com/kubernetes/kubernetes/pull/83592), [@jianzzha](https://github.com/jianzzha)) -- Kubelet: a configuration file specified via `--config` is now loaded with strict deserialization, which fails if the config file contains duplicate or unknown fields. This protects against accidentally running with config files that are malformed, mis-indented, or have typos in field names, and getting unexpected behavior. ([#83204](https://github.com/kubernetes/kubernetes/pull/83204), [@obitech](https://github.com/obitech)) -- Kubeadm now propagates proxy environment variables to kube-proxy ([#84559](https://github.com/kubernetes/kubernetes/pull/84559), [@yastij](https://github.com/yastij)) -- Update the latest validated version of Docker to 19.03 ([#84476](https://github.com/kubernetes/kubernetes/pull/84476), [@neolit123](https://github.com/neolit123)) -- Update to Ingress-GCE v1.6.1 ([#84018](https://github.com/kubernetes/kubernetes/pull/84018), [@rramkumar1](https://github.com/rramkumar1)) -- Kubeadm: enhance certs check-expiration to show the expiration info of related CAs ([#83932](https://github.com/kubernetes/kubernetes/pull/83932), [@SataQiu](https://github.com/SataQiu)) -- Kubeadm: implemented structured output of 'kubeadm token list' in JSON, YAML, Go template and JsonPath formats ([#78764](https://github.com/kubernetes/kubernetes/pull/78764), [@bart0sh](https://github.com/bart0sh)) -- Kubeadm: add support for `127.0.0.1` as advertise address. kubeadm will automatically replace this value with matching global unicast IP address on the loopback interface. ([#83475](https://github.com/kubernetes/kubernetes/pull/83475), [@fabriziopandini](https://github.com/fabriziopandini)) -- Kube-scheduler: a configuration file specified via `--config` is now loaded with strict deserialization, which fails if the config file contains duplicate or unknown fields. This protects against accidentally running with config files that are malformed, mis-indented, or have typos in field names, and getting unexpected behavior. ([#83030](https://github.com/kubernetes/kubernetes/pull/83030), [@obitech](https://github.com/obitech)) -- Kubeadm: use the `--service-cluster-ip-range` flag to init or use the ServiceSubnet field in the kubeadm config to pass a comma separated list of Service CIDRs. ([#82473](https://github.com/kubernetes/kubernetes/pull/82473), [@Arvinderpal](https://github.com/Arvinderpal)) -- Update crictl to v1.16.1. ([#82856](https://github.com/kubernetes/kubernetes/pull/82856), [@Random-Liu](https://github.com/Random-Liu)) -- Bump addon-resizer to 1.8.7 to fix issues with using deprecated extensions APIs ([#85864](https://github.com/kubernetes/kubernetes/pull/85864), [@liggitt](https://github.com/liggitt)) -- Simple script based hyperkube image that bundles all the necessary binaries. This is an equivalent replacement for the image based on the go based hyperkube command + image. ([#84662](https://github.com/kubernetes/kubernetes/pull/84662), [@dims](https://github.com/dims)) -- Hyperkube will now be available in a new Github repository and will not be included in the kubernetes release from 1.17 onwards ([#83454](https://github.com/kubernetes/kubernetes/pull/83454), [@dims](https://github.com/dims)) -- Remove prometheus cluster monitoring addon from kube-up ([#83442](https://github.com/kubernetes/kubernetes/pull/83442), [@serathius](https://github.com/serathius)) -- SourcesReady provides the readiness of kubelet configuration sources such as apiserver update readiness. ([#81344](https://github.com/kubernetes/kubernetes/pull/81344), [@zouyee](https://github.com/zouyee)) -- This PR sets the --cluster-dns flag value to kube-dns service IP whether or not NodeLocal DNSCache is enabled. NodeLocal DNSCache will listen on both the link-local as well as the service IP. ([#84383](https://github.com/kubernetes/kubernetes/pull/84383), [@prameshj](https://github.com/prameshj)) -- kube-dns add-on: - - All containers are now being executed under more restrictive privileges. - - Most of the containers now run as non-root user and has the root filesystem set as read-only. - - The remaining container running as root only has the minimum Linux capabilities it requires to run. - - Privilege escalation has been disabled for all containers. ([#82347](https://github.com/kubernetes/kubernetes/pull/82347), [@pjbgf](https://github.com/pjbgf)) -- Kubernetes no longer monitors firewalld. On systems using firewalld for firewall - maintenance, kube-proxy will take slightly longer to recover from disruptive - firewalld operations that delete kube-proxy's iptables rules. - - As a side effect of these changes, kube-proxy's - `sync_proxy_rules_last_timestamp_seconds` metric no longer behaves the - way it used to; now it will only change when services or endpoints actually - change, rather than reliably updating every 60 seconds (or whatever). If you - are trying to monitor for whether iptables updates are failing, the - `sync_proxy_rules_iptables_restore_failures_total` metric may be more useful. ([#81517](https://github.com/kubernetes/kubernetes/pull/81517), [@danwinship](https://github.com/danwinship)) -### Instrumentation -- Bump version of event-exporter to 0.3.1, to switch it to protobuf. ([#83396](https://github.com/kubernetes/kubernetes/pull/83396), [@loburm](https://github.com/loburm)) -- Bumps metrics-server version to v0.3.6 with following bugfix: - - Don't break metric storage when duplicate pod metrics encountered causing hpa to fail ([#83907](https://github.com/kubernetes/kubernetes/pull/83907), [@olagacek](https://github.com/olagacek)) -- addons: elasticsearch discovery supports IPv6 ([#85543](https://github.com/kubernetes/kubernetes/pull/85543), [@SataQiu](https://github.com/SataQiu)) -- Update Cluster Autoscaler to 1.17.0; changelog: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.17.0 ([#85610](https://github.com/kubernetes/kubernetes/pull/85610), [@losipiuk](https://github.com/losipiuk)) -### Network -- The official kube-proxy image (used by kubeadm, among other things) is now compatible with systems running iptables 1.8 in "nft" mode, and will autodetect which mode it should use. ([#82966](https://github.com/kubernetes/kubernetes/pull/82966), [@danwinship](https://github.com/danwinship)) -- Kubenet: added HostPort IPv6 support. HostPortManager: operates only with one IP family, failing if receives port mapping entries with different IP families. HostPortSyncer: operates only with one IP family, skipping portmap entries with different IP families ([#80854](https://github.com/kubernetes/kubernetes/pull/80854), [@aojea](https://github.com/aojea)) -- Kube-proxy now supports DualStack feature with EndpointSlices and IPVS. ([#85246](https://github.com/kubernetes/kubernetes/pull/85246), [@robscott](https://github.com/robscott)) -- Remove redundant API validation when using Service Topology with externalTrafficPolicy=Local ([#85346](https://github.com/kubernetes/kubernetes/pull/85346), [@andrewsykim](https://github.com/andrewsykim)) -- Update github.com/vishvananda/netlink to v1.0.0 ([#83576](https://github.com/kubernetes/kubernetes/pull/83576), [@andrewsykim](https://github.com/andrewsykim)) -- `-- kube-controller-manager` - `--node-cidr-mask-size-ipv4 int32` Default: 24. Mask size for IPv4 node-cidr in dual-stack cluster. -`--node-cidr-mask-size-ipv6 int32` Default: 64. Mask size for IPv6 node-cidr in dual-stack cluster. - - These 2 flags can be used only for dual-stack clusters. For non dual-stack clusters, continue to use `--node-cidr-mask-size` flag to configure the mask size. - - The default node cidr mask size for IPv6 was 24 which is now changed to 64. ([#79993](https://github.com/kubernetes/kubernetes/pull/79993), [@aramase](https://github.com/aramase)) -- deprecate cleanup-ipvs flag ([#83832](https://github.com/kubernetes/kubernetes/pull/83832), [@gongguan](https://github.com/gongguan)) -- Kube-proxy: emits a warning when a malformed component config file is used with v1alpha1. ([#84143](https://github.com/kubernetes/kubernetes/pull/84143), [@phenixblue](https://github.com/phenixblue)) -- Set config.BindAddress to IPv4 address `127.0.0.1` if not specified ([#83822](https://github.com/kubernetes/kubernetes/pull/83822), [@zouyee](https://github.com/zouyee)) -- Updated kube-proxy ipvs README with correct grep argument to list loaded ipvs modules ([#83677](https://github.com/kubernetes/kubernetes/pull/83677), [@pete911](https://github.com/pete911)) -- The userspace mode of kube-proxy no longer confusingly logs messages about deleting endpoints that it is actually adding. ([#83644](https://github.com/kubernetes/kubernetes/pull/83644), [@danwinship](https://github.com/danwinship)) -- Kube-proxy iptables probabilities are now more granular and will result in better distribution beyond 319 endpoints. ([#83599](https://github.com/kubernetes/kubernetes/pull/83599), [@robscott](https://github.com/robscott)) -- Significant kube-proxy performance improvements for non UDP ports. ([#83208](https://github.com/kubernetes/kubernetes/pull/83208), [@robscott](https://github.com/robscott)) -- Improved performance of kube-proxy with EndpointSlice enabled with more efficient sorting. ([#83035](https://github.com/kubernetes/kubernetes/pull/83035), [@robscott](https://github.com/robscott)) -- EndpointSlices are now beta for better Network Endpoint performance at scale. ([#84390](https://github.com/kubernetes/kubernetes/pull/84390), [@robscott](https://github.com/robscott)) -- Updated EndpointSlices to use PublishNotReadyAddresses from Services. ([#84573](https://github.com/kubernetes/kubernetes/pull/84573), [@robscott](https://github.com/robscott)) -- When upgrading to 1.17 with a cluster with EndpointSlices enabled, the `endpointslice.kubernetes.io/managed-by` label needs to be set on each EndpointSlice. ([#85359](https://github.com/kubernetes/kubernetes/pull/85359), [@robscott](https://github.com/robscott)) -- Adds FQDN addressType support for EndpointSlice. ([#84091](https://github.com/kubernetes/kubernetes/pull/84091), [@robscott](https://github.com/robscott)) -- Fix incorrect network policy description suggesting that pods are isolated when a network policy has no rules of a given type ([#84194](https://github.com/kubernetes/kubernetes/pull/84194), [@jackkleeman](https://github.com/jackkleeman)) -- Fix bug where EndpointSlice controller would attempt to modify shared objects. ([#85368](https://github.com/kubernetes/kubernetes/pull/85368), [@robscott](https://github.com/robscott)) -- Splitting IP address type into IPv4 and IPv6 for EndpointSlices ([#84971](https://github.com/kubernetes/kubernetes/pull/84971), [@robscott](https://github.com/robscott)) -- Added appProtocol field to EndpointSlice Port ([#83815](https://github.com/kubernetes/kubernetes/pull/83815), [@howardjohn](https://github.com/howardjohn)) -- The docker container runtime now enforces a 220 second timeout on container network operations. ([#71653](https://github.com/kubernetes/kubernetes/pull/71653), [@liucimin](https://github.com/liucimin)) -- Fix panic in kubelet when running IPv4/IPv6 dual-stack mode with a CNI plugin ([#82508](https://github.com/kubernetes/kubernetes/pull/82508), [@aanm](https://github.com/aanm)) -- EndpointSlice hostname is now set in the same conditions Endpoints hostname is. ([#84207](https://github.com/kubernetes/kubernetes/pull/84207), [@robscott](https://github.com/robscott)) -- Improving the performance of Endpoint and EndpointSlice controllers by caching Service Selectors ([#84280](https://github.com/kubernetes/kubernetes/pull/84280), [@gongguan](https://github.com/gongguan)) -- Significant kube-proxy performance improvements when using Endpoint Slices at scale. ([#83206](https://github.com/kubernetes/kubernetes/pull/83206), [@robscott](https://github.com/robscott)) - -### Node -- Mirror pods now include an ownerReference for the node that created them. ([#84485](https://github.com/kubernetes/kubernetes/pull/84485), [@tallclair](https://github.com/tallclair)) -- Fixed a bug in the single-numa-policy of the TopologyManager. Previously, best-effort pods would result in a terminated state with a TopologyAffinity error. Now they will run as expected. ([#83777](https://github.com/kubernetes/kubernetes/pull/83777), [@lmdaly](https://github.com/lmdaly)) -- Fixed a bug in the single-numa-node policy of the TopologyManager. Previously, pods that only requested CPU resources and did not request any third-party devices would fail to launch with a TopologyAffinity error. Now they will launch successfully. ([#83697](https://github.com/kubernetes/kubernetes/pull/83697), [@klueska](https://github.com/klueska)) -- Fix error where metrics related to dynamic kubelet config isn't registered ([#83184](https://github.com/kubernetes/kubernetes/pull/83184), [@odinuge](https://github.com/odinuge)) -- If container fails because ContainerCannotRun, do not utilize the FallbackToLogsOnError TerminationMessagePolicy, as it masks more useful logs. ([#81280](https://github.com/kubernetes/kubernetes/pull/81280), [@yqwang-ms](https://github.com/yqwang-ms)) -- Use online nodes instead of possible nodes when discovering available NUMA nodes ([#83196](https://github.com/kubernetes/kubernetes/pull/83196), [@zouyee](https://github.com/zouyee)) -- Use IPv4 in wincat port forward. ([#83036](https://github.com/kubernetes/kubernetes/pull/83036), [@liyanhui1228](https://github.com/liyanhui1228)) -- Single static pod files and pod files from http endpoints cannot be larger than 10 MB. HTTP probe payloads are now truncated to 10KB. ([#82669](https://github.com/kubernetes/kubernetes/pull/82669), [@rphillips](https://github.com/rphillips)) -- Limit the body length of exec readiness/liveness probes. remote CRIs and Docker shim read a max of 16MB output of which the exec probe itself inspects 10kb. ([#82514](https://github.com/kubernetes/kubernetes/pull/82514), [@dims](https://github.com/dims)) -- Kubelet: Added kubelet serving certificate metric `server_rotation_seconds` which is a histogram reporting the age of a just rotated serving certificate in seconds. ([#84534](https://github.com/kubernetes/kubernetes/pull/84534), [@sambdavidson](https://github.com/sambdavidson)) -- Reduce default NodeStatusReportFrequency to 5 minutes. With this change, periodic node status updates will be send every 5m if node status doesn't change (otherwise they are still send with 10s). - - Bump NodeProblemDetector version to v0.8.0 to reduce forced NodeStatus updates frequency to 5 minutes. ([#84007](https://github.com/kubernetes/kubernetes/pull/84007), [@wojtek-t](https://github.com/wojtek-t)) -- The topology manager aligns resources for pods of all QoS classes with respect to NUMA locality, not just Guaranteed QoS pods. ([#83492](https://github.com/kubernetes/kubernetes/pull/83492), [@ConnorDoyle](https://github.com/ConnorDoyle)) -- Fix a bug that a node Lease object may have been created without OwnerReference. ([#84998](https://github.com/kubernetes/kubernetes/pull/84998), [@wojtek-t](https://github.com/wojtek-t)) -- External facing APIs in plugin registration and device plugin packages are now available under k8s.io/kubelet/pkg/apis/ ([#83551](https://github.com/kubernetes/kubernetes/pull/83551), [@dims](https://github.com/dims)) -### Release -- Added the `crictl` Windows binaries as well as the Linux 32bit binary to the release archives ([#83944](https://github.com/kubernetes/kubernetes/pull/83944), [@saschagrunert](https://github.com/saschagrunert)) -- Bumps the minimum version of Go required for building Kubernetes to 1.12.4. ([#83596](https://github.com/kubernetes/kubernetes/pull/83596), [@jktomer](https://github.com/jktomer)) -- The deprecated mondo `kubernetes-test` tarball is no longer built. Users running Kubernetes e2e tests should use the `kubernetes-test-portable` and `kubernetes-test-{OS}-{ARCH}` tarballs instead. ([#83093](https://github.com/kubernetes/kubernetes/pull/83093), [@ixdy](https://github.com/ixdy)) - -### Scheduling - -- Only validate duplication of the RequestedToCapacityRatio custom priority and allow other custom predicates/priorities ([#84646](https://github.com/kubernetes/kubernetes/pull/84646), [@liu-cong](https://github.com/liu-cong)) -- Scheduler policy configs can no longer be declared multiple times ([#83963](https://github.com/kubernetes/kubernetes/pull/83963), [@damemi](https://github.com/damemi)) -- TaintNodesByCondition was graduated to GA, CheckNodeMemoryPressure, CheckNodePIDPressure, CheckNodeDiskPressure, CheckNodeCondition were accidentally removed since 1.12, the replacement is to use CheckNodeUnschedulablePred ([#84152](https://github.com/kubernetes/kubernetes/pull/84152), [@draveness](https://github.com/draveness)) -- [migration phase 1] PodFitsHostPorts as filter plugin ([#83659](https://github.com/kubernetes/kubernetes/pull/83659), [@wgliang](https://github.com/wgliang)) -- [migration phase 1] PodFitsResources as framework plugin ([#83650](https://github.com/kubernetes/kubernetes/pull/83650), [@wgliang](https://github.com/wgliang)) -- [migration phase 1] PodMatchNodeSelector/NodAffinity as filter plugin ([#83660](https://github.com/kubernetes/kubernetes/pull/83660), [@wgliang](https://github.com/wgliang)) -- Add more tracing steps in generic_scheduler ([#83539](https://github.com/kubernetes/kubernetes/pull/83539), [@wgliang](https://github.com/wgliang)) -- [migration phase 1] PodFitsHost as filter plugin ([#83662](https://github.com/kubernetes/kubernetes/pull/83662), [@wgliang](https://github.com/wgliang)) -- Fixed a scheduler panic when using PodAffinity. ([#82841](https://github.com/kubernetes/kubernetes/pull/82841), [@Huang-Wei](https://github.com/Huang-Wei)) -- Take the context as the first argument of Schedule. ([#82119](https://github.com/kubernetes/kubernetes/pull/82119), [@wgliang](https://github.com/wgliang)) -- Fixed an issue that the correct PluginConfig.Args is not passed to the corresponding PluginFactory in kube-scheduler when multiple PluginConfig items are defined. ([#82483](https://github.com/kubernetes/kubernetes/pull/82483), [@everpeace](https://github.com/everpeace)) -- Profiling is enabled by default in the scheduler ([#84835](https://github.com/kubernetes/kubernetes/pull/84835), [@denkensk](https://github.com/denkensk)) -- Scheduler now reports metrics on cache size including nodes, pods, and assumed pods ([#83508](https://github.com/kubernetes/kubernetes/pull/83508), [@damemi](https://github.com/damemi)) -- User can now use component config to configure NodeLabel plugin for the scheduler framework. ([#84297](https://github.com/kubernetes/kubernetes/pull/84297), [@liu-cong](https://github.com/liu-cong)) -- Optimize inter-pod affinity preferredDuringSchedulingIgnoredDuringExecution type, up to 4x in some cases. ([#84264](https://github.com/kubernetes/kubernetes/pull/84264), [@ahg-g](https://github.com/ahg-g)) -- Filter plugin for cloud provider storage predicate ([#84148](https://github.com/kubernetes/kubernetes/pull/84148), [@gongguan](https://github.com/gongguan)) -- Refactor scheduler's framework permit API. ([#83756](https://github.com/kubernetes/kubernetes/pull/83756), [@hex108](https://github.com/hex108)) -- Add incoming pods metrics to scheduler queue. ([#83577](https://github.com/kubernetes/kubernetes/pull/83577), [@liu-cong](https://github.com/liu-cong)) -- Allow dynamically set glog logging level of kube-scheduler ([#83910](https://github.com/kubernetes/kubernetes/pull/83910), [@mrkm4ntr](https://github.com/mrkm4ntr)) -- Add latency and request count metrics for scheduler framework. ([#83569](https://github.com/kubernetes/kubernetes/pull/83569), [@liu-cong](https://github.com/liu-cong)) -- Expose SharedInformerFactory in the framework handle ([#83663](https://github.com/kubernetes/kubernetes/pull/83663), [@draveness](https://github.com/draveness)) -- Add per-pod scheduling metrics across 1 or more schedule attempts. ([#83674](https://github.com/kubernetes/kubernetes/pull/83674), [@liu-cong](https://github.com/liu-cong)) -- Add `podInitialBackoffDurationSeconds` and `podMaxBackoffDurationSeconds` to the scheduler config API ([#81263](https://github.com/kubernetes/kubernetes/pull/81263), [@draveness](https://github.com/draveness)) -- Expose kubernetes client in the scheduling framework handle. ([#82432](https://github.com/kubernetes/kubernetes/pull/82432), [@draveness](https://github.com/draveness)) -- Remove MaxPriority in the scheduler API, please use MaxNodeScore or MaxExtenderPriority instead. ([#83386](https://github.com/kubernetes/kubernetes/pull/83386), [@draveness](https://github.com/draveness)) -- Consolidate ScoreWithNormalizePlugin into the ScorePlugin interface ([#83042](https://github.com/kubernetes/kubernetes/pull/83042), [@draveness](https://github.com/draveness)) -- New APIs to allow adding/removing pods from pre-calculated prefilter state in the scheduling framework ([#82912](https://github.com/kubernetes/kubernetes/pull/82912), [@ahg-g](https://github.com/ahg-g)) -- Added Clone method to the scheduling framework's PluginContext and ContextData. ([#82951](https://github.com/kubernetes/kubernetes/pull/82951), [@ahg-g](https://github.com/ahg-g)) -- Modified the scheduling framework's Filter API. ([#82842](https://github.com/kubernetes/kubernetes/pull/82842), [@ahg-g](https://github.com/ahg-g)) -- Critical pods can now be created in namespaces other than kube-system. To limit critical pods to the kube-system namespace, cluster admins should create an admission configuration file limiting critical pods by default, and a matching quota object in the `kube-system` namespace permitting critical pods in that namespace. See https://kubernetes.io/docs/concepts/policy/resource-quotas/#limit-priority-class-consumption-by-default for details. ([#76310](https://github.com/kubernetes/kubernetes/pull/76310), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla)) -- Scheduler ComponentConfig fields are now pointers ([#83619](https://github.com/kubernetes/kubernetes/pull/83619), [@damemi](https://github.com/damemi)) -- Scheduler Policy API has a new recommended apiVersion `apiVersion: kubescheduler.config.k8s.io/v1` which is consistent with the scheduler API group `kubescheduler.config.k8s.io`. It holds the same API as the old apiVersion `apiVersion: v1`. ([#83578](https://github.com/kubernetes/kubernetes/pull/83578), [@Huang-Wei](https://github.com/Huang-Wei)) -- Rename PluginContext to CycleState in the scheduling framework ([#83430](https://github.com/kubernetes/kubernetes/pull/83430), [@draveness](https://github.com/draveness)) -- Some scheduler extender API fields are moved from `pkg/scheduler/api` to `pkg/scheduler/apis/extender/v1`. ([#83262](https://github.com/kubernetes/kubernetes/pull/83262), [@Huang-Wei](https://github.com/Huang-Wei)) -- Kube-scheduler: emits a warning when a malformed component config file is used with v1alpha1. ([#84129](https://github.com/kubernetes/kubernetes/pull/84129), [@obitech](https://github.com/obitech)) -- Kube-scheduler now falls back to emitting events using core/v1 Events when events.k8s.io/v1beta1 is disabled. ([#83692](https://github.com/kubernetes/kubernetes/pull/83692), [@yastij](https://github.com/yastij)) -- Expand scheduler priority functions and scheduling framework plugins' node score range to [0, 100]. Note: this change is internal and does not affect extender and RequestedToCapacityRatio custom priority, which are still expected to provide a [0, 10] range. ([#83522](https://github.com/kubernetes/kubernetes/pull/83522), [@draveness](https://github.com/draveness)) - -### Storage -- Bump CSI version to 1.2.0 ([#84832](https://github.com/kubernetes/kubernetes/pull/84832), [@gnufied](https://github.com/gnufied)) -- CSI Migration: Fixes issue where all volumes with the same inline volume inner spec name were staged in the same path. Migrated inline volumes are now staged at a unique path per unique volume. ([#84754](https://github.com/kubernetes/kubernetes/pull/84754), [@davidz627](https://github.com/davidz627)) -- CSI Migration: GCE PD access mode now reflects read only status of inline volumes - this allows multi-attach for read only many PDs ([#84809](https://github.com/kubernetes/kubernetes/pull/84809), [@davidz627](https://github.com/davidz627)) -- CSI detach timeout increased from 10 seconds to 2 minutes ([#84321](https://github.com/kubernetes/kubernetes/pull/84321), [@cduchesne](https://github.com/cduchesne)) -- Ceph RBD volume plugin now does not use any keyring (`/etc/ceph/ceph.client.lvs01cinder.keyring`, `/etc/ceph/ceph.keyring`, `/etc/ceph/keyring`, `/etc/ceph/keyring.bin`) for authentication. Ceph user credentials must be provided in PersistentVolume objects and referred Secrets. ([#75588](https://github.com/kubernetes/kubernetes/pull/75588), [@smileusd](https://github.com/smileusd)) -- Validate Gluster IP ([#83104](https://github.com/kubernetes/kubernetes/pull/83104), [@zouyee](https://github.com/zouyee)) -- PersistentVolumeLabel admission plugin, responsible for labeling `PersistentVolumes` with topology labels, now does not overwrite existing labels on PVs that were dynamically provisioned. It trusts the dynamic provisioning that it provided the correct labels to the `PersistentVolume`, saving one potentially expensive cloud API call. `PersistentVolumes` created manually by users are labelled by the admission plugin in the same way as before. ([#82830](https://github.com/kubernetes/kubernetes/pull/82830), [@jsafrane](https://github.com/jsafrane)) - -- Existing PVs are converted to use volume topology if migration is enabled. ([#83394](https://github.com/kubernetes/kubernetes/pull/83394), [@bertinatto](https://github.com/bertinatto)) -- local: support local filesystem volume with block resource reconstruction ([#84218](https://github.com/kubernetes/kubernetes/pull/84218), [@cofyc](https://github.com/cofyc)) -- Fixed binding of block PersistentVolumes / PersistentVolumeClaims when BlockVolume feature is off. ([#84049](https://github.com/kubernetes/kubernetes/pull/84049), [@jsafrane](https://github.com/jsafrane)) -- Report non-confusing error for negative storage size in PVC spec. ([#82759](https://github.com/kubernetes/kubernetes/pull/82759), [@sttts](https://github.com/sttts)) -- Fixed "requested device X but found Y" attach error on AWS. ([#85675](https://github.com/kubernetes/kubernetes/pull/85675), [@jsafrane](https://github.com/jsafrane)) -- Reduced frequency of DescribeVolumes calls of AWS API when attaching/detaching a volume. ([#84181](https://github.com/kubernetes/kubernetes/pull/84181), [@jsafrane](https://github.com/jsafrane)) -- Fixed attachment of AWS volumes that have just been detached. ([#83567](https://github.com/kubernetes/kubernetes/pull/83567), [@jsafrane](https://github.com/jsafrane)) -- Fix possible fd leak and closing of dirs when using openstack ([#82873](https://github.com/kubernetes/kubernetes/pull/82873), [@odinuge](https://github.com/odinuge)) -- local: support local volume block mode reconstruction ([#84173](https://github.com/kubernetes/kubernetes/pull/84173), [@cofyc](https://github.com/cofyc)) -- Fixed cleanup of raw block devices after kubelet restart. ([#83451](https://github.com/kubernetes/kubernetes/pull/83451), [@jsafrane](https://github.com/jsafrane)) -- Add data cache flushing during unmount device for GCE-PD driver in Windows Server. ([#83591](https://github.com/kubernetes/kubernetes/pull/83591), [@jingxu97](https://github.com/jingxu97)) -### Windows -- Adds Windows Server build information as a label on the node. ([#84472](https://github.com/kubernetes/kubernetes/pull/84472), [@gab-satchi](https://github.com/gab-satchi)) -- Fixes kube-proxy bug accessing self nodeip:port on windows ([#83027](https://github.com/kubernetes/kubernetes/pull/83027), [@liggitt](https://github.com/liggitt)) -- When using Containerd on Windows, the ``TerminationMessagePath`` file will now be mounted in the Windows Pod. ([#83057](https://github.com/kubernetes/kubernetes/pull/83057), [@bclau](https://github.com/bclau)) -- Fix kubelet metrics gathering on non-English Windows hosts ([#84156](https://github.com/kubernetes/kubernetes/pull/84156), [@wawa0210](https://github.com/wawa0210)) - -### Dependencies - - -- Update etcd client side to v3.4.3 ([#83987](https://github.com/kubernetes/kubernetes/pull/83987), [@wenjiaswe](https://github.com/wenjiaswe)) -- Kubernetes now requires go1.13.4+ to build ([#82809](https://github.com/kubernetes/kubernetes/pull/82809), [@liggitt](https://github.com/liggitt)) -- Update to use go1.12.12 ([#84064](https://github.com/kubernetes/kubernetes/pull/84064), [@cblecker](https://github.com/cblecker)) -- Update to go 1.12.10 ([#83139](https://github.com/kubernetes/kubernetes/pull/83139), [@cblecker](https://github.com/cblecker)) -- Update default etcd server version to 3.4.3 ([#84329](https://github.com/kubernetes/kubernetes/pull/84329), [@jingyih](https://github.com/jingyih)) - -### Detailed go Dependency Changes - -#### Added -- github.com/OpenPeeDeeP/depguard: v1.0.1 -- github.com/StackExchange/wmi: 5d04971 -- github.com/agnivade/levenshtein: v1.0.1 -- github.com/alecthomas/template: a0175ee -- github.com/alecthomas/units: 2efee85 -- github.com/andreyvit/diff: c7f18ee -- github.com/anmitsu/go-shlex: 648efa6 -- github.com/bazelbuild/rules_go: 6dae44d -- github.com/bgentry/speakeasy: v0.1.0 -- github.com/bradfitz/go-smtpd: deb6d62 -- github.com/cockroachdb/datadriven: 80d97fb -- github.com/creack/pty: v1.1.7 -- github.com/gliderlabs/ssh: v0.1.1 -- github.com/go-critic/go-critic: 1df3008 -- github.com/go-kit/kit: v0.8.0 -- github.com/go-lintpack/lintpack: v0.5.2 -- github.com/go-logfmt/logfmt: v0.3.0 -- github.com/go-ole/go-ole: v1.2.1 -- github.com/go-stack/stack: v1.8.0 -- github.com/go-toolsmith/astcast: v1.0.0 -- github.com/go-toolsmith/astcopy: v1.0.0 -- github.com/go-toolsmith/astequal: v1.0.0 -- github.com/go-toolsmith/astfmt: v1.0.0 -- github.com/go-toolsmith/astinfo: 9809ff7 -- github.com/go-toolsmith/astp: v1.0.0 -- github.com/go-toolsmith/pkgload: v1.0.0 -- github.com/go-toolsmith/strparse: v1.0.0 -- github.com/go-toolsmith/typep: v1.0.0 -- github.com/gobwas/glob: v0.2.3 -- github.com/golangci/check: cfe4005 -- github.com/golangci/dupl: 3e9179a -- github.com/golangci/errcheck: ef45e06 -- github.com/golangci/go-misc: 927a3d8 -- github.com/golangci/go-tools: e32c541 -- github.com/golangci/goconst: 041c5f2 -- github.com/golangci/gocyclo: 2becd97 -- github.com/golangci/gofmt: 0b8337e -- github.com/golangci/golangci-lint: v1.18.0 -- github.com/golangci/gosec: 66fb7fc -- github.com/golangci/ineffassign: 42439a7 -- github.com/golangci/lint-1: ee948d0 -- github.com/golangci/maligned: b1d8939 -- github.com/golangci/misspell: 950f5d1 -- github.com/golangci/prealloc: 215b22d -- github.com/golangci/revgrep: d9c87f5 -- github.com/golangci/unconvert: 28b1c44 -- github.com/google/go-github: v17.0.0+incompatible -- github.com/google/go-querystring: v1.0.0 -- github.com/gostaticanalysis/analysisutil: v0.0.3 -- github.com/jellevandenhooff/dkim: f50fe3d -- github.com/julienschmidt/httprouter: v1.2.0 -- github.com/klauspost/compress: v1.4.1 -- github.com/kr/logfmt: b84e30a -- github.com/logrusorgru/aurora: a7b3b31 -- github.com/mattn/go-runewidth: v0.0.2 -- github.com/mattn/goveralls: v0.0.2 -- github.com/mitchellh/go-ps: 4fdf99a -- github.com/mozilla/tls-observatory: 8791a20 -- github.com/mwitkow/go-conntrack: cc309e4 -- github.com/nbutton23/zxcvbn-go: eafdab6 -- github.com/olekukonko/tablewriter: a0225b3 -- github.com/quasilyte/go-consistent: c6f3937 -- github.com/rogpeppe/fastuuid: 6724a57 -- github.com/ryanuber/go-glob: 256dc44 -- github.com/sergi/go-diff: v1.0.0 -- github.com/shirou/gopsutil: c95755e -- github.com/shirou/w32: bb4de01 -- github.com/shurcooL/go-goon: 37c2f52 -- github.com/shurcooL/go: 9e1955d -- github.com/sourcegraph/go-diff: v0.5.1 -- github.com/tarm/serial: 98f6abe -- github.com/tidwall/pretty: v1.0.0 -- github.com/timakin/bodyclose: 87058b9 -- github.com/ultraware/funlen: v0.0.2 -- github.com/urfave/cli: v1.20.0 -- github.com/valyala/bytebufferpool: v1.0.0 -- github.com/valyala/fasthttp: v1.2.0 -- github.com/valyala/quicktemplate: v1.1.1 -- github.com/valyala/tcplisten: ceec8f9 -- github.com/vektah/gqlparser: v1.1.2 -- go.etcd.io/etcd: 3cf2f69 -- go.mongodb.org/mongo-driver: v1.1.2 -- go4.org: 417644f -- golang.org/x/build: 2835ba2 -- golang.org/x/perf: 6e6d33e -- golang.org/x/xerrors: a985d34 -- gopkg.in/alecthomas/kingpin.v2: v2.2.6 -- gopkg.in/cheggaaa/pb.v1: v1.0.25 -- gopkg.in/resty.v1: v1.12.0 -- grpc.go4.org: 11d0a25 -- k8s.io/system-validators: v1.0.4 -- mvdan.cc/interfacer: c200402 -- mvdan.cc/lint: adc824a -- mvdan.cc/unparam: fbb5962 -- sourcegraph.com/sqs/pbtypes: d3ebe8f - -#### Changed -- github.com/Azure/azure-sdk-for-go: v32.5.0+incompatible → v35.0.0+incompatible -- github.com/Microsoft/go-winio: v0.4.11 → v0.4.14 -- github.com/bazelbuild/bazel-gazelle: c728ce9 → 70208cb -- github.com/bazelbuild/buildtools: 80c7f0d → 69366ca -- github.com/beorn7/perks: 3a771d9 → v1.0.0 -- github.com/container-storage-interface/spec: v1.1.0 → v1.2.0 -- github.com/coredns/corefile-migration: v1.0.2 → v1.0.4 -- github.com/coreos/etcd: v3.3.17+incompatible → v3.3.10+incompatible -- github.com/coreos/go-systemd: 39ca1b0 → 95778df -- github.com/docker/go-units: v0.3.3 → v0.4.0 -- github.com/docker/libnetwork: a9cd636 → f0e46a7 -- github.com/fatih/color: v1.6.0 → v1.7.0 -- github.com/ghodss/yaml: c7ce166 → v1.0.0 -- github.com/go-openapi/analysis: v0.19.2 → v0.19.5 -- github.com/go-openapi/jsonpointer: v0.19.2 → v0.19.3 -- github.com/go-openapi/jsonreference: v0.19.2 → v0.19.3 -- github.com/go-openapi/loads: v0.19.2 → v0.19.4 -- github.com/go-openapi/runtime: v0.19.0 → v0.19.4 -- github.com/go-openapi/spec: v0.19.2 → v0.19.3 -- github.com/go-openapi/strfmt: v0.19.0 → v0.19.3 -- github.com/go-openapi/swag: v0.19.2 → v0.19.5 -- github.com/go-openapi/validate: v0.19.2 → v0.19.5 -- github.com/godbus/dbus: v4.1.0+incompatible → 2ff6f7f -- github.com/golang/protobuf: v1.3.1 → v1.3.2 -- github.com/google/btree: 4030bb1 → v1.0.0 -- github.com/google/cadvisor: v0.34.0 → v0.35.0 -- github.com/gregjones/httpcache: 787624d → 9cad4c3 -- github.com/grpc-ecosystem/go-grpc-middleware: cfaf568 → f849b54 -- github.com/grpc-ecosystem/grpc-gateway: v1.3.0 → v1.9.5 -- github.com/heketi/heketi: v9.0.0+incompatible → c2e2a4a -- github.com/json-iterator/go: v1.1.7 → v1.1.8 -- github.com/mailru/easyjson: 94de47d → v0.7.0 -- github.com/mattn/go-isatty: v0.0.3 → v0.0.9 -- github.com/mindprince/gonvml: fee913c → 9ebdce4 -- github.com/mrunalp/fileutils: 4ee1cc9 → 7d4729f -- github.com/munnerz/goautoneg: a547fc6 → a7dc8b6 -- github.com/onsi/ginkgo: v1.8.0 → v1.10.1 -- github.com/onsi/gomega: v1.5.0 → v1.7.0 -- github.com/opencontainers/runc: 6cc5158 → v1.0.0-rc9 -- github.com/opencontainers/selinux: v1.2.2 → 5215b18 -- github.com/pkg/errors: v0.8.0 → v0.8.1 -- github.com/prometheus/client_golang: v0.9.2 → v1.0.0 -- github.com/prometheus/client_model: 5c3871d → fd36f42 -- github.com/prometheus/common: 4724e92 → v0.4.1 -- github.com/prometheus/procfs: 1dc9a6c → v0.0.2 -- github.com/soheilhy/cmux: v0.1.3 → v0.1.4 -- github.com/spf13/pflag: v1.0.3 → v1.0.5 -- github.com/stretchr/testify: v1.3.0 → v1.4.0 -- github.com/syndtr/gocapability: e7cb7fa → d983527 -- github.com/vishvananda/netlink: b2de5d1 → v1.0.0 -- github.com/vmware/govmomi: v0.20.1 → v0.20.3 -- github.com/xiang90/probing: 07dd2e8 → 43a291a -- go.uber.org/atomic: 8dc6146 → v1.3.2 -- go.uber.org/multierr: ddea229 → v1.1.0 -- go.uber.org/zap: 67bc79d → v1.10.0 -- golang.org/x/crypto: e84da03 → 60c769a -- golang.org/x/lint: 8f45f77 → 959b441 -- golang.org/x/net: cdfb69a → 13f9640 -- golang.org/x/oauth2: 9f33145 → 0f29369 -- golang.org/x/sync: 42b3178 → cd5d95a -- golang.org/x/sys: 3b52091 → fde4db3 -- golang.org/x/text: e6919f6 → v0.3.2 -- golang.org/x/time: f51c127 → 9d24e82 -- golang.org/x/tools: 6e04913 → 65e3620 -- google.golang.org/grpc: v1.23.0 → v1.23.1 -- gopkg.in/inf.v0: v0.9.0 → v0.9.1 -- k8s.io/klog: v0.4.0 → v1.0.0 -- k8s.io/kube-openapi: 743ec37 → 30be4d1 -- k8s.io/repo-infra: 00fe14e → v0.0.1-alpha.1 -- k8s.io/utils: 581e001 → e782cd3 -- sigs.k8s.io/structured-merge-diff: 6149e45 → b1b620d - -#### Removed -- github.com/cloudflare/cfssl: 56268a6 -- github.com/coreos/bbolt: v1.3.3 -- github.com/coreos/rkt: v1.30.0 -- github.com/globalsign/mgo: eeefdec -- github.com/google/certificate-transparency-go: v1.0.21 -- github.com/heketi/rest: aa6a652 -- github.com/heketi/utils: 435bc5b -- github.com/pborman/uuid: v1.2.0 - -# v1.17.0-rc.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.17.0-rc.2 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes.tar.gz) | `c71521ab0ab1905776b4e05d99672b7ae6555693b95bc4b84c61134197afe4bf9c49297abdfcf87b34d5e8922550d4e45b7e06073881fa5033d39034f3cba402` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-src.tar.gz) | `68248a0610e6971db509fa3475032704ed2d37bb5937ee462fff0a7f0b84ee9753ae49fbc66f00eebc6cc5f455b6c41327c50078708c1570c9bf3d1186f5ff6f` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-client-darwin-386.tar.gz) | `1bd00995cc4a58050d42bd4b430cd353f808eade67556946d70e3e8a365d9e05a49c44d611ff6fe97f89f01a2dfa7f297ea66f0edba39333f9a4bcd06991375b` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-client-darwin-amd64.tar.gz) | `704727bc0d1ca207ff75f901ffb7b8afd29cdc532455e76bfcf8c0223c605c104f3a588173eef3a3e8b8f976fed34b870d398383454ad201f10ca430d72365ac` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-client-linux-386.tar.gz) | `706a08ecd314afbc63a7fdedcc47f17d4ab8bc36a2a7239d1f86e4321a6bc274b740893508558e6ca6492dc690b1a6042fc3a6bd3cddeb7bbb84ba851609c974` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-client-linux-amd64.tar.gz) | `36e7041453f735ea19141eebcce48fdc18cd3cae76fa7ac97bc7b46077e9208cad9974479d93450932d338ea162d4153ad0ec6f56f3f2cb8e8d98a132f14f833` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-client-linux-arm.tar.gz) | `e6f1bfa5170238fc676e3717ee212e96076e8ec3ceca6b9a4bd4233822185ed8d2aee826d4061bbb1638b0996488e400443d88667948d6b2e5290c3647036dca` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-client-linux-arm64.tar.gz) | `29bf7b4df9786c9be9995b15f05ebb18bd1dfad9cebf61207c1cac050000cabb41b816c4cd6022710c01fc712624359988aac307bcec12a51e2dae3163ac9406` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-client-linux-ppc64le.tar.gz) | `d1774fbeafd01447d11e05734055ad133dc90108f5c1bc9adaf84b8334f997e24324f59ee664c7e723b1dfb05e8ec4a59f956148718fdb277be40f9a7886c28e` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-client-linux-s390x.tar.gz) | `ca93b0539bda64f3e168b1ca1178eaf13f81de297475fc750893678a0cc6c626c7dea69253079c16b3875ec68f8162f8c01469f72e5481c1bb21d3f57e5745a1` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-client-windows-386.tar.gz) | `cda5e2526779991d3169d0089e69a2b9e7aa2a127aeb7eec339f4ed1b2b74afc74ef8154964bffb4219eed4e0956b4eb4356ed8cea6364085a163737010a8286` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-client-windows-amd64.tar.gz) | `c95b17ecd976cf33f182c2d26d49102dad2d7d78fe36d389b18730d59a8866cd28d1b3b28a20126c28b86cdb02ec3e58b8a86397cd778a7642160f11fd789e27` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-server-linux-amd64.tar.gz) | `aac109354621dc061e01aa6c72aabe43bb1c784a986be86f2e53c8f8243a2470d31955b06111648ddf0a9be686c7cda97c1106d46772c5db100061a7d3cb2521` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-server-linux-arm.tar.gz) | `d9755aa8c2b0c2d2fdd0756422176c7b34a85553edde03f075363f79bada3f349facb19123cab7ac4ed0ff3159d256b1c968037aa25118ab2fb3f67a118fce35` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-server-linux-arm64.tar.gz) | `e0bf1247872b0361237e7c5f0837b496b2c4ed05e38d5878c11a81d86282ac83ba382e3cf606a14a3a6af73085e137a82d193790e2805c88ea35bdf07c163e2a` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-server-linux-ppc64le.tar.gz) | `44d54154e37b87841123d9f12bce979e5faec88fa9654c0f46904f1bf477aff28790b59af241706b2f729cf1e0e56b146512c2c66bb28909c898e9df2f6ea920` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-server-linux-s390x.tar.gz) | `9f42dd736b9575eabb4ef37dae8f18e2f433d00d94e7a994734a9b362127de060ee67e02fc6578dd599b0120b58564aa4fdc5bf583e4e7cc825d7875b3ca099a` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-node-linux-amd64.tar.gz) | `6f94d2f4a9e2b37797c482a9d42ee9c93d6100fb8b21a983944cb611d57e4e0e6c69a8aa6e8200927f81d68f614913c5453400d298ef884d687f9629d0a213ba` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-node-linux-arm.tar.gz) | `7078f7372d733b2933d24ddca38401b6d044f90a9c82e12d61c968f545a24a03d738e7402501771cfbe403a47b96a5f8d2e662823e8fa138b2e30804ceb688bf` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-node-linux-arm64.tar.gz) | `9d9365699ecfecac6e7413bdf6d77b917a0e4ed5747810db8c04a3a6d5d2ae416067ae0164fb909e6849179a5117b9df26f39d2bdeca73e706f17ddb84ac2f78` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-node-linux-ppc64le.tar.gz) | `6103b55f433a864360231cc509bd692b3ebdc6be34e3fe43fdc2fbd1a2bff750cc2800a68792fe53b87803197cba95a90317b404c8ef3cd2ac3be3b0c54c0c34` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-node-linux-s390x.tar.gz) | `d83008a4cc86c837afd89b3ef7eece8deac67ba29a9a29076333481e630b59acc044917ad54fd1658932569fc2f11f350267ebe9dd2089a865163dfecea55798` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0-rc.2/kubernetes-node-windows-amd64.tar.gz) | `50b03637ecaacf3e6acd56d1a1eac7a95bb05697a179cd83494726ae05480839161d62be2572040607ad9f1fe21ffb8d0c68a91f3f3aa2d99d6ecc8cde30204f` - -## Changelog since v1.17.0-rc.1 - -### Other notable changes - -* Resolved regression in admission, authentication, and authorization webhook performance in v1.17.0-rc.1 ([#85810](https://github.com/kubernetes/kubernetes/pull/85810), [@liggitt](https://github.com/liggitt)) -* Filter published OpenAPI schema by making nullable, required fields non-required in order to avoid kubectl to wrongly reject null values. ([#85732](https://github.com/kubernetes/kubernetes/pull/85732), [@sttts](https://github.com/sttts)) -* Update Cluster Autoscaler to 1.17.0; changelog: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.17.0 ([#85610](https://github.com/kubernetes/kubernetes/pull/85610), [@losipiuk](https://github.com/losipiuk)) -* kube-apiserver: Fixes a bug that hidden metrics can not be enabled by the command-line option `--show-hidden-metrics-for-version`. ([#85444](https://github.com/kubernetes/kubernetes/pull/85444), [@RainbowMango](https://github.com/RainbowMango)) -* Fix bug where EndpointSlice controller would attempt to modify shared objects. ([#85368](https://github.com/kubernetes/kubernetes/pull/85368), [@robscott](https://github.com/robscott)) -* Revert ensure the KUBE-MARK-DROP chain in kube-proxy mode=iptables. Fix a bug in which kube-proxy deletes the rules associated with the chain in iptables mode. ([#85527](https://github.com/kubernetes/kubernetes/pull/85527), [@aojea](https://github.com/aojea)) - - - -# v1.17.0-rc.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.17.0-rc.1 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes.tar.gz) | `f349b451362bf489066a5a0ad29e0eeb4c3c9bedd05c46309dbdac85abab6ae0fcf7b21f36cf25094bae76d388ef937beca4bdf1d2aaf4afffd7b620b856ed8d` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-src.tar.gz) | `7bda9be86cf317827b66d553eb876ec24a649e60d558f9e6e66db842fdf21eefd8354e7d816d4a08b42d5b8db1172c98efd732a41d601c31cfca83d18e0b7548` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-client-darwin-386.tar.gz) | `2ada2da6da63ae97dad4a6b5b64326501eed3a19d6f52fdf36b8224a1341142d72b25968cd978414ce5ae432c6cab41372b1b4ef1603b0256055522c580c6a65` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-client-darwin-amd64.tar.gz) | `ac06923e4c056d5ab97688e1f42ff408eeab0c0e8f3b010630d45f3530696cfcb1352c49b9cc64c723f0e24663b2f5690865e5243158c3eb8887a47872d40082` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-client-linux-386.tar.gz) | `bb1f4384b6e3aa4cdaf6f629adeb0f81df138f17fc1c5a39c1584c31e228340761d78bf762fa83e69de687c98f2055ecf91a0ac39d82ec2d76ca09111d3bfd56` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-client-linux-amd64.tar.gz) | `f66119eb66f87f19c993e380813c0a8051e562fb62c1e8a2f49237774fe5d9e132cbaaaf265be812d5fd1bbf8ad1ff5a6dc7cb9f8915d241109765cd9b10ef34` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-client-linux-arm.tar.gz) | `5a077f979ea775ba45d741b1137ab8a579164601bd8033704e03646ba1c99322c08ced72fdb12f073b6e92df159474f23e3f44be40a17aa45999940062150418` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-client-linux-arm64.tar.gz) | `1b595b0aa568b8de3a4a56d9226e618c3648fb167c5ad62c833578ced95293cf77f1a066012a8f82e38c60cbb38b016665f8a5d151497d9c77a5edaceb541ceb` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-client-linux-ppc64le.tar.gz) | `955b1ecf8b04944cc04a06c3023574b7ccfad655df658320402bca15647b8fca65c9c5f4f9482989da4f5740b6f973e312287dda871abf0b17a56fcfbc281b30` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-client-linux-s390x.tar.gz) | `273d5ca8b5fa042b68c7f01f8f6b293c308ee2ce5675419350f01f7763824b61a6ebc7a9470b1196c4c87e1481bbc91931d6d41b3eb50bd99fd0ecc06a65b189` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-client-windows-386.tar.gz) | `94e20c417c626166cff39a74b05d7eb443a00be9ef7d7f7bb014d170a41ff9b52999bc21bba19b97d27ad5c1a978e761e125a30295338e5db4dbac16d1661b66` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-client-windows-amd64.tar.gz) | `59deabc78139ad4d6dced570f5292eaa67da4d6fca88f90d7e1484b77a71ef64826632613ebedb79215dbaba6dfe4b3eda6cf8bbfa3fd0024b9ab290e3f8cd1f` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-server-linux-amd64.tar.gz) | `b73983175bb95accb505ab953635e49d5ce3ef0a58e4de6575e431a6c0c81819bb8fc75949c5e3d35a395a96aaadad2ef6a777cc86bfa1b70afd02269cae58c0` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-server-linux-arm.tar.gz) | `7f2b75c7fe9f97dcab6ef00fa72bda3493225c58aa963e6843184f24c32631d33a05288ec525ef378296702d51c715800bc4394b9906285dc105e0dd984cf95b` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-server-linux-arm64.tar.gz) | `113e978c8400acc8048b0a1979cf5cf95cfec76de7a9b2a5e1c204de8969ff7e4662fecf232d03f5889f47e4633197ce5013769b2508350dc0002da9cb004957` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-server-linux-ppc64le.tar.gz) | `5dfb184689e9d534788f86dc29bf69e779c5a9927adc50338fee0f7a71603aeccd7822f6ca6ba017e73e595eb4b95c15b26fc2af2783a3b7fe5ac5095555e1be` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-server-linux-s390x.tar.gz) | `ae7a6399672a7333ba85567bf9b6b1f9af7ad9616acbd0bd52237cb5d5c968f3f39617ffad9606c8486cfa253ea2dfc1ff47f55b96f1065998a03fa8a4a4c735` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-node-linux-amd64.tar.gz) | `17279e9220a2423aba35056bc631d0b2af1df45297dd40e36949a0ff809d3b7c8cc410808638c266cdd02631b403461a92076ae8e8203398da7cbb1720e0625b` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-node-linux-arm.tar.gz) | `4611354f214b2d7d5138adaffd764574dfc6a68d27b7f53563c486a8ba25cefceeb5cf04d75cc1f47f525d450609f90c085ba36d35f166731fc0f51ea350a411` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-node-linux-arm64.tar.gz) | `361e44be2d5a98fb94fd8a39ab9a57198bc7613b2004b239920438853db0a33e360bd76c7e2c19e64e74e900c9cb7e912ab90a3d68ddbc560f0cae75b803818d` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-node-linux-ppc64le.tar.gz) | `69f9da64ae19bb4cfc616a2abd587c9711e9667da4743d776510e92aa23da72da85bd9aecd2d334066697d5e241abe4050142b8fb1d56b1db7c2037f944cccb6` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-node-linux-s390x.tar.gz) | `0fb52cfc24b58887be71d98dd1c826be520eef69448f2f207e849b85533c277084fa4b6e04445c0c1cf499e8fcc63f2088696554465caa954b5643aa9f555c40` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0-rc.1/kubernetes-node-windows-amd64.tar.gz) | `7d3ce000317a05737101ff1fd0fd0423be2649e5ae387b9d89e57242a3cf8b202a3152dd6b864601eba07ac319f5787fd9fae86594452a4652e29dd585314c2a` - -## Changelog since v1.17.0-beta.2 - -### Other notable changes - -* kubeadm: fix a panic in case the KubeProxyConfiguration feature gates were not initialized. ([#85524](https://github.com/kubernetes/kubernetes/pull/85524), [@Arvinderpal](https://github.com/Arvinderpal)) -* kubeadm: fix stray "node-cidr-mask-size" flag in the kube-controller-manager manifest when IPv6DualStack is enabled ([#85494](https://github.com/kubernetes/kubernetes/pull/85494), [@tedyu](https://github.com/tedyu)) -* CRDs can have fields named `type` with value `array` and nested array with `items` fields without validation to fall over this. ([#85223](https://github.com/kubernetes/kubernetes/pull/85223), [@sttts](https://github.com/sttts)) -* Resolves error from v1.17.0-beta.2 with --authorizer-mode webhook complaining about an invalid version ([#85441](https://github.com/kubernetes/kubernetes/pull/85441), [@liggitt](https://github.com/liggitt)) -* Promote CSIMigrationAWS to Beta (off by default since it requires installation of the AWS EBS CSI Driver) ([#85237](https://github.com/kubernetes/kubernetes/pull/85237), [@leakingtapan](https://github.com/leakingtapan)) - * The in-tree AWS EBS plugin "kubernetes.io/aws-ebs" is now deprecated and will be removed in 1.21. Users should enable CSIMigration + CSIMigrationAWS features and install the AWS EBS CSI Driver (https://github.com/kubernetes-sigs/aws-ebs-csi-driver) to avoid disruption to existing Pod and PVC objects at that time. - * Users should start using the AWS EBS CSI CSI Driver directly for any new volumes. - - - -# v1.17.0-beta.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.17.0-beta.2 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes.tar.gz) | `c4e937e784b26b5b18cac0bc8d4c91e1ae576107f14bb475e2d38687fbb5790f2c57898590a2f24d3c4ab4c6060a628e1acb2f15932b70183e5753f751237f60` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-src.tar.gz) | `79351b61539c7dc608f4c2a184e788f74503cd801304204de1d52e9ea7b50450503d46d48605b71240395173bcbf1a4727bad3a3dc800766ce4f1f103ca9f2ae` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-client-darwin-386.tar.gz) | `3940ed06c0848b6ddf9e37e66535085d58a5cf7b66a015eab718eb7b4927e9ebce9e0634040bd7a748610b1d881ad9f6e925650d959eaa37e304baa9bb21b6a9` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-client-darwin-amd64.tar.gz) | `2d6497ad8f5ca592717fcc704f581020922e317e60c2f7def6b6899398666c6c1c81b0b006ed02c923f54b8f0525dba85aadc5ce62926e9feefe18640c7f2fde` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-client-linux-386.tar.gz) | `220713aea7709facd2317015467ce1922abf39cdf486d44f4a3fae497aa119f5af00bbfaa46fb022e1b53de285d2366eba1847a98804af4891eec50306be23fb` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-client-linux-amd64.tar.gz) | `afe7fbecb04bba24f6c2d794a7c9b83cdc48032137776e660537541e3b2da6a04a1f0b8dc2ac0826a7d3c3c6fb5f609086d6ffae411f3069737448136d78ea65` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-client-linux-arm.tar.gz) | `97addcebe381cfd6ccca94ca4f039ec6e300bda701fc005b1d292a055a2ed8515a80991d0013c3d388e742bb6fcf12f733a100eb1a7cd7e02e122c54bc715f4e` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-client-linux-arm64.tar.gz) | `ca3880ce4c6ca1aa8500d67d0c0eeb85f0323306308d2abe26caa9f97b20432f25e00d25c52b460dbf0f62a65907b3201c51cedca30146dc373ea30331531fc2` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-client-linux-ppc64le.tar.gz) | `84c40110c8ae3bfc02edd3f6e937032b41dd67b9c48e738ff8590d9b26d249d4febcb6a5665261a3c835ce0df255fc1aeeeb0df7abd1a158d9cb5eafedbd66f2` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-client-linux-s390x.tar.gz) | `31521ef3a8426676e73011dbe5b00a7cb9479aa9d1147e824c1c4287634f1c0742c7990166e804ed7897c0629fd1eebedc6b8fc41788e1b145e26dd72bd8025d` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-client-windows-386.tar.gz) | `8601fb516a4557b7579dc3fb3e83e1be2f8e8a6a19aaca5232a5be25d9d23056a37fb5b30742454d8db6598539130c4b9bf6b9eb1b9ec6bdd73ca7c34953c23a` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-client-windows-amd64.tar.gz) | `00b4e163629f415c9c9caca4e5a9b0753ecddc29fde7d63b379d9d13af8992f78c2b1d4810a94264edc766bc41c2334cd81fe9e53d95a7bbfcf3795813e0327d` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-server-linux-amd64.tar.gz) | `a5d21dfe1c05ca6fb1357975b75ff9549642f37e8754a884567c0a00048208ba9060d169b378f0be349197b3c55c41179c70a12aa0249fd149271198ebf1c9ba` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-server-linux-arm.tar.gz) | `d33a18da3aa4305183f7e3cd3f43f100ed1484c59811c0e8172c5838b94cd0ea11dbc3733d49624e4787e6d12fb5e01b278fc7c328362fadece8cf6b9e91a9bb` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-server-linux-arm64.tar.gz) | `2bba562b5e5f28d1b840490cbcc837f421e30a715daca08234b1302f5b7a528b605594bffac7fa104ca2a023b569a3c38156aa3da3576db28f1bdccd37b274f5` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-server-linux-ppc64le.tar.gz) | `a80a80233832aca887b90e688a5ab537468071d8d3237a28cf3e9d7cf4ef1f340ef243f173e67b74fc08f7a723660237dd1721872ca734bb7bcea87d3ecf0a34` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-server-linux-s390x.tar.gz) | `ba23bc2a9c94dd19a8a0a739e15e72dcb30ec103978686e1b4a845175ae8cad66e34b266afcb5ba0adb5969bbc6e71bf4d5ef5664b703ddc2628907e211f3b86` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-node-linux-amd64.tar.gz) | `76298a3e8a6184c7ca7026a83c016172e22f5be18e68d3ec01a3d6fc1b3ca2525232ef6f15b423c651c36694a9cad4fd0af08a93a187a7f42443aa0caa82baf7` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-node-linux-arm.tar.gz) | `d21b60164cb3ee15a493567e1852fb8844f8a5fa5d6d4e71f8078a039d9fea4af00f992026bbc135fadcf0597da28bd0d8813b231ee05e5c31b17ecd224294b9` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-node-linux-arm64.tar.gz) | `9707c6e9c3835f8a5a80be9600f651c992ae717a8a6efc20cc8e67d562ddc62ec81b70deb74ba75a67eb1741cf2afd57312f1ccf6dc97ead8d7139651b20c09b` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-node-linux-ppc64le.tar.gz) | `4c8dea040321fbf8e444ba0252567cb3aed3173db4c82b7572b9f8053b1275b9bc45627510a9abe19c8be3d921a1b018b5b869f415762b2569325425ab9aa819` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-node-linux-s390x.tar.gz) | `7a720070b28ab5b83ec054a3137d434c39f7b8f1a0c751f5d06b1f2bbe00777ff444f2855c135ac113f0c5193680b27d80369761ff79f7ef22a9dc997037efe1` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0-beta.2/kubernetes-node-windows-amd64.tar.gz) | `85b3a0bcb5a319f443cc0f3a9aff0b6fb038d42f515698d51cba27a4a1a6b3d701085c6cfb525cf0f826af3fbdb26abc2ee00fcb8e5022ecd63b8f7697aace88` - -## Changelog since v1.17.0-beta.1 - -### Action Required - -* Renamed FeatureGate RequestManagement to APIPriorityAndFairness. This feature gate is an alpha and has not yet been associated with any actual functionality. ([#85260](https://github.com/kubernetes/kubernetes/pull/85260), [@MikeSpreitzer](https://github.com/MikeSpreitzer)) - * Action required: change references to feature gate RequestManagement into references to APIPriorityAndFairness -* ACTION REQUIRED: kubeadm: add a new "kubelet-finalize" phase as part of the "init" workflow and an experimental sub-phase to enable automatic kubelet client certificate rotation on primary control-plane nodes. ([#84118](https://github.com/kubernetes/kubernetes/pull/84118), [@neolit123](https://github.com/neolit123)) - * Prior to 1.17 and for existing nodes created by "kubeadm init" where kubelet client certificate rotation is desired, you must modify "/etc/kubernetes/kubelet.conf" to point to the PEM symlink for rotation: - * "client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem" and "client-key: /var/lib/kubelet/pki/kubelet-client-current.pem", replacing the embedded client certificate and key. -* action required: kubeadm deprecates the use of the hyperkube image ([#85094](https://github.com/kubernetes/kubernetes/pull/85094), [@rosti](https://github.com/rosti)) - -### Other notable changes - -* Following metrics have been turned off: ([#83837](https://github.com/kubernetes/kubernetes/pull/83837), [@RainbowMango](https://github.com/RainbowMango)) - * - apiserver_request_count - * - apiserver_request_latencies - * - apiserver_request_latencies_summary - * - apiserver_dropped_requests - * - etcd_request_latencies_summary - * - apiserver_storage_transformation_latencies_microseconds - * - apiserver_storage_data_key_generation_latencies_microseconds - * - apiserver_storage_transformation_failures_total -* OpenAPI v3 format in CustomResourceDefinition schemas are now documented. ([#85381](https://github.com/kubernetes/kubernetes/pull/85381), [@sttts](https://github.com/sttts)) -* The official kube-proxy image (used by kubeadm, among other things) is now ([#82966](https://github.com/kubernetes/kubernetes/pull/82966), [@danwinship](https://github.com/danwinship)) - * compatible with systems running iptables 1.8 in "nft" mode, and will autodetect - * which mode it should use. -* Kubenet: added HostPort IPv6 support ([#80854](https://github.com/kubernetes/kubernetes/pull/80854), [@aojea](https://github.com/aojea)) - * HostPortManager: operates only with one IP family, failing if receives portmapping entries with different IP families - * HostPortSyncer: operates only with one IP family, skipping portmap entries with different IP families -* Implement the documented API semantics of list-type and map-type atomic to reject non-atomic sub-types. ([#84722](https://github.com/kubernetes/kubernetes/pull/84722), [@sttts](https://github.com/sttts)) -* kubeadm: Fix a bug where kubeadm cannot parse kubelet's version if the latter dumps logs on the standard error. ([#85351](https://github.com/kubernetes/kubernetes/pull/85351), [@rosti](https://github.com/rosti)) -* EndpointSlices are not enabled by default. Use the EndpointSlice feature gate to enable this feature. ([#85365](https://github.com/kubernetes/kubernetes/pull/85365), [@robscott](https://github.com/robscott)) -* Feature gates CSIMigration to Beta (on by default) and CSIMigrationGCE to Beta (off by default since it requires installation of the GCE PD CSI Driver) ([#85231](https://github.com/kubernetes/kubernetes/pull/85231), [@davidz627](https://github.com/davidz627)) - * The in-tree GCE PD plugin "kubernetes.io/gce-pd" is now deprecated and will be removed in 1.21. Users should enable CSIMigration + CSIMigrationGCE features and install the GCE PD CSI Driver (https://github.com/kubernetes-sigs/gcp-compute-persistent-disk-csi-driver) to avoid disruption to existing Pod and PVC objects at that time. - * Users should start using the GCE PD CSI CSI Driver directly for any new volumes. -* kube-controller-manager: Fixes bug setting headless service labels on endpoints ([#85361](https://github.com/kubernetes/kubernetes/pull/85361), [@liggitt](https://github.com/liggitt)) -* When upgrading to 1.17 with a cluster with EndpointSlices enabled, the `endpointslice.kubernetes.io/managed-by` label needs to be set on each EndpointSlice. ([#85359](https://github.com/kubernetes/kubernetes/pull/85359), [@robscott](https://github.com/robscott)) -* Remove redundant API validation when using Service Topology with externalTrafficPolicy=Local ([#85346](https://github.com/kubernetes/kubernetes/pull/85346), [@andrewsykim](https://github.com/andrewsykim)) -* Following metrics have been turned off: ([#83838](https://github.com/kubernetes/kubernetes/pull/83838), [@RainbowMango](https://github.com/RainbowMango)) - * - scheduler_scheduling_latency_seconds - * - scheduler_e2e_scheduling_latency_microseconds - * - scheduler_scheduling_algorithm_latency_microseconds - * - scheduler_scheduling_algorithm_predicate_evaluation - * - scheduler_scheduling_algorithm_priority_evaluation - * - scheduler_scheduling_algorithm_preemption_evaluation - * - scheduler_scheduling_binding_latency_microseconds -* CSI Migration: Fixes issue where all volumes with the same inline volume inner spec name were staged in the same path. Migrated inline volumes are now staged at a unique path per unique volume. ([#84754](https://github.com/kubernetes/kubernetes/pull/84754), [@davidz627](https://github.com/davidz627)) -* kube-controller-manager ([#79993](https://github.com/kubernetes/kubernetes/pull/79993), [@aramase](https://github.com/aramase)) - * --node-cidr-mask-size-ipv4 int32 Default: 24. Mask size for IPv4 node-cidr in dual-stack cluster. - * --node-cidr-mask-size-ipv6 int32 Default: 64. Mask size for IPv6 node-cidr in dual-stack cluster. - * These 2 flags can be used only for dual-stack clusters. For non dual-stack clusters, continue to use - * --node-cidr-mask-size flag to configure the mask size. - * The default node cidr mask size for IPv6 was 24 which is now changed to 64. -* The following information is available through environment variables: ([#83123](https://github.com/kubernetes/kubernetes/pull/83123), [@aramase](https://github.com/aramase)) - * status.podIPs - the pod's IP addresses -* update github.com/vishvananda/netlink to v1.0.0 ([#83576](https://github.com/kubernetes/kubernetes/pull/83576), [@andrewsykim](https://github.com/andrewsykim)) -* kubectl: --resource-version now works properly in label/annotate/set selector commands when racing with other clients to update the target object ([#85285](https://github.com/kubernetes/kubernetes/pull/85285), [@liggitt](https://github.com/liggitt)) -* `--runtime-config` now supports an `api/beta=false` value which disables all built-in REST API versions matching `v[0-9]+beta[0-9]+`. ([#84304](https://github.com/kubernetes/kubernetes/pull/84304), [@liggitt](https://github.com/liggitt)) - * `--feature-gates` now supports an `AllBeta=false` value which disables all beta feature gates. -* kube-proxy now supports DualStack feature with EndpointSlices and IPVS. ([#85246](https://github.com/kubernetes/kubernetes/pull/85246), [@robscott](https://github.com/robscott)) -* Add table convertor to componentstatus. ([#85174](https://github.com/kubernetes/kubernetes/pull/85174), [@zhouya0](https://github.com/zhouya0)) -* kubeadm: added retry to all the calls to the etcd API so kubeadm will be more resilient to network glitches ([#85201](https://github.com/kubernetes/kubernetes/pull/85201), [@fabriziopandini](https://github.com/fabriziopandini)) -* azure: update disk lock logic per vm during attach/detach to allow concurrent updates for different nodes. ([#85115](https://github.com/kubernetes/kubernetes/pull/85115), [@aramase](https://github.com/aramase)) -* Scale custom resource unconditionally if resourceVersion is not provided ([#80572](https://github.com/kubernetes/kubernetes/pull/80572), [@knight42](https://github.com/knight42)) -* Bump CSI version to 1.2.0 ([#84832](https://github.com/kubernetes/kubernetes/pull/84832), [@gnufied](https://github.com/gnufied)) -* Adds Windows Server build information as a label on the node. ([#84472](https://github.com/kubernetes/kubernetes/pull/84472), [@gab-satchi](https://github.com/gab-satchi)) -* Deprecated metric `kubeproxy_sync_proxy_rules_latency_microseconds` has been turned off. ([#83839](https://github.com/kubernetes/kubernetes/pull/83839), [@RainbowMango](https://github.com/RainbowMango)) -* Existing PVs are converted to use volume topology if migration is enabled. ([#83394](https://github.com/kubernetes/kubernetes/pull/83394), [@bertinatto](https://github.com/bertinatto)) -* Finalizer Protection for Service LoadBalancers is now in GA (enabled by default). This feature ensures the Service resource is not fully deleted until the correlating load balancer resources are deleted. ([#85023](https://github.com/kubernetes/kubernetes/pull/85023), [@MrHohn](https://github.com/MrHohn)) -* EndpointSlices are now beta and enabled by default for better Network Endpoint performance at scale. ([#84390](https://github.com/kubernetes/kubernetes/pull/84390), [@robscott](https://github.com/robscott)) -* When using Containerd on Windows, the ``TerminationMessagePath`` file will now be mounted in the Windows Pod. ([#83057](https://github.com/kubernetes/kubernetes/pull/83057), [@bclau](https://github.com/bclau)) -* apiservers based on k8s.io/apiserver with delegated authn based on cluster authentication will automatically update to new authentication information when the authoritative configmap is updated. ([#85004](https://github.com/kubernetes/kubernetes/pull/85004), [@deads2k](https://github.com/deads2k)) -* fix vmss dirty cache issue in disk attach/detach on vmss node ([#85158](https://github.com/kubernetes/kubernetes/pull/85158), [@andyzhangx](https://github.com/andyzhangx)) -* Fixes a bug in kubeadm that caused init and join to hang indefinitely in specific conditions. ([#85156](https://github.com/kubernetes/kubernetes/pull/85156), [@chuckha](https://github.com/chuckha)) -* kube-apiserver: Authentication configuration for mutating and validating admission webhooks referenced from an `--admission-control-config-file` can now be specified with `apiVersion: apiserver.config.k8s.io/v1, kind: WebhookAdmissionConfiguration`. ([#85138](https://github.com/kubernetes/kubernetes/pull/85138), [@liggitt](https://github.com/liggitt)) -* Kubeadm now includes CoreDNS version 1.6.5 ([#85109](https://github.com/kubernetes/kubernetes/pull/85109), [@rajansandeep](https://github.com/rajansandeep)) - * - `kubernetes` plugin adds metrics to measure kubernetes control plane latency. - * - the `health` plugin now includes the `lameduck` option by default, which waits for a duration before shutting down. -* Kubeadm now includes CoreDNS version 1.6.5 ([#85108](https://github.com/kubernetes/kubernetes/pull/85108), [@rajansandeep](https://github.com/rajansandeep)) - * - `kubernetes` plugin adds metrics to measure kubernetes control plane latency. - * - the `health` plugin now includes the `lameduck` option by default, which waits for a duration before shutting down. -* kube-apiserver: The `ResourceQuota` admission plugin configuration referenced from `--admission-control-config-file` admission config has been promoted to `apiVersion: apiserver.config.k8s.io/v1`, `kind: ResourceQuotaConfiguration` with no schema changes. ([#85099](https://github.com/kubernetes/kubernetes/pull/85099), [@liggitt](https://github.com/liggitt)) -* kube-apiserver: The `AdmissionConfiguration` type accepted by `--admission-control-config-file` has been promoted to `apiserver.config.k8s.io/v1` with no schema changes. ([#85098](https://github.com/kubernetes/kubernetes/pull/85098), [@liggitt](https://github.com/liggitt)) -* New flag `--show-hidden-metrics-for-version` in kube-apiserver can be used to show all hidden metrics that deprecated in the previous minor release. ([#84292](https://github.com/kubernetes/kubernetes/pull/84292), [@RainbowMango](https://github.com/RainbowMango)) -* The ResourceQuotaScopeSelectors feature has graduated to GA. The `ResourceQuotaScopeSelectors` feature gate is now unconditionally enabled and will be removed in 1.18. ([#82690](https://github.com/kubernetes/kubernetes/pull/82690), [@draveness](https://github.com/draveness)) -* Fixed bug when using kubeadm alpha certs commands with clusters using external etcd ([#85091](https://github.com/kubernetes/kubernetes/pull/85091), [@fabriziopandini](https://github.com/fabriziopandini)) -* Fix a bug that a node Lease object may have been created without OwnerReference. ([#84998](https://github.com/kubernetes/kubernetes/pull/84998), [@wojtek-t](https://github.com/wojtek-t)) -* Splitting IP address type into IPv4 and IPv6 for EndpointSlices ([#84971](https://github.com/kubernetes/kubernetes/pull/84971), [@robscott](https://github.com/robscott)) -* Pod process namespace sharing is now Generally Available. The `PodShareProcessNamespace` feature gate is now deprecated and will be removed in Kubernetes 1.19. ([#84356](https://github.com/kubernetes/kubernetes/pull/84356), [@verb](https://github.com/verb)) -* Fix incorrect network policy description suggesting that pods are isolated when a network policy has no rules of a given type ([#84194](https://github.com/kubernetes/kubernetes/pull/84194), [@jackkleeman](https://github.com/jackkleeman)) -* add RequiresExactMatch for label.Selector ([#85048](https://github.com/kubernetes/kubernetes/pull/85048), [@shaloulcy](https://github.com/shaloulcy)) -* Deprecated metric `rest_client_request_latency_seconds` has been turned off. ([#83836](https://github.com/kubernetes/kubernetes/pull/83836), [@RainbowMango](https://github.com/RainbowMango)) -* Removed dependency on kubectl from several storage E2E tests ([#84042](https://github.com/kubernetes/kubernetes/pull/84042), [@okartau](https://github.com/okartau)) -* kubeadm no longer defaults or validates the component configs of the kubelet or kube-proxy ([#79223](https://github.com/kubernetes/kubernetes/pull/79223), [@rosti](https://github.com/rosti)) -* Add plugin_execution_duration_seconds metric for scheduler framework plugins. ([#84522](https://github.com/kubernetes/kubernetes/pull/84522), [@liu-cong](https://github.com/liu-cong)) -* Moving WindowsRunAsUserName feature to beta ([#84882](https://github.com/kubernetes/kubernetes/pull/84882), [@marosset](https://github.com/marosset)) -* Node-specific volume limits has graduated to GA. ([#83568](https://github.com/kubernetes/kubernetes/pull/83568), [@bertinatto](https://github.com/bertinatto)) -* kubelet and aggregated API servers now use v1 TokenReview and SubjectAccessReview endpoints to check authentication/authorization. ([#84768](https://github.com/kubernetes/kubernetes/pull/84768), [@liggitt](https://github.com/liggitt)) - * kube-apiserver can now specify `--authentication-token-webhook-version=v1` or `--authorization-webhook-version=v1` to use `v1` TokenReview and SubjectAccessReview API objects when communicating with authentication and authorization webhooks. -* BREAKING CHANGE: Remove plugin watching of deprecated directory {kubelet_root_dir}/plugins and CSI V0 support in accordance with deprecation announcement in https://v1-13.docs.kubernetes.io/docs/setup/release/notes/ ([#84533](https://github.com/kubernetes/kubernetes/pull/84533), [@davidz627](https://github.com/davidz627)) -* Adds a new label to indicate what is managing an EndpointSlice. ([#83965](https://github.com/kubernetes/kubernetes/pull/83965), [@robscott](https://github.com/robscott)) -* Fix a racing issue in client-go UpdateTransportConfig. ([#80284](https://github.com/kubernetes/kubernetes/pull/80284), [@danielqsj](https://github.com/danielqsj)) -* Enables VolumeSnapshotDataSource feature gate and promotes volume snapshot APIs to beta. ([#80058](https://github.com/kubernetes/kubernetes/pull/80058), [@xing-yang](https://github.com/xing-yang)) -* Added appProtocol field to EndpointSlice Port ([#83815](https://github.com/kubernetes/kubernetes/pull/83815), [@howardjohn](https://github.com/howardjohn)) -* kubeadm alpha certs command now skip missing files ([#85092](https://github.com/kubernetes/kubernetes/pull/85092), [@fabriziopandini](https://github.com/fabriziopandini)) -* A new flag "progress-report-url" has been added to the test context which allows progress information about the test run to be sent to a webhook. In addition, this information is printed to stdout to aid in users watching the logs. ([#84524](https://github.com/kubernetes/kubernetes/pull/84524), [@johnSchnake](https://github.com/johnSchnake)) -* kubeadm: remove the deprecated "--cri-socket" flag for "kubeadm upgrade apply". The flag has been deprecated since v1.14. ([#85044](https://github.com/kubernetes/kubernetes/pull/85044), [@neolit123](https://github.com/neolit123)) -* Clients can request protobuf and json and correctly negotiate with the server for JSON for CRD objects, allowing all client libraries to request protobuf if it is available. If an error occurs negotiating a watch with the server, the error is immediately return by the client `Watch()` method instead of being sent as an `Error` event on the watch stream. ([#84692](https://github.com/kubernetes/kubernetes/pull/84692), [@smarterclayton](https://github.com/smarterclayton)) -* Following metrics from kubelet are now marked as with the ALPHA stability level: ([#84987](https://github.com/kubernetes/kubernetes/pull/84987), [@RainbowMango](https://github.com/RainbowMango)) - * node_cpu_usage_seconds_total - * node_memory_working_set_bytes - * container_cpu_usage_seconds_total - * container_memory_working_set_bytes - * scrape_error -* Following metrics from kubelet are now marked as with the ALPHA stability level: ([#84907](https://github.com/kubernetes/kubernetes/pull/84907), [@RainbowMango](https://github.com/RainbowMango)) - * kubelet_container_log_filesystem_used_bytes - * kubelet_volume_stats_capacity_bytes - * kubelet_volume_stats_available_bytes - * kubelet_volume_stats_used_bytes - * kubelet_volume_stats_inodes - * kubelet_volume_stats_inodes_free - * kubelet_volume_stats_inodes_used - * plugin_manager_total_plugins - * volume_manager_total_volumes -* kubeadm: enable the usage of the secure kube-scheduler and kube-controller-manager ports for health checks. For kube-scheduler was 10251, becomes 10259. For kube-controller-manager was 10252, becomes 10257. ([#85043](https://github.com/kubernetes/kubernetes/pull/85043), [@neolit123](https://github.com/neolit123)) -* kubeadm: prevent potential hanging of commands such as "kubeadm reset" if the apiserver endpoint is not reachable. ([#84648](https://github.com/kubernetes/kubernetes/pull/84648), [@neolit123](https://github.com/neolit123)) -* Mirror pods now include an ownerReference for the node that created them. ([#84485](https://github.com/kubernetes/kubernetes/pull/84485), [@tallclair](https://github.com/tallclair)) -* kubeadm: fix skipped etcd upgrade on secondary control-plane nodes when the command "kubeadm upgrade node" is used. ([#85024](https://github.com/kubernetes/kubernetes/pull/85024), [@neolit123](https://github.com/neolit123)) -* fix race condition when attach/delete azure disk in same time ([#84917](https://github.com/kubernetes/kubernetes/pull/84917), [@andyzhangx](https://github.com/andyzhangx)) -* If given an IPv6 bind-address, kube-apiserver will now advertise an IPv6 endpoint for the kubernetes.default service. ([#84727](https://github.com/kubernetes/kubernetes/pull/84727), [@danwinship](https://github.com/danwinship)) -* kubeadm: the command "kubeadm token create" now has a "--certificate-key" flag that can be used for the formation of join commands for control-planes with automatic copy of certificates ([#84591](https://github.com/kubernetes/kubernetes/pull/84591), [@TheLastProject](https://github.com/TheLastProject)) -* Deprecate the instance type beta label ("beta.kubernetes.io/instance-type") in favor of it's GA equivalent: "node.kubernetes.io/instance-type" ([#82049](https://github.com/kubernetes/kubernetes/pull/82049), [@andrewsykim](https://github.com/andrewsykim)) -* kube-apiserver: Fixed a regression accepting patch requests > 1MB ([#84963](https://github.com/kubernetes/kubernetes/pull/84963), [@liggitt](https://github.com/liggitt)) -* Promote NodeLease feature to GA. ([#84351](https://github.com/kubernetes/kubernetes/pull/84351), [@wojtek-t](https://github.com/wojtek-t)) - * The feature make Lease object changes an additional healthiness signal from Node. Together with that, we reduce frequency of NodeStatus updates to 5m by default in case of no changes to status itself -* Following metrics from kube-controller-manager are now marked as with the ALPHA stability level: ([#84896](https://github.com/kubernetes/kubernetes/pull/84896), [@RainbowMango](https://github.com/RainbowMango)) - * storage_count_attachable_volumes_in_use - * attachdetach_controller_total_volumes - * pv_collector_bound_pv_count - * pv_collector_unbound_pv_count - * pv_collector_bound_pvc_count - * pv_collector_unbound_pvc_count -* Deprecate the beta labels for zones ("failure-domain.beta.kubernetes.io/zone") and ([#81431](https://github.com/kubernetes/kubernetes/pull/81431), [@andrewsykim](https://github.com/andrewsykim)) - * regions ("failure-domain.beta.kubernetes.io/region") in favor of their GA equivalents: - * "topology.kubernetes.io/zone" and "topology.kubernetes.io/region". - * The beta labels "failure-domain.beta.kubernetes.io/zone" and "failure-domain.beta.kubernetes.io/region" will be removed in v1.21 -* kube-apiserver: fixed a bug that could cause a goroutine leak if the apiserver encountered an encoding error serving a watch to a websocket watcher ([#84693](https://github.com/kubernetes/kubernetes/pull/84693), [@tedyu](https://github.com/tedyu)) -* EndpointSlice hostname is now set in the same conditions Endpoints hostname is. ([#84207](https://github.com/kubernetes/kubernetes/pull/84207), [@robscott](https://github.com/robscott)) -* Simple script based hyperkube image that bundles all the necessary binaries. This is a equivalent replacement for the image based on the go based hyperkube command + image. ([#84662](https://github.com/kubernetes/kubernetes/pull/84662), [@dims](https://github.com/dims)) -* configmaps/extension-apiserver-authentication in kube-system is continuously updated by kube-apiservers, instead of just at apiserver start ([#82705](https://github.com/kubernetes/kubernetes/pull/82705), [@deads2k](https://github.com/deads2k)) -* kubeadm: fix an issue with the kube-proxy container env. variables ([#84888](https://github.com/kubernetes/kubernetes/pull/84888), [@neolit123](https://github.com/neolit123)) -* Updated EndpointSlices to use PublishNotReadyAddresses from Services. ([#84573](https://github.com/kubernetes/kubernetes/pull/84573), [@robscott](https://github.com/robscott)) -* The example API server has renamed its `wardle.k8s.io` API group to `wardle.example.com` ([#81670](https://github.com/kubernetes/kubernetes/pull/81670), [@liggitt](https://github.com/liggitt)) -* A new kubelet command line option, --reserved-cpus, is introduced to explicitly define the the CPU list that will be reserved for system. For example, if --reserved-cpus=0,1,2,3 is specified, then cpu 0,1,2,3 will be reserved for the system. On a system with 24 CPUs, the user may specify isolcpus=4-23 for the kernel option and use CPU 4-23 for the user containers. ([#83592](https://github.com/kubernetes/kubernetes/pull/83592), [@jianzzha](https://github.com/jianzzha)) -* Utilize diagnostics tool to dump GKE windows test logs ([#83517](https://github.com/kubernetes/kubernetes/pull/83517), [@YangLu1031](https://github.com/YangLu1031)) -* Improving the performance of Endpoint and EndpointSlice controllers by caching Service Selectors ([#84280](https://github.com/kubernetes/kubernetes/pull/84280), [@gongguan](https://github.com/gongguan)) -* When the go-client reflector relists, the ResourceVersion list option is set to the reflector's latest synced resource version to ensure the reflector does not "go back in time" and reprocess events older than it has already processed. If the the server responds with an HTTP 410 (Gone) status code response, the relist falls back to using resourceVersion="". ([#83520](https://github.com/kubernetes/kubernetes/pull/83520), [@jpbetz](https://github.com/jpbetz)) -* Kubernetes now requires go1.13.4+ to build ([#82809](https://github.com/kubernetes/kubernetes/pull/82809), [@liggitt](https://github.com/liggitt)) -* Ensure health probes are created for local traffic policy UDP services on Azure ([#84802](https://github.com/kubernetes/kubernetes/pull/84802), [@feiskyer](https://github.com/feiskyer)) -* CRDs defaulting is promoted to GA. Note: the feature gate CustomResourceDefaulting will be removed in 1.18. ([#84713](https://github.com/kubernetes/kubernetes/pull/84713), [@sttts](https://github.com/sttts)) -* Profiling is enabled by default in the scheduler ([#84835](https://github.com/kubernetes/kubernetes/pull/84835), [@denkensk](https://github.com/denkensk)) -* CSI Migration: GCE PD access mode now reflects read only status of inline volumes - this allows multi-attach for read only many PDs ([#84809](https://github.com/kubernetes/kubernetes/pull/84809), [@davidz627](https://github.com/davidz627)) -* All resources within the rbac.authorization.k8s.io/v1alpha1 and rbac.authorization.k8s.io/v1beta1 API groups are deprecated in favor of rbac.authorization.k8s.io/v1, and will no longer be served in v1.20. ([#84758](https://github.com/kubernetes/kubernetes/pull/84758), [@liggitt](https://github.com/liggitt)) -* Scheduler ComponentConfig fields are now pointers ([#83619](https://github.com/kubernetes/kubernetes/pull/83619), [@damemi](https://github.com/damemi)) -* Adding initial EndpointSlice metrics. ([#83257](https://github.com/kubernetes/kubernetes/pull/83257), [@robscott](https://github.com/robscott)) - - - -# v1.17.0-beta.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.17.0-beta.1 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes.tar.gz) | `6d6c61bb4d3372d56b7a429b5b8b5adbfb0aaddd65283d169bb719b8aca7c270db34f4699c4efee364565414770f9870c77a74a958725a8258f4bca271582e4c` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-src.tar.gz) | `9878c454c5b482621a7ddeab2ab3290fdafd0cfb3d580b261081ba3943b19b13e54aaa3a80ba68d7cbfa46864e51baedc686ab2a5271da6948493cc7ad730e2c` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-client-darwin-386.tar.gz) | `67c9d4d97db40ee94a5e021642eeea006dfd66f0c50ccd0d833c52d2bc4156fb044bb481b77e235db330e34ef580d42d8f1b366420abbab0b62c1cfe59f168a3` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-client-darwin-amd64.tar.gz) | `9a1494c082af52186620d1cd1b02f8a8f4af7e676e2ec217f41cf2915bd6fb1717e2c65e42c84ca842a542526f23edaa5ea378932b37f628611d00b08e9ff102` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-client-linux-386.tar.gz) | `9de6254a6a267ea283b6118d9da079f072e73ba377e81a361943f6d42baa5dd1b668b20f6909b697cbb5163930e9e497a08b16aa1d3e13feaf5be37047bcf83e` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-client-linux-amd64.tar.gz) | `a93d028c3adda047864b36f314752fbe4745bb6ad8f37574cc124eb1453bad07e3790dac4cc230e3ee2d3f6e9fb8c75d16860454acb3a6049400bb46489f7c51` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-client-linux-arm.tar.gz) | `5ca7feea1c4a33cf92f0ee79a92daee4876b43c626346dcc701bb7d6b956c0050f2ed6be1f2ba31756bf3b651da354bbad511cc3ce6c6349c12bcde41c8aec87` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-client-linux-arm64.tar.gz) | `d6a63efa140a1c2cde43252e9f917a02752e90628b51ca28ec7118245cd00da03b83f1bd920d0f1da789b8a0f3c73f41fbc9710c7bddcc24e6ac401966180cc5` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-client-linux-ppc64le.tar.gz) | `cdb805bc7bae052a0585b88c5e7980bd8bf9f32a840728455c18f4f01e03cda823bede2145772c4338e95c1a9b258bba7b8154714457fdb72114ac482eca122e` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-client-linux-s390x.tar.gz) | `a9ff545cad6a42dbcdf9f91214c15e2ebee2df20579b7f62ec07397eca792f20ee550841759d9d38c0affdb3071ad4a0a741c8641955eb222a5535dd8fb2d3e4` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-client-windows-386.tar.gz) | `eb3e4dbbb1dc6829bfa320853b695e61f4daafdff4aaa1f4ffb2e4be4b3f2e0c78f385a8a370811cb379f85d5e48a9b55608747592c771d4cbffd446a586cc6d` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-client-windows-amd64.tar.gz) | `ad0087ef7a0da961d3f22eab2ddab302be2190df5a2150046f7162dfc5072aa1866449a1aafc1c3db65246c392ec47bda20f2b4e7f750e895106fa9cbe1c80f8` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-server-linux-amd64.tar.gz) | `8f4878dfbe7e6abc30516bd801bb5c07873b4a80d8bc560e5b5593e0c1d64be2fa662a5f10dd93c947cfb1cfb7336db995a3f2b5c5cc3b259c929f058f27e222` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-server-linux-arm.tar.gz) | `3e5745bffbfb3551b4d4962b7ab6524c9b71f55860a91992dd0495266c56b740061f6b0711882e931ead456b14e4bfc9f08c4115a81553c1cfa2aa1cbd769d52` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-server-linux-arm64.tar.gz) | `ed00c196e6e229229b6523e7c3a201e00805304ad72c54bf7d0fc456d1791404bacf5120317f9a833b0bfddf70f4318d8ac274e3d94b80de0567dfea136b0b13` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-server-linux-ppc64le.tar.gz) | `57b5cc144fc4f3bfa6217e0d5494e4a4367f0c0d3504721d4343ff009f00fef1212150d0f1925fe0710eb335c526720e8a5c6fd54d27739b75cc91a06f27df94` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-server-linux-s390x.tar.gz) | `6f6d2b61a11e30199997582487f7e4f967771e0367d7f471043e0b9b373d463c5d7370ac3a8e5bbf4761e98e0ab19564f74aa7bf2c8443c9dd53397836d4db9b` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-node-linux-amd64.tar.gz) | `0c1b9dbb630a3bc47a835f9bfd9259d464abae8a30b0824a73b20892b013ed60d7e4989f48172b122bcc87e08bdd1af9ca9e790ae768b17e1dff190ae8f11b69` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-node-linux-arm.tar.gz) | `191087e26632dcc80991530b79bcda49bd4d0a131689ef48164a0bdb30e0a52ca69aa9a1ad42165707669287b8fd09afd407e556803d15b8c66739359a2b13b5` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-node-linux-arm64.tar.gz) | `f0f58aa8f9ad0ac0a1ee29d318ebb4d14f0bef4cba1fee9081ee2bfb6b41245108bd849470529668a93dcf8b41e53a319bd80ee0bd46ef02b844a995ffcc68e8` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-node-linux-ppc64le.tar.gz) | `bf574c4a46731ebc273910176ab67b2455b021972de3aeeb2a2b04af2a1079243728f151b9f06298b84832425ce600e54d8c13eec58598b284b44b21beaf73eb` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-node-linux-s390x.tar.gz) | `5a5d2ece704178a630dc228b51229b8598eb45bf3eaeae75b1475f249922c6a10b93220fd0f3f29d279ee0ceb34e8537a5b197b9454c4171adcc81facc80c3b6` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0-beta.1/kubernetes-node-windows-amd64.tar.gz) | `22fc9a7eb0e8244d51fd11f6d90f44e973983cb21692724c919493a235d2f9b1f22788fbfe8abaec9c52a98385767d2f0dd0bfebbc39c9e23c1047ebdaeb87cb` - -## Changelog since v1.17.0-alpha.3 - -### Action Required - -* Graduate ScheduleDaemonSetPods to GA. (feature gate will be removed in 1.18) action required. ([#82795](https://github.com/kubernetes/kubernetes/pull/82795), [@draveness](https://github.com/draveness)) - -### Other notable changes - -* kube-scheduler: emits a warning when a malformed component config file is used with v1alpha1. ([#84129](https://github.com/kubernetes/kubernetes/pull/84129), [@obitech](https://github.com/obitech)) -* add azure disk encryption(SSE+CMK) support ([#84605](https://github.com/kubernetes/kubernetes/pull/84605), [@andyzhangx](https://github.com/andyzhangx)) -* The certificate signer no longer accepts ca.key passwords via the CFSSL_CA_PK_PASSWORD environment variable. This capability was not prompted by user request, never advertised, and recommended against in the security audit. ([#84677](https://github.com/kubernetes/kubernetes/pull/84677), [@mikedanese](https://github.com/mikedanese)) -* Reduce default NodeStatusReportFrequency to 5 minutes. With this change, periodic node status updates will be send every 5m if node status doesn't change (otherwise they are still send with 10s). ([#84007](https://github.com/kubernetes/kubernetes/pull/84007), [@wojtek-t](https://github.com/wojtek-t)) - * Bump NodeProblemDetector version to v0.8.0 to reduce forced NodeStatus updates frequency to 5 minutes. -* CSI Topology feature is GA. The CSINodeInfo feature gate is deprecated and will be removed in a future release. The storage.k8s.io/v1beta1 CSINode object is deprecated and will be removed in a future release. ([#83474](https://github.com/kubernetes/kubernetes/pull/83474), [@msau42](https://github.com/msau42)) -* Only validate duplication of the RequestedToCapacityRatio custom priority and allow other custom predicates/priorities ([#84646](https://github.com/kubernetes/kubernetes/pull/84646), [@liu-cong](https://github.com/liu-cong)) -* Added kubelet serving certificate metric `server_rotation_seconds` which is a histogram reporting the age of a just rotated serving certificate in seconds. ([#84534](https://github.com/kubernetes/kubernetes/pull/84534), [@sambdavidson](https://github.com/sambdavidson)) -* During namespace deletion some controllers create event and log spam because they do not recognize namespace deletion as a terminal state. ([#84123](https://github.com/kubernetes/kubernetes/pull/84123), [@smarterclayton](https://github.com/smarterclayton)) -* Removed Alpha feature `MountContainers` ([#84365](https://github.com/kubernetes/kubernetes/pull/84365), [@codenrhoden](https://github.com/codenrhoden)) -* People can see the right log and note. ([#84637](https://github.com/kubernetes/kubernetes/pull/84637), [@zhipengzuo](https://github.com/zhipengzuo)) -* Ensure the KUBE-MARK-DROP chain in kube-proxy mode=iptables. The chain is ensured for both ipv4 and ipv6 in dual-stack operation. ([#84422](https://github.com/kubernetes/kubernetes/pull/84422), [@aojea](https://github.com/aojea)) -* deprecate cleanup-ipvs flag ([#83832](https://github.com/kubernetes/kubernetes/pull/83832), [@gongguan](https://github.com/gongguan)) -* Scheduler Policy API has a new recommended apiVersion "apiVersion: kubescheduler.config.k8s.io/v1" which is consistent with the scheduler API group "kubescheduler.config.k8s.io". It holds the same API as the old apiVersion "apiVersion: v1". ([#83578](https://github.com/kubernetes/kubernetes/pull/83578), [@Huang-Wei](https://github.com/Huang-Wei)) -* Fixed a bug in the single-numa-policy of the TopologyManager. Previously, best-effort pods would result in a terminated state with a TopologyAffinity error. Now they will run as expected. ([#83777](https://github.com/kubernetes/kubernetes/pull/83777), [@lmdaly](https://github.com/lmdaly)) -* local: support local filesystem volume with block resource reconstruction ([#84218](https://github.com/kubernetes/kubernetes/pull/84218), [@cofyc](https://github.com/cofyc)) -* Fix the bug that EndpointSlice for masters wasn't created after enabling EndpointSlice feature on a pre-existing cluster. ([#84421](https://github.com/kubernetes/kubernetes/pull/84421), [@tnqn](https://github.com/tnqn)) -* kubelet: a configuration file specified via `--config` is now loaded with strict deserialization, which fails if the config file contains duplicate or unknown fields. This protects against accidentally running with config files that are malformed, mis-indented, or have typos in field names, and getting unexpected behavior. ([#83204](https://github.com/kubernetes/kubernetes/pull/83204), [@obitech](https://github.com/obitech)) -* kubeadm now propagates proxy environment variables to kube-proxy ([#84559](https://github.com/kubernetes/kubernetes/pull/84559), [@yastij](https://github.com/yastij)) -* Reload apiserver SNI certificates from disk every minute ([#84303](https://github.com/kubernetes/kubernetes/pull/84303), [@jackkleeman](https://github.com/jackkleeman)) -* sourcesReady provides the readiness of kubelet configuration sources such as apiserver update readiness. ([#81344](https://github.com/kubernetes/kubernetes/pull/81344), [@zouyee](https://github.com/zouyee)) -* Update Azure SDK versions to v35.0.0 ([#84543](https://github.com/kubernetes/kubernetes/pull/84543), [@andyzhangx](https://github.com/andyzhangx)) -* Fixed EndpointSlice port name validation to match Endpoint port name validation (allowing port names longer than 15 characters) ([#84481](https://github.com/kubernetes/kubernetes/pull/84481), [@robscott](https://github.com/robscott)) -* Scheduler now reports metrics on cache size including nodes, pods, and assumed pods ([#83508](https://github.com/kubernetes/kubernetes/pull/83508), [@damemi](https://github.com/damemi)) -* kube-proxy: emits a warning when a malformed component config file is used with v1alpha1. ([#84143](https://github.com/kubernetes/kubernetes/pull/84143), [@phenixblue](https://github.com/phenixblue)) -* Update default etcd server version to 3.4.3 ([#84329](https://github.com/kubernetes/kubernetes/pull/84329), [@jingyih](https://github.com/jingyih)) -* Scheduler policy configs can no longer be declared multiple times ([#83963](https://github.com/kubernetes/kubernetes/pull/83963), [@damemi](https://github.com/damemi)) -* This PR sets the --cluster-dns flag value to kube-dns service IP whether or not NodeLocal DNSCache is enabled. NodeLocal DNSCache will listen on both the link-local as well as the service IP. ([#84383](https://github.com/kubernetes/kubernetes/pull/84383), [@prameshj](https://github.com/prameshj)) -* Remove prometheus cluster monitoring addon from kube-up ([#83442](https://github.com/kubernetes/kubernetes/pull/83442), [@serathius](https://github.com/serathius)) -* update the latest validated version of Docker to 19.03 ([#84476](https://github.com/kubernetes/kubernetes/pull/84476), [@neolit123](https://github.com/neolit123)) -* kubeadm: always mount the kube-controller-manager hostPath volume that is given by the --flex-volume-plugin-dir flag. ([#84468](https://github.com/kubernetes/kubernetes/pull/84468), [@neolit123](https://github.com/neolit123)) -* Introduce x-kubernetes-map-type annotation as a CRD API extension. Enables this particular validation for server-side apply. ([#84113](https://github.com/kubernetes/kubernetes/pull/84113), [@enxebre](https://github.com/enxebre)) -* kube-scheduler now fallbacks to emitting events using core/v1 Events when events.k8s.io/v1beta1 is disabled. ([#83692](https://github.com/kubernetes/kubernetes/pull/83692), [@yastij](https://github.com/yastij)) -* Migrate controller-manager and scheduler to EndpointsLeases leader election. ([#84084](https://github.com/kubernetes/kubernetes/pull/84084), [@wojtek-t](https://github.com/wojtek-t)) -* User can now use component config to configure NodeLabel plugin for the scheduler framework. ([#84297](https://github.com/kubernetes/kubernetes/pull/84297), [@liu-cong](https://github.com/liu-cong)) -* local: support local volume block mode reconstruction ([#84173](https://github.com/kubernetes/kubernetes/pull/84173), [@cofyc](https://github.com/cofyc)) -* Fixed kubectl endpointslice output for get requests ([#82603](https://github.com/kubernetes/kubernetes/pull/82603), [@robscott](https://github.com/robscott)) -* set config.BindAddress to IPv4 address "127.0.0.1" if not specified ([#83822](https://github.com/kubernetes/kubernetes/pull/83822), [@zouyee](https://github.com/zouyee)) -* CSI detach timeout increased from 10 seconds to 2 minutes ([#84321](https://github.com/kubernetes/kubernetes/pull/84321), [@cduchesne](https://github.com/cduchesne)) -* Update etcd client side to v3.4.3 ([#83987](https://github.com/kubernetes/kubernetes/pull/83987), [@wenjiaswe](https://github.com/wenjiaswe)) - * Deprecated prometheus request meta-metrics have been removed (http_request_duration_microseconds, http_request_duration_microseconds_sum, http_request_duration_microseconds_count, http_request_size_bytes, http_request_size_bytes_sum, http_request_size_bytes_count, http_requests_total, http_response_size_bytes, http_response_size_bytes_sum, http_response_size_bytes_count) due to removal from the prometheus client library. Prometheus http request meta-metrics are now generated from [promhttp.InstrumentMetricHandler](https://godoc.org/github.com/prometheus/client_golang/prometheus/promhttp#InstrumentMetricHandler) instead. -* The built-in system:csi-external-provisioner and system:csi-external-attacher cluster roles are removed as of 1.17 release ([#84282](https://github.com/kubernetes/kubernetes/pull/84282), [@tedyu](https://github.com/tedyu)) -* Pod labels can no longer be updated through the pod/status updates by nodes. ([#84260](https://github.com/kubernetes/kubernetes/pull/84260), [@tallclair](https://github.com/tallclair)) -* Reload apiserver serving certificate from disk every minute ([#84200](https://github.com/kubernetes/kubernetes/pull/84200), [@jackkleeman](https://github.com/jackkleeman)) -* Adds FQDN addressType support for EndpointSlice. ([#84091](https://github.com/kubernetes/kubernetes/pull/84091), [@robscott](https://github.com/robscott)) -* Add permit_wait_duration_seconds metric for scheduler. ([#84011](https://github.com/kubernetes/kubernetes/pull/84011), [@liu-cong](https://github.com/liu-cong)) -* Optimize inter-pod affinity preferredDuringSchedulingIgnoredDuringExecution type, up to 4x in some cases. ([#84264](https://github.com/kubernetes/kubernetes/pull/84264), [@ahg-g](https://github.com/ahg-g)) -* When a namespace is being deleted and spec.finalizers are still being processed, stop returning a 409 conflict error and instead return the object as we would during metadata.finalizer processing. ([#84122](https://github.com/kubernetes/kubernetes/pull/84122), [@smarterclayton](https://github.com/smarterclayton)) -* client-ca bundles for the all generic-apiserver based servers will dynamically reload from disk on content changes ([#83579](https://github.com/kubernetes/kubernetes/pull/83579), [@deads2k](https://github.com/deads2k)) -* Reduced frequency of DescribeVolumes calls of AWS API when attaching/detaching a volume. ([#84181](https://github.com/kubernetes/kubernetes/pull/84181), [@jsafrane](https://github.com/jsafrane)) -* Add a metric to track number of scheduler binding and prioritizing goroutines ([#83535](https://github.com/kubernetes/kubernetes/pull/83535), [@wgliang](https://github.com/wgliang)) -* Fix kubelet metrics gathering on non-English Windows hosts ([#84156](https://github.com/kubernetes/kubernetes/pull/84156), [@wawa0210](https://github.com/wawa0210)) -* A new `kubelet_preemptions` metric is reported from Kubelets to track the number of preemptions occuring over time, and which resource is triggering those preemptions. ([#84120](https://github.com/kubernetes/kubernetes/pull/84120), [@smarterclayton](https://github.com/smarterclayton)) - - - -# v1.17.0-alpha.3 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.17.0-alpha.3 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes.tar.gz) | `dfdb758b21a3dbd820063cb2ba4b4a19e5e1e03fdb95856bf9c99c2c436bbc2c259cd9ac233f0388b5c3690f2c78680362130e045442f4da5b8b94c3013bdc72` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-src.tar.gz) | `1718547ef5baf7ab6514bafff05451fc9d2f0db0b74f094b4d9004e949ef86ed246abf538fabe221e1adbe5aabc39b831c5d332d1aca8d65d58050092b8bcc8c` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-client-darwin-386.tar.gz) | `207b281b7da796faa34beaf0c8f7e70f9685b132c2838a12e0c8f2084627e2c98890379cc84eff851349d74ec0a273c1f8967085e1c6471acfa1d5fcf251b1cb` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-client-darwin-amd64.tar.gz) | `b0c19de40aa4210c0f06e1864779d60a69b75a443042f448746a0cd8cae680a7f4fab2dc7f3c61a31bde39ef9f490224be9559d6b15225cb7502b281c9968e51` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-client-linux-386.tar.gz) | `e8149e6373b48ab97b844b5450be12ec4bb86c869cdf71f98b78b88a9a9ef535df443241bf385fa4588dbe44abd0771b08a2af64dcdd6b891a4d3001cee9ac95` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-client-linux-amd64.tar.gz) | `d4176dfd049ffa1e59b7c4efd4d4189463153fa6cf53d5fc43c953983b74cbd75af9b8a0f7c13f86c5c3a3bb75ec453a676a931a38acaf32eb3ab98001d8f168` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-client-linux-arm.tar.gz) | `d6de12989c091e78ad95d7e01274936a28ca74219196c27775d00665c9fb98fa1e485652c395114d3ed09534932390035e6d5c7c14d5753614929ecaf90baa2e` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-client-linux-arm64.tar.gz) | `2f62aeaa39d7b7ab0840bd6c845d73e6135357edbbf93046c1fbd52d02a8c19377787ec016af2db74f236c82b71c1f9f704b650ee689876138f0da828a61951b` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-client-linux-ppc64le.tar.gz) | `895fd028e409cca1667a08ba6d1b32517b23b796530eecef7c1a4783287b45ff826e692d7a4ca103979f5b3a2e8d6550c1df5b3144aa686fe7fed7122b2ef051` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-client-linux-s390x.tar.gz) | `50fe03594da3c90932e83d0befad9053ef1fb72f4af1a5c139455c8acc6c10adec522efe80195013f88a3b40b0371ff7de85544c3c3d770fea37cff727ff5147` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-client-windows-386.tar.gz) | `3e32d47078da5d3d31c4b854c01e081a437fab2c01c7e7be291262b029046acaf96efa6529383b3410b53bc2973ec82c6fe7b4eb4193d15eda4abb73210cecf6` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-client-windows-amd64.tar.gz) | `42ec1f3273ea070cedcf65bbb76ebf05a24aca5ed55af4b17889fb1be3df99b4e4c023099994cbec572968c297a4671ce4a966c9dacc3c8385a380741d067f2b` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-server-linux-amd64.tar.gz) | `0b1fe1eca603579f70c13509dff32dcb8383ee340b8fc6b8edf23cdaf1f86cf9c8d710380a9350de8b516c5c742eb10e28c97cadf7afa57532bd663c88cad96f` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-server-linux-arm.tar.gz) | `ac1a804dd8980281afe12a116ffaf4ed9fc1066c3a531f3a6ced14f021c69d60ff7120bfbfe159cd93898b937c4c3baddce4429dd7933654f0a6f6bcbeed8fab` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-server-linux-arm64.tar.gz) | `e34daf4c37ab5c2f52a116ed4ca0f7b52c0d0b5863d027550241b03f9019dcb6dd7d16df7c6ec7a43a86737b16015c19a2a75a19173c2dd9ee574b5f08098881` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-server-linux-ppc64le.tar.gz) | `9c285800beecc53cf5293604270cbcc5ba6245ddf4dfe0c0ec9a1359ed3771d7e1939c2496b2c24bf4cc541e8b29408ec66c24804b321612331c553b55c2c3c8` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-server-linux-s390x.tar.gz) | `ea883497e80fdb2182342a2bae0382c7d38b0273cae6f8a5ee05d149669134d9b50613184e1fc289d7ce999c172f455f76b08e40cc014a33fc2c9c6491eee9c1` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-node-linux-amd64.tar.gz) | `450197a746a52c3129f97e50b4b69bf2d1e94290be72f1ae143e36bb0fd76b2175cc917ae47389feb0163ae108a752929ac4fa8f90b8dee21f0be5e198c847a5` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-node-linux-arm.tar.gz) | `c10c6ea591a15dc873afb01a7aa1916188e411ba57201f436d6d96cd2bad8cbb4e3bccc743759e3ce6d93e0f13c026ae5d646684611fe11134ba05321522f78c` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-node-linux-arm64.tar.gz) | `47764435a9367571f7de12d54f0aff7d615fc50383230c6fba08475dc33be60d2912dd2ee5c3f083a450866281c1df90663b1737f2d8293a73b48720aeda6a8b` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-node-linux-ppc64le.tar.gz) | `48d2694450f4b94e8ff76e95ef102670d4a4c933010afadf7a019db73d966462a07ff222f9b48510f5dd3ac8f9076e31646d490ec0c1425d4be7b8475cd11cd6` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-node-linux-s390x.tar.gz) | `20e712415af7304ecb55e9c2c2f29dda3af4a78f5833499c1f51a492c929a4590717d60fce537fb81c70784a6ca1503f7e731e1779cbc59673f69a03f7533bc0` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.3/kubernetes-node-windows-amd64.tar.gz) | `2e88bf26e1293dd733cf1bfe1f0f2dcfb5c482687cf52690488e943a0922a5c9565dd9ce000af76597e0bf1ac8f42ce12044c0ec5e3564db5c2f6a409e9efdb6` - -## Changelog since v1.17.0-alpha.2 - -### Action Required - -* Graduate TaintNodesByCondition to GA in 1.17. (feature gate will be removed in 1.18) action required ([#82703](https://github.com/kubernetes/kubernetes/pull/82703), [@draveness](https://github.com/draveness)) - -### Other notable changes - -* TaintNodesByCondition was graduated to GA, CheckNodeMemoryPressure, CheckNodePIDPressure, CheckNodeDiskPressure, CheckNodeCondition were accidentally removed since 1.12, the replacement is to use CheckNodeUnschedulablePred ([#84152](https://github.com/kubernetes/kubernetes/pull/84152), [@draveness](https://github.com/draveness)) -* filter plugin for cloud provider storage predicate ([#84148](https://github.com/kubernetes/kubernetes/pull/84148), [@gongguan](https://github.com/gongguan)) -* Fixed binding of block PersistentVolumes / PersistentVolumeClaims when BlockVolume feature is off. ([#84049](https://github.com/kubernetes/kubernetes/pull/84049), [@jsafrane](https://github.com/jsafrane)) -* Updated kube-proxy ipvs README with correct grep argument to list loaded ipvs modules ([#83677](https://github.com/kubernetes/kubernetes/pull/83677), [@pete911](https://github.com/pete911)) -* Add data cache flushing during unmount device for GCE-PD driver in Windows Server. ([#83591](https://github.com/kubernetes/kubernetes/pull/83591), [@jingxu97](https://github.com/jingxu97)) -* Adds a metric apiserver_request_error_total to kube-apiserver. This metric tallies the number of request_errors encountered by verb, group, version, resource, subresource, scope, component, and code. ([#83427](https://github.com/kubernetes/kubernetes/pull/83427), [@logicalhan](https://github.com/logicalhan)) -* Refactor scheduler's framework permit API. ([#83756](https://github.com/kubernetes/kubernetes/pull/83756), [@hex108](https://github.com/hex108)) -* The kubectl's api-resource command now has a `--sort-by` flag to sort resources by name or kind. ([#81971](https://github.com/kubernetes/kubernetes/pull/81971), [@laddng](https://github.com/laddng)) -* Update to use go1.12.12 ([#84064](https://github.com/kubernetes/kubernetes/pull/84064), [@cblecker](https://github.com/cblecker)) -* Update to Ingress-GCE v1.6.1 ([#84018](https://github.com/kubernetes/kubernetes/pull/84018), [@rramkumar1](https://github.com/rramkumar1)) -* Update Cluster Autoscaler version to 1.16.2 (CA release docs: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.16.2) ([#84038](https://github.com/kubernetes/kubernetes/pull/84038), [@losipiuk](https://github.com/losipiuk)) -* When scaling down a ReplicaSet, delete doubled up replicas first, where a "doubled up replica" is defined as one that is on the same node as an active replica belonging to a related ReplicaSet. ReplicaSets are considered "related" if they have a common controller (typically a Deployment). ([#80004](https://github.com/kubernetes/kubernetes/pull/80004), [@Miciah](https://github.com/Miciah)) -* Promote WatchBookmark feature to GA. ([#83195](https://github.com/kubernetes/kubernetes/pull/83195), [@wojtek-t](https://github.com/wojtek-t)) - * With WatchBookmark feature, clients are able to request watch events with BOOKMARK type. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. -* kubeadm no longer removes /etc/cni/net.d as it does not install it. Users should remove files from it manually or rely on the component that created them ([#83950](https://github.com/kubernetes/kubernetes/pull/83950), [@yastij](https://github.com/yastij)) -* kubeadm: enhance certs check-expiration to show the expiration info of related CAs ([#83932](https://github.com/kubernetes/kubernetes/pull/83932), [@SataQiu](https://github.com/SataQiu)) -* Add incoming pods metrics to scheduler queue. ([#83577](https://github.com/kubernetes/kubernetes/pull/83577), [@liu-cong](https://github.com/liu-cong)) -* An end-user may choose to request logs without confirming the identity of the backing kubelet. This feature can be disabled by setting the `AllowInsecureBackendProxy` feature-gate to false. ([#83419](https://github.com/kubernetes/kubernetes/pull/83419), [@deads2k](https://github.com/deads2k)) -* Switched intstr.Type to sized integer to follow API guidelines and improve compatibility with proto libraries ([#83956](https://github.com/kubernetes/kubernetes/pull/83956), [@liggitt](https://github.com/liggitt)) -* Fix handling tombstones in pod-disruption-budged controller. ([#83951](https://github.com/kubernetes/kubernetes/pull/83951), [@zouyee](https://github.com/zouyee)) -* client-go: improved allocation behavior of the delaying workqueue when handling objects with far-future ready times. ([#83945](https://github.com/kubernetes/kubernetes/pull/83945), [@barkbay](https://github.com/barkbay)) -* Added the `crictl` Windows binaries as well as the Linux 32bit binary to the release archives ([#83944](https://github.com/kubernetes/kubernetes/pull/83944), [@saschagrunert](https://github.com/saschagrunert)) -* Fixed an issue with informers missing an `Added` event if a recently deleted object was immediately recreated at the same time the informer dropped a watch and relisted. ([#83911](https://github.com/kubernetes/kubernetes/pull/83911), [@matte21](https://github.com/matte21)) -* Allow dynamically set glog logging level of kube-scheduler ([#83910](https://github.com/kubernetes/kubernetes/pull/83910), [@mrkm4ntr](https://github.com/mrkm4ntr)) -* clean duplicate GetPodServiceMemberships function ([#83902](https://github.com/kubernetes/kubernetes/pull/83902), [@gongguan](https://github.com/gongguan)) -* Add information from Lease object corresponding to a given Node to kubectl describe node output ([#83899](https://github.com/kubernetes/kubernetes/pull/83899), [@wojtek-t](https://github.com/wojtek-t)) -* Gives the right error message when using `kubectl delete` a wrong resource. ([#83825](https://github.com/kubernetes/kubernetes/pull/83825), [@zhouya0](https://github.com/zhouya0)) -* The userspace mode of kube-proxy no longer confusingly logs messages about deleting endpoints that it is actually adding. ([#83644](https://github.com/kubernetes/kubernetes/pull/83644), [@danwinship](https://github.com/danwinship)) -* Add latency and request count metrics for scheduler framework. ([#83569](https://github.com/kubernetes/kubernetes/pull/83569), [@liu-cong](https://github.com/liu-cong)) -* ETCD version monitor metrics are now marked as with the ALPHA stability level. ([#83283](https://github.com/kubernetes/kubernetes/pull/83283), [@RainbowMango](https://github.com/RainbowMango)) -* Significant kube-proxy performance improvements when using Endpoint Slices at scale. ([#83206](https://github.com/kubernetes/kubernetes/pull/83206), [@robscott](https://github.com/robscott)) -* Upgrade default etcd server version to 3.3.17 ([#83804](https://github.com/kubernetes/kubernetes/pull/83804), [@jpbetz](https://github.com/jpbetz)) - - - -# v1.17.0-alpha.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.17.0-alpha.2 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes.tar.gz) | `37583337b992d9a5ebe5a4677e08c13617b8b9db9ee8f049773b624351c00acacf02daca2f87a357aaa75edcc3a4db2c64e6a7da502a6153d06e228ff6be6006` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-src.tar.gz) | `a44fee5be20c7fb64c58d0a69377074db05ec6889892c93ce970406cb393a1fde60a75612e74802cb2e0085b6357183c1f30e4b322dacf6f30597ab5fd5948f9` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-client-darwin-386.tar.gz) | `4aa92894eeaedb022e5409e08784ce1bd34ba268032ef93ad4c438b6ed9f1a210222f5f4a4fc68198d71e167c78bb7695459e4c99059898e1e0cf7c1ae70080c` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-client-darwin-amd64.tar.gz) | `1815a3bdd1c13782026fced8720201dea2e518dc56a43e2b53f89341108f03ec0b5ea6efadd8460ab1715b65ae52f9bdd49066f716573e0d76ff3036e193b8d3` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-client-linux-386.tar.gz) | `9a470907d6203e69c996f8db3cc257af23f9b35236ee2d5a87d22cd6056eef4f07671cd5711ec4999c1edd93385c4f7e5d6d0b8096404e88414a1ed83b58de4f` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-client-linux-amd64.tar.gz) | `011d44cf35c841d331a5a0d88b8a5deb7781fa678702ac6402050d096e72396dc76ccaa67a371273bc428612536357c19306d250bd47db4ac5147ff8cc5e1296` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-client-linux-arm.tar.gz) | `1f45d9a9852d2b0a0420b0a26b3add9031d7d691c55660d60580614e6ab6e2d732017832ed3f737f8a43db088e91b64edf12298675be6d128775dce3e4d0ddbe` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-client-linux-arm64.tar.gz) | `e355f69caed044e5e27efe7ae42027e799a87ec647810fbadf644d147de2f6bd478e338ebb211044a9e6483d32f3534cc40d7b4d735d16d3b6c55e7975515f20` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-client-linux-ppc64le.tar.gz) | `355e0d8c5f241bc2303c38447c241ff8f5151af51aeacf15fa2b96e2721ecc011b5aec84c3f93a26aad86aa29179d16054e34d45bff2824c1abbf1deb571f0f5` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-client-linux-s390x.tar.gz) | `7cdfc6cde7922290b46f291a168519f4c923fee97968399940164a8a7d8592701b262b30fa299c13f025c70f46f5d32c17a9699f0bf3e5bd55ab4811f01f59ed` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-client-windows-386.tar.gz) | `7170da100b2d1d8700990c4175c7d048347b8dcc71e0ceb6c01728f5e6266dd0d5766e5206820d9e54d243ffa73abd5dd72715d6984598655f6160d43cb45a15` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-client-windows-amd64.tar.gz) | `74484b5c841e1c57c9baf88b84a9cbf3b9865527a8723815cbe8e7384805c80d971126c0b54d52e446d55b04e209984461ec8a8eff4c58aaa50397db0111cca5` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-server-linux-amd64.tar.gz) | `3fb3c5da6e45b32e8d89d4914f0b04cf95242cb0e4ea70b06a665c2975d8b6bbff6206e1f8769f49836b9dc12fb0946cc1986e475945413aff053661941f622b` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-server-linux-arm.tar.gz) | `ff71c9a3f81f2e43d541b9b043e5f43fd30972c2b0ae5d9f3992f76effdcab2d027835844109ee3b501e365994f97aa5b6528a9d23db8ec3f05af6cb6d0e01d0` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-server-linux-arm64.tar.gz) | `26b9fce5ed930ad3eea5eeab3bec3b009f65837139f7da3644aacdcccda654fe542b03e1c4280950ca561f624ef24da01acff23e3f3b72d1001d794c8d6aa230` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-server-linux-ppc64le.tar.gz) | `ad980f5efe83da1f2a202035eb1cff44ea72692fc3fc5f7d23fd8fc3b80a6797dbb263cc240d8fd2cde80a786b48352127f52c0a1db02e9d09a44440c1704406` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-server-linux-s390x.tar.gz) | `8e1ab7abd4c13c3d4211e5dd1be63ecd482691fd2cb7b2d3492bb2a02003ec33abe0a7b26e4e93f9586c5fc6fddbfbb559c4c28dcdc65564aeadceb2bc543a7d` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-node-linux-amd64.tar.gz) | `c0928e414e439ba63321ce770a04ea332a4cc93ec87dd9d222fe3f5a593995111a6c0a60a413018d59367df6b4d0ab6f64904551f29f5c94ea406c68cc43b3b3` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-node-linux-arm.tar.gz) | `990a253ba49203348a587ca4d4acf7c25ff47a97b39519dfc7d5bdc2f3ea4713930e17dc6b9ff02a2a6ae2e84011d05d4471dfbfe1ab0627c102f9aa2205114d` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-node-linux-arm64.tar.gz) | `79381ad17eefc679fb549126eba23ffa65e625d0e1fec459dd54823897947b17a0e7ef6f446dc9e54f16b3e4995e4a084146dcf895e994813233953a3795e3a3` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-node-linux-ppc64le.tar.gz) | `7cfea9b9fa27dcc2024260e19d5e74db2175b491093c8906721d99c94b46af1c2b3ad91fe0fb799de639191fcb0e8ceab1b67bb260d615825002a3239c7b3ed0` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-node-linux-s390x.tar.gz) | `590bc2afd835a4a236a4a2ab2cde416aae9efdec14c34355a54b671d89308f3729f5af076139cc9c78e323666565ba1fa441149b681fc6addcab133205a3c41f` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.2/kubernetes-node-windows-amd64.tar.gz) | `4c15c7c30de0f9d921b534433332b14eb685ad8a3a416315def1cc1064b802227ea4b556bc53a68d75be898b49acadee8317a2355635a69d1c4d305d890e5009` - -## Changelog since v1.17.0-alpha.1 - -### Action Required - -* Expand scheduler priority functions and scheduling framework plugins' node score range to [0, 100]. action required. Note: this change is internal and does not affect extender and RequestedToCapacityRatio custom priority, which are still expected to provide a [0, 10] range. ([#83522](https://github.com/kubernetes/kubernetes/pull/83522), [@draveness](https://github.com/draveness)) -* action required: kubeadm: when adding extra apiserver authorization-modes, the defaults "Node,RBAC" are no longer prepended in the resulting static Pod manifests and a full override is allowed. ([#82616](https://github.com/kubernetes/kubernetes/pull/82616), [@ghouscht](https://github.com/ghouscht)) -* ACTION REQUIRED: kubeadm: properly enable kubelet client certificate rotation on primary control-plane nodes, created using "kubeadm init". A side effect of this change is that for external CA users, kubeadm now requires "bootstrap-kubelet.conf" instead of "kubelet.conf" during "kubeadm init" and its phases. ([#83339](https://github.com/kubernetes/kubernetes/pull/83339), [@neolit123](https://github.com/neolit123)) -* Action Required: `kubeadm.k8s.io/v1beta1` has been deprecated, you should update your config to use newer non-deprecated API versions. ([#83276](https://github.com/kubernetes/kubernetes/pull/83276), [@Klaven](https://github.com/Klaven)) - -### Other notable changes - -* [migration phase 1] PodFitsHostPorts as filter plugin ([#83659](https://github.com/kubernetes/kubernetes/pull/83659), [@wgliang](https://github.com/wgliang)) -* [migration phase 1] PodFitsResources as framework plugin ([#83650](https://github.com/kubernetes/kubernetes/pull/83650), [@wgliang](https://github.com/wgliang)) -* Fixed attachment of AWS volumes that have just been detached. ([#83567](https://github.com/kubernetes/kubernetes/pull/83567), [@jsafrane](https://github.com/jsafrane)) -* [migration phase 1] PodMatchNodeSelector/NodAffinity as filter plugin ([#83660](https://github.com/kubernetes/kubernetes/pull/83660), [@wgliang](https://github.com/wgliang)) -* Upgrade to etcd client 3.3.17 to fix bug where etcd client does not parse IPv6 addresses correctly when members are joining, and to fix bug where failover on multi-member etcd cluster fails certificate check on DNS mismatch ([#83801](https://github.com/kubernetes/kubernetes/pull/83801), [@jpbetz](https://github.com/jpbetz)) -* Fixed panic when accessing CustomResources of a CRD with x-kubernetes-int-or-string. ([#83787](https://github.com/kubernetes/kubernetes/pull/83787), [@sttts](https://github.com/sttts)) -* Change `pod_preemption_victims` metric from Gauge to Histogram. ([#83603](https://github.com/kubernetes/kubernetes/pull/83603), [@Tabrizian](https://github.com/Tabrizian)) -* Expose SharedInformerFactory in the framework handle ([#83663](https://github.com/kubernetes/kubernetes/pull/83663), [@draveness](https://github.com/draveness)) -* Add more tracing steps in generic_scheduler ([#83539](https://github.com/kubernetes/kubernetes/pull/83539), [@wgliang](https://github.com/wgliang)) -* [migration phase 1] PodFitsHost as filter plugin ([#83662](https://github.com/kubernetes/kubernetes/pull/83662), [@wgliang](https://github.com/wgliang)) -* The topology manager aligns resources for pods of all QoS classes with respect to NUMA locality, not just Guaranteed QoS pods. ([#83492](https://github.com/kubernetes/kubernetes/pull/83492), [@ConnorDoyle](https://github.com/ConnorDoyle)) -* Fix unsafe JSON construction in a number of locations in the codebase ([#81158](https://github.com/kubernetes/kubernetes/pull/81158), [@zouyee](https://github.com/zouyee)) -* Fixed a bug in the single-numa-node policy of the TopologyManager. Previously, pods that only requested CPU resources and did not request any third-party devices would fail to launch with a TopologyAffinity error. Now they will launch successfully. ([#83697](https://github.com/kubernetes/kubernetes/pull/83697), [@klueska](https://github.com/klueska)) -* Add per-pod scheduling metrics across 1 or more schedule attempts. ([#83674](https://github.com/kubernetes/kubernetes/pull/83674), [@liu-cong](https://github.com/liu-cong)) -* Fix validation message to mention bytes, not characters. ([#80880](https://github.com/kubernetes/kubernetes/pull/80880), [@DirectXMan12](https://github.com/DirectXMan12)) -* external facing APIs in pluginregistration and deviceplugin packages are now available under k8s.io/kubelet/pkg/apis/ ([#83551](https://github.com/kubernetes/kubernetes/pull/83551), [@dims](https://github.com/dims)) -* Fix error where metrics related to dynamic kubelet config isn't registered ([#83184](https://github.com/kubernetes/kubernetes/pull/83184), [@odinuge](https://github.com/odinuge)) -* The VolumeSubpathEnvExpansion feature is graduating to GA. The `VolumeSubpathEnvExpansion` feature gate is unconditionally enabled, and will be removed in v1.19. ([#82578](https://github.com/kubernetes/kubernetes/pull/82578), [@kevtaylor](https://github.com/kevtaylor)) -* Openstack: Do not delete managed LB in case of security group reconciliation errors ([#82264](https://github.com/kubernetes/kubernetes/pull/82264), [@multi-io](https://github.com/multi-io)) -* The mutating and validating admission webhook plugins now read configuration from the admissionregistration.k8s.io/v1 API. ([#80883](https://github.com/kubernetes/kubernetes/pull/80883), [@liggitt](https://github.com/liggitt)) -* kubeadm: implemented structured output of 'kubeadm token list' in JSON, YAML, Go template and JsonPath formats ([#78764](https://github.com/kubernetes/kubernetes/pull/78764), [@bart0sh](https://github.com/bart0sh)) -* kube-proxy: a configuration file specified via `--config` is now loaded with strict deserialization, which fails if the config file contains duplicate or unknown fields. This protects against accidentally running with config files that are malformed, mis-indented, or have typos in field names, and getting unexpected behavior. ([#82927](https://github.com/kubernetes/kubernetes/pull/82927), [@obitech](https://github.com/obitech)) -* Add "podInitialBackoffDurationSeconds" and "podMaxBackoffDurationSeconds" to the scheduler config API ([#81263](https://github.com/kubernetes/kubernetes/pull/81263), [@draveness](https://github.com/draveness)) -* Authentication token cache size is increased (from 4k to 32k) to support clusters with many nodes or many namespaces with active service accounts. ([#83643](https://github.com/kubernetes/kubernetes/pull/83643), [@lavalamp](https://github.com/lavalamp)) -* Bumps the minimum version of Go required for building Kubernetes to 1.12.4. ([#83596](https://github.com/kubernetes/kubernetes/pull/83596), [@jktomer](https://github.com/jktomer)) -* kube-proxy iptables probabilities are now more granular and will result in better distribution beyond 319 endpoints. ([#83599](https://github.com/kubernetes/kubernetes/pull/83599), [@robscott](https://github.com/robscott)) -* Fixed the bug that deleted services were processed by EndpointSliceController repeatedly even their cleanup were successful. ([#82996](https://github.com/kubernetes/kubernetes/pull/82996), [@tnqn](https://github.com/tnqn)) -* If a bad flag is supplied to a kubectl command, only a tip to run --help is printed, instead of the usage menu. Usage menu is printed upon running `kubectl command --help`. ([#82423](https://github.com/kubernetes/kubernetes/pull/82423), [@sallyom](https://github.com/sallyom)) -* If container fails because ContainerCannotRun, do not utilize the FallbackToLogsOnError TerminationMessagePolicy, as it masks more useful logs. ([#81280](https://github.com/kubernetes/kubernetes/pull/81280), [@yqwang-ms](https://github.com/yqwang-ms)) -* Fixed cleanup of raw block devices after kubelet restart. ([#83451](https://github.com/kubernetes/kubernetes/pull/83451), [@jsafrane](https://github.com/jsafrane)) -* Commands like `kubectl apply` now return errors if schema-invalid annotations are specified, rather than silently dropping the entire annotations section. ([#83552](https://github.com/kubernetes/kubernetes/pull/83552), [@liggitt](https://github.com/liggitt)) -* Expose kubernetes client in the scheduling framework handle. ([#82432](https://github.com/kubernetes/kubernetes/pull/82432), [@draveness](https://github.com/draveness)) -* kubeadm: fix wrong default value for the "upgrade node --certificate-renewal" flag. ([#83528](https://github.com/kubernetes/kubernetes/pull/83528), [@neolit123](https://github.com/neolit123)) -* IP validates if a string is a valid IP address ([#83104](https://github.com/kubernetes/kubernetes/pull/83104), [@zouyee](https://github.com/zouyee)) -* The `--certificate-authority` flag now correctly overrides existing skip TLS or CA data settings in the kubeconfig file ([#83547](https://github.com/kubernetes/kubernetes/pull/83547), [@liggitt](https://github.com/liggitt)) -* hyperkube will now be available in a new github repository and will not be included in the kubernetes release from 1.17 onwards ([#83454](https://github.com/kubernetes/kubernetes/pull/83454), [@dims](https://github.com/dims)) -* more complete and accurate logging of stack backtraces in E2E failures ([#82176](https://github.com/kubernetes/kubernetes/pull/82176), [@pohly](https://github.com/pohly)) -* Kubeadm: add support for 127.0.0.1 as advertise address. kubeadm will automatically replace this value with matching global unicast IP address on the loopback interface. ([#83475](https://github.com/kubernetes/kubernetes/pull/83475), [@fabriziopandini](https://github.com/fabriziopandini)) -* Rename PluginContext to CycleState in the scheduling framework ([#83430](https://github.com/kubernetes/kubernetes/pull/83430), [@draveness](https://github.com/draveness)) -* kube-scheduler: a configuration file specified via `--config` is now loaded with strict deserialization, which fails if the config file contains duplicate or unknown fields. This protects against accidentally running with config files that are malformed, mis-indented, or have typos in field names, and getting unexpected behavior. ([#83030](https://github.com/kubernetes/kubernetes/pull/83030), [@obitech](https://github.com/obitech)) -* Significant kube-proxy performance improvements for non UDP ports. ([#83208](https://github.com/kubernetes/kubernetes/pull/83208), [@robscott](https://github.com/robscott)) -* Fixes a flaw (CVE-2019-11253) in json/yaml decoding where large or malformed documents could consume excessive server resources. Request bodies for normal API requests (create/delete/update/patch operations of regular resources) are now limited to 3MB. ([#83261](https://github.com/kubernetes/kubernetes/pull/83261), [@liggitt](https://github.com/liggitt)) - - - -# v1.17.0-alpha.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.17.0-alpha.1 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes.tar.gz) | `40985964b5f4b1e1eb448a8ca61ae5fe05b76cf4e97a4a6b0df0f7933071239ed8c3a6753d8ed8ba0c963694c0f94cce2b5976ddcc0386018cdc66337d80d006` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-src.tar.gz) | `475dfeb8544804dcc206f2284205fb1ee0bcb73169419be5e548ff91ffe6a35cea7e94039af562baee15933bef3afaa7ff10185e40926c7baa60d5936bcc9c1b` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-client-darwin-386.tar.gz) | `3f894661ed9b6ed3e75b6882e6c3e4858325f3b7c5c83cb8f7f632a8c8f30dd96a7dd277e4676a8a2ab598fe68da6473f414b494c63bfb4ed386a20dad7ae11a` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-client-darwin-amd64.tar.gz) | `f3070d79b0835fdc0791bbc31a334d8b46bf1bbb02f389c871b31063417598d17dd464532df420f2fa0dbbbb9f8cc0730a7ca4e19af09f873e0777d1e296f20c` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-client-linux-386.tar.gz) | `64e8961fa32a18a780e40b753772c6794c90a6dd5834388fd67564bb36f5301ea82377893f51e7c7c7247f91ca813e59f5f293522a166341339c2e5d34ac3f28` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-client-linux-amd64.tar.gz) | `d7ba0f5f4c879d8dcd4404a7c18768190f82985425ab394ddc832ee71c407d0ac517181a24fd5ca2ebfd948c6fa63d095a43c30cf195c9b9637e1a762a2d8d2f` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-client-linux-arm.tar.gz) | `36fc47ee9530ee8a89d64d4be6b78b09831d0838a01b63d2a824a9e7dd0c2127ef1b49f539d16ba1248fbf40a7eb507b968b18c59080e7b80a7a573138218e36` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-client-linux-arm64.tar.gz) | `a0a8fba0f4424f0a1cb7bad21244f47f98ba717165eaa49558c2612e1949a1b34027e23ccbd44959b391b6d9f82046c5bc07eb7d773603b678bbc0e5bf54502c` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-client-linux-ppc64le.tar.gz) | `eaae9ed0cc8c17f27cff31d92c95c11343b9f383de27e335c83bfdf236e6da6ab55a9d89b3e0b087be159d6b64de21827ca19c861ecfb6471b394ea3720bcb61` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-client-linux-s390x.tar.gz) | `994cf2dc42d20d36956a51b98dde31a00eae3bd853f7be4fbc32f48fec7b323a47ea5d841f31d2ca41036d27fbfaa3be4f2286654711245accf01c3be81f540c` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-client-windows-386.tar.gz) | `68ebe4abea5a174eb189caea567e24e87cca57e7fbc9f8ec344aafbaf48c892d52d179fef67f9825be0eb93f5577f7573873b946e688de78c442c798a5b426bc` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-client-windows-amd64.tar.gz) | `f29cd3caf5b40622366eae87e8abb47bea507f275257279587b507a00a858de87bcfa56894ae8cd6ba754688fd5cdf093ce6c4e0d0fd1e21ca487a3a8a9fd9f9` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-server-linux-amd64.tar.gz) | `93e560e8572c6a593583d20a35185b93d04c950e6b1980a7b40ca5798958d184724ddebd1fa9377cfe87be4d11169bdba2a9f7fa192690f9edae04779aaf93a4` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-server-linux-arm.tar.gz) | `fe2af93336280e1251f97afecbdfb7416fd9dd7d08b3e5539abeea8ccaf7114cac399e832fa52359d2bc63ec9f8703ae3bca340db85f9b764816f4c36e4eefee` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-server-linux-arm64.tar.gz) | `efc32c8477efda554d8e82d6e52728f58e706d3d53d1072099b3297c310632e8adece6030427154287d5525e74158c0b44a33421b3dd0ffb57372d63768e82ec` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-server-linux-ppc64le.tar.gz) | `bda4fce6f5be7d0102ff265e0ba10e4dab776caeba1cebdf57db9891a34b4974fa57ac014aa6eca2dcfc1b64e9f67c8168e18026ae30c72ba61205d180f6e8ff` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-server-linux-s390x.tar.gz) | `655c7157176f4f972c80877d73b0e390aaff455a5dcd046b469eb0f07d18ea1aaef447f90127be699e74518072ea1605652798fa431eb6ac7ee4e4fd85676362` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-node-linux-amd64.tar.gz) | `1ec25c0350973ed06f657f2b613eb07308a9a4f0af7e72ebc5730c3c8d39ce3139a567acc7a224bebbe4e3496633b6053082b7172e2ce76b228c4b697f03f3d1` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-node-linux-arm.tar.gz) | `c65ac3db834596bcb9e81ffa5b94493244385073a232e9f7853759bce2b96a8199f79081d2f00a1b5502d53dc1e82a89afa97ffdb83994f67ebc261de9fb62b9` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-node-linux-arm64.tar.gz) | `0de8af66269db1ef7513f92811ec52a780abb3c9c49c0a4de9337eb987119bb583d03327c55353b4375d233e1a07a382cc91bdbf9477cf66e3f9e7fb0090499e` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-node-linux-ppc64le.tar.gz) | `adb43c68cd5d1d52f254a14d80bb66667bfc8b367176ff2ed242184cf0b5accd3206bcbd42dec3f132bf1a230193812ae3e7a0c48f68634cb5f67538385e142a` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-node-linux-s390x.tar.gz) | `1c834cfc06b9ba4a6da3bca2d504b734c935436546bc9304c7933e256dba849d665d34e82f48180f3975a907d37fec5ffb929923352ff63e1d3ff84143eea65b` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.17.0-alpha.1/kubernetes-node-windows-amd64.tar.gz) | `6fc54fd17ebb65a6bd3d4efe93a713cc2aaea54599ddd3d73d01e93d6484087271b3ca65ed7a5861090356224140776a9606c10873b6b106bc9a6634c25b1677` - -## Changelog since v1.16.0 - -### Action Required - -* The deprecated feature gates `GCERegionalPersistentDisk`, `EnableAggregatedDiscoveryTimeout` and `PersistentLocalVolumes` are now unconditionally enabled and can no longer be specified in component invocations. ([#82472](https://github.com/kubernetes/kubernetes/pull/82472), [@draveness](https://github.com/draveness)) -* ACTION REQUIRED: ([#81668](https://github.com/kubernetes/kubernetes/pull/81668), [@darshanime](https://github.com/darshanime)) - * Deprecate the default service IP CIDR. The previous default was `10.0.0.0/24` which will be removed in 6 months/2 releases. Cluster admins must specify their own desired value, by using `--service-cluster-ip-range` on kube-apiserver. -* Remove deprecated "include-uninitialized" flag. action required ([#80337](https://github.com/kubernetes/kubernetes/pull/80337), [@draveness](https://github.com/draveness)) - -### Other notable changes - -* Bump version of event-exporter to 0.3.1, to switch it to protobuf. ([#83396](https://github.com/kubernetes/kubernetes/pull/83396), [@loburm](https://github.com/loburm)) -* kubeadm: use the --service-cluster-ip-range flag to init or use the ServiceSubnet field in the kubeadm config to pass a comma separated list of Service CIDRs. ([#82473](https://github.com/kubernetes/kubernetes/pull/82473), [@Arvinderpal](https://github.com/Arvinderpal)) -* Remove MaxPriority in the scheduler API, please use MaxNodeScore or MaxExtenderPriority instead. ([#83386](https://github.com/kubernetes/kubernetes/pull/83386), [@draveness](https://github.com/draveness)) -* Fixes a goroutine leak in kube-apiserver when a request times out. ([#83333](https://github.com/kubernetes/kubernetes/pull/83333), [@lavalamp](https://github.com/lavalamp)) -* Some scheduler extender API fields are moved from `pkg/scheduler/api` to `pkg/scheduler/apis/extender/v1`. ([#83262](https://github.com/kubernetes/kubernetes/pull/83262), [@Huang-Wei](https://github.com/Huang-Wei)) -* Fix aggressive VM calls for Azure VMSS ([#83102](https://github.com/kubernetes/kubernetes/pull/83102), [@feiskyer](https://github.com/feiskyer)) -* Update Azure load balancer to prevent orphaned public IP addresses ([#82890](https://github.com/kubernetes/kubernetes/pull/82890), [@chewong](https://github.com/chewong)) -* Use online nodes instead of possible nodes when discovering available NUMA nodes ([#83196](https://github.com/kubernetes/kubernetes/pull/83196), [@zouyee](https://github.com/zouyee)) -* Fix typos in `certificates.k8s.io/v1beta1` KeyUsage constant names: `UsageContentCommittment` becomes `UsageContentCommitment` and `UsageNetscapSGC` becomes `UsageNetscapeSGC`. ([#82511](https://github.com/kubernetes/kubernetes/pull/82511), [@abursavich](https://github.com/abursavich)) -* Fixes the bug in informer-gen that it produces incorrect code if a type has nonNamespaced tag set. ([#80458](https://github.com/kubernetes/kubernetes/pull/80458), [@tatsuhiro-t](https://github.com/tatsuhiro-t)) -* Update to go 1.12.10 ([#83139](https://github.com/kubernetes/kubernetes/pull/83139), [@cblecker](https://github.com/cblecker)) -* Update crictl to v1.16.1. ([#82856](https://github.com/kubernetes/kubernetes/pull/82856), [@Random-Liu](https://github.com/Random-Liu)) -* Reduces the number of calls made to the Azure API when requesting the instance view of a virtual machine scale set node. ([#82496](https://github.com/kubernetes/kubernetes/pull/82496), [@hasheddan](https://github.com/hasheddan)) -* Consolidate ScoreWithNormalizePlugin into the ScorePlugin interface ([#83042](https://github.com/kubernetes/kubernetes/pull/83042), [@draveness](https://github.com/draveness)) -* On AWS nodes with multiple network interfaces, kubelet should now more reliably report the same primary node IP. ([#80747](https://github.com/kubernetes/kubernetes/pull/80747), [@danwinship](https://github.com/danwinship)) -* Fixes kube-proxy bug accessing self nodeip:port on windows ([#83027](https://github.com/kubernetes/kubernetes/pull/83027), [@liggitt](https://github.com/liggitt)) -* Resolves bottleneck in internal API server communication that can cause increased goroutines and degrade API Server performance ([#80465](https://github.com/kubernetes/kubernetes/pull/80465), [@answer1991](https://github.com/answer1991)) -* The deprecated mondo `kubernetes-test` tarball is no longer built. Users running Kubernetes e2e tests should use the `kubernetes-test-portable` and `kubernetes-test-{OS}-{ARCH}` tarballs instead. ([#83093](https://github.com/kubernetes/kubernetes/pull/83093), [@ixdy](https://github.com/ixdy)) -* Improved performance of kube-proxy with EndpointSlice enabled with more efficient sorting. ([#83035](https://github.com/kubernetes/kubernetes/pull/83035), [@robscott](https://github.com/robscott)) -* New APIs to allow adding/removing pods from pre-calculated prefilter state in the scheduling framework ([#82912](https://github.com/kubernetes/kubernetes/pull/82912), [@ahg-g](https://github.com/ahg-g)) -* Conformance tests may now include disruptive tests. If you are running tests against a live cluster, consider skipping those tests tagged as `Disruptive` to avoid non-test workloads being impacted. Be aware, skipping any conformance tests (even disruptive ones) will make the results ineligible for consideration for the CNCF Certified Kubernetes program. ([#82664](https://github.com/kubernetes/kubernetes/pull/82664), [@johnSchnake](https://github.com/johnSchnake)) -* Resolves regression generating informers for packages whose names contain `.` characters ([#82410](https://github.com/kubernetes/kubernetes/pull/82410), [@nikhita](https://github.com/nikhita)) -* Added metrics 'authentication_latency_seconds' that can be used to understand the latency of authentication. ([#82409](https://github.com/kubernetes/kubernetes/pull/82409), [@RainbowMango](https://github.com/RainbowMango)) -* kube-dns add-on: ([#82347](https://github.com/kubernetes/kubernetes/pull/82347), [@pjbgf](https://github.com/pjbgf)) - * - All containers are now being executed under more restrictive privileges. - * - Most of the containers now run as non-root user and has the root filesystem set as read-only. - * - The remaining container running as root only has the minimum Linux capabilities it requires to run. - * - Privilege escalation has been disabled for all containers. -* k8s dockerconfigjson secrets are now compatible with docker config desktop authentication credentials files ([#82148](https://github.com/kubernetes/kubernetes/pull/82148), [@bbourbie](https://github.com/bbourbie)) -* Use ipv4 in wincat port forward. ([#83036](https://github.com/kubernetes/kubernetes/pull/83036), [@liyanhui1228](https://github.com/liyanhui1228)) -* Added Clone method to the scheduling framework's PluginContext and ContextData. ([#82951](https://github.com/kubernetes/kubernetes/pull/82951), [@ahg-g](https://github.com/ahg-g)) -* Bump metrics-server to v0.3.5 ([#83015](https://github.com/kubernetes/kubernetes/pull/83015), [@olagacek](https://github.com/olagacek)) -* dashboard: disable the dashboard Deployment on non-Linux nodes. This step is required to support Windows worker nodes. ([#82975](https://github.com/kubernetes/kubernetes/pull/82975), [@wawa0210](https://github.com/wawa0210)) -* Fix possible fd leak and closing of dirs when using openstack ([#82873](https://github.com/kubernetes/kubernetes/pull/82873), [@odinuge](https://github.com/odinuge)) -* PersistentVolumeLabel admission plugin, responsible for labeling `PersistentVolumes` with topology labels, now does not overwrite existing labels on PVs that were dynamically provisioned. It trusts the dynamic provisioning that it provided the correct labels to the `PersistentVolume`, saving one potentially expensive cloud API call. `PersistentVolumes` created manually by users are labelled by the admission plugin in the same way as before. ([#82830](https://github.com/kubernetes/kubernetes/pull/82830), [@jsafrane](https://github.com/jsafrane)) -* Fixes a panic in kube-controller-manager cleaning up bootstrap tokens ([#82887](https://github.com/kubernetes/kubernetes/pull/82887), [@tedyu](https://github.com/tedyu)) -* Fixed a scheduler panic when using PodAffinity. ([#82841](https://github.com/kubernetes/kubernetes/pull/82841), [@Huang-Wei](https://github.com/Huang-Wei)) -* Modified the scheduling framework's Filter API. ([#82842](https://github.com/kubernetes/kubernetes/pull/82842), [@ahg-g](https://github.com/ahg-g)) -* Fix panic in kubelet when running IPv4/IPv6 dual-stack mode with a CNI plugin ([#82508](https://github.com/kubernetes/kubernetes/pull/82508), [@aanm](https://github.com/aanm)) -* Kubernetes no longer monitors firewalld. On systems using firewalld for firewall ([#81517](https://github.com/kubernetes/kubernetes/pull/81517), [@danwinship](https://github.com/danwinship)) - * maintenance, kube-proxy will take slightly longer to recover from disruptive - * firewalld operations that delete kube-proxy's iptables rules. -* Added cloud operation count metrics to azure cloud controller manager. ([#82574](https://github.com/kubernetes/kubernetes/pull/82574), [@kkmsft](https://github.com/kkmsft)) -* Report non-confusing error for negative storage size in PVC spec. ([#82759](https://github.com/kubernetes/kubernetes/pull/82759), [@sttts](https://github.com/sttts)) -* When registering with a 1.17+ API server, MutatingWebhookConfiguration and ValidatingWebhookConfiguration objects can now request that only `v1` AdmissionReview requests be sent to them. Previously, webhooks were required to support receiving `v1beta1` AdmissionReview requests as well for compatibility with API servers <= 1.15. ([#82707](https://github.com/kubernetes/kubernetes/pull/82707), [@liggitt](https://github.com/liggitt)) - * When registering with a 1.17+ API server, a CustomResourceDefinition conversion webhook can now request that only `v1` ConversionReview requests be sent to them. Previously, conversion webhooks were required to support receiving `v1beta1` ConversionReview requests as well for compatibility with API servers <= 1.15. -* Resolves issue with /readyz and /livez not including etcd and kms health checks ([#82713](https://github.com/kubernetes/kubernetes/pull/82713), [@logicalhan](https://github.com/logicalhan)) -* fix: azure disk detach failure if node not exists ([#82640](https://github.com/kubernetes/kubernetes/pull/82640), [@andyzhangx](https://github.com/andyzhangx)) -* Single static pod files and pod files from http endpoints cannot be larger than 10 MB. HTTP probe payloads are now truncated to 10KB. ([#82669](https://github.com/kubernetes/kubernetes/pull/82669), [@rphillips](https://github.com/rphillips)) -* Restores compatibility with <=1.15.x custom resources by not publishing OpenAPI for non-structural custom resource definitions ([#82653](https://github.com/kubernetes/kubernetes/pull/82653), [@liggitt](https://github.com/liggitt)) -* Take the context as the first argument of Schedule. ([#82119](https://github.com/kubernetes/kubernetes/pull/82119), [@wgliang](https://github.com/wgliang)) -* Fixes regression in logging spurious stack traces when proxied connections are closed by the backend ([#82588](https://github.com/kubernetes/kubernetes/pull/82588), [@liggitt](https://github.com/liggitt)) -* Correct a reference to a not/no longer used kustomize subcommand in the documentation ([#82535](https://github.com/kubernetes/kubernetes/pull/82535), [@demobox](https://github.com/demobox)) -* Limit the body length of exec readiness/liveness probes. remote CRIs and Docker shim read a max of 16MB output of which the exec probe itself inspects 10kb. ([#82514](https://github.com/kubernetes/kubernetes/pull/82514), [@dims](https://github.com/dims)) -* fixed an issue that the correct PluginConfig.Args is not passed to the corresponding PluginFactory in kube-scheduler when multiple PluginConfig items are defined. ([#82483](https://github.com/kubernetes/kubernetes/pull/82483), [@everpeace](https://github.com/everpeace)) -* Adding TerminationGracePeriodSeconds to the test framework API ([#82170](https://github.com/kubernetes/kubernetes/pull/82170), [@vivekbagade](https://github.com/vivekbagade)) -* /test/e2e/framework: Adds a flag "non-blocking-taints" which allows tests to run in environments with tainted nodes. String value should be a comma-separated list. ([#81043](https://github.com/kubernetes/kubernetes/pull/81043), [@johnSchnake](https://github.com/johnSchnake)) \ No newline at end of file diff --git a/CHANGELOG/CHANGELOG-1.18.md b/CHANGELOG/CHANGELOG-1.18.md deleted file mode 100644 index eeca4ca4aeb52..0000000000000 --- a/CHANGELOG/CHANGELOG-1.18.md +++ /dev/null @@ -1,2267 +0,0 @@ - - -- [v1.18.8](#v1188) - - [Downloads for v1.18.8](#downloads-for-v1188) - - [Source Code](#source-code) - - [Client binaries](#client-binaries) - - [Server binaries](#server-binaries) - - [Node binaries](#node-binaries) - - [Changelog since v1.18.7](#changelog-since-v1187) - - [Changes by Kind](#changes-by-kind) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake) - - [Dependencies](#dependencies) - - [Added](#added) - - [Changed](#changed) - - [Removed](#removed) -- [v1.18.7](#v1187) - - [Downloads for v1.18.7](#downloads-for-v1187) - - [Changelog since v1.18.6](#changelog-since-v1186) - - [Changes by Kind](#changes-by-kind) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake) - - [Dependencies](#dependencies) - - [Added](#added) - - [Changed](#changed) - - [Removed](#removed) -- [v1.18.6](#v1186) - - [Downloads for v1.18.6](#downloads-for-v1186) - - [Source Code](#source-code-1) - - [Client binaries](#client-binaries-1) - - [Server binaries](#server-binaries-1) - - [Node binaries](#node-binaries-1) - - [Changelog since v1.18.5](#changelog-since-v1185) - - [Urgent Upgrade Notes](#urgent-upgrade-notes) - - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade) - - [Changes by Kind](#changes-by-kind-1) - - [API Change](#api-change) - - [Bug or Regression](#bug-or-regression) - - [Dependencies](#dependencies-1) - - [Added](#added-1) - - [Changed](#changed-1) - - [Removed](#removed-1) -- [v1.18.5](#v1185) - - [Downloads for v1.18.5](#downloads-for-v1185) - - [Source Code](#source-code-2) - - [Client binaries](#client-binaries-2) - - [Server binaries](#server-binaries-2) - - [Node binaries](#node-binaries-2) - - [Changelog since v1.18.4](#changelog-since-v1184) - - [Changes by Kind](#changes-by-kind-2) - - [API Change](#api-change-1) - - [Bug or Regression](#bug-or-regression-1) - - [Dependencies](#dependencies-2) - - [Added](#added-2) - - [Changed](#changed-2) - - [Removed](#removed-2) -- [v1.18.5-rc.1](#v1185-rc1) - - [Downloads for v1.18.5-rc.1](#downloads-for-v1185-rc1) - - [Source Code](#source-code-3) - - [Client binaries](#client-binaries-3) - - [Server binaries](#server-binaries-3) - - [Node binaries](#node-binaries-3) - - [Changelog since v1.18.4](#changelog-since-v1184-1) - - [Changes by Kind](#changes-by-kind-3) - - [API Change](#api-change-2) - - [Bug or Regression](#bug-or-regression-2) - - [Dependencies](#dependencies-3) - - [Added](#added-3) - - [Changed](#changed-3) - - [Removed](#removed-3) -- [v1.18.4](#v1184) - - [Downloads for v1.18.4](#downloads-for-v1184) - - [Source Code](#source-code-4) - - [Client binaries](#client-binaries-4) - - [Server binaries](#server-binaries-4) - - [Node binaries](#node-binaries-4) - - [Changelog since v1.18.3](#changelog-since-v1183) - - [Changes by Kind](#changes-by-kind-4) - - [API Change](#api-change-3) - - [Feature](#feature) - - [Bug or Regression](#bug-or-regression-3) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake-1) - - [Dependencies](#dependencies-4) - - [Added](#added-4) - - [Changed](#changed-4) - - [Removed](#removed-4) -- [v1.18.3](#v1183) - - [Downloads for v1.18.3](#downloads-for-v1183) - - [Source Code](#source-code-5) - - [Client binaries](#client-binaries-5) - - [Server binaries](#server-binaries-5) - - [Node binaries](#node-binaries-5) - - [Changelog since v1.18.2](#changelog-since-v1182) - - [Changes by Kind](#changes-by-kind-5) - - [Bug or Regression](#bug-or-regression-4) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake-2) - - [Dependencies](#dependencies-5) - - [Added](#added-5) - - [Changed](#changed-5) - - [Removed](#removed-5) -- [v1.18.2](#v1182) - - [Downloads for v1.18.2](#downloads-for-v1182) - - [Client Binaries](#client-binaries-6) - - [Server Binaries](#server-binaries-6) - - [Node Binaries](#node-binaries-6) - - [Changelog since v1.18.1](#changelog-since-v1181) - - [Changes by Kind](#changes-by-kind-6) - - [Bug or Regression](#bug-or-regression-5) -- [v1.18.1](#v1181) - - [Downloads for v1.18.1](#downloads-for-v1181) - - [Client Binaries](#client-binaries-7) - - [Server Binaries](#server-binaries-7) - - [Node Binaries](#node-binaries-7) - - [Changelog since v1.18.0](#changelog-since-v1180) - - [Changes by Kind](#changes-by-kind-7) - - [Feature](#feature-1) - - [Other (Bug, Cleanup or Flake)](#other-bug-cleanup-or-flake) -- [v1.18.0](#v1180) - - [Downloads for v1.18.0](#downloads-for-v1180) - - [Client Binaries](#client-binaries-8) - - [Server Binaries](#server-binaries-8) - - [Node Binaries](#node-binaries-8) - - [Changelog since v1.17.0](#changelog-since-v1170) - - [What’s New (Major Themes)](#what’s-new-major-themes) - - [Kubernetes Topology Manager Moves to Beta - Align Up!](#kubernetes-topology-manager-moves-to-beta---align-up) - - [Serverside Apply - Beta 2](#serverside-apply---beta-2) - - [Extending Ingress with and replacing a deprecated annotation with IngressClass](#extending-ingress-with-and-replacing-a-deprecated-annotation-with-ingressclass) - - [SIG CLI introduces kubectl debug](#sig-cli-introduces-kubectl-debug) - - [Introducing Windows CSI support alpha for Kubernetes](#introducing-windows-csi-support-alpha-for-kubernetes) - - [Other notable announcements](#other-notable-announcements) - - [Known Issues](#known-issues) - - [Urgent Upgrade Notes](#urgent-upgrade-notes-1) - - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-1) - - [kube-apiserver:](#kube-apiserver:) - - [kubelet:](#kubelet:) - - [kubectl:](#kubectl:) - - [client-go:](#client-go:) - - [Changes by Kind](#changes-by-kind-8) - - [Deprecation](#deprecation) - - [kube-apiserver:](#kube-apiserver:-1) - - [kube-controller-manager:](#kube-controller-manager:) - - [kubelet:](#kubelet:-1) - - [kube-proxy:](#kube-proxy:) - - [kubeadm:](#kubeadm:) - - [kubectl:](#kubectl:-1) - - [add-ons:](#add-ons:) - - [kube-scheduler:](#kube-scheduler:) - - [Other deprecations:](#other-deprecations:) - - [API Change](#api-change-4) - - [New API types/versions:](#new-api-types/versions:) - - [New API fields:](#new-api-fields:) - - [Other API changes:](#other-api-changes:) - - [Configuration file changes:](#configuration-file-changes:) - - [kube-apiserver:](#kube-apiserver:-2) - - [kube-scheduler:](#kube-scheduler:-1) - - [kube-proxy:](#kube-proxy:-1) - - [Features graduated to beta:](#features-graduated-to-beta:) - - [Features graduated to GA:](#features-graduated-to-ga:) - - [Feature](#feature-2) - - [Metrics:](#metrics:) - - [Other (Bug, Cleanup or Flake)](#other-bug-cleanup-or-flake-1) - - [Dependencies](#dependencies-6) -- [v1.18.0-rc.1](#v1180-rc1) - - [Downloads for v1.18.0-rc.1](#downloads-for-v1180-rc1) - - [Client Binaries](#client-binaries-9) - - [Server Binaries](#server-binaries-9) - - [Node Binaries](#node-binaries-9) - - [Changelog since v1.18.0-beta.2](#changelog-since-v1180-beta2) - - [Changes by Kind](#changes-by-kind-9) - - [API Change](#api-change-5) - - [Other (Bug, Cleanup or Flake)](#other-bug-cleanup-or-flake-2) -- [v1.18.0-beta.2](#v1180-beta2) - - [Downloads for v1.18.0-beta.2](#downloads-for-v1180-beta2) - - [Client Binaries](#client-binaries-10) - - [Server Binaries](#server-binaries-10) - - [Node Binaries](#node-binaries-10) - - [Changelog since v1.18.0-beta.1](#changelog-since-v1180-beta1) - - [Urgent Upgrade Notes](#urgent-upgrade-notes-2) - - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-2) - - [Changes by Kind](#changes-by-kind-10) - - [Deprecation](#deprecation-1) - - [API Change](#api-change-6) - - [Feature](#feature-3) - - [Documentation](#documentation) - - [Other (Bug, Cleanup or Flake)](#other-bug-cleanup-or-flake-3) -- [v1.18.0-beta.1](#v1180-beta1) - - [Downloads for v1.18.0-beta.1](#downloads-for-v1180-beta1) - - [Client Binaries](#client-binaries-11) - - [Server Binaries](#server-binaries-11) - - [Node Binaries](#node-binaries-11) - - [Changelog since v1.18.0-beta.0](#changelog-since-v1180-beta0) - - [Urgent Upgrade Notes](#urgent-upgrade-notes-3) - - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-3) - - [Changes by Kind](#changes-by-kind-11) - - [Deprecation](#deprecation-2) - - [API Change](#api-change-7) -- [v1.18.0-alpha.1](#v1180-alpha1) - - [Downloads for v1.18.0-alpha.1](#downloads-for-v1180-alpha1) - - [Client Binaries](#client-binaries-12) - - [Server Binaries](#server-binaries-12) - - [Node Binaries](#node-binaries-12) - - [Changelog since v1.17.0](#changelog-since-v1170-1) - - [Action Required](#action-required) - - [Other notable changes](#other-notable-changes) - - - -# v1.18.8 - - -## Downloads for v1.18.8 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes.tar.gz) | 48dd9909e06b12e015c0b785ab528e700e4e319c942800ec82af42837ecaf6e692b6502e7ff786f4ecc1e47f6402f47a3b399ec17fe044042bf52a840da6cb88 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-src.tar.gz) | c81ef7c31d8e34e3edc0983bb59e9d18bb1c6613439d4c52d29f6c26bddd3c1795e499c89ee4c53572cec76255e0323701c97a03d7a6430ce7864e326ef4e8ca - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-client-darwin-386.tar.gz) | 7328660c2a67d214d8d49e93194e1c51b51b7f91b3182dea9688676567f6f00598eca14b322ed675eeaccb691bfe038e0ca5510928534e41bf909bf06e7272ad -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-client-darwin-amd64.tar.gz) | 2c700d683bc732cd4e353d31528bb6996cbf0f6d7e5dc93fbf45b4d457d5598cfd92762aa2106af8300d3fa39596c6710a3ea5248424bc28eddd53354bd9b0a6 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-client-linux-386.tar.gz) | 02c5026b522226ceeb1b032337562039fa30b2a77b27dea26a0854d31a4492bcc5f80faf0ab98c0fbf595f577dbef602a4e13599d6bbaded2eaaea041bffb7fe -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-client-linux-amd64.tar.gz) | 041dd919f7bf530e6fb6881bc475dbd34cec340eae62193cba1174a0fa0b9d30435b74b0a130db4cdabf35dc59c1bf6bc255e4f91c8ec9a839fb541735e3861e -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-client-linux-arm.tar.gz) | 539f0eea80d52ba079fa4793acee57a9adeb37e78be300ebc2d34a25a7a09146c3bf10a978960b25cfcd33e4d430ee822e43fd510afb04adec0cc3e6a792be28 -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-client-linux-arm64.tar.gz) | 437c20e6d115d1e3ab5a47a10a0df4cb919ba6e139e2115aff2d70cc483bf7c4e9ae455cd40eaf4a4e237f799ee8e7c3d5597f3b3e55e62ef6b6e89b4aab1288 -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-client-linux-ppc64le.tar.gz) | 3b167e40bc19e3999503c8edbe867cfa64358129173a9c64e8ad668cbf312a66fe83f39f62cfd2763a60d27a8e644f583c5819f3548ae0dabff13b2d486bba14 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-client-linux-s390x.tar.gz) | 1c732c60efe80030f9fb2cc1d680a850f96dc6e13451dbc88e302617cf32e781f3ac1944f42a3e918f0e04da9e43e024af3945447420df3ac02e4c5dd3972dca -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-client-windows-386.tar.gz) | aa194063f4f784aee3da7a3b7d738bd7a48288d8cfae40209a0ae7b1a2ca93e6fe9d54933ce42ce5e21ed660d97b209e16dc049144e8e26aceb778f1b5f6f9a9 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-client-windows-amd64.tar.gz) | ea40da56b2950c68c28f4d96bb8bbba6c24a73a382cd20ffc5d75155a3b62b1a3e8b47fb6a7988123885d052751cf7c305b8192705d7472c91cdbdaa8b81c44a - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-server-linux-amd64.tar.gz) | 608020f5882e0f1e374e0125f13e28ac756f057e034557bfd65658d21de666cd13bd1c1664f590d0036c215258561d75d5802bbf7558bb7d5d6611f17d53e4ae -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-server-linux-arm.tar.gz) | e05b251f3bb17ee38031195ab8f14860966415c45383263c12b26f4b44902d75bca624b55885bab0c77bda441813d760737de9df4abd3c257f6c5fdfff155bcf -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-server-linux-arm64.tar.gz) | 27415f005fcaf3b6a93cb62ec784a949a64ec23ffece74e26d9e86e45e45dfd39d5fbff2ca1ad8f937ac51f02822368d8208e58874c9e12f5ce6b7db28175c80 -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-server-linux-ppc64le.tar.gz) | 3c4a93ff3418f630361114545cf18f9f22000e511876d2687a7482a0959aa634b672ed742b963c5b063c7fcb2d2de79d8483057c08dcc7569f1c6864c3c42f85 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-server-linux-s390x.tar.gz) | 38d976cdac09b0e94fbdba885df5149d65b71d803758eff5ce23d5ad641d13ce4e96fac849267c00624ca00cecf8e221319ac6679913cc4aa03cb460cb14891e - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-node-linux-amd64.tar.gz) | be40764df0f10e379c6920692d31a2eb5bf11d160ed7dcae7d05d27c232d5553301bec1cefdf6e10fdbb1d947d994d850670638ecac983953316a6223e733c0f -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-node-linux-arm.tar.gz) | ae74bfabc60c2b3463e29c5dac06ff32314ad4fdcfecfe5fb67f679fcc10ea7e47268d7dd186c13c00bf4bb3c46ece699e3a33077bb192154a2646e48bef25ef -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-node-linux-arm64.tar.gz) | e5e697afde1eec79e9a11143585776d57be55c928a9328ad77ce917868e82259f54dd4633867065784b94f76a0cfb23be9e7751a40a1ab6dde6001e73849d17a -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-node-linux-ppc64le.tar.gz) | ffc3b5d2bcc490a5fb07c2a9e5e53923903728c69ace143b2e9b46760bfe72be9c4db746319710c44f059e82cb135acfe9d1bcfb50a19e32b582ba77d55ed004 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-node-linux-s390x.tar.gz) | 656447661f38fed2fac19af4428f35da75fad5db70942722d75717f9d16db1583fcddbe944912a43fa03328453a2a32bd6971e138400de70015353c390b19d36 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.8/kubernetes-node-windows-amd64.tar.gz) | fd55152e72ce747a6ab27d4e6e16c2d4cbceaa60b40a1b6a709963bbf87e3ccb757904b8fff36fd1ec6cf1bebd2d03148704d694a520b175f6aad8a05323b5e0 - -## Changelog since v1.18.7 - -## Changes by Kind - -### Other (Cleanup or Flake) - -- Kubernetes is now built with go1.13.15 ([#93953](https://github.com/kubernetes/kubernetes/pull/93953), [@justaugustus](https://github.com/justaugustus)) [SIG Release and Testing] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -_Nothing has changed._ - -### Removed -_Nothing has changed._ - - -# v1.18.7 - - -## Downloads for v1.18.7 - -Release artifacts for 1.18.7 and 1.17.10 are incomplete. __Do not use these releases.__ - -# Changelog since v1.18.6 - -## Changes by Kind - -### Bug or Regression - -- Do not add nodes labeled with kubernetes.azure.com/managed=false to backend pool of load balancer. ([#93034](https://github.com/kubernetes/kubernetes/pull/93034), [@matthias50](https://github.com/matthias50)) [SIG Cloud Provider] -- Fix an issue with container restarts using a modified configmap or secret subpath volume mount. ([#89629](https://github.com/kubernetes/kubernetes/pull/89629), [@fatedier](https://github.com/fatedier)) [SIG Architecture, Storage and Testing] -- Fix instance not found issues when an Azure Node is recreated in a short time ([#93316](https://github.com/kubernetes/kubernetes/pull/93316), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix: initial delay in mounting azure disk & file ([#93052](https://github.com/kubernetes/kubernetes/pull/93052), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fixed a bug whereby the allocation of reusable CPUs and devices was not being honored when the TopologyManager was enabled ([#93189](https://github.com/kubernetes/kubernetes/pull/93189), [@klueska](https://github.com/klueska)) [SIG Node] -- Fixed a performance issue applying json patches to deeply nested objects ([#93811](https://github.com/kubernetes/kubernetes/pull/93811), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation] -- Fixes a regression in kube-apiserver causing 500 errors from the `/readyz` endpoint ([#93642](https://github.com/kubernetes/kubernetes/pull/93642), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG API Machinery] - -### Other (Cleanup or Flake) - -- Build: Update Debian base images - - debian-base:v2.1.3 - - debian-iptables:v12.1.2 - - debian-hyperkube-base:v1.1.3 ([#93754](https://github.com/kubernetes/kubernetes/pull/93754), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Cluster Lifecycle, Release and Testing] -- Update Golang to v1.13.14 - - Update bazel to 2.2.0 - - Update repo-infra to 0.0.8 (to support go1.14.6 and go1.13.14) - - Includes: - - bazelbuild/bazel-toolchains@3.4.0 - - bazelbuild/rules_go@v0.22.8 ([#93232](https://github.com/kubernetes/kubernetes/pull/93232), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Release and Testing] - -## Dependencies - -### Added -- github.com/jessevdk/go-flags: [v1.4.0](https://github.com/jessevdk/go-flags/tree/v1.4.0) - -### Changed -- github.com/evanphx/json-patch: [v4.2.0+incompatible → 162e562](https://github.com/evanphx/json-patch/compare/v4.2.0...162e562) - -### Removed -_Nothing has changed._ - - - -# v1.18.6 - - -## Downloads for v1.18.6 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes.tar.gz) | f036e891ff8dd95df33722b4d13ea2dc36fd8cb0a18fe88654919eb180cadba7724da55b96ea9707a11aaa91021bd6478a0c6eae684034e030717beb4c94f018 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-src.tar.gz) | 460551dcde2288a7f3b90ad0720cf479cd38d64e386fedf66d580c4cd547a0e1835437437bdfb8b28c6dd707164abf0ddf4ea761d9f110945b80800f71b953b0 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-client-darwin-386.tar.gz) | 85c4d72f50965a1ecc3e67c02335ec5ae57d8c9617cc79a34a05e1ed3b84e8f80be2901f6f31185a383a85f63ea7fe638b07eb6851a3758b835bf319a5df852d -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-client-darwin-amd64.tar.gz) | b01c47bd6a16eed131245fb90abfb8b585c14953f9398f11a1ec402b808305ce1fbcabd215b253d805224f2fb41ddeb502239f67dd0634e648279e449fc0ea63 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-client-linux-386.tar.gz) | 15262c62b8b9bf85c8dd8ead7ed0c384114e09ad3120d7e13956c99d93203b5f9561f923055451e46bcb2a4efa19db43e23ff4d2a9281114bd85a67a6269d841 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-client-linux-amd64.tar.gz) | d061bc34c0df55e766d72c066ef366864c77eff5d0033d29869fc871d2e674d86322a6c5dc3f05ed2d95971ca0e6ea3dd1dc1f57bf1825c9bf834963385a3de6 -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-client-linux-arm.tar.gz) | 7eb961bff92146952d9cda2b741c8d349838ef66112c6b296f1426eeb79357b95d4e15d5520e8903a881c21bf629b58ce72d986a88620333120b786c415eba35 -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-client-linux-arm64.tar.gz) | bb863a4bf6d0fd400274536c6571cd35531d92fa40d38703ef126accc94d08a4e381f6c05840806e81d564161ebe08a99aa73d767ddf1a60b7a7062df704b920 -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-client-linux-ppc64le.tar.gz) | 71e0ac8298dca06be5aed01c3a2f12389405bfd1e3edff63a849b8663a7b118543e960dca0a920a598f649cce76f58ac2664ea1db9fd69e484e843f27bac4664 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-client-linux-s390x.tar.gz) | 673161c816dfd2369609402461c645a3cc023a09fd9e1418c0fff601c1f5d71f72b43857ef66973af0ee4d8871a52cf914c533fa955f104d327bb28ad6e13ab9 -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-client-windows-386.tar.gz) | 017654b27b06afc219dcf5b590a63a917470f698611bd0348e5a27ea8e30c8178b47786a8491c70e1c3ba7559e7831fc77b636c092fb1946db795e9ec679c140 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-client-windows-amd64.tar.gz) | d2f5bee260a135007185f8b68a11a6ea10f94e548feb4614dca9a428bbb7ad91a6fb4a58efc67b242e6348b5f0eb436f863cadad2e72cdc5fee4c0414ab54db3 - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-server-linux-amd64.tar.gz) | 73cfa5e458205ff81cfa6672c0f6ef10aadbad1244c81b259c3cf9c22c6c9e9272a69778b0417e2353fe9970bfeed23de8ad7dee223de7a487ba4bdf94cd8682 -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-server-linux-arm.tar.gz) | b8723379e26de43ae0bfe5a64d65beb0f79d4820c02a1b9aae4c80f2b1882b952d587fe1fb87cc202b618ec66f5c1392f6bf94acfad44b84f3b6f33994cd0af9 -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-server-linux-arm64.tar.gz) | 47dc425387f98028d32f40610124ecc70162132c339d97f578dbb8a6b7f98f25a20d356d12e6d04b40e62b6f8636bf20617735acddb482f9c4da24c928f31cb4 -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-server-linux-ppc64le.tar.gz) | b6fbb68288300ef28c710d65a8acd6bceda13ec4c5b156c1395b98310c74babe1dca44ebfccf33eebd8147a7f5f7276930721e1f38854a3b6c2ddbac28c51a83 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-server-linux-s390x.tar.gz) | c77d6661461b230fe934c100a2eedf295e394d0c818bc5c21e0db496b08e10ada8a101bb9b402c5fed566cff39ca6be6766dcda7f536b7e9f671f2703da589c7 - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-node-linux-amd64.tar.gz) | f3d3cc4b38dff84a0c4e1b2364b8f7a000fa86395b7ccab22905f51c7b876c7524a9da61b5447bf761aba0e2015c557715abc573869340e46a616beca33d07c2 -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-node-linux-arm.tar.gz) | 63d2601741fe159b742141f3ff85293e328808ff056e87f81af502da817e4813e963c61121bce53c4fd19250392808ed36181ccd67c2a18b02317379a0d93c0f -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-node-linux-arm64.tar.gz) | 85d24d99e4408dfa00e306ff90eb4b86260feba40cf8e3770845838f0af319dce674b04b9bf8700d46765e620f84f4bf11463b46cf40ef118c2fd000156c7214 -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-node-linux-ppc64le.tar.gz) | 1cef745e18704c77f7c31514ca9bf0eb5be676b3fb80affa2cfc482089e7210f14e42c89cd7284f070d6d8a45ba253634294c2db5393d7ac74e8ce28e7395550 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-node-linux-s390x.tar.gz) | 452fc8743c80e05ca0ad6d9267b6a133497bd7779ee74d5a96195d87e68e3e906dcc5a9d6154a9ecf70cc2a05f4e12ffb4a1d7874e979b2ed204facc0c0ff5b9 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.6/kubernetes-node-windows-amd64.tar.gz) | 09113c05a14c34ac07ba4f635e152d983b6822ef95a7034df56a9fca3634388f90416076c6d8d64a02dd2e6188ed6529582b6093e441cef74dd8716f48fbdb16 - -## Changelog since v1.18.5 - -## Urgent Upgrade Notes - -### (No, really, you MUST read this before you upgrade) - - - CVE-2020-8559 (Medium): Privilege escalation from compromised node to cluster. See https://github.com/kubernetes/kubernetes/issues/92914 for more details. - The API Server will no longer proxy non-101 responses for upgrade requests. This could break proxied backends (such as an extension API server) that respond to upgrade requests with a non-101 response code. ([#92941](https://github.com/kubernetes/kubernetes/pull/92941), [@tallclair](https://github.com/tallclair)) [SIG API Machinery] - -## Changes by Kind - -### API Change - -- Fix bug in reflector that couldn't recover from "Too large resource version" errors ([#92537](https://github.com/kubernetes/kubernetes/pull/92537), [@wojtek-t](https://github.com/wojtek-t)) [SIG API Machinery] - -### Bug or Regression - -- CVE-2020-8557 (Medium): Node-local denial of service via container /etc/hosts file. See https://github.com/kubernetes/kubernetes/issues/93032 for more details. ([#92916](https://github.com/kubernetes/kubernetes/pull/92916), [@joelsmith](https://github.com/joelsmith)) [SIG Node] -- Containers which specify a `startupProbe` but not a `readinessProbe` were previously considered "ready" before the `startupProbe` completed, but are now considered "not-ready". ([#92196](https://github.com/kubernetes/kubernetes/pull/92196), [@thockin](https://github.com/thockin)) [SIG Node] -- Extend kube-apiserver /readyz with new "informer-sync" check ensuring that internal informers are synced. ([#92644](https://github.com/kubernetes/kubernetes/pull/92644), [@wojtek-t](https://github.com/wojtek-t)) [SIG API Machinery and Testing] -- Fix throttling issues when Azure VM computer name prefix is different from VMSS name ([#92793](https://github.com/kubernetes/kubernetes/pull/92793), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix: GetLabelsForVolume panic issue for azure disk PV ([#92166](https://github.com/kubernetes/kubernetes/pull/92166), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fix: don't use docker config cache if it's empty ([#92330](https://github.com/kubernetes/kubernetes/pull/92330), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fix: use force detach for azure disk ([#91948](https://github.com/kubernetes/kubernetes/pull/91948), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fixes a problem with 63-second or 1-second connection delays with some VXLAN-based - network plugins which was first widely noticed in 1.16 (though some users saw it - earlier than that, possibly only with specific network plugins). If you were previously - using ethtool to disable checksum offload on your primary network interface, you should - now be able to stop doing that. ([#92035](https://github.com/kubernetes/kubernetes/pull/92035), [@danwinship](https://github.com/danwinship)) [SIG Network and Node] -- Kubeadm: add the deprecated flag --port=0 to kube-controller-manager and kube-scheduler manifests to disable insecure serving. Without this flag the components by default serve (e.g. /metrics) insecurely on the default node interface (controlled by --address). Users that wish to override this behavior and enable insecure serving can pass a custom --port=X via kubeadm's "extraArgs" mechanic for these components. ([#92720](https://github.com/kubernetes/kubernetes/pull/92720), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: during "join", don't re-add an etcd member if it already exists in the cluster. ([#92118](https://github.com/kubernetes/kubernetes/pull/92118), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- hyperkube: Use debian-hyperkube-base@v1.1.1 image - - Includes iproute2 to fix a regression in hyperkube images - when using hyperkube as a kubelet ([#92624](https://github.com/kubernetes/kubernetes/pull/92624), [@justaugustus](https://github.com/justaugustus)) [SIG Cluster Lifecycle, Network and Release] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -_Nothing has changed._ - -### Removed -_Nothing has changed._ - - - -# v1.18.5 - - -## Downloads for v1.18.5 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes.tar.gz) | 1e414d955cdde67e1883be27cb47963a905b73e8454bd1b2e665395348c1a88c444136380584bac97b6e50a1f1eafa7d4e3d3a26c9c0bc6aee63fbbdd261489c -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-src.tar.gz) | 9ddcd8b517e3cf78113ef977c365d26f0f27fe9b7fd9410f0214fd38cd38c6de6f37d7fbe2bb398587caceb4ae484afc2fe7ae14b80b70fe728405f3d5bd4115 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-client-darwin-386.tar.gz) | 197583cb641dab50d6ad9f1f9929ce45a59f98a3ebe315cf1d7edef8df7aba1e1838cf1fb9414423d81c8575820c27a0c20183bd6ce5fd5df85bd7692a6aff2a -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-client-darwin-amd64.tar.gz) | d0f54e949850c2321081e722367d7baa5c805e0ba1d8b2f651254e0d7b26bbd9c87c7c7f5ac7b8fd55a2a4c1af08f2f18ccef00d2c1c5c89d51b27903f024155 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-client-linux-386.tar.gz) | 6d04e1aad657e60d3c2b28f0c9c5b0a63fff8c4a35f24f96feccd19ce1d1e65a942bbb5a5eb291297020e1334d67a4c6bea9b48510fd7f94aed70af61b7543a5 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-client-linux-amd64.tar.gz) | 01e9c71d65c4513c03b22b2b036c3e92875fa4ebdb43b4909a6b21608093d280d9f71953f9656b3728019bdc8cb6bbf864de3c6a3eb94d807ec0330dbccfa005 -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-client-linux-arm.tar.gz) | b33f901d13bae3824938e0d0c98f50a50ec7335979d6f9e56c06209898619c40f49d0380b7101143484de635bee347cedc5b653a21ae0daab4f7f6a6b11d41c0 -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-client-linux-arm64.tar.gz) | ae2f4e5fec58ff47ca2bf91290684c969160ffb89b2574f57f0818fef4d63c4d9b3ea1f8c6a34f4d83acd907b82e3668cdf31dc38042d75ee12afc695a8a2a4a -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-client-linux-ppc64le.tar.gz) | 9ebc84fa31184a9d07cbc98abb608c4b48414fb80021b4a4431929baf4c34bcccad9a2f9320cebfc7e662c6ab315bd497a56b5dac7954e0ce1727d493b24cbb8 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-client-linux-s390x.tar.gz) | bbe07152faedb0dc91e6786f4b63eaa79f4bca41b1c9125f70b90e319fda8a7e95033b080f7eb02d55bee39a96192bf3935f935981305340245ab84f3fece4e8 -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-client-windows-386.tar.gz) | 2fdf489d8ce8ee5336f953e268e538bfe6748e7afd805031bc3e525e4b823033e8121c119ef23ef3afc73199ece36fc51cb75871c312bb7ccac1ddaf3c1b245f -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-client-windows-amd64.tar.gz) | 4894700a4406273dff08f36012780216b5c822180944c6e7161c8564c07f4a77f0d798f947b2e6f617ae60073834c9ff546045d98dc51c166fbc4c998ea2a00b - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-server-linux-amd64.tar.gz) | 40ed152be522f9793d61721f352ab30db072882512fdf7b9c2d42f057cc30b0ae1ca46e52a98da09f4b66b266a04b4bbcf257e3174eba653ca9cef5fbc052ef7 -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-server-linux-arm.tar.gz) | 8483f12ba4d5263e3029fe658e965da4be62479eb48a6c6d5aa72cf6c344bed3350b3a506a6a23fdf9bf86287930d9329f24b28a3d39628f7224afaf00a2cefa -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-server-linux-arm64.tar.gz) | b7bb94940fcc16f777321289ef865d8689a630311e6fd0ccc945e1195c805e2b32343a7ee11a65a6f49e5c3b3264321cdfbc7c18265e0e39878b660488d6ead2 -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-server-linux-ppc64le.tar.gz) | 1c82fd55ff1d1496ae2281f9c6df391c3161665e828560efafd3a5269d0745ad14e210b05108e0b32e167a141f58ff08da917ef5eebb47c19d64039a004ed81a -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-server-linux-s390x.tar.gz) | 99f29e8159a79655d8f86b41a89e868127a18086519786a3724fc2bbc83734613716d76fa524f563fd17231496759b224d208dcafdcebf8475b04fb556a5ea8a - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-node-linux-amd64.tar.gz) | 3bb05fe8e3f3aa52f7290cc33b606125d4ed666583d3265bac019486e8e7e5956e68a8adba849f5bf57e37ae1f784ecae42b53ae8a0e820575f6ac7553044067 -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-node-linux-arm.tar.gz) | c16db681b24e3094f09b51971c94bf5f8d8347decf0e6e9fab0902b3f17e5d78f9d0908b840fcc5c29bfa38d0ffdb7ca7dbbe7e48fc3b406e748fe6de9f3f092 -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-node-linux-arm64.tar.gz) | ddccd9b3844bec9d237373c64f27f4e9c065d70ba0633fafb5ffd9abffd510358d08c7f5d70dd0aa9b1ef7d4e0e20e9c94e8e389b968e5d6c18a9f98723ccb10 -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-node-linux-ppc64le.tar.gz) | f36dd5017eecc6abfdaabf8ec3e91f050a0e5afb82575dbc8f37aa0fdfcb83dab144e649b5381ac8e8ec7e2fd8b50eec1044d8e342b6cbfd2bebcd92cd962171 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-node-linux-s390x.tar.gz) | 797b1dae35931cc350a500095806980af3ad4381069c80d8a367a62c6e9dda27ffafd7078feafd5f12e1161825cd44fbaa481ef1982a061e25322df6850f5a8d -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.5/kubernetes-node-windows-amd64.tar.gz) | d784fc4986e03d925a7e855d6f9ce287405133a181a27d12d5495ca6ef3061d106c8eff62a662275d4477a10825fbbf3300c3a77ba8eb499a25a310c12df15c3 - -## Changelog since v1.18.4 - -## Changes by Kind - -### API Change - -- Fixed: log timestamps now include trailing zeros to maintain a fixed width ([#91207](https://github.com/kubernetes/kubernetes/pull/91207), [@iamchuckss](https://github.com/iamchuckss)) [SIG Apps and Node] - -### Bug or Regression - -- Fixes CSI volume attachment scaling issue by using informers. ([#91307](https://github.com/kubernetes/kubernetes/pull/91307), [@yuga711](https://github.com/yuga711)) [SIG API Machinery, Apps, Node, Storage and Testing] -- Kubeadm increased to 5 minutes its timeout for the TLS bootstrapping process to complete upon join ([#89735](https://github.com/kubernetes/kubernetes/pull/89735), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle] -- hyperkube: Use debian-hyperkube-base@v1.1.0 image - - A previous release built hyperkube using the debian-hyperkube-base@v1.0.0, - which was updated to address a CVE in the CNI plugins. - - A side-effect of using this new image was that the networking packages - (namely `iptables`) drifted from the versions used in the kube-proxy images. - - The following issues were filed on kube-proxy failures when using hyperkube: - - https://github.com/kubernetes/kubernetes/issues/92275 - - https://github.com/kubernetes/kubernetes/issues/92272 - - https://github.com/kubernetes/kubernetes/issues/92250 - - To address this, the new debian-hyperkube-base image (v1.1.0) uses the - debian-iptables base image (v12.1.0), which includes iptables-wrapper, a - script used to determine the correct iptables mode to run in. ([#92493](https://github.com/kubernetes/kubernetes/pull/92493), [@justaugustus](https://github.com/justaugustus)) [SIG Cluster Lifecycle and Release] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -_Nothing has changed._ - -### Removed -_Nothing has changed._ - - - -# v1.18.5-rc.1 - - -## Downloads for v1.18.5-rc.1 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes.tar.gz) | eab1264657dd76babb4159edb6ff2e85c1e4d2baaea053bd479426c8ee0ad544c4be18e1bbec5948ea4a649adb5f42bc87b15afd5e1818859d4bc61287a7ad08 -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-src.tar.gz) | 48f16d0a9eada28eacbc90da224d64e2d8a1f1b47dd4be8baaca8a386834a7e0413a40f4938c086c1a17c44e6a87fc16cb7dc8e7ebcfbf7e34e1f71c7deb730b - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-client-darwin-386.tar.gz) | a079b71c22b6b4893aeb9289354872f07c79e823c26a9a89ea4c72608ff5770356f5c6fb4289a72c2ef0d4bc8d835ba96074f4c188566f5aa51b32ea4a13ee4e -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-client-darwin-amd64.tar.gz) | 4cb738c285226faa885d92495e7b3a2ad2b89fae70dc617bac7e6e2962f0c0c5fcf42c61efcac5a51b0f1c232b015cead2e3ee7f8237e27659ddedf2fe657481 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-client-linux-386.tar.gz) | 1f9c1bfbb68ffb19297990bc8d186761e0f40714862939a9b511de770e9c2227acd24fd584986d1bf4d7e518ef0ded6dc6b8ebe8cb5e32d81484f1274ec3cfc1 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-client-linux-amd64.tar.gz) | 70afde567009acc60e2c349096aca1498bbd0b65688ca9cc0e5ef1b847bb297a6c22020a2e7b3ca6832677d1a54be50b5add9b738ba15ef3716a124508517fc8 -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-client-linux-arm.tar.gz) | 9dbabf46ba83b8ac08511b11685f8dd447b7d649db72315674df1ae31c663ed0f36a1cae1895765e396cfb86b1ee5d719976712d6cc4bd57cba1ff35303e3177 -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-client-linux-arm64.tar.gz) | a8f0ad8429c1e483471e247f79899874f8168ebc316a5b811f9dc74b562c9e227f252177572230a233a852b867f4510d257f61ebc67f0db713aac26c66151715 -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-client-linux-ppc64le.tar.gz) | 2d81d1eecf2cdb14fe44334271cb53466691948268143b6c22e0b852febbee88d1a06ffadd81a4dfc39a27cbec9781d6e861d5d99b99e2895fe358c10c2811e8 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-client-linux-s390x.tar.gz) | d8efbc345e7b0833ca010598d915cc3246a01ef940cf5ee7b051929a8e212a530b1a2a27a0bcfa5721cc7823ef286a9ac93c39c005b5d86c4bfd27babc87c4dc -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-client-windows-386.tar.gz) | 71a4756ea4c4ccb19ad9103080d724bebc5993f973e5e33a25d3b020b2c3be0e3d06d9b29befc13397220e5815a42e253be12789d3236e9dceef555c85e95d01 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-client-windows-amd64.tar.gz) | 30d0fb3b83222ad90fb78574b63a2de5438f06d918eff13894d34ac70946f9b06618164c7acc1e1380954f8000b9ad3d114be6c39ba19dae40a61ea8d136c9aa - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-server-linux-amd64.tar.gz) | 19c78e05023b9d41acda812f87c2588dc0297583254049324d9cd2c0a2d79997ccfa4e8c54fa19c16bd4f32f943541bedab9d5be974b4078bcf29050d849c2ef -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-server-linux-arm.tar.gz) | bacec0b0dcbf7d59e78969c22235e0111e95367bd288482110c22a5d41d6a4c31f82ecf81ff09c3746981f9efbaedd3d60fede4d3129a84d9aaedd9e14a63c26 -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-server-linux-arm64.tar.gz) | 05531280837cbd03dc77d9a726ed1543977d96adcd8e2728e3ef6ee3966e1df7ec2dee1118acb9e449ff6a73ec27b85cb34c6f6c9c65a5c71b814726ebbaf83b -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-server-linux-ppc64le.tar.gz) | 32762d89c48eb851079c9e6c67dcbb02b04bfb7c63b04a50bfac66ea8ee6b53a41424e8f2ddddd377564e81866d10fc568bc7f2853cfd85a50a828e7206d5254 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-server-linux-s390x.tar.gz) | d28ecd106e103273949e09ab1d15027ccebb6d9540c199fdb11f130c84209c6f7116acc24a34c9169c7786f20f2d0101438c3652a23925a4ed857f148c01ff6d - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-node-linux-amd64.tar.gz) | 1b7eeb2374bfdd3e6baff854b834985ea5cb73774322688ccdc1de0e138e64c643e512bf4326f5d772ceb86acbf05f48e06a354a1bbacae945d638aab51bf73e -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-node-linux-arm.tar.gz) | c5d75e3db341d1a909d6acb14ad7a9c64beaae793d0af80971cd33b1f9b9361f3eceb740f78392cd42d40d7d1989edebab23ec40fb5593ec5300dd2cc72c3d36 -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-node-linux-arm64.tar.gz) | 98b8a5c6b8fa2958c8a63e2cd0fff3f947545c80474ceaa7d696910ab1cfaacb4fc520dd67db094573eb6f40012a947768e48ce709a51d02a657ae8c26e74b16 -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-node-linux-ppc64le.tar.gz) | ca479f42ae58f614b077f984984de76cfe8105124d7f20f0be9707007a17ba35ea06d92f3de2c4118d94cd7d10e971cd6f1477c164ca0204fcfd527d123be05e -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-node-linux-s390x.tar.gz) | e5c85afdb8d2ffcf80c07b8d53ee2bdd5f559d2b0cb18062c9e63dcfc52ce245e91c7e101bbc79e1cce9010ac0d08d38b6eb286f86dd9bbc495197e4e6ca803b -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.5-rc.1/kubernetes-node-windows-amd64.tar.gz) | 929f3e575dc02fa2b229ecb369a07972536811f55823fc743002f503caee7ad2ec7b39bae08b578eb7cd709910666ba0fd345247d79a36ebb3cb99f17d68772d - -## Changelog since v1.18.4 - -## Changes by Kind - -### API Change - -- Fixed: log timestamps now include trailing zeros to maintain a fixed width ([#91207](https://github.com/kubernetes/kubernetes/pull/91207), [@iamchuckss](https://github.com/iamchuckss)) [SIG Apps and Node] - -### Bug or Regression - -- Fixes CSI volume attachment scaling issue by using informers. ([#91307](https://github.com/kubernetes/kubernetes/pull/91307), [@yuga711](https://github.com/yuga711)) [SIG API Machinery, Apps, Node, Storage and Testing] -- Kubeadm increased to 5 minutes its timeout for the TLS bootstrapping process to complete upon join ([#89735](https://github.com/kubernetes/kubernetes/pull/89735), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle] -- hyperkube: Use debian-hyperkube-base@v1.1.0 image - - A previous release built hyperkube using the debian-hyperkube-base@v1.0.0, - which was updated to address a CVE in the CNI plugins. - - A side-effect of using this new image was that the networking packages - (namely `iptables`) drifted from the versions used in the kube-proxy images. - - The following issues were filed on kube-proxy failures when using hyperkube: - - https://github.com/kubernetes/kubernetes/issues/92275 - - https://github.com/kubernetes/kubernetes/issues/92272 - - https://github.com/kubernetes/kubernetes/issues/92250 - - To address this, the new debian-hyperkube-base image (v1.1.0) uses the - debian-iptables base image (v12.1.0), which includes iptables-wrapper, a - script used to determine the correct iptables mode to run in. ([#92493](https://github.com/kubernetes/kubernetes/pull/92493), [@justaugustus](https://github.com/justaugustus)) [SIG Cluster Lifecycle and Release] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -_Nothing has changed._ - -### Removed -_Nothing has changed._ - - - -# v1.18.4 - - -## Downloads for v1.18.4 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes.tar.gz) | 8d2cec9d026bbed016f004c23e205e234bcd40072cda81e805ecebe6e8cc8e4b5f1685c9dc57640edc3c5c67e09ac362bfa9bae1b654fcf425d3e4e184b5b46f -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-src.tar.gz) | 04a0180addc8c03815652b2cda14608022f0679466028eae475d88661369441f46d6f7be544d88b461508ca8c89410da1f43f51fde246cb8c8470d9c22973f0f - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-client-darwin-386.tar.gz) | 60e5e7b72570c927915a5d9b29bc06c0efbd1f80fbf2e14ccc8811b2962263de4a22b8fc2d3645888bd56b16f21093d6e8dd346bb62ffac50f6a20ed9e1516db -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-client-darwin-amd64.tar.gz) | 189430f4b19cb7a147e9974268874564584ac0e91aa16864e2fe9c2428e5b08f283c7d48d31bb9f05743db979f7414abace2fc4a9d6b8afc04fba2f7874ebd57 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-client-linux-386.tar.gz) | 078cff6c8c5b902fc3326026894c68c9e8db49c1e247dafff73ed53c61547179537e60a6839ca34c4ac8632518988834427d336b71f4cbfc2dd878a6cbe48718 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-client-linux-amd64.tar.gz) | 69344ab18d8f9608374cd4994ffbd878a9738b14793a41a25dfbedb0bf9a6174605507f92e7032930700c79ccc12ca899570a099d9db624d4c65580aefedbe0c -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-client-linux-arm.tar.gz) | ae202fa504f9f10a9e6e8d6eb2e5407729dbcc3fbde34ecb7814994a45b7e80446cc81845d4cde661d9937fcd1b6914820ce9f1bdf30a27a72f5f96fa3483dbf -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-client-linux-arm64.tar.gz) | 7ee7d1e493b399e3767e526d5a80b94d099c48798f62fa8e9673f974ea87ec5461a793381d6bbfd461a32ac735f6d66faa223659ddcb825ef0a1f405a482e404 -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-client-linux-ppc64le.tar.gz) | f8f1c44843584aadacd851f3c33cdd3699ff35cff4503da40e4280586b4281af4a24736cdb6b635e486015b3476106065eb61abe06d8d9c51f70e7e6838e0536 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-client-linux-s390x.tar.gz) | ff796f22edff24d84a8f8952490db78ea20570dc7752cabb60035e84368256c900d32c926a501fe70781c2bf682cca2daf920c22034c8b4d3f32679d659ea5d3 -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-client-windows-386.tar.gz) | aebf17c13b081eeeaf7608e89599441cbeed959f3895dc969beec20e2561b4a89a51d40575f01c9d6fb58d1a1057717349ad668d3bed89de77ab78396ffccad9 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-client-windows-amd64.tar.gz) | 7eb3201320139379f095c9d425434edbe7e608499b04033a303e6aa3e205d2b6e7d585d2850d3d2431498f34e48c5ff49561b038f309d02439e9d5eb2e809563 - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-server-linux-amd64.tar.gz) | e85fbe9aa255cabcf58b4c18fa666d6a85effa0fc9c78d0d150abf3f89bfd13fcd55163caf02188b095310e01f49e1f32464c9e87f43cebe1043868436e0e751 -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-server-linux-arm.tar.gz) | 6d6befa922522b8c6155cdeea7d56e1f21dc175b71ce2285c87a5ef591abc9590a37a56ae21792c0763ccee690110b5b6db5953aef36d607d6b21920f22e9c7f -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-server-linux-arm64.tar.gz) | 8158bc2fdb3577816f709a15633a1740872083032962ae0cb42a0975b614e6307e3a75fe8e58b8753a162702ef789d9c5e51ba22d754198e55339da811b05889 -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-server-linux-ppc64le.tar.gz) | d1c799ccebdfce580510cd0c5f61b30e47629cc1f837c8c2fed8408b6289fc7ff27f07a006ca04db023bb8924f963b78e10aa8538f02cf0b5a1bdbc3ed7bf1d0 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-server-linux-s390x.tar.gz) | 0b8b357757b3e16ca947ff774b89524a8d2a2be94b422483dbe7148891daabdd6a626ab173084dd09854d83fff6d3c1df853fdeaab89ba289d16b7515746f13b - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-node-linux-amd64.tar.gz) | b01c34c0303116a2c7a579fec5bcd19d76fa605c6ec9fa7c9885e669437911365cf63c8be381aebab666f833ff9099be024fb139d3ddc50e5f9b6702352b5a3c -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-node-linux-arm.tar.gz) | 21384a97bea7d4e97a24d660f7c1ba9b5577314f5c6602c6fa29e1501628a513489a1ce8472f6b5d0b4964625d5e9ff786ea2069a5add112eae3d28069ce3758 -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-node-linux-arm64.tar.gz) | 8158b7abd711a42b1ff4eb42ce49d9eeb04d8903f0daa48cd7528516dafaf6693669d8653b1360fe2630c95b78fa3552184423670fd919896411d1d25781d173 -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-node-linux-ppc64le.tar.gz) | 5fa9d1306790f8cb8b16b7e9521d46f8e56cc619acd90165180c9fb02ac9bf0908130f80a7c0fce046a4f15ab4e366ab0d9f4b18a5da8180607c343e9009433b -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-node-linux-s390x.tar.gz) | ccafa72087fc09e37206e73ff2b2198fd5b2a5d2e56dca31f77c12aabe42d766f877d77c6265ae7a4c180e8926ba53cb4c563bd7a4d3dca85012e7a664fa5762 -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.4/kubernetes-node-windows-amd64.tar.gz) | ee2f631d619ac436232db9eb4ea377526738a15ad3a88752e7a481e02cd09d848fbdf91ac8dba7905272766a3039cb1cd76afce9cf84352020eefaaaad739bf4 - -## Changelog since v1.18.3 - -## Changes by Kind - -### API Change - -- Resolve regression in metadata.managedFields handling in update/patch requests submitted by older API clients ([#92007](https://github.com/kubernetes/kubernetes/pull/92007), [@apelisse](https://github.com/apelisse)) [SIG API Machinery and Testing] - -### Feature - -- Extend AWS azToRegion method to support Local Zones ([#90874](https://github.com/kubernetes/kubernetes/pull/90874), [@Jeffwan](https://github.com/Jeffwan)) [SIG Cloud Provider] - -### Bug or Regression - -- Azure: set dest prefix and port for IPv6 inbound security rule ([#91831](https://github.com/kubernetes/kubernetes/pull/91831), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] -- Fix public IP not shown issues after assigning public IP to Azure VMs ([#90886](https://github.com/kubernetes/kubernetes/pull/90886), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fixed a regression preventing garbage collection of RBAC role and binding objects ([#90534](https://github.com/kubernetes/kubernetes/pull/90534), [@apelisse](https://github.com/apelisse)) [SIG Auth] -- Fixes regression in CPUManager that caused freeing of exclusive CPUs at incorrect times ([#90377](https://github.com/kubernetes/kubernetes/pull/90377), [@cbf123](https://github.com/cbf123)) [SIG Cloud Provider and Node] -- Fixes regression in CPUManager that had the (rare) possibility to release exclusive CPUs in app containers inherited from init containers. ([#90419](https://github.com/kubernetes/kubernetes/pull/90419), [@klueska](https://github.com/klueska)) [SIG Node] -- Pod Finalizers and Conditions updates are skipped for re-scheduling attempts ([#91298](https://github.com/kubernetes/kubernetes/pull/91298), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] -- Resolve regression in metadata.managedFields handling in create/update/patch requests not using server-side apply ([#91791](https://github.com/kubernetes/kubernetes/pull/91791), [@apelisse](https://github.com/apelisse)) [SIG API Machinery and Testing] -- Resolves an issue using `kubectl certificate approve/deny` against a server serving the v1 CSR API ([#91691](https://github.com/kubernetes/kubernetes/pull/91691), [@liggitt](https://github.com/liggitt)) [SIG Auth and CLI] - -### Other (Cleanup or Flake) - -- Build: Use debian-hyperkube-base@v1.0.0 image ([#91476](https://github.com/kubernetes/kubernetes/pull/91476), [@justaugustus](https://github.com/justaugustus)) [SIG Cluster Lifecycle, Network and Release] -- Content-type and verb for request metrics are now bounded to a known set. ([#89451](https://github.com/kubernetes/kubernetes/pull/89451), [@logicalhan](https://github.com/logicalhan)) [SIG API Machinery and Instrumentation] -- Update CNI to v0.8.6 ([#91387](https://github.com/kubernetes/kubernetes/pull/91387), [@justaugustus](https://github.com/justaugustus)) [SIG Cluster Lifecycle, Network, Release and Testing] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -_Nothing has changed._ - -### Removed -_Nothing has changed._ - - - -# v1.18.3 - - -## Downloads for v1.18.3 - -### Source Code - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes.tar.gz) | 7d511c960f766f76bc087c00d706dc78ed403f661ea62ea6a2e84b9a0498826c0186f8705d18e1101ce148eecf7046f3e96e0a64aff7698a0976414a56056d4d -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-src.tar.gz) | 93b83acf5d15cab94e1d2866b2613d1aeed67c00a9eed064988c3bc4c700e34bd854fffac730c5ed6d8e138f15ce7750c17952f33bd4918771c7da358fbf5b53 - -### Client binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-client-darwin-386.tar.gz) | cf6a22a453b88de6be0e09ad67e8bb3e364b702a86c9ba911540d4f4b2ae0872d3802f814cd471ef4ec0b2822b071489d59e21ece01f38fa567d3afd8718158f -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-client-darwin-amd64.tar.gz) | bd3c15726d44d083f48dbc1af0f55f2d2d0c82ad020ed583bf05460a4fc9073bdd0395c2e0e4bfc74b705f4427bfe76bee0c77eb4aea83247b6627fc15d8d3f9 -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-client-linux-386.tar.gz) | 6cb3d18086e275b78c3019a51de5795f5d112482ea6dc99a58e3985269e948e054a5e38457f837add606b83d86fb1c5b9044903f9dea964d9ea84c564a8ca6e5 -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-client-linux-amd64.tar.gz) | cfcb89a706eb8ddc7aa8225e3f0eb76a0d973faa1c82b1bec0a457cd8b44b7bd5c154b7ed1f7cdabfdee84af8a33fd7fff83970a6ee5a97d661a806b69da968b -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-client-linux-arm.tar.gz) | adbb0383ab50358e479438831168b6f3187a7cafcad84e8c22ff2ec52300be643bf535ffbe0c6ffc971120afb56703c206a64459db7b485ee67dd05d84393f5e -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-client-linux-arm64.tar.gz) | 32f5e6cc5a811f941faaa92667d236bb08bc245a103a2ab555569a5bf1bfd1926f30ce08635273fbea414f92c8764f8077b3e3be5ea52e90be4ed3ded9253452 -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-client-linux-ppc64le.tar.gz) | b0b2ade932e17aa4b88b147fcb6aeace81c65e795202e27c780e270a86f50fd7f863f41558b0fc37ece1196fa39047baf47568416ee6faed7946593ad35fba03 -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-client-linux-s390x.tar.gz) | db49113c3e5d727d6c66b17a0a5a3f7d383b7179630fb5680d278f34b35e4f3d5a1086489858a90a5417dafc42222d23ff2aacba7b7d571d3b2d9ced460877de -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-client-windows-386.tar.gz) | d2a8e6f6e93a3ce6af473372de1c52e039d14a443d93537001e1bc5e7b237768a25a9a1d891a40d50142c23df1e7d94f767d11adf949439e77328c7aafbc7a23 -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-client-windows-amd64.tar.gz) | 5f2739b862fbbab9f847b61f9373021b92c4d9188ff7f534125dc48d2d1e6ed51bd7bc5c987f26db3bf1d1f05a4c0f4c0ff7a0836a4ca14e56d2b12f406f1a72 - -### Server binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-server-linux-amd64.tar.gz) | 5561483d796b124b8fe0e1cf5778ea03fec1e244ebc29f4b1b6c5ac93ab6bd10808d05da81b5f26426d51a3784c93ddf8b375ff971a78aebfd0ec7acac161365 -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-server-linux-arm.tar.gz) | 5e0e026fb93ac5452d1ddeb5fc016dbd44276d2340088ef59916bdd264b43ab02889beb645b6b8d9e5ee02bf2fe827327478b158f80b152c073b9ecaaba6fd0e -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-server-linux-arm64.tar.gz) | eb0b72f79e9d0c717995f7e52d24646daa8cbaf0e1502c0b27a15acebcfa5d61495bee49cc6ba4eb4ed8d4e1d9aae29170a86c70240da56f8fb9360dabb9ec7b -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-server-linux-ppc64le.tar.gz) | 52ef224a68d3ea50f320ca43b2ec98fedc07431b05db6fb00556b870bb8a533aa1ceb5f5ad90ea3d41f611045014a387ae84de5df8c51c6fbf8fa1e0d8c07d31 -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-server-linux-s390x.tar.gz) | eb4581d2419734c4835ebd2a91a40fa7e1180c8b8ff4088c9d1995c11787b7d6b7cb26cedfdce8c53affc648b106fe852ed53f165142f1089c27f9368570025d - -### Node binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-node-linux-amd64.tar.gz) | 1027a6fccadd320f123894dc624db31539333deef0b3d51b4bd3efc9214f2d74a0a50c53dc28e5801426d3c9556f82f4e06042c824151fea9112df795976d158 -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-node-linux-arm.tar.gz) | 9dfd609692372660152c6fe6d08be082b0d20d4c70546d722ce5aa5565cc6d810bb0cdac6b98d9a9374382b9dcf8819e4e1d263481791e044cfef5d3980d0b13 -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-node-linux-arm64.tar.gz) | d0b0a8ac1f448df7c3bb2254000e0ca8567fafe1fd4e680c75a6c8d40dcc9d4b9ae34648532aef50a953be99d41d62464d704b516c33745fc169337684e7433b -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-node-linux-ppc64le.tar.gz) | b5f3a0e3b2b26d3ac5b8be808355233787c1d3663268da88096351b39b6ff6e58befff97dab109b6324ad050fe2a361ac6b35dbdab7f2dd85dc013d881baecf9 -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-node-linux-s390x.tar.gz) | 52c9cc8a09c5d5c9150dc023b759ebe77632121a54bf0936b96f4148b7e421964f39bdad4fcd1002f453c012a03d928888cc04520a10a96ea45d798a7cd2ca7b -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.3/kubernetes-node-windows-amd64.tar.gz) | f83802db06a86edd9ade8e737ed0e8a11ebeeaa69e102f9550b90f0d8a724e7864f6531f7f500ff70d4202168a774c5b328fea1ec0a95b9e275a0233a852f04f - -## Changelog since v1.18.2 - -## Changes by Kind - -### Bug or Regression - - An issue preventing GCP cloud-controller-manager running out-of-cluster to initialize new Nodes is now fixed. ([#90057](https://github.com/kubernetes/kubernetes/pull/90057), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG Apps and Cloud Provider] - - Avoid unnecessary scheduling churn when annotations are updated while Pods are being scheduled. ([#90373](https://github.com/kubernetes/kubernetes/pull/90373), [@fabiokung](https://github.com/fabiokung)) [SIG Scheduling] - - Base-images: Update to kube-cross:v1.13.9-5 ([#90964](https://github.com/kubernetes/kubernetes/pull/90964), [@justaugustus](https://github.com/justaugustus)) [SIG Release and Testing] - - CSINode initialization does not crash kubelet on startup when APIServer is not reachable or kubelet has not the right credentials yet. ([#89589](https://github.com/kubernetes/kubernetes/pull/89589), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] - - Fix IPVS compatiblity issue with older kernels (< 3.18) where the netlink address family attribute is not set ([#90678](https://github.com/kubernetes/kubernetes/pull/90678), [@andrewsykim](https://github.com/andrewsykim)) [SIG Cluster Lifecycle, Network and Testing] - - Fix flaws in Azure CSI translation ([#90324](https://github.com/kubernetes/kubernetes/pull/90324), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] - - Fix: Init containers are now considered for the calculation of resource requests when scheduling ([#90378](https://github.com/kubernetes/kubernetes/pull/90378), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] - - Fix: azure disk dangling attach issue which would cause API throttling ([#90749](https://github.com/kubernetes/kubernetes/pull/90749), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] - - Fix: support removal of nodes backed by deleted non VMSS instances on Azure ([#91184](https://github.com/kubernetes/kubernetes/pull/91184), [@bpineau](https://github.com/bpineau)) [SIG Cloud Provider] - - Fixed a 1.18 regression in wait.Forever that skips the backoff period on the first repeat ([#90476](https://github.com/kubernetes/kubernetes/pull/90476), [@zhan849](https://github.com/zhan849)) [SIG API Machinery] - - Fixed a regression running kubectl commands with --local or --dry-run flags when no kubeconfig file is present ([#90243](https://github.com/kubernetes/kubernetes/pull/90243), [@soltysh](https://github.com/soltysh)) [SIG API Machinery, CLI and Testing] - - Fixes a bug defining a default value for a replicas field in a custom resource definition that has the scale subresource enabled ([#90019](https://github.com/kubernetes/kubernetes/pull/90019), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation] - - Fixes a regression in 1.17 that dropped cache-control headers on API requests ([#90468](https://github.com/kubernetes/kubernetes/pull/90468), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Testing] - - Kubeadm: increase robustness for "kubeadm join" when adding etcd members on slower setups ([#90645](https://github.com/kubernetes/kubernetes/pull/90645), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] - - Provides a fix to allow a cluster in a private Azure cloud to authenticate to ACR in the same cloud. ([#90425](https://github.com/kubernetes/kubernetes/pull/90425), [@DavidParks8](https://github.com/DavidParks8)) [SIG Cloud Provider] - - Scheduling failures due to no nodes available are now reported as unschedulable under ```schedule_attempts_total``` metric. ([#90989](https://github.com/kubernetes/kubernetes/pull/90989), [@ahg-g](https://github.com/ahg-g)) [SIG Scheduling] - -### Other (Cleanup or Flake) - - base-images: Use debian-base:v2.1.0 (includes CVE fixes) - - base-images: Use debian-iptables:v12.1.0 (includes CVE fixes) ([#90863](https://github.com/kubernetes/kubernetes/pull/90863), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Cluster Lifecycle and Release] - -## Dependencies - -### Added -_Nothing has changed._ - -### Changed -- k8s.io/kube-openapi: bf4fb3b → 61e04a5 - -### Removed -- github.com/docker/libnetwork: [c8a5fca](https://github.com/docker/libnetwork/tree/c8a5fca) - - - -# v1.18.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.18.2 - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes.tar.gz) | `2f8e853bd59731410259d5357d9969425fbbbea378bbe6cdd0f7a9ddf5c25924838300924b03ec15d6b9030be86bea9d26bb9b63078bf2c150b0bbc0859419d7` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-src.tar.gz) | `0915b658c53b9bad1b3913470cb6728bc51fd49e8ac7778d4653c7271642d56a51ae83e58b9a1829a8df8970e73411f02c5ab277f8a9ba4befc4ba933800a9c5` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-client-darwin-386.tar.gz) | `0a0c94fe16819eb16ca7ef0110a2a45ad5368a5cb326ca48e1d72ef56488c5c273fcfa15e9704492dfb3188447800cf109bf434b6d646a2c01c833eccaa7ebbe` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-client-darwin-amd64.tar.gz) | `46a056b3bf9936498c1bbb78ca6d882c17271723676ec53409fe6fd67c7f8a9cb0ab00e286f8ab2231216fabbcfec72f943c29827068ab66d6029f585faccfcb` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-client-linux-386.tar.gz) | `58f137f3d13b213a153e7589d82040d5f1aee525368de974c134494c14d0f88526e4b1db9022dd728d47fe13ff1c4c97fba94e3b2ebc746ec537bebf41817d53` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-client-linux-amd64.tar.gz) | `ed36f49e19d8e0a98add7f10f981feda8e59d32a8cb41a3ac6abdfb2491b3b5b3b6e0b00087525aa8473ed07c0e8a171ad43f311ab041dcc40f72b36fa78af95` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-client-linux-arm.tar.gz) | `ae3b7a8f85d2f262b0f24d277602034cd6657aa0a0467768b87c379b821963c10e35cff8131f666038feb2a2e543725c0025ed84a7a254c6e96036b911988530` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-client-linux-arm64.tar.gz) | `54b10261c354e99d3eeee862461f0c3f99ff0e3b603230da7a48e182fd5890e438ff5bc8daafc74a3be9411a873d9ed611cea99c038fff53aa9e57d8d7140662` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-client-linux-ppc64le.tar.gz) | `b9694a0cf9e42bc9299d923de79e61ec52419a1889605cfd2eb5e6f9277191a0a1c6b7ceaf251735e576ad4aa73465c1c6a48b977243e45b6449fe7017dad18b` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-client-linux-s390x.tar.gz) | `144861c7cfc28b63da11de4b847d68bb4a984b5eeb54ccbccf998bd87e0e2832d38d3610056cf2e5d3a59535a0f8213bebd9369f0f6c1fd947afad41fdcc8837` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-client-windows-386.tar.gz) | `3fa6e6fdf88b7f9ae7dc8f95526977aea6e2fe65fdbb988c2ea40d160ba30342453ee9e0ce022c69d8635405ad92c6672d775e8e477cf3c937c1bbb7217fb279` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-client-windows-amd64.tar.gz) | `733887310c94e70fb33c6fbea9c5e7d4a74b4c2402735ed7856eb2e009bb0ed2aab3abeb1d13b46681e876df6901bd2be6547a25061a8e8df442301179b82fc9` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-server-linux-amd64.tar.gz) | `f808e85a5e6f8dfed18ee3479691be8283c13c787ad5abb1a06f1c84aa7e7894af9028c6edcc4cdfe2cccf58e9c8394a6958facc92364d388a62ebf6aa9db2e8` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-server-linux-arm.tar.gz) | `7ec6d47cda5f8f2cafaa82ac1179dc181d93562d1a2ad7687dca5dba8737498c0488275eb0ba33018c48e684550fa8612d03726251ed24fdebc893286528a401` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-server-linux-arm64.tar.gz) | `f5341be0c84cbf383662ed333bb2f9a4b83f80b6ebe77526ed2a407e3cd566f643be030c367606da4eb563523119f7bd8a9a7173b91cc5466602b5f9e1c34921` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-server-linux-ppc64le.tar.gz) | `1c861320ddd63c9731781079fb00d9b0c80befe9b98103056f3abdd214cdd4974b1d79196491fb7c953d0126343fb6d7b9a6a7ca1684b8d8c5db686e1647106b` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-server-linux-s390x.tar.gz) | `5e57f536844d606873412a5ca46e85c4a6deae5e5dc415b3fbd0b20a58750cd0360265bc237102a8050db795c1293d6d7530cb5183e0ca25bc8e93f3f5fc650c` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-node-linux-amd64.tar.gz) | `b342dbb9fce1c2667ed255e0b7457063e7f4827a74d4c946087bb471144a552e93e17e624075273fd72b1788fc9219ae46a8d8b1c247b2f26320e932143fef1b` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-node-linux-arm.tar.gz) | `d74d6b9a0c05623fb5f3b7423517c3a8c03f6fd18525554cae5704cadc3676d70d42d0537de70f7b7619e31640a8c510b4321e0eeada49300d9c92cac2a9217a` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-node-linux-arm64.tar.gz) | `d80716155df8ee997b4d81573ab713a04f64e91ec0e7c6c77af2e0031bbbe1f250cc463a7788e548217f6e7071caf458239869f2863737f3007a8cf79abff9cc` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-node-linux-ppc64le.tar.gz) | `89fe1dbbbefe36169232b46b564fc46b96cf6987bca8c1f9c61475d07a771c65f63cdf4c66168e9c515ec862f65b83d5a7668425e956a109e1aa60e0988d4a57` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-node-linux-s390x.tar.gz) | `734e11c10c4e8dea9931ce0e832dac8495808acb7940ca2be4a13cedbea53b537973320e80b9f021c37c10c9510dcf328b0f975c40afebc301ea3d3937a3c36a` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.2/kubernetes-node-windows-amd64.tar.gz) | `f121f7893c102ecd491189077ccbddd7aa0625cf2bfe855a7be00cfe615e6d397928cb5448092993626f33b216e89ac11bd0c09255847e1b6ba9a54a933eee53` - -## Changelog since v1.18.1 - -## Changes by Kind - -### Bug or Regression - -- Client-go: resolves an issue with informers falling back to full list requests when timeouts are encountered, rather than re-establishing a watch. ([#89975](https://github.com/kubernetes/kubernetes/pull/89975), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Testing] -- Fix scheduler crash when removing node before its pods ([#89908](https://github.com/kubernetes/kubernetes/pull/89908), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] -- Fixes conversion error for HorizontalPodAutoscaler objects with invalid annotations ([#89965](https://github.com/kubernetes/kubernetes/pull/89965), [@liggitt](https://github.com/liggitt)) [SIG Autoscaling] -- Fixes kubectl apply/prune in namespace other than default. ([#90016](https://github.com/kubernetes/kubernetes/pull/90016), [@seans3](https://github.com/seans3)) [SIG CLI and Testing] -- For GCE cluster provider, fix bug of not being able to create internal type load balancer for clusters with more than 1000 nodes in a single zone. ([#89902](https://github.com/kubernetes/kubernetes/pull/89902), [@wojtek-t](https://github.com/wojtek-t)) [SIG Cloud Provider, Network and Scalability] -- Restores priority of static control plane pods in the cluster/gce/manifests control-plane manifests ([#89970](https://github.com/kubernetes/kubernetes/pull/89970), [@liggitt](https://github.com/liggitt)) [SIG Cluster Lifecycle and Node] - - -# v1.18.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.18.1 - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes.tar.gz) | `460dcc0b27fdfd9b4a574287708c0fef22224bd4c1bc777654a69a76c7dafb37e6a37b028aeaa8d79e202c2265fe4b322af6a95515cd438e44de7d55dac176b3` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-src.tar.gz) | `adc6b3ccc9792794b97d2c8c7e5d582ac92aedfa83bb9cdfb782057ce4e80985e940eeb8f3e943b90919927fe8ce65863077e526b56e7675ee1d5d66760d08b6` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-client-darwin-386.tar.gz) | `fe7c496778172012504839175c48c69337afc7341c8c71d2858bf9319a2bb4673abeb95b1415ae4abaa2364f24b410edaada963beeb614b361f6d412bf4c9352` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-client-darwin-amd64.tar.gz) | `a62a894ae001cb3f245595488a46c8c8c5c52d15eb9eefc7b458df6c93399e58eba52d1ca0dc8df1ee74ea75ecea3ab4853eea4bf830dfb89be3b4d6a5d0d83c` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-client-linux-386.tar.gz) | `4cd898e86510f17d0a34c8721f942d81bdaafbf4d6513efde2710aad7dc44e89b6d986491c444f57ad9f183ac376031ecdb8e6dbee7dea76f7e4df116fb3998a` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-client-linux-amd64.tar.gz) | `37e664e40bb31765572215cf262a5c9bbc7748d158d0db58dbec2d5e593b54d71586af77296eda1cec2a2230b1d27260c51f6410b83afeeafc3c5354c308b4c4` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-client-linux-arm.tar.gz) | `196977d4a09046abb168ea4c6cde261a90226cd391d74877ce1d9907bc8ba670d0365311980422493125a2cde8648ece0035ff1af6d9507975428129de603c83` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-client-linux-arm64.tar.gz) | `675f27c170eb888f08db834f03b8123d19f0f2dd357c694c6c1cae59067c8d6b0b2db82b9cefc105dd16079ef6f7261e03fe9a73089c03dd3d53b1d68ed1cf68` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-client-linux-ppc64le.tar.gz) | `dd317cf29ed7cfa664a0f88651273565ca831138994cb37d8d53f5ba3993a6da529a377ded98d65c31450b31e1647fb87bc708f2aec6b2ef6a2bea9c73fb73fb` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-client-linux-s390x.tar.gz) | `57db3fcc952ad57d94f3b92022c1881b3852b321535501af7b2dfca9eb0acde03a34c5863aad6fe304fc4aaa922ff538d5dae7bc8c375a05956f892c265fbaf1` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-client-windows-386.tar.gz) | `ad52ae356e9d0156bdaa5ed4c77cd0226610fd715093e2caf7466c1bf87bb9bb2f21a48e9676f265c52de301bc416ce17cda5ac9fd7d379323c977c5f07ee9cd` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-client-windows-amd64.tar.gz) | `efe66bb5ae58e06c7787b98fc69e191502dadecf719636788f25bff7bd0e50d7d170c5e729611406c304afd159b33b0048c436e823276b0fc9d4c07904ba7974` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-server-linux-amd64.tar.gz) | `2183d1fcfca1370f75146797100801d7fbfec97789d1ca5eef4aff79bf66e01869ddaac51ab76abc073026682fe4d7ee658ffed99b5324ad285019c8dabcfea6` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-server-linux-arm.tar.gz) | `8ca77be8dd999e0a31bb9de597f383628941b7d6537cec19ce3a77c8f4fc537c649e9ce0bd43ec4ecb387d224654804f6f4682c80c26ba7e97cab6aff5b57e21` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-server-linux-arm64.tar.gz) | `b1eacba21d8740bba785f94b66aea1fb9e4529bea9740d938cd52409acc970f0a93ec5c857059d3d3f555f9eb6cd4f799c42266ad493676b3fed7f1deaf5a878` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-server-linux-ppc64le.tar.gz) | `dc8426bd333aa2fe703003356a6237df760c6753c142e6fea28cbf13656e53eb26d99b862000813ba94fe2041fc073271217879b7036546a7bd4b848aa569f6b` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-server-linux-s390x.tar.gz) | `2398638d5724627573326b6820cb268d30d47f18afc913d367f518ba8cde8a419b0dc394b925be310c95aa0f3705f625ff0f628a11da38cdf94da4f493e9bb75` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-node-linux-amd64.tar.gz) | `88a9b68c8cba77fe50751d998117ab632d1e8aa12a45f6bef71a24ee5a8fb6f559d00f129b8682f9d5838671edb6649e3c9caebdf9ce2a37f282f21316a522e0` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-node-linux-arm.tar.gz) | `3b558a1743893a994ec061a86aaf343d90e800d7ccd69c771b92d8915fc14217046a2f4817829dbdbe025331fe733ae401dbf671b4345d7a88b0c6470fbd99e8` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-node-linux-arm64.tar.gz) | `534b3db7e21f247189a484bb57958a3276bf74268d5943d712e68db50806afeeb1253acdc6a4c639c6ac08045e95ac4f9aaf95fa8192c85a19831329068bf5c6` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-node-linux-ppc64le.tar.gz) | `0bb1c7ee23ce7dbee0614e2d8fb8d79e0a36615ea4ea39ef97acf4e907ca5a9b57ee3735afc7b5bce8dd5b15f104cf37e1d92168684bb4e5fd053ed3c35802e6` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-node-linux-s390x.tar.gz) | `e4529b0804696c8bae9430411d5b51087fa6c204bef37a1c6e30d01490c7e996367f1e9aa1d9c10ca2faf9d90c02459fc36c64b1790fa88b703bb134df54c1c1` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.1/kubernetes-node-windows-amd64.tar.gz) | `7d976b1b22766cdd65b2b84602053b765e487d947966b4aaa3b169bb462d095e6a794154cd920b2c5e8a2d59695b75435ddb1237bc07404bba1273a0db01539e` - -## Changelog since v1.18.0 - -## Changes by Kind - -### Feature - -- deps: Update to Golang 1.13.9 - - build: Remove kube-cross image building ([#89398](https://github.com/kubernetes/kubernetes/pull/89398), [@justaugustus](https://github.com/justaugustus)) [SIG Release and Testing] - -### Other (Bug, Cleanup or Flake) - -- Azure: fix concurreny issue in lb creation ([#89604](https://github.com/kubernetes/kubernetes/pull/89604), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] -- Ensure Azure availability zone is always in lower cases. ([#89722](https://github.com/kubernetes/kubernetes/pull/89722), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix kubectl diff so it doesn't actually persist patches ([#89795](https://github.com/kubernetes/kubernetes/pull/89795), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG CLI and Testing] -- Fix: get attach disk error due to missing item in max count table ([#89768](https://github.com/kubernetes/kubernetes/pull/89768), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fixed the EndpointSlice controller to run without error on a cluster with the OwnerReferencesPermissionEnforcement validating admission plugin enabled. ([#89804](https://github.com/kubernetes/kubernetes/pull/89804), [@marun](https://github.com/marun)) [SIG Auth and Network] -- Fixes kubectl to apply all validly built objects, instead of stopping on error. ([#89864](https://github.com/kubernetes/kubernetes/pull/89864), [@seans3](https://github.com/seans3)) [SIG CLI and Testing] -- In the kubelet resource metrics endpoint at /metrics/resource, change the names of the following metrics: - - node_cpu_usage_seconds --> node_cpu_usage_seconds_total - - container_cpu_usage_seconds --> container_cpu_usage_seconds_total - This is a partial revert of #86282, which was added in 1.18.0, and initially removed the _total suffix ([#89540](https://github.com/kubernetes/kubernetes/pull/89540), [@dashpole](https://github.com/dashpole)) [SIG Instrumentation and Node] -- Kubeadm: during join when a check is performed that a Node with the same name already exists in the cluster, make sure the NodeReady condition is properly validated ([#89602](https://github.com/kubernetes/kubernetes/pull/89602), [@kvaps](https://github.com/kvaps)) [SIG Cluster Lifecycle] -- Kubeadm: fix a bug where post upgrade to 1.18.x, nodes cannot join the cluster due to missing RBAC ([#89537](https://github.com/kubernetes/kubernetes/pull/89537), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubectl azure authentication: fixed a regression in 1.18.0 where "spn:" prefix was unexpectedly added to the `apiserver-id` configuration in the kubeconfig file ([#89706](https://github.com/kubernetes/kubernetes/pull/89706), [@weinong](https://github.com/weinong)) [SIG API Machinery and Auth] -- Kubectl: Fixes bug by aggregating 'apply' errors instead of failing after first error ([#89607](https://github.com/kubernetes/kubernetes/pull/89607), [@seans3](https://github.com/seans3)) [SIG CLI and Testing] -- Reduce event spam during a volume operation error. ([#89796](https://github.com/kubernetes/kubernetes/pull/89796), [@msau42](https://github.com/msau42)) [SIG Storage] - - -# v1.18.0 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.18.0 - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes.tar.gz) | `cd5b86a3947a4f2cea6d857743ab2009be127d782b6f2eb4d37d88918a5e433ad2c7ba34221c34089ba5ba13701f58b657f0711401e51c86f4007cb78744dee7` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-src.tar.gz) | `fb42cf133355ef18f67c8c4bb555aa1f284906c06e21fa41646e086d34ece774e9d547773f201799c0c703ce48d4d0e62c6ba5b2a4d081e12a339a423e111e52` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-client-darwin-386.tar.gz) | `26df342ef65745df12fa52931358e7f744111b6fe1e0bddb8c3c6598faf73af997c00c8f9c509efcd7cd7e82a0341a718c08fbd96044bfb58e80d997a6ebd3c2` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-client-darwin-amd64.tar.gz) | `803a0fed122ef6b85f7a120b5485723eaade765b7bc8306d0c0da03bd3df15d800699d15ea2270bb7797fa9ce6a81da90e730dc793ea4ed8c0149b63d26eca30` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-client-linux-386.tar.gz) | `110844511b70f9f3ebb92c15105e6680a05a562cd83f79ce2d2e25c2dd70f0dbd91cae34433f61364ae1ce4bd573b635f2f632d52de8f72b54acdbc95a15e3f0` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-client-linux-amd64.tar.gz) | `594ca3eadc7974ec4d9e4168453e36ca434812167ef8359086cd64d048df525b7bd46424e7cc9c41e65c72bda3117326ba1662d1c9d739567f10f5684fd85bee` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-client-linux-arm.tar.gz) | `d3627b763606557a6c9a5766c34198ec00b3a3cd72a55bc2cb47731060d31c4af93543fb53f53791062bb5ace2f15cbaa8592ac29009641e41bd656b0983a079` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-client-linux-arm64.tar.gz) | `ba9056eff1452cbdaef699efbf88f74f5309b3f7808d372ebf6918442d0c9fea1653c00b9db3b7626399a460eef9b1fa9e29b827b7784f34561cbc380554e2ea` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-client-linux-ppc64le.tar.gz) | `f80fb3769358cb20820ff1a1ce9994de5ed194aabe6c73fb8b8048bffc394d1b926de82c204f0e565d53ffe7562faa87778e97a3ccaaaf770034a992015e3a86` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-client-linux-s390x.tar.gz) | `a9b658108b6803d60fa3cd4e76d9e58bf75201017164fe54054b7ccadbb68c4ad7ba7800746940bc518d90475e6c0a96965a26fa50882f4f0e56df404f4ae586` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-client-windows-386.tar.gz) | `18adffab5d1be146906fd8531f4eae7153576aac235150ce2da05aee5ae161f6bd527e8dec34ae6131396cd4b3771e0d54ce770c065244ad3175a1afa63c89e1` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-client-windows-amd64.tar.gz) | `162396256429cef07154f817de2a6b67635c770311f414e38b1e2db25961443f05d7b8eb1f8da46dec8e31c5d1d2cd45f0c95dad1bc0e12a0a7278a62a0b9a6b` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-server-linux-amd64.tar.gz) | `a92f8d201973d5dfa44a398e95fcf6a7b4feeb1ef879ab3fee1c54370e21f59f725f27a9c09ace8c42c96ac202e297fd458e486c489e05f127a5cade53b8d7c4` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-server-linux-arm.tar.gz) | `62fbff3256bc0a83f70244b09149a8d7870d19c2c4b6dee8ca2714fc7388da340876a0f540d2ae9bbd8b81fdedaf4b692c72d2840674db632ba2431d1df1a37d` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-server-linux-arm64.tar.gz) | `842910a7013f61a60d670079716b207705750d55a9e4f1f93696d19d39e191644488170ac94d8740f8e3aa3f7f28f61a4347f69d7e93d149c69ac0efcf3688fe` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-server-linux-ppc64le.tar.gz) | `95c5b952ac1c4127a5c3b519b664972ee1fb5e8e902551ce71c04e26ad44b39da727909e025614ac1158c258dc60f504b9a354c5ab7583c2ad769717b30b3836` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-server-linux-s390x.tar.gz) | `a46522d2119a0fd58074564c1fa95dd8a929a79006b82ba3c4245611da8d2db9fd785c482e1b61a9aa361c5c9a6d73387b0e15e6a7a3d84fffb3f65db3b9deeb` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-node-linux-amd64.tar.gz) | `f714f80feecb0756410f27efb4cf4a1b5232be0444fbecec9f25cb85a7ccccdcb5be588cddee935294f460046c0726b90f7acc52b20eeb0c46a7200cf10e351a` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-node-linux-arm.tar.gz) | `806000b5f6d723e24e2f12d19d1b9b3d16c74b855f51c7063284adf1fcc57a96554a3384f8c05a952c6f6b929a05ed12b69151b1e620c958f74c9600f3db0fcb` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-node-linux-arm64.tar.gz) | `c207e9ab60587d135897b5366af79efe9d2833f33401e469b2a4e0d74ecd2cf6bb7d1e5bc18d80737acbe37555707f63dd581ccc6304091c1d98dafdd30130b7` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-node-linux-ppc64le.tar.gz) | `a542ed5ed02722af44ef12d1602f363fcd4e93cf704da2ea5d99446382485679626835a40ae2ba47a4a26dce87089516faa54479a1cfdee2229e8e35aa1c17d7` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-node-linux-s390x.tar.gz) | `651e0db73ee67869b2ae93cb0574168e4bd7918290fc5662a6b12b708fa628282e3f64be2b816690f5a2d0f4ff8078570f8187e65dee499a876580a7a63d1d19` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0/kubernetes-node-windows-amd64.tar.gz) | `d726ed904f9f7fe7e8831df621dc9094b87e767410a129aa675ee08417b662ddec314e165f29ecb777110fbfec0dc2893962b6c71950897ba72baaa7eb6371ed` - -## Changelog since v1.17.0 - -A complete changelog for the release notes is now hosted in a customizable -format at [https://relnotes.k8s.io][1]. Check it out and please give us your -feedback! - -[1]: https://relnotes.k8s.io/?releaseVersions=1.18.0 - -## What’s New (Major Themes) - -### Kubernetes Topology Manager Moves to Beta - Align Up! - -A beta feature of Kubernetes in release 1.18, the [Topology Manager feature](https://github.com/nolancon/website/blob/f4200307260ea3234540ef13ed80de325e1a7267/content/en/docs/tasks/administer-cluster/topology-manager.md) enables NUMA alignment of CPU and devices (such as SR-IOV VFs) that will allow your workload to run in an environment optimized for low-latency. Prior to the introduction of the Topology Manager, the CPU and Device Manager would make resource allocation decisions independent of each other. This could result in undesirable allocations on multi-socket systems, causing degraded performance on latency critical applications. - -### Serverside Apply - Beta 2 - -Server-side Apply was promoted to Beta in 1.16, but is now introducing a second Beta in 1.18. This new version will track and manage changes to fields of all new Kubernetes objects, allowing you to know what changed your resources and when. - -### Extending Ingress with and replacing a deprecated annotation with IngressClass - -In Kubernetes 1.18, there are two significant additions to Ingress: A new `pathType` field and a new `IngressClass` resource. The `pathType` field allows specifying how paths should be matched. In addition to the default `ImplementationSpecific` type, there are new `Exact` and `Prefix` path types. - -The `IngressClass` resource is used to describe a type of Ingress within a Kubernetes cluster. Ingresses can specify the class they are associated with by using a new `ingressClassName` field on Ingresses. This new resource and field replace the deprecated `kubernetes.io/ingress.class` annotation. - -### SIG CLI introduces kubectl debug - -SIG CLI was debating the need for a debug utility for quite some time already. With the development of [ephemeral containers](https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/), it became more obvious how we can support developers with tooling built on top of `kubectl exec`. The addition of the `kubectl debug` [command](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cli/20190805-kubectl-debug.md) (it is alpha but your feedback is more than welcome), allows developers to easily debug their Pods inside the cluster. We think this addition is invaluable. This command allows one to create a temporary container which runs next to the Pod one is trying to examine, but also attaches to the console for interactive troubleshooting. - -### Introducing Windows CSI support alpha for Kubernetes - -With the release of Kubernetes 1.18, an alpha version of CSI Proxy for Windows is getting released. CSI proxy enables non-privileged (pre-approved) containers to perform privileged storage operations on Windows. CSI drivers can now be supported in Windows by leveraging CSI proxy. -SIG Storage made a lot of progress in the 1.18 release. -In particular, the following storage features are moving to GA in Kubernetes 1.18: -- Raw Block Support: Allow volumes to be surfaced as block devices inside containers instead of just mounted filesystems. -- Volume Cloning: Duplicate a PersistentVolumeClaim and underlying storage volume using the Kubernetes API via CSI. -- CSIDriver Kubernetes API Object: Simplifies CSI driver discovery and allows CSI Drivers to customize Kubernetes behavior. - -SIG Storage is also introducing the following new storage features as alpha in Kubernetes 1.18: -- Windows CSI Support: Enabling containerized CSI node plugins in Windows via new [CSIProxy](https://github.com/kubernetes-csi/csi-proxy) -- Recursive Volume Ownership OnRootMismatch Option: Add a new “OnRootMismatch” policy that can help shorten the mount time for volumes that require ownership change and have many directories and files. - -### Other notable announcements - -SIG Network is moving IPv6 to Beta in Kubernetes 1.18, after incrementing significantly the test coverage with new CI jobs. - -NodeLocal DNSCache is an add-on that runs a dnsCache pod as a daemonset to improve clusterDNS performance and reliability. The feature has been in Alpha since 1.13 release. The SIG Network is announcing the GA graduation of Node Local DNSCache [#1351](https://github.com/kubernetes/enhancements/pull/1351) - -## Known Issues - -No Known Issues Reported - -## Urgent Upgrade Notes - -### (No, really, you MUST read this before you upgrade) - -#### kube-apiserver: -- in an `--encryption-provider-config` config file, an explicit `cacheSize: 0` parameter previously silently defaulted to caching 1000 keys. In Kubernetes 1.18, this now returns a config validation error. To disable caching, you can specify a negative cacheSize value in Kubernetes 1.18+. -- consumers of the 'certificatesigningrequests/approval' API must now have permission to 'approve' CSRs for the specific signer requested by the CSR. More information on the new signerName field and the required authorization can be found at https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests#authorization ([#88246](https://github.com/kubernetes/kubernetes/pull/88246), [@munnerz](https://github.com/munnerz)) [SIG API Machinery, Apps, Auth, CLI, Node and Testing] -- The following features are unconditionally enabled and the corresponding `--feature-gates` flags have been removed: `PodPriority`, `TaintNodesByCondition`, `ResourceQuotaScopeSelectors` and `ScheduleDaemonSetPods` ([#86210](https://github.com/kubernetes/kubernetes/pull/86210), [@draveness](https://github.com/draveness)) [SIG Apps and Scheduling] - -#### kubelet: -- `--enable-cadvisor-endpoints` is now disabled by default. If you need access to the cAdvisor v1 Json API please enable it explicitly in the kubelet command line. Please note that this flag was deprecated in 1.15 and will be removed in 1.19. ([#87440](https://github.com/kubernetes/kubernetes/pull/87440), [@dims](https://github.com/dims)) [SIG Instrumentation, Node and Testing] -- Promote CSIMigrationOpenStack to Beta (off by default since it requires installation of the OpenStack Cinder CSI Driver. The in-tree AWS OpenStack Cinder driver "kubernetes.io/cinder" was deprecated in 1.16 and will be removed in 1.20. Users should enable CSIMigration + CSIMigrationOpenStack features and install the OpenStack Cinder CSI Driver (https://github.com/kubernetes-sigs/cloud-provider-openstack) to avoid disruption to existing Pod and PVC objects at that time. Users should start using the OpenStack Cinder CSI Driver directly for any new volumes. ([#85637](https://github.com/kubernetes/kubernetes/pull/85637), [@dims](https://github.com/dims)) [SIG Cloud Provider] - -#### kubectl: -- `kubectl` and k8s.io/client-go no longer default to a server address of `http://localhost:8080`. If you own one of these legacy clusters, you are *strongly* encouraged to secure your server. If you cannot secure your server, you can set the `$KUBERNETES_MASTER` environment variable to `http://localhost:8080` to continue defaulting the server address. `kubectl` users can also set the server address using the `--server` flag, or in a kubeconfig file specified via `--kubeconfig` or `$KUBECONFIG`. ([#86173](https://github.com/kubernetes/kubernetes/pull/86173), [@soltysh](https://github.com/soltysh)) [SIG API Machinery, CLI and Testing] -- `kubectl run` has removed the previously deprecated generators, along with flags unrelated to creating pods. `kubectl run` now only creates pods. See specific `kubectl create` subcommands to create objects other than pods. -([#87077](https://github.com/kubernetes/kubernetes/pull/87077), [@soltysh](https://github.com/soltysh)) [SIG Architecture, CLI and Testing] -- The deprecated command `kubectl rolling-update` has been removed ([#88057](https://github.com/kubernetes/kubernetes/pull/88057), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG Architecture, CLI and Testing] - -#### client-go: -- Signatures on methods in generated clientsets, dynamic, metadata, and scale clients have been modified to accept `context.Context` as a first argument. Signatures of Create, Update, and Patch methods have been updated to accept CreateOptions, UpdateOptions and PatchOptions respectively. Signatures of Delete and DeleteCollection methods now accept DeleteOptions by value instead of by reference. Generated clientsets with the previous interface have been added in new "deprecated" packages to allow incremental migration to the new APIs. The deprecated packages will be removed in the 1.21 release. A tool is available at http://sigs.k8s.io/clientgofix to rewrite method invocations to the new signatures. - -- The following deprecated metrics are removed, please convert to the corresponding metrics: - - The following replacement metrics are available from v1.14.0: - - `rest_client_request_latency_seconds` -> `rest_client_request_duration_seconds` - - `scheduler_scheduling_latency_seconds` -> `scheduler_scheduling_duration_seconds ` - - `docker_operations` -> `docker_operations_total` - - `docker_operations_latency_microseconds` -> `docker_operations_duration_seconds` - - `docker_operations_errors` -> `docker_operations_errors_total` - - `docker_operations_timeout` -> `docker_operations_timeout_total` - - `network_plugin_operations_latency_microseconds` -> `network_plugin_operations_duration_seconds` - - `kubelet_pod_worker_latency_microseconds` -> `kubelet_pod_worker_duration_seconds` - - `kubelet_pod_start_latency_microseconds` -> `kubelet_pod_start_duration_seconds` - - `kubelet_cgroup_manager_latency_microseconds` -> `kubelet_cgroup_manager_duration_seconds` - - `kubelet_pod_worker_start_latency_microseconds` -> `kubelet_pod_worker_start_duration_seconds` - - `kubelet_pleg_relist_latency_microseconds` -> `kubelet_pleg_relist_duration_seconds` - - `kubelet_pleg_relist_interval_microseconds` -> `kubelet_pleg_relist_interval_seconds` - - `kubelet_eviction_stats_age_microseconds` -> `kubelet_eviction_stats_age_seconds` - - `kubelet_runtime_operations` -> `kubelet_runtime_operations_total` - - `kubelet_runtime_operations_latency_microseconds` -> `kubelet_runtime_operations_duration_seconds` - - `kubelet_runtime_operations_errors` -> `kubelet_runtime_operations_errors_total` - - `kubelet_device_plugin_registration_count` -> `kubelet_device_plugin_registration_total` - - `kubelet_device_plugin_alloc_latency_microseconds` -> `kubelet_device_plugin_alloc_duration_seconds` - - `scheduler_e2e_scheduling_latency_microseconds` -> `scheduler_e2e_scheduling_duration_seconds` - - `scheduler_scheduling_algorithm_latency_microseconds` -> `scheduler_scheduling_algorithm_duration_seconds` - - `scheduler_scheduling_algorithm_predicate_evaluation` -> `scheduler_scheduling_algorithm_predicate_evaluation_seconds` - - `scheduler_scheduling_algorithm_priority_evaluation` -> `scheduler_scheduling_algorithm_priority_evaluation_seconds` - - `scheduler_scheduling_algorithm_preemption_evaluation` -> `scheduler_scheduling_algorithm_preemption_evaluation_seconds` - - `scheduler_binding_latency_microseconds` -> `scheduler_binding_duration_seconds` - - `kubeproxy_sync_proxy_rules_latency_microseconds` -> `kubeproxy_sync_proxy_rules_duration_seconds` - - `apiserver_request_latencies` -> `apiserver_request_duration_seconds` - - `apiserver_dropped_requests` -> `apiserver_dropped_requests_total` - - `etcd_request_latencies_summary` -> `etcd_request_duration_seconds` - - `apiserver_storage_transformation_latencies_microseconds ` -> `apiserver_storage_transformation_duration_seconds` - - `apiserver_storage_data_key_generation_latencies_microseconds` -> `apiserver_storage_data_key_generation_duration_seconds` - - `apiserver_request_count` -> `apiserver_request_total` - - `apiserver_request_latencies_summary` - - The following replacement metrics are available from v1.15.0: - - `apiserver_storage_transformation_failures_total` -> `apiserver_storage_transformation_operations_total` ([#76496](https://github.com/kubernetes/kubernetes/pull/76496), [@danielqsj](https://github.com/danielqsj)) [SIG API Machinery, Cluster Lifecycle, Instrumentation, Network, Node and Scheduling] - -## Changes by Kind - -### Deprecation - -#### kube-apiserver: -- the following deprecated APIs can no longer be served: - - All resources under `apps/v1beta1` and `apps/v1beta2` - use `apps/v1` instead - - `daemonsets`, `deployments`, `replicasets` resources under `extensions/v1beta1` - use `apps/v1` instead - - `networkpolicies` resources under `extensions/v1beta1` - use `networking.k8s.io/v1` instead - - `podsecuritypolicies` resources under `extensions/v1beta1` - use `policy/v1beta1` instead ([#85903](https://github.com/kubernetes/kubernetes/pull/85903), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, Apps, Cluster Lifecycle, Instrumentation and Testing] - -#### kube-controller-manager: -- Azure service annotation service.beta.kubernetes.io/azure-load-balancer-disable-tcp-reset has been deprecated. Its support would be removed in a future release. ([#88462](https://github.com/kubernetes/kubernetes/pull/88462), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] - -#### kubelet: -- The StreamingProxyRedirects feature and `--redirect-container-streaming` flag are deprecated, and will be removed in a future release. The default behavior (proxy streaming requests through the kubelet) will be the only supported option. If you are setting `--redirect-container-streaming=true`, then you must migrate off this configuration. The flag will no longer be able to be enabled starting in v1.20. If you are not setting the flag, no action is necessary. ([#88290](https://github.com/kubernetes/kubernetes/pull/88290), [@tallclair](https://github.com/tallclair)) [SIG API Machinery and Node] -- resource metrics endpoint `/metrics/resource/v1alpha1` as well as all metrics under this endpoint have been deprecated. Please convert to the following metrics emitted by endpoint `/metrics/resource`: - - scrape_error --> scrape_error - - node_cpu_usage_seconds_total --> node_cpu_usage_seconds - - node_memory_working_set_bytes --> node_memory_working_set_bytes - - container_cpu_usage_seconds_total --> container_cpu_usage_seconds - - container_memory_working_set_bytes --> container_memory_working_set_bytes - - scrape_error --> scrape_error - ([#86282](https://github.com/kubernetes/kubernetes/pull/86282), [@RainbowMango](https://github.com/RainbowMango)) [SIG Node] -- In a future release, kubelet will no longer create the CSI NodePublishVolume target directory, in accordance with the CSI specification. CSI drivers may need to be updated accordingly to properly create and process the target path. ([#75535](https://github.com/kubernetes/kubernetes/issues/75535)) [SIG Storage] - -#### kube-proxy: -- `--healthz-port` and `--metrics-port` flags are deprecated, please use `--healthz-bind-address` and `--metrics-bind-address` instead ([#88512](https://github.com/kubernetes/kubernetes/pull/88512), [@SataQiu](https://github.com/SataQiu)) [SIG Network] -- a new `EndpointSliceProxying` feature gate has been added to control the use of EndpointSlices in kube-proxy. The EndpointSlice feature gate that used to control this behavior no longer affects kube-proxy. This feature has been disabled by default. ([#86137](https://github.com/kubernetes/kubernetes/pull/86137), [@robscott](https://github.com/robscott)) - -#### kubeadm: -- command line option "kubelet-version" for `kubeadm upgrade node` has been deprecated and will be removed in a future release. ([#87942](https://github.com/kubernetes/kubernetes/pull/87942), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- deprecate the usage of the experimental flag '--use-api' under the 'kubeadm alpha certs renew' command. ([#88827](https://github.com/kubernetes/kubernetes/pull/88827), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- kube-dns is deprecated and will not be supported in a future version ([#86574](https://github.com/kubernetes/kubernetes/pull/86574), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- the `ClusterStatus` struct present in the kubeadm-config ConfigMap is deprecated and will be removed in a future version. It is going to be maintained by kubeadm until it gets removed. The same information can be found on `etcd` and `kube-apiserver` pod annotations, `kubeadm.kubernetes.io/etcd.advertise-client-urls` and `kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint` respectively. ([#87656](https://github.com/kubernetes/kubernetes/pull/87656), [@ereslibre](https://github.com/ereslibre)) [SIG Cluster Lifecycle] - -#### kubectl: -- the boolean and unset values for the --dry-run flag are deprecated and a value --dry-run=server|client|none will be required in a future version. ([#87580](https://github.com/kubernetes/kubernetes/pull/87580), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG CLI] -- `kubectl apply --server-dry-run` is deprecated and replaced with --dry-run=server ([#87580](https://github.com/kubernetes/kubernetes/pull/87580), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG CLI] - -#### add-ons: -- Remove cluster-monitoring addon ([#85512](https://github.com/kubernetes/kubernetes/pull/85512), [@serathius](https://github.com/serathius)) [SIG Cluster Lifecycle, Instrumentation, Scalability and Testing] - -#### kube-scheduler: -- The `scheduling_duration_seconds` summary metric is deprecated ([#86586](https://github.com/kubernetes/kubernetes/pull/86586), [@xiaoanyunfei](https://github.com/xiaoanyunfei)) [SIG Scheduling] -- The `scheduling_algorithm_predicate_evaluation_seconds` and - `scheduling_algorithm_priority_evaluation_seconds` metrics are deprecated, replaced by `framework_extension_point_duration_seconds[extension_point="Filter"]` and `framework_extension_point_duration_seconds[extension_point="Score"]`. ([#86584](https://github.com/kubernetes/kubernetes/pull/86584), [@xiaoanyunfei](https://github.com/xiaoanyunfei)) [SIG Scheduling] -- `AlwaysCheckAllPredicates` is deprecated in scheduler Policy API. ([#86369](https://github.com/kubernetes/kubernetes/pull/86369), [@Huang-Wei](https://github.com/Huang-Wei)) [SIG Scheduling] - -#### Other deprecations: -- The k8s.io/node-api component is no longer updated. Instead, use the RuntimeClass types located within k8s.io/api, and the generated clients located within k8s.io/client-go ([#87503](https://github.com/kubernetes/kubernetes/pull/87503), [@liggitt](https://github.com/liggitt)) [SIG Node and Release] -- Removed the 'client' label from apiserver_request_total. ([#87669](https://github.com/kubernetes/kubernetes/pull/87669), [@logicalhan](https://github.com/logicalhan)) [SIG API Machinery and Instrumentation] - -### API Change - -#### New API types/versions: -- A new IngressClass resource has been added to enable better Ingress configuration. ([#88509](https://github.com/kubernetes/kubernetes/pull/88509), [@robscott](https://github.com/robscott)) [SIG API Machinery, Apps, CLI, Network, Node and Testing] -- The CSIDriver API has graduated to storage.k8s.io/v1, and is now available for use. ([#84814](https://github.com/kubernetes/kubernetes/pull/84814), [@huffmanca](https://github.com/huffmanca)) [SIG Storage] - -#### New API fields: -- autoscaling/v2beta2 HorizontalPodAutoscaler added a `spec.behavior` field that allows scale behavior to be configured. Behaviors are specified separately for scaling up and down. In each direction a stabilization window can be specified as well as a list of policies and how to select amongst them. Policies can limit the absolute number of pods added or removed, or the percentage of pods added or removed. ([#74525](https://github.com/kubernetes/kubernetes/pull/74525), [@gliush](https://github.com/gliush)) [SIG API Machinery, Apps, Autoscaling and CLI] -- Ingress: - - `spec.ingressClassName` replaces the deprecated `kubernetes.io/ingress.class` annotation, and allows associating an Ingress object with a particular controller. - - path definitions added a `pathType` field to allow indicating how the specified path should be matched against incoming requests. Valid values are `Exact`, `Prefix`, and `ImplementationSpecific` ([#88587](https://github.com/kubernetes/kubernetes/pull/88587), [@cmluciano](https://github.com/cmluciano)) [SIG Apps, Cluster Lifecycle and Network] -- The alpha feature `AnyVolumeDataSource` enables PersistentVolumeClaim objects to use the spec.dataSource field to reference a custom type as a data source ([#88636](https://github.com/kubernetes/kubernetes/pull/88636), [@bswartz](https://github.com/bswartz)) [SIG Apps and Storage] -- The alpha feature `ConfigurableFSGroupPolicy` enables v1 Pods to specify a spec.securityContext.fsGroupChangePolicy policy to control how file permissions are applied to volumes mounted into the pod. ([#88488](https://github.com/kubernetes/kubernetes/pull/88488), [@gnufied](https://github.com/gnufied)) [SIG Storage] -- The alpha feature `ServiceAppProtocol` enables setting an `appProtocol` field in ServicePort and EndpointPort definitions. ([#88503](https://github.com/kubernetes/kubernetes/pull/88503), [@robscott](https://github.com/robscott)) [SIG Apps and Network] -- The alpha feature `ImmutableEphemeralVolumes` enables an `immutable` field in both Secret and ConfigMap objects to mark their contents as immutable. ([#86377](https://github.com/kubernetes/kubernetes/pull/86377), [@wojtek-t](https://github.com/wojtek-t)) [SIG Apps, CLI and Testing] - -#### Other API changes: -- The beta feature `ServerSideApply` enables tracking and managing changed fields for all new objects, which means there will be `managedFields` in `metadata` with the list of managers and their owned fields. -- The alpha feature `ServiceAccountIssuerDiscovery` enables publishing OIDC discovery information and service account token verification keys at `/.well-known/openid-configuration` and `/openid/v1/jwks` endpoints by API servers configured to issue service account tokens. ([#80724](https://github.com/kubernetes/kubernetes/pull/80724), [@cceckman](https://github.com/cceckman)) [SIG API Machinery, Auth, Cluster Lifecycle and Testing] -- CustomResourceDefinition schemas that use `x-kubernetes-list-map-keys` to specify properties that uniquely identify list items must make those properties required or have a default value, to ensure those properties are present for all list items. See https://kubernetes.io/docs/reference/using-api/api-concepts/#merge-strategy for details. ([#88076](https://github.com/kubernetes/kubernetes/pull/88076), [@eloyekunle](https://github.com/eloyekunle)) [SIG API Machinery and Testing] -- CustomResourceDefinition schemas that use `x-kubernetes-list-type: map` or `x-kubernetes-list-type: set` now enable validation that the list items in the corresponding custom resources are unique. ([#84920](https://github.com/kubernetes/kubernetes/pull/84920), [@sttts](https://github.com/sttts)) [SIG API Machinery] - -#### Configuration file changes: - -#### kube-apiserver: -- The `--egress-selector-config-file` configuration file now accepts an apiserver.k8s.io/v1beta1 EgressSelectorConfiguration configuration object, and has been updated to allow specifying HTTP or GRPC connections to the network proxy ([#87179](https://github.com/kubernetes/kubernetes/pull/87179), [@Jefftree](https://github.com/Jefftree)) [SIG API Machinery, Cloud Provider and Cluster Lifecycle] - -#### kube-scheduler: -- A kubescheduler.config.k8s.io/v1alpha2 configuration file version is now accepted, with support for multiple scheduling profiles ([#87628](https://github.com/kubernetes/kubernetes/pull/87628), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] - - HardPodAffinityWeight moved from a top level ComponentConfig parameter to a PluginConfig parameter of InterPodAffinity Plugin in `kubescheduler.config.k8s.io/v1alpha2` ([#88002](https://github.com/kubernetes/kubernetes/pull/88002), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling and Testing] - - Kube-scheduler can run more than one scheduling profile. Given a pod, the profile is selected by using its `.spec.schedulerName`. ([#88285](https://github.com/kubernetes/kubernetes/pull/88285), [@alculquicondor](https://github.com/alculquicondor)) [SIG Apps, Scheduling and Testing] - - Scheduler Extenders can now be configured in the v1alpha2 component config ([#88768](https://github.com/kubernetes/kubernetes/pull/88768), [@damemi](https://github.com/damemi)) [SIG Release, Scheduling and Testing] - - The PostFilter of scheduler framework is renamed to PreScore in kubescheduler.config.k8s.io/v1alpha2. ([#87751](https://github.com/kubernetes/kubernetes/pull/87751), [@skilxn-go](https://github.com/skilxn-go)) [SIG Scheduling and Testing] - -#### kube-proxy: -- Added kube-proxy flags `--ipvs-tcp-timeout`, `--ipvs-tcpfin-timeout`, `--ipvs-udp-timeout` to configure IPVS connection timeouts. ([#85517](https://github.com/kubernetes/kubernetes/pull/85517), [@andrewsykim](https://github.com/andrewsykim)) [SIG Cluster Lifecycle and Network] -- Added optional `--detect-local-mode` flag to kube-proxy. Valid values are "ClusterCIDR" (default matching previous behavior) and "NodeCIDR" ([#87748](https://github.com/kubernetes/kubernetes/pull/87748), [@satyasm](https://github.com/satyasm)) [SIG Cluster Lifecycle, Network and Scheduling] -- Kube-controller-manager and kube-scheduler expose profiling by default to match the kube-apiserver. Use `--enable-profiling=false` to disable. ([#88663](https://github.com/kubernetes/kubernetes/pull/88663), [@deads2k](https://github.com/deads2k)) [SIG API Machinery, Cloud Provider and Scheduling] -- Kubelet pod resources API now provides the information about active pods only. ([#79409](https://github.com/kubernetes/kubernetes/pull/79409), [@takmatsu](https://github.com/takmatsu)) [SIG Node] -- New flag `--endpointslice-updates-batch-period` in kube-controller-manager can be used to reduce the number of endpointslice updates generated by pod changes. ([#88745](https://github.com/kubernetes/kubernetes/pull/88745), [@mborsz](https://github.com/mborsz)) [SIG API Machinery, Apps and Network] -- New flag `--show-hidden-metrics-for-version` in kube-proxy, kubelet, kube-controller-manager, and kube-scheduler can be used to show all hidden metrics that are deprecated in the previous minor release. ([#85279](https://github.com/kubernetes/kubernetes/pull/85279), [@RainbowMango](https://github.com/RainbowMango)) [SIG Cluster Lifecycle and Network] - -#### Features graduated to beta: - - StartupProbe ([#83437](https://github.com/kubernetes/kubernetes/pull/83437), [@matthyx](https://github.com/matthyx)) [SIG Node, Scalability and Testing] - -#### Features graduated to GA: - - VolumePVCDataSource ([#88686](https://github.com/kubernetes/kubernetes/pull/88686), [@j-griffith](https://github.com/j-griffith)) [SIG Storage] - - TaintBasedEvictions ([#87487](https://github.com/kubernetes/kubernetes/pull/87487), [@skilxn-go](https://github.com/skilxn-go)) [SIG API Machinery, Apps, Node, Scheduling and Testing] - - BlockVolume and CSIBlockVolume ([#88673](https://github.com/kubernetes/kubernetes/pull/88673), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] - - Windows RunAsUserName ([#87790](https://github.com/kubernetes/kubernetes/pull/87790), [@marosset](https://github.com/marosset)) [SIG Apps and Windows] -- The following feature gates are removed, because the associated features were unconditionally enabled in previous releases: CustomResourceValidation, CustomResourceSubresources, CustomResourceWebhookConversion, CustomResourcePublishOpenAPI, CustomResourceDefaulting ([#87475](https://github.com/kubernetes/kubernetes/pull/87475), [@liggitt](https://github.com/liggitt)) [SIG API Machinery] - -### Feature - -- API request throttling (due to a high rate of requests) is now reported in client-go logs at log level 2. The messages are of the form:`Throttling request took 1.50705208s, request: GET:` The presence of these messages may indicate to the administrator the need to tune the cluster accordingly. ([#87740](https://github.com/kubernetes/kubernetes/pull/87740), [@jennybuckley](https://github.com/jennybuckley)) [SIG API Machinery] -- Add support for mount options to the FC volume plugin ([#87499](https://github.com/kubernetes/kubernetes/pull/87499), [@ejweber](https://github.com/ejweber)) [SIG Storage] -- Added a config-mode flag in azure auth module to enable getting AAD token without spn: prefix in audience claim. When it's not specified, the default behavior doesn't change. ([#87630](https://github.com/kubernetes/kubernetes/pull/87630), [@weinong](https://github.com/weinong)) [SIG API Machinery, Auth, CLI and Cloud Provider] -- Allow for configuration of CoreDNS replica count ([#85837](https://github.com/kubernetes/kubernetes/pull/85837), [@pickledrick](https://github.com/pickledrick)) [SIG Cluster Lifecycle] -- Allow user to specify resource using --filename flag when invoking kubectl exec ([#88460](https://github.com/kubernetes/kubernetes/pull/88460), [@soltysh](https://github.com/soltysh)) [SIG CLI and Testing] -- Apiserver added a new flag --goaway-chance which is the fraction of requests that will be closed gracefully(GOAWAY) to prevent HTTP/2 clients from getting stuck on a single apiserver. ([#88567](https://github.com/kubernetes/kubernetes/pull/88567), [@answer1991](https://github.com/answer1991)) [SIG API Machinery] -- Azure Cloud Provider now supports using Azure network resources (Virtual Network, Load Balancer, Public IP, Route Table, Network Security Group, etc.) in different AAD Tenant and Subscription than those for the Kubernetes cluster. To use the feature, please reference https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/docs/cloud-provider-config.md#host-network-resources-in-different-aad-tenant-and-subscription. ([#88384](https://github.com/kubernetes/kubernetes/pull/88384), [@bowen5](https://github.com/bowen5)) [SIG Cloud Provider] -- Azure VMSS/VMSSVM clients now suppress requests on throttling ([#86740](https://github.com/kubernetes/kubernetes/pull/86740), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Azure cloud provider cache TTL is configurable, list of the azure cloud provider is as following: - - "availabilitySetNodesCacheTTLInSeconds" - - "vmssCacheTTLInSeconds" - - "vmssVirtualMachinesCacheTTLInSeconds" - - "vmCacheTTLInSeconds" - - "loadBalancerCacheTTLInSeconds" - - "nsgCacheTTLInSeconds" - - "routeTableCacheTTLInSeconds" - ([#86266](https://github.com/kubernetes/kubernetes/pull/86266), [@zqingqing1](https://github.com/zqingqing1)) [SIG Cloud Provider] -- Azure global rate limit is switched to per-client. A set of new rate limit configure options are introduced, including routeRateLimit, SubnetsRateLimit, InterfaceRateLimit, RouteTableRateLimit, LoadBalancerRateLimit, PublicIPAddressRateLimit, SecurityGroupRateLimit, VirtualMachineRateLimit, StorageAccountRateLimit, DiskRateLimit, SnapshotRateLimit, VirtualMachineScaleSetRateLimit and VirtualMachineSizeRateLimit. The original rate limit options would be default values for those new client's rate limiter. ([#86515](https://github.com/kubernetes/kubernetes/pull/86515), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Azure network and VM clients now suppress requests on throttling ([#87122](https://github.com/kubernetes/kubernetes/pull/87122), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Azure storage clients now suppress requests on throttling ([#87306](https://github.com/kubernetes/kubernetes/pull/87306), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Azure: add support for single stack IPv6 ([#88448](https://github.com/kubernetes/kubernetes/pull/88448), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] -- DefaultConstraints can be specified for PodTopologySpread Plugin in the scheduler’s ComponentConfig ([#88671](https://github.com/kubernetes/kubernetes/pull/88671), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] -- DisableAvailabilitySetNodes is added to avoid VM list for VMSS clusters. It should only be used when vmType is "vmss" and all the nodes (including control plane nodes) are VMSS virtual machines. ([#87685](https://github.com/kubernetes/kubernetes/pull/87685), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Elasticsearch supports automatically setting the advertise address ([#85944](https://github.com/kubernetes/kubernetes/pull/85944), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle and Instrumentation] -- EndpointSlices will now be enabled by default. A new `EndpointSliceProxying` feature gate determines if kube-proxy will use EndpointSlices, this is disabled by default. ([#86137](https://github.com/kubernetes/kubernetes/pull/86137), [@robscott](https://github.com/robscott)) [SIG Network] -- Kube-proxy: Added dual-stack IPv4/IPv6 support to the iptables proxier. ([#82462](https://github.com/kubernetes/kubernetes/pull/82462), [@vllry](https://github.com/vllry)) [SIG Network] -- Kubeadm now supports automatic calculations of dual-stack node cidr masks to kube-controller-manager. ([#85609](https://github.com/kubernetes/kubernetes/pull/85609), [@Arvinderpal](https://github.com/Arvinderpal)) [SIG Cluster Lifecycle] -- Kubeadm: add a upgrade health check that deploys a Job ([#81319](https://github.com/kubernetes/kubernetes/pull/81319), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: add the experimental feature gate PublicKeysECDSA that can be used to create a - cluster with ECDSA certificates from "kubeadm init". Renewal of existing ECDSA certificates is also supported using "kubeadm alpha certs renew", but not switching between the RSA and ECDSA algorithms on the fly or during upgrades. ([#86953](https://github.com/kubernetes/kubernetes/pull/86953), [@rojkov](https://github.com/rojkov)) [SIG API Machinery, Auth and Cluster Lifecycle] -- Kubeadm: implemented structured output of 'kubeadm config images list' command in JSON, YAML, Go template and JsonPath formats ([#86810](https://github.com/kubernetes/kubernetes/pull/86810), [@bart0sh](https://github.com/bart0sh)) [SIG Cluster Lifecycle] -- Kubeadm: on kubeconfig certificate renewal, keep the embedded CA in sync with the one on disk ([#88052](https://github.com/kubernetes/kubernetes/pull/88052), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: reject a node joining the cluster if a node with the same name already exists ([#81056](https://github.com/kubernetes/kubernetes/pull/81056), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: support Windows specific kubelet flags in kubeadm-flags.env ([#88287](https://github.com/kubernetes/kubernetes/pull/88287), [@gab-satchi](https://github.com/gab-satchi)) [SIG Cluster Lifecycle and Windows] -- Kubeadm: support automatic retry after failing to pull image ([#86899](https://github.com/kubernetes/kubernetes/pull/86899), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- Kubeadm: upgrade supports fallback to the nearest known etcd version if an unknown k8s version is passed ([#88373](https://github.com/kubernetes/kubernetes/pull/88373), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- Kubectl/drain: add disable-eviction option.Force drain to use delete, even if eviction is supported. This will bypass checking PodDisruptionBudgets, and should be used with caution. ([#85571](https://github.com/kubernetes/kubernetes/pull/85571), [@michaelgugino](https://github.com/michaelgugino)) [SIG CLI] -- Kubectl/drain: add skip-wait-for-delete-timeout option. If a pod’s `DeletionTimestamp` is older than N seconds, skip waiting for the pod. Seconds must be greater than 0 to skip. ([#85577](https://github.com/kubernetes/kubernetes/pull/85577), [@michaelgugino](https://github.com/michaelgugino)) [SIG CLI] -- Option `preConfiguredBackendPoolLoadBalancerTypes` is added to azure cloud provider for the pre-configured load balancers, possible values: `""`, `"internal"`, `"external"`,`"all"` ([#86338](https://github.com/kubernetes/kubernetes/pull/86338), [@gossion](https://github.com/gossion)) [SIG Cloud Provider] -- PodTopologySpread plugin now excludes terminatingPods when making scheduling decisions. ([#87845](https://github.com/kubernetes/kubernetes/pull/87845), [@Huang-Wei](https://github.com/Huang-Wei)) [SIG Scheduling] -- Provider/azure: Network security groups can now be in a separate resource group. ([#87035](https://github.com/kubernetes/kubernetes/pull/87035), [@CecileRobertMichon](https://github.com/CecileRobertMichon)) [SIG Cloud Provider] -- SafeSysctlWhitelist: add net.ipv4.ping_group_range ([#85463](https://github.com/kubernetes/kubernetes/pull/85463), [@AkihiroSuda](https://github.com/AkihiroSuda)) [SIG Auth] -- Scheduler framework permit plugins now run at the end of the scheduling cycle, after reserve plugins. Waiting on permit will remain in the beginning of the binding cycle. ([#88199](https://github.com/kubernetes/kubernetes/pull/88199), [@mateuszlitwin](https://github.com/mateuszlitwin)) [SIG Scheduling] -- Scheduler: Add DefaultBinder plugin ([#87430](https://github.com/kubernetes/kubernetes/pull/87430), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling and Testing] -- Skip default spreading scoring plugin for pods that define TopologySpreadConstraints ([#87566](https://github.com/kubernetes/kubernetes/pull/87566), [@skilxn-go](https://github.com/skilxn-go)) [SIG Scheduling] -- The kubectl --dry-run flag now accepts the values 'client', 'server', and 'none', to support client-side and server-side dry-run strategies. The boolean and unset values for the --dry-run flag are deprecated and a value will be required in a future version. ([#87580](https://github.com/kubernetes/kubernetes/pull/87580), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG CLI] -- Support server-side dry-run in kubectl with --dry-run=server for commands including apply, patch, create, run, annotate, label, set, autoscale, drain, rollout undo, and expose. ([#87714](https://github.com/kubernetes/kubernetes/pull/87714), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG API Machinery, CLI and Testing] -- Add --dry-run=server|client to kubectl delete, taint, replace ([#88292](https://github.com/kubernetes/kubernetes/pull/88292), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG CLI and Testing] -- The feature PodTopologySpread (feature gate `EvenPodsSpread`) has been enabled by default in 1.18. ([#88105](https://github.com/kubernetes/kubernetes/pull/88105), [@Huang-Wei](https://github.com/Huang-Wei)) [SIG Scheduling and Testing] -- The kubelet and the default docker runtime now support running ephemeral containers in the Linux process namespace of a target container. Other container runtimes must implement support for this feature before it will be available for that runtime. ([#84731](https://github.com/kubernetes/kubernetes/pull/84731), [@verb](https://github.com/verb)) [SIG Node] -- The underlying format of the `CPUManager` state file has changed. Upgrades should be seamless, but any third-party tools that rely on reading the previous format need to be updated. ([#84462](https://github.com/kubernetes/kubernetes/pull/84462), [@klueska](https://github.com/klueska)) [SIG Node and Testing] -- Update CNI version to v0.8.5 ([#78819](https://github.com/kubernetes/kubernetes/pull/78819), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Cluster Lifecycle, Network, Release and Testing] -- Webhooks have alpha support for network proxy ([#85870](https://github.com/kubernetes/kubernetes/pull/85870), [@Jefftree](https://github.com/Jefftree)) [SIG API Machinery, Auth and Testing] -- When client certificate files are provided, reload files for new connections, and close connections when a certificate changes. ([#79083](https://github.com/kubernetes/kubernetes/pull/79083), [@jackkleeman](https://github.com/jackkleeman)) [SIG API Machinery, Auth, Node and Testing] -- When deleting objects using kubectl with the --force flag, you are no longer required to also specify --grace-period=0. ([#87776](https://github.com/kubernetes/kubernetes/pull/87776), [@brianpursley](https://github.com/brianpursley)) [SIG CLI] -- Windows nodes on GCE can use virtual TPM-based authentication to the control plane. ([#85466](https://github.com/kubernetes/kubernetes/pull/85466), [@pjh](https://github.com/pjh)) [SIG Cluster Lifecycle] -- You can now pass "--node-ip ::" to kubelet to indicate that it should autodetect an IPv6 address to use as the node's primary address. ([#85850](https://github.com/kubernetes/kubernetes/pull/85850), [@danwinship](https://github.com/danwinship)) [SIG Cloud Provider, Network and Node] -- `kubectl` now contains a `kubectl alpha debug` command. This command allows attaching an ephemeral container to a running pod for the purposes of debugging. ([#88004](https://github.com/kubernetes/kubernetes/pull/88004), [@verb](https://github.com/verb)) [SIG CLI] -- TLS Server Name overrides can now be specified in a kubeconfig file and via --tls-server-name in kubectl ([#88769](https://github.com/kubernetes/kubernetes/pull/88769), [@deads2k](https://github.com/deads2k)) [SIG API Machinery, Auth and CLI] - -#### Metrics: -- Add `rest_client_rate_limiter_duration_seconds` metric to component-base to track client side rate limiter latency in seconds. Broken down by verb and URL. ([#88134](https://github.com/kubernetes/kubernetes/pull/88134), [@jennybuckley](https://github.com/jennybuckley)) [SIG API Machinery, Cluster Lifecycle and Instrumentation] -- Added two client certificate metrics for exec auth: - - `rest_client_certificate_expiration_seconds` a gauge reporting the lifetime of the current client certificate. Reports the time of expiry in seconds since January 1, 1970 UTC. - - `rest_client_certificate_rotation_age` a histogram reporting the age of a just rotated client certificate in seconds. ([#84382](https://github.com/kubernetes/kubernetes/pull/84382), [@sambdavidson](https://github.com/sambdavidson)) [SIG API Machinery, Auth, Cluster Lifecycle and Instrumentation] -- Controller manager serve workqueue metrics ([#87967](https://github.com/kubernetes/kubernetes/pull/87967), [@zhan849](https://github.com/zhan849)) [SIG API Machinery] -- Following metrics have been turned off: - - kubelet_pod_worker_latency_microseconds - - kubelet_pod_start_latency_microseconds - - kubelet_cgroup_manager_latency_microseconds - - kubelet_pod_worker_start_latency_microseconds - - kubelet_pleg_relist_latency_microseconds - - kubelet_pleg_relist_interval_microseconds - - kubelet_eviction_stats_age_microseconds - - kubelet_runtime_operations - - kubelet_runtime_operations_latency_microseconds - - kubelet_runtime_operations_errors - - kubelet_device_plugin_registration_count - - kubelet_device_plugin_alloc_latency_microseconds - - kubelet_docker_operations - - kubelet_docker_operations_latency_microseconds - - kubelet_docker_operations_errors - - kubelet_docker_operations_timeout - - network_plugin_operations_latency_microseconds ([#83841](https://github.com/kubernetes/kubernetes/pull/83841), [@RainbowMango](https://github.com/RainbowMango)) [SIG Network and Node] -- Kube-apiserver metrics will now include request counts, latencies, and response sizes for /healthz, /livez, and /readyz requests. ([#83598](https://github.com/kubernetes/kubernetes/pull/83598), [@jktomer](https://github.com/jktomer)) [SIG API Machinery] -- Kubelet now exports a `server_expiration_renew_failure` and `client_expiration_renew_failure` metric counter if the certificate rotations cannot be performed. ([#84614](https://github.com/kubernetes/kubernetes/pull/84614), [@rphillips](https://github.com/rphillips)) [SIG API Machinery, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Node and Release] -- Kubelet: the metric process_start_time_seconds be marked as with the ALPHA stability level. ([#85446](https://github.com/kubernetes/kubernetes/pull/85446), [@RainbowMango](https://github.com/RainbowMango)) [SIG API Machinery, Cluster Lifecycle, Instrumentation and Node] -- New metric `kubelet_pleg_last_seen_seconds` to aid diagnosis of PLEG not healthy issues. ([#86251](https://github.com/kubernetes/kubernetes/pull/86251), [@bboreham](https://github.com/bboreham)) [SIG Node] - -### Other (Bug, Cleanup or Flake) - -- Fixed a regression with clients prior to 1.15 not being able to update podIP in pod status, or podCIDR in node spec, against >= 1.16 API servers ([#88505](https://github.com/kubernetes/kubernetes/pull/88505), [@liggitt](https://github.com/liggitt)) [SIG Apps and Network] -- Fixed "kubectl describe statefulsets.apps" printing garbage for rolling update partition ([#85846](https://github.com/kubernetes/kubernetes/pull/85846), [@phil9909](https://github.com/phil9909)) [SIG CLI] -- Add a event to PV when filesystem on PV does not match actual filesystem on disk ([#86982](https://github.com/kubernetes/kubernetes/pull/86982), [@gnufied](https://github.com/gnufied)) [SIG Storage] -- Add azure disk WriteAccelerator support ([#87945](https://github.com/kubernetes/kubernetes/pull/87945), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Add delays between goroutines for vm instance update ([#88094](https://github.com/kubernetes/kubernetes/pull/88094), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] -- Add init containers log to cluster dump info. ([#88324](https://github.com/kubernetes/kubernetes/pull/88324), [@zhouya0](https://github.com/zhouya0)) [SIG CLI] -- Addons: elasticsearch discovery supports IPv6 ([#85543](https://github.com/kubernetes/kubernetes/pull/85543), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle and Instrumentation] -- Adds "volume.beta.kubernetes.io/migrated-to" annotation to PV's and PVC's when they are migrated to signal external provisioners to pick up those objects for Provisioning and Deleting. ([#87098](https://github.com/kubernetes/kubernetes/pull/87098), [@davidz627](https://github.com/davidz627)) [SIG Storage] -- All api-server log request lines in a more greppable format. ([#87203](https://github.com/kubernetes/kubernetes/pull/87203), [@lavalamp](https://github.com/lavalamp)) [SIG API Machinery] -- Azure VMSS LoadBalancerBackendAddressPools updating has been improved with sequential-sync + concurrent-async requests. ([#88699](https://github.com/kubernetes/kubernetes/pull/88699), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Azure cloud provider now obtains AAD token who audience claim will not have spn: prefix ([#87590](https://github.com/kubernetes/kubernetes/pull/87590), [@weinong](https://github.com/weinong)) [SIG Cloud Provider] -- AzureFile and CephFS use the new Mount library that prevents logging of sensitive mount options. ([#88684](https://github.com/kubernetes/kubernetes/pull/88684), [@saad-ali](https://github.com/saad-ali)) [SIG Storage] -- Bind dns-horizontal containers to linux nodes to avoid Windows scheduling on kubernetes cluster includes linux nodes and windows nodes ([#83364](https://github.com/kubernetes/kubernetes/pull/83364), [@wawa0210](https://github.com/wawa0210)) [SIG Cluster Lifecycle and Windows] -- Bind kube-dns containers to linux nodes to avoid Windows scheduling ([#83358](https://github.com/kubernetes/kubernetes/pull/83358), [@wawa0210](https://github.com/wawa0210)) [SIG Cluster Lifecycle and Windows] -- Bind metadata-agent containers to linux nodes to avoid Windows scheduling on kubernetes cluster includes linux nodes and windows nodes ([#83363](https://github.com/kubernetes/kubernetes/pull/83363), [@wawa0210](https://github.com/wawa0210)) [SIG Cluster Lifecycle, Instrumentation and Windows] -- Bind metrics-server containers to linux nodes to avoid Windows scheduling on kubernetes cluster includes linux nodes and windows nodes ([#83362](https://github.com/kubernetes/kubernetes/pull/83362), [@wawa0210](https://github.com/wawa0210)) [SIG Cluster Lifecycle, Instrumentation and Windows] -- Bug fixes: Make sure we include latest packages node #351 (@caseydavenport) ([#84163](https://github.com/kubernetes/kubernetes/pull/84163), [@david-tigera](https://github.com/david-tigera)) [SIG Cluster Lifecycle] -- CPU limits are now respected for Windows containers. If a node is over-provisioned, no weighting is used, only limits are respected. ([#86101](https://github.com/kubernetes/kubernetes/pull/86101), [@PatrickLang](https://github.com/PatrickLang)) [SIG Node, Testing and Windows] -- Changed core_pattern on COS nodes to be an absolute path. ([#86329](https://github.com/kubernetes/kubernetes/pull/86329), [@mml](https://github.com/mml)) [SIG Cluster Lifecycle and Node] -- Client-go certificate manager rotation gained the ability to preserve optional intermediate chains accompanying issued certificates ([#88744](https://github.com/kubernetes/kubernetes/pull/88744), [@jackkleeman](https://github.com/jackkleeman)) [SIG API Machinery and Auth] -- Cloud provider config CloudProviderBackoffMode has been removed since it won't be used anymore. ([#88463](https://github.com/kubernetes/kubernetes/pull/88463), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Conformance image now depends on stretch-slim instead of debian-hyperkube-base as that image is being deprecated and removed. ([#88702](https://github.com/kubernetes/kubernetes/pull/88702), [@dims](https://github.com/dims)) [SIG Cluster Lifecycle, Release and Testing] -- Deprecate --generator flag from kubectl create commands ([#88655](https://github.com/kubernetes/kubernetes/pull/88655), [@soltysh](https://github.com/soltysh)) [SIG CLI] -- During initialization phase (preflight), kubeadm now verifies the presence of the conntrack executable ([#85857](https://github.com/kubernetes/kubernetes/pull/85857), [@hnanni](https://github.com/hnanni)) [SIG Cluster Lifecycle] -- EndpointSlice should not contain endpoints for terminating pods ([#89056](https://github.com/kubernetes/kubernetes/pull/89056), [@andrewsykim](https://github.com/andrewsykim)) [SIG Apps and Network] -- Evictions due to pods breaching their ephemeral storage limits are now recorded by the `kubelet_evictions` metric and can be alerted on. ([#87906](https://github.com/kubernetes/kubernetes/pull/87906), [@smarterclayton](https://github.com/smarterclayton)) [SIG Node] -- Filter published OpenAPI schema by making nullable, required fields non-required in order to avoid kubectl to wrongly reject null values. ([#85722](https://github.com/kubernetes/kubernetes/pull/85722), [@sttts](https://github.com/sttts)) [SIG API Machinery] -- Fix /readyz to return error immediately after a shutdown is initiated, before the --shutdown-delay-duration has elapsed. ([#88911](https://github.com/kubernetes/kubernetes/pull/88911), [@tkashem](https://github.com/tkashem)) [SIG API Machinery] -- Fix API Server potential memory leak issue in processing watch request. ([#85410](https://github.com/kubernetes/kubernetes/pull/85410), [@answer1991](https://github.com/answer1991)) [SIG API Machinery] -- Fix EndpointSlice controller race condition and ensure that it handles external changes to EndpointSlices. ([#85703](https://github.com/kubernetes/kubernetes/pull/85703), [@robscott](https://github.com/robscott)) [SIG Apps and Network] -- Fix IPv6 addresses lost issue in pure ipv6 vsphere environment ([#86001](https://github.com/kubernetes/kubernetes/pull/86001), [@hubv](https://github.com/hubv)) [SIG Cloud Provider] -- Fix LoadBalancer rule checking so that no unexpected LoadBalancer updates are made ([#85990](https://github.com/kubernetes/kubernetes/pull/85990), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix a bug in kube-proxy that caused it to crash when using load balancers with a different IP family ([#87117](https://github.com/kubernetes/kubernetes/pull/87117), [@aojea](https://github.com/aojea)) [SIG Network] -- Fix a bug in port-forward: named port not working with service ([#85511](https://github.com/kubernetes/kubernetes/pull/85511), [@oke-py](https://github.com/oke-py)) [SIG CLI] -- Fix a bug in the dual-stack IPVS proxier where stale IPv6 endpoints were not being cleaned up ([#87695](https://github.com/kubernetes/kubernetes/pull/87695), [@andrewsykim](https://github.com/andrewsykim)) [SIG Network] -- Fix a bug that orphan revision cannot be adopted and statefulset cannot be synced ([#86801](https://github.com/kubernetes/kubernetes/pull/86801), [@likakuli](https://github.com/likakuli)) [SIG Apps] -- Fix a bug where ExternalTrafficPolicy is not applied to service ExternalIPs. ([#88786](https://github.com/kubernetes/kubernetes/pull/88786), [@freehan](https://github.com/freehan)) [SIG Network] -- Fix a bug where kubenet fails to parse the tc output. ([#83572](https://github.com/kubernetes/kubernetes/pull/83572), [@chendotjs](https://github.com/chendotjs)) [SIG Network] -- Fix a regression in kubenet that prevent pods to obtain ip addresses ([#85993](https://github.com/kubernetes/kubernetes/pull/85993), [@chendotjs](https://github.com/chendotjs)) [SIG Network and Node] -- Fix azure file AuthorizationFailure ([#85475](https://github.com/kubernetes/kubernetes/pull/85475), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fix bug where EndpointSlice controller would attempt to modify shared objects. ([#85368](https://github.com/kubernetes/kubernetes/pull/85368), [@robscott](https://github.com/robscott)) [SIG API Machinery, Apps and Network] -- Fix handling of aws-load-balancer-security-groups annotation. Security-Groups assigned with this annotation are no longer modified by kubernetes which is the expected behaviour of most users. Also no unnecessary Security-Groups are created anymore if this annotation is used. ([#83446](https://github.com/kubernetes/kubernetes/pull/83446), [@Elias481](https://github.com/Elias481)) [SIG Cloud Provider] -- Fix invalid VMSS updates due to incorrect cache ([#89002](https://github.com/kubernetes/kubernetes/pull/89002), [@ArchangelSDY](https://github.com/ArchangelSDY)) [SIG Cloud Provider] -- Fix isCurrentInstance for Windows by removing the dependency of hostname. ([#89138](https://github.com/kubernetes/kubernetes/pull/89138), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix issue #85805 about a resource not found in azure cloud provider when LoadBalancer specified in another resource group. ([#86502](https://github.com/kubernetes/kubernetes/pull/86502), [@levimm](https://github.com/levimm)) [SIG Cloud Provider] -- Fix kubectl annotate error when local=true is set ([#86952](https://github.com/kubernetes/kubernetes/pull/86952), [@zhouya0](https://github.com/zhouya0)) [SIG CLI] -- Fix kubectl create deployment image name ([#86636](https://github.com/kubernetes/kubernetes/pull/86636), [@zhouya0](https://github.com/zhouya0)) [SIG CLI] -- Fix `kubectl drain ignore` daemonsets and others. ([#87361](https://github.com/kubernetes/kubernetes/pull/87361), [@zhouya0](https://github.com/zhouya0)) [SIG CLI] -- Fix missing "apiVersion" for "involvedObject" in Events for Nodes. ([#87537](https://github.com/kubernetes/kubernetes/pull/87537), [@uthark](https://github.com/uthark)) [SIG Apps and Node] -- Fix nil pointer dereference in azure cloud provider ([#85975](https://github.com/kubernetes/kubernetes/pull/85975), [@ldx](https://github.com/ldx)) [SIG Cloud Provider] -- Fix regression in statefulset conversion which prevents applying a statefulset multiple times. ([#87706](https://github.com/kubernetes/kubernetes/pull/87706), [@liggitt](https://github.com/liggitt)) [SIG Apps and Testing] -- Fix route conflicted operations when updating multiple routes together ([#88209](https://github.com/kubernetes/kubernetes/pull/88209), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix that prevents repeated fetching of PVC/PV objects by kubelet when processing of pod volumes fails. While this prevents hammering API server in these error scenarios, it means that some errors in processing volume(s) for a pod could now take up to 2-3 minutes before retry. ([#88141](https://github.com/kubernetes/kubernetes/pull/88141), [@tedyu](https://github.com/tedyu)) [SIG Node and Storage] -- Fix the bug PIP's DNS is deleted if no DNS label service annotation isn't set. ([#87246](https://github.com/kubernetes/kubernetes/pull/87246), [@nilo19](https://github.com/nilo19)) [SIG Cloud Provider] -- Fix control plane hosts rolling upgrade causing thundering herd of LISTs on etcd leading to control plane unavailability. ([#86430](https://github.com/kubernetes/kubernetes/pull/86430), [@wojtek-t](https://github.com/wojtek-t)) [SIG API Machinery, Node and Testing] -- Fix: add azure disk migration support for CSINode ([#88014](https://github.com/kubernetes/kubernetes/pull/88014), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fix: add non-retriable errors in azure clients ([#87941](https://github.com/kubernetes/kubernetes/pull/87941), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fix: add remediation in azure disk attach/detach ([#88444](https://github.com/kubernetes/kubernetes/pull/88444), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fix: azure data disk should use same key as os disk by default ([#86351](https://github.com/kubernetes/kubernetes/pull/86351), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fix: azure disk could not mounted on Standard_DC4s/DC2s instances ([#86612](https://github.com/kubernetes/kubernetes/pull/86612), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fix: azure file mount timeout issue ([#88610](https://github.com/kubernetes/kubernetes/pull/88610), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fix: check disk status before disk azure disk ([#88360](https://github.com/kubernetes/kubernetes/pull/88360), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fix: corrupted mount point in csi driver ([#88569](https://github.com/kubernetes/kubernetes/pull/88569), [@andyzhangx](https://github.com/andyzhangx)) [SIG Storage] -- Fix: get azure disk lun timeout issue ([#88158](https://github.com/kubernetes/kubernetes/pull/88158), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fix: update azure disk max count ([#88201](https://github.com/kubernetes/kubernetes/pull/88201), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fixed "requested device X but found Y" attach error on AWS. ([#85675](https://github.com/kubernetes/kubernetes/pull/85675), [@jsafrane](https://github.com/jsafrane)) [SIG Cloud Provider and Storage] -- Fixed NetworkPolicy validation that `Except` values are accepted when they are outside the CIDR range. ([#86578](https://github.com/kubernetes/kubernetes/pull/86578), [@tnqn](https://github.com/tnqn)) [SIG Network] -- Fixed a bug in the TopologyManager. Previously, the TopologyManager would only guarantee alignment if container creation was serialized in some way. Alignment is now guaranteed under all scenarios of container creation. ([#87759](https://github.com/kubernetes/kubernetes/pull/87759), [@klueska](https://github.com/klueska)) [SIG Node] -- Fixed a bug which could prevent a provider ID from ever being set for node if an error occurred determining the provider ID when the node was added. ([#87043](https://github.com/kubernetes/kubernetes/pull/87043), [@zjs](https://github.com/zjs)) [SIG Apps and Cloud Provider] -- Fixed a data race in the kubelet image manager that can cause static pod workers to silently stop working. ([#88915](https://github.com/kubernetes/kubernetes/pull/88915), [@roycaihw](https://github.com/roycaihw)) [SIG Node] -- Fixed a panic in the kubelet cleaning up pod volumes ([#86277](https://github.com/kubernetes/kubernetes/pull/86277), [@tedyu](https://github.com/tedyu)) [SIG Storage] -- Fixed a regression where the kubelet would fail to update the ready status of pods. ([#84951](https://github.com/kubernetes/kubernetes/pull/84951), [@tedyu](https://github.com/tedyu)) [SIG Node] -- Fixed an issue that could cause the kubelet to incorrectly run concurrent pod reconciliation loops and crash. ([#89055](https://github.com/kubernetes/kubernetes/pull/89055), [@tedyu](https://github.com/tedyu)) [SIG Node] -- Fixed block CSI volume cleanup after timeouts. ([#88660](https://github.com/kubernetes/kubernetes/pull/88660), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] -- Fixed cleaning of CSI raw block volumes. ([#87978](https://github.com/kubernetes/kubernetes/pull/87978), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] -- Fixed AWS Cloud Provider attempting to delete LoadBalancer security group it didn’t provision, and fixed AWS Cloud Provider creating a default LoadBalancer security group even if annotation `service.beta.kubernetes.io/aws-load-balancer-security-groups` is present because the intended behavior of aws-load-balancer-security-groups is to replace all security groups assigned to the load balancer. ([#84265](https://github.com/kubernetes/kubernetes/pull/84265), [@bhagwat070919](https://github.com/bhagwat070919)) [SIG Cloud Provider] -- Fixed two scheduler metrics (pending_pods and schedule_attempts_total) not being recorded ([#87692](https://github.com/kubernetes/kubernetes/pull/87692), [@everpeace](https://github.com/everpeace)) [SIG Scheduling] -- Fixes an issue with kubelet-reported pod status on deleted/recreated pods. ([#86320](https://github.com/kubernetes/kubernetes/pull/86320), [@liggitt](https://github.com/liggitt)) [SIG Node] -- Fixes conversion error in multi-version custom resources that could cause metadata.generation to increment on no-op patches or updates of a custom resource. ([#88995](https://github.com/kubernetes/kubernetes/pull/88995), [@liggitt](https://github.com/liggitt)) [SIG API Machinery] -- Fixes issue where AAD token obtained by kubectl is incompatible with on-behalf-of flow and oidc. The audience claim before this fix has "spn:" prefix. After this fix, "spn:" prefix is omitted. ([#86412](https://github.com/kubernetes/kubernetes/pull/86412), [@weinong](https://github.com/weinong)) [SIG API Machinery, Auth and Cloud Provider] -- Fixes an issue where you can't attach more than 15 GCE Persistent Disks to c2, n2, m1, m2 machine types. ([#88602](https://github.com/kubernetes/kubernetes/pull/88602), [@yuga711](https://github.com/yuga711)) [SIG Storage] -- Fixes kube-proxy when EndpointSlice feature gate is enabled on Windows. ([#86016](https://github.com/kubernetes/kubernetes/pull/86016), [@robscott](https://github.com/robscott)) [SIG Auth and Network] -- Fixes kubelet crash in client certificate rotation cases ([#88079](https://github.com/kubernetes/kubernetes/pull/88079), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, Auth and Node] -- Fixes service account token admission error in clusters that do not run the service account token controller ([#87029](https://github.com/kubernetes/kubernetes/pull/87029), [@liggitt](https://github.com/liggitt)) [SIG Auth] -- Fixes v1.17.0 regression in --service-cluster-ip-range handling with IPv4 ranges larger than 65536 IP addresses ([#86534](https://github.com/kubernetes/kubernetes/pull/86534), [@liggitt](https://github.com/liggitt)) [SIG Network] -- Fixes wrong validation result of NetworkPolicy PolicyTypes ([#85747](https://github.com/kubernetes/kubernetes/pull/85747), [@tnqn](https://github.com/tnqn)) [SIG Network] -- For subprotocol negotiation, both client and server protocol is required now. ([#86646](https://github.com/kubernetes/kubernetes/pull/86646), [@tedyu](https://github.com/tedyu)) [SIG API Machinery and Node] -- For volumes that allow attaches across multiple nodes, attach and detach operations across different nodes are now executed in parallel. ([#88678](https://github.com/kubernetes/kubernetes/pull/88678), [@verult](https://github.com/verult)) [SIG Storage] -- Garbage collector now can correctly orphan ControllerRevisions when StatefulSets are deleted with orphan propagation policy. ([#84984](https://github.com/kubernetes/kubernetes/pull/84984), [@cofyc](https://github.com/cofyc)) [SIG Apps] -- `Get-kube.sh` uses the gcloud's current local GCP service account for auth when the provider is GCE or GKE instead of the metadata server default ([#88383](https://github.com/kubernetes/kubernetes/pull/88383), [@BenTheElder](https://github.com/BenTheElder)) [SIG Cluster Lifecycle] -- Golang/x/net has been updated to bring in fixes for CVE-2020-9283 ([#88381](https://github.com/kubernetes/kubernetes/pull/88381), [@BenTheElder](https://github.com/BenTheElder)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation] -- If a serving certificate’s param specifies a name that is an IP for an SNI certificate, it will have priority for replying to server connections. ([#85308](https://github.com/kubernetes/kubernetes/pull/85308), [@deads2k](https://github.com/deads2k)) [SIG API Machinery] -- Improved yaml parsing performance ([#85458](https://github.com/kubernetes/kubernetes/pull/85458), [@cjcullen](https://github.com/cjcullen)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation and Node] -- Improves performance of the node authorizer ([#87696](https://github.com/kubernetes/kubernetes/pull/87696), [@liggitt](https://github.com/liggitt)) [SIG Auth] -- In GKE alpha clusters it will be possible to use the service annotation `cloud.google.com/network-tier: Standard` ([#88487](https://github.com/kubernetes/kubernetes/pull/88487), [@zioproto](https://github.com/zioproto)) [SIG Cloud Provider] -- Includes FSType when describing CSI persistent volumes. ([#85293](https://github.com/kubernetes/kubernetes/pull/85293), [@huffmanca](https://github.com/huffmanca)) [SIG CLI and Storage] -- Iptables/userspace proxy: improve performance by getting local addresses only once per sync loop, instead of for every external IP ([#85617](https://github.com/kubernetes/kubernetes/pull/85617), [@andrewsykim](https://github.com/andrewsykim)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation and Network] -- Kube-aggregator: always sets unavailableGauge metric to reflect the current state of a service. ([#87778](https://github.com/kubernetes/kubernetes/pull/87778), [@p0lyn0mial](https://github.com/p0lyn0mial)) [SIG API Machinery] -- Kube-apiserver: fixed a conflict error encountered attempting to delete a pod with gracePeriodSeconds=0 and a resourceVersion precondition ([#85516](https://github.com/kubernetes/kubernetes/pull/85516), [@michaelgugino](https://github.com/michaelgugino)) [SIG API Machinery] -- Kube-proxy no longer modifies shared EndpointSlices. ([#86092](https://github.com/kubernetes/kubernetes/pull/86092), [@robscott](https://github.com/robscott)) [SIG Network] -- Kube-proxy: on dual-stack mode, if it is not able to get the IP Family of an endpoint, logs it with level InfoV(4) instead of Warning, avoiding flooding the logs for endpoints without addresses ([#88934](https://github.com/kubernetes/kubernetes/pull/88934), [@aojea](https://github.com/aojea)) [SIG Network] -- Kubeadm allows to configure single-stack clusters if dual-stack is enabled ([#87453](https://github.com/kubernetes/kubernetes/pull/87453), [@aojea](https://github.com/aojea)) [SIG API Machinery, Cluster Lifecycle and Network] -- Kubeadm now includes CoreDNS version 1.6.7 ([#86260](https://github.com/kubernetes/kubernetes/pull/86260), [@rajansandeep](https://github.com/rajansandeep)) [SIG Cluster Lifecycle] -- Kubeadm upgrades always persist the etcd backup for stacked ([#86861](https://github.com/kubernetes/kubernetes/pull/86861), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- Kubeadm: 'kubeadm alpha kubelet config download' has been removed, please use 'kubeadm upgrade node phase kubelet-config' instead ([#87944](https://github.com/kubernetes/kubernetes/pull/87944), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- Kubeadm: Forward cluster name to the controller-manager arguments ([#85817](https://github.com/kubernetes/kubernetes/pull/85817), [@ereslibre](https://github.com/ereslibre)) [SIG Cluster Lifecycle] -- Kubeadm: add support for the "ci/k8s-master" version label as a replacement for "ci-cross/*", which no longer exists. ([#86609](https://github.com/kubernetes/kubernetes/pull/86609), [@Pensu](https://github.com/Pensu)) [SIG Cluster Lifecycle] -- Kubeadm: apply further improvements to the tentative support for concurrent etcd member join. Fixes a bug where multiple members can receive the same hostname. Increase the etcd client dial timeout and retry timeout for add/remove/... operations. ([#87505](https://github.com/kubernetes/kubernetes/pull/87505), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: don't write the kubelet environment file on "upgrade apply" ([#85412](https://github.com/kubernetes/kubernetes/pull/85412), [@boluisa](https://github.com/boluisa)) [SIG Cluster Lifecycle] -- Kubeadm: fix potential panic when executing "kubeadm reset" with a corrupted kubelet.conf file ([#86216](https://github.com/kubernetes/kubernetes/pull/86216), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: fix the bug that 'kubeadm upgrade' hangs in single node cluster ([#88434](https://github.com/kubernetes/kubernetes/pull/88434), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- Kubeadm: make sure images are pre-pulled even if a tag did not change but their contents changed ([#85603](https://github.com/kubernetes/kubernetes/pull/85603), [@bart0sh](https://github.com/bart0sh)) [SIG Cluster Lifecycle] -- Kubeadm: remove 'kubeadm upgrade node config' command since it was deprecated in v1.15, please use 'kubeadm upgrade node phase kubelet-config' instead ([#87975](https://github.com/kubernetes/kubernetes/pull/87975), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- Kubeadm: remove the deprecated CoreDNS feature-gate. It was set to "true" since v1.11 when the feature went GA. In v1.13 it was marked as deprecated and hidden from the CLI. ([#87400](https://github.com/kubernetes/kubernetes/pull/87400), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: retry `kubeadm-config` ConfigMap creation or mutation if the apiserver is not responding. This will improve resiliency when joining new control plane nodes. ([#85763](https://github.com/kubernetes/kubernetes/pull/85763), [@ereslibre](https://github.com/ereslibre)) [SIG Cluster Lifecycle] -- Kubeadm: tolerate whitespace when validating certificate authority PEM data in kubeconfig files ([#86705](https://github.com/kubernetes/kubernetes/pull/86705), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: use bind-address option to configure the kube-controller-manager and kube-scheduler http probes ([#86493](https://github.com/kubernetes/kubernetes/pull/86493), [@aojea](https://github.com/aojea)) [SIG Cluster Lifecycle] -- Kubeadm: uses the api-server AdvertiseAddress IP family to choose the etcd endpoint IP family for non external etcd clusters ([#85745](https://github.com/kubernetes/kubernetes/pull/85745), [@aojea](https://github.com/aojea)) [SIG Cluster Lifecycle] -- Kubectl cluster-info dump --output-directory=xxx now generates files with an extension depending on the output format. ([#82070](https://github.com/kubernetes/kubernetes/pull/82070), [@olivierlemasle](https://github.com/olivierlemasle)) [SIG CLI] -- `Kubectl describe ` and `kubectl top pod` will return a message saying `"No resources found"` or `"No resources found in namespace"` if there are no results to display. ([#87527](https://github.com/kubernetes/kubernetes/pull/87527), [@brianpursley](https://github.com/brianpursley)) [SIG CLI] -- `Kubectl drain node --dry-run` will list pods that would be evicted or deleted ([#82660](https://github.com/kubernetes/kubernetes/pull/82660), [@sallyom](https://github.com/sallyom)) [SIG CLI] -- `Kubectl set resources` will no longer return an error if passed an empty change for a resource. `kubectl set subject` will no longer return an error if passed an empty change for a resource. ([#85490](https://github.com/kubernetes/kubernetes/pull/85490), [@sallyom](https://github.com/sallyom)) [SIG CLI] -- Kubelet metrics gathered through metrics-server or prometheus should no longer timeout for Windows nodes running more than 3 pods. ([#87730](https://github.com/kubernetes/kubernetes/pull/87730), [@marosset](https://github.com/marosset)) [SIG Node, Testing and Windows] -- Kubelet metrics have been changed to buckets. For example the `exec/{podNamespace}/{podID}/{containerName}` is now just exec. ([#87913](https://github.com/kubernetes/kubernetes/pull/87913), [@cheftako](https://github.com/cheftako)) [SIG Node] -- Kubelets perform fewer unnecessary pod status update operations on the API server. ([#88591](https://github.com/kubernetes/kubernetes/pull/88591), [@smarterclayton](https://github.com/smarterclayton)) [SIG Node and Scalability] -- Kubernetes will try to acquire the iptables lock every 100 msec during 5 seconds instead of every second. This is especially useful for environments using kube-proxy in iptables mode with a high churn rate of services. ([#85771](https://github.com/kubernetes/kubernetes/pull/85771), [@aojea](https://github.com/aojea)) [SIG Network] -- Limit number of instances in a single update to GCE target pool to 1000. ([#87881](https://github.com/kubernetes/kubernetes/pull/87881), [@wojtek-t](https://github.com/wojtek-t)) [SIG Cloud Provider, Network and Scalability] -- Make Azure clients only retry on specified HTTP status codes ([#88017](https://github.com/kubernetes/kubernetes/pull/88017), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Make error message and service event message more clear ([#86078](https://github.com/kubernetes/kubernetes/pull/86078), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Minimize AWS NLB health check timeout when externalTrafficPolicy set to Local ([#73363](https://github.com/kubernetes/kubernetes/pull/73363), [@kellycampbell](https://github.com/kellycampbell)) [SIG Cloud Provider] -- Pause image contains "Architecture" in non-amd64 images ([#87954](https://github.com/kubernetes/kubernetes/pull/87954), [@BenTheElder](https://github.com/BenTheElder)) [SIG Release] -- Pause image upgraded to 3.2 in kubelet and kubeadm. ([#88173](https://github.com/kubernetes/kubernetes/pull/88173), [@BenTheElder](https://github.com/BenTheElder)) [SIG CLI, Cluster Lifecycle, Node and Testing] -- Plugin/PluginConfig and Policy APIs are mutually exclusive when running the scheduler ([#88864](https://github.com/kubernetes/kubernetes/pull/88864), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] -- Remove `FilteredNodesStatuses` argument from `PreScore`'s interface. ([#88189](https://github.com/kubernetes/kubernetes/pull/88189), [@skilxn-go](https://github.com/skilxn-go)) [SIG Scheduling and Testing] -- Resolved a performance issue in the node authorizer index maintenance. ([#87693](https://github.com/kubernetes/kubernetes/pull/87693), [@liggitt](https://github.com/liggitt)) [SIG Auth] -- Resolved regression in admission, authentication, and authorization webhook performance in v1.17.0-rc.1 ([#85810](https://github.com/kubernetes/kubernetes/pull/85810), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Testing] -- Resolves performance regression in `kubectl get all` and in client-go discovery clients constructed using `NewDiscoveryClientForConfig` or `NewDiscoveryClientForConfigOrDie`. ([#86168](https://github.com/kubernetes/kubernetes/pull/86168), [@liggitt](https://github.com/liggitt)) [SIG API Machinery] -- Reverted a kubectl azure auth module change where oidc claim spn: prefix was omitted resulting a breaking behavior with existing Azure AD OIDC enabled api-server ([#87507](https://github.com/kubernetes/kubernetes/pull/87507), [@weinong](https://github.com/weinong)) [SIG API Machinery, Auth and Cloud Provider] -- Shared informers are now more reliable in the face of network disruption. ([#86015](https://github.com/kubernetes/kubernetes/pull/86015), [@squeed](https://github.com/squeed)) [SIG API Machinery] -- Specifying PluginConfig for the same plugin more than once fails scheduler startup. - Specifying extenders and configuring .ignoredResources for the NodeResourcesFit plugin fails ([#88870](https://github.com/kubernetes/kubernetes/pull/88870), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] -- Terminating a restartPolicy=Never pod no longer has a chance to report the pod succeeded when it actually failed. ([#88440](https://github.com/kubernetes/kubernetes/pull/88440), [@smarterclayton](https://github.com/smarterclayton)) [SIG Node and Testing] -- The CSR signing cert/key pairs will be reloaded from disk like the kube-apiserver cert/key pairs ([#86816](https://github.com/kubernetes/kubernetes/pull/86816), [@deads2k](https://github.com/deads2k)) [SIG API Machinery, Apps and Auth] -- The EventRecorder from k8s.io/client-go/tools/events will now create events in the default namespace (instead of kube-system) when the related object does not have it set. ([#88815](https://github.com/kubernetes/kubernetes/pull/88815), [@enj](https://github.com/enj)) [SIG API Machinery] -- The audit event sourceIPs list will now always end with the IP that sent the request directly to the API server. ([#87167](https://github.com/kubernetes/kubernetes/pull/87167), [@tallclair](https://github.com/tallclair)) [SIG API Machinery and Auth] -- The sample-apiserver aggregated conformance test has updated to use the Kubernetes v1.17.0 sample apiserver ([#84735](https://github.com/kubernetes/kubernetes/pull/84735), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, Architecture, CLI and Testing] -- To reduce chances of throttling, VM cache is set to nil when Azure node provisioning state is deleting ([#87635](https://github.com/kubernetes/kubernetes/pull/87635), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- VMSS cache is added so that less chances of VMSS GET throttling ([#85885](https://github.com/kubernetes/kubernetes/pull/85885), [@nilo19](https://github.com/nilo19)) [SIG Cloud Provider] -- Wait for kubelet & kube-proxy to be ready on Windows node within 10s ([#85228](https://github.com/kubernetes/kubernetes/pull/85228), [@YangLu1031](https://github.com/YangLu1031)) [SIG Cluster Lifecycle] -- `kubectl apply -f --prune -n ` should prune all resources not defined in the file in the cli specified namespace. ([#85613](https://github.com/kubernetes/kubernetes/pull/85613), [@MartinKaburu](https://github.com/MartinKaburu)) [SIG CLI] -- `kubectl create clusterrolebinding` creates rbac.authorization.k8s.io/v1 object ([#85889](https://github.com/kubernetes/kubernetes/pull/85889), [@oke-py](https://github.com/oke-py)) [SIG CLI] -- `kubectl diff` now returns 1 only on diff finding changes, and >1 on kubectl errors. The "exit status code 1" message has also been muted. ([#87437](https://github.com/kubernetes/kubernetes/pull/87437), [@apelisse](https://github.com/apelisse)) [SIG CLI and Testing] - -## Dependencies - -- Update Calico to v3.8.4 ([#84163](https://github.com/kubernetes/kubernetes/pull/84163), [@david-tigera](https://github.com/david-tigera))[SIG Cluster Lifecycle] -- Update aws-sdk-go dependency to v1.28.2 ([#87253](https://github.com/kubernetes/kubernetes/pull/87253), [@SaranBalaji90](https://github.com/SaranBalaji90))[SIG API Machinery and Cloud Provider] -- Update CNI version to v0.8.5 ([#78819](https://github.com/kubernetes/kubernetes/pull/78819), [@justaugustus](https://github.com/justaugustus))[SIG Release, Testing, Network, Cluster Lifecycle and API Machinery] -- Update cri-tools to v1.17.0 ([#86305](https://github.com/kubernetes/kubernetes/pull/86305), [@saschagrunert](https://github.com/saschagrunert))[SIG Release and Cluster Lifecycle] -- Pause image upgraded to 3.2 in kubelet and kubeadm ([#88173](https://github.com/kubernetes/kubernetes/pull/88173), [@BenTheElder](https://github.com/BenTheElder))[SIG CLI, Node, Testing and Cluster Lifecycle] -- Update CoreDNS version to 1.6.7 in kubeadm ([#86260](https://github.com/kubernetes/kubernetes/pull/86260), [@rajansandeep](https://github.com/rajansandeep))[SIG Cluster Lifecycle] -- Update golang.org/x/crypto to fix CVE-2020-9283 ([#8838](https://github.com/kubernetes/kubernetes/pull/88381), [@BenTheElder](https://github.com/BenTheElder))[SIG CLI, Instrumentation, API Machinery, CLuster Lifecycle and Cloud Provider] -- Update Go to 1.13.8 ([#87648](https://github.com/kubernetes/kubernetes/pull/87648), [@ialidzhikov](https://github.com/ialidzhikov))[SIG Release and Testing] -- Update Cluster-Autoscaler to 1.18.0 ([#89095](https://github.com/kubernetes/kubernetes/pull/89095), [@losipiuk](https://github.com/losipiuk))[SIG Autoscaling and Cluster Lifecycle] - - - -# v1.18.0-rc.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.18.0-rc.1 - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes.tar.gz) | `c17231d5de2e0677e8af8259baa11a388625821c79b86362049f2edb366404d6f4b4587b8f13ccbceeb2f32c6a9fe98607f779c0f3e1caec438f002e3a2c8c21` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-src.tar.gz) | `e84ffad57c301f5d6e90f916b996d5abb0c987928c3ca6b1565f7b042588f839b994ca12c43fc36f0ffb63f9fabc15110eb08be253b8939f49cd951e956da618` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-client-darwin-386.tar.gz) | `1aea99923d492436b3eb91aaecffac94e5d0aa2b38a0930d266fda85c665bbc4569745c409aa302247df3b578ce60324e7a489eb26240e97d4e65a67428ea3d1` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-client-darwin-amd64.tar.gz) | `07fa7340a959740bd52b83ff44438bbd988e235277dad1e43f125f08ac85230a24a3b755f4e4c8645743444fa2b66a3602fc445d7da6d2fc3770e8c21ba24b33` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-client-linux-386.tar.gz) | `48cebd26448fdd47aa36257baa4c716a98fda055bbf6a05230f2a3fe3c1b99b4e483668661415392190f3eebb9cb6e15c784626b48bb2541d93a37902f0e3974` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-client-linux-amd64.tar.gz) | `c3a5fedf263f07a07f59c01fea6c63c1e0b76ee8dc67c45b6c134255c28ed69171ccc2f91b6a45d6a8ec5570a0a7562e24c33b9d7b0d1a864f4dc04b178b3c04` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-client-linux-arm.tar.gz) | `a6b11a55bd38583bbaac14931a6862f8ce6493afe30947ba29e5556654a571593358278df59412bbeb6888fa127e9ae4c0047a9d46cb59394995010796df6b14` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-client-linux-arm64.tar.gz) | `9e15331ac8010154a9b64f5488969fc8ee2f21059639896cb84c5cf4f05f4c9d1d8970cb6f9831de6b34013848227c1972c12a698d07aac1ecc056e972fe6f79` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-client-linux-ppc64le.tar.gz) | `f828fe6252678de9d4822e482f5873309ae9139b2db87298ab3273ce45d38aa07b6b9b42b76c140705f27ba71e101d58b43e59ac7259d7c08dc647ea809e207c` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-client-linux-s390x.tar.gz) | `19da4b45f0666c063934af616f3e7ed3caa99d4ee1e46d53efadc7a8a4d38e43a36ced7249acd7ad3dcc4b4f60d8451b4f7ec7727e478ee2fadd14d353228bce` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-client-windows-386.tar.gz) | `775c9afb6cb3e7c4ba53e9f48a5df2cf207234a33059bd74448bc9f177dd120fb3f9c58ab45048a566326acc43bc8a67e886e10ef99f20780c8f63bb17426ebd` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-client-windows-amd64.tar.gz) | `208d2595a5b57ac97aac75b4a2a6130f0c937f781a030bde1a432daf4bc51f2fa523fca2eb84c38798489c4b536ee90aad22f7be8477985d9691d51ad8e1c4dc` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-server-linux-amd64.tar.gz) | `dcf832eae04f9f52ff473754ef5cfe697b35f4dc1a282622c94fa10943c8c35f4a8777a0c58c7de871c3c428c8973bf72d6bcd8751416d4c682125268b8fcefe` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-server-linux-arm.tar.gz) | `a04e34bea28eb1c8b492e8b1dd3c0dd87ebee71a7dbbef72be10a335e553361af7e48296e504f9844496b04e66350871114d20cfac3f3b49550d8be60f324ba3` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-server-linux-arm64.tar.gz) | `a6af086b07a8c2e498f32b43e6511bf6a5e6baf358c572c6910c8df17cd6cae94f562f459714fcead1595767cb14c7f639c5735f1411173bbd38d5604c082a77` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-server-linux-ppc64le.tar.gz) | `5a960ef5ba0c255f587f2ac0b028cd03136dc91e4efc5d1becab46417852e5524d18572b6f66259531ec6fea997da3c4d162ac153a9439672154375053fec6c7` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-server-linux-s390x.tar.gz) | `0f32c7d9b14bc238b9a5764d8f00edc4d3bf36bcf06b340b81061424e6070768962425194a8c2025c3a7ffb97b1de551d3ad23d1591ae34dd4e3ba25ab364c33` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-node-linux-amd64.tar.gz) | `27d8955d535d14f3f4dca501fd27e4f06fad84c6da878ea5332a5c83b6955667f6f731bfacaf5a3a23c09f14caa400f9bee927a0f269f5374de7f79cd1919b3b` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-node-linux-arm.tar.gz) | `0d56eccad63ba608335988e90b377fe8ae978b177dc836cdb803a5c99d99e8f3399a666d9477ca9cfe5964944993e85c416aec10a99323e3246141efc0b1cc9e` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-node-linux-arm64.tar.gz) | `79bb9be66f9e892d866b28e5cc838245818edb9706981fab6ccbff493181b341c1fcf6fe5d2342120a112eb93af413f5ba191cfba1ab4c4a8b0546a5ad8ec220` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-node-linux-ppc64le.tar.gz) | `3e9e2c6f9a2747d828069511dce8b4034c773c2d122f005f4508e22518055c1e055268d9d86773bbd26fbd2d887d783f408142c6c2f56ab2f2365236fd4d2635` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-node-linux-s390x.tar.gz) | `4f96e018c336fa13bb6df6f7217fe46a2b5c47f806f786499c429604ccba2ebe558503ab2c72f63250aa25b61dae2d166e4b80ae10f6ab37d714f87c1dcf6691` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0-rc.1/kubernetes-node-windows-amd64.tar.gz) | `ab110d76d506746af345e5897ef4f6993d5f53ac818ba69a334f3641047351aa63bfb3582841a9afca51dd0baff8b9010077d9c8ec85d2d69e4172b8d4b338b0` - -## Changelog since v1.18.0-beta.2 - -## Changes by Kind - -### API Change - -- Removes ConfigMap as suggestion for IngressClass parameters ([#89093](https://github.com/kubernetes/kubernetes/pull/89093), [@robscott](https://github.com/robscott)) [SIG Network] - -### Other (Bug, Cleanup or Flake) - -- EndpointSlice should not contain endpoints for terminating pods ([#89056](https://github.com/kubernetes/kubernetes/pull/89056), [@andrewsykim](https://github.com/andrewsykim)) [SIG Apps and Network] -- Fix a bug where ExternalTrafficPolicy is not applied to service ExternalIPs. ([#88786](https://github.com/kubernetes/kubernetes/pull/88786), [@freehan](https://github.com/freehan)) [SIG Network] -- Fix invalid VMSS updates due to incorrect cache ([#89002](https://github.com/kubernetes/kubernetes/pull/89002), [@ArchangelSDY](https://github.com/ArchangelSDY)) [SIG Cloud Provider] -- Fix isCurrentInstance for Windows by removing the dependency of hostname. ([#89138](https://github.com/kubernetes/kubernetes/pull/89138), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fixed a data race in kubelet image manager that can cause static pod workers to silently stop working. ([#88915](https://github.com/kubernetes/kubernetes/pull/88915), [@roycaihw](https://github.com/roycaihw)) [SIG Node] -- Fixed an issue that could cause the kubelet to incorrectly run concurrent pod reconciliation loops and crash. ([#89055](https://github.com/kubernetes/kubernetes/pull/89055), [@tedyu](https://github.com/tedyu)) [SIG Node] -- Kube-proxy: on dual-stack mode, if it is not able to get the IP Family of an endpoint, logs it with level InfoV(4) instead of Warning, avoiding flooding the logs for endpoints without addresses ([#88934](https://github.com/kubernetes/kubernetes/pull/88934), [@aojea](https://github.com/aojea)) [SIG Network] -- Update Cluster Autoscaler to 1.18.0; changelog: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.18.0 ([#89095](https://github.com/kubernetes/kubernetes/pull/89095), [@losipiuk](https://github.com/losipiuk)) [SIG Autoscaling and Cluster Lifecycle] - - -# v1.18.0-beta.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.18.0-beta.2 - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes.tar.gz) | `3017430ca17f8a3523669b4a02c39cedfc6c48b07281bc0a67a9fbe9d76547b76f09529172cc01984765353a6134a43733b7315e0dff370bba2635dd2a6289af` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-src.tar.gz) | `c5fd60601380a99efff4458b1c9cf4dc02195f6f756b36e590e54dff68f7064daf32cf63980dddee13ef9dec7a60ad4eeb47a288083fdbbeeef4bc038384e9ea` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-client-darwin-386.tar.gz) | `7e49ede167b9271d4171e477fa21d267b2fb35f80869337d5b323198dc12f71b61441975bf925ad6e6cd7b61cbf6372d386417dc1e5c9b3c87ae651021c37237` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-client-darwin-amd64.tar.gz) | `3f5cdf0e85eee7d0773e0ae2df1c61329dea90e0da92b02dae1ffd101008dc4bade1c4951fc09f0cad306f0bcb7d16da8654334ddee43d5015913cc4ac8f3eda` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-client-linux-386.tar.gz) | `b67b41c11bfecb88017c33feee21735c56f24cf6f7851b63c752495fc0fb563cd417a67a81f46bca091f74dc00fca1f296e483d2e3dfe2004ea4b42e252d30b9` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-client-linux-amd64.tar.gz) | `1fef2197cb80003e3a5c26f05e889af9d85fbbc23e27747944d2997ace4bfa28f3670b13c08f5e26b7e274176b4e2df89c1162aebd8b9506e63b39b311b2d405` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-client-linux-arm.tar.gz) | `84e5f4d9776490219ee94a84adccd5dfc7c0362eb330709771afcde95ec83f03d96fe7399eec218e47af0a1e6445e24d95e6f9c66c0882ef8233a09ff2022420` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-client-linux-arm64.tar.gz) | `ba613b114e0cca32fa21a3d10f845aa2f215d3af54e775f917ff93919f7dd7075efe254e4047a85a1f4b817fc2bd78006c2e8873885f1208cbc02db99e2e2e25` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-client-linux-ppc64le.tar.gz) | `502a6938d8c4bbe04abbd19b59919d86765058ff72334848be4012cec493e0e7027c6cd950cf501367ac2026eea9f518110cb72d1c792322b396fc2f73d23217` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-client-linux-s390x.tar.gz) | `c24700e0ed2ef5c1d2dd282d638c88d90392ae90ea420837b39fd8e1cfc19525017325ccda71d8472fdaea174762208c09e1bba9bbc77c89deef6fac5e847ba2` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-client-windows-386.tar.gz) | `0d4c5a741b052f790c8b0923c9586ee9906225e51cf4dc8a56fc303d4d61bb5bf77fba9e65151dec7be854ff31da8fc2dcd3214563e1b4b9951e6af4aa643da4` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-client-windows-amd64.tar.gz) | `841ef2e306c0c9593f04d9528ee019bf3b667761227d9afc1d6ca8bf1aa5631dc25f5fe13ff329c4bf0c816b971fd0dec808f879721e0f3bf51ce49772b38010` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-server-linux-amd64.tar.gz) | `b373df2e6ef55215e712315a5508e85a39126bd81b7b93c6b6305238919a88c740077828a6f19bcd97141951048ef7a19806ef6b1c3e1772dbc45715c5fcb3af` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-server-linux-arm.tar.gz) | `b8103cb743c23076ce8dd7c2da01c8dd5a542fbac8480e82dc673139c8ee5ec4495ca33695e7a18dd36412cf1e18ed84c8de05042525ddd8e869fbdfa2766569` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-server-linux-arm64.tar.gz) | `8f8f05cf64fb9c8d80cdcb4935b2d3e3edc48bdd303231ae12f93e3f4d979237490744a11e24ba7f52dbb017ca321a8e31624dcffa391b8afda3d02078767fa0` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-server-linux-ppc64le.tar.gz) | `b313b911c46f2ec129537407af3f165f238e48caeb4b9e530783ffa3659304a544ed02bef8ece715c279373b9fb2c781bd4475560e02c4b98a6d79837bc81938` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-server-linux-s390x.tar.gz) | `a1b6b06571141f507b12e5ef98efb88f4b6b9aba924722b2a74f11278d29a2972ab8290608360151d124608e6e24da0eb3516d484cb5fa12ff2987562f15964a` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-node-linux-amd64.tar.gz) | `20e02ca327543cddb2568ead3d5de164cbfb2914ab6416106d906bf12fcfbc4e55b13bea4d6a515e8feab038e2c929d72c4d6909dfd7881ba69fd1e8c772ab99` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-node-linux-arm.tar.gz) | `ecd817ef05d6284f9c6592b84b0a48ea31cf4487030c9fb36518474b2a33dad11b9c852774682e60e4e8b074e6bea7016584ca281dddbe2994da5eaf909025c0` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-node-linux-arm64.tar.gz) | `0020d32b7908ffd5055c8b26a8b3033e4702f89efcfffe3f6fcdb8a9921fa8eaaed4193c85597c24afd8c523662454f233521bb7055841a54c182521217ccc9d` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-node-linux-ppc64le.tar.gz) | `e065411d66d486e7793449c1b2f5a412510b913bf7f4e728c0a20e275642b7668957050dc266952cdff09acc391369ae6ac5230184db89af6823ba400745f2fc` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-node-linux-s390x.tar.gz) | `082ee90413beaaea41d6cbe9a18f7d783a95852607f3b94190e0ca12aacdd97d87e233b87117871bfb7d0a4b6302fbc7688549492a9bc50a2f43a5452504d3ce` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0-beta.2/kubernetes-node-windows-amd64.tar.gz) | `fb5aca0cc36be703f9d4033eababd581bac5de8399c50594db087a99ed4cb56e4920e960eb81d0132d696d094729254eeda2a5c0cb6e65e3abca6c8d61da579e` - -## Changelog since v1.18.0-beta.1 - -## Urgent Upgrade Notes - -### (No, really, you MUST read this before you upgrade) - -- `kubectl` no longer defaults to `http://localhost:8080`. If you own one of these legacy clusters, you are *strongly- encouraged to secure your server. If you cannot secure your server, you can set `KUBERNETES_MASTER` if you were relying on that behavior and you're a client-go user. Set `--server`, `--kubeconfig` or `KUBECONFIG` to make it work in `kubectl`. ([#86173](https://github.com/kubernetes/kubernetes/pull/86173), [@soltysh](https://github.com/soltysh)) [SIG API Machinery, CLI and Testing] - -## Changes by Kind - -### Deprecation - -- AlgorithmSource is removed from v1alpha2 Scheduler ComponentConfig ([#87999](https://github.com/kubernetes/kubernetes/pull/87999), [@damemi](https://github.com/damemi)) [SIG Scheduling] -- Kube-proxy: deprecate `--healthz-port` and `--metrics-port` flag, please use `--healthz-bind-address` and `--metrics-bind-address` instead ([#88512](https://github.com/kubernetes/kubernetes/pull/88512), [@SataQiu](https://github.com/SataQiu)) [SIG Network] -- Kubeadm: deprecate the usage of the experimental flag '--use-api' under the 'kubeadm alpha certs renew' command. ([#88827](https://github.com/kubernetes/kubernetes/pull/88827), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] - -### API Change - -- A new IngressClass resource has been added to enable better Ingress configuration. ([#88509](https://github.com/kubernetes/kubernetes/pull/88509), [@robscott](https://github.com/robscott)) [SIG API Machinery, Apps, CLI, Network, Node and Testing] -- Added GenericPVCDataSource feature gate to enable using arbitrary custom resources as the data source for a PVC. ([#88636](https://github.com/kubernetes/kubernetes/pull/88636), [@bswartz](https://github.com/bswartz)) [SIG Apps and Storage] -- Allow user to specify fsgroup permission change policy for pods ([#88488](https://github.com/kubernetes/kubernetes/pull/88488), [@gnufied](https://github.com/gnufied)) [SIG Apps and Storage] -- BlockVolume and CSIBlockVolume features are now GA. ([#88673](https://github.com/kubernetes/kubernetes/pull/88673), [@jsafrane](https://github.com/jsafrane)) [SIG Apps, Node and Storage] -- CustomResourceDefinition schemas that use `x-kubernetes-list-map-keys` to specify properties that uniquely identify list items must make those properties required or have a default value, to ensure those properties are present for all list items. See https://kubernetes.io/docs/reference/using-api/api-concepts/#merge-strategy for details. ([#88076](https://github.com/kubernetes/kubernetes/pull/88076), [@eloyekunle](https://github.com/eloyekunle)) [SIG API Machinery and Testing] -- Fixes a regression with clients prior to 1.15 not being able to update podIP in pod status, or podCIDR in node spec, against >= 1.16 API servers ([#88505](https://github.com/kubernetes/kubernetes/pull/88505), [@liggitt](https://github.com/liggitt)) [SIG Apps and Network] -- Ingress: Add Exact and Prefix maching to Ingress PathTypes ([#88587](https://github.com/kubernetes/kubernetes/pull/88587), [@cmluciano](https://github.com/cmluciano)) [SIG Apps, Cluster Lifecycle and Network] -- Ingress: Add alternate backends via TypedLocalObjectReference ([#88775](https://github.com/kubernetes/kubernetes/pull/88775), [@cmluciano](https://github.com/cmluciano)) [SIG Apps and Network] -- Ingress: allow wildcard hosts in IngressRule ([#88858](https://github.com/kubernetes/kubernetes/pull/88858), [@cmluciano](https://github.com/cmluciano)) [SIG Network] -- Kube-controller-manager and kube-scheduler expose profiling by default to match the kube-apiserver. Use `--enable-profiling=false` to disable. ([#88663](https://github.com/kubernetes/kubernetes/pull/88663), [@deads2k](https://github.com/deads2k)) [SIG API Machinery, Cloud Provider and Scheduling] -- Move TaintBasedEvictions feature gates to GA ([#87487](https://github.com/kubernetes/kubernetes/pull/87487), [@skilxn-go](https://github.com/skilxn-go)) [SIG API Machinery, Apps, Node, Scheduling and Testing] -- New flag --endpointslice-updates-batch-period in kube-controller-manager can be used to reduce number of endpointslice updates generated by pod changes. ([#88745](https://github.com/kubernetes/kubernetes/pull/88745), [@mborsz](https://github.com/mborsz)) [SIG API Machinery, Apps and Network] -- Scheduler Extenders can now be configured in the v1alpha2 component config ([#88768](https://github.com/kubernetes/kubernetes/pull/88768), [@damemi](https://github.com/damemi)) [SIG Release, Scheduling and Testing] -- The apiserver/v1alph1#EgressSelectorConfiguration API is now beta. ([#88502](https://github.com/kubernetes/kubernetes/pull/88502), [@caesarxuchao](https://github.com/caesarxuchao)) [SIG API Machinery] -- The storage.k8s.io/CSIDriver has moved to GA, and is now available for use. ([#84814](https://github.com/kubernetes/kubernetes/pull/84814), [@huffmanca](https://github.com/huffmanca)) [SIG API Machinery, Apps, Auth, Node, Scheduling, Storage and Testing] -- VolumePVCDataSource moves to GA in 1.18 release ([#88686](https://github.com/kubernetes/kubernetes/pull/88686), [@j-griffith](https://github.com/j-griffith)) [SIG Apps, CLI and Cluster Lifecycle] - -### Feature - -- Add `rest_client_rate_limiter_duration_seconds` metric to component-base to track client side rate limiter latency in seconds. Broken down by verb and URL. ([#88134](https://github.com/kubernetes/kubernetes/pull/88134), [@jennybuckley](https://github.com/jennybuckley)) [SIG API Machinery, Cluster Lifecycle and Instrumentation] -- Allow user to specify resource using --filename flag when invoking kubectl exec ([#88460](https://github.com/kubernetes/kubernetes/pull/88460), [@soltysh](https://github.com/soltysh)) [SIG CLI and Testing] -- Apiserver add a new flag --goaway-chance which is the fraction of requests that will be closed gracefully(GOAWAY) to prevent HTTP/2 clients from getting stuck on a single apiserver. - After the connection closed(received GOAWAY), the client's other in-flight requests won't be affected, and the client will reconnect. - The flag min value is 0 (off), max is .02 (1/50 requests); .001 (1/1000) is a recommended starting point. - Clusters with single apiservers, or which don't use a load balancer, should NOT enable this. ([#88567](https://github.com/kubernetes/kubernetes/pull/88567), [@answer1991](https://github.com/answer1991)) [SIG API Machinery] -- Azure: add support for single stack IPv6 ([#88448](https://github.com/kubernetes/kubernetes/pull/88448), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] -- DefaultConstraints can be specified for the PodTopologySpread plugin in the component config ([#88671](https://github.com/kubernetes/kubernetes/pull/88671), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] -- Kubeadm: support Windows specific kubelet flags in kubeadm-flags.env ([#88287](https://github.com/kubernetes/kubernetes/pull/88287), [@gab-satchi](https://github.com/gab-satchi)) [SIG Cluster Lifecycle and Windows] -- Kubectl cluster-info dump changed to only display a message telling you the location where the output was written when the output is not standard output. ([#88765](https://github.com/kubernetes/kubernetes/pull/88765), [@brianpursley](https://github.com/brianpursley)) [SIG CLI] -- Print NotReady when pod is not ready based on its conditions. ([#88240](https://github.com/kubernetes/kubernetes/pull/88240), [@soltysh](https://github.com/soltysh)) [SIG CLI] -- Scheduler Extender API is now located under k8s.io/kube-scheduler/extender ([#88540](https://github.com/kubernetes/kubernetes/pull/88540), [@damemi](https://github.com/damemi)) [SIG Release, Scheduling and Testing] -- Signatures on scale client methods have been modified to accept `context.Context` as a first argument. Signatures of Get, Update, and Patch methods have been updated to accept GetOptions, UpdateOptions and PatchOptions respectively. ([#88599](https://github.com/kubernetes/kubernetes/pull/88599), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG API Machinery, Apps, Autoscaling and CLI] -- Signatures on the dynamic client methods have been modified to accept `context.Context` as a first argument. Signatures of Delete and DeleteCollection methods now accept DeleteOptions by value instead of by reference. ([#88906](https://github.com/kubernetes/kubernetes/pull/88906), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, Apps, CLI, Cluster Lifecycle, Storage and Testing] -- Signatures on the metadata client methods have been modified to accept `context.Context` as a first argument. Signatures of Delete and DeleteCollection methods now accept DeleteOptions by value instead of by reference. ([#88910](https://github.com/kubernetes/kubernetes/pull/88910), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, Apps and Testing] -- Webhooks will have alpha support for network proxy ([#85870](https://github.com/kubernetes/kubernetes/pull/85870), [@Jefftree](https://github.com/Jefftree)) [SIG API Machinery, Auth and Testing] -- When client certificate files are provided, reload files for new connections, and close connections when a certificate changes. ([#79083](https://github.com/kubernetes/kubernetes/pull/79083), [@jackkleeman](https://github.com/jackkleeman)) [SIG API Machinery, Auth, Node and Testing] -- When deleting objects using kubectl with the --force flag, you are no longer required to also specify --grace-period=0. ([#87776](https://github.com/kubernetes/kubernetes/pull/87776), [@brianpursley](https://github.com/brianpursley)) [SIG CLI] -- `kubectl` now contains a `kubectl alpha debug` command. This command allows attaching an ephemeral container to a running pod for the purposes of debugging. ([#88004](https://github.com/kubernetes/kubernetes/pull/88004), [@verb](https://github.com/verb)) [SIG CLI] - -### Documentation - -- Update Japanese translation for kubectl help ([#86837](https://github.com/kubernetes/kubernetes/pull/86837), [@inductor](https://github.com/inductor)) [SIG CLI and Docs] -- `kubectl plugin` now prints a note how to install krew ([#88577](https://github.com/kubernetes/kubernetes/pull/88577), [@corneliusweig](https://github.com/corneliusweig)) [SIG CLI] - -### Other (Bug, Cleanup or Flake) - -- Azure VMSS LoadBalancerBackendAddressPools updating has been improved with squential-sync + concurrent-async requests. ([#88699](https://github.com/kubernetes/kubernetes/pull/88699), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- AzureFile and CephFS use new Mount library that prevents logging of sensitive mount options. ([#88684](https://github.com/kubernetes/kubernetes/pull/88684), [@saad-ali](https://github.com/saad-ali)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation and Storage] -- Build: Enable kube-cross image-building on K8s Infra ([#88562](https://github.com/kubernetes/kubernetes/pull/88562), [@justaugustus](https://github.com/justaugustus)) [SIG Release and Testing] -- Client-go certificate manager rotation gained the ability to preserve optional intermediate chains accompanying issued certificates ([#88744](https://github.com/kubernetes/kubernetes/pull/88744), [@jackkleeman](https://github.com/jackkleeman)) [SIG API Machinery and Auth] -- Conformance image now depends on stretch-slim instead of debian-hyperkube-base as that image is being deprecated and removed. ([#88702](https://github.com/kubernetes/kubernetes/pull/88702), [@dims](https://github.com/dims)) [SIG Cluster Lifecycle, Release and Testing] -- Deprecate --generator flag from kubectl create commands ([#88655](https://github.com/kubernetes/kubernetes/pull/88655), [@soltysh](https://github.com/soltysh)) [SIG CLI] -- FIX: prevent apiserver from panicking when failing to load audit webhook config file ([#88879](https://github.com/kubernetes/kubernetes/pull/88879), [@JoshVanL](https://github.com/JoshVanL)) [SIG API Machinery and Auth] -- Fix /readyz to return error immediately after a shutdown is initiated, before the --shutdown-delay-duration has elapsed. ([#88911](https://github.com/kubernetes/kubernetes/pull/88911), [@tkashem](https://github.com/tkashem)) [SIG API Machinery] -- Fix a bug where kubenet fails to parse the tc output. ([#83572](https://github.com/kubernetes/kubernetes/pull/83572), [@chendotjs](https://github.com/chendotjs)) [SIG Network] -- Fix describe ingress annotations not sorted. ([#88394](https://github.com/kubernetes/kubernetes/pull/88394), [@zhouya0](https://github.com/zhouya0)) [SIG CLI] -- Fix handling of aws-load-balancer-security-groups annotation. Security-Groups assigned with this annotation are no longer modified by kubernetes which is the expected behaviour of most users. Also no unnecessary Security-Groups are created anymore if this annotation is used. ([#83446](https://github.com/kubernetes/kubernetes/pull/83446), [@Elias481](https://github.com/Elias481)) [SIG Cloud Provider] -- Fix kubectl create deployment image name ([#86636](https://github.com/kubernetes/kubernetes/pull/86636), [@zhouya0](https://github.com/zhouya0)) [SIG CLI] -- Fix missing "apiVersion" for "involvedObject" in Events for Nodes. ([#87537](https://github.com/kubernetes/kubernetes/pull/87537), [@uthark](https://github.com/uthark)) [SIG Apps and Node] -- Fix that prevents repeated fetching of PVC/PV objects by kubelet when processing of pod volumes fails. While this prevents hammering API server in these error scenarios, it means that some errors in processing volume(s) for a pod could now take up to 2-3 minutes before retry. ([#88141](https://github.com/kubernetes/kubernetes/pull/88141), [@tedyu](https://github.com/tedyu)) [SIG Node and Storage] -- Fix: azure file mount timeout issue ([#88610](https://github.com/kubernetes/kubernetes/pull/88610), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fix: corrupted mount point in csi driver ([#88569](https://github.com/kubernetes/kubernetes/pull/88569), [@andyzhangx](https://github.com/andyzhangx)) [SIG Storage] -- Fixed a bug in the TopologyManager. Previously, the TopologyManager would only guarantee alignment if container creation was serialized in some way. Alignment is now guaranteed under all scenarios of container creation. ([#87759](https://github.com/kubernetes/kubernetes/pull/87759), [@klueska](https://github.com/klueska)) [SIG Node] -- Fixed block CSI volume cleanup after timeouts. ([#88660](https://github.com/kubernetes/kubernetes/pull/88660), [@jsafrane](https://github.com/jsafrane)) [SIG Node and Storage] -- Fixes issue where you can't attach more than 15 GCE Persistent Disks to c2, n2, m1, m2 machine types. ([#88602](https://github.com/kubernetes/kubernetes/pull/88602), [@yuga711](https://github.com/yuga711)) [SIG Storage] -- For volumes that allow attaches across multiple nodes, attach and detach operations across different nodes are now executed in parallel. ([#88678](https://github.com/kubernetes/kubernetes/pull/88678), [@verult](https://github.com/verult)) [SIG Apps, Node and Storage] -- Hide kubectl.kubernetes.io/last-applied-configuration in describe command ([#88758](https://github.com/kubernetes/kubernetes/pull/88758), [@soltysh](https://github.com/soltysh)) [SIG Auth and CLI] -- In GKE alpha clusters it will be possible to use the service annotation `cloud.google.com/network-tier: Standard` ([#88487](https://github.com/kubernetes/kubernetes/pull/88487), [@zioproto](https://github.com/zioproto)) [SIG Cloud Provider] -- Kubelets perform fewer unnecessary pod status update operations on the API server. ([#88591](https://github.com/kubernetes/kubernetes/pull/88591), [@smarterclayton](https://github.com/smarterclayton)) [SIG Node and Scalability] -- Plugin/PluginConfig and Policy APIs are mutually exclusive when running the scheduler ([#88864](https://github.com/kubernetes/kubernetes/pull/88864), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] -- Specifying PluginConfig for the same plugin more than once fails scheduler startup. - - Specifying extenders and configuring .ignoredResources for the NodeResourcesFit plugin fails ([#88870](https://github.com/kubernetes/kubernetes/pull/88870), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] -- Support TLS Server Name overrides in kubeconfig file and via --tls-server-name in kubectl ([#88769](https://github.com/kubernetes/kubernetes/pull/88769), [@deads2k](https://github.com/deads2k)) [SIG API Machinery, Auth and CLI] -- Terminating a restartPolicy=Never pod no longer has a chance to report the pod succeeded when it actually failed. ([#88440](https://github.com/kubernetes/kubernetes/pull/88440), [@smarterclayton](https://github.com/smarterclayton)) [SIG Node and Testing] -- The EventRecorder from k8s.io/client-go/tools/events will now create events in the default namespace (instead of kube-system) when the related object does not have it set. ([#88815](https://github.com/kubernetes/kubernetes/pull/88815), [@enj](https://github.com/enj)) [SIG API Machinery] -- The audit event sourceIPs list will now always end with the IP that sent the request directly to the API server. ([#87167](https://github.com/kubernetes/kubernetes/pull/87167), [@tallclair](https://github.com/tallclair)) [SIG API Machinery and Auth] -- Update to use golang 1.13.8 ([#87648](https://github.com/kubernetes/kubernetes/pull/87648), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG Release and Testing] -- Validate kube-proxy flags --ipvs-tcp-timeout, --ipvs-tcpfin-timeout, --ipvs-udp-timeout ([#88657](https://github.com/kubernetes/kubernetes/pull/88657), [@chendotjs](https://github.com/chendotjs)) [SIG Network] - - -# v1.18.0-beta.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.18.0-beta.1 - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes.tar.gz) | `7c182ca905b3a31871c01ab5fdaf46f074547536c7975e069ff230af0d402dfc0346958b1d084bd2c108582ffc407484e6a15a1cd93e9affbe34b6e99409ef1f` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-src.tar.gz) | `d104b8c792b1517bd730787678c71c8ee3b259de81449192a49a1c6e37a6576d28f69b05c2019cc4a4c40ddeb4d60b80138323df3f85db8682caabf28e67c2de` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-client-darwin-386.tar.gz) | `bc337bb8f200a789be4b97ce99b9d7be78d35ebd64746307c28339dc4628f56d9903e0818c0888aaa9364357a528d1ac6fd34f74377000f292ec502fbea3837e` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-client-darwin-amd64.tar.gz) | `38dfa5e0b0cfff39942c913a6bcb2ad8868ec43457d35cffba08217bb6e7531720e0731f8588505f4c81193ce5ec0e5fe6870031cf1403fbbde193acf7e53540` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-client-linux-386.tar.gz) | `8e63ec7ce29c69241120c037372c6c779e3f16253eabd612c7cbe6aa89326f5160eb5798004d723c5cd72d458811e98dac3574842eb6a57b2798ecd2bbe5bcf9` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-client-linux-amd64.tar.gz) | `c1be9f184a7c3f896a785c41cd6ece9d90d8cb9b1f6088bdfb5557d8856c55e455f6688f5f54c2114396d5ae7adc0361e34ebf8e9c498d0187bd785646ccc1d0` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-client-linux-arm.tar.gz) | `8eab02453cfd9e847632a774a0e0cf3a33c7619fb4ced7f1840e1f71444e8719b1c8e8cbfdd1f20bb909f3abe39cdcac74f14cb9c878c656d35871b7c37c7cbe` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-client-linux-arm64.tar.gz) | `f7df0ec02d2e7e63278d5386e8153cfe2b691b864f17b6452cc824a5f328d688976c975b076e60f1c6b3c859e93e477134fbccc53bb49d9e846fb038b34eee48` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-client-linux-ppc64le.tar.gz) | `36dd5b10addca678a518e6d052c9d6edf473e3f87388a2f03f714c93c5fbfe99ace16cf3b382a531be20a8fe6f4160f8d891800dd2cff5f23c9ca12c2f4a151b` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-client-linux-s390x.tar.gz) | `5bdbb44b996ab4ccf3a383780270f5cfdbf174982c300723c8bddf0a48ae5e459476031c1d51b9d30ffd621d0a126c18a5de132ef1d92fca2f3e477665ea10cc` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-client-windows-386.tar.gz) | `5dea3d4c4e91ef889850143b361974250e99a3c526f5efee23ff9ccdcd2ceca4a2247e7c4f236bdfa77d2150157da5d676ac9c3ba26cf3a2f1e06d8827556f77` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-client-windows-amd64.tar.gz) | `db298e698391368703e6aea7f4345aec5a4b8c69f9d8ff6c99fb5804a6cea16d295fb01e70fe943ade3d4ce9200a081ad40da21bd331317ec9213f69b4d6c48f` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-server-linux-amd64.tar.gz) | `c6284929dd5940e750b48db72ffbc09f73c5ec31ab3db283babb8e4e07cd8cbb27642f592009caae4717981c0db82c16312849ef4cbafe76acc4264c7d5864ac` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-server-linux-arm.tar.gz) | `6fc9552cf082c54cc0833b19876117c87ba7feb5a12c7e57f71b52208daf03eaef3ca56bd22b7bce2d6e81b5a23537cf6f5497a6eaa356c0aab1d3de26c309f9` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-server-linux-arm64.tar.gz) | `b794b9c399e548949b5bfb2fe71123e86c2034847b2c99aca34b6de718a35355bbecdae9dc2a81c49e3c82fb4b5862526a3f63c2862b438895e12c5ea884f22e` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-server-linux-ppc64le.tar.gz) | `fddaed7a54f97046a91c29534645811c6346e973e22950b2607b8c119c2377e9ec2d32144f81626078cdaeca673129cc4016c1a3dbd3d43674aa777089fb56ac` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-server-linux-s390x.tar.gz) | `65951a534bb55069c7419f41cbcdfe2fae31541d8a3f9eca11fc2489addf281c5ad2d13719212657da0be5b898f22b57ac39446d99072872fbacb0a7d59a4f74` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-node-linux-amd64.tar.gz) | `992059efb5cae7ed0ef55820368d854bad1c6d13a70366162cd3b5111ce24c371c7c87ded2012f055e08b2ff1b4ef506e1f4e065daa3ac474fef50b5efa4fb07` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-node-linux-arm.tar.gz) | `c63ae0f8add5821ad267774314b8c8c1ffe3b785872bf278e721fd5dfdad1a5db1d4db3720bea0a36bf10d9c6dd93e247560162c0eac6e1b743246f587d3b27a` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-node-linux-arm64.tar.gz) | `47adb9ddf6eaf8f475b89f59ee16fbd5df183149a11ad1574eaa645b47a6d58aec2ca70ba857ce9f1a5793d44cf7a61ebc6874793bb685edaf19410f4f76fd13` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-node-linux-ppc64le.tar.gz) | `a3bc4a165567c7b76a3e45ab7b102d6eb3ecf373eb048173f921a4964cf9be8891d0d5b8dafbd88c3af7b0e21ef3d41c1e540c3347ddd84b929b3a3d02ceb7b2` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-node-linux-s390x.tar.gz) | `109ddf37c748f69584c829db57107c3518defe005c11fcd2a1471845c15aae0a3c89aafdd734229f4069ed18856cc650c80436684e1bdc43cfee3149b0324746` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0-beta.1/kubernetes-node-windows-amd64.tar.gz) | `a3a75d2696ad3136476ad7d811e8eabaff5111b90e592695e651d6111f819ebf0165b8b7f5adc05afb5f7f01d1e5fb64876cb696e492feb20a477a5800382b7a` - -## Changelog since v1.18.0-beta.0 - -## Urgent Upgrade Notes - -### (No, really, you MUST read this before you upgrade) - -- The StreamingProxyRedirects feature and `--redirect-container-streaming` flag are deprecated, and will be removed in a future release. The default behavior (proxy streaming requests through the kubelet) will be the only supported option. - If you are setting `--redirect-container-streaming=true`, then you must migrate off this configuration. The flag will no longer be able to be enabled starting in v1.20. If you are not setting the flag, no action is necessary. ([#88290](https://github.com/kubernetes/kubernetes/pull/88290), [@tallclair](https://github.com/tallclair)) [SIG API Machinery and Node] - -- Yes. - - Feature Name: Support using network resources (VNet, LB, IP, etc.) in different AAD Tenant and Subscription than those for the cluster. - - Changes in Pull Request: - - 1. Add properties `networkResourceTenantID` and `networkResourceSubscriptionID` in cloud provider auth config section, which indicates the location of network resources. - 2. Add function `GetMultiTenantServicePrincipalToken` to fetch multi-tenant service principal token, which will be used by Azure VM/VMSS Clients in this feature. - 3. Add function `GetNetworkResourceServicePrincipalToken` to fetch network resource service principal token, which will be used by Azure Network Resource (Load Balancer, Public IP, Route Table, Network Security Group and their sub level resources) Clients in this feature. - 4. Related unit tests. - - None. - - User Documentation: In PR https://github.com/kubernetes-sigs/cloud-provider-azure/pull/301 ([#88384](https://github.com/kubernetes/kubernetes/pull/88384), [@bowen5](https://github.com/bowen5)) [SIG Cloud Provider] - -## Changes by Kind - -### Deprecation - -- Azure service annotation service.beta.kubernetes.io/azure-load-balancer-disable-tcp-reset has been deprecated. Its support would be removed in a future release. ([#88462](https://github.com/kubernetes/kubernetes/pull/88462), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] - -### API Change - -- API additions to apiserver types ([#87179](https://github.com/kubernetes/kubernetes/pull/87179), [@Jefftree](https://github.com/Jefftree)) [SIG API Machinery, Cloud Provider and Cluster Lifecycle] -- Add Scheduling Profiles to kubescheduler.config.k8s.io/v1alpha2 ([#88087](https://github.com/kubernetes/kubernetes/pull/88087), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling and Testing] -- Added support for multiple sizes huge pages on a container level ([#84051](https://github.com/kubernetes/kubernetes/pull/84051), [@bart0sh](https://github.com/bart0sh)) [SIG Apps, Node and Storage] -- AppProtocol is a new field on Service and Endpoints resources, enabled with the ServiceAppProtocol feature gate. ([#88503](https://github.com/kubernetes/kubernetes/pull/88503), [@robscott](https://github.com/robscott)) [SIG Apps and Network] -- Fixed missing validation of uniqueness of list items in lists with `x-kubernetes-list-type: map` or x-kubernetes-list-type: set` in CustomResources. ([#84920](https://github.com/kubernetes/kubernetes/pull/84920), [@sttts](https://github.com/sttts)) [SIG API Machinery] -- Introduces optional --detect-local flag to kube-proxy. - Currently the only supported value is "cluster-cidr", - which is the default if not specified. ([#87748](https://github.com/kubernetes/kubernetes/pull/87748), [@satyasm](https://github.com/satyasm)) [SIG Cluster Lifecycle, Network and Scheduling] -- Kube-scheduler can run more than one scheduling profile. Given a pod, the profile is selected by using its `.spec.SchedulerName`. ([#88285](https://github.com/kubernetes/kubernetes/pull/88285), [@alculquicondor](https://github.com/alculquicondor)) [SIG Apps, Scheduling and Testing] -- Moving Windows RunAsUserName feature to GA ([#87790](https://github.com/kubernetes/kubernetes/pull/87790), [@marosset](https://github.com/marosset)) [SIG Apps and Windows] - -### Feature - -- Add --dry-run to kubectl delete, taint, replace ([#88292](https://github.com/kubernetes/kubernetes/pull/88292), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG CLI and Testing] -- Add huge page stats to Allocated resources in "kubectl describe node" ([#80605](https://github.com/kubernetes/kubernetes/pull/80605), [@odinuge](https://github.com/odinuge)) [SIG CLI] -- Kubeadm: The ClusterStatus struct present in the kubeadm-config ConfigMap is deprecated and will be removed on a future version. It is going to be maintained by kubeadm until it gets removed. The same information can be found on `etcd` and `kube-apiserver` pod annotations, `kubeadm.kubernetes.io/etcd.advertise-client-urls` and `kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint` respectively. ([#87656](https://github.com/kubernetes/kubernetes/pull/87656), [@ereslibre](https://github.com/ereslibre)) [SIG Cluster Lifecycle] -- Kubeadm: add the experimental feature gate PublicKeysECDSA that can be used to create a - cluster with ECDSA certificates from "kubeadm init". Renewal of existing ECDSA certificates is - also supported using "kubeadm alpha certs renew", but not switching between the RSA and - ECDSA algorithms on the fly or during upgrades. ([#86953](https://github.com/kubernetes/kubernetes/pull/86953), [@rojkov](https://github.com/rojkov)) [SIG API Machinery, Auth and Cluster Lifecycle] -- Kubeadm: on kubeconfig certificate renewal, keep the embedded CA in sync with the one on disk ([#88052](https://github.com/kubernetes/kubernetes/pull/88052), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Kubeadm: upgrade supports fallback to the nearest known etcd version if an unknown k8s version is passed ([#88373](https://github.com/kubernetes/kubernetes/pull/88373), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- New flag `--show-hidden-metrics-for-version` in kube-scheduler can be used to show all hidden metrics that deprecated in the previous minor release. ([#84913](https://github.com/kubernetes/kubernetes/pull/84913), [@serathius](https://github.com/serathius)) [SIG Instrumentation and Scheduling] -- Scheduler framework permit plugins now run at the end of the scheduling cycle, after reserve plugins. Waiting on permit will remain in the beginning of the binding cycle. ([#88199](https://github.com/kubernetes/kubernetes/pull/88199), [@mateuszlitwin](https://github.com/mateuszlitwin)) [SIG Scheduling] -- The kubelet and the default docker runtime now support running ephemeral containers in the Linux process namespace of a target container. Other container runtimes must implement this feature before it will be available in that runtime. ([#84731](https://github.com/kubernetes/kubernetes/pull/84731), [@verb](https://github.com/verb)) [SIG Node] - -### Other (Bug, Cleanup or Flake) - -- Add delays between goroutines for vm instance update ([#88094](https://github.com/kubernetes/kubernetes/pull/88094), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] -- Add init containers log to cluster dump info. ([#88324](https://github.com/kubernetes/kubernetes/pull/88324), [@zhouya0](https://github.com/zhouya0)) [SIG CLI] -- CPU limits are now respected for Windows containers. If a node is over-provisioned, no weighting is used - only limits are respected. ([#86101](https://github.com/kubernetes/kubernetes/pull/86101), [@PatrickLang](https://github.com/PatrickLang)) [SIG Node, Testing and Windows] -- Cloud provider config CloudProviderBackoffMode has been removed since it won't be used anymore. ([#88463](https://github.com/kubernetes/kubernetes/pull/88463), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Evictions due to pods breaching their ephemeral storage limits are now recorded by the `kubelet_evictions` metric and can be alerted on. ([#87906](https://github.com/kubernetes/kubernetes/pull/87906), [@smarterclayton](https://github.com/smarterclayton)) [SIG Node] -- Fix: add remediation in azure disk attach/detach ([#88444](https://github.com/kubernetes/kubernetes/pull/88444), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fix: check disk status before disk azure disk ([#88360](https://github.com/kubernetes/kubernetes/pull/88360), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fixed cleaning of CSI raw block volumes. ([#87978](https://github.com/kubernetes/kubernetes/pull/87978), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] -- Get-kube.sh uses the gcloud's current local GCP service account for auth when the provider is GCE or GKE instead of the metadata server default ([#88383](https://github.com/kubernetes/kubernetes/pull/88383), [@BenTheElder](https://github.com/BenTheElder)) [SIG Cluster Lifecycle] -- Golang/x/net has been updated to bring in fixes for CVE-2020-9283 ([#88381](https://github.com/kubernetes/kubernetes/pull/88381), [@BenTheElder](https://github.com/BenTheElder)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation] -- Kubeadm now includes CoreDNS version 1.6.7 ([#86260](https://github.com/kubernetes/kubernetes/pull/86260), [@rajansandeep](https://github.com/rajansandeep)) [SIG Cluster Lifecycle] -- Kubeadm: fix the bug that 'kubeadm upgrade' hangs in single node cluster ([#88434](https://github.com/kubernetes/kubernetes/pull/88434), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- Optimize kubectl version help info ([#88313](https://github.com/kubernetes/kubernetes/pull/88313), [@zhouya0](https://github.com/zhouya0)) [SIG CLI] -- Removes the deprecated command `kubectl rolling-update` ([#88057](https://github.com/kubernetes/kubernetes/pull/88057), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG Architecture, CLI and Testing] - - -# v1.18.0-alpha.5 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.18.0-alpha.5 - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes.tar.gz) | `6452cac2b80721e9f577cb117c29b9ac6858812b4275c2becbf74312566f7d016e8b34019bd1bf7615131b191613bf9b973e40ad9ac8f6de9007d41ef2d7fd70` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-src.tar.gz) | `e41d9d4dd6910a42990051fcdca4bf5d3999df46375abd27ffc56aae9b455ae984872302d590da6aa85bba6079334fb5fe511596b415ee79843dee1c61c137da` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-client-darwin-386.tar.gz) | `5c95935863492b31d4aaa6be93260088dafea27663eb91edca980ca3a8485310e60441bc9050d4d577e9c3f7ffd96db516db8d64321124cec1b712e957c9fe1c` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-client-darwin-amd64.tar.gz) | `868faa578b3738604d8be62fae599ccc556799f1ce54807f1fe72599f20f8a1f98ad8152fac14a08a463322530b696d375253ba3653325e74b587df6e0510da3` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-client-linux-386.tar.gz) | `76a89d1d30b476b47f8fb808e342f89608e5c1c1787c4c06f2d7e763f9482e2ae8b31e6ad26541972e2b9a3a7c28327e3150cdd355e8b8d8b050a801bbf08d49` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-client-linux-amd64.tar.gz) | `07ad96a09b44d1c707d7c68312c5d69b101a3424bf1e6e9400b2e7a3fba78df04302985d473ddd640d8f3f0257be34110dbe1304b9565dd9d7a4639b7b7b85fd` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-client-linux-arm.tar.gz) | `c04fed9fa370a75c1b8e18b2be0821943bb9befcc784d14762ea3278e73600332a9b324d5eeaa1801d20ad6be07a553c41dcf4fa7ab3eadd0730ab043d687c8c` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-client-linux-arm64.tar.gz) | `4199147dea9954333df26d34248a1cb7b02ebbd6380ffcd42d9f9ed5fdabae45a59215474dab3c11436c82e60bd27cbd03b3dde288bf611cd3e78b87c783c6a9` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-client-linux-ppc64le.tar.gz) | `4f6d4d61d1c52d3253ca19031ebcd4bad06d19b68bbaaab5c8e8c590774faea4a5ceab1f05f2706b61780927e1467815b3479342c84d45df965aba78414727c4` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-client-linux-s390x.tar.gz) | `e2a454151ae5dd891230fb516a3f73f73ab97832db66fd3d12e7f1657a569f58a9fe2654d50ddd7d8ec88a5ff5094199323a4c6d7d44dcf7edb06cca11dd4de1` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-client-windows-386.tar.gz) | `14b262ba3b71c41f545db2a017cf1746075ada5745a858d2a62bc9df7c5dc10607220375db85e2c4cb85307b09709e58bc66a407488e0961191e3249dc7742b0` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-client-windows-amd64.tar.gz) | `26353c294755a917216664364b524982b7f5fc6aa832ce90134bb178df8a78604963c68873f121ea5f2626ff615bdbf2ffe54e00578739cde6df42ffae034732` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-server-linux-amd64.tar.gz) | `ba77e0e7c610f59647c1b2601f82752964a0f54b7ad609a89b00fcfd553d0f0249f6662becbabaa755bb769b36a2000779f08022c40fb8cc61440337481317a1` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-server-linux-arm.tar.gz) | `45e87b3e844ea26958b0b489e8c9b90900a3253000850f5ff9e87ffdcafba72ab8fd17b5ba092051a58a4bc277912c047a85940ec7f093dff6f9e8bf6fed3b42` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-server-linux-arm64.tar.gz) | `155e136e3124ead69c594eead3398d6cfdbb8f823c324880e8a7bbd1b570b05d13a77a69abd0a6758cfcc7923971cc6da4d3e0c1680fd519b632803ece00d5ce` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-server-linux-ppc64le.tar.gz) | `3fa0fb8221da19ad9d03278961172b7fa29a618b30abfa55e7243bb937dede8df56658acf02e6b61e7274fbc9395e237f49c62f2a83017eca2a69f67af31c01c` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-server-linux-s390x.tar.gz) | `db3199c3d7ba0b326d71dc8b80f50b195e79e662f71386a3b2976d47d13d7b0136887cc21df6f53e70a3d733da6eac7bbbf3bab2df8a1909a3cee4b44c32dd0b` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-node-linux-amd64.tar.gz) | `addcdfbad7f12647e6babb8eadf853a374605c8f18bf63f416fa4d3bf1b903aa206679d840433206423a984bb925e7983366edcdf777cf5daef6ef88e53d6dfa` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-node-linux-arm.tar.gz) | `b2ac54e0396e153523d116a2aaa32c919d6243931e0104cd47a23f546d710e7abdaa9eae92d978ce63c92041e63a9b56f5dd8fd06c812a7018a10ecac440f768` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-node-linux-arm64.tar.gz) | `7aab36f2735cba805e4fd109831a1af0f586a88db3f07581b6dc2a2aab90076b22c96b490b4f6461a8fb690bf78948b6d514274f0d6fb0664081de2d44dc48e1` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-node-linux-ppc64le.tar.gz) | `a579936f07ebf86f69f297ac50ba4c34caf2c0b903f73190eb581c78382b05ef36d41ade5bfd25d7b1b658cfcbee3d7125702a18e7480f9b09a62733a512a18a` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-node-linux-s390x.tar.gz) | `58fa0359ddd48835192fab1136a2b9b45d1927b04411502c269cda07cb8a8106536973fb4c7fedf1d41893a524c9fe2e21078fdf27bfbeed778273d024f14449` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.5/kubernetes-node-windows-amd64.tar.gz) | `9086c03cd92b440686cea6d8c4e48045cc46a43ab92ae0e70350b3f51804b9e2aaae7178142306768bae00d9ef6dd938167972bfa90b12223540093f735a45db` - -## Changelog since v1.18.0-alpha.3 - -### Deprecation - -- Kubeadm: command line option "kubelet-version" for `kubeadm upgrade node` has been deprecated and will be removed in a future release. ([#87942](https://github.com/kubernetes/kubernetes/pull/87942), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] - -### API Change - -- Kubelet podresources API now provides the information about active pods only. ([#79409](https://github.com/kubernetes/kubernetes/pull/79409), [@takmatsu](https://github.com/takmatsu)) [SIG Node] -- Remove deprecated fields from .leaderElection in kubescheduler.config.k8s.io/v1alpha2 ([#87904](https://github.com/kubernetes/kubernetes/pull/87904), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] -- Signatures on generated clientset methods have been modified to accept `context.Context` as a first argument. Signatures of generated Create, Update, and Patch methods have been updated to accept CreateOptions, UpdateOptions and PatchOptions respectively. Clientsets that with the previous interface have been added in new "deprecated" packages to allow incremental migration to the new APIs. The deprecated packages will be removed in the 1.21 release. ([#87299](https://github.com/kubernetes/kubernetes/pull/87299), [@mikedanese](https://github.com/mikedanese)) [SIG API Machinery, Apps, Auth, Autoscaling, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Scheduling, Storage, Testing and Windows] -- The k8s.io/node-api component is no longer updated. Instead, use the RuntimeClass types located within k8s.io/api, and the generated clients located within k8s.io/client-go ([#87503](https://github.com/kubernetes/kubernetes/pull/87503), [@liggitt](https://github.com/liggitt)) [SIG Node and Release] - -### Feature - -- Add indexer for storage cacher ([#85445](https://github.com/kubernetes/kubernetes/pull/85445), [@shaloulcy](https://github.com/shaloulcy)) [SIG API Machinery] -- Add support for mount options to the FC volume plugin ([#87499](https://github.com/kubernetes/kubernetes/pull/87499), [@ejweber](https://github.com/ejweber)) [SIG Storage] -- Added a config-mode flag in azure auth module to enable getting AAD token without spn: prefix in audience claim. When it's not specified, the default behavior doesn't change. ([#87630](https://github.com/kubernetes/kubernetes/pull/87630), [@weinong](https://github.com/weinong)) [SIG API Machinery, Auth, CLI and Cloud Provider] -- Introduced BackoffManager interface for backoff management ([#87829](https://github.com/kubernetes/kubernetes/pull/87829), [@zhan849](https://github.com/zhan849)) [SIG API Machinery] -- PodTopologySpread plugin now excludes terminatingPods when making scheduling decisions. ([#87845](https://github.com/kubernetes/kubernetes/pull/87845), [@Huang-Wei](https://github.com/Huang-Wei)) [SIG Scheduling] -- Promote CSIMigrationOpenStack to Beta (off by default since it requires installation of the OpenStack Cinder CSI Driver) - The in-tree AWS OpenStack Cinder "kubernetes.io/cinder" was already deprecated a while ago and will be removed in 1.20. Users should enable CSIMigration + CSIMigrationOpenStack features and install the OpenStack Cinder CSI Driver (https://github.com/kubernetes-sigs/cloud-provider-openstack) to avoid disruption to existing Pod and PVC objects at that time. - Users should start using the OpenStack Cinder CSI Driver directly for any new volumes. ([#85637](https://github.com/kubernetes/kubernetes/pull/85637), [@dims](https://github.com/dims)) [SIG Cloud Provider] - -### Design - -- The scheduler Permit extension point doesn't return a boolean value in its Allow() and Reject() functions. ([#87936](https://github.com/kubernetes/kubernetes/pull/87936), [@Huang-Wei](https://github.com/Huang-Wei)) [SIG Scheduling] - -### Other (Bug, Cleanup or Flake) - -- Adds "volume.beta.kubernetes.io/migrated-to" annotation to PV's and PVC's when they are migrated to signal external provisioners to pick up those objects for Provisioning and Deleting. ([#87098](https://github.com/kubernetes/kubernetes/pull/87098), [@davidz627](https://github.com/davidz627)) [SIG Apps and Storage] -- Fix a bug in the dual-stack IPVS proxier where stale IPv6 endpoints were not being cleaned up ([#87695](https://github.com/kubernetes/kubernetes/pull/87695), [@andrewsykim](https://github.com/andrewsykim)) [SIG Network] -- Fix kubectl drain ignore daemonsets and others. ([#87361](https://github.com/kubernetes/kubernetes/pull/87361), [@zhouya0](https://github.com/zhouya0)) [SIG CLI] -- Fix: add azure disk migration support for CSINode ([#88014](https://github.com/kubernetes/kubernetes/pull/88014), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] -- Fix: add non-retriable errors in azure clients ([#87941](https://github.com/kubernetes/kubernetes/pull/87941), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] -- Fixed NetworkPolicy validation that Except values are accepted when they are outside the CIDR range. ([#86578](https://github.com/kubernetes/kubernetes/pull/86578), [@tnqn](https://github.com/tnqn)) [SIG Network] -- Improves performance of the node authorizer ([#87696](https://github.com/kubernetes/kubernetes/pull/87696), [@liggitt](https://github.com/liggitt)) [SIG Auth] -- Iptables/userspace proxy: improve performance by getting local addresses only once per sync loop, instead of for every external IP ([#85617](https://github.com/kubernetes/kubernetes/pull/85617), [@andrewsykim](https://github.com/andrewsykim)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation and Network] -- Kube-aggregator: always sets unavailableGauge metric to reflect the current state of a service. ([#87778](https://github.com/kubernetes/kubernetes/pull/87778), [@p0lyn0mial](https://github.com/p0lyn0mial)) [SIG API Machinery] -- Kubeadm allows to configure single-stack clusters if dual-stack is enabled ([#87453](https://github.com/kubernetes/kubernetes/pull/87453), [@aojea](https://github.com/aojea)) [SIG API Machinery, Cluster Lifecycle and Network] -- Kubeadm: 'kubeadm alpha kubelet config download' has been removed, please use 'kubeadm upgrade node phase kubelet-config' instead ([#87944](https://github.com/kubernetes/kubernetes/pull/87944), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- Kubeadm: remove 'kubeadm upgrade node config' command since it was deprecated in v1.15, please use 'kubeadm upgrade node phase kubelet-config' instead ([#87975](https://github.com/kubernetes/kubernetes/pull/87975), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] -- Kubectl describe and kubectl top pod will return a message saying "No resources found" or "No resources found in namespace" if there are no results to display. ([#87527](https://github.com/kubernetes/kubernetes/pull/87527), [@brianpursley](https://github.com/brianpursley)) [SIG CLI] -- Kubelet metrics gathered through metrics-server or prometheus should no longer timeout for Windows nodes running more than 3 pods. ([#87730](https://github.com/kubernetes/kubernetes/pull/87730), [@marosset](https://github.com/marosset)) [SIG Node, Testing and Windows] -- Kubelet metrics have been changed to buckets. - For example the exec/{podNamespace}/{podID}/{containerName} is now just exec. ([#87913](https://github.com/kubernetes/kubernetes/pull/87913), [@cheftako](https://github.com/cheftako)) [SIG Node] -- Limit number of instances in a single update to GCE target pool to 1000. ([#87881](https://github.com/kubernetes/kubernetes/pull/87881), [@wojtek-t](https://github.com/wojtek-t)) [SIG Cloud Provider, Network and Scalability] -- Make Azure clients only retry on specified HTTP status codes ([#88017](https://github.com/kubernetes/kubernetes/pull/88017), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Pause image contains "Architecture" in non-amd64 images ([#87954](https://github.com/kubernetes/kubernetes/pull/87954), [@BenTheElder](https://github.com/BenTheElder)) [SIG Release] -- Pods that are considered for preemption and haven't started don't produce an error log. ([#87900](https://github.com/kubernetes/kubernetes/pull/87900), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] -- Prevent error message from being displayed when running kubectl plugin list and your path includes an empty string ([#87633](https://github.com/kubernetes/kubernetes/pull/87633), [@brianpursley](https://github.com/brianpursley)) [SIG CLI] -- `kubectl create clusterrolebinding` creates rbac.authorization.k8s.io/v1 object ([#85889](https://github.com/kubernetes/kubernetes/pull/85889), [@oke-py](https://github.com/oke-py)) [SIG CLI] - -# v1.18.0-alpha.4 - -[Documentation](https://docs.k8s.io) - -## Important note about manual tag - -Due to a [tagging bug in our Release Engineering tooling](https://github.com/kubernetes/release/issues/1080) during `v1.18.0-alpha.3`, we needed to push a manual tag (`v1.18.0-alpha.4`). - -**No binaries have been produced or will be provided for `v1.18.0-alpha.4`.** - -The changelog for `v1.18.0-alpha.4` is included as part of the [changelog since v1.18.0-alpha.3][#changelog-since-v1180-alpha3] section. - -# v1.18.0-alpha.3 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.18.0-alpha.3 - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes.tar.gz) | `60bf3bfc23b428f53fd853bac18a4a905b980fcc0bacd35ccd6357a89cfc26e47de60975ea6b712e65980e6b9df82a22331152d9f08ed4dba44558ba23a422d4` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-src.tar.gz) | `8adf1016565a7c93713ab6fa4293c2d13b4f6e4e1ec4dcba60bd71e218b4dbe9ef5eb7dbb469006743f498fc7ddeb21865cd12bec041af60b1c0edce8b7aecd5` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-client-darwin-386.tar.gz) | `abb32e894e8280c772e96227b574da81cd1eac374b8d29158b7f222ed550087c65482eef4a9817dfb5f2baf0d9b85fcdfa8feced0fbc1aacced7296853b57e1f` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-client-darwin-amd64.tar.gz) | `5e4b1a993264e256ec1656305de7c306094cae9781af8f1382df4ce4eed48ce030827fde1a5e757d4ad57233d52075c9e4e93a69efbdc1102e4ba810705ccddc` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-client-linux-386.tar.gz) | `68da39c2ae101d2b38f6137ceda07eb0c2124794982a62ef483245dbffb0611c1441ca085fa3127e7a9977f45646788832a783544ff06954114548ea0e526e46` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-client-linux-amd64.tar.gz) | `dc236ffa8ad426620e50181419e9bebe3c161e953dbfb8a019f61b11286e1eb950b40d7cc03423bdf3e6974973bcded51300f98b55570c29732fa492dcde761d` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-client-linux-arm.tar.gz) | `ab0a8bd6dc31ea160b731593cdc490b3cc03668b1141cf95310bd7060dcaf55c7ee9842e0acae81063fdacb043c3552ccdd12a94afd71d5310b3ce056fdaa06c` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-client-linux-arm64.tar.gz) | `159ea083c601710d0d6aea423eeb346c99ffaf2abd137d35a53e87a07f5caf12fca8790925f3196f67b768fa92a024f83b50325dbca9ccd4dde6c59acdce3509` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-client-linux-ppc64le.tar.gz) | `16b0459adfa26575d13be49ab53ac7f0ffd05e184e4e13d2dfbfe725d46bb8ac891e1fd8aebe36ecd419781d4cc5cf3bd2aaaf5263cf283724618c4012408f40` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-client-linux-s390x.tar.gz) | `d5aa1f5d89168995d2797eb839a04ce32560f405b38c1c0baaa0e313e4771ae7bb3b28e22433ad5897d36aadf95f73eb69d8d411d31c4115b6b0adf5fe041f85` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-client-windows-386.tar.gz) | `374e16a1e52009be88c94786f80174d82dff66399bf294c9bee18a2159c42251c5debef1109a92570799148b08024960c6c50b8299a93fd66ebef94f198f34e9` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-client-windows-amd64.tar.gz) | `5a94c1068c19271f810b994adad8e62fae03b3d4473c7c9e6d056995ff7757ea61dd8d140c9267dd41e48808876673ce117826d35a3c1bb5652752f11a044d57` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-server-linux-amd64.tar.gz) | `a677bec81f0eba75114b92ff955bac74512b47e53959d56a685dae5edd527283d91485b1e86ad74ef389c5405863badf7eb22e2f0c9a568a4d0cb495c6a5c32f` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-server-linux-arm.tar.gz) | `2fb696f86ff13ebeb5f3cf2b254bf41303644c5ea84a292782eac6123550702655284d957676d382698c091358e5c7fe73f32803699c19be7138d6530fe413b6` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-server-linux-arm64.tar.gz) | `738e95da9cfb8f1309479078098de1c38cef5e1dd5ee1129b77651a936a412b7cd0cf15e652afc7421219646a98846ab31694970432e48dea9c9cafa03aa59cf` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-server-linux-ppc64le.tar.gz) | `7a85bfcbb2aa636df60c41879e96e788742ecd72040cb0db2a93418439c125218c58a4cfa96d01b0296c295793e94c544e87c2d98d50b49bc4cb06b41f874376` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-server-linux-s390x.tar.gz) | `1f1cdb2efa3e7cac857203d8845df2fdaa5cf1f20df764efffff29371945ec58f6deeba06f8fbf70b96faf81b0c955bf4cb84e30f9516cb2cc1ed27c2d2185a6` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-node-linux-amd64.tar.gz) | `4ccfced3f5ba4adfa58f4a9d1b2c5bdb3e89f9203ab0e27d11eb1c325ac323ebe63c015d2c9d070b233f5d1da76cab5349da3528511c1cd243e66edc9af381c4` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-node-linux-arm.tar.gz) | `d695a69d18449062e4c129e54ec8384c573955f8108f4b78adc2ec929719f2196b995469c728dd6656c63c44cda24315543939f85131ebc773cfe0de689df55b` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-node-linux-arm64.tar.gz) | `21df1da88c89000abc22f97e482c3aaa5ce53ec9628d83dda2e04a1d86c4d53be46c03ed6f1f211df3ee5071bce39d944ff7716b5b6ada3b9c4821d368b0a898` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-node-linux-ppc64le.tar.gz) | `ff77e3aacb6ed9d89baed92ef542c8b5cec83151b6421948583cf608bca3b779dce41fc6852961e00225d5e1502f6a634bfa61a36efa90e1aee90dedb787c2d2` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-node-linux-s390x.tar.gz) | `57d75b7977ec1a0f6e7ed96a304dbb3b8664910f42ca19aab319a9ec33535ff5901dfca4abcb33bf5741cde6d152acd89a5f8178f0efe1dc24430e0c1af5b98f` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.3/kubernetes-node-windows-amd64.tar.gz) | `63fdbb71773cfd73a914c498e69bb9eea3fc314366c99ffb8bd42ec5b4dae807682c83c1eb5cfb1e2feb4d11d9e49cc85ba644e954241320a835798be7653d61` - -## Changelog since v1.18.0-alpha.2 - -### Deprecation - -- Remove all the generators from kubectl run. It will now only create pods. Additionally, deprecates all the flags that are not relevant anymore. ([#87077](https://github.com/kubernetes/kubernetes/pull/87077), [@soltysh](https://github.com/soltysh)) [SIG Architecture, SIG CLI, and SIG Testing] -- kubeadm: kube-dns is deprecated and will not be supported in a future version ([#86574](https://github.com/kubernetes/kubernetes/pull/86574), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] - -### API Change - -- Add kubescheduler.config.k8s.io/v1alpha2 ([#87628](https://github.com/kubernetes/kubernetes/pull/87628), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] -- --enable-cadvisor-endpoints is now disabled by default. If you need access to the cAdvisor v1 Json API please enable it explicitly in the kubelet command line. Please note that this flag was deprecated in 1.15 and will be removed in 1.19. ([#87440](https://github.com/kubernetes/kubernetes/pull/87440), [@dims](https://github.com/dims)) [SIG Instrumentation, SIG Node, and SIG Testing] -- The following feature gates are removed, because the associated features were unconditionally enabled in previous releases: CustomResourceValidation, CustomResourceSubresources, CustomResourceWebhookConversion, CustomResourcePublishOpenAPI, CustomResourceDefaulting ([#87475](https://github.com/kubernetes/kubernetes/pull/87475), [@liggitt](https://github.com/liggitt)) [SIG API Machinery] - -### Feature - -- The aggregation API will have alpha support for network proxy ([#87515](https://github.com/kubernetes/kubernetes/pull/87515), [@Sh4d1](https://github.com/Sh4d1)) [SIG API Machinery] -- API request throttling (due to a high rate of requests) is now reported in client-go logs at log level 2. The messages are of the form - - Throttling request took 1.50705208s, request: GET: - - The presence of these messages, may indicate to the administrator the need to tune the cluster accordingly. ([#87740](https://github.com/kubernetes/kubernetes/pull/87740), [@jennybuckley](https://github.com/jennybuckley)) [SIG API Machinery] -- kubeadm: reject a node joining the cluster if a node with the same name already exists ([#81056](https://github.com/kubernetes/kubernetes/pull/81056), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- disableAvailabilitySetNodes is added to avoid VM list for VMSS clusters. It should only be used when vmType is "vmss" and all the nodes (including masters) are VMSS virtual machines. ([#87685](https://github.com/kubernetes/kubernetes/pull/87685), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- The kubectl --dry-run flag now accepts the values 'client', 'server', and 'none', to support client-side and server-side dry-run strategies. The boolean and unset values for the --dry-run flag are deprecated and a value will be required in a future version. ([#87580](https://github.com/kubernetes/kubernetes/pull/87580), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG CLI] -- Add support for pre-allocated hugepages for more than one page size ([#82820](https://github.com/kubernetes/kubernetes/pull/82820), [@odinuge](https://github.com/odinuge)) [SIG Apps] -- Update CNI version to v0.8.5 ([#78819](https://github.com/kubernetes/kubernetes/pull/78819), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, SIG Cluster Lifecycle, SIG Network, SIG Release, and SIG Testing] -- Skip default spreading scoring plugin for pods that define TopologySpreadConstraints ([#87566](https://github.com/kubernetes/kubernetes/pull/87566), [@skilxn-go](https://github.com/skilxn-go)) [SIG Scheduling] -- Added more details to taint toleration errors ([#87250](https://github.com/kubernetes/kubernetes/pull/87250), [@starizard](https://github.com/starizard)) [SIG Apps, and SIG Scheduling] -- Scheduler: Add DefaultBinder plugin ([#87430](https://github.com/kubernetes/kubernetes/pull/87430), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling, and SIG Testing] -- Kube-apiserver metrics will now include request counts, latencies, and response sizes for /healthz, /livez, and /readyz requests. ([#83598](https://github.com/kubernetes/kubernetes/pull/83598), [@jktomer](https://github.com/jktomer)) [SIG API Machinery] - -### Other (Bug, Cleanup or Flake) - -- Fix the masters rolling upgrade causing thundering herd of LISTs on etcd leading to control plane unavailability. ([#86430](https://github.com/kubernetes/kubernetes/pull/86430), [@wojtek-t](https://github.com/wojtek-t)) [SIG API Machinery, SIG Node, and SIG Testing] -- `kubectl diff` now returns 1 only on diff finding changes, and >1 on kubectl errors. The "exit status code 1" message as also been muted. ([#87437](https://github.com/kubernetes/kubernetes/pull/87437), [@apelisse](https://github.com/apelisse)) [SIG CLI, and SIG Testing] -- To reduce chances of throttling, VM cache is set to nil when Azure node provisioning state is deleting ([#87635](https://github.com/kubernetes/kubernetes/pull/87635), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] -- Fix regression in statefulset conversion which prevented applying a statefulset multiple times. ([#87706](https://github.com/kubernetes/kubernetes/pull/87706), [@liggitt](https://github.com/liggitt)) [SIG Apps, and SIG Testing] -- fixed two scheduler metrics (pending_pods and schedule_attempts_total) not being recorded ([#87692](https://github.com/kubernetes/kubernetes/pull/87692), [@everpeace](https://github.com/everpeace)) [SIG Scheduling] -- Resolved a performance issue in the node authorizer index maintenance. ([#87693](https://github.com/kubernetes/kubernetes/pull/87693), [@liggitt](https://github.com/liggitt)) [SIG Auth] -- Removed the 'client' label from apiserver_request_total. ([#87669](https://github.com/kubernetes/kubernetes/pull/87669), [@logicalhan](https://github.com/logicalhan)) [SIG API Machinery, and SIG Instrumentation] -- `(*"k8s.io/client-go/rest".Request).{Do,DoRaw,Stream,Watch}` now require callers to pass a `context.Context` as an argument. The context is used for timeout and cancellation signaling and to pass supplementary information to round trippers in the wrapped transport chain. If you don't need any of this functionality, it is sufficient to pass a context created with `context.Background()` to these functions. The `(*"k8s.io/client-go/rest".Request).Context` method is removed now that all methods that execute a request accept a context directly. ([#87597](https://github.com/kubernetes/kubernetes/pull/87597), [@mikedanese](https://github.com/mikedanese)) [SIG API Machinery, SIG Apps, SIG Auth, SIG Autoscaling, SIG CLI, SIG Cloud Provider, SIG Cluster Lifecycle, SIG Instrumentation, SIG Network, SIG Node, SIG Scheduling, SIG Storage, and SIG Testing] -- For volumes that allow attaches across multiple nodes, attach and detach operations across different nodes are now executed in parallel. ([#87258](https://github.com/kubernetes/kubernetes/pull/87258), [@verult](https://github.com/verult)) [SIG Apps, SIG Node, and SIG Storage] -- kubeadm: apply further improvements to the tentative support for concurrent etcd member join. Fixes a bug where multiple members can receive the same hostname. Increase the etcd client dial timeout and retry timeout for add/remove/... operations. ([#87505](https://github.com/kubernetes/kubernetes/pull/87505), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Reverted a kubectl azure auth module change where oidc claim spn: prefix was omitted resulting a breaking behavior with existing Azure AD OIDC enabled api-server ([#87507](https://github.com/kubernetes/kubernetes/pull/87507), [@weinong](https://github.com/weinong)) [SIG API Machinery, SIG Auth, and SIG Cloud Provider] -- Update cri-tools to v1.17.0 ([#86305](https://github.com/kubernetes/kubernetes/pull/86305), [@saschagrunert](https://github.com/saschagrunert)) [SIG Cluster Lifecycle, and SIG Release] -- kubeadm: remove the deprecated CoreDNS feature-gate. It was set to "true" since v1.11 when the feature went GA. In v1.13 it was marked as deprecated and hidden from the CLI. ([#87400](https://github.com/kubernetes/kubernetes/pull/87400), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] -- Shared informers are now more reliable in the face of network disruption. ([#86015](https://github.com/kubernetes/kubernetes/pull/86015), [@squeed](https://github.com/squeed)) [SIG API Machinery] -- the CSR signing cert/key pairs will be reloaded from disk like the kube-apiserver cert/key pairs ([#86816](https://github.com/kubernetes/kubernetes/pull/86816), [@deads2k](https://github.com/deads2k)) [SIG API Machinery, SIG Apps, and SIG Auth] -- "kubectl describe statefulsets.apps" prints garbage for rolling update partition ([#85846](https://github.com/kubernetes/kubernetes/pull/85846), [@phil9909](https://github.com/phil9909)) [SIG CLI] - - - - - -# v1.18.0-alpha.2 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.18.0-alpha.2 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes.tar.gz) | `7af83386b4b35353f0aa1bdaf73599eb08b1d1ca11ecc2c606854aff754db69f3cd3dc761b6d7fc86f01052f615ca53185f33dbf9e53b2f926b0f02fc103fbd3` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-src.tar.gz) | `a14b02a0a0bde97795a836a8f5897b0ee6b43e010e13e43dd4cca80a5b962a1ef3704eedc7916fed1c38ec663a71db48c228c91e5daacba7d9370df98c7ddfb6` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-client-darwin-386.tar.gz) | `427f214d47ded44519007de2ae87160c56c2920358130e474b768299751a9affcbc1b1f0f936c39c6138837bca2a97792a6700896976e98c4beee8a1944cfde1` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-client-darwin-amd64.tar.gz) | `861fd81ac3bd45765575bedf5e002a2294aba48ef9e15980fc7d6783985f7d7fcde990ea0aef34690977a88df758722ec0a2e170d5dcc3eb01372e64e5439192` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-client-linux-386.tar.gz) | `7d59b05d6247e2606a8321c72cd239713373d876dbb43b0fb7f1cb857fa6c998038b41eeed78d9eb67ce77b0b71776ceed428cce0f8d2203c5181b473e0bd86c` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-client-linux-amd64.tar.gz) | `7cdefb4e32bad9d2df5bb8e7e0a6f4dab2ae6b7afef5d801ac5c342d4effdeacd799081fa2dec699ecf549200786c7623c3176252010f12494a95240dd63311d` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-client-linux-arm.tar.gz) | `6212bbf0fa1d01ced77dcca2c4b76b73956cd3c6b70e0701c1fe0df5ff37160835f6b84fa2481e0e6979516551b14d8232d1c72764a559a3652bfe2a1e7488ff` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-client-linux-arm64.tar.gz) | `1f0d9990700510165ee471acb2f88222f1b80e8f6deb351ce14cf50a70a9840fb99606781e416a13231c74b2bd7576981b5348171aa33b628d2666e366cd4629` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-client-linux-ppc64le.tar.gz) | `77e00ba12a32db81e96f8de84609de93f32c61bb3f53875a57496d213aa6d1b92c09ad5a6de240a78e1a5bf77fac587ff92874f34a10f8909ae08ca32fda45d2` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-client-linux-s390x.tar.gz) | `a39ec2044bed5a4570e9c83068e0fc0ce923ccffa44380f8bbc3247426beaff79c8a84613bcb58b05f0eb3afbc34c79fe3309aa2e0b81abcfd0aa04770e62e05` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-client-windows-386.tar.gz) | `1a0ab88f9b7e34b60ab31d5538e97202a256ad8b7b7ed5070cae5f2f12d5d4edeae615db7a34ebbe254004b6393c6b2480100b09e30e59c9139492a3019a596a` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-client-windows-amd64.tar.gz) | `1966eb5dfb78c1bc33aaa6389f32512e3aa92584250a0164182f3566c81d901b59ec78ee4e25df658bc1dd221b5a9527d6ce3b6c487ca3e3c0b319a077caa735` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-server-linux-amd64.tar.gz) | `f814d6a3872e4572aa4da297c29def4c1fad8eba0903946780b6bf9788c72b99d71085c5aef9e12c01133b26fa4563c1766ba724ad2a8af2670a24397951a94d` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-server-linux-arm.tar.gz) | `56aa08225e546c92c2ff88ac57d3db7dd5e63640772ea72a429f080f7069827138cbc206f6f5fe3a0c01bfca043a9eda305ecdc1dcb864649114893e46b6dc84` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-server-linux-arm64.tar.gz) | `fb87128d905211ba097aa860244a376575ae2edbaca6e51402a24bc2964854b9b273e09df3d31a2bcffc91509f7eecb2118b183fb0e0eb544f33403fa235c274` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-server-linux-ppc64le.tar.gz) | `6d21fbf39b9d3a0df9642407d6f698fabdc809aca83af197bceb58a81b25846072f407f8fb7caae2e02dc90912e3e0f5894f062f91bcb69f8c2329625d3dfeb7` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-server-linux-s390x.tar.gz) | `ddcda4dc360ca97705f71bf2a18ddacd7b7ddf77535b62e699e97a1b2dd24843751313351d0112e238afe69558e8271eba4d27ab77bb67b4b9e3fbde6eec85c9` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-node-linux-amd64.tar.gz) | `78915a9bde35c70c67014f0cea8754849db4f6a84491a3ad9678fd3bc0203e43af5a63cfafe104ae1d56b05ce74893a87a6dcd008d7859e1af6b3bce65425b5d` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-node-linux-arm.tar.gz) | `3218e811abcb0cb09d80742def339be3916db5e9bbc62c0dc8e6d87085f7e3d9eeed79dea081906f1de78ddd07b7e3acdbd7765fdb838d262bb35602fd1df106` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-node-linux-arm64.tar.gz) | `fa22de9c4440b8fb27f4e77a5a63c5e1c8aa8aa30bb79eda843b0f40498c21b8c0ad79fff1d841bb9fef53fe20da272506de9a86f81a0b36d028dbeab2e482ce` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-node-linux-ppc64le.tar.gz) | `bbda9b5cc66e8f13d235703b2a85e2c4f02fa16af047be4d27a3e198e11eb11706e4a0fbb6c20978c770b069cd4cd9894b661f09937df9d507411548c36576e0` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-node-linux-s390x.tar.gz) | `b2ed1eda013069adce2aac00b86d75b84e006cfce9bafac0b5a2bafcb60f8f2cb346b5ea44eafa72d777871abef1ea890eb3a2a05de28968f9316fa88886a8ed` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.2/kubernetes-node-windows-amd64.tar.gz) | `bd8eb23dba711f31b5148257076b1bbe9629f2a75de213b2c779bd5b29279e9bf22f8bde32f4bc814f4c0cc49e19671eb8b24f4105f0fe2c1490c4b78ec3c704` - -## Changelog since v1.18.0-alpha.1 - -### Other notable changes - -* Bump golang/mock version to v1.3.1 ([#87326](https://github.com/kubernetes/kubernetes/pull/87326), [@wawa0210](https://github.com/wawa0210)) -* fix a bug that orphan revision cannot be adopted and statefulset cannot be synced ([#86801](https://github.com/kubernetes/kubernetes/pull/86801), [@likakuli](https://github.com/likakuli)) -* Azure storage clients now suppress requests on throttling ([#87306](https://github.com/kubernetes/kubernetes/pull/87306), [@feiskyer](https://github.com/feiskyer)) -* Introduce Alpha field `Immutable` in both Secret and ConfigMap objects to mark their contents as immutable. The implementation is hidden behind feature gate `ImmutableEphemeralVolumes` (currently in Alpha stage). ([#86377](https://github.com/kubernetes/kubernetes/pull/86377), [@wojtek-t](https://github.com/wojtek-t)) -* EndpointSlices will now be enabled by default. A new `EndpointSliceProxying` feature gate determines if kube-proxy will use EndpointSlices, this is disabled by default. ([#86137](https://github.com/kubernetes/kubernetes/pull/86137), [@robscott](https://github.com/robscott)) -* kubeadm upgrades always persist the etcd backup for stacked ([#86861](https://github.com/kubernetes/kubernetes/pull/86861), [@SataQiu](https://github.com/SataQiu)) -* Fix the bug PIP's DNS is deleted if no DNS label service annotation isn't set. ([#87246](https://github.com/kubernetes/kubernetes/pull/87246), [@nilo19](https://github.com/nilo19)) -* New flag `--show-hidden-metrics-for-version` in kube-controller-manager can be used to show all hidden metrics that deprecated in the previous minor release. ([#85281](https://github.com/kubernetes/kubernetes/pull/85281), [@RainbowMango](https://github.com/RainbowMango)) -* Azure network and VM clients now suppress requests on throttling ([#87122](https://github.com/kubernetes/kubernetes/pull/87122), [@feiskyer](https://github.com/feiskyer)) -* `kubectl apply -f --prune -n ` should prune all resources not defined in the file in the cli specified namespace. ([#85613](https://github.com/kubernetes/kubernetes/pull/85613), [@MartinKaburu](https://github.com/MartinKaburu)) -* Fixes service account token admission error in clusters that do not run the service account token controller ([#87029](https://github.com/kubernetes/kubernetes/pull/87029), [@liggitt](https://github.com/liggitt)) -* CustomResourceDefinition status fields are no longer required for client validation when submitting manifests. ([#87213](https://github.com/kubernetes/kubernetes/pull/87213), [@hasheddan](https://github.com/hasheddan)) -* All apiservers log request lines in a more greppable format. ([#87203](https://github.com/kubernetes/kubernetes/pull/87203), [@lavalamp](https://github.com/lavalamp)) -* provider/azure: Network security groups can now be in a separate resource group. ([#87035](https://github.com/kubernetes/kubernetes/pull/87035), [@CecileRobertMichon](https://github.com/CecileRobertMichon)) -* Cleaned up the output from `kubectl describe CSINode `. ([#85283](https://github.com/kubernetes/kubernetes/pull/85283), [@huffmanca](https://github.com/huffmanca)) -* Fixed the following ([#84265](https://github.com/kubernetes/kubernetes/pull/84265), [@bhagwat070919](https://github.com/bhagwat070919)) - * - AWS Cloud Provider attempts to delete LoadBalancer security group it didn’t provision - * - AWS Cloud Provider creates default LoadBalancer security group even if annotation [service.beta.kubernetes.io/aws-load-balancer-security-groups] is present -* kubelet: resource metrics endpoint `/metrics/resource/v1alpha1` as well as all metrics under this endpoint have been deprecated. ([#86282](https://github.com/kubernetes/kubernetes/pull/86282), [@RainbowMango](https://github.com/RainbowMango)) - * Please convert to the following metrics emitted by endpoint `/metrics/resource`: - * - scrape_error --> scrape_error - * - node_cpu_usage_seconds_total --> node_cpu_usage_seconds - * - node_memory_working_set_bytes --> node_memory_working_set_bytes - * - container_cpu_usage_seconds_total --> container_cpu_usage_seconds - * - container_memory_working_set_bytes --> container_memory_working_set_bytes - * - scrape_error --> scrape_error -* You can now pass "--node-ip ::" to kubelet to indicate that it should autodetect an IPv6 address to use as the node's primary address. ([#85850](https://github.com/kubernetes/kubernetes/pull/85850), [@danwinship](https://github.com/danwinship)) -* kubeadm: support automatic retry after failing to pull image ([#86899](https://github.com/kubernetes/kubernetes/pull/86899), [@SataQiu](https://github.com/SataQiu)) -* TODO ([#87044](https://github.com/kubernetes/kubernetes/pull/87044), [@jennybuckley](https://github.com/jennybuckley)) -* Improved yaml parsing performance ([#85458](https://github.com/kubernetes/kubernetes/pull/85458), [@cjcullen](https://github.com/cjcullen)) -* Fixed a bug which could prevent a provider ID from ever being set for node if an error occurred determining the provider ID when the node was added. ([#87043](https://github.com/kubernetes/kubernetes/pull/87043), [@zjs](https://github.com/zjs)) -* fix a regression in kubenet that prevent pods to obtain ip addresses ([#85993](https://github.com/kubernetes/kubernetes/pull/85993), [@chendotjs](https://github.com/chendotjs)) -* Bind kube-dns containers to linux nodes to avoid Windows scheduling ([#83358](https://github.com/kubernetes/kubernetes/pull/83358), [@wawa0210](https://github.com/wawa0210)) -* The following features are unconditionally enabled and the corresponding `--feature-gates` flags have been removed: `PodPriority`, `TaintNodesByCondition`, `ResourceQuotaScopeSelectors` and `ScheduleDaemonSetPods` ([#86210](https://github.com/kubernetes/kubernetes/pull/86210), [@draveness](https://github.com/draveness)) -* Bind dns-horizontal containers to linux nodes to avoid Windows scheduling on kubernetes cluster includes linux nodes and windows nodes ([#83364](https://github.com/kubernetes/kubernetes/pull/83364), [@wawa0210](https://github.com/wawa0210)) -* fix kubectl annotate error when local=true is set ([#86952](https://github.com/kubernetes/kubernetes/pull/86952), [@zhouya0](https://github.com/zhouya0)) -* Bug fixes: ([#84163](https://github.com/kubernetes/kubernetes/pull/84163), [@david-tigera](https://github.com/david-tigera)) - * Make sure we include latest packages node #351 ([@caseydavenport](https://github.com/caseydavenport)) -* fix kuebctl apply set-last-applied namespaces error ([#86474](https://github.com/kubernetes/kubernetes/pull/86474), [@zhouya0](https://github.com/zhouya0)) -* Add VolumeBinder method to FrameworkHandle interface, which allows user to get the volume binder when implementing scheduler framework plugins. ([#86940](https://github.com/kubernetes/kubernetes/pull/86940), [@skilxn-go](https://github.com/skilxn-go)) -* elasticsearch supports automatically setting the advertise address ([#85944](https://github.com/kubernetes/kubernetes/pull/85944), [@SataQiu](https://github.com/SataQiu)) -* If a serving certificates param specifies a name that is an IP for an SNI certificate, it will have priority for replying to server connections. ([#85308](https://github.com/kubernetes/kubernetes/pull/85308), [@deads2k](https://github.com/deads2k)) -* kube-proxy: Added dual-stack IPv4/IPv6 support to the iptables proxier. ([#82462](https://github.com/kubernetes/kubernetes/pull/82462), [@vllry](https://github.com/vllry)) -* Azure VMSS/VMSSVM clients now suppress requests on throttling ([#86740](https://github.com/kubernetes/kubernetes/pull/86740), [@feiskyer](https://github.com/feiskyer)) -* New metric kubelet_pleg_last_seen_seconds to aid diagnosis of PLEG not healthy issues. ([#86251](https://github.com/kubernetes/kubernetes/pull/86251), [@bboreham](https://github.com/bboreham)) -* For subprotocol negotiation, both client and server protocol is required now. ([#86646](https://github.com/kubernetes/kubernetes/pull/86646), [@tedyu](https://github.com/tedyu)) -* kubeadm: use bind-address option to configure the kube-controller-manager and kube-scheduler http probes ([#86493](https://github.com/kubernetes/kubernetes/pull/86493), [@aojea](https://github.com/aojea)) -* Marked scheduler's metrics scheduling_algorithm_predicate_evaluation_seconds and ([#86584](https://github.com/kubernetes/kubernetes/pull/86584), [@xiaoanyunfei](https://github.com/xiaoanyunfei)) - * scheduling_algorithm_priority_evaluation_seconds as deprecated. Those are replaced by framework_extension_point_duration_seconds[extenstion_point="Filter"] and framework_extension_point_duration_seconds[extenstion_point="Score"] respectively. -* Marked scheduler's scheduling_duration_seconds Summary metric as deprecated ([#86586](https://github.com/kubernetes/kubernetes/pull/86586), [@xiaoanyunfei](https://github.com/xiaoanyunfei)) -* Add instructions about how to bring up e2e test cluster ([#85836](https://github.com/kubernetes/kubernetes/pull/85836), [@YangLu1031](https://github.com/YangLu1031)) -* If a required flag is not provided to a command, the user will only see the required flag error message, instead of the entire usage menu. ([#86693](https://github.com/kubernetes/kubernetes/pull/86693), [@sallyom](https://github.com/sallyom)) -* kubeadm: tolerate whitespace when validating certificate authority PEM data in kubeconfig files ([#86705](https://github.com/kubernetes/kubernetes/pull/86705), [@neolit123](https://github.com/neolit123)) -* kubeadm: add support for the "ci/k8s-master" version label as a replacement for "ci-cross/*", which no longer exists. ([#86609](https://github.com/kubernetes/kubernetes/pull/86609), [@Pensu](https://github.com/Pensu)) -* Fix EndpointSlice controller race condition and ensure that it handles external changes to EndpointSlices. ([#85703](https://github.com/kubernetes/kubernetes/pull/85703), [@robscott](https://github.com/robscott)) -* Fix nil pointer dereference in azure cloud provider ([#85975](https://github.com/kubernetes/kubernetes/pull/85975), [@ldx](https://github.com/ldx)) -* fix: azure disk could not mounted on Standard_DC4s/DC2s instances ([#86612](https://github.com/kubernetes/kubernetes/pull/86612), [@andyzhangx](https://github.com/andyzhangx)) -* Fixes v1.17.0 regression in --service-cluster-ip-range handling with IPv4 ranges larger than 65536 IP addresses ([#86534](https://github.com/kubernetes/kubernetes/pull/86534), [@liggitt](https://github.com/liggitt)) -* Adds back support for AlwaysCheckAllPredicates flag. ([#86496](https://github.com/kubernetes/kubernetes/pull/86496), [@ahg-g](https://github.com/ahg-g)) -* Azure global rate limit is switched to per-client. A set of new rate limit configure options are introduced, including routeRateLimit, SubnetsRateLimit, InterfaceRateLimit, RouteTableRateLimit, LoadBalancerRateLimit, PublicIPAddressRateLimit, SecurityGroupRateLimit, VirtualMachineRateLimit, StorageAccountRateLimit, DiskRateLimit, SnapshotRateLimit, VirtualMachineScaleSetRateLimit and VirtualMachineSizeRateLimit. ([#86515](https://github.com/kubernetes/kubernetes/pull/86515), [@feiskyer](https://github.com/feiskyer)) - * The original rate limit options would be default values for those new client's rate limiter. -* Fix issue [#85805](https://github.com/kubernetes/kubernetes/pull/85805) about resource not found in azure cloud provider when lb specified in other resource group. ([#86502](https://github.com/kubernetes/kubernetes/pull/86502), [@levimm](https://github.com/levimm)) -* `AlwaysCheckAllPredicates` is deprecated in scheduler Policy API. ([#86369](https://github.com/kubernetes/kubernetes/pull/86369), [@Huang-Wei](https://github.com/Huang-Wei)) -* Kubernetes KMS provider for data encryption now supports disabling the in-memory data encryption key (DEK) cache by setting cachesize to a negative value. ([#86294](https://github.com/kubernetes/kubernetes/pull/86294), [@enj](https://github.com/enj)) -* option `preConfiguredBackendPoolLoadBalancerTypes` is added to azure cloud provider for the pre-configured load balancers, possible values: `""`, `"internal"`, "external"`, `"all"` ([#86338](https://github.com/kubernetes/kubernetes/pull/86338), [@gossion](https://github.com/gossion)) -* Promote StartupProbe to beta for 1.18 release ([#83437](https://github.com/kubernetes/kubernetes/pull/83437), [@matthyx](https://github.com/matthyx)) -* Fixes issue where AAD token obtained by kubectl is incompatible with on-behalf-of flow and oidc. ([#86412](https://github.com/kubernetes/kubernetes/pull/86412), [@weinong](https://github.com/weinong)) - * The audience claim before this fix has "spn:" prefix. After this fix, "spn:" prefix is omitted. -* change CounterVec to Counter about PLEGDiscardEvent ([#86167](https://github.com/kubernetes/kubernetes/pull/86167), [@yiyang5055](https://github.com/yiyang5055)) -* hollow-node do not use remote CRI anymore ([#86425](https://github.com/kubernetes/kubernetes/pull/86425), [@jkaniuk](https://github.com/jkaniuk)) -* hollow-node use fake CRI ([#85879](https://github.com/kubernetes/kubernetes/pull/85879), [@gongguan](https://github.com/gongguan)) - - - -# v1.18.0-alpha.1 - -[Documentation](https://docs.k8s.io) - -## Downloads for v1.18.0-alpha.1 - - -filename | sha512 hash --------- | ----------- -[kubernetes.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes.tar.gz) | `0c4904efc7f4f1436119c91dc1b6c93b3bd9c7490362a394bff10099c18e1e7600c4f6e2fcbaeb2d342a36c4b20692715cf7aa8ada6dfac369f44cc9292529d7` -[kubernetes-src.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-src.tar.gz) | `0a50fc6816c730ca5ae4c4f26d5ad7b049607d29f6a782a4e5b4b05ac50e016486e269dafcc6a163bd15e1a192780a9a987f1bb959696993641c603ed1e841c8` - -### Client Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-client-darwin-386.tar.gz) | `c6d75f7f3f20bef17fc7564a619b54e6f4a673d041b7c9ec93663763a1cc8dd16aecd7a2af70e8d54825a0eecb9762cf2edfdade840604c9a32ecd9cc2d5ac3c` -[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-client-darwin-amd64.tar.gz) | `ca1f19db289933beace6daee6fc30af19b0e260634ef6e89f773464a05e24551c791be58b67da7a7e2a863e28b7cbcc7b24b6b9bf467113c26da76ac8f54fdb6` -[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-client-linux-386.tar.gz) | `af2e673653eb39c3f24a54efc68e1055f9258bdf6cf8fea42faf42c05abefc2da853f42faac3b166c37e2a7533020b8993b98c0d6d80a5b66f39e91d8ae0a3fb` -[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-client-linux-amd64.tar.gz) | `9009032c3f94ac8a78c1322a28e16644ce3b20989eb762685a1819148aed6e883ca8e1200e5ec37ec0853f115c67e09b5d697d6cf5d4c45f653788a2d3a2f84f` -[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-client-linux-arm.tar.gz) | `afba9595b37a3f2eead6e3418573f7ce093b55467dce4da0b8de860028576b96b837a2fd942f9c276e965da694e31fbd523eeb39aefb902d7e7a2f169344d271` -[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-client-linux-arm64.tar.gz) | `04fc3b2fe3f271807f0bc6c61be52456f26a1af904964400be819b7914519edc72cbab9afab2bb2e2ba1a108963079367cedfb253c9364c0175d1fcc64d52f5c` -[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-client-linux-ppc64le.tar.gz) | `04c7edab874b33175ff7bebfff5b3a032bc6eb088fcd7387ffcd5b3fa71395ca8c5f9427b7ddb496e92087dfdb09eaf14a46e9513071d3bd73df76c182922d38` -[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-client-linux-s390x.tar.gz) | `499287dbbc33399a37b9f3b35e0124ff20b17b6619f25a207ee9c606ef261af61fa0c328dde18c7ce2d3dfb2eea2376623bc3425d16bc8515932a68b44f8bede` -[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-client-windows-386.tar.gz) | `cf84aeddf00f126fb13c0436b116dd0464a625659e44c84bf863517db0406afb4eefd86807e7543c4f96006d275772fbf66214ae7d582db5865c84ac3545b3e6` -[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-client-windows-amd64.tar.gz) | `69f20558ccd5cd6dbaccf29307210db4e687af21f6d71f68c69d3a39766862686ac1333ab8a5012010ca5c5e3c11676b45e498e3d4c38773da7d24bcefc46d95` - -### Server Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-server-linux-amd64.tar.gz) | `3f29df2ce904a0f10db4c1d7a425a36f420867b595da3fa158ae430bfead90def2f2139f51425b349faa8a9303dcf20ea01657cb6ea28eb6ad64f5bb32ce2ed1` -[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-server-linux-arm.tar.gz) | `4a21073b2273d721fbf062c254840be5c8471a010bcc0c731b101729e36e61f637cb7fcb521a22e8d24808510242f4fff8a6ca40f10e9acd849c2a47bf135f27` -[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-server-linux-arm64.tar.gz) | `7f1cb6d721bedc90e28b16f99bea7e59f5ad6267c31ef39c14d34db6ad6aad87ee51d2acdd01b6903307c1c00b58ff6b785a03d5a491cc3f8a4df9a1d76d406c` -[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-server-linux-ppc64le.tar.gz) | `8f2b552030b5274b1c2c7c166eacd5a14b0c6ca0f23042f4c52efe87e22a167ba4460dcd66615a5ecd26d9e88336be1fb555548392e70efe59070dd2c314da98` -[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-server-linux-s390x.tar.gz) | `8d9f2c96f66edafb7c8b3aa90960d29b41471743842aede6b47b3b2e61f4306fb6fc60b9ebc18820c547ee200bfedfe254c1cde962d447c791097dd30e79abdb` - -### Node Binaries - -filename | sha512 hash --------- | ----------- -[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-node-linux-amd64.tar.gz) | `84194cb081d1502f8ca68143569f9707d96f1a28fcf0c574ebd203321463a8b605f67bb2a365eaffb14fbeb8d55c8d3fa17431780b242fb9cba3a14426a0cd4a` -[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-node-linux-arm.tar.gz) | `0091e108ab94fd8683b89c597c4fdc2fbf4920b007cfcd5297072c44bc3a230dfe5ceed16473e15c3e6cf5edab866d7004b53edab95be0400cc60e009eee0d9d` -[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-node-linux-arm64.tar.gz) | `b7e85682cc2848a35d52fd6f01c247f039ee1b5dd03345713821ea10a7fa9939b944f91087baae95eaa0665d11857c1b81c454f720add077287b091f9f19e5d3` -[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-node-linux-ppc64le.tar.gz) | `cd1f0849e9c62b5d2c93ff0cebf58843e178d8a88317f45f76de0db5ae020b8027e9503a5fccc96445184e0d77ecdf6f57787176ac31dbcbd01323cd0a190cbb` -[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-node-linux-s390x.tar.gz) | `e1e697a34424c75d75415b613b81c8af5f64384226c5152d869f12fd7db1a3e25724975b73fa3d89e56e4bf78d5fd07e68a709ba8566f53691ba6a88addc79ea` -[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.18.0-alpha.1/kubernetes-node-windows-amd64.tar.gz) | `c725a19a4013c74e22383ad3fb4cb799b3e161c4318fdad066daf806730a89bc3be3ff0f75678d02b3cbe52b2ef0c411c0639968e200b9df470be40bb2c015cc` - -## Changelog since v1.17.0 - -### Action Required - -* action required ([#85363](https://github.com/kubernetes/kubernetes/pull/85363), [@immutableT](https://github.com/immutableT)) - * 1. Currently, if users were to explicitly specify CacheSize of 0 for KMS provider, they would end-up with a provider that caches up to 1000 keys. This PR changes this behavior. - * Post this PR, when users supply 0 for CacheSize this will result in a validation error. - * 2. CacheSize type was changed from int32 to *int32. This allows defaulting logic to differentiate between cases where users explicitly supplied 0 vs. not supplied any value. - * 3. KMS Provider's endpoint (path to Unix socket) is now validated when the EncryptionConfiguration files is loaded. This used to be handled by the GRPCService. - -### Other notable changes - -* fix: azure data disk should use same key as os disk by default ([#86351](https://github.com/kubernetes/kubernetes/pull/86351), [@andyzhangx](https://github.com/andyzhangx)) -* New flag `--show-hidden-metrics-for-version` in kube-proxy can be used to show all hidden metrics that deprecated in the previous minor release. ([#85279](https://github.com/kubernetes/kubernetes/pull/85279), [@RainbowMango](https://github.com/RainbowMango)) -* Remove cluster-monitoring addon ([#85512](https://github.com/kubernetes/kubernetes/pull/85512), [@serathius](https://github.com/serathius)) -* Changed core_pattern on COS nodes to be an absolute path. ([#86329](https://github.com/kubernetes/kubernetes/pull/86329), [@mml](https://github.com/mml)) -* Track mount operations as uncertain if operation fails with non-final error ([#82492](https://github.com/kubernetes/kubernetes/pull/82492), [@gnufied](https://github.com/gnufied)) -* add kube-proxy flags --ipvs-tcp-timeout, --ipvs-tcpfin-timeout, --ipvs-udp-timeout to configure IPVS connection timeouts. ([#85517](https://github.com/kubernetes/kubernetes/pull/85517), [@andrewsykim](https://github.com/andrewsykim)) -* The sample-apiserver aggregated conformance test has updated to use the Kubernetes v1.17.0 sample apiserver ([#84735](https://github.com/kubernetes/kubernetes/pull/84735), [@liggitt](https://github.com/liggitt)) -* The underlying format of the `CPUManager` state file has changed. Upgrades should be seamless, but any third-party tools that rely on reading the previous format need to be updated. ([#84462](https://github.com/kubernetes/kubernetes/pull/84462), [@klueska](https://github.com/klueska)) -* kubernetes will try to acquire the iptables lock every 100 msec during 5 seconds instead of every second. This specially useful for environments using kube-proxy in iptables mode with a high churn rate of services. ([#85771](https://github.com/kubernetes/kubernetes/pull/85771), [@aojea](https://github.com/aojea)) -* Fixed a panic in the kubelet cleaning up pod volumes ([#86277](https://github.com/kubernetes/kubernetes/pull/86277), [@tedyu](https://github.com/tedyu)) -* azure cloud provider cache TTL is configurable, list of the azure cloud provider is as following: ([#86266](https://github.com/kubernetes/kubernetes/pull/86266), [@zqingqing1](https://github.com/zqingqing1)) - * - "availabilitySetNodesCacheTTLInSeconds" - * - "vmssCacheTTLInSeconds" - * - "vmssVirtualMachinesCacheTTLInSeconds" - * - "vmCacheTTLInSeconds" - * - "loadBalancerCacheTTLInSeconds" - * - "nsgCacheTTLInSeconds" - * - "routeTableCacheTTLInSeconds" -* Fixes kube-proxy when EndpointSlice feature gate is enabled on Windows. ([#86016](https://github.com/kubernetes/kubernetes/pull/86016), [@robscott](https://github.com/robscott)) -* Fixes wrong validation result of NetworkPolicy PolicyTypes ([#85747](https://github.com/kubernetes/kubernetes/pull/85747), [@tnqn](https://github.com/tnqn)) -* Fixes an issue with kubelet-reported pod status on deleted/recreated pods. ([#86320](https://github.com/kubernetes/kubernetes/pull/86320), [@liggitt](https://github.com/liggitt)) -* kube-apiserver no longer serves the following deprecated APIs: ([#85903](https://github.com/kubernetes/kubernetes/pull/85903), [@liggitt](https://github.com/liggitt)) - * All resources under `apps/v1beta1` and `apps/v1beta2` - use `apps/v1` instead - * `daemonsets`, `deployments`, `replicasets` resources under `extensions/v1beta1` - use `apps/v1` instead - * `networkpolicies` resources under `extensions/v1beta1` - use `networking.k8s.io/v1` instead - * `podsecuritypolicies` resources under `extensions/v1beta1` - use `policy/v1beta1` instead -* kubeadm: fix potential panic when executing "kubeadm reset" with a corrupted kubelet.conf file ([#86216](https://github.com/kubernetes/kubernetes/pull/86216), [@neolit123](https://github.com/neolit123)) -* Fix a bug in port-forward: named port not working with service ([#85511](https://github.com/kubernetes/kubernetes/pull/85511), [@oke-py](https://github.com/oke-py)) -* kube-proxy no longer modifies shared EndpointSlices. ([#86092](https://github.com/kubernetes/kubernetes/pull/86092), [@robscott](https://github.com/robscott)) -* allow for configuration of CoreDNS replica count ([#85837](https://github.com/kubernetes/kubernetes/pull/85837), [@pickledrick](https://github.com/pickledrick)) -* Fixed a regression where the kubelet would fail to update the ready status of pods. ([#84951](https://github.com/kubernetes/kubernetes/pull/84951), [@tedyu](https://github.com/tedyu)) -* Resolves performance regression in client-go discovery clients constructed using `NewDiscoveryClientForConfig` or `NewDiscoveryClientForConfigOrDie`. ([#86168](https://github.com/kubernetes/kubernetes/pull/86168), [@liggitt](https://github.com/liggitt)) -* Make error message and service event message more clear ([#86078](https://github.com/kubernetes/kubernetes/pull/86078), [@feiskyer](https://github.com/feiskyer)) -* e2e-test-framework: add e2e test namespace dump if all tests succeed but the cleanup fails. ([#85542](https://github.com/kubernetes/kubernetes/pull/85542), [@schrodit](https://github.com/schrodit)) -* SafeSysctlWhitelist: add net.ipv4.ping_group_range ([#85463](https://github.com/kubernetes/kubernetes/pull/85463), [@AkihiroSuda](https://github.com/AkihiroSuda)) -* kubelet: the metric process_start_time_seconds be marked as with the ALPHA stability level. ([#85446](https://github.com/kubernetes/kubernetes/pull/85446), [@RainbowMango](https://github.com/RainbowMango)) -* API request throttling (due to a high rate of requests) is now reported in the kubelet (and other component) logs by default. The messages are of the form ([#80649](https://github.com/kubernetes/kubernetes/pull/80649), [@RobertKrawitz](https://github.com/RobertKrawitz)) - * Throttling request took 1.50705208s, request: GET: - * The presence of large numbers of these messages, particularly with long delay times, may indicate to the administrator the need to tune the cluster accordingly. -* Fix API Server potential memory leak issue in processing watch request. ([#85410](https://github.com/kubernetes/kubernetes/pull/85410), [@answer1991](https://github.com/answer1991)) -* Verify kubelet & kube-proxy can recover after being killed on Windows nodes ([#84886](https://github.com/kubernetes/kubernetes/pull/84886), [@YangLu1031](https://github.com/YangLu1031)) -* Fixed an issue that the scheduler only returns the first failure reason. ([#86022](https://github.com/kubernetes/kubernetes/pull/86022), [@Huang-Wei](https://github.com/Huang-Wei)) -* kubectl/drain: add skip-wait-for-delete-timeout option. ([#85577](https://github.com/kubernetes/kubernetes/pull/85577), [@michaelgugino](https://github.com/michaelgugino)) - * If pod DeletionTimestamp older than N seconds, skip waiting for the pod. Seconds must be greater than 0 to skip. -* Following metrics have been turned off: ([#83841](https://github.com/kubernetes/kubernetes/pull/83841), [@RainbowMango](https://github.com/RainbowMango)) - * - kubelet_pod_worker_latency_microseconds - * - kubelet_pod_start_latency_microseconds - * - kubelet_cgroup_manager_latency_microseconds - * - kubelet_pod_worker_start_latency_microseconds - * - kubelet_pleg_relist_latency_microseconds - * - kubelet_pleg_relist_interval_microseconds - * - kubelet_eviction_stats_age_microseconds - * - kubelet_runtime_operations - * - kubelet_runtime_operations_latency_microseconds - * - kubelet_runtime_operations_errors - * - kubelet_device_plugin_registration_count - * - kubelet_device_plugin_alloc_latency_microseconds - * - kubelet_docker_operations - * - kubelet_docker_operations_latency_microseconds - * - kubelet_docker_operations_errors - * - kubelet_docker_operations_timeout - * - network_plugin_operations_latency_microseconds -* - Renamed Kubelet metric certificate_manager_server_expiration_seconds to certificate_manager_server_ttl_seconds and changed to report the second until expiration at read time rather than absolute time of expiry. ([#85874](https://github.com/kubernetes/kubernetes/pull/85874), [@sambdavidson](https://github.com/sambdavidson)) - * - Improved accuracy of Kubelet metric rest_client_exec_plugin_ttl_seconds. -* Bind metadata-agent containers to linux nodes to avoid Windows scheduling on kubernetes cluster includes linux nodes and windows nodes ([#83363](https://github.com/kubernetes/kubernetes/pull/83363), [@wawa0210](https://github.com/wawa0210)) -* Bind metrics-server containers to linux nodes to avoid Windows scheduling on kubernetes cluster includes linux nodes and windows nodes ([#83362](https://github.com/kubernetes/kubernetes/pull/83362), [@wawa0210](https://github.com/wawa0210)) -* During initialization phase (preflight), kubeadm now verifies the presence of the conntrack executable ([#85857](https://github.com/kubernetes/kubernetes/pull/85857), [@hnanni](https://github.com/hnanni)) -* VMSS cache is added so that less chances of VMSS GET throttling ([#85885](https://github.com/kubernetes/kubernetes/pull/85885), [@nilo19](https://github.com/nilo19)) -* Update go-winio module version from 0.4.11 to 0.4.14 ([#85739](https://github.com/kubernetes/kubernetes/pull/85739), [@wawa0210](https://github.com/wawa0210)) -* Fix LoadBalancer rule checking so that no unexpected LoadBalancer updates are made ([#85990](https://github.com/kubernetes/kubernetes/pull/85990), [@feiskyer](https://github.com/feiskyer)) -* kubectl drain node --dry-run will list pods that would be evicted or deleted ([#82660](https://github.com/kubernetes/kubernetes/pull/82660), [@sallyom](https://github.com/sallyom)) -* Windows nodes on GCE can use TPM-based authentication to the master. ([#85466](https://github.com/kubernetes/kubernetes/pull/85466), [@pjh](https://github.com/pjh)) -* kubectl/drain: add disable-eviction option. ([#85571](https://github.com/kubernetes/kubernetes/pull/85571), [@michaelgugino](https://github.com/michaelgugino)) - * Force drain to use delete, even if eviction is supported. This will bypass checking PodDisruptionBudgets, and should be used with caution. -* kubeadm now errors out whenever a not supported component config version is supplied for the kubelet and kube-proxy ([#85639](https://github.com/kubernetes/kubernetes/pull/85639), [@rosti](https://github.com/rosti)) -* Fixed issue with addon-resizer using deprecated extensions APIs ([#85793](https://github.com/kubernetes/kubernetes/pull/85793), [@bskiba](https://github.com/bskiba)) -* Includes FSType when describing CSI persistent volumes. ([#85293](https://github.com/kubernetes/kubernetes/pull/85293), [@huffmanca](https://github.com/huffmanca)) -* kubelet now exports a "server_expiration_renew_failure" and "client_expiration_renew_failure" metric counter if the certificate rotations cannot be performed. ([#84614](https://github.com/kubernetes/kubernetes/pull/84614), [@rphillips](https://github.com/rphillips)) -* kubeadm: don't write the kubelet environment file on "upgrade apply" ([#85412](https://github.com/kubernetes/kubernetes/pull/85412), [@boluisa](https://github.com/boluisa)) -* fix azure file AuthorizationFailure ([#85475](https://github.com/kubernetes/kubernetes/pull/85475), [@andyzhangx](https://github.com/andyzhangx)) -* Resolved regression in admission, authentication, and authorization webhook performance in v1.17.0-rc.1 ([#85810](https://github.com/kubernetes/kubernetes/pull/85810), [@liggitt](https://github.com/liggitt)) -* kubeadm: uses the apiserver AdvertiseAddress IP family to choose the etcd endpoint IP family for non external etcd clusters ([#85745](https://github.com/kubernetes/kubernetes/pull/85745), [@aojea](https://github.com/aojea)) -* kubeadm: Forward cluster name to the controller-manager arguments ([#85817](https://github.com/kubernetes/kubernetes/pull/85817), [@ereslibre](https://github.com/ereslibre)) -* Fixed "requested device X but found Y" attach error on AWS. ([#85675](https://github.com/kubernetes/kubernetes/pull/85675), [@jsafrane](https://github.com/jsafrane)) -* addons: elasticsearch discovery supports IPv6 ([#85543](https://github.com/kubernetes/kubernetes/pull/85543), [@SataQiu](https://github.com/SataQiu)) -* kubeadm: retry `kubeadm-config` ConfigMap creation or mutation if the apiserver is not responding. This will improve resiliency when joining new control plane nodes. ([#85763](https://github.com/kubernetes/kubernetes/pull/85763), [@ereslibre](https://github.com/ereslibre)) -* Update Cluster Autoscaler to 1.17.0; changelog: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.17.0 ([#85610](https://github.com/kubernetes/kubernetes/pull/85610), [@losipiuk](https://github.com/losipiuk)) -* Filter published OpenAPI schema by making nullable, required fields non-required in order to avoid kubectl to wrongly reject null values. ([#85722](https://github.com/kubernetes/kubernetes/pull/85722), [@sttts](https://github.com/sttts)) -* kubectl set resources will no longer return an error if passed an empty change for a resource. ([#85490](https://github.com/kubernetes/kubernetes/pull/85490), [@sallyom](https://github.com/sallyom)) - * kubectl set subject will no longer return an error if passed an empty change for a resource. -* kube-apiserver: fixed a conflict error encountered attempting to delete a pod with gracePeriodSeconds=0 and a resourceVersion precondition ([#85516](https://github.com/kubernetes/kubernetes/pull/85516), [@michaelgugino](https://github.com/michaelgugino)) -* kubeadm: add a upgrade health check that deploys a Job ([#81319](https://github.com/kubernetes/kubernetes/pull/81319), [@neolit123](https://github.com/neolit123)) -* kubeadm: make sure images are pre-pulled even if a tag did not change but their contents changed ([#85603](https://github.com/kubernetes/kubernetes/pull/85603), [@bart0sh](https://github.com/bart0sh)) -* kube-apiserver: Fixes a bug that hidden metrics can not be enabled by the command-line option `--show-hidden-metrics-for-version`. ([#85444](https://github.com/kubernetes/kubernetes/pull/85444), [@RainbowMango](https://github.com/RainbowMango)) -* kubeadm now supports automatic calculations of dual-stack node cidr masks to kube-controller-manager. ([#85609](https://github.com/kubernetes/kubernetes/pull/85609), [@Arvinderpal](https://github.com/Arvinderpal)) -* Fix bug where EndpointSlice controller would attempt to modify shared objects. ([#85368](https://github.com/kubernetes/kubernetes/pull/85368), [@robscott](https://github.com/robscott)) -* Use context to check client closed instead of http.CloseNotifier in processing watch request which will reduce 1 goroutine for each request if proto is HTTP/2.x . ([#85408](https://github.com/kubernetes/kubernetes/pull/85408), [@answer1991](https://github.com/answer1991)) -* kubeadm: reset raises warnings if it cannot delete folders ([#85265](https://github.com/kubernetes/kubernetes/pull/85265), [@SataQiu](https://github.com/SataQiu)) -* Wait for kubelet & kube-proxy to be ready on Windows node within 10s ([#85228](https://github.com/kubernetes/kubernetes/pull/85228), [@YangLu1031](https://github.com/YangLu1031)) \ No newline at end of file diff --git a/CHANGELOG/CHANGELOG-1.19.md b/CHANGELOG/CHANGELOG-1.19.md index 45d22373c76eb..6a329e0616e80 100644 --- a/CHANGELOG/CHANGELOG-1.19.md +++ b/CHANGELOG/CHANGELOG-1.19.md @@ -1,162 +1,1363 @@ -- [v1.19.0-rc.4](#v1190-rc4) - - [Downloads for v1.19.0-rc.4](#downloads-for-v1190-rc4) - - [Source Code](#source-code) - - [Client binaries](#client-binaries) - - [Server binaries](#server-binaries) - - [Node binaries](#node-binaries) - - [Changelog since v1.19.0-rc.3](#changelog-since-v1190-rc3) +- [v1.19.0](#v1190) + - [Downloads for v1.19.0](#downloads-for-v1190) + - [Client Binaries](#client-binaries) + - [Server Binaries](#server-binaries) + - [Node Binaries](#node-binaries) + - [Changelog since v1.18.0](#changelog-since-v1180) + - [What’s New (Major Themes)](#what’s-new-major-themes) + - [Deprecation warnings](#deprecation-warnings) + - [Avoiding permanent beta](#avoiding-permanent-beta) + - [Expanded CLI support for debugging workloads and nodes](#expanded-cli-support-for-debugging-workloads-and-nodes) + - [Structured logging](#structured-logging) + - [EndpointSlices are now enabled by default](#endpointslices-are-now-enabled-by-default) + - [Ingress graduates to General Availability](#ingress-graduates-to-general-availability) + - [seccomp graduates to General Availability](#seccomp-graduates-to-general-availability) + - [Production images moved to community control](#production-images-moved-to-community-control) + - [KubeSchedulerConfiguration graduates to Beta](#kubeschedulerconfiguration-graduates-to-beta) + - [CSI Migration - AzureDisk and vSphere (beta)](#csi-migration---azuredisk-and-vsphere-beta) + - [Storage capacity tracking](#storage-capacity-tracking) + - [CSI Volume health monitoring](#csi-volume-health-monitoring) + - [General ephemeral volumes](#general-ephemeral-volumes) + - [Immutable Secrets and ConfigMaps (beta)](#immutable-secrets-and-configmaps-beta) + - [CSI Proxy for Windows](#csi-proxy-for-windows) + - [Dashboard v2](#dashboard-v2) + - [Windows containerd support graduates to beta](#windows-containerd-support-graduates-to-beta) + - [Increase the Kubernetes support window to one year](#increase-the-kubernetes-support-window-to-one-year) + - [Known Issues](#known-issues) + - [Urgent Upgrade Notes ](#urgent-upgrade-notes-) + - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade) - [Changes by Kind](#changes-by-kind) - [Deprecation](#deprecation) + - [API Change](#api-change) + - [Feature](#feature) + - [Documentation](#documentation) + - [Failing Test](#failing-test) - [Bug or Regression](#bug-or-regression) - [Other (Cleanup or Flake)](#other-cleanup-or-flake) - [Dependencies](#dependencies) - [Added](#added) - [Changed](#changed) - [Removed](#removed) -- [v1.19.0-rc.3](#v1190-rc3) - - [Downloads for v1.19.0-rc.3](#downloads-for-v1190-rc3) - - [Source Code](#source-code-1) + - [Dependencies](#dependencies-1) + - [Added](#added-1) + - [Changed](#changed-1) + - [Removed](#removed-1) +- [v1.19.0-rc.4](#v1190-rc4) + - [Downloads for v1.19.0-rc.4](#downloads-for-v1190-rc4) + - [Source Code](#source-code) - [Client binaries](#client-binaries-1) - [Server binaries](#server-binaries-1) - [Node binaries](#node-binaries-1) - - [Changelog since v1.19.0-rc.2](#changelog-since-v1190-rc2) + - [Changelog since v1.19.0-rc.3](#changelog-since-v1190-rc3) - [Changes by Kind](#changes-by-kind-1) - - [API Change](#api-change) + - [Deprecation](#deprecation-1) - [Bug or Regression](#bug-or-regression-1) - - [Dependencies](#dependencies-1) - - [Added](#added-1) - - [Changed](#changed-1) - - [Removed](#removed-1) -- [v1.19.0-rc.2](#v1190-rc2) - - [Downloads for v1.19.0-rc.2](#downloads-for-v1190-rc2) - - [Source Code](#source-code-2) + - [Other (Cleanup or Flake)](#other-cleanup-or-flake-1) + - [Dependencies](#dependencies-2) + - [Added](#added-2) + - [Changed](#changed-2) + - [Removed](#removed-2) +- [v1.19.0-rc.3](#v1190-rc3) + - [Downloads for v1.19.0-rc.3](#downloads-for-v1190-rc3) + - [Source Code](#source-code-1) - [Client binaries](#client-binaries-2) - [Server binaries](#server-binaries-2) - [Node binaries](#node-binaries-2) - - [Changelog since v1.19.0-rc.1](#changelog-since-v1190-rc1) + - [Changelog since v1.19.0-rc.2](#changelog-since-v1190-rc2) - [Changes by Kind](#changes-by-kind-2) - [API Change](#api-change-1) - - [Feature](#feature) - [Bug or Regression](#bug-or-regression-2) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake-1) - - [Dependencies](#dependencies-2) - - [Added](#added-2) - - [Changed](#changed-2) - - [Removed](#removed-2) -- [v1.19.0-rc.1](#v1190-rc1) - - [Downloads for v1.19.0-rc.1](#downloads-for-v1190-rc1) - - [Source Code](#source-code-3) + - [Dependencies](#dependencies-3) + - [Added](#added-3) + - [Changed](#changed-3) + - [Removed](#removed-3) +- [v1.19.0-rc.2](#v1190-rc2) + - [Downloads for v1.19.0-rc.2](#downloads-for-v1190-rc2) + - [Source Code](#source-code-2) - [Client binaries](#client-binaries-3) - [Server binaries](#server-binaries-3) - [Node binaries](#node-binaries-3) - - [Changelog since v1.19.0-rc.0](#changelog-since-v1190-rc0) - - [Urgent Upgrade Notes](#urgent-upgrade-notes) - - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade) + - [Changelog since v1.19.0-rc.1](#changelog-since-v1190-rc1) - [Changes by Kind](#changes-by-kind-3) - - [Deprecation](#deprecation-1) - [API Change](#api-change-2) - [Feature](#feature-1) - - [Failing Test](#failing-test) - [Bug or Regression](#bug-or-regression-3) - [Other (Cleanup or Flake)](#other-cleanup-or-flake-2) - - [Dependencies](#dependencies-3) - - [Added](#added-3) - - [Changed](#changed-3) - - [Removed](#removed-3) -- [v1.19.0-beta.2](#v1190-beta2) - - [Downloads for v1.19.0-beta.2](#downloads-for-v1190-beta2) - - [Source Code](#source-code-4) + - [Dependencies](#dependencies-4) + - [Added](#added-4) + - [Changed](#changed-4) + - [Removed](#removed-4) +- [v1.19.0-rc.1](#v1190-rc1) + - [Downloads for v1.19.0-rc.1](#downloads-for-v1190-rc1) + - [Source Code](#source-code-3) - [Client binaries](#client-binaries-4) - [Server binaries](#server-binaries-4) - [Node binaries](#node-binaries-4) - - [Changelog since v1.19.0-beta.1](#changelog-since-v1190-beta1) + - [Changelog since v1.19.0-rc.0](#changelog-since-v1190-rc0) + - [Urgent Upgrade Notes](#urgent-upgrade-notes) + - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-1) - [Changes by Kind](#changes-by-kind-4) - [Deprecation](#deprecation-2) - [API Change](#api-change-3) - [Feature](#feature-2) + - [Failing Test](#failing-test-1) - [Bug or Regression](#bug-or-regression-4) - [Other (Cleanup or Flake)](#other-cleanup-or-flake-3) - - [Dependencies](#dependencies-4) - - [Added](#added-4) - - [Changed](#changed-4) - - [Removed](#removed-4) -- [v1.19.0-beta.1](#v1190-beta1) - - [Downloads for v1.19.0-beta.1](#downloads-for-v1190-beta1) - - [Source Code](#source-code-5) + - [Dependencies](#dependencies-5) + - [Added](#added-5) + - [Changed](#changed-5) + - [Removed](#removed-5) +- [v1.19.0-beta.2](#v1190-beta2) + - [Downloads for v1.19.0-beta.2](#downloads-for-v1190-beta2) + - [Source Code](#source-code-4) - [Client binaries](#client-binaries-5) - [Server binaries](#server-binaries-5) - [Node binaries](#node-binaries-5) - - [Changelog since v1.19.0-alpha.3](#changelog-since-v1190-alpha3) - - [Urgent Upgrade Notes](#urgent-upgrade-notes-1) - - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-1) + - [Changelog since v1.19.0-beta.1](#changelog-since-v1190-beta1) - [Changes by Kind](#changes-by-kind-5) + - [Deprecation](#deprecation-3) - [API Change](#api-change-4) - [Feature](#feature-3) - [Bug or Regression](#bug-or-regression-5) - [Other (Cleanup or Flake)](#other-cleanup-or-flake-4) - - [Dependencies](#dependencies-5) - - [Added](#added-5) - - [Changed](#changed-5) - - [Removed](#removed-5) -- [v1.19.0-beta.0](#v1190-beta0) - - [Downloads for v1.19.0-beta.0](#downloads-for-v1190-beta0) - - [Source Code](#source-code-6) + - [Dependencies](#dependencies-6) + - [Added](#added-6) + - [Changed](#changed-6) + - [Removed](#removed-6) +- [v1.19.0-beta.1](#v1190-beta1) + - [Downloads for v1.19.0-beta.1](#downloads-for-v1190-beta1) + - [Source Code](#source-code-5) - [Client binaries](#client-binaries-6) - [Server binaries](#server-binaries-6) - [Node binaries](#node-binaries-6) - - [Changelog since v1.19.0-alpha.3](#changelog-since-v1190-alpha3-1) + - [Changelog since v1.19.0-alpha.3](#changelog-since-v1190-alpha3) + - [Urgent Upgrade Notes](#urgent-upgrade-notes-1) + - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-2) - [Changes by Kind](#changes-by-kind-6) - [API Change](#api-change-5) - [Feature](#feature-4) - [Bug or Regression](#bug-or-regression-6) - [Other (Cleanup or Flake)](#other-cleanup-or-flake-5) - - [Dependencies](#dependencies-6) - - [Added](#added-6) - - [Changed](#changed-6) - - [Removed](#removed-6) -- [v1.19.0-alpha.3](#v1190-alpha3) - - [Downloads for v1.19.0-alpha.3](#downloads-for-v1190-alpha3) - - [Client Binaries](#client-binaries-7) - - [Server Binaries](#server-binaries-7) - - [Node Binaries](#node-binaries-7) - - [Changelog since v1.19.0-alpha.2](#changelog-since-v1190-alpha2) - - [Urgent Upgrade Notes](#urgent-upgrade-notes-2) - - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-2) + - [Dependencies](#dependencies-7) + - [Added](#added-7) + - [Changed](#changed-7) + - [Removed](#removed-7) +- [v1.19.0-beta.0](#v1190-beta0) + - [Downloads for v1.19.0-beta.0](#downloads-for-v1190-beta0) + - [Source Code](#source-code-6) + - [Client binaries](#client-binaries-7) + - [Server binaries](#server-binaries-7) + - [Node binaries](#node-binaries-7) + - [Changelog since v1.19.0-alpha.3](#changelog-since-v1190-alpha3-1) - [Changes by Kind](#changes-by-kind-7) - - [Deprecation](#deprecation-3) - [API Change](#api-change-6) - [Feature](#feature-5) - [Bug or Regression](#bug-or-regression-7) - [Other (Cleanup or Flake)](#other-cleanup-or-flake-6) -- [v1.19.0-alpha.2](#v1190-alpha2) - - [Downloads for v1.19.0-alpha.2](#downloads-for-v1190-alpha2) + - [Dependencies](#dependencies-8) + - [Added](#added-8) + - [Changed](#changed-8) + - [Removed](#removed-8) +- [v1.19.0-alpha.3](#v1190-alpha3) + - [Downloads for v1.19.0-alpha.3](#downloads-for-v1190-alpha3) - [Client Binaries](#client-binaries-8) - [Server Binaries](#server-binaries-8) - [Node Binaries](#node-binaries-8) - - [Changelog since v1.19.0-alpha.1](#changelog-since-v1190-alpha1) - - [Urgent Upgrade Notes](#urgent-upgrade-notes-3) + - [Changelog since v1.19.0-alpha.2](#changelog-since-v1190-alpha2) + - [Urgent Upgrade Notes](#urgent-upgrade-notes-2) - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-3) - [Changes by Kind](#changes-by-kind-8) + - [Deprecation](#deprecation-4) - [API Change](#api-change-7) - [Feature](#feature-6) - [Bug or Regression](#bug-or-regression-8) - [Other (Cleanup or Flake)](#other-cleanup-or-flake-7) -- [v1.19.0-alpha.1](#v1190-alpha1) - - [Downloads for v1.19.0-alpha.1](#downloads-for-v1190-alpha1) +- [v1.19.0-alpha.2](#v1190-alpha2) + - [Downloads for v1.19.0-alpha.2](#downloads-for-v1190-alpha2) - [Client Binaries](#client-binaries-9) - [Server Binaries](#server-binaries-9) - [Node Binaries](#node-binaries-9) - - [Changelog since v1.19.0-alpha.0](#changelog-since-v1190-alpha0) - - [Urgent Upgrade Notes](#urgent-upgrade-notes-4) + - [Changelog since v1.19.0-alpha.1](#changelog-since-v1190-alpha1) + - [Urgent Upgrade Notes](#urgent-upgrade-notes-3) - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-4) - [Changes by Kind](#changes-by-kind-9) - - [Deprecation](#deprecation-4) - [API Change](#api-change-8) + - [Feature](#feature-7) + - [Bug or Regression](#bug-or-regression-9) + - [Other (Cleanup or Flake)](#other-cleanup-or-flake-8) +- [v1.19.0-alpha.1](#v1190-alpha1) + - [Downloads for v1.19.0-alpha.1](#downloads-for-v1190-alpha1) + - [Client Binaries](#client-binaries-10) + - [Server Binaries](#server-binaries-10) + - [Node Binaries](#node-binaries-10) + - [Changelog since v1.19.0-alpha.0](#changelog-since-v1190-alpha0) + - [Urgent Upgrade Notes](#urgent-upgrade-notes-4) + - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-5) + - [Changes by Kind](#changes-by-kind-10) + - [Deprecation](#deprecation-5) + - [API Change](#api-change-9) +# v1.19.0 + +[Documentation](https://docs.k8s.io) + +## Downloads for v1.19.0 + +filename | sha512 hash +-------- | ----------- +[kubernetes.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes.tar.gz) | `448b941e973a519a500eb24786f6deb7eebd0e1ecb034941e382790ff69dfc2838715a222cfc53bea7b75f2c6aedc7425eded4aad69bf88773393155c737f9c0` +[kubernetes-src.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-src.tar.gz) | `47d253e6eb1f6da730f4f3885e205e6bfde88ffe66d92915465108c9eaf8e3c5d1ef515f8bf804a726db057433ecd25008ecdef624ee68ad9c103d1c7a615aad` + +### Client Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-client-darwin-amd64.tar.gz) | `7093a34298297e46bcd1ccb77a9c83ca93b8ccb63ce2099d3d8cd8911ccc384470ac202644843406f031c505a8960d247350a740d683d8910ca70a0b58791a1b` +[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-client-linux-386.tar.gz) | `891569cff7906732a42b20b86d1bf20a9fe873f87b106e717a5c0f80728b5823c2a00c7ccea7ec368382509f095735089ddd582190bc51dcbbcef6b8ebdbd5cc` +[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-client-linux-amd64.tar.gz) | `1590d4357136a71a70172e32820c4a68430d1b94cf0ac941ea17695fbe0c5440d13e26e24a2e9ebdd360c231d4cd16ffffbbe5b577c898c78f7ebdc1d8d00fa3` +[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-client-linux-arm.tar.gz) | `bc0fb19fb6af47f591adc64b5a36d3dffcadc35fdfd77a4a222e037dbd2ee53fafb84f13c4e307910cfa36b3a46704063b42a14ceaad902755ec14c492ccd51d` +[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-client-linux-arm64.tar.gz) | `6ff47f4fdfb3b5f2bfe18fd792fe9bfc747f06bf52de062ee803cda87ac4a98868d8e1211742e32dd443a4bdb770018bbdde704dae6abfc6d80c02bdfb4e0311` +[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-client-linux-ppc64le.tar.gz) | `d8816518adc3a7fc00f996f23ff84e6782a3ebbba7ef37ba44def47b0e6506fefeeaf37d0e197cecf0deb5bd1a8f9dd1ba82af6c29a6b9d21b8e62af965b6b81` +[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-client-linux-s390x.tar.gz) | `662fd4618f2b747d2b0951454b9148399f6cd25d3ca7c40457b6e02cb20df979138cad8cccd18fc8b265d9426c90828d3f0b2a6b40d9cd1a1bdc17219e35ed33` +[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-client-windows-386.tar.gz) | `d90cb92eb33ecbfab7a0e3a2da60ab10fc59132e4bc9abe0a1461a13222b5016704a7cfe0bf9bcf5d4ec55f505ffbbf53162dfe570e8f210e3f68b0d3a6bf7e3` +[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-client-windows-amd64.tar.gz) | `6ec32a8a62b69363a524c4f8db765ff4bd16ea7e5b0eb04aa5a667f8653eda18c357a97513d9e12f0ba1612516acb150deffb6e3608633c62b97a15b6efa7cc0` + +### Server Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-server-linux-amd64.tar.gz) | `7c268bd58e67d3c5016f3fcc9f4b6d2da7558af5a2c708ff3baf767b39e847e3d35d4fd2fa0f640bedbfb09a445036cafbe2f04357a88dada405cfc2ded76972` +[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-server-linux-arm.tar.gz) | `fcbf8d9004f1cd244a82b685abaf81f9638c3cc1373d78e705050042cfa6a004f8eed92f4721539dcd169c55b662d10416af19cff7537a8dfef802dc41b4088b` +[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-server-linux-arm64.tar.gz) | `e21f54a35ff29e919e98fe81758f654ea735983d5a9d08dab9484598b116843830a86ceb5cf0a23d27b7f9aba77e5f0aa107c171a0837ba781d508ebbea76f55` +[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-server-linux-ppc64le.tar.gz) | `c7014c782683f8f612c7805654b632aab4c5dce895ee8f9ef24360616e24240ce59ddf3cf27c3170df5450d8fe14fbca3fb7cddfc9b74ae37943081f0fa4b6b3` +[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-server-linux-s390x.tar.gz) | `3ac2d6b273e5b650f63260aae164fc6781ad5760f63cca911f5db9652c4bf32e7e7b25728987befc6dfda89c5c56969681b75f12b17141527d4e1d12f3d41f3c` + +### Node Binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-node-linux-amd64.tar.gz) | `d5e21432a4ab019f00cd1a52bbbdb00feb3db2ce96b41a58b1ee27d8847c485f5d0efe13036fd1155469d6d15f5873a5a892ecc0198f1bae1bf5b586a0129e75` +[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-node-linux-arm.tar.gz) | `bd57adf060813b06be2b33439d6f60d13630c0251ef96ba473274073200ea118f5622ec31ed714cc57bd9da410655e958a7700a5742ae7e4b6406ab12fbf21f3` +[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-node-linux-arm64.tar.gz) | `3ee70abc0a5cbf1ef5dde0d27055f4d17084585c36a2cf41e3fd925d206df0b583f50dc1c118472f198788b65b2c447aa40ad41646b88791659d2dfb69b3890b` +[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-node-linux-ppc64le.tar.gz) | `0f4368f229c082b2a75e7089a259e487d60b20bc8edf650dd7ca0fe23c51632397c2ef24c9c6cef078c95fce70d9229a5b4ff682c34f65a44bc4be3329c8ccde` +[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-node-linux-s390x.tar.gz) | `8f0b6839fc0ad51300221fa7f32134f8c687073715cc0839f7aacb21a075c66dab113369707d03e9e0e53be62ca2e1bdf04d4b26cff805ae9c7a5a4b864e3eae` +[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.19.0/kubernetes-node-windows-amd64.tar.gz) | `587651158c9999e64e06186ef2e65fe14d46ffdae28c5d8ee6261193bfe4967717f997ebe13857fa1893bbf492e1cc1f816bce86a94c6df9b7a0264848391397` + +## Changelog since v1.18.0 + +## What’s New (Major Themes) + +### Deprecation warnings + +SIG API Machinery implemented [warnings when using deprecated APIs](https://kubernetes.io/docs/reference/using-api/deprecation-policy/#rest-resources-aka-api-objects) +that are visible to `kubectl` users and API consumers, and metrics visible to cluster administrators. +Requests to a deprecated API are returned with a warning containing a target removal release and any replacement API. +Warnings can also be returned by [admission webhooks](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#admissionreview-response-warning), +and specified for [deprecated versions of custom resources](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#version-deprecation). + +### Avoiding permanent beta + +From Kubernetes 1.20 onwards, SIG Architecture will implement a new policy to transition all REST APIs out of beta within nine months. The idea behind the new policy is to avoid features staying in beta for a long time. Once a new API enters beta, it will have nine months to either: + + - reach GA, and deprecate the beta, or + - have a new beta version _(and deprecate the previous beta)_. + +If a REST API reaches the end of that nine-month countdown, then the next Kubernetes release will deprecate that API version. More information can be found on [the Kubernetes Blog](https://kubernetes.io/blog/2020/08/21/moving-forward-from-beta/). + +### Expanded CLI support for debugging workloads and nodes + +SIG CLI expanded on debugging with `kubectl` to support two new debugging workflows: debugging workloads by creating a copy, and debugging nodes by creating a container in host namespaces. These can be convenient to: + - Insert a debug container in clusters that don’t have ephemeral containers enabled + - Modify a crashing container for easier debugging by changing its image, for example to busybox, or its command, for example, to `sleep 1d` so you have time to `kubectl exec`. + - Inspect configuration files on a node's host filesystem + +Since these new workflows don’t require any new cluster features, they’re available for experimentation with your existing clusters via `kubectl alpha debug`. We’d love to hear your feedback on debugging with `kubectl`. Reach us by opening an issue, visiting [#sig-cli](https://kubernetes.slack.com/messages/sig-cli) or commenting on enhancement [#1441](https://features.k8s.io/1441). + +### Structured logging + +SIG Instrumentation standardized the structure of log messages and references to Kubernetes objects. Structured logging makes parsing, processing, storing, querying and analyzing logs easier. New methods in the klog library enforce log message structure. + +### EndpointSlices are now enabled by default + +EndpointSlices are an exciting new API that provides a scalable and extensible alternative to the Endpoints API. EndpointSlices track IP addresses, ports, readiness, and topology information for Pods backing a Service. + +In Kubernetes 1.19 this feature will be enabled by default with kube-proxy reading from EndpointSlices instead of Endpoints. Although this will mostly be an invisible change, it should result in noticeable scalability improvements in large clusters. It will also enable significant new features in future Kubernetes releases like Topology Aware Routing. + +### Ingress graduates to General Availability + +SIG Network has graduated the widely used [Ingress API](https://kubernetes.io/docs/concepts/services-networking/ingress/) to general availability in Kubernetes 1.19. This change recognises years of hard work by Kubernetes contributors, and paves the way for further work on future networking APIs in Kubernetes. + +### seccomp graduates to General Availability + +The seccomp (secure computing mode) support for Kubernetes has graduated to General Availability (GA). This feature can be used to increase the workload security by restricting the system calls for a Pod (applies to all containers) or single containers. + +Technically this means that a first class `seccompProfile` field has been added to the Pod and Container `securityContext` objects: + +```yaml +securityContext: + seccompProfile: + type: RuntimeDefault|Localhost|Unconfined # choose one of the three + localhostProfile: my-profiles/profile-allow.json # only necessary if type == Localhost +``` + +The support for `seccomp.security.alpha.kubernetes.io/pod` and `container.seccomp.security.alpha.kubernetes.io/...` annotations are now deprecated, and will be removed in Kubernetes v1.22.0. Right now, an automatic version skew handling will convert the new field into the annotations and vice versa. This means there is no action required for converting existing workloads in a cluster. + +You can find more information about how to restrict container system calls with seccomp in the new [documentation page on Kubernetes.io][seccomp-docs] + +[seccomp-docs]: https://kubernetes.io/docs/tutorials/clusters/seccomp/ + + +### Production images moved to community control + +As of Kuberenetes v1.19, Kubernetes container images are stored on a community-controlled storage bucket, +located at `{asia,eu,us}.gcr.io/k8s-artifacts-prod`. The `k8s.gcr.io` vanity domain has been updated +to this new bucket. This brings production artifacts under community control. + +### KubeSchedulerConfiguration graduates to Beta + +SIG Scheduling graduates `KubeSchedulerConfiguration` to Beta. The [KubeSchedulerConfiguration](https://kubernetes.io/docs/reference/scheduling/config) feature allows you to tune the algorithms and other settings of the kube-scheduler. You can easily enable or disable specific functionality (contained in plugins) in selected scheduling phases without having to rewrite the rest of the configuration. Furthermore, a single kube-scheduler instance can serve different configurations, called profiles. Pods can select the profile they want to be scheduled under via the `.spec.schedulerName` field. + +### CSI Migration - AzureDisk and vSphere (beta) + +In-tree volume plugins and all cloud provider dependencies are being moved out of the Kubernetes core. The CSI migration feature allows existing volumes using the legacy APIs to continue to function even when the code has been removed, by routing all the volume operations to the respective CSI driver. The AzureDisk and vSphere implementations of this feature have been promoted to beta. + +### Storage capacity tracking + +Traditionally, the Kubernetes scheduler was based on the assumption that additional persistent storage is available everywhere in the cluster and has infinite capacity. Topology constraints addressed the first point, but up to now pod scheduling was still done without considering that the remaining storage capacity may not be enough to start a new pod. [Storage capacity tracking](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1472-storage-capacity-tracking), a new alpha feature, addresses that by adding an API for a CSI driver to report storage capacity and uses that information in the Kubernetes scheduler when choosing a node for a pod. This feature serves as a stepping stone for supporting dynamic provisioning for local volumes and other volume types that are more capacity constrained. + +### CSI Volume health monitoring + +The alpha version of CSI health monitoring is being released with Kubernetes 1.19. This feature enables CSI Drivers to share abnormal volume conditions from the underlying storage systems with Kubernetes so that they can be reported as events on PVCs or Pods. This feature serves as a stepping stone towards programmatic detection and resolution of individual volume health issues by Kubernetes. + +### General ephemeral volumes + +Kubernetes provides volume plugins whose lifecycle is tied to a pod and can be used as scratch space (e.g. the builtin “empty dir” volume type) or to load some data in to a pod (e.g. the builtin ConfigMap and Secret volume types or “CSI inline volumes”). The new [generic ephemeral volumes](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1698-generic-ephemeral-volumes) alpha feature allows any existing storage driver that supports dynamic provisioning to be used as an ephemeral volume with the volume’s lifecycle bound to the Pod. + - It can be used to provide scratch storage that is different from the root disk, for example persistent memory, or a separate local disk on that node. + - All StorageClass parameters for volume provisioning are supported. + - All features supported with PersistentVolumeClaims are supported, such as storage capacity tracking, snapshots and restore, and volume resizing. + +### Immutable Secrets and ConfigMaps (beta) + +Secret and ConfigMap volumes can be marked as immutable, which significantly reduces load on the API server if there are many Secret and ConfigMap volumes in the cluster. +See [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) and [Secret](https://kubernetes.io/docs/concepts/configuration/secret/) for more information. + +### CSI Proxy for Windows + +The CSI Proxy for Windows is being promoted to beta along with the 1.19 release. This CSI Proxy enables CSI Drivers to run on Windows by allowing containers in Windows to perform privileged storage operations. At beta, the CSI Proxy for Windows supports storage drivers using direct attached disks and SMB. + +### Dashboard v2 + +SIG UI has released v2 of the Kubernetes Dashboard add-on. You can find the most recent release in the [kubernetes/dashboard](https://github.com/kubernetes/dashboard/releases) repository. Kubernetes Dashboard now includes CRD support, new translations, and an updated version of AngularJS. + +### Windows containerd support graduates to beta + +Initially introduced in Kubernetes 1.18, Windows containerd support goes to Beta on this release. This includes the added support for Windows Server version 2004 (complete version compatibility can be found in the [documentation for Windows](https://kubernetes.io/docs/setup/production-environment/windows/intro-windows-in-kubernetes/#cri-containerd)). + +SIG Windows is also including several addition to this release: + - Direct Server Return (DSR) mode support, allowing large numbers of services to scale up efficiently + - Windows containers now honor CPU limits + - Performance improvements for collections of metrics and summary + +### Increase the Kubernetes support window to one year + +As of Kubernetes 1.19, bugfix support via patch releases for a Kubernetes minor release has increased from 9 months to 1 year. + +A survey conducted in early 2019 by the working group (WG) Long Term Support (LTS) showed that a significant subset of Kubernetes end-users fail to upgrade within the previous 9-month support period. +A yearly support period provides the cushion end-users appear to desire, and is more in harmony with familiar annual planning cycles. + +## Known Issues + +The new storage capacity tracking alpha feature is known to be affected by a limitation of the WaitForFirstConsumer volume binding mode: [#94217](https://github.com/kubernetes/kubernetes/issues/94217) + +## Urgent Upgrade Notes + +### (No, really, you MUST read this before you upgrade) + +- ACTION REQUIRED : Switch core master base images (kube-controller-manager) from debian to distroless. If you need Flex Volumes support using scripts, please build your own image with required packages (like bash) ([#91329](https://github.com/kubernetes/kubernetes/pull/91329), [@dims](https://github.com/dims)) [SIG Cloud Provider, Release, Storage and Testing] + - Azure blob disk feature(`kind`: `Shared`, `Dedicated`) has been deprecated, you should use `kind`: `Managed` in `kubernetes.io/azure-disk` storage class. ([#92905](https://github.com/kubernetes/kubernetes/pull/92905), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] + - CVE-2020-8559 (Medium): Privilege escalation from compromised node to cluster. See https://github.com/kubernetes/kubernetes/issues/92914 for more details. + The API Server will no longer proxy non-101 responses for upgrade requests. This could break proxied backends (such as an extension API server) that respond to upgrade requests with a non-101 response code. ([#92941](https://github.com/kubernetes/kubernetes/pull/92941), [@tallclair](https://github.com/tallclair)) [SIG API Machinery] + - Kubeadm does not set the deprecated '--cgroup-driver' flag in /var/lib/kubelet/kubeadm-flags.env, it will be set in the kubelet config.yaml. If you have this flag in /var/lib/kubelet/kubeadm-flags.env or /etc/default/kubelet (/etc/sysconfig/kubelet for RPMs) please remove it and set the value using KubeletConfiguration ([#90513](https://github.com/kubernetes/kubernetes/pull/90513), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] + - Kubeadm now respects user specified etcd versions in the ClusterConfiguration and properly uses them. If users do not want to stick to the version specified in the ClusterConfiguration, they should edit the kubeadm-config config map and delete it. ([#89588](https://github.com/kubernetes/kubernetes/pull/89588), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle] + - Kubeadm respects resolvConf value set by user even if systemd-resolved service is active. kubeadm no longer sets the flag in '--resolv-conf' in /var/lib/kubelet/kubeadm-flags.env. If you have this flag in /var/lib/kubelet/kubeadm-flags.env or /etc/default/kubelet (/etc/sysconfig/kubelet for RPMs) please remove it and set the value using KubeletConfiguration ([#90394](https://github.com/kubernetes/kubernetes/pull/90394), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] + - Kubeadm: Move the "kubeadm init" phase "kubelet-start" later in the init workflow, after the "kubeconfig" phase. This makes kubeadm start the kubelet only after the KubeletConfiguration component config file (/var/lib/kubelet/config.yaml) is generated and solves a problem where init systems like OpenRC cannot crashloop the kubelet service. ([#90892](https://github.com/kubernetes/kubernetes/pull/90892), [@xphoniex](https://github.com/xphoniex)) [SIG Cluster Lifecycle] + - The 'kubeadm config upload' command is finally removed after a full GA deprecation cycle. If you still use it, please, use 'kubeadm init phase upload-config' instead ([#92610](https://github.com/kubernetes/kubernetes/pull/92610), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle] + - Upgrade kubescheduler.config.k8s.io/v1alpha2 to kubescheduler.config.k8s.io/v1beta1 + + - `.bindTimeoutSeconds` was moved as part of plugin args for `VolumeBinding`, + which can be configured separately per [profile](#profiles). + - `.extenders` are updated to satisfy API standards. In particular: + - `.extenders` decoding is case sensitive. All fields are affected. + - `.extenders[*].httpTimeout` is of type `metav1.Duration`. + - `.extenders[*].enableHttps` is renamed to `.extenders[*].enableHTTPS`. + - `RequestedToCapacityRatio` args decoding is case sensitive. All fields are affected. + - `DefaultPodTopologySpread` [plugin](#scheduling-plugins) is renamed to `SelectorSpread`. + - `Unreserve` extension point is removed from Profile definition. All `Reserve` + plugins implement an `Unreserve` call. + - `.disablePreemption` was removed. Users can disable preemption by disabling the + "DefaultPreemption" PostFilter plugin. ([#91420](https://github.com/kubernetes/kubernetes/pull/91420), [@pancernik](https://github.com/pancernik)) [SIG Scheduling] + +## Changes by Kind + +### Deprecation + +- Added support for vSphere in-tree volumes migration to vSphere CSI driver. The in-tree vSphere Volume plugin will be deprecated and removed in a future release. + + Users that self-deploy Kubernetes on vSphere should enable CSIMigration + CSIMigrationvSphere features and install the vSphere CSI Driver (https://github.com/kubernetes-sigs/vsphere-csi-driver) to avoid disruption to existing Pod and PVC objects at that time. Users should start using the vSphere CSI driver directly for any new volumes. + + The CSI Migration feature for vSphere Volume also requires minimum vSphere vCenter/ESXi Version to be 7.0u1 and minimum HW Version to be VM version 15. + + vSAN raw policy parameter is deprecated for the in-tree vSphere Volume plugin and will be removed in a future release. ([#90911](https://github.com/kubernetes/kubernetes/pull/90911), [@divyenpatel](https://github.com/divyenpatel)) [SIG API Machinery, Node and Storage] +- Apiextensions.k8s.io/v1beta1 is deprecated in favor of apiextensions.k8s.io/v1 ([#90673](https://github.com/kubernetes/kubernetes/pull/90673), [@deads2k](https://github.com/deads2k)) [SIG API Machinery] +- Apiregistration.k8s.io/v1beta1 is deprecated in favor of apiregistration.k8s.io/v1 ([#90672](https://github.com/kubernetes/kubernetes/pull/90672), [@deads2k](https://github.com/deads2k)) [SIG API Machinery] +- Authentication.k8s.io/v1beta1 and authorization.k8s.io/v1beta1 are deprecated in 1.19 in favor of v1 levels and will be removed in 1.22 ([#90458](https://github.com/kubernetes/kubernetes/pull/90458), [@deads2k](https://github.com/deads2k)) [SIG API Machinery and Auth] +- Autoscaling/v2beta1 is deprecated in favor of autoscaling/v2beta2 ([#90463](https://github.com/kubernetes/kubernetes/pull/90463), [@deads2k](https://github.com/deads2k)) [SIG Autoscaling] +- Coordination.k8s.io/v1beta1 is deprecated in 1.19, targeted for removal in 1.22, use v1 instead. ([#90559](https://github.com/kubernetes/kubernetes/pull/90559), [@deads2k](https://github.com/deads2k)) [SIG Scalability] +- Ensure that volume capability and staging target fields are present in nodeExpansion CSI calls + + Behaviour of NodeExpandVolume being called between NodeStage and NodePublish is deprecated for CSI volumes. CSI drivers should support calling NodeExpandVolume after NodePublish if they have node EXPAND_VOLUME capability ([#86968](https://github.com/kubernetes/kubernetes/pull/86968), [@gnufied](https://github.com/gnufied)) [SIG Storage] +- Feat: azure disk migration go beta in 1.19. Feature gates CSIMigration to Beta (on by default) and CSIMigrationAzureDisk to Beta (off by default since it requires installation of the AzureDisk CSI Driver) + The in-tree AzureDisk plugin "kubernetes.io/azure-disk" is now deprecated and will be removed in 1.23. Users should enable CSIMigration + CSIMigrationAzureDisk features and install the AzureDisk CSI Driver (https://github.com/kubernetes-sigs/azuredisk-csi-driver) to avoid disruption to existing Pod and PVC objects at that time. + Users should start using the AzureDisk CSI Driver directly for any new volumes. ([#90896](https://github.com/kubernetes/kubernetes/pull/90896), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] +- Kube-apiserver: the componentstatus API is deprecated. This API provided status of etcd, kube-scheduler, and kube-controller-manager components, but only worked when those components were local to the API server, and when kube-scheduler and kube-controller-manager exposed unsecured health endpoints. Instead of this API, etcd health is included in the kube-apiserver health check and kube-scheduler/kube-controller-manager health checks can be made directly against those components' health endpoints. ([#93570](https://github.com/kubernetes/kubernetes/pull/93570), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, Apps and Cluster Lifecycle] +- Kubeadm: `kubeadm config view` command has been deprecated and will be removed in a feature release, please use `kubectl get cm -o yaml -n kube-system kubeadm-config` to get the kubeadm config directly ([#92740](https://github.com/kubernetes/kubernetes/pull/92740), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] +- Kubeadm: deprecate the "kubeadm alpha kubelet config enable-dynamic" command. To continue using the feature please defer to the guide for "Dynamic Kubelet Configuration" at k8s.io. ([#92881](https://github.com/kubernetes/kubernetes/pull/92881), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] +- Kubeadm: deprecate the feature `--experimental-kustomize` in favor of `--experimental-patches`. The supported patch formats are the same as "kubectl patch". They are read as files from a directory and can be applied to kubeadm components during init/join/upgrade. Only patching of static Pods is supported for the time being. ([#92017](https://github.com/kubernetes/kubernetes/pull/92017), [@neolit123](https://github.com/neolit123)) +- Kubeadm: remove the deprecated "--use-api" flag for "kubeadm alpha certs renew" ([#90143](https://github.com/kubernetes/kubernetes/pull/90143), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] +- Kubernetes no longer supports building hyperkube images ([#88676](https://github.com/kubernetes/kubernetes/pull/88676), [@dims](https://github.com/dims)) [SIG Cluster Lifecycle and Release] +- Remove --export flag from kubectl get command. ([#88649](https://github.com/kubernetes/kubernetes/pull/88649), [@oke-py](https://github.com/oke-py)) [SIG CLI and Testing] +- Scheduler's alpha feature 'ResourceLimitsPriorityFunction' is completely removed due to lack of usage ([#91883](https://github.com/kubernetes/kubernetes/pull/91883), [@SataQiu](https://github.com/SataQiu)) [SIG Scheduling and Testing] +- Storage.k8s.io/v1beta1 is deprecated in favor of storage.k8s.io/v1 ([#90671](https://github.com/kubernetes/kubernetes/pull/90671), [@deads2k](https://github.com/deads2k)) [SIG Storage] + +### API Change + +- A new alpha-level field, `SupportsFsGroup`, has been introduced for CSIDrivers to allow them to specify whether they support volume ownership and permission modifications. The `CSIVolumeSupportFSGroup` feature gate must be enabled to allow this field to be used. ([#92001](https://github.com/kubernetes/kubernetes/pull/92001), [@huffmanca](https://github.com/huffmanca)) [SIG API Machinery, CLI and Storage] +- Added pod version skew strategy for seccomp profile to synchronize the deprecated annotations with the new API Server fields. Please see the corresponding section [in the KEP](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/20190717-seccomp-ga.md#version-skew-strategy) for more detailed explanations. ([#91408](https://github.com/kubernetes/kubernetes/pull/91408), [@saschagrunert](https://github.com/saschagrunert)) [SIG Apps, Auth, CLI and Node] +- Adds the ability to disable Accelerator/GPU metrics collected by Kubelet ([#91930](https://github.com/kubernetes/kubernetes/pull/91930), [@RenaudWasTaken](https://github.com/RenaudWasTaken)) [SIG Node] +- Admission webhooks can now return warning messages that are surfaced to API clients, using the `.response.warnings` field in the admission review response. ([#92667](https://github.com/kubernetes/kubernetes/pull/92667), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Testing] +- CertificateSigningRequest API conditions were updated: + - a `status` field was added; this field defaults to `True`, and may only be set to `True` for `Approved`, `Denied`, and `Failed` conditions + - a `lastTransitionTime` field was added + - a `Failed` condition type was added to allow signers to indicate permanent failure; this condition can be added via the `certificatesigningrequests/status` subresource. + - `Approved` and `Denied` conditions are mutually exclusive + - `Approved`, `Denied`, and `Failed` conditions can no longer be removed from a CSR ([#90191](https://github.com/kubernetes/kubernetes/pull/90191), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, Apps, Auth, CLI and Node] +- Cluster admins can now turn off /logs endpoint in kubelet by setting enableSystemLogHandler to false in their kubelet configuration file. enableSystemLogHandler can be set to true only when enableDebuggingHandlers is also set to true. ([#87273](https://github.com/kubernetes/kubernetes/pull/87273), [@SaranBalaji90](https://github.com/SaranBalaji90)) [SIG Node] +- Custom Endpoints are now mirrored to EndpointSlices by a new EndpointSliceMirroring controller. ([#91637](https://github.com/kubernetes/kubernetes/pull/91637), [@robscott](https://github.com/robscott)) [SIG API Machinery, Apps, Auth, Cloud Provider, Instrumentation, Network and Testing] +- CustomResourceDefinitions added support for marking versions as deprecated by setting `spec.versions[*].deprecated` to `true`, and for optionally overriding the default deprecation warning with a `spec.versions[*].deprecationWarning` field. ([#92329](https://github.com/kubernetes/kubernetes/pull/92329), [@liggitt](https://github.com/liggitt)) [SIG API Machinery] +- EnvVarSource api doc bug fixes ([#91194](https://github.com/kubernetes/kubernetes/pull/91194), [@wawa0210](https://github.com/wawa0210)) [SIG Apps] +- Fix bug in reflector that couldn't recover from "Too large resource version" errors ([#92537](https://github.com/kubernetes/kubernetes/pull/92537), [@wojtek-t](https://github.com/wojtek-t)) [SIG API Machinery] +- Fixed: log timestamps now include trailing zeros to maintain a fixed width ([#91207](https://github.com/kubernetes/kubernetes/pull/91207), [@iamchuckss](https://github.com/iamchuckss)) [SIG Apps and Node] +- Generic ephemeral volumes, a new alpha feature under the `GenericEphemeralVolume` feature gate, provide a more flexible alternative to `EmptyDir` volumes: as with `EmptyDir`, volumes are created and deleted for each pod automatically by Kubernetes. But because the normal provisioning process is used (`PersistentVolumeClaim`), storage can be provided by third-party storage vendors and all of the usual volume features work. Volumes don't need to be empt; for example, restoring from snapshot is supported. ([#92784](https://github.com/kubernetes/kubernetes/pull/92784), [@pohly](https://github.com/pohly)) [SIG API Machinery, Apps, Auth, CLI, Instrumentation, Node, Scheduling, Storage and Testing] +- Go1.14.4 is now the minimum version required for building Kubernetes ([#92438](https://github.com/kubernetes/kubernetes/pull/92438), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Release, Storage and Testing] +- Hide managedFields from kubectl edit command ([#91946](https://github.com/kubernetes/kubernetes/pull/91946), [@soltysh](https://github.com/soltysh)) [SIG CLI] +- K8s.io/apimachinery - scheme.Convert() now uses only explicitly registered conversions - default reflection based conversion is no longer available. `+k8s:conversion-gen` tags can be used with the `k8s.io/code-generator` component to generate conversions. ([#90018](https://github.com/kubernetes/kubernetes/pull/90018), [@wojtek-t](https://github.com/wojtek-t)) [SIG API Machinery, Apps and Testing] +- Kube-proxy: add `--bind-address-hard-fail` flag to treat failure to bind to a port as fatal ([#89350](https://github.com/kubernetes/kubernetes/pull/89350), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle and Network] +- Kubebuilder validation tags are set on metav1.Condition for CRD generation ([#92660](https://github.com/kubernetes/kubernetes/pull/92660), [@damemi](https://github.com/damemi)) [SIG API Machinery] +- Kubelet's --runonce option is now also available in Kubelet's config file as `runOnce`. ([#89128](https://github.com/kubernetes/kubernetes/pull/89128), [@vincent178](https://github.com/vincent178)) [SIG Node] +- Kubelet: add '--logging-format' flag to support structured logging ([#91532](https://github.com/kubernetes/kubernetes/pull/91532), [@afrouzMashaykhi](https://github.com/afrouzMashaykhi)) [SIG API Machinery, Cluster Lifecycle, Instrumentation and Node] +- Kubernetes is now built with golang 1.15.0-rc.1. + - The deprecated, legacy behavior of treating the CommonName field on X.509 serving certificates as a host name when no Subject Alternative Names are present is now disabled by default. It can be temporarily re-enabled by adding the value x509ignoreCN=0 to the GODEBUG environment variable. ([#93264](https://github.com/kubernetes/kubernetes/pull/93264), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Release, Scalability, Storage and Testing] +- Promote Immutable Secrets/ConfigMaps feature to Beta and enable the feature by default. + This allows to set `Immutable` field in Secrets or ConfigMap object to mark their contents as immutable. ([#89594](https://github.com/kubernetes/kubernetes/pull/89594), [@wojtek-t](https://github.com/wojtek-t)) [SIG Apps and Testing] +- Remove `BindTimeoutSeconds` from schedule configuration `KubeSchedulerConfiguration` ([#91580](https://github.com/kubernetes/kubernetes/pull/91580), [@cofyc](https://github.com/cofyc)) [SIG Scheduling and Testing] +- Remove kubescheduler.config.k8s.io/v1alpha1 ([#89298](https://github.com/kubernetes/kubernetes/pull/89298), [@gavinfish](https://github.com/gavinfish)) [SIG Scheduling] +- Reserve plugins that fail to reserve will trigger the unreserve extension point ([#92391](https://github.com/kubernetes/kubernetes/pull/92391), [@adtac](https://github.com/adtac)) [SIG Scheduling and Testing] +- Resolve regression in `metadata.managedFields` handling in update/patch requests submitted by older API clients ([#91748](https://github.com/kubernetes/kubernetes/pull/91748), [@apelisse](https://github.com/apelisse)) +- Scheduler: optionally check for available storage capacity before scheduling pods which have unbound volumes (alpha feature with the new `CSIStorageCapacity` feature gate, only works for CSI drivers and depends on support for the feature in a CSI driver deployment) ([#92387](https://github.com/kubernetes/kubernetes/pull/92387), [@pohly](https://github.com/pohly)) [SIG API Machinery, Apps, Auth, Scheduling, Storage and Testing] +- Seccomp support has graduated to GA. A new `seccompProfile` field is added to pod and container securityContext objects. Support for `seccomp.security.alpha.kubernetes.io/pod` and `container.seccomp.security.alpha.kubernetes.io/...` annotations is deprecated, and will be removed in v1.22. ([#91381](https://github.com/kubernetes/kubernetes/pull/91381), [@pjbgf](https://github.com/pjbgf)) [SIG Apps, Auth, Node, Release, Scheduling and Testing] +- ServiceAppProtocol feature gate is now beta and enabled by default, adding new AppProtocol field to Services and Endpoints. ([#90023](https://github.com/kubernetes/kubernetes/pull/90023), [@robscott](https://github.com/robscott)) [SIG Apps and Network] +- SetHostnameAsFQDN is a new field in PodSpec. When set to true, the fully + qualified domain name (FQDN) of a Pod is set as hostname of its containers. + In Linux containers, this means setting the FQDN in the hostname field of the + kernel (the nodename field of struct utsname). In Windows containers, this + means setting the this means setting the registry value of hostname for the registry key HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters to FQDN. + If a pod does not have FQDN, this has no effect. ([#91699](https://github.com/kubernetes/kubernetes/pull/91699), [@javidiaz](https://github.com/javidiaz)) [SIG Apps, Network, Node and Testing] +- The CertificateSigningRequest API is promoted to certificates.k8s.io/v1 with the following changes: + - `spec.signerName` is now required, and requests for `kubernetes.io/legacy-unknown` are not allowed to be created via the `certificates.k8s.io/v1` API + - `spec.usages` is now required, may not contain duplicate values, and must only contain known usages + - `status.conditions` may not contain duplicate types + - `status.conditions[*].status` is now required + - `status.certificate` must be PEM-encoded, and contain only CERTIFICATE blocks ([#91685](https://github.com/kubernetes/kubernetes/pull/91685), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, Architecture, Auth, CLI and Testing] +- The HugePageStorageMediumSize feature gate is now on by default allowing usage of multiple sizes huge page resources on a container level. ([#90592](https://github.com/kubernetes/kubernetes/pull/90592), [@bart0sh](https://github.com/bart0sh)) [SIG Node] +- The Kubelet's --node-status-max-images option is now available via the Kubelet config file field nodeStatusMaxImage ([#91275](https://github.com/kubernetes/kubernetes/pull/91275), [@knabben](https://github.com/knabben)) [SIG Node] +- The Kubelet's --seccomp-profile-root option is now marked as deprecated. ([#91182](https://github.com/kubernetes/kubernetes/pull/91182), [@knabben](https://github.com/knabben)) [SIG Node] +- The Kubelet's `--bootstrap-checkpoint-path` option is now removed. ([#91577](https://github.com/kubernetes/kubernetes/pull/91577), [@knabben](https://github.com/knabben)) [SIG Apps and Node] +- The Kubelet's `--cloud-provider` and `--cloud-config` options are now marked as deprecated. ([#90408](https://github.com/kubernetes/kubernetes/pull/90408), [@knabben](https://github.com/knabben)) [SIG Cloud Provider and Node] +- The Kubelet's `--enable-server` and `--provider-id` option is now available via the Kubelet config file field `enableServer` and `providerID` respectively. ([#90494](https://github.com/kubernetes/kubernetes/pull/90494), [@knabben](https://github.com/knabben)) [SIG Node] +- The Kubelet's `--kernel-memcg-notification` option is now available via the Kubelet config file field kernelMemcgNotification ([#91863](https://github.com/kubernetes/kubernetes/pull/91863), [@knabben](https://github.com/knabben)) [SIG Cloud Provider, Node and Testing] +- The Kubelet's `--really-crash-for-testing` and `--chaos-chance` options are now marked as deprecated. ([#90499](https://github.com/kubernetes/kubernetes/pull/90499), [@knabben](https://github.com/knabben)) [SIG Node] +- The Kubelet's `--volume-plugin-dir` option is now available via the Kubelet config file field `VolumePluginDir`. ([#88480](https://github.com/kubernetes/kubernetes/pull/88480), [@savitharaghunathan](https://github.com/savitharaghunathan)) [SIG Node] +- The `DefaultIngressClass` feature is now GA. The `--feature-gate` parameter will be removed in 1.20. ([#91957](https://github.com/kubernetes/kubernetes/pull/91957), [@cmluciano](https://github.com/cmluciano)) [SIG API Machinery, Apps, Network and Testing] +- The alpha `DynamicAuditing` feature gate and `auditregistration.k8s.io/v1alpha1` API have been removed and are no longer supported. ([#91502](https://github.com/kubernetes/kubernetes/pull/91502), [@deads2k](https://github.com/deads2k)) [SIG API Machinery, Auth and Testing] +- The kube-controller-manager managed signers can now have distinct signing certificates and keys. See the help about `--cluster-signing-[signer-name]-{cert,key}-file`. `--cluster-signing-{cert,key}-file` is still the default. ([#90822](https://github.com/kubernetes/kubernetes/pull/90822), [@deads2k](https://github.com/deads2k)) [SIG API Machinery, Apps and Auth] +- The unused `series.state` field, deprecated since v1.14, is removed from the `events.k8s.io/v1beta1` and `v1` Event types. ([#90449](https://github.com/kubernetes/kubernetes/pull/90449), [@wojtek-t](https://github.com/wojtek-t)) [SIG Apps] +- Unreserve extension point for scheduler plugins is merged into Reserve extension point ([#92200](https://github.com/kubernetes/kubernetes/pull/92200), [@adtac](https://github.com/adtac)) [SIG Scheduling and Testing] +- Update Golang to v1.14.4 ([#88638](https://github.com/kubernetes/kubernetes/pull/88638), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Cloud Provider, Release and Testing] +- Updated the API documentation for Service.Spec.IPFamily to warn that its exact + semantics will probably change before the dual-stack feature goes GA, and users + should look at ClusterIP or Endpoints, not IPFamily, to figure out if an existing + Service is IPv4, IPv6, or dual-stack. ([#91527](https://github.com/kubernetes/kubernetes/pull/91527), [@danwinship](https://github.com/danwinship)) [SIG Apps and Network] +- Users can configure a resource prefix to ignore a group of resources. ([#88842](https://github.com/kubernetes/kubernetes/pull/88842), [@angao](https://github.com/angao)) [SIG Node and Scheduling] +- `Ingress` and `IngressClass` resources have graduated to `networking.k8s.io/v1`. Ingress and IngressClass types in the `extensions/v1beta1` and `networking.k8s.io/v1beta1` API versions are deprecated and will no longer be served in 1.22+. Persisted objects can be accessed via the `networking.k8s.io/v1` API. Notable changes in v1 Ingress objects (v1beta1 field names are unchanged): + - `spec.backend` -> `spec.defaultBackend` + - `serviceName` -> `service.name` + - `servicePort` -> `service.port.name` (for string values) + - `servicePort` -> `service.port.number` (for numeric values) + - `pathType` no longer has a default value in v1; "Exact", "Prefix", or "ImplementationSpecific" must be specified + Other Ingress API updates: + - backends can now be resource or service backends + - `path` is no longer required to be a valid regular expression ([#89778](https://github.com/kubernetes/kubernetes/pull/89778), [@cmluciano](https://github.com/cmluciano)) [SIG API Machinery, Apps, CLI, Network and Testing] +- `NodeResourcesLeastAllocated` and `NodeResourcesMostAllocated` plugins now support customized weight on the CPU and memory. ([#90544](https://github.com/kubernetes/kubernetes/pull/90544), [@chendave](https://github.com/chendave)) [SIG Scheduling] +- `PostFilter` type is added to scheduler component config API on version v1beta1. ([#91547](https://github.com/kubernetes/kubernetes/pull/91547), [@Huang-Wei](https://github.com/Huang-Wei)) [SIG Scheduling] +- `RequestedToCapacityRatioArgs` encoding is now strict ([#91603](https://github.com/kubernetes/kubernetes/pull/91603), [@pancernik](https://github.com/pancernik)) [SIG Scheduling] +- `v1beta1` Scheduler `Extender` encoding is case-sensitive (`v1alpha1`/`v1alpha2` was case-insensitive), its `httpTimeout` field uses duration encoding (for example, one second is specified as `"1s"`), and the `enableHttps` field in `v1alpha1`/`v1alpha2` was renamed to `enableHTTPS`. ([#91625](https://github.com/kubernetes/kubernetes/pull/91625), [@pancernik](https://github.com/pancernik)) [SIG Scheduling] + +### Feature + +- A defaultpreemption plugin is registered and enabled in scheduler which replaces the legacy hard-coded Pod preemption logic. ([#92049](https://github.com/kubernetes/kubernetes/pull/92049), [@Huang-Wei](https://github.com/Huang-Wei)) [SIG Scheduling and Testing] +- A new extension point `PostFilter` is introduced to scheduler framework which runs after Filter phase to resolve scheduling filter failures. A typical implementation is running preemption logic. ([#91314](https://github.com/kubernetes/kubernetes/pull/91314), [@Huang-Wei](https://github.com/Huang-Wei)) [SIG Scheduling and Testing] +- ACTION REQUIRED : In CoreDNS v1.7.0, [metrics names have been changed](https://github.com/coredns/coredns/blob/master/notes/coredns-1.7.0.md#metric-changes) which will be backward incompatible with existing reporting formulas that use the old metrics' names. Adjust your formulas to the new names before upgrading. + + Kubeadm now includes CoreDNS version v1.7.0. Some of the major changes include: + - Fixed a bug that could cause CoreDNS to stop updating service records. + - Fixed a bug in the forward plugin where only the first upstream server is always selected no matter which policy is set. + - Remove already deprecated options `resyncperiod` and `upstream` in the Kubernetes plugin. + - Includes Prometheus metrics name changes (to bring them in line with standard Prometheus metrics naming convention). They will be backward incompatible with existing reporting formulas that use the old metrics' names. + - The federation plugin (allows for v1 Kubernetes federation) has been removed. + More details are available in https://coredns.io/2020/06/15/coredns-1.7.0-release/ ([#92651](https://github.com/kubernetes/kubernetes/pull/92651), [@rajansandeep](https://github.com/rajansandeep)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation] +- API requests to deprecated versions now receive a warning header in the API response, and cause a metric indicating use of a deprecated API to be published: + - `kubectl` outputs warnings to stderr, and accepts a `--warnings-as-errors` option to treat warnings as fatal errors + - `k8s.io/client-go` outputs warnings to stderr by default; override this per-client by setting `config.WarningHandler`, or per-process with `rest.SetDefaultWarningHandler()` + - `kube-apiserver` publishes `apiserver_requested_deprecated_apis` gauge metrics set to `1` for deprecated APIs which have been requested, with `group`, `version`, `resource`, `subresource`, and `removed_release` labels ([#73032](https://github.com/kubernetes/kubernetes/pull/73032), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, CLI, Instrumentation and Testing] +- Add --logging-format flag for component-base. Defaults to "text" using unchanged klog. ([#89683](https://github.com/kubernetes/kubernetes/pull/89683), [@yuzhiquan](https://github.com/yuzhiquan)) [SIG Instrumentation] +- Add --port flag to kubectl create deployment ([#91113](https://github.com/kubernetes/kubernetes/pull/91113), [@soltysh](https://github.com/soltysh)) [SIG CLI and Testing] +- Add .import-restrictions file to cmd/cloud-controller-manager. ([#90630](https://github.com/kubernetes/kubernetes/pull/90630), [@nilo19](https://github.com/nilo19)) [SIG API Machinery and Cloud Provider] +- Add Annotations to CRI-API ImageSpec objects. ([#90061](https://github.com/kubernetes/kubernetes/pull/90061), [@marosset](https://github.com/marosset)) [SIG Node and Windows] +- Add attempts label to scheduler's PodSchedulingDuration metric. ([#92650](https://github.com/kubernetes/kubernetes/pull/92650), [@ahg-g](https://github.com/ahg-g)) [SIG Instrumentation and Scheduling] +- Add client-side and server-side dry-run support to kubectl scale ([#89666](https://github.com/kubernetes/kubernetes/pull/89666), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG CLI and Testing] +- Add selectors to kubectl diff ([#90857](https://github.com/kubernetes/kubernetes/pull/90857), [@sethpollack](https://github.com/sethpollack)) [SIG CLI] +- Add support for cgroups v2 node validation ([#89901](https://github.com/kubernetes/kubernetes/pull/89901), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle and Node] +- Add support for pre allocated huge pages with different sizes, on node level ([#89252](https://github.com/kubernetes/kubernetes/pull/89252), [@odinuge](https://github.com/odinuge)) [SIG Apps and Node] +- Add tags support for Azure File Driver ([#92825](https://github.com/kubernetes/kubernetes/pull/92825), [@ZeroMagic](https://github.com/ZeroMagic)) [SIG Cloud Provider and Storage] +- Add tags support for azure disk driver ([#92356](https://github.com/kubernetes/kubernetes/pull/92356), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] +- Added --privileged flag to kubectl run ([#90569](https://github.com/kubernetes/kubernetes/pull/90569), [@brianpursley](https://github.com/brianpursley)) [SIG CLI] +- Added a new `GetPreferredAllocation()` call to the `v1beta1` device plugin API. ([#92665](https://github.com/kubernetes/kubernetes/pull/92665), [@klueska](https://github.com/klueska)) [SIG Node and Testing] +- Added feature support to Windows for configuring session affinity of Kubernetes services. + required: [Windows Server vNext Insider Preview Build 19551](https://blogs.windows.com/windowsexperience/2020/01/28/announcing-windows-server-vnext-insider-preview-build-19551/) (or higher) ([#91701](https://github.com/kubernetes/kubernetes/pull/91701), [@elweb9858](https://github.com/elweb9858)) [SIG Network and Windows] +- Added kube-apiserver metrics: apiserver_current_inflight_request_measures and, when API Priority and Fairness is enable, windowed_request_stats. ([#91177](https://github.com/kubernetes/kubernetes/pull/91177), [@MikeSpreitzer](https://github.com/MikeSpreitzer)) [SIG API Machinery, Instrumentation and Testing] +- Added service.beta.kubernetes.io/aws-load-balancer-target-node-labels annotation to target nodes in AWS LoadBalancer Services ([#90943](https://github.com/kubernetes/kubernetes/pull/90943), [@foobarfran](https://github.com/foobarfran)) [SIG Cloud Provider] +- Adding a set of debugging endpoints under prefix "/debug/flowcontrol/*" for dumping internal states of flow-control system with different granularity. ([#90967](https://github.com/kubernetes/kubernetes/pull/90967), [@yue9944882](https://github.com/yue9944882)) [SIG API Machinery] +- Adds profile label to kube-scheduler metric framework_extension_point_duration_seconds ([#92268](https://github.com/kubernetes/kubernetes/pull/92268), [@alculquicondor](https://github.com/alculquicondor)) [SIG Instrumentation and Scheduling] +- Adds profile label to kube-scheduler metric schedule_attempts_total + - Adds result and profile label to e2e_scheduling_duration_seconds. Times for unschedulable and error attempts are now recorded. ([#92202](https://github.com/kubernetes/kubernetes/pull/92202), [@alculquicondor](https://github.com/alculquicondor)) [SIG Instrumentation and Scheduling] +- Audit events for API requests to deprecated API versions now include a `"k8s.io/deprecated": "true"` audit annotation. If a target removal release is identified, the audit event includes a `"k8s.io/removal-release": "."` audit annotation as well. ([#92842](https://github.com/kubernetes/kubernetes/pull/92842), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Instrumentation] +- Bump Dashboard to v2.0.1 ([#91526](https://github.com/kubernetes/kubernetes/pull/91526), [@maciaszczykm](https://github.com/maciaszczykm)) [SIG Cloud Provider] +- Cloud node-controller use InstancesV2 ([#91319](https://github.com/kubernetes/kubernetes/pull/91319), [@gongguan](https://github.com/gongguan)) [SIG Apps, Cloud Provider, Scalability and Storage] +- Deps: Update to Golang 1.13.9 + - build: Remove kube-cross image building ([#89275](https://github.com/kubernetes/kubernetes/pull/89275), [@justaugustus](https://github.com/justaugustus)) [SIG Release and Testing] +- Detailed scheduler scoring result can be printed at verbose level 10. ([#89384](https://github.com/kubernetes/kubernetes/pull/89384), [@Huang-Wei](https://github.com/Huang-Wei)) [SIG Scheduling] +- E2e.test can print the list of conformance tests that need to pass for the cluster to be conformant. ([#88924](https://github.com/kubernetes/kubernetes/pull/88924), [@dims](https://github.com/dims)) [SIG Architecture and Testing] +- Enable feature Gate DefaultPodTopologySpread to use PodTopologySpread plugin to do defaultspreading. In doing so, legacy DefaultPodTopologySpread plugin is disabled. ([#91793](https://github.com/kubernetes/kubernetes/pull/91793), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] +- EndpointSlice controller waits longer to retry failed sync. ([#89438](https://github.com/kubernetes/kubernetes/pull/89438), [@robscott](https://github.com/robscott)) [SIG Apps and Network] +- Extend AWS azToRegion method to support Local Zones ([#90874](https://github.com/kubernetes/kubernetes/pull/90874), [@Jeffwan](https://github.com/Jeffwan)) [SIG Cloud Provider] +- Feat: add azure shared disk support ([#89511](https://github.com/kubernetes/kubernetes/pull/89511), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] +- Feat: change azure disk api-version ([#89250](https://github.com/kubernetes/kubernetes/pull/89250), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] +- Feat: support [Azure shared disk](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/disks-shared-enable), added a new field(`maxShares`) in azure disk storage class: + + kind: StorageClass + apiVersion: storage.k8s.io/v1 + metadata: + name: shared-disk + provisioner: kubernetes.io/azure-disk + parameters: + skuname: Premium_LRS # Currently only available with premium SSDs. + cachingMode: None # ReadOnly host caching is not available for premium SSDs with maxShares>1 + maxShares: 2 ([#89328](https://github.com/kubernetes/kubernetes/pull/89328), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] +- Improves IPVS proxy performance by only running `EnsureDummyInterface` if the virtual server address is not binded already. ([#92609](https://github.com/kubernetes/kubernetes/pull/92609), [@andrewsykim](https://github.com/andrewsykim)) [SIG Network] +- Kube-Proxy now supports EndpointSlices on Windows with the EndpointSliceProxying feature gate. ([#90909](https://github.com/kubernetes/kubernetes/pull/90909), [@kumarvin123](https://github.com/kumarvin123)) [SIG Network and Windows] +- Kube-Proxy now supports IPv6DualStack on Windows with the IPv6DualStack feature gate. ([#90853](https://github.com/kubernetes/kubernetes/pull/90853), [@kumarvin123](https://github.com/kumarvin123)) [SIG Network, Node and Windows] +- Kube-addon-manager has been updated to v9.1.1 to allow overriding the default list of whitelisted resources (https://github.com/kubernetes/kubernetes/pull/91018) ([#91240](https://github.com/kubernetes/kubernetes/pull/91240), [@tosi3k](https://github.com/tosi3k)) [SIG Cloud Provider, Scalability and Testing] +- Kube-apiserver backed by etcd3 exports metric showing the database file size. ([#89151](https://github.com/kubernetes/kubernetes/pull/89151), [@jingyih](https://github.com/jingyih)) [SIG API Machinery] +- Kube-apiserver, kube-scheduler and kube-controller manager now use SO_REUSEPORT socket option when listening on address defined by --bind-address and --secure-port flags, when running on Unix systems (Windows is NOT supported). This allows to run multiple instances of those processes on a single host with the same configuration, which allows to update/restart them in a graceful way, without causing downtime. ([#88893](https://github.com/kubernetes/kubernetes/pull/88893), [@invidian](https://github.com/invidian)) [SIG API Machinery, Scheduling and Testing] +- Kube-apiserver: The NodeRestriction admission plugin now restricts Node labels kubelets are permitted to set when creating a new Node to the `--node-labels` parameters accepted by kubelets in 1.16+. ([#90307](https://github.com/kubernetes/kubernetes/pull/90307), [@liggitt](https://github.com/liggitt)) [SIG Auth and Node] +- Kube-controller-manager: add '--logging-format' flag to support structured logging ([#91521](https://github.com/kubernetes/kubernetes/pull/91521), [@SataQiu](https://github.com/SataQiu)) [SIG API Machinery and Instrumentation] +- Kube-controller-manager: the `--experimental-cluster-signing-duration` flag is marked as deprecated for removal in v1.22, and is replaced with `--cluster-signing-duration`. ([#91154](https://github.com/kubernetes/kubernetes/pull/91154), [@liggitt](https://github.com/liggitt)) [SIG Auth and Cloud Provider] +- Kube-proxy now consumes EndpointSlices instead of Endpoints by default on Linux. A new alpha `WindowsEndpointSliceProxying` feature gate allows the feature to be enabled on Windows. ([#92736](https://github.com/kubernetes/kubernetes/pull/92736), [@robscott](https://github.com/robscott)) [SIG Network] +- Kube-scheduler: add '--logging-format' flag to support structured logging ([#91522](https://github.com/kubernetes/kubernetes/pull/91522), [@SataQiu](https://github.com/SataQiu)) [SIG API Machinery, Cluster Lifecycle, Instrumentation and Scheduling] +- Kubeadm now distinguishes between generated and user supplied component configs, regenerating the former ones if a config upgrade is required ([#86070](https://github.com/kubernetes/kubernetes/pull/86070), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle] +- Kubeadm: Allow manually upgraded component configs to be supplied in a YAML file via the --config option during upgrade plan & apply. The old behavior of --config in which kubeadm configuration and component configs that overwrite everything cluster stored is preserved too. The behavior to use with --config is now determined based on whether kubeadm config API objects (API group "kubeadm.kubernetes.io") were supplied in the file or not. ([#91980](https://github.com/kubernetes/kubernetes/pull/91980), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle] +- Kubeadm: add startup probes for static Pods to protect slow starting containers ([#91179](https://github.com/kubernetes/kubernetes/pull/91179), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] +- Kubeadm: deprecate the "--csr-only" and "--csr-dir" flags of the "kubeadm init phase certs" subcommands. Please use "kubeadm alpha certs generate-csr" instead. This new command allows you to generate new private keys and certificate signing requests for all the control-plane components, so that the certificates can be signed by an external CA. ([#92183](https://github.com/kubernetes/kubernetes/pull/92183), [@wallrj](https://github.com/wallrj)) [SIG Cluster Lifecycle] +- Kubeadm: during 'upgrade apply', if the kube-proxy ConfigMap is missing, assume that kube-proxy should not be upgraded. Same applies to a missing kube-dns/coredns ConfigMap for the DNS server addon. Note that this is a temporary workaround until 'upgrade apply' supports phases. Once phases are supported the kube-proxy/dns upgrade should be skipped manually. ([#89593](https://github.com/kubernetes/kubernetes/pull/89593), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] +- Kubeadm: switch control-plane static Pods to the "system-node-critical" priority class ([#90063](https://github.com/kubernetes/kubernetes/pull/90063), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] +- Kubeadm: upgrade plan now prints a table indicating the state of known component configs prior to upgrade ([#88124](https://github.com/kubernetes/kubernetes/pull/88124), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle] +- Kubectl supports taint no without specifying(without having to type the full resource name) ([#88723](https://github.com/kubernetes/kubernetes/pull/88723), [@wawa0210](https://github.com/wawa0210)) [SIG CLI] +- Kubelet: following metrics have been renamed: + kubelet_running_container_count --> kubelet_running_containers + kubelet_running_pod_count --> kubelet_running_pods ([#92407](https://github.com/kubernetes/kubernetes/pull/92407), [@RainbowMango](https://github.com/RainbowMango)) [SIG API Machinery, Cluster Lifecycle, Instrumentation and Node] +- Kubelets configured to rotate client certificates now publish a `certificate_manager_server_ttl_seconds` gauge metric indicating the remaining seconds until certificate expiration. ([#91148](https://github.com/kubernetes/kubernetes/pull/91148), [@liggitt](https://github.com/liggitt)) [SIG Auth and Node] +- New scoring for PodTopologySpreading that yields better spreading ([#90475](https://github.com/kubernetes/kubernetes/pull/90475), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] +- No actions required. This is a small enhancement to a utility library. ([#92440](https://github.com/kubernetes/kubernetes/pull/92440), [@luigibk](https://github.com/luigibk)) [SIG Network] +- PodTolerationRestriction: Mention Whitelist Scope in Error ([#87582](https://github.com/kubernetes/kubernetes/pull/87582), [@mrueg](https://github.com/mrueg)) [SIG Scheduling] +- Provider-specific Notes: vsphere: vsphere.conf - new option to disable credentials secret management for performance concerns ([#90836](https://github.com/kubernetes/kubernetes/pull/90836), [@Danil-Grigorev](https://github.com/Danil-Grigorev)) [SIG Cloud Provider] +- Rename pod_preemption_metrics to preemption_metrics. ([#93256](https://github.com/kubernetes/kubernetes/pull/93256), [@ahg-g](https://github.com/ahg-g)) [SIG Instrumentation and Scheduling] +- Rest.Config now supports a flag to override proxy configuration that was previously only configurable through environment variables. ([#81443](https://github.com/kubernetes/kubernetes/pull/81443), [@mikedanese](https://github.com/mikedanese)) [SIG API Machinery and Node] +- Scores from PodTopologySpreading have reduced differentiation as maxSkew increases. ([#90820](https://github.com/kubernetes/kubernetes/pull/90820), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] +- Server-side apply behavior has been regularized in the case where a field is removed from the applied configuration. Removed fields which have no other owners are deleted from the live object, or reset to their default value if they have one. Safe ownership transfers, such as the transfer of a `replicas` field from a user to an HPA without resetting to the default value are documented in [Transferring Ownership](https://kubernetes.io/docs/reference/using-api/api-concepts/#transferring-ownership) ([#92661](https://github.com/kubernetes/kubernetes/pull/92661), [@jpbetz](https://github.com/jpbetz)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation and Testing] +- Service controller: only sync LB node pools when relevant fields in Node changes ([#90769](https://github.com/kubernetes/kubernetes/pull/90769), [@andrewsykim](https://github.com/andrewsykim)) [SIG Apps and Network] +- Set CSIMigrationvSphere feature gates to beta. + Users should enable CSIMigration + CSIMigrationvSphere features and install the vSphere CSI Driver (https://github.com/kubernetes-sigs/vsphere-csi-driver) to move workload from the in-tree vSphere plugin "kubernetes.io/vsphere-volume" to vSphere CSI Driver. + + Requires: vSphere vCenter/ESXi Version: 7.0u1, HW Version: VM version 15 ([#92816](https://github.com/kubernetes/kubernetes/pull/92816), [@divyenpatel](https://github.com/divyenpatel)) [SIG Cloud Provider and Storage] +- Support `kubectl create deployment` with replicas ([#91562](https://github.com/kubernetes/kubernetes/pull/91562), [@zhouya0](https://github.com/zhouya0)) +- Support a smooth upgrade from client-side apply to server-side apply without conflicts, as well as support the corresponding downgrade. ([#90187](https://github.com/kubernetes/kubernetes/pull/90187), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG API Machinery and Testing] +- Support create or update VMSS asynchronously. ([#89248](https://github.com/kubernetes/kubernetes/pull/89248), [@nilo19](https://github.com/nilo19)) [SIG Cloud Provider] +- Support for running on a host that uses cgroups v2 unified mode ([#85218](https://github.com/kubernetes/kubernetes/pull/85218), [@giuseppe](https://github.com/giuseppe)) [SIG Node] +- Switch core master base images (kube-apiserver, kube-scheduler) from debian to distroless ([#90674](https://github.com/kubernetes/kubernetes/pull/90674), [@dims](https://github.com/dims)) [SIG Cloud Provider, Release and Scalability] +- Switch etcd image (with migration scripts) from debian to distroless ([#91171](https://github.com/kubernetes/kubernetes/pull/91171), [@dims](https://github.com/dims)) [SIG API Machinery and Cloud Provider] +- The RotateKubeletClientCertificate feature gate has been promoted to GA, and the kubelet --feature-gate RotateKubeletClientCertificate parameter will be removed in 1.20. ([#91780](https://github.com/kubernetes/kubernetes/pull/91780), [@liggitt](https://github.com/liggitt)) [SIG Auth and Node] +- The SCTPSupport feature is now active by default. ([#88932](https://github.com/kubernetes/kubernetes/pull/88932), [@janosi](https://github.com/janosi)) [SIG Network] +- The `certificatesigningrequests/approval` subresource now supports patch API requests ([#91558](https://github.com/kubernetes/kubernetes/pull/91558), [@liggitt](https://github.com/liggitt)) [SIG Auth and Testing] +- The metric label name of `kubernetes_build_info` has been updated from `camel case` to `snake case`: + - gitVersion --> git_version + - gitCommit --> git_commit + - gitTreeState --> git_tree_state + - buildDate --> build_date + - goVersion --> go_version + + This change happens in `kube-apiserver`、`kube-scheduler`、`kube-proxy` and `kube-controller-manager`. ([#91805](https://github.com/kubernetes/kubernetes/pull/91805), [@RainbowMango](https://github.com/RainbowMango)) [SIG API Machinery, Cluster Lifecycle and Instrumentation] +- Trace output in apiserver logs is more organized and comprehensive. Traces are nested, and for all non-long running request endpoints, the entire filter chain is instrumented (e.g. authentication check is included). ([#88936](https://github.com/kubernetes/kubernetes/pull/88936), [@jpbetz](https://github.com/jpbetz)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation and Scheduling] +- Try to send watch bookmarks (if requested) periodically in addition to sending them right before timeout ([#90560](https://github.com/kubernetes/kubernetes/pull/90560), [@wojtek-t](https://github.com/wojtek-t)) [SIG API Machinery] +- Update cri-tools to v1.18.0 ([#89720](https://github.com/kubernetes/kubernetes/pull/89720), [@saschagrunert](https://github.com/saschagrunert)) [SIG Cloud Provider, Cluster Lifecycle, Release and Scalability] +- Update etcd client side to v3.4.4 ([#89169](https://github.com/kubernetes/kubernetes/pull/89169), [@jingyih](https://github.com/jingyih)) [SIG API Machinery and Cloud Provider] +- Update etcd client side to v3.4.7 ([#89822](https://github.com/kubernetes/kubernetes/pull/89822), [@jingyih](https://github.com/jingyih)) [SIG API Machinery and Cloud Provider] +- Update etcd client side to v3.4.9 ([#92075](https://github.com/kubernetes/kubernetes/pull/92075), [@jingyih](https://github.com/jingyih)) [SIG API Machinery, Cloud Provider and Instrumentation] +- Upgrade to azure-sdk v40.2.0 ([#89105](https://github.com/kubernetes/kubernetes/pull/89105), [@andyzhangx](https://github.com/andyzhangx)) [SIG CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Storage and Testing] +- Warn users that `kubectl port-forward` does not support UDP now ([#91616](https://github.com/kubernetes/kubernetes/pull/91616), [@knight42](https://github.com/knight42)) [SIG CLI] +- Weight of PodTopologySpread scheduling Score is doubled. ([#91258](https://github.com/kubernetes/kubernetes/pull/91258), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] +- `EventRecorder()` is exposed to `FrameworkHandle` interface so that scheduler plugin developers can choose to log cluster-level events. ([#92010](https://github.com/kubernetes/kubernetes/pull/92010), [@Huang-Wei](https://github.com/Huang-Wei)) [SIG Scheduling] +- `kubectl alpha debug` command now supports debugging pods by copy the original one. ([#90094](https://github.com/kubernetes/kubernetes/pull/90094), [@aylei](https://github.com/aylei)) [SIG CLI] +- `kubectl alpha debug` now supports debugging nodes by creating a debugging container running in the node's host namespaces. ([#92310](https://github.com/kubernetes/kubernetes/pull/92310), [@verb](https://github.com/verb)) [SIG CLI] +- `local-up-cluster.sh` installs CSI snapshotter by default now, can be disabled with `ENABLE_CSI_SNAPSHOTTER=false`. ([#91504](https://github.com/kubernetes/kubernetes/pull/91504), [@pohly](https://github.com/pohly)) +- `maxThreshold` of `ImageLocality` plugin is now scaled by the number of images in the pod, which helps to distinguish the node priorities for pod with several images. ([#91138](https://github.com/kubernetes/kubernetes/pull/91138), [@chendave](https://github.com/chendave)) [SIG Scheduling] + +### Documentation + +- Updated the instructions for deploying the sample app. ([#82785](https://github.com/kubernetes/kubernetes/pull/82785), [@ashish-billore](https://github.com/ashish-billore)) [SIG API Machinery] + +### Failing Test + +- Kube-proxy iptables min-sync-period defaults to 1 sec. Previously, it was 0. ([#92836](https://github.com/kubernetes/kubernetes/pull/92836), [@aojea](https://github.com/aojea)) [SIG Network] + +### Bug or Regression + +- A PV set from in-tree source will have ordered requirement values in NodeAffinity when converted to CSIPersistentVolumeSource ([#88987](https://github.com/kubernetes/kubernetes/pull/88987), [@jiahuif](https://github.com/jiahuif)) [SIG Storage] +- A panic in the apiserver caused by the `informer-sync` health checker is now fixed. ([#93600](https://github.com/kubernetes/kubernetes/pull/93600), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG API Machinery] +- An issue preventing GCP cloud-controller-manager running out-of-cluster to initialize new Nodes is now fixed. ([#90057](https://github.com/kubernetes/kubernetes/pull/90057), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG Apps and Cloud Provider] +- Avoid GCE API calls when initializing GCE CloudProvider for Kubelets. ([#90218](https://github.com/kubernetes/kubernetes/pull/90218), [@wojtek-t](https://github.com/wojtek-t)) [SIG Cloud Provider and Scalability] +- Avoid unnecessary GCE API calls when adding IP alises or reflecting them in Node object in GCE cloud provider. ([#90242](https://github.com/kubernetes/kubernetes/pull/90242), [@wojtek-t](https://github.com/wojtek-t)) [SIG Apps, Cloud Provider and Network] +- Avoid unnecessary scheduling churn when annotations are updated while Pods are being scheduled. ([#90373](https://github.com/kubernetes/kubernetes/pull/90373), [@fabiokung](https://github.com/fabiokung)) [SIG Scheduling] +- Azure auth module for kubectl now requests login after refresh token expires. ([#86481](https://github.com/kubernetes/kubernetes/pull/86481), [@tdihp](https://github.com/tdihp)) [SIG API Machinery and Auth] +- Azure: fix concurreny issue in lb creation ([#89604](https://github.com/kubernetes/kubernetes/pull/89604), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] +- Azure: per VMSS VMSS VMs cache to prevent throttling on clusters having many attached VMSS ([#93107](https://github.com/kubernetes/kubernetes/pull/93107), [@bpineau](https://github.com/bpineau)) [SIG Cloud Provider] +- Azure: set dest prefix and port for IPv6 inbound security rule ([#91831](https://github.com/kubernetes/kubernetes/pull/91831), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] +- Base-images: Update to kube-cross:v1.13.9-5 ([#90963](https://github.com/kubernetes/kubernetes/pull/90963), [@justaugustus](https://github.com/justaugustus)) [SIG Release and Testing] +- Bug fix for AWS NLB service when nodePort for existing servicePort changed manually. ([#89562](https://github.com/kubernetes/kubernetes/pull/89562), [@M00nF1sh](https://github.com/M00nF1sh)) [SIG Cloud Provider] +- CSINode initialization does not crash kubelet on startup when APIServer is not reachable or kubelet has not the right credentials yet. ([#89589](https://github.com/kubernetes/kubernetes/pull/89589), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] +- CVE-2020-8557 (Medium): Node-local denial of service via container /etc/hosts file. See https://github.com/kubernetes/kubernetes/issues/93032 for more details. ([#92916](https://github.com/kubernetes/kubernetes/pull/92916), [@joelsmith](https://github.com/joelsmith)) [SIG Node] +- Client-go: resolves an issue with informers falling back to full list requests when timeouts are encountered, rather than re-establishing a watch. ([#89652](https://github.com/kubernetes/kubernetes/pull/89652), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Testing] +- CloudNodeLifecycleController will check node existence status before shutdown status when monitoring nodes. ([#90737](https://github.com/kubernetes/kubernetes/pull/90737), [@jiahuif](https://github.com/jiahuif)) [SIG Apps and Cloud Provider] +- Containers which specify a `startupProbe` but not a `readinessProbe` were previously considered "ready" before the `startupProbe` completed, but are now considered "not-ready". ([#92196](https://github.com/kubernetes/kubernetes/pull/92196), [@thockin](https://github.com/thockin)) [SIG Node] +- Cordoned nodes are now deregistered from AWS target groups. ([#85920](https://github.com/kubernetes/kubernetes/pull/85920), [@hoelzro](https://github.com/hoelzro)) [SIG Cloud Provider] +- Do not add nodes labeled with kubernetes.azure.com/managed=false to backend pool of load balancer. ([#93034](https://github.com/kubernetes/kubernetes/pull/93034), [@matthias50](https://github.com/matthias50)) [SIG Cloud Provider] +- Do not retry volume expansion if CSI driver returns FailedPrecondition error ([#92986](https://github.com/kubernetes/kubernetes/pull/92986), [@gnufied](https://github.com/gnufied)) [SIG Node and Storage] +- Dockershim security: pod sandbox now always run with `no-new-privileges` and `runtime/default` seccomp profile + dockershim seccomp: custom profiles can now have smaller seccomp profiles when set at pod level ([#90948](https://github.com/kubernetes/kubernetes/pull/90948), [@pjbgf](https://github.com/pjbgf)) [SIG Node] +- Dual-stack: fix the bug that Service clusterIP does not respect specified ipFamily ([#89612](https://github.com/kubernetes/kubernetes/pull/89612), [@SataQiu](https://github.com/SataQiu)) [SIG Network] +- EndpointSliceMirroring controller now copies labels from Endpoints to EndpointSlices. ([#93442](https://github.com/kubernetes/kubernetes/pull/93442), [@robscott](https://github.com/robscott)) [SIG Apps and Network] +- Ensure Azure availability zone is always in lower cases. ([#89722](https://github.com/kubernetes/kubernetes/pull/89722), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] +- Eviction requests for pods that have a non-zero DeletionTimestamp will always succeed ([#91342](https://github.com/kubernetes/kubernetes/pull/91342), [@michaelgugino](https://github.com/michaelgugino)) [SIG Apps] +- Explain CRDs whose resource name are the same as builtin objects ([#89505](https://github.com/kubernetes/kubernetes/pull/89505), [@knight42](https://github.com/knight42)) [SIG API Machinery, CLI and Testing] +- Extend kube-apiserver /readyz with new "informer-sync" check ensuring that internal informers are synced. ([#92644](https://github.com/kubernetes/kubernetes/pull/92644), [@wojtek-t](https://github.com/wojtek-t)) [SIG API Machinery and Testing] +- Extended DSR loadbalancer feature in winkernel kube-proxy to HNS versions 9.3-9.max, 10.2+ ([#93080](https://github.com/kubernetes/kubernetes/pull/93080), [@elweb9858](https://github.com/elweb9858)) [SIG Network] +- First pod with required affinity terms can schedule only on nodes with matching topology keys. ([#91168](https://github.com/kubernetes/kubernetes/pull/91168), [@ahg-g](https://github.com/ahg-g)) [SIG Scheduling] +- Fix AWS Loadbalancer VPC CIDR calculation when CIDR in disassociated state exists. ([#92227](https://github.com/kubernetes/kubernetes/pull/92227), [@M00nF1sh](https://github.com/M00nF1sh)) [SIG Cloud Provider] +- Fix InstanceMetadataByProviderID for unmanaged nodes ([#92572](https://github.com/kubernetes/kubernetes/pull/92572), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] +- Fix `VirtualMachineScaleSets.virtualMachines.GET` not allowed issues when customers have set VMSS orchestrationMode. ([#91097](https://github.com/kubernetes/kubernetes/pull/91097), [@feiskyer](https://github.com/feiskyer)) +- Fix a bug that didn't allow to use IPv6 addresses with leading zeros ([#89341](https://github.com/kubernetes/kubernetes/pull/89341), [@aojea](https://github.com/aojea)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation] +- Fix a bug where ExternalTrafficPolicy is not applied to service ExternalIPs. ([#90537](https://github.com/kubernetes/kubernetes/pull/90537), [@freehan](https://github.com/freehan)) [SIG Network] +- Fix a condition when expiring nil VM entry in VMSS cache ([#92681](https://github.com/kubernetes/kubernetes/pull/92681), [@ArchangelSDY](https://github.com/ArchangelSDY)) [SIG Cloud Provider] +- Fix a racing issue where the scheduler may perform unnecessary scheduling attempts. ([#90660](https://github.com/kubernetes/kubernetes/pull/90660), [@Huang-Wei](https://github.com/Huang-Wei)) +- Fix an issue with container restarts using a modified configmap or secret subpath volume mount. ([#89629](https://github.com/kubernetes/kubernetes/pull/89629), [@fatedier](https://github.com/fatedier)) [SIG Architecture, Storage and Testing] +- Fix bug in the port allocation logic that caused that the NodePort creation with statically assigned portNumber collide in multi-master HA cluster ([#89937](https://github.com/kubernetes/kubernetes/pull/89937), [@aojea](https://github.com/aojea)) [SIG Network and Testing] +- Fix bug with xfs_repair from stopping xfs mount ([#89444](https://github.com/kubernetes/kubernetes/pull/89444), [@gnufied](https://github.com/gnufied)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation and Storage] +- Fix clusterdump info namespaces flag not working ([#91890](https://github.com/kubernetes/kubernetes/pull/91890), [@zhouya0](https://github.com/zhouya0)) [SIG CLI] +- Fix detection of SystemOOMs in which the victim is a container. ([#88871](https://github.com/kubernetes/kubernetes/pull/88871), [@dashpole](https://github.com/dashpole)) [SIG Node] +- Fix detection of image filesystem, disk metrics for devicemapper, detection of OOM Kills on 5.0+ linux kernels. ([#92919](https://github.com/kubernetes/kubernetes/pull/92919), [@dashpole](https://github.com/dashpole)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation and Node] +- Fix etcd version migration script in etcd image. ([#91925](https://github.com/kubernetes/kubernetes/pull/91925), [@wenjiaswe](https://github.com/wenjiaswe)) [SIG API Machinery] +- Fix flaws in Azure File CSI translation ([#90162](https://github.com/kubernetes/kubernetes/pull/90162), [@rfranzke](https://github.com/rfranzke)) [SIG Release and Storage] +- Fix instance not found issues when an Azure Node is recreated in a short time ([#93316](https://github.com/kubernetes/kubernetes/pull/93316), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] +- Fix issues when supported huge page sizes changes ([#80831](https://github.com/kubernetes/kubernetes/pull/80831), [@odinuge](https://github.com/odinuge)) [SIG Node and Testing] +- Fix kube-apiserver startup to wait for APIServices to be installed into the HTTP handler before reporting readiness. ([#89147](https://github.com/kubernetes/kubernetes/pull/89147), [@sttts](https://github.com/sttts)) [SIG API Machinery] +- Fix kubectl create --dryrun client ignores namespace ([#90502](https://github.com/kubernetes/kubernetes/pull/90502), [@zhouya0](https://github.com/zhouya0)) +- Fix kubectl create secret docker-registry --from-file not usable ([#90960](https://github.com/kubernetes/kubernetes/pull/90960), [@zhouya0](https://github.com/zhouya0)) [SIG CLI and Testing] +- Fix kubectl describe CSINode nil pointer error ([#89646](https://github.com/kubernetes/kubernetes/pull/89646), [@zhouya0](https://github.com/zhouya0)) [SIG CLI] +- Fix kubectl describe node for users not having access to lease information. ([#90469](https://github.com/kubernetes/kubernetes/pull/90469), [@uthark](https://github.com/uthark)) [SIG CLI] +- Fix kubectl describe output format for empty annotations. ([#91405](https://github.com/kubernetes/kubernetes/pull/91405), [@iyashu](https://github.com/iyashu)) [SIG CLI] +- Fix kubectl diff so it doesn't actually persist patches ([#89795](https://github.com/kubernetes/kubernetes/pull/89795), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG CLI and Testing] +- Fix kubectl run --dry-run client ignore namespace ([#90785](https://github.com/kubernetes/kubernetes/pull/90785), [@zhouya0](https://github.com/zhouya0)) [SIG CLI] +- Fix kubectl version should print version info without config file ([#89913](https://github.com/kubernetes/kubernetes/pull/89913), [@zhouya0](https://github.com/zhouya0)) [SIG API Machinery and CLI] +- Fix missing `-c` shorthand for `--container` flag of `kubectl alpha debug` ([#89674](https://github.com/kubernetes/kubernetes/pull/89674), [@superbrothers](https://github.com/superbrothers)) [SIG CLI] +- Fix printers ignoring object average value ([#89142](https://github.com/kubernetes/kubernetes/pull/89142), [@zhouya0](https://github.com/zhouya0)) [SIG API Machinery] +- Fix public IP not shown issues after assigning public IP to Azure VMs ([#90886](https://github.com/kubernetes/kubernetes/pull/90886), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] +- Fix scheduler crash when removing node before its pods ([#89908](https://github.com/kubernetes/kubernetes/pull/89908), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] +- Fix the VMSS name and resource group name when updating Azure VMSS for LoadBalancer backendPools ([#89337](https://github.com/kubernetes/kubernetes/pull/89337), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] +- Fix throttling issues when Azure VM computer name prefix is different from VMSS name ([#92793](https://github.com/kubernetes/kubernetes/pull/92793), [@feiskyer](https://github.com/feiskyer)) [SIG Cloud Provider] +- Fix: Azure deallocating node should be regarded as shut down ([#92257](https://github.com/kubernetes/kubernetes/pull/92257), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] +- Fix: GetLabelsForVolume panic issue for azure disk PV ([#92166](https://github.com/kubernetes/kubernetes/pull/92166), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] +- Fix: add azure file migration support on annotation support ([#91093](https://github.com/kubernetes/kubernetes/pull/91093), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Node] +- Fix: azure disk dangling attach issue which would cause API throttling ([#90749](https://github.com/kubernetes/kubernetes/pull/90749), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] +- Fix: determine the correct ip config based on ip family ([#93043](https://github.com/kubernetes/kubernetes/pull/93043), [@aramase](https://github.com/aramase)) [SIG Cloud Provider] +- Fix: don't use docker config cache if it's empty ([#92330](https://github.com/kubernetes/kubernetes/pull/92330), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] +- Fix: fix topology issue in azure disk storage class migration ([#91196](https://github.com/kubernetes/kubernetes/pull/91196), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] +- Fix: get attach disk error due to missing item in max count table ([#89768](https://github.com/kubernetes/kubernetes/pull/89768), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] +- Fix: incorrect max azure disk max count ([#92331](https://github.com/kubernetes/kubernetes/pull/92331), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] +- Fix: initial delay in mounting azure disk & file ([#93052](https://github.com/kubernetes/kubernetes/pull/93052), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] +- Fix: support removal of nodes backed by deleted non VMSS instances on Azure ([#91184](https://github.com/kubernetes/kubernetes/pull/91184), [@bpineau](https://github.com/bpineau)) [SIG Cloud Provider] +- Fix: use force detach for azure disk ([#91948](https://github.com/kubernetes/kubernetes/pull/91948), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] +- Fixed a 1.18 regression in wait.Forever that skips the backoff period on the first repeat ([#90476](https://github.com/kubernetes/kubernetes/pull/90476), [@zhan849](https://github.com/zhan849)) [SIG API Machinery] +- Fixed a bug that mistake use newObj as oldObj in endpoint slice update. ([#92339](https://github.com/kubernetes/kubernetes/pull/92339), [@fatkun](https://github.com/fatkun)) [SIG Apps and Network] +- Fixed a bug where executing a kubectl command with a jsonpath output expression that has a nested range would ignore expressions following the nested range. ([#88464](https://github.com/kubernetes/kubernetes/pull/88464), [@brianpursley](https://github.com/brianpursley)) [SIG API Machinery] +- Fixed a bug whereby the allocation of reusable CPUs and devices was not being honored when the TopologyManager was enabled ([#93189](https://github.com/kubernetes/kubernetes/pull/93189), [@klueska](https://github.com/klueska)) [SIG Node] +- Fixed a performance issue applying json patches to deeply nested objects ([#92069](https://github.com/kubernetes/kubernetes/pull/92069), [@tapih](https://github.com/tapih)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation] +- Fixed a regression preventing garbage collection of RBAC role and binding objects ([#90534](https://github.com/kubernetes/kubernetes/pull/90534), [@apelisse](https://github.com/apelisse)) [SIG Auth] +- Fixed a regression running kubectl commands with --local or --dry-run flags when no kubeconfig file is present ([#90243](https://github.com/kubernetes/kubernetes/pull/90243), [@soltysh](https://github.com/soltysh)) [SIG API Machinery, CLI and Testing] +- Fixed ambiguous behavior when bearer token (kubectl --token=..) and an exec credential plugin was configured in the same context - the bearer token now takes precedence. ([#91745](https://github.com/kubernetes/kubernetes/pull/91745), [@anderseknert](https://github.com/anderseknert)) [SIG API Machinery, Auth and Testing] +- Fixed an issue mounting credentials for service accounts whose name contains `.` characters ([#89696](https://github.com/kubernetes/kubernetes/pull/89696), [@nabokihms](https://github.com/nabokihms)) [SIG Auth] +- Fixed an issue that a Pod's nominatedNodeName cannot be cleared upon node deletion. ([#91750](https://github.com/kubernetes/kubernetes/pull/91750), [@Huang-Wei](https://github.com/Huang-Wei)) [SIG Scheduling and Testing] +- Fixed bug where a nonzero exit code was returned when initializing zsh completion even though zsh completion was successfully initialized ([#88165](https://github.com/kubernetes/kubernetes/pull/88165), [@brianpursley](https://github.com/brianpursley)) [SIG CLI] +- Fixed memory leak in endpointSliceTracker ([#92838](https://github.com/kubernetes/kubernetes/pull/92838), [@tnqn](https://github.com/tnqn)) [SIG Apps and Network] +- Fixed mountOptions in iSCSI and FibreChannel volume plugins. ([#89172](https://github.com/kubernetes/kubernetes/pull/89172), [@jsafrane](https://github.com/jsafrane)) [SIG Storage] +- Fixed node data lost in kube-scheduler for clusters with imbalance on number of nodes across zones ([#93355](https://github.com/kubernetes/kubernetes/pull/93355), [@maelk](https://github.com/maelk)) +- Fixed several bugs involving the IPFamily field when creating or updating services + in clusters with the IPv6DualStack feature gate enabled. + + Beware that the behavior of the IPFamily field is strange and inconsistent and will + likely be changed before the dual-stack feature goes GA. Users should treat the + field as "write-only" for now and should not make any assumptions about a service + based on its current IPFamily value. ([#91400](https://github.com/kubernetes/kubernetes/pull/91400), [@danwinship](https://github.com/danwinship)) [SIG Apps and Network] +- Fixed the EndpointSlice controller to run without error on a cluster with the OwnerReferencesPermissionEnforcement validating admission plugin enabled. ([#89741](https://github.com/kubernetes/kubernetes/pull/89741), [@marun](https://github.com/marun)) [SIG Auth and Network] +- Fixed the EndpointSliceController to correctly create endpoints for IPv6-only pods. + + Fixed the EndpointController to allow IPv6 headless services, if the IPv6DualStack + feature gate is enabled, by specifying `ipFamily: IPv6` on the service. (This already + worked with the EndpointSliceController.) ([#91399](https://github.com/kubernetes/kubernetes/pull/91399), [@danwinship](https://github.com/danwinship)) [SIG Apps and Network] +- Fixed using of a read-only iSCSI volume in multiple pods. ([#91738](https://github.com/kubernetes/kubernetes/pull/91738), [@jsafrane](https://github.com/jsafrane)) [SIG Storage and Testing] +- Fixes CSI volume attachment scaling issue by using informers. ([#91307](https://github.com/kubernetes/kubernetes/pull/91307), [@yuga711](https://github.com/yuga711)) [SIG API Machinery, Apps, Node, Storage and Testing] +- Fixes a bug defining a default value for a replicas field in a custom resource definition that has the scale subresource enabled ([#89833](https://github.com/kubernetes/kubernetes/pull/89833), [@liggitt](https://github.com/liggitt)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle and Instrumentation] +- Fixes a bug that non directory hostpath type can be recognized as HostPathFile and adds e2e tests for HostPathType ([#64829](https://github.com/kubernetes/kubernetes/pull/64829), [@dixudx](https://github.com/dixudx)) [SIG Apps, Storage and Testing] +- Fixes a problem with 63-second or 1-second connection delays with some VXLAN-based + network plugins which was first widely noticed in 1.16 (though some users saw it + earlier than that, possibly only with specific network plugins). If you were previously + using ethtool to disable checksum offload on your primary network interface, you should + now be able to stop doing that. ([#92035](https://github.com/kubernetes/kubernetes/pull/92035), [@danwinship](https://github.com/danwinship)) [SIG Network and Node] +- Fixes a regression in 1.17 that dropped cache-control headers on API requests ([#90468](https://github.com/kubernetes/kubernetes/pull/90468), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Testing] +- Fixes conversion error for HorizontalPodAutoscaler objects with invalid annotations ([#89963](https://github.com/kubernetes/kubernetes/pull/89963), [@liggitt](https://github.com/liggitt)) [SIG Autoscaling] +- Fixes kubectl to apply all validly built objects, instead of stopping on error. ([#89848](https://github.com/kubernetes/kubernetes/pull/89848), [@seans3](https://github.com/seans3)) [SIG CLI and Testing] +- Fixes regression in CPUManager that caused freeing of exclusive CPUs at incorrect times ([#90377](https://github.com/kubernetes/kubernetes/pull/90377), [@cbf123](https://github.com/cbf123)) [SIG Cloud Provider and Node] +- Fixes regression in CPUManager that had the (rare) possibility to release exclusive CPUs in app containers inherited from init containers. ([#90419](https://github.com/kubernetes/kubernetes/pull/90419), [@klueska](https://github.com/klueska)) [SIG Node] +- Fixes v1.18.0-rc.1 regression in `kubectl port-forward` when specifying a local and remote port ([#89401](https://github.com/kubernetes/kubernetes/pull/89401), [@liggitt](https://github.com/liggitt)) +- Fixing race condition with EndpointSlice controller garbage collection. ([#91311](https://github.com/kubernetes/kubernetes/pull/91311), [@robscott](https://github.com/robscott)) [SIG Apps, Network and Testing] +- For GCE cluster provider, fix bug of not being able to create internal type load balancer for clusters with more than 1000 nodes in a single zone. ([#89902](https://github.com/kubernetes/kubernetes/pull/89902), [@wojtek-t](https://github.com/wojtek-t)) [SIG Cloud Provider, Network and Scalability] +- For external storage e2e test suite, update external driver, to pick snapshot provisioner from VolumeSnapshotClass, when a VolumeSnapshotClass is explicitly provided as an input. ([#90878](https://github.com/kubernetes/kubernetes/pull/90878), [@saikat-royc](https://github.com/saikat-royc)) [SIG Storage and Testing] +- Get-kube.sh: fix order to get the binaries from the right bucket ([#91635](https://github.com/kubernetes/kubernetes/pull/91635), [@cpanato](https://github.com/cpanato)) [SIG Release] +- If firstTimestamp is not set use eventTime when printing event ([#89999](https://github.com/kubernetes/kubernetes/pull/89999), [@soltysh](https://github.com/soltysh)) [SIG CLI] +- If we set parameter cgroupPerQos=false and cgroupRoot=/docker,this function will retrun nodeAllocatableRoot=/docker/kubepods, it is not right, the correct return should be /docker. + cm.NodeAllocatableRoot(s.CgroupRoot, s.CgroupDriver) + + kubeDeps.CAdvisorInterface, err = cadvisor.New(imageFsInfoProvider, s.RootDirectory, cgroupRoots, cadvisor.UsingLegacyCadvisorStats(s.ContainerRuntime, s.RemoteRuntimeEndpoint)) + the above funtion,as we use cgroupRoots to create cadvisor interface,the wrong parameter cgroupRoots will lead eviction manager not to collect metric from /docker, then kubelet frequently print those error: + E0303 17:25:03.436781 63839 summary_sys_containers.go:47] Failed to get system container stats for "/docker": failed to get cgroup stats for "/docker": failed to get container info for "/docker": unknown container "/docker" + E0303 17:25:03.436809 63839 helpers.go:680] eviction manager: failed to construct signal: "allocatableMemory.available" error: system container "pods" not found in metrics ([#88970](https://github.com/kubernetes/kubernetes/pull/88970), [@mysunshine92](https://github.com/mysunshine92)) [SIG Node] +- In a HA env, during the period a standby scheduler lost connection to API server, if a Pod is deleted and recreated, and the standby scheduler becomes master afterwards, there could be a scheduler cache corruption. This PR fixes this issue. ([#91126](https://github.com/kubernetes/kubernetes/pull/91126), [@Huang-Wei](https://github.com/Huang-Wei)) [SIG Scheduling] +- In the kubelet resource metrics endpoint at /metrics/resource, change the names of the following metrics: + - node_cpu_usage_seconds --> node_cpu_usage_seconds_total + - container_cpu_usage_seconds --> container_cpu_usage_seconds_total + This is a partial revert of #86282, which was added in 1.18.0, and initially removed the _total suffix ([#89540](https://github.com/kubernetes/kubernetes/pull/89540), [@dashpole](https://github.com/dashpole)) [SIG Instrumentation and Node] +- Ipvs: only attempt setting of sysctlconnreuse on supported kernels ([#88541](https://github.com/kubernetes/kubernetes/pull/88541), [@cmluciano](https://github.com/cmluciano)) [SIG Network] +- Jsonpath support in kubectl / client-go serializes complex types (maps / slices / structs) as json instead of Go-syntax. ([#89660](https://github.com/kubernetes/kubernetes/pull/89660), [@pjferrell](https://github.com/pjferrell)) [SIG API Machinery, CLI and Cluster Lifecycle] +- Kube-aggregator certificates are dynamically loaded on change from disk ([#92791](https://github.com/kubernetes/kubernetes/pull/92791), [@p0lyn0mial](https://github.com/p0lyn0mial)) [SIG API Machinery] +- Kube-apiserver: fixes scale subresource patch handling to avoid returning unnecessary 409 Conflict error to clients ([#90342](https://github.com/kubernetes/kubernetes/pull/90342), [@liggitt](https://github.com/liggitt)) [SIG Apps, Autoscaling and Testing] +- Kube-apiserver: jsonpath expressions with consecutive recursive descent operators are no longer evaluated for custom resource printer columns ([#93408](https://github.com/kubernetes/kubernetes/pull/93408), [@joelsmith](https://github.com/joelsmith)) [SIG API Machinery] +- Kube-apiserver: multiple comma-separated protocols in a single X-Stream-Protocol-Version header are now recognized, in addition to multiple headers, complying with RFC2616 ([#89857](https://github.com/kubernetes/kubernetes/pull/89857), [@tedyu](https://github.com/tedyu)) [SIG API Machinery] +- Kube-proxy IP family will be determined by the nodeIP used by the proxier. The order of precedence is: + 1. the configured --bind-address if the bind address is not 0.0.0.0 or :: + 2. the primary IP from the Node object, if set. + 3. if no IP is found, NodeIP defaults to 127.0.0.1 and the IP family to IPv4 ([#91725](https://github.com/kubernetes/kubernetes/pull/91725), [@aojea](https://github.com/aojea)) [SIG Network] +- Kube-proxy, in dual-stack mode, infers the service IP family from the ClusterIP instead of using the `Service.Spec.IPFamily` field ([#91357](https://github.com/kubernetes/kubernetes/pull/91357), [@aojea](https://github.com/aojea)) +- Kube-up now includes CoreDNS version v1.7.0. Some of the major changes include: + - Fixed a bug that could cause CoreDNS to stop updating service records. + - Fixed a bug in the forward plugin where only the first upstream server is always selected no matter which policy is set. + - Remove already deprecated options `resyncperiod` and `upstream` in the Kubernetes plugin. + - Includes Prometheus metrics name changes (to bring them in line with standard Prometheus metrics naming convention). They will be backward incompatible with existing reporting formulas that use the old metrics' names. + - The federation plugin (allows for v1 Kubernetes federation) has been removed. + More details are available in https://coredns.io/2020/06/15/coredns-1.7.0-release/ ([#92718](https://github.com/kubernetes/kubernetes/pull/92718), [@rajansandeep](https://github.com/rajansandeep)) [SIG Cloud Provider] +- Kube-up: fixes setup of validating admission webhook credential configuration ([#91995](https://github.com/kubernetes/kubernetes/pull/91995), [@liggitt](https://github.com/liggitt)) [SIG Cloud Provider and Cluster Lifecycle] +- Kubeadm increased to 5 minutes its timeout for the TLS bootstrapping process to complete upon join ([#89735](https://github.com/kubernetes/kubernetes/pull/89735), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle] +- Kubeadm: Add retries for kubeadm join / UpdateStatus to make update status more resilient by adding a retry loop to this operation ([#91952](https://github.com/kubernetes/kubernetes/pull/91952), [@xlgao-zju](https://github.com/xlgao-zju)) [SIG Cluster Lifecycle] +- Kubeadm: add the deprecated flag --port=0 to kube-controller-manager and kube-scheduler manifests to disable insecure serving. Without this flag the components by default serve (e.g. /metrics) insecurely on the default node interface (controlled by --address). Users that wish to override this behavior and enable insecure serving can pass a custom --port=X via kubeadm's "extraArgs" mechanic for these components. ([#92720](https://github.com/kubernetes/kubernetes/pull/92720), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] +- Kubeadm: during "join", don't re-add an etcd member if it already exists in the cluster. ([#92118](https://github.com/kubernetes/kubernetes/pull/92118), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] +- Kubeadm: during "reset" do not remove the only remaining stacked etcd member from the cluster and just proceed with the cleanup of the local etcd storage. ([#91145](https://github.com/kubernetes/kubernetes/pull/91145), [@tnqn](https://github.com/tnqn)) [SIG Cluster Lifecycle] +- Kubeadm: during join when a check is performed that a Node with the same name already exists in the cluster, make sure the NodeReady condition is properly validated ([#89602](https://github.com/kubernetes/kubernetes/pull/89602), [@kvaps](https://github.com/kvaps)) [SIG Cluster Lifecycle] +- Kubeadm: ensure `image-pull-timeout` flag is respected during upgrade phase ([#90328](https://github.com/kubernetes/kubernetes/pull/90328), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle] +- Kubeadm: fix a bug where post upgrade to 1.18.x, nodes cannot join the cluster due to missing RBAC ([#89537](https://github.com/kubernetes/kubernetes/pull/89537), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] +- Kubeadm: fix misleading warning about passing control-plane related flags on 'kubeadm join' ([#89596](https://github.com/kubernetes/kubernetes/pull/89596), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] +- Kubeadm: increase robustness for "kubeadm join" when adding etcd members on slower setups ([#90645](https://github.com/kubernetes/kubernetes/pull/90645), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] +- Kubeadm: remove duplicate DNS names and IP addresses from generated certificates ([#92753](https://github.com/kubernetes/kubernetes/pull/92753), [@QianChenglong](https://github.com/QianChenglong)) [SIG Cluster Lifecycle] +- Kubectl azure authentication: fixed a regression in 1.18.0 where "spn:" prefix was unexpectedly added to the `apiserver-id` configuration in the kubeconfig file ([#89706](https://github.com/kubernetes/kubernetes/pull/89706), [@weinong](https://github.com/weinong)) [SIG API Machinery and Auth] +- Kubectl: fix the bug that kubectl autoscale does not honor '--name' flag ([#91855](https://github.com/kubernetes/kubernetes/pull/91855), [@SataQiu](https://github.com/SataQiu)) [SIG CLI] +- Kubectl: fix the bug that kubectl scale does not honor '--timeout' flag ([#91858](https://github.com/kubernetes/kubernetes/pull/91858), [@SataQiu](https://github.com/SataQiu)) [SIG CLI] +- Kubelet: fix the bug that kubelet help information can not show the right type of flags ([#88515](https://github.com/kubernetes/kubernetes/pull/88515), [@SataQiu](https://github.com/SataQiu)) [SIG Docs and Node] +- Kuberuntime security: pod sandbox now always runs with `runtime/default` seccomp profile + kuberuntime seccomp: custom profiles can now have smaller seccomp profiles when set at pod level ([#90949](https://github.com/kubernetes/kubernetes/pull/90949), [@pjbgf](https://github.com/pjbgf)) [SIG Node] +- Make Kubelet bootstrap certificate signal aware ([#92786](https://github.com/kubernetes/kubernetes/pull/92786), [@answer1991](https://github.com/answer1991)) [SIG API Machinery, Auth and Node] +- Node ([#89677](https://github.com/kubernetes/kubernetes/pull/89677), [@zhouya0](https://github.com/zhouya0)) [SIG CLI] +- On AWS nodes with multiple network interfaces, kubelet should now more reliably report addresses from secondary interfaces. ([#91889](https://github.com/kubernetes/kubernetes/pull/91889), [@anguslees](https://github.com/anguslees)) [SIG Cloud Provider] +- Pod Conditions updates are skipped for re-scheduling attempts ([#91252](https://github.com/kubernetes/kubernetes/pull/91252), [@alculquicondor](https://github.com/alculquicondor)) [SIG Scheduling] +- Pods can now be considered for preemption after a previously nominated node has become unschedulable and unresolvable. ([#92604](https://github.com/kubernetes/kubernetes/pull/92604), [@soulxu](https://github.com/soulxu)) +- Prevent PVC requested size overflow when expanding or creating a volume ([#90907](https://github.com/kubernetes/kubernetes/pull/90907), [@gnufied](https://github.com/gnufied)) [SIG Cloud Provider and Storage] +- Provides a fix to allow a cluster in a private Azure cloud to authenticate to ACR in the same cloud. ([#90425](https://github.com/kubernetes/kubernetes/pull/90425), [@DavidParks8](https://github.com/DavidParks8)) [SIG Cloud Provider] +- Refine aws loadbalancer worker node SG rule logic to be deterministic ([#92224](https://github.com/kubernetes/kubernetes/pull/92224), [@M00nF1sh](https://github.com/M00nF1sh)) [SIG Cloud Provider] +- Resolve regression in metadata.managedFields handling in create/update/patch requests not using server-side apply ([#91690](https://github.com/kubernetes/kubernetes/pull/91690), [@apelisse](https://github.com/apelisse)) [SIG API Machinery and Testing] +- Resolved a regression in v1.18.0-rc.1 mounting windows volumes ([#89319](https://github.com/kubernetes/kubernetes/pull/89319), [@mboersma](https://github.com/mboersma)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation and Storage] +- Resolves an issue using `kubectl certificate approve/deny` against a server serving the v1 CSR API ([#91691](https://github.com/kubernetes/kubernetes/pull/91691), [@liggitt](https://github.com/liggitt)) [SIG Auth and CLI] +- Restore the ability to `kubectl apply --prune` without --namespace flag. Since 1.17, `kubectl apply --prune` only prunes resources in the default namespace (or from kubeconfig) or explicitly specified in command line flag. But this is s breaking change from kubectl 1.16, which can prune resources in all namespace in config file. This patch restores the kubectl 1.16 behaviour. ([#89551](https://github.com/kubernetes/kubernetes/pull/89551), [@tatsuhiro-t](https://github.com/tatsuhiro-t)) [SIG CLI and Testing] +- Restores priority of static control plane pods in the cluster/gce/manifests control-plane manifests ([#89970](https://github.com/kubernetes/kubernetes/pull/89970), [@liggitt](https://github.com/liggitt)) [SIG Cluster Lifecycle and Node] +- Reverted devicemanager for Windows node added in 1.19rc1. ([#93263](https://github.com/kubernetes/kubernetes/pull/93263), [@liggitt](https://github.com/liggitt)) [SIG Node and Windows] +- Scheduler v1 Policy config or algorithm-provider settings can now be passed alongside v1beta1 ComponentConfig to aid transition from Policy to CC ([#92531](https://github.com/kubernetes/kubernetes/pull/92531), [@damemi](https://github.com/damemi)) [SIG Scheduling] +- Scheduling failures due to no nodes available are now reported as unschedulable under ```schedule_attempts_total``` metric. ([#90989](https://github.com/kubernetes/kubernetes/pull/90989), [@ahg-g](https://github.com/ahg-g)) [SIG Scheduling] +- Service account tokens bound to pods can now be used during the pod deletion grace period. ([#89583](https://github.com/kubernetes/kubernetes/pull/89583), [@liggitt](https://github.com/liggitt)) [SIG Auth] +- Service load balancers no longer exclude nodes marked unschedulable from the candidate nodes. The service load balancer exclusion label should be used instead. + + Users upgrading from 1.18 who have cordoned nodes should set the `node.kubernetes.io/exclude-from-external-load-balancers` label on the impacted nodes before upgrading if they wish those nodes to remain excluded from service load balancers. ([#90823](https://github.com/kubernetes/kubernetes/pull/90823), [@smarterclayton](https://github.com/smarterclayton)) [SIG Apps, Cloud Provider and Network] +- Support kubectl annotate --list option ([#92576](https://github.com/kubernetes/kubernetes/pull/92576), [@zhouya0](https://github.com/zhouya0)) [SIG CLI] +- Sync LB backend nodes for Service `Type=LoadBalancer` on Add/Delete node events. ([#81185](https://github.com/kubernetes/kubernetes/pull/81185), [@andrewsykim](https://github.com/andrewsykim)) +- The following components that do not expect non-empty, non-flag arguments will now print an error message and exit if an argument is specified: cloud-controller-manager, kube-apiserver, kube-controller-manager, kube-proxy, kubeadm {alpha|config|token|version}, kubemark. Flags should be prefixed with a single dash "-" (0x45) for short form or double dash "--" for long form. Before this change, malformed flags (for example, starting with a non-ascii dash character such as 0x8211: "–") would have been silently treated as positional arguments and ignored. ([#91349](https://github.com/kubernetes/kubernetes/pull/91349), [@neolit123](https://github.com/neolit123)) [SIG API Machinery, Cloud Provider, Cluster Lifecycle, Network and Scheduling] +- The terminationGracePeriodSeconds from pod spec is respected for the mirror pod. ([#92442](https://github.com/kubernetes/kubernetes/pull/92442), [@tedyu](https://github.com/tedyu)) [SIG Node and Testing] +- Update github.com/moby/ipvs to v1.0.1 to fix IPVS compatibility issue with older kernels ([#90555](https://github.com/kubernetes/kubernetes/pull/90555), [@andrewsykim](https://github.com/andrewsykim)) [SIG Network] +- Updates to pod status via the status subresource now validate that `status.podIP` and `status.podIPs` fields are well-formed. ([#90628](https://github.com/kubernetes/kubernetes/pull/90628), [@liggitt](https://github.com/liggitt)) [SIG Apps and Node] +- Wait for all CRDs to show up in discovery endpoint before reporting readiness. ([#89145](https://github.com/kubernetes/kubernetes/pull/89145), [@sttts](https://github.com/sttts)) [SIG API Machinery] +- When evicting, Pods in Pending state are removed without checking PDBs. ([#83906](https://github.com/kubernetes/kubernetes/pull/83906), [@michaelgugino](https://github.com/michaelgugino)) [SIG API Machinery, Apps, Node and Scheduling] +- [security] Vulnerability in golang.org/x/text/encoding/unicode ([#92219](https://github.com/kubernetes/kubernetes/pull/92219), [@voor](https://github.com/voor)) [SIG API Machinery, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation and Node] + +### Other (Cleanup or Flake) + +- --cache-dir sets cache directory for both http and discovery, defaults to $HOME/.kube/cache ([#92910](https://github.com/kubernetes/kubernetes/pull/92910), [@soltysh](https://github.com/soltysh)) [SIG API Machinery and CLI] +- Add `pod.Namespace` to the image log ([#91945](https://github.com/kubernetes/kubernetes/pull/91945), [@zhipengzuo](https://github.com/zhipengzuo)) +- Add the ability to disable kubeconfig file lock through DISABLE_KUBECONFIG_LOCK env var ([#92513](https://github.com/kubernetes/kubernetes/pull/92513), [@soltysh](https://github.com/soltysh)) [SIG API Machinery and CLI] +- Adds additional testing to ensure that udp pods conntrack are cleaned up ([#90180](https://github.com/kubernetes/kubernetes/pull/90180), [@JacobTanenbaum](https://github.com/JacobTanenbaum)) [SIG Architecture, Network and Testing] +- Adjusts the fsType for cinder values to be `ext4` if no fsType is specified. ([#90608](https://github.com/kubernetes/kubernetes/pull/90608), [@huffmanca](https://github.com/huffmanca)) [SIG Storage] +- Base-images: Use debian-base:v2.1.0 ([#90697](https://github.com/kubernetes/kubernetes/pull/90697), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery and Release] +- Base-images: Use debian-iptables:v12.1.0 ([#90782](https://github.com/kubernetes/kubernetes/pull/90782), [@justaugustus](https://github.com/justaugustus)) [SIG Release] +- Beta.kubernetes.io/arch is already deprecated since v1.14, are targeted for removal in v1.18 ([#89462](https://github.com/kubernetes/kubernetes/pull/89462), [@wawa0210](https://github.com/wawa0210)) [SIG Testing] +- Build: Update to debian-base@v2.1.2 and debian-iptables@v12.1.1 ([#93667](https://github.com/kubernetes/kubernetes/pull/93667), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery, Release and Testing] +- Change beta.kubernetes.io/os to kubernetes.io/os ([#89460](https://github.com/kubernetes/kubernetes/pull/89460), [@wawa0210](https://github.com/wawa0210)) [SIG Testing and Windows] +- Change beta.kubernetes.io/os to kubernetes.io/os ([#89461](https://github.com/kubernetes/kubernetes/pull/89461), [@wawa0210](https://github.com/wawa0210)) [SIG Cloud Provider and Cluster Lifecycle] +- Changes not found message when using `kubectl get` to retrieve not namespaced resources ([#89861](https://github.com/kubernetes/kubernetes/pull/89861), [@rccrdpccl](https://github.com/rccrdpccl)) [SIG CLI] +- CoreDNS will no longer be supporting Federation data translation for kube-dns ConfigMap ([#92716](https://github.com/kubernetes/kubernetes/pull/92716), [@rajansandeep](https://github.com/rajansandeep)) [SIG Cluster Lifecycle] +- Deprecate kubectl top flags related to heapster + Drop support of heapster in kubectl top ([#87498](https://github.com/kubernetes/kubernetes/pull/87498), [@serathius](https://github.com/serathius)) [SIG CLI] +- Deprecate the `--target-ram-md` flags that is no longer used for anything. ([#91818](https://github.com/kubernetes/kubernetes/pull/91818), [@wojtek-t](https://github.com/wojtek-t)) [SIG API Machinery] +- Drop some conformance tests that rely on Kubelet API directly ([#90615](https://github.com/kubernetes/kubernetes/pull/90615), [@dims](https://github.com/dims)) [SIG Architecture, Network, Release and Testing] +- Emit `WaitingForPodScheduled` event if the unbound PVC is in delay binding mode but used by a pod ([#91455](https://github.com/kubernetes/kubernetes/pull/91455), [@cofyc](https://github.com/cofyc)) [SIG Storage] +- Fix: license issue in blob disk feature ([#92824](https://github.com/kubernetes/kubernetes/pull/92824), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider] +- Improve server-side apply conflict errors by setting dedicated kubectl subcommand field managers ([#88885](https://github.com/kubernetes/kubernetes/pull/88885), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG CLI and Testing] +- IsFullyQualifiedDomainName() validates each label based on IsDNS1123Label. ([#90172](https://github.com/kubernetes/kubernetes/pull/90172), [@nak3](https://github.com/nak3)) [SIG API Machinery and Network] +- It is now possible to use the service annotation `cloud.google.com/network-tier: Standard` to configure the Network Tier of the GCE Loadbalancer ([#88532](https://github.com/kubernetes/kubernetes/pull/88532), [@zioproto](https://github.com/zioproto)) [SIG Cloud Provider, Network and Testing] +- Kube-aggregator: renames aggregator_unavailable_apiservice_count metric to aggregator_unavailable_apiservice_total ([#88156](https://github.com/kubernetes/kubernetes/pull/88156), [@p0lyn0mial](https://github.com/p0lyn0mial)) [SIG API Machinery] +- Kube-apiserver: openapi schemas published for custom resources now reference standard ListMeta schema definitions ([#92546](https://github.com/kubernetes/kubernetes/pull/92546), [@liggitt](https://github.com/liggitt)) [SIG API Machinery] +- Kube-proxy exposes a new metric, `kubeproxy_sync_proxy_rules_last_queued_timestamp_seconds`, that indicates the last time a change for kube-proxy was queued to be applied. ([#90175](https://github.com/kubernetes/kubernetes/pull/90175), [@squeed](https://github.com/squeed)) [SIG Instrumentation and Network] +- Kube-scheduler: The metric name `scheduler_total_preemption_attempts` has been renamed to `scheduler_preemption_attempts_total`. ([#91448](https://github.com/kubernetes/kubernetes/pull/91448), [@RainbowMango](https://github.com/RainbowMango)) [SIG API Machinery, Cluster Lifecycle, Instrumentation and Scheduling] +- Kube-up: defaults to limiting critical pods to the kube-system namespace to match behavior prior to 1.17 ([#93121](https://github.com/kubernetes/kubernetes/pull/93121), [@liggitt](https://github.com/liggitt)) [SIG Cloud Provider and Scheduling] +- Kubeadm now forwards the IPv6DualStack feature gate using the kubelet component config, instead of the kubelet command line ([#90840](https://github.com/kubernetes/kubernetes/pull/90840), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle] +- Kubeadm: do not use a DaemonSet for the pre-pull of control-plane images during "kubeadm upgrade apply". Individual node upgrades now pull the required images using a preflight check. The flag "--image-pull-timeout" for "kubeadm upgrade apply" is now deprecated and will be removed in a future release following a GA deprecation policy. ([#90788](https://github.com/kubernetes/kubernetes/pull/90788), [@xlgao-zju](https://github.com/xlgao-zju)) [SIG Cluster Lifecycle] +- Kubeadm: use two separate checks on /livez and /readyz for the kube-apiserver static Pod instead of using /healthz ([#90970](https://github.com/kubernetes/kubernetes/pull/90970), [@johscheuer](https://github.com/johscheuer)) [SIG Cluster Lifecycle] +- NONE ([#91597](https://github.com/kubernetes/kubernetes/pull/91597), [@elmiko](https://github.com/elmiko)) [SIG Autoscaling and Testing] +- Openapi-controller: remove the trailing `1` character literal from the rate limiting metric `APIServiceOpenAPIAggregationControllerQueue1` and rename it to `open_api_aggregation_controller` to adhere to Prometheus best practices. ([#77979](https://github.com/kubernetes/kubernetes/pull/77979), [@s-urbaniak](https://github.com/s-urbaniak)) [SIG API Machinery] +- Reduce event spam during a volume operation error. ([#89794](https://github.com/kubernetes/kubernetes/pull/89794), [@msau42](https://github.com/msau42)) [SIG Storage] +- Refactor the local nodeipam range allocator and instrument the cidrset used to store the allocated CIDRs with the following metrics: + "cidrset_cidrs_allocations_total", + "cidrset_cidrs_releases_total", + "cidrset_usage_cidrs", + "cidrset_allocation_tries_per_request", ([#90288](https://github.com/kubernetes/kubernetes/pull/90288), [@aojea](https://github.com/aojea)) [SIG Apps, Instrumentation, Network and Scalability] +- Remove deprecated --server-dry-run flag from kubectl apply ([#91308](https://github.com/kubernetes/kubernetes/pull/91308), [@julianvmodesto](https://github.com/julianvmodesto)) [SIG CLI and Testing] +- Renamed DefaultPodTopologySpread plugin to SelectorSpread plugin to avoid naming conflicts with feature Gate DefaultPodTopologySpread ([#92501](https://github.com/kubernetes/kubernetes/pull/92501), [@rakeshreddybandi](https://github.com/rakeshreddybandi)) [SIG Release, Scheduling and Testing] +- Replace framework.Failf with ExpectNoError ([#91811](https://github.com/kubernetes/kubernetes/pull/91811), [@lixiaobing1](https://github.com/lixiaobing1)) [SIG Instrumentation, Storage and Testing] +- Scheduler PreScore plugins are not executed if there is one filtered node or less. ([#89370](https://github.com/kubernetes/kubernetes/pull/89370), [@ahg-g](https://github.com/ahg-g)) [SIG Scheduling] +- The "HostPath should give a volume the correct mode" is no longer a conformance test ([#90861](https://github.com/kubernetes/kubernetes/pull/90861), [@dims](https://github.com/dims)) [SIG Architecture and Testing] +- The Kubelet's `--experimental-allocatable-ignore-eviction` option is now marked as deprecated. ([#91578](https://github.com/kubernetes/kubernetes/pull/91578), [@knabben](https://github.com/knabben)) [SIG Node] +- The Kubelet's `--experimental-mounter-path` and `--experimental-check-node-capabilities-before-mount` options are now marked as deprecated. ([#91373](https://github.com/kubernetes/kubernetes/pull/91373), [@knabben](https://github.com/knabben)) +- The PR adds functionality to generate events when a PV or PVC processing encounters certain failures. The events help users to know the reason for the failure so they can take necessary recovery actions. ([#89845](https://github.com/kubernetes/kubernetes/pull/89845), [@yuga711](https://github.com/yuga711)) [SIG Apps] +- The PodShareProcessNamespace feature gate has been removed, and the PodShareProcessNamespace is unconditionally enabled. ([#90099](https://github.com/kubernetes/kubernetes/pull/90099), [@tanjunchen](https://github.com/tanjunchen)) [SIG Node] +- The kube-apiserver `--kubelet-https` flag is deprecated. kube-apiserver connections to kubelets now unconditionally use `https` (kubelets have unconditionally used `https` to serve the endpoints the apiserver communicates with since before v1.0). ([#91630](https://github.com/kubernetes/kubernetes/pull/91630), [@liggitt](https://github.com/liggitt)) [SIG API Machinery and Node] +- Update CNI to v0.8.6 ([#91370](https://github.com/kubernetes/kubernetes/pull/91370), [@justaugustus](https://github.com/justaugustus)) [SIG Cloud Provider, Network, Release and Testing] +- Update Golang to v1.14.5 + - Update repo-infra to 0.0.7 (to support go1.14.5 and go1.13.13) + - Includes: + - bazelbuild/bazel-toolchains@3.3.2 + - bazelbuild/rules_go@v0.22.7 ([#93088](https://github.com/kubernetes/kubernetes/pull/93088), [@justaugustus](https://github.com/justaugustus)) [SIG Release and Testing] +- Update Golang to v1.14.6 + - Update repo-infra to 0.0.8 (to support go1.14.6 and go1.13.14) + - Includes: + - bazelbuild/bazel-toolchains@3.4.0 + - bazelbuild/rules_go@v0.22.8 ([#93198](https://github.com/kubernetes/kubernetes/pull/93198), [@justaugustus](https://github.com/justaugustus)) [SIG Release and Testing] +- Update corefile-migration library to 1.0.8 ([#91856](https://github.com/kubernetes/kubernetes/pull/91856), [@wawa0210](https://github.com/wawa0210)) [SIG Node] +- Update default etcd server version to 3.4.4 ([#89214](https://github.com/kubernetes/kubernetes/pull/89214), [@jingyih](https://github.com/jingyih)) [SIG API Machinery, Cluster Lifecycle and Testing] +- Update default etcd server version to 3.4.7 ([#89895](https://github.com/kubernetes/kubernetes/pull/89895), [@jingyih](https://github.com/jingyih)) [SIG API Machinery, Cluster Lifecycle and Testing] +- Update default etcd server version to 3.4.9 ([#92349](https://github.com/kubernetes/kubernetes/pull/92349), [@jingyih](https://github.com/jingyih)) [SIG API Machinery, Cloud Provider, Cluster Lifecycle and Testing] +- Update go.etcd.io/bbolt to v1.3.5 ([#92350](https://github.com/kubernetes/kubernetes/pull/92350), [@justaugustus](https://github.com/justaugustus)) [SIG API Machinery and Cloud Provider] +- Update opencontainers/runtime-spec dependency to v1.0.2 ([#89644](https://github.com/kubernetes/kubernetes/pull/89644), [@saschagrunert](https://github.com/saschagrunert)) [SIG Node] +- `beta.kubernetes.io/os` and `beta.kubernetes.io/arch` node labels are deprecated. Update node selectors to use `kubernetes.io/os` and `kubernetes.io/arch`. ([#91046](https://github.com/kubernetes/kubernetes/pull/91046), [@wawa0210](https://github.com/wawa0210)) [SIG Apps and Node] +- `kubectl config view` now redacts bearer tokens by default, similar to client certificates. The `--raw` flag can still be used to output full content. ([#88985](https://github.com/kubernetes/kubernetes/pull/88985), [@puerco](https://github.com/puerco)) + +## Dependencies + +### Added +- cloud.google.com/go/bigquery: v1.0.1 +- cloud.google.com/go/datastore: v1.0.0 +- cloud.google.com/go/pubsub: v1.0.1 +- cloud.google.com/go/storage: v1.0.0 +- dmitri.shuralyov.com/gpu/mtl: 666a987 +- github.com/cespare/xxhash/v2: [v2.1.1](https://github.com/cespare/xxhash/v2/tree/v2.1.1) +- github.com/checkpoint-restore/go-criu/v4: [v4.0.2](https://github.com/checkpoint-restore/go-criu/v4/tree/v4.0.2) +- github.com/chzyer/logex: [v1.1.10](https://github.com/chzyer/logex/tree/v1.1.10) +- github.com/chzyer/readline: [2972be2](https://github.com/chzyer/readline/tree/2972be2) +- github.com/chzyer/test: [a1ea475](https://github.com/chzyer/test/tree/a1ea475) +- github.com/containerd/cgroups: [0dbf7f0](https://github.com/containerd/cgroups/tree/0dbf7f0) +- github.com/containerd/continuity: [aaeac12](https://github.com/containerd/continuity/tree/aaeac12) +- github.com/containerd/fifo: [a9fb20d](https://github.com/containerd/fifo/tree/a9fb20d) +- github.com/containerd/go-runc: [5a6d9f3](https://github.com/containerd/go-runc/tree/5a6d9f3) +- github.com/containerd/ttrpc: [v1.0.0](https://github.com/containerd/ttrpc/tree/v1.0.0) +- github.com/coreos/bbolt: [v1.3.2](https://github.com/coreos/bbolt/tree/v1.3.2) +- github.com/coreos/go-systemd/v22: [v22.1.0](https://github.com/coreos/go-systemd/v22/tree/v22.1.0) +- github.com/cpuguy83/go-md2man/v2: [v2.0.0](https://github.com/cpuguy83/go-md2man/v2/tree/v2.0.0) +- github.com/docopt/docopt-go: [ee0de3b](https://github.com/docopt/docopt-go/tree/ee0de3b) +- github.com/go-gl/glfw/v3.3/glfw: [12ad95a](https://github.com/go-gl/glfw/v3.3/glfw/tree/12ad95a) +- github.com/go-ini/ini: [v1.9.0](https://github.com/go-ini/ini/tree/v1.9.0) +- github.com/godbus/dbus/v5: [v5.0.3](https://github.com/godbus/dbus/v5/tree/v5.0.3) +- github.com/ianlancetaylor/demangle: [5e5cf60](https://github.com/ianlancetaylor/demangle/tree/5e5cf60) +- github.com/ishidawataru/sctp: [7c296d4](https://github.com/ishidawataru/sctp/tree/7c296d4) +- github.com/moby/ipvs: [v1.0.1](https://github.com/moby/ipvs/tree/v1.0.1) +- github.com/moby/sys/mountinfo: [v0.1.3](https://github.com/moby/sys/mountinfo/tree/v0.1.3) +- github.com/moby/term: [672ec06](https://github.com/moby/term/tree/672ec06) +- github.com/russross/blackfriday/v2: [v2.0.1](https://github.com/russross/blackfriday/v2/tree/v2.0.1) +- github.com/shurcooL/sanitized_anchor_name: [v1.0.0](https://github.com/shurcooL/sanitized_anchor_name/tree/v1.0.0) +- github.com/ugorji/go: [v1.1.4](https://github.com/ugorji/go/tree/v1.1.4) +- github.com/yuin/goldmark: [v1.1.27](https://github.com/yuin/goldmark/tree/v1.1.27) +- google.golang.org/protobuf: v1.24.0 +- gotest.tools/v3: v3.0.2 +- k8s.io/klog/v2: v2.2.0 + +### Changed +- cloud.google.com/go: v0.38.0 → v0.51.0 +- github.com/Azure/azure-sdk-for-go: [v35.0.0+incompatible → v43.0.0+incompatible](https://github.com/Azure/azure-sdk-for-go/compare/v35.0.0...v43.0.0) +- github.com/Azure/go-autorest/autorest/adal: [v0.5.0 → v0.8.2](https://github.com/Azure/go-autorest/autorest/adal/compare/v0.5.0...v0.8.2) +- github.com/Azure/go-autorest/autorest/date: [v0.1.0 → v0.2.0](https://github.com/Azure/go-autorest/autorest/date/compare/v0.1.0...v0.2.0) +- github.com/Azure/go-autorest/autorest/mocks: [v0.2.0 → v0.3.0](https://github.com/Azure/go-autorest/autorest/mocks/compare/v0.2.0...v0.3.0) +- github.com/Azure/go-autorest/autorest: [v0.9.0 → v0.9.6](https://github.com/Azure/go-autorest/autorest/compare/v0.9.0...v0.9.6) +- github.com/GoogleCloudPlatform/k8s-cloud-provider: [27a4ced → 7901bc8](https://github.com/GoogleCloudPlatform/k8s-cloud-provider/compare/27a4ced...7901bc8) +- github.com/Microsoft/go-winio: [v0.4.14 → fc70bd9](https://github.com/Microsoft/go-winio/compare/v0.4.14...fc70bd9) +- github.com/Microsoft/hcsshim: [672e52e → 5eafd15](https://github.com/Microsoft/hcsshim/compare/672e52e...5eafd15) +- github.com/alecthomas/template: [a0175ee → fb15b89](https://github.com/alecthomas/template/compare/a0175ee...fb15b89) +- github.com/alecthomas/units: [2efee85 → c3de453](https://github.com/alecthomas/units/compare/2efee85...c3de453) +- github.com/beorn7/perks: [v1.0.0 → v1.0.1](https://github.com/beorn7/perks/compare/v1.0.0...v1.0.1) +- github.com/cilium/ebpf: [95b36a5 → 1c8d4c9](https://github.com/cilium/ebpf/compare/95b36a5...1c8d4c9) +- github.com/containerd/console: [84eeaae → v1.0.0](https://github.com/containerd/console/compare/84eeaae...v1.0.0) +- github.com/containerd/containerd: [v1.0.2 → v1.3.3](https://github.com/containerd/containerd/compare/v1.0.2...v1.3.3) +- github.com/containerd/typeurl: [2a93cfd → v1.0.0](https://github.com/containerd/typeurl/compare/2a93cfd...v1.0.0) +- github.com/containernetworking/cni: [v0.7.1 → v0.8.0](https://github.com/containernetworking/cni/compare/v0.7.1...v0.8.0) +- github.com/coredns/corefile-migration: [v1.0.6 → v1.0.10](https://github.com/coredns/corefile-migration/compare/v1.0.6...v1.0.10) +- github.com/coreos/pkg: [97fdf19 → 399ea9e](https://github.com/coreos/pkg/compare/97fdf19...399ea9e) +- github.com/docker/docker: [be7ac8b → aa6a989](https://github.com/docker/docker/compare/be7ac8b...aa6a989) +- github.com/docker/go-connections: [v0.3.0 → v0.4.0](https://github.com/docker/go-connections/compare/v0.3.0...v0.4.0) +- github.com/evanphx/json-patch: [v4.2.0+incompatible → e83c0a1](https://github.com/evanphx/json-patch/compare/v4.2.0...e83c0a1) +- github.com/fsnotify/fsnotify: [v1.4.7 → v1.4.9](https://github.com/fsnotify/fsnotify/compare/v1.4.7...v1.4.9) +- github.com/go-kit/kit: [v0.8.0 → v0.9.0](https://github.com/go-kit/kit/compare/v0.8.0...v0.9.0) +- github.com/go-logfmt/logfmt: [v0.3.0 → v0.4.0](https://github.com/go-logfmt/logfmt/compare/v0.3.0...v0.4.0) +- github.com/go-logr/logr: [v0.1.0 → v0.2.0](https://github.com/go-logr/logr/compare/v0.1.0...v0.2.0) +- github.com/golang/groupcache: [02826c3 → 215e871](https://github.com/golang/groupcache/compare/02826c3...215e871) +- github.com/golang/protobuf: [v1.3.2 → v1.4.2](https://github.com/golang/protobuf/compare/v1.3.2...v1.4.2) +- github.com/google/cadvisor: [v0.35.0 → v0.37.0](https://github.com/google/cadvisor/compare/v0.35.0...v0.37.0) +- github.com/google/go-cmp: [v0.3.0 → v0.4.0](https://github.com/google/go-cmp/compare/v0.3.0...v0.4.0) +- github.com/google/pprof: [3ea8567 → d4f498a](https://github.com/google/pprof/compare/3ea8567...d4f498a) +- github.com/googleapis/gax-go/v2: [v2.0.4 → v2.0.5](https://github.com/googleapis/gax-go/v2/compare/v2.0.4...v2.0.5) +- github.com/googleapis/gnostic: [v0.1.0 → v0.4.1](https://github.com/googleapis/gnostic/compare/v0.1.0...v0.4.1) +- github.com/gorilla/mux: [v1.7.0 → v1.7.3](https://github.com/gorilla/mux/compare/v1.7.0...v1.7.3) +- github.com/json-iterator/go: [v1.1.8 → v1.1.10](https://github.com/json-iterator/go/compare/v1.1.8...v1.1.10) +- github.com/jstemmer/go-junit-report: [af01ea7 → v0.9.1](https://github.com/jstemmer/go-junit-report/compare/af01ea7...v0.9.1) +- github.com/konsorten/go-windows-terminal-sequences: [v1.0.1 → v1.0.3](https://github.com/konsorten/go-windows-terminal-sequences/compare/v1.0.1...v1.0.3) +- github.com/kr/pretty: [v0.1.0 → v0.2.0](https://github.com/kr/pretty/compare/v0.1.0...v0.2.0) +- github.com/mattn/go-isatty: [v0.0.9 → v0.0.4](https://github.com/mattn/go-isatty/compare/v0.0.9...v0.0.4) +- github.com/matttproud/golang_protobuf_extensions: [v1.0.1 → c182aff](https://github.com/matttproud/golang_protobuf_extensions/compare/v1.0.1...c182aff) +- github.com/mistifyio/go-zfs: [v2.1.1+incompatible → f784269](https://github.com/mistifyio/go-zfs/compare/v2.1.1...f784269) +- github.com/mrunalp/fileutils: [7d4729f → abd8a0e](https://github.com/mrunalp/fileutils/compare/7d4729f...abd8a0e) +- github.com/opencontainers/runc: [v1.0.0-rc10 → 819fcc6](https://github.com/opencontainers/runc/compare/v1.0.0-rc10...819fcc6) +- github.com/opencontainers/runtime-spec: [v1.0.0 → 237cc4f](https://github.com/opencontainers/runtime-spec/compare/v1.0.0...237cc4f) +- github.com/opencontainers/selinux: [5215b18 → v1.5.2](https://github.com/opencontainers/selinux/compare/5215b18...v1.5.2) +- github.com/pkg/errors: [v0.8.1 → v0.9.1](https://github.com/pkg/errors/compare/v0.8.1...v0.9.1) +- github.com/prometheus/client_golang: [v1.0.0 → v1.7.1](https://github.com/prometheus/client_golang/compare/v1.0.0...v1.7.1) +- github.com/prometheus/common: [v0.4.1 → v0.10.0](https://github.com/prometheus/common/compare/v0.4.1...v0.10.0) +- github.com/prometheus/procfs: [v0.0.2 → v0.1.3](https://github.com/prometheus/procfs/compare/v0.0.2...v0.1.3) +- github.com/rubiojr/go-vhd: [0bfd3b3 → 02e2102](https://github.com/rubiojr/go-vhd/compare/0bfd3b3...02e2102) +- github.com/sirupsen/logrus: [v1.4.2 → v1.6.0](https://github.com/sirupsen/logrus/compare/v1.4.2...v1.6.0) +- github.com/spf13/cobra: [v0.0.5 → v1.0.0](https://github.com/spf13/cobra/compare/v0.0.5...v1.0.0) +- github.com/spf13/viper: [v1.3.2 → v1.4.0](https://github.com/spf13/viper/compare/v1.3.2...v1.4.0) +- github.com/tmc/grpc-websocket-proxy: [89b8d40 → 0ad062e](https://github.com/tmc/grpc-websocket-proxy/compare/89b8d40...0ad062e) +- github.com/urfave/cli: [v1.20.0 → v1.22.2](https://github.com/urfave/cli/compare/v1.20.0...v1.22.2) +- github.com/vishvananda/netlink: [v1.0.0 → v1.1.0](https://github.com/vishvananda/netlink/compare/v1.0.0...v1.1.0) +- github.com/vishvananda/netns: [be1fbed → 52d707b](https://github.com/vishvananda/netns/compare/be1fbed...52d707b) +- go.etcd.io/bbolt: v1.3.3 → v1.3.5 +- go.etcd.io/etcd: 3cf2f69 → 18dfb9c +- go.opencensus.io: v0.21.0 → v0.22.2 +- go.uber.org/atomic: v1.3.2 → v1.4.0 +- golang.org/x/crypto: bac4c82 → 75b2880 +- golang.org/x/exp: 4b39c73 → da58074 +- golang.org/x/image: 0694c2d → cff245a +- golang.org/x/lint: 959b441 → fdd1cda +- golang.org/x/mobile: d3739f8 → d2bd2a2 +- golang.org/x/mod: 4bf6d31 → v0.3.0 +- golang.org/x/net: 13f9640 → ab34263 +- golang.org/x/oauth2: 0f29369 → 858c2ad +- golang.org/x/sys: fde4db3 → ed371f2 +- golang.org/x/text: v0.3.2 → v0.3.3 +- golang.org/x/time: 9d24e82 → 555d28b +- golang.org/x/tools: 65e3620 → c1934b7 +- golang.org/x/xerrors: a985d34 → 9bdfabe +- google.golang.org/api: 5213b80 → v0.15.1 +- google.golang.org/appengine: v1.5.0 → v1.6.5 +- google.golang.org/genproto: 24fa4b2 → cb27e3a +- google.golang.org/grpc: v1.26.0 → v1.27.0 +- gopkg.in/check.v1: 788fd78 → 41f04d3 +- honnef.co/go/tools: v0.0.1-2019.2.2 → v0.0.1-2019.2.3 +- k8s.io/gengo: 36b2048 → 8167cfd +- k8s.io/kube-openapi: bf4fb3b → 656914f +- k8s.io/system-validators: v1.0.4 → v1.1.2 +- k8s.io/utils: 0a110f9 → d5654de +- sigs.k8s.io/apiserver-network-proxy/konnectivity-client: v0.0.7 → v0.0.9 +- sigs.k8s.io/structured-merge-diff/v3: v3.0.0 → 43c19bb + +### Removed +- github.com/OpenPeeDeeP/depguard: [v1.0.1](https://github.com/OpenPeeDeeP/depguard/tree/v1.0.1) +- github.com/Rican7/retry: [v0.1.0](https://github.com/Rican7/retry/tree/v0.1.0) +- github.com/StackExchange/wmi: [5d04971](https://github.com/StackExchange/wmi/tree/5d04971) +- github.com/anmitsu/go-shlex: [648efa6](https://github.com/anmitsu/go-shlex/tree/648efa6) +- github.com/bazelbuild/bazel-gazelle: [70208cb](https://github.com/bazelbuild/bazel-gazelle/tree/70208cb) +- github.com/bazelbuild/buildtools: [69366ca](https://github.com/bazelbuild/buildtools/tree/69366ca) +- github.com/bazelbuild/rules_go: [6dae44d](https://github.com/bazelbuild/rules_go/tree/6dae44d) +- github.com/bradfitz/go-smtpd: [deb6d62](https://github.com/bradfitz/go-smtpd/tree/deb6d62) +- github.com/cespare/prettybench: [03b8cfe](https://github.com/cespare/prettybench/tree/03b8cfe) +- github.com/checkpoint-restore/go-criu: [17b0214](https://github.com/checkpoint-restore/go-criu/tree/17b0214) +- github.com/client9/misspell: [v0.3.4](https://github.com/client9/misspell/tree/v0.3.4) +- github.com/coreos/go-etcd: [v2.0.0+incompatible](https://github.com/coreos/go-etcd/tree/v2.0.0) +- github.com/cpuguy83/go-md2man: [v1.0.10](https://github.com/cpuguy83/go-md2man/tree/v1.0.10) +- github.com/docker/libnetwork: [c8a5fca](https://github.com/docker/libnetwork/tree/c8a5fca) +- github.com/gliderlabs/ssh: [v0.1.1](https://github.com/gliderlabs/ssh/tree/v0.1.1) +- github.com/go-critic/go-critic: [1df3008](https://github.com/go-critic/go-critic/tree/1df3008) +- github.com/go-lintpack/lintpack: [v0.5.2](https://github.com/go-lintpack/lintpack/tree/v0.5.2) +- github.com/go-ole/go-ole: [v1.2.1](https://github.com/go-ole/go-ole/tree/v1.2.1) +- github.com/go-toolsmith/astcast: [v1.0.0](https://github.com/go-toolsmith/astcast/tree/v1.0.0) +- github.com/go-toolsmith/astcopy: [v1.0.0](https://github.com/go-toolsmith/astcopy/tree/v1.0.0) +- github.com/go-toolsmith/astequal: [v1.0.0](https://github.com/go-toolsmith/astequal/tree/v1.0.0) +- github.com/go-toolsmith/astfmt: [v1.0.0](https://github.com/go-toolsmith/astfmt/tree/v1.0.0) +- github.com/go-toolsmith/astinfo: [9809ff7](https://github.com/go-toolsmith/astinfo/tree/9809ff7) +- github.com/go-toolsmith/astp: [v1.0.0](https://github.com/go-toolsmith/astp/tree/v1.0.0) +- github.com/go-toolsmith/pkgload: [v1.0.0](https://github.com/go-toolsmith/pkgload/tree/v1.0.0) +- github.com/go-toolsmith/strparse: [v1.0.0](https://github.com/go-toolsmith/strparse/tree/v1.0.0) +- github.com/go-toolsmith/typep: [v1.0.0](https://github.com/go-toolsmith/typep/tree/v1.0.0) +- github.com/gobwas/glob: [v0.2.3](https://github.com/gobwas/glob/tree/v0.2.3) +- github.com/godbus/dbus: [2ff6f7f](https://github.com/godbus/dbus/tree/2ff6f7f) +- github.com/golangci/check: [cfe4005](https://github.com/golangci/check/tree/cfe4005) +- github.com/golangci/dupl: [3e9179a](https://github.com/golangci/dupl/tree/3e9179a) +- github.com/golangci/errcheck: [ef45e06](https://github.com/golangci/errcheck/tree/ef45e06) +- github.com/golangci/go-misc: [927a3d8](https://github.com/golangci/go-misc/tree/927a3d8) +- github.com/golangci/go-tools: [e32c541](https://github.com/golangci/go-tools/tree/e32c541) +- github.com/golangci/goconst: [041c5f2](https://github.com/golangci/goconst/tree/041c5f2) +- github.com/golangci/gocyclo: [2becd97](https://github.com/golangci/gocyclo/tree/2becd97) +- github.com/golangci/gofmt: [0b8337e](https://github.com/golangci/gofmt/tree/0b8337e) +- github.com/golangci/golangci-lint: [v1.18.0](https://github.com/golangci/golangci-lint/tree/v1.18.0) +- github.com/golangci/gosec: [66fb7fc](https://github.com/golangci/gosec/tree/66fb7fc) +- github.com/golangci/ineffassign: [42439a7](https://github.com/golangci/ineffassign/tree/42439a7) +- github.com/golangci/lint-1: [ee948d0](https://github.com/golangci/lint-1/tree/ee948d0) +- github.com/golangci/maligned: [b1d8939](https://github.com/golangci/maligned/tree/b1d8939) +- github.com/golangci/misspell: [950f5d1](https://github.com/golangci/misspell/tree/950f5d1) +- github.com/golangci/prealloc: [215b22d](https://github.com/golangci/prealloc/tree/215b22d) +- github.com/golangci/revgrep: [d9c87f5](https://github.com/golangci/revgrep/tree/d9c87f5) +- github.com/golangci/unconvert: [28b1c44](https://github.com/golangci/unconvert/tree/28b1c44) +- github.com/google/go-github: [v17.0.0+incompatible](https://github.com/google/go-github/tree/v17.0.0) +- github.com/google/go-querystring: [v1.0.0](https://github.com/google/go-querystring/tree/v1.0.0) +- github.com/gostaticanalysis/analysisutil: [v0.0.3](https://github.com/gostaticanalysis/analysisutil/tree/v0.0.3) +- github.com/jellevandenhooff/dkim: [f50fe3d](https://github.com/jellevandenhooff/dkim/tree/f50fe3d) +- github.com/klauspost/compress: [v1.4.1](https://github.com/klauspost/compress/tree/v1.4.1) +- github.com/logrusorgru/aurora: [a7b3b31](https://github.com/logrusorgru/aurora/tree/a7b3b31) +- github.com/mattn/go-shellwords: [v1.0.5](https://github.com/mattn/go-shellwords/tree/v1.0.5) +- github.com/mattn/goveralls: [v0.0.2](https://github.com/mattn/goveralls/tree/v0.0.2) +- github.com/mesos/mesos-go: [v0.0.9](https://github.com/mesos/mesos-go/tree/v0.0.9) +- github.com/mitchellh/go-ps: [4fdf99a](https://github.com/mitchellh/go-ps/tree/4fdf99a) +- github.com/mozilla/tls-observatory: [8791a20](https://github.com/mozilla/tls-observatory/tree/8791a20) +- github.com/nbutton23/zxcvbn-go: [eafdab6](https://github.com/nbutton23/zxcvbn-go/tree/eafdab6) +- github.com/pquerna/ffjson: [af8b230](https://github.com/pquerna/ffjson/tree/af8b230) +- github.com/quasilyte/go-consistent: [c6f3937](https://github.com/quasilyte/go-consistent/tree/c6f3937) +- github.com/ryanuber/go-glob: [256dc44](https://github.com/ryanuber/go-glob/tree/256dc44) +- github.com/shirou/gopsutil: [c95755e](https://github.com/shirou/gopsutil/tree/c95755e) +- github.com/shirou/w32: [bb4de01](https://github.com/shirou/w32/tree/bb4de01) +- github.com/shurcooL/go-goon: [37c2f52](https://github.com/shurcooL/go-goon/tree/37c2f52) +- github.com/shurcooL/go: [9e1955d](https://github.com/shurcooL/go/tree/9e1955d) +- github.com/sourcegraph/go-diff: [v0.5.1](https://github.com/sourcegraph/go-diff/tree/v0.5.1) +- github.com/tarm/serial: [98f6abe](https://github.com/tarm/serial/tree/98f6abe) +- github.com/timakin/bodyclose: [87058b9](https://github.com/timakin/bodyclose/tree/87058b9) +- github.com/ugorji/go/codec: [d75b2dc](https://github.com/ugorji/go/codec/tree/d75b2dc) +- github.com/ultraware/funlen: [v0.0.2](https://github.com/ultraware/funlen/tree/v0.0.2) +- github.com/valyala/bytebufferpool: [v1.0.0](https://github.com/valyala/bytebufferpool/tree/v1.0.0) +- github.com/valyala/fasthttp: [v1.2.0](https://github.com/valyala/fasthttp/tree/v1.2.0) +- github.com/valyala/quicktemplate: [v1.1.1](https://github.com/valyala/quicktemplate/tree/v1.1.1) +- github.com/valyala/tcplisten: [ceec8f9](https://github.com/valyala/tcplisten/tree/ceec8f9) +- go4.org: 417644f +- golang.org/x/build: 2835ba2 +- golang.org/x/perf: 6e6d33e +- gopkg.in/airbrake/gobrake.v2: v2.0.9 +- gopkg.in/gemnasium/logrus-airbrake-hook.v2: v2.1.2 +- gotest.tools/gotestsum: v0.3.5 +- grpc.go4.org: 11d0a25 +- k8s.io/klog: v1.0.0 +- k8s.io/repo-infra: v0.0.1-alpha.1 +- mvdan.cc/interfacer: c200402 +- mvdan.cc/lint: adc824a +- mvdan.cc/unparam: fbb5962 +- sourcegraph.com/sqs/pbtypes: d3ebe8f + + +## Dependencies + +### Added +- cloud.google.com/go/bigquery: v1.0.1 +- cloud.google.com/go/datastore: v1.0.0 +- cloud.google.com/go/pubsub: v1.0.1 +- cloud.google.com/go/storage: v1.0.0 +- dmitri.shuralyov.com/gpu/mtl: 666a987 +- github.com/cespare/xxhash/v2: [v2.1.1](https://github.com/cespare/xxhash/v2/tree/v2.1.1) +- github.com/checkpoint-restore/go-criu/v4: [v4.0.2](https://github.com/checkpoint-restore/go-criu/v4/tree/v4.0.2) +- github.com/chzyer/logex: [v1.1.10](https://github.com/chzyer/logex/tree/v1.1.10) +- github.com/chzyer/readline: [2972be2](https://github.com/chzyer/readline/tree/2972be2) +- github.com/chzyer/test: [a1ea475](https://github.com/chzyer/test/tree/a1ea475) +- github.com/containerd/cgroups: [0dbf7f0](https://github.com/containerd/cgroups/tree/0dbf7f0) +- github.com/containerd/continuity: [aaeac12](https://github.com/containerd/continuity/tree/aaeac12) +- github.com/containerd/fifo: [a9fb20d](https://github.com/containerd/fifo/tree/a9fb20d) +- github.com/containerd/go-runc: [5a6d9f3](https://github.com/containerd/go-runc/tree/5a6d9f3) +- github.com/containerd/ttrpc: [v1.0.0](https://github.com/containerd/ttrpc/tree/v1.0.0) +- github.com/coreos/bbolt: [v1.3.2](https://github.com/coreos/bbolt/tree/v1.3.2) +- github.com/coreos/go-systemd/v22: [v22.1.0](https://github.com/coreos/go-systemd/v22/tree/v22.1.0) +- github.com/cpuguy83/go-md2man/v2: [v2.0.0](https://github.com/cpuguy83/go-md2man/v2/tree/v2.0.0) +- github.com/docopt/docopt-go: [ee0de3b](https://github.com/docopt/docopt-go/tree/ee0de3b) +- github.com/go-gl/glfw/v3.3/glfw: [12ad95a](https://github.com/go-gl/glfw/v3.3/glfw/tree/12ad95a) +- github.com/go-ini/ini: [v1.9.0](https://github.com/go-ini/ini/tree/v1.9.0) +- github.com/godbus/dbus/v5: [v5.0.3](https://github.com/godbus/dbus/v5/tree/v5.0.3) +- github.com/ianlancetaylor/demangle: [5e5cf60](https://github.com/ianlancetaylor/demangle/tree/5e5cf60) +- github.com/ishidawataru/sctp: [7c296d4](https://github.com/ishidawataru/sctp/tree/7c296d4) +- github.com/moby/ipvs: [v1.0.1](https://github.com/moby/ipvs/tree/v1.0.1) +- github.com/moby/sys/mountinfo: [v0.1.3](https://github.com/moby/sys/mountinfo/tree/v0.1.3) +- github.com/moby/term: [672ec06](https://github.com/moby/term/tree/672ec06) +- github.com/russross/blackfriday/v2: [v2.0.1](https://github.com/russross/blackfriday/v2/tree/v2.0.1) +- github.com/shurcooL/sanitized_anchor_name: [v1.0.0](https://github.com/shurcooL/sanitized_anchor_name/tree/v1.0.0) +- github.com/ugorji/go: [v1.1.4](https://github.com/ugorji/go/tree/v1.1.4) +- github.com/yuin/goldmark: [v1.1.27](https://github.com/yuin/goldmark/tree/v1.1.27) +- google.golang.org/protobuf: v1.24.0 +- gotest.tools/v3: v3.0.2 +- k8s.io/klog/v2: v2.2.0 +- sigs.k8s.io/structured-merge-diff/v4: v4.0.1 + +### Changed +- cloud.google.com/go: v0.38.0 → v0.51.0 +- github.com/Azure/azure-sdk-for-go: [v35.0.0+incompatible → v43.0.0+incompatible](https://github.com/Azure/azure-sdk-for-go/compare/v35.0.0...v43.0.0) +- github.com/Azure/go-autorest/autorest/adal: [v0.5.0 → v0.8.2](https://github.com/Azure/go-autorest/autorest/adal/compare/v0.5.0...v0.8.2) +- github.com/Azure/go-autorest/autorest/date: [v0.1.0 → v0.2.0](https://github.com/Azure/go-autorest/autorest/date/compare/v0.1.0...v0.2.0) +- github.com/Azure/go-autorest/autorest/mocks: [v0.2.0 → v0.3.0](https://github.com/Azure/go-autorest/autorest/mocks/compare/v0.2.0...v0.3.0) +- github.com/Azure/go-autorest/autorest: [v0.9.0 → v0.9.6](https://github.com/Azure/go-autorest/autorest/compare/v0.9.0...v0.9.6) +- github.com/GoogleCloudPlatform/k8s-cloud-provider: [27a4ced → 7901bc8](https://github.com/GoogleCloudPlatform/k8s-cloud-provider/compare/27a4ced...7901bc8) +- github.com/Microsoft/go-winio: [v0.4.14 → fc70bd9](https://github.com/Microsoft/go-winio/compare/v0.4.14...fc70bd9) +- github.com/Microsoft/hcsshim: [672e52e → 5eafd15](https://github.com/Microsoft/hcsshim/compare/672e52e...5eafd15) +- github.com/alecthomas/template: [a0175ee → fb15b89](https://github.com/alecthomas/template/compare/a0175ee...fb15b89) +- github.com/alecthomas/units: [2efee85 → c3de453](https://github.com/alecthomas/units/compare/2efee85...c3de453) +- github.com/beorn7/perks: [v1.0.0 → v1.0.1](https://github.com/beorn7/perks/compare/v1.0.0...v1.0.1) +- github.com/cilium/ebpf: [95b36a5 → 1c8d4c9](https://github.com/cilium/ebpf/compare/95b36a5...1c8d4c9) +- github.com/containerd/console: [84eeaae → v1.0.0](https://github.com/containerd/console/compare/84eeaae...v1.0.0) +- github.com/containerd/containerd: [v1.0.2 → v1.3.3](https://github.com/containerd/containerd/compare/v1.0.2...v1.3.3) +- github.com/containerd/typeurl: [2a93cfd → v1.0.0](https://github.com/containerd/typeurl/compare/2a93cfd...v1.0.0) +- github.com/containernetworking/cni: [v0.7.1 → v0.8.0](https://github.com/containernetworking/cni/compare/v0.7.1...v0.8.0) +- github.com/coredns/corefile-migration: [v1.0.6 → v1.0.10](https://github.com/coredns/corefile-migration/compare/v1.0.6...v1.0.10) +- github.com/coreos/pkg: [97fdf19 → 399ea9e](https://github.com/coreos/pkg/compare/97fdf19...399ea9e) +- github.com/docker/docker: [be7ac8b → aa6a989](https://github.com/docker/docker/compare/be7ac8b...aa6a989) +- github.com/docker/go-connections: [v0.3.0 → v0.4.0](https://github.com/docker/go-connections/compare/v0.3.0...v0.4.0) +- github.com/evanphx/json-patch: [v4.2.0+incompatible → v4.9.0+incompatible](https://github.com/evanphx/json-patch/compare/v4.2.0...v4.9.0) +- github.com/fsnotify/fsnotify: [v1.4.7 → v1.4.9](https://github.com/fsnotify/fsnotify/compare/v1.4.7...v1.4.9) +- github.com/go-kit/kit: [v0.8.0 → v0.9.0](https://github.com/go-kit/kit/compare/v0.8.0...v0.9.0) +- github.com/go-logfmt/logfmt: [v0.3.0 → v0.4.0](https://github.com/go-logfmt/logfmt/compare/v0.3.0...v0.4.0) +- github.com/go-logr/logr: [v0.1.0 → v0.2.0](https://github.com/go-logr/logr/compare/v0.1.0...v0.2.0) +- github.com/golang/groupcache: [02826c3 → 215e871](https://github.com/golang/groupcache/compare/02826c3...215e871) +- github.com/golang/protobuf: [v1.3.2 → v1.4.2](https://github.com/golang/protobuf/compare/v1.3.2...v1.4.2) +- github.com/google/cadvisor: [v0.35.0 → v0.37.0](https://github.com/google/cadvisor/compare/v0.35.0...v0.37.0) +- github.com/google/go-cmp: [v0.3.0 → v0.4.0](https://github.com/google/go-cmp/compare/v0.3.0...v0.4.0) +- github.com/google/pprof: [3ea8567 → d4f498a](https://github.com/google/pprof/compare/3ea8567...d4f498a) +- github.com/googleapis/gax-go/v2: [v2.0.4 → v2.0.5](https://github.com/googleapis/gax-go/v2/compare/v2.0.4...v2.0.5) +- github.com/googleapis/gnostic: [v0.1.0 → v0.4.1](https://github.com/googleapis/gnostic/compare/v0.1.0...v0.4.1) +- github.com/gorilla/mux: [v1.7.0 → v1.7.3](https://github.com/gorilla/mux/compare/v1.7.0...v1.7.3) +- github.com/json-iterator/go: [v1.1.8 → v1.1.10](https://github.com/json-iterator/go/compare/v1.1.8...v1.1.10) +- github.com/jstemmer/go-junit-report: [af01ea7 → v0.9.1](https://github.com/jstemmer/go-junit-report/compare/af01ea7...v0.9.1) +- github.com/konsorten/go-windows-terminal-sequences: [v1.0.1 → v1.0.3](https://github.com/konsorten/go-windows-terminal-sequences/compare/v1.0.1...v1.0.3) +- github.com/kr/pretty: [v0.1.0 → v0.2.0](https://github.com/kr/pretty/compare/v0.1.0...v0.2.0) +- github.com/mattn/go-isatty: [v0.0.9 → v0.0.4](https://github.com/mattn/go-isatty/compare/v0.0.9...v0.0.4) +- github.com/matttproud/golang_protobuf_extensions: [v1.0.1 → c182aff](https://github.com/matttproud/golang_protobuf_extensions/compare/v1.0.1...c182aff) +- github.com/mistifyio/go-zfs: [v2.1.1+incompatible → f784269](https://github.com/mistifyio/go-zfs/compare/v2.1.1...f784269) +- github.com/mrunalp/fileutils: [7d4729f → abd8a0e](https://github.com/mrunalp/fileutils/compare/7d4729f...abd8a0e) +- github.com/opencontainers/runc: [v1.0.0-rc10 → 819fcc6](https://github.com/opencontainers/runc/compare/v1.0.0-rc10...819fcc6) +- github.com/opencontainers/runtime-spec: [v1.0.0 → 237cc4f](https://github.com/opencontainers/runtime-spec/compare/v1.0.0...237cc4f) +- github.com/opencontainers/selinux: [5215b18 → v1.5.2](https://github.com/opencontainers/selinux/compare/5215b18...v1.5.2) +- github.com/pkg/errors: [v0.8.1 → v0.9.1](https://github.com/pkg/errors/compare/v0.8.1...v0.9.1) +- github.com/prometheus/client_golang: [v1.0.0 → v1.7.1](https://github.com/prometheus/client_golang/compare/v1.0.0...v1.7.1) +- github.com/prometheus/common: [v0.4.1 → v0.10.0](https://github.com/prometheus/common/compare/v0.4.1...v0.10.0) +- github.com/prometheus/procfs: [v0.0.2 → v0.1.3](https://github.com/prometheus/procfs/compare/v0.0.2...v0.1.3) +- github.com/rubiojr/go-vhd: [0bfd3b3 → 02e2102](https://github.com/rubiojr/go-vhd/compare/0bfd3b3...02e2102) +- github.com/sirupsen/logrus: [v1.4.2 → v1.6.0](https://github.com/sirupsen/logrus/compare/v1.4.2...v1.6.0) +- github.com/spf13/cobra: [v0.0.5 → v1.0.0](https://github.com/spf13/cobra/compare/v0.0.5...v1.0.0) +- github.com/spf13/viper: [v1.3.2 → v1.4.0](https://github.com/spf13/viper/compare/v1.3.2...v1.4.0) +- github.com/tmc/grpc-websocket-proxy: [89b8d40 → 0ad062e](https://github.com/tmc/grpc-websocket-proxy/compare/89b8d40...0ad062e) +- github.com/urfave/cli: [v1.20.0 → v1.22.2](https://github.com/urfave/cli/compare/v1.20.0...v1.22.2) +- github.com/vishvananda/netlink: [v1.0.0 → v1.1.0](https://github.com/vishvananda/netlink/compare/v1.0.0...v1.1.0) +- github.com/vishvananda/netns: [be1fbed → 52d707b](https://github.com/vishvananda/netns/compare/be1fbed...52d707b) +- go.etcd.io/bbolt: v1.3.3 → v1.3.5 +- go.etcd.io/etcd: 3cf2f69 → 17cef6e +- go.opencensus.io: v0.21.0 → v0.22.2 +- go.uber.org/atomic: v1.3.2 → v1.4.0 +- golang.org/x/crypto: bac4c82 → 75b2880 +- golang.org/x/exp: 4b39c73 → da58074 +- golang.org/x/image: 0694c2d → cff245a +- golang.org/x/lint: 959b441 → fdd1cda +- golang.org/x/mobile: d3739f8 → d2bd2a2 +- golang.org/x/mod: 4bf6d31 → v0.3.0 +- golang.org/x/net: 13f9640 → ab34263 +- golang.org/x/oauth2: 0f29369 → 858c2ad +- golang.org/x/sys: fde4db3 → ed371f2 +- golang.org/x/text: v0.3.2 → v0.3.3 +- golang.org/x/time: 9d24e82 → 555d28b +- golang.org/x/tools: 65e3620 → c1934b7 +- golang.org/x/xerrors: a985d34 → 9bdfabe +- google.golang.org/api: 5213b80 → v0.15.1 +- google.golang.org/appengine: v1.5.0 → v1.6.5 +- google.golang.org/genproto: 24fa4b2 → cb27e3a +- google.golang.org/grpc: v1.26.0 → v1.27.0 +- gopkg.in/check.v1: 788fd78 → 41f04d3 +- honnef.co/go/tools: v0.0.1-2019.2.2 → v0.0.1-2019.2.3 +- k8s.io/gengo: 36b2048 → 8167cfd +- k8s.io/kube-openapi: bf4fb3b → 6aeccd4 +- k8s.io/system-validators: v1.0.4 → v1.1.2 +- k8s.io/utils: a9aa75a → d5654de +- sigs.k8s.io/apiserver-network-proxy/konnectivity-client: v0.0.7 → v0.0.9 + +### Removed +- github.com/OpenPeeDeeP/depguard: [v1.0.1](https://github.com/OpenPeeDeeP/depguard/tree/v1.0.1) +- github.com/Rican7/retry: [v0.1.0](https://github.com/Rican7/retry/tree/v0.1.0) +- github.com/StackExchange/wmi: [5d04971](https://github.com/StackExchange/wmi/tree/5d04971) +- github.com/anmitsu/go-shlex: [648efa6](https://github.com/anmitsu/go-shlex/tree/648efa6) +- github.com/bazelbuild/bazel-gazelle: [70208cb](https://github.com/bazelbuild/bazel-gazelle/tree/70208cb) +- github.com/bazelbuild/buildtools: [69366ca](https://github.com/bazelbuild/buildtools/tree/69366ca) +- github.com/bazelbuild/rules_go: [6dae44d](https://github.com/bazelbuild/rules_go/tree/6dae44d) +- github.com/bradfitz/go-smtpd: [deb6d62](https://github.com/bradfitz/go-smtpd/tree/deb6d62) +- github.com/cespare/prettybench: [03b8cfe](https://github.com/cespare/prettybench/tree/03b8cfe) +- github.com/checkpoint-restore/go-criu: [17b0214](https://github.com/checkpoint-restore/go-criu/tree/17b0214) +- github.com/client9/misspell: [v0.3.4](https://github.com/client9/misspell/tree/v0.3.4) +- github.com/coreos/go-etcd: [v2.0.0+incompatible](https://github.com/coreos/go-etcd/tree/v2.0.0) +- github.com/cpuguy83/go-md2man: [v1.0.10](https://github.com/cpuguy83/go-md2man/tree/v1.0.10) +- github.com/docker/libnetwork: [c8a5fca](https://github.com/docker/libnetwork/tree/c8a5fca) +- github.com/gliderlabs/ssh: [v0.1.1](https://github.com/gliderlabs/ssh/tree/v0.1.1) +- github.com/go-critic/go-critic: [1df3008](https://github.com/go-critic/go-critic/tree/1df3008) +- github.com/go-lintpack/lintpack: [v0.5.2](https://github.com/go-lintpack/lintpack/tree/v0.5.2) +- github.com/go-ole/go-ole: [v1.2.1](https://github.com/go-ole/go-ole/tree/v1.2.1) +- github.com/go-toolsmith/astcast: [v1.0.0](https://github.com/go-toolsmith/astcast/tree/v1.0.0) +- github.com/go-toolsmith/astcopy: [v1.0.0](https://github.com/go-toolsmith/astcopy/tree/v1.0.0) +- github.com/go-toolsmith/astequal: [v1.0.0](https://github.com/go-toolsmith/astequal/tree/v1.0.0) +- github.com/go-toolsmith/astfmt: [v1.0.0](https://github.com/go-toolsmith/astfmt/tree/v1.0.0) +- github.com/go-toolsmith/astinfo: [9809ff7](https://github.com/go-toolsmith/astinfo/tree/9809ff7) +- github.com/go-toolsmith/astp: [v1.0.0](https://github.com/go-toolsmith/astp/tree/v1.0.0) +- github.com/go-toolsmith/pkgload: [v1.0.0](https://github.com/go-toolsmith/pkgload/tree/v1.0.0) +- github.com/go-toolsmith/strparse: [v1.0.0](https://github.com/go-toolsmith/strparse/tree/v1.0.0) +- github.com/go-toolsmith/typep: [v1.0.0](https://github.com/go-toolsmith/typep/tree/v1.0.0) +- github.com/gobwas/glob: [v0.2.3](https://github.com/gobwas/glob/tree/v0.2.3) +- github.com/godbus/dbus: [2ff6f7f](https://github.com/godbus/dbus/tree/2ff6f7f) +- github.com/golangci/check: [cfe4005](https://github.com/golangci/check/tree/cfe4005) +- github.com/golangci/dupl: [3e9179a](https://github.com/golangci/dupl/tree/3e9179a) +- github.com/golangci/errcheck: [ef45e06](https://github.com/golangci/errcheck/tree/ef45e06) +- github.com/golangci/go-misc: [927a3d8](https://github.com/golangci/go-misc/tree/927a3d8) +- github.com/golangci/go-tools: [e32c541](https://github.com/golangci/go-tools/tree/e32c541) +- github.com/golangci/goconst: [041c5f2](https://github.com/golangci/goconst/tree/041c5f2) +- github.com/golangci/gocyclo: [2becd97](https://github.com/golangci/gocyclo/tree/2becd97) +- github.com/golangci/gofmt: [0b8337e](https://github.com/golangci/gofmt/tree/0b8337e) +- github.com/golangci/golangci-lint: [v1.18.0](https://github.com/golangci/golangci-lint/tree/v1.18.0) +- github.com/golangci/gosec: [66fb7fc](https://github.com/golangci/gosec/tree/66fb7fc) +- github.com/golangci/ineffassign: [42439a7](https://github.com/golangci/ineffassign/tree/42439a7) +- github.com/golangci/lint-1: [ee948d0](https://github.com/golangci/lint-1/tree/ee948d0) +- github.com/golangci/maligned: [b1d8939](https://github.com/golangci/maligned/tree/b1d8939) +- github.com/golangci/misspell: [950f5d1](https://github.com/golangci/misspell/tree/950f5d1) +- github.com/golangci/prealloc: [215b22d](https://github.com/golangci/prealloc/tree/215b22d) +- github.com/golangci/revgrep: [d9c87f5](https://github.com/golangci/revgrep/tree/d9c87f5) +- github.com/golangci/unconvert: [28b1c44](https://github.com/golangci/unconvert/tree/28b1c44) +- github.com/google/go-github: [v17.0.0+incompatible](https://github.com/google/go-github/tree/v17.0.0) +- github.com/google/go-querystring: [v1.0.0](https://github.com/google/go-querystring/tree/v1.0.0) +- github.com/gostaticanalysis/analysisutil: [v0.0.3](https://github.com/gostaticanalysis/analysisutil/tree/v0.0.3) +- github.com/jellevandenhooff/dkim: [f50fe3d](https://github.com/jellevandenhooff/dkim/tree/f50fe3d) +- github.com/klauspost/compress: [v1.4.1](https://github.com/klauspost/compress/tree/v1.4.1) +- github.com/logrusorgru/aurora: [a7b3b31](https://github.com/logrusorgru/aurora/tree/a7b3b31) +- github.com/mattn/go-shellwords: [v1.0.5](https://github.com/mattn/go-shellwords/tree/v1.0.5) +- github.com/mattn/goveralls: [v0.0.2](https://github.com/mattn/goveralls/tree/v0.0.2) +- github.com/mesos/mesos-go: [v0.0.9](https://github.com/mesos/mesos-go/tree/v0.0.9) +- github.com/mitchellh/go-ps: [4fdf99a](https://github.com/mitchellh/go-ps/tree/4fdf99a) +- github.com/mozilla/tls-observatory: [8791a20](https://github.com/mozilla/tls-observatory/tree/8791a20) +- github.com/nbutton23/zxcvbn-go: [eafdab6](https://github.com/nbutton23/zxcvbn-go/tree/eafdab6) +- github.com/pquerna/ffjson: [af8b230](https://github.com/pquerna/ffjson/tree/af8b230) +- github.com/quasilyte/go-consistent: [c6f3937](https://github.com/quasilyte/go-consistent/tree/c6f3937) +- github.com/ryanuber/go-glob: [256dc44](https://github.com/ryanuber/go-glob/tree/256dc44) +- github.com/shirou/gopsutil: [c95755e](https://github.com/shirou/gopsutil/tree/c95755e) +- github.com/shirou/w32: [bb4de01](https://github.com/shirou/w32/tree/bb4de01) +- github.com/shurcooL/go-goon: [37c2f52](https://github.com/shurcooL/go-goon/tree/37c2f52) +- github.com/shurcooL/go: [9e1955d](https://github.com/shurcooL/go/tree/9e1955d) +- github.com/sourcegraph/go-diff: [v0.5.1](https://github.com/sourcegraph/go-diff/tree/v0.5.1) +- github.com/tarm/serial: [98f6abe](https://github.com/tarm/serial/tree/98f6abe) +- github.com/timakin/bodyclose: [87058b9](https://github.com/timakin/bodyclose/tree/87058b9) +- github.com/ugorji/go/codec: [d75b2dc](https://github.com/ugorji/go/codec/tree/d75b2dc) +- github.com/ultraware/funlen: [v0.0.2](https://github.com/ultraware/funlen/tree/v0.0.2) +- github.com/valyala/bytebufferpool: [v1.0.0](https://github.com/valyala/bytebufferpool/tree/v1.0.0) +- github.com/valyala/fasthttp: [v1.2.0](https://github.com/valyala/fasthttp/tree/v1.2.0) +- github.com/valyala/quicktemplate: [v1.1.1](https://github.com/valyala/quicktemplate/tree/v1.1.1) +- github.com/valyala/tcplisten: [ceec8f9](https://github.com/valyala/tcplisten/tree/ceec8f9) +- go4.org: 417644f +- golang.org/x/build: 2835ba2 +- golang.org/x/perf: 6e6d33e +- gopkg.in/airbrake/gobrake.v2: v2.0.9 +- gopkg.in/gemnasium/logrus-airbrake-hook.v2: v2.1.2 +- gotest.tools/gotestsum: v0.3.5 +- grpc.go4.org: 11d0a25 +- k8s.io/klog: v1.0.0 +- k8s.io/repo-infra: v0.0.1-alpha.1 +- mvdan.cc/interfacer: c200402 +- mvdan.cc/lint: adc824a +- mvdan.cc/unparam: fbb5962 +- sigs.k8s.io/structured-merge-diff/v3: v3.0.0 +- sourcegraph.com/sqs/pbtypes: d3ebe8f + + + # v1.19.0-rc.4 From bd00ef8027a3172ea2d598ca6a387a2056950cbc Mon Sep 17 00:00:00 2001 From: Jake Sanders Date: Wed, 26 Aug 2020 12:39:33 -0700 Subject: [PATCH 03/96] Add PR #89069 Action Required --- CHANGELOG/CHANGELOG-1.19.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG/CHANGELOG-1.19.md b/CHANGELOG/CHANGELOG-1.19.md index 6a329e0616e80..94778dfb70721 100644 --- a/CHANGELOG/CHANGELOG-1.19.md +++ b/CHANGELOG/CHANGELOG-1.19.md @@ -377,7 +377,8 @@ The new storage capacity tracking alpha feature is known to be affected by a lim ### (No, really, you MUST read this before you upgrade) -- ACTION REQUIRED : Switch core master base images (kube-controller-manager) from debian to distroless. If you need Flex Volumes support using scripts, please build your own image with required packages (like bash) ([#91329](https://github.com/kubernetes/kubernetes/pull/91329), [@dims](https://github.com/dims)) [SIG Cloud Provider, Release, Storage and Testing] +- ACTION REQUIRED: Switch core master base images (kube-controller-manager) from debian to distroless. If you need Flex Volumes support using scripts, please build your own image with required packages (like bash) ([#91329](https://github.com/kubernetes/kubernetes/pull/91329), [@dims](https://github.com/dims)) [SIG Cloud Provider, Release, Storage and Testing] +- ACTION REQUIRED: Support for basic authentication via the --basic-auth-file flag has been removed. Users should migrate to --token-auth-file for similar functionality. ([#89069](https://github.com/kubernetes/kubernetes/pull/89069), [@enj](https://github.com/enj)) [SIG API Machinery] - Azure blob disk feature(`kind`: `Shared`, `Dedicated`) has been deprecated, you should use `kind`: `Managed` in `kubernetes.io/azure-disk` storage class. ([#92905](https://github.com/kubernetes/kubernetes/pull/92905), [@andyzhangx](https://github.com/andyzhangx)) [SIG Cloud Provider and Storage] - CVE-2020-8559 (Medium): Privilege escalation from compromised node to cluster. See https://github.com/kubernetes/kubernetes/issues/92914 for more details. The API Server will no longer proxy non-101 responses for upgrade requests. This could break proxied backends (such as an extension API server) that respond to upgrade requests with a non-101 response code. ([#92941](https://github.com/kubernetes/kubernetes/pull/92941), [@tallclair](https://github.com/tallclair)) [SIG API Machinery] @@ -2787,4 +2788,4 @@ filename | sha512 hash - Update to use golang 1.13.8 ([#87648](https://github.com/kubernetes/kubernetes/pull/87648), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG Release and Testing] - Validate kube-proxy flags --ipvs-tcp-timeout, --ipvs-tcpfin-timeout, --ipvs-udp-timeout ([#88657](https://github.com/kubernetes/kubernetes/pull/88657), [@chendotjs](https://github.com/chendotjs)) [SIG Network] - Wait for all CRDs to show up in discovery endpoint before reporting readiness. ([#89145](https://github.com/kubernetes/kubernetes/pull/89145), [@sttts](https://github.com/sttts)) [SIG API Machinery] -- `kubectl config view` now redacts bearer tokens by default, similar to client certificates. The `--raw` flag can still be used to output full content. ([#88985](https://github.com/kubernetes/kubernetes/pull/88985), [@brianpursley](https://github.com/brianpursley)) [SIG API Machinery and CLI] \ No newline at end of file +- `kubectl config view` now redacts bearer tokens by default, similar to client certificates. The `--raw` flag can still be used to output full content. ([#88985](https://github.com/kubernetes/kubernetes/pull/88985), [@brianpursley](https://github.com/brianpursley)) [SIG API Machinery and CLI] From 9b75b1c109edd6f112cc7aa1a6ccfffb68f28c4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20To=CC=82rres?= Date: Tue, 28 Jul 2020 19:12:06 -0300 Subject: [PATCH 04/96] Use NLB Subnet CIDRs instead of VPC CIDRs in updateInstanceSecurityGroupsForNLB MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pedro Tôrres --- .../k8s.io/legacy-cloud-providers/aws/aws.go | 31 +++++++++++++++++-- .../aws/aws_loadbalancer.go | 29 ++--------------- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/staging/src/k8s.io/legacy-cloud-providers/aws/aws.go b/staging/src/k8s.io/legacy-cloud-providers/aws/aws.go index 6aeaaa7e09c3b..d0cc73a17fc30 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/aws/aws.go +++ b/staging/src/k8s.io/legacy-cloud-providers/aws/aws.go @@ -3665,6 +3665,27 @@ func buildListener(port v1.ServicePort, annotations map[string]string, sslPorts return listener, nil } +func (c *Cloud) getSubnetCidrs(subnetIDs []string) ([]string, error) { + request := &ec2.DescribeSubnetsInput{} + for _, subnetID := range subnetIDs { + request.SubnetIds = append(request.SubnetIds, aws.String(subnetID)) + } + + subnets, err := c.ec2.DescribeSubnets(request) + if err != nil { + return nil, fmt.Errorf("error querying Subnet for ELB: %q", err) + } + if len(subnets) != len(subnetIDs) { + return nil, fmt.Errorf("error querying Subnet for ELB, got %d subnets for %v", len(subnets), subnetIDs) + } + + cidrs := make([]string, 0, len(subnets)) + for _, subnet := range subnets { + cidrs = append(cidrs, aws.StringValue(subnet.CidrBlock)) + } + return cidrs, nil +} + // EnsureLoadBalancer implements LoadBalancer.EnsureLoadBalancer func (c *Cloud) EnsureLoadBalancer(ctx context.Context, clusterName string, apiService *v1.Service, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) { annotations := apiService.Annotations @@ -3794,6 +3815,12 @@ func (c *Cloud) EnsureLoadBalancer(ctx context.Context, clusterName string, apiS return nil, err } + subnetCidrs, err := c.getSubnetCidrs(subnetIDs) + if err != nil { + klog.Errorf("Error getting subnet cidrs: %q", err) + return nil, err + } + sourceRangeCidrs := []string{} for cidr := range sourceRanges { sourceRangeCidrs = append(sourceRangeCidrs, cidr) @@ -3802,7 +3829,7 @@ func (c *Cloud) EnsureLoadBalancer(ctx context.Context, clusterName string, apiS sourceRangeCidrs = append(sourceRangeCidrs, "0.0.0.0/0") } - err = c.updateInstanceSecurityGroupsForNLB(loadBalancerName, instances, sourceRangeCidrs, v2Mappings) + err = c.updateInstanceSecurityGroupsForNLB(loadBalancerName, instances, subnetCidrs, sourceRangeCidrs, v2Mappings) if err != nil { klog.Warningf("Error opening ingress rules for the load balancer to the instances: %q", err) return nil, err @@ -4373,7 +4400,7 @@ func (c *Cloud) EnsureLoadBalancerDeleted(ctx context.Context, clusterName strin } } - return c.updateInstanceSecurityGroupsForNLB(loadBalancerName, nil, nil, nil) + return c.updateInstanceSecurityGroupsForNLB(loadBalancerName, nil, nil, nil, nil) } lb, err := c.describeLoadBalancer(loadBalancerName) diff --git a/staging/src/k8s.io/legacy-cloud-providers/aws/aws_loadbalancer.go b/staging/src/k8s.io/legacy-cloud-providers/aws/aws_loadbalancer.go index 2b90906572e36..07bb7106b1b4f 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/aws/aws_loadbalancer.go +++ b/staging/src/k8s.io/legacy-cloud-providers/aws/aws_loadbalancer.go @@ -716,30 +716,9 @@ func (c *Cloud) ensureTargetGroup(targetGroup *elbv2.TargetGroup, serviceName ty return targetGroup, nil } -func (c *Cloud) getVpcCidrBlocks() ([]string, error) { - vpcs, err := c.ec2.DescribeVpcs(&ec2.DescribeVpcsInput{ - VpcIds: []*string{aws.String(c.vpcID)}, - }) - if err != nil { - return nil, fmt.Errorf("error querying VPC for ELB: %q", err) - } - if len(vpcs.Vpcs) != 1 { - return nil, fmt.Errorf("error querying VPC for ELB, got %d vpcs for %s", len(vpcs.Vpcs), c.vpcID) - } - - cidrBlocks := make([]string, 0, len(vpcs.Vpcs[0].CidrBlockAssociationSet)) - for _, cidr := range vpcs.Vpcs[0].CidrBlockAssociationSet { - if aws.StringValue(cidr.CidrBlockState.State) != ec2.VpcCidrBlockStateCodeAssociated { - continue - } - cidrBlocks = append(cidrBlocks, aws.StringValue(cidr.CidrBlock)) - } - return cidrBlocks, nil -} - // updateInstanceSecurityGroupsForNLB will adjust securityGroup's settings to allow inbound traffic into instances from clientCIDRs and portMappings. // TIP: if either instances or clientCIDRs or portMappings are nil, then the securityGroup rules for lbName are cleared. -func (c *Cloud) updateInstanceSecurityGroupsForNLB(lbName string, instances map[InstanceID]*ec2.Instance, clientCIDRs []string, portMappings []nlbPortMapping) error { +func (c *Cloud) updateInstanceSecurityGroupsForNLB(lbName string, instances map[InstanceID]*ec2.Instance, subnetCIDRs []string, clientCIDRs []string, portMappings []nlbPortMapping) error { if c.cfg.Global.DisableSecurityGroupIngress { return nil } @@ -787,14 +766,10 @@ func (c *Cloud) updateInstanceSecurityGroupsForNLB(lbName string, instances map[ } clientRuleAnnotation := fmt.Sprintf("%s=%s", NLBClientRuleDescription, lbName) healthRuleAnnotation := fmt.Sprintf("%s=%s", NLBHealthCheckRuleDescription, lbName) - vpcCIDRs, err := c.getVpcCidrBlocks() - if err != nil { - return err - } for sgID, sg := range clusterSGs { sgPerms := NewIPPermissionSet(sg.IpPermissions...).Ungroup() if desiredSGIDs.Has(sgID) { - if err := c.updateInstanceSecurityGroupForNLBTraffic(sgID, sgPerms, healthRuleAnnotation, "tcp", healthCheckPorts, vpcCIDRs); err != nil { + if err := c.updateInstanceSecurityGroupForNLBTraffic(sgID, sgPerms, healthRuleAnnotation, "tcp", healthCheckPorts, subnetCIDRs); err != nil { return err } if err := c.updateInstanceSecurityGroupForNLBTraffic(sgID, sgPerms, clientRuleAnnotation, clientProtocol, clientPorts, clientCIDRs); err != nil { From c99083e14e00d87cff58a1fa9dffd30a4b743cc7 Mon Sep 17 00:00:00 2001 From: Jing Xu Date: Tue, 25 Aug 2020 23:31:47 -0700 Subject: [PATCH 05/96] Fix issue on skipTest in storage suits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After PR https://github.com/kubernetes/kubernetes/pull/92555, there are a number of gce pd default fs tests skipped. Here the testpatten has SnapshotType set because some provisioning tests use snapshots. But for drivers such as In-tree gce pd driver, the tests will be skipped because of the logic in skipUnsupportedTesthttps://github.com/kubernetes/kubernetes/blob/master/test/e2e/storage/testsuites/base.go#L154 Since multiple drivers might test with the same pattern, so I think we need keep SnapshotType here. This PR removes the part of the logic in skipUnsupportedTest. This should be ok because all snapshot tests will check whether a driver has snapshot capability or not. --- test/e2e/storage/testsuites/base.go | 66 ++++++++++++----------------- 1 file changed, 26 insertions(+), 40 deletions(-) diff --git a/test/e2e/storage/testsuites/base.go b/test/e2e/storage/testsuites/base.go index aafbb630f2b2b..7519d0a0806b5 100644 --- a/test/e2e/storage/testsuites/base.go +++ b/test/e2e/storage/testsuites/base.go @@ -149,50 +149,36 @@ func skipUnsupportedTest(driver TestDriver, pattern testpatterns.TestPattern) { dInfo := driver.GetDriverInfo() var isSupported bool - // 1. Check if Whether SnapshotType is supported by driver from its interface - // if isSupported, we still execute the driver and suite tests - if len(pattern.SnapshotType) > 0 { - switch pattern.SnapshotType { - case testpatterns.DynamicCreatedSnapshot: - _, isSupported = driver.(SnapshottableTestDriver) - default: - isSupported = false - } - if !isSupported { - e2eskipper.Skipf("Driver %s doesn't support snapshot type %v -- skipping", dInfo.Name, pattern.SnapshotType) - } - } else { - // 2. Check if Whether volType is supported by driver from its interface - switch pattern.VolType { - case testpatterns.InlineVolume: - _, isSupported = driver.(InlineVolumeTestDriver) - case testpatterns.PreprovisionedPV: - _, isSupported = driver.(PreprovisionedPVTestDriver) - case testpatterns.DynamicPV, testpatterns.GenericEphemeralVolume: - _, isSupported = driver.(DynamicPVTestDriver) - case testpatterns.CSIInlineVolume: - _, isSupported = driver.(EphemeralTestDriver) - default: - isSupported = false - } + // 1. Check if Whether volType is supported by driver from its interface + switch pattern.VolType { + case testpatterns.InlineVolume: + _, isSupported = driver.(InlineVolumeTestDriver) + case testpatterns.PreprovisionedPV: + _, isSupported = driver.(PreprovisionedPVTestDriver) + case testpatterns.DynamicPV, testpatterns.GenericEphemeralVolume: + _, isSupported = driver.(DynamicPVTestDriver) + case testpatterns.CSIInlineVolume: + _, isSupported = driver.(EphemeralTestDriver) + default: + isSupported = false + } - if !isSupported { - e2eskipper.Skipf("Driver %s doesn't support %v -- skipping", dInfo.Name, pattern.VolType) - } + if !isSupported { + e2eskipper.Skipf("Driver %s doesn't support %v -- skipping", dInfo.Name, pattern.VolType) + } - // 3. Check if fsType is supported - if !dInfo.SupportedFsType.Has(pattern.FsType) { - e2eskipper.Skipf("Driver %s doesn't support %v -- skipping", dInfo.Name, pattern.FsType) - } - if pattern.FsType == "xfs" && framework.NodeOSDistroIs("gci", "cos", "windows") { - e2eskipper.Skipf("Distro doesn't support xfs -- skipping") - } - if pattern.FsType == "ntfs" && !framework.NodeOSDistroIs("windows") { - e2eskipper.Skipf("Distro %s doesn't support ntfs -- skipping", framework.TestContext.NodeOSDistro) - } + // 2. Check if fsType is supported + if !dInfo.SupportedFsType.Has(pattern.FsType) { + e2eskipper.Skipf("Driver %s doesn't support %v -- skipping", dInfo.Name, pattern.FsType) + } + if pattern.FsType == "xfs" && framework.NodeOSDistroIs("gci", "cos", "windows") { + e2eskipper.Skipf("Distro doesn't support xfs -- skipping") + } + if pattern.FsType == "ntfs" && !framework.NodeOSDistroIs("windows") { + e2eskipper.Skipf("Distro %s doesn't support ntfs -- skipping", framework.TestContext.NodeOSDistro) } - // 4. Check with driver specific logic + // 3. Check with driver specific logic driver.SkipUnsupportedTest(pattern) } From 1b10b5e6edd73c9064da8d4fab2f0c125795365d Mon Sep 17 00:00:00 2001 From: knight42 Date: Fri, 28 Aug 2020 19:17:00 +0800 Subject: [PATCH 06/96] fix(azure): check error returned by scaleSet.getVMSS Signed-off-by: knight42 --- .../src/k8s.io/legacy-cloud-providers/azure/azure_vmss.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss.go index c1ce257c5d3fd..34848babce305 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_vmss.go @@ -1406,6 +1406,9 @@ func (ss *scaleSet) ensureBackendPoolDeletedFromVMSS(service *v1.Service, backen for vmssName := range vmssNamesMap { vmss, err := ss.getVMSS(vmssName, azcache.CacheReadTypeDefault) + if err != nil { + return err + } // When vmss is being deleted, CreateOrUpdate API would report "the vmss is being deleted" error. // Since it is being deleted, we shouldn't send more CreateOrUpdate requests for it. @@ -1413,10 +1416,6 @@ func (ss *scaleSet) ensureBackendPoolDeletedFromVMSS(service *v1.Service, backen klog.V(3).Infof("ensureVMSSInPool: found vmss %s being deleted, skipping", vmssName) continue } - - if err != nil { - return err - } if vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations == nil { klog.V(4).Infof("EnsureHostInPool: cannot obtain the primary network interface configuration, of vmss %s", vmssName) continue From b605a78881a6440029d8f5ef6ac71d056aa4cb6d Mon Sep 17 00:00:00 2001 From: knight42 Date: Fri, 7 Aug 2020 16:54:38 +0800 Subject: [PATCH 07/96] fix(kubelet): protect `containerCleanupInfos` from concurrent map writes Signed-off-by: knight42 --- pkg/kubelet/dockershim/docker_container.go | 25 +++++++++++++++++++--- pkg/kubelet/dockershim/docker_service.go | 3 ++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/pkg/kubelet/dockershim/docker_container.go b/pkg/kubelet/dockershim/docker_container.go index 01b865f9d2a39..3c61e13cf914c 100644 --- a/pkg/kubelet/dockershim/docker_container.go +++ b/pkg/kubelet/dockershim/docker_container.go @@ -83,6 +83,25 @@ func (ds *dockerService) ListContainers(_ context.Context, r *runtimeapi.ListCon return &runtimeapi.ListContainersResponse{Containers: result}, nil } +func (ds *dockerService) getContainerCleanupInfo(containerID string) (*containerCleanupInfo, bool) { + ds.cleanupInfosLock.RLock() + defer ds.cleanupInfosLock.RUnlock() + info, ok := ds.containerCleanupInfos[containerID] + return info, ok +} + +func (ds *dockerService) setContainerCleanupInfo(containerID string, info *containerCleanupInfo) { + ds.cleanupInfosLock.Lock() + defer ds.cleanupInfosLock.Unlock() + ds.containerCleanupInfos[containerID] = info +} + +func (ds *dockerService) clearContainerCleanupInfo(containerID string) { + ds.cleanupInfosLock.Lock() + defer ds.cleanupInfosLock.Unlock() + delete(ds.containerCleanupInfos, containerID) +} + // CreateContainer creates a new container in the given PodSandbox // Docker cannot store the log to an arbitrary location (yet), so we create an // symlink at LogPath, linking to the actual path of the log. @@ -185,7 +204,7 @@ func (ds *dockerService) CreateContainer(_ context.Context, r *runtimeapi.Create // we don't perform the clean up just yet at that could destroy information // needed for the container to start (e.g. Windows credentials stored in // registry keys); instead, we'll clean up when the container gets removed - ds.containerCleanupInfos[containerID] = cleanupInfo + ds.setContainerCleanupInfo(containerID, cleanupInfo) } return &runtimeapi.CreateContainerResponse{ContainerId: containerID}, nil } @@ -461,11 +480,11 @@ func (ds *dockerService) UpdateContainerResources(_ context.Context, r *runtimea } func (ds *dockerService) performPlatformSpecificContainerForContainer(containerID string) (errors []error) { - if cleanupInfo, present := ds.containerCleanupInfos[containerID]; present { + if cleanupInfo, present := ds.getContainerCleanupInfo(containerID); present { errors = ds.performPlatformSpecificContainerCleanupAndLogErrors(containerID, cleanupInfo) if len(errors) == 0 { - delete(ds.containerCleanupInfos, containerID) + ds.clearContainerCleanupInfo(containerID) } } diff --git a/pkg/kubelet/dockershim/docker_service.go b/pkg/kubelet/dockershim/docker_service.go index d9665698cc3fe..74a7b5d081279 100644 --- a/pkg/kubelet/dockershim/docker_service.go +++ b/pkg/kubelet/dockershim/docker_service.go @@ -31,7 +31,7 @@ import ( dockertypes "github.com/docker/docker/api/types" "k8s.io/klog/v2" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" "k8s.io/kubernetes/pkg/kubelet/checkpointmanager" @@ -316,6 +316,7 @@ type dockerService struct { // (see `applyPlatformSpecificDockerConfig` and `performPlatformSpecificContainerCleanup` // methods for more info). containerCleanupInfos map[string]*containerCleanupInfo + cleanupInfosLock sync.RWMutex } // TODO: handle context. From 1b1608dfee228377cbcf82b59467a506d455b402 Mon Sep 17 00:00:00 2001 From: knight42 Date: Fri, 7 Aug 2020 17:41:55 +0800 Subject: [PATCH 08/96] test(kubelet): add a regression test to verify kubelet would not panic --- .../dockershim/docker_container_test.go | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/pkg/kubelet/dockershim/docker_container_test.go b/pkg/kubelet/dockershim/docker_container_test.go index 7834da3315c30..e6c99c694bbb7 100644 --- a/pkg/kubelet/dockershim/docker_container_test.go +++ b/pkg/kubelet/dockershim/docker_container_test.go @@ -23,6 +23,7 @@ import ( "fmt" "path/filepath" "strings" + "sync" "testing" "time" @@ -51,6 +52,67 @@ func getTestCTX() context.Context { return context.Background() } +// TestConcurrentlyCreateAndDeleteContainers is a regression test for #93771, which ensures +// kubelet would not panic on concurrent writes to `dockerService.containerCleanupInfos`. +func TestConcurrentlyCreateAndDeleteContainers(t *testing.T) { + ds, _, _ := newTestDockerService() + podName, namespace := "foo", "bar" + containerName, image := "sidecar", "logger" + + const count = 20 + configs := make([]*runtimeapi.ContainerConfig, 0, count) + sConfigs := make([]*runtimeapi.PodSandboxConfig, 0, count) + for i := 0; i < count; i++ { + s := makeSandboxConfig(fmt.Sprintf("%s%d", podName, i), + fmt.Sprintf("%s%d", namespace, i), fmt.Sprintf("%d", i), 0) + labels := map[string]string{"concurrent-test": fmt.Sprintf("label%d", i)} + c := makeContainerConfig(s, fmt.Sprintf("%s%d", containerName, i), + fmt.Sprintf("%s:v%d", image, i), uint32(i), labels, nil) + sConfigs = append(sConfigs, s) + configs = append(configs, c) + } + + containerIDs := make(chan string, len(configs)) // make channel non-blocking to simulate concurrent containers creation + + var ( + creationWg sync.WaitGroup + deletionWg sync.WaitGroup + ) + + creationWg.Add(len(configs)) + + go func() { + creationWg.Wait() + close(containerIDs) + }() + for i := range configs { + go func(i int) { + defer creationWg.Done() + // We don't care about the sandbox id; pass a bogus one. + sandboxID := fmt.Sprintf("sandboxid%d", i) + req := &runtimeapi.CreateContainerRequest{PodSandboxId: sandboxID, Config: configs[i], SandboxConfig: sConfigs[i]} + createResp, err := ds.CreateContainer(getTestCTX(), req) + if err != nil { + t.Errorf("CreateContainer: %v", err) + return + } + containerIDs <- createResp.ContainerId + }(i) + } + + for containerID := range containerIDs { + deletionWg.Add(1) + go func(id string) { + defer deletionWg.Done() + _, err := ds.RemoveContainer(getTestCTX(), &runtimeapi.RemoveContainerRequest{ContainerId: id}) + if err != nil { + t.Errorf("RemoveContainer: %v", err) + } + }(containerID) + } + deletionWg.Wait() +} + // TestListContainers creates several containers and then list them to check // whether the correct metadatas, states, and labels are returned. func TestListContainers(t *testing.T) { From aefa818cd422289ec969fa389657f6343635ca64 Mon Sep 17 00:00:00 2001 From: Matt Miller Date: Fri, 28 Aug 2020 00:02:35 -0500 Subject: [PATCH 09/96] Remove duplicate nodeSelector Make the yaml valid. --- .../dns-horizontal-autoscaler/dns-horizontal-autoscaler.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/cluster/addons/dns-horizontal-autoscaler/dns-horizontal-autoscaler.yaml b/cluster/addons/dns-horizontal-autoscaler/dns-horizontal-autoscaler.yaml index e12d4063018aa..83a25f9eacf08 100644 --- a/cluster/addons/dns-horizontal-autoscaler/dns-horizontal-autoscaler.yaml +++ b/cluster/addons/dns-horizontal-autoscaler/dns-horizontal-autoscaler.yaml @@ -105,6 +105,4 @@ spec: tolerations: - key: "CriticalAddonsOnly" operator: "Exists" - nodeSelector: - kubernetes.io/os: linux serviceAccountName: kube-dns-autoscaler From 3392fdf6776bd9db4755cd15b6c7d8678d450a9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Guilherme=20Vanz?= Date: Tue, 7 Jul 2020 11:21:42 -0300 Subject: [PATCH 10/96] cleanup: decrease log level from warn to v3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If a pod has a configmap/secret volume an annoying message shows up in the log approximately every 70 seconds. This happens because the desiredStateOfWorldPopulator sync loop always call the MarkRemountRequired. The function finds the volume plugin and check if the plugin requires mount. Configmap and secret plugins always returns true for that. Thus, the reconciler code of the volume manager remounts the volume every time. This commit decrease the log level of that message in the mount function from warning to V4. Signed-off-by: José Guilherme Vanz --- pkg/volume/volume_linux.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/volume/volume_linux.go b/pkg/volume/volume_linux.go index d7b8e87c7da2e..602452e6bf08d 100644 --- a/pkg/volume/volume_linux.go +++ b/pkg/volume/volume_linux.go @@ -46,7 +46,7 @@ func SetVolumeOwnership(mounter Mounter, fsGroup *int64, fsGroupChangePolicy *v1 fsGroupPolicyEnabled := utilfeature.DefaultFeatureGate.Enabled(features.ConfigurableFSGroupPolicy) - klog.Warningf("Setting volume ownership for %s and fsGroup set. If the volume has a lot of files then setting volume ownership could be slow, see https://github.com/kubernetes/kubernetes/issues/69699", mounter.GetPath()) + klog.V(3).Infof("Setting volume ownership for %s and fsGroup set. If the volume has a lot of files then setting volume ownership could be slow, see https://github.com/kubernetes/kubernetes/issues/69699", mounter.GetPath()) // This code exists for legacy purposes, so as old behaviour is entirely preserved when feature gate is disabled // TODO: remove this when ConfigurableFSGroupPolicy turns GA. From 3c4b036b5b211e62d626d3663c4518336ded3b38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Guilherme=20Vanz?= Date: Mon, 20 Jul 2020 09:28:21 -0300 Subject: [PATCH 11/96] Revert "cleanup: decrease log level from warn to v3" This reverts commit ebece49936e635f151fdd8a64fa2b77fd183e817. --- pkg/volume/volume_linux.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/volume/volume_linux.go b/pkg/volume/volume_linux.go index 602452e6bf08d..d7b8e87c7da2e 100644 --- a/pkg/volume/volume_linux.go +++ b/pkg/volume/volume_linux.go @@ -46,7 +46,7 @@ func SetVolumeOwnership(mounter Mounter, fsGroup *int64, fsGroupChangePolicy *v1 fsGroupPolicyEnabled := utilfeature.DefaultFeatureGate.Enabled(features.ConfigurableFSGroupPolicy) - klog.V(3).Infof("Setting volume ownership for %s and fsGroup set. If the volume has a lot of files then setting volume ownership could be slow, see https://github.com/kubernetes/kubernetes/issues/69699", mounter.GetPath()) + klog.Warningf("Setting volume ownership for %s and fsGroup set. If the volume has a lot of files then setting volume ownership could be slow, see https://github.com/kubernetes/kubernetes/issues/69699", mounter.GetPath()) // This code exists for legacy purposes, so as old behaviour is entirely preserved when feature gate is disabled // TODO: remove this when ConfigurableFSGroupPolicy turns GA. From 3fa39f850acbbbf61848d7c960b0569c87431b4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Guilherme=20Vanz?= Date: Mon, 20 Jul 2020 10:41:53 -0300 Subject: [PATCH 12/96] cleanup: print warning message after timeout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If a pod has a configmap/secret volume an annoying message shows up in the log approximately every 70 seconds. This happens because the desiredStateOfWorldPopulator sync loop always call the MarkRemountRequired. The function finds the volume plugin and check if the plugin requires mount. Configmap and secret plugins always returns true for that. Thus, the reconciler code of the volume manager remounts the volume every time. This commit change the SetVolumeOwnership to print the warning only if the function does not finish within 30 seconds. Signed-off-by: José Guilherme Vanz --- pkg/volume/volume_linux.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/volume/volume_linux.go b/pkg/volume/volume_linux.go index d7b8e87c7da2e..ebef818d2a9b3 100644 --- a/pkg/volume/volume_linux.go +++ b/pkg/volume/volume_linux.go @@ -23,6 +23,7 @@ import ( "syscall" "os" + "time" v1 "k8s.io/api/core/v1" utilfeature "k8s.io/apiserver/pkg/util/feature" @@ -46,7 +47,10 @@ func SetVolumeOwnership(mounter Mounter, fsGroup *int64, fsGroupChangePolicy *v1 fsGroupPolicyEnabled := utilfeature.DefaultFeatureGate.Enabled(features.ConfigurableFSGroupPolicy) - klog.Warningf("Setting volume ownership for %s and fsGroup set. If the volume has a lot of files then setting volume ownership could be slow, see https://github.com/kubernetes/kubernetes/issues/69699", mounter.GetPath()) + timer := time.AfterFunc(30*time.Second, func() { + klog.Warningf("Setting volume ownership for %s and fsGroup set. If the volume has a lot of files then setting volume ownership could be slow, see https://github.com/kubernetes/kubernetes/issues/69699", mounter.GetPath()) + }) + defer timer.Stop() // This code exists for legacy purposes, so as old behaviour is entirely preserved when feature gate is disabled // TODO: remove this when ConfigurableFSGroupPolicy turns GA. From e0342c3d6c02e36887242229cd8319158fb5f95b Mon Sep 17 00:00:00 2001 From: Abu Kashem Date: Fri, 21 Aug 2020 13:15:04 -0400 Subject: [PATCH 13/96] Add impersonated user to system:authenticated group Currently if a group is specified for an impersonated user, 'system:authenticated' is not added to the 'Groups' list inside the request context. This causes priority and fairness match to fail. The catch-all flow schema needs the user to be in the 'system:authenticated' or in the 'system:unauthenticated' group. An impersonated user with a specified group is in neither. As a general rule, if an impersonated user has passed authorization checks, we should consider him authenticated. --- .../pkg/endpoints/filters/impersonation.go | 35 +++++- .../endpoints/filters/impersonation_test.go | 114 ++++++++++++------ test/cmd/authorization.sh | 4 +- 3 files changed, 112 insertions(+), 41 deletions(-) diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/filters/impersonation.go b/staging/src/k8s.io/apiserver/pkg/endpoints/filters/impersonation.go index ab767695fee66..1246ae863a3b9 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/filters/impersonation.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/filters/impersonation.go @@ -117,10 +117,37 @@ func WithImpersonation(handler http.Handler, a authorizer.Authorizer, s runtime. } } - if !groupsSpecified && username != user.Anonymous { - // When impersonating a non-anonymous user, if no groups were specified - // include the system:authenticated group in the impersonated user info - groups = append(groups, user.AllAuthenticated) + if username != user.Anonymous { + // When impersonating a non-anonymous user, include the 'system:authenticated' group + // in the impersonated user info: + // - if no groups were specified + // - if a group has been specified other than 'system:authenticated' + // + // If 'system:unauthenticated' group has been specified we should not include + // the 'system:authenticated' group. + addAuthenticated := true + for _, group := range groups { + if group == user.AllAuthenticated || group == user.AllUnauthenticated { + addAuthenticated = false + break + } + } + + if addAuthenticated { + groups = append(groups, user.AllAuthenticated) + } + } else { + addUnauthenticated := true + for _, group := range groups { + if group == user.AllUnauthenticated { + addUnauthenticated = false + break + } + } + + if addUnauthenticated { + groups = append(groups, user.AllUnauthenticated) + } } newUser := &user.DefaultInfo{ diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/filters/impersonation_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/filters/impersonation_test.go index 1408d2b1c49e6..376182b589c5c 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/filters/impersonation_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/filters/impersonation_test.go @@ -163,7 +163,7 @@ func TestImpersonationFilter(t *testing.T) { impersonationGroups: []string{"some-group"}, expectedUser: &user.DefaultInfo{ Name: "system:admin", - Groups: []string{"some-group"}, + Groups: []string{"some-group", "system:authenticated"}, Extra: map[string][]string{}, }, expectedCode: http.StatusOK, @@ -308,7 +308,7 @@ func TestImpersonationFilter(t *testing.T) { impersonationUser: "system:anonymous", expectedUser: &user.DefaultInfo{ Name: "system:anonymous", - Groups: []string{}, + Groups: []string{"system:unauthenticated"}, Extra: map[string][]string{}, }, expectedCode: http.StatusOK, @@ -341,6 +341,48 @@ func TestImpersonationFilter(t *testing.T) { }, expectedCode: http.StatusOK, }, + { + name: "specified-authenticated-group-prevents-double-adding-authenticated-group", + user: &user.DefaultInfo{ + Name: "dev", + Groups: []string{"wheel", "group-impersonater"}, + }, + impersonationUser: "system:admin", + impersonationGroups: []string{"some-group", "system:authenticated"}, + expectedUser: &user.DefaultInfo{ + Name: "system:admin", + Groups: []string{"some-group", "system:authenticated"}, + Extra: map[string][]string{}, + }, + expectedCode: http.StatusOK, + }, + { + name: "anonymous-user-should-include-unauthenticated-group", + user: &user.DefaultInfo{ + Name: "system:admin", + }, + impersonationUser: "system:anonymous", + expectedUser: &user.DefaultInfo{ + Name: "system:anonymous", + Groups: []string{"system:unauthenticated"}, + Extra: map[string][]string{}, + }, + expectedCode: http.StatusOK, + }, + { + name: "anonymous-user-prevents-double-adding-unauthenticated-group", + user: &user.DefaultInfo{ + Name: "system:admin", + }, + impersonationUser: "system:anonymous", + impersonationGroups: []string{"system:unauthenticated"}, + expectedUser: &user.DefaultInfo{ + Name: "system:anonymous", + Groups: []string{"system:unauthenticated"}, + Extra: map[string][]string{}, + }, + expectedCode: http.StatusOK, + }, } var ctx context.Context @@ -398,42 +440,44 @@ func TestImpersonationFilter(t *testing.T) { defer server.Close() for _, tc := range testCases { - func() { - lock.Lock() - defer lock.Unlock() - ctx = request.WithUser(request.NewContext(), tc.user) - }() + t.Run(tc.name, func(t *testing.T) { + func() { + lock.Lock() + defer lock.Unlock() + ctx = request.WithUser(request.NewContext(), tc.user) + }() - req, err := http.NewRequest("GET", server.URL, nil) - if err != nil { - t.Errorf("%s: unexpected error: %v", tc.name, err) - continue - } - if len(tc.impersonationUser) > 0 { - req.Header.Add(authenticationapi.ImpersonateUserHeader, tc.impersonationUser) - } - for _, group := range tc.impersonationGroups { - req.Header.Add(authenticationapi.ImpersonateGroupHeader, group) - } - for extraKey, values := range tc.impersonationUserExtras { - for _, value := range values { - req.Header.Add(authenticationapi.ImpersonateUserExtraHeaderPrefix+extraKey, value) + req, err := http.NewRequest("GET", server.URL, nil) + if err != nil { + t.Errorf("%s: unexpected error: %v", tc.name, err) + return + } + if len(tc.impersonationUser) > 0 { + req.Header.Add(authenticationapi.ImpersonateUserHeader, tc.impersonationUser) + } + for _, group := range tc.impersonationGroups { + req.Header.Add(authenticationapi.ImpersonateGroupHeader, group) + } + for extraKey, values := range tc.impersonationUserExtras { + for _, value := range values { + req.Header.Add(authenticationapi.ImpersonateUserExtraHeaderPrefix+extraKey, value) + } } - } - resp, err := http.DefaultClient.Do(req) - if err != nil { - t.Errorf("%s: unexpected error: %v", tc.name, err) - continue - } - if resp.StatusCode != tc.expectedCode { - t.Errorf("%s: expected %v, actual %v", tc.name, tc.expectedCode, resp.StatusCode) - continue - } + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Errorf("%s: unexpected error: %v", tc.name, err) + return + } + if resp.StatusCode != tc.expectedCode { + t.Errorf("%s: expected %v, actual %v", tc.name, tc.expectedCode, resp.StatusCode) + return + } - if !reflect.DeepEqual(actualUser, tc.expectedUser) { - t.Errorf("%s: expected %#v, actual %#v", tc.name, tc.expectedUser, actualUser) - continue - } + if !reflect.DeepEqual(actualUser, tc.expectedUser) { + t.Errorf("%s: expected %#v, actual %#v", tc.name, tc.expectedUser, actualUser) + return + } + }) } } diff --git a/test/cmd/authorization.sh b/test/cmd/authorization.sh index e271fb1a546be..1167b9016791a 100755 --- a/test/cmd/authorization.sh +++ b/test/cmd/authorization.sh @@ -71,8 +71,8 @@ run_impersonation_tests() { # --as-group kubectl create -f hack/testdata/csr.yml "${kube_flags_with_token[@]:?}" --as=user1 --as-group=group2 --as-group=group1 --as-group=,,,chameleon - kube::test::get_object_assert 'csr/foo' '{{len .spec.groups}}' '3' - kube::test::get_object_assert 'csr/foo' '{{range .spec.groups}}{{.}} {{end}}' 'group2 group1 ,,,chameleon ' + kube::test::get_object_assert 'csr/foo' '{{len .spec.groups}}' '4' + kube::test::get_object_assert 'csr/foo' '{{range .spec.groups}}{{.}} {{end}}' 'group2 group1 ,,,chameleon system:authenticated ' kubectl delete -f hack/testdata/csr.yml "${kube_flags_with_token[@]:?}" fi From 065f041cb69a3a524e98ded79f1912e260e0dec3 Mon Sep 17 00:00:00 2001 From: "Rostislav M. Georgiev" Date: Wed, 2 Sep 2020 12:52:02 +0300 Subject: [PATCH 14/96] kubeadm: Fix `upgrade plan` for air-gapped setups A bug was discovered in the `enforceRequirements` func for `upgrade plan`. If a command line argument that specifies the target Kubernetes version is supplied, the returned `ClusterConfiguration` by `enforceRequirements` will have its `KubernetesVersion` field set to the new version. If no version was specified, the returned `KubernetesVersion` points to the currently installed one. This remained undetected for a couple of reasons - It's only `upgrade plan` that allows for the version command line argument to be optional (in `upgrade plan` it's mandatory) - Prior to 1.19, the implementation of `upgrade plan` did not make use of the `KubernetesVersion` returned by `enforceRequirements`. `upgrade plan` supports this optional command line argument to enable air-gapped setups (as not specifying a version on the command line will end up looking for the latest version over the Interned). Hence, the only option is to make `enforceRequirements` consistent in the `upgrade plan` case and always return the currently installed version in the `KubernetesVersion` field. Signed-off-by: Rostislav M. Georgiev --- cmd/kubeadm/app/cmd/upgrade/common.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/cmd/kubeadm/app/cmd/upgrade/common.go b/cmd/kubeadm/app/cmd/upgrade/common.go index fe8e54a4143a8..71b2fab6bccf2 100644 --- a/cmd/kubeadm/app/cmd/upgrade/common.go +++ b/cmd/kubeadm/app/cmd/upgrade/common.go @@ -185,7 +185,15 @@ func enforceRequirements(flags *applyPlanFlags, args []string, dryRun bool, upgr // If option was specified in both args and config file, args will overwrite the config file. if len(args) == 1 { newK8sVersion = args[0] - cfg.KubernetesVersion = newK8sVersion + if upgradeApply { + // The `upgrade apply` version always overwrites the KubernetesVersion in the returned cfg with the target + // version. While this is not the same for `upgrade plan` where the KubernetesVersion should be the old + // one (because the call to getComponentConfigVersionStates requires the currently installed version). + // This also makes the KubernetesVersion value returned for `upgrade plan` consistent as that command + // allows to not specify a target version in which case KubernetesVersion will always hold the currently + // installed one. + cfg.KubernetesVersion = newK8sVersion + } } // If features gates are passed to the command line, use it (otherwise use featureGates from configuration) From c9d4923fa5438bc820bcf3b6a34cb747befaf59a Mon Sep 17 00:00:00 2001 From: gobomb Date: Mon, 3 Aug 2020 09:30:39 +0000 Subject: [PATCH 15/96] let panics propagate up when processLoop panic --- .../client-go/tools/cache/controller.go | 2 +- .../client-go/tools/cache/controller_test.go | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/client-go/tools/cache/controller.go b/staging/src/k8s.io/client-go/tools/cache/controller.go index 916ca9cc118ef..3ad9b53bbea3d 100644 --- a/staging/src/k8s.io/client-go/tools/cache/controller.go +++ b/staging/src/k8s.io/client-go/tools/cache/controller.go @@ -144,11 +144,11 @@ func (c *controller) Run(stopCh <-chan struct{}) { c.reflectorMutex.Unlock() var wg wait.Group - defer wg.Wait() wg.StartWithChannel(stopCh, r.Run) wait.Until(c.processLoop, time.Second, stopCh) + wg.Wait() } // Returns true once this controller has completed an initial resource listing diff --git a/staging/src/k8s.io/client-go/tools/cache/controller_test.go b/staging/src/k8s.io/client-go/tools/cache/controller_test.go index 2ce1dddf1961f..4c071281dda60 100644 --- a/staging/src/k8s.io/client-go/tools/cache/controller_test.go +++ b/staging/src/k8s.io/client-go/tools/cache/controller_test.go @@ -402,3 +402,49 @@ func TestUpdate(t *testing.T) { testDoneWG.Wait() close(stop) } + +func TestPanicPropagated(t *testing.T) { + // source simulates an apiserver object endpoint. + source := fcache.NewFakeControllerSource() + + // Make a controller that just panic if the AddFunc is called. + _, controller := NewInformer( + source, + &v1.Pod{}, + time.Millisecond*100, + ResourceEventHandlerFuncs{ + AddFunc: func(obj interface{}) { + // Create a panic. + panic("Just panic.") + }, + }, + ) + + // Run the controller and run it until we close stop. + stop := make(chan struct{}) + defer close(stop) + + propagated := make(chan interface{}) + go func() { + defer func() { + if r := recover(); r != nil { + propagated <- r + } + }() + controller.Run(stop) + }() + // Let's add a object to the source. It will trigger a panic. + source.Add(&v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "test"}}) + + // Check if the panic propagated up. + select { + case p := <-propagated: + if p == "Just panic." { + t.Logf("Test Passed") + } else { + t.Errorf("unrecognized panic in controller run: %v", p) + } + case <-time.After(wait.ForeverTestTimeout): + t.Errorf("timeout: the panic failed to propagate from the controller run method!") + } +} From e21e490535fb7a5abd2f6f2c03a11613767e4800 Mon Sep 17 00:00:00 2001 From: janeczku Date: Fri, 28 Aug 2020 21:17:27 +0200 Subject: [PATCH 16/96] Fixed reflector not recovering from "Too large resource version" errors with API servers 1.17.0-1.18.5 --- .../k8s.io/client-go/tools/cache/reflector.go | 23 ++++++++++++++++++- .../client-go/tools/cache/reflector_test.go | 18 +++++++++++---- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/staging/src/k8s.io/client-go/tools/cache/reflector.go b/staging/src/k8s.io/client-go/tools/cache/reflector.go index a92b36f2c7bf8..e995abe253160 100644 --- a/staging/src/k8s.io/client-go/tools/cache/reflector.go +++ b/staging/src/k8s.io/client-go/tools/cache/reflector.go @@ -570,5 +570,26 @@ func isExpiredError(err error) bool { } func isTooLargeResourceVersionError(err error) bool { - return apierrors.HasStatusCause(err, metav1.CauseTypeResourceVersionTooLarge) + if apierrors.HasStatusCause(err, metav1.CauseTypeResourceVersionTooLarge) { + return true + } + // In Kubernetes 1.17.0-1.18.5, the api server doesn't set the error status cause to + // metav1.CauseTypeResourceVersionTooLarge to indicate that the requested minimum resource + // version is larger than the largest currently available resource version. To ensure backward + // compatibility with these server versions we also need to detect the error based on the content + // of the error message field. + if !apierrors.IsTimeout(err) { + return false + } + apierr, ok := err.(apierrors.APIStatus) + if !ok || apierr == nil || apierr.Status().Details == nil { + return false + } + for _, cause := range apierr.Status().Details.Causes { + // Matches the message returned by api server 1.17.0-1.18.5 for this error condition + if cause.Message == "Too large resource version" { + return true + } + } + return false } diff --git a/staging/src/k8s.io/client-go/tools/cache/reflector_test.go b/staging/src/k8s.io/client-go/tools/cache/reflector_test.go index 4a25fccefd72c..5394e6684c7d9 100644 --- a/staging/src/k8s.io/client-go/tools/cache/reflector_test.go +++ b/staging/src/k8s.io/client-go/tools/cache/reflector_test.go @@ -738,9 +738,14 @@ func TestReflectorFullListIfTooLarge(t *testing.T) { err := apierrors.NewTimeoutError("too large resource version", 1) err.ErrStatus.Details.Causes = []metav1.StatusCause{{Type: metav1.CauseTypeResourceVersionTooLarge}} return nil, err + // relist after the initial list (covers the error format used in api server 1.17.0-1.18.5) + case "30": + err := apierrors.NewTimeoutError("too large resource version", 1) + err.ErrStatus.Details.Causes = []metav1.StatusCause{{Message: "Too large resource version"}} + return nil, err // relist from etcd after "too large" error case "": - return &v1.PodList{ListMeta: metav1.ListMeta{ResourceVersion: "10"}}, nil + return &v1.PodList{ListMeta: metav1.ListMeta{ResourceVersion: "30"}}, nil default: return nil, fmt.Errorf("unexpected List call: %s", options.ResourceVersion) } @@ -759,12 +764,15 @@ func TestReflectorFullListIfTooLarge(t *testing.T) { // may be synced to a different version and they will never converge. // TODO: We should use etcd progress-notify feature to avoid this behavior but until this is // done we simply try to relist from now to avoid continuous errors on relists. - stopCh = make(chan struct{}) - if err := r.ListAndWatch(stopCh); err != nil { - t.Fatal(err) + for i := 1; i <= 2; i++ { + // relist twice to cover the two variants of TooLargeResourceVersion api errors + stopCh = make(chan struct{}) + if err := r.ListAndWatch(stopCh); err != nil { + t.Fatal(err) + } } - expectedRVs := []string{"0", "20", ""} + expectedRVs := []string{"0", "20", "", "30", ""} if !reflect.DeepEqual(listCallRVs, expectedRVs) { t.Errorf("Expected series of list calls with resource version of %#v but got: %#v", expectedRVs, listCallRVs) } From 228e1ee5691b2c4dac989ab242ba9b04439f5175 Mon Sep 17 00:00:00 2001 From: "Lubomir I. Ivanov" Date: Tue, 1 Sep 2020 17:07:30 +0300 Subject: [PATCH 17/96] kubeadm: make the scheduler and KCM connect to local endpoint Pinning the kube-controller-manager and kube-scheduler kubeconfig files to point to the control-plane-endpoint can be problematic during immutable upgrades if one of these components ends up contacting an N-1 kube-apiserver: https://kubernetes.io/docs/setup/release/version-skew-policy/#kube-controller-manager-kube-scheduler-and-cloud-controller-manager For example, the components can send a request for a non-existing API version. Instead of using the CPE for these components, use the LocalAPIEndpoint. This guarantees that the components would talk to the local kube-apiserver, which should be the same version, unless the user explicitly patched manifests. --- .../app/phases/kubeconfig/kubeconfig.go | 15 ++-- .../app/phases/kubeconfig/kubeconfig_test.go | 18 ++++- cmd/kubeadm/app/util/endpoint.go | 70 +++++++++++++------ 3 files changed, 73 insertions(+), 30 deletions(-) diff --git a/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go b/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go index dbc2aed5b168a..785376b3a9a34 100644 --- a/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go +++ b/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go @@ -362,32 +362,37 @@ func ValidateKubeconfigsForExternalCA(outDir string, cfg *kubeadmapi.InitConfigu } func getKubeConfigSpecsBase(cfg *kubeadmapi.InitConfiguration) (map[string]*kubeConfigSpec, error) { - apiServer, err := kubeadmutil.GetControlPlaneEndpoint(cfg.ControlPlaneEndpoint, &cfg.LocalAPIEndpoint) + controlPlaneEndpoint, err := kubeadmutil.GetControlPlaneEndpoint(cfg.ControlPlaneEndpoint, &cfg.LocalAPIEndpoint) if err != nil { return nil, err } + localAPIEndpoint, err := kubeadmutil.GetLocalAPIEndpoint(&cfg.LocalAPIEndpoint) + if err != nil { + return nil, err + } + return map[string]*kubeConfigSpec{ kubeadmconstants.AdminKubeConfigFileName: { - APIServer: apiServer, + APIServer: controlPlaneEndpoint, ClientName: "kubernetes-admin", ClientCertAuth: &clientCertAuth{ Organizations: []string{kubeadmconstants.SystemPrivilegedGroup}, }, }, kubeadmconstants.KubeletKubeConfigFileName: { - APIServer: apiServer, + APIServer: controlPlaneEndpoint, ClientName: fmt.Sprintf("%s%s", kubeadmconstants.NodesUserPrefix, cfg.NodeRegistration.Name), ClientCertAuth: &clientCertAuth{ Organizations: []string{kubeadmconstants.NodesGroup}, }, }, kubeadmconstants.ControllerManagerKubeConfigFileName: { - APIServer: apiServer, + APIServer: localAPIEndpoint, ClientName: kubeadmconstants.ControllerManagerUser, ClientCertAuth: &clientCertAuth{}, }, kubeadmconstants.SchedulerKubeConfigFileName: { - APIServer: apiServer, + APIServer: localAPIEndpoint, ClientName: kubeadmconstants.SchedulerUser, ClientCertAuth: &clientCertAuth{}, }, diff --git a/cmd/kubeadm/app/phases/kubeconfig/kubeconfig_test.go b/cmd/kubeadm/app/phases/kubeconfig/kubeconfig_test.go index 40ad4a79794d4..ede3bf5ada39d 100644 --- a/cmd/kubeadm/app/phases/kubeconfig/kubeconfig_test.go +++ b/cmd/kubeadm/app/phases/kubeconfig/kubeconfig_test.go @@ -167,8 +167,22 @@ func TestGetKubeConfigSpecs(t *testing.T) { if err != nil { t.Error(err) } - if spec.APIServer != controlPlaneEndpoint { - t.Errorf("getKubeConfigSpecs didn't injected cfg.APIServer endpoint into spec for %s", assertion.kubeConfigFile) + localAPIEndpoint, err := kubeadmutil.GetLocalAPIEndpoint(&cfg.LocalAPIEndpoint) + if err != nil { + t.Error(err) + } + + switch assertion.kubeConfigFile { + case kubeadmconstants.AdminKubeConfigFileName, kubeadmconstants.KubeletKubeConfigFileName: + if spec.APIServer != controlPlaneEndpoint { + t.Errorf("expected getKubeConfigSpecs for %s to set cfg.APIServer to %s, got %s", + assertion.kubeConfigFile, controlPlaneEndpoint, spec.APIServer) + } + case kubeadmconstants.ControllerManagerKubeConfigFileName, kubeadmconstants.SchedulerKubeConfigFileName: + if spec.APIServer != localAPIEndpoint { + t.Errorf("expected getKubeConfigSpecs for %s to set cfg.APIServer to %s, got %s", + assertion.kubeConfigFile, localAPIEndpoint, spec.APIServer) + } } // Asserts CA certs and CA keys loaded into specs diff --git a/cmd/kubeadm/app/util/endpoint.go b/cmd/kubeadm/app/util/endpoint.go index 305f9e880c1b8..d11060e5e2678 100644 --- a/cmd/kubeadm/app/util/endpoint.go +++ b/cmd/kubeadm/app/util/endpoint.go @@ -34,22 +34,10 @@ import ( // - if the controlPlaneEndpoint is defined but without a port number, use the controlPlaneEndpoint + localEndpoint.BindPort is used. // - Otherwise, in case the controlPlaneEndpoint is not defined, use the localEndpoint.AdvertiseAddress + the localEndpoint.BindPort. func GetControlPlaneEndpoint(controlPlaneEndpoint string, localEndpoint *kubeadmapi.APIEndpoint) (string, error) { - // parse the bind port - bindPortString := strconv.Itoa(int(localEndpoint.BindPort)) - if _, err := ParsePort(bindPortString); err != nil { - return "", errors.Wrapf(err, "invalid value %q given for api.bindPort", localEndpoint.BindPort) - } - - // parse the AdvertiseAddress - var ip = net.ParseIP(localEndpoint.AdvertiseAddress) - if ip == nil { - return "", errors.Errorf("invalid value `%s` given for api.advertiseAddress", localEndpoint.AdvertiseAddress) - } - - // set the control-plane url using localEndpoint.AdvertiseAddress + the localEndpoint.BindPort - controlPlaneURL := &url.URL{ - Scheme: "https", - Host: net.JoinHostPort(ip.String(), bindPortString), + // get the URL of the local endpoint + localAPIEndpoint, err := GetLocalAPIEndpoint(localEndpoint) + if err != nil { + return "", err } // if the controlplane endpoint is defined @@ -62,22 +50,32 @@ func GetControlPlaneEndpoint(controlPlaneEndpoint string, localEndpoint *kubeadm } // if a port is provided within the controlPlaneAddress warn the users we are using it, else use the bindport + localEndpointPort := strconv.Itoa(int(localEndpoint.BindPort)) if port != "" { - if port != bindPortString { + if port != localEndpointPort { fmt.Println("[endpoint] WARNING: port specified in controlPlaneEndpoint overrides bindPort in the controlplane address") } } else { - port = bindPortString + port = localEndpointPort } // overrides the control-plane url using the controlPlaneAddress (and eventually the bindport) - controlPlaneURL = &url.URL{ - Scheme: "https", - Host: net.JoinHostPort(host, port), - } + return formatURL(host, port).String(), nil } - return controlPlaneURL.String(), nil + return localAPIEndpoint, nil +} + +// GetLocalAPIEndpoint parses an APIEndpoint and returns it as a string, +// or returns and error in case it cannot be parsed. +func GetLocalAPIEndpoint(localEndpoint *kubeadmapi.APIEndpoint) (string, error) { + // get the URL of the local endpoint + localEndpointIP, localEndpointPort, err := parseAPIEndpoint(localEndpoint) + if err != nil { + return "", err + } + url := formatURL(localEndpointIP.String(), localEndpointPort) + return url.String(), nil } // ParseHostPort parses a network address of the form "host:port", "ipv4:port", "[ipv6]:port" into host and port; @@ -123,3 +121,29 @@ func ParsePort(port string) (int, error) { return 0, errors.New("port must be a valid number between 1 and 65535, inclusive") } + +// parseAPIEndpoint parses an APIEndpoint and returns the AdvertiseAddress as net.IP and the BindPort as string. +// If the BindPort or AdvertiseAddress are invalid it returns an error. +func parseAPIEndpoint(localEndpoint *kubeadmapi.APIEndpoint) (net.IP, string, error) { + // parse the bind port + bindPortString := strconv.Itoa(int(localEndpoint.BindPort)) + if _, err := ParsePort(bindPortString); err != nil { + return nil, "", errors.Wrapf(err, "invalid value %q given for api.bindPort", localEndpoint.BindPort) + } + + // parse the AdvertiseAddress + var ip = net.ParseIP(localEndpoint.AdvertiseAddress) + if ip == nil { + return nil, "", errors.Errorf("invalid value `%s` given for api.advertiseAddress", localEndpoint.AdvertiseAddress) + } + + return ip, bindPortString, nil +} + +// formatURL takes a host and a port string and creates a net.URL using https scheme +func formatURL(host, port string) *url.URL { + return &url.URL{ + Scheme: "https", + Host: net.JoinHostPort(host, port), + } +} From 47564331d36dcf494913857f556ea0acf1e4a8bc Mon Sep 17 00:00:00 2001 From: Michelle Au Date: Tue, 11 Aug 2020 18:34:24 -0700 Subject: [PATCH 18/96] Update snapshot controller to use k8s.gcr.io Change-Id: I30005efec519840142bc7151aeaa543912a2f84b --- .../volume-snapshot-controller-deployment.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cluster/addons/volumesnapshots/volume-snapshot-controller/volume-snapshot-controller-deployment.yaml b/cluster/addons/volumesnapshots/volume-snapshot-controller/volume-snapshot-controller-deployment.yaml index 32d7f2a3911a0..0af4eb1cb46d0 100644 --- a/cluster/addons/volumesnapshots/volume-snapshot-controller/volume-snapshot-controller-deployment.yaml +++ b/cluster/addons/volumesnapshots/volume-snapshot-controller/volume-snapshot-controller-deployment.yaml @@ -22,8 +22,6 @@ spec: serviceAccount: volume-snapshot-controller containers: - name: volume-snapshot-controller - # TODO(xyang): Replace with an official image when it is released - image: gcr.io/k8s-staging-csi/snapshot-controller:v2.0.0-rc2 + image: k8s.gcr.io/sig-storage/snapshot-controller:v2.1.1 args: - "--v=5" - imagePullPolicy: Always From 922b9189b48623ddf982ad118632b72c944301a8 Mon Sep 17 00:00:00 2001 From: "Lubomir I. Ivanov" Date: Fri, 4 Sep 2020 04:37:53 +0300 Subject: [PATCH 19/96] kubeadm: remove the CoreDNS check for supported image digests The isCoreDNSVersionSupported() check assumes that there is a running kubelet, that manages the CoreDNS containers. If the containers are being created it is not possible to fetch their image digest. To workaround that, a poll can be used in isCoreDNSVersionSupported() and wait for the CoreDNS Pods are expected to be running. Depending on timing and CNI yet to be installed this can cause problems related to addon idempotency of "kubeadm init", because if the CoreDNS Pods are waiting for another step they will never get running. Remove the function isCoreDNSVersionSupported() and assume that the version is always supported. Rely on the Corefile migration library to error out if it must. --- cmd/kubeadm/app/phases/addons/dns/dns.go | 45 ++---------------------- 1 file changed, 3 insertions(+), 42 deletions(-) diff --git a/cmd/kubeadm/app/phases/addons/dns/dns.go b/cmd/kubeadm/app/phases/addons/dns/dns.go index 96c47ef0248ec..a1a96e54001c1 100644 --- a/cmd/kubeadm/app/phases/addons/dns/dns.go +++ b/cmd/kubeadm/app/phases/addons/dns/dns.go @@ -21,7 +21,6 @@ import ( "encoding/json" "fmt" "net" - "regexp" "strings" "github.com/caddyserver/caddy/caddyfile" @@ -268,22 +267,15 @@ func createCoreDNSAddon(deploymentBytes, serviceBytes, configBytes []byte, clien return errors.Wrap(err, "unable to fetch CoreDNS current installed version and ConfigMap.") } - canMigrateCorefile, err := isCoreDNSVersionSupported(client) - if err != nil { - return err - } - corefileMigrationRequired, err := isCoreDNSConfigMapMigrationRequired(corefile, currentInstalledCoreDNSVersion) if err != nil { return err } - if !canMigrateCorefile { - klog.Warningf("the CoreDNS Configuration will not be migrated due to unsupported version of CoreDNS. " + - "The existing CoreDNS Corefile configuration and deployment has been retained.") - } + // Assume that migration is always possible, rely on migrateCoreDNSCorefile() to fail if not. + canMigrateCorefile := true - if corefileMigrationRequired && canMigrateCorefile { + if corefileMigrationRequired { if err := migrateCoreDNSCorefile(client, coreDNSConfigMap, corefile, currentInstalledCoreDNSVersion); err != nil { // Errors in Corefile Migration is verified during preflight checks. This part will be executed when a user has chosen // to ignore preflight check errors. @@ -392,37 +384,6 @@ func isCoreDNSConfigMapMigrationRequired(corefile, currentInstalledCoreDNSVersio return isMigrationRequired, nil } -var ( - // imageDigestMatcher is used to match the SHA256 digest from the ImageID of the CoreDNS pods - imageDigestMatcher = regexp.MustCompile(`^.*(?i:sha256:([[:alnum:]]{64}))$`) -) - -func isCoreDNSVersionSupported(client clientset.Interface) (bool, error) { - isValidVersion := true - coreDNSPodList, err := client.CoreV1().Pods(metav1.NamespaceSystem).List( - context.TODO(), - metav1.ListOptions{ - LabelSelector: "k8s-app=kube-dns", - }, - ) - if err != nil { - return false, errors.Wrap(err, "unable to list CoreDNS pods") - } - - for _, pod := range coreDNSPodList.Items { - imageID := imageDigestMatcher.FindStringSubmatch(pod.Status.ContainerStatuses[0].ImageID) - if len(imageID) != 2 { - return false, errors.Errorf("unable to match SHA256 digest ID in %q", pod.Status.ContainerStatuses[0].ImageID) - } - // The actual digest should be at imageID[1] - if !migration.Released(imageID[1]) { - isValidVersion = false - } - } - - return isValidVersion, nil -} - func migrateCoreDNSCorefile(client clientset.Interface, cm *v1.ConfigMap, corefile, currentInstalledCoreDNSVersion string) error { // Since the current configuration present is not the default version, try and migrate it. updatedCorefile, err := migration.Migrate(currentInstalledCoreDNSVersion, kubeadmconstants.CoreDNSVersion, corefile, false) From 3226dafee1d184463710a6bbde910b4924262b39 Mon Sep 17 00:00:00 2001 From: jingyih Date: Fri, 28 Aug 2020 04:04:58 +0800 Subject: [PATCH 20/96] Update default etcd server to 3.4.13 --- build/dependencies.yaml | 2 +- build/workspace.bzl | 8 ++++---- cluster/gce/config-test.sh | 2 +- cluster/gce/manifests/etcd.manifest | 4 ++-- cluster/gce/upgrade-aliases.sh | 4 ++-- cmd/kubeadm/app/constants/constants.go | 6 +++--- hack/lib/etcd.sh | 2 +- .../sample-apiserver/artifacts/example/deployment.yaml | 2 +- test/e2e/framework/nodes_util.go | 2 +- test/utils/image/manifest.go | 2 +- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/build/dependencies.yaml b/build/dependencies.yaml index 868ba8d01b483..0f8d08d6a84a2 100644 --- a/build/dependencies.yaml +++ b/build/dependencies.yaml @@ -74,7 +74,7 @@ dependencies: # etcd - name: "etcd" - version: 3.4.9 + version: 3.4.13 refPaths: - path: cluster/gce/manifests/etcd.manifest match: etcd_docker_tag|etcd_version diff --git a/build/workspace.bzl b/build/workspace.bzl index c865c329bb1cd..2f8471c41eb2c 100644 --- a/build/workspace.bzl +++ b/build/workspace.bzl @@ -38,11 +38,11 @@ _CRI_TARBALL_ARCH_SHA256 = { "windows-amd64": "5045bcc6d8b0e6004be123ab99ea06e5b1b2ae1e586c968fcdf85fccd4d67ae1", } -ETCD_VERSION = "3.4.9" +ETCD_VERSION = "3.4.13" _ETCD_TARBALL_ARCH_SHA256 = { - "amd64": "bcab421f6bf4111accfceb004e0a0ac2bcfb92ac93081d9429e313248dd78c41", - "arm64": "fd9bf37662a851905d75160fea0f5d10055c1bee0a734e78c5112cc56c9faa18", - "ppc64le": "bfdcea0fc83c6d6edb70667a2272f8fc597c61976ecc6f8ecbfeb380ff02618b", + "amd64": "2ac029e47bab752dacdb7b30032f230f49e2f457cbc32e8f555c2210bb5ff107", + "arm64": "1934ebb9f9f6501f706111b78e5e321a7ff8d7792d3d96a76e2d01874e42a300", + "ppc64le": "fc77c3949b5178373734c3b276eb2281c954c3cd2225ccb05cdbdf721e1f775a", } # Dependencies needed for a Kubernetes "release", e.g. building docker images, diff --git a/cluster/gce/config-test.sh b/cluster/gce/config-test.sh index f44e810d60556..7e3d922986e6e 100755 --- a/cluster/gce/config-test.sh +++ b/cluster/gce/config-test.sh @@ -202,7 +202,7 @@ HEAPSTER_MACHINE_TYPE=${HEAPSTER_MACHINE_TYPE:-} NUM_ADDITIONAL_NODES=${NUM_ADDITIONAL_NODES:-} ADDITIONAL_MACHINE_TYPE=${ADDITIONAL_MACHINE_TYPE:-} -# Set etcd image (e.g. k8s.gcr.io/etcd) and version (e.g. 3.4.9-1) if you need +# Set etcd image (e.g. k8s.gcr.io/etcd) and version (e.g. 3.4.13-0) if you need # non-default version. export ETCD_IMAGE=${TEST_ETCD_IMAGE:-} export ETCD_DOCKER_REPOSITORY=${TEST_ETCD_DOCKER_REPOSITORY:-} diff --git a/cluster/gce/manifests/etcd.manifest b/cluster/gce/manifests/etcd.manifest index 29f5783820c03..f3b073e220509 100644 --- a/cluster/gce/manifests/etcd.manifest +++ b/cluster/gce/manifests/etcd.manifest @@ -15,7 +15,7 @@ "containers":[ { "name": "etcd-container", - "image": "{{ pillar.get('etcd_docker_repository', 'k8s.gcr.io/etcd') }}:{{ pillar.get('etcd_docker_tag', '3.4.9-1') }}", + "image": "{{ pillar.get('etcd_docker_repository', 'k8s.gcr.io/etcd') }}:{{ pillar.get('etcd_docker_tag', '3.4.13-0') }}", "resources": { "requests": { "cpu": {{ cpulimit }} @@ -31,7 +31,7 @@ "value": "{{ pillar.get('storage_backend', 'etcd3') }}" }, { "name": "TARGET_VERSION", - "value": "{{ pillar.get('etcd_version', '3.4.9') }}" + "value": "{{ pillar.get('etcd_version', '3.4.13') }}" }, { "name": "DATA_DIRECTORY", "value": "/var/etcd/data{{ suffix }}" diff --git a/cluster/gce/upgrade-aliases.sh b/cluster/gce/upgrade-aliases.sh index 2d7eb47b3046e..d54af73441e82 100755 --- a/cluster/gce/upgrade-aliases.sh +++ b/cluster/gce/upgrade-aliases.sh @@ -170,8 +170,8 @@ export KUBE_GCE_ENABLE_IP_ALIASES=true export SECONDARY_RANGE_NAME="pods-default" export STORAGE_BACKEND="etcd3" export STORAGE_MEDIA_TYPE="application/vnd.kubernetes.protobuf" -export ETCD_IMAGE=3.4.9-1 -export ETCD_VERSION=3.4.9 +export ETCD_IMAGE=3.4.13-0 +export ETCD_VERSION=3.4.13 # Upgrade master with updated kube envs "${KUBE_ROOT}/cluster/gce/upgrade.sh" -M -l diff --git a/cmd/kubeadm/app/constants/constants.go b/cmd/kubeadm/app/constants/constants.go index edcec2e2fc111..d5b345b418e4f 100644 --- a/cmd/kubeadm/app/constants/constants.go +++ b/cmd/kubeadm/app/constants/constants.go @@ -265,7 +265,7 @@ const ( MinExternalEtcdVersion = "3.2.18" // DefaultEtcdVersion indicates the default etcd version that kubeadm uses - DefaultEtcdVersion = "3.4.9-1" + DefaultEtcdVersion = "3.4.13-0" // Etcd defines variable used internally when referring to etcd component Etcd = "etcd" @@ -433,8 +433,8 @@ var ( 16: "3.3.17-0", 17: "3.4.3-0", 18: "3.4.3-0", - 19: "3.4.9-1", - 20: "3.4.9-1", + 19: "3.4.13-0", + 20: "3.4.13-0", } // KubeadmCertsClusterRoleName sets the name for the ClusterRole that allows diff --git a/hack/lib/etcd.sh b/hack/lib/etcd.sh index a100b601466a8..16845ae321dae 100755 --- a/hack/lib/etcd.sh +++ b/hack/lib/etcd.sh @@ -16,7 +16,7 @@ # A set of helpers for starting/running etcd for tests -ETCD_VERSION=${ETCD_VERSION:-3.4.9} +ETCD_VERSION=${ETCD_VERSION:-3.4.13} ETCD_HOST=${ETCD_HOST:-127.0.0.1} ETCD_PORT=${ETCD_PORT:-2379} export KUBE_INTEGRATION_ETCD_URL="http://${ETCD_HOST}:${ETCD_PORT}" diff --git a/staging/src/k8s.io/sample-apiserver/artifacts/example/deployment.yaml b/staging/src/k8s.io/sample-apiserver/artifacts/example/deployment.yaml index 8b0d2b24898ec..37e7b0f767967 100644 --- a/staging/src/k8s.io/sample-apiserver/artifacts/example/deployment.yaml +++ b/staging/src/k8s.io/sample-apiserver/artifacts/example/deployment.yaml @@ -26,4 +26,4 @@ spec: imagePullPolicy: Never args: [ "--etcd-servers=http://localhost:2379" ] - name: etcd - image: quay.io/coreos/etcd:v3.4.9 + image: quay.io/coreos/etcd:v3.4.13 diff --git a/test/e2e/framework/nodes_util.go b/test/e2e/framework/nodes_util.go index 2dc622cd10054..5f7c49803ac73 100644 --- a/test/e2e/framework/nodes_util.go +++ b/test/e2e/framework/nodes_util.go @@ -34,7 +34,7 @@ import ( e2essh "k8s.io/kubernetes/test/e2e/framework/ssh" ) -const etcdImage = "3.4.9-1" +const etcdImage = "3.4.13-0" // EtcdUpgrade upgrades etcd on GCE. func EtcdUpgrade(targetStorage, targetVersion string) error { diff --git a/test/utils/image/manifest.go b/test/utils/image/manifest.go index 5df50a5a5f098..e238274f0a141 100644 --- a/test/utils/image/manifest.go +++ b/test/utils/image/manifest.go @@ -212,7 +212,7 @@ func initImageConfigs() map[int]Config { configs[CudaVectorAdd2] = Config{e2eRegistry, "cuda-vector-add", "2.0"} configs[DebianIptables] = Config{buildImageRegistry, "debian-iptables", "v12.1.2"} configs[EchoServer] = Config{e2eRegistry, "echoserver", "2.2"} - configs[Etcd] = Config{gcRegistry, "etcd", "3.4.9"} + configs[Etcd] = Config{gcRegistry, "etcd", "3.4.13-0"} configs[GlusterDynamicProvisioner] = Config{dockerGluster, "glusterdynamic-provisioner", "v1.0"} configs[Httpd] = Config{dockerLibraryRegistry, "httpd", "2.4.38-alpine"} configs[HttpdNew] = Config{dockerLibraryRegistry, "httpd", "2.4.39-alpine"} From 2e5a8a4c7f9f85479225ae03e07e955a661c5773 Mon Sep 17 00:00:00 2001 From: Stephen Augustus Date: Sat, 5 Sep 2020 04:29:14 -0400 Subject: [PATCH 21/96] build/common.sh: Remove extraneous reference to debian-base image debian-base is no longer used for building core Kubernetes server components, so we remove the unnecessary local variable referencing it from kube::build::get_docker_wrapped_binaries(). Signed-off-by: Stephen Augustus --- build/common.sh | 1 - build/dependencies.yaml | 2 -- 2 files changed, 3 deletions(-) diff --git a/build/common.sh b/build/common.sh index fe33256f04bb2..ad7f66105febb 100755 --- a/build/common.sh +++ b/build/common.sh @@ -94,7 +94,6 @@ readonly KUBE_CONTAINER_RSYNC_PORT=8730 # $1 - server architecture kube::build::get_docker_wrapped_binaries() { local arch=$1 - local debian_base_version=v2.1.3 local debian_iptables_version=v12.1.2 local go_runner_version=buster-v2.0.0 ### If you change any of these lists, please also update DOCKERIZED_BINARIES diff --git a/build/dependencies.yaml b/build/dependencies.yaml index 0f8d08d6a84a2..dc1c4f8420f4e 100644 --- a/build/dependencies.yaml +++ b/build/dependencies.yaml @@ -118,8 +118,6 @@ dependencies: - name: "k8s.gcr.io/debian-base: dependents" version: 2.1.3 refPaths: - - path: build/common.sh - match: debian_base_version= - path: build/workspace.bzl match: tag = - path: cluster/images/etcd/Makefile From 2ecff9ab7fb0127cdff2a4a516b5276b641e3838 Mon Sep 17 00:00:00 2001 From: Stephen Augustus Date: Sat, 5 Sep 2020 04:45:42 -0400 Subject: [PATCH 22/96] build/lib/release: Explicitly use '--platform' in building server images When we switched to go-runner for building the apiserver, controller-manager, and scheduler server components, we no longer reference the individual architectures in the image names, specifically in the 'FROM' directive of the server image Dockerfiles. As a result, server images for non-amd64 images copy in the go-runner amd64 binary instead of the go-runner that matches that architecture. This commit explicitly sets the '--platform=linux/${arch}' to ensure we're pulling the correct go-runner arch from the manifest list. Before: FROM ${base_image} After: FROM --platform=linux/${arch} ${base_image} Signed-off-by: Stephen Augustus --- build/common.sh | 3 +-- build/lib/release.sh | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/build/common.sh b/build/common.sh index ad7f66105febb..39b297e93cdc5 100755 --- a/build/common.sh +++ b/build/common.sh @@ -93,7 +93,6 @@ readonly KUBE_CONTAINER_RSYNC_PORT=8730 # # $1 - server architecture kube::build::get_docker_wrapped_binaries() { - local arch=$1 local debian_iptables_version=v12.1.2 local go_runner_version=buster-v2.0.0 ### If you change any of these lists, please also update DOCKERIZED_BINARIES @@ -102,7 +101,7 @@ kube::build::get_docker_wrapped_binaries() { "kube-apiserver,${KUBE_BASE_IMAGE_REGISTRY}/go-runner:${go_runner_version}" "kube-controller-manager,${KUBE_BASE_IMAGE_REGISTRY}/go-runner:${go_runner_version}" "kube-scheduler,${KUBE_BASE_IMAGE_REGISTRY}/go-runner:${go_runner_version}" - "kube-proxy,${KUBE_BASE_IMAGE_REGISTRY}/debian-iptables-${arch}:${debian_iptables_version}" + "kube-proxy,${KUBE_BASE_IMAGE_REGISTRY}/debian-iptables:${debian_iptables_version}" ) echo "${targets[@]}" diff --git a/build/lib/release.sh b/build/lib/release.sh index dae9c21c8e5b3..6b3d45dfbb045 100644 --- a/build/lib/release.sh +++ b/build/lib/release.sh @@ -334,7 +334,7 @@ function kube::release::create_docker_images_for_server() { local images_dir binary_dir="$1" arch="$2" - binaries=$(kube::build::get_docker_wrapped_binaries "${arch}") + binaries=$(kube::build::get_docker_wrapped_binaries) images_dir="${RELEASE_IMAGES}/${arch}" mkdir -p "${images_dir}" @@ -375,7 +375,7 @@ function kube::release::create_docker_images_for_server() { ln "${KUBE_ROOT}/build/nsswitch.conf" "${docker_build_path}/nsswitch.conf" chmod 0644 "${docker_build_path}/nsswitch.conf" cat < "${docker_file_path}" -FROM ${base_image} +FROM --platform=linux/${arch} ${base_image} COPY ${binary_name} /usr/local/bin/${binary_name} EOF # ensure /etc/nsswitch.conf exists so go's resolver respects /etc/hosts From 0a54c7826589061d49bea0e4e59cc8e0825a93ab Mon Sep 17 00:00:00 2001 From: Davanum Srinivas Date: Tue, 8 Sep 2020 18:35:51 -0400 Subject: [PATCH 23/96] Sort list of formats for --logging-format description to make it deterministic Signed-off-by: Davanum Srinivas --- staging/src/k8s.io/component-base/logs/registry.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/component-base/logs/registry.go b/staging/src/k8s.io/component-base/logs/registry.go index 515bba280119f..c71899db66d75 100644 --- a/staging/src/k8s.io/component-base/logs/registry.go +++ b/staging/src/k8s.io/component-base/logs/registry.go @@ -18,6 +18,7 @@ package logs import ( "fmt" + "sort" "github.com/go-logr/logr" json "k8s.io/component-base/logs/json" @@ -84,12 +85,13 @@ func (lfr *LogFormatRegistry) Delete(name string) error { return nil } -// List names of registered log formats +// List names of registered log formats (sorted) func (lfr *LogFormatRegistry) List() []string { formats := make([]string, 0, len(lfr.registry)) for f := range lfr.registry { formats = append(formats, f) } + sort.Strings(formats) return formats } From 206bcadf021e76c27513500ca24182692aabd17e Mon Sep 17 00:00:00 2001 From: Anago GCB Date: Wed, 9 Sep 2020 11:17:20 +0000 Subject: [PATCH 24/96] Release commit for Kubernetes v1.19.1 From 02b16f24873ef5ed4b0ad85d704237a2c1cbfb6e Mon Sep 17 00:00:00 2001 From: Anago GCB Date: Wed, 9 Sep 2020 11:17:21 +0000 Subject: [PATCH 25/96] Release commit for Kubernetes v1.19.2-rc.0 From a767ee53653e4ff355d8160548c48b4d22a0cbcf Mon Sep 17 00:00:00 2001 From: Anago GCB Date: Wed, 9 Sep 2020 12:13:36 +0000 Subject: [PATCH 26/96] Update CHANGELOG/CHANGELOG-1.19.md for v1.19.1 --- CHANGELOG/CHANGELOG-1.19.md | 263 ++++++++++++++++++++++++++---------- 1 file changed, 188 insertions(+), 75 deletions(-) diff --git a/CHANGELOG/CHANGELOG-1.19.md b/CHANGELOG/CHANGELOG-1.19.md index 94778dfb70721..f0f1e9a2720e8 100644 --- a/CHANGELOG/CHANGELOG-1.19.md +++ b/CHANGELOG/CHANGELOG-1.19.md @@ -1,10 +1,24 @@ +- [v1.19.1](#v1191) + - [Downloads for v1.19.1](#downloads-for-v1191) + - [Source Code](#source-code) + - [Client binaries](#client-binaries) + - [Server binaries](#server-binaries) + - [Node binaries](#node-binaries) + - [Changelog since v1.19.0](#changelog-since-v1190) + - [Changes by Kind](#changes-by-kind) + - [Bug or Regression](#bug-or-regression) + - [Other (Cleanup or Flake)](#other-cleanup-or-flake) + - [Dependencies](#dependencies) + - [Added](#added) + - [Changed](#changed) + - [Removed](#removed) - [v1.19.0](#v1190) - [Downloads for v1.19.0](#downloads-for-v1190) - - [Client Binaries](#client-binaries) - - [Server Binaries](#server-binaries) - - [Node Binaries](#node-binaries) + - [Client Binaries](#client-binaries-1) + - [Server Binaries](#server-binaries-1) + - [Node Binaries](#node-binaries-1) - [Changelog since v1.18.0](#changelog-since-v1180) - [What’s New (Major Themes)](#what’s-new-major-themes) - [Deprecation warnings](#deprecation-warnings) @@ -28,179 +42,278 @@ - [Known Issues](#known-issues) - [Urgent Upgrade Notes ](#urgent-upgrade-notes-) - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade) - - [Changes by Kind](#changes-by-kind) + - [Changes by Kind](#changes-by-kind-1) - [Deprecation](#deprecation) - [API Change](#api-change) - [Feature](#feature) - [Documentation](#documentation) - [Failing Test](#failing-test) - - [Bug or Regression](#bug-or-regression) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake) - - [Dependencies](#dependencies) - - [Added](#added) - - [Changed](#changed) - - [Removed](#removed) + - [Bug or Regression](#bug-or-regression-1) + - [Other (Cleanup or Flake)](#other-cleanup-or-flake-1) - [Dependencies](#dependencies-1) - [Added](#added-1) - [Changed](#changed-1) - [Removed](#removed-1) -- [v1.19.0-rc.4](#v1190-rc4) - - [Downloads for v1.19.0-rc.4](#downloads-for-v1190-rc4) - - [Source Code](#source-code) - - [Client binaries](#client-binaries-1) - - [Server binaries](#server-binaries-1) - - [Node binaries](#node-binaries-1) - - [Changelog since v1.19.0-rc.3](#changelog-since-v1190-rc3) - - [Changes by Kind](#changes-by-kind-1) - - [Deprecation](#deprecation-1) - - [Bug or Regression](#bug-or-regression-1) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake-1) - [Dependencies](#dependencies-2) - [Added](#added-2) - [Changed](#changed-2) - [Removed](#removed-2) -- [v1.19.0-rc.3](#v1190-rc3) - - [Downloads for v1.19.0-rc.3](#downloads-for-v1190-rc3) +- [v1.19.0-rc.4](#v1190-rc4) + - [Downloads for v1.19.0-rc.4](#downloads-for-v1190-rc4) - [Source Code](#source-code-1) - [Client binaries](#client-binaries-2) - [Server binaries](#server-binaries-2) - [Node binaries](#node-binaries-2) - - [Changelog since v1.19.0-rc.2](#changelog-since-v1190-rc2) + - [Changelog since v1.19.0-rc.3](#changelog-since-v1190-rc3) - [Changes by Kind](#changes-by-kind-2) - - [API Change](#api-change-1) + - [Deprecation](#deprecation-1) - [Bug or Regression](#bug-or-regression-2) + - [Other (Cleanup or Flake)](#other-cleanup-or-flake-2) - [Dependencies](#dependencies-3) - [Added](#added-3) - [Changed](#changed-3) - [Removed](#removed-3) -- [v1.19.0-rc.2](#v1190-rc2) - - [Downloads for v1.19.0-rc.2](#downloads-for-v1190-rc2) +- [v1.19.0-rc.3](#v1190-rc3) + - [Downloads for v1.19.0-rc.3](#downloads-for-v1190-rc3) - [Source Code](#source-code-2) - [Client binaries](#client-binaries-3) - [Server binaries](#server-binaries-3) - [Node binaries](#node-binaries-3) - - [Changelog since v1.19.0-rc.1](#changelog-since-v1190-rc1) + - [Changelog since v1.19.0-rc.2](#changelog-since-v1190-rc2) - [Changes by Kind](#changes-by-kind-3) - - [API Change](#api-change-2) - - [Feature](#feature-1) + - [API Change](#api-change-1) - [Bug or Regression](#bug-or-regression-3) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake-2) - [Dependencies](#dependencies-4) - [Added](#added-4) - [Changed](#changed-4) - [Removed](#removed-4) -- [v1.19.0-rc.1](#v1190-rc1) - - [Downloads for v1.19.0-rc.1](#downloads-for-v1190-rc1) +- [v1.19.0-rc.2](#v1190-rc2) + - [Downloads for v1.19.0-rc.2](#downloads-for-v1190-rc2) - [Source Code](#source-code-3) - [Client binaries](#client-binaries-4) - [Server binaries](#server-binaries-4) - [Node binaries](#node-binaries-4) - - [Changelog since v1.19.0-rc.0](#changelog-since-v1190-rc0) - - [Urgent Upgrade Notes](#urgent-upgrade-notes) - - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-1) + - [Changelog since v1.19.0-rc.1](#changelog-since-v1190-rc1) - [Changes by Kind](#changes-by-kind-4) - - [Deprecation](#deprecation-2) - - [API Change](#api-change-3) - - [Feature](#feature-2) - - [Failing Test](#failing-test-1) + - [API Change](#api-change-2) + - [Feature](#feature-1) - [Bug or Regression](#bug-or-regression-4) - [Other (Cleanup or Flake)](#other-cleanup-or-flake-3) - [Dependencies](#dependencies-5) - [Added](#added-5) - [Changed](#changed-5) - [Removed](#removed-5) -- [v1.19.0-beta.2](#v1190-beta2) - - [Downloads for v1.19.0-beta.2](#downloads-for-v1190-beta2) +- [v1.19.0-rc.1](#v1190-rc1) + - [Downloads for v1.19.0-rc.1](#downloads-for-v1190-rc1) - [Source Code](#source-code-4) - [Client binaries](#client-binaries-5) - [Server binaries](#server-binaries-5) - [Node binaries](#node-binaries-5) - - [Changelog since v1.19.0-beta.1](#changelog-since-v1190-beta1) + - [Changelog since v1.19.0-rc.0](#changelog-since-v1190-rc0) + - [Urgent Upgrade Notes](#urgent-upgrade-notes) + - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-1) - [Changes by Kind](#changes-by-kind-5) - - [Deprecation](#deprecation-3) - - [API Change](#api-change-4) - - [Feature](#feature-3) + - [Deprecation](#deprecation-2) + - [API Change](#api-change-3) + - [Feature](#feature-2) + - [Failing Test](#failing-test-1) - [Bug or Regression](#bug-or-regression-5) - [Other (Cleanup or Flake)](#other-cleanup-or-flake-4) - [Dependencies](#dependencies-6) - [Added](#added-6) - [Changed](#changed-6) - [Removed](#removed-6) -- [v1.19.0-beta.1](#v1190-beta1) - - [Downloads for v1.19.0-beta.1](#downloads-for-v1190-beta1) +- [v1.19.0-beta.2](#v1190-beta2) + - [Downloads for v1.19.0-beta.2](#downloads-for-v1190-beta2) - [Source Code](#source-code-5) - [Client binaries](#client-binaries-6) - [Server binaries](#server-binaries-6) - [Node binaries](#node-binaries-6) - - [Changelog since v1.19.0-alpha.3](#changelog-since-v1190-alpha3) - - [Urgent Upgrade Notes](#urgent-upgrade-notes-1) - - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-2) + - [Changelog since v1.19.0-beta.1](#changelog-since-v1190-beta1) - [Changes by Kind](#changes-by-kind-6) - - [API Change](#api-change-5) - - [Feature](#feature-4) + - [Deprecation](#deprecation-3) + - [API Change](#api-change-4) + - [Feature](#feature-3) - [Bug or Regression](#bug-or-regression-6) - [Other (Cleanup or Flake)](#other-cleanup-or-flake-5) - [Dependencies](#dependencies-7) - [Added](#added-7) - [Changed](#changed-7) - [Removed](#removed-7) -- [v1.19.0-beta.0](#v1190-beta0) - - [Downloads for v1.19.0-beta.0](#downloads-for-v1190-beta0) +- [v1.19.0-beta.1](#v1190-beta1) + - [Downloads for v1.19.0-beta.1](#downloads-for-v1190-beta1) - [Source Code](#source-code-6) - [Client binaries](#client-binaries-7) - [Server binaries](#server-binaries-7) - [Node binaries](#node-binaries-7) - - [Changelog since v1.19.0-alpha.3](#changelog-since-v1190-alpha3-1) + - [Changelog since v1.19.0-alpha.3](#changelog-since-v1190-alpha3) + - [Urgent Upgrade Notes](#urgent-upgrade-notes-1) + - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-2) - [Changes by Kind](#changes-by-kind-7) - - [API Change](#api-change-6) - - [Feature](#feature-5) + - [API Change](#api-change-5) + - [Feature](#feature-4) - [Bug or Regression](#bug-or-regression-7) - [Other (Cleanup or Flake)](#other-cleanup-or-flake-6) - [Dependencies](#dependencies-8) - [Added](#added-8) - [Changed](#changed-8) - [Removed](#removed-8) +- [v1.19.0-beta.0](#v1190-beta0) + - [Downloads for v1.19.0-beta.0](#downloads-for-v1190-beta0) + - [Source Code](#source-code-7) + - [Client binaries](#client-binaries-8) + - [Server binaries](#server-binaries-8) + - [Node binaries](#node-binaries-8) + - [Changelog since v1.19.0-alpha.3](#changelog-since-v1190-alpha3-1) + - [Changes by Kind](#changes-by-kind-8) + - [API Change](#api-change-6) + - [Feature](#feature-5) + - [Bug or Regression](#bug-or-regression-8) + - [Other (Cleanup or Flake)](#other-cleanup-or-flake-7) + - [Dependencies](#dependencies-9) + - [Added](#added-9) + - [Changed](#changed-9) + - [Removed](#removed-9) - [v1.19.0-alpha.3](#v1190-alpha3) - [Downloads for v1.19.0-alpha.3](#downloads-for-v1190-alpha3) - - [Client Binaries](#client-binaries-8) - - [Server Binaries](#server-binaries-8) - - [Node Binaries](#node-binaries-8) + - [Client Binaries](#client-binaries-9) + - [Server Binaries](#server-binaries-9) + - [Node Binaries](#node-binaries-9) - [Changelog since v1.19.0-alpha.2](#changelog-since-v1190-alpha2) - [Urgent Upgrade Notes](#urgent-upgrade-notes-2) - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-3) - - [Changes by Kind](#changes-by-kind-8) + - [Changes by Kind](#changes-by-kind-9) - [Deprecation](#deprecation-4) - [API Change](#api-change-7) - [Feature](#feature-6) - - [Bug or Regression](#bug-or-regression-8) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake-7) + - [Bug or Regression](#bug-or-regression-9) + - [Other (Cleanup or Flake)](#other-cleanup-or-flake-8) - [v1.19.0-alpha.2](#v1190-alpha2) - [Downloads for v1.19.0-alpha.2](#downloads-for-v1190-alpha2) - - [Client Binaries](#client-binaries-9) - - [Server Binaries](#server-binaries-9) - - [Node Binaries](#node-binaries-9) + - [Client Binaries](#client-binaries-10) + - [Server Binaries](#server-binaries-10) + - [Node Binaries](#node-binaries-10) - [Changelog since v1.19.0-alpha.1](#changelog-since-v1190-alpha1) - [Urgent Upgrade Notes](#urgent-upgrade-notes-3) - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-4) - - [Changes by Kind](#changes-by-kind-9) + - [Changes by Kind](#changes-by-kind-10) - [API Change](#api-change-8) - [Feature](#feature-7) - - [Bug or Regression](#bug-or-regression-9) - - [Other (Cleanup or Flake)](#other-cleanup-or-flake-8) + - [Bug or Regression](#bug-or-regression-10) + - [Other (Cleanup or Flake)](#other-cleanup-or-flake-9) - [v1.19.0-alpha.1](#v1190-alpha1) - [Downloads for v1.19.0-alpha.1](#downloads-for-v1190-alpha1) - - [Client Binaries](#client-binaries-10) - - [Server Binaries](#server-binaries-10) - - [Node Binaries](#node-binaries-10) + - [Client Binaries](#client-binaries-11) + - [Server Binaries](#server-binaries-11) + - [Node Binaries](#node-binaries-11) - [Changelog since v1.19.0-alpha.0](#changelog-since-v1190-alpha0) - [Urgent Upgrade Notes](#urgent-upgrade-notes-4) - [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade-5) - - [Changes by Kind](#changes-by-kind-10) + - [Changes by Kind](#changes-by-kind-11) - [Deprecation](#deprecation-5) - [API Change](#api-change-9) +# v1.19.1 + + +## Downloads for v1.19.1 + +### Source Code + +filename | sha512 hash +-------- | ----------- +[kubernetes.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes.tar.gz) | cbcac78b122cfe7301247c935efdfe0ad42ca8b1229f35d4ba2feb3286eca86f7996bfcbbd810e611f6efa37a74ece7d46eac585f2b7a9fda5e9461f8bf5dbac +[kubernetes-src.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-src.tar.gz) | 00ea5562087bfc902f3081385bd8200e003038f86cd62e02da20b70583c33c8b8ec2f4d46268ea7278d447cbddb1ab6840b2174ee71a4c68e2306ed416159c35 + +### Client binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-client-darwin-amd64.tar.gz) | e2926509570d772816de6dd23dc31c23833ed777be924abfb6d14901bd8b653fa8d7345b21b91f005e748813d5cbdb26168b6065a31219dfb6cc2686b4e878ac +[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-client-linux-386.tar.gz) | 0a2b4cb64ed7f1e6ac107ee3fdea911d90fa5d7cc907c3fefc9da732cc5a8082f18a8167d7ece68f1e15f6f400e6b4b7a6ad0986205965acc8fc403ce22613b2 +[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-client-linux-amd64.tar.gz) | 424ba5a094947e62c935ad7049efc13762f2f232ed05872e4f3945b3c39d6e6c82d1e3f60d0970fdc8f01cf4886ef5de77224df7e481774c04d86429dbfb2055 +[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-client-linux-arm.tar.gz) | 48ac4e600ff914f307fc4c194cdf925c3d9ca077d54d4e09d32941079e610f1d42333e1e31f334c4ae758e4957dc5dad2e6bcb026a3ed5befed2dcb942bf3d75 +[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-client-linux-arm64.tar.gz) | 765446ed59124fef6ff3aff0b2221935d1554b095144f9af37ea7da20a11ce328f7a60fd18f9d75ca3649c02667f0e1334cdec22f39f81fb6992c0071447a5e9 +[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-client-linux-ppc64le.tar.gz) | e220220fb48adb79258ca803b172a7dcc5ac4ced079aea73c4b172c57738840c59dda9f6ef207ef70e937a6599d748d2d0d2b02f7814281a56eb91dbfc55f59a +[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-client-linux-s390x.tar.gz) | 9c15feb128348df0e843af439a6c5b7058a31b815da973829da8140021c0e3f1d1ac881f6e9357737a9244b58fbd7f34664903fe34414d802df67e901e57742a +[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-client-windows-386.tar.gz) | 3404e4c903715e37ad501cf51d405e636827059a76e00960629ded4479174fdda8148166c751e240e94048a2408e6b94b964436879f7764be2f3e618556eda6e +[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-client-windows-amd64.tar.gz) | a3b219ffeb432ecefd64f7734207b51e048c631cb28e989f86ce75815a5cc9927b9d3e7ee06d0f02c5f5a299c0e3b21d62c9c462c52d80810fb3a8424087c445 + +### Server binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-server-linux-amd64.tar.gz) | 70f0389c8c5f35eaa67736aebb857f0b26ca777a77662c21ebd2b719608c16663e888b8e1b93e90564c206f179524ff421dbb5cb1f3289a71f27eca388087451 +[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-server-linux-arm.tar.gz) | 214372f65ea6f9c90d54d8b9e531e1f6cc2a0a828dffab7e6cda0a747926580509930d25e44354b27a4933df49c016e4a0ae51439228cd31cc582a6996bd1615 +[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-server-linux-arm64.tar.gz) | 4ce4f599057e1f86a37f070f91e9e8e624b0fd73dd8a4d79bae60097734a0ed2a9855bf1f5795be76ade5815d1f97ca06b764ba9efe5af11afe420cdc659fa84 +[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-server-linux-ppc64le.tar.gz) | 47d788d472585857cb7dec42ccd5d1eaec06970c4257617a53a6b1dc774ee07b33c7b5d87d741486800ffbed82b6ff3505504c1ea03de68bce0382ed44829473 +[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-server-linux-s390x.tar.gz) | d911a7345a114b769a8ef9f26eb6d06c321220da07d8d6094f5e4c1dff6394b24ddd2859f55986ff87397c3f59355cd9c28f243c96da432ea385ec09631de223 + +### Node binaries + +filename | sha512 hash +-------- | ----------- +[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-node-linux-amd64.tar.gz) | 16d32f85594ca6b3f26ac6827be2ea927b79966efa55edcab1f3d5628744759a1e1f7c04e50dfe47da17a2d63f70cc5989ae47f057bc958c6f4c52461406090c +[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-node-linux-arm.tar.gz) | b73af373e504fadbff9ef88c2fee4fe1d449c9343ed73d37a0c6b39bef0038c5bf15783062cc3fa50ca63969f5e8062517e9e0b5ce7a6db633eb5555a4611276 +[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-node-linux-arm64.tar.gz) | 842e5687d1c99f655431732974289825986425949d2cc0a1c35326c8e6c446cc5ffaeef69d9efdb9bba16c7f6aa8c8ae59e9575929747bff1238a47c8d04e959 +[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-node-linux-ppc64le.tar.gz) | 222e9e10f2f38fdc160ddb73f01d106788d4b9863f8aef2ad427a965187ebc90f1cbce3985d9197db2512a0918b59e7dd79e20c783cb95a06c40ce6afe0594a9 +[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-node-linux-s390x.tar.gz) | 7edf2e03726ff3a340fdb09d8c2fc9aaff8e48a06499cdfb9956879552d18cb12e9ea846296c3d2c7237f6941967d3fed7548caef3ce65fcd7ec06736a9a494a +[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.19.1/kubernetes-node-windows-amd64.tar.gz) | 09997c6edc473964f1d2ebf2fa4c8287e9146088f26257fc29277c5a1ad6794ff251c33fb4777919440beee0d46ea45cd42a0f18721bc38d4a8b5c65d57cece2 + +## Changelog since v1.19.0 + +## Changes by Kind + +### Bug or Regression + +- Azure: fix a bug that kube-controller-manager would panic if wrong Azure VMSS name is configured ([#94306](https://github.com/kubernetes/kubernetes/pull/94306), [@knight42](https://github.com/knight42)) [SIG Cloud Provider] +- Build/lib/release: Explicitly use '--platform' in building server images + + When we switched to go-runner for building the apiserver, + controller-manager, and scheduler server components, we no longer + reference the individual architectures in the image names, specifically + in the 'FROM' directive of the server image Dockerfiles. + + As a result, server images for non-amd64 images copy in the go-runner + amd64 binary instead of the go-runner that matches that architecture. + + This commit explicitly sets the '--platform=linux/${arch}' to ensure + we're pulling the correct go-runner arch from the manifest list. + + Before: + `FROM ${base_image}` + + After: + `FROM --platform=linux/${arch} ${base_image}` ([#94613](https://github.com/kubernetes/kubernetes/pull/94613), [@justaugustus](https://github.com/justaugustus)) [SIG Release] +- Fix a concurrent map writes error in kubelet ([#93773](https://github.com/kubernetes/kubernetes/pull/93773), [@knight42](https://github.com/knight42)) [SIG Node] +- Fix a regression where kubeadm bails out with a fatal error when an optional version command line argument is supplied to the "kubeadm upgrade plan" command ([#94421](https://github.com/kubernetes/kubernetes/pull/94421), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle] +- Fixed bug in reflector that couldn't recover from "Too large resource version" errors with API servers 1.17.0-1.18.5 ([#94316](https://github.com/kubernetes/kubernetes/pull/94316), [@janeczku](https://github.com/janeczku)) [SIG API Machinery] +- Kubeadm: make the kubeconfig files for the kube-controller-manager and kube-scheduler use the LocalAPIEndpoint instead of the ControlPlaneEndpoint. This makes kubeadm clusters more reseliant to version skew problems during immutable upgrades: https://kubernetes.io/docs/setup/release/version-skew-policy/#kube-controller-manager-kube-scheduler-and-cloud-controller-manager ([#94398](https://github.com/kubernetes/kubernetes/pull/94398), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] +- Update default etcd server version to 3.4.13 ([#94536](https://github.com/kubernetes/kubernetes/pull/94536), [@jingyih](https://github.com/jingyih)) [SIG API Machinery, Cloud Provider, Cluster Lifecycle and Testing] +- Upon successful authorization check, an impersonated user is added to the system:authenticated group. + system:anonymous when impersonated is added to the system:unauthenticated group. ([#94408](https://github.com/kubernetes/kubernetes/pull/94408), [@tkashem](https://github.com/tkashem)) [SIG API Machinery and Testing] +- Use NLB Subnet CIDRs instead of VPC CIDRs in Health Check SG Rules ([#93515](https://github.com/kubernetes/kubernetes/pull/93515), [@t0rr3sp3dr0](https://github.com/t0rr3sp3dr0)) [SIG Cloud Provider] + +### Other (Cleanup or Flake) + +- Fixes the flooding warning messages about setting volume ownership for configmap/secret volumes ([#92878](https://github.com/kubernetes/kubernetes/pull/92878), [@jvanz](https://github.com/jvanz)) [SIG Instrumentation, Node and Storage] +- Kubeadm: remove the CoreDNS check for known image digests when applying the addon ([#94506](https://github.com/kubernetes/kubernetes/pull/94506), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] + +## Dependencies + +### Added +_Nothing has changed._ + +### Changed +_Nothing has changed._ + +### Removed +_Nothing has changed._ + + + # v1.19.0 [Documentation](https://docs.k8s.io) @@ -2788,4 +2901,4 @@ filename | sha512 hash - Update to use golang 1.13.8 ([#87648](https://github.com/kubernetes/kubernetes/pull/87648), [@ialidzhikov](https://github.com/ialidzhikov)) [SIG Release and Testing] - Validate kube-proxy flags --ipvs-tcp-timeout, --ipvs-tcpfin-timeout, --ipvs-udp-timeout ([#88657](https://github.com/kubernetes/kubernetes/pull/88657), [@chendotjs](https://github.com/chendotjs)) [SIG Network] - Wait for all CRDs to show up in discovery endpoint before reporting readiness. ([#89145](https://github.com/kubernetes/kubernetes/pull/89145), [@sttts](https://github.com/sttts)) [SIG API Machinery] -- `kubectl config view` now redacts bearer tokens by default, similar to client certificates. The `--raw` flag can still be used to output full content. ([#88985](https://github.com/kubernetes/kubernetes/pull/88985), [@brianpursley](https://github.com/brianpursley)) [SIG API Machinery and CLI] +- `kubectl config view` now redacts bearer tokens by default, similar to client certificates. The `--raw` flag can still be used to output full content. ([#88985](https://github.com/kubernetes/kubernetes/pull/88985), [@brianpursley](https://github.com/brianpursley)) [SIG API Machinery and CLI] \ No newline at end of file From 7d32772a020ff50bc49c28270c94a62d5a761593 Mon Sep 17 00:00:00 2001 From: wojtekt Date: Thu, 3 Sep 2020 20:11:21 +0200 Subject: [PATCH 27/96] Cleanup custom metrics conversion functions --- .../metrics/pkg/apis/custom_metrics/BUILD | 3 ++ .../pkg/apis/custom_metrics/conversion.go | 46 +++++++++++++++++++ .../metrics/pkg/apis/custom_metrics/types.go | 16 +++---- .../apis/custom_metrics/v1beta1/conversion.go | 29 ++---------- .../v1beta1/zz_generated.conversion.go | 6 +-- .../v1beta2/zz_generated.conversion.go | 30 +++++++++--- 6 files changed, 87 insertions(+), 43 deletions(-) create mode 100644 staging/src/k8s.io/metrics/pkg/apis/custom_metrics/conversion.go diff --git a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/BUILD b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/BUILD index bc3be8a03fec4..539cb48064044 100644 --- a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/BUILD +++ b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/BUILD @@ -8,6 +8,7 @@ load( go_library( name = "go_default_library", srcs = [ + "conversion.go", "doc.go", "register.go", "types.go", @@ -16,8 +17,10 @@ go_library( importmap = "k8s.io/kubernetes/vendor/k8s.io/metrics/pkg/apis/custom_metrics", importpath = "k8s.io/metrics/pkg/apis/custom_metrics", deps = [ + "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", diff --git a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/conversion.go b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/conversion.go new file mode 100644 index 0000000000000..85abdb6a44893 --- /dev/null +++ b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/conversion.go @@ -0,0 +1,46 @@ +/* +Copyright 2020 The Kubernetes Authors. + +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. +*/ + +package custom_metrics + +import ( + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/conversion" +) + +func Convert_v1_ObjectReference_To_custom_metrics_ObjectReference(in *v1.ObjectReference, out *ObjectReference, s conversion.Scope) error { + out.APIVersion = in.APIVersion + + out.Kind = in.Kind + out.Namespace = in.Namespace + out.Name = in.Name + out.UID = in.UID + out.ResourceVersion = in.ResourceVersion + out.FieldPath = in.FieldPath + return nil +} + +func Convert_custom_metrics_ObjectReference_To_v1_ObjectReference(in *ObjectReference, out *v1.ObjectReference, s conversion.Scope) error { + out.APIVersion = in.APIVersion + + out.Kind = in.Kind + out.Namespace = in.Namespace + out.Name = in.Name + out.UID = in.UID + out.ResourceVersion = in.ResourceVersion + out.FieldPath = in.FieldPath + return nil +} diff --git a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/types.go b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/types.go index a39d5c460d065..8a155ec4b5ff3 100644 --- a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/types.go +++ b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/types.go @@ -47,24 +47,24 @@ type MetricValueList struct { // a metric value for some object type MetricValue struct { - metav1.TypeMeta `json:",inline"` + metav1.TypeMeta // a reference to the described object - DescribedObject ObjectReference `json:"describedObject"` + DescribedObject ObjectReference Metric MetricIdentifier // indicates the time at which the metrics were produced - Timestamp metav1.Time `json:"timestamp"` + Timestamp metav1.Time // indicates the window ([Timestamp-Window, Timestamp]) from // which these metrics were calculated, when returning rate // metrics calculated from cumulative metrics (or zero for // non-calculated instantaneous metrics). - WindowSeconds *int64 `json:"window,omitempty"` + WindowSeconds *int64 // the value of the metric for this - Value resource.Quantity `json:"value"` + Value resource.Quantity } // allObjects is a wildcard used to select metrics @@ -75,16 +75,16 @@ const AllObjects = "*" // MetricListOptions is used to select metrics by their label selectors type MetricListOptions struct { - metav1.TypeMeta `json:",inline"` + metav1.TypeMeta // A selector to restrict the list of returned objects by their labels. // Defaults to everything. // +optional - LabelSelector string `json:"labelSelector,omitempty" protobuf:"bytes,1,opt,name=labelSelector"` + LabelSelector string // A selector to restrict the list of returned metrics by their labels // +optional - MetricLabelSelector string `json:"metricLabelSelector,omitempty" protobuf:"bytes,2,opt,name=metricLabelSelector"` + MetricLabelSelector string } // NOTE: ObjectReference is copied from k8s.io/kubernetes/pkg/api/types.go. We diff --git a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/conversion.go b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/conversion.go index 523e4c01e2554..5519dd6169116 100644 --- a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/conversion.go +++ b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/conversion.go @@ -17,44 +17,23 @@ limitations under the License. package v1beta1 import ( - "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/conversion" "k8s.io/metrics/pkg/apis/custom_metrics" ) func Convert_v1beta1_MetricValue_To_custom_metrics_MetricValue(in *MetricValue, out *custom_metrics.MetricValue, s conversion.Scope) error { - out.TypeMeta = in.TypeMeta - out.DescribedObject = custom_metrics.ObjectReference{ - Kind: in.DescribedObject.Kind, - Namespace: in.DescribedObject.Namespace, - Name: in.DescribedObject.Name, - UID: in.DescribedObject.UID, - APIVersion: in.DescribedObject.APIVersion, - ResourceVersion: in.DescribedObject.ResourceVersion, - FieldPath: in.DescribedObject.FieldPath, + if err := autoConvert_v1beta1_MetricValue_To_custom_metrics_MetricValue(in, out, s); err != nil { + return err } - out.Timestamp = in.Timestamp - out.WindowSeconds = in.WindowSeconds - out.Value = in.Value out.Metric.Name = in.MetricName out.Metric.Selector = in.Selector return nil } func Convert_custom_metrics_MetricValue_To_v1beta1_MetricValue(in *custom_metrics.MetricValue, out *MetricValue, s conversion.Scope) error { - out.TypeMeta = in.TypeMeta - out.DescribedObject = v1.ObjectReference{ - Kind: in.DescribedObject.Kind, - Namespace: in.DescribedObject.Namespace, - Name: in.DescribedObject.Name, - UID: in.DescribedObject.UID, - APIVersion: in.DescribedObject.APIVersion, - ResourceVersion: in.DescribedObject.ResourceVersion, - FieldPath: in.DescribedObject.FieldPath, + if err := autoConvert_custom_metrics_MetricValue_To_v1beta1_MetricValue(in, out, s); err != nil { + return err } - out.Timestamp = in.Timestamp - out.WindowSeconds = in.WindowSeconds - out.Value = in.Value out.MetricName = in.Metric.Name out.Selector = in.Metric.Selector return nil diff --git a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/zz_generated.conversion.go b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/zz_generated.conversion.go index 4da46347ec3fc..a350f1b16a241 100644 --- a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/zz_generated.conversion.go +++ b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1/zz_generated.conversion.go @@ -91,8 +91,7 @@ func Convert_custom_metrics_MetricListOptions_To_v1beta1_MetricListOptions(in *c } func autoConvert_v1beta1_MetricValue_To_custom_metrics_MetricValue(in *MetricValue, out *custommetrics.MetricValue, s conversion.Scope) error { - // TODO: Inefficient conversion - can we improve it? - if err := s.Convert(&in.DescribedObject, &out.DescribedObject, 0); err != nil { + if err := custommetrics.Convert_v1_ObjectReference_To_custom_metrics_ObjectReference(&in.DescribedObject, &out.DescribedObject, s); err != nil { return err } // WARNING: in.MetricName requires manual conversion: does not exist in peer-type @@ -104,8 +103,7 @@ func autoConvert_v1beta1_MetricValue_To_custom_metrics_MetricValue(in *MetricVal } func autoConvert_custom_metrics_MetricValue_To_v1beta1_MetricValue(in *custommetrics.MetricValue, out *MetricValue, s conversion.Scope) error { - // TODO: Inefficient conversion - can we improve it? - if err := s.Convert(&in.DescribedObject, &out.DescribedObject, 0); err != nil { + if err := custommetrics.Convert_custom_metrics_ObjectReference_To_v1_ObjectReference(&in.DescribedObject, &out.DescribedObject, s); err != nil { return err } // WARNING: in.Metric requires manual conversion: does not exist in peer-type diff --git a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/zz_generated.conversion.go b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/zz_generated.conversion.go index 6a12d034447de..fd6047a3c2663 100644 --- a/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/zz_generated.conversion.go +++ b/staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2/zz_generated.conversion.go @@ -124,8 +124,7 @@ func Convert_custom_metrics_MetricListOptions_To_v1beta2_MetricListOptions(in *c } func autoConvert_v1beta2_MetricValue_To_custom_metrics_MetricValue(in *MetricValue, out *custommetrics.MetricValue, s conversion.Scope) error { - // TODO: Inefficient conversion - can we improve it? - if err := s.Convert(&in.DescribedObject, &out.DescribedObject, 0); err != nil { + if err := custommetrics.Convert_v1_ObjectReference_To_custom_metrics_ObjectReference(&in.DescribedObject, &out.DescribedObject, s); err != nil { return err } if err := Convert_v1beta2_MetricIdentifier_To_custom_metrics_MetricIdentifier(&in.Metric, &out.Metric, s); err != nil { @@ -143,8 +142,7 @@ func Convert_v1beta2_MetricValue_To_custom_metrics_MetricValue(in *MetricValue, } func autoConvert_custom_metrics_MetricValue_To_v1beta2_MetricValue(in *custommetrics.MetricValue, out *MetricValue, s conversion.Scope) error { - // TODO: Inefficient conversion - can we improve it? - if err := s.Convert(&in.DescribedObject, &out.DescribedObject, 0); err != nil { + if err := custommetrics.Convert_custom_metrics_ObjectReference_To_v1_ObjectReference(&in.DescribedObject, &out.DescribedObject, s); err != nil { return err } if err := Convert_custom_metrics_MetricIdentifier_To_v1beta2_MetricIdentifier(&in.Metric, &out.Metric, s); err != nil { @@ -163,7 +161,17 @@ func Convert_custom_metrics_MetricValue_To_v1beta2_MetricValue(in *custommetrics func autoConvert_v1beta2_MetricValueList_To_custom_metrics_MetricValueList(in *MetricValueList, out *custommetrics.MetricValueList, s conversion.Scope) error { out.ListMeta = in.ListMeta - out.Items = *(*[]custommetrics.MetricValue)(unsafe.Pointer(&in.Items)) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]custommetrics.MetricValue, len(*in)) + for i := range *in { + if err := Convert_v1beta2_MetricValue_To_custom_metrics_MetricValue(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } return nil } @@ -174,7 +182,17 @@ func Convert_v1beta2_MetricValueList_To_custom_metrics_MetricValueList(in *Metri func autoConvert_custom_metrics_MetricValueList_To_v1beta2_MetricValueList(in *custommetrics.MetricValueList, out *MetricValueList, s conversion.Scope) error { out.ListMeta = in.ListMeta - out.Items = *(*[]MetricValue)(unsafe.Pointer(&in.Items)) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]MetricValue, len(*in)) + for i := range *in { + if err := Convert_custom_metrics_MetricValue_To_v1beta2_MetricValue(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } return nil } From 0f098f50f5ee85a36c7dc8d5829ceb411b7ca8f7 Mon Sep 17 00:00:00 2001 From: wojtekt Date: Wed, 9 Sep 2020 08:37:53 +0200 Subject: [PATCH 28/96] Add roundtrip tests for metrics repo --- staging/src/k8s.io/metrics/BUILD | 4 +- staging/src/k8s.io/metrics/pkg/apis/BUILD | 41 ++++++++++++ .../k8s.io/metrics/pkg/apis/roundtrip_test.go | 64 +++++++++++++++++++ 3 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 staging/src/k8s.io/metrics/pkg/apis/BUILD create mode 100644 staging/src/k8s.io/metrics/pkg/apis/roundtrip_test.go diff --git a/staging/src/k8s.io/metrics/BUILD b/staging/src/k8s.io/metrics/BUILD index 6e32ef7e84adf..a5e9dcdda8105 100644 --- a/staging/src/k8s.io/metrics/BUILD +++ b/staging/src/k8s.io/metrics/BUILD @@ -10,9 +10,7 @@ filegroup( srcs = [ ":package-srcs", "//staging/src/k8s.io/metrics/hack:all-srcs", - "//staging/src/k8s.io/metrics/pkg/apis/custom_metrics:all-srcs", - "//staging/src/k8s.io/metrics/pkg/apis/external_metrics:all-srcs", - "//staging/src/k8s.io/metrics/pkg/apis/metrics:all-srcs", + "//staging/src/k8s.io/metrics/pkg/apis:all-srcs", "//staging/src/k8s.io/metrics/pkg/client/clientset/deprecated:all-srcs", "//staging/src/k8s.io/metrics/pkg/client/clientset/versioned:all-srcs", "//staging/src/k8s.io/metrics/pkg/client/clientset_test:all-srcs", diff --git a/staging/src/k8s.io/metrics/pkg/apis/BUILD b/staging/src/k8s.io/metrics/pkg/apis/BUILD new file mode 100644 index 0000000000000..68f80499b0b66 --- /dev/null +++ b/staging/src/k8s.io/metrics/pkg/apis/BUILD @@ -0,0 +1,41 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_test") + +go_test( + name = "go_default_test", + srcs = ["roundtrip_test.go"], + deps = [ + "//staging/src/k8s.io/apimachinery/pkg/api/apitesting/fuzzer:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/apitesting/roundtrip:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/fuzzer:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/custom_metrics:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta1:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/custom_metrics/v1beta2:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/external_metrics:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/external_metrics/v1beta1:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/metrics:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/metrics/v1alpha1:go_default_library", + "//staging/src/k8s.io/metrics/pkg/apis/metrics/v1beta1:go_default_library", + "//vendor/github.com/stretchr/testify/require:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/metrics/pkg/apis/custom_metrics:all-srcs", + "//staging/src/k8s.io/metrics/pkg/apis/external_metrics:all-srcs", + "//staging/src/k8s.io/metrics/pkg/apis/metrics:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/staging/src/k8s.io/metrics/pkg/apis/roundtrip_test.go b/staging/src/k8s.io/metrics/pkg/apis/roundtrip_test.go new file mode 100644 index 0000000000000..3fb2c8a6e25db --- /dev/null +++ b/staging/src/k8s.io/metrics/pkg/apis/roundtrip_test.go @@ -0,0 +1,64 @@ +/* +Copyright 2020 The Kubernetes Authors. + +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. +*/ + +package testing + +import ( + "math/rand" + "testing" + + custommetrics "k8s.io/metrics/pkg/apis/custom_metrics" + custommetricsv1beta1 "k8s.io/metrics/pkg/apis/custom_metrics/v1beta1" + custommetricsv1beta2 "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2" + externalmetrics "k8s.io/metrics/pkg/apis/external_metrics" + externalmetricsv1beta1 "k8s.io/metrics/pkg/apis/external_metrics/v1beta1" + metrics "k8s.io/metrics/pkg/apis/metrics" + metricsv1alpha1 "k8s.io/metrics/pkg/apis/metrics/v1alpha1" + metricsv1beta1 "k8s.io/metrics/pkg/apis/metrics/v1beta1" + + "github.com/stretchr/testify/require" + "k8s.io/apimachinery/pkg/api/apitesting/fuzzer" + "k8s.io/apimachinery/pkg/api/apitesting/roundtrip" + genericfuzzer "k8s.io/apimachinery/pkg/apis/meta/fuzzer" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" +) + +var groups = []runtime.SchemeBuilder{ + custommetrics.SchemeBuilder, + custommetricsv1beta1.SchemeBuilder, + custommetricsv1beta2.SchemeBuilder, + externalmetrics.SchemeBuilder, + externalmetricsv1beta1.SchemeBuilder, + metrics.SchemeBuilder, + metricsv1alpha1.SchemeBuilder, + metricsv1beta1.SchemeBuilder, +} + +func TestRoundTripTypes(t *testing.T) { + scheme := runtime.NewScheme() + codecs := serializer.NewCodecFactory(scheme) + for _, builder := range groups { + require.NoError(t, builder.AddToScheme(scheme)) + } + seed := rand.Int63() + // I'm only using the generic fuzzer funcs, but at some point in time we might need to + // switch to specialized. For now we're happy with the current serialization test. + fuzzer := fuzzer.FuzzerFor(genericfuzzer.Funcs, rand.NewSource(seed), codecs) + + roundtrip.RoundTripExternalTypes(t, scheme, codecs, fuzzer, nil) + roundtrip.RoundTripTypes(t, scheme, codecs, fuzzer, nil) +} From c6328b3425fbf1d3458e38a761235d2e8c8fe636 Mon Sep 17 00:00:00 2001 From: Stephen Augustus Date: Mon, 31 Aug 2020 08:59:58 -0400 Subject: [PATCH 29/96] Update CNI plugins to v0.8.7 ref: https://github.com/containernetworking/plugins/releases/tag/v0.8.7 Signed-off-by: Stephen Augustus --- build/dependencies.yaml | 2 +- build/workspace.bzl | 12 ++++++------ cluster/gce/config-common.sh | 2 +- cluster/gce/gci/configure.sh | 4 ++-- test/e2e_node/remote/utils.go | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/build/dependencies.yaml b/build/dependencies.yaml index dc1c4f8420f4e..d257fff8d3407 100644 --- a/build/dependencies.yaml +++ b/build/dependencies.yaml @@ -26,7 +26,7 @@ dependencies: # CNI plugins - name: "cni" - version: 0.8.6 + version: 0.8.7 refPaths: - path: build/workspace.bzl match: CNI_VERSION = diff --git a/build/workspace.bzl b/build/workspace.bzl index 2f8471c41eb2c..697f8c9a13fea 100644 --- a/build/workspace.bzl +++ b/build/workspace.bzl @@ -17,13 +17,13 @@ load("//build:workspace_mirror.bzl", "mirror") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_file") load("@io_bazel_rules_docker//container:container.bzl", "container_pull") -CNI_VERSION = "0.8.6" +CNI_VERSION = "0.8.7" _CNI_TARBALL_ARCH_SHA256 = { - "amd64": "994fbfcdbb2eedcfa87e48d8edb9bb365f4e2747a7e47658482556c12fd9b2f5", - "arm": "28e61b5847265135dc1ca397bf94322ecce4acab5c79cc7d360ca3f6a655bdb7", - "arm64": "43fbf750c5eccb10accffeeb092693c32b236fb25d919cf058c91a677822c999", - "ppc64le": "61d6c6c15d3e4fa3eb85d128c9c0ff2658f38e59047ae359be47d193c673e116", - "s390x": "ca126a3bd2cd8dff1c7bbfc3c69933b284c4e77614391c7e1f74b0851fc3b289", + "amd64": "977824932d5667c7a37aa6a3cbba40100a6873e7bd97e83e8be837e3e7afd0a8", + "arm": "5757778f4c322ffd93d7586c60037b81a2eb79271af6f4edf9ff62b4f7868ed9", + "arm64": "ae13d7b5c05bd180ea9b5b68f44bdaa7bfb41034a2ef1d68fd8e1259797d642f", + "ppc64le": "70a8c5448ed03a3b27c6a89499a05285760a45252ec7eae4190c70ba5400d4ba", + "s390x": "3a0008f98ea5b4b6fd367cac3d8096f19bc080a779cf81fd0bcbc5bd1396ace7", } CRI_TOOLS_VERSION = "1.18.0" diff --git a/cluster/gce/config-common.sh b/cluster/gce/config-common.sh index 7da4250c83eb6..18147b39b5b8e 100644 --- a/cluster/gce/config-common.sh +++ b/cluster/gce/config-common.sh @@ -142,7 +142,7 @@ export WINDOWS_CNI_CONFIG_DIR="${WINDOWS_K8S_DIR}\cni\config" # CNI storage path for Windows nodes export WINDOWS_CNI_STORAGE_PATH="https://storage.googleapis.com/k8s-artifacts-cni/release" # CNI version for Windows nodes -export WINDOWS_CNI_VERSION="v0.8.6" +export WINDOWS_CNI_VERSION="v0.8.7" # Pod manifests directory for Windows nodes on Windows nodes. export WINDOWS_MANIFESTS_DIR="${WINDOWS_K8S_DIR}\manifests" # Directory where cert/key files will be stores on Windows nodes. diff --git a/cluster/gce/gci/configure.sh b/cluster/gce/gci/configure.sh index 5368cc1483565..dfafc46a3bbc4 100644 --- a/cluster/gce/gci/configure.sh +++ b/cluster/gce/gci/configure.sh @@ -24,8 +24,8 @@ set -o nounset set -o pipefail ### Hardcoded constants -DEFAULT_CNI_VERSION="v0.8.6" -DEFAULT_CNI_SHA1="a31251105250279fe57b4474d91d2db1d4d48b5a" +DEFAULT_CNI_VERSION="v0.8.7" +DEFAULT_CNI_SHA1="96a30cb67e33da95fb1d99f93dd787c2a3c08627" DEFAULT_NPD_VERSION="v0.8.0" DEFAULT_NPD_SHA1="9406c975b1b035995a137029a004622b905b4e7f" DEFAULT_CRICTL_VERSION="v1.18.0" diff --git a/test/e2e_node/remote/utils.go b/test/e2e_node/remote/utils.go index 78c3afa5c146d..9cb42dfbf6a23 100644 --- a/test/e2e_node/remote/utils.go +++ b/test/e2e_node/remote/utils.go @@ -27,7 +27,7 @@ import ( // utils.go contains functions used across test suites. const ( - cniVersion = "v0.8.6" + cniVersion = "v0.8.7" cniArch = "amd64" cniDirectory = "cni/bin" // The CNI tarball places binaries under directory under "cni/bin". cniConfDirectory = "cni/net.d" From 55b0dcd0f685184f9fbb937b8e60c56f175a157b Mon Sep 17 00:00:00 2001 From: Jan Chaloupka Date: Tue, 4 Aug 2020 18:10:34 +0200 Subject: [PATCH 30/96] kubectl describe pod: use ReportingController as an event source With https://github.com/kubernetes/kubernetes/pull/91645 merged (promotion of v1beta1 events to v1), it's no longer permitted to set Source field. Based on https://stupefied-goodall-e282f7.netlify.app/contributors/design-proposals/instrumentation/events-redesign/#backward-compatibility Source.Component is supposed to be replaced by ReportingController. Source.Host is supposed to be replaced by DeprecatedHost, though DeprecatedHost was never implemented. Thus, ignoring the second field. --- .../src/k8s.io/kubectl/pkg/describe/describe.go | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/staging/src/k8s.io/kubectl/pkg/describe/describe.go b/staging/src/k8s.io/kubectl/pkg/describe/describe.go index 24e70e2ae75c9..5034864bdfbc8 100644 --- a/staging/src/k8s.io/kubectl/pkg/describe/describe.go +++ b/staging/src/k8s.io/kubectl/pkg/describe/describe.go @@ -3873,11 +3873,15 @@ func DescribeEvents(el *corev1.EventList, w PrefixWriter) { interval = translateMicroTimestampSince(e.EventTime) } } + source := e.Source.Component + if source == "" { + source = e.ReportingController + } w.Write(LEVEL_1, "%v\t%v\t%s\t%v\t%v\n", e.Type, e.Reason, interval, - formatEventSource(e.Source), + source, strings.TrimSpace(e.Message), ) } @@ -5001,15 +5005,6 @@ func translateTimestampSince(timestamp metav1.Time) string { return duration.HumanDuration(time.Since(timestamp.Time)) } -// formatEventSource formats EventSource as a comma separated string excluding Host when empty -func formatEventSource(es corev1.EventSource) string { - EventSourceString := []string{es.Component} - if len(es.Host) > 0 { - EventSourceString = append(EventSourceString, es.Host) - } - return strings.Join(EventSourceString, ", ") -} - // Pass ports=nil for all ports. func formatEndpoints(endpoints *corev1.Endpoints, ports sets.String) string { if len(endpoints.Subsets) == 0 { From 39fd13dd152d89d91a4a95b721e9d3659fa9d01b Mon Sep 17 00:00:00 2001 From: Kiyoshi Muranaka Date: Mon, 7 Sep 2020 02:43:21 +0900 Subject: [PATCH 31/96] Fix index out of range panic for kubectl alpha debug Fix containerNameToRef func to get init containers and ephemeral containers properly. Set EphemeralContainers in generatePodCopyWithDebugContainer func to nil which means dropping ephemeral containers from a copy of pod so that it can be created successfully, otherwise it is rejected by the API server. --- .../src/k8s.io/kubectl/pkg/cmd/debug/debug.go | 6 +- .../kubectl/pkg/cmd/debug/debug_test.go | 172 ++++++++++++++++++ 2 files changed, 176 insertions(+), 2 deletions(-) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/debug/debug.go b/staging/src/k8s.io/kubectl/pkg/cmd/debug/debug.go index 0c9ec32ca5502..6a6fe892d4ed6 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/debug/debug.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/debug/debug.go @@ -485,6 +485,8 @@ func (o *DebugOptions) generatePodCopyWithDebugContainer(pod *corev1.Pod) (*core }, Spec: *pod.Spec.DeepCopy(), } + // set EphemeralContainers to nil so that the copy of pod can be created + copied.Spec.EphemeralContainers = nil // change ShareProcessNamespace configuration only when commanded explicitly if o.shareProcessedChanged { copied.Spec.ShareProcessNamespace = pointer.BoolPtr(o.ShareProcesses) @@ -544,11 +546,11 @@ func containerNameToRef(pod *corev1.Pod) map[string]*corev1.Container { names[ref.Name] = ref } for i := range pod.Spec.InitContainers { - ref := &pod.Spec.Containers[i] + ref := &pod.Spec.InitContainers[i] names[ref.Name] = ref } for i := range pod.Spec.EphemeralContainers { - ref := &pod.Spec.Containers[i] + ref := (*corev1.Container)(&pod.Spec.EphemeralContainers[i].EphemeralContainerCommon) names[ref.Name] = ref } return names diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/debug/debug_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/debug/debug_test.go index de224cc398ff8..3e0609202896c 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/debug/debug_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/debug/debug_test.go @@ -153,6 +153,74 @@ func TestGenerateDebugContainer(t *testing.T) { }, }, }, + { + name: "pod with init containers", + opts: &DebugOptions{ + Image: "busybox", + PullPolicy: corev1.PullIfNotPresent, + }, + pod: &corev1.Pod{ + Spec: corev1.PodSpec{ + InitContainers: []corev1.Container{ + { + Name: "init-container-1", + }, + { + Name: "init-container-2", + }, + }, + Containers: []corev1.Container{ + { + Name: "debugger", + }, + }, + }, + }, + expected: &corev1.EphemeralContainer{ + EphemeralContainerCommon: corev1.EphemeralContainerCommon{ + Name: "debugger-1", + Image: "busybox", + ImagePullPolicy: "IfNotPresent", + TerminationMessagePolicy: "File", + }, + }, + }, + { + name: "pod with ephemeral containers", + opts: &DebugOptions{ + Image: "busybox", + PullPolicy: corev1.PullIfNotPresent, + }, + pod: &corev1.Pod{ + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "debugger", + }, + }, + EphemeralContainers: []corev1.EphemeralContainer{ + { + EphemeralContainerCommon: corev1.EphemeralContainerCommon{ + Name: "ephemeral-container-1", + }, + }, + { + EphemeralContainerCommon: corev1.EphemeralContainerCommon{ + Name: "ephemeral-container-2", + }, + }, + }, + }, + }, + expected: &corev1.EphemeralContainer{ + EphemeralContainerCommon: corev1.EphemeralContainerCommon{ + Name: "debugger-1", + Image: "busybox", + ImagePullPolicy: "IfNotPresent", + TerminationMessagePolicy: "File", + }, + }, + }, } { t.Run(tc.name, func(t *testing.T) { tc.opts.IOStreams = genericclioptions.NewTestIOStreamsDiscard() @@ -590,6 +658,110 @@ func TestGeneratePodCopyWithDebugContainer(t *testing.T) { }, }, }, + { + name: "pod with init containers", + opts: &DebugOptions{ + CopyTo: "debugger", + Image: "busybox", + PullPolicy: corev1.PullIfNotPresent, + }, + pod: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "target", + }, + Spec: corev1.PodSpec{ + InitContainers: []corev1.Container{ + { + Name: "init-container-1", + }, + { + Name: "init-container-2", + }, + }, + Containers: []corev1.Container{ + { + Name: "debugger-1", + }, + }, + }, + }, + expected: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "debugger", + }, + Spec: corev1.PodSpec{ + InitContainers: []corev1.Container{ + { + Name: "init-container-1", + }, + { + Name: "init-container-2", + }, + }, + Containers: []corev1.Container{ + { + Name: "debugger-1", + }, + { + Name: "debugger-2", + Image: "busybox", + ImagePullPolicy: corev1.PullIfNotPresent, + TerminationMessagePolicy: corev1.TerminationMessageReadFile, + }, + }, + }, + }, + }, + { + name: "pod with ephemeral containers", + opts: &DebugOptions{ + CopyTo: "debugger", + Image: "busybox", + PullPolicy: corev1.PullIfNotPresent, + }, + pod: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "target", + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "debugger-1", + }, + }, + EphemeralContainers: []corev1.EphemeralContainer{ + { + EphemeralContainerCommon: corev1.EphemeralContainerCommon{ + Name: "ephemeral-container-1", + }, + }, + { + EphemeralContainerCommon: corev1.EphemeralContainerCommon{ + Name: "ephemeral-container-2", + }, + }, + }, + }, + }, + expected: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "debugger", + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "debugger-1", + }, + { + Name: "debugger-2", + Image: "busybox", + ImagePullPolicy: corev1.PullIfNotPresent, + TerminationMessagePolicy: corev1.TerminationMessageReadFile, + }, + }, + }, + }, + }, { name: "shared process namespace", opts: &DebugOptions{ From f5743093fd1c663cb0cbc89748f730662345d44d Mon Sep 17 00:00:00 2001 From: Anago GCB Date: Wed, 16 Sep 2020 13:31:56 +0000 Subject: [PATCH 32/96] Release commit for Kubernetes v1.19.2 From 6bff3458ca4f36dad3d7bbca5f475bffbca5f88f Mon Sep 17 00:00:00 2001 From: Michal Fojtik Date: Thu, 29 Oct 2020 13:55:54 +0100 Subject: [PATCH 33/96] UPSTREAM: 74956: apiserver: switch authorization to use protobuf client --- .../k8s.io/apiserver/pkg/server/options/authorization.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/apiserver/pkg/server/options/authorization.go b/staging/src/k8s.io/apiserver/pkg/server/options/authorization.go index 8b1718b4012c5..dab4abcc9cfe5 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/options/authorization.go +++ b/staging/src/k8s.io/apiserver/pkg/server/options/authorization.go @@ -187,5 +187,10 @@ func (s *DelegatingAuthorizationOptions) getClient() (kubernetes.Interface, erro clientConfig.QPS = 200 clientConfig.Burst = 400 - return kubernetes.NewForConfig(clientConfig) + // make the client use protobuf + protoConfig := rest.CopyConfig(clientConfig) + protoConfig.AcceptContentTypes = "application/vnd.kubernetes.protobuf,application/json" + protoConfig.ContentType = "application/vnd.kubernetes.protobuf" + + return kubernetes.NewForConfig(protoConfig) } From 338f8a0795118b70dfaeafa37028d3a81d79af2d Mon Sep 17 00:00:00 2001 From: Abhinav Dahiya Date: Thu, 29 Oct 2020 13:55:55 +0100 Subject: [PATCH 34/96] UPSTREAM: 84466: gce: ensureInternalInstanceGroups: reuse instance-groups for internal load balancers UPSTREAM: 84466: legacy-cloud-providers/gce/gce_fake.go: NewFakeGCECloud: make sure that the secondary zone is also part of managedZones Origin-commit: 79d66e294a3906efd0351f125cefb4b9cc1c9ab4 UPSTREAM: 84466: gce: ensureInternalInstanceGroups: reuse instance-groups for internal load balancers Origin-commit: cfb25370a7c8f9bed9688cb334b4bc1c3342da0d UPSTREAM: 84466: gce: add ExternalInstanceGroupsPrefix to filter instance groups that will be re-used for ILB backend Origin-commit: e29c0b6ce3c068e02419a7b3cbc381b919981f50 UPSTREAM: 84466: gce: skip ensureInstanceGroup for a zone that has no remaining nodes for k8s managed IG Origin-commit: 3915cef99ee4eedc9755d454abb7e4efa2a63bff --- .../k8s.io/legacy-cloud-providers/gce/gce.go | 91 ++++++++++--------- .../legacy-cloud-providers/gce/gce_fake.go | 2 +- .../gce/gce_instancegroup.go | 17 ++++ .../gce/gce_loadbalancer_internal.go | 56 ++++++++++-- .../gce/gce_loadbalancer_internal_test.go | 71 ++++++++++++++- 5 files changed, 187 insertions(+), 50 deletions(-) diff --git a/staging/src/k8s.io/legacy-cloud-providers/gce/gce.go b/staging/src/k8s.io/legacy-cloud-providers/gce/gce.go index 61d30b5b8e020..5b31c0f4d47d0 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/gce/gce.go +++ b/staging/src/k8s.io/legacy-cloud-providers/gce/gce.go @@ -141,6 +141,9 @@ type Cloud struct { useMetadataServer bool operationPollRateLimiter flowcontrol.RateLimiter manager diskServiceManager + + externalInstanceGroupsPrefix string // If non-"", finds prefixed instance groups for ILB. + // Lock for access to nodeZones nodeZonesLock sync.Mutex // nodeZones is a mapping from Zone to a sets.String of Node's names in the Zone @@ -187,6 +190,9 @@ type ConfigGlobal struct { NodeInstancePrefix string `gcfg:"node-instance-prefix"` Regional bool `gcfg:"regional"` Multizone bool `gcfg:"multizone"` + // ExternalInstanceGroupsPrefix is the prefix that will be used to filter instance groups + // that be backend for ILB containing cluster nodes if not-empty. + ExternalInstanceGroupsPrefix string `gcfg:"external-instance-groups-prefix"` // APIEndpoint is the GCE compute API endpoint to use. If this is blank, // then the default endpoint is used. APIEndpoint string `gcfg:"api-endpoint"` @@ -214,24 +220,25 @@ type ConfigFile struct { // CloudConfig includes all the necessary configuration for creating Cloud type CloudConfig struct { - APIEndpoint string - ContainerAPIEndpoint string - ProjectID string - NetworkProjectID string - Region string - Regional bool - Zone string - ManagedZones []string - NetworkName string - NetworkURL string - SubnetworkName string - SubnetworkURL string - SecondaryRangeName string - NodeTags []string - NodeInstancePrefix string - TokenSource oauth2.TokenSource - UseMetadataServer bool - AlphaFeatureGate *AlphaFeatureGate + APIEndpoint string + ContainerAPIEndpoint string + ProjectID string + NetworkProjectID string + Region string + Regional bool + Zone string + ManagedZones []string + NetworkName string + NetworkURL string + SubnetworkName string + SubnetworkURL string + SecondaryRangeName string + NodeTags []string + NodeInstancePrefix string + ExternalInstanceGroupsPrefix string + TokenSource oauth2.TokenSource + UseMetadataServer bool + AlphaFeatureGate *AlphaFeatureGate } func init() { @@ -321,6 +328,7 @@ func generateCloudConfig(configFile *ConfigFile) (cloudConfig *CloudConfig, err cloudConfig.NodeTags = configFile.Global.NodeTags cloudConfig.NodeInstancePrefix = configFile.Global.NodeInstancePrefix + cloudConfig.ExternalInstanceGroupsPrefix = configFile.Global.ExternalInstanceGroupsPrefix cloudConfig.AlphaFeatureGate = NewAlphaFeatureGate(configFile.Global.AlphaFeatures) } @@ -498,29 +506,30 @@ func CreateGCECloud(config *CloudConfig) (*Cloud, error) { operationPollRateLimiter := flowcontrol.NewTokenBucketRateLimiter(5, 5) // 5 qps, 5 burst. gce := &Cloud{ - service: service, - serviceAlpha: serviceAlpha, - serviceBeta: serviceBeta, - containerService: containerService, - tpuService: tpuService, - projectID: projID, - networkProjectID: netProjID, - onXPN: onXPN, - region: config.Region, - regional: config.Regional, - localZone: config.Zone, - managedZones: config.ManagedZones, - networkURL: networkURL, - unsafeIsLegacyNetwork: isLegacyNetwork, - unsafeSubnetworkURL: subnetURL, - secondaryRangeName: config.SecondaryRangeName, - nodeTags: config.NodeTags, - nodeInstancePrefix: config.NodeInstancePrefix, - useMetadataServer: config.UseMetadataServer, - operationPollRateLimiter: operationPollRateLimiter, - AlphaFeatureGate: config.AlphaFeatureGate, - nodeZones: map[string]sets.String{}, - metricsCollector: newLoadBalancerMetrics(), + service: service, + serviceAlpha: serviceAlpha, + serviceBeta: serviceBeta, + containerService: containerService, + tpuService: tpuService, + projectID: projID, + networkProjectID: netProjID, + onXPN: onXPN, + region: config.Region, + regional: config.Regional, + localZone: config.Zone, + managedZones: config.ManagedZones, + networkURL: networkURL, + unsafeIsLegacyNetwork: isLegacyNetwork, + unsafeSubnetworkURL: subnetURL, + secondaryRangeName: config.SecondaryRangeName, + nodeTags: config.NodeTags, + nodeInstancePrefix: config.NodeInstancePrefix, + externalInstanceGroupsPrefix: config.ExternalInstanceGroupsPrefix, + useMetadataServer: config.UseMetadataServer, + operationPollRateLimiter: operationPollRateLimiter, + AlphaFeatureGate: config.AlphaFeatureGate, + nodeZones: map[string]sets.String{}, + metricsCollector: newLoadBalancerMetrics(), } gce.manager = &gceServiceManager{gce} diff --git a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_fake.go b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_fake.go index 4f9a8d080fa07..ac591725da2fe 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_fake.go +++ b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_fake.go @@ -71,7 +71,7 @@ func NewFakeGCECloud(vals TestClusterValues) *Cloud { gce := &Cloud{ region: vals.Region, service: service, - managedZones: []string{vals.ZoneName}, + managedZones: []string{vals.ZoneName, vals.SecondaryZoneName}, projectID: vals.ProjectID, networkProjectID: vals.ProjectID, ClusterID: fakeClusterID(vals.ClusterID), diff --git a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_instancegroup.go b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_instancegroup.go index a1dad3713d1fb..c613253c0c574 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_instancegroup.go +++ b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_instancegroup.go @@ -19,6 +19,8 @@ limitations under the License. package gce import ( + "fmt" + compute "google.golang.org/api/compute/v1" "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud" @@ -60,6 +62,21 @@ func (g *Cloud) ListInstanceGroups(zone string) ([]*compute.InstanceGroup, error return v, mc.Observe(err) } +// ListInstanceGroupsWithPrefix lists all InstanceGroups in the project and +// zone with given prefix. +func (g *Cloud) ListInstanceGroupsWithPrefix(zone string, prefix string) ([]*compute.InstanceGroup, error) { + ctx, cancel := cloud.ContextWithCallTimeout() + defer cancel() + + mc := newInstanceGroupMetricContext("list", zone) + f := filter.None + if prefix != "" { + f = filter.Regexp("name", fmt.Sprintf("%s.*", prefix)) + } + v, err := g.c.InstanceGroups().List(ctx, zone, f) + return v, mc.Observe(err) +} + // ListInstancesInInstanceGroup lists all the instances in a given // instance group and state. func (g *Cloud) ListInstancesInInstanceGroup(name string, zone string, state string) ([]*compute.InstanceWithNamedPorts, error) { diff --git a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal.go b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal.go index ef285b308ec8b..cf809b6c91c8c 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal.go +++ b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal.go @@ -533,17 +533,14 @@ func (g *Cloud) ensureInternalHealthCheck(name string, svcName types.NamespacedN return hc, nil } -func (g *Cloud) ensureInternalInstanceGroup(name, zone string, nodes []*v1.Node) (string, error) { +func (g *Cloud) ensureInternalInstanceGroup(name, zone string, nodes []string) (string, error) { klog.V(2).Infof("ensureInternalInstanceGroup(%v, %v): checking group that it contains %v nodes", name, zone, len(nodes)) ig, err := g.GetInstanceGroup(name, zone) if err != nil && !isNotFound(err) { return "", err } - kubeNodes := sets.NewString() - for _, n := range nodes { - kubeNodes.Insert(n.Name) - } + kubeNodes := sets.NewString(nodes...) // Individual InstanceGroup has a limit for 1000 instances in it. // As a result, it's not possible to add more to it. @@ -609,8 +606,46 @@ func (g *Cloud) ensureInternalInstanceGroups(name string, nodes []*v1.Node) ([]s zonedNodes := splitNodesByZone(nodes) klog.V(2).Infof("ensureInternalInstanceGroups(%v): %d nodes over %d zones in region %v", name, len(nodes), len(zonedNodes), g.region) var igLinks []string - for zone, nodes := range zonedNodes { - igLink, err := g.ensureInternalInstanceGroup(name, zone, nodes) + gceZonedNodes := map[string][]string{} + for zone, zNodes := range zonedNodes { + hosts, err := g.getFoundInstanceByNames(nodeNames(zNodes)) + if err != nil { + return nil, err + } + names := sets.NewString() + for _, h := range hosts { + names.Insert(h.Name) + } + skip := sets.NewString() + + igs, err := g.candidateExternalInstanceGroups(zone) + if err != nil { + return nil, err + } + for _, ig := range igs { + if strings.EqualFold(ig.Name, name) { + continue + } + instances, err := g.ListInstancesInInstanceGroup(ig.Name, zone, allInstances) + if err != nil { + return nil, err + } + groupInstances := sets.NewString() + for _, ins := range instances { + parts := strings.Split(ins.Instance, "/") + groupInstances.Insert(parts[len(parts)-1]) + } + if names.HasAll(groupInstances.UnsortedList()...) { + igLinks = append(igLinks, ig.SelfLink) + skip.Insert(groupInstances.UnsortedList()...) + } + } + if remaining := names.Difference(skip).UnsortedList(); len(remaining) > 0 { + gceZonedNodes[zone] = remaining + } + } + for zone, gceNodes := range gceZonedNodes { + igLink, err := g.ensureInternalInstanceGroup(name, zone, gceNodes) if err != nil { return []string{}, err } @@ -620,6 +655,13 @@ func (g *Cloud) ensureInternalInstanceGroups(name string, nodes []*v1.Node) ([]s return igLinks, nil } +func (g *Cloud) candidateExternalInstanceGroups(zone string) ([]*compute.InstanceGroup, error) { + if g.externalInstanceGroupsPrefix == "" { + return nil, nil + } + return g.ListInstanceGroupsWithPrefix(zone, g.externalInstanceGroupsPrefix) +} + func (g *Cloud) ensureInternalInstanceGroupsDeleted(name string) error { // List of nodes isn't available here - fetch all zones in region and try deleting this cluster's ig zones, err := g.ListZonesInRegion(g.region) diff --git a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal_test.go b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal_test.go index f3b2d902ce37c..10e9c56a6d424 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal_test.go @@ -31,7 +31,7 @@ import ( "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud" "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta" "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock" - "google.golang.org/api/compute/v1" + compute "google.golang.org/api/compute/v1" "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" @@ -807,6 +807,75 @@ func TestEnsureLoadBalancerDeletedSucceedsOnXPN(t *testing.T) { checkEvent(t, recorder, FilewallChangeMsg, true) } +func TestEnsureInternalInstanceGroupsReuseGroups(t *testing.T) { + vals := DefaultTestClusterValues() + gce, err := fakeGCECloud(vals) + require.NoError(t, err) + gce.externalInstanceGroupsPrefix = "pre-existing" + + igName := makeInstanceGroupName(vals.ClusterID) + nodesA, err := createAndInsertNodes(gce, []string{"test-node-1", "test-node-2"}, vals.ZoneName) + require.NoError(t, err) + nodesB, err := createAndInsertNodes(gce, []string{"test-node-3"}, vals.SecondaryZoneName) + require.NoError(t, err) + + preIGName := "pre-existing-ig" + err = gce.CreateInstanceGroup(&compute.InstanceGroup{Name: preIGName}, vals.ZoneName) + require.NoError(t, err) + err = gce.CreateInstanceGroup(&compute.InstanceGroup{Name: preIGName}, vals.SecondaryZoneName) + require.NoError(t, err) + err = gce.AddInstancesToInstanceGroup(preIGName, vals.ZoneName, gce.ToInstanceReferences(vals.ZoneName, []string{"test-node-1"})) + require.NoError(t, err) + err = gce.AddInstancesToInstanceGroup(preIGName, vals.SecondaryZoneName, gce.ToInstanceReferences(vals.SecondaryZoneName, []string{"test-node-3"})) + require.NoError(t, err) + + anotherPreIGName := "another-existing-ig" + err = gce.CreateInstanceGroup(&compute.InstanceGroup{Name: anotherPreIGName}, vals.ZoneName) + require.NoError(t, err) + err = gce.AddInstancesToInstanceGroup(anotherPreIGName, vals.ZoneName, gce.ToInstanceReferences(vals.ZoneName, []string{"test-node-2"})) + require.NoError(t, err) + + svc := fakeLoadbalancerService(string(LBTypeInternal)) + svc, err = gce.client.CoreV1().Services(svc.Namespace).Create(context.TODO(), svc, metav1.CreateOptions{}) + assert.NoError(t, err) + _, err = gce.ensureInternalLoadBalancer( + vals.ClusterName, vals.ClusterID, + svc, + nil, + append(nodesA, nodesB...), + ) + assert.NoError(t, err) + + backendServiceName := makeBackendServiceName(gce.GetLoadBalancerName(context.TODO(), "", svc), vals.ClusterID, shareBackendService(svc), cloud.SchemeInternal, "TCP", svc.Spec.SessionAffinity) + bs, err := gce.GetRegionBackendService(backendServiceName, gce.region) + require.NoError(t, err) + assert.Equal(t, 3, len(bs.Backends), "Want three backends referencing three instances groups") + + igRef := func(zone, name string) string { + return fmt.Sprintf("zones/%s/instanceGroups/%s", zone, name) + } + for _, name := range []string{igRef(vals.ZoneName, preIGName), igRef(vals.SecondaryZoneName, preIGName), igRef(vals.ZoneName, igName)} { + var found bool + for _, be := range bs.Backends { + if strings.Contains(be.Group, name) { + found = true + break + } + } + assert.True(t, found, "Expected list of backends to have group %q", name) + } + + // Expect initial zone to have test-node-2 + instances, err := gce.ListInstancesInInstanceGroup(igName, vals.ZoneName, "ALL") + require.NoError(t, err) + assert.Equal(t, 1, len(instances)) + assert.Contains( + t, + instances[0].Instance, + fmt.Sprintf("projects/%s/zones/%s/instances/%s", vals.ProjectID, vals.ZoneName, "test-node-2"), + ) +} + func TestEnsureInternalInstanceGroupsDeleted(t *testing.T) { vals := DefaultTestClusterValues() gce, err := fakeGCECloud(vals) From 5a3cd68ab8197b7c9109bce10d2bb50f307b6636 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:55:55 +0100 Subject: [PATCH 35/96] UPSTREAM: 93286: wait for apiservices on startup --- .../pkg/apiserver/apiserver.go | 45 ++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go index 1b22b24e27439..2ce69c6ba650e 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go @@ -18,11 +18,18 @@ package apiserver import ( "fmt" + "k8s.io/klog/v2" "net/http" + "strings" "time" + "k8s.io/apimachinery/pkg/labels" + + "k8s.io/apimachinery/pkg/util/wait" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" genericapiserver "k8s.io/apiserver/pkg/server" "k8s.io/apiserver/pkg/server/egressselector" @@ -263,6 +270,33 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg go availableController.Run(5, context.StopCh) return nil }) + s.GenericAPIServer.AddPostStartHook("apiservice-wait-for-first-sync", func(context genericapiserver.PostStartHookContext) error { + // when the aggregator first starts, it should make sure that it has proxy handlers for all the known good API services at this time + // we only need to do this once. + err := wait.PollImmediateUntil(100*time.Millisecond, func() (bool, error) { + // fix race + handledAPIServices := sets.StringKeySet(s.proxyHandlers) + apiservices, err := s.lister.List(labels.Everything()) + if err != nil { + return false, err + } + expectedAPIServices := sets.NewString() + for _, apiservice := range apiservices { + if v1helper.IsAPIServiceConditionTrue(apiservice, v1.Available) { + expectedAPIServices.Insert(apiservice.Name) + } + } + + notYetHandledAPIServices := expectedAPIServices.Difference(handledAPIServices) + if len(notYetHandledAPIServices) == 0 { + return true, nil + } + klog.Infof("still waiting on handling APIServices: %v", strings.Join(notYetHandledAPIServices.List(), ",")) + + return false, nil + }, context.StopCh) + return err + }) return s, nil } @@ -331,9 +365,16 @@ func (s *APIAggregator) AddAPIService(apiService *v1.APIService) error { } proxyHandler.updateAPIService(apiService) if s.openAPIAggregationController != nil { - s.openAPIAggregationController.AddAPIService(proxyHandler, apiService) + // this is calling a controller. It should already handle being async. + go func() { + defer utilruntime.HandleCrash() + s.openAPIAggregationController.AddAPIService(proxyHandler, apiService) + }() } - s.proxyHandlers[apiService.Name] = proxyHandler + // we want to update the registration bit last after all the pieces are wired together + defer func() { + s.proxyHandlers[apiService.Name] = proxyHandler + }() s.GenericAPIServer.Handler.NonGoRestfulMux.Handle(proxyPath, proxyHandler) s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandlePrefix(proxyPath+"/", proxyHandler) From 32e04c3d860071dbc219a5d04a8c513f197f6a15 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Thu, 29 Oct 2020 13:55:55 +0100 Subject: [PATCH 36/96] UPSTREAM: : filter out CustomResourceQuota paths from OpenAPI Origin-commit: b992ee2fcb5cd610e9242c3165908b6bc6e423f5 UPSTREAM: : filter out RBR and SCC paths from OpenAPI Origin-commit: 5ce9a77a641ec9d0399226af572e429317d3daf6 UPSTREAM: : filter out RBR and SCC paths from OpenAPI Origin-commit: 0ee08c7a5e138e8df2bd7d010e9ab59a6543cf63 Revise as per https://github.com/openshift/kubernetes-apiserver/pull/12 --- .../apiserver/pkg/server/routes/openapi.go | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go b/staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go index d920dc2a2f71e..e1cb4a6fbfa81 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go +++ b/staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go @@ -17,6 +17,8 @@ limitations under the License. package routes import ( + "strings" + restful "github.com/emicklei/go-restful" "github.com/go-openapi/spec" "k8s.io/klog/v2" @@ -34,11 +36,35 @@ type OpenAPI struct { // Install adds the SwaggerUI webservice to the given mux. func (oa OpenAPI) Install(c *restful.Container, mux *mux.PathRecorderMux) (*handler.OpenAPIService, *spec.Swagger) { + // we shadow ClustResourceQuotas, RoleBindingRestrictions, and SecurityContextContstraints + // with a CRD. This loop removes all CRQ,RBR, SCC paths + // from the OpenAPI spec such that they don't conflict with the CRD + // apiextensions-apiserver spec during merging. + oa.Config.IgnorePrefixes = append(oa.Config.IgnorePrefixes, + "/apis/quota.openshift.io/v1/clusterresourcequotas", + "/apis/security.openshift.io/v1/securitycontextconstraints", + "/apis/authorization.openshift.io/v1/rolebindingrestrictions", + "/apis/authorization.openshift.io/v1/namespaces/{namespace}/rolebindingrestrictions", + "/apis/authorization.openshift.io/v1/watch/namespaces/{namespace}/rolebindingrestrictions", + "/apis/authorization.openshift.io/v1/watch/rolebindingrestrictions") + spec, err := builder.BuildOpenAPISpec(c.RegisteredWebServices(), oa.Config) if err != nil { klog.Fatalf("Failed to build open api spec for root: %v", err) } + // we shadow ClustResourceQuotas, RoleBindingRestrictions, and SecurityContextContstraints + // with a CRD. This loop removes all CRQ,RBR, SCC paths + // from the OpenAPI spec such that they don't conflict with the CRD + // apiextensions-apiserver spec during merging. + for pth := range spec.Paths.Paths { + if strings.HasPrefix(pth, "/apis/quota.openshift.io/v1/clusterresourcequotas") || + strings.Contains(pth, "rolebindingrestrictions") || + strings.HasPrefix(pth, "/apis/security.openshift.io/v1/securitycontextconstraints") { + delete(spec.Paths.Paths, pth) + } + } + openAPIVersionedService, err := handler.NewOpenAPIService(spec) if err != nil { klog.Fatalf("Failed to create OpenAPIService: %v", err) From 6b5bc3f1cb48c1f9c32738aa993a404c01ea9339 Mon Sep 17 00:00:00 2001 From: Michal Fojtik Date: Thu, 29 Oct 2020 13:55:55 +0100 Subject: [PATCH 37/96] UPSTREAM: : patch aggregator to allow delegating resources Origin-commit: 14ba1f8ece9a7bb00ececb2a35b5f8f5fbeacc83 UPSTREAM: : prevent apiservice registration by CRD controller when delegating Origin-commit: 3d216eab7adcbd8596606d72d31b6af621bfd350 UPSTREAM: : prevent CRD registration from fighting with APIServices Origin-commit: c1c87eeade4730a2271cb98b4c6ea16af07e3e68 UPSTREAM: : always delegate namespaced resources Origin-commit: 7f0815b5a88d57046a92fbdbc493bab2ad28a79c --- .../crdregistration_controller.go | 7 ++- .../pkg/apiserver/apiserver.go | 38 +++++++++----- .../pkg/apiserver/handler_proxy.go | 9 ++++ .../apiserver/patch_always_local_delegate.go | 49 +++++++++++++++++++ 4 files changed, 91 insertions(+), 12 deletions(-) create mode 100644 staging/src/k8s.io/kube-aggregator/pkg/apiserver/patch_always_local_delegate.go diff --git a/pkg/master/controller/crdregistration/crdregistration_controller.go b/pkg/master/controller/crdregistration/crdregistration_controller.go index f74b49e9625d7..4277a1a3ef04f 100644 --- a/pkg/master/controller/crdregistration/crdregistration_controller.go +++ b/pkg/master/controller/crdregistration/crdregistration_controller.go @@ -32,7 +32,8 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" + v1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" + "k8s.io/kube-aggregator/pkg/apiserver" ) // AutoAPIServiceRegistration is an interface which callers can re-declare locally and properly cast to for @@ -193,6 +194,10 @@ func (c *crdRegistrationController) enqueueCRD(crd *apiextensionsv1.CustomResour func (c *crdRegistrationController) handleVersionUpdate(groupVersion schema.GroupVersion) error { apiServiceName := groupVersion.Version + "." + groupVersion.Group + if apiserver.APIServiceAlreadyExists(groupVersion) { + return nil + } + // check all CRDs. There shouldn't that many, but if we have problems later we can index them crds, err := c.crdLister.List(labels.Everything()) if err != nil { diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go index 2ce69c6ba650e..ec6612e7a72a3 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go @@ -125,6 +125,9 @@ type APIAggregator struct { // handledGroups are the groups that already have routes handledGroups sets.String + // handledAlwaysLocalDelegatePaths are the URL paths that already have routes registered + handledAlwaysLocalDelegatePaths sets.String + // lister is used to add group handling for /apis/ aggregator lookups based on // controller state lister listers.APIServiceLister @@ -184,17 +187,18 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg ) s := &APIAggregator{ - GenericAPIServer: genericServer, - delegateHandler: delegationTarget.UnprotectedHandler(), - proxyTransport: c.ExtraConfig.ProxyTransport, - proxyHandlers: map[string]*proxyHandler{}, - handledGroups: sets.String{}, - lister: informerFactory.Apiregistration().V1().APIServices().Lister(), - APIRegistrationInformers: informerFactory, - serviceResolver: c.ExtraConfig.ServiceResolver, - openAPIConfig: openAPIConfig, - egressSelector: c.GenericConfig.EgressSelector, - proxyCurrentCertKeyContent: func() (bytes []byte, bytes2 []byte) { return nil, nil }, + GenericAPIServer: genericServer, + delegateHandler: delegationTarget.UnprotectedHandler(), + proxyTransport: c.ExtraConfig.ProxyTransport, + proxyHandlers: map[string]*proxyHandler{}, + handledGroups: sets.String{}, + handledAlwaysLocalDelegatePaths: sets.String{}, + lister: informerFactory.Apiregistration().V1().APIServices().Lister(), + APIRegistrationInformers: informerFactory, + serviceResolver: c.ExtraConfig.ServiceResolver, + openAPIConfig: openAPIConfig, + egressSelector: c.GenericConfig.EgressSelector, + proxyCurrentCertKeyContent: func() (bytes []byte, bytes2 []byte) { return nil, nil }, } apiGroupInfo := apiservicerest.NewRESTStorage(c.GenericConfig.MergedResourceConfig, c.GenericConfig.RESTOptionsGetter) @@ -388,6 +392,18 @@ func (s *APIAggregator) AddAPIService(apiService *v1.APIService) error { return nil } + // For some resources we always want to delegate to local API server. + // These resources have to exists as CRD to be served locally. + for _, alwaysLocalDelegatePath := range alwaysLocalDelegatePathPrefixes.List() { + if s.handledAlwaysLocalDelegatePaths.Has(alwaysLocalDelegatePath) { + continue + } + s.GenericAPIServer.Handler.NonGoRestfulMux.Handle(alwaysLocalDelegatePath, proxyHandler.localDelegate) + // Always use local delegate for this prefix + s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandlePrefix(alwaysLocalDelegatePath+"/", proxyHandler.localDelegate) + s.handledAlwaysLocalDelegatePaths.Insert(alwaysLocalDelegatePath) + } + // it's time to register the group aggregation endpoint groupPath := "/apis/" + apiService.Spec.Group groupDiscoveryHandler := &apiGroupHandler{ diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go index e09f0d1a2386a..fe37fccc0f9b7 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go @@ -25,6 +25,7 @@ import ( "time" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/httpstream" "k8s.io/apimachinery/pkg/util/httpstream/spdy" utilnet "k8s.io/apimachinery/pkg/util/net" @@ -122,6 +123,14 @@ func (r *proxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { return } + // some groupResources should always be delegated + if requestInfo, ok := genericapirequest.RequestInfoFrom(req.Context()); ok { + if alwaysLocalDelegateGroupResource[schema.GroupResource{Group: requestInfo.APIGroup, Resource: requestInfo.Resource}] { + r.localDelegate.ServeHTTP(w, req) + return + } + } + if !handlingInfo.serviceAvailable { proxyError(w, req, "service unavailable", http.StatusServiceUnavailable) return diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/patch_always_local_delegate.go b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/patch_always_local_delegate.go new file mode 100644 index 0000000000000..f7169c0d1abd6 --- /dev/null +++ b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/patch_always_local_delegate.go @@ -0,0 +1,49 @@ +package apiserver + +import ( + "fmt" + "strings" + + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/sets" +) + +// alwaysLocalDelegatePrefixes specify a list of API paths that we want to delegate to Kubernetes API server +// instead of handling with OpenShift API server. +var alwaysLocalDelegatePathPrefixes = sets.NewString() + +// AddAlwaysLocalDelegateForPrefix will cause the given URL prefix always be served by local API server (kube apiserver). +// This allows to move some resources from aggregated API server into CRD. +func AddAlwaysLocalDelegateForPrefix(prefix string) { + if alwaysLocalDelegatePathPrefixes.Has(prefix) { + return + } + alwaysLocalDelegatePathPrefixes.Insert(prefix) +} + +var overlappingGroupVersion = map[schema.GroupVersion]bool{} + +// AddOverlappingGroupVersion will stop the CRD registration controller from trying to manage an APIService. +func AddOverlappingGroupVersion(groupVersion schema.GroupVersion) { + overlappingGroupVersion[groupVersion] = true +} + +var alwaysLocalDelegateGroupResource = map[schema.GroupResource]bool{} + +func AddAlwaysLocalDelegateGroupResource(groupResource schema.GroupResource) { + alwaysLocalDelegateGroupResource[groupResource] = true +} + +func APIServiceAlreadyExists(groupVersion schema.GroupVersion) bool { + if overlappingGroupVersion[groupVersion] { + return true + } + + testPrefix := fmt.Sprintf("/apis/%s/%s/", groupVersion.Group, groupVersion.Version) + for _, prefix := range alwaysLocalDelegatePathPrefixes.List() { + if strings.HasPrefix(prefix, testPrefix) { + return true + } + } + return false +} From febb3ce967b7c9ca489feda804b5f7b811dcc21c Mon Sep 17 00:00:00 2001 From: Michal Fojtik Date: Thu, 29 Oct 2020 13:55:55 +0100 Subject: [PATCH 38/96] UPSTREAM: : remove apiservice from sync in CRD registration when it exists Origin-commit: d3ceac4e065c3d2689192fda102303030cfdb928 --- .../controller/crdregistration/crdregistration_controller.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/master/controller/crdregistration/crdregistration_controller.go b/pkg/master/controller/crdregistration/crdregistration_controller.go index 4277a1a3ef04f..36a8f8c15da14 100644 --- a/pkg/master/controller/crdregistration/crdregistration_controller.go +++ b/pkg/master/controller/crdregistration/crdregistration_controller.go @@ -195,6 +195,10 @@ func (c *crdRegistrationController) handleVersionUpdate(groupVersion schema.Grou apiServiceName := groupVersion.Version + "." + groupVersion.Group if apiserver.APIServiceAlreadyExists(groupVersion) { + // Removing APIService from sync means the CRD registration controller won't sync this APIService + // anymore. If the APIService is managed externally, this will mean the external component can + // update this APIService without CRD controller stomping the changes on it. + c.apiServiceRegistration.RemoveAPIServiceToSync(apiServiceName) return nil } From cb9d4edd200f7232894546ce7b01d7eaca7353a0 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:55:55 +0100 Subject: [PATCH 39/96] UPSTREAM: : hardcoded restmapper with a few entries to rebootstrap SDN when SDN is down Origin-commit: 36c5e7d672bf82bd09ee382564bc03ef8e1b3a76 --- pkg/kubeapiserver/admission/config.go | 2 +- .../admission/patch_restmapper.go | 108 ++++++++++++++++++ 2 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 pkg/kubeapiserver/admission/patch_restmapper.go diff --git a/pkg/kubeapiserver/admission/config.go b/pkg/kubeapiserver/admission/config.go index d79cfaeb26be4..24c934bbb4dfb 100644 --- a/pkg/kubeapiserver/admission/config.go +++ b/pkg/kubeapiserver/admission/config.go @@ -66,7 +66,7 @@ func (c *Config) New(proxyTransport *http.Transport, egressSelector *egressselec discoveryRESTMapper := restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient) kubePluginInitializer := NewPluginInitializer( cloudConfig, - discoveryRESTMapper, + NewAdmissionRESTMapper(discoveryRESTMapper), quotainstall.NewQuotaConfigurationForAdmission(), ) diff --git a/pkg/kubeapiserver/admission/patch_restmapper.go b/pkg/kubeapiserver/admission/patch_restmapper.go new file mode 100644 index 0000000000000..7f465c5195390 --- /dev/null +++ b/pkg/kubeapiserver/admission/patch_restmapper.go @@ -0,0 +1,108 @@ +package admission + +import ( + "fmt" + + "k8s.io/apimachinery/pkg/api/meta" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// defaultRESTMappings contains enough RESTMappings to have enough of the kube-controller-manager succeed when running +// against a kube-apiserver that cannot reach aggregated APIs to do a full mapping. This happens when the OwnerReferencesPermissionEnforcement +// admission plugin runs to confirm permissions. Don't add things just because you don't want to fail. These are here so that +// we can start enough back up to get the rest of the system working correctly. +var defaultRESTMappings = []meta.RESTMapping{ + { + GroupVersionKind: schema.GroupVersionKind{Group: "", Version: "v1", Kind: "ConfigMap"}, + Scope: meta.RESTScopeNamespace, + Resource: schema.GroupVersionResource{Group: "", Version: "v1", Resource: "configmaps"}, + }, + { + GroupVersionKind: schema.GroupVersionKind{Group: "", Version: "v1", Kind: "Pod"}, + Scope: meta.RESTScopeNamespace, + Resource: schema.GroupVersionResource{Group: "", Version: "v1", Resource: "pods"}, + }, + { + GroupVersionKind: schema.GroupVersionKind{Group: "", Version: "v1", Kind: "ReplicationController"}, + Scope: meta.RESTScopeNamespace, + Resource: schema.GroupVersionResource{Group: "", Version: "v1", Resource: "replicationcontrollers"}, + }, + { + GroupVersionKind: schema.GroupVersionKind{Group: "", Version: "v1", Kind: "Secret"}, + Scope: meta.RESTScopeNamespace, + Resource: schema.GroupVersionResource{Group: "", Version: "v1", Resource: "secrets"}, + }, + { + GroupVersionKind: schema.GroupVersionKind{Group: "", Version: "v1", Kind: "ServiceAccount"}, + Scope: meta.RESTScopeNamespace, + Resource: schema.GroupVersionResource{Group: "", Version: "v1", Resource: "serviceaccounts"}, + }, + { + GroupVersionKind: schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "ControllerRevision"}, + Scope: meta.RESTScopeNamespace, + Resource: schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "controllerrevisions"}, + }, + { + GroupVersionKind: schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "DaemonSet"}, + Scope: meta.RESTScopeNamespace, + Resource: schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "daemonsets"}, + }, + { + GroupVersionKind: schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "Deployment"}, + Scope: meta.RESTScopeNamespace, + Resource: schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "deployments"}, + }, + { + GroupVersionKind: schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "ReplicaSet"}, + Scope: meta.RESTScopeNamespace, + Resource: schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "replicasets"}, + }, + { + GroupVersionKind: schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "StatefulSet"}, + Scope: meta.RESTScopeNamespace, + Resource: schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "statefulsets"}, + }, +} + +func NewAdmissionRESTMapper(delegate meta.RESTMapper) meta.RESTMapper { + ret := HardCodedFirstRESTMapper{ + Mapping: map[schema.GroupVersionKind]meta.RESTMapping{}, + RESTMapper: delegate, + } + for i := range defaultRESTMappings { + curr := defaultRESTMappings[i] + ret.Mapping[curr.GroupVersionKind] = curr + } + return ret +} + +// HardCodedFirstRESTMapper is a RESTMapper that will look for hardcoded mappings first, then delegate. +// This is done in service to `OwnerReferencesPermissionEnforcement` +type HardCodedFirstRESTMapper struct { + Mapping map[schema.GroupVersionKind]meta.RESTMapping + meta.RESTMapper +} + +var _ meta.RESTMapper = HardCodedFirstRESTMapper{} + +func (m HardCodedFirstRESTMapper) String() string { + return fmt.Sprintf("HardCodedRESTMapper{\n\t%v\n%v\n}", m.Mapping, m.RESTMapper) +} + +// RESTMapping is the only function called today. The firsthit restmapper ought to make this work right. OwnerReferencesPermissionEnforcement +// only ever calls with one version. +func (m HardCodedFirstRESTMapper) RESTMappings(gk schema.GroupKind, versions ...string) ([]*meta.RESTMapping, error) { + // not exactly one version, delegate + if len(versions) != 1 { + return m.RESTMapper.RESTMappings(gk, versions...) + } + gvk := gk.WithVersion(versions[0]) + + single, ok := m.Mapping[gvk] + // not handled, delegate + if !ok { + return m.RESTMapper.RESTMappings(gk, versions...) + } + + return []*meta.RESTMapping{&single}, nil +} From 26fbdcdfb8b1d877346f47a6c85e8a9c03ce8635 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Thu, 29 Oct 2020 13:55:55 +0100 Subject: [PATCH 40/96] UPSTREAM: : kubelet: Expose a simple journald shim on the kubelet logs endpoint Provide an administrator a streaming view of journal logs without them having to implement a client side reader. Only available to cluster admins. --- pkg/kubelet/kubelet.go | 9 +- pkg/kubelet/kubelet_server_journal.go | 290 +++++++++++++++++++++ pkg/kubelet/kubelet_server_journal_test.go | 126 +++++++++ 3 files changed, 424 insertions(+), 1 deletion(-) create mode 100644 pkg/kubelet/kubelet_server_journal.go create mode 100644 pkg/kubelet/kubelet_server_journal_test.go diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 2fdd321e583cf..81f4d322ed8ef 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -1313,7 +1313,14 @@ func (kl *Kubelet) initializeRuntimeDependentModules() { // Run starts the kubelet reacting to config updates func (kl *Kubelet) Run(updates <-chan kubetypes.PodUpdate) { if kl.logServer == nil { - kl.logServer = http.StripPrefix("/logs/", http.FileServer(http.Dir("/var/log/"))) + file := http.FileServer(http.Dir("/var/log/")) + kl.logServer = http.StripPrefix("/logs/", http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + if req.URL.Path == "journal" { + journal.ServeHTTP(w, req) + return + } + file.ServeHTTP(w, req) + })) } if kl.kubeClient == nil { klog.Warning("No api server defined - no node status update will be sent.") diff --git a/pkg/kubelet/kubelet_server_journal.go b/pkg/kubelet/kubelet_server_journal.go new file mode 100644 index 0000000000000..9c76041c3ac62 --- /dev/null +++ b/pkg/kubelet/kubelet_server_journal.go @@ -0,0 +1,290 @@ +package kubelet + +import ( + "compress/gzip" + "context" + "fmt" + "io" + "net/http" + "net/url" + "os/exec" + "regexp" + "strconv" + "strings" + "time" +) + +var journal = journalServer{} + +// journalServer returns text output from the system journal to view from +// the client. It runs with the privileges of the calling process (the +// kubelet) and should only be allowed to be invoked by a root user. +type journalServer struct{} + +// ServeHTTP translates HTTP query parameters into arguments to be passed +// to journalctl on the current system. It supports content-encoding of +// gzip to reduce total content size. +func (journalServer) ServeHTTP(w http.ResponseWriter, req *http.Request) { + var out io.Writer = w + args, err := newJournalArgsFromURL(req.URL.Query()) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + w.Header().Set("Content-Type", "text/plain;charset=UTF-8") + if req.Header.Get("Accept-Encoding") == "gzip" { + w.Header().Set("Content-Encoding", "gzip") + + gz := gzip.NewWriter(out) + defer gz.Close() + out = gz + } + args.Copy(out) +} + +// journalArgs assists in invoking the journalctl command. +type journalArgs struct { + Since string + Until string + Tail int + Timeout int + Format string + Boot *int + Units []string + Pattern string + CaseSensitive bool +} + +// newJournalArgsFromURL returns bounds checked values based on query +// parameters. Parameter names are deliberately chosen to align with +// journalctl arguments. If journalctl ever creates incompatible arguments, +// this method should introduce new parameters that preserves compatibility. +func newJournalArgsFromURL(query url.Values) (*journalArgs, error) { + since, err := validJournalDateRange(query.Get("since")) + if err != nil { + return nil, fmt.Errorf("parameter 'since' is invalid: %v", err) + } + until, err := validJournalDateRange(query.Get("until")) + if err != nil { + return nil, fmt.Errorf("parameter 'until' is invalid: %v", err) + } + format, err := stringInSlice(query.Get("output"), "short-precise", "json", "short", "short-unix", "short-iso", "short-iso-precise", "cat", "") + if err != nil { + return nil, fmt.Errorf("parameter 'output' is invalid: %v", err) + } + if len(format) == 0 { + format = "short-precise" + } + units, err := safeStrings(query["unit"]) + if err != nil { + return nil, fmt.Errorf("parameter 'unit' is invalid: %v", err) + } + var boot *int + if bootStr := query.Get("boot"); len(bootStr) > 0 { + boot, err = validIntRange(bootStr, -100, 0) + if err != nil { + return nil, fmt.Errorf("parameter 'boot' is invalid: %v", err) + } + } + pattern, err := safeString(query.Get("grep")) + if err != nil { + return nil, fmt.Errorf("parameter 'grep' is invalid: %v", err) + } + + // All parameters loaded from the query must be thoroughly sanitized - do + // not pass query parameters directly to journalctl without limiting them + // as demonstrated above. + return &journalArgs{ + Units: units, + + Since: since, + Until: until, + Tail: boundedIntegerOrDefault(query.Get("tail"), 0, 100000, 0), + Boot: boot, + + Timeout: boundedIntegerOrDefault(query.Get("timeout"), 1, 60, 30), + + Pattern: pattern, + CaseSensitive: boolean(query.Get("case-sensitive"), true), + + Format: format, + }, nil +} + +// Args returns the journalctl arguments for the given args. +func (a *journalArgs) Args() []string { + args := []string{ + "--utc", + "--no-pager", + } + if len(a.Since) > 0 { + args = append(args, "--since="+a.Since) + } + if len(a.Until) > 0 { + args = append(args, "--until="+a.Until) + } + if a.Tail > 0 { + args = append(args, "--pager-end", fmt.Sprintf("--lines=%d", a.Tail)) + } + if len(a.Format) > 0 { + args = append(args, "--output="+a.Format) + } + for _, unit := range a.Units { + if len(unit) > 0 { + args = append(args, "--unit="+unit) + } + } + if len(a.Pattern) > 0 { + args = append(args, "--grep="+a.Pattern) + args = append(args, fmt.Sprintf("--case-sensitive=%t", a.CaseSensitive)) + } + return args +} + +// Copy streams the contents of the journalctl command executed with the current +// args to the provided writer, timing out at a.Timeout. If an error occurs a line +// is written to the output. +func (a *journalArgs) Copy(w io.Writer) { + // set the deadline to the maximum across both runs + ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(time.Duration(a.Timeout)*time.Second)) + defer cancel() + if a.Boot != nil { + a.copyForBoot(ctx, w, *a.Boot) + } else { + // show the previous boot if possible, eating errors + a.copyForBoot(ctx, w, -1) + // show the current boot + a.copyForBoot(ctx, w, 0) + } +} + +// copyForBoot invokes the provided args for a named boot record. If previousBoot is != 0, then +// errors are silently ignored. +func (a *journalArgs) copyForBoot(ctx context.Context, w io.Writer, previousBoot int) { + if ctx.Err() != nil { + return + } + + args := a.Args() + args = append(args, "--boot", fmt.Sprintf("%d", previousBoot)) + cmd := exec.Command("journalctl", args...) + cmd.Stdout = w + cmd.Stderr = w + + // force termination + go func() { + <-ctx.Done() + if p := cmd.Process; p != nil { + p.Kill() + } + }() + + if err := cmd.Run(); err != nil { + if _, ok := err.(*exec.ExitError); ok { + return + } + if previousBoot == 0 { + fmt.Fprintf(w, "error: journal output not available\n") + } + } +} + +func stringInSlice(s string, allowed ...string) (string, error) { + for _, allow := range allowed { + if s == allow { + return allow, nil + } + } + return "", fmt.Errorf("only the following values are allowed: %s", strings.Join(allowed, ", ")) +} + +func boolean(s string, defaultValue bool) bool { + if len(s) == 0 { + return defaultValue + } + if s == "1" || s == "true" { + return true + } + return false +} + +func validIntRange(s string, min, max int) (*int, error) { + i, err := strconv.Atoi(s) + if err != nil { + return nil, err + } + if i < min || i > max { + return nil, fmt.Errorf("integer must be in range [%d, %d]", min, max) + } + return &i, nil +} + +func boundedIntegerOrDefault(s string, min, max, defaultValue int) int { + i, err := strconv.Atoi(s) + if err != nil { + i = defaultValue + } + if i < min { + i = min + } + if i > max { + i = max + } + return i +} + +var ( + reRelativeDate = regexp.MustCompile(`^(\+|\-)?[\d]+(s|m|h|d)$`) + // The set of known safe characters to pass to journalctl flags - only + // add to this list if the character cannot be used to create invalid + // sequences. This is intended as a broad defense against malformed + // input that could cause a journalctl escape. + reUnsafeCharacters = regexp.MustCompile(`[^a-zA-Z\-_.0-9\s@]+`) +) + +const ( + dateFormat = `2006-01-02 15:04:05.999999` + maxParameterLength = 100 + maxTotalLength = 1000 +) + +func validJournalDateRange(s string) (string, error) { + if len(s) == 0 { + return "", nil + } + if reRelativeDate.MatchString(s) { + return s, nil + } + if _, err := time.Parse(dateFormat, s); err == nil { + return s, nil + } + return "", fmt.Errorf("date must be a relative time of the form '(+|-)[0-9]+(s|m|h|d)' or a date in 'YYYY-MM-DD HH:MM:SS' form") +} + +func safeString(s string) (string, error) { + if len(s) > maxParameterLength { + return "", fmt.Errorf("input is too long, max length is %d", maxParameterLength) + } + if reUnsafeCharacters.MatchString(s) { + return "", fmt.Errorf("input contains unsupported characters") + } + return s, nil +} + +func safeStrings(arr []string) ([]string, error) { + var out []string + var total int + for _, s := range arr { + s, err := safeString(s) + if err != nil { + return nil, err + } + total += len(s) + if total > maxTotalLength { + return nil, fmt.Errorf("total input length across all values must be less than %d", maxTotalLength) + } + out = append(out, s) + } + return out, nil +} diff --git a/pkg/kubelet/kubelet_server_journal_test.go b/pkg/kubelet/kubelet_server_journal_test.go new file mode 100644 index 0000000000000..7c4c4ff50a287 --- /dev/null +++ b/pkg/kubelet/kubelet_server_journal_test.go @@ -0,0 +1,126 @@ +package kubelet + +import ( + "net/url" + "reflect" + "strings" + "testing" + + "k8s.io/apimachinery/pkg/util/diff" +) + +func Test_journalArgs_Args(t *testing.T) { + tests := []struct { + name string + args journalArgs + want []string + }{ + {args: journalArgs{}, want: []string{"--utc", "--no-pager"}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := tt.args.Args(); !reflect.DeepEqual(got, tt.want) { + t.Errorf("journalArgs.Args() = %v, want %v", got, tt.want) + } + }) + } +} + +func repeatString(s string, times int) []string { + var arr []string + for i := 0; i < times; i++ { + arr = append(arr, s) + } + return arr +} + +func Test_newJournalArgsFromURL(t *testing.T) { + tests := []struct { + name string + query url.Values + want *journalArgs + wantErr bool + }{ + {query: url.Values{}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true}}, + {query: url.Values{"unknown": []string{"true"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true}}, + + {query: url.Values{"since": []string{""}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true}}, + {query: url.Values{"since": []string{"1m"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Since: "1m"}}, + {query: url.Values{"since": []string{"12d"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Since: "12d"}}, + {query: url.Values{"since": []string{"516s"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Since: "516s"}}, + {query: url.Values{"since": []string{"-516s"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Since: "-516s"}}, + {query: url.Values{"since": []string{"1y"}}, wantErr: true}, + {query: url.Values{"since": []string{"1"}}, wantErr: true}, + {query: url.Values{"since": []string{"y"}}, wantErr: true}, + {query: url.Values{"since": []string{"-1"}}, wantErr: true}, + {query: url.Values{"since": []string{"-y"}}, wantErr: true}, + {query: url.Values{"since": []string{"2019-12-04 02:00:00"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Since: "2019-12-04 02:00:00"}}, + {query: url.Values{"since": []string{"2019-12-04 02:00:00.000"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Since: "2019-12-04 02:00:00.000"}}, + {query: url.Values{"since": []string{"2019-12-04 02"}}, wantErr: true}, + {query: url.Values{"since": []string{"2019-12-04 02:00"}}, wantErr: true}, + {query: url.Values{"since": []string{"2019-12-04T02:00:00Z"}}, wantErr: true}, + + {query: url.Values{"until": []string{""}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true}}, + {query: url.Values{"until": []string{"1m"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Until: "1m"}}, + {query: url.Values{"until": []string{"-y"}}, wantErr: true}, + {query: url.Values{"until": []string{"2019-12-04 02:00:00"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Until: "2019-12-04 02:00:00"}}, + {query: url.Values{"until": []string{"2019-12-04 02:00:00.000"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Until: "2019-12-04 02:00:00.000"}}, + {query: url.Values{"until": []string{"2019-12-04 02"}}, wantErr: true}, + {query: url.Values{"until": []string{"2019-12-04 02:00"}}, wantErr: true}, + {query: url.Values{"until": []string{"2019-12-04T02:00:00Z"}}, wantErr: true}, + + {query: url.Values{"output": []string{"short", "precise"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Format: "short"}}, + {query: url.Values{"output": []string{"short"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Format: "short"}}, + {query: url.Values{"output": []string{""}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Format: "short-precise"}}, + + {query: url.Values{"tail": []string{"100"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Tail: 100}}, + {query: url.Values{"tail": []string{"10000000"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Tail: 100000}}, + + {query: url.Values{"case-sensitive": []string{"false"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: false}}, + {query: url.Values{"case-sensitive": []string{"0"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: false}}, + {query: url.Values{"case-sensitive": []string{"a"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: false}}, + + {query: url.Values{"grep": []string{"string"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Pattern: "string"}}, + {name: "long grep", query: url.Values{"grep": []string{strings.Repeat("abc", 100)}}, wantErr: true}, + {name: "total grep", query: url.Values{"grep": repeatString(strings.Repeat("a", 100), 2)}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Pattern: strings.Repeat("a", 100)}}, + + {query: url.Values{"unit": []string{"a"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Units: []string{"a"}}}, + {query: url.Values{"unit": []string{""}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Units: []string{""}}}, + {query: url.Values{"unit": []string{"a", "b"}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true, Units: []string{"a", "b"}}}, + + {name: "long unit", query: url.Values{"unit": []string{strings.Repeat("abc", 100)}}, wantErr: true}, + {name: "total unit", query: url.Values{"unit": repeatString(strings.Repeat("a", 100), 11)}, wantErr: true}, + + {query: url.Values{"boot": []string{"0"}}, want: &journalArgs{Boot: intPtr(0), Timeout: 30, Format: "short-precise", CaseSensitive: true}}, + {query: url.Values{"boot": []string{"-23"}}, want: &journalArgs{Boot: intPtr(-23), Timeout: 30, Format: "short-precise", CaseSensitive: true}}, + {query: url.Values{"boot": []string{"-100"}}, want: &journalArgs{Boot: intPtr(-100), Timeout: 30, Format: "short-precise", CaseSensitive: true}}, + {name: "empty value", query: url.Values{"boot": []string{""}}, want: &journalArgs{Timeout: 30, Format: "short-precise", CaseSensitive: true}}, + {name: "boot below range", query: url.Values{"boot": []string{"-101"}}, wantErr: true}, + {name: "boot above range", query: url.Values{"boot": []string{"1"}}, wantErr: true}, + {name: "boot below range", query: url.Values{"boot": []string{"-9999"}}, wantErr: true}, + {name: "boot above range", query: url.Values{"boot": []string{"9999"}}, wantErr: true}, + {name: "boot not int", query: url.Values{"boot": []string{"a"}}, wantErr: true}, + {name: "boot", query: url.Values{"boot": []string{"x"}}, wantErr: true}, + {name: "boot", query: url.Values{"boot": []string{" "}}, wantErr: true}, + } + for _, tt := range tests { + name := tt.name + if len(name) == 0 { + name = tt.query.Encode() + } + t.Run(name, func(t *testing.T) { + got, err := newJournalArgsFromURL(tt.query) + if (err != nil) != tt.wantErr { + t.Errorf("newJournalArgsFromURL() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("different: %s", diff.ObjectReflectDiff(tt.want, got)) + } + }) + } +} + +func intPtr(i int) *int { + return &i +} From 0b338776e529fedde0bbac88aad206d52b0363a6 Mon Sep 17 00:00:00 2001 From: deads2k Date: Thu, 29 Oct 2020 13:55:56 +0100 Subject: [PATCH 41/96] UPSTREAM: : kube-controller-manager: add service serving cert signer to token controller :100644 100644 b32534e... 3e694fc... M pkg/controller/serviceaccount/tokens_controller.go --- .../serviceaccount/tokens_controller.go | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/pkg/controller/serviceaccount/tokens_controller.go b/pkg/controller/serviceaccount/tokens_controller.go index f490ad23ab0d5..577929ab3a673 100644 --- a/pkg/controller/serviceaccount/tokens_controller.go +++ b/pkg/controller/serviceaccount/tokens_controller.go @@ -42,6 +42,8 @@ import ( "k8s.io/kubernetes/pkg/serviceaccount" ) +const ServiceServingCASecretKey = "service-ca.crt" + // RemoveTokenBackoff is the recommended (empirical) retry interval for removing // a secret reference from a service account when the secret is deleted. It is // exported for use by custom secret controllers. @@ -67,6 +69,9 @@ type TokensControllerOptions struct { // MaxRetries controls the maximum number of times a particular key is retried before giving up // If zero, a default max is used MaxRetries int + + // This CA will be added in the secrets of service accounts + ServiceServingCA []byte } // NewTokensController returns a new *TokensController. @@ -77,9 +82,10 @@ func NewTokensController(serviceAccounts informers.ServiceAccountInformer, secre } e := &TokensController{ - client: cl, - token: options.TokenGenerator, - rootCA: options.RootCA, + client: cl, + token: options.TokenGenerator, + rootCA: options.RootCA, + serviceServingCA: options.ServiceServingCA, syncServiceAccountQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "serviceaccount_tokens_service"), syncSecretQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "serviceaccount_tokens_secret"), @@ -134,7 +140,8 @@ type TokensController struct { client clientset.Interface token serviceaccount.TokenGenerator - rootCA []byte + rootCA []byte + serviceServingCA []byte serviceAccounts listersv1.ServiceAccountLister // updatedSecrets is a wrapper around the shared cache which allows us to record @@ -405,6 +412,9 @@ func (e *TokensController) ensureReferencedToken(serviceAccount *v1.ServiceAccou if e.rootCA != nil && len(e.rootCA) > 0 { secret.Data[v1.ServiceAccountRootCAKey] = e.rootCA } + if e.serviceServingCA != nil && len(e.serviceServingCA) > 0 { + secret.Data[ServiceServingCASecretKey] = e.serviceServingCA + } // Save the secret createdToken, err := e.client.CoreV1().Secrets(serviceAccount.Namespace).Create(context.TODO(), secret, metav1.CreateOptions{}) @@ -498,22 +508,23 @@ func (e *TokensController) hasReferencedToken(serviceAccount *v1.ServiceAccount) return false, nil } -func (e *TokensController) secretUpdateNeeded(secret *v1.Secret) (bool, bool, bool) { +func (e *TokensController) secretUpdateNeeded(secret *v1.Secret) (bool, bool, bool, bool) { caData := secret.Data[v1.ServiceAccountRootCAKey] needsCA := len(e.rootCA) > 0 && !bytes.Equal(caData, e.rootCA) + needsServiceServingCA := len(e.serviceServingCA) > 0 && bytes.Compare(secret.Data[ServiceServingCASecretKey], e.serviceServingCA) != 0 needsNamespace := len(secret.Data[v1.ServiceAccountNamespaceKey]) == 0 tokenData := secret.Data[v1.ServiceAccountTokenKey] needsToken := len(tokenData) == 0 - return needsCA, needsNamespace, needsToken + return needsCA, needsServiceServingCA, needsNamespace, needsToken } // generateTokenIfNeeded populates the token data for the given Secret if not already set func (e *TokensController) generateTokenIfNeeded(serviceAccount *v1.ServiceAccount, cachedSecret *v1.Secret) ( /* retry */ bool, error) { // Check the cached secret to see if changes are needed - if needsCA, needsNamespace, needsToken := e.secretUpdateNeeded(cachedSecret); !needsCA && !needsToken && !needsNamespace { + if needsCA, needsServiceServingCA, needsNamespace, needsToken := e.secretUpdateNeeded(cachedSecret); !needsCA && !needsServiceServingCA && !needsToken && !needsNamespace { return false, nil } @@ -532,8 +543,8 @@ func (e *TokensController) generateTokenIfNeeded(serviceAccount *v1.ServiceAccou return false, nil } - needsCA, needsNamespace, needsToken := e.secretUpdateNeeded(liveSecret) - if !needsCA && !needsToken && !needsNamespace { + needsCA, needsServiceServingCA, needsNamespace, needsToken := e.secretUpdateNeeded(liveSecret) + if !needsCA && !needsServiceServingCA && !needsToken && !needsNamespace { return false, nil } @@ -548,6 +559,9 @@ func (e *TokensController) generateTokenIfNeeded(serviceAccount *v1.ServiceAccou if needsCA { liveSecret.Data[v1.ServiceAccountRootCAKey] = e.rootCA } + if needsServiceServingCA { + liveSecret.Data[ServiceServingCASecretKey] = e.serviceServingCA + } // Set the namespace if needsNamespace { liveSecret.Data[v1.ServiceAccountNamespaceKey] = []byte(liveSecret.Namespace) From 015da00285da38f312065b6445735c92081f610d Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:55:56 +0100 Subject: [PATCH 42/96] UPSTREAM: : kube-controller-manager: allow running bare kube-controller-manager --- cmd/kube-controller-manager/app/apps.go | 5 +- .../app/config/config.go | 2 + .../app/config/patch.go | 9 + .../app/controllermanager.go | 29 +- .../app/options/options.go | 8 + cmd/kube-controller-manager/app/patch.go | 70 +++++ .../app/patch_flags.go | 118 ++++++++ cmd/kube-controller-manager/app/patch_gc.go | 40 +++ .../app/patch_informers_openshift.go | 285 ++++++++++++++++++ .../app/patch_recycler.go | 38 +++ .../app/patch_satoken.go | 87 ++++++ pkg/controller/daemon/daemon_controller.go | 17 +- pkg/controller/daemon/patch_nodeselector.go | 95 ++++++ .../daemon/patch_nodeselector_test.go | 186 ++++++++++++ 14 files changed, 983 insertions(+), 6 deletions(-) create mode 100644 cmd/kube-controller-manager/app/config/patch.go create mode 100644 cmd/kube-controller-manager/app/patch.go create mode 100644 cmd/kube-controller-manager/app/patch_flags.go create mode 100644 cmd/kube-controller-manager/app/patch_gc.go create mode 100644 cmd/kube-controller-manager/app/patch_informers_openshift.go create mode 100644 cmd/kube-controller-manager/app/patch_recycler.go create mode 100644 cmd/kube-controller-manager/app/patch_satoken.go create mode 100644 pkg/controller/daemon/patch_nodeselector.go create mode 100644 pkg/controller/daemon/patch_nodeselector_test.go diff --git a/cmd/kube-controller-manager/app/apps.go b/cmd/kube-controller-manager/app/apps.go index 88727a1977e23..5768212ed23ef 100644 --- a/cmd/kube-controller-manager/app/apps.go +++ b/cmd/kube-controller-manager/app/apps.go @@ -37,7 +37,10 @@ func startDaemonSetController(ctx ControllerContext) (http.Handler, bool, error) if !ctx.AvailableResources[schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "daemonsets"}] { return nil, false, nil } - dsc, err := daemon.NewDaemonSetsController( + dsc, err := daemon.NewNodeSelectorAwareDaemonSetsController( + ctx.OpenShiftContext.OpenShiftDefaultProjectNodeSelector, + ctx.OpenShiftContext.KubeDefaultProjectNodeSelector, + ctx.InformerFactory.Core().V1().Namespaces(), ctx.InformerFactory.Apps().V1().DaemonSets(), ctx.InformerFactory.Apps().V1().ControllerRevisions(), ctx.InformerFactory.Core().V1().Pods(), diff --git a/cmd/kube-controller-manager/app/config/config.go b/cmd/kube-controller-manager/app/config/config.go index d3125b4a512e6..266cbefd60b71 100644 --- a/cmd/kube-controller-manager/app/config/config.go +++ b/cmd/kube-controller-manager/app/config/config.go @@ -26,6 +26,8 @@ import ( // Config is the main context object for the controller manager. type Config struct { + OpenShiftContext OpenShiftContext + ComponentConfig kubectrlmgrconfig.KubeControllerManagerConfiguration SecureServing *apiserver.SecureServingInfo diff --git a/cmd/kube-controller-manager/app/config/patch.go b/cmd/kube-controller-manager/app/config/patch.go new file mode 100644 index 0000000000000..a7112d003d41b --- /dev/null +++ b/cmd/kube-controller-manager/app/config/patch.go @@ -0,0 +1,9 @@ +package config + +// OpenShiftContext is additional context that we need to launch the kube-controller-manager for openshift. +// Basically, this holds our additional config information. +type OpenShiftContext struct { + OpenShiftConfig string + OpenShiftDefaultProjectNodeSelector string + KubeDefaultProjectNodeSelector string +} diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index 289440ac9f2e4..c1574d2f3ab46 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -113,7 +113,11 @@ controller, and serviceaccounts controller.`, }, Run: func(cmd *cobra.Command, args []string) { verflag.PrintAndExitIfRequested() - cliflag.PrintFlags(cmd.Flags()) + + if err := ShimFlagsForOpenShift(s, cmd); err != nil { + fmt.Fprintf(os.Stderr, "%v\n", err) + os.Exit(1) + } c, err := s.Config(KnownControllers(), ControllersDisabledByDefault.List()) if err != nil { @@ -121,6 +125,11 @@ controller, and serviceaccounts controller.`, os.Exit(1) } + if err := ShimForOpenShift(s, c); err != nil { + fmt.Fprintf(os.Stderr, "%v\n", err) + os.Exit(1) + } + if err := Run(c.Complete(), wait.NeverStop); err != nil { fmt.Fprintf(os.Stderr, "%v\n", err) os.Exit(1) @@ -245,6 +254,10 @@ func Run(c *config.CompletedConfig, stopCh <-chan struct{}) error { } saTokenControllerInitFunc := serviceAccountTokenControllerStarter{rootClientBuilder: rootClientBuilder}.startServiceAccountTokenController + if err := createPVRecyclerSA(c.OpenShiftContext.OpenShiftConfig, rootClientBuilder); err != nil { + klog.Fatalf("error creating recycler serviceaccount: %v", err) + } + if err := StartControllers(controllerContext, saTokenControllerInitFunc, NewControllerInitializers(controllerContext.LoopMode), unsecuredMux); err != nil { klog.Fatalf("error starting controllers: %v", err) } @@ -301,6 +314,8 @@ func Run(c *config.CompletedConfig, stopCh <-chan struct{}) error { // ControllerContext defines the context object for controller type ControllerContext struct { + OpenShiftContext config.OpenShiftContext + // ClientBuilder will provide a client for this controller to use ClientBuilder controller.ControllerClientBuilder @@ -463,7 +478,12 @@ func GetAvailableResources(clientBuilder controller.ControllerClientBuilder) (ma // the shared-informers client and token controller. func CreateControllerContext(s *config.CompletedConfig, rootClientBuilder, clientBuilder controller.ControllerClientBuilder, stop <-chan struct{}) (ControllerContext, error) { versionedClient := rootClientBuilder.ClientOrDie("shared-informers") - sharedInformers := informers.NewSharedInformerFactory(versionedClient, ResyncPeriod(s)()) + var sharedInformers informers.SharedInformerFactory + if InformerFactoryOverride == nil { + sharedInformers = informers.NewSharedInformerFactory(versionedClient, ResyncPeriod(s)()) + } else { + sharedInformers = InformerFactoryOverride + } metadataClient := metadata.NewForConfigOrDie(rootClientBuilder.ConfigOrDie("metadata-informers")) metadataInformers := metadatainformer.NewSharedInformerFactory(metadataClient, ResyncPeriod(s)()) @@ -494,6 +514,7 @@ func CreateControllerContext(s *config.CompletedConfig, rootClientBuilder, clien } ctx := ControllerContext{ + OpenShiftContext: s.OpenShiftContext, ClientBuilder: clientBuilder, InformerFactory: sharedInformers, ObjectOrMetadataInformerFactory: controller.NewInformerFactory(sharedInformers, metadataInformers), @@ -591,10 +612,10 @@ func (c serviceAccountTokenControllerStarter) startServiceAccountTokenController ctx.InformerFactory.Core().V1().ServiceAccounts(), ctx.InformerFactory.Core().V1().Secrets(), c.rootClientBuilder.ClientOrDie("tokens-controller"), - serviceaccountcontroller.TokensControllerOptions{ + applyOpenShiftServiceServingCertCA(serviceaccountcontroller.TokensControllerOptions{ TokenGenerator: tokenGenerator, RootCA: rootCA, - }, + }), ) if err != nil { return nil, true, fmt.Errorf("error creating Tokens controller: %v", err) diff --git a/cmd/kube-controller-manager/app/options/options.go b/cmd/kube-controller-manager/app/options/options.go index e36bc8ecde5b6..d57cf5232e924 100644 --- a/cmd/kube-controller-manager/app/options/options.go +++ b/cmd/kube-controller-manager/app/options/options.go @@ -93,6 +93,7 @@ type KubeControllerManagerOptions struct { Master string Kubeconfig string ShowHiddenMetricsForVersion string + OpenShiftContext kubecontrollerconfig.OpenShiftContext } // NewKubeControllerManagerOptions creates a new KubeControllerManagerOptions with a default config. @@ -260,6 +261,11 @@ func (s *KubeControllerManagerOptions) Flags(allControllers []string, disabledBy fs := fss.FlagSet("misc") fs.StringVar(&s.Master, "master", s.Master, "The address of the Kubernetes API server (overrides any value in kubeconfig).") fs.StringVar(&s.Kubeconfig, "kubeconfig", s.Kubeconfig, "Path to kubeconfig file with authorization and master location information.") + var dummy string + fs.MarkDeprecated("insecure-experimental-approve-all-kubelet-csrs-for-group", "This flag does nothing.") + fs.StringVar(&dummy, "insecure-experimental-approve-all-kubelet-csrs-for-group", "", "This flag does nothing.") + fs.StringVar(&s.OpenShiftContext.OpenShiftConfig, "openshift-config", s.OpenShiftContext.OpenShiftConfig, "indicates that this process should be compatible with openshift start master") + fs.MarkHidden("openshift-config") utilfeature.DefaultMutableFeatureGate.AddFlag(fss.FlagSet("generic")) return fss @@ -362,6 +368,8 @@ func (s *KubeControllerManagerOptions) ApplyTo(c *kubecontrollerconfig.Config) e c.ComponentConfig.Generic.Port = int32(s.InsecureServing.BindPort) c.ComponentConfig.Generic.Address = s.InsecureServing.BindAddress.String() + c.OpenShiftContext = s.OpenShiftContext + return nil } diff --git a/cmd/kube-controller-manager/app/patch.go b/cmd/kube-controller-manager/app/patch.go new file mode 100644 index 0000000000000..b1cb1fed47af6 --- /dev/null +++ b/cmd/kube-controller-manager/app/patch.go @@ -0,0 +1,70 @@ +package app + +import ( + "path" + + "github.com/spf13/cobra" + + "k8s.io/client-go/informers" + cliflag "k8s.io/component-base/cli/flag" + "k8s.io/klog/v2" + "k8s.io/kubernetes/cmd/kube-controller-manager/app/config" + "k8s.io/kubernetes/cmd/kube-controller-manager/app/options" +) + +var InformerFactoryOverride informers.SharedInformerFactory + +func ShimForOpenShift(controllerManagerOptions *options.KubeControllerManagerOptions, controllerManager *config.Config) error { + if len(controllerManager.OpenShiftContext.OpenShiftConfig) == 0 { + return nil + } + + // TODO this gets removed when no longer take flags and no longer build a recycler template + openshiftConfig, err := getOpenShiftConfig(controllerManager.OpenShiftContext.OpenShiftConfig) + if err != nil { + return err + } + + // TODO this should be replaced by using a flex volume to inject service serving cert CAs into pods instead of adding it to the sa token + if err := applyOpenShiftServiceServingCertCAFunc(path.Dir(controllerManager.OpenShiftContext.OpenShiftConfig), openshiftConfig); err != nil { + return err + } + + // skip GC on some openshift resources + // TODO this should be replaced by discovery information in some way + if err := applyOpenShiftGCConfig(controllerManager); err != nil { + return err + } + + // Overwrite the informers, because we have our custom generic informers for quota. + // TODO update quota to create its own informer like garbage collection + if informers, err := newInformerFactory(controllerManager.Kubeconfig); err != nil { + return err + } else { + InformerFactoryOverride = informers + } + + return nil +} + +func ShimFlagsForOpenShift(controllerManagerOptions *options.KubeControllerManagerOptions, cmd *cobra.Command) error { + if len(controllerManagerOptions.OpenShiftContext.OpenShiftConfig) == 0 { + return nil + } + + // TODO this gets removed when no longer take flags and no longer build a recycler template + openshiftConfig, err := getOpenShiftConfig(controllerManagerOptions.OpenShiftContext.OpenShiftConfig) + if err != nil { + return err + } + // apply the config based controller manager flags. They will override. + // TODO this should be replaced by the installer setting up the flags for us + if err := applyOpenShiftConfigFlags(controllerManagerOptions, openshiftConfig, cmd); err != nil { + return err + } + + klog.V(1).Infof("Flags after OpenShift shims:") + cliflag.PrintFlags(cmd.Flags()) + + return nil +} diff --git a/cmd/kube-controller-manager/app/patch_flags.go b/cmd/kube-controller-manager/app/patch_flags.go new file mode 100644 index 0000000000000..f3a7922993607 --- /dev/null +++ b/cmd/kube-controller-manager/app/patch_flags.go @@ -0,0 +1,118 @@ +package app + +import ( + "fmt" + "io/ioutil" + + "github.com/spf13/cobra" + "github.com/spf13/pflag" + + kerrors "k8s.io/apimachinery/pkg/util/errors" + "k8s.io/apimachinery/pkg/util/json" + "k8s.io/apimachinery/pkg/util/validation/field" + kyaml "k8s.io/apimachinery/pkg/util/yaml" + "k8s.io/kubernetes/cmd/kube-controller-manager/app/options" +) + +func getOpenShiftConfig(configFile string) (map[string]interface{}, error) { + configBytes, err := ioutil.ReadFile(configFile) + if err != nil { + return nil, err + } + jsonBytes, err := kyaml.ToJSON(configBytes) + if err != nil { + return nil, err + } + config := map[string]interface{}{} + if err := json.Unmarshal(jsonBytes, &config); err != nil { + return nil, err + } + + return config, nil +} + +func applyOpenShiftConfigFlags(controllerManagerOptions *options.KubeControllerManagerOptions, openshiftConfig map[string]interface{}, cmd *cobra.Command) error { + if err := applyOpenShiftConfigControllerArgs(controllerManagerOptions, openshiftConfig, cmd); err != nil { + return err + } + if err := applyOpenShiftConfigDefaultProjectSelector(controllerManagerOptions, openshiftConfig); err != nil { + return err + } + if err := applyOpenShiftConfigKubeDefaultProjectSelector(controllerManagerOptions, openshiftConfig); err != nil { + return err + } + return nil +} + +func applyOpenShiftConfigDefaultProjectSelector(controllerManagerOptions *options.KubeControllerManagerOptions, openshiftConfig map[string]interface{}) error { + projectConfig, ok := openshiftConfig["projectConfig"] + if !ok { + return nil + } + + castProjectConfig := projectConfig.(map[string]interface{}) + defaultNodeSelector, ok := castProjectConfig["defaultNodeSelector"] + if !ok { + return nil + } + controllerManagerOptions.OpenShiftContext.OpenShiftDefaultProjectNodeSelector = defaultNodeSelector.(string) + + return nil +} + +// this is an optimization. It can be filled in later. Looks like there are several special cases for this plugin upstream +// TODO find this +func applyOpenShiftConfigKubeDefaultProjectSelector(controllerManagerOptions *options.KubeControllerManagerOptions, openshiftConfig map[string]interface{}) error { + controllerManagerOptions.OpenShiftContext.KubeDefaultProjectNodeSelector = "" + return nil +} + +func applyOpenShiftConfigControllerArgs(controllerManagerOptions *options.KubeControllerManagerOptions, openshiftConfig map[string]interface{}, cmd *cobra.Command) error { + var controllerArgs interface{} + kubeMasterConfig, ok := openshiftConfig["kubernetesMasterConfig"] + if !ok { + controllerArgs, ok = openshiftConfig["extendedArguments"] + if !ok || controllerArgs == nil { + return nil + } + } else { + castKubeMasterConfig := kubeMasterConfig.(map[string]interface{}) + controllerArgs, ok = castKubeMasterConfig["controllerArguments"] + if !ok || controllerArgs == nil { + controllerArgs, ok = openshiftConfig["extendedArguments"] + if !ok || controllerArgs == nil { + return nil + } + } + } + + args := map[string][]string{} + for key, value := range controllerArgs.(map[string]interface{}) { + for _, arrayValue := range value.([]interface{}) { + args[key] = append(args[key], arrayValue.(string)) + } + } + if err := applyFlags(args, cmd.Flags()); len(err) > 0 { + return kerrors.NewAggregate(err) + } + return nil +} + +// applyFlags stores the provided arguments onto a flag set, reporting any errors +// encountered during the process. +func applyFlags(args map[string][]string, flags *pflag.FlagSet) []error { + var errs []error + for key, value := range args { + if flag := flags.Lookup(key); flag != nil { + for _, s := range value { + if err := flag.Value.Set(s); err != nil { + errs = append(errs, field.Invalid(field.NewPath(key), s, fmt.Sprintf("could not be set: %v", err))) + break + } + } + } else { + errs = append(errs, field.Invalid(field.NewPath("flag"), key, "is not a valid flag")) + } + } + return errs +} diff --git a/cmd/kube-controller-manager/app/patch_gc.go b/cmd/kube-controller-manager/app/patch_gc.go new file mode 100644 index 0000000000000..7416bbca5f3d1 --- /dev/null +++ b/cmd/kube-controller-manager/app/patch_gc.go @@ -0,0 +1,40 @@ +package app + +import ( + gcconfig "k8s.io/kubernetes/pkg/controller/garbagecollector/config" + + "k8s.io/kubernetes/cmd/kube-controller-manager/app/config" +) + +func applyOpenShiftGCConfig(controllerManager *config.Config) error { + // TODO make this configurable or discoverable. This is going to prevent us from running the stock GC controller + // IF YOU ADD ANYTHING TO THIS LIST, MAKE SURE THAT YOU UPDATE THEIR STRATEGIES TO PREVENT GC FINALIZERS + controllerManager.ComponentConfig.GarbageCollectorController.GCIgnoredResources = append(controllerManager.ComponentConfig.GarbageCollectorController.GCIgnoredResources, + // explicitly disabled from GC for now - not enough value to track them + gcconfig.GroupResource{Group: "authorization.openshift.io", Resource: "rolebindingrestrictions"}, + gcconfig.GroupResource{Group: "network.openshift.io", Resource: "clusternetworks"}, + gcconfig.GroupResource{Group: "network.openshift.io", Resource: "egressnetworkpolicies"}, + gcconfig.GroupResource{Group: "network.openshift.io", Resource: "hostsubnets"}, + gcconfig.GroupResource{Group: "network.openshift.io", Resource: "netnamespaces"}, + gcconfig.GroupResource{Group: "oauth.openshift.io", Resource: "oauthclientauthorizations"}, + gcconfig.GroupResource{Group: "oauth.openshift.io", Resource: "oauthclients"}, + gcconfig.GroupResource{Group: "quota.openshift.io", Resource: "clusterresourcequotas"}, + gcconfig.GroupResource{Group: "user.openshift.io", Resource: "groups"}, + gcconfig.GroupResource{Group: "user.openshift.io", Resource: "identities"}, + gcconfig.GroupResource{Group: "user.openshift.io", Resource: "users"}, + gcconfig.GroupResource{Group: "image.openshift.io", Resource: "images"}, + + // virtual resource + gcconfig.GroupResource{Group: "project.openshift.io", Resource: "projects"}, + // virtual and unwatchable resource, surfaced via rbac.authorization.k8s.io objects + gcconfig.GroupResource{Group: "authorization.openshift.io", Resource: "clusterroles"}, + gcconfig.GroupResource{Group: "authorization.openshift.io", Resource: "clusterrolebindings"}, + gcconfig.GroupResource{Group: "authorization.openshift.io", Resource: "roles"}, + gcconfig.GroupResource{Group: "authorization.openshift.io", Resource: "rolebindings"}, + // these resources contain security information in their names, and we don't need to track them + gcconfig.GroupResource{Group: "oauth.openshift.io", Resource: "oauthaccesstokens"}, + gcconfig.GroupResource{Group: "oauth.openshift.io", Resource: "oauthauthorizetokens"}, + ) + + return nil +} diff --git a/cmd/kube-controller-manager/app/patch_informers_openshift.go b/cmd/kube-controller-manager/app/patch_informers_openshift.go new file mode 100644 index 0000000000000..4288a488b83f9 --- /dev/null +++ b/cmd/kube-controller-manager/app/patch_informers_openshift.go @@ -0,0 +1,285 @@ +package app + +import ( + "time" + + "k8s.io/klog/v2" + + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/client-go/informers" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" + + appclient "github.com/openshift/client-go/apps/clientset/versioned" + appinformer "github.com/openshift/client-go/apps/informers/externalversions" + authorizationclient "github.com/openshift/client-go/authorization/clientset/versioned" + authorizationinformer "github.com/openshift/client-go/authorization/informers/externalversions" + buildclient "github.com/openshift/client-go/build/clientset/versioned" + buildinformer "github.com/openshift/client-go/build/informers/externalversions" + imageclient "github.com/openshift/client-go/image/clientset/versioned" + imageinformer "github.com/openshift/client-go/image/informers/externalversions" + networkclient "github.com/openshift/client-go/network/clientset/versioned" + networkinformer "github.com/openshift/client-go/network/informers/externalversions" + oauthclient "github.com/openshift/client-go/oauth/clientset/versioned" + oauthinformer "github.com/openshift/client-go/oauth/informers/externalversions" + quotaclient "github.com/openshift/client-go/quota/clientset/versioned" + quotainformer "github.com/openshift/client-go/quota/informers/externalversions" + routeclient "github.com/openshift/client-go/route/clientset/versioned" + routeinformer "github.com/openshift/client-go/route/informers/externalversions" + securityclient "github.com/openshift/client-go/security/clientset/versioned" + securityinformer "github.com/openshift/client-go/security/informers/externalversions" + templateclient "github.com/openshift/client-go/template/clientset/versioned" + templateinformer "github.com/openshift/client-go/template/informers/externalversions" + userclient "github.com/openshift/client-go/user/clientset/versioned" + userinformer "github.com/openshift/client-go/user/informers/externalversions" +) + +type externalKubeInformersWithExtraGenerics struct { + informers.SharedInformerFactory + genericResourceInformer GenericResourceInformer +} + +func (i externalKubeInformersWithExtraGenerics) ForResource(resource schema.GroupVersionResource) (informers.GenericInformer, error) { + return i.genericResourceInformer.ForResource(resource) +} + +func (i externalKubeInformersWithExtraGenerics) Start(stopCh <-chan struct{}) { + i.SharedInformerFactory.Start(stopCh) + i.genericResourceInformer.Start(stopCh) +} + +type GenericResourceInformer interface { + ForResource(resource schema.GroupVersionResource) (informers.GenericInformer, error) + Start(stopCh <-chan struct{}) +} + +// genericResourceInformerFunc will handle a cast to a matching type +type genericResourceInformerFunc func(resource schema.GroupVersionResource) (informers.GenericInformer, error) + +func (fn genericResourceInformerFunc) ForResource(resource schema.GroupVersionResource) (informers.GenericInformer, error) { + return fn(resource) +} + +// this is a temporary condition until we rewrite enough of generation to auto-conform to the required interface and no longer need the internal version shim +func (fn genericResourceInformerFunc) Start(stopCh <-chan struct{}) {} + +type genericInformers struct { + // this is a temporary condition until we rewrite enough of generation to auto-conform to the required interface and no longer need the internal version shim + startFn func(stopCh <-chan struct{}) + generic []GenericResourceInformer +} + +func newGenericInformers(startFn func(stopCh <-chan struct{}), informers ...GenericResourceInformer) genericInformers { + return genericInformers{ + startFn: startFn, + generic: informers, + } +} + +func (i genericInformers) ForResource(resource schema.GroupVersionResource) (informers.GenericInformer, error) { + var firstErr error + for _, generic := range i.generic { + informer, err := generic.ForResource(resource) + if err == nil { + return informer, nil + } + if firstErr == nil { + firstErr = err + } + } + klog.V(4).Infof("Couldn't find informer for %v", resource) + return nil, firstErr +} + +func (i genericInformers) Start(stopCh <-chan struct{}) { + i.startFn(stopCh) + for _, generic := range i.generic { + generic.Start(stopCh) + } +} + +// informers is a convenient way for us to keep track of the informers, but +// is intentionally private. We don't want to leak it out further than this package. +// Everything else should say what it wants. +type combinedInformers struct { + externalKubeInformers informers.SharedInformerFactory + appInformers appinformer.SharedInformerFactory + authorizationInformers authorizationinformer.SharedInformerFactory + buildInformers buildinformer.SharedInformerFactory + imageInformers imageinformer.SharedInformerFactory + networkInformers networkinformer.SharedInformerFactory + oauthInformers oauthinformer.SharedInformerFactory + quotaInformers quotainformer.SharedInformerFactory + routeInformers routeinformer.SharedInformerFactory + securityInformers securityinformer.SharedInformerFactory + templateInformers templateinformer.SharedInformerFactory + userInformers userinformer.SharedInformerFactory +} + +func newInformerFactory(clientConfig *rest.Config) (informers.SharedInformerFactory, error) { + kubeClient, err := kubernetes.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + appClient, err := appclient.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + authorizationClient, err := authorizationclient.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + buildClient, err := buildclient.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + imageClient, err := imageclient.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + networkClient, err := networkclient.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + oauthClient, err := oauthclient.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + quotaClient, err := quotaclient.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + routerClient, err := routeclient.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + securityClient, err := securityclient.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + templateClient, err := templateclient.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + userClient, err := userclient.NewForConfig(clientConfig) + if err != nil { + return nil, err + } + + // TODO find a single place to create and start informers. During the 1.7 rebase this will come more naturally in a config object, + // before then we should try to eliminate our direct to storage access. It's making us do weird things. + const defaultInformerResyncPeriod = 10 * time.Minute + + ci := &combinedInformers{ + externalKubeInformers: informers.NewSharedInformerFactory(kubeClient, defaultInformerResyncPeriod), + appInformers: appinformer.NewSharedInformerFactory(appClient, defaultInformerResyncPeriod), + authorizationInformers: authorizationinformer.NewSharedInformerFactory(authorizationClient, defaultInformerResyncPeriod), + buildInformers: buildinformer.NewSharedInformerFactory(buildClient, defaultInformerResyncPeriod), + imageInformers: imageinformer.NewSharedInformerFactory(imageClient, defaultInformerResyncPeriod), + networkInformers: networkinformer.NewSharedInformerFactory(networkClient, defaultInformerResyncPeriod), + oauthInformers: oauthinformer.NewSharedInformerFactory(oauthClient, defaultInformerResyncPeriod), + quotaInformers: quotainformer.NewSharedInformerFactory(quotaClient, defaultInformerResyncPeriod), + routeInformers: routeinformer.NewSharedInformerFactory(routerClient, defaultInformerResyncPeriod), + securityInformers: securityinformer.NewSharedInformerFactory(securityClient, defaultInformerResyncPeriod), + templateInformers: templateinformer.NewSharedInformerFactory(templateClient, defaultInformerResyncPeriod), + userInformers: userinformer.NewSharedInformerFactory(userClient, defaultInformerResyncPeriod), + } + + return externalKubeInformersWithExtraGenerics{ + SharedInformerFactory: ci.GetExternalKubeInformers(), + genericResourceInformer: ci.ToGenericInformer(), + }, nil +} + +func (i *combinedInformers) GetExternalKubeInformers() informers.SharedInformerFactory { + return i.externalKubeInformers +} +func (i *combinedInformers) GetAppInformers() appinformer.SharedInformerFactory { + return i.appInformers +} +func (i *combinedInformers) GetAuthorizationInformers() authorizationinformer.SharedInformerFactory { + return i.authorizationInformers +} +func (i *combinedInformers) GetBuildInformers() buildinformer.SharedInformerFactory { + return i.buildInformers +} +func (i *combinedInformers) GetImageInformers() imageinformer.SharedInformerFactory { + return i.imageInformers +} +func (i *combinedInformers) GetNetworkInformers() networkinformer.SharedInformerFactory { + return i.networkInformers +} +func (i *combinedInformers) GetOauthInformers() oauthinformer.SharedInformerFactory { + return i.oauthInformers +} +func (i *combinedInformers) GetQuotaInformers() quotainformer.SharedInformerFactory { + return i.quotaInformers +} +func (i *combinedInformers) GetRouteInformers() routeinformer.SharedInformerFactory { + return i.routeInformers +} +func (i *combinedInformers) GetSecurityInformers() securityinformer.SharedInformerFactory { + return i.securityInformers +} +func (i *combinedInformers) GetTemplateInformers() templateinformer.SharedInformerFactory { + return i.templateInformers +} +func (i *combinedInformers) GetUserInformers() userinformer.SharedInformerFactory { + return i.userInformers +} + +// Start initializes all requested informers. +func (i *combinedInformers) Start(stopCh <-chan struct{}) { + i.externalKubeInformers.Start(stopCh) + i.appInformers.Start(stopCh) + i.authorizationInformers.Start(stopCh) + i.buildInformers.Start(stopCh) + i.imageInformers.Start(stopCh) + i.networkInformers.Start(stopCh) + i.oauthInformers.Start(stopCh) + i.quotaInformers.Start(stopCh) + i.routeInformers.Start(stopCh) + i.securityInformers.Start(stopCh) + i.templateInformers.Start(stopCh) + i.userInformers.Start(stopCh) +} + +func (i *combinedInformers) ToGenericInformer() GenericResourceInformer { + return newGenericInformers( + i.Start, + i.GetExternalKubeInformers(), + genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { + return i.GetAppInformers().ForResource(resource) + }), + genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { + return i.GetAuthorizationInformers().ForResource(resource) + }), + genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { + return i.GetBuildInformers().ForResource(resource) + }), + genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { + return i.GetImageInformers().ForResource(resource) + }), + genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { + return i.GetNetworkInformers().ForResource(resource) + }), + genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { + return i.GetOauthInformers().ForResource(resource) + }), + genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { + return i.GetQuotaInformers().ForResource(resource) + }), + genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { + return i.GetRouteInformers().ForResource(resource) + }), + genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { + return i.GetSecurityInformers().ForResource(resource) + }), + genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { + return i.GetTemplateInformers().ForResource(resource) + }), + genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { + return i.GetUserInformers().ForResource(resource) + }), + ) +} diff --git a/cmd/kube-controller-manager/app/patch_recycler.go b/cmd/kube-controller-manager/app/patch_recycler.go new file mode 100644 index 0000000000000..1660db5676c02 --- /dev/null +++ b/cmd/kube-controller-manager/app/patch_recycler.go @@ -0,0 +1,38 @@ +package app + +import ( + "context" + + v1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/kubernetes/pkg/controller" +) + +func createPVRecyclerSA(openshiftConfig string, clientBuilder controller.ControllerClientBuilder) error { + if len(openshiftConfig) == 0 { + return nil + } + + // the service account passed for the recyclable volume plugins needs to exist. We want to do this via the init function, but its a kube init function + // for the rebase, create that service account here + coreClient, err := clientBuilder.Client("pv-recycler-controller-creator") + if err != nil { + return err + } + + // Create the namespace if we can't verify it exists. + // Tolerate errors, since we don't know whether this component has namespace creation permissions. + _, _ = coreClient.CoreV1().Namespaces().Create(context.TODO(), &v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "openshift-infra"}}, metav1.CreateOptions{}) + + // Create the service account + _, err = coreClient.CoreV1().ServiceAccounts("openshift-infra").Create(context.TODO(), &v1.ServiceAccount{ObjectMeta: metav1.ObjectMeta{Namespace: "openshift-infra", Name: "pv-recycler-controller"}}, metav1.CreateOptions{}) + if apierrors.IsAlreadyExists(err) { + return nil + } + if err != nil { + return err + } + + return nil +} diff --git a/cmd/kube-controller-manager/app/patch_satoken.go b/cmd/kube-controller-manager/app/patch_satoken.go new file mode 100644 index 0000000000000..82f1bb9b3ff1a --- /dev/null +++ b/cmd/kube-controller-manager/app/patch_satoken.go @@ -0,0 +1,87 @@ +package app + +import ( + "fmt" + "io/ioutil" + "path/filepath" + + certutil "k8s.io/client-go/util/cert" + serviceaccountcontroller "k8s.io/kubernetes/pkg/controller/serviceaccount" +) + +var applyOpenShiftServiceServingCertCA = func(in serviceaccountcontroller.TokensControllerOptions) serviceaccountcontroller.TokensControllerOptions { + return in +} + +func applyOpenShiftServiceServingCertCAFunc(openshiftConfigBase string, openshiftConfig map[string]interface{}) error { + serviceServingCertCAFilename := getServiceServingCertCAFilename(openshiftConfig) + if len(serviceServingCertCAFilename) == 0 { + return nil + } + + resolvePath(&serviceServingCertCAFilename, openshiftConfigBase) + + serviceServingCA, err := ioutil.ReadFile(serviceServingCertCAFilename) + if err != nil { + return fmt.Errorf("error reading ca file for Service Serving Certificate Signer: %s: %v", serviceServingCertCAFilename, err) + } + if _, err := certutil.ParseCertsPEM(serviceServingCA); err != nil { + return fmt.Errorf("error parsing ca file for Service Serving Certificate Signer: %s: %v", serviceServingCertCAFilename, err) + } + + applyOpenShiftServiceServingCertCA = func(controllerOptions serviceaccountcontroller.TokensControllerOptions) serviceaccountcontroller.TokensControllerOptions { + if len(serviceServingCA) == 0 { + return controllerOptions + } + + // if we have a rootCA bundle add that too. The rootCA will be used when hitting the default master service, since those are signed + // using a different CA by default. The rootCA's key is more closely guarded than ours and if it is compromised, that power could + // be used to change the trusted signers for every pod anyway, so we're already effectively trusting it. + if len(controllerOptions.RootCA) > 0 { + controllerOptions.ServiceServingCA = append(controllerOptions.ServiceServingCA, controllerOptions.RootCA...) + controllerOptions.ServiceServingCA = append(controllerOptions.ServiceServingCA, []byte("\n")...) + } + controllerOptions.ServiceServingCA = append(controllerOptions.ServiceServingCA, serviceServingCA...) + + return controllerOptions + } + + return nil +} + +func getServiceServingCertCAFilename(config map[string]interface{}) string { + controllerConfig, ok := config["controllerConfig"] + if !ok { + sscConfig, ok := config["serviceServingCert"] + if !ok { + return "" + } + sscConfigMap := sscConfig.(map[string]interface{}) + return sscConfigMap["certFile"].(string) + } + controllerConfigMap := controllerConfig.(map[string]interface{}) + sscConfig, ok := controllerConfigMap["serviceServingCert"] + if !ok { + return "" + } + sscConfigMap := sscConfig.(map[string]interface{}) + signerConfig, ok := sscConfigMap["signer"] + if !ok { + return "" + } + signerConfigMap := signerConfig.(map[string]interface{}) + return signerConfigMap["certFile"].(string) +} + +// resolvePath updates the given refs to be absolute paths, relative to the given base directory +func resolvePath(ref *string, base string) error { + // Don't resolve empty paths + if len(*ref) > 0 { + // Don't resolve absolute paths + if !filepath.IsAbs(*ref) { + *ref = filepath.Join(base, *ref) + } + } + + return nil +} diff --git a/pkg/controller/daemon/daemon_controller.go b/pkg/controller/daemon/daemon_controller.go index a0fc135156ece..aad47534218e9 100644 --- a/pkg/controller/daemon/daemon_controller.go +++ b/pkg/controller/daemon/daemon_controller.go @@ -121,7 +121,13 @@ type DaemonSetsController struct { nodeLister corelisters.NodeLister // nodeStoreSynced returns true if the node store has been synced at least once. // Added as a member to the struct to allow injection for testing. - nodeStoreSynced cache.InformerSynced + nodeStoreSynced cache.InformerSynced + namespaceLister corelisters.NamespaceLister + namespaceStoreSynced cache.InformerSynced + openshiftDefaultNodeSelectorString string + openshiftDefaultNodeSelector labels.Selector + kubeDefaultNodeSelectorString string + kubeDefaultNodeSelector labels.Selector // DaemonSet keys that need to be synced. queue workqueue.RateLimitingInterface @@ -288,6 +294,11 @@ func (dsc *DaemonSetsController) Run(workers int, stopCh <-chan struct{}) { if !cache.WaitForNamedCacheSync("daemon sets", stopCh, dsc.podStoreSynced, dsc.nodeStoreSynced, dsc.historyStoreSynced, dsc.dsStoreSynced) { return } + if dsc.namespaceStoreSynced != nil { + if !cache.WaitForNamedCacheSync("daemon sets", stopCh, dsc.namespaceStoreSynced) { + return + } + } for i := 0; i < workers; i++ { go wait.Until(dsc.runWorker, time.Second, stopCh) @@ -1244,6 +1255,10 @@ func (dsc *DaemonSetsController) nodeShouldRunDaemonPod(node *v1.Node, ds *apps. return false, shouldContinueRunning, nil } + if matches, matchErr := dsc.namespaceNodeSelectorMatches(node, ds); !matches || matchErr != nil { + return false, false, matchErr + } + return true, true, nil } diff --git a/pkg/controller/daemon/patch_nodeselector.go b/pkg/controller/daemon/patch_nodeselector.go new file mode 100644 index 0000000000000..bad02d253b641 --- /dev/null +++ b/pkg/controller/daemon/patch_nodeselector.go @@ -0,0 +1,95 @@ +package daemon + +import ( + appsv1 "k8s.io/api/apps/v1" + "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + appsinformers "k8s.io/client-go/informers/apps/v1" + coreinformers "k8s.io/client-go/informers/core/v1" + clientset "k8s.io/client-go/kubernetes" + "k8s.io/client-go/util/flowcontrol" + + projectv1 "github.com/openshift/api/project/v1" +) + +func NewNodeSelectorAwareDaemonSetsController(openshiftDefaultNodeSelectorString, kubeDefaultNodeSelectorString string, namepaceInformer coreinformers.NamespaceInformer, daemonSetInformer appsinformers.DaemonSetInformer, historyInformer appsinformers.ControllerRevisionInformer, podInformer coreinformers.PodInformer, nodeInformer coreinformers.NodeInformer, kubeClient clientset.Interface, failedPodsBackoff *flowcontrol.Backoff) (*DaemonSetsController, error) { + controller, err := NewDaemonSetsController(daemonSetInformer, historyInformer, podInformer, nodeInformer, kubeClient, failedPodsBackoff) + if err != nil { + return controller, err + } + controller.namespaceLister = namepaceInformer.Lister() + controller.namespaceStoreSynced = namepaceInformer.Informer().HasSynced + controller.openshiftDefaultNodeSelectorString = openshiftDefaultNodeSelectorString + if len(controller.openshiftDefaultNodeSelectorString) > 0 { + controller.openshiftDefaultNodeSelector, err = labels.Parse(controller.openshiftDefaultNodeSelectorString) + if err != nil { + return nil, err + } + } + controller.kubeDefaultNodeSelectorString = kubeDefaultNodeSelectorString + if len(controller.kubeDefaultNodeSelectorString) > 0 { + controller.kubeDefaultNodeSelector, err = labels.Parse(controller.kubeDefaultNodeSelectorString) + if err != nil { + return nil, err + } + } + + return controller, nil +} + +func (dsc *DaemonSetsController) namespaceNodeSelectorMatches(node *v1.Node, ds *appsv1.DaemonSet) (bool, error) { + if dsc.namespaceLister == nil { + return true, nil + } + + // this is racy (different listers) and we get to choose which way to fail. This should requeue. + ns, err := dsc.namespaceLister.Get(ds.Namespace) + if apierrors.IsNotFound(err) { + return false, err + } + // if we had any error, default to the safe option of creating a pod for the node. + if err != nil { + utilruntime.HandleError(err) + return true, nil + } + + return dsc.nodeSelectorMatches(node, ns), nil +} + +func (dsc *DaemonSetsController) nodeSelectorMatches(node *v1.Node, ns *v1.Namespace) bool { + kubeNodeSelector, ok := ns.Annotations["scheduler.alpha.kubernetes.io/node-selector"] + if !ok { + originNodeSelector, ok := ns.Annotations[projectv1.ProjectNodeSelector] + switch { + case ok: + selector, err := labels.Parse(originNodeSelector) + if err == nil { + if !selector.Matches(labels.Set(node.Labels)) { + return false + } + } + case !ok && len(dsc.openshiftDefaultNodeSelectorString) > 0: + if !dsc.openshiftDefaultNodeSelector.Matches(labels.Set(node.Labels)) { + return false + } + } + } + + switch { + case ok: + selector, err := labels.Parse(kubeNodeSelector) + if err == nil { + if !selector.Matches(labels.Set(node.Labels)) { + return false + } + } + case !ok && len(dsc.kubeDefaultNodeSelectorString) > 0: + if !dsc.kubeDefaultNodeSelector.Matches(labels.Set(node.Labels)) { + return false + } + } + + return true +} diff --git a/pkg/controller/daemon/patch_nodeselector_test.go b/pkg/controller/daemon/patch_nodeselector_test.go new file mode 100644 index 0000000000000..6553fe694ea0a --- /dev/null +++ b/pkg/controller/daemon/patch_nodeselector_test.go @@ -0,0 +1,186 @@ +package daemon + +import ( + "testing" + + projectv1 "github.com/openshift/api/project/v1" + "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" +) + +func TestNamespaceNodeSelectorMatches(t *testing.T) { + nodes := []*v1.Node{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "first", + Labels: map[string]string{ + "alpha": "bravo", + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "second", + Labels: map[string]string{ + "charlie": "delta", + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "third", + Labels: map[string]string{ + "echo": "foxtrot", + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "fourth", + Labels: map[string]string{}, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "fifth", + Labels: map[string]string{ + "charlie": "delta", + "echo": "foxtrot", + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "sixth", + Labels: map[string]string{ + "alpha": "bravo", + "charlie": "delta", + "echo": "foxtrot", + }, + }, + }, + } + + pureDefault := &v1.Namespace{ + ObjectMeta: metav1.ObjectMeta{}, + } + all := &v1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + projectv1.ProjectNodeSelector: "", + }, + }, + } + projectSpecified := &v1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + projectv1.ProjectNodeSelector: "echo=foxtrot", + }, + }, + } + schedulerSpecified := &v1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + "scheduler.alpha.kubernetes.io/node-selector": "charlie=delta", + }, + }, + } + bothSpecified := &v1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + projectv1.ProjectNodeSelector: "echo=foxtrot", + "scheduler.alpha.kubernetes.io/node-selector": "charlie=delta", + }, + }, + } + + tests := []struct { + name string + defaultSelector string + namespace *v1.Namespace + expected map[string]bool + }{ + { + name: "pure-default", + defaultSelector: "alpha=bravo", + namespace: pureDefault, + expected: map[string]bool{ + "first": true, + "sixth": true, + }, + }, + { + name: "all", + defaultSelector: "alpha=bravo", + namespace: all, + expected: map[string]bool{ + "first": true, + "second": true, + "third": true, + "fourth": true, + "fifth": true, + "sixth": true, + }, + }, + { + name: "pure-default-without-default", + namespace: pureDefault, + expected: map[string]bool{ + "first": true, + "second": true, + "third": true, + "fourth": true, + "fifth": true, + "sixth": true, + }, + }, + { + name: "projectSpecified", + namespace: projectSpecified, + expected: map[string]bool{ + "third": true, + "fifth": true, + "sixth": true, + }, + }, + { + name: "schedulerSpecified", + namespace: schedulerSpecified, + expected: map[string]bool{ + "second": true, + "fifth": true, + "sixth": true, + }, + }, + { + name: "bothSpecified", + namespace: bothSpecified, + expected: map[string]bool{ + "second": true, + "fifth": true, + "sixth": true, + }, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + c := &DaemonSetsController{} + c.openshiftDefaultNodeSelectorString = test.defaultSelector + if len(c.openshiftDefaultNodeSelectorString) > 0 { + var err error + c.openshiftDefaultNodeSelector, err = labels.Parse(c.openshiftDefaultNodeSelectorString) + if err != nil { + t.Fatal(err) + } + } + + for _, node := range nodes { + if e, a := test.expected[node.Name], c.nodeSelectorMatches(node, test.namespace); e != a { + t.Errorf("%q expected %v, got %v", node.Name, e, a) + } + } + }) + } +} From 011c3fc6f4d080561bb5f53a3ca2c90be0c73ff2 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:55:56 +0100 Subject: [PATCH 43/96] UPSTREAM: : kube-controller-manager: exclude some origin resources from quota --- .../v1/install/patch_ignoredresources.go | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 pkg/quota/v1/install/patch_ignoredresources.go diff --git a/pkg/quota/v1/install/patch_ignoredresources.go b/pkg/quota/v1/install/patch_ignoredresources.go new file mode 100644 index 0000000000000..bf246aaccb1c7 --- /dev/null +++ b/pkg/quota/v1/install/patch_ignoredresources.go @@ -0,0 +1,33 @@ +package install + +import "k8s.io/apimachinery/pkg/runtime/schema" + +func init() { + newIgnoredResources := map[schema.GroupResource]struct{}{ + {Group: "extensions", Resource: "networkpolicies"}: {}, + {Group: "", Resource: "bindings"}: {}, + {Group: "", Resource: "componentstatuses"}: {}, + {Group: "", Resource: "events"}: {}, + {Group: "authentication.k8s.io", Resource: "tokenreviews"}: {}, + {Group: "authorization.k8s.io", Resource: "subjectaccessreviews"}: {}, + {Group: "authorization.k8s.io", Resource: "selfsubjectaccessreviews"}: {}, + {Group: "authorization.k8s.io", Resource: "localsubjectaccessreviews"}: {}, + {Group: "authorization.k8s.io", Resource: "selfsubjectrulesreviews"}: {}, + {Group: "authorization.openshift.io", Resource: "selfsubjectaccessreviews"}: {}, + {Group: "authorization.openshift.io", Resource: "subjectaccessreviews"}: {}, + {Group: "authorization.openshift.io", Resource: "localsubjectaccessreviews"}: {}, + {Group: "authorization.openshift.io", Resource: "resourceaccessreviews"}: {}, + {Group: "authorization.openshift.io", Resource: "localresourceaccessreviews"}: {}, + {Group: "authorization.openshift.io", Resource: "selfsubjectrulesreviews"}: {}, + {Group: "authorization.openshift.io", Resource: "subjectrulesreviews"}: {}, + {Group: "authorization.openshift.io", Resource: "roles"}: {}, + {Group: "authorization.openshift.io", Resource: "rolebindings"}: {}, + {Group: "authorization.openshift.io", Resource: "clusterroles"}: {}, + {Group: "authorization.openshift.io", Resource: "clusterrolebindings"}: {}, + {Group: "apiregistration.k8s.io", Resource: "apiservices"}: {}, + {Group: "apiextensions.k8s.io", Resource: "customresourcedefinitions"}: {}, + } + for k, v := range newIgnoredResources { + ignoredResources[k] = v + } +} From 37052ef16c83d95ca54d3b1618a1bac95680e04f Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:55:56 +0100 Subject: [PATCH 44/96] UPSTREAM: : autoscaling: hack in working scaling for legacy deploymentconfig --- pkg/controller/podautoscaler/horizontal.go | 1 + pkg/controller/podautoscaler/patch_dc.go | 20 +++++++++++++ staging/src/k8s.io/client-go/scale/client.go | 2 ++ .../src/k8s.io/client-go/scale/patch_dc.go | 28 +++++++++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 pkg/controller/podautoscaler/patch_dc.go create mode 100644 staging/src/k8s.io/client-go/scale/patch_dc.go diff --git a/pkg/controller/podautoscaler/horizontal.go b/pkg/controller/podautoscaler/horizontal.go index 950f04787f303..02a5519462690 100644 --- a/pkg/controller/podautoscaler/horizontal.go +++ b/pkg/controller/podautoscaler/horizontal.go @@ -564,6 +564,7 @@ func (a *HorizontalController) reconcileAutoscaler(hpav1Shared *autoscalingv1.Ho } mappings, err := a.mapper.RESTMappings(targetGK) + mappings, err = overrideMappingsForOapiDeploymentConfig(mappings, err, targetGK) if err != nil { a.eventRecorder.Event(hpa, v1.EventTypeWarning, "FailedGetScale", err.Error()) setCondition(hpa, autoscalingv2.AbleToScale, v1.ConditionFalse, "FailedGetScale", "the HPA controller was unable to get the target's current scale: %v", err) diff --git a/pkg/controller/podautoscaler/patch_dc.go b/pkg/controller/podautoscaler/patch_dc.go new file mode 100644 index 0000000000000..6c5ef50afc8f2 --- /dev/null +++ b/pkg/controller/podautoscaler/patch_dc.go @@ -0,0 +1,20 @@ +package podautoscaler + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + + apimeta "k8s.io/apimachinery/pkg/api/meta" +) + +func overrideMappingsForOapiDeploymentConfig(mappings []*apimeta.RESTMapping, err error, targetGK schema.GroupKind) ([]*apimeta.RESTMapping, error) { + if (targetGK == schema.GroupKind{Kind: "DeploymentConfig"}) { + err = nil + mappings = []*apimeta.RESTMapping{ + { + Resource: schema.GroupVersionResource{Group: "apps.openshift.io", Version: "v1", Resource: "deploymentconfigs"}, + GroupVersionKind: schema.GroupVersionKind{Group: "apps.openshift.io", Version: "v1", Kind: "DeploymentConfig"}, + }, + } + } + return mappings, err +} diff --git a/staging/src/k8s.io/client-go/scale/client.go b/staging/src/k8s.io/client-go/scale/client.go index 1306b37d9c017..8b9b6e175369c 100644 --- a/staging/src/k8s.io/client-go/scale/client.go +++ b/staging/src/k8s.io/client-go/scale/client.go @@ -107,6 +107,8 @@ func (c *scaleClient) pathAndVersionFor(resource schema.GroupResource) (string, return "", gvr, fmt.Errorf("unable to get full preferred group-version-resource for %s: %v", resource.String(), err) } + gvr = correctOapiDeploymentConfig(gvr) // TODO(directxman12): remove when /oapi is removed + groupVer := gvr.GroupVersion() return c.apiPathFor(groupVer), gvr, nil diff --git a/staging/src/k8s.io/client-go/scale/patch_dc.go b/staging/src/k8s.io/client-go/scale/patch_dc.go new file mode 100644 index 0000000000000..da2330c8ee7ca --- /dev/null +++ b/staging/src/k8s.io/client-go/scale/patch_dc.go @@ -0,0 +1,28 @@ +package scale + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var dcGVR = schema.GroupVersionResource{ + Group: "", + Version: "v1", + Resource: "deploymentconfigs", +} + +var groupedDCGVR = schema.GroupVersionResource{ + Group: "apps.openshift.io", + Version: "v1", + Resource: "deploymentconfigs", +} + +func correctOapiDeploymentConfig(gvr schema.GroupVersionResource) schema.GroupVersionResource { + // TODO(directxman12): this is a dirty, dirty hack because oapi just appears in discovery as "/v1", like + // the kube core API. We can remove it if/when we get rid of the legacy oapi group entirely. It makes me + // cry a bit inside, but such is life. + if gvr == dcGVR { + return groupedDCGVR + } + + return gvr +} From 781dbc7ad129d1d5d6dfa38a3948c8160e746b55 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:55:56 +0100 Subject: [PATCH 45/96] UPSTREAM: : kube-apiserver: add our immortal namespaces directly to admission plugin --- .../admission/plugin/namespace/lifecycle/admission.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go b/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go index 0fac569c4f1ba..be90e0eef5454 100644 --- a/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go +++ b/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go @@ -54,7 +54,16 @@ const ( // Register registers a plugin func Register(plugins *admission.Plugins) { plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return NewLifecycle(sets.NewString(metav1.NamespaceDefault, metav1.NamespaceSystem, metav1.NamespacePublic)) + return NewLifecycle(sets.NewString(metav1.NamespaceDefault, metav1.NamespaceSystem, metav1.NamespacePublic, + // user specified configuration that cannot be rebuilt + "openshift-config", + // cluster generated configuration that cannot be rebuilt (etcd encryption keys) + "openshift-config-managed", + // the CVO which is the root we use to rebuild all the rest + "openshift-cluster-version", + // contains a namespaced list of all nodes in the cluster (yeah, weird. they do it for multi-tenant management I think?) + "openshift-machine-api", + )) }) } From 0b23e5ab80c83ec1076b3d937da2376f4e3eddd4 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:55:56 +0100 Subject: [PATCH 46/96] UPSTREAM: : kube-apiserver: allow injection of kube-apiserver options Origin-commit: 33a71aff9bb4e204bf2e15af4cdfb5bd0525ce4e --- cmd/kube-apiserver/app/patch_openshift.go | 34 ++++++++++ cmd/kube-apiserver/app/server.go | 13 +++- pkg/kubeapiserver/options/admission.go | 2 + pkg/kubeapiserver/options/patch.go | 9 +++ pkg/kubeapiserver/options/plugins.go | 4 +- .../rbac/bootstrappolicy/patch_policy.go | 65 +++++++++++++++++++ .../authorizer/rbac/bootstrappolicy/policy.go | 6 +- 7 files changed, 127 insertions(+), 6 deletions(-) create mode 100644 cmd/kube-apiserver/app/patch_openshift.go create mode 100644 pkg/kubeapiserver/options/patch.go create mode 100644 plugin/pkg/auth/authorizer/rbac/bootstrappolicy/patch_policy.go diff --git a/cmd/kube-apiserver/app/patch_openshift.go b/cmd/kube-apiserver/app/patch_openshift.go new file mode 100644 index 0000000000000..acc7f3f3d3e4a --- /dev/null +++ b/cmd/kube-apiserver/app/patch_openshift.go @@ -0,0 +1,34 @@ +package app + +import ( + "k8s.io/apiserver/pkg/admission" + genericapiserver "k8s.io/apiserver/pkg/server" + clientgoinformers "k8s.io/client-go/informers" + "k8s.io/kubernetes/pkg/master" +) + +type KubeAPIServerConfigFunc func(config *genericapiserver.Config, versionedInformers clientgoinformers.SharedInformerFactory, pluginInitializers *[]admission.PluginInitializer) (genericapiserver.DelegationTarget, error) + +var OpenShiftKubeAPIServerConfigPatch KubeAPIServerConfigFunc = nil + +type KubeAPIServerServerFunc func(server *master.Master) error + +func PatchKubeAPIServerConfig(config *genericapiserver.Config, versionedInformers clientgoinformers.SharedInformerFactory, pluginInitializers *[]admission.PluginInitializer) (genericapiserver.DelegationTarget, error) { + if OpenShiftKubeAPIServerConfigPatch == nil { + return genericapiserver.NewEmptyDelegate(), nil + } + + return OpenShiftKubeAPIServerConfigPatch(config, versionedInformers, pluginInitializers) +} + +var OpenShiftKubeAPIServerServerPatch KubeAPIServerServerFunc = nil + +func PatchKubeAPIServerServer(server *master.Master) error { + if OpenShiftKubeAPIServerServerPatch == nil { + return nil + } + + return OpenShiftKubeAPIServerServerPatch(server) +} + +var StartingDelegate genericapiserver.DelegationTarget = genericapiserver.NewEmptyDelegate() diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index 1672cefd9273e..1489fa1ee7ae6 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -193,7 +193,7 @@ func CreateServerChain(completedOptions completedServerRunOptions, stopCh <-chan if err != nil { return nil, err } - apiExtensionsServer, err := createAPIExtensionsServer(apiExtensionsConfig, genericapiserver.NewEmptyDelegate()) + apiExtensionsServer, err := createAPIExtensionsServer(apiExtensionsConfig, StartingDelegate) if err != nil { return nil, err } @@ -203,6 +203,10 @@ func CreateServerChain(completedOptions completedServerRunOptions, stopCh <-chan return nil, err } + if err := PatchKubeAPIServerServer(kubeAPIServer); err != nil { + return nil, err + } + // aggregator comes last in the chain aggregatorConfig, err := createAggregatorConfig(*kubeAPIServerConfig.GenericConfig, completedOptions.ServerRunOptions, kubeAPIServerConfig.ExtraConfig.VersionedInformers, serviceResolver, proxyTransport, pluginInitializer) if err != nil { @@ -431,6 +435,7 @@ func CreateKubeAPIServerConfig( func buildGenericConfig( s *options.ServerRunOptions, proxyTransport *http.Transport, + ) ( genericConfig *genericapiserver.Config, versionedInformers clientgoinformers.SharedInformerFactory, @@ -540,6 +545,12 @@ func buildGenericConfig( return } + StartingDelegate, err = PatchKubeAPIServerConfig(genericConfig, versionedInformers, &pluginInitializers) + if err != nil { + lastErr = fmt.Errorf("failed to patch: %v", err) + return + } + err = s.Admission.ApplyTo( genericConfig, versionedInformers, diff --git a/pkg/kubeapiserver/options/admission.go b/pkg/kubeapiserver/options/admission.go index 82a37f6b88e88..1e61f942ad779 100644 --- a/pkg/kubeapiserver/options/admission.go +++ b/pkg/kubeapiserver/options/admission.go @@ -115,6 +115,8 @@ func (a *AdmissionOptions) ApplyTo( return nil } + a.GenericAdmission.Decorators = append(a.GenericAdmission.Decorators, Decorators...) + if a.PluginNames != nil { // pass PluginNames to generic AdmissionOptions a.GenericAdmission.EnablePlugins, a.GenericAdmission.DisablePlugins = computePluginNames(a.PluginNames, a.GenericAdmission.RecommendedPluginOrder) diff --git a/pkg/kubeapiserver/options/patch.go b/pkg/kubeapiserver/options/patch.go new file mode 100644 index 0000000000000..c6c8feba860a2 --- /dev/null +++ b/pkg/kubeapiserver/options/patch.go @@ -0,0 +1,9 @@ +package options + +import "k8s.io/apiserver/pkg/admission" + +var RegisterAllAdmissionPlugins = registerAllAdmissionPlugins + +var DefaultOffAdmissionPlugins = defaultOffAdmissionPlugins + +var Decorators = []admission.Decorator{} diff --git a/pkg/kubeapiserver/options/plugins.go b/pkg/kubeapiserver/options/plugins.go index f3c60636d62b9..8e973447fa9e2 100644 --- a/pkg/kubeapiserver/options/plugins.go +++ b/pkg/kubeapiserver/options/plugins.go @@ -107,7 +107,7 @@ var AllOrderedPlugins = []string{ // RegisterAllAdmissionPlugins registers all admission plugins and // sets the recommended plugins order. -func RegisterAllAdmissionPlugins(plugins *admission.Plugins) { +func registerAllAdmissionPlugins(plugins *admission.Plugins) { admit.Register(plugins) // DEPRECATED as no real meaning alwayspullimages.Register(plugins) antiaffinity.Register(plugins) @@ -143,7 +143,7 @@ func RegisterAllAdmissionPlugins(plugins *admission.Plugins) { } // DefaultOffAdmissionPlugins get admission plugins off by default for kube-apiserver. -func DefaultOffAdmissionPlugins() sets.String { +func defaultOffAdmissionPlugins() sets.String { defaultOnPlugins := sets.NewString( lifecycle.PluginName, //NamespaceLifecycle limitranger.PluginName, //LimitRanger diff --git a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/patch_policy.go b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/patch_policy.go new file mode 100644 index 0000000000000..8f91d44c9c83c --- /dev/null +++ b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/patch_policy.go @@ -0,0 +1,65 @@ +package bootstrappolicy + +import ( + rbacv1 "k8s.io/api/rbac/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rbacv1helpers "k8s.io/kubernetes/pkg/apis/rbac/v1" +) + +var ClusterRoles = clusterRoles + +func OpenshiftClusterRoles() []rbacv1.ClusterRole { + const ( + // These are valid under the "nodes" resource + NodeMetricsSubresource = "metrics" + NodeStatsSubresource = "stats" + NodeSpecSubresource = "spec" + NodeLogSubresource = "log" + ) + + roles := clusterRoles() + roles = append(roles, []rbacv1.ClusterRole{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "system:node-admin", + }, + Rules: []rbacv1.PolicyRule{ + // Allow read-only access to the API objects + rbacv1helpers.NewRule(Read...).Groups(legacyGroup).Resources("nodes").RuleOrDie(), + // Allow all API calls to the nodes + rbacv1helpers.NewRule("proxy").Groups(legacyGroup).Resources("nodes").RuleOrDie(), + rbacv1helpers.NewRule("*").Groups(legacyGroup).Resources("nodes/proxy", "nodes/"+NodeMetricsSubresource, "nodes/"+NodeSpecSubresource, "nodes/"+NodeStatsSubresource, "nodes/"+NodeLogSubresource).RuleOrDie(), + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "system:node-reader", + }, + Rules: []rbacv1.PolicyRule{ + // Allow read-only access to the API objects + rbacv1helpers.NewRule(Read...).Groups(legacyGroup).Resources("nodes").RuleOrDie(), + // Allow read access to node metrics + rbacv1helpers.NewRule("get").Groups(legacyGroup).Resources("nodes/"+NodeMetricsSubresource, "nodes/"+NodeSpecSubresource).RuleOrDie(), + // Allow read access to stats + // Node stats requests are submitted as POSTs. These creates are non-mutating + rbacv1helpers.NewRule("get", "create").Groups(legacyGroup).Resources("nodes/" + NodeStatsSubresource).RuleOrDie(), + // TODO: expose other things like /healthz on the node once we figure out non-resource URL policy across systems + }, + }, + }...) + + addClusterRoleLabel(roles) + return roles +} + +var ClusterRoleBindings = clusterRoleBindings + +func OpenshiftClusterRoleBindings() []rbacv1.ClusterRoleBinding { + bindings := clusterRoleBindings() + bindings = append(bindings, []rbacv1.ClusterRoleBinding{ + rbacv1helpers.NewClusterBinding("system:node-admin").Users("system:master", "system:kube-apiserver").Groups("system:node-admins").BindingOrDie(), + }...) + + addClusterRoleBindingLabel(bindings) + return bindings +} diff --git a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go index c3624119d2e75..8fce9fa434eaa 100644 --- a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go +++ b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go @@ -184,8 +184,8 @@ func NodeRules() []rbacv1.PolicyRule { return nodePolicyRules } -// ClusterRoles returns the cluster roles to bootstrap an API server with -func ClusterRoles() []rbacv1.ClusterRole { +// clusterRoles returns the cluster roles to bootstrap an API server with +func clusterRoles() []rbacv1.ClusterRole { roles := []rbacv1.ClusterRole{ { // a "root" role which can do absolutely anything @@ -560,7 +560,7 @@ func ClusterRoles() []rbacv1.ClusterRole { const systemNodeRoleName = "system:node" // ClusterRoleBindings return default rolebindings to the default roles -func ClusterRoleBindings() []rbacv1.ClusterRoleBinding { +func clusterRoleBindings() []rbacv1.ClusterRoleBinding { rolebindings := []rbacv1.ClusterRoleBinding{ rbacv1helpers.NewClusterBinding("cluster-admin").Groups(user.SystemPrivilegedGroup).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:discovery").Groups(user.AllAuthenticated).BindingOrDie(), From 2ebb8bea4304af03cca2916f29cff362731682ff Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:55:56 +0100 Subject: [PATCH 47/96] UPSTREAM: : kube-apiserver: priorize some CRD groups over others Origin-commit: 10c14ca7ae63428823e58790c16078d8094e4b95 --- .../crdregistration/crdregistration_controller.go | 4 ++-- pkg/master/controller/crdregistration/patch.go | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 pkg/master/controller/crdregistration/patch.go diff --git a/pkg/master/controller/crdregistration/crdregistration_controller.go b/pkg/master/controller/crdregistration/crdregistration_controller.go index 36a8f8c15da14..be4678760095a 100644 --- a/pkg/master/controller/crdregistration/crdregistration_controller.go +++ b/pkg/master/controller/crdregistration/crdregistration_controller.go @@ -221,8 +221,8 @@ func (c *crdRegistrationController) handleVersionUpdate(groupVersion schema.Grou Spec: v1.APIServiceSpec{ Group: groupVersion.Group, Version: groupVersion.Version, - GroupPriorityMinimum: 1000, // CRDs should have relatively low priority - VersionPriority: 100, // CRDs will be sorted by kube-like versions like any other APIService with the same VersionPriority + GroupPriorityMinimum: getGroupPriorityMin(groupVersion.Group), // CRDs should have relatively low priority + VersionPriority: 100, // CRDs will be sorted by kube-like versions like any other APIService with the same VersionPriority }, }) return nil diff --git a/pkg/master/controller/crdregistration/patch.go b/pkg/master/controller/crdregistration/patch.go new file mode 100644 index 0000000000000..ea989b6e1ed06 --- /dev/null +++ b/pkg/master/controller/crdregistration/patch.go @@ -0,0 +1,12 @@ +package crdregistration + +func getGroupPriorityMin(group string) int32 { + switch group { + case "config.openshift.io": + return 1100 + case "operator.openshift.io": + return 1080 + default: + return 1000 + } +} From 128d1683c9e5072a5176696d8e87168cbb9be993 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Thu, 29 Oct 2020 13:55:57 +0100 Subject: [PATCH 48/96] UPSTREAM: : Always test PDB's during service upgrade test The upstream can't enable this, but we need to do so in order to properly validate that cluster upgrades retain availability. Origin-commit: 917e8cb064643370573808e9aba8dbec5df456ff --- test/e2e/upgrades/services.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/upgrades/services.go b/test/e2e/upgrades/services.go index 95c3f77f30d56..1419450aad974 100644 --- a/test/e2e/upgrades/services.go +++ b/test/e2e/upgrades/services.go @@ -38,7 +38,7 @@ type ServiceUpgradeTest struct { // Name returns the tracking name of the test. func (ServiceUpgradeTest) Name() string { return "service-upgrade" } -func shouldTestPDBs() bool { return framework.ProviderIs("gce", "gke") } +func shouldTestPDBs() bool { return true } // Setup creates a service with a load balancer and makes sure it's reachable. func (t *ServiceUpgradeTest) Setup(f *framework.Framework) { From 878bf2f4db25fb1422189b8608478d9d3b7eb626 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:55:57 +0100 Subject: [PATCH 49/96] UPSTREAM: : kube-apiserver: allow rewiring --- cmd/kube-apiserver/app/options/options.go | 6 +++++ cmd/kube-apiserver/app/patch_openshift.go | 5 ++-- cmd/kube-apiserver/app/server.go | 33 +++++++++++++++++++++++ pkg/kubeapiserver/options/admission.go | 2 -- pkg/kubeapiserver/options/patch.go | 9 ------- pkg/kubeapiserver/options/plugins.go | 4 +-- 6 files changed, 43 insertions(+), 16 deletions(-) delete mode 100644 pkg/kubeapiserver/options/patch.go diff --git a/cmd/kube-apiserver/app/options/options.go b/cmd/kube-apiserver/app/options/options.go index 1434cc181b494..99b4c14582788 100644 --- a/cmd/kube-apiserver/app/options/options.go +++ b/cmd/kube-apiserver/app/options/options.go @@ -84,6 +84,8 @@ type ServerRunOptions struct { ServiceAccountTokenMaxExpiration time.Duration ShowHiddenMetricsForVersion string + + OpenShiftConfig string } // NewServerRunOptions creates a new ServerRunOptions object with default parameters @@ -249,5 +251,9 @@ func (s *ServerRunOptions) Flags() (fss cliflag.NamedFlagSets) { fs.StringVar(&s.ServiceAccountSigningKeyFile, "service-account-signing-key-file", s.ServiceAccountSigningKeyFile, ""+ "Path to the file that contains the current private key of the service account token issuer. The issuer will sign issued ID tokens with this private key. (Requires the 'TokenRequest' feature gate.)") + fs.StringVar(&s.OpenShiftConfig, "openshift-config", s.OpenShiftConfig, "config for openshift") + fs.MarkDeprecated("openshift-config", "to be removed") + fs.MarkHidden("openshift-config") + return fss } diff --git a/cmd/kube-apiserver/app/patch_openshift.go b/cmd/kube-apiserver/app/patch_openshift.go index acc7f3f3d3e4a..c1183c3e7f474 100644 --- a/cmd/kube-apiserver/app/patch_openshift.go +++ b/cmd/kube-apiserver/app/patch_openshift.go @@ -4,12 +4,11 @@ import ( "k8s.io/apiserver/pkg/admission" genericapiserver "k8s.io/apiserver/pkg/server" clientgoinformers "k8s.io/client-go/informers" + "k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver" "k8s.io/kubernetes/pkg/master" ) -type KubeAPIServerConfigFunc func(config *genericapiserver.Config, versionedInformers clientgoinformers.SharedInformerFactory, pluginInitializers *[]admission.PluginInitializer) (genericapiserver.DelegationTarget, error) - -var OpenShiftKubeAPIServerConfigPatch KubeAPIServerConfigFunc = nil +var OpenShiftKubeAPIServerConfigPatch openshiftkubeapiserver.KubeAPIServerConfigFunc = nil type KubeAPIServerServerFunc func(server *master.Master) error diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index 1489fa1ee7ae6..a3979b24c1410 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -30,6 +30,11 @@ import ( "strings" "time" + "k8s.io/kubernetes/openshift-kube-apiserver/configdefault" + "k8s.io/kubernetes/openshift-kube-apiserver/enablement" + "k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver" + + "github.com/go-openapi/spec" "github.com/spf13/cobra" extensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver" @@ -110,6 +115,31 @@ cluster's shared state through which all other components interact.`, verflag.PrintAndExitIfRequested() cliflag.PrintFlags(cmd.Flags()) + if len(s.OpenShiftConfig) > 0 { + enablement.ForceOpenShift() + openshiftConfig, err := enablement.GetOpenshiftConfig(s.OpenShiftConfig) + if err != nil { + klog.Fatal(err) + } + + // this forces a patch to be called + // TODO we're going to try to remove bits of the patching. + configPatchFn, serverPatchContext := openshiftkubeapiserver.NewOpenShiftKubeAPIServerConfigPatch(genericapiserver.NewEmptyDelegate(), openshiftConfig) + OpenShiftKubeAPIServerConfigPatch = configPatchFn + OpenShiftKubeAPIServerServerPatch = serverPatchContext.PatchServer + + args, err := openshiftkubeapiserver.ConfigToFlags(openshiftConfig) + if err != nil { + return err + } + // hopefully this resets the flags? + if err := cmd.ParseFlags(args); err != nil { + return err + } + + enablement.ForceGlobalInitializationForOpenShift(s) + } + // set default options completedOptions, err := Complete(s) if err != nil { @@ -551,6 +581,9 @@ func buildGenericConfig( return } + if enablement.IsOpenShift() { + configdefault.SetAdmissionDefaults(s, versionedInformers, clientgoExternalClient) + } err = s.Admission.ApplyTo( genericConfig, versionedInformers, diff --git a/pkg/kubeapiserver/options/admission.go b/pkg/kubeapiserver/options/admission.go index 1e61f942ad779..82a37f6b88e88 100644 --- a/pkg/kubeapiserver/options/admission.go +++ b/pkg/kubeapiserver/options/admission.go @@ -115,8 +115,6 @@ func (a *AdmissionOptions) ApplyTo( return nil } - a.GenericAdmission.Decorators = append(a.GenericAdmission.Decorators, Decorators...) - if a.PluginNames != nil { // pass PluginNames to generic AdmissionOptions a.GenericAdmission.EnablePlugins, a.GenericAdmission.DisablePlugins = computePluginNames(a.PluginNames, a.GenericAdmission.RecommendedPluginOrder) diff --git a/pkg/kubeapiserver/options/patch.go b/pkg/kubeapiserver/options/patch.go deleted file mode 100644 index c6c8feba860a2..0000000000000 --- a/pkg/kubeapiserver/options/patch.go +++ /dev/null @@ -1,9 +0,0 @@ -package options - -import "k8s.io/apiserver/pkg/admission" - -var RegisterAllAdmissionPlugins = registerAllAdmissionPlugins - -var DefaultOffAdmissionPlugins = defaultOffAdmissionPlugins - -var Decorators = []admission.Decorator{} diff --git a/pkg/kubeapiserver/options/plugins.go b/pkg/kubeapiserver/options/plugins.go index 8e973447fa9e2..f3c60636d62b9 100644 --- a/pkg/kubeapiserver/options/plugins.go +++ b/pkg/kubeapiserver/options/plugins.go @@ -107,7 +107,7 @@ var AllOrderedPlugins = []string{ // RegisterAllAdmissionPlugins registers all admission plugins and // sets the recommended plugins order. -func registerAllAdmissionPlugins(plugins *admission.Plugins) { +func RegisterAllAdmissionPlugins(plugins *admission.Plugins) { admit.Register(plugins) // DEPRECATED as no real meaning alwayspullimages.Register(plugins) antiaffinity.Register(plugins) @@ -143,7 +143,7 @@ func registerAllAdmissionPlugins(plugins *admission.Plugins) { } // DefaultOffAdmissionPlugins get admission plugins off by default for kube-apiserver. -func defaultOffAdmissionPlugins() sets.String { +func DefaultOffAdmissionPlugins() sets.String { defaultOnPlugins := sets.NewString( lifecycle.PluginName, //NamespaceLifecycle limitranger.PluginName, //LimitRanger From b45f23f3b5293856fef10efaba9a869768315363 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:55:57 +0100 Subject: [PATCH 50/96] UPSTREAM: : openshift-kube-apiserver: add kube-apiserver patches Origin-commit: 170dd7d25cca990fd7683eaf424d00bcd776c39c Origin-commit: 35ef039cb099dc609c576cf594aadd849212a00b UPSTREAM: : openshift-kube-apiserver: enabled conversion gen for admission configs --- cmd/kube-apiserver/app/patch_openshift.go | 19 +- cmd/kube-apiserver/app/server.go | 32 +- .../admissionenablement/admission.go | 15 + .../admissionenablement/admission_config.go | 30 ++ .../admission/admissionenablement/register.go | 111 ++++ .../admissionenablement/register_test.go | 54 ++ .../restrictusers/groupcache_test.go | 28 + .../restrictusers/intializers.go | 28 + .../restrictusers/restrictusers.go | 234 ++++++++ .../restrictusers/restrictusers_test.go | 404 ++++++++++++++ .../restrictusers/subjectchecker.go | 312 +++++++++++ .../restrictusers/subjectchecker_test.go | 349 ++++++++++++ .../restrictusers/usercache/groups.go | 55 ++ .../apis/clusterresourceoverride/doc.go | 4 + .../apis/clusterresourceoverride/name.go | 4 + .../apis/clusterresourceoverride/register.go | 23 + .../apis/clusterresourceoverride/types.go | 24 + .../apis/clusterresourceoverride/v1/doc.go | 5 + .../clusterresourceoverride/v1/register.go | 27 + .../clusterresourceoverride/v1/swagger_doc.go | 17 + .../apis/clusterresourceoverride/v1/types.go | 24 + .../v1/zz_generated.deepcopy.go | 34 ++ .../validation/validation.go | 27 + .../zz_generated.deepcopy.go | 34 ++ .../autoscaling/apis/runonceduration/doc.go | 4 + .../apis/runonceduration/register.go | 34 ++ .../autoscaling/apis/runonceduration/types.go | 26 + .../apis/runonceduration/v1/conversion.go | 26 + .../apis/runonceduration/v1/doc.go | 5 + .../apis/runonceduration/v1/register.go | 29 + .../apis/runonceduration/v1/swagger_doc.go | 15 + .../apis/runonceduration/v1/types.go | 22 + .../v1/zz_generated.deepcopy.go | 39 ++ .../runonceduration/validation/validation.go | 18 + .../validation/validation_test.go | 29 + .../runonceduration/zz_generated.deepcopy.go | 39 ++ .../clusterresourceoverride/admission.go | 348 ++++++++++++ .../clusterresourceoverride/admission_test.go | 507 ++++++++++++++++++ .../clusterresourceoverride/doc.go | 8 + .../autoscaling/runonceduration/admission.go | 148 +++++ .../runonceduration/admission_test.go | 215 ++++++++ .../autoscaling/runonceduration/doc.go | 22 + .../apiserver/validate_apiserver.go | 149 +++++ .../apiserver/validate_apiserver_test.go | 117 ++++ .../apiserver/validation_wrapper.go | 76 +++ .../customresourcevalidation/attributes.go | 53 ++ .../authentication/validate_authentication.go | 133 +++++ .../validate_authentication_test.go | 189 +++++++ .../clusterresourcequota/validate_crq.go | 83 +++ .../validation/validation.go | 68 +++ .../validation/validation_test.go | 173 ++++++ .../deny_delete_cluster_config_resource.go | 54 ++ ...eny_delete_cluster_config_resource_test.go | 73 +++ .../console/validate_console.go | 118 ++++ .../cr_validation_registration.go | 60 +++ .../customresourcevalidator.go | 98 ++++ .../customresourcevalidator_test.go | 278 ++++++++++ .../features/validate_features.go | 129 +++++ .../features/validate_features_test.go | 127 +++++ .../customresourcevalidation/helpers.go | 40 ++ .../image/validate_image.go | 94 ++++ .../customresourcevalidation/oauth/helpers.go | 33 ++ .../oauth/validate_github.go | 69 +++ .../oauth/validate_github_test.go | 249 +++++++++ .../oauth/validate_gitlab.go | 26 + .../oauth/validate_gitlab_test.go | 104 ++++ .../oauth/validate_google.go | 23 + .../oauth/validate_google_test.go | 90 ++++ .../oauth/validate_idp.go | 215 ++++++++ .../oauth/validate_idp_test.go | 421 +++++++++++++++ .../oauth/validate_keystone.go | 23 + .../oauth/validate_keystone_test.go | 96 ++++ .../oauth/validate_ldap.go | 66 +++ .../oauth/validate_ldap_test.go | 101 ++++ .../oauth/validate_oauth.go | 110 ++++ .../oauth/validate_openid.go | 54 ++ .../oauth/validate_openid_test.go | 125 +++++ .../oauth/validate_requestheader.go | 85 +++ .../oauth/validate_requestheader_test.go | 193 +++++++ .../project/validate_project.go | 111 ++++ .../rolebindingrestriction/validate_rbr.go | 83 +++ .../validation/validation.go | 113 ++++ .../scheduler/validate_scheduler.go | 106 ++++ .../defaulting_scc.go | 93 ++++ .../defaulting_scc_test.go | 274 ++++++++++ .../securitycontextconstraints/defaults.go | 100 ++++ .../validate_scc.go | 79 +++ .../validation/validation.go | 275 ++++++++++ .../validation/validation_test.go | 343 ++++++++++++ .../namespaceconditions/decorator.go | 60 +++ .../namespaceconditions/labelcondition.go | 125 +++++ .../labelcondition_test.go | 97 ++++ .../namespaceconditions/namecondition.go | 60 +++ .../network/apis/externalipranger/doc.go | 4 + .../network/apis/externalipranger/register.go | 20 + .../network/apis/externalipranger/types.go | 20 + .../network/apis/externalipranger/v1/doc.go | 5 + .../apis/externalipranger/v1/register.go | 24 + .../network/apis/externalipranger/v1/types.go | 20 + .../v1/zz_generated.deepcopy.go | 55 ++ .../externalipranger/zz_generated.deepcopy.go | 39 ++ .../network/apis/restrictedendpoints/doc.go | 4 + .../apis/restrictedendpoints/register.go | 20 + .../network/apis/restrictedendpoints/types.go | 15 + .../apis/restrictedendpoints/v1/doc.go | 5 + .../apis/restrictedendpoints/v1/register.go | 24 + .../apis/restrictedendpoints/v1/types.go | 15 + .../v1/zz_generated.deepcopy.go | 39 ++ .../zz_generated.deepcopy.go | 39 ++ .../externalipranger/externalip_admission.go | 208 +++++++ .../externalip_admission_test.go | 321 +++++++++++ .../restrictedendpoints/endpoint_admission.go | 191 +++++++ .../route/apis/ingressadmission/doc.go | 4 + .../route/apis/ingressadmission/register.go | 33 ++ .../route/apis/ingressadmission/types.go | 22 + .../apis/ingressadmission/v1/defaults_test.go | 59 ++ .../route/apis/ingressadmission/v1/doc.go | 5 + .../apis/ingressadmission/v1/register.go | 27 + .../apis/ingressadmission/v1/swagger_doc.go | 15 + .../route/apis/ingressadmission/v1/types.go | 22 + .../v1/zz_generated.deepcopy.go | 34 ++ .../ingressadmission/zz_generated.deepcopy.go | 34 ++ .../admission/route/ingress_admission.go | 162 ++++++ .../admission/route/ingress_admission_test.go | 171 ++++++ .../scheduler/apis/podnodeconstraints/doc.go | 4 + .../apis/podnodeconstraints/register.go | 33 ++ .../apis/podnodeconstraints/types.go | 19 + .../apis/podnodeconstraints/v1/defaults.go | 19 + .../podnodeconstraints/v1/defaults_test.go | 59 ++ .../apis/podnodeconstraints/v1/doc.go | 5 + .../apis/podnodeconstraints/v1/register.go | 28 + .../apis/podnodeconstraints/v1/swagger_doc.go | 15 + .../apis/podnodeconstraints/v1/types.go | 20 + .../v1/zz_generated.deepcopy.go | 39 ++ .../zz_generated.deepcopy.go | 39 ++ .../admission/scheduler/nodeenv/admission.go | 148 +++++ .../scheduler/nodeenv/admission_test.go | 160 ++++++ .../scheduler/nodeenv/intializers.go | 28 + .../nodeenv/labelselector/labelselector.go | 359 +++++++++++++ .../labelselector/labelselector_test.go | 181 +++++++ .../scheduler/podnodeconstraints/admission.go | 205 +++++++ .../podnodeconstraints/admission_test.go | 283 ++++++++++ .../scheduler/podnodeconstraints/doc.go | 44 ++ .../oauth/bootstrapauthenticator.go | 102 ++++ .../oauth/expirationvalidator.go | 31 ++ .../oauth/expirationvalidator_test.go | 72 +++ .../authentication/oauth/interfaces.go | 41 ++ .../oauth/rankedset/rankedset.go | 162 ++++++ .../oauth/rankedset/rankedset_test.go | 273 ++++++++++ .../authentication/oauth/timeoutvalidator.go | 233 ++++++++ .../oauth/tokenauthenticator.go | 84 +++ .../oauth/tokenauthenticator_test.go | 354 ++++++++++++ .../authentication/oauth/uidvalidator.go | 21 + .../authorization/browsersafe/authorizer.go | 107 ++++ .../browsersafe/authorizer_test.go | 80 +++ .../scopeauthorizer/authorizer.go | 49 ++ .../scopeauthorizer/authorizer_test.go | 150 ++++++ .../configdefault/kubecontrolplane_default.go | 115 ++++ .../configdefault/kubecontrolplane_refs.go | 122 +++++ .../enablement/enablement.go | 71 +++ .../enablement/intialization.go | 81 +++ .../openshiftkubeapiserver/flags.go | 222 ++++++++ .../openshiftkubeapiserver/flags_test.go | 26 + .../paramtoken/paramtoken.go | 45 ++ .../openshiftkubeapiserver/patch.go | 157 ++++++ .../patch_authorizer.go | 52 ++ .../patch_handlerchain.go | 97 ++++ .../openshiftkubeapiserver/wellknown_oauth.go | 57 ++ pkg/kubeapiserver/authenticator/config.go | 7 + .../authenticator/patch_authenticator.go | 86 +++ 170 files changed, 15752 insertions(+), 31 deletions(-) create mode 100644 openshift-kube-apiserver/admission/admissionenablement/admission.go create mode 100644 openshift-kube-apiserver/admission/admissionenablement/admission_config.go create mode 100644 openshift-kube-apiserver/admission/admissionenablement/register.go create mode 100644 openshift-kube-apiserver/admission/admissionenablement/register_test.go create mode 100644 openshift-kube-apiserver/admission/authorization/restrictusers/groupcache_test.go create mode 100644 openshift-kube-apiserver/admission/authorization/restrictusers/intializers.go create mode 100644 openshift-kube-apiserver/admission/authorization/restrictusers/restrictusers.go create mode 100644 openshift-kube-apiserver/admission/authorization/restrictusers/restrictusers_test.go create mode 100644 openshift-kube-apiserver/admission/authorization/restrictusers/subjectchecker.go create mode 100644 openshift-kube-apiserver/admission/authorization/restrictusers/subjectchecker_test.go create mode 100644 openshift-kube-apiserver/admission/authorization/restrictusers/usercache/groups.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/doc.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/name.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/register.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/types.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/doc.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/register.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/swagger_doc.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/types.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.deepcopy.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/validation/validation.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/zz_generated.deepcopy.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/doc.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/register.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/types.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/conversion.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/doc.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/register.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/swagger_doc.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/types.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.deepcopy.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation/validation.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation/validation_test.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/zz_generated.deepcopy.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/admission.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/admission_test.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/doc.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/runonceduration/admission.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/runonceduration/admission_test.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/runonceduration/doc.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validate_apiserver.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validate_apiserver_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validation_wrapper.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/attributes.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/authentication/validate_authentication.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/authentication/validate_authentication_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validate_crq.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation/validation.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation/validation_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/config/deny_delete_cluster_config_resource.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/config/deny_delete_cluster_config_resource_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/console/validate_console.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration/cr_validation_registration.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidator.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidator_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/features/validate_features.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/features/validate_features_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/helpers.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/image/validate_image.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/helpers.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_github.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_github_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_gitlab.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_gitlab_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_google.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_google_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_keystone.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_keystone_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_ldap.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_ldap_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_oauth.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_openid.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_openid_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_requestheader.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_requestheader_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/project/validate_project.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validate_rbr.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validation/validation.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/scheduler/validate_scheduler.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaulting_scc.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaulting_scc_test.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaults.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validate_scc.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation/validation.go create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation/validation_test.go create mode 100644 openshift-kube-apiserver/admission/namespaceconditions/decorator.go create mode 100644 openshift-kube-apiserver/admission/namespaceconditions/labelcondition.go create mode 100644 openshift-kube-apiserver/admission/namespaceconditions/labelcondition_test.go create mode 100644 openshift-kube-apiserver/admission/namespaceconditions/namecondition.go create mode 100644 openshift-kube-apiserver/admission/network/apis/externalipranger/doc.go create mode 100644 openshift-kube-apiserver/admission/network/apis/externalipranger/register.go create mode 100644 openshift-kube-apiserver/admission/network/apis/externalipranger/types.go create mode 100644 openshift-kube-apiserver/admission/network/apis/externalipranger/v1/doc.go create mode 100644 openshift-kube-apiserver/admission/network/apis/externalipranger/v1/register.go create mode 100644 openshift-kube-apiserver/admission/network/apis/externalipranger/v1/types.go create mode 100644 openshift-kube-apiserver/admission/network/apis/externalipranger/v1/zz_generated.deepcopy.go create mode 100644 openshift-kube-apiserver/admission/network/apis/externalipranger/zz_generated.deepcopy.go create mode 100644 openshift-kube-apiserver/admission/network/apis/restrictedendpoints/doc.go create mode 100644 openshift-kube-apiserver/admission/network/apis/restrictedendpoints/register.go create mode 100644 openshift-kube-apiserver/admission/network/apis/restrictedendpoints/types.go create mode 100644 openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/doc.go create mode 100644 openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/register.go create mode 100644 openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/types.go create mode 100644 openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.deepcopy.go create mode 100644 openshift-kube-apiserver/admission/network/apis/restrictedendpoints/zz_generated.deepcopy.go create mode 100644 openshift-kube-apiserver/admission/network/externalipranger/externalip_admission.go create mode 100644 openshift-kube-apiserver/admission/network/externalipranger/externalip_admission_test.go create mode 100644 openshift-kube-apiserver/admission/network/restrictedendpoints/endpoint_admission.go create mode 100644 openshift-kube-apiserver/admission/route/apis/ingressadmission/doc.go create mode 100644 openshift-kube-apiserver/admission/route/apis/ingressadmission/register.go create mode 100644 openshift-kube-apiserver/admission/route/apis/ingressadmission/types.go create mode 100644 openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/defaults_test.go create mode 100644 openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/doc.go create mode 100644 openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/register.go create mode 100644 openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/swagger_doc.go create mode 100644 openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/types.go create mode 100644 openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.deepcopy.go create mode 100644 openshift-kube-apiserver/admission/route/apis/ingressadmission/zz_generated.deepcopy.go create mode 100644 openshift-kube-apiserver/admission/route/ingress_admission.go create mode 100644 openshift-kube-apiserver/admission/route/ingress_admission_test.go create mode 100644 openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/doc.go create mode 100644 openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/register.go create mode 100644 openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/types.go create mode 100644 openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/defaults.go create mode 100644 openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/defaults_test.go create mode 100644 openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/doc.go create mode 100644 openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/register.go create mode 100644 openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/swagger_doc.go create mode 100644 openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/types.go create mode 100644 openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.deepcopy.go create mode 100644 openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/zz_generated.deepcopy.go create mode 100644 openshift-kube-apiserver/admission/scheduler/nodeenv/admission.go create mode 100644 openshift-kube-apiserver/admission/scheduler/nodeenv/admission_test.go create mode 100644 openshift-kube-apiserver/admission/scheduler/nodeenv/intializers.go create mode 100644 openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector/labelselector.go create mode 100644 openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector/labelselector_test.go create mode 100644 openshift-kube-apiserver/admission/scheduler/podnodeconstraints/admission.go create mode 100644 openshift-kube-apiserver/admission/scheduler/podnodeconstraints/admission_test.go create mode 100644 openshift-kube-apiserver/admission/scheduler/podnodeconstraints/doc.go create mode 100644 openshift-kube-apiserver/authentication/oauth/bootstrapauthenticator.go create mode 100644 openshift-kube-apiserver/authentication/oauth/expirationvalidator.go create mode 100644 openshift-kube-apiserver/authentication/oauth/expirationvalidator_test.go create mode 100644 openshift-kube-apiserver/authentication/oauth/interfaces.go create mode 100644 openshift-kube-apiserver/authentication/oauth/rankedset/rankedset.go create mode 100644 openshift-kube-apiserver/authentication/oauth/rankedset/rankedset_test.go create mode 100644 openshift-kube-apiserver/authentication/oauth/timeoutvalidator.go create mode 100644 openshift-kube-apiserver/authentication/oauth/tokenauthenticator.go create mode 100644 openshift-kube-apiserver/authentication/oauth/tokenauthenticator_test.go create mode 100644 openshift-kube-apiserver/authentication/oauth/uidvalidator.go create mode 100644 openshift-kube-apiserver/authorization/browsersafe/authorizer.go create mode 100644 openshift-kube-apiserver/authorization/browsersafe/authorizer_test.go create mode 100644 openshift-kube-apiserver/authorization/scopeauthorizer/authorizer.go create mode 100644 openshift-kube-apiserver/authorization/scopeauthorizer/authorizer_test.go create mode 100644 openshift-kube-apiserver/configdefault/kubecontrolplane_default.go create mode 100644 openshift-kube-apiserver/configdefault/kubecontrolplane_refs.go create mode 100644 openshift-kube-apiserver/enablement/enablement.go create mode 100644 openshift-kube-apiserver/enablement/intialization.go create mode 100644 openshift-kube-apiserver/openshiftkubeapiserver/flags.go create mode 100644 openshift-kube-apiserver/openshiftkubeapiserver/flags_test.go create mode 100644 openshift-kube-apiserver/openshiftkubeapiserver/paramtoken/paramtoken.go create mode 100644 openshift-kube-apiserver/openshiftkubeapiserver/patch.go create mode 100644 openshift-kube-apiserver/openshiftkubeapiserver/patch_authorizer.go create mode 100644 openshift-kube-apiserver/openshiftkubeapiserver/patch_handlerchain.go create mode 100644 openshift-kube-apiserver/openshiftkubeapiserver/wellknown_oauth.go create mode 100644 pkg/kubeapiserver/authenticator/patch_authenticator.go diff --git a/cmd/kube-apiserver/app/patch_openshift.go b/cmd/kube-apiserver/app/patch_openshift.go index c1183c3e7f474..8744ae69c4731 100644 --- a/cmd/kube-apiserver/app/patch_openshift.go +++ b/cmd/kube-apiserver/app/patch_openshift.go @@ -5,29 +5,14 @@ import ( genericapiserver "k8s.io/apiserver/pkg/server" clientgoinformers "k8s.io/client-go/informers" "k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver" - "k8s.io/kubernetes/pkg/master" ) var OpenShiftKubeAPIServerConfigPatch openshiftkubeapiserver.KubeAPIServerConfigFunc = nil -type KubeAPIServerServerFunc func(server *master.Master) error - -func PatchKubeAPIServerConfig(config *genericapiserver.Config, versionedInformers clientgoinformers.SharedInformerFactory, pluginInitializers *[]admission.PluginInitializer) (genericapiserver.DelegationTarget, error) { +func PatchKubeAPIServerConfig(config *genericapiserver.Config, versionedInformers clientgoinformers.SharedInformerFactory, pluginInitializers *[]admission.PluginInitializer) error { if OpenShiftKubeAPIServerConfigPatch == nil { - return genericapiserver.NewEmptyDelegate(), nil - } - - return OpenShiftKubeAPIServerConfigPatch(config, versionedInformers, pluginInitializers) -} - -var OpenShiftKubeAPIServerServerPatch KubeAPIServerServerFunc = nil - -func PatchKubeAPIServerServer(server *master.Master) error { - if OpenShiftKubeAPIServerServerPatch == nil { return nil } - return OpenShiftKubeAPIServerServerPatch(server) + return OpenShiftKubeAPIServerConfigPatch(config, versionedInformers, pluginInitializers) } - -var StartingDelegate genericapiserver.DelegationTarget = genericapiserver.NewEmptyDelegate() diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index a3979b24c1410..c70ce145a397f 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -30,7 +30,7 @@ import ( "strings" "time" - "k8s.io/kubernetes/openshift-kube-apiserver/configdefault" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/admissionenablement" "k8s.io/kubernetes/openshift-kube-apiserver/enablement" "k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver" @@ -113,31 +113,38 @@ cluster's shared state through which all other components interact.`, }, RunE: func(cmd *cobra.Command, args []string) error { verflag.PrintAndExitIfRequested() - cliflag.PrintFlags(cmd.Flags()) if len(s.OpenShiftConfig) > 0 { - enablement.ForceOpenShift() openshiftConfig, err := enablement.GetOpenshiftConfig(s.OpenShiftConfig) if err != nil { klog.Fatal(err) } + enablement.ForceOpenShift(openshiftConfig) // this forces a patch to be called // TODO we're going to try to remove bits of the patching. - configPatchFn, serverPatchContext := openshiftkubeapiserver.NewOpenShiftKubeAPIServerConfigPatch(genericapiserver.NewEmptyDelegate(), openshiftConfig) + configPatchFn := openshiftkubeapiserver.NewOpenShiftKubeAPIServerConfigPatch(openshiftConfig) OpenShiftKubeAPIServerConfigPatch = configPatchFn - OpenShiftKubeAPIServerServerPatch = serverPatchContext.PatchServer args, err := openshiftkubeapiserver.ConfigToFlags(openshiftConfig) if err != nil { return err } + // hopefully this resets the flags? if err := cmd.ParseFlags(args); err != nil { return err } - enablement.ForceGlobalInitializationForOpenShift(s) + // print merged flags (merged from OpenshiftConfig) + cliflag.PrintFlags(cmd.Flags()) + + enablement.ForceGlobalInitializationForOpenShift() + admissionenablement.InstallOpenShiftAdmissionPlugins(s) + + } else { + // print default flags + cliflag.PrintFlags(cmd.Flags()) } // set default options @@ -223,7 +230,7 @@ func CreateServerChain(completedOptions completedServerRunOptions, stopCh <-chan if err != nil { return nil, err } - apiExtensionsServer, err := createAPIExtensionsServer(apiExtensionsConfig, StartingDelegate) + apiExtensionsServer, err := createAPIExtensionsServer(apiExtensionsConfig, genericapiserver.NewEmptyDelegate()) if err != nil { return nil, err } @@ -233,10 +240,6 @@ func CreateServerChain(completedOptions completedServerRunOptions, stopCh <-chan return nil, err } - if err := PatchKubeAPIServerServer(kubeAPIServer); err != nil { - return nil, err - } - // aggregator comes last in the chain aggregatorConfig, err := createAggregatorConfig(*kubeAPIServerConfig.GenericConfig, completedOptions.ServerRunOptions, kubeAPIServerConfig.ExtraConfig.VersionedInformers, serviceResolver, proxyTransport, pluginInitializer) if err != nil { @@ -536,6 +539,8 @@ func buildGenericConfig( // on a fast local network genericConfig.LoopbackClientConfig.DisableCompression = true + enablement.SetLoopbackClientConfig(genericConfig.LoopbackClientConfig) + kubeClientConfig := genericConfig.LoopbackClientConfig clientgoExternalClient, err := clientgoclientset.NewForConfig(kubeClientConfig) if err != nil { @@ -575,14 +580,13 @@ func buildGenericConfig( return } - StartingDelegate, err = PatchKubeAPIServerConfig(genericConfig, versionedInformers, &pluginInitializers) - if err != nil { + if err := PatchKubeAPIServerConfig(genericConfig, versionedInformers, &pluginInitializers); err != nil { lastErr = fmt.Errorf("failed to patch: %v", err) return } if enablement.IsOpenShift() { - configdefault.SetAdmissionDefaults(s, versionedInformers, clientgoExternalClient) + admissionenablement.SetAdmissionDefaults(s, versionedInformers, clientgoExternalClient) } err = s.Admission.ApplyTo( genericConfig, diff --git a/openshift-kube-apiserver/admission/admissionenablement/admission.go b/openshift-kube-apiserver/admission/admissionenablement/admission.go new file mode 100644 index 0000000000000..a701f6d285cae --- /dev/null +++ b/openshift-kube-apiserver/admission/admissionenablement/admission.go @@ -0,0 +1,15 @@ +package admissionenablement + +import ( + "k8s.io/kubernetes/cmd/kube-apiserver/app/options" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration" +) + +func InstallOpenShiftAdmissionPlugins(o *options.ServerRunOptions) { + existingAdmissionOrder := o.Admission.GenericAdmission.RecommendedPluginOrder + o.Admission.GenericAdmission.RecommendedPluginOrder = NewOrderedKubeAdmissionPlugins(existingAdmissionOrder) + RegisterOpenshiftKubeAdmissionPlugins(o.Admission.GenericAdmission.Plugins) + customresourcevalidationregistration.RegisterCustomResourceValidation(o.Admission.GenericAdmission.Plugins) + existingDefaultOff := o.Admission.GenericAdmission.DefaultOffPlugins + o.Admission.GenericAdmission.DefaultOffPlugins = NewDefaultOffPluginsFunc(existingDefaultOff)() +} diff --git a/openshift-kube-apiserver/admission/admissionenablement/admission_config.go b/openshift-kube-apiserver/admission/admissionenablement/admission_config.go new file mode 100644 index 0000000000000..e99d69047fd80 --- /dev/null +++ b/openshift-kube-apiserver/admission/admissionenablement/admission_config.go @@ -0,0 +1,30 @@ +package admissionenablement + +import ( + "time" + + "github.com/openshift/library-go/pkg/apiserver/admission/admissiontimeout" + "k8s.io/apiserver/pkg/admission" + "k8s.io/client-go/informers" + "k8s.io/client-go/kubernetes" + "k8s.io/kubernetes/cmd/kube-apiserver/app/options" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/namespaceconditions" +) + +func SetAdmissionDefaults(o *options.ServerRunOptions, informers informers.SharedInformerFactory, kubeClient kubernetes.Interface) { + // set up the decorators we need. This is done late and out of order because our decorators currently require informers which are not + // present until we start running + namespaceLabelDecorator := namespaceconditions.NamespaceLabelConditions{ + NamespaceClient: kubeClient.CoreV1(), + NamespaceLister: informers.Core().V1().Namespaces().Lister(), + + SkipLevelZeroNames: SkipRunLevelZeroPlugins, + SkipLevelOneNames: SkipRunLevelOnePlugins, + } + o.Admission.GenericAdmission.Decorators = append(o.Admission.GenericAdmission.Decorators, + admission.Decorators{ + admission.DecoratorFunc(namespaceLabelDecorator.WithNamespaceLabelConditions), + admission.DecoratorFunc(admissiontimeout.AdmissionTimeout{Timeout: 13 * time.Second}.WithTimeout), + }, + ) +} diff --git a/openshift-kube-apiserver/admission/admissionenablement/register.go b/openshift-kube-apiserver/admission/admissionenablement/register.go new file mode 100644 index 0000000000000..f91047855f2d6 --- /dev/null +++ b/openshift-kube-apiserver/admission/admissionenablement/register.go @@ -0,0 +1,111 @@ +package admissionenablement + +import ( + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apiserver/pkg/admission" + mutatingwebhook "k8s.io/apiserver/pkg/admission/plugin/webhook/mutating" + "k8s.io/kubernetes/plugin/pkg/admission/resourcequota" + + "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy" + imagepolicyapiv1 "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1" + quotaclusterresourcequota "github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota" + "github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission" + authorizationrestrictusers "k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers" + quotaclusterresourceoverride "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride" + quotarunonceduration "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/runonceduration" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/externalipranger" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/restrictedendpoints" + ingressadmission "k8s.io/kubernetes/openshift-kube-apiserver/admission/route" + projectnodeenv "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv" + schedulerpodnodeconstraints "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/podnodeconstraints" +) + +func RegisterOpenshiftKubeAdmissionPlugins(plugins *admission.Plugins) { + authorizationrestrictusers.Register(plugins) + imagepolicy.Register(plugins) + ingressadmission.Register(plugins) + projectnodeenv.Register(plugins) + quotaclusterresourceoverride.Register(plugins) + quotaclusterresourcequota.Register(plugins) + quotarunonceduration.Register(plugins) + schedulerpodnodeconstraints.Register(plugins) + sccadmission.Register(plugins) + sccadmission.RegisterSCCExecRestrictions(plugins) + externalipranger.RegisterExternalIP(plugins) + restrictedendpoints.RegisterRestrictedEndpoints(plugins) +} + +var ( + + // these are admission plugins that cannot be applied until after the kubeapiserver starts. + // TODO if nothing comes to mind in 3.10, kill this + SkipRunLevelZeroPlugins = sets.NewString() + // these are admission plugins that cannot be applied until after the openshiftapiserver apiserver starts. + SkipRunLevelOnePlugins = sets.NewString( + imagepolicyapiv1.PluginName, // "image.openshift.io/ImagePolicy" + "quota.openshift.io/ClusterResourceQuota", + "security.openshift.io/SecurityContextConstraint", + "security.openshift.io/SCCExecRestrictions", + ) + + // openshiftAdmissionPluginsForKubeBeforeMutating are the admission plugins to add after kube admission, before mutating webhooks + openshiftAdmissionPluginsForKubeBeforeMutating = []string{ + "autoscaling.openshift.io/ClusterResourceOverride", + "authorization.openshift.io/RestrictSubjectBindings", + "autoscaling.openshift.io/RunOnceDuration", + "scheduling.openshift.io/PodNodeConstraints", + "scheduling.openshift.io/OriginPodNodeEnvironment", + "network.openshift.io/ExternalIPRanger", + "network.openshift.io/RestrictedEndpointsAdmission", + imagepolicyapiv1.PluginName, // "image.openshift.io/ImagePolicy" + "security.openshift.io/SecurityContextConstraint", + "security.openshift.io/SCCExecRestrictions", + "route.openshift.io/IngressAdmission", + } + + // openshiftAdmissionPluginsForKubeAfterResourceQuota are the plugins to add after ResourceQuota plugin + openshiftAdmissionPluginsForKubeAfterResourceQuota = []string{ + "quota.openshift.io/ClusterResourceQuota", + } + + // additionalDefaultOnPlugins is a list of plugins we turn on by default that core kube does not. + additionalDefaultOnPlugins = sets.NewString( + "NodeRestriction", + "OwnerReferencesPermissionEnforcement", + "PersistentVolumeLabel", + "PodNodeSelector", + "PodTolerationRestriction", + "Priority", + imagepolicyapiv1.PluginName, // "image.openshift.io/ImagePolicy" + "StorageObjectInUseProtection", + ) +) + +func NewOrderedKubeAdmissionPlugins(kubeAdmissionOrder []string) []string { + ret := []string{} + for _, curr := range kubeAdmissionOrder { + if curr == mutatingwebhook.PluginName { + ret = append(ret, openshiftAdmissionPluginsForKubeBeforeMutating...) + ret = append(ret, customresourcevalidationregistration.AllCustomResourceValidators...) + } + + ret = append(ret, curr) + + if curr == resourcequota.PluginName { + ret = append(ret, openshiftAdmissionPluginsForKubeAfterResourceQuota...) + } + } + return ret +} + +func NewDefaultOffPluginsFunc(kubeDefaultOffAdmission sets.String) func() sets.String { + return func() sets.String { + kubeOff := sets.NewString(kubeDefaultOffAdmission.UnsortedList()...) + kubeOff.Delete(additionalDefaultOnPlugins.List()...) + kubeOff.Delete(openshiftAdmissionPluginsForKubeBeforeMutating...) + kubeOff.Delete(openshiftAdmissionPluginsForKubeAfterResourceQuota...) + kubeOff.Delete(customresourcevalidationregistration.AllCustomResourceValidators...) + return kubeOff + } +} diff --git a/openshift-kube-apiserver/admission/admissionenablement/register_test.go b/openshift-kube-apiserver/admission/admissionenablement/register_test.go new file mode 100644 index 0000000000000..3f1182c706f65 --- /dev/null +++ b/openshift-kube-apiserver/admission/admissionenablement/register_test.go @@ -0,0 +1,54 @@ +package admissionenablement + +import ( + "reflect" + "testing" + + "k8s.io/apiserver/pkg/admission" + genericapiserver "k8s.io/apiserver/pkg/server" + "k8s.io/kubernetes/pkg/kubeapiserver/options" + + "github.com/openshift/library-go/pkg/apiserver/admission/admissionregistrationtesting" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration" +) + +func TestAdmissionRegistration(t *testing.T) { + orderedAdmissionChain := NewOrderedKubeAdmissionPlugins(options.AllOrderedPlugins) + defaultOffPlugins := NewDefaultOffPluginsFunc(options.DefaultOffAdmissionPlugins())() + registerAllAdmissionPlugins := func(plugins *admission.Plugins) { + genericapiserver.RegisterAllAdmissionPlugins(plugins) + options.RegisterAllAdmissionPlugins(plugins) + RegisterOpenshiftKubeAdmissionPlugins(plugins) + customresourcevalidationregistration.RegisterCustomResourceValidation(plugins) + } + plugins := admission.NewPlugins() + registerAllAdmissionPlugins(plugins) + + err := admissionregistrationtesting.AdmissionRegistrationTest(plugins, orderedAdmissionChain, defaultOffPlugins) + if err != nil { + t.Fatal(err) + } +} + +// TestResourceQuotaBeforeClusterResourceQuota simply test wheather ResourceQuota plugin is before ClusterResourceQuota plugin +func TestResourceQuotaBeforeClusterResourceQuota(t *testing.T) { + orderedAdmissionChain := NewOrderedKubeAdmissionPlugins(options.AllOrderedPlugins) + + expectedOrderedAdmissionSubChain := []string{"ResourceQuota", "quota.openshift.io/ClusterResourceQuota", "AlwaysDeny"} + actualOrderedAdmissionChain := extractSubChain(orderedAdmissionChain, expectedOrderedAdmissionSubChain[0]) + + if !reflect.DeepEqual(actualOrderedAdmissionChain, expectedOrderedAdmissionSubChain) { + t.Fatalf("expected %v, got %v ", expectedOrderedAdmissionSubChain, actualOrderedAdmissionChain) + } +} + +func extractSubChain(admissionChain []string, takeFrom string) []string { + indexOfTake := 0 + for index, admission := range admissionChain { + if admission == takeFrom { + indexOfTake = index + break + } + } + return admissionChain[indexOfTake:] +} diff --git a/openshift-kube-apiserver/admission/authorization/restrictusers/groupcache_test.go b/openshift-kube-apiserver/admission/authorization/restrictusers/groupcache_test.go new file mode 100644 index 0000000000000..1dde83cbce2a2 --- /dev/null +++ b/openshift-kube-apiserver/admission/authorization/restrictusers/groupcache_test.go @@ -0,0 +1,28 @@ +package restrictusers + +import ( + userv1 "github.com/openshift/api/user/v1" +) + +type fakeGroupCache struct { + groups []userv1.Group +} + +func (g fakeGroupCache) GroupsFor(user string) ([]*userv1.Group, error) { + ret := []*userv1.Group{} + for i := range g.groups { + group := &g.groups[i] + for _, currUser := range group.Users { + if user == currUser { + ret = append(ret, group) + break + } + } + + } + return ret, nil +} + +func (g fakeGroupCache) HasSynced() bool { + return true +} diff --git a/openshift-kube-apiserver/admission/authorization/restrictusers/intializers.go b/openshift-kube-apiserver/admission/authorization/restrictusers/intializers.go new file mode 100644 index 0000000000000..d3fdcde4a5113 --- /dev/null +++ b/openshift-kube-apiserver/admission/authorization/restrictusers/intializers.go @@ -0,0 +1,28 @@ +package restrictusers + +import ( + "k8s.io/apiserver/pkg/admission" + + userinformer "github.com/openshift/client-go/user/informers/externalversions" +) + +func NewInitializer(userInformer userinformer.SharedInformerFactory) admission.PluginInitializer { + return &localInitializer{userInformer: userInformer} +} + +type WantsUserInformer interface { + SetUserInformer(userinformer.SharedInformerFactory) + admission.InitializationValidator +} + +type localInitializer struct { + userInformer userinformer.SharedInformerFactory +} + +// Initialize will check the initialization interfaces implemented by each plugin +// and provide the appropriate initialization data +func (i *localInitializer) Initialize(plugin admission.Interface) { + if wants, ok := plugin.(WantsUserInformer); ok { + wants.SetUserInformer(i.userInformer) + } +} diff --git a/openshift-kube-apiserver/admission/authorization/restrictusers/restrictusers.go b/openshift-kube-apiserver/admission/authorization/restrictusers/restrictusers.go new file mode 100644 index 0000000000000..4c78858203181 --- /dev/null +++ b/openshift-kube-apiserver/admission/authorization/restrictusers/restrictusers.go @@ -0,0 +1,234 @@ +package restrictusers + +import ( + "context" + "errors" + "fmt" + "io" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + kerrors "k8s.io/apimachinery/pkg/util/errors" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" + "k8s.io/klog/v2" + "k8s.io/kubernetes/pkg/apis/rbac" + + userv1 "github.com/openshift/api/user/v1" + authorizationtypedclient "github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1" + userclient "github.com/openshift/client-go/user/clientset/versioned" + userinformer "github.com/openshift/client-go/user/informers/externalversions" + "github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/usercache" +) + +func Register(plugins *admission.Plugins) { + plugins.Register("authorization.openshift.io/RestrictSubjectBindings", + func(config io.Reader) (admission.Interface, error) { + return NewRestrictUsersAdmission() + }) +} + +type GroupCache interface { + GroupsFor(string) ([]*userv1.Group, error) + HasSynced() bool +} + +// restrictUsersAdmission implements admission.ValidateInterface and enforces +// restrictions on adding rolebindings in a project to permit only designated +// subjects. +type restrictUsersAdmission struct { + *admission.Handler + + roleBindingRestrictionsGetter authorizationtypedclient.RoleBindingRestrictionsGetter + userClient userclient.Interface + kubeClient kubernetes.Interface + groupCache GroupCache +} + +var _ = admissionrestconfig.WantsRESTClientConfig(&restrictUsersAdmission{}) +var _ = WantsUserInformer(&restrictUsersAdmission{}) +var _ = initializer.WantsExternalKubeClientSet(&restrictUsersAdmission{}) +var _ = admission.ValidationInterface(&restrictUsersAdmission{}) + +// NewRestrictUsersAdmission configures an admission plugin that enforces +// restrictions on adding role bindings in a project. +func NewRestrictUsersAdmission() (admission.Interface, error) { + return &restrictUsersAdmission{ + Handler: admission.NewHandler(admission.Create, admission.Update), + }, nil +} + +func (q *restrictUsersAdmission) SetExternalKubeClientSet(c kubernetes.Interface) { + q.kubeClient = c +} + +func (q *restrictUsersAdmission) SetRESTClientConfig(restClientConfig rest.Config) { + var err error + + // RoleBindingRestriction is served using CRD resource any status update must use JSON + jsonClientConfig := rest.CopyConfig(&restClientConfig) + jsonClientConfig.ContentConfig.AcceptContentTypes = "application/json" + jsonClientConfig.ContentConfig.ContentType = "application/json" + + q.roleBindingRestrictionsGetter, err = authorizationtypedclient.NewForConfig(jsonClientConfig) + if err != nil { + utilruntime.HandleError(err) + return + } + + q.userClient, err = userclient.NewForConfig(&restClientConfig) + if err != nil { + utilruntime.HandleError(err) + return + } +} + +func (q *restrictUsersAdmission) SetUserInformer(userInformers userinformer.SharedInformerFactory) { + q.groupCache = usercache.NewGroupCache(userInformers.User().V1().Groups()) +} + +// subjectsDelta returns the relative complement of elementsToIgnore in +// elements (i.e., elements∖elementsToIgnore). +func subjectsDelta(elementsToIgnore, elements []rbac.Subject) []rbac.Subject { + result := []rbac.Subject{} + + for _, el := range elements { + keep := true + for _, skipEl := range elementsToIgnore { + if el == skipEl { + keep = false + break + } + } + if keep { + result = append(result, el) + } + } + + return result +} + +// Admit makes admission decisions that enforce restrictions on adding +// project-scoped role-bindings. In order for a role binding to be permitted, +// each subject in the binding must be matched by some rolebinding restriction +// in the namespace. +func (q *restrictUsersAdmission) Validate(ctx context.Context, a admission.Attributes, _ admission.ObjectInterfaces) (err error) { + + // We only care about rolebindings + if a.GetResource().GroupResource() != rbac.Resource("rolebindings") { + return nil + } + + // Ignore all operations that correspond to subresource actions. + if len(a.GetSubresource()) != 0 { + return nil + } + + ns := a.GetNamespace() + // Ignore cluster-level resources. + if len(ns) == 0 { + return nil + } + + var oldSubjects []rbac.Subject + + obj, oldObj := a.GetObject(), a.GetOldObject() + + rolebinding, ok := obj.(*rbac.RoleBinding) + if !ok { + return admission.NewForbidden(a, + fmt.Errorf("wrong object type for new rolebinding: %T", obj)) + } + + if len(rolebinding.Subjects) == 0 { + klog.V(4).Infof("No new subjects; admitting") + return nil + } + + if oldObj != nil { + oldrolebinding, ok := oldObj.(*rbac.RoleBinding) + if !ok { + return admission.NewForbidden(a, + fmt.Errorf("wrong object type for old rolebinding: %T", oldObj)) + } + oldSubjects = oldrolebinding.Subjects + } + + klog.V(4).Infof("Handling rolebinding %s/%s", + rolebinding.Namespace, rolebinding.Name) + + newSubjects := subjectsDelta(oldSubjects, rolebinding.Subjects) + if len(newSubjects) == 0 { + klog.V(4).Infof("No new subjects; admitting") + return nil + } + + // RoleBindingRestrictions admission plugin is DefaultAllow, hence RBRs can't use an informer, + // because it's impossible to know if cache is up-to-date + roleBindingRestrictionList, err := q.roleBindingRestrictionsGetter.RoleBindingRestrictions(ns). + List(context.TODO(), metav1.ListOptions{}) + if err != nil { + return admission.NewForbidden(a, fmt.Errorf("could not list rolebinding restrictions: %v", err)) + } + if len(roleBindingRestrictionList.Items) == 0 { + klog.V(4).Infof("No rolebinding restrictions specified; admitting") + return nil + } + + checkers := []SubjectChecker{} + for _, rbr := range roleBindingRestrictionList.Items { + checker, err := NewSubjectChecker(&rbr.Spec) + if err != nil { + return admission.NewForbidden(a, fmt.Errorf("could not create rolebinding restriction subject checker: %v", err)) + } + checkers = append(checkers, checker) + } + + roleBindingRestrictionContext, err := newRoleBindingRestrictionContext(ns, + q.kubeClient, q.userClient.UserV1(), q.groupCache) + if err != nil { + return admission.NewForbidden(a, fmt.Errorf("could not create rolebinding restriction context: %v", err)) + } + + checker := NewUnionSubjectChecker(checkers) + + errs := []error{} + for _, subject := range newSubjects { + allowed, err := checker.Allowed(subject, roleBindingRestrictionContext) + if err != nil { + errs = append(errs, err) + } + if !allowed { + errs = append(errs, + fmt.Errorf("rolebindings to %s %q are not allowed in project %q", + subject.Kind, subject.Name, ns)) + } + } + if len(errs) != 0 { + return admission.NewForbidden(a, kerrors.NewAggregate(errs)) + } + + klog.V(4).Infof("All new subjects are allowed; admitting") + + return nil +} + +func (q *restrictUsersAdmission) ValidateInitialization() error { + if q.kubeClient == nil { + return errors.New("RestrictUsersAdmission plugin requires a Kubernetes client") + } + if q.roleBindingRestrictionsGetter == nil { + return errors.New("RestrictUsersAdmission plugin requires an OpenShift client") + } + if q.userClient == nil { + return errors.New("RestrictUsersAdmission plugin requires an OpenShift user client") + } + if q.groupCache == nil { + return errors.New("RestrictUsersAdmission plugin requires a group cache") + } + + return nil +} diff --git a/openshift-kube-apiserver/admission/authorization/restrictusers/restrictusers_test.go b/openshift-kube-apiserver/admission/authorization/restrictusers/restrictusers_test.go new file mode 100644 index 0000000000000..50dd6eb5faea9 --- /dev/null +++ b/openshift-kube-apiserver/admission/authorization/restrictusers/restrictusers_test.go @@ -0,0 +1,404 @@ +package restrictusers + +import ( + "context" + "fmt" + "strings" + "testing" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/authentication/user" + "k8s.io/client-go/kubernetes/fake" + "k8s.io/kubernetes/pkg/apis/rbac" + + authorizationv1 "github.com/openshift/api/authorization/v1" + userv1 "github.com/openshift/api/user/v1" + fakeauthorizationclient "github.com/openshift/client-go/authorization/clientset/versioned/fake" + fakeuserclient "github.com/openshift/client-go/user/clientset/versioned/fake" +) + +func TestAdmission(t *testing.T) { + var ( + userAlice = userv1.User{ + ObjectMeta: metav1.ObjectMeta{ + Name: "Alice", + Labels: map[string]string{"foo": "bar"}, + }, + } + userAliceSubj = rbac.Subject{ + Kind: rbac.UserKind, + Name: "Alice", + } + + userBob = userv1.User{ + ObjectMeta: metav1.ObjectMeta{Name: "Bob"}, + Groups: []string{"group"}, + } + userBobSubj = rbac.Subject{ + Kind: rbac.UserKind, + Name: "Bob", + } + + group = userv1.Group{ + ObjectMeta: metav1.ObjectMeta{ + Name: "group", + Labels: map[string]string{"baz": "quux"}, + }, + Users: []string{userBobSubj.Name}, + } + groupSubj = rbac.Subject{ + Kind: rbac.GroupKind, + Name: "group", + } + + serviceaccount = corev1.ServiceAccount{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "namespace", + Name: "serviceaccount", + Labels: map[string]string{"xyzzy": "thud"}, + }, + } + serviceaccountSubj = rbac.Subject{ + Kind: rbac.ServiceAccountKind, + Namespace: "namespace", + Name: "serviceaccount", + } + ) + + testCases := []struct { + name string + expectedErr string + + object runtime.Object + oldObject runtime.Object + kind schema.GroupVersionKind + resource schema.GroupVersionResource + namespace string + subresource string + kubeObjects []runtime.Object + authorizationObjects []runtime.Object + userObjects []runtime.Object + }{ + { + name: "ignore (allow) if subresource is nonempty", + object: &rbac.RoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "namespace", + Name: "rolebinding", + }, + Subjects: []rbac.Subject{userAliceSubj}, + }, + oldObject: &rbac.RoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "namespace", + Name: "rolebinding", + }, + Subjects: []rbac.Subject{}, + }, + kind: rbac.Kind("RoleBinding").WithVersion("version"), + resource: rbac.Resource("rolebindings").WithVersion("version"), + namespace: "namespace", + subresource: "subresource", + kubeObjects: []runtime.Object{ + &corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "namespace", + }, + }, + }, + }, + { + name: "ignore (allow) cluster-scoped rolebinding", + object: &rbac.RoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "namespace", + Name: "rolebinding", + }, + Subjects: []rbac.Subject{userAliceSubj}, + RoleRef: rbac.RoleRef{Name: "name"}, + }, + oldObject: &rbac.RoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "namespace", + Name: "rolebinding", + }, + Subjects: []rbac.Subject{}, + }, + kind: rbac.Kind("RoleBinding").WithVersion("version"), + resource: rbac.Resource("rolebindings").WithVersion("version"), + namespace: "", + subresource: "", + kubeObjects: []runtime.Object{ + &corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "namespace", + }, + }, + }, + }, + { + name: "allow if the namespace has no rolebinding restrictions", + object: &rbac.RoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "namespace", + Name: "rolebinding", + }, + Subjects: []rbac.Subject{ + userAliceSubj, + userBobSubj, + groupSubj, + serviceaccountSubj, + }, + RoleRef: rbac.RoleRef{Name: "name"}, + }, + oldObject: &rbac.RoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "namespace", + Name: "rolebinding", + }, + Subjects: []rbac.Subject{}, + RoleRef: rbac.RoleRef{Name: "name"}, + }, + kind: rbac.Kind("RoleBinding").WithVersion("version"), + resource: rbac.Resource("rolebindings").WithVersion("version"), + namespace: "namespace", + subresource: "", + kubeObjects: []runtime.Object{ + &corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "namespace", + }, + }, + }, + }, + { + name: "allow if any rolebinding with the subject already exists", + object: &rbac.RoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "namespace", + Name: "rolebinding", + }, + Subjects: []rbac.Subject{ + userAliceSubj, + groupSubj, + serviceaccountSubj, + }, + RoleRef: rbac.RoleRef{Name: "name"}, + }, + oldObject: &rbac.RoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "namespace", + Name: "rolebinding", + }, + Subjects: []rbac.Subject{ + userAliceSubj, + groupSubj, + serviceaccountSubj, + }, + RoleRef: rbac.RoleRef{Name: "name"}, + }, + kind: rbac.Kind("RoleBinding").WithVersion("version"), + resource: rbac.Resource("rolebindings").WithVersion("version"), + namespace: "namespace", + subresource: "", + kubeObjects: []runtime.Object{ + &corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "namespace", + }, + }, + }, + authorizationObjects: []runtime.Object{ + &authorizationv1.RoleBindingRestriction{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bogus-matcher", + Namespace: "namespace", + }, + Spec: authorizationv1.RoleBindingRestrictionSpec{ + UserRestriction: &authorizationv1.UserRestriction{}, + }, + }, + }, + }, + { + name: "allow a user, group, or service account in a rolebinding if a literal matches", + object: &rbac.RoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "namespace", + Name: "rolebinding", + }, + Subjects: []rbac.Subject{ + userAliceSubj, + serviceaccountSubj, + groupSubj, + }, + RoleRef: rbac.RoleRef{Name: "name"}, + }, + oldObject: &rbac.RoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "namespace", + Name: "rolebinding", + }, + Subjects: []rbac.Subject{}, + RoleRef: rbac.RoleRef{Name: "name"}, + }, + kind: rbac.Kind("RoleBinding").WithVersion("version"), + resource: rbac.Resource("rolebindings").WithVersion("version"), + namespace: "namespace", + subresource: "", + kubeObjects: []runtime.Object{ + &corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "namespace", + }, + }, + }, + authorizationObjects: []runtime.Object{ + &authorizationv1.RoleBindingRestriction{ + ObjectMeta: metav1.ObjectMeta{ + Name: "match-users", + Namespace: "namespace", + }, + Spec: authorizationv1.RoleBindingRestrictionSpec{ + UserRestriction: &authorizationv1.UserRestriction{ + Users: []string{userAlice.Name}, + }, + }, + }, + &authorizationv1.RoleBindingRestriction{ + ObjectMeta: metav1.ObjectMeta{ + Name: "match-groups", + Namespace: "namespace", + }, + Spec: authorizationv1.RoleBindingRestrictionSpec{ + GroupRestriction: &authorizationv1.GroupRestriction{ + Groups: []string{group.Name}, + }, + }, + }, + &authorizationv1.RoleBindingRestriction{ + ObjectMeta: metav1.ObjectMeta{ + Name: "match-serviceaccounts", + Namespace: "namespace", + }, + Spec: authorizationv1.RoleBindingRestrictionSpec{ + ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ + ServiceAccounts: []authorizationv1.ServiceAccountReference{ + { + Name: serviceaccount.Name, + Namespace: serviceaccount.Namespace, + }, + }, + }, + }, + }, + }, + }, + { + name: "prohibit user without a matching user literal", + expectedErr: fmt.Sprintf("rolebindings to %s %q are not allowed", + userAliceSubj.Kind, userAliceSubj.Name), + object: &rbac.RoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "namespace", + Name: "rolebinding", + }, + Subjects: []rbac.Subject{ + userAliceSubj, + }, + RoleRef: rbac.RoleRef{Name: "name"}, + }, + oldObject: &rbac.RoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "namespace", + Name: "rolebinding", + }, + Subjects: []rbac.Subject{}, + RoleRef: rbac.RoleRef{Name: "name"}, + }, + kind: rbac.Kind("RoleBinding").WithVersion("version"), + resource: rbac.Resource("rolebindings").WithVersion("version"), + namespace: "namespace", + subresource: "", + kubeObjects: []runtime.Object{ + &corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "namespace", + }, + }, + }, + authorizationObjects: []runtime.Object{ + &authorizationv1.RoleBindingRestriction{ + ObjectMeta: metav1.ObjectMeta{ + Name: "match-users-bob", + Namespace: "namespace", + }, + Spec: authorizationv1.RoleBindingRestrictionSpec{ + UserRestriction: &authorizationv1.UserRestriction{ + Users: []string{userBobSubj.Name}, + }, + }, + }, + }, + userObjects: []runtime.Object{ + &userAlice, + &userBob, + }, + }, + } + + stopCh := make(chan struct{}) + defer close(stopCh) + + for _, tc := range testCases { + kclientset := fake.NewSimpleClientset(tc.kubeObjects...) + fakeUserClient := fakeuserclient.NewSimpleClientset(tc.userObjects...) + fakeAuthorizationClient := fakeauthorizationclient.NewSimpleClientset(tc.authorizationObjects...) + + plugin, err := NewRestrictUsersAdmission() + if err != nil { + t.Errorf("unexpected error initializing admission plugin: %v", err) + } + + plugin.(*restrictUsersAdmission).kubeClient = kclientset + plugin.(*restrictUsersAdmission).roleBindingRestrictionsGetter = fakeAuthorizationClient.AuthorizationV1() + plugin.(*restrictUsersAdmission).userClient = fakeUserClient + plugin.(*restrictUsersAdmission).groupCache = fakeGroupCache{} + + err = admission.ValidateInitialization(plugin) + if err != nil { + t.Errorf("unexpected error validating admission plugin: %v", err) + } + + attributes := admission.NewAttributesRecord( + tc.object, + tc.oldObject, + tc.kind, + tc.namespace, + tc.name, + tc.resource, + tc.subresource, + admission.Create, + nil, + false, + &user.DefaultInfo{}, + ) + + err = plugin.(admission.ValidationInterface).Validate(context.TODO(), attributes, nil) + switch { + case len(tc.expectedErr) == 0 && err == nil: + case len(tc.expectedErr) == 0 && err != nil: + t.Errorf("%s: unexpected error: %v", tc.name, err) + case len(tc.expectedErr) != 0 && err == nil: + t.Errorf("%s: missing error: %v", tc.name, tc.expectedErr) + case len(tc.expectedErr) != 0 && err != nil && + !strings.Contains(err.Error(), tc.expectedErr): + t.Errorf("%s: missing error: expected %v, got %v", + tc.name, tc.expectedErr, err) + } + } +} diff --git a/openshift-kube-apiserver/admission/authorization/restrictusers/subjectchecker.go b/openshift-kube-apiserver/admission/authorization/restrictusers/subjectchecker.go new file mode 100644 index 0000000000000..2e10e182b9de9 --- /dev/null +++ b/openshift-kube-apiserver/admission/authorization/restrictusers/subjectchecker.go @@ -0,0 +1,312 @@ +package restrictusers + +import ( + "context" + "fmt" + "time" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + kerrors "k8s.io/apimachinery/pkg/util/errors" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/kubernetes" + "k8s.io/kubernetes/pkg/apis/rbac" + + authorizationv1 "github.com/openshift/api/authorization/v1" + userv1 "github.com/openshift/api/user/v1" + userclient "github.com/openshift/client-go/user/clientset/versioned/typed/user/v1" +) + +// SubjectChecker determines whether rolebindings on a subject (user, group, or +// service account) are allowed in a project. +type SubjectChecker interface { + Allowed(rbac.Subject, *RoleBindingRestrictionContext) (bool, error) +} + +// UnionSubjectChecker represents the union of zero or more SubjectCheckers. +type UnionSubjectChecker []SubjectChecker + +// NewUnionSubjectChecker returns a new UnionSubjectChecker. +func NewUnionSubjectChecker(checkers []SubjectChecker) UnionSubjectChecker { + return UnionSubjectChecker(checkers) +} + +// Allowed determines whether the given subject is allowed in rolebindings in +// the project. +func (checkers UnionSubjectChecker) Allowed(subject rbac.Subject, ctx *RoleBindingRestrictionContext) (bool, error) { + errs := []error{} + for _, checker := range []SubjectChecker(checkers) { + allowed, err := checker.Allowed(subject, ctx) + if err != nil { + errs = append(errs, err) + } else if allowed { + return true, nil + } + } + + return false, kerrors.NewAggregate(errs) +} + +// RoleBindingRestrictionContext holds context that is used when determining +// whether a RoleBindingRestriction allows rolebindings on a particular subject. +type RoleBindingRestrictionContext struct { + userClient userclient.UserV1Interface + kclient kubernetes.Interface + + // groupCache maps user name to groups. + groupCache GroupCache + + // userToLabels maps user name to labels.Set. + userToLabelSet map[string]labels.Set + + // groupToLabels maps group name to labels.Set. + groupToLabelSet map[string]labels.Set + + // namespace is the namespace for which the RoleBindingRestriction makes + // determinations. + namespace string +} + +// NewRoleBindingRestrictionContext returns a new RoleBindingRestrictionContext +// object. +func newRoleBindingRestrictionContext(ns string, kc kubernetes.Interface, userClient userclient.UserV1Interface, groupCache GroupCache) (*RoleBindingRestrictionContext, error) { + return &RoleBindingRestrictionContext{ + namespace: ns, + kclient: kc, + userClient: userClient, + groupCache: groupCache, + userToLabelSet: map[string]labels.Set{}, + groupToLabelSet: map[string]labels.Set{}, + }, nil +} + +// labelSetForUser returns the label set for the given user subject. +func (ctx *RoleBindingRestrictionContext) labelSetForUser(subject rbac.Subject) (labels.Set, error) { + if subject.Kind != rbac.UserKind { + return labels.Set{}, fmt.Errorf("not a user: %q", subject.Name) + } + + labelSet, ok := ctx.userToLabelSet[subject.Name] + if ok { + return labelSet, nil + } + + user, err := ctx.userClient.Users().Get(context.TODO(), subject.Name, metav1.GetOptions{}) + if err != nil { + return labels.Set{}, err + } + + ctx.userToLabelSet[subject.Name] = labels.Set(user.Labels) + + return ctx.userToLabelSet[subject.Name], nil +} + +// groupsForUser returns the groups for the given user subject. +func (ctx *RoleBindingRestrictionContext) groupsForUser(subject rbac.Subject) ([]*userv1.Group, error) { + if subject.Kind != rbac.UserKind { + return []*userv1.Group{}, fmt.Errorf("not a user: %q", subject.Name) + } + + err := wait.PollImmediate(1*time.Second, 10*time.Second, func() (bool, error) { + return ctx.groupCache.HasSynced(), nil + }) + if err != nil { + return nil, fmt.Errorf("groups.user.openshift.io cache is not synchronized") + } + + return ctx.groupCache.GroupsFor(subject.Name) +} + +// labelSetForGroup returns the label set for the given group subject. +func (ctx *RoleBindingRestrictionContext) labelSetForGroup(subject rbac.Subject) (labels.Set, error) { + if subject.Kind != rbac.GroupKind { + return labels.Set{}, fmt.Errorf("not a group: %q", subject.Name) + } + + labelSet, ok := ctx.groupToLabelSet[subject.Name] + if ok { + return labelSet, nil + } + + group, err := ctx.userClient.Groups().Get(context.TODO(), subject.Name, metav1.GetOptions{}) + if err != nil { + return labels.Set{}, err + } + + ctx.groupToLabelSet[subject.Name] = labels.Set(group.Labels) + + return ctx.groupToLabelSet[subject.Name], nil +} + +// UserSubjectChecker determines whether a user subject is allowed in +// rolebindings in the project. +type UserSubjectChecker struct { + userRestriction *authorizationv1.UserRestriction +} + +// NewUserSubjectChecker returns a new UserSubjectChecker. +func NewUserSubjectChecker(userRestriction *authorizationv1.UserRestriction) UserSubjectChecker { + return UserSubjectChecker{userRestriction: userRestriction} +} + +// Allowed determines whether the given user subject is allowed in rolebindings +// in the project. +func (checker UserSubjectChecker) Allowed(subject rbac.Subject, ctx *RoleBindingRestrictionContext) (bool, error) { + if subject.Kind != rbac.UserKind { + return false, nil + } + + for _, userName := range checker.userRestriction.Users { + if subject.Name == userName { + return true, nil + } + } + + if len(checker.userRestriction.Groups) != 0 { + subjectGroups, err := ctx.groupsForUser(subject) + if err != nil { + return false, err + } + + for _, groupName := range checker.userRestriction.Groups { + for _, group := range subjectGroups { + if group.Name == groupName { + return true, nil + } + } + } + } + + if len(checker.userRestriction.Selectors) != 0 { + labelSet, err := ctx.labelSetForUser(subject) + if err != nil { + return false, err + } + + for _, labelSelector := range checker.userRestriction.Selectors { + selector, err := metav1.LabelSelectorAsSelector(&labelSelector) + if err != nil { + return false, err + } + + if selector.Matches(labelSet) { + return true, nil + } + } + } + + return false, nil +} + +// GroupSubjectChecker determines whether a group subject is allowed in +// rolebindings in the project. +type GroupSubjectChecker struct { + groupRestriction *authorizationv1.GroupRestriction +} + +// NewGroupSubjectChecker returns a new GroupSubjectChecker. +func NewGroupSubjectChecker(groupRestriction *authorizationv1.GroupRestriction) GroupSubjectChecker { + return GroupSubjectChecker{groupRestriction: groupRestriction} +} + +// Allowed determines whether the given group subject is allowed in rolebindings +// in the project. +func (checker GroupSubjectChecker) Allowed(subject rbac.Subject, ctx *RoleBindingRestrictionContext) (bool, error) { + if subject.Kind != rbac.GroupKind { + return false, nil + } + + for _, groupName := range checker.groupRestriction.Groups { + if subject.Name == groupName { + return true, nil + } + } + + if len(checker.groupRestriction.Selectors) != 0 { + labelSet, err := ctx.labelSetForGroup(subject) + if err != nil { + return false, err + } + + for _, labelSelector := range checker.groupRestriction.Selectors { + selector, err := metav1.LabelSelectorAsSelector(&labelSelector) + if err != nil { + return false, err + } + + if selector.Matches(labelSet) { + return true, nil + } + } + } + + return false, nil +} + +// ServiceAccountSubjectChecker determines whether a serviceaccount subject is +// allowed in rolebindings in the project. +type ServiceAccountSubjectChecker struct { + serviceAccountRestriction *authorizationv1.ServiceAccountRestriction +} + +// NewServiceAccountSubjectChecker returns a new ServiceAccountSubjectChecker. +func NewServiceAccountSubjectChecker(serviceAccountRestriction *authorizationv1.ServiceAccountRestriction) ServiceAccountSubjectChecker { + return ServiceAccountSubjectChecker{ + serviceAccountRestriction: serviceAccountRestriction, + } +} + +// Allowed determines whether the given serviceaccount subject is allowed in +// rolebindings in the project. +func (checker ServiceAccountSubjectChecker) Allowed(subject rbac.Subject, ctx *RoleBindingRestrictionContext) (bool, error) { + if subject.Kind != rbac.ServiceAccountKind { + return false, nil + } + + subjectNamespace := subject.Namespace + if len(subjectNamespace) == 0 { + // If a RoleBinding has a subject that is a ServiceAccount with + // no namespace specified, the namespace will be defaulted to + // that of the RoleBinding. However, admission control plug-ins + // execute before this happens, so in order not to reject such + // subjects erroneously, we copy the logic here of using the + // RoleBinding's namespace if the subject's is empty. + subjectNamespace = ctx.namespace + } + + for _, namespace := range checker.serviceAccountRestriction.Namespaces { + if subjectNamespace == namespace { + return true, nil + } + } + + for _, serviceAccountRef := range checker.serviceAccountRestriction.ServiceAccounts { + serviceAccountNamespace := serviceAccountRef.Namespace + if len(serviceAccountNamespace) == 0 { + serviceAccountNamespace = ctx.namespace + } + + if subject.Name == serviceAccountRef.Name && + subjectNamespace == serviceAccountNamespace { + return true, nil + } + } + + return false, nil +} + +// NewSubjectChecker returns a new SubjectChecker. +func NewSubjectChecker(spec *authorizationv1.RoleBindingRestrictionSpec) (SubjectChecker, error) { + switch { + case spec.UserRestriction != nil: + return NewUserSubjectChecker(spec.UserRestriction), nil + + case spec.GroupRestriction != nil: + return NewGroupSubjectChecker(spec.GroupRestriction), nil + + case spec.ServiceAccountRestriction != nil: + return NewServiceAccountSubjectChecker(spec.ServiceAccountRestriction), nil + } + + return nil, fmt.Errorf("invalid RoleBindingRestrictionSpec: %v", spec) +} diff --git a/openshift-kube-apiserver/admission/authorization/restrictusers/subjectchecker_test.go b/openshift-kube-apiserver/admission/authorization/restrictusers/subjectchecker_test.go new file mode 100644 index 0000000000000..4580d3582f93e --- /dev/null +++ b/openshift-kube-apiserver/admission/authorization/restrictusers/subjectchecker_test.go @@ -0,0 +1,349 @@ +package restrictusers + +import ( + "testing" + "time" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/kubernetes/fake" + "k8s.io/kubernetes/pkg/apis/rbac" + + authorizationv1 "github.com/openshift/api/authorization/v1" + userv1 "github.com/openshift/api/user/v1" + fakeuserclient "github.com/openshift/client-go/user/clientset/versioned/fake" +) + +func mustNewSubjectChecker(t *testing.T, spec *authorizationv1.RoleBindingRestrictionSpec) SubjectChecker { + checker, err := NewSubjectChecker(spec) + if err != nil { + t.Errorf("unexpected error from NewChecker: %v, spec: %#v", err, spec) + } + + return checker +} + +func TestSubjectCheckers(t *testing.T) { + var ( + userBobRef = rbac.Subject{ + Kind: rbac.UserKind, + Name: "Bob", + } + userAliceRef = rbac.Subject{ + Kind: rbac.UserKind, + Name: "Alice", + } + groupRef = rbac.Subject{ + Kind: rbac.GroupKind, + Name: "group", + } + serviceaccountRef = rbac.Subject{ + Kind: rbac.ServiceAccountKind, + Namespace: "namespace", + Name: "serviceaccount", + } + group = userv1.Group{ + ObjectMeta: metav1.ObjectMeta{ + Name: "group", + Labels: map[string]string{"baz": "quux"}, + }, + Users: []string{userBobRef.Name}, + } + userObjects = []runtime.Object{ + &userv1.User{ + ObjectMeta: metav1.ObjectMeta{ + Name: "Alice", + Labels: map[string]string{"foo": "bar"}, + }, + }, + &userv1.User{ + ObjectMeta: metav1.ObjectMeta{Name: "Bob"}, + Groups: []string{"group"}, + }, + &group, + } + kubeObjects = []runtime.Object{ + &corev1.ServiceAccount{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "namespace", + Name: "serviceaccount", + Labels: map[string]string{"xyzzy": "thud"}, + }, + }, + } + ) + + testCases := []struct { + name string + checker SubjectChecker + subject rbac.Subject + shouldAllow bool + }{ + { + name: "allow regular user by literal name match", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + UserRestriction: &authorizationv1.UserRestriction{ + Users: []string{userAliceRef.Name}, + }, + }), + subject: userAliceRef, + shouldAllow: true, + }, + { + name: "allow regular user by group membership", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + UserRestriction: &authorizationv1.UserRestriction{ + Groups: []string{groupRef.Name}, + }, + }), + subject: userBobRef, + shouldAllow: true, + }, + { + name: "prohibit regular user when another user matches on group membership", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + UserRestriction: &authorizationv1.UserRestriction{ + Groups: []string{groupRef.Name}, + }, + }), + subject: userAliceRef, + shouldAllow: false, + }, + { + name: "allow regular user by label selector match", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + UserRestriction: &authorizationv1.UserRestriction{ + Selectors: []metav1.LabelSelector{ + {MatchLabels: map[string]string{"foo": "bar"}}, + }, + }, + }), + subject: userAliceRef, + shouldAllow: true, + }, + { + name: "prohibit regular user when another user matches on label selector", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + UserRestriction: &authorizationv1.UserRestriction{ + Selectors: []metav1.LabelSelector{ + {MatchLabels: map[string]string{"foo": "bar"}}, + }, + }, + }), + subject: userBobRef, + shouldAllow: false, + }, + { + name: "allow regular group by literal name match", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + GroupRestriction: &authorizationv1.GroupRestriction{ + Groups: []string{groupRef.Name}, + }, + }), + subject: groupRef, + shouldAllow: true, + }, + { + name: "allow regular group by label selector match", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + GroupRestriction: &authorizationv1.GroupRestriction{ + Selectors: []metav1.LabelSelector{ + {MatchLabels: map[string]string{"baz": "quux"}}, + }, + }, + }), + subject: groupRef, + shouldAllow: true, + }, + { + name: "allow service account with explicit namespace by match on literal name and explicit namespace", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ + ServiceAccounts: []authorizationv1.ServiceAccountReference{ + { + Name: serviceaccountRef.Name, + Namespace: serviceaccountRef.Namespace, + }, + }, + }, + }), + subject: serviceaccountRef, + shouldAllow: true, + }, + { + name: "allow service account with explicit namespace by match on literal name and implicit namespace", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ + ServiceAccounts: []authorizationv1.ServiceAccountReference{ + {Name: serviceaccountRef.Name}, + }, + }, + }), + subject: serviceaccountRef, + shouldAllow: true, + }, + { + name: "prohibit service account with explicit namespace where literal name matches but explicit namespace does not", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ + ServiceAccounts: []authorizationv1.ServiceAccountReference{ + { + Namespace: serviceaccountRef.Namespace, + Name: serviceaccountRef.Name, + }, + }, + }, + }), + subject: rbac.Subject{ + Kind: rbac.ServiceAccountKind, + Namespace: "othernamespace", + Name: serviceaccountRef.Name, + }, + shouldAllow: false, + }, + { + name: "prohibit service account with explicit namespace where literal name matches but implicit namespace does not", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ + ServiceAccounts: []authorizationv1.ServiceAccountReference{ + {Name: serviceaccountRef.Name}, + }, + }, + }), + subject: rbac.Subject{ + Kind: rbac.ServiceAccountKind, + Namespace: "othernamespace", + Name: serviceaccountRef.Name, + }, + shouldAllow: false, + }, + { + name: "allow service account with implicit namespace by match on literal name and explicit namespace", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ + ServiceAccounts: []authorizationv1.ServiceAccountReference{ + { + Name: serviceaccountRef.Name, + Namespace: serviceaccountRef.Namespace, + }, + }, + }, + }), + subject: rbac.Subject{ + Kind: rbac.ServiceAccountKind, + Name: serviceaccountRef.Name, + }, + shouldAllow: true, + }, + { + name: "allow service account with implicit namespace by match on literal name and implicit namespace", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ + ServiceAccounts: []authorizationv1.ServiceAccountReference{ + {Name: serviceaccountRef.Name}, + }, + }, + }), + subject: rbac.Subject{ + Kind: rbac.ServiceAccountKind, + Name: serviceaccountRef.Name, + }, + shouldAllow: true, + }, + { + name: "prohibit service account with implicit namespace where literal name matches but explicit namespace does not", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ + ServiceAccounts: []authorizationv1.ServiceAccountReference{ + { + Namespace: "othernamespace", + Name: serviceaccountRef.Name, + }, + }, + }, + }), + subject: rbac.Subject{ + Kind: rbac.ServiceAccountKind, + Name: serviceaccountRef.Name, + }, + shouldAllow: false, + }, + { + name: "prohibit service account with explicit namespace where explicit namespace matches but literal name does not", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ + ServiceAccounts: []authorizationv1.ServiceAccountReference{ + { + Namespace: serviceaccountRef.Namespace, + Name: "othername", + }, + }, + }, + }), + subject: serviceaccountRef, + shouldAllow: false, + }, + { + name: "allow service account by match on namespace", + checker: mustNewSubjectChecker(t, + &authorizationv1.RoleBindingRestrictionSpec{ + ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ + Namespaces: []string{serviceaccountRef.Namespace}, + }, + }), + subject: serviceaccountRef, + shouldAllow: true, + }, + } + + stopCh := make(chan struct{}) + defer close(stopCh) + + kclient := fake.NewSimpleClientset(kubeObjects...) + fakeUserClient := fakeuserclient.NewSimpleClientset(userObjects...) + groupCache := fakeGroupCache{groups: []userv1.Group{group}} + // This is a terrible, horrible, no-good, very bad hack to avoid a race + // condition between the test "allow regular user by group membership" + // and the group cache's initialisation. + for { + if groups, _ := groupCache.GroupsFor(group.Users[0]); len(groups) == 1 { + break + } + time.Sleep(10 * time.Millisecond) + } + + ctx, err := newRoleBindingRestrictionContext("namespace", + kclient, fakeUserClient.UserV1(), groupCache) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + + for _, tc := range testCases { + allowed, err := tc.checker.Allowed(tc.subject, ctx) + if err != nil { + t.Errorf("test case %v: unexpected error: %v", tc.name, err) + } + if allowed && !tc.shouldAllow { + t.Errorf("test case %v: subject allowed but should be prohibited", tc.name) + } + if !allowed && tc.shouldAllow { + t.Errorf("test case %v: subject prohibited but should be allowed", tc.name) + } + } +} diff --git a/openshift-kube-apiserver/admission/authorization/restrictusers/usercache/groups.go b/openshift-kube-apiserver/admission/authorization/restrictusers/usercache/groups.go new file mode 100644 index 0000000000000..99a8156be3053 --- /dev/null +++ b/openshift-kube-apiserver/admission/authorization/restrictusers/usercache/groups.go @@ -0,0 +1,55 @@ +package usercache + +import ( + "fmt" + + "k8s.io/client-go/tools/cache" + + userapi "github.com/openshift/api/user/v1" + userinformer "github.com/openshift/client-go/user/informers/externalversions/user/v1" +) + +// GroupCache is a skin on an indexer to provide the reverse index from user to groups. +// Once we work out a cleaner way to extend a lister, this should live there. +type GroupCache struct { + indexer cache.Indexer + groupsSynced cache.InformerSynced +} + +const ByUserIndexName = "ByUser" + +// ByUserIndexKeys is cache.IndexFunc for Groups that will index groups by User, so that a direct cache lookup +// using a User.Name will return all Groups that User is a member of +func ByUserIndexKeys(obj interface{}) ([]string, error) { + group, ok := obj.(*userapi.Group) + if !ok { + return nil, fmt.Errorf("unexpected type: %v", obj) + } + + return group.Users, nil +} + +func NewGroupCache(groupInformer userinformer.GroupInformer) *GroupCache { + return &GroupCache{ + indexer: groupInformer.Informer().GetIndexer(), + groupsSynced: groupInformer.Informer().HasSynced, + } +} + +func (c *GroupCache) GroupsFor(username string) ([]*userapi.Group, error) { + objs, err := c.indexer.ByIndex(ByUserIndexName, username) + if err != nil { + return nil, err + } + + groups := make([]*userapi.Group, len(objs)) + for i := range objs { + groups[i] = objs[i].(*userapi.Group) + } + + return groups, nil +} + +func (c *GroupCache) HasSynced() bool { + return c.groupsSynced() +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/doc.go b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/doc.go new file mode 100644 index 0000000000000..7f2a6f888d472 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package clusterresourceoverride diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/name.go b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/name.go new file mode 100644 index 0000000000000..f136def581ed5 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/name.go @@ -0,0 +1,4 @@ +package clusterresourceoverride + +const PluginName = "autoscaling.openshift.io/ClusterResourceOverride" +const ConfigKind = "ClusterResourceOverrideConfig" diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/register.go b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/register.go new file mode 100644 index 0000000000000..5308853cfd134 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/register.go @@ -0,0 +1,23 @@ +package clusterresourceoverride + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var GroupVersion = schema.GroupVersion{Group: "autoscaling.openshift.io", Version: runtime.APIVersionInternal} + +var ( + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + Install = schemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &ClusterResourceOverrideConfig{}, + ) + return nil +} + +func (obj *ClusterResourceOverrideConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/types.go b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/types.go new file mode 100644 index 0000000000000..3718e265caafa --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/types.go @@ -0,0 +1,24 @@ +package clusterresourceoverride + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterResourceOverrideConfig is the configuration for the ClusterResourceOverride +// admission controller which overrides user-provided container request/limit values. +type ClusterResourceOverrideConfig struct { + metav1.TypeMeta + // For each of the following, if a non-zero ratio is specified then the initial + // value (if any) in the pod spec is overwritten according to the ratio. + // LimitRange defaults are merged prior to the override. + // + // LimitCPUToMemoryPercent (if > 0) overrides the CPU limit to a ratio of the memory limit; + // 100% overrides CPU to 1 core per 1GiB of RAM. This is done before overriding the CPU request. + LimitCPUToMemoryPercent int64 + // CPURequestToLimitPercent (if > 0) overrides CPU request to a percentage of CPU limit + CPURequestToLimitPercent int64 + // MemoryRequestToLimitPercent (if > 0) overrides memory request to a percentage of memory limit + MemoryRequestToLimitPercent int64 +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/doc.go b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/doc.go new file mode 100644 index 0000000000000..7397986b23605 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/doc.go @@ -0,0 +1,5 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride + +// Package v1 is the v1 version of the API. +package v1 diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/register.go b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/register.go new file mode 100644 index 0000000000000..91d44566e3476 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/register.go @@ -0,0 +1,27 @@ +package v1 + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + + "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride" +) + +func (obj *ClusterResourceOverrideConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } + +var GroupVersion = schema.GroupVersion{Group: "autoscaling.openshift.io", Version: "v1"} + +var ( + localSchemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + clusterresourceoverride.Install, + ) + Install = localSchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &ClusterResourceOverrideConfig{}, + ) + return nil +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/swagger_doc.go b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/swagger_doc.go new file mode 100644 index 0000000000000..f909b0db2ee4f --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/swagger_doc.go @@ -0,0 +1,17 @@ +package v1 + +// This file contains methods that can be used by the go-restful package to generate Swagger +// documentation for the object types found in 'types.go' This file is automatically generated +// by hack/update-generated-swagger-descriptions.sh and should be run after a full build of OpenShift. +// ==== DO NOT EDIT THIS FILE MANUALLY ==== + +var map_ClusterResourceOverrideConfig = map[string]string{ + "": "ClusterResourceOverrideConfig is the configuration for the ClusterResourceOverride admission controller which overrides user-provided container request/limit values.", + "limitCPUToMemoryPercent": "For each of the following, if a non-zero ratio is specified then the initial value (if any) in the pod spec is overwritten according to the ratio. LimitRange defaults are merged prior to the override.\n\nLimitCPUToMemoryPercent (if > 0) overrides the CPU limit to a ratio of the memory limit; 100% overrides CPU to 1 core per 1GiB of RAM. This is done before overriding the CPU request.", + "cpuRequestToLimitPercent": "CPURequestToLimitPercent (if > 0) overrides CPU request to a percentage of CPU limit", + "memoryRequestToLimitPercent": "MemoryRequestToLimitPercent (if > 0) overrides memory request to a percentage of memory limit", +} + +func (ClusterResourceOverrideConfig) SwaggerDoc() map[string]string { + return map_ClusterResourceOverrideConfig +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/types.go b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/types.go new file mode 100644 index 0000000000000..9a56034174e15 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/types.go @@ -0,0 +1,24 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterResourceOverrideConfig is the configuration for the ClusterResourceOverride +// admission controller which overrides user-provided container request/limit values. +type ClusterResourceOverrideConfig struct { + metav1.TypeMeta `json:",inline"` + // For each of the following, if a non-zero ratio is specified then the initial + // value (if any) in the pod spec is overwritten according to the ratio. + // LimitRange defaults are merged prior to the override. + // + // LimitCPUToMemoryPercent (if > 0) overrides the CPU limit to a ratio of the memory limit; + // 100% overrides CPU to 1 core per 1GiB of RAM. This is done before overriding the CPU request. + LimitCPUToMemoryPercent int64 `json:"limitCPUToMemoryPercent"` + // CPURequestToLimitPercent (if > 0) overrides CPU request to a percentage of CPU limit + CPURequestToLimitPercent int64 `json:"cpuRequestToLimitPercent"` + // MemoryRequestToLimitPercent (if > 0) overrides memory request to a percentage of memory limit + MemoryRequestToLimitPercent int64 `json:"memoryRequestToLimitPercent"` +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..14255bad29a36 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.deepcopy.go @@ -0,0 +1,34 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterResourceOverrideConfig) DeepCopyInto(out *ClusterResourceOverrideConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterResourceOverrideConfig. +func (in *ClusterResourceOverrideConfig) DeepCopy() *ClusterResourceOverrideConfig { + if in == nil { + return nil + } + out := new(ClusterResourceOverrideConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterResourceOverrideConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/validation/validation.go b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/validation/validation.go new file mode 100644 index 0000000000000..14cdcdd586abf --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/validation/validation.go @@ -0,0 +1,27 @@ +package validation + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + + "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride" +) + +func Validate(config *clusterresourceoverride.ClusterResourceOverrideConfig) field.ErrorList { + allErrs := field.ErrorList{} + if config == nil { + return allErrs + } + if config.LimitCPUToMemoryPercent == 0 && config.CPURequestToLimitPercent == 0 && config.MemoryRequestToLimitPercent == 0 { + allErrs = append(allErrs, field.Forbidden(field.NewPath(clusterresourceoverride.PluginName), "plugin enabled but no percentages were specified")) + } + if config.LimitCPUToMemoryPercent < 0 { + allErrs = append(allErrs, field.Invalid(field.NewPath(clusterresourceoverride.PluginName, "LimitCPUToMemoryPercent"), config.LimitCPUToMemoryPercent, "must be positive")) + } + if config.CPURequestToLimitPercent < 0 || config.CPURequestToLimitPercent > 100 { + allErrs = append(allErrs, field.Invalid(field.NewPath(clusterresourceoverride.PluginName, "CPURequestToLimitPercent"), config.CPURequestToLimitPercent, "must be between 0 and 100")) + } + if config.MemoryRequestToLimitPercent < 0 || config.MemoryRequestToLimitPercent > 100 { + allErrs = append(allErrs, field.Invalid(field.NewPath(clusterresourceoverride.PluginName, "MemoryRequestToLimitPercent"), config.MemoryRequestToLimitPercent, "must be between 0 and 100")) + } + return allErrs +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..09414272c2210 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/zz_generated.deepcopy.go @@ -0,0 +1,34 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package clusterresourceoverride + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterResourceOverrideConfig) DeepCopyInto(out *ClusterResourceOverrideConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterResourceOverrideConfig. +func (in *ClusterResourceOverrideConfig) DeepCopy() *ClusterResourceOverrideConfig { + if in == nil { + return nil + } + out := new(ClusterResourceOverrideConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterResourceOverrideConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/doc.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/doc.go new file mode 100644 index 0000000000000..2eb498613c0ad --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package runonceduration diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/register.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/register.go new file mode 100644 index 0000000000000..379c2be1ed1a5 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/register.go @@ -0,0 +1,34 @@ +package runonceduration + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// SchemeGroupVersion is group version used to register these objects +var GroupVersion = schema.GroupVersion{Group: "autoscaling.openshift.io", Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns back a Group qualified GroupKind +func Kind(kind string) schema.GroupKind { + return GroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns back a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return GroupVersion.WithResource(resource).GroupResource() +} + +var ( + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + Install = schemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &RunOnceDurationConfig{}, + ) + return nil +} + +func (obj *RunOnceDurationConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/types.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/types.go new file mode 100644 index 0000000000000..1a9f5a112c90a --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/types.go @@ -0,0 +1,26 @@ +package runonceduration + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RunOnceDurationConfig is the configuration for the RunOnceDuration plugin. +// It specifies a maximum value for ActiveDeadlineSeconds for a run-once pod. +// The project that contains the pod may specify a different setting. That setting will +// take precedence over the one configured for the plugin here. +type RunOnceDurationConfig struct { + metav1.TypeMeta + + // ActiveDeadlineSecondsOverride is the maximum value to set on containers of run-once pods + // Only a positive value is valid. Absence of a value means that the plugin + // won't make any changes to the pod + ActiveDeadlineSecondsOverride *int64 +} + +// ActiveDeadlineSecondsLimitAnnotation can be set on a project to limit the number of +// seconds that a run-once pod can be active in that project +// TODO: this label needs to change to reflect its function. It's a limit, not an override. +// It is kept this way for compatibility. Only change it in a new version of the API. +const ActiveDeadlineSecondsLimitAnnotation = "openshift.io/active-deadline-seconds-override" diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/conversion.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/conversion.go new file mode 100644 index 0000000000000..31253537849a6 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/conversion.go @@ -0,0 +1,26 @@ +package v1 + +import ( + "k8s.io/apimachinery/pkg/conversion" + "k8s.io/apimachinery/pkg/runtime" + + internal "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration" +) + +func addConversionFuncs(scheme *runtime.Scheme) error { + err := scheme.AddConversionFunc((*RunOnceDurationConfig)(nil), (*internal.RunOnceDurationConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + in := a.(*RunOnceDurationConfig) + out := b.(*internal.RunOnceDurationConfig) + out.ActiveDeadlineSecondsOverride = in.ActiveDeadlineSecondsOverride + return nil + }) + if err != nil { + return err + } + return scheme.AddConversionFunc((*internal.RunOnceDurationConfig)(nil), (*RunOnceDurationConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + in := a.(*internal.RunOnceDurationConfig) + out := b.(*RunOnceDurationConfig) + out.ActiveDeadlineSecondsOverride = in.ActiveDeadlineSecondsOverride + return nil + }) +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/doc.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/doc.go new file mode 100644 index 0000000000000..f70b886a67a72 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/doc.go @@ -0,0 +1,5 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration + +// Package v1 is the v1 version of the API. +package v1 diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/register.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/register.go new file mode 100644 index 0000000000000..b456123c9fab2 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/register.go @@ -0,0 +1,29 @@ +package v1 + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + + "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration" +) + +func (obj *RunOnceDurationConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } + +var GroupVersion = schema.GroupVersion{Group: "autoscaling.openshift.io", Version: "v1"} + +var ( + localSchemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + runonceduration.Install, + + addConversionFuncs, + ) + Install = localSchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &RunOnceDurationConfig{}, + ) + return nil +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/swagger_doc.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/swagger_doc.go new file mode 100644 index 0000000000000..1cb7c3cdb319f --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/swagger_doc.go @@ -0,0 +1,15 @@ +package v1 + +// This file contains methods that can be used by the go-restful package to generate Swagger +// documentation for the object types found in 'types.go' This file is automatically generated +// by hack/update-generated-swagger-descriptions.sh and should be run after a full build of OpenShift. +// ==== DO NOT EDIT THIS FILE MANUALLY ==== + +var map_RunOnceDurationConfig = map[string]string{ + "": "RunOnceDurationConfig is the configuration for the RunOnceDuration plugin. It specifies a maximum value for ActiveDeadlineSeconds for a run-once pod. The project that contains the pod may specify a different setting. That setting will take precedence over the one configured for the plugin here.", + "activeDeadlineSecondsOverride": "ActiveDeadlineSecondsOverride is the maximum value to set on containers of run-once pods Only a positive value is valid. Absence of a value means that the plugin won't make any changes to the pod It is kept this way for compatibility. Only change it in a new version of the API.", +} + +func (RunOnceDurationConfig) SwaggerDoc() map[string]string { + return map_RunOnceDurationConfig +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/types.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/types.go new file mode 100644 index 0000000000000..4cfa3823ba10b --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/types.go @@ -0,0 +1,22 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RunOnceDurationConfig is the configuration for the RunOnceDuration plugin. +// It specifies a maximum value for ActiveDeadlineSeconds for a run-once pod. +// The project that contains the pod may specify a different setting. That setting will +// take precedence over the one configured for the plugin here. +type RunOnceDurationConfig struct { + metav1.TypeMeta `json:",inline"` + + // ActiveDeadlineSecondsOverride is the maximum value to set on containers of run-once pods + // Only a positive value is valid. Absence of a value means that the plugin + // won't make any changes to the pod + // TODO: change the external name of this field to reflect that it is a limit, not an override + // It is kept this way for compatibility. Only change it in a new version of the API. + ActiveDeadlineSecondsOverride *int64 `json:"activeDeadlineSecondsOverride,omitempty" description:"maximum value for activeDeadlineSeconds in run-once pods"` +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..3000ba62bd174 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.deepcopy.go @@ -0,0 +1,39 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RunOnceDurationConfig) DeepCopyInto(out *RunOnceDurationConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.ActiveDeadlineSecondsOverride != nil { + in, out := &in.ActiveDeadlineSecondsOverride, &out.ActiveDeadlineSecondsOverride + *out = new(int64) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunOnceDurationConfig. +func (in *RunOnceDurationConfig) DeepCopy() *RunOnceDurationConfig { + if in == nil { + return nil + } + out := new(RunOnceDurationConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RunOnceDurationConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation/validation.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation/validation.go new file mode 100644 index 0000000000000..7ddcad869845a --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation/validation.go @@ -0,0 +1,18 @@ +package validation + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration" +) + +// ValidateRunOnceDurationConfig validates the RunOnceDuration plugin configuration +func ValidateRunOnceDurationConfig(config *runonceduration.RunOnceDurationConfig) field.ErrorList { + allErrs := field.ErrorList{} + if config == nil || config.ActiveDeadlineSecondsOverride == nil { + return allErrs + } + if *config.ActiveDeadlineSecondsOverride <= 0 { + allErrs = append(allErrs, field.Invalid(field.NewPath("activeDeadlineSecondsOverride"), config.ActiveDeadlineSecondsOverride, "must be greater than 0")) + } + return allErrs +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation/validation_test.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation/validation_test.go new file mode 100644 index 0000000000000..19f6f6d70544b --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation/validation_test.go @@ -0,0 +1,29 @@ +package validation + +import ( + "testing" + + "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration" +) + +func TestRunOnceDurationConfigValidation(t *testing.T) { + // Check invalid duration returns an error + var invalidSecs int64 = -1 + invalidConfig := &runonceduration.RunOnceDurationConfig{ + ActiveDeadlineSecondsOverride: &invalidSecs, + } + errs := ValidateRunOnceDurationConfig(invalidConfig) + if len(errs) == 0 { + t.Errorf("Did not get expected error on invalid config") + } + + // Check that valid duration returns no error + var validSecs int64 = 5 + validConfig := &runonceduration.RunOnceDurationConfig{ + ActiveDeadlineSecondsOverride: &validSecs, + } + errs = ValidateRunOnceDurationConfig(validConfig) + if len(errs) > 0 { + t.Errorf("Unexpected error on valid config") + } +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..b87ed7a25b492 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/zz_generated.deepcopy.go @@ -0,0 +1,39 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package runonceduration + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RunOnceDurationConfig) DeepCopyInto(out *RunOnceDurationConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.ActiveDeadlineSecondsOverride != nil { + in, out := &in.ActiveDeadlineSecondsOverride, &out.ActiveDeadlineSecondsOverride + *out = new(int64) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunOnceDurationConfig. +func (in *RunOnceDurationConfig) DeepCopy() *RunOnceDurationConfig { + if in == nil { + return nil + } + out := new(RunOnceDurationConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RunOnceDurationConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/admission.go b/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/admission.go new file mode 100644 index 0000000000000..6aed487fdef13 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/admission.go @@ -0,0 +1,348 @@ +package clusterresourceoverride + +import ( + "context" + "fmt" + "io" + "strings" + + "github.com/openshift/library-go/pkg/config/helpers" + v1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1" + + "k8s.io/klog/v2" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/client-go/informers" + "k8s.io/client-go/kubernetes" + corev1listers "k8s.io/client-go/listers/core/v1" + coreapi "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/plugin/pkg/admission/limitranger" + + api "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/validation" +) + +const ( + clusterResourceOverrideAnnotation = "autoscaling.openshift.io/cluster-resource-override-enabled" + cpuBaseScaleFactor = 1000.0 / (1024.0 * 1024.0 * 1024.0) // 1000 milliCores per 1GiB +) + +var ( + cpuFloor = resource.MustParse("1m") + memFloor = resource.MustParse("1Mi") +) + +func Register(plugins *admission.Plugins) { + plugins.Register(api.PluginName, + func(config io.Reader) (admission.Interface, error) { + pluginConfig, err := ReadConfig(config) + if err != nil { + return nil, err + } + if pluginConfig == nil { + klog.Infof("Admission plugin %q is not configured so it will be disabled.", api.PluginName) + return nil, nil + } + return newClusterResourceOverride(pluginConfig) + }) +} + +type internalConfig struct { + limitCPUToMemoryRatio float64 + cpuRequestToLimitRatio float64 + memoryRequestToLimitRatio float64 +} +type clusterResourceOverridePlugin struct { + *admission.Handler + config *internalConfig + nsLister corev1listers.NamespaceLister + LimitRanger *limitranger.LimitRanger + limitRangesLister corev1listers.LimitRangeLister +} + +var _ = initializer.WantsExternalKubeInformerFactory(&clusterResourceOverridePlugin{}) +var _ = initializer.WantsExternalKubeClientSet(&clusterResourceOverridePlugin{}) +var _ = admission.MutationInterface(&clusterResourceOverridePlugin{}) +var _ = admission.ValidationInterface(&clusterResourceOverridePlugin{}) + +// newClusterResourceOverride returns an admission controller for containers that +// configurably overrides container resource request/limits +func newClusterResourceOverride(config *api.ClusterResourceOverrideConfig) (admission.Interface, error) { + klog.V(2).Infof("%s admission controller loaded with config: %v", api.PluginName, config) + var internal *internalConfig + if config != nil { + internal = &internalConfig{ + limitCPUToMemoryRatio: float64(config.LimitCPUToMemoryPercent) / 100, + cpuRequestToLimitRatio: float64(config.CPURequestToLimitPercent) / 100, + memoryRequestToLimitRatio: float64(config.MemoryRequestToLimitPercent) / 100, + } + } + + limitRanger, err := limitranger.NewLimitRanger(nil) + if err != nil { + return nil, err + } + + return &clusterResourceOverridePlugin{ + Handler: admission.NewHandler(admission.Create), + config: internal, + LimitRanger: limitRanger, + }, nil +} + +func (d *clusterResourceOverridePlugin) SetExternalKubeClientSet(c kubernetes.Interface) { + d.LimitRanger.SetExternalKubeClientSet(c) +} + +func (d *clusterResourceOverridePlugin) SetExternalKubeInformerFactory(kubeInformers informers.SharedInformerFactory) { + d.LimitRanger.SetExternalKubeInformerFactory(kubeInformers) + d.limitRangesLister = kubeInformers.Core().V1().LimitRanges().Lister() + d.nsLister = kubeInformers.Core().V1().Namespaces().Lister() +} + +func ReadConfig(configFile io.Reader) (*api.ClusterResourceOverrideConfig, error) { + obj, err := helpers.ReadYAMLToInternal(configFile, api.Install, v1.Install) + if err != nil { + klog.V(5).Infof("%s error reading config: %v", api.PluginName, err) + return nil, err + } + if obj == nil { + return nil, nil + } + config, ok := obj.(*api.ClusterResourceOverrideConfig) + if !ok { + return nil, fmt.Errorf("unexpected config object: %#v", obj) + } + klog.V(5).Infof("%s config is: %v", api.PluginName, config) + if errs := validation.Validate(config); len(errs) > 0 { + return nil, errs.ToAggregate() + } + + return config, nil +} + +func (a *clusterResourceOverridePlugin) ValidateInitialization() error { + if a.nsLister == nil { + return fmt.Errorf("%s did not get a namespace lister", api.PluginName) + } + return a.LimitRanger.ValidateInitialization() +} + +// this a real shame to be special cased. +var ( + forbiddenNames = []string{"openshift", "kubernetes", "kube"} + forbiddenPrefixes = []string{"openshift-", "kubernetes-", "kube-"} +) + +func isExemptedNamespace(name string) bool { + for _, s := range forbiddenNames { + if name == s { + return true + } + } + for _, s := range forbiddenPrefixes { + if strings.HasPrefix(name, s) { + return true + } + } + return false +} + +func (a *clusterResourceOverridePlugin) Admit(ctx context.Context, attr admission.Attributes, o admission.ObjectInterfaces) error { + return a.admit(ctx, attr, true, o) +} + +func (a *clusterResourceOverridePlugin) Validate(ctx context.Context, attr admission.Attributes, o admission.ObjectInterfaces) error { + return a.admit(ctx, attr, false, o) +} + +// TODO this will need to update when we have pod requests/limits +func (a *clusterResourceOverridePlugin) admit(ctx context.Context, attr admission.Attributes, mutationAllowed bool, o admission.ObjectInterfaces) error { + klog.V(6).Infof("%s admission controller is invoked", api.PluginName) + if a.config == nil || attr.GetResource().GroupResource() != coreapi.Resource("pods") || attr.GetSubresource() != "" { + return nil // not applicable + } + pod, ok := attr.GetObject().(*coreapi.Pod) + if !ok { + return admission.NewForbidden(attr, fmt.Errorf("unexpected object: %#v", attr.GetObject())) + } + klog.V(5).Infof("%s is looking at creating pod %s in project %s", api.PluginName, pod.Name, attr.GetNamespace()) + + // allow annotations on project to override + ns, err := a.nsLister.Get(attr.GetNamespace()) + if err != nil { + klog.Warningf("%s got an error retrieving namespace: %v", api.PluginName, err) + return admission.NewForbidden(attr, err) // this should not happen though + } + + projectEnabledPlugin, exists := ns.Annotations[clusterResourceOverrideAnnotation] + if exists && projectEnabledPlugin != "true" { + klog.V(5).Infof("%s is disabled for project %s", api.PluginName, attr.GetNamespace()) + return nil // disabled for this project, do nothing + } + + if isExemptedNamespace(ns.Name) { + klog.V(5).Infof("%s is skipping exempted project %s", api.PluginName, attr.GetNamespace()) + return nil // project is exempted, do nothing + } + + namespaceLimits := []*corev1.LimitRange{} + + if a.limitRangesLister != nil { + limits, err := a.limitRangesLister.LimitRanges(attr.GetNamespace()).List(labels.Everything()) + if err != nil { + return err + } + namespaceLimits = limits + } + + // Don't mutate resource requirements below the namespace + // limit minimums. + nsCPUFloor := minResourceLimits(namespaceLimits, corev1.ResourceCPU) + nsMemFloor := minResourceLimits(namespaceLimits, corev1.ResourceMemory) + + // Reuse LimitRanger logic to apply limit/req defaults from the project. Ignore validation + // errors, assume that LimitRanger will run after this plugin to validate. + klog.V(5).Infof("%s: initial pod limits are: %#v", api.PluginName, pod.Spec) + if err := a.LimitRanger.Admit(ctx, attr, o); err != nil { + klog.V(5).Infof("%s: error from LimitRanger: %#v", api.PluginName, err) + } + klog.V(5).Infof("%s: pod limits after LimitRanger: %#v", api.PluginName, pod.Spec) + for i := range pod.Spec.InitContainers { + if err := updateContainerResources(a.config, &pod.Spec.InitContainers[i], nsCPUFloor, nsMemFloor, mutationAllowed); err != nil { + return admission.NewForbidden(attr, fmt.Errorf("spec.initContainers[%d].%v", i, err)) + } + } + for i := range pod.Spec.Containers { + if err := updateContainerResources(a.config, &pod.Spec.Containers[i], nsCPUFloor, nsMemFloor, mutationAllowed); err != nil { + return admission.NewForbidden(attr, fmt.Errorf("spec.containers[%d].%v", i, err)) + } + } + klog.V(5).Infof("%s: pod limits after overrides are: %#v", api.PluginName, pod.Spec) + return nil +} + +func updateContainerResources(config *internalConfig, container *coreapi.Container, nsCPUFloor, nsMemFloor *resource.Quantity, mutationAllowed bool) error { + resources := container.Resources + memLimit, memFound := resources.Limits[coreapi.ResourceMemory] + if memFound && config.memoryRequestToLimitRatio != 0 { + // memory is measured in whole bytes. + // the plugin rounds down to the nearest MiB rather than bytes to improve ease of use for end-users. + amount := memLimit.Value() * int64(config.memoryRequestToLimitRatio*100) / 100 + // TODO: move into resource.Quantity + var mod int64 + switch memLimit.Format { + case resource.BinarySI: + mod = 1024 * 1024 + default: + mod = 1000 * 1000 + } + if rem := amount % mod; rem != 0 { + amount = amount - rem + } + q := resource.NewQuantity(int64(amount), memLimit.Format) + if memFloor.Cmp(*q) > 0 { + clone := memFloor.DeepCopy() + q = &clone + } + if nsMemFloor != nil && q.Cmp(*nsMemFloor) < 0 { + klog.V(5).Infof("%s: %s pod limit %q below namespace limit; setting limit to %q", api.PluginName, corev1.ResourceMemory, q.String(), nsMemFloor.String()) + clone := nsMemFloor.DeepCopy() + q = &clone + } + if err := applyQuantity(resources.Requests, corev1.ResourceMemory, *q, mutationAllowed); err != nil { + return fmt.Errorf("resources.requests.%s %v", corev1.ResourceMemory, err) + } + } + if memFound && config.limitCPUToMemoryRatio != 0 { + amount := float64(memLimit.Value()) * config.limitCPUToMemoryRatio * cpuBaseScaleFactor + q := resource.NewMilliQuantity(int64(amount), resource.DecimalSI) + if cpuFloor.Cmp(*q) > 0 { + clone := cpuFloor.DeepCopy() + q = &clone + } + if nsCPUFloor != nil && q.Cmp(*nsCPUFloor) < 0 { + klog.V(5).Infof("%s: %s pod limit %q below namespace limit; setting limit to %q", api.PluginName, corev1.ResourceCPU, q.String(), nsCPUFloor.String()) + clone := nsCPUFloor.DeepCopy() + q = &clone + } + if err := applyQuantity(resources.Limits, corev1.ResourceCPU, *q, mutationAllowed); err != nil { + return fmt.Errorf("resources.limits.%s %v", corev1.ResourceCPU, err) + } + } + + cpuLimit, cpuFound := resources.Limits[coreapi.ResourceCPU] + if cpuFound && config.cpuRequestToLimitRatio != 0 { + amount := float64(cpuLimit.MilliValue()) * config.cpuRequestToLimitRatio + q := resource.NewMilliQuantity(int64(amount), cpuLimit.Format) + if cpuFloor.Cmp(*q) > 0 { + clone := cpuFloor.DeepCopy() + q = &clone + } + if nsCPUFloor != nil && q.Cmp(*nsCPUFloor) < 0 { + klog.V(5).Infof("%s: %s pod limit %q below namespace limit; setting limit to %q", api.PluginName, corev1.ResourceCPU, q.String(), nsCPUFloor.String()) + clone := nsCPUFloor.DeepCopy() + q = &clone + } + if err := applyQuantity(resources.Requests, corev1.ResourceCPU, *q, mutationAllowed); err != nil { + return fmt.Errorf("resources.requests.%s %v", corev1.ResourceCPU, err) + } + } + + return nil +} + +func applyQuantity(l coreapi.ResourceList, r corev1.ResourceName, v resource.Quantity, mutationAllowed bool) error { + if mutationAllowed { + l[coreapi.ResourceName(r)] = v + return nil + } + + if oldValue, ok := l[coreapi.ResourceName(r)]; !ok { + return fmt.Errorf("mutated, expected: %v, now absent", v) + } else if oldValue.Cmp(v) != 0 { + return fmt.Errorf("mutated, expected: %v, got %v", v, oldValue) + } + + return nil +} + +// minResourceLimits finds the Min limit for resourceName. Nil is +// returned if limitRanges is empty or limits contains no resourceName +// limits. +func minResourceLimits(limitRanges []*corev1.LimitRange, resourceName corev1.ResourceName) *resource.Quantity { + limits := []*resource.Quantity{} + + for _, limitRange := range limitRanges { + for _, limit := range limitRange.Spec.Limits { + if limit.Type == corev1.LimitTypeContainer { + if limit, found := limit.Min[resourceName]; found { + clone := limit.DeepCopy() + limits = append(limits, &clone) + } + } + } + } + + if len(limits) == 0 { + return nil + } + + return minQuantity(limits) +} + +func minQuantity(quantities []*resource.Quantity) *resource.Quantity { + min := quantities[0].DeepCopy() + + for i := range quantities { + if quantities[i].Cmp(min) < 0 { + min = quantities[i].DeepCopy() + } + } + + return &min +} diff --git a/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/admission_test.go b/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/admission_test.go new file mode 100644 index 0000000000000..d1c54bb140aae --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/admission_test.go @@ -0,0 +1,507 @@ +package clusterresourceoverride + +import ( + "bytes" + "context" + "fmt" + "io" + "reflect" + "testing" + + "github.com/openshift/library-go/pkg/config/helpers" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/authentication/user" + corev1listers "k8s.io/client-go/listers/core/v1" + "k8s.io/client-go/tools/cache" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride" + clusterresourceoverridev1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/validation" + kapi "k8s.io/kubernetes/pkg/apis/core" +) + +const ( + yamlConfig = ` +apiVersion: autoscaling.openshift.io/v1 +kind: ClusterResourceOverrideConfig +limitCPUToMemoryPercent: 100 +cpuRequestToLimitPercent: 10 +memoryRequestToLimitPercent: 25 +` + invalidConfig = ` +apiVersion: autoscaling.openshift.io/v1 +kind: ClusterResourceOverrideConfig +cpuRequestToLimitPercent: 200 +` + invalidConfig2 = ` +apiVersion: autoscaling.openshift.io/v1 +kind: ClusterResourceOverrideConfig +` +) + +var ( + deserializedYamlConfig = &clusterresourceoverride.ClusterResourceOverrideConfig{ + LimitCPUToMemoryPercent: 100, + CPURequestToLimitPercent: 10, + MemoryRequestToLimitPercent: 25, + } +) + +func TestConfigReader(t *testing.T) { + initialConfig := testConfig(10, 20, 30) + serializedConfig, serializationErr := helpers.WriteYAML(initialConfig, clusterresourceoverridev1.Install) + if serializationErr != nil { + t.Fatalf("WriteYAML: config serialize failed: %v", serializationErr) + } + + tests := []struct { + name string + config io.Reader + expectErr bool + expectNil bool + expectInvalid bool + expectedConfig *clusterresourceoverride.ClusterResourceOverrideConfig + }{ + { + name: "process nil config", + config: nil, + expectNil: true, + }, { + name: "deserialize initialConfig yaml", + config: bytes.NewReader(serializedConfig), + expectedConfig: initialConfig, + }, { + name: "completely broken config", + config: bytes.NewReader([]byte("asdfasdfasdF")), + expectErr: true, + }, { + name: "deserialize yamlConfig", + config: bytes.NewReader([]byte(yamlConfig)), + expectedConfig: deserializedYamlConfig, + }, { + name: "choke on out-of-bounds ratio", + config: bytes.NewReader([]byte(invalidConfig)), + expectInvalid: true, + expectErr: true, + }, { + name: "complain about no settings", + config: bytes.NewReader([]byte(invalidConfig2)), + expectInvalid: true, + expectErr: true, + }, + } + for _, test := range tests { + config, err := ReadConfig(test.config) + if test.expectErr && err == nil { + t.Errorf("%s: expected error", test.name) + } else if !test.expectErr && err != nil { + t.Errorf("%s: expected no error, saw %v", test.name, err) + } + if err == nil { + if test.expectNil && config != nil { + t.Errorf("%s: expected nil config, but saw: %v", test.name, config) + } else if !test.expectNil && config == nil { + t.Errorf("%s: expected config, but got nil", test.name) + } + } + if config != nil { + if test.expectedConfig != nil && *test.expectedConfig != *config { + t.Errorf("%s: expected %v from reader, but got %v", test.name, test.expectErr, config) + } + if err := validation.Validate(config); test.expectInvalid && len(err) == 0 { + t.Errorf("%s: expected validation to fail, but it passed", test.name) + } else if !test.expectInvalid && len(err) > 0 { + t.Errorf("%s: expected validation to pass, but it failed with %v", test.name, err) + } + } + } +} + +func TestLimitRequestAdmission(t *testing.T) { + tests := []struct { + name string + config *clusterresourceoverride.ClusterResourceOverrideConfig + pod *kapi.Pod + expectedMemRequest resource.Quantity + expectedCpuLimit resource.Quantity + expectedCpuRequest resource.Quantity + namespace *corev1.Namespace + namespaceLimits []*corev1.LimitRange + }{ + { + name: "ignore pods that have no memory limit specified", + config: testConfig(100, 50, 50), + pod: testBestEffortPod(), + expectedMemRequest: resource.MustParse("0"), + expectedCpuLimit: resource.MustParse("0"), + expectedCpuRequest: resource.MustParse("0"), + namespace: fakeNamespace(true), + }, + { + name: "with namespace limits, ignore pods that have no memory limit specified", + config: testConfig(100, 50, 50), + pod: testBestEffortPod(), + expectedMemRequest: resource.MustParse("0"), + expectedCpuLimit: resource.MustParse("0"), + expectedCpuRequest: resource.MustParse("0"), + namespace: fakeNamespace(true), + namespaceLimits: []*corev1.LimitRange{ + fakeMinCPULimitRange("567m"), + fakeMinCPULimitRange("678m"), + fakeMinMemoryLimitRange("700Gi"), + fakeMinMemoryLimitRange("456Gi"), + }, + }, + { + name: "test floor for memory and cpu", + config: testConfig(100, 50, 50), + pod: testPod("1Mi", "0", "0", "0"), + expectedMemRequest: resource.MustParse("1Mi"), + expectedCpuLimit: resource.MustParse("1m"), + expectedCpuRequest: resource.MustParse("1m"), + namespace: fakeNamespace(true), + }, + { + name: "with namespace limits, test floor for memory and cpu", + config: testConfig(100, 50, 50), + pod: testPod("1Mi", "0", "0", "0"), + expectedMemRequest: resource.MustParse("456Gi"), + expectedCpuLimit: resource.MustParse("567m"), + expectedCpuRequest: resource.MustParse("567m"), + namespace: fakeNamespace(true), + namespaceLimits: []*corev1.LimitRange{ + fakeMinCPULimitRange("567m"), + fakeMinCPULimitRange("678m"), + fakeMinMemoryLimitRange("700Gi"), + fakeMinMemoryLimitRange("456Gi"), + }, + }, + { + name: "nil config", + config: nil, + pod: testPod("1", "1", "1", "1"), + expectedMemRequest: resource.MustParse("1"), + expectedCpuLimit: resource.MustParse("1"), + expectedCpuRequest: resource.MustParse("1"), + namespace: fakeNamespace(true), + }, + { + name: "with namespace limits, nil config", + config: nil, + pod: testPod("1", "1", "1", "1"), + expectedMemRequest: resource.MustParse("1"), + expectedCpuLimit: resource.MustParse("1"), + expectedCpuRequest: resource.MustParse("1"), + namespace: fakeNamespace(true), + namespaceLimits: []*corev1.LimitRange{ + fakeMinCPULimitRange("567m"), + fakeMinCPULimitRange("678m"), + fakeMinMemoryLimitRange("700Gi"), + fakeMinMemoryLimitRange("456Gi"), + }, + }, + { + name: "all values are adjusted", + config: testConfig(100, 50, 50), + pod: testPod("1Gi", "0", "2000m", "0"), + expectedMemRequest: resource.MustParse("512Mi"), + expectedCpuLimit: resource.MustParse("1"), + expectedCpuRequest: resource.MustParse("500m"), + namespace: fakeNamespace(true), + }, + { + name: "with namespace limits, all values are adjusted to floor of namespace limits", + config: testConfig(100, 50, 50), + pod: testPod("1Gi", "0", "2000m", "0"), + expectedMemRequest: resource.MustParse("456Gi"), + expectedCpuLimit: resource.MustParse("10567m"), + expectedCpuRequest: resource.MustParse("10567m"), + namespace: fakeNamespace(true), + namespaceLimits: []*corev1.LimitRange{ + fakeMinCPULimitRange("10567m"), + fakeMinCPULimitRange("20678m"), + fakeMinMemoryLimitRange("700Gi"), + fakeMinMemoryLimitRange("456Gi"), + }, + }, + { + name: "just requests are adjusted", + config: testConfig(0, 50, 50), + pod: testPod("10Mi", "0", "50m", "0"), + expectedMemRequest: resource.MustParse("5Mi"), + expectedCpuLimit: resource.MustParse("50m"), + expectedCpuRequest: resource.MustParse("25m"), + namespace: fakeNamespace(true), + }, + { + name: "with namespace limits, all requests are adjusted to floor of namespace limits", + config: testConfig(0, 50, 50), + pod: testPod("10Mi", "0", "50m", "0"), + expectedMemRequest: resource.MustParse("456Gi"), + expectedCpuLimit: resource.MustParse("50m"), + expectedCpuRequest: resource.MustParse("10567m"), + namespace: fakeNamespace(true), + namespaceLimits: []*corev1.LimitRange{ + fakeMinCPULimitRange("10567m"), + fakeMinCPULimitRange("20678m"), + fakeMinMemoryLimitRange("700Gi"), + fakeMinMemoryLimitRange("456Gi"), + }, + }, + { + name: "project annotation disables overrides", + config: testConfig(0, 50, 50), + pod: testPod("10Mi", "0", "50m", "0"), + expectedMemRequest: resource.MustParse("0"), + expectedCpuLimit: resource.MustParse("50m"), + expectedCpuRequest: resource.MustParse("0"), + namespace: fakeNamespace(false), + }, + { + name: "with namespace limits, project annotation disables overrides", + config: testConfig(0, 50, 50), + pod: testPod("10Mi", "0", "50m", "0"), + expectedMemRequest: resource.MustParse("0"), + expectedCpuLimit: resource.MustParse("50m"), + expectedCpuRequest: resource.MustParse("0"), + namespace: fakeNamespace(false), + namespaceLimits: []*corev1.LimitRange{ + fakeMinCPULimitRange("10567m"), + fakeMinCPULimitRange("20678m"), + fakeMinMemoryLimitRange("700Gi"), + fakeMinMemoryLimitRange("456Gi"), + }, + }, + { + name: "large values don't overflow", + config: testConfig(100, 50, 50), + pod: testPod("1Ti", "0", "0", "0"), + expectedMemRequest: resource.MustParse("512Gi"), + expectedCpuLimit: resource.MustParse("1024"), + expectedCpuRequest: resource.MustParse("512"), + namespace: fakeNamespace(true), + }, + { + name: "little values mess things up", + config: testConfig(500, 10, 10), + pod: testPod("1.024Mi", "0", "0", "0"), + expectedMemRequest: resource.MustParse("1Mi"), + expectedCpuLimit: resource.MustParse("5m"), + expectedCpuRequest: resource.MustParse("1m"), + namespace: fakeNamespace(true), + }, + { + name: "test fractional memory requests round up", + config: testConfig(500, 10, 60), + pod: testPod("512Mi", "0", "0", "0"), + expectedMemRequest: resource.MustParse("307Mi"), + expectedCpuLimit: resource.MustParse("2.5"), + expectedCpuRequest: resource.MustParse("250m"), + namespace: fakeNamespace(true), + }, + { + name: "test only containers types are considered with namespace limits", + config: testConfig(100, 50, 50), + pod: testPod("1Gi", "0", "2000m", "0"), + expectedMemRequest: resource.MustParse("512Mi"), + expectedCpuLimit: resource.MustParse("1"), + expectedCpuRequest: resource.MustParse("500m"), + namespace: fakeNamespace(true), + namespaceLimits: []*corev1.LimitRange{ + fakeMinStorageLimitRange("1567Mi"), + }, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + c, err := newClusterResourceOverride(test.config) + if err != nil { + t.Fatalf("%s: config de/serialize failed: %v", test.name, err) + } + // Override LimitRanger with limits from test case + c.(*clusterResourceOverridePlugin).limitRangesLister = fakeLimitRangeLister{ + namespaceLister: fakeLimitRangeNamespaceLister{ + limits: test.namespaceLimits, + }, + } + c.(*clusterResourceOverridePlugin).nsLister = fakeNamespaceLister(test.namespace) + attrs := admission.NewAttributesRecord(test.pod, nil, schema.GroupVersionKind{}, test.namespace.Name, "name", kapi.Resource("pods").WithVersion("version"), "", admission.Create, nil, false, fakeUser()) + clone := test.pod.DeepCopy() + if err = c.(admission.MutationInterface).Admit(context.TODO(), attrs, nil); err != nil { + t.Fatalf("%s: admission controller returned error: %v", test.name, err) + } + if err = c.(admission.ValidationInterface).Validate(context.TODO(), attrs, nil); err != nil { + t.Fatalf("%s: admission controller returned error: %v", test.name, err) + } + + if !reflect.DeepEqual(test.pod, clone) { + attrs := admission.NewAttributesRecord(clone, nil, schema.GroupVersionKind{}, test.namespace.Name, "name", kapi.Resource("pods").WithVersion("version"), "", admission.Create, nil, false, fakeUser()) + if err = c.(admission.ValidationInterface).Validate(context.TODO(), attrs, nil); err == nil { + t.Fatalf("%s: admission controller returned no error, but should", test.name) + } + } + + resources := test.pod.Spec.InitContainers[0].Resources // only test one container + if actual := resources.Requests[kapi.ResourceMemory]; test.expectedMemRequest.Cmp(actual) != 0 { + t.Errorf("%s: memory requests do not match; %v should be %v", test.name, actual, test.expectedMemRequest) + } + if actual := resources.Requests[kapi.ResourceCPU]; test.expectedCpuRequest.Cmp(actual) != 0 { + t.Errorf("%s: cpu requests do not match; %v should be %v", test.name, actual, test.expectedCpuRequest) + } + if actual := resources.Limits[kapi.ResourceCPU]; test.expectedCpuLimit.Cmp(actual) != 0 { + t.Errorf("%s: cpu limits do not match; %v should be %v", test.name, actual, test.expectedCpuLimit) + } + + resources = test.pod.Spec.Containers[0].Resources // only test one container + if actual := resources.Requests[kapi.ResourceMemory]; test.expectedMemRequest.Cmp(actual) != 0 { + t.Errorf("%s: memory requests do not match; %v should be %v", test.name, actual, test.expectedMemRequest) + } + if actual := resources.Requests[kapi.ResourceCPU]; test.expectedCpuRequest.Cmp(actual) != 0 { + t.Errorf("%s: cpu requests do not match; %v should be %v", test.name, actual, test.expectedCpuRequest) + } + if actual := resources.Limits[kapi.ResourceCPU]; test.expectedCpuLimit.Cmp(actual) != 0 { + t.Errorf("%s: cpu limits do not match; %v should be %v", test.name, actual, test.expectedCpuLimit) + } + }) + } +} + +func testBestEffortPod() *kapi.Pod { + return &kapi.Pod{ + Spec: kapi.PodSpec{ + InitContainers: []kapi.Container{ + { + Resources: kapi.ResourceRequirements{}, + }, + }, + Containers: []kapi.Container{ + { + Resources: kapi.ResourceRequirements{}, + }, + }, + }, + } +} + +func testPod(memLimit string, memRequest string, cpuLimit string, cpuRequest string) *kapi.Pod { + return &kapi.Pod{ + Spec: kapi.PodSpec{ + InitContainers: []kapi.Container{ + { + Resources: kapi.ResourceRequirements{ + Limits: kapi.ResourceList{ + kapi.ResourceCPU: resource.MustParse(cpuLimit), + kapi.ResourceMemory: resource.MustParse(memLimit), + }, + Requests: kapi.ResourceList{ + kapi.ResourceCPU: resource.MustParse(cpuRequest), + kapi.ResourceMemory: resource.MustParse(memRequest), + }, + }, + }, + }, + Containers: []kapi.Container{ + { + Resources: kapi.ResourceRequirements{ + Limits: kapi.ResourceList{ + kapi.ResourceCPU: resource.MustParse(cpuLimit), + kapi.ResourceMemory: resource.MustParse(memLimit), + }, + Requests: kapi.ResourceList{ + kapi.ResourceCPU: resource.MustParse(cpuRequest), + kapi.ResourceMemory: resource.MustParse(memRequest), + }, + }, + }, + }, + }, + } +} + +func fakeUser() user.Info { + return &user.DefaultInfo{ + Name: "testuser", + } +} + +var nsIndex = 0 + +func fakeNamespace(pluginEnabled bool) *corev1.Namespace { + nsIndex++ + ns := &corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: fmt.Sprintf("fakeNS%d", nsIndex), + Annotations: map[string]string{}, + }, + } + if !pluginEnabled { + ns.Annotations[clusterResourceOverrideAnnotation] = "false" + } + return ns +} + +func fakeNamespaceLister(ns *corev1.Namespace) corev1listers.NamespaceLister { + indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{}) + indexer.Add(ns) + return corev1listers.NewNamespaceLister(indexer) +} + +func testConfig(lc2mr int64, cr2lr int64, mr2lr int64) *clusterresourceoverride.ClusterResourceOverrideConfig { + return &clusterresourceoverride.ClusterResourceOverrideConfig{ + LimitCPUToMemoryPercent: lc2mr, + CPURequestToLimitPercent: cr2lr, + MemoryRequestToLimitPercent: mr2lr, + } +} + +func fakeMinLimitRange(limitType corev1.LimitType, resourceType corev1.ResourceName, limits ...string) *corev1.LimitRange { + r := &corev1.LimitRange{} + + for i := range limits { + rl := corev1.ResourceList{} + rl[resourceType] = resource.MustParse(limits[i]) + r.Spec.Limits = append(r.Spec.Limits, + corev1.LimitRangeItem{ + Type: limitType, + Min: rl, + }, + ) + } + + return r +} + +func fakeMinMemoryLimitRange(limits ...string) *corev1.LimitRange { + return fakeMinLimitRange(corev1.LimitTypeContainer, corev1.ResourceMemory, limits...) +} + +func fakeMinCPULimitRange(limits ...string) *corev1.LimitRange { + return fakeMinLimitRange(corev1.LimitTypeContainer, corev1.ResourceCPU, limits...) +} + +func fakeMinStorageLimitRange(limits ...string) *corev1.LimitRange { + return fakeMinLimitRange(corev1.LimitTypePersistentVolumeClaim, corev1.ResourceStorage, limits...) +} + +type fakeLimitRangeLister struct { + corev1listers.LimitRangeLister + namespaceLister fakeLimitRangeNamespaceLister +} + +type fakeLimitRangeNamespaceLister struct { + corev1listers.LimitRangeNamespaceLister + limits []*corev1.LimitRange +} + +func (f fakeLimitRangeLister) LimitRanges(namespace string) corev1listers.LimitRangeNamespaceLister { + return f.namespaceLister +} + +func (f fakeLimitRangeNamespaceLister) List(selector labels.Selector) ([]*corev1.LimitRange, error) { + return f.limits, nil +} diff --git a/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/doc.go b/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/doc.go new file mode 100644 index 0000000000000..aaf2176af054a --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/doc.go @@ -0,0 +1,8 @@ +package clusterresourceoverride + +// The ClusterResourceOverride plugin is only active when admission control config is supplied for it. +// The plugin allows administrators to override user-provided container request/limit values +// in order to control overcommit and optionally pin CPU to memory. +// The plugin's actions can be disabled per-project with the project annotation +// autoscaling.openshift.io/cluster-resource-override-enabled="false", so cluster admins +// can exempt infrastructure projects and such from the overrides. diff --git a/openshift-kube-apiserver/admission/autoscaling/runonceduration/admission.go b/openshift-kube-apiserver/admission/autoscaling/runonceduration/admission.go new file mode 100644 index 0000000000000..9326205f9b333 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/runonceduration/admission.go @@ -0,0 +1,148 @@ +package runonceduration + +import ( + "context" + "errors" + "fmt" + "io" + "strconv" + + "k8s.io/klog/v2" + + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/client-go/informers" + kapi "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/utils/integer" + + "github.com/openshift/library-go/pkg/config/helpers" + corev1listers "k8s.io/client-go/listers/core/v1" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration" + v1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation" +) + +func Register(plugins *admission.Plugins) { + plugins.Register("autoscaling.openshift.io/RunOnceDuration", + func(config io.Reader) (admission.Interface, error) { + pluginConfig, err := readConfig(config) + if err != nil { + return nil, err + } + if pluginConfig == nil { + klog.Infof("Admission plugin %q is not configured so it will be disabled.", "autoscaling.openshift.io/RunOnceDuration") + return nil, nil + } + return NewRunOnceDuration(pluginConfig), nil + }) +} + +func readConfig(reader io.Reader) (*runonceduration.RunOnceDurationConfig, error) { + obj, err := helpers.ReadYAMLToInternal(reader, runonceduration.Install, v1.Install) + if err != nil { + return nil, err + } + if obj == nil { + return nil, nil + } + config, ok := obj.(*runonceduration.RunOnceDurationConfig) + if !ok { + return nil, fmt.Errorf("unexpected config object %#v", obj) + } + errs := validation.ValidateRunOnceDurationConfig(config) + if len(errs) > 0 { + return nil, errs.ToAggregate() + } + return config, nil +} + +// NewRunOnceDuration creates a new RunOnceDuration admission plugin +func NewRunOnceDuration(config *runonceduration.RunOnceDurationConfig) admission.Interface { + return &runOnceDuration{ + Handler: admission.NewHandler(admission.Create), + config: config, + } +} + +type runOnceDuration struct { + *admission.Handler + config *runonceduration.RunOnceDurationConfig + nsLister corev1listers.NamespaceLister +} + +var _ = initializer.WantsExternalKubeInformerFactory(&runOnceDuration{}) + +func (a *runOnceDuration) Admit(ctx context.Context, attributes admission.Attributes, _ admission.ObjectInterfaces) error { + switch { + case a.config == nil, + attributes.GetResource().GroupResource() != kapi.Resource("pods"), + len(attributes.GetSubresource()) > 0: + return nil + } + pod, ok := attributes.GetObject().(*kapi.Pod) + if !ok { + return admission.NewForbidden(attributes, fmt.Errorf("unexpected object: %#v", attributes.GetObject())) + } + + // Only update pods with a restart policy of Never or OnFailure + switch pod.Spec.RestartPolicy { + case kapi.RestartPolicyNever, + kapi.RestartPolicyOnFailure: + // continue + default: + return nil + } + + appliedProjectLimit, err := a.applyProjectAnnotationLimit(attributes.GetNamespace(), pod) + if err != nil { + return admission.NewForbidden(attributes, err) + } + + if !appliedProjectLimit && a.config.ActiveDeadlineSecondsOverride != nil { + pod.Spec.ActiveDeadlineSeconds = int64MinP(a.config.ActiveDeadlineSecondsOverride, pod.Spec.ActiveDeadlineSeconds) + } + return nil +} + +func (a *runOnceDuration) SetExternalKubeInformerFactory(kubeInformers informers.SharedInformerFactory) { + a.nsLister = kubeInformers.Core().V1().Namespaces().Lister() +} + +func (a *runOnceDuration) ValidateInitialization() error { + if a.nsLister == nil { + return errors.New("autoscaling.openshift.io/RunOnceDuration plugin requires a namespace listers") + } + return nil +} + +func (a *runOnceDuration) applyProjectAnnotationLimit(namespace string, pod *kapi.Pod) (bool, error) { + ns, err := a.nsLister.Get(namespace) + if err != nil { + return false, fmt.Errorf("error looking up pod namespace: %v", err) + } + if ns.Annotations == nil { + return false, nil + } + limit, hasLimit := ns.Annotations[runonceduration.ActiveDeadlineSecondsLimitAnnotation] + if !hasLimit { + return false, nil + } + limitInt64, err := strconv.ParseInt(limit, 10, 64) + if err != nil { + return false, fmt.Errorf("cannot parse the ActiveDeadlineSeconds limit (%s) for project %s: %v", limit, ns.Name, err) + } + pod.Spec.ActiveDeadlineSeconds = int64MinP(&limitInt64, pod.Spec.ActiveDeadlineSeconds) + return true, nil +} + +func int64MinP(a, b *int64) *int64 { + switch { + case a == nil: + return b + case b == nil: + return a + default: + c := integer.Int64Min(*a, *b) + return &c + } +} diff --git a/openshift-kube-apiserver/admission/autoscaling/runonceduration/admission_test.go b/openshift-kube-apiserver/admission/autoscaling/runonceduration/admission_test.go new file mode 100644 index 0000000000000..856d32801bfbb --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/runonceduration/admission_test.go @@ -0,0 +1,215 @@ +package runonceduration + +import ( + "bytes" + "context" + "testing" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apiserver/pkg/admission" + corev1listers "k8s.io/client-go/listers/core/v1" + "k8s.io/client-go/tools/cache" + kapi "k8s.io/kubernetes/pkg/apis/core" + + "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration" +) + +func fakeNamespaceLister(projectAnnotations map[string]string) corev1listers.NamespaceLister { + indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{}) + ns := &corev1.Namespace{} + ns.Name = "default" + ns.Annotations = projectAnnotations + indexer.Add(ns) + return corev1listers.NewNamespaceLister(indexer) +} + +func testConfig(n *int64) *runonceduration.RunOnceDurationConfig { + return &runonceduration.RunOnceDurationConfig{ + ActiveDeadlineSecondsOverride: n, + } +} + +func testRunOncePod() *kapi.Pod { + pod := &kapi.Pod{} + pod.Spec.RestartPolicy = kapi.RestartPolicyNever + return pod +} + +func testRestartOnFailurePod() *kapi.Pod { + pod := &kapi.Pod{} + pod.Spec.RestartPolicy = kapi.RestartPolicyOnFailure + return pod +} + +func testRunOncePodWithDuration(n int64) *kapi.Pod { + pod := testRunOncePod() + pod.Spec.ActiveDeadlineSeconds = &n + return pod +} + +func testRestartAlwaysPod() *kapi.Pod { + pod := &kapi.Pod{} + pod.Spec.RestartPolicy = kapi.RestartPolicyAlways + return pod +} + +func int64p(n int64) *int64 { + return &n +} + +func TestRunOnceDurationAdmit(t *testing.T) { + tests := []struct { + name string + config *runonceduration.RunOnceDurationConfig + pod *kapi.Pod + projectAnnotations map[string]string + expectedActiveDeadlineSeconds *int64 + }{ + { + name: "expect globally configured duration to be set", + config: testConfig(int64p(10)), + pod: testRunOncePod(), + expectedActiveDeadlineSeconds: int64p(10), + }, + { + name: "empty config, no duration to be set", + config: testConfig(nil), + pod: testRunOncePod(), + expectedActiveDeadlineSeconds: nil, + }, + { + name: "expect configured duration to not limit lower existing duration", + config: testConfig(int64p(10)), + pod: testRunOncePodWithDuration(5), + expectedActiveDeadlineSeconds: int64p(5), + }, + { + name: "expect empty config to not limit existing duration", + config: testConfig(nil), + pod: testRunOncePodWithDuration(5), + expectedActiveDeadlineSeconds: int64p(5), + }, + { + name: "expect project limit to be used with nil global value", + config: testConfig(nil), + pod: testRunOncePodWithDuration(2000), + projectAnnotations: map[string]string{ + runonceduration.ActiveDeadlineSecondsLimitAnnotation: "1000", + }, + expectedActiveDeadlineSeconds: int64p(1000), + }, + { + name: "expect project limit to not limit a smaller set value", + config: testConfig(nil), + pod: testRunOncePodWithDuration(10), + projectAnnotations: map[string]string{ + runonceduration.ActiveDeadlineSecondsLimitAnnotation: "1000", + }, + expectedActiveDeadlineSeconds: int64p(10), + }, + { + name: "expect project limit to have priority over global config value", + config: testConfig(int64p(10)), + pod: testRunOncePodWithDuration(2000), + projectAnnotations: map[string]string{ + runonceduration.ActiveDeadlineSecondsLimitAnnotation: "1000", + }, + expectedActiveDeadlineSeconds: int64p(1000), + }, + { + name: "make no change to a pod that is not a run-once pod", + config: testConfig(int64p(10)), + pod: testRestartAlwaysPod(), + expectedActiveDeadlineSeconds: nil, + }, + { + name: "update a pod that has a RestartOnFailure policy", + config: testConfig(int64p(10)), + pod: testRestartOnFailurePod(), + expectedActiveDeadlineSeconds: int64p(10), + }, + } + + for _, tc := range tests { + admissionPlugin := NewRunOnceDuration(tc.config) + admissionPlugin.(*runOnceDuration).nsLister = fakeNamespaceLister(tc.projectAnnotations) + pod := tc.pod + attrs := admission.NewAttributesRecord(pod, nil, kapi.Kind("Pod").WithVersion("version"), "default", "test", kapi.Resource("pods").WithVersion("version"), "", admission.Create, nil, false, nil) + if err := admissionPlugin.(admission.MutationInterface).Admit(context.TODO(), attrs, nil); err != nil { + t.Errorf("%s: unexpected mutating admission error: %v", tc.name, err) + continue + } + + switch { + case tc.expectedActiveDeadlineSeconds == nil && pod.Spec.ActiveDeadlineSeconds == nil: + // continue + case tc.expectedActiveDeadlineSeconds == nil && pod.Spec.ActiveDeadlineSeconds != nil: + t.Errorf("%s: expected nil ActiveDeadlineSeconds. Got: %d", tc.name, *pod.Spec.ActiveDeadlineSeconds) + case tc.expectedActiveDeadlineSeconds != nil && pod.Spec.ActiveDeadlineSeconds == nil: + t.Errorf("%s: unexpected nil ActiveDeadlineSeconds.", tc.name) + case *pod.Spec.ActiveDeadlineSeconds != *tc.expectedActiveDeadlineSeconds: + t.Errorf("%s: unexpected active deadline seconds: %d", tc.name, *pod.Spec.ActiveDeadlineSeconds) + } + } +} + +func TestReadConfig(t *testing.T) { + configStr := `apiVersion: autoscaling.openshift.io/v1 +kind: RunOnceDurationConfig +activeDeadlineSecondsOverride: 3600 +` + buf := bytes.NewBufferString(configStr) + config, err := readConfig(buf) + if err != nil { + t.Fatalf("unexpected error reading config: %v", err) + } + if config.ActiveDeadlineSecondsOverride == nil { + t.Fatalf("nil value for ActiveDeadlineSecondsLimit") + } + if *config.ActiveDeadlineSecondsOverride != 3600 { + t.Errorf("unexpected value for ActiveDeadlineSecondsLimit: %d", config.ActiveDeadlineSecondsOverride) + } +} + +func TestInt64MinP(t *testing.T) { + ten := int64(10) + twenty := int64(20) + tests := []struct { + a, b, expected *int64 + }{ + { + a: &ten, + b: nil, + expected: &ten, + }, + { + a: nil, + b: &ten, + expected: &ten, + }, + { + a: &ten, + b: &twenty, + expected: &ten, + }, + { + a: nil, + b: nil, + expected: nil, + }, + } + + for _, test := range tests { + actual := int64MinP(test.a, test.b) + switch { + case actual == nil && test.expected != nil, + test.expected == nil && actual != nil: + t.Errorf("unexpected %v for %#v", actual, test) + continue + case actual == nil: + continue + case *actual != *test.expected: + t.Errorf("unexpected: %v for %#v", actual, test) + } + } +} diff --git a/openshift-kube-apiserver/admission/autoscaling/runonceduration/doc.go b/openshift-kube-apiserver/admission/autoscaling/runonceduration/doc.go new file mode 100644 index 0000000000000..c289b04fa9a49 --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/runonceduration/doc.go @@ -0,0 +1,22 @@ +/* +Package runonceduration contains the RunOnceDuration admission control plugin. +The plugin allows overriding the ActiveDeadlineSeconds for pods that have a +RestartPolicy of RestartPolicyNever (run once). If configured to allow a project +annotation override, and an annotation exists in the pod's namespace of: + + openshift.io/active-deadline-seconds-override + +the value of the annotation will take precedence over the globally configured +value in the plugin's configuration. + + +Configuration + +The plugin is configured via a RunOnceDurationConfig object: + + apiVersion: v1 + kind: RunOnceDurationConfig + enabled: true + activeDeadlineSecondsOverride: 3600 +*/ +package runonceduration diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validate_apiserver.go b/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validate_apiserver.go new file mode 100644 index 0000000000000..2a858c75113f3 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validate_apiserver.go @@ -0,0 +1,149 @@ +package apiserver + +import ( + "context" + "fmt" + "regexp" + "strings" + + configv1 "github.com/openshift/api/config/v1" + configv1client "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1" + + "k8s.io/apimachinery/pkg/api/validation" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +func toAPIServerV1(uncastObj runtime.Object) (*configv1.APIServer, field.ErrorList) { + if uncastObj == nil { + return nil, nil + } + + errs := field.ErrorList{} + + obj, ok := uncastObj.(*configv1.APIServer) + if !ok { + return nil, append(errs, + field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"APIServer"}), + field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) + } + + return obj, nil +} + +type apiserverV1 struct { + infrastructureGetter func() configv1client.InfrastructuresGetter +} + +func (a apiserverV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { + obj, errs := toAPIServerV1(uncastObj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, customresourcevalidation.RequireNameCluster, field.NewPath("metadata"))...) + errs = append(errs, validateAPIServerSpecCreate(obj.Spec)...) + errs = append(errs, a.validateSNINames(obj)...) + + return errs +} + +func (a apiserverV1) validateSNINames(obj *configv1.APIServer) field.ErrorList { + errs := field.ErrorList{} + if len(obj.Spec.ServingCerts.NamedCertificates) == 0 { + return errs + } + + infrastructure, err := a.infrastructureGetter().Infrastructures().Get(context.TODO(), "cluster", metav1.GetOptions{}) + if err != nil { + errs = append(errs, field.InternalError(field.NewPath("metadata"), err)) + } + for i, currSNI := range obj.Spec.ServingCerts.NamedCertificates { + // if names are specified, confirm they do not match + // if names are not specified, the cert can still match, but only the operator resolves the secrets down. We gain a lot of benefit by being sure + // we don't allow an explicit override of these values + for j, currName := range currSNI.Names { + path := field.NewPath("spec").Child("servingCerts").Index(i).Child("names").Index(j) + if currName == infrastructure.Status.APIServerInternalURL { + errs = append(errs, field.Invalid(path, currName, fmt.Sprintf("may not match internal loadbalancer: %q", infrastructure.Status.APIServerInternalURL))) + continue + } + if strings.HasSuffix(currName, ".*") { + withoutSuffix := currName[0 : len(currName)-2] + if strings.HasPrefix(infrastructure.Status.APIServerInternalURL, withoutSuffix) { + errs = append(errs, field.Invalid(path, currName, fmt.Sprintf("may not match internal loadbalancer: %q", infrastructure.Status.APIServerInternalURL))) + } + } + } + } + + return errs +} + +func (a apiserverV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, errs := toAPIServerV1(uncastObj) + if len(errs) > 0 { + return errs + } + oldObj, errs := toAPIServerV1(uncastOldObj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + errs = append(errs, validateAPIServerSpecUpdate(obj.Spec, oldObj.Spec)...) + errs = append(errs, a.validateSNINames(obj)...) + + return errs +} + +func (apiserverV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, errs := toAPIServerV1(uncastObj) + if len(errs) > 0 { + return errs + } + oldObj, errs := toAPIServerV1(uncastOldObj) + if len(errs) > 0 { + return errs + } + + // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. + errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + errs = append(errs, validateAPIServerStatus(obj.Status)...) + + return errs +} + +func validateAPIServerSpecCreate(spec configv1.APIServerSpec) field.ErrorList { + + errs := validateAdditionalCORSAllowedOrigins(field.NewPath("spec").Child("additionalCORSAllowedOrigins"), spec.AdditionalCORSAllowedOrigins) + return errs +} + +func validateAPIServerSpecUpdate(newSpec, oldSpec configv1.APIServerSpec) field.ErrorList { + + errs := validateAdditionalCORSAllowedOrigins(field.NewPath("spec").Child("additionalCORSAllowedOrigins"), newSpec.AdditionalCORSAllowedOrigins) + return errs +} + +func validateAPIServerStatus(status configv1.APIServerStatus) field.ErrorList { + errs := field.ErrorList{} + + // TODO + + return errs +} + +func validateAdditionalCORSAllowedOrigins(fieldPath *field.Path, cors []string) field.ErrorList { + errs := field.ErrorList{} + + for i, re := range cors { + if _, err := regexp.Compile(re); err != nil { + errs = append(errs, field.Invalid(fieldPath.Index(i), re, fmt.Sprintf("not a valid regular expression: %v", err))) + } + } + + return errs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validate_apiserver_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validate_apiserver_test.go new file mode 100644 index 0000000000000..156761f86c50d --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validate_apiserver_test.go @@ -0,0 +1,117 @@ +package apiserver + +import ( + "testing" + + "k8s.io/apimachinery/pkg/util/validation/field" + + configv1 "github.com/openshift/api/config/v1" + configclientfake "github.com/openshift/client-go/config/clientset/versioned/fake" + configv1client "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +func TestValidateSNINames(t *testing.T) { + expectNoErrors := func(t *testing.T, errs field.ErrorList) { + t.Helper() + if len(errs) > 0 { + t.Fatal(errs) + } + } + + tests := []struct { + name string + + internalName string + apiserver *configv1.APIServer + + validateErrors func(t *testing.T, errs field.ErrorList) + }{ + { + name: "no sni", + internalName: "internal.host.com", + apiserver: &configv1.APIServer{}, + validateErrors: expectNoErrors, + }, + { + name: "allowed sni", + internalName: "internal.host.com", + apiserver: &configv1.APIServer{ + Spec: configv1.APIServerSpec{ + ServingCerts: configv1.APIServerServingCerts{ + NamedCertificates: []configv1.APIServerNamedServingCert{ + { + Names: []string{"external.host.com", "somwhere.else.*"}, + }, + }, + }, + }, + }, + validateErrors: expectNoErrors, + }, + { + name: "directly invalid sni", + internalName: "internal.host.com", + apiserver: &configv1.APIServer{ + Spec: configv1.APIServerSpec{ + ServingCerts: configv1.APIServerServingCerts{ + NamedCertificates: []configv1.APIServerNamedServingCert{ + {Names: []string{"external.host.com", "somwhere.else.*"}}, + {Names: []string{"foo.bar", "internal.host.com"}}, + }, + }, + }, + }, + validateErrors: func(t *testing.T, errs field.ErrorList) { + t.Helper() + if len(errs) != 1 { + t.Fatal(errs) + } + if errs[0].Error() != `spec.servingCerts[1].names[1]: Invalid value: "internal.host.com": may not match internal loadbalancer: "internal.host.com"` { + t.Error(errs[0]) + } + }, + }, + { + name: "wildcard invalid sni", + internalName: "internal.host.com", + apiserver: &configv1.APIServer{ + Spec: configv1.APIServerSpec{ + ServingCerts: configv1.APIServerServingCerts{ + NamedCertificates: []configv1.APIServerNamedServingCert{ + {Names: []string{"internal.*"}}, + }, + }, + }, + }, + validateErrors: func(t *testing.T, errs field.ErrorList) { + t.Helper() + if len(errs) != 1 { + t.Fatal(errs) + } + if errs[0].Error() != `spec.servingCerts[0].names[0]: Invalid value: "internal.*": may not match internal loadbalancer: "internal.host.com"` { + t.Error(errs[0]) + } + }, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + fakeclient := configclientfake.NewSimpleClientset(&configv1.Infrastructure{ + ObjectMeta: metav1.ObjectMeta{Name: "cluster"}, + Status: configv1.InfrastructureStatus{ + APIServerInternalURL: test.internalName, + }, + }) + + instance := apiserverV1{ + infrastructureGetter: func() configv1client.InfrastructuresGetter { + return fakeclient.ConfigV1() + }, + } + test.validateErrors(t, instance.validateSNINames(test.apiserver)) + }) + + } +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validation_wrapper.go b/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validation_wrapper.go new file mode 100644 index 0000000000000..06e9e04c1320b --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validation_wrapper.go @@ -0,0 +1,76 @@ +package apiserver + +import ( + "fmt" + "io" + + configv1 "github.com/openshift/api/config/v1" + configv1client "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1" + "github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" + + "k8s.io/apimachinery/pkg/runtime/schema" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apiserver/pkg/admission" + "k8s.io/client-go/rest" +) + +const PluginName = "config.openshift.io/ValidateAPIServer" + +// Register registers a plugin +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { + return NewValidateAPIServer() + }) +} + +type validateCustomResourceWithClient struct { + admission.ValidationInterface + + infrastructureGetter configv1client.InfrastructuresGetter +} + +func NewValidateAPIServer() (admission.Interface, error) { + ret := &validateCustomResourceWithClient{} + + delegate, err := customresourcevalidation.NewValidator( + map[schema.GroupResource]bool{ + configv1.GroupVersion.WithResource("apiservers").GroupResource(): true, + }, + map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ + configv1.GroupVersion.WithKind("APIServer"): apiserverV1{infrastructureGetter: ret.getInfrastructureGetter}, + }) + if err != nil { + return nil, err + } + ret.ValidationInterface = delegate + + return ret, nil +} + +var _ admissionrestconfig.WantsRESTClientConfig = &validateCustomResourceWithClient{} + +func (a *validateCustomResourceWithClient) getInfrastructureGetter() configv1client.InfrastructuresGetter { + return a.infrastructureGetter +} + +func (a *validateCustomResourceWithClient) SetRESTClientConfig(restClientConfig rest.Config) { + var err error + a.infrastructureGetter, err = configv1client.NewForConfig(&restClientConfig) + if err != nil { + utilruntime.HandleError(err) + return + } +} + +func (a *validateCustomResourceWithClient) ValidateInitialization() error { + if a.infrastructureGetter == nil { + return fmt.Errorf(PluginName + " needs an infrastructureGetter") + } + + if initializationValidator, ok := a.ValidationInterface.(admission.InitializationValidator); ok { + return initializationValidator.ValidateInitialization() + } + + return nil +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/attributes.go b/openshift-kube-apiserver/admission/customresourcevalidation/attributes.go new file mode 100644 index 0000000000000..f72b89a63526b --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/attributes.go @@ -0,0 +1,53 @@ +package customresourcevalidation + +import ( + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apiserver/pkg/admission" + + authorizationv1 "github.com/openshift/api/authorization/v1" + configv1 "github.com/openshift/api/config/v1" + quotav1 "github.com/openshift/api/quota/v1" + securityv1 "github.com/openshift/api/security/v1" +) + +// unstructuredUnpackingAttributes tries to convert to a real object in the config scheme +type unstructuredUnpackingAttributes struct { + admission.Attributes +} + +func (a *unstructuredUnpackingAttributes) GetObject() runtime.Object { + return toBestObjectPossible(a.Attributes.GetObject()) +} + +func (a *unstructuredUnpackingAttributes) GetOldObject() runtime.Object { + return toBestObjectPossible(a.Attributes.GetOldObject()) +} + +// toBestObjectPossible tries to convert to a real object in the supported scheme +func toBestObjectPossible(orig runtime.Object) runtime.Object { + unstructuredOrig, ok := orig.(runtime.Unstructured) + if !ok { + return orig + } + + targetObj, err := supportedObjectsScheme.New(unstructuredOrig.GetObjectKind().GroupVersionKind()) + if err != nil { + utilruntime.HandleError(err) + return unstructuredOrig + } + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(unstructuredOrig.UnstructuredContent(), targetObj); err != nil { + utilruntime.HandleError(err) + return unstructuredOrig + } + return targetObj +} + +var supportedObjectsScheme = runtime.NewScheme() + +func init() { + utilruntime.Must(configv1.Install(supportedObjectsScheme)) + utilruntime.Must(quotav1.Install(supportedObjectsScheme)) + utilruntime.Must(securityv1.Install(supportedObjectsScheme)) + utilruntime.Must(authorizationv1.Install(supportedObjectsScheme)) +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/authentication/validate_authentication.go b/openshift-kube-apiserver/admission/customresourcevalidation/authentication/validate_authentication.go new file mode 100644 index 0000000000000..94e9828cb9d83 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/authentication/validate_authentication.go @@ -0,0 +1,133 @@ +package authentication + +import ( + "fmt" + "io" + + "k8s.io/apimachinery/pkg/api/validation" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + + configv1 "github.com/openshift/api/config/v1" + crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +const PluginName = "config.openshift.io/ValidateAuthentication" + +// Register registers a plugin +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { + return crvalidation.NewValidator( + map[schema.GroupResource]bool{ + configv1.GroupVersion.WithResource("authentications").GroupResource(): true, + }, + map[schema.GroupVersionKind]crvalidation.ObjectValidator{ + configv1.GroupVersion.WithKind("Authentication"): authenticationV1{}, + }) + }) +} + +func toAuthenticationV1(uncastObj runtime.Object) (*configv1.Authentication, field.ErrorList) { + if uncastObj == nil { + return nil, nil + } + + obj, ok := uncastObj.(*configv1.Authentication) + if !ok { + return nil, field.ErrorList{ + field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"Authentication"}), + field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"}), + } + } + + return obj, nil +} + +type authenticationV1 struct{} + +func (authenticationV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { + obj, errs := toAuthenticationV1(uncastObj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, crvalidation.RequireNameCluster, field.NewPath("metadata"))...) + errs = append(errs, validateAuthenticationSpecCreate(obj.Spec)...) + + return errs +} + +func (authenticationV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, errs := toAuthenticationV1(uncastObj) + if len(errs) > 0 { + return errs + } + oldObj, errs := toAuthenticationV1(uncastOldObj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + errs = append(errs, validateAuthenticationSpecUpdate(obj.Spec, oldObj.Spec)...) + + return errs +} + +func (authenticationV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, errs := toAuthenticationV1(uncastObj) + if len(errs) > 0 { + return errs + } + oldObj, errs := toAuthenticationV1(uncastOldObj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + errs = append(errs, validateAuthenticationStatus(obj.Status)...) + + return errs +} + +func validateAuthenticationSpecCreate(spec configv1.AuthenticationSpec) field.ErrorList { + return validateAuthenticationSpec(spec) +} + +func validateAuthenticationSpecUpdate(newspec, oldspec configv1.AuthenticationSpec) field.ErrorList { + return validateAuthenticationSpec(newspec) +} + +func validateAuthenticationSpec(spec configv1.AuthenticationSpec) field.ErrorList { + errs := field.ErrorList{} + specField := field.NewPath("spec") + + switch spec.Type { + case configv1.AuthenticationTypeNone, configv1.AuthenticationTypeIntegratedOAuth, "": + default: + errs = append(errs, field.NotSupported(specField.Child("type"), + spec.Type, + []string{string(configv1.AuthenticationTypeNone), string(configv1.AuthenticationTypeIntegratedOAuth)}, + )) + } + + errs = append(errs, crvalidation.ValidateConfigMapReference(specField.Child("oauthMetadata"), spec.OAuthMetadata, false)...) + + // validate the secret names in WebhookTokenAuthenticators + for i, wh := range spec.WebhookTokenAuthenticators { + errs = append( + errs, + crvalidation.ValidateSecretReference( + specField.Child("webhookTokenAuthenticators").Index(i).Child("kubeConfig"), + wh.KubeConfig, + true, + )...) + } + + return errs +} + +func validateAuthenticationStatus(status configv1.AuthenticationStatus) field.ErrorList { + return crvalidation.ValidateConfigMapReference(field.NewPath("status", "integratedOAuthMetadata"), status.IntegratedOAuthMetadata, false) +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/authentication/validate_authentication_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/authentication/validate_authentication_test.go new file mode 100644 index 0000000000000..56f70b29d895b --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/authentication/validate_authentication_test.go @@ -0,0 +1,189 @@ +package authentication + +import ( + "testing" + + configv1 "github.com/openshift/api/config/v1" + "k8s.io/apimachinery/pkg/util/validation/field" +) + +func TestFailValidateAuthenticationSpec(t *testing.T) { + errorCases := map[string]struct { + spec configv1.AuthenticationSpec + errorType field.ErrorType + errorField string + }{ + "invalid authn type": { + spec: configv1.AuthenticationSpec{ + Type: "MyCoolOAuthSrv", + }, + errorType: field.ErrorTypeNotSupported, + errorField: "spec.type", + }, + "invalid metadata ref": { + spec: configv1.AuthenticationSpec{ + Type: "", + OAuthMetadata: configv1.ConfigMapNameReference{ + Name: "../shadow", + }, + }, + errorType: field.ErrorTypeInvalid, + errorField: "spec.oauthMetadata.name", + }, + "invalid webhook ref": { + spec: configv1.AuthenticationSpec{ + WebhookTokenAuthenticators: []configv1.DeprecatedWebhookTokenAuthenticator{ + {KubeConfig: configv1.SecretNameReference{Name: "this+that"}}, + }, + }, + errorType: field.ErrorTypeInvalid, + errorField: "spec.webhookTokenAuthenticators[0].kubeConfig.name", + }, + "invalid webhook ref - multiple webhooks": { + spec: configv1.AuthenticationSpec{ + WebhookTokenAuthenticators: []configv1.DeprecatedWebhookTokenAuthenticator{ + {KubeConfig: configv1.SecretNameReference{Name: "that.now"}}, + {KubeConfig: configv1.SecretNameReference{Name: "this+that"}}, + {KubeConfig: configv1.SecretNameReference{Name: "this.then"}}, + }, + }, + errorType: field.ErrorTypeInvalid, + errorField: "spec.webhookTokenAuthenticators[1].kubeConfig.name", + }, + "empty webhook name": { + spec: configv1.AuthenticationSpec{ + WebhookTokenAuthenticators: []configv1.DeprecatedWebhookTokenAuthenticator{ + {KubeConfig: configv1.SecretNameReference{Name: ""}}, + }, + }, + errorType: field.ErrorTypeRequired, + errorField: "spec.webhookTokenAuthenticators[0].kubeConfig.name", + }, + } + + for tcName, tc := range errorCases { + errs := validateAuthenticationSpec(tc.spec) + if len(errs) == 0 { + t.Errorf("'%s': should have failed but did not", tcName) + } + + for _, e := range errs { + if e.Type != tc.errorType { + t.Errorf("'%s': expected errors of type '%s', got %v:", tcName, tc.errorType, e) + } + + if e.Field != tc.errorField { + t.Errorf("'%s': expected errors in field '%s', got %v:", tcName, tc.errorField, e) + } + } + } +} + +func TestSucceedValidateAuthenticationSpec(t *testing.T) { + successCases := map[string]configv1.AuthenticationSpec{ + "integrated oauth authn type": { + Type: "IntegratedOAuth", + }, + "_none_ authn type": { + Type: "None", + }, + "empty authn type": { + Type: "", + }, + "integrated oauth + oauth metadata": { + OAuthMetadata: configv1.ConfigMapNameReference{ + Name: "configmapwithmetadata", + }, + }, + "webhook set": { + WebhookTokenAuthenticators: []configv1.DeprecatedWebhookTokenAuthenticator{ + {KubeConfig: configv1.SecretNameReference{Name: "wheniwaslittleiwantedtobecomeawebhook"}}, + }, + }, + "some webhooks": { + WebhookTokenAuthenticators: []configv1.DeprecatedWebhookTokenAuthenticator{ + {KubeConfig: configv1.SecretNameReference{Name: "whatacoolnameforasecret"}}, + {KubeConfig: configv1.SecretNameReference{Name: "whatacoolnameforasecret2"}}, + {KubeConfig: configv1.SecretNameReference{Name: "thisalsoisacoolname"}}, + {KubeConfig: configv1.SecretNameReference{Name: "letsnotoverdoit"}}, + }, + }, + "all fields set": { + Type: "IntegratedOAuth", + OAuthMetadata: configv1.ConfigMapNameReference{ + Name: "suchname", + }, + WebhookTokenAuthenticators: []configv1.DeprecatedWebhookTokenAuthenticator{ + {KubeConfig: configv1.SecretNameReference{Name: "thisisawebhook"}}, + {KubeConfig: configv1.SecretNameReference{Name: "thisisawebhook2"}}, + {KubeConfig: configv1.SecretNameReference{Name: "thisisawebhook33"}}, + }, + }, + } + + for tcName, s := range successCases { + errs := validateAuthenticationSpec(s) + if len(errs) != 0 { + t.Errorf("'%s': expected success, but failed: %v", tcName, errs.ToAggregate().Error()) + } + } +} + +func TestFailValidateAuthenticationStatus(t *testing.T) { + errorCases := map[string]struct { + status configv1.AuthenticationStatus + errorType field.ErrorType + errorField string + }{ + "wrong reference name": { + status: configv1.AuthenticationStatus{ + IntegratedOAuthMetadata: configv1.ConfigMapNameReference{ + Name: "something_wrong", + }, + }, + errorType: field.ErrorTypeInvalid, + errorField: "status.integratedOAuthMetadata.name", + }, + } + + for tcName, tc := range errorCases { + errs := validateAuthenticationStatus(tc.status) + if len(errs) == 0 { + t.Errorf("'%s': should have failed but did not", tcName) + } + + for _, e := range errs { + if e.Type != tc.errorType { + t.Errorf("'%s': expected errors of type '%s', got %v:", tcName, tc.errorType, e) + } + + if e.Field != tc.errorField { + t.Errorf("'%s': expected errors in field '%s', got %v:", tcName, tc.errorField, e) + } + } + } +} + +func TestSucceedValidateAuthenticationStatus(t *testing.T) { + successCases := map[string]configv1.AuthenticationStatus{ + "basic case": { + IntegratedOAuthMetadata: configv1.ConfigMapNameReference{ + Name: "hey-there", + }, + }, + "empty reference": { + IntegratedOAuthMetadata: configv1.ConfigMapNameReference{ + Name: "", + }, + }, + "empty status": {}, + } + + for tcName, s := range successCases { + errs := validateAuthenticationStatus(s) + if len(errs) != 0 { + t.Errorf("'%s': expected success, but failed: %v", tcName, errs.ToAggregate().Error()) + } + } + +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validate_crq.go b/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validate_crq.go new file mode 100644 index 0000000000000..18af783d61305 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validate_crq.go @@ -0,0 +1,83 @@ +package clusterresourcequota + +import ( + "fmt" + "io" + + "k8s.io/apimachinery/pkg/api/validation" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + + quotav1 "github.com/openshift/api/quota/v1" + + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" + quotavalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation" +) + +const PluginName = "quota.openshift.io/ValidateClusterResourceQuota" + +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { + return customresourcevalidation.NewValidator( + map[schema.GroupResource]bool{ + {Group: quotav1.GroupName, Resource: "clusterresourcequotas"}: true, + }, + map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ + quotav1.GroupVersion.WithKind("ClusterResourceQuota"): clusterResourceQuotaV1{}, + }) + }) +} + +func toClusterResourceQuota(uncastObj runtime.Object) (*quotav1.ClusterResourceQuota, field.ErrorList) { + if uncastObj == nil { + return nil, nil + } + + allErrs := field.ErrorList{} + + obj, ok := uncastObj.(*quotav1.ClusterResourceQuota) + if !ok { + return nil, append(allErrs, + field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"ClusterResourceQuota"}), + field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{quotav1.GroupVersion.String()})) + } + + return obj, nil +} + +type clusterResourceQuotaV1 struct { +} + +func (clusterResourceQuotaV1) ValidateCreate(obj runtime.Object) field.ErrorList { + clusterResourceQuotaObj, errs := toClusterResourceQuota(obj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, validation.ValidateObjectMeta(&clusterResourceQuotaObj.ObjectMeta, false, validation.NameIsDNSSubdomain, field.NewPath("metadata"))...) + errs = append(errs, quotavalidation.ValidateClusterResourceQuota(clusterResourceQuotaObj)...) + + return errs +} + +func (clusterResourceQuotaV1) ValidateUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList { + clusterResourceQuotaObj, errs := toClusterResourceQuota(obj) + if len(errs) > 0 { + return errs + } + clusterResourceQuotaOldObj, errs := toClusterResourceQuota(oldObj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, validation.ValidateObjectMeta(&clusterResourceQuotaObj.ObjectMeta, false, validation.NameIsDNSSubdomain, field.NewPath("metadata"))...) + errs = append(errs, quotavalidation.ValidateClusterResourceQuotaUpdate(clusterResourceQuotaObj, clusterResourceQuotaOldObj)...) + + return errs +} + +func (c clusterResourceQuotaV1) ValidateStatusUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList { + return c.ValidateUpdate(obj, oldObj) +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation/validation.go b/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation/validation.go new file mode 100644 index 0000000000000..19993a05fdd60 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation/validation.go @@ -0,0 +1,68 @@ +package validation + +import ( + "sort" + + unversionedvalidation "k8s.io/apimachinery/pkg/apis/meta/v1/validation" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/apis/core/v1" + "k8s.io/kubernetes/pkg/apis/core/validation" + + quotav1 "github.com/openshift/api/quota/v1" +) + +func ValidateClusterResourceQuota(clusterquota *quotav1.ClusterResourceQuota) field.ErrorList { + allErrs := validation.ValidateObjectMeta(&clusterquota.ObjectMeta, false, validation.ValidateResourceQuotaName, field.NewPath("metadata")) + + hasSelectionCriteria := (clusterquota.Spec.Selector.LabelSelector != nil && len(clusterquota.Spec.Selector.LabelSelector.MatchLabels)+len(clusterquota.Spec.Selector.LabelSelector.MatchExpressions) > 0) || + (len(clusterquota.Spec.Selector.AnnotationSelector) > 0) + + if !hasSelectionCriteria { + allErrs = append(allErrs, field.Required(field.NewPath("spec", "selector"), "must restrict the selected projects")) + } + if clusterquota.Spec.Selector.LabelSelector != nil { + allErrs = append(allErrs, unversionedvalidation.ValidateLabelSelector(clusterquota.Spec.Selector.LabelSelector, field.NewPath("spec", "selector", "labels"))...) + if len(clusterquota.Spec.Selector.LabelSelector.MatchLabels)+len(clusterquota.Spec.Selector.LabelSelector.MatchExpressions) == 0 { + allErrs = append(allErrs, field.Invalid(field.NewPath("spec", "selector", "labels"), clusterquota.Spec.Selector.LabelSelector, "must restrict the selected projects")) + } + } + if clusterquota.Spec.Selector.AnnotationSelector != nil { + allErrs = append(allErrs, validation.ValidateAnnotations(clusterquota.Spec.Selector.AnnotationSelector, field.NewPath("spec", "selector", "annotations"))...) + } + + internalQuota := &core.ResourceQuotaSpec{} + if err := v1.Convert_v1_ResourceQuotaSpec_To_core_ResourceQuotaSpec(&clusterquota.Spec.Quota, internalQuota, nil); err != nil { + panic(err) + } + internalStatus := &core.ResourceQuotaStatus{} + if err := v1.Convert_v1_ResourceQuotaStatus_To_core_ResourceQuotaStatus(&clusterquota.Status.Total, internalStatus, nil); err != nil { + panic(err) + } + + allErrs = append(allErrs, validation.ValidateResourceQuotaSpec(internalQuota, field.NewPath("spec", "quota"))...) + allErrs = append(allErrs, validation.ValidateResourceQuotaStatus(internalStatus, field.NewPath("status", "overall"))...) + + orderedNamespaces := clusterquota.Status.Namespaces.DeepCopy() + sort.Slice(orderedNamespaces, func(i, j int) bool { + return orderedNamespaces[i].Namespace < orderedNamespaces[j].Namespace + }) + + for _, namespace := range orderedNamespaces { + fldPath := field.NewPath("status", "namespaces").Key(namespace.Namespace) + for k, v := range namespace.Status.Used { + resPath := fldPath.Key(string(k)) + allErrs = append(allErrs, validation.ValidateResourceQuotaResourceName(string(k), resPath)...) + allErrs = append(allErrs, validation.ValidateResourceQuantityValue(string(k), v, resPath)...) + } + } + + return allErrs +} + +func ValidateClusterResourceQuotaUpdate(clusterquota, oldClusterResourceQuota *quotav1.ClusterResourceQuota) field.ErrorList { + allErrs := validation.ValidateObjectMetaUpdate(&clusterquota.ObjectMeta, &oldClusterResourceQuota.ObjectMeta, field.NewPath("metadata")) + allErrs = append(allErrs, ValidateClusterResourceQuota(clusterquota)...) + + return allErrs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation/validation_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation/validation_test.go new file mode 100644 index 0000000000000..c1dbf76aecf46 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation/validation_test.go @@ -0,0 +1,173 @@ +package validation + +import ( + "testing" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/kubernetes/pkg/apis/core" + corekubev1 "k8s.io/kubernetes/pkg/apis/core/v1" + "k8s.io/kubernetes/pkg/apis/core/validation" + + quotav1 "github.com/openshift/api/quota/v1" +) + +func spec(scopes ...corev1.ResourceQuotaScope) corev1.ResourceQuotaSpec { + return corev1.ResourceQuotaSpec{ + Hard: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("100"), + corev1.ResourceMemory: resource.MustParse("10000"), + corev1.ResourceRequestsCPU: resource.MustParse("100"), + corev1.ResourceRequestsMemory: resource.MustParse("10000"), + corev1.ResourceLimitsCPU: resource.MustParse("100"), + corev1.ResourceLimitsMemory: resource.MustParse("10000"), + corev1.ResourcePods: resource.MustParse("10"), + corev1.ResourceServices: resource.MustParse("0"), + corev1.ResourceReplicationControllers: resource.MustParse("10"), + corev1.ResourceQuotas: resource.MustParse("10"), + corev1.ResourceConfigMaps: resource.MustParse("10"), + corev1.ResourceSecrets: resource.MustParse("10"), + }, + Scopes: scopes, + } +} + +func scopeableSpec(scopes ...corev1.ResourceQuotaScope) corev1.ResourceQuotaSpec { + return corev1.ResourceQuotaSpec{ + Hard: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("100"), + corev1.ResourceMemory: resource.MustParse("10000"), + corev1.ResourceRequestsCPU: resource.MustParse("100"), + corev1.ResourceRequestsMemory: resource.MustParse("10000"), + corev1.ResourceLimitsCPU: resource.MustParse("100"), + corev1.ResourceLimitsMemory: resource.MustParse("10000"), + }, + Scopes: scopes, + } +} + +func TestValidationClusterQuota(t *testing.T) { + // storage is not yet supported as a quota tracked resource + invalidQuotaResourceSpec := corev1.ResourceQuotaSpec{ + Hard: corev1.ResourceList{ + corev1.ResourceStorage: resource.MustParse("10"), + }, + } + validLabels := map[string]string{"a": "b"} + + errs := ValidateClusterResourceQuota( + "av1.ClusterResourceQuota{ + ObjectMeta: metav1.ObjectMeta{Name: "good"}, + Spec: quotav1.ClusterResourceQuotaSpec{ + Selector: quotav1.ClusterResourceQuotaSelector{LabelSelector: &metav1.LabelSelector{MatchLabels: validLabels}}, + Quota: spec(), + }, + }, + ) + if len(errs) != 0 { + t.Errorf("expected success: %v", errs) + } + + errorCases := map[string]struct { + A quotav1.ClusterResourceQuota + T field.ErrorType + F string + }{ + "non-zero-length namespace": { + A: quotav1.ClusterResourceQuota{ + ObjectMeta: metav1.ObjectMeta{Namespace: "bad", Name: "good"}, + Spec: quotav1.ClusterResourceQuotaSpec{ + Selector: quotav1.ClusterResourceQuotaSelector{LabelSelector: &metav1.LabelSelector{MatchLabels: validLabels}}, + Quota: spec(), + }, + }, + T: field.ErrorTypeForbidden, + F: "metadata.namespace", + }, + "missing label selector": { + A: quotav1.ClusterResourceQuota{ + ObjectMeta: metav1.ObjectMeta{Name: "good"}, + Spec: quotav1.ClusterResourceQuotaSpec{ + Quota: spec(), + }, + }, + T: field.ErrorTypeRequired, + F: "spec.selector", + }, + "ok scope": { + A: quotav1.ClusterResourceQuota{ + ObjectMeta: metav1.ObjectMeta{Name: "good"}, + Spec: quotav1.ClusterResourceQuotaSpec{ + Quota: scopeableSpec(corev1.ResourceQuotaScopeNotTerminating), + }, + }, + T: field.ErrorTypeRequired, + F: "spec.selector", + }, + "bad scope": { + A: quotav1.ClusterResourceQuota{ + ObjectMeta: metav1.ObjectMeta{Name: "good"}, + Spec: quotav1.ClusterResourceQuotaSpec{ + Selector: quotav1.ClusterResourceQuotaSelector{LabelSelector: &metav1.LabelSelector{MatchLabels: validLabels}}, + Quota: spec(corev1.ResourceQuotaScopeNotTerminating), + }, + }, + T: field.ErrorTypeInvalid, + F: "spec.quota.scopes", + }, + "bad quota spec": { + A: quotav1.ClusterResourceQuota{ + ObjectMeta: metav1.ObjectMeta{Name: "good"}, + Spec: quotav1.ClusterResourceQuotaSpec{ + Selector: quotav1.ClusterResourceQuotaSelector{LabelSelector: &metav1.LabelSelector{MatchLabels: validLabels}}, + Quota: invalidQuotaResourceSpec, + }, + }, + T: field.ErrorTypeInvalid, + F: "spec.quota.hard[storage]", + }, + } + for k, v := range errorCases { + errs := ValidateClusterResourceQuota(&v.A) + if len(errs) == 0 { + t.Errorf("expected failure %s for %v", k, v.A) + continue + } + for i := range errs { + if errs[i].Type != v.T { + t.Errorf("%s: expected errors to have type %s: %v", k, v.T, errs[i]) + } + if errs[i].Field != v.F { + t.Errorf("%s: expected errors to have field %s: %v", k, v.F, errs[i]) + } + } + } +} + +func TestValidationQuota(t *testing.T) { + tests := map[string]struct { + A corev1.ResourceQuota + T field.ErrorType + F string + }{ + "scope": { + A: corev1.ResourceQuota{ + ObjectMeta: metav1.ObjectMeta{Namespace: "ns", Name: "good"}, + Spec: scopeableSpec(corev1.ResourceQuotaScopeNotTerminating), + }, + }, + } + for k, v := range tests { + internal := core.ResourceQuota{} + if err := corekubev1.Convert_v1_ResourceQuota_To_core_ResourceQuota(&v.A, &internal, nil); err != nil { + panic(err) + } + errs := validation.ValidateResourceQuota(&internal) + if len(errs) != 0 { + t.Errorf("%s: %v", k, errs) + continue + } + } +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/config/deny_delete_cluster_config_resource.go b/openshift-kube-apiserver/admission/customresourcevalidation/config/deny_delete_cluster_config_resource.go new file mode 100644 index 0000000000000..f637e95cece3a --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/config/deny_delete_cluster_config_resource.go @@ -0,0 +1,54 @@ +package config + +import ( + "context" + "fmt" + "io" + + "k8s.io/apiserver/pkg/admission" +) + +const PluginName = "config.openshift.io/DenyDeleteClusterConfiguration" + +// Register registers an admission plugin factory whose plugin prevents the deletion of cluster configuration resources. +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { + return newAdmissionPlugin(), nil + }) +} + +var _ admission.ValidationInterface = &admissionPlugin{} + +type admissionPlugin struct { + *admission.Handler +} + +func newAdmissionPlugin() *admissionPlugin { + return &admissionPlugin{Handler: admission.NewHandler(admission.Delete)} +} + +// Validate returns an error if there is an attempt to delete a cluster configuration resource. +func (p *admissionPlugin) Validate(ctx context.Context, attributes admission.Attributes, _ admission.ObjectInterfaces) error { + if len(attributes.GetSubresource()) > 0 { + return nil + } + if attributes.GetResource().Group != "config.openshift.io" { + return nil + } + // clusteroperators can be deleted so that we can force status refreshes and change over time. + // clusterversions not named `version` can be deleted (none are expected to exist). + // other config.openshift.io resources not named `cluster` can be deleted (none are expected to exist). + switch attributes.GetResource().Resource { + case "clusteroperators": + return nil + case "clusterversions": + if attributes.GetName() != "version" { + return nil + } + default: + if attributes.GetName() != "cluster" { + return nil + } + } + return admission.NewForbidden(attributes, fmt.Errorf("deleting required %s.%s resource, named %s, is not allowed", attributes.GetResource().Resource, attributes.GetResource().Group, attributes.GetName())) +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/config/deny_delete_cluster_config_resource_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/config/deny_delete_cluster_config_resource_test.go new file mode 100644 index 0000000000000..70d289f5f26df --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/config/deny_delete_cluster_config_resource_test.go @@ -0,0 +1,73 @@ +package config + +import ( + "context" + "testing" + + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apiserver/pkg/admission" +) + +func TestAdmissionPlugin_Validate(t *testing.T) { + testCases := []struct { + tcName string + group string + resource string + name string + denyDelete bool + }{ + { + tcName: "NotWhiteListedResourceNamedCluster", + group: "config.openshift.io", + resource: "notWhitelisted", + name: "cluster", + denyDelete: true, + }, + { + tcName: "NotWhiteListedResourceNotNamedCluster", + group: "config.openshift.io", + resource: "notWhitelisted", + name: "notCluster", + denyDelete: false, + }, + { + tcName: "ClusterVersionVersion", + group: "config.openshift.io", + resource: "clusterversions", + name: "version", + denyDelete: true, + }, + { + tcName: "ClusterVersionNotVersion", + group: "config.openshift.io", + resource: "clusterversions", + name: "instance", + denyDelete: false, + }, + { + tcName: "ClusterOperator", + group: "config.openshift.io", + resource: "clusteroperator", + name: "instance", + denyDelete: false, + }, + { + tcName: "OtherGroup", + group: "not.config.openshift.io", + resource: "notWhitelisted", + name: "cluster", + denyDelete: false, + }, + } + for _, tc := range testCases { + t.Run(tc.tcName, func(t *testing.T) { + err := newAdmissionPlugin().Validate(context.TODO(), admission.NewAttributesRecord( + nil, nil, schema.GroupVersionKind{}, "", + tc.name, schema.GroupVersionResource{Group: tc.group, Resource: tc.resource}, + "", admission.Delete, nil, false, nil), nil) + if tc.denyDelete != (err != nil) { + t.Error(tc.denyDelete, err) + } + }) + } +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/console/validate_console.go b/openshift-kube-apiserver/admission/customresourcevalidation/console/validate_console.go new file mode 100644 index 0000000000000..3cdd31c9e4a97 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/console/validate_console.go @@ -0,0 +1,118 @@ +package console + +import ( + "fmt" + "io" + + "k8s.io/apimachinery/pkg/api/validation" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + + configv1 "github.com/openshift/api/config/v1" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +const PluginName = "config.openshift.io/ValidateConsole" + +// Register registers a plugin +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { + return customresourcevalidation.NewValidator( + map[schema.GroupResource]bool{ + configv1.GroupVersion.WithResource("consoles").GroupResource(): true, + }, + map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ + configv1.GroupVersion.WithKind("Console"): consoleV1{}, + }) + }) +} + +func toConsoleV1(uncastObj runtime.Object) (*configv1.Console, field.ErrorList) { + if uncastObj == nil { + return nil, nil + } + + errs := field.ErrorList{} + + obj, ok := uncastObj.(*configv1.Console) + if !ok { + return nil, append(errs, + field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"Console"}), + field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) + } + + return obj, nil +} + +type consoleV1 struct{} + +func (consoleV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { + obj, errs := toConsoleV1(uncastObj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, customresourcevalidation.RequireNameCluster, field.NewPath("metadata"))...) + errs = append(errs, validateConsoleSpecCreate(obj.Spec)...) + + return errs +} + +func (consoleV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, errs := toConsoleV1(uncastObj) + if len(errs) > 0 { + return errs + } + oldObj, errs := toConsoleV1(uncastOldObj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + errs = append(errs, validateConsoleSpecUpdate(obj.Spec, oldObj.Spec)...) + + return errs +} + +func (consoleV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, errs := toConsoleV1(uncastObj) + if len(errs) > 0 { + return errs + } + oldObj, errs := toConsoleV1(uncastOldObj) + if len(errs) > 0 { + return errs + } + + // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. + errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + errs = append(errs, validateConsoleStatus(obj.Status)...) + + return errs +} + +func validateConsoleSpecCreate(spec configv1.ConsoleSpec) field.ErrorList { + errs := field.ErrorList{} + + // TODO + + return errs +} + +func validateConsoleSpecUpdate(newSpec, oldSpec configv1.ConsoleSpec) field.ErrorList { + errs := field.ErrorList{} + + // TODO + + return errs +} + +func validateConsoleStatus(status configv1.ConsoleStatus) field.ErrorList { + errs := field.ErrorList{} + + // TODO + + return errs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration/cr_validation_registration.go b/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration/cr_validation_registration.go new file mode 100644 index 0000000000000..bdc4681be54fa --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration/cr_validation_registration.go @@ -0,0 +1,60 @@ +package customresourcevalidationregistration + +import ( + "k8s.io/apiserver/pkg/admission" + + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/apiserver" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/authentication" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/config" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/console" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/features" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/image" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/project" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/scheduler" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints" +) + +// AllCustomResourceValidators are the names of all custom resource validators that should be registered +var AllCustomResourceValidators = []string{ + apiserver.PluginName, + authentication.PluginName, + features.PluginName, + console.PluginName, + image.PluginName, + oauth.PluginName, + project.PluginName, + config.PluginName, + scheduler.PluginName, + clusterresourcequota.PluginName, + securitycontextconstraints.PluginName, + rolebindingrestriction.PluginName, + + // this one is special because we don't work without it. + securitycontextconstraints.DefaultingPluginName, +} + +func RegisterCustomResourceValidation(plugins *admission.Plugins) { + apiserver.Register(plugins) + authentication.Register(plugins) + features.Register(plugins) + console.Register(plugins) + image.Register(plugins) + oauth.Register(plugins) + project.Register(plugins) + config.Register(plugins) + scheduler.Register(plugins) + + // This plugin validates the quota.openshift.io/v1 ClusterResourceQuota resources. + // NOTE: This is only allowed because it is required to get a running control plane operator. + clusterresourcequota.Register(plugins) + // This plugin validates the security.openshift.io/v1 SecurityContextConstraints resources. + securitycontextconstraints.Register(plugins) + // This plugin validates the authorization.openshift.io/v1 RoleBindingRestriction resources. + rolebindingrestriction.Register(plugins) + + // this one is special because we don't work without it. + securitycontextconstraints.RegisterDefaulting(plugins) +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidator.go b/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidator.go new file mode 100644 index 0000000000000..6cb55fe81988c --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidator.go @@ -0,0 +1,98 @@ +package customresourcevalidation + +import ( + "context" + "fmt" + + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" +) + +type ObjectValidator interface { + ValidateCreate(obj runtime.Object) field.ErrorList + ValidateUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList + ValidateStatusUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList +} + +// ValidateCustomResource is an implementation of admission.Interface. +// It looks at all new pods and overrides each container's image pull policy to Always. +type validateCustomResource struct { + *admission.Handler + + resources map[schema.GroupResource]bool + validators map[schema.GroupVersionKind]ObjectValidator +} + +func NewValidator(resources map[schema.GroupResource]bool, validators map[schema.GroupVersionKind]ObjectValidator) (admission.ValidationInterface, error) { + return &validateCustomResource{ + Handler: admission.NewHandler(admission.Create, admission.Update), + resources: resources, + validators: validators, + }, nil +} + +var _ admission.ValidationInterface = &validateCustomResource{} + +// Validate is an admission function that will validate a CRD in config.openshift.io. uncastAttributes are attributes +// that are of type unstructured. +func (a *validateCustomResource) Validate(ctx context.Context, uncastAttributes admission.Attributes, _ admission.ObjectInterfaces) error { + attributes := &unstructuredUnpackingAttributes{Attributes: uncastAttributes} + if a.shouldIgnore(attributes) { + return nil + } + validator, ok := a.validators[attributes.GetKind()] + if !ok { + return admission.NewForbidden(attributes, fmt.Errorf("unhandled kind: %v", attributes.GetKind())) + } + + switch attributes.GetOperation() { + case admission.Create: + // creating subresources isn't something we understand, but we can be pretty sure we don't need to validate it + if len(attributes.GetSubresource()) > 0 { + return nil + } + errors := validator.ValidateCreate(attributes.GetObject()) + if len(errors) == 0 { + return nil + } + return apierrors.NewInvalid(attributes.GetKind().GroupKind(), attributes.GetName(), errors) + + case admission.Update: + switch attributes.GetSubresource() { + case "": + errors := validator.ValidateUpdate(attributes.GetObject(), attributes.GetOldObject()) + if len(errors) == 0 { + return nil + } + return apierrors.NewInvalid(attributes.GetKind().GroupKind(), attributes.GetName(), errors) + + case "status": + errors := validator.ValidateStatusUpdate(attributes.GetObject(), attributes.GetOldObject()) + if len(errors) == 0 { + return nil + } + return apierrors.NewInvalid(attributes.GetKind().GroupKind(), attributes.GetName(), errors) + + default: + return admission.NewForbidden(attributes, fmt.Errorf("unhandled subresource: %v", attributes.GetSubresource())) + } + + default: + return admission.NewForbidden(attributes, fmt.Errorf("unhandled operation: %v", attributes.GetOperation())) + } +} + +func (a *validateCustomResource) shouldIgnore(attributes admission.Attributes) bool { + if !a.resources[attributes.GetResource().GroupResource()] { + return true + } + // if a subresource is specified and it isn't status, skip it + if len(attributes.GetSubresource()) > 0 && attributes.GetSubresource() != "status" { + return true + } + + return false +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidator_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidator_test.go new file mode 100644 index 0000000000000..6a53c16c062ca --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidator_test.go @@ -0,0 +1,278 @@ +package customresourcevalidation + +import ( + "context" + "errors" + "fmt" + "reflect" + "testing" + + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/authentication/user" + + configv1 "github.com/openshift/api/config/v1" +) + +func TestCustomResourceValidator(t *testing.T) { + + const ( + testGroup = "config.openshift.io" + testVersion = "v1" + testResource = "images" + testKind = "Image" + ) + + var testObjectType *configv1.Image + + testCases := []struct { + description string + object runtime.Object + objectBytes []byte + oldObject runtime.Object + oldObjectBytes []byte + kind schema.GroupVersionKind + namespace string + name string + resource schema.GroupVersionResource + subresource string + operation admission.Operation + userInfo user.Info + expectError bool + expectCreateFuncCalled bool + expectUpdateFuncCalled bool + expectStatusUpdateFuncCalled bool + validateFuncErr bool + expectedObjectType interface{} + }{ + { + description: "ShouldIgnoreUnknownResource", + resource: schema.GroupVersionResource{ + Group: "other_group", + Version: "other_version", + Resource: "other_resource", + }, + }, + { + description: "ShouldIgnoreUnknownSubresource", + subresource: "not_status", + }, + { + description: "ShouldIgnoreUnknownSubresource", + subresource: "not_status", + }, + { + description: "UnhandledOperationConnect", + operation: admission.Connect, + expectError: true, + }, + { + description: "UnhandledOperationDelete", + operation: admission.Delete, + expectError: true, + }, + { + description: "UnhandledKind", + operation: admission.Create, + kind: schema.GroupVersionKind{ + Group: "other_group", + Version: "other_version", + Kind: "other_resource", + }, + expectError: true, + }, + { + description: "Create", + operation: admission.Create, + objectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), + expectCreateFuncCalled: true, + expectedObjectType: testObjectType, + }, + { + description: "CreateSubresourceNope", + operation: admission.Create, + subresource: "status", + objectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), + }, + { + description: "CreateError", + operation: admission.Create, + objectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), + validateFuncErr: true, + expectCreateFuncCalled: true, + expectError: true, + }, + { + description: "Update", + operation: admission.Update, + objectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), + oldObjectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), + expectUpdateFuncCalled: true, + expectedObjectType: testObjectType, + }, + { + description: "UpdateError", + operation: admission.Update, + objectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), + oldObjectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), + validateFuncErr: true, + expectError: true, + }, + { + description: "UpdateStatus", + operation: admission.Update, + subresource: "status", + objectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), + oldObjectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), + expectStatusUpdateFuncCalled: true, + expectedObjectType: testObjectType, + }, + { + description: "UpdateStatusError", + operation: admission.Update, + subresource: "status", + objectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), + oldObjectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), + expectStatusUpdateFuncCalled: true, + validateFuncErr: true, + expectError: true, + }, + } + + for _, tc := range testCases { + t.Run(tc.description, func(t *testing.T) { + + var createFuncCalled bool + var updateFuncCalled bool + var updateStatusFuncCalled bool + var funcArgObject runtime.Object + var funcArgOldObject runtime.Object + + handler, err := NewValidator( + map[schema.GroupResource]bool{ + {Group: testGroup, Resource: testResource}: true, + }, + map[schema.GroupVersionKind]ObjectValidator{ + {Group: testGroup, Version: testVersion, Kind: testKind}: testValidator{ + validateCreate: func(obj runtime.Object) field.ErrorList { + createFuncCalled = true + if tc.validateFuncErr { + return field.ErrorList{field.InternalError(field.NewPath("test"), errors.New("TEST Error"))} + } + funcArgObject = obj + return nil + }, + validateUpdate: func(obj runtime.Object, oldObj runtime.Object) field.ErrorList { + if tc.validateFuncErr { + return field.ErrorList{field.InternalError(field.NewPath("test"), errors.New("TEST Error"))} + } + updateFuncCalled = true + funcArgObject = obj + funcArgOldObject = oldObj + return nil + }, + validateStatusUpdate: func(obj runtime.Object, oldObj runtime.Object) field.ErrorList { + updateStatusFuncCalled = true + if tc.validateFuncErr { + return field.ErrorList{field.InternalError(field.NewPath("test"), errors.New("TEST Error"))} + } + funcArgObject = obj + funcArgOldObject = oldObj + return nil + }, + }, + }, + ) + if err != nil { + t.Fatal(err) + } + validator := handler.(admission.ValidationInterface) + + if len(tc.objectBytes) > 0 { + object, kind, err := unstructured.UnstructuredJSONScheme.Decode(tc.objectBytes, nil, nil) + if err != nil { + t.Fatal(err) + } + tc.object = object.(runtime.Object) + tc.kind = *kind + } + + if len(tc.oldObjectBytes) > 0 { + object, kind, err := unstructured.UnstructuredJSONScheme.Decode(tc.oldObjectBytes, nil, nil) + if err != nil { + t.Fatal(err) + } + tc.oldObject = object.(runtime.Object) + tc.kind = *kind + } + + if tc.resource == (schema.GroupVersionResource{}) { + tc.resource = schema.GroupVersionResource{ + Group: testGroup, + Version: testVersion, + Resource: testResource, + } + } + + attributes := admission.NewAttributesRecord( + tc.object, + tc.oldObject, + tc.kind, + tc.namespace, + tc.name, + tc.resource, + tc.subresource, + tc.operation, + nil, + false, + tc.userInfo, + ) + + err = validator.Validate(context.TODO(), attributes, nil) + switch { + case tc.expectError && err == nil: + t.Error("Error expected") + case !tc.expectError && err != nil: + t.Errorf("Unexpected error: %v", err) + } + if tc.expectCreateFuncCalled != createFuncCalled { + t.Errorf("ValidateObjCreateFunc called: expected: %v, actual: %v", tc.expectCreateFuncCalled, createFuncCalled) + } + if tc.expectUpdateFuncCalled != updateFuncCalled { + t.Errorf("ValidateObjUpdateFunc called: expected: %v, actual: %v", tc.expectUpdateFuncCalled, updateFuncCalled) + } + if tc.expectStatusUpdateFuncCalled != updateStatusFuncCalled { + t.Errorf("ValidateStatusUpdateFunc called: expected: %v, actual: %v", tc.expectStatusUpdateFuncCalled, updateStatusFuncCalled) + } + if reflect.TypeOf(tc.expectedObjectType) != reflect.TypeOf(funcArgObject) { + t.Errorf("Expected %T, actual %T", tc.expectedObjectType, funcArgObject) + } + if (tc.oldObject != nil) && (reflect.TypeOf(tc.expectedObjectType) != reflect.TypeOf(funcArgOldObject)) { + t.Errorf("Expected %T, actual %T", tc.expectedObjectType, funcArgOldObject) + } + }) + } + +} + +type testValidator struct { + validateCreate func(uncastObj runtime.Object) field.ErrorList + validateUpdate func(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList + validateStatusUpdate func(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList +} + +func (v testValidator) ValidateCreate(uncastObj runtime.Object) field.ErrorList { + return v.validateCreate(uncastObj) +} + +func (v testValidator) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + return v.validateUpdate(uncastObj, uncastOldObj) + +} + +func (v testValidator) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + return v.validateStatusUpdate(uncastObj, uncastOldObj) +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/features/validate_features.go b/openshift-kube-apiserver/admission/customresourcevalidation/features/validate_features.go new file mode 100644 index 0000000000000..051ad9d4e3a24 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/features/validate_features.go @@ -0,0 +1,129 @@ +package features + +import ( + "fmt" + "io" + + "k8s.io/apimachinery/pkg/util/sets" + + "k8s.io/apimachinery/pkg/api/validation" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + + configv1 "github.com/openshift/api/config/v1" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +const PluginName = "config.openshift.io/ValidateFeatureGate" + +// Register registers a plugin +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { + return customresourcevalidation.NewValidator( + map[schema.GroupResource]bool{ + configv1.Resource("features"): true, + }, + map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ + configv1.GroupVersion.WithKind("FeatureGate"): featureGateV1{}, + }) + }) +} + +func toFeatureGateV1(uncastObj runtime.Object) (*configv1.FeatureGate, field.ErrorList) { + if uncastObj == nil { + return nil, nil + } + + allErrs := field.ErrorList{} + + obj, ok := uncastObj.(*configv1.FeatureGate) + if !ok { + return nil, append(allErrs, + field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"FeatureGate"}), + field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) + } + + return obj, nil +} + +type featureGateV1 struct { +} + +var knownFeatureSets = sets.NewString("", string(configv1.TechPreviewNoUpgrade), string(configv1.CustomNoUpgrade)) + +func validateFeatureGateSpecCreate(spec configv1.FeatureGateSpec) field.ErrorList { + allErrs := field.ErrorList{} + + // on create, we only allow values that we are aware of + if !knownFeatureSets.Has(string(spec.FeatureSet)) { + allErrs = append(allErrs, field.NotSupported(field.NewPath("spec.featureSet"), spec.FeatureSet, knownFeatureSets.List())) + } + + return allErrs +} + +func validateFeatureGateSpecUpdate(spec, oldSpec configv1.FeatureGateSpec) field.ErrorList { + allErrs := field.ErrorList{} + + // on update, we don't fail validation on a field we don't recognize as long as it is not changing + if !knownFeatureSets.Has(string(spec.FeatureSet)) && oldSpec.FeatureSet != spec.FeatureSet { + allErrs = append(allErrs, field.NotSupported(field.NewPath("spec.featureSet"), spec.FeatureSet, knownFeatureSets.List())) + } + + // we do not allow anyone to take back TechPreview + if oldSpec.FeatureSet == configv1.TechPreviewNoUpgrade && spec.FeatureSet != configv1.TechPreviewNoUpgrade { + allErrs = append(allErrs, field.Forbidden(field.NewPath("spec.featureSet"), "once enabled, tech preview features may not be disabled")) + } + // we do not allow anyone to take back CustomNoUpgrade + if oldSpec.FeatureSet == configv1.CustomNoUpgrade && spec.FeatureSet != configv1.CustomNoUpgrade { + allErrs = append(allErrs, field.Forbidden(field.NewPath("spec.featureSet"), "once enabled, custom feature gates may not be disabled")) + } + + return allErrs +} + +func (featureGateV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { + obj, allErrs := toFeatureGateV1(uncastObj) + if len(allErrs) > 0 { + return allErrs + } + + allErrs = append(allErrs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, customresourcevalidation.RequireNameCluster, field.NewPath("metadata"))...) + allErrs = append(allErrs, validateFeatureGateSpecCreate(obj.Spec)...) + + return allErrs +} + +func (featureGateV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, allErrs := toFeatureGateV1(uncastObj) + if len(allErrs) > 0 { + return allErrs + } + oldObj, allErrs := toFeatureGateV1(uncastOldObj) + if len(allErrs) > 0 { + return allErrs + } + + allErrs = append(allErrs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, validateFeatureGateSpecUpdate(obj.Spec, oldObj.Spec)...) + + return allErrs +} + +func (featureGateV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, errs := toFeatureGateV1(uncastObj) + if len(errs) > 0 { + return errs + } + oldObj, errs := toFeatureGateV1(uncastOldObj) + if len(errs) > 0 { + return errs + } + + // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. + errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + + return errs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/features/validate_features_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/features/validate_features_test.go new file mode 100644 index 0000000000000..840d7d8aea8c8 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/features/validate_features_test.go @@ -0,0 +1,127 @@ +package features + +import ( + "strings" + "testing" + + configv1 "github.com/openshift/api/config/v1" +) + +func TestValidateCreateSpec(t *testing.T) { + tests := []struct { + name string + featureSet string + expectedErr string + }{ + { + name: "empty", + featureSet: "", + expectedErr: "", + }, + { + name: "techpreview", + featureSet: string(configv1.TechPreviewNoUpgrade), + expectedErr: "", + }, + { + name: "not real", + featureSet: "fake-value", + expectedErr: "Unsupported value", + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + actual := validateFeatureGateSpecCreate(configv1.FeatureGateSpec{FeatureGateSelection: configv1.FeatureGateSelection{FeatureSet: configv1.FeatureSet(tc.featureSet)}}) + switch { + case len(actual) == 0 && len(tc.expectedErr) == 0: + case len(actual) == 0 && len(tc.expectedErr) != 0: + t.Fatal(tc.expectedErr) + case len(actual) != 0 && len(tc.expectedErr) == 0: + t.Fatal(actual) + case len(actual) != 0 && len(tc.expectedErr) != 0: + found := false + for _, actualErr := range actual { + found = found || strings.Contains(actualErr.Error(), tc.expectedErr) + } + if !found { + t.Fatal(actual) + } + default: + } + + }) + } +} + +func TestValidateUpdateSpec(t *testing.T) { + tests := []struct { + name string + featureSet string + oldFeatureSet string + expectedErr string + }{ + { + name: "empty", + featureSet: "", + oldFeatureSet: "", + expectedErr: "", + }, + { + name: "change to techpreview", + featureSet: string(configv1.TechPreviewNoUpgrade), + oldFeatureSet: "", + expectedErr: "", + }, + { + name: "change from techpreview", + featureSet: "", + oldFeatureSet: string(configv1.TechPreviewNoUpgrade), + expectedErr: "once enabled, tech preview features may not be disabled", + }, + { + name: "change from custom", + featureSet: string(configv1.TechPreviewNoUpgrade), + oldFeatureSet: string(configv1.CustomNoUpgrade), + expectedErr: "once enabled, custom feature gates may not be disabled", + }, + { + name: "unknown, but no change", + featureSet: "fake-value", + oldFeatureSet: "fake-value", + expectedErr: "", + }, + { + name: "unknown, with change", + featureSet: "fake-value", + oldFeatureSet: "fake-value-2", + expectedErr: "Unsupported value", + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + actual := validateFeatureGateSpecUpdate( + configv1.FeatureGateSpec{FeatureGateSelection: configv1.FeatureGateSelection{FeatureSet: configv1.FeatureSet(tc.featureSet)}}, + configv1.FeatureGateSpec{FeatureGateSelection: configv1.FeatureGateSelection{FeatureSet: configv1.FeatureSet(tc.oldFeatureSet)}}, + ) + switch { + case len(actual) == 0 && len(tc.expectedErr) == 0: + case len(actual) == 0 && len(tc.expectedErr) != 0: + t.Fatal(tc.expectedErr) + case len(actual) != 0 && len(tc.expectedErr) == 0: + t.Fatal(actual) + case len(actual) != 0 && len(tc.expectedErr) != 0: + found := false + for _, actualErr := range actual { + found = found || strings.Contains(actualErr.Error(), tc.expectedErr) + } + if !found { + t.Fatal(actual) + } + default: + } + + }) + } +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/helpers.go b/openshift-kube-apiserver/admission/customresourcevalidation/helpers.go new file mode 100644 index 0000000000000..9248d469a7b95 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/helpers.go @@ -0,0 +1,40 @@ +package customresourcevalidation + +import ( + "strings" + + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/kubernetes/pkg/apis/core/validation" + + configv1 "github.com/openshift/api/config/v1" +) + +func ValidateConfigMapReference(path *field.Path, configMap configv1.ConfigMapNameReference, required bool) field.ErrorList { + return validateConfigMapSecret(path.Child("name"), configMap.Name, required, validation.ValidateConfigMapName) +} + +func ValidateSecretReference(path *field.Path, secret configv1.SecretNameReference, required bool) field.ErrorList { + return validateConfigMapSecret(path.Child("name"), secret.Name, required, validation.ValidateSecretName) +} + +func validateConfigMapSecret(path *field.Path, name string, required bool, validator validation.ValidateNameFunc) field.ErrorList { + if len(name) == 0 { + if required { + return field.ErrorList{field.Required(path, "")} + } + return nil + } + + if valErrs := validator(name, false); len(valErrs) > 0 { + return field.ErrorList{field.Invalid(path, name, strings.Join(valErrs, ", "))} + } + return nil +} + +// RequireNameCluster is a name validation function that requires the name to be cluster. It's handy for config.openshift.io types. +func RequireNameCluster(name string, prefix bool) []string { + if name != "cluster" { + return []string{"must be cluster"} + } + return nil +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/image/validate_image.go b/openshift-kube-apiserver/admission/customresourcevalidation/image/validate_image.go new file mode 100644 index 0000000000000..535c0908296d0 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/image/validate_image.go @@ -0,0 +1,94 @@ +package image + +import ( + "fmt" + "io" + + "k8s.io/apimachinery/pkg/api/validation" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + + configv1 "github.com/openshift/api/config/v1" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +const PluginName = "config.openshift.io/ValidateImage" + +// Register registers a plugin +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { + return customresourcevalidation.NewValidator( + map[schema.GroupResource]bool{ + configv1.Resource("images"): true, + }, + map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ + configv1.GroupVersion.WithKind("Image"): imageV1{}, + }) + }) +} + +func toImageV1(uncastObj runtime.Object) (*configv1.Image, field.ErrorList) { + if uncastObj == nil { + return nil, nil + } + + allErrs := field.ErrorList{} + + obj, ok := uncastObj.(*configv1.Image) + if !ok { + return nil, append(allErrs, + field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"Image"}), + field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) + } + + return obj, nil +} + +type imageV1 struct { +} + +func (imageV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { + obj, errs := toImageV1(uncastObj) + if len(errs) > 0 { + return errs + } + + // TODO validate the obj + errs = append(errs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, customresourcevalidation.RequireNameCluster, field.NewPath("metadata"))...) + + return errs +} + +func (imageV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, errs := toImageV1(uncastObj) + if len(errs) > 0 { + return errs + } + oldObj, errs := toImageV1(uncastOldObj) + if len(errs) > 0 { + return errs + } + + // TODO validate the obj + errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + + return errs +} + +func (imageV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, errs := toImageV1(uncastObj) + if len(errs) > 0 { + return errs + } + oldObj, errs := toImageV1(uncastOldObj) + if len(errs) > 0 { + return errs + } + + // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. + errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + + return errs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/helpers.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/helpers.go new file mode 100644 index 0000000000000..127c91e1312d1 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/helpers.go @@ -0,0 +1,33 @@ +package oauth + +import ( + "net" + + kvalidation "k8s.io/apimachinery/pkg/util/validation" + "k8s.io/apimachinery/pkg/util/validation/field" + + configv1 "github.com/openshift/api/config/v1" + "github.com/openshift/library-go/pkg/config/validation" + crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +func isValidHostname(hostname string) bool { + return len(kvalidation.IsDNS1123Subdomain(hostname)) == 0 || net.ParseIP(hostname) != nil +} + +func ValidateRemoteConnectionInfo(remoteConnectionInfo configv1.OAuthRemoteConnectionInfo, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if len(remoteConnectionInfo.URL) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("url"), "")) + } else { + _, urlErrs := validation.ValidateSecureURL(remoteConnectionInfo.URL, fldPath.Child("url")) + allErrs = append(allErrs, urlErrs...) + } + + allErrs = append(allErrs, crvalidation.ValidateConfigMapReference(fldPath.Child("ca"), remoteConnectionInfo.CA, false)...) + allErrs = append(allErrs, crvalidation.ValidateSecretReference(fldPath.Child("tlsClientCert"), remoteConnectionInfo.TLSClientCert, false)...) + allErrs = append(allErrs, crvalidation.ValidateSecretReference(fldPath.Child("tlsClientKey"), remoteConnectionInfo.TLSClientKey, false)...) + + return allErrs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_github.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_github.go new file mode 100644 index 0000000000000..2ae0b45254a14 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_github.go @@ -0,0 +1,69 @@ +package oauth + +import ( + "strings" + + "k8s.io/apimachinery/pkg/util/validation/field" + + configv1 "github.com/openshift/api/config/v1" + crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +func ValidateGitHubIdentityProvider(provider *configv1.GitHubIdentityProvider, mappingMethod configv1.MappingMethodType, fieldPath *field.Path) field.ErrorList { + errs := field.ErrorList{} + if provider == nil { + errs = append(errs, field.Required(fieldPath, "")) + return errs + } + + errs = append(errs, ValidateOAuthIdentityProvider(provider.ClientID, provider.ClientSecret, fieldPath.Child("provider"))...) + + if len(provider.Teams) > 0 && len(provider.Organizations) > 0 { + errs = append(errs, field.Invalid(fieldPath.Child("organizations"), provider.Organizations, "specify organizations or teams, not both")) + errs = append(errs, field.Invalid(fieldPath.Child("teams"), provider.Teams, "specify organizations or teams, not both")) + } + + // only check that there are some teams/orgs if not GitHub Enterprise Server + if len(provider.Hostname) == 0 && len(provider.Teams) == 0 && len(provider.Organizations) == 0 && mappingMethod != configv1.MappingMethodLookup { + errs = append(errs, field.Invalid(fieldPath, nil, "one of organizations or teams must be specified unless hostname is set or lookup is used")) + } + for i, organization := range provider.Organizations { + if strings.Contains(organization, "/") { + errs = append(errs, field.Invalid(fieldPath.Child("organizations").Index(i), organization, "cannot contain /")) + } + if len(organization) == 0 { + errs = append(errs, field.Required(fieldPath.Child("organizations").Index(i), "cannot be empty")) + } + } + for i, team := range provider.Teams { + if split := strings.Split(team, "/"); len(split) != 2 { + errs = append(errs, field.Invalid(fieldPath.Child("teams").Index(i), team, "must be in the format /")) + } else if org, t := split[0], split[1]; len(org) == 0 || len(t) == 0 { + errs = append(errs, field.Invalid(fieldPath.Child("teams").Index(i), team, "must be in the format /")) + } + } + + if hostname := provider.Hostname; len(hostname) != 0 { + hostnamePath := fieldPath.Child("hostname") + + if hostname == "github.com" || strings.HasSuffix(hostname, ".github.com") { + errs = append(errs, field.Invalid(hostnamePath, hostname, "cannot equal [*.]github.com")) + } + + if !isValidHostname(hostname) { + errs = append(errs, field.Invalid(hostnamePath, hostname, "must be a valid DNS subdomain or IP address")) + } + } + + if caFile := provider.CA; len(caFile.Name) != 0 { + caPath := fieldPath.Child("ca") + + errs = append(errs, crvalidation.ValidateConfigMapReference(caPath, caFile, true)...) + + if len(provider.Hostname) == 0 { + errs = append(errs, field.Invalid(caPath, caFile, "cannot be specified when hostname is empty")) + } + } + + return errs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_github_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_github_test.go new file mode 100644 index 0000000000000..a11abb797f231 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_github_test.go @@ -0,0 +1,249 @@ +package oauth + +import ( + "reflect" + "testing" + + "k8s.io/apimachinery/pkg/util/validation/field" + + configv1 "github.com/openshift/api/config/v1" +) + +func TestValidateGitHubIdentityProvider(t *testing.T) { + type args struct { + provider *configv1.GitHubIdentityProvider + mappingMethod configv1.MappingMethodType + fieldPath *field.Path + } + tests := []struct { + name string + args args + errors field.ErrorList + }{ + { + name: "cannot use GH as hostname", + args: args{ + provider: &configv1.GitHubIdentityProvider{ + ClientID: "client", + ClientSecret: configv1.SecretNameReference{Name: "secret"}, + Organizations: []string{"org1"}, + Teams: nil, + Hostname: "github.com", + CA: configv1.ConfigMapNameReference{Name: "caconfigmap"}, + }, + mappingMethod: "", + }, + errors: field.ErrorList{ + {Type: field.ErrorTypeInvalid, Field: "hostname", BadValue: "github.com", Detail: "cannot equal [*.]github.com"}, + }, + }, + { + name: "cannot use GH subdomain as hostname", + args: args{ + provider: &configv1.GitHubIdentityProvider{ + ClientID: "client", + ClientSecret: configv1.SecretNameReference{Name: "secret"}, + Organizations: []string{"org1"}, + Teams: nil, + Hostname: "foo.github.com", + CA: configv1.ConfigMapNameReference{Name: "caconfigmap"}, + }, + mappingMethod: "", + }, + errors: field.ErrorList{ + {Type: field.ErrorTypeInvalid, Field: "hostname", BadValue: "foo.github.com", Detail: "cannot equal [*.]github.com"}, + }, + }, + { + name: "valid domain hostname", + args: args{ + provider: &configv1.GitHubIdentityProvider{ + ClientID: "client", + ClientSecret: configv1.SecretNameReference{Name: "secret"}, + Organizations: []string{"org1"}, + Teams: nil, + Hostname: "company.com", + CA: configv1.ConfigMapNameReference{Name: "caconfigmap"}, + }, + mappingMethod: "", + }, + }, + { + name: "valid ip hostname", + args: args{ + provider: &configv1.GitHubIdentityProvider{ + ClientID: "client", + ClientSecret: configv1.SecretNameReference{Name: "secret"}, + Organizations: []string{"org1"}, + Teams: nil, + Hostname: "192.168.8.1", + CA: configv1.ConfigMapNameReference{Name: "caconfigmap"}, + }, + mappingMethod: "", + }, + }, + { + name: "invalid ip hostname with port", + args: args{ + provider: &configv1.GitHubIdentityProvider{ + ClientID: "client", + ClientSecret: configv1.SecretNameReference{Name: "secret"}, + Organizations: []string{"org1"}, + Teams: nil, + Hostname: "192.168.8.1:8080", + CA: configv1.ConfigMapNameReference{Name: "caconfigmap"}, + }, + mappingMethod: "", + }, + errors: field.ErrorList{ + {Type: field.ErrorTypeInvalid, Field: "hostname", BadValue: "192.168.8.1:8080", Detail: "must be a valid DNS subdomain or IP address"}, + }, + }, + { + name: "invalid domain hostname", + args: args{ + provider: &configv1.GitHubIdentityProvider{ + ClientID: "client", + ClientSecret: configv1.SecretNameReference{Name: "secret"}, + Organizations: []string{"org1"}, + Teams: nil, + Hostname: "google-.com", + CA: configv1.ConfigMapNameReference{Name: "caconfigmap"}, + }, + mappingMethod: "", + }, + errors: field.ErrorList{ + {Type: field.ErrorTypeInvalid, Field: "hostname", BadValue: "google-.com", Detail: "must be a valid DNS subdomain or IP address"}, + }, + }, + { + name: "invalid name in ca ref and no hostname", + args: args{ + provider: &configv1.GitHubIdentityProvider{ + ClientID: "client", + ClientSecret: configv1.SecretNameReference{Name: "secret"}, + Organizations: []string{"org1"}, + Teams: nil, + Hostname: "", + CA: configv1.ConfigMapNameReference{Name: "ca&config-map"}, + }, + mappingMethod: "", + }, + errors: field.ErrorList{ + {Type: field.ErrorTypeInvalid, Field: "ca.name", BadValue: "ca&config-map", Detail: "a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')"}, + {Type: field.ErrorTypeInvalid, Field: "ca", BadValue: configv1.ConfigMapNameReference{Name: "ca&config-map"}, Detail: "cannot be specified when hostname is empty"}, + }, + }, + { + name: "valid ca and hostname", + args: args{ + provider: &configv1.GitHubIdentityProvider{ + ClientID: "client", + ClientSecret: configv1.SecretNameReference{Name: "secret"}, + Organizations: []string{"org1"}, + Teams: nil, + Hostname: "mo.co", + CA: configv1.ConfigMapNameReference{Name: "ca-config-map"}, + }, + mappingMethod: "", + }, + }, + { + name: "GitHub requires client ID and secret", + args: args{ + provider: &configv1.GitHubIdentityProvider{ + ClientID: "", + ClientSecret: configv1.SecretNameReference{}, + Organizations: []string{"org1"}, + Teams: nil, + Hostname: "", + CA: configv1.ConfigMapNameReference{}, + }, + mappingMethod: "", + }, + errors: field.ErrorList{ + {Type: field.ErrorTypeRequired, Field: "provider.clientID", BadValue: "", Detail: ""}, + {Type: field.ErrorTypeRequired, Field: "provider.clientSecret.name", BadValue: "", Detail: ""}, + }, + }, + { + name: "GitHub warns when not constrained to organizations or teams without lookup", + args: args{ + provider: &configv1.GitHubIdentityProvider{ + ClientID: "client", + ClientSecret: configv1.SecretNameReference{Name: "secret"}, + Organizations: nil, + Teams: nil, + Hostname: "", + CA: configv1.ConfigMapNameReference{}, + }, + mappingMethod: "", + }, + errors: field.ErrorList{ + {Type: field.ErrorTypeInvalid, Field: "", BadValue: nil, Detail: "one of organizations or teams must be specified unless hostname is set or lookup is used"}, + }, + }, + { + name: "GitHub does not warn when not constrained to organizations or teams with lookup", + args: args{ + provider: &configv1.GitHubIdentityProvider{ + ClientID: "client", + ClientSecret: configv1.SecretNameReference{Name: "secret"}, + Organizations: nil, + Teams: nil, + Hostname: "", + CA: configv1.ConfigMapNameReference{}, + }, + mappingMethod: "lookup", + }, + }, + { + name: "invalid cannot specific both organizations and teams", + args: args{ + provider: &configv1.GitHubIdentityProvider{ + ClientID: "client", + ClientSecret: configv1.SecretNameReference{Name: "secret"}, + Organizations: []string{"org1"}, + Teams: []string{"org1/team1"}, + Hostname: "", + CA: configv1.ConfigMapNameReference{}, + }, + mappingMethod: "", + }, + errors: field.ErrorList{ + {Type: field.ErrorTypeInvalid, Field: "organizations", BadValue: []string{"org1"}, Detail: "specify organizations or teams, not both"}, + {Type: field.ErrorTypeInvalid, Field: "teams", BadValue: []string{"org1/team1"}, Detail: "specify organizations or teams, not both"}, + }, + }, + { + name: "invalid team format", + args: args{ + provider: &configv1.GitHubIdentityProvider{ + ClientID: "client", + ClientSecret: configv1.SecretNameReference{Name: "secret"}, + Organizations: nil, + Teams: []string{"org1/team1", "org2/not/team2", "org3//team3", "", "org4/team4"}, + Hostname: "", + CA: configv1.ConfigMapNameReference{}, + }, + mappingMethod: "", + }, + errors: field.ErrorList{ + {Type: field.ErrorTypeInvalid, Field: "teams[1]", BadValue: "org2/not/team2", Detail: "must be in the format /"}, + {Type: field.ErrorTypeInvalid, Field: "teams[2]", BadValue: "org3//team3", Detail: "must be in the format /"}, + {Type: field.ErrorTypeInvalid, Field: "teams[3]", BadValue: "", Detail: "must be in the format /"}, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := ValidateGitHubIdentityProvider(tt.args.provider, tt.args.mappingMethod, tt.args.fieldPath) + if tt.errors == nil && len(got) == 0 { + return + } + if !reflect.DeepEqual(got, tt.errors) { + t.Errorf("ValidateGitHubIdentityProvider() = %v, want %v", got, tt.errors) + } + }) + } +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_gitlab.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_gitlab.go new file mode 100644 index 0000000000000..ea9fda2ab4d8c --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_gitlab.go @@ -0,0 +1,26 @@ +package oauth + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + + configv1 "github.com/openshift/api/config/v1" + "github.com/openshift/library-go/pkg/config/validation" + crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +func ValidateGitLabIdentityProvider(provider *configv1.GitLabIdentityProvider, fieldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if provider == nil { + allErrs = append(allErrs, field.Required(fieldPath, "")) + return allErrs + } + + allErrs = append(allErrs, ValidateOAuthIdentityProvider(provider.ClientID, provider.ClientSecret, fieldPath)...) + + _, urlErrs := validation.ValidateSecureURL(provider.URL, fieldPath.Child("url")) + allErrs = append(allErrs, urlErrs...) + + allErrs = append(allErrs, crvalidation.ValidateConfigMapReference(fieldPath.Child("ca"), provider.CA, false)...) + + return allErrs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_gitlab_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_gitlab_test.go new file mode 100644 index 0000000000000..9ce73cdc731ee --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_gitlab_test.go @@ -0,0 +1,104 @@ +package oauth + +import ( + "reflect" + "testing" + + configv1 "github.com/openshift/api/config/v1" + "k8s.io/apimachinery/pkg/util/validation/field" +) + +func gitlabIDP() configv1.IdentityProviderConfig { + return configv1.IdentityProviderConfig{ + Type: configv1.IdentityProviderTypeGitLab, + GitLab: &configv1.GitLabIdentityProvider{ + ClientID: "masterOfInstances", + ClientSecret: configv1.SecretNameReference{Name: "secret-gitlab-secret"}, + URL: "https://thisgitlabinstancerighthere.com", + CA: configv1.ConfigMapNameReference{Name: "letsencrypt-for-gitlab.instance"}, + }, + } +} + +func TestValidateGitLabIdentityProvider(t *testing.T) { + type args struct { + provider *configv1.GitLabIdentityProvider + fieldPath *field.Path + } + tests := []struct { + name string + args args + want field.ErrorList + }{ + { + name: "nil input provider", + want: field.ErrorList{ + field.Required(nil, ""), + }, + }, + { + name: "insecure URL", + args: args{ + provider: &configv1.GitLabIdentityProvider{ + ClientID: "hereBeMyId", + ClientSecret: configv1.SecretNameReference{Name: "gitlab-client-sec"}, + URL: "http://anyonecanseemenow.com", + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("url"), "http://anyonecanseemenow.com", "must use https scheme"), + }, + }, + { + name: "missing client ID and secret", + args: args{ + provider: &configv1.GitLabIdentityProvider{ + URL: "https://privategitlab.com", + }, + }, + want: field.ErrorList{ + field.Required(field.NewPath("clientID"), ""), + field.Required(field.NewPath("clientSecret", "name"), ""), + }, + }, + { + name: "invalid CA ref name", + args: args{ + provider: &configv1.GitLabIdentityProvider{ + ClientID: "hereBeMyId", + ClientSecret: configv1.SecretNameReference{Name: "gitlab-client-sec"}, + URL: "https://anyonecanseemenow.com", + CA: configv1.ConfigMapNameReference{Name: "veryBadRefName?:("}, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("ca", "name"), "veryBadRefName?:(", wrongConfigMapSecretErrMsg), + }, + }, + { + name: "minimal passing case", + args: args{ + provider: &configv1.GitLabIdentityProvider{ + ClientID: "hereBeMyId", + ClientSecret: configv1.SecretNameReference{Name: "gitlab-client-sec"}, + URL: "https://anyonecanseemenow.com", + }, + }, + want: field.ErrorList{}, + }, + { + name: "more complicated case", + args: args{ + provider: gitlabIDP().GitLab, + }, + want: field.ErrorList{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := ValidateGitLabIdentityProvider(tt.args.provider, tt.args.fieldPath); !reflect.DeepEqual(got, tt.want) { + t.Errorf("ValidateGitLabIdentityProvider() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_google.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_google.go new file mode 100644 index 0000000000000..481b162cf756b --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_google.go @@ -0,0 +1,23 @@ +package oauth + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + + configv1 "github.com/openshift/api/config/v1" +) + +func ValidateGoogleIdentityProvider(provider *configv1.GoogleIdentityProvider, mappingMethod configv1.MappingMethodType, fieldPath *field.Path) field.ErrorList { + errs := field.ErrorList{} + if provider == nil { + errs = append(errs, field.Required(fieldPath, "")) + return errs + } + + errs = append(errs, ValidateOAuthIdentityProvider(provider.ClientID, provider.ClientSecret, fieldPath)...) + + if len(provider.HostedDomain) == 0 && mappingMethod != configv1.MappingMethodLookup { + errs = append(errs, field.Invalid(fieldPath.Child("hostedDomain"), nil, "hostedDomain must be specified unless lookup is used")) + } + + return errs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_google_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_google_test.go new file mode 100644 index 0000000000000..88306d0f1919f --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_google_test.go @@ -0,0 +1,90 @@ +package oauth + +import ( + "reflect" + "testing" + + configv1 "github.com/openshift/api/config/v1" + "k8s.io/apimachinery/pkg/util/validation/field" +) + +func googleIDP() configv1.IdentityProviderConfig { + return configv1.IdentityProviderConfig{ + Type: configv1.IdentityProviderTypeGoogle, + Google: &configv1.GoogleIdentityProvider{ + ClientID: "masterOfInstances", + ClientSecret: configv1.SecretNameReference{Name: "secret-google-secret"}, + HostedDomain: "myprivategoogledomain.com", + }, + } +} + +func TestValidateGoogleIdentityProvider(t *testing.T) { + type args struct { + provider *configv1.GoogleIdentityProvider + mappingMethod configv1.MappingMethodType + fieldPath *field.Path + } + tests := []struct { + name string + args args + want field.ErrorList + }{ + { + name: "nil input provider", + want: field.ErrorList{ + field.Required(nil, ""), + }, + }, + { + name: "missing client ID and secret", + args: args{ + provider: &configv1.GoogleIdentityProvider{ + HostedDomain: "myprivategoogledomain.com", + }, + }, + want: field.ErrorList{ + field.Required(field.NewPath("clientID"), ""), + field.Required(field.NewPath("clientSecret", "name"), ""), + }, + }, + { + name: "no hosted domain with mapping method != 'lookup'", + args: args{ + provider: &configv1.GoogleIdentityProvider{ + ClientID: "masterOfInstances", + ClientSecret: configv1.SecretNameReference{Name: "secret-google-secret"}, + }, + mappingMethod: configv1.MappingMethodClaim, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("hostedDomain"), nil, "hostedDomain must be specified unless lookup is used"), + }, + }, + { + name: "no hosted domain with mapping method == 'lookup'", + args: args{ + provider: &configv1.GoogleIdentityProvider{ + ClientID: "masterOfInstances", + ClientSecret: configv1.SecretNameReference{Name: "secret-google-secret"}, + }, + mappingMethod: configv1.MappingMethodLookup, + }, + want: field.ErrorList{}, + }, + { + name: "working example", + args: args{ + provider: googleIDP().Google, + }, + want: field.ErrorList{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := ValidateGoogleIdentityProvider(tt.args.provider, tt.args.mappingMethod, tt.args.fieldPath); !reflect.DeepEqual(got, tt.want) { + t.Errorf("ValidateGoogleIdentityProvider() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp.go new file mode 100644 index 0000000000000..2cfb664c300d1 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp.go @@ -0,0 +1,215 @@ +package oauth + +import ( + "fmt" + "strings" + + "k8s.io/apimachinery/pkg/api/validation/path" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apimachinery/pkg/util/validation/field" + pointerutil "k8s.io/utils/pointer" + + configv1 "github.com/openshift/api/config/v1" + crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +const ( + // MinimumInactivityTimeoutSeconds defines the the smallest value allowed + // for AccessTokenInactivityTimeoutSeconds. + // It also defines the ticker interval for the token update routine as + // MinimumInactivityTimeoutSeconds / 3 is used there. + MinimumInactivityTimeoutSeconds = 5 * 60 +) + +var validMappingMethods = sets.NewString( + string(configv1.MappingMethodLookup), + string(configv1.MappingMethodClaim), + string(configv1.MappingMethodAdd), +) + +func validateOAuthSpec(spec configv1.OAuthSpec) field.ErrorList { + errs := field.ErrorList{} + specPath := field.NewPath("spec") + + providerNames := sets.NewString() + + challengeIssuingIdentityProviders := []string{} + challengeRedirectingIdentityProviders := []string{} + + // TODO move to ValidateIdentityProviders (plural) + for i, identityProvider := range spec.IdentityProviders { + if isUsedAsChallenger(identityProvider.IdentityProviderConfig) { + // TODO fix CAO to properly let you use request header and other challengers by disabling the other ones on CLI + // RequestHeaderIdentityProvider is special, it can only react to challenge clients by redirecting them + // Make sure we don't have more than a single redirector, and don't have a mix of challenge issuers and redirectors + if identityProvider.Type == configv1.IdentityProviderTypeRequestHeader { + challengeRedirectingIdentityProviders = append(challengeRedirectingIdentityProviders, identityProvider.Name) + } else { + challengeIssuingIdentityProviders = append(challengeIssuingIdentityProviders, identityProvider.Name) + } + } + + identityProviderPath := specPath.Child("identityProviders").Index(i) + errs = append(errs, ValidateIdentityProvider(identityProvider, identityProviderPath)...) + + if len(identityProvider.Name) > 0 { + if providerNames.Has(identityProvider.Name) { + errs = append(errs, field.Invalid(identityProviderPath.Child("name"), identityProvider.Name, "must have a unique name")) + } + providerNames.Insert(identityProvider.Name) + } + } + + if len(challengeRedirectingIdentityProviders) > 1 { + errs = append(errs, field.Invalid(specPath.Child("identityProviders"), "", fmt.Sprintf("only one identity provider can redirect clients requesting an authentication challenge, found: %v", strings.Join(challengeRedirectingIdentityProviders, ", ")))) + } + if len(challengeRedirectingIdentityProviders) > 0 && len(challengeIssuingIdentityProviders) > 0 { + errs = append(errs, field.Invalid(specPath.Child("identityProviders"), "", fmt.Sprintf( + "cannot mix providers that redirect clients requesting auth challenges (%s) with providers issuing challenges to those clients (%s)", + strings.Join(challengeRedirectingIdentityProviders, ", "), + strings.Join(challengeIssuingIdentityProviders, ", "), + ))) + } + + // TODO move to ValidateTokenConfig + timeout := spec.TokenConfig.AccessTokenInactivityTimeoutSeconds + if timeout > 0 && timeout < MinimumInactivityTimeoutSeconds { + errs = append(errs, field.Invalid( + specPath.Child("tokenConfig", "accessTokenInactivityTimeoutSeconds"), timeout, + fmt.Sprintf("the minimum acceptable token timeout value is %d seconds", + MinimumInactivityTimeoutSeconds))) + } + + if tokenMaxAge := spec.TokenConfig.AccessTokenMaxAgeSeconds; tokenMaxAge < 0 { + errs = append(errs, field.Invalid(specPath.Child("tokenConfig", "accessTokenMaxAgeSeconds"), tokenMaxAge, "must be a positive integer or 0")) + } + + // TODO move to ValidateTemplates + errs = append(errs, crvalidation.ValidateSecretReference(specPath.Child("templates", "login"), spec.Templates.Login, false)...) + errs = append(errs, crvalidation.ValidateSecretReference(specPath.Child("templates", "providerSelection"), spec.Templates.ProviderSelection, false)...) + errs = append(errs, crvalidation.ValidateSecretReference(specPath.Child("templates", "error"), spec.Templates.Error, false)...) + + return errs +} + +// if you change this, update the peer in user validation. also, don't change this. +func validateIdentityProviderName(name string) []string { + if reasons := path.ValidatePathSegmentName(name, false); len(reasons) != 0 { + return reasons + } + + if strings.Contains(name, ":") { + return []string{`may not contain ":"`} + } + return nil +} + +func ValidateIdentityProvider(identityProvider configv1.IdentityProvider, fldPath *field.Path) field.ErrorList { + errs := field.ErrorList{} + + if len(identityProvider.Name) == 0 { + errs = append(errs, field.Required(fldPath.Child("name"), "")) + } else if reasons := validateIdentityProviderName(identityProvider.Name); len(reasons) != 0 { + errs = append(errs, field.Invalid(fldPath.Child("name"), identityProvider.Name, strings.Join(reasons, ", "))) + } + + if len(identityProvider.MappingMethod) > 0 && !validMappingMethods.Has(string(identityProvider.MappingMethod)) { + errs = append(errs, field.NotSupported(fldPath.Child("mappingMethod"), identityProvider.MappingMethod, validMappingMethods.List())) + } + + provider := identityProvider.IdentityProviderConfig + // create a copy of the provider to simplify checking that only one IdPs is set + providerCopy := provider.DeepCopy() + switch provider.Type { + case "": + errs = append(errs, field.Required(fldPath.Child("type"), "")) + + case configv1.IdentityProviderTypeRequestHeader: + errs = append(errs, ValidateRequestHeaderIdentityProvider(provider.RequestHeader, fldPath)...) + providerCopy.RequestHeader = nil + + case configv1.IdentityProviderTypeBasicAuth: + // TODO move to ValidateBasicAuthIdentityProvider for consistency + if provider.BasicAuth == nil { + errs = append(errs, field.Required(fldPath.Child("basicAuth"), "")) + } else { + errs = append(errs, ValidateRemoteConnectionInfo(provider.BasicAuth.OAuthRemoteConnectionInfo, fldPath.Child("basicAuth"))...) + } + providerCopy.BasicAuth = nil + + case configv1.IdentityProviderTypeHTPasswd: + // TODO move to ValidateHTPasswdIdentityProvider for consistency + if provider.HTPasswd == nil { + errs = append(errs, field.Required(fldPath.Child("htpasswd"), "")) + } else { + errs = append(errs, crvalidation.ValidateSecretReference(fldPath.Child("htpasswd", "fileData"), provider.HTPasswd.FileData, true)...) + } + providerCopy.HTPasswd = nil + + case configv1.IdentityProviderTypeLDAP: + errs = append(errs, ValidateLDAPIdentityProvider(provider.LDAP, fldPath.Child("ldap"))...) + providerCopy.LDAP = nil + + case configv1.IdentityProviderTypeKeystone: + errs = append(errs, ValidateKeystoneIdentityProvider(provider.Keystone, fldPath.Child("keystone"))...) + providerCopy.Keystone = nil + + case configv1.IdentityProviderTypeGitHub: + errs = append(errs, ValidateGitHubIdentityProvider(provider.GitHub, identityProvider.MappingMethod, fldPath.Child("github"))...) + providerCopy.GitHub = nil + + case configv1.IdentityProviderTypeGitLab: + errs = append(errs, ValidateGitLabIdentityProvider(provider.GitLab, fldPath.Child("gitlab"))...) + providerCopy.GitLab = nil + + case configv1.IdentityProviderTypeGoogle: + errs = append(errs, ValidateGoogleIdentityProvider(provider.Google, identityProvider.MappingMethod, fldPath.Child("google"))...) + providerCopy.Google = nil + + case configv1.IdentityProviderTypeOpenID: + errs = append(errs, ValidateOpenIDIdentityProvider(provider.OpenID, fldPath.Child("openID"))...) + providerCopy.OpenID = nil + + default: + errs = append(errs, field.Invalid(fldPath.Child("type"), identityProvider.Type, "not a valid provider type")) + } + + if !pointerutil.AllPtrFieldsNil(providerCopy) { + errs = append(errs, field.Invalid(fldPath, identityProvider.IdentityProviderConfig, "only one identity provider can be configured in single object")) + } + + return errs +} + +func ValidateOAuthIdentityProvider(clientID string, clientSecretRef configv1.SecretNameReference, fieldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if len(clientID) == 0 { + allErrs = append(allErrs, field.Required(fieldPath.Child("clientID"), "")) + } + + allErrs = append(allErrs, crvalidation.ValidateSecretReference(fieldPath.Child("clientSecret"), clientSecretRef, true)...) + + return allErrs +} + +func isUsedAsChallenger(idp configv1.IdentityProviderConfig) bool { + // TODO this is wrong and needs to be more dynamic... + switch idp.Type { + // whitelist all the IdPs that we set `UseAsChallenger: true` in cluster-authentication-operator + case configv1.IdentityProviderTypeBasicAuth, configv1.IdentityProviderTypeGitLab, + configv1.IdentityProviderTypeHTPasswd, configv1.IdentityProviderTypeKeystone, + configv1.IdentityProviderTypeLDAP, + // guard open ID for now because it *could* have challenge in the future + configv1.IdentityProviderTypeOpenID: + return true + case configv1.IdentityProviderTypeRequestHeader: + if idp.RequestHeader == nil { + // this is an error reported elsewhere + return false + } + return len(idp.RequestHeader.ChallengeURL) > 0 + default: + return false + } +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp_test.go new file mode 100644 index 0000000000000..6c4013a4f39b1 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp_test.go @@ -0,0 +1,421 @@ +package oauth + +import ( + "fmt" + "reflect" + "testing" + + "k8s.io/apimachinery/pkg/util/validation/field" + + configv1 "github.com/openshift/api/config/v1" +) + +const wrongConfigMapSecretErrMsg string = "a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')" + +func htpasswdIDP() configv1.IdentityProviderConfig { + return configv1.IdentityProviderConfig{ + Type: configv1.IdentityProviderTypeHTPasswd, + HTPasswd: &configv1.HTPasswdIdentityProvider{ + FileData: configv1.SecretNameReference{ + Name: "innocent.llama", + }, + }, + } +} + +func TestValidateOAuthSpec(t *testing.T) { + doubledIdPs := configv1.IdentityProviderConfig{ + Type: configv1.IdentityProviderTypeHTPasswd, + HTPasswd: &configv1.HTPasswdIdentityProvider{ + FileData: configv1.SecretNameReference{ + Name: "innocent.llama", + }, + }, + GitLab: &configv1.GitLabIdentityProvider{ + ClientID: "masterOfInstances", + ClientSecret: configv1.SecretNameReference{Name: "secret-gitlab-secret"}, + URL: "https://thisgitlabinstancerighthere.com", + CA: configv1.ConfigMapNameReference{Name: "letsencrypt-for-gitlab.instance"}, + }, + } + + type args struct { + spec configv1.OAuthSpec + } + tests := []struct { + name string + args args + want field.ErrorList + }{ + { + name: "empty object", + args: args{ + spec: configv1.OAuthSpec{}, + }, + }, + { + name: "more than one challenge issuing IdPs", + args: args{ + spec: configv1.OAuthSpec{ + IdentityProviders: []configv1.IdentityProvider{ + { + Name: "htpasswd", + IdentityProviderConfig: htpasswdIDP(), + }, + { + Name: "ldap", + IdentityProviderConfig: ldapIDP(), + }, + }, + }, + }, + }, + { + name: "more than one challenge redirecting IdPs", + args: args{ + spec: configv1.OAuthSpec{ + IdentityProviders: []configv1.IdentityProvider{ + { + Name: "sso1", + IdentityProviderConfig: requestHeaderIDP(true, true), + }, + { + Name: "sso2", + IdentityProviderConfig: requestHeaderIDP(true, false), + }, + }, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("spec", "identityProviders"), "", "only one identity provider can redirect clients requesting an authentication challenge, found: sso1, sso2"), + }, + }, + { + name: "mixing challenge issuing and redirecting IdPs", + args: args{ + spec: configv1.OAuthSpec{ + IdentityProviders: []configv1.IdentityProvider{ + { + Name: "sso", + IdentityProviderConfig: requestHeaderIDP(true, false), + }, + { + Name: "ldap", + IdentityProviderConfig: ldapIDP(), + }, + }, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("spec", "identityProviders"), "", "cannot mix providers that redirect clients requesting auth challenges (sso) with providers issuing challenges to those clients (ldap)"), + }, + }, + { + name: "two IdPs with the same name", + args: args{ + spec: configv1.OAuthSpec{ + IdentityProviders: []configv1.IdentityProvider{ + { + Name: "aname", + IdentityProviderConfig: htpasswdIDP(), + }, + { + Name: "bname", + IdentityProviderConfig: htpasswdIDP(), + }, + { + Name: "aname", + IdentityProviderConfig: htpasswdIDP(), + }, + { + Name: "cname", + IdentityProviderConfig: htpasswdIDP(), + }, + }, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("spec", "identityProviders").Index(2).Child("name"), "aname", "must have a unique name"), + }, + }, + { + name: "negative token inactivity timeout", + args: args{ + spec: configv1.OAuthSpec{ + TokenConfig: configv1.TokenConfig{ + AccessTokenInactivityTimeoutSeconds: -50, + }, + }, + }, + }, + { + name: "positive token inactivity timeout", + args: args{ + spec: configv1.OAuthSpec{ + TokenConfig: configv1.TokenConfig{ + AccessTokenInactivityTimeoutSeconds: 32578, + }, + }, + }, + }, + { + name: "zero token inactivity timeout", + args: args{ + spec: configv1.OAuthSpec{ + TokenConfig: configv1.TokenConfig{ + AccessTokenInactivityTimeoutSeconds: 0, + }, + }, + }, + }, + { + name: "token inactivity timeout lower than the api constant minimum", + args: args{ + spec: configv1.OAuthSpec{ + TokenConfig: configv1.TokenConfig{ + AccessTokenInactivityTimeoutSeconds: 250, + }, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("spec", "tokenConfig", "accessTokenInactivityTimeoutSeconds"), 250, fmt.Sprintf("the minimum acceptable token timeout value is %d seconds", MinimumInactivityTimeoutSeconds)), + }, + }, + { + name: "negative token max age", + args: args{ + spec: configv1.OAuthSpec{ + TokenConfig: configv1.TokenConfig{ + AccessTokenMaxAgeSeconds: -20, + }, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("spec", "tokenConfig", "accessTokenMaxAgeSeconds"), -20, "must be a positive integer or 0"), + }, + }, + { + name: "positive token max age", + args: args{ + spec: configv1.OAuthSpec{ + TokenConfig: configv1.TokenConfig{ + AccessTokenMaxAgeSeconds: 213123, + }, + }, + }, + }, + { + name: "zero token max age", + args: args{ + spec: configv1.OAuthSpec{ + TokenConfig: configv1.TokenConfig{ + AccessTokenMaxAgeSeconds: 0, + }, + }, + }, + }, + { + name: "template names all messed up", + args: args{ + spec: configv1.OAuthSpec{ + Templates: configv1.OAuthTemplates{ + Login: configv1.SecretNameReference{Name: "/this/is/wrong.html"}, + ProviderSelection: configv1.SecretNameReference{Name: "also_wrong"}, + Error: configv1.SecretNameReference{Name: "the&very+woRst"}, + }, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("spec", "templates", "login", "name"), "/this/is/wrong.html", wrongConfigMapSecretErrMsg), + field.Invalid(field.NewPath("spec", "templates", "providerSelection", "name"), "also_wrong", wrongConfigMapSecretErrMsg), + field.Invalid(field.NewPath("spec", "templates", "error", "name"), "the&very+woRst", wrongConfigMapSecretErrMsg), + }, + }, + { + name: "everything set properly", + args: args{ + spec: configv1.OAuthSpec{ + IdentityProviders: []configv1.IdentityProvider{ + { + Name: "some_httpasswd", + IdentityProviderConfig: htpasswdIDP(), + }, + { + Name: "sso", + IdentityProviderConfig: requestHeaderIDP(false, true), + }, + }, + TokenConfig: configv1.TokenConfig{ + AccessTokenInactivityTimeoutSeconds: -1, + AccessTokenMaxAgeSeconds: 216000, + }, + Templates: configv1.OAuthTemplates{ + Login: configv1.SecretNameReference{Name: "my-login-template"}, + ProviderSelection: configv1.SecretNameReference{Name: "provider-selection.template"}, + Error: configv1.SecretNameReference{Name: "a.template-with-error"}, + }, + }, + }, + }, + { + name: "two different IdPs in one object", + args: args{ + spec: configv1.OAuthSpec{ + IdentityProviders: []configv1.IdentityProvider{ + { + Name: "bad_bad_config", + IdentityProviderConfig: doubledIdPs, + }, + }, + TokenConfig: configv1.TokenConfig{ + AccessTokenMaxAgeSeconds: 216000, + }, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("spec", "identityProviders").Index(0), doubledIdPs, "only one identity provider can be configured in single object"), + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := validateOAuthSpec(tt.args.spec) + + // DeepEqual does not seem to be working well here + var failedCheck bool + if len(got) != len(tt.want) { + failedCheck = true + } else { + // Check all the errors + for i := range got { + if got[i].Error() != tt.want[i].Error() { + failedCheck = true + break + } + } + } + + if failedCheck { + t.Errorf("validateOAuthSpec() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestValidateIdentityProvider(t *testing.T) { + type args struct { + identityProvider configv1.IdentityProvider + fldPath *field.Path + } + tests := []struct { + name string + args args + want field.ErrorList + }{ + { + name: "empty provider needs at least name and type in provider", + args: args{ + identityProvider: configv1.IdentityProvider{}, + }, + want: field.ErrorList{ + field.Required(field.NewPath("name"), ""), + field.Required(field.NewPath("type"), ""), + }, + }, + { + name: "unknown type name", + args: args{ + identityProvider: configv1.IdentityProvider{ + Name: "providingProvider", + IdentityProviderConfig: configv1.IdentityProviderConfig{ + Type: "someText", + }, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("type"), "someText", "not a valid provider type"), + }, + }, + { + name: "basic provider", + args: args{ + identityProvider: configv1.IdentityProvider{ + Name: "providingProvider", + IdentityProviderConfig: htpasswdIDP(), + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := ValidateIdentityProvider(tt.args.identityProvider, tt.args.fldPath) + // DeepEqual does not seem to be working well here + var failedCheck bool + if len(got) != len(tt.want) { + failedCheck = true + } else { + // Check all the errors + for i := range got { + if got[i].Error() != tt.want[i].Error() { + failedCheck = true + break + } + } + } + + if failedCheck { + t.Errorf("ValidateIdentityProvider() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestValidateOAuthIdentityProvider(t *testing.T) { + type args struct { + clientID string + clientSecretRef configv1.SecretNameReference + fieldPath *field.Path + } + tests := []struct { + name string + args args + want field.ErrorList + }{ + { + name: "empty client ID and secret ref", + args: args{ + clientID: "", + clientSecretRef: configv1.SecretNameReference{}, + }, + want: field.ErrorList{ + field.Required(field.NewPath("clientID"), ""), + field.Required(field.NewPath("clientSecret", "name"), ""), + }, + }, + { + name: "improper client secret refname", + args: args{ + clientID: "thisBeClient", + clientSecretRef: configv1.SecretNameReference{Name: "terribleName_forASecret"}, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("clientSecret", "name"), "terribleName_forASecret", wrongConfigMapSecretErrMsg), + }, + }, + { + name: "working example", + args: args{ + clientID: "thisBeClient", + clientSecretRef: configv1.SecretNameReference{Name: "client-secret-hideout"}, + }, + want: field.ErrorList{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := ValidateOAuthIdentityProvider(tt.args.clientID, tt.args.clientSecretRef, tt.args.fieldPath); !reflect.DeepEqual(got, tt.want) { + t.Errorf("ValidateOAuthIdentityProvider() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_keystone.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_keystone.go new file mode 100644 index 0000000000000..e1bf7cb76aed2 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_keystone.go @@ -0,0 +1,23 @@ +package oauth + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + + configv1 "github.com/openshift/api/config/v1" +) + +func ValidateKeystoneIdentityProvider(provider *configv1.KeystoneIdentityProvider, fldPath *field.Path) field.ErrorList { + errs := field.ErrorList{} + if provider == nil { + errs = append(errs, field.Required(fldPath, "")) + return errs + } + + errs = append(errs, ValidateRemoteConnectionInfo(provider.OAuthRemoteConnectionInfo, fldPath)...) + + if len(provider.DomainName) == 0 { + errs = append(errs, field.Required(field.NewPath("domainName"), "")) + } + + return errs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_keystone_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_keystone_test.go new file mode 100644 index 0000000000000..6ccdddb7b9ebf --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_keystone_test.go @@ -0,0 +1,96 @@ +package oauth + +import ( + "reflect" + "testing" + + configv1 "github.com/openshift/api/config/v1" + "k8s.io/apimachinery/pkg/util/validation/field" +) + +func keystoneIdP() configv1.IdentityProviderConfig { + return configv1.IdentityProviderConfig{ + Type: configv1.IdentityProviderTypeKeystone, + Keystone: &configv1.KeystoneIdentityProvider{ + OAuthRemoteConnectionInfo: configv1.OAuthRemoteConnectionInfo{ + URL: "https://somewhere.over.rainbow/ks", + CA: configv1.ConfigMapNameReference{Name: "govt-ca"}, + }, + DomainName: "production", + }, + } +} + +func TestValidateKeystoneIdentityProvider(t *testing.T) { + type args struct { + provider *configv1.KeystoneIdentityProvider + fldPath *field.Path + } + tests := []struct { + name string + args args + want field.ErrorList + }{ + { + name: "nil input provider", + want: field.ErrorList{ + field.Required(nil, ""), + }, + }, + { + name: "empty url", + args: args{ + provider: &configv1.KeystoneIdentityProvider{ + OAuthRemoteConnectionInfo: configv1.OAuthRemoteConnectionInfo{ + URL: "", + }, + DomainName: "production", + }, + }, + want: field.ErrorList{ + field.Required(field.NewPath("url"), ""), + }, + }, + { + name: "http url", + args: args{ + provider: &configv1.KeystoneIdentityProvider{ + OAuthRemoteConnectionInfo: configv1.OAuthRemoteConnectionInfo{ + URL: "http://foo", + }, + DomainName: "production", + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("url"), "http://foo", "must use https scheme"), + }, + }, + { + name: "missing domain name", + args: args{ + provider: &configv1.KeystoneIdentityProvider{ + OAuthRemoteConnectionInfo: configv1.OAuthRemoteConnectionInfo{ + URL: "https://keystone.openstack.nasa.gov/", + }, + }, + }, + want: field.ErrorList{ + field.Required(field.NewPath("domainName"), ""), + }, + }, + { + name: "working provider", + args: args{ + provider: keystoneIdP().Keystone, + }, + want: field.ErrorList{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := ValidateKeystoneIdentityProvider(tt.args.provider, tt.args.fldPath); !reflect.DeepEqual(got, tt.want) { + t.Errorf("ValidateKeystoneIdentityProvider() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_ldap.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_ldap.go new file mode 100644 index 0000000000000..b5f40060b9cc9 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_ldap.go @@ -0,0 +1,66 @@ +package oauth + +import ( + "fmt" + + "k8s.io/apimachinery/pkg/util/validation/field" + + configv1 "github.com/openshift/api/config/v1" + "github.com/openshift/library-go/pkg/security/ldaputil" + crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +func ValidateLDAPIdentityProvider(provider *configv1.LDAPIdentityProvider, fldPath *field.Path) field.ErrorList { + errs := field.ErrorList{} + + if provider == nil { + errs = append(errs, field.Required(fldPath, "")) + return errs + } + + errs = append(errs, validateLDAPClientConfig(provider.URL, provider.BindDN, provider.BindPassword.Name, provider.CA.Name, provider.Insecure, fldPath)...) + errs = append(errs, crvalidation.ValidateSecretReference(fldPath.Child("bindPassword"), provider.BindPassword, false)...) + errs = append(errs, crvalidation.ValidateConfigMapReference(fldPath.Child("ca"), provider.CA, false)...) + + // At least one attribute to use as the user id is required + if len(provider.Attributes.ID) == 0 { + errs = append(errs, field.Invalid(fldPath.Child("attributes", "id"), "[]", "at least one id attribute is required (LDAP standard identity attribute is 'dn')")) + } + + return errs +} + +// TODO clean this up +func validateLDAPClientConfig(url, bindDN, bindPasswordRef, CA string, insecure bool, fldPath *field.Path) field.ErrorList { + errs := field.ErrorList{} + + // Make sure bindDN and bindPassword are both set, or both unset + // Both unset means an anonymous bind is used for search (https://tools.ietf.org/html/rfc4513#section-5.1.1) + // Both set means the name/password simple bind is used for search (https://tools.ietf.org/html/rfc4513#section-5.1.3) + if (len(bindDN) == 0) != (len(bindPasswordRef) == 0) { + errs = append(errs, field.Invalid(fldPath.Child("bindDN"), bindDN, "bindDN and bindPassword must both be specified, or both be empty")) + errs = append(errs, field.Invalid(fldPath.Child("bindPassword").Child("name"), bindPasswordRef, "bindDN and bindPassword must both be specified, or both be empty")) + } + + if len(url) == 0 { + errs = append(errs, field.Required(fldPath.Child("url"), "")) + return errs + } + + u, err := ldaputil.ParseURL(url) + if err != nil { + errs = append(errs, field.Invalid(fldPath.Child("url"), url, err.Error())) + return errs + } + + if insecure { + if u.Scheme == ldaputil.SchemeLDAPS { + errs = append(errs, field.Invalid(fldPath.Child("url"), url, fmt.Sprintf("Cannot use %s scheme with insecure=true", u.Scheme))) + } + if len(CA) > 0 { + errs = append(errs, field.Invalid(fldPath.Child("ca"), CA, "Cannot specify a ca with insecure=true")) + } + } + + return errs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_ldap_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_ldap_test.go new file mode 100644 index 0000000000000..85daa9e182541 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_ldap_test.go @@ -0,0 +1,101 @@ +package oauth + +import ( + "reflect" + "testing" + + configv1 "github.com/openshift/api/config/v1" + "k8s.io/apimachinery/pkg/util/validation/field" +) + +func ldapIDP() configv1.IdentityProviderConfig { + return configv1.IdentityProviderConfig{ + Type: configv1.IdentityProviderTypeLDAP, + LDAP: &configv1.LDAPIdentityProvider{ + Attributes: configv1.LDAPAttributeMapping{ + ID: []string{"memberUid"}, + }, + BindDN: "uid=readallaccount,ou=privileged,dc=coolpeople,dc=se", + BindPassword: configv1.SecretNameReference{ + Name: "ldap-secret", + }, + CA: configv1.ConfigMapNameReference{Name: "ldap-ca-configmap"}, + Insecure: false, + URL: "ldaps://ldapinstance.corporate.coolpeople.se/ou=Groups,dc=coolpeople,dc=se?memberUid?sub", + }, + } +} + +func TestValidateLDAPIdentityProvider(t *testing.T) { + type args struct { + provider *configv1.LDAPIdentityProvider + fldPath *field.Path + } + tests := []struct { + name string + args args + want field.ErrorList + }{ + { + name: "nil input provider", + want: field.ErrorList{ + field.Required(nil, ""), + }, + }, + { + name: "invalid bindPassword ref name, missing ID", + args: args{ + provider: &configv1.LDAPIdentityProvider{ + BindPassword: configv1.SecretNameReference{Name: "bad_refname"}, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("bindDN"), "", "bindDN and bindPassword must both be specified, or both be empty"), + field.Invalid(field.NewPath("bindPassword", "name"), "bad_refname", "bindDN and bindPassword must both be specified, or both be empty"), + field.Required(field.NewPath("url"), ""), + field.Invalid(field.NewPath("bindPassword", "name"), "bad_refname", wrongConfigMapSecretErrMsg), + field.Invalid(field.NewPath("attributes", "id"), "[]", "at least one id attribute is required (LDAP standard identity attribute is 'dn')"), + }, + }, + { + name: "invalid url", + args: args{ + provider: &configv1.LDAPIdentityProvider{ + URL: "https://foo", + Attributes: configv1.LDAPAttributeMapping{ + ID: []string{"uid"}, + }, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("url"), "https://foo", `invalid scheme "https"`), + }, + }, + { + name: "minimal passing provider", + args: args{ + provider: &configv1.LDAPIdentityProvider{ + URL: "ldap://foo", + Attributes: configv1.LDAPAttributeMapping{ + ID: []string{"uid"}, + }, + }, + }, + want: field.ErrorList{}, + }, + { + name: "more complicated use", + args: args{ + provider: ldapIDP().LDAP, + }, + want: field.ErrorList{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := ValidateLDAPIdentityProvider(tt.args.provider, tt.args.fldPath); !reflect.DeepEqual(got, tt.want) { + t.Errorf("ValidateLDAPIdentityProvider() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_oauth.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_oauth.go new file mode 100644 index 0000000000000..5b8a146a6733f --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_oauth.go @@ -0,0 +1,110 @@ +package oauth + +import ( + "fmt" + "io" + + "k8s.io/apimachinery/pkg/api/validation" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + + configv1 "github.com/openshift/api/config/v1" + crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +const PluginName = "config.openshift.io/ValidateOAuth" + +// Register registers a plugin +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { + return crvalidation.NewValidator( + map[schema.GroupResource]bool{ + configv1.GroupVersion.WithResource("oauths").GroupResource(): true, + }, + map[schema.GroupVersionKind]crvalidation.ObjectValidator{ + configv1.GroupVersion.WithKind("OAuth"): oauthV1{}, + }) + }) +} + +func toOAuthV1(uncastObj runtime.Object) (*configv1.OAuth, field.ErrorList) { + if uncastObj == nil { + return nil, nil + } + + errs := field.ErrorList{} + + obj, ok := uncastObj.(*configv1.OAuth) + if !ok { + return nil, append(errs, + field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"OAuth"}), + field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) + } + + return obj, nil +} + +type oauthV1 struct{} + +func (oauthV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { + obj, errs := toOAuthV1(uncastObj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, crvalidation.RequireNameCluster, field.NewPath("metadata"))...) + errs = append(errs, validateOAuthSpecCreate(obj.Spec)...) + + return errs +} + +func (oauthV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, errs := toOAuthV1(uncastObj) + if len(errs) > 0 { + return errs + } + oldObj, errs := toOAuthV1(uncastOldObj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + errs = append(errs, validateOAuthSpecUpdate(obj.Spec, oldObj.Spec)...) + + return errs +} + +func (oauthV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, errs := toOAuthV1(uncastObj) + if len(errs) > 0 { + return errs + } + oldObj, errs := toOAuthV1(uncastOldObj) + if len(errs) > 0 { + return errs + } + + // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. + errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + errs = append(errs, validateOAuthStatus(obj.Status)...) + + return errs +} + +func validateOAuthSpecCreate(spec configv1.OAuthSpec) field.ErrorList { + return validateOAuthSpec(spec) +} + +func validateOAuthSpecUpdate(newspec, oldspec configv1.OAuthSpec) field.ErrorList { + return validateOAuthSpec(newspec) +} + +func validateOAuthStatus(status configv1.OAuthStatus) field.ErrorList { + errs := field.ErrorList{} + + // TODO + + return errs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_openid.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_openid.go new file mode 100644 index 0000000000000..41d8c35db3f91 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_openid.go @@ -0,0 +1,54 @@ +package oauth + +import ( + "fmt" + "strings" + + "k8s.io/apimachinery/pkg/util/validation/field" + + configv1 "github.com/openshift/api/config/v1" + "github.com/openshift/library-go/pkg/config/validation" + crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +func ValidateOpenIDIdentityProvider(provider *configv1.OpenIDIdentityProvider, fieldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if provider == nil { + allErrs = append(allErrs, field.Required(fieldPath, "")) + return allErrs + } + + allErrs = append(allErrs, ValidateOAuthIdentityProvider(provider.ClientID, provider.ClientSecret, fieldPath)...) + + if provider.Issuer != strings.TrimRight(provider.Issuer, "/") { + allErrs = append(allErrs, field.Invalid(fieldPath.Child("issuer"), provider.Issuer, "cannot end with '/'")) + } + + // The specs are a bit ambiguous on whether this must or needn't be https:// + // schema, but they do require (MUST) TLS support for the discovery and we do + // require this in out API description + // https://openid.net/specs/openid-connect-discovery-1_0.html#TLSRequirements + url, issuerErrs := validation.ValidateSecureURL(provider.Issuer, fieldPath.Child("issuer")) + allErrs = append(allErrs, issuerErrs...) + if len(url.RawQuery) > 0 || len(url.Fragment) > 0 { + allErrs = append(allErrs, field.Invalid(fieldPath.Child("issuer"), provider.Issuer, "must not specify query or fragment component")) + } + + allErrs = append(allErrs, crvalidation.ValidateConfigMapReference(fieldPath.Child("ca"), provider.CA, false)...) + + for i, scope := range provider.ExtraScopes { + // https://tools.ietf.org/html/rfc6749#section-3.3 (full list of allowed chars is %x21 / %x23-5B / %x5D-7E) + // for those without an ascii table, that's `!`, `#-[`, `]-~` inclusive. + for _, ch := range scope { + switch { + case ch == '!': + case ch >= '#' && ch <= '[': + case ch >= ']' && ch <= '~': + default: + allErrs = append(allErrs, field.Invalid(fieldPath.Child("extraScopes").Index(i), scope, fmt.Sprintf("cannot contain %v", ch))) + } + } + } + + return allErrs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_openid_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_openid_test.go new file mode 100644 index 0000000000000..2c243bcccaa47 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_openid_test.go @@ -0,0 +1,125 @@ +package oauth + +import ( + "reflect" + "testing" + + configv1 "github.com/openshift/api/config/v1" + "k8s.io/apimachinery/pkg/util/validation/field" +) + +func openidIDP() configv1.IdentityProviderConfig { + return configv1.IdentityProviderConfig{ + Type: configv1.IdentityProviderTypeOpenID, + OpenID: &configv1.OpenIDIdentityProvider{ + ClientID: "readallPerson", + ClientSecret: configv1.SecretNameReference{Name: "oidc-secret"}, + Issuer: "https://oidc-friendly.domain.com", + CA: configv1.ConfigMapNameReference{Name: "oidc-ca"}, + ExtraScopes: []string{"email", "profile"}, + ExtraAuthorizeParameters: map[string]string{ + "include_granted_scopes": "true", + }, + Claims: configv1.OpenIDClaims{ + PreferredUsername: []string{"full_name", "email"}, + Email: []string{"email"}, + }, + }, + } +} + +func TestValidateOpenIDIdentityProvider(t *testing.T) { + type args struct { + provider *configv1.OpenIDIdentityProvider + fieldPath *field.Path + } + tests := []struct { + name string + args args + want field.ErrorList + }{ + { + name: "nil input provider", + want: field.ErrorList{ + field.Required(nil, ""), + }, + }, + { + name: "missing client ID and secret", + args: args{ + provider: &configv1.OpenIDIdentityProvider{ + Issuer: "https://bigcorp.oidc.com", + }, + }, + want: field.ErrorList{ + field.Required(field.NewPath("clientID"), ""), + field.Required(field.NewPath("clientSecret", "name"), ""), + }, + }, + { + name: "missing issuer", + args: args{ + provider: &configv1.OpenIDIdentityProvider{ + ClientID: "readallPerson", + ClientSecret: configv1.SecretNameReference{Name: "oidc-secret"}, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("issuer"), "", "must contain a scheme (e.g. https://)"), + field.Invalid(field.NewPath("issuer"), "", "must contain a host"), + }, + }, + { + name: "issuer with http:// scheme", + args: args{ + provider: &configv1.OpenIDIdentityProvider{ + ClientID: "gentleDolphin", + ClientSecret: configv1.SecretNameReference{Name: "seemsliggit"}, + Issuer: "http://oidc-friendly.domain.com", + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("issuer"), "http://oidc-friendly.domain.com", "must use https scheme"), + }, + }, + { + name: "bad CA refname", + args: args{ + provider: &configv1.OpenIDIdentityProvider{ + ClientID: "readallPerson", + ClientSecret: configv1.SecretNameReference{Name: "oidc-secret"}, + Issuer: "https://oidc-friendly.domain.com", + CA: configv1.ConfigMapNameReference{Name: "the_Nameofaca"}, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("ca", "name"), "the_Nameofaca", wrongConfigMapSecretErrMsg), + }, + }, + { + name: "minimal working example", + args: args{ + provider: &configv1.OpenIDIdentityProvider{ + ClientID: "readallPerson", + ClientSecret: configv1.SecretNameReference{Name: "oidc-secret"}, + Issuer: "https://oidc-friendly.domain.com", + }, + }, + want: field.ErrorList{}, + }, + { + name: "more complicated use", + args: args{ + provider: openidIDP().OpenID, + }, + want: field.ErrorList{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := ValidateOpenIDIdentityProvider(tt.args.provider, tt.args.fieldPath); !reflect.DeepEqual(got, tt.want) { + t.Errorf("ValidateOpenIDIdentityProvider() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_requestheader.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_requestheader.go new file mode 100644 index 0000000000000..93b7c5844cd4f --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_requestheader.go @@ -0,0 +1,85 @@ +package oauth + +import ( + "fmt" + "net/url" + "path" + "strings" + + "k8s.io/apimachinery/pkg/util/validation/field" + + configv1 "github.com/openshift/api/config/v1" + "github.com/openshift/library-go/pkg/config/validation" + crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +const ( + // URLToken in the query of the redirectURL gets replaced with the original request URL, escaped as a query parameter. + // Example use: https://www.example.com/login?then=${url} + urlToken = "${url}" + + // QueryToken in the query of the redirectURL gets replaced with the original request URL, unescaped. + // Example use: https://www.example.com/sso/oauth/authorize?${query} + queryToken = "${query}" +) + +func ValidateRequestHeaderIdentityProvider(provider *configv1.RequestHeaderIdentityProvider, fieldPath *field.Path) field.ErrorList { + errs := field.ErrorList{} + if provider == nil { + errs = append(errs, field.Required(fieldPath, "")) + return errs + } + + errs = append(errs, crvalidation.ValidateConfigMapReference(fieldPath.Child("ca"), provider.ClientCA, true)...) + + if len(provider.Headers) == 0 { + errs = append(errs, field.Required(fieldPath.Child("headers"), "")) + } + + if len(provider.ChallengeURL) == 0 && len(provider.LoginURL) == 0 { + errs = append(errs, field.Required(fieldPath, "at least one of challengeURL or loginURL must be specified")) + } + + if len(provider.ChallengeURL) > 0 { + u, urlErrs := validation.ValidateURL(provider.ChallengeURL, fieldPath.Child("challengeURL")) + errs = append(errs, urlErrs...) + if len(urlErrs) == 0 { + if !hasParamToken(u) { + errs = append(errs, + field.Invalid(field.NewPath("challengeURL"), provider.ChallengeURL, + fmt.Sprintf("query does not include %q or %q, redirect will not preserve original authorize parameters", urlToken, queryToken)), + ) + } + } + } + + if len(provider.LoginURL) > 0 { + u, urlErrs := validation.ValidateURL(provider.LoginURL, fieldPath.Child("loginURL")) + errs = append(errs, urlErrs...) + if len(urlErrs) == 0 { + if !hasParamToken(u) { + errs = append(errs, + field.Invalid(fieldPath.Child("loginURL"), provider.LoginURL, + fmt.Sprintf("query does not include %q or %q, redirect will not preserve original authorize parameters", urlToken, queryToken), + ), + ) + } + if strings.HasSuffix(u.Path, "/") { + errs = append(errs, + field.Invalid(fieldPath.Child("loginURL"), provider.LoginURL, `path ends with "/", grant approval flows will not function correctly`), + ) + } + if _, file := path.Split(u.Path); file != "authorize" { + errs = append(errs, + field.Invalid(fieldPath.Child("loginURL"), provider.LoginURL, `path does not end with "/authorize", grant approval flows will not function correctly`), + ) + } + } + } + + return errs +} + +func hasParamToken(u *url.URL) bool { + return strings.Contains(u.RawQuery, urlToken) || strings.Contains(u.RawQuery, queryToken) +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_requestheader_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_requestheader_test.go new file mode 100644 index 0000000000000..bd4beab060e85 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_requestheader_test.go @@ -0,0 +1,193 @@ +package oauth + +import ( + "reflect" + "testing" + + configv1 "github.com/openshift/api/config/v1" + "k8s.io/apimachinery/pkg/util/validation/field" +) + +func requestHeaderIDP(challenge, login bool) configv1.IdentityProviderConfig { + var challengeURL, loginURL string + + if challenge { + challengeURL = "https://sso.corporate.coolpeople.se/challenges/oauth/authorize?${query}" + } + if login { + loginURL = "https://sso.corporate.coolpeople.se/loginz/oauth/authorize?${query}" + } + + return configv1.IdentityProviderConfig{ + Type: configv1.IdentityProviderTypeRequestHeader, + RequestHeader: &configv1.RequestHeaderIdentityProvider{ + LoginURL: loginURL, + ChallengeURL: challengeURL, + ClientCA: configv1.ConfigMapNameReference{ + Name: "coolpeople-client-ca", + }, + ClientCommonNames: []string{"authn-proxy"}, + Headers: []string{"X-Remote-User", "SSO-User"}, + NameHeaders: []string{"X-Remote-User-Display-Name"}, + }, + } +} + +func TestValidateRequestHeaderIdentityProvider(t *testing.T) { + type args struct { + provider *configv1.RequestHeaderIdentityProvider + fieldPath *field.Path + } + tests := []struct { + name string + args args + want field.ErrorList + }{ + { + name: "nil input provider", + want: field.ErrorList{ + field.Required(nil, ""), + }, + }, + { + name: "empty provider", + args: args{ + provider: &configv1.RequestHeaderIdentityProvider{}, + }, + want: field.ErrorList{ + field.Required(field.NewPath("ca", "name"), ""), + field.Required(field.NewPath("headers"), ""), + {Type: field.ErrorTypeRequired, Field: "", BadValue: "", Detail: "at least one of challengeURL or loginURL must be specified"}, + }, + }, + { + name: "wrong ca refname", + args: args{ + provider: &configv1.RequestHeaderIdentityProvider{ + LoginURL: "http://oauth.coolpeoplecorp.com/login/authorize?${query}", + Headers: []string{"X-Remote-User"}, + ClientCA: configv1.ConfigMapNameReference{Name: "dat_badrefname"}, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("ca", "name"), "dat_badrefname", wrongConfigMapSecretErrMsg), + }, + }, + { + name: "challenge url without query, no client CA set", + args: args{ + provider: &configv1.RequestHeaderIdentityProvider{ + Headers: []string{"X-Remote-User"}, + ChallengeURL: "http://oauth.coolpeoplecorp.com/challenge-endpoint", + }, + }, + want: field.ErrorList{ + field.Required(field.NewPath("ca", "name"), ""), + field.Invalid(field.NewPath("challengeURL"), "http://oauth.coolpeoplecorp.com/challenge-endpoint", "query does not include \"${url}\" or \"${query}\", redirect will not preserve original authorize parameters"), + }, + }, + { + name: "challenge url with query - no ${url}, ${query}", + args: args{ + provider: &configv1.RequestHeaderIdentityProvider{ + Headers: []string{"X-Remote-User"}, + ChallengeURL: "http://oauth.coolpeoplecorp.com/challenge-endpoint?${sender}", + ClientCA: configv1.ConfigMapNameReference{Name: "auth-ca"}, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("challengeURL"), "http://oauth.coolpeoplecorp.com/challenge-endpoint?${sender}", "query does not include \"${url}\" or \"${query}\", redirect will not preserve original authorize parameters"), + }, + }, + { + name: "challenge url with query - ${url}", + args: args{ + provider: &configv1.RequestHeaderIdentityProvider{ + Headers: []string{"X-Remote-User"}, + ChallengeURL: "http://oauth.coolpeoplecorp.com/challenge-endpoint?${url}", + ClientCA: configv1.ConfigMapNameReference{Name: "auth-ca"}, + }, + }, + want: field.ErrorList{}, + }, + { + name: "login url without query and authorize", + args: args{ + provider: &configv1.RequestHeaderIdentityProvider{ + Headers: []string{"X-Remote-User"}, + LoginURL: "http://oauth.coolpeoplecorp.com/challenge-endpoint", + ClientCA: configv1.ConfigMapNameReference{Name: "auth-ca"}, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("loginURL"), "http://oauth.coolpeoplecorp.com/challenge-endpoint", "query does not include \"${url}\" or \"${query}\", redirect will not preserve original authorize parameters"), + field.Invalid(field.NewPath("loginURL"), "http://oauth.coolpeoplecorp.com/challenge-endpoint", "path does not end with \"/authorize\", grant approval flows will not function correctly"), + }, + }, + { + name: "login url with query - no ${url}, ${query} - no client CA set", + args: args{ + provider: &configv1.RequestHeaderIdentityProvider{ + Headers: []string{"X-Remote-User"}, + LoginURL: "http://oauth.coolpeoplecorp.com/login-endpoint/authorize?${custom}", + }, + }, + want: field.ErrorList{ + field.Required(field.NewPath("ca", "name"), ""), + field.Invalid(field.NewPath("loginURL"), "http://oauth.coolpeoplecorp.com/login-endpoint/authorize?${custom}", "query does not include \"${url}\" or \"${query}\", redirect will not preserve original authorize parameters"), + }, + }, + { + name: "login url with query - ${query} - no /authorize", + args: args{ + provider: &configv1.RequestHeaderIdentityProvider{ + Headers: []string{"X-Remote-User"}, + LoginURL: "http://oauth.coolpeoplecorp.com/login-endpoint?${query}", + ClientCA: configv1.ConfigMapNameReference{Name: "auth-ca"}, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("loginURL"), "http://oauth.coolpeoplecorp.com/login-endpoint?${query}", "path does not end with \"/authorize\", grant approval flows will not function correctly"), + }, + }, + { + name: "login url with query - ${query} - ends with /", + args: args{ + provider: &configv1.RequestHeaderIdentityProvider{ + Headers: []string{"X-Remote-User"}, + LoginURL: "http://oauth.coolpeoplecorp.com/login-endpoint/authorize/?${query}", + ClientCA: configv1.ConfigMapNameReference{Name: "auth-ca"}, + }, + }, + want: field.ErrorList{ + field.Invalid(field.NewPath("loginURL"), "http://oauth.coolpeoplecorp.com/login-endpoint/authorize/?${query}", "path ends with \"/\", grant approval flows will not function correctly"), + field.Invalid(field.NewPath("loginURL"), "http://oauth.coolpeoplecorp.com/login-endpoint/authorize/?${query}", "path does not end with \"/authorize\", grant approval flows will not function correctly"), + }, + }, + { + name: "login url with query - ${query}", + args: args{ + provider: &configv1.RequestHeaderIdentityProvider{ + Headers: []string{"X-Remote-User"}, + LoginURL: "http://oauth.coolpeoplecorp.com/login-endpoint/authorize?${query}", + ClientCA: configv1.ConfigMapNameReference{Name: "auth-ca"}, + }, + }, + want: field.ErrorList{}, + }, + { + name: "more complicated use", + args: args{ + provider: requestHeaderIDP(true, true).RequestHeader, + }, + want: field.ErrorList{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := ValidateRequestHeaderIdentityProvider(tt.args.provider, tt.args.fieldPath); !reflect.DeepEqual(got, tt.want) { + t.Errorf("ValidateRequestHeaderIdentityProvider() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/project/validate_project.go b/openshift-kube-apiserver/admission/customresourcevalidation/project/validate_project.go new file mode 100644 index 0000000000000..06ff8d967a1f8 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/project/validate_project.go @@ -0,0 +1,111 @@ +package project + +import ( + "fmt" + "io" + + "k8s.io/apimachinery/pkg/api/validation" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + validationutil "k8s.io/apimachinery/pkg/util/validation" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + + configv1 "github.com/openshift/api/config/v1" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +const PluginName = "config.openshift.io/ValidateProject" + +// Register registers a plugin +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { + return customresourcevalidation.NewValidator( + map[schema.GroupResource]bool{ + configv1.Resource("projects"): true, + }, + map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ + configv1.GroupVersion.WithKind("Project"): projectV1{}, + }) + }) +} + +func toProjectV1(uncastObj runtime.Object) (*configv1.Project, field.ErrorList) { + if uncastObj == nil { + return nil, nil + } + + allErrs := field.ErrorList{} + + obj, ok := uncastObj.(*configv1.Project) + if !ok { + return nil, append(allErrs, + field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"Project"}), + field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) + } + + return obj, nil +} + +type projectV1 struct { +} + +func validateProjectSpec(spec configv1.ProjectSpec) field.ErrorList { + allErrs := field.ErrorList{} + + if len(spec.ProjectRequestMessage) > 4096 { + allErrs = append(allErrs, field.Invalid(field.NewPath("spec.projectRequestMessage"), spec, validationutil.MaxLenError(4096))) + } + + if name := spec.ProjectRequestTemplate.Name; len(name) > 0 { + for _, msg := range validation.NameIsDNSSubdomain(spec.ProjectRequestTemplate.Name, false) { + allErrs = append(allErrs, field.Invalid(field.NewPath("spec.projectRequestTemplate.name"), name, msg)) + } + } + + return allErrs +} + +func (projectV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { + obj, allErrs := toProjectV1(uncastObj) + if len(allErrs) > 0 { + return allErrs + } + + allErrs = append(allErrs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, customresourcevalidation.RequireNameCluster, field.NewPath("metadata"))...) + allErrs = append(allErrs, validateProjectSpec(obj.Spec)...) + + return allErrs +} + +func (projectV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, allErrs := toProjectV1(uncastObj) + if len(allErrs) > 0 { + return allErrs + } + oldObj, allErrs := toProjectV1(uncastOldObj) + if len(allErrs) > 0 { + return allErrs + } + + allErrs = append(allErrs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, validateProjectSpec(obj.Spec)...) + + return allErrs +} + +func (projectV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, errs := toProjectV1(uncastObj) + if len(errs) > 0 { + return errs + } + oldObj, errs := toProjectV1(uncastOldObj) + if len(errs) > 0 { + return errs + } + + // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. + errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + + return errs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validate_rbr.go b/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validate_rbr.go new file mode 100644 index 0000000000000..f8e04de28bdfc --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validate_rbr.go @@ -0,0 +1,83 @@ +package rolebindingrestriction + +import ( + "fmt" + "io" + + "k8s.io/apimachinery/pkg/api/validation" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + + authorizationv1 "github.com/openshift/api/authorization/v1" + + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" + rbrvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validation" +) + +const PluginName = "authorization.openshift.io/ValidateRoleBindingRestriction" + +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { + return customresourcevalidation.NewValidator( + map[schema.GroupResource]bool{ + {Group: authorizationv1.GroupName, Resource: "rolebindingrestrictions"}: true, + }, + map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ + authorizationv1.GroupVersion.WithKind("RoleBindingRestriction"): roleBindingRestrictionV1{}, + }) + }) +} + +func toRoleBindingRestriction(uncastObj runtime.Object) (*authorizationv1.RoleBindingRestriction, field.ErrorList) { + if uncastObj == nil { + return nil, nil + } + + allErrs := field.ErrorList{} + + obj, ok := uncastObj.(*authorizationv1.RoleBindingRestriction) + if !ok { + return nil, append(allErrs, + field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"RoleBindingRestriction"}), + field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{authorizationv1.GroupVersion.String()})) + } + + return obj, nil +} + +type roleBindingRestrictionV1 struct { +} + +func (roleBindingRestrictionV1) ValidateCreate(obj runtime.Object) field.ErrorList { + roleBindingRestrictionObj, errs := toRoleBindingRestriction(obj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, validation.ValidateObjectMeta(&roleBindingRestrictionObj.ObjectMeta, true, validation.NameIsDNSSubdomain, field.NewPath("metadata"))...) + errs = append(errs, rbrvalidation.ValidateRoleBindingRestriction(roleBindingRestrictionObj)...) + + return errs +} + +func (roleBindingRestrictionV1) ValidateUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList { + roleBindingRestrictionObj, errs := toRoleBindingRestriction(obj) + if len(errs) > 0 { + return errs + } + roleBindingRestrictionOldObj, errs := toRoleBindingRestriction(oldObj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, validation.ValidateObjectMeta(&roleBindingRestrictionObj.ObjectMeta, true, validation.NameIsDNSSubdomain, field.NewPath("metadata"))...) + errs = append(errs, rbrvalidation.ValidateRoleBindingRestrictionUpdate(roleBindingRestrictionObj, roleBindingRestrictionOldObj)...) + + return errs +} + +func (r roleBindingRestrictionV1) ValidateStatusUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList { + return r.ValidateUpdate(obj, oldObj) +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validation/validation.go b/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validation/validation.go new file mode 100644 index 0000000000000..e6ee1a40b28d3 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validation/validation.go @@ -0,0 +1,113 @@ +package validation + +import ( + apimachineryvalidation "k8s.io/apimachinery/pkg/api/validation" + unversionedvalidation "k8s.io/apimachinery/pkg/apis/meta/v1/validation" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/kubernetes/pkg/apis/core/validation" + + authorizationv1 "github.com/openshift/api/authorization/v1" +) + +func ValidateRoleBindingRestriction(rbr *authorizationv1.RoleBindingRestriction) field.ErrorList { + allErrs := validation.ValidateObjectMeta(&rbr.ObjectMeta, true, + apimachineryvalidation.NameIsDNSSubdomain, field.NewPath("metadata")) + + allErrs = append(allErrs, + ValidateRoleBindingRestrictionSpec(&rbr.Spec, field.NewPath("spec"))...) + + return allErrs +} + +func ValidateRoleBindingRestrictionUpdate(rbr, old *authorizationv1.RoleBindingRestriction) field.ErrorList { + allErrs := ValidateRoleBindingRestriction(rbr) + + allErrs = append(allErrs, validation.ValidateObjectMetaUpdate(&rbr.ObjectMeta, + &old.ObjectMeta, field.NewPath("metadata"))...) + + return allErrs +} + +func ValidateRoleBindingRestrictionSpec(spec *authorizationv1.RoleBindingRestrictionSpec, fld *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + const invalidMsg = `must specify exactly one of userrestriction, grouprestriction, or serviceaccountrestriction` + + if spec.UserRestriction != nil { + if spec.GroupRestriction != nil { + allErrs = append(allErrs, field.Invalid(fld.Child("grouprestriction"), + "both userrestriction and grouprestriction specified", invalidMsg)) + } + if spec.ServiceAccountRestriction != nil { + allErrs = append(allErrs, + field.Invalid(fld.Child("serviceaccountrestriction"), + "both userrestriction and serviceaccountrestriction specified", invalidMsg)) + } + } else if spec.GroupRestriction != nil { + if spec.ServiceAccountRestriction != nil { + allErrs = append(allErrs, + field.Invalid(fld.Child("serviceaccountrestriction"), + "both grouprestriction and serviceaccountrestriction specified", invalidMsg)) + } + } else if spec.ServiceAccountRestriction == nil { + allErrs = append(allErrs, field.Required(fld.Child("userrestriction"), + invalidMsg)) + } + + if spec.UserRestriction != nil { + allErrs = append(allErrs, ValidateRoleBindingRestrictionUser(spec.UserRestriction, fld.Child("userrestriction"))...) + } + if spec.GroupRestriction != nil { + allErrs = append(allErrs, ValidateRoleBindingRestrictionGroup(spec.GroupRestriction, fld.Child("grouprestriction"))...) + } + if spec.ServiceAccountRestriction != nil { + allErrs = append(allErrs, ValidateRoleBindingRestrictionServiceAccount(spec.ServiceAccountRestriction, fld.Child("serviceaccountrestriction"))...) + } + + return allErrs +} + +func ValidateRoleBindingRestrictionUser(user *authorizationv1.UserRestriction, fld *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + const invalidMsg = `must specify at least one user, group, or label selector` + + if !(len(user.Users) > 0 || len(user.Groups) > 0 || len(user.Selectors) > 0) { + allErrs = append(allErrs, field.Required(fld.Child("users"), invalidMsg)) + } + + for i, selector := range user.Selectors { + allErrs = append(allErrs, + unversionedvalidation.ValidateLabelSelector(&selector, + fld.Child("selector").Index(i))...) + } + + return allErrs +} + +func ValidateRoleBindingRestrictionGroup(group *authorizationv1.GroupRestriction, fld *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + const invalidMsg = `must specify at least one group or label selector` + + if !(len(group.Groups) > 0 || len(group.Selectors) > 0) { + allErrs = append(allErrs, field.Required(fld.Child("groups"), invalidMsg)) + } + + for i, selector := range group.Selectors { + allErrs = append(allErrs, + unversionedvalidation.ValidateLabelSelector(&selector, + fld.Child("selector").Index(i))...) + } + + return allErrs +} + +func ValidateRoleBindingRestrictionServiceAccount(sa *authorizationv1.ServiceAccountRestriction, fld *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + const invalidMsg = `must specify at least one service account or namespace` + + if !(len(sa.ServiceAccounts) > 0 || len(sa.Namespaces) > 0) { + allErrs = append(allErrs, + field.Required(fld.Child("serviceaccounts"), invalidMsg)) + } + + return allErrs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/scheduler/validate_scheduler.go b/openshift-kube-apiserver/admission/customresourcevalidation/scheduler/validate_scheduler.go new file mode 100644 index 0000000000000..ec5f517663b66 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/scheduler/validate_scheduler.go @@ -0,0 +1,106 @@ +package scheduler + +import ( + "fmt" + "io" + + "k8s.io/apimachinery/pkg/api/validation" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + + configv1 "github.com/openshift/api/config/v1" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +const PluginName = "config.openshift.io/ValidateScheduler" + +// Register registers a plugin +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { + return customresourcevalidation.NewValidator( + map[schema.GroupResource]bool{ + configv1.Resource("schedulers"): true, + }, + map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ + configv1.GroupVersion.WithKind("Scheduler"): schedulerV1{}, + }) + }) +} + +func toSchedulerV1(uncastObj runtime.Object) (*configv1.Scheduler, field.ErrorList) { + if uncastObj == nil { + return nil, nil + } + + allErrs := field.ErrorList{} + + obj, ok := uncastObj.(*configv1.Scheduler) + if !ok { + return nil, append(allErrs, + field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"Scheduler"}), + field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) + } + + return obj, nil +} + +type schedulerV1 struct { +} + +func validateSchedulerSpec(spec configv1.SchedulerSpec) field.ErrorList { + allErrs := field.ErrorList{} + + if name := spec.Policy.Name; len(name) > 0 { + for _, msg := range validation.NameIsDNSSubdomain(spec.Policy.Name, false) { + allErrs = append(allErrs, field.Invalid(field.NewPath("spec.Policy.name"), name, msg)) + } + } + + return allErrs +} + +func (schedulerV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { + obj, allErrs := toSchedulerV1(uncastObj) + if len(allErrs) > 0 { + return allErrs + } + + allErrs = append(allErrs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, customresourcevalidation.RequireNameCluster, field.NewPath("metadata"))...) + allErrs = append(allErrs, validateSchedulerSpec(obj.Spec)...) + + return allErrs +} + +func (schedulerV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, allErrs := toSchedulerV1(uncastObj) + if len(allErrs) > 0 { + return allErrs + } + oldObj, allErrs := toSchedulerV1(uncastOldObj) + if len(allErrs) > 0 { + return allErrs + } + + allErrs = append(allErrs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, validateSchedulerSpec(obj.Spec)...) + + return allErrs +} + +func (schedulerV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, errs := toSchedulerV1(uncastObj) + if len(errs) > 0 { + return errs + } + oldObj, errs := toSchedulerV1(uncastOldObj) + if len(errs) > 0 { + return errs + } + + // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. + errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + + return errs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaulting_scc.go b/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaulting_scc.go new file mode 100644 index 0000000000000..1a7193eff7c75 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaulting_scc.go @@ -0,0 +1,93 @@ +package securitycontextconstraints + +import ( + "bytes" + "context" + "io" + + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apiserver/pkg/admission" + + securityv1 "github.com/openshift/api/security/v1" +) + +const DefaultingPluginName = "security.openshift.io/DefaultSecurityContextConstraints" + +func RegisterDefaulting(plugins *admission.Plugins) { + plugins.Register(DefaultingPluginName, func(config io.Reader) (admission.Interface, error) { + return NewDefaulter(), nil + }) +} + +type defaultSCC struct { + *admission.Handler + + scheme *runtime.Scheme + codecFactory runtimeserializer.CodecFactory +} + +var _ admission.MutationInterface = &defaultSCC{} + +func NewDefaulter() admission.Interface { + scheme := runtime.NewScheme() + codecFactory := runtimeserializer.NewCodecFactory(scheme) + utilruntime.Must(securityv1.Install(scheme)) + + return &defaultSCC{ + Handler: admission.NewHandler(admission.Create, admission.Update), + scheme: scheme, + codecFactory: codecFactory, + } +} + +// Admit defaults an SCC by going unstructured > external > internal > external > unstructured +func (a *defaultSCC) Admit(ctx context.Context, attributes admission.Attributes, o admission.ObjectInterfaces) error { + if a.shouldIgnore(attributes) { + return nil + } + + unstructuredOrig, ok := attributes.GetObject().(*unstructured.Unstructured) + if !ok { + return nil + } + buf := &bytes.Buffer{} + if err := unstructured.UnstructuredJSONScheme.Encode(unstructuredOrig, buf); err != nil { + return err + } + + uncastObj, err := runtime.Decode(a.codecFactory.UniversalDeserializer(), buf.Bytes()) + if err != nil { + return err + } + + outSCCExternal := uncastObj.(*securityv1.SecurityContextConstraints) + SetDefaults_SCC(outSCCExternal) + defaultedBytes, err := runtime.Encode(a.codecFactory.LegacyCodec(securityv1.GroupVersion), outSCCExternal) + if err != nil { + return err + } + outUnstructured := &unstructured.Unstructured{} + if _, _, err := unstructured.UnstructuredJSONScheme.Decode(defaultedBytes, nil, outUnstructured); err != nil { + return err + } + + unstructuredOrig.Object = outUnstructured.Object + + return nil +} + +func (a *defaultSCC) shouldIgnore(attributes admission.Attributes) bool { + if attributes.GetResource().GroupResource() != (schema.GroupResource{Group: "security.openshift.io", Resource: "securitycontextconstraints"}) { + return true + } + // if a subresource is specified, skip it + if len(attributes.GetSubresource()) > 0 { + return true + } + + return false +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaulting_scc_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaulting_scc_test.go new file mode 100644 index 0000000000000..16c6d56af2e2f --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaulting_scc_test.go @@ -0,0 +1,274 @@ +package securitycontextconstraints + +import ( + "bytes" + "context" + "reflect" + "testing" + + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/diff" + "k8s.io/apiserver/pkg/admission" + + securityv1 "github.com/openshift/api/security/v1" + sccutil "github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util" +) + +func TestDefaultingHappens(t *testing.T) { + inputSCC := `{ + "allowHostDirVolumePlugin": true, + "allowHostNetwork": true, + "allowHostPID": true, + "allowHostPorts": true, + "apiVersion": "security.openshift.io/v1", + "kind": "SecurityContextConstraints", + "metadata": { + "annotations": { + "kubernetes.io/description": "node-exporter scc is used for the Prometheus node exporter" + }, + "name": "node-exporter" + }, + "readOnlyRootFilesystem": false, + "runAsUser": { + "type": "RunAsAny" + }, + "seLinuxContext": { + "type": "RunAsAny" + }, + "users": [] +}` + + inputUnstructured := &unstructured.Unstructured{} + _, _, err := unstructured.UnstructuredJSONScheme.Decode([]byte(inputSCC), nil, inputUnstructured) + if err != nil { + t.Fatal(err) + } + + attributes := admission.NewAttributesRecord(inputUnstructured, nil, schema.GroupVersionKind{}, "", "", schema.GroupVersionResource{Group: "security.openshift.io", Resource: "securitycontextconstraints"}, "", admission.Create, nil, false, nil) + defaulter := NewDefaulter() + if err := defaulter.(*defaultSCC).Admit(context.TODO(), attributes, nil); err != nil { + t.Fatal(err) + } + + buf := &bytes.Buffer{} + if err := unstructured.UnstructuredJSONScheme.Encode(inputUnstructured, buf); err != nil { + t.Fatal(err) + } + + expectedSCC := `{ + "allowHostDirVolumePlugin": true, + "allowHostIPC": false, + "allowHostNetwork": true, + "allowHostPID": true, + "allowHostPorts": true, + "allowPrivilegeEscalation": true, + "allowPrivilegedContainer": false, + "allowedCapabilities": null, + "apiVersion": "security.openshift.io/v1", + "defaultAddCapabilities": null, + "fsGroup": { + "type": "RunAsAny" + }, + "groups": [], + "kind": "SecurityContextConstraints", + "metadata": { + "annotations": { + "kubernetes.io/description": "node-exporter scc is used for the Prometheus node exporter" + }, + "name": "node-exporter", + "creationTimestamp":null + }, + "priority": null, + "readOnlyRootFilesystem": false, + "requiredDropCapabilities": null, + "runAsUser": { + "type": "RunAsAny" + }, + "seLinuxContext": { + "type": "RunAsAny" + }, + "supplementalGroups": { + "type": "RunAsAny" + }, + "users": [], + "volumes": [ + "*" + ] +}` + expectedUnstructured := &unstructured.Unstructured{} + if _, _, err := unstructured.UnstructuredJSONScheme.Decode([]byte(expectedSCC), nil, expectedUnstructured); err != nil { + t.Fatal(err) + } + + if !reflect.DeepEqual(expectedUnstructured.Object, inputUnstructured.Object) { + t.Fatal(diff.ObjectDiff(expectedUnstructured.Object, inputUnstructured.Object)) + } +} + +func TestDefaultSecurityContextConstraints(t *testing.T) { + tests := map[string]struct { + scc *securityv1.SecurityContextConstraints + expectedFSGroup securityv1.FSGroupStrategyType + expectedSupGroup securityv1.SupplementalGroupsStrategyType + }{ + "shouldn't default": { + scc: &securityv1.SecurityContextConstraints{ + FSGroup: securityv1.FSGroupStrategyOptions{ + Type: securityv1.FSGroupStrategyMustRunAs, + }, + SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ + Type: securityv1.SupplementalGroupsStrategyMustRunAs, + }, + }, + expectedFSGroup: securityv1.FSGroupStrategyMustRunAs, + expectedSupGroup: securityv1.SupplementalGroupsStrategyMustRunAs, + }, + "default fsgroup runAsAny": { + scc: &securityv1.SecurityContextConstraints{ + RunAsUser: securityv1.RunAsUserStrategyOptions{ + Type: securityv1.RunAsUserStrategyRunAsAny, + }, + SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ + Type: securityv1.SupplementalGroupsStrategyMustRunAs, + }, + }, + expectedFSGroup: securityv1.FSGroupStrategyRunAsAny, + expectedSupGroup: securityv1.SupplementalGroupsStrategyMustRunAs, + }, + "default sup group runAsAny": { + scc: &securityv1.SecurityContextConstraints{ + RunAsUser: securityv1.RunAsUserStrategyOptions{ + Type: securityv1.RunAsUserStrategyRunAsAny, + }, + FSGroup: securityv1.FSGroupStrategyOptions{ + Type: securityv1.FSGroupStrategyMustRunAs, + }, + }, + expectedFSGroup: securityv1.FSGroupStrategyMustRunAs, + expectedSupGroup: securityv1.SupplementalGroupsStrategyRunAsAny, + }, + "default fsgroup runAsAny with mustRunAs UID strategy": { + scc: &securityv1.SecurityContextConstraints{ + RunAsUser: securityv1.RunAsUserStrategyOptions{ + Type: securityv1.RunAsUserStrategyMustRunAsRange, + }, + SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ + Type: securityv1.SupplementalGroupsStrategyMustRunAs, + }, + }, + expectedFSGroup: securityv1.FSGroupStrategyRunAsAny, + expectedSupGroup: securityv1.SupplementalGroupsStrategyMustRunAs, + }, + "default sup group runAsAny with mustRunAs UID strategy": { + scc: &securityv1.SecurityContextConstraints{ + RunAsUser: securityv1.RunAsUserStrategyOptions{ + Type: securityv1.RunAsUserStrategyMustRunAsRange, + }, + FSGroup: securityv1.FSGroupStrategyOptions{ + Type: securityv1.FSGroupStrategyMustRunAs, + }, + }, + expectedFSGroup: securityv1.FSGroupStrategyMustRunAs, + expectedSupGroup: securityv1.SupplementalGroupsStrategyRunAsAny, + }, + } + for k, v := range tests { + SetDefaults_SCC(v.scc) + if v.scc.FSGroup.Type != v.expectedFSGroup { + t.Errorf("%s has invalid fsgroup. Expected: %v got: %v", k, v.expectedFSGroup, v.scc.FSGroup.Type) + } + if v.scc.SupplementalGroups.Type != v.expectedSupGroup { + t.Errorf("%s has invalid supplemental group. Expected: %v got: %v", k, v.expectedSupGroup, v.scc.SupplementalGroups.Type) + } + } +} + +func TestDefaultSCCVolumes(t *testing.T) { + tests := map[string]struct { + scc *securityv1.SecurityContextConstraints + expectedVolumes []securityv1.FSType + expectedHostDir bool + }{ + // this expects the volumes to default to all for an empty volume slice + // but since the host dir setting is false it should be all - host dir + "old client - default allow* fields, no volumes slice": { + scc: &securityv1.SecurityContextConstraints{}, + expectedVolumes: StringSetToFSType(sccutil.GetAllFSTypesExcept(string(securityv1.FSTypeHostPath))), + expectedHostDir: false, + }, + // this expects the volumes to default to all for an empty volume slice + "old client - set allowHostDir true fields, no volumes slice": { + scc: &securityv1.SecurityContextConstraints{ + AllowHostDirVolumePlugin: true, + }, + expectedVolumes: []securityv1.FSType{securityv1.FSTypeAll}, + expectedHostDir: true, + }, + "new client - allow* fields set with matching volume slice": { + scc: &securityv1.SecurityContextConstraints{ + Volumes: []securityv1.FSType{securityv1.FSTypeEmptyDir, securityv1.FSTypeHostPath}, + AllowHostDirVolumePlugin: true, + }, + expectedVolumes: []securityv1.FSType{securityv1.FSTypeEmptyDir, securityv1.FSTypeHostPath}, + expectedHostDir: true, + }, + "new client - allow* fields set with mismatch host dir volume slice": { + scc: &securityv1.SecurityContextConstraints{ + Volumes: []securityv1.FSType{securityv1.FSTypeEmptyDir, securityv1.FSTypeHostPath}, + AllowHostDirVolumePlugin: false, + }, + expectedVolumes: []securityv1.FSType{securityv1.FSTypeEmptyDir}, + expectedHostDir: false, + }, + "new client - allow* fields set with mismatch FSTypeAll volume slice": { + scc: &securityv1.SecurityContextConstraints{ + Volumes: []securityv1.FSType{securityv1.FSTypeAll}, + AllowHostDirVolumePlugin: false, + }, + expectedVolumes: StringSetToFSType(sccutil.GetAllFSTypesExcept(string(securityv1.FSTypeHostPath))), + expectedHostDir: false, + }, + "new client - allow* fields unset with volume slice": { + scc: &securityv1.SecurityContextConstraints{ + Volumes: []securityv1.FSType{securityv1.FSTypeEmptyDir, securityv1.FSTypeHostPath}, + }, + expectedVolumes: []securityv1.FSType{securityv1.FSTypeEmptyDir}, + expectedHostDir: false, + }, + "new client - extra volume params retained": { + scc: &securityv1.SecurityContextConstraints{ + Volumes: []securityv1.FSType{securityv1.FSTypeEmptyDir, securityv1.FSTypeHostPath, securityv1.FSTypeGitRepo}, + }, + expectedVolumes: []securityv1.FSType{securityv1.FSTypeEmptyDir, securityv1.FSTypeGitRepo}, + expectedHostDir: false, + }, + "new client - empty volume slice, host dir true": { + scc: &securityv1.SecurityContextConstraints{ + Volumes: []securityv1.FSType{}, + AllowHostDirVolumePlugin: true, + }, + expectedVolumes: []securityv1.FSType{securityv1.FSTypeHostPath}, + expectedHostDir: true, + }, + "new client - empty volume slice, host dir false": { + scc: &securityv1.SecurityContextConstraints{ + Volumes: []securityv1.FSType{}, + AllowHostDirVolumePlugin: false, + }, + expectedVolumes: []securityv1.FSType{securityv1.FSTypeNone}, + expectedHostDir: false, + }, + } + for k, v := range tests { + SetDefaults_SCC(v.scc) + + if !reflect.DeepEqual(v.scc.Volumes, v.expectedVolumes) { + t.Errorf("%s has invalid volumes. Expected: %v got: %v", k, v.expectedVolumes, v.scc.Volumes) + } + + if v.scc.AllowHostDirVolumePlugin != v.expectedHostDir { + t.Errorf("%s has invalid host dir. Expected: %v got: %v", k, v.expectedHostDir, v.scc.AllowHostDirVolumePlugin) + } + } +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaults.go b/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaults.go new file mode 100644 index 0000000000000..e6e4b5ff44fc7 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaults.go @@ -0,0 +1,100 @@ +package securitycontextconstraints + +import ( + "k8s.io/apimachinery/pkg/util/sets" + + securityv1 "github.com/openshift/api/security/v1" + sccutil "github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util" +) + +// Default SCCs for new fields. FSGroup and SupplementalGroups are +// set to the RunAsAny strategy if they are unset on the scc. +func SetDefaults_SCC(scc *securityv1.SecurityContextConstraints) { + if len(scc.FSGroup.Type) == 0 { + scc.FSGroup.Type = securityv1.FSGroupStrategyRunAsAny + } + if len(scc.SupplementalGroups.Type) == 0 { + scc.SupplementalGroups.Type = securityv1.SupplementalGroupsStrategyRunAsAny + } + + if scc.Users == nil { + scc.Users = []string{} + } + if scc.Groups == nil { + scc.Groups = []string{} + } + + var defaultAllowedVolumes sets.String + switch { + case scc.Volumes == nil: + // assume a nil volume slice is allowing everything for backwards compatibility + defaultAllowedVolumes = sets.NewString(string(securityv1.FSTypeAll)) + + case len(scc.Volumes) == 0 && scc.AllowHostDirVolumePlugin: + // an empty volume slice means "allow no volumes", but the boolean fields will always take precedence. + defaultAllowedVolumes = sets.NewString(string(securityv1.FSTypeHostPath)) + + case len(scc.Volumes) == 0 && !scc.AllowHostDirVolumePlugin: + // an empty volume slice means "allow no volumes", but cannot be persisted in protobuf. + // convert this to volumes:["none"] + defaultAllowedVolumes = sets.NewString(string(securityv1.FSTypeNone)) + + default: + // defaults the volume slice of the SCC. + // In order to support old clients the boolean fields will always take precedence. + defaultAllowedVolumes = fsTypeToStringSet(scc.Volumes) + } + + if scc.AllowHostDirVolumePlugin { + // if already allowing all then there is no reason to add + if !defaultAllowedVolumes.Has(string(securityv1.FSTypeAll)) { + defaultAllowedVolumes.Insert(string(securityv1.FSTypeHostPath)) + } + } else { + // we should only default all volumes if the SCC came in with FSTypeAll or we defaulted it + // otherwise we should only change the volumes slice to ensure that it does not conflict with + // the AllowHostDirVolumePlugin setting + shouldDefaultAllVolumes := defaultAllowedVolumes.Has(string(securityv1.FSTypeAll)) + + // remove anything from volumes that conflicts with AllowHostDirVolumePlugin = false + defaultAllowedVolumes.Delete(string(securityv1.FSTypeAll)) + defaultAllowedVolumes.Delete(string(securityv1.FSTypeHostPath)) + + if shouldDefaultAllVolumes { + allVolumes := sccutil.GetAllFSTypesExcept(string(securityv1.FSTypeHostPath)) + defaultAllowedVolumes.Insert(allVolumes.List()...) + } + } + + scc.Volumes = StringSetToFSType(defaultAllowedVolumes) + + // Constraints that do not include this field must remain as permissive as + // they were prior to the introduction of this field. + if scc.AllowPrivilegeEscalation == nil { + t := true + scc.AllowPrivilegeEscalation = &t + } + +} + +func StringSetToFSType(set sets.String) []securityv1.FSType { + if set == nil { + return nil + } + volumes := []securityv1.FSType{} + for _, v := range set.List() { + volumes = append(volumes, securityv1.FSType(v)) + } + return volumes +} + +func fsTypeToStringSet(volumes []securityv1.FSType) sets.String { + if volumes == nil { + return nil + } + set := sets.NewString() + for _, v := range volumes { + set.Insert(string(v)) + } + return set +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validate_scc.go b/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validate_scc.go new file mode 100644 index 0000000000000..79ae37f27ccdb --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validate_scc.go @@ -0,0 +1,79 @@ +package securitycontextconstraints + +import ( + "fmt" + "io" + + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + + securityv1 "github.com/openshift/api/security/v1" + + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" + sccvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation" +) + +const PluginName = "security.openshift.io/ValidateSecurityContextConstraints" + +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { + return customresourcevalidation.NewValidator( + map[schema.GroupResource]bool{ + {Group: securityv1.GroupName, Resource: "securitycontextconstraints"}: true, + }, + map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ + securityv1.GroupVersion.WithKind("SecurityContextConstraints"): securityContextConstraintsV1{}, + }) + }) +} + +func toSecurityContextConstraints(uncastObj runtime.Object) (*securityv1.SecurityContextConstraints, field.ErrorList) { + if uncastObj == nil { + return nil, nil + } + + obj, ok := uncastObj.(*securityv1.SecurityContextConstraints) + if !ok { + return nil, field.ErrorList{ + field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"SecurityContextConstraints"}), + field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{securityv1.GroupVersion.String()}), + } + } + + return obj, nil +} + +type securityContextConstraintsV1 struct { +} + +func (securityContextConstraintsV1) ValidateCreate(obj runtime.Object) field.ErrorList { + securityContextConstraintsObj, errs := toSecurityContextConstraints(obj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, sccvalidation.ValidateSecurityContextConstraints(securityContextConstraintsObj)...) + + return errs +} + +func (securityContextConstraintsV1) ValidateUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList { + securityContextConstraintsObj, errs := toSecurityContextConstraints(obj) + if len(errs) > 0 { + return errs + } + securityContextConstraintsOldObj, errs := toSecurityContextConstraints(oldObj) + if len(errs) > 0 { + return errs + } + + errs = append(errs, sccvalidation.ValidateSecurityContextConstraintsUpdate(securityContextConstraintsObj, securityContextConstraintsOldObj)...) + + return errs +} + +func (c securityContextConstraintsV1) ValidateStatusUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList { + return c.ValidateUpdate(obj, oldObj) +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation/validation.go b/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation/validation.go new file mode 100644 index 0000000000000..493339867b8c5 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation/validation.go @@ -0,0 +1,275 @@ +package validation + +import ( + "fmt" + "regexp" + "strings" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/validation" + apimachineryvalidation "k8s.io/apimachinery/pkg/api/validation" + "k8s.io/apimachinery/pkg/util/validation/field" + kapivalidation "k8s.io/kubernetes/pkg/apis/core/validation" + + securityv1 "github.com/openshift/api/security/v1" +) + +// ValidateSecurityContextConstraintsName can be used to check whether the given +// security context constraint name is valid. +// Prefix indicates this name will be used as part of generation, in which case +// trailing dashes are allowed. +var ValidateSecurityContextConstraintsName = apimachineryvalidation.NameIsDNSSubdomain + +func ValidateSecurityContextConstraints(scc *securityv1.SecurityContextConstraints) field.ErrorList { + allErrs := validation.ValidateObjectMeta(&scc.ObjectMeta, false, ValidateSecurityContextConstraintsName, field.NewPath("metadata")) + + if scc.Priority != nil { + if *scc.Priority < 0 { + allErrs = append(allErrs, field.Invalid(field.NewPath("priority"), *scc.Priority, "priority cannot be negative")) + } + } + + // ensure the user strategy has a valid type + runAsUserPath := field.NewPath("runAsUser") + switch scc.RunAsUser.Type { + case securityv1.RunAsUserStrategyMustRunAs, securityv1.RunAsUserStrategyMustRunAsNonRoot, securityv1.RunAsUserStrategyRunAsAny, securityv1.RunAsUserStrategyMustRunAsRange: + //good types + default: + msg := fmt.Sprintf("invalid strategy type. Valid values are %s, %s, %s, %s", securityv1.RunAsUserStrategyMustRunAs, securityv1.RunAsUserStrategyMustRunAsNonRoot, securityv1.RunAsUserStrategyMustRunAsRange, securityv1.RunAsUserStrategyRunAsAny) + allErrs = append(allErrs, field.Invalid(runAsUserPath.Child("type"), scc.RunAsUser.Type, msg)) + } + + // if specified, uid cannot be negative + if scc.RunAsUser.UID != nil { + if *scc.RunAsUser.UID < 0 { + allErrs = append(allErrs, field.Invalid(runAsUserPath.Child("uid"), *scc.RunAsUser.UID, "uid cannot be negative")) + } + } + + // ensure the selinux strategy has a valid type + seLinuxContextPath := field.NewPath("seLinuxContext") + switch scc.SELinuxContext.Type { + case securityv1.SELinuxStrategyMustRunAs, securityv1.SELinuxStrategyRunAsAny: + //good types + default: + msg := fmt.Sprintf("invalid strategy type. Valid values are %s, %s", securityv1.SELinuxStrategyMustRunAs, securityv1.SELinuxStrategyRunAsAny) + allErrs = append(allErrs, field.Invalid(seLinuxContextPath.Child("type"), scc.SELinuxContext.Type, msg)) + } + + // ensure the fsgroup strategy has a valid type + if scc.FSGroup.Type != securityv1.FSGroupStrategyMustRunAs && scc.FSGroup.Type != securityv1.FSGroupStrategyRunAsAny { + allErrs = append(allErrs, field.NotSupported(field.NewPath("fsGroup", "type"), scc.FSGroup.Type, + []string{string(securityv1.FSGroupStrategyMustRunAs), string(securityv1.FSGroupStrategyRunAsAny)})) + } + allErrs = append(allErrs, validateIDRanges(scc.FSGroup.Ranges, field.NewPath("fsGroup"))...) + + if scc.SupplementalGroups.Type != securityv1.SupplementalGroupsStrategyMustRunAs && + scc.SupplementalGroups.Type != securityv1.SupplementalGroupsStrategyRunAsAny { + allErrs = append(allErrs, field.NotSupported(field.NewPath("supplementalGroups", "type"), scc.SupplementalGroups.Type, + []string{string(securityv1.SupplementalGroupsStrategyMustRunAs), string(securityv1.SupplementalGroupsStrategyRunAsAny)})) + } + allErrs = append(allErrs, validateIDRanges(scc.SupplementalGroups.Ranges, field.NewPath("supplementalGroups"))...) + + // validate capabilities + allErrs = append(allErrs, validateSCCCapsAgainstDrops(scc.RequiredDropCapabilities, scc.DefaultAddCapabilities, field.NewPath("defaultAddCapabilities"))...) + allErrs = append(allErrs, validateSCCCapsAgainstDrops(scc.RequiredDropCapabilities, scc.AllowedCapabilities, field.NewPath("allowedCapabilities"))...) + + if hasCap(securityv1.AllowAllCapabilities, scc.AllowedCapabilities) && len(scc.RequiredDropCapabilities) > 0 { + allErrs = append(allErrs, field.Invalid(field.NewPath("requiredDropCapabilities"), scc.RequiredDropCapabilities, + "required capabilities must be empty when all capabilities are allowed by a wildcard")) + } + + allErrs = append(allErrs, validateSCCDefaultAllowPrivilegeEscalation(field.NewPath("defaultAllowPrivilegeEscalation"), scc.DefaultAllowPrivilegeEscalation, scc.AllowPrivilegeEscalation)...) + + allowsFlexVolumes := false + hasNoneVolume := false + + if len(scc.Volumes) > 0 { + for _, fsType := range scc.Volumes { + if fsType == securityv1.FSTypeNone { + hasNoneVolume = true + + } else if fsType == securityv1.FSTypeFlexVolume || fsType == securityv1.FSTypeAll { + allowsFlexVolumes = true + } + } + } + + if hasNoneVolume && len(scc.Volumes) > 1 { + allErrs = append(allErrs, field.Invalid(field.NewPath("volumes"), scc.Volumes, + "if 'none' is specified, no other values are allowed")) + } + + if len(scc.AllowedFlexVolumes) > 0 { + if allowsFlexVolumes { + for idx, allowedFlexVolume := range scc.AllowedFlexVolumes { + if len(allowedFlexVolume.Driver) == 0 { + allErrs = append(allErrs, field.Required(field.NewPath("allowedFlexVolumes").Index(idx).Child("driver"), + "must specify a driver")) + } + } + } else { + allErrs = append(allErrs, field.Invalid(field.NewPath("allowedFlexVolumes"), scc.AllowedFlexVolumes, + "volumes does not include 'flexVolume' or '*', so no flex volumes are allowed")) + } + } + + allowedUnsafeSysctlsPath := field.NewPath("allowedUnsafeSysctls") + forbiddenSysctlsPath := field.NewPath("forbiddenSysctls") + allErrs = append(allErrs, validateSCCSysctls(allowedUnsafeSysctlsPath, scc.AllowedUnsafeSysctls)...) + allErrs = append(allErrs, validateSCCSysctls(forbiddenSysctlsPath, scc.ForbiddenSysctls)...) + allErrs = append(allErrs, validatePodSecurityPolicySysctlListsDoNotOverlap(allowedUnsafeSysctlsPath, forbiddenSysctlsPath, scc.AllowedUnsafeSysctls, scc.ForbiddenSysctls)...) + + return allErrs +} + +const sysctlPatternSegmentFmt string = "([a-z0-9][-_a-z0-9]*)?[a-z0-9*]" +const sysctlPatternFmt string = "(" + kapivalidation.SysctlSegmentFmt + "\\.)*" + sysctlPatternSegmentFmt + +var sysctlPatternRegexp = regexp.MustCompile("^" + sysctlPatternFmt + "$") + +func IsValidSysctlPattern(name string) bool { + if len(name) > kapivalidation.SysctlMaxLength { + return false + } + return sysctlPatternRegexp.MatchString(name) +} + +// validatePodSecurityPolicySysctlListsDoNotOverlap validates the values in forbiddenSysctls and allowedSysctls fields do not overlap. +func validatePodSecurityPolicySysctlListsDoNotOverlap(allowedSysctlsFldPath, forbiddenSysctlsFldPath *field.Path, allowedUnsafeSysctls, forbiddenSysctls []string) field.ErrorList { + allErrs := field.ErrorList{} + for i, allowedSysctl := range allowedUnsafeSysctls { + isAllowedSysctlPattern := false + allowedSysctlPrefix := "" + if strings.HasSuffix(allowedSysctl, "*") { + isAllowedSysctlPattern = true + allowedSysctlPrefix = strings.TrimSuffix(allowedSysctl, "*") + } + for j, forbiddenSysctl := range forbiddenSysctls { + isForbiddenSysctlPattern := false + forbiddenSysctlPrefix := "" + if strings.HasSuffix(forbiddenSysctl, "*") { + isForbiddenSysctlPattern = true + forbiddenSysctlPrefix = strings.TrimSuffix(forbiddenSysctl, "*") + } + switch { + case isAllowedSysctlPattern && isForbiddenSysctlPattern: + if strings.HasPrefix(allowedSysctlPrefix, forbiddenSysctlPrefix) { + allErrs = append(allErrs, field.Invalid(allowedSysctlsFldPath.Index(i), allowedUnsafeSysctls[i], fmt.Sprintf("sysctl overlaps with %v", forbiddenSysctl))) + } else if strings.HasPrefix(forbiddenSysctlPrefix, allowedSysctlPrefix) { + allErrs = append(allErrs, field.Invalid(forbiddenSysctlsFldPath.Index(j), forbiddenSysctls[j], fmt.Sprintf("sysctl overlaps with %v", allowedSysctl))) + } + case isAllowedSysctlPattern: + if strings.HasPrefix(forbiddenSysctl, allowedSysctlPrefix) { + allErrs = append(allErrs, field.Invalid(forbiddenSysctlsFldPath.Index(j), forbiddenSysctls[j], fmt.Sprintf("sysctl overlaps with %v", allowedSysctl))) + } + case isForbiddenSysctlPattern: + if strings.HasPrefix(allowedSysctl, forbiddenSysctlPrefix) { + allErrs = append(allErrs, field.Invalid(allowedSysctlsFldPath.Index(i), allowedUnsafeSysctls[i], fmt.Sprintf("sysctl overlaps with %v", forbiddenSysctl))) + } + default: + if allowedSysctl == forbiddenSysctl { + allErrs = append(allErrs, field.Invalid(allowedSysctlsFldPath.Index(i), allowedUnsafeSysctls[i], fmt.Sprintf("sysctl overlaps with %v", forbiddenSysctl))) + } + } + } + } + return allErrs +} + +// validatePodSecurityPolicySysctls validates the sysctls fields of PodSecurityPolicy. +func validateSCCSysctls(fldPath *field.Path, sysctls []string) field.ErrorList { + allErrs := field.ErrorList{} + + if len(sysctls) == 0 { + return allErrs + } + + coversAll := false + for i, s := range sysctls { + if len(s) == 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i), sysctls[i], fmt.Sprintf("empty sysctl not allowed"))) + } else if !IsValidSysctlPattern(string(s)) { + allErrs = append( + allErrs, + field.Invalid(fldPath.Index(i), sysctls[i], fmt.Sprintf("must have at most %d characters and match regex %s", + kapivalidation.SysctlMaxLength, + sysctlPatternFmt, + )), + ) + } else if s[0] == '*' { + coversAll = true + } + } + + if coversAll && len(sysctls) > 1 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("items"), fmt.Sprintf("if '*' is present, must not specify other sysctls"))) + } + + return allErrs +} + +// validateSCCCapsAgainstDrops ensures an allowed cap is not listed in the required drops. +func validateSCCCapsAgainstDrops(requiredDrops []corev1.Capability, capsToCheck []corev1.Capability, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if requiredDrops == nil { + return allErrs + } + for _, cap := range capsToCheck { + if hasCap(cap, requiredDrops) { + allErrs = append(allErrs, field.Invalid(fldPath, cap, + fmt.Sprintf("capability is listed in %s and requiredDropCapabilities", fldPath.String()))) + } + } + return allErrs +} + +// validateSCCDefaultAllowPrivilegeEscalation validates the DefaultAllowPrivilegeEscalation field against the AllowPrivilegeEscalation field of a SecurityContextConstraints. +func validateSCCDefaultAllowPrivilegeEscalation(fldPath *field.Path, defaultAllowPrivilegeEscalation, allowPrivilegeEscalation *bool) field.ErrorList { + allErrs := field.ErrorList{} + if defaultAllowPrivilegeEscalation != nil && allowPrivilegeEscalation != nil && *defaultAllowPrivilegeEscalation && !*allowPrivilegeEscalation { + allErrs = append(allErrs, field.Invalid(fldPath, defaultAllowPrivilegeEscalation, "Cannot set DefaultAllowPrivilegeEscalation to true without also setting AllowPrivilegeEscalation to true")) + } + + return allErrs +} + +// hasCap checks for needle in haystack. +func hasCap(needle corev1.Capability, haystack []corev1.Capability) bool { + for _, c := range haystack { + if needle == c { + return true + } + } + return false +} + +// validateIDRanges ensures the range is valid. +func validateIDRanges(rng []securityv1.IDRange, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + for i, r := range rng { + // if 0 <= Min <= Max then we do not need to validate max. It is always greater than or + // equal to 0 and Min. + minPath := fldPath.Child("ranges").Index(i).Child("min") + maxPath := fldPath.Child("ranges").Index(i).Child("max") + + if r.Min < 0 { + allErrs = append(allErrs, field.Invalid(minPath, r.Min, "min cannot be negative")) + } + if r.Max < 0 { + allErrs = append(allErrs, field.Invalid(maxPath, r.Max, "max cannot be negative")) + } + if r.Min > r.Max { + allErrs = append(allErrs, field.Invalid(minPath, r, "min cannot be greater than max")) + } + } + + return allErrs +} + +func ValidateSecurityContextConstraintsUpdate(newScc, oldScc *securityv1.SecurityContextConstraints) field.ErrorList { + allErrs := validation.ValidateObjectMetaUpdate(&newScc.ObjectMeta, &oldScc.ObjectMeta, field.NewPath("metadata")) + allErrs = append(allErrs, ValidateSecurityContextConstraints(newScc)...) + return allErrs +} diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation/validation_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation/validation_test.go new file mode 100644 index 0000000000000..01c4d472c0a22 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation/validation_test.go @@ -0,0 +1,343 @@ +package validation + +import ( + "fmt" + "testing" + + kcorev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/validation/field" + + securityv1 "github.com/openshift/api/security/v1" +) + +func TestValidateSecurityContextConstraints(t *testing.T) { + var invalidUID int64 = -1 + var invalidPriority int32 = -1 + var validPriority int32 = 1 + yes := true + no := false + + validSCC := func() *securityv1.SecurityContextConstraints { + return &securityv1.SecurityContextConstraints{ + ObjectMeta: metav1.ObjectMeta{Name: "foo"}, + SELinuxContext: securityv1.SELinuxContextStrategyOptions{ + Type: securityv1.SELinuxStrategyRunAsAny, + }, + RunAsUser: securityv1.RunAsUserStrategyOptions{ + Type: securityv1.RunAsUserStrategyRunAsAny, + }, + FSGroup: securityv1.FSGroupStrategyOptions{ + Type: securityv1.FSGroupStrategyRunAsAny, + }, + SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ + Type: securityv1.SupplementalGroupsStrategyRunAsAny, + }, + Priority: &validPriority, + } + } + + noUserOptions := validSCC() + noUserOptions.RunAsUser.Type = "" + + noSELinuxOptions := validSCC() + noSELinuxOptions.SELinuxContext.Type = "" + + invalidUserStratType := validSCC() + invalidUserStratType.RunAsUser.Type = "invalid" + + invalidSELinuxStratType := validSCC() + invalidSELinuxStratType.SELinuxContext.Type = "invalid" + + invalidUIDSCC := validSCC() + invalidUIDSCC.RunAsUser.Type = securityv1.RunAsUserStrategyMustRunAs + invalidUIDSCC.RunAsUser.UID = &invalidUID + + missingObjectMetaName := validSCC() + missingObjectMetaName.ObjectMeta.Name = "" + + noFSGroupOptions := validSCC() + noFSGroupOptions.FSGroup.Type = "" + + invalidFSGroupStratType := validSCC() + invalidFSGroupStratType.FSGroup.Type = "invalid" + + noSupplementalGroupsOptions := validSCC() + noSupplementalGroupsOptions.SupplementalGroups.Type = "" + + invalidSupGroupStratType := validSCC() + invalidSupGroupStratType.SupplementalGroups.Type = "invalid" + + invalidRangeMinGreaterThanMax := validSCC() + invalidRangeMinGreaterThanMax.FSGroup.Ranges = []securityv1.IDRange{ + {Min: 2, Max: 1}, + } + + invalidRangeNegativeMin := validSCC() + invalidRangeNegativeMin.FSGroup.Ranges = []securityv1.IDRange{ + {Min: -1, Max: 10}, + } + + invalidRangeNegativeMax := validSCC() + invalidRangeNegativeMax.FSGroup.Ranges = []securityv1.IDRange{ + {Min: 1, Max: -10}, + } + + negativePriority := validSCC() + negativePriority.Priority = &invalidPriority + + requiredCapAddAndDrop := validSCC() + requiredCapAddAndDrop.DefaultAddCapabilities = []kcorev1.Capability{"foo"} + requiredCapAddAndDrop.RequiredDropCapabilities = []kcorev1.Capability{"foo"} + + allowedCapListedInRequiredDrop := validSCC() + allowedCapListedInRequiredDrop.RequiredDropCapabilities = []kcorev1.Capability{"foo"} + allowedCapListedInRequiredDrop.AllowedCapabilities = []kcorev1.Capability{"foo"} + + wildcardAllowedCapAndRequiredDrop := validSCC() + wildcardAllowedCapAndRequiredDrop.RequiredDropCapabilities = []kcorev1.Capability{"foo"} + wildcardAllowedCapAndRequiredDrop.AllowedCapabilities = []kcorev1.Capability{securityv1.AllowAllCapabilities} + + emptyFlexDriver := validSCC() + emptyFlexDriver.Volumes = []securityv1.FSType{securityv1.FSTypeFlexVolume} + emptyFlexDriver.AllowedFlexVolumes = []securityv1.AllowedFlexVolume{{}} + + nonEmptyFlexVolumes := validSCC() + nonEmptyFlexVolumes.AllowedFlexVolumes = []securityv1.AllowedFlexVolume{{Driver: "example/driver"}} + + invalidDefaultAllowPrivilegeEscalation := validSCC() + invalidDefaultAllowPrivilegeEscalation.DefaultAllowPrivilegeEscalation = &yes + invalidDefaultAllowPrivilegeEscalation.AllowPrivilegeEscalation = &no + + invalidAllowedUnsafeSysctlPattern := validSCC() + invalidAllowedUnsafeSysctlPattern.AllowedUnsafeSysctls = []string{"a.*.b"} + + invalidForbiddenSysctlPattern := validSCC() + invalidForbiddenSysctlPattern.ForbiddenSysctls = []string{"a.*.b"} + + invalidOverlappingSysctls := validSCC() + invalidOverlappingSysctls.ForbiddenSysctls = []string{"kernel.*", "net.ipv4.ip_local_port_range"} + invalidOverlappingSysctls.AllowedUnsafeSysctls = []string{"kernel.shmmax", "net.ipv4.ip_local_port_range"} + + invalidDuplicatedSysctls := validSCC() + invalidDuplicatedSysctls.ForbiddenSysctls = []string{"net.ipv4.ip_local_port_range"} + invalidDuplicatedSysctls.AllowedUnsafeSysctls = []string{"net.ipv4.ip_local_port_range"} + + errorCases := map[string]struct { + scc *securityv1.SecurityContextConstraints + errorType field.ErrorType + errorDetail string + }{ + "no user options": { + scc: noUserOptions, + errorType: field.ErrorTypeInvalid, + errorDetail: "invalid strategy type. Valid values are MustRunAs, MustRunAsNonRoot, MustRunAsRange, RunAsAny", + }, + "no selinux options": { + scc: noSELinuxOptions, + errorType: field.ErrorTypeInvalid, + errorDetail: "invalid strategy type. Valid values are MustRunAs, RunAsAny", + }, + "no fsgroup options": { + scc: noFSGroupOptions, + errorType: field.ErrorTypeNotSupported, + errorDetail: "supported values: \"MustRunAs\", \"RunAsAny\"", + }, + "no sup group options": { + scc: noSupplementalGroupsOptions, + errorType: field.ErrorTypeNotSupported, + errorDetail: "supported values: \"MustRunAs\", \"RunAsAny\"", + }, + "invalid user strategy type": { + scc: invalidUserStratType, + errorType: field.ErrorTypeInvalid, + errorDetail: "invalid strategy type. Valid values are MustRunAs, MustRunAsNonRoot, MustRunAsRange, RunAsAny", + }, + "invalid selinux strategy type": { + scc: invalidSELinuxStratType, + errorType: field.ErrorTypeInvalid, + errorDetail: "invalid strategy type. Valid values are MustRunAs, RunAsAny", + }, + "invalid sup group strategy type": { + scc: invalidSupGroupStratType, + errorType: field.ErrorTypeNotSupported, + errorDetail: "supported values: \"MustRunAs\", \"RunAsAny\"", + }, + "invalid fs group strategy type": { + scc: invalidFSGroupStratType, + errorType: field.ErrorTypeNotSupported, + errorDetail: "supported values: \"MustRunAs\", \"RunAsAny\"", + }, + "invalid uid": { + scc: invalidUIDSCC, + errorType: field.ErrorTypeInvalid, + errorDetail: "uid cannot be negative", + }, + "missing object meta name": { + scc: missingObjectMetaName, + errorType: field.ErrorTypeRequired, + errorDetail: "name or generateName is required", + }, + "invalid range min greater than max": { + scc: invalidRangeMinGreaterThanMax, + errorType: field.ErrorTypeInvalid, + errorDetail: "min cannot be greater than max", + }, + "invalid range negative min": { + scc: invalidRangeNegativeMin, + errorType: field.ErrorTypeInvalid, + errorDetail: "min cannot be negative", + }, + "invalid range negative max": { + scc: invalidRangeNegativeMax, + errorType: field.ErrorTypeInvalid, + errorDetail: "max cannot be negative", + }, + "negative priority": { + scc: negativePriority, + errorType: field.ErrorTypeInvalid, + errorDetail: "priority cannot be negative", + }, + "invalid required caps": { + scc: requiredCapAddAndDrop, + errorType: field.ErrorTypeInvalid, + errorDetail: "capability is listed in defaultAddCapabilities and requiredDropCapabilities", + }, + "allowed cap listed in required drops": { + scc: allowedCapListedInRequiredDrop, + errorType: field.ErrorTypeInvalid, + errorDetail: "capability is listed in allowedCapabilities and requiredDropCapabilities", + }, + "all caps allowed by a wildcard and required drops is not empty": { + scc: wildcardAllowedCapAndRequiredDrop, + errorType: field.ErrorTypeInvalid, + errorDetail: "required capabilities must be empty when all capabilities are allowed by a wildcard", + }, + "empty flex volume driver": { + scc: emptyFlexDriver, + errorType: field.ErrorTypeRequired, + errorDetail: "must specify a driver", + }, + "non-empty allowed flex volumes": { + scc: nonEmptyFlexVolumes, + errorType: field.ErrorTypeInvalid, + errorDetail: "volumes does not include 'flexVolume' or '*', so no flex volumes are allowed", + }, + "invalid defaultAllowPrivilegeEscalation": { + scc: invalidDefaultAllowPrivilegeEscalation, + errorType: field.ErrorTypeInvalid, + errorDetail: "Cannot set DefaultAllowPrivilegeEscalation to true without also setting AllowPrivilegeEscalation to true", + }, + "invalid allowed unsafe sysctl pattern": { + scc: invalidAllowedUnsafeSysctlPattern, + errorType: field.ErrorTypeInvalid, + errorDetail: fmt.Sprintf("must have at most 253 characters and match regex %s", sysctlPatternFmt), + }, + "invalid forbidden sysctl pattern": { + scc: invalidForbiddenSysctlPattern, + errorType: field.ErrorTypeInvalid, + errorDetail: fmt.Sprintf("must have at most 253 characters and match regex %s", sysctlPatternFmt), + }, + "invalid overlapping sysctl pattern": { + scc: invalidOverlappingSysctls, + errorType: field.ErrorTypeInvalid, + errorDetail: fmt.Sprintf("sysctl overlaps with %s", invalidOverlappingSysctls.ForbiddenSysctls[0]), + }, + "invalid duplicated sysctls": { + scc: invalidDuplicatedSysctls, + errorType: field.ErrorTypeInvalid, + errorDetail: fmt.Sprintf("sysctl overlaps with %s", invalidDuplicatedSysctls.AllowedUnsafeSysctls[0]), + }, + } + + for k, v := range errorCases { + t.Run(k, func(t *testing.T) { + if errs := ValidateSecurityContextConstraints(v.scc); len(errs) == 0 || errs[0].Type != v.errorType || errs[0].Detail != v.errorDetail { + t.Errorf("Expected error type %q with detail %q, got %v", v.errorType, v.errorDetail, errs) + } + }) + } + + var validUID int64 = 1 + + mustRunAs := validSCC() + mustRunAs.FSGroup.Type = securityv1.FSGroupStrategyMustRunAs + mustRunAs.SupplementalGroups.Type = securityv1.SupplementalGroupsStrategyMustRunAs + mustRunAs.RunAsUser.Type = securityv1.RunAsUserStrategyMustRunAs + mustRunAs.RunAsUser.UID = &validUID + mustRunAs.SELinuxContext.Type = securityv1.SELinuxStrategyMustRunAs + + runAsNonRoot := validSCC() + runAsNonRoot.RunAsUser.Type = securityv1.RunAsUserStrategyMustRunAsNonRoot + + caseInsensitiveAddDrop := validSCC() + caseInsensitiveAddDrop.DefaultAddCapabilities = []kcorev1.Capability{"foo"} + caseInsensitiveAddDrop.RequiredDropCapabilities = []kcorev1.Capability{"FOO"} + + caseInsensitiveAllowedDrop := validSCC() + caseInsensitiveAllowedDrop.RequiredDropCapabilities = []kcorev1.Capability{"FOO"} + caseInsensitiveAllowedDrop.AllowedCapabilities = []kcorev1.Capability{"foo"} + + flexvolumeWhenFlexVolumesAllowed := validSCC() + flexvolumeWhenFlexVolumesAllowed.Volumes = []securityv1.FSType{securityv1.FSTypeFlexVolume} + flexvolumeWhenFlexVolumesAllowed.AllowedFlexVolumes = []securityv1.AllowedFlexVolume{ + {Driver: "example/driver1"}, + } + + flexvolumeWhenAllVolumesAllowed := validSCC() + flexvolumeWhenAllVolumesAllowed.Volumes = []securityv1.FSType{securityv1.FSTypeAll} + flexvolumeWhenAllVolumesAllowed.AllowedFlexVolumes = []securityv1.AllowedFlexVolume{ + {Driver: "example/driver2"}, + } + + validDefaultAllowPrivilegeEscalation := validSCC() + validDefaultAllowPrivilegeEscalation.DefaultAllowPrivilegeEscalation = &yes + validDefaultAllowPrivilegeEscalation.AllowPrivilegeEscalation = &yes + + withForbiddenSysctl := validSCC() + withForbiddenSysctl.ForbiddenSysctls = []string{"net.*"} + + withAllowedUnsafeSysctl := validSCC() + withAllowedUnsafeSysctl.AllowedUnsafeSysctls = []string{"net.ipv4.tcp_max_syn_backlog"} + + successCases := map[string]struct { + scc *securityv1.SecurityContextConstraints + }{ + "must run as": { + scc: mustRunAs, + }, + "run as any": { + scc: validSCC(), + }, + "run as non-root (user only)": { + scc: runAsNonRoot, + }, + "comparison for add -> drop is case sensitive": { + scc: caseInsensitiveAddDrop, + }, + "comparison for allowed -> drop is case sensitive": { + scc: caseInsensitiveAllowedDrop, + }, + "allow white-listed flexVolume when flex volumes are allowed": { + scc: flexvolumeWhenFlexVolumesAllowed, + }, + "allow white-listed flexVolume when all volumes are allowed": { + scc: flexvolumeWhenAllVolumesAllowed, + }, + "valid defaultAllowPrivilegeEscalation as true": { + scc: validDefaultAllowPrivilegeEscalation, + }, + "with network sysctls forbidden": { + scc: withForbiddenSysctl, + }, + "with unsafe net.ipv4.tcp_max_syn_backlog sysctl allowed": { + scc: withAllowedUnsafeSysctl, + }, + } + + for k, v := range successCases { + if errs := ValidateSecurityContextConstraints(v.scc); len(errs) != 0 { + t.Errorf("Expected success for %q, got %v", k, errs) + } + } +} diff --git a/openshift-kube-apiserver/admission/namespaceconditions/decorator.go b/openshift-kube-apiserver/admission/namespaceconditions/decorator.go new file mode 100644 index 0000000000000..5cfd9dae5ba6e --- /dev/null +++ b/openshift-kube-apiserver/admission/namespaceconditions/decorator.go @@ -0,0 +1,60 @@ +package namespaceconditions + +import ( + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apiserver/pkg/admission" + corev1client "k8s.io/client-go/kubernetes/typed/core/v1" + corev1lister "k8s.io/client-go/listers/core/v1" +) + +// this is a list of namespaces with special meaning. The kube ones are here in particular because +// we don't control their creation or labeling on their creation +var runLevelZeroNamespaces = sets.NewString("default", "kube-system", "kube-public") +var runLevelOneNamespaces = sets.NewString("openshift-node", "openshift-infra", "openshift") + +func init() { + runLevelOneNamespaces.Insert(runLevelZeroNamespaces.List()...) +} + +// NamespaceLabelConditions provides a decorator that can delegate and conditionally add label conditions +type NamespaceLabelConditions struct { + NamespaceClient corev1client.NamespacesGetter + NamespaceLister corev1lister.NamespaceLister + + SkipLevelZeroNames sets.String + SkipLevelOneNames sets.String +} + +func (d *NamespaceLabelConditions) WithNamespaceLabelConditions(admissionPlugin admission.Interface, name string) admission.Interface { + switch { + case d.SkipLevelOneNames.Has(name): + // return a decorated admission plugin that skips runlevel 0 and 1 namespaces based on name (for known values) and + // label. + return &pluginHandlerWithNamespaceNameConditions{ + admissionPlugin: &pluginHandlerWithNamespaceLabelConditions{ + admissionPlugin: admissionPlugin, + namespaceClient: d.NamespaceClient, + namespaceLister: d.NamespaceLister, + namespaceSelector: skipRunLevelOneSelector, + }, + namespacesToExclude: runLevelOneNamespaces, + } + + case d.SkipLevelZeroNames.Has(name): + // return a decorated admission plugin that skips runlevel 0 namespaces based on name (for known values) and + // label. + return &pluginHandlerWithNamespaceNameConditions{ + admissionPlugin: &pluginHandlerWithNamespaceLabelConditions{ + admissionPlugin: admissionPlugin, + namespaceClient: d.NamespaceClient, + namespaceLister: d.NamespaceLister, + namespaceSelector: skipRunLevelZeroSelector, + }, + namespacesToExclude: runLevelZeroNamespaces, + } + + default: + return admissionPlugin + } + +} diff --git a/openshift-kube-apiserver/admission/namespaceconditions/labelcondition.go b/openshift-kube-apiserver/admission/namespaceconditions/labelcondition.go new file mode 100644 index 0000000000000..c3ebaf5895306 --- /dev/null +++ b/openshift-kube-apiserver/admission/namespaceconditions/labelcondition.go @@ -0,0 +1,125 @@ +package namespaceconditions + +import ( + "context" + + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apiserver/pkg/admission" + corev1client "k8s.io/client-go/kubernetes/typed/core/v1" + corev1lister "k8s.io/client-go/listers/core/v1" +) + +const runLevelLabel = "openshift.io/run-level" + +var ( + skipRunLevelZeroSelector labels.Selector + skipRunLevelOneSelector labels.Selector +) + +func init() { + var err error + skipRunLevelZeroSelector, err = labels.Parse(runLevelLabel + " notin ( 0 )") + if err != nil { + panic(err) + } + skipRunLevelOneSelector, err = labels.Parse(runLevelLabel + " notin ( 0,1 )") + if err != nil { + panic(err) + } +} + +// pluginHandlerWithNamespaceLabelConditions wraps an admission plugin in a conditional skip based on namespace labels +type pluginHandlerWithNamespaceLabelConditions struct { + admissionPlugin admission.Interface + namespaceClient corev1client.NamespacesGetter + namespaceLister corev1lister.NamespaceLister + namespaceSelector labels.Selector +} + +var _ admission.ValidationInterface = &pluginHandlerWithNamespaceLabelConditions{} +var _ admission.MutationInterface = &pluginHandlerWithNamespaceLabelConditions{} + +func (p pluginHandlerWithNamespaceLabelConditions) Handles(operation admission.Operation) bool { + return p.admissionPlugin.Handles(operation) +} + +// Admit performs a mutating admission control check and emit metrics. +func (p pluginHandlerWithNamespaceLabelConditions) Admit(ctx context.Context, a admission.Attributes, o admission.ObjectInterfaces) error { + if !p.shouldRunAdmission(a) { + return nil + } + + mutatingHandler, ok := p.admissionPlugin.(admission.MutationInterface) + if !ok { + return nil + } + return mutatingHandler.Admit(ctx, a, o) +} + +// Validate performs a non-mutating admission control check and emits metrics. +func (p pluginHandlerWithNamespaceLabelConditions) Validate(ctx context.Context, a admission.Attributes, o admission.ObjectInterfaces) error { + if !p.shouldRunAdmission(a) { + return nil + } + + validatingHandler, ok := p.admissionPlugin.(admission.ValidationInterface) + if !ok { + return nil + } + return validatingHandler.Validate(ctx, a, o) +} + +// MatchNamespaceSelector decideds whether the request matches the +// namespaceSelctor of the webhook. Only when they match, the webhook is called. +func (p pluginHandlerWithNamespaceLabelConditions) shouldRunAdmission(attr admission.Attributes) bool { + namespaceName := attr.GetNamespace() + if len(namespaceName) == 0 && attr.GetResource().Resource != "namespaces" { + // cluster scoped resources always run admission + return true + } + namespaceLabels, err := p.getNamespaceLabels(attr) + if err != nil { + // default to running the hook so we don't leak namespace existence information + return true + } + // TODO: adding an LRU cache to cache the match decision + return p.namespaceSelector.Matches(labels.Set(namespaceLabels)) +} + +// getNamespaceLabels gets the labels of the namespace related to the attr. +func (p pluginHandlerWithNamespaceLabelConditions) getNamespaceLabels(attr admission.Attributes) (map[string]string, error) { + // If the request itself is creating or updating a namespace, then get the + // labels from attr.Object, because namespaceLister doesn't have the latest + // namespace yet. + // + // However, if the request is deleting a namespace, then get the label from + // the namespace in the namespaceLister, because a delete request is not + // going to change the object, and attr.Object will be a DeleteOptions + // rather than a namespace object. + if attr.GetResource().Resource == "namespaces" && + len(attr.GetSubresource()) == 0 && + (attr.GetOperation() == admission.Create || attr.GetOperation() == admission.Update) { + accessor, err := meta.Accessor(attr.GetObject()) + if err != nil { + return nil, err + } + return accessor.GetLabels(), nil + } + + namespaceName := attr.GetNamespace() + namespace, err := p.namespaceLister.Get(namespaceName) + if err != nil && !apierrors.IsNotFound(err) { + return nil, err + } + if apierrors.IsNotFound(err) { + // in case of latency in our caches, make a call direct to storage to verify that it truly exists or not + namespace, err = p.namespaceClient.Namespaces().Get(context.TODO(), namespaceName, metav1.GetOptions{}) + if err != nil { + return nil, err + } + } + return namespace.Labels, nil +} diff --git a/openshift-kube-apiserver/admission/namespaceconditions/labelcondition_test.go b/openshift-kube-apiserver/admission/namespaceconditions/labelcondition_test.go new file mode 100644 index 0000000000000..31474a4b7ee93 --- /dev/null +++ b/openshift-kube-apiserver/admission/namespaceconditions/labelcondition_test.go @@ -0,0 +1,97 @@ +package namespaceconditions + +import ( + "reflect" + "testing" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apiserver/pkg/admission" +) + +type fakeNamespaceLister struct { + namespaces map[string]*corev1.Namespace +} + +func (f fakeNamespaceLister) List(selector labels.Selector) (ret []*corev1.Namespace, err error) { + return nil, nil +} +func (f fakeNamespaceLister) Get(name string) (*corev1.Namespace, error) { + ns, ok := f.namespaces[name] + if ok { + return ns, nil + } + return nil, errors.NewNotFound(corev1.Resource("namespaces"), name) +} + +func TestGetNamespaceLabels(t *testing.T) { + namespace1Labels := map[string]string{ + "runlevel": "1", + } + namespace1 := corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "1", + Labels: namespace1Labels, + }, + } + namespace2Labels := map[string]string{ + "runlevel": "2", + } + namespace2 := corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "2", + Labels: namespace2Labels, + }, + } + namespaceLister := fakeNamespaceLister{map[string]*corev1.Namespace{ + "1": &namespace1, + }, + } + + tests := []struct { + name string + attr admission.Attributes + expectedLabels map[string]string + }{ + { + name: "request is for creating namespace, the labels should be from the object itself", + attr: admission.NewAttributesRecord(&namespace2, nil, schema.GroupVersionKind{}, "", namespace2.Name, schema.GroupVersionResource{Resource: "namespaces"}, "", admission.Create, nil, false, nil), + expectedLabels: namespace2Labels, + }, + { + name: "request is for updating namespace, the labels should be from the new object", + attr: admission.NewAttributesRecord(&namespace2, nil, schema.GroupVersionKind{}, namespace2.Name, namespace2.Name, schema.GroupVersionResource{Resource: "namespaces"}, "", admission.Update, nil, false, nil), + expectedLabels: namespace2Labels, + }, + { + name: "request is for deleting namespace, the labels should be from the cache", + attr: admission.NewAttributesRecord(&namespace2, nil, schema.GroupVersionKind{}, namespace1.Name, namespace1.Name, schema.GroupVersionResource{Resource: "namespaces"}, "", admission.Delete, nil, false, nil), + expectedLabels: namespace1Labels, + }, + { + name: "request is for namespace/finalizer", + attr: admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{}, namespace1.Name, "mock-name", schema.GroupVersionResource{Resource: "namespaces"}, "finalizers", admission.Create, nil, false, nil), + expectedLabels: namespace1Labels, + }, + { + name: "request is for pod", + attr: admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{}, namespace1.Name, "mock-name", schema.GroupVersionResource{Resource: "pods"}, "", admission.Create, nil, false, nil), + expectedLabels: namespace1Labels, + }, + } + matcher := pluginHandlerWithNamespaceLabelConditions{ + namespaceLister: namespaceLister, + } + for _, tt := range tests { + actualLabels, err := matcher.getNamespaceLabels(tt.attr) + if err != nil { + t.Error(err) + } + if !reflect.DeepEqual(actualLabels, tt.expectedLabels) { + t.Errorf("expected labels to be %#v, got %#v", tt.expectedLabels, actualLabels) + } + } +} diff --git a/openshift-kube-apiserver/admission/namespaceconditions/namecondition.go b/openshift-kube-apiserver/admission/namespaceconditions/namecondition.go new file mode 100644 index 0000000000000..848cef4d13ac4 --- /dev/null +++ b/openshift-kube-apiserver/admission/namespaceconditions/namecondition.go @@ -0,0 +1,60 @@ +package namespaceconditions + +import ( + "context" + + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apiserver/pkg/admission" +) + +// pluginHandlerWithNamespaceNameConditions skips running admission plugins if they deal in the namespaceToExclude list +type pluginHandlerWithNamespaceNameConditions struct { + admissionPlugin admission.Interface + namespacesToExclude sets.String +} + +var _ admission.ValidationInterface = &pluginHandlerWithNamespaceNameConditions{} +var _ admission.MutationInterface = &pluginHandlerWithNamespaceNameConditions{} + +func (p pluginHandlerWithNamespaceNameConditions) Handles(operation admission.Operation) bool { + return p.admissionPlugin.Handles(operation) +} + +// Admit performs a mutating admission control check and emit metrics. +func (p pluginHandlerWithNamespaceNameConditions) Admit(ctx context.Context, a admission.Attributes, o admission.ObjectInterfaces) error { + if !p.shouldRunAdmission(a) { + return nil + } + + mutatingHandler, ok := p.admissionPlugin.(admission.MutationInterface) + if !ok { + return nil + } + return mutatingHandler.Admit(ctx, a, o) +} + +// Validate performs a non-mutating admission control check and emits metrics. +func (p pluginHandlerWithNamespaceNameConditions) Validate(ctx context.Context, a admission.Attributes, o admission.ObjectInterfaces) error { + if !p.shouldRunAdmission(a) { + return nil + } + + validatingHandler, ok := p.admissionPlugin.(admission.ValidationInterface) + if !ok { + return nil + } + return validatingHandler.Validate(ctx, a, o) +} + +func (p pluginHandlerWithNamespaceNameConditions) shouldRunAdmission(attr admission.Attributes) bool { + namespaceName := attr.GetNamespace() + if p.namespacesToExclude.Has(namespaceName) { + return false + } + if (attr.GetResource().GroupResource() == schema.GroupResource{Resource: "namespaces"}) && p.namespacesToExclude.Has(attr.GetName()) { + return false + } + + return true +} diff --git a/openshift-kube-apiserver/admission/network/apis/externalipranger/doc.go b/openshift-kube-apiserver/admission/network/apis/externalipranger/doc.go new file mode 100644 index 0000000000000..4ef9330be1224 --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/externalipranger/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package externalipranger is the internal version of the API. +package externalipranger diff --git a/openshift-kube-apiserver/admission/network/apis/externalipranger/register.go b/openshift-kube-apiserver/admission/network/apis/externalipranger/register.go new file mode 100644 index 0000000000000..fe92abf523c1e --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/externalipranger/register.go @@ -0,0 +1,20 @@ +package externalipranger + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var GroupVersion = schema.GroupVersion{Group: "network.openshift.io", Version: runtime.APIVersionInternal} + +var ( + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + Install = schemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &ExternalIPRangerAdmissionConfig{}, + ) + return nil +} diff --git a/openshift-kube-apiserver/admission/network/apis/externalipranger/types.go b/openshift-kube-apiserver/admission/network/apis/externalipranger/types.go new file mode 100644 index 0000000000000..f127ca27aadcb --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/externalipranger/types.go @@ -0,0 +1,20 @@ +package externalipranger + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RestrictedEndpointsAdmissionConfig is the configuration for which CIDRs services can't manage +type ExternalIPRangerAdmissionConfig struct { + metav1.TypeMeta + + // ExternalIPNetworkCIDRs controls what values are acceptable for the service external IP field. If empty, no externalIP + // may be set. It may contain a list of CIDRs which are checked for access. If a CIDR is prefixed with !, IPs in that + // CIDR will be rejected. Rejections will be applied first, then the IP checked against one of the allowed CIDRs. You + // should ensure this range does not overlap with your nodes, pods, or service CIDRs for security reasons. + ExternalIPNetworkCIDRs []string + // AllowIngressIP indicates that ingress IPs should be allowed + AllowIngressIP bool +} diff --git a/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/doc.go b/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/doc.go new file mode 100644 index 0000000000000..79476f394930a --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/doc.go @@ -0,0 +1,5 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger + +// Package v1 is the v1 version of the API. +package v1 diff --git a/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/register.go b/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/register.go new file mode 100644 index 0000000000000..f55b5a5b494df --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/register.go @@ -0,0 +1,24 @@ +package v1 + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints" +) + +var GroupVersion = schema.GroupVersion{Group: "network.openshift.io", Version: "v1"} + +var ( + localSchemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + restrictedendpoints.Install, + ) + Install = localSchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &ExternalIPRangerAdmissionConfig{}, + ) + return nil +} diff --git a/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/types.go b/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/types.go new file mode 100644 index 0000000000000..0fb8ea4ca830a --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/types.go @@ -0,0 +1,20 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ExternalIPRangerAdmissionConfig is the configuration for which CIDRs services can't manage +type ExternalIPRangerAdmissionConfig struct { + metav1.TypeMeta `json:",inline"` + + // ExternalIPNetworkCIDRs controls what values are acceptable for the service external IP field. If empty, no externalIP + // may be set. It may contain a list of CIDRs which are checked for access. If a CIDR is prefixed with !, IPs in that + // CIDR will be rejected. Rejections will be applied first, then the IP checked against one of the allowed CIDRs. You + // should ensure this range does not overlap with your nodes, pods, or service CIDRs for security reasons. + ExternalIPNetworkCIDRs []string `json:"externalIPNetworkCIDRs"` + // AllowIngressIP indicates that ingress IPs should be allowed + AllowIngressIP bool `json:"allowIngressIP"` +} diff --git a/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..34eaa7cff663f --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/zz_generated.deepcopy.go @@ -0,0 +1,55 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +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. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExternalIPRangerAdmissionConfig) DeepCopyInto(out *ExternalIPRangerAdmissionConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.ExternalIPNetworkCIDRs != nil { + in, out := &in.ExternalIPNetworkCIDRs, &out.ExternalIPNetworkCIDRs + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalIPRangerAdmissionConfig. +func (in *ExternalIPRangerAdmissionConfig) DeepCopy() *ExternalIPRangerAdmissionConfig { + if in == nil { + return nil + } + out := new(ExternalIPRangerAdmissionConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ExternalIPRangerAdmissionConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/openshift-kube-apiserver/admission/network/apis/externalipranger/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/network/apis/externalipranger/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..8437974962071 --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/externalipranger/zz_generated.deepcopy.go @@ -0,0 +1,39 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package externalipranger + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExternalIPRangerAdmissionConfig) DeepCopyInto(out *ExternalIPRangerAdmissionConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.ExternalIPNetworkCIDRs != nil { + in, out := &in.ExternalIPNetworkCIDRs, &out.ExternalIPNetworkCIDRs + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalIPRangerAdmissionConfig. +func (in *ExternalIPRangerAdmissionConfig) DeepCopy() *ExternalIPRangerAdmissionConfig { + if in == nil { + return nil + } + out := new(ExternalIPRangerAdmissionConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ExternalIPRangerAdmissionConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/doc.go b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/doc.go new file mode 100644 index 0000000000000..ff46fb9f13d76 --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package restrictedendpoints is the internal version of the API. +package restrictedendpoints diff --git a/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/register.go b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/register.go new file mode 100644 index 0000000000000..171a4b1be5182 --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/register.go @@ -0,0 +1,20 @@ +package restrictedendpoints + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var GroupVersion = schema.GroupVersion{Group: "network.openshift.io", Version: runtime.APIVersionInternal} + +var ( + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + Install = schemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &RestrictedEndpointsAdmissionConfig{}, + ) + return nil +} diff --git a/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/types.go b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/types.go new file mode 100644 index 0000000000000..e205762215ba1 --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/types.go @@ -0,0 +1,15 @@ +package restrictedendpoints + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RestrictedEndpointsAdmissionConfig is the configuration for which CIDRs services can't manage +type RestrictedEndpointsAdmissionConfig struct { + metav1.TypeMeta + + // RestrictedCIDRs indicates what CIDRs will be disallowed for services. + RestrictedCIDRs []string +} diff --git a/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/doc.go b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/doc.go new file mode 100644 index 0000000000000..0dac22208df49 --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/doc.go @@ -0,0 +1,5 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints + +// Package v1 is the v1 version of the API. +package v1 diff --git a/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/register.go b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/register.go new file mode 100644 index 0000000000000..f924353fe24d3 --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/register.go @@ -0,0 +1,24 @@ +package v1 + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints" +) + +var GroupVersion = schema.GroupVersion{Group: "network.openshift.io", Version: "v1"} + +var ( + localSchemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + restrictedendpoints.Install, + ) + Install = localSchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &RestrictedEndpointsAdmissionConfig{}, + ) + return nil +} diff --git a/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/types.go b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/types.go new file mode 100644 index 0000000000000..f665aa1e73c2f --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/types.go @@ -0,0 +1,15 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RestrictedEndpointsAdmissionConfig is the configuration for which CIDRs services can't manage +type RestrictedEndpointsAdmissionConfig struct { + metav1.TypeMeta `json:",inline"` + + // RestrictedCIDRs indicates what CIDRs will be disallowed for services. + RestrictedCIDRs []string `json:"restrictedCIDRs"` +} diff --git a/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..e9597be6b05da --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.deepcopy.go @@ -0,0 +1,39 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RestrictedEndpointsAdmissionConfig) DeepCopyInto(out *RestrictedEndpointsAdmissionConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.RestrictedCIDRs != nil { + in, out := &in.RestrictedCIDRs, &out.RestrictedCIDRs + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RestrictedEndpointsAdmissionConfig. +func (in *RestrictedEndpointsAdmissionConfig) DeepCopy() *RestrictedEndpointsAdmissionConfig { + if in == nil { + return nil + } + out := new(RestrictedEndpointsAdmissionConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RestrictedEndpointsAdmissionConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..0a00cc4bc8da4 --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/zz_generated.deepcopy.go @@ -0,0 +1,39 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package restrictedendpoints + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RestrictedEndpointsAdmissionConfig) DeepCopyInto(out *RestrictedEndpointsAdmissionConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.RestrictedCIDRs != nil { + in, out := &in.RestrictedCIDRs, &out.RestrictedCIDRs + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RestrictedEndpointsAdmissionConfig. +func (in *RestrictedEndpointsAdmissionConfig) DeepCopy() *RestrictedEndpointsAdmissionConfig { + if in == nil { + return nil + } + out := new(RestrictedEndpointsAdmissionConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RestrictedEndpointsAdmissionConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/openshift-kube-apiserver/admission/network/externalipranger/externalip_admission.go b/openshift-kube-apiserver/admission/network/externalipranger/externalip_admission.go new file mode 100644 index 0000000000000..79a1be9cee7eb --- /dev/null +++ b/openshift-kube-apiserver/admission/network/externalipranger/externalip_admission.go @@ -0,0 +1,208 @@ +package externalipranger + +import ( + "context" + "fmt" + "io" + "net" + "strings" + + "github.com/openshift/library-go/pkg/config/helpers" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/apiserver/pkg/authorization/authorizer" + "k8s.io/klog/v2" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger" + v1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/v1" + kapi "k8s.io/kubernetes/pkg/apis/core" +) + +const ExternalIPPluginName = "network.openshift.io/ExternalIPRanger" + +func RegisterExternalIP(plugins *admission.Plugins) { + plugins.Register("network.openshift.io/ExternalIPRanger", + func(config io.Reader) (admission.Interface, error) { + pluginConfig, err := readConfig(config) + if err != nil { + return nil, err + } + if pluginConfig == nil { + klog.Infof("Admission plugin %q is not configured so it will be disabled.", ExternalIPPluginName) + return nil, nil + } + + // this needs to be moved upstream to be part of core config + reject, admit, err := ParseRejectAdmitCIDRRules(pluginConfig.ExternalIPNetworkCIDRs) + if err != nil { + // should have been caught with validation + return nil, err + } + + return NewExternalIPRanger(reject, admit, pluginConfig.AllowIngressIP), nil + }) +} + +func readConfig(reader io.Reader) (*externalipranger.ExternalIPRangerAdmissionConfig, error) { + obj, err := helpers.ReadYAMLToInternal(reader, externalipranger.Install, v1.Install) + if err != nil { + return nil, err + } + if obj == nil { + return nil, nil + } + config, ok := obj.(*externalipranger.ExternalIPRangerAdmissionConfig) + if !ok { + return nil, fmt.Errorf("unexpected config object: %#v", obj) + } + // No validation needed since config is just list of strings + return config, nil +} + +type externalIPRanger struct { + *admission.Handler + reject []*net.IPNet + admit []*net.IPNet + authorizer authorizer.Authorizer + allowIngressIP bool +} + +var _ admission.Interface = &externalIPRanger{} +var _ admission.ValidationInterface = &externalIPRanger{} +var _ = initializer.WantsAuthorizer(&externalIPRanger{}) + +// ParseRejectAdmitCIDRRules calculates a blacklist and whitelist from a list of string CIDR rules (treating +// a leading ! as a negation). Returns an error if any rule is invalid. +func ParseRejectAdmitCIDRRules(rules []string) (reject, admit []*net.IPNet, err error) { + for _, s := range rules { + negate := false + if strings.HasPrefix(s, "!") { + negate = true + s = s[1:] + } + _, cidr, err := net.ParseCIDR(s) + if err != nil { + return nil, nil, err + } + if negate { + reject = append(reject, cidr) + } else { + admit = append(admit, cidr) + } + } + return reject, admit, nil +} + +// NewConstraint creates a new SCC constraint admission plugin. +func NewExternalIPRanger(reject, admit []*net.IPNet, allowIngressIP bool) *externalIPRanger { + return &externalIPRanger{ + Handler: admission.NewHandler(admission.Create, admission.Update), + reject: reject, + admit: admit, + allowIngressIP: allowIngressIP, + } +} + +func (r *externalIPRanger) SetAuthorizer(a authorizer.Authorizer) { + r.authorizer = a +} + +func (r *externalIPRanger) ValidateInitialization() error { + if r.authorizer == nil { + return fmt.Errorf("missing authorizer") + } + return nil +} + +// NetworkSlice is a helper for checking whether an IP is contained in a range +// of networks. +type NetworkSlice []*net.IPNet + +func (s NetworkSlice) Contains(ip net.IP) bool { + for _, cidr := range s { + if cidr.Contains(ip) { + return true + } + } + return false +} + +// Admit determines if the service should be admitted based on the configured network CIDR. +func (r *externalIPRanger) Validate(ctx context.Context, a admission.Attributes, _ admission.ObjectInterfaces) error { + if a.GetResource().GroupResource() != kapi.Resource("services") { + return nil + } + + svc, ok := a.GetObject().(*kapi.Service) + // if we can't convert then we don't handle this object so just return + if !ok { + return nil + } + + // Determine if an ingress ip address should be allowed as an + // external ip by checking the loadbalancer status of the previous + // object state. Only updates need to be validated against the + // ingress ip since the loadbalancer status cannot be set on + // create. + ingressIP := "" + retrieveIngressIP := a.GetOperation() == admission.Update && + r.allowIngressIP && svc.Spec.Type == kapi.ServiceTypeLoadBalancer + if retrieveIngressIP { + old, ok := a.GetOldObject().(*kapi.Service) + ipPresent := ok && old != nil && len(old.Status.LoadBalancer.Ingress) > 0 + if ipPresent { + ingressIP = old.Status.LoadBalancer.Ingress[0].IP + } + } + + var errs field.ErrorList + switch { + // administrator disabled externalIPs + case len(svc.Spec.ExternalIPs) > 0 && len(r.admit) == 0: + onlyIngressIP := len(svc.Spec.ExternalIPs) == 1 && svc.Spec.ExternalIPs[0] == ingressIP + if !onlyIngressIP { + errs = append(errs, field.Forbidden(field.NewPath("spec", "externalIPs"), "externalIPs have been disabled")) + } + // administrator has limited the range + case len(svc.Spec.ExternalIPs) > 0 && len(r.admit) > 0: + for i, s := range svc.Spec.ExternalIPs { + ip := net.ParseIP(s) + if ip == nil { + errs = append(errs, field.Forbidden(field.NewPath("spec", "externalIPs").Index(i), "externalIPs must be a valid address")) + continue + } + notIngressIP := s != ingressIP + if (NetworkSlice(r.reject).Contains(ip) || !NetworkSlice(r.admit).Contains(ip)) && notIngressIP { + errs = append(errs, field.Forbidden(field.NewPath("spec", "externalIPs").Index(i), "externalIP is not allowed")) + continue + } + } + } + + if len(errs) > 0 { + //if there are errors reported, resort to RBAC check to see + //if this is an admin user who can over-ride the check + allow, err := r.checkAccess(ctx, a) + if err != nil { + return err + } + if !allow { + return admission.NewForbidden(a, errs.ToAggregate()) + } + } + + return nil +} + +func (r *externalIPRanger) checkAccess(ctx context.Context, attr admission.Attributes) (bool, error) { + authzAttr := authorizer.AttributesRecord{ + User: attr.GetUserInfo(), + Verb: "create", + Resource: "service", + Subresource: "externalips", + APIGroup: "network.openshift.io", + ResourceRequest: true, + } + authorized, _, err := r.authorizer.Authorize(ctx, authzAttr) + return authorized == authorizer.DecisionAllow, err +} diff --git a/openshift-kube-apiserver/admission/network/externalipranger/externalip_admission_test.go b/openshift-kube-apiserver/admission/network/externalipranger/externalip_admission_test.go new file mode 100644 index 0000000000000..5b953409b48f3 --- /dev/null +++ b/openshift-kube-apiserver/admission/network/externalipranger/externalip_admission_test.go @@ -0,0 +1,321 @@ +package externalipranger + +import ( + "context" + "fmt" + "net" + "strings" + "testing" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/authorization/authorizer" + + "k8s.io/apiserver/pkg/authentication/user" + + kapi "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/serviceaccount" +) + +type fakeTestAuthorizer struct { + t *testing.T +} + +func fakeAuthorizer(t *testing.T) authorizer.Authorizer { + return &fakeTestAuthorizer{ + t: t, + } +} + +func (a *fakeTestAuthorizer) Authorize(_ context.Context, attributes authorizer.Attributes) (authorizer.Decision, string, error) { + ui := attributes.GetUser() + if ui == nil { + return authorizer.DecisionNoOpinion, "", fmt.Errorf("No valid UserInfo for Context") + } + // system:serviceaccount:test:admin user aka admin user is allowed to set + // external IPs + if ui.GetName() == "system:serviceaccount:test:admin" { + return authorizer.DecisionAllow, "", nil + } + // Non test:admin user aka without admin privileges: + return authorizer.DecisionDeny, "", nil +} + +// TestAdmission verifies various scenarios involving pod/project/global node label selectors +func TestAdmission(t *testing.T) { + svc := &kapi.Service{ + ObjectMeta: metav1.ObjectMeta{Name: "test"}, + } + var oldSvc *kapi.Service + + _, ipv4, err := net.ParseCIDR("172.0.0.0/16") + if err != nil { + t.Fatal(err) + } + _, ipv4subset, err := net.ParseCIDR("172.0.1.0/24") + if err != nil { + t.Fatal(err) + } + _, ipv4offset, err := net.ParseCIDR("172.200.0.0/24") + if err != nil { + t.Fatal(err) + } + _, none, err := net.ParseCIDR("0.0.0.0/32") + if err != nil { + t.Fatal(err) + } + _, all, err := net.ParseCIDR("0.0.0.0/0") + if err != nil { + t.Fatal(err) + } + + tests := []struct { + testName string + rejects, admits []*net.IPNet + op admission.Operation + externalIPs []string + admit bool + errFn func(err error) bool + loadBalancer bool + ingressIP string + userinfo user.Info + }{ + { + admit: true, + op: admission.Create, + testName: "No external IPs on create for test:ordinary-user user", + userinfo: serviceaccount.UserInfo("test", "ordinary-user", ""), + }, + { + admit: true, + op: admission.Update, + testName: "No external IPs on update for test:admin user", + userinfo: serviceaccount.UserInfo("test", "ordinary-user", ""), + }, + { + admit: false, + externalIPs: []string{"1.2.3.4"}, + op: admission.Create, + testName: "No external IPs allowed on create for test:ordinary-user user", + errFn: func(err error) bool { return strings.Contains(err.Error(), "externalIPs have been disabled") }, + userinfo: serviceaccount.UserInfo("test", "ordinary-user", ""), + }, + { + admit: true, + externalIPs: []string{"1.2.3.4"}, + op: admission.Create, + testName: "External IPs allowed on create for test:admin user", + userinfo: serviceaccount.UserInfo("test", "admin", ""), + }, + { + admit: false, + externalIPs: []string{"1.2.3.4"}, + op: admission.Update, + testName: "No external IPs allowed on update", + errFn: func(err error) bool { return strings.Contains(err.Error(), "externalIPs have been disabled") }, + userinfo: serviceaccount.UserInfo("test", "ordinary-user", ""), + }, + { + admit: true, + externalIPs: []string{"1.2.3.4"}, + op: admission.Update, + testName: "External IPs allowed on update for test:admin user", + userinfo: serviceaccount.UserInfo("test", "admin", ""), + }, + { + admit: false, + admits: []*net.IPNet{ipv4}, + externalIPs: []string{"1.2.3.4"}, + op: admission.Create, + testName: "IP out of range on create", + errFn: func(err error) bool { + return strings.Contains(err.Error(), "externalIP is not allowed") && + strings.Contains(err.Error(), "spec.externalIPs[0]") + }, + userinfo: serviceaccount.UserInfo("test", "ordinary-user", ""), + }, + { + admit: false, + admits: []*net.IPNet{ipv4}, + externalIPs: []string{"1.2.3.4"}, + op: admission.Update, + testName: "IP out of range on update", + errFn: func(err error) bool { + return strings.Contains(err.Error(), "externalIP is not allowed") && + strings.Contains(err.Error(), "spec.externalIPs[0]") + }, + userinfo: serviceaccount.UserInfo("test", "ordinary-user", ""), + }, + { + admit: false, + admits: []*net.IPNet{ipv4}, + rejects: []*net.IPNet{ipv4subset}, + externalIPs: []string{"172.0.1.1"}, + op: admission.Update, + testName: "IP out of range due to blacklist", + errFn: func(err error) bool { + return strings.Contains(err.Error(), "externalIP is not allowed") && + strings.Contains(err.Error(), "spec.externalIPs[0]") + }, + userinfo: serviceaccount.UserInfo("test", "ordinary-user", ""), + }, + { + admit: false, + admits: []*net.IPNet{ipv4}, + rejects: []*net.IPNet{ipv4offset}, + externalIPs: []string{"172.199.1.1"}, + op: admission.Update, + testName: "IP not in reject or admit", + errFn: func(err error) bool { + return strings.Contains(err.Error(), "externalIP is not allowed") && + strings.Contains(err.Error(), "spec.externalIPs[0]") + }, + userinfo: serviceaccount.UserInfo("test", "ordinary-user", ""), + }, + { + admit: true, + admits: []*net.IPNet{ipv4}, + externalIPs: []string{"172.0.0.1"}, + op: admission.Create, + testName: "IP in range on create for test:ordinary-user user", + userinfo: serviceaccount.UserInfo("test", "ordinary-user", ""), + }, + { + admit: true, + admits: []*net.IPNet{ipv4}, + externalIPs: []string{"172.0.0.1"}, + op: admission.Update, + testName: "IP in range on update for test:admin user", + userinfo: serviceaccount.UserInfo("test", "admin", ""), + }, + // other checks + { + admit: false, + admits: []*net.IPNet{ipv4}, + externalIPs: []string{"abcd"}, + op: admission.Create, + testName: "IP unparseable on create", + errFn: func(err error) bool { + return strings.Contains(err.Error(), "externalIPs must be a valid address") && + strings.Contains(err.Error(), "spec.externalIPs[0]") + }, + userinfo: serviceaccount.UserInfo("test", "ordinary-user", ""), + }, + { + admit: false, + admits: []*net.IPNet{none}, + externalIPs: []string{"1.2.3.4"}, + op: admission.Create, + testName: "IP range is empty for test:ordinary-user user", + errFn: func(err error) bool { return strings.Contains(err.Error(), "externalIP is not allowed") }, + userinfo: serviceaccount.UserInfo("test", "ordinary-user", ""), + }, + { + admit: true, + admits: []*net.IPNet{none}, + externalIPs: []string{"1.2.3.4"}, + op: admission.Create, + testName: "IP range is empty, but test:admin user allowed", + userinfo: serviceaccount.UserInfo("test", "admin", ""), + }, + { + admit: false, + rejects: []*net.IPNet{all}, + admits: []*net.IPNet{all}, + externalIPs: []string{"1.2.3.4"}, + op: admission.Create, + testName: "rejections can cover the entire range", + userinfo: serviceaccount.UserInfo("test", "ordinary-user", ""), + }, + // Ingress IP checks + { + admit: true, + externalIPs: []string{"1.2.3.4"}, + op: admission.Update, + testName: "Ingress ip allowed when external ips are disabled", + loadBalancer: true, + ingressIP: "1.2.3.4", + userinfo: serviceaccount.UserInfo("test", "ordinary-user", ""), + }, + { + admit: true, + admits: []*net.IPNet{ipv4}, + externalIPs: []string{"1.2.3.4", "172.0.0.1"}, + op: admission.Update, + testName: "Ingress ip allowed when external ips are enabled", + loadBalancer: true, + ingressIP: "1.2.3.4", + userinfo: serviceaccount.UserInfo("test", "admin", ""), + }, + { + admit: false, + admits: []*net.IPNet{ipv4}, + externalIPs: []string{"1.2.3.4", "172.0.0.1"}, + op: admission.Update, + testName: "Ingress ip not allowed for non-lb service", + loadBalancer: false, + ingressIP: "1.2.3.4", + userinfo: serviceaccount.UserInfo("test", "ordinary-user", ""), + }, + } + for _, test := range tests { + svc.Spec.ExternalIPs = test.externalIPs + allowIngressIP := len(test.ingressIP) > 0 || test.loadBalancer + handler := NewExternalIPRanger(test.rejects, test.admits, allowIngressIP) + handler.SetAuthorizer(fakeAuthorizer(t)) + err := handler.ValidateInitialization() + if err != nil { + t.Errorf("%s: Got an error %s", test.testName, err) + continue + } + if test.loadBalancer { + svc.Spec.Type = kapi.ServiceTypeLoadBalancer + } else { + svc.Spec.Type = kapi.ServiceTypeClusterIP + } + + if len(test.ingressIP) > 0 { + // Provide an ingress ip via the previous object state + oldSvc = &kapi.Service{ + ObjectMeta: metav1.ObjectMeta{Name: "test"}, + Status: kapi.ServiceStatus{ + LoadBalancer: kapi.LoadBalancerStatus{ + Ingress: []kapi.LoadBalancerIngress{ + { + IP: test.ingressIP, + }, + }, + }, + }, + } + + } else { + oldSvc = nil + } + + err = handler.Validate(context.TODO(), admission.NewAttributesRecord(svc, oldSvc, kapi.Kind("Service").WithVersion("version"), "namespace", svc.ObjectMeta.Name, kapi.Resource("services").WithVersion("version"), "", test.op, nil, false, test.userinfo), nil) + + if test.admit && err != nil { + t.Errorf("%s: expected no error but got: %s", test.testName, err) + } else if !test.admit && err == nil { + t.Errorf("%s: expected an error", test.testName) + } + if test.errFn != nil && !test.errFn(err) { + t.Errorf("%s: unexpected error: %v", test.testName, err) + } + } +} + +func TestHandles(t *testing.T) { + for op, shouldHandle := range map[admission.Operation]bool{ + admission.Create: true, + admission.Update: true, + admission.Connect: false, + admission.Delete: false, + } { + ranger := NewExternalIPRanger(nil, nil, false) + if e, a := shouldHandle, ranger.Handles(op); e != a { + t.Errorf("%v: shouldHandle=%t, handles=%t", op, e, a) + } + } +} diff --git a/openshift-kube-apiserver/admission/network/restrictedendpoints/endpoint_admission.go b/openshift-kube-apiserver/admission/network/restrictedendpoints/endpoint_admission.go new file mode 100644 index 0000000000000..09566962e713b --- /dev/null +++ b/openshift-kube-apiserver/admission/network/restrictedendpoints/endpoint_admission.go @@ -0,0 +1,191 @@ +package restrictedendpoints + +import ( + "context" + "fmt" + "io" + "net" + "reflect" + + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/apiserver/pkg/authorization/authorizer" + "k8s.io/klog/v2" + kapi "k8s.io/kubernetes/pkg/apis/core" + + "github.com/openshift/library-go/pkg/config/helpers" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints" + v1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1" +) + +const RestrictedEndpointsPluginName = "network.openshift.io/RestrictedEndpointsAdmission" + +func RegisterRestrictedEndpoints(plugins *admission.Plugins) { + plugins.Register(RestrictedEndpointsPluginName, + func(config io.Reader) (admission.Interface, error) { + pluginConfig, err := readConfig(config) + if err != nil { + return nil, err + } + if pluginConfig == nil { + klog.Infof("Admission plugin %q is not configured so it will be disabled.", RestrictedEndpointsPluginName) + return nil, nil + } + restrictedNetworks, err := ParseSimpleCIDRRules(pluginConfig.RestrictedCIDRs) + if err != nil { + // should have been caught with validation + return nil, err + } + + return NewRestrictedEndpointsAdmission(restrictedNetworks), nil + }) +} + +func readConfig(reader io.Reader) (*restrictedendpoints.RestrictedEndpointsAdmissionConfig, error) { + obj, err := helpers.ReadYAMLToInternal(reader, restrictedendpoints.Install, v1.Install) + if err != nil { + return nil, err + } + if obj == nil { + return nil, nil + } + config, ok := obj.(*restrictedendpoints.RestrictedEndpointsAdmissionConfig) + if !ok { + return nil, fmt.Errorf("unexpected config object: %#v", obj) + } + // No validation needed since config is just list of strings + return config, nil +} + +type restrictedEndpointsAdmission struct { + *admission.Handler + + authorizer authorizer.Authorizer + restrictedNetworks []*net.IPNet +} + +var _ = initializer.WantsAuthorizer(&restrictedEndpointsAdmission{}) +var _ = admission.ValidationInterface(&restrictedEndpointsAdmission{}) + +// ParseSimpleCIDRRules parses a list of CIDR strings +func ParseSimpleCIDRRules(rules []string) (networks []*net.IPNet, err error) { + for _, s := range rules { + _, cidr, err := net.ParseCIDR(s) + if err != nil { + return nil, err + } + networks = append(networks, cidr) + } + return networks, nil +} + +// NewRestrictedEndpointsAdmission creates a new endpoints admission plugin. +func NewRestrictedEndpointsAdmission(restrictedNetworks []*net.IPNet) *restrictedEndpointsAdmission { + return &restrictedEndpointsAdmission{ + Handler: admission.NewHandler(admission.Create, admission.Update), + restrictedNetworks: restrictedNetworks, + } +} + +func (r *restrictedEndpointsAdmission) SetAuthorizer(a authorizer.Authorizer) { + r.authorizer = a +} + +func (r *restrictedEndpointsAdmission) ValidateInitialization() error { + if r.authorizer == nil { + return fmt.Errorf("missing authorizer") + } + return nil +} + +var ( + defaultRestrictedPorts = []kapi.EndpointPort{ + // MCS ports + {Protocol: kapi.ProtocolTCP, Port: 22623}, + {Protocol: kapi.ProtocolTCP, Port: 22624}, + } + defaultRestrictedNetworks = []*net.IPNet{ + // IPv4 link-local range 169.254.0.0/16 (including cloud metadata IP) + {IP: net.ParseIP("169.254.0.0"), Mask: net.CIDRMask(16, 32)}, + } +) + +func (r *restrictedEndpointsAdmission) findRestrictedIP(ep *kapi.Endpoints, restricted []*net.IPNet) error { + for _, subset := range ep.Subsets { + for _, addr := range subset.Addresses { + ip := net.ParseIP(addr.IP) + if ip == nil { + continue + } + for _, net := range restricted { + if net.Contains(ip) { + return fmt.Errorf("endpoint address %s is not allowed", addr.IP) + } + } + } + } + return nil +} + +func (r *restrictedEndpointsAdmission) findRestrictedPort(ep *kapi.Endpoints, restricted []kapi.EndpointPort) error { + for _, subset := range ep.Subsets { + for _, port := range subset.Ports { + for _, restricted := range restricted { + if port.Protocol == restricted.Protocol && port.Port == restricted.Port { + return fmt.Errorf("endpoint port %s:%d is not allowed", string(port.Protocol), port.Port) + } + } + } + } + return nil +} + +func (r *restrictedEndpointsAdmission) checkAccess(ctx context.Context, attr admission.Attributes) (bool, error) { + authzAttr := authorizer.AttributesRecord{ + User: attr.GetUserInfo(), + Verb: "create", + Namespace: attr.GetNamespace(), + Resource: "endpoints", + Subresource: "restricted", + APIGroup: kapi.GroupName, + Name: attr.GetName(), + ResourceRequest: true, + } + authorized, _, err := r.authorizer.Authorize(ctx, authzAttr) + return authorized == authorizer.DecisionAllow, err +} + +// Admit determines if the endpoints object should be admitted +func (r *restrictedEndpointsAdmission) Validate(ctx context.Context, a admission.Attributes, _ admission.ObjectInterfaces) error { + if a.GetResource().GroupResource() != kapi.Resource("endpoints") { + return nil + } + ep, ok := a.GetObject().(*kapi.Endpoints) + if !ok { + return nil + } + old, ok := a.GetOldObject().(*kapi.Endpoints) + if ok && reflect.DeepEqual(ep.Subsets, old.Subsets) { + return nil + } + + restrictedErr := r.findRestrictedIP(ep, r.restrictedNetworks) + if restrictedErr == nil { + restrictedErr = r.findRestrictedIP(ep, defaultRestrictedNetworks) + } + if restrictedErr == nil { + restrictedErr = r.findRestrictedPort(ep, defaultRestrictedPorts) + } + if restrictedErr == nil { + return nil + } + + allow, err := r.checkAccess(ctx, a) + if err != nil { + return err + } + if !allow { + return admission.NewForbidden(a, restrictedErr) + } + return nil +} diff --git a/openshift-kube-apiserver/admission/route/apis/ingressadmission/doc.go b/openshift-kube-apiserver/admission/route/apis/ingressadmission/doc.go new file mode 100644 index 0000000000000..04727861a1ea1 --- /dev/null +++ b/openshift-kube-apiserver/admission/route/apis/ingressadmission/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package ingressadmission diff --git a/openshift-kube-apiserver/admission/route/apis/ingressadmission/register.go b/openshift-kube-apiserver/admission/route/apis/ingressadmission/register.go new file mode 100644 index 0000000000000..e0e84492781a6 --- /dev/null +++ b/openshift-kube-apiserver/admission/route/apis/ingressadmission/register.go @@ -0,0 +1,33 @@ +package ingressadmission + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// SchemeGroupVersion is group version used to register these objects +var GroupVersion = schema.GroupVersion{Group: "route.openshift.io", Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns back a Group qualified GroupKind +func Kind(kind string) schema.GroupKind { + return GroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns back a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return GroupVersion.WithResource(resource).GroupResource() +} + +var ( + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + Install = schemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &IngressAdmissionConfig{}, + ) + return nil +} + +func (obj *IngressAdmissionConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } diff --git a/openshift-kube-apiserver/admission/route/apis/ingressadmission/types.go b/openshift-kube-apiserver/admission/route/apis/ingressadmission/types.go new file mode 100644 index 0000000000000..bc1356398663c --- /dev/null +++ b/openshift-kube-apiserver/admission/route/apis/ingressadmission/types.go @@ -0,0 +1,22 @@ +package ingressadmission + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// IngressAdmissionConfig is the configuration for the the ingress +// controller limiter plugin. It changes the behavior of ingress +// objects to behave better with openshift routes and routers. +// *NOTE* This has security implications in the router when handling +// ingress objects +type IngressAdmissionConfig struct { + metav1.TypeMeta + + // AllowHostnameChanges when false or unset openshift does not + // allow changing or adding hostnames to ingress objects. If set + // to true then hostnames can be added or modified which has + // security implications in the router. + AllowHostnameChanges bool +} diff --git a/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/defaults_test.go b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/defaults_test.go new file mode 100644 index 0000000000000..e105c48094abc --- /dev/null +++ b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/defaults_test.go @@ -0,0 +1,59 @@ +package v1 + +import ( + "reflect" + "testing" + + "k8s.io/apimachinery/pkg/api/apitesting" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/diff" +) + +func roundTrip(t *testing.T, obj runtime.Object) runtime.Object { + scheme, codecs := apitesting.SchemeForOrDie(Install) + data, err := runtime.Encode(codecs.LegacyCodec(GroupVersion), obj) + if err != nil { + t.Errorf("%v\n %#v", err, obj) + return nil + } + obj2, err := runtime.Decode(codecs.UniversalDecoder(), data) + if err != nil { + t.Errorf("%v\nData: %s\nSource: %#v", err, string(data), obj) + return nil + } + obj3 := reflect.New(reflect.TypeOf(obj).Elem()).Interface().(runtime.Object) + err = scheme.Convert(obj2, obj3, nil) + if err != nil { + t.Errorf("%v\nSourceL %#v", err, obj2) + return nil + } + return obj3 +} + +func TestDefaults(t *testing.T) { + tests := []struct { + original *IngressAdmissionConfig + expected *IngressAdmissionConfig + }{ + { + original: &IngressAdmissionConfig{}, + expected: &IngressAdmissionConfig{ + AllowHostnameChanges: false, + }, + }, + } + for i, test := range tests { + t.Logf("test %d", i) + original := test.original + expected := test.expected + obj2 := roundTrip(t, runtime.Object(original)) + got, ok := obj2.(*IngressAdmissionConfig) + if !ok { + t.Errorf("unexpected object: %v", got) + t.FailNow() + } + if !reflect.DeepEqual(got, expected) { + t.Errorf("got different than expected:\nA:\t%#v\nB:\t%#v\n\nDiff:\n%s\n\n%s", got, expected, diff.ObjectDiff(expected, got), diff.ObjectGoPrintSideBySide(expected, got)) + } + } +} diff --git a/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/doc.go b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/doc.go new file mode 100644 index 0000000000000..65269e693b22a --- /dev/null +++ b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/doc.go @@ -0,0 +1,5 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission + +// Package v1 is the v1 version of the API. +package v1 diff --git a/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/register.go b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/register.go new file mode 100644 index 0000000000000..aecb8a6eec279 --- /dev/null +++ b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/register.go @@ -0,0 +1,27 @@ +package v1 + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + + "k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission" +) + +func (obj *IngressAdmissionConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } + +var GroupVersion = schema.GroupVersion{Group: "route.openshift.io", Version: "v1"} + +var ( + localSchemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + ingressadmission.Install, + ) + Install = localSchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &IngressAdmissionConfig{}, + ) + return nil +} diff --git a/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/swagger_doc.go b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/swagger_doc.go new file mode 100644 index 0000000000000..27266bc8b3f6d --- /dev/null +++ b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/swagger_doc.go @@ -0,0 +1,15 @@ +package v1 + +// This file contains methods that can be used by the go-restful package to generate Swagger +// documentation for the object types found in 'types.go' This file is automatically generated +// by hack/update-generated-swagger-descriptions.sh and should be run after a full build of OpenShift. +// ==== DO NOT EDIT THIS FILE MANUALLY ==== + +var map_IngressAdmissionConfig = map[string]string{ + "": "IngressAdmissionConfig is the configuration for the the ingress controller limiter plugin. It changes the behavior of ingress objects to behave better with openshift routes and routers. *NOTE* This has security implications in the router when handling ingress objects", + "allowHostnameChanges": "AllowHostnameChanges when false or unset openshift does not allow changing or adding hostnames to ingress objects. If set to true then hostnames can be added or modified which has security implications in the router.", +} + +func (IngressAdmissionConfig) SwaggerDoc() map[string]string { + return map_IngressAdmissionConfig +} diff --git a/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/types.go b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/types.go new file mode 100644 index 0000000000000..a770d0539f449 --- /dev/null +++ b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/types.go @@ -0,0 +1,22 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// IngressAdmissionConfig is the configuration for the the ingress +// controller limiter plugin. It changes the behavior of ingress +// objects to behave better with openshift routes and routers. +// *NOTE* This has security implications in the router when handling +// ingress objects +type IngressAdmissionConfig struct { + metav1.TypeMeta `json:",inline"` + + // AllowHostnameChanges when false or unset openshift does not + // allow changing or adding hostnames to ingress objects. If set + // to true then hostnames can be added or modified which has + // security implications in the router. + AllowHostnameChanges bool `json:"allowHostnameChanges"` +} diff --git a/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..ba0f8a528c380 --- /dev/null +++ b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.deepcopy.go @@ -0,0 +1,34 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressAdmissionConfig) DeepCopyInto(out *IngressAdmissionConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressAdmissionConfig. +func (in *IngressAdmissionConfig) DeepCopy() *IngressAdmissionConfig { + if in == nil { + return nil + } + out := new(IngressAdmissionConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *IngressAdmissionConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/openshift-kube-apiserver/admission/route/apis/ingressadmission/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/route/apis/ingressadmission/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..e75a7b7a07f22 --- /dev/null +++ b/openshift-kube-apiserver/admission/route/apis/ingressadmission/zz_generated.deepcopy.go @@ -0,0 +1,34 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package ingressadmission + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressAdmissionConfig) DeepCopyInto(out *IngressAdmissionConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressAdmissionConfig. +func (in *IngressAdmissionConfig) DeepCopy() *IngressAdmissionConfig { + if in == nil { + return nil + } + out := new(IngressAdmissionConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *IngressAdmissionConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/openshift-kube-apiserver/admission/route/ingress_admission.go b/openshift-kube-apiserver/admission/route/ingress_admission.go new file mode 100644 index 0000000000000..f59104fe51a08 --- /dev/null +++ b/openshift-kube-apiserver/admission/route/ingress_admission.go @@ -0,0 +1,162 @@ +// This plugin supplements upstream Ingress admission validation +// It takes care of current Openshift specific constraints on Ingress resources +package admission + +import ( + "context" + "fmt" + "io" + + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/apiserver/pkg/authorization/authorizer" + kextensions "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/apis/networking" + + "github.com/openshift/library-go/pkg/config/helpers" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission" + v1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1" +) + +const ( + IngressAdmission = "route.openshift.io/IngressAdmission" +) + +func Register(plugins *admission.Plugins) { + plugins.Register(IngressAdmission, + func(config io.Reader) (admission.Interface, error) { + pluginConfig, err := readConfig(config) + if err != nil { + return nil, err + } + return NewIngressAdmission(pluginConfig), nil + }) +} + +type ingressAdmission struct { + *admission.Handler + config *ingressadmission.IngressAdmissionConfig + authorizer authorizer.Authorizer +} + +var _ = initializer.WantsAuthorizer(&ingressAdmission{}) +var _ = admission.ValidationInterface(&ingressAdmission{}) + +func NewIngressAdmission(config *ingressadmission.IngressAdmissionConfig) *ingressAdmission { + return &ingressAdmission{ + Handler: admission.NewHandler(admission.Create, admission.Update), + config: config, + } +} + +func readConfig(reader io.Reader) (*ingressadmission.IngressAdmissionConfig, error) { + obj, err := helpers.ReadYAMLToInternal(reader, ingressadmission.Install, v1.Install) + if err != nil { + return nil, err + } + if obj == nil { + return nil, nil + } + config, ok := obj.(*ingressadmission.IngressAdmissionConfig) + if !ok { + return nil, fmt.Errorf("unexpected config object: %#v", obj) + } + // No validation needed since config is just list of strings + return config, nil +} + +func (r *ingressAdmission) SetAuthorizer(a authorizer.Authorizer) { + r.authorizer = a +} + +func (r *ingressAdmission) ValidateInitialization() error { + if r.authorizer == nil { + return fmt.Errorf("%s needs an Openshift Authorizer", IngressAdmission) + } + return nil +} + +func (r *ingressAdmission) Validate(ctx context.Context, a admission.Attributes, _ admission.ObjectInterfaces) error { + if a.GetResource().GroupResource() == kextensions.Resource("ingresses") { + switch a.GetOperation() { + case admission.Create: + if ingress, ok := a.GetObject().(*networking.Ingress); ok { + // if any rules have a host, check whether the user has permission to set them + for i, rule := range ingress.Spec.Rules { + if len(rule.Host) > 0 { + attr := authorizer.AttributesRecord{ + User: a.GetUserInfo(), + Verb: "create", + Namespace: a.GetNamespace(), + Resource: "routes", + Subresource: "custom-host", + APIGroup: "route.openshift.io", + ResourceRequest: true, + } + kind := schema.GroupKind{Group: a.GetResource().Group, Kind: a.GetResource().Resource} + authorized, _, err := r.authorizer.Authorize(ctx, attr) + if err != nil { + return errors.NewInvalid(kind, ingress.Name, field.ErrorList{field.InternalError(field.NewPath("spec", "rules").Index(i), err)}) + } + if authorized != authorizer.DecisionAllow { + return errors.NewInvalid(kind, ingress.Name, field.ErrorList{field.Forbidden(field.NewPath("spec", "rules").Index(i), "you do not have permission to set host fields in ingress rules")}) + } + break + } + } + } + case admission.Update: + if r.config == nil || r.config.AllowHostnameChanges == false { + oldIngress, ok := a.GetOldObject().(*networking.Ingress) + if !ok { + return nil + } + newIngress, ok := a.GetObject().(*networking.Ingress) + if !ok { + return nil + } + if !haveHostnamesChanged(oldIngress, newIngress) { + attr := authorizer.AttributesRecord{ + User: a.GetUserInfo(), + Verb: "update", + Namespace: a.GetNamespace(), + Name: a.GetName(), + Resource: "routes", + Subresource: "custom-host", + APIGroup: "route.openshift.io", + ResourceRequest: true, + } + kind := schema.GroupKind{Group: a.GetResource().Group, Kind: a.GetResource().Resource} + authorized, _, err := r.authorizer.Authorize(ctx, attr) + if err != nil { + return errors.NewInvalid(kind, newIngress.Name, field.ErrorList{field.InternalError(field.NewPath("spec", "rules"), err)}) + } + if authorized == authorizer.DecisionAllow { + return nil + } + return fmt.Errorf("cannot change hostname") + } + } + } + } + return nil +} + +func haveHostnamesChanged(oldIngress, newIngress *networking.Ingress) bool { + hostnameSet := sets.NewString() + for _, element := range oldIngress.Spec.Rules { + hostnameSet.Insert(element.Host) + } + + for _, element := range newIngress.Spec.Rules { + if present := hostnameSet.Has(element.Host); !present { + return false + } + } + + return true +} diff --git a/openshift-kube-apiserver/admission/route/ingress_admission_test.go b/openshift-kube-apiserver/admission/route/ingress_admission_test.go new file mode 100644 index 0000000000000..b1013b8346a30 --- /dev/null +++ b/openshift-kube-apiserver/admission/route/ingress_admission_test.go @@ -0,0 +1,171 @@ +package admission + +import ( + "context" + "testing" + + "k8s.io/kubernetes/pkg/apis/networking" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/authorization/authorizer" + kextensions "k8s.io/kubernetes/pkg/apis/extensions" + + "k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission" +) + +type fakeAuthorizer struct { + allow authorizer.Decision + err error +} + +func (a *fakeAuthorizer) Authorize(context.Context, authorizer.Attributes) (authorizer.Decision, string, error) { + return a.allow, "", a.err +} + +func TestAdmission(t *testing.T) { + var newIngress *networking.Ingress + var oldIngress *networking.Ingress + + tests := []struct { + config *ingressadmission.IngressAdmissionConfig + testName string + oldHost, newHost string + op admission.Operation + admit bool + allow authorizer.Decision + }{ + { + admit: true, + config: emptyConfig(), + op: admission.Create, + testName: "No errors on create", + }, + { + admit: true, + config: emptyConfig(), + op: admission.Update, + newHost: "foo.com", + oldHost: "foo.com", + testName: "keeping the host the same should pass", + }, + { + admit: true, + config: emptyConfig(), + op: admission.Update, + oldHost: "foo.com", + testName: "deleting a hostname should pass", + }, + { + admit: false, + config: emptyConfig(), + op: admission.Update, + newHost: "foo.com", + oldHost: "bar.com", + testName: "changing hostname should fail", + }, + { + admit: true, + allow: authorizer.DecisionAllow, + config: emptyConfig(), + op: admission.Update, + newHost: "foo.com", + oldHost: "bar.com", + testName: "changing hostname should succeed if the user has permission", + }, + { + admit: false, + config: nil, + op: admission.Update, + newHost: "foo.com", + oldHost: "bar.com", + testName: "unconfigured plugin should still fail", + }, + { + admit: true, + config: testConfigUpdateAllow(), + op: admission.Update, + newHost: "foo.com", + oldHost: "bar.com", + testName: "Upstream Hostname updates enabled", + }, + { + admit: true, + config: testConfigUpdateAllow(), + op: admission.Update, + newHost: "foo.com", + testName: "add new hostname with upstream rules", + }, + { + admit: false, + allow: authorizer.DecisionNoOpinion, + config: emptyConfig(), + op: admission.Create, + newHost: "foo.com", + testName: "setting the host should require permission", + }, + { + admit: true, + allow: authorizer.DecisionAllow, + config: emptyConfig(), + op: admission.Create, + newHost: "foo.com", + testName: "setting the host should pass if user has permission", + }, + } + for _, test := range tests { + if len(test.newHost) > 0 { + newIngress = &networking.Ingress{ + ObjectMeta: metav1.ObjectMeta{Name: "test"}, + Spec: networking.IngressSpec{ + Rules: []networking.IngressRule{ + { + Host: test.newHost, + }, + }, + }, + } + } else { + //Used to test deleting a hostname + newIngress = &networking.Ingress{ + ObjectMeta: metav1.ObjectMeta{Name: "test"}, + } + } + handler := NewIngressAdmission(test.config) + handler.SetAuthorizer(&fakeAuthorizer{allow: test.allow}) + + if len(test.oldHost) > 0 { + //Provides the previous state of an ingress object + oldIngress = &networking.Ingress{ + ObjectMeta: metav1.ObjectMeta{Name: "test"}, + Spec: networking.IngressSpec{ + Rules: []networking.IngressRule{ + { + Host: test.oldHost, + }, + }, + }, + } + } else { + oldIngress = nil + } + + err := handler.Validate(context.TODO(), admission.NewAttributesRecord(newIngress, oldIngress, kextensions.Kind("ingresses").WithVersion("Version"), "namespace", newIngress.ObjectMeta.Name, kextensions.Resource("ingresses").WithVersion("version"), "", test.op, nil, false, nil), nil) + if test.admit && err != nil { + t.Errorf("%s: expected no error but got: %s", test.testName, err) + } else if !test.admit && err == nil { + t.Errorf("%s: expected an error", test.testName) + } + } + +} + +func emptyConfig() *ingressadmission.IngressAdmissionConfig { + return &ingressadmission.IngressAdmissionConfig{} +} + +func testConfigUpdateAllow() *ingressadmission.IngressAdmissionConfig { + return &ingressadmission.IngressAdmissionConfig{ + AllowHostnameChanges: true, + } +} diff --git a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/doc.go b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/doc.go new file mode 100644 index 0000000000000..ae163f472d40a --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package podnodeconstraints diff --git a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/register.go b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/register.go new file mode 100644 index 0000000000000..5b8add00bb815 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/register.go @@ -0,0 +1,33 @@ +package podnodeconstraints + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// SchemeGroupVersion is group version used to register these objects +var GroupVersion = schema.GroupVersion{Group: "scheduling.openshift.io", Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns back a Group qualified GroupKind +func Kind(kind string) schema.GroupKind { + return GroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns back a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return GroupVersion.WithResource(resource).GroupResource() +} + +var ( + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + Install = schemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &PodNodeConstraintsConfig{}, + ) + return nil +} + +func (obj *PodNodeConstraintsConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } diff --git a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/types.go b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/types.go new file mode 100644 index 0000000000000..27cebad199ed0 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/types.go @@ -0,0 +1,19 @@ +package podnodeconstraints + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PodNodeConstraintsConfig is the configuration for the pod node name +// and node selector constraint plug-in. For accounts, serviceaccounts, +// and groups which lack the "pods/binding" permission, Loading this +// plugin will prevent setting NodeName on pod specs and will prevent +// setting NodeSelectors whose labels appear in the blacklist field +// "NodeSelectorLabelBlacklist" +type PodNodeConstraintsConfig struct { + metav1.TypeMeta + // NodeSelectorLabelBlacklist specifies a list of labels which cannot be set by entities without the "pods/binding" permission + NodeSelectorLabelBlacklist []string +} diff --git a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/defaults.go b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/defaults.go new file mode 100644 index 0000000000000..54d718cfc91af --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/defaults.go @@ -0,0 +1,19 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +func SetDefaults_PodNodeConstraintsConfig(obj *PodNodeConstraintsConfig) { + if obj.NodeSelectorLabelBlacklist == nil { + obj.NodeSelectorLabelBlacklist = []string{ + corev1.LabelHostname, + } + } +} + +func addDefaultingFuncs(scheme *runtime.Scheme) error { + scheme.AddTypeDefaultingFunc(&PodNodeConstraintsConfig{}, func(obj interface{}) { SetDefaults_PodNodeConstraintsConfig(obj.(*PodNodeConstraintsConfig)) }) + return nil +} diff --git a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/defaults_test.go b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/defaults_test.go new file mode 100644 index 0000000000000..513084ad95122 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/defaults_test.go @@ -0,0 +1,59 @@ +package v1 + +import ( + "reflect" + "testing" + + "k8s.io/apimachinery/pkg/api/apitesting" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/diff" +) + +func roundTrip(t *testing.T, obj runtime.Object) runtime.Object { + scheme, codecs := apitesting.SchemeForOrDie(Install) + data, err := runtime.Encode(codecs.LegacyCodec(GroupVersion), obj) + if err != nil { + t.Errorf("%v\n %#v", err, obj) + return nil + } + obj2, err := runtime.Decode(codecs.UniversalDecoder(), data) + if err != nil { + t.Errorf("%v\nData: %s\nSource: %#v", err, string(data), obj) + return nil + } + obj3 := reflect.New(reflect.TypeOf(obj).Elem()).Interface().(runtime.Object) + err = scheme.Convert(obj2, obj3, nil) + if err != nil { + t.Errorf("%v\nSource: %#v", err, obj2) + return nil + } + return obj3 +} + +func TestDefaults(t *testing.T) { + tests := []struct { + original *PodNodeConstraintsConfig + expected *PodNodeConstraintsConfig + }{ + { + original: &PodNodeConstraintsConfig{}, + expected: &PodNodeConstraintsConfig{ + NodeSelectorLabelBlacklist: []string{"kubernetes.io/hostname"}, + }, + }, + } + for i, test := range tests { + t.Logf("test %d", i) + original := test.original + expected := test.expected + obj2 := roundTrip(t, runtime.Object(original)) + got, ok := obj2.(*PodNodeConstraintsConfig) + if !ok { + t.Errorf("unexpected object: %v", got) + t.FailNow() + } + if !reflect.DeepEqual(got, expected) { + t.Errorf("got different than expected:\nA:\t%#v\nB:\t%#v\n\nDiff:\n%s\n\n%s", got, expected, diff.ObjectDiff(expected, got), diff.ObjectGoPrintSideBySide(expected, got)) + } + } +} diff --git a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/doc.go b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/doc.go new file mode 100644 index 0000000000000..602ddf4d19a41 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/doc.go @@ -0,0 +1,5 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints + +// Package v1 is the v1 version of the API. +package v1 diff --git a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/register.go b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/register.go new file mode 100644 index 0000000000000..b836b750fdb3f --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/register.go @@ -0,0 +1,28 @@ +package v1 + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints" +) + +func (obj *PodNodeConstraintsConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } + +var GroupVersion = schema.GroupVersion{Group: "scheduling.openshift.io", Version: "v1"} + +var ( + localSchemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + podnodeconstraints.Install, + + addDefaultingFuncs, + ) + Install = localSchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &PodNodeConstraintsConfig{}, + ) + return nil +} diff --git a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/swagger_doc.go b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/swagger_doc.go new file mode 100644 index 0000000000000..95e3d2220841c --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/swagger_doc.go @@ -0,0 +1,15 @@ +package v1 + +// This file contains methods that can be used by the go-restful package to generate Swagger +// documentation for the object types found in 'types.go' This file is automatically generated +// by hack/update-generated-swagger-descriptions.sh and should be run after a full build of OpenShift. +// ==== DO NOT EDIT THIS FILE MANUALLY ==== + +var map_PodNodeConstraintsConfig = map[string]string{ + "": "PodNodeConstraintsConfig is the configuration for the pod node name and node selector constraint plug-in. For accounts, serviceaccounts and groups which lack the \"pods/binding\" permission, Loading this plugin will prevent setting NodeName on pod specs and will prevent setting NodeSelectors whose labels appear in the blacklist field \"NodeSelectorLabelBlacklist\"", + "nodeSelectorLabelBlacklist": "NodeSelectorLabelBlacklist specifies a list of labels which cannot be set by entities without the \"pods/binding\" permission", +} + +func (PodNodeConstraintsConfig) SwaggerDoc() map[string]string { + return map_PodNodeConstraintsConfig +} diff --git a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/types.go b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/types.go new file mode 100644 index 0000000000000..3ffd5acdb8952 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/types.go @@ -0,0 +1,20 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PodNodeConstraintsConfig is the configuration for the pod node name +// and node selector constraint plug-in. For accounts, serviceaccounts +// and groups which lack the "pods/binding" permission, Loading this +// plugin will prevent setting NodeName on pod specs and will prevent +// setting NodeSelectors whose labels appear in the blacklist field +// "NodeSelectorLabelBlacklist" +type PodNodeConstraintsConfig struct { + metav1.TypeMeta `json:",inline"` + + // NodeSelectorLabelBlacklist specifies a list of labels which cannot be set by entities without the "pods/binding" permission + NodeSelectorLabelBlacklist []string `json:"nodeSelectorLabelBlacklist" description:"list of labels which cannot be set by entities without the 'pods/binding' permission"` +} diff --git a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..5d7b49dc20032 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.deepcopy.go @@ -0,0 +1,39 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodNodeConstraintsConfig) DeepCopyInto(out *PodNodeConstraintsConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.NodeSelectorLabelBlacklist != nil { + in, out := &in.NodeSelectorLabelBlacklist, &out.NodeSelectorLabelBlacklist + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodNodeConstraintsConfig. +func (in *PodNodeConstraintsConfig) DeepCopy() *PodNodeConstraintsConfig { + if in == nil { + return nil + } + out := new(PodNodeConstraintsConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PodNodeConstraintsConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..46ccf9f25bd18 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/zz_generated.deepcopy.go @@ -0,0 +1,39 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package podnodeconstraints + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodNodeConstraintsConfig) DeepCopyInto(out *PodNodeConstraintsConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.NodeSelectorLabelBlacklist != nil { + in, out := &in.NodeSelectorLabelBlacklist, &out.NodeSelectorLabelBlacklist + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodNodeConstraintsConfig. +func (in *PodNodeConstraintsConfig) DeepCopy() *PodNodeConstraintsConfig { + if in == nil { + return nil + } + out := new(PodNodeConstraintsConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PodNodeConstraintsConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/openshift-kube-apiserver/admission/scheduler/nodeenv/admission.go b/openshift-kube-apiserver/admission/scheduler/nodeenv/admission.go new file mode 100644 index 0000000000000..991ba30174c35 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/nodeenv/admission.go @@ -0,0 +1,148 @@ +package nodeenv + +import ( + "context" + "errors" + "fmt" + "io" + "time" + + corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/client-go/informers" + corev1listers "k8s.io/client-go/listers/core/v1" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector" + coreapi "k8s.io/kubernetes/pkg/apis/core" + + projectv1 "github.com/openshift/api/project/v1" +) + +func Register(plugins *admission.Plugins) { + plugins.Register("scheduling.openshift.io/OriginPodNodeEnvironment", + func(config io.Reader) (admission.Interface, error) { + return NewPodNodeEnvironment() + }) +} + +const ( + timeToWaitForCacheSync = 10 * time.Second + kubeProjectNodeSelector = "scheduler.alpha.kubernetes.io/node-selector" +) + +// podNodeEnvironment is an implementation of admission.MutationInterface. +type podNodeEnvironment struct { + *admission.Handler + nsLister corev1listers.NamespaceLister + nsListerSynced func() bool + // TODO this should become a piece of config passed to the admission plugin + defaultNodeSelector string +} + +var _ = initializer.WantsExternalKubeInformerFactory(&podNodeEnvironment{}) +var _ = WantsDefaultNodeSelector(&podNodeEnvironment{}) +var _ = admission.ValidationInterface(&podNodeEnvironment{}) +var _ = admission.MutationInterface(&podNodeEnvironment{}) + +// Admit enforces that pod and its project node label selectors matches at least a node in the cluster. +func (p *podNodeEnvironment) admit(ctx context.Context, a admission.Attributes, mutationAllowed bool) (err error) { + resource := a.GetResource().GroupResource() + if resource != corev1.Resource("pods") { + return nil + } + if a.GetSubresource() != "" { + // only run the checks below on pods proper and not subresources + return nil + } + + obj := a.GetObject() + pod, ok := obj.(*coreapi.Pod) + if !ok { + return nil + } + + name := pod.Name + + if !p.waitForSyncedStore(time.After(timeToWaitForCacheSync)) { + return admission.NewForbidden(a, errors.New("scheduling.openshift.io/OriginPodNodeEnvironment: caches not synchronized")) + } + namespace, err := p.nsLister.Get(a.GetNamespace()) + if err != nil { + return apierrors.NewForbidden(resource, name, err) + } + + // If scheduler.alpha.kubernetes.io/node-selector is set on the pod, + // do not process the pod further. + if _, ok := namespace.ObjectMeta.Annotations[kubeProjectNodeSelector]; ok { + return nil + } + + selector := p.defaultNodeSelector + if projectNodeSelector, ok := namespace.ObjectMeta.Annotations[projectv1.ProjectNodeSelector]; ok { + selector = projectNodeSelector + } + projectNodeSelector, err := labelselector.Parse(selector) + if err != nil { + return err + } + + if labelselector.Conflicts(projectNodeSelector, pod.Spec.NodeSelector) { + return apierrors.NewForbidden(resource, name, fmt.Errorf("pod node label selector conflicts with its project node label selector")) + } + + if !mutationAllowed && len(labelselector.Merge(projectNodeSelector, pod.Spec.NodeSelector)) != len(pod.Spec.NodeSelector) { + // no conflict, different size => pod.Spec.NodeSelector does not contain projectNodeSelector + return apierrors.NewForbidden(resource, name, fmt.Errorf("pod node label selector does not extend project node label selector")) + } + + // modify pod node selector = project node selector + current pod node selector + pod.Spec.NodeSelector = labelselector.Merge(projectNodeSelector, pod.Spec.NodeSelector) + + return nil +} + +func (p *podNodeEnvironment) Admit(ctx context.Context, a admission.Attributes, _ admission.ObjectInterfaces) (err error) { + return p.admit(ctx, a, true) +} + +func (p *podNodeEnvironment) Validate(ctx context.Context, a admission.Attributes, _ admission.ObjectInterfaces) (err error) { + return p.admit(ctx, a, false) +} + +func (p *podNodeEnvironment) SetDefaultNodeSelector(in string) { + p.defaultNodeSelector = in +} + +func (p *podNodeEnvironment) SetExternalKubeInformerFactory(kubeInformers informers.SharedInformerFactory) { + p.nsLister = kubeInformers.Core().V1().Namespaces().Lister() + p.nsListerSynced = kubeInformers.Core().V1().Namespaces().Informer().HasSynced +} + +func (p *podNodeEnvironment) waitForSyncedStore(timeout <-chan time.Time) bool { + for !p.nsListerSynced() { + select { + case <-time.After(100 * time.Millisecond): + case <-timeout: + return p.nsListerSynced() + } + } + + return true +} + +func (p *podNodeEnvironment) ValidateInitialization() error { + if p.nsLister == nil { + return fmt.Errorf("project node environment plugin needs a namespace lister") + } + if p.nsListerSynced == nil { + return fmt.Errorf("project node environment plugin needs a namespace lister synced") + } + return nil +} + +func NewPodNodeEnvironment() (admission.Interface, error) { + return &podNodeEnvironment{ + Handler: admission.NewHandler(admission.Create), + }, nil +} diff --git a/openshift-kube-apiserver/admission/scheduler/nodeenv/admission_test.go b/openshift-kube-apiserver/admission/scheduler/nodeenv/admission_test.go new file mode 100644 index 0000000000000..6738a9b097dd9 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/nodeenv/admission_test.go @@ -0,0 +1,160 @@ +package nodeenv + +import ( + "context" + "strings" + "testing" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apiserver/pkg/admission" + corev1listers "k8s.io/client-go/listers/core/v1" + "k8s.io/client-go/tools/cache" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector" + kapi "k8s.io/kubernetes/pkg/apis/core" + + projectv1 "github.com/openshift/api/project/v1" +) + +// TestPodAdmission verifies various scenarios involving pod/project/global node label selectors +func TestPodAdmission(t *testing.T) { + namespace := &corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "testProject", + Namespace: "", + }, + } + + handler := &podNodeEnvironment{} + pod := &kapi.Pod{ + ObjectMeta: metav1.ObjectMeta{Name: "testPod"}, + } + + tests := []struct { + defaultNodeSelector string + projectNodeSelector string + podNodeSelector map[string]string + mergedNodeSelector map[string]string + ignoreProjectNodeSelector bool + admit bool + testName string + }{ + { + defaultNodeSelector: "", + podNodeSelector: map[string]string{}, + mergedNodeSelector: map[string]string{}, + ignoreProjectNodeSelector: true, + admit: true, + testName: "No node selectors", + }, + { + defaultNodeSelector: "infra = false", + podNodeSelector: map[string]string{}, + mergedNodeSelector: map[string]string{"infra": "false"}, + ignoreProjectNodeSelector: true, + admit: true, + testName: "Default node selector and no conflicts", + }, + { + defaultNodeSelector: "", + projectNodeSelector: "infra = false", + podNodeSelector: map[string]string{}, + mergedNodeSelector: map[string]string{"infra": "false"}, + admit: true, + testName: "Project node selector and no conflicts", + }, + { + defaultNodeSelector: "infra = false", + projectNodeSelector: "", + podNodeSelector: map[string]string{}, + mergedNodeSelector: map[string]string{}, + admit: true, + testName: "Empty project node selector and no conflicts", + }, + { + defaultNodeSelector: "infra = false", + projectNodeSelector: "infra=true", + podNodeSelector: map[string]string{}, + mergedNodeSelector: map[string]string{"infra": "true"}, + admit: true, + testName: "Default and project node selector, no conflicts", + }, + { + defaultNodeSelector: "infra = false", + projectNodeSelector: "infra=true", + podNodeSelector: map[string]string{"env": "test"}, + mergedNodeSelector: map[string]string{"infra": "true", "env": "test"}, + admit: true, + testName: "Project and pod node selector, no conflicts", + }, + { + defaultNodeSelector: "env = test", + projectNodeSelector: "infra=true", + podNodeSelector: map[string]string{"infra": "false"}, + mergedNodeSelector: map[string]string{"infra": "false"}, + admit: false, + testName: "Conflicting pod and project node selector, one label", + }, + { + defaultNodeSelector: "env=dev", + projectNodeSelector: "infra=false, env = test", + podNodeSelector: map[string]string{"env": "dev", "color": "blue"}, + mergedNodeSelector: map[string]string{"env": "dev", "color": "blue"}, + admit: false, + testName: "Conflicting pod and project node selector, multiple labels", + }, + } + for _, test := range tests { + indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{}) + indexer.Add(namespace) + handler.nsLister = corev1listers.NewNamespaceLister(indexer) + handler.nsListerSynced = func() bool { return true } + handler.defaultNodeSelector = test.defaultNodeSelector + + if !test.ignoreProjectNodeSelector { + namespace.ObjectMeta.Annotations = map[string]string{projectv1.ProjectNodeSelector: test.projectNodeSelector} + } + pod.Spec = kapi.PodSpec{NodeSelector: test.podNodeSelector} + + attrs := admission.NewAttributesRecord(pod, nil, kapi.Kind("Pod").WithVersion("version"), "testProject", namespace.ObjectMeta.Name, kapi.Resource("pods").WithVersion("version"), "", admission.Create, nil, false, nil) + err := handler.Admit(context.TODO(), attrs, nil) + if test.admit && err != nil { + t.Errorf("Test: %s, expected no error but got: %s", test.testName, err) + } else if !test.admit && err == nil { + t.Errorf("Test: %s, expected an error", test.testName) + } else if err == nil { + if err := handler.Validate(context.TODO(), attrs, nil); err != nil { + t.Errorf("Test: %s, unexpected Validate error after Admit succeeded: %v", test.testName, err) + } + } + + if !labelselector.Equals(test.mergedNodeSelector, pod.Spec.NodeSelector) { + t.Errorf("Test: %s, expected: %s but got: %s", test.testName, test.mergedNodeSelector, pod.Spec.NodeSelector) + } else if len(test.projectNodeSelector) > 0 { + firstProjectKey := strings.TrimSpace(strings.Split(test.projectNodeSelector, "=")[0]) + delete(pod.Spec.NodeSelector, firstProjectKey) + if err := handler.Validate(context.TODO(), attrs, nil); err == nil { + t.Errorf("Test: %s, expected Validate error after removing project key %q", test.testName, firstProjectKey) + } + } + } +} + +func TestHandles(t *testing.T) { + for op, shouldHandle := range map[admission.Operation]bool{ + admission.Create: true, + admission.Update: false, + admission.Connect: false, + admission.Delete: false, + } { + nodeEnvionment, err := NewPodNodeEnvironment() + if err != nil { + t.Errorf("%v: error getting node environment: %v", op, err) + continue + } + + if e, a := shouldHandle, nodeEnvionment.Handles(op); e != a { + t.Errorf("%v: shouldHandle=%t, handles=%t", op, e, a) + } + } +} diff --git a/openshift-kube-apiserver/admission/scheduler/nodeenv/intializers.go b/openshift-kube-apiserver/admission/scheduler/nodeenv/intializers.go new file mode 100644 index 0000000000000..534905cb06120 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/nodeenv/intializers.go @@ -0,0 +1,28 @@ +package nodeenv + +import ( + "k8s.io/apiserver/pkg/admission" +) + +func NewInitializer(defaultNodeSelector string) admission.PluginInitializer { + return &localInitializer{ + defaultNodeSelector: defaultNodeSelector, + } +} + +type WantsDefaultNodeSelector interface { + SetDefaultNodeSelector(string) + admission.InitializationValidator +} + +type localInitializer struct { + defaultNodeSelector string +} + +// Initialize will check the initialization interfaces implemented by each plugin +// and provide the appropriate initialization data +func (i *localInitializer) Initialize(plugin admission.Interface) { + if wants, ok := plugin.(WantsDefaultNodeSelector); ok { + wants.SetDefaultNodeSelector(i.defaultNodeSelector) + } +} diff --git a/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector/labelselector.go b/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector/labelselector.go new file mode 100644 index 0000000000000..046d253396c98 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector/labelselector.go @@ -0,0 +1,359 @@ +// labelselector is trim down version of k8s/pkg/labels/selector.go +// It only accepts exact label matches +// Example: "k1=v1, k2 = v2" +package labelselector + +import ( + "fmt" + + kvalidation "k8s.io/apimachinery/pkg/util/validation" + "k8s.io/apimachinery/pkg/util/validation/field" +) + +// constants definition for lexer token +type Token int + +const ( + ErrorToken Token = iota + EndOfStringToken + CommaToken + EqualsToken + IdentifierToken // to represent keys and values +) + +// string2token contains the mapping between lexer Token and token literal +// (except IdentifierToken, EndOfStringToken and ErrorToken since it makes no sense) +var string2token = map[string]Token{ + ",": CommaToken, + "=": EqualsToken, +} + +// ScannedItem are the item produced by the lexer. It contains the Token and the literal. +type ScannedItem struct { + tok Token + literal string +} + +// isWhitespace returns true if the rune is a space, tab, or newline. +func isWhitespace(ch byte) bool { + return ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' +} + +// isSpecialSymbol detect if the character ch can be an operator +func isSpecialSymbol(ch byte) bool { + switch ch { + case '=', ',': + return true + } + return false +} + +// Lexer represents the Lexer struct for label selector. +// It contains necessary informationt to tokenize the input string +type Lexer struct { + // s stores the string to be tokenized + s string + // pos is the position currently tokenized + pos int +} + +// read return the character currently lexed +// increment the position and check the buffer overflow +func (l *Lexer) read() (b byte) { + b = 0 + if l.pos < len(l.s) { + b = l.s[l.pos] + l.pos++ + } + return b +} + +// unread 'undoes' the last read character +func (l *Lexer) unread() { + l.pos-- +} + +// scanIdOrKeyword scans string to recognize literal token or an identifier. +func (l *Lexer) scanIdOrKeyword() (tok Token, lit string) { + var buffer []byte +IdentifierLoop: + for { + switch ch := l.read(); { + case ch == 0: + break IdentifierLoop + case isSpecialSymbol(ch) || isWhitespace(ch): + l.unread() + break IdentifierLoop + default: + buffer = append(buffer, ch) + } + } + s := string(buffer) + if val, ok := string2token[s]; ok { // is a literal token + return val, s + } + return IdentifierToken, s // otherwise is an identifier +} + +// scanSpecialSymbol scans string starting with special symbol. +// special symbol identify non literal operators: "=" +func (l *Lexer) scanSpecialSymbol() (Token, string) { + lastScannedItem := ScannedItem{} + var buffer []byte +SpecialSymbolLoop: + for { + switch ch := l.read(); { + case ch == 0: + break SpecialSymbolLoop + case isSpecialSymbol(ch): + buffer = append(buffer, ch) + if token, ok := string2token[string(buffer)]; ok { + lastScannedItem = ScannedItem{tok: token, literal: string(buffer)} + } else if lastScannedItem.tok != 0 { + l.unread() + break SpecialSymbolLoop + } + default: + l.unread() + break SpecialSymbolLoop + } + } + if lastScannedItem.tok == 0 { + return ErrorToken, fmt.Sprintf("error expected: keyword found '%s'", buffer) + } + return lastScannedItem.tok, lastScannedItem.literal +} + +// skipWhiteSpaces consumes all blank characters +// returning the first non blank character +func (l *Lexer) skipWhiteSpaces(ch byte) byte { + for { + if !isWhitespace(ch) { + return ch + } + ch = l.read() + } +} + +// Lex returns a pair of Token and the literal +// literal is meaningfull only for IdentifierToken token +func (l *Lexer) Lex() (tok Token, lit string) { + switch ch := l.skipWhiteSpaces(l.read()); { + case ch == 0: + return EndOfStringToken, "" + case isSpecialSymbol(ch): + l.unread() + return l.scanSpecialSymbol() + default: + l.unread() + return l.scanIdOrKeyword() + } +} + +// Parser data structure contains the label selector parser data structure +type Parser struct { + l *Lexer + scannedItems []ScannedItem + position int +} + +// lookahead func returns the current token and string. No increment of current position +func (p *Parser) lookahead() (Token, string) { + tok, lit := p.scannedItems[p.position].tok, p.scannedItems[p.position].literal + return tok, lit +} + +// consume returns current token and string. Increments the the position +func (p *Parser) consume() (Token, string) { + p.position++ + if p.position > len(p.scannedItems) { + return EndOfStringToken, "" + } + tok, lit := p.scannedItems[p.position-1].tok, p.scannedItems[p.position-1].literal + return tok, lit +} + +// scan runs through the input string and stores the ScannedItem in an array +// Parser can now lookahead and consume the tokens +func (p *Parser) scan() { + for { + token, literal := p.l.Lex() + p.scannedItems = append(p.scannedItems, ScannedItem{token, literal}) + if token == EndOfStringToken { + break + } + } +} + +// parse runs the left recursive descending algorithm +// on input string. It returns a list of map[key]value. +func (p *Parser) parse() (map[string]string, error) { + p.scan() // init scannedItems + + labelsMap := map[string]string{} + for { + tok, lit := p.lookahead() + switch tok { + case IdentifierToken: + key, value, err := p.parseLabel() + if err != nil { + return nil, fmt.Errorf("unable to parse requirement: %v", err) + } + labelsMap[key] = value + t, l := p.consume() + switch t { + case EndOfStringToken: + return labelsMap, nil + case CommaToken: + t2, l2 := p.lookahead() + if t2 != IdentifierToken { + return nil, fmt.Errorf("found '%s', expected: identifier after ','", l2) + } + default: + return nil, fmt.Errorf("found '%s', expected: ',' or 'end of string'", l) + } + case EndOfStringToken: + return labelsMap, nil + default: + return nil, fmt.Errorf("found '%s', expected: identifier or 'end of string'", lit) + } + } +} + +func (p *Parser) parseLabel() (string, string, error) { + key, err := p.parseKey() + if err != nil { + return "", "", err + } + op, err := p.parseOperator() + if err != nil { + return "", "", err + } + if op != "=" { + return "", "", fmt.Errorf("invalid operator: %s, expected: '='", op) + } + value, err := p.parseExactValue() + if err != nil { + return "", "", err + } + return key, value, nil +} + +// parseKey parse literals. +func (p *Parser) parseKey() (string, error) { + tok, literal := p.consume() + if tok != IdentifierToken { + err := fmt.Errorf("found '%s', expected: identifier", literal) + return "", err + } + if err := validateLabelKey(literal); err != nil { + return "", err + } + return literal, nil +} + +// parseOperator returns operator +func (p *Parser) parseOperator() (op string, err error) { + tok, lit := p.consume() + switch tok { + case EqualsToken: + op = "=" + default: + return "", fmt.Errorf("found '%s', expected: '='", lit) + } + return op, nil +} + +// parseExactValue parses the only value for exact match style +func (p *Parser) parseExactValue() (string, error) { + tok, lit := p.consume() + if tok != IdentifierToken && tok != EndOfStringToken { + return "", fmt.Errorf("found '%s', expected: identifier", lit) + } + if err := validateLabelValue(lit); err != nil { + return "", err + } + return lit, nil +} + +// Parse takes a string representing a selector and returns +// map[key]value, or an error. +// The input will cause an error if it does not follow this form: +// +// ::= [ | "," ] +// ::= KEY "=" VALUE +// KEY is a sequence of one or more characters following [ DNS_SUBDOMAIN "/" ] DNS_LABEL +// VALUE is a sequence of zero or more characters "([A-Za-z0-9_-\.])". Max length is 64 character. +// Delimiter is white space: (' ', '\t') +// +// +func Parse(selector string) (map[string]string, error) { + p := &Parser{l: &Lexer{s: selector, pos: 0}} + labels, error := p.parse() + if error != nil { + return map[string]string{}, error + } + return labels, nil +} + +// Conflicts takes 2 maps +// returns true if there a key match between the maps but the value doesn't match +// returns false in other cases +func Conflicts(labels1, labels2 map[string]string) bool { + for k, v := range labels1 { + if val, match := labels2[k]; match { + if val != v { + return true + } + } + } + return false +} + +// Merge combines given maps +// Note: It doesn't not check for any conflicts between the maps +func Merge(labels1, labels2 map[string]string) map[string]string { + mergedMap := map[string]string{} + + for k, v := range labels1 { + mergedMap[k] = v + } + for k, v := range labels2 { + mergedMap[k] = v + } + return mergedMap +} + +// Equals returns true if the given maps are equal +func Equals(labels1, labels2 map[string]string) bool { + if len(labels1) != len(labels2) { + return false + } + + for k, v := range labels1 { + value, ok := labels2[k] + if !ok { + return false + } + if value != v { + return false + } + } + return true +} + +const qualifiedNameErrorMsg string = "must match format [ DNS 1123 subdomain / ] DNS 1123 label" + +func validateLabelKey(k string) error { + if len(kvalidation.IsQualifiedName(k)) != 0 { + return field.Invalid(field.NewPath("label key"), k, qualifiedNameErrorMsg) + } + return nil +} + +func validateLabelValue(v string) error { + if len(kvalidation.IsValidLabelValue(v)) != 0 { + return field.Invalid(field.NewPath("label value"), v, qualifiedNameErrorMsg) + } + return nil +} diff --git a/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector/labelselector_test.go b/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector/labelselector_test.go new file mode 100644 index 0000000000000..f0729ae1b27a5 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector/labelselector_test.go @@ -0,0 +1,181 @@ +package labelselector + +import ( + "testing" +) + +func TestLabelSelectorParse(t *testing.T) { + tests := []struct { + selector string + labels map[string]string + valid bool + }{ + { + selector: "", + labels: map[string]string{}, + valid: true, + }, + { + selector: " ", + labels: map[string]string{}, + valid: true, + }, + { + selector: "x=a", + labels: map[string]string{"x": "a"}, + valid: true, + }, + { + selector: "x=a,y=b,z=c", + labels: map[string]string{"x": "a", "y": "b", "z": "c"}, + valid: true, + }, + { + selector: "x = a, y=b ,z = c ", + labels: map[string]string{"x": "a", "y": "b", "z": "c"}, + valid: true, + }, + { + selector: "color=green, env = test ,service= front ", + labels: map[string]string{"color": "green", "env": "test", "service": "front"}, + valid: true, + }, + { + selector: ",", + labels: map[string]string{}, + valid: false, + }, + { + selector: "x", + labels: map[string]string{}, + valid: false, + }, + { + selector: "x,y", + labels: map[string]string{}, + valid: false, + }, + { + selector: "x=$y", + labels: map[string]string{}, + valid: false, + }, + { + selector: "x!=y", + labels: map[string]string{}, + valid: false, + }, + { + selector: "x==y", + labels: map[string]string{}, + valid: false, + }, + { + selector: "x=a||y=b", + labels: map[string]string{}, + valid: false, + }, + { + selector: "x in (y)", + labels: map[string]string{}, + valid: false, + }, + { + selector: "x notin (y)", + labels: map[string]string{}, + valid: false, + }, + { + selector: "x y", + labels: map[string]string{}, + valid: false, + }, + { + selector: "node-role.kubernetes.io/infra=", + labels: map[string]string{"node-role.kubernetes.io/infra": ""}, + valid: true, + }, + } + for _, test := range tests { + labels, err := Parse(test.selector) + if test.valid && err != nil { + t.Errorf("selector: %s, expected no error but got: %s", test.selector, err) + } else if !test.valid && err == nil { + t.Errorf("selector: %s, expected an error", test.selector) + } + + if !Equals(labels, test.labels) { + t.Errorf("expected: %s but got: %s", test.labels, labels) + } + } +} + +func TestLabelConflict(t *testing.T) { + tests := []struct { + labels1 map[string]string + labels2 map[string]string + conflict bool + }{ + { + labels1: map[string]string{}, + labels2: map[string]string{}, + conflict: false, + }, + { + labels1: map[string]string{"env": "test"}, + labels2: map[string]string{"infra": "true"}, + conflict: false, + }, + { + labels1: map[string]string{"env": "test"}, + labels2: map[string]string{"infra": "true", "env": "test"}, + conflict: false, + }, + { + labels1: map[string]string{"env": "test"}, + labels2: map[string]string{"env": "dev"}, + conflict: true, + }, + { + labels1: map[string]string{"env": "test", "infra": "false"}, + labels2: map[string]string{"infra": "true", "color": "blue"}, + conflict: true, + }, + } + for _, test := range tests { + conflict := Conflicts(test.labels1, test.labels2) + if conflict != test.conflict { + t.Errorf("expected: %v but got: %v", test.conflict, conflict) + } + } +} + +func TestLabelMerge(t *testing.T) { + tests := []struct { + labels1 map[string]string + labels2 map[string]string + mergedLabels map[string]string + }{ + { + labels1: map[string]string{}, + labels2: map[string]string{}, + mergedLabels: map[string]string{}, + }, + { + labels1: map[string]string{"infra": "true"}, + labels2: map[string]string{}, + mergedLabels: map[string]string{"infra": "true"}, + }, + { + labels1: map[string]string{"infra": "true"}, + labels2: map[string]string{"env": "test", "color": "blue"}, + mergedLabels: map[string]string{"infra": "true", "env": "test", "color": "blue"}, + }, + } + for _, test := range tests { + mergedLabels := Merge(test.labels1, test.labels2) + if !Equals(mergedLabels, test.mergedLabels) { + t.Errorf("expected: %v but got: %v", test.mergedLabels, mergedLabels) + } + } +} diff --git a/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/admission.go b/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/admission.go new file mode 100644 index 0000000000000..05ef26277fcac --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/admission.go @@ -0,0 +1,205 @@ +package podnodeconstraints + +import ( + "context" + "fmt" + "io" + + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/apiserver/pkg/authorization/authorizer" + "k8s.io/klog/v2" + coreapi "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/auth/nodeidentifier" + + "github.com/openshift/library-go/pkg/config/helpers" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints" + v1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1" +) + +const PluginName = "scheduling.openshift.io/PodNodeConstraints" + +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, + func(config io.Reader) (admission.Interface, error) { + pluginConfig, err := readConfig(config) + if err != nil { + return nil, err + } + if pluginConfig == nil { + klog.Infof("Admission plugin %q is not configured so it will be disabled.", PluginName) + return nil, nil + } + return NewPodNodeConstraints(pluginConfig, nodeidentifier.NewDefaultNodeIdentifier()), nil + }) +} + +// NewPodNodeConstraints creates a new admission plugin to prevent objects that contain pod templates +// from containing node bindings by name or selector based on role permissions. +func NewPodNodeConstraints(config *podnodeconstraints.PodNodeConstraintsConfig, nodeIdentifier nodeidentifier.NodeIdentifier) admission.Interface { + plugin := podNodeConstraints{ + config: config, + Handler: admission.NewHandler(admission.Create, admission.Update), + nodeIdentifier: nodeIdentifier, + } + if config != nil { + plugin.selectorLabelBlacklist = sets.NewString(config.NodeSelectorLabelBlacklist...) + } + + return &plugin +} + +type podNodeConstraints struct { + *admission.Handler + selectorLabelBlacklist sets.String + config *podnodeconstraints.PodNodeConstraintsConfig + authorizer authorizer.Authorizer + nodeIdentifier nodeidentifier.NodeIdentifier +} + +var _ = initializer.WantsAuthorizer(&podNodeConstraints{}) +var _ = admission.ValidationInterface(&podNodeConstraints{}) + +func shouldCheckResource(resource schema.GroupResource, kind schema.GroupKind) (bool, error) { + expectedKind, shouldCheck := resourcesToCheck[resource] + if !shouldCheck { + return false, nil + } + if expectedKind != kind { + return false, fmt.Errorf("Unexpected resource kind %v for resource %v", &kind, &resource) + } + return true, nil +} + +// resourcesToCheck is a map of resources and corresponding kinds of things that we want handled in this plugin +var resourcesToCheck = map[schema.GroupResource]schema.GroupKind{ + coreapi.Resource("pods"): coreapi.Kind("Pod"), +} + +func readConfig(reader io.Reader) (*podnodeconstraints.PodNodeConstraintsConfig, error) { + obj, err := helpers.ReadYAMLToInternal(reader, podnodeconstraints.Install, v1.Install) + if err != nil { + return nil, err + } + if obj == nil { + return nil, nil + } + config, ok := obj.(*podnodeconstraints.PodNodeConstraintsConfig) + if !ok { + return nil, fmt.Errorf("unexpected config object: %#v", obj) + } + // No validation needed since config is just list of strings + return config, nil +} + +func (o *podNodeConstraints) Validate(ctx context.Context, attr admission.Attributes, _ admission.ObjectInterfaces) error { + switch { + case o.config == nil, + attr.GetSubresource() != "": + return nil + } + shouldCheck, err := shouldCheckResource(attr.GetResource().GroupResource(), attr.GetKind().GroupKind()) + if err != nil { + return err + } + if !shouldCheck { + return nil + } + // Only check Create operation on pods + if attr.GetResource().GroupResource() == coreapi.Resource("pods") && attr.GetOperation() != admission.Create { + return nil + } + + return o.validatePodSpec(ctx, attr, attr.GetObject().(*coreapi.Pod).Spec) +} + +// validate PodSpec if NodeName or NodeSelector are specified +func (o *podNodeConstraints) validatePodSpec(ctx context.Context, attr admission.Attributes, ps coreapi.PodSpec) error { + // a node creating a mirror pod that targets itself is allowed + // see the NodeRestriction plugin for further details + if o.isNodeSelfTargetWithMirrorPod(attr, ps.NodeName) { + return nil + } + + matchingLabels := []string{} + // nodeSelector blacklist filter + for nodeSelectorLabel := range ps.NodeSelector { + if o.selectorLabelBlacklist.Has(nodeSelectorLabel) { + matchingLabels = append(matchingLabels, nodeSelectorLabel) + } + } + // nodeName constraint + if len(ps.NodeName) > 0 || len(matchingLabels) > 0 { + allow, err := o.checkPodsBindAccess(ctx, attr) + if err != nil { + return err + } + if !allow { + switch { + case len(ps.NodeName) > 0 && len(matchingLabels) == 0: + return admission.NewForbidden(attr, fmt.Errorf("node selection by nodeName is prohibited by policy for your role")) + case len(ps.NodeName) == 0 && len(matchingLabels) > 0: + return admission.NewForbidden(attr, fmt.Errorf("node selection by label(s) %v is prohibited by policy for your role", matchingLabels)) + case len(ps.NodeName) > 0 && len(matchingLabels) > 0: + return admission.NewForbidden(attr, fmt.Errorf("node selection by nodeName and label(s) %v is prohibited by policy for your role", matchingLabels)) + } + } + } + return nil +} + +func (o *podNodeConstraints) SetAuthorizer(a authorizer.Authorizer) { + o.authorizer = a +} + +func (o *podNodeConstraints) ValidateInitialization() error { + if o.authorizer == nil { + return fmt.Errorf("%s requires an authorizer", PluginName) + } + if o.nodeIdentifier == nil { + return fmt.Errorf("%s requires a node identifier", PluginName) + } + return nil +} + +// build LocalSubjectAccessReview struct to validate role via checkAccess +func (o *podNodeConstraints) checkPodsBindAccess(ctx context.Context, attr admission.Attributes) (bool, error) { + authzAttr := authorizer.AttributesRecord{ + User: attr.GetUserInfo(), + Verb: "create", + Namespace: attr.GetNamespace(), + Resource: "pods", + Subresource: "binding", + APIGroup: coreapi.GroupName, + ResourceRequest: true, + } + if attr.GetResource().GroupResource() == coreapi.Resource("pods") { + authzAttr.Name = attr.GetName() + } + authorized, _, err := o.authorizer.Authorize(ctx, authzAttr) + return authorized == authorizer.DecisionAllow, err +} + +func (o *podNodeConstraints) isNodeSelfTargetWithMirrorPod(attr admission.Attributes, nodeName string) bool { + // make sure we are actually trying to target a node + if len(nodeName) == 0 { + return false + } + // this check specifically requires the object to be pod (unlike the other checks where we want any pod spec) + pod, ok := attr.GetObject().(*coreapi.Pod) + if !ok { + return false + } + // note that anyone can create a mirror pod, but they are not privileged in any way + // they are actually highly constrained since they cannot reference secrets + // nodes can only create and delete them, and they will delete any "orphaned" mirror pods + if _, isMirrorPod := pod.Annotations[coreapi.MirrorPodAnnotationKey]; !isMirrorPod { + return false + } + // we are targeting a node with a mirror pod + // confirm the user is a node that is targeting itself + actualNodeName, isNode := o.nodeIdentifier.NodeIdentity(attr.GetUserInfo()) + return isNode && actualNodeName == nodeName +} diff --git a/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/admission_test.go b/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/admission_test.go new file mode 100644 index 0000000000000..202cade822195 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/admission_test.go @@ -0,0 +1,283 @@ +package podnodeconstraints + +import ( + "bytes" + "context" + "fmt" + "testing" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/apiserver/pkg/authentication/user" + "k8s.io/apiserver/pkg/authorization/authorizer" + kapi "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/auth/nodeidentifier" + "k8s.io/kubernetes/pkg/serviceaccount" + + authorizationv1 "github.com/openshift/api/authorization/v1" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints" +) + +func TestPodNodeConstraints(t *testing.T) { + ns := metav1.NamespaceDefault + tests := []struct { + config *podnodeconstraints.PodNodeConstraintsConfig + resource runtime.Object + kind schema.GroupKind + groupresource schema.GroupResource + userinfo user.Info + reviewResponse *authorizationv1.SubjectAccessReviewResponse + expectedResource string + expectedErrorMsg string + }{ + // 0: expect unspecified defaults to not error + { + config: emptyConfig(), + resource: defaultPod(), + userinfo: serviceaccount.UserInfo("", "", ""), + reviewResponse: reviewResponse(false, ""), + expectedResource: "pods/binding", + expectedErrorMsg: "", + }, + // 1: expect nodeSelector to error with user which lacks "pods/binding" access + { + config: testConfig(), + resource: nodeSelectorPod(), + userinfo: serviceaccount.UserInfo("", "", ""), + reviewResponse: reviewResponse(false, ""), + expectedResource: "pods/binding", + expectedErrorMsg: "node selection by label(s) [bogus] is prohibited by policy for your role", + }, + // 2: expect nodeName to fail with user that lacks "pods/binding" access + { + config: testConfig(), + resource: nodeNamePod(), + userinfo: serviceaccount.UserInfo("herpy", "derpy", ""), + reviewResponse: reviewResponse(false, ""), + expectedResource: "pods/binding", + expectedErrorMsg: "node selection by nodeName is prohibited by policy for your role", + }, + // 3: expect nodeName and nodeSelector to fail with user that lacks "pods/binding" access + { + config: testConfig(), + resource: nodeNameNodeSelectorPod(), + userinfo: serviceaccount.UserInfo("herpy", "derpy", ""), + reviewResponse: reviewResponse(false, ""), + expectedResource: "pods/binding", + expectedErrorMsg: "node selection by nodeName and label(s) [bogus] is prohibited by policy for your role", + }, + // 4: expect nodeSelector to succeed with user that has "pods/binding" access + { + config: testConfig(), + resource: nodeSelectorPod(), + userinfo: serviceaccount.UserInfo("openshift-infra", "daemonset-controller", ""), + reviewResponse: reviewResponse(true, ""), + expectedResource: "pods/binding", + expectedErrorMsg: "", + }, + // 5: expect nodeName to succeed with user that has "pods/binding" access + { + config: testConfig(), + resource: nodeNamePod(), + userinfo: serviceaccount.UserInfo("openshift-infra", "daemonset-controller", ""), + reviewResponse: reviewResponse(true, ""), + expectedResource: "pods/binding", + expectedErrorMsg: "", + }, + // 6: expect nil config to bypass admission + { + config: nil, + resource: defaultPod(), + userinfo: serviceaccount.UserInfo("", "", ""), + reviewResponse: reviewResponse(false, ""), + expectedResource: "pods/binding", + expectedErrorMsg: "", + }, + // 7: expect nodeName to succeed with node user self targeting mirror pod + { + config: testConfig(), + resource: nodeNameMirrorPod(), + userinfo: &user.DefaultInfo{Name: "system:node:frank", Groups: []string{user.NodesGroup}}, + expectedErrorMsg: "", + }, + // 8: expect nodeName to fail with node user self targeting non-mirror pod + { + config: testConfig(), + resource: nodeNamePod(), + userinfo: &user.DefaultInfo{Name: "system:node:frank", Groups: []string{user.NodesGroup}}, + expectedErrorMsg: "node selection by nodeName is prohibited by policy for your role", + }, + // 9: expect nodeName to fail with node user non-self targeting mirror pod + { + config: testConfig(), + resource: nodeNameMirrorPod(), + userinfo: &user.DefaultInfo{Name: "system:node:bob", Groups: []string{user.NodesGroup}}, + expectedErrorMsg: "node selection by nodeName is prohibited by policy for your role", + }, + // 10: expect nodeName to fail with node user non-self targeting non-mirror pod + { + config: testConfig(), + resource: nodeNamePod(), + userinfo: &user.DefaultInfo{Name: "system:node:bob", Groups: []string{user.NodesGroup}}, + expectedErrorMsg: "node selection by nodeName is prohibited by policy for your role", + }, + } + for i, tc := range tests { + var expectedError error + errPrefix := fmt.Sprintf("%d", i) + prc := NewPodNodeConstraints(tc.config, nodeidentifier.NewDefaultNodeIdentifier()) + prc.(initializer.WantsAuthorizer).SetAuthorizer(fakeAuthorizer(t)) + err := prc.(admission.InitializationValidator).ValidateInitialization() + if err != nil { + checkAdmitError(t, err, expectedError, errPrefix) + continue + } + attrs := admission.NewAttributesRecord(tc.resource, nil, kapi.Kind("Pod").WithVersion("version"), ns, "test", kapi.Resource("pods").WithVersion("version"), "", admission.Create, nil, false, tc.userinfo) + if tc.expectedErrorMsg != "" { + expectedError = admission.NewForbidden(attrs, fmt.Errorf(tc.expectedErrorMsg)) + } + err = prc.(admission.ValidationInterface).Validate(context.TODO(), attrs, nil) + checkAdmitError(t, err, expectedError, errPrefix) + } +} + +func TestPodNodeConstraintsPodUpdate(t *testing.T) { + ns := metav1.NamespaceDefault + var expectedError error + errPrefix := "PodUpdate" + prc := NewPodNodeConstraints(testConfig(), nodeidentifier.NewDefaultNodeIdentifier()) + prc.(initializer.WantsAuthorizer).SetAuthorizer(fakeAuthorizer(t)) + err := prc.(admission.InitializationValidator).ValidateInitialization() + if err != nil { + checkAdmitError(t, err, expectedError, errPrefix) + return + } + attrs := admission.NewAttributesRecord(nodeNamePod(), nodeNamePod(), kapi.Kind("Pod").WithVersion("version"), ns, "test", kapi.Resource("pods").WithVersion("version"), "", admission.Update, nil, false, serviceaccount.UserInfo("", "", "")) + err = prc.(admission.ValidationInterface).Validate(context.TODO(), attrs, nil) + checkAdmitError(t, err, expectedError, errPrefix) +} + +func TestPodNodeConstraintsNonHandledResources(t *testing.T) { + ns := metav1.NamespaceDefault + errPrefix := "ResourceQuotaTest" + var expectedError error + prc := NewPodNodeConstraints(testConfig(), nodeidentifier.NewDefaultNodeIdentifier()) + prc.(initializer.WantsAuthorizer).SetAuthorizer(fakeAuthorizer(t)) + err := prc.(admission.InitializationValidator).ValidateInitialization() + if err != nil { + checkAdmitError(t, err, expectedError, errPrefix) + return + } + attrs := admission.NewAttributesRecord(resourceQuota(), nil, kapi.Kind("ResourceQuota").WithVersion("version"), ns, "test", kapi.Resource("resourcequotas").WithVersion("version"), "", admission.Create, nil, false, serviceaccount.UserInfo("", "", "")) + err = prc.(admission.ValidationInterface).Validate(context.TODO(), attrs, nil) + checkAdmitError(t, err, expectedError, errPrefix) +} + +func emptyConfig() *podnodeconstraints.PodNodeConstraintsConfig { + return &podnodeconstraints.PodNodeConstraintsConfig{} +} + +func testConfig() *podnodeconstraints.PodNodeConstraintsConfig { + return &podnodeconstraints.PodNodeConstraintsConfig{ + NodeSelectorLabelBlacklist: []string{"bogus"}, + } +} + +func defaultPod() *kapi.Pod { + pod := &kapi.Pod{} + return pod +} + +func nodeNameNodeSelectorPod() *kapi.Pod { + pod := &kapi.Pod{} + pod.Spec.NodeName = "frank" + pod.Spec.NodeSelector = map[string]string{"bogus": "frank"} + return pod +} + +func nodeNamePod() *kapi.Pod { + pod := &kapi.Pod{} + pod.Spec.NodeName = "frank" + return pod +} + +func nodeNameMirrorPod() *kapi.Pod { + pod := &kapi.Pod{} + pod.Annotations = map[string]string{kapi.MirrorPodAnnotationKey: "true"} + pod.Spec.NodeName = "frank" + return pod +} + +func nodeSelectorPod() *kapi.Pod { + pod := &kapi.Pod{} + pod.Spec.NodeSelector = map[string]string{"bogus": "frank"} + return pod +} + +func resourceQuota() runtime.Object { + rq := &kapi.ResourceQuota{} + return rq +} + +func checkAdmitError(t *testing.T, err error, expectedError error, prefix string) { + switch { + case expectedError == nil && err == nil: + // continue + case expectedError != nil && err != nil && err.Error() != expectedError.Error(): + t.Errorf("%s: expected error %q, got: %q", prefix, expectedError.Error(), err.Error()) + case expectedError == nil && err != nil: + t.Errorf("%s: expected no error, got: %q", prefix, err.Error()) + case expectedError != nil && err == nil: + t.Errorf("%s: expected error %q, no error received", prefix, expectedError.Error()) + } +} + +type fakeTestAuthorizer struct { + t *testing.T +} + +func fakeAuthorizer(t *testing.T) authorizer.Authorizer { + return &fakeTestAuthorizer{ + t: t, + } +} + +func (a *fakeTestAuthorizer) Authorize(_ context.Context, attributes authorizer.Attributes) (authorizer.Decision, string, error) { + ui := attributes.GetUser() + if ui == nil { + return authorizer.DecisionNoOpinion, "", fmt.Errorf("No valid UserInfo for Context") + } + // User with pods/bindings. permission: + if ui.GetName() == "system:serviceaccount:openshift-infra:daemonset-controller" { + return authorizer.DecisionAllow, "", nil + } + // User without pods/bindings. permission: + return authorizer.DecisionNoOpinion, "", nil +} + +func reviewResponse(allowed bool, msg string) *authorizationv1.SubjectAccessReviewResponse { + return &authorizationv1.SubjectAccessReviewResponse{ + Allowed: allowed, + Reason: msg, + } +} + +func TestReadConfig(t *testing.T) { + configStr := `apiVersion: scheduling.openshift.io/v1 +kind: PodNodeConstraintsConfig +nodeSelectorLabelBlacklist: + - bogus + - foo +` + buf := bytes.NewBufferString(configStr) + config, err := readConfig(buf) + if err != nil { + t.Fatalf("unexpected error reading config: %v", err) + } + if len(config.NodeSelectorLabelBlacklist) == 0 { + t.Fatalf("NodeSelectorLabelBlacklist didn't take specified value") + } +} diff --git a/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/doc.go b/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/doc.go new file mode 100644 index 0000000000000..dfdf50a8102f0 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/doc.go @@ -0,0 +1,44 @@ +/* +Package podnodeconstraints contains the PodNodeConstraints admission +control plugin. This plugin allows administrators to set policy +governing the use of the NodeName and NodeSelector attributes in pod +specs. + +Enabling this plugin will prevent the use of the NodeName field in Pod +templates for users and serviceaccounts which lack the "pods/binding" +permission, and which don't belong to groups which have the +"pods/binding" permission. + +This plugin will also prevent users, serviceaccounts and groups which +lack the "pods/binding" permission from specifying the NodeSelector field +in Pod templates for labels which appear in the +nodeSelectorLabelBlacklist list field. + +Configuration + +The plugin is configured via a PodNodeConstraintsConfig object in the +origin and kubernetes Master configs: + +admissionConfig: + pluginConfig: + PodNodeConstraints: + configuration: + apiVersion: v1 + kind: PodNodeConstraintsConfig + nodeSelectorLabelBlacklist: + - label1 + - label2 +... +kubernetesMasterConfig: + admissionConfig: + pluginConfig: + PodNodeConstraints: + configuration: + apiVersion: v1 + kind: PodNodeConstraintsConfig + nodeSelectorLabelBlacklist: + - label1 + - label2 +*/ + +package podnodeconstraints diff --git a/openshift-kube-apiserver/authentication/oauth/bootstrapauthenticator.go b/openshift-kube-apiserver/authentication/oauth/bootstrapauthenticator.go new file mode 100644 index 0000000000000..3d4fa46511f3b --- /dev/null +++ b/openshift-kube-apiserver/authentication/oauth/bootstrapauthenticator.go @@ -0,0 +1,102 @@ +package oauth + +import ( + "context" + "fmt" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + kauthenticator "k8s.io/apiserver/pkg/authentication/authenticator" + kuser "k8s.io/apiserver/pkg/authentication/user" + + authorizationv1 "github.com/openshift/api/authorization/v1" + userv1 "github.com/openshift/api/user/v1" + oauthclient "github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1" + bootstrap "github.com/openshift/library-go/pkg/authentication/bootstrapauthenticator" +) + +const ClusterAdminGroup = "system:cluster-admins" + +type bootstrapAuthenticator struct { + tokens oauthclient.OAuthAccessTokenInterface + getter bootstrap.BootstrapUserDataGetter + validator OAuthTokenValidator + implicitAudiences kauthenticator.Audiences +} + +func NewBootstrapAuthenticator(tokens oauthclient.OAuthAccessTokenInterface, getter bootstrap.BootstrapUserDataGetter, implicitAudiences kauthenticator.Audiences, validators ...OAuthTokenValidator) kauthenticator.Token { + return &bootstrapAuthenticator{ + tokens: tokens, + getter: getter, + validator: OAuthTokenValidators(validators), + implicitAudiences: implicitAudiences, + } +} + +func (a *bootstrapAuthenticator) AuthenticateToken(ctx context.Context, name string) (*kauthenticator.Response, bool, error) { + token, err := a.tokens.Get(context.TODO(), name, metav1.GetOptions{}) + if err != nil { + return nil, false, errLookup // mask the error so we do not leak token data in logs + } + + if token.UserName != bootstrap.BootstrapUser { + return nil, false, nil + } + + data, ok, err := a.getter.Get() + if err != nil || !ok { + return nil, ok, err + } + + // this allows us to reuse existing validators + // since the uid is based on the secret, if the secret changes, all + // tokens issued for the bootstrap user before that change stop working + fakeUser := &userv1.User{ + ObjectMeta: metav1.ObjectMeta{ + UID: types.UID(data.UID), + }, + } + + if err := a.validator.Validate(token, fakeUser); err != nil { + return nil, false, err + } + + tokenAudiences := a.implicitAudiences + requestedAudiences, ok := kauthenticator.AudiencesFrom(ctx) + if !ok { + // default to apiserver audiences + requestedAudiences = a.implicitAudiences + } + + auds := kauthenticator.Audiences(tokenAudiences).Intersect(requestedAudiences) + if len(auds) == 0 && len(a.implicitAudiences) != 0 { + return nil, false, fmt.Errorf("token audiences %q is invalid for the target audiences %q", tokenAudiences, requestedAudiences) + } + + // we explicitly do not set UID as we do not want to leak any derivative of the password + return &kauthenticator.Response{ + Audiences: auds, + User: &kuser.DefaultInfo{ + Name: bootstrap.BootstrapUser, + // we cannot use SystemPrivilegedGroup because it cannot be properly scoped. + // see openshift/origin#18922 and how loopback connections are handled upstream via AuthorizeClientBearerToken. + // api aggregation with delegated authorization makes this impossible to control, see WithAlwaysAllowGroups. + // an openshift specific cluster role binding binds ClusterAdminGroup to the cluster role cluster-admin. + // thus this group is authorized to do everything via RBAC. + // this does make the bootstrap user susceptible to anything that causes the RBAC authorizer to fail. + // this is a safe trade-off because scopes must always be evaluated before RBAC for them to work at all. + // a failure in that logic means scopes are broken instead of a specific failure related to the bootstrap user. + // if this becomes a problem in the future, we could generate a custom extra value based on the secret content + // and store it in BootstrapUserData, similar to how UID is calculated. this extra value would then be wired + // to a custom authorizer that allows all actions. the problem with such an approach is that since we do not + // allow remote authorizers in OpenShift, the BootstrapUserDataGetter logic would have to be shared between the + // the kube api server and osin instead of being an implementation detail hidden inside of osin. currently the + // only shared code is the value of the BootstrapUser constant (since it is special cased in validation). + Groups: []string{ClusterAdminGroup}, + Extra: map[string][]string{ + // this user still needs scopes because it can be used in OAuth flows (unlike cert based users) + authorizationv1.ScopesKey: token.Scopes, + }, + }, + }, true, nil +} diff --git a/openshift-kube-apiserver/authentication/oauth/expirationvalidator.go b/openshift-kube-apiserver/authentication/oauth/expirationvalidator.go new file mode 100644 index 0000000000000..67e2f26e2fbc8 --- /dev/null +++ b/openshift-kube-apiserver/authentication/oauth/expirationvalidator.go @@ -0,0 +1,31 @@ +package oauth + +import ( + "errors" + "time" + + oauthv1 "github.com/openshift/api/oauth/v1" + userv1 "github.com/openshift/api/user/v1" +) + +var errExpired = errors.New("token is expired") + +func NewExpirationValidator() OAuthTokenValidator { + return OAuthTokenValidatorFunc( + func(token *oauthv1.OAuthAccessToken, _ *userv1.User) error { + if token.ExpiresIn > 0 { + if expire(token).Before(time.Now()) { + return errExpired + } + } + if token.DeletionTimestamp != nil { + return errExpired + } + return nil + }, + ) +} + +func expire(token *oauthv1.OAuthAccessToken) time.Time { + return token.CreationTimestamp.Add(time.Duration(token.ExpiresIn) * time.Second) +} diff --git a/openshift-kube-apiserver/authentication/oauth/expirationvalidator_test.go b/openshift-kube-apiserver/authentication/oauth/expirationvalidator_test.go new file mode 100644 index 0000000000000..f538d1a237565 --- /dev/null +++ b/openshift-kube-apiserver/authentication/oauth/expirationvalidator_test.go @@ -0,0 +1,72 @@ +package oauth + +import ( + "context" + "testing" + "time" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + oauthv1 "github.com/openshift/api/oauth/v1" + userv1 "github.com/openshift/api/user/v1" + oauthfake "github.com/openshift/client-go/oauth/clientset/versioned/fake" + userfake "github.com/openshift/client-go/user/clientset/versioned/fake" +) + +func TestAuthenticateTokenExpired(t *testing.T) { + fakeOAuthClient := oauthfake.NewSimpleClientset( + // expired token that had a lifetime of 10 minutes + &oauthv1.OAuthAccessToken{ + ObjectMeta: metav1.ObjectMeta{Name: "token1", CreationTimestamp: metav1.Time{Time: time.Now().Add(-1 * time.Hour)}}, + ExpiresIn: 600, + UserName: "foo", + }, + // non-expired token that has a lifetime of 10 minutes, but has a non-nil deletion timestamp + &oauthv1.OAuthAccessToken{ + ObjectMeta: metav1.ObjectMeta{Name: "token2", CreationTimestamp: metav1.Time{Time: time.Now()}, DeletionTimestamp: &metav1.Time{}}, + ExpiresIn: 600, + UserName: "foo", + }, + ) + fakeUserClient := userfake.NewSimpleClientset(&userv1.User{ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: "bar"}}) + + tokenAuthenticator := NewTokenAuthenticator(fakeOAuthClient.OauthV1().OAuthAccessTokens(), fakeUserClient.UserV1().Users(), NoopGroupMapper{}, nil, NewExpirationValidator()) + + for _, tokenName := range []string{"token1", "token2"} { + userInfo, found, err := tokenAuthenticator.AuthenticateToken(context.TODO(), tokenName) + if found { + t.Error("Found token, but it should be missing!") + } + if err != errExpired { + t.Errorf("Unexpected error: %v", err) + } + if userInfo != nil { + t.Errorf("Unexpected user: %v", userInfo) + } + } +} + +func TestAuthenticateTokenValidated(t *testing.T) { + fakeOAuthClient := oauthfake.NewSimpleClientset( + &oauthv1.OAuthAccessToken{ + ObjectMeta: metav1.ObjectMeta{Name: "token", CreationTimestamp: metav1.Time{Time: time.Now()}}, + ExpiresIn: 600, // 10 minutes + UserName: "foo", + UserUID: string("bar"), + }, + ) + fakeUserClient := userfake.NewSimpleClientset(&userv1.User{ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: "bar"}}) + + tokenAuthenticator := NewTokenAuthenticator(fakeOAuthClient.OauthV1().OAuthAccessTokens(), fakeUserClient.UserV1().Users(), NoopGroupMapper{}, nil, NewExpirationValidator(), NewUIDValidator()) + + userInfo, found, err := tokenAuthenticator.AuthenticateToken(context.TODO(), "token") + if !found { + t.Error("Did not find a token!") + } + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + if userInfo == nil { + t.Error("Did not get a user!") + } +} diff --git a/openshift-kube-apiserver/authentication/oauth/interfaces.go b/openshift-kube-apiserver/authentication/oauth/interfaces.go new file mode 100644 index 0000000000000..002f30421cf1d --- /dev/null +++ b/openshift-kube-apiserver/authentication/oauth/interfaces.go @@ -0,0 +1,41 @@ +package oauth + +import ( + oauthv1 "github.com/openshift/api/oauth/v1" + userv1 "github.com/openshift/api/user/v1" +) + +type OAuthTokenValidator interface { + Validate(token *oauthv1.OAuthAccessToken, user *userv1.User) error +} + +var _ OAuthTokenValidator = OAuthTokenValidatorFunc(nil) + +type OAuthTokenValidatorFunc func(token *oauthv1.OAuthAccessToken, user *userv1.User) error + +func (f OAuthTokenValidatorFunc) Validate(token *oauthv1.OAuthAccessToken, user *userv1.User) error { + return f(token, user) +} + +var _ OAuthTokenValidator = OAuthTokenValidators(nil) + +type OAuthTokenValidators []OAuthTokenValidator + +func (v OAuthTokenValidators) Validate(token *oauthv1.OAuthAccessToken, user *userv1.User) error { + for _, validator := range v { + if err := validator.Validate(token, user); err != nil { + return err + } + } + return nil +} + +type UserToGroupMapper interface { + GroupsFor(username string) ([]*userv1.Group, error) +} + +type NoopGroupMapper struct{} + +func (n NoopGroupMapper) GroupsFor(username string) ([]*userv1.Group, error) { + return []*userv1.Group{}, nil +} diff --git a/openshift-kube-apiserver/authentication/oauth/rankedset/rankedset.go b/openshift-kube-apiserver/authentication/oauth/rankedset/rankedset.go new file mode 100644 index 0000000000000..892fede13429a --- /dev/null +++ b/openshift-kube-apiserver/authentication/oauth/rankedset/rankedset.go @@ -0,0 +1,162 @@ +package rankedset + +import "github.com/google/btree" + +// Item represents a single object in a RankedSet. +type Item interface { + // Key returns the unique identifier for this item. + Key() string + // Rank is used to sort items. + // Items with the same rank are sorted lexicographically based on Key. + Rank() int64 +} + +// RankedSet stores Items based on Key (uniqueness) and Rank (sorting). +type RankedSet struct { + rank *btree.BTree + set map[string]*treeItem +} + +// StringItem implements Item using a string. +// It has two main uses: +// 1. If all items in a RankedSet are StringItems, the set becomes a store of unique strings sorted lexicographically. +// 2. It serves as a Key item that can be passed into methods that ignore Rank such as RankedSet.Delete. +type StringItem string + +func (s StringItem) Key() string { + return string(s) +} + +func (s StringItem) Rank() int64 { + return 0 +} + +func New() *RankedSet { + return &RankedSet{ + rank: btree.New(32), + set: make(map[string]*treeItem), + } +} + +// Insert adds the item into the set. +// If an item with the same Key existed in the set, it is deleted and returned. +func (s *RankedSet) Insert(item Item) Item { + old := s.Delete(item) + + key := item.Key() + value := &treeItem{item: item} + + s.rank.ReplaceOrInsert(value) // should always return nil because we call Delete first + s.set[key] = value + + return old +} + +// Delete removes the item from the set based on Key (Rank is ignored). +// The removed item is returned if it existed in the set. +func (s *RankedSet) Delete(item Item) Item { + key := item.Key() + value, ok := s.set[key] + if !ok { + return nil + } + + s.rank.Delete(value) // should always return the same data as value (non-nil) + delete(s.set, key) + + return value.item +} + +func (s *RankedSet) Min() Item { + if min := s.rank.Min(); min != nil { + return min.(*treeItem).item + } + return nil +} + +func (s *RankedSet) Max() Item { + if max := s.rank.Max(); max != nil { + return max.(*treeItem).item + } + return nil +} + +func (s *RankedSet) Len() int { + return len(s.set) +} + +func (s *RankedSet) Get(item Item) Item { + if value, ok := s.set[item.Key()]; ok { + return value.item + } + return nil +} + +func (s *RankedSet) Has(item Item) bool { + _, ok := s.set[item.Key()] + return ok +} + +// List returns all items in the set in ranked order. +// If delete is set to true, the returned items are removed from the set. +func (s *RankedSet) List(delete bool) []Item { + return s.ascend( + func(item Item) bool { + return true + }, + delete, + ) +} + +// LessThan returns all items less than the given rank in ranked order. +// If delete is set to true, the returned items are removed from the set. +func (s *RankedSet) LessThan(rank int64, delete bool) []Item { + return s.ascend( + func(item Item) bool { + return item.Rank() < rank + }, + delete, + ) +} + +// setItemIterator allows callers of ascend to iterate in-order over the set. +// When this function returns false, iteration will stop. +type setItemIterator func(item Item) bool + +func (s *RankedSet) ascend(iterator setItemIterator, delete bool) []Item { + var items []Item + s.rank.Ascend(func(i btree.Item) bool { + item := i.(*treeItem).item + if !iterator(item) { + return false + } + items = append(items, item) + return true + }) + // delete after Ascend since it is probably not safe to remove while iterating + if delete { + for _, item := range items { + s.Delete(item) + } + } + return items +} + +var _ btree.Item = &treeItem{} + +type treeItem struct { + item Item +} + +func (i *treeItem) Less(than btree.Item) bool { + other := than.(*treeItem).item + + selfRank := i.item.Rank() + otherRank := other.Rank() + + if selfRank == otherRank { + return i.item.Key() < other.Key() + } + + return selfRank < otherRank +} diff --git a/openshift-kube-apiserver/authentication/oauth/rankedset/rankedset_test.go b/openshift-kube-apiserver/authentication/oauth/rankedset/rankedset_test.go new file mode 100644 index 0000000000000..92d56dc7aa63e --- /dev/null +++ b/openshift-kube-apiserver/authentication/oauth/rankedset/rankedset_test.go @@ -0,0 +1,273 @@ +package rankedset + +import "testing" + +func TestRankedSet(t *testing.T) { + s := New() + a := newTestSetItem("A", 5, "AD") + b := newTestSetItem("B", 6, "BD") + c := newTestSetItem("C", 4, "CD") + d := newTestSetItem("D", 6, "DD") + e := newTestSetItem("E", 1, "ED") + + for _, tc := range []struct { + name string + f func(*testing.T) + }{ + { + name: "insert", + f: func(t *testing.T) { + assertLen(s, 0, t) + s.Insert(a) + assertLen(s, 1, t) + s.Insert(b) + assertLen(s, 2, t) + s.Insert(c) + assertLen(s, 3, t) + s.Insert(d) + assertLen(s, 4, t) + s.Insert(e) + assertLen(s, 5, t) + }, + }, + { + name: "list order", + f: func(t *testing.T) { + assertOrder(s.List(false), t, e, c, a, b, d) + assertItem(e, s.Min(), t) + assertItem(d, s.Max(), t) + }, + }, + { + name: "delete list order 1", + f: func(t *testing.T) { + assertItem(a, s.Delete(a), t) + assertOrder(s.List(false), t, e, c, b, d) + assertLen(s, 4, t) + assertItem(e, s.Min(), t) + assertItem(d, s.Max(), t) + }, + }, + { + name: "delete list order 2", + f: func(t *testing.T) { + assertItem(b, s.Delete(b), t) + assertOrder(s.List(false), t, e, c, d) + assertLen(s, 3, t) + assertItem(e, s.Min(), t) + assertItem(d, s.Max(), t) + }, + }, + { + name: "has", + f: func(t *testing.T) { + assertHas("A", false, s, t) + assertHas("B", false, s, t) + assertHas("C", true, s, t) + assertHas("D", true, s, t) + assertHas("E", true, s, t) + assertHas("F", false, s, t) + }, + }, + { + name: "get", + f: func(t *testing.T) { + assertItem(nil, s.Get(StringItem("A")), t) + assertItem(nil, s.Get(StringItem("B")), t) + assertItem(c, s.Get(StringItem("C")), t) + assertItem(d, s.Get(StringItem("D")), t) + assertItem(e, s.Get(StringItem("E")), t) + assertItem(nil, s.Get(StringItem("F")), t) + }, + }, + { + name: "delete list order 3", + f: func(t *testing.T) { + assertItem(nil, s.Delete(b), t) + assertOrder(s.List(false), t, e, c, d) + assertLen(s, 3, t) + assertItem(e, s.Min(), t) + assertItem(d, s.Max(), t) + }, + }, + { + name: "delete list order 4", + f: func(t *testing.T) { + assertItem(c, s.Delete(c), t) + assertOrder(s.List(false), t, e, d) + assertLen(s, 2, t) + assertItem(e, s.Min(), t) + assertItem(d, s.Max(), t) + }, + }, + { + name: "insert list order", + f: func(t *testing.T) { + assertItem(nil, s.Insert(a), t) + assertOrder(s.List(false), t, e, a, d) + assertLen(s, 3, t) + assertItem(e, s.Min(), t) + assertItem(d, s.Max(), t) + }, + }, + { + name: "less than order", + f: func(t *testing.T) { + assertOrder(s.LessThan(6, false), t, e, a) + assertLen(s, 3, t) + assertItem(e, s.Min(), t) + assertItem(d, s.Max(), t) + }, + }, + { + name: "less than order delete", + f: func(t *testing.T) { + assertOrder(s.LessThan(6, true), t, e, a) + assertLen(s, 1, t) + assertItem(d, s.Min(), t) + assertItem(d, s.Max(), t) + }, + }, + { + name: "list order delete", + f: func(t *testing.T) { + assertOrder(s.List(true), t, d) + assertLen(s, 0, t) + assertItem(nil, s.Min(), t) + assertItem(nil, s.Max(), t) + }, + }, + { + name: "insert min max", + f: func(t *testing.T) { + assertItem(nil, s.Insert(b), t) + assertItem(nil, s.Insert(a), t) + assertItem(nil, s.Insert(e), t) + assertOrder(s.List(false), t, e, a, b) + assertLen(s, 3, t) + assertItem(e, s.Min(), t) + assertItem(b, s.Max(), t) + assertItem(e, s.Delete(e), t) + assertLen(s, 2, t) + assertItem(a, s.Min(), t) + assertItem(b, s.Max(), t) + }, + }, + { + name: "insert replace", + f: func(t *testing.T) { + a0 := newTestSetItem("A", 1, "AD0") + a1 := newTestSetItem("A", 2, "AD1") + a2 := newTestSetItem("A", 3, "AD2") + + assertItem(nil, s.Insert(e), t) + assertOrder(s.List(false), t, e, a, b) + assertLen(s, 3, t) + assertItem(e, s.Min(), t) + assertItem(b, s.Max(), t) + + assertItem(a, s.Insert(a0), t) + assertOrder(s.List(false), t, a0, e, b) + assertLen(s, 3, t) + assertItem(a0, s.Min(), t) + assertItem(b, s.Max(), t) + + assertItem(a0, s.Insert(a1), t) + assertOrder(s.List(false), t, e, a1, b) + assertLen(s, 3, t) + assertItem(e, s.Min(), t) + assertItem(b, s.Max(), t) + + assertItem(a1, s.Insert(a2), t) + assertOrder(s.List(false), t, e, a2, b) + assertLen(s, 3, t) + assertItem(e, s.Min(), t) + assertItem(b, s.Max(), t) + }, + }, + } { + t.Run(tc.name, tc.f) + } +} + +func assertLen(s *RankedSet, length int, t *testing.T) { + if s.Len() != length { + t.Errorf("%s expected len: %d got %d for %v", t.Name(), length, s.Len(), noPointerItems(s.List(false))) + } +} + +func assertOrder(actual []Item, t *testing.T, items ...*testSetItem) { + if len(items) != len(actual) { + t.Errorf("%s expected len: %d got %d for %v and %v", t.Name(), len(items), len(actual), noPointers(items), noPointerItems(actual)) + return + } + for i, item := range items { + if actualItem := actual[i].(*testSetItem); *item != *actualItem { + t.Errorf("%s expected item: %v got %v for idx %d", t.Name(), *item, *actualItem, i) + } + } +} + +func assertItem(item *testSetItem, actual Item, t *testing.T) { + itemNil := item == nil + actualNil := actual == nil + + if itemNil != actualNil { + t.Errorf("%s expected or actual is nil: %v vs %v", t.Name(), item, actual) + return + } + + if itemNil { + return + } + + if actualItem := actual.(*testSetItem); *item != *actualItem { + t.Errorf("%s expected item: %v got %v", t.Name(), *item, *actualItem) + } +} + +func assertHas(key string, expected bool, s *RankedSet, t *testing.T) { + if expected != s.Has(StringItem(key)) { + t.Errorf("%s expected %v for %s with %v", t.Name(), expected, key, noPointerItems(s.List(false))) + } +} + +func newTestSetItem(key string, rank int64, data string) *testSetItem { + return &testSetItem{ + key: key, + rank: rank, + data: data, + } +} + +type testSetItem struct { + key string + rank int64 + data string +} + +func (i *testSetItem) Key() string { + return i.key +} + +func (i *testSetItem) Rank() int64 { + return i.rank +} + +// funcs below make the printing of these slices better + +func noPointers(items []*testSetItem) []testSetItem { + var out []testSetItem + for _, item := range items { + out = append(out, *item) + } + return out +} + +func noPointerItems(items []Item) []testSetItem { + var out []testSetItem + for _, item := range items { + out = append(out, *(item.(*testSetItem))) + } + return out +} diff --git a/openshift-kube-apiserver/authentication/oauth/timeoutvalidator.go b/openshift-kube-apiserver/authentication/oauth/timeoutvalidator.go new file mode 100644 index 0000000000000..4d51502fd4569 --- /dev/null +++ b/openshift-kube-apiserver/authentication/oauth/timeoutvalidator.go @@ -0,0 +1,233 @@ +package oauth + +import ( + "context" + "errors" + "time" + + "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/klog/v2" + + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/runtime" + + oauthv1 "github.com/openshift/api/oauth/v1" + userv1 "github.com/openshift/api/user/v1" + oauthclient "github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1" + oauthclientlister "github.com/openshift/client-go/oauth/listers/oauth/v1" + "k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/rankedset" +) + +var errTimedout = errors.New("token timed out") + +// Implements rankedset.Item +var _ = rankedset.Item(&tokenData{}) + +type tokenData struct { + token *oauthv1.OAuthAccessToken + seen time.Time +} + +func (a *tokenData) timeout() time.Time { + return a.token.CreationTimestamp.Time.Add(time.Duration(a.token.InactivityTimeoutSeconds) * time.Second) +} + +func (a *tokenData) Key() string { + return a.token.Name +} + +func (a *tokenData) Rank() int64 { + return a.timeout().Unix() +} + +func timeoutAsDuration(timeout int32) time.Duration { + return time.Duration(timeout) * time.Second +} + +type TimeoutValidator struct { + oauthClients oauthclientlister.OAuthClientLister + tokens oauthclient.OAuthAccessTokenInterface + tokenChannel chan *tokenData + data *rankedset.RankedSet + defaultTimeout time.Duration + tickerInterval time.Duration + + // fields that are used to have a deterministic order of events in unit tests + flushHandler func(flushHorizon time.Time) // allows us to decorate this func during unit tests + putTokenHandler func(td *tokenData) // allows us to decorate this func during unit tests + clock clock.Clock // allows us to control time during unit tests +} + +func NewTimeoutValidator(tokens oauthclient.OAuthAccessTokenInterface, oauthClients oauthclientlister.OAuthClientLister, defaultTimeout int32, minValidTimeout int32) *TimeoutValidator { + a := &TimeoutValidator{ + oauthClients: oauthClients, + tokens: tokens, + tokenChannel: make(chan *tokenData), + data: rankedset.New(), + defaultTimeout: timeoutAsDuration(defaultTimeout), + tickerInterval: timeoutAsDuration(minValidTimeout / 3), // we tick at least 3 times within each timeout period + clock: clock.RealClock{}, + } + a.flushHandler = a.flush + a.putTokenHandler = a.putToken + klog.V(5).Infof("Token Timeout Validator primed with defaultTimeout=%s tickerInterval=%s", a.defaultTimeout, a.tickerInterval) + return a +} + +// Validate is called with a token when it is seen by an authenticator +// it touches only the tokenChannel so it is safe to call from other threads +func (a *TimeoutValidator) Validate(token *oauthv1.OAuthAccessToken, _ *userv1.User) error { + if token.InactivityTimeoutSeconds == 0 { + // We care only if the token was created with a timeout to start with + return nil + } + + td := &tokenData{ + token: token, + seen: a.clock.Now(), + } + if td.timeout().Before(td.seen) { + return errTimedout + } + + if token.ExpiresIn != 0 && token.ExpiresIn <= int64(token.InactivityTimeoutSeconds) { + // skip if the timeout is already larger than expiration deadline + return nil + } + // After a positive timeout check we need to update the timeout and + // schedule an update so that we can either set or update the Timeout + // we do that launching a micro goroutine to avoid blocking + go a.putTokenHandler(td) + + return nil +} + +func (a *TimeoutValidator) putToken(td *tokenData) { + a.tokenChannel <- td +} + +func (a *TimeoutValidator) clientTimeout(name string) time.Duration { + oauthClient, err := a.oauthClients.Get(name) + if err != nil { + klog.V(5).Infof("Failed to fetch OAuthClient %q for timeout value: %v", name, err) + return a.defaultTimeout + } + if oauthClient.AccessTokenInactivityTimeoutSeconds == nil { + return a.defaultTimeout + } + return timeoutAsDuration(*oauthClient.AccessTokenInactivityTimeoutSeconds) +} + +func (a *TimeoutValidator) update(td *tokenData) error { + // Obtain the timeout interval for this client + delta := a.clientTimeout(td.token.ClientName) + // if delta is 0 it means the OAuthClient has been changed to the + // no-timeout value. In this case we set newTimeout also to 0 so + // that the token will no longer timeout once updated. + newTimeout := int32(0) + if delta > 0 { + // InactivityTimeoutSeconds is the number of seconds since creation: + // InactivityTimeoutSeconds = Seen(Time) - CreationTimestamp(Time) + delta(Duration) + newTimeout = int32((td.seen.Sub(td.token.CreationTimestamp.Time) + delta) / time.Second) + } + // We need to get the token again here because it may have changed in the + // DB and we need to verify it is still worth updating + token, err := a.tokens.Get(context.TODO(), td.token.Name, v1.GetOptions{}) + if err != nil { + return err + } + if newTimeout != 0 && token.InactivityTimeoutSeconds >= newTimeout { + // if the token was already updated with a higher or equal timeout we + // do not have anything to do + return nil + } + token.InactivityTimeoutSeconds = newTimeout + _, err = a.tokens.Update(context.TODO(), token, v1.UpdateOptions{}) + return err +} + +func (a *TimeoutValidator) flush(flushHorizon time.Time) { + // flush all tokens that are about to expire before the flushHorizon. + // Typically the flushHorizon is set to a time slightly past the next + // ticker interval, so that not token ends up timing out between flushes + klog.V(5).Infof("Flushing tokens timing out before %s", flushHorizon) + + // grab all tokens that need to be update in this flush interval + // and remove them from the stored data, they either flush now or never + tokenList := a.data.LessThan(flushHorizon.Unix(), true) + + var retryList []*tokenData + flushedTokens := 0 + + for _, item := range tokenList { + td := item.(*tokenData) + err := a.update(td) + // not logging the full errors here as it would leak the token. + switch { + case err == nil: + flushedTokens++ + case apierrors.IsConflict(err) || apierrors.IsServerTimeout(err): + klog.V(5).Infof("Token update deferred for token belonging to %s", + td.token.UserName) + retryList = append(retryList, td) + default: + klog.V(5).Infof("Token timeout for user=%q client=%q scopes=%v was not updated", + td.token.UserName, td.token.ClientName, td.token.Scopes) + } + } + + // we try once more and if it still fails we stop trying here and defer + // to a future regular update if the token is used again + for _, td := range retryList { + err := a.update(td) + if err != nil { + klog.V(5).Infof("Token timeout for user=%q client=%q scopes=%v was not updated", + td.token.UserName, td.token.ClientName, td.token.Scopes) + } else { + flushedTokens++ + } + } + + klog.V(5).Infof("Successfully flushed %d tokens out of %d", + flushedTokens, len(tokenList)) +} + +func (a *TimeoutValidator) nextTick() time.Time { + // Add a small safety Margin so flushes tend to + // overlap a little rather than have gaps + return a.clock.Now().Add(a.tickerInterval + 10*time.Second) +} + +func (a *TimeoutValidator) Run(stopCh <-chan struct{}) { + defer runtime.HandleCrash() + klog.V(5).Infof("Started Token Timeout Flush Handling thread!") + + ticker := a.clock.NewTicker(a.tickerInterval) + // make sure to kill the ticker when we exit + defer ticker.Stop() + + nextTick := a.nextTick() + + for { + select { + case <-stopCh: + // if channel closes terminate + return + + case td := <-a.tokenChannel: + a.data.Insert(td) + // if this token is going to time out before the timer, flush now + tokenTimeout := td.timeout() + if tokenTimeout.Before(nextTick) { + klog.V(5).Infof("Timeout for user=%q client=%q scopes=%v falls before next ticker (%s < %s), forcing flush!", + td.token.UserName, td.token.ClientName, td.token.Scopes, tokenTimeout, nextTick) + a.flushHandler(nextTick) + } + + case <-ticker.C(): + nextTick = a.nextTick() + a.flushHandler(nextTick) + } + } +} diff --git a/openshift-kube-apiserver/authentication/oauth/tokenauthenticator.go b/openshift-kube-apiserver/authentication/oauth/tokenauthenticator.go new file mode 100644 index 0000000000000..7153b79b150b6 --- /dev/null +++ b/openshift-kube-apiserver/authentication/oauth/tokenauthenticator.go @@ -0,0 +1,84 @@ +package oauth + +import ( + "context" + "errors" + "fmt" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + kauthenticator "k8s.io/apiserver/pkg/authentication/authenticator" + kuser "k8s.io/apiserver/pkg/authentication/user" + + authorizationv1 "github.com/openshift/api/authorization/v1" + oauthclient "github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1" + userclient "github.com/openshift/client-go/user/clientset/versioned/typed/user/v1" +) + +var errLookup = errors.New("token lookup failed") + +type tokenAuthenticator struct { + tokens oauthclient.OAuthAccessTokenInterface + users userclient.UserInterface + groupMapper UserToGroupMapper + validators OAuthTokenValidator + implicitAuds kauthenticator.Audiences +} + +func NewTokenAuthenticator(tokens oauthclient.OAuthAccessTokenInterface, users userclient.UserInterface, groupMapper UserToGroupMapper, implicitAuds kauthenticator.Audiences, validators ...OAuthTokenValidator) kauthenticator.Token { + return &tokenAuthenticator{ + tokens: tokens, + users: users, + groupMapper: groupMapper, + validators: OAuthTokenValidators(validators), + implicitAuds: implicitAuds, + } +} + +func (a *tokenAuthenticator) AuthenticateToken(ctx context.Context, name string) (*kauthenticator.Response, bool, error) { + token, err := a.tokens.Get(context.TODO(), name, metav1.GetOptions{}) + if err != nil { + return nil, false, errLookup // mask the error so we do not leak token data in logs + } + + user, err := a.users.Get(context.TODO(), token.UserName, metav1.GetOptions{}) + if err != nil { + return nil, false, err + } + + if err := a.validators.Validate(token, user); err != nil { + return nil, false, err + } + + groups, err := a.groupMapper.GroupsFor(user.Name) + if err != nil { + return nil, false, err + } + groupNames := make([]string, 0, len(groups)) + for _, group := range groups { + groupNames = append(groupNames, group.Name) + } + + tokenAudiences := a.implicitAuds + requestedAudiences, ok := kauthenticator.AudiencesFrom(ctx) + if !ok { + // default to apiserver audiences + requestedAudiences = a.implicitAuds + } + + auds := kauthenticator.Audiences(tokenAudiences).Intersect(requestedAudiences) + if len(auds) == 0 && len(a.implicitAuds) != 0 { + return nil, false, fmt.Errorf("token audiences %q is invalid for the target audiences %q", tokenAudiences, requestedAudiences) + } + + return &kauthenticator.Response{ + User: &kuser.DefaultInfo{ + Name: user.Name, + UID: string(user.UID), + Groups: groupNames, + Extra: map[string][]string{ + authorizationv1.ScopesKey: token.Scopes, + }, + }, + Audiences: auds, + }, true, nil +} diff --git a/openshift-kube-apiserver/authentication/oauth/tokenauthenticator_test.go b/openshift-kube-apiserver/authentication/oauth/tokenauthenticator_test.go new file mode 100644 index 0000000000000..dae9e7445a150 --- /dev/null +++ b/openshift-kube-apiserver/authentication/oauth/tokenauthenticator_test.go @@ -0,0 +1,354 @@ +package oauth + +import ( + "context" + "errors" + "testing" + "time" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/apiserver/pkg/authentication/authenticator" + clienttesting "k8s.io/client-go/testing" + + oauthv1 "github.com/openshift/api/oauth/v1" + userv1 "github.com/openshift/api/user/v1" + oauthfake "github.com/openshift/client-go/oauth/clientset/versioned/fake" + oauthclient "github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1" + userfake "github.com/openshift/client-go/user/clientset/versioned/fake" +) + +func TestAuthenticateTokenInvalidUID(t *testing.T) { + fakeOAuthClient := oauthfake.NewSimpleClientset( + &oauthv1.OAuthAccessToken{ + ObjectMeta: metav1.ObjectMeta{Name: "token", CreationTimestamp: metav1.Time{Time: time.Now()}}, + ExpiresIn: 600, // 10 minutes + UserName: "foo", + UserUID: string("bar1"), + }, + ) + fakeUserClient := userfake.NewSimpleClientset(&userv1.User{ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: "bar2"}}) + + tokenAuthenticator := NewTokenAuthenticator(fakeOAuthClient.OauthV1().OAuthAccessTokens(), fakeUserClient.UserV1().Users(), NoopGroupMapper{}, nil, NewUIDValidator()) + + userInfo, found, err := tokenAuthenticator.AuthenticateToken(context.TODO(), "token") + if found { + t.Error("Found token, but it should be missing!") + } + if err.Error() != "user.UID (bar2) does not match token.userUID (bar1)" { + t.Errorf("Unexpected error: %v", err) + } + if userInfo != nil { + t.Errorf("Unexpected user: %v", userInfo) + } +} + +func TestAuthenticateTokenNotFoundSuppressed(t *testing.T) { + fakeOAuthClient := oauthfake.NewSimpleClientset() + fakeUserClient := userfake.NewSimpleClientset() + tokenAuthenticator := NewTokenAuthenticator(fakeOAuthClient.OauthV1().OAuthAccessTokens(), fakeUserClient.UserV1().Users(), NoopGroupMapper{}, nil) + + userInfo, found, err := tokenAuthenticator.AuthenticateToken(context.TODO(), "token") + if found { + t.Error("Found token, but it should be missing!") + } + if err != errLookup { + t.Error("Expected not found error to be suppressed with lookup error") + } + if userInfo != nil { + t.Errorf("Unexpected user: %v", userInfo) + } +} + +func TestAuthenticateTokenOtherGetErrorSuppressed(t *testing.T) { + fakeOAuthClient := oauthfake.NewSimpleClientset() + fakeOAuthClient.PrependReactor("get", "oauthaccesstokens", func(action clienttesting.Action) (handled bool, ret runtime.Object, err error) { + return true, nil, errors.New("get error") + }) + fakeUserClient := userfake.NewSimpleClientset() + tokenAuthenticator := NewTokenAuthenticator(fakeOAuthClient.OauthV1().OAuthAccessTokens(), fakeUserClient.UserV1().Users(), NoopGroupMapper{}, nil) + + userInfo, found, err := tokenAuthenticator.AuthenticateToken(context.TODO(), "token") + if found { + t.Error("Found token, but it should be missing!") + } + if err != errLookup { + t.Error("Expected custom get error to be suppressed with lookup error") + } + if userInfo != nil { + t.Errorf("Unexpected user: %v", userInfo) + } +} + +func TestAuthenticateTokenTimeout(t *testing.T) { + stopCh := make(chan struct{}) + defer close(stopCh) + + testClock := clock.NewFakeClock(time.Time{}) + + defaultTimeout := int32(30) // 30 seconds + clientTimeout := int32(15) // 15 seconds + minTimeout := int32(10) // 10 seconds -> 10/3 = a tick per 3 seconds + + testClient := oauthv1.OAuthClient{ + ObjectMeta: metav1.ObjectMeta{Name: "testClient"}, + AccessTokenInactivityTimeoutSeconds: &clientTimeout, + } + quickClient := oauthv1.OAuthClient{ + ObjectMeta: metav1.ObjectMeta{Name: "quickClient"}, + AccessTokenInactivityTimeoutSeconds: &minTimeout, + } + slowClient := oauthv1.OAuthClient{ + ObjectMeta: metav1.ObjectMeta{Name: "slowClient"}, + } + testToken := oauthv1.OAuthAccessToken{ + ObjectMeta: metav1.ObjectMeta{Name: "testToken", CreationTimestamp: metav1.Time{Time: testClock.Now()}}, + ClientName: "testClient", + ExpiresIn: 600, // 10 minutes + UserName: "foo", + UserUID: string("bar"), + InactivityTimeoutSeconds: clientTimeout, + } + quickToken := oauthv1.OAuthAccessToken{ + ObjectMeta: metav1.ObjectMeta{Name: "quickToken", CreationTimestamp: metav1.Time{Time: testClock.Now()}}, + ClientName: "quickClient", + ExpiresIn: 600, // 10 minutes + UserName: "foo", + UserUID: string("bar"), + InactivityTimeoutSeconds: minTimeout, + } + slowToken := oauthv1.OAuthAccessToken{ + ObjectMeta: metav1.ObjectMeta{Name: "slowToken", CreationTimestamp: metav1.Time{Time: testClock.Now()}}, + ClientName: "slowClient", + ExpiresIn: 600, // 10 minutes + UserName: "foo", + UserUID: string("bar"), + InactivityTimeoutSeconds: defaultTimeout, + } + emergToken := oauthv1.OAuthAccessToken{ + ObjectMeta: metav1.ObjectMeta{Name: "emergToken", CreationTimestamp: metav1.Time{Time: testClock.Now()}}, + ClientName: "quickClient", + ExpiresIn: 600, // 10 minutes + UserName: "foo", + UserUID: string("bar"), + InactivityTimeoutSeconds: 5, // super short timeout + } + fakeOAuthClient := oauthfake.NewSimpleClientset(&testToken, &quickToken, &slowToken, &emergToken, &testClient, &quickClient, &slowClient) + fakeUserClient := userfake.NewSimpleClientset(&userv1.User{ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: "bar"}}) + accessTokenGetter := fakeOAuthClient.OauthV1().OAuthAccessTokens() + oauthClients := fakeOAuthClient.OauthV1().OAuthClients() + lister := &fakeOAuthClientLister{ + clients: oauthClients, + } + + timeouts := NewTimeoutValidator(accessTokenGetter, lister, defaultTimeout, minTimeout) + + // inject fake clock, which has some interesting properties + // 1. A sleep will cause at most one ticker event, regardless of how long the sleep was + // 2. The clock will hold one tick event and will drop the next one if something does not consume it first + timeouts.clock = testClock + + // decorate flush + // The fake clock 1. and 2. require that we issue a wait(t, timeoutsSync) after each testClock.Sleep that causes a tick + originalFlush := timeouts.flushHandler + timeoutsSync := make(chan struct{}) + timeouts.flushHandler = func(flushHorizon time.Time) { + originalFlush(flushHorizon) + timeoutsSync <- struct{}{} // signal that flush is complete so we never race against it + } + + // decorate putToken + // We must issue a wait(t, putTokenSync) after each call to checkToken that should be successful + originalPutToken := timeouts.putTokenHandler + putTokenSync := make(chan struct{}) + timeouts.putTokenHandler = func(td *tokenData) { + originalPutToken(td) + putTokenSync <- struct{}{} // signal that putToken is complete so we never race against it + } + + // add some padding to all sleep invocations to make sure we are not failing on any boundary values + buffer := time.Nanosecond + + tokenAuthenticator := NewTokenAuthenticator(accessTokenGetter, fakeUserClient.UserV1().Users(), NoopGroupMapper{}, nil, timeouts) + + go timeouts.Run(stopCh) + + // TIME: 0 seconds have passed here + + // first time should succeed for all + checkToken(t, "testToken", tokenAuthenticator, accessTokenGetter, testClock, true) + wait(t, putTokenSync) + + checkToken(t, "quickToken", tokenAuthenticator, accessTokenGetter, testClock, true) + wait(t, putTokenSync) + + wait(t, timeoutsSync) // from emergency flush because quickToken has a short enough timeout + + checkToken(t, "slowToken", tokenAuthenticator, accessTokenGetter, testClock, true) + wait(t, putTokenSync) + + // this should cause an emergency flush, if not the next auth will fail, + // as the token will be timed out + checkToken(t, "emergToken", tokenAuthenticator, accessTokenGetter, testClock, true) + wait(t, putTokenSync) + + wait(t, timeoutsSync) // from emergency flush because emergToken has a super short timeout + + // wait 6 seconds + testClock.Sleep(5*time.Second + buffer) + + // a tick happens every 3 seconds + wait(t, timeoutsSync) + + // TIME: 6th second + + // See if emergency flush happened + checkToken(t, "emergToken", tokenAuthenticator, accessTokenGetter, testClock, true) + wait(t, putTokenSync) + + wait(t, timeoutsSync) // from emergency flush because emergToken has a super short timeout + + // wait for timeout (minTimeout + 1 - the previously waited 6 seconds) + testClock.Sleep(time.Duration(minTimeout-5)*time.Second + buffer) + wait(t, timeoutsSync) + + // TIME: 11th second + + // now we change the testClient and see if the testToken will still be + // valid instead of timing out + changeClient, ret := oauthClients.Get(context.TODO(), "testClient", metav1.GetOptions{}) + if ret != nil { + t.Error("Failed to get testClient") + } else { + longTimeout := int32(20) + changeClient.AccessTokenInactivityTimeoutSeconds = &longTimeout + _, ret = oauthClients.Update(context.TODO(), changeClient, metav1.UpdateOptions{}) + if ret != nil { + t.Error("Failed to update testClient") + } + } + + // this should fail, thus no call to wait(t, putTokenSync) + checkToken(t, "quickToken", tokenAuthenticator, accessTokenGetter, testClock, false) + + // while this should get updated + checkToken(t, "testToken", tokenAuthenticator, accessTokenGetter, testClock, true) + wait(t, putTokenSync) + + wait(t, timeoutsSync) + + // wait for timeout + testClock.Sleep(time.Duration(clientTimeout+1)*time.Second + buffer) + + // 16 seconds equals 5 more flushes, but the fake clock will only tick once during this time + wait(t, timeoutsSync) + + // TIME: 27th second + + // this should get updated + checkToken(t, "slowToken", tokenAuthenticator, accessTokenGetter, testClock, true) + wait(t, putTokenSync) + + wait(t, timeoutsSync) + + // while this should not fail + checkToken(t, "testToken", tokenAuthenticator, accessTokenGetter, testClock, true) + wait(t, putTokenSync) + + wait(t, timeoutsSync) + // and should be updated to last at least till the 31st second + token, err := accessTokenGetter.Get(context.TODO(), "testToken", metav1.GetOptions{}) + if err != nil { + t.Error("Failed to get testToken") + } else { + if token.InactivityTimeoutSeconds < 31 { + t.Errorf("Expected timeout in more than 31 seconds, found: %d", token.InactivityTimeoutSeconds) + } + } + + //now change testClient again, so that tokens do not expire anymore + changeclient, ret := oauthClients.Get(context.TODO(), "testClient", metav1.GetOptions{}) + if ret != nil { + t.Error("Failed to get testClient") + } else { + changeclient.AccessTokenInactivityTimeoutSeconds = new(int32) + _, ret = oauthClients.Update(context.TODO(), changeclient, metav1.UpdateOptions{}) + if ret != nil { + t.Error("Failed to update testClient") + } + } + + // and wait until test token should time out, and has been flushed for sure + testClock.Sleep(time.Duration(minTimeout)*time.Second + buffer) + wait(t, timeoutsSync) + + // while this should not fail + checkToken(t, "testToken", tokenAuthenticator, accessTokenGetter, testClock, true) + wait(t, putTokenSync) + + wait(t, timeoutsSync) + + // and should be updated to have a ZERO timeout + token, err = accessTokenGetter.Get(context.TODO(), "testToken", metav1.GetOptions{}) + if err != nil { + t.Error("Failed to get testToken") + } else { + if token.InactivityTimeoutSeconds != 0 { + t.Errorf("Expected timeout of 0 seconds, found: %d", token.InactivityTimeoutSeconds) + } + } +} + +type fakeOAuthClientLister struct { + clients oauthclient.OAuthClientInterface +} + +func (f fakeOAuthClientLister) Get(name string) (*oauthv1.OAuthClient, error) { + return f.clients.Get(context.TODO(), name, metav1.GetOptions{}) +} + +func (f fakeOAuthClientLister) List(selector labels.Selector) ([]*oauthv1.OAuthClient, error) { + panic("not used") +} + +func checkToken(t *testing.T, name string, authf authenticator.Token, tokens oauthclient.OAuthAccessTokenInterface, current clock.Clock, present bool) { + t.Helper() + userInfo, found, err := authf.AuthenticateToken(context.TODO(), name) + if present { + if !found { + t.Errorf("Did not find token %s!", name) + } + if err != nil { + t.Errorf("Unexpected error checking for token %s: %v", name, err) + } + if userInfo == nil { + t.Errorf("Did not get a user for token %s!", name) + } + } else { + if found { + token, tokenErr := tokens.Get(context.TODO(), name, metav1.GetOptions{}) + if tokenErr != nil { + t.Fatal(tokenErr) + } + t.Errorf("Found token (created=%s, timeout=%di, now=%s), but it should be gone!", + token.CreationTimestamp, token.InactivityTimeoutSeconds, current.Now()) + } + if err != errTimedout { + t.Errorf("Unexpected error checking absence of token %s: %v", name, err) + } + if userInfo != nil { + t.Errorf("Unexpected user checking absence of token %s: %v", name, userInfo) + } + } +} + +func wait(t *testing.T, c chan struct{}) { + t.Helper() + select { + case <-c: + case <-time.After(30 * time.Second): + t.Fatal("failed to see channel event") + } +} diff --git a/openshift-kube-apiserver/authentication/oauth/uidvalidator.go b/openshift-kube-apiserver/authentication/oauth/uidvalidator.go new file mode 100644 index 0000000000000..a6029e5d51030 --- /dev/null +++ b/openshift-kube-apiserver/authentication/oauth/uidvalidator.go @@ -0,0 +1,21 @@ +package oauth + +import ( + "fmt" + + oauthv1 "github.com/openshift/api/oauth/v1" + userv1 "github.com/openshift/api/user/v1" +) + +const errInvalidUIDStr = "user.UID (%s) does not match token.userUID (%s)" + +func NewUIDValidator() OAuthTokenValidator { + return OAuthTokenValidatorFunc( + func(token *oauthv1.OAuthAccessToken, user *userv1.User) error { + if string(user.UID) != token.UserUID { + return fmt.Errorf(errInvalidUIDStr, user.UID, token.UserUID) + } + return nil + }, + ) +} diff --git a/openshift-kube-apiserver/authorization/browsersafe/authorizer.go b/openshift-kube-apiserver/authorization/browsersafe/authorizer.go new file mode 100644 index 0000000000000..2b39b309f69b8 --- /dev/null +++ b/openshift-kube-apiserver/authorization/browsersafe/authorizer.go @@ -0,0 +1,107 @@ +package browsersafe + +import ( + "context" + "fmt" + + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apiserver/pkg/authorization/authorizer" +) + +const ( + proxyAction = "proxy" + unsafeProxy = "unsafeproxy" +) + +type browserSafeAuthorizer struct { + delegate authorizer.Authorizer + + // list of groups, any of which indicate the request is authenticated + authenticatedGroups sets.String +} + +func NewBrowserSafeAuthorizer(delegate authorizer.Authorizer, authenticatedGroups ...string) authorizer.Authorizer { + return &browserSafeAuthorizer{ + delegate: delegate, + authenticatedGroups: sets.NewString(authenticatedGroups...), + } +} + +func (a *browserSafeAuthorizer) Authorize(ctx context.Context, attributes authorizer.Attributes) (authorizer.Decision, string, error) { + attrs := a.getBrowserSafeAttributes(attributes) + decision, reason, err := a.delegate.Authorize(ctx, attrs) + safeAttributes, changed := attrs.(*browserSafeAttributes) + + // check if the request was not allowed and we changed the attributes + if decision == authorizer.DecisionAllow || !changed { + return decision, reason, err + } + + // if so, use this information to update the reason + return decision, safeAttributes.reason(reason), err +} + +func (a *browserSafeAuthorizer) getBrowserSafeAttributes(attributes authorizer.Attributes) authorizer.Attributes { + if !attributes.IsResourceRequest() { + return attributes + } + + isProxyVerb := attributes.GetVerb() == proxyAction + isProxySubresource := attributes.GetSubresource() == proxyAction + + if !isProxyVerb && !isProxySubresource { + // Requests to non-proxy resources don't expose HTML or HTTP-handling user content to browsers + return attributes + } + + if user := attributes.GetUser(); user != nil { + if a.authenticatedGroups.HasAny(user.GetGroups()...) { + // An authenticated request indicates this isn't a browser page load. + // Browsers cannot make direct authenticated requests. + // This depends on the API not enabling basic or cookie-based auth. + return attributes + } + } + + return &browserSafeAttributes{ + Attributes: attributes, + isProxyVerb: isProxyVerb, + isProxySubresource: isProxySubresource, + } +} + +type browserSafeAttributes struct { + authorizer.Attributes + + isProxyVerb, isProxySubresource bool +} + +func (b *browserSafeAttributes) GetVerb() string { + if b.isProxyVerb { + return unsafeProxy + } + return b.Attributes.GetVerb() +} + +func (b *browserSafeAttributes) GetSubresource() string { + if b.isProxySubresource { + return unsafeProxy + } + return b.Attributes.GetSubresource() +} + +func (b *browserSafeAttributes) reason(reason string) string { + if b.isProxyVerb { + if len(reason) != 0 { + reason += ", " + } + reason += fmt.Sprintf("%s verb changed to %s", proxyAction, unsafeProxy) + } + if b.isProxySubresource { + if len(reason) != 0 { + reason += ", " + } + reason += fmt.Sprintf("%s subresource changed to %s", proxyAction, unsafeProxy) + } + return reason +} diff --git a/openshift-kube-apiserver/authorization/browsersafe/authorizer_test.go b/openshift-kube-apiserver/authorization/browsersafe/authorizer_test.go new file mode 100644 index 0000000000000..1d14a86daddeb --- /dev/null +++ b/openshift-kube-apiserver/authorization/browsersafe/authorizer_test.go @@ -0,0 +1,80 @@ +package browsersafe + +import ( + "context" + "testing" + + "k8s.io/apiserver/pkg/authentication/user" + "k8s.io/apiserver/pkg/authorization/authorizer" +) + +func TestBrowserSafeAuthorizer(t *testing.T) { + for name, tc := range map[string]struct { + attributes authorizer.Attributes + + expectedVerb string + expectedSubresource string + expectedReason string + }{ + "non-resource": { + attributes: authorizer.AttributesRecord{ResourceRequest: false, Verb: "GET"}, + expectedVerb: "GET", + }, + + "non-proxy": { + attributes: authorizer.AttributesRecord{ResourceRequest: true, Verb: "get", Resource: "pods", Subresource: "logs"}, + expectedVerb: "get", + expectedSubresource: "logs", + }, + + "unsafe proxy subresource": { + attributes: authorizer.AttributesRecord{ResourceRequest: true, Verb: "get", Resource: "pods", Subresource: "proxy"}, + expectedVerb: "get", + expectedSubresource: "unsafeproxy", + expectedReason: "proxy subresource changed to unsafeproxy", + }, + "unsafe proxy verb": { + attributes: authorizer.AttributesRecord{ResourceRequest: true, Verb: "proxy", Resource: "nodes"}, + expectedVerb: "unsafeproxy", + expectedReason: "proxy verb changed to unsafeproxy", + }, + "unsafe proxy verb anonymous": { + attributes: authorizer.AttributesRecord{ResourceRequest: true, Verb: "proxy", Resource: "nodes", + User: &user.DefaultInfo{Name: "system:anonymous", Groups: []string{"system:unauthenticated"}}}, + expectedVerb: "unsafeproxy", + expectedReason: "proxy verb changed to unsafeproxy", + }, + + "proxy subresource authenticated": { + attributes: authorizer.AttributesRecord{ResourceRequest: true, Verb: "get", Resource: "pods", Subresource: "proxy", + User: &user.DefaultInfo{Name: "bob", Groups: []string{"system:authenticated"}}}, + expectedVerb: "get", + expectedSubresource: "proxy", + }, + } { + delegateAuthorizer := &recordingAuthorizer{} + safeAuthorizer := NewBrowserSafeAuthorizer(delegateAuthorizer, "system:authenticated") + + authorized, reason, err := safeAuthorizer.Authorize(context.TODO(), tc.attributes) + if authorized == authorizer.DecisionAllow || reason != tc.expectedReason || err != nil { + t.Errorf("%s: unexpected output: %v %s %v", name, authorized, reason, err) + continue + } + + if delegateAuthorizer.attributes.GetVerb() != tc.expectedVerb { + t.Errorf("%s: expected verb %s, got %s", name, tc.expectedVerb, delegateAuthorizer.attributes.GetVerb()) + } + if delegateAuthorizer.attributes.GetSubresource() != tc.expectedSubresource { + t.Errorf("%s: expected verb %s, got %s", name, tc.expectedSubresource, delegateAuthorizer.attributes.GetSubresource()) + } + } +} + +type recordingAuthorizer struct { + attributes authorizer.Attributes +} + +func (t *recordingAuthorizer) Authorize(_ context.Context, a authorizer.Attributes) (authorized authorizer.Decision, reason string, err error) { + t.attributes = a + return authorizer.DecisionNoOpinion, "", nil +} diff --git a/openshift-kube-apiserver/authorization/scopeauthorizer/authorizer.go b/openshift-kube-apiserver/authorization/scopeauthorizer/authorizer.go new file mode 100644 index 0000000000000..989f70609528d --- /dev/null +++ b/openshift-kube-apiserver/authorization/scopeauthorizer/authorizer.go @@ -0,0 +1,49 @@ +package scopeauthorizer + +import ( + "context" + "fmt" + + "k8s.io/apiserver/pkg/authorization/authorizer" + rbaclisters "k8s.io/client-go/listers/rbac/v1" + authorizerrbac "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac" + + authorizationv1 "github.com/openshift/api/authorization/v1" + "github.com/openshift/apiserver-library-go/pkg/authorization/scope" +) + +type scopeAuthorizer struct { + clusterRoleGetter rbaclisters.ClusterRoleLister +} + +func NewAuthorizer(clusterRoleGetter rbaclisters.ClusterRoleLister) authorizer.Authorizer { + return &scopeAuthorizer{clusterRoleGetter: clusterRoleGetter} +} + +func (a *scopeAuthorizer) Authorize(ctx context.Context, attributes authorizer.Attributes) (authorizer.Decision, string, error) { + user := attributes.GetUser() + if user == nil { + return authorizer.DecisionNoOpinion, "", fmt.Errorf("user missing from context") + } + + scopes := user.GetExtra()[authorizationv1.ScopesKey] + if len(scopes) == 0 { + return authorizer.DecisionNoOpinion, "", nil + } + + nonFatalErrors := "" + + // scopeResolutionErrors aren't fatal. If any of the scopes we find allow this, then the overall scope limits allow it + rules, err := scope.ScopesToRules(scopes, attributes.GetNamespace(), a.clusterRoleGetter) + if err != nil { + nonFatalErrors = fmt.Sprintf(", additionally the following non-fatal errors were reported: %v", err) + } + + // check rules against attributes + if authorizerrbac.RulesAllow(attributes, rules...) { + return authorizer.DecisionNoOpinion, "", nil + } + + // the scope prevent this. We need to authoritatively deny + return authorizer.DecisionDeny, fmt.Sprintf("scopes %v prevent this action%s", scopes, nonFatalErrors), nil +} diff --git a/openshift-kube-apiserver/authorization/scopeauthorizer/authorizer_test.go b/openshift-kube-apiserver/authorization/scopeauthorizer/authorizer_test.go new file mode 100644 index 0000000000000..9b73e6c2e23ac --- /dev/null +++ b/openshift-kube-apiserver/authorization/scopeauthorizer/authorizer_test.go @@ -0,0 +1,150 @@ +package scopeauthorizer + +import ( + "context" + "strings" + "testing" + + "k8s.io/apiserver/pkg/authentication/user" + kauthorizer "k8s.io/apiserver/pkg/authorization/authorizer" + + authorizationv1 "github.com/openshift/api/authorization/v1" +) + +func TestAuthorize(t *testing.T) { + testCases := []struct { + name string + attributes kauthorizer.AttributesRecord + expectedAllowed kauthorizer.Decision + expectedErr string + expectedMsg string + }{ + { + name: "no user", + attributes: kauthorizer.AttributesRecord{ + ResourceRequest: true, + Namespace: "ns", + }, + expectedAllowed: kauthorizer.DecisionNoOpinion, + expectedErr: `user missing from context`, + }, + { + name: "no extra", + attributes: kauthorizer.AttributesRecord{ + User: &user.DefaultInfo{}, + ResourceRequest: true, + Namespace: "ns", + }, + expectedAllowed: kauthorizer.DecisionNoOpinion, + }, + { + name: "empty extra", + attributes: kauthorizer.AttributesRecord{ + User: &user.DefaultInfo{Extra: map[string][]string{}}, + ResourceRequest: true, + Namespace: "ns", + }, + expectedAllowed: kauthorizer.DecisionNoOpinion, + }, + { + name: "empty scopes", + attributes: kauthorizer.AttributesRecord{ + User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {}}}, + ResourceRequest: true, + Namespace: "ns", + }, + expectedAllowed: kauthorizer.DecisionNoOpinion, + }, + { + name: "bad scope", + attributes: kauthorizer.AttributesRecord{ + User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {"does-not-exist"}}}, + ResourceRequest: true, + Namespace: "ns", + }, + expectedAllowed: kauthorizer.DecisionDeny, + expectedMsg: `scopes [does-not-exist] prevent this action, additionally the following non-fatal errors were reported: no scope evaluator found for "does-not-exist"`, + }, + { + name: "bad scope 2", + attributes: kauthorizer.AttributesRecord{ + User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {"role:dne"}}}, + ResourceRequest: true, + Namespace: "ns", + }, + expectedAllowed: kauthorizer.DecisionDeny, + expectedMsg: `scopes [role:dne] prevent this action, additionally the following non-fatal errors were reported: bad format for scope role:dne`, + }, + { + name: "scope doesn't cover", + attributes: kauthorizer.AttributesRecord{ + User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {"user:info"}}}, + ResourceRequest: true, + Namespace: "ns", + Verb: "get", Resource: "users", Name: "harold"}, + expectedAllowed: kauthorizer.DecisionDeny, + expectedMsg: `scopes [user:info] prevent this action`, + }, + { + name: "scope covers", + attributes: kauthorizer.AttributesRecord{ + User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {"user:info"}}}, + ResourceRequest: true, + Namespace: "ns", + Verb: "get", Resource: "users", Name: "~"}, + expectedAllowed: kauthorizer.DecisionNoOpinion, + }, + { + name: "scope covers for discovery", + attributes: kauthorizer.AttributesRecord{ + User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {"user:info"}}}, + ResourceRequest: false, + Namespace: "ns", + Verb: "get", Path: "/api"}, + expectedAllowed: kauthorizer.DecisionNoOpinion, + }, + { + name: "user:full covers any resource", + attributes: kauthorizer.AttributesRecord{ + User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {"user:full"}}}, + ResourceRequest: true, + Namespace: "ns", + Verb: "update", Resource: "users", Name: "harold"}, + expectedAllowed: kauthorizer.DecisionNoOpinion, + }, + { + name: "user:full covers any non-resource", + attributes: kauthorizer.AttributesRecord{ + User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {"user:full"}}}, + ResourceRequest: false, + Namespace: "ns", + Verb: "post", Path: "/foo/bar/baz"}, + expectedAllowed: kauthorizer.DecisionNoOpinion, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + authorizer := NewAuthorizer(nil) + + actualAllowed, actualMsg, actualErr := authorizer.Authorize(context.TODO(), tc.attributes) + switch { + case len(tc.expectedErr) == 0 && actualErr == nil: + case len(tc.expectedErr) == 0 && actualErr != nil: + t.Errorf("%s: unexpected error: %v", tc.name, actualErr) + case len(tc.expectedErr) != 0 && actualErr == nil: + t.Errorf("%s: missing error: %v", tc.name, tc.expectedErr) + case len(tc.expectedErr) != 0 && actualErr != nil: + if !strings.Contains(actualErr.Error(), tc.expectedErr) { + t.Errorf("expected %v, got %v", tc.expectedErr, actualErr) + } + } + if tc.expectedMsg != actualMsg { + t.Errorf("expected %v, got %v", tc.expectedMsg, actualMsg) + } + if tc.expectedAllowed != actualAllowed { + t.Errorf("expected %v, got %v", tc.expectedAllowed, actualAllowed) + } + }) + } +} diff --git a/openshift-kube-apiserver/configdefault/kubecontrolplane_default.go b/openshift-kube-apiserver/configdefault/kubecontrolplane_default.go new file mode 100644 index 0000000000000..7e48ecea2ec9a --- /dev/null +++ b/openshift-kube-apiserver/configdefault/kubecontrolplane_default.go @@ -0,0 +1,115 @@ +package configdefault + +import ( + "io/ioutil" + "os" + "path/filepath" + + kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" + "github.com/openshift/library-go/pkg/config/configdefaults" + "k8s.io/klog/v2" +) + +// ResolveDirectoriesForSATokenVerification takes our config (which allows directories) and navigates one level of +// those directories for files. This makes it easy to build a single configmap that contains lots of aggregated files. +// if we fail to open the file for inspection, the resolving code in kube-apiserver may have drifted from us +// we include the raw file and let the kube-apiserver succeed or fail. +func ResolveDirectoriesForSATokenVerification(config *kubecontrolplanev1.KubeAPIServerConfig) { + // kube doesn't honor directories, but we want to allow them in our sa token validators + resolvedSATokenValidationCerts := []string{} + for _, filename := range config.ServiceAccountPublicKeyFiles { + file, err := os.Open(filename) + if err != nil { + resolvedSATokenValidationCerts = append(resolvedSATokenValidationCerts, filename) + klog.Warningf(err.Error()) + continue + } + fileInfo, err := file.Stat() + if err != nil { + resolvedSATokenValidationCerts = append(resolvedSATokenValidationCerts, filename) + klog.Warningf(err.Error()) + continue + } + if !fileInfo.IsDir() { + resolvedSATokenValidationCerts = append(resolvedSATokenValidationCerts, filename) + continue + } + + contents, err := ioutil.ReadDir(filename) + switch { + case os.IsNotExist(err) || os.IsPermission(err): + klog.Warningf(err.Error()) + case err != nil: + panic(err) // some weird, unexpected error + default: + for _, content := range contents { + if !content.Mode().IsRegular() { + continue + } + resolvedSATokenValidationCerts = append(resolvedSATokenValidationCerts, filepath.Join(filename, content.Name())) + } + } + } + + config.ServiceAccountPublicKeyFiles = resolvedSATokenValidationCerts +} + +func SetRecommendedKubeAPIServerConfigDefaults(config *kubecontrolplanev1.KubeAPIServerConfig) { + configdefaults.DefaultString(&config.GenericAPIServerConfig.StorageConfig.StoragePrefix, "kubernetes.io") + configdefaults.DefaultString(&config.GenericAPIServerConfig.ServingInfo.BindAddress, "0.0.0.0:6443") + + configdefaults.SetRecommendedGenericAPIServerConfigDefaults(&config.GenericAPIServerConfig) + SetRecommendedMasterAuthConfigDefaults(&config.AuthConfig) + SetRecommendedAggregatorConfigDefaults(&config.AggregatorConfig) + SetRecommendedKubeletConnectionInfoDefaults(&config.KubeletClientInfo) + + configdefaults.DefaultString(&config.ServicesSubnet, "10.0.0.0/24") + configdefaults.DefaultString(&config.ServicesNodePortRange, "30000-32767") + + if len(config.ServiceAccountPublicKeyFiles) == 0 { + config.ServiceAccountPublicKeyFiles = append([]string{}, "/etc/kubernetes/static-pod-resources/configmaps/sa-token-signing-certs") + } + + // after the aggregator defaults are set, we can default the auth config values + // TODO this indicates that we're set two different things to the same value + if config.AuthConfig.RequestHeader == nil { + config.AuthConfig.RequestHeader = &kubecontrolplanev1.RequestHeaderAuthenticationOptions{} + configdefaults.DefaultStringSlice(&config.AuthConfig.RequestHeader.ClientCommonNames, []string{"system:openshift-aggregator"}) + configdefaults.DefaultString(&config.AuthConfig.RequestHeader.ClientCA, "/var/run/configmaps/aggregator-client-ca/ca-bundle.crt") + configdefaults.DefaultStringSlice(&config.AuthConfig.RequestHeader.UsernameHeaders, []string{"X-Remote-User"}) + configdefaults.DefaultStringSlice(&config.AuthConfig.RequestHeader.GroupHeaders, []string{"X-Remote-Group"}) + configdefaults.DefaultStringSlice(&config.AuthConfig.RequestHeader.ExtraHeaderPrefixes, []string{"X-Remote-Extra-"}) + } + + // Set defaults Cache TTLs for external Webhook Token Reviewers + for i := range config.AuthConfig.WebhookTokenAuthenticators { + if len(config.AuthConfig.WebhookTokenAuthenticators[i].CacheTTL) == 0 { + config.AuthConfig.WebhookTokenAuthenticators[i].CacheTTL = "2m" + } + } + + if config.OAuthConfig != nil { + for i := range config.OAuthConfig.IdentityProviders { + // By default, only let one identity provider authenticate a particular user + // If multiple identity providers collide, the second one in will fail to auth + // The admin can set this to "add" if they want to allow new identities to join existing users + configdefaults.DefaultString(&config.OAuthConfig.IdentityProviders[i].MappingMethod, "claim") + } + } +} + +func SetRecommendedMasterAuthConfigDefaults(config *kubecontrolplanev1.MasterAuthConfig) { +} + +func SetRecommendedAggregatorConfigDefaults(config *kubecontrolplanev1.AggregatorConfig) { + configdefaults.DefaultString(&config.ProxyClientInfo.KeyFile, "/var/run/secrets/aggregator-client/tls.key") + configdefaults.DefaultString(&config.ProxyClientInfo.CertFile, "/var/run/secrets/aggregator-client/tls.crt") +} + +func SetRecommendedKubeletConnectionInfoDefaults(config *kubecontrolplanev1.KubeletConnectionInfo) { + if config.Port == 0 { + config.Port = 10250 + } + configdefaults.DefaultString(&config.CertInfo.KeyFile, "/var/run/secrets/kubelet-client/tls.key") + configdefaults.DefaultString(&config.CertInfo.CertFile, "/var/run/secrets/kubelet-client/tls.crt") +} diff --git a/openshift-kube-apiserver/configdefault/kubecontrolplane_refs.go b/openshift-kube-apiserver/configdefault/kubecontrolplane_refs.go new file mode 100644 index 0000000000000..449952e5650d1 --- /dev/null +++ b/openshift-kube-apiserver/configdefault/kubecontrolplane_refs.go @@ -0,0 +1,122 @@ +package configdefault + +import ( + kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" + osinv1 "github.com/openshift/api/osin/v1" + "github.com/openshift/library-go/pkg/config/helpers" +) + +func GetKubeAPIServerConfigFileReferences(config *kubecontrolplanev1.KubeAPIServerConfig) []*string { + if config == nil { + return []*string{} + } + + refs := []*string{} + + refs = append(refs, helpers.GetGenericAPIServerConfigFileReferences(&config.GenericAPIServerConfig)...) + refs = append(refs, GetKubeletConnectionInfoFileReferences(&config.KubeletClientInfo)...) + + if config.OAuthConfig != nil { + refs = append(refs, GetOAuthConfigFileReferences(config.OAuthConfig)...) + } + + refs = append(refs, &config.AggregatorConfig.ProxyClientInfo.CertFile) + refs = append(refs, &config.AggregatorConfig.ProxyClientInfo.KeyFile) + + if config.AuthConfig.RequestHeader != nil { + refs = append(refs, &config.AuthConfig.RequestHeader.ClientCA) + } + for k := range config.AuthConfig.WebhookTokenAuthenticators { + refs = append(refs, &config.AuthConfig.WebhookTokenAuthenticators[k].ConfigFile) + } + if len(config.AuthConfig.OAuthMetadataFile) > 0 { + refs = append(refs, &config.AuthConfig.OAuthMetadataFile) + } + + refs = append(refs, &config.AggregatorConfig.ProxyClientInfo.CertFile) + refs = append(refs, &config.AggregatorConfig.ProxyClientInfo.KeyFile) + + for i := range config.ServiceAccountPublicKeyFiles { + refs = append(refs, &config.ServiceAccountPublicKeyFiles[i]) + } + + return refs +} + +func GetKubeletConnectionInfoFileReferences(config *kubecontrolplanev1.KubeletConnectionInfo) []*string { + if config == nil { + return []*string{} + } + + refs := []*string{} + refs = append(refs, helpers.GetCertFileReferences(&config.CertInfo)...) + refs = append(refs, &config.CA) + return refs +} + +func GetOAuthConfigFileReferences(config *osinv1.OAuthConfig) []*string { + if config == nil { + return []*string{} + } + + refs := []*string{} + + if config.MasterCA != nil { + refs = append(refs, config.MasterCA) + } + + refs = append(refs, GetSessionConfigFileReferences(config.SessionConfig)...) + for _, identityProvider := range config.IdentityProviders { + switch provider := identityProvider.Provider.Object.(type) { + case (*osinv1.RequestHeaderIdentityProvider): + refs = append(refs, &provider.ClientCA) + + case (*osinv1.HTPasswdPasswordIdentityProvider): + refs = append(refs, &provider.File) + + case (*osinv1.LDAPPasswordIdentityProvider): + refs = append(refs, &provider.CA) + refs = append(refs, helpers.GetStringSourceFileReferences(&provider.BindPassword)...) + + case (*osinv1.BasicAuthPasswordIdentityProvider): + refs = append(refs, helpers.GetRemoteConnectionInfoFileReferences(&provider.RemoteConnectionInfo)...) + + case (*osinv1.KeystonePasswordIdentityProvider): + refs = append(refs, helpers.GetRemoteConnectionInfoFileReferences(&provider.RemoteConnectionInfo)...) + + case (*osinv1.GitLabIdentityProvider): + refs = append(refs, &provider.CA) + refs = append(refs, helpers.GetStringSourceFileReferences(&provider.ClientSecret)...) + + case (*osinv1.OpenIDIdentityProvider): + refs = append(refs, &provider.CA) + refs = append(refs, helpers.GetStringSourceFileReferences(&provider.ClientSecret)...) + + case (*osinv1.GoogleIdentityProvider): + refs = append(refs, helpers.GetStringSourceFileReferences(&provider.ClientSecret)...) + + case (*osinv1.GitHubIdentityProvider): + refs = append(refs, helpers.GetStringSourceFileReferences(&provider.ClientSecret)...) + refs = append(refs, &provider.CA) + + } + } + + if config.Templates != nil { + refs = append(refs, &config.Templates.Login) + refs = append(refs, &config.Templates.ProviderSelection) + refs = append(refs, &config.Templates.Error) + } + + return refs +} + +func GetSessionConfigFileReferences(config *osinv1.SessionConfig) []*string { + if config == nil { + return []*string{} + } + + refs := []*string{} + refs = append(refs, &config.SessionSecretsFile) + return refs +} diff --git a/openshift-kube-apiserver/enablement/enablement.go b/openshift-kube-apiserver/enablement/enablement.go new file mode 100644 index 0000000000000..d955f66825181 --- /dev/null +++ b/openshift-kube-apiserver/enablement/enablement.go @@ -0,0 +1,71 @@ +package enablement + +import ( + "fmt" + "runtime/debug" + + kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" + genericapiserver "k8s.io/apiserver/pkg/server" + "k8s.io/client-go/rest" +) + +func ForceOpenShift(newOpenshiftConfig *kubecontrolplanev1.KubeAPIServerConfig) { + isOpenShift = true + openshiftConfig = newOpenshiftConfig +} + +func SetLoopbackClientConfig(kubeClientConfig *rest.Config) { + loopbackClientConfig = rest.CopyConfig(kubeClientConfig) +} + +var ( + isOpenShift = false + openshiftConfig *kubecontrolplanev1.KubeAPIServerConfig + postStartHooks = map[string]PostStartHookConfigEntry{} + appendPostStartHooksCalled = false + loopbackClientConfig *rest.Config +) + +type PostStartHookConfigEntry struct { + Hook genericapiserver.PostStartHookFunc + // originatingStack holds the stack that registered postStartHooks. This allows us to show a more helpful message + // for duplicate registration. + OriginatingStack string +} + +func IsOpenShift() bool { + return isOpenShift +} + +func OpenshiftConfig() *kubecontrolplanev1.KubeAPIServerConfig { + return openshiftConfig +} + +func LoopbackClientConfig() *rest.Config { + return loopbackClientConfig +} + +func AddPostStartHookOrDie(name string, hook genericapiserver.PostStartHookFunc) { + if appendPostStartHooksCalled { + panic(fmt.Errorf("already appended post start hooks")) + } + if len(name) == 0 { + panic(fmt.Errorf("missing name")) + } + if hook == nil { + panic(fmt.Errorf("hook func may not be nil: %q", name)) + } + + if postStartHook, exists := postStartHooks[name]; exists { + // this is programmer error, but it can be hard to debug + panic(fmt.Errorf("unable to add %q because it was already registered by: %s", name, postStartHook.OriginatingStack)) + } + postStartHooks[name] = PostStartHookConfigEntry{Hook: hook, OriginatingStack: string(debug.Stack())} +} + +func AppendPostStartHooksOrDie(config *genericapiserver.Config) { + appendPostStartHooksCalled = true + for name, curr := range postStartHooks { + config.AddPostStartHookOrDie(name, curr.Hook) + } +} diff --git a/openshift-kube-apiserver/enablement/intialization.go b/openshift-kube-apiserver/enablement/intialization.go new file mode 100644 index 0000000000000..37da08f69ed09 --- /dev/null +++ b/openshift-kube-apiserver/enablement/intialization.go @@ -0,0 +1,81 @@ +package enablement + +import ( + "io/ioutil" + "path" + + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/client-go/tools/clientcmd/api" + aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver" + "k8s.io/kubernetes/openshift-kube-apiserver/configdefault" + "k8s.io/kubernetes/pkg/capabilities" + kubelettypes "k8s.io/kubernetes/pkg/kubelet/types" + "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy" + + configv1 "github.com/openshift/api/config/v1" + kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" + osinv1 "github.com/openshift/api/osin/v1" + "github.com/openshift/library-go/pkg/config/helpers" +) + +func GetOpenshiftConfig(openshiftConfigFile string) (*kubecontrolplanev1.KubeAPIServerConfig, error) { + // try to decode into our new types first. right now there is no validation, no file path resolution. this unsticks the operator to start. + // TODO add those things + configContent, err := ioutil.ReadFile(openshiftConfigFile) + if err != nil { + return nil, err + } + scheme := runtime.NewScheme() + utilruntime.Must(kubecontrolplanev1.Install(scheme)) + codecs := serializer.NewCodecFactory(scheme) + obj, err := runtime.Decode(codecs.UniversalDecoder(kubecontrolplanev1.GroupVersion, configv1.GroupVersion, osinv1.GroupVersion), configContent) + if err != nil { + + return nil, err + } + + // Resolve relative to CWD + absoluteConfigFile, err := api.MakeAbs(openshiftConfigFile, "") + if err != nil { + return nil, err + } + configFileLocation := path.Dir(absoluteConfigFile) + + config := obj.(*kubecontrolplanev1.KubeAPIServerConfig) + if err := helpers.ResolvePaths(configdefault.GetKubeAPIServerConfigFileReferences(config), configFileLocation); err != nil { + return nil, err + } + configdefault.SetRecommendedKubeAPIServerConfigDefaults(config) + configdefault.ResolveDirectoriesForSATokenVerification(config) + + return config, nil +} + +func ForceGlobalInitializationForOpenShift() { + // This allows to move crqs, sccs, and rbrs to CRD + aggregatorapiserver.AddAlwaysLocalDelegateForPrefix("/apis/quota.openshift.io/v1/clusterresourcequotas") + aggregatorapiserver.AddAlwaysLocalDelegateForPrefix("/apis/security.openshift.io/v1/securitycontextconstraints") + aggregatorapiserver.AddAlwaysLocalDelegateForPrefix("/apis/authorization.openshift.io/v1/rolebindingrestrictions") + aggregatorapiserver.AddAlwaysLocalDelegateGroupResource(schema.GroupResource{Group: "authorization.openshift.io", Resource: "rolebindingrestrictions"}) + + // This allows the CRD registration to avoid fighting with the APIService from the operator + aggregatorapiserver.AddOverlappingGroupVersion(schema.GroupVersion{Group: "authorization.openshift.io", Version: "v1"}) + + // Allow privileged containers + capabilities.Initialize(capabilities.Capabilities{ + AllowPrivileged: true, + PrivilegedSources: capabilities.PrivilegedSources{ + HostNetworkSources: []string{kubelettypes.ApiserverSource, kubelettypes.FileSource}, + HostPIDSources: []string{kubelettypes.ApiserverSource, kubelettypes.FileSource}, + HostIPCSources: []string{kubelettypes.ApiserverSource, kubelettypes.FileSource}, + }, + }) + + // add permissions we require on our kube-apiserver + // TODO, we should scrub these out + bootstrappolicy.ClusterRoles = bootstrappolicy.OpenshiftClusterRoles + bootstrappolicy.ClusterRoleBindings = bootstrappolicy.OpenshiftClusterRoleBindings +} diff --git a/openshift-kube-apiserver/openshiftkubeapiserver/flags.go b/openshift-kube-apiserver/openshiftkubeapiserver/flags.go new file mode 100644 index 0000000000000..b3faf6bd5452d --- /dev/null +++ b/openshift-kube-apiserver/openshiftkubeapiserver/flags.go @@ -0,0 +1,222 @@ +package openshiftkubeapiserver + +import ( + "fmt" + "io/ioutil" + "net" + "strings" + + configv1 "github.com/openshift/api/config/v1" + kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" + "github.com/openshift/apiserver-library-go/pkg/configflags" + "github.com/openshift/library-go/pkg/config/helpers" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/sets" + apiserverv1alpha1 "k8s.io/apiserver/pkg/apis/apiserver/v1alpha1" +) + +func ConfigToFlags(kubeAPIServerConfig *kubecontrolplanev1.KubeAPIServerConfig) ([]string, error) { + args := unmaskArgs(kubeAPIServerConfig.APIServerArguments) + + host, portString, err := net.SplitHostPort(kubeAPIServerConfig.ServingInfo.BindAddress) + if err != nil { + return nil, err + } + + // TODO this list (and the content below) will be used to drive a config struct and a reflective test matching config to flags + // these flags are overridden by a patch + // admission-control + // authentication-token-webhook-cache-ttl + // authentication-token-webhook-config-file + // authorization-mode + // authorization-policy-file + // authorization-webhook-cache-authorized-ttl + // authorization-webhook-cache-unauthorized-ttl + // authorization-webhook-config-file + // basic-auth-file + // enable-aggregator-routing + // enable-bootstrap-token-auth + // oidc-client-id + // oidc-groups-claim + // oidc-groups-prefix + // oidc-issuer-url + // oidc-required-claim + // oidc-signing-algs + // oidc-username-claim + // oidc-username-prefix + // token-auth-file + + // alsologtostderr - don't know whether to change it + // apiserver-count - ignored, hopefully we don't have to fix via patch + // cert-dir - ignored because we set certs + + // these flags were never supported via config + // cloud-config + // cloud-provider + // cloud-provider-gce-lb-src-cidrs + // contention-profiling + // default-not-ready-toleration-seconds + // default-unreachable-toleration-seconds + // default-watch-cache-size + // delete-collection-workers + // deserialization-cache-size + // enable-garbage-collector + // etcd-compaction-interval + // etcd-count-metric-poll-period + // etcd-servers-overrides + // experimental-encryption-provider-config + // feature-gates + // http2-max-streams-per-connection + // insecure-bind-address + // kubelet-timeout + // log-backtrace-at + // log-dir + // log-flush-frequency + // logtostderr + // master-service-namespace + // max-connection-bytes-per-sec + // profiling + // request-timeout + // runtime-config + // service-account-api-audiences + // service-account-issuer + // service-account-key-file + // service-account-max-token-expiration + // stderrthreshold + // storage-versions + // target-ram-mb + // v + // version + // vmodule + // watch-cache + // watch-cache-sizes + + // TODO, we need to set these in order to enable the right admission plugins in each of the servers + // TODO this is needed for a viable cluster up + admissionFlags, err := admissionFlags(kubeAPIServerConfig.AdmissionConfig) + if err != nil { + return nil, err + } + for flag, value := range admissionFlags { + configflags.SetIfUnset(args, flag, value...) + } + configflags.SetIfUnset(args, "allow-privileged", "true") + configflags.SetIfUnset(args, "anonymous-auth", "true") + configflags.SetIfUnset(args, "authorization-mode", "RBAC", "Node") // overridden later, but this runs the poststarthook for bootstrapping RBAC + for flag, value := range configflags.AuditFlags(&kubeAPIServerConfig.AuditConfig, configflags.ArgsWithPrefix(args, "audit-")) { + configflags.SetIfUnset(args, flag, value...) + } + configflags.SetIfUnset(args, "bind-address", host) + configflags.SetIfUnset(args, "client-ca-file", kubeAPIServerConfig.ServingInfo.ClientCA) + configflags.SetIfUnset(args, "cors-allowed-origins", kubeAPIServerConfig.CORSAllowedOrigins...) + configflags.SetIfUnset(args, "enable-logs-handler", "false") + configflags.SetIfUnset(args, "enable-swagger-ui", "true") + configflags.SetIfUnset(args, "endpoint-reconciler-type", "lease") + configflags.SetIfUnset(args, "etcd-cafile", kubeAPIServerConfig.StorageConfig.CA) + configflags.SetIfUnset(args, "etcd-certfile", kubeAPIServerConfig.StorageConfig.CertFile) + configflags.SetIfUnset(args, "etcd-keyfile", kubeAPIServerConfig.StorageConfig.KeyFile) + configflags.SetIfUnset(args, "etcd-prefix", kubeAPIServerConfig.StorageConfig.StoragePrefix) + configflags.SetIfUnset(args, "etcd-servers", kubeAPIServerConfig.StorageConfig.URLs...) + configflags.SetIfUnset(args, "event-ttl", "3h") // set a TTL long enough to last for our CI tests so we see the first set of events. + configflags.SetIfUnset(args, "insecure-port", "0") + configflags.SetIfUnset(args, "kubelet-certificate-authority", kubeAPIServerConfig.KubeletClientInfo.CA) + configflags.SetIfUnset(args, "kubelet-client-certificate", kubeAPIServerConfig.KubeletClientInfo.CertFile) + configflags.SetIfUnset(args, "kubelet-client-key", kubeAPIServerConfig.KubeletClientInfo.KeyFile) + configflags.SetIfUnset(args, "kubelet-https", "true") + configflags.SetIfUnset(args, "kubelet-preferred-address-types", "Hostname", "InternalIP", "ExternalIP") + configflags.SetIfUnset(args, "kubelet-read-only-port", "0") + configflags.SetIfUnset(args, "kubernetes-service-node-port", "0") + configflags.SetIfUnset(args, "max-mutating-requests-inflight", fmt.Sprintf("%d", kubeAPIServerConfig.ServingInfo.MaxRequestsInFlight/2)) + configflags.SetIfUnset(args, "max-requests-inflight", fmt.Sprintf("%d", kubeAPIServerConfig.ServingInfo.MaxRequestsInFlight)) + configflags.SetIfUnset(args, "min-request-timeout", fmt.Sprintf("%d", kubeAPIServerConfig.ServingInfo.RequestTimeoutSeconds)) + configflags.SetIfUnset(args, "proxy-client-cert-file", kubeAPIServerConfig.AggregatorConfig.ProxyClientInfo.CertFile) + configflags.SetIfUnset(args, "proxy-client-key-file", kubeAPIServerConfig.AggregatorConfig.ProxyClientInfo.KeyFile) + configflags.SetIfUnset(args, "requestheader-allowed-names", kubeAPIServerConfig.AuthConfig.RequestHeader.ClientCommonNames...) + configflags.SetIfUnset(args, "requestheader-client-ca-file", kubeAPIServerConfig.AuthConfig.RequestHeader.ClientCA) + configflags.SetIfUnset(args, "requestheader-extra-headers-prefix", kubeAPIServerConfig.AuthConfig.RequestHeader.ExtraHeaderPrefixes...) + configflags.SetIfUnset(args, "requestheader-group-headers", kubeAPIServerConfig.AuthConfig.RequestHeader.GroupHeaders...) + configflags.SetIfUnset(args, "requestheader-username-headers", kubeAPIServerConfig.AuthConfig.RequestHeader.UsernameHeaders...) + configflags.SetIfUnset(args, "secure-port", portString) + configflags.SetIfUnset(args, "service-account-key-file", kubeAPIServerConfig.ServiceAccountPublicKeyFiles...) + configflags.SetIfUnset(args, "service-account-lookup", "true") + configflags.SetIfUnset(args, "service-cluster-ip-range", kubeAPIServerConfig.ServicesSubnet) + configflags.SetIfUnset(args, "service-node-port-range", kubeAPIServerConfig.ServicesNodePortRange) + configflags.SetIfUnset(args, "storage-backend", "etcd3") + configflags.SetIfUnset(args, "storage-media-type", "application/vnd.kubernetes.protobuf") + configflags.SetIfUnset(args, "tls-cert-file", kubeAPIServerConfig.ServingInfo.CertFile) + configflags.SetIfUnset(args, "tls-cipher-suites", kubeAPIServerConfig.ServingInfo.CipherSuites...) + configflags.SetIfUnset(args, "tls-min-version", kubeAPIServerConfig.ServingInfo.MinTLSVersion) + configflags.SetIfUnset(args, "tls-private-key-file", kubeAPIServerConfig.ServingInfo.KeyFile) + configflags.SetIfUnset(args, "tls-sni-cert-key", sniCertKeys(kubeAPIServerConfig.ServingInfo.NamedCertificates)...) + configflags.SetIfUnset(args, "secure-port", portString) + + return configflags.ToFlagSlice(args), nil +} + +func admissionFlags(admissionConfig configv1.AdmissionConfig) (map[string][]string, error) { + args := map[string][]string{} + + upstreamAdmissionConfig, err := ConvertOpenshiftAdmissionConfigToKubeAdmissionConfig(admissionConfig.PluginConfig) + if err != nil { + return nil, err + } + configBytes, err := helpers.WriteYAML(upstreamAdmissionConfig, apiserverv1alpha1.AddToScheme) + if err != nil { + return nil, err + } + + tempFile, err := ioutil.TempFile("", "kubeapiserver-admission-config.yaml") + if err != nil { + return nil, err + } + if _, err := tempFile.Write(configBytes); err != nil { + return nil, err + } + tempFile.Close() + + configflags.SetIfUnset(args, "admission-control-config-file", tempFile.Name()) + configflags.SetIfUnset(args, "disable-admission-plugins", admissionConfig.DisabledAdmissionPlugins...) + configflags.SetIfUnset(args, "enable-admission-plugins", admissionConfig.EnabledAdmissionPlugins...) + + return args, nil +} + +func sniCertKeys(namedCertificates []configv1.NamedCertificate) []string { + args := []string{} + for _, nc := range namedCertificates { + names := "" + if len(nc.Names) > 0 { + names = ":" + strings.Join(nc.Names, ",") + } + args = append(args, fmt.Sprintf("%s,%s%s", nc.CertFile, nc.KeyFile, names)) + } + return args +} + +func unmaskArgs(args map[string]kubecontrolplanev1.Arguments) map[string][]string { + ret := map[string][]string{} + for key, slice := range args { + for _, val := range slice { + ret[key] = append(ret[key], val) + } + } + return ret +} + +func ConvertOpenshiftAdmissionConfigToKubeAdmissionConfig(in map[string]configv1.AdmissionPluginConfig) (*apiserverv1alpha1.AdmissionConfiguration, error) { + ret := &apiserverv1alpha1.AdmissionConfiguration{} + + for _, pluginName := range sets.StringKeySet(in).List() { + kubeConfig := apiserverv1alpha1.AdmissionPluginConfiguration{ + Name: pluginName, + Path: in[pluginName].Location, + Configuration: &runtime.Unknown{ + Raw: in[pluginName].Configuration.Raw, + }, + } + + ret.Plugins = append(ret.Plugins, kubeConfig) + } + + return ret, nil +} diff --git a/openshift-kube-apiserver/openshiftkubeapiserver/flags_test.go b/openshift-kube-apiserver/openshiftkubeapiserver/flags_test.go new file mode 100644 index 0000000000000..3241b9b432981 --- /dev/null +++ b/openshift-kube-apiserver/openshiftkubeapiserver/flags_test.go @@ -0,0 +1,26 @@ +package openshiftkubeapiserver + +import ( + "testing" + + "github.com/openshift/api/config/v1" +) + +func TestSNICertKeys(t *testing.T) { + testCases := []struct { + names []string + expected string + }{ + {names: []string{"foo"}, expected: "secret.crt,secret.key:foo"}, + {names: []string{"foo", "bar"}, expected: "secret.crt,secret.key:foo,bar"}, + {expected: "secret.crt,secret.key"}, + } + for _, tc := range testCases { + t.Run("", func(t *testing.T) { + result := sniCertKeys([]v1.NamedCertificate{{Names: tc.names, CertInfo: v1.CertInfo{CertFile: "secret.crt", KeyFile: "secret.key"}}}) + if len(result) != 1 || result[0] != tc.expected { + t.Errorf("expected: %v, actual: %v", []string{tc.expected}, result) + } + }) + } +} diff --git a/openshift-kube-apiserver/openshiftkubeapiserver/paramtoken/paramtoken.go b/openshift-kube-apiserver/openshiftkubeapiserver/paramtoken/paramtoken.go new file mode 100644 index 0000000000000..1993002e5daf8 --- /dev/null +++ b/openshift-kube-apiserver/openshiftkubeapiserver/paramtoken/paramtoken.go @@ -0,0 +1,45 @@ +package paramtoken + +import ( + "net/http" + "strings" + + "k8s.io/apiserver/pkg/authentication/authenticator" + "k8s.io/apiserver/pkg/util/wsstream" +) + +// Authenticator provides a way to authenticate tokens provided as a parameter +// This only exists to allow websocket connections to use an API token, since they cannot set an Authorize header +// For this authenticator to work, tokens will be part of the request URL, and are more likely to be logged or otherwise exposed. +// Every effort should be made to filter tokens from being logged when using this authenticator. +type Authenticator struct { + // param is the query param to use as a token + param string + // auth is the token authenticator to use to validate the token + auth authenticator.Token + // removeParam indicates whether the parameter should be stripped from the incoming request + removeParam bool +} + +func New(param string, auth authenticator.Token, removeParam bool) *Authenticator { + return &Authenticator{param, auth, removeParam} +} + +func (a *Authenticator) AuthenticateRequest(req *http.Request) (*authenticator.Response, bool, error) { + // Only accept query param auth for websocket connections + if !wsstream.IsWebSocketRequest(req) { + return nil, false, nil + } + + q := req.URL.Query() + token := strings.TrimSpace(q.Get(a.param)) + if token == "" { + return nil, false, nil + } + authResponse, ok, err := a.auth.AuthenticateToken(req.Context(), token) + if ok && a.removeParam { + q.Del(a.param) + req.URL.RawQuery = q.Encode() + } + return authResponse, ok, err +} diff --git a/openshift-kube-apiserver/openshiftkubeapiserver/patch.go b/openshift-kube-apiserver/openshiftkubeapiserver/patch.go new file mode 100644 index 0000000000000..bc29b03b11ef9 --- /dev/null +++ b/openshift-kube-apiserver/openshiftkubeapiserver/patch.go @@ -0,0 +1,157 @@ +package openshiftkubeapiserver + +import ( + "time" + + "k8s.io/kubernetes/openshift-kube-apiserver/enablement" + + "k8s.io/apiserver/pkg/admission" + genericapiserver "k8s.io/apiserver/pkg/server" + clientgoinformers "k8s.io/client-go/informers" + corev1informers "k8s.io/client-go/informers/core/v1" + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/cache" + "k8s.io/kubernetes/pkg/quota/v1/generic" + "k8s.io/kubernetes/pkg/quota/v1/install" + + kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" + "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy" + "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators" + "github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota" + "github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission" + quotaclient "github.com/openshift/client-go/quota/clientset/versioned" + quotainformer "github.com/openshift/client-go/quota/informers/externalversions" + quotav1informer "github.com/openshift/client-go/quota/informers/externalversions/quota/v1" + securityv1client "github.com/openshift/client-go/security/clientset/versioned" + securityv1informer "github.com/openshift/client-go/security/informers/externalversions" + userclient "github.com/openshift/client-go/user/clientset/versioned" + userinformer "github.com/openshift/client-go/user/informers/externalversions" + "github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig" + "github.com/openshift/library-go/pkg/apiserver/apiserverconfig" + "github.com/openshift/library-go/pkg/quota/clusterquotamapping" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/usercache" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv" +) + +type KubeAPIServerConfigFunc func(config *genericapiserver.Config, versionedInformers clientgoinformers.SharedInformerFactory, pluginInitializers *[]admission.PluginInitializer) error + +func NewOpenShiftKubeAPIServerConfigPatch(kubeAPIServerConfig *kubecontrolplanev1.KubeAPIServerConfig) KubeAPIServerConfigFunc { + return func(genericConfig *genericapiserver.Config, kubeInformers clientgoinformers.SharedInformerFactory, pluginInitializers *[]admission.PluginInitializer) error { + openshiftInformers, err := newInformers(genericConfig.LoopbackClientConfig) + if err != nil { + return err + } + + // AUTHORIZER + genericConfig.RequestInfoResolver = apiserverconfig.OpenshiftRequestInfoResolver() + authorizer := NewAuthorizer(kubeInformers) + genericConfig.Authorization.Authorizer = authorizer + // END AUTHORIZER + + // Inject OpenShift API long running endpoints (like for binary builds). + // TODO: We should disable the timeout code for aggregated endpoints as this can cause problems when upstream add additional endpoints. + genericConfig.LongRunningFunc = apiserverconfig.IsLongRunningRequest + + // ADMISSION + clusterQuotaMappingController := newClusterQuotaMappingController(kubeInformers.Core().V1().Namespaces(), openshiftInformers.OpenshiftQuotaInformers.Quota().V1().ClusterResourceQuotas()) + genericConfig.AddPostStartHookOrDie("quota.openshift.io-clusterquotamapping", func(context genericapiserver.PostStartHookContext) error { + go clusterQuotaMappingController.Run(5, context.StopCh) + return nil + }) + + *pluginInitializers = append(*pluginInitializers, + imagepolicy.NewInitializer(imagereferencemutators.KubeImageMutators{}, kubeAPIServerConfig.ImagePolicyConfig.InternalRegistryHostname), + restrictusers.NewInitializer(openshiftInformers.getOpenshiftUserInformers()), + sccadmission.NewInitializer(openshiftInformers.getOpenshiftSecurityInformers().Security().V1().SecurityContextConstraints()), + clusterresourcequota.NewInitializer( + openshiftInformers.getOpenshiftQuotaInformers().Quota().V1().ClusterResourceQuotas(), + clusterQuotaMappingController.GetClusterQuotaMapper(), + generic.NewRegistry(install.NewQuotaConfigurationForAdmission().Evaluators()), + ), + nodeenv.NewInitializer(kubeAPIServerConfig.ProjectConfig.DefaultNodeSelector), + admissionrestconfig.NewInitializer(*rest.CopyConfig(genericConfig.LoopbackClientConfig)), + ) + // END ADMISSION + + // HANDLER CHAIN (with oauth server and web console) + genericConfig.BuildHandlerChainFunc, err = BuildHandlerChain(kubeAPIServerConfig.ConsolePublicURL, kubeAPIServerConfig.AuthConfig.OAuthMetadataFile) + if err != nil { + return err + } + // END HANDLER CHAIN + + genericConfig.AddPostStartHookOrDie("openshift.io-startkubeinformers", func(context genericapiserver.PostStartHookContext) error { + go kubeInformers.Start(context.StopCh) + go openshiftInformers.Start(context.StopCh) + return nil + }) + enablement.AppendPostStartHooksOrDie(genericConfig) + + return nil + } +} + +// newInformers is only exposed for the build's integration testing until it can be fixed more appropriately. +func newInformers(loopbackClientConfig *rest.Config) (*kubeAPIServerInformers, error) { + // ClusterResourceQuota is served using CRD resource any status update must use JSON + jsonLoopbackClientConfig := rest.CopyConfig(loopbackClientConfig) + jsonLoopbackClientConfig.ContentConfig.AcceptContentTypes = "application/json" + jsonLoopbackClientConfig.ContentConfig.ContentType = "application/json" + + quotaClient, err := quotaclient.NewForConfig(jsonLoopbackClientConfig) + if err != nil { + return nil, err + } + securityClient, err := securityv1client.NewForConfig(jsonLoopbackClientConfig) + if err != nil { + return nil, err + } + userClient, err := userclient.NewForConfig(loopbackClientConfig) + if err != nil { + return nil, err + } + + // TODO find a single place to create and start informers. During the 1.7 rebase this will come more naturally in a config object, + // before then we should try to eliminate our direct to storage access. It's making us do weird things. + const defaultInformerResyncPeriod = 10 * time.Minute + + ret := &kubeAPIServerInformers{ + OpenshiftQuotaInformers: quotainformer.NewSharedInformerFactory(quotaClient, defaultInformerResyncPeriod), + OpenshiftSecurityInformers: securityv1informer.NewSharedInformerFactory(securityClient, defaultInformerResyncPeriod), + OpenshiftUserInformers: userinformer.NewSharedInformerFactory(userClient, defaultInformerResyncPeriod), + } + if err := ret.OpenshiftUserInformers.User().V1().Groups().Informer().AddIndexers(cache.Indexers{ + usercache.ByUserIndexName: usercache.ByUserIndexKeys, + }); err != nil { + return nil, err + } + + return ret, nil +} + +type kubeAPIServerInformers struct { + OpenshiftQuotaInformers quotainformer.SharedInformerFactory + OpenshiftSecurityInformers securityv1informer.SharedInformerFactory + OpenshiftUserInformers userinformer.SharedInformerFactory +} + +func (i *kubeAPIServerInformers) getOpenshiftQuotaInformers() quotainformer.SharedInformerFactory { + return i.OpenshiftQuotaInformers +} +func (i *kubeAPIServerInformers) getOpenshiftSecurityInformers() securityv1informer.SharedInformerFactory { + return i.OpenshiftSecurityInformers +} +func (i *kubeAPIServerInformers) getOpenshiftUserInformers() userinformer.SharedInformerFactory { + return i.OpenshiftUserInformers +} + +func (i *kubeAPIServerInformers) Start(stopCh <-chan struct{}) { + i.OpenshiftQuotaInformers.Start(stopCh) + i.OpenshiftSecurityInformers.Start(stopCh) + i.OpenshiftUserInformers.Start(stopCh) +} + +func newClusterQuotaMappingController(nsInternalInformer corev1informers.NamespaceInformer, clusterQuotaInformer quotav1informer.ClusterResourceQuotaInformer) *clusterquotamapping.ClusterQuotaMappingController { + return clusterquotamapping.NewClusterQuotaMappingController(nsInternalInformer, clusterQuotaInformer) +} diff --git a/openshift-kube-apiserver/openshiftkubeapiserver/patch_authorizer.go b/openshift-kube-apiserver/openshiftkubeapiserver/patch_authorizer.go new file mode 100644 index 0000000000000..26a6f5273d631 --- /dev/null +++ b/openshift-kube-apiserver/openshiftkubeapiserver/patch_authorizer.go @@ -0,0 +1,52 @@ +package openshiftkubeapiserver + +import ( + "k8s.io/apiserver/pkg/authentication/user" + "k8s.io/apiserver/pkg/authorization/authorizer" + "k8s.io/apiserver/pkg/authorization/authorizerfactory" + authorizerunion "k8s.io/apiserver/pkg/authorization/union" + "k8s.io/client-go/informers" + "k8s.io/kubernetes/pkg/auth/nodeidentifier" + "k8s.io/kubernetes/plugin/pkg/auth/authorizer/node" + rbacauthorizer "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac" + kbootstrappolicy "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy" + + "k8s.io/kubernetes/openshift-kube-apiserver/authorization/browsersafe" + "k8s.io/kubernetes/openshift-kube-apiserver/authorization/scopeauthorizer" +) + +func NewAuthorizer(versionedInformers informers.SharedInformerFactory) authorizer.Authorizer { + rbacInformers := versionedInformers.Rbac().V1() + + scopeLimitedAuthorizer := scopeauthorizer.NewAuthorizer(rbacInformers.ClusterRoles().Lister()) + + kubeAuthorizer := rbacauthorizer.New( + &rbacauthorizer.RoleGetter{Lister: rbacInformers.Roles().Lister()}, + &rbacauthorizer.RoleBindingLister{Lister: rbacInformers.RoleBindings().Lister()}, + &rbacauthorizer.ClusterRoleGetter{Lister: rbacInformers.ClusterRoles().Lister()}, + &rbacauthorizer.ClusterRoleBindingLister{Lister: rbacInformers.ClusterRoleBindings().Lister()}, + ) + + graph := node.NewGraph() + node.AddGraphEventHandlers( + graph, + versionedInformers.Core().V1().Nodes(), + versionedInformers.Core().V1().Pods(), + versionedInformers.Core().V1().PersistentVolumes(), + versionedInformers.Storage().V1().VolumeAttachments(), + ) + nodeAuthorizer := node.NewAuthorizer(graph, nodeidentifier.NewDefaultNodeIdentifier(), kbootstrappolicy.NodeRules()) + + openshiftAuthorizer := authorizerunion.New( + // Wrap with an authorizer that detects unsafe requests and modifies verbs/resources appropriately so policy can address them separately. + // Scopes are first because they will authoritatively deny and can logically be attached to anyone. + browsersafe.NewBrowserSafeAuthorizer(scopeLimitedAuthorizer, user.AllAuthenticated), + // authorizes system:masters to do anything, just like upstream + authorizerfactory.NewPrivilegedGroups(user.SystemPrivilegedGroup), + nodeAuthorizer, + // Wrap with an authorizer that detects unsafe requests and modifies verbs/resources appropriately so policy can address them separately + browsersafe.NewBrowserSafeAuthorizer(kubeAuthorizer, user.AllAuthenticated), + ) + + return openshiftAuthorizer +} diff --git a/openshift-kube-apiserver/openshiftkubeapiserver/patch_handlerchain.go b/openshift-kube-apiserver/openshiftkubeapiserver/patch_handlerchain.go new file mode 100644 index 0000000000000..804116c1efa1d --- /dev/null +++ b/openshift-kube-apiserver/openshiftkubeapiserver/patch_handlerchain.go @@ -0,0 +1,97 @@ +package openshiftkubeapiserver + +import ( + "net/http" + "strings" + + authenticationv1 "k8s.io/api/authentication/v1" + genericapiserver "k8s.io/apiserver/pkg/server" + + authorizationv1 "github.com/openshift/api/authorization/v1" + "github.com/openshift/library-go/pkg/apiserver/httprequest" +) + +// TODO switch back to taking a kubeapiserver config. For now make it obviously safe for 3.11 +func BuildHandlerChain(consolePublicURL string, oauthMetadataFile string) (func(apiHandler http.Handler, kc *genericapiserver.Config) http.Handler, error) { + // load the oauthmetadata when we can return an error + oAuthMetadata := []byte{} + if len(oauthMetadataFile) > 0 { + var err error + oAuthMetadata, err = loadOAuthMetadataFile(oauthMetadataFile) + if err != nil { + return nil, err + } + } + + return func(apiHandler http.Handler, genericConfig *genericapiserver.Config) http.Handler { + // well-known comes after the normal handling chain. This shows where to connect for oauth information + handler := withOAuthInfo(apiHandler, oAuthMetadata) + + // this is the normal kube handler chain + handler = genericapiserver.DefaultBuildHandlerChain(handler, genericConfig) + + // these handlers are all before the normal kube chain + handler = translateLegacyScopeImpersonation(handler) + + // redirects from / and /console to consolePublicURL if you're using a browser + handler = withConsoleRedirect(handler, consolePublicURL) + + return handler + }, + nil +} + +// If we know the location of the asset server, redirect to it when / is requested +// and the Accept header supports text/html +func withOAuthInfo(handler http.Handler, oAuthMetadata []byte) http.Handler { + if len(oAuthMetadata) == 0 { + return handler + } + + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + if req.URL.Path != oauthMetadataEndpoint { + // Dispatch to the next handler + handler.ServeHTTP(w, req) + return + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + w.Write(oAuthMetadata) + }) +} + +// If we know the location of the asset server, redirect to it when / is requested +// and the Accept header supports text/html +func withConsoleRedirect(handler http.Handler, consolePublicURL string) http.Handler { + if len(consolePublicURL) == 0 { + return handler + } + + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + if strings.HasPrefix(req.URL.Path, "/console") || + (req.URL.Path == "/" && httprequest.PrefersHTML(req)) { + http.Redirect(w, req, consolePublicURL, http.StatusFound) + return + } + // Dispatch to the next handler + handler.ServeHTTP(w, req) + }) +} + +// legacyImpersonateUserScopeHeader is the header name older servers were using +// just for scopes, so we need to translate it from clients that may still be +// using it. +const legacyImpersonateUserScopeHeader = "Impersonate-User-Scope" + +// translateLegacyScopeImpersonation is a filter that will translates user scope impersonation for openshift into the equivalent kube headers. +func translateLegacyScopeImpersonation(handler http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + for _, scope := range req.Header[legacyImpersonateUserScopeHeader] { + req.Header[authenticationv1.ImpersonateUserExtraHeaderPrefix+authorizationv1.ScopesKey] = + append(req.Header[authenticationv1.ImpersonateUserExtraHeaderPrefix+authorizationv1.ScopesKey], scope) + } + + handler.ServeHTTP(w, req) + }) +} diff --git a/openshift-kube-apiserver/openshiftkubeapiserver/wellknown_oauth.go b/openshift-kube-apiserver/openshiftkubeapiserver/wellknown_oauth.go new file mode 100644 index 0000000000000..8b34da7aa3203 --- /dev/null +++ b/openshift-kube-apiserver/openshiftkubeapiserver/wellknown_oauth.go @@ -0,0 +1,57 @@ +package openshiftkubeapiserver + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/url" + + "github.com/openshift/library-go/pkg/oauth/oauthdiscovery" +) + +const ( + // Discovery endpoint for OAuth 2.0 Authorization Server Metadata + // See IETF Draft: + // https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2 + oauthMetadataEndpoint = "/.well-known/oauth-authorization-server" +) + +func validateURL(urlString string) error { + urlObj, err := url.Parse(urlString) + if err != nil { + return fmt.Errorf("%q is an invalid URL: %v", urlString, err) + } + if len(urlObj.Scheme) == 0 { + return fmt.Errorf("must contain a valid scheme") + } + if len(urlObj.Host) == 0 { + return fmt.Errorf("must contain a valid host") + } + return nil +} + +func loadOAuthMetadataFile(metadataFile string) ([]byte, error) { + data, err := ioutil.ReadFile(metadataFile) + if err != nil { + return nil, fmt.Errorf("unable to read External OAuth Metadata file: %v", err) + } + + oauthMetadata := &oauthdiscovery.OauthAuthorizationServerMetadata{} + if err := json.Unmarshal(data, oauthMetadata); err != nil { + return nil, fmt.Errorf("unable to decode External OAuth Metadata file: %v", err) + } + + if err := validateURL(oauthMetadata.Issuer); err != nil { + return nil, fmt.Errorf("error validating External OAuth Metadata Issuer field: %v", err) + } + + if err := validateURL(oauthMetadata.AuthorizationEndpoint); err != nil { + return nil, fmt.Errorf("error validating External OAuth Metadata AuthorizationEndpoint field: %v", err) + } + + if err := validateURL(oauthMetadata.TokenEndpoint); err != nil { + return nil, fmt.Errorf("error validating External OAuth Metadata TokenEndpoint field: %v", err) + } + + return data, nil +} diff --git a/pkg/kubeapiserver/authenticator/config.go b/pkg/kubeapiserver/authenticator/config.go index 4e1eee4b5ef34..951c5d621bc0b 100644 --- a/pkg/kubeapiserver/authenticator/config.go +++ b/pkg/kubeapiserver/authenticator/config.go @@ -170,6 +170,13 @@ func (config Config) New() (authenticator.Request, *spec.SecurityDefinitions, er } tokenAuthenticators = append(tokenAuthenticators, webhookTokenAuth) + } else { + // openshift gets injected here as a separate token authenticator because we also add a special group to our oauth authorized + // tokens that allows us to recognize human users differently than machine users. The openAPI is always correct because we always + // configuration service account tokens, so we just have to create and add another authenticator. + // TODO make this a webhook authenticator and remove this patch. + // TODO - remove in 4.7, kept here not to disrupt authentication during 4.5->4.6 upgrade + tokenAuthenticators = AddOAuthServerAuthenticatorIfNeeded(tokenAuthenticators, config.APIAudiences) } if len(tokenAuthenticators) > 0 { diff --git a/pkg/kubeapiserver/authenticator/patch_authenticator.go b/pkg/kubeapiserver/authenticator/patch_authenticator.go new file mode 100644 index 0000000000000..f52d951dcd4ab --- /dev/null +++ b/pkg/kubeapiserver/authenticator/patch_authenticator.go @@ -0,0 +1,86 @@ +package authenticator + +import ( + "time" + + oauthclient "github.com/openshift/client-go/oauth/clientset/versioned" + oauthinformer "github.com/openshift/client-go/oauth/informers/externalversions" + userclient "github.com/openshift/client-go/user/clientset/versioned" + userinformer "github.com/openshift/client-go/user/informers/externalversions" + bootstrap "github.com/openshift/library-go/pkg/authentication/bootstrapauthenticator" + + "k8s.io/apiserver/pkg/authentication/authenticator" + "k8s.io/apiserver/pkg/authentication/group" + genericapiserver "k8s.io/apiserver/pkg/server" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/tools/cache" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/usercache" + oauthvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth" + "k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth" + "k8s.io/kubernetes/openshift-kube-apiserver/enablement" +) + +const authenticatedOAuthGroup = "system:authenticated:oauth" + +// TODO find a single place to create and start informers. During the 1.7 rebase this will come more naturally in a config object, +// before then we should try to eliminate our direct to storage access. It's making us do weird things. +const defaultInformerResyncPeriod = 10 * time.Minute + +func AddOAuthServerAuthenticatorIfNeeded(tokenAuthenticators []authenticator.Token, implicitAudiences authenticator.Audiences) []authenticator.Token { + if !enablement.IsOpenShift() { + return tokenAuthenticators + } + + kubeClient, err := kubernetes.NewForConfig(enablement.LoopbackClientConfig()) + if err != nil { + panic(err) + } + bootstrapUserDataGetter := bootstrap.NewBootstrapUserDataGetter(kubeClient.CoreV1(), kubeClient.CoreV1()) + + oauthClient, err := oauthclient.NewForConfig(enablement.LoopbackClientConfig()) + if err != nil { + panic(err) + } + userClient, err := userclient.NewForConfig(enablement.LoopbackClientConfig()) + if err != nil { + panic(err) + } + + oauthInformer := oauthinformer.NewSharedInformerFactory(oauthClient, defaultInformerResyncPeriod) + userInformer := userinformer.NewSharedInformerFactory(userClient, defaultInformerResyncPeriod) + if err := userInformer.User().V1().Groups().Informer().AddIndexers(cache.Indexers{ + usercache.ByUserIndexName: usercache.ByUserIndexKeys, + }); err != nil { + panic(err) + } + + // add our oauth token validator + validators := []oauth.OAuthTokenValidator{oauth.NewExpirationValidator(), oauth.NewUIDValidator()} + if enablement.OpenshiftConfig().OAuthConfig != nil { + if inactivityTimeout := enablement.OpenshiftConfig().OAuthConfig.TokenConfig.AccessTokenInactivityTimeoutSeconds; inactivityTimeout != nil { + timeoutValidator := oauth.NewTimeoutValidator(oauthClient.OauthV1().OAuthAccessTokens(), oauthInformer.Oauth().V1().OAuthClients().Lister(), *inactivityTimeout, oauthvalidation.MinimumInactivityTimeoutSeconds) + validators = append(validators, timeoutValidator) + enablement.AddPostStartHookOrDie("openshift.io-TokenTimeoutUpdater", func(context genericapiserver.PostStartHookContext) error { + go timeoutValidator.Run(context.StopCh) + return nil + }) + } + } + enablement.AddPostStartHookOrDie("openshift.io-StartOAuthInformers", func(context genericapiserver.PostStartHookContext) error { + go oauthInformer.Start(context.StopCh) + go userInformer.Start(context.StopCh) + return nil + }) + groupMapper := usercache.NewGroupCache(userInformer.User().V1().Groups()) + oauthTokenAuthenticator := oauth.NewTokenAuthenticator(oauthClient.OauthV1().OAuthAccessTokens(), userClient.UserV1().Users(), groupMapper, implicitAudiences, validators...) + tokenAuthenticators = append(tokenAuthenticators, + // if you have an OAuth bearer token, you're a human (usually) + group.NewTokenGroupAdder(oauthTokenAuthenticator, []string{authenticatedOAuthGroup})) + + // add the bootstrap user token authenticator + tokenAuthenticators = append(tokenAuthenticators, + // bootstrap oauth user that can do anything, backed by a secret + oauth.NewBootstrapAuthenticator(oauthClient.OauthV1().OAuthAccessTokens(), bootstrapUserDataGetter, implicitAudiences, validators...)) + + return tokenAuthenticators +} From d9f0f42c12fdc3da9fcb2851413c7f610f83e3f1 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:55:57 +0100 Subject: [PATCH 51/96] UPSTREAM: : simplify the authorizer patch to allow the flags to function Origin-commit: 0d7fb2d769d631054ec9ac0721aee623c96c1001 --- .../enablement/intialization.go | 14 +++-- .../openshiftkubeapiserver/flags.go | 2 +- .../openshiftkubeapiserver/patch.go | 2 - .../patch_authorizer.go | 52 ------------------- pkg/kubeapiserver/authorizer/config.go | 14 ++++- pkg/kubeapiserver/authorizer/modes/patch.go | 8 +++ .../src/k8s.io/apiserver/pkg/server/config.go | 6 ++- .../src/k8s.io/apiserver/pkg/server/patch.go | 8 +++ 8 files changed, 43 insertions(+), 63 deletions(-) delete mode 100644 openshift-kube-apiserver/openshiftkubeapiserver/patch_authorizer.go create mode 100644 pkg/kubeapiserver/authorizer/modes/patch.go create mode 100644 staging/src/k8s.io/apiserver/pkg/server/patch.go diff --git a/openshift-kube-apiserver/enablement/intialization.go b/openshift-kube-apiserver/enablement/intialization.go index 37da08f69ed09..e6f8b43b08593 100644 --- a/openshift-kube-apiserver/enablement/intialization.go +++ b/openshift-kube-apiserver/enablement/intialization.go @@ -4,21 +4,21 @@ import ( "io/ioutil" "path" + configv1 "github.com/openshift/api/config/v1" + kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" + osinv1 "github.com/openshift/api/osin/v1" + "github.com/openshift/library-go/pkg/config/helpers" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer" utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apiserver/pkg/server" "k8s.io/client-go/tools/clientcmd/api" aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver" "k8s.io/kubernetes/openshift-kube-apiserver/configdefault" "k8s.io/kubernetes/pkg/capabilities" kubelettypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy" - - configv1 "github.com/openshift/api/config/v1" - kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" - osinv1 "github.com/openshift/api/osin/v1" - "github.com/openshift/library-go/pkg/config/helpers" ) func GetOpenshiftConfig(openshiftConfigFile string) (*kubecontrolplanev1.KubeAPIServerConfig, error) { @@ -78,4 +78,8 @@ func ForceGlobalInitializationForOpenShift() { // TODO, we should scrub these out bootstrappolicy.ClusterRoles = bootstrappolicy.OpenshiftClusterRoles bootstrappolicy.ClusterRoleBindings = bootstrappolicy.OpenshiftClusterRoleBindings + + // we need to have the authorization chain place something before system:masters + // SkipSystemMastersAuthorizer disable implicitly added system/master authz, and turn it into another authz mode "SystemMasters", to be added via authorization-mode + server.SkipSystemMastersAuthorizer() } diff --git a/openshift-kube-apiserver/openshiftkubeapiserver/flags.go b/openshift-kube-apiserver/openshiftkubeapiserver/flags.go index b3faf6bd5452d..b28dd265ee29b 100644 --- a/openshift-kube-apiserver/openshiftkubeapiserver/flags.go +++ b/openshift-kube-apiserver/openshiftkubeapiserver/flags.go @@ -102,7 +102,7 @@ func ConfigToFlags(kubeAPIServerConfig *kubecontrolplanev1.KubeAPIServerConfig) } configflags.SetIfUnset(args, "allow-privileged", "true") configflags.SetIfUnset(args, "anonymous-auth", "true") - configflags.SetIfUnset(args, "authorization-mode", "RBAC", "Node") // overridden later, but this runs the poststarthook for bootstrapping RBAC + configflags.SetIfUnset(args, "authorization-mode", "Scope", "SystemMasters", "RBAC", "Node") // overridden later, but this runs the poststarthook for bootstrapping RBAC for flag, value := range configflags.AuditFlags(&kubeAPIServerConfig.AuditConfig, configflags.ArgsWithPrefix(args, "audit-")) { configflags.SetIfUnset(args, flag, value...) } diff --git a/openshift-kube-apiserver/openshiftkubeapiserver/patch.go b/openshift-kube-apiserver/openshiftkubeapiserver/patch.go index bc29b03b11ef9..eb88e79af60e2 100644 --- a/openshift-kube-apiserver/openshiftkubeapiserver/patch.go +++ b/openshift-kube-apiserver/openshiftkubeapiserver/patch.go @@ -45,8 +45,6 @@ func NewOpenShiftKubeAPIServerConfigPatch(kubeAPIServerConfig *kubecontrolplanev // AUTHORIZER genericConfig.RequestInfoResolver = apiserverconfig.OpenshiftRequestInfoResolver() - authorizer := NewAuthorizer(kubeInformers) - genericConfig.Authorization.Authorizer = authorizer // END AUTHORIZER // Inject OpenShift API long running endpoints (like for binary builds). diff --git a/openshift-kube-apiserver/openshiftkubeapiserver/patch_authorizer.go b/openshift-kube-apiserver/openshiftkubeapiserver/patch_authorizer.go deleted file mode 100644 index 26a6f5273d631..0000000000000 --- a/openshift-kube-apiserver/openshiftkubeapiserver/patch_authorizer.go +++ /dev/null @@ -1,52 +0,0 @@ -package openshiftkubeapiserver - -import ( - "k8s.io/apiserver/pkg/authentication/user" - "k8s.io/apiserver/pkg/authorization/authorizer" - "k8s.io/apiserver/pkg/authorization/authorizerfactory" - authorizerunion "k8s.io/apiserver/pkg/authorization/union" - "k8s.io/client-go/informers" - "k8s.io/kubernetes/pkg/auth/nodeidentifier" - "k8s.io/kubernetes/plugin/pkg/auth/authorizer/node" - rbacauthorizer "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac" - kbootstrappolicy "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy" - - "k8s.io/kubernetes/openshift-kube-apiserver/authorization/browsersafe" - "k8s.io/kubernetes/openshift-kube-apiserver/authorization/scopeauthorizer" -) - -func NewAuthorizer(versionedInformers informers.SharedInformerFactory) authorizer.Authorizer { - rbacInformers := versionedInformers.Rbac().V1() - - scopeLimitedAuthorizer := scopeauthorizer.NewAuthorizer(rbacInformers.ClusterRoles().Lister()) - - kubeAuthorizer := rbacauthorizer.New( - &rbacauthorizer.RoleGetter{Lister: rbacInformers.Roles().Lister()}, - &rbacauthorizer.RoleBindingLister{Lister: rbacInformers.RoleBindings().Lister()}, - &rbacauthorizer.ClusterRoleGetter{Lister: rbacInformers.ClusterRoles().Lister()}, - &rbacauthorizer.ClusterRoleBindingLister{Lister: rbacInformers.ClusterRoleBindings().Lister()}, - ) - - graph := node.NewGraph() - node.AddGraphEventHandlers( - graph, - versionedInformers.Core().V1().Nodes(), - versionedInformers.Core().V1().Pods(), - versionedInformers.Core().V1().PersistentVolumes(), - versionedInformers.Storage().V1().VolumeAttachments(), - ) - nodeAuthorizer := node.NewAuthorizer(graph, nodeidentifier.NewDefaultNodeIdentifier(), kbootstrappolicy.NodeRules()) - - openshiftAuthorizer := authorizerunion.New( - // Wrap with an authorizer that detects unsafe requests and modifies verbs/resources appropriately so policy can address them separately. - // Scopes are first because they will authoritatively deny and can logically be attached to anyone. - browsersafe.NewBrowserSafeAuthorizer(scopeLimitedAuthorizer, user.AllAuthenticated), - // authorizes system:masters to do anything, just like upstream - authorizerfactory.NewPrivilegedGroups(user.SystemPrivilegedGroup), - nodeAuthorizer, - // Wrap with an authorizer that detects unsafe requests and modifies verbs/resources appropriately so policy can address them separately - browsersafe.NewBrowserSafeAuthorizer(kubeAuthorizer, user.AllAuthenticated), - ) - - return openshiftAuthorizer -} diff --git a/pkg/kubeapiserver/authorizer/config.go b/pkg/kubeapiserver/authorizer/config.go index 0a1b1ca85c2e6..79383b5e0f722 100644 --- a/pkg/kubeapiserver/authorizer/config.go +++ b/pkg/kubeapiserver/authorizer/config.go @@ -20,6 +20,10 @@ import ( "fmt" "time" + "k8s.io/apiserver/pkg/authentication/user" + "k8s.io/kubernetes/openshift-kube-apiserver/authorization/browsersafe" + "k8s.io/kubernetes/openshift-kube-apiserver/authorization/scopeauthorizer" + utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/apiserver/pkg/authorization/authorizer" "k8s.io/apiserver/pkg/authorization/authorizerfactory" @@ -121,8 +125,16 @@ func (config Config) New() (authorizer.Authorizer, authorizer.RuleResolver, erro &rbac.ClusterRoleGetter{Lister: config.VersionedInformerFactory.Rbac().V1().ClusterRoles().Lister()}, &rbac.ClusterRoleBindingLister{Lister: config.VersionedInformerFactory.Rbac().V1().ClusterRoleBindings().Lister()}, ) - authorizers = append(authorizers, rbacAuthorizer) + // Wrap with an authorizer that detects unsafe requests and modifies verbs/resources appropriately so policy can address them separately + authorizers = append(authorizers, browsersafe.NewBrowserSafeAuthorizer(rbacAuthorizer, user.AllAuthenticated)) ruleResolvers = append(ruleResolvers, rbacAuthorizer) + case modes.ModeScope: + // Wrap with an authorizer that detects unsafe requests and modifies verbs/resources appropriately so policy can address them separately + scopeLimitedAuthorizer := scopeauthorizer.NewAuthorizer(config.VersionedInformerFactory.Rbac().V1().ClusterRoles().Lister()) + authorizers = append(authorizers, browsersafe.NewBrowserSafeAuthorizer(scopeLimitedAuthorizer, user.AllAuthenticated)) + case modes.ModeSystemMasters: + // no browsersafeauthorizer here becase that rewrites the resources. This authorizer matches no matter which resource matches. + authorizers = append(authorizers, authorizerfactory.NewPrivilegedGroups(user.SystemPrivilegedGroup)) default: return nil, nil, fmt.Errorf("unknown authorization mode %s specified", authorizationMode) } diff --git a/pkg/kubeapiserver/authorizer/modes/patch.go b/pkg/kubeapiserver/authorizer/modes/patch.go new file mode 100644 index 0000000000000..bc892601ebe6f --- /dev/null +++ b/pkg/kubeapiserver/authorizer/modes/patch.go @@ -0,0 +1,8 @@ +package modes + +var ModeScope = "Scope" +var ModeSystemMasters = "SystemMasters" + +func init() { + AuthorizationModeChoices = append(AuthorizationModeChoices, ModeScope, ModeSystemMasters) +} diff --git a/staging/src/k8s.io/apiserver/pkg/server/config.go b/staging/src/k8s.io/apiserver/pkg/server/config.go index 9699177ff2e8b..028448a9cc7c3 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/config.go +++ b/staging/src/k8s.io/apiserver/pkg/server/config.go @@ -783,6 +783,8 @@ func AuthorizeClientBearerToken(loopback *restclient.Config, authn *Authenticati tokenAuthenticator := authenticatorfactory.NewFromTokens(tokens) authn.Authenticator = authenticatorunion.New(tokenAuthenticator, authn.Authenticator) - tokenAuthorizer := authorizerfactory.NewPrivilegedGroups(user.SystemPrivilegedGroup) - authz.Authorizer = authorizerunion.New(tokenAuthorizer, authz.Authorizer) + if !skipSystemMastersAuthorizer { + tokenAuthorizer := authorizerfactory.NewPrivilegedGroups(user.SystemPrivilegedGroup) + authz.Authorizer = authorizerunion.New(tokenAuthorizer, authz.Authorizer) + } } diff --git a/staging/src/k8s.io/apiserver/pkg/server/patch.go b/staging/src/k8s.io/apiserver/pkg/server/patch.go new file mode 100644 index 0000000000000..75d9a5bfc8d9f --- /dev/null +++ b/staging/src/k8s.io/apiserver/pkg/server/patch.go @@ -0,0 +1,8 @@ +package server + +var skipSystemMastersAuthorizer = false + +// SkipSystemMastersAuthorizer disable implicitly added system/master authz, and turn it into another authz mode "SystemMasters", to be added via authorization-mode +func SkipSystemMastersAuthorizer() { + skipSystemMastersAuthorizer = true +} From 257b5b9c4a78fb93b22bf189d0e60b45d956c2e9 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Thu, 29 Oct 2020 13:55:57 +0100 Subject: [PATCH 52/96] UPSTREAM: : kube-apiserver: wire through isTerminating into handler chain Origin-commit: 5772e7285acbe901762d8cd8cb1fc33d8b459d04 --- cmd/controller-manager/app/serve.go | 2 +- cmd/kube-apiserver/app/server.go | 15 ++++++++++++--- cmd/kube-scheduler/app/server.go | 2 +- pkg/kubeapiserver/server/insecure_handler.go | 2 +- pkg/kubelet/server/server.go | 2 +- .../src/k8s.io/apiserver/pkg/server/config.go | 5 ++++- .../pkg/server/filters/timeout_test.go | 2 +- .../k8s.io/apiserver/pkg/server/filters/wrap.go | 8 ++++---- .../apiserver/pkg/server/httplog/httplog.go | 17 ++++++++++++++--- .../pkg/server/httplog/httplog_test.go | 6 +++--- test/integration/framework/test_server.go | 2 +- 11 files changed, 43 insertions(+), 20 deletions(-) diff --git a/cmd/controller-manager/app/serve.go b/cmd/controller-manager/app/serve.go index da49af3afdd36..d9cea667fd411 100644 --- a/cmd/controller-manager/app/serve.go +++ b/cmd/controller-manager/app/serve.go @@ -48,7 +48,7 @@ func BuildHandlerChain(apiHandler http.Handler, authorizationInfo *apiserver.Aut } handler = genericapifilters.WithRequestInfo(handler, requestInfoResolver) handler = genericapifilters.WithCacheControl(handler) - handler = genericfilters.WithPanicRecovery(handler) + handler = genericfilters.WithPanicRecovery(handler, nil) return handler } diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index c70ce145a397f..0c581fa22dd18 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -219,7 +219,7 @@ func CreateServerChain(completedOptions completedServerRunOptions, stopCh <-chan return nil, err } - kubeAPIServerConfig, insecureServingInfo, serviceResolver, pluginInitializer, err := CreateKubeAPIServerConfig(completedOptions, nodeTunneler, proxyTransport) + kubeAPIServerConfig, insecureServingInfo, serviceResolver, pluginInitializer, err := CreateKubeAPIServerConfig(completedOptions, nodeTunneler, proxyTransport, stopCh) if err != nil { return nil, err } @@ -323,6 +323,7 @@ func CreateKubeAPIServerConfig( s completedServerRunOptions, nodeTunneler tunneler.Tunneler, proxyTransport *http.Transport, + stopCh <-chan struct{}, ) ( *master.Config, *genericapiserver.DeprecatedInsecureServingInfo, @@ -330,7 +331,7 @@ func CreateKubeAPIServerConfig( []admission.PluginInitializer, error, ) { - genericConfig, versionedInformers, insecureServingInfo, serviceResolver, pluginInitializers, admissionPostStartHook, storageFactory, err := buildGenericConfig(s.ServerRunOptions, proxyTransport) + genericConfig, versionedInformers, insecureServingInfo, serviceResolver, pluginInitializers, admissionPostStartHook, storageFactory, err := buildGenericConfig(s.ServerRunOptions, proxyTransport, stopCh) if err != nil { return nil, nil, nil, nil, err } @@ -468,7 +469,7 @@ func CreateKubeAPIServerConfig( func buildGenericConfig( s *options.ServerRunOptions, proxyTransport *http.Transport, - + stopCh <-chan struct{}, ) ( genericConfig *genericapiserver.Config, versionedInformers clientgoinformers.SharedInformerFactory, @@ -480,6 +481,14 @@ func buildGenericConfig( lastErr error, ) { genericConfig = genericapiserver.NewConfig(legacyscheme.Codecs) + genericConfig.IsTerminating = func() bool { + select { + case <-stopCh: + return true + default: + return false + } + } genericConfig.MergedResourceConfig = master.DefaultAPIResourceConfigSource() if lastErr = s.GenericServerRunOptions.ApplyTo(genericConfig); lastErr != nil { diff --git a/cmd/kube-scheduler/app/server.go b/cmd/kube-scheduler/app/server.go index b7c2267487438..98da154ef22a3 100644 --- a/cmd/kube-scheduler/app/server.go +++ b/cmd/kube-scheduler/app/server.go @@ -223,7 +223,7 @@ func buildHandlerChain(handler http.Handler, authn authenticator.Request, authz handler = genericapifilters.WithAuthentication(handler, authn, failedHandler, nil) handler = genericapifilters.WithRequestInfo(handler, requestInfoResolver) handler = genericapifilters.WithCacheControl(handler) - handler = genericfilters.WithPanicRecovery(handler) + handler = genericfilters.WithPanicRecovery(handler, nil) return handler } diff --git a/pkg/kubeapiserver/server/insecure_handler.go b/pkg/kubeapiserver/server/insecure_handler.go index ce8c387b847e2..5b7ec2c45f492 100644 --- a/pkg/kubeapiserver/server/insecure_handler.go +++ b/pkg/kubeapiserver/server/insecure_handler.go @@ -43,7 +43,7 @@ func BuildInsecureHandlerChain(apiHandler http.Handler, c *server.Config) http.H handler = genericapifilters.WithRequestInfo(handler, server.NewRequestInfoResolver(c)) handler = genericapifilters.WithWarningRecorder(handler) handler = genericapifilters.WithCacheControl(handler) - handler = genericfilters.WithPanicRecovery(handler) + handler = genericfilters.WithPanicRecovery(handler, nil) return handler } diff --git a/pkg/kubelet/server/server.go b/pkg/kubelet/server/server.go index d4d2c9245b71d..ca75a8b83153f 100644 --- a/pkg/kubelet/server/server.go +++ b/pkg/kubelet/server/server.go @@ -938,7 +938,7 @@ var statusesNoTracePred = httplog.StatusIsNot( // ServeHTTP responds to HTTP requests on the Kubelet. func (s *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) { - handler := httplog.WithLogging(s.restfulCont, statusesNoTracePred) + handler := httplog.WithLogging(s.restfulCont, statusesNoTracePred, nil) // monitor http requests var serverType string diff --git a/staging/src/k8s.io/apiserver/pkg/server/config.go b/staging/src/k8s.io/apiserver/pkg/server/config.go index 028448a9cc7c3..71c31e451f085 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/config.go +++ b/staging/src/k8s.io/apiserver/pkg/server/config.go @@ -223,6 +223,9 @@ type Config struct { // EquivalentResourceRegistry provides information about resources equivalent to a given resource, // and the kind associated with a given resource. As resources are installed, they are registered here. EquivalentResourceRegistry runtime.EquivalentResourceRegistry + + // A func that returns whether the server is terminating. This can be nil. + IsTerminating func() bool } type RecommendedConfig struct { @@ -690,7 +693,7 @@ func DefaultBuildHandlerChain(apiHandler http.Handler, c *Config) http.Handler { handler = genericapifilters.WithAuditAnnotations(handler, c.AuditBackend, c.AuditPolicyChecker) handler = genericapifilters.WithWarningRecorder(handler) handler = genericapifilters.WithCacheControl(handler) - handler = genericfilters.WithPanicRecovery(handler) + handler = genericfilters.WithPanicRecovery(handler, c.IsTerminating) return handler } diff --git a/staging/src/k8s.io/apiserver/pkg/server/filters/timeout_test.go b/staging/src/k8s.io/apiserver/pkg/server/filters/timeout_test.go index 4ad8717c01884..a1605ae6099bd 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/filters/timeout_test.go +++ b/staging/src/k8s.io/apiserver/pkg/server/filters/timeout_test.go @@ -87,7 +87,7 @@ func TestTimeout(t *testing.T) { }), func(w http.ResponseWriter, req *http.Request, err interface{}) { gotPanic <- err http.Error(w, "This request caused apiserver to panic. Look in the logs for details.", http.StatusInternalServerError) - }), + }, nil), ) defer ts.Close() diff --git a/staging/src/k8s.io/apiserver/pkg/server/filters/wrap.go b/staging/src/k8s.io/apiserver/pkg/server/filters/wrap.go index 26f843aab4090..618bafb3caf45 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/filters/wrap.go +++ b/staging/src/k8s.io/apiserver/pkg/server/filters/wrap.go @@ -26,7 +26,7 @@ import ( ) // WithPanicRecovery wraps an http Handler to recover and log panics (except in the special case of http.ErrAbortHandler panics, which suppress logging). -func WithPanicRecovery(handler http.Handler) http.Handler { +func WithPanicRecovery(handler http.Handler, isTerminating func() bool) http.Handler { return withPanicRecovery(handler, func(w http.ResponseWriter, req *http.Request, err interface{}) { if err == http.ErrAbortHandler { // honor the http.ErrAbortHandler sentinel panic value: @@ -37,11 +37,11 @@ func WithPanicRecovery(handler http.Handler) http.Handler { } http.Error(w, "This request caused apiserver to panic. Look in the logs for details.", http.StatusInternalServerError) klog.Errorf("apiserver panic'd on %v %v", req.Method, req.RequestURI) - }) + }, isTerminating) } -func withPanicRecovery(handler http.Handler, crashHandler func(http.ResponseWriter, *http.Request, interface{})) http.Handler { - handler = httplog.WithLogging(handler, httplog.DefaultStacktracePred) +func withPanicRecovery(handler http.Handler, crashHandler func(http.ResponseWriter, *http.Request, interface{}), isTerminating func() bool) http.Handler { + handler = httplog.WithLogging(handler, httplog.DefaultStacktracePred, isTerminating) return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { defer runtime.HandleCrash(func(err interface{}) { crashHandler(w, req, err) diff --git a/staging/src/k8s.io/apiserver/pkg/server/httplog/httplog.go b/staging/src/k8s.io/apiserver/pkg/server/httplog/httplog.go index 4cb5306672bca..f991fd3835c9a 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/httplog/httplog.go +++ b/staging/src/k8s.io/apiserver/pkg/server/httplog/httplog.go @@ -53,6 +53,7 @@ type respLogger struct { statusStack string addedInfo string startTime time.Time + isTerminating bool captureErrorOutput bool @@ -76,16 +77,20 @@ func DefaultStacktracePred(status int) bool { } // WithLogging wraps the handler with logging. -func WithLogging(handler http.Handler, pred StacktracePred) http.Handler { +func WithLogging(handler http.Handler, pred StacktracePred, isTerminatingFn func() bool) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { ctx := req.Context() if old := respLoggerFromContext(req); old != nil { panic("multiple WithLogging calls!") } - rl := newLogged(req, w).StacktraceWhen(pred) + isTerminating := false + if isTerminatingFn != nil { + isTerminating = isTerminatingFn() + } + rl := newLogged(req, w).StacktraceWhen(pred).IsTerminating(isTerminating) req = req.WithContext(context.WithValue(ctx, respLoggerContextKey, rl)) - if klog.V(3).Enabled() { + if klog.V(3).Enabled() || (rl.isTerminating && klog.V(1).Enabled()) { defer func() { klog.InfoS("HTTP", rl.LogArgs()...) }() } handler.ServeHTTP(rl, req) @@ -137,6 +142,12 @@ func (rl *respLogger) StacktraceWhen(pred StacktracePred) *respLogger { return rl } +// IsTerminating informs the logger that the server is terminating. +func (rl *respLogger) IsTerminating(is bool) *respLogger { + rl.isTerminating = is + return rl +} + // StatusIsNot returns a StacktracePred which will cause stacktraces to be logged // for any status *not* in the given list. func StatusIsNot(statuses ...int) StacktracePred { diff --git a/staging/src/k8s.io/apiserver/pkg/server/httplog/httplog_test.go b/staging/src/k8s.io/apiserver/pkg/server/httplog/httplog_test.go index 62f5ed76de8da..2fa3e329a9e7e 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/httplog/httplog_test.go +++ b/staging/src/k8s.io/apiserver/pkg/server/httplog/httplog_test.go @@ -63,7 +63,7 @@ func TestWithLogging(t *testing.T) { } var handler http.Handler handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {}) - handler = WithLogging(WithLogging(handler, DefaultStacktracePred), DefaultStacktracePred) + handler = WithLogging(WithLogging(handler, DefaultStacktracePred, nil), DefaultStacktracePred, nil) func() { defer func() { @@ -92,7 +92,7 @@ func TestLogOf(t *testing.T) { } }) if makeLogger { - handler = WithLogging(handler, DefaultStacktracePred) + handler = WithLogging(handler, DefaultStacktracePred, nil) want = "*httplog.respLogger" } else { want = "*httplog.passthroughLogger" @@ -120,7 +120,7 @@ func TestUnlogged(t *testing.T) { } }) if makeLogger { - handler = WithLogging(handler, DefaultStacktracePred) + handler = WithLogging(handler, DefaultStacktracePred, nil) } handler.ServeHTTP(origWriter, req) diff --git a/test/integration/framework/test_server.go b/test/integration/framework/test_server.go index 5dea71572fc81..ce6b24863e1c6 100644 --- a/test/integration/framework/test_server.go +++ b/test/integration/framework/test_server.go @@ -114,7 +114,7 @@ func StartTestServer(t *testing.T, stopCh <-chan struct{}, setup TestServerSetup if err != nil { t.Fatal(err) } - kubeAPIServerConfig, _, _, _, err := app.CreateKubeAPIServerConfig(completedOptions, tunneler, proxyTransport) + kubeAPIServerConfig, _, _, _, err := app.CreateKubeAPIServerConfig(completedOptions, tunneler, proxyTransport, nil) if err != nil { t.Fatal(err) } From 1fbe3bbd3fbaf96ac82e1d0ab42279d91f24607f Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Thu, 29 Oct 2020 13:55:58 +0100 Subject: [PATCH 53/96] UPSTREAM: 94766: apiserver: fix healthz vs. livez vs. readyz log output --- .../k8s.io/apiserver/pkg/server/config_test.go | 2 ++ .../apiserver/pkg/server/healthz/healthz.go | 13 +++++++------ .../apiserver/pkg/server/healthz/healthz_test.go | 16 ++++++++-------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/staging/src/k8s.io/apiserver/pkg/server/config_test.go b/staging/src/k8s.io/apiserver/pkg/server/config_test.go index fbd32097c8bd2..1cb1b93a48450 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/config_test.go +++ b/staging/src/k8s.io/apiserver/pkg/server/config_test.go @@ -28,6 +28,7 @@ import ( "time" "github.com/google/go-cmp/cmp" + "k8s.io/apimachinery/pkg/util/json" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/waitgroup" @@ -265,6 +266,7 @@ func TestAuthenticationAuditAnnotationsDefaultChain(t *testing.T) { return &authenticator.Response{User: &user.DefaultInfo{}}, true, nil }) backend := &testBackend{} + c := &Config{ Authentication: AuthenticationInfo{Authenticator: authn}, AuditBackend: backend, diff --git a/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz.go b/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz.go index b2d0007f54cb4..e80b8501edf95 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz.go +++ b/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz.go @@ -161,6 +161,7 @@ func InstallPathHandler(mux mux, path string, checks ...HealthChecker) { klog.V(5).Infof("Installing health checkers for (%v): %v", path, formatQuoted(checkerNames(checks...)...)) + name := strings.Split(strings.TrimPrefix(path, "/"), "/")[0] mux.Handle(path, metrics.InstrumentHandlerFunc("GET", /* group = */ "", @@ -171,7 +172,7 @@ func InstallPathHandler(mux mux, path string, checks ...HealthChecker) { /* component = */ "", /* deprecated */ false, /* removedRelease */ "", - handleRootHealthz(checks...))) + handleRootHealth(name, checks...))) for _, check := range checks { mux.Handle(fmt.Sprintf("%s/%v", path, check.Name()), adaptCheckToHandler(check.Check)) } @@ -207,8 +208,8 @@ func getExcludedChecks(r *http.Request) sets.String { return sets.NewString() } -// handleRootHealthz returns an http.HandlerFunc that serves the provided checks. -func handleRootHealthz(checks ...HealthChecker) http.HandlerFunc { +// handleRootHealth returns an http.HandlerFunc that serves the provided checks. +func handleRootHealth(name string, checks ...HealthChecker) http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { excluded := getExcludedChecks(r) // failedVerboseLogOutput is for output to the log. It indicates detailed failed output information for the log. @@ -240,8 +241,8 @@ func handleRootHealthz(checks ...HealthChecker) http.HandlerFunc { } // always be verbose on failure if len(failedChecks) > 0 { - klog.V(2).Infof("healthz check failed: %s\n%v", strings.Join(failedChecks, ","), failedVerboseLogOutput.String()) - http.Error(httplog.Unlogged(r, w), fmt.Sprintf("%shealthz check failed", individualCheckOutput.String()), http.StatusInternalServerError) + klog.V(2).Infof("%s check failed: %s\n%v", strings.Join(failedChecks, ","), name, failedVerboseLogOutput.String()) + http.Error(httplog.Unlogged(r, w), fmt.Sprintf("%s%s check failed", individualCheckOutput.String(), name), http.StatusInternalServerError) return } @@ -253,7 +254,7 @@ func handleRootHealthz(checks ...HealthChecker) http.HandlerFunc { } individualCheckOutput.WriteTo(w) - fmt.Fprint(w, "healthz check passed\n") + fmt.Fprintf(w, "%s check passed\n", name) }) } diff --git a/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz_test.go b/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz_test.go index 8356f001fc0f1..f3fb11d3e3e02 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz_test.go +++ b/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz_test.go @@ -94,24 +94,24 @@ func TestInstallPathHandler(t *testing.T) { } -func testMultipleChecks(path string, t *testing.T) { +func testMultipleChecks(path, name string, t *testing.T) { tests := []struct { path string expectedResponse string expectedStatus int addBadCheck bool }{ - {"?verbose", "[+]ping ok\nhealthz check passed\n", http.StatusOK, false}, + {"?verbose", fmt.Sprintf("[+]ping ok\n%s check passed\n", name), http.StatusOK, false}, {"?exclude=dontexist", "ok", http.StatusOK, false}, {"?exclude=bad", "ok", http.StatusOK, true}, - {"?verbose=true&exclude=bad", "[+]ping ok\n[+]bad excluded: ok\nhealthz check passed\n", http.StatusOK, true}, - {"?verbose=true&exclude=dontexist", "[+]ping ok\nwarn: some health checks cannot be excluded: no matches for \"dontexist\"\nhealthz check passed\n", http.StatusOK, false}, + {"?verbose=true&exclude=bad", fmt.Sprintf("[+]ping ok\n[+]bad excluded: ok\n%s check passed\n", name), http.StatusOK, true}, + {"?verbose=true&exclude=dontexist", fmt.Sprintf("[+]ping ok\nwarn: some health checks cannot be excluded: no matches for \"dontexist\"\n%s check passed\n", name), http.StatusOK, false}, {"/ping", "ok", http.StatusOK, false}, {"", "ok", http.StatusOK, false}, - {"?verbose", "[+]ping ok\n[-]bad failed: reason withheld\nhealthz check failed\n", http.StatusInternalServerError, true}, + {"?verbose", fmt.Sprintf("[+]ping ok\n[-]bad failed: reason withheld\n%s check failed\n", name), http.StatusInternalServerError, true}, {"/ping", "ok", http.StatusOK, true}, {"/bad", "internal server error: this will fail\n", http.StatusInternalServerError, true}, - {"", "[+]ping ok\n[-]bad failed: reason withheld\nhealthz check failed\n", http.StatusInternalServerError, true}, + {"", fmt.Sprintf("[+]ping ok\n[-]bad failed: reason withheld\n%s check failed\n", name), http.StatusInternalServerError, true}, } for i, test := range tests { @@ -148,11 +148,11 @@ func testMultipleChecks(path string, t *testing.T) { } func TestMultipleChecks(t *testing.T) { - testMultipleChecks("", t) + testMultipleChecks("", "healthz", t) } func TestMultiplePathChecks(t *testing.T) { - testMultipleChecks("/ready", t) + testMultipleChecks("/ready", "ready", t) } func TestCheckerNames(t *testing.T) { From d88b82220a6bf9e48a05a74520975064d3271bcd Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Thu, 29 Oct 2020 13:55:58 +0100 Subject: [PATCH 54/96] UPSTREAM: : create termination events Origin-commit: a869af0c97e3d97bddedcd76af8a62da6c879c02 UPSTREAM: : apiserver: log new connections during termination Origin-commit: 89d1c3ceeb91755aae9099cd5f76c42a22de18c5 UPSTREAM: : apiserver: create LateConnections events on events in the last 20% of graceful termination time Origin-commit: 91bc33b6ddf9e1d80906717db5bd9096183e8795 UPSTREAM: : apiserver: log source in LateConnections event Origin-commit: 575e54740eb7c2ba635c73f24c22ad77cb5a6e70 UPSTREAM: : apiserver: skip local IPs and probes for LateConnections Origin-commit: 2109b95866e81b84a290f34f0806becc2cbd83e9 UPSTREAM: : only create valid LateConnections/GracefulTermination events UPSTREAM: : kube-apiserver: log non-probe requests before ready UPSTREAM: : apiserver: create hasBeenReadyCh channel UPSTREAM: : kube-apiserver: log non-probe requests before ready UPSTREAM: : kube-apiserver: log non-probe requests before ready --- cmd/kube-apiserver/app/server.go | 46 +++++- .../src/k8s.io/apiserver/pkg/server/config.go | 89 +++++++++++ .../apiserver/pkg/server/genericapiserver.go | 66 ++++++++ .../k8s.io/apiserver/pkg/server/healthz.go | 5 +- .../apiserver/pkg/server/healthz/healthz.go | 28 +++- .../pkg/server/patch_genericapiserver.go | 151 ++++++++++++++++++ 6 files changed, 379 insertions(+), 6 deletions(-) create mode 100644 staging/src/k8s.io/apiserver/pkg/server/patch_genericapiserver.go diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index 0c581fa22dd18..c84dda4ee91a2 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -34,10 +34,11 @@ import ( "k8s.io/kubernetes/openshift-kube-apiserver/enablement" "k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver" - "github.com/go-openapi/spec" "github.com/spf13/cobra" + corev1 "k8s.io/api/core/v1" extensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" utilerrors "k8s.io/apimachinery/pkg/util/errors" utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/apimachinery/pkg/util/sets" @@ -45,6 +46,7 @@ import ( "k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/authorization/authorizer" openapinamer "k8s.io/apiserver/pkg/endpoints/openapi" + "k8s.io/apiserver/pkg/endpoints/request" genericfeatures "k8s.io/apiserver/pkg/features" genericapiserver "k8s.io/apiserver/pkg/server" "k8s.io/apiserver/pkg/server/egressselector" @@ -72,6 +74,8 @@ import ( aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" "k8s.io/kubernetes/cmd/kube-apiserver/app/options" "k8s.io/kubernetes/pkg/api/legacyscheme" + "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/apis/core/v1" "k8s.io/kubernetes/pkg/capabilities" "k8s.io/kubernetes/pkg/features" generatedopenapi "k8s.io/kubernetes/pkg/generated/openapi" @@ -84,6 +88,7 @@ import ( "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/pkg/master/reconcilers" "k8s.io/kubernetes/pkg/master/tunneler" + eventstorage "k8s.io/kubernetes/pkg/registry/core/event/storage" rbacrest "k8s.io/kubernetes/pkg/registry/rbac/rest" "k8s.io/kubernetes/pkg/serviceaccount" ) @@ -373,6 +378,13 @@ func CreateKubeAPIServerConfig( } } + var eventStorage *eventstorage.REST + eventStorage, err = eventstorage.NewREST(genericConfig.RESTOptionsGetter, uint64(s.EventTTL.Seconds())) + if err != nil { + return nil, nil, nil, nil, err + } + genericConfig.EventSink = eventRegistrySink{eventStorage} + config := &master.Config{ GenericConfig: genericConfig, ExtraConfig: master.ExtraConfig{ @@ -814,3 +826,35 @@ func getServiceIPAndRanges(serviceClusterIPRanges string) (net.IP, net.IPNet, ne } return apiServerServiceIP, primaryServiceIPRange, secondaryServiceIPRange, nil } + +// eventRegistrySink wraps an event registry in order to be used as direct event sync, without going through the API. +type eventRegistrySink struct { + *eventstorage.REST +} + +var _ genericapiserver.EventSink = eventRegistrySink{} + +func (s eventRegistrySink) Create(v1event *corev1.Event) (*corev1.Event, error) { + ctx := request.WithNamespace(request.NewContext(), v1event.Namespace) + + var event core.Event + if err := v1.Convert_v1_Event_To_core_Event(v1event, &event, nil); err != nil { + return nil, err + } + + obj, err := s.REST.Create(ctx, &event, nil, &metav1.CreateOptions{}) + if err != nil { + return nil, err + } + ret, ok := obj.(*core.Event) + if !ok { + return nil, fmt.Errorf("expected corev1.Event, got %T", obj) + } + + var v1ret corev1.Event + if err := v1.Convert_core_Event_To_v1_Event(ret, &v1ret, nil); err != nil { + return nil, err + } + + return &v1ret, nil +} diff --git a/staging/src/k8s.io/apiserver/pkg/server/config.go b/staging/src/k8s.io/apiserver/pkg/server/config.go index 71c31e451f085..164e1c293a09e 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/config.go +++ b/staging/src/k8s.io/apiserver/pkg/server/config.go @@ -18,8 +18,10 @@ package server import ( "fmt" + "io/ioutil" "net" "net/http" + "os" goruntime "runtime" "runtime/debug" "sort" @@ -32,6 +34,7 @@ import ( "github.com/go-openapi/spec" "github.com/google/uuid" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer" @@ -64,6 +67,8 @@ import ( "k8s.io/apiserver/pkg/util/feature" utilflowcontrol "k8s.io/apiserver/pkg/util/flowcontrol" "k8s.io/client-go/informers" + "k8s.io/client-go/kubernetes" + v1 "k8s.io/client-go/kubernetes/typed/core/v1" restclient "k8s.io/client-go/rest" "k8s.io/component-base/logs" "k8s.io/klog/v2" @@ -211,6 +216,9 @@ type Config struct { // If not specify any in flags, then genericapiserver will only enable defaultAPIResourceConfig. MergedResourceConfig *serverstore.ResourceConfig + // EventSink receives events about the life cycle of the API server, e.g. readiness, serving, signals and termination. + EventSink EventSink + //=========================================================================== // values below here are targets for removal //=========================================================================== @@ -224,10 +232,18 @@ type Config struct { // and the kind associated with a given resource. As resources are installed, they are registered here. EquivalentResourceRegistry runtime.EquivalentResourceRegistry + // hasBeenReadyCh is closed when /readyz succeeds for the first time. + hasBeenReadyCh chan struct{} + // A func that returns whether the server is terminating. This can be nil. IsTerminating func() bool } +// EventSink allows to create events. +type EventSink interface { + Create(event *corev1.Event) (*corev1.Event, error) +} + type RecommendedConfig struct { Config @@ -327,6 +343,8 @@ func NewConfig(codecs serializer.CodecFactory) *Config { // Default to treating watch as a long-running operation // Generic API servers have no inherent long-running subresources LongRunningFunc: genericfilters.BasicLongRunningRequestCheck(sets.NewString("watch"), sets.NewString()), + + hasBeenReadyCh: make(chan struct{}), } } @@ -489,6 +507,10 @@ func (c *Config) Complete(informers informers.SharedInformerFactory) CompletedCo c.DiscoveryAddresses = discovery.DefaultAddresses{DefaultAddress: c.ExternalAddress} } + if c.EventSink == nil { + c.EventSink = nullEventSink{} + } + AuthorizeClientBearerToken(c.LoopbackClientConfig, &c.Authentication, &c.Authorization) if c.RequestInfoResolver == nil { @@ -516,9 +538,58 @@ func (c *Config) Complete(informers informers.SharedInformerFactory) CompletedCo // Complete fills in any fields not set that are required to have valid data and can be derived // from other fields. If you're going to `ApplyOptions`, do that first. It's mutating the receiver. func (c *RecommendedConfig) Complete() CompletedConfig { + if c.ClientConfig != nil { + ref, err := eventReference() + if err != nil { + klog.Warningf("Failed to derive event reference, won't create events: %v", err) + c.EventSink = nullEventSink{} + } else { + ns := ref.Namespace + if len(ns) == 0 { + ns = "default" + } + c.EventSink = &v1.EventSinkImpl{ + Interface: kubernetes.NewForConfigOrDie(c.ClientConfig).CoreV1().Events(ns), + } + } + } + return c.Config.Complete(c.SharedInformerFactory) } +func eventReference() (*corev1.ObjectReference, error) { + ns := os.Getenv("POD_NAMESPACE") + pod := os.Getenv("POD_NAME") + if len(ns) == 0 && len(pod) > 0 { + serviceAccountNamespaceFile := "/var/run/secrets/kubernetes.io/serviceaccount/namespace" + if _, err := os.Stat(serviceAccountNamespaceFile); err == nil { + bs, err := ioutil.ReadFile(serviceAccountNamespaceFile) + if err != nil { + return nil, err + } + ns = string(bs) + } + } + if len(ns) == 0 { + pod = "" + ns = "kube-system" + } + if len(pod) == 0 { + return &corev1.ObjectReference{ + Kind: "Namespace", + Name: ns, + APIVersion: "v1", + }, nil + } + + return &corev1.ObjectReference{ + Kind: "Pod", + Namespace: ns, + Name: pod, + APIVersion: "v1", + }, nil +} + // New creates a new server which logically combines the handling chain with the passed server. // name is used to differentiate for logging. The handler chain in particular can be difficult as it starts delgating. // delegationTarget may not be nil. @@ -570,13 +641,23 @@ func (c completedConfig) New(name string, delegationTarget DelegationTarget) (*G livezChecks: c.LivezChecks, readyzChecks: c.ReadyzChecks, readinessStopCh: make(chan struct{}), + hasBeenReadyCh: c.hasBeenReadyCh, livezGracePeriod: c.LivezGracePeriod, DiscoveryGroupManager: discovery.NewRootAPIsHandler(c.DiscoveryAddresses, c.Serializer), maxRequestBodyBytes: c.MaxRequestBodyBytes, livezClock: clock.RealClock{}, + + eventSink: c.EventSink, + } + + ref, err := eventReference() + if err != nil { + klog.Warningf("Failed to derive event reference, won't create events: %v", err) + c.EventSink = nullEventSink{} } + s.eventRef = ref for { if c.JSONPatchMaxCopyBytes <= 0 { @@ -686,6 +767,8 @@ func DefaultBuildHandlerChain(apiHandler http.Handler, c *Config) http.Handler { handler = genericfilters.WithCORS(handler, c.CorsAllowedOriginList, nil, nil, nil, "true") handler = genericfilters.WithTimeoutForNonLongRunningRequests(handler, c.LongRunningFunc, c.RequestTimeout) handler = genericfilters.WithWaitGroup(handler, c.LongRunningFunc, c.HandlerChainWaitGroup) + handler = WithNonReadyRequestLogging(handler, c.hasBeenReadyCh) + handler = WithLateConnectionFilter(handler) handler = genericapifilters.WithRequestInfo(handler, c.RequestInfoResolver) if c.SecureServing != nil && !c.SecureServing.DisableHTTP2 && c.GoawayChance > 0 { handler = genericfilters.WithProbabilisticGoaway(handler, c.GoawayChance) @@ -791,3 +874,9 @@ func AuthorizeClientBearerToken(loopback *restclient.Config, authn *Authenticati authz.Authorizer = authorizerunion.New(tokenAuthorizer, authz.Authorizer) } } + +type nullEventSink struct{} + +func (nullEventSink) Create(event *corev1.Event) (*corev1.Event, error) { + return nil, nil +} diff --git a/staging/src/k8s.io/apiserver/pkg/server/genericapiserver.go b/staging/src/k8s.io/apiserver/pkg/server/genericapiserver.go index e0bbc31671c50..7da219f49359c 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/genericapiserver.go +++ b/staging/src/k8s.io/apiserver/pkg/server/genericapiserver.go @@ -19,6 +19,7 @@ package server import ( "fmt" "net/http" + "os" gpath "path" "strings" "sync" @@ -27,6 +28,7 @@ import ( systemd "github.com/coreos/go-systemd/daemon" "github.com/go-openapi/spec" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -166,6 +168,8 @@ type GenericAPIServer struct { // the readiness stop channel is used to signal that the apiserver has initiated a shutdown sequence, this // will cause readyz to return unhealthy. readinessStopCh chan struct{} + // hasBeenReadyCh is closed when /readyz succeeds for the first time. + hasBeenReadyCh chan struct{} // auditing. The backend is started after the server starts listening. AuditBackend audit.Backend @@ -197,6 +201,10 @@ type GenericAPIServer struct { // The limit on the request body size that would be accepted and decoded in a write request. // 0 means no limit. maxRequestBodyBytes int64 + + // EventSink creates events. + eventSink EventSink + eventRef *corev1.ObjectReference } // DelegationTarget is an interface which allows for composition of API servers with top level handling that works @@ -326,15 +334,41 @@ func (s preparedGenericAPIServer) Run(stopCh <-chan struct{}) error { // and stop sending traffic to this server. close(s.readinessStopCh) + s.Eventf(corev1.EventTypeNormal, "TerminationStart", "Received signal to terminate, becoming unready, but keeping serving") + time.Sleep(s.ShutdownDelayDuration) + + s.Eventf(corev1.EventTypeNormal, "TerminationMinimalShutdownDurationFinished", "The minimal shutdown duration of %v finished", s.ShutdownDelayDuration) }() + lateStopCh := make(chan struct{}) + if s.ShutdownDelayDuration > 0 { + go func() { + defer close(lateStopCh) + + <-stopCh + + time.Sleep(s.ShutdownDelayDuration * 8 / 10) + }() + } + + s.SecureServingInfo.Listener = &terminationLoggingListener{ + Listener: s.SecureServingInfo.Listener, + lateStopCh: lateStopCh, + } + unexpectedRequestsEventf.Store(s.Eventf) + // close socket after delayed stopCh stoppedCh, err := s.NonBlockingRun(delayedStopCh) if err != nil { return err } + go func() { + <-delayedStopCh + s.Eventf(corev1.EventTypeNormal, "TerminationStoppedServing", "Server has stopped listening") + }() + <-stopCh // run shutdown hooks directly. This includes deregistering from the kubernetes endpoint in case of kube-apiserver. @@ -342,6 +376,7 @@ func (s preparedGenericAPIServer) Run(stopCh <-chan struct{}) error { if err != nil { return err } + s.Eventf(corev1.EventTypeNormal, "TerminationPreShutdownHooksFinished", "All pre-shutdown hooks have been finished") // wait for the delayed stopCh before closing the handler chain (it rejects everything after Wait has been called). <-delayedStopCh @@ -350,6 +385,7 @@ func (s preparedGenericAPIServer) Run(stopCh <-chan struct{}) error { // Wait for all requests to finish, which are bounded by the RequestTimeout variable. s.HandlerChainWaitGroup.Wait() + s.Eventf(corev1.EventTypeNormal, "TerminationGracefulTerminationFinished", "All pending requests processed") return nil } @@ -604,3 +640,33 @@ func getResourceNamesForGroup(apiPrefix string, apiGroupInfo *APIGroupInfo, path return resourceNames, nil } + +// Eventf creates an event with the API server as source, either in default namespace against default namespace, or +// if POD_NAME/NAMESPACE are set against that pod. +func (s *GenericAPIServer) Eventf(eventType, reason, messageFmt string, args ...interface{}) { + t := metav1.Time{Time: time.Now()} + host, _ := os.Hostname() // expicitly ignore error. Empty host is fine + + ref := *s.eventRef + if len(ref.Namespace) == 0 { + ref.Namespace = "default" // TODO: event broadcaster sets event ns to default. We have to match. Odd. + } + + e := &corev1.Event{ + ObjectMeta: metav1.ObjectMeta{ + Name: fmt.Sprintf("%v.%x", ref.Name, t.UnixNano()), + Namespace: ref.Namespace, + }, + InvolvedObject: ref, + Reason: reason, + Message: fmt.Sprintf(messageFmt, args...), + Type: eventType, + Source: corev1.EventSource{Component: "apiserver", Host: host}, + } + + klog.V(2).Infof("Event(%#v): type: '%v' reason: '%v' %v", e.InvolvedObject, e.Type, e.Reason, e.Message) + + if _, err := s.eventSink.Create(e); err != nil { + klog.Warningf("failed to create event %s/%s: %v", e.Namespace, e.Name, err) + } +} diff --git a/staging/src/k8s.io/apiserver/pkg/server/healthz.go b/staging/src/k8s.io/apiserver/pkg/server/healthz.go index 645886949bb70..ff8dd2022962b 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/healthz.go +++ b/staging/src/k8s.io/apiserver/pkg/server/healthz.go @@ -101,7 +101,10 @@ func (s *GenericAPIServer) installReadyz() { s.readyzLock.Lock() defer s.readyzLock.Unlock() s.readyzChecksInstalled = true - healthz.InstallReadyzHandler(s.Handler.NonGoRestfulMux, s.readyzChecks...) + healthz.InstallReadyzHandlerWithHealthyFunc(s.Handler.NonGoRestfulMux, func() { + // note: InstallReadyzHandlerWithHealthyFunc guarantees that this is called only once + close(s.hasBeenReadyCh) + }, s.readyzChecks...) } // installLivez creates the livez endpoint for this server. diff --git a/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz.go b/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz.go index e80b8501edf95..f5eae360fbb3c 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz.go +++ b/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz.go @@ -140,6 +140,12 @@ func InstallReadyzHandler(mux mux, checks ...HealthChecker) { InstallPathHandler(mux, "/readyz", checks...) } +// InstallReadyzHandlerWithHealthyFunc is like InstallReadyzHandler, but in addition call firstTimeReady +// the first time /readyz succeeds. +func InstallReadyzHandlerWithHealthyFunc(mux mux, firstTimeReady func(), checks ...HealthChecker) { + InstallPathHandlerWithHealthyFunc(mux, "/readyz", firstTimeReady, checks...) +} + // InstallLivezHandler registers handlers for liveness checking on the path // "/livez" to mux. *All handlers* for mux must be specified in // exactly one call to InstallHandler. Calling InstallHandler more @@ -154,6 +160,12 @@ func InstallLivezHandler(mux mux, checks ...HealthChecker) { // InstallPathHandler more than once for the same path and mux will // result in a panic. func InstallPathHandler(mux mux, path string, checks ...HealthChecker) { + InstallPathHandlerWithHealthyFunc(mux, path, nil, checks...) +} + +// InstallPathHandlerWithHealthyFunc is like InstallPathHandler, but calls firstTimeHealthy exactly once +// when the handler succeeds for the first time. +func InstallPathHandlerWithHealthyFunc(mux mux, path string, firstTimeHealthy func(), checks ...HealthChecker) { if len(checks) == 0 { klog.V(5).Info("No default health checks specified. Installing the ping handler.") checks = []HealthChecker{PingHealthz} @@ -172,7 +184,7 @@ func InstallPathHandler(mux mux, path string, checks ...HealthChecker) { /* component = */ "", /* deprecated */ false, /* removedRelease */ "", - handleRootHealth(name, checks...))) + handleRootHealth(name, firstTimeHealthy, checks...))) for _, check := range checks { mux.Handle(fmt.Sprintf("%s/%v", path, check.Name()), adaptCheckToHandler(check.Check)) } @@ -209,8 +221,10 @@ func getExcludedChecks(r *http.Request) sets.String { } // handleRootHealth returns an http.HandlerFunc that serves the provided checks. -func handleRootHealth(name string, checks ...HealthChecker) http.HandlerFunc { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { +func handleRootHealth(name string, firstTimeHealthy func(), checks ...HealthChecker) http.HandlerFunc { + var notifyOnce sync.Once + + return func(w http.ResponseWriter, r *http.Request) { excluded := getExcludedChecks(r) // failedVerboseLogOutput is for output to the log. It indicates detailed failed output information for the log. var failedVerboseLogOutput bytes.Buffer @@ -248,6 +262,12 @@ func handleRootHealth(name string, checks ...HealthChecker) http.HandlerFunc { w.Header().Set("Content-Type", "text/plain; charset=utf-8") w.Header().Set("X-Content-Type-Options", "nosniff") + + // signal first time this is healthy + if firstTimeHealthy != nil { + notifyOnce.Do(firstTimeHealthy) + } + if _, found := r.URL.Query()["verbose"]; !found { fmt.Fprint(w, "ok") return @@ -255,7 +275,7 @@ func handleRootHealth(name string, checks ...HealthChecker) http.HandlerFunc { individualCheckOutput.WriteTo(w) fmt.Fprintf(w, "%s check passed\n", name) - }) + } } // adaptCheckToHandler returns an http.HandlerFunc that serves the provided checks. diff --git a/staging/src/k8s.io/apiserver/pkg/server/patch_genericapiserver.go b/staging/src/k8s.io/apiserver/pkg/server/patch_genericapiserver.go new file mode 100644 index 0000000000000..bb798b198ba5a --- /dev/null +++ b/staging/src/k8s.io/apiserver/pkg/server/patch_genericapiserver.go @@ -0,0 +1,151 @@ +/* +Copyright 2020 The Kubernetes Authors. + +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. +*/ + +package server + +import ( + "net" + "net/http" + "strings" + "sync" + goatomic "sync/atomic" + + "go.uber.org/atomic" + + corev1 "k8s.io/api/core/v1" + "k8s.io/klog/v2" +) + +// terminationLoggingListener wraps the given listener to mark late connections +// as such, identified by the remote address. In parallel, we have a filter that +// logs bad requests through these connections. We need this filter to get +// access to the http path in order to filter out healthz or readyz probes that +// are allowed at any point during termination. +// +// Connections are late after the lateStopCh has been closed. +type terminationLoggingListener struct { + net.Listener + lateStopCh <-chan struct{} +} + +type eventfFunc func(eventType, reason, messageFmt string, args ...interface{}) + +var ( + lateConnectionRemoteAddrsLock sync.RWMutex + lateConnectionRemoteAddrs = map[string]bool{} + + unexpectedRequestsEventf goatomic.Value +) + +func (l *terminationLoggingListener) Accept() (net.Conn, error) { + c, err := l.Listener.Accept() + if err != nil { + return nil, err + } + + select { + case <-l.lateStopCh: + lateConnectionRemoteAddrsLock.Lock() + defer lateConnectionRemoteAddrsLock.Unlock() + lateConnectionRemoteAddrs[c.RemoteAddr().String()] = true + default: + } + + return c, nil +} + +// WithLateConnectionFilter logs every non-probe request that comes through a late connection identified by remote address. +func WithLateConnectionFilter(handler http.Handler) http.Handler { + var lateRequestReceived atomic.Bool + + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + lateConnectionRemoteAddrsLock.RLock() + late := lateConnectionRemoteAddrs[r.RemoteAddr] + lateConnectionRemoteAddrsLock.RUnlock() + + if late { + if pth := "/" + strings.TrimLeft(r.URL.Path, "/"); pth != "/readyz" && pth != "/healthz" && pth != "/livez" { + if isLocal(r) { + klog.V(4).Infof("Loopback request to %q (user agent %q) through connection created very late in the graceful termination process (more than 80%% has passed). This client probably does not watch /readyz and might get failures when termination is over.", r.URL.Path, r.UserAgent()) + } else { + klog.Warningf("Request to %q (source IP %s, user agent %q) through a connection created very late in the graceful termination process (more than 80%% has passed), possibly a sign for a broken load balancer setup.", r.URL.Path, r.RemoteAddr, r.UserAgent()) + + // create only one event to avoid event spam. + var eventf eventfFunc + eventf, _ = unexpectedRequestsEventf.Load().(eventfFunc) + if swapped := lateRequestReceived.CAS(false, true); swapped && eventf != nil { + eventf(corev1.EventTypeWarning, "LateConnections", "The apiserver received connections (e.g. from %q, user agent %q) very late in the graceful termination process, possibly a sign for a broken load balancer setup.", r.RemoteAddr, r.UserAgent()) + } + } + } + } + + handler.ServeHTTP(w, r) + }) +} + +// WithNonReadyRequestLogging rejects the request until the process has been ready once. +func WithNonReadyRequestLogging(handler http.Handler, hasBeenReadyCh <-chan struct{}) http.Handler { + if hasBeenReadyCh == nil { + return handler + } + + var nonReadyRequestReceived atomic.Bool + + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + select { + case <-hasBeenReadyCh: + handler.ServeHTTP(w, r) + return + default: + } + + // ignore connections to local IP. Those clients better know what they are doing. + if pth := "/" + strings.TrimLeft(r.URL.Path, "/"); pth != "/readyz" && pth != "/healthz" && pth != "/livez" { + if isLocal(r) { + if !isKubeApiserverLoopBack(r) { + klog.V(2).Infof("Loopback request to %q (user agent %q) before server is ready. This client probably does not watch /readyz and might get inconsistent answers.", r.URL.Path, r.UserAgent()) + } + } else { + klog.Warningf("Request to %q (source IP %s, user agent %q) before server is ready, possibly a sign for a broken load balancer setup.", r.URL.Path, r.RemoteAddr, r.UserAgent()) + + // create only one event to avoid event spam. + var eventf eventfFunc + eventf, _ = unexpectedRequestsEventf.Load().(eventfFunc) + if swapped := nonReadyRequestReceived.CAS(false, true); swapped && eventf != nil { + eventf(corev1.EventTypeWarning, "NonReadyRequests", "The kube-apiserver received requests (e.g. from %q, user agent %q, accessing %s) before it was ready, possibly a sign for a broken load balancer setup.", r.RemoteAddr, r.UserAgent(), r.URL.Path) + } + } + } + + handler.ServeHTTP(w, r) + }) +} + +func isLocal(req *http.Request) bool { + host, _, err := net.SplitHostPort(req.RemoteAddr) + if err != nil { + // ignore error and keep going + } else if ip := net.ParseIP(host); ip != nil { + return ip.IsLoopback() + } + + return false +} + +func isKubeApiserverLoopBack(req *http.Request) bool { + return strings.HasPrefix(req.UserAgent(), "kube-apiserver/") +} From 2821d75d53f9a32aa83616c1d015c0865d9aa6e3 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Thu, 29 Oct 2020 13:55:58 +0100 Subject: [PATCH 55/96] UPSTREAM: : bootstrap-rbac-policy: move over .well-known rules Origin-commit: 45f159f05b92c893c175ffe968f89a34f5581f5b --- .../authorizer/rbac/bootstrappolicy/policy.go | 10 ++++++++++ .../testdata/cluster-role-bindings.yaml | 20 +++++++++++++++++++ .../testdata/cluster-roles.yaml | 15 ++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go index 8fce9fa434eaa..3acef9ba99a01 100644 --- a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go +++ b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go @@ -208,6 +208,15 @@ func clusterRoles() []rbacv1.ClusterRole { ).RuleOrDie(), }, }, + { + // a role which provides unauthenticated access. + ObjectMeta: metav1.ObjectMeta{Name: "system:openshift:public-info-viewer"}, + Rules: []rbacv1.PolicyRule{ + rbacv1helpers.NewRule("get").URLs( + "/.well-known", "/.well-known/*", + ).RuleOrDie(), + }, + }, { // a role which provides minimal resource access to allow a "normal" user to learn information about themselves ObjectMeta: metav1.ObjectMeta{Name: "system:basic-user"}, @@ -566,6 +575,7 @@ func clusterRoleBindings() []rbacv1.ClusterRoleBinding { rbacv1helpers.NewClusterBinding("system:discovery").Groups(user.AllAuthenticated).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:basic-user").Groups(user.AllAuthenticated).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:public-info-viewer").Groups(user.AllAuthenticated, user.AllUnauthenticated).BindingOrDie(), + rbacv1helpers.NewClusterBinding("system:openshift:public-info-viewer").Groups(user.AllAuthenticated, user.AllUnauthenticated).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:node-proxier").Users(user.KubeProxy).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:kube-controller-manager").Users(user.KubeControllerManager).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:kube-dns").SAs("kube-system", "kube-dns").BindingOrDie(), diff --git a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-role-bindings.yaml b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-role-bindings.yaml index 05e333f5d732c..e6b888672a1de 100644 --- a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-role-bindings.yaml +++ b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-role-bindings.yaml @@ -132,6 +132,26 @@ items: - apiGroup: rbac.authorization.k8s.io kind: User name: system:kube-proxy +- apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRoleBinding + metadata: + annotations: + rbac.authorization.kubernetes.io/autoupdate: "true" + creationTimestamp: null + labels: + kubernetes.io/bootstrapping: rbac-defaults + name: system:openshift:public-info-viewer + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:openshift:public-info-viewer + subjects: + - apiGroup: rbac.authorization.k8s.io + kind: Group + name: system:authenticated + - apiGroup: rbac.authorization.k8s.io + kind: Group + name: system:unauthenticated - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: diff --git a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-roles.yaml b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-roles.yaml index b517b51eeb09f..cffc298feeea4 100644 --- a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-roles.yaml +++ b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-roles.yaml @@ -1130,6 +1130,21 @@ items: verbs: - list - watch +- apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRole + metadata: + annotations: + rbac.authorization.kubernetes.io/autoupdate: "true" + creationTimestamp: null + labels: + kubernetes.io/bootstrapping: rbac-defaults + name: system:openshift:public-info-viewer + rules: + - nonResourceURLs: + - /.well-known + - /.well-known/* + verbs: + - get - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: From 9df5ce25ab180dc74d218dc251c2c54732579575 Mon Sep 17 00:00:00 2001 From: Mike Fedosin Date: Thu, 29 Oct 2020 13:55:58 +0100 Subject: [PATCH 56/96] UPSTREAM: : Read availability zone name from metadata Instead of making a request to Cinder we can read availability zone name from metadata. Origin-commit: ae11a2930f11948c5539612ca9177c1567d67207 --- .../legacy-cloud-providers/openstack/openstack_volumes.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack_volumes.go b/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack_volumes.go index 4b72a5b0339a1..7e8f217a951ff 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack_volumes.go +++ b/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack_volumes.go @@ -736,15 +736,15 @@ func (os *OpenStack) GetLabelsForVolume(ctx context.Context, pv *v1.PersistentVo return nil, nil } - // Get Volume - volume, err := os.getVolume(pv.Spec.Cinder.VolumeID) + // Get metadata + md, err := getMetadata(os.metadataOpts.SearchOrder) if err != nil { return nil, err } // Construct Volume Labels labels := make(map[string]string) - labels[v1.LabelZoneFailureDomain] = volume.AvailabilityZone + labels[v1.LabelZoneFailureDomain] = md.AvailabilityZone labels[v1.LabelZoneRegion] = os.region klog.V(4).Infof("The Volume %s has labels %v", pv.Spec.Cinder.VolumeID, labels) From b0cc54b2fb34028a978d1342ba2392c32a3808f0 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Thu, 29 Oct 2020 13:55:58 +0100 Subject: [PATCH 57/96] UPSTREAM: : warn only about unknown feature gates --- staging/src/k8s.io/component-base/featuregate/feature_gate.go | 3 ++- .../k8s.io/component-base/featuregate/feature_gate_test.go | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/staging/src/k8s.io/component-base/featuregate/feature_gate.go b/staging/src/k8s.io/component-base/featuregate/feature_gate.go index c805ffb01b573..a61276b9d4889 100644 --- a/staging/src/k8s.io/component-base/featuregate/feature_gate.go +++ b/staging/src/k8s.io/component-base/featuregate/feature_gate.go @@ -218,7 +218,8 @@ func (f *featureGate) SetFromMap(m map[string]bool) error { k := Feature(k) featureSpec, ok := known[k] if !ok { - return fmt.Errorf("unrecognized feature gate: %s", k) + klog.Warningf("unrecognized feature gate: %s", k) + continue } if featureSpec.LockToDefault && featureSpec.Default != v { return fmt.Errorf("cannot set feature gate %v to %v, feature is locked to %v", k, v, featureSpec.Default) diff --git a/staging/src/k8s.io/component-base/featuregate/feature_gate_test.go b/staging/src/k8s.io/component-base/featuregate/feature_gate_test.go index 610b271dc385f..5e0fd2dde6203 100644 --- a/staging/src/k8s.io/component-base/featuregate/feature_gate_test.go +++ b/staging/src/k8s.io/component-base/featuregate/feature_gate_test.go @@ -52,7 +52,7 @@ func TestFeatureGateFlag(t *testing.T) { testAlphaGate: false, testBetaGate: false, }, - parseError: "unrecognized feature gate: fooBarBaz", + //parseError: "unrecognized feature gate: fooBarBaz", }, { arg: "AllAlpha=false", @@ -356,7 +356,7 @@ func TestFeatureGateSetFromMap(t *testing.T) { testAlphaGate: false, testBetaGate: false, }, - setmapError: "unrecognized feature gate:", + //setmapError: "unrecognized feature gate:", }, { name: "set locked gates", From 9002d3fd4778bd164d6127fd6c016f4e7b469688 Mon Sep 17 00:00:00 2001 From: Lukasz Szaszkiewicz Date: Thu, 29 Oct 2020 13:55:58 +0100 Subject: [PATCH 58/96] UPSTREAM: : CHECK(workload) disable kubectl client-side validation tests --- test/e2e/apimachinery/crd_publish_openapi.go | 35 +++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/test/e2e/apimachinery/crd_publish_openapi.go b/test/e2e/apimachinery/crd_publish_openapi.go index 1431e5388efb8..502d624b427dc 100644 --- a/test/e2e/apimachinery/crd_publish_openapi.go +++ b/test/e2e/apimachinery/crd_publish_openapi.go @@ -86,23 +86,26 @@ var _ = SIGDescribe("CustomResourcePublishOpenAPI [Privileged:ClusterAdmin]", fu framework.Failf("failed to delete valid CR: %v", err) } - ginkgo.By("client-side validation (kubectl create and apply) rejects request with unknown properties when disallowed by the schema") - unknownCR := fmt.Sprintf(`{%s,"spec":{"foo":true}}`, meta) - if _, err := framework.RunKubectlInput(f.Namespace.Name, unknownCR, ns, "create", "-f", "-"); err == nil || !strings.Contains(err.Error(), `unknown field "foo"`) { - framework.Failf("unexpected no error when creating CR with unknown field: %v", err) - } - if _, err := framework.RunKubectlInput(f.Namespace.Name, unknownCR, ns, "apply", "-f", "-"); err == nil || !strings.Contains(err.Error(), `unknown field "foo"`) { - framework.Failf("unexpected no error when applying CR with unknown field: %v", err) - } + // TODO(workload): re-enable client-side validation tests + /* + ginkgo.By("client-side validation (kubectl create and apply) rejects request with unknown properties when disallowed by the schema") + unknownCR := fmt.Sprintf(`{%s,"spec":{"foo":true}}`, meta) + if _, err := framework.RunKubectlInput(f.Namespace.Name, unknownCR, ns, "create", "-f", "-"); err == nil || !strings.Contains(err.Error(), `unknown field "foo"`) { + framework.Failf("unexpected no error when creating CR with unknown field: %v", err) + } + if _, err := framework.RunKubectlInput(f.Namespace.Name, unknownCR, ns, "apply", "-f", "-"); err == nil || !strings.Contains(err.Error(), `unknown field "foo"`) { + framework.Failf("unexpected no error when applying CR with unknown field: %v", err) + } - ginkgo.By("client-side validation (kubectl create and apply) rejects request without required properties") - noRequireCR := fmt.Sprintf(`{%s,"spec":{"bars":[{"age":"10"}]}}`, meta) - if _, err := framework.RunKubectlInput(f.Namespace.Name, noRequireCR, ns, "create", "-f", "-"); err == nil || !strings.Contains(err.Error(), `missing required field "name"`) { - framework.Failf("unexpected no error when creating CR without required field: %v", err) - } - if _, err := framework.RunKubectlInput(f.Namespace.Name, noRequireCR, ns, "apply", "-f", "-"); err == nil || !strings.Contains(err.Error(), `missing required field "name"`) { - framework.Failf("unexpected no error when applying CR without required field: %v", err) - } + ginkgo.By("client-side validation (kubectl create and apply) rejects request without required properties") + noRequireCR := fmt.Sprintf(`{%s,"spec":{"bars":[{"age":"10"}]}}`, meta) + if _, err := framework.RunKubectlInput(f.Namespace.Name, noRequireCR, ns, "create", "-f", "-"); err == nil || !strings.Contains(err.Error(), `missing required field "name"`) { + framework.Failf("unexpected no error when creating CR without required field: %v", err) + } + if _, err := framework.RunKubectlInput(f.Namespace.Name, noRequireCR, ns, "apply", "-f", "-"); err == nil || !strings.Contains(err.Error(), `missing required field "name"`) { + framework.Failf("unexpected no error when applying CR without required field: %v", err) + } + */ ginkgo.By("kubectl explain works to explain CR properties") if err := verifyKubectlExplain(f.Namespace.Name, crd.Crd.Spec.Names.Plural, `(?s)DESCRIPTION:.*Foo CRD for Testing.*FIELDS:.*apiVersion.*.*APIVersion defines.*spec.*.*Specification of Foo`); err != nil { From 17bdbff61b3f2d65d7b997eac7e1a6ecb1b32572 Mon Sep 17 00:00:00 2001 From: Ryan Phillips Date: Thu, 29 Oct 2020 13:55:58 +0100 Subject: [PATCH 59/96] UPSTREAM: : disable AES24, not supported by FIPS Origin-commit: beac12d815b4099cfd4f4d953da4b8789054be51 --- .../apiserver/pkg/storage/value/encrypt/aes/aes_test.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/aes/aes_test.go b/staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/aes/aes_test.go index aea755423a5cb..108134b83bfda 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/aes/aes_test.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/aes/aes_test.go @@ -364,10 +364,12 @@ func TestRoundTrip(t *testing.T) { if err != nil { t.Fatal(err) } + /* FIPS disabled aes24block, err := aes.NewCipher([]byte(bytes.Repeat([]byte("b"), 24))) if err != nil { t.Fatal(err) } + */ aes32block, err := aes.NewCipher([]byte(bytes.Repeat([]byte("c"), 32))) if err != nil { t.Fatal(err) @@ -379,7 +381,7 @@ func TestRoundTrip(t *testing.T) { t value.Transformer }{ {name: "GCM 16 byte key", t: NewGCMTransformer(aes16block)}, - {name: "GCM 24 byte key", t: NewGCMTransformer(aes24block)}, + // FIPS disabled {name: "GCM 24 byte key", t: NewGCMTransformer(aes24block)}, {name: "GCM 32 byte key", t: NewGCMTransformer(aes32block)}, {name: "CBC 32 byte key", t: NewCBCTransformer(aes32block)}, } From 5e4001a364fb13709de13ac920a74f7af8426f98 Mon Sep 17 00:00:00 2001 From: Stanislav Laznicka Date: Thu, 29 Oct 2020 13:55:58 +0100 Subject: [PATCH 60/96] UPSTREAM: : add crdvalidation for apiserver.spec.tlsSecurityProfile Origin-commit: 84ba7fc304870a30df7136da14bccb4d5232f075 --- .../go-runner/testdata/tartest/out.tar.gz | Bin 0 -> 174 bytes .../apiserver/validate_apiserver.go | 98 ++++++++++++- .../apiserver/validate_apiserver_test.go | 132 +++++++++++++++++- 3 files changed, 223 insertions(+), 7 deletions(-) create mode 100644 cluster/images/conformance/go-runner/testdata/tartest/out.tar.gz diff --git a/cluster/images/conformance/go-runner/testdata/tartest/out.tar.gz b/cluster/images/conformance/go-runner/testdata/tartest/out.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7cb5eb8413a344ee1e01a64de3bc57e2d44d2067 GIT binary patch literal 174 zcmV;f08#%RiwFP!00000|LoI23c@fD1<)L&H}Fp;iRX#7La?|<+Ks1|jN(o~AuXlz zHUp(JQ-1y>jRTps03bM5CmlVWlS!TnvWD3EV7(;=17ff@9UAW?<}$@>fHKDWEuF8Q z-y3rI@}1YOyyr$p{#_rZxb`M$4K;t;_>8~$AGH5Vko>j(yH(~>pYowz1J~+|-}~>F cq5WTi1h4&9N~zs>1ONd4{}&!zCjbxt0NQX Date: Thu, 29 Oct 2020 13:55:59 +0100 Subject: [PATCH 61/96] UPSTREAM: : bump nodes ready timeout Origin-commit: 4498bb4de03ff3a910fed10bed337ba2fcdf321d --- test/e2e/framework/framework.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/framework/framework.go b/test/e2e/framework/framework.go index 794ec2a239565..42325720a5135 100644 --- a/test/e2e/framework/framework.go +++ b/test/e2e/framework/framework.go @@ -468,7 +468,7 @@ func (f *Framework) AfterEach() { // Check whether all nodes are ready after the test. // This is explicitly done at the very end of the test, to avoid // e.g. not removing namespace in case of this failure. - if err := AllNodesReady(f.ClientSet, 3*time.Minute); err != nil { + if err := AllNodesReady(f.ClientSet, 7*time.Minute); err != nil { Failf("All nodes should be ready after test, %v", err) } } From fd9adfd6f2a789520ba293912cb3e28dc30bbdc4 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:55:59 +0100 Subject: [PATCH 62/96] UPSTREAM: : adapt to the new flag 'structure' --- test/e2e/cloud/gcp/patch_flagaccess.go | 17 +++++++ test/e2e/e2e_test.go | 11 +--- test/e2e/patch_from_e2e_testfile.go | 69 ++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 10 deletions(-) create mode 100644 test/e2e/cloud/gcp/patch_flagaccess.go create mode 100644 test/e2e/patch_from_e2e_testfile.go diff --git a/test/e2e/cloud/gcp/patch_flagaccess.go b/test/e2e/cloud/gcp/patch_flagaccess.go new file mode 100644 index 0000000000000..09dda3c316177 --- /dev/null +++ b/test/e2e/cloud/gcp/patch_flagaccess.go @@ -0,0 +1,17 @@ +package gcp + +func GetUpgradeTarget() string { + return *upgradeTarget +} + +func SetUpgradeTarget(val string) { + upgradeTarget = &val +} + +func GetUpgradeImage() string { + return *upgradeImage +} + +func SetUpgradeImage(val string) { + upgradeImage = &val +} diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go index ebf5228018e7a..2af9a89f952f2 100644 --- a/test/e2e/e2e_test.go +++ b/test/e2e/e2e_test.go @@ -34,7 +34,6 @@ import ( "k8s.io/component-base/version" "k8s.io/kubernetes/test/e2e/framework" - "k8s.io/kubernetes/test/e2e/framework/config" "k8s.io/kubernetes/test/e2e/framework/testfiles" "k8s.io/kubernetes/test/e2e/generated" "k8s.io/kubernetes/test/utils/image" @@ -62,20 +61,12 @@ import ( var viperConfig = flag.String("viper-config", "", "The name of a viper config file (https://github.com/spf13/viper#what-is-viper). All e2e command line parameters can also be configured in such a file. May contain a path and may or may not contain the file suffix. The default is to look for an optional file with `e2e` as base name. If a file is specified explicitly, it must be present.") -// handleFlags sets up all flags and parses the command line. -func handleFlags() { - config.CopyFlags(config.Flags, flag.CommandLine) - framework.RegisterCommonFlags(flag.CommandLine) - framework.RegisterClusterFlags(flag.CommandLine) - flag.Parse() -} - func TestMain(m *testing.M) { var versionFlag bool flag.CommandLine.BoolVar(&versionFlag, "version", false, "Displays version information.") // Register test flags, then parse flags. - handleFlags() + HandleFlags() // Now that we know which Viper config (if any) was chosen, // parse it and update those options which weren't already set via command line flags diff --git a/test/e2e/patch_from_e2e_testfile.go b/test/e2e/patch_from_e2e_testfile.go new file mode 100644 index 0000000000000..c11289ff7893f --- /dev/null +++ b/test/e2e/patch_from_e2e_testfile.go @@ -0,0 +1,69 @@ +package e2e + +import ( + "flag" + "fmt" + "os" + + "k8s.io/kubernetes/test/e2e/framework/config" + + "k8s.io/kubernetes/test/e2e/framework" + "k8s.io/kubernetes/test/e2e/framework/testfiles" + "k8s.io/kubernetes/test/e2e/generated" + "k8s.io/kubernetes/test/utils/image" +) + +func HandleFlags() { + config.CopyFlags(config.Flags, flag.CommandLine) + framework.RegisterCommonFlags(flag.CommandLine) + framework.RegisterClusterFlags(flag.CommandLine) + flag.Parse() +} + +// this function matches the init block from e2e_test.go +func ViperizeFlags(viperConfig string) { + HandleFlags() + + // Register framework flags, then handle flags and Viper config. + if err := viperizeFlags(viperConfig, "e2e", flag.CommandLine); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + + if framework.TestContext.ListImages { + for _, v := range image.GetImageConfigs() { + fmt.Println(v.GetE2EImage()) + } + os.Exit(0) + } + + framework.AfterReadingAllFlags(&framework.TestContext) + + // this came from the init block, but it breaks on openshift. Not really sure why. + // TODO: Deprecating repo-root over time... instead just use gobindata_util.go , see #23987. + // Right now it is still needed, for example by + // test/e2e/framework/ingress/ingress_utils.go + // for providing the optional secret.yaml file and by + // test/e2e/framework/util.go for cluster/log-dump. + //if framework.TestContext.RepoRoot != "" { + // testfiles.AddFileSource(testfiles.RootFileSource{Root: framework.TestContext.RepoRoot}) + //} + + // Enable bindata file lookup as fallback. + testfiles.AddFileSource(testfiles.BindataFileSource{ + Asset: generated.Asset, + AssetNames: generated.AssetNames, + }) + +} + +var localViperConfig = "" + +// we appear to set ours via env-var, not flag +func GetViperConfig() string { + return localViperConfig +} + +func SetViperConfig(val string) { + localViperConfig = val +} From dbf75603b7e4068fef25f00ded98bb9a93b8b3ee Mon Sep 17 00:00:00 2001 From: Lukasz Szaszkiewicz Date: Thu, 29 Oct 2020 13:55:59 +0100 Subject: [PATCH 63/96] UPSTREAM: : Remove excessive e2e logging UPSTREAM: : Remove a redundant output in the tests This line is not necessary for our test usage and should not be an issue in OpenShift (openshift-tests already verifies this correctly). UPSTREAM: : Remove excessive logging during e2e upgrade test This line makes the upgrade log output unreadable and provides no value during the set of tests it's used in: ``` Jan 12 20:49:25.628: INFO: cluster upgrade is Progressing: Working towards registry.svc.ci.openshift.org/ci-op-jbtg7jjb/release@sha256:144e73d125cce620bdf099be9a85225ade489a95622a70075d264ea3ff79219c: downloading update Jan 12 20:49:26.692: INFO: Poke("http://a74e3476115ce4d2d817a1e5ea608dad-802917831.us-east-1.elb.amazonaws.com:80/echo?msg=hello"): success Jan 12 20:49:28.727: INFO: Poke("http://a74e3476115ce4d2d817a1e5ea608dad-802917831.us-east-1.elb.amazonaws.com:80/echo?msg=hello"): success ``` Origin-commit: 1cdf04c0e15b79fad3e3a6ba896ed2bb3df42b78 --- test/e2e/framework/network/utils.go | 5 ++--- test/e2e/framework/util.go | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/test/e2e/framework/network/utils.go b/test/e2e/framework/network/utils.go index c66cb3cf47aaf..2a96a28f4e21e 100644 --- a/test/e2e/framework/network/utils.go +++ b/test/e2e/framework/network/utils.go @@ -861,8 +861,6 @@ func PokeHTTP(host string, port int, path string, params *HTTPPokeParams) HTTPPo params.ExpectCode = http.StatusOK } - framework.Logf("Poking %q", url) - resp, err := httpGetNoConnectionPoolTimeout(url, params.Timeout) if err != nil { ret.Error = err @@ -914,7 +912,8 @@ func PokeHTTP(host string, port int, path string, params *HTTPPokeParams) HTTPPo } ret.Status = HTTPSuccess - framework.Logf("Poke(%q): success", url) + // causes excessive logging that provides no value + // framework.Logf("Poke(%q): success", url) return ret } diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index 2f8376d8e0734..7bb12a0f1e500 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -437,7 +437,7 @@ func countEndpointsNum(e *v1.Endpoints) int { // restclientConfig returns a config holds the information needed to build connection to kubernetes clusters. func restclientConfig(kubeContext string) (*clientcmdapi.Config, error) { - Logf(">>> kubeConfig: %s", TestContext.KubeConfig) + //Logf(">>> kubeConfig: %s", TestContext.KubeConfig) if TestContext.KubeConfig == "" { return nil, fmt.Errorf("KubeConfig must be specified to load client config") } @@ -446,7 +446,7 @@ func restclientConfig(kubeContext string) (*clientcmdapi.Config, error) { return nil, fmt.Errorf("error loading KubeConfig: %v", err.Error()) } if kubeContext != "" { - Logf(">>> kubeContext: %s", kubeContext) + //Logf(">>> kubeContext: %s", kubeContext) c.CurrentContext = kubeContext } return c, nil From 974fabc3782924c60578186d00d94d352f22917f Mon Sep 17 00:00:00 2001 From: Lukasz Szaszkiewicz Date: Thu, 29 Oct 2020 13:55:59 +0100 Subject: [PATCH 64/96] UPSTREAM: : conditionally fill the UserAgent from the currently running test OpenShift uses these function before any test is run and they cause NPE --- test/e2e/framework/util.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index 7bb12a0f1e500..03cea61e33e79 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -456,9 +456,9 @@ func restclientConfig(kubeContext string) (*clientcmdapi.Config, error) { type ClientConfigGetter func() (*restclient.Config, error) // LoadConfig returns a config for a rest client with the UserAgent set to include the current test name. -func LoadConfig() (config *restclient.Config, err error) { +func LoadConfig(noUserAgent ...bool) (config *restclient.Config, err error) { defer func() { - if err == nil && config != nil { + if err == nil && config != nil && len(noUserAgent) == 0 { testDesc := ginkgo.CurrentGinkgoTestDescription() if len(testDesc.ComponentTexts) > 0 { componentTexts := strings.Join(testDesc.ComponentTexts, " ") @@ -491,8 +491,8 @@ func LoadConfig() (config *restclient.Config, err error) { } // LoadClientset returns clientset for connecting to kubernetes clusters. -func LoadClientset() (*clientset.Clientset, error) { - config, err := LoadConfig() +func LoadClientset(noUserAgent ...bool) (*clientset.Clientset, error) { + config, err := LoadConfig(noUserAgent...) if err != nil { return nil, fmt.Errorf("error creating client: %v", err.Error()) } From 3fae57515ffbee7c7188dcd283c072a496129876 Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Thu, 29 Oct 2020 13:55:59 +0100 Subject: [PATCH 65/96] UPSTREAM: : Extend default unit test timeout to 180s The following packages have tests that exceed the default 120s timeout: k8s.io/kubernetes/pkg/kubelet/volumemanager/reconciler - The tests in this package collectively take longer than 120s. k8s.io/kubernetes/pkg/volume/csi - One of the unit tests has to wait 2 minutes for a timeout to validate its failure condition. --- hack/make-rules/test.sh | 6 +++++- pkg/volume/csi/csi_attacher_test.go | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/hack/make-rules/test.sh b/hack/make-rules/test.sh index 729b7b3c9ea23..ae5eea49fbf80 100755 --- a/hack/make-rules/test.sh +++ b/hack/make-rules/test.sh @@ -59,7 +59,11 @@ kube::test::find_dirs() { ) } -KUBE_TIMEOUT=${KUBE_TIMEOUT:--timeout=120s} +# The default timeout of 120s is not sufficient for the following packages +# whose successful execution takes longer than that. +# - k8s.io/kubernetes/pkg/kubelet/volumemanager/reconciler +# - k8s.io/kubernetes/pkg/volume/csi +KUBE_TIMEOUT=${KUBE_TIMEOUT:--timeout=180s} KUBE_COVER=${KUBE_COVER:-n} # set to 'y' to enable coverage collection KUBE_COVERMODE=${KUBE_COVERMODE:-atomic} # The directory to save test coverage reports to, if generating them. If unset, diff --git a/pkg/volume/csi/csi_attacher_test.go b/pkg/volume/csi/csi_attacher_test.go index d469f3f904981..4d09f3362f829 100644 --- a/pkg/volume/csi/csi_attacher_test.go +++ b/pkg/volume/csi/csi_attacher_test.go @@ -927,6 +927,13 @@ func TestAttacherDetach(t *testing.T) { return false, nil, nil }, }, + // The watcher error triggered by this test case will result in the + // Detach() call on L984 timing out after 2 minutes since an error + // condition is logged but not returned. Thus this test will only pass if + // the default value for KUBE_TEST_TIMEOUT in hack/make-rules/test.sh is + // greater than the default of 120s. It's not clear why this test was + // merged at all given that a watcher error is only logged and cannot be + // observed by the test. { name: "API watch error happen", volID: "vol-005", From 9198f733fe1609e7c1870c0158bc5ffd8de854f3 Mon Sep 17 00:00:00 2001 From: Mike Fedosin Date: Thu, 29 Oct 2020 13:56:00 +0100 Subject: [PATCH 66/96] UPSTREAM: 89885: allow to read openstack cloud provider config from a secret This patch brings back the downstream changes that were introduced to allow reading openstack cloud provider config from a secret. They are available in release-4.4, but were reverted in master with https://github.com/openshift/origin/pull/24719 This change includes: - Ability to read metadata values for kubelet. Since the service does not have access to the secret to read the configuration, but it needs data to download (e.g. hostname or flavor), we are trying to get it from the metadata server. - Deprecation of kubeConfig parameter. Now we read the file that was provided with --kubeconfig option. Origin-commit: f95edc26155a29769b3c5b80c03755a01a87b5fc UPSTREAM: 89885: legacy-cloud-provider/openstack: include / prefix in instance ID output When we want to read an instance ID from the metadata service, cloud provider doesn't include "/" prefix, which is required for successful parsing of provider the ID later. This commit adds the missing "/" prefix to the output. --- .../legacy-cloud-providers/openstack/BUILD | 5 +- .../openstack/metadata.go | 67 ++++++++- .../openstack/openstack.go | 133 ++++++++++-------- .../openstack/openstack_instances.go | 69 +++++++++ 4 files changed, 214 insertions(+), 60 deletions(-) diff --git a/staging/src/k8s.io/legacy-cloud-providers/openstack/BUILD b/staging/src/k8s.io/legacy-cloud-providers/openstack/BUILD index fbd9cfa8c1aed..822804d2d9c47 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/openstack/BUILD +++ b/staging/src/k8s.io/legacy-cloud-providers/openstack/BUILD @@ -23,13 +23,12 @@ go_library( deps = [ "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//staging/src/k8s.io/client-go/kubernetes:go_default_library", - "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", + "//staging/src/k8s.io/client-go/informers:go_default_library", + "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/util/cert:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", "//staging/src/k8s.io/cloud-provider/node/helpers:go_default_library", diff --git a/staging/src/k8s.io/legacy-cloud-providers/openstack/metadata.go b/staging/src/k8s.io/legacy-cloud-providers/openstack/metadata.go index 638108caeca3c..4756e8cdc4fd7 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/openstack/metadata.go +++ b/staging/src/k8s.io/legacy-cloud-providers/openstack/metadata.go @@ -53,6 +53,18 @@ const ( // configDriveID is used as an identifier on the metadata search order configuration. configDriveID = "configDrive" + + // We have to use AWS compatible metadata for the next urls, because OpenStack doesn't + // provide this information. + + // instanceTypeURL contains url to get the instance type from metadata server. + instanceTypeURL = "http://169.254.169.254/2009-04-04/meta-data/instance-type" + + // localAddressURL contains url to get the instance local ip address from metadata server. + localAddressURL = "http://169.254.169.254/2009-04-04/meta-data/local-ipv4" + + // publicAddressURL contains url to get the instance public ip address from metadata server. + publicAddressURL = "http://169.254.169.254/2009-04-04/meta-data/public-ipv4" ) // ErrBadMetadata is used to indicate a problem parsing data from metadata server @@ -159,13 +171,64 @@ func getMetadataFromMetadataService(metadataVersion string) (*Metadata, error) { defer resp.Body.Close() if resp.StatusCode != http.StatusOK { - err = fmt.Errorf("unexpected status code when reading metadata from %s: %s", metadataURL, resp.Status) - return nil, err + return nil, fmt.Errorf("unexpected status code when reading metadata from %s: %s", metadataURL, resp.Status) } return parseMetadata(resp.Body) } +func getIntanceType() (string, error) { + klog.V(4).Infof("Attempting to fetch instance type from %s", instanceTypeURL) + resp, err := http.Get(instanceTypeURL) + if err != nil { + return "", fmt.Errorf("error fetching %s: %v", instanceTypeURL, err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return "", fmt.Errorf("unexpected status code when reading instance type from %s: %s", instanceTypeURL, resp.Status) + } + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return "", fmt.Errorf("cannot read the response body %s: %v", instanceTypeURL, err) + } + + return string(body), nil +} + +func getNodeAddress(url string) (string, error) { + klog.V(4).Infof("Attempting to fetch instance address from %s", url) + resp, err := http.Get(url) + if err != nil { + return "", fmt.Errorf("error fetching %s: %v", url, err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return "", fmt.Errorf("unexpected status code when reading instance address from %s: %s", url, resp.Status) + } + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return "", fmt.Errorf("cannot read the response body %s: %v", url, err) + } + + return string(body), nil +} + +func getNodeAddresses() (string, string, error) { + localAddess, err := getNodeAddress(localAddressURL) + if err != nil { + return "", "", err + } + + publicAddress, err := getNodeAddress(publicAddressURL) + if err != nil { + return "", "", err + } + + return localAddess, publicAddress, nil +} + // Metadata is fixed for the current host, so cache the value process-wide var metadataCache *Metadata diff --git a/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack.go b/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack.go index 15d9a869b5331..9d56ba11cec4d 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack.go +++ b/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack.go @@ -44,11 +44,10 @@ import ( "gopkg.in/gcfg.v1" v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" netutil "k8s.io/apimachinery/pkg/util/net" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/tools/clientcmd" + "k8s.io/client-go/informers" + corelistersv1 "k8s.io/client-go/listers/core/v1" certutil "k8s.io/client-go/util/cert" cloudprovider "k8s.io/cloud-provider" nodehelpers "k8s.io/cloud-provider/node/helpers" @@ -145,8 +144,15 @@ type OpenStack struct { metadataOpts MetadataOpts // InstanceID of the server where this OpenStack object is instantiated. localInstanceID string + // Options for reading config data from a secret + secretName string + secretNamespace string + // SecretLister generated by SetInformers + secretLister corelistersv1.SecretLister } +var _ cloudprovider.InformerUser = &OpenStack{} + // Config is used to read and store information from the cloud configuration file // NOTE: Cloud config files should follow the same Kubernetes deprecation policy as // flags or CLIs. Config fields should not change behavior in incompatible ways and @@ -168,7 +174,8 @@ type Config struct { CAFile string `gcfg:"ca-file"` SecretName string `gcfg:"secret-name"` SecretNamespace string `gcfg:"secret-namespace"` - KubeconfigPath string `gcfg:"kubeconfig-path"` + // KubeconfigPath option is deprecated and shouldn't be used + KubeconfigPath string `gcfg:"kubeconfig-path"` } LoadBalancer LoadBalancerOpts BlockStorage BlockStorageOpts @@ -261,59 +268,58 @@ func configFromEnv() (cfg Config, ok bool) { return } -func createKubernetesClient(kubeconfigPath string) (*kubernetes.Clientset, error) { - klog.Info("Creating kubernetes API client.") - - cfg, err := clientcmd.BuildConfigFromFlags("", kubeconfigPath) - if err != nil { - return nil, err - } - cfg.DisableCompression = true - - client, err := kubernetes.NewForConfig(cfg) - if err != nil { - return nil, err - } - - v, err := client.Discovery().ServerVersion() - if err != nil { - return nil, err - } - - klog.Infof("Kubernetes API client created, server version %s", fmt.Sprintf("v%v.%v", v.Major, v.Minor)) - return client, nil +// SetInformers initializes secret lister +func (os *OpenStack) SetInformers(informerFactory informers.SharedInformerFactory) { + os.secretLister = informerFactory.Core().V1().Secrets().Lister() } // setConfigFromSecret allows setting up the config from k8s secret -func setConfigFromSecret(cfg *Config) error { - secretName := cfg.Global.SecretName - secretNamespace := cfg.Global.SecretNamespace - kubeconfigPath := cfg.Global.KubeconfigPath - - k8sClient, err := createKubernetesClient(kubeconfigPath) - if err != nil { - return fmt.Errorf("failed to get kubernetes client: %v", err) +func (os *OpenStack) setConfigFromSecret() error { + if os.secretLister == nil { + return fmt.Errorf("secret lister is not initialized") } - secret, err := k8sClient.CoreV1().Secrets(secretNamespace).Get(context.TODO(), secretName, metav1.GetOptions{}) + secret, err := os.secretLister.Secrets(os.secretNamespace).Get(os.secretName) if err != nil { - klog.Warningf("Cannot get secret %s in namespace %s. error: %q", secretName, secretNamespace, err) + klog.Errorf("Cannot get secret %s in namespace %s. error: %q", os.secretName, os.secretNamespace, err) return err } if content, ok := secret.Data["clouds.conf"]; ok { + cfg := &Config{} + err = gcfg.ReadStringInto(cfg, string(content)) if err != nil { - klog.Error("Cannot parse data from the secret.") return fmt.Errorf("cannot parse data from the secret") } + provider, err := newProvider(*cfg) + if err != nil { + return fmt.Errorf("cannot initialize cloud provider using data from the secret") + } + os.provider = provider + os.region = cfg.Global.Region + klog.Info("OpenStack cloud provider was initialized using data from the secret.") return nil } - klog.Error("Cannot find \"clouds.conf\" key in the secret.") return fmt.Errorf("cannot find \"clouds.conf\" key in the secret") } +func (os *OpenStack) ensureCloudProviderWasInitialized() error { + if os.provider != nil { + return nil + } + + if os.secretName != "" && os.secretNamespace != "" { + err := os.setConfigFromSecret() + if err == nil { + return nil + } + } + + return fmt.Errorf("cloud provider is not initialized") +} + func readConfig(config io.Reader) (Config, error) { if config == nil { return Config{}, fmt.Errorf("no OpenStack cloud provider config file given") @@ -332,14 +338,6 @@ func readConfig(config io.Reader) (Config, error) { return cfg, err } - if cfg.Global.SecretName != "" && cfg.Global.SecretNamespace != "" { - klog.Infof("Set credentials from secret %s in namespace %s", cfg.Global.SecretName, cfg.Global.SecretNamespace) - err = setConfigFromSecret(&cfg) - if err != nil { - return cfg, err - } - } - return cfg, nil } @@ -398,7 +396,7 @@ func checkOpenStackOpts(openstackOpts *OpenStack) error { return checkMetadataSearchOrder(openstackOpts.metadataOpts.SearchOrder) } -func newOpenStack(cfg Config) (*OpenStack, error) { +func newProvider(cfg Config) (*gophercloud.ProviderClient, error) { provider, err := openstack.NewClient(cfg.Global.AuthURL) if err != nil { return nil, err @@ -428,23 +426,37 @@ func newOpenStack(cfg Config) (*OpenStack, error) { return nil, err } + provider.HTTPClient.Timeout = cfg.Metadata.RequestTimeout.Duration + + return provider, nil +} + +func newOpenStack(cfg Config) (*OpenStack, error) { emptyDuration := MyDuration{} if cfg.Metadata.RequestTimeout == emptyDuration { cfg.Metadata.RequestTimeout.Duration = time.Duration(defaultTimeOut) } - provider.HTTPClient.Timeout = cfg.Metadata.RequestTimeout.Duration os := OpenStack{ - provider: provider, - region: cfg.Global.Region, - lbOpts: cfg.LoadBalancer, - bsOpts: cfg.BlockStorage, - routeOpts: cfg.Route, - metadataOpts: cfg.Metadata, + secretName: cfg.Global.SecretName, + secretNamespace: cfg.Global.SecretNamespace, + region: cfg.Global.Region, + lbOpts: cfg.LoadBalancer, + bsOpts: cfg.BlockStorage, + routeOpts: cfg.Route, + metadataOpts: cfg.Metadata, + } + + // Skip provider initialization if we're going to read auth data from a secret. + if cfg.Global.SecretName == "" || cfg.Global.SecretNamespace == "" { + provider, err := newProvider(cfg) + if err != nil { + return nil, err + } + os.provider = provider } - err = checkOpenStackOpts(&os) - if err != nil { + if err := checkOpenStackOpts(&os); err != nil { return nil, err } @@ -479,6 +491,7 @@ func NewFakeOpenStackCloud(cfg Config) (*OpenStack, error) { // Initialize passes a Kubernetes clientBuilder interface to the cloud provider func (os *OpenStack) Initialize(clientBuilder cloudprovider.ControllerClientBuilder, stop <-chan struct{}) { + os.ensureCloudProviderWasInitialized() } // mapNodeNameToServerName maps a k8s NodeName to an OpenStack Server Name @@ -697,6 +710,11 @@ func (os *OpenStack) HasClusterID() bool { func (os *OpenStack) LoadBalancer() (cloudprovider.LoadBalancer, bool) { klog.V(4).Info("openstack.LoadBalancer() called") + err := os.ensureCloudProviderWasInitialized() + if err != nil { + return nil, false + } + if reflect.DeepEqual(os.lbOpts, LoadBalancerOpts{}) { klog.V(4).Info("LoadBalancer section is empty/not defined in cloud-config") return nil, false @@ -821,6 +839,11 @@ func (os *OpenStack) GetZoneByNodeName(ctx context.Context, nodeName types.NodeN func (os *OpenStack) Routes() (cloudprovider.Routes, bool) { klog.V(4).Info("openstack.Routes() called") + err := os.ensureCloudProviderWasInitialized() + if err != nil { + return nil, false + } + network, err := os.NewNetworkV2() if err != nil { return nil, false diff --git a/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack_instances.go b/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack_instances.go index 48f9a65be78df..3b9b62f6183bd 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack_instances.go +++ b/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack_instances.go @@ -48,6 +48,16 @@ const ( func (os *OpenStack) Instances() (cloudprovider.Instances, bool) { klog.V(4).Info("openstack.Instances() called") + err := os.ensureCloudProviderWasInitialized() + if err != nil { + // cannot initialize cloud provider - return empty instances without compute instance, + // it will be generated later with any call of an Instances' receiver. + klog.Errorf("cannot initialize cloud provider, only limited functionality is available : %v", err) + return &Instances{ + opts: os.metadataOpts, + }, true + } + compute, err := os.NewComputeV2() if err != nil { klog.Errorf("unable to access compute v2 API : %v", err) @@ -87,6 +97,43 @@ func (i *Instances) AddSSHKeyToAllInstances(ctx context.Context, user string, ke func (i *Instances) NodeAddresses(ctx context.Context, name types.NodeName) ([]v1.NodeAddress, error) { klog.V(4).Infof("NodeAddresses(%v) called", name) + // check if the node is local, in this case we can get its addresses from the metadata service + // without additional requests to Nova. + md, err := getMetadata(i.opts.SearchOrder) + if err != nil { + return nil, err + } + if localName := types.NodeName(md.Name); localName == name { + localAddress, publicAddress, err := getNodeAddresses() + if err != nil { + return nil, err + } + + addrs := []v1.NodeAddress{ + { + Type: v1.NodeHostName, + Address: md.Name, + }, + } + + if localAddress != "" { + addrs = append(addrs, v1.NodeAddress{ + Type: v1.NodeInternalIP, + Address: localAddress, + }) + } + + if publicAddress != "" { + addrs = append(addrs, v1.NodeAddress{ + Type: v1.NodeExternalIP, + Address: publicAddress, + }) + } + + klog.V(4).Infof("NodeAddresses(%v) => %v", name, addrs) + return addrs, nil + } + addrs, err := getAddressesByName(i.compute, name) if err != nil { return nil, err @@ -172,6 +219,17 @@ func (os *OpenStack) InstanceID() (string, error) { // InstanceID returns the cloud provider ID of the specified instance. func (i *Instances) InstanceID(ctx context.Context, name types.NodeName) (string, error) { + // check if the node is local, in this case we can get its ID from the metadata service + // without additional requests to Nova. + md, err := getMetadata(i.opts.SearchOrder) + if err != nil { + return "", err + } + localName := types.NodeName(md.Name) + if localName == name { + return "/" + md.UUID, nil + } + srv, err := getServerByName(i.compute, name) if err != nil { if err == ErrNotFound { @@ -205,6 +263,17 @@ func (i *Instances) InstanceTypeByProviderID(ctx context.Context, providerID str // InstanceType returns the type of the specified instance. func (i *Instances) InstanceType(ctx context.Context, name types.NodeName) (string, error) { + // check if the node is local, in this case we can get its type from the metadata service + // without additional requests to Nova. + md, err := getMetadata(i.opts.SearchOrder) + if err != nil { + return "", err + } + localName := types.NodeName(md.Name) + if localName == name { + return getIntanceType() + } + srv, err := getServerByName(i.compute, name) if err != nil { From 63178336493cfc5f417188d65dd62ea3ae3a07b3 Mon Sep 17 00:00:00 2001 From: Lukasz Szaszkiewicz Date: Thu, 29 Oct 2020 13:56:00 +0100 Subject: [PATCH 67/96] UPSTREAM: 90452: refactor/improve CRD publishing e2e tests in an HA setup --- test/e2e/apimachinery/crd_publish_openapi.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/test/e2e/apimachinery/crd_publish_openapi.go b/test/e2e/apimachinery/crd_publish_openapi.go index 502d624b427dc..184362ac169cd 100644 --- a/test/e2e/apimachinery/crd_publish_openapi.go +++ b/test/e2e/apimachinery/crd_publish_openapi.go @@ -511,7 +511,13 @@ func setupCRDAndVerifySchema(f *framework.Framework, schema, expect []byte, grou return setupCRDAndVerifySchemaWithOptions(f, schema, expect, groupSuffix, versions) } -func setupCRDAndVerifySchemaWithOptions(f *framework.Framework, schema, expect []byte, groupSuffix string, versions []string, options ...crd.Option) (*crd.TestCrd, error) { +func setupCRDAndVerifySchemaWithOptions(f *framework.Framework, schema, expect []byte, groupSuffix string, versions []string, options ...crd.Option) (tCRD *crd.TestCrd, err error) { + defer func() { + if err == nil { + framework.Logf("sleeping 45 seconds before running the actual tests, we hope that during all API servers converge during that window, see %q for more", "https://github.com/kubernetes/kubernetes/pull/90452") + time.Sleep(time.Second * 45) + } + }() group := fmt.Sprintf("%s-test-%s.example.com", f.BaseName, groupSuffix) if len(versions) == 0 { return nil, fmt.Errorf("require at least one version for CRD") @@ -549,17 +555,17 @@ func setupCRDAndVerifySchemaWithOptions(f *framework.Framework, schema, expect [ } crd.Spec.Versions = apiVersions }) - crd, err := crd.CreateMultiVersionTestCRD(f, group, options...) + tCRD, err = crd.CreateMultiVersionTestCRD(f, group, options...) if err != nil { return nil, fmt.Errorf("failed to create CRD: %v", err) } - for _, v := range crd.Crd.Spec.Versions { - if err := waitForDefinition(f.ClientSet, definitionName(crd, v.Name), expect); err != nil { + for _, v := range tCRD.Crd.Spec.Versions { + if err := waitForDefinition(f.ClientSet, definitionName(tCRD, v.Name), expect); err != nil { return nil, fmt.Errorf("%v", err) } } - return crd, nil + return tCRD, nil } func cleanupCRD(f *framework.Framework, crd *crd.TestCrd) error { From eb2a430ee4cd9e831b588c60363466eedcb03f15 Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Tue, 12 May 2020 21:11:36 -0700 Subject: [PATCH 68/96] UPSTREAM: : Enable nested generation of k8s.io/kubernetes bindata Also fix the install path to be relative. --- hack/generate-bindata.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hack/generate-bindata.sh b/hack/generate-bindata.sh index c12da77e54ba0..64fd9a9e291f2 100755 --- a/hack/generate-bindata.sh +++ b/hack/generate-bindata.sh @@ -33,7 +33,10 @@ export GOBIN="${KUBE_OUTPUT_BINPATH}" PATH="${GOBIN}:${PATH}" # Install tools we need, but only from vendor/... -go install k8s.io/kubernetes/vendor/github.com/go-bindata/go-bindata/go-bindata +if [[ ! "${SKIP_INSTALL_GO_BINDATA:-}" ]]; then + # Only install if being called directly to allow being called from origin in a vendored path. + GO111MODULE=off go install ./vendor/github.com/go-bindata/go-bindata/... +fi # run the generation from the root directory for stable output pushd "${KUBE_ROOT}" >/dev/null From be0b9ad8f00bd6427a304807a2db2d69ed132439 Mon Sep 17 00:00:00 2001 From: Abu Kashem Date: Thu, 29 Oct 2020 13:56:00 +0100 Subject: [PATCH 69/96] UPSTREAM: : Bug 1852056: change etcd health check timeout to 10s Origin-commit: 87d123196e9f9b77ff08d8b94c5b1348f3b35a8d --- .../apiserver/pkg/storage/storagebackend/factory/etcd3.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go index 26067633e5856..bfb4820f2a858 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go @@ -91,7 +91,7 @@ func newETCD3HealthCheck(c storagebackend.Config) (func() error, error) { return fmt.Errorf(errMsg) } client := clientValue.Load().(*clientv3.Client) - ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() // See https://github.com/etcd-io/etcd/blob/c57f8b3af865d1b531b979889c602ba14377420e/etcdctl/ctlv3/command/ep_command.go#L118 _, err := client.Get(ctx, path.Join("/", c.Prefix, "health")) From 6aa1e2f73ba1191405bd303385133c8bf1e36fe4 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:56:00 +0100 Subject: [PATCH 70/96] UPSTREAM: : eliminate unnecessary closure in openshift configuration wiring Origin-commit: 3b0c72dd7b9f9367dda8f8645909d9277a6c29e9 --- cmd/kube-apiserver/app/patch_openshift.go | 18 ---- cmd/kube-apiserver/app/server.go | 12 +-- .../paramtoken/paramtoken.go | 45 -------- .../openshiftkubeapiserver/patch.go | 102 +++++++++--------- 4 files changed, 54 insertions(+), 123 deletions(-) delete mode 100644 cmd/kube-apiserver/app/patch_openshift.go delete mode 100644 openshift-kube-apiserver/openshiftkubeapiserver/paramtoken/paramtoken.go diff --git a/cmd/kube-apiserver/app/patch_openshift.go b/cmd/kube-apiserver/app/patch_openshift.go deleted file mode 100644 index 8744ae69c4731..0000000000000 --- a/cmd/kube-apiserver/app/patch_openshift.go +++ /dev/null @@ -1,18 +0,0 @@ -package app - -import ( - "k8s.io/apiserver/pkg/admission" - genericapiserver "k8s.io/apiserver/pkg/server" - clientgoinformers "k8s.io/client-go/informers" - "k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver" -) - -var OpenShiftKubeAPIServerConfigPatch openshiftkubeapiserver.KubeAPIServerConfigFunc = nil - -func PatchKubeAPIServerConfig(config *genericapiserver.Config, versionedInformers clientgoinformers.SharedInformerFactory, pluginInitializers *[]admission.PluginInitializer) error { - if OpenShiftKubeAPIServerConfigPatch == nil { - return nil - } - - return OpenShiftKubeAPIServerConfigPatch(config, versionedInformers, pluginInitializers) -} diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index c84dda4ee91a2..caa93db294e6f 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -120,17 +120,15 @@ cluster's shared state through which all other components interact.`, verflag.PrintAndExitIfRequested() if len(s.OpenShiftConfig) > 0 { + // if we are running openshift, we modify the admission chain defaults accordingly + admissionenablement.InstallOpenShiftAdmissionPlugins(s) + openshiftConfig, err := enablement.GetOpenshiftConfig(s.OpenShiftConfig) if err != nil { klog.Fatal(err) } enablement.ForceOpenShift(openshiftConfig) - // this forces a patch to be called - // TODO we're going to try to remove bits of the patching. - configPatchFn := openshiftkubeapiserver.NewOpenShiftKubeAPIServerConfigPatch(openshiftConfig) - OpenShiftKubeAPIServerConfigPatch = configPatchFn - args, err := openshiftkubeapiserver.ConfigToFlags(openshiftConfig) if err != nil { return err @@ -145,8 +143,6 @@ cluster's shared state through which all other components interact.`, cliflag.PrintFlags(cmd.Flags()) enablement.ForceGlobalInitializationForOpenShift() - admissionenablement.InstallOpenShiftAdmissionPlugins(s) - } else { // print default flags cliflag.PrintFlags(cmd.Flags()) @@ -601,7 +597,7 @@ func buildGenericConfig( return } - if err := PatchKubeAPIServerConfig(genericConfig, versionedInformers, &pluginInitializers); err != nil { + if err := openshiftkubeapiserver.OpenShiftKubeAPIServerConfigPatch(genericConfig, versionedInformers, &pluginInitializers); err != nil { lastErr = fmt.Errorf("failed to patch: %v", err) return } diff --git a/openshift-kube-apiserver/openshiftkubeapiserver/paramtoken/paramtoken.go b/openshift-kube-apiserver/openshiftkubeapiserver/paramtoken/paramtoken.go deleted file mode 100644 index 1993002e5daf8..0000000000000 --- a/openshift-kube-apiserver/openshiftkubeapiserver/paramtoken/paramtoken.go +++ /dev/null @@ -1,45 +0,0 @@ -package paramtoken - -import ( - "net/http" - "strings" - - "k8s.io/apiserver/pkg/authentication/authenticator" - "k8s.io/apiserver/pkg/util/wsstream" -) - -// Authenticator provides a way to authenticate tokens provided as a parameter -// This only exists to allow websocket connections to use an API token, since they cannot set an Authorize header -// For this authenticator to work, tokens will be part of the request URL, and are more likely to be logged or otherwise exposed. -// Every effort should be made to filter tokens from being logged when using this authenticator. -type Authenticator struct { - // param is the query param to use as a token - param string - // auth is the token authenticator to use to validate the token - auth authenticator.Token - // removeParam indicates whether the parameter should be stripped from the incoming request - removeParam bool -} - -func New(param string, auth authenticator.Token, removeParam bool) *Authenticator { - return &Authenticator{param, auth, removeParam} -} - -func (a *Authenticator) AuthenticateRequest(req *http.Request) (*authenticator.Response, bool, error) { - // Only accept query param auth for websocket connections - if !wsstream.IsWebSocketRequest(req) { - return nil, false, nil - } - - q := req.URL.Query() - token := strings.TrimSpace(q.Get(a.param)) - if token == "" { - return nil, false, nil - } - authResponse, ok, err := a.auth.AuthenticateToken(req.Context(), token) - if ok && a.removeParam { - q.Del(a.param) - req.URL.RawQuery = q.Encode() - } - return authResponse, ok, err -} diff --git a/openshift-kube-apiserver/openshiftkubeapiserver/patch.go b/openshift-kube-apiserver/openshiftkubeapiserver/patch.go index eb88e79af60e2..4d8537ecc5ca4 100644 --- a/openshift-kube-apiserver/openshiftkubeapiserver/patch.go +++ b/openshift-kube-apiserver/openshiftkubeapiserver/patch.go @@ -14,7 +14,6 @@ import ( "k8s.io/kubernetes/pkg/quota/v1/generic" "k8s.io/kubernetes/pkg/quota/v1/install" - kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy" "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators" "github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota" @@ -34,60 +33,59 @@ import ( "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv" ) -type KubeAPIServerConfigFunc func(config *genericapiserver.Config, versionedInformers clientgoinformers.SharedInformerFactory, pluginInitializers *[]admission.PluginInitializer) error - -func NewOpenShiftKubeAPIServerConfigPatch(kubeAPIServerConfig *kubecontrolplanev1.KubeAPIServerConfig) KubeAPIServerConfigFunc { - return func(genericConfig *genericapiserver.Config, kubeInformers clientgoinformers.SharedInformerFactory, pluginInitializers *[]admission.PluginInitializer) error { - openshiftInformers, err := newInformers(genericConfig.LoopbackClientConfig) - if err != nil { - return err - } - - // AUTHORIZER - genericConfig.RequestInfoResolver = apiserverconfig.OpenshiftRequestInfoResolver() - // END AUTHORIZER - - // Inject OpenShift API long running endpoints (like for binary builds). - // TODO: We should disable the timeout code for aggregated endpoints as this can cause problems when upstream add additional endpoints. - genericConfig.LongRunningFunc = apiserverconfig.IsLongRunningRequest - - // ADMISSION - clusterQuotaMappingController := newClusterQuotaMappingController(kubeInformers.Core().V1().Namespaces(), openshiftInformers.OpenshiftQuotaInformers.Quota().V1().ClusterResourceQuotas()) - genericConfig.AddPostStartHookOrDie("quota.openshift.io-clusterquotamapping", func(context genericapiserver.PostStartHookContext) error { - go clusterQuotaMappingController.Run(5, context.StopCh) - return nil - }) - - *pluginInitializers = append(*pluginInitializers, - imagepolicy.NewInitializer(imagereferencemutators.KubeImageMutators{}, kubeAPIServerConfig.ImagePolicyConfig.InternalRegistryHostname), - restrictusers.NewInitializer(openshiftInformers.getOpenshiftUserInformers()), - sccadmission.NewInitializer(openshiftInformers.getOpenshiftSecurityInformers().Security().V1().SecurityContextConstraints()), - clusterresourcequota.NewInitializer( - openshiftInformers.getOpenshiftQuotaInformers().Quota().V1().ClusterResourceQuotas(), - clusterQuotaMappingController.GetClusterQuotaMapper(), - generic.NewRegistry(install.NewQuotaConfigurationForAdmission().Evaluators()), - ), - nodeenv.NewInitializer(kubeAPIServerConfig.ProjectConfig.DefaultNodeSelector), - admissionrestconfig.NewInitializer(*rest.CopyConfig(genericConfig.LoopbackClientConfig)), - ) - // END ADMISSION - - // HANDLER CHAIN (with oauth server and web console) - genericConfig.BuildHandlerChainFunc, err = BuildHandlerChain(kubeAPIServerConfig.ConsolePublicURL, kubeAPIServerConfig.AuthConfig.OAuthMetadataFile) - if err != nil { - return err - } - // END HANDLER CHAIN - - genericConfig.AddPostStartHookOrDie("openshift.io-startkubeinformers", func(context genericapiserver.PostStartHookContext) error { - go kubeInformers.Start(context.StopCh) - go openshiftInformers.Start(context.StopCh) - return nil - }) - enablement.AppendPostStartHooksOrDie(genericConfig) +func OpenShiftKubeAPIServerConfigPatch(genericConfig *genericapiserver.Config, kubeInformers clientgoinformers.SharedInformerFactory, pluginInitializers *[]admission.PluginInitializer) error { + if !enablement.IsOpenShift() { + return nil + } + + openshiftInformers, err := newInformers(genericConfig.LoopbackClientConfig) + if err != nil { + return err + } + + // AUTHORIZER + genericConfig.RequestInfoResolver = apiserverconfig.OpenshiftRequestInfoResolver() + // END AUTHORIZER + // Inject OpenShift API long running endpoints (like for binary builds). + // TODO: We should disable the timeout code for aggregated endpoints as this can cause problems when upstream add additional endpoints. + genericConfig.LongRunningFunc = apiserverconfig.IsLongRunningRequest + + // ADMISSION + clusterQuotaMappingController := newClusterQuotaMappingController(kubeInformers.Core().V1().Namespaces(), openshiftInformers.OpenshiftQuotaInformers.Quota().V1().ClusterResourceQuotas()) + genericConfig.AddPostStartHookOrDie("quota.openshift.io-clusterquotamapping", func(context genericapiserver.PostStartHookContext) error { + go clusterQuotaMappingController.Run(5, context.StopCh) return nil + }) + + *pluginInitializers = append(*pluginInitializers, + imagepolicy.NewInitializer(imagereferencemutators.KubeImageMutators{}, enablement.OpenshiftConfig().ImagePolicyConfig.InternalRegistryHostname), + restrictusers.NewInitializer(openshiftInformers.getOpenshiftUserInformers()), + sccadmission.NewInitializer(openshiftInformers.getOpenshiftSecurityInformers().Security().V1().SecurityContextConstraints()), + clusterresourcequota.NewInitializer( + openshiftInformers.getOpenshiftQuotaInformers().Quota().V1().ClusterResourceQuotas(), + clusterQuotaMappingController.GetClusterQuotaMapper(), + generic.NewRegistry(install.NewQuotaConfigurationForAdmission().Evaluators()), + ), + nodeenv.NewInitializer(enablement.OpenshiftConfig().ProjectConfig.DefaultNodeSelector), + admissionrestconfig.NewInitializer(*rest.CopyConfig(genericConfig.LoopbackClientConfig)), + ) + // END ADMISSION + + // HANDLER CHAIN (with oauth server and web console) + genericConfig.BuildHandlerChainFunc, err = BuildHandlerChain(enablement.OpenshiftConfig().ConsolePublicURL, enablement.OpenshiftConfig().AuthConfig.OAuthMetadataFile) + if err != nil { + return err } + // END HANDLER CHAIN + + genericConfig.AddPostStartHookOrDie("openshift.io-startkubeinformers", func(context genericapiserver.PostStartHookContext) error { + go openshiftInformers.Start(context.StopCh) + return nil + }) + enablement.AppendPostStartHooksOrDie(genericConfig) + + return nil } // newInformers is only exposed for the build's integration testing until it can be fixed more appropriately. From 4c5c35a0deb3ff3779be5dfcfe649258f50c3d2e Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Thu, 29 Oct 2020 13:56:00 +0100 Subject: [PATCH 71/96] UPSTREAM: : Add OpenShift tooling, images, configs and docs UPSTREAM: : Copy hack scripts and tools from openshift/origin UPSTREAM: : Fix shellcheck failures for copied openshift-hack bash UPSTREAM: : Enable build, test and verify UPSTREAM: : Copy README content from origin UPSTREAM: : Copy watch-termination command from openshift/origin UPSTREAM: : Switch image and rpm build to golang 1.14 UPSTREAM: : Copy test annotation from origin UPSTREAM: : Build openshift-compatible kube e2e binary UPSTREAM: : Updating openshift-hack/images/hyperkube/Dockerfile.rhel baseimages to mach ocp-build-data config UPSTREAM: : Update test annotation rules UPSTREAM: : Enable k8s-e2e-serial UPSTREAM: : Update test annotation rules UPSTREAM: : Build with golang 1.15 UPSTREAM: : (squash) Stop installing recent bash and protoc from source UPSTREAM: : Add rebase instructions UPSTREAM: : (squash) Update README.openshift to reflect transition UPSTREAM: : (squash) Stop annotating origin tests with [Suite:openshift] The detection logic was error-prone (different results based on the repo existing in GOPATH vs not) and whether a test comes from origin can be inferred from the absence of the `[Suite:k8s]` tag. UPSTREAM: : (squash) Update hyperkube version UPSTREAM: : (squash) Update OpenShift docs UPSTREAM: : watch-termination: fix deletion race and write non-graceful message also to termination.log UPSTREAM: : watch-termination: avoid false positives of NonGracefulTermination events --- .gitignore | 3 + README.openshift.md | 73 ++ REBASE.openshift.md | 264 +++++++ build/run.sh | 6 + cmd/watch-termination/main.go | 329 +++++++++ hack/.shellcheck_failures | 3 + hack/lib/golang.sh | 1 + hack/make-rules/test.sh | 1 + hack/make-rules/update.sh | 3 +- hack/make-rules/verify.sh | 27 + hack/update-test-annotations.sh | 1 + hack/update-vendor.sh | 21 +- hack/verify-test-annotations.sh | 1 + hack/verify-vendor.sh | 6 +- openshift-hack/build-go.sh | 21 + openshift-hack/build-rpms.sh | 130 ++++ openshift-hack/commit-tag.png | Bin 0 -> 126788 bytes openshift-hack/commitchecker/commitchecker | Bin 0 -> 3958065 bytes openshift-hack/commitchecker/commitchecker.go | 39 ++ openshift-hack/commitchecker/git.go | 378 ++++++++++ openshift-hack/commitchecker/git_test.go | 55 ++ openshift-hack/commitchecker/validate.go | 82 +++ openshift-hack/commitchecker/validate_test.go | 94 +++ openshift-hack/conformance-k8s.sh | 96 +++ .../create-or-update-rebase-branch.sh | 67 ++ openshift-hack/e2e/annotate/annotate.go | 255 +++++++ openshift-hack/e2e/annotate/cmd/main.go | 9 + .../generated/zz_generated.annotations.go | 1 + openshift-hack/e2e/annotate/rules.go | 199 ++++++ openshift-hack/e2e/annotate/rules_test.go | 94 +++ openshift-hack/e2e/include.go | 23 + openshift-hack/e2e/kube_e2e_test.go | 110 +++ openshift-hack/images/OWNERS | 11 + .../images/hyperkube/Dockerfile.rhel | 16 + openshift-hack/images/hyperkube/OWNERS | 5 + openshift-hack/images/hyperkube/hyperkube | 57 ++ openshift-hack/images/os/Dockerfile | 23 + openshift-hack/images/tests/Dockerfile.rhel | 21 + openshift-hack/images/tests/OWNERS | 5 + openshift-hack/lib/build/binaries.sh | 457 +++++++++++++ openshift-hack/lib/build/rpm.sh | 95 +++ openshift-hack/lib/build/version.sh | 96 +++ openshift-hack/lib/cmd.sh | 645 ++++++++++++++++++ openshift-hack/lib/constants.sh | 324 +++++++++ openshift-hack/lib/deps.sh | 28 + openshift-hack/lib/init.sh | 65 ++ openshift-hack/lib/log/output.sh | 104 +++ openshift-hack/lib/log/stacktrace.sh | 91 +++ openshift-hack/lib/test/junit.sh | 202 ++++++ openshift-hack/lib/util/ensure.sh | 116 ++++ openshift-hack/lib/util/environment.sh | 296 ++++++++ openshift-hack/lib/util/find.sh | 73 ++ openshift-hack/lib/util/misc.sh | 224 ++++++ openshift-hack/lib/util/text.sh | 164 +++++ openshift-hack/lib/util/trap.sh | 99 +++ openshift-hack/test-go.sh | 16 + openshift-hack/test-integration.sh | 20 + openshift-hack/test-kubernetes-e2e.sh | 82 +++ openshift-hack/update-test-annotations.sh | 13 + openshift-hack/verify-commits.sh | 22 + openshift-hack/verify-test-annotations.sh | 12 + openshift-hack/verify.sh | 26 + openshift.spec | 129 ++++ test/e2e/viperconfig.go | 5 + test/typecheck/main.go | 3 + 65 files changed, 5926 insertions(+), 11 deletions(-) create mode 100644 README.openshift.md create mode 100644 REBASE.openshift.md create mode 100644 cmd/watch-termination/main.go create mode 120000 hack/update-test-annotations.sh create mode 120000 hack/verify-test-annotations.sh create mode 100755 openshift-hack/build-go.sh create mode 100755 openshift-hack/build-rpms.sh create mode 100644 openshift-hack/commit-tag.png create mode 100755 openshift-hack/commitchecker/commitchecker create mode 100644 openshift-hack/commitchecker/commitchecker.go create mode 100644 openshift-hack/commitchecker/git.go create mode 100644 openshift-hack/commitchecker/git_test.go create mode 100644 openshift-hack/commitchecker/validate.go create mode 100644 openshift-hack/commitchecker/validate_test.go create mode 100755 openshift-hack/conformance-k8s.sh create mode 100755 openshift-hack/create-or-update-rebase-branch.sh create mode 100644 openshift-hack/e2e/annotate/annotate.go create mode 100644 openshift-hack/e2e/annotate/cmd/main.go create mode 100644 openshift-hack/e2e/annotate/generated/zz_generated.annotations.go create mode 100644 openshift-hack/e2e/annotate/rules.go create mode 100644 openshift-hack/e2e/annotate/rules_test.go create mode 100644 openshift-hack/e2e/include.go create mode 100644 openshift-hack/e2e/kube_e2e_test.go create mode 100644 openshift-hack/images/OWNERS create mode 100644 openshift-hack/images/hyperkube/Dockerfile.rhel create mode 100644 openshift-hack/images/hyperkube/OWNERS create mode 100755 openshift-hack/images/hyperkube/hyperkube create mode 100644 openshift-hack/images/os/Dockerfile create mode 100644 openshift-hack/images/tests/Dockerfile.rhel create mode 100644 openshift-hack/images/tests/OWNERS create mode 100644 openshift-hack/lib/build/binaries.sh create mode 100644 openshift-hack/lib/build/rpm.sh create mode 100644 openshift-hack/lib/build/version.sh create mode 100644 openshift-hack/lib/cmd.sh create mode 100755 openshift-hack/lib/constants.sh create mode 100644 openshift-hack/lib/deps.sh create mode 100755 openshift-hack/lib/init.sh create mode 100644 openshift-hack/lib/log/output.sh create mode 100644 openshift-hack/lib/log/stacktrace.sh create mode 100644 openshift-hack/lib/test/junit.sh create mode 100644 openshift-hack/lib/util/ensure.sh create mode 100644 openshift-hack/lib/util/environment.sh create mode 100644 openshift-hack/lib/util/find.sh create mode 100644 openshift-hack/lib/util/misc.sh create mode 100644 openshift-hack/lib/util/text.sh create mode 100644 openshift-hack/lib/util/trap.sh create mode 100755 openshift-hack/test-go.sh create mode 100755 openshift-hack/test-integration.sh create mode 100755 openshift-hack/test-kubernetes-e2e.sh create mode 100755 openshift-hack/update-test-annotations.sh create mode 100755 openshift-hack/verify-commits.sh create mode 100755 openshift-hack/verify-test-annotations.sh create mode 100755 openshift-hack/verify.sh create mode 100644 openshift.spec diff --git a/.gitignore b/.gitignore index 62d9f912fd839..0d9720302ca2d 100644 --- a/.gitignore +++ b/.gitignore @@ -131,3 +131,6 @@ zz_generated_*_test.go # generated by verify-vendor.sh vendordiff.patch + +# Ignore openshift source archives produced as part of rpm build +openshift*.tar.gz diff --git a/README.openshift.md b/README.openshift.md new file mode 100644 index 0000000000000..b04871fc09c0f --- /dev/null +++ b/README.openshift.md @@ -0,0 +1,73 @@ +# OpenShift's fork of k8s.io/kubernetes + +This respository contains core Kubernetes components with OpenShift-specific patches. + +## Cherry-picking an upstream commit into openshift/kubernetes: Why, how, and when. + +`openshift/kubernetes` carries patches on top of each rebase in one of two ways: + +1. *periodic rebases* against an upstream Kubernetes tag. Eventually, +any code you have in upstream Kubernetes will land in Openshift via +this mechanism. + +2. Cherry-picked patches for important *bug fixes*. We really try to +limit feature back-porting entirely. Unless there are exceptional circumstances, your backport should at least be merged in kubernetes master branch. With every carry patch (not included in upstream) you are introducing a maintenance burden for the team managing rebases. + +### For Openshift newcomers: Pick my Kubernetes fix into Openshift vs. wait for the next rebase? + +Assuming you read the bullets above... If your patch is really far behind, for +example, if there have been 5 commits modifying the directory you care about, +cherry picking will be increasingly difficult and you should consider waiting +for the next rebase, which will likely include the commit you care about or at +least decrease the amount of cherry picks you need to do to merge. + +To really know the answer, you need to know *how many commits behind you are in +a particular directory*, often. + +To do this, just use git log, like so (using pkg/scheduler/ as an example). + +``` +MYDIR=pkg/scheduler/algorithm git log --oneline -- + ${MYDIR} | grep UPSTREAM | cut -d' ' -f 4-10 | head -1 +``` + +The commit message printed above will tell you: + +- what the LAST commit in Kubernetes was (which effected +"/pkg/scheduler/algorithm") +- directory, which will give you an intuition about how "hot" the code you are +cherry picking is. If it has changed a lot, recently, then that means you +probably will want to wait for a rebase to land. + +### Cherry-picking an upstream change + +Since `openshift/kubernetes` closely resembles `k8s.io/kubernetes`, +cherry-picking largely involves proposing upstream commits in a PR to our +downstream fork. Other than the usual potential for merge conflicts, the +commit messages for all commits proposed to `openshift/kubernetes` must +reflect the following: + +- `UPSTREAM: :` The prefix for upstream commits to ensure + correct handling during a future rebase. The person performing the rebase + will know to omit a commit with this prefix if the referenced PR is already + present in the new base history. +- `UPSTREAM: :` The prefix for downstream commits of code that is + generated (i.e. via `make update`) or that should not be retained by the + next rebase. +- `UPSTREAM: :` The prefix for downstream commits that maintain + downstream-specific behavior (i.e. to ensure an upstream change is + compatible with OpenShift). Commits with this are usually retained across + rebases. + +## Updating openshift/kubernetes to a new upstream release + +Instructions for rebasing `openshift/kubernetes` are maintained in a [separate +document](REBASE.openshift.md). + +## RPM Packaging + +A specfile is included in this repo which can be used to produce RPMs +including the openshift binary. While the specfile will be kept up to +date with build requirements the version is not updated. Building the +rpm with the `openshift-hack/build-rpms.sh` helper script will ensure +that the version is set correctly. diff --git a/REBASE.openshift.md b/REBASE.openshift.md new file mode 100644 index 0000000000000..4055433598dc6 --- /dev/null +++ b/REBASE.openshift.md @@ -0,0 +1,264 @@ +# Maintaining openshift/kubernetes + +OpenShift is based on upstream Kubernetes. With every release of Kubernetes that is +intended to be shipped as OCP, it is necessary to incorporate the upstream changes +while ensuring that our downstream customizations are maintained. + +## Rebasing for releases < 4.6 + +The instructions in this document apply to OpenShift releases 4.6 and +above. For previous releases, please see the [rebase +enhancement](https://github.com/openshift/enhancements/blob/master/enhancements/rebase.md). + +## Getting started + +Before incorporating upstream changes you may want to: + +- Read this document +- Get familiar with tig (text-mode interface for git) +- Find the best tool for resolving merge conflicts +- Use diff3 conflict resolution strategy + (https://blog.nilbus.com/take-the-pain-out-of-git-conflict-resolution-use-diff3/) +- Teach Git to remember how you’ve resolved a conflict so that the next time it can + resolve it automatically (https://git-scm.com/book/en/v2/Git-Tools-Rerere) + +## Preparing the local repo clone + +Clone from a personal fork of kubernetes via a pushable (ssh) url: + +``` +git clone git@github.com:/kubernetes +``` + +Add a remote for upstream and fetch its branches: + +``` +git remote add --fetch upstream https://github.com/kubernetes/kubernetes +``` + +Add a remote for the openshift fork and fetch its branches: + +``` +git remote add --fetch openshift https://github.com/openshift/kubernetes +``` + +## Creating a new local branch for the new rebase + +- Branch the target `k8s.io/kubernetes` release tag (e.g. `v1.20.0`) to a new + local branch + +``` +git checkout -b rebase-1.20.0 v1.20.0 +``` + +- Merge `openshift(master)` branch into the `rebase-1.20.0` branch with merge + strategy `ours`. It discards all changes from the other branch (`openshift/master`) + and create a merge commit. This leaves the content of your branch unchanged, + and when you next merge with the other branch, Git will only consider changes made + from this point forward. (Do not confuse this with `ours` conflict resolution + strategy for `recursive` merge strategy, `-X` option.) + +``` +git merge -s ours openshift/master +``` + +## Creating a spreadsheet of carry commits from the previous release + +Given the upstream tag (e.g. `v1.19.2`) of the most recent rebase and the name +of the branch that is targeted for rebase (e.g. `openshift/master`), generate a tsv file +containing the set of carry commits that need to be considered for picking: + +``` +echo 'Comment Sha\tAction\tClean\tSummary\tCommit link\tPR link' > ~/Documents/v1.19.2.tsv +``` +``` +git log $( git merge-base openshift/master v1.19.2 )..openshift/master --ancestry-path --reverse --no-merges --pretty='tformat:%x09%h%x09%x09%x09%s%x09https://github.com/openshift/kubernetes/commit/%h?w=1' | grep -E $'\t''UPSTREAM: .*'$'\t' | sed -E 's~UPSTREAM: ([0-9]+)(:.*)~UPSTREAM: \1\2\thttps://github.com/kubernetes/kubernetes/pull/\1~' >> ~/Documents/v1.19.2.tsv +``` + +This tsv file can be imported into a google sheets spreadsheet to track the +progress of picking commits to the new rebase branch. The spreadsheet can also +be a way of communicating with rebase reviewers. For an example of this +communication, please see the [the spreadsheet used for the 1.19 +rebase](https://docs.google.com/spreadsheets/d/10KYptJkDB1z8_RYCQVBYDjdTlRfyoXILMa0Fg8tnNlY/edit). + +## Picking commits from the previous rebase branch to the new branch +Go through the spreadsheet and for every commit set one of the appropriate actions: + - `p`, to pick the commit + - `s`, to squash it (add a comment with the sha of the target) + - `d`, to drop the commit (if it is not obvious, comment why) + +Set up conditional formatting in the google sheet to color these lines appropriately. + +Commits carried on rebase branches have commit messages prefixed as follows: + +- `UPSTREAM: :` + - A persistent carry that should probably be picked for the subsequent rebase branch. + - In general, these commits are used to modify behavior for consistency or + compatibility with openshift. +- `UPSTREAM: :` + - A carry that should probably not be picked for the subsequent rebase branch. + - In general, these commits are used to maintain the codebase in ways that are + branch-specific, like the update of generated files or dependencies. +- `UPSTREAM: 77870:` + - The number identifies a PR in upstream kubernetes + (i.e. `https://github.com/kubernetes/kubernetes/pull/`) + - A commit with this message should only be picked into the subsequent rebase branch + if the commits of the referenced PR are not included in the upstream branch. + - To check if a given commit is included in the upstream branch, open the referenced + upstream PR and check any of its commits for the release tag (e.g. `v.1.20.0`) + targeted by the new rebase branch. For example: + - + +With these guidelines in mind, pick the appropriate commits from the previous rebase +branch into the new rebase branch. Create a new filter view in the spreadsheet to allow +you get a view where `Action==p || Action==s` and copy paste the shas to `git cherry-pick` +command. Use `tr '\n' ' ' <<< ""` to get a space separated list +from the copy&paste. + +Where it makes sense to do so, squash carried changes that are tightly coupled to +simplify future rebases. If the commit message of a carry does not conform to +expectations, feel free to revise and note the change in the spreadsheet row for the +commit. + +If you first pick all the pick+squash commits first and push them for review it is easier for you +and your reviewers to check the code changes and you squash it at the end. + +Explicit commit rules: +- Anything touching `openshift-hack/`, openshift specific READMEs or similar files + should be squashed to 1 commit named "UPSTREAM: : Add OpenShift specific files" +- Updating generated files coming from kubernetes should be `` commit + +## Update the hyperkube image version to the release tag + +The [hyperkube dockerfile](openshift-hack/images/hyperkube/Dockerfile.rhel) +hard-codes the Kubernetes version in an image label. It's necessary to manually +set this label to the new release tag. Prefix the commit summary with +`UPSTREAM: : (squash)` and squash it before merging the rebase PR. + +## Updating dependencies + +Once the commits are all picked from the previous rebase branch, and your PR +is mostly ready, each of the following repositories need to be updated to depend +on the upstream tag targeted by the rebase: + +- https://github.com/openshift/api +- https://github.com/openshift/apiserver-library-go +- https://github.com/openshift/client-go +- https://github.com/openshift/library-go + +Often these repositories are updated in parallel by other team members, so make +sure to ask around before starting the work of bumping their dependencies. + +Once the above repos have been updated to depend on the target release, +it will be necessary to update `go.mod` to point to the appropriate revision +of these repos by running `hack/pin-dependency.sh` for each of them and then running +`hack/update-vendor.sh` (as per the [upstream documentation](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/vendor.md#adding-or-updating-a-dependency)). + +Make sure to commit the result of a vendoring update with `UPSTREAM: : bump(*)`. +If you have already bumped the dependencies to get the repo to compile, +don't forget to squash the commits before merging the PR. + +### Updating dependencies for pending bumps + +The upstream `hack/pin-dependency.sh` script only supports setting dependency +for the original repository. To pin to a fork branch that has not yet been +merged (i.e. to test a rebase ahead of shared library bumps having merged), the +following `go mod` invocations are suggested: + +``` +go mod edit -replace github.com/openshift/=github.com//@SHA +go mod tidy && go mod vendor +``` + +Alternatively, you can edit `go.mod` file manually with your favourite editor and use search&replace. + +## Review test annotation rules + +The names of upstream e2e tests are annotated according to the a set of +[declarative rules](openshift-hack/e2e/annotate/rules.go). These annotations +are used to group tests into suites and to skip tests that are known not to be +incompatible with some or all configurations of OpenShift. + +When performing a rebase, it is important to review the rules to +ensure they are still relevant: + +- [ ] Ensure that `[Disabled:Alpha]` rules are appropriate for the current kube + level. Alpha features that are not enabled by default should be targeted + by this annotation to ensure that tests of those features are skipped. +- [ ] Add new skips (along with a bz to track resolution) where e2e tests fail + consistently. + +Test failures representing major issues affecting cluster capability will +generally need to be addressed before merge of the rebase PR, but minor issues +(e.g. tests that fail to execute correctly but don't appear to reflect a +regression in behavior) can often be skipped and addressed post-merge. + +## Updating generated files + +- Update generated files by running `make update` + - This step depends on etcd being installed in the path, which can be + accomplished by running `hack/install-etcd.sh`. + - Alternatively, run it in the same container as CI is using for build_root that already has + the etcd at correct version +``` +podman run -it --rm -v $( pwd ):/go/k8s.io/kubernetes:Z --workdir=/go/k8s.io/kubernetes registry.svc.ci.openshift.org/openshift/release:rhel-8-release-golang-1.15-openshift-4.7 make update OS_RUN_WITHOUT_DOCKER=yes +``` +- Commit the resulting changes as `UPSTREAM: : make update`. + +## Building and testing + +- Build the code with `make` +- Test the code with `make test` + - Where test failures are encountered and can't be trivially resolved, the + spreadsheet can be used to track those failures to their resolution. The + example spreadsheet should have a sheet that demonstrates this tracking. + - Where a test failure proves challenging to fix without specialized knowledge, + make sure to coordinate with the team(s) responsible for area(s) of focus + exhibiting test failure. If in doubt, ask for help! +- Verify the code with `make verify` + +### Rebase Checklists + +In preparation for submitting a PR to the [openshift fork of +kubernetes](https://github.com/openshift/kubernetes), the following +should be true: + +- [ ] The new rebase branch has been created from the upstream tag +- [ ] The new rebase branch includes relevant carries from target branch +- [ ] Dependencies have been updated +- [ ] Hyperkube dockerfile version has been updated +- [ ] `make update` has been invoked and the results committed +- [ ] `make` executes without error +- [ ] `make verify` executes without error +- [ ] `make test` executes without error +- [ ] The upstream tag is pushed to `openshift/kubernetes` to ensure that + build artifacts are versioned correctly + - Upstream tooling uses the value of the most recent tag (e.g. `v1.20.0`) + in the branch history as the version of the binaries it builds. + - Pushing the tag is easy as +``` +git push git@github.com:openshift/kubernetes.git refs/tags/v1.20.0 +``` + +Details to include in the description of the PR: + +- [ ] A link to the rebase spreadsheet for the benefit for reviewers + +After the rebase PR has merged to `openshift/kubernetes`, vendor the changes +into `openshift/origin` to ensure that the openshift-tests binary reflects +the upstream test changes introduced by the rebase: + +- [ ] Find the SHA of the merge commit after your PR lands in `openshift/kubernetes` +- [ ] Run `hack/update-kube-vendor.sh ` in a clone of the `origin` + repo and commit the results +- [ ] Run `make update` and commit the results +- [ ] Submit as a PR to `origin` + +As a final step, send an email to the aos-devel mailing list announcing the +rebase. Make sure to include: + +- [ ] The new version of upstream Kubernetes that OpenShift is now based on +- [ ] Link(s) to upstream changelog(s) detailing what has changed since the last rebase landed +- [ ] A reminder to component maintainers to bump their dependencies +- [ ] Relevant details of the challenges involved in landing the rebase that + could benefit from a wider audience. diff --git a/build/run.sh b/build/run.sh index 3ecc2dacb7789..c0eb0b83270b0 100755 --- a/build/run.sh +++ b/build/run.sh @@ -25,6 +25,12 @@ set -o pipefail KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. source "$KUBE_ROOT/build/common.sh" +# Allow running without docker (e.g. in openshift ci) +if [[ "${OS_RUN_WITHOUT_DOCKER:-}" ]]; then + "${@}" + exit 0 +fi + KUBE_RUN_COPY_OUTPUT="${KUBE_RUN_COPY_OUTPUT:-y}" kube::build::verify_prereqs diff --git a/cmd/watch-termination/main.go b/cmd/watch-termination/main.go new file mode 100644 index 0000000000000..ff1f099b37df7 --- /dev/null +++ b/cmd/watch-termination/main.go @@ -0,0 +1,329 @@ +package main + +import ( + "context" + "flag" + "fmt" + "io" + "io/ioutil" + "os" + "os/exec" + "os/signal" + "strings" + "sync" + "syscall" + "time" + + "gopkg.in/natefinch/lumberjack.v2" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/kubernetes" + corev1client "k8s.io/client-go/kubernetes/typed/core/v1" + "k8s.io/client-go/tools/clientcmd" + "k8s.io/klog/v2" +) + +func main() { + os.Exit(run()) +} + +func run() int { + terminationLog := flag.String("termination-log-file", "", "Write logs after SIGTERM to this file (in addition to stderr)") + terminationLock := flag.String("termination-touch-file", "", "Touch this file on SIGTERM and delete on termination") + kubeconfigPath := flag.String("kubeconfig", "", "Optional kubeconfig used to create events") + gracefulTerminatioPeriod := flag.Duration("graceful-termination-duration", 105*time.Second, "The duration of the graceful termination period, e.g. 105s") + + klog.InitFlags(nil) + flag.Set("v", "9") + + // never log to stderr, only through our termination log writer (which sends it also to stderr) + flag.Set("logtostderr", "false") + flag.Set("stderrthreshold", "99") + + flag.Parse() + args := flag.CommandLine.Args() + + if len(args) == 0 { + fmt.Println("Missing command line") + return 1 + } + + // use special tee-like writer when termination log is set + termCh := make(chan struct{}) + var stderr io.Writer = os.Stderr + var terminationLogger *terminationFileWriter + if len(*terminationLog) > 0 { + terminationLogger = &terminationFileWriter{ + Writer: os.Stderr, + fn: *terminationLog, + startFileLoggingCh: termCh, + } + stderr = terminationLogger + + // do the klog file writer dance: klog writes to all outputs of lower + // severity. No idea why. So we discard for anything other than info. + // Otherwise, we would see errors multiple times. + klog.SetOutput(ioutil.Discard) + klog.SetOutputBySeverity("INFO", stderr) + } + + var client kubernetes.Interface + if len(*kubeconfigPath) > 0 { + loader := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(&clientcmd.ClientConfigLoadingRules{ExplicitPath: *kubeconfigPath}, &clientcmd.ConfigOverrides{}) + if cfg, err := loader.ClientConfig(); err != nil { + klog.Errorf("failed to load kubeconfig %q: %v", *kubeconfigPath, err) + return 1 + } else { + client = kubernetes.NewForConfigOrDie(cfg) + } + } + + // touch file early. If the file is not removed on termination, we are not + // terminating cleanly via SIGTERM. + if len(*terminationLock) > 0 { + ref, err := eventReference() + if err != nil { + klog.Errorf("failed to get event target: %v", err) + return 1 + } + + if st, err := os.Stat(*terminationLock); err == nil { + podName := "unknown" + if v := os.Getenv("POD_NAME"); len(v) > 0 { + podName = v // pod name is always the same for static pods + } + msg := fmt.Sprintf("Previous pod %s started at %s did not terminate gracefully", podName, st.ModTime().String()) + + klog.Warning(msg) + _, _ = terminationLogger.WriteToTerminationLog([]byte(msg + "\n")) + + if client != nil { + go wait.PollUntil(5*time.Second, func() (bool, error) { + if err := eventf(client.CoreV1().Events(ref.Namespace), *ref, corev1.EventTypeWarning, "NonGracefulTermination", msg); err != nil { + return false, nil + } + + select { + case <-termCh: + default: + } + return true, nil + }, termCh) + } + + klog.Infof("Deleting old termination lock file %q", *terminationLock) + if err := os.Remove(*terminationLock); err != nil { + klog.Errorf("Old termination lock file deletion failed: %v", err) + } + } + + // separation to see where the new one is starting + _, _ = terminationLogger.WriteToTerminationLog([]byte("---\n")) + + klog.Infof("Touching termination lock file %q", *terminationLock) + if err := touch(*terminationLock); err != nil { + klog.Infof("Error touching %s: %v", *terminationLock, err) + // keep going + } + + var deleteLockOnce sync.Once + + if *gracefulTerminatioPeriod > 2*time.Second { + go func() { + <-termCh + <-time.After(*gracefulTerminatioPeriod - 2*time.Second) + + deleteLockOnce.Do(func() { + klog.Infof("Graceful termination time nearly passed and kube-apiserver has still not terminated. Deleting termination lock file %q to avoid a false positive.", *terminationLock) + if err := os.Remove(*terminationLock); err != nil { + klog.Errorf("Termination lock file deletion failed: %v", err) + } + + if err := eventf(client.CoreV1().Events(ref.Namespace), *ref, corev1.EventTypeWarning, "GracefulTerminationTimeout", "kube-apiserver did not terminate within %s", *gracefulTerminatioPeriod); err != nil { + klog.Error(err) + } + }) + }() + } + + defer deleteLockOnce.Do(func() { + klog.Infof("Deleting termination lock file %q", *terminationLock) + if err := os.Remove(*terminationLock); err != nil { + klog.Errorf("Termination lock file deletion failed: %v", err) + } + }) + } + + cmd := exec.Command(args[0], args[1:]...) + cmd.Stdout = os.Stdout + cmd.Stderr = stderr + + // forward SIGTERM and SIGINT to child + sigCh := make(chan os.Signal, 1) + signal.Notify(sigCh, syscall.SIGTERM, syscall.SIGINT) + var wg sync.WaitGroup + wg.Add(1) + go func() { + defer wg.Done() + for s := range sigCh { + select { + case <-termCh: + default: + close(termCh) + } + + klog.Infof("Received signal %s. Forwarding to sub-process %q.", s, args[0]) + + cmd.Process.Signal(s) + } + }() + + klog.Infof("Launching sub-process %q", cmd) + rc := 0 + if err := cmd.Run(); err != nil { + if exitError, ok := err.(*exec.ExitError); ok { + rc = exitError.ExitCode() + } else { + klog.Infof("Failed to launch %s: %v", args[0], err) + return 255 + } + } + + // remove signal handling + signal.Stop(sigCh) + close(sigCh) + wg.Wait() + + klog.Infof("Termination finished with exit code %d", rc) + return rc +} + +// terminationFileWriter forwards everything to the embedded writer. When +// startFileLoggingCh is closed, everything is appended to the given file name +// in addition. +type terminationFileWriter struct { + io.Writer + fn string + startFileLoggingCh <-chan struct{} + + logger io.Writer +} + +func (w *terminationFileWriter) WriteToTerminationLog(bs []byte) (int, error) { + if w == nil { + return len(bs), nil + } + + if w.logger == nil { + l := &lumberjack.Logger{ + Filename: w.fn, + MaxSize: 100, + MaxBackups: 3, + MaxAge: 28, + Compress: false, + } + w.logger = l + fmt.Fprintf(os.Stderr, "Copying termination logs to %q\n", w.fn) + } + if n, err := w.logger.Write(bs); err != nil { + return n, err + } else if n != len(bs) { + return n, io.ErrShortWrite + } + return len(bs), nil +} + +func (w *terminationFileWriter) Write(bs []byte) (int, error) { + // temporary hack to avoid logging sensitive tokens. + // TODO: drop when we moved to a non-sensitive storage format + if strings.Contains(string(bs), "URI=\"/apis/oauth.openshift.io/v1/oauthaccesstokens/") || strings.Contains(string(bs), "URI=\"/apis/oauth.openshift.io/v1/oauthauthorizetokens/") { + return len(bs), nil + } + + select { + case <-w.startFileLoggingCh: + if n, err := w.WriteToTerminationLog(bs); err != nil { + return n, err + } + default: + } + + return w.Writer.Write(bs) +} + +func touch(fn string) error { + _, err := os.Stat(fn) + if os.IsNotExist(err) { + file, err := os.Create(fn) + if err != nil { + return err + } + defer file.Close() + return nil + } + + currentTime := time.Now().Local() + return os.Chtimes(fn, currentTime, currentTime) +} + +func eventf(client corev1client.EventInterface, ref corev1.ObjectReference, eventType, reason, messageFmt string, args ...interface{}) error { + t := metav1.Time{Time: time.Now()} + host, _ := os.Hostname() // expicitly ignore error. Empty host is fine + + e := &corev1.Event{ + ObjectMeta: metav1.ObjectMeta{ + Name: fmt.Sprintf("%v.%x", ref.Name, t.UnixNano()), + Namespace: ref.Namespace, + }, + InvolvedObject: ref, + Reason: reason, + Message: fmt.Sprintf(messageFmt, args...), + FirstTimestamp: t, + LastTimestamp: t, + Count: 1, + Type: eventType, + Source: corev1.EventSource{Component: "apiserver", Host: host}, + } + + _, err := client.Create(context.TODO(), e, metav1.CreateOptions{}) + + if err == nil { + klog.V(2).Infof("Event(%#v): type: '%v' reason: '%v' %v", e.InvolvedObject, e.Type, e.Reason, e.Message) + } + + return err +} + +func eventReference() (*corev1.ObjectReference, error) { + ns := os.Getenv("POD_NAMESPACE") + pod := os.Getenv("POD_NAME") + if len(ns) == 0 && len(pod) > 0 { + serviceAccountNamespaceFile := "/var/run/secrets/kubernetes.io/serviceaccount/namespace" + if _, err := os.Stat(serviceAccountNamespaceFile); err == nil { + bs, err := ioutil.ReadFile(serviceAccountNamespaceFile) + if err != nil { + return nil, err + } + ns = string(bs) + } + } + if len(ns) == 0 { + pod = "" + ns = "kube-system" + } + if len(pod) == 0 { + return &corev1.ObjectReference{ + Kind: "Namespace", + Name: ns, + APIVersion: "v1", + }, nil + } + + return &corev1.ObjectReference{ + Kind: "Pod", + Namespace: ns, + Name: pod, + APIVersion: "v1", + }, nil +} diff --git a/hack/.shellcheck_failures b/hack/.shellcheck_failures index fbc461d191bef..227fe11b6f4f5 100644 --- a/hack/.shellcheck_failures +++ b/hack/.shellcheck_failures @@ -3,3 +3,6 @@ ./cluster/gce/gci/master-helper.sh ./cluster/gce/util.sh ./cluster/log-dump/log-dump.sh +./openshift-hack/lib/build/binaries.sh +./openshift-hack/lib/constants.sh +./openshift-hack/lib/init.sh diff --git a/hack/lib/golang.sh b/hack/lib/golang.sh index 58bc090ba55ed..57989484ed787 100755 --- a/hack/lib/golang.sh +++ b/hack/lib/golang.sh @@ -78,6 +78,7 @@ kube::golang::server_targets() { vendor/k8s.io/kube-aggregator vendor/k8s.io/apiextensions-apiserver cluster/gce/gci/mounter + cmd/watch-termination ) echo "${targets[@]}" } diff --git a/hack/make-rules/test.sh b/hack/make-rules/test.sh index ae5eea49fbf80..0ff05c9a6de28 100755 --- a/hack/make-rules/test.sh +++ b/hack/make-rules/test.sh @@ -52,6 +52,7 @@ kube::test::find_dirs() { -o -path './third_party/*' \ -o -path './staging/*' \ -o -path './vendor/*' \ + -o -path './openshift-hack/e2e/*' \ \) -prune \ \) -name '*_test.go' -print0 | xargs -0n1 dirname | sed "s|^\./|${KUBE_GO_PACKAGE}/|" | LC_ALL=C sort -u diff --git a/hack/make-rules/update.sh b/hack/make-rules/update.sh index 79756a698d6a5..a4d8b67a392f9 100755 --- a/hack/make-rules/update.sh +++ b/hack/make-rules/update.sh @@ -43,7 +43,9 @@ if ! ${ALL} ; then echo "Running in short-circuit mode; run with FORCE_ALL=true to force all scripts to run." fi +# Skip bazel since it's not used downstream BASH_TARGETS=" + update-test-annotations update-generated-protobuf update-codegen update-generated-runtime @@ -52,7 +54,6 @@ BASH_TARGETS=" update-generated-docs update-generated-swagger-docs update-openapi-spec - update-bazel update-gofmt" for t in ${BASH_TARGETS}; do diff --git a/hack/make-rules/verify.sh b/hack/make-rules/verify.sh index b91244cb8fdcd..0cf3b4f35e759 100755 --- a/hack/make-rules/verify.sh +++ b/hack/make-rules/verify.sh @@ -43,6 +43,33 @@ if [[ ${EXCLUDE_FILES_REMAKE:-} =~ ^[yY]$ ]]; then ) fi +# Excluded checks for openshift/kubernetes fork that are always skipped. +EXCLUDED_PATTERNS+=( + "verify-boilerplate.sh" # Carries do not require boilerplate + "verify-bazel.sh" # Bazel is not used downstream + "verify-no-vendor-cycles.sh" # Incompatible with the way many carries are specified + "verify-publishing-bot.py" # Verifies the upstream rules, which are not maintained in o/k + "verify-staging-meta-files.sh" # Staging meta files are not maintained downstream +) + +# Skipped checks for openshift/kubernetes fork that need to be fixed. +# +# Where a check is excluded due to 'inconsistent behavior between +# local and ci execution', the fix will require finding a way to +# compare current and generated results without 'cp -a' since this +# command does not execute without error in downstream ci. +EXCLUDED_PATTERNS+=( + "verify-codegen.sh" # TODO(marun) Fix inconsistent behavior between local and ci execution + "verify-generated-files-remake.sh" # TODO(marun) Is it worth fixing this check? + "verify-generated-protobuf.sh" # TODO(marun) Fix inconsistent behavior between local and ci execution + "verify-golint.sh" # TODO(marun) Cleanup carried code + "verify-hack-tools.sh" # TODO(marun) Fix inconsistent behavior between local and ci execution + "verify-openapi-spec.sh" # TODO(marun) Fix inconsistent behavior between local and ci execution + "verify-spelling.sh" # TODO(marun) Need to ensure installation of misspell command + "verify-staticcheck.sh" # TODO(marun) Fix inconsistent behavior between local and ci execution + "verify-vendor-licenses.sh" # TODO(marun) Fix inconsistent behavior between local and ci execution +) + # Exclude typecheck in certain cases, if they're running in a separate job. if [[ ${EXCLUDE_TYPECHECK:-} =~ ^[yY]$ ]]; then EXCLUDED_PATTERNS+=( diff --git a/hack/update-test-annotations.sh b/hack/update-test-annotations.sh new file mode 120000 index 0000000000000..ecf920cd8d6b4 --- /dev/null +++ b/hack/update-test-annotations.sh @@ -0,0 +1 @@ +../openshift-hack/update-test-annotations.sh \ No newline at end of file diff --git a/hack/update-vendor.sh b/hack/update-vendor.sh index 35b1ef22c4943..4b297b9f2b1a9 100755 --- a/hack/update-vendor.sh +++ b/hack/update-vendor.sh @@ -299,7 +299,8 @@ go mod tidy >>"${LOG_FILE}" 2>&1 # disallow transitive dependencies on k8s.io/kubernetes loopback_deps=() kube::util::read-array loopback_deps < <(go mod graph | grep ' k8s.io/kubernetes' || true) -if [[ -n ${loopback_deps[*]:+"${loopback_deps[*]}"} ]]; then +## Allow apiserver-library-go to depend on k8s.io/kubernetes +if [[ -n ${loopback_deps[*]:+"${loopback_deps[*]}"} && ! "${loopback_deps[*]}" =~ github.com/openshift/apiserver-library-go ]]; then kube::log::error "Disallowed transitive k8s.io/kubernetes dependencies exist via the following imports:" kube::log::error "${loopback_deps[@]}" exit 1 @@ -346,22 +347,24 @@ for repo in $(kube::util::list_staging_repos); do ln -s "../../staging/src/k8s.io/${repo}" "${KUBE_ROOT}/vendor/k8s.io/${repo}" done -kube::log::status "vendor: updating BUILD files" +## Bazel is not used to build downstream +#kube::log::status "vendor: updating BUILD files" # Assume that anything imported through vendor doesn't need Bazel to build. # Prune out any Bazel build files, since these can break the build due to # missing dependencies that aren't included by go mod vendor. -find vendor/ -type f \ - \( -name BUILD -o -name BUILD.bazel -o -name WORKSPACE \) \ - -exec rm -f {} \; -hack/update-bazel.sh >>"${LOG_FILE}" 2>&1 +# find . -type f \ +# \( -name BUILD -o -name BUILD.bazel -o -name WORKSPACE \) \ +# -exec rm -f {} \; +#hack/update-bazel.sh >>"${LOG_FILE}" 2>&1 -kube::log::status "vendor: updating vendor/LICENSES" -hack/update-vendor-licenses.sh >>"${LOG_FILE}" 2>&1 +## License files are not currently maintained downstream +#kube::log::status "vendor: updating vendor/LICENSES" +#hack/update-vendor-licenses.sh >>"${LOG_FILE}" 2>&1 kube::log::status "vendor: creating OWNERS file" rm -f "vendor/OWNERS" cat <<__EOF__ > "vendor/OWNERS" -# See the OWNERS docs at https://go.k8s.io/owners +See the OWNERS docs at https://go.k8s.io/owners approvers: - dep-approvers diff --git a/hack/verify-test-annotations.sh b/hack/verify-test-annotations.sh new file mode 120000 index 0000000000000..a9cbed2d3245a --- /dev/null +++ b/hack/verify-test-annotations.sh @@ -0,0 +1 @@ +../openshift-hack/verify-test-annotations.sh \ No newline at end of file diff --git a/hack/verify-vendor.sh b/hack/verify-vendor.sh index 46a15255e7a2c..b6fc09408749c 100755 --- a/hack/verify-vendor.sh +++ b/hack/verify-vendor.sh @@ -86,8 +86,12 @@ pushd "${KUBE_ROOT}" > /dev/null 2>&1 ret=1 fi + # Given that we don't intend to publish staging repos from our fork, + # it does not seem necessary to ensure that dependencies will match + # across staging repos when published. + # # Verify we are pinned to matching levels - hack/lint-dependencies.sh >&2 + #hack/lint-dependencies.sh >&2 popd > /dev/null 2>&1 if [[ ${ret} -gt 0 ]]; then diff --git a/openshift-hack/build-go.sh b/openshift-hack/build-go.sh new file mode 100755 index 0000000000000..dfc663d23a593 --- /dev/null +++ b/openshift-hack/build-go.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +STARTTIME=$(date +%s) + +# shellcheck source=openshift-hack/lib/init.sh +source "$(dirname "${BASH_SOURCE[0]}")/lib/init.sh" + +pushd "${OS_ROOT}" > /dev/null || exit 1 + make all WHAT='cmd/kube-apiserver cmd/kube-controller-manager cmd/kube-scheduler cmd/kubelet' +popd > /dev/null || exit 1 + +os::build::version::git_vars + +if [[ "${OS_GIT_TREE_STATE:-dirty}" == "clean" ]]; then + # only when we are building from a clean state can we claim to + # have created a valid set of binaries that can resemble a release + mkdir -p "${OS_OUTPUT_RELEASEPATH}" + echo "${OS_GIT_COMMIT}" > "${OS_OUTPUT_RELEASEPATH}/.commit" +fi + +ret=$?; ENDTIME=$(date +%s); echo "$0 took $((ENDTIME - STARTTIME)) seconds"; exit "$ret" diff --git a/openshift-hack/build-rpms.sh b/openshift-hack/build-rpms.sh new file mode 100755 index 0000000000000..4ef11711d48df --- /dev/null +++ b/openshift-hack/build-rpms.sh @@ -0,0 +1,130 @@ +#!/usr/bin/env bash + +# This script generates RPMs into _output/releases. All build +# dependencies are required on the host. The build will be performed +# by the upstream makefile called from the spec file. +# shellcheck source=openshift-hack/lib/init.sh +source "$(dirname "${BASH_SOURCE[0]}")/lib/init.sh" + +# Only build linux by default. Clearing this value will build all platforms +OS_ONLY_BUILD_PLATFORMS="${OS_ONLY_BUILD_PLATFORMS:-linux/amd64}" + +function cleanup() { + return_code=$? + os::util::describe_return_code "${return_code}" + exit "${return_code}" +} +trap "cleanup" EXIT + +# check whether we are in a clean output state +dirty="$( if [[ -d "${OS_OUTPUT}" ]]; then echo '1'; fi )" + +os::util::ensure::system_binary_exists rpmbuild +os::util::ensure::system_binary_exists createrepo + +if [[ -n "${OS_BUILD_SRPM-}" ]]; then + srpm="a" +else + srpm="b" +fi + +os::build::rpm::get_nvra_vars + +OS_RPM_SPECFILE="$( find "${OS_ROOT}" -name '*.spec' )" +OS_RPM_NAME="$( rpmspec -q --qf '%{name}\n' "${OS_RPM_SPECFILE}" | head -1 )" + +os::log::info "Building release RPMs for ${OS_RPM_SPECFILE} ..." + +rpm_tmp_dir="${BASETMPDIR}/rpm" + +# RPM requires the spec file be owned by the invoking user +chown "$(id -u):$(id -g)" "${OS_RPM_SPECFILE}" || true + +if [[ -n "${dirty}" && "${OS_GIT_TREE_STATE}" == "dirty" ]]; then + os::log::warning "Repository is not clean, performing fast build and reusing _output" + + # build and output from source to destination + rm -rf "${rpm_tmp_dir}" + mkdir -p "${rpm_tmp_dir}" + ln -fns "${OS_ROOT}" "${rpm_tmp_dir}/SOURCES" + ln -fns "${OS_ROOT}" "${rpm_tmp_dir}/BUILD" + rpmbuild -bb "${OS_RPM_SPECFILE}" \ + --define "_sourcedir ${rpm_tmp_dir}/SOURCES" \ + --define "_builddir ${rpm_tmp_dir}/BUILD" \ + --define "skip_prep 1" \ + --define "skip_dist ${SKIP_DIST:-1}" \ + --define "version ${OS_RPM_VERSION}" \ + --define "release ${OS_RPM_RELEASE}" \ + --define "commit ${OS_GIT_COMMIT}" \ + --define "os_git_vars ${OS_RPM_GIT_VARS}" \ + --define "_topdir ${rpm_tmp_dir}" + + mkdir -p "${OS_OUTPUT_RPMPATH}" + mv -f "${rpm_tmp_dir}"/RPMS/*/*.rpm "${OS_OUTPUT_RPMPATH}" + +else + rm -rf "${rpm_tmp_dir}/SOURCES" + mkdir -p "${rpm_tmp_dir}/SOURCES" + tar czf "${rpm_tmp_dir}/SOURCES/${OS_RPM_NAME}-${OS_RPM_VERSION}.tar.gz" \ + --owner=0 --group=0 \ + --exclude=_output --exclude=.git \ + --transform "s|^|${OS_RPM_NAME}-${OS_RPM_VERSION}/|rSH" \ + . + + rpmbuild -b${srpm} "${OS_RPM_SPECFILE}" \ + --define "skip_dist ${SKIP_DIST:-1}" \ + --define "version ${OS_RPM_VERSION}" \ + --define "release ${OS_RPM_RELEASE}" \ + --define "commit ${OS_GIT_COMMIT}" \ + --define "os_git_vars ${OS_RPM_GIT_VARS}" \ + --define "_topdir ${rpm_tmp_dir}" + + output_directory="$( find "${rpm_tmp_dir}" -type d -path "*/BUILD/${OS_RPM_NAME}-${OS_RPM_VERSION}/_output/local" )" + if [[ -z "${output_directory}" ]]; then + os::log::fatal 'No _output artifact directory found in rpmbuild artifacts!' + fi + + # migrate the rpm artifacts to the output directory, must be clean or move will fail + make clean + mkdir -p "${OS_OUTPUT}" + + # mv exits prematurely with status 1 in the following scenario: running as root, + # attempting to move a [directory tree containing a] symlink to a destination on + # an NFS volume exported with root_squash set. This can occur when running this + # script on a Vagrant box. The error shown is "mv: failed to preserve ownership + # for $FILE: Operation not permitted". As a workaround, if + # ${output_directory} and ${OS_OUTPUT} are on different devices, use cp and + # rm instead. + if [[ $(stat -c %d "${output_directory}") == $(stat -c %d "${OS_OUTPUT}") ]]; then + mv "${output_directory}"/* "${OS_OUTPUT}" + else + cp -R "${output_directory}"/* "${OS_OUTPUT}" + rm -rf "${output_directory:?}"/* + fi + + mkdir -p "${OS_OUTPUT_RPMPATH}" + if [[ -n "${OS_BUILD_SRPM-}" ]]; then + mv -f "${rpm_tmp_dir}"/SRPMS/*src.rpm "${OS_OUTPUT_RPMPATH}" + fi + mv -f "${rpm_tmp_dir}"/RPMS/*/*.rpm "${OS_OUTPUT_RPMPATH}" +fi + +mkdir -p "${OS_OUTPUT_RELEASEPATH}" +echo "${OS_GIT_COMMIT}" > "${OS_OUTPUT_RELEASEPATH}/.commit" + +repo_path="$( os::util::absolute_path "${OS_OUTPUT_RPMPATH}" )" +createrepo "${repo_path}" + +echo "[${OS_RPM_NAME}-local-release] +baseurl = file://${repo_path} +gpgcheck = 0 +name = Release from Local Source for ${OS_RPM_NAME} +enabled = 1 +" > "${repo_path}/local-release.repo" + +# DEPRECATED: preserve until jobs migrate to using local-release.repo +cp "${repo_path}/local-release.repo" "${repo_path}/origin-local-release.repo" + +os::log::info "Repository file for \`yum\` or \`dnf\` placed at ${repo_path}/local-release.repo +Install it with: +$ mv '${repo_path}/local-release.repo' '/etc/yum.repos.d" diff --git a/openshift-hack/commit-tag.png b/openshift-hack/commit-tag.png new file mode 100644 index 0000000000000000000000000000000000000000..ac225eae27cce3413d45061a680d6866b52a7a4c GIT binary patch literal 126788 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

U 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

Ib!Z|r{x*Y|>xb!X0o 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%0Dddo7bW~aLlOUSv5eteWU3*JI03hH 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 literal 0 HcmV?d00001 diff --git a/openshift-hack/commitchecker/commitchecker b/openshift-hack/commitchecker/commitchecker new file mode 100755 index 0000000000000000000000000000000000000000..10a254b7a942c0d284cdd9da082de346ae9b7a77 GIT binary patch literal 3958065 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

$ioBG<*|7~C`4mHs~0Iy2{8 zdYsfC7TGRYAJCpB-enfl_FEw)+S3A?Weh7*pYWr+45(99X@T%*C)?(=3S+{CY{tAu zLEY2bZ)%Imi=~j>bnWg-a`nu*uKZX5B|R#9<#k=V<-(`yn1wNw`g1?GOI?c}Ga=Ro zVwQ0C{{xl6hV?*J2TGAujFqX107E|Yi@nr69CbV33k-0=S8P=%(jyhh==C70E-*NR z4kt~8HMnM*n`ZExtbPO(&tp&N%{ z(}2SX7b)Y8RExXmybN#_7U!QYglWKyE500KK|i*fa38twAZY^M>mYwH;4(WWieHW= zr4L)0zWVwYXjWqzfdo;j&6t5iA6~(oiG{EPsA*zRq->?mIF}Kzi2&^sznZ{FM+~Mh zmmzZv>6!5hu)kT)jN4|)ntg#q5HaV(MP_i`Yla*%=hPX_;A6w2s11C5p<6>o3sSIL zayB5?g(Y}(8b1AqnZ4vSV!uHzRfL%2iG0O{LS4wtKRU-4A8bUB(X5|;*uuv80c>^y zDzy=n905O5vpBZMG%Vy}{u29^41A-xd z%^8UIuF6MRKxUvCp+tjg$+SZE_(U#%qPyn)ERq5`sycw1f~=8^#07;;tWWKdZr1 zLa>z@zKgSh_&(TXf|hVUv;!02uesELNvn(krSu5U=wfuBKP5}nC5=S`apT68eAHnq z+7BVmzf)U|rJ~w$!`PNk-t*ai1sL+E!!ha4SFwB!8mOsnK?jCnY-H&GHr2$wIL6gX zo0SiIAi(GX^X3u^!4214{~&G_y}<`ip-(;_2LQ1q!qMI^v?tA(nfBU*jsGVbvheGr z&zIA0jBGP$a{{zE0aB?F#}YByUl+hOuOpcQRH(vbF@wKt$5&I{gF;|-4;#PuVNUcD z(-DC@EF9@D+kr(a&re@WJ^Np2w-U~0&5h|dbl@6gFQ#46~*ZRmUaeNjf&) zimg(=K&*U{j|i(Ne8ZM_Owbe*Jx7CS_lR&1Jn9UVMn>^^qnn9u1n#@hxEw+5wych> z?2{NIg&NA$X_WSm^Vx{cdEY`ja)QnS#20V-am4SIJlTk!E4{M=@!Pfo@l$kc2Jx#9 zn?d|yz6s)hZF+`_=zEG%5KO|q1M40TRPVE-3p@*;0!E0232!i6rw(H?NFas6qnL_? zH23G9SyfE2{K-OVmPiX(!0cHGwZeTktv;bReHKs@@D;S}Vo_GzRLZJxg-dimr0jkG z<*J=%!7#v*jPm*fX1z(UNtb;v2AX5AH zAU>&A`wpkLeX_&Mhl2cGO)vfa3AvJ`-^gHZ8446dmWY#LG=7fK;P44g(_;V~R-wzl z8J&Sa**!FploV14*VU(z+tzo+`Cuatz%ImG*{I0eHYd5^I!B#XsHraYw~$Qpao6s; ztvKu>9uysz#E?tmG6^1qL7iB`ln|`KpRg#x_ECs;*mAj|v^>9dG}sV%$`VT9O~KQ2 zj@;KHGRZBS$neoe4wf7V$W`}Gg@G?OITFx-OMQTZW))luUj4=L(AX+Cghp}a1H2gg z9B1~di3dH$;k$*Szm)BRe&ghtD|PV|I)An7@Gzn#+TfQZjp)VV1=xc{sD9Tq4su{uIPz?v zK47fCdW}T~eA|Z4=-rDr4ykzb1iRSb=_fswLy-ZhA_qjZ=nUD+SBIs$HW5cu-Z-3< zCvF0PK)?`Cs0qcdz@l30-B1iCKS5B=ACPL3W1FpGNel6YFFF|seYEWyT*Px>0N;Qy zBA7Y^ORzi}!my&-y1aKjv<0##&Ay< z`{d!4kRZ)Lt2eLGH6WHw6L5kRuy)u86TmNZ+tqszRQeobEMd9nnnajC5jg_ifH4@K z{D(F9yoA^$PFaNoQrwrb_G6mz15k1m2KIVYCAkcWrBSt#sof(T6P!bU)b+3cd~@pP}f2d!ND?O?z=RNBcx;NbiQ$=2`tY~ej*?`DAFeB zmNEs*QsfNpUyP6bY7x1e`7LK0orJM3)!)R=>4r?IbqHc! zGsmSSa`$HJJ^gYLUYb?KDj2~_F=_1>8#0)&SF&H@bpoHg=Op3o-fDIFuMQ;AZgn`; z+PMIEub@g#4$aZxQy_7P-6@oF@FDMeQdE`594hTD_cekPMOq%IR+MF6%#8-v@Ytz8 z{C>;fvI)VAkLWVvFK{A)8x)}ozmusjm@+SJTU&$9;O91I9oS?p!5wldlUG6M zRcIyf9*R)k{&I)L*GqpH;K`4B$(z=6$g7ZN3OszcuhEdJ_ACMpG_l8xJzfkh1_Ff$ z;BeYRA1cF4$qLDeL+TT?l*D$WCh2(ya12|Hc|~l-hMTJGm=X0MAhwJZ(1j;_p_CFF@z6X5b6j)3YNt zd0;qw=m!qlpEr;Ukk=(gr^&EwOPUNN78zh+G#Nk_CmC8LYZe*s-7`+dWXSL=E|^Z8 zOb|-cBfM-{oHhp;JSr~HnhZti7QT@TupnIC0yQQrbW&p*wq-V}^Kno!$x&pse9yWb zvJEh=1;)S~0!6QcU9UAb(9TUAx5y(2po)tk*3ce4KxhM$PLFC`ptF@Qo5=zotN6jJ zI)ZDu)tcpi<0dCpviLFU0>A_5;Rqh^_)tX=HZC6otiBQdR={Jb%m87M7JWTHb3b?} zG!SiB$KN`!@lXJUFc!t~Q_IzPXgGCuZ~dNiadvwwgJa9O#kqaAn6FzLm)+udc8ipM zP&7Z)p|-q+Ht(Y2 zWuIr=2-tp1eqCw_K2br$o$||TTG-k0Tqo=&TBQiTf*tS7`2!-nA7Po57U3*<&BC`* z_q=|W7nh+UfOerx9tK0FpcQM>9)K05RgV-hnb)JH$29zaRMg2*tSSnIKHi{e+W{4~ zi)X=O%;S_~Fa8O77-v;$Q7z4{J;Y+7HJil41>7N(=BXTf%(4i-{s+AfJs7TSwFWpQ z%Yl4$xxGZIm2H5P#)@Ls3*MH!!+U~;H|7Aur3%u3XgRb|$Up%(?S8}Rzj_YWge-~z zOmHDmcFf->bNIeEPW*P3`_MW%tf3OQFCwJFN}*%8iN_*6n<0(+acV)i8GHkE|LuO; z+R_8Nbrh|wY6XIaX#{)WHxCW$g&!B}iC>Ny`+0`Y;UD4CUg*7-XmuK){CQfC`?OEt zzVu7<#v(NOd+I-k?@`6#x8XvDC}u6Jjsjlr%J)cOh(3;`OhkUWGqA3NT!uwpd>0Zb z(xsk5IQ4h+cnct#*$4e*{g2>zSUlc6;3@rKc#d|!GfKnb-77p7f<8W{@8Ev(cO0&R z9JuzlAMZlJ#s6bqW>(0l-G7MkbErbw2aAyYyc)$Zg{c{OAQ2pFRFA$2THM)NKV*Me zFPjHnTs{kgTXkdS;NIjI4pm}a8DrFjtvx*hT;@LOWWr6WbLIzWg&QA+mDfXg?_TfAI6hYAmFV_4Ltz~U^xsF+}oAMOSZ&C zj_C(Cvu$SrvcV1`+g+GAf&zV8?a0Q?RhLILw2Exk=xn~r9ob}M_Ytc$&>z{R;7xsi zNh-BUL;1}OjsgQ&@0QV2&NE+uaQz9Qss&!`fIeUy9t{~ZTX%s>Tl+O*S%Y*LrjG^x zUHXUYqvKLRFa7>C8tN?*^e4G?vDsr{`yBYu+Knb~-W6Y&m%HFCj^BB-CJ%B`o#yg2 z;hy=70}p;{Nj*V|r0H|!alrYLvG`f13mjVSC~yD^C?63&_hleH`3Lpgn0Fh;7Fpw+ z41&0$Hhw1uA2`#sfU~YWZ83RYiZCF;-thVRauR~K?M2GQzIBW%NA{I~;z&2nexE(9 zFDX7ZZYPYKB$vr9FK)pJ<9#82{Ek8RW6GZ%wU7=)aCzhy$=&O9*Nh8>TF5lEhtE2o zLL8Z8+h*y;IZxqSS%^0u{#$hys_StSoun*uR%+MBy0Nc1XU?COV5-73KNp=Qwnz>3 zQ|=i<1>j6dkDAq;qX{4Y@k`b&Xv_#W<@_kF1EUOX3HM#jBa_2WM2(m3t&(Lb=+tRo#*;{!E(^K$^*4Uz8L@Tn+b&w!dmJuw+BVyGRLP~*xuMYV(Km;4zO zx#Z4M&-=2oi9@}JoX8j`2$HAjdf)}8G2uQ%oGY<-cLDxy?KlyLSh=78sY+`pZ%kr0o;>S8Rl1Hj5B9B_!5 z%q^Dfb%SFqVjy176WHopM?UgNU4(qwkS8G~k)J)fIG`>l+DmX6`2Q?sB0i2VkZSkhClDA3@jbdJ9 z$RG=PeDu6wCmD0Ad#Ugzn<;37({_81f5taL{?&KeaMn(;*l89mZ%DJVBt8hY$_!O6 za9zp*$jiN13+TSHL`fW{b&Y$0kAqcNj2u9WAL)g$)-Z5rp#A_d_gmbMty>xPaq6u! zhxfxR<-UHo9#Q%!Qb@*&uyLvf9u(&u`LRH_3$||pbsH0P$PG^osmO53&F70CH{3(q zr@qgs13c*7I6~m~eh+v~Rj)syJ2z;Q21SNq`HENA+MtY5pZvkvi3-3VNUTq01QPC@ z&iy2V2-s)C2-p+?c7p>j3&1RT8S~zSNyvtATBK~*8)IA^qw!Issqgm5#T68(5xAZq zfK8jfN0PC4-0Apu+)-HOj*WYVJxQed^f~WC6?@iTfXt~R?2yI97%q(6jkz>%W}>pk zZ0y1oT)xEJYnaiFdjn8&5}+V8)|5L2+>bFiUa*jl$j*Q{tVNb(%ne)3(fB^lkUNl2 zy8&!jGmT?zxI=FxavY!9p{%PzpJP+>zW9NqIEPV9)o6anZD^0ZCOxi%`?!Qv#c5qS zKU{WL7x5ss6q?eZw-Ca8utyJR1y5eZ0=x~_{SbqR(|}sbEtqPs*`gNX>Q7XCZ?i*a zq_22iTpst@H-H$y-hYf_d?MaE<6n_cZP(Rw-Q!4=esh2qspsm{9nM{+;{M#E8<}A@ z@`Sea6?-&N$wuP3n!s(2Mnu3L8H&`;;X?wGyY^^gux_NlZlpptvZKvW4Mv|XmBK=Z zY~O=0s6#ZqKMOf>NvHH0aw(Sv<*&|z9stF%p{9 z*)Ko|e&D>#X1)LJO?}>GA-NoTTCa5^tS6@YA4h!D)odo3s$}I0l7v;6=b4+IeCffL zU$)@oJN8N@fArQ#MDbwS<(tTB9FSFaT61PTsz_sQe~Q}z>r@Z?xzzFc8kIj+q7}H~ zf8KZmavc5V$N7lqxA>o1k-!c?JXCMD93&<(VmlEJ^H9#|cnYHfU^hX8B8A+O+Dr>d{nAJ3iTi4~G3k zsGWi};7PjJDPIu*WN^t!ZYLK)tGN(LoI@EtQ}Rd5La?CF8|2<2eY z)@S(C?*?N&x&c5m74^k`T_lVE)_;VZ!JU{~q77ih6zfzVU>>$-4Sr9Ue=#Gl49K?4 z#5`Puf>&TkPurD0T6@|Y975{nzDty8(JDbVS~L-$=s+>04_E^9LOts!eW4DI@QGM8 zVZe;vEzyayaAySeaxav2;#N|PlvrcT{T#k`a*m{N&9C*7JmJctY(HLb)Jjcq^iYs| zLTCY&+^7NbsKqdD+SJnck7rF-GkjdizaY)Tm$6a3~*Iu(Ug5 zoZZR0kYw3*dh&RXTj+w-pZp+(kX$nLsQeG;O6Uf#Di`}QIh7ePagE%1#;$SC; zjUB}Jd2)`0T&~;_f?pSfG?+LA3+i7CHye5=G&6=kL4wbDaddPvGK6Al zlIyVDB={mlkTN(qF=BWSQXSMnRxT$y%9r_&d9rc(>R0i^QPPp)pYpnb#_79LFQ@lV zgNAA4&QmEtOuEUCC0P%mXtp+4RuCpoTO%$cLmJfnD~S^8v$O_XB<^~J%UBTkMY@}; zV-UGe27TUpE37iM^`L)QO#^{XOyC-oNm7v4cDTn&L2V=L+{tHo@&-F|Nml+b+#(^? z+nc;Lxk8D&{y}{DE7;I2cfoiw z&!r~e2Wo%B3ywaGfT%$p>Fl;tZb+g*>2L=-jY4{R&Ar0?RhI(jWmL4(L7{L-G_Mf;lcP>qXC(-&d~yo zEU1t7m;V1L_WxN2ZhHB@6*=H=ulsy3t8X`0O58%xP)3Xu&ZU677Z*( ztNNxa(GU?rw~Kwct+e`47NoGF!i(TDZZx9Ji~&w1&0<^=1L2Vdd(0ghuvLsi$Mq68 zYs}@Ev{_31g_Ur~BDRO1!Tw-V_G+%8Pd9VEHpgs$H!xdvk%M%y>El{>CJ|mAgkfB- z3h&RVFeMkS)vyJiOPz&VYn25IH2_$8r#cCw)6_>#fYc9JlQ{NZ2+v;hhD4FxMVa{n z5~L)W%dt+tESraFjmZ1tN<7qtp%ZNqEls#qqb=UK5A(m+NP_XiJVMb|ri7~I0h{i9RE}Oagm3xiF z7gqPQPm5hxZ7jxj7jHuQ-_ORkp(?b`SJ}kPM4*Qrj$;$V5*{u)hzjFXf6{*HSm)gD z{%AnGff+CZ$J7q8kEwl!=?JLSzUMh4dOzlT6gkNiuYmm)vZ>7+2CUXqFN!z{$XH|R zep1uyIgSK$X_#+j0zJ}c0RAAgudd*dJt`=+VUrdw*MQwP#ZjFAwr>_-rx37-1nj4} z-mf+|3h=m&3Zng`WV9NE37Tg0#A6VhH_=&AY%=nasPHT8pFfECZ|tAD4@Kyoi_#?Y zGg9^}Hfi8gdNuQ4BiKS_qT{&%UP`2_stp#>h}JXK?!@5jUTf}XgVXP-J!OeFGolsj z#uDy>yKJv!3piv^+}ihp-bEU3=pZcZs040{t9AhIn|Gy_;vEvG_ns}Kp)-w&*3=_Q zJWTyvq-@740?bd*B+wk8r!C?$p~;I{m>aHev;c`_{J|QEGW0m6Lpb2FU=sjFvB6fc zi;9|iB6_a#qM~SSWZ8C9fep;3>e{Vrr9Z1Qq6Z+VGs1L&=cwacG;M#@GJY2a$LwVv zMML)bQpZ##vjhH^HBVz>md=QN*& z7^PgzX`zVUO^g#WdSbFGD6%UDbGu8^bGzkwZWkk&B`8K`pqWpbUGdZK5h>ggZ@lzg z`AY$$Og1Y17L4o;7zx~V0^F;M&Q2UNA{4JFnOyo$BN9X8*$MxM$%!lcIl&zr<59$D zEJf_((r=6?9YCHq0i`|xw~Kjr+Zcpu&h>^$wImu5$^ot?H*o{Ky^RfFTo2P08U+>`~_^0a`Saj?Y5I z(}wfLqcKesTpHVBqb*@?ec5+hS`P0MDH}!j!==S7*pxYvH3aBk_QfWlVjkz@NgS7Y z@@;6(8@N+@8EUA-M@b5NA3{Y-3r6E%+})CT2I7%f0BG)M&{}~>AK14_GX|Feh@d@= z%xx0^ntRkJ7!8uoE{*dDdc_C*bL_Vk4UNYA(8XIT2uAdK^l`YrUnEU`Bu^v5R_v?9 zq#?^EM5`WkJ`Tbr?_kMHW{bvv5l~rEkREkR06B*vXQo`Pt|aB`vyXa@T+5u5K;hr+KS;J9svois$Cnw|(c zK^g`6ytXmH-7zp0$-i^_k~lMmQ+kt!Z3=GqZ1U*$@Og$nC{|sB!?~5!Gf8qU!@mUswD42Nvtj1i3cnR)Q;PHA}u&(u=%^>A~?_drm8XbX}Zyzj@AG`Sa-ip9Dwsw{milkls6(@L(f8qAqy6daZSJlJRTUL(~Zb-i5Y|Y5A8CZ9$-TCC>te z&nR9G`aK}?O=sYQPXGG4D_r{oJn0RNmZ<K|UHuAew4KT}gf*wZX1d=i_^0&)1%e+Zb zbP*mHlI^R$Y7Fak7xd-Nal<$itj0`aw5^VJNIj1NO?vL9qG^G@0k0+;4wFXde=+wa z@KIIg|9?UhBD!A1q;FnFSES6P~#p)f$Dq_pxLjLd1xpyWv38?-3zQ5Q1%j-qvF6W-* zInREc^PG17W~%L=AinT`z^7N7kwOQ&n<)#zh)eSvWF3x+xj~;kXx@JnC7AW&WC-)G z+Pi#Eq-12NGpfX0y|-$Hh>}Ci^L5G8Ho&qqxsxA8wPTJnlwC7VPp?`)pj(Zz06aK@C&<6RL+UG1$vlaj2n!?y@Ta}9b!T(8x0@gHX3BHq z{E<$x;>eUK6i%nK*G*+H?9XR#TsR2@>N$TaQAZd_$PTc`6qen>2UYc8`J^w-bA;hW7^6Wafb9VveGl|&Df6NEY~9Tj-d`X zBLH;boU`14S!SA&b$ws_vpbvFIQM>LV;aN})TgyRR@Hm0N8MmTVE-@;fe^^Cxn~B4 zMCcW!hQAJ0WR{!U?w_*`_gKKX`#-CH`0nce<^N3m&wjF-{-696^;@&V7y849@Qm%* zO=jmJ;3BjO)qmsED{Lc3rB$OLT{{WMdgD2^BRoX`@Id*^U{}IDOGLYY{7!Rhf)Dv% z@kD6e6@K6y@!y9j1%-I~PT~VP+=ly@ZlxvZWj|@Yzr$D{4lQItd*FQkHP6p{t)w6` z*?xG=-qf0Uq8B|+Kb!i%imQ+Z)K|bt-c>iFJ~C!kyhimG+3^-wBYC!^1!={sf15}A zQ52~PVnkrLkNk|5e(IrB-v+crVCJXPJ;=IU`*EZ(4x&?OGw95+_icjQT?+ZdF?4|qjmr!ns^{pk- zkC6_1?jn7o^22^?-cMZ0H*>dGM|XC2GW(@H5VQ*B5=+;%jQAF`rFG0G+H)yg4?tN= zrI;t~^90&ujspnT+a}&7rf+)1LmB6usVc3Jt8+>#Zjz9}o}RnZld_-#ELUh`5Dm@S zV1sd|sk_Km`X`RV73c=iT=-K@xSHpaH6Sk%%Dwv@PL6ge^9zm^4}iWnHd2Wqxg2YPJ1TH#2u+6-gVMsv8nr=;ZNXx`teb2T&?tSz{n$ zC=eo#LqU5v?f8951Rj8#`z$4m(8ZHZCkWD7t}Ux%)`Qc8M}UA)tF zc%@ByNRnI*oih|-)*cLp{~acoK$GWQ^?+J2@R6KE^(wU;kg+nWIh6Da8w{|}54I3> z;UKSIM%s{&IA{`26u`HScUtu-RRSerX`}Yhg(bxNLX3C|QTL6Wo*1={?Oc;5189`* zR3Oy7CVrcm8AlSJ8t2ER#q1^3@INf=mok?2DZZsG`H&cP(KdQhxwPqY^|yfsEAVvi zfLzcFYO3Zn?S7P?!Jp~YJY%HzV=4$Hc(Z6A@V?&A`3eMKBJ}xI4HQ(_wAy3p6{hp4 zyLsp8ostu_X-*QMCF!zrD4S}uV<%#~{8aqSS#5TMQ09;6GM}vU>Z@0uL0C<5;-I^E zojk^T;&rOQo0h--yw|k!9+gS)nEbu0qeN&}aM2${hJ0b$%}}2VhQA%A7h&(kRY6bx zk$Q22_u}&F1LFMvz1Wi%9d0Q*Fq4~LLa(rBLkYEyCGUy!~?j-w;urhLBhv=J}kKW^DkwEr@b`D*#5;^m36x)UQ#YFpDh*qUPx?(Ul6 z*n{TUcS46IYeN1WBHDI)l9 z+1@(Pj-3oG>_q|2RXl>p!2yKsfGb~qIjT6L6dz*MQ18v(%p31)C8cx?3)=2dUsGsc z3c~)0X+NW6hu5Xpb)__MsysCSuC8*)=hmeFzL>5Z!MurPyZ5zL~SV1&TTp3C;o{ zr2hQJ(IwuKJ;B6=-CAzF!28rwDh&pQcKkH3g+bhi{JG+l7+^(ibexw`i7rQ_8_ThU zFT=K-bJ?=<&qvikocio8BDDZ(G^U+~QAewP;RIm%1f+1tv1ZG_uJERn(L+ZHDotA`8T+ryYk0;cPv+Z@Y(EV2<8S#31LqA?%$Pz}5-nw7&gqNX9S^d-*1NX$pN}lARdw zG|}GHJsjB8ys~|Ke(NGhR^w(!YfQSW7b<|Mxh3s@u4l>6HB@NSG8iKC|A?^o``&2e zn8u`iLO??Th9;fwqukt&eeM{m+WN3QAb`eX2NBAdjcj$G@L~g4?~O3;O_p5Q=8FtK z(Q{wpF15yM2o!W*(tStyT4Sw9vX;`~qFNsX>P(ATV&&t~q)CDsG_kDPt`lZDt4!8$ z_nHLLdNfahEVK{*WNEpNJTvQp>2Si99l6%6o?@pp)Oce!*7dpWv+U*X+1V@Y`0+ZZ z%6fcfdX*z)Qc9&Ai{GFqS==mo!3{N#{o zyK;xs`j*WC()hlcI;-3ylb=_yu+xN zdF~tMQiYj*CJ9=U&WA=;D-^D<=1dx|1SQtvuh`jLFjJB=iJ9_XO$RcaT}%7?PE!m= zg|iu<+e<>bp+}jxe}JbOdYb&0Wv^7+j-M8`9jSFvUmx4-Ax%NDNy61xO6-?OlG)Fl z*LVd$dhMwIkQyiOWHex_7KDTO3s zCPXyZ@ngGJs6MELr3Y*FM8#)2tIhF*_Hrc21VH$TU5t=uDzU9OH;-q=Ubl0`7a%}~ zD{Sw0T(aZys<(FKS*@q3KgIJX^0ov&$TuRV<+E&SmXf%)d=|3qgnwAA!&I!xtr#6@ z%!ze|aFHF7{6Ltd$2gh2Pq1D?Q)t#2u4FSODLX!XUsaw|TNR{!gEknkphgaL-uho2eb>XrXT z-Sg~UlMBV*<4R4jP%4OmfH#eTlXruHdoHVQ zaGoOGv<_rBZp6M55+(cAR1hMShsTElC$g{2H$?jq+?8dpW|9nJ9b0X`<31YSn=0Uh z=jEGvZjbRW;=EeptgikGsFoF3{*TDgf3gDi11-8e!y4QB)z&?8$F(9@%P4DBVNB$L zhH7v_i(f^Al4rn^0fbR~mZV3ga6bXanthF7-XCYQhs3qrcJX|_n~jXZnsbBr_cl9c z8j90`-UM(&`653z({U87ZF|RRoj})Rebq;uOIescO&o|-&SkXb-DFQAtNz$B@fle# zaMhmNzyIkzmqfah@YTR*ZWSOVC znCu5lB?WE=%8JSkuWrpP=}33YnmyL8O#sf?#E_S3p=%$AUPH+%s1E!3%)u=?tm&cW zv^W;qU{xEHy?XhkDdQ^FSU>4X{s}4s1+{vM^XX3SE?Hteo_(cV>#WcMH#mDkgo~ZT zoqQB=w$&zbk0r+#O-H}Y(r|=>Pj=QiTcXZ}by@%)FGV9P1_sq?f`8;~Z!j}vRFDI@mwWuLqSrXn(2zKus@dc$8MA|% zCN+5tI?km&SuIz18f%P<%$ar!n1#%)M`kN&kM;OEygm^Y2v9K8H&tOzXA4V;oJCRd}0(iIi_z%MMsAwBO3#q3b>O`vK}6F z)+N`Pb@3)Cg<|$HD=1RnUcr?4(x5l)sJj)(a{?pUwZ%Kp_e6r&Z`~)v-e15nJk;SN zSAfHCRwwsY`{@^n8^{*}<4dha1K1v1wj0K%+~eOdF2c9_y*S8wF~2Ue_;Y1`dhsV4 z9k;{1vIU;MFKfx3($I(B7l_yPK5vu$O*PE^O6cCxUoRGSO6#xl^q8q=2=aVTD6Krq z*p2cqwTIE~T8%)B^?3G+uw0=-gEgm79Fetua_{x1qz130m)bsbR}0UHqle>4tv5lIwI2SWNxHA5kXi9!z1Yg-xuWTE8LU`?F}q$p`l zpyowG{5+!pTd`}U=TT19)DW;Y2UI?%5Cq&fMVyn)rNpanUTW51-QvLdn(zs)0A^(0_E z;w)?(NK?E{==J>EfeIGHa;#j}6v8%7{nmp`_u%BkaJz^O6L40s)hPAwShCFK={WYc zw4GrZ%pX70A6S!3o+#xfKBj^steCZj%Z=^GNRmnUsVx`+RRbll9XqLrtX_pKlYP3H z>dsenzolVZjb(Q1hCCFGyUi`;2=lIa_3Hg~y53~7`ibTEDa^BMMD2C^NujLz{h zF)5J7F7HliU#7k<)q^tO3~U%Z-{UW0SA&U))$>xdM+p!mxu;=slug?actSHs+S_aZ z^Qf-3*{}?zF)z4h&M=Ma^)L-*p?AR4JHN?AS?Kg`R&v899sNFe?QOA)iW`BE4m;`Z z5BrIztf6pU^?#k)r3lAtvRu(m3JG&CfOzfZ;~rt$AO=vaG^2zHSJ^Z z;f}$1`h-{P3*o;rw#bf84;wc|^JyJ0204#^rC0H3IFC=_ZhZPKJ}_3*=zU!3eGFJB z6+Z=c=y~3YZ0|({{IAD_*b#q1rbhf(`P!Ukb?v$EjaP1S`A*M;k2{|QVm$heDVWGT zspb0o5!274uJpp#^s@L%`n)DSOLf&av%Jc7biK!Vz>XT{^>O80T_3R?z_oGmjVmWW z%M>1y7=?rA-9tF+9b-K|W8HVZCjHQ94C`r&wz+P#m%DcHW&+p-wU33zj12=QERQjH zvGqBlbDD;**);Dt_;c3gJlGf~)c#XU095j4BymH9d)~dw?!Sfdi5tq?sP0}fccH9d zzFYdew?rQXMFVc>g1aQlm^pllbIs%?Z_{CFJW5<&>i(5gT{*~aD02U-1>PMZ3q+&(Qsn-MN8AmUQyowKow|ij z%%+grb{)m*xauR{F5iVc<88#U;};Frmc;PZ`8Z_`S2_GJ^>&;S-O&T=X#5mZn$uBc z&MgH|FFGw6zr4OS9wy)rI!!JD%7mz4dBEu&(M{_Bid}7w%YJK|^I>)DAA?S{W{*Cy zx}`gN`U?K$HnB?j?jXwCY)75VXk^=>&eGG-Qfg7k*h*LvpCE~|0mn#f{P>#o^GlA2 z(h(_e(<8{I&6GtCETsIIl*hYE0AaV)T14ZNX~fGjpYx^m;x>x)7FJyYtk|Pa-Ls%% zR%@r#Hjo?2o<6?1dr>tgRSQZfP;gPL^Il~62erlj!nhhzS{>WK5reNb?HMs4gtgA+ zCielnen@G{4x;HNQen#u4sogDB5fVD8GofS3T7u2nmMZzCoFL5Kl0FNxHw)Bx(m~{7LO@y z8XBv*%#9_v%M+xFYndfjaS4_lN2!d`CAFVt++&sADmI!*;N@yq=KMS`i zUIF$*iI67c*Hm0I-fDZuyt`;P0l=5!^JfyoI4{p?ZBsF4gJ=CkmT!u5zfxQL3SF2o z9tQAc2mROwHc_|_$9rZ^|1N(+)z+PIJTwt3{P>1w&gDh+0&RTmj&ye!!Zk}1k>wj} z37^<+{;82{IR@57M8X>*&dX*`Y}8qldOxZ$e~?;$&6E05b@!`gAtv2)u;$cnV^yPW zH@w}1?qGzc=>vu7s5?Q+*n&LwP%cvMpf-FuE8w8~1|xLu!J*jUW;eluZ_HR4yR{gQdr0jMHb-O!^FrpF6P^1E$?!XYYlE0d1c}hXg`}BCY*0+G%f5&oXKVf z;;52rozE6n;2QL9F9rmm;N3Vc&si7S^f~-LyD2C3$^aDYe5Mp`QIkDC+&(S8{XE3h zfe8R(wJAQIu9LaZPQ6w6qMWD(=6K*n1=rIBU8u2 z+#s)ES=Y1H8>{N{9=GbTzs$};+W|(`X*$Y|pJ|rd?^7wob7KMtpFN)@i)9kJw|6in zt}$4cn9i^-c8^%$jhFsUGM}5(;CizfOlX8yX6l#vsW+>^wrY8oxjvZ-bCe!pHqR~B z-RXvjUC)^38UE=W$WtvBqqMu0N^F5U%Q%cJ%4@gtl2f?F%05?uowd7D0=Qy!mtFaH z;mY5y;mh^?<@Id>M!%TEG6i5T!+8)@(WlGS#Hg;Xy?u0v@AI(3tCjkv}c;u;gvTmxkUOgva_O>5TG+;JtwFprS_ zYHjhsWBCqVPI9ndzx(la4T`s$q3CuwLi8(J4}za0UbCt;XCiS77^Jm{D^VYyaGJQ% zK0PraRh!`S9X2wwP(IL&In>=AEjdCwF`OJAPeFGlA2r(i!7Y{j?^@0*kg1pWyQhPU z8d%-3GyB?s7=5{^Wn71>TiIQJR(yk08}?wtenZLH_)QQ3>ZST)M=`>2VP1vb$k7gp zi-E$+@Xm{273JMEiOUDnw3iH|$@kEAP-w2E!bsOUA$6-_f^-Gr)NTD4aM5i8ni$6@ zOprbhK~p}pebj(}HLqlBdN%_zHdZy-F{JqqMqcY=jQ;G#855W+!Glt@@qJkTRKaHa zas?B>u&I&m`4dpirs_t3yuq%`-l->i_-FH>4jMdZz^u@bC@z=!ezbYJPPzO-7zr2pCzHc zdL`@7*=pu9J&NRZX;RMo)DzSvdbEDC5N3e;n!cwV5+%|7^bq8ql0-GQ)1xJ_oh`P- zbc3?#ToWGhBu^2K_Xh*(K7rd>=cD9Anl5o|da!uwSI_tGhGt0eQ%1|P-_TYe2GaD}M zeoa!XoAVNqYjy-BMjw0B;7#lUMszeI;y?5TT+S$B%Rfsg6A5OYn=MWY?Gm7|#BPH{GE^ugSh-2)TD^P{xs_i%Vc>TV;Jd$%{4_RtKj0(P`lq{?X?hlf?J(G(RV+E^63W0lL)=|JwF&~?5keyK_x$Oi;>d(o{^eHMt_hVB)8$fK+aNg zee&r}{|4=$*f>Xk61b3WhN2NQAYArN|o&MhY_vKK#7t z^2*FPgQ$_h0wS2VD}Hr=bpQMg8@Ywi^(#0p+sRn^!`j1Z}XbUGSL>f3iv6^k)638W+ql9!irg1 z=$)J7bfrF_&nco>Qm@eQyMEZearsd|Nfj5ReWGWludzcz6;yM&$9wa&t* zv$ht0q*;2J2a>erXk+#sa-CSWwFsHo7Db%32nu%T}vQc;Ca>bfN9YSY%z? zE%AMtjF&-38HXn=F-o~du&+6*dqO=fBGhA^-;rZ!RLg5Hm$&Vl3rUPlU`KMG>HpfM zivsJMt>iOX6p3vZG^Raw5A1DL~rAQx!Gb=CT8Od zs#DAckAXD)70q1i^Q(c2&4xmnrAUNy!mOCk6}yiNC!oT*Y~ZTUm$@C3}o6YyWuhqAt} zq4Zf|NohwZD;F8xs-m^bMn2ykQZIiI<<^I79rN?BQ(Q-?DIH(+hzdr-oqB@K}n zDH?b(HPEhf{&wR4K|@Fm5nnP6kSimU&aKVQz5H8 zJ1PEq59bT(TeILig_CXALrwe9Qq>9@s^f#Tp;kdx(ZZ>=lMAV%^Lpmhu_e?9dc(n^ zxs!DigQH(=8aR$KS9cA%n=0GN%+c(#B0A%c7d-2+vQ0dLH+AV*t9BM?)g~-s7H^@L!G61mFbILI~43Euh} zrtq;ch4+;(sO#X!&U5mji7BNpau>#d2^{Wg0!J!m_$KhZ8mXV(F#{Zr9lyp7hl~jf zV_$#?j9;Rk2|Tb=bD2(|*>?oYL8_xRQFtO(k`cgKw3yU_};KV$gbkB~$EJ0I5Yu_6Zg=<9b$tnEhs zv&}oj$DhPiMw8GEF;8D_6`-WApXcd+7$4~CCrDnAxn}=nPLK99_VwUxMq?+7jS+N*cr|0jY;QWpLkLK?`*WmAC z5?9=`8y)z6+f43KgCD-T-X}uOPwYFL2eKZ};kMN?onfZ4&-^K_cz62ycX*eXwL%pH zI^q6!{vYb^ior9AWH0?a>bxG*-`9a8z4Z5=3(hywWWa;~-CrZvlhyQhLNEK1z*n)-mJpQLgedcobm8`$&Ji)>q)KNZ6s)9LyF^fggebzj}OPH2$<(^4O*- zVN@5ZdU2}s&l41>ENy;_0zDYuDS3V{qOH)yi>O+mi>F99298kfZ292HT_Be~y^(RC|4N2p{cAwbz1@KvZNfNdtiaOSO;b170w1 zyHf4nddz!`YJc(7yHV{g>ZRJB*66GDw;moKEu-3ZV(Y+6zTfY~!`_R!!!xS=uytwG zKK_*G@!w}dk5iGLeduwsh@;PbQu#JzPv2zTNgg(Gm7&bv7Ro$}iWmB!wr>e*MFFHQl|?$w&KXm{T0` z)_e?JbT4%EAw#t`t^+?9x>e`h#5R1!!naK93QX)U6h0oDUd1|Fs)IF}1G2-dTbuve zpf8tP3b6ae1)3<_NpNGp71c=92Ufxmm-jt`RGaVUPr z8CcJq$)gn^r*mXG(hz!tS-6D5Jk@rLXC&^C5I=Kcq1K8 zdKUqA(hjw3;NGU2L@39gP4;cIx_Le@3#vpt^vim`Z{JSS z0?k+3w=yYYT7dfAdjAu;*~NPQConq<4S&7=E$()^-hU7;ztq0%z1WX^>n-+U-_EmT zW5~Wu#~FmF%(HJ-(O4dj$-L?)6&S$G+9#{sd|eI$_^xSrsRt zX+-wzb=bEHFj(<)82k2m?Ay^j_U#~j*<;_{DEk(=YR#uO3!#Pe)vbe~&U@IBdh?D} z@sEhcFDZ+VRb4UL^8K__-SmBUywy678wz z0*J!f0F+F?1+}_-7{6Lw4)L2YvdhrsV52u>1vsxUvQKzIZ1h)A_|sJ~vIGBm_>)<0 zQT}A~iw61YC(BEJCR%9iV zc@+6lt#vI_Rd#}R5>k#ej;!{}Ro3S<9oCwSO+J_{9BUa!9m=gum_`R5OFT|SJT}Zz zkx_%g1PV;&*D#R3N_P39neUBeU%T=`n9$w4Xw3#Ga|dHX zG{2?Q0(NmFLN}vR?y3tnqMmlW$8kPG*chViYpizuxuk_^JgJMt;dSbZy+{>I#`mnI zCwqoS*R&08p`L^pEUx_B4A$>dbqlGOXL&4Rp!khis;yjTwXSCh$HfcARqkcA9R>$s zkK+F96a2h3kvp7?gP)I!XN}Vte1pVYG%EVFGP%Q0d6f9+K8rW$F$l2zw9Fa1)-5wD zlT&xKGC9g$nY3D!_|{*Y9G@u6VRh0^M=+EZJ$u28me{lRtDOz2Nk!k<-7KigW!e;g zf0rJBNCrhJug`1Vpvl{VU0}^CqwxU&5H%lTR%LXu=3lV0gkP+y|~S zP5Wq3RE1;(?y(#PXw7CW6|+D%ma)tzW)xAWYEx4`GpcB!5bTv6Iv4}DiG*yF1O?B? zgAY_`9yrY72fN0rr6w&IQ%d}IT4x~32>QW;O8#= zgSgCzHeBX+87|X@zufdC{N)?wo$QwpTxIx688;q(+22?)9)E!#gZyPR9rzmj<)~i# zW%HFiW1H`VJMNm#;PUOoXHHD>nY)9q+!dekt7UCJ&Au}HChQqs8Gdu^ zMMAFt|JmnD_>ak8kl{bc|3COo)$aJuLB06TAQkJwe>hsKH~+a`556A%IpJ&ZpZ=iV zEgyQ6&5mEehwk`FK4ebPN`!vV@MRQ5x*n6!9)7gZ=SMGm4SuwXu_QvHzPu%pH3m-w zDh9r8`NQH*KOYN!nzB3oRP6Dm$~XF5=_-bpnut42nzgy~R^$$tU26_vsPM#b6-%vFwn%8%(&VY=v|4e(lc!=? z^Xq<8z(d?eGg&IiDVg?i zUTbH(oHxJbi3>()q`R>gmWVAic*2_~h23~Lb^9o}Kb-eXa62x^&*UeDE+iP2~^x8!LyW+(u)MHItEsaVx>ljNtvag%m| zN+in#IzBN3_n{-1E-&adnn-&=(@94(zuL&{wq1l5@2}p(85f6%5BQTedUR9wtTz}J%Yh2Uo)N7~HIFD?i>jM`JCC=u@)|8S>0Qh+u~dap z>9)3w(Iv~mH(+L?zZu;&_KAtnJf+rqSW_Mi8Qhn#ydJY=rnA$|0l|4sg=Cr_f6=Ywhib1$$y*W-^mMNIF1&>y7} zG(aBTAN3@6yY)wX2$%Rj^GD5`C&KRQlG>BT#8hObS0v3+QjbfjAmftywqZ`YbV(^H zO(gRrE-432qL7O|E~!;ix+|BI66$1JQoa3AmlihElGM32eqybn!eUh)oFj*n?{^x# zTfdXC68QwQ3%`>L@c&W2)3eaAaXM{x&)2%|W#V51jP&&_{qpxdeTo2~#$Cr|gp8H- zKjB@{&XAs+3;yPd|7YH%J!oxL-lhFBK^*cf{Yj(4!SoYY+5fSFY2cEt=U_TXJIDU- z9ZU~+q~!aUUW9|n$8oMP8Sg zt%QgS3Q-zC5*Eeg=?Y1wz-P7q;d>J$vt!)7=ODn@MLNVl?Ml`25k2=lH(dg0E6ic* zvevwY0{rspop+$>5O-Q3$u?A?5c8Pg^AD{=6!kgp;6IA@f6`!kroLqr{pz!3?Ik^` z7sy+x?mtsJrS(05!}LyjYSLSf@Fi$PYuYIyS#r^?@lUQJjhf2GHV*3O(8*hbjE18e z?`-m;M6(xrfk#r6VjH##%Iv=wl7^ai` zbpj|_nAw-al9N0CKqmAhX(?b6K9l4R46GSU@_LUqNu$v1mE5`yp8!@a1AGP_i+Y0p zTdHn3gU&QHt8RASb~at=rHDC455ii%Xf&=Fm>C{mYGiH=a%zIt6SXc>@g`VrcUjEw z6Sjm?&zM?MfAW4F_I@4=if7Raz+yL-j1L?DX8*gdu2wEoHUaB&@3haY2ED=fmZ}%( zG{Z(}s26BYca^m0H5pp3ls{>*R?tz4TdIDnqFS<)Lp!7C?rTP3sK-z7#<1$ZTP3~L zIX1nE&oNt;gAK_YpL*2ByK3C#Jztx~Q9h;LHJH$6g9@6p8Mdr)Km|@b^0Eff4ux=2!58khO=bNc%@JQ$($KZpZif&tH7F z8EYm#j;F8Ydzf9Cdj3*7aQ@KrGMeK9mVz{01!|7gh5c&RG$I64C-F4uERqr5hH9Vh zneyKCU9{WoAF3*WhF3Qeq5-@vW=!2_1WcF6^qy}_(E>M@A*5b#9~edR@t)>|Z~fq< zMuJtCNg%&io)3j|FU<2iH`1#Yfx306ZUYz5Ois0}IoP(OgN@{2ZQkKuukl;6F7C&_ zQ~|VHhpkXg)ZTKdwNPcqf_K{iy3ho15ER57epoLqN*8}!*hnSv^>avz^P28~>CP}%lNb*h*wATLuAcS>+o@;Fq6dKPOQOW+ zW9`bf8?PprF5w1BiP9M*v?Q`TSzF8r@3fRCJQn{g2T#pCneH`*=sS6A97cryEm#$| z%!QgZ{eGW*L!s_-hVL6F7ps&iLep>(jiMCk8%0Uxc|J^#(0N=n~zEd20R!w);` zXXz9kR?V&WLG}`?^aFH$Ntk4i4zJ2Pb!?SAlB4C9H6LBRi0NA_sCICqTAe^!fZe4y zViVfGd_699MgTR>n-ZIGVOG;HT)CH-{6lN)TinaZ1eI*g2Ya70y4c7eh{#>z9i0cpoH5*-T^W`- zj&FWo%XOCwXf77Nt*y=QnqYLzO@!Nr7L)6mAez7uB zYy&h~=(wA4BV;jw6l;AUc6BS?(L^1LLVT zbxik~3M~xuh|l@nFE-f}JKZZ*7%axrX1TKj)Gn{B!(R(jg8rRu#_&1i!30#pUG1b# zDp!Cz*!#@cGtkBTRcW~@y^6P9P+Dd6)NAv=qU1AJ4j@uCyX&}nm^*^2E}Vj+rIIYL zm!(N%oqDJ$;>Y-)zsl!tLPrQ;knUAbx+mU*TUuB)f88VJ{7 z>yxR51Yz4rkUmWm$T0$4_VN#-#jkNgmd)IKq7F$;KS|v~;qt8*1*s1q%2gXZq9h3? ziEs{5s*f%X+dJH&$sf)2XmV9@0fq#=zD|B1!=5y1^IJv&D0WGPuDvt>q>}`s8}AUq zdiR?!Ead`~yaE|}1n#g&G_GdPgMA;J7@O^JuEr^Le8^nUHOSo8A!7`Gg~pKsxjiQIz|VO(?vHEqx^l_AD(=Elj44<5Lv>6>DH z8V-l#%NFg?> zFVrhY2;uE|_6~f9*QL~Uv>*uU0L6Jf6)bP^vD{EyI-P_15F?Dveex)fCfY{;@Tx_f zouSS`AbnD_a*S<0Gv#NV&i^!R4YlD*!*n@goD}WWgShDkh=@e)0YRZD|CbRF7+J6n z(X!R1eGqo##NpO$k9${BtyvFo1webwnzQ3~DlmxzB=OL#Zy%YZfI?3a$DXFrNPI{q zb8fXx;zI>8_BtaHEQ)XdEjdd#H7tV(^Xg7LWYZGSDdsX-d1on4n!Z;Z+n&=H zs_yP2k3{7w+PmC6j}XGtJ(~6!rYevB-h8`WE?>=MO-V@&e~L7r!-XhQWgb9r9^ADe z*iO623DVe@>v}4wP;Jb<(z@z^I3&Z=)3URu29%Q(>s8}tOwH7#c8GcOE37ptpe8;> zqG@He%4Jk}k;+dSU3tv4JLo{5F|VI9Zi0?TAB zMyEmZU6NZea`s9XqBamVW?=6+1)Wi8=y(-ZQ8BUCFp5ql5;xEs1dter2Q$tCi?oUr zby}?}m?PAMJhXZsnWM0t%EdR4rzm$xZM?mOw~@-#*Se9)do`QW-;Tsv?gbA82j3FB zk+YFTvQ5)y-qJ9>5N!k-doyMlYr1^*4JkY*-H^;e)6gSd(a>Fe8cL5(<4)bDzsXXA zEWg7xGOLfvH>tmq?d&c31q8@=<0)gJ zh+gkv36SITKK9NCR}QccQyoo=&u+OsJFA&`x++quyuBRO?EPDpH=Sz4v1YZX{p^zc zSp3Vj+q#>th;n!qLIBrN#5o|cz{>z*$L}={VT`upT~^*}7-Rm@jjT=H0NB#teqx-b zqhnzp?-c{e87sZItXV5c&5tGuE2DnJarp4w5$8Z*&~6)R{z~ zK!0NK?P$MyKY!e0!~3+wLfxKWSCTYU+Y~Wq_uJYPw%WcBc~yO*%FyJy-1O*7@kp5+ zcf47|KdPJ`bw!ebASwQ_a_yIqkY0e0o{?wGGCtUC3*&ej)x+l{|MO%6=_%%kLK!k??Ux>}VAh`hO+3%PauCj!ps=Vi&_HsV8uJY0xu5>nm~1mo z>`M&AKl7Ro+kCH2jjosH=IePPRJJBycbPN8HzQ5lqdLsnGmZ&VR|2HmF|b3`j~}49Y#;+lU$1okfH7^7?iq~c-?ycJArx(i~b?4s5gDPHBHYGq0rv~-NMt$d7Sg$sh$^U zA<~0uCZ6|w5EB%pjjO;hSPF>dpM4OoF7ggOm%bi9qd{OGF~>4%)(!f|S+29fJ|X8* z8EueZvRVljP{*o0e8HI~;QsM&4?57IU$0YLXUD5yV!XY57jHoYXC+4L z4iV_AKk73kyw3JB6H4u1+VdDD3MtD!dOO@bigN+gqcSQw8jL6v$`^?o8NxP>XGa&u zP>iq?&^$C9t0v8{Mc+42V+}Qe98#~KD`4qcA^^asIc}-gKb17lL=8=Z)x=~GRK2O& zWK0wJOoipln1|{yOF|?OI_Qf4ZVhKZ?hgp*;l;e10CF6l7iaUL!+q&sOde&u&Zrc9 z@WHrD`<-u0yNvFd@=g&)13l!c^GoW1!Q>R&AKbTQ=fu`;ZpR}D5S!9K6eVFc562wJ zatD~x^+YGJ&RhdTzAvRR>^4JfQe7&yPkUS=wHaw0Qj^yJ!fT60Z!Bp@O%ZWcAdg}@ zipK5V3CG)``uPG{U~A#H;%i8b)M+=Jg_ z+B#oDGP2BrUxhV$U~Hk)KG1eXm4GQe683`MTt6dBg$FrI5haW)3kLbQe zq^!|IGW}I|phX+xHL5}RTFgFTif-Uc)NtJ?L^bDd3f}B-BeTdGoSPlx%xLE`?38J5 z`lfEvv0C)Q=U1oq_+5Raf^%kzmsqnqIemEsU-Pnng!4jIbR{2-h=w=<8ThGIkZOcM6WC9+QY^143Ck*9@|v_0=gm#BC%HP$L`UhLBX ztMx3tWzWcfYUkz1U&Q9RZ{c-zD$|CDJ#=oBz>G~%I`WKbfZQZyIIi+WuWd1VQo^>3= zld5AE6OQn;k%V%9;|ihP1ES6j<$f++D?+M^=C6kPk&VLekoygYqVUNM+ENNgxDchp zj@vcH%8#b~A>wR-kumW{AMZ7OHI193o}3Ak`ld;qN~5;(u}-ooeoJ-NMe^U`a8NcP zcom5io7rGlWcuI6DYa1qpb+A)?S)DjvSzPUL>p3L%C@c6>?LfASqX3%41U6e;8C>+ zT#YP$FH*cM!r@hs;(wPfE8j}yZV8>%S3`pEYRLTnDL6u`sn5~?b7};XA=%#=h}KrV zVYM|-o(Tk^@8_75+TRh_$$e67GEUT5W0tmcTWu+LQ zUVJNBiNw2*JKI?i9ZB|-xu0tl-1Hocko@XPGh4)?#VhT^xyV2~cpG!E!y?7_w^rkZ z$>Des>$ZHV8P`6%!%m!&8%a#fPVF&&AnampE+d-Hvd{F*OF>u-bB|&~Vb&hU56%Z(RP;n)W?vShK2*k%vF_GVf#a2cZ0Ol=gz;-woXT{a2t< zgJHJf`^KB2)v~VS0Ae%Ap)Xh6yD49Y+N=O~>SHh!7K9op0RVO@pHnHE4}J+}vq@_E ztSR=QNfl!|qbd1f$%A?ZFV8d8Ls~*=Rl|PMQzb;rnls|q9@zzdX!SlwJMj{uk=3mp zmh!Aq--5Mj2(DN|!(rR;8;Nl;YixfhG%*e&Xj4Qsf+n`%RiI@X(T=QSfrNxR{Rg?^b-s$-Rb0N;|_Y!KpFb&EZ>Tc=nnHRgTTq}=w9cFp_ILy z%r|!{Ag1JNI7bYHbbXX7)vX@${nT>Iqg4oq6S3Y`Pk>Tie;1#hJ} zHl)?CwTSaMJl(QqzP?%CCC27PNjebwfSc;}ijGLv2f23Tilz&c?X8gi$&yacXnVS6LnncU`u-qCf~qSNB_1{5$hh* zmHLbPLAA61kL$E%V@G&RY_yA)(8~BkZlwtzIS3w!yPcJkjgkB}IwFa4Xo2iWOH8bh zDV7LtkHY<3)7?Yim((A1K7t$9=6^6DF{Dy0N1QJ>)(m>Dn|P5_?4(YV$ai-Jc2+c7$pDwDKpmf z5d?IpvRXw;c2>VYHCf39v?0S^b^1GrY{@`fzAUnhx!o8|OztK-&>OWm9vjZU>MB(R zmJuIFD!o*4thtA3mK&jioJnT$C=&bcK@y0yiRSJOBvAxO9qD>Er*`BvB;)CcvxhM+ zXHt{-(%GU+cmL!K;wFN+41xQNA_#Ti!{29O>&s{cyNVyJo%U1xl}=le#KA~~`urNMyu$2!OiYDtHmCLz(pt}d zI4IoSG=grqs)d^EnLB&cQktnn3rVK1ooJ+A>gmS}K=WNXzh*?a0r7+838;`rJ8^^* z4JzarjEpkN-Jr2%C<(VMi_9z=`f?|Gp|R&;ojLrPCBg=qX9mIi8SZ*Nr2KLt;iZc2 z=^8C@d=-Y5JhC45nhW=WyLsD;e04!pV6{rOq&=Z{+Yf>_leuwIghXk4rEb@a zh64Xp7NDV{)CIRq6lk~?K9>Vxrr5{x0))D!iglS{J z0<6K`@cY98Z62Y@-r+@uJ7G^~^!r+uPyg#fpPx{+zrE~ve`1~9x%OZMSdO8tQQGh! zGdtiJEf0J1c} zI?7N_8vj(ed$IY>EJI3JRSoR68r<^fubTIvP?ze{mn9cIy1d_FT{(%CugcgVBfl1${PQ*I5OH-IOjxE*M%|pZO z$D#jxm?t{lBnpkai>C9M^b}r+@Vi`;qxC2+3-ypA@T4&D0k%czN#sU$hZcil>u-rB z&dAn5UW2S#Co<^Bwk`}?nBqff7WHLVIdLCQ)zT=Dr5KN;=9C}Pjj${mx>}@&ghb&g zg>`IOWpg5ioxLh$h1<*3Z@;4oNxk+1BR%c-(Io&Z53fM*`+GCr=ji()!bp0JOSOGY zZMeUcT5_E#T$_4KOHOFVd(cN6xUu& z0J?Qp^nlJ7gC6K61weNn@WG1AnqI1;TQq^%Nd4=h`SZz#n44XTR|!W-G40~74y+QP*ZP-IIoc#i&I-_i{Grxe;4m3U;bmzw7;Q$ZN@i=L*ZlQS3n@t zfGbi;o&}RaA^0S<52pj>QQM)>{C9yoqT`)m6O0=hRvY?!|WIHm*rM zRNJ<7I^I}?3vN}##9P9Xfm+5&j}&i-B&LyYZ8OcG@kfh0Bl+_<&$k?=ZRTzr>b*JF zE9$(P;-D*@ew;jm@sRvY{(;JCr!dW_eSrryU&Q&hz5Ly1@rr2vhtWi?a>s?IzhhQ` zE|aKmx(rYv&Jt-5A0x#UYT9jdIkSw$VOx>nWf5tz)M3tpQ+pdgA5;4h(8mE;JCku9 z1t)GlCN5VKCribjyj*|s-btP${L{o~&NnbEwTU|P>Gv`E*G5M!C*@jXTc^<3YLy8L zI~c@isoU*st39lIhgb)Dc`91Gi6Pi58$v~#>6%qLa(=BbkUoy!P)Hqv`XJ1pA4Nvj zUTx6u4fUtG{kTZ?Yla8Nq+t4;E+**OS8bn=plb86Rwt<-t7ji-_p7zVFZZdB?T>k8 zUnJ~^Esu+nlVx_%lEZg!cyo2Po~zYF*?FFoyx+z6lNxTK~#H4oKAm1}R|o z=@{0@mH;d9hfPXWqJxkDp)EvZR7=k|;6>6XzG64&U%tN}dn>N&bjASb^ z(LMg3R3q7{TUJ19VL)9%BzhVgOe4!ZMCKQtA+@#8f~YKm^HP2}w?2KhYOf zP!q!%uGDbP?kZJCS=B7+x^W|MD&_B&8YsAVS9#qmurEPRw3Xu6uNJAVF2r;w$gLsz ztN@|3Dr0_o!FxJr@uD*#31 z>ZW1wgN~eiWLBavr}CP5t4%PuZ6a#d`hmdfiRUP!V=2@(g^~##1e5{x^f)5UYnl53h4q)&0?<9uNd1In5(CQ%d#fMe9`4bXZ+){0cB|@9dMuU zUUaPtyf9zfeq_XV&uO&g@`72weXKnML;^phAuYC)7yl+Qf(ZoJI~;dr~Ffw!s^ z_rb!_)WZe~!c3IV!c6c9>gM+hD)pJ)P5t^856%3u>I1^@J30quWmV2?s!Y`HWRt*X zweKE4J$`dc*NgK8WW_@h(x2QmQ=jxS-E#%e6wviT_lHtZ6QT2F2cT}Ig_L@UQtqN@{Q0w2>!(izY8|49dId8c{g>n3l3Db;&-k%u zG(Yvi?>gZ(T!SS*ou;@XWm_*H=C_ZvVvsn!8G7{~v(S{CUZ;j_1Z+3Avr9uanmT>E zwT7_is?>1o7OU++cyN5^5l_lK(Ij5+nY4sq`a zrkw|&k5Bf*NyYr!60@@*kNIaAn-Z$6M{ek&B8H#kzILJAvipO5zt7U|)W7{f1eIhAxg|Jd^0M8n&!CledMzm>9fsFl{BZ1M5sbmhE;}-f z6c_YC3WE=i(p?`PUbkk4+V(vvi+wIf=}_br4Ie4#J~-BEc(MT#o6Agx4P%W80%5QJ z>f_(5(?$D_Ch}=;G^bIim_G-43QkYUmk#_IXq4*H^W*+DBG7>(Nwdw#th6M?6scKT z-SKeuB(h9M#rrpYLFvcPg?2BWty#*;3V#8YCD)C9p@FawX);v06*8QJmrdM(4P z=UMln+w6MC0AifV{FpH7TMlM1CAjI>henqB@Y8to-i5o40M6`;+Nn4X1Az*W z;8dCij31xuK}k^vOhhk6@yx$Hc=l1*nFrU3k6Z*$zV;-8$A!3 z#E*h>7-WWE)er0OPY_ez8|^WK<5Dj%y5vEI7DJIe0y4Hl&^=(X76=X+d>Kw!2a1Qf9`oc^S^SLpM18il=p9EfJa;U~w90ijzxvW_;c!K3XVYPR+8YLm zAZz2>+p6oK(lGdy7N8oLLL4>bKb+*@f2ByR&3sgsZjdjh#IBp1#hw#=Vagu}_U)=V zJ5dLq(Pa&z{`S8-_Tpuq47HbkWEZcr=G19d z(MtS6+SIqjnsYv_SdXuz zx8p;$Xz$C}o?o7Lk4;{@2kC;?H5uF3vjM`OMKDlES{|bt?k-#9ktZl1hRD=<#tWgm zTUpp#o0=;=YpV-AFXi@CAKW*Ja((XfJXalV&5m8q56lQ=dllr#WQ6SnxuQ9PB6SAC z?B`HTvXH32nXVbfimryccdpoJxNwn}Y^mAyVGcxy?HJlL9t(btrhU}G$$V-$h@q#D zpr21McyvSF$ct*M%)QL}YL5>BXnBwd{YYOe2z>Pd zU#UlBUZwW=Z&>cj`_T=agNc$0K-cSEAARs6kDr7EB6y+x#6typp-2d? z9?@Ic0)m{%K@NS~g4vW)<70vFnD>oC!!#f^WZD#WVN3i5ac-(eB72(Gv_~_>aG~WG+-L}SR)7d(9+iI)r zTU^AdF5eqIs$==tWcqmuB zU;@9P`r&AW82mWWx)-vK+%84|R_>_m)pl_g-v4PvS{DK9Qan*h4CnG!hcp7S3UVcT zpHr*cyZ)V%mAcjBgMjtOo~6M8O-WgLO6Z7mqvwZtm|WE7`S;!sed;4w!fCPDYdqF0 z6b0!cP=VMBO~8*$Oe&b;O~0DBr_gHxGSG8_@bXj`-f*m{=))VPlgvWj10nH-*p4BD z?HMJ2H7W~U;bEP}(3lGQkbu-L(^Qny8#Xa%abS*&ExrdYI^5=eF-K(}Q=jpC6VB0l zj$&0m8Uk5ZZQBjih4vXL6h&}vIbKK+%Be$yFoA<(GYT%V+SVF?RK0onk^1KMx)V>t z10-ga$2|lR`f!AY=LPPIlT-_2Wjmoq_{feAy;whT;)L!oSD`w7TBPVL*sx*{xMp$D{LpiQkIsTxLNoX9XC&(c!BTYP5y;!72G@b* zXhoaq>f9T-;p73`l(|=PlbWsT3ilGOlheV7=PsjT?#ufl|8RE3J+-Ck19NfG{Ln^S%n!Y( zA5h@_S|J0N16#eoVPUij!k1`{ED$0l#gdXNc|DdhrD;R~hPbgOP zC_u<+9uK+9q{RHtQ+Z%P2NU$Y3ZDnyS20z>VWiF#6cmc|h6_vGp<3_Ne2cNvdy9dI zsuQTm{T^$*smIl;$<%hVsY3cW^Q158^#z~F1YH7`fH5EKth;SufdmV2?s`dZ{wF4~ zsZ%i%XHW`38~Y48(YYqrQb$7#KbQQ{j-@TE!gUsSf~>O3x>b7_sAo%At+v2EBu+$U zfD=_4ADs6VNBbH3RmV0SLbl98t8J$F>g+8Q)vW{IRdgG^gB$|Op~o5QLOXv8MAzuO zP*UlrQ=b=!T^FX@FM-MY(0>gQA<^>ijQ&QO2Du7q=)!RQ8R4GsQ4WQxDQrN9N~x{P ziP2pixfk+#W)Wo1@1%-YRkm8hZeCE+C2|q}>nciLROlk9ylb4D?G6!vuH(NxPPS(4>YaT65JsWXejykK{aoiIemVDXth#<8k z?y=ri$$NOjRP1ZDt!7M`K){`AdPH~glJ}=SS?G4}p@D8sIy^F3NLnPw4$F4K95gRf z8*Z?ycc)oNOTI1N2vgA@lnC2#jZ(rkG4$qvq9HiL1;{jL=)#C3iKfTlsB&lM1l=b> z=bB<5^@?(@B@Aj)lXe2KTF%M|=pDzSG1@dG=-@I-Mm-Sc0WU-w2pKf;gppchZSkwrb?>DL2JosYRnzX|U*RyAMv zXSJOz#u9J!BG9Ev|AddUMJ=}Bkd_@x#(t_KHlr-dYW+kmWFo#gR1x27HWlZVq?b3` z1<$7eFU=WOP*1VM(8VEO3w^f!$n<0A0c9hzQZPoR6Iv3QiCV8UO|UmF50=U?wLp4|8H@peq3A0#l4xw`*HW69v{rbBj#}@&V--Yaew?XUtZ5s z_RgeSOt-)B|Ea$36a?lCZJk|7{8x!_3VVU`cKn7iHZ@wU&mhz6*exVTYkSmOo?KwX z9@G_qu-j?El==nChcJs%;WO*uGu!vE+6q*L=wc0pEP`9;jv)|_jPWzPe#9csF)hFu-m3#>V>MaZ&u+eF%kj_j%-P*l-O^m8+zp4(53 z6nBp2L?x`x#^xBPV5MYCjyJ)+= zg|pQ==5sIam>P@Ug&IjB^xm^LBS9!ll%4RAkozb6djm)ApVd7CjoMEvP;C8nebi|l zwwAQ$mwQtuSShT~{Sy6Bsj1w7Sg#{7bKkjswt`aTY+-;sCOu92HeJSK6*iwszQHhv z|CCrynn)0_Vi&Lj!b9D=jxY(&OO0>Ip8)X3bOKChSM`nNb1#EL@-x%DHAx&mbQ5uX z=nZtsoHo-OeU^#J0$-2sNjPyHTHBvXT2#97!ZNGv1zoYq+_#ZEgN^)Dg)*>U?0+Eu z(rd)Jt26b0H|!^1PKI{c6Y`*cZ=MU5-+Zq>EYn>|?hu>nLvUb~ zJKQLc4EgHo^fkO%fSfAc2{g4wmIyjQ%)n)QrjU7`(VK?d`jNOKLQLvN!J#UTHZenw z497?IoQ*b@7&hSnub^2wE|XPfbO1FPb|;DbWdgPE z>K)3J?TjdKpPTVDdVN=>P@i7EYBFJdjb7h-|CjXoA(F=ma(#P!(|81kI$4-$|4Tso z5xZJE`1k4L5ns2HpZt9HosT+LOWgBz z*QqPArI4l}H`1TR;i{im4!!cA*OoWS1-y2xl^&GBY754gp4)TPRwDFFaQ(PiADra9 zs1JrbkJ5|7y%&#|Iibr^G>m&-i0L+z@SEu#EU`1AAaoC!&e-XJ$V1ao(`{p)MoqWR zxi{Etv(Q?F-|v zKCC(+cGs(SO5R51ARe-yt;i0NyxCjHVU4_LP-(pg|x7&`7k@qHbCuRFBnT^6^5Uq$> z^8NmMo|8NQecyMj?_2B3S~<^c&&-}Zd-m+vvu96%|KxF5-2>1{^tIxSs?vzy@Wj_2QDWqZL=pMez$nB1KNPezuREWZrA-s z++P^`;i{P<`Fv0tv$SVP>7Pb+zB%yONTJ;MRDZm*)a>MSOYF>cmk77-qcYD(6DN|s zw=V7VX%EVyjEQZTU-(PjrdH^%JNe)I*43vpWMfN354}1>8?=>(f8i(2z67&~`3dsV zn1A7%@=GslB*a~>3mZ=8?t5S3#_eRz0iyJ3#^~@_~7hbz^iJ~OZCSr-T;JtpfKWfG@IFJR~a4@*STXlYt~C) z%pF57V(iQ}b0hx#Ets#__#BxXGLR;t^-Svp<0Hs3@A-2!fgG+(!Cg#R^{C5<7bxF#DAo%$fhx{Xe*; zKfN8B=hJDpdu1kD7%-q9PqdyJq^9qzN#^@oRqlGqC7-h?ufN9;x-DNJbFUfTP0nA% zcULBO@r`<%RjDpmcs3WN6a`*#)GN)q#QM+kAep>f%Qwu%T>=^|qWE~lNab~{5xEjp z_f{BbK(w-w9L=nfzkZnJqShe_|1_TL83K`PROs_zb58 z)9NE02zAwgaDtz~$_5~L0|_FT6AbX(aGz$X$NCR|LZ=KD5a;u=*@?y%b^^U60OfF? z0QBz;beGFR#aqvs8h{c@A^^SJfu7$Q0<~eVDgdQFf#-~q4bSN_Ltv77{$RkYLItiu zgQ<{z>hb(kLWA^TWHq1n8*rMn{6Ay!cj1k(6HS&rhzI|1&cL+8D4u&R8U5ftv}!W{ zWZYL;+LkSzmlKKAvTjg#yC(bP>tgfoREJ6qJzV}REgNUg2xRFBO39B>3cR^0-gdrT zn?yf*mAI2NC%l2Y19QC!9Srlde!N)iN?DIv)|<`Oiygl%$ZWX~gpXIn3dDP>sM>Lr z+$`s2ENsHU*18NHra3s_21!;*mb(}$E$e6Rm(5669d)Y1N_Y^OJ9;hVa_hO8ZpYtd zOz^!v6lr4+MKC6;`u6c{6XL$7{jsSc&okTnAM`01ouTP{GQUI?`4Oua++quLerb?- zo79YjHpO)nr01N?Xtde}xm=*g;^n#qCAR%=}R`E+Tzt}=8c69gG{--e0 zd=txvvBETd*^HsQy(H3?O+q%GI1tAsGQMt_h@U*MAfWOZZ*t++pV92NNCjE0C9O%A z4JV6sNEqn&iQO}-#tMe+3zA&V7eZ&g!`An|~8jbH3adS&WTw4K31 zavWh$c&FW40G^?@*}Xy^iiQ`FXYBNUiv2_NW*$?!|Ew_ZalR7q6PJl0AT~pJ6%b^z%2 z($7c7goJI@0;r{kIPnpQspB-vkG(#dyLoQnzteFn43u0ruWoQ8{fNv07((N3Il)8s zcVjk0Umu(vf!B#t)epQrYqOG&ud5LP=`XN(W|L!YmgtfI5rZQkfWg3epTYFVB&%N| zBWLjyY@+pp)P*raIV(-J8vgw+F&yMN(<&8X{E<$L^1^s7i$eTL4jsJiCpLnw_~gJy zPVBmB9#DOP$efB#QOX-Hc@mwFhrR5_( z-q;<_cUX+kOfUvsqa0qCo*D;^T;0rE5vM=Xzuj_{mwdEM8Q>v7!16;Id$Wr5%F20v z=3S20aZJG*?0B|8E(4oE}?fcvVLr-Do0u zh&-)mB33VoKbA0U-bJ72J!Q>6ES)Ih1HQ2k#!D`kCUr~`Ud6F+4rVQnxKFe6DSic} zRjt^?ns2bz`J<%Rk)q{to|E~1=CM5gK7M0y{H?NQp~aeiY~Z%YeucPXe?4~)U!${A zu6`$u@j5l$#}+DTm8}jouWz`(>u9PMg8UJ+Pq;b-9g*Wb!RTr8N1F=!8>i*4cs=Sv z#@xn%s-MkK&|XD=INJq+ci}ll$G$8kZh+;h>fBJ<-q`D^>HfoPI<(>Oz~}{A82wt> zt~pH;IHq1V$XJtA2)cWqhEs+Ga`NgJvD+`lrD%>Yr!t_t%DJm$ry*gS$ThP;Q+1o5 zbboORq(+&M>)j5>oq-4fEj7;gC;iK=yM^5G>9npFwcLG68OY(BXlSy37|8l3U`{HZ1Y%blKcZH!f?BG&x`8Goi= zMR!)+Vf+-q@3tvwU&7<(8kHr9es`QHXwmJP-Ao5rwkE8INIQz%(q@tJyYlxVLLPHR z7xGl1yHM*NI!vqQ{41H?Cv#v#T3EStkiskRQt~FV*&M$*bjqcDU;53oirrrN4e@Qf zt?%F<$EN8mVg(I{*6Oi&D`;I|^07 z&_9hgW$G0MRibAi-;z~V*ee;(tDJ9E0iR4O;%~6(wP>3CE$Cxa<-k#SI z`+059N1}`6|CK1*#$>9gVsP5D(WSI;ykfYa)pDIZ)GEVW_?N&TR$gWb@%_LdELl!=8>SUtO)lNeQgkQ zBL4ziQqj|NnO~5JbH5xh<f(7 zEY*M3mMhRIUv+eol_&kQdO*m~v#Ohm7+bHf{?SH;o$0@E-?Do4Ap)=oZo$yJ8skC< zilIl^{n;C6oi#J_Vg+l`F%mEv$$X}tj{}*Oe#b_3G}1bWC+t7b>DyEl`0G;lg&BLgg8O>;wFHc1>3fR!03k9S}n zhjpaBG`{~I^cLmjG}`?gSUMHT%?f=!04uiKA`a}T<`9?_dS6xx3iPA%7XOdq@(q69;N`^;XQ(dLl{L|UQptU@O& z{TH6gHNa&41(cyR+co5?;lFWRrcj_0vY_{NfgbKaTO>M@`LA7jfP~G>@_u=~TR0_8 zENktYn!>sZL%kXAHg@O5E5838ido|xsyktU@GM`%0&wHKnfuVXzF^dl;mRMz3aA%9vZNCP zMUnJAdVBvrAb%Wo-&vmCO?l8CHj<5w@t``tU58JPZbFM<@}K*YHiGusp_qHdshB4@K7zIWi*4+T{`?>i zO6Fh6B^1$|-33F|ddV4;$tButm#lbUHjKT!VN+VC0{DG!^`J6a`Ukx%y_#MYz3QC< zBZ+7ZxFw>Uhk;@KCA=wLbRdjMD1h`+MUYCmY8W5C!G3E38(=0xdc=kUp#@QqN^Y7+rehmKvQ~S6ezk&vmX8o7$ zSKsGVYe)1aqYuy?z|M~7xxt-(;MpfoCZH;X9iI!1_z8E`6ZzaQTf3 zA9}Is_H+(!RncLizLg^LVf}83#4FZpQa5e6)7JO3at}cn`tt|LBwe0g#3go9JJW%y z1wk)sERR>*phQ>i%AT%^EM0y(o<~fn8uoO{_Siwo3;*%}Zn$?S>Cpf&hy0H^ZR1|a z{C5tePb?~F0`C!Pm_YqnKtlntzMCGvoqxg=P{N6Gn+Ej|H|ZtJ=;IZ;2e`{Zz=9;( z!bjH&k@C^!a*5rvBHgS{8el5o6|cSNklvX7x!xv+_A{h6HgNDHrrVdj@@OwZxs5HE ziOp$GP>Gd{F`tk{ug32sM;`#;4IC!?<{ zBR2`CB7@kLmc|Xq& zs`jrH_=Z-O9Gn$yIQB-{f9Zr9_q8PlOJ}Oo9kL%s#d}H6G@Aqs)!jqBRI83THbxsB zPeZCmBeG_W3fEuy0pyF9dP2{5yZlM(z_;;gWE+US{F+3qpZ>9w86ua9klAMG7MDM* z>LsC;!+F?j z@S(R%HI&6lxa9diz&Pe5v9R)eWz)mF-^GUOz-=#;-|uEI^}>=iB|)`i5L+0y1qLt0 z-7DLGN=1JioKNU4(KFdPq$ z+(Yi5L7>GyF|3DrNxb6aSM2?8OBcN!vjPoKkVAVUqcSq^v>Q*%oT(X^I*z~eV>sy5 z3y`wo*pBHW2CF6hOJ9iv!O`N2BnyxF0i4S6AZqy=ik_7-bU(dGjQ*Z37q>;$+yW?ZsbH#XV#cX<*9mL#t18h2@V}S=I~PD>~4<{Y&<31FQjw?#w=q>P=Hz z%Jv#w)&~w${-wlP^k3zr|1KsXzU-d;aw=bVJ|_D-j^}vAb+3vGt}8{Ur=_DsW1Q7) zG5!hQ9Qdbl*z8)v8PL;L$NDcchim`PAE+lp4-!HLMq5OM)I#T+s(vGlu!v+PSM3J7 z;?gA-Pkku*)Q{$QTi?bIH$bhyo&r{cr1SX?vjHm^9Zc!+b5-Y3529O|kwqKbQjf6< znb+D4sQ#!yqdlIEd;4<=g$csm7nE7hrM4&T7R6Zuc_#jr|+0-JRhtdEd^Gltu`h0XRt>c z_@*$tAv73x|5TxiKb6>w2JlI$zd+V(=2mt^eWil>%HyAd$KdN9f=7)f*asdI(Er>* zBk<>^LHs=0!I3gc{$ek6hlQ+gE^J15jbxC&$WL>io4||JYDOHAl?pLY$KUNhRVDZ$ z()S?SLFillMFzrj+QTwH9hDpE;kMkXPf`)H@SlCoDhYb^w$5<~eMEGx^Z$5&(eZ#& zLv*KsBK~>^?B@qL*NKVh(_b^d`B%6UYo~-#^i_(*O0iL2A$h$r;V&Th6du(jW~uQ( zuTqs246P(#sz<@__=+BLqicekNsjQqu+P8&UN$!e{}%TBrLPbd-L_6 z8t9r__>7T)wqgev^P5tCpc18`x11azG8jhuBb4P#zPfETxYjkSmpa>QZS#7mB|CGc zWWAN_s4ym?NP49-mSptB@2e+dWk&uB_DIh+hAin zI>Z^DqietL1&LG9F;Le}DCH&sEu&maUymK+C)}H9tu0-_EpYq(A%us;1^72h;KYAr zqeuFQ&%39CJFZvVE3)sf|2dksr?^!^RWiS~-7`{!>}^wIZ{w8b_>;EE+vuBE?(*7< zdfSB!1DHlW?1c{-tq$K;xduE7ZHO;}@rh|kbO>McC#gZ18WxcnMVVGj8_Jly5V5YA z9TMrINR^$~?leCzduuDIF!e!rO+~xI-a4gw0zvPu#0iNh+FS{v-6=6%vDZ3NG{2@> zK*v2U5$1C>B=NL%&qBl4f1DU!LXPCp!X?1MO6*H(EsuMZNB2}uMDe;+dQt{61**k- zHPMT!hLi-`;8M{cC|;tD|15Hb=Wo6VS`>1460FXCUF7W7qL!b-imGM7bR)UI7O_FC zQa*DnyMs%2&6ATTJDx|SDN{$B$*DZiH(qhU^TNEjl7ZddgYA)CQsbXSw8R{(nzFA< z{5ABL;Rk4k^nlJa*jKnO-x6!SUe%?Q%WMRa(GOOx7iOTpUy{uDSSM;#iWD|F)O&=9 zt4wm&ER8(bwKOu;mPY(IbCK_Eeb=fvSr$OC(LTp@>0T7g zfI9=S8%F7ix#PtJY6scKhEn+=gaEtWjUf8DP0j=9EgEXDfyG*U-K7e*!P*9sen~Ir zOH=4e(})$8H9s7@o=$ZN({3-dEa3TqpCWMv>HXJO_-H|$;l$=s^EyzAj`3d^ZvFX= z`vMM?GGH<%5-2lcjFAsEW>QM(3*uNy+Ki!v~ z*IePxTp!BSwhMg5W;;+V#b9@kf0%>%JiL-vNGtnixm-)F>{fDxSBLIY_K(74|5Rl+ zs_c4~>-M`sW$&e2FQ;rWnzSQy3j&053_}u z1j+m>cvqf(DZjC~$66K#xcuH#?~PYHHw4ieYZ<^Nau_tg<$!?C&$au7B~8==*}tC` zH76dm*~BXaEfrYjVRHk#1N6$5$5Q{HQ>e$+(_z+W2$+Sx!gH#{bxZ6My?-3*6G}PD zWLKAa&_aDTXP}lVb(>r;OOl}5J*cITj^Lk8lo(6xO{UkNXT_GZwgR}|l#+w}!}T#0 z-4<4n`l>O`6{}Gul88#&5~Htn_sD9)eq{AL zuxS*gh+pkeeIKiws%ILyEs6h3?E5>x?IO4#4sJ`BItDjZaMuW~ULt38`Z|P$^8jk* zuBl?cDm7tC1rLnLh>N(^U5~ z8ZPA9g*-J?ytGp4T!EJicz@0_>Iy4D7RzLGl+r=!GPI|j!3!BmzujorKZ61L5B?wa z1ik*UEk67#caLk~;(J4>?A^43zmPk)<>{9~bURqw@|!*EL+wSO4^kQYU+^Ir9b(mC zfJ^2V+O3A^WZ@6&9^YteI3w)dP5~RepWQb|gQys8_p_0t*W(R9;dx;JWMwR&am6*$ zj8!L=7}y8Lg;2pH67jDO!0HUFeIEn+^G;w>0x-sWn(KB4)*Mz{jRUFzuqg&M1BnN2 zr=Afi)Vk5&0Ic4?Y8}|oJLUG7kfsWi2DYCAyDZF}*4v&7z}%Rz9o+mrFroiB`YXj> za$T@hC>4F=u))Rwd467B`}XCg5NcyYk539DZYMp6xLt(*qg2Fhd3(gUMX`DRFaguk ze{t&Hjj?alr&RQ+v&FU0Y5gbLaR+GT5r2k+z3+%N@~FRczWilVy_>KRCU}>uZZDS9 zWt|2cFuFbfLyrFOT=Gj6-eH$$N|!|8@9dI)AD4K=tt+kkkI9xU5$Bz0RMA(+1cW{~ zD?sQi&MOc_@wi|Li*_4*A^Yk3;7TGH@@BYHk7YmokyKjw-z$a{`>wMnLko6|AN%KB zWs9Q`e;YR}W#mN~H~UYq&DkIGSD;WA0{_NTv}5-Gg{ME>jwH}yq>(5-(LZHBj5FM_ zNmfSh6$ril<^aItkqF0}j7Smh{g}WjfAdlmH`jyJ{Vaf|H5($w2f_VP!tZ#USW4#KZugqh zpvM{)eBwJ&$_h*cV(Ma#%hM^-HqrKmZkF*jLWyf5X5`?ZM)zJUY z>PY3}sC7XQzUdET_Jt8IE_D1#Ew{+-oQQ7ZjT+ba?R3SWuS7dEX7BaqSmn%%Z8uK^YMzm7}PL4#oDbHXQjFt zmdHO;|GNE~NZ$eS*JU)%hjYRQ)%wD41} z&b8^+Xg&Y5`+0Y_+K~n;5;0lG)eqcO>ZMKuR!9Beaf(|kx5bJbGbXbOQEYSoLcDXg z={4OExHvh%+xosjHxk0{#+r3+)sA?9coQ?&h0sw}x!}k{z0@(CoK?XPUcPF^Su3lD zb^efpA+~28W@%oh=)HLLBZ5DIL;A`V^gdMl!fbD|TzNUMgisfp1;L>s>M@)g_^DJn zhBVC?Vbs7;J+ax}{5(^}3_ozK{|;9?)OX;YiyZ$j(#g-1DpzU(I>npwRnsqTWvaJ9 zjm$QOrANMbLh6>E?-6&Fe(jZRxE5mxEx4Bpq2oQ-9e_+;xu`rjhCdGae4WPP~>T8)0VU)8$-DcR%xk6Q}q)D|GQMuu^Fz+^DNy567 zkusNpIo2$yW^e0dNo=x*aMJI_=)0FS$Ry&s69a=-L!hZG=4kEH)B>|)CT{|&8%?ki{^CU!JK{A{w0jM8qe78lN*AOc?aTLYjTVGSm?oNp1qVf6) zwGFV*wk%OK3fqmf)8OPuqxvjQoX86%&B;o3y;qga=*<+Gv^kOigOZh_`X~Xjlb)X? zK!I);V6$udyT_oIJ5ZH7m|oRGTJ6MdAG-R{;N4wJD-9qq zJ?V`i%hHxLjnT{nl1^d@eW~_r`+vi($w{MHUTyq$SB*PqV$~Q%C~awP93omluu7`k z)-XC*H>zb_!w(beyKN`Xmwh8kTCA&+z$Rs2WUb};jenriW252aB2)KHLc<~t+5kz~ zQiRUcI*^~M9DHZ^cq&9(#J_P@4Y%L?2D)tRZuA}cpP~kTdwWv{e9)ffd-B9l@Yt9Z zf;-=3xOxSOM|5I=(P*7qlxBM6IgKCMdIF6MTY%!*O6rI+2I3qg0xwSn)tfutKQS!m#LH}l|m~o zwxsSN2KD=&WW;XS*jO~O4F;H*8(-5avCbHG!zK`C5J*mgHg9q$Q$FY0PJfw$Uf#=x zUr-W;?BdPoj1+TL(&4D7tV~uim|foKZGBO)b~q81HqU^+@{d#*b{ft`Z^TN@74n9E z#t|=>>lo^O!SZ-aFI?mOS2>{Q&0(1EO zRJc0hx5|Oa^ntsW)fh7gtK!VdC`a)pgwy)QzTlIS|Bn+&lK){NGHX$~2z=;$&1RdZfgok~>+xn6>{A+LccCY-i8GFNs zk1ov?+3AgV!x)jU?VnnBI;;_`> zqC9QW-@>jWo+q|ezuIIk#VmG*tf2_d)Z-Z@UYQZ)UFNOWJTsQ1uFT`nOMI09RB9A% zfv`w)kC}lsnuE1mv;oW{jWmMfi3|;OMPM0hRb+=^^7dj7Nj}2NH9k zX8}xcM;NyQ8jW$sH6{y}Epdzt`@8;=Gd?dpfyUl}n>T$MHxo;GCvHZ@Z82`1sGPGh z?nPs*H(;&It#I=qlW{cTYj=mN3B#$Le>bZ{7U#i#pZ*TW0~drqa4L`ZyE9_Cnk49* zZ37H!)KMX@Jb}Hh4^$Xl0Bq0x46`Nq{KRC)aD=F&Wo@u001(vTJZ)EI_4H6?_&so5 zYmgZU$gI|txqH}6Lo*(KMgYdR2iR}1jQ9`t%GV5Dk95+csc7Vvp$~g2 zr`z~I{KGrwd)FaVyJfZRcIbak!LZ*pCM4^Mo32zJ%n^Xo{@|<=;VezB#gnCuC(8l_ z)bXS-?ry|E%!^3vEc{wr1F!?VmB^lLnoCKFKWd36%v4$xLwbGM2pP) z4huHI(sB4K@p0qDOxe^p5p|N2tehV?!P|;7x@0!7OK&@+ZU_o%piqlCS{O1%+q`#Z+%(`nhR zFEFvrQpWUw{1a$9JEkMOyZC*I^8OZn|0VoR*ks0Z+WEb(f@ciy=l`mm z_rj$={rxT(yF>dX!JqbpM|DdCAWd?#E_ca1K*h^ ze=DvCAM@BcLmXHvmb#3)HxT#9KA8_^et^)-%lupYMqM$_FES-2i;chSRy2oOf^N{W zJjUytX`_6SCY;5e&zfS=mDvNzY*}}o>XBb;p29VKYk#5+aI^YC@-qI*-2$S{Dk&!d zWuAsH;gt{lXU+kUtJmY;`7AdXWJdJ7Y>tmx2_jf{Q@oPDY}doVNRD*U^b20D;T?gqTT0PvWT~n#ZsHct2d9 zbEEsX%f9YX;x7B?V)pbmBL@%;b~S6;$3jF!)wa3Q4*Y)*q7(if)2)vuqj!@sng45k ziJm(5M$t1B{qR8{1N-jvvYF{D&_j9jFF;+x*#!ARzJUJ8!hBsw7C+6JVc_znWoGAX zT&t+`(cfirX?#VN#cl;0dC{7jD?8Y<|7tMkqoaZDLbsOj#mEqtt?fJ-fH4>V_HG}`ZQWrZFjFm*J_$;} zc9N&?NT43^u^~8{?Vk^vCL;s1s=2kdLEU^z2+CGtejGsUA*gjg`Lp$Nk*mvs2Lc+O z4vi@#c6=y(Om+J?^MAkQ$y`xMv#uil0S0{V8)CKC+hNx?OcRXT#D7C60m|t|+b}ec z`_IEmN&^M87$|=u8S?d=siCq5>Fbs+)Gg1viEjBg0{h$Ka}cyQ{^2a~(=^TRroj}` zwvS+^D=zkz`l}U8hq4;Ardw%xK;__)|>9f=s*Qck^8Ou9j^Z!Vx)f_(@zsK;*|NNr> z?}R;LiA(meeNmuH?_@Sh{59~FSvfh7*~BC2EVaqG)=`o--fwu10&hDv zDCK_cBaOS0=9RBWlUSe^flJjyVKhYm;5_#t8NSWnEY}NKv`HVRD@%b{uZH~VVgC`r zbz5%3-I>R`Iip`mHD?iv^u7mYq6KLPayFZ@~f z-U0fX@EpUYKi4uVZ1vMBb5Sre*g<~ZBouqDzd_cCGO@RB+QV8Dy%t6gzvsM&F~FS> zlU<#{UswmBrl@Lf>bgayf%3IW?J0KbN~;eI+s`#t&MLhiH<@g>bH4kazsQ#rV_flfPj3ItwtH=f*iRLU;nQ%Ra zUq+W|P!oQ88-5001`4Es;ENGBwp@FC7VwvLK27)PL4J#USzx(R8p)#5d6iisnpN8J zgr6f0c@DPe)>e1Y=lV$K#6O%O`C2deTAz$o9cA$nN<(Yrg{Sh4mc{SQDaW&fXP*Cj z9m!q!K`o#L_6>S|De{Fuosf0TG8b4^NxbnA{sAJ7rM3nf`OsJJ zW`v(|abN9NPdiRo;g`RO7K0e|3s7WXpRxl(L#gQ=KgzY?*!kZ56f=mw z-#2D_XPAP`ChE;(-uTD694fs~4h7WJzu*(o|M3D%zuG+*!#F$iw+9`+P|2wxnSQ8q zJw2fe$iQY+-apoSr2v!T%i>RYb zeU)yceNO~ioD}`?e)bQs(dA`t4%3vJ$koHNyXXVGCFtO?T-#-2K_u5bsqbh4DLyiN zx@H3N#8~Q|pb%t86v#=@hk^{(dbzGVl=_6bLu74zgT>lfK;(@1BiU2MP-l`yQ^jj{ zqc(HkEDFKyyjZ|S(?D7fZy8>os$!g(=SlVl>xY$MY z8=S?n?UIacTuhXxHk>Is=2+XPvR$%Qw&pSZw01R1?-F+iA?JjDHbP$6yLGNk4qe23 z`6~q9P`7Yngbjj-R|`8JHQPz3-7qSPV0CVPXij$x%r!i*7D(`&)9(B|!>io>j~Vur z7RhF#7=p^=pB=eJ$rK@b@O|?30<1LXBseBbiv9u_?Y5Vhc+9nGYQIjx?o4{Y>KmEX zQYmxf{u}plLV-;cKf}d=%x`L`IX(u(W^Kuth?BImE%-ObpDqk}Q#BQWRsR!fh(IgQ4 zg<41s6qwxojrU^E`6biZS#Yo+lm0n(y!feI{AB>7`@vq2a0uio@fUnfPB;;T_x=@< zyZ;b2F39L6Pj5R}due${*4m^k;h@kNkj;Mu%I{z*j7$`5WEqAf8P^M)$EVno6Mk<{8W<>^X*z zk!+fWRx6D%iWBS5uWX@dt_y1~JB>&9=OTi7_$#EM4{y%ue;slO9C@dDYOHx96$1Ti z(4_p^1ePrP1s7abn-=p~e;9kO)fWkUO@>-q@rv;h@x}U<7(LliMGrzOpwC@Xfp?&% zSBd-@OSQV8Z>!skU5{$ zlAemnz!Di0JPuVOztgYE=9(oC2LFypH!H+f>-_aOJK=#yb(1 z%0Gg8i4#VK=n2Y3Oun6Zszux^#pRh_&R4v{L@B0$xn1eH;QWi`(iC&8DZ1&OA_{;8 zu_LM&mnQ8>jplr~StL(9P~z*F3a-o~zvQ`Tsb;9i*}pSZxH)QU*<1Z$@e9xiv(KOQ zQvja%R|8^UhA!r&yGW+F%@6a&>eB0c2Ids|-;^nn7&u_FIAF8?#2++{UBbUB+03E% zacD=bA-Ko|bcoNY1D$0IsoL4vNI#0bR5~?EAk*a%XFjzEC7d;W@QKMg#v38P$g~I@4u@ z^zMn#v*-Qq7!3+%MBo7WfLE*;S<5}pq*chS5^ z1e3~cey3aAhmswf!qlu?5IsI#`9qhKCBU|ZRW=7lI{dAbSzZFBWX(OcWYVB7R#Y}# zK9Uo**v^u~yiM+gQ4MTMg^dZ^%fUKyUFM9F6mYB8@Yx$R`%3~W9gcn!p5m3p9l}(Zni~@n^nDdMz3iIG@Vml?X zuoT=)hfZ-$Ln08)j!E;E){7-*HZ`bYQdufei-K?k#C-O9_w6nf>5={lcL#}{mSPIb zT$DQTzY2>tugPBT5^KRe4wgHhwc|6fjKcd~*cd{5$W0_nMaPHtITY!`J$!It4^+=& zCTUWIHYT3P2bSikupQg1?At%<#@guopkAb+)k8vx5Tcm#$qiDrJ2l5HSS|p2t11LG zKwwIrtS&h-Fz>&ynRn?AmENIH8IHVJtP~k$_g!e$_dvVYrP*aCw2w7px@DXHg~KPc zR|p?NduR`|Px#c(K42%bl^(R~1GM)S+J^}3p$>(Qj|gRKkw8a<(Pl&mQTt+aMu>Cc ziJ>&6qP7alfHRGZM>(`#92|l)v@bNsEVXY19WtCz83HqED?MnRAE3QSXkV4#=R$|V z5j&x9^&8S>Z<&HVJC{J>VSO@HUGk;d-}jh!bIylOUO!OML^EmdwJYe0ue1#=JDvox zKszNEPq1@%;8ZD@FwvuDk5SjbFvWbujQE&NiF~<0ES*{8jBK-CQg>=n26LVf>gL5W zO9HT7M0dSGqK~a3va%KUb>CO10h+VA$_LAO=`X<$p7f{-b)5Wcw?*Db&LAKH)kBm8 zqc{)6{#G=Qu8gNx&`?b@r-92U-sBEU$(Zm0@+D6k<0(*xY^XLb05g@nST*4dSqG68 z$f4N3qes@F>NM~@#o0V!SD;rN&_l)TR(5Q^`Cig?dia|)RXleibIw@vd+04dcl&*L z$s5~*1o_jDGeBfEq}cYoaNRwC{ml6rvp*CO+VGi{NKI9 z3~1T=`p>B@&%a5J@xzoxjiAMqB7M%V>Ph~()#1LJ@N4FywY7=$wTWkCaJQ3xi)Q3E zEwjDLu@)b7smd%UwW-1*$anKNrn}Y2p@(um4(mdEjuCN4Nj1%q=P&-Z1|PYR;axUK z!9N?4Y9{DyK6d!NwXDBpZ|xty*(tjN1P)Gb=S<(j>!^~Pg&tG0ZesG5b8Y88Wmgj#E70$-x_-f7BwiXE! zTiBtRq=ufg$W^qjaH68`etztgTIRz|HT1OMnROI!|_T@p>oyorJ27_e8jy>Yh0qY2g$SfxaF4EB~Iv*K*7>19bxX%?bd zN1o8#m{3Pd7isZ=Yi0U=Iut{?#i*NbOO}`khQU}ir_2)*h;BO}F{z+t&exb2;P7AY zdt9=1T|xRB(u3+mO>R{F6F+u&Q1|aBI^Ex3vzY%$2rPR)lHPzB&u-RmLr;``vXp=N zU3BAL2SsXPI#9UG#S?cATH{f-{w$5MKV7xW#GY4qH0R$};(7jST;2K!U77 zNy$!Z?p-&@2A_hV=?!QSv!=g7ni;?kBK_sxHzZ zuf36)&&Ha6PZr!Xp2{BBH!;0M_uzNNNYforXM6L6`7S4!znwhU4m3z@BuVUFwn^dw z@ert{WAP29yJ~Dh1QeSQ!h;Q5H;aohKvUzcZZ;beLg81fSv#B@n!CD_bl{v<5eVte z)Yz~>L57_~;*Y~!PR5^m>I)<@Qrge}@zR{f-Nlm27G(kWlaseo;JAQ;#;-=f5UpgxbIcEhJ~yqndDpthn%fpw~0J?Xc(k#W4!VOtfxdS@57Cx>gD_FfIjWQ zwjC|m!PJ%MlV}&m5*lyX_7Z7bo*8Ua8WFTuB<@m+dg7b{iATd^mJ^iVS?afFoX#dq z>O>SR=!@^%`hZ_@86EX{-eo&#aP6jls!N|^z2&?0xx%0B$5zZlm}RBEuOH|L$s&b=e@)lY2YC>a9nyvNSFxq4ZX z*ygo=lJCuVp9fOQ+*|C5JAH~}v`QJx;WbOg^ICbREk6M-+bg)^sO8hotNLO&(OZwV z;%1{3K)ibXN1;5FiGEXRQa31ZZJ;J)cJ<~gcQ4MFQk#2DQ7wA}W==>Bo`A>QPbVZN zBci`ihiE+31*(^_0>4QA(hT({qfDo!RfExKN_JR4C86xvKym9TuQe7YuxaGD#3}C- z)pU+6Foh)ZTUPh(_L5XG_w=IL5o>}f{!N&1I0I7dloAh^U29TT!Is+;1t&h4e8dEG zviJ3kZ_kafxsUsQ0 z@j32nc%UZnjcs{+Y5Luw*EIgeknNG8*R0w^Nl7hFd9~s`|A>lj?F@%f*D-W~BSiFLu^13jShm>Rypwz#U8fO;OZc+Dvh` zbwtuu5AruJ(l*4OUP8}3)fN-zv)%pG^z%8wsE7ZcL`J1#hp8YMml8*OYm3>^W*MW> z7@aKBeNL2@{MA}=Ww&)G6DM?1akpkB>$NqC^ZqL<-nLQHQs@8unZulBWn<@@_7{>~C z3k?@>!1oAvTk*I(+qy6xH@tmwbsnz%S53)lyd=IYZ_kb7v;KqOuS#IujF*3`SrZh| z2SN;%!|%~v631p6jvI?@{$Y)lRV5^X;BNorgK35LV)4tZG7T%3;f^gZg(dSGZs)5y z+k@f`uU!Ah@HZ>J=qRATOsYCnl~Wb}5;Rv=bMn`+0vIgL7lWqcS)U) zLq6m7Tn_;TSFO*C8@{3HixmZ`KCoXIx4$^D6DK=G1&miLZlRH`8CY9Bwk$SpC3#DJ z##-LxF574=zvZEo(r|1T-G6UuIoRR2qMq$n9&SHd@u&TochROMjwtiyyoDdJq<{17 z7FZxPYIiTS#BMc~7#DT3(75LI#@-aUdu+*!^D4hsnbU|oeKD;dFzP$d9?!bm4R^`4Z7}V?)=u5#C_2{!;YRqsj&a}CbhG4 zKf0Jd3DXc@zbOhy0<*TY24E;AfF0t%+H*o+GotHWXuX+rSu81F%&2e_~SN z-=2;jf9i9K0LTgRu>0n2OCUAQ3hNDI)$I|KvN3GEF=y zd2U)N=UY1p_Urs!#J*@P(+K@XeaIFeJ|F)YIR7ii2F->!8Owjbc;s1I;<0%ce+N^x z@LxkG8DmatNWvn2n3Azd6bsQ{H<0$nSt&M4r-=7i+6Jt1w-8t#fej15JmKiKIj|++ zj+rm8t)Qq%I_4Phs^vDeFqE71-?aglW3^rm?53Rx{k=sN2&bX3tIGvI*4*kLhfy%k#YQHL>_5f~He@5og@cP;ebH=#)HTB&Bhn@;L`C@yC-{dM&D}-zL~pv?eU) zq{jL0i*WlG+F375Shs4BCW>CN9|u&fW`f-A=X?9PY2CthP3zLDF&ts(TF%9f;{s@h zqIAn9-St!+n<}PViBi#ca)2qF^httPi0ca^Z1Ohe$=|Dc6bku3X?mWsplJ`)x0bG( zvtWVUcbR6WS$HqhL8{r+e@AwPF(UWyd7-NT0>ygC%ZajAOvH!h;pK97kU=4te}~;8 z8M`+_#Zn2SQt&{|bke4^_r2sbEYEf}ux(e`F+vT|(x3_dk==THJ2h3k;mm;RP@37< znHbmwqc*kKOl6mUn?S*()IX2Cn@SE=nlZv)W$B*<3f@Gxs(yvvSx*}b=3RG{CjReSX8ZOgF$ydH`6YSP5WAnyc1sJQ z6$Hb+>{nGef|ZF@REpZ9M?##D>&K1UIBw*>*~sz)_zKy!z~m>Q#Muxo^QleYelTBC zxckn5u9`{iG(Y+_dZsRi#i@FZMMiS;{D@dc#uoo?>G=R*FV!jkf1u~c{}1T-IxcRl z{^@6b7d`K1h=V^Fai`Lc;7=N_a48OLW;?o6Uz0i#YC=_cBer0>oS~h6M~=`0W)DVo&#_+<#+%@A5y= z1$k2BUA)?I=QDO{BpX>m(%BON`eFrKJ$t`^ejN1bPUR5(oFr!P_n2xqYlNo!>(X{$ zcOT9hU9IMU+7nl2R$>13;%~cSzL#fn=2Kf{F$BQUk{&9FmKc2r8S6U%1J5uNvzc?g zsq=jIV#_`_Dt)|WeTfY&(~Q>#KYA;V)}OdKUHCtK-N=|I8+7~~5aNjP&$6r}gs6M^ z0RRFd{*^B}Ws&fI$=;(@zx5}u@eu%Zi`$;|otZP>|Yl;P;y?3dyMCo4s3l!VuZ2d}%_3VrFTnaBKXXMk2iFbeD-|JgX9 z{^bd$O5wy$)PFj_=~}|ou&lqoNH4E4dSLXpLt!G=iF>}dVUarqIV$mE9NY-axPPR9 zRn+L>Y(6hhH}aWiB&$TCdMo^s+4u<7iv%N{WTaytl&vH+q(3{s3;1|>HiMZhs_8jA z=CqRW`*#Praw>YHfuP}-%jf{kn}*Zr^~8UY#`DpQD#guQh*_}8jg|QQ-D#_ks;^=5 zFA%pik#71>sUY4lp$ug|Z?!=wi20gwSHPWeLcgA&e%+#VaokcLc#3*)zKkxS%&0pc zfj!EB@^>!=k=pZdNYx;o7q6&t>BqSAvn_r8M|Y{FUa@pPvsRK9>1VFr(;6YqpL*5dJ5WliW+G1RyrRJ>cU`3kJ?Shc z2=ni=r)bU`L?9ehk2w6ON%yiECJSG&d$XPmeb??WEBbx0JVAlK_X|yzY!Y|K3w(f- z^(dwTjpp@O9{_FmDl|>7nbocV=)^A2(GK*CtsziTg?kzI* zV&e!Ov^M>M$wg+z{`JpTeQx;Aj>s+fhoe$uS3UmitQU9Zg{WlBlmygYNk-`$Nn=j< zSr&AW{hH=bHt{oy$^C&}4Pt(e zi%R+lY7f8w0lcRdXYs;+4Kk&7&06E1dybH1J^s4of!XIj7n}E#;m9lmmts+-~>s8Av>mB^lH`t-wni&EVWs|3>QZB0yqc2;hRV zc?s6Dj~lK$)ipYrx=9KgW$~dK)|OsJmH2}#LC}Z=whaa?AoB}}#~l(mO6_@-bk^UT z3_-TUbH@DR5oLeTedQ!<>HB|40;J7`uh%C9+^gKbVG;7<$?W&7; za%AS(B|RN&!@pstWHweCu9LQoo zTKxk~g77zI3BLoqJ)!?C{syu-erl-KGC(Ax18YQMq{-71wcS5T=jW~aQXDl#KL!3h z(md5$EYu}td$ixo zk+dD0HI>|v9eIiaKHyR0^)IbiT^#UNC#q0^#EC2H?*)>XC%R;IkNjfuj&b}@syrDE z_yHiRvAuAyX>5cyi=eUH{)lO8NnH|XY;$kaaHL0!A(At^L_p@Q&Z=IYRyfsb(k+3= zOywVMi6M@uUj0IKC`1V z$IoR^z(qZOlke~TIl%I@8@97FcLQN#A`OSFjK0SE9A)rKkO8CT69)TjNa?)8%v_*< zna%D8H*N1sUm`|KRU~-n|8*)n@Gd;yKXN>GObB|806Wn8@6uj-*v|mSx|E(#raAUp zaCL|KB!|A*IYR!wEl;B)npK&jDcA50kE~(Ip-Z{T^h$i4cynEbNm*)a=hl}MOFkAy z_9EGaG~xI5BtR2V{a&7sswu7_qG4yJyg>U`b*>qQ1t4{JHs{S%vGzSjGLJ(Nm|0-S z#K}!x=QIqePF7Atgf`q#ojM_RTzPxLb?I6XrOw%2K5=5K|Ol=IYp= zt0u-4t-$QvJXvIFVVwjO)wY0@##(+NUg~HQ8n)||itOIGT2}bO`I5{}Z>PemSz&En z-OwjqapDv>@LGJl#+P*_@{AAV^bL1A3!Vf6{XhENLZ>2osK|#?Vf7|NLg6sGM;Z4& z$CyS#J`i3Xvt^{cq_e@l-CAi)yMb;An|*hO0sYM@vY_UV~2s zNsyUznNQj*=XqiM(3Wd{37GAND}_)1{*rMHY*&39QY1}>z63!3e$~ag98#_>{RTXT zRe22;7hKmmV?THNv;Q;NihfZLY51W_lggh6k%`qE>{c6n#eYWxh0EMvS=KAd^_jP6 zR1EzG^AvDjg$MBby?LK5;qAD@x~ldM`qU)Pd^vA?a>$0}+$t8QX{YhY-p`Kj=#8?@ zAa=iL(?^$enva-doP13|HrtHI{E`J{mh4?ka~AtGm=dY{li?6bgGK*o%TXB7!zmsb z-Sam`qwws-XjB6j)G0Qo*$!%Qc)nmH-`7Dg;E>m8K>6oB$xp2-{DN_zmNY(@{HNf+ zcfWkPg#U{1boXK1ig6%ecj)gn687*1=?38FviLGFb)<2R__EC+6#7jM;ba9PlsfR{Il52PTh-OP~zv3 zmiWnhNgh3sRh{1Dn;Tyj)r%P#N*VtK20U^s<%QmNL!_b;!cL9*0Oz0ap!D5mYN&pU zR_q#C+)a1&un*kt_DfvWhwSHk__9h#JmAi3O}T3i=@)-8ON}SHs4;+Z$4QImMP-Gr4lX?2;oYn>ulTJAsL7H4?D8{1}8%m7ZXx>ZXeE^@#ph%UMhk zWr43v<@X^j&*qv~dpWBKocw#udCKOn+T`(5c6|{H`^L zf7B-4s(M;&UbW%9RxkIoI@~x8AJ@FKAzG6hkh$l0^dpSvnZ6T}H~>Fj7+66f-niJ~ zKg*j?{-0PJDG;e@x{AmqFSS<1{`f-mg2SDkKWtFH0JSxY|swFAVfhUcoK+Sb*=ZuMSrky}c{D$_*a=}TdhY;_>agv5sQV-hi|)8qNVWh|F? z#qsA!;b{JKZ?)AibyC0AtF!{^Dw}7OZBT98 z2x<>OEpyRG3-Tv4giYl86avt! z@^X(aidP(aE@WuL6n>0uV$J74952z&c_sR{i^-rji5!Ri53OOoIvNb2RW|+LbGy>( z{r@2oon9v|Kh+en-C@)ohd0-_=2sc21K&obil3B9sxvVWmmHQ@vo1!-D)HrrjtdzDj=WGY%H|UmTA@=8SLD6&3ln4OZRT3l zU%9g#l;kYqGo;Gf0wD*>%IH?U2Ji7QJ`#uJ6b@#IH2eVZ@-2>jvBw)qj*LCNy*61n zr8f3ZM{Q2L)RsoIwb6ql%A4I3mE#?y^29S%YN84VCP$ilsUSa9;7mj1I&ofYDtZbu zw&aY-3~5K8Ld9ARq~i38>hkHxreS)Z10~*=j|6}GOe&2enb%0-*pk^)y16sftZ}23 zy0&tyVuBTWx&zH_Y%KmFU^U6Vw%t!3i9Np2%lWz{aff?iWIW8Pn5V+yzZEL&n{X1( zKV%!DeX2LJ+@Le#H)cmT6L7situ@U{ijWw67gd+^_pc;=qej^xw*L%T&|I>a3_V2A zT3zQnBSEx+q(35MWhewx{z?C_a#+u#oNP0}+`R^6WEF5^!b~Y_Gfg#zQv*1?lms0yk z`bc#f>}Q`#+X?EfO?Wwe$4ENm-&j4_6OiUM+xilF{1mkWUWw&Mrff56YMDOWUO2wR zJz+fR3~^u1Qr~Pj1>0b{6E#5N#jQd$c}y{s&sUND8w<7D&wU7YQc2n4Sq(He90R~j1Wp*4;{%Mc!Q{_s(F&rjtf5A`uE!l$Llnbl*{V@g=`U}%& z|N4gvk*ctthn27d(IG@;SrI-K3-G=7oe;k2PX6@)*p%4gZ3g+YgS@ODq>U8{@&X`Z zkE?Kz`4$H@d8Z729Dvc=U51wc>CgHzKa(A_l8-pkLsH$jqPf@WBX>Ic5_ z!nRs#hBqG%H$#7i#h2+&wX7MI0;bweGh{z_%yR1&*6oc*Hvrbv49@`Nzd#H4%UtPe zM}!bH!{fT&SVq4KZ~q;l8Z6~QtG^GYz@{(Z+~FP?TDN{?_FB!ldfMMK1?~J)L0ML7 zrMGdHSdt*3h}4|Z5vj2jXC;#T5UEj?IYSk5_f8bU<^`n1zx8f%@kS^HVC*{M^39v+ zCYr@#0NSky=C~Bm$O1ho}s6f zjkCSj>Fc#*%I*q=0wNPF*Shq}-iT-AKu}<|wqR9qf08s+j5&>pIPW577xiCap)m7F zcy05IAk!CF+gzXdt$*_ZwqKmSI^9b$1^qZk`1FsV@$V52T{IRskg8OR`BUGH-u*v$ z`azaVm-i+r@bt|qcC-h}zrUwF&SaM|sAq0mRZPD^nx0sYSb-4^w=v9b85ck39s-1@ zG;Cb}Lpk8&OhbUBxrZp*1Vh;CoLMBGdIq%uNzpO^v2SP1^kp)-aVkQ?H43E>fdy%l z{|ExzyyS%HUDVJVTmg@K+kKA z0AC`fWg$h9DSTfgA_iu-b??xOOU+gmtA1IHR?7JnxZ`6DOy>X0FcO=j@{cu)q>2`H zVWi4KAZ<-WADd4w1!G8#;Yce!h%m17l9SL8dZWv-;nQn>o4i@J_gk^u2%7I?A}y^Z z58F^b+#sOzs`SyM_ctC%6Ccyn#5?pKda2qE!f2HN`x$Mo{y>PC%K{az@d{;M435g2 z?Lo;sI2nl;rZS7BneeTeF{ZiK(g%#m(?cJGqR+y0y* zuuT5CtLM0z9_7X6nY8(~^%CtDh&3a_(Mhf<_%GL3%Po3JPN%64@e*fH>e=|p+ji52 z@v%h^{+M8MK`efqf!b5wkBmr0MwoP zRqF(b`tO1{glCvbKa=Ps;S8vzesU-w=DD?FZ)R%;DjAq$Vw%hbv27xF!(*}eihe#J zbwe%{U{Y7J_0^j4^|i4R*4Gf6x2FB;qb3Z0_V`r4VHh8aYRb1YR@Ua6RscwB{_|u| zI|6T=wOYd2`f?4uvWAo6CJbLo;DQOb#IV);Y}?JIB>{Q>xQLDoC8f387o&piU7J7` z=WCu)>urJm*D1NC8SNb)Z?z(g)(2cQw41irPUJ?xrO7K!>}v8c@MtB`Pofu|7BqRq zxvt4sINKs6&ryjJ@4zO#*jiC-pk(+GG57bc!l$q{vC1{)&v|I|Z^dUJeW(*5JG3Wj z<&q!pOV<9btl=HU-wW+CYk@kHQ5+3p5B3tUc$}9F)aqoUj#mD%`(|cLhwnDfM{Qu} zHubRU%P+|GRyyZCf-qr4zlFC)1w3G{pmtH_H3V8YHOIsAy@iiY?U$2}A`=+yt_&YvUcSwY9ZYZM7E_(AFTz zO|9Uqc)zxN)>w;L1*Dqa`*Y^m&2EC)Z~uQ@FS5_`%kD3slV;I3$sPH5}jW`?~otP~(X zLU^`rkLIXlrC-vU98*&W9j9c4AQ zWonj$bl+^>8gjqcnQH!@IH)159U&Pt)`z|?tJ!|zL)1$G2>R<5gQ@|-auEWMoy;Bs z(`5^DV1uG`d*?W7(m)@tP0?R-1jDaEdbP`XU{-3`|_qWUGe!hJ( z=ZLNKJ>CrKnu^WB`;(7zY-Tft|Gh|~)S1-ZeQyT0`pv`dm)GyiyKMch=Wgj4s-9eH z^?xz$E9;LeDAI77zg`-zKL4lX8g6cZ7GrI}r2QtNmh?F?6Xk_M)r(v;U7)*U)kSsUYp6eWv&CW%+|6gb5SN`f^{G~ z%idL&w=3-VCa58@ZB1~`$D6G0yTpN z!c%qBffS(ner?MWyrnCwneg}jk;9F}^xQuiaqRThf{?VLAafWppC6Cf8o#TJV}drc zSe`0A(7?*{ZrQ=Ku zkz=^JQn|g;A|-N3RbZGw2pJb*kJZ;qPhbevwO$R{rVB6}8$+uF8`(6?robNCl5yE4MhYD< zs7M%D<8Sfaa?$jGk@mmx6nU`WoLJ?ob0X~)v9DUkslY3042c`+bei-$d|fLwOaMy{ zaph8sz>1@LHhx8}4jVW-Z?|wCFz(f$#N1L`&O&}|~E&vQ2SB^_% znDz0~NIUyF4SXAYn0V6<=25lIL=2!=>%;{EwON%FRFbDoofmxX*fi)=4@3kNAp_%jd1KzWE+8{e~+r2Q$lB#jdf@^72m z^UH3VJVuS%6>0gmO)Aie{Eh>m*hU*4$C zbc7PY%GwUD^VMZvBE@xA+$38fScIk^P62UpEd6jaTy$4VR4U~sj~2!Dv>yjwoWXw zdu{BPG*nO>76d+%%=9*E*#-)>j5Vb>`LTi3LdFvP@gkE~iTmMYUDAUkk}AIX1Q2F2 zU(cDm!m4#rW?!Vu{Ag$mH1zBWo8)W4&akSffAV5x?nk3mdoCG*AX528rABM3RyLhX z0XlSXnT3OD2|B6?ei;+w3g+P_a!}mSm9>fE%DAc$#CeJFD4)LrQ=@!X;m?`;3)Ln5 z^n(Qy5Tsu+@g2`{tA?u}bBX_b%mK^LeT9DrL3REG{Gp0}@15geLuNyMCDZm!|L0{8 z>kR7ZB^FPe-eR$XEPm zL*xd&E_X>pI6d`hx$SS`>J?`7yD2z*S(@{N-g4@rZI#pqeu?g1u_AuQ*R@}s+dc>5 z3jqFcNsHGoX9N4Dxt+z(g~A^;<-cwEUYgDrw0-Q8ac=xZ_{YE_{0Ao`+*Yu%b=5wh zP$g~0tGx-f(&jS?8}GHQCCNR#$-bsOI*q^jN9h^CW4!uK zS9(1oI;C4DtF5aVNM6y}%wKD(g@;u*VB*!yF88G}3x>3I@SUGU{H$!fi@!nb_Xm&k z-{s%m)qb$6eKE-^TD$mbwU^K(>6v)-t}eG-X)>gBINzzgj32to-=Owb@EEUt??~%; zr>TKfkMAp5b?~QEThGIAt9H4|b_Cg|ZyMkEY2asNYYTsaYCD3*c=a_d|7RqC_fEdA zXkEl#tM)D)T(vV@w!6qiefRU7pDun@wyx!`{(0*7UV zd`u*`M9bbC*A{d^N@(0xu!;v)Pg}v-;Mo$^=OnzDc}^Ww;MUOR{n1OpkMYNga0o6@ zYyR4!n8GA^6P#na{4U;kTkPI`Z*SpyCXE(zx`UomOVo4!29oq`vouR;$uw7>)fJ!N z-e$YvGlSyn2vb&1#p{FO)7`h>uE0^Qc+|a(bH(=$iWj-8;u5&Or*?G6-_hmRKFIN? z#&<3;AqQRgWP)|2)4lz}-okHEOkkhkvWlUp?B}ZN376x~L5`s=hY3t7-0>s!l-%KJ z^i+szG_G|8QbB=xH7=)?gaDo@=c>wCAu{N z+^N|<`sHv5P5k`^jfXQd9?p=4!I-|v7i$smXa8EbC_NG{Bs1kR;kdIZI(rsa&?#|Z zvdrsSs{d1Ei=dB4T9Ut81lMRJVbogEY0vXGDvi7ScsAFyj@N3T1z2;NNr|^6CVa(- zE!d6XwaKeCkisFQa}JqQwFd9`q{z3|O-j5vsrB?REt66T4tS*|D6lsYpOnr#Q#7k#cWmL;=V-VuN%u4O&N1J zI7COAMWx=$RE588SM(e^O22sR@6goDE~m={+>K z60A>|W;tCi6X3YIma3^bf#6R$OCAKneqK%PfV7iU!NMCw7VaTBzNPxAN-fh?bwUvr zke<9;#31%Dag!dnub^p2=Ds6N?2nba&S@_)SY{x#4a@z4nF_wpvcbdF{sli!`+EPm z|HKcK7Q_$bbkc50&Z*2HQz7@*_*}=-(%mMG!ep4oZ`;boCAG9#$r+KOywruP(Y6Jx>6p9ZSvo}ckCxZ|^%f01$E;nW$Rn``CiL5c^zO|8Kcy23g0VYKy zR!#s%?6!dDJPqAp2dJHoWmwneHdAoq_~t7!K^_qWC(319J25!GSnYKIMZ+7?n#Lc zyVtZ-@9|BE99H)gF4`*@FmdbS;%!`da&92xnee8bbDR{Fbw8zZ{=^;r=wr10wV^h# z+Ap!k)wPL_{O{N!heXgte}=uRCF&>^^0!P>{C%J$+$qGkEMl;|yh>$p%}qH%>XMf1##O@{aTE*d>iN6w zJsmrc8hSPV*KvSD%u8sBN<;o(uLZ?c#HJUVy)rfprX}2ST8H<27w@^+V60=l{5DRW zx*02CKM0X;D)w6JY(1SRqzv0}t!6G?j&(HuAo9?>GY6cVXr3B*@T8p!I_l0Qvhd8pvlDe^rnfO2 z$ZQy_!!5#Q?M7h}rcKw$hDvO3Qt>yLJ&Cn0CU6xmo&EsUqSF7&$VLD0$l|#S_j&Rm z4k!VK#tJgJWn{_c8O@wnP_qRo2AJUjt4>eREP!Ql=}yC?OQ8J3((mywHt_A5)6_T{ zRyun);8I#^QH{gJ4&NuXd7GBzvqDX~Tf&OiSwRl!&tYp@lTF5=l2oTxgq5?ug{8gH z|LzD>!Iz)UgFYZwQThO3nF;Ho56aY9C95C_zlBQjEy(PC$4=(BXJ=M{;6U* zLKmCW#Rhc|#JM3_3s>&!wMyfKU<{TXE%LuLpKDRYUQlj0cr-eC=HPxOpr9uTw1qmI zvs;&Cw_JD*!+=Z~5H|s85tOSyv4XX@?@B8ml5^j2tg`Cp@4{QI#isJz6U;fSf(%GR z*tO}#+Q@>BtZ~-?FV#`WEJeWkE7+?l7AO+YD*}P5lfX^G6Xvm2Aoep^Ls4B})`q@J zQ?M|UC0TKD*j6B8B&>^H3fjl8=BQH6Lv9PDxS~1+HMzEs0VKDj`J7PGOea;Ds-(H) zYRYM-M45;CS4!tVfDScj__@MD&b@*HuRPpxgk$8WrzQJHd$$1=9JB%58(`#SJV8i6 z5_M0Bmsc`2a3q_CYxb4DBI*KbP>^ehEWJ==3ihijI3R ztJcr*^3Gd(O$?T=&jFcpImFAw-`!sXvJ*gVx?Pf0fUjcY2)9VG+S|C!8}*V`b@^Q+ z%{s(OUS@d`m%ATv1zUu~q~)Ar0TTR6X${ZfG-e7JvqKr+tjyq_3ak?+i9%Kz;mNQo zo?>xi@(*gvW24!(<=ITc?X{rznDIbbP<()XlHp&C(a#?Y4knbW5`96~B|hmIM(0)D z#~9PS^;1_uFv5|}>F7CLCmsdtgcKk#jrP5@mO<(yW4gi8DP0;Od~%aewH zCY?B$H(K_M2l_$2Ef6SPoC81u6@>h#sD1svoymhvG~HlBiw!Gel%?Zg=|pAe7+C%S z#mV#nv$6#9q}?FNrPuH|^JyRWwbaAd25w;=u!cOL`((i~HXM6m#=y^*491$}L_`H9 zMM3cwl@bu?OG+3%Y{Pu0z$ZY!xRMmO^0t#yms*Mwa^b)6c|pjorR_yhE_~cKA*VAi zLW7wwHZWF5FgRoOG;Q{dv~QvM$U~=1JDZ_pXYEUBx8465dyaZ<^jx;p)3{ltmb%`3r+=R7bXQ z>^icY^QW9_gOyF?BW!{}DU$8#%PiaZxvB@f5b~>n+8oRL$Yne4&YarlCH~>N*x#2k~-a!p)I7zQ=1_Z3}4|*VT+##T7e| z1$!7v6u-KU+T85g9H4JK8gN}Z5%Yf1V5DuG8e(87i(F>8&}|GuZKW-I&)3#hbFR9V z477DjoJGbd@H?~Uftao6Fpol+>08#Cd~buZCXJyPflX^@0$grkgVSX8wNOq_;2B+3 zB%P8m1u-{;T$1>#*ppN+s0{ai|HD9TykHw{FTP}F-A*z6>-|b7L|T4`t)~*+k-kud z91;QviD&euT}bg%_{qm|SaAoc^cRXpL51VkC6`*Zk8>G&du5vzWOF0*)h^qze%Y#m zY_tkv|Hx%aLw>M8LREnaBbi-*jwh{I(LdOt{R-no%3XYcZDRXYCIa8$gOv#XmVG ze;U`Ie9fYCEKQQ}MqOTsGlCMpKSr!=ns%BxU^+o|DaJ=L<5NTL+z7w9bx)&~SN^fn z$=6uax<+*-`R7ad*BiCAyyn;({x{JKCP2uDMn>{z3|a7!0X~K-4FY$XG8^DCREZ!X zr{bB$pX;iN>02c>aQaG{y~ybiTSKmYMkc#E5Rh!=?@zb0C$= zLxh}vXCq*w!nL`RhW+WD|MYwkz_|*vI?>F19byZQ0*)dAsPLZKP{~S^Ws((i`xlax= z8>Gue2cH~HU(=`I!6!$wHTv`&KKU`%($&jy5N?P$g{e`ezpN0%yq`f#AR&G5v-#`s z!yXCY=TL{AiU2=Tz=+*eT@;{bfOdQIMNz?4F;q0mFqF)_pkW_j=s>#Gi=nqP@{APm zv%K>cecCSgc)erMYW!Ff>#xee)b)=%)k0(0h3pa~=X;B3s0TWC?=2*>VZ9{M$a z4(IkrR}H)z^+rzs4iv3=Q^!nd5Ua4ec&Q7TwbV{AHu0Q%OvVWu_gmy1=lVSK2>U$~ z>)l?U#!-=nh=Hv7sHv#(xIv8<@ic3Prt^7@MQ+fw5{=J`GwRMpM{#0{mq37c$har2 zV~1+*O1W~DC9ksO^3!?}H`;RfXIon?XS}F4Zx2&&_ONlp`?bB5#{NH43cCo|sub1s z#z#2}vbz{$=nupomlVJtx;Jd=<4a^g^HE9jqLx{nB!nBE$A z>M1Ij!R)7gypL0{m*=CZy#5s_vWMD z@HzZ;bH2sdtBq}aQ+6->h8~`Y=0%@F?m!31^eylo3Cw(3i9FruH7W4 z=jqev@Ok=4gm2JKGTdxGHpx)G&($lp^H?7GJ$8a~wngbLr>D_#_vA1B4{)Cdy8HVx zY#x#iFY$4i8jl1TTByjp|AdXR>JQ_cq(4=BrllYs4?r)a3`af&h^yfcSxaKMEPID= zx4NVL%)}1hOoe|{oMS4PA#nY7CEp>zeVl_kqk#M1`#`6EX+(Az_=cWXkX+g{sAY3O zIpG-mO*z8h{sMg%9X`yyho|d@d4v5}zl8g5 z>NOQU)ACUE0b#1wHZ*ge+k%tz(7yqgq!tv~jSPZ3IWpvk(*PXxf6cNxb?um`YqgzA znhgK!S%c$;`bmVZ(N8kmXg^svexTP>_(jVD9Qy-@?H%Xi-4EsrYGxN6Nn}H(|Le~{ z>mLKP*$1C&f)oD&tVTy?j|`h}rkZAn&xZ<$t!(&Cje8yE)`lL!A+Q8& zm&`i@F$geO$T7CdR;$m*I45+ zwyjl-HeW~w{tw7S#?XiDx&Tg~h8w(QC|tWT>y z69rO*Tu&G)N$;*i(ciUNsMkI{O1v&ivZtkRi&riFm@|mIK~!uj#^oE_$JwW4>eR-e z*=TM%(k*=oPjn%j>xvr!1pXeUi_mMAs7AkFPYnpc%fI)?dHDw~F3)Q`;s4r*ME$;x z|I5Y$>sQ{HB(z&}x=0AY-l#I(AFg-2K6sFd|9zUCS2u;br^)xFSw9EI{M$G#8U8@2 ziSRS}NruA#L~xKbk3beWgnt-hB)Yet!E+88Lac=h1zHNo2jRs3)*K*y{9 zzz?&^iE=WJ;Sl#<@a}J9>v#9t4@arm?lBY|a;r-OO7mL)y?+ zSzv!dSzlIvee-?fAJbMN46?|daN~CBHLCsNgTClVhWFvMr)$YQci(-tohQ32eOPKR z5$hw$S0%zlB(4aD`K#U>mMMAaIH4;uYWeT|3r*0GQ9=3oNBS8B z4K?Z%k5@7YpB8{z)n?%ajEh^hjowGRCSoe^#8uYu_9*h^nIxHTBkb$c6yrt>>^k}3>9GE#(#o^ z!T<}s{FG`d_fr}3+QWIOp;#RLRNbj94Lyw@u$?*dclD&j#1t0I9Gx%E8?CIiH`J}!DJUmB%S zfBH_c#GmelmKcLsj_#$W+2dEM{rniHRCsM+0QBSo#Lum~I)0Xxl+6B$Q%XJ9$)RXy z&$2Ja5O?qxhRTGYN{wtVv7v|QbolH{OYKJ5nGh?kz^I)C_7t&T9=vnT>H{k z$&Fs*_+`#;6JjRPF?=g5)Z{K-T7HrRe1(n~r(cc-F+@WCPx;fm)?WltyB9befYKT@ z5OlP!zI51Pu*+t*#%*9EHhSwX0h}5vSjN2MR6y-LygK=ZD7ljli#sPIHZ1%5kcneg zaBlY4jmtjRcI+1u6Duby^Gha--Efq`t=KnoqqlK$;$an`;IT}b^L-nif{4F8W7L8#&~1 zS)~1+dV~3l>4dbD%%LpCqDsz6?YlF?h=J5X+T!E@F%ir%XpECu<_eP9=Ym>i2x8Sr z6>c_^sh$C=ztj%>Bu8pvL0SLG;LhM8ug5^mCNyOe@GhGaY0OB4KPd=Ud+7dxD!^3h z<3b!0Kx~?9hs7DaAZ0q5RVMzkL66JqKs6_H9}sug>DT*kFHwVA@h>h_@AKs?SzIQd zU?W)h*@wx%aSXN3NmE~`9RmM)og={Sm(%Q z$5e2HI4fBTN#KnN|3&OLDt`OA90PBAf&2LxB*2C<#9ID+dP{|Wcxg^H6Z98@Yz>yJ zd8%bQx?eUcPi+hpPG>}o{rwwUy@UG|xP%0MiGZV&b&maOT>utH)v8GQLcIyN0c>ft z5kdZ0b{cplqR_c#z&G-Rk6tiJeUez|gJlV(zXwkycMUnLkJLHXW;2 z(IUJG0f+W*yQ|vVV?Q_2GcV;nZ4=Ln&viJ?gO*VhBI9~M2r>^P)I}|bra$*|nVfzd z?Na;HYje0X0<)kFPqByXVF$#$FTaJ(dBeI zY`Hc5vsJ}>e{CvU`9;wEOZV-=e;89){_|T;FaXAM=D=wInRlJ;y5kuRPtzMGRP=+h zHON+H+4gqb@#p2#X1!K<|2nk=hDt2&M)qX}tT0@xP)7Y9uW_t^1sJH^s8|6QjI*q$ zI1^TIhV<2M!wP?zLggM@;2)fAA(_hxV?GaXu~V621=KQYzWy)X0ju}r7z)9F(?`A^ z7Z2p?uT*&be}X#q{Ki+|cNDPEu@|q*!HD74166)psacFX0ayAP>a4(Fx%_2;w7aOl z3F_+8Wby08|3_!b=k<4d2DZJSy^P$z!uTWDO7978X9m`-^>QIGkQKGS)3&TAV|vX|59J>=Zk-{>(r1Bar@n z-GTFiqeOopLK?c!s_>WsJD$p!1YFB`Xx*3fng7f=w-4=;#b>F_BLZFtRV~t$%*b;?Ax2>I(YmSO; z{-EQ@nF>$Njma5FX@4w^zFu@qcSGLA7v=Dcy5SEBve6Pa9xvG!Kl%qzFYISJ=NnAG zx)=1~xR>d_4F2nL;P*DZTR~{N7&N>V}L5 zF3ibhy_gtebG?`&iEf?DpPAH~>BY2R{dAhnP&yDp zY6Xt|wN#gWA`G>k4c5j!>-=%(v^9}b56KAYTC0(b1Q2W1JJM}nK@&{O*#MD6{^)z0 z(m}`7N@JRt-NnWgHSV-vf(t%$59j0Y};bx0RMYQMsVV8eJ9^5t7 z_D17~trfPTwL3S&iVllBc;@#%U0%>QI>@%TWk=v0c*zVe;U4o_P45E>xtXygR6QAq zudyCBDoVNSb?YXs$ixN%HT?<0wD!Up>aJ1FR7ZoFNHBj%bvUw`t*kX;&0Lh#|K88s z6sq0}8_D4u|4-(U7MbFY*DYtFY(mrzq5+HPk+vsaajq<<)@N4ILY5H@)Be0tTBHroMCft zq+{a8`-ND{OOh1l$S42Zml-Y|%jZY-PucE|{Pio=8xKR@tM~T_X>^DtK$4ggl>i$? zg-L%3>#j|>oPXMC5;|W69n)h%G!_5+IK>&P3{{0fv={DAz(I?&|0TIhtJKQnXu;92R z;)SazmJ0vtUpZQAUnRsy==AS?2`%3YyMj{5C!;C5bLGM(QCs?6^nv4bfpf6vCixR}1#6g@u&(SM37lq{63FI%)|K z*54xk992W7E1-R)mgi>VUKh!N0rQ3NWJ!hJ-I&v9v`NT6&Ltf9PENw!N;rswPX87T zg-f#@kPGd!4|t*|r9wLp zn%oeYzwHtswfi^9zmFGRY>XDUg}9NXzbRXBOY;aui6xrncQ3>iit7r|tR%XJy#7ZP zm}4s6{-*r^id|G`$ z8_$I4d5cO=PR>ksNQfisO{Ho%7?7yKv{` zuy^_4n6ov+g4Th-I@CiWjOB5}Q5#ne2vD5mIB5CFR7^Mdo0#yma#k{Hxbt2NXp5a@Iyfc8H z*+Bq~1B^X;NwLnFIZ|iMd|w$;9UZDq2)}y303uE={=jUIF-pudy0S%$>YwJEVJE-8pYD-Hryx_bTLf9S&-yzE@49TJv0Ke_gEIYGO=C|KO5YaErLYsoi?&tQ z%(_(TAg?}chr0ziXJvENSx%{@02A)Uri^B}!kB-xUDBtu@)?{{IO)S)Vx|8gyCt>A zVR&S)5}zSCJ-mNc#XTx8EH&)k$M&au3$bw7rdz2@k@-hzss4z{b&>X+`I7#j+Q>k3 z<4rDN~vv;l=3Oq8j1WtB+UTYUz7;iP$vKqkNo!4dmc?_CFYC*QmZ!^EAIr3%{?> z3y!?==L!H;Chj?g2($Nz;H_!hl%}tdwk}@MkL7;3U0;66AF-e3k6~-1m(-{b1Z||o z6#%fu77hD%Da$w;GMy7MV%?y~B&A2BkD?mR7a676;8-U@#}0Ets}mRhm9;3|>seIZ z>iG2+$#H*srdQdbWT3^#JGsH!89MEkP-;bNc!3#oX21o5v6FSoGbdENqOy;4W=5zm zAkB2?D|w;ZOi^_<#$`FE&UPJA=f#(pnrWJ&;=qNvICH3jYj{>&M6>F`8ADl3u&=*0 zb&mSvRb*$&t2q{1sU)lAAX#kh{e`CB z0Y~sY3O*`3beql%H}2~lv&+) zP^Xx-LbpOCZoHj#I<>VCXIO*;6nIDQjWv(#JYEI5UuoSeIcmI)6QF)q?L?{`EFxx# zdG)_|n!b+UDPvB^-%yfkkP3pt;L^pwL>Cx2@!b4wkgfPMmIRZhVcY-Rcw<0^7Id># zsnyvBf0LcOpb<31z&;^A_8Fl^sVQYF=EmY%<~FgN_^K9b?;tP!MM0!(tzOVV?Vs{6 zw(HLVMsOSyi(I>s`*IsuPy#fa2QiWL)LN+f$WZBi^a2S*c6i2s-89M#$3P1C*W(2u zh?AzH3gKjfZDe7q8i{Wz&@H$qiOdwJ|0CZs?6cYIc zRSF5Qi2QB{_Fmg7jjx+x1v!esVG(g+upXYJun<~iXq`>@*BrhdK(!!(|Ui=(}UH+?C*GT{L<8 zFlRdK80Iakmxf>1e_bs z*a-qaR{xov&wD!k?Es^DVZf08Rr?RczOMa{zxS86KO)=yWNSaM>i^pQpr zckdhGzSc2H!GiK@vMF1Bt(18q)%QF2nuFggrh#gxfBiV?`>VOf#f_qA|4+EYXl3Ze z_1^R@!(sQ~eE#$h{=DT1UGTdcX)%4jsa(?X{S|br-}#XF{CYlpLkuLH$V-LjAVD;O zm}1t4a5U5+dGUn7GGavO6+I%UP#Qx?F;Wl}GCR_p&DM5458t?+ggSNGS%d!5EF#!h zNd57hYAcN?_VRF|s~1EV+=w5FZNpFE-qK3_rrdA5`i{Hy4ROc)F;dCI5LGVe0*tX; zAA9#i9=x{HQ{EtO<! zjR+;D-clLgQq)w)3nocM*~o^#pHSj|K-3U;DTATMSj~2`P~^cjgBsK06kV8C5o(&u zuvD51Fa4FFS~WRs1=34e0D=w;^`mT$7nVg97;yXervEfeRl)8jM9B*BG5b#s0tX@z zim$D-PS{BX7;SxA2wtw>KYiD~eras5Y2mvcCj`#_U@SRO;Z*M7Pa~8%46gL1hX(<# zap^Htma%+J4sRAKtrkMf!G6+=!i8J;;NIY_SP zv{RxsAL%WA>V(s7zWu<(6GiKd?{S{?$lzq83h&%Cp*1%h9^4d8lXA15bFxk1x`0at zD<%Tu%TYnnaJ8Ck{a*G+OFmrdwth<;GZ8lWgBhvSji48;lvDpyWxrmWMLlGO59XP( z#x0;^dP8$DHOpA|%C9wr5kS;M-KbX30{Q}G^430}3s01~47Xa^^23H)d`? z4`UT^N)f64v1|u*m86Qd;m{Iov*1JVXWQv`WPJ!mGL8{@n3faTQv8=%L4>- z_)wu!d=(5^>QeuBc24ScN_}xJDU=v{Gtz9i%cW^AJyS4-Y$6+vj&tKt z9pk$=+0!qatlwl?X+1x%9WJD4JarG?dHPx}$;s#J4g5%NU0$k?*-v3Mywp^I5K!W8 zHlE?ODjY3O>Nz=V!LQ2rDPE`_+~^A)*XIOYX=o&-;QR~r%7KOwVmneF@*!VE8f!Rry!~gEsjV~y@JqCK-CZK(Q0cA1q;j7nbW}R~FjE-p zQ7y=V18Cr4*rzYZZj-!j1~h6O9%@>mW?<*=r!SHiul|6aP}BBYWcik!1ZAfFUepwZ z{D*E4gaMifh6OGbUh?1JKa7@s5yZFrP15q?km^J2#!RZfS_zGD|1jI*07)Yz3?yw@ zk-$dW$mTUZ>(hL?p5Ks0#|jGTpR^=Z24rl}7uBr?pTUck`;_hTjtlAVcco6Acm&q# zWGw6DH`5=VtCBu*7(4xnFaoCjtcH(s^Ai6LmpHXh!ahWcRmBq`A5UV9Te`1WABo>- zAdTZ{uTLB2)TUwuHTv4FuV6q#evAdcFScpgjxF;iK)~*w@;ajFMt0nxW>$uu-Mw7= zKrh431ds9RO=Ju;MJRF~-*jppM};w=tG=Dr8l4HZ%KzI-+FG}&`z`sIm-$@2y2@L( z$&`i$6gSDJO?0s=@0Szmr{7WhcKY``3}*hG70N#N*-L_uKjcGzF@Tr}Sgb&9&i{qP zXV^6TNPOP49_NbB3#gc3`QM_SY#bafNbu>Yy z%=j+^)#bbbMc*9#KP@#l2NI|Ud%a4STBm>ZQjoYzNX*0EoI}7JBg0G?>-_N#*n~Y= zSegj8KD%GY@1%goD*{{n90Chiu!q)%cc#AXKWfO!t1q(P5JwMWVkUx4omfG`7VXCP zklg)7{ct|lxk5r6C%1_gB9oD1bGf|Sw6B-YstdTv+9Gb)^6wn(V)2+L>Hr{7$K}-! z$6JX%H0{_Qu9wxND!cEe?JIt6nlq&zkv=8-=4sBCSu7A$T*3C$b9A_2si=nhxKR|4 zO8kSgEJAbxgD9$oR!T+sr?k{SaWble8JU{<@KkS*=?N*Moc|{C3L(+;0^%I`rqQU9 zpHBZVe1GZRWEp*H_C!B=-A3$@KLWrYLvJ8gaxhr*yc~L+P2G-O5Il!Cfjt-m^}GVWW4MI3rd?aA2d_mDG#*L%>!0sTp-xIY z&y)2YG#HAI3BzEoo#8j%AoZTX3+B%oJru{R3BSlgcUOQ4`}qp^Gc5qTjfoOoniB1H zwif7KWa*o`%{GHLV5P`Xe>cGw&6M5>eCw~zg)bKxv(KTfoCq*`8I@F8FJTYR9B?wc zk+Jp7g46y^y9d2-Cl!cqiZ%|4ZyMDY<|0_Pv|0wA+fMs12vCLoNe@85cl*iPO0jcZ zNS{ZQKtz!b*E)S;(u5$vpMuCAu|Cj48t;b}&1WFNzkE(F3*naD5%W|Le~sJ47jKYG z($>?NG7)rCjjH0b!qXgS9VM-2d(8iwMNcT){Tsm%;KIg8h~l5m+;D5(PvJY~-_gbN zNVqN+!$8%$e`C%R`U**BBCVjii#*Uo4Q?LFL~zcNVdmB8A1B1#m~Aqz zy~u*A9Dbo?uRhBR`Kj=^&AAxZk-WaG=mr;}$dy>(dJGEy0M7Xe*g8-WWxS5Xga{XH z&xYfKaB4sbwtY4@o6NKlJe;VoZZ}=maI>9jYe}Z?(+u*!P|#_2Li9ZO+R?UUjlEj!8`Z<{|&$8{o%cW?co0x{0iR6 z{_uXMd+Yc;qgeP|dEfsA?}bqZ%4Qvet-Gi*5UolV8Oe~{|N8u ztNOt^=Ih|?!@q)eePKU%KS^&L-p{ueyyyJ(f5Y#H{_xIY_xb+?zhU4l>kscSUjpwW zgZH7|{BQ7{Yg^;;^utqZ1^>UmORPY+d0;>MUgvKezqbw&ez*M+c;`&Yw^yk9*jBLs z!?~=~oi(EEYWw-a&vn{F<$3*JcNIGSU}oI^rnU3ad$Cn+&Dtt@$Zw$6Akv2Es@5(V zXo_iO!{9yv+g?WxU#ODtd;MP`0rIPwfhsx z_6>1K=dQYXFA~4XK7MnSBz=znP1GQ2?G)*4IY!e2%xI|8flxwZ(5t~ zz1GJrmG5uad)rd;W~=!~SM%s+b8EJE{?s?G4{E06<7m12Rxfo^C`vt5&&|ek-Te?g za?RiQWb1D2q;|U$qV?_2o0@a&zKct)BRTzDU{DZhdV4)UlNbiAM^L#JVT(#(`c+NR zvFo8~#>?xUf@KS@oxL!J*R;&wUowgW>`${O{rmT@Y&(7{C!2+{oDyWSNrRto*;XH) zlg+%Q6+t$dX1eixviU#Wl|S{a`M)*h6fmE}`DpvhC4@(>gT;6eGW~Dyl1bPvNN82U z{=9VhzhaFdeYLIhf`hxc^ej9$8&~-FXb8NGq*u=1$6T2wWcpu1!rSphD7852n!AHRr7NHaF&U?{{{E#SRxck0X53WQd?SL zQO~u28}*Nw>gJGT(k=8P*r6og@xCNZdVN~F`pspkAM#9molhTm32q>E=u1nm6fNrc zPq6@uS1{F#;#r1Et+Vx;a;DWuunBX{Jr}#)1dlDYX@l z2$<^R2a4H6zUKYv?I!n@IPu~BF_WsG_dixE87MgzqQ}d#xiL~E>B)t1N{}4LS{XuQ&XasIkZDJ*>Sg5Zk zUuzT3bU&_*5p|}vRvcZ(%IAsE%yO&$z9Jsr4kS~f5>H;TNSvj;)nlLKglW$E3St|O zZL(ptfz9FkAL;+)c2pZW$Z%(cU9YPqlttPnshcZfQ9&QCz6`{GZL>~oH>cXIqf6&1 zp=p-c@^*-}Y(r@zT0)azsg*I~K!%$!R(^$~EQVuH?8U!aY^b&gGPDx56BDA{Ocl^? zJYhaX(Q}R4wKR_kHKloMnzyp`O@YI|Zi*OIa1XEbKlu|K;c#|Y(hTmDe@yz{zOJ>i z&C&1}weOp(Q?KBv!#AQ%vt|@?Uv7g_Ss`;~PhSn7taPYVOsHpyxWn@~=Q{{M@Nc~p zI8x!7Q*%UziA%_5)l~_jbLTbU3;#(H{GBmWNv)6N6f+G_&6Le=R%)R91h}3ZD@zd{ zyZG}S{{^JkpGHgmajvROxiJT5gpmJzH6(um4gKrLz70LkB+HL{WkYX0L_;&x&_=vI z{@Z#w!`1iVk8o1?6D(0z` zjm*;h%hc$PU3(MF5e_C~Zd-^}8$|J+As@XP(yw=)0+T=1+R2QNebG2jy}MEkjZi~{ zuA$@)ayn*c+)WLg?Hao4h@4cTS4s`7QtFq|>!t^3Xdg9nKj`*vc2$i$FQ+P-@ctfT zasCMmmHris8t7OLwQ90n;!fT`fo2!tOj@|KJQ`};F0f@wSc$N?H%GFqX?kx(EQ+{k zKW>b1nUPjnV|eZv9=!^g@oUb$TN}HK1G7{De86nF1qG&hC{QN*Fsk`WG=ReV)8ckf zXXyfos(JxuAWvpmn8l-cqU#>Q`P@x?RvF`q|E(ID2CZz-17u)+$=@7#RkLvxjJ7%+ z*?1hR7t?HJ2`%8y4ky)}8dMmWwIDT|BWGt<{aFohTs^xH6CN6>E{0B=#y9E4dLSmES&%LWE9#drqXij%JSvCmHpxAX6&Jw-X{hp_ zZYcgZm!mCPX^;&~N46C%+f@hW)P}fo{#Vv`P`01CZ0q}Fdy#DZ5C_uv$K_Ol6oh7uAT!I28NzEEhN#8Iw2SDnsx$O9${W2wo|I{p@-HpYDs@%~XYlEW zN_(D&7ZZQQvhA_770Em%U{gerZT2HG?AU(yGn6Wc|&`KL|jO$o1O?GIMXS8p-g^V06(0IBI(%y{$pMebf z@tFa3$ft4TZ~%-hU)iD}7!4u+XWLLYMxiaz1-jIRq*WS62BOcX2jdI<%a*e4yIoOZ ztFv9vmT5VxV%jmKqN_-SAo4HH1lzsM3T_LBgf2h5KN$T};n?pmuEd}JdiirUX~zD5 zL2=3MD>%v2fBI4CD>}f{hw94I7q8w~xh{QK5k8R0e_l3bDm?4a9Ed2!eiCW(Lj-S< zeCc1n%l^t6VCC=g)X$$dUFKB&d3{X!W+X3rle#qL8c84Gn8SC4%~W_%kv z5{$iJYHkttzwLk-oohhbdi8k#BRJqgjX#0@EAmekkXNY`-)1mUy3w%~4oy0hgfSKK zl8Z`cUTswR@5n4pg%2N>(_wna`A0z;FgGZ@*NtOE{j$AdV|}o;?68=zmBhVuhxw@^ig*L^e^|1Xkyr$uuGUaz%&txqX9+-I_z!QvGjCg0xXR2QJO;Mxs^GDHV(d*@t(>p%*>xWh}K^wYg*@# z<58b5o1?SG#fZggTPyLe-H6(qy0IwzBEFm@6GV@PiLdMQkGYnXTlfgwd*dx43vLwp z^7Ny+Vv!-Uq`=E?N>sEgAv_E6)S50KmSmhVIS!qPJ5+HdMWMzBIw)qua5_k@IVz;j ztCs+G2V_gbZQZ}@Q-S}JYk>M#@b#to{cr#Se)K@bzVHv@Q!;%2J^M+2w0~m!VZtmY z8BAWu8pOd~vih`p_Y2h)JX4eS%v;vOH9G$~w6@@{JZ|SL`^R=Q<)76ih8=2IRuN-a z%QaP1Ya^*Ut-9(xNbp*FLXaY|@Yj5+O)U&TOS{Bi(~-5KRx0Gb!% z8VuiMn%Utvk3Z&o58N_*%df%kpA(ORi1f5*jEp?kq1`mNpgTJC(6+jm{k(tARg86sEP?aeuciGGwO^$6i%85G-xb-GdtA%9U&bdsMBtQ@gOZ^| zLD0INycaxX(MZlB-$-!3D`;_6It6iuTCg`EIF0R+(M00~`vPbw=Jcf61ZgGyk6Ek` z5i3w{oHSId{`5iyaDd2S+*I5d&Vo+q6s<&k8Ek8?M~O|BC}{xgAe9V zmbnwz`Ry#6Y=tyZrUihgyd!dZ6zQ$R|0S*v^_-eW?7puT2LJAd#5n){35@e~=gZ6) zo6kScWMo;6hJ#;1{u;9tGQ8s7OvT+xvP8|Xzuw_(j|V-+1ImG18?emY

|&cdT?rRg53&<7t7bMen8s?a7WjJ+Q3l$Wa>D5I8foC zdwCL7IV~{K3@asi@VC)YM^>!n46**JW5ej!*^z&(VvN|9b!sqV{k<}*&j+lU-L21j zI#r*CO?IEx&Fvn$TJPWGT^W{9Zmr?wW2m@JIG(kWm+}hqJyOD9EUVHMe9fNJ4KUJv zxlC-l_JElfSuy4GiErfanq|2+bEP?~9OLH0r|Lp&xMtY36d=weNKt7Dx?7hsrhaD&%;BxU{>Vs zN&?SpH_Z3K!;COk&v}J{U*gXeZM8`g$v*sQ_ z1-Dp`!zM=VWz1elP861U8+EmSl&Hpp+l9U4y`?RJFId)~!R|+(|B|!#=wCu$U#EZ9 z<@A4G-~P)VbbLNN+`!K^Edne+`dY?qad9xprot=t>Px2|LoHWo<9g0dKZ2IJZ^ze7K4ernNgD){{xeD6VIWq*7RLT0#Lq|i&eEUbg7=e+pa5#0ZGvIaxk z#?Bol6@uR_C9_|^ZH#66*;%tsTQRY4w`N|se~Z^6c-@s@u7rAJwu4mo z@@QXv+FiCOB|r*TnCztdgnrpRHS}bVRpzqA`el2DZ2q9&GLH(Ya;EZv*eHD|TkfY8 z(w9mn8tP6yej^JK;>|o8)j!O^{@|W{VgFtL6o>?NPFPYGuj!Y~u0o`X;D~I*VJh3X z{j#aNf4toak&!_E4P341({iBg2k!x>Kj57v{MQTr_5S5t6~Xwkug2TQa$iavyW6{sr7gseao}hhyRe~yDuMX-=BPSo+$f*baso-J@c-i1EEU^Xak*BQ1 z2l(k(=Rf!{6@LhF{4qg(hs`5y&umSgXRM*)%F%RKY>Zq4R<&Qxt)dF<|2=(Ag>UayzzYgs>}pO`zDfoC zS#IoGotxdTHiGQ_NwjWvY^Z^lYiUr=I$4lKa+%;{Y5yZEVnj{fEoS-IN5Y4YvWq}h z=t{a)2^~t*e(qe(rRFKNBB9OZ8PZ8PM|9v{Wx}FITwAf21=+Qp3*Tr)O<4+(ja@&vEDx zj@3hpb<)l*!8s%TdCWgN=)|o^U0$^h^UNQVEWSczRyR@lA}igrGc!_Z5BcXU*3!UA zJ%_qKwGpbY)K1VTvJK7V7xJ4SV)s*>e%&jMaU0Ox&GN+^YLv_+#I56TUZr7rTvk_s z7XRL#!rd3~q0=AIxA?y;+&3t`kKoziZz>r+KG*ALi+7*AYYA=N&QS*DAb-^*lzlHJ zVT7t$?h-cICa0hcTiLwZB|LC)P6-R-y^4fRe+wu~&p`#4I6jrT_SJ8EnuEQP>puz5 zN)L)xs&;gR-`ySr!QiGcwTiUKS<8LRe=v!eLtbON*B;Y~fL=pQ^D|2aGk9HCAV&JLflXzp;-jqy zTHM%S$WRHJV~2C882Jz|m$dlz{L?6NTX_yT2dU|28Tb9-4^X4^8Uj+)o8N>VZqfSd z5A8#ETJFji3%$_)9g(2eQaZO?uGD)I(Ypi&~*ZT;s74ovi_qr>tlY!0psZ!f+jyv5i;o_^BdEyH2G=#jlkeD&8Y zC*SiUfD#X>U39XBX`XD1wdKVkFM*zJ3t*2rJMM}3u=O=GN&_=w{GihLL+hC<%VtBI z1&%ngskTvZoeS22o3?>9@x>uc+av9q$W4TfOlK}%`dh%W<=i88;sC4&rIxol`^b63Pw==MJnv2W*5{Z zTU2{(vO^WuR{dq}IDPgK_bW$DYW(_m_0!i=QPXxciJ?Jg3~pnhWmeuKoUKovW44ZV z9jC%4ZW+S2!cuhylyOpi;O@oW=C5G1R+r2oVE_-pZ|l9pHEKLweU>#e%1gwp$7JyE zqSUa#-VlKuQ5|2FM+zl?}I_^xoa0$BWm1ykyx62f-M47?4tG67@>%LEM@ zvWU$PpzXJYlMcg4a*?&2x}e9a`b#AK3($#o^2tp^A3w=7d{eyo&({eZ=b;*&lsl3x zIigg(7+GjD(*Soa+M1Qz9BDCIEP0iQ%xOJ|8%<=m?76?l2!johlWFkU3=pnZu9FlS zz<~r;(4o7|aQi*{e+6NR^`0Xl@Z|Mm7CJ#LP-uIYm*UOA#}dnP@#+t+HQIWK@z13< zBScQl=8k^yDDGkO zZjK^rb;w!^$F?yi;E9hVJZ|S66%qe8>7IDA$0K2!daUOW^(|vDkm~ru9in@r{l})L zzEs9drV;eyBC&T(l?h#>eH%D}HD7KMs!jYq*3JaJ%Hrz(3Fc}<(i@a$YC)q$32qIF znpCd_0lg?9?zp3<)ruB15!`RM32=S58Wbv4tGH`j>Mo1b0G6Ou1=I@SR@dkDYDMb; zqUQhooq3+*Nuqt<_w)Jl(cI^G=FH5QbIzPObLPyXl9u8T`hhGAESg)9NPhnX9AyAO7I@JOS#D%B;?vVLf^Y0{4NXtjgadPQxnAXtJ?H zIIuP?bV@3zz4j%$^EsWk^*WG>H)|gZu`Z@Y$1rgBRUU3l53}Yh>U0$P&6{cBnmqwI zeZ(oFMyHIHOga~zEdqO^gV^sMtm~`zhJzhXGe!UC9Etw-eJj$fBpUt?vyrtY!EV+! zp>W&o0o+~UA;L|7xxWd=mH$`ub=ORxRu&3(AlIvHrk~6%RMY(HRMm$B7ef1GeiLsf zu&=S#Rq`1BB0l6^r@M{HJda<=-vUFD6G(Kh$g*1m8~ekJk#4Yyy1^@N+W1&|ZX{uV z5}tGkUo}M%WC8nsatZSrA_)~rXmSau9tr2Vguz}U$4<&|q)XVnM~+$&TxV2&q;W_B z0s%EKF1wD;L^?(7Ng6qz2g?6it+D>-i=kfk`$&Fb|G@##O+41JKU@BOKbfCv2)fn3 z>p?+Sc{Vnm%WAd){SLOYvP zo%e<~|Hei1&BgT1Zt@$SdYW`y7y2!Y-Rt3mV7}U`y%j$aFWElD*^!0G@z1kiZ=>W! zB^9rLM!L43;T<|f1$Sy}hP_jnJ*1EZSLl4l?;twOs`O%4D0@*cM<3}7u0`*WJ@(I+ z$sX}m`Q`Pl@x`4kS4BEdLbbY``B<5`tt-A_l8(-(p9vQ#{r4v-7g8xY@qAzl;=`B4XSM3^BM}A^pz(qjV%J-!lkh%^aCBAT%isnIrGYHw`V+=aBnx& zj*LpF&w`mtFoc?x{&fSD`4j$D{WA^QiU=n3A2JcPc2tH!i^wwhb$GjKv zj!>@byJdm@b(W9!f>CAeJJ`+VqinA}^cPQUv^~v6ffs*|EM6SCFT0Ls@u`0V5%fWY zR5G(i{&=y>8|tqmm+EJik~BZHi>|WB4i{Ghsrvax%c9N3c05vz3~DtEblJyt$+Y#FB`k=AG8Nl{YxIPA>ogD*N}h)n{l^bAZHDJRbMn|k6lW-|B{I7y1{gP zKj-<`XY6$W#{Y7KaZv3{8P#7eAVuss)gjqGRd=(QRU10(fUxU4=&RsWBh&f zX$$*=cEK7C{bJlb;{URcimJfAMlj%Xm+_^mhr40_u5*g2|J8gwGR#4HP|^xOaiM-|M)ML&ZYoMkeL$G2IynjT)jpWhsPki6?DB6!a zmgp@TyR&zs|4WhjLjtf013Sz1?Z<{j)r7g1l^4;yo0t3kmn6z%zeAMk5amu{+kTFo>#d=ac&jP85RtL0A57KC zg5Oup1}f*k_Ew$#a0N2TTU%`6$|_xVa8;Of9PiT#{S^=@#i~%lGhqp@%*AwAz~}J8 zGklQvl%h4b_xShcfaM7k)uEodk1xNbL(t#q)Zc2<-)cZ;Om=$v=Uh*;exvxb9q5pm zMezk|`!KQ|UAwqpd*+ZV%_UjJxn7*(%8;dON8$KJ>aC$(&L>p*;BWH2|1zsl(0$*l zB2>h7Vtf=ssEUpbHSTfj+4L6?Fq>+;Oo9+Hs0&~Yg}qtQ9qL{Ob+kbpDi(f>^!O{N zJktN11u?1;FM&y%^@tlgd&Kq**XMSO6kjS_M|Qz=gTvywO(I~{BeoB~oWup=@2_`@ zfSJT8KTQgI#IA3F={`c&>L;bDqet}X(j%t4Zq4u41Hb!(kuqBQPjvWwxpAao!*5Ce z=J0!*dLicJyGFnaKjo*eenF3zq0V{(vlc(7f6nYkjv=DYjW3Y;;cHgjr_&>;X60-a zRO>kXS7%Rb+b05Moc@pms&$;6=8#*vS$C*s9F*hqX(HYCaLxaO%DZx!aXHFqbW4QO zH4fJ|cZd{koIX|9frZ1hufz4;SOm-{SrdRcO8!pEa@p93T_RvcN#&=oP`4Z?wQ`uy zwfafv)P1F0I6Vi$kP>(9f#0*Di!vIgFK|>U?t$N&0L($zjxG4%K6pow_YaQ_scWUDvxh)TBV!*`zv7Rlk!d%0yR`|!Yj&T((Y0u zz7)x>D3S`NNGd`_!caQhEcg!f)q;%)=1=@Kg86pB<0(k4a*Yfpxb{616?n#V_OCc7 zw>4mhsQ(I#_ZPTQPl`s{824ASsdf9FLF;yE4|OJuVSt^0V4@tyQ0dw1tmqR@&y}^| zHg{JsnTQ>U;$^t4Ld)oE)CoMZ{1L<=`F~)utMck%q~;UJD)Ahbn*RiNV%oIx7phDc zyaugFbu4zE(PgLj4_x8~30yH_HJ?A*a!LrwDS|g`B~NeYeMNEY)lzE>i{zrONM=th zFjCBt2hQxftpre#}LwIPBr_#FzV9vvOwjC2NZ+ zuPEuLl?$Jz`U%D`f89-jV33SGM_=v$uv1R_HDO}*;pudX{GZd`^=jB;X`?k=W5yW9 zjIrFgfVD~OAyF~@$|fEmqGG^7)H>0JXON;}CppohMj_e$ey2Ig8d-8r{iqHCX>DU5 z4-?o)(kDLUNWL?TXgY-7+(iP)#+tGbu^LRx{_?*e0G&hSPuZsyDcZ$86=}vSO+7B$ z%@>c>mbsZdlnE`HugpKRDmBjl+-2D&DBc{=JiVbPJ}o1Gpl#eI1rIc9X0bKitocl8 z-edeF_99#eJu}%j*%m?@PSmzg$ic35|6;9Bfd~^Sc%<-z-sJLsKPmW}I~#%aTW|sU zhZ?AuC3fTvSHeEww`_}C8~HycGXStKUQnR*Ug2BpZ~ndQnlCM=-^tn>G^yVD7r+22 zg9DyzA$QW}FoB6XjmwRqs--Elr*LUX%eov+;1+fBPiHUsK{u04yTeN01ZFmL#24iI z@Y~0qgRWuABUjQw+pcA*x+hlBWI0i&?cqIi?h!~f_N{#gB_)O1)B zQ5(D3uXgw?j(T_vzvF_6>0;owsl#vXkKOUB?tTPp*#7$P=W|!U^}=$|Ho*EvawhBfeMG|4J)AB#xL{7>L;b5gS}CMvD`nx;rGGT z5j|)4O%5uqu!?tf_$~UrJAOxW!7uHG%|mKPcj?{17fU{f0 z-jyf8-reX|QTBG9pG=iL=n`{5hkE(|7Z#>zaX4O-`q%xVOBkLe^yU_^y{qZOkr&IS zg6fiuk#R>qaC6U{4mtm;6QnA`l@#uVU8kC9SG7OrQhX?{`r8ZNlRFH90PAk@n0EL= z+0b7Hz7=65*HTFfA2#eCX@KNLY{6f=s(TCCQs%87F`by%pa$TLObIpp6TZ&n7vPIG z@^b8j{KtO7i6EUmQ5*-uu%J z?OyEki|`xAmM^L5*gD+q>X zYBm1q{cnMS?sNQF#flI^2_z=qHP-0Z6AMJ9lDqj~*+S-EMbg`EMf$3ujqotPrNcA1 zd~4{u-2opNAF)bgt6hBg8ZY+L1qy6z*g_`)H8)vlVzKS|g&GwWG6XlbxG-3G+gz85 zu>UuF@1=JrLWKku<)2yzWkG(gfh@@8Z}pE#=`Hq_H6_q?bEmR?@yFY6S!#5yU&B_t znA)m;x$Q(4TVG==_v@b)nPM}CcUJ}{lED2RW0BV}KlG4SI*jCXY^Mp{MP6Il-HA7f zsx>3A|mNSc(lcC;Z6UN*<+%Rf9tL}`1?)7Vga6KYL30t2X z5j%^N{g95^;*UNSvC9C{F$N)Q6`jgELK}+L+GcuvLBk&5aZ*I+ujH;64g3WaLe*B1 zIckb-RGb|2CI_1q$ibE=)u}g)i`?n}kt~^Hxxc*{hpbWNx&ju^ro(xiAJeJTg%lV> z<2Uol^m8Z%>nRTk2Kk^;i~|u)M5%IeG%CSBv(-^d1a80CNb{m8W;LyLXm$N*94c0w z^sb+$GHBfXtZy)>Sl$r#4}_kbxFtOo)Gm2lH9;v>A^or|W#UZ%`4^L3ulD88|E#c* z{9pXvsA$&1IzA}`?U1MuWoFN?d1BCmN5dc)`5}Y4(BtBv&;n{sfZB{@#i>MQ0-c!? zx)PJ^VGEOx@bsJO)|TN9bqVyRx4N4e?5b7BvJRi=dL}7VFU2UqKm4sI*1p zV0g5J(#xo%#s3I{DmS;=_*NdD+VgyuhHD0D-*+~O{>{~KJ<>i&t%~fD+U8LF^UO{feEy~ z!3|!+Xmg`LL&NPYH!O-x*kOz$Xo>cc+tdIJqIi}Tc(LnvrG0@3RXU_vK89@sEPme0%c%XW)mM!8uN}KB4_fq`@3BX z()6{U3L6^DO01`UM6AU50O((?#JYUqPs#ut&h{5-k@x~PY>$o}47N4k{%((2UtU0r zh4EiQFP0Ja|G9+eM@JI2SHgxz)c?x%LlOMM`7UIXy+1Hv1y9u(p&wU(S z<-;dMa0#*->Hhviz<|eEWN^MjGT!e@$#XoUxg36LsB>=!^J|zSJ?RD}Qtr0WVBbfi zC5~#Svo~wYnQi~Co(;BCZNvb4^+3}!melgfh3|LC|1v<`Dy7yMy1D_ zFR{U_2#Ea7nS>ycqaTlcRI*x7EwVzc=f=JHXLl2a(=PHKesPnF5~_|#zFd$ zo#)82NX<$5+gsYQ+}~|DO)Pm#lCjL+jL)_~O;B~o40K#}x~r-x_W=Fa&m989(L70F zy9y`49j8OJ`jS+lO%L&=ZJ~%6ZLi93rbz5=2|;?^SW>W)Q&s%7mpl!4(wnZ28ceXw z%0`ao)3n|l)|Z*(i$^P96Gy| z-KyER$Qkkjy+9*3(c(;?+hdQ(fRvX1xHabL@6agi=TeAi!Stq zBAjAhIvgzY`_dreV2fBtPvIPhvO6g)Ijt91H!Sz#l#zelUzP;Fi)b$L(FLFQ)N91w zF8VCkWa)3jqJT;-wZbLkIMMvi4hZUWQj;wia;>{cuVfbj<_UqR1JDFZQk>?t1V%@0DfU;h=`Nl4l7^v{ zYys3dmPrf|VoinV#Op5cTFcYe%1?Wvwhcp>aHlYjSFa*rzF5W`7#CscuT91mZDvSc zJx5=u-1qRq+GvDqTq_u4!^nNRNJXW^EkVa_ROe`qU3covs>k|BY{zjTe{n>Zvh!Oh z+8?e(UE6;*s~SAzUbI+@lYLf^Y7^jy_x!>9!?%?V@f=)}HgL?dbuWSNpB$ zlR`hODn*|5Sn3o}gcem3mS-A7;=@1x%9F_>C{kovXG^{UHaU&n7tEk5I@Aku>IxHp zo>kvNhZBkG=nNb<;g5h~uR4k$%=Cl_m8Bw1sitQ1vb=8RuB^zcCekcU?E6)!l*PdM z2E2IZDGWq@%!|q)y&aymc1LvgWorR!{4jTc+ouurx5pD{OtE z>3Pi?8D=z4cB&k)qMVU`jcBLjJ*LS5&hyHl=rrjCB}j||rqd@%p5$99@swa1WSQL} z7-gP4-C1UVI*ZK`2mrG~fZ=$J@|^6HDTe~Kyh`ev(<9a=84CO>?veHR32ua+j`!DM zZ&&@6O8o6ava;l;B#l@6hN~Q)lgQj+2HJf}_B7;bR8q5I)Ab25(0yZ{UX9)ZAoc+d z`p5_wYd3P!yrp+2bL;?$Qgh`Wf-F*IPaluyVn2nDyJ8_nwMA@Um@>u62*>=QDH^R} ze+pB-veeLOA!TWF;m9J9PrF;RdGSDK^RxFGf1xII=`s{`_MaWv{^8A76|pOL_3u0d zz-;WWFzL0axC(DG8g&>6D2bH1yZ#xMe=k!88fw1U@DH-za#Fzmuba%={e#{yaycbH z)L|Z#;)~_amRw-K*aK%%mlczLYH93ud@YnC{HzYh*ue$~-S-z{HgL8< zf7Kc^P;8s~0!qfLz51xAY_F`u5@w28>L)+mOGIL>AmGm#t8Z3B7yqH;E?nP=?Yl0rKKTnu@wdCvM6T_- zNP;X1zt|;QzGJ?JO^uK@#Z(x2iY$vcwzFZbf=4P%g_j3;BwgcwwE8%SrZxW*)GCm(<__a zZY9o*3XI9c+S@E4Q5wl%@dj_Wgw@eA7;L5b84@`EYJUXgKW+lkO&&gDaO$R?ph|_c zWNJeT=DoLhy}&6%rO!8)i<#$6>zS z-&%c_YOC=v1~hZBlG6I3<(zoa5c^!#PyJH|7H!SDS2mN^+Olc1{$ z@!*x6a2Gp*28`iv;hV}Nm#vKdvY~wHx?mJLOOFCQHvqV^RT;+-BvbHv1( z?@s}bsE9z-a- z>oh($(0WYlnh@QWC_4Y);5E68l>lmPYrwHxiZ_N0UYR>wT`Pbo@b~BfGq^SP1HxzI zG}(4fTua$b&d2yMw|(wDlTc70!{2%Kf3+{2;TuRK?b&0#mXY*znXg3@tVWiZXG?mt zY%$yf^*S2`YF~&qo8Y2NDmq+Jb{kP>u^x3S`K3#e9plX84ti_w>M_o!MlU0C zN)bOgR%B@R5opUJI|}bH0tJ4T$C&W?KSD!0eZ~I@!w#PRC3;OpEmiox!r$m0doOyU zv*ol3I~*c*gq|}bb_67s`}erQMt&O^$(YR+_%A;!Q4AGIN^hK2v^oN2fnxUrVAybI z(A5ta*yGW7EgSxnpTfdOqDLMC)2Hv_kJV2~)z3r{ZQ}5|@ta7+hTrZ%#f*nk{N7)z z;z_F_V20l&UGS@Q_!aiRPx-+jj3nwS{Q3*Op#ImRi-e}?w{dHjZ|@h;=-Y{KF%nw* z-`60kCm^*>R)0cX9{?D6rT71YJ*6qL=ggGaWOe;H2&N6a4F}2KR*0?!G=IJ%W7ZLp zprT5~K9ZPXm|SPg<}u=I!PW5o?%#-?5v%6rsEuM{(V;gP5eG&Oqchj{9wfB*H}6A} z_MzIKN!`YywLjmUbYiQy=*M`|qk>^F9+(yN1Dx4Y5DvD7-RdUZI!ylZ-}?*3xRwPr zW68g4(tuK2!694{&e9HbzmS}!#UABBT5MaybwM!6@P}Ro1$4e!7YcZQ8iBqfIsXb7 zu82ku>hMzHQ;jC8qcpMcc^eX1{ONmZe0Bz1H+qJF6zGIBo` z;bu|es+cp}%UAt#QLE4{x|T0PshS{+roREX5NA;}xZh>m zp3cn>*vOr36@MvXbp9o|i=JL7tY`<(7`ExpmQ{}>06>eTmunQsE)Z`1fqb*gLLH3= zyw~jqmgaVlpjYe##7%+W+(Z7DL;A^mhn8}PCM)ZlM>|I?=6uu^{bt>7L?<>?rbx(L zhxaG*kHIUy{RX;^(SllC(tEsex-xk;8_dYeijkQwNf}kk(IN4sYe?fB(?4mnzk;!J z@@z!NE4hRpS~^At>!mjr4qg$5lHjm|)5RloH^Z&4-2df7C27XXtZzX3@JhXm*=Ts> z(W*k`k4`Viz1SPDOjG4tYFpY=X+n_ng61?nr`AEsRk;;0Lb2>-(UnAU6veYl-sH^~ zvg0~Y*Somddqzw2!@a3;#}3a-)!Wd_`bD4g9X|M#5t&6p2d`W7`6j~$w~fdw8@ec0 zI&|>*;hAd$JS;n;&`Tu$P{qkXv61}H%tQETZjUz|0Dj!dmRUP8vl8-stI(gF_?B5~ z$3XIsd=3C!CD&Y6w9_Q#+bFKl2@5tD0!eQ0uwWFqh@^SWkAKHz&e z5qOtpn+Rb4hxvasNm`{NU%a`7g#h-^9r@^R_6%`Jfc|N4S>EFc>ZwNe=vQ1GOW5lD^WY6vfE)SlVb4&A``NwuZ8- zI<(Pbi)(lxoyd)}7C()6aXW5$L4dD?VZbcsuHGXfn)Gz)V#-Za)e z$9mly&}@I+IZKh(+E@dB_hJtu6(-5We-!1#Zg+1t7@e|wvK5a4p@7d9IGZpq;dEt~*%&UEHlIpG9bT1M zUd#=@FNgD~dBvhzmH*b+($R9UmE3oOE0&WGn3inrZ})FO2H1I$5aN*qBk`%f&~>B7 z?L$X*=;%f_^F5T-IXnm5=&&&VYcNKIPnX1@=kWGuFjLVvD4uV$$88Rle+O(y>42?g z3-$E5%15WiZ5ZZzM4SqXq@eD*saLQMFqPQ(Acim9un?5@KWWeoI0_6`?EJg0VElTT zDaVyCjh~aHqJ;ZlXNX6+Nz6YG!&^~>xf6NjQwcwA4zrQ_@V(|c%2Rt#q$ipSg*sDe zU(cR+1SPtjsL6^2+N2Zj@{#LX{1&s`T;BZK$;=F+Zs!EGd256{l_)rfj;kfjbtBY+ zn_o5^Q?__hSj*wO8encVMS}9k{#IxpEixlYC2`HCk%qowFeC2=C@`<=TME*YiEFQT z`^>%FVAK7_rQy7?!!!f}GFu;;Ka+5m%?HjKa2YAt3)^eoi8tx$xNuBOdKXovo^gJq zCJCQTa)~!zU?4|TrxpZB!|lT?YbjLTdVNG@-w3$U!M0ORbFDG2&^Sc?nOPEN+Bt%V z4z+XK|2U#@zMf@*aix|i=petNGW1~ElyT@{8cj>4NF{a%F0Ae@kq59}F_oAz?EiyA z_PZ>Q$kpG4a`sBc)8BZ4IM;T3Xm%eSbU%0Vvvi7Se6uoH$jM!Aa<*k|u4vfN2Nvgw zfc5rzfn+by%HI_q5BiSd0Iv`FKnNLFMl2uZR>BfAPl3PaOcfPq9_NDm76sVS(m^7I z;b`BkR^P6+KJvQBXxL?YQu6DiqU7iU|36Uj1tK@-+beTNf*e14OG$IkxD79G{nGOy znhU0ONLS&h5$QS`=^AHQkgiY8chYsX4Z(kxa`>OrPLMu*h8cD}?K-T+j*9QaVVv|_ zZ_kaObpM-u*fypUn%R%hp-cjRzN$XVi+iTD(BJB>Y%uzVpIRdZg}NsI|GU%_O90VO zryUS)|G=yz9JN(sZfmolK`vo=bVKiU%2DbP)~%1szim$W?F?`}{c`@iG=>m_W%_fJ zUPtq%#ZL~xuHW-3n^Sh1KP^*7>oR}h+`O5lnr|}bTO86V>mB1Y5otvD;?4-%~-!$;)-fPMs`9gDHFcx zFcVI=KX?1o?bRPwMLU0mQQqke=pJt{-?bMwlfcC>X^oNwecnp8Y--yIE*?Xd_s5qB)52ioJ4;)II!p@|+(~i1{s9 z;MnY1EghBc*Uc-LDakS_)f@FHgt`7abQC}MJpVXX49NUa255yW%;Y@ARNDllT*dx` z#ir4ywSt+sp!E;)^bXaHyS%UToq{Un^4;#MbMLWB0mz-JDH+F#gor-)JEu8H^V>SC zf=B>yqrh+1aoSW>s{1*RK>YZ-kh6fsTC>|!w+XI`be1%_C;zJ*VZ~J__lT_Nu^T@= zrgiWmDSp(6A9bAoxDnFfrQ&xA4sPI#Tp)iYrokTi1Wal{xjxiynLEpX(1%-n=J1Bi zi_(b-p&V~sYbu^-eixI5hhjlsqqmWgN?foXT#q;1$&0`Dsp2xjfDDpj_!6JJ$aL#k zM&9Y8DhJpLd*0nFY8?o0x3}!-*LlSHc4wRyDr`tWUe-KyPuw&?U*UHU5Mpf?VKKf(2=W4?|oy-d$x5b3ONaK`D?K~4DIga zXxqHMxlLD?vT2#nAaYxX$g~rg>M)n3F8n7?QiJJ3p;=qMy*xX>olu=x=uFGzTVP*? zORK;+*D51G5c$tK0F&NL%ORY1V(B?+%5LbhsByzlC+(r_^1!m*bhTvYn#-N_a13wO z(*4d1sn!)GDKLqPzc5%wC{=&2z>3(~vV!z&@Y1jeFd#WM!0I~XH#QaDh!=!^+a68M zmNg%szyZ0M6z}rMp>9{X#rJH>2+-T~e{Qi%1I;QI<(|?b7}RuEaNb`XO>5MgPQ5#8 zqSL!Ig4WAOrPfuq41S*Fc70Vb z43DF)S?8KSd(s3*CcVb#N)o3;eTf3iRSbEUyQxq?VWp`J%m!!I+Dy`- zj@uelsQ#%AMHfy|YQt|?`BItsN2Z2sDsju+w5?&UNW0V~bpzL~ZE06WqBB6A_Hlh4 zZjQ@fZeR>nxqj*SSniKJ=6wCA5AQ;1W`ib%J0Ojmyuefz8x17gG8BbV?LcVpj?|=pW zC%$E4znB`Rk*~+$erXYHh!BnH@cjgV4zKB^!z=mT9@|N&+%wi36f^pCmOM7a58P=P zw3u}g`xKCTo7Mhpwb{&Dr{-2mq_*OqD6&=fir3B?W_dbVy`u^2c z;-zm!N;Lf9LB*~QFS_2q#`eI^R|4fb{I+)Zz5mZhX@;Nj0~Ib`e%S(QKWJtX)c>28 zB02h~;q6yR@to5i`MML`-9x@Ep4e5kQi%zBs>jfK#rO==nn1oz=5;C$x*p=;c4B3w zYn)=%(%1Tm$sgm5NDv0@mHT%bN9Vc6f9qEuGl{MdXu(bakpAm|&s%$R!{;rH8y#lm z|A5ct{{^2d96qD|D?YmK0{s-u6;g>&hL1ueUkz@I@qhD6&5lFESKEB!RxNF`d2m-U z+YBY-BqYLC>zsDLr>``Q$qJ1#YlDTH^da{QfdFTq1ECTF$%VJoBobZwv6k(S}ZMB zZ?sJ{1Duab8y{6tI`Pe(RtiJ3O2IC%-wOR&xO(GSp3;d|9N3-)*61sle@h!5)=xU| zuuJ}g7pZc6llisju?_ou$H)EhH{M}8; zI%oNA5ZRg4Y4sNdwsp+q{jLAwB$TO&uH+>JuE{%~c+_y|@~$o6|7#jbD3_t+Z!F>R zHWp<4`R;if&!pV1#oZreXlCb&WPF;#Cz@^%waM%yReWj|)O3Toq?-2zz3;(0t6cs4 zgQqHcY~B|U1!0!S`PZ6Cu{#p|+oVe#n9iRY9Q>^X5!Z{YH$QZl6iRtHg%5KIB|=Xu z1$GqFNkp+>B3ldE>c)aNU92J79~0?touy+Rlxn;W z4m=1BPFk9Jl7cbmHJ4Vez=Wm;s6&ib_k;K$K0_xe5vU_38{|UuA7*x-rSlp3J?6kw z$;4!BaeV4c(BGt2iaA@d!zLQm%^x6Mv&*Gi<@gKBbU*!&-OY;n4SBd@>nf&iOdQ)) zIw%<8fwGKv%OA32Gn1C{=pETFGxJWcTAG^2D~%$ltx;m2fA$(E+_s@L?h`BM+>M*L z`n?dKtx-kkpP6ve4lQE-3p#dm6nAoW+`Ju3*t4+{PjXE5zw9SH7U+FPIT>aC){-i< zg3X)RSf5h@@FiWrO)be*%-etgc&ZZ1s7Y zX63yQS$@0JAD_As&UI}KSjb8{WrY!nn}kifW~^(PqZRFWJ4_i)qfub$ z0kvnksTsYWhUQPw8x`kowI4R^X8e!0Kx6bp9<={$oCrKt1dbfO)3twx{W|F8PWEU1 zY%g)$g7&CJiboM}6vf$25uC80vuD?!m(T-a>IgoWY`xs|Q4T7>V5x>uVVAFo_Z_a& ze+KMQq<*h`&78SMk#?|-X_-+v?nLnx=mPp7l=w?u*M$(F&=_|b26Fh1D(uU1+CUoS z;>$X;3w6Ue7?v&h-l~℘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%0Dkl3 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%0A#HKJ9}!C7wLf01W>g%Yi;V? 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

    Tl*!VA({$FIC=0BDg*ziZM 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%0Aa0ui!d4?FBZIzvz}bZ{9p_|A*_J?@<5a zRQpq2M*7q3jPxhn&WMh*{6CL=>CaC6KOLWxzuKQABmDqY-xqD!ciH5xdpf~e_4_7j ze@aJ>boPk;K;^~#qh|DLU!eM9{5xsTKL5n}ey{ZXgqBkca1z3VERi#VtDe$K*LIFsq_Haw>mwqNvz-2%lg_v!9_S^H^y!VHNHxr3JW zzRvb1biPgJV*;EHbMtHGV}kv>{57qRYxfh(A2R(=_n;p3?T*N4B|f%`KX{b?@KyOk zIt#u5Pr?pI{oC5_^!u|fdFOSbKgaVK>VNaMLoTb=&bL+CN&ki%ua-Xb>r=}AK;nbr zy&RN(+OEuy#MS)ZT5+#b68c6|@%#ho?BmP+{KSX7gxlKx{e8aLw~*WHJf6-or1$-I z5FhV&{sPjmCG|i4(Brc;lIwhmFXX%}_nd9@H=jBm;C>FfDPwErlX3?v8~r(+Q;Me5 z*WUxK^X;VYqDTF;`29Tk^}Bf1YniJ4bAMX?Jk$6>EX&z&39zh4Z6G(Pm)uugq^;YGLH zO?HS^Yec`bpVjAkUhd1Y9kq1-Q#)$!o3*2&TkfvE-R!JJ^cP6K?n9^P|EkEp%ixJW zZ$$s?xL+Es2zy{z-%naQpVXhUe!K+zNInlyKT3b@>!|GpLd ztHDb?85iFPJ^dE}NKK$3Q_30^|=$8BNgn3&wqCX)05zm>X<^NUDpO@b} z{i#OuFWS~~9Dd)|Upt4_Eny$+65Ok{?;(aOz&;gVO&nZ_#-q>pXV)s6gKj9ev?IPP zh41?T3ael}tZ40Iw<@$E>~=)_j}RYV*Uzi=u`);xaL`^1uZS=}kK``*j-lP2Zbbhl zewgB->AwH*^w-88FRXik zu&)R>4gHYY1Gdp#!}pm1i`IucH;3&r_zh&=s1<$#*sCPhaX>oZ6wpojK-g2$ZRD8}s{VHA7 z!S@4~*V@?u%ty}IKVS868^2X}KU3%1X55DMr9%3(tsvLhRZE@CyVHFMw~ZeM zE1ze14m;-kWXVtCPMr@6_=8R+phSP7bVR@0>$Vv*#^~4iRIQ)b_bCfgJGs)JnT~t{n9`C)@5{?Vml|g z<^J{IKM!j}{|lf$hLJPTAC3OML%)5?(cM*}KV(4+r~CVdAKBLEFD~(N3%LG#(QcrB zu%riF8sq8LNJMUi=Tq}cui5y&yY3yy-ZtY85I*P2B_#g7qNhje(Gl^|I|kj|e;P5? z&PQtgF8x0M_9?<_t^QV;(69O{`gOiG+_GN($7|hin8&OAJ5Ke2@kQTK-6tnr`Vx|G zxx3z(9cuEAU-$eDqWrU`K>jytmSwh18q0qM(-Zy8>~kGJ{g*rg{%(&HUUa4BYZ2pH zvu2N6_ooRb8~wW9JDl_{JOc9HuBJcHxc1Ti3G1Wi^toZYNjfXE2Osc7f#-uO@A-Bj zNBkVdFVSvSOnjEEoF6~%j~^NR1i`I-2siy5P%K>*msv zPM1;7Q~Mc?^Zz#cs7y$|Q@TGM+vWU5`oG47(4QSTwAr_+G@;+-W%lH~N(L) z`X6uASpOaIqEGrSy!2n~PQZlUd2PLxr2c6A!R#Xkr*~?zPgJ0tWVJhTWgkcMPvAOo zrC)vhbv(B!e3tp^KDPR=i1_UN_2n{=_`!6=&%qDxd`FUg^*j>W1k#7q7+^4>+k`E&xt7ySyK-T$4=M!)0u;Ulh}-}owi za9eHs5KL-Jzl|U45&fq>No9g2S{6VFUug_`+vcw0qCZ&p* z_3bBnSLOeXPe=9lA+-N)*V_79rJeLIVS8SA$oEIg)_uT!O7%D3i}Q$&j`s0I=Um>K zQv58Na{W&F({ z2Ymd(2;q0C(zj6>-`(Q_QZHxi6~|ZYE2;iU{wury`JYm2KclJbqkl)zuX?9^7P0>l zUix$9v-NToeWMrF<5e#Doznf@T^p_4X#8+n3H{frHTr{T?W13M?o#zv_DzIW|0Vl$ z!i&BWSg(awdnx`z|MqvbHkAKD&|f+rq5tiqe^jcSR6f_-?&TShFVWdT`x+(UMc*y+ z>f>jbkoZu#YfSiC(dut0WnW;$-yp_;HTnzr_Q`(});sM3DW7#xc*%d@^`tX3uOA?M ziZ9Wx-;e(5rav_LHGh}>PrnHDH(?(kI=X%IhpeY1+TjxYXQb$t{QI+>>fWsAn@;-E zRKM?Itd{|9?D($5IU$VEA+W+06RIksHzv{2<1B?EJvirG@ zZ&yWsfVGLWKKeEP(zut|x(BGwqF?!cK)VCNYkaV# z=;t{b$$x+tXTl55x&4nue@jaKub+ho->97*2##$Z{n~dgvE2~;X**CNL*vir6fbA- zbuGtl;w#__@uBwTl9Ma%8vR;-kp8ca`|V-EzC)!6{fh>93iBj%9ge&7{c@t+I-F-o z&qc?5j4yo1AEfP8J=vvBqzqsPrV>hHuF{Q>PS zNbYje^ncOyE7>#6k-lc@SK^P++*7}g_O$s|dj0eImqGue8vT`a(*GF0_n>?1%BRh4 zMQWavwp*cc8AiJ&x>qc^dnrM>hyCt?KQy}EKJGQ>&yh9y3qNe1{xqY1H1$V(sr2(UbyDKe&ysHajzKpxyzO+OzryoNlK<3;p+EVWeT_;J`ek1u z&jb%Y#nZ2Gm+~3R^Vu=`HPMkvo!joqAB;@l`x7tylKbo1|MWzo{nJaaer`{=!N{sR z0Q)T6@uz$@TZlb@O|S|wsb3X-I~&n#zwJnb0k6L7!zK6)j>rC^y^oLTR|WT+4~LWc zIfIU`@b^>jd%)gr^7rtU0Qpgn=Ma3qYASvYX!eLNxi7zZWy9~^op?La>)XKvOTAv% zI->nX{84RPfW1sXI-mM#CezK5qwYPgsxTS z26+dE<9x?2alQlayUif4oA7-zyf-*?J0y<%;t+m=ftNrZ&V@bj(~t*Xqa8dC(NDWN zgS&^|{f0PCa$?siG~;kEU&uXby^HJaXLaWO&WXQ=?%~n?c=o5hfVds#oW4EegE|RkVy8Q$Js2mUDMi=}71-Ug&g`v$^`znM%Y=DmiH@tZjTU&!5LHQMf50*T{pY&Y#_VOovX}$QkAxZvpKcsMjFTc5Se0|BD)R@1uQu{a(Xop$; zcj80&>HL-EDFJ_wzKa414rhBC?OHz%P(Eo_`3S$`w(lHZ zmlrc9Qm; ziI;wUM0@M{EtS_i*2@yLR%YenIYGw|A}X&uM>1=NsNQ1M`_=@ zu7E$u{}a0xfO&W!)58@XTESgyie&TlmGE6$g#SJQzr*}AMz|H>JM8;wc;AX}9^p&v zTsrR6<@)w;!NV)K$(#H4WrSnA5BKoz!+t$n4)3cUe!}mI2p91FxNrINGx)}IZ0}P~ zz_7~iyc<4VV(Tl~-&Xm(iu2u-8MX2YPxIv``N-Az+&t4=Ugeib*_Aah+M{#3**Pn@ zQsUgMf9u6ze(^W>xNEB4mn;0k*L(5z5Y#?C3w;F79|xzmk3aQ$A=gQjulC7w{#g2; z?;B{pC*Tj>XFr)2KvzpDq7g9E+gnl$^~Kf z6P)k@EP;N6SYIl@Z&2dz9e!(|aw{B-_W-Ro#XEO(2A87&h<5Af3ftm6K#%y6dwlVp z8yfLv?Pv8l)${kC+EHsulkKRrrO9^G+R|h@YHew<9ksSJ*^XLUnrug{Elswg)|MvQ zQEN-}h%dPdvTq;Qh(D`;_7vEz{HJdDh1{+=B9^3K)$gC)NG)cE?lSwx)Q*)95+$46)Ra@4w@+(oQX zvzV^-gM-EF`c;CkS zMOWAJr*mQAPvw#4I*rDu5g8c4ad=en^c*e5=mvBL(EaG#?_X&A1+RNKwsQSt4fO90 z_q*Dja~ktkK)Y>^^t0LhmhG=(InmxpQ2mv2TioOE;zQ+Ez6E5G+%CAEHR_6Nri`XA4oZ6}F`{|`~8<*b< zrX&8Eov+b4k@o!p{%&XT5zX@Ytn$0!9gCMCtl77dIr<&b8Vkf zlJ!sP^II-L|M};RPU}mB^BVIv7yZ6H;;(1wJc@q{J1v~oY9B%6G5ZS7hwveP@a}`u zXSSc>W54S?UUG_+0bTK@^4oOr=&F4ZozGd7_n$s>r0aw-28!-P~+;1riN$DZ`#bBw&M~wdg?@Ot@Z6RKc^iu8t z?|t_m<4@~Loygx1+^+}|_lv>{+sB{m$Y@h z1CFP{l{!u{XU}3Z|M6vdq0Z)FTr1MQTzDQ_hLn_@=en#{tnf- z2=X292jkV=rp7gUaa^Nv4V3|1r7LvnwQiF24+ZL{`iHHagnr)IvF(1CySRP)seee{ z5BqQR57Ntk44yRn$RVbm**AQ->;A@AtAF3Ft?yQv@TdDrYG1y?`lNMv$x+`|FTCZ) zFOsv)%f__#B)wWdy;VORGNBWw=fdx#4CsnKxfhkzJT+PWy0HEoaT|V+`2KF`lE&qi z=1=+=^E#)bCrcg!jE?V<7wd5%-%B>vLloq#{s zkmaZTFC;#_?i3L(M|>&$^G9x3JwIP2f0`d{UPAe;T01`+UDiJS@*H)8*4wV7jfUeT7Ja%05`}M(_Uhdle%iz3D<>cD^nDFxU z@i(03!d$stKSyX^I(0wti|&_&WB#*#N*-%WKl4h{&m8&d$M)qsvwt_KR(`=1?c=Z6 ze$rTtCpY%}vgEq~=d12skC*(1Q=f$oSuQ(q-W#&MM#RfW>*rk`PuR%#Ye|*g^s~^v z?_aBbZch97YunG=+S99im-l|I#@C@TpsR9|JM&LF{>=ERkiQJe?@Y}9!jU!pD(&QN zBFFauzsIWV)BQ%k7wP^%bfx=;knz*~LymYk0X=eeePq^F#-H{dbUyVe+z)q&@0XT- z)4uZ4IRVvwX6H2j6TUlNXgxoD4&fhaKe-<$dgt=~s!Qz?Dj(^m!tcf1tKV17rtV+# zxgYJzX|?vHaAo`W(|9CG-QQ6=Qc8`l-{Sm8e2WjA@6tR$<*IuU=zB@`ocGpX?G zPCFe~U7twtx8hUK&&2(h_^S5tr|-PGZGHaA?!Ptu9IlN?X1v`Qb8a&IET;Ig_4z1+ z^)t>VBd*hH-BYfu+uJkCJ5Kjc!nS*={zdx!NysJj^!<|@@#*^~5%F``k81omy0$c5 z&1eAWkkeuPbFQ-T)BdgI4>{KXG+Y~wHBfn=4N+^-sc+*T5M zZo#zEH#Yu?DfuBzQdImzf8f|c&?w7u4`O=L2CVM0Ot?xz54cZd#(>wj;SA?J$kLLPqIT3 zkiH+Vo>eyS@pHrnTz?7w>C=yhmotJMmFxaNuaA@bY5a2N#o+HP*v2G(g?Y=yUuE$~ zWm$C}=e)G?oqGPR(|TgT<3-oDlvB{x^CAAaYo7Hv>x1I+SGRxqe3d_*FW8&qHxA_& z&eo|hv^Cc^=1=!iRR4a;`)-=IiOB(+KL{W2#f^`!UFCXdNc?Q>ODKLs{OYN7#+Z0H zAw6>EfAirw`|InGzXf;sj#B66b2oVY)ZNH!c0WMpZo||4JSoF`U*fuL(8s425IaS=JzjKwKs{ADd8VV^$({J|+Naq0Gu6M9$X_1kv+U9Nx@>XT_>+B) z_>p@4WPe-upqh(w%WIr1z6LYhAD+-@L6Sdxf8@p|>iNsuxNQ8j%@=-M&tH0dP5fQY zeG~QDqBCt*KP27h^RPMM#h2VqdL8-OB!AjpdHlJ0{#uujzo8sA$2<9UCd2%jeIFw| z{}q4f?|x_>@Ow;O=jz3`ekXV7#Ea{`-`11*dD@Nj{FQH7w(>iI?V{E-#b3HS0`i?M z57C$YUV`{|_iA4+^?isO(-}Zl&W8iKJY(%=#PubOKew>?-|e;eQR!ySUuXVMuC0IC z`N2H#V^nS&H!7bA#B07Ieh$-?Po`cPjKb@~D z7GQVvmfE?=;Ifrmcq?q@GM@PSEoZ zwpM;-lR5jl&z9e}&VOfgqw+KR%i&8k{sLY=6<>0{EdC)$_lepmbT>GCUspZtS0{=)OYFT#o^{rubQ(++LK z->3KDd`N=7%72-^&#Qk$@Kd?5#$SN;CPaJF9mQgg+!K25^^Zp92j9j1ragtf`f{^= z&Q2j_s#w_U#{kIAujW@l-v<~mlrQKk+`zw&SH?X9z;Nr366afQ2LV-k@+;w<1z->q zKD6_s@EdHll~1VD7iVSx+ii^ad-*Yky?JyUv=2Bx+R`63(+$4s!~R#z|BG+A#~wa( zVI%$rT;$UzaNi)!{}z7w;bNSXH^{NW&EA6h;ef4~K?Xb-JR8^?4E%v+gOk_x>9^vy z2L1N&;VjO`8UzSi{1Sd^up8gUNZVli!9IR;E6zd#Mt;MGKkvWzmfN~%j~AieTc^)& z+xJc4=WtG$_Q^|kdp+pD4CLDRu5Q2$CcZ`Uq?CQF<@G&<_|-1XK;J`Y{c9Iza0B!q z#JTVS{07Y)@hx}rE<^46QlH_!`hAh-@qHz;T>pL|?(rn!Gnvmg;#=9>>oq&Nrcw)!e`Oo{k{)=z9 zGnh_+uH!mGsd}M9NSHjK{%bs$=d0^EPpx$J>w_)Cuc>p^lvjcH(J$7^>vG~Bc(fir zhxoKpB%(lf{`xoC_bJ-epJtQ)g;!vIumbxbve)!LWBz3yTj{mgVPm;58`t^gp1#2O z`D}(Sen@)&!iU5!>-oUwrtp$}36! z_ay(@&&Jqi3BHY__3sB8^Dq0_1*TWfxdP7HmA}sC1^=vHuhKo(3fCJ${$M4pmrKuc z#83Q_=TmwV5r6(29xr>`G4W|9OGJk5f;B%n*Z9x8=YOyBC*Q~TFZxSj{o|p={9F5H zPoetXIh})w#&~@u+Fdi3r?`{?q%97ufhWVV}A5aQpZ_iRT-%zodMQBR)>;Q(eS!M8fN)&sD^y&%NJ7e3( zgR$IC5ngmpO5sDs581vbezWpd`WgQ2<_SyJs`AhMb)7Fe*Mu6_JBJD;?y z_rWhvd9wW%3^dA3VwZ8O0Z$`p!sc zecxY%${^*c{g-?G3!4m1^1lt+|2b&?E4W9Q)%~wW8uPFHvjX!;_w&mBN80b}=jjXh z;$G@=M0}3;%wt|II;RyAzdr4j3g1F}bgz#ew)+01Kz!QiPK4b1b2G;`n*a7b(?_fv z>D%$vSg%BSx(@_DzkOMO@&@h$g`Gqc%7{M+|g>?w`&wz38f8S9}Vve&Y53L-i3X7 zRpBL@L?q<%0tmG9^_&2CCBskIdPw5_@c!%g{Njf}55VMA&F=xb=S<-tG4U<8<@k$x zH{$=Q-}szMWncbF(9icw*cn&~(rmsRZPB|5f3_(%%AHOz4N_ruJQ-5kwqu<68G8_wTl2{qK;n?^S%<>wy)MJ#w4vFQ@mbq&MmPs-T*h zbLoArEb;g7K8D7DA@L#40T%lE_9REV`dLSNU@`G>2Gb*VakrPQwf0ZhyD@Jp`ix+6S2A@kL~O70?jkMN<|x@QUD+{4&g z;SsR z`)Dp^1lYw|4K(E_%Hu=`QKaiXnC$g<)w9f&41GT=P$>) zeyPTP1>rKndb-miH}~5Ef7ht}8)4_u?b+Us6l|W;3&Bhk>D%DqfV1G2Z-kk~YCea^E9aA4pe;B<2C;0JBu%YjtBGSDg^+w~v zn0Vbw)H*{8@r&=`xQXNJ67kI($wls89_;&)wI8j#|F${hb2i3LrCnA@L)dtS^*P^Vf*+n>qQl{F?!cu))K3o@nyP^ZbeI19dH7Jd{{}37>7B ze45QaH|9J;=S(D@0_V-~uYLLf>593IRZ7{#+kxwn8jln)?y{%Ad0a@nEfK%N?eJ~^)s!vbS51e zYyXGw)o%<+;jM45XEfI*9r=}uYbhqSDf14dUg)_+X1!xox=0&lg~_!yVLgv51!}svqCvYK5stZ@zRHY zge~Gd38f>tkENa{osjW$A3^CzKDv(}{7A-c<|sYsQLhVrc(chz{rhU{zkYWX+UMl` zrx)5MpIcatZhPNPi4J|YOYMf_leUK+@CV0p{afoCl8?@>M)%k2kM0-i{5#g{yzt31Ck+ZpjwX8$hyDx^pEB=jAP0Zrs0w8}x@ZT2|kY11Fa`GeZ$`HRsf zoKd?U;r`S<`K0Bbd?bgo{-os)@CRu*VEA5r(sEdj__Q1b6R-OeG0Ru=hOa;4NIr5G zpTF(5lj{rJS-(c6&Ie~+^72vn%5Ap3uuH0aRrzcFFMSV4;c%`aNRLFH_N#;!e-E+U z6+UD->HCc%h*!HVd*3KiK|SpTF=S@rO`u!jB|AV*Bk_&+^2d$aP!cXA&QB{afR& znE13K`O6)8+vt6)ezmZEtxo+}axdnG(`)ndsN&_LeQCK`pD8e-FME9^J--W?Z+hJ( zB3|njZthC1_&{ymo<}%?^LXh;^+N7`2S0snqxt*eT)&K_aK40lO1+Vo^q_+ENqfq_ z>{Er#oqSmTGYseO-r#VYXS1g~74ZSp^K2ef{r^o7M4ZmIDayU6_vKW6eYEk%A52`` zdom~YaRxu(`_|L?ID^L&J_TWbo`@c~PY&B@Y_fkpnEKOlG9rG0^=!@)3$HY;Ul}g+ zm6>jLp6`iP@%4)6&zx_NoR4BZF1^q42bF;b1 z?R4MBokM-(i-S2{if;D!fcPU)_?Y;W*&bEi_k34~KacH~l>0!`W_CmbLss~RhP?o4n%yZnxy9` z877pTrv$`nUs`r)#9vS9q3)rCjIVp{j&^r)#24u*zYn(VTm8OyE9Il}6Lx+!+NN{c z{Vn%u`{c8P{Yo5qePDL3HHBCHk3Q?`OUQmG;18a?-Q#24L&*~V^mB~Q^{$Zkd7Rg) z-x@*uWvoZS=ZOCW=QS067c3%P@AdmJKkf0L=}-QjKHnp$KPO}URhm$ne+93#Pd;tu zMY8INea5r2|9_BANA$>UhU_ckN#~g?cj05=4`n@yDbE(-U(voR@!TGD??3AK(l~rJ z<7-?cxt&LR$a*Gs{NQs|H~9qb`gHzC`F!gIjGq(sQNktdlTZ44@yyog{88I?x7q*6 zu3h}RZ%+c^Z@R|QBfP#ZeJx9xIH31&-k)qktaSR!CAW3 zy*9LJKSuLYji3MdBqH2fJD(K2-ah#>TOUjBzh#*JaXg==_9q~IADzQtJsL>-vx~jl z6kqd>8-7oDrt0I+J3U_G*O2MRj$QDPmvfGIjSB}e-1nl_o-+N>`f3O2&xyC=j?KSn z^(*Fg(A2KVO}EdoFA^N@<;iTE?2!mB`5eUdLHK|_XseH`FDlQ6Snm3+Q^@$g;JKC( z<{CovFg3qxgF|&s!M#Gc6Bhsu0`n6Z`W62KaCpzc=VE0{Q#Z0($7& zgmCir+TY2XnQ;dFhSkUK#*VR!cLpt;{qGCsX7Js%jGJor2S8u&80ZHydsI$xZ`^Fo zA<6lx_6J+uVG5ilmf!UHvI5a^)Ao0jui8hov!bXI(-Xcge=zxeUr*G|_E$nWS46#m zn5$1`*4y|Nwrj+9WWOc6`21su=`)>>@wE=Fb<7;`%^amC_m*K#wKS67Es$SnYjg(W zH}m(esQhkiB0u8A=a(hF>xQ=0eLqk7H{nASkT18~KfapsD>ady@L#t4PM+7}qelAI zV=?5nO-=t=TECj|3vX+zf5Ly+^1JoL3#T@c->vUCeBYrazw%pOP5H%5Ex)cC zeYj;K`5pTzn!bemGVgpfeqCCA7rs?5 zzubpkP5Fg)G}b@im$&?eQ!H{my#B^{$@WkCYZY#AbmzWs%SVmnr}bLRzm@KPYrVFV zT0hWwt?(fU(t54%IpVc%5YnD#M0_(R{r;%iH#oA9{Qln8Z{Xbel@*A^Kz5Fu&`g+Sx=PN!>ej`!>y>GYs>b^g&`g`*rC*zAXKd{4yO!R%^cGCim+izxL|i zvi2V{H2>}N|Kw*1l$PJ;jsNuhua?eVZ~3)%{I{(Auf8u-RsVE8DcAk$Ex#|Sf1lU>$-Z*S3SV#ewYU8no|=Dr-uzASEBE+%%dfrlH%!TI z_T|@J*J%FxD(AoYzD1_j*IRyZ>YP|gOl`qs)j!EE*Zb=&zxL|ivdZrRo`-Mg^Z(>$ zN*K0jqW64W{nhs)$}4`o<@aUPU&$}C($`yl?XADds(-TIp6mPdmfx49f3ok?((mgn zzxL|iaJGMPe{uK8)$dd4eCa@*FMSvGVcgW({i8~MFF)CRkgNMg^O^3Keg7zZ&q(!Y zRoYVt5BKZ5+8=s`-;WYLBAvRIRDjL;_>S7WqzwEOK(oh7p=M|3-mx!M?aOKZav0@T zyZ|ZuxhB70m9K{UT6hmt=a)k=TF^bAkGbDK{50YN;$z|^zdXKc5aGK9vPV-vxP)-C zN5^92zBg>8RT`b&z5Q07La>XMo7tgW5!S6TO!(*ap)xy#6BEa|y5x)Sx!N;59 z_lf6aV+il{+;vs``Q8oBsSp2RN2CY)S$dw>NIviWvi7R(h2$pp#ObU3wUPXux!nIO zTFuvo83?YJu!x0^Y9y-0Qp$B48Or%dm#RGC?D8LGq}R!hj0mggDnD|9{yLK`J2E&`g#`OytAdJ zC)m0^yuDR;q^IXqyibOO*SfpH7d$-YkKH=#mmUN>FE70AQ5|zi zeZI0|kxQkc8-_byQ6FFR&F5ZQf41Vc=WnarINt6jgs=PGeN6il)1hC{#<1Pa{mbAR zjpb){2knvk2J!w$w2IeT|JJz=&hhE%o=LzLJMtc#>=+{3>a(Qa?dK}r^JwoSc*5_qs$6APLFeBC{-87OU58J3`AM$xDL}yimIzQ}|~4 zwE_v4b^aC!#QJ#y65Rr_!n|H(dVM|?jqZc!@*TSaR& zmY?ijNdI&{Ty~n;@}=Dh$9k9Hi{jm0Z-QTWy&ORNMkf%T@%JPH;>Xf1MwmJ`6wr=_ z@(mgP=>hnDNucjhiuj z)R=L>q^UE8ZoX|WX2P^F6UU7?sx3Tu+UU{ardvFr#*H60wf2JvW2*6|jGEr|n+ap` zNO5{yx)a76GjaN)sYe|%W7L?Vri~x3#DJeMEk9%8xF1ZLK6z{nTleEhQ@=lI@}#l( z8PgSE%BZp5A3JU8jH%%h(fDQIwv0H%>)qTzc6V!qw(;Msv!RniI=aH< zeX6kbnm!z4`#6J>pt>=}5AoW4s;~&-K?`RF;=Vm#J&Z@9jqoj+ZTnPVPrLtxaDIzE zRT#?m@o@Yepz%*@AKb?Wn7vm^&uxsJ6L64)e^VQO{Od~6kNh2AMKB(N-k?9|1N?9u z|2|$F=>sNy!-q?FXK(`FXYkJ8u&e$1!Z*M#pxKj_?^Rd4*R_#+e{w!k*fuHO9&Pf~ zcjyWmAwPh|i^2Y&AE5DK2)}{GixK<=l2;7BfyRpk_zg5(EWvM}@nQvj1C1Bm0pJy& z@nQhK!5Vvm{>1oj=0Wx0pI|(l94|gMrapW)#^cHH;j4I`3?tO=SwO7Z!aWDn*%!E* z{rBv3QQoiM``sL$1cSVsH7=8@@uQ>a=)P`rwQmnag!*aOKTeE;IHj?+H z-C2Gd6*HlyA7FdPd#w@kEpq&$am#4pho|C?C4La?>nZ+t;&k(yzZS>Em2dm@ zJWss%lbfe!BHh1CdAWCTd=yf?8(aN9y_0^1Ia_1->iZ3n??pUMQu?@FzUmJgzf+)b z_$BIxQr~rWMfO_{_vwVBT<|g%bA?0h=jw;{o()NAMaByS!+WK1cVSP!LGvB(WIc`z;2Yhi& zYF#WOz6a%^_>yBq^Mp=bPbII}Y)`^Be0x%0I_K%0_D_BMBJqc^-H@IZNWZ>|Ejuqo z;@6{{#E9P&uQX{NBBt-91$*)LT>o}bzN0DMOL6}@{G`@C6gKd`pt&0-cK|%y@i$BS zu--{7M7#cTeY+`qz!zIQn`mzs~5H7CQ&mF(J564IKbMgB9oO{lP!^!8Uv?H`_cRP~L%pAnye;PxHbzMtkc z^zy~E`0689_JO;zJhLnNb)`!pMBAmKI~ej0v98l=J-AnQaCeRX9{qX=^EZ2cJ>Hjq zKM%hvZQIdx2j3R|1^m7;6!zpH-uTFlZVu)vh0z_|$tD;4?ld^TcED3kn?tmgj;;H} zaJAld>o+kDM7mo*9s$xBVehZ$;FfIW^T}h}X!)JDop-xpoN3`hk)EZ0!1_M^E_lsY%kMa&0jlGe;3{gx}NFW_I0# zqV^167R~1WYtnwD+B=oAzQg0#-UZdvoSUV3y(I*Ur;T3D|6|4^%+~|qG5o4N zFVCvSZ$kVFtY`6!XbAC0F6VOnBt4IN>K8tpko4r3&K$NgZkVT2?E+ta#!)`vCzyQ3 zuNujJ(=(x8ow~H?cV*+o@|S*pS@I9J`f}wT-oI?}FHz2E`NyR5^W-nNt6+Y!^GiQ9 z`3Gy~%^@sLZGJMf?e~9=2#AlxK@zeFf zX(iH>eW-Ob#vjh~qwDJ9hr}Nz{pUDz1o8bizKJ+~#PqcKjJV&Yqk3o4 zqW|=WF44Wy{d-^5NdIq#{7d*grp|v=Xpc$lj@-2Tmv{RUZr48j|HBt-f80yUrvGkR zPfuF^OQiGj^gm+ZC|*2a#{*3M?oD5g5!?TdA%AyAV*Ph>{|m`oZd(3#QxD^m{p*74 zTM;k)*L+j!ivj7AJuKN{k=|U$aj@!z^!aZZ$J0Jn$aE^)XAnJ-TT2QbG5###3y*W2 zNc^G{zJ>U-y{97a&71}3r|lWZ3En+7uXdWrKcxIK4<1r|KLp z4{lnsKAr3e9)D;$ed4DP?=E2a#2><)MmYb&GmG!?bh8KkrJKoL`yabd|BG`l zep<0+UoYCSee&Oj?PSP$DpHO};U)i5X%{a{jeq*d&KL2L|2A4zAwFaVL)gElTyn(g z`vF0JFSm&Jzq20+XlJv9_*nH~f3N=~;xFg^q0%W6zZ3OG_QhOnsL2@hPM$%zrC{E{ zN%`+Y`Om`qKRzNc{~y*q`7cQALn`-?x7O=(hA#%B>P0~OmE4DnFRpK&dz5`T@!1|9 zGJb*jukVKDh?gBe;bY=2X8O|GBJrI|K7FlU%_si5JVzN{!g@pe2;##>J-$qQGl$i$ z?K@p}_c>%*qxISEW|;!l?`)m0A5a;hkNOVg2MPOQ-S$Lz-GKf04e-4&z}x{CKUsK7 zgaJi_lh58p2)-AS|5mRm9Jhsk8}5MkfVGjHJ=u+WRbhX`H~VPuw!Nw_-_pbHv)ki6 z;84CVZPCjaj0*4`PZ@a|lv4R`Yw6?nCD3Z1@5xnvgn#d1>TdKG2ZDA$_nmzHZoOVO zkI~EBiFs8p4BrPE+N%l!&O>`W!uA7tRpHR_NCf9MvTK7rfS$DcADMCV1C8XLI}7=* z1o|!;S^cT?vq||6xKSy3H?sAA%>VSvMETe}G0J*40Lvy;UipsLV*ot8Lw)?a0{k+u zo}HG*M|hw7UeL;GD<|(hdr5ux?5pa-?$5dC>J}|5)%K@msx)Y_;ORuH}bnd5!+$qpWN5TOsL=2$RnKG*C->b`F)H% zitNPHz6Qd{eGNCMeqSSxaB^Rxf^c$QBRsN?+aR^CaneCxETI>(HbOmsUg>#nOnrEo zm1E)@Oy{xnVN{d4XK=h|QdRzMc)4l*waa4EuY~>9%649!s!4J+{)C!WpR`?CW%f^& zi|o}({(pSb=PP``AB3Cv_Eh*R@k@u-<3r*fd8Iy`9P#Bo_3laVyWyjJO^;|J}s+hul^j);#rXA|Oi&j~y zgG+uFtrT={$?u}&H-XY@iFW0BuRPI4IL~)_eLI&4k#R!*m*u-?A@Wau7cC+matHpZ zXU633{^s>(3yyz&a~A5=A&K$N4(-!_eJ`i9(CY=WbE|Otqj81gukUG>Ui9$;{$L2l zhr(xxm%U@n*FxgI|7>IZANfK(K4Sd)Q{x}$kL6F)%flg{&7AbzCA!^BGtAEfXl#*av6>6^a& zDHDGf?V4&or9%Ass;5JJ{8r)%53;<7*SsJ-{#ogFTVB{`{IkhfKB4F-ulLr@^am=# z^hd7hJryjh8~nnv?aEk_H`tZqk$B6F&fu28K7MJ_j?UnFLw&t3e-rTm`|s)BM_5xg z_~jN%A8Yd!z!hivu=^Hzet>=d)y6|bEaV%|Jc=uBgD^nfXJ}a$V?@BzjX9pNZ}b8# z80*u^;mn7@od+Ym#CUr1=Y0I!xA7jZ+POY{c_+{d$YDHXPhkg)IRULmKlyYV?nA{b zKo4MLj92ZcU|eI+>{0tGIj>n9ep9l4(D%76!A$2>S?sU zFrJb%iC4R#{CA^%RgU!qyfz6>p1*dPuGM`SoxctcPM*Im^s7IAUFzSpx(}oC*JXsY zA7f{)D+njgUzb;@KYv|Wwf_8d%W7TSf9w3Uq?V%`wm#~-e_8qD*?wi&es!OR@e{r; zuKPQ|uKt&5x8&;ngxas=c7KBB4be6m+xHruj_xZdpKb+@ z*LrEd7mMz#$D!TazKHml#H&75h@Z@SMSm;t3sUK8eDG8%{S5W~ z!BqM!#51`zC!#N;`<<;ee>izRenXbu3-2)k$BEhR`0`tkXu0~%KzMz9d1)M6I@9A- zUiz+r`muoN4P`zh+G|vKwb_xU9q*9wPv$%-CSLN_da=@v7(e9ttnhi__j|Fv9An~F z*FFu)y@mL>H~9F{AKM19Cv7)>wnsaCcQIx<=Mb-TPnCOt_(hy22wx;#PDD>g_x?Z3 zd9hLXo%JdsP_C_e{^#;@uQV>d@U&$sKX<2(pJnzczmRsEMYqaN_#ET^ua)0%pIqIo zQTg@ypuYTydw;?5J8Rj>FKkkNag*{B{(rUnes;{Rb@u7iexCVyefi~cU$FdUFI)M= zP0Fv-r2K^cUoF2W!v|d2sQx|iMt%8Z_x*z9$9^%x{=Zs& z$Ir{pZB%~G|E<3KTEF+j%CGWg|GV~GBi)f2I7eEL45uR(2eEU!(Oc zJ6~CSc&^gcNd`E4lay#XpIX`xYdvpwse;a>7T)RN4D4L0-3NDX!UM2#rxw5RR+lQA zX6azvD)+Z8Rj~7?7C-y+O|^X%&g1GN58#CrpsL(RQ`-ve|WHTXvtXP|SbE$|!Y zd}?NC7iXYzs;(9E0qnf0(NlomK<8Ft#5K_Q)c~{@XrC*$1o;EP4UD1MW9M5-mvwMC z#5FjQ>wOXY1}|+`i)+5;ZQ&rXj=#&M_3!PRtiw6kme;@!pxG1gMM(Fd3!^=3exKp_ z9rcgB&O(HJYV*UwfsN~@=Jzu>pV53n<9KG{G~WFE8mv4{Jco( zH^Xt>J3gv535^eGT)w)Ws`7oG^VpE{C1n?!z;jQ=e61r>iH z@jvFim+*Pw&)m9R&NGQmJCd{9@831%wMPAK{$&5l!pgpV?7p&dtGSii`rqLQm+U_6 zJ-w^26ka<|6W-gq3V*gP0_S^z2YOdQ{bzvp1_$7rXJu>bB`xe-g^MhFct@9gtalaq zV_`1HV&4Yu4L-pAj%XV8YJT6l3TxT>33&ey-UEgpTsZ`LS&#Rw!rRv0BYx|Xcn_Gn zir+uV+}GO~sQ-*Wzrktvz0sQkZ3YM90C$Z3FhYI?6BsT&f&2m4RXx2$@Mmz{xA1%H zceO4+et?G%4#$DsNAMmn5!E=Fgz?IQy{j;GFwzJ8Ex+qsh3far6aBC4pV^ZItp>%N zJpbh~eh=8{YX3g{zd%Gp_nq%7{=K!&TA$s6>wDil6MJJ>j3wCq1V?y{Y^!hly}qxl z^~6=U-=zImMsu4{zx93XfG>``&g*ySf%Q9CE_yMNF{$h#ZYri+Of2;3$i%zZ2K1BMpKB)EC zTXgP&_b~dhYdlWpk(qu#{OQ+vdX!FNWO6&M?T?GAD-C=Iw(e6>SzajS7<2`X66!50qkJ}LKE&K+9(SBJt zgx^5zS!SjuyCkVwkwcgvS3SGAHVRsVv13bL94+kxfA0T@ej;EV0FU!2-U zJ12#=?$e(4S)bHyv6$SODf}=W-M!0tp!mayKZWC2wXY%Zn?B;}tK#Q~k2x+@{D}Ap z_s8Q+e0!EBejfQPvAvIpzwTw9zVIrCgP-;IXeB?6E-?P#&(!0~#IMNni=tEYegNYa zbk3FK!k;Y-lv{w_*;8UZ>2r_% zEzVA-$|2^99x40@#IKRU|AP2K+0KgZlZYRm!p|Z;pTeI^{Et%jQ;AV@#LiN7tC?>WSmQuyq^yUS_;o)8J8}X z0^_G0^$T+Mz2&bTH0mF=CqvPLe*A8BHol3(GEA@++S~97*#G-YpDGmC-Df+j=nM`Y z>LV7e?&A#RVLi#>2XkQG1+Y)x-)C-s{To101;O-7sc@d_O@#}Q9$>0hR~McO`!s<2 z*`Aiq2R(pZJ2D|Un^S)?7a>2uk$d|Wm0l}4gIERiaUbUZ#e@9&(mSwU12}h>4;Pjo ze?az9AI^RXKj3w=r}h*+!F#|NOfT~?@&nw<^a?NGJzyvN-sT74Tc95>hxZNQPM`(Q zZLWV`SqghOfL(j|^ux0dAF$B_K3x7C_yz35aPHwg&fxWd{=K^x`~V88Gfd}tqaXR_ z{*L$n*KzZj{VQ0%Ix3ic?9>^Pri|NU%CR%X&D=IH+&({;I&OL}L~kZ+8;qMeYV>5- znHoK9+T?A6V9ofe)hd_Q$_{H(%RNB z(&SC#YJ7E2(pK|B&KvgT#oqm#!pB{gFoBh4!cLCGs&UHEAbHsnbbwZ^R6JOzY zJKDoHXa(Z$9gi;&uX`uLSBU?ZSAJ}5g(G4Z*SJ*NWkhx6Q)=qwUHlJ`dg+Bc~Xe+1XLgwJ&J z?8WzadJ6yce1*i1ucX5JjP)@Ku=#8-q;q}x*;IH~D!g4Pyi+PX zA{Cwrc_-;VCKcW<760H=I7)@br^1s{;pwUHX!bXfPv>>&>G?@2{x4GDlT+c&n;<3J zH`CK66@DA%vy<Y@M?zo?pEZE$D&59q#w4`+kE&fv_meK`0Aeh+Y` z`*7S3`2qSfe(Ryg8!&COe_!}!UuSSS^UEF7*BShT?<@ZXe}Fq!zv2Ut9$@MH%BjxqlC`rjA&W$Ud)yf@H%xpHJ*XQ1(t z;)grS=iSYq&-S$9w+6v@jNNb_4`<%R9y4GszR!Jv-vTz;*T4U~|I$0TyWIND(1!Y#^(mDu@$KIX1lLKduZLJ) zxAA59HQ46{j6gWt8Fx4T2>acDoV_0leqV+kFp=>yZ}oHrKSz32pR#ZEtb+Ed!v(Mh z4$yjg;gO!s;J`Jpo_&5tmsyD41FnSKBsT`@M_2c(!s(+RD}=*q@O!|0T`{M;1osM0b0LmeF65&0lPq-OS^USLdXB& zs$QP0NZ+80u;s63B*xn&4?Q;ztPk&p_SN<)^yD^%&*b$E=mVTG*2~LX3&jJRh4>~f zJ&Vy^ntWPcNB)4BHlIMaxD@;YHlFLl`8QDBfJ;*Q@otU!{FScsPVT$+-g9;%{kuf# zhqHY{VC#p2T-Ub#SNhTV9Lffu{gr4D*53ewzXkrVJ{JBJ>tO%~`4ujJKD>zaIDqy` zT3^8L0a|Y?J&*h3fc|UY_lfd273CM8zUnEly{vTX?F=Sz{V=x#=>rCh_A%qG*zW<9 z89&n#`#XU5kiI>+4Y8jCSjyjfEb_*9BKeGk80`MMo{yj})w|K3Vm%OG>w)&<7i0Yp z@B-Wa@;{)zfW-{Af;WRLHuUjZGT7e%EI@l~=~eoIAHeac_VE3+y*%Ag$P%#5K>i;7 z7C<-XkI5_dI`{`nfqq$f`Ch%N(EVH=zw{2|3%GSFgt1;3y@~PyTxb0=p5hAFO9I?$ z`idv}KGr4yQ}^-Vax3@&Ea3Z={-7UFvh?tTZ=<{ck1-s71o;5YL;q|~;Z>}+0-8P2 zOSw}H>62@upDpM66yiA}s~($23~JCmhOjkjp!P9>-$3nS48MWe$JVW29~hwav4D35 zY9CAR8%X~v@Ef$Xj|XBs0HF3Ugx^5zV;+73wT}h(4cgjA_{#vbkFD?oHE!*8JWu?2nuwU0&k4b(nX;5ShFm^ldf0ronlzJ0u9N8diG97_l% z+ed3JllSo!;(fBcTygLE@czT<+p9xuJq7Kho|iG6u>M6)g!sw!atZqry`gyYdW%$a0RZj-{E$h0q+uF~?9Uwp4 zgDke7z5!rL)Z3pvqqlQ_Q3ywu;jSh81|Oh3E}f12Z}<%!#rU9b1>RqP_kf-DNBr~f z9)5%JsfdsMDsvLrJHWo{A&m6m^U)px2JVjb^c?gr=V3n@fMaeh+#T<4z%bde2;MvJSDAs$GB zya(9*!^#wlS7w2K1N27@?RNlK7})-P2>Auz-C(4>hy3#Af_^~1ZV1B|M0_^n0eA-S zBZN!mK;D2^h##Q;&%$r8>tN7}-?u_G26tQjqmbT(NDmO8KE#-OXCM!Q>utP(a12@u zhK~01XMc_K0JGTtWD5ubE{DF`Q@jlF0L({wYV|9E-$0M_Qts<_&zjXpKmYcO|3%>& zUO(rf{ahC-z?xsn&Swz=b%RSH#NP$-hu=VUKU?89=mq^U`=6P$VdEX3^Ojlo4NA~Q z`+W|6gX^JhX3sMZzk%$7w!m*7JE0Z$4PHS0W-rtY#KZw0yP-Mr17tt62)}{sh-TIS zJpiaj)!t_oegoMR&B1SA=R2$Pz@G=$`A)Ml+5*3U&ZiXNH;~=Y;JR+kK=wz=^SU_$ z>2n!z4Rrpq6@CMq|I7>meE^;REaA5XI{%r)I|DoaY4%EU@Ehp-XC8io$Bo{3pcj4v zonI-!ZyS?B*!Fnq=1L8WNZy^0_f!{#-S%Kd``ss!sJ%IExfZss+8NzQM{fyu@kbcJS8%RG3@Eb@! zOYj>=KP&JXNI%_%$RF_E($4^S8R(H-%6;~cp?_(lpJrdyo|txJo9SoyOtc38>1Xzl zZq7jZSv~{r0n*Q)fc69+{VYD(%^65P9sCB;Pj?x@0O@D$@@~$c`|iGftsrj$>1Xx| z>1Sqc zH)qhMpRAs{5a|P?pZQC>IRoiujNckaKU?89kbaiWf;<6j`gwIX7XhT7?i$Do z(59c4baMqjn|`7!N&x9+YYWl`NIx@3+d%pmz;Dpr_A`74`~uqBerA!kfgb6l+#7B^ zY+)n)y!=-Gi^Au$pCNSLK>8WMZy^1Q;Wvnxe@9XK>8WL zZy^25!*3w{Y=PfE`dNYBK>8VO40-`4L%(f2QGnk-`dNbCK>AsM-$455HUT{V>1P1H zf%G$k-$42q!Eex}pYRs}(oeT3(gR381NaT3pCSAP($5Hf1LuYM|id-XF!UIu!kmvT3o7Vh0hKg0X{FDl>s&*RTZ zYjGj|K# z8(_X=cIz|uqdfq$>E~^z-vH@n1-~_re!90oKS25!z;7V^4B8WLZy@~) z;Wvl&%29#I=a6y znD{q!k05p5Wy>dhe4R@T8UOS<>hU?^XFgPqkBIM1y9Y`qPyCV#e0<%5iHRS}?-{sH zQIYVp5I@8=sq z2TZu|Tz|c%zx07mCrf;p_PNAYNc>#hABkfhKSz8Y+8a^&G4XBoyCnzWN!Di^X|mkC z-duT&M(t~Mp8siO^;-M7zWeO_K6(%J5uo-phTlN#YXN=(wXY@k4b;9?;5ShF>fQ%s z0JX0H{03@YL--BUzP7+`p!T&0zk%9U_fMn;Q2QFeZ=m+I1iyjW*9!awYG2(4_&q@F zYXHB2+Sd?%1GTRa{03@YWB3i!zLw!P7-92mtgiAyP-$43Xf!{#->;8qD0e6l-`j}q_ z@Eb^fL--A(zY+Wf(%%?<1L$s{>JbdNPi3P8%Tdk@Eb^f{WlnE0n*<9ego-m2)}{!H-g_l`WwS<@Kw>@0%$SNBfXXT=$J8oYNWqs|H=QN z@HzTh?uhj`fb_Q&ego-mrW4i&0n*AyR-$43XhTlN?+X}yd z^f&AZ{Q-<%``ZG)f%LZszk&3(48MW&w-tT^>2IbR1kTyX28^CWM{SDzakp4#S z8%Td+_zk4L1^5l5za@JIkp5QSH<12jd!W1k(%&5XRlxAe=4S>8;!z zk4@UCk^Wxxy#GPvbM!a6BJ>9!{msE|ApOn5Zy^0`f!{#-TZG?0`dfzIK>FJXzk&2O zlRsy)!*3w{&8`G`0n*C~eKg_**fFyTS=-(n@GH|aGo&f=iz`$;@Gu!iiWG9*3*(cdYvoo87 zB%7I@?wX#?^mO<3V|Ry;>nQvX6l5=#A0qM?F&85ucSVpOsAB{Sh;fK05fJAJ%0sX2 z^`fGed;NXR_j^utRqbrze?L3p$LGKE&jNpFhQDiUOEdgkXIq-#?*`k_41c%SmS*^y zc{a~VGyDzMmS*@n#kMrV-wSL@GyJ{Cwlu@v%ya0EX81eLwlu@v4Ys8j{%)}?&G0vK zE!Wcwe*?Cq8U9YOEzR(Eo^5G{ziVtuGyL6TTbki-@Lc+%8U9YOEzR(Eo^5G{ziVtu zGyGj=TbkkT2HVmMf4A6{X84ei;0r8U9{mTbkkTCfm{se=o5u&G5JT`OrJf@Hfl0G{fH<+tLhw z>ugIi{M}$%n&Iyj+tLhwvoD}On&IySwxt>VUSeCC;cxc~c^;bKZ#i{XokO8wxt>V=Gc~I_*-XN+P@e4y}+|bv)}7=!~WjAbn|^uA0hWYy`S&A zuAk2R7xc%Eb-v#bymx#5@5AblUGnb2jC~JcZQP%4_qFdq7`$5#Joyd&zVqGQPZucs zt?FO2b;enR|Lf1IKT`d;QwqOY>q-Rb@60JYr|WjCpLvCUFx5|8;SYS)_iuj9HHBxi z-u2p;r{@a_e}mS!G5ET|yVQT2(dWFV@UQ9j2dy6Ug9?92s;>1X6#fx?9y@wOLWS%p7f@2lsNKInem)jA;NkAFnr z(f1bh{7r?|tv-mtw-kPT%HMoR;i3AcGmrUoRvMg?oi0h?|j`w!Qafc{k(lo zzds}SvGf1jS%0^sd9vo_v%e33zt{0)2*cJ-=sLTpmWNoz&z~rsW*+t9-L3bZvUO?) zJUnagXF)&MPgCT^*6&E>-)^xV&%e#xnasD{WZ(FkJve6&N#R2b8D?uDOEclIA+U&hydm)MWz*N&v}YnMkj9?Nfi>npi3mQVYg zUj$!b`)4^no?rVf@8*87eA>)I$^DN*Ao1hJrT^IP0eQaI{bPp`n{Q9-k$U>cNAHsQ z2HoHC_-*wK-h7DX>%%_(Gv$ZB=<$^_HTSc>R^MPvhc3O2-fs7p)}1lBUeg25Nv+5K zafKH?qkK~1c&}A>x=zCD6#mLoKPG?Po~j$5X~UWKrr?rZA-~>KKR@lknOjrOb3x%h zo$5!^mNG|D=f73Yzb@53Xy|^g(z+BjJ~mI&sq^2V=f5^}U#o9$Jas;3<$hx+_`1SB zkm~2X3hztRdAMKUqbd0N6uu|*z7HsTf2z*I`xQQw>gNLrucXG|g9=aM)kTG;|6Hp8 z`e{te;Z_WiKGQ~ter7K|W)wQRhc{N|UiUg~$dGGFSUr+1V8%YOI6U6~#5_W*vd-oyH? z4|HYTJP-Zn$q#?&Q!^LFx-w^2e-Z(_#9*p0!=0U71~b*uS27t?X}pu`Bae z^yl))Z(zL?{eSkQB^ja0q-OHvyb&-zuJ|_KAY$H z0Qs}*um3?;=6&S1Pu)*`@^1R){B9I{x!)%H+0CxZ{ipo?T9)IFb!9%J``Lc>zucAi zJ^GjD*<$~~Z**ZZvrqpQ2k8I9U76oH;*U=a^8O$1!e;j4z0UrHzwFACB|n|(r-q)I znc}$V+gt2!4R*;?WVRUJ`Y_M`Dc+BKa+$C05!RP|o&Gp3?{ks;Dc!!A-`Xhs z|6y0=?UH}aerAm4Wj}{PvBCN4?9Vg)yE$L(zc$YGJnwmq%YOF+_vd*gIi6wt-8%c1 z7@tSDpRM1mGoD|Rgpyq*JJ=2_e884cwuUKDZy}@bb zi*|we7J0oE(jV;r^DX27auKbNx?oJ?$+o<9XT7yovXrUCsQ-{-vL0{Asox zDOjL?+Fx?L$lFV69H&V=#5MX4N*t%Xlm6B=!Jm6rKS(qEsQ#nu)1GoG$9bQvdG1fM z^-1fe7(bfnOTn%5NBbmF?NBbhj=YNj(dnfNldouMu&Yypn`=96jv0jl7pGXSxY_1;X_uIv zb&TXo?_rzvdDaig_|#cAEbacCdOzlNi}u{1Bw~Lu@W%~$ax}UB=jdy)p5qdINxSMm z^7va$`{TJ+@O-o@{futx@4HSHAJ~q5Uhx*+!^Yj7ex#1$ZdTA4{oDt>W~83a_jSAW zkkG>~F&<;xuKoTz-)y$qwZrh=0C`Y9(e2u|IDccFdX~9v*S1h- z0@mlOy`tN-ea!!Sh5eK4(`t`$KKu1kTu=M^ulwWmTiK`m`n%YtzxkPN*A9Qq_rEsF z^|Y&?zYW$4UF`36?P1Oj_JNPX-LC!im;Cj!zCA>M~} z8_$RFStlPEk@_zH&FE_$I?JF1k{Wp)$A58?%R3Gp6T%M2i6zEUp zdxPXfWBj^*nDL}-AWznK-iw?o?Gg56edql1cwXB5yr1yn`KPl_`&XWSeUAQL zM*p-gibBWu1lKcvv`ajX9MA6LeQ5uS=bx%F9xq@#Xuk?Q$^M4in>NRIW*Gme7jm4o z$@9s43m@+JX)@X zxqR`);2c$TX6pHBQ)=|I3$5T@S7IsZR?99eHo~w2lM9ZPo2?szg?6)3pJ>J4!F@Ld zb5RMUh1FKrJVw1A3N%?kASwUTpa#?N@VqarG&pc0g@Zis<+X)obal1fs1>5U7B5LL zCM_#eJ(n+cF0U4A)i64D|W`VR5-@&jX}E^HV)Prg{Y`i ztJca_q!O0Be7Ra~mGe>qs(!S5)^{hhmh#OeQ}c>;*bX0mPR~RWTJmQzYt3_ESig-? z4I58@5fyII=|HeSX1%alsDz!#YqrkG^tr+JGkiX=-9Pw79(@HcQ-Ixq!_Qw^zhwk$8gHD`K<6?G>?E;`WNzEOC29 zY?ipaA~s9hUJ;umZm)>V61P{xW{KM?Vzb2U6|q_3_KMgn33~+_#pHvtSJ;o+D`K<6 z?G>?EE~46+y&^VC++GozC2p^X%`)_EKfarfc4ef^i+#p;uYak_wYu(4{Ta3wEpFe4 zjT5(T#Kwu+H)7+&?HjRi;`WW;J*?e^<{p_>#hpYMpZHr>^iz zdVWUVcTM4kE${vRpt$k7pzy0SFWt^xSNNCzz(1$KA5i%J^OGLF^&2Qy{4Of|KUqG% zzVD{OAN(bK->bbpXG`JVw7mLT)z72z|IOd^=UZO-yuvT(cLeNv;dO;y(71@5zozha zDtziq`o0R^wEKR3);-CV!k08IW$!EeReoQ!{Cs_{?<)L{6uzbT`5E|y{Q5VO|FOp5B0N#}Yg6kc z))emFqVw;=`o8w}Iluk3Z^h|zO6x1$y#c+S?9k`NZ+ZGOwqbvbK5tk0%;|Gm-Fv(9 zJzBRvxLU_W53Idk@$VTPKCkdkf6>D?6z>hc*OeX&zOLtANWl${yVPH4=WpowONuuJ zH~gOeo#cJD^!yKKokKhSlEOECB6)sB$9G4n|89kU_s5gx2MYg}R6kjT5B+-b{3(Th zPwBy)CuirYzt!OL3jZ1Xeu=^B3jc2EIoA|^(c+vo{tCY?)z7;1^A-P`TTk=zcv0aG zC|<5-JbX*x&sYAq^<7UFMprj0Kbn84Ki}x&-TK`GtG8KK{B9|}ZFTwcFDQJ?_}xt& zzM=3r<>Pk#mcj#-D{K0`-HOkz*7$SqQO_R(h2N$8#o#8Nj_W$5sqgsv&g=Pquk&v4 z4YMz!c>be)9M<%FMX$^Lti9NS)}HSF_WbIDV+s2GlwV&qCIaf?Ps-T(vbBf)ZS?y; z*Ze#hpRxz2|AL2SbbPMT1NOb-DV0Or3h!3FZ|4UJe?a5X2H&CZmnc8oIOF9!QNnkb*y`aFe^ivf`)0*LB^Rtt;E04vYLuzRv%Yf8R}on;hNxXOBOZ z6#gBRXH&<0|Mne~`#+}dtLwpnm-zng`n=A&#v8K=FDraQ$6-q0|M(n#KZEBKo_nwF zXKlkj=e)u#er4mcrtmlEc$z%BVDO_#4=VrG75-tZA8X@tQQh%@1Ioe+Vj^BdiZy=pZRKUzl9)IGC zu5s-JVo&@s@t2#ahe`Vae9!p@d#=fB(AGFE`}TX(2vY%HN$o#n!S|P2q&_8WT?|V3 z-FA&@v+8flp1CF??J&bB_n#_W!QVO#ig4n|=S6=BT$x+cm8HP0%0hn^S(@{{8zKY|H=sik@%K z4^-tNA-2Y7K`tMBn<6HlLf0*_@j~3BIf1m3A z+P%>sx1sDm0(PhFx0&kid8y++ld>n@Snyq~JrmrawK(75*I96ZmVKVbr%O8-e_DUh zpWppT#-H}W_xR%*Bj6wH0`VI81vP4^(xl#C{5Pf7*PqRN(;gY|N7oK;f7(CF^I|V& z-U9y7Ud{RPJo9<#tJ2P6-^y<)06%D7Q-7_8W-_0g_RnMc8$6#}zf}R3Xy4;`WPk0o z+>iG4(C=^Vxh5m+U9Ye!{okvVpG@&A(#{fJk?S`XIG=WZWP&vT#k6KG^=f6uGly{7qUc3)cuZE%y@Uw?zYkMXlWFSw+7+|*T` z@YWTc=IfUf{#mV4KBaOa!_>%c@7H|)#z(sqK9GW6tMG2MbM5><;eYfCDrZzaWECEy z&Yx2FX3CB>KgA;|H|)DDIX(YPsy`Zh-uh9!)!=o7zaw@2n!?}yn14o}bRI3w_08tbQMl>*x2T?I`ofy_ zv!-&};ARKBBxM(`>-pbMJHyVusPMO>{4g5||IccF*!i0Zze@4S#%D|6-6{Abgp-R>F|fOM?8N}v7E8L zX1{+^pX2tQ@%`BQ*xjC@d2j|de(~6AljjF|!I+Mtou5_sz7%{);onS+OHSdx`MG5O z^9uim)Oghuet$}DUsL#JQ~g{}_`KD*&~aZ^_-~~2{EG_ze#LKluMLHNM*Ud^-&FWd zD*YRLOW~hXK4S1o3ePG18$6?QcvSg|!MhdytkiP`Mz`z9amyo_)qQ^?7m% z|Ht(BD16|3nIYQQNMX$_v)t<4x zuld&g561lm8=v<6gTDWQ{qRs{eZt10o_}1g9ob*wADJin18IM|-M656$og-oywC&b zJpQa*pnTire@x;3s`A3%Qwsmmhy1wCs~wzE`2R7wZ1{OzQ+Qf$F}j&nK5z4HbdyWL zjc%UyBi>N6^Nnuqv+v>R{2SeTr(e(4`8T@xoWf1M7~Q-_?N{sn!uRL*b6Hx2%?e!j8_pHcl`>a>T?KgEy3H`E`ne!bUA>k9uv)r;0X?Z;zX;qxlr?EH%g z|ITkJ{`{cte@o%-P=D3D!n=Ra-}nF3bsh6R>G63=;c2{@SNJaFH}fZb|8<4mZhGMJ zJ$=<*?)!g%`kONf&tNah?={MY41Pi3A5}atcyQF8fBQcF{szCO@bvnSDYb8R>3G`t zIkS83S3J>mBU=Xdw~78eulTT}e?R=EKk>~te|e_H7hZUn`18?@eiD4qzrUDq^0U9j zU$V+ya;oQT>34hl*~CkAo(x|DJ#a7uH~#We#izATDZS|VPf~bB;l@YI51G+8)4ZO) zsq!m$Oz}_Q*DC+A=h;&D(^BwD3V&Gnnw_7~@!MhYaj(alZiRpIzx(;fD18PBf3@M0 z!gnbAN6ijQ*-KB>^Ua?&rRRT6pVRnJPT}8G{0sh7=}_UBUs3!}`MaR->%N|ZW3sy6 zKdO8;xxA?Gx0xK&ehiN;eKFb3J$n8QlgoO3Md6PszuwUImG2?R??&}o+I{N^&#GQ$ z@4Ke(|MoGxua4&hg`c(is^5EE;jh&=g88d2D*S=h`hIM_HWWVl8y;@)vQ34Lr}07g z;Qkcc_-VJ&h2f9!)7R;|8{GKmwYL83zbgJ~|M!2;KaZWCQ}{uhUxUvp{H+@Ah~l^k zA5ng1-x*y~_|w#HpHY0isPGH+{7>`zbVK2HqFa?SJZlWPewED0%+dQs=*JJ$e2Y zekQq}-JiTZG{&mnA5HCl9sgVW_mAQ)jICE&dvmh?)A-}!zY83X|F*nZ8-XgR^M91* zjsJc&^*n!@y8eBsU+>&ffwIn#fyQh@#4 zeEHcQ+AjX{!ngPngKv9&BK5y-$xKG^pPPPw>{;kn#proJ2PSLXeG<};j6d(HE;f3~-1-)1T# zKYZ%5+@B`vUu1kY*p~Ke`kUf;rhcE}wCmZQm+v!tj@orJsh=RvpZNp&r@fu)*Y=QK z$F{UDasMfvcj^(Yr@49whsj_6!>e4AdI=j8HP~QZ+C{F`S}$+5UZ}zQFxy-_!9~`(x_i(JWtblWl2M zZz1<5^i8vR3m4gz_Ny@dfbW%Lzj&2v-7n+)n4ipJJP+*?9G`kG@j14oNqq(xkKj*v zKAO~LknhQDuq`dB$M7X;LDH=L!X>t){a?msYLs~3mpM)g-o*RxP+MPN{%BHeG+_Nu z_g5KDTAu#bkMewf&hydk;rZly54kPghxQ9kVZWF43v5gKH2d;B`TBpSf7)9ZU)k^e z3;LryBG>;n#*=Mnw+wKc{p{E1pVoLG&jUSgvMudt*gYE@&wZWy(Qf7Z49e3M+tTjk ze94EL|4ZhR_FBDui*0Gwp*E~BzVm;@aoTg~Z;kIiX1~GxXwRRdf1d9m+tU7m=acV4 zPJNU4r9I4iZ?XPrgKcRK(EmE?f$HDl{b-hNI`wVNrw#1T@nCzCwuk)<@VoxkoKJh& z53>JDjK|+F9<*n$FYDLV*_PIl=VO2Ke{enRf6M#Eew4sZ{1{^Qy$}Qb*o$n-|NZzc zCi&a_pG)rF@V4asGe4Hxf5Z$f?e@;DWdA<_s>Xj06W@#fem-^nKaIwZcD8v9_p`s> zKJugZEL(EC;idig5xKiXTMr?vM$kAHTJYY%h3 z^&`ypKk)5IntYFFO4jrI6W_*f6w#N{s4ItmtWsW>3`XqIG^9e z|IPKZFL8cc9#-!1$L-%&rS|{&fn@*B|B#*O|GqwT{>M}Jn_Ev_{~_dQ{CQ_n`qDR2 z^0jikpO5)JC!S0DPU`pq{l|YT_T&2ECh|XizmI}|@%Miqj9<;YQu@{XsrUP6>ipkL z=?CBUie!HuN?rdSQ^!A@>TfiphrPTAjo%fIb{y5ctlrXF(y?;G^b|&*k z>VBU{9sf$|_<8iF`0xLMFY({EIX^!Bm6ZN?%`e5z22USK&d)aE}b!US4eeIp3G1olebfo$-$2PnGA5zu!@wFTTH+x?eTbUn7Oj zk7Dn{ueZ0qRyVr!?Ghefz(>{rR`LzF+jmt+^k_Jb1r{uc;oXVZMz0HNDbn znVHP@)K9VX8iV*7z0mv@=7-YzA5#B9X67~rF|icaPq(f?zxV+TtA2Xn=_&p68A<*0 z(zBBKY5h4#{d9xlasBk-;iP`L$?>>;dSN7~pJv8V`ssL5Kb?9oJ>t+C7cVfxL+H)BQ>Pbm~A-Kdm34zdhie>ZkKZ7>}5Kx_(Pi zKV3VT)K4!SOX{Z^?8o)f_1Tnu%6?owUB4BbZjeWOzNj=b4mSlKA+T2FBFsd zX>Kv8pKcVA`e{%~>ZkKdN&R%boYYTq_aybxspX`8+P#w0PjmH@e%egxr@2;AKh3q1 z`su}2C-u|p`J{fDTTSYxxmP9i(+l?|_0z5UlKSbzA5ZG18?Q;~r@0?X>Ze<;P3or? ze{0F{z)fy(y`mX5XCDPcK|Z>8EeIDihaFFI{_8=KoLqG*`VU z^LYB{g=b!siR-6pXRgY`_0x^BS1C8kWDYB1d=Pz2e%HSJ{J#o+we?FEG=6czVGh2c z6TjH{JI^m6TlcfS7QeVC{Ey#bYn~t5cRM^3T35fZ#Sx6Z|Bb~X)c?7r7rgnszMm=c zODp`@+K=_WuJB(_zxrCm^XZEUpHhEs(1QUbKh^UuDZgKTCyb3>x5EFc=H<*k+r#S$ z|BS6)_?-81t|`1?e&+A_^Dij;kdA}pjjti^$T_-o9cukddw{FgOeVE))k3SYD5(et|%FM_x0_$&Ncg{Rl;1PXth`t2?5 zutVYh@__cE@e52C_xtc;N%$^>zftojEUwX~@W7r^`^hT&E%yBq#S`&M$nSu{w_1K) zrWF2*e~`RyPT?0m>EUbI&q;-U-14*(KCkc}xB1fXsarq)!Q+Sd^Uo`MRO6j%zo+=4 z@W0l6Ebr}t!q;`&EFQP6aEoU}@fU@s*9&YY{8dUX7XR8*_>(l=G{5S{XG`I)Hov{T z@79z3c)mUb|E9wCXugd-&n1N))qJY?KlA-(lt1jyc#y?M}l)}^NFAgjG!C&z6yP@xuQ~0|Ke=P2)@I@WB`A>U(Qdjs<9S7@Y zQ{lI#;9Ckmrubvye@WqgqI}8v&tOl>@8$% z$OU)y^z@wRY4)7m8SLD#v+MfZH}vk}P;YrXI5rvvv<6* zd`IPu`W?;dy6)P4*MYlc?z-)+;$6+V&UFQ+yYhP%_Js$+Gm8gHVX0N#Sw2!;yr)?? zS_vzym1gyLHLNykCu)s)u5psm05h$#?NjaM`P=Wk_tn`~_utob-+d2#B#_^sAUGEA zPS@|?4T3#Ea8nShOa`wGdM1LM6G66ru76;7L|$b6=9_QcTW{=bm-dH+11An13>OYI z%7^pSm-BzS^73}|Xud{0fMfa9W3}qBM(ue1`0?f1@!HuFh1QAsj@a%zmXY5!4ogpvFGe2hI8fZL+7?)wMI240bXC*WY~ST{j%5F5bYccLmj; zm+fA*2N{lupgy^$r+L%frP|8gR;@gpuT-X&@+7%H-*wI?3w}EaaQv!b-WHHn32uRSNW1$k&5HzS&P3 zpbgT7Xv4IT!V=>|wTkdSJr`D*Aq5$li}`Y8v0Mok+ttESt=(8^tyIdzO31K{Etjjs zDm5%>3~Rky56`sAtp?XO7aGf4z1&=?oohD30oouXGg{5nYJu`1p_KoSnjPoLt)(F7 z?P&&meSKZQ;knsK{>jTfrODvfzFk3Zo9yybK~Si+CW9r}U6P|qbL_6<&rb%-QV=xD zubK>6`33%|F(GX^ug!V8r0ZQw(nO!U)$XuW*xfI9H#)|E?_suY+FPvTS3tmWWnX@! zy|RzeAj|vOOXcGJTB(sg&}h^ehp2n9e9O{G*f^SRl_`3%vd}(SV>m&}!qRanjI>Xb zn5Ywt@@oD>GhYf%wyWjBj1;Yy%`Z2~v-y>BCEqC3C-aR)es!TzD=Zh5ie;{*?gs;V zu3D(nWW>4KVxF;I%(pA8MP9nHSgGY(r9!z{Vz|Te7W6e*bu3a#_4iJ;JKFfFB8nYp@$ z(k+vL)COUWdT(Mvs#JJks(NpN2hogbYhNS3v;w^}%K0i3v%Hd@ zuB|W@)3ti5T%dvqg9B43=2s7$IC4_R><9SFD$h`u&6nqn zhO^RtYc{O#jL>Gjn!oe3l)<^H-IE=>Ym>g0yzFL3)cn$v4E8%&H@5s;blEDG@XJly614}UFd?76PJ?1}zU6iZbunc>zOV^I0 zAfAMsRH}{staR4s@ArQO{GUPpXUP8|K!iRy#;Uv;DX;P_&>$60~Y<> zVkOV>G|K+Wra#v7du@a?sOv|!3BRw0MQ}%?o8T?-pj}4=SA>~*3yoizW(eP_!(TTr^x@i0+FHNIjMD1;?gjMinAG1*f$M@ChwUydpZC@L4!2a|StbI8Qr{Oylm^wOC zxB`CeZ`Ug|F!lhPtX3}<4xDfC-c*x<&k4dSg-jj_YmE~9AF6pScBp+1sN5ieAD&;hBif^4zWEu!UyV z5UQ9h!z1&hrBfxCJ-q$SiF36^apLryiVt1A^6TolTIXXSUxYa|TMOX2q&T7})_tBAE)J=YA|#TsH~p%Sh%g_|-1%ivZu4}`x` zhN};>1I)YS;0@hL#3mQqY4y2a zzkQYRN*UyC_6eGDFCNl+??vPTQnzE6Ry7x87;-(2H4o4@32#JS2tLQW=|En zf?B00yGo5Z!|b_%p`rdEk>fI2LM)T}s8*JryEVVG4-Iy? z*nFM!0b%v`>*vf2oxCLYMS4?gNPPC?)^ zd02lL9*v#B)IwlR+zSO@XYdEqymR7i#l?wyrP^KrDcPtm<=sZJP%g{HLM2~amJI}T zqaqtcc^TP2-K;OkMx}NxY{-UVxNZY1a_68n6+(fuMSe`2&bMkSv_m} z9v`CE9h1emj?>L?gZXT+j8wHsBc z3<|F}9V<%hnvJ<{+A$Mg`*^=UYCF$9=#1dUmsdC_f{QxMD!#~YfhV!67z8MaD|TD#sfHZeBdKQNFT&5AZS(w`k1c4iwo2xubO z;~qG*(}`}{A7W7mk1g&G5lV=wM)}aR*b(s6u0tn|?Y%vB^2GGaA#@4|9-(my>RPS2 zglI(5D?=v`|A|U*?g+&d%LUoWiC*otX4{Qrwp#F-Ihf3nV+jYvCd)0=5Y1v3%;b?K z^w-G410vdIONsyPyixz%5&7R8(f{2M1Gqcl0Cz_$;O>YA++8;&aCgK7?p8K%=frvK zg^>@?FfgS&YXCXMFz!+Hh1IG$*gr7lj12|@E{L_$Ug+Zx!-J90helAUF&Xd*sWa&m zL9{AI+DEFVnjyLs8c(qt7DZ^lb3%BT*p|+qR?#>Sl$wazqEjxL;Yz-Mf1nZK6rebx z6E^h_F5OoRTi%M18FVKLf{JN@PFlbZreX)war5mAM0_lZ&Tc?y+|j|dd|%ZeHGZ0f z*rt>o^*)ADLA60l)w&ach#yxKa;`%8Oe8F%F#ileiK5zm;+SVBf{vZ-&>+gr`A zgoxM5YHu$H-)gN+_AD3$!SHR9dF#;7++cRNf7E+BCW6HVUG(9R+M}}?)ar*$%%0pk zePG|->06GV_BaeI7etay=j(6S`f`fFexBW3u8$ zScIE69&lO6<_doqPuUdVQ!JmAO+?B<@Uor-(TA&n_&>xX5JbV~6unROWV2FRK!7_o z2p;k%!2+hXGq@MaVFf1(mkM}dQe0oy-%LwWZ6|z$W# zby^q|f;^6Z;5e}4m9Vu`D?0HiY8sCrnBYX97v3rw`(~U5DQ`J}H#H)yx<{QNW@8yW zvV|MYX^Wn^oT=mFd*J*?{&M#&j;tICqt3b8iZ&bEsWKU#Y2c1dixq^y$RCEjC4Sse zL5zP_Ue}rRUXVIVX|_==VKibLMU{2gWX zN~wyHh#I`IN;i&FMHHdFg!Lo=DbX!BLm}u<3r9Jv9DY#&*5-rHENY3yH5o5 zTC-VZ+=MppB{=2tW>zb;R(bAt zzJ$kUp^U+aOF=wAc-rN!TK1qvwc^ZsP~4=rpnFNRXW7=-^NvMGMvCGxS1)VfH9}8B zk!y|&feT$tzs#HC_+)_K5{r%63Y6joH}F1fH&3uQ z&P3sIbmL#xiyC1OV%LeVi3~4HH8VhJ zz&Ys9v)mXu&)T7O^&Tv%xkGpv(X4Q!$k&;hEB)K>|-f=0Kb{6)q!mgPg(Jfsn!0gfUlZy)yjeR&Tl3>xn~|vkw8_ zzFrjjw0}H1Iyf{oGU(i7c#ZLy4fc0;Qg+(AG z^`Ui)O#i0h6+q28C-1Wo8Jp}i!U!QHh}efHF81BVyUPrNOgx!N1z< z9@Nul#*m*Nv)L3L|7}nFZxbM7q!&#HdN%WmVPDR>c`;>?Wr61lMaMne_ZP&40ymX_ zCg>(a(dGPad3Xn&8xUn^bYyIBw10SPz?rlJ%m_J%SQEEL5GmxhN|5cQy))BCj?6`# zuESWVi{-hKwIy(f2%|Gbj|!teu!ny4l=y>WH`kQ;Y~WK}st}GiO+=XSLl!y`MyMj2 z%iPkj5y82L8{XRQP!P`$6EDI|T!Ve3TCG$G#XNKtHR3GTA(Xz;_?{d7o-??+K_z@o zp7VG+iO%txVk4p5IJ4br!Z)uF>M7NT--;X}DuiaxlFt{Q6pA(*wq$5ca{%Frj1A7YGNv(E*HAlzxUqgc+VNUzWE9`R$S#f9TMR~hn5c$ z#PnZz3*OfWcElgi1mO&37Iv7X@Ty7^5gA0Z!*wmMICPM&V-W7$H@*MB!Onhup@0A! z7#thw9~&MW@6W26#ft}H79!@=(Vb$V9u+j2FyTEi!F5Lv5J>mR++I`wB55%j@_4Ov z{OB=6gE(U5rt#`C?;eHsiob+N7?JZMhmM~(eqaI`5`D9N2X38({Hq8o%$y;55q9ZJ zc@BwsaM$^4w)d{{_x5KG^1Dy)*v}!(UWAWlts%aeiqkngo)d?wNYVg4NFu2<+!cHQ z#k)x=wRSOv`KlWW%@$yb9Sc#^BMhHN!^G<;-tQ8!62@^3XR%}Hu;?X>W_S_|9URxo zqDeDSLIz^2h?CZ86tezRUA5houwOOh0j7Lf~>TdT9*K%*ei;tgc4Hez=e^||{? zqDw6h|4t~PSafuwAql&YkZ~4sviA^DT6tHOk1h*6O8>3UY4{W5X{^k-XugtFWWzKV zl=CRs)0jFi=N#_^-l~W>qLj0rVAd-=sEmv1X^P3ifLjVXxe0GSQpy$P>pcJf6$3aEi zkh?Xc@8DI$be+VA+mAldMbJTIeho<}jl_i40+?chC%KE-19avLWRk|@M5m0(-2l0|b| z<`X-0nGMp~92ar?LIC^9tqvEqi4-9q;$deRa2k>mWhx+!N@@^1i1!RzE;*+p+H)xj z3w2kqQ^e6M&Q=#L>2o?lAMUv%;0W%C#2H6JG#QPs;IG@k+wY73BHx|u=mVMPu1>nd z?C6CwKpc=K7BM&N63ObBD-}BATGwEBbcX0>iAw|-1R$89T%{V2QkV5&{wW5=$Fc*11IW$M5udR#!E~-B4D#uGn>T?-=k}77 zB0>C<2WMa$h@r)D!K3)eu*8cXD34$=V|LUUw~ATpEQ=W=ji~K+rls3yLA=VMXsZdY zsPily#JCX20C`looZjKti@adu;Ms=^l2{AmBZ{-kY9uI}0Kjf^nMf{*06`wWIhhk# z++vVKRckEZ&V!(wf2U?CJx@K4sDdVOUiN!mSCJ^R{ABdOQj|QGJ z-q1NpJ!1L@$O4lkN(T}yVZ*4RVI<&O2d`ps>?KwElo?i4F6JtdWGxpxedT;V!C8$#(_ugle0@asRn}^#a!sr_Fh*|EM?vjatH1j31 zyWMQ;u9O#cJEb<kCIs_yhPN&JYB_HC9fS{xD;;PW7n`i+k zzkKMUq=RE*2*`T^>R2i+*-}7~Qz|sCGEzW(ZUK1H$f6wWY9v;?mF|c)j~o@Wi~Io& z>J*$}xw(ubj#C5sjqJlB|G9vOBv8UaxDYYsURg~S3CzG$5+Dtf2v;fA2)PNza4-|P zXsZMY9nV;CM}2$&r4DICz8aAe__g>)0xui{B&nj|_2HVBQD);c_X#(VSx;)6tIuZT;!gH7*&K}tz)9KENKs((GC)me9 z2_z+Xg9{obL2&)>d;xBPbPXbMUMT0`lbLl~r-|ws?iT(@+EQ)z;OM~cz<3rRKQz)m?vs@clvW`H zn9O0s93Bxeg`2`<2z@2kOk~=|&V$eFJ$mvOI#ws7DZJ-^z)+aUHFUCJhR{gIxs06% z*Ga<8k)B)#O)sCziGkL3*WPJ*tf=AQglINTD>H*q3(LmRgpLsJh-yjm@Fxmv5o^Hn zG|yfHmX=8ZQz5Eu_J#W8uocOe_L)bha|jOE-Ranch+l(X+QoDfL8GE549-4u!bix| znQv!BDp5Q?}n3Y1W* zn)>=;0E;1nnRj{_(KfK#O^dnL7D%mP6wYFa_++b?8$dKW^SgOA=j~xLK04B(rzz9G zeS}5lxv5JQ7OmH_eeb%cAftr0db6a%Ter+(AuyRo z7OISLzSM|0(i9~r$pMc!<2MPL2}$=e%}TFzY;n-eTfqv%ty`FBwaMgHtA~k`7nGTc zI3qf_Cc|`K#adgU;KDwl^Ngp|3mspzXQ3y{r6q<0=eM9yY|axL)2q5WJ%6-WCM^)F z(y1FP74j;XH!|Er``J*e!i7Y@52_TmiCDYXs>HtG*a#w%!Z68FE#|I}9^4fAl^Z-C zejM!(^{w6)i$+fJvc%)vJHU8dW;w=^WF|P>?xABue=+m1%F2e%+v?s=+8Br9&ee%xk?exMO!rYLtZQlj$=?Kl(Xr;L%t z2gCs*)Qgz0Czo^ZGe{cRZa7MQ*-?=*5=4+Nc}xZCmq^~=QF_i8zwiun8gYv6Lt;sV zTB(YtMY=g%8nVV^D>B&i;5l^Aza4PkY`Gx`oXME3JhLQkAjdtEN9-+kIm=0yO{B*3 z;cAO{Az9g3m@e)Q$%7vvc0WRD$LL^obaZfBSHq!SIa|i44mTtE4tmPW>@5e6;vi&1 z2uC{mRkW9xSu7{S(n2lYkXR)G)Te00nG>&NPHh*ejyw$r3i7Bct7r#M7M#W9Plz^w zjp@f;G(f@9Ri}$snyCXa>ux!tn?o>1VsxI(Da$t{4}K;gcCS@fpxxZlk+z9te#~hLgXp=-!Cm@n^e=J{jgOY^84dTX*i?(@=67#CWptH`8B7p_- zXE~j*gv-<0GkpY+s&1}DvCl>Gr~C)%_xxFQ<#0;W#y}DrejR5SNaSlN)kSSF%2k z!~;UY4P?6I-}(TXcTfm1aBzormlt=c9^r7^6Be|FF=V{OxRZzw)fvowxCy<9y6z`IJz-He*mpq1fW=R*uSm?3@E}}kTP4*C( zVs4cqZ)ff#F+sHo2%F>{mQ$lbO5%c74`w72K4PAtzF6X#tm*48D3^)^kAUTP90K7= z*)EILA&VSVDHdGru654$Qei*KDe+`DQ>n~)K@=H0GncV0$`YJE?YNZ0Z-gIq5(I39 z@q*>CQ<`F&VV@e9v}rGn(cK|0XXp!4O4{b4xyvZ}`Eh;%@s^s=V)_}xDIPSyqRvAq z@TWy)sn4lh}-~dYT=-u~4OpzeuKX z5*%?tuT?2_s;PseBYtTn1_s;FB_KIqJIMy!bi^39{9;q=U&XG=&U*y@v<+FRmc$UBqsTVq#6W1Cplu0r`D!k1gzT`P9DKs1R^F& z;*Q6dhe^EKk(UX__E7)u;6VS_z{ohMZ2dz%*;rD9Mn^`na<+OX{LFLvA zL@%iw=FOBeH_M}w?j<{o6;DpzclMc@oT`$zd>-9Kt#lzE69i3{2nUO!Z&;U!y+hMU zUVv`3tyy-;<*DrjIiT1xc*rCdR5qg|lZcYNqKkvwC-z@Ph2Hh9Wau@ISU{o6yYRs< zI0Y-O(RElp1!IfRkoVp?z9|{w;&p{-OP;!fJ7sX?rUTjRNN={kH#;!fKRl5gn#c~{ zksY1L;&^4j7b=A;gdQBkdoY6MKvqNF7@19$;emrfZ1yMtNw8EVB6O>CgX^3xz{hOo z;43UWQn>=*lprNl3Y@JM9Fn{?(U1wt`vfhB#wC7;y6m(EeQ5;eekD;LDV z1>Ity;HJ1s2-%36*)cG)^Bl3@MyWf)1>WHassvl8QCdKqEOLn*i_yPdN}=;awxY{{ zfrohifMcmnzUmRt)HGAvoCW#LB8n(uMfCw3f^Y$z28fuKUg*2XMX_(OYKc#9GPx!$zDT$z;pOo+js%4mur0TU z&IsRv6P<9k9dXl08mn0<1QsNpMDT)GARo^(h=3IT!L3GK|FQS%f4cCQ+CdoL)yIhkGS1I(^2W3(KSrc{fb3jWPx~u1H>mHv_zz5R4TW z>|z~W#bE-CF|l~Cr|Fkmz#Zigg=5RWh}0?-#B6ahC>j3s1Q!xIb7q)K`-z!ZS8~JK zGe%BYyvN5`eDKo_c>_}X1rf)#LvHfq_QG87NE2uilsrc^ej}8+P~ZT{Ic{f>+#w5VRgbL5uG}f&T(+_3#g?pW0l|LsBEW(XSaMF{@n&CT_X=HEBEy6C;=`C|nMSRe;2}6{7ID`CCmv=pXAJ8y_1V zqH4v^@YwLk(C9GMjL-TW&yEj`4~=H~M@I+91|NXq_77)$0{Fr5`LH4t!_9e?$JAP*~QCP>=U||lEPPkE(3}rL$JhV~Aa=aK3B@zUqJ3sQq$jv>mt>e;@ zX_wRDJNkvF?T#r3rUP}b*Qh5KAQ*i1XR(v_G7%C{4V4ZiCeAuy=v=v#){P$20 zQdZht#vxtY->=jWHA|GKqfQYf1mI3KtH)zZ(nw6OyA{J7Pw7}q!qfWY-OfSQI{Amh zQb-&lZ%tPSxLb%5+C?SB$0M2;!_K5oPZ2fjii%UPBhEz4&}EFvlE<;#FAx8h`fN0AyFMdT)d8?Ti`N%8Y4Z144DxD4f8;4y-6gb9-9b`IKO~-W}QM39lHgI zfnq2Jg${+Kt1H20D>hyALa7Am*m=Yj1%r}_(lM49<$)j!eD$j6I?+cv3mzT4N5>d> z7G10D=vF+5Mk~R)iQtis@KUTEukP8?Tq-ZNcJ3aCOC+Hcu|vfNB0MC1%q^7{pd*By zGszrXS1T;a)@9sWUJGFxxi1MN5T+?{LnK!WjSdcH$HqojUeXUM8Xm=#a)k`w2Du}- z1CnikjwIK_%4NvG+fE{1<4cewP$7PkSsbT*r=$WRKCz0=trh*ptzv-CU0ypbW?s!m zOHorFc94=_k`(R<&gG(ltllYjnNxW9Z zz(&PWo@Q5_@QPlNWKFlg(W=omZ(B$rbVNhjWcu3V;_ZOMNpPYtDmtED`C{w+z)cdE zj*+N`{HF*5)sHC(5_Q{j>C&G28ijTa3f)R<)H!`T;dTyE>aXP2@5<{4V=Y7n&Hi_R zc=15O-ejhHK_kcMbg~b5)bt)Vq0NqM*JX=P?$V03Vl z74*YHLxV(f$*w0s3pa~Txd$m&zb=kSh%7<{@pDyBgCgIG4U^b<8iNR~J4S*4YDu4P za8J~hEODIl7~wc4PaJeAy++59DYB<#P9ha0H%6=D;^pwlW2eWW))4 zl9`~9>)Ct%B5FU%%d41mb*jCfC58YqWfj~xDa^rQedBPl@;xFF5w&)62FtI$jgCfn z{<`K1QoMdgbaXpj5vXUf!{MMYp-m5$K#RojpfU4UJ7Y=S7t_KW-NvMH=Xk5vEuV5a zq)e>S-`rCsJSUC(xuo}Grz3Y>u$y07MJ{v=;2}$k@;zUeB?S>=^&`Q~hFm zWNds~%V~o0GY1acin}Ym+=whr!k}mzGC^K!Eik#VR!bf6-YYD`={bvx3C||Nt0Qw& zhMQx-v23FqOP=D9d*xGnrMB9ueB2M~F4y(E$>R+@=7TUN3iMYWG`M@hv4p2f{^OinsHh@3M1F1?~*Yk~pw zJ{JhELV}WY>9Pyl5-V9FAgfdvR7A5Y_8tp6_Qrl z+&M5dG|-QGbcpCA|79sUGc-0dG(L*Y)PKVv9)pNhLHUYa95Q+6)UNF%;z7~REtuWw zc&ZEVxO^yxe0KH(9#vTw=vQ%eba@u)T<4}L((*jQA&_+)*L5yG4Q?(Oh}*HS4!&PL zbV6*xf#C{n9hwGFoJgkTh?6uOZ8gGq)mMv@`yi{)$-8r`;3Qjvr8AB&J5uL!|Ixws~%% zYr1(IQP(7p+2p&u&SxqSV;W!F;GT~(d*=vsdPLeQr@ePv zwW94hx$8Wdf`ssC3+RZz6ImvKb%f_EDrwR!F8&jzMv&(vwH6(}_P*DS1U0qS&jUVL znE)5KAxZSQIm2-Q%xyT%G(OY)WtXKZTu|oHE6BFm$gTP0 z9n(wSBT?&5Pz~D$$&x+z8F-u?%muKiONMopr8-~A%h8)MT`Y_q883& z&M}v!AoPooqUMgnnWzT^c8bz?6|7^YcQ}*hlIFyVdeES*G6&|4=+%iCs+5{{!Of9h zAer!oL?;k8kOF;o*T% z%ngb5W{0yBrWpq`GSE-Hl~3Px1udd%ij*cpG1JzPUy-%n7tWkJQmP_PA=G3(_NkMH zpliR74VL0J}}7tK<_ zF)e54p<7AVkXVW?-Qoe`W1b5e*q6@hOxadWMVhyO1kXcrY>&wI<5LGa%>TB9>!F;%avu?)sx zi_s^BhZ!)AVL6wWs}S%+MF04D4>k*YAtG7^MjUgvFQZoxHL#$CIOM6zWb=2djt(Xh z6dW1E%%|=!S&+k09%^J1rGwlj!imm?2V<9EC-+uVw{=<35Js;&P%Pdz)YQkkgm*3+6N{ zo=+!DV?t zu6IErC+(r1ur3*(E_9I7yaihk4VroHSClXSRbV@G5)e=Z{bE2Pz>eu{UNw(rGN=*O z`gQS=`6t28;2cX=Gzl#_B_Ttc9%d8Z(ksOhjPk?UED%OX6QNFR;jpsGDb=Pd-C|CP z-k8(?g^p0H5<@J9D4~l<8HOa9L;)~i4L(;)n6{66P@m2(A{Is~mUhIM(hG=6OXYi( zD=U0u>P(~AYM(uKe)UyDLqpjyDU~*cSYjEmc*4N_fsv8X0TPs49&l_;GtyRa#X#Rw z)uv-J=-tiWY%@4U<#pMf6_M}4-)M!-BHuo!WoYGHIX)2KSTMutikNXfS1|%_Pnjwd zEHBiWDJaM1%X~zTNW88-D8l5If*pL*)7c@>A`G`uzD7Yplqf-XCJdQsceXU3gj%Z_ zZNztvG+nJI>P8uQ3H2ovO0483R66CVqpnQi<^7nxCFU!S8LwL-L2rz;PNGQyO}(el z@HB?Xyb`I5^+GQklIRUqu@~I&e*8H?CSo1zYgd-{d6#9>kGIY>pa2TG&&+vWcXZA+ z7PhEGqCiFGD5(h+3n9uZ8!1NTc%OMkXGJwJ<6mPD@^G>BxK!c6VdFxVwW_4ci_XV_ zGOAV)3E9pV^V&f=Cgh3uyr!)&OD@2ueoUdQ_}Uwn-{>C|9}GnXWHKQcRPo z_lv(iaRuAO8&|?5B&pgjTQYd zUxVV676CIjNW%V@)?#)E_#SoUbV%ofXU@6ct$OjePsd#${DRz2U(ko7PZ2gK&M%6a zw5UCFrU^c(Gdaerx`PbAn3_a*K{2IL%@D7w>PcSfaXdM0`#PD&!agWcLO`(1rp2rb zN2tOn-wR-^i=>BoY43;!e}jrH+0~xpVcY_jay2LQzWkCV)KM4V#Ga7&eJ9T0<)2@< zh+ES|=}#W)l>+HX`&s~FpZl%}_YrecM#no=ALk^-Y}=EjeHMY$Z?#8{SWT4u&W#Xq zEk1=x!gJslYD6c_Ci1Qv$7JKv5}kAf+fXW(5Vzpdm9k2XYQ>V{XkkG{Ojl!Yh8wO< z0$76StWdvRoMe0`2W8Zj-J`E+m>s-k6bxq3=6ef|CYS<3uT zG@cKZkqJAD*H^?4iLqnZ@vK&J9wu46zkir-_n~i%jtz`v2gtji*z+K#4-aWoU8vEE zA4HW+lJhdkN={E@{fG8}oK7NW0GvWFt{hhimpO|FhopZ;(p7?$f(cFs6Q8BvaKeWp z80#k};m8ri^ng_RIwElxah2gL0+V<6oA^&i?2NFOK*^QSI68~jzw%k7!oJe6D2k8z zSYiIDaS8hs?Dvazwkaa$)}s0_y~bI3_}Zvn_#tmh)?%$)T9R~h6mC4P@*2!~53I}< znVO7MGscxUccEU<%FLCcb`f3r9&}v1zb`^&U5CwNA|5$c^w7)YM@kO4&-=n&eR)S+ zEa1~h7=QnAar04V$=I@Z;8`aUrNzL@@h!_Yqvc34FmlxLA9;U=WuV7?)Qye-5!kA$ zjsX$$6355}$7W^+C`&s`;t<7JWI=a7-ciy5vScfQ+#t9Xu}!(~4o&AsKEcou(Ghd* zn!*J$cHT!@-6kP6)d1w1bSe%KD7}rLoyesV)x<^5;0&-p&s?3G`HHr*i=iPISm#AR zKbmx>Dfy&-(}dzqx=0riX~c^}IY8S_JAO2Y3CtZ*m%R9ZmHWjj97og|PfnC5AEJeE zbgom$DMyPG(hw$lj+-;7niL{)+rbZA6w7<@37Jszapyx8U+9a^U<>#q$YL@yDG|nM zRwv-(b)gwa8iI_rHyMlvM`lAm#ZNI#M_Df5)~@0or)nCtj7fPVlFg@dd{!%qTgS%u zl#V31vX)iC+hoM@2@%u=7Wkp!``k1Ojm1($peZf)DzEIg7d|GfGO}G(lUswTnTQJ= zy)oAaZHok zU&h*R^)+;u9`OVCD}|fbjBj_ISK#c?Jgp?p!&UNclKY6tlSq5#JQS$_(@Khdbr0=> z>pSO^;Iv5ckGAyCxBh#e;AE%JQ`#!4Dg=RA?CDaGEiJ*O}64MMAL<2kx8 zS09vMC7@6Kab(fO^5}8&PgbdbKyE!4i4qhF9is%r=osIr8PuAghFOwwWHkzy!85SbDKI7BHGa0rHVG)<9$QD&o- zXYhu#OKp4tUr2`)KGBJewFm-x=L>3gQS33DMZT&lHU$6k$`ulmc&sEQ?u8D88n#*2 zrznv^9sm9D?Qth9N=?(g%o@8A^2lS$G4OucvQ2m!QFO}9I7Fh>ya`_1_(B5Vtpf2? zJUgMWmT1|;pd1zdb(mx}X4)D;*U=VLjnr1sTv$JiR- zbV)06D-=d0-*1EvXckg}k_Jb#&Dk%4aIBQ(bHNMSKfF>s2!avf0$ z)hi{KZmicAy^b&8U=DCg5FXG%)?mmvmus_2!v#A2qHX$JZe=@6GHLNrm#cbY5RcDC&)6o;vSV?}EX)62~~8iF$=!*{A8W z1+-BsETqKCM;SyGx$eaFS>!!kao310Wi66NWh2T+(@9gMIDmHh>d&I9h#3P4h>&wQ zO~)vm4t-*Ctaz)1Q}kx0)YhurkBAZEF7ZVP-GDmD>sA(;Vg1AtFK_5{QPsS79Pvnd zZw489E(y@-O2T!K@8}q5<0SUz>D=QhXuq*57T_XI<8^3qc?F$V7y#|dy8>L%bKJMV zNfCV_JA@HP{)wn_&NLN=jeO%7l+uxNUNrGpIF3gWxYqU(6_V`J9$SQwo_`lQN+W=o zL4qnXE@MQd74&s3Zt*x8B}G^jQ=Sis8&WTb>l4~BPIMJ&Ib9CBw=q323PHM-x967nH9u<*NQA^h) z_$Z4y2=s1V5+N~W!q!o;AC1Muzc?A`Z<6iDBMUEQeSvXYVzu%$0wGN2Ceq+9BF~)t zJ!cM_Jb8i@G*En{C}ZZBjZmdvic1k=aTcqyFvrez#dJd-FxhQXC94bFYxYQ>Syp|x zg#x0Zh?w;Hdz_JHK{vQPIdxtdx`hbP5jayWrcm4)D`1dHoQ|F< zG#d?aTI`wbtDzs~Ta8Y>62{1tfA@~^AhlB;?b)FbD zr*K5si}3=+$W6y!-GG_$or=<5Y51nS+g7rp7{4U?lL4H^1D5Zm!vp}_!rudI) z1HUg{K;yxoL`^1(|CmH zhg6%@mF-T6MInQ&=Hyd=2XTKleehY!dhjtDaZAKpHBNm*Qz0hf5L7>oA}B{U65x`F z7Tw25_e2zg^~;JWaV#8sVl>p#Pepa6M1*W-`xzc~l!wPtHXm=$w;Oe^#2Iz5MI3HI zl{OjIqPW4OA~PPaxViE2nG>X3T5TAYImsJ%!Ek4Gm*h~Kj-Nk^x8RA+_bgm0UVyI} z_I^Ar9ues_gR`wBW`xI${7cnckvnHxcn@ZRDLvk3MkpMyh8`+8Zfo1R8V73Kx@}Q) zW>CG*oV0klXdy^IP)^LdL$)J!DhAgfsM;;p?uZ2`!)wb$gwYC9Gky>YquB+V5erZ{ z$?HN~z^TJWez8S${tX;hv-h8v315cME+I1!W`(G&1Z?oqmpWt6JJ9%ul^uAzS?J*O zw$qR>CgqdmNHEDh^H!*j1l`2fvTWXn^|Iu+v*K6?KVQ6uqOM2(KiccQ|5f#t zey^9LlMo1tP_OBbP9PzG$RbL;PA3Ei5H>{x?XZc8f&z-`ydYw5jf&fh&NRx5sOT{2 z=!`lV#Rb@8_I*tExLaj(`2CQ@Qtk@44rkd+vU#>OKvA zGyK4rohqPJ)x0+`j9;i!n$F4U{GfoIx|TEhO*U)MV+Fmvpx?yS_t5;p({*<2D69OZ z9_P z%M9KfELa!CR)l^Of7o!b$B$9}4{{86#{MZ%g!anR0mEXcYrYO0{6~ zmsY~`uok!2lx+Trr8XrCOP6|g8$T(pZ2?)8t^Meq#ycH|;?wC^F|{>hCx=t({7X&_ z2GwH2UeWa0scKu!0p~qt!D83>@`%GL!)a=^Ugzn{B2|ZN4x8I~8~=l|Hm#SdWy&93 z@OH~;VT(h$RW+1r)XaGOg6E5xs9LqEeXFwIq++N<9=}vs@V>vVKB%wuy_~Hl5EH8D zg?eJ{RXNW4QACf^;%DfOzf7~u>z}6g)UJ4%HI5CeZB+NesT_+x!qt97nKN}Hc8qtB z80+$B*RWbytJjIjH$9@=w`kFKj?M$q0@Q}|`2Jz_y!`l$)wb2NewJK)O#D{adMyn_ z@tLA8RC(7=g6t@jr(C9rv0<@xsQusntts-$92^W_Z{Lxn;E4w_sI}FWPzv2+w{PEk z_RM@k>eLMuL=woyQkQ>T_!EtSwN1hwA>M-1hi_?c;udO~4o_^oyBl zG&<}wmd~m;Llv)plbMEhuv+c2WEnRxw_-lD8*RUyl;evV@=Q`nu0Rt(| z+C_dTeapOVqtaME`^hUhkV&fQx#k6W57g^KFtR$Zsi^f0Ylr=523wAC>{c641+g8l zDRj5P*kgs(14w?~LZzZt3r}5JieA_})zyV2fZgH=b4UAk@G%%t|A9G##_3CSP_Msg zuSS6#c!C=y6e_XsJZwSlp!Je17B<+7b4I^&s`*_UV0<^p-cr=BtUdlJeyUM5PnA|1 ziTb4n+uqTOc05v{Z-`}})0y?$NFA)Ld&>A|gZj(kd9|3u`&U{V@~SGY(`acodM`j@?T*X;_)27(BeshkwoaK3hhb^M zBm3u_efrt@R>s<&KS$fA-IXJu{i}6LCmy7<|6Qwc}>XCS`M3Yy0 zw??lz6%Ja^;Cy3#%tn0(dBX8)AA8~U^Dj7WbN{T9bNzTXCk&mOuRV2Y>M<8TH8lpc6xZlS(L-=tO*ONy%*3ItwvS$oi`J_|iumTv>Zit0+XmI@Hv!5wD#EiM z8_QIY!-jvg(5UVA(`WdO?8ayO_2?_F?_~W4J~H&3FR%Izy?uAzU(aF|VMkZ3zeQB$U<}7C7_G+Q| zw%IE@JP>`F{c5<5vB!V*HP@fLE%>MDc(&;Y#^$G7j$>hVVid;Fxj&arhd$!$Yw96w zYI3No=B7{EuAihkmjf!!Q*rFjdFi|<+~?Vz_RFsL0}XbOxuWc(aR_T&w?Su=*|w2C z`ZzkgPppniHJS=!wDN0Xrh1fY^A0O>`nw%ExnEr>v!W|Cm%c_{Yv`5p@Jj|PqW_0k zEGw1Tc;vlC5U5e)|C@Rn^+}OFo96U`<2OD;FAM4|SiRn=52TMdPA4+!z*rp|dm=w| zf9x@OKm0g-H?2=Mjy*vq9iDU?FNy10q~jiZoZi>bfkXD4lTI%=R);9)#}D+i(+N6E z;UxXQuRhM!_t-iET5sIy@I<|zuu-3Z=+$z45T)O)(pzIX`$T6h9HY~qkJE8y`dHiE zMbpo6>+D6nW2U!&j@MBt`n*vGq)0`+Z`8qy{A{pZd^qW(KhDg5u*c3%zcPR3H8)sk zduK*jdfmWB|9YKvBJ`8-kLLuK4bR;1wK(mj9X!N@=dTfulG+hN__s=+Y}V zD~bvDHT2jV>!hk1CR(b9p*DEE)0Bf_46K)A-ag9edI7&c8^?K{YxVL+@f#CmH~LI=u=V^}GapV8)MAcPjwkfc%jW&;pm6jZOAXsL?Zq?f#=h>pcx92`yG$h^HLd9XPoi#=KiSD_uEAk%a;j{ zre!iC@-#QDq#R|&(|hF>^<=HEq=$Zf;mQABx{KjBP=~6KKl|BvD4PxEU$rBD?sIJu zB`)0JU{j|Gi?QcEcf;^PZr+t?pt09$RDUp*mXH{s>b`Uo;|)48lhvE{D|zwfD z+3p>iwAhEW4)tddNVN#tYgb=$&6BLToII@LF<&R=r))njd;;?vn_fJ}=N9$axDR(; z;CzDmZJ)bT^SQ`1SnGe49p^r$=-Xx{v*k)w-MyN|!-t1A-?)R<7VJGsGgOta1^Lj| z0S`X@}EcE1z)V{9J~qlj8BQUNt)J>F1LM1N8IwvE%E-G;~+)0)Mw;kM};5LKX4eqtGXPR$saJTR9@b34zs|kt47wfl}yF0jhf4JGg zb5o8F9yr&+_g#Iyxp!aW?%cWVjz7lTYtMIg?&?`!}9G59zm0yI$kZcKSVqhv$MG zg9p1_yMtYdGn{UBaPOZ8_4sqn_u6BfJ_-4n3*kM%y+62v;O<`M^s`5Xbiuvvg&r<; zxjPr=?mNWwyT2Xue3jcNzs=pb;BI`mhxZ2klVhCE_CIs|=T7nT+k<=Ut*-z5$2q?7 zG^e}&Sm#rG#N9nhJU+QPl*1kmU%NN(OT4_c|JuWQLcQ7jTIV;oDDd6p?%k==jR!r) zW4+ky@%KH~<7W?Y_x_hT|NGzS?)W?0&5t-O;hHh@bhBUb@a}(d z_rBZQ-5B_czbS;j=wba(vk+`ao9?(Y7wyMu4Id+q)1?tPED#mC(pzcYkCAL9Ss?X>$y@3&_Q zxA*ST+)bqoHy3VG_fX9rv;LlOdxd<5f1Ze531F7W4$JP)q=j0Sr692jf` zJxWCSRe=Wnkrys@i8N79%U6(#Kjy{okVkabFQi4^BZD7akq`d5tX4>CG>X8r`Y>7f zyS4mcyGZlk;71pFp2)i;rJ^6>;Ws^ptF+Ld2Y4o9;pZNbbX?M;`VT+(TE2X_`Mu6; zENPM~EAgb6o8QtX5iWO<4VjB9^pAKWYnFb5fkQJIbb~fkrHpv0g2#_O%hbN`n?9>2 z%^&j&ZggURYjR~n!xTPP1t0y5Y`mmtsFs1lC+dT&6-h1cxu-SVlpE;Lp^>;v2oKfr z-U#}e&OsmilsmM}$NeTZ*xYSZ=|fwFo;zt)wo1~jVd&6Ia`VG~NJ>C!_USop@>KA+ z&~(*F;ivv2svG!`OCMX}&BFYIleFTQq`i_p3wE%TG+cX+ADllxmEGf)yI%hTd&}PveC7?H(bf!vr zsbGGi33-QSV^fW1NNYN@s{R3^fVs}jA3I@{h#wsIquX%3&1OzR-FWefosaR)ynN9i z4fz63RTFT{o{LzsMoP4S3nV)ddtl6!z zwWLWpUXIYDN`!0lVvGx)MrfP(laBLof7NCqjpeIZD@Ub<5BW;NxMTb!ti(ebgr+g> z;{|z%wldr6Kj^uKf(?z&kn=HpnpNAcr=|3WN4G57XnwP~#!YbJlQz{lT~GBJtMG^N z!Yo$)^ilXpD|L!UkCpIqCuygPYdo`dGy0qI;YSB`Avu2dG&XH2B2Ch4n-1g`>5)cb zy3v?E0VhuS47)48G92lX4M&=vaMJ7=PuC}81oRtui%^-}Dhhz_TiP<6EsxE~n~8Ut%<7Dl zg~XM3$Llk=(iGs9-;mC9mUiIeMZU5=4{0t6j!jyc7~w~*%)ARfJk@2+Mt@SI=7(N2 zY%=1qXMx{kdEFzA!p#n*b6yyK(oW`HPoP)7ZTcX$73u)I=s$^P|KQaEz_``FnXTMD z1GBl6QP!;NnRE;{eKa{Eozpa|&ZC2{9Ncu!FoGXkL$}op%OeF7aOK75P0yFU#Oz}{ zm0f7KrL)PkvKA0=$zWMzVYOM))6zCu=65~4EX=Qt40>o}2IFrw%%%-Df6=e}Y0-y1 zlzW+WNJ@iSebf9f^3+&R>YQ|!j)8NJwOZyH|4v~vu8+sVN9zkKQ{yFL#IzD_cJ{KK zEh4V+Gn*KF(lI;3NAuo;BaIrljU%KzGx2{qytIDAH68RH zeyeY3)`Fjp7hVs&&PWU4CM#>0T*8{b*|-zR%i?K|C`3GR4>-X2W4C^h48T2YV+7ZD z%E1pGrQ8n;o2dIST8pcduXHNQcSMR4@A~^Vh+Kt>ioe_3Xoi|*6Z0!2G?caUE8BIq zlN)Y)wE(X8x6HO?lQ4!7r=lonhT3gQ>$a-On)x=ghNoUGW;bnEL|iOOf21cb-A-Y6 zD2uZFsuazS{`w^Xqk-pPy5VVcIPK+;KWjSt@YE1J8*!~G%X-p1-P;0bW%8-WNA+z2 zKRVF&;^%IR3|rpuXId)(_361%KJ@K=r7iFnVZUrN(zD}!fr?)%@ z+Yukj1hSG|%L{ZTY=LYn)*_#Q2dHHH93TL2vxT zjs#^`bMqKBo?@c;lf@GrYH1TLge`xXZ=$Es%B7vokI%~dxc&|8hB&?3RwWa{=qr<2 zKHz5=ame^1M_3W{bADN^e;0wq+o%umqP02}^#ef;VbkB$wXpMRX2fw5X8M6k7`|%X zg`6^;rXTqcpQOFKkQ4c*eb5($%CO2m>SOw=TZ`!luUI~w6g7JG!0YnW`q?6>>6?}I0*BY2 z9^YiAv6A1=UI-WZn4y|k*&&Zdpz`^NgI8W2(2q)ew|;VtREJybz97j=cLMy>pM9b)8ndj83Fp3y|W^Z z@fJ?ABI*lY?cteN=m|5Y0w#<{dlqHb^=Xvl;o)YfpXE0xl72`Z@@EX;hagQ2LjULG z!90>@Zp1sktgJt7kCx3XiMRabRrw;1F&sMLJ-?dhhp^G7*+gE8*RoR@R^{QX*TZIy zRFjl>@zwru$bU1|2Mc$G=jCrm=E7j;!<`(kOiwVX@P5|Yc^EAdN-nKXAg%uao5=Z1EzC`a`3u>_5pjfqHw_KB84XXic8lU*vCCrVd0G zes0Y`ctlyrSM!bXth}<6?QDy;{vhuRqW+{`Q5#>}ey!48$dxkXct$#&e{qr4^4py3 zMS1YgUi6|}yFxrPYHj0Df6^C)8Wq)b>o2?G>Amo$2q24wRVYgRNwqNK~yDb~gqbJ2# z*OveUF&?5A@Ak|~eT~uJ{$n--`e1{y{E@Hja;qHUXZnsTg`I^h|31C2F!rJOMSHvb zTHTmG@S!0a{*2!9*V$SGe#ocOB3;l0-OKVMePgJlCs0+qO@Ko<$SdvT<$$iDG*6qka@2EqZl*I#%i1YGQ5+yS!#u-#px~^>~!8@xshN*zzl3 zvHqavn$?rJoKjyAXUjv__(|nxAJ^a5mHJ@b$j|wAtb;}#`O^G`|Bc?lX1yv*eq+3) zw@?)?CZ+x%y)lG8_Il)nGX+TqTZAeQ2?!g%R$AK2!kw|Qg|K3k4|#6!ykjq~&W345G% z4;F9ywEu@&(%1S+ldnD2Jj9c}-X8{i=C=p$zAOEklcjx~-b)R6gr!Y6KA~x<0>&lY zDAP_^UtK;)Jl=R{e|KK})9@biWA;fq<@jv;vZYLytNf}xMt-iJuchH_?Muxo#=Ac3 zKzMqm&)QKQbQmboyZmgP{Dvnl^H*PQA#~ku2z&mUWq)MhtX;N$kI$OMS7}TU z6rPv9Rrbf=8ZXR@q#>+O**@T>NYkIZ2K%=AiYUVxt@KKcg^iIHhlSy3wJXGvM*MT= z@SD8g5+=VY{bqJkjlY5vXelo(rZEq;D*q@I6#mAq z*2^r3q#!^Fck#>;E%lQ8zQ z@gmsM@>BQ(lK7av?&+006<-Tx#FJmmmfA~#K49tqdU?n%=`~p|^k?)TKUSj9I=%X* zKyP6;x5c3!4B7M|&dQ$*&eJ!|ru!am`Zh<8x>^Mfz3bm>v^IO#^ldH~g%R@oV(@0}rFWb+_~Ko3&&8Hhr+4JW(DBHG}=guh`psJ<8XkgmzjuJ@Mp^ z2?p`p3Lid^*Z8##U83g(RySG4nT>?jc?UfH*cFzHpD$G3;{Ca=B3*0;o?e;7_J zJ(%TxV_kl;Nc)vM&E7iQT7Fbs&54kI`026@f~b#5KV!qL3=JI-?i{R)VbekTbyL9}@MO79lPAvX zJ-!{(!p2YfPUIdArZp2s`gHT=na!K)^jRmDV(=y-?5&WANU!~-nQb9#^)VaFiOY$ zFe|=N-{$C&*dKcN$PO|p@#qyd0MM6tj@i4eU$dQNlTHtfk8U0&zp8($cuza(+f@fz zgz>=SseZ)%4jS@1Rj+TFkVgG+RT?8-q19oku=lOvW z5^wS{t?=c67xnuR-6VB9g{*zCdoVqS&;1HJLj zCbUAS9xZir?k=f;iGM-HY}$dWG{|o!%EX#9;$d zuBMNAe@)OTda4%-`bcln$9jH>w9}aNc+a0N;7fYZvY;f6{HVVk9o7Iv7@Cn`W|Mgt zR$rOZz==10g%+r4FlAVQZeCc}>g)1@R0Eur@W=?g?YPCuBYEE6#`Mgu3q=q%`>Fh> zV1%J}a+e?D1zSA&YJM`dzL{5Ho;UOw7KTT{db*glFzF=@(888~O~gsuK6k^Y`NReE*iHiFGdKjY;C zrpD74(GDVh^hGxoa)eEOFi4Eo`(WJ#?Khk5yFSo|?L145y~WWsOi9nJ-k|6=T)xpu zB6P$Vz2&c}U+9<3*7^(0kBWXRtjB#jTB|L+@t1N%-|cPfLG#N@11NFGV>ZG!5`>A@ zdQ#neUdh+&nHeYXnBIyf(3?F3s>WEn%gfrm9iHC8vihm;SmHZlKo_Xfhty?YZ^_Bk3^Jn^Mw}mI{r1$)&IOQSC zEqfg`bGg&Iyw+HndwwjQ@wIUIo?d)3U=nBcYqqsss-;);UZV|`$lv?xq6{x5zq7Mt zSoufYkzRGLm~HhfZ1$0QExn;ayychm-qKqC zA^Ubucl|xSnT={f1U>pP*`*GaVc=jduiwg1h>z)qLwb|1@`X<+pZ8rteQ^55NJmdx zi4XjcYGEs{q|;>(B_4iyzd{38EuPvu<@v*YYTUeHQt|_WaZE2`*#-w;uMev5o!sJS ze;Ti(?!dx9KbgzxujPmSLvQGio?HEI*66vton9?y-h86yPip~D(rbL&yvga2ulbwg zxqRcN`41bM_=7#nz*YLzShJY1c+^-XeX|2Rb zZ~T2aVqvf(&22#wyt>Y;a(cn`jb@cLlg9hUWo#| z+Z(&5HGMRnkbTID*;~-jHvgR|`ox<(##iah(dEksTfFTrw~H7?MssGy(z`u7 zdSjz8L_GPC`sR!DNwdiH%Axf_USBm`Slv?#i{+ux)r!5OPrE(6fst2X9XcqMgyA1- zW?}S0UUSCdL;h4d^mR+5wWl@y{R#UmmPak<(4BID-yj*7e9MpO_gJ^tF6HO80b9iI zX?_|1SYBem7KQU}`V&CH#!sF7$Z%%%aeJ#Y^!*R<$Yy(qJe2gZ_foxt8u^jE{Zydv zLjP$}1$)3xpE`8Lx9flTLw_(S3+K@L`nj3R=q>yzKAUJahD~4SRlg{(oOrjb`X{v) z!th_w(EDjrLHVIS{BY6t^w1=PrI|K7rZmH>??2yWpnFisZo3qPODH7&i_j|s66I+Y)=gFV+Uu;trmx9Uax4dZuperh{R}g8@;UrQuNQ8me2Xx* z=VUOzZ}uu?x9Ss}9%0Ml2rJGJqcwUqTN9@@`zSlHe#Y`?h4z9xCFZjHc)T9>XhHxl z(o8Gn!0>^gk^!2YUsz{Zzq$^t$4JNRJdNZ9nvXQ$MB&ED3RwD%uhr3n)8mS68L zO+G2HK29004wpA#N`A_X_8$~^WD zMz88Nb!T@F=~ey{>VeAsN8OXnZ_0Re70O>FkNWVoJ1hNDTA=sW!M?+7?dX!;@@p;D z^XoZx0}$`J$=d5WWW8Iwa?7jn*ZVWss6T_D{A5p~AddEoRkrfMlzhxI zZ9j56*^N9eZ*`t3m>5=W6yxpD%8Q4A5==aIl2+r5>8Jg5**hoB+jrI&?rgPh27N#B zYh(YWibFg)q^X{ONW+R=`;B@Q+;?6O(o=lW^< z(uNWAW-qmWs(6`RuTN|K-$ysf<6wPfudAvr7&ns%1aj*I$6FiyP33qI`cKm@$ZO_p zpD%d-Ftcqs8#R3`eKDIho8Bj(xC*lsVBn=_qV2xF!fm0zC-zI0BBkH8hwYN+jCEuUfcDZJ&Dnqe69Cq)#ngT zScWgUx(J(nwLTgR?c4304L6$p&OGB?e7*p^^|#H@Lk=DD{ydbQHiV`(MgB5Irl6Il znM&z&nSG4E-X|E6_S99kM{}}~jka=y!CZ%iW-XaLcmZ=cjh6UYy#*`F&gPe%HtN&Y zCraA_KQPT6P%kNTM;Y`J9jj`NSy|FJz4;oQ^UHe^%^CYffwX3W@#V|(SlYTDFzR8v z@PnB^_56cfU6wZ$mS#oX?KB1fBftK2n6Gn5YjSgKl&hT=fzHZab6dTAW#URY4NuJ( zm6_<$GHn2t{9-+z=tvXk zC>4!IT4_4w*3jU|!6J1mq=R8hyK>pGG|?UTQ69#fg-)Ogd9!CVbvo+5`nTSWKxc}| zrrJf+Dzav)W;T(}_R@ZxA7i0G(B%?42w2oPn}Dy;M` zvMeINP*yXLU4uP4Q*G5)yF&g>aW|>@4?5FN>gkbyG_0^SJV9>rrIM%hc~~`8lrnVw zNuznwM|TdKj`3umKf7xDq|4OWwA;#iE<;humX=A~&JyO1r7qff($v8!D;Rmx$h(yp zCiaMOrPmbj_NRzKF2&asba$v19qBi8xpjp*sEXB5HqCPPbtZZq9Mr6esnVi_*-PMCV2xr}bT zU@r~Je5mfOVZo&glh)7Pxp3u$_Lf+UPH`&eEXkdY{9fV%O_Mg*il z9W!)RRZ0#|4o?qf7fW)he4vXy-q(NR!)>qbWo=sI{VFZB6-q%>e&rXgJUfPdJjWJY zp5`@v+DjWbbJKJo0%RbYHa)He4RO?uGaKu5GL*+nnuj&}GgVq-@;HYrnOYeI!_=`x zFYD%0vClSs&C!>9_60j{9!L~vtzxU?Q`H!~(1re4@3##dDPv6OhR)Kea2s!b>zxXg zX-D)TiiSNK_@KjnW4cC1ufBRV&|w!%S36Ubyc$)^FI+q6Rx6t-A5AtUv=dd6EBm!x zFxJa=I%Z|W{uv7lF^l?1hL%iTPEi+SO&#>+F7JwxFUyDa!KZqM-+sqjZkY4a$sjY^ zHs@1)!^|#Od+AWxSTd&5E6TK4J~2p}H}8~SFzDFF@~dN*ipAz(su%W96gn`g8Ag~H zoyk>!@0VO~$VzqOk)P;P9yE}e&RP4GErXpm>8(Yh^R~biYqzty=lLLSjh%y?&zGI3 zO7L^KmYxh~%$#&O?5_!{j!s1T@k$r%`R7wb);N5k)J5a3Y@m%?J#H!a$r9pSk71JJY08bD>4lt}%uO{9!Hz?^;=&hAHE|i_ln3kpGxY`>XN5mc^UJueB z56_6fU00f}+|MwRpF2AI zX`KNp!!Tz}k}I++OiI+H)hY@be^dk|za-yyVv?Nl@KYal5}1`or>ib)iS1p*v{)%g z^Q`EMn+)u?libSHRoSnT_Veas(bMZJq_r~F#?)z>K6y{SNUhvV263ZHmM+yhGo=j8 zCp*RTR6aRevvcfsr~8$ihmzY&(~jAMy217D`s0EhcH#MHG;F2IO=&UHoZLC+?*a36 zE-F3TlwRXe7m|i$d|f|n8EH>5pDCd8@;G75sYf5PtarT2^*Wxlw={1VE?R?rDOWS# zJ9lmEYPjWcI&ag8P~9rjZEn^QnDlW4yYvmE?7rTx0y!GP^j+`Jh``;(Ymjx9{^Sy@+CmZCC*p0#l4{arXQp4UR|K?&ixwwY$gbZwZ4dXEt*i|*` zy^ExMljuHr_Hfb*bYGGCcPgAy&#ka8345}z!J)&+g907cq>Mefc0Se>cK(|A*zHRD zKyNYIN8c><2aM)r(+n6t?`L);zl)dturSFTnm$;Xl{?opZX$oXP;5 z?^E~#x)0daEz1M!qq^U5R)u{*;p>!!x)IA9tS{`qw|Di7!1;l_M>lk_+`#@*baQuh zllRx?zAFD0-_lLqRKtE3=uWO-KM&XqHS9^U`D5PKO|d?4dff$pY&eO@k4g3#sf z6&Le+g8Z!~c9W+Ey1V55RM>a#?UXu$ou&J(4|Ynsyi?&R-JP#=lAi>A4^w!X?uUOr zEz@pMm~tC`QI=dN7r9{M^UfDbaa~}H6=IWIl(&*Y7hvc8vRSsvCo1kVCA;qz%~A%~ zIg4PATm-vILP&dHkU`qlif%;ja4rkj6XYH#y5l6bSHsQ-m>|;`x~B*1#Wn0|`F|!E z#|Lb^++T?9-%qOSLL7DSPIUmWZv0qb@ONJ^oSZEeyZl$cuDyArqywXlf9e&($&+hz z$SIyNl4zW_w7-yxElC^mLE6iu3u$S0QN{%U`)$BtdF(l{yH9ycowP6Zx`Qf=HiTZ! z`|qj_eO6)W%N;-NBzMb2E_8pP`vi@2(FS05>K;uQ{haO|x$t}P$rbidh55ait46DK z3C8dHEW}nXz&@q$I^7R{NH=+;Tyz0DO!wIF74~-u->Cb+TVX^*Y(d-)=C*kEB=4hSag+FIJ4u!VG21x#dC9_Xj8Zy)`(ErQ)3Y$3m!7Qv3u zf@mS#^^0JKEMk{2@q7N-`F7bf>~`+eblwrLGi%sci_mRd1UqjL?8yQ9T#esPyIx=Z zq=tPvVAs~LF9+Qa5$&rWzf67f^$C(R@MJ3)^Yg-d-f^H=)eq zxbS^pS}rD+ymX|b1N*;9yAb>JBG^lnmU(Av)1+M|jDDz&F}HosnIp+V6;Jzx?jB)t z7mXy>)v((F_M{s2Tw(Qb>${43lCTdwb|jfmJ%k_F8ezLujU@M|?7^ikTZH{w<%KTvJ!t-2{oY#Y-umi2V%J#8vtJR`dP@T{CuGp2o9 zI?#?T4RovJ9;ustX zg+=Tv#Uby256dor4(w>@LVY{Pk;>83nlzXm1}t3z=v0Cthm zV$-k4j|}Ycv@A(J_|+`=+knv~9uW4Wmo<_r0=7x+Ufr~hG4UYnX$lj+aeuYnfYGnL zM1J-UqFiL0t-7)Q-mF}!VV65~W53ho!jCdop&R@40*0;B43hg#Nt5FOwqEYF!unrJ ztxt~mxO}<#D{YX(@<8rWRS|A`pz5E`5%yE%jk3hHq(#<$>i$1Rr8W+OLAN{5#WJG& zeyMxzV_EW7a-jpGEKm7()wi!x_|Mg;($~eYf_C(A-ROL++^F+`Bd)VVm)ObU-j`ew z=njy(TJ4v1ets?O^SauD_&-_lsv353$gi5U@jFRzf32H-KaMJ{FYs1vfX&tbg0SovT~rVP;qOvg4@e;?C={Yv~817beFSm%MA zQA_&-@nbwcB4E_DPYa{{#&s=mzfnHuBc7tR6YI;k>~g@mMmcA&GLqaM$fi?)-?ZHC z>VD_?tlR^Y8aBq?`^=#-9}(O2)S*(Bi2d?e`(hUfi#EWve|ZBzV-PiZADR~#7mrcS))##UJ#H!6Iv?#8ZG*(ZXH z2ka8LQSNJGzr)ULC7Xj>`pe_wzw4E)c0Zr7e#ZC?x}B7dt_jlr`Y*WB4mLEFOz7SgJ#}(7=TqG@Z9DXq^{BBYP!D1f^_L6`-zQ&Jz zhK0J!1-eUWbYBW|^aD{B_Wns5>26aT_290*7_xOkq|>LnM)%5E+Leo7dBCo!(cKcT zDC5lZHy-k05s2mr- z9=`yC-(N}wc8U3*&fg;J!GATBuvZpkEYo-Z9c3M{TLSi~8g|ek<#BtUtC#uP16D8J ze+y+)FE`#%L+;aRGA;~h@2O$e2CPo^>_xCE0(M6&?ZE+iaSi*J{K$~4V?NFNrq1tY z3Ln1+cKrg3w5->7wsW*xWT49_%Ex>DYIL4{?3aMm={Oj1A$HXwX^&lm?z~0lPFn=K zWD#syI$rzw`TEgT7h!VJT#x~ zP^EqLg0ydv+-p|Or_@4?6aS>vF+9 zp}V<$v|Ou!{Z@33T%g~P(q$p`W$FCJ11tT=@B4*4=YR_PPhl_9{mM^Q`_#ywKA)#I zJYxNW?mLp(xo@Q0%ZTl5&-Ttf<6!5UeX$!C!L~1w_Wniarp~SSy-B*9qnl@U$H~Rc zQI}PlJ7wFC*zPU+VmI#Sl>2LuZg6_1oZCk1j0-Ed5lhb4mu_ki83WNB5%jxV?vTcX zZ(Y_Y=S^S-2duXsA9IW39es_qTzGU)g9ox&Q+hF#om43)LPi4MzW%X_V*i(fa zD~yY@U?ak27SQorRvollM=ddY*Yr_2c7|G;rnj8E zL~~o{gWdEg*{-cqd0I4-037~mpLV6W*O-#NNP9QUHS}Z9{pnl`$SZN`k=6~E%&Dix zDe3jjq26$vy6Wm5s3)lSCwhOL@1s`t*6LTjoDb!IR)zk!1RH;;tBbQ@W-_gCGqEZ4 zRD0)JGrb5s)n)IelA8@r>eKwGt7eNcUgUhNVXB$v(5nvbp2Ht{D=$7N9&3&0L%2ep z6Bvd*4Xyb2>#K}a$|bHSU1;ij;NkkG!ur&4`bDEhE@z+L7XCC!X1@T~=|c>%+_ajpX^s^V6M5R_04z(CeeKQFS$W%op}N$X4(2=$+9_ z4syXqqUR8 zPSmIC^*Qq|dTRMqzuat3Z)p|79Xi~qJ~VaYfZpTR_hz)~XwMaivai2%O52W8j>mp2 z(-W2dUi!18h=z~#8)j(`z4I&kfTNpt3mSy=7BFG>d%NgZ`7cq%C@*mG6|eYSeOX>< zcdVGrd-{kio07mte?sFSjUyVlPP$aeRh6FJL0VmTB|PC{<*0YWTXQ=HX>W(#K-Szz zxa&W@YL&u=9J-{~HXJdL^KBCJ=%ie$AG1

    q@<)$;Iu2r>Q2By=%jCT*o&jhc#u~1O6M}_k+^$izAfrts|8& zX-QZw+sphu&j0PudRaL()HlYp5VUu_7Dh1HyCRtEJumc>@3~B33^r z+P*I`4+``9qU&{0T$IIk&|77mSaGCzKC^Xm8o_nsA+w3WRB6@~EdMO?a|98$QypfT zd4j#rT%hs{LFWmcCMn4j@pRyAFA?UY(2UHdkk!{tH5WMt+6Sq&LnfK7n!S2r+l0(S zb3#|ou;pr=8xr9R`E7(3G*!*I(2pha^kRWOiSEVRPk*Ps=d)R1rR;tE_n55hi9~?+ z2iDRB)_QQ5$L8T?y<{^ED)JKxk;Kg%C3j;l580s)O(r;3BEZF zp+Z(xBF)a>)2@f;0;A3dYdY07F6kut2`Hb>G2NmAcDX-`P!%6}uK>50Q`{%KB;IvJ zL}1Jou|n#97p^b~-j?it8)g^@{fl&TjGX8m7A9_X5Mol+IANL;A*?Ega0yx249Rv5 zBCha?Z%aaKrAO~(xI z^P|D{1r`CZT;xjdcYyNwp%u*!<9>Kn-x!;XM89){FV*kKgpY^~u|6?7B@CujS*CW5VLQ#Af99pLBg1AheA4#e%% zUPk)`rU7~@mwR7V7H4(&=|lOs4LTar`r}wf>wtZ<{$ZCENNIx#4GUgCva_yl)uPU|uD9$PtP0G82?l}O)329JIYL{&wzk)Hs#Ielsl&B31Om4V zzE`sy$>i5|=b{BbfuPCQYM~+E?#1c?$lfw?eNY~@{Q~US2{iddNFP~d!q{?7SRR|n zXUyN;1O6!RBOs=?J&(oy2zWh;EAqm&u)j*~J2c;e`UhT+ST)VD>!Vy z@zXcn6K}i57`;fClTKvtbF%_@lUr|RD(tjMvbv3xMm~CI-RycyPU@5v*Ve+8S|ec7 zEO~6&8%y-Ov`Q(!QMfSBrx7`cz;cIM{#Z4t0y(4_-Z&;ujvg9zc+9L{*C}a_2-w`Va0`Z<`GCoIJ z#%%*lC@NXJwmC!=OTE!|H}g(6pmf%R0KW^k2Z+D>Ao!1f^6!?*VX5;|G`%l|%oBWj zxv?2*bmBmWc2-oXWKjrIT0Imas~%YK2@)LN)>e6pr%`&EmJirjPX(U~>;uHMAJfy$VN5&U6PHTk4$&-gu8#4@`Y{DFr-h#IlDKiQItujQAj+>} z=)&d2D`wJqzSArh%Y))*{)^@31DER{{o5`I>v1P(i|xeU1vghvzCfJ*)!>_ePfGu~ zRVS?MJ80#q<257Q{hU@{YH|IfE}i&ortvC4AqzFAyDehiG?|SoibI%5pZ=Ala`FkZ zm%3{})+&?O%yE~QT?!qdS#)W6T7jbV{lw!y8HpjU&g3FAlRf4PHP^53RVtSrrZa3^ z!9#Yt=%7>4^Yi%11yR;FT@vQ|CGr%@5f1#eG~VX?zkoR3=JCv(fj7(SWXtvYYgvD8 z)y4(u_g%4m{bGXEk=wnD^Q|TnDQTjD*~x&2mF(17ebz{lSnKO;N0g4Gd?POZb>N$T z3xGHse*teh;lt(s-aA9v(a9^0?=SvM;#a{uW-Mdod*VLJxQVzDZ8)On*p{B_5GzB= z2fe)6V;14A8ZmIe$=mdkMYBfBh&5H=!H(-U>(L~6f*H9QYxel#&7Sxk8Yh&-EbN7d zJgAOpzuNaw6)fu$6g#9@&qxac%xVF348_yr=!~5uz5oGAQ+5;UAXS^AygA{+=L)%5 zs|t^y@|cQHZdd$g@5qkLkB3I1me_<^2Mf^()tGIC*(+?clZj zR|geCaBI$*(}U#^>M4qSfLTFtJj1#~#5mA#BXW&3me*Et%*t$?WsAHcQxkCK%QAr- zmS_mN7?>8jN2J*|Vn&PYa#$ex@}BgUvvh&XMc-SCDvGdfrjCt(Fj_ywxPEz9&lgb! zaXqi3EY<_3193fH0)7opUeED(A}gBe8%5LbMi-J_YP_oIgXA+y)Llg)FzMDQs)W_( zKj|3oOE9ho)3J+h#OX+!h#VSd2I6$g1YZc0r^ATs3wA?qaUC$)ETM=S01rr$(CdV; zi-^M|Ut0?kwH(pApG4`T`}J1e50vOWD)Jn@%{d05=)y{h6*MTnDBasgQ=INIuC|Qd za{dP(rnB0U;M0LofZoc}AGep_Cc8Oha?x_aS+Sf+-ii}2T6s@AER5Ui8rVPz*Vf)D z3S)(vgngq(+RRn15Q_MX*$lD%F2Ly%3fLrM1*?HAL3`H`xao{AEM8(9ipVd##5z{A z!lYp=y)vwqEu_0CO5A^e{}r&YLXPvd0(=8-7NECsyPRa?R}{U%=qr;)VUWMEFOd6o zjyYailLrO>1GPDDcmE+a=v~^pe9XRBj}XvQ^D*nS_Tl@c@xFLp2Js9m(QI5M)n<|W zJgiL>V;N?WOkdJ;x@qhh%p|rS?6I{GW|ieN6=g#%T?sF2W5ScD$S3t}?s+n2HnJW= z)$0_o_>Ht)XJpJ?F9>2^Ex#eep~#urXj`-O`74rR5d8iPNkn{j22sb8M$;F<@_dPM zIxH@XQ+Ng70WqCV0G|t7Ru%_8wr|>9$%KrHjZ^fRvH^PMCI!RHmdkYFL(iX?$ zF)%<#Lp&KW-RRkN5*A-pAl#Lm#Go*9Btpw~4`ZQ~;&}oN%VelMDOn-a}JBE#kh$zk^EQW(DIf<6(UZkoJ#*? zAxj*1JowI*D1DPx576tkH(SQRoF5Lv<$E0XN}xPlaeubE^4)L4$$hKVo_q!cI?8y! zB=R|>i2LbqO#-+A>TO5#{T;l!JG^AP1FqI6V+0VF&+oyLYn9Oo=&ih-J485Nie6#7 z)H+mdI=H=r^*$%GYtu~iGP<{yGz*vpux)-Hh9oN0dL#@?*8_q)X%Ifoc+O0to2S_m zPY0EHDZ@Zvw-xJsyUQva=PkBcDvvUcHUV`w_Tft`ZJKhHxe?ha4&Yuk#f%I4586gj z5^;nhl5;atnf!-2qz02`5^6T{duhEP?ZGX{+S|&j74FH^2bqgaKpntW7FyLtI1-5yhU(wtiZK2c#2G)%@aq-FA8yq zlw5vEhy1Cgk?VlF3jI(5iPzVK8`5D(DL+FFZO3Kd$SkYAx`}Eeeb|37qpV7$vXm4} z2+6XUO<-CVY`eY`wR7q>o-e-#{!hR>b$|}Wg6|2;2lQ4>k9S1&-@#3Gn?5uy4D^i0 zufu(3Y`3O>7qu86O~wBQYtJD*Xs9p?Y1v>mV47>9glF%_D(ekl{#2MhA<{6xkzNUHimEwamaNfCz-R0E z_5NI^d^8Q?kHliQki&4&z3tjCzju?5CY=$sC&AwW{tCqTePq2d{61n~0eUMR2VdB8 zXuEFvm~n9Ks*Nj__cv?eg#OYB!f2iu>~q0>pJ2Z!2p#%9F%zrM?ONh(+jx+&$tBYl zDc$(KF2((_f5`eeOaN05NPzi~tRi458Z4>OX^SAt!x#eEU=fpfc4=+pn6l{RFo%?h z8EOs_6JfRB?n)V1SbQ_E!7RB1F(3$WR=XDR`wDIKqeUbRrZHIJ$(+h(t+tW4QdD6X z?z;J0aX+*NC9^AGI<2Y`*^bOVD%>fFVqLD%Nma89-uN(Tu5~myDv2Yhw~46RX1ZfB zH{OG`wy%{-=%rjoyEWL@rJW9JcIu^>CjYq(dLO>d64>D}Vu??XzcBH5A1jw&nS2`y zR8T(*&Wz^Tf13gN=XOwO?6%w(*7qjrG498|4E_z^J3u^+{1Loz!-vO_2euELA1+&d zB5_}}Yt9@kaS5tc&(t5%4Ru)5RWF45e_#9#V+ZV~hS>#enn+Daa_dsFgd2w|p~UG| zi*BYf(}J)%<>vYqv{@XGwRYOk;h+)(Cd`YeJfq`tAnYC-r(>}k&tv!Z3na2%4)c34 zd5P_O?*)Grcnyf@``OdbU!0EbEugo;V_`lwM}D7cFC0qW`+f|4AGA_0wn>S^BUf>U zxY`VK6}!U2cSBvpE#YCIR#m(&UeRTt87kJm`7;HTOP-1d&_^^3jkKAq7{Vs}qFK^2 z-AmsNL8T<1vAJ2T30?rlia>h!k9+o#>`9 z43T0Li#Iu{sHaaRB9dlQ6h#U;OND5~_&j{th+qy+$+C0!i(}Kv1RO~tCf!NEA`GVP zPE50Pk@|`|WJt_jtemmxHOt*;CE2s0^9ik>PST>_jGO0i#6yaGFYKH z%WCM2%5g{1dKAly=m}mrg%LDj#!CBGpXqZhQ$TSkaup-;Q|%eFhHA75V{Es6UMXph zhP!L7-#hOn4%JrRI189fB(!x!&?oAJI*ymvl1sPQJQEX(1!}6i)x=(ZJ#BoQZanvD zi@!VRA|w8ma-idM#bv@+dRs_O+n|$J-}MsspMiIQxcyXbRK_@8Vlv~38JX4v;Wa=m#%?vb9aUMcF zJtxf|V@)C%*(1F1JR@GPExkR=#}?8U_XFF&p8|dc#O>lY;O_&*8DYB^70Frej@m`+ z2OPcDxVmf{pQ~pz;RL8(Sa8a+jdT&)FxGekhvdJBP10D}EbH%btvlU glc6*r&< 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

    bmJ8#@6VpY;#Jv3VRqHL0WETZpetC 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

    xkj5P(AA7)@2)NJj? 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

    GFYCT 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

    PMyQR^qT?VTMXbI{4%xQJq!&>WD= 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

    {H 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�r`9JSP%8sb4?Tv-XkwX{#iVP?`HvX@o-P&pCrEw_k6z2@~-mB$$yMz z@Fcz;PxMmW{5T%zo$vqPPM>@)lYJ3Ua2zG^>|;*uQwfjtRo=WV9=R{yo8!TL`Q91N z`20THyFWkwC?06puWZ@8j^`aCvFA<4br5xBY)L9>(o`-DW(2 zucc=%?v7CZdHDBu3_l0|4UglM@uGX!-|!%QF`mLN#B1Ui{9?Qz?vB)WuE*Qr3A`SD z51z(teTU%ADE098;yj55@Z$75j|cIS_(Jo?)$=URHSge&r}M|T6OZFIpFiLUpP$B) zJ`e2Ge0n~wji-Fx3{U&K8=mp`K-_so!h=3viHCf?9S{5b03N}wWyk#m zkB`%M?EA>hmzsy*M4b7rh$o+uuVVvWjYp@;i?SV?;xXKgqqcY)x9`W@YyEf~dIsWY z-1fIoxbuRRTZ{a&cnGhF&%j;W?xPmrN!-S{2KVr)^lZd4_(k|GJn*8%b1{Ax58<}H zf8r5*75U=X7kvfi!@vyntj90GQ}{LbHMlcV`5=BX9>ndww+HUxwq67AI6jb`$F2V* z^{>O@xQCyM&&N}E1Yd;*XQ`(nz7>z*wjIC3lepa{pTINt<@EfE2WG3kHeUKG&1V=N zgI|WHa9i#*xHCsREyy>)BX|kCJ?`SReecI(c!2yUJnr*2p1^HCpND&R4SH7N8T>N* zLp<=Z#(x)n1drl(;zjpsep2{6yfPk}tDe<(13dhS-0sIZ;vPPQe1AOhKjmM?$Ky^y zegnS1`f(fodOU&K`1e}Ry!`Q;#AA3}`paZrwC3*9aOL4?`PF!Mjq=ap=X|H06mI>s@yMIXPb7aEp2nZV@59}}|1Wh=>l<7vw|r$hj$8gZJhCo7-x~LD z%Xi0P@8#!*;u+lXPvOb;mDfKVXFl$%m%PvXtiwJ0{6hM|PCWgA@(+?ffxDi35?1HGe#hTR(2&dCB@eRNmHWmG$E`KRfZ@Hsx)8 zGI$KP?R)MITCebSgFHG*Whh%=VSR2d=Q?*Z9LE7flrjT@hrrnxUKK|cm}uQ zbeH8nRgdNC9A>}5?f&^GJouUNLmB4*JdWRv-*`klY21FUqZ1xXsb?Dd{{YwEq&#)&^h|J8VOuX-%s*7Eox&Wf(O2mzeN5xp2RI*=D5Zm+OPaL@>k;?Zu?tX%YUu>=j89lop18TvkH&l z&yxQe4;)b5uCr}_(s*LH*MwD2yXM!1^4i6kKaEAPG zfEJ{G^`i=_z-X9z4YO>)_tc$`>Wy0Z;k7AD;I4Xgq_@ zE3TrK@x&kMZ$tn4mdD5A`|;SH$`@mtXYu%7^3~+4|Eu+ioRWWrx50y_Egmyhpwp9;qwugpb6N zcn5qg?u7F59`521@`tPkxA`wtlzF~ZJ$Bx{9uHk7xAXSBcpSf*{;_xle-U47`Rmnl z9oyw2JXKF_3SpFvE?Kql;hw(W1<#-CWzrXPg9%`(f3gkE9 z5xgk=DemHjnExLv-&8&3MYAW&f_V;y6Ub?%gAQo8|VxV}0Z+@hBedFJD9dSlk&XKZDOTA1t4Z zufP*S@_n=QN96;!|Jj2lACb3bJV&hm3Az0p-QV$GOg@6;mMo=tON@~ZJ4f548Xg=c z53(KW<6*on-U3hJ+5emS^uWFG>hbWQcXDgiPn$Tq5oAph1>7_ zZO1b&swew6ocsKMr)S7_;-_(MrhJzj7o}ORIr2V?vjHBME5Dun=Wg7cFVEiQG(W2QzOi@W_|)R~XOTc;;*Q zqx3wAM-Rwv;=XYjp8Qdsy)DdrUd6p*^2dwG*Wuw`BvTf8yQEoz^+A` zxaD8Rox=I~&A5x({lIs48h@Da{A2kd>KTY%klir~_LCG|53h{}&dJX=!((`T@?CHb zxAzzi;i01HvH5%fcZ$g^zXp%uchJ8RPx*zn%4Z4^QEhn9on~%$3R?#1G=>I`VP!oW!G7%im+YN@TyG zQ*c~_Lh^z1T#6^Il{clQ2A;-$#aozPr+oHyH}|<0&s;CBf{(<5_2u^a?=Rw!2J-3j zudp6GdmEYiY{#93$~Pjv8xP|yejHEW_S{z_`-dG0=E1p1J(I~-#^d;Fcs)GaNcp{Z zTRhlUZqFTkERVb7AH@^6jb{q(G*M44^0V+LZpY&~JcG|5zaNh`RgdNWzyr%tHai_Wb0k%thJlaBj8{Pu(2Rq^mb^+b#73pe4(rSc!x zE_dRIH{|wybr>F9A-DId)$!Py^165{Jo%PvQHP-rlJ{QmUd=2its~&sb z`w8x>mD_pvJ3O#Xp1tkNeNN%Q_vA0)mt-Hf3bwoVzTEb=MtBO}NWK@I_(1s~%)=vi zz?0kGk&EMzjq=~=S!TXjp20uI!&~JWOKAarSpN?BN%pt$mumchUGl1orzRf8Kj*%s ziRHgk{wngfSsu6hhkkfypYrxT{At|zO1_Mq1$Yv-_v9boDcs(Z@5J3h>iL|WpYhQ5 z@>R@F@$4V4E!bX}ALRC){3<;CtGp`DP0jJZpYmd*wSWj7EPQJY`t!Ww;_*`QC?}5L zxO1_*8TX~*@o)wCDaJp`{BrqsjQ>qMR7q~vi*0xcZ%FGQUm!8Tp&= zKs$LGyaVpGm%qw*`dhxE{1o}I=AGp?dw7Jilc(|*)hF$mZXg9g7*M2;C zr+hIze_H=t^8R?)>>qe9n1>YpA>*lmC+=2$2l?iBtcUyx@?G)dJ#xFg55zruUojQM ztiP}FwqH%R9{fl87g@fa^8J~I_wYb}x&8ftop@%TygEHU;=#fBUO4+8Q!o#aA#yt| zF2iF(<@UUDEuM(V-?sU|-C^?1jPnlM8!or^ibL@D2)V~NpT#2&%kB9qfd?OvHzL0t zcORAi&3L{te@y-p{=4;$lpn&+%iiebj*C(9?ey2c15e1W!*9eRPs(jSZ)+Zt*Cc;0 z9vdT{h!3;=vGSYnvDWjn{3PR?W&Vu(e)37&8<+1N;-Lxh?CoFfleV5`Zcjm}#`yR)`FXwxq?1OW`eiEB2U&44U#6$m+ z--Fk};|aO#|6$ynC%5lIb;2VH~mr-#-d>7R#G(KQPUDUYFNp zeqO_)%j7M&zOTi-m2x{DeuO7h$=_r=U*qm-x!uoX@X#9hQSwEqYCeN+%KyMGGJh-I zYni_-@5?;jfXCmFkHBxi18e2A@$PtdoxD9h)Oy~N55~vh&U*Pm{3Sg3f!xlwOYpQO zZ$bV&JhV|B$9Le~CV2usg1cMf8Rq9-JhD}8=ZA}`X+9$#=I86+;cfZ(o6Wb&?L9zO zJou4(IpgVzr#_Y!V*eSAr$3eVW}I{I$Y=5s^d#|cO5TzDc07Tv!S~?q4(09pK__qz zf0%rU?1spl&vzT z0l0^cpnr_z_bZ=$?VtP1#v@-c&dK%+yTKVjc^W{FB&A*ddegN(qlxJ@na-Y$7@R0m@u`?S_;^Xjl@$mP`+kHz4 zkNqHzkpB@+;kKU?%D!+bSg*)o<-3qCk0){4UUl%$5#_g$zXf-W%5DC8;tAY(9>aq_ zDsS^M758x4zANzPG3BjiJD&0R_m)4dd_U&7X!b;1u)gV^ERZEdQtS+vpjOhyKd%S%4?;3FOz~;Zynfy|{qPvJ;kon`i9TQC*YOv6mHw40UrHZdGiP!_$R-oAD+Oo!^nLexBj!rXMY?w z_j$?uU%6d(R^jpg^Jla_S>*8e)^>T`8Ja&Il6?btPPh&iW+xEQ&Px$f=~C@0#$N+Z`trBnPH`=_D?R;i*XI*)54UkH z!PB^n)3g2(`Rny99>gvG7aqoK{DF|x%k_C}JciqGaWkI6wRFeniw8?eY`IV1VceEG z8+U!a29NoCC!X;6&$x%%a*JkP(B-b+q|83y~Y{C?Krv?PvJKHJMoM!KL!t%)i~`qT7oBhz8iPWQ{Kk^4<5vA zoE7S6oMB(S1@8Ltz3~`s;~$GBe7*qpa668+;(>t1sed}oFSv`_I0N;WPu!MUA5Zwa z8}9l12|Vrd1n!j6NNl+t9`yP5co?_w6um*?bba~Sc+8h?izj>@#Xa1Pi|Kgye2vqN zi#2!(xAE-8Gq~*!XYs%V>al#q1{#0J=V3g8TTeec>hmdh9Jl#gfhTc0E>gI2Vg7jj z#DloyE8VDZMsYhXTHz_5NAb`_>bLRFz$3VgbB*=;@?YU`U;Z?n#BDw=&3;3z;Cz+x z`Hgr6x8tHa9==%P)IS~PDLjtbIOpR@+?Kl)Px<@^p7D9<>{};E=I72?KhevQbF1q3gTy2i?IG(|6oOAF%wfyC-$3s3pfJb~@_-6J8pI5`< zxGlFip7ePiJmu?o3eWiR3-Cbo{PAzbLq0!(M{qkXO0{Hv!0ouW3U_Pd_qW4ixa|)k z@Pse_0`B?zZ9MJk`384tYPr^5td+(Y#BDxn;$hs5i`IA?x8q_kp7iBk#GP7NuI>Nt z;jYh*;2v({EOU#-nZ|9LSK&_W{PpUH2XV_s@i1=VkK?Y-SKu++j*A_53fIyd=QJL? zLSoCkw6(?`#%;MxaM$Pe;xV6(#S=bXgnPIxcQc;$`4QZ?QscDo6u*`I0k@tj@USo6 z7I%F<6p!I{TujBCtF&A@E>_}k+{Uv5PvW*eoWfJSeEBvSf5ztx@jx9d*Lv>7Lp~pe zM{t{mMR*jq<6;Z$;Wqwbc-ogQcbmo;x?1D0Hxt?}#UTJ`xXH zuO1u!D|iUEajvy~U;Y3d_2vJ@j|>!|)XK85$IGx6XJ`Rkj+ z!?)R$k0d${e- zDLi*B7@+u$+Wmh0jPpO3;lU(a+r?aMF6okscN{}2!Q z{16`Y`MB&%5ECujdgw?ep2V(^%uT`B{Spaof*7$D_FI=fB`_ zU%uQO8h;wM{rNgP+(gSY?}jIEn}U$1R=5V!Fk#KS)S8+UQr z&&zkydL?l!#c>+qPP6>wcE*FaEq53m_W5(T>+_{}%;z8C3EbuG}(+v9NrcepK3i5<=f~_;DP7lW68gPC#J|h zW1Ju2(YSmK^Zz*>nl88V%yB%4+xPv8-lKU4zo7hj#!~@zX2|XMy&4bBlrKL=18R<^ z=Ez^Arz0MlE4QDwck$%^NkRQj-xmWY!ZjwJuPY};+k#EKu6Jk8hU`FRm~2!UH?x_IKfi z;3@nMdLB35seEz9`4XP~LTW{sf8icJ125{b-S?>9 z-oMqtGr0YnY8yPZSNV778Gwhsl+VHAcp7hrufc=+l>e9g>Lc^7<)hi|`|!j!@-_I6 zxcjZ#{%*->JbF<62>qpcX?-)_%k8{e!B&X=v{n0hMWZ(05)x&55~N0$Fto_&3n`|QV)C*;>M&Xafsx8tQ`Z_Q8O z7v-sOD&s+XH$C-nC!@SwzuMvn{6UI(SkG_De?`wg>p3Z3N`54s{9V2Ye;$whDX)gl zvHV|h`@P^LmOmxm&vM_y-P8H`&3NdHdc4!iZ9UFyxrX2AxzW6k-1=Kve_{C-!Tf@Jzs3AQc?Ehp?c=o=cP;h`)@-@!t3f>%Ua_9{48Q_4$6>!*3w}hxJ^h zo`><$_i3JE_$cNfh&z`nKZ1NC%j3Q9E_epF=la2TxMKct$Kf7+7d@}y!Ai>8&rxs1 zW4K)}j^j>cR})X-HqMrKpt|y7SZ-fDftSM{$336Vz|(k?{Bk@} zL;Y{!8}UF*xjol^iO29&;W-azeS@|0{W9FSBHu%J8t>1FwZJ2dlz)ol zwzoW@4>?#%kBJm1ov=WhdBS>X}mW* zWd~~hBcG_}368I7c#xA%B=;8DC9J;U&X&!59nxSh}E;McI+LwN8D_1OOT7w+M9UMf0>^YCuv8?YTOz}>xad(Nta2fmbN zzg?L7gz)G-`83AU%<^B!2h!gTk9{qFn|xP1{Ehq$ybqqhAHauO{{iLS$76U3xAzaz z@eDqL{CqtAt$J?4S6UC=4d0B1(#p?ey}q{mLHTLkU!68TBA-N0nZcTW_o&>ir`7Qk zo?@PF!V|}ozY_0i`Q!5J;gI_b#KS+!|6sY}%umQ0@ZLL)$9|WWq-Oyh|3jYrzq!w9 z-1$r1lzDg$51*FDS?&%zg?GY##6xG4?@dpkA)24WKXQAHsET`M<@M-kjywO#AEoCW zJm$2`C2c$p}; zK9%_yf=91c-tOloSRS|YSOO2#Q{H~heWm5`ZS-%&6ZMsU1>c8&NZ-yAO{xQ~nKJb~MMPPTkYdVa=}_`~=)!!-|~4$8lPSHx4e|6%?3 zLGtH5r1eVOrT$9HXAL~lUA~5VLp*u6{5kwCJlsPbq-PB7-XkAPejc92?Rj$p9_gw4 zW%L}vqptihdj7>Tcz3*F_QG0l{6=~yZ{7q?;`W@?1JCqUzA?*v5)bv2XHTcO&s;ol zpZpP)`#v7*m+#+M-si<0(Kv(mD}M>s@#=WEzq}#KZHC7N$h+X(@$^7>Bm7b8A1t@~ zoT-+_S2F(Pcw&h1zu_O656$oY-g=_)8(Ho-kFs75%3bbTD&nz+2$P2>C8} zbfo-3?q{NS{7Jd}eYS~s>M6PXo!dp`&&c;M&l~XM1i3Bu0PZ{|@56Xb$?g2J z&+@bLd;YTg9C<~0E*`1%a^}i^z^}tIujKpfcse2flKrPI?#+{5%6vX%`GxYA>7Rqg z7R&8CzX=b%CLd4!D4txB?`5+uzzeoZc&R*2{#rb>EI)q-?!J-lPvDsq@)tPazJ$l$ zl2h-j!V`G*_BHp}f(PDF-tMcv!=t#}SO1Nt@MX;B<&SH`Z4YxxZt=Oy?F z%i~Yr#h%c-MK&sL^H~{pHs$v;#Dlo?biot&LAGyyJibLen^^ASxVu$u+v_>&|4`nO z{Cqry+xw6=@eFR)wQYE0n|k`v^9}CdweZu{gV)B(KdJc%ZdcC*__cT#x1M%*6z@X5 z51zs+;G^*j9x19XOtJpYwcN7g7vmAU3+D|FPwrIydh%aeKW@*_zu>Xm%6puj&&mEE zMDG0XrMx0N7ve5{IotP2Jho4H+uxew349R!9r3`|%D3XU>tp?Cc}Lc31nwP@KSzE% z9yuzXPXA0ib4>m^<9`EB9G7pw*W%Hi_5$Lx466%^V1fOmXyz@zZ)JbCAa@>X-_;=Mn0H)e>_}P-X0%@$8p;a$6Nk9<;`c~ z8K1v_Cj!bpOaEJVs9e5(fO~jJ)^`t{xs3W%k>0c(A(i_MV|S?%})W zsgEaWC~x0qxea$}$~%$ogS)upAF+OX1o`Lja4q#L#TVfjyd~?q&hl3%KZ*Pocnbd$ z|Iz$P8Yu3eSY(wtsH7{IznsZhnV{@a$zJ_c@IxuT#D``$>ssG!M=V@_Kkh zJls%j?-{PgJ$wlHHh8Fs@(*wy(i2a#klTBn$ME>g^16)kdFyW}xBKV0c(|3^&SP)j zDSRHw_3&6*^D`sC+7H}9LD{~Ax>wx9fnd-o~-J^g>;$$s)$?1!bZ53mLIpXvT` z`|oL1!riFcuD>BXh1+}M7I<`+@>S^Xh9^eIXEM(N@bJU(Yq@TY#$%7lx09caM@Gs| zl+cPTww|$a`|r1|!{Za=i+Em6S$>Lq4Sp1NX2>rsrT)M1U_ySF2aiDZ2T=;d=EV@;ORs1 z!}x1>>IeBxs&O{p-eGw)@*m@wBXYZ*eucY730CK9T;g_29SQ?eXx>%Kwb_!$T+JC3)T%ZTa8i&yk;vr|_2< z&r&@4yYidKueF{($_^7)`;YSXvp=`MQ~$|rdv!5)bO+vxp8j~ausr*EJokAV_ll6`cz+QO6_a;h z{$IsorR4VCOImAQR(>z}&++v6^fUe=c;sSvhv&H*aI^A*=y}xgxZP(?!9y*TxBI{)cmzL>9uIeYz88<;_B@`!)A%5^ zONr+-50P86+q1jJeXD!{`_J8YylsBZNZe^JKTH2a^V{Y2^IfxX7r%$~ zU5k}i(N%8WSISs_H+emlTWm7tt2^ayvcBbUue-bo z*X!zd#+9e=kmc`}AEGCWCkM#w{CS7@K)JoAx*v}XlCNc)kKy6La=U+9PX0AKh1bP5;LbSZ8NPD>58&C`iQMO; z^^aG+D?KH$-*727pF0!e_WKS&+{LY@0iJm_zo!EpnV8@60G`CH=Se*LTz=0BcmlWa zEXSSamA9TPczkkx&o_7mx1LjYWQy|lG7o{Nnuny%YvX~q^7cG+GakaTuLW|S9=JDE zdE4#};lXKgI}cCAbZe@iR?G*a`%(C zo#!j!ff>r%dA<=I#O*xU6_4T1(?7&|W~#^hX*_`sCO^mWFDY-&zbnjV%d_7G&3!yP zK1Y5n$I(ta^@`lSUz5Q@|C8JI<;zUhJj4@n`#wlDJc-}LI2+&@+~%hp?#xq974p6C z5dJj&81CWr{%SHFov)r}$S<<~1@dM1yLb|}{7yW)Fh743&)}AKUeG+m7UkzJ!b6Mm z$5R*ga2wApc=T1}?R~O~2Vawa%J?6_Gx&IX8XjAs{2Tb|c<6Pxjejfd;WnOc@#s?J z-{pSzr1d1_HQBF9zNmR{SIXP6+{$42x-m)rZ~`|u2I$MrBg zvR?THEO$H}#}DH(@z@8-_r;f4KW_I+@8f|D%143TX7d( z&vL)PgP$pX0sbo<#_f17ntf4IaQ=+o_8eLX4}7kk%jl_xhwvY{?`newcPelD|Gjt; zzlix9fv3Ju-aL+HcFFgXUt;+^^7k3fyLf!B{7&*atmjMlyX24K$$j$dk8|WcMPJf9 zg!ap?z%RqyujLcysf%auDfq2;>>K6l(9;V~9*{32|G4#kD{qd^v^*Z9XC>V;B>6MAcS!y-`I56V56SQ47m~jePyHY-ieHVV56geYo0uP!k1nnS zw87ns{3iCFd-23?a=R`M!kv@y0gUr0Jc?IjxzFSA-<7xfoY(Or&TBts6Yk->#&-7O zDWCs=r*V6K6_~Ag3;&_zHf5ZZ@faRroOSTzpUT_s4~ET8%QN)ci6_p;`*D67h6kJu zxn%bCIQJQ6`9gA!>%}bGEhcY-FSC3p`6H#(r#% zd#U_m@@3|5++8MroAFo2GZo}^U)LB9TrRi2m(tGimE`xaUcGU*n*1G>`xqXqE}w=! zk9+v7%=3IaaHaBt$iIWf@Cz9KXL#Z&<$KU`0(Y*JKS58~>1Xe_t;=Z?73L|%#e$@}nNSU#HLZj|-3kZ)!Dv+!t3`EYtx;hENQJ0E_E$8MF| z_XUpN$+r1kXs*^b-9bKp?NuF*bf%x>wzm8o@>|LGz(aS-?Kx#29>+gmKA*Dw9?E}D z|8zX;${UkU;xW7`^YbyD?4`WDH~1Bg_LkfEs`M+YFK#`x@IYVX?fZ9)@dW-D<7tBj z?^E9H^Y6#QxSjXL;;t|MG9JV2`u+}{@b&D*JzxF=p7wd^|7m@le);39g9m+n8y?1O zJon+Q&trJZ=X3CcuYWb}`SPFQX}lWqd;|~Nuko7~Noc*ocy01QJnHinc*57y15e?$ zzE9v8pU=kw4`@7=--d_q%8chA9`WV>!K1!>#d%tPPF`R_1OB(#{(neHb3v-DcsigE8KlZdGk|v2Dj^MxrJI^_hIE% zFrM0Y;1RiP-<$C$ZtuN&;3;4JK|J)RdTf3s;R)P&7U9lg`T2Et)aQHfG;ZTOiHAq# zkH739t#1PF#roF41EZ9G1#gQdal7vK!c$KwKbjk|hVO~?-mgOF^{@U_` z8je$Jsm2++Lf(#i5RYCdf0yxu@zB-sL-cgFp8vD=CSa0gRhe*#%P=lbjNme$CZJfA zw$Zs&R+bA?R#sM3(pi~lMOHV^f14E<@kL~G#@4Z9RyN|48zSmh?&5+4g7^<2#iA^t z7P6{<1&F|}VhJcHf;EUZE;#d^<*wfsUu4_7`(e!-&FH62|DXz_P z?D2{pniu|`QvPpN{F>rVQu!B*oa4fOhvE&zPkf``C6)6mBS-O?;xANu{F{W|j4y9c z{EFfeD*vY9*S}f#e_Z8^y+rbL@ri=V|HsD06~Cr_T)Di`5S`2Nclgc_^rDH|Ha2i#y+F?)%yiE z>3PhrNPZ7JUGPtTq3}-`{8@rOU(07*@#~7eRPp;1?|h%iQT#^?{%pY?c}NJaQ2feI z3;q<1vh%~cNIVMYl6RA`9Gle4aNUK@lP83 zRl@&9ZC77#P4av7wSs@&7fFC4ich{(aO1ysO7Y8Y7rd$R?^gVl;$N%n@IJ-Ie_#0D ztK;4GDL(cd!A~py^AunIL&4vpX`t@!27T4&B5Ryp@6KK?m^ zzfkQV->vwKhYGIUaqKyY-&9;iy|J;EDn9uig=A++`@`qGT*_x$@gLLtK1T8Difc0&JF55%#eZ1ybxQHhmx%lyRs5-nA9}RlKce;C zQvBLu1b?5V^E(v3@>PQ0qx?Un_^ollJEr|8e(`aFKU~xQI>kGRKUVSgD}Gh+*DL-h z!~b}Zqs?&a%U>bob6N4a@*h|Hmf}C8_yxoN)gtH574IqD`5M9BsrU~nzW#(T-j^wU zQE?OR4aILL{!1$7V~St?T9NaQia+#~n*PIr|EA)PSNz10Fy6C@uSfW{;ujUy=0En` zigzOX`HEjw{P7y^>lMGI_=^?)fRR5T=`r{}DSqhd1b?aW|EFJ-d|g-k>DnG<6+iLy z!v7iNzsKMO!HwSdE`#4L_=$%~fS*_V@-e}&T;ji9SA6og;D4?1KcM*dHwgYOivNqj zzftfd#lP^^B>f%5|6cLO8vL7t{}nnef3xC~Cj|d?O;1trYYT!uLh+X3H%W2_{KQg-zfJM=(}H)kpZ=ARe^&70D(4~CAfR>1p(hLerHYR$K6!`WPgKP> zuXyK9!OgkOGm77Ms^AY*Irl1l^J#)7nx6lv`1(D9e~$9MO7V-|8sawa6#p5;$A2W`f0N=@epK*#wf+3H;$uG{_<5D{Wxp=zy!exX->3Xbir;)r$iJuf ziJuW%r=?>*XXHfqZzz6Qabq{WsrXgJzg)}hGm2kV+}MR4^*TxCiJz5tzgqdfPVtW7 z&r^I^@$sJ%e&eT+D1KdWBme0}{&R)@>s8JV8TpFK>}YK4MMjR|PgnlyM$XTR9J9an ze#5W$qL%YND1PYq!v7kT^XT7@{N7OfnTmh2;un8G_+O=XN%8R)2yW(e&oXip{{iKH zv61sa;h)y@yg~7+FA}_>{2x~Q&@T!8T%C`N{idYz+DimKs`~t~ir=~>_&+Ls!r-qI z{1J+8DSqhHf+=X`%b@%6U|{^L5Kd6SX*Z0`CH=P)H}mZ|#m7D*{04uD;)fJ}xXO8k;^T_9HQpB} ze&xd=$E+jXuK2aT5d6H#`J|Em5y9V}_?N$4(s@&H6YmohzomFl<1H(`{+A-h*b|cWdzy43cZ|2WU#cwEX#)}_S z{FdUToL{B**guP$|EB5uBgL;NZsh+@#jh)Fp{V@|P9A70GWZe)TgF?}s$r zA6NX!zl7!R>xN%(Qx1Qo`1shju!O3X&*!~a>+!P$?<-zV{Lp6$Zqm7-__*RQpYq@R zir@Gg;XkJ7e4df>xuKjl8##)beX)-zepB(kRQv5C-XiI|@o;X+J-r__*Rm{%aIJp}3L%0mau9f1Q^9XJaDA>w-s$d~?70ZHiz162Xm}qT*K+ zf47bc_bcA{&%)o-a`-vLZ$3K2-=O&VSA_US6~F$Kf}8gC#lI`*JTWe~NzXSazOMLj zjW<#J%43CpR`F*le&cb1!+gqrR~5hf)q;OQ@!wIr^8~>^t@tMmepv9IRsH$s-_!E^ zI>nX$iHcvlO>is|_^+gRryw}0iT}P&@e`ARKUeXWD1LKF@ITS=|9!=;9~JzC%KtY; z{xQM#HJuNCo22vBalwDb*oPIrep>LeD*qnE4?S7%m#LiZRQ$$@;BQg<#fo2D6WrJv z-=X;B3xanaA^H7V#m8!boA>6v;_X_Vb;18g=S!y*ztt9eOY_@M{NjBf{^N?@=!W=j zD1M?ZxQX}A6<^;K{Mj1s!`>n3x%q8^oBNi(LGkhbBKQ|+IczIF`5l5cb$tH;#jie7 z@b~My@tWe7e@yUKX}!Et@e|Jz{I{go#{NO^vF8i^jf#K8?@KyQDE?MW&k4m3y-@hy zrT9}7zx5))w^Yt|Dt_^o1TQK6BE@egZuoB~e&YWQ`TtJwYl<8G$K8;0j{moi{|?2k zC~o-o6d!wW$p7<-cN91LZ&mze#Q$-{*MC{$82&GNr=;h);wHaOQhf3yA%9EptBM=` z=O}*YS3>^RD}Fh`|5EW=5&p&RlJs1BX_(*Rir-M&q`$2AiEAPM_bGl&al`*|#m8S3 z^1oN{D~cQbhrCVc;ie#MR5`+mi*yjJ+ldjIDXU;lN%%|6DP_d@>r6~CzX`?bDaVC26|_#dt9@NI_w?V+4cDSkb|zwD1Co#XEa`Jbft zOk7+tzsd(o`DF2TYzY*bMe*oQlYbD(dE^HqomV1!PVrk2{;i6yzbBOQor+&m z-1t9SQ+)Cdh5zR?zkjUw4aH46eCVHQxxF`(KdJZ?#b2)NWJ&S$_Y41~+Wj^ZzxF4B z!%V?{RmCs=so;OF_`bpaOz||00d|YZSlu7lPlZauyZ8uK1%A-%|Xh;uo|WE-QZGV9yt@y3K6TGeKg;m8b{*&N$ ztDLUl*Z)QE)5`z7M*ioBh4Y(r|MZs>U;jeEzf|#n)E^|6LGgDgzFrsH^si4TKE4y;U-e-v=Z4@gfAQZ5#jm#nH|zbf z;+>A*f2{tNKdAWnCBdJra$cbLjeWuYqvCH={O0|F8^6lGP<-+kf`7l(%V+<&r1Sb^ z!7oTM#~!En_;(2Y4((r0RQ%TW2>w`&_k!X7Ucvu|%4rznSP5(O-zwu*&e?r^;2Nl2m(}JJW^8B>ohn_F^^EKWt_zNwE z7YP0l?RQ_P__db^{!!&Ws`%Awf}8!gWyQx|Cis)IeC}5K;>$z4VdT6*@c&E8?b{U} zd!^u?Z`!Tmhu$dodzJsH;;zs_@Dn9l>;eVF$zgF=pia$!z|4zlPeOUPK(0D&>9XgsR;p+^he z(DXb-@ym+8RPlYqCm$pHrv3c1;@1>6>#Wxq`ClRYuT(i7Q2d7C|5?-dFN)v#O5uNu z@_)t0wEVwHa5E1)u6RfBapk|L_!Y%psQ7m)eqvnYnEB@~Dt=w@7byRmjr_+7zgZW5 zO!1qFk7@cJ_Scfmn~xLzMD^#FDZV}-xY7Rw#V>!I;KsjhP4QcbKUv#(N%0c};s0CJ z^ScJ05&XrP{;Nh#guhwwtFyvCt?B=W;x~^9{uY(<`5%{jU7HK>NyRT86Z~b$e@5{W z^MXHIpzeq8WrZRbx{{K_{8-dFwhLy8|-6#Q+<|I3QsJT3SeRsL@&e(kK_k5T@2 zDSqRQ5dWCsw^jxJMJ?w~DSq`^1c&*Q{~q=UDThu`@M+a=#}&W!6v54X@|%hux?6Db z&dc{Ge(N5=Z|Xeld5Yg?2>u!^hu0{6r6>67G+%E}e0@*wAJFpuh~hUD?<@Y#ieJ1W z{6C@iBmYM7HMTFfnTO09{C>fIQ~B>y{Cb4{7sW3>J>-9m;wQc>#DB}ke@2LZ)X0zU zN8OTiUjBCBf2h{WSgl>Cwa2=HR=?g%3jO3#-+mr+E=ul167|0#IX{saAYei)Qg|RVy?8pGiX& zIy-svxG&i7R;P};zmi3Lu`>ouk~!~B(AmkXlAN6?SIU*Sqb5efJ3VU<`d83-AF}A| zsiAYF8b~Hppa~n>anx4<0P9L4ip&p&ei*{;qIxphs$=SS^XD5&6 zMLj=tJU8ySnfbiPXQq$M<;6aC^yo}p^iwlalgIKBFg-UtHJg`$qtmm~^La^_Lirp$ zmY0a>$>YbSj^?FecIx=-%w%3N=4a;T=O%O0F?a0PvFWM2gv`twJvuv^-v*COO(Lee zq)g4sPER4Kyu?h;&Ckvpoy~8RGjsFDCXbJ3o5yC3%}&h^Z=u^sd1s+`Zb<8gir?Dr zC%wX~?a&rFnug}m(6O;*skhS`>uuMo{oYt5*&5Uq(OFM-OU-1X-CjYLO~z=zxV@h= zJB?C5DcC5ch7qQR5oU%FW`_}u4kOGBBODt>m>)(sK8!FmIg~Oq?^8oFKQ%K}Z}pRI ztJJu?+!++`U%e95Y`}1-mh`uFhjCENmm0OgVjF{evEQw?YNJ?}Tb1O}ftVhEypu@B zfn*Y6rd*zM%pOa4{4xW)42s7vukioIbVw^Slm2$Qa%ZVANT|I=31ErGGAB2X77Vl| zo~l3oP6-OFRi4|b9-W?>;Xzo?avFuwF~Pxuui34s`Qvl*G_>QZ?7pCTpm9qxQ}aj5 zIxWz+rl+^6lk;}!B`9W0e)e^GH90wzk%!rtnGAHM9L(A#(c$~sg%vb}PE=^U{T_|e zg>GrDC_h)*OWkg}JDl&%YP-9m%tN>iM2*$DNy>Sflp)d`Ls~?ue0!z zn=G^{#l2GJ0yX&SYB>EQ!5AYCee4T9Kp zy5E@gx)029-3KPM?t|vA?u(|Z?u%xq?u#a*?rVzXpYD^Vo9>fmm$q#7y7hjdYk;w8 zqeKHsvsr3YR_d*U%90vkVS*`A#H@U8V}O5-wR?pHtTLcs>aD^;qd@}debDNt$ac3! z48?vW>2{qwK&R`C^A^_X@CH>X*0ACp9QCjj}lC zblTm1QaRi1VKT!ZNO1u)H4Ms z0nR18Ua6L3hM;0a0QzS%^J<&;ptYs6dmC*`h_DcPc9{8kE6>?)dQp#`9h+3woQgfX0u(X zx2o-M8u^rYH?Jqnvy<%GPCe))3!;xK1pNe#UU@sIjHO1i^)^pHP4W12RF^k~MvR-V z4Q!$lIl}^d7%@T}v;sPR1{}S5tyHE)Ytve9oyPnksVr{S8*bpBzEkX%sH0m>8`elP zMON=2X_l=@%bJd4ax-aRob_ao+)XO;%}N_8&q%=9r&~IASBaF98~IqZTOL%*0KKsY zTZ#+V+)hfJP0NFHEYfn0)toW5XiGM68J-Oc;FXh&c6lex&lZ85Zku|47ppNRe!JA_ zLC?hj_K@)NNvYRHnb8`-Wuc4^-K4x5hd>jvQV~-b-MQVp6Pagyg63yZTZj7TCk^{e zt?kaIVCZbNF(Mi+EORKm_B;5Hc4$~@?Plo`Md=dRO7 zSJ$;n6LGcP?e(P+!#PK5*CmCUF~<3%wQJ*KY=D9f(8Ci{feXD}(xvvyljtJ_nM+4C zzJ)1ArN^YxO$=HlMS`y;wKS=NYV4O<`*99CrB=PXm(Jbo+^1>PiD`A=6b!Y4M*mE^ z+ip9XaJAIyH`=x74eAm$5h&hTBXRwazFiVg(Xc0aX{H%MD1eX^G*~Nh(7J?af~O zewUce_I__2V_Y!?&kkxyK7kA^HdD272P)git(8wUV4+P~OOb9mmo(R<)1UV{Jy-b- zdbO2UNid)Xxut|t1~@14mN9^79%@=%6Sdqf*UE9(bVvjA(9ZkJFr2)&J!rwCWaQNv zm<=@+NT|gkSyQpFWVcivkgX}|Ee7AD_KL+>M8*Jv+N#%DOrM*jg;~TBNWfw|B9nwN zX}l>Gf#x)nV>*w+r6NN_kcJF8MxT>)On$K#u_XrMTYtaVLxo$2tD#vgVJMFiS?wlC zHpRAQ4&CaY5xc6wKh7FEyE)w$^k`;hJD;V*VU%MT^PLTB5qcp` z)=1i2H1kRoOnpt}1+_q$CKdwARttkwdOp=GqD!Gr`^hS%hOR3h zz;4ol?c0>30g4S&Tr7U8X2>xGxu#BgL@L}+?TAcv;6>`ew8{=f6D)PO&zm479S}&Z z^GKoGE@8@<9>XxDYj-OYX<{{YrheS*q1tx3of0lj*_>sZ?MqsO%&)id#NXKg1R% zz%rQ9Ds~$6RE4LwvSY(o31iMe7t?rGZCe8*tdE(Atv5nwS!98x@VGFSVqhxlr=G^Y?hZwC>3#sV~wGo~H#zn?pH|Y<$sZNP0_H8=V;T z^JtR9gFp;cQ8JC;luSVkHe9#jcD@BIy&1N@O1;u1!;fp=6>4REk3_{|Y2mG1c$IV# zvaqb-eJ@+?KE;AOpa&9}P1X}}UWJskfWZ2dhZ*XaR(5mJ{&WT+UOA$?kP&jr==R4L zX|?i(wbR8-BOIRXpf=2>cBRkx(B_e$OJcHLWa*Rj0W>cXgLW7a8#{jOn)qf|*P zBFSRDz8GhCt5iV~OgL+`$#Xq7*$OB$^)5AtYV{3OfW_j{>{KXx;ruyR)Q$2eb(?du2)(eec5WFyat22-xW_~-xwljA ztS?$FVky>Z!F+UU0NayVKP)5lv-|zYWVzI

    +C#lr1a?~Yk*cQ5YGp-=C3YM87V4?&wvqT>Us&w0(Q~n%QW!sS!cX3)H@+KN@`MyEDo1TSW{c26YuZ)zHBJa$@D}Z0>;xr->0Eh-G*n77^>cE_vxSC+&xQyK)Y=5a z0pa7(-@M;z=L}r(fXY^Fx8x~Er%HWumF}LeRjaNe9-ip#@hs&?p-T!dj=PtT4;gQ) z@z#kcQ!GqEjZ0}l??KFN(vMQJSu1xj4f8tOq}!QfVniNkf2Q)*=A5XvdK%e2pn9AS*;#?6^b_n|RIGf+C2Rn$~a`n&evj z`{z-VRz|6E@1WObTXkG8Xs?`ub7>nUtXgp7lL0H02cI|{3-yUJdBoIw!w-2h4oUj3 zUgnJvn>B9i1og2+N9O1_5C)EH0=yE25;%^m;TVBX3rVJ}4>o~HYk&!Cq^U5XK@VZ^ z#g*%ib51_?i-o4rDeX%t z#Ov!-OodsinB6_o@)GjiC~`U9#=mW%t$N^zVJguzsB5wX(ZCa@$`X*}MHq-M?!+uK zW+8zwTtm~v2q_723djmPn_Q}3!!HhoV&5={u^Heg7*b#{Djy5l2R3 zX^eMZH_sLe!Rr_Y5}~CsMRb@N2AAR)4G~IM3}wX=2&8tKYLH^DU#j}%L&9dJ)7ac> zh)J)GFzU=9M7veAztwTGMzeth$j&!O70?7AnrKtm%LH57rhJ69e!G9MOx&gu)!gj8 zQB7LqzRbd{C2fc+DElm!9-i65f@6Gy01@bwXvS& zOl3H2(?%s`t){n6pah|acMGe7CNC1TuNxRxaUWLuOJg2_ks9G)Nyi~S=7{LeHQn;zq%*QM5doB85R2@YQGJx%s|239NDu*|?~;JI1s z2n`b7!6f8D@f?I_gp>-F>$FKXf{j}9$k>P}B_}Sib=tneLYsEsh88Q-GSM&ijuc_; zw=kg?8P}a9JGF|FQH5WL9dVe5c5*g>(K_bDwtp{yCN=fUbWWMD(gsg~U9GHMh(&~X z4pazQA6$dH{t8bZ*Lh9jaR{|YkHIu)$3R`lV{oMg=MCB&MK;@A?IM<_so;N#{(xCU zs7~iJ7B}j>)E@N52s}K|fe{vy1!&SOQ#2;I7{;3W9vcFjgko~lZ3SS;R^DFstt>W8 z67_BL4-K5?tu_=7ZVO#I1Q7+Tislj#D#@(0xdvQ)TS-bW84wRG?9kX$cn(_Uv82I* z4;8eucG_`JOhEli%UxJW7_&@pecu?1>a zSv*6c&yZN(rYD{}!<`&_b?U z>_r#_V7+#hbw_IN__a+qbwh4Zo&Z?4TPK10IXFB)r9c#D=`FY7ak7c#7g0!Ab~{WV z;R5R2j|e8yP9wP#r%7Qh*{B&(!f5<}v%+aIKKjxm+4l|Fs3YkYY3g=zi5hn%Aq*2# zM6V}J8`<`ow<#uH;c#muLZwaBWnx0k#hV@_5~~IH>3T|leV(0)K$}MSEVp*aHPJR? zW4QpS)s7VebqujiaLFp!rl1X15Au}u#Aea3SJ&Zl*uTo8z!`El5t9ho zjkOZlERU3|wv92KbQb^-A-}Ce`Sem|YY7xGY$IS=VSTTv@|vRd!fJFTIh5z`8)^p6@fBP&ni^T%hS@ftbmci@E@n1toBqeEdvE@_=LO5|3;61veS+9iGtQ z#TZ0$$O|~=*`N&?DlJpw;6o0*W?+QE3l}=x`=U|J`$Rq1PuFd1X`0raLE^TTfva$K ziiAbV>zh`pVS$>z?d#V@uyx{YQ?+&%iI$qCQzl3LoH;xhqO+U*@uMsXZL^#v1L6EekN?Qj@; z*^1&CQwK5JPHKUEczr>Ah;fR6hsQhm98DAUv+M+5-ca5aw+tyI2C_4OvjFhjOBS#T z9`t?9i>n{UxI#X~WRngop>cgWeqlUKhgyv7X*lx%STz0vaAw5W!_2*2YH)8frR*|E zrYjW1P|-@~o!L=LBg#ib3D>~{4z{==M@FoC2NTM*SUjlcfIEo5^i^#*U23#s54(-$ zxabUU8(>45)IB_bsa<0}x4L5LK{5S=-!GYeJU!Cm*n0(UWHiu|VRka*VlZ#F!9W}B zmG+)n#*qGUCxo$Tpam<|I|=L|)&vnUkoHf_l^<9Bg&YcNuB z>wUf6fx0<(qvj=VtA-vuED7+4ZjjW5=Qx&|gyjl$sOnYRSCXHQTp^3wFr+_-@TZ`1 zbBiH2cCiCJ2mwV_;txUq*{B{w@YVW*361k)bh`9G#E+4sPOIGqA>uTh^~euDq~B4C z)hw7kGlUao&B&81-nU3m3pPHT3z)vJhYy*b@h7HEFr94DnsVdi#=yENTiIP1D zlLsHHt>b`ZMj^*6QAvQj3Ks@CnM(p9s@rY}<8=nY5Z~@M8w<@&B!$p#!3IDEybAZ3 z4ERhI?@AW9faCL#fO~sbSX^k;BN&?u5pr)YGjv8$@9mL2q=!BFcn)-LFO^or@2r5l zYo;4YVOc%7xP%Rx&XC!;Dykt3pO*$_XxB8eS@=_X*u#d^qR(cgZ$l!~z7!X=FJYZF zd9%~gGmW^4zG%02gW}NDjx%7viU0ONx8W^0>+Rd?urk*J%ve{+OBmOZU})+&6I9($ zb-=+IkbC1@zq`miK$8I!q!YUfB{SX`NG!{USu zVo>gjK%T*+la*o-Su~m)m^o&o2-mE&!ITq@p}{<2tIifW@C|$2h+(eN2;Rif#dcIf z*@i`47Bv`6E?@wI_cu1FD9$(?)D6iDJ?QYsF&i~yE}gzcX&>D#=%f8Yx#OUPy{g1lqqDMOJI6klNf3MB=18U(S!lA9aUl?5Blitwn1 zF;^{Ls(G2B5ptf^s$)Jz_eEi&$o71ZB(}ROn;hC5togfzPJ53$dd;UgH1Xvf5e80N zGZ%m}(`m+;>5!4MWs?q>n2?7jjQdx#2Wl7^NfpLy9E-(mf0|0F5uB0^Qh+bGZmv}~ zu*+rmdUPgyJ%a#0Q5;ztWMTY#K_>&`Zg zEb=yJuV0zOe1JTCWQHWaam!GBiEMrHIq1_#2KkM#4%|ly%Wm;Qp$*LYswN98_rk_v z7!p9hfE`#GGdaGf$lbc1;&5!bYbRNtt>$ys`Pmjt&mczoT8#CG@l=WRFGg^ZNNgbj z*Fsz|M1G0F!BdPNxhSU_ee6`fVHYGZoTd7hmIE;78gcAhoe2@UF z$-8}$;-wP-amvqXT^BfR031!a;V>LEGsd3gPvvYnG1YZTx&Wng1*v5zIGc?N#u_Ja zbiHd&Z}ll)cB(h9e*h=5jQpIZUC$r_oKg(FxqfIDSc-?55Nd*^X#(7j92MIGoL$$7 zhC3XekmU5Nv`ZDkPo8NTPa|3sL8-EVgH%;G&x7Iq3LURBy@!RcZv^xlcQe2LkVkJ& z_$Jr{&n0lw<96c~R73|#Dro8P4oZr%%u6X-R&@Un%d!+hiqIO`4R);u1_GVDhj|mhwW1%ILvC&hp~IdItYypv5Ym< z>;vE@#qt2yN&H-z-=rJ6WV_9tbvQL}5l&HnSL5n}s-O%13>!X|R@atrp3_H`SMOX{ z36O;|3(Kn((Suj^8!kI7=bmUJZSqE<`RZbfqk>KI(S;$iaXR6fPdf>A%<;vsHH3YyA9l_E<=2bbF(S}10Uu^cQ-hfwG~uqsq> zIz+3|x1*8CC2?mo3YxNKz#Xi4W4VM)8_=p_<5-8&4h7@0v}@!iR>0d>$@lr zTzyVq8Q5qi(3}yC+f};oxCj>5Q+hT-qEIpj8*p|!i&f{TdWBuRcAahu)2i7+M(v(E zjT`1J-oq2T&PorVDTZLM#9WnpzYBM5qZ4k1&V1zarA9i#hV$6TS{Hs&)>DsN9Zq9_ zv&f?RRdzqC?q}QmbZ&wx7F=n#pH27Eh4KuED+9}L&i!)Hp0nQVg>%lkaMiM|x@51q zXjffa>y~xhNnLlL)?EbaE{p4R7tE98a$B_Yq7z%(aj469(Fu5(r9aIj_Gul5x(F6A zHN{l~z9Z&BrGazsrY0A*+ujHCKaO9PTAOFF_1msB_B&W@Sk`W73oAtT2}=uj9k7cw z?0uia&JzxYx{^6rq6?o)_>*u*D{bCc+V+rs$>sedwge!-QL%Bi(;Mt~NW0T+w&Bcc zMRrTuO^@EiAspOUVabD9l%T;j9MlbYvDCr>4w+xrLWzMD8|sdR%}|%s#nJ#>fO&Cy zKu`+U^~Mt*F5tFT*tlq^i?bIlMc7-wlFl)c*};|YBK(f(n0~o3Tioy93M<#^7Wccz zp%>&7${Y8PSc#`#DsPo=`>HFIQ?Q1*^g+Kh+WTJCmTLP*#E>SigxvOg=KglQ-SOf- zleD`vzogFKBpaHPpRF^vY{U=J#m4QnOVJq|26C<7%;4SKcRP&_DkEFD=xx2woBc1Z#xjO4UbNn-aEG2_j>*Aj_pCE zw1>W88CFWJ*j7+muGChN4$hG}#yakY^1fQI8g4Gcz)272dF=b}i1bA7Q*X7b=Sth9 zdr`F>u!F|xa)BG9kaJ)8or8yjUsL$5Bel3#%@YEvrst7CI6C3U zg8_^6xDy0tKr0j{AA@p2_s8vTmcClrLX+_e0au)CZj|bqD+8A_V6IwMcbxcDT#@JM zYz=o%IQ_NO*u?VFYf5X4%H~p_0nK-5w{|rEx7_)-^OuZ=mZyRyNz)+X!+|s+y#|%Q<~#^f)3y!gx{){{vxyz z)R0#s#S#wZqThSNK@qCJS04D@^-Hl>uT=aBrL#peU!^I!XJTVHE%F0VgM|;ir;`r#&IDl1>YE+y@txI*i`_1 zZut2j;Lf@?fNqp_yy!Mc&AJ;%HfUUNW9>%L7}Q)vLawiM@##9~Mtv*sYhnWf5{79v z722qGw{bMfX5<3(5PuN8)01`=>a0~mOY(-vr@F|VhGcA&?uVi+;wA)`ux&;0HTK>F zuei9pyoqZfHp9a@C+n5^CS0uOvQiuP6m9n#NpOI~Vij{uH^!Ypy@W|#x`gE>cHV5L zbWCS4;q;X4@~PscSYkJ^7{xRITMs5mqHRFm!c3b%tRytc;T;VVfIP2LxmaoAo<@wp zeAm+E(j_|KO7>S1Xcf1h*JD=1L z6t#kVOL{%et92N}AR1Q)ZqQLre}-OcSNofA8TH$sVcJ~B+P;q)kNv8>K(j!k7u&+p zR&4z2_Q$C&^5slk{IFJ{u!4ha)pnz@V#D&6%L;$Gy5Uc!BIxs65Y$_po(55uZ~FmH zv}hn9;hdR}^rVyI6}iXbAr_P(?v(f9%b-4G5#Ez%vf#>5no=#==WI<7zCQyAum1^Hs(*p>+r66>vA zf2||ieIX^|42O}JeUt+l1y2>g&24ki*P|4_#XzPg+)o{p9%0iN*h~h73ky?W@nByHo6EqCWnj3yJr(wN1_n=qG~-lO zPVoFt24_}Yrm`|Km6aPf0%XXH-s@9WGAu`%Q6*=2oE@HkM{Lr?%>Xc^*q)lj3BC)xVklf4-rKw4w`<1wDY*&?m*(u9^ob~XIe(c3~r{#N*%rbl7%C8 z;$TFlCPqYJ{K`kLvGdg$j%s0!>m55E68j?NDI)}icVi5ZLxZ%{utRuo-hLz-T^k^$ zvto6UC6ut!Fm>VVeioU0Ddj-WL4+NiaOal}#*eGh;k|-;EW;u)3OV!e8Kyh=XB+ZE zH+mzER%DmMNel;NKH7D_oaq5OO6mbaXjxEsw?_5{)C}`?V6}T7{5*crqGE*BF!B@H z@UZTI*<~XskxOs#x`LI-*W;|UJio&{!NZ++Rl^y%*tI@L^r06K%E2D-jN~yRA49|v zZ^-$QCwlv)Lrng@x1FXwmw{4C$N zbNep0dG%hFvs4F353LShR6GbPR#>^ips5)+fnWqM5}ltn?RGD?lM!~8P~9!rom>4Y zZQv}I?-n^8d-pA73Sy?n5jvC6I_QS;yL{fry*ZOPbPvvCNxT1MvK_z|I5S+zc{h_w zTz7p3-QjG`g%)09>k{tMhgc$(g{sC8rs0*?@ycK z*o`0`)&TFwwLxoa=jeqrUh?qGEO@#aa3|MhC95u_%g-98~q1j$`^rD*o>L`diY7# zGvcN!JwDAtji-Q>ku>oFUV}wb4tzR{G`_K2#Ta(H&XCXrt~R^@Hg|D_JB)>?G_kk) z5O`P`IZW8{O`Z0GiSbvc(k;?^usXmT>RLi2I31-=(?v=2pXp4Y0VUg-V;iJ7s$Jd0$B=O7sMt+_zSVm+*Y?#ysOotd3EuB2+B8Y99sd$JnjE4}{s3`y;fn@t3clo#ACqNu}n#Lv8 z15zA;CiACo6r6~@IGl_OzsXK(Q*n5Ld@=8X(FRRD!G?h;$Vd?%p1`mSLmv5nA1PqX zVi{8uEbPv>he=c9C3;)KhCZ`)Zs95G=hwXVLG0_G+^Q_6h3U~yi`M8JV)Au1>BdYL z4Fu1R1@C>H7oE!M$Pug|PaVf;Yye(Xie@ilO7s~*Ik=Ci-eM>_q(=_}dXJK3honPM zEjr?kgxQq(p+b4^3BmLI?j?wG5M8k=Y;oM=fB=#eGgw%#02s*^O zQJiy+7mfOeZprfb=(0tz?XkNt?YQ{c%O8Jxx#Mq)HZ*-Pg((;vR|}!(r55IXuF#op z+Qkk3H#F$w>1C&01X@Zl0RfZh4<4e3hX*;DUiZO;_Ho2f|3SrqLzvlAJ zkwOO!8<}|9wVy_{1^W@!HhhFk%r$TAOoj zlS%LT!1hJ<2aCZR;lC<740l5wuD-WH!W^Q-VDVP!GK%pcDA&Ui+gO28*DT|9U-)K2 zrR>?*43!EgrqOVZpqqRM(uPnp_&&*x4~7MSkmR-B>$yH;A@_6*LHuN_C$CfCGeJH= zJtb&I2uBz-2+K$64x4x`bJ#%L3!dwQ%O$_AYlD<3@YutH3xZ>=#+%}%j%|8v2ltYz zZ3&1;u0vdMLrjtzV*F}-2qF7;EWu$zXCR22Cm?1GV~Skf@b#3X&569-8&TYwy&l07 zp1wG2i_DZ^jN2$Aa!)f`ibNh!T;%+0v5g0zq+mHBFHn#$4-XRN;Wm2vvauhBwo&t> zaX@lO!?2eB|ALy}FI^3WP1c!-|E z@D(p*e_>!ml^e)hl&T?E93wIX&a-&54u&Z7M>j!%((Ykk$J1Ka(rz?ZHR)M=ZLOBW zXmzm;7)1(~xE)%TVCxCf5Lf&(Nm)~Uu9E0kSYqYzVS(O7wMAk{aMp$fcj`ALtaVS4 zw}t<3;MSnAa}rt~yN1}9=d&MHZU(K`Ew8m2ZmQ?8AaQ7gHZT=DrT3(Zz|w5GNZnzJ z$E_X%3eVQ5h_YGe3F2-xk1cjK5OKYvBF6;-8%X0Y98W*P$-q)ERh&nsL=O#2%EP7#Q=YK=0Ynds135dW!7%GT$hDf%GDZiapnRHjGeN5bz&EX0E6?Qt)h6M_y#ohkmK3aD^UpJw*+Vgp^j5~m&q}9My zxjYG;FAoJr&uef7<&|)6RYzyf@Jbq+gGvn%M^~C#k$B%6eGX?^aM#*-@`ke%x_drR$3iCg>6z!27yy`XK%p4_SND-?_AMF ze|Q20#!^T2&<7oyqsJ=(us_2!+FLFMTvSuI&AyJsL$(;`2sco$_|v$O&8tqRgB}lV zSwzN`!H&E3y@!wyW`k0S>utSNfJ5bNcrQVQ9nN!DjAjtJcpZ6{Jry#Dl*tTO!o=#y zBn&?1uGP4tb;&n0ArGM}iA-dNA4`=cavpEmW8frpn?d2x$>KDWb-|wkP6i8E!$yn1 zGiYA8+$GUw1*8P+K@xlqvts9R!D2iu{6L&Eq{){#I#ZG^QlKQw-_wutuP^<|ud zZ}li`mXi>E)p8HV{k?WnE1x3oEz76hs}`VuypbLtW;v@G0Jmb`I%U&kaG}Y-?gu3oVy|vFp=E{I3Bz8*S;Bczp@LG8t_WNQP*E_*U(#_v!97?0e zDDxEq8^l)4;5K`dih`>#zD%>c1A#5pHe@sDuY0rgGy}|F`3x{@MP;?c&g^oJ68efO z?6h?1cTs3Sc-W;!(~V8{2p;klOhEX{*VHb9 z8H7r`2Up!N0}{s;jwKfO{_Y9zfNe>wuCItcbJ+T98b zPd07!)>%lQOIQM>1eUcbQ7og4kE%G0LNpBPt_fRqB`j_aT2AR%D$fa;zLgAk13An1k2 zLZ0l2P18y`JRwOqQoud2rqerc%YpE-j#8W4$Ho^Mtcm4w73Swl(OO1uo>WAG{ls;Kh_GmOT@yA%;mgu0Rr`-{p9#zDp4Na{uk#cUd@m?vBc zH_{l2w%agOfMP4N3C@P4xpsj{Vb=>=o?Q}TROxT>yW(Fq;q(>n8&LCu$`y5 zNRzLqGsT8OdL9ot0~}VYWcfrF^9BIKjzh(fPYZ_4dYP96Zc^?rH%qMHb#8Dj)6p#( ziw|CiQTAk6@b@>A-4ccbVIK^$nvrNF2ng9hPG-h^GMjm3XquQZEYPr2%{coGmm97k z#EBT2AlzP%bg5B5xp{R#7ez6t2TQ7JAgokpZD7(K%#}tst~6YAO`8Ma#*#tTVKjv$ zmj({)qRql;?Jx>7LbPQ!Oycevd4EU@MEz~wG8%puc^C>~MCaY!0gHG^{5qtO`392!@$?T?zly%CE=*DNjfzgf8;5Z?;F6U ztT?E6dlFsjp~9FIf^_>co{u+zaAzlG7v37q08VQG(VejrBT~WYu{Ie9v@o+j8*-Ct2fa4ZL+*%5NZ)Gak){0i=^9k00eb5wrRQR#m)UP19hzQ{8JIW z2R6AukQBAaWXmj{Za9+frmLrB;+x*l=$0_qTDRd*Mn(9C@RsIjr~7z<;1<6vs8;`L z57T*EKVzl9;INwPEfILmf)yN6cPykrIFzMh3gF1};c`LthX%~B8{1UDHUyQh3j(7+ zy@lrB*8r5DV^EufQ$rM<)8S=?i!%mm1@mQN|0FOUk#vfFl(H7b8} zdpho9+P$_gr-k+~fV(dpyd41FHEMFAlB^US5NV}ok*IrN@(MGRrD~`5M|{>6Y?-iJ z3@x!5yMT?iEZjv%7ib_;_xbIEdxzhAh#@o{6B2XayXSl6#bWszH`Uk#5rB4tIR=|# z@JZ*?HmSJRG4V=)7g`t_7&aGX-Q*j5$P|h8 zV^d!%yHc#Qm;H$j+7((T8)>Ni)?&Xzk4{dF{H#bG6Vl4-|MNVXw<++%7>gno3Fh^@VOoOjwdn~~`n7iSNpd!ETaTN<(-JV%*||?x zkr*;@OH8sgs9{Ik=1JWyisWzr!yR2UV?$6A!U{C-2ZJGowprCf4At0fVA~mIQ}NbM z43pbX7K~{Q!Pb(c(&S~MP+}fWEFLrH^O7!(R2Th-414Ti@~}Ch!Sy`W1URH!486qB zPWQ0;o?Jp3B^6_X_=IS2hw~%>E56elG-HWuVR82`c^y;d&ob znqko~4fJFh9C2>milfC>VJ`Rti~Z*P@ggq<&x#NiF%+WA8Wz_ttc&BgH{e9^KqxIR zI%qtm7AYx#Wuj6~=sgLE&a%PBpoeZ=0lU8>Ez=c)mZ{a2P{qK`gdnSJxE!TW2$K0m zFp*0~0s+-MxPjSt)Zz==LTrhY*j?FpU>Lba2%HUZ`i`n1mV=0pRxD|}jtwk0mqtGA z;T8?;6@~~)2o~Cm;7&tlE?|T_n0T#d^Jn2;LxfS@%78M2i)_fQ1h!&iP&T<)g@lYq zg9uBNdj~z3?peXQf)<$FQ>;9}LW2c|7Mo+l*CW%56G$t;UJdu&+GdJ_mLf6YBzI&k z2FuD<=!o6RVdC?4vF@ zK00I5?4z@psIzc!o1*i}ea!A@x^DTqC1jP5zPG`sNZSUp>;VM@?er1z5|WAn6+bLe zD;LS2}gqcDioI(x7s0`OqG_gQ{JT~hwV2J>DrGJK)Rn& z)TW7CtHmTx)8Ab;?{2LA)LoN+VVq5^EBd7n)~~H>PKt#+;3Y zV>i&jIg`HO4i9q}#$dy+68bez`f|e=hA140I1I;Mv`n%|Cgfhs3Q|BMs#mY}2c3-| z6@*pVdo4jp5}xdFKHj{z#JrPkS2bnJ7{>eZX=ttxT?+Q&nUSF=AxvQHwtOlSuprY% zte&uM6q3%1O+1Sf?tGKCEEWd50*fk7NgOqw9A$?)8&3wAT5}#9DxRgqJPS0zjy=q6 z$svg66YIg=$w)@eEV6e*2EU;|bJ)23Ab|_D5ZZ96BbVl&BG0t5gk#^)GjM5eETl8g z;(l+@H%cfo;9z~|;FBmBw@P80w4rAfVvH7c(Rht#3oXg!0t4kjx3-M8$Sh=;pi&p* zCNN9m?H??=Q4p0ar{+S~=?5#y3a|)%cwNq{MO{!9X^e9lhHm9#lSwZJc_AyPe=?~S z1K0rE3#UJfKn}k~X(}80PV|g#D}e)8sy91xGytspEI<_wpOodLc3%7T zO3Hw-FTNYW_QD8`cNmdwlZa?A*F&Av$`KqLkB+DuMqI-p3M~dQ2{3n|n#A!i3X>wa z89!F&_H0rV3J%gV2<4zoj2wud5k=TN5B8X3+i^q~Dr_bSvEk17q|(N&{SiGD9ETqz ze>RnwSb|#=g-41~$&3~QojCZ^vqUjEHc_)p#vj!2(ojAxR zxP)Q!WaECs&x=yy&>hjN@3C>~J`mkSX~T0j7#5g`?6J%9=wWP}P|Sgb(NT(0TI8%8 zG5M~h5s62?tn@K~B8>t#cgu+2`OifZtRP|S$y9(80ndG+AY|X8)d(_NFZUuM_UYPt z5$0TtvIs0DpWv#^can+1kgLov$O%x-mxvMW8tRpiPjGU2q_>O%MidC;=51|9M4!Za z(g&iuh`p_1TG_{;hwem2jI_fWLAtLSp}cV$VZKqH=Ft(^80hn0mm!@>M$GZdFCxb? zgNPhVTY9)`f1Qnh*o<66f5I$7Z5*53{^Vw0@)Dl)0lvXF@SkGgFhtLP67W z(^Ipdq@&Zb)AOOIDWve|u~69b3L}^T#HSr|RI?%(2<2d9NnO z%CcWiJm;^@U<=NK{N9J&tzc{E-X?5NzSRQl7ZX{^hULM0%$ZC}cnz@cNYr@4{ZBa6 z;pG?ajA$vrVM%Y(L%*>OvSJkSicAr|yl8H{P&{V?iJR=C{TA;b_gUr*=s3f6&U~kv z=38u?MkxPW505p=fsNHc&g+=5A~|dZe##-7$?kh7d+dSNw8Ndxw1;KM4gIAZbL1`U z6S7m{c}iDc-s0DfjSe6nxZFf;CRuIM`L@*MB*x6_ROlvFjDt(I!f2ohJ|gFy;0yrY zS6FpMuFy|_ETC4@AUqm?xnm!9^_ooZK3(_~m?_ctadWV5I)#3Rhq5zB?V+y_hZU0A z{OppOKS^x{7j^VE?NZW)rH)5t1vAC61h8UH&;P`T=NUNAX%Q&I5GL{^$GCFNzZFHJ z3ozmdZ`CwhA=-qM*}w6D=ZrRis36bUjg-K7oQFEgfs*ax@pn@Z?Ov#~*e7TcwN`d@-*~WC`P~*|abp4wAdgH?*e8-iMk0?zwx^%xHOI zNcfJY`64KYf2-c#h0`!z0JCyUmSa*7jxJkF2l3E=dy}jXX?7nD_+>wjpmd-VEeL6^ z4M_)#NkKSwPCp$mMdOfnPv2uoD#bvzpy!Z-m~pR1t8|vO_EI$vlY(&OqNQ}Oh{B;# zeabM|j%WbaH9Mus_}%mO(3zO|-2Q2TK2TXwj+io2n+>(Zzg8sQKmTtjFer09ERE4i zk6x#$YzRjnMg8Q`6&DhMFt8utaBDg`4-Wb1eQ#_+7*<}q;r=uLo6G-wdJWh-7i6$pFC{MTR_4sz=BZcsio;ZV$tE`@J1@qh!P|eMe%)*N1jtdW7DyR1Dxnt=8;=#+Nq2m7?$w8fvIS|(|q?(c9uDiJF z)YHAirw!{YsY=DeO5Jff3+t*5vGJJKMy3Uay~nGfZ6%KN|5Ac`sh?z^Zu*k@rvl* zOqxkudj2?VCy-L@%4sVltL`~%xf~*8X67D!NW!(LyHlX>&K)k_%5_UeF ztq5YiREsIom9D8#obUfhDm)P6j@Az#cy|19Ev>{9HPjhtrw*la-% z!`@xy#BL3G`!;cwKK_hv9N$c}C-!S64;WM*%^3Zep>Z!EKgv`8)sR=V}K*e92-fjSR`+9O#m->p+{xz55*7K>Rh6@4a7gKGwX zlV8Mfu2gENFvyW9leopV3B%Y}akWBEi@1af2MI_^hU=ZJOL#xw(}km{8(i?qsjk<@ z{jS0r+4WO0!uIY(RVu|mCD$E~jw0DvtcK;?m-4@-o3p?xj{GX6}?w zN2|q57!#^=Z=j15C%F~)eT2}dOmsREJ%g(;m5@6~{JWM*3PzFryO!g#^6-B~v&>Xv z|E}f!UCR~v|KHYf*|WL4*;H+O!VD-iH@483l=QGleg=-6-40w3oFh4i&iy}?mIq!k z@E>g2!L~`WL%a{?@=NnJYzstle7e-p1`4M+^pf=krq1rhCN8fL+r@e1^}j!b*`-MN z9Fl2rDH*?8R!shEWDjpKpn+vjuttLWN+yZU7-R*3&PD=ai!aXpVU9ydsaJCt4j!ESlZt-j5dc}P1)j?AjNARuh)Yj=B*9d8J$~d28i5{!VXIUOn zv$n{|R+%qiXzQ>tknz*(X__wxY$KBco;AE#kS}N`#|9eP+K{VmY-;I-I=;AQRDII% z7F=Ml)krqHOJn@rWo1ei<_DHClTMc@=fzp!mzf*;F3Rj8ps{Vag0led<84rG55RT- zeyiQaKJ@eO0C+EQXNey9&X%WYjrWDkK2v5so7_=Whc?}6qf{$2aTUhNWJ&v0c8nh5 zs4`)VTUf-cSh(XVGgZPdytnWX|7B92!;3&-N1`uzQnPo+-v~BAyv$OP3~@#7pB0lU^Br`ZF@EWSQX}m{9hM=@nM- zsDfA*+{Z9uU^-!Ny3sB<#AD=rKX#Kg?6{bxIyakK!nsK+g0PwCG={4S zBA(zAM`DarKI$H)0uw22@MgF+%v;DM6Krs}?9!Av1X(7nI4m0@%N~FW5bKr-4>OqE z=|IHV9TxP;qA0Dyq@n_c!v52eZrk#L-n1WHKpFil1s+b@{o*z*ez6eFmEu**<=zS& zyxzdUc}r;E)x40^lRK1fp1kF(3@-!|PT{(lp~MTFp`@gOqD$y8Hd6%Xp?Fc9+76x? zp?`vw;!~vvXo`u82KlMnUZ#}Qb{7qlR!3QJoEu=Prh`XvvxpJ}x;ekhn8ktJz)PK} zNgGZdqTE4A%E%=7FAHs2BT$$o(kXFT{zy`(pmrMS~Y5(J-|M3+2A;}85kwAVwk~9Rh zU+UnYlghUYVDG8WO_5fhPatiVL0p2@FRqnfrD-Y>vjcih>OK-^WnF0T_u@AEG7Y0* z_Is;`$BfI{IN4}86d^-|s?g=$Ivwk_-}T;d>kKZN*sho9)P}>cDd^9ROn9TIoPWd+ ziW!SpajQB`2MP&67}Md>fg(x}iqr^h)_{(;vo({zn8e}ko|+Pu50sG&kp_i#I?FvI z1q$yR`_*vn^Vn z!!F3nU&?uoUfZ*FGu#ZyfHRi?p(~Ui3;zpX8mkws{pguey zTmT$b2cj2odcK8MhFKO(FbfzzL@tp}Ve$n(QhELoz5=!+Lt?v=N82c2LGB5KI;-Qb zRR?d%#K84vSwg1!u%){7S6Zp;Fxd=Wb)zG^adY9N=MAz@fZGchl~;-^c3!g3F;FfcKh?|Kj8 ziu-`NG#|@7`?HRl*vgFo-eak);OM%O)^A&$jrIi$m|gFCrM>5U7uo!Fx{b5&CI&7S zHRWM%ekT#jEwBIV#oEUFP3u&{Yp@V7R&dLe?6DEdeA8mMP?R~a!L0GnSOly{OBoh| zP2edxJcUT13*-%#7R?6RAv9jPrv$0RJcVOk7#PV@3>e_mE}kOg<0tonLbSzV4CpCw z+3e`uty6VeGoUw}S~+B_!)xUgdS5E0v8^P9ikUkbKDnLRQhbnHxaF*3+a_#p7cg`s(S6$Z-Ko-m~J zjzlIU+JrDXG&1#0Vm8ONBZE@GdL>2YfWcu)g}zrx`)#k8;(Q+!Z=eC)o`#XDM#I1^ zVrWgbb73HF4+1kc)^R+LXV6_81ROk^6c#FUXQ5W9KqoN*#}Hlp9ARB7@nQ^XxeS47 z{|#eVANFo;WR{sh!}Kt+Vu(Ry=1m=Ls+K*mYIw>m>R4(m3M=dg3q9M@Xb;C=`mQ$2%a#RDl7%2fH*G*2w_of zR9YJ4ET&;W!u&%9XMY%Xs%)@g!5u5EvUd9$)64$nviFH+bmA$l=t6VBp|*FKSw*0m zPep`qk<1#FyFoCoI6R@t0ei!ZX?2GukXf0i9|>ma0U;C5RNBhF*TT%Wf6m^nPUiMXBG};D;}ItQaOcd zNx{6!iDNgPRO>O$JsE^RBU?Ga9L%ErP-wx_sOM9n$(Xh|1PSL+E=V|aituQbWT~l% zl23^y{+48>Jh388F@&l&MMjOJTcZ&k=zAM99{4RG7@{p24ACB%5idGkwoV{Iwpswi zpUwF4hZYUO3@H^*G7AKFX6peyya9nYw5ULfMkGJw+2tP2O&otXi*k54k+OI^m+}eO zbrsC0EPHk$y?Ir}7^1B?HF~64xj(GN*3y9H`-(dK;IjnAiEzM9TPXd2)P5oxO%!~H zjmH-fDR!U4+C49Gnbs#?LSRS?2w4_ZpCMdM1{6#KJdNO!!Y<%ba_disDedQnj|QuN z6fYygI)L&VS_+n>^jY&DVk2ML33Gsv_bTrZOV7;i@CW zIHa#+@}16BC5|^&rFd*vs>LJcsTjwWt!g}aw#sn~*{a9UhxYlHWvD80j3bLVM>Tm; zqB%v}$?yhd#@2c!SGH<$QH`PxS7A=Z5LM2WvFU%EO{y}%=_FZJ%tw_)TrcU zBofiwC@n<{2T@Ys%hge!k5W;@GFn41*Fh8%7<2U#==ti&Fyw0|!!=4dIlkOZ6SC#1 zCa@krGZEKt#YEK6dI?;4YKh2sS_$+#r3CT_on$#is3h=>D%_C@iDcyJBVibwVo1r; zHV`v{JW3ZqLar(zdcGzC#|T9Pjsxo<-w)X6n?O;4!Qhb|nwcJZjh^Zs>5OL+` zAtvYOA)@E#AtLAZYR8eUhlp=f;f~TnEF(`3DZ}U#=j$O7lcR@-JVFlTMv%|E|>zcVNqquW`UOqDV*S z8FxVRXCPmWC5|55h}+@%kMuCTb|M(*3nvr zxrVA8rjFD*#Fe9Xn4F_|h@PW*h@9V@9mnXx%hNt2XO#L;p5dBW8Ahi#Ujvbt92G?5 z5ju!i@{|zMbF~n0&NSiienn>K!7ER6AhG(Kuta(F|8wFa<+Ub-*gIjdU&w_Nby*fOqJuPzOr#>mYT8DP{BAjR4o<{ zm5PN^V|GMI%`7Z^SYc$SAQvW5K0aZ1N>bAX8!XgD7EbFSONum*!(-iJDJiXEDOTUO zzSJXc*X-Wpld}7h#}V}?kCN_FJ~69T1@!EG<*`IP%cI17D<;LgE2gLWSDGVgRM`ws zAM=*-}&L9o)?nx(v<3b zUeK`rd4zNi^oUU(^eJ&K^k}Jm=+SIX!~kv%2Hic)7aQS*5NCKyVcBy8bIqdZ*9W++ z(XfsTT5ID4hTS)iu_0zhxPO zo6Q*FA}^BO3RwvemU>H{s4XIZKs{WwCzsxl3|xcNakOSqsh3)7)s1bu?Wyd0=1>a9 zS!u7=ciSrJz5$-6ccI-cJehMU>CiQ2aXP7QWq`e`EFtDJuZsll;NT7fO{M>PAGecq z>2@cIyo)D|=t3y^9h8PVJI=T%5)U%v;z2>-c(@jchuCuQFsVzeKRuSmk@ML(G=p7A z1T<<3;nl!n$Q{)h1wLBj8)d~9k=q$=QyP};YE;_A90hD zQsi1qp7rDndX7ddyT#Y=jayFa=f}m@e!WD+aBy58_~m#p{rIhWx>%gP^tk4z&f<+$ z8Z(12%%>jblnoIVB3_&!Q*oWwGwPW`zpY`Y8Xc#Io^fm9DuX}t(_ea)k5rTt-A|kK z`Fi;pS|}F{Bwa7vyUjjouV~Pvmn$7zh;8!4(^(=v3J<{!4)5`@3U79OfAp~EalNV& zp^UG*+_ga00N0ZRuToRfnE(l$uaBXf*=&cSkKb6ZLI}gT{t@?=kSFl1pV0rSD#!gx((*- z2lrV)U_(^{!E9*)F8jro`Q$q*aYM{?x0wT2z~CCw`=!@7sCfMJgnlXejA`UK!`I zX0Rdg`Jk9%r*cl(!_VYyLe=&B=>>TcB;oUQ8SCNfX|ahZIHxlgpwOHzGDIW&y~kZT zJ`SoBKBN&1U!tuk2Cr#`Kn1yM*rn~9ukVDg=a}tUJc+B~_@9!PKBZCJbsaA)blLK< z-At|MNm|VHGa7Bim`&WzA*+JOVN6=*SvRCvN4~8*WZQ3+(;$Ck`zU_I8X|plNSY=w zguBykTwm+bemi+{v;rx@)|0nC*zM$4&>iV|i88;81?J#T>Ht>R%4AcC0(4xDA}gy( zXilXTapfbaO@^Tr$_$KrqJ6t2EphZ+T5KII`2ypb?$F5AW#o{e9O-0LPu$#)tC4lV zu_xnlXx;}N9H#uN8%)`So^T8>9c;=R8Q#XM%zD^yUz!QeI{uV9?rcr_?(PxQx^3ug zXlTmA=O6I!G)AQ9NO?q*Jp269k7H=01vi(sbkCP^6CZul5&Z@&^q5M2eKf8|nXGdc!Cs5u5L`$#?VRlrWTwyBiV>1+tVhoH_nSB}tA0cl8Itq3M3Y@F{X`L1j z!ww|&&F2Q=EQv`9t+mSycU znQ!<{?vS-)$>JAgkp0?gpwJng79PYlTYn}SlGj7)`DE24!=z1C;fts zuE_Qk<^hiLh$(V@Sw8BUC20VV@sa_aP%%0>`M=%WT&Lh5J+ef$3vka1^~&l*R#zSE^Dmn$>j z!khK;j&sW5V>wUD1ws*;T->}r!V3>SdqIYV&0x&zM@|p84v^ox7v4w58H4+Oz;YAC z;sT=S{lELgY)KBLXl~a3@C|&*E0CiIFJ38Ze$SB#{i5$mzN;Piw3Dd(Z|OH=wj0h; zPLjSl5aA~*PN;y#<7Iv(nC!D z;z?;otr1pgTWrUD;H2#j#H<^%-IK?d%(0}{ws>lzwWwC~YK6WsJx_>${j8Q6Pl~-n zN;g&8Lv7a;Xr>+nns2i`A#FK4H8jP6!09w8hL#drR8LL1WlxM9yQPc@g>6B67xezf zbXNz5kv#4vQ*Pc>rd-o6T1GUu>mV&Nv3gV_>3S{RHba)4TU`8{u%pe{*x50X<7${7 zq9dEN29}}CLDHrMw>QfB{6k?NkkfR?@WWpcdD>!q9#co?tlhFfEK9=`7W)Dz3_n(w z4s&fCW~8LQ@M&vf?qL?DhgE&<-xMl_#WXAD z>aZwLV^<3Wf|g=^Vj^=ehUci}PPf zz+^Ah{Pp+sa$`TG#`u8OOW#0i%zT4Hf?>4I#P|gK5P;=OFde zw+Xu1YGjL|f?CowatuVRV9hW5&4+r~@bR~75Wruy(0D@+zgRH&7Y{v2SBod_ ze21G-DKZ0wlEdOp-X-dd{D6jYDn$m}FVtcUtD1T|;US^(&U(mapIu6P|5OBsdLR6rMnL-iRj4)YJxcjw9i--j%r~Adx32=_n12~)W^y6 zk8b^FCdo~D%-;(iiC8#$ zdigX#Ni+iSfZ`O*xV$RhOAccfV;-+G8NC$FxDLeB~ciBCLoxilgIrdTbdN~YkOR$>9e}?i5Awbv? z%Wo8u4DqmFAD>9g?Pv zuL_~Iruy;o4tp4^0;FxCri*F!%|u47pYn_%S6pU~pGeZjn{z{0elZn-B4~0`BS?Y~ zPdH+UVhBo#jSrdWBf=0A4aW?N5~%>xsf_Y~5^6{@K06Y#Mst{Z%~8XIti>Na&3~Iv zumN9EvX#?om)1^F9XP3>q|0mU(-HZl`)2Z;Ku|^~ruxP;vmJM!{VG+~_Zkd_r=I~5 zt*x^{1I6zjO{yflZl-{!+@~Q8|6(tj5~MdK$rs5Km{9|I7$#qhcR&G_6mX%}PQ^y@ zAfr0ES0`KSiDxZ$W-D-HZ|yh$pY$l8Z##?=N{nCDe6D*eM_uk3L-M!Al;T}u-s#BI zv+)$~oUX0^rm+CYzi%;-<{_ucE%)0xl`nBl;)0btP~?Vn#Za{SLy69Nw8b>9-o+-sju`SRHD-RZ@} zoyjv2PqBLoT{`yB2DKRVWjBjT2VD|~wvb-4+io@IyVm|YHK3?@J9+FEf1j*lX-XCF zCw!cB3QTNxtuudmCvTM=96rLYl+ITcHwskDpcSZhBD%o17}zeWzXhiYbqUSoID$wt z@*^=75BlGJF3JexR7xPHa<(Rdm?}dxQVex0B+5_41bQYY&{I)^7;&7iglNcT`Rm(U=UdFKkdH9PZ0zIJ?34Wk%$)zqUES=_LnFz~?GT@R< zN=8tbB#6U_(~_`1Fc{bzV}pGzP#7bsdtELEvndc-FMATjGD>(@NI$Goig_?`Gtau& zWIM-x|C~EjMmgy9Ig&UEB7SU^_UjT6v~h&2n|Q%|BvpN>OzZ_K?idU5C_HE^d_^!v zDVgL4sfc4V=|yl^IN=59TJ%cV*g}a}5ojf)P`t2m6pl4g%5T>w#o~FRKqc^O($6u_ z%nY=Z`RSZ0V+@`SNcuBiE1tsep0LGLkrQpMU%d67>nh|M=hki|8^#!~9eWlQATX zreN6m`Jc1bcaMC@P258s2*v(2evhcGl;vPLj5&?oVonS5);U9c$efB}ly4&$;#KBI zbt#L~ipm@*%A&dkqLU#Q!)8pGxAp~H?0*gu(C9+AV+pTaR+z}6g#6F&Iq>og2pJvFqMx>44X@f0t?IEV8! z7cguvQ(Yi(t6LTvP|P6Y)HhDDuDK&?-LEz{_?Cr|Wv$5Ox>1q>RN$P1sVJQ6k2tPr zRg5L+a*NZ6Smz~1A%cVzG2X)Q8ucMFE{+@Z3%8`^g^Bvy&f<4Ljl;lHSs<4+G*`yK zrZh}G-C-6S|6@J_y^FTjQEUNnBCV2#Ogrq~!CC)PUAb3HU0w2+85$XG{Mq_-C`Hlh z{e+4YjGGo1*IIZXuGmNsDYNp-FQX(scd>pnI&m>G!{>F!6p6SL?=#I77;t4rL4l{M z{so3>r=lHsUX(?S>^-Q2(hWa#CRe&`n_*JmHZc^!!rc#DT2U(isMt=B)Xg0zT_P`O zp}P=@9CTuHTt_0C9SVTp92T|DTMT0pVb$y{Ojowe=}#X=5EH%aF>6G@WyLlRgAmYd z*|T(8@FLxmx=2ilTqGyuEhU@8r;M_elmt#%%woW#j9K!yfF;~w=}HjgqGceqTp6-0 zRF*t0QIR_;PLY+CrHo#*r7cCiG#ng;kXXmyMi!2v3S~^X@p1W5vX>TG+avyR+pM&f zq%700M}}?HBQ~@9r<^l3*O0h*Bn^bjP&%9o_p61N@SSrTsSQ7wx48e>V$*md^Z-Y$!CrIy zKaKll<=0|Tdgd*sOesAqCbh6KqXKKJw!=#nAy$Pss{-ch*(qYxoA#q(`@-qd<$W$j5(yMJICdqJ+p{bwSU)7c-Rw+TGs+1TSf4RX>-t7bj2QuB1!`1}% z&sF*L_%vjlf89N!x))8SQQynf#nfQRaY0Lfg-9*MilfKRm`=Uq?(I});N(TjG3466 zG|1CShdq|}=X|5X_F23wq)>w{7Q?3ArC@jAbC^O&<;hNPFnM*yb)jL_pl&NkIjD?! z(VvW)W@?4&x7hO+bUrxD_@9=!;S$J4PUGobqg)XcRBT)y-!cnMaZ4OiRUlJLMm{*a z75n4tq+I!t#{9-PAq7;!6}7@FQmHZVaa~QmaVkBHEUE$?TZOT;e0T_N1MYfk=;>$Q zvnXWpA&-?-xxrqyVnPlM8?4~3guupAPNT{E7 zl{_aVZn|`c5=*D&eCvONS$4`wniNlzWf7Ms>Fe2SU=G8VbPT!Rt!-CXY)<4UZVmMc ztQk;l`sF&66KRQ|TpUHJX@_CpFFx5mxEo_+kw+^e6$IA2buEY0D^f3)EWV+nqyrce z8ngOdff$$@1H7I3#l-^OCY@K?0i#JfWYWELK1h^<{e-xs2E(*5OX;>5fl@tV(sZKF zNXkyalBEmuU}-LA;jxs{Ky-T)u2Nr!CJ1&(^+M5-<)c%vzxr<~WSoDu(?lwSW=f zblVM7gseQeN)byq29MmE#tkzgUW}^6OZ{3?Gh=WYwOgPVMaF{>BO)e8#ZaLyH{#Ec zq2mywUdRT;kub7q#)`Z~U@a{T0NRAtwBxz;-qE)eSM5eReH404D>OVN6bdLWbsGy2 z|j$yth=#-sV#Qnk|tv}T*b2X?#Av$xX5<{TM@c^s|m3MYX_!n zGhaTW&PZ1766Z?Np0K?{CKYy<-~?P0@BBbBtQ?IQ(Y}sR^fF_iFZ1KzG#8&4X%~8I-@XSo(=g=Z0E>hA09LdgF~Dcq2I$Pi+4?goR?`L+&ve2V33#X z$foNFHiDES@eEms9#R5(6#+aNQ%fXx+)sbj&3h~q73>56eDzm8e^6n|QGliZl=yzy z9lHxr%aQ0Vt4b6XyuiDk^*EANLFmE13KKg)dznnD@Fnogx(N$b#_=OwWr4YR%&J!e z${cHj=gvr#xFHTqzxcCMB^>hP_w5qn`wA0RwAA_ia6DhVOrS=$#v#Iz2s9>mFc15< z<+j>FeqCdc=bjA*|0{~%(;Wj2q4Ui2h9^i%@mP>=rV6oH7zeAAyi=ZxYRi${BM#N9 z8EJ$y5)eU+2)X%aj|d~I5n%)|LfO_-PGt(L*h}l=9=cgzLpuv=7=$efJnKE;O^}U< z6I>(a*pj%&yA8X}vIz^|`+8X(p~WNEQ*ePz}X+3}z2oL|7xn2x>%lkIGAj@2%MfD{~LUEU=-Pg*B8@v+ohD1va9! zutv0a)nku11F8{Wz_enU53VO{RLL%Ynnf|fT1o|34XsYFR`c|-hZ!ue5vheWqP>`D zlnux&7m;?N{_HnS`-Uh!X2S8&9?49hjfAGaR^(FissQY7;Cl?kmg(MATKa4_vCMnsGk4Hcar+I2La>?V2d6d$Vo~61}uZeH`f_D>&S^r>mVt z*~36Dc_&h=fh`1bUuMayKHh$|4@y>s_W{14UhjirOSlhCZpPXNi2RbaVjrv+Co}}S z5UpjQCwG3Pg~45IFj2VxdrM=tTzS62126-{dCZ+x?~v}kUJ4wz!PWJ^Lh zF>wIg9825LZKG4X4};bn(ju@SEp_U5NKC;EsmUO0htLGukQs-uI|N2xLz*3*?vQ7p z4T<^aY=_hw-jEzdI6Fj!amNmv87=IOZ0Kj4{2lTPvLP?J@H@msU_+Yqx_8L4(1t|o zQ16gvp$&<_W8NVy;99bRqq{?x_d554HC=EotD%>NZ0atDadLMkWspt146dP?K{d3C z&h-xEBCx4jgf&!)poV6l)0J7)9onVfM%0jlTm8c9uPhJAa!#q2qh}Wvcj}0uXV1W; zt#_Y)u3aFIGm2t4z+w8{*Jr1F*KE>R5EW2rt+pjFCr__kKzs+NAkRX?qMv{ItAtC9 z+5{D1vAuOWeF?H!B1}i!7H5G~X}*_kiwdZHEbqI6w(%pXU^CBbYZXw{)P;_&EhxgO zl3eHCmg8qYcA#{IXFpI?q2N8V%mSk}I&8V@k?H?U}jr(P0IymN(|w)H={$|6 zG^6&!IA5(Mrk{4i;AG7t-}i&tkbmvI@$h6Vvmris0WDDQf?6Q!qqcAoqeyI`iZg<# zX+%;>$ms;NypnjNy~nGjGXAJxXn$TISP?-sJ8|GH?R0Uyh@7EuN)(wyD zA+LnPx#GOOV-cmrD+PI8E~lhtwj!BFRWdRbPXs-lq{hwd@@n3=oFGW|twPSk4?JL$ z(dOOadDJlR5|j)#OlDo7pl{aOQRvZB{ZYO#j<=>~^6?^8no;>;%@NMLrwG2zk#s-L zIRa;RQ^c?LSC_8et}%*LDTd2y&~JA|d7fO9_Rrx0H^}3e1imAjq`(KuV|lo}{C(T4 zziV7M*EJw{akc%XtPs-o$U(ANQ(}xl%gt=5x)QiRw_$Hqh0<&R@I!WD3U$Sbz~z~l zAuacGjxEv+J~qLKdAPRIfcdUAx1fzmcD=R$r8dF}aM$0aX0`y)w4o)ADlSp5^1Yz3 zOABsA(dYElyvWqGt;&!tx`q`$-2#$Ak2^%XSLvU8&C_oH-m|Q!;j^ixMdW8ncm^M4 z!okc`1Fg>Q#>zz#qJO~?w2_IFU$`A zv zdV%Dh2I_iA!0`f2ElNg*a)pD!FK|c`S!r}BFGiqrX^kYbzOaR-#T(_)W0IojiFxV7 w1&dNXc>`;$Kt+s8e3Iu0w^f`HU{azIPPI5jl&ecLQ>liGfZo<^a8hdjA52bT?*IS* literal 0 HcmV?d00001 diff --git a/openshift-hack/commitchecker/commitchecker.go b/openshift-hack/commitchecker/commitchecker.go new file mode 100644 index 0000000000000..1b2395d4a7c13 --- /dev/null +++ b/openshift-hack/commitchecker/commitchecker.go @@ -0,0 +1,39 @@ +package main + +import ( + "flag" + "fmt" + "os" +) + +func main() { + var start, end string + flag.StringVar(&start, "start", "master", "The start of the revision range for analysis") + flag.StringVar(&end, "end", "HEAD", "The end of the revision range for analysis") + flag.Parse() + + commits, err := CommitsBetween(start, end) + if err != nil { + if err == ErrNotCommit { + _, _ = fmt.Fprintf(os.Stderr, "WARNING: one of the provided commits does not exist, not a true branch\n") + os.Exit(0) + } + _, _ = fmt.Fprintf(os.Stderr, "ERROR: couldn't find commits from %s..%s: %v\n", start, end, err) + os.Exit(1) + } + + var errs []string + for _, validate := range AllCommitValidators { + for _, commit := range commits { + errs = append(errs, validate(commit)...) + } + } + + if len(errs) > 0 { + for _, e := range errs { + _, _ = fmt.Fprintf(os.Stderr, "%s\n\n", e) + } + + os.Exit(2) + } +} diff --git a/openshift-hack/commitchecker/git.go b/openshift-hack/commitchecker/git.go new file mode 100644 index 0000000000000..a919632399353 --- /dev/null +++ b/openshift-hack/commitchecker/git.go @@ -0,0 +1,378 @@ +package main + +import ( + "bytes" + "fmt" + "os" + "os/exec" + "regexp" + "strings" +) + +var ( + MergeSummaryPattern = regexp.MustCompile(`^Merge commit .*`) + UpstreamSummaryPattern = regexp.MustCompile(`^UPSTREAM: (revert: )?(([\w\.-]+\/[\w-\.-]+)?: )?(\d+:|:|:)`) + BumpSummaryPattern = regexp.MustCompile(`^bump[\(\w].*`) + + // patchRegexps holds regexps for paths inside vendor dir that are allowed to be patched directly. + // It must corresponds to published repositories. + PatchRegexps = []*regexp.Regexp{ + regexp.MustCompile("^k8s.io/kubernetes/.*"), + } + + // supportedHosts maps source hosts to the number of path segments that + // represent the account/repo for that host. This is necessary because we + // can't tell just by looking at an import path whether the repo is identified + // by the first 2 or 3 path segments. + // + // If dependencies are introduced from new hosts, they'll need to be added + // here. + SupportedHosts = map[string]int{ + "bitbucket.org": 3, + "cloud.google.com": 2, + "code.google.com": 3, + "github.com": 3, + "golang.org": 3, + "google.golang.org": 2, + "gopkg.in": 2, + "k8s.io": 2, + "speter.net": 2, + } +) + +func RegexpsToStrings(a []*regexp.Regexp) []string { + var res []string + for _, r := range a { + res = append(res, r.String()) + } + return res +} + +type File string + +func (f File) HasVendoredCodeChanges() bool { + return strings.HasPrefix(string(f), "vendor") +} + +func (f File) IsPatch() bool { + if !strings.HasPrefix(string(f), "vendor/") { + return false + } + + for _, r := range PatchRegexps { + if r.Match([]byte(strings.TrimPrefix(string(f), "vendor/"))) { + return true + } + } + + return false +} + +func (f File) VendorRepo() (string, error) { + if !strings.HasPrefix(string(f), "vendor/") { + return "", fmt.Errorf("file %q doesn't appear to be a vendor change", string(f)) + } + + p := strings.TrimPrefix(string(f), "vendor/") + + parts := strings.Split(p, string(os.PathSeparator)) + + if len(parts) < 1 { + return "", fmt.Errorf("invalid file %q", string(f)) + } + + numSegments, ok := SupportedHosts[parts[0]] + if !ok { + return "", fmt.Errorf("unsupported host for file %q", string(f)) + } + + if numSegments < 1 { + return "", fmt.Errorf("invalid number of segments %d when processing file path %q", numSegments, string(f)) + } + + return strings.Join(parts[0:numSegments], string(os.PathSeparator)), nil +} + +type Commit struct { + Sha string + Summary string + Description []string + Files []File + Email string +} + +func (c Commit) MatchesMergeSummaryPattern() bool { + return MergeSummaryPattern.MatchString(c.Summary) +} + +func (c Commit) MatchesUpstreamSummaryPattern() bool { + return UpstreamSummaryPattern.MatchString(c.Summary) +} + +func (c Commit) MatchesBumpSummaryPattern() bool { + return BumpSummaryPattern.MatchString(c.Summary) +} + +func (c Commit) DeclaredUpstreamRepo() (string, error) { + if !c.MatchesUpstreamSummaryPattern() { + return "", fmt.Errorf("commit doesn't match the upstream commit summary pattern") + } + groups := UpstreamSummaryPattern.FindStringSubmatch(c.Summary) + repo := groups[3] + if len(repo) == 0 { + repo = "k8s.io/kubernetes" + } + return repo, nil +} + +func (c Commit) HasVendoredCodeChanges() bool { + for _, file := range c.Files { + if file.HasVendoredCodeChanges() { + return true + } + } + return false +} + +func (c Commit) HasNonVendoredCodeChanges() bool { + for _, file := range c.Files { + if !file.HasVendoredCodeChanges() { + return true + } + } + return false +} + +func (c Commit) HasPatches() bool { + for _, f := range c.Files { + if f.IsPatch() { + return true + } + } + return false +} + +func (c Commit) HasBumpedFiles() bool { + for _, f := range c.Files { + if f.HasVendoredCodeChanges() && !f.IsPatch() { + return true + } + } + return false +} + +func (c Commit) PatchedRepos() ([]string, error) { + var repos []string + seenKeys := map[string]struct{}{} + for _, f := range c.Files { + if f.IsPatch() { + repo, err := f.VendorRepo() + if err != nil { + return nil, err + } + _, ok := seenKeys[repo] + if !ok { + repos = append(repos, repo) + seenKeys[repo] = struct{}{} + } + } + } + return repos, nil +} + +func IsCommit(a string) bool { + if _, _, err := run("git", "rev-parse", a); err != nil { + return false + } + return true +} + +var ErrNotCommit = fmt.Errorf("one or both of the provided commits was not a valid commit") + +func CommitsBetween(a, b string) ([]Commit, error) { + commits := []Commit{} + stdout, stderr, err := run("git", "log", "--oneline", fmt.Sprintf("%s..%s", a, b)) + if err != nil { + if !IsCommit(a) || !IsCommit(b) { + return nil, ErrNotCommit + } + return nil, fmt.Errorf("error executing git log: %s: %s", stderr, err) + } + for _, log := range strings.Split(stdout, "\n") { + if len(log) == 0 { + continue + } + commit, err := NewCommitFromOnelineLog(log) + if err != nil { + return nil, err + } + commits = append(commits, commit) + } + return commits, nil +} + +func NewCommitFromOnelineLog(log string) (Commit, error) { + var commit Commit + var err error + parts := strings.Split(log, " ") + if len(parts) < 2 { + return commit, fmt.Errorf("invalid log entry: %s", log) + } + commit.Sha = parts[0] + commit.Summary = strings.Join(parts[1:], " ") + commit.Description, err = descriptionInCommit(commit.Sha) + if err != nil { + return commit, err + } + files, err := filesInCommit(commit.Sha) + if err != nil { + return commit, err + } + commit.Files = files + commit.Email, err = emailInCommit(commit.Sha) + if err != nil { + return commit, err + } + return commit, nil +} + +func FetchRepo(repoDir string) error { + cwd, err := os.Getwd() + if err != nil { + return err + } + defer os.Chdir(cwd) + + if err := os.Chdir(repoDir); err != nil { + return err + } + + if stdout, stderr, err := run("git", "fetch", "origin"); err != nil { + return fmt.Errorf("out=%s, err=%s, %s", strings.TrimSpace(stdout), strings.TrimSpace(stderr), err) + } + return nil +} + +func IsAncestor(commit1, commit2, repoDir string) (bool, error) { + cwd, err := os.Getwd() + if err != nil { + return false, err + } + defer os.Chdir(cwd) + + if err := os.Chdir(repoDir); err != nil { + return false, err + } + + if stdout, stderr, err := run("git", "merge-base", "--is-ancestor", commit1, commit2); err != nil { + return false, fmt.Errorf("out=%s, err=%s, %s", strings.TrimSpace(stdout), strings.TrimSpace(stderr), err) + } + + return true, nil +} + +func CommitDate(commit, repoDir string) (string, error) { + cwd, err := os.Getwd() + if err != nil { + return "", err + } + defer os.Chdir(cwd) + + if err := os.Chdir(repoDir); err != nil { + return "", err + } + + if stdout, stderr, err := run("git", "fetch", "origin"); err != nil { + return "", fmt.Errorf("out=%s, err=%s, %s", strings.TrimSpace(stdout), strings.TrimSpace(stderr), err) + } + + if stdout, stderr, err := run("git", "show", "-s", "--format=%ci", commit); err != nil { + return "", fmt.Errorf("out=%s, err=%s, %s", strings.TrimSpace(stdout), strings.TrimSpace(stderr), err) + } else { + return strings.TrimSpace(stdout), nil + } +} + +func Checkout(commit, repoDir string) error { + cwd, err := os.Getwd() + if err != nil { + return err + } + defer os.Chdir(cwd) + + if err := os.Chdir(repoDir); err != nil { + return err + } + + if stdout, stderr, err := run("git", "checkout", commit); err != nil { + return fmt.Errorf("out=%s, err=%s, %s", strings.TrimSpace(stdout), strings.TrimSpace(stderr), err) + } + return nil +} + +func CurrentRev(repoDir string) (string, error) { + cwd, err := os.Getwd() + if err != nil { + return "", err + } + defer os.Chdir(cwd) + + if err := os.Chdir(repoDir); err != nil { + return "", err + } + + if stdout, stderr, err := run("git", "rev-parse", "HEAD"); err != nil { + return "", fmt.Errorf("out=%s, err=%s, %s", strings.TrimSpace(stdout), strings.TrimSpace(stderr), err) + } else { + return strings.TrimSpace(stdout), nil + } +} + +func emailInCommit(sha string) (string, error) { + stdout, stderr, err := run("git", "show", `--format=%ae`, "-s", sha) + if err != nil { + return "", fmt.Errorf("%s: %s", stderr, err) + } + return strings.TrimSpace(stdout), nil +} + +func filesInCommit(sha string) ([]File, error) { + files := []File{} + stdout, stderr, err := run("git", "diff-tree", "--no-commit-id", "--name-only", "-r", sha) + if err != nil { + return nil, fmt.Errorf("%s: %s", stderr, err) + } + for _, filename := range strings.Split(stdout, "\n") { + if len(filename) == 0 { + continue + } + files = append(files, File(filename)) + } + return files, nil +} + +func descriptionInCommit(sha string) ([]string, error) { + descriptionLines := []string{} + stdout, stderr, err := run("git", "log", "--pretty=%b", "-1", sha) + if err != nil { + return descriptionLines, fmt.Errorf("%s: %s", stderr, err) + } + + for _, commitLine := range strings.Split(stdout, "\n") { + if len(commitLine) == 0 { + continue + } + descriptionLines = append(descriptionLines, commitLine) + } + return descriptionLines, nil +} + +func run(args ...string) (string, string, error) { + cmd := exec.Command(args[0], args[1:]...) + var stdout bytes.Buffer + var stderr bytes.Buffer + cmd.Stdout = &stdout + cmd.Stderr = &stderr + err := cmd.Run() + return stdout.String(), stderr.String(), err +} diff --git a/openshift-hack/commitchecker/git_test.go b/openshift-hack/commitchecker/git_test.go new file mode 100644 index 0000000000000..f749ce87050d7 --- /dev/null +++ b/openshift-hack/commitchecker/git_test.go @@ -0,0 +1,55 @@ +package main + +import ( + "testing" +) + +func TestUpstreamSummaryPattern(t *testing.T) { + tt := []struct { + summary string + valid bool + }{ + {valid: true, summary: "UPSTREAM: 12345: a change"}, + {valid: true, summary: "UPSTREAM: k8s.io/heapster: 12345: a change"}, + {valid: true, summary: "UPSTREAM: : a change"}, + {valid: true, summary: "UPSTREAM: : a change"}, + {valid: true, summary: "UPSTREAM: coreos/etcd: : a change"}, + {valid: true, summary: "UPSTREAM: coreos/etcd: : a change"}, + {valid: true, summary: "UPSTREAM: revert: 12345: a change"}, + {valid: true, summary: "UPSTREAM: revert: k8s.io/heapster: 12345: a change"}, + {valid: true, summary: "UPSTREAM: revert: : a change"}, + {valid: true, summary: "UPSTREAM: revert: : a change"}, + {valid: true, summary: "UPSTREAM: revert: coreos/etcd: : a change"}, + {valid: true, summary: "UPSTREAM: revert: coreos/etcd: : a change"}, + {valid: false, summary: "UPSTREAM: whoopsie daisy"}, + {valid: true, summary: "UPSTREAM: gopkg.in/ldap.v2: 51: exposed better API for paged search"}, + } + for _, tc := range tt { + t.Run(tc.summary, func(t *testing.T) { + got := UpstreamSummaryPattern.Match([]byte(tc.summary)) + + if tc.valid != got { + t.Errorf("expected %#v, got %#v", tc.valid, got) + } + }) + } +} + +func TestBumpPattern(t *testing.T) { + tt := []struct { + summary string + valid bool + }{ + {valid: true, summary: "bump(*)"}, + {valid: false, summary: "not a bump"}, + } + for _, tc := range tt { + t.Run(tc.summary, func(t *testing.T) { + got := BumpSummaryPattern.Match([]byte(tc.summary)) + + if tc.valid != got { + t.Errorf("expected %#v, got %#v", tc.valid, got) + } + }) + } +} diff --git a/openshift-hack/commitchecker/validate.go b/openshift-hack/commitchecker/validate.go new file mode 100644 index 0000000000000..d85e95f8ea2c6 --- /dev/null +++ b/openshift-hack/commitchecker/validate.go @@ -0,0 +1,82 @@ +package main + +import ( + "bytes" + "fmt" + "regexp" + "strings" + "text/template" +) + +var ( + // AllCommitValidators holds all registered checks. + AllCommitValidators = []func(Commit) []string{ + ValidateCommitAuthor, + + // Local commit messages must be prefixed with UPSTREAM as per + // README.openshift.md to aid in rebasing on upstream kube. + ValidateCommitMessage, + } +) + +func ValidateCommitAuthor(commit Commit) []string { + var allErrors []string + + if strings.HasPrefix(commit.Email, "root@") { + allErrors = append(allErrors, fmt.Sprintf("Commit %s has invalid email %q", commit.Sha, commit.Email)) + } + + return allErrors +} + +func ValidateCommitMessage(commit Commit) []string { + if commit.MatchesMergeSummaryPattern() { + // Ignore merges + return nil + } + + var allErrors []string + + if !commit.MatchesUpstreamSummaryPattern() { + tmpl, _ := template.New("problems").Parse(` +UPSTREAM commit {{ .Commit.Sha }} has invalid summary {{ .Commit.Summary }}. + +UPSTREAM commits are validated against the following regular expression: + {{ .Pattern }} + +UPSTREAM commit summaries should look like: + + UPSTREAM: : description + +UPSTREAM commits which revert previous UPSTREAM commits should look like: + + UPSTREAM: revert: + +Examples of valid summaries: + + UPSTREAM: 12345: A kube fix + UPSTREAM: : A carried kube change + UPSTREAM: : A dropped kube change + UPSTREAM: revert: 12345: A kube revert +`) + data := struct { + Pattern *regexp.Regexp + Commit Commit + }{ + Pattern: UpstreamSummaryPattern, + Commit: commit, + } + buffer := &bytes.Buffer{} + err := tmpl.Execute(buffer, data) + if err != nil { + allErrors = append(allErrors, err.Error()) + return allErrors + } + + allErrors = append(allErrors, buffer.String()) + + return allErrors + } + + return allErrors +} diff --git a/openshift-hack/commitchecker/validate_test.go b/openshift-hack/commitchecker/validate_test.go new file mode 100644 index 0000000000000..6607d4b3cfb3f --- /dev/null +++ b/openshift-hack/commitchecker/validate_test.go @@ -0,0 +1,94 @@ +package main + +import ( + "reflect" + "testing" +) + +func TestValidateCommitAuthor(t *testing.T) { + tt := []struct { + name string + commit Commit + expectedErrs []string + }{ + { + name: "fails on root@locahost", + commit: Commit{ + Sha: "aaa0000", + Summary: "a summary", + Files: []File{ + "README.md", + }, + Email: "root@localhost", + }, + expectedErrs: []string{ + "Commit aaa0000 has invalid email \"root@localhost\"", + }, + }, + { + name: "succeeds for deads2k@redhat.com", + commit: Commit{ + Sha: "aaa0000", + Summary: "a summary", + Files: []File{ + "README.md", + }, + Email: "deads2k@redhat.com", + }, + expectedErrs: nil, + }, + } + + for _, tc := range tt { + t.Run(tc.name, func(t *testing.T) { + gotErrs := ValidateCommitAuthor(tc.commit) + if !reflect.DeepEqual(tc.expectedErrs, gotErrs) { + t.Errorf("expected %#v, got %#v", tc.expectedErrs, gotErrs) + } + }) + } +} + +func TestValidateCommitMessage(t *testing.T) { + tt := []struct { + name string + commit Commit + expectedErrs []string + }{ + { + name: "modifying k8s without UPSTREAM commit fails", + commit: Commit{ + Sha: "aaa0000", + Summary: "wrong summary", + Files: []File{ + "README.md", + "pkg/controller/deployment/deployment.go", + }, + }, + expectedErrs: []string{ + "\nUPSTREAM commit aaa0000 has invalid summary wrong summary.\n\nUPSTREAM commits are validated against the following regular expression:\n ^UPSTREAM: (revert: )?(([\\w\\.-]+\\/[\\w-\\.-]+)?: )?(\\d+:|:|:)\n\nUPSTREAM commit summaries should look like:\n\n UPSTREAM: : description\n\nUPSTREAM commits which revert previous UPSTREAM commits should look like:\n\n UPSTREAM: revert: \n\nExamples of valid summaries:\n\n UPSTREAM: 12345: A kube fix\n UPSTREAM: : A carried kube change\n UPSTREAM: : A dropped kube change\n UPSTREAM: revert: 12345: A kube revert\n", + }, + }, + { + name: "modifying k8s with UPSTREAM commit succeeds", + commit: Commit{ + Sha: "aaa0000", + Summary: "UPSTREAM: 42: Fix kube", + Files: []File{ + "README.md", + "pkg/controller/deployment/deployment.go", + }, + }, + expectedErrs: nil, + }, + } + + for _, tc := range tt { + t.Run(tc.name, func(t *testing.T) { + gotErrs := ValidateCommitMessage(tc.commit) + if !reflect.DeepEqual(tc.expectedErrs, gotErrs) { + t.Errorf("expected %#v, got %#v", tc.expectedErrs, gotErrs) + } + }) + } +} diff --git a/openshift-hack/conformance-k8s.sh b/openshift-hack/conformance-k8s.sh new file mode 100755 index 0000000000000..37247aede624f --- /dev/null +++ b/openshift-hack/conformance-k8s.sh @@ -0,0 +1,96 @@ +#!/bin/bash +# +# Runs the Kubernetes conformance suite against an OpenShift cluster +# +# Test prerequisites: +# +# * all nodes that users can run workloads under marked as schedulable +# +source "$(dirname "${BASH_SOURCE[0]}")/lib/init.sh" + +# Check inputs +if [[ -z "${KUBECONFIG-}" ]]; then + os::log::fatal "KUBECONFIG must be set to a root account" +fi +test_report_dir="${ARTIFACT_DIR}" +mkdir -p "${test_report_dir}" + +cat < "${test_report_dir}/README.md" +This conformance report is generated by the OpenShift CI infrastructure. The canonical source location for this test script is located at https://github.com/openshift/kubernetes/blob/master/openshift-hack/conformance-k8s.sh + +This file was generated by: + + Commit $( git rev-parse HEAD || "" ) + Tag $( git describe || "" ) + +To recreate these results + +1. Install an [OpenShift cluster](https://docs.openshift.com/container-platform/) +2. Retrieve a \`.kubeconfig\` file with administrator credentials on that cluster and set the environment variable KUBECONFIG + + export KUBECONFIG=PATH_TO_KUBECONFIG + +3. Clone the OpenShift source repository and change to that directory: + + git clone https://github.com/openshift/kubernetes.git + cd kubernetes + +4. Place the \`oc\` binary for that cluster in your PATH +5. Run the conformance test: + + openshift-hack/conformance-k8s.sh + +Nightly conformance tests are run against release branches and reported https://openshift-gce-devel.appspot.com/builds/origin-ci-test/logs/periodic-ci-origin-conformance-k8s/ +END + +version="$(grep k8s.io/kubernetes go.sum | awk '{print $2}' | sed s+/go.mod++ )" +os::log::info "Running Kubernetes conformance suite for ${version}" + +# Execute OpenShift prerequisites +# Disable container security +oc adm policy add-scc-to-group privileged system:authenticated system:serviceaccounts +oc adm policy add-scc-to-group anyuid system:authenticated system:serviceaccounts +# Mark the master nodes as unschedulable so tests ignore them +oc get nodes -o name -l 'node-role.kubernetes.io/master' | xargs -L1 oc adm cordon +unschedulable="$( ( oc get nodes -o name -l 'node-role.kubernetes.io/master'; ) | wc -l )" +# TODO: undo these operations + +# Execute Kubernetes prerequisites +make WHAT=cmd/kubectl +make WHAT=test/e2e/e2e.test +make WHAT=vendor/github.com/onsi/ginkgo/ginkgo +PATH="${OS_ROOT}/_output/local/bin/$( os::build::host_platform ):${PATH}" +export PATH + +kubectl version > "${test_report_dir}/version.txt" +echo "-----" >> "${test_report_dir}/version.txt" +oc version >> "${test_report_dir}/version.txt" + +# Run the test, serial tests first, then parallel + +rc=0 + +e2e_test="$( which e2e.test )" + +# shellcheck disable=SC2086 +ginkgo \ + -nodes 1 -noColor '-focus=(\[Conformance\].*\[Serial\]|\[Serial\].*\[Conformance\])' \ + ${e2e_test} -- \ + -report-dir "${test_report_dir}" \ + -allowed-not-ready-nodes ${unschedulable} \ + 2>&1 | tee -a "${test_report_dir}/e2e.log" || rc=1 + +rename -v junit_ junit_serial_ "${test_report_dir}"/junit*.xml + +# shellcheck disable=SC2086 +ginkgo \ + -nodes 4 -noColor '-skip=\[Serial\]' '-focus=\[Conformance\]' \ + ${e2e_test} -- \ + -report-dir "${test_report_dir}" \ + -allowed-not-ready-nodes ${unschedulable} \ + 2>&1 | tee -a "${test_report_dir}/e2e.log" || rc=1 + +echo +echo "Run complete, results in ${test_report_dir}" + +exit $rc diff --git a/openshift-hack/create-or-update-rebase-branch.sh b/openshift-hack/create-or-update-rebase-branch.sh new file mode 100755 index 0000000000000..c948eb874850a --- /dev/null +++ b/openshift-hack/create-or-update-rebase-branch.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +set -o nounset +set -o errexit +set -o pipefail + +# This script is intended to simplify the maintaining a rebase branch for +# openshift/kubernetes. +# +# - If the branch named by REBASE_BRANCH does not exist, it will be created by +# branching from UPSTREAM_TAG and merging in TARGET_BRANCH with strategy +# 'ours'. +# +# - If the branch named by REBASE_BRANCH exists, it will be renamed to +# -, a new branch will be created as per above, and +# carries from the renamed branch will be cherry-picked. + +UPSTREAM_TAG="${UPSTREAM_TAG:-}" +if [[ -z "${UPSTREAM_TAG}" ]]; then + echo >&2 "UPSTREAM_TAG is required" + exit 1 +fi + +REBASE_BRANCH="${REBASE_BRANCH:-}" +if [[ -z "${REBASE_BRANCH}" ]]; then + echo >&2 "REBASE_BRANCH is required" + exit 1 +fi + +TARGET_BRANCH="${TARGET_BRANCH:-master}" +if [[ -z "${TARGET_BRANCH}" ]]; then + echo >&2 "TARGET_BRANCH is required" + exit 1 +fi + +echo "Ensuring target branch '${TARGET_BRANCH} is updated" +git co "${TARGET_BRANCH}" +git pull + +echo "Checking if '${REBASE_BRANCH}' exists" +REBASE_IN_PROGRESS= +if git show-ref --verify --quiet "refs/heads/${REBASE_BRANCH}"; then + REBASE_IN_PROGRESS=y +fi + +# If a rebase is in progress, rename the existing branch +if [[ "${REBASE_IN_PROGRESS}" ]]; then + TIMESTAMP="$(date +"%Y-%m-%d_%H-%M-%S")" + PREVIOUS_REBASE_BRANCH="${REBASE_BRANCH}.${TIMESTAMP}" + echo "Renaming rebase branch '${REBASE_BRANCH}' to '${PREVIOUS_REBASE_BRANCH}'" + git br -m "${REBASE_BRANCH}" "${PREVIOUS_REBASE_BRANCH}" +fi + +echo "Branching upstream tag '${UPSTREAM_TAG}' to rebase branch '${REBASE_BRANCH}'" +git co -b "${REBASE_BRANCH}" "${UPSTREAM_TAG}" + +echo "Merging target branch '${TARGET_BRANCH}' to rebase branch '${REBASE_BRANCH}'" +git merge -s ours --no-edit "${TARGET_BRANCH}" + +if [[ "${REBASE_IN_PROGRESS}" ]]; then + echo "Cherry-picking carried commits from previous rebase branch '${PREVIOUS_REBASE_BRANCH}'" + # The first merge in the previous rebase branch should be the point at which + # the target branch was merged with the upstream tag. Any commits since this + # merge should be cherry-picked. + MERGE_SHA="$(git log --pretty=%H --merges --max-count=1 "${PREVIOUS_REBASE_BRANCH}" )" + git cherry-pick "${MERGE_SHA}..${PREVIOUS_REBASE_BRANCH}" +fi diff --git a/openshift-hack/e2e/annotate/annotate.go b/openshift-hack/e2e/annotate/annotate.go new file mode 100644 index 0000000000000..da8a0d104b7bc --- /dev/null +++ b/openshift-hack/e2e/annotate/annotate.go @@ -0,0 +1,255 @@ +package annotate + +import ( + "fmt" + "io/ioutil" + "os" + "os/exec" + "regexp" + "sort" + "strings" + + "github.com/onsi/ginkgo" + "github.com/onsi/ginkgo/types" +) + +var reHasSig = regexp.MustCompile(`\[sig-[\w-]+\]`) + +// Run generates tests annotations for the targeted package. +func Run() { + if len(os.Args) != 2 && len(os.Args) != 3 { + fmt.Fprintf(os.Stderr, "error: requires exactly one argument\n") + os.Exit(1) + } + filename := os.Args[len(os.Args)-1] + + generator := newGenerator() + ginkgo.WalkTests(generator.generateRename) + + renamer := newRenamerFromGenerated(generator.output) + ginkgo.WalkTests(renamer.updateNodeText) + if len(renamer.missing) > 0 { + var names []string + for name := range renamer.missing { + names = append(names, name) + } + sort.Strings(names) + fmt.Fprintf(os.Stderr, "failed:\n%s\n", strings.Join(names, "\n")) + os.Exit(1) + } + + // All tests must be associated with a sig (either upstream), or downstream + // If you get this error, you should add the [sig-X] tag to your test (if its + // in origin) or if it is upstream add a new rule to rules.go that assigns + // the test in question to the right sig. + // + // Upstream sigs map to teams (if you have representation on that sig, you + // own those tests in origin) + // Downstream sigs: sig-imageregistry, sig-builds, sig-devex + var errors []string + for from, to := range generator.output { + if !reHasSig.MatchString(from) && !reHasSig.MatchString(to) { + errors = append(errors, fmt.Sprintf("all tests must define a [sig-XXXX] tag or have a rule %q", from)) + } + } + if len(errors) > 0 { + sort.Strings(errors) + for _, s := range errors { + fmt.Fprintf(os.Stderr, "failed: %s\n", s) + } + os.Exit(1) + } + + var pairs []string + for from, to := range generator.output { + pairs = append(pairs, fmt.Sprintf("%q:\n%q,", from, to)) + } + sort.Strings(pairs) + contents := fmt.Sprintf(` +package generated + +import ( + "fmt" + "github.com/onsi/ginkgo" + "github.com/onsi/ginkgo/types" +) + +var annotations = map[string]string{ +%s +} + +func init() { + ginkgo.WalkTests(func(name, parentName string, node types.TestNode) { + combined := name + if len(parentName) > 0 { + combined = parentName + " " + combined + } + if updated, ok := annotations[combined]; ok { + node.SetText(updated) + } else { + panic(fmt.Sprintf("unable to find test %%s", combined)) + } + }) +} +`, strings.Join(pairs, "\n\n")) + if err := ioutil.WriteFile(filename, []byte(contents), 0644); err != nil { + fmt.Fprintf(os.Stderr, "error: %v", err) + os.Exit(1) + } + if _, err := exec.Command("gofmt", "-s", "-w", filename).Output(); err != nil { + fmt.Fprintf(os.Stderr, "error: %v", err) + os.Exit(1) + } +} + +func newGenerator() *ginkgoTestRenamer { + var allLabels []string + matches := make(map[string]*regexp.Regexp) + stringMatches := make(map[string][]string) + excludes := make(map[string]*regexp.Regexp) + + for label, items := range TestMaps { + sort.Strings(items) + allLabels = append(allLabels, label) + var remain []string + for _, item := range items { + re := regexp.MustCompile(item) + if p, ok := re.LiteralPrefix(); ok { + stringMatches[label] = append(stringMatches[label], p) + } else { + remain = append(remain, item) + } + } + if len(remain) > 0 { + matches[label] = regexp.MustCompile(strings.Join(remain, `|`)) + } + } + for label, items := range LabelExcludes { + sort.Strings(items) + excludes[label] = regexp.MustCompile(strings.Join(items, `|`)) + } + sort.Strings(allLabels) + + excludedTestsFilter := regexp.MustCompile(strings.Join(ExcludedTests, `|`)) + + return &ginkgoTestRenamer{ + allLabels: allLabels, + stringMatches: stringMatches, + matches: matches, + excludes: excludes, + excludedTestsFilter: excludedTestsFilter, + + output: make(map[string]string), + } +} + +func newRenamerFromGenerated(names map[string]string) *ginkgoTestRenamer { + return &ginkgoTestRenamer{ + output: names, + missing: make(map[string]struct{}), + } +} + +type ginkgoTestRenamer struct { + allLabels []string + stringMatches map[string][]string + matches map[string]*regexp.Regexp + excludes map[string]*regexp.Regexp + excludedTestsFilter *regexp.Regexp + + output map[string]string + missing map[string]struct{} +} + +func (r *ginkgoTestRenamer) updateNodeText(name, parentName string, node types.TestNode) { + if updated, ok := r.output[combineNames(parentName, name)]; ok { + node.SetText(updated) + } else { + r.missing[combineNames(parentName, name)] = struct{}{} + } +} + +func (r *ginkgoTestRenamer) generateRename(name, parentName string, node types.TestNode) { + originalName := name + combinedName := combineNames(parentName, name) + + labels := "" + for { + count := 0 + for _, label := range r.allLabels { + // never apply a sig label twice + if strings.HasPrefix(label, "[sig-") && strings.Contains(combinedName, "[sig-") { + continue + } + if strings.Contains(combinedName, label) { + continue + } + + var hasLabel bool + for _, segment := range r.stringMatches[label] { + hasLabel = strings.Contains(combinedName, segment) + if hasLabel { + break + } + } + if !hasLabel { + if re := r.matches[label]; re != nil { + hasLabel = r.matches[label].MatchString(combinedName) + } + } + + if hasLabel { + // TODO: remove when we no longer need it + if re, ok := r.excludes[label]; ok && re.MatchString(combinedName) { + continue + } + count++ + labels += " " + label + combinedName += " " + label + name += " " + label + } + } + if count == 0 { + break + } + } + + if !r.excludedTestsFilter.MatchString(combinedName) { + isSerial := strings.Contains(combinedName, "[Serial]") + isConformance := strings.Contains(combinedName, "[Conformance]") + switch { + case isSerial && isConformance: + name += " [Suite:openshift/conformance/serial/minimal]" + case isSerial: + name += " [Suite:openshift/conformance/serial]" + case isConformance: + name += " [Suite:openshift/conformance/parallel/minimal]" + default: + name += " [Suite:openshift/conformance/parallel]" + } + } + if isGoModulePath(node.CodeLocation().FileName, "k8s.io/kubernetes", "test/e2e") { + name += " [Suite:k8s]" + } + + r.output[combineNames(parentName, originalName)] = name +} + +// isGoModulePath returns true if the packagePath reported by reflection is within a +// module and given module path. When go mod is in use, module and modulePath are not +// contiguous as they were in older golang versions with vendoring, so naive contains +// tests fail. +// +// historically: ".../vendor/k8s.io/kubernetes/test/e2e" +// go.mod: "k8s.io/kubernetes@0.18.4/test/e2e" +// +func isGoModulePath(packagePath, module, modulePath string) bool { + return regexp.MustCompile(fmt.Sprintf(`\b%s(@[^/]*|)/%s\b`, regexp.QuoteMeta(module), regexp.QuoteMeta(modulePath))).MatchString(packagePath) +} + +func combineNames(parentName, name string) string { + if len(parentName) == 0 { + return name + } + return parentName + " " + name +} diff --git a/openshift-hack/e2e/annotate/cmd/main.go b/openshift-hack/e2e/annotate/cmd/main.go new file mode 100644 index 0000000000000..54066dc105bd1 --- /dev/null +++ b/openshift-hack/e2e/annotate/cmd/main.go @@ -0,0 +1,9 @@ +package main + +import ( + "k8s.io/kubernetes/openshift-hack/e2e/annotate" +) + +func main() { + annotate.Run() +} diff --git a/openshift-hack/e2e/annotate/generated/zz_generated.annotations.go b/openshift-hack/e2e/annotate/generated/zz_generated.annotations.go new file mode 100644 index 0000000000000..951c880085e16 --- /dev/null +++ b/openshift-hack/e2e/annotate/generated/zz_generated.annotations.go @@ -0,0 +1 @@ +package generated diff --git a/openshift-hack/e2e/annotate/rules.go b/openshift-hack/e2e/annotate/rules.go new file mode 100644 index 0000000000000..c5487ad59a360 --- /dev/null +++ b/openshift-hack/e2e/annotate/rules.go @@ -0,0 +1,199 @@ +package annotate + +import ( + // ensure all the ginkgo tests are loaded + _ "k8s.io/kubernetes/openshift-hack/e2e" +) + +var ( + TestMaps = map[string][]string{ + // alpha features that are not gated + "[Disabled:Alpha]": { + // ALPHA features in 1.19, disabled by default. + // !!! Review their status as part of the 1.20 rebase. + `\[Feature:CSIStorageCapacity\]`, + `\[Feature:IPv6DualStack.*\]`, + `\[Feature:ServiceAccountIssuerDiscovery\]`, + `\[Feature:SetHostnameAsFQDN\]`, + `\[Feature:TTLAfterFinished\]`, + + // BETA features in 1.19, enabled by default + // Their enablement is tracked via bz's targeted at 4.6. + `\[Feature:SCTPConnectivity\]`, // https://bugzilla.redhat.com/show_bug.cgi?id=1861606 + }, + // tests for features that are not implemented in openshift + "[Disabled:Unimplemented]": { + `\[Feature:Networking-IPv6\]`, // openshift-sdn doesn't support yet + `Monitoring`, // Not installed, should be + `Cluster level logging`, // Not installed yet + `Kibana`, // Not installed + `Ubernetes`, // Can't set zone labels today + `kube-ui`, // Not installed by default + `Kubernetes Dashboard`, // Not installed by default (also probably slow image pull) + + `NetworkPolicy.*egress`, // not supported + `NetworkPolicy.*named port`, // not yet implemented + `enforce egress policy`, // not support + `should proxy to cadvisor`, // we don't expose cAdvisor port directly for security reasons + + `NetworkPolicy.*IPBlock`, // not supported + `NetworkPolicy.*Egress`, // not supported + `NetworkPolicy.*default-deny-all`, // not supported + }, + // tests that rely on special configuration that we do not yet support + "[Disabled:SpecialConfig]": { + // GPU node needs to be available + `\[Feature:GPUDevicePlugin\]`, + `\[sig-scheduling\] GPUDevicePluginAcrossRecreate \[Feature:Recreate\]`, + + `\[Feature:ImageQuota\]`, // Quota isn't turned on by default, we should do that and then reenable these tests + `\[Feature:Audit\]`, // Needs special configuration + `\[Feature:LocalStorageCapacityIsolation\]`, // relies on a separate daemonset? + `\[sig-cloud-provider-gcp\]`, // these test require a different configuration - note that GCE tests from the sig-cluster-lifecycle were moved to the sig-cloud-provider-gcpcluster lifecycle see https://github.com/kubernetes/kubernetes/commit/0b3d50b6dccdc4bbd0b3e411c648b092477d79ac#diff-3b1910d08fb8fd8b32956b5e264f87cb + + `kube-dns-autoscaler`, // Don't run kube-dns + `should check if Kubernetes master services is included in cluster-info`, // Don't run kube-dns + `DNS configMap`, // this tests dns federation configuration via configmap, which we don't support yet + + `NodeProblemDetector`, // requires a non-master node to run on + `Advanced Audit should audit API calls`, // expects to be able to call /logs + + `Firewall rule should have correct firewall rules for e2e cluster`, // Upstream-install specific + }, + // tests that are known broken and need to be fixed upstream or in openshift + // always add an issue here + "[Disabled:Broken]": { + `mount an API token into pods`, // We add 6 secrets, not 1 + `ServiceAccounts should ensure a single API token exists`, // We create lots of secrets + `unchanging, static URL paths for kubernetes api services`, // the test needs to exclude URLs that are not part of conformance (/logs) + `Services should be able to up and down services`, // we don't have wget installed on nodes + `Network should set TCP CLOSE_WAIT timeout`, // possibly some difference between ubuntu and fedora + `\[NodeFeature:Sysctls\]`, // needs SCC support + `should check kube-proxy urls`, // previously this test was skipped b/c we reported -1 as the number of nodes, now we report proper number and test fails + `SSH`, // TRIAGE + `should implement service.kubernetes.io/service-proxy-name`, // this is an optional test that requires SSH. sig-network + `should allow ingress access on one named port`, // https://bugzilla.redhat.com/show_bug.cgi?id=1711602 + `recreate nodes and ensure they function upon restart`, // https://bugzilla.redhat.com/show_bug.cgi?id=1756428 + `\[Driver: iscsi\]`, // https://bugzilla.redhat.com/show_bug.cgi?id=1711627 + + "RuntimeClass should reject", + + `Services should implement service.kubernetes.io/headless`, // requires SSH access to function, needs to be refactored + `ClusterDns \[Feature:Example\] should create pod that uses dns`, // doesn't use bindata, not part of kube test binary + `Simple pod should handle in-cluster config`, // kubectl cp doesn't work or is not preserving executable bit, we have this test already + + // TODO(node): configure the cri handler for the runtime class to make this work + "should run a Pod requesting a RuntimeClass with a configured handler", + "should reject a Pod requesting a RuntimeClass with conflicting node selector", + "should run a Pod requesting a RuntimeClass with scheduling", + + // A fix is in progress: https://github.com/openshift/origin/pull/24709 + `Multi-AZ Clusters should spread the pods of a replication controller across zones`, + }, + // tests that may work, but we don't support them + "[Disabled:Unsupported]": { + `\[Driver: rbd\]`, // OpenShift 4.x does not support Ceph RBD (use CSI instead) + `\[Driver: ceph\]`, // OpenShift 4.x does not support CephFS (use CSI instead) + `\[Feature:PodSecurityPolicy\]`, // OpenShift 4.x does not enable PSP by default + }, + // tests too slow to be part of conformance + "[Slow]": { + `\[sig-scalability\]`, // disable from the default set for now + `should create and stop a working application`, // Inordinately slow tests + + `\[Feature:PerformanceDNS\]`, // very slow + + `validates that there exists conflict between pods with same hostPort and protocol but one using 0\.0\.0\.0 hostIP`, // 5m, really? + }, + // tests that are known flaky + "[Flaky]": { + `Job should run a job to completion when tasks sometimes fail and are not locally restarted`, // seems flaky, also may require too many resources + // TODO(node): test works when run alone, but not in the suite in CI + `\[Feature:HPA\] Horizontal pod autoscaling \(scale resource: CPU\) \[sig-autoscaling\] ReplicationController light Should scale from 1 pod to 2 pods`, + }, + // tests that must be run without competition + "[Serial]": { + `\[Disruptive\]`, + `\[Feature:Performance\]`, // requires isolation + + `Service endpoints latency`, // requires low latency + `Clean up pods on node`, // schedules up to max pods per node + `DynamicProvisioner should test that deleting a claim before the volume is provisioned deletes the volume`, // test is very disruptive to other tests + + `Multi-AZ Clusters should spread the pods of a service across zones`, // spreading is a priority, not a predicate, and if the node is temporarily full the priority will be ignored + + `Should be able to support the 1\.7 Sample API Server using the current Aggregator`, // down apiservices break other clients today https://bugzilla.redhat.com/show_bug.cgi?id=1623195 + + `\[Feature:HPA\] Horizontal pod autoscaling \(scale resource: CPU\) \[sig-autoscaling\] ReplicationController light Should scale from 1 pod to 2 pods`, + + `should prevent Ingress creation if more than 1 IngressClass marked as default`, // https://bugzilla.redhat.com/show_bug.cgi?id=1822286 + + `\[sig-network\] IngressClass \[Feature:Ingress\] should set default value on new IngressClass`, //https://bugzilla.redhat.com/show_bug.cgi?id=1833583 + }, + "[Skipped:azure]": { + "Networking should provide Internet connection for containers", // Azure does not allow ICMP traffic to internet. + }, + "[Skipped:gce]": { + // Requires creation of a different compute instance in a different zone and is not compatible with volumeBindingMode of WaitForFirstConsumer which we use in 4.x + `\[sig-scheduling\] Multi-AZ Cluster Volumes \[sig-storage\] should only be allowed to provision PDs in zones where nodes exist`, + + // The following tests try to ssh directly to a node. None of our nodes have external IPs + `\[k8s.io\] \[sig-node\] crictl should be able to run crictl on the node`, + `\[sig-storage\] Flexvolumes should be mountable`, + `\[sig-storage\] Detaching volumes should not work when mount is in progress`, + + // We are using openshift-sdn to conceal metadata + `\[sig-auth\] Metadata Concealment should run a check-metadata-concealment job to completion`, + + // https://bugzilla.redhat.com/show_bug.cgi?id=1740959 + `\[sig-api-machinery\] AdmissionWebhook should be able to deny pod and configmap creation`, + + // https://bugzilla.redhat.com/show_bug.cgi?id=1745720 + `\[sig-storage\] CSI Volumes \[Driver: pd.csi.storage.gke.io\]\[Serial\]`, + + // https://bugzilla.redhat.com/show_bug.cgi?id=1749882 + `\[sig-storage\] CSI Volumes CSI Topology test using GCE PD driver \[Serial\]`, + + // https://bugzilla.redhat.com/show_bug.cgi?id=1751367 + `gce-localssd-scsi-fs`, + + // https://bugzilla.redhat.com/show_bug.cgi?id=1750851 + // should be serial if/when it's re-enabled + `\[HPA\] Horizontal pod autoscaling \(scale resource: Custom Metrics from Stackdriver\)`, + }, + "[sig-node]": { + `\[NodeConformance\]`, + `NodeLease`, + `lease API`, + `\[NodeFeature`, + `\[NodeAlphaFeature`, + `Probing container`, + `Security Context When creating a`, + `Downward API should create a pod that prints his name and namespace`, + `Liveness liveness pods should be automatically restarted`, + `Secret should create a pod that reads a secret`, + `Pods should delete a collection of pods`, + }, + "[sig-cluster-lifecycle]": { + `Feature:ClusterAutoscalerScalability`, + `recreate nodes and ensure they function`, + }, + "[sig-arch]": { + // not run, assigned to arch as catch-all + `\[Feature:GKELocalSSD\]`, + `\[Feature:GKENodePool\]`, + }, + } + + // labelExcludes temporarily block tests out of a specific suite + LabelExcludes = map[string][]string{} + + ExcludedTests = []string{ + `\[Disabled:`, + `\[Disruptive\]`, + `\[Skipped\]`, + `\[Slow\]`, + `\[Flaky\]`, + `\[Local\]`, + } +) diff --git a/openshift-hack/e2e/annotate/rules_test.go b/openshift-hack/e2e/annotate/rules_test.go new file mode 100644 index 0000000000000..20ff6570ef2cb --- /dev/null +++ b/openshift-hack/e2e/annotate/rules_test.go @@ -0,0 +1,94 @@ +package annotate + +import ( + "testing" + + "github.com/onsi/ginkgo/types" +) + +type testNode struct { + text string +} + +func (n *testNode) Type() types.SpecComponentType { + return 0 +} +func (n *testNode) CodeLocation() types.CodeLocation { + return types.CodeLocation{} +} +func (n *testNode) Text() string { + return n.text +} +func (n *testNode) SetText(text string) { + n.text = text +} +func (n *testNode) Flag() types.FlagType { + return 0 +} +func (n *testNode) SetFlag(flag types.FlagType) { +} + +func TestStockRules(t *testing.T) { + tests := []struct { + name string + + testName string + parentName string + + expectedText string + }{ + { + name: "simple serial match", + parentName: "", + testName: "[Serial] test", + expectedText: "[Serial] test [Suite:openshift/conformance/serial]", + }, + { + name: "don't tag skipped", + parentName: "", + testName: `[Serial] example test [Skipped:gce]`, + expectedText: `[Serial] example test [Skipped:gce] [Suite:openshift/conformance/serial]`, // notice that this isn't categorized into any of our buckets + }, + { + name: "not skipped", + parentName: "", + testName: `[sig-network] Networking Granular Checks: Pods should function for intra-pod communication: http [LinuxOnly] [NodeConformance] [Conformance]`, + expectedText: `[sig-network] Networking Granular Checks: Pods should function for intra-pod communication: http [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal]`, + }, + { + name: "should skip localssd on gce", + parentName: "", + testName: `[sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted`, + expectedText: `[sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted [Skipped:gce] [Suite:openshift/conformance/serial]`, // notice that this isn't categorized into any of our buckets + }, + { + name: "should skip NetworkPolicy tests on multitenant", + parentName: "[Feature:NetworkPolicy]", + testName: `should do something with NetworkPolicy`, + expectedText: `should do something with NetworkPolicy [Skipped:Network/OpenShiftSDN/Multitenant] [Suite:openshift/conformance/parallel]`, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + testRenamer := newGenerator() + testNode := &testNode{ + text: test.testName, + } + + testRenamer.generateRename(test.testName, test.parentName, testNode) + changed := testRenamer.output[combineNames(test.parentName, test.testName)] + + if e, a := test.expectedText, changed; e != a { + t.Error(a) + } + testRenamer = newRenamerFromGenerated(map[string]string{combineNames(test.parentName, test.testName): test.expectedText}) + testRenamer.updateNodeText(test.testName, test.parentName, testNode) + + if e, a := test.expectedText, testNode.Text(); e != a { + t.Error(a) + } + + }) + } +} diff --git a/openshift-hack/e2e/include.go b/openshift-hack/e2e/include.go new file mode 100644 index 0000000000000..fb219fb87ff0b --- /dev/null +++ b/openshift-hack/e2e/include.go @@ -0,0 +1,23 @@ +package e2e + +// This file should import all the packages defining k8s e2e tests that are +// relevant to openshift. It is intended to affect: +// +// - what is included in the k8s-e2e.test binary built from this package +// - the annotations generated by the annotate package + +import ( + _ "k8s.io/kubernetes/test/e2e" + _ "k8s.io/kubernetes/test/e2e/apimachinery" + _ "k8s.io/kubernetes/test/e2e/apps" + _ "k8s.io/kubernetes/test/e2e/auth" + _ "k8s.io/kubernetes/test/e2e/autoscaling" + _ "k8s.io/kubernetes/test/e2e/common" + _ "k8s.io/kubernetes/test/e2e/instrumentation" + _ "k8s.io/kubernetes/test/e2e/kubectl" + _ "k8s.io/kubernetes/test/e2e/network" + _ "k8s.io/kubernetes/test/e2e/node" + _ "k8s.io/kubernetes/test/e2e/scheduling" + _ "k8s.io/kubernetes/test/e2e/servicecatalog" + _ "k8s.io/kubernetes/test/e2e/storage" +) diff --git a/openshift-hack/e2e/kube_e2e_test.go b/openshift-hack/e2e/kube_e2e_test.go new file mode 100644 index 0000000000000..27cfc84695b89 --- /dev/null +++ b/openshift-hack/e2e/kube_e2e_test.go @@ -0,0 +1,110 @@ +package e2e + +//go:generate go run -mod vendor ./annotate/cmd -- ./annotate/generated/zz_generated.annotations.go + +// This file duplicates most of test/e2e/e2e_test.go but limits the included +// tests (via include.go) to tests that are relevant to openshift. + +import ( + "flag" + "fmt" + "math/rand" + "os" + "testing" + "time" + + "gopkg.in/yaml.v2" + + // Never, ever remove the line with "/ginkgo". Without it, + // the ginkgo test runner will not detect that this + // directory contains a Ginkgo test suite. + // See https://github.com/kubernetes/kubernetes/issues/74827 + // "github.com/onsi/ginkgo" + + "k8s.io/component-base/version" + "k8s.io/kubernetes/test/e2e" + "k8s.io/kubernetes/test/e2e/framework" + "k8s.io/kubernetes/test/e2e/framework/testfiles" + "k8s.io/kubernetes/test/e2e/generated" + "k8s.io/kubernetes/test/utils/image" + + // Ensure test annotation + _ "k8s.io/kubernetes/openshift-hack/e2e/annotate/generated" +) + +var viperConfig = flag.String("viper-config", "", "The name of a viper config file (https://github.com/spf13/viper#what-is-viper). All e2e command line parameters can also be configured in such a file. May contain a path and may or may not contain the file suffix. The default is to look for an optional file with `e2e` as base name. If a file is specified explicitly, it must be present.") + +func TestMain(m *testing.M) { + var versionFlag bool + flag.CommandLine.BoolVar(&versionFlag, "version", false, "Displays version information.") + + // Register test flags, then parse flags. + e2e.HandleFlags() + + // Now that we know which Viper config (if any) was chosen, + // parse it and update those options which weren't already set via command line flags + // (which have higher priority). + if err := e2e.ViperizeFlagsForKubeE2E(*viperConfig, "e2e", flag.CommandLine); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + + if framework.TestContext.ListImages { + for _, v := range image.GetImageConfigs() { + fmt.Println(v.GetE2EImage()) + } + os.Exit(0) + } + if versionFlag { + fmt.Printf("%s\n", version.Get()) + os.Exit(0) + } + + // Enable bindata file lookup as fallback. + testfiles.AddFileSource(testfiles.BindataFileSource{ + Asset: generated.Asset, + AssetNames: generated.AssetNames, + }) + if framework.TestContext.ListConformanceTests { + var tests []struct { + Testname string `yaml:"testname"` + Codename string `yaml:"codename"` + Description string `yaml:"description"` + Release string `yaml:"release"` + File string `yaml:"file"` + } + + data, err := testfiles.Read("test/conformance/testdata/conformance.yaml") + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + if err := yaml.Unmarshal(data, &tests); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + if err := yaml.NewEncoder(os.Stdout).Encode(tests); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + os.Exit(0) + } + + framework.AfterReadingAllFlags(&framework.TestContext) + + // TODO: Deprecating repo-root over time... instead just use gobindata_util.go , see #23987. + // Right now it is still needed, for example by + // test/e2e/framework/ingress/ingress_utils.go + // for providing the optional secret.yaml file and by + // test/e2e/framework/util.go for cluster/log-dump. + if framework.TestContext.RepoRoot != "" { + testfiles.AddFileSource(testfiles.RootFileSource{Root: framework.TestContext.RepoRoot}) + } + + rand.Seed(time.Now().UnixNano()) + os.Exit(m.Run()) +} + +func TestE2E(t *testing.T) { + e2e.RunE2ETests(t) +} diff --git a/openshift-hack/images/OWNERS b/openshift-hack/images/OWNERS new file mode 100644 index 0000000000000..7b196b0fb7003 --- /dev/null +++ b/openshift-hack/images/OWNERS @@ -0,0 +1,11 @@ +reviewers: + - smarterclayton + - giuseppe + - JacobTanenbaum + - pweil- + - pecameron + - sdodson +approvers: + - smarterclayton + - pweil- + - sdodson diff --git a/openshift-hack/images/hyperkube/Dockerfile.rhel b/openshift-hack/images/hyperkube/Dockerfile.rhel new file mode 100644 index 0000000000000..c5d9daad9e501 --- /dev/null +++ b/openshift-hack/images/hyperkube/Dockerfile.rhel @@ -0,0 +1,16 @@ +FROM registry.svc.ci.openshift.org/ocp/builder:rhel-8-golang-1.15-openshift-4.6 AS builder +WORKDIR /go/src/k8s.io/kubernetes +COPY . . +RUN make WHAT='cmd/kube-apiserver cmd/kube-controller-manager cmd/kube-scheduler cmd/kubelet cmd/watch-termination' && \ + mkdir -p /tmp/build && \ + cp openshift-hack/images/hyperkube/hyperkube /tmp/build && \ + cp /go/src/k8s.io/kubernetes/_output/local/bin/linux/$(go env GOARCH)/{kube-apiserver,kube-controller-manager,kube-scheduler,kubelet,watch-termination} \ + /tmp/build + +FROM registry.svc.ci.openshift.org/ocp/4.6:base +RUN yum install -y --setopt=tsflags=nodocs --setopt=skip_missing_names_on_install=False iproute && yum clean all +COPY --from=builder /tmp/build/* /usr/bin/ +LABEL io.k8s.display-name="OpenShift Kubernetes Server Commands" \ + io.k8s.description="OpenShift is a platform for developing, building, and deploying containerized applications." \ + io.openshift.tags="openshift,hyperkube" \ + io.openshift.build.versions="kubernetes=1.19.2" diff --git a/openshift-hack/images/hyperkube/OWNERS b/openshift-hack/images/hyperkube/OWNERS new file mode 100644 index 0000000000000..e814678493032 --- /dev/null +++ b/openshift-hack/images/hyperkube/OWNERS @@ -0,0 +1,5 @@ +reviewers: + - smarterclayton + - sdodson +approvers: + - smarterclayton diff --git a/openshift-hack/images/hyperkube/hyperkube b/openshift-hack/images/hyperkube/hyperkube new file mode 100755 index 0000000000000..cfed9cd737c02 --- /dev/null +++ b/openshift-hack/images/hyperkube/hyperkube @@ -0,0 +1,57 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +BINS=( + kube-apiserver + kube-controller-manager + kube-scheduler + kubelet +) + +function array_contains() { + local search="$1" + local element + shift + for element; do + if [[ "${element}" == "${search}" ]]; then + return 0 + fi + done + return 1 +} + +function print_usage() { + cat </dev/null; then + echo "${command}: command not found" + exit 1 + fi + exec "${command}" "${@}" +} + +main "${@}" \ No newline at end of file diff --git a/openshift-hack/images/os/Dockerfile b/openshift-hack/images/os/Dockerfile new file mode 100644 index 0000000000000..6cb0bddfa2a0a --- /dev/null +++ b/openshift-hack/images/os/Dockerfile @@ -0,0 +1,23 @@ +FROM fedora:29 AS build + +COPY --from=registry.svc.ci.openshift.org/openshift/origin-v4.0:machine-os-content /srv/ /srv/ +RUN set -x && yum install -y ostree rpm-ostree yum-utils selinux-policy-targeted && \ + curl http://base-4-3-rhel8.ocp.svc > /etc/yum.repos.d/rhel8.repo && \ + commit=$( find /srv -name *.commit | sed -Ee 's|.*objects/(.+)/(.+)\.commit|\1\2|' | head -1 ) && \ + mkdir /tmp/working && cd /tmp/working && \ + rpm-ostree db list --repo /srv/repo $commit > /tmp/packages && \ + PACKAGES=(openshift-hyperkube) && \ + yumdownloader -y --disablerepo=* --enablerepo=built --destdir=/tmp/rpms "${PACKAGES[@]}" && \ + if ! grep -q cri-o /tmp/packages; then yumdownloader -y --disablerepo=* --enablerepo=rhel-8* --destdir=/tmp/rpms cri-o cri-tools; fi && \ + if ! grep -q machine-config-daemon /tmp/packages; then yumdownloader -y --disablerepo=* --enablerepo=rhel-8* --destdir=/tmp/rpms machine-config-daemon; fi && \ + ls /tmp/rpms/ && (cd /tmp/rpms/ && ls ${PACKAGES[@]/%/*}) && \ + for i in $(find /tmp/rpms/ -name *.rpm); do echo "Extracting $i ..."; rpm2cpio $i | cpio -div; done && \ + if [[ -d etc ]]; then mv etc usr/; fi && \ + mkdir -p /tmp/tmprootfs/etc && \ + ostree --repo=/srv/repo checkout -U $commit --subpath /usr/etc/selinux /tmp/tmprootfs/etc/selinux && \ + ostree --repo=/srv/repo commit --parent=$commit --tree=ref=$commit --tree=dir=. \ + --selinux-policy /tmp/tmprootfs \ + -s "origin-ci-dev overlay RPMs" --branch=origin-ci-dev + +FROM scratch +COPY --from=build /srv/ /srv/ diff --git a/openshift-hack/images/tests/Dockerfile.rhel b/openshift-hack/images/tests/Dockerfile.rhel new file mode 100644 index 0000000000000..c13d4ac7af58b --- /dev/null +++ b/openshift-hack/images/tests/Dockerfile.rhel @@ -0,0 +1,21 @@ +FROM registry.svc.ci.openshift.org/ocp/builder:rhel-8-golang-1.15-openshift-4.6 AS builder +WORKDIR /go/src/k8s.io/kubernetes +COPY . . +RUN make WHAT=openshift-hack/e2e/k8s-e2e.test; \ + make WHAT=vendor/github.com/onsi/ginkgo/ginkgo; \ + mkdir -p /tmp/build; \ + cp /go/src/k8s.io/kubernetes/_output/local/bin/linux/$(go env GOARCH)/k8s-e2e.test /tmp/build/; \ + cp /go/src/k8s.io/kubernetes/_output/local/bin/linux/$(go env GOARCH)/ginkgo /tmp/build/; \ + cp /go/src/k8s.io/kubernetes/openshift-hack/test-kubernetes-e2e.sh /tmp/build/ + + +FROM registry.svc.ci.openshift.org/ocp/4.6:tools +COPY --from=builder /tmp/build/k8s-e2e.test /usr/bin/ +COPY --from=builder /tmp/build/ginkgo /usr/bin/ +COPY --from=builder /tmp/build/test-kubernetes-e2e.sh /usr/bin/ +RUN yum install --setopt=tsflags=nodocs -y git gzip util-linux && yum clean all && rm -rf /var/cache/yum/* && \ + git config --system user.name test && \ + git config --system user.email test@test.com && \ + chmod g+w /etc/passwd +LABEL io.k8s.display-name="Kubernetes End-to-End Tests" \ + io.openshift.tags="k8s,tests,e2e" diff --git a/openshift-hack/images/tests/OWNERS b/openshift-hack/images/tests/OWNERS new file mode 100644 index 0000000000000..e814678493032 --- /dev/null +++ b/openshift-hack/images/tests/OWNERS @@ -0,0 +1,5 @@ +reviewers: + - smarterclayton + - sdodson +approvers: + - smarterclayton diff --git a/openshift-hack/lib/build/binaries.sh b/openshift-hack/lib/build/binaries.sh new file mode 100644 index 0000000000000..e3c71254f37c1 --- /dev/null +++ b/openshift-hack/lib/build/binaries.sh @@ -0,0 +1,457 @@ +#!/usr/bin/env bash + +# This library holds utility functions for building +# and placing Golang binaries for multiple arches. + +# os::build::binaries_from_targets take a list of build targets and return the +# full go package to be built +function os::build::binaries_from_targets() { + local target + for target; do + if [[ -z "${target}" ]]; then + continue + fi + echo "${OS_GO_PACKAGE}/${target}" + done +} +readonly -f os::build::binaries_from_targets + +# Asks golang what it thinks the host platform is. The go tool chain does some +# slightly different things when the target platform matches the host platform. +function os::build::host_platform() { + echo "$(go env GOHOSTOS)/$(go env GOHOSTARCH)" +} +readonly -f os::build::host_platform + +# Create a user friendly version of host_platform for end users +function os::build::host_platform_friendly() { + local platform=${1:-} + if [[ -z "${platform}" ]]; then + platform=$(os::build::host_platform) + fi + if [[ $platform == "windows/amd64" ]]; then + echo "windows" + elif [[ $platform == "darwin/amd64" ]]; then + echo "mac" + elif [[ $platform == "linux/386" ]]; then + echo "linux-32bit" + elif [[ $platform == "linux/amd64" ]]; then + echo "linux-64bit" + elif [[ $platform == "linux/ppc64le" ]]; then + echo "linux-powerpc64" + elif [[ $platform == "linux/arm64" ]]; then + echo "linux-arm64" + elif [[ $platform == "linux/s390x" ]]; then + echo "linux-s390" + else + echo "$(go env GOHOSTOS)-$(go env GOHOSTARCH)" + fi +} +readonly -f os::build::host_platform_friendly + +# This converts from platform/arch to PLATFORM_ARCH, host platform will be +# considered if no parameter passed +function os::build::platform_arch() { + local platform=${1:-} + if [[ -z "${platform}" ]]; then + platform=$(os::build::host_platform) + fi + + echo "${platform}" | tr '[:lower:]/' '[:upper:]_' +} +readonly -f os::build::platform_arch + +# os::build::setup_env will check that the `go` commands is available in +# ${PATH}. If not running on Travis, it will also check that the Go version is +# good enough for the Kubernetes build. +# +# Output Vars: +# export GOPATH - A modified GOPATH to our created tree along with extra +# stuff. +# export GOBIN - This is actively unset if already set as we want binaries +# placed in a predictable place. +function os::build::setup_env() { + os::util::ensure::system_binary_exists 'go' + + if [[ -z "$(which sha256sum)" ]]; then + sha256sum() { + return 0 + } + fi + + # Travis continuous build uses a head go release that doesn't report + # a version number, so we skip this check on Travis. It's unnecessary + # there anyway. + if [[ "${TRAVIS:-}" != "true" ]]; then + os::golang::verify_go_version + fi + # For any tools that expect this to be set (it is default in golang 1.6), + # force vendor experiment. + export GO15VENDOREXPERIMENT=1 + + unset GOBIN + + # create a local GOPATH in _output + GOPATH="${OS_OUTPUT}/go" + OS_TARGET_BIN="${OS_OUTPUT}/go/bin" + local go_pkg_dir="${GOPATH}/src/${OS_GO_PACKAGE}" + local go_pkg_basedir + go_pkg_basedir="$(dirname "${go_pkg_dir}")" + + mkdir -p "${go_pkg_basedir}" + rm -f "${go_pkg_dir}" + + # TODO: This symlink should be relative. + ln -s "${OS_ROOT}" "${go_pkg_dir}" + + # lots of tools "just don't work" unless we're in the GOPATH + cd "${go_pkg_dir}" || exit 1 + + # Append OS_EXTRA_GOPATH to the GOPATH if it is defined. + if [[ -n ${OS_EXTRA_GOPATH:-} ]]; then + GOPATH="${GOPATH}:${OS_EXTRA_GOPATH}" + fi + + export GOPATH + export OS_TARGET_BIN +} +readonly -f os::build::setup_env + +# Build static binary targets. +# +# Input: +# $@ - targets and go flags. If no targets are set then all binaries targets +# are built. +# OS_BUILD_PLATFORMS - Incoming variable of targets to build for. If unset +# then just the host architecture is built. +function os::build::build_static_binaries() { + CGO_ENABLED=0 os::build::build_binaries -installsuffix=cgo "$@" +} +readonly -f os::build::build_static_binaries + +# Build binary targets specified +# +# Input: +# $@ - targets and go flags. If no targets are set then all binaries targets +# are built. +# OS_BUILD_PLATFORMS - Incoming variable of targets to build for. If unset +# then just the host architecture is built. +function os::build::build_binaries() { + if [[ $# -eq 0 ]]; then + return + fi + local -a binaries=( "$@" ) + # Create a sub-shell so that we don't pollute the outer environment + ( os::build::internal::build_binaries "${binaries[@]+"${binaries[@]}"}" ) +} + +# Build binary targets specified. Should always be run in a sub-shell so we don't leak GOBIN +# +# Input: +# $@ - targets and go flags. If no targets are set then all binaries targets +# are built. +# OS_BUILD_PLATFORMS - Incoming variable of targets to build for. If unset +# then just the host architecture is built. +os::build::internal::build_binaries() { + # Check for `go` binary and set ${GOPATH}. + os::build::setup_env + + # Fetch the version. + local version_ldflags + version_ldflags=$(os::build::ldflags) + + local goflags + # Use eval to preserve embedded quoted strings. + eval "goflags=(${OS_GOFLAGS:-})" + gogcflags="${GOGCFLAGS:-}" + + local arg + for arg; do + if [[ "${arg}" == -* ]]; then + # Assume arguments starting with a dash are flags to pass to go. + goflags+=("${arg}") + fi + done + + os::build::export_targets "$@" + + if [[ ! "${targets[*]:+${targets[*]}}" || ! "${binaries[*]:+${binaries[*]}}" ]]; then + return 0 + fi + + local -a nonstatics=() + local -a tests=() + for binary in "${binaries[@]-}"; do + if [[ "${binary}" =~ ".test"$ ]]; then + tests+=("$binary") + else + nonstatics+=("$binary") + fi + done + + local pkgdir="${OS_OUTPUT_PKGDIR}" + if [[ "${CGO_ENABLED-}" == "0" ]]; then + pkgdir+="/static" + fi + + local host_platform + host_platform=$(os::build::host_platform) + local platform + for platform in "${platforms[@]+"${platforms[@]}"}"; do + echo "++ Building go targets for ${platform}:" "${targets[@]}" + mkdir -p "${OS_OUTPUT_BINPATH}/${platform}" + + # output directly to the desired location + if [[ "$platform" == "$host_platform" ]]; then + export GOBIN="${OS_OUTPUT_BINPATH}/${platform}" + else + unset GOBIN + fi + + local platform_gotags_envvar + platform_gotags_envvar=OS_GOFLAGS_TAGS_$(os::build::platform_arch "${platform}") + local platform_gotags_test_envvar + platform_gotags_test_envvar=OS_GOFLAGS_TAGS_TEST_$(os::build::platform_arch "${platform}") + + # work around https://github.com/golang/go/issues/11887 + local local_ldflags="${version_ldflags}" + if [[ "${platform}" == "darwin/amd64" ]]; then + local_ldflags+=" -s" + fi + + #Add Windows File Properties/Version Info and Icon Resource for oc.exe + if [[ "$platform" == "windows/amd64" ]]; then + os::build::generate_windows_versioninfo + fi + + if [[ ${#nonstatics[@]} -gt 0 ]]; then + GOOS=${platform%/*} GOARCH=${platform##*/} go install \ + -tags "${OS_GOFLAGS_TAGS-} ${!platform_gotags_envvar:-}" \ + -ldflags="${local_ldflags}" \ + "${goflags[@]:+${goflags[@]}}" \ + -gcflags "${gogcflags}" \ + "${nonstatics[@]}" + + # GOBIN is not supported on cross-compile in Go 1.5+ - move to the correct target + if [[ "$platform" != "$host_platform" ]]; then + local platform_src="/${platform//\//_}" + mv "${OS_TARGET_BIN}/${platform_src}/"* "${OS_OUTPUT_BINPATH}/${platform}/" + fi + fi + + if [[ "$platform" == "windows/amd64" ]]; then + os::build::clean_windows_versioninfo + fi + + for test in "${tests[@]:+${tests[@]}}"; do + local outfile + outfile="${OS_OUTPUT_BINPATH}/${platform}/$(basename "${test}")" + # disabling cgo allows use of delve + CGO_ENABLED="${OS_TEST_CGO_ENABLED:-}" GOOS=${platform%/*} GOARCH=${platform##*/} go test \ + -tags "${OS_GOFLAGS_TAGS-} ${!platform_gotags_test_envvar:-}" \ + -ldflags "${local_ldflags}" \ + -i -c -o "${outfile}" \ + "${goflags[@]:+${goflags[@]}}" \ + "$(dirname "${test}")" + done + done + + os::build::check_binaries +} +readonly -f os::build::build_binaries + + # Generates the set of target packages, binaries, and platforms to build for. +# Accepts binaries via $@, and platforms via OS_BUILD_PLATFORMS, or defaults to +# the current platform. +function os::build::export_targets() { + platforms=("${OS_BUILD_PLATFORMS[@]:+${OS_BUILD_PLATFORMS[@]}}") + + targets=() + local arg + for arg; do + if [[ "${arg}" != -* ]]; then + targets+=("${arg}") + fi + done + + binaries=($(os::build::binaries_from_targets "${targets[@]-}")) +} +readonly -f os::build::export_targets + +# This will take $@ from $GOPATH/bin and copy them to the appropriate +# place in ${OS_OUTPUT_BINDIR} +# +# If OS_RELEASE_ARCHIVE is set, tar archives prefixed with OS_RELEASE_ARCHIVE for +# each of OS_BUILD_PLATFORMS are created. +# +# Ideally this wouldn't be necessary and we could just set GOBIN to +# OS_OUTPUT_BINDIR but that won't work in the face of cross compilation. 'go +# install' will place binaries that match the host platform directly in $GOBIN +# while placing cross compiled binaries into `platform_arch` subdirs. This +# complicates pretty much everything else we do around packaging and such. +function os::build::place_bins() { + ( + local host_platform + host_platform=$(os::build::host_platform) + + if [[ "${OS_RELEASE_ARCHIVE-}" != "" ]]; then + os::build::version::get_vars + mkdir -p "${OS_OUTPUT_RELEASEPATH}" + fi + + os::build::export_targets "$@" + for platform in "${platforms[@]+"${platforms[@]}"}"; do + # The substitution on platform_src below will replace all slashes with + # underscores. It'll transform darwin/amd64 -> darwin_amd64. + local platform_src="/${platform//\//_}" + + # Skip this directory if the platform has no binaries. + if [[ ! -d "${OS_OUTPUT_BINPATH}/${platform}" ]]; then + continue + fi + + # Create an array of binaries to release. Append .exe variants if the platform is windows. + local -a binaries=() + for binary in "${targets[@]}"; do + binary=$(basename "$binary") + if [[ $platform == "windows/amd64" ]]; then + binaries+=("${binary}.exe") + else + binaries+=("${binary}") + fi + done + + # If no release archive was requested, we're done. + if [[ "${OS_RELEASE_ARCHIVE-}" == "" ]]; then + continue + fi + + # Create a temporary bin directory containing only the binaries marked for release. + local release_binpath + release_binpath=$(mktemp -d "openshift.release.${OS_RELEASE_ARCHIVE}.XXX") + for binary in "${binaries[@]}"; do + cp "${OS_OUTPUT_BINPATH}/${platform}/${binary}" "${release_binpath}/" + done + + # Create the release archive. + platform="$( os::build::host_platform_friendly "${platform}" )" + if [[ ${OS_RELEASE_ARCHIVE} == "openshift-origin" ]]; then + for file in "${OS_BINARY_RELEASE_CLIENT_EXTRA[@]}"; do + cp "${file}" "${release_binpath}/" + done + if [[ $platform == "linux-64bit" ]]; then + OS_RELEASE_ARCHIVE="openshift-origin-server" os::build::archive::tar "${OS_BINARY_RELEASE_SERVER_LINUX[@]}" + elif [[ $platform == "linux-powerpc64" ]]; then + OS_RELEASE_ARCHIVE="openshift-origin-server" os::build::archive::tar "${OS_BINARY_RELEASE_SERVER_LINUX[@]}" + elif [[ $platform == "linux-arm64" ]]; then + OS_RELEASE_ARCHIVE="openshift-origin-server" os::build::archive::tar "${OS_BINARY_RELEASE_SERVER_LINUX[@]}" + elif [[ $platform == "linux-s390" ]]; then + OS_RELEASE_ARCHIVE="openshift-origin-server" os::build::archive::tar "${OS_BINARY_RELEASE_SERVER_LINUX[@]}" + else + echo "++ ERROR: No release type defined for $platform" + fi + else + if [[ $platform == "linux-64bit" || $platform == "linux-powerpc64" || $platform == "linux-arm64" || $platform == "linux-s390" ]]; then + os::build::archive::tar "./*" + else + echo "++ ERROR: No release type defined for $platform" + fi + fi + rm -rf "${release_binpath}" + done + ) +} +readonly -f os::build::place_bins + +# os::build::release_sha calculates a SHA256 checksum over the contents of the +# built release directory. +function os::build::release_sha() { + pushd "${OS_OUTPUT_RELEASEPATH}" &> /dev/null || exit 1 + find . -maxdepth 1 -type f | xargs sha256sum > CHECKSUM + popd &> /dev/null || exit 1 +} +readonly -f os::build::release_sha + +# os::build::make_openshift_binary_symlinks makes symlinks for the openshift +# binary in _output/local/bin/${platform} +function os::build::make_openshift_binary_symlinks() { + platform=$(os::build::host_platform) +} +readonly -f os::build::make_openshift_binary_symlinks + +# DEPRECATED: will be removed +function os::build::ldflag() { + local key=${1} + local val=${2} + + echo "-X ${key}=${val}" +} +readonly -f os::build::ldflag + +# os::build::require_clean_tree exits if the current Git tree is not clean. +function os::build::require_clean_tree() { + if ! git diff-index --quiet HEAD -- || test "$(git ls-files --exclude-standard --others | wc -l)" != 0; then + echo "You can't have any staged or dirty files in $(pwd) for this command." + echo "Either commit them or unstage them to continue." + exit 1 + fi +} +readonly -f os::build::require_clean_tree + +# os::build::commit_range takes one or two arguments - if the first argument is an +# integer, it is assumed to be a pull request and the local origin/pr/# branch is +# used to determine the common range with the second argument. If the first argument +# is not an integer, it is assumed to be a Git commit range and output directly. +function os::build::commit_range() { + local remote + remote="${UPSTREAM_REMOTE:-origin}" + if [[ "$1" =~ ^-?[0-9]+$ ]]; then + local target + target="$(git rev-parse "${remote}/pr/$1")" + if [[ $? -ne 0 ]]; then + echo "Branch does not exist, or you have not configured ${remote}/pr/* style branches from GitHub" 1>&2 + exit 1 + fi + + local base + base="$(git merge-base "${target}" "$2")" + if [[ $? -ne 0 ]]; then + echo "Branch has no common commits with $2" 1>&2 + exit 1 + fi + if [[ "${base}" == "${target}" ]]; then + + # DO NOT TRUST THIS CODE + merged="$(git rev-list --reverse "${target}".."$2" --ancestry-path | head -1)" + if [[ -z "${merged}" ]]; then + echo "Unable to find the commit that merged ${remote}/pr/$1" 1>&2 + exit 1 + fi + #if [[ $? -ne 0 ]]; then + # echo "Unable to find the merge commit for $1: ${merged}" 1>&2 + # exit 1 + #fi + echo "++ pr/$1 appears to have merged at ${merged}" 1>&2 + leftparent="$(git rev-list --parents -n 1 "${merged}" | cut -f2 -d ' ')" + if [[ $? -ne 0 ]]; then + echo "Unable to find the left-parent for the merge of for $1" 1>&2 + exit 1 + fi + base="$(git merge-base "${target}" "${leftparent}")" + if [[ $? -ne 0 ]]; then + echo "Unable to find the common commit between ${leftparent} and $1" 1>&2 + exit 1 + fi + echo "${base}..${target}" + exit 0 + #echo "Branch has already been merged to upstream master, use explicit range instead" 1>&2 + #exit 1 + fi + + echo "${base}...${target}" + exit 0 + fi + + echo "$1" +} +readonly -f os::build::commit_range diff --git a/openshift-hack/lib/build/rpm.sh b/openshift-hack/lib/build/rpm.sh new file mode 100644 index 0000000000000..275602de6f067 --- /dev/null +++ b/openshift-hack/lib/build/rpm.sh @@ -0,0 +1,95 @@ +#!/usr/bin/env bash + +# This library holds utilities for building RPMs from Origin. + +# os::build::rpm::generate_nevra_vars determines the NEVRA of the RPMs +# that would be built from the current git state. +# +# Globals: +# - OS_GIT_VERSION +# Arguments: +# - None +# Exports: +# - OS_RPM_VERSION +# - OS_RPM_RELEASE +# - OS_RPM_ARCHITECTURE +function os::build::rpm::get_nvra_vars() { + # the package name can be overwritten but is normally 'origin' + OS_RPM_ARCHITECTURE="$(uname -i)" + + # we can extract the package version from the build version + os::build::version::get_vars + if [[ "${OS_GIT_VERSION}" =~ ^v([0-9](\.[0-9]+)*)(.*) ]]; then + OS_RPM_VERSION="${BASH_REMATCH[1]}" + metadata="${BASH_REMATCH[3]}" + else + os::log::fatal "Malformed \$OS_GIT_VERSION: ${OS_GIT_VERSION}" + fi + + # we can generate the package release from the git version metadata + # OS_GIT_VERSION will always have metadata, but either contain + # pre-release information _and_ build metadata, or only the latter. + # Build metadata may or may not contain the number of commits past + # the last tag. If no commit number exists, we are on a tag and use 0. + # ex. + # -alpha.0+shasums-123-dirty + # -alpha.0+shasums-123 + # -alpha.0+shasums-dirty + # -alpha.0+shasums + # +shasums-123-dirty + # +shasums-123 + # +shasums-dirty + # +shasums + if [[ "${metadata:0:1}" == "+" ]]; then + # we only have build metadata, but need to massage it so + # we can generate a valid RPM release from it + if [[ "${metadata}" =~ ^\+([a-z0-9]{7,40})(-([0-9]+))?(-dirty)?$ ]]; then + build_sha="${BASH_REMATCH[1]}" + build_num="${BASH_REMATCH[3]:-0}" + else + os::log::fatal "Malformed git version metadata: ${metadata}" + fi + OS_RPM_RELEASE="1.${build_num}.${build_sha}" + elif [[ "${metadata:0:1}" == "-" ]]; then + # we have both build metadata and pre-release info + if [[ "${metadata}" =~ ^-([^\+]+)\+([a-z0-9]{7,40})(-([0-9]+))?(-dirty)?$ ]]; then + pre_release="${BASH_REMATCH[1]}" + build_sha="${BASH_REMATCH[2]}" + build_num="${BASH_REMATCH[4]:-0}" + else + os::log::fatal "Malformed git version metadata: ${metadata}" + fi + OS_RPM_RELEASE="0.${pre_release}.${build_num}.${build_sha}" + else + os::log::fatal "Malformed git version metadata: ${metadata}" + fi + + OS_RPM_GIT_VARS=$( os::build::version::save_vars | tr '\n' ' ' ) + + export OS_RPM_VERSION OS_RPM_RELEASE OS_RPM_ARCHITECTURE OS_RPM_GIT_VARS +} + + +# os::build::rpm::format_nvra formats the rpm NVRA vars generated by +# os::build::rpm::get_nvra_vars and will generate them if necessary +# +# Globals: +# - OS_RPM_NAME +# - OS_RPM_VERSION +# - OS_RPM_RELEASE +# - OS_RPM_ARCHITECTURE +# Arguments: +# None +# Returns: +# None +function os::build::rpm::format_nvra() { + if [[ -z "${OS_RPM_VERSION:-}" || -z "${OS_RPM_RELEASE:-}" ]]; then + os::build::rpm::get_nvra_vars + fi + if [[ -z "${OS_RPM_NAME-}" ]]; then + OS_RPM_SPECFILE="$( find "${OS_ROOT}" -name '*.spec' )" + OS_RPM_NAME="$( rpmspec -q --qf '%{name}\n' "${OS_RPM_SPECFILE}" | head -1 )" + fi + + echo "${OS_RPM_NAME}-${OS_RPM_VERSION}-${OS_RPM_RELEASE}.${OS_RPM_ARCHITECTURE}" +} diff --git a/openshift-hack/lib/build/version.sh b/openshift-hack/lib/build/version.sh new file mode 100644 index 0000000000000..18900881e2e0c --- /dev/null +++ b/openshift-hack/lib/build/version.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash + +# This library holds utility functions for determining +# product versions from Git repository state. + +# os::build::version::get_vars loads the standard version variables as +# ENV vars +function os::build::version::get_vars() { + if [[ -n "${OS_VERSION_FILE-}" ]]; then + if [[ -f "${OS_VERSION_FILE}" ]]; then + source "${OS_VERSION_FILE}" + return + fi + if [[ ! -d "${OS_ROOT}/.git" ]]; then + os::log::fatal "No version file at ${OS_VERSION_FILE}" + fi + os::log::warning "No version file at ${OS_VERSION_FILE}, falling back to git versions" + fi + os::build::version::git_vars +} +readonly -f os::build::version::get_vars + +# os::build::version::git_vars looks up the current Git vars if they have not been calculated. +function os::build::version::git_vars() { + if [[ -n "${OS_GIT_VERSION-}" ]]; then + return 0 + fi + + local git=(git --work-tree "${OS_ROOT}") + + if [[ -n ${OS_GIT_COMMIT-} ]] || OS_GIT_COMMIT=$("${git[@]}" rev-parse --short "HEAD^{commit}" 2>/dev/null); then + if [[ -z ${OS_GIT_TREE_STATE-} ]]; then + # Check if the tree is dirty. default to dirty + if git_status=$("${git[@]}" status --porcelain 2>/dev/null) && [[ -z ${git_status} ]]; then + OS_GIT_TREE_STATE="clean" + else + OS_GIT_TREE_STATE="dirty" + fi + fi + # Use git describe to find the version based on annotated tags. + if [[ -n ${OS_GIT_VERSION-} ]] || OS_GIT_VERSION=$("${git[@]}" describe --long --tags --abbrev=7 --match 'v[0-9]*' "${OS_GIT_COMMIT}^{commit}" 2>/dev/null); then + # Try to match the "git describe" output to a regex to try to extract + # the "major" and "minor" versions and whether this is the exact tagged + # version or whether the tree is between two tagged versions. + if [[ "${OS_GIT_VERSION}" =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)(\.[0-9]+)*([-].*)?$ ]]; then + OS_GIT_MAJOR=${BASH_REMATCH[1]} + OS_GIT_MINOR=${BASH_REMATCH[2]} + OS_GIT_PATCH=${BASH_REMATCH[3]} + if [[ -n "${BASH_REMATCH[5]}" ]]; then + OS_GIT_MINOR+="+" + fi + fi + + # This translates the "git describe" to an actual semver.org + # compatible semantic version that looks something like this: + # v1.1.0-alpha.0.6+84c76d1-345 + # shellcheck disable=SC2001 + OS_GIT_VERSION=$(echo "${OS_GIT_VERSION}" | sed "s/-\([0-9]\{1,\}\)-g\([0-9a-f]\{7,40\}\)$/\+\2-\1/") + # If this is an exact tag, remove the last segment. + OS_GIT_VERSION="${OS_GIT_VERSION//-0$/}" + if [[ "${OS_GIT_TREE_STATE}" == "dirty" ]]; then + # git describe --dirty only considers changes to existing files, but + # that is problematic since new untracked .go files affect the build, + # so use our idea of "dirty" from git status instead. + OS_GIT_VERSION+="-dirty" + fi + fi + fi + +} +readonly -f os::build::version::git_vars + +# Saves the environment flags to $1 +function os::build::version::save_vars() { + # Set the kube vars to the os vars to ensure correct versioning + # when using rpmbuild. This is necessary to ensure the kube build + # tooling correctly sets the version of binaries when building + # from source. + cat <> "${JUNIT_REPORT_OUTPUT:-/dev/null}" ) + os::test::junit::declare_test_end + return "${return_code}" +} +readonly -f os::cmd::internal::expect_exit_code_run_grep + +# os::cmd::internal::init_tempdir initializes the temporary directory +function os::cmd::internal::init_tempdir() { + mkdir -p "${os_cmd_internal_tmpdir}" + rm -f "${os_cmd_internal_tmpdir}"/tmp_std{out,err}.log +} +readonly -f os::cmd::internal::init_tempdir + +# os::cmd::internal::describe_call determines the file:line of the latest function call made +# from outside of this file in the call stack, and the name of the function being called from +# that line, returning a string describing the call +function os::cmd::internal::describe_call() { + local cmd=$1 + local cmd_eval_func=$2 + local grep_args=${3:-} + local test_eval_func=${4:-} + + local caller_id + caller_id=$(os::cmd::internal::determine_caller) + local full_name="${caller_id}: executing '${cmd}'" + + local cmd_expectation + cmd_expectation=$(os::cmd::internal::describe_expectation "${cmd_eval_func}") + local full_name="${full_name} expecting ${cmd_expectation}" + + if [[ -n "${grep_args}" ]]; then + local text_expecting= + case "${test_eval_func}" in + "os::cmd::internal::success_func") + text_expecting="text" ;; + "os::cmd::internal::failure_func") + text_expecting="not text" ;; + esac + full_name="${full_name} and ${text_expecting} '${grep_args}'" + fi + + echo "${full_name}" +} +readonly -f os::cmd::internal::describe_call + +# os::cmd::internal::determine_caller determines the file relative to the OpenShift Origin root directory +# and line number of the function call to the outer os::cmd wrapper function +function os::cmd::internal::determine_caller() { + local call_depth= + local len_sources="${#BASH_SOURCE[@]}" + for (( i=0; i>"${os_cmd_internal_tmpout}" 2>>"${os_cmd_internal_tmperr}" || result=$? + local result=${result:-0} # if we haven't set result yet, the command succeeded + + return "${result}" +} +readonly -f os::cmd::internal::run_collecting_output + +# os::cmd::internal::success_func determines if the input exit code denotes success +# this function returns 0 for false and 1 for true to be compatible with arithmetic tests +function os::cmd::internal::success_func() { + local exit_code=$1 + + # use a negated test to get output correct for (( )) + [[ "${exit_code}" -ne "0" ]] + return $? +} +readonly -f os::cmd::internal::success_func + +# os::cmd::internal::failure_func determines if the input exit code denotes failure +# this function returns 0 for false and 1 for true to be compatible with arithmetic tests +function os::cmd::internal::failure_func() { + local exit_code=$1 + + # use a negated test to get output correct for (( )) + [[ "${exit_code}" -eq "0" ]] + return $? +} +readonly -f os::cmd::internal::failure_func + +# os::cmd::internal::specific_code_func determines if the input exit code matches the given code +# this function returns 0 for false and 1 for true to be compatible with arithmetic tests +function os::cmd::internal::specific_code_func() { + local expected_code=$1 + local exit_code=$2 + + # use a negated test to get output correct for (( )) + [[ "${exit_code}" -ne "${expected_code}" ]] + return $? +} +readonly -f os::cmd::internal::specific_code_func + +# os::cmd::internal::get_results prints the stderr and stdout files +function os::cmd::internal::get_results() { + cat "${os_cmd_internal_tmpout}" "${os_cmd_internal_tmperr}" +} +readonly -f os::cmd::internal::get_results + +# os::cmd::internal::get_last_results prints the stderr and stdout from the last attempt +function os::cmd::internal::get_last_results() { + awk 'BEGIN { RS = "\x1e" } END { print $0 }' "${os_cmd_internal_tmpout}" + awk 'BEGIN { RS = "\x1e" } END { print $0 }' "${os_cmd_internal_tmperr}" +} +readonly -f os::cmd::internal::get_last_results + +# os::cmd::internal::mark_attempt marks the end of an attempt in the stdout and stderr log files +# this is used to make the try_until_* output more concise +function os::cmd::internal::mark_attempt() { + echo -e '\x1e' >> "${os_cmd_internal_tmpout}" + echo -e '\x1e' >> "${os_cmd_internal_tmperr}" +} +readonly -f os::cmd::internal::mark_attempt + +# os::cmd::internal::compress_output compresses an output file into timeline representation +function os::cmd::internal::compress_output() { + local logfile=$1 + + awk -f "${OS_ROOT}/hack/lib/compress.awk" "${logfile}" +} +readonly -f os::cmd::internal::compress_output + +# os::cmd::internal::print_results pretty-prints the stderr and stdout files. If attempt separators +# are present, this function returns a concise view of the stdout and stderr output files using a +# timeline format, where consecutive output lines that are the same are condensed into one line +# with a counter +function os::cmd::internal::print_results() { + if [[ -s "${os_cmd_internal_tmpout}" ]]; then + echo "Standard output from the command:" + if grep -q $'\x1e' "${os_cmd_internal_tmpout}"; then + os::cmd::internal::compress_output "${os_cmd_internal_tmpout}" + else + cat "${os_cmd_internal_tmpout}"; echo + fi + else + echo "There was no output from the command." + fi + + if [[ -s "${os_cmd_internal_tmperr}" ]]; then + echo "Standard error from the command:" + if grep -q $'\x1e' "${os_cmd_internal_tmperr}"; then + os::cmd::internal::compress_output "${os_cmd_internal_tmperr}" + else + cat "${os_cmd_internal_tmperr}"; echo + fi + else + echo "There was no error output from the command." + fi +} +readonly -f os::cmd::internal::print_results + +# os::cmd::internal::assemble_causes determines from the two input booleans which part of the test +# failed and generates a nice delimited list of failure causes +function os::cmd::internal::assemble_causes() { + local cmd_succeeded=$1 + local test_succeeded=$2 + + local causes=() + if (( ! cmd_succeeded )); then + causes+=("the command returned the wrong error code") + fi + if (( ! test_succeeded )); then + causes+=("the output content test failed") + fi + + local list + list=$(printf '; %s' "${causes[@]}") + echo "${list:2}" +} +readonly -f os::cmd::internal::assemble_causes + +# os::cmd::internal::run_until_exit_code runs the provided command until the exit code test given +# succeeds or the timeout given runs out. Output from the command to be tested is suppressed unless +# either `VERBOSE=1` or the test fails. This function bypasses any error exiting settings or traps +# set by upstream callers by masking the return code of the command with the return code of setting +# the result variable on failure. +# +# Globals: +# - JUNIT_REPORT_OUTPUT +# - VERBOSE +# Arguments: +# - 1: the command to run +# - 2: command evaluation assertion to use +# - 3: timeout duration +# - 4: interval duration +# Returns: +# - 0: if all assertions met before timeout +# - 1: if timeout occurs +function os::cmd::internal::run_until_exit_code() { + local cmd=$1 + local cmd_eval_func=$2 + local duration=$3 + local interval=$4 + + local -a junit_log + + os::cmd::internal::init_tempdir + os::test::junit::declare_test_start + + local description + description=$(os::cmd::internal::describe_call "${cmd}" "${cmd_eval_func}") + local duration_seconds + duration_seconds=$(echo "scale=3; $(( duration )) / 1000" | bc | xargs printf '%5.3f') + local description="${description}; re-trying every ${interval}s until completion or ${duration_seconds}s" + local preamble="Running ${description}..." + echo "${preamble}" + # for ease of parsing, we want the entire declaration on one line, so we replace '\n' with ';' + junit_log+=( "${description//$'\n'/;}" ) + + local start_time + start_time=$(os::cmd::internal::seconds_since_epoch) + + local deadline=$(( $(date +%s000) + duration )) + local cmd_succeeded=0 + while [ "$(date +%s000)" -lt $deadline ]; do + local cmd_result + cmd_result=$( os::cmd::internal::run_collecting_output "${cmd}"; echo $? ) + cmd_succeeded=$( ${cmd_eval_func} "${cmd_result}"; echo $? ) + if (( cmd_succeeded )); then + break + fi + sleep "${interval}" + os::cmd::internal::mark_attempt + done + + local end_time + end_time=$(os::cmd::internal::seconds_since_epoch) + local time_elapsed + time_elapsed=$(echo "scale=9; ${end_time} - ${start_time}" | bc | xargs printf '%5.3f') # in decimal seconds, we need leading zeroes for parsing later + + # clear the preamble so we can print out the success or error message + os::text::clear_string "${preamble}" + + local return_code + if (( cmd_succeeded )); then + os::text::print_green "SUCCESS after ${time_elapsed}s: ${description}" + junit_log+=( "SUCCESS after ${time_elapsed}s: ${description//$'\n'/;}" ) + + if [[ -n ${VERBOSE-} ]]; then + os::cmd::internal::print_results + fi + return_code=0 + else + os::text::print_red_bold "FAILURE after ${time_elapsed}s: ${description}: the command timed out" + junit_log+=( "FAILURE after ${time_elapsed}s: ${description//$'\n'/;}: the command timed out" ) + + os::text::print_red "$(os::cmd::internal::print_results)" + return_code=1 + fi + + junit_log+=( "$(os::cmd::internal::print_results)" ) + ( IFS=$'\n'; echo "${junit_log[*]}" >> "${JUNIT_REPORT_OUTPUT:-/dev/null}" ) + os::test::junit::declare_test_end + return "${return_code}" +} +readonly -f os::cmd::internal::run_until_exit_code + +# os::cmd::internal::run_until_text runs the provided command until the assertion function succeeds with +# the given text on the command output or the timeout given runs out. This can be used to run until the +# output does or does not contain some text. Output from the command to be tested is suppressed unless +# either `VERBOSE=1` or the test fails. This function bypasses any error exiting settings or traps +# set by upstream callers by masking the return code of the command with the return code of setting +# the result variable on failure. +# +# Globals: +# - JUNIT_REPORT_OUTPUT +# - VERBOSE +# Arguments: +# - 1: the command to run +# - 2: text to test for +# - 3: text assertion to use +# - 4: timeout duration +# - 5: interval duration +# Returns: +# - 0: if all assertions met before timeout +# - 1: if timeout occurs +function os::cmd::internal::run_until_text() { + local cmd=$1 + local text=$2 + local test_eval_func=${3:-os::cmd::internal::success_func} + local duration=$4 + local interval=$5 + + local -a junit_log + + os::cmd::internal::init_tempdir + os::test::junit::declare_test_start + + local description + description=$(os::cmd::internal::describe_call "${cmd}" "" "${text}" "${test_eval_func}") + local duration_seconds + duration_seconds=$(echo "scale=3; $(( duration )) / 1000" | bc | xargs printf '%5.3f') + local description="${description}; re-trying every ${interval}s until completion or ${duration_seconds}s" + local preamble="Running ${description}..." + echo "${preamble}" + # for ease of parsing, we want the entire declaration on one line, so we replace '\n' with ';' + junit_log+=( "${description//$'\n'/;}" ) + + local start_time + start_time=$(os::cmd::internal::seconds_since_epoch) + + local deadline + deadline=$(( $(date +%s000) + duration )) + local test_succeeded=0 + while [ "$(date +%s000)" -lt $deadline ]; do + local cmd_result= + cmd_result=$( os::cmd::internal::run_collecting_output "${cmd}"; echo $? ) + local test_result + test_result=$( os::cmd::internal::run_collecting_output 'grep -Eq "'"${text}"'" <(os::cmd::internal::get_last_results)'; echo $? ) + test_succeeded=$( ${test_eval_func} "${test_result}"; echo $? ) + + if (( test_succeeded )); then + break + fi + sleep "${interval}" + os::cmd::internal::mark_attempt + done + + local end_time + end_time=$(os::cmd::internal::seconds_since_epoch) + local time_elapsed + time_elapsed=$(echo "scale=9; ${end_time} - ${start_time}" | bc | xargs printf '%5.3f') # in decimal seconds, we need leading zeroes for parsing later + + # clear the preamble so we can print out the success or error message + os::text::clear_string "${preamble}" + + local return_code + if (( test_succeeded )); then + os::text::print_green "SUCCESS after ${time_elapsed}s: ${description}" + junit_log+=( "SUCCESS after ${time_elapsed}s: ${description//$'\n'/;}" ) + + if [[ -n ${VERBOSE-} ]]; then + os::cmd::internal::print_results + fi + return_code=0 + else + os::text::print_red_bold "FAILURE after ${time_elapsed}s: ${description}: the command timed out" + junit_log+=( "FAILURE after ${time_elapsed}s: ${description//$'\n'/;}: the command timed out" ) + + os::text::print_red "$(os::cmd::internal::print_results)" + return_code=1 + fi + + junit_log+=( "$(os::cmd::internal::print_results)" ) + ( IFS=$'\n'; echo "${junit_log[*]}" >> "${JUNIT_REPORT_OUTPUT:-/dev/null}" ) + os::test::junit::declare_test_end + return "${return_code}" +} +readonly -f os::cmd::internal::run_until_text diff --git a/openshift-hack/lib/constants.sh b/openshift-hack/lib/constants.sh new file mode 100755 index 0000000000000..3552d53115d68 --- /dev/null +++ b/openshift-hack/lib/constants.sh @@ -0,0 +1,324 @@ +#!/usr/bin/env bash + +# This script provides constants for the Golang binary build process + +readonly OS_GO_PACKAGE=github.com/openshift/origin + +readonly OS_BUILD_ENV_GOLANG="${OS_BUILD_ENV_GOLANG:-1.15}" +readonly OS_BUILD_ENV_IMAGE="${OS_BUILD_ENV_IMAGE:-openshift/origin-release:golang-${OS_BUILD_ENV_GOLANG}}" +readonly OS_REQUIRED_GO_VERSION="go${OS_BUILD_ENV_GOLANG}" +readonly OS_GLIDE_MINOR_VERSION="13" +readonly OS_REQUIRED_GLIDE_VERSION="0.$OS_GLIDE_MINOR_VERSION" + +readonly OS_GOFLAGS_TAGS="include_gcs include_oss containers_image_openpgp" +readonly OS_GOFLAGS_TAGS_LINUX_AMD64="gssapi selinux" +readonly OS_GOFLAGS_TAGS_LINUX_S390X="gssapi selinux" +readonly OS_GOFLAGS_TAGS_LINUX_ARM64="gssapi selinux" +readonly OS_GOFLAGS_TAGS_LINUX_PPC64LE="gssapi selinux" + +readonly OS_OUTPUT_BASEPATH="${OS_OUTPUT_BASEPATH:-_output}" +readonly OS_BASE_OUTPUT="${OS_ROOT}/${OS_OUTPUT_BASEPATH}" +readonly OS_OUTPUT_SCRIPTPATH="${OS_OUTPUT_SCRIPTPATH:-"${OS_BASE_OUTPUT}/scripts"}" + +readonly OS_OUTPUT_SUBPATH="${OS_OUTPUT_SUBPATH:-${OS_OUTPUT_BASEPATH}/local}" +readonly OS_OUTPUT="${OS_ROOT}/${OS_OUTPUT_SUBPATH}" +readonly OS_OUTPUT_RELEASEPATH="${OS_OUTPUT}/releases" +readonly OS_OUTPUT_RPMPATH="${OS_OUTPUT_RELEASEPATH}/rpms" +readonly OS_OUTPUT_BINPATH="${OS_OUTPUT}/bin" +readonly OS_OUTPUT_PKGDIR="${OS_OUTPUT}/pkgdir" + +readonly OS_IMAGE_COMPILE_TARGETS_LINUX=( + vendor/k8s.io/kubernetes/cmd/kube-apiserver + vendor/k8s.io/kubernetes/cmd/kube-controller-manager + vendor/k8s.io/kubernetes/cmd/kube-scheduler + vendor/k8s.io/kubernetes/cmd/kubelet +) +readonly OS_SCRATCH_IMAGE_COMPILE_TARGETS_LINUX=( + "" +) +readonly OS_IMAGE_COMPILE_BINARIES=("${OS_SCRATCH_IMAGE_COMPILE_TARGETS_LINUX[@]##*/}" "${OS_IMAGE_COMPILE_TARGETS_LINUX[@]##*/}") + +readonly OS_GOVET_BLACKLIST=( +) + +#If you update this list, be sure to get the images/origin/Dockerfile +readonly OS_BINARY_RELEASE_SERVER_LINUX=( + './*' +) +readonly OS_BINARY_RELEASE_CLIENT_EXTRA=( + ${OS_ROOT}/README.md + ${OS_ROOT}/LICENSE +) + +# os::build::get_product_vars exports variables that we expect to change +# depending on the distribution of Origin +function os::build::get_product_vars() { + export OS_BUILD_LDFLAGS_IMAGE_PREFIX="${OS_IMAGE_PREFIX:-"openshift/origin"}" + export OS_BUILD_LDFLAGS_DEFAULT_IMAGE_STREAMS="${OS_BUILD_LDFLAGS_DEFAULT_IMAGE_STREAMS:-"centos7"}" +} + +# os::build::ldflags calculates the -ldflags argument for building OpenShift +function os::build::ldflags() { + # Run this in a subshell to prevent settings/variables from leaking. + set -o errexit + set -o nounset + set -o pipefail + + cd "${OS_ROOT}" + + os::build::version::get_vars + os::build::get_product_vars + + local buildDate="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" + + declare -a ldflags=( + "-s" + "-w" + ) + + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/pkg/version.majorFromGit" "${OS_GIT_MAJOR}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/pkg/version.minorFromGit" "${OS_GIT_MINOR}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/pkg/version.versionFromGit" "${OS_GIT_VERSION}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/pkg/version.commitFromGit" "${OS_GIT_COMMIT}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/pkg/version.gitTreeState" "${OS_GIT_TREE_STATE}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/pkg/version.buildDate" "${buildDate}")) + + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/vendor/k8s.io/component-base/version.gitMajor" "${KUBE_GIT_MAJOR}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/vendor/k8s.io/component-base/version.gitMinor" "${KUBE_GIT_MINOR}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/vendor/k8s.io/component-base/version.gitCommit" "${OS_GIT_COMMIT}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/vendor/k8s.io/component-base/version.gitVersion" "${KUBE_GIT_VERSION}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/vendor/k8s.io/component-base/version.buildDate" "${buildDate}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/vendor/k8s.io/component-base/version.gitTreeState" "clean")) + + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/vendor/k8s.io/client-go/pkg/version.gitMajor" "${KUBE_GIT_MAJOR}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/vendor/k8s.io/client-go/pkg/version.gitMinor" "${KUBE_GIT_MINOR}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/vendor/k8s.io/client-go/pkg/version.gitCommit" "${OS_GIT_COMMIT}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/vendor/k8s.io/client-go/pkg/version.gitVersion" "${KUBE_GIT_VERSION}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/vendor/k8s.io/client-go/pkg/version.buildDate" "${buildDate}")) + ldflags+=($(os::build::ldflag "${OS_GO_PACKAGE}/vendor/k8s.io/client-go/pkg/version.gitTreeState" "clean") +) + + # The -ldflags parameter takes a single string, so join the output. + echo "${ldflags[*]-}" +} +readonly -f os::build::ldflags + +# os::util::list_go_src_files lists files we consider part of our project +# source code, useful for tools that iterate over source to provide vet- +# ting or linting, etc. +# +# Globals: +# None +# Arguments: +# None +# Returns: +# None +function os::util::list_go_src_files() { + find . -not \( \ + \( \ + -wholename './_output' \ + -o -wholename './.*' \ + -o -wholename './pkg/assets/bindata.go' \ + -o -wholename './pkg/assets/*/bindata.go' \ + -o -wholename './pkg/oc/clusterup/manifests/bindata.go' \ + -o -wholename './openshift.local.*' \ + -o -wholename './test/extended/testdata/bindata.go' \ + -o -wholename '*/vendor/*' \ + -o -wholename './assets/bower_components/*' \ + \) -prune \ + \) -name '*.go' | sort -u +} +readonly -f os::util::list_go_src_files + +# os::util::list_go_src_dirs lists dirs in origin/ and cmd/ dirs excluding +# doc.go, useful for tools that iterate over source to provide vetting or +# linting, or for godep-save etc. +# +# Globals: +# None +# Arguments: +# None +# Returns: +# None +function os::util::list_go_src_dirs() { + go list -e ./... | grep -Ev "/(third_party|vendor|staging|clientset_generated)/" | LC_ALL=C sort -u +} +readonly -f os::util::list_go_src_dirs + +# os::util::list_go_deps outputs the list of dependencies for the project. +function os::util::list_go_deps() { + go list -f '{{.ImportPath}}{{.Imports}}' ./test/... ./pkg/... ./cmd/... ./vendor/k8s.io/... | tr '[]' ' ' | + sed -e 's|github.com/openshift/origin/vendor/||g' | + sed -e 's|k8s.io/kubernetes/staging/src/||g' +} + +# os::util::list_test_packages_under lists all packages containing Golang test files that we +# want to run as unit tests under the given base dir in the source tree +function os::util::list_test_packages_under() { + local basedir=$* + + # we do not quote ${basedir} to allow for multiple arguments to be passed in as well as to allow for + # arguments that use expansion, e.g. paths containing brace expansion or wildcards + # we do not quote ${basedir} to allow for multiple arguments to be passed in as well as to allow for + # arguments that use expansion, e.g. paths containing brace expansion or wildcards + find ${basedir} -not \( \ + \( \ + -path 'vendor' \ + -o -path '*_output' \ + -o -path '*.git' \ + -o -path '*openshift.local.*' \ + -o -path '*vendor/*' \ + -o -path '*assets/node_modules' \ + -o -path '*test/*' \ + -o -path '*pkg/proxy' \ + -o -path '*k8s.io/kubernetes/cluster/gce*' \ + \) -prune \ + \) -name '*_test.go' | xargs -n1 dirname | sort -u | xargs -n1 printf "${OS_GO_PACKAGE}/%s\n" + + local kubernetes_path="vendor/k8s.io/kubernetes" + + if [[ -n "${TEST_KUBE-}" ]]; then + # we need to find all of the kubernetes test suites, excluding those we directly whitelisted before, the end-to-end suite, and + # cmd wasn't done before using glide and constantly flakes + # the forked etcd packages are used only by the gce etcd containers + find -L vendor/k8s.io/{api,apimachinery,apiserver,client-go,kube-aggregator,kubernetes} -not \( \ + \( \ + -path "${kubernetes_path}/staging" \ + -o -path "${kubernetes_path}/cmd" \ + -o -path "${kubernetes_path}/test" \ + -o -path "${kubernetes_path}/third_party/forked/etcd*" \ + -o -path "${kubernetes_path}/cluster/gce" \ + \) -prune \ + \) -name '*_test.go' | cut -f 2- -d / | xargs -n1 dirname | sort -u | xargs -n1 printf "${OS_GO_PACKAGE}/vendor/%s\n" + else + echo "${OS_GO_PACKAGE}/vendor/k8s.io/api/..." + echo "${OS_GO_PACKAGE}/vendor/k8s.io/kubernetes/pkg/api/..." + echo "${OS_GO_PACKAGE}/vendor/k8s.io/kubernetes/pkg/apis/..." + fi +} +readonly -f os::util::list_test_packages_under + +# Generates the .syso file used to add compile-time VERSIONINFO metadata to the +# Windows binary. +function os::build::generate_windows_versioninfo() { + os::build::version::get_vars + local major="${OS_GIT_MAJOR}" + local minor="${OS_GIT_MINOR%+}" + local patch="${OS_GIT_PATCH}" + local windows_versioninfo_file=`mktemp --suffix=".versioninfo.json"` + cat <"${windows_versioninfo_file}" +{ + "FixedFileInfo": + { + "FileVersion": { + "Major": ${major}, + "Minor": ${minor}, + "Patch": ${patch} + }, + "ProductVersion": { + "Major": ${major}, + "Minor": ${minor}, + "Patch": ${patch} + }, + "FileFlagsMask": "3f", + "FileFlags ": "00", + "FileOS": "040004", + "FileType": "01", + "FileSubType": "00" + }, + "StringFileInfo": + { + "Comments": "", + "CompanyName": "Red Hat, Inc.", + "InternalName": "openshift client", + "FileVersion": "${OS_GIT_VERSION}", + "InternalName": "oc", + "LegalCopyright": "© Red Hat, Inc. Licensed under the Apache License, Version 2.0", + "LegalTrademarks": "", + "OriginalFilename": "oc.exe", + "PrivateBuild": "", + "ProductName": "OpenShift Client", + "ProductVersion": "${OS_GIT_VERSION}", + "SpecialBuild": "" + }, + "VarFileInfo": + { + "Translation": { + "LangID": "0409", + "CharsetID": "04B0" + } + } +} +EOF + goversioninfo -o ${OS_ROOT}/vendor/github.com/openshift/oc/cmd/oc/oc.syso ${windows_versioninfo_file} +} +readonly -f os::build::generate_windows_versioninfo + +# Removes the .syso file used to add compile-time VERSIONINFO metadata to the +# Windows binary. +function os::build::clean_windows_versioninfo() { + rm ${OS_ROOT}/vendor/github.com/openshift/oc/cmd/oc/oc.syso +} +readonly -f os::build::clean_windows_versioninfo + +# OS_ALL_IMAGES is the list of images built by os::build::images. +readonly OS_ALL_IMAGES=( + origin-hyperkube + origin-tests +) + +# os::build::check_binaries ensures that binary sizes do not grow without approval. +function os::build::check_binaries() { + platform=$(os::build::host_platform) + if [[ "${platform}" != "linux/amd64" && "${platform}" != "darwin/amd64" ]]; then + return 0 + fi + duexe="du" + + # In OSX, the 'du' binary does not provide the --apparent-size flag. However, the homebrew + # provide GNU coreutils which provide 'gdu' binary which is equivalent to Linux du. + # For now, if the 'gdu' binary is not installed, print annoying warning and don't check the + # binary size (the CI will capture possible violation anyway). + if [[ "${platform}" == "darwin/amd64" ]]; then + duexe=$(which gdu || true) + if [[ -z "${duexe}" ]]; then + os::log::warning "Unable to locate 'gdu' binary to determine size of the binary. Please install it using: 'brew install coreutils'" + return 0 + fi + fi + + if [[ -f "${OS_OUTPUT_BINPATH}/${platform}/pod" ]]; then + size=$($duexe --apparent-size -m "${OS_OUTPUT_BINPATH}/${platform}/pod" | cut -f 1) + if [[ "${size}" -gt "2" ]]; then + os::log::fatal "pod binary has grown substantially to ${size}. You must have approval before bumping this limit." + fi + fi +} + +# os::build::images builds all images in this repo. +function os::build::images() { + # Create link to file if the FS supports hardlinks, otherwise copy the file + function ln_or_cp { + local src_file=$1 + local dst_dir=$2 + if os::build::archive::internal::is_hardlink_supported "${dst_dir}" ; then + ln -f "${src_file}" "${dst_dir}" + else + cp -pf "${src_file}" "${dst_dir}" + fi + } + + # determine the correct tag prefix + tag_prefix="${OS_IMAGE_PREFIX:-"openshift/origin"}" + + # images that depend on "${tag_prefix}-source" or "${tag_prefix}-base" + ( os::build::image "${tag_prefix}-hyperkube" images/hyperkube ) & + + for i in $(jobs -p); do wait "$i"; done + + # images that depend on "${tag_prefix}-cli" or hyperkube + ( os::build::image "${tag_prefix}-tests" images/tests ) & + + for i in $(jobs -p); do wait "$i"; done +} +readonly -f os::build::images diff --git a/openshift-hack/lib/deps.sh b/openshift-hack/lib/deps.sh new file mode 100644 index 0000000000000..6a9009823de1e --- /dev/null +++ b/openshift-hack/lib/deps.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# os::deps::path_with_shellcheck returns a path that includes shellcheck. +# +# Globals: +# None +# Arguments: +# None +# Returns: +# The path that includes shellcheck. +function os::deps::path_with_shellcheck() { + local path="${PATH}" + if ! which shellcheck &> /dev/null; then + local shellcheck_path="${TMPDIR:-/tmp}/shellcheck" + mkdir -p "${shellcheck_path}" + pushd "${shellcheck_path}" > /dev/null || exit 1 + # This version needs to match that required by + # hack/verify-shellcheck.sh to avoid the use of docker. + local version="v0.7.0" + local tar_file="shellcheck-${version}.linux.x86_64.tar.xz" + curl -LO "https://github.com/koalaman/shellcheck/releases/download/${version}/${tar_file}" + tar xf "${tar_file}" + path="${PATH}:$(pwd)/shellcheck-${version}" + popd > /dev/null || exit 1 + fi + echo "${path}" +} +readonly -f os::deps::path_with_shellcheck diff --git a/openshift-hack/lib/init.sh b/openshift-hack/lib/init.sh new file mode 100755 index 0000000000000..7dc42e3ebc947 --- /dev/null +++ b/openshift-hack/lib/init.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash + +# This script is meant to be the entrypoint for OpenShift Bash scripts to import all of the support +# libraries at once in order to make Bash script preambles as minimal as possible. This script recur- +# sively `source`s *.sh files in this directory tree. As such, no files should be `source`ed outside +# of this script to ensure that we do not attempt to overwrite read-only variables. + +set -o errexit +set -o nounset +set -o pipefail + +OS_SCRIPT_START_TIME="$( date +%s )"; export OS_SCRIPT_START_TIME + +# os::util::absolute_path returns the absolute path to the directory provided +function os::util::absolute_path() { + local relative_path="$1" + local absolute_path + + pushd "${relative_path}" >/dev/null + relative_path="$( pwd )" + if [[ -h "${relative_path}" ]]; then + absolute_path="$( readlink "${relative_path}" )" + else + absolute_path="${relative_path}" + fi + popd >/dev/null + + echo "${absolute_path}" +} +readonly -f os::util::absolute_path + +# find the absolute path to the root of the Origin source tree +init_source="$( dirname "${BASH_SOURCE[0]}" )/../.." +OS_ROOT="$( os::util::absolute_path "${init_source}" )" +export OS_ROOT +cd "${OS_ROOT}" + +for library_file in $( find "${OS_ROOT}/openshift-hack/lib" -type f -name '*.sh' -not -path '*/openshift-hack/lib/init.sh' ); do + source "${library_file}" +done + +unset library_files library_file init_source + +# all of our Bash scripts need to have the stacktrace +# handler installed to deal with errors +os::log::stacktrace::install + +# All of our Bash scripts need to have access to the +# binaries that we build so we don't have to find +# them before every invocation. +os::util::environment::update_path_var + +if [[ -z "${OS_TMP_ENV_SET-}" ]]; then + # if this file is run via 'source', then $0 will be "-bash" and won't work with basename + if [[ "${0}" =~ .*\.sh ]]; then + os::util::environment::setup_tmpdir_vars "$( basename "${0}" ".sh" )" + else + os::util::environment::setup_tmpdir_vars "shell" + fi +fi + +# Allow setting $JUNIT_REPORT to toggle output behavior +if [[ -n "${JUNIT_REPORT:-}" ]]; then + export JUNIT_REPORT_OUTPUT="${LOG_DIR}/raw_test_output.log" +fi diff --git a/openshift-hack/lib/log/output.sh b/openshift-hack/lib/log/output.sh new file mode 100644 index 0000000000000..103fa1ff1bee5 --- /dev/null +++ b/openshift-hack/lib/log/output.sh @@ -0,0 +1,104 @@ +#!/usr/bin/env bash + +# This file contains functions used for writing log messages +# to stdout and stderr from scripts while they run. + +# os::log::info writes the message to stdout. +# +# Arguments: +# - all: message to write +function os::log::info() { + local message; message="$( os::log::internal::prefix_lines "[INFO]" "$*" )" + os::log::internal::to_logfile "${message}" + echo "${message}" +} +readonly -f os::log::info + +# os::log::warning writes the message to stderr. +# A warning indicates something went wrong but +# not so wrong that we cannot recover. +# +# Arguments: +# - all: message to write +function os::log::warning() { + local message; message="$( os::log::internal::prefix_lines "[WARNING]" "$*" )" + os::log::internal::to_logfile "${message}" + os::text::print_yellow "${message}" 1>&2 +} +readonly -f os::log::warning + +# os::log::error writes the message to stderr. +# An error indicates that something went wrong +# and we will most likely fail after this. +# +# Arguments: +# - all: message to write +function os::log::error() { + local message; message="$( os::log::internal::prefix_lines "[ERROR]" "$*" )" + os::log::internal::to_logfile "${message}" + os::text::print_red "${message}" 1>&2 +} +readonly -f os::log::error + +# os::log::fatal writes the message to stderr and +# returns a non-zero code to force a process exit. +# A fatal error indicates that there is no chance +# of recovery. +# +# Arguments: +# - all: message to write +function os::log::fatal() { + local message; message="$( os::log::internal::prefix_lines "[FATAL]" "$*" )" + os::log::internal::to_logfile "${message}" + os::text::print_red "${message}" 1>&2 + exit 1 +} +readonly -f os::log::fatal + +# os::log::debug writes the message to stderr if +# the ${OS_DEBUG} variable is set. +# +# Globals: +# - OS_DEBUG +# Arguments: +# - all: message to write +function os::log::debug() { + local message; message="$( os::log::internal::prefix_lines "[DEBUG]" "$*" )" + os::log::internal::to_logfile "${message}" + if [[ -n "${OS_DEBUG:-}" ]]; then + os::text::print_blue "${message}" 1>&2 + fi +} +readonly -f os::log::debug + +# os::log::internal::to_logfile makes a best-effort +# attempt to write the message to the script logfile +# +# Globals: +# - LOG_DIR +# Arguments: +# - all: message to write +function os::log::internal::to_logfile() { + if [[ -n "${LOG_DIR:-}" && -d "${LOG_DIR-}" ]]; then + echo "$*" >>"${LOG_DIR}/scripts.log" + fi +} + +# os::log::internal::prefix_lines prints out the +# original content with the given prefix at the +# start of every line. +# +# Arguments: +# - 1: prefix for lines +# - 2: content to prefix +function os::log::internal::prefix_lines() { + local prefix="$1" + local content="$2" + + local old_ifs="${IFS}" + IFS=$'\n' + for line in ${content}; do + echo "${prefix} ${line}" + done + IFS="${old_ifs}" +} \ No newline at end of file diff --git a/openshift-hack/lib/log/stacktrace.sh b/openshift-hack/lib/log/stacktrace.sh new file mode 100644 index 0000000000000..e9915efb6342f --- /dev/null +++ b/openshift-hack/lib/log/stacktrace.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +# +# This library contains an implementation of a stack trace for Bash scripts. + +# os::log::stacktrace::install installs the stacktrace as a handler for the ERR signal if one +# has not already been installed and sets `set -o errtrace` in order to propagate the handler +# If the ERR trap is not initialized, installing this plugin will initialize it. +# +# Globals: +# None +# Arguments: +# None +# Returns: +# - export OS_USE_STACKTRACE +function os::log::stacktrace::install() { + # setting 'errtrace' propagates our ERR handler to functions, expansions and subshells + set -o errtrace + + # OS_USE_STACKTRACE is read by os::util::trap at runtime to request a stacktrace + export OS_USE_STACKTRACE=true + + os::util::trap::init_err +} +readonly -f os::log::stacktrace::install + +# os::log::stacktrace::print prints the stacktrace and exits with the return code from the script that +# called for a stack trace. This function will always return 0 if it is not handling the signal, and if it +# is handling the signal, this function will always `exit`, not return, the return code it receives as +# its first argument. +# +# Globals: +# - BASH_SOURCE +# - BASH_LINENO +# - FUNCNAME +# Arguments: +# - 1: the return code of the command in the script that generated the ERR signal +# - 2: the last command that ran before handlers were invoked +# - 3: whether or not `set -o errexit` was set in the script that generated the ERR signal +# Returns: +# None +function os::log::stacktrace::print() { + local return_code=$1 + local last_command=$2 + local errexit_set=${3:-} + + if [[ "${return_code}" = "0" ]]; then + # we're not supposed to respond when no error has occurred + return 0 + fi + + if [[ -z "${errexit_set}" ]]; then + # if errexit wasn't set in the shell when the ERR signal was issued, then we can ignore the signal + # as this is not cause for failure + return 0 + fi + + # dump the entire stack for debugging purposes + os::log::debug "$( os::util::repository_relative_path "${BASH_SOURCE[0]}:${LINENO}: ${BASH_COMMAND}" )" + for (( i = 0; i < ${#BASH_LINENO[@]}; i++ )); do + os::log::debug "$( os::util::repository_relative_path "${BASH_SOURCE[$i+1]:-"$( os::util::repository_relative_path "$0" )"}" ):${BASH_LINENO[$i]}: ${FUNCNAME[$i]}" + done + + # iterate backwards through the stack until we leave library files, so we can be sure we start logging + # actual script code and not this handler's call + local stack_begin_index + for (( stack_begin_index = 0; stack_begin_index < ${#BASH_SOURCE[@]}; stack_begin_index++ )); do + if [[ ! "${BASH_SOURCE[${stack_begin_index}]}" =~ hack/lib/(log/stacktrace|util/trap)\.sh ]]; then + break + fi + done + + local preamble_finished + local stack_index=1 + local i + for (( i = stack_begin_index; i < ${#BASH_SOURCE[@]}; i++ )); do + local bash_source + bash_source="$( os::util::repository_relative_path "${BASH_SOURCE[$i]}" )" + if [[ -z "${preamble_finished:-}" ]]; then + preamble_finished=true + os::log::error "${bash_source}:${BASH_LINENO[$i-1]}: \`${last_command}\` exited with status ${return_code}." >&2 + exit "${return_code}" + fi + stack_index=$(( stack_index + 1 )) + done + + # we know we're the privileged handler in this chain, so we can safely exit the shell without + # starving another handler of the privilege of reacting to this signal + os::log::info " Exiting with code ${return_code}." >&2 + exit "${return_code}" +} +readonly -f os::log::stacktrace::print diff --git a/openshift-hack/lib/test/junit.sh b/openshift-hack/lib/test/junit.sh new file mode 100644 index 0000000000000..18bb3ee857d2c --- /dev/null +++ b/openshift-hack/lib/test/junit.sh @@ -0,0 +1,202 @@ +#!/usr/bin/env bash +# This utility file contains functions that format test output to be parsed into jUnit XML + +# os::test::junit::declare_suite_start prints a message declaring the start of a test suite +# Any number of suites can be in flight at any time, so there is no failure condition for this +# script based on the number of suites in flight. +# +# Globals: +# - JUNIT_REPORT_OUTPUT +# - NUM_OS_JUNIT_SUITES_IN_FLIGHT +# Arguments: +# - 1: the suite name that is starting +# Returns: +# - increment NUM_OS_JUNIT_SUITES_IN_FLIGHT +function os::test::junit::declare_suite_start() { + local suite_name=$1 + local num_suites=${NUM_OS_JUNIT_SUITES_IN_FLIGHT:-0} + + echo "=== BEGIN TEST SUITE github.com/openshift/origin/test/${suite_name} ===" >> "${JUNIT_REPORT_OUTPUT:-/dev/null}" + NUM_OS_JUNIT_SUITES_IN_FLIGHT=$(( num_suites + 1 )) + export NUM_OS_JUNIT_SUITES_IN_FLIGHT +} +readonly -f os::test::junit::declare_suite_start + +# os::test::junit::declare_suite_end prints a message declaring the end of a test suite +# If there aren't any suites in flight, this function will fail. +# +# Globals: +# - JUNIT_REPORT_OUTPUT +# - NUM_OS_JUNIT_SUITES_IN_FLIGHT +# Arguments: +# - 1: the suite name that is starting +# Returns: +# - export/decrement NUM_OS_JUNIT_SUITES_IN_FLIGHT +function os::test::junit::declare_suite_end() { + local num_suites=${NUM_OS_JUNIT_SUITES_IN_FLIGHT:-0} + if [[ "${num_suites}" -lt "1" ]]; then + # we can't end a suite if none have been started yet + echo "[ERROR] jUnit suite marker could not be placed, expected suites in flight, got ${num_suites}" + return 1 + fi + + echo "=== END TEST SUITE ===" >> "${JUNIT_REPORT_OUTPUT:-/dev/null}" + NUM_OS_JUNIT_SUITES_IN_FLIGHT=$(( num_suites - 1 )) + export NUM_OS_JUNIT_SUITES_IN_FLIGHT +} +readonly -f os::test::junit::declare_suite_end + +# os::test::junit::declare_test_start prints a message declaring the start of a test case +# If there is already a test marked as being in flight, this function will fail. +# +# Globals: +# - JUNIT_REPORT_OUTPUT +# - NUM_OS_JUNIT_TESTS_IN_FLIGHT +# Arguments: +# None +# Returns: +# - increment NUM_OS_JUNIT_TESTS_IN_FLIGHT +function os::test::junit::declare_test_start() { + local num_tests=${NUM_OS_JUNIT_TESTS_IN_FLIGHT:-0} + if [[ "${num_tests}" -ne "0" ]]; then + # someone's declaring the starting of a test when a test is already in flight + echo "[ERROR] jUnit test marker could not be placed, expected no tests in flight, got ${num_tests}" + return 1 + fi + + local num_suites=${NUM_OS_JUNIT_SUITES_IN_FLIGHT:-0} + if [[ "${num_suites}" -lt "1" ]]; then + # we can't end a test if no suites are in flight + echo "[ERROR] jUnit test marker could not be placed, expected suites in flight, got ${num_suites}" + return 1 + fi + + echo "=== BEGIN TEST CASE ===" >> "${JUNIT_REPORT_OUTPUT:-/dev/null}" + NUM_OS_JUNIT_TESTS_IN_FLIGHT=$(( num_tests + 1 )) + export NUM_OS_JUNIT_TESTS_IN_FLIGHT +} +readonly -f os::test::junit::declare_test_start + +# os::test::junit::declare_test_end prints a message declaring the end of a test case +# If there is no test marked as being in flight, this function will fail. +# +# Globals: +# - JUNIT_REPORT_OUTPUT +# - NUM_OS_JUNIT_TESTS_IN_FLIGHT +# Arguments: +# None +# Returns: +# - decrement NUM_OS_JUNIT_TESTS_IN_FLIGHT +function os::test::junit::declare_test_end() { + local num_tests=${NUM_OS_JUNIT_TESTS_IN_FLIGHT:-0} + if [[ "${num_tests}" -ne "1" ]]; then + # someone's declaring the end of a test when a test is not in flight + echo "[ERROR] jUnit test marker could not be placed, expected one test in flight, got ${num_tests}" + return 1 + fi + + echo "=== END TEST CASE ===" >> "${JUNIT_REPORT_OUTPUT:-/dev/null}" + NUM_OS_JUNIT_TESTS_IN_FLIGHT=$(( num_tests - 1 )) + export NUM_OS_JUNIT_TESTS_IN_FLIGHT +} +readonly -f os::test::junit::declare_test_end + +# os::test::junit::check_test_counters checks that we do not have any test suites or test cases in flight +# This function should be called at the very end of any test script using jUnit markers to make sure no error in +# marking has occurred. +# +# Globals: +# - NUM_OS_JUNIT_SUITES_IN_FLIGHT +# - NUM_OS_JUNIT_TESTS_IN_FLIGHT +# Arguments: +# None +# Returns: +# None +function os::test::junit::check_test_counters() { + if [[ "${NUM_OS_JUNIT_SUITES_IN_FLIGHT-}" -ne "0" ]]; then + echo "[ERROR] Expected no test suites to be marked as in-flight at the end of testing, got ${NUM_OS_JUNIT_SUITES_IN_FLIGHT-}" + return 1 + elif [[ "${NUM_OS_JUNIT_TESTS_IN_FLIGHT-}" -ne "0" ]]; then + echo "[ERROR] Expected no test cases to be marked as in-flight at the end of testing, got ${NUM_OS_JUNIT_TESTS_IN_FLIGHT-}" + return 1 + fi +} +readonly -f os::test::junit::check_test_counters + +# os::test::junit::reconcile_output appends the necessary suite and test end statements to the jUnit output file +# in order to ensure that the file is in a consistent state to allow for parsing +# +# Globals: +# - NUM_OS_JUNIT_SUITES_IN_FLIGHT +# - NUM_OS_JUNIT_TESTS_IN_FLIGHT +# Arguments: +# None +# Returns: +# None +function os::test::junit::reconcile_output() { + if [[ "${NUM_OS_JUNIT_TESTS_IN_FLIGHT:-0}" = "1" ]]; then + os::test::junit::declare_test_end + fi + + for (( i = 0; i < ${NUM_OS_JUNIT_SUITES_IN_FLIGHT:-0}; i++ )); do + os::test::junit::declare_suite_end + done +} +readonly -f os::test::junit::reconcile_output + +# os::test::junit::generate_report determines which type of report is to +# be generated and does so from the raw output of the tests. +# +# Globals: +# - JUNIT_REPORT_OUTPUT +# - ARTIFACT_DIR +# Arguments: +# None +# Returns: +# None +function os::test::junit::generate_report() { + if [[ -z "${JUNIT_REPORT_OUTPUT:-}" || + -n "${JUNIT_REPORT_OUTPUT:-}" && ! -s "${JUNIT_REPORT_OUTPUT:-}" ]]; then + # we can't generate a report + return 0 + fi + + if grep -q "=== END TEST CASE ===" "${JUNIT_REPORT_OUTPUT}"; then + os::test::junit::reconcile_output + os::test::junit::check_test_counters + os::test::junit::internal::generate_report "oscmd" + fi +} + +# os::test::junit::internal::generate_report generates an XML jUnit +# report for either `os::cmd` or `go test`, based on the passed +# argument. If the `junitreport` binary is not present, it will be built. +# +# Globals: +# - JUNIT_REPORT_OUTPUT +# - ARTIFACT_DIR +# Arguments: +# - 1: specify which type of tests command output should junitreport read +# Returns: +# export JUNIT_REPORT_NUM_FAILED +function os::test::junit::internal::generate_report() { + local report_type="$1" + os::util::ensure::built_binary_exists 'junitreport' + + local report_file + report_file="$( mktemp "${ARTIFACT_DIR}/${report_type}_report_XXXXX" ).xml" + os::log::info "jUnit XML report placed at $( os::util::repository_relative_path "${report_file}" )" + junitreport --type "${report_type}" \ + --suites nested \ + --roots github.com/openshift/origin \ + --output "${report_file}" \ + <"${JUNIT_REPORT_OUTPUT}" + + local summary + summary=$( junitreport summarize <"${report_file}" ) + + JUNIT_REPORT_NUM_FAILED="$( grep -oE "[0-9]+ failed" <<<"${summary}" )" + export JUNIT_REPORT_NUM_FAILED + + echo "${summary}" +} diff --git a/openshift-hack/lib/util/ensure.sh b/openshift-hack/lib/util/ensure.sh new file mode 100644 index 0000000000000..158d94f984f01 --- /dev/null +++ b/openshift-hack/lib/util/ensure.sh @@ -0,0 +1,116 @@ +#!/usr/bin/env bash + +# This script contains helper functions for ensuring that dependencies +# exist on a host system that are required to run Origin scripts. + +# os::util::ensure::system_binary_exists ensures that the +# given binary exists on the system in the $PATH. +# +# Globals: +# None +# Arguments: +# - 1: binary to search for +# Returns: +# None +function os::util::ensure::system_binary_exists() { + local binary="$1" + +if ! os::util::find::system_binary "${binary}" >/dev/null 2>&1; then + os::log::fatal "Required \`${binary}\` binary was not found in \$PATH." + fi +} +readonly -f os::util::ensure::system_binary_exists + +# os::util::ensure::built_binary_exists ensures that the +# given binary exists on the system in the local output +# directory for the current platform. If it doesn't, we +# will attempt to build it if we can determine the correct +# hack/build-go.sh target for the binary. +# +# This function will attempt to determine the correct +# hack/build-go.sh target for the binary, but may not +# be able to do so if the target doesn't live under +# cmd/ or tools/. In that case, one should be given. +# +# Globals: +# - OS_ROOT +# Arguments: +# - 1: binary to search for +# - 2: optional build target for this binary +# Returns: +# None +function os::util::ensure::built_binary_exists() { + local binary="$1" + local target="${2:-}" + + if ! os::util::find::built_binary "${binary}" >/dev/null 2>&1; then + if [[ -z "${target}" ]]; then + if [[ -d "${OS_ROOT}/cmd/${binary}" ]]; then + target="cmd/${binary}" + elif [[ -d "${OS_ROOT}/tools/${binary}" ]]; then + target="tools/${binary}" + elif [[ -d "${OS_ROOT}/openshift-hack/${binary}" ]]; then + target="openshift-hack/${binary}" + fi + fi + + if [[ -n "${target}" ]]; then + os::log::info "No compiled \`${binary}\` binary was found. Attempting to build one using: + $ hack/build-go.sh ${target}" + "${OS_ROOT}/hack/build-go.sh" "${target}" + else + os::log::fatal "No compiled \`${binary}\` binary was found and no build target could be determined. +Provide the binary and try running $0 again." + fi + fi +} +readonly -f os::util::ensure::built_binary_exists + +# os::util::ensure::gopath_binary_exists ensures that the +# given binary exists on the system in $GOPATH. If it +# doesn't, we will attempt to build it if we can determine +# the correct install path for the binary. +# +# Globals: +# - GOPATH +# Arguments: +# - 1: binary to search for +# - 2: [optional] path to install from +# Returns: +# None +function os::util::ensure::gopath_binary_exists() { + local binary="$1" + local install_path="${2:-}" + + if ! os::util::find::gopath_binary "${binary}" >/dev/null 2>&1; then + if [[ -n "${install_path:-}" ]]; then + os::log::info "No installed \`${binary}\` was found in \$GOPATH. Attempting to install using: + $ go get ${install_path}" + go get "${install_path}" + else + os::log::fatal "Required \`${binary}\` binary was not found in \$GOPATH." + fi + fi +} +readonly -f os::util::ensure::gopath_binary_exists + +# os::util::ensure::iptables_privileges_exist tests if the +# testing machine has iptables available and in PATH. Also +# tests that the user can list iptables rules, trying with +# `sudo` if it fails without. +# +# Globals: +# None +# Arguments: +# None +# Returns: +# None +function os::util::ensure::iptables_privileges_exist() { + os::util::ensure::system_binary_exists 'iptables' + + if ! iptables --list >/dev/null 2>&1 && ! sudo iptables --list >/dev/null 2>&1; then + os::log::fatal "You do not have \`iptables\` or \`sudo\` privileges. Kubernetes services will not work +without \`iptables\` access. See https://github.com/kubernetes/kubernetes/issues/1859." + fi +} +readonly -f os::util::ensure::iptables_privileges_exist diff --git a/openshift-hack/lib/util/environment.sh b/openshift-hack/lib/util/environment.sh new file mode 100644 index 0000000000000..1b0d55c7c471a --- /dev/null +++ b/openshift-hack/lib/util/environment.sh @@ -0,0 +1,296 @@ +#!/usr/bin/env bash + +# This script holds library functions for setting up the shell environment for OpenShift scripts + +# os::util::environment::use_sudo updates $USE_SUDO to be 'true', so that later scripts choosing between +# execution using 'sudo' and execution without it chose to use 'sudo' +# +# Globals: +# None +# Arguments: +# None +# Returns: +# - export USE_SUDO +function os::util::environment::use_sudo() { + USE_SUDO=true + export USE_SUDO +} +readonly -f os::util::environment::use_sudo + +# os::util::environment::setup_time_vars sets up environment variables that describe durations of time +# These variables can be used to specify times for other utility functions +# +# Globals: +# None +# Arguments: +# None +# Returns: +# - export TIME_MS +# - export TIME_SEC +# - export TIME_MIN +function os::util::environment::setup_time_vars() { + TIME_MS=1 + export TIME_MS + TIME_SEC="$(( 1000 * TIME_MS ))" + export TIME_SEC + TIME_MIN="$(( 60 * TIME_SEC ))" + export TIME_MIN +} +readonly -f os::util::environment::setup_time_vars + +# os::util::environment::setup_all_server_vars sets up all environment variables necessary to configure and start an OpenShift server +# +# Globals: +# - OS_ROOT +# - PATH +# - TMPDIR +# - LOG_DIR +# - ARTIFACT_DIR +# - KUBELET_SCHEME +# - KUBELET_BIND_HOST +# - KUBELET_HOST +# - KUBELET_PORT +# - BASETMPDIR +# - ETCD_PORT +# - ETCD_PEER_PORT +# - API_BIND_HOST +# - API_HOST +# - API_PORT +# - API_SCHEME +# - PUBLIC_MASTER_HOST +# - USE_IMAGES +# Arguments: +# - 1: the path under the root temporary directory for OpenShift where these subdirectories should be made +# Returns: +# - export PATH +# - export BASETMPDIR +# - export LOG_DIR +# - export VOLUME_DIR +# - export ARTIFACT_DIR +# - export FAKE_HOME_DIR +# - export KUBELET_SCHEME +# - export KUBELET_BIND_HOST +# - export KUBELET_HOST +# - export KUBELET_PORT +# - export ETCD_PORT +# - export ETCD_PEER_PORT +# - export ETCD_DATA_DIR +# - export API_BIND_HOST +# - export API_HOST +# - export API_PORT +# - export API_SCHEME +# - export SERVER_CONFIG_DIR +# - export MASTER_CONFIG_DIR +# - export NODE_CONFIG_DIR +# - export USE_IMAGES +# - export TAG +function os::util::environment::setup_all_server_vars() { + os::util::environment::setup_kubelet_vars + os::util::environment::setup_etcd_vars + os::util::environment::setup_server_vars + os::util::environment::setup_images_vars +} +readonly -f os::util::environment::setup_all_server_vars + +# os::util::environment::update_path_var updates $PATH so that OpenShift binaries are available +# +# Globals: +# - OS_ROOT +# - PATH +# Arguments: +# None +# Returns: +# - export PATH +function os::util::environment::update_path_var() { + local prefix + if os::util::find::system_binary 'go' >/dev/null 2>&1; then + prefix+="${OS_OUTPUT_BINPATH}/$(os::build::host_platform):" + fi + if [[ -n "${GOPATH:-}" ]]; then + prefix+="${GOPATH}/bin:" + fi + + PATH="${prefix:-}${PATH}" + export PATH +} +readonly -f os::util::environment::update_path_var + +# os::util::environment::setup_tmpdir_vars sets up temporary directory path variables +# +# Globals: +# - TMPDIR +# Arguments: +# - 1: the path under the root temporary directory for OpenShift where these subdirectories should be made +# Returns: +# - export BASETMPDIR +# - export BASEOUTDIR +# - export LOG_DIR +# - export VOLUME_DIR +# - export ARTIFACT_DIR +# - export FAKE_HOME_DIR +# - export OS_TMP_ENV_SET +function os::util::environment::setup_tmpdir_vars() { + local sub_dir=$1 + + BASETMPDIR="${TMPDIR:-/tmp}/openshift/${sub_dir}" + export BASETMPDIR + VOLUME_DIR="${BASETMPDIR}/volumes" + export VOLUME_DIR + + BASEOUTDIR="${OS_OUTPUT_SCRIPTPATH}/${sub_dir}" + export BASEOUTDIR + LOG_DIR="${ARTIFACT_DIR:-${BASEOUTDIR}}/logs" + export LOG_DIR + ARTIFACT_DIR="${ARTIFACT_DIR:-${BASEOUTDIR}/artifacts}" + export ARTIFACT_DIR + FAKE_HOME_DIR="${BASEOUTDIR}/openshift.local.home" + export FAKE_HOME_DIR + + mkdir -p "${LOG_DIR}" "${VOLUME_DIR}" "${ARTIFACT_DIR}" "${FAKE_HOME_DIR}" + + export OS_TMP_ENV_SET="${sub_dir}" +} +readonly -f os::util::environment::setup_tmpdir_vars + +# os::util::environment::setup_kubelet_vars sets up environment variables necessary for interacting with the kubelet +# +# Globals: +# - KUBELET_SCHEME +# - KUBELET_BIND_HOST +# - KUBELET_HOST +# - KUBELET_PORT +# Arguments: +# None +# Returns: +# - export KUBELET_SCHEME +# - export KUBELET_BIND_HOST +# - export KUBELET_HOST +# - export KUBELET_PORT +function os::util::environment::setup_kubelet_vars() { + KUBELET_SCHEME="${KUBELET_SCHEME:-https}" + export KUBELET_SCHEME + KUBELET_BIND_HOST="${KUBELET_BIND_HOST:-127.0.0.1}" + export KUBELET_BIND_HOST + KUBELET_HOST="${KUBELET_HOST:-${KUBELET_BIND_HOST}}" + export KUBELET_HOST + KUBELET_PORT="${KUBELET_PORT:-10250}" + export KUBELET_PORT +} +readonly -f os::util::environment::setup_kubelet_vars + +# os::util::environment::setup_etcd_vars sets up environment variables necessary for interacting with etcd +# +# Globals: +# - BASETMPDIR +# - ETCD_HOST +# - ETCD_PORT +# - ETCD_PEER_PORT +# Arguments: +# None +# Returns: +# - export ETCD_HOST +# - export ETCD_PORT +# - export ETCD_PEER_PORT +# - export ETCD_DATA_DIR +function os::util::environment::setup_etcd_vars() { + ETCD_HOST="${ETCD_HOST:-127.0.0.1}" + export ETCD_HOST + ETCD_PORT="${ETCD_PORT:-4001}" + export ETCD_PORT + ETCD_PEER_PORT="${ETCD_PEER_PORT:-7001}" + export ETCD_PEER_PORT + + ETCD_DATA_DIR="${BASETMPDIR}/etcd" + export ETCD_DATA_DIR + + mkdir -p "${ETCD_DATA_DIR}" +} +readonly -f os::util::environment::setup_etcd_vars + +# os::util::environment::setup_server_vars sets up environment variables necessary for interacting with the server +# +# Globals: +# - BASETMPDIR +# - KUBELET_HOST +# - API_BIND_HOST +# - API_HOST +# - API_PORT +# - API_SCHEME +# - PUBLIC_MASTER_HOST +# Arguments: +# None +# Returns: +# - export API_BIND_HOST +# - export API_HOST +# - export API_PORT +# - export API_SCHEME +# - export SERVER_CONFIG_DIR +# - export MASTER_CONFIG_DIR +# - export NODE_CONFIG_DIR +function os::util::environment::setup_server_vars() { + # turn on cache mutation detector every time we start a server + KUBE_CACHE_MUTATION_DETECTOR="${KUBE_CACHE_MUTATION_DETECTOR:-true}" + export KUBE_CACHE_MUTATION_DETECTOR + + API_BIND_HOST="${API_BIND_HOST:-127.0.0.1}" + export API_BIND_HOST + API_HOST="${API_HOST:-${API_BIND_HOST}}" + export API_HOST + API_PORT="${API_PORT:-8443}" + export API_PORT + API_SCHEME="${API_SCHEME:-https}" + export API_SCHEME + + MASTER_ADDR="${API_SCHEME}://${API_HOST}:${API_PORT}" + export MASTER_ADDR + PUBLIC_MASTER_HOST="${PUBLIC_MASTER_HOST:-${API_HOST}}" + export PUBLIC_MASTER_HOST + + SERVER_CONFIG_DIR="${BASETMPDIR}/openshift.local.config" + export SERVER_CONFIG_DIR + MASTER_CONFIG_DIR="${SERVER_CONFIG_DIR}/master" + export MASTER_CONFIG_DIR + NODE_CONFIG_DIR="${SERVER_CONFIG_DIR}/node-${KUBELET_HOST}" + export NODE_CONFIG_DIR + + ETCD_CLIENT_CERT="${MASTER_CONFIG_DIR}/master.etcd-client.crt" + export ETCD_CLIENT_CERT + ETCD_CLIENT_KEY="${MASTER_CONFIG_DIR}/master.etcd-client.key" + export ETCD_CLIENT_KEY + ETCD_CA_BUNDLE="${MASTER_CONFIG_DIR}/ca-bundle.crt" + export ETCD_CA_BUNDLE + + mkdir -p "${SERVER_CONFIG_DIR}" "${MASTER_CONFIG_DIR}" "${NODE_CONFIG_DIR}" +} +readonly -f os::util::environment::setup_server_vars + +# os::util::environment::setup_images_vars sets up environment variables necessary for interacting with release images +# +# Globals: +# - OS_ROOT +# - USE_IMAGES +# Arguments: +# None +# Returns: +# - export USE_IMAGES +# - export TAG +# - export MAX_IMAGES_BULK_IMPORTED_PER_REPOSITORY +function os::util::environment::setup_images_vars() { + # Use either the latest release built images, or latest. + IMAGE_PREFIX="${OS_IMAGE_PREFIX:-"openshift/origin"}" + if [[ -z "${USE_IMAGES-}" ]]; then + TAG='latest' + export TAG + USE_IMAGES="${IMAGE_PREFIX}-\${component}:latest" + export USE_IMAGES + + if [[ -e "${OS_ROOT}/_output/local/releases/.commit" ]]; then + TAG="$(cat "${OS_ROOT}/_output/local/releases/.commit")" + export TAG + USE_IMAGES="${IMAGE_PREFIX}-\${component}:${TAG}" + export USE_IMAGES + fi + fi + export MAX_IMAGES_BULK_IMPORTED_PER_REPOSITORY="${MAX_IMAGES_BULK_IMPORTED_PER_REPOSITORY:-3}" +} +readonly -f os::util::environment::setup_images_vars diff --git a/openshift-hack/lib/util/find.sh b/openshift-hack/lib/util/find.sh new file mode 100644 index 0000000000000..4ca12d040f9b3 --- /dev/null +++ b/openshift-hack/lib/util/find.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash + +# This script contains helper functions for finding components +# in the Origin repository or on the host machine running scripts. + +# os::util::find::system_binary determines the absolute path to a +# system binary, if it exists. +# +# Globals: +# None +# Arguments: +# - 1: binary name +# Returns: +# - location of the binary +function os::util::find::system_binary() { + local binary_name="$1" + + command -v "${binary_name}" +} +readonly -f os::util::find::system_binary + +# os::util::find::built_binary determines the absolute path to a +# built binary for the current platform, if it exists. +# +# Globals: +# - OS_OUTPUT_BINPATH +# Arguments: +# - 1: binary name +# Returns: +# - location of the binary +function os::util::find::built_binary() { + local binary_name="$1" + + local binary_path; binary_path="${OS_OUTPUT_BINPATH}/$( os::build::host_platform )/${binary_name}" + # we need to check that the path leads to a file + # as directories also have the executable bit set + if [[ -f "${binary_path}" && -x "${binary_path}" ]]; then + echo "${binary_path}" + return 0 + else + return 1 + fi +} +readonly -f os::util::find::built_binary + +# os::util::find::gopath_binary determines the absolute path to a +# binary installed through the go toolchain, if it exists. +# +# Globals: +# - GOPATH +# Arguments: +# - 1: binary name +# Returns: +# - location of the binary +function os::util::find::gopath_binary() { + local binary_name="$1" + + local old_ifs="${IFS}" + IFS=":" + for part in ${GOPATH}; do + local binary_path="${part}/bin/${binary_name}" + # we need to check that the path leads to a file + # as directories also have the executable bit set + if [[ -f "${binary_path}" && -x "${binary_path}" ]]; then + echo "${binary_path}" + IFS="${old_ifs}" + return 0 + fi + done + IFS="${old_ifs}" + return 1 +} +readonly -f os::util::find::gopath_binary \ No newline at end of file diff --git a/openshift-hack/lib/util/misc.sh b/openshift-hack/lib/util/misc.sh new file mode 100644 index 0000000000000..69ea27dc43e2a --- /dev/null +++ b/openshift-hack/lib/util/misc.sh @@ -0,0 +1,224 @@ +#!/usr/bin/env bash +# +# This library holds miscellaneous utility functions. If there begin to be groups of functions in this +# file that share intent or are thematically similar, they should be split into their own files. + +# os::util::describe_return_code describes an exit code +# +# Globals: +# - OS_SCRIPT_START_TIME +# Arguments: +# - 1: exit code to describe +# Returns: +# None +function os::util::describe_return_code() { + local return_code=$1 + local message + message="$( os::util::repository_relative_path "$0" ) exited with code ${return_code} " + + if [[ -n "${OS_SCRIPT_START_TIME:-}" ]]; then + local end_time + end_time="$(date +%s)" + local elapsed_time + elapsed_time="$(( end_time - OS_SCRIPT_START_TIME ))" + local formatted_time + formatted_time="$( os::util::format_seconds "${elapsed_time}" )" + message+="after ${formatted_time}" + fi + + if [[ "${return_code}" = "0" ]]; then + os::log::info "${message}" + else + os::log::error "${message}" + fi +} +readonly -f os::util::describe_return_code + +# os::util::install_describe_return_code installs the return code describer for the EXIT trap +# If the EXIT trap is not initialized, installing this plugin will initialize it. +# +# Globals: +# None +# Arguments: +# None +# Returns: +# - export OS_DESCRIBE_RETURN_CODE +# - export OS_SCRIPT_START_TIME +function os::util::install_describe_return_code() { + export OS_DESCRIBE_RETURN_CODE="true" + OS_SCRIPT_START_TIME="$( date +%s )"; export OS_SCRIPT_START_TIME + os::util::trap::init_exit +} +readonly -f os::util::install_describe_return_code + +# OS_ORIGINAL_WD is the original working directory the script sourcing this utility file was called +# from. This is an important directory as if $0 is a relative path, we cannot use the following path +# utility without knowing from where $0 is relative. +if [[ -z "${OS_ORIGINAL_WD:-}" ]]; then + # since this could be sourced in a context where the utilities are already loaded, + # we want to ensure that this is re-entrant, so we only set $OS_ORIGINAL_WD if it + # is not set already + OS_ORIGINAL_WD="$( pwd )" + readonly OS_ORIGINAL_WD + export OS_ORIGINAL_WD +fi + +# os::util::repository_relative_path returns the relative path from the $OS_ROOT directory to the +# given file, if the file is inside of the $OS_ROOT directory. If the file is outside of $OS_ROOT, +# this function will return the absolute path to the file +# +# Globals: +# - OS_ROOT +# Arguments: +# - 1: the path to relativize +# Returns: +# None +function os::util::repository_relative_path() { + local filename=$1 + local directory; directory="$( dirname "${filename}" )" + filename="$( basename "${filename}" )" + + if [[ "${directory}" != "${OS_ROOT}"* ]]; then + pushd "${OS_ORIGINAL_WD}" >/dev/null 2>&1 || exit 1 + directory="$( os::util::absolute_path "${directory}" )" + popd >/dev/null 2>&1 || exit 1 + fi + + directory="${directory##*${OS_ROOT}/}" + + echo "${directory}/${filename}" +} +readonly -f os::util::repository_relative_path + +# os::util::format_seconds formats a duration of time in seconds to print in HHh MMm SSs +# +# Globals: +# None +# Arguments: +# - 1: time in seconds to format +# Return: +# None +function os::util::format_seconds() { + local raw_seconds=$1 + + local hours minutes seconds + (( hours=raw_seconds/3600 )) + (( minutes=(raw_seconds%3600)/60 )) + (( seconds=raw_seconds%60 )) + + printf '%02dh %02dm %02ds' "${hours}" "${minutes}" "${seconds}" +} +readonly -f os::util::format_seconds + +# os::util::sed attempts to make our Bash scripts agnostic to the platform +# on which they run `sed` by glossing over a discrepancy in flag use in GNU. +# +# Globals: +# None +# Arguments: +# - all: arguments to pass to `sed -i` +# Return: +# None +function os::util::sed() { + local sudo="${USE_SUDO:+sudo}" + if LANG=C sed --help 2>&1 | grep -q "GNU sed"; then + ${sudo} sed -i'' "$@" + else + ${sudo} sed -i '' "$@" + fi +} +readonly -f os::util::sed + +# os::util::base64decode attempts to make our Bash scripts agnostic to the platform +# on which they run `base64decode` by glossing over a discrepancy in flag use in GNU. +# +# Globals: +# None +# Arguments: +# - all: arguments to pass to `base64decode` +# Return: +# None +function os::util::base64decode() { + if [[ "$(go env GOHOSTOS)" == "darwin" ]]; then + base64 -D "$@" + else + base64 -d "$@" + fi +} +readonly -f os::util::base64decode + +# os::util::curl_etcd sends a request to the backing etcd store for the master. +# We use the administrative client cert and key for access and re-encode them +# as necessary for OSX clients. +# +# Globals: +# MASTER_CONFIG_DIR +# API_SCHEME +# API_HOST +# ETCD_PORT +# Arguments: +# - 1: etcd-relative URL to curl, with leading slash +# Returns: +# None +function os::util::curl_etcd() { + local url="$1" + local full_url="${API_SCHEME}://${API_HOST}:${ETCD_PORT}${url}" + + local etcd_client_cert="${MASTER_CONFIG_DIR}/master.etcd-client.crt" + local etcd_client_key="${MASTER_CONFIG_DIR}/master.etcd-client.key" + local ca_bundle="${MASTER_CONFIG_DIR}/ca-bundle.crt" + + if curl -V | grep -q 'SecureTransport'; then + # on newer OSX `curl` implementations, SSL is not used and client certs + # and keys are expected to be encoded in P12 format instead of PEM format, + # so we need to convert the secrets that the server wrote if we haven't + # already done so + local etcd_client_cert_p12="${MASTER_CONFIG_DIR}/master.etcd-client.crt.p12" + local etcd_client_cert_p12_password="${CURL_CERT_P12_PASSWORD:-'password'}" + if [[ ! -f "${etcd_client_cert_p12}" ]]; then + openssl pkcs12 -export \ + -in "${etcd_client_cert}" \ + -inkey "${etcd_client_key}" \ + -out "${etcd_client_cert_p12}" \ + -password "pass:${etcd_client_cert_p12_password}" + fi + + curl --fail --silent --cacert "${ca_bundle}" \ + --cert "${etcd_client_cert_p12}:${etcd_client_cert_p12_password}" "${full_url}" + else + curl --fail --silent --cacert "${ca_bundle}" \ + --cert "${etcd_client_cert}" --key "${etcd_client_key}" "${full_url}" + fi +} + +# os::util::ensure_tmpfs ensures that the target dir is mounted on tmpfs +# +# Globals: +# OS_TMPFS_REQUIRED +# Arguments: +# - 1: target to check +# Returns: +# None +function os::util::ensure_tmpfs() { + if [[ -z "${OS_TMPFS_REQUIRED:-}" ]]; then + return 0 + fi + + local target="$1" + if [[ ! -d "${target}" ]]; then + os::log::fatal "Target dir ${target} does not exist, cannot perform fstype check." + fi + + os::log::debug "Filesystem information: +$( df -h -T )" + + os::log::debug "Mount information: +$( findmnt --all )" + + local fstype + fstype="$( df --output=fstype "${target}" | tail -n 1 )" + if [[ "${fstype}" != "tmpfs" ]]; then + local message="Expected \`${target}\` to be mounted on \`tmpfs\` but found \`${fstype}\` instead." + os::log::fatal "${message}" + fi +} diff --git a/openshift-hack/lib/util/text.sh b/openshift-hack/lib/util/text.sh new file mode 100644 index 0000000000000..708a47251cb20 --- /dev/null +++ b/openshift-hack/lib/util/text.sh @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +# This file contains helpful aliases for manipulating the output text to the terminal as +# well as functions for one-command augmented printing. + +# os::text::reset resets the terminal output to default if it is called in a TTY +function os::text::reset() { + if os::text::internal::is_tty; then + tput sgr0 + fi +} +readonly -f os::text::reset + +# os::text::bold sets the terminal output to bold text if it is called in a TTY +function os::text::bold() { + if os::text::internal::is_tty; then + tput bold + fi +} +readonly -f os::text::bold + +# os::text::red sets the terminal output to red text if it is called in a TTY +function os::text::red() { + if os::text::internal::is_tty; then + tput setaf 1 + fi +} +readonly -f os::text::red + +# os::text::green sets the terminal output to green text if it is called in a TTY +function os::text::green() { + if os::text::internal::is_tty; then + tput setaf 2 + fi +} +readonly -f os::text::green + +# os::text::blue sets the terminal output to blue text if it is called in a TTY +function os::text::blue() { + if os::text::internal::is_tty; then + tput setaf 4 + fi +} +readonly -f os::text::blue + +# os::text::yellow sets the terminal output to yellow text if it is called in a TTY +function os::text::yellow() { + if os::text::internal::is_tty; then + tput setaf 11 + fi +} +readonly -f os::text::yellow + +# os::text::clear_last_line clears the text from the last line of output to the +# terminal and leaves the cursor on that line to allow for overwriting that text +# if it is called in a TTY +function os::text::clear_last_line() { + if os::text::internal::is_tty; then + tput cuu 1 + tput el + fi +} +readonly -f os::text::clear_last_line + +# os::text::clear_string attempts to clear the entirety of a string from the terminal. +# If the string contains literal tabs or other characters that take up more than one +# character space in output, or if the window size is changed before this function +# is called, it will not function correctly. +# No action is taken if this is called outside of a TTY +function os::text::clear_string() { + local -r string="$1" + if os::text::internal::is_tty; then + echo "${string}" | while read -r line; do + # num_lines is the number of terminal lines this one line of output + # would have taken up with the current terminal width in columns + local num_lines=$(( ${#line} / $( tput cols ) )) + for (( i = 0; i <= num_lines; i++ )); do + os::text::clear_last_line + done + done + fi +} + +# os::text::internal::is_tty determines if we are outputting to a TTY +function os::text::internal::is_tty() { + [[ -t 1 && -n "${TERM:-}" ]] +} +readonly -f os::text::internal::is_tty + +# os::text::print_bold prints all input in bold text +function os::text::print_bold() { + os::text::bold + echo "${*}" + os::text::reset +} +readonly -f os::text::print_bold + +# os::text::print_red prints all input in red text +function os::text::print_red() { + os::text::red + echo "${*}" + os::text::reset +} +readonly -f os::text::print_red + +# os::text::print_red_bold prints all input in bold red text +function os::text::print_red_bold() { + os::text::red + os::text::bold + echo "${*}" + os::text::reset +} +readonly -f os::text::print_red_bold + +# os::text::print_green prints all input in green text +function os::text::print_green() { + os::text::green + echo "${*}" + os::text::reset +} +readonly -f os::text::print_green + +# os::text::print_green_bold prints all input in bold green text +function os::text::print_green_bold() { + os::text::green + os::text::bold + echo "${*}" + os::text::reset +} +readonly -f os::text::print_green_bold + +# os::text::print_blue prints all input in blue text +function os::text::print_blue() { + os::text::blue + echo "${*}" + os::text::reset +} +readonly -f os::text::print_blue + +# os::text::print_blue_bold prints all input in bold blue text +function os::text::print_blue_bold() { + os::text::blue + os::text::bold + echo "${*}" + os::text::reset +} +readonly -f os::text::print_blue_bold + +# os::text::print_yellow prints all input in yellow text +function os::text::print_yellow() { + os::text::yellow + echo "${*}" + os::text::reset +} +readonly -f os::text::print_yellow + +# os::text::print_yellow_bold prints all input in bold yellow text +function os::text::print_yellow_bold() { + os::text::yellow + os::text::bold + echo "${*}" + os::text::reset +} +readonly -f os::text::print_yellow_bold diff --git a/openshift-hack/lib/util/trap.sh b/openshift-hack/lib/util/trap.sh new file mode 100644 index 0000000000000..f76d6bfe404d5 --- /dev/null +++ b/openshift-hack/lib/util/trap.sh @@ -0,0 +1,99 @@ +#!/usr/bin/env bash +# +# This library defines the trap handlers for the ERR and EXIT signals. Any new handler for these signals +# must be added to these handlers and activated by the environment variable mechanism that the rest use. +# These functions ensure that no handler can ever alter the exit code that was emitted by a command +# in a test script. + +# os::util::trap::init_err initializes the privileged handler for the ERR signal if it hasn't +# been registered already. This will overwrite any other handlers registered on the signal. +# +# Globals: +# None +# Arguments: +# None +# Returns: +# None +function os::util::trap::init_err() { + if ! trap -p ERR | grep -q 'os::util::trap::err_handler'; then + trap 'os::util::trap::err_handler;' ERR + fi +} +readonly -f os::util::trap::init_err + +# os::util::trap::init_exit initializes the privileged handler for the EXIT signal if it hasn't +# been registered already. This will overwrite any other handlers registered on the signal. +# +# Globals: +# None +# Arguments: +# None +# Returns: +# None +function os::util::trap::init_exit() { + if ! trap -p EXIT | grep -q 'os::util::trap::exit_handler'; then + trap 'os::util::trap::exit_handler;' EXIT + fi +} +readonly -f os::util::trap::init_exit + +# os::util::trap::err_handler is the handler for the ERR signal. +# +# Globals: +# - OS_TRAP_DEBUG +# - OS_USE_STACKTRACE +# Arguments: +# None +# Returns: +# - returns original return code, allows privileged handler to exit if necessary +function os::util::trap::err_handler() { + local -r return_code=$? + local -r last_command="${BASH_COMMAND}" + + if set +o | grep -q '\-o errexit'; then + local -r errexit_set=true + fi + + if [[ "${OS_TRAP_DEBUG:-}" = "true" ]]; then + echo "[DEBUG] Error handler executing with return code \`${return_code}\`, last command \`${last_command}\`, and errexit set \`${errexit_set:-}\`" + fi + + if [[ "${OS_USE_STACKTRACE:-}" = "true" ]]; then + # the OpenShift stacktrace function is treated as a privileged handler for this signal + # and is therefore allowed to run outside of a subshell in order to allow it to `exit` + # if necessary + os::log::stacktrace::print "${return_code}" "${last_command}" "${errexit_set:-}" + fi + + return "${return_code}" +} +readonly -f os::util::trap::err_handler + +# os::util::trap::exit_handler is the handler for the EXIT signal. +# +# Globals: +# - OS_TRAP_DEBUG +# - OS_DESCRIBE_RETURN_CODE +# Arguments: +# None +# Returns: +# - original exit code of the script that exited +function os::util::trap::exit_handler() { + local -r return_code=$? + + # we do not want these traps to be able to trigger more errors, we can let them fail silently + set +o errexit + + if [[ "${OS_TRAP_DEBUG:-}" = "true" ]]; then + echo "[DEBUG] Exit handler executing with return code \`${return_code}\`" + fi + + # the following envars selectively enable optional exit traps, all of which are run inside of + # a subshell in order to sandbox them and not allow them to influence how this script will exit + if [[ "${OS_DESCRIBE_RETURN_CODE:-}" = "true" ]]; then + ( os::util::describe_return_code "${return_code}" ) + fi + + exit "${return_code}" +} +readonly -f os::util::trap::exit_handler diff --git a/openshift-hack/test-go.sh b/openshift-hack/test-go.sh new file mode 100755 index 0000000000000..30793e2b082df --- /dev/null +++ b/openshift-hack/test-go.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +# shellcheck source=openshift-hack/lib/init.sh +source "$(dirname "${BASH_SOURCE[0]}")/lib/init.sh" + +ARTIFACTS="${ARTIFACTS:-/tmp/artifacts}" +mkdir -p "${ARTIFACTS}" + +export KUBERNETES_SERVICE_HOST= +export KUBE_JUNIT_REPORT_DIR="${ARTIFACTS}" +export KUBE_KEEP_VERBOSE_TEST_OUTPUT=y +export KUBE_RACE=-race +export KUBE_TEST_ARGS='-p 8' +export KUBE_TIMEOUT='--timeout=360s' + +make test diff --git a/openshift-hack/test-integration.sh b/openshift-hack/test-integration.sh new file mode 100755 index 0000000000000..93c3ea902b099 --- /dev/null +++ b/openshift-hack/test-integration.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +# shellcheck source=openshift-hack/lib/init.sh +source "$(dirname "${BASH_SOURCE[0]}")/lib/init.sh" + +./hack/install-etcd.sh +PATH="${OS_ROOT}/third_party/etcd:${PATH}" + +ARTIFACTS="${ARTIFACTS:-/tmp/artifacts}" +mkdir -p "${ARTIFACTS}" + +export KUBERNETES_SERVICE_HOST= +export KUBE_JUNIT_REPORT_DIR="${ARTIFACTS}" +export KUBE_KEEP_VERBOSE_TEST_OUTPUT=y +export KUBE_RACE=-race +export KUBE_TEST_ARGS='-p 8' +export LOG_LEVEL=4 +export PATH + +make test-integration diff --git a/openshift-hack/test-kubernetes-e2e.sh b/openshift-hack/test-kubernetes-e2e.sh new file mode 100755 index 0000000000000..7b2937db2c5a0 --- /dev/null +++ b/openshift-hack/test-kubernetes-e2e.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +set -o nounset +set -o errexit +set -o pipefail + +# This script is executes kubernetes e2e tests against an openshift +# cluster. It is intended to be copied to the kubernetes-tests image +# for use in CI and should have no dependencies beyond oc, kubectl and +# k8s-e2e.test. + +# Identify the platform under test to allow skipping tests that are +# not compatible. +CLUSTER_TYPE="${CLUSTER_TYPE:-gcp}" +case "${CLUSTER_TYPE}" in + gcp) + # gce is used as a platform label instead of gcp + PLATFORM=gce + ;; + *) + PLATFORM="${CLUSTER_TYPE}" + ;; +esac + +# Support serial and parallel test suites +TEST_SUITE="${TEST_SUITE:-parallel}" +COMMON_SKIPS="\[Slow\]|\[Disruptive\]|\[Flaky\]|\[Disabled:.+\]|\[Skipped:${PLATFORM}\]" +case "${TEST_SUITE}" in +serial) + DEFAULT_TEST_ARGS="-focus=\[Serial\] -skip=${COMMON_SKIPS}" + NODES=1 + ;; +parallel) + DEFAULT_TEST_ARGS="-skip=\[Serial\]|${COMMON_SKIPS}" + # Use the same number of nodes - 30 - as specified for the parallel + # suite defined in origin. + NODES=30 + ;; +*) + echo >&2 "Unsupported test suite '${TEST_SUITE}'" + exit 1 + ;; +esac + +# Set KUBE_E2E_TEST_ARGS to configure test arguments like +# -skip and -focus. +KUBE_E2E_TEST_ARGS="${KUBE_E2E_TEST_ARGS:-${DEFAULT_TEST_ARGS}}" + +# k8s-e2e.test and ginkgo are expected to be in the path in +# CI. Outside of CI, ensure k8s-e2e.test and ginkgo are built and +# available in PATH. +if ! which k8s-e2e.test &> /dev/null; then + make WHAT=vendor/github.com/onsi/ginkgo/ginkgo + make WHAT=openshift-hack/e2e/k8s-e2e.test + ROOT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/.."; pwd -P)" + PATH="${ROOT_PATH}/_output/local/bin/$(go env GOHOSTOS)/$(go env GOARCH):${PATH}" + export PATH +fi + +# Execute OpenShift prerequisites +# Disable container security +oc adm policy add-scc-to-group privileged system:authenticated system:serviceaccounts +oc adm policy add-scc-to-group anyuid system:authenticated system:serviceaccounts +# Mark the master nodes as unschedulable so tests ignore them +oc get nodes -o name -l 'node-role.kubernetes.io/master' | xargs -L1 oc adm cordon +unschedulable="$( ( oc get nodes -o name -l 'node-role.kubernetes.io/master'; ) | wc -l )" + +test_report_dir="${ARTIFACTS:-/tmp/artifacts}" +mkdir -p "${test_report_dir}" + +# Retrieve the hostname of the server to enable kubectl testing +SERVER= +SERVER="$( kubectl config view | grep server | head -n 1 | awk '{print $2}' )" + +# shellcheck disable=SC2086 +ginkgo \ + -nodes "${NODES}" -noColor ${KUBE_E2E_TEST_ARGS} \ + "$( which k8s-e2e.test )" -- \ + -report-dir "${test_report_dir}" \ + -host "${SERVER}" \ + -allowed-not-ready-nodes ${unschedulable} \ + 2>&1 | tee -a "${test_report_dir}/k8s-e2e.log" diff --git a/openshift-hack/update-test-annotations.sh b/openshift-hack/update-test-annotations.sh new file mode 100755 index 0000000000000..244fdc67e5419 --- /dev/null +++ b/openshift-hack/update-test-annotations.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. +source "${KUBE_ROOT}/hack/lib/init.sh" + +kube::golang::setup_env + +# Update e2e test annotations that indicate openshift compatibility +GO111MODULE=on go generate -mod vendor ./openshift-hack/e2e diff --git a/openshift-hack/verify-commits.sh b/openshift-hack/verify-commits.sh new file mode 100755 index 0000000000000..847284221b421 --- /dev/null +++ b/openshift-hack/verify-commits.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +# shellcheck source=openshift-hack/lib/init.sh +source "$(dirname "${BASH_SOURCE[0]}")/lib/init.sh" + +function cleanup() { + return_code=$? + os::test::junit::generate_report + os::util::describe_return_code "${return_code}" + exit "${return_code}" +} +trap "cleanup" EXIT + +if ! git status &> /dev/null; then + os::log::fatal "Not a Git repository" +fi + +os::util::ensure::built_binary_exists 'commitchecker' + +os::test::junit::declare_suite_start "verify/upstream-commits" +os::cmd::expect_success "commitchecker --start ${PULL_BASE_SHA:-master}" +os::test::junit::declare_suite_end diff --git a/openshift-hack/verify-test-annotations.sh b/openshift-hack/verify-test-annotations.sh new file mode 100755 index 0000000000000..a60e30ba7bc58 --- /dev/null +++ b/openshift-hack/verify-test-annotations.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. +source "${KUBE_ROOT}/hack/lib/init.sh" + +# Verify e2e test annotations that indicate openshift compatibility +"${KUBE_ROOT}"/hack/update-test-annotations.sh +git diff --quiet "${KUBE_ROOT}/openshift-hack/e2e/annotate/generated/" diff --git a/openshift-hack/verify.sh b/openshift-hack/verify.sh new file mode 100755 index 0000000000000..9361e8f4faea9 --- /dev/null +++ b/openshift-hack/verify.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +# shellcheck source=openshift-hack/lib/init.sh +source "$(dirname "${BASH_SOURCE[0]}")/lib/init.sh" + +# Required for openapi verification +PATH="$(pwd)/third_party/etcd:${PATH}" + +# Attempt to verify without docker if it is not available. +OS_RUN_WITHOUT_DOCKER= +if ! which docker &> /dev/null; then + os::log::warning "docker not available, attempting to run verify without it" + OS_RUN_WITHOUT_DOCKER=y + + # Without docker, shellcheck may need to be installed. + PATH="$( os::deps::path_with_shellcheck )" +fi +export OS_RUN_WITHOUT_DOCKER + +export PATH + +ARTIFACTS="${ARTIFACTS:-/tmp/artifacts}" +mkdir -p "${ARTIFACTS}" +export KUBE_JUNIT_REPORT_DIR="${ARTIFACTS}" + +make verify diff --git a/openshift.spec b/openshift.spec new file mode 100644 index 0000000000000..c6695f46fd98a --- /dev/null +++ b/openshift.spec @@ -0,0 +1,129 @@ +#debuginfo not supported with Go +%global debug_package %{nil} +# modifying the Go binaries breaks the DWARF debugging +%global __os_install_post %{_rpmconfigdir}/brp-compress + +%global gopath %{_datadir}/gocode +%global import_path k8s.io/kubernetes + +%global golang_version 1.15 + +%{!?commit: +# DO NOT MODIFY: the value on the line below is sed-like replaced by openshift/doozer +%global commit 86b5e46426ba828f49195af21c56f7c6674b48f7 +} +%global shortcommit %(c=%{commit}; echo ${c:0:7}) +# DO NOT MODIFY: the value on the line below is sed-like replaced by openshift/doozer +%{!?os_git_vars: +%global os_git_vars OS_GIT_VERSION='' OS_GIT_COMMIT='' OS_GIT_MAJOR='' OS_GIT_MINOR='' OS_GIT_TREE_STATE='' +} + +%if 0%{?skip_build} +%global do_build 0 +%else +%global do_build 1 +%endif +%if 0%{?skip_prep} +%global do_prep 0 +%else +%global do_prep 1 +%endif +%if 0%{?skip_dist} +%global package_dist %{nil} +%else +%global package_dist %{dist} +%endif + +%{!?version: %global version 4.0.0} +%{!?release: %global release 1} + +Name: openshift +Version: %{version} +Release: %{release}%{package_dist} +Summary: Open Source Container Management by Red Hat +License: ASL 2.0 +URL: https://%{import_path} + +# If go_arches not defined fall through to implicit golang archs +%if 0%{?go_arches:1} +ExclusiveArch: %{go_arches} +%else +ExclusiveArch: x86_64 aarch64 ppc64le s390x +%endif + +# TODO(marun) tar archives are no longer published for 4.x. Should this value be removed? +Source0: https://%{import_path}/archive/%{commit}/%{name}-%{version}.tar.gz +BuildRequires: systemd +BuildRequires: bsdtar +BuildRequires: golang >= %{golang_version} +BuildRequires: krb5-devel +BuildRequires: rsync + +%description +OpenShift is a distribution of Kubernetes optimized for enterprise application +development and deployment. OpenShift adds developer and operational centric +tools on top of Kubernetes to enable rapid application development, easy +deployment and scaling, and long-term lifecycle maintenance for small and large +teams and applications. It provides a secure and multi-tenant configuration for +Kubernetes allowing you to safely host many different applications and workloads +on a unified cluster. + +%package hyperkube +Summary: OpenShift Kubernetes server commands +Requires: util-linux +Requires: socat +Requires: iptables +Provides: hyperkube = %{version} +Obsoletes: atomic-openshift-hyperkube <= %{version} +Obsoletes: atomic-openshift-node <= %{version} + +%description hyperkube +%{summary} + +%prep +%if 0%{do_prep} +%setup -q +%endif + +%build +%if 0%{do_build} +# Create Binaries only for building arch +%ifarch x86_64 + BUILD_PLATFORM="linux/amd64" +%endif +%ifarch ppc64le + BUILD_PLATFORM="linux/ppc64le" +%endif +%ifarch %{arm} aarch64 + BUILD_PLATFORM="linux/arm64" +%endif +%ifarch s390x + BUILD_PLATFORM="linux/s390x" +%endif +KUBE_BUILD_PLATFORMS="${BUILD_PLATFORM}" %{os_git_vars} make all WHAT='cmd/kube-apiserver cmd/kube-controller-manager cmd/kube-scheduler cmd/kubelet' +%endif + +%install + +PLATFORM="$(go env GOHOSTOS)/$(go env GOHOSTARCH)" +install -d %{buildroot}%{_bindir} + +# Install linux components +for bin in kube-apiserver kube-controller-manager kube-scheduler kubelet +do + echo "+++ INSTALLING ${bin}" + install -p -m 755 _output/local/bin/${PLATFORM}/${bin} %{buildroot}%{_bindir}/${bin} +done + +install -p -m 755 openshift-hack/images/hyperkube/hyperkube %{buildroot}%{_bindir}/hyperkube + +%files hyperkube +%license LICENSE +%{_bindir}/hyperkube +%{_bindir}/kube-apiserver +%{_bindir}/kube-controller-manager +%{_bindir}/kube-scheduler +%{_bindir}/kubelet +%defattr(-,root,root,0700) + +%changelog diff --git a/test/e2e/viperconfig.go b/test/e2e/viperconfig.go index bb41c2aa026be..8dc12999fb1f9 100644 --- a/test/e2e/viperconfig.go +++ b/test/e2e/viperconfig.go @@ -26,6 +26,11 @@ import ( "github.com/spf13/viper" ) +// ViperizeFlags is exported for use by the k8s-e2e.test binary used for testing openshift. +func ViperizeFlagsForKubeE2E(requiredConfig, optionalConfig string, flags *flag.FlagSet) error { + return viperizeFlags(requiredConfig, optionalConfig, flags) +} + // viperizeFlags checks whether a configuration file was specified, // reads it, and updates the configuration variables in the specified // flag set accordingly. Must be called after framework.HandleFlags() diff --git a/test/typecheck/main.go b/test/typecheck/main.go index ffe5085b0d5af..ecdc738204cdc 100644 --- a/test/typecheck/main.go +++ b/test/typecheck/main.go @@ -73,6 +73,9 @@ var ( // Tools we use for maintaining the code base but not necessarily // ship as part of the release "hack/tools", + // Tooling specific to openshift that is not shipped as part + // of a release. + "openshift-hack", } ) From 51e3312904abc8b04530266515e9652aba193126 Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Wed, 15 Jul 2020 22:54:47 -0700 Subject: [PATCH 72/96] UPSTREAM: : Add OpenShift OWNERS --- OWNERS | 44 ++++++++----------- api/OWNERS | 2 +- pkg/api/OWNERS | 2 +- staging/src/k8s.io/api/OWNERS | 2 +- .../apiextensions-apiserver/pkg/apis/OWNERS | 2 +- .../src/k8s.io/apimachinery/pkg/apis/OWNERS | 2 +- staging/src/k8s.io/apiserver/pkg/apis/OWNERS | 2 +- .../src/k8s.io/component-base/config/OWNERS | 2 +- staging/src/k8s.io/cri-api/pkg/OWNERS | 2 +- .../k8s.io/kube-aggregator/pkg/apis/OWNERS | 2 +- .../kube-controller-manager/config/OWNERS | 2 +- staging/src/k8s.io/kube-proxy/config/OWNERS | 2 +- .../src/k8s.io/kube-scheduler/config/OWNERS | 2 +- .../src/k8s.io/kube-scheduler/extender/OWNERS | 2 +- staging/src/k8s.io/kubelet/config/OWNERS | 2 +- staging/src/k8s.io/metrics/pkg/apis/OWNERS | 2 +- test/conformance/behaviors/OWNERS | 2 +- test/conformance/testdata/OWNERS | 2 +- 18 files changed, 35 insertions(+), 43 deletions(-) diff --git a/OWNERS b/OWNERS index b2171899e6c69..69c55c6e0f9b2 100644 --- a/OWNERS +++ b/OWNERS @@ -3,33 +3,25 @@ filters: ".*": reviewers: - - brendandburns - - dchen1107 - - lavalamp - - smarterclayton - - thockin - - liggitt + - deads2k + - sttts + - soltysh + - mfojtik + - marun + - tnozicka + + # approvers are limited to the team that manages rebases and pays the price for carries that are introduced approvers: - - brendandburns - - dchen1107 - - lavalamp - - smarterclayton - - thockin - - wojtek-t - - liggitt - emeritus_approvers: - - bgrant0607 - - jbeda + - deads2k + - sttts + - soltysh + - mfojtik + - marun + - tnozicka - # go.{mod,sum} files relate to go dependencies, and should be reviewed by the - # dep-approvers - "go\\.(mod|sum)$": - required_reviewers: - - kubernetes/dep-approvers + "^\\.go.(mod|sum)$": labels: - - area/dependency - # metrics.go files are sig-instrumentation related, and should be tagged - # and reviewed by sig-instrumentation - "metrics\\.go$": + - "vendor-update" + "^vendor/.*": labels: - - sig/instrumentation + - "vendor-update" diff --git a/api/OWNERS b/api/OWNERS index b185715fca80d..4316143972115 100644 --- a/api/OWNERS +++ b/api/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is an api owners file options: - no_parent_owners: true + no_parent_owners: false approvers: - api-approvers reviewers: diff --git a/pkg/api/OWNERS b/pkg/api/OWNERS index 5758adee267ef..935c2c0c32e9b 100644 --- a/pkg/api/OWNERS +++ b/pkg/api/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is an api owners file options: - no_parent_owners: true + no_parent_owners: false filters: ".*": approvers: diff --git a/staging/src/k8s.io/api/OWNERS b/staging/src/k8s.io/api/OWNERS index 92c1f5627ab74..13c53cbdec86f 100644 --- a/staging/src/k8s.io/api/OWNERS +++ b/staging/src/k8s.io/api/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is an api owners file options: - no_parent_owners: true + no_parent_owners: false filters: ".*": approvers: diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/OWNERS b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/OWNERS index 38336c177f913..5ad03b90eb5c3 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/OWNERS +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is an api owners file options: - no_parent_owners: true + no_parent_owners: false approvers: - api-approvers reviewers: diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/OWNERS b/staging/src/k8s.io/apimachinery/pkg/apis/OWNERS index 38336c177f913..5ad03b90eb5c3 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/OWNERS +++ b/staging/src/k8s.io/apimachinery/pkg/apis/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is an api owners file options: - no_parent_owners: true + no_parent_owners: false approvers: - api-approvers reviewers: diff --git a/staging/src/k8s.io/apiserver/pkg/apis/OWNERS b/staging/src/k8s.io/apiserver/pkg/apis/OWNERS index 38336c177f913..5ad03b90eb5c3 100644 --- a/staging/src/k8s.io/apiserver/pkg/apis/OWNERS +++ b/staging/src/k8s.io/apiserver/pkg/apis/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is an api owners file options: - no_parent_owners: true + no_parent_owners: false approvers: - api-approvers reviewers: diff --git a/staging/src/k8s.io/component-base/config/OWNERS b/staging/src/k8s.io/component-base/config/OWNERS index 11d499d75d919..303ca1381589e 100644 --- a/staging/src/k8s.io/component-base/config/OWNERS +++ b/staging/src/k8s.io/component-base/config/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is an api owners file options: - no_parent_owners: true + no_parent_owners: false approvers: - api-approvers reviewers: diff --git a/staging/src/k8s.io/cri-api/pkg/OWNERS b/staging/src/k8s.io/cri-api/pkg/OWNERS index 3bd74a4bf0b90..7e20f0f636902 100644 --- a/staging/src/k8s.io/cri-api/pkg/OWNERS +++ b/staging/src/k8s.io/cri-api/pkg/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is owned by sig-node (should mirror same contents as pkg/kubelet/OWNERS) options: - no_parent_owners: true + no_parent_owners: false approvers: - Random-Liu - dchen1107 diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apis/OWNERS b/staging/src/k8s.io/kube-aggregator/pkg/apis/OWNERS index 38336c177f913..5ad03b90eb5c3 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apis/OWNERS +++ b/staging/src/k8s.io/kube-aggregator/pkg/apis/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is an api owners file options: - no_parent_owners: true + no_parent_owners: false approvers: - api-approvers reviewers: diff --git a/staging/src/k8s.io/kube-controller-manager/config/OWNERS b/staging/src/k8s.io/kube-controller-manager/config/OWNERS index b3f2f4d316c67..4c11d243f68e0 100644 --- a/staging/src/k8s.io/kube-controller-manager/config/OWNERS +++ b/staging/src/k8s.io/kube-controller-manager/config/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is an api owners file options: - no_parent_owners: true + no_parent_owners: false approvers: - api-approvers reviewers: diff --git a/staging/src/k8s.io/kube-proxy/config/OWNERS b/staging/src/k8s.io/kube-proxy/config/OWNERS index 6a6e8cacc9d05..aa0fcb3383042 100644 --- a/staging/src/k8s.io/kube-proxy/config/OWNERS +++ b/staging/src/k8s.io/kube-proxy/config/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is an api owners file options: - no_parent_owners: true + no_parent_owners: false approvers: - api-approvers reviewers: diff --git a/staging/src/k8s.io/kube-scheduler/config/OWNERS b/staging/src/k8s.io/kube-scheduler/config/OWNERS index 9584e0e831342..aa10fbcd4adb1 100644 --- a/staging/src/k8s.io/kube-scheduler/config/OWNERS +++ b/staging/src/k8s.io/kube-scheduler/config/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is an api owners file options: - no_parent_owners: true + no_parent_owners: false approvers: - api-approvers reviewers: diff --git a/staging/src/k8s.io/kube-scheduler/extender/OWNERS b/staging/src/k8s.io/kube-scheduler/extender/OWNERS index 7fbfadd4f4abb..1853164eec443 100644 --- a/staging/src/k8s.io/kube-scheduler/extender/OWNERS +++ b/staging/src/k8s.io/kube-scheduler/extender/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is an api owners file options: - no_parent_owners: true + no_parent_owners: false approvers: - api-approvers reviewers: diff --git a/staging/src/k8s.io/kubelet/config/OWNERS b/staging/src/k8s.io/kubelet/config/OWNERS index a459a8f87ada8..3c76c88fbe4e6 100644 --- a/staging/src/k8s.io/kubelet/config/OWNERS +++ b/staging/src/k8s.io/kubelet/config/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is an api owners file options: - no_parent_owners: true + no_parent_owners: false approvers: - api-approvers reviewers: diff --git a/staging/src/k8s.io/metrics/pkg/apis/OWNERS b/staging/src/k8s.io/metrics/pkg/apis/OWNERS index f7329139ff734..7eac5b63a22bc 100644 --- a/staging/src/k8s.io/metrics/pkg/apis/OWNERS +++ b/staging/src/k8s.io/metrics/pkg/apis/OWNERS @@ -2,7 +2,7 @@ # Disable inheritance as this is an api owners file options: - no_parent_owners: true + no_parent_owners: false approvers: - api-approvers reviewers: diff --git a/test/conformance/behaviors/OWNERS b/test/conformance/behaviors/OWNERS index 75e33b97f2bcb..210037a002715 100644 --- a/test/conformance/behaviors/OWNERS +++ b/test/conformance/behaviors/OWNERS @@ -2,7 +2,7 @@ # To be owned by sig-architecture. options: - no_parent_owners: true + no_parent_owners: false reviewers: - smarterclayton - spiffxp diff --git a/test/conformance/testdata/OWNERS b/test/conformance/testdata/OWNERS index 75e33b97f2bcb..210037a002715 100644 --- a/test/conformance/testdata/OWNERS +++ b/test/conformance/testdata/OWNERS @@ -2,7 +2,7 @@ # To be owned by sig-architecture. options: - no_parent_owners: true + no_parent_owners: false reviewers: - smarterclayton - spiffxp From 293fa6378b612b90b4885e9cc958540b5a592cdc Mon Sep 17 00:00:00 2001 From: Siva Date: Thu, 29 Oct 2020 13:56:01 +0100 Subject: [PATCH 73/96] UPSTREAM: : use new access token inactivity timeout field. --- .../oauth/validate_idp.go | 6 ++--- .../oauth/validate_idp_test.go | 22 +++++++++++++------ .../authenticator/patch_authenticator.go | 22 +++++++++++-------- 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp.go index 2cfb664c300d1..86e8158c95799 100644 --- a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp.go +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp.go @@ -72,10 +72,10 @@ func validateOAuthSpec(spec configv1.OAuthSpec) field.ErrorList { } // TODO move to ValidateTokenConfig - timeout := spec.TokenConfig.AccessTokenInactivityTimeoutSeconds - if timeout > 0 && timeout < MinimumInactivityTimeoutSeconds { + timeout := spec.TokenConfig.AccessTokenInactivityTimeout + if timeout != nil && timeout.Seconds() < MinimumInactivityTimeoutSeconds { errs = append(errs, field.Invalid( - specPath.Child("tokenConfig", "accessTokenInactivityTimeoutSeconds"), timeout, + specPath.Child("tokenConfig", "accessTokenInactivityTimeout"), timeout, fmt.Sprintf("the minimum acceptable token timeout value is %d seconds", MinimumInactivityTimeoutSeconds))) } diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp_test.go b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp_test.go index 6c4013a4f39b1..9efd2b525c775 100644 --- a/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp_test.go +++ b/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp_test.go @@ -4,7 +4,9 @@ import ( "fmt" "reflect" "testing" + "time" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/validation/field" configv1 "github.com/openshift/api/config/v1" @@ -143,17 +145,20 @@ func TestValidateOAuthSpec(t *testing.T) { args: args{ spec: configv1.OAuthSpec{ TokenConfig: configv1.TokenConfig{ - AccessTokenInactivityTimeoutSeconds: -50, + AccessTokenInactivityTimeout: &metav1.Duration{Duration: -50 * time.Second}, }, }, }, + want: field.ErrorList{ + field.Invalid(field.NewPath("spec", "tokenConfig", "accessTokenInactivityTimeout"), metav1.Duration{Duration: -50 * time.Second}, fmt.Sprintf("the minimum acceptable token timeout value is %d seconds", MinimumInactivityTimeoutSeconds)), + }, }, { name: "positive token inactivity timeout", args: args{ spec: configv1.OAuthSpec{ TokenConfig: configv1.TokenConfig{ - AccessTokenInactivityTimeoutSeconds: 32578, + AccessTokenInactivityTimeout: &metav1.Duration{Duration: 32578 * time.Second}, }, }, }, @@ -163,22 +168,25 @@ func TestValidateOAuthSpec(t *testing.T) { args: args{ spec: configv1.OAuthSpec{ TokenConfig: configv1.TokenConfig{ - AccessTokenInactivityTimeoutSeconds: 0, + AccessTokenInactivityTimeout: &metav1.Duration{Duration: 0}, }, }, }, + want: field.ErrorList{ + field.Invalid(field.NewPath("spec", "tokenConfig", "accessTokenInactivityTimeout"), metav1.Duration{Duration: 0 * time.Second}, fmt.Sprintf("the minimum acceptable token timeout value is %d seconds", MinimumInactivityTimeoutSeconds)), + }, }, { name: "token inactivity timeout lower than the api constant minimum", args: args{ spec: configv1.OAuthSpec{ TokenConfig: configv1.TokenConfig{ - AccessTokenInactivityTimeoutSeconds: 250, + AccessTokenInactivityTimeout: &metav1.Duration{Duration: 250 * time.Second}, }, }, }, want: field.ErrorList{ - field.Invalid(field.NewPath("spec", "tokenConfig", "accessTokenInactivityTimeoutSeconds"), 250, fmt.Sprintf("the minimum acceptable token timeout value is %d seconds", MinimumInactivityTimeoutSeconds)), + field.Invalid(field.NewPath("spec", "tokenConfig", "accessTokenInactivityTimeout"), metav1.Duration{Duration: 250 * time.Second}, fmt.Sprintf("the minimum acceptable token timeout value is %d seconds", MinimumInactivityTimeoutSeconds)), }, }, { @@ -246,8 +254,8 @@ func TestValidateOAuthSpec(t *testing.T) { }, }, TokenConfig: configv1.TokenConfig{ - AccessTokenInactivityTimeoutSeconds: -1, - AccessTokenMaxAgeSeconds: 216000, + AccessTokenInactivityTimeout: &metav1.Duration{Duration: 300 * time.Second}, + AccessTokenMaxAgeSeconds: 216000, }, Templates: configv1.OAuthTemplates{ Login: configv1.SecretNameReference{Name: "my-login-template"}, diff --git a/pkg/kubeapiserver/authenticator/patch_authenticator.go b/pkg/kubeapiserver/authenticator/patch_authenticator.go index f52d951dcd4ab..ea3b984723f57 100644 --- a/pkg/kubeapiserver/authenticator/patch_authenticator.go +++ b/pkg/kubeapiserver/authenticator/patch_authenticator.go @@ -54,18 +54,22 @@ func AddOAuthServerAuthenticatorIfNeeded(tokenAuthenticators []authenticator.Tok panic(err) } - // add our oauth token validator - validators := []oauth.OAuthTokenValidator{oauth.NewExpirationValidator(), oauth.NewUIDValidator()} + // Tokens are valid for their lifetime unless this value is overridden. + tokenTimeout := int32(0) if enablement.OpenshiftConfig().OAuthConfig != nil { - if inactivityTimeout := enablement.OpenshiftConfig().OAuthConfig.TokenConfig.AccessTokenInactivityTimeoutSeconds; inactivityTimeout != nil { - timeoutValidator := oauth.NewTimeoutValidator(oauthClient.OauthV1().OAuthAccessTokens(), oauthInformer.Oauth().V1().OAuthClients().Lister(), *inactivityTimeout, oauthvalidation.MinimumInactivityTimeoutSeconds) - validators = append(validators, timeoutValidator) - enablement.AddPostStartHookOrDie("openshift.io-TokenTimeoutUpdater", func(context genericapiserver.PostStartHookContext) error { - go timeoutValidator.Run(context.StopCh) - return nil - }) + if inactivityTimeout := enablement.OpenshiftConfig().OAuthConfig.TokenConfig.AccessTokenInactivityTimeout; inactivityTimeout != nil { + tokenTimeout = int32(inactivityTimeout.Seconds()) } } + + timeoutValidator := oauth.NewTimeoutValidator(oauthClient.OauthV1().OAuthAccessTokens(), oauthInformer.Oauth().V1().OAuthClients().Lister(), tokenTimeout, oauthvalidation.MinimumInactivityTimeoutSeconds) + // add our oauth token validator + validators := []oauth.OAuthTokenValidator{oauth.NewExpirationValidator(), oauth.NewUIDValidator(), timeoutValidator} + enablement.AddPostStartHookOrDie("openshift.io-TokenTimeoutUpdater", func(context genericapiserver.PostStartHookContext) error { + go timeoutValidator.Run(context.StopCh) + return nil + }) + enablement.AddPostStartHookOrDie("openshift.io-StartOAuthInformers", func(context genericapiserver.PostStartHookContext) error { go oauthInformer.Start(context.StopCh) go userInformer.Start(context.StopCh) From 8a7f130e315d84b55037c82eba1e42c14b5afdf1 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Thu, 29 Oct 2020 13:56:01 +0100 Subject: [PATCH 74/96] UPSTREAM: : noderestrictions: add node-role.kubernetes.io/* to allowed node labels Server side validation of node labels was added in https://github.com/kubernetes/kubernetes/pull/90307. We only disabled kubelet-side validation before to make our node role labels work. --- pkg/kubelet/apis/well_known_labels.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/kubelet/apis/well_known_labels.go b/pkg/kubelet/apis/well_known_labels.go index 1472f69208063..8c0a18c5a003c 100644 --- a/pkg/kubelet/apis/well_known_labels.go +++ b/pkg/kubelet/apis/well_known_labels.go @@ -45,6 +45,11 @@ var kubeletLabels = sets.NewString( LabelOS, LabelArch, + + // These are special for OpenShift: + "node-role.kubernetes.io/master", + "node-role.kubernetes.io/worker", + "node-role.kubernetes.io/etcd", ) var kubeletLabelNamespaces = sets.NewString( From e10053290d1c9cb2c4e22df8c6445a1659eab15f Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Thu, 29 Oct 2020 13:56:01 +0100 Subject: [PATCH 75/96] UPSTREAM: : oauth-authn: support sha256 prefixed tokens UPSTREAM: : oauth-token-authn: switch to sha256~ prefix UPSTREAM: : oauth-token-authn: add sha256~ support to bootstrap authenticator --- .../oauth/bootstrapauthenticator.go | 11 +++ .../oauth/tokenauthenticator.go | 13 ++++ .../oauth/tokenauthenticator_test.go | 72 +++++++++++++++++++ 3 files changed, 96 insertions(+) diff --git a/openshift-kube-apiserver/authentication/oauth/bootstrapauthenticator.go b/openshift-kube-apiserver/authentication/oauth/bootstrapauthenticator.go index 3d4fa46511f3b..fc594f218f83a 100644 --- a/openshift-kube-apiserver/authentication/oauth/bootstrapauthenticator.go +++ b/openshift-kube-apiserver/authentication/oauth/bootstrapauthenticator.go @@ -2,7 +2,10 @@ package oauth import ( "context" + "crypto/sha256" + "encoding/base64" "fmt" + "strings" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" @@ -34,6 +37,14 @@ func NewBootstrapAuthenticator(tokens oauthclient.OAuthAccessTokenInterface, get } func (a *bootstrapAuthenticator) AuthenticateToken(ctx context.Context, name string) (*kauthenticator.Response, bool, error) { + // hash token for new-style sha256~ prefixed token + // TODO: reject non-sha256 prefix tokens in 4.7+ + if strings.HasPrefix(name, sha256Prefix) { + withoutPrefix := strings.TrimPrefix(name, sha256Prefix) + h := sha256.Sum256([]byte(withoutPrefix)) + name = sha256Prefix + base64.RawURLEncoding.EncodeToString(h[0:]) + } + token, err := a.tokens.Get(context.TODO(), name, metav1.GetOptions{}) if err != nil { return nil, false, errLookup // mask the error so we do not leak token data in logs diff --git a/openshift-kube-apiserver/authentication/oauth/tokenauthenticator.go b/openshift-kube-apiserver/authentication/oauth/tokenauthenticator.go index 7153b79b150b6..3ce6e0e7a9c07 100644 --- a/openshift-kube-apiserver/authentication/oauth/tokenauthenticator.go +++ b/openshift-kube-apiserver/authentication/oauth/tokenauthenticator.go @@ -2,8 +2,11 @@ package oauth import ( "context" + "crypto/sha256" + "encoding/base64" "errors" "fmt" + "strings" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kauthenticator "k8s.io/apiserver/pkg/authentication/authenticator" @@ -34,7 +37,17 @@ func NewTokenAuthenticator(tokens oauthclient.OAuthAccessTokenInterface, users u } } +const sha256Prefix = "sha256~" + func (a *tokenAuthenticator) AuthenticateToken(ctx context.Context, name string) (*kauthenticator.Response, bool, error) { + // hash token for new-style sha256~ prefixed token + // TODO: reject non-sha256 prefix tokens in 4.7+ + if strings.HasPrefix(name, sha256Prefix) { + withoutPrefix := strings.TrimPrefix(name, sha256Prefix) + h := sha256.Sum256([]byte(withoutPrefix)) + name = sha256Prefix + base64.RawURLEncoding.EncodeToString(h[0:]) + } + token, err := a.tokens.Get(context.TODO(), name, metav1.GetOptions{}) if err != nil { return nil, false, errLookup // mask the error so we do not leak token data in logs diff --git a/openshift-kube-apiserver/authentication/oauth/tokenauthenticator_test.go b/openshift-kube-apiserver/authentication/oauth/tokenauthenticator_test.go index dae9e7445a150..4aadbb6e1f2b5 100644 --- a/openshift-kube-apiserver/authentication/oauth/tokenauthenticator_test.go +++ b/openshift-kube-apiserver/authentication/oauth/tokenauthenticator_test.go @@ -2,6 +2,8 @@ package oauth import ( "context" + "crypto/sha256" + "encoding/base64" "errors" "testing" "time" @@ -45,6 +47,76 @@ func TestAuthenticateTokenInvalidUID(t *testing.T) { } } +func TestAuthenticateTokenFormats(t *testing.T) { + h := sha256.Sum256([]byte("token")) + tokenSha256 := base64.RawURLEncoding.EncodeToString(h[:]) + + h2 := sha256.Sum256([]byte("token2")) + token2Sha256 := base64.RawURLEncoding.EncodeToString(h2[:]) + + fakeOAuthClient := oauthfake.NewSimpleClientset( + &oauthv1.OAuthAccessToken{ + ObjectMeta: metav1.ObjectMeta{Name: "sha256~" + tokenSha256, CreationTimestamp: metav1.Time{Time: time.Now()}}, + ExpiresIn: 600, // 10 minutes + UserName: "tokenUser", + UserUID: "tokenUserID", + }, + &oauthv1.OAuthAccessToken{ + ObjectMeta: metav1.ObjectMeta{Name: "token2", CreationTimestamp: metav1.Time{Time: time.Now()}}, + ExpiresIn: 600, // 10 minutes + UserName: "token2User", + UserUID: "token2UserID", + }, + ) + fakeUserClient := userfake.NewSimpleClientset( + &userv1.User{ObjectMeta: metav1.ObjectMeta{Name: "tokenUser", UID: "tokenUserID"}}, + &userv1.User{ObjectMeta: metav1.ObjectMeta{Name: "token2User", UID: "token2UserID"}}, + ) + + tokenAuthenticator := NewTokenAuthenticator(fakeOAuthClient.OauthV1().OAuthAccessTokens(), fakeUserClient.UserV1().Users(), NoopGroupMapper{}, nil, NewUIDValidator()) + + type Test struct { + name string + bearerToken string + expectedError bool + expectedFound bool + expectedUserName string + } + for _, test := range []Test{ + {"unknown", "unknown", true, false, ""}, + {"unprefixed token", "token", true, false, ""}, + {"prefixed token", "sha256~token", false, true, "tokenUser"}, + {"unprefixed hash token", tokenSha256, true, false, ""}, + {"prefixed hash token", "sha256~" + tokenSha256, true, false, ""}, + {"unprefixed token2", "token2", false, true, "token2User"}, + {"prefixed token2", "sha256~token2", true, false, ""}, + {"unprefixed hash token2", token2Sha256, true, false, ""}, + {"prefixed hash token2", "sha256~" + token2Sha256, true, false, ""}, + } { + t.Run(test.name, func(t *testing.T) { + userInfo, found, err := tokenAuthenticator.AuthenticateToken(context.TODO(), test.bearerToken) + if !test.expectedError && err != nil { + t.Fatalf("Unexpected error: %v", err) + } + if test.expectedError && err == nil { + t.Fatalf("Unexpected non-error: found=%v userInfo=%#v", found, userInfo) + } + if !test.expectedFound && found { + t.Fatalf("Expected error, but token was found: %#v", userInfo) + } + if test.expectedFound && !found { + t.Fatalf("Expected token to be found, but it was not") + } + if userInfo != nil && userInfo.User.GetName() != test.expectedUserName { + t.Errorf("Wrong user name, expected %q, got %q", test.expectedUserName, userInfo.User.GetName()) + } + if userInfo == nil && len(test.expectedUserName) > 0 { + t.Errorf("Got no user info, but expected user name %q", test.expectedUserName) + } + }) + } +} + func TestAuthenticateTokenNotFoundSuppressed(t *testing.T) { fakeOAuthClient := oauthfake.NewSimpleClientset() fakeUserClient := userfake.NewSimpleClientset() From a5566b3d18300ac83d704983fc8b232d17ead918 Mon Sep 17 00:00:00 2001 From: Aniket Bhat Date: Thu, 29 Oct 2020 13:56:01 +0100 Subject: [PATCH 76/96] UPSTREAM: : openshift-kube-apiserver: Add custom resource validation for network spec --- .../cr_validation_registration.go | 5 +- .../customresourcevalidation/network/BUILD | 32 +++++ .../network/validate_network_config.go | 127 ++++++++++++++++++ 3 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/network/BUILD create mode 100644 openshift-kube-apiserver/admission/customresourcevalidation/network/validate_network_config.go diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration/cr_validation_registration.go b/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration/cr_validation_registration.go index bdc4681be54fa..2495d4eb67b68 100644 --- a/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration/cr_validation_registration.go +++ b/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration/cr_validation_registration.go @@ -10,6 +10,7 @@ import ( "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/console" "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/features" "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/image" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/network" "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth" "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/project" "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction" @@ -31,6 +32,7 @@ var AllCustomResourceValidators = []string{ clusterresourcequota.PluginName, securitycontextconstraints.PluginName, rolebindingrestriction.PluginName, + network.PluginName, // this one is special because we don't work without it. securitycontextconstraints.DefaultingPluginName, @@ -54,7 +56,8 @@ func RegisterCustomResourceValidation(plugins *admission.Plugins) { securitycontextconstraints.Register(plugins) // This plugin validates the authorization.openshift.io/v1 RoleBindingRestriction resources. rolebindingrestriction.Register(plugins) - + // This plugin validates the network.config.openshift.io object for service node port range changes + network.Register(plugins) // this one is special because we don't work without it. securitycontextconstraints.RegisterDefaulting(plugins) } diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/network/BUILD b/openshift-kube-apiserver/admission/customresourcevalidation/network/BUILD new file mode 100644 index 0000000000000..e1819a586cadb --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/network/BUILD @@ -0,0 +1,32 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["validate_network_config.go"], + importpath = "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/network", + visibility = ["//visibility:public"], + deps = [ + "//openshift-kube-apiserver/admission/customresourcevalidation:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/validation:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", + "//vendor/github.com/openshift/api/config/v1:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/openshift-kube-apiserver/admission/customresourcevalidation/network/validate_network_config.go b/openshift-kube-apiserver/admission/customresourcevalidation/network/validate_network_config.go new file mode 100644 index 0000000000000..6362db49efaa9 --- /dev/null +++ b/openshift-kube-apiserver/admission/customresourcevalidation/network/validate_network_config.go @@ -0,0 +1,127 @@ +package network + +import ( + "fmt" + "io" + + "k8s.io/apimachinery/pkg/api/validation" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + utilnet "k8s.io/apimachinery/pkg/util/net" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + kubeoptions "k8s.io/kubernetes/pkg/kubeapiserver/options" + + configv1 "github.com/openshift/api/config/v1" + "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" +) + +const PluginName = "config.openshift.io/ValidateNetwork" + +// Register registers a plugin +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { + return customresourcevalidation.NewValidator( + map[schema.GroupResource]bool{ + configv1.Resource("networks"): true, + }, + map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ + configv1.GroupVersion.WithKind("Network"): networkV1{}, + }) + }) +} + +func toNetworkV1(uncastObj runtime.Object) (*configv1.Network, field.ErrorList) { + if uncastObj == nil { + return nil, nil + } + + allErrs := field.ErrorList{} + + obj, ok := uncastObj.(*configv1.Network) + if !ok { + return nil, append(allErrs, + field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"Network"}), + field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) + } + + return obj, nil +} + +type networkV1 struct { +} + +func validateNetworkServiceNodePortRangeUpdate(obj, oldObj *configv1.Network) *field.Error { + var err error + defaultRange := kubeoptions.DefaultServiceNodePortRange + oldRange := &defaultRange + newRange := &defaultRange + + oldRangeStr := oldObj.Spec.ServiceNodePortRange + if oldRangeStr != "" { + if oldRange, err = utilnet.ParsePortRange(oldRangeStr); err != nil { + return field.Invalid(field.NewPath("spec", "serviceNodePortRange"), + oldRangeStr, + fmt.Sprintf("failed to parse the old port range: %v", err)) + } + } + newRangeStr := obj.Spec.ServiceNodePortRange + if newRangeStr != "" { + if newRange, err = utilnet.ParsePortRange(newRangeStr); err != nil { + return field.Invalid(field.NewPath("spec", "serviceNodePortRange"), + newRangeStr, + fmt.Sprintf("failed to parse the new port range: %v", err)) + } + } + if !newRange.Contains(oldRange.Base) || !newRange.Contains(oldRange.Base+oldRange.Size-1) { + return field.Invalid(field.NewPath("spec", "serviceNodePortRange"), + newRangeStr, + fmt.Sprintf("new service node port range %s does not completely cover the previous range %s", newRange, oldRange)) + } + return nil +} + +func (networkV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { + obj, allErrs := toNetworkV1(uncastObj) + if len(allErrs) > 0 { + return allErrs + } + + allErrs = append(allErrs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, customresourcevalidation.RequireNameCluster, field.NewPath("metadata"))...) + + return allErrs +} + +func (networkV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, allErrs := toNetworkV1(uncastObj) + if len(allErrs) > 0 { + return allErrs + } + oldObj, allErrs := toNetworkV1(uncastOldObj) + if len(allErrs) > 0 { + return allErrs + } + + allErrs = append(allErrs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + if err := validateNetworkServiceNodePortRangeUpdate(obj, oldObj); err != nil { + allErrs = append(allErrs, err) + } + + return allErrs +} + +func (networkV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { + obj, errs := toNetworkV1(uncastObj) + if len(errs) > 0 { + return errs + } + oldObj, errs := toNetworkV1(uncastOldObj) + if len(errs) > 0 { + return errs + } + + // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. + errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) + + return errs +} From 356cd430dbc7433f493f50148a77d3289d9fea98 Mon Sep 17 00:00:00 2001 From: ravisantoshgudimetla Date: Thu, 29 Oct 2020 13:56:01 +0100 Subject: [PATCH 77/96] UPSTREAM: 93475: Strip unnecessary security contexts on Windows As of now, the kubelet is passing the security context to container runtime even if the security context has invalid options for a particular OS. As a result, the pod fails to come up on the node. This error is particularly pronounced on the Windows nodes where kubelet is allowing Linux specific options like SELinux, RunAsUser etc where as in [documentation](https://kubernetes.io/docs/setup/production-environment/windows/intro-windows-in-kubernetes/#v1-container), we clearly state they are not supported. This PR ensures that the kubelet strips the security contexts of the pod, if they don't make sense on the Windows OS. --- .../kuberuntime_container_windows.go | 25 +++++++++++++++++-- .../kuberuntime/kuberuntime_sandbox.go | 12 ++++++--- test/e2e/windows/security_context.go | 21 +++++++++++++++- 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go b/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go index eeb08d79bf1c7..403c018b51c4a 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go @@ -19,7 +19,6 @@ limitations under the License. package kuberuntime import ( - "fmt" "runtime" "k8s.io/api/core/v1" @@ -125,9 +124,31 @@ func (m *kubeGenericRuntimeManager) generateWindowsContainerConfig(container *v1 // setup security context effectiveSc := securitycontext.DetermineEffectiveSecurityContext(pod, container) + + // Strip down all the unnecessary options on the Windows + if effectiveSc.SELinuxOptions != nil { + effectiveSc.SELinuxOptions = nil + } + + if effectiveSc.AllowPrivilegeEscalation != nil { + effectiveSc.AllowPrivilegeEscalation = nil + } + + if effectiveSc.Capabilities != nil { + effectiveSc.Capabilities = nil + } + + if effectiveSc.Privileged != nil { + effectiveSc.Privileged = nil + } + + if effectiveSc.ProcMount != nil { + effectiveSc.ProcMount = nil + } + // RunAsUser only supports int64 from Kubernetes API, but Windows containers only support username. if effectiveSc.RunAsUser != nil { - return nil, fmt.Errorf("run as uid (%d) is not supported on Windows", *effectiveSc.RunAsUser) + effectiveSc.RunAsUser = nil } if username != "" { wc.SecurityContext.RunAsUsername = username diff --git a/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go b/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go index 0978044f7539d..68a38125367ba 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go @@ -20,6 +20,7 @@ import ( "fmt" "net" "net/url" + "runtime" "sort" v1 "k8s.io/api/core/v1" @@ -143,6 +144,9 @@ func (m *kubeGenericRuntimeManager) generatePodSandboxConfig(pod *v1.Pod, attemp } // generatePodSandboxLinuxConfig generates LinuxPodSandboxConfig from v1.Pod. +// We've to call PodSandboxLinuxConfig always irrespective of the underlying OS as securityContext is not part of +// podSandboxConfig. It is currently part of LinuxPodSandboxConfig. In future, if we have securityContext pulled out +// in podSandboxConfig we should be able to use it. func (m *kubeGenericRuntimeManager) generatePodSandboxLinuxConfig(pod *v1.Pod) (*runtimeapi.LinuxPodSandboxConfig, error) { cgroupParent := m.runtimeHelper.GetPodCgroupParent(pod) lc := &runtimeapi.LinuxPodSandboxConfig{ @@ -169,15 +173,15 @@ func (m *kubeGenericRuntimeManager) generatePodSandboxLinuxConfig(pod *v1.Pod) ( if pod.Spec.SecurityContext != nil { sc := pod.Spec.SecurityContext - if sc.RunAsUser != nil { + if sc.RunAsUser != nil && runtime.GOOS != "windows" { lc.SecurityContext.RunAsUser = &runtimeapi.Int64Value{Value: int64(*sc.RunAsUser)} } - if sc.RunAsGroup != nil { + if sc.RunAsGroup != nil && runtime.GOOS != "windows" { lc.SecurityContext.RunAsGroup = &runtimeapi.Int64Value{Value: int64(*sc.RunAsGroup)} } lc.SecurityContext.NamespaceOptions = namespacesForPod(pod) - if sc.FSGroup != nil { + if sc.FSGroup != nil && runtime.GOOS != "windows" { lc.SecurityContext.SupplementalGroups = append(lc.SecurityContext.SupplementalGroups, int64(*sc.FSGroup)) } if groups := m.runtimeHelper.GetExtraSupplementalGroupsForPod(pod); len(groups) > 0 { @@ -188,7 +192,7 @@ func (m *kubeGenericRuntimeManager) generatePodSandboxLinuxConfig(pod *v1.Pod) ( lc.SecurityContext.SupplementalGroups = append(lc.SecurityContext.SupplementalGroups, int64(sg)) } } - if sc.SELinuxOptions != nil { + if sc.SELinuxOptions != nil && runtime.GOOS != "windows" { lc.SecurityContext.SelinuxOptions = &runtimeapi.SELinuxOption{ User: sc.SELinuxOptions.User, Role: sc.SELinuxOptions.Role, diff --git a/test/e2e/windows/security_context.go b/test/e2e/windows/security_context.go index ff100d7ba20d0..5586154ece2c0 100644 --- a/test/e2e/windows/security_context.go +++ b/test/e2e/windows/security_context.go @@ -31,7 +31,7 @@ import ( const runAsUserNameContainerName = "run-as-username-container" -var _ = SIGDescribe("[Feature:Windows] SecurityContext RunAsUserName", func() { +var _ = SIGDescribe("[Feature:Windows] SecurityContext", func() { f := framework.NewDefaultFramework("windows-run-as-username") ginkgo.It("should be able create pods and run containers with a given username", func() { @@ -71,6 +71,24 @@ var _ = SIGDescribe("[Feature:Windows] SecurityContext RunAsUserName", func() { f.TestContainerOutput("check overridden username", pod, 0, []string{"ContainerUser"}) f.TestContainerOutput("check pod SecurityContext username", pod, 1, []string{"ContainerAdministrator"}) }) + ginkgo.It("should ignore Linux Specific SecurityContext if set", func() { + ginkgo.By("Creating a pod with SELinux options") + + windowsPodWithSELinux := createTestPod(f, "mcr.microsoft.com/powershell:lts-nanoserver-1809", windowsOS) + windowsPodWithSELinux.Spec.Containers[0].Args = []string{"test-webserver-with-selinux"} + windowsPodWithSELinux.Spec.SecurityContext = &v1.PodSecurityContext{} + containerUserName := "ContainerAdministrator" + windowsPodWithSELinux.Spec.SecurityContext.SELinuxOptions = &v1.SELinuxOptions{Level: "s0:c24,c9"} + windowsPodWithSELinux.Spec.Containers[0].SecurityContext = &v1.SecurityContext{ + WindowsOptions: &v1.WindowsSecurityContextOptions{RunAsUserName: &containerUserName}} + windowsPodWithSELinux.Spec.Tolerations = []v1.Toleration{{Key: "os", Value: "Windows"}} + windowsPodWithSELinux, err := f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(context.TODO(), + windowsPodWithSELinux, metav1.CreateOptions{}) + framework.ExpectNoError(err) + framework.Logf("Created pod %v", windowsPodWithSELinux) + framework.ExpectNoError(e2epod.WaitForPodNameRunningInNamespace(f.ClientSet, windowsPodWithSELinux.Name, + f.Namespace.Name), "failed to wait for pod %s to be running", windowsPodWithSELinux.Name) + }) }) func runAsUserNamePod(username *string) *v1.Pod { @@ -80,6 +98,7 @@ func runAsUserNamePod(username *string) *v1.Pod { Name: podName, }, Spec: v1.PodSpec{ + NodeSelector: map[string]string{"kubernetes.io/os": "windows"}, Containers: []v1.Container{ { Name: runAsUserNameContainerName, From d06fd0bf7d6703c17bd7739ba9a8efed9c522625 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:56:02 +0100 Subject: [PATCH 78/96] UPSTREAM: : add readyz check for openshift apiserver availability --- .../openshiftkubeapiserver/patch.go | 7 + .../openshiftkubeapiserver/sdn_readyz_wait.go | 126 ++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 openshift-kube-apiserver/openshiftkubeapiserver/sdn_readyz_wait.go diff --git a/openshift-kube-apiserver/openshiftkubeapiserver/patch.go b/openshift-kube-apiserver/openshiftkubeapiserver/patch.go index 4d8537ecc5ca4..bd5d050fdd8d9 100644 --- a/openshift-kube-apiserver/openshiftkubeapiserver/patch.go +++ b/openshift-kube-apiserver/openshiftkubeapiserver/patch.go @@ -79,10 +79,17 @@ func OpenShiftKubeAPIServerConfigPatch(genericConfig *genericapiserver.Config, k } // END HANDLER CHAIN + openshiftAPIServiceReachabilityCheck := newOpenshiftAPIServiceReachabilityCheck() + genericConfig.ReadyzChecks = append(genericConfig.ReadyzChecks, openshiftAPIServiceReachabilityCheck) + genericConfig.AddPostStartHookOrDie("openshift.io-startkubeinformers", func(context genericapiserver.PostStartHookContext) error { go openshiftInformers.Start(context.StopCh) return nil }) + genericConfig.AddPostStartHookOrDie("openshift.io-openshift-apiserver-reachable", func(context genericapiserver.PostStartHookContext) error { + go openshiftAPIServiceReachabilityCheck.checkForConnection(context) + return nil + }) enablement.AppendPostStartHooksOrDie(genericConfig) return nil diff --git a/openshift-kube-apiserver/openshiftkubeapiserver/sdn_readyz_wait.go b/openshift-kube-apiserver/openshiftkubeapiserver/sdn_readyz_wait.go new file mode 100644 index 0000000000000..3d8a86cf714c2 --- /dev/null +++ b/openshift-kube-apiserver/openshiftkubeapiserver/sdn_readyz_wait.go @@ -0,0 +1,126 @@ +package openshiftkubeapiserver + +import ( + gocontext "context" + "crypto/tls" + "fmt" + "net" + "net/http" + "net/http/httputil" + "time" + + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apimachinery/pkg/util/wait" + genericapiserver "k8s.io/apiserver/pkg/server" + "k8s.io/client-go/kubernetes" + "k8s.io/klog/v2" +) + +func newOpenshiftAPIServiceReachabilityCheck() *openshiftAPIServiceAvailabilityCheck { + return &openshiftAPIServiceAvailabilityCheck{done: make(chan struct{})} +} + +type openshiftAPIServiceAvailabilityCheck struct { + // done indicates that this check is complete (success or failure) and the check should return true + done chan struct{} +} + +func (c *openshiftAPIServiceAvailabilityCheck) Name() string { + return "openshift-apiservices-available" +} + +func (c *openshiftAPIServiceAvailabilityCheck) Check(req *http.Request) error { + select { + case <-c.done: + return nil + default: + return fmt.Errorf("check is not yet complete") + } +} + +func (c *openshiftAPIServiceAvailabilityCheck) checkForConnection(context genericapiserver.PostStartHookContext) { + defer utilruntime.HandleCrash() + + reachedOpenshiftAPIServer := make(chan struct{}) + noOpenshiftAPIServer := make(chan struct{}) + waitUntilCh := make(chan struct{}) + defer func() { + close(waitUntilCh) // this stops the endpoint check + close(c.done) // once this method is done, the ready check should return true + }() + start := time.Now() + + kubeClient, err := kubernetes.NewForConfig(context.LoopbackClientConfig) + if err != nil { + // shouldn't happen. this means the loopback config didn't work. + panic(err) + } + + // Start a thread which repeatedly tries to connect to any openshift-apiserver endpoint. + // 1. if the openshift-apiserver endpoint doesn't exist, logs a warning and reports ready + // 2. if a connection cannot be made, after 60 seconds logs an error and reports ready -- this avoids a rebootstrapping cycle + // 3. as soon as a connection can be made, logs a time to be ready and reports ready. + go func() { + defer utilruntime.HandleCrash() + + client := http.Client{ + Transport: &http.Transport{ + // since any http return code satisfies us, we don't bother to send credentials. + // we don't care about someone faking a response and we aren't sending credentials, so we don't check the server CA + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + }, + Timeout: 1 * time.Second, // these should all be very fast. if none work, we continue anyway. + } + + wait.PollImmediateUntil(1*time.Second, func() (bool, error) { + ctx := gocontext.TODO() + openshiftEndpoints, err := kubeClient.CoreV1().Endpoints("openshift-apiserver").Get(ctx, "api", metav1.GetOptions{}) + if apierrors.IsNotFound(err) { + // if we have no openshift apiserver endpoint, we have no reason to wait + klog.Warning("api.openshift-apiserver.svc endpoints were not found") + close(noOpenshiftAPIServer) + return true, nil + } + if err != nil { + utilruntime.HandleError(err) + return false, nil + } + for _, subset := range openshiftEndpoints.Subsets { + for _, address := range subset.Addresses { + url := fmt.Sprintf("https://%v", net.JoinHostPort(address.IP, "8443")) + resp, err := client.Get(url) + if err == nil { // any http response is fine. it means that we made contact + response, dumpErr := httputil.DumpResponse(resp, true) + klog.V(4).Infof("reached to connect to %q: %v\n%v", url, dumpErr, string(response)) + close(reachedOpenshiftAPIServer) + resp.Body.Close() + return true, nil + } + klog.V(2).Infof("failed to connect to %q: %v", url, err) + } + } + + return false, nil + }, waitUntilCh) + }() + + select { + case <-time.After(60 * time.Second): + // if we timeout, always return ok so that we can start from a case where all kube-apiservers are down and the SDN isn't coming up + utilruntime.HandleError(fmt.Errorf("openshift.io-openshift-apiserver-reachable never reached openshift apiservice")) + return + case <-context.StopCh: + utilruntime.HandleError(fmt.Errorf("openshift.io-openshift-apiserver-reachable interrupted")) + return + case <-noOpenshiftAPIServer: + utilruntime.HandleError(fmt.Errorf("openshift.io-openshift-apiserver-reachable did not find an openshift-apiserver endpoint")) + return + + case <-reachedOpenshiftAPIServer: + end := time.Now() + klog.Infof("reached openshift apiserver via SDN after %v milliseconds", end.Sub(start).Milliseconds()) + return + } +} From 384128d61c21d6630808066eeaca891ef59d544d Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:56:27 +0100 Subject: [PATCH 79/96] UPSTREAM: : don't use dynamic tokens for KCM be sure to drop this commit/`false` below in 4.7. The cloud credential operator is updating the issuer URL in 4.6 https://github.com/openshift/cloud-credential-operator/blob/8d54516/pkg/operator/oidcdiscoveryendpoint/controller.go#L244-L271 This causes the previously issued to tokens to be invalid. This transition should only happen in 4.6 and the name should be stabl-ish from 4.6 to 4.7, so we can go back to this dynamic client without issues. --- cmd/kube-controller-manager/app/controllermanager.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index c1574d2f3ab46..32dc5e125bfab 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -229,7 +229,11 @@ func Run(c *config.CompletedConfig, stopCh <-chan struct{}) error { klog.Warningf("--use-service-account-credentials was specified without providing a --service-account-private-key-file") } - if shouldTurnOnDynamicClient(c.Client) { + // TODO be sure to drop this commit/`false` below in 4.7. The cloud credential operator is updating the issuer URL in 4.6 + // https://github.com/openshift/cloud-credential-operator/blob/8d54516/pkg/operator/oidcdiscoveryendpoint/controller.go#L244-L271 + // This causes the previously issued to tokens to be invalid. This transition should only happen in 4.6 and the name should + // be stabl-ish from 4.6 to 4.7, so we can go back to this dynamic client without issues. + if false && shouldTurnOnDynamicClient(c.Client) { klog.V(1).Infof("using dynamic client builder") //Dynamic builder will use TokenRequest feature and refresh service account token periodically clientBuilder = controller.NewDynamicClientBuilder( From c4db7acec78dd2760835c28f9a02660d4b152bf9 Mon Sep 17 00:00:00 2001 From: Abu Kashem Date: Thu, 29 Oct 2020 13:56:27 +0100 Subject: [PATCH 80/96] UPSTREAM: 94134: Make similar buckets for api and etcd request duration histogram Make similar buckets for the apiserver_request_duration_seconds and the etcd_request_duration_seconds histogram so that the result is more comparable side by side. etcd_request_duration_seconds uses the default buckets provided by prometheus client library: DefBuckets = []float64{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10} apiserver_request_duration_seconds on the other hand uses more fine grained buckets, and the maximum bucket size is 60s. Both histograms should use similar bucket sizes so they are more comparable side by side. --- .../k8s.io/apiserver/pkg/storage/etcd3/metrics/metrics.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/metrics/metrics.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/metrics/metrics.go index a0de7e18cec66..4ba0b14fd182d 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/metrics/metrics.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/metrics/metrics.go @@ -35,8 +35,12 @@ import ( var ( etcdRequestLatency = compbasemetrics.NewHistogramVec( &compbasemetrics.HistogramOpts{ - Name: "etcd_request_duration_seconds", - Help: "Etcd request latency in seconds for each operation and object type.", + Name: "etcd_request_duration_seconds", + Help: "Etcd request latency in seconds for each operation and object type.", + // Keeping it similar to the buckets used by the apiserver_request_duration_seconds metric so that + // api latency and etcd latency can be more comparable side by side. + Buckets: []float64{.005, .01, .025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7, + 0.8, 0.9, 1.0, 1.25, 1.5, 1.75, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 40, 50, 60}, StabilityLevel: compbasemetrics.ALPHA, }, []string{"operation", "type"}, From 07eb50bba757e7a064d6a8118a83b92d133320e2 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Thu, 29 Oct 2020 13:56:28 +0100 Subject: [PATCH 81/96] UPSTREAM: 94614: e2e: fix deployment non-unique env vars to avoid SSA error --- test/e2e/apps/deployment.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/apps/deployment.go b/test/e2e/apps/deployment.go index 915ba28c069cd..1ef9508cd2ce7 100644 --- a/test/e2e/apps/deployment.go +++ b/test/e2e/apps/deployment.go @@ -560,7 +560,7 @@ func testIterativeDeployments(f *framework.Framework) { // trigger a new deployment framework.Logf("%02d: triggering a new rollout for deployment %q", i, deployment.Name) deployment, err = e2edeployment.UpdateDeploymentWithRetries(c, ns, deployment.Name, func(update *appsv1.Deployment) { - newEnv := v1.EnvVar{Name: "A", Value: fmt.Sprintf("%d", i)} + newEnv := v1.EnvVar{Name: fmt.Sprintf("A%d", i), Value: fmt.Sprintf("%d", i)} update.Spec.Template.Spec.Containers[0].Env = append(update.Spec.Template.Spec.Containers[0].Env, newEnv) randomScale(update, i) }) From d913d19cc5731427ab2834aa5c34cf47fc79a365 Mon Sep 17 00:00:00 2001 From: Lukasz Szaszkiewicz Date: Thu, 29 Oct 2020 13:56:28 +0100 Subject: [PATCH 82/96] UPSTREAM: 94589: fixes a data race in SerializeObject function --- .../handlers/responsewriters/writers.go | 6 +- .../handlers/responsewriters/writers_test.go | 93 ++++++++++++++++++- 2 files changed, 94 insertions(+), 5 deletions(-) diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/writers.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/writers.go index b7c59cfc54d8f..65cb389e517de 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/writers.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/writers.go @@ -96,9 +96,11 @@ func SerializeObject(mediaType string, encoder runtime.Encoder, hw http.Response err := encoder.Encode(object, w) if err == nil { err = w.Close() - if err == nil { - return + if err != nil { + // we cannot write an error to the writer anymore as the Encode call was successful. + utilruntime.HandleError(fmt.Errorf("apiserver was unable to close cleanly the response writer: %v", err)) } + return } // make a best effort to write the object if a failure is detected diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/writers_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/writers_test.go index 624b6becdffc9..ace0f0a70966d 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/writers_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters/writers_test.go @@ -20,6 +20,7 @@ import ( "bytes" "compress/gzip" "encoding/hex" + "errors" "fmt" "io" "io/ioutil" @@ -28,7 +29,7 @@ import ( "reflect" "testing" - "k8s.io/apimachinery/pkg/api/errors" + kerrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/diff" @@ -37,6 +38,76 @@ import ( featuregatetesting "k8s.io/component-base/featuregate/testing" ) +func TestSerializeObjectParallel(t *testing.T) { + largePayload := bytes.Repeat([]byte("0123456789abcdef"), defaultGzipThresholdBytes/16+1) + type test struct { + name string + + compressionEnabled bool + + mediaType string + out []byte + outErrs []error + req *http.Request + statusCode int + object runtime.Object + + wantCode int + wantHeaders http.Header + wantBody []byte + } + newTest := func() test { + return test{ + name: "compress on gzip", + compressionEnabled: true, + out: largePayload, + mediaType: "application/json", + req: &http.Request{Header: http.Header{ + "Accept-Encoding": []string{"gzip"}, + }}, + wantCode: http.StatusOK, + wantHeaders: http.Header{ + "Content-Type": []string{"application/json"}, + "Content-Encoding": []string{"gzip"}, + "Vary": []string{"Accept-Encoding"}, + }, + } + } + for i := 0; i < 100; i++ { + ctt := newTest() + t.Run(ctt.name, func(t *testing.T) { + defer func() { + if r := recover(); r != nil { + t.Fatalf("recovered from err %v", r) + } + }() + t.Parallel() + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.APIResponseCompression, ctt.compressionEnabled)() + + encoder := &fakeEncoder{ + buf: ctt.out, + errs: ctt.outErrs, + } + if ctt.statusCode == 0 { + ctt.statusCode = http.StatusOK + } + recorder := &fakeResponseRecorder{ + ResponseRecorder: httptest.NewRecorder(), + fe: encoder, + errorAfterEncoding: true, + } + SerializeObject(ctt.mediaType, encoder, recorder, ctt.req, ctt.statusCode, ctt.object) + result := recorder.Result() + if result.StatusCode != ctt.wantCode { + t.Fatalf("unexpected code: %v", result.StatusCode) + } + if !reflect.DeepEqual(result.Header, ctt.wantHeaders) { + t.Fatal(diff.ObjectReflectDiff(ctt.wantHeaders, result.Header)) + } + }) + } +} + func TestSerializeObject(t *testing.T) { smallPayload := []byte("{test-object,test-object}") largePayload := bytes.Repeat([]byte("0123456789abcdef"), defaultGzipThresholdBytes/16+1) @@ -111,7 +182,7 @@ func TestSerializeObject(t *testing.T) { { name: "fail to encode object or status with status code", out: smallPayload, - outErrs: []error{errors.NewNotFound(schema.GroupResource{}, "test"), fmt.Errorf("bad2")}, + outErrs: []error{kerrors.NewNotFound(schema.GroupResource{}, "test"), fmt.Errorf("bad2")}, mediaType: "application/json", req: &http.Request{Header: http.Header{}}, statusCode: http.StatusOK, @@ -123,7 +194,7 @@ func TestSerializeObject(t *testing.T) { { name: "fail to encode object or status with status code and keeps previous error", out: smallPayload, - outErrs: []error{errors.NewNotFound(schema.GroupResource{}, "test"), fmt.Errorf("bad2")}, + outErrs: []error{kerrors.NewNotFound(schema.GroupResource{}, "test"), fmt.Errorf("bad2")}, mediaType: "application/json", req: &http.Request{Header: http.Header{}}, statusCode: http.StatusNotAcceptable, @@ -270,10 +341,25 @@ func TestSerializeObject(t *testing.T) { } } +type fakeResponseRecorder struct { + *httptest.ResponseRecorder + fe *fakeEncoder + errorAfterEncoding bool +} + +func (frw *fakeResponseRecorder) Write(buf []byte) (int, error) { + if frw.errorAfterEncoding && frw.fe.encodeCalled { + return 0, errors.New("returning a requested error") + } + return frw.ResponseRecorder.Write(buf) +} + type fakeEncoder struct { obj runtime.Object buf []byte errs []error + + encodeCalled bool } func (e *fakeEncoder) Encode(obj runtime.Object, w io.Writer) error { @@ -284,6 +370,7 @@ func (e *fakeEncoder) Encode(obj runtime.Object, w io.Writer) error { return err } _, err := w.Write(e.buf) + e.encodeCalled = true return err } From 4fcdf7047bf5527504e38091c251b6264627c5c9 Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Thu, 29 Oct 2020 13:56:28 +0100 Subject: [PATCH 83/96] UPSTREAM: : Skip unit tests incompatible with openshift ci --- .../src/k8s.io/kubectl/pkg/cmd/config/config_test.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/config/config_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/config/config_test.go index c7648b113e315..85de3fd1a5935 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/config/config_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/config/config_test.go @@ -17,7 +17,6 @@ limitations under the License. package config import ( - "fmt" "io/ioutil" "os" "path" @@ -45,7 +44,11 @@ func newRedFederalCowHammerConfig() clientcmdapi.Config { } } +// It's not worth making this test compatible given that kubectl/oc is +// maintained in a separate branch of openshift/kubernetes. +/* func Example_view() { + expectedConfig := newRedFederalCowHammerConfig() test := configCommandTest{ args: []string{"view"}, @@ -74,6 +77,7 @@ func Example_view() { // user: // token: REDACTED } +*/ func TestCurrentContext(t *testing.T) { startingConfig := newRedFederalCowHammerConfig() @@ -87,6 +91,7 @@ func TestCurrentContext(t *testing.T) { } func TestSetCurrentContext(t *testing.T) { + expectedConfig := newRedFederalCowHammerConfig() startingConfig := newRedFederalCowHammerConfig() @@ -890,6 +895,11 @@ func (test configCommandTest) checkOutput(out string, expectedOutputs []string, } func (test configCommandTest) run(t *testing.T) string { + // It's not worth making these tests compatible given that + // kubectl/oc is maintained in a separate branch of + // openshift/kubernetes. + t.Skip("Not compatible with openshift ci") + out, actualConfig := testConfigCommand(test.args, test.startingConfig, t) testSetNilMapsToEmpties(reflect.ValueOf(&test.expectedConfig)) From 54d827c1a525b52117a0b97798dfd676bec8e6ca Mon Sep 17 00:00:00 2001 From: Hemant Kumar Date: Thu, 29 Oct 2020 13:56:29 +0100 Subject: [PATCH 84/96] UPSTREAM: 94144: Reduce offline volume expansion flake Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1867929 --- pkg/controller/volume/expand/BUILD | 1 + pkg/controller/volume/expand/expand_controller.go | 10 ++++++---- pkg/controller/volume/expand/expand_controller_test.go | 7 ++++++- test/e2e/storage/testsuites/volume_expand.go | 8 +++++++- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/pkg/controller/volume/expand/BUILD b/pkg/controller/volume/expand/BUILD index cd418bba620cd..798bdceb0bdcb 100644 --- a/pkg/controller/volume/expand/BUILD +++ b/pkg/controller/volume/expand/BUILD @@ -18,6 +18,7 @@ go_library( "//staging/src/k8s.io/api/authentication/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", diff --git a/pkg/controller/volume/expand/expand_controller.go b/pkg/controller/volume/expand/expand_controller.go index c81b3fdc89e71..7d4e833a55864 100644 --- a/pkg/controller/volume/expand/expand_controller.go +++ b/pkg/controller/volume/expand/expand_controller.go @@ -17,6 +17,7 @@ limitations under the License. package expand import ( + "context" "fmt" "net" "time" @@ -28,6 +29,7 @@ import ( authenticationv1 "k8s.io/api/authentication/v1" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" @@ -224,7 +226,7 @@ func (expc *expandController) syncHandler(key string) error { return err } - pv, err := getPersistentVolume(pvc, expc.pvLister) + pv, err := expc.getPersistentVolume(pvc) if err != nil { klog.V(5).Infof("Error getting Persistent Volume for PVC %q (uid: %q) from informer : %v", util.GetPersistentVolumeClaimQualifiedName(pvc), pvc.UID, err) return err @@ -335,12 +337,12 @@ func (expc *expandController) runWorker() { } } -func getPersistentVolume(pvc *v1.PersistentVolumeClaim, pvLister corelisters.PersistentVolumeLister) (*v1.PersistentVolume, error) { +func (expc *expandController) getPersistentVolume(pvc *v1.PersistentVolumeClaim) (*v1.PersistentVolume, error) { volumeName := pvc.Spec.VolumeName - pv, err := pvLister.Get(volumeName) + pv, err := expc.kubeClient.CoreV1().PersistentVolumes().Get(context.TODO(), volumeName, metav1.GetOptions{}) if err != nil { - return nil, fmt.Errorf("failed to find PV %q in PV informer cache with error : %v", volumeName, err) + return nil, fmt.Errorf("failed to get PV %q: %v", volumeName, err) } return pv.DeepCopy(), nil diff --git a/pkg/controller/volume/expand/expand_controller_test.go b/pkg/controller/volume/expand/expand_controller_test.go index 1ddc70a1592c9..e0d0a52c7c417 100644 --- a/pkg/controller/volume/expand/expand_controller_test.go +++ b/pkg/controller/volume/expand/expand_controller_test.go @@ -23,7 +23,7 @@ import ( "regexp" "testing" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" storagev1 "k8s.io/api/storage/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -147,6 +147,11 @@ func TestSyncHandler(t *testing.T) { return nil, nil }) + if test.pv != nil { + fakeKubeClient.AddReactor("get", "persistentvolumes", func(action coretesting.Action) (bool, runtime.Object, error) { + return true, test.pv, nil + }) + } fakeKubeClient.AddReactor("patch", "persistentvolumeclaims", func(action coretesting.Action) (bool, runtime.Object, error) { if action.GetSubresource() == "status" { patchActionaction, _ := action.(coretesting.PatchAction) diff --git a/test/e2e/storage/testsuites/volume_expand.go b/test/e2e/storage/testsuites/volume_expand.go index 42e5253aa75b1..c77540ea4aa47 100644 --- a/test/e2e/storage/testsuites/volume_expand.go +++ b/test/e2e/storage/testsuites/volume_expand.go @@ -42,6 +42,12 @@ const ( resizePollInterval = 2 * time.Second // total time to wait for cloudprovider or file system resize to finish totalResizeWaitPeriod = 10 * time.Minute + + // resizedPodStartupTimeout defines time we should wait for pod that uses offline + // resized volume to startup. This time is higher than default PodStartTimeout because + // typically time to detach and then attach a volume is amortized in this time duration. + resizedPodStartupTimeout = 10 * time.Minute + // time to wait for PVC conditions to sync pvcConditionSyncPeriod = 2 * time.Minute ) @@ -214,7 +220,7 @@ func (v *volumeExpandTestSuite) DefineTests(driver TestDriver, pattern testpatte SeLinuxLabel: e2epv.SELinuxLabel, NodeSelection: l.config.ClientNodeSelection, } - l.pod2, err = e2epod.CreateSecPodWithNodeSelection(f.ClientSet, &podConfig, framework.PodStartTimeout) + l.pod2, err = e2epod.CreateSecPodWithNodeSelection(f.ClientSet, &podConfig, resizedPodStartupTimeout) defer func() { err = e2epod.DeletePodWithWait(f.ClientSet, l.pod2) framework.ExpectNoError(err, "while cleaning up pod before exiting resizing test") From 26aa79560d77cb6e080612b3dcc6c7642f60fa39 Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Thu, 10 Sep 2020 16:46:51 -0700 Subject: [PATCH 85/96] UPSTREAM: : Stop ignoring test/e2e/generated/bindata.go This needs to be maintained can committed in our fork so that it can be vendored by origin. UPSTREAM: : (squash) Stop ignoring generated openapi definitions openshift/origin needs to be able to vendor these definitions so they need to be committed. Should be squashed with UPSTREAM: : Stop ignoring test/e2e/generated/bindata.go --- hack/make-rules/clean.sh | 1 - pkg/generated/openapi/.gitignore | 3 +++ test/e2e/generated/.gitignore | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 pkg/generated/openapi/.gitignore create mode 100644 test/e2e/generated/.gitignore diff --git a/hack/make-rules/clean.sh b/hack/make-rules/clean.sh index 9305c8df6c2a1..9a3f2e9c513a9 100755 --- a/hack/make-rules/clean.sh +++ b/hack/make-rules/clean.sh @@ -25,7 +25,6 @@ CLEAN_PATTERNS=( "_tmp" "doc_tmp" "((?!staging\/src\/k8s\.io\/apiextensions-apiserver\/pkg\/generated\/openapi).)*/zz_generated.openapi.go" - "test/e2e/generated/bindata.go" ) for pattern in "${CLEAN_PATTERNS[@]}"; do diff --git a/pkg/generated/openapi/.gitignore b/pkg/generated/openapi/.gitignore new file mode 100644 index 0000000000000..94138bddbae8f --- /dev/null +++ b/pkg/generated/openapi/.gitignore @@ -0,0 +1,3 @@ +# Ensure that openapi definitions are not ignored to ensure that +# openshift/origin can vendor them. +!zz_generated.openapi.go diff --git a/test/e2e/generated/.gitignore b/test/e2e/generated/.gitignore new file mode 100644 index 0000000000000..78d1d4e5edd7d --- /dev/null +++ b/test/e2e/generated/.gitignore @@ -0,0 +1,2 @@ +# Ensure that bindata is not ignored to ensure openshift/origin can vendor it. +!bindata.go From 72784904f1c615574f336fff1e4f040b90916f5a Mon Sep 17 00:00:00 2001 From: Maciej Szulik Date: Thu, 29 Oct 2020 13:56:29 +0100 Subject: [PATCH 86/96] UPSTREAM: 94609: Use namespace flag passed to RunKubectl* methods --- test/e2e/apps/statefulset.go | 12 +- test/e2e/examples.go | 13 +- test/e2e/framework/ingress/ingress_utils.go | 10 +- test/e2e/framework/kubectl/kubectl_utils.go | 3 + test/e2e/framework/util.go | 12 +- test/e2e/kubectl/kubectl.go | 197 +++++++++----------- test/e2e/storage/testsuites/subpath.go | 2 +- test/e2e/storage/vsphere/vsphere_utils.go | 6 +- test/e2e/upgrades/cassandra.go | 2 +- test/e2e/upgrades/etcd.go | 2 +- test/e2e/upgrades/mysql.go | 2 +- 11 files changed, 116 insertions(+), 145 deletions(-) diff --git a/test/e2e/apps/statefulset.go b/test/e2e/apps/statefulset.go index f89d5cc5f1c7f..b136689fb1ca9 100644 --- a/test/e2e/apps/statefulset.go +++ b/test/e2e/apps/statefulset.go @@ -981,18 +981,16 @@ func (z *zookeeperTester) deploy(ns string) *appsv1.StatefulSet { func (z *zookeeperTester) write(statefulPodIndex int, kv map[string]string) { name := fmt.Sprintf("%v-%d", z.ss.Name, statefulPodIndex) - ns := fmt.Sprintf("--namespace=%v", z.ss.Namespace) for k, v := range kv { cmd := fmt.Sprintf("/opt/zookeeper/bin/zkCli.sh create /%v %v", k, v) - framework.Logf(framework.RunKubectlOrDie(z.ss.Namespace, "exec", ns, name, "--", "/bin/sh", "-c", cmd)) + framework.Logf(framework.RunKubectlOrDie(z.ss.Namespace, "exec", name, "--", "/bin/sh", "-c", cmd)) } } func (z *zookeeperTester) read(statefulPodIndex int, key string) string { name := fmt.Sprintf("%v-%d", z.ss.Name, statefulPodIndex) - ns := fmt.Sprintf("--namespace=%v", z.ss.Namespace) cmd := fmt.Sprintf("/opt/zookeeper/bin/zkCli.sh get /%v", key) - return lastLine(framework.RunKubectlOrDie(z.ss.Namespace, "exec", ns, name, "--", "/bin/sh", "-c", cmd)) + return lastLine(framework.RunKubectlOrDie(z.ss.Namespace, "exec", name, "--", "/bin/sh", "-c", cmd)) } type mysqlGaleraTester struct { @@ -1009,7 +1007,7 @@ func (m *mysqlGaleraTester) mysqlExec(cmd, ns, podName string) string { // TODO: Find a readiness probe for mysql that guarantees writes will // succeed and ditch retries. Current probe only reads, so there's a window // for a race. - return kubectlExecWithRetries(ns, fmt.Sprintf("--namespace=%v", ns), "exec", podName, "--", "/bin/sh", "-c", cmd) + return kubectlExecWithRetries(ns, "exec", podName, "--", "/bin/sh", "-c", cmd) } func (m *mysqlGaleraTester) deploy(ns string) *appsv1.StatefulSet { @@ -1049,7 +1047,7 @@ func (m *redisTester) name() string { func (m *redisTester) redisExec(cmd, ns, podName string) string { cmd = fmt.Sprintf("/opt/redis/redis-cli -h %v %v", podName, cmd) - return framework.RunKubectlOrDie(ns, fmt.Sprintf("--namespace=%v", ns), "exec", podName, "--", "/bin/sh", "-c", cmd) + return framework.RunKubectlOrDie(ns, "exec", podName, "--", "/bin/sh", "-c", cmd) } func (m *redisTester) deploy(ns string) *appsv1.StatefulSet { @@ -1080,7 +1078,7 @@ func (c *cockroachDBTester) name() string { func (c *cockroachDBTester) cockroachDBExec(cmd, ns, podName string) string { cmd = fmt.Sprintf("/cockroach/cockroach sql --insecure --host %s.cockroachdb -e \"%v\"", podName, cmd) - return framework.RunKubectlOrDie(ns, fmt.Sprintf("--namespace=%v", ns), "exec", podName, "--", "/bin/sh", "-c", cmd) + return framework.RunKubectlOrDie(ns, "exec", podName, "--", "/bin/sh", "-c", cmd) } func (c *cockroachDBTester) deploy(ns string) *appsv1.StatefulSet { diff --git a/test/e2e/examples.go b/test/e2e/examples.go index 4e030bdb2404b..599725728d58c 100644 --- a/test/e2e/examples.go +++ b/test/e2e/examples.go @@ -68,10 +68,9 @@ var _ = framework.KubeDescribe("[Feature:Example]", func() { test := "test/fixtures/doc-yaml/user-guide/liveness" execYaml := readFile(test, "exec-liveness.yaml.in") httpYaml := readFile(test, "http-liveness.yaml.in") - nsFlag := fmt.Sprintf("--namespace=%v", ns) - framework.RunKubectlOrDieInput(ns, execYaml, "create", "-f", "-", nsFlag) - framework.RunKubectlOrDieInput(ns, httpYaml, "create", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, execYaml, "create", "-f", "-") + framework.RunKubectlOrDieInput(ns, httpYaml, "create", "-f", "-") // Since both containers start rapidly, we can easily run this test in parallel. var wg sync.WaitGroup @@ -117,12 +116,11 @@ var _ = framework.KubeDescribe("[Feature:Example]", func() { secretYaml := readFile(test, "secret.yaml") podYaml := readFile(test, "secret-pod.yaml.in") - nsFlag := fmt.Sprintf("--namespace=%v", ns) podName := "secret-test-pod" ginkgo.By("creating secret and pod") - framework.RunKubectlOrDieInput(ns, secretYaml, "create", "-f", "-", nsFlag) - framework.RunKubectlOrDieInput(ns, podYaml, "create", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, secretYaml, "create", "-f", "-") + framework.RunKubectlOrDieInput(ns, podYaml, "create", "-f", "-") err := e2epod.WaitForPodNoLongerRunningInNamespace(c, podName, ns) framework.ExpectNoError(err) @@ -136,11 +134,10 @@ var _ = framework.KubeDescribe("[Feature:Example]", func() { ginkgo.It("should create a pod that prints his name and namespace", func() { test := "test/fixtures/doc-yaml/user-guide/downward-api" podYaml := readFile(test, "dapi-pod.yaml.in") - nsFlag := fmt.Sprintf("--namespace=%v", ns) podName := "dapi-test-pod" ginkgo.By("creating the pod") - framework.RunKubectlOrDieInput(ns, podYaml, "create", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, podYaml, "create", "-f", "-") err := e2epod.WaitForPodNoLongerRunningInNamespace(c, podName, ns) framework.ExpectNoError(err) diff --git a/test/e2e/framework/ingress/ingress_utils.go b/test/e2e/framework/ingress/ingress_utils.go index ebe8d096826cf..8328e2a299594 100644 --- a/test/e2e/framework/ingress/ingress_utils.go +++ b/test/e2e/framework/ingress/ingress_utils.go @@ -460,10 +460,10 @@ func (j *TestJig) CreateIngress(manifestPath, ns string, ingAnnotations map[stri } j.Logger.Infof("creating replication controller") - framework.RunKubectlOrDieInput(ns, read("rc.yaml"), "create", "-f", "-", fmt.Sprintf("--namespace=%v", ns)) + framework.RunKubectlOrDieInput(ns, read("rc.yaml"), "create", "-f", "-") j.Logger.Infof("creating service") - framework.RunKubectlOrDieInput(ns, read("svc.yaml"), "create", "-f", "-", fmt.Sprintf("--namespace=%v", ns)) + framework.RunKubectlOrDieInput(ns, read("svc.yaml"), "create", "-f", "-") if len(svcAnnotations) > 0 { svcList, err := j.Client.CoreV1().Services(ns).List(context.TODO(), metav1.ListOptions{}) framework.ExpectNoError(err) @@ -476,7 +476,7 @@ func (j *TestJig) CreateIngress(manifestPath, ns string, ingAnnotations map[stri if exists("secret.yaml") { j.Logger.Infof("creating secret") - framework.RunKubectlOrDieInput(ns, read("secret.yaml"), "create", "-f", "-", fmt.Sprintf("--namespace=%v", ns)) + framework.RunKubectlOrDieInput(ns, read("secret.yaml"), "create", "-f", "-") } j.Logger.Infof("Parsing ingress from %v", filepath.Join(manifestPath, "ing.yaml")) @@ -569,7 +569,7 @@ func (j *TestJig) runUpdate(ing *networkingv1beta1.Ingress) (*networkingv1beta1. func DescribeIng(ns string) { framework.Logf("\nOutput of kubectl describe ing:\n") desc, _ := framework.RunKubectl( - ns, "describe", "ing", fmt.Sprintf("--namespace=%v", ns)) + ns, "describe", "ing") framework.Logf(desc) } @@ -1034,7 +1034,7 @@ func (cont *NginxIngressController) Init() { } framework.Logf("initializing nginx ingress controller") - framework.RunKubectlOrDieInput(cont.Ns, read("rc.yaml"), "create", "-f", "-", fmt.Sprintf("--namespace=%v", cont.Ns)) + framework.RunKubectlOrDieInput(cont.Ns, read("rc.yaml"), "create", "-f", "-") rc, err := cont.Client.CoreV1().ReplicationControllers(cont.Ns).Get(context.TODO(), "nginx-ingress-controller", metav1.GetOptions{}) framework.ExpectNoError(err) diff --git a/test/e2e/framework/kubectl/kubectl_utils.go b/test/e2e/framework/kubectl/kubectl_utils.go index 0449fc6404976..d6765d23b4733 100644 --- a/test/e2e/framework/kubectl/kubectl_utils.go +++ b/test/e2e/framework/kubectl/kubectl_utils.go @@ -86,6 +86,9 @@ func (tk *TestKubeconfig) KubectlCmd(args ...string) *exec.Cmd { fmt.Sprintf("--client-key=%s", filepath.Join(tk.CertDir, "kubecfg.key"))) } } + if tk.Namespace != "" { + defaultArgs = append(defaultArgs, fmt.Sprintf("--namespace=%s", tk.Namespace)) + } kubectlArgs := append(defaultArgs, args...) //We allow users to specify path to kubectl, so you can test either "kubectl" or "cluster/kubectl.sh" diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index 03cea61e33e79..c5831027faa77 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -1066,13 +1066,13 @@ func NodeHasTaint(c clientset.Interface, nodeName string, taint *v1.Taint) (bool // RunHostCmd runs the given cmd in the context of the given pod using `kubectl exec` // inside of a shell. func RunHostCmd(ns, name, cmd string) (string, error) { - return RunKubectl(ns, "exec", fmt.Sprintf("--namespace=%v", ns), name, "--", "/bin/sh", "-x", "-c", cmd) + return RunKubectl(ns, "exec", name, "--", "/bin/sh", "-x", "-c", cmd) } // RunHostCmdWithFullOutput runs the given cmd in the context of the given pod using `kubectl exec` // inside of a shell. It will also return the command's stderr. func RunHostCmdWithFullOutput(ns, name, cmd string) (string, string, error) { - return RunKubectlWithFullOutput(ns, "exec", fmt.Sprintf("--namespace=%v", ns), name, "--", "/bin/sh", "-x", "-c", cmd) + return RunKubectlWithFullOutput(ns, "exec", name, "--", "/bin/sh", "-x", "-c", cmd) } // RunHostCmdOrDie calls RunHostCmd and dies on error. @@ -1150,7 +1150,7 @@ func AllNodesReady(c clientset.Interface, timeout time.Duration) error { // LookForStringInLog looks for the given string in the log of a specific pod container func LookForStringInLog(ns, podName, container, expectedString string, timeout time.Duration) (result string, err error) { return lookForString(expectedString, timeout, func() string { - return RunKubectlOrDie(ns, "logs", podName, container, fmt.Sprintf("--namespace=%v", ns)) + return RunKubectlOrDie(ns, "logs", podName, container) }) } @@ -1276,7 +1276,7 @@ func GetAllMasterAddresses(c clientset.Interface) []string { // CreateEmptyFileOnPod creates empty file at given path on the pod. // TODO(alejandrox1): move to subpkg pod once kubectl methods have been refactored. func CreateEmptyFileOnPod(namespace string, podName string, filePath string) error { - _, err := RunKubectl(namespace, "exec", fmt.Sprintf("--namespace=%s", namespace), podName, "--", "/bin/sh", "-c", fmt.Sprintf("touch %s", filePath)) + _, err := RunKubectl(namespace, "exec", podName, "--", "/bin/sh", "-c", fmt.Sprintf("touch %s", filePath)) return err } @@ -1284,10 +1284,10 @@ func CreateEmptyFileOnPod(namespace string, podName string, filePath string) err func DumpDebugInfo(c clientset.Interface, ns string) { sl, _ := c.CoreV1().Pods(ns).List(context.TODO(), metav1.ListOptions{LabelSelector: labels.Everything().String()}) for _, s := range sl.Items { - desc, _ := RunKubectl(ns, "describe", "po", s.Name, fmt.Sprintf("--namespace=%v", ns)) + desc, _ := RunKubectl(ns, "describe", "po", s.Name) Logf("\nOutput of kubectl describe %v:\n%v", s.Name, desc) - l, _ := RunKubectl(ns, "logs", s.Name, fmt.Sprintf("--namespace=%v", ns), "--tail=100") + l, _ := RunKubectl(ns, "logs", s.Name, "--tail=100") Logf("\nLast 100 log lines of %v:\n%v", s.Name, l) } } diff --git a/test/e2e/kubectl/kubectl.go b/test/e2e/kubectl/kubectl.go index 3107b6f26e57f..1127900a47bed 100644 --- a/test/e2e/kubectl/kubectl.go +++ b/test/e2e/kubectl/kubectl.go @@ -322,7 +322,7 @@ var _ = SIGDescribe("Kubectl client", func() { defer cleanupKubectlInputs(nautilus, ns, updateDemoSelector) ginkgo.By("creating a replication controller") - framework.RunKubectlOrDieInput(ns, nautilus, "create", "-f", "-", fmt.Sprintf("--namespace=%v", ns)) + framework.RunKubectlOrDieInput(ns, nautilus, "create", "-f", "-") validateController(c, nautilusImage, 2, "update-demo", updateDemoSelector, getUDData("nautilus.jpg", ns), ns) }) @@ -335,15 +335,15 @@ var _ = SIGDescribe("Kubectl client", func() { defer cleanupKubectlInputs(nautilus, ns, updateDemoSelector) ginkgo.By("creating a replication controller") - framework.RunKubectlOrDieInput(ns, nautilus, "create", "-f", "-", fmt.Sprintf("--namespace=%v", ns)) + framework.RunKubectlOrDieInput(ns, nautilus, "create", "-f", "-") validateController(c, nautilusImage, 2, "update-demo", updateDemoSelector, getUDData("nautilus.jpg", ns), ns) ginkgo.By("scaling down the replication controller") debugDiscovery() - framework.RunKubectlOrDie(ns, "scale", "rc", "update-demo-nautilus", "--replicas=1", "--timeout=5m", fmt.Sprintf("--namespace=%v", ns)) + framework.RunKubectlOrDie(ns, "scale", "rc", "update-demo-nautilus", "--replicas=1", "--timeout=5m") validateController(c, nautilusImage, 1, "update-demo", updateDemoSelector, getUDData("nautilus.jpg", ns), ns) ginkgo.By("scaling up the replication controller") debugDiscovery() - framework.RunKubectlOrDie(ns, "scale", "rc", "update-demo-nautilus", "--replicas=2", "--timeout=5m", fmt.Sprintf("--namespace=%v", ns)) + framework.RunKubectlOrDie(ns, "scale", "rc", "update-demo-nautilus", "--replicas=2", "--timeout=5m") validateController(c, nautilusImage, 2, "update-demo", updateDemoSelector, getUDData("nautilus.jpg", ns), ns) }) }) @@ -380,7 +380,7 @@ var _ = SIGDescribe("Kubectl client", func() { ginkgo.By("creating all guestbook components") forEachGBFile(func(contents string) { framework.Logf(contents) - framework.RunKubectlOrDieInput(ns, contents, "create", "-f", "-", fmt.Sprintf("--namespace=%v", ns)) + framework.RunKubectlOrDieInput(ns, contents, "create", "-f", "-") }) ginkgo.By("validating guestbook app") @@ -393,7 +393,7 @@ var _ = SIGDescribe("Kubectl client", func() { ginkgo.BeforeEach(func() { ginkgo.By(fmt.Sprintf("creating the pod from %v", podYaml)) podYaml = commonutils.SubstituteImageName(string(readTestFileOrDie("pod-with-readiness-probe.yaml.in"))) - framework.RunKubectlOrDieInput(ns, podYaml, "create", "-f", "-", fmt.Sprintf("--namespace=%v", ns)) + framework.RunKubectlOrDieInput(ns, podYaml, "create", "-f", "-") framework.ExpectEqual(e2epod.CheckPodsRunningReady(c, ns, []string{simplePodName}, framework.PodStartTimeout), true) }) ginkgo.AfterEach(func() { @@ -402,7 +402,7 @@ var _ = SIGDescribe("Kubectl client", func() { ginkgo.It("should support exec", func() { ginkgo.By("executing a command in the container") - execOutput := framework.RunKubectlOrDie(ns, "exec", fmt.Sprintf("--namespace=%v", ns), simplePodName, "echo", "running", "in", "container") + execOutput := framework.RunKubectlOrDie(ns, "exec", simplePodName, "echo", "running", "in", "container") if e, a := "running in container", strings.TrimSpace(execOutput); e != a { framework.Failf("Unexpected kubectl exec output. Wanted %q, got %q", e, a) } @@ -412,11 +412,11 @@ var _ = SIGDescribe("Kubectl client", func() { for i := 0; i < len(veryLongData); i++ { veryLongData[i] = 'a' } - execOutput = framework.RunKubectlOrDie(ns, "exec", fmt.Sprintf("--namespace=%v", ns), simplePodName, "echo", string(veryLongData)) + execOutput = framework.RunKubectlOrDie(ns, "exec", simplePodName, "echo", string(veryLongData)) framework.ExpectEqual(string(veryLongData), strings.TrimSpace(execOutput), "Unexpected kubectl exec output") ginkgo.By("executing a command in the container with noninteractive stdin") - execOutput = framework.NewKubectlCommand(ns, "exec", fmt.Sprintf("--namespace=%v", ns), "-i", simplePodName, "cat"). + execOutput = framework.NewKubectlCommand(ns, "exec", "-i", simplePodName, "cat"). WithStdinData("abcd1234"). ExecOrDie(ns) if e, a := "abcd1234", execOutput; e != a { @@ -432,7 +432,7 @@ var _ = SIGDescribe("Kubectl client", func() { defer closer.Close() ginkgo.By("executing a command in the container with pseudo-interactive stdin") - execOutput = framework.NewKubectlCommand(ns, "exec", fmt.Sprintf("--namespace=%v", ns), "-i", simplePodName, "sh"). + execOutput = framework.NewKubectlCommand(ns, "exec", "-i", simplePodName, "sh"). WithStdinReader(r). ExecOrDie(ns) if e, a := "hi", strings.TrimSpace(execOutput); e != a { @@ -442,7 +442,7 @@ var _ = SIGDescribe("Kubectl client", func() { ginkgo.It("should support exec using resource/name", func() { ginkgo.By("executing a command in the container") - execOutput := framework.RunKubectlOrDie(ns, "exec", fmt.Sprintf("--namespace=%v", ns), simplePodResourceName, "echo", "running", "in", "container") + execOutput := framework.RunKubectlOrDie(ns, "exec", simplePodResourceName, "echo", "running", "in", "container") if e, a := "running in container", strings.TrimSpace(execOutput); e != a { framework.Failf("Unexpected kubectl exec output. Wanted %q, got %q", e, a) } @@ -509,30 +509,28 @@ var _ = SIGDescribe("Kubectl client", func() { }) ginkgo.It("should return command exit codes", func() { - nsFlag := fmt.Sprintf("--namespace=%v", ns) - ginkgo.By("execing into a container with a successful command") - _, err := framework.NewKubectlCommand(ns, nsFlag, "exec", "httpd", "--", "/bin/sh", "-c", "exit 0").Exec() + _, err := framework.NewKubectlCommand(ns, "exec", "httpd", "--", "/bin/sh", "-c", "exit 0").Exec() framework.ExpectNoError(err) ginkgo.By("execing into a container with a failing command") - _, err = framework.NewKubectlCommand(ns, nsFlag, "exec", "httpd", "--", "/bin/sh", "-c", "exit 42").Exec() + _, err = framework.NewKubectlCommand(ns, "exec", "httpd", "--", "/bin/sh", "-c", "exit 42").Exec() ee, ok := err.(uexec.ExitError) framework.ExpectEqual(ok, true) framework.ExpectEqual(ee.ExitStatus(), 42) ginkgo.By("running a successful command") - _, err = framework.NewKubectlCommand(ns, nsFlag, "run", "-i", "--image="+busyboxImage, "--restart=Never", "success", "--", "/bin/sh", "-c", "exit 0").Exec() + _, err = framework.NewKubectlCommand(ns, "run", "-i", "--image="+busyboxImage, "--restart=Never", "success", "--", "/bin/sh", "-c", "exit 0").Exec() framework.ExpectNoError(err) ginkgo.By("running a failing command") - _, err = framework.NewKubectlCommand(ns, nsFlag, "run", "-i", "--image="+busyboxImage, "--restart=Never", "failure-1", "--", "/bin/sh", "-c", "exit 42").Exec() + _, err = framework.NewKubectlCommand(ns, "run", "-i", "--image="+busyboxImage, "--restart=Never", "failure-1", "--", "/bin/sh", "-c", "exit 42").Exec() ee, ok = err.(uexec.ExitError) framework.ExpectEqual(ok, true) framework.ExpectEqual(ee.ExitStatus(), 42) ginkgo.By("running a failing command without --restart=Never") - _, err = framework.NewKubectlCommand(ns, nsFlag, "run", "-i", "--image="+busyboxImage, "--restart=OnFailure", "failure-2", "--", "/bin/sh", "-c", "cat && exit 42"). + _, err = framework.NewKubectlCommand(ns, "run", "-i", "--image="+busyboxImage, "--restart=OnFailure", "failure-2", "--", "/bin/sh", "-c", "cat && exit 42"). WithStdinData("abcd1234"). Exec() ee, ok = err.(uexec.ExitError) @@ -542,7 +540,7 @@ var _ = SIGDescribe("Kubectl client", func() { } ginkgo.By("running a failing command without --restart=Never, but with --rm") - _, err = framework.NewKubectlCommand(ns, nsFlag, "run", "-i", "--image="+busyboxImage, "--restart=OnFailure", "--rm", "failure-3", "--", "/bin/sh", "-c", "cat && exit 42"). + _, err = framework.NewKubectlCommand(ns, "run", "-i", "--image="+busyboxImage, "--restart=OnFailure", "--rm", "failure-3", "--", "/bin/sh", "-c", "cat && exit 42"). WithStdinData("abcd1234"). Exec() ee, ok = err.(uexec.ExitError) @@ -553,18 +551,16 @@ var _ = SIGDescribe("Kubectl client", func() { e2epod.WaitForPodToDisappear(f.ClientSet, ns, "failure-3", labels.Everything(), 2*time.Second, wait.ForeverTestTimeout) ginkgo.By("running a failing command with --leave-stdin-open") - _, err = framework.NewKubectlCommand(ns, nsFlag, "run", "-i", "--image="+busyboxImage, "--restart=Never", "failure-4", "--leave-stdin-open", "--", "/bin/sh", "-c", "exit 42"). + _, err = framework.NewKubectlCommand(ns, "run", "-i", "--image="+busyboxImage, "--restart=Never", "failure-4", "--leave-stdin-open", "--", "/bin/sh", "-c", "exit 42"). WithStdinData("abcd1234"). Exec() framework.ExpectNoError(err) }) ginkgo.It("should support inline execution and attach", func() { - nsFlag := fmt.Sprintf("--namespace=%v", ns) - ginkgo.By("executing a command with run and attach with stdin") // We wait for a non-empty line so we know kubectl has attached - runOutput := framework.NewKubectlCommand(ns, nsFlag, "run", "run-test", "--image="+busyboxImage, "--restart=OnFailure", "--attach=true", "--stdin", "--", "sh", "-c", "while [ -z \"$s\" ]; do read s; sleep 1; done; echo read:$s && cat && echo 'stdin closed'"). + runOutput := framework.NewKubectlCommand(ns, "run", "run-test", "--image="+busyboxImage, "--restart=OnFailure", "--attach=true", "--stdin", "--", "sh", "-c", "while [ -z \"$s\" ]; do read s; sleep 1; done; echo read:$s && cat && echo 'stdin closed'"). WithStdinData("value\nabcd1234"). ExecOrDie(ns) gomega.Expect(runOutput).To(gomega.ContainSubstring("read:value")) @@ -579,7 +575,7 @@ var _ = SIGDescribe("Kubectl client", func() { // "stdin closed", but hasn't exited yet. // We wait 10 seconds before printing to give time to kubectl to attach // to the container, this does not solve the race though. - runOutput = framework.NewKubectlCommand(ns, fmt.Sprintf("--namespace=%v", ns), "run", "run-test-2", "--image="+busyboxImage, "--restart=OnFailure", "--attach=true", "--leave-stdin-open=true", "--", "sh", "-c", "sleep 10; cat && echo 'stdin closed'"). + runOutput = framework.NewKubectlCommand(ns, "run", "run-test-2", "--image="+busyboxImage, "--restart=OnFailure", "--attach=true", "--leave-stdin-open=true", "--", "sh", "-c", "sleep 10; cat && echo 'stdin closed'"). WithStdinData("abcd1234"). ExecOrDie(ns) gomega.Expect(runOutput).ToNot(gomega.ContainSubstring("abcd1234")) @@ -588,7 +584,7 @@ var _ = SIGDescribe("Kubectl client", func() { gomega.Expect(c.CoreV1().Pods(ns).Delete(context.TODO(), "run-test-2", metav1.DeleteOptions{})).To(gomega.BeNil()) ginkgo.By("executing a command with run and attach with stdin with open stdin should remain running") - runOutput = framework.NewKubectlCommand(ns, nsFlag, "run", "run-test-3", "--image="+busyboxImage, "--restart=OnFailure", "--attach=true", "--leave-stdin-open=true", "--stdin", "--", "sh", "-c", "cat && echo 'stdin closed'"). + runOutput = framework.NewKubectlCommand(ns, "run", "run-test-3", "--image="+busyboxImage, "--restart=OnFailure", "--attach=true", "--leave-stdin-open=true", "--stdin", "--", "sh", "-c", "cat && echo 'stdin closed'"). WithStdinData("abcd1234\n"). ExecOrDie(ns) gomega.Expect(runOutput).ToNot(gomega.ContainSubstring("stdin closed")) @@ -605,7 +601,7 @@ var _ = SIGDescribe("Kubectl client", func() { if !e2epod.CheckPodsRunningReady(c, ns, []string{runTestPod.Name}, 1*time.Second) { framework.Failf("Pod %q of Job %q should still be running", runTestPod.Name, "run-test-3") } - logOutput := framework.RunKubectlOrDie(ns, nsFlag, "logs", runTestPod.Name) + logOutput := framework.RunKubectlOrDie(ns, "logs", runTestPod.Name) gomega.Expect(logOutput).ToNot(gomega.ContainSubstring("stdin closed")) return strings.Contains(logOutput, "abcd1234"), nil }) @@ -615,17 +611,16 @@ var _ = SIGDescribe("Kubectl client", func() { }) ginkgo.It("should contain last line of the log", func() { - nsFlag := fmt.Sprintf("--namespace=%v", ns) podName := "run-log-test" ginkgo.By("executing a command with run") - framework.RunKubectlOrDie(ns, "run", podName, "--image="+busyboxImage, "--restart=OnFailure", nsFlag, "--", "sh", "-c", "sleep 10; seq 100 | while read i; do echo $i; sleep 0.01; done; echo EOF") + framework.RunKubectlOrDie(ns, "run", podName, "--image="+busyboxImage, "--restart=OnFailure", "--", "sh", "-c", "sleep 10; seq 100 | while read i; do echo $i; sleep 0.01; done; echo EOF") if !e2epod.CheckPodsRunningReadyOrSucceeded(c, ns, []string{podName}, framework.PodStartTimeout) { framework.Failf("Pod for run-log-test was not ready") } - logOutput := framework.RunKubectlOrDie(ns, nsFlag, "logs", "-f", "run-log-test") + logOutput := framework.RunKubectlOrDie(ns, "logs", "-f", "run-log-test") gomega.Expect(logOutput).To(gomega.ContainSubstring("EOF")) }) @@ -807,12 +802,11 @@ metadata: ginkgo.It("should apply a new configuration to an existing RC", func() { controllerJSON := commonutils.SubstituteImageName(string(readTestFileOrDie(agnhostControllerFilename))) - nsFlag := fmt.Sprintf("--namespace=%v", ns) ginkgo.By("creating Agnhost RC") - framework.RunKubectlOrDieInput(ns, controllerJSON, "create", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, controllerJSON, "create", "-f", "-") ginkgo.By("applying a modified configuration") stdin := modifyReplicationControllerConfiguration(controllerJSON) - framework.NewKubectlCommand(ns, "apply", "-f", "-", nsFlag). + framework.NewKubectlCommand(ns, "apply", "-f", "-"). WithStdinReader(stdin). ExecOrDie(ns) ginkgo.By("checking the result") @@ -820,19 +814,18 @@ metadata: }) ginkgo.It("should reuse port when apply to an existing SVC", func() { serviceJSON := readTestFileOrDie(agnhostServiceFilename) - nsFlag := fmt.Sprintf("--namespace=%v", ns) ginkgo.By("creating Agnhost SVC") - framework.RunKubectlOrDieInput(ns, string(serviceJSON[:]), "create", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, string(serviceJSON[:]), "create", "-f", "-") ginkgo.By("getting the original port") - originalNodePort := framework.RunKubectlOrDie(ns, "get", "service", "agnhost-primary", nsFlag, "-o", "jsonpath={.spec.ports[0].port}") + originalNodePort := framework.RunKubectlOrDie(ns, "get", "service", "agnhost-primary", "-o", "jsonpath={.spec.ports[0].port}") ginkgo.By("applying the same configuration") - framework.RunKubectlOrDieInput(ns, string(serviceJSON[:]), "apply", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, string(serviceJSON[:]), "apply", "-f", "-") ginkgo.By("getting the port after applying configuration") - currentNodePort := framework.RunKubectlOrDie(ns, "get", "service", "agnhost-primary", nsFlag, "-o", "jsonpath={.spec.ports[0].port}") + currentNodePort := framework.RunKubectlOrDie(ns, "get", "service", "agnhost-primary", "-o", "jsonpath={.spec.ports[0].port}") ginkgo.By("checking the result") if originalNodePort != currentNodePort { @@ -844,23 +837,22 @@ metadata: deployment1Yaml := commonutils.SubstituteImageName(string(readTestFileOrDie(httpdDeployment1Filename))) deployment2Yaml := commonutils.SubstituteImageName(string(readTestFileOrDie(httpdDeployment2Filename))) deployment3Yaml := commonutils.SubstituteImageName(string(readTestFileOrDie(httpdDeployment3Filename))) - nsFlag := fmt.Sprintf("--namespace=%v", ns) ginkgo.By("deployment replicas number is 2") - framework.RunKubectlOrDieInput(ns, deployment1Yaml, "apply", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, deployment1Yaml, "apply", "-f", "-") ginkgo.By("check the last-applied matches expectations annotations") - output := framework.RunKubectlOrDieInput(ns, deployment1Yaml, "apply", "view-last-applied", "-f", "-", nsFlag, "-o", "json") + output := framework.RunKubectlOrDieInput(ns, deployment1Yaml, "apply", "view-last-applied", "-f", "-", "-o", "json") requiredString := "\"replicas\": 2" if !strings.Contains(output, requiredString) { framework.Failf("Missing %s in kubectl view-last-applied", requiredString) } ginkgo.By("apply file doesn't have replicas") - framework.RunKubectlOrDieInput(ns, deployment2Yaml, "apply", "set-last-applied", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, deployment2Yaml, "apply", "set-last-applied", "-f", "-") ginkgo.By("check last-applied has been updated, annotations doesn't have replicas") - output = framework.RunKubectlOrDieInput(ns, deployment1Yaml, "apply", "view-last-applied", "-f", "-", nsFlag, "-o", "json") + output = framework.RunKubectlOrDieInput(ns, deployment1Yaml, "apply", "view-last-applied", "-f", "-", "-o", "json") requiredString = "\"replicas\": 2" if strings.Contains(output, requiredString) { framework.Failf("Presenting %s in kubectl view-last-applied", requiredString) @@ -869,13 +861,13 @@ metadata: ginkgo.By("scale set replicas to 3") httpdDeploy := "httpd-deployment" debugDiscovery() - framework.RunKubectlOrDie(ns, "scale", "deployment", httpdDeploy, "--replicas=3", nsFlag) + framework.RunKubectlOrDie(ns, "scale", "deployment", httpdDeploy, "--replicas=3") ginkgo.By("apply file doesn't have replicas but image changed") - framework.RunKubectlOrDieInput(ns, deployment3Yaml, "apply", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, deployment3Yaml, "apply", "-f", "-") ginkgo.By("verify replicas still is 3 and image has been updated") - output = framework.RunKubectlOrDieInput(ns, deployment3Yaml, "get", "-f", "-", nsFlag, "-o", "json") + output = framework.RunKubectlOrDieInput(ns, deployment3Yaml, "get", "-f", "-", "-o", "json") requiredItems := []string{"\"replicas\": 3", imageutils.GetE2EImage(imageutils.Httpd)} for _, item := range requiredItems { if !strings.Contains(output, item) { @@ -925,16 +917,15 @@ metadata: framework.ConformanceIt("should check if kubectl can dry-run update Pods", func() { ginkgo.By("running the image " + httpdImage) podName := "e2e-test-httpd-pod" - nsFlag := fmt.Sprintf("--namespace=%v", ns) - framework.RunKubectlOrDie(ns, "run", podName, "--image="+httpdImage, "--labels=run="+podName, nsFlag) + framework.RunKubectlOrDie(ns, "run", podName, "--image="+httpdImage, "--labels=run="+podName) ginkgo.By("replace the image in the pod with server-side dry-run") - podJSON := framework.RunKubectlOrDie(ns, "get", "pod", podName, "-o", "json", nsFlag) + podJSON := framework.RunKubectlOrDie(ns, "get", "pod", podName, "-o", "json") podJSON = strings.Replace(podJSON, httpdImage, busyboxImage, 1) if !strings.Contains(podJSON, busyboxImage) { framework.Failf("Failed replacing image from %s to %s in:\n%s\n", httpdImage, busyboxImage, podJSON) } - framework.RunKubectlOrDieInput(ns, podJSON, "replace", "-f", "-", "--dry-run", "server", nsFlag) + framework.RunKubectlOrDieInput(ns, podJSON, "replace", "-f", "-", "--dry-run", "server") ginkgo.By("verifying the pod " + podName + " has the right image " + httpdImage) pod, err := c.CoreV1().Pods(ns).Get(context.TODO(), podName, metav1.GetOptions{}) @@ -946,7 +937,7 @@ metadata: framework.Failf("Failed creating pod with expected image %s", httpdImage) } - framework.RunKubectlOrDie(ns, "delete", "pods", podName, nsFlag) + framework.RunKubectlOrDie(ns, "delete", "pods", podName) }) }) @@ -1112,16 +1103,15 @@ metadata: controllerJSON := commonutils.SubstituteImageName(string(readTestFileOrDie(agnhostControllerFilename))) serviceJSON := readTestFileOrDie(agnhostServiceFilename) - nsFlag := fmt.Sprintf("--namespace=%v", ns) - framework.RunKubectlOrDieInput(ns, controllerJSON, "create", "-f", "-", nsFlag) - framework.RunKubectlOrDieInput(ns, string(serviceJSON[:]), "create", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, controllerJSON, "create", "-f", "-") + framework.RunKubectlOrDieInput(ns, string(serviceJSON[:]), "create", "-f", "-") ginkgo.By("Waiting for Agnhost primary to start.") waitForOrFailWithDebug(1) // Pod forEachPod(func(pod v1.Pod) { - output := framework.RunKubectlOrDie(ns, "describe", "pod", pod.Name, nsFlag) + output := framework.RunKubectlOrDie(ns, "describe", "pod", pod.Name) requiredStrings := [][]string{ {"Name:", "agnhost-primary-"}, {"Namespace:", ns}, @@ -1152,10 +1142,10 @@ metadata: {"Pod Template:"}, {"Image:", agnhostImage}, {"Events:"}} - checkKubectlOutputWithRetry(ns, requiredStrings, "describe", "rc", "agnhost-primary", nsFlag) + checkKubectlOutputWithRetry(ns, requiredStrings, "describe", "rc", "agnhost-primary") // Service - output := framework.RunKubectlOrDie(ns, "describe", "service", "agnhost-primary", nsFlag) + output := framework.RunKubectlOrDie(ns, "describe", "service", "agnhost-primary") requiredStrings = [][]string{ {"Name:", "agnhost-primary"}, {"Namespace:", ns}, @@ -1208,9 +1198,8 @@ metadata: ginkgo.It("should check if kubectl describe prints relevant information for cronjob", func() { ginkgo.By("creating a cronjob") - nsFlag := fmt.Sprintf("--namespace=%v", ns) cronjobYaml := commonutils.SubstituteImageName(string(readTestFileOrDie("busybox-cronjob.yaml"))) - framework.RunKubectlOrDieInput(ns, cronjobYaml, "create", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, cronjobYaml, "create", "-f", "-") ginkgo.By("waiting for cronjob to start.") err := wait.PollImmediate(time.Second, time.Minute, func() (bool, error) { @@ -1223,7 +1212,7 @@ metadata: framework.ExpectNoError(err) ginkgo.By("verifying kubectl describe prints") - output := framework.RunKubectlOrDie(ns, "describe", "cronjob", "cronjob-test", nsFlag) + output := framework.RunKubectlOrDie(ns, "describe", "cronjob", "cronjob-test") requiredStrings := [][]string{ {"Name:", "cronjob-test"}, {"Namespace:", ns}, @@ -1251,14 +1240,13 @@ metadata: */ framework.ConformanceIt("should create services for rc ", func() { controllerJSON := commonutils.SubstituteImageName(string(readTestFileOrDie(agnhostControllerFilename))) - nsFlag := fmt.Sprintf("--namespace=%v", ns) agnhostPort := 6379 ginkgo.By("creating Agnhost RC") framework.Logf("namespace %v", ns) - framework.RunKubectlOrDieInput(ns, controllerJSON, "create", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, controllerJSON, "create", "-f", "-") // It may take a while for the pods to get registered in some cases, wait to be sure. ginkgo.By("Waiting for Agnhost primary to start.") @@ -1316,12 +1304,12 @@ metadata: } ginkgo.By("exposing RC") - framework.RunKubectlOrDie(ns, "expose", "rc", "agnhost-primary", "--name=rm2", "--port=1234", fmt.Sprintf("--target-port=%d", agnhostPort), nsFlag) + framework.RunKubectlOrDie(ns, "expose", "rc", "agnhost-primary", "--name=rm2", "--port=1234", fmt.Sprintf("--target-port=%d", agnhostPort)) e2enetwork.WaitForService(c, ns, "rm2", true, framework.Poll, framework.ServiceStartTimeout) validateService("rm2", 1234, framework.ServiceStartTimeout) ginkgo.By("exposing service") - framework.RunKubectlOrDie(ns, "expose", "service", "rm2", "--name=rm3", "--port=2345", fmt.Sprintf("--target-port=%d", agnhostPort), nsFlag) + framework.RunKubectlOrDie(ns, "expose", "service", "rm2", "--name=rm3", "--port=2345", fmt.Sprintf("--target-port=%d", agnhostPort)) e2enetwork.WaitForService(c, ns, "rm3", true, framework.Poll, framework.ServiceStartTimeout) validateService("rm3", 2345, framework.ServiceStartTimeout) }) @@ -1329,12 +1317,10 @@ metadata: ginkgo.Describe("Kubectl label", func() { var podYaml string - var nsFlag string ginkgo.BeforeEach(func() { ginkgo.By("creating the pod") podYaml = commonutils.SubstituteImageName(string(readTestFileOrDie("pause-pod.yaml.in"))) - nsFlag = fmt.Sprintf("--namespace=%v", ns) - framework.RunKubectlOrDieInput(ns, podYaml, "create", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, podYaml, "create", "-f", "-") framework.ExpectEqual(e2epod.CheckPodsRunningReady(c, ns, []string{pausePodName}, framework.PodStartTimeout), true) }) ginkgo.AfterEach(func() { @@ -1351,17 +1337,17 @@ metadata: labelValue := "testing-label-value" ginkgo.By("adding the label " + labelName + " with value " + labelValue + " to a pod") - framework.RunKubectlOrDie(ns, "label", "pods", pausePodName, labelName+"="+labelValue, nsFlag) + framework.RunKubectlOrDie(ns, "label", "pods", pausePodName, labelName+"="+labelValue) ginkgo.By("verifying the pod has the label " + labelName + " with the value " + labelValue) - output := framework.RunKubectlOrDie(ns, "get", "pod", pausePodName, "-L", labelName, nsFlag) + output := framework.RunKubectlOrDie(ns, "get", "pod", pausePodName, "-L", labelName) if !strings.Contains(output, labelValue) { framework.Failf("Failed updating label " + labelName + " to the pod " + pausePodName) } ginkgo.By("removing the label " + labelName + " of a pod") - framework.RunKubectlOrDie(ns, "label", "pods", pausePodName, labelName+"-", nsFlag) + framework.RunKubectlOrDie(ns, "label", "pods", pausePodName, labelName+"-") ginkgo.By("verifying the pod doesn't have the label " + labelName) - output = framework.RunKubectlOrDie(ns, "get", "pod", pausePodName, "-L", labelName, nsFlag) + output = framework.RunKubectlOrDie(ns, "get", "pod", pausePodName, "-L", labelName) if strings.Contains(output, labelValue) { framework.Failf("Failed removing label " + labelName + " of the pod " + pausePodName) } @@ -1370,12 +1356,10 @@ metadata: ginkgo.Describe("Kubectl copy", func() { var podYaml string - var nsFlag string ginkgo.BeforeEach(func() { ginkgo.By("creating the pod") - nsFlag = fmt.Sprintf("--namespace=%v", ns) podYaml = commonutils.SubstituteImageName(string(readTestFileOrDie("busybox-pod.yaml"))) - framework.RunKubectlOrDieInput(ns, podYaml, "create", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, podYaml, "create", "-f", "-") framework.ExpectEqual(e2epod.CheckPodsRunningReady(c, ns, []string{busyboxPodName}, framework.PodStartTimeout), true) }) ginkgo.AfterEach(func() { @@ -1396,7 +1380,7 @@ metadata: } ginkgo.By("specifying a remote filepath " + podSource + " on the pod") - framework.RunKubectlOrDie(ns, "cp", podSource, tempDestination.Name(), nsFlag) + framework.RunKubectlOrDie(ns, "cp", podSource, tempDestination.Name()) ginkgo.By("verifying that the contents of the remote file " + podSource + " have been copied to a local file " + tempDestination.Name()) localData, err := ioutil.ReadAll(tempDestination) if err != nil { @@ -1409,17 +1393,15 @@ metadata: }) ginkgo.Describe("Kubectl logs", func() { - var nsFlag string podName := "logs-generator" containerName := "logs-generator" ginkgo.BeforeEach(func() { ginkgo.By("creating an pod") - nsFlag = fmt.Sprintf("--namespace=%v", ns) // Agnhost image generates logs for a total of 100 lines over 20s. - framework.RunKubectlOrDie(ns, "run", podName, "--image="+agnhostImage, nsFlag, "--restart=Never", "--", "logs-generator", "--log-lines-total", "100", "--run-duration", "20s") + framework.RunKubectlOrDie(ns, "run", podName, "--image="+agnhostImage, "--restart=Never", "--", "logs-generator", "--log-lines-total", "100", "--run-duration", "20s") }) ginkgo.AfterEach(func() { - framework.RunKubectlOrDie(ns, "delete", "pod", podName, nsFlag) + framework.RunKubectlOrDie(ns, "delete", "pod", podName) }) /* @@ -1450,19 +1432,19 @@ metadata: framework.ExpectNoError(err) ginkgo.By("limiting log lines") - out := framework.RunKubectlOrDie(ns, "logs", podName, containerName, nsFlag, "--tail=1") + out := framework.RunKubectlOrDie(ns, "logs", podName, containerName, "--tail=1") framework.Logf("got output %q", out) gomega.Expect(len(out)).NotTo(gomega.BeZero()) framework.ExpectEqual(len(lines(out)), 1) ginkgo.By("limiting log bytes") - out = framework.RunKubectlOrDie(ns, "logs", podName, containerName, nsFlag, "--limit-bytes=1") + out = framework.RunKubectlOrDie(ns, "logs", podName, containerName, "--limit-bytes=1") framework.Logf("got output %q", out) framework.ExpectEqual(len(lines(out)), 1) framework.ExpectEqual(len(out), 1) ginkgo.By("exposing timestamps") - out = framework.RunKubectlOrDie(ns, "logs", podName, containerName, nsFlag, "--tail=1", "--timestamps") + out = framework.RunKubectlOrDie(ns, "logs", podName, containerName, "--tail=1", "--timestamps") framework.Logf("got output %q", out) l := lines(out) framework.ExpectEqual(len(l), 1) @@ -1479,9 +1461,9 @@ metadata: // because the granularity is only 1 second and // it could end up rounding the wrong way. time.Sleep(2500 * time.Millisecond) // ensure that startup logs on the node are seen as older than 1s - recentOut := framework.RunKubectlOrDie(ns, "logs", podName, containerName, nsFlag, "--since=1s") + recentOut := framework.RunKubectlOrDie(ns, "logs", podName, containerName, "--since=1s") recent := len(strings.Split(recentOut, "\n")) - olderOut := framework.RunKubectlOrDie(ns, "logs", podName, containerName, nsFlag, "--since=24h") + olderOut := framework.RunKubectlOrDie(ns, "logs", podName, containerName, "--since=24h") older := len(strings.Split(olderOut, "\n")) gomega.Expect(recent).To(gomega.BeNumerically("<", older), "expected recent(%v) to be less than older(%v)\nrecent lines:\n%v\nolder lines:\n%v\n", recent, older, recentOut, olderOut) }) @@ -1495,14 +1477,13 @@ metadata: */ framework.ConformanceIt("should add annotations for pods in rc ", func() { controllerJSON := commonutils.SubstituteImageName(string(readTestFileOrDie(agnhostControllerFilename))) - nsFlag := fmt.Sprintf("--namespace=%v", ns) ginkgo.By("creating Agnhost RC") - framework.RunKubectlOrDieInput(ns, controllerJSON, "create", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, controllerJSON, "create", "-f", "-") ginkgo.By("Waiting for Agnhost primary to start.") waitForOrFailWithDebug(1) ginkgo.By("patching all pods") forEachPod(func(pod v1.Pod) { - framework.RunKubectlOrDie(ns, "patch", "pod", pod.Name, nsFlag, "-p", "{\"metadata\":{\"annotations\":{\"x\":\"y\"}}}") + framework.RunKubectlOrDie(ns, "patch", "pod", pod.Name, "-p", "{\"metadata\":{\"annotations\":{\"x\":\"y\"}}}") }) ginkgo.By("checking annotations") @@ -1539,16 +1520,14 @@ metadata: }) ginkgo.Describe("Kubectl run pod", func() { - var nsFlag string var podName string ginkgo.BeforeEach(func() { - nsFlag = fmt.Sprintf("--namespace=%v", ns) podName = "e2e-test-httpd-pod" }) ginkgo.AfterEach(func() { - framework.RunKubectlOrDie(ns, "delete", "pods", podName, nsFlag) + framework.RunKubectlOrDie(ns, "delete", "pods", podName) }) /* @@ -1558,7 +1537,7 @@ metadata: */ framework.ConformanceIt("should create a pod from an image when restart is Never ", func() { ginkgo.By("running the image " + httpdImage) - framework.RunKubectlOrDie(ns, "run", podName, "--restart=Never", "--image="+httpdImage, nsFlag) + framework.RunKubectlOrDie(ns, "run", podName, "--restart=Never", "--image="+httpdImage) ginkgo.By("verifying the pod " + podName + " was created") pod, err := c.CoreV1().Pods(ns).Get(context.TODO(), podName, metav1.GetOptions{}) if err != nil { @@ -1575,16 +1554,14 @@ metadata: }) ginkgo.Describe("Kubectl replace", func() { - var nsFlag string var podName string ginkgo.BeforeEach(func() { - nsFlag = fmt.Sprintf("--namespace=%v", ns) podName = "e2e-test-httpd-pod" }) ginkgo.AfterEach(func() { - framework.RunKubectlOrDie(ns, "delete", "pods", podName, nsFlag) + framework.RunKubectlOrDie(ns, "delete", "pods", podName) }) /* @@ -1594,7 +1571,7 @@ metadata: */ framework.ConformanceIt("should update a single-container pod's image ", func() { ginkgo.By("running the image " + httpdImage) - framework.RunKubectlOrDie(ns, "run", podName, "--image="+httpdImage, "--labels=run="+podName, nsFlag) + framework.RunKubectlOrDie(ns, "run", podName, "--image="+httpdImage, "--labels=run="+podName) ginkgo.By("verifying the pod " + podName + " is running") label := labels.SelectorFromSet(labels.Set(map[string]string{"run": podName})) @@ -1604,14 +1581,14 @@ metadata: } ginkgo.By("verifying the pod " + podName + " was created") - podJSON := framework.RunKubectlOrDie(ns, "get", "pod", podName, nsFlag, "-o", "json") + podJSON := framework.RunKubectlOrDie(ns, "get", "pod", podName, "-o", "json") if !strings.Contains(podJSON, podName) { framework.Failf("Failed to find pod %s in [%s]", podName, podJSON) } ginkgo.By("replace the image in the pod") podJSON = strings.Replace(podJSON, httpdImage, busyboxImage, 1) - framework.RunKubectlOrDieInput(ns, podJSON, "replace", "-f", "-", nsFlag) + framework.RunKubectlOrDieInput(ns, podJSON, "replace", "-f", "-") ginkgo.By("verifying the pod " + podName + " has the right image " + busyboxImage) pod, err := c.CoreV1().Pods(ns).Get(context.TODO(), podName, metav1.GetOptions{}) @@ -1791,11 +1768,10 @@ metadata: ginkgo.Describe("Kubectl create quota", func() { ginkgo.It("should create a quota without scopes", func() { - nsFlag := fmt.Sprintf("--namespace=%v", ns) quotaName := "million" ginkgo.By("calling kubectl quota") - framework.RunKubectlOrDie(ns, "create", "quota", quotaName, "--hard=pods=1000000,services=1000000", nsFlag) + framework.RunKubectlOrDie(ns, "create", "quota", quotaName, "--hard=pods=1000000,services=1000000") ginkgo.By("verifying that the quota was created") quota, err := c.CoreV1().ResourceQuotas(ns).Get(context.TODO(), quotaName, metav1.GetOptions{}) @@ -1820,11 +1796,10 @@ metadata: }) ginkgo.It("should create a quota with scopes", func() { - nsFlag := fmt.Sprintf("--namespace=%v", ns) quotaName := "scopes" ginkgo.By("calling kubectl quota") - framework.RunKubectlOrDie(ns, "create", "quota", quotaName, "--hard=pods=1000000", "--scopes=BestEffort,NotTerminating", nsFlag) + framework.RunKubectlOrDie(ns, "create", "quota", quotaName, "--hard=pods=1000000", "--scopes=BestEffort,NotTerminating") ginkgo.By("verifying that the quota was created") quota, err := c.CoreV1().ResourceQuotas(ns).Get(context.TODO(), quotaName, metav1.GetOptions{}) @@ -1848,11 +1823,10 @@ metadata: }) ginkgo.It("should reject quota with invalid scopes", func() { - nsFlag := fmt.Sprintf("--namespace=%v", ns) quotaName := "scopes" ginkgo.By("calling kubectl quota") - out, err := framework.RunKubectl(ns, "create", "quota", quotaName, "--hard=hard=pods=1000000", "--scopes=Foo", nsFlag) + out, err := framework.RunKubectl(ns, "create", "quota", quotaName, "--hard=hard=pods=1000000", "--scopes=Foo") if err == nil { framework.Failf("Expected kubectl to fail, but it succeeded: %s", out) } @@ -2158,19 +2132,18 @@ func startLocalProxy() (srv *httptest.Server, logs *bytes.Buffer) { // createApplyCustomResource asserts that given CustomResource be created and applied // without being rejected by client-side validation func createApplyCustomResource(resource, namespace, name string, crd *crd.TestCrd) error { - ns := fmt.Sprintf("--namespace=%v", namespace) ginkgo.By("successfully create CR") - if _, err := framework.RunKubectlInput(namespace, resource, ns, "create", "--validate=true", "-f", "-"); err != nil { - return fmt.Errorf("failed to create CR %s in namespace %s: %v", resource, ns, err) + if _, err := framework.RunKubectlInput(namespace, resource, "create", "--validate=true", "-f", "-"); err != nil { + return fmt.Errorf("failed to create CR %s in namespace %s: %v", resource, namespace, err) } - if _, err := framework.RunKubectl(namespace, ns, "delete", crd.Crd.Spec.Names.Plural, name); err != nil { + if _, err := framework.RunKubectl(namespace, "delete", crd.Crd.Spec.Names.Plural, name); err != nil { return fmt.Errorf("failed to delete CR %s: %v", name, err) } ginkgo.By("successfully apply CR") - if _, err := framework.RunKubectlInput(namespace, resource, ns, "apply", "--validate=true", "-f", "-"); err != nil { - return fmt.Errorf("failed to apply CR %s in namespace %s: %v", resource, ns, err) + if _, err := framework.RunKubectlInput(namespace, resource, "apply", "--validate=true", "-f", "-"); err != nil { + return fmt.Errorf("failed to apply CR %s in namespace %s: %v", resource, namespace, err) } - if _, err := framework.RunKubectl(namespace, ns, "delete", crd.Crd.Spec.Names.Plural, name); err != nil { + if _, err := framework.RunKubectl(namespace, "delete", crd.Crd.Spec.Names.Plural, name); err != nil { return fmt.Errorf("failed to delete CR %s: %v", name, err) } return nil @@ -2205,7 +2178,7 @@ func validateController(c clientset.Interface, containerImage string, replicas i ginkgo.By(fmt.Sprintf("waiting for all containers in %s pods to come up.", testname)) //testname should be selector waitLoop: for start := time.Now(); time.Since(start) < framework.PodStartTimeout; time.Sleep(5 * time.Second) { - getPodsOutput := framework.RunKubectlOrDie(ns, "get", "pods", "-o", "template", getPodsTemplate, "-l", testname, fmt.Sprintf("--namespace=%v", ns)) + getPodsOutput := framework.RunKubectlOrDie(ns, "get", "pods", "-o", "template", getPodsTemplate, "-l", testname) pods := strings.Fields(getPodsOutput) if numPods := len(pods); numPods != replicas { ginkgo.By(fmt.Sprintf("Replicas for %s: expected=%d actual=%d", testname, replicas, numPods)) @@ -2213,13 +2186,13 @@ waitLoop: } var runningPods []string for _, podID := range pods { - running := framework.RunKubectlOrDie(ns, "get", "pods", podID, "-o", "template", getContainerStateTemplate, fmt.Sprintf("--namespace=%v", ns)) + running := framework.RunKubectlOrDie(ns, "get", "pods", podID, "-o", "template", getContainerStateTemplate) if running != "true" { framework.Logf("%s is created but not running", podID) continue waitLoop } - currentImage := framework.RunKubectlOrDie(ns, "get", "pods", podID, "-o", "template", getImageTemplate, fmt.Sprintf("--namespace=%v", ns)) + currentImage := framework.RunKubectlOrDie(ns, "get", "pods", podID, "-o", "template", getImageTemplate) currentImage = trimDockerRegistry(currentImage) if currentImage != containerImage { framework.Logf("%s is created but running wrong image; expected: %s, actual: %s", podID, containerImage, currentImage) diff --git a/test/e2e/storage/testsuites/subpath.go b/test/e2e/storage/testsuites/subpath.go index 3781a5bdbfa78..4f493bc0ad08d 100644 --- a/test/e2e/storage/testsuites/subpath.go +++ b/test/e2e/storage/testsuites/subpath.go @@ -1071,5 +1071,5 @@ func podContainerExec(pod *v1.Pod, containerIndex int, command string) (string, shell = "/bin/sh" option = "-c" } - return framework.RunKubectl(pod.Namespace, "exec", fmt.Sprintf("--namespace=%s", pod.Namespace), pod.Name, "--container", pod.Spec.Containers[containerIndex].Name, "--", shell, option, command) + return framework.RunKubectl(pod.Namespace, "exec", pod.Name, "--container", pod.Spec.Containers[containerIndex].Name, "--", shell, option, command) } diff --git a/test/e2e/storage/vsphere/vsphere_utils.go b/test/e2e/storage/vsphere/vsphere_utils.go index c80c464efa122..b1623eabfa497 100644 --- a/test/e2e/storage/vsphere/vsphere_utils.go +++ b/test/e2e/storage/vsphere/vsphere_utils.go @@ -358,7 +358,7 @@ func getVSpherePodSpecWithVolumePaths(volumePaths []string, keyValuelabel map[st func verifyFilesExistOnVSphereVolume(namespace string, podName string, filePaths ...string) { for _, filePath := range filePaths { - _, err := framework.RunKubectl(namespace, "exec", fmt.Sprintf("--namespace=%s", namespace), podName, "--", "/bin/ls", filePath) + _, err := framework.RunKubectl(namespace, "exec", podName, "--", "/bin/ls", filePath) framework.ExpectNoError(err, fmt.Sprintf("failed to verify file: %q on the pod: %q", filePath, podName)) } } @@ -815,7 +815,7 @@ func expectFilesToBeAccessible(namespace string, pods []*v1.Pod, filePaths []str // writeContentToPodFile writes the given content to the specified file. func writeContentToPodFile(namespace, podName, filePath, content string) error { - _, err := framework.RunKubectl(namespace, "exec", fmt.Sprintf("--namespace=%s", namespace), podName, + _, err := framework.RunKubectl(namespace, "exec", podName, "--", "/bin/sh", "-c", fmt.Sprintf("echo '%s' > %s", content, filePath)) return err } @@ -823,7 +823,7 @@ func writeContentToPodFile(namespace, podName, filePath, content string) error { // expectFileContentToMatch checks if a given file contains the specified // content, else fails. func expectFileContentToMatch(namespace, podName, filePath, content string) { - _, err := framework.RunKubectl(namespace, "exec", fmt.Sprintf("--namespace=%s", namespace), podName, + _, err := framework.RunKubectl(namespace, "exec", podName, "--", "/bin/sh", "-c", fmt.Sprintf("grep '%s' %s", content, filePath)) framework.ExpectNoError(err, fmt.Sprintf("failed to match content of file: %q on the pod: %q", filePath, podName)) } diff --git a/test/e2e/upgrades/cassandra.go b/test/e2e/upgrades/cassandra.go index 2acb054e5b3c1..4fbf97f64df7d 100644 --- a/test/e2e/upgrades/cassandra.go +++ b/test/e2e/upgrades/cassandra.go @@ -65,7 +65,7 @@ func cassandraKubectlCreate(ns, file string) { framework.Fail(err.Error()) } input := string(data) - framework.RunKubectlOrDieInput(ns, input, "create", "-f", "-", fmt.Sprintf("--namespace=%s", ns)) + framework.RunKubectlOrDieInput(ns, input, "create", "-f", "-") } // Setup creates a Cassandra StatefulSet and a PDB. It also brings up a tester diff --git a/test/e2e/upgrades/etcd.go b/test/e2e/upgrades/etcd.go index 32ca170fd5970..243cd7cfb33b3 100644 --- a/test/e2e/upgrades/etcd.go +++ b/test/e2e/upgrades/etcd.go @@ -64,7 +64,7 @@ func kubectlCreate(ns, file string) { framework.Fail(err.Error()) } input := string(data) - framework.RunKubectlOrDieInput(ns, input, "create", "-f", "-", fmt.Sprintf("--namespace=%s", ns)) + framework.RunKubectlOrDieInput(ns, input, "create", "-f", "-") } // Setup creates etcd statefulset and then verifies that the etcd is writable. diff --git a/test/e2e/upgrades/mysql.go b/test/e2e/upgrades/mysql.go index 89f735b55efd8..edc94a5c20238 100644 --- a/test/e2e/upgrades/mysql.go +++ b/test/e2e/upgrades/mysql.go @@ -66,7 +66,7 @@ func mysqlKubectlCreate(ns, file string) { framework.Fail(err.Error()) } input := string(data) - framework.RunKubectlOrDieInput(ns, input, "create", "-f", "-", fmt.Sprintf("--namespace=%s", ns)) + framework.RunKubectlOrDieInput(ns, input, "create", "-f", "-") } func (t *MySQLUpgradeTest) getServiceIP(f *framework.Framework, ns, svcName string) string { From 06765213a505566429b7254aa394c5a2fcf3c466 Mon Sep 17 00:00:00 2001 From: Tomas Nozicka Date: Thu, 29 Oct 2020 13:56:29 +0100 Subject: [PATCH 87/96] UPSTREAM: : Release lock on KCM and KS termination UPSTREAM: : Force releasing the lock on exit for KS --- .../app/controllermanager.go | 26 +++++++++++++++---- cmd/kube-scheduler/app/server.go | 18 +++++++++++-- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index 32dc5e125bfab..d6329636d41c6 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -130,7 +130,8 @@ controller, and serviceaccounts controller.`, os.Exit(1) } - if err := Run(c.Complete(), wait.NeverStop); err != nil { + stopCh := server.SetupSignalHandler() + if err := Run(c.Complete(), stopCh); err != nil { fmt.Fprintf(os.Stderr, "%v\n", err) os.Exit(1) } @@ -299,7 +300,13 @@ func Run(c *config.CompletedConfig, stopCh <-chan struct{}) error { klog.Fatalf("error creating lock: %v", err) } - leaderelection.RunOrDie(context.TODO(), leaderelection.LeaderElectionConfig{ + leCtx, cancel := context.WithCancel(context.Background()) + defer cancel() + go func() { + <-stopCh + cancel() + }() + leaderelection.RunOrDie(leCtx, leaderelection.LeaderElectionConfig{ Lock: rl, LeaseDuration: c.ComponentConfig.Generic.LeaderElection.LeaseDuration.Duration, RenewDeadline: c.ComponentConfig.Generic.LeaderElection.RenewDeadline.Duration, @@ -307,11 +314,20 @@ func Run(c *config.CompletedConfig, stopCh <-chan struct{}) error { Callbacks: leaderelection.LeaderCallbacks{ OnStartedLeading: run, OnStoppedLeading: func() { - klog.Fatalf("leaderelection lost") + select { + case <-stopCh: + // We were asked to terminate. Exit 0. + klog.Info("Requested to terminate. Exiting.") + os.Exit(0) + default: + // We lost the lock. + klog.Exitf("leaderelection lost") + } }, }, - WatchDog: electionChecker, - Name: "kube-controller-manager", + WatchDog: electionChecker, + Name: "kube-controller-manager", + ReleaseOnCancel: true, }) panic("unreachable") } diff --git a/cmd/kube-scheduler/app/server.go b/cmd/kube-scheduler/app/server.go index 98da154ef22a3..d7fa10c9681a3 100644 --- a/cmd/kube-scheduler/app/server.go +++ b/cmd/kube-scheduler/app/server.go @@ -26,12 +26,12 @@ import ( goruntime "runtime" "github.com/spf13/cobra" - utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apiserver/pkg/authentication/authenticator" "k8s.io/apiserver/pkg/authorization/authorizer" genericapifilters "k8s.io/apiserver/pkg/endpoints/filters" apirequest "k8s.io/apiserver/pkg/endpoints/request" + "k8s.io/apiserver/pkg/server" genericfilters "k8s.io/apiserver/pkg/server/filters" "k8s.io/apiserver/pkg/server/healthz" "k8s.io/apiserver/pkg/server/mux" @@ -123,6 +123,11 @@ func runCommand(cmd *cobra.Command, opts *options.Options, registryOptions ...Op ctx, cancel := context.WithCancel(context.Background()) defer cancel() + go func() { + stopCh := server.SetupSignalHandler() + <-stopCh + cancel() + }() cc, sched, err := Setup(ctx, opts, registryOptions...) if err != nil { @@ -196,9 +201,18 @@ func Run(ctx context.Context, cc *schedulerserverconfig.CompletedConfig, sched * cc.LeaderElection.Callbacks = leaderelection.LeaderCallbacks{ OnStartedLeading: sched.Run, OnStoppedLeading: func() { - klog.Fatalf("leaderelection lost") + select { + case <-ctx.Done(): + // We were asked to terminate. Exit 0. + klog.Info("Requested to terminate. Exiting.") + os.Exit(0) + default: + // We lost the lock. + klog.Exitf("leaderelection lost") + } }, } + cc.LeaderElection.ReleaseOnCancel = true leaderElector, err := leaderelection.NewLeaderElector(*cc.LeaderElection) if err != nil { return fmt.Errorf("couldn't create leader elector: %v", err) From e524bb3f247f59f27b4750033fe29603c01f4572 Mon Sep 17 00:00:00 2001 From: Abu Kashem Date: Thu, 29 Oct 2020 13:56:29 +0100 Subject: [PATCH 88/96] UPSTREAM: 94773: count of etcd object should be limited to the specified resource Currently count includes keys from different resource(s) if the keys are a prefix of the specified resource/key. Consider the following keys: A: //foo.bar.io/machines B: //foo.bar.io/machinesets If we ask for the count of key A, the result will also include the keys from key B since key B shares the same prefix as key A. Append a separator to mark the end of the key, this will exclude all other keys from a different resource that is a prefix of the specified key. --- .../apiserver/pkg/storage/etcd3/store.go | 8 ++++ .../apiserver/pkg/storage/etcd3/store_test.go | 46 ++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go index 14643dad913d0..3435b9ffaa9aa 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go @@ -452,6 +452,14 @@ func getNewItemFunc(listObj runtime.Object, v reflect.Value) func() runtime.Obje func (s *store) Count(key string) (int64, error) { key = path.Join(s.pathPrefix, key) + + // We need to make sure the key ended with "/" so that we only get children "directories". + // e.g. if we have key "/a", "/a/b", "/ab", getting keys with prefix "/a" will return all three, + // while with prefix "/a/" will return only "/a/b" which is the correct answer. + if !strings.HasSuffix(key, "/") { + key += "/" + } + startTime := time.Now() getResp, err := s.client.KV.Get(context.Background(), key, clientv3.WithRange(clientv3.GetPrefixRangeEnd(key)), clientv3.WithCountOnly()) metrics.RecordEtcdRequestLatency("listWithCount", key, startTime) diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go index db60282d45ce9..e1204cf2ea2b7 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go @@ -1818,6 +1818,12 @@ func testSetup(t *testing.T) (context.Context, *store, *integration.ClusterV3) { func testPropogateStore(ctx context.Context, t *testing.T, store *store, obj *example.Pod) (string, *example.Pod) { // Setup store with a key and grab the output for returning. key := "/testkey" + return key, testPropogateStoreWithKey(ctx, t, store, key, obj) +} + +// testPropogateStoreWithKey helps propagate store with objects, the given object will be stored at the specified key. +func testPropogateStoreWithKey(ctx context.Context, t *testing.T, store *store, key string, obj *example.Pod) *example.Pod { + // Setup store with the specified key and grab the output for returning. v, err := conversion.EnforcePtr(obj) if err != nil { panic("unable to convert output object to pointer") @@ -1830,7 +1836,7 @@ func testPropogateStore(ctx context.Context, t *testing.T, store *store, obj *ex if err := store.Create(ctx, key, obj, setOutput, 0); err != nil { t.Fatalf("Set failed: %v", err) } - return key, setOutput + return setOutput } func TestPrefix(t *testing.T) { @@ -2075,3 +2081,41 @@ func TestConsistentList(t *testing.T) { } } + +func TestCount(t *testing.T) { + ctx, store, cluster := testSetup(t) + defer cluster.Terminate(t) + + resourceA := "/foo.bar.io/abc" + + // resourceA is intentionally a prefix of resourceB to ensure that the count + // for resourceA does not include any objects from resourceB. + resourceB := fmt.Sprintf("%sdef", resourceA) + + resourceACountExpected := 5 + for i := 1; i <= resourceACountExpected; i++ { + obj := &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: fmt.Sprintf("foo-%d", i)}} + + key := fmt.Sprintf("%s/%d", resourceA, i) + testPropogateStoreWithKey(ctx, t, store, key, obj) + } + + resourceBCount := 4 + for i := 1; i <= resourceBCount; i++ { + obj := &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: fmt.Sprintf("foo-%d", i)}} + + key := fmt.Sprintf("%s/%d", resourceB, i) + testPropogateStoreWithKey(ctx, t, store, key, obj) + } + + resourceACountGot, err := store.Count(resourceA) + if err != nil { + t.Fatalf("store.Count failed: %v", err) + } + + // count for resourceA should not include the objects for resourceB + // even though resourceA is a prefix of resourceB. + if int64(resourceACountExpected) != resourceACountGot { + t.Fatalf("store.Count for resource %s: expected %d but got %d", resourceA, resourceACountExpected, resourceACountGot) + } +} From 556c6ddb07e2ea87e0123886e4e9a43b8c243683 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Thu, 29 Oct 2020 13:56:30 +0100 Subject: [PATCH 89/96] UPSTREAM: 94888: apiextensions: prune array type without items in published OpenAPI kubectl falls over arrays without item schema. Hence, we have to publish a less precise OpenAPI spec (similar to other pruning we already do for the same reason). --- .../pkg/controller/openapi/v2/BUILD | 1 + .../pkg/controller/openapi/v2/conversion.go | 8 +++++ .../controller/openapi/v2/conversion_test.go | 31 +++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/BUILD index a078e5a337da6..4751762545bb3 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/BUILD @@ -24,6 +24,7 @@ go_test( "//vendor/github.com/googleapis/gnostic/openapiv2:go_default_library", "//vendor/gopkg.in/yaml.v2:go_default_library", "//vendor/k8s.io/kube-openapi/pkg/util/proto:go_default_library", + "//vendor/k8s.io/utils/pointer:go_default_library", ], ) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion.go index b1d7114bf3ec9..320529bf68d21 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion.go @@ -73,6 +73,14 @@ func ToStructuralOpenAPIV2(in *structuralschema.Structural) *structuralschema.St changed = true } + if s.Items == nil && s.Type == "array" { + // kubectl cannot cope with array without item schema, e.g. due to XPreserveUnknownFields case above + // https://github.com/kubernetes/kube-openapi/blob/64514a1d5d596b96e6f957e2be275ae14d6b0804/pkg/util/proto/document.go#L185 + s.Type = "" + + changed = true + } + for f, fs := range s.Properties { if fs.Nullable { s.ValueValidation.Required, changed = filterOut(s.ValueValidation.Required, f) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion_test.go index 53ca83bb8dd16..eacb92efb98f0 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/v2/conversion_test.go @@ -36,6 +36,7 @@ import ( apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema" "k8s.io/kube-openapi/pkg/util/proto" + "k8s.io/utils/pointer" ) func Test_ConvertJSONSchemaPropsToOpenAPIv2Schema(t *testing.T) { @@ -643,6 +644,31 @@ func Test_ConvertJSONSchemaPropsToOpenAPIv2SchemaByType(t *testing.T) { WithExample(testStr), expectDiff: true, }, + { + name: "preserve-unknown-fields in arrays", + in: &apiextensions.JSONSchemaProps{ + XPreserveUnknownFields: pointer.BoolPtr(true), + Type: "array", + Items: &apiextensions.JSONSchemaPropsOrArray{Schema: &apiextensions.JSONSchemaProps{ + Type: "string", + }}, + }, + expected: withVendorExtensions(new(spec.Schema), "x-kubernetes-preserve-unknown-fields", true), + }, + { + name: "preserve-unknown-fields in objects", + in: &apiextensions.JSONSchemaProps{ + XPreserveUnknownFields: pointer.BoolPtr(true), + Type: "object", + Properties: map[string]apiextensions.JSONSchemaProps{ + "foo": { + Type: "string", + }, + }, + }, + expected: withVendorExtensions(new(spec.Schema), "x-kubernetes-preserve-unknown-fields", true). + Typed("object", ""), + }, } for _, test := range tests { @@ -666,6 +692,11 @@ func Test_ConvertJSONSchemaPropsToOpenAPIv2SchemaByType(t *testing.T) { } } +func withVendorExtensions(s *spec.Schema, key string, value interface{}) *spec.Schema { + s.VendorExtensible.AddExtension(key, value) + return s +} + func refEqual(x spec.Ref, y spec.Ref) bool { return x.String() == y.String() } From 4048e5fd01c0764e11b2fccd1e4d56dcba03c1af Mon Sep 17 00:00:00 2001 From: Abu Kashem Date: Thu, 29 Oct 2020 13:56:30 +0100 Subject: [PATCH 90/96] UPSTREAM: 94903: Take into account latency incurred in server filters apiserver_request_duration_seconds does not take into account the time a request spends in the server filters. If a filter takes longer then the latency incurred will not be reflected in the apiserver latency metrics. For example, the amount of time a request spends in priority and fairness machineries or in shuffle queues will not be accounted for. - Add a server filter that attaches request received timestamp to the request context very early in in the handler chain (as soon as net/http hands over control to us). - Use the above received timestamp in the apiserver latency metrics apiserver_request_duration_seconds. - Use the above received timestamp in the audit layer to set RequestReceivedTimestamp. --- .../src/k8s.io/apiserver/pkg/audit/request.go | 4 +- .../apiserver/pkg/endpoints/filters/BUILD | 4 ++ .../apiserver/pkg/endpoints/filters/audit.go | 6 +- .../filters/request_received_time.go | 40 ++++++++++++ .../filters/request_received_time_test.go | 63 +++++++++++++++++++ .../pkg/endpoints/metrics/metrics.go | 18 ++++-- .../apiserver/pkg/endpoints/request/BUILD | 2 + .../pkg/endpoints/request/received_time.go | 45 +++++++++++++ .../endpoints/request/received_time_test.go | 62 ++++++++++++++++++ .../src/k8s.io/apiserver/pkg/server/config.go | 1 + 10 files changed, 236 insertions(+), 9 deletions(-) create mode 100644 staging/src/k8s.io/apiserver/pkg/endpoints/filters/request_received_time.go create mode 100644 staging/src/k8s.io/apiserver/pkg/endpoints/filters/request_received_time_test.go create mode 100644 staging/src/k8s.io/apiserver/pkg/endpoints/request/received_time.go create mode 100644 staging/src/k8s.io/apiserver/pkg/endpoints/request/received_time_test.go diff --git a/staging/src/k8s.io/apiserver/pkg/audit/request.go b/staging/src/k8s.io/apiserver/pkg/audit/request.go index db4a5232ec264..205bf25c8b56a 100644 --- a/staging/src/k8s.io/apiserver/pkg/audit/request.go +++ b/staging/src/k8s.io/apiserver/pkg/audit/request.go @@ -43,9 +43,9 @@ const ( userAgentTruncateSuffix = "...TRUNCATED" ) -func NewEventFromRequest(req *http.Request, level auditinternal.Level, attribs authorizer.Attributes) (*auditinternal.Event, error) { +func NewEventFromRequest(req *http.Request, requestReceivedTimestamp time.Time, level auditinternal.Level, attribs authorizer.Attributes) (*auditinternal.Event, error) { ev := &auditinternal.Event{ - RequestReceivedTimestamp: metav1.NewMicroTime(time.Now()), + RequestReceivedTimestamp: metav1.NewMicroTime(requestReceivedTimestamp), Verb: attribs.GetVerb(), RequestURI: req.URL.RequestURI(), UserAgent: maybeTruncateUserAgent(req), diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/filters/BUILD b/staging/src/k8s.io/apiserver/pkg/endpoints/filters/BUILD index 6810eec11681c..6410c8303a6a9 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/filters/BUILD +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/filters/BUILD @@ -16,6 +16,7 @@ go_test( "cachecontrol_test.go", "impersonation_test.go", "metrics_test.go", + "request_received_time_test.go", "requestinfo_test.go", "warning_test.go", ], @@ -27,6 +28,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apiserver/pkg/apis/audit:go_default_library", @@ -54,6 +56,7 @@ go_library( "doc.go", "impersonation.go", "metrics.go", + "request_received_time.go", "requestinfo.go", "warning.go", ], @@ -66,6 +69,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apiserver/pkg/apis/audit:go_default_library", diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/filters/audit.go b/staging/src/k8s.io/apiserver/pkg/endpoints/filters/audit.go index 458c8a67c9278..891d609354985 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/filters/audit.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/filters/audit.go @@ -131,7 +131,11 @@ func createAuditEventAndAttachToContext(req *http.Request, policy policy.Checker return req, nil, nil, nil } - ev, err := audit.NewEventFromRequest(req, level, attribs) + requestReceivedTimestamp, ok := request.ReceivedTimestampFrom(ctx) + if !ok { + requestReceivedTimestamp = time.Now() + } + ev, err := audit.NewEventFromRequest(req, requestReceivedTimestamp, level, attribs) if err != nil { return req, nil, nil, fmt.Errorf("failed to complete audit event from request: %v", err) } diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/filters/request_received_time.go b/staging/src/k8s.io/apiserver/pkg/endpoints/filters/request_received_time.go new file mode 100644 index 0000000000000..d9e7369f67110 --- /dev/null +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/filters/request_received_time.go @@ -0,0 +1,40 @@ +/* +Copyright 2020 The Kubernetes Authors. + +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. +*/ + +package filters + +import ( + "net/http" + + utilclock "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/apiserver/pkg/endpoints/request" +) + +// WithRequestReceivedTimestamp attaches the ReceivedTimestamp (the time the request reached +// the apiserver) to the context. +func WithRequestReceivedTimestamp(handler http.Handler) http.Handler { + return withRequestReceivedTimestampWithClock(handler, utilclock.RealClock{}) +} + +// The clock is passed as a parameter, handy for unit testing. +func withRequestReceivedTimestampWithClock(handler http.Handler, clock utilclock.PassiveClock) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + ctx := req.Context() + req = req.WithContext(request.WithReceivedTimestamp(ctx, clock.Now())) + + handler.ServeHTTP(w, req) + }) +} diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/filters/request_received_time_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/filters/request_received_time_test.go new file mode 100644 index 0000000000000..f09bad40952a7 --- /dev/null +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/filters/request_received_time_test.go @@ -0,0 +1,63 @@ +/* +Copyright 2020 The Kubernetes Authors. + +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. +*/ + +package filters + +import ( + "net/http" + "net/http/httptest" + "testing" + "time" + + utilclock "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/apiserver/pkg/endpoints/request" +) + +func TestWithRequestReceivedTimestamp(t *testing.T) { + receivedTimestampExpected := time.Now() + + var ( + callCount int + receivedTimestampGot time.Time + ok bool + ) + handler := http.HandlerFunc(func(_ http.ResponseWriter, req *http.Request) { + callCount++ + + // does the handler chain that follows see the request received timestamp? + receivedTimestampGot, ok = request.ReceivedTimestampFrom(req.Context()) + }) + + wrapped := withRequestReceivedTimestampWithClock(handler, utilclock.NewFakeClock(receivedTimestampExpected)) + + testRequest, err := http.NewRequest(http.MethodGet, "/api/v1/namespaces", nil) + if err != nil { + t.Fatalf("failed to create new http request - %v", err) + } + + w := httptest.NewRecorder() + wrapped.ServeHTTP(w, testRequest) + + if callCount != 1 { + t.Errorf("WithRequestReceivedTimestamp: expected the original handler to be invoked once, but was actually invoked %d times", callCount) + } + if !ok { + t.Error("WithRequestReceivedTimestamp: expected request.ReceivedTimestampFrom to return true, but got false") + } + if receivedTimestampExpected != receivedTimestampGot { + t.Errorf("WithRequestReceivedTimestamp: request received timestamp expected=%s but got=%s", receivedTimestampExpected, receivedTimestampGot) + } +} diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go b/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go index 8d042dc51cc6a..5b9af2a04bec5 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go @@ -365,8 +365,11 @@ func MonitorRequest(req *http.Request, verb, group, version, resource, subresour // InstrumentRouteFunc works like Prometheus' InstrumentHandlerFunc but wraps // the go-restful RouteFunction instead of a HandlerFunc plus some Kubernetes endpoint specific information. func InstrumentRouteFunc(verb, group, version, resource, subresource, scope, component string, deprecated bool, removedRelease string, routeFunc restful.RouteFunction) restful.RouteFunction { - return restful.RouteFunction(func(request *restful.Request, response *restful.Response) { - now := time.Now() + return restful.RouteFunction(func(req *restful.Request, response *restful.Response) { + requestReceivedTimestamp, ok := request.ReceivedTimestampFrom(req.Request.Context()) + if !ok { + requestReceivedTimestamp = time.Now() + } delegate := &ResponseWriterDelegator{ResponseWriter: response.ResponseWriter} @@ -381,16 +384,19 @@ func InstrumentRouteFunc(verb, group, version, resource, subresource, scope, com } response.ResponseWriter = rw - routeFunc(request, response) + routeFunc(req, response) - MonitorRequest(request.Request, verb, group, version, resource, subresource, scope, component, deprecated, removedRelease, delegate.Header().Get("Content-Type"), delegate.Status(), delegate.ContentLength(), time.Since(now)) + MonitorRequest(req.Request, verb, group, version, resource, subresource, scope, component, deprecated, removedRelease, delegate.Header().Get("Content-Type"), delegate.Status(), delegate.ContentLength(), time.Since(requestReceivedTimestamp)) }) } // InstrumentHandlerFunc works like Prometheus' InstrumentHandlerFunc but adds some Kubernetes endpoint specific information. func InstrumentHandlerFunc(verb, group, version, resource, subresource, scope, component string, deprecated bool, removedRelease string, handler http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, req *http.Request) { - now := time.Now() + requestReceivedTimestamp, ok := request.ReceivedTimestampFrom(req.Context()) + if !ok { + requestReceivedTimestamp = time.Now() + } delegate := &ResponseWriterDelegator{ResponseWriter: w} @@ -405,7 +411,7 @@ func InstrumentHandlerFunc(verb, group, version, resource, subresource, scope, c handler(w, req) - MonitorRequest(req, verb, group, version, resource, subresource, scope, component, deprecated, removedRelease, delegate.Header().Get("Content-Type"), delegate.Status(), delegate.ContentLength(), time.Since(now)) + MonitorRequest(req, verb, group, version, resource, subresource, scope, component, deprecated, removedRelease, delegate.Header().Get("Content-Type"), delegate.Status(), delegate.ContentLength(), time.Since(requestReceivedTimestamp)) } } diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/request/BUILD b/staging/src/k8s.io/apiserver/pkg/endpoints/request/BUILD index 6965fc19f6d04..7dbe7f6528227 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/request/BUILD +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/request/BUILD @@ -10,6 +10,7 @@ go_test( name = "go_default_test", srcs = [ "context_test.go", + "received_time_test.go", "requestinfo_test.go", ], embed = [":go_default_library"], @@ -25,6 +26,7 @@ go_library( srcs = [ "context.go", "doc.go", + "received_time.go", "requestinfo.go", ], importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/endpoints/request", diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/request/received_time.go b/staging/src/k8s.io/apiserver/pkg/endpoints/request/received_time.go new file mode 100644 index 0000000000000..7d58cf3ad9772 --- /dev/null +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/request/received_time.go @@ -0,0 +1,45 @@ +/* +Copyright 2020 The Kubernetes Authors. + +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. +*/ + +package request + +import ( + "context" + "time" +) + +type requestReceivedTimestampKeyType int + +// requestReceivedTimestampKey is the ReceivedTimestamp (the time the request reached the apiserver) +// key for the context. +const requestReceivedTimestampKey requestReceivedTimestampKeyType = iota + +// WithReceivedTimestamp returns a copy of parent context in which the ReceivedTimestamp +// (the time the request reached the apiserver) is set. +// +// If the specified ReceivedTimestamp is zero, no value is set and the parent context is returned as is. +func WithReceivedTimestamp(parent context.Context, receivedTimestamp time.Time) context.Context { + if receivedTimestamp.IsZero() { + return parent + } + return WithValue(parent, requestReceivedTimestampKey, receivedTimestamp) +} + +// ReceivedTimestampFrom returns the value of the ReceivedTimestamp key from the specified context. +func ReceivedTimestampFrom(ctx context.Context) (time.Time, bool) { + info, ok := ctx.Value(requestReceivedTimestampKey).(time.Time) + return info, ok +} diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/request/received_time_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/request/received_time_test.go new file mode 100644 index 0000000000000..512ac5928bcf5 --- /dev/null +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/request/received_time_test.go @@ -0,0 +1,62 @@ +/* +Copyright 2020 The Kubernetes Authors. + +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. +*/ + +package request + +import ( + "context" + "strconv" + "testing" + "time" +) + +func TestWithRequestReceiveTime(t *testing.T) { + tests := []struct { + name string + receivedTimestamp time.Time + expected bool + }{ + { + name: "request received time is set", + receivedTimestamp: time.Now(), + expected: true, + }, + { + name: "request received time is empty", + receivedTimestamp: time.Time{}, + expected: false, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + parent := context.TODO() + ctx := WithReceivedTimestamp(parent, test.receivedTimestamp) + if ctx == nil { + t.Fatal("WithReceivedTimestamp: expected a non nil context, got nil") + } + + receivedTimestampGot, ok := ReceivedTimestampFrom(ctx) + if test.expected != ok { + t.Errorf("ReceivedTimestampFrom: expected=%s got=%s", strconv.FormatBool(test.expected), strconv.FormatBool(ok)) + } + + if test.receivedTimestamp != receivedTimestampGot { + t.Errorf("ReceivedTimestampFrom: received timestamp expected=%s but got=%s", test.receivedTimestamp, receivedTimestampGot) + } + }) + } +} diff --git a/staging/src/k8s.io/apiserver/pkg/server/config.go b/staging/src/k8s.io/apiserver/pkg/server/config.go index 164e1c293a09e..e9a2aa38739e9 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/config.go +++ b/staging/src/k8s.io/apiserver/pkg/server/config.go @@ -776,6 +776,7 @@ func DefaultBuildHandlerChain(apiHandler http.Handler, c *Config) http.Handler { handler = genericapifilters.WithAuditAnnotations(handler, c.AuditBackend, c.AuditPolicyChecker) handler = genericapifilters.WithWarningRecorder(handler) handler = genericapifilters.WithCacheControl(handler) + handler = genericapifilters.WithRequestReceivedTimestamp(handler) handler = genericfilters.WithPanicRecovery(handler, c.IsTerminating) return handler } From a076d097ff11b42895941cba434736eb57a83d27 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Oct 2020 13:56:30 +0100 Subject: [PATCH 91/96] UPSTREAM: 94984: check readyz before adding endpoint for kube-apiserver --- pkg/master/controller.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/master/controller.go b/pkg/master/controller.go index fdc9f10c19fb4..1365788a4e6c2 100644 --- a/pkg/master/controller.go +++ b/pkg/master/controller.go @@ -52,7 +52,7 @@ type Controller struct { ServiceClient corev1client.ServicesGetter NamespaceClient corev1client.NamespacesGetter EventClient corev1client.EventsGetter - healthClient rest.Interface + readyzClient rest.Interface ServiceClusterIPRegistry rangeallocation.RangeRegistry ServiceClusterIPRange net.IPNet @@ -85,7 +85,7 @@ type Controller struct { } // NewBootstrapController returns a controller for watching the core capabilities of the master -func (c *completedConfig) NewBootstrapController(legacyRESTStorage corerest.LegacyRESTStorage, serviceClient corev1client.ServicesGetter, nsClient corev1client.NamespacesGetter, eventClient corev1client.EventsGetter, healthClient rest.Interface) *Controller { +func (c *completedConfig) NewBootstrapController(legacyRESTStorage corerest.LegacyRESTStorage, serviceClient corev1client.ServicesGetter, nsClient corev1client.NamespacesGetter, eventClient corev1client.EventsGetter, readyzClient rest.Interface) *Controller { _, publicServicePort, err := c.GenericConfig.SecureServing.HostPort() if err != nil { klog.Fatalf("failed to get listener address: %v", err) @@ -97,7 +97,7 @@ func (c *completedConfig) NewBootstrapController(legacyRESTStorage corerest.Lega ServiceClient: serviceClient, NamespaceClient: nsClient, EventClient: eventClient, - healthClient: healthClient, + readyzClient: readyzClient, EndpointReconciler: c.ExtraConfig.EndpointReconcilerConfig.Reconciler, EndpointInterval: c.ExtraConfig.EndpointReconcilerConfig.Interval, @@ -211,7 +211,7 @@ func (c *Controller) RunKubernetesService(ch chan struct{}) { // wait until process is ready wait.PollImmediateUntil(100*time.Millisecond, func() (bool, error) { var code int - c.healthClient.Get().AbsPath("/healthz").Do(context.TODO()).StatusCode(&code) + c.readyzClient.Get().AbsPath("/readyz").Do(context.TODO()).StatusCode(&code) return code == http.StatusOK, nil }, ch) From 73aba8bf2d0571388cf1423f8b9774248ac7e970 Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Thu, 29 Oct 2020 13:56:31 +0100 Subject: [PATCH 92/96] UPSTREAM: 95009: Remove ext2 + ext3 tests Testing with the default FS (ext4) is IMO enough, ext2/ext3 does not add much value. It's handled by the same kernel module anyway. Leave ext2/ext3 only in GCE PD which is tested in kubernetes/kubernetes CI jobs regularly to catch regressions. --- test/e2e/storage/drivers/in_tree.go | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/test/e2e/storage/drivers/in_tree.go b/test/e2e/storage/drivers/in_tree.go index a866266c1f1e6..0d1fdc273b1f0 100644 --- a/test/e2e/storage/drivers/in_tree.go +++ b/test/e2e/storage/drivers/in_tree.go @@ -378,9 +378,6 @@ func InitISCSIDriver() testsuites.TestDriver { MaxFileSize: testpatterns.FileSizeMedium, SupportedFsType: sets.NewString( "", // Default fsType - "ext2", - // TODO: fix iSCSI driver can work with ext3 - //"ext3", "ext4", ), TopologyKeys: []string{v1.LabelHostname}, @@ -560,9 +557,6 @@ func InitRbdDriver() testsuites.TestDriver { }, SupportedFsType: sets.NewString( "", // Default fsType - "ext2", - // TODO: fix rbd driver can work with ext3 - //"ext3", "ext4", ), Capabilities: map[testsuites.Capability]bool{ @@ -1076,7 +1070,6 @@ func InitCinderDriver() testsuites.TestDriver { }, SupportedFsType: sets.NewString( "", // Default fsType - "ext3", ), TopologyKeys: []string{v1.LabelZoneFailureDomain}, Capabilities: map[testsuites.Capability]bool{ @@ -1515,7 +1508,6 @@ func InitAzureDiskDriver() testsuites.TestDriver { }, SupportedFsType: sets.NewString( "", // Default fsType - "ext3", "ext4", "xfs", ), @@ -1656,8 +1648,6 @@ func InitAwsDriver() testsuites.TestDriver { }, SupportedFsType: sets.NewString( "", // Default fsType - "ext2", - "ext3", "ext4", "xfs", "ntfs", @@ -1813,8 +1803,6 @@ var ( localVolumeSupportedFsTypes = map[utils.LocalVolumeType]sets.String{ utils.LocalVolumeBlock: sets.NewString( "", // Default fsType - "ext2", - "ext3", "ext4", //"xfs", disabled see issue https://github.com/kubernetes/kubernetes/issues/74095 ), From cebccbf411df24d754f67e4cf8010566d59a2eef Mon Sep 17 00:00:00 2001 From: Abu Kashem Date: Thu, 29 Oct 2020 13:56:31 +0100 Subject: [PATCH 93/96] UPSTREAM: 94986: drop managed fields from audit entries drop the managed fields of the objects from the audit entries when we are logging request and response bodies. --- .../src/k8s.io/apiserver/pkg/audit/request.go | 78 +++++++- .../apiserver/pkg/audit/request_test.go | 173 +++++++++++++++++- 2 files changed, 247 insertions(+), 4 deletions(-) diff --git a/staging/src/k8s.io/apiserver/pkg/audit/request.go b/staging/src/k8s.io/apiserver/pkg/audit/request.go index 205bf25c8b56a..f88c196e67a44 100644 --- a/staging/src/k8s.io/apiserver/pkg/audit/request.go +++ b/staging/src/k8s.io/apiserver/pkg/audit/request.go @@ -153,8 +153,15 @@ func LogRequestObject(ae *auditinternal.Event, obj runtime.Object, gvr schema.Gr return } + copy, ok, err := copyWithoutManagedFields(obj) + if err != nil { + klog.Warningf("error while dropping managed fields from the request for %q error: %v", reflect.TypeOf(obj).Name(), err) + } + if ok { + obj = copy + } + // TODO(audit): hook into the serializer to avoid double conversion - var err error ae.RequestObject, err = encodeObject(obj, gvr.GroupVersion(), s) if err != nil { // TODO(audit): add error slice to audit event struct @@ -193,8 +200,16 @@ func LogResponseObject(ae *auditinternal.Event, obj runtime.Object, gv schema.Gr if ae.Level.Less(auditinternal.LevelRequestResponse) { return } + + copy, ok, err := copyWithoutManagedFields(obj) + if err != nil { + klog.Warningf("error while dropping managed fields from the response for %q error: %v", reflect.TypeOf(obj).Name(), err) + } + if ok { + obj = copy + } + // TODO(audit): hook into the serializer to avoid double conversion - var err error ae.ResponseObject, err = encodeObject(obj, gv, s) if err != nil { klog.Warningf("Audit failed for %q response: %v", reflect.TypeOf(obj).Name(), err) @@ -244,3 +259,62 @@ func maybeTruncateUserAgent(req *http.Request) string { return ua } + +// copyWithoutManagedFields will make a deep copy of the specified object and will discard +// managed fields from the copy. +// The specified object is expected to be a meta.Object or a "list". The specified object obj +// is treated as readonly and hence not mutated. +// On return, an error is set if the function runs into any error while removing the managed fields. +// On return, the boolean value is true if the copy has been made successfully, otherwise false. +func copyWithoutManagedFields(obj runtime.Object) (runtime.Object, bool, error) { + removeManagedFields := func(obj runtime.Object) error { + accessor, err := meta.Accessor(obj) + if err != nil { + return err + } + accessor.SetManagedFields(nil) + return nil + } + + isAccessor := true + if _, err := meta.Accessor(obj); err != nil { + isAccessor = false + } + isList := meta.IsListType(obj) + + _, isTable := obj.(*metav1.Table) + if !isAccessor && !isList && !isTable { + return nil, false, nil + } + + copy := obj.DeepCopyObject() + + if isAccessor { + if err := removeManagedFields(copy); err != nil { + return nil, false, err + } + } + + if isList { + if err := meta.EachListItem(copy, removeManagedFields); err != nil { + return nil, false, err + } + } + + if isTable { + table := copy.(*metav1.Table) + for i := range table.Rows { + rowObj := table.Rows[i].Object + + if rowObj.Object == nil { + continue + } + + if err := removeManagedFields(rowObj.Object); err != nil { + return nil, false, err + } + } + } + + return copy, true, nil +} diff --git a/staging/src/k8s.io/apiserver/pkg/audit/request_test.go b/staging/src/k8s.io/apiserver/pkg/audit/request_test.go index 12c36ccd6690e..b1f120bcc33d8 100644 --- a/staging/src/k8s.io/apiserver/pkg/audit/request_test.go +++ b/staging/src/k8s.io/apiserver/pkg/audit/request_test.go @@ -18,11 +18,17 @@ package audit import ( "net/http" + "reflect" "testing" + "time" - "github.com/stretchr/testify/assert" - + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" auditinternal "k8s.io/apiserver/pkg/apis/audit" + + "github.com/google/go-cmp/cmp" + "github.com/stretchr/testify/assert" ) func TestLogAnnotation(t *testing.T) { @@ -54,3 +60,166 @@ func TestMaybeTruncateUserAgent(t *testing.T) { req.Header.Set("User-Agent", ua) assert.NotEqual(t, ua, maybeTruncateUserAgent(req)) } + +func TestCopyWithoutManagedFields(t *testing.T) { + tests := []struct { + name string + object runtime.Object + expected runtime.Object + }{ + { + name: "object specified is not a meta.Accessor or a list", + object: &metav1.Status{}, + }, + { + name: "object specified is a meta.Accessor and has managed fields", + object: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + Namespace: "bar", + ManagedFields: []metav1.ManagedFieldsEntry{ + {Manager: "a", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{Time: time.Now()}}, + {Manager: "b", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{Time: time.Now()}}, + }, + }, + }, + expected: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + Namespace: "bar", + }, + }, + }, + { + name: "object specified is a list and its items have managed fields", + object: &corev1.PodList{ + Items: []corev1.Pod{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + Namespace: "ns1", + ManagedFields: []metav1.ManagedFieldsEntry{ + {Manager: "a", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{Time: time.Now()}}, + {Manager: "b", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{Time: time.Now()}}, + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "ns2", + ManagedFields: []metav1.ManagedFieldsEntry{ + {Manager: "c", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{Time: time.Now()}}, + {Manager: "d", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{Time: time.Now()}}, + }, + }, + }, + }, + }, + expected: &corev1.PodList{ + Items: []corev1.Pod{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + Namespace: "ns1", + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "ns2", + }, + }, + }, + }, + }, + { + name: "object specified is a Table and objects in its rows have managed fields", + object: &metav1.Table{ + Rows: []metav1.TableRow{ + { + Object: runtime.RawExtension{ + Object: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + Namespace: "ns1", + ManagedFields: []metav1.ManagedFieldsEntry{ + {Manager: "a", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{Time: time.Now()}}, + {Manager: "b", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{Time: time.Now()}}, + }, + }, + }, + }, + }, + { + Object: runtime.RawExtension{ + Object: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "ns2", + ManagedFields: []metav1.ManagedFieldsEntry{ + {Manager: "c", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{Time: time.Now()}}, + {Manager: "d", Operation: metav1.ManagedFieldsOperationUpdate, Time: &metav1.Time{Time: time.Now()}}, + }, + }, + }, + }, + }, + }, + }, + expected: &metav1.Table{ + Rows: []metav1.TableRow{ + { + Object: runtime.RawExtension{ + Object: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + Namespace: "ns1", + }, + }, + }, + }, + { + Object: runtime.RawExtension{ + Object: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "ns2", + }, + }, + }, + }, + }, + }, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + objectGot, ok, err := copyWithoutManagedFields(test.object) + + if test.expected == nil { + if err != nil { + t.Errorf("expected error to be nil, but got %v", err) + } + if ok { + t.Error("expected ok to be false, but got true") + } + if objectGot != nil { + t.Errorf("expected the object returned to be nil, but got %v", objectGot) + } + return + } + + if err != nil { + t.Errorf("expected error to be nil, but got %v", err) + } + if !ok { + t.Error("expected ok to be true, but got false") + } + if !reflect.DeepEqual(test.expected, objectGot) { + t.Errorf("expected and actual do not match, diff: %s", cmp.Diff(test.expected, objectGot)) + } + }) + } +} From d8199353a0967668ee8357866d96d78b8ab34e6f Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Thu, 29 Oct 2020 13:56:31 +0100 Subject: [PATCH 94/96] UPSTREAM: 95003: Fail a test on pre-provisioned Cinder volume deletion error This should stop leaking Cinder volumes in tests as a side-effect. --- test/e2e/storage/drivers/in_tree.go | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/test/e2e/storage/drivers/in_tree.go b/test/e2e/storage/drivers/in_tree.go index 0d1fdc273b1f0..9edf98cac14ab 100644 --- a/test/e2e/storage/drivers/in_tree.go +++ b/test/e2e/storage/drivers/in_tree.go @@ -1184,6 +1184,7 @@ func (c *cinderDriver) CreateVolume(config *testsuites.PerTestConfig, volType te } func (v *cinderVolume) DeleteVolume() { + id := v.volumeID name := v.volumeName // Try to delete the volume for several seconds - it takes @@ -1192,16 +1193,23 @@ func (v *cinderVolume) DeleteVolume() { var err error timeout := time.Second * 120 - framework.Logf("Waiting up to %v for removal of cinder volume %s", timeout, name) + framework.Logf("Waiting up to %v for removal of cinder volume %s / %s", timeout, id, name) for start := time.Now(); time.Since(start) < timeout; time.Sleep(5 * time.Second) { - output, err = exec.Command("cinder", "delete", name).CombinedOutput() + output, err = exec.Command("cinder", "delete", id).CombinedOutput() if err == nil { - framework.Logf("Cinder volume %s deleted", name) + framework.Logf("Cinder volume %s deleted", id) return } - framework.Logf("Failed to delete volume %s: %v", name, err) + framework.Logf("Failed to delete volume %s / %s: %v\n%s", id, name, err, string(output)) } - framework.Logf("Giving up deleting volume %s: %v\n%s", name, err, string(output[:])) + // Timed out, try to get "cinder show " output for easier debugging + showOutput, showErr := exec.Command("cinder", "show", id).CombinedOutput() + if showErr != nil { + framework.Logf("Failed to show volume %s / %s: %v\n%s", id, name, showErr, string(showOutput)) + } else { + framework.Logf("Volume %s / %s:\n%s", id, name, string(showOutput)) + } + framework.Failf("Failed to delete pre-provisioned volume %s / %s: %v\n%s", id, name, err, string(output[:])) } // GCE From 109af168d466820b90dfab583e4717811ffac83d Mon Sep 17 00:00:00 2001 From: Tomas Nozicka Date: Thu, 29 Oct 2020 13:56:32 +0100 Subject: [PATCH 95/96] UPSTREAM: : pin and bump --- go.mod | 91 +- go.sum | 53 +- staging/src/k8s.io/api/go.mod | 31 +- staging/src/k8s.io/api/go.sum | 623 +- .../src/k8s.io/apiextensions-apiserver/go.mod | 40 +- .../src/k8s.io/apiextensions-apiserver/go.sum | 259 +- staging/src/k8s.io/apimachinery/go.mod | 13 +- staging/src/k8s.io/apimachinery/go.sum | 11 +- staging/src/k8s.io/apiserver/go.mod | 47 +- staging/src/k8s.io/apiserver/go.sum | 358 +- staging/src/k8s.io/cli-runtime/go.mod | 39 +- staging/src/k8s.io/cli-runtime/go.sum | 384 +- staging/src/k8s.io/client-go/go.mod | 12 +- staging/src/k8s.io/client-go/go.sum | 11 +- staging/src/k8s.io/cloud-provider/go.mod | 36 +- staging/src/k8s.io/cloud-provider/go.sum | 432 +- staging/src/k8s.io/cluster-bootstrap/go.mod | 9 +- staging/src/k8s.io/cluster-bootstrap/go.sum | 9 +- staging/src/k8s.io/code-generator/go.mod | 10 +- staging/src/k8s.io/code-generator/go.sum | 7 +- staging/src/k8s.io/component-base/go.mod | 13 +- staging/src/k8s.io/component-base/go.sum | 13 +- staging/src/k8s.io/cri-api/go.mod | 7 +- staging/src/k8s.io/cri-api/go.sum | 1 - staging/src/k8s.io/csi-translation-lib/go.mod | 11 +- staging/src/k8s.io/csi-translation-lib/go.sum | 11 +- staging/src/k8s.io/kube-aggregator/go.mod | 22 +- staging/src/k8s.io/kube-aggregator/go.sum | 15 +- .../src/k8s.io/kube-controller-manager/go.mod | 9 +- .../src/k8s.io/kube-controller-manager/go.sum | 11 +- staging/src/k8s.io/kube-proxy/go.mod | 9 +- staging/src/k8s.io/kube-proxy/go.sum | 11 +- staging/src/k8s.io/kube-scheduler/go.mod | 11 +- staging/src/k8s.io/kube-scheduler/go.sum | 11 +- staging/src/k8s.io/kubectl/go.mod | 22 +- staging/src/k8s.io/kubectl/go.sum | 14 +- staging/src/k8s.io/kubelet/go.mod | 11 +- staging/src/k8s.io/kubelet/go.sum | 11 +- .../src/k8s.io/legacy-cloud-providers/go.mod | 39 +- .../src/k8s.io/legacy-cloud-providers/go.sum | 337 +- staging/src/k8s.io/metrics/go.mod | 12 +- staging/src/k8s.io/metrics/go.sum | 11 +- staging/src/k8s.io/sample-apiserver/go.mod | 20 +- staging/src/k8s.io/sample-apiserver/go.sum | 15 +- staging/src/k8s.io/sample-cli-plugin/go.mod | 10 +- staging/src/k8s.io/sample-cli-plugin/go.sum | 12 +- staging/src/k8s.io/sample-controller/go.mod | 14 +- staging/src/k8s.io/sample-controller/go.sum | 11 +- vendor/BUILD | 534 - vendor/OWNERS | 2 +- .../bitbucket.org/bertimus9/systemstat/BUILD | 28 - .../go/compute/metadata/BUILD | 23 - .../compute/mgmt/2019-12-01/compute/BUILD | 66 - .../mgmt/2019-05-01/containerregistry/BUILD | 42 - .../mgmt/2020-04-01/containerservice/BUILD | 40 - .../network/mgmt/2019-06-01/network/BUILD | 118 - .../resources/mgmt/2017-05-10/resources/BUILD | 42 - .../storage/mgmt/2019-06-01/storage/BUILD | 53 - .../Azure/azure-sdk-for-go/storage/BUILD | 58 - .../Azure/azure-sdk-for-go/version/BUILD | 23 - vendor/github.com/Azure/go-ansiterm/BUILD | 41 - .../Azure/go-ansiterm/winterm/BUILD | 38 - .../Azure/go-autorest/autorest/BUILD | 51 - .../Azure/go-autorest/autorest/adal/BUILD | 35 - .../Azure/go-autorest/autorest/azure/BUILD | 33 - .../Azure/go-autorest/autorest/date/BUILD | 29 - .../Azure/go-autorest/autorest/mocks/BUILD | 26 - .../Azure/go-autorest/autorest/to/BUILD | 23 - .../go-autorest/autorest/validation/BUILD | 26 - .../github.com/Azure/go-autorest/logger/BUILD | 23 - .../Azure/go-autorest/tracing/BUILD | 23 - .../k8s-cloud-provider/pkg/cloud/BUILD | 48 - .../k8s-cloud-provider/pkg/cloud/filter/BUILD | 24 - .../k8s-cloud-provider/pkg/cloud/meta/BUILD | 34 - .../k8s-cloud-provider/pkg/cloud/mock/BUILD | 32 - vendor/github.com/JeffAshton/win_pdh/BUILD | 23 - vendor/github.com/MakeNowJust/heredoc/BUILD | 23 - vendor/github.com/Microsoft/go-winio/BUILD | 47 - .../Microsoft/go-winio/pkg/guid/BUILD | 24 - .../github.com/Microsoft/go-winio/vhd/BUILD | 27 - vendor/github.com/Microsoft/hcsshim/BUILD | 74 - vendor/github.com/Microsoft/hcsshim/hcn/BUILD | 50 - .../Microsoft/hcsshim/internal/cni/BUILD | 27 - .../Microsoft/hcsshim/internal/cow/BUILD | 27 - .../Microsoft/hcsshim/internal/hcs/BUILD | 50 - .../Microsoft/hcsshim/internal/hcserror/BUILD | 23 - .../Microsoft/hcsshim/internal/hns/BUILD | 44 - .../Microsoft/hcsshim/internal/interop/BUILD | 32 - .../Microsoft/hcsshim/internal/log/BUILD | 27 - .../hcsshim/internal/logfields/BUILD | 23 - .../Microsoft/hcsshim/internal/longpath/BUILD | 23 - .../hcsshim/internal/mergemaps/BUILD | 23 - .../Microsoft/hcsshim/internal/oc/BUILD | 30 - .../Microsoft/hcsshim/internal/regstate/BUILD | 34 - .../Microsoft/hcsshim/internal/runhcs/BUILD | 31 - .../Microsoft/hcsshim/internal/safefile/BUILD | 35 - .../Microsoft/hcsshim/internal/schema1/BUILD | 27 - .../Microsoft/hcsshim/internal/schema2/BUILD | 121 - .../Microsoft/hcsshim/internal/timeout/BUILD | 23 - .../hcsshim/internal/vmcompute/BUILD | 39 - .../Microsoft/hcsshim/internal/wclayer/BUILD | 64 - .../Microsoft/hcsshim/osversion/BUILD | 32 - vendor/github.com/NYTimes/gziphandler/BUILD | 26 - vendor/github.com/PuerkitoBio/purell/BUILD | 29 - vendor/github.com/PuerkitoBio/urlesc/BUILD | 23 - vendor/github.com/armon/circbuf/BUILD | 23 - .../github.com/asaskevich/govalidator/BUILD | 32 - vendor/github.com/aws/aws-sdk-go/aws/BUILD | 59 - .../aws/aws-sdk-go/aws/awserr/BUILD | 26 - .../aws/aws-sdk-go/aws/awsutil/BUILD | 30 - .../aws/aws-sdk-go/aws/client/BUILD | 37 - .../aws/aws-sdk-go/aws/client/metadata/BUILD | 23 - .../aws/aws-sdk-go/aws/corehandlers/BUILD | 33 - .../aws/aws-sdk-go/aws/credentials/BUILD | 40 - .../aws/credentials/ec2rolecreds/BUILD | 31 - .../aws/credentials/endpointcreds/BUILD | 32 - .../aws/credentials/processcreds/BUILD | 28 - .../aws-sdk-go/aws/credentials/stscreds/BUILD | 35 - .../github.com/aws/aws-sdk-go/aws/csm/BUILD | 35 - .../aws/aws-sdk-go/aws/defaults/BUILD | 38 - .../aws/aws-sdk-go/aws/ec2metadata/BUILD | 37 - .../aws/aws-sdk-go/aws/endpoints/BUILD | 32 - .../aws/aws-sdk-go/aws/request/BUILD | 45 - .../aws/aws-sdk-go/aws/session/BUILD | 47 - .../aws/aws-sdk-go/aws/signer/v4/BUILD | 37 - .../aws/aws-sdk-go/internal/ini/BUILD | 47 - .../aws/aws-sdk-go/internal/sdkio/BUILD | 27 - .../aws/aws-sdk-go/internal/sdkmath/BUILD | 26 - .../aws/aws-sdk-go/internal/sdkrand/BUILD | 27 - .../aws/aws-sdk-go/internal/sdkuri/BUILD | 23 - .../aws-sdk-go/internal/shareddefaults/BUILD | 26 - .../aws/aws-sdk-go/internal/strings/BUILD | 23 - .../aws/aws-sdk-go/private/protocol/BUILD | 48 - .../private/protocol/ec2query/BUILD | 32 - .../private/protocol/json/jsonutil/BUILD | 31 - .../aws-sdk-go/private/protocol/jsonrpc/BUILD | 33 - .../aws-sdk-go/private/protocol/query/BUILD | 36 - .../private/protocol/query/queryutil/BUILD | 24 - .../aws-sdk-go/private/protocol/rest/BUILD | 34 - .../private/protocol/xml/xmlutil/BUILD | 32 - .../aws/aws-sdk-go/service/autoscaling/BUILD | 39 - .../aws/aws-sdk-go/service/ec2/BUILD | 41 - .../aws/aws-sdk-go/service/ecr/BUILD | 39 - .../aws/aws-sdk-go/service/elb/BUILD | 39 - .../aws/aws-sdk-go/service/elbv2/BUILD | 39 - .../aws/aws-sdk-go/service/kms/BUILD | 38 - .../aws/aws-sdk-go/service/sts/BUILD | 42 - .../aws/aws-sdk-go/service/sts/stsiface/BUILD | 28 - vendor/github.com/beorn7/perks/quantile/BUILD | 23 - vendor/github.com/blang/semver/BUILD | 29 - .../caddyserver/caddy/caddyfile/BUILD | 28 - vendor/github.com/cespare/xxhash/v2/BUILD | 29 - .../chai2010/gettext-go/gettext/BUILD | 42 - .../chai2010/gettext-go/gettext/mo/BUILD | 30 - .../chai2010/gettext-go/gettext/plural/BUILD | 27 - .../chai2010/gettext-go/gettext/po/BUILD | 32 - .../checkpoint-restore/go-criu/v4/BUILD | 33 - .../checkpoint-restore/go-criu/v4/rpc/BUILD | 24 - vendor/github.com/cilium/ebpf/BUILD | 45 - vendor/github.com/cilium/ebpf/asm/BUILD | 37 - vendor/github.com/cilium/ebpf/internal/BUILD | 41 - .../github.com/cilium/ebpf/internal/btf/BUILD | 35 - .../cilium/ebpf/internal/unix/BUILD | 35 - vendor/github.com/clusterhq/flocker-go/BUILD | 27 - .../spec/lib/go/csi/BUILD | 32 - .../containerd/cgroups/stats/v1/BUILD | 30 - vendor/github.com/containerd/console/BUILD | 65 - .../api/services/containers/v1/BUILD | 29 - .../containerd/api/services/tasks/v1/BUILD | 31 - .../containerd/api/services/version/v1/BUILD | 28 - .../containerd/containerd/api/types/BUILD | 38 - .../containerd/api/types/task/BUILD | 27 - .../containerd/containerd/containers/BUILD | 24 - .../containerd/containerd/errdefs/BUILD | 31 - .../containerd/containerd/namespaces/BUILD | 35 - .../containerd/containerd/pkg/dialer/BUILD | 35 - vendor/github.com/containerd/ttrpc/BUILD | 51 - .../containernetworking/cni/libcni/BUILD | 32 - .../containernetworking/cni/pkg/invoke/BUILD | 35 - .../cni/pkg/types/020/BUILD | 24 - .../containernetworking/cni/pkg/types/BUILD | 30 - .../cni/pkg/types/current/BUILD | 27 - .../containernetworking/cni/pkg/utils/BUILD | 24 - .../containernetworking/cni/pkg/version/BUILD | 33 - .../corefile-migration/migration/BUILD | 32 - .../migration/corefile/BUILD | 24 - vendor/github.com/coreos/go-oidc/BUILD | 33 - .../github.com/coreos/go-semver/semver/BUILD | 26 - .../github.com/coreos/go-systemd/daemon/BUILD | 26 - .../coreos/go-systemd/journal/BUILD | 23 - .../github.com/coreos/go-systemd/util/BUILD | 29 - .../coreos/go-systemd/v22/dbus/BUILD | 31 - vendor/github.com/coreos/pkg/capnslog/BUILD | 78 - vendor/github.com/coreos/pkg/dlopen/BUILD | 28 - .../cpuguy83/go-md2man/v2/md2man/BUILD | 27 - .../cyphar/filepath-securejoin/BUILD | 27 - vendor/github.com/davecgh/go-spew/spew/BUILD | 32 - .../github.com/daviddengcn/go-colortext/BUILD | 27 - vendor/github.com/dgrijalva/jwt-go/BUILD | 38 - .../docker/distribution/digestset/BUILD | 24 - .../docker/distribution/reference/BUILD | 32 - .../distribution/registry/api/errcode/BUILD | 27 - vendor/github.com/docker/docker/api/BUILD | 30 - .../github.com/docker/docker/api/types/BUILD | 69 - .../docker/docker/api/types/blkiodev/BUILD | 23 - .../docker/docker/api/types/container/BUILD | 41 - .../docker/docker/api/types/events/BUILD | 23 - .../docker/docker/api/types/filters/BUILD | 24 - .../docker/docker/api/types/image/BUILD | 23 - .../docker/docker/api/types/mount/BUILD | 23 - .../docker/docker/api/types/network/BUILD | 27 - .../docker/docker/api/types/registry/BUILD | 27 - .../docker/docker/api/types/strslice/BUILD | 23 - .../docker/docker/api/types/swarm/BUILD | 43 - .../docker/api/types/swarm/runtime/BUILD | 27 - .../docker/docker/api/types/time/BUILD | 26 - .../docker/docker/api/types/versions/BUILD | 23 - .../docker/docker/api/types/volume/BUILD | 27 - vendor/github.com/docker/docker/client/BUILD | 159 - vendor/github.com/docker/docker/errdefs/BUILD | 36 - .../docker/docker/pkg/jsonmessage/BUILD | 28 - .../docker/docker/pkg/stdcopy/BUILD | 23 - .../github.com/docker/docker/pkg/term/BUILD | 84 - .../docker/docker/pkg/term/windows/BUILD | 37 - .../docker/go-connections/nat/BUILD | 27 - .../docker/go-connections/sockets/BUILD | 39 - .../docker/go-connections/tlsconfig/BUILD | 30 - vendor/github.com/docker/go-units/BUILD | 27 - vendor/github.com/docker/spdystream/BUILD | 33 - .../github.com/docker/spdystream/spdy/BUILD | 28 - vendor/github.com/dustin/go-humanize/BUILD | 35 - vendor/github.com/elazarl/goproxy/BUILD | 35 - vendor/github.com/emicklei/go-restful/BUILD | 56 - .../github.com/emicklei/go-restful/log/BUILD | 23 - .../euank/go-kmsg-parser/kmsgparser/BUILD | 26 - vendor/github.com/evanphx/json-patch/BUILD | 28 - vendor/github.com/exponent-io/jsonpath/BUILD | 27 - vendor/github.com/fatih/camelcase/BUILD | 23 - vendor/github.com/fsnotify/fsnotify/BUILD | 59 - vendor/github.com/ghodss/yaml/BUILD | 27 - vendor/github.com/go-bindata/go-bindata/BUILD | 38 - .../go-bindata/go-bindata/go-bindata/BUILD | 35 - vendor/github.com/go-logr/logr/BUILD | 23 - vendor/github.com/go-openapi/analysis/BUILD | 41 - .../go-openapi/analysis/internal/BUILD | 26 - vendor/github.com/go-openapi/errors/BUILD | 31 - .../github.com/go-openapi/jsonpointer/BUILD | 24 - .../github.com/go-openapi/jsonreference/BUILD | 27 - vendor/github.com/go-openapi/loads/BUILD | 31 - vendor/github.com/go-openapi/runtime/BUILD | 46 - vendor/github.com/go-openapi/spec/BUILD | 55 - vendor/github.com/go-openapi/strfmt/BUILD | 39 - vendor/github.com/go-openapi/swag/BUILD | 44 - vendor/github.com/go-openapi/validate/BUILD | 54 - .../github.com/go-ozzo/ozzo-validation/BUILD | 41 - .../go-ozzo/ozzo-validation/is/BUILD | 27 - vendor/github.com/go-stack/stack/BUILD | 23 - vendor/github.com/godbus/dbus/v5/BUILD | 60 - .../github.com/gogo/protobuf/gogoproto/BUILD | 31 - .../gogo/protobuf/plugin/compare/BUILD | 34 - .../gogo/protobuf/plugin/defaultcheck/BUILD | 27 - .../gogo/protobuf/plugin/description/BUILD | 33 - .../gogo/protobuf/plugin/embedcheck/BUILD | 27 - .../gogo/protobuf/plugin/enumstringer/BUILD | 27 - .../gogo/protobuf/plugin/equal/BUILD | 34 - .../gogo/protobuf/plugin/face/BUILD | 31 - .../gogo/protobuf/plugin/gostring/BUILD | 31 - .../gogo/protobuf/plugin/marshalto/BUILD | 30 - .../gogo/protobuf/plugin/oneofcheck/BUILD | 27 - .../gogo/protobuf/plugin/populate/BUILD | 30 - .../gogo/protobuf/plugin/size/BUILD | 34 - .../gogo/protobuf/plugin/stringer/BUILD | 31 - .../gogo/protobuf/plugin/testgen/BUILD | 27 - .../gogo/protobuf/plugin/union/BUILD | 31 - .../gogo/protobuf/plugin/unmarshal/BUILD | 29 - vendor/github.com/gogo/protobuf/proto/BUILD | 58 - .../protobuf/protoc-gen-gogo/descriptor/BUILD | 29 - .../protobuf/protoc-gen-gogo/generator/BUILD | 36 - .../generator/internal/remap/BUILD | 23 - .../gogo/protobuf/protoc-gen-gogo/grpc/BUILD | 27 - .../protobuf/protoc-gen-gogo/plugin/BUILD | 27 - .../github.com/gogo/protobuf/sortkeys/BUILD | 23 - vendor/github.com/gogo/protobuf/types/BUILD | 46 - vendor/github.com/gogo/protobuf/vanity/BUILD | 37 - .../gogo/protobuf/vanity/command/BUILD | 45 - vendor/github.com/golang/groupcache/lru/BUILD | 23 - vendor/github.com/golang/mock/gomock/BUILD | 28 - .../github.com/golang/protobuf/jsonpb/BUILD | 35 - vendor/github.com/golang/protobuf/proto/BUILD | 45 - .../protobuf/protoc-gen-go/descriptor/BUILD | 28 - .../protobuf/protoc-gen-go/generator/BUILD | 32 - .../generator/internal/remap/BUILD | 23 - .../protobuf/protoc-gen-go/plugin/BUILD | 28 - .../github.com/golang/protobuf/ptypes/BUILD | 42 - .../golang/protobuf/ptypes/any/BUILD | 28 - .../golang/protobuf/ptypes/duration/BUILD | 28 - .../golang/protobuf/ptypes/timestamp/BUILD | 28 - .../golang/protobuf/ptypes/wrappers/BUILD | 28 - vendor/github.com/google/btree/BUILD | 23 - .../google/cadvisor/accelerators/BUILD | 30 - .../google/cadvisor/cache/memory/BUILD | 29 - .../google/cadvisor/client/v2/BUILD | 27 - .../google/cadvisor/collector/BUILD | 38 - .../google/cadvisor/container/BUILD | 41 - .../google/cadvisor/container/common/BUILD | 39 - .../cadvisor/container/containerd/BUILD | 53 - .../container/containerd/install/BUILD | 28 - .../google/cadvisor/container/crio/BUILD | 41 - .../cadvisor/container/crio/install/BUILD | 28 - .../google/cadvisor/container/docker/BUILD | 52 - .../cadvisor/container/docker/install/BUILD | 28 - .../cadvisor/container/docker/utils/BUILD | 24 - .../cadvisor/container/libcontainer/BUILD | 37 - .../google/cadvisor/container/raw/BUILD | 38 - .../google/cadvisor/container/systemd/BUILD | 36 - .../cadvisor/container/systemd/install/BUILD | 28 - .../google/cadvisor/devicemapper/BUILD | 30 - .../github.com/google/cadvisor/events/BUILD | 28 - vendor/github.com/google/cadvisor/fs/BUILD | 43 - .../github.com/google/cadvisor/info/v1/BUILD | 28 - .../github.com/google/cadvisor/info/v2/BUILD | 31 - .../github.com/google/cadvisor/machine/BUILD | 44 - .../github.com/google/cadvisor/manager/BUILD | 55 - .../github.com/google/cadvisor/metrics/BUILD | 36 - vendor/github.com/google/cadvisor/nvm/BUILD | 28 - vendor/github.com/google/cadvisor/perf/BUILD | 33 - .../github.com/google/cadvisor/resctrl/BUILD | 41 - vendor/github.com/google/cadvisor/stats/BUILD | 30 - .../github.com/google/cadvisor/storage/BUILD | 27 - .../github.com/google/cadvisor/summary/BUILD | 31 - vendor/github.com/google/cadvisor/utils/BUILD | 34 - .../google/cadvisor/utils/cloudinfo/BUILD | 32 - .../google/cadvisor/utils/cloudinfo/aws/BUILD | 30 - .../cadvisor/utils/cloudinfo/azure/BUILD | 27 - .../google/cadvisor/utils/cloudinfo/gce/BUILD | 29 - .../google/cadvisor/utils/cpuload/BUILD | 31 - .../cadvisor/utils/cpuload/netlink/BUILD | 32 - .../google/cadvisor/utils/oomparser/BUILD | 27 - .../google/cadvisor/utils/sysfs/BUILD | 24 - .../google/cadvisor/utils/sysinfo/BUILD | 28 - .../github.com/google/cadvisor/version/BUILD | 23 - .../github.com/google/cadvisor/watcher/BUILD | 23 - vendor/github.com/google/cadvisor/zfs/BUILD | 27 - vendor/github.com/google/go-cmp/cmp/BUILD | 47 - .../google/go-cmp/cmp/cmpopts/BUILD | 34 - .../google/go-cmp/cmp/internal/diff/BUILD | 26 - .../google/go-cmp/cmp/internal/flags/BUILD | 27 - .../google/go-cmp/cmp/internal/function/BUILD | 23 - .../google/go-cmp/cmp/internal/value/BUILD | 27 - vendor/github.com/google/gofuzz/BUILD | 26 - vendor/github.com/google/uuid/BUILD | 37 - vendor/github.com/googleapis/gax-go/v2/BUILD | 33 - .../googleapis/gnostic/compiler/BUILD | 36 - .../googleapis/gnostic/extensions/BUILD | 31 - .../googleapis/gnostic/openapiv2/BUILD | 32 - .../github.com/gophercloud/gophercloud/BUILD | 38 - .../gophercloud/gophercloud/openstack/BUILD | 55 - .../extensions/volumeactions/BUILD | 29 - .../openstack/blockstorage/v1/volumes/BUILD | 33 - .../openstack/blockstorage/v2/volumes/BUILD | 33 - .../openstack/blockstorage/v3/volumes/BUILD | 33 - .../openstack/common/extensions/BUILD | 32 - .../v2/extensions/attachinterfaces/BUILD | 32 - .../compute/v2/extensions/volumeattach/BUILD | 32 - .../openstack/compute/v2/flavors/BUILD | 32 - .../openstack/compute/v2/images/BUILD | 32 - .../openstack/compute/v2/servers/BUILD | 37 - .../openstack/identity/v2/tenants/BUILD | 32 - .../openstack/identity/v2/tokens/BUILD | 32 - .../identity/v3/extensions/trusts/BUILD | 28 - .../openstack/identity/v3/tokens/BUILD | 29 - .../openstack/networking/v2/extensions/BUILD | 40 - .../networking/v2/extensions/external/BUILD | 31 - .../v2/extensions/layer3/floatingips/BUILD | 32 - .../v2/extensions/layer3/routers/BUILD | 32 - .../v2/extensions/lbaas_v2/l7policies/BUILD | 32 - .../v2/extensions/lbaas_v2/listeners/BUILD | 34 - .../extensions/lbaas_v2/loadbalancers/BUILD | 34 - .../v2/extensions/lbaas_v2/monitors/BUILD | 32 - .../v2/extensions/lbaas_v2/pools/BUILD | 33 - .../v2/extensions/security/groups/BUILD | 33 - .../v2/extensions/security/rules/BUILD | 32 - .../openstack/networking/v2/networks/BUILD | 32 - .../openstack/networking/v2/ports/BUILD | 32 - .../gophercloud/openstack/utils/BUILD | 27 - .../gophercloud/gophercloud/pagination/BUILD | 31 - vendor/github.com/gorilla/websocket/BUILD | 41 - vendor/github.com/gregjones/httpcache/BUILD | 26 - .../gregjones/httpcache/diskcache/BUILD | 24 - .../grpc-ecosystem/go-grpc-middleware/BUILD | 31 - .../grpc-ecosystem/go-grpc-prometheus/BUILD | 39 - .../grpc-gateway/internal/BUILD | 27 - .../grpc-gateway/internal/BUILD.bazel | 22 + .../grpc-ecosystem/grpc-gateway/runtime/BUILD | 58 - .../grpc-gateway/runtime/BUILD.bazel | 84 + .../grpc-gateway/utilities/BUILD | 28 - .../grpc-gateway/utilities/BUILD.bazel | 21 + vendor/github.com/hashicorp/golang-lru/BUILD | 32 - .../hashicorp/golang-lru/simplelru/BUILD | 26 - vendor/github.com/hashicorp/hcl/BUILD | 45 - vendor/github.com/hashicorp/hcl/hcl/ast/BUILD | 27 - .../github.com/hashicorp/hcl/hcl/parser/BUILD | 31 - .../hashicorp/hcl/hcl/printer/BUILD | 31 - .../hashicorp/hcl/hcl/scanner/BUILD | 24 - .../hashicorp/hcl/hcl/strconv/BUILD | 23 - .../github.com/hashicorp/hcl/hcl/token/BUILD | 27 - .../hashicorp/hcl/json/parser/BUILD | 32 - .../hashicorp/hcl/json/scanner/BUILD | 24 - .../github.com/hashicorp/hcl/json/token/BUILD | 27 - .../heketi/heketi/client/api/go-client/BUILD | 42 - .../heketi/heketi/pkg/glusterfs/api/BUILD | 27 - .../github.com/heketi/heketi/pkg/utils/BUILD | 27 - vendor/github.com/hpcloud/tail/BUILD | 44 - .../github.com/hpcloud/tail/ratelimiter/BUILD | 27 - vendor/github.com/hpcloud/tail/util/BUILD | 23 - vendor/github.com/hpcloud/tail/watch/BUILD | 34 - vendor/github.com/hpcloud/tail/winfile/BUILD | 23 - vendor/github.com/imdario/mergo/BUILD | 28 - .../inconshreveable/mousetrap/BUILD | 27 - vendor/github.com/ishidawataru/sctp/BUILD | 28 - vendor/github.com/jmespath/go-jmespath/BUILD | 32 - vendor/github.com/jonboulle/clockwork/BUILD | 23 - vendor/github.com/json-iterator/go/BUILD | 70 - vendor/github.com/karrick/godirwalk/BUILD | 35 - .../go-windows-terminal-sequences/BUILD | 26 - .../libopenstorage/openstorage/api/BUILD | 36 - .../openstorage/api/client/BUILD | 29 - .../openstorage/api/client/volume/BUILD | 31 - .../libopenstorage/openstorage/api/spec/BUILD | 28 - .../openstorage/pkg/parser/BUILD | 23 - .../openstorage/pkg/units/BUILD | 23 - .../libopenstorage/openstorage/volume/BUILD | 28 - vendor/github.com/liggitt/tabwriter/BUILD | 23 - vendor/github.com/lithammer/dedent/BUILD | 23 - vendor/github.com/magiconair/properties/BUILD | 32 - .../github.com/mailru/easyjson/buffer/BUILD | 23 - .../github.com/mailru/easyjson/jlexer/BUILD | 27 - .../github.com/mailru/easyjson/jwriter/BUILD | 24 - .../golang_protobuf_extensions/pbutil/BUILD | 28 - vendor/github.com/miekg/dns/BUILD | 136 - vendor/github.com/mindprince/gonvml/BUILD | 29 - vendor/github.com/mistifyio/go-zfs/BUILD | 31 - vendor/github.com/mitchellh/go-wordwrap/BUILD | 23 - .../github.com/mitchellh/mapstructure/BUILD | 27 - vendor/github.com/moby/ipvs/BUILD | 43 - vendor/github.com/moby/sys/mountinfo/BUILD | 31 - vendor/github.com/moby/term/BUILD | 84 - vendor/github.com/moby/term/windows/BUILD | 36 - vendor/github.com/modern-go/concurrent/BUILD | 29 - vendor/github.com/modern-go/reflect2/BUILD | 56 - vendor/github.com/mohae/deepcopy/BUILD | 23 - vendor/github.com/morikuni/aec/BUILD | 28 - vendor/github.com/mrunalp/fileutils/BUILD | 26 - vendor/github.com/munnerz/goautoneg/BUILD | 23 - vendor/github.com/mvdan/xurls/BUILD | 29 - .../github.com/mxk/go-flowrate/flowrate/BUILD | 27 - vendor/github.com/onsi/ginkgo/.travis.yml | 6 +- vendor/github.com/onsi/ginkgo/BUILD | 53 - vendor/github.com/onsi/ginkgo/CHANGELOG.md | 48 - vendor/github.com/onsi/ginkgo/config/BUILD | 23 - .../github.com/onsi/ginkgo/config/config.go | 17 +- vendor/github.com/onsi/ginkgo/extension.go | 19 + vendor/github.com/onsi/ginkgo/ginkgo/BUILD | 64 - .../onsi/ginkgo/ginkgo/bootstrap_command.go | 5 +- .../onsi/ginkgo/ginkgo/convert/BUILD | 30 - .../onsi/ginkgo/ginkgo/convert/import.go | 3 +- .../ginkgo/ginkgo/convert/package_rewriter.go | 1 + .../ginkgo/convert/testfile_rewriter.go | 2 + .../onsi/ginkgo/ginkgo/generate_command.go | 81 - .../onsi/ginkgo/ginkgo/interrupthandler/BUILD | 27 - .../interrupthandler/interrupt_handler.go | 2 +- vendor/github.com/onsi/ginkgo/ginkgo/main.go | 12 +- .../github.com/onsi/ginkgo/ginkgo/nodot/BUILD | 23 - .../onsi/ginkgo/ginkgo/run_command.go | 17 +- .../onsi/ginkgo/ginkgo/suite_runner.go | 2 +- .../onsi/ginkgo/ginkgo/testrunner/BUILD | 37 - .../ginkgo/ginkgo/testrunner/test_runner.go | 6 +- .../onsi/ginkgo/ginkgo/testsuite/BUILD | 27 - .../github.com/onsi/ginkgo/ginkgo/watch/BUILD | 31 - .../onsi/ginkgo/ginkgo/watch/dependencies.go | 2 +- .../onsi/ginkgo/ginkgo/watch/package_hash.go | 2 +- vendor/github.com/onsi/ginkgo/ginkgo_dsl.go | 13 +- .../onsi/ginkgo/internal/codelocation/BUILD | 24 - .../internal/codelocation/code_location.go | 25 +- .../onsi/ginkgo/internal/containernode/BUILD | 27 - .../onsi/ginkgo/internal/failer/BUILD | 24 - .../onsi/ginkgo/internal/leafnodes/BUILD | 38 - .../ginkgo/internal/leafnodes/benchmarker.go | 2 +- .../internal/leafnodes/it_node_extension.go | 13 + .../onsi/ginkgo/internal/leafnodes/runner.go | 4 +- .../onsi/ginkgo/internal/remote/BUILD | 72 - .../onsi/ginkgo/internal/remote/aggregator.go | 12 +- .../onsi/ginkgo/internal/remote/server.go | 2 +- .../remote/syscall_dup_linux_riscv64.go | 11 - .../internal/remote/syscall_dup_unix.go | 1 - .../onsi/ginkgo/internal/spec/BUILD | 31 - .../onsi/ginkgo/internal/spec/spec.go | 10 +- .../onsi/ginkgo/internal/spec/specs.go | 4 +- .../onsi/ginkgo/internal/spec_iterator/BUILD | 30 - .../onsi/ginkgo/internal/specrunner/BUILD | 35 - .../ginkgo/internal/specrunner/spec_runner.go | 2 +- .../onsi/ginkgo/internal/suite/BUILD | 35 - .../ginkgo/internal/suite/suite_extension.go | 52 + .../onsi/ginkgo/internal/testingtproxy/BUILD | 23 - .../onsi/ginkgo/internal/writer/BUILD | 26 - vendor/github.com/onsi/ginkgo/reporters/BUILD | 37 - .../onsi/ginkgo/reporters/default_reporter.go | 3 - .../onsi/ginkgo/reporters/junit_reporter.go | 46 +- .../onsi/ginkgo/reporters/stenographer/BUILD | 32 - .../stenographer/support/go-colorable/BUILD | 33 - .../stenographer/support/go-isatty/BUILD | 35 - .../ginkgo/reporters/teamcity_reporter.go | 43 +- vendor/github.com/onsi/ginkgo/types/BUILD | 27 - vendor/github.com/onsi/ginkgo/types/types.go | 4 +- .../onsi/ginkgo/types/types_extension.go | 11 + vendor/github.com/onsi/gomega/BUILD | 43 - vendor/github.com/onsi/gomega/format/BUILD | 23 - vendor/github.com/onsi/gomega/gstruct/BUILD | 38 - .../onsi/gomega/gstruct/errors/BUILD | 24 - .../onsi/gomega/internal/assertion/BUILD | 24 - .../onsi/gomega/internal/asyncassertion/BUILD | 27 - .../onsi/gomega/internal/oraclematcher/BUILD | 24 - .../gomega/internal/testingtsupport/BUILD | 24 - vendor/github.com/onsi/gomega/matchers/BUILD | 80 - .../support/goraph/bipartitegraph/BUILD | 31 - .../gomega/matchers/support/goraph/edge/BUILD | 24 - .../gomega/matchers/support/goraph/node/BUILD | 23 - .../gomega/matchers/support/goraph/util/BUILD | 23 - vendor/github.com/onsi/gomega/types/BUILD | 23 - .../github.com/opencontainers/go-digest/BUILD | 29 - .../opencontainers/image-spec/specs-go/BUILD | 29 - .../image-spec/specs-go/v1/BUILD | 35 - .../opencontainers/runc/libcontainer/BUILD | 128 - .../runc/libcontainer/apparmor/BUILD | 23 - .../runc/libcontainer/cgroups/BUILD | 50 - .../runc/libcontainer/cgroups/devices/BUILD | 34 - .../runc/libcontainer/cgroups/ebpf/BUILD | 32 - .../cgroups/ebpf/devicefilter/BUILD | 29 - .../runc/libcontainer/cgroups/fs/BUILD | 65 - .../runc/libcontainer/cgroups/fs2/BUILD | 56 - .../runc/libcontainer/cgroups/fscommon/BUILD | 41 - .../runc/libcontainer/cgroups/systemd/BUILD | 92 - .../runc/libcontainer/configs/BUILD | 57 - .../runc/libcontainer/configs/validate/BUILD | 31 - .../runc/libcontainer/intelrdt/BUILD | 40 - .../runc/libcontainer/keys/BUILD | 34 - .../runc/libcontainer/logs/BUILD | 24 - .../runc/libcontainer/seccomp/BUILD | 27 - .../runc/libcontainer/stacktrace/BUILD | 27 - .../runc/libcontainer/system/BUILD | 128 - .../runc/libcontainer/user/BUILD | 58 - .../runc/libcontainer/utils/BUILD | 28 - .../opencontainers/runc/types/BUILD | 24 - .../runtime-spec/specs-go/BUILD | 27 - .../opencontainers/selinux/go-selinux/BUILD | 43 - .../selinux/go-selinux/label/BUILD | 38 - .../opencontainers/selinux/pkg/pwalk/BUILD | 24 - vendor/github.com/openshift/api/LICENSE | 191 + .../openshift/api/apps/v1/consts.go | 108 + .../api/apps/v1/deprecated_consts.go | 38 + .../github.com/openshift/api/apps/v1/doc.go | 8 + .../openshift/api/apps/v1/generated.pb.go | 7530 +++++++ .../openshift/api/apps/v1/generated.proto | 466 + .../openshift/api/apps/v1/legacy.go | 28 + .../openshift/api/apps/v1/register.go | 45 + .../github.com/openshift/api/apps/v1/types.go | 493 + .../api/apps/v1/zz_generated.deepcopy.go | 681 + .../v1/zz_generated.swagger_doc_generated.go | 282 + ...enshift_01_rolebindingrestriction.crd.yaml | 207 + .../openshift/api/authorization/v1/codec.go | 139 + .../openshift/api/authorization/v1/doc.go | 9 + .../api/authorization/v1/generated.pb.go | 8917 +++++++++ .../api/authorization/v1/generated.proto | 480 + .../openshift/api/authorization/v1/legacy.go | 43 + .../api/authorization/v1/register.go | 60 + .../openshift/api/authorization/v1/types.go | 545 + .../authorization/v1/zz_generated.deepcopy.go | 993 + .../v1/zz_generated.swagger_doc_generated.go | 354 + .../openshift/api/build/v1/consts.go | 200 + .../github.com/openshift/api/build/v1/doc.go | 8 + .../openshift/api/build/v1/generated.pb.go | 16279 ++++++++++++++++ .../openshift/api/build/v1/generated.proto | 1058 + .../openshift/api/build/v1/legacy.go | 28 + .../openshift/api/build/v1/register.go | 47 + .../openshift/api/build/v1/types.go | 1268 ++ .../api/build/v1/zz_generated.deepcopy.go | 1480 ++ .../v1/zz_generated.swagger_doc_generated.go | 629 + ...rsion-operator_01_clusteroperator.crd.yaml | 168 + ...ersion-operator_01_clusterversion.crd.yaml | 334 + ...03_config-operator_01_operatorhub.crd.yaml | 103 + .../0000_03_config-operator_01_proxy.crd.yaml | 102 + ...0_10_config-operator_01_apiserver.crd.yaml | 258 + ...config-operator_01_authentication.crd.yaml | 153 + .../0000_10_config-operator_01_build.crd.yaml | 390 + ...000_10_config-operator_01_console.crd.yaml | 72 + .../0000_10_config-operator_01_dns.crd.yaml | 102 + ...10_config-operator_01_featuregate.crd.yaml | 78 + .../0000_10_config-operator_01_image.crd.yaml | 146 + ...config-operator_01_infrastructure.crd.yaml | 439 + ...000_10_config-operator_01_ingress.crd.yaml | 57 + ...000_10_config-operator_01_network.crd.yaml | 153 + .../0000_10_config-operator_01_oauth.crd.yaml | 667 + ...000_10_config-operator_01_project.crd.yaml | 65 + ...0_10_config-operator_01_scheduler.crd.yaml | 91 + .../github.com/openshift/api/config/v1/doc.go | 8 + .../openshift/api/config/v1/register.go | 70 + .../openshift/api/config/v1/stringsource.go | 31 + .../openshift/api/config/v1/types.go | 312 + .../api/config/v1/types_apiserver.go | 158 + .../api/config/v1/types_authentication.go | 145 + .../openshift/api/config/v1/types_build.go | 116 + .../api/config/v1/types_cluster_operator.go | 185 + .../api/config/v1/types_cluster_version.go | 294 + .../openshift/api/config/v1/types_console.go | 64 + .../openshift/api/config/v1/types_dns.go | 87 + .../openshift/api/config/v1/types_feature.go | 203 + .../openshift/api/config/v1/types_image.go | 115 + .../api/config/v1/types_infrastructure.go | 472 + .../openshift/api/config/v1/types_ingress.go | 46 + .../openshift/api/config/v1/types_network.go | 133 + .../openshift/api/config/v1/types_oauth.go | 562 + .../api/config/v1/types_operatorhub.go | 79 + .../openshift/api/config/v1/types_project.go | 54 + .../openshift/api/config/v1/types_proxy.go | 94 + .../api/config/v1/types_scheduling.go | 75 + .../api/config/v1/types_tlssecurityprofile.go | 262 + .../api/config/v1/zz_generated.deepcopy.go | 3733 ++++ .../v1/zz_generated.swagger_doc_generated.go | 1470 ++ .../openshift/api/image/docker10/doc.go | 4 + .../api/image/docker10/dockertypes.go | 56 + .../openshift/api/image/docker10/register.go | 38 + .../image/docker10/zz_generated.deepcopy.go | 113 + .../api/image/dockerpre012/deepcopy.go | 18 + .../openshift/api/image/dockerpre012/doc.go | 4 + .../api/image/dockerpre012/dockertypes.go | 136 + .../api/image/dockerpre012/register.go | 37 + .../dockerpre012/zz_generated.deepcopy.go | 216 + .../openshift/api/image/v1/consts.go | 69 + .../github.com/openshift/api/image/v1/doc.go | 8 + .../openshift/api/image/v1/generated.pb.go | 10890 +++++++++++ .../openshift/api/image/v1/generated.proto | 626 + .../openshift/api/image/v1/legacy.go | 33 + .../openshift/api/image/v1/register.go | 54 + .../openshift/api/image/v1/types.go | 634 + .../api/image/v1/zz_generated.deepcopy.go | 978 + .../v1/zz_generated.swagger_doc_generated.go | 413 + .../openshift/api/kubecontrolplane/v1/doc.go | 7 + .../api/kubecontrolplane/v1/register.go | 38 + .../api/kubecontrolplane/v1/types.go | 213 + .../v1/zz_generated.deepcopy.go | 378 + .../v1/zz_generated.swagger_doc_generated.go | 159 + .../network/v1/001-clusternetwork-crd.yaml | 127 + .../api/network/v1/002-hostsubnet-crd.yaml | 105 + .../api/network/v1/003-netnamespace-crd.yaml | 79 + .../v1/004-egressnetworkpolicy-crd.yaml | 87 + .../openshift/api/network/v1/constants.go | 17 + .../openshift/api/network/v1/doc.go | 8 + .../openshift/api/network/v1/generated.pb.go | 3222 +++ .../openshift/api/network/v1/generated.proto | 203 + .../openshift/api/network/v1/legacy.go | 27 + .../openshift/api/network/v1/register.go | 44 + .../openshift/api/network/v1/types.go | 252 + .../api/network/v1/zz_generated.deepcopy.go | 346 + .../v1/zz_generated.swagger_doc_generated.go | 137 + .../github.com/openshift/api/oauth/v1/doc.go | 8 + .../openshift/api/oauth/v1/generated.pb.go | 3929 ++++ .../openshift/api/oauth/v1/generated.proto | 218 + .../openshift/api/oauth/v1/legacy.go | 30 + .../openshift/api/oauth/v1/register.go | 45 + .../openshift/api/oauth/v1/types.go | 254 + .../api/oauth/v1/zz_generated.deepcopy.go | 382 + .../v1/zz_generated.swagger_doc_generated.go | 153 + .../github.com/openshift/api/osin/v1/doc.go | 7 + .../openshift/api/osin/v1/register.go | 50 + .../github.com/openshift/api/osin/v1/types.go | 434 + .../api/osin/v1/zz_generated.deepcopy.go | 639 + .../api/pkg/serialization/serialization.go | 45 + .../openshift/api/project/v1/doc.go | 8 + .../openshift/api/project/v1/generated.pb.go | 1320 ++ .../openshift/api/project/v1/generated.proto | 75 + .../openshift/api/project/v1/legacy.go | 23 + .../openshift/api/project/v1/register.go | 40 + .../openshift/api/project/v1/types.go | 93 + .../api/project/v1/zz_generated.deepcopy.go | 141 + .../v1/zz_generated.swagger_doc_generated.go | 62 + ...openshift_01_clusterresourcequota.crd.yaml | 243 + ..._clusterresourcequota.crd.yaml-merge-patch | 13 + .../github.com/openshift/api/quota/v1/doc.go | 8 + .../openshift/api/quota/v1/generated.pb.go | 2176 +++ .../openshift/api/quota/v1/generated.proto | 104 + .../openshift/api/quota/v1/legacy.go | 24 + .../openshift/api/quota/v1/register.go | 41 + .../openshift/api/quota/v1/types.go | 115 + .../api/quota/v1/zz_generated.deepcopy.go | 241 + .../v1/zz_generated.swagger_doc_generated.go | 92 + .../github.com/openshift/api/route/v1/doc.go | 8 + .../openshift/api/route/v1/generated.pb.go | 3039 +++ .../openshift/api/route/v1/generated.proto | 245 + .../openshift/api/route/v1/legacy.go | 22 + .../openshift/api/route/v1/register.go | 39 + .../openshift/api/route/v1/types.go | 284 + .../api/route/v1/zz_generated.deepcopy.go | 240 + .../v1/zz_generated.swagger_doc_generated.go | 128 + .../openshift/api/security/install.go | 26 + ...0000_03_security-openshift_01_scc.crd.yaml | 355 + .../openshift/api/security/v1/consts.go | 10 + .../openshift/api/security/v1/doc.go | 8 + .../openshift/api/security/v1/generated.pb.go | 5340 +++++ .../openshift/api/security/v1/generated.proto | 351 + .../openshift/api/security/v1/legacy.go | 25 + .../openshift/api/security/v1/register.go | 44 + .../openshift/api/security/v1/types.go | 435 + .../api/security/v1/zz_generated.deepcopy.go | 532 + .../v1/zz_generated.swagger_doc_generated.go | 224 + .../openshift/api/template/v1/codec.go | 33 + .../openshift/api/template/v1/consts.go | 16 + .../openshift/api/template/v1/doc.go | 8 + .../openshift/api/template/v1/generated.pb.go | 4157 ++++ .../openshift/api/template/v1/generated.proto | 232 + .../openshift/api/template/v1/legacy.go | 24 + .../openshift/api/template/v1/register.go | 43 + .../openshift/api/template/v1/types.go | 258 + .../api/template/v1/zz_generated.deepcopy.go | 393 + .../v1/zz_generated.swagger_doc_generated.go | 153 + .../github.com/openshift/api/user/v1/doc.go | 8 + .../openshift/api/user/v1/generated.pb.go | 2298 +++ .../openshift/api/user/v1/generated.proto | 108 + .../openshift/api/user/v1/legacy.go | 27 + .../openshift/api/user/v1/register.go | 44 + .../github.com/openshift/api/user/v1/types.go | 131 + .../api/user/v1/zz_generated.deepcopy.go | 257 + .../v1/zz_generated.swagger_doc_generated.go | 83 + .../openshift/apiserver-library-go/LICENSE | 201 + .../pkg/admission/imagepolicy/accept.go | 124 + .../apis/imagepolicy/v1/default-policy.yaml | 20 + .../apis/imagepolicy/v1/defaults.go | 77 + .../imagepolicy/apis/imagepolicy/v1/doc.go | 4 + .../apis/imagepolicy/v1/register.go | 26 + .../imagepolicy/apis/imagepolicy/v1/types.go | 132 + .../imagepolicy/v1/zz_generated.deepcopy.go | 150 + .../apis/imagepolicy/validation/validation.go | 55 + .../pkg/admission/imagepolicy/helpers.go | 32 + .../pkg/admission/imagepolicy/imagepolicy.go | 518 + .../imagereferencemutators/interfaces.go | 49 + .../imagereferencemutators/meta.go | 105 + .../imagereferencemutators/pods.go | 448 + .../pkg/admission/imagepolicy/intializers.go | 40 + .../pkg/admission/imagepolicy/rules/accept.go | 119 + .../pkg/admission/imagepolicy/rules/rules.go | 178 + .../quota/clusterresourcequota/accessor.go | 171 + .../quota/clusterresourcequota/admission.go | 221 + .../quota/clusterresourcequota/intializers.go | 51 + .../quota/clusterresourcequota/lockfactory.go | 40 + .../pkg/authorization/scope/converter.go | 408 + .../pkg/configflags/audit.go | 54 + .../pkg/configflags/helpers.go | 43 + .../capabilities/mustrunas.go | 149 + .../capabilities/types.go | 14 + .../group/mustrunas.go | 76 + .../group/runasany.go | 33 + .../securitycontextconstraints/group/types.go | 19 + .../sccadmission/admission.go | 308 + .../sccadmission/intializers.go | 28 + .../sccadmission/scc_exec.go | 104 + .../sccmatching/matcher.go | 409 + .../sccmatching/provider.go | 436 + .../sccmatching/types.go | 25 + .../seccomp/types.go | 18 + .../seccomp/withseccomp.go | 113 + .../selinux/convert.go | 24 + .../securitycontextconstraints/selinux/doc.go | 2 + .../selinux/mustrunas.go | 105 + .../selinux/runasany.go | 28 + .../selinux/types.go | 14 + .../securitycontextconstraints/user/doc.go | 2 + .../user/mustrunas.go | 53 + .../user/mustrunasrange.go | 56 + .../user/nonroot.go | 43 + .../user/runasany.go | 28 + .../securitycontextconstraints/user/types.go | 14 + .../util/sort/bypriority.go | 54 + .../util/sort/byrestrictions.go | 175 + .../securitycontextconstraints/util/util.go | 178 + vendor/github.com/openshift/client-go/LICENSE | 191 + .../apps/clientset/versioned/clientset.go | 81 + .../client-go/apps/clientset/versioned/doc.go | 4 + .../apps/clientset/versioned/scheme/doc.go | 4 + .../clientset/versioned/scheme/register.go | 40 + .../versioned/typed/apps/v1/apps_client.go | 73 + .../typed/apps/v1/deploymentconfig.go | 244 + .../clientset/versioned/typed/apps/v1/doc.go | 4 + .../typed/apps/v1/generated_expansion.go | 5 + .../externalversions/apps/interface.go | 30 + .../apps/v1/deploymentconfig.go | 74 + .../externalversions/apps/v1/interface.go | 29 + .../informers/externalversions/factory.go | 164 + .../informers/externalversions/generic.go | 46 + .../internalinterfaces/factory_interfaces.go | 24 + .../apps/listers/apps/v1/deploymentconfig.go | 83 + .../listers/apps/v1/expansion_generated.go | 11 + .../clientset/versioned/clientset.go | 81 + .../authorization/clientset/versioned/doc.go | 4 + .../versioned/fake/clientset_generated.go | 66 + .../clientset/versioned/fake/doc.go | 4 + .../clientset/versioned/fake/register.go | 40 + .../clientset/versioned/scheme/doc.go | 4 + .../clientset/versioned/scheme/register.go | 40 + .../authorization/v1/authorization_client.go | 123 + .../typed/authorization/v1/clusterrole.go | 152 + .../authorization/v1/clusterrolebinding.go | 152 + .../versioned/typed/authorization/v1/doc.go | 4 + .../typed/authorization/v1/fake/doc.go | 4 + .../v1/fake/fake_authorization_client.go | 64 + .../authorization/v1/fake/fake_clusterrole.go | 106 + .../v1/fake/fake_clusterrolebinding.go | 106 + .../v1/fake/fake_localresourceaccessreview.go | 33 + .../v1/fake/fake_localsubjectaccessreview.go | 33 + .../v1/fake/fake_resourceaccessreview.go | 31 + .../typed/authorization/v1/fake/fake_role.go | 114 + .../authorization/v1/fake/fake_rolebinding.go | 114 + .../v1/fake/fake_rolebindingrestriction.go | 114 + .../v1/fake/fake_selfsubjectrulesreview.go | 33 + .../v1/fake/fake_subjectaccessreview.go | 31 + .../v1/fake/fake_subjectrulesreview.go | 33 + .../authorization/v1/generated_expansion.go | 25 + .../v1/localresourceaccessreview.go | 52 + .../v1/localsubjectaccessreview.go | 52 + .../authorization/v1/resourceaccessreview.go | 49 + .../versioned/typed/authorization/v1/role.go | 162 + .../typed/authorization/v1/rolebinding.go | 162 + .../v1/rolebindingrestriction.go | 162 + .../v1/selfsubjectrulesreview.go | 51 + .../authorization/v1/subjectaccessreview.go | 49 + .../authorization/v1/subjectrulesreview.go | 51 + .../authorization/interface.go | 30 + .../authorization/v1/clusterrole.go | 73 + .../authorization/v1/clusterrolebinding.go | 73 + .../authorization/v1/interface.go | 57 + .../externalversions/authorization/v1/role.go | 74 + .../authorization/v1/rolebinding.go | 74 + .../v1/rolebindingrestriction.go | 74 + .../informers/externalversions/factory.go | 164 + .../informers/externalversions/generic.go | 54 + .../internalinterfaces/factory_interfaces.go | 24 + .../listers/authorization/v1/clusterrole.go | 52 + .../authorization/v1/clusterrolebinding.go | 52 + .../authorization/v1/expansion_generated.go | 35 + .../listers/authorization/v1/role.go | 83 + .../listers/authorization/v1/rolebinding.go | 83 + .../v1/rolebindingrestriction.go | 83 + .../build/clientset/versioned/clientset.go | 81 + .../build/clientset/versioned/doc.go | 4 + .../build/clientset/versioned/scheme/doc.go | 4 + .../clientset/versioned/scheme/register.go | 40 + .../versioned/typed/build/v1/build.go | 212 + .../versioned/typed/build/v1/build_client.go | 78 + .../versioned/typed/build/v1/buildconfig.go | 196 + .../clientset/versioned/typed/build/v1/doc.go | 4 + .../typed/build/v1/generated_expansion.go | 7 + .../externalversions/build/interface.go | 30 + .../externalversions/build/v1/build.go | 74 + .../externalversions/build/v1/buildconfig.go | 74 + .../externalversions/build/v1/interface.go | 36 + .../informers/externalversions/factory.go | 164 + .../informers/externalversions/generic.go | 48 + .../internalinterfaces/factory_interfaces.go | 24 + .../client-go/build/listers/build/v1/build.go | 83 + .../build/listers/build/v1/buildconfig.go | 83 + .../listers/build/v1/expansion_generated.go | 19 + .../config/clientset/versioned/clientset.go | 81 + .../config/clientset/versioned/doc.go | 4 + .../versioned/fake/clientset_generated.go | 66 + .../config/clientset/versioned/fake/doc.go | 4 + .../clientset/versioned/fake/register.go | 40 + .../config/clientset/versioned/scheme/doc.go | 4 + .../clientset/versioned/scheme/register.go | 40 + .../versioned/typed/config/v1/apiserver.go | 168 + .../typed/config/v1/authentication.go | 168 + .../versioned/typed/config/v1/build.go | 152 + .../typed/config/v1/clusteroperator.go | 168 + .../typed/config/v1/clusterversion.go | 168 + .../typed/config/v1/config_client.go | 153 + .../versioned/typed/config/v1/console.go | 168 + .../versioned/typed/config/v1/dns.go | 168 + .../versioned/typed/config/v1/doc.go | 4 + .../versioned/typed/config/v1/fake/doc.go | 4 + .../typed/config/v1/fake/fake_apiserver.go | 117 + .../config/v1/fake/fake_authentication.go | 117 + .../typed/config/v1/fake/fake_build.go | 106 + .../config/v1/fake/fake_clusteroperator.go | 117 + .../config/v1/fake/fake_clusterversion.go | 117 + .../config/v1/fake/fake_config_client.go | 88 + .../typed/config/v1/fake/fake_console.go | 117 + .../typed/config/v1/fake/fake_dns.go | 117 + .../typed/config/v1/fake/fake_featuregate.go | 117 + .../typed/config/v1/fake/fake_image.go | 117 + .../config/v1/fake/fake_infrastructure.go | 117 + .../typed/config/v1/fake/fake_ingress.go | 117 + .../typed/config/v1/fake/fake_network.go | 117 + .../typed/config/v1/fake/fake_oauth.go | 117 + .../typed/config/v1/fake/fake_operatorhub.go | 117 + .../typed/config/v1/fake/fake_project.go | 117 + .../typed/config/v1/fake/fake_proxy.go | 117 + .../typed/config/v1/fake/fake_scheduler.go | 117 + .../versioned/typed/config/v1/featuregate.go | 168 + .../typed/config/v1/generated_expansion.go | 37 + .../versioned/typed/config/v1/image.go | 168 + .../typed/config/v1/infrastructure.go | 168 + .../versioned/typed/config/v1/ingress.go | 168 + .../versioned/typed/config/v1/network.go | 168 + .../versioned/typed/config/v1/oauth.go | 168 + .../versioned/typed/config/v1/operatorhub.go | 168 + .../versioned/typed/config/v1/project.go | 168 + .../versioned/typed/config/v1/proxy.go | 168 + .../versioned/typed/config/v1/scheduler.go | 168 + .../image/clientset/versioned/clientset.go | 81 + .../image/clientset/versioned/doc.go | 4 + .../image/clientset/versioned/scheme/doc.go | 4 + .../clientset/versioned/scheme/register.go | 40 + .../clientset/versioned/typed/image/v1/doc.go | 4 + .../typed/image/v1/generated_expansion.go | 19 + .../versioned/typed/image/v1/image.go | 152 + .../versioned/typed/image/v1/image_client.go | 108 + .../typed/image/v1/imagesignature.go | 59 + .../versioned/typed/image/v1/imagestream.go | 211 + .../typed/image/v1/imagestreamimage.go | 51 + .../typed/image/v1/imagestreamimport.go | 51 + .../typed/image/v1/imagestreammapping.go | 52 + .../typed/image/v1/imagestreamtag.go | 111 + .../versioned/typed/image/v1/imagetag.go | 111 + .../informers/externalversions/factory.go | 164 + .../informers/externalversions/generic.go | 48 + .../externalversions/image/interface.go | 30 + .../externalversions/image/v1/image.go | 73 + .../externalversions/image/v1/imagestream.go | 74 + .../externalversions/image/v1/interface.go | 36 + .../internalinterfaces/factory_interfaces.go | 24 + .../listers/image/v1/expansion_generated.go | 31 + .../client-go/image/listers/image/v1/image.go | 52 + .../image/listers/image/v1/imagestream.go | 83 + .../image/listers/image/v1/imagestreamtag.go | 83 + .../image/listers/image/v1/imagetag.go | 83 + .../network/clientset/versioned/clientset.go | 81 + .../network/clientset/versioned/doc.go | 4 + .../network/clientset/versioned/scheme/doc.go | 4 + .../clientset/versioned/scheme/register.go | 40 + .../typed/network/v1/clusternetwork.go | 152 + .../versioned/typed/network/v1/doc.go | 4 + .../typed/network/v1/egressnetworkpolicy.go | 162 + .../typed/network/v1/generated_expansion.go | 11 + .../versioned/typed/network/v1/hostsubnet.go | 152 + .../typed/network/v1/netnamespace.go | 152 + .../typed/network/v1/network_client.go | 88 + .../informers/externalversions/factory.go | 164 + .../informers/externalversions/generic.go | 52 + .../internalinterfaces/factory_interfaces.go | 24 + .../externalversions/network/interface.go | 30 + .../network/v1/clusternetwork.go | 73 + .../network/v1/egressnetworkpolicy.go | 74 + .../externalversions/network/v1/hostsubnet.go | 73 + .../externalversions/network/v1/interface.go | 50 + .../network/v1/netnamespace.go | 73 + .../listers/network/v1/clusternetwork.go | 52 + .../listers/network/v1/egressnetworkpolicy.go | 83 + .../listers/network/v1/expansion_generated.go | 23 + .../network/listers/network/v1/hostsubnet.go | 52 + .../listers/network/v1/netnamespace.go | 52 + .../oauth/clientset/versioned/clientset.go | 81 + .../oauth/clientset/versioned/doc.go | 4 + .../versioned/fake/clientset_generated.go | 66 + .../oauth/clientset/versioned/fake/doc.go | 4 + .../clientset/versioned/fake/register.go | 40 + .../oauth/clientset/versioned/scheme/doc.go | 4 + .../clientset/versioned/scheme/register.go | 40 + .../clientset/versioned/typed/oauth/v1/doc.go | 4 + .../versioned/typed/oauth/v1/fake/doc.go | 4 + .../typed/oauth/v1/fake/fake_oauth_client.go | 36 + .../oauth/v1/fake/fake_oauthaccesstoken.go | 106 + .../oauth/v1/fake/fake_oauthauthorizetoken.go | 106 + .../typed/oauth/v1/fake/fake_oauthclient.go | 106 + .../v1/fake/fake_oauthclientauthorization.go | 106 + .../typed/oauth/v1/generated_expansion.go | 11 + .../versioned/typed/oauth/v1/oauth_client.go | 88 + .../typed/oauth/v1/oauthaccesstoken.go | 152 + .../typed/oauth/v1/oauthauthorizetoken.go | 152 + .../versioned/typed/oauth/v1/oauthclient.go | 152 + .../oauth/v1/oauthclientauthorization.go | 152 + .../informers/externalversions/factory.go | 164 + .../informers/externalversions/generic.go | 52 + .../internalinterfaces/factory_interfaces.go | 24 + .../externalversions/oauth/interface.go | 30 + .../externalversions/oauth/v1/interface.go | 50 + .../oauth/v1/oauthaccesstoken.go | 73 + .../oauth/v1/oauthauthorizetoken.go | 73 + .../externalversions/oauth/v1/oauthclient.go | 73 + .../oauth/v1/oauthclientauthorization.go | 73 + .../listers/oauth/v1/expansion_generated.go | 19 + .../listers/oauth/v1/oauthaccesstoken.go | 52 + .../listers/oauth/v1/oauthauthorizetoken.go | 52 + .../oauth/listers/oauth/v1/oauthclient.go | 52 + .../oauth/v1/oauthclientauthorization.go | 52 + .../quota/clientset/versioned/clientset.go | 81 + .../quota/clientset/versioned/doc.go | 4 + .../quota/clientset/versioned/scheme/doc.go | 4 + .../clientset/versioned/scheme/register.go | 40 + .../quota/v1/appliedclusterresourcequota.go | 70 + .../typed/quota/v1/clusterresourcequota.go | 168 + .../clientset/versioned/typed/quota/v1/doc.go | 4 + .../typed/quota/v1/generated_expansion.go | 7 + .../versioned/typed/quota/v1/quota_client.go | 78 + .../informers/externalversions/factory.go | 164 + .../informers/externalversions/generic.go | 46 + .../internalinterfaces/factory_interfaces.go | 24 + .../externalversions/quota/interface.go | 30 + .../quota/v1/clusterresourcequota.go | 73 + .../externalversions/quota/v1/interface.go | 29 + .../quota/v1/appliedclusterresourcequota.go | 83 + .../listers/quota/v1/clusterresourcequota.go | 52 + .../listers/quota/v1/expansion_generated.go | 15 + .../route/clientset/versioned/clientset.go | 81 + .../route/clientset/versioned/doc.go | 4 + .../route/clientset/versioned/scheme/doc.go | 4 + .../clientset/versioned/scheme/register.go | 40 + .../clientset/versioned/typed/route/v1/doc.go | 4 + .../typed/route/v1/generated_expansion.go | 5 + .../versioned/typed/route/v1/route.go | 179 + .../versioned/typed/route/v1/route_client.go | 73 + .../informers/externalversions/factory.go | 164 + .../informers/externalversions/generic.go | 46 + .../internalinterfaces/factory_interfaces.go | 24 + .../externalversions/route/interface.go | 30 + .../externalversions/route/v1/interface.go | 29 + .../externalversions/route/v1/route.go | 74 + .../listers/route/v1/expansion_generated.go | 11 + .../client-go/route/listers/route/v1/route.go | 83 + .../security/clientset/versioned/clientset.go | 81 + .../security/clientset/versioned/doc.go | 4 + .../clientset/versioned/scheme/doc.go | 4 + .../clientset/versioned/scheme/register.go | 40 + .../versioned/typed/security/v1/doc.go | 4 + .../typed/security/v1/generated_expansion.go | 13 + .../security/v1/podsecuritypolicyreview.go | 51 + .../v1/podsecuritypolicyselfsubjectreview.go | 51 + .../v1/podsecuritypolicysubjectreview.go | 51 + .../typed/security/v1/rangeallocation.go | 152 + .../typed/security/v1/security_client.go | 93 + .../security/v1/securitycontextconstraints.go | 152 + .../informers/externalversions/factory.go | 164 + .../informers/externalversions/generic.go | 48 + .../internalinterfaces/factory_interfaces.go | 24 + .../externalversions/security/interface.go | 30 + .../externalversions/security/v1/interface.go | 36 + .../security/v1/rangeallocation.go | 73 + .../security/v1/securitycontextconstraints.go | 73 + .../security/v1/expansion_generated.go | 11 + .../listers/security/v1/rangeallocation.go | 52 + .../security/v1/securitycontextconstraints.go | 52 + .../template/clientset/versioned/clientset.go | 81 + .../template/clientset/versioned/doc.go | 4 + .../clientset/versioned/scheme/doc.go | 4 + .../clientset/versioned/scheme/register.go | 40 + .../template/v1/brokertemplateinstance.go | 152 + .../versioned/typed/template/v1/doc.go | 4 + .../typed/template/v1/generated_expansion.go | 9 + .../versioned/typed/template/v1/template.go | 162 + .../typed/template/v1/template_client.go | 83 + .../typed/template/v1/templateinstance.go | 179 + .../informers/externalversions/factory.go | 164 + .../informers/externalversions/generic.go | 50 + .../internalinterfaces/factory_interfaces.go | 24 + .../externalversions/template/interface.go | 30 + .../template/v1/brokertemplateinstance.go | 73 + .../externalversions/template/v1/interface.go | 43 + .../externalversions/template/v1/template.go | 74 + .../template/v1/templateinstance.go | 74 + .../template/v1/brokertemplateinstance.go | 52 + .../template/v1/expansion_generated.go | 15 + .../template/listers/template/v1/template.go | 83 + .../listers/template/v1/template_expansion.go | 29 + .../listers/template/v1/templateinstance.go | 83 + .../user/clientset/versioned/clientset.go | 81 + .../client-go/user/clientset/versioned/doc.go | 4 + .../versioned/fake/clientset_generated.go | 66 + .../user/clientset/versioned/fake/doc.go | 4 + .../user/clientset/versioned/fake/register.go | 40 + .../user/clientset/versioned/scheme/doc.go | 4 + .../clientset/versioned/scheme/register.go | 40 + .../clientset/versioned/typed/user/v1/doc.go | 4 + .../versioned/typed/user/v1/fake/doc.go | 4 + .../typed/user/v1/fake/fake_group.go | 106 + .../typed/user/v1/fake/fake_identity.go | 106 + .../versioned/typed/user/v1/fake/fake_user.go | 106 + .../typed/user/v1/fake/fake_user_client.go | 36 + .../user/v1/fake/fake_useridentitymapping.go | 58 + .../typed/user/v1/generated_expansion.go | 11 + .../versioned/typed/user/v1/group.go | 152 + .../versioned/typed/user/v1/identity.go | 152 + .../clientset/versioned/typed/user/v1/user.go | 152 + .../versioned/typed/user/v1/user_client.go | 88 + .../typed/user/v1/useridentitymapping.go | 86 + .../informers/externalversions/factory.go | 164 + .../informers/externalversions/generic.go | 50 + .../internalinterfaces/factory_interfaces.go | 24 + .../externalversions/user/interface.go | 30 + .../externalversions/user/v1/group.go | 73 + .../externalversions/user/v1/identity.go | 73 + .../externalversions/user/v1/interface.go | 43 + .../externalversions/user/v1/user.go | 73 + .../listers/user/v1/expansion_generated.go | 15 + .../client-go/user/listers/user/v1/group.go | 52 + .../user/listers/user/v1/identity.go | 52 + .../client-go/user/listers/user/v1/user.go | 52 + .../github.com/openshift/library-go/LICENSE | 201 + .../admissiontesting.go | 25 + .../admissionrestconfig/intiializers.go | 30 + .../admission/admissiontimeout/decorator.go | 22 + .../admissiontimeout/timeoutadmission.go | 68 + .../apiserver/apiserverconfig/cachecontrol.go | 35 + .../apiserver/apiserverconfig/longrunning.go | 26 + .../personal_subjectaccessreview.go | 129 + .../project_request_info_resolver.go | 34 + .../apiserverconfig/requestinforesolver.go | 17 + .../pkg/apiserver/httprequest/httprequest.go | 129 + .../bootstrapauthenticator/bootstrap.go | 179 + .../scopemetadata/clusterrole_describers.go | 86 + .../authorization/scopemetadata/describers.go | 17 + .../scopemetadata/user_describers.go | 68 + .../authorization/scopemetadata/validation.go | 152 + .../pkg/config/client/client_config.go | 131 + .../config/configdefaults/config_default.go | 81 + .../library-go/pkg/config/helpers/client.go | 71 + .../pkg/config/helpers/config_refs.go | 145 + .../library-go/pkg/config/helpers/general.go | 64 + .../pkg/config/helpers/readresource.go | 167 + .../pkg/config/validation/general.go | 130 + .../pkg/config/validation/serving_info.go | 174 + .../openshift/library-go/pkg/crypto/crypto.go | 1182 ++ .../library-go/pkg/crypto/rotation.go | 20 + .../library-go/pkg/image/imageutil/helpers.go | 379 + .../pkg/image/internal/digest/digest.go | 138 + .../pkg/image/internal/digest/digester.go | 155 + .../pkg/image/internal/digest/doc.go | 5 + .../pkg/image/internal/reference/doc.go | 5 + .../pkg/image/internal/reference/reference.go | 370 + .../pkg/image/internal/reference/regexp.go | 124 + .../pkg/image/reference/reference.go | 257 + .../pkg/oauth/oauthdiscovery/discovery.go | 32 + .../pkg/oauth/oauthdiscovery/urls.go | 37 + .../clusterquotamapping.go | 409 + .../pkg/quota/clusterquotamapping/helpers.go | 139 + .../pkg/quota/clusterquotamapping/mapper.go | 289 + .../library-go/pkg/quota/quotautil/error.go | 42 + .../library-go/pkg/quota/quotautil/helpers.go | 48 + .../pkg/security/ldaputil/attribute.go | 47 + .../library-go/pkg/security/ldaputil/url.go | 247 + .../library-go/pkg/security/uid/uid.go | 125 + vendor/github.com/pelletier/go-toml/BUILD | 34 - vendor/github.com/peterbourgon/diskv/BUILD | 28 - vendor/github.com/pkg/errors/BUILD | 27 - .../pmezard/go-difflib/difflib/BUILD | 23 - vendor/github.com/pquerna/cachecontrol/BUILD | 30 - .../pquerna/cachecontrol/cacheobject/BUILD | 29 - .../prometheus/client_golang/prometheus/BUILD | 110 - .../client_golang/prometheus/internal/BUILD | 24 - .../client_golang/prometheus/promhttp/BUILD | 33 - .../client_golang/prometheus/testutil/BUILD | 36 - .../prometheus/testutil/promlint/BUILD | 27 - .../prometheus/client_model/go/BUILD | 27 - .../github.com/prometheus/common/expfmt/BUILD | 38 - .../internal/bitbucket.org/ww/goautoneg/BUILD | 23 - .../github.com/prometheus/common/model/BUILD | 35 - vendor/github.com/prometheus/procfs/BUILD | 112 - .../prometheus/procfs/internal/fs/BUILD | 23 - .../prometheus/procfs/internal/util/BUILD | 29 - vendor/github.com/quobyte/api/BUILD | 27 - vendor/github.com/robfig/cron/BUILD | 29 - vendor/github.com/rubiojr/go-vhd/vhd/BUILD | 30 - vendor/github.com/russross/blackfriday/BUILD | 34 - .../github.com/russross/blackfriday/v2/BUILD | 33 - vendor/github.com/satori/go.uuid/BUILD | 28 - .../seccomp/libseccomp-golang/BUILD | 28 - .../shurcooL/sanitized_anchor_name/BUILD | 23 - vendor/github.com/sirupsen/logrus/BUILD | 78 - vendor/github.com/soheilhy/cmux/BUILD | 33 - vendor/github.com/spf13/afero/BUILD | 49 - vendor/github.com/spf13/afero/mem/BUILD | 27 - vendor/github.com/spf13/cast/BUILD | 26 - vendor/github.com/spf13/cobra/BUILD | 46 - vendor/github.com/spf13/cobra/doc/BUILD | 35 - .../github.com/spf13/jwalterweatherman/BUILD | 27 - vendor/github.com/spf13/pflag/BUILD | 60 - vendor/github.com/spf13/viper/BUILD | 40 - vendor/github.com/storageos/go-api/BUILD | 50 - .../github.com/storageos/go-api/netutil/BUILD | 28 - .../github.com/storageos/go-api/serror/BUILD | 29 - .../github.com/storageos/go-api/types/BUILD | 51 - vendor/github.com/stretchr/objx/BUILD | 34 - .../github.com/stretchr/testify/assert/BUILD | 37 - vendor/github.com/stretchr/testify/mock/BUILD | 32 - .../github.com/stretchr/testify/require/BUILD | 30 - .../syndtr/gocapability/capability/BUILD | 30 - vendor/github.com/thecodeteam/goscaleio/BUILD | 43 - .../thecodeteam/goscaleio/types/v1/BUILD | 23 - .../tmc/grpc-websocket-proxy/wsproxy/BUILD | 31 - vendor/github.com/vishvananda/netlink/BUILD | 127 - .../github.com/vishvananda/netlink/nl/BUILD | 54 - vendor/github.com/vishvananda/netns/BUILD | 28 - vendor/github.com/vmware/govmomi/BUILD | 48 - vendor/github.com/vmware/govmomi/find/BUILD | 36 - vendor/github.com/vmware/govmomi/list/BUILD | 32 - vendor/github.com/vmware/govmomi/lookup/BUILD | 35 - .../vmware/govmomi/lookup/methods/BUILD | 27 - .../vmware/govmomi/lookup/simulator/BUILD | 36 - .../vmware/govmomi/lookup/types/BUILD | 24 - vendor/github.com/vmware/govmomi/nfc/BUILD | 35 - vendor/github.com/vmware/govmomi/object/BUILD | 88 - vendor/github.com/vmware/govmomi/pbm/BUILD | 37 - .../vmware/govmomi/pbm/methods/BUILD | 27 - .../github.com/vmware/govmomi/pbm/types/BUILD | 28 - .../github.com/vmware/govmomi/property/BUILD | 34 - .../github.com/vmware/govmomi/session/BUILD | 34 - .../github.com/vmware/govmomi/simulator/BUILD | 88 - .../vmware/govmomi/simulator/esx/BUILD | 45 - .../vmware/govmomi/simulator/vpx/BUILD | 35 - vendor/github.com/vmware/govmomi/sts/BUILD | 40 - .../vmware/govmomi/sts/internal/BUILD | 28 - .../vmware/govmomi/sts/simulator/BUILD | 28 - vendor/github.com/vmware/govmomi/task/BUILD | 31 - .../vmware/govmomi/vapi/internal/BUILD | 27 - .../github.com/vmware/govmomi/vapi/rest/BUILD | 28 - .../vmware/govmomi/vapi/simulator/BUILD | 29 - .../github.com/vmware/govmomi/vapi/tags/BUILD | 32 - vendor/github.com/vmware/govmomi/vim25/BUILD | 41 - .../vmware/govmomi/vim25/debug/BUILD | 23 - .../vmware/govmomi/vim25/methods/BUILD | 30 - .../github.com/vmware/govmomi/vim25/mo/BUILD | 37 - .../vmware/govmomi/vim25/progress/BUILD | 32 - .../vmware/govmomi/vim25/soap/BUILD | 34 - .../vmware/govmomi/vim25/types/BUILD | 31 - .../github.com/vmware/govmomi/vim25/xml/BUILD | 29 - vendor/github.com/xiang90/probing/BUILD | 27 - vendor/go.etcd.io/bbolt/BUILD | 61 - vendor/go.etcd.io/etcd/auth/BUILD | 50 - vendor/go.etcd.io/etcd/auth/authpb/BUILD | 27 - vendor/go.etcd.io/etcd/client/BUILD | 44 - vendor/go.etcd.io/etcd/clientv3/BUILD | 73 - .../go.etcd.io/etcd/clientv3/balancer/BUILD | 41 - .../etcd/clientv3/balancer/connectivity/BUILD | 27 - .../etcd/clientv3/balancer/picker/BUILD | 34 - .../clientv3/balancer/resolver/endpoint/BUILD | 24 - .../etcd/clientv3/concurrency/BUILD | 35 - .../etcd/clientv3/credentials/BUILD | 28 - .../go.etcd.io/etcd/clientv3/namespace/BUILD | 34 - vendor/go.etcd.io/etcd/clientv3/naming/BUILD | 32 - vendor/go.etcd.io/etcd/embed/BUILD | 76 - vendor/go.etcd.io/etcd/etcdserver/BUILD | 94 - vendor/go.etcd.io/etcd/etcdserver/api/BUILD | 54 - .../etcd/etcdserver/api/etcdhttp/BUILD | 46 - .../etcd/etcdserver/api/membership/BUILD | 44 - .../etcd/etcdserver/api/rafthttp/BUILD | 60 - .../go.etcd.io/etcd/etcdserver/api/snap/BUILD | 45 - .../etcd/etcdserver/api/snap/snappb/BUILD | 27 - .../etcd/etcdserver/api/v2auth/BUILD | 35 - .../etcd/etcdserver/api/v2discovery/BUILD | 31 - .../etcd/etcdserver/api/v2error/BUILD | 23 - .../etcd/etcdserver/api/v2http/BUILD | 51 - .../etcdserver/api/v2http/httptypes/BUILD | 30 - .../etcd/etcdserver/api/v2stats/BUILD | 32 - .../etcd/etcdserver/api/v2store/BUILD | 42 - .../go.etcd.io/etcd/etcdserver/api/v2v3/BUILD | 43 - .../etcd/etcdserver/api/v3alarm/BUILD | 29 - .../etcd/etcdserver/api/v3client/BUILD | 32 - .../etcd/etcdserver/api/v3compactor/BUILD | 35 - .../etcd/etcdserver/api/v3election/BUILD | 34 - .../api/v3election/v3electionpb/BUILD | 34 - .../api/v3election/v3electionpb/gw/BUILD | 34 - .../etcd/etcdserver/api/v3lock/BUILD | 34 - .../etcd/etcdserver/api/v3lock/v3lockpb/BUILD | 33 - .../etcdserver/api/v3lock/v3lockpb/gw/BUILD | 34 - .../etcd/etcdserver/api/v3rpc/BUILD | 71 - .../etcd/etcdserver/api/v3rpc/rpctypes/BUILD | 32 - .../etcd/etcdserver/etcdserverpb/BUILD | 39 - .../etcd/etcdserver/etcdserverpb/gw/BUILD | 34 - vendor/go.etcd.io/etcd/integration/BUILD | 55 - vendor/go.etcd.io/etcd/lease/BUILD | 39 - vendor/go.etcd.io/etcd/lease/leasehttp/BUILD | 32 - vendor/go.etcd.io/etcd/lease/leasepb/BUILD | 28 - vendor/go.etcd.io/etcd/mvcc/BUILD | 57 - vendor/go.etcd.io/etcd/mvcc/backend/BUILD | 40 - vendor/go.etcd.io/etcd/mvcc/mvccpb/BUILD | 27 - vendor/go.etcd.io/etcd/pkg/adt/BUILD | 26 - vendor/go.etcd.io/etcd/pkg/contention/BUILD | 26 - vendor/go.etcd.io/etcd/pkg/cpuutil/BUILD | 26 - vendor/go.etcd.io/etcd/pkg/crc/BUILD | 23 - vendor/go.etcd.io/etcd/pkg/debugutil/BUILD | 26 - vendor/go.etcd.io/etcd/pkg/fileutil/BUILD | 48 - vendor/go.etcd.io/etcd/pkg/flags/BUILD | 36 - vendor/go.etcd.io/etcd/pkg/httputil/BUILD | 23 - vendor/go.etcd.io/etcd/pkg/idutil/BUILD | 23 - vendor/go.etcd.io/etcd/pkg/ioutil/BUILD | 29 - vendor/go.etcd.io/etcd/pkg/logutil/BUILD | 99 - vendor/go.etcd.io/etcd/pkg/netutil/BUILD | 42 - vendor/go.etcd.io/etcd/pkg/pathutil/BUILD | 23 - vendor/go.etcd.io/etcd/pkg/pbutil/BUILD | 24 - vendor/go.etcd.io/etcd/pkg/runtime/BUILD | 26 - vendor/go.etcd.io/etcd/pkg/schedule/BUILD | 26 - vendor/go.etcd.io/etcd/pkg/srv/BUILD | 24 - vendor/go.etcd.io/etcd/pkg/systemd/BUILD | 26 - vendor/go.etcd.io/etcd/pkg/testutil/BUILD | 30 - vendor/go.etcd.io/etcd/pkg/tlsutil/BUILD | 27 - vendor/go.etcd.io/etcd/pkg/traceutil/BUILD | 24 - vendor/go.etcd.io/etcd/pkg/transport/BUILD | 41 - vendor/go.etcd.io/etcd/pkg/types/BUILD | 30 - vendor/go.etcd.io/etcd/pkg/wait/BUILD | 26 - vendor/go.etcd.io/etcd/proxy/grpcproxy/BUILD | 69 - .../etcd/proxy/grpcproxy/adapter/BUILD | 43 - .../etcd/proxy/grpcproxy/cache/BUILD | 29 - vendor/go.etcd.io/etcd/raft/BUILD | 48 - vendor/go.etcd.io/etcd/raft/confchange/BUILD | 31 - vendor/go.etcd.io/etcd/raft/quorum/BUILD | 28 - vendor/go.etcd.io/etcd/raft/raftpb/BUILD | 32 - vendor/go.etcd.io/etcd/raft/tracker/BUILD | 32 - vendor/go.etcd.io/etcd/version/BUILD | 24 - vendor/go.etcd.io/etcd/wal/BUILD | 47 - vendor/go.etcd.io/etcd/wal/walpb/BUILD | 30 - vendor/go.mongodb.org/mongo-driver/bson/BUILD | 50 - .../mongo-driver/bson/bsoncodec/BUILD | 41 - .../mongo-driver/bson/bsonrw/BUILD | 42 - .../mongo-driver/bson/bsontype/BUILD | 23 - .../mongo-driver/bson/primitive/BUILD | 27 - .../mongo-driver/x/bsonx/bsoncore/BUILD | 35 - vendor/go.opencensus.io/BUILD | 33 - vendor/go.opencensus.io/internal/BUILD | 31 - .../internal/tagencoding/BUILD | 23 - .../go.opencensus.io/metric/metricdata/BUILD | 32 - .../metric/metricproducer/BUILD | 27 - vendor/go.opencensus.io/plugin/ochttp/BUILD | 44 - .../plugin/ochttp/propagation/b3/BUILD | 27 - vendor/go.opencensus.io/resource/BUILD | 23 - vendor/go.opencensus.io/stats/BUILD | 39 - vendor/go.opencensus.io/stats/internal/BUILD | 24 - vendor/go.opencensus.io/stats/view/BUILD | 41 - vendor/go.opencensus.io/tag/BUILD | 33 - vendor/go.opencensus.io/trace/BUILD | 48 - vendor/go.opencensus.io/trace/internal/BUILD | 23 - .../go.opencensus.io/trace/propagation/BUILD | 24 - .../go.opencensus.io/trace/tracestate/BUILD | 23 - vendor/go.uber.org/atomic/BUILD | 27 - vendor/go.uber.org/multierr/BUILD | 24 - vendor/go.uber.org/zap/BUILD | 56 - vendor/go.uber.org/zap/buffer/BUILD | 26 - .../go.uber.org/zap/internal/bufferpool/BUILD | 24 - vendor/go.uber.org/zap/internal/color/BUILD | 23 - vendor/go.uber.org/zap/internal/exit/BUILD | 23 - vendor/go.uber.org/zap/zapcore/BUILD | 48 - vendor/golang.org/x/crypto/bcrypt/BUILD | 27 - vendor/golang.org/x/crypto/blowfish/BUILD | 27 - vendor/golang.org/x/crypto/chacha20/BUILD | 41 - vendor/golang.org/x/crypto/cryptobyte/BUILD | 31 - .../golang.org/x/crypto/cryptobyte/asn1/BUILD | 23 - vendor/golang.org/x/crypto/curve25519/BUILD | 29 - vendor/golang.org/x/crypto/ed25519/BUILD | 30 - .../ed25519/internal/edwards25519/BUILD | 26 - .../golang.org/x/crypto/internal/subtle/BUILD | 23 - .../golang.org/x/crypto/nacl/secretbox/BUILD | 28 - vendor/golang.org/x/crypto/pbkdf2/BUILD | 23 - vendor/golang.org/x/crypto/pkcs12/BUILD | 35 - .../x/crypto/pkcs12/internal/rc2/BUILD | 23 - vendor/golang.org/x/crypto/poly1305/BUILD | 41 - .../golang.org/x/crypto/salsa20/salsa/BUILD | 30 - vendor/golang.org/x/crypto/ssh/BUILD | 56 - .../x/crypto/ssh/internal/bcrypt_pbkdf/BUILD | 24 - vendor/golang.org/x/crypto/ssh/terminal/BUILD | 68 - vendor/golang.org/x/mod/module/BUILD | 27 - vendor/golang.org/x/mod/semver/BUILD | 23 - vendor/golang.org/x/net/bpf/BUILD | 31 - vendor/golang.org/x/net/context/BUILD | 32 - vendor/golang.org/x/net/context/ctxhttp/BUILD | 23 - vendor/golang.org/x/net/html/BUILD | 39 - vendor/golang.org/x/net/html/atom/BUILD | 26 - vendor/golang.org/x/net/html/charset/BUILD | 30 - vendor/golang.org/x/net/http/httpguts/BUILD | 27 - vendor/golang.org/x/net/http2/BUILD | 50 - vendor/golang.org/x/net/http2/hpack/BUILD | 28 - vendor/golang.org/x/net/idna/BUILD | 38 - vendor/golang.org/x/net/internal/iana/BUILD | 23 - vendor/golang.org/x/net/internal/socket/BUILD | 152 - vendor/golang.org/x/net/internal/socks/BUILD | 26 - .../x/net/internal/timeseries/BUILD | 23 - vendor/golang.org/x/net/ipv4/BUILD | 101 - vendor/golang.org/x/net/ipv6/BUILD | 100 - vendor/golang.org/x/net/proxy/BUILD | 30 - vendor/golang.org/x/net/trace/BUILD | 28 - vendor/golang.org/x/net/websocket/BUILD | 29 - vendor/golang.org/x/oauth2/BUILD | 34 - vendor/golang.org/x/oauth2/google/BUILD | 38 - vendor/golang.org/x/oauth2/internal/BUILD | 29 - vendor/golang.org/x/oauth2/jws/BUILD | 23 - vendor/golang.org/x/oauth2/jwt/BUILD | 28 - vendor/golang.org/x/sync/singleflight/BUILD | 23 - vendor/golang.org/x/sys/cpu/BUILD | 51 - .../x/sys/internal/unsafeheader/BUILD | 23 - vendor/golang.org/x/sys/unix/BUILD | 329 - vendor/golang.org/x/sys/windows/BUILD | 55 - .../golang.org/x/sys/windows/registry/BUILD | 34 - vendor/golang.org/x/sys/windows/svc/BUILD | 42 - vendor/golang.org/x/sys/windows/svc/mgr/BUILD | 36 - vendor/golang.org/x/text/encoding/BUILD | 37 - .../golang.org/x/text/encoding/charmap/BUILD | 32 - .../x/text/encoding/htmlindex/BUILD | 38 - .../golang.org/x/text/encoding/internal/BUILD | 31 - .../x/text/encoding/internal/identifier/BUILD | 26 - .../golang.org/x/text/encoding/japanese/BUILD | 35 - .../golang.org/x/text/encoding/korean/BUILD | 32 - .../x/text/encoding/simplifiedchinese/BUILD | 34 - .../x/text/encoding/traditionalchinese/BUILD | 32 - .../golang.org/x/text/encoding/unicode/BUILD | 34 - .../golang.org/x/text/internal/language/BUILD | 38 - .../x/text/internal/language/compact/BUILD | 30 - vendor/golang.org/x/text/internal/tag/BUILD | 23 - .../x/text/internal/utf8internal/BUILD | 23 - vendor/golang.org/x/text/language/BUILD | 37 - vendor/golang.org/x/text/runes/BUILD | 27 - .../golang.org/x/text/secure/bidirule/BUILD | 31 - vendor/golang.org/x/text/transform/BUILD | 23 - vendor/golang.org/x/text/unicode/bidi/BUILD | 33 - vendor/golang.org/x/text/unicode/norm/BUILD | 37 - vendor/golang.org/x/text/width/BUILD | 33 - vendor/golang.org/x/time/rate/BUILD | 23 - .../golang.org/x/tools/benchmark/parse/BUILD | 23 - .../x/tools/container/intsets/BUILD | 29 - .../golang.org/x/tools/go/ast/astutil/BUILD | 28 - .../golang.org/x/tools/go/gcexportdata/BUILD | 27 - .../x/tools/go/internal/gcimporter/BUILD | 32 - .../x/tools/go/internal/packagesdriver/BUILD | 24 - vendor/golang.org/x/tools/go/packages/BUILD | 39 - vendor/golang.org/x/tools/imports/BUILD | 24 - .../golang.org/x/tools/internal/event/BUILD | 36 - .../x/tools/internal/event/core/BUILD | 31 - .../x/tools/internal/event/keys/BUILD | 27 - .../x/tools/internal/event/label/BUILD | 23 - .../x/tools/internal/fastwalk/BUILD | 31 - .../x/tools/internal/gocommand/BUILD | 30 - .../x/tools/internal/gopathwalk/BUILD | 24 - .../golang.org/x/tools/internal/imports/BUILD | 36 - .../x/tools/internal/packagesinternal/BUILD | 24 - .../x/tools/internal/typesinternal/BUILD | 23 - vendor/golang.org/x/xerrors/BUILD | 35 - vendor/golang.org/x/xerrors/internal/BUILD | 23 - vendor/gonum.org/v1/gonum/blas/BUILD | 31 - vendor/gonum.org/v1/gonum/blas/blas64/BUILD | 32 - vendor/gonum.org/v1/gonum/blas/cblas128/BUILD | 33 - vendor/gonum.org/v1/gonum/blas/gonum/BUILD | 55 - vendor/gonum.org/v1/gonum/floats/BUILD | 27 - vendor/gonum.org/v1/gonum/graph/BUILD | 38 - .../gonum.org/v1/gonum/graph/encoding/BUILD | 30 - .../v1/gonum/graph/encoding/dot/BUILD | 35 - .../v1/gonum/graph/formats/dot/BUILD | 40 - .../v1/gonum/graph/formats/dot/ast/BUILD | 26 - .../graph/formats/dot/internal/astx/BUILD | 30 - .../graph/formats/dot/internal/errors/BUILD | 27 - .../graph/formats/dot/internal/lexer/BUILD | 29 - .../graph/formats/dot/internal/parser/BUILD | 36 - .../graph/formats/dot/internal/token/BUILD | 26 - .../v1/gonum/graph/internal/ordered/BUILD | 27 - .../v1/gonum/graph/internal/set/BUILD | 28 - .../v1/gonum/graph/internal/uid/BUILD | 24 - .../gonum.org/v1/gonum/graph/iterator/BUILD | 29 - vendor/gonum.org/v1/gonum/graph/simple/BUILD | 39 - .../v1/gonum/internal/asm/c128/BUILD | 40 - .../gonum.org/v1/gonum/internal/asm/c64/BUILD | 37 - .../gonum.org/v1/gonum/internal/asm/f32/BUILD | 39 - .../gonum.org/v1/gonum/internal/asm/f64/BUILD | 55 - .../gonum.org/v1/gonum/internal/cmplx64/BUILD | 31 - .../gonum.org/v1/gonum/internal/math32/BUILD | 30 - vendor/gonum.org/v1/gonum/lapack/BUILD | 31 - vendor/gonum.org/v1/gonum/lapack/gonum/BUILD | 152 - .../gonum.org/v1/gonum/lapack/lapack64/BUILD | 32 - vendor/gonum.org/v1/gonum/mat/BUILD | 67 - .../api/compute/v0.alpha/BUILD | 29 - .../api/compute/v0.beta/BUILD | 29 - vendor/google.golang.org/api/compute/v1/BUILD | 29 - .../google.golang.org/api/container/v1/BUILD | 29 - vendor/google.golang.org/api/googleapi/BUILD | 30 - .../api/googleapi/transport/BUILD | 23 - vendor/google.golang.org/api/internal/BUILD | 37 - .../api/internal/gensupport/BUILD | 36 - .../internal/third_party/uritemplates/BUILD | 26 - .../api/logging/v2beta1/BUILD | 29 - .../google.golang.org/api/monitoring/v3/BUILD | 29 - vendor/google.golang.org/api/option/BUILD | 33 - vendor/google.golang.org/api/pubsub/v1/BUILD | 29 - vendor/google.golang.org/api/tpu/v1/BUILD | 29 - .../api/transport/http/BUILD | 34 - .../transport/http/internal/propagation/BUILD | 27 - vendor/google.golang.org/appengine/BUILD | 41 - .../appengine/internal/BUILD | 52 - .../appengine/internal/app_identity/BUILD | 24 - .../appengine/internal/base/BUILD | 24 - .../appengine/internal/datastore/BUILD | 24 - .../appengine/internal/log/BUILD | 24 - .../appengine/internal/modules/BUILD | 24 - .../appengine/internal/remote_api/BUILD | 24 - .../appengine/internal/urlfetch/BUILD | 24 - .../appengine/urlfetch/BUILD | 29 - .../genproto/googleapis/api/httpbody/BUILD | 29 - .../genproto/googleapis/rpc/status/BUILD | 29 - .../genproto/protobuf/field_mask/BUILD | 24 - vendor/google.golang.org/grpc/BUILD | 101 - .../google.golang.org/grpc/attributes/BUILD | 23 - vendor/google.golang.org/grpc/backoff/BUILD | 23 - vendor/google.golang.org/grpc/balancer/BUILD | 35 - .../grpc/balancer/base/BUILD | 32 - .../grpc/balancer/roundrobin/BUILD | 29 - .../grpc/binarylog/grpc_binarylog_v1/BUILD | 28 - vendor/google.golang.org/grpc/codes/BUILD | 26 - .../google.golang.org/grpc/connectivity/BUILD | 24 - .../google.golang.org/grpc/credentials/BUILD | 35 - .../grpc/credentials/internal/BUILD | 23 - vendor/google.golang.org/grpc/encoding/BUILD | 26 - .../grpc/encoding/proto/BUILD | 27 - vendor/google.golang.org/grpc/grpclog/BUILD | 27 - vendor/google.golang.org/grpc/health/BUILD | 39 - .../grpc/health/grpc_health_v1/BUILD | 29 - vendor/google.golang.org/grpc/internal/BUILD | 38 - .../grpc/internal/backoff/BUILD | 27 - .../grpc/internal/balancerload/BUILD | 24 - .../grpc/internal/binarylog/BUILD | 38 - .../grpc/internal/buffer/BUILD | 23 - .../grpc/internal/channelz/BUILD | 43 - .../grpc/internal/envconfig/BUILD | 23 - .../grpc/internal/grpcrand/BUILD | 23 - .../grpc/internal/grpcsync/BUILD | 23 - .../grpc/internal/resolver/dns/BUILD | 33 - .../grpc/internal/resolver/passthrough/BUILD | 24 - .../grpc/internal/syscall/BUILD | 76 - .../grpc/internal/transport/BUILD | 53 - vendor/google.golang.org/grpc/keepalive/BUILD | 23 - vendor/google.golang.org/grpc/metadata/BUILD | 23 - vendor/google.golang.org/grpc/naming/BUILD | 27 - vendor/google.golang.org/grpc/peer/BUILD | 24 - vendor/google.golang.org/grpc/resolver/BUILD | 32 - .../google.golang.org/grpc/resolver/dns/BUILD | 27 - .../grpc/resolver/passthrough/BUILD | 24 - .../grpc/serviceconfig/BUILD | 23 - vendor/google.golang.org/grpc/stats/BUILD | 27 - vendor/google.golang.org/grpc/status/BUILD | 30 - vendor/google.golang.org/grpc/tap/BUILD | 23 - .../protobuf/encoding/protojson/BUILD | 42 - .../protobuf/encoding/prototext/BUILD | 42 - .../protobuf/encoding/protowire/BUILD | 24 - .../protobuf/internal/descfmt/BUILD | 28 - .../protobuf/internal/descopts/BUILD | 24 - .../protobuf/internal/detectknown/BUILD | 24 - .../protobuf/internal/detrand/BUILD | 23 - .../protobuf/internal/encoding/defval/BUILD | 28 - .../protobuf/internal/encoding/json/BUILD | 34 - .../internal/encoding/messageset/BUILD | 29 - .../protobuf/internal/encoding/tag/BUILD | 29 - .../protobuf/internal/encoding/text/BUILD | 36 - .../protobuf/internal/errors/BUILD | 28 - .../protobuf/internal/fieldnum/BUILD | 36 - .../protobuf/internal/fieldsort/BUILD | 24 - .../protobuf/internal/filedesc/BUILD | 44 - .../protobuf/internal/filetype/BUILD | 30 - .../protobuf/internal/flags/BUILD | 26 - .../protobuf/internal/genname/BUILD | 23 - .../protobuf/internal/impl/BUILD | 75 - .../protobuf/internal/mapsort/BUILD | 24 - .../protobuf/internal/pragma/BUILD | 23 - .../protobuf/internal/set/BUILD | 23 - .../protobuf/internal/strs/BUILD | 30 - .../protobuf/internal/version/BUILD | 23 - vendor/google.golang.org/protobuf/proto/BUILD | 53 - .../protobuf/reflect/protoreflect/BUILD | 35 - .../protobuf/reflect/protoregistry/BUILD | 27 - .../protobuf/runtime/protoiface/BUILD | 30 - .../protobuf/runtime/protoimpl/BUILD | 32 - .../protobuf/types/descriptorpb/BUILD | 28 - .../protobuf/types/known/anypb/BUILD | 27 - .../protobuf/types/known/durationpb/BUILD | 27 - .../protobuf/types/known/fieldmaskpb/BUILD | 27 - .../protobuf/types/known/timestamppb/BUILD | 27 - .../protobuf/types/known/wrapperspb/BUILD | 27 - .../protobuf/types/pluginpb/BUILD | 28 - vendor/gopkg.in/asn1-ber.v1/.travis.yml | 36 + vendor/gopkg.in/asn1-ber.v1/LICENSE | 22 + vendor/gopkg.in/asn1-ber.v1/README.md | 24 + vendor/gopkg.in/asn1-ber.v1/ber.go | 512 + vendor/gopkg.in/asn1-ber.v1/content_int.go | 25 + vendor/gopkg.in/asn1-ber.v1/header.go | 35 + vendor/gopkg.in/asn1-ber.v1/identifier.go | 112 + vendor/gopkg.in/asn1-ber.v1/length.go | 81 + vendor/gopkg.in/asn1-ber.v1/util.go | 24 + vendor/gopkg.in/fsnotify.v1/BUILD | 59 - vendor/gopkg.in/gcfg.v1/BUILD | 41 - vendor/gopkg.in/gcfg.v1/scanner/BUILD | 27 - vendor/gopkg.in/gcfg.v1/token/BUILD | 27 - vendor/gopkg.in/gcfg.v1/types/BUILD | 29 - vendor/gopkg.in/inf.v0/BUILD | 26 - vendor/gopkg.in/ldap.v2/.gitignore | 0 vendor/gopkg.in/ldap.v2/.travis.yml | 31 + vendor/gopkg.in/ldap.v2/LICENSE | 22 + vendor/gopkg.in/ldap.v2/Makefile | 52 + vendor/gopkg.in/ldap.v2/README.md | 53 + vendor/gopkg.in/ldap.v2/add.go | 113 + vendor/gopkg.in/ldap.v2/atomic_value.go | 13 + vendor/gopkg.in/ldap.v2/atomic_value_go13.go | 28 + vendor/gopkg.in/ldap.v2/bind.go | 143 + vendor/gopkg.in/ldap.v2/client.go | 27 + vendor/gopkg.in/ldap.v2/compare.go | 85 + vendor/gopkg.in/ldap.v2/conn.go | 470 + vendor/gopkg.in/ldap.v2/control.go | 420 + vendor/gopkg.in/ldap.v2/debug.go | 24 + vendor/gopkg.in/ldap.v2/del.go | 84 + vendor/gopkg.in/ldap.v2/dn.go | 247 + vendor/gopkg.in/ldap.v2/doc.go | 4 + vendor/gopkg.in/ldap.v2/error.go | 155 + vendor/gopkg.in/ldap.v2/filter.go | 469 + vendor/gopkg.in/ldap.v2/ldap.go | 320 + vendor/gopkg.in/ldap.v2/modify.go | 170 + vendor/gopkg.in/ldap.v2/passwdmodify.go | 148 + vendor/gopkg.in/ldap.v2/search.go | 450 + vendor/gopkg.in/natefinch/lumberjack.v2/BUILD | 27 - vendor/gopkg.in/square/go-jose.v2/BUILD | 46 - .../gopkg.in/square/go-jose.v2/cipher/BUILD | 28 - vendor/gopkg.in/square/go-jose.v2/json/BUILD | 30 - vendor/gopkg.in/square/go-jose.v2/jwt/BUILD | 34 - vendor/gopkg.in/tomb.v1/BUILD | 23 - vendor/gopkg.in/warnings.v0/BUILD | 23 - vendor/gopkg.in/yaml.v2/BUILD | 37 - vendor/k8s.io/gengo/args/BUILD | 30 - .../examples/deepcopy-gen/generators/BUILD | 31 - .../examples/defaulter-gen/generators/BUILD | 30 - .../examples/import-boss/generators/BUILD | 31 - .../gengo/examples/set-gen/generators/BUILD | 33 - .../k8s.io/gengo/examples/set-gen/sets/BUILD | 30 - vendor/k8s.io/gengo/generator/BUILD | 40 - vendor/k8s.io/gengo/namer/BUILD | 30 - vendor/k8s.io/gengo/parser/BUILD | 30 - vendor/k8s.io/gengo/types/BUILD | 28 - .../heapster/metrics/api/v1/types/BUILD | 27 - vendor/k8s.io/klog/v2/BUILD | 27 - .../k8s.io/kube-openapi/cmd/openapi-gen/BUILD | 39 - .../kube-openapi/cmd/openapi-gen/args/BUILD | 27 - .../k8s.io/kube-openapi/pkg/aggregator/BUILD | 31 - vendor/k8s.io/kube-openapi/pkg/builder/BUILD | 33 - vendor/k8s.io/kube-openapi/pkg/common/BUILD | 30 - .../k8s.io/kube-openapi/pkg/generators/BUILD | 43 - .../kube-openapi/pkg/generators/rules/BUILD | 32 - vendor/k8s.io/kube-openapi/pkg/handler/BUILD | 36 - .../k8s.io/kube-openapi/pkg/schemaconv/BUILD | 27 - vendor/k8s.io/kube-openapi/pkg/util/BUILD | 30 - .../k8s.io/kube-openapi/pkg/util/proto/BUILD | 35 - .../kube-openapi/pkg/util/proto/testing/BUILD | 28 - .../pkg/util/proto/validation/BUILD | 28 - .../k8s.io/kube-openapi/pkg/util/sets/BUILD | 26 - .../k8s.io/system-validators/validators/BUILD | 50 - vendor/k8s.io/utils/buffer/BUILD | 23 - vendor/k8s.io/utils/clock/BUILD | 23 - vendor/k8s.io/utils/exec/BUILD | 29 - vendor/k8s.io/utils/exec/testing/BUILD | 24 - vendor/k8s.io/utils/inotify/BUILD | 27 - vendor/k8s.io/utils/integer/BUILD | 23 - vendor/k8s.io/utils/io/BUILD | 23 - vendor/k8s.io/utils/keymutex/BUILD | 26 - vendor/k8s.io/utils/mount/BUILD | 84 - vendor/k8s.io/utils/net/BUILD | 27 - vendor/k8s.io/utils/nsenter/BUILD | 76 - vendor/k8s.io/utils/path/BUILD | 23 - vendor/k8s.io/utils/pointer/BUILD | 23 - vendor/k8s.io/utils/strings/BUILD | 27 - vendor/k8s.io/utils/trace/BUILD | 24 - vendor/modules.txt | 270 +- .../konnectivity-client/pkg/client/BUILD | 31 - .../konnectivity-client/proto/client/BUILD | 29 - .../kustomize/pkg/commands/build/BUILD | 33 - .../sigs.k8s.io/kustomize/pkg/constants/BUILD | 23 - .../sigs.k8s.io/kustomize/pkg/expansion/BUILD | 23 - .../sigs.k8s.io/kustomize/pkg/factory/BUILD | 29 - vendor/sigs.k8s.io/kustomize/pkg/fs/BUILD | 32 - vendor/sigs.k8s.io/kustomize/pkg/git/BUILD | 30 - vendor/sigs.k8s.io/kustomize/pkg/gvk/BUILD | 23 - vendor/sigs.k8s.io/kustomize/pkg/ifc/BUILD | 30 - .../kustomize/pkg/ifc/transformer/BUILD | 27 - vendor/sigs.k8s.io/kustomize/pkg/image/BUILD | 26 - .../kustomize/pkg/internal/error/BUILD | 30 - vendor/sigs.k8s.io/kustomize/pkg/loader/BUILD | 31 - vendor/sigs.k8s.io/kustomize/pkg/patch/BUILD | 30 - .../kustomize/pkg/patch/transformer/BUILD | 38 - vendor/sigs.k8s.io/kustomize/pkg/resid/BUILD | 24 - vendor/sigs.k8s.io/kustomize/pkg/resmap/BUILD | 36 - .../sigs.k8s.io/kustomize/pkg/resource/BUILD | 33 - vendor/sigs.k8s.io/kustomize/pkg/target/BUILD | 41 - .../kustomize/pkg/transformers/BUILD | 45 - .../kustomize/pkg/transformers/config/BUILD | 41 - .../transformers/config/defaultconfig/BUILD | 31 - vendor/sigs.k8s.io/kustomize/pkg/types/BUILD | 33 - .../structured-merge-diff/v4/fieldpath/BUILD | 37 - .../structured-merge-diff/v4/merge/BUILD | 30 - .../structured-merge-diff/v4/schema/BUILD | 28 - .../structured-merge-diff/v4/typed/BUILD | 39 - .../structured-merge-diff/v4/value/BUILD | 44 - vendor/sigs.k8s.io/yaml/BUILD | 28 - vendor/vbom.ml/util/sortorder/BUILD | 26 - 1705 files changed, 148431 insertions(+), 35389 deletions(-) delete mode 100644 vendor/BUILD delete mode 100644 vendor/bitbucket.org/bertimus9/systemstat/BUILD delete mode 100644 vendor/cloud.google.com/go/compute/metadata/BUILD delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute/BUILD delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2019-05-01/containerregistry/BUILD delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2020-04-01/containerservice/BUILD delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network/BUILD delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources/BUILD delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage/BUILD delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/storage/BUILD delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/version/BUILD delete mode 100644 vendor/github.com/Azure/go-ansiterm/BUILD delete mode 100644 vendor/github.com/Azure/go-ansiterm/winterm/BUILD delete mode 100644 vendor/github.com/Azure/go-autorest/autorest/BUILD delete mode 100644 vendor/github.com/Azure/go-autorest/autorest/adal/BUILD delete mode 100644 vendor/github.com/Azure/go-autorest/autorest/azure/BUILD delete mode 100644 vendor/github.com/Azure/go-autorest/autorest/date/BUILD delete mode 100644 vendor/github.com/Azure/go-autorest/autorest/mocks/BUILD delete mode 100644 vendor/github.com/Azure/go-autorest/autorest/to/BUILD delete mode 100644 vendor/github.com/Azure/go-autorest/autorest/validation/BUILD delete mode 100644 vendor/github.com/Azure/go-autorest/logger/BUILD delete mode 100644 vendor/github.com/Azure/go-autorest/tracing/BUILD delete mode 100644 vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/BUILD delete mode 100644 vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter/BUILD delete mode 100644 vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta/BUILD delete mode 100644 vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock/BUILD delete mode 100644 vendor/github.com/JeffAshton/win_pdh/BUILD delete mode 100644 vendor/github.com/MakeNowJust/heredoc/BUILD delete mode 100644 vendor/github.com/Microsoft/go-winio/BUILD delete mode 100644 vendor/github.com/Microsoft/go-winio/pkg/guid/BUILD delete mode 100644 vendor/github.com/Microsoft/go-winio/vhd/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/hcn/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/cni/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/cow/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/hcs/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/hcserror/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/hns/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/interop/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/log/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/logfields/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/longpath/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/mergemaps/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/oc/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/regstate/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/runhcs/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/safefile/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/schema1/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/schema2/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/timeout/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/vmcompute/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/internal/wclayer/BUILD delete mode 100644 vendor/github.com/Microsoft/hcsshim/osversion/BUILD delete mode 100644 vendor/github.com/NYTimes/gziphandler/BUILD delete mode 100644 vendor/github.com/PuerkitoBio/purell/BUILD delete mode 100644 vendor/github.com/PuerkitoBio/urlesc/BUILD delete mode 100644 vendor/github.com/armon/circbuf/BUILD delete mode 100644 vendor/github.com/asaskevich/govalidator/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/awserr/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/awsutil/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/client/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/client/metadata/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/corehandlers/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/credentials/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/csm/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/defaults/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/endpoints/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/request/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/session/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/aws/signer/v4/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/internal/ini/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/internal/sdkio/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/internal/sdkmath/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/internal/sdkrand/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/internal/sdkuri/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/internal/strings/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/private/protocol/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/private/protocol/query/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/private/protocol/rest/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/service/autoscaling/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/service/ec2/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/service/ecr/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/service/elb/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/service/elbv2/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/service/kms/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/service/sts/BUILD delete mode 100644 vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/BUILD delete mode 100644 vendor/github.com/beorn7/perks/quantile/BUILD delete mode 100644 vendor/github.com/blang/semver/BUILD delete mode 100644 vendor/github.com/caddyserver/caddy/caddyfile/BUILD delete mode 100644 vendor/github.com/cespare/xxhash/v2/BUILD delete mode 100644 vendor/github.com/chai2010/gettext-go/gettext/BUILD delete mode 100644 vendor/github.com/chai2010/gettext-go/gettext/mo/BUILD delete mode 100644 vendor/github.com/chai2010/gettext-go/gettext/plural/BUILD delete mode 100644 vendor/github.com/chai2010/gettext-go/gettext/po/BUILD delete mode 100644 vendor/github.com/checkpoint-restore/go-criu/v4/BUILD delete mode 100644 vendor/github.com/checkpoint-restore/go-criu/v4/rpc/BUILD delete mode 100644 vendor/github.com/cilium/ebpf/BUILD delete mode 100644 vendor/github.com/cilium/ebpf/asm/BUILD delete mode 100644 vendor/github.com/cilium/ebpf/internal/BUILD delete mode 100644 vendor/github.com/cilium/ebpf/internal/btf/BUILD delete mode 100644 vendor/github.com/cilium/ebpf/internal/unix/BUILD delete mode 100644 vendor/github.com/clusterhq/flocker-go/BUILD delete mode 100644 vendor/github.com/container-storage-interface/spec/lib/go/csi/BUILD delete mode 100644 vendor/github.com/containerd/cgroups/stats/v1/BUILD delete mode 100644 vendor/github.com/containerd/console/BUILD delete mode 100644 vendor/github.com/containerd/containerd/api/services/containers/v1/BUILD delete mode 100644 vendor/github.com/containerd/containerd/api/services/tasks/v1/BUILD delete mode 100644 vendor/github.com/containerd/containerd/api/services/version/v1/BUILD delete mode 100644 vendor/github.com/containerd/containerd/api/types/BUILD delete mode 100644 vendor/github.com/containerd/containerd/api/types/task/BUILD delete mode 100644 vendor/github.com/containerd/containerd/containers/BUILD delete mode 100644 vendor/github.com/containerd/containerd/errdefs/BUILD delete mode 100644 vendor/github.com/containerd/containerd/namespaces/BUILD delete mode 100644 vendor/github.com/containerd/containerd/pkg/dialer/BUILD delete mode 100644 vendor/github.com/containerd/ttrpc/BUILD delete mode 100644 vendor/github.com/containernetworking/cni/libcni/BUILD delete mode 100644 vendor/github.com/containernetworking/cni/pkg/invoke/BUILD delete mode 100644 vendor/github.com/containernetworking/cni/pkg/types/020/BUILD delete mode 100644 vendor/github.com/containernetworking/cni/pkg/types/BUILD delete mode 100644 vendor/github.com/containernetworking/cni/pkg/types/current/BUILD delete mode 100644 vendor/github.com/containernetworking/cni/pkg/utils/BUILD delete mode 100644 vendor/github.com/containernetworking/cni/pkg/version/BUILD delete mode 100644 vendor/github.com/coredns/corefile-migration/migration/BUILD delete mode 100644 vendor/github.com/coredns/corefile-migration/migration/corefile/BUILD delete mode 100644 vendor/github.com/coreos/go-oidc/BUILD delete mode 100644 vendor/github.com/coreos/go-semver/semver/BUILD delete mode 100644 vendor/github.com/coreos/go-systemd/daemon/BUILD delete mode 100644 vendor/github.com/coreos/go-systemd/journal/BUILD delete mode 100644 vendor/github.com/coreos/go-systemd/util/BUILD delete mode 100644 vendor/github.com/coreos/go-systemd/v22/dbus/BUILD delete mode 100644 vendor/github.com/coreos/pkg/capnslog/BUILD delete mode 100644 vendor/github.com/coreos/pkg/dlopen/BUILD delete mode 100644 vendor/github.com/cpuguy83/go-md2man/v2/md2man/BUILD delete mode 100644 vendor/github.com/cyphar/filepath-securejoin/BUILD delete mode 100644 vendor/github.com/davecgh/go-spew/spew/BUILD delete mode 100644 vendor/github.com/daviddengcn/go-colortext/BUILD delete mode 100644 vendor/github.com/dgrijalva/jwt-go/BUILD delete mode 100644 vendor/github.com/docker/distribution/digestset/BUILD delete mode 100644 vendor/github.com/docker/distribution/reference/BUILD delete mode 100644 vendor/github.com/docker/distribution/registry/api/errcode/BUILD delete mode 100644 vendor/github.com/docker/docker/api/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/blkiodev/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/container/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/events/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/filters/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/image/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/mount/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/network/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/registry/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/strslice/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/runtime/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/time/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/versions/BUILD delete mode 100644 vendor/github.com/docker/docker/api/types/volume/BUILD delete mode 100644 vendor/github.com/docker/docker/client/BUILD delete mode 100644 vendor/github.com/docker/docker/errdefs/BUILD delete mode 100644 vendor/github.com/docker/docker/pkg/jsonmessage/BUILD delete mode 100644 vendor/github.com/docker/docker/pkg/stdcopy/BUILD delete mode 100644 vendor/github.com/docker/docker/pkg/term/BUILD delete mode 100644 vendor/github.com/docker/docker/pkg/term/windows/BUILD delete mode 100644 vendor/github.com/docker/go-connections/nat/BUILD delete mode 100644 vendor/github.com/docker/go-connections/sockets/BUILD delete mode 100644 vendor/github.com/docker/go-connections/tlsconfig/BUILD delete mode 100644 vendor/github.com/docker/go-units/BUILD delete mode 100644 vendor/github.com/docker/spdystream/BUILD delete mode 100644 vendor/github.com/docker/spdystream/spdy/BUILD delete mode 100644 vendor/github.com/dustin/go-humanize/BUILD delete mode 100644 vendor/github.com/elazarl/goproxy/BUILD delete mode 100644 vendor/github.com/emicklei/go-restful/BUILD delete mode 100644 vendor/github.com/emicklei/go-restful/log/BUILD delete mode 100644 vendor/github.com/euank/go-kmsg-parser/kmsgparser/BUILD delete mode 100644 vendor/github.com/evanphx/json-patch/BUILD delete mode 100644 vendor/github.com/exponent-io/jsonpath/BUILD delete mode 100644 vendor/github.com/fatih/camelcase/BUILD delete mode 100644 vendor/github.com/fsnotify/fsnotify/BUILD delete mode 100644 vendor/github.com/ghodss/yaml/BUILD delete mode 100644 vendor/github.com/go-bindata/go-bindata/BUILD delete mode 100644 vendor/github.com/go-bindata/go-bindata/go-bindata/BUILD delete mode 100644 vendor/github.com/go-logr/logr/BUILD delete mode 100644 vendor/github.com/go-openapi/analysis/BUILD delete mode 100644 vendor/github.com/go-openapi/analysis/internal/BUILD delete mode 100644 vendor/github.com/go-openapi/errors/BUILD delete mode 100644 vendor/github.com/go-openapi/jsonpointer/BUILD delete mode 100644 vendor/github.com/go-openapi/jsonreference/BUILD delete mode 100644 vendor/github.com/go-openapi/loads/BUILD delete mode 100644 vendor/github.com/go-openapi/runtime/BUILD delete mode 100644 vendor/github.com/go-openapi/spec/BUILD delete mode 100644 vendor/github.com/go-openapi/strfmt/BUILD delete mode 100644 vendor/github.com/go-openapi/swag/BUILD delete mode 100644 vendor/github.com/go-openapi/validate/BUILD delete mode 100644 vendor/github.com/go-ozzo/ozzo-validation/BUILD delete mode 100644 vendor/github.com/go-ozzo/ozzo-validation/is/BUILD delete mode 100644 vendor/github.com/go-stack/stack/BUILD delete mode 100644 vendor/github.com/godbus/dbus/v5/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/gogoproto/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/compare/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/defaultcheck/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/description/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/embedcheck/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/enumstringer/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/equal/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/face/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/gostring/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/marshalto/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/oneofcheck/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/populate/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/size/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/stringer/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/testgen/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/union/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/plugin/unmarshal/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/proto/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/internal/remap/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/protoc-gen-gogo/grpc/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/protoc-gen-gogo/plugin/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/sortkeys/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/types/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/vanity/BUILD delete mode 100644 vendor/github.com/gogo/protobuf/vanity/command/BUILD delete mode 100644 vendor/github.com/golang/groupcache/lru/BUILD delete mode 100644 vendor/github.com/golang/mock/gomock/BUILD delete mode 100644 vendor/github.com/golang/protobuf/jsonpb/BUILD delete mode 100644 vendor/github.com/golang/protobuf/proto/BUILD delete mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/BUILD delete mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/generator/BUILD delete mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/generator/internal/remap/BUILD delete mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/plugin/BUILD delete mode 100644 vendor/github.com/golang/protobuf/ptypes/BUILD delete mode 100644 vendor/github.com/golang/protobuf/ptypes/any/BUILD delete mode 100644 vendor/github.com/golang/protobuf/ptypes/duration/BUILD delete mode 100644 vendor/github.com/golang/protobuf/ptypes/timestamp/BUILD delete mode 100644 vendor/github.com/golang/protobuf/ptypes/wrappers/BUILD delete mode 100644 vendor/github.com/google/btree/BUILD delete mode 100644 vendor/github.com/google/cadvisor/accelerators/BUILD delete mode 100644 vendor/github.com/google/cadvisor/cache/memory/BUILD delete mode 100644 vendor/github.com/google/cadvisor/client/v2/BUILD delete mode 100644 vendor/github.com/google/cadvisor/collector/BUILD delete mode 100644 vendor/github.com/google/cadvisor/container/BUILD delete mode 100644 vendor/github.com/google/cadvisor/container/common/BUILD delete mode 100644 vendor/github.com/google/cadvisor/container/containerd/BUILD delete mode 100644 vendor/github.com/google/cadvisor/container/containerd/install/BUILD delete mode 100644 vendor/github.com/google/cadvisor/container/crio/BUILD delete mode 100644 vendor/github.com/google/cadvisor/container/crio/install/BUILD delete mode 100644 vendor/github.com/google/cadvisor/container/docker/BUILD delete mode 100644 vendor/github.com/google/cadvisor/container/docker/install/BUILD delete mode 100644 vendor/github.com/google/cadvisor/container/docker/utils/BUILD delete mode 100644 vendor/github.com/google/cadvisor/container/libcontainer/BUILD delete mode 100644 vendor/github.com/google/cadvisor/container/raw/BUILD delete mode 100644 vendor/github.com/google/cadvisor/container/systemd/BUILD delete mode 100644 vendor/github.com/google/cadvisor/container/systemd/install/BUILD delete mode 100644 vendor/github.com/google/cadvisor/devicemapper/BUILD delete mode 100644 vendor/github.com/google/cadvisor/events/BUILD delete mode 100644 vendor/github.com/google/cadvisor/fs/BUILD delete mode 100644 vendor/github.com/google/cadvisor/info/v1/BUILD delete mode 100644 vendor/github.com/google/cadvisor/info/v2/BUILD delete mode 100644 vendor/github.com/google/cadvisor/machine/BUILD delete mode 100644 vendor/github.com/google/cadvisor/manager/BUILD delete mode 100644 vendor/github.com/google/cadvisor/metrics/BUILD delete mode 100644 vendor/github.com/google/cadvisor/nvm/BUILD delete mode 100644 vendor/github.com/google/cadvisor/perf/BUILD delete mode 100644 vendor/github.com/google/cadvisor/resctrl/BUILD delete mode 100644 vendor/github.com/google/cadvisor/stats/BUILD delete mode 100644 vendor/github.com/google/cadvisor/storage/BUILD delete mode 100644 vendor/github.com/google/cadvisor/summary/BUILD delete mode 100644 vendor/github.com/google/cadvisor/utils/BUILD delete mode 100644 vendor/github.com/google/cadvisor/utils/cloudinfo/BUILD delete mode 100644 vendor/github.com/google/cadvisor/utils/cloudinfo/aws/BUILD delete mode 100644 vendor/github.com/google/cadvisor/utils/cloudinfo/azure/BUILD delete mode 100644 vendor/github.com/google/cadvisor/utils/cloudinfo/gce/BUILD delete mode 100644 vendor/github.com/google/cadvisor/utils/cpuload/BUILD delete mode 100644 vendor/github.com/google/cadvisor/utils/cpuload/netlink/BUILD delete mode 100644 vendor/github.com/google/cadvisor/utils/oomparser/BUILD delete mode 100644 vendor/github.com/google/cadvisor/utils/sysfs/BUILD delete mode 100644 vendor/github.com/google/cadvisor/utils/sysinfo/BUILD delete mode 100644 vendor/github.com/google/cadvisor/version/BUILD delete mode 100644 vendor/github.com/google/cadvisor/watcher/BUILD delete mode 100644 vendor/github.com/google/cadvisor/zfs/BUILD delete mode 100644 vendor/github.com/google/go-cmp/cmp/BUILD delete mode 100644 vendor/github.com/google/go-cmp/cmp/cmpopts/BUILD delete mode 100644 vendor/github.com/google/go-cmp/cmp/internal/diff/BUILD delete mode 100644 vendor/github.com/google/go-cmp/cmp/internal/flags/BUILD delete mode 100644 vendor/github.com/google/go-cmp/cmp/internal/function/BUILD delete mode 100644 vendor/github.com/google/go-cmp/cmp/internal/value/BUILD delete mode 100644 vendor/github.com/google/gofuzz/BUILD delete mode 100644 vendor/github.com/google/uuid/BUILD delete mode 100644 vendor/github.com/googleapis/gax-go/v2/BUILD delete mode 100644 vendor/github.com/googleapis/gnostic/compiler/BUILD delete mode 100644 vendor/github.com/googleapis/gnostic/extensions/BUILD delete mode 100644 vendor/github.com/googleapis/gnostic/openapiv2/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v1/volumes/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v3/volumes/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/common/extensions/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/attachinterfaces/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/images/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tenants/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tokens/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/extensions/trusts/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/external/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/l7policies/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/listeners/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/loadbalancers/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/monitors/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/pools/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/networks/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/ports/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/openstack/utils/BUILD delete mode 100644 vendor/github.com/gophercloud/gophercloud/pagination/BUILD delete mode 100644 vendor/github.com/gorilla/websocket/BUILD delete mode 100644 vendor/github.com/gregjones/httpcache/BUILD delete mode 100644 vendor/github.com/gregjones/httpcache/diskcache/BUILD delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-middleware/BUILD delete mode 100644 vendor/github.com/grpc-ecosystem/go-grpc-prometheus/BUILD delete mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/internal/BUILD create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/internal/BUILD.bazel delete mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/BUILD create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/BUILD.bazel delete mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/BUILD create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/BUILD.bazel delete mode 100644 vendor/github.com/hashicorp/golang-lru/BUILD delete mode 100644 vendor/github.com/hashicorp/golang-lru/simplelru/BUILD delete mode 100644 vendor/github.com/hashicorp/hcl/BUILD delete mode 100644 vendor/github.com/hashicorp/hcl/hcl/ast/BUILD delete mode 100644 vendor/github.com/hashicorp/hcl/hcl/parser/BUILD delete mode 100644 vendor/github.com/hashicorp/hcl/hcl/printer/BUILD delete mode 100644 vendor/github.com/hashicorp/hcl/hcl/scanner/BUILD delete mode 100644 vendor/github.com/hashicorp/hcl/hcl/strconv/BUILD delete mode 100644 vendor/github.com/hashicorp/hcl/hcl/token/BUILD delete mode 100644 vendor/github.com/hashicorp/hcl/json/parser/BUILD delete mode 100644 vendor/github.com/hashicorp/hcl/json/scanner/BUILD delete mode 100644 vendor/github.com/hashicorp/hcl/json/token/BUILD delete mode 100644 vendor/github.com/heketi/heketi/client/api/go-client/BUILD delete mode 100644 vendor/github.com/heketi/heketi/pkg/glusterfs/api/BUILD delete mode 100644 vendor/github.com/heketi/heketi/pkg/utils/BUILD delete mode 100644 vendor/github.com/hpcloud/tail/BUILD delete mode 100644 vendor/github.com/hpcloud/tail/ratelimiter/BUILD delete mode 100644 vendor/github.com/hpcloud/tail/util/BUILD delete mode 100644 vendor/github.com/hpcloud/tail/watch/BUILD delete mode 100644 vendor/github.com/hpcloud/tail/winfile/BUILD delete mode 100644 vendor/github.com/imdario/mergo/BUILD delete mode 100644 vendor/github.com/inconshreveable/mousetrap/BUILD delete mode 100644 vendor/github.com/ishidawataru/sctp/BUILD delete mode 100644 vendor/github.com/jmespath/go-jmespath/BUILD delete mode 100644 vendor/github.com/jonboulle/clockwork/BUILD delete mode 100644 vendor/github.com/json-iterator/go/BUILD delete mode 100644 vendor/github.com/karrick/godirwalk/BUILD delete mode 100644 vendor/github.com/konsorten/go-windows-terminal-sequences/BUILD delete mode 100644 vendor/github.com/libopenstorage/openstorage/api/BUILD delete mode 100644 vendor/github.com/libopenstorage/openstorage/api/client/BUILD delete mode 100644 vendor/github.com/libopenstorage/openstorage/api/client/volume/BUILD delete mode 100644 vendor/github.com/libopenstorage/openstorage/api/spec/BUILD delete mode 100644 vendor/github.com/libopenstorage/openstorage/pkg/parser/BUILD delete mode 100644 vendor/github.com/libopenstorage/openstorage/pkg/units/BUILD delete mode 100644 vendor/github.com/libopenstorage/openstorage/volume/BUILD delete mode 100644 vendor/github.com/liggitt/tabwriter/BUILD delete mode 100644 vendor/github.com/lithammer/dedent/BUILD delete mode 100644 vendor/github.com/magiconair/properties/BUILD delete mode 100644 vendor/github.com/mailru/easyjson/buffer/BUILD delete mode 100644 vendor/github.com/mailru/easyjson/jlexer/BUILD delete mode 100644 vendor/github.com/mailru/easyjson/jwriter/BUILD delete mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/BUILD delete mode 100644 vendor/github.com/miekg/dns/BUILD delete mode 100644 vendor/github.com/mindprince/gonvml/BUILD delete mode 100644 vendor/github.com/mistifyio/go-zfs/BUILD delete mode 100644 vendor/github.com/mitchellh/go-wordwrap/BUILD delete mode 100644 vendor/github.com/mitchellh/mapstructure/BUILD delete mode 100644 vendor/github.com/moby/ipvs/BUILD delete mode 100644 vendor/github.com/moby/sys/mountinfo/BUILD delete mode 100644 vendor/github.com/moby/term/BUILD delete mode 100644 vendor/github.com/moby/term/windows/BUILD delete mode 100644 vendor/github.com/modern-go/concurrent/BUILD delete mode 100644 vendor/github.com/modern-go/reflect2/BUILD delete mode 100644 vendor/github.com/mohae/deepcopy/BUILD delete mode 100644 vendor/github.com/morikuni/aec/BUILD delete mode 100644 vendor/github.com/mrunalp/fileutils/BUILD delete mode 100644 vendor/github.com/munnerz/goautoneg/BUILD delete mode 100644 vendor/github.com/mvdan/xurls/BUILD delete mode 100644 vendor/github.com/mxk/go-flowrate/flowrate/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/config/BUILD create mode 100644 vendor/github.com/onsi/ginkgo/extension.go delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/convert/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/nodot/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/testrunner/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/testsuite/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/ginkgo/watch/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/internal/codelocation/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/internal/containernode/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/internal/failer/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/internal/leafnodes/BUILD create mode 100644 vendor/github.com/onsi/ginkgo/internal/leafnodes/it_node_extension.go delete mode 100644 vendor/github.com/onsi/ginkgo/internal/remote/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_linux_riscv64.go delete mode 100644 vendor/github.com/onsi/ginkgo/internal/spec/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/internal/spec_iterator/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/internal/specrunner/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/internal/suite/BUILD create mode 100644 vendor/github.com/onsi/ginkgo/internal/suite/suite_extension.go delete mode 100644 vendor/github.com/onsi/ginkgo/internal/testingtproxy/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/internal/writer/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/reporters/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/reporters/stenographer/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/BUILD delete mode 100644 vendor/github.com/onsi/ginkgo/types/BUILD create mode 100644 vendor/github.com/onsi/ginkgo/types/types_extension.go delete mode 100644 vendor/github.com/onsi/gomega/BUILD delete mode 100644 vendor/github.com/onsi/gomega/format/BUILD delete mode 100644 vendor/github.com/onsi/gomega/gstruct/BUILD delete mode 100644 vendor/github.com/onsi/gomega/gstruct/errors/BUILD delete mode 100644 vendor/github.com/onsi/gomega/internal/assertion/BUILD delete mode 100644 vendor/github.com/onsi/gomega/internal/asyncassertion/BUILD delete mode 100644 vendor/github.com/onsi/gomega/internal/oraclematcher/BUILD delete mode 100644 vendor/github.com/onsi/gomega/internal/testingtsupport/BUILD delete mode 100644 vendor/github.com/onsi/gomega/matchers/BUILD delete mode 100644 vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/BUILD delete mode 100644 vendor/github.com/onsi/gomega/matchers/support/goraph/edge/BUILD delete mode 100644 vendor/github.com/onsi/gomega/matchers/support/goraph/node/BUILD delete mode 100644 vendor/github.com/onsi/gomega/matchers/support/goraph/util/BUILD delete mode 100644 vendor/github.com/onsi/gomega/types/BUILD delete mode 100644 vendor/github.com/opencontainers/go-digest/BUILD delete mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/BUILD delete mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/v1/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/apparmor/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/devices/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/devicefilter/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/validate/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/intelrdt/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/keys/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/logs/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/seccomp/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/stacktrace/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/system/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/user/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/utils/BUILD delete mode 100644 vendor/github.com/opencontainers/runc/types/BUILD delete mode 100644 vendor/github.com/opencontainers/runtime-spec/specs-go/BUILD delete mode 100644 vendor/github.com/opencontainers/selinux/go-selinux/BUILD delete mode 100644 vendor/github.com/opencontainers/selinux/go-selinux/label/BUILD delete mode 100644 vendor/github.com/opencontainers/selinux/pkg/pwalk/BUILD create mode 100644 vendor/github.com/openshift/api/LICENSE create mode 100644 vendor/github.com/openshift/api/apps/v1/consts.go create mode 100644 vendor/github.com/openshift/api/apps/v1/deprecated_consts.go create mode 100644 vendor/github.com/openshift/api/apps/v1/doc.go create mode 100644 vendor/github.com/openshift/api/apps/v1/generated.pb.go create mode 100644 vendor/github.com/openshift/api/apps/v1/generated.proto create mode 100644 vendor/github.com/openshift/api/apps/v1/legacy.go create mode 100644 vendor/github.com/openshift/api/apps/v1/register.go create mode 100644 vendor/github.com/openshift/api/apps/v1/types.go create mode 100644 vendor/github.com/openshift/api/apps/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/apps/v1/zz_generated.swagger_doc_generated.go create mode 100644 vendor/github.com/openshift/api/authorization/v1/0000_03_authorization-openshift_01_rolebindingrestriction.crd.yaml create mode 100644 vendor/github.com/openshift/api/authorization/v1/codec.go create mode 100644 vendor/github.com/openshift/api/authorization/v1/doc.go create mode 100644 vendor/github.com/openshift/api/authorization/v1/generated.pb.go create mode 100644 vendor/github.com/openshift/api/authorization/v1/generated.proto create mode 100644 vendor/github.com/openshift/api/authorization/v1/legacy.go create mode 100644 vendor/github.com/openshift/api/authorization/v1/register.go create mode 100644 vendor/github.com/openshift/api/authorization/v1/types.go create mode 100644 vendor/github.com/openshift/api/authorization/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/authorization/v1/zz_generated.swagger_doc_generated.go create mode 100644 vendor/github.com/openshift/api/build/v1/consts.go create mode 100644 vendor/github.com/openshift/api/build/v1/doc.go create mode 100644 vendor/github.com/openshift/api/build/v1/generated.pb.go create mode 100644 vendor/github.com/openshift/api/build/v1/generated.proto create mode 100644 vendor/github.com/openshift/api/build/v1/legacy.go create mode 100644 vendor/github.com/openshift/api/build/v1/register.go create mode 100644 vendor/github.com/openshift/api/build/v1/types.go create mode 100644 vendor/github.com/openshift/api/build/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/build/v1/zz_generated.swagger_doc_generated.go create mode 100644 vendor/github.com/openshift/api/config/v1/0000_00_cluster-version-operator_01_clusteroperator.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_00_cluster-version-operator_01_clusterversion.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_03_config-operator_01_operatorhub.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_03_config-operator_01_proxy.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_apiserver.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_authentication.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_build.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_console.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_dns.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_featuregate.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_image.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_infrastructure.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_ingress.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_network.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_oauth.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_project.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_scheduler.crd.yaml create mode 100644 vendor/github.com/openshift/api/config/v1/doc.go create mode 100644 vendor/github.com/openshift/api/config/v1/register.go create mode 100644 vendor/github.com/openshift/api/config/v1/stringsource.go create mode 100644 vendor/github.com/openshift/api/config/v1/types.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_apiserver.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_authentication.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_build.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_cluster_operator.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_cluster_version.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_console.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_dns.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_feature.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_image.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_infrastructure.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_ingress.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_network.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_oauth.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_operatorhub.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_project.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_proxy.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_scheduling.go create mode 100644 vendor/github.com/openshift/api/config/v1/types_tlssecurityprofile.go create mode 100644 vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go create mode 100644 vendor/github.com/openshift/api/image/docker10/doc.go create mode 100644 vendor/github.com/openshift/api/image/docker10/dockertypes.go create mode 100644 vendor/github.com/openshift/api/image/docker10/register.go create mode 100644 vendor/github.com/openshift/api/image/docker10/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/image/dockerpre012/deepcopy.go create mode 100644 vendor/github.com/openshift/api/image/dockerpre012/doc.go create mode 100644 vendor/github.com/openshift/api/image/dockerpre012/dockertypes.go create mode 100644 vendor/github.com/openshift/api/image/dockerpre012/register.go create mode 100644 vendor/github.com/openshift/api/image/dockerpre012/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/image/v1/consts.go create mode 100644 vendor/github.com/openshift/api/image/v1/doc.go create mode 100644 vendor/github.com/openshift/api/image/v1/generated.pb.go create mode 100644 vendor/github.com/openshift/api/image/v1/generated.proto create mode 100644 vendor/github.com/openshift/api/image/v1/legacy.go create mode 100644 vendor/github.com/openshift/api/image/v1/register.go create mode 100644 vendor/github.com/openshift/api/image/v1/types.go create mode 100644 vendor/github.com/openshift/api/image/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/image/v1/zz_generated.swagger_doc_generated.go create mode 100644 vendor/github.com/openshift/api/kubecontrolplane/v1/doc.go create mode 100644 vendor/github.com/openshift/api/kubecontrolplane/v1/register.go create mode 100644 vendor/github.com/openshift/api/kubecontrolplane/v1/types.go create mode 100644 vendor/github.com/openshift/api/kubecontrolplane/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/kubecontrolplane/v1/zz_generated.swagger_doc_generated.go create mode 100644 vendor/github.com/openshift/api/network/v1/001-clusternetwork-crd.yaml create mode 100644 vendor/github.com/openshift/api/network/v1/002-hostsubnet-crd.yaml create mode 100644 vendor/github.com/openshift/api/network/v1/003-netnamespace-crd.yaml create mode 100644 vendor/github.com/openshift/api/network/v1/004-egressnetworkpolicy-crd.yaml create mode 100644 vendor/github.com/openshift/api/network/v1/constants.go create mode 100644 vendor/github.com/openshift/api/network/v1/doc.go create mode 100644 vendor/github.com/openshift/api/network/v1/generated.pb.go create mode 100644 vendor/github.com/openshift/api/network/v1/generated.proto create mode 100644 vendor/github.com/openshift/api/network/v1/legacy.go create mode 100644 vendor/github.com/openshift/api/network/v1/register.go create mode 100644 vendor/github.com/openshift/api/network/v1/types.go create mode 100644 vendor/github.com/openshift/api/network/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/network/v1/zz_generated.swagger_doc_generated.go create mode 100644 vendor/github.com/openshift/api/oauth/v1/doc.go create mode 100644 vendor/github.com/openshift/api/oauth/v1/generated.pb.go create mode 100644 vendor/github.com/openshift/api/oauth/v1/generated.proto create mode 100644 vendor/github.com/openshift/api/oauth/v1/legacy.go create mode 100644 vendor/github.com/openshift/api/oauth/v1/register.go create mode 100644 vendor/github.com/openshift/api/oauth/v1/types.go create mode 100644 vendor/github.com/openshift/api/oauth/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/oauth/v1/zz_generated.swagger_doc_generated.go create mode 100644 vendor/github.com/openshift/api/osin/v1/doc.go create mode 100644 vendor/github.com/openshift/api/osin/v1/register.go create mode 100644 vendor/github.com/openshift/api/osin/v1/types.go create mode 100644 vendor/github.com/openshift/api/osin/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/pkg/serialization/serialization.go create mode 100644 vendor/github.com/openshift/api/project/v1/doc.go create mode 100644 vendor/github.com/openshift/api/project/v1/generated.pb.go create mode 100644 vendor/github.com/openshift/api/project/v1/generated.proto create mode 100644 vendor/github.com/openshift/api/project/v1/legacy.go create mode 100644 vendor/github.com/openshift/api/project/v1/register.go create mode 100644 vendor/github.com/openshift/api/project/v1/types.go create mode 100644 vendor/github.com/openshift/api/project/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/project/v1/zz_generated.swagger_doc_generated.go create mode 100644 vendor/github.com/openshift/api/quota/v1/0000_03_quota-openshift_01_clusterresourcequota.crd.yaml create mode 100644 vendor/github.com/openshift/api/quota/v1/0000_03_quota-openshift_01_clusterresourcequota.crd.yaml-merge-patch create mode 100644 vendor/github.com/openshift/api/quota/v1/doc.go create mode 100644 vendor/github.com/openshift/api/quota/v1/generated.pb.go create mode 100644 vendor/github.com/openshift/api/quota/v1/generated.proto create mode 100644 vendor/github.com/openshift/api/quota/v1/legacy.go create mode 100644 vendor/github.com/openshift/api/quota/v1/register.go create mode 100644 vendor/github.com/openshift/api/quota/v1/types.go create mode 100644 vendor/github.com/openshift/api/quota/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/quota/v1/zz_generated.swagger_doc_generated.go create mode 100644 vendor/github.com/openshift/api/route/v1/doc.go create mode 100644 vendor/github.com/openshift/api/route/v1/generated.pb.go create mode 100644 vendor/github.com/openshift/api/route/v1/generated.proto create mode 100644 vendor/github.com/openshift/api/route/v1/legacy.go create mode 100644 vendor/github.com/openshift/api/route/v1/register.go create mode 100644 vendor/github.com/openshift/api/route/v1/types.go create mode 100644 vendor/github.com/openshift/api/route/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/route/v1/zz_generated.swagger_doc_generated.go create mode 100644 vendor/github.com/openshift/api/security/install.go create mode 100644 vendor/github.com/openshift/api/security/v1/0000_03_security-openshift_01_scc.crd.yaml create mode 100644 vendor/github.com/openshift/api/security/v1/consts.go create mode 100644 vendor/github.com/openshift/api/security/v1/doc.go create mode 100644 vendor/github.com/openshift/api/security/v1/generated.pb.go create mode 100644 vendor/github.com/openshift/api/security/v1/generated.proto create mode 100644 vendor/github.com/openshift/api/security/v1/legacy.go create mode 100644 vendor/github.com/openshift/api/security/v1/register.go create mode 100644 vendor/github.com/openshift/api/security/v1/types.go create mode 100644 vendor/github.com/openshift/api/security/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/security/v1/zz_generated.swagger_doc_generated.go create mode 100644 vendor/github.com/openshift/api/template/v1/codec.go create mode 100644 vendor/github.com/openshift/api/template/v1/consts.go create mode 100644 vendor/github.com/openshift/api/template/v1/doc.go create mode 100644 vendor/github.com/openshift/api/template/v1/generated.pb.go create mode 100644 vendor/github.com/openshift/api/template/v1/generated.proto create mode 100644 vendor/github.com/openshift/api/template/v1/legacy.go create mode 100644 vendor/github.com/openshift/api/template/v1/register.go create mode 100644 vendor/github.com/openshift/api/template/v1/types.go create mode 100644 vendor/github.com/openshift/api/template/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/template/v1/zz_generated.swagger_doc_generated.go create mode 100644 vendor/github.com/openshift/api/user/v1/doc.go create mode 100644 vendor/github.com/openshift/api/user/v1/generated.pb.go create mode 100644 vendor/github.com/openshift/api/user/v1/generated.proto create mode 100644 vendor/github.com/openshift/api/user/v1/legacy.go create mode 100644 vendor/github.com/openshift/api/user/v1/register.go create mode 100644 vendor/github.com/openshift/api/user/v1/types.go create mode 100644 vendor/github.com/openshift/api/user/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/api/user/v1/zz_generated.swagger_doc_generated.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/LICENSE create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/accept.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/default-policy.yaml create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/defaults.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/doc.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/register.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/types.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/validation/validation.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/helpers.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagepolicy.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators/interfaces.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators/meta.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators/pods.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/intializers.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/rules/accept.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/rules/rules.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/accessor.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/admission.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/intializers.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/lockfactory.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/authorization/scope/converter.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/configflags/audit.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/configflags/helpers.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/capabilities/mustrunas.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/capabilities/types.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/group/mustrunas.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/group/runasany.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/group/types.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission/admission.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission/intializers.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission/scc_exec.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccmatching/matcher.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccmatching/provider.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccmatching/types.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/seccomp/types.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/seccomp/withseccomp.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/convert.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/doc.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/mustrunas.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/runasany.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/types.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/doc.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/mustrunas.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/mustrunasrange.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/nonroot.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/runasany.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/types.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util/sort/bypriority.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util/sort/byrestrictions.go create mode 100644 vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util/util.go create mode 100644 vendor/github.com/openshift/client-go/LICENSE create mode 100644 vendor/github.com/openshift/client-go/apps/clientset/versioned/clientset.go create mode 100644 vendor/github.com/openshift/client-go/apps/clientset/versioned/doc.go create mode 100644 vendor/github.com/openshift/client-go/apps/clientset/versioned/scheme/doc.go create mode 100644 vendor/github.com/openshift/client-go/apps/clientset/versioned/scheme/register.go create mode 100644 vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/apps_client.go create mode 100644 vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/deploymentconfig.go create mode 100644 vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/doc.go create mode 100644 vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/generated_expansion.go create mode 100644 vendor/github.com/openshift/client-go/apps/informers/externalversions/apps/interface.go create mode 100644 vendor/github.com/openshift/client-go/apps/informers/externalversions/apps/v1/deploymentconfig.go create mode 100644 vendor/github.com/openshift/client-go/apps/informers/externalversions/apps/v1/interface.go create mode 100644 vendor/github.com/openshift/client-go/apps/informers/externalversions/factory.go create mode 100644 vendor/github.com/openshift/client-go/apps/informers/externalversions/generic.go create mode 100644 vendor/github.com/openshift/client-go/apps/informers/externalversions/internalinterfaces/factory_interfaces.go create mode 100644 vendor/github.com/openshift/client-go/apps/listers/apps/v1/deploymentconfig.go create mode 100644 vendor/github.com/openshift/client-go/apps/listers/apps/v1/expansion_generated.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/clientset.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/doc.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/fake/clientset_generated.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/fake/doc.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/fake/register.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/scheme/doc.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/scheme/register.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/authorization_client.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/clusterrole.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/clusterrolebinding.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/doc.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/doc.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_authorization_client.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_clusterrole.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_clusterrolebinding.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_localresourceaccessreview.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_localsubjectaccessreview.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_resourceaccessreview.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_role.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_rolebinding.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_rolebindingrestriction.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_selfsubjectrulesreview.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_subjectaccessreview.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_subjectrulesreview.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/generated_expansion.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/localresourceaccessreview.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/localsubjectaccessreview.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/resourceaccessreview.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/role.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/rolebinding.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/rolebindingrestriction.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/selfsubjectrulesreview.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/subjectaccessreview.go create mode 100644 vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/subjectrulesreview.go create mode 100644 vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/interface.go create mode 100644 vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/clusterrole.go create mode 100644 vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/clusterrolebinding.go create mode 100644 vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/interface.go create mode 100644 vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/role.go create mode 100644 vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/rolebinding.go create mode 100644 vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/rolebindingrestriction.go create mode 100644 vendor/github.com/openshift/client-go/authorization/informers/externalversions/factory.go create mode 100644 vendor/github.com/openshift/client-go/authorization/informers/externalversions/generic.go create mode 100644 vendor/github.com/openshift/client-go/authorization/informers/externalversions/internalinterfaces/factory_interfaces.go create mode 100644 vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/clusterrole.go create mode 100644 vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/clusterrolebinding.go create mode 100644 vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/expansion_generated.go create mode 100644 vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/role.go create mode 100644 vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/rolebinding.go create mode 100644 vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/rolebindingrestriction.go create mode 100644 vendor/github.com/openshift/client-go/build/clientset/versioned/clientset.go create mode 100644 vendor/github.com/openshift/client-go/build/clientset/versioned/doc.go create mode 100644 vendor/github.com/openshift/client-go/build/clientset/versioned/scheme/doc.go create mode 100644 vendor/github.com/openshift/client-go/build/clientset/versioned/scheme/register.go create mode 100644 vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/build.go create mode 100644 vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/build_client.go create mode 100644 vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/buildconfig.go create mode 100644 vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/doc.go create mode 100644 vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/generated_expansion.go create mode 100644 vendor/github.com/openshift/client-go/build/informers/externalversions/build/interface.go create mode 100644 vendor/github.com/openshift/client-go/build/informers/externalversions/build/v1/build.go create mode 100644 vendor/github.com/openshift/client-go/build/informers/externalversions/build/v1/buildconfig.go create mode 100644 vendor/github.com/openshift/client-go/build/informers/externalversions/build/v1/interface.go create mode 100644 vendor/github.com/openshift/client-go/build/informers/externalversions/factory.go create mode 100644 vendor/github.com/openshift/client-go/build/informers/externalversions/generic.go create mode 100644 vendor/github.com/openshift/client-go/build/informers/externalversions/internalinterfaces/factory_interfaces.go create mode 100644 vendor/github.com/openshift/client-go/build/listers/build/v1/build.go create mode 100644 vendor/github.com/openshift/client-go/build/listers/build/v1/buildconfig.go create mode 100644 vendor/github.com/openshift/client-go/build/listers/build/v1/expansion_generated.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/clientset.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/doc.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/fake/clientset_generated.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/fake/doc.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/fake/register.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/scheme/doc.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/scheme/register.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/apiserver.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/authentication.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/build.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/clusteroperator.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/clusterversion.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/config_client.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/console.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/dns.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/doc.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/doc.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_apiserver.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_authentication.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_build.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_clusteroperator.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_clusterversion.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_config_client.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_console.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_dns.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_featuregate.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_image.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_infrastructure.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_ingress.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_network.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_oauth.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_operatorhub.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_project.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_proxy.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_scheduler.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/featuregate.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/generated_expansion.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/image.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/infrastructure.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/ingress.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/network.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/oauth.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/operatorhub.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/project.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/proxy.go create mode 100644 vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/scheduler.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/clientset.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/doc.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/scheme/doc.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/scheme/register.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/doc.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/generated_expansion.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/image.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/image_client.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagesignature.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestream.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreamimage.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreamimport.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreammapping.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreamtag.go create mode 100644 vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagetag.go create mode 100644 vendor/github.com/openshift/client-go/image/informers/externalversions/factory.go create mode 100644 vendor/github.com/openshift/client-go/image/informers/externalversions/generic.go create mode 100644 vendor/github.com/openshift/client-go/image/informers/externalversions/image/interface.go create mode 100644 vendor/github.com/openshift/client-go/image/informers/externalversions/image/v1/image.go create mode 100644 vendor/github.com/openshift/client-go/image/informers/externalversions/image/v1/imagestream.go create mode 100644 vendor/github.com/openshift/client-go/image/informers/externalversions/image/v1/interface.go create mode 100644 vendor/github.com/openshift/client-go/image/informers/externalversions/internalinterfaces/factory_interfaces.go create mode 100644 vendor/github.com/openshift/client-go/image/listers/image/v1/expansion_generated.go create mode 100644 vendor/github.com/openshift/client-go/image/listers/image/v1/image.go create mode 100644 vendor/github.com/openshift/client-go/image/listers/image/v1/imagestream.go create mode 100644 vendor/github.com/openshift/client-go/image/listers/image/v1/imagestreamtag.go create mode 100644 vendor/github.com/openshift/client-go/image/listers/image/v1/imagetag.go create mode 100644 vendor/github.com/openshift/client-go/network/clientset/versioned/clientset.go create mode 100644 vendor/github.com/openshift/client-go/network/clientset/versioned/doc.go create mode 100644 vendor/github.com/openshift/client-go/network/clientset/versioned/scheme/doc.go create mode 100644 vendor/github.com/openshift/client-go/network/clientset/versioned/scheme/register.go create mode 100644 vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/clusternetwork.go create mode 100644 vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/doc.go create mode 100644 vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/egressnetworkpolicy.go create mode 100644 vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/generated_expansion.go create mode 100644 vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/hostsubnet.go create mode 100644 vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/netnamespace.go create mode 100644 vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/network_client.go create mode 100644 vendor/github.com/openshift/client-go/network/informers/externalversions/factory.go create mode 100644 vendor/github.com/openshift/client-go/network/informers/externalversions/generic.go create mode 100644 vendor/github.com/openshift/client-go/network/informers/externalversions/internalinterfaces/factory_interfaces.go create mode 100644 vendor/github.com/openshift/client-go/network/informers/externalversions/network/interface.go create mode 100644 vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/clusternetwork.go create mode 100644 vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/egressnetworkpolicy.go create mode 100644 vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/hostsubnet.go create mode 100644 vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/interface.go create mode 100644 vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/netnamespace.go create mode 100644 vendor/github.com/openshift/client-go/network/listers/network/v1/clusternetwork.go create mode 100644 vendor/github.com/openshift/client-go/network/listers/network/v1/egressnetworkpolicy.go create mode 100644 vendor/github.com/openshift/client-go/network/listers/network/v1/expansion_generated.go create mode 100644 vendor/github.com/openshift/client-go/network/listers/network/v1/hostsubnet.go create mode 100644 vendor/github.com/openshift/client-go/network/listers/network/v1/netnamespace.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/clientset.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/doc.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/fake/clientset_generated.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/fake/doc.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/fake/register.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/scheme/doc.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/scheme/register.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/doc.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/doc.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauth_client.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthaccesstoken.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthauthorizetoken.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthclient.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthclientauthorization.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/generated_expansion.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauth_client.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthaccesstoken.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthauthorizetoken.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthclient.go create mode 100644 vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthclientauthorization.go create mode 100644 vendor/github.com/openshift/client-go/oauth/informers/externalversions/factory.go create mode 100644 vendor/github.com/openshift/client-go/oauth/informers/externalversions/generic.go create mode 100644 vendor/github.com/openshift/client-go/oauth/informers/externalversions/internalinterfaces/factory_interfaces.go create mode 100644 vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/interface.go create mode 100644 vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/interface.go create mode 100644 vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthaccesstoken.go create mode 100644 vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthauthorizetoken.go create mode 100644 vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthclient.go create mode 100644 vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthclientauthorization.go create mode 100644 vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/expansion_generated.go create mode 100644 vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthaccesstoken.go create mode 100644 vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthauthorizetoken.go create mode 100644 vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthclient.go create mode 100644 vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthclientauthorization.go create mode 100644 vendor/github.com/openshift/client-go/quota/clientset/versioned/clientset.go create mode 100644 vendor/github.com/openshift/client-go/quota/clientset/versioned/doc.go create mode 100644 vendor/github.com/openshift/client-go/quota/clientset/versioned/scheme/doc.go create mode 100644 vendor/github.com/openshift/client-go/quota/clientset/versioned/scheme/register.go create mode 100644 vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/appliedclusterresourcequota.go create mode 100644 vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/clusterresourcequota.go create mode 100644 vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/doc.go create mode 100644 vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/generated_expansion.go create mode 100644 vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/quota_client.go create mode 100644 vendor/github.com/openshift/client-go/quota/informers/externalversions/factory.go create mode 100644 vendor/github.com/openshift/client-go/quota/informers/externalversions/generic.go create mode 100644 vendor/github.com/openshift/client-go/quota/informers/externalversions/internalinterfaces/factory_interfaces.go create mode 100644 vendor/github.com/openshift/client-go/quota/informers/externalversions/quota/interface.go create mode 100644 vendor/github.com/openshift/client-go/quota/informers/externalversions/quota/v1/clusterresourcequota.go create mode 100644 vendor/github.com/openshift/client-go/quota/informers/externalversions/quota/v1/interface.go create mode 100644 vendor/github.com/openshift/client-go/quota/listers/quota/v1/appliedclusterresourcequota.go create mode 100644 vendor/github.com/openshift/client-go/quota/listers/quota/v1/clusterresourcequota.go create mode 100644 vendor/github.com/openshift/client-go/quota/listers/quota/v1/expansion_generated.go create mode 100644 vendor/github.com/openshift/client-go/route/clientset/versioned/clientset.go create mode 100644 vendor/github.com/openshift/client-go/route/clientset/versioned/doc.go create mode 100644 vendor/github.com/openshift/client-go/route/clientset/versioned/scheme/doc.go create mode 100644 vendor/github.com/openshift/client-go/route/clientset/versioned/scheme/register.go create mode 100644 vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/doc.go create mode 100644 vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/generated_expansion.go create mode 100644 vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/route.go create mode 100644 vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/route_client.go create mode 100644 vendor/github.com/openshift/client-go/route/informers/externalversions/factory.go create mode 100644 vendor/github.com/openshift/client-go/route/informers/externalversions/generic.go create mode 100644 vendor/github.com/openshift/client-go/route/informers/externalversions/internalinterfaces/factory_interfaces.go create mode 100644 vendor/github.com/openshift/client-go/route/informers/externalversions/route/interface.go create mode 100644 vendor/github.com/openshift/client-go/route/informers/externalversions/route/v1/interface.go create mode 100644 vendor/github.com/openshift/client-go/route/informers/externalversions/route/v1/route.go create mode 100644 vendor/github.com/openshift/client-go/route/listers/route/v1/expansion_generated.go create mode 100644 vendor/github.com/openshift/client-go/route/listers/route/v1/route.go create mode 100644 vendor/github.com/openshift/client-go/security/clientset/versioned/clientset.go create mode 100644 vendor/github.com/openshift/client-go/security/clientset/versioned/doc.go create mode 100644 vendor/github.com/openshift/client-go/security/clientset/versioned/scheme/doc.go create mode 100644 vendor/github.com/openshift/client-go/security/clientset/versioned/scheme/register.go create mode 100644 vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/doc.go create mode 100644 vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/generated_expansion.go create mode 100644 vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/podsecuritypolicyreview.go create mode 100644 vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/podsecuritypolicyselfsubjectreview.go create mode 100644 vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/podsecuritypolicysubjectreview.go create mode 100644 vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/rangeallocation.go create mode 100644 vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/security_client.go create mode 100644 vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/securitycontextconstraints.go create mode 100644 vendor/github.com/openshift/client-go/security/informers/externalversions/factory.go create mode 100644 vendor/github.com/openshift/client-go/security/informers/externalversions/generic.go create mode 100644 vendor/github.com/openshift/client-go/security/informers/externalversions/internalinterfaces/factory_interfaces.go create mode 100644 vendor/github.com/openshift/client-go/security/informers/externalversions/security/interface.go create mode 100644 vendor/github.com/openshift/client-go/security/informers/externalversions/security/v1/interface.go create mode 100644 vendor/github.com/openshift/client-go/security/informers/externalversions/security/v1/rangeallocation.go create mode 100644 vendor/github.com/openshift/client-go/security/informers/externalversions/security/v1/securitycontextconstraints.go create mode 100644 vendor/github.com/openshift/client-go/security/listers/security/v1/expansion_generated.go create mode 100644 vendor/github.com/openshift/client-go/security/listers/security/v1/rangeallocation.go create mode 100644 vendor/github.com/openshift/client-go/security/listers/security/v1/securitycontextconstraints.go create mode 100644 vendor/github.com/openshift/client-go/template/clientset/versioned/clientset.go create mode 100644 vendor/github.com/openshift/client-go/template/clientset/versioned/doc.go create mode 100644 vendor/github.com/openshift/client-go/template/clientset/versioned/scheme/doc.go create mode 100644 vendor/github.com/openshift/client-go/template/clientset/versioned/scheme/register.go create mode 100644 vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/brokertemplateinstance.go create mode 100644 vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/doc.go create mode 100644 vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/generated_expansion.go create mode 100644 vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/template.go create mode 100644 vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/template_client.go create mode 100644 vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/templateinstance.go create mode 100644 vendor/github.com/openshift/client-go/template/informers/externalversions/factory.go create mode 100644 vendor/github.com/openshift/client-go/template/informers/externalversions/generic.go create mode 100644 vendor/github.com/openshift/client-go/template/informers/externalversions/internalinterfaces/factory_interfaces.go create mode 100644 vendor/github.com/openshift/client-go/template/informers/externalversions/template/interface.go create mode 100644 vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/brokertemplateinstance.go create mode 100644 vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/interface.go create mode 100644 vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/template.go create mode 100644 vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/templateinstance.go create mode 100644 vendor/github.com/openshift/client-go/template/listers/template/v1/brokertemplateinstance.go create mode 100644 vendor/github.com/openshift/client-go/template/listers/template/v1/expansion_generated.go create mode 100644 vendor/github.com/openshift/client-go/template/listers/template/v1/template.go create mode 100644 vendor/github.com/openshift/client-go/template/listers/template/v1/template_expansion.go create mode 100644 vendor/github.com/openshift/client-go/template/listers/template/v1/templateinstance.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/clientset.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/doc.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/fake/clientset_generated.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/fake/doc.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/fake/register.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/scheme/doc.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/scheme/register.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/doc.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/doc.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_group.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_identity.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_user.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_user_client.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_useridentitymapping.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/generated_expansion.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/group.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/identity.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/user.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/user_client.go create mode 100644 vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/useridentitymapping.go create mode 100644 vendor/github.com/openshift/client-go/user/informers/externalversions/factory.go create mode 100644 vendor/github.com/openshift/client-go/user/informers/externalversions/generic.go create mode 100644 vendor/github.com/openshift/client-go/user/informers/externalversions/internalinterfaces/factory_interfaces.go create mode 100644 vendor/github.com/openshift/client-go/user/informers/externalversions/user/interface.go create mode 100644 vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/group.go create mode 100644 vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/identity.go create mode 100644 vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/interface.go create mode 100644 vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/user.go create mode 100644 vendor/github.com/openshift/client-go/user/listers/user/v1/expansion_generated.go create mode 100644 vendor/github.com/openshift/client-go/user/listers/user/v1/group.go create mode 100644 vendor/github.com/openshift/client-go/user/listers/user/v1/identity.go create mode 100644 vendor/github.com/openshift/client-go/user/listers/user/v1/user.go create mode 100644 vendor/github.com/openshift/library-go/LICENSE create mode 100644 vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissionregistrationtesting/admissiontesting.go create mode 100644 vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig/intiializers.go create mode 100644 vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissiontimeout/decorator.go create mode 100644 vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissiontimeout/timeoutadmission.go create mode 100644 vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/cachecontrol.go create mode 100644 vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/longrunning.go create mode 100644 vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/personal_subjectaccessreview.go create mode 100644 vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/project_request_info_resolver.go create mode 100644 vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/requestinforesolver.go create mode 100644 vendor/github.com/openshift/library-go/pkg/apiserver/httprequest/httprequest.go create mode 100644 vendor/github.com/openshift/library-go/pkg/authentication/bootstrapauthenticator/bootstrap.go create mode 100644 vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/clusterrole_describers.go create mode 100644 vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/describers.go create mode 100644 vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/user_describers.go create mode 100644 vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/validation.go create mode 100644 vendor/github.com/openshift/library-go/pkg/config/client/client_config.go create mode 100644 vendor/github.com/openshift/library-go/pkg/config/configdefaults/config_default.go create mode 100644 vendor/github.com/openshift/library-go/pkg/config/helpers/client.go create mode 100644 vendor/github.com/openshift/library-go/pkg/config/helpers/config_refs.go create mode 100644 vendor/github.com/openshift/library-go/pkg/config/helpers/general.go create mode 100644 vendor/github.com/openshift/library-go/pkg/config/helpers/readresource.go create mode 100644 vendor/github.com/openshift/library-go/pkg/config/validation/general.go create mode 100644 vendor/github.com/openshift/library-go/pkg/config/validation/serving_info.go create mode 100644 vendor/github.com/openshift/library-go/pkg/crypto/crypto.go create mode 100644 vendor/github.com/openshift/library-go/pkg/crypto/rotation.go create mode 100644 vendor/github.com/openshift/library-go/pkg/image/imageutil/helpers.go create mode 100644 vendor/github.com/openshift/library-go/pkg/image/internal/digest/digest.go create mode 100644 vendor/github.com/openshift/library-go/pkg/image/internal/digest/digester.go create mode 100644 vendor/github.com/openshift/library-go/pkg/image/internal/digest/doc.go create mode 100644 vendor/github.com/openshift/library-go/pkg/image/internal/reference/doc.go create mode 100644 vendor/github.com/openshift/library-go/pkg/image/internal/reference/reference.go create mode 100644 vendor/github.com/openshift/library-go/pkg/image/internal/reference/regexp.go create mode 100644 vendor/github.com/openshift/library-go/pkg/image/reference/reference.go create mode 100644 vendor/github.com/openshift/library-go/pkg/oauth/oauthdiscovery/discovery.go create mode 100644 vendor/github.com/openshift/library-go/pkg/oauth/oauthdiscovery/urls.go create mode 100644 vendor/github.com/openshift/library-go/pkg/quota/clusterquotamapping/clusterquotamapping.go create mode 100644 vendor/github.com/openshift/library-go/pkg/quota/clusterquotamapping/helpers.go create mode 100644 vendor/github.com/openshift/library-go/pkg/quota/clusterquotamapping/mapper.go create mode 100644 vendor/github.com/openshift/library-go/pkg/quota/quotautil/error.go create mode 100644 vendor/github.com/openshift/library-go/pkg/quota/quotautil/helpers.go create mode 100644 vendor/github.com/openshift/library-go/pkg/security/ldaputil/attribute.go create mode 100644 vendor/github.com/openshift/library-go/pkg/security/ldaputil/url.go create mode 100644 vendor/github.com/openshift/library-go/pkg/security/uid/uid.go delete mode 100644 vendor/github.com/pelletier/go-toml/BUILD delete mode 100644 vendor/github.com/peterbourgon/diskv/BUILD delete mode 100644 vendor/github.com/pkg/errors/BUILD delete mode 100644 vendor/github.com/pmezard/go-difflib/difflib/BUILD delete mode 100644 vendor/github.com/pquerna/cachecontrol/BUILD delete mode 100644 vendor/github.com/pquerna/cachecontrol/cacheobject/BUILD delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/BUILD delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/internal/BUILD delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/promhttp/BUILD delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/testutil/BUILD delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/BUILD delete mode 100644 vendor/github.com/prometheus/client_model/go/BUILD delete mode 100644 vendor/github.com/prometheus/common/expfmt/BUILD delete mode 100644 vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/BUILD delete mode 100644 vendor/github.com/prometheus/common/model/BUILD delete mode 100644 vendor/github.com/prometheus/procfs/BUILD delete mode 100644 vendor/github.com/prometheus/procfs/internal/fs/BUILD delete mode 100644 vendor/github.com/prometheus/procfs/internal/util/BUILD delete mode 100644 vendor/github.com/quobyte/api/BUILD delete mode 100644 vendor/github.com/robfig/cron/BUILD delete mode 100644 vendor/github.com/rubiojr/go-vhd/vhd/BUILD delete mode 100644 vendor/github.com/russross/blackfriday/BUILD delete mode 100644 vendor/github.com/russross/blackfriday/v2/BUILD delete mode 100644 vendor/github.com/satori/go.uuid/BUILD delete mode 100644 vendor/github.com/seccomp/libseccomp-golang/BUILD delete mode 100644 vendor/github.com/shurcooL/sanitized_anchor_name/BUILD delete mode 100644 vendor/github.com/sirupsen/logrus/BUILD delete mode 100644 vendor/github.com/soheilhy/cmux/BUILD delete mode 100644 vendor/github.com/spf13/afero/BUILD delete mode 100644 vendor/github.com/spf13/afero/mem/BUILD delete mode 100644 vendor/github.com/spf13/cast/BUILD delete mode 100644 vendor/github.com/spf13/cobra/BUILD delete mode 100644 vendor/github.com/spf13/cobra/doc/BUILD delete mode 100644 vendor/github.com/spf13/jwalterweatherman/BUILD delete mode 100644 vendor/github.com/spf13/pflag/BUILD delete mode 100644 vendor/github.com/spf13/viper/BUILD delete mode 100644 vendor/github.com/storageos/go-api/BUILD delete mode 100644 vendor/github.com/storageos/go-api/netutil/BUILD delete mode 100644 vendor/github.com/storageos/go-api/serror/BUILD delete mode 100644 vendor/github.com/storageos/go-api/types/BUILD delete mode 100644 vendor/github.com/stretchr/objx/BUILD delete mode 100644 vendor/github.com/stretchr/testify/assert/BUILD delete mode 100644 vendor/github.com/stretchr/testify/mock/BUILD delete mode 100644 vendor/github.com/stretchr/testify/require/BUILD delete mode 100644 vendor/github.com/syndtr/gocapability/capability/BUILD delete mode 100644 vendor/github.com/thecodeteam/goscaleio/BUILD delete mode 100644 vendor/github.com/thecodeteam/goscaleio/types/v1/BUILD delete mode 100644 vendor/github.com/tmc/grpc-websocket-proxy/wsproxy/BUILD delete mode 100644 vendor/github.com/vishvananda/netlink/BUILD delete mode 100644 vendor/github.com/vishvananda/netlink/nl/BUILD delete mode 100644 vendor/github.com/vishvananda/netns/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/find/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/list/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/lookup/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/lookup/methods/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/lookup/simulator/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/lookup/types/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/nfc/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/object/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/pbm/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/pbm/methods/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/pbm/types/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/property/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/session/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/simulator/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/simulator/esx/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/simulator/vpx/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/sts/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/sts/internal/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/sts/simulator/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/task/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/vapi/internal/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/vapi/rest/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/vapi/simulator/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/vapi/tags/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/vim25/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/vim25/debug/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/vim25/methods/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/vim25/mo/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/vim25/progress/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/vim25/soap/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/vim25/types/BUILD delete mode 100644 vendor/github.com/vmware/govmomi/vim25/xml/BUILD delete mode 100644 vendor/github.com/xiang90/probing/BUILD delete mode 100644 vendor/go.etcd.io/bbolt/BUILD delete mode 100644 vendor/go.etcd.io/etcd/auth/BUILD delete mode 100644 vendor/go.etcd.io/etcd/auth/authpb/BUILD delete mode 100644 vendor/go.etcd.io/etcd/client/BUILD delete mode 100644 vendor/go.etcd.io/etcd/clientv3/BUILD delete mode 100644 vendor/go.etcd.io/etcd/clientv3/balancer/BUILD delete mode 100644 vendor/go.etcd.io/etcd/clientv3/balancer/connectivity/BUILD delete mode 100644 vendor/go.etcd.io/etcd/clientv3/balancer/picker/BUILD delete mode 100644 vendor/go.etcd.io/etcd/clientv3/balancer/resolver/endpoint/BUILD delete mode 100644 vendor/go.etcd.io/etcd/clientv3/concurrency/BUILD delete mode 100644 vendor/go.etcd.io/etcd/clientv3/credentials/BUILD delete mode 100644 vendor/go.etcd.io/etcd/clientv3/namespace/BUILD delete mode 100644 vendor/go.etcd.io/etcd/clientv3/naming/BUILD delete mode 100644 vendor/go.etcd.io/etcd/embed/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/etcdhttp/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/membership/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/rafthttp/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/snap/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/snap/snappb/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v2auth/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v2discovery/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v2error/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v2http/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v2http/httptypes/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v2stats/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v2store/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v2v3/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v3alarm/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v3client/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v3compactor/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v3election/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb/gw/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v3lock/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb/gw/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/etcdserverpb/BUILD delete mode 100644 vendor/go.etcd.io/etcd/etcdserver/etcdserverpb/gw/BUILD delete mode 100644 vendor/go.etcd.io/etcd/integration/BUILD delete mode 100644 vendor/go.etcd.io/etcd/lease/BUILD delete mode 100644 vendor/go.etcd.io/etcd/lease/leasehttp/BUILD delete mode 100644 vendor/go.etcd.io/etcd/lease/leasepb/BUILD delete mode 100644 vendor/go.etcd.io/etcd/mvcc/BUILD delete mode 100644 vendor/go.etcd.io/etcd/mvcc/backend/BUILD delete mode 100644 vendor/go.etcd.io/etcd/mvcc/mvccpb/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/adt/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/contention/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/cpuutil/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/crc/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/debugutil/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/fileutil/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/flags/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/httputil/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/idutil/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/ioutil/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/logutil/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/netutil/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/pathutil/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/pbutil/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/runtime/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/schedule/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/srv/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/systemd/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/testutil/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/tlsutil/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/traceutil/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/transport/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/types/BUILD delete mode 100644 vendor/go.etcd.io/etcd/pkg/wait/BUILD delete mode 100644 vendor/go.etcd.io/etcd/proxy/grpcproxy/BUILD delete mode 100644 vendor/go.etcd.io/etcd/proxy/grpcproxy/adapter/BUILD delete mode 100644 vendor/go.etcd.io/etcd/proxy/grpcproxy/cache/BUILD delete mode 100644 vendor/go.etcd.io/etcd/raft/BUILD delete mode 100644 vendor/go.etcd.io/etcd/raft/confchange/BUILD delete mode 100644 vendor/go.etcd.io/etcd/raft/quorum/BUILD delete mode 100644 vendor/go.etcd.io/etcd/raft/raftpb/BUILD delete mode 100644 vendor/go.etcd.io/etcd/raft/tracker/BUILD delete mode 100644 vendor/go.etcd.io/etcd/version/BUILD delete mode 100644 vendor/go.etcd.io/etcd/wal/BUILD delete mode 100644 vendor/go.etcd.io/etcd/wal/walpb/BUILD delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/BUILD delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/BUILD delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsonrw/BUILD delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsontype/BUILD delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/primitive/BUILD delete mode 100644 vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore/BUILD delete mode 100644 vendor/go.opencensus.io/BUILD delete mode 100644 vendor/go.opencensus.io/internal/BUILD delete mode 100644 vendor/go.opencensus.io/internal/tagencoding/BUILD delete mode 100644 vendor/go.opencensus.io/metric/metricdata/BUILD delete mode 100644 vendor/go.opencensus.io/metric/metricproducer/BUILD delete mode 100644 vendor/go.opencensus.io/plugin/ochttp/BUILD delete mode 100644 vendor/go.opencensus.io/plugin/ochttp/propagation/b3/BUILD delete mode 100644 vendor/go.opencensus.io/resource/BUILD delete mode 100644 vendor/go.opencensus.io/stats/BUILD delete mode 100644 vendor/go.opencensus.io/stats/internal/BUILD delete mode 100644 vendor/go.opencensus.io/stats/view/BUILD delete mode 100644 vendor/go.opencensus.io/tag/BUILD delete mode 100644 vendor/go.opencensus.io/trace/BUILD delete mode 100644 vendor/go.opencensus.io/trace/internal/BUILD delete mode 100644 vendor/go.opencensus.io/trace/propagation/BUILD delete mode 100644 vendor/go.opencensus.io/trace/tracestate/BUILD delete mode 100644 vendor/go.uber.org/atomic/BUILD delete mode 100644 vendor/go.uber.org/multierr/BUILD delete mode 100644 vendor/go.uber.org/zap/BUILD delete mode 100644 vendor/go.uber.org/zap/buffer/BUILD delete mode 100644 vendor/go.uber.org/zap/internal/bufferpool/BUILD delete mode 100644 vendor/go.uber.org/zap/internal/color/BUILD delete mode 100644 vendor/go.uber.org/zap/internal/exit/BUILD delete mode 100644 vendor/go.uber.org/zap/zapcore/BUILD delete mode 100644 vendor/golang.org/x/crypto/bcrypt/BUILD delete mode 100644 vendor/golang.org/x/crypto/blowfish/BUILD delete mode 100644 vendor/golang.org/x/crypto/chacha20/BUILD delete mode 100644 vendor/golang.org/x/crypto/cryptobyte/BUILD delete mode 100644 vendor/golang.org/x/crypto/cryptobyte/asn1/BUILD delete mode 100644 vendor/golang.org/x/crypto/curve25519/BUILD delete mode 100644 vendor/golang.org/x/crypto/ed25519/BUILD delete mode 100644 vendor/golang.org/x/crypto/ed25519/internal/edwards25519/BUILD delete mode 100644 vendor/golang.org/x/crypto/internal/subtle/BUILD delete mode 100644 vendor/golang.org/x/crypto/nacl/secretbox/BUILD delete mode 100644 vendor/golang.org/x/crypto/pbkdf2/BUILD delete mode 100644 vendor/golang.org/x/crypto/pkcs12/BUILD delete mode 100644 vendor/golang.org/x/crypto/pkcs12/internal/rc2/BUILD delete mode 100644 vendor/golang.org/x/crypto/poly1305/BUILD delete mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/BUILD delete mode 100644 vendor/golang.org/x/crypto/ssh/BUILD delete mode 100644 vendor/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf/BUILD delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/BUILD delete mode 100644 vendor/golang.org/x/mod/module/BUILD delete mode 100644 vendor/golang.org/x/mod/semver/BUILD delete mode 100644 vendor/golang.org/x/net/bpf/BUILD delete mode 100644 vendor/golang.org/x/net/context/BUILD delete mode 100644 vendor/golang.org/x/net/context/ctxhttp/BUILD delete mode 100644 vendor/golang.org/x/net/html/BUILD delete mode 100644 vendor/golang.org/x/net/html/atom/BUILD delete mode 100644 vendor/golang.org/x/net/html/charset/BUILD delete mode 100644 vendor/golang.org/x/net/http/httpguts/BUILD delete mode 100644 vendor/golang.org/x/net/http2/BUILD delete mode 100644 vendor/golang.org/x/net/http2/hpack/BUILD delete mode 100644 vendor/golang.org/x/net/idna/BUILD delete mode 100644 vendor/golang.org/x/net/internal/iana/BUILD delete mode 100644 vendor/golang.org/x/net/internal/socket/BUILD delete mode 100644 vendor/golang.org/x/net/internal/socks/BUILD delete mode 100644 vendor/golang.org/x/net/internal/timeseries/BUILD delete mode 100644 vendor/golang.org/x/net/ipv4/BUILD delete mode 100644 vendor/golang.org/x/net/ipv6/BUILD delete mode 100644 vendor/golang.org/x/net/proxy/BUILD delete mode 100644 vendor/golang.org/x/net/trace/BUILD delete mode 100644 vendor/golang.org/x/net/websocket/BUILD delete mode 100644 vendor/golang.org/x/oauth2/BUILD delete mode 100644 vendor/golang.org/x/oauth2/google/BUILD delete mode 100644 vendor/golang.org/x/oauth2/internal/BUILD delete mode 100644 vendor/golang.org/x/oauth2/jws/BUILD delete mode 100644 vendor/golang.org/x/oauth2/jwt/BUILD delete mode 100644 vendor/golang.org/x/sync/singleflight/BUILD delete mode 100644 vendor/golang.org/x/sys/cpu/BUILD delete mode 100644 vendor/golang.org/x/sys/internal/unsafeheader/BUILD delete mode 100644 vendor/golang.org/x/sys/unix/BUILD delete mode 100644 vendor/golang.org/x/sys/windows/BUILD delete mode 100644 vendor/golang.org/x/sys/windows/registry/BUILD delete mode 100644 vendor/golang.org/x/sys/windows/svc/BUILD delete mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/BUILD delete mode 100644 vendor/golang.org/x/text/encoding/BUILD delete mode 100644 vendor/golang.org/x/text/encoding/charmap/BUILD delete mode 100644 vendor/golang.org/x/text/encoding/htmlindex/BUILD delete mode 100644 vendor/golang.org/x/text/encoding/internal/BUILD delete mode 100644 vendor/golang.org/x/text/encoding/internal/identifier/BUILD delete mode 100644 vendor/golang.org/x/text/encoding/japanese/BUILD delete mode 100644 vendor/golang.org/x/text/encoding/korean/BUILD delete mode 100644 vendor/golang.org/x/text/encoding/simplifiedchinese/BUILD delete mode 100644 vendor/golang.org/x/text/encoding/traditionalchinese/BUILD delete mode 100644 vendor/golang.org/x/text/encoding/unicode/BUILD delete mode 100644 vendor/golang.org/x/text/internal/language/BUILD delete mode 100644 vendor/golang.org/x/text/internal/language/compact/BUILD delete mode 100644 vendor/golang.org/x/text/internal/tag/BUILD delete mode 100644 vendor/golang.org/x/text/internal/utf8internal/BUILD delete mode 100644 vendor/golang.org/x/text/language/BUILD delete mode 100644 vendor/golang.org/x/text/runes/BUILD delete mode 100644 vendor/golang.org/x/text/secure/bidirule/BUILD delete mode 100644 vendor/golang.org/x/text/transform/BUILD delete mode 100644 vendor/golang.org/x/text/unicode/bidi/BUILD delete mode 100644 vendor/golang.org/x/text/unicode/norm/BUILD delete mode 100644 vendor/golang.org/x/text/width/BUILD delete mode 100644 vendor/golang.org/x/time/rate/BUILD delete mode 100644 vendor/golang.org/x/tools/benchmark/parse/BUILD delete mode 100644 vendor/golang.org/x/tools/container/intsets/BUILD delete mode 100644 vendor/golang.org/x/tools/go/ast/astutil/BUILD delete mode 100644 vendor/golang.org/x/tools/go/gcexportdata/BUILD delete mode 100644 vendor/golang.org/x/tools/go/internal/gcimporter/BUILD delete mode 100644 vendor/golang.org/x/tools/go/internal/packagesdriver/BUILD delete mode 100644 vendor/golang.org/x/tools/go/packages/BUILD delete mode 100644 vendor/golang.org/x/tools/imports/BUILD delete mode 100644 vendor/golang.org/x/tools/internal/event/BUILD delete mode 100644 vendor/golang.org/x/tools/internal/event/core/BUILD delete mode 100644 vendor/golang.org/x/tools/internal/event/keys/BUILD delete mode 100644 vendor/golang.org/x/tools/internal/event/label/BUILD delete mode 100644 vendor/golang.org/x/tools/internal/fastwalk/BUILD delete mode 100644 vendor/golang.org/x/tools/internal/gocommand/BUILD delete mode 100644 vendor/golang.org/x/tools/internal/gopathwalk/BUILD delete mode 100644 vendor/golang.org/x/tools/internal/imports/BUILD delete mode 100644 vendor/golang.org/x/tools/internal/packagesinternal/BUILD delete mode 100644 vendor/golang.org/x/tools/internal/typesinternal/BUILD delete mode 100644 vendor/golang.org/x/xerrors/BUILD delete mode 100644 vendor/golang.org/x/xerrors/internal/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/blas/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/blas/blas64/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/blas/cblas128/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/blas/gonum/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/floats/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/encoding/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/encoding/dot/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/formats/dot/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/formats/dot/ast/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/formats/dot/internal/astx/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/formats/dot/internal/errors/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/formats/dot/internal/lexer/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/formats/dot/internal/parser/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/formats/dot/internal/token/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/internal/ordered/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/internal/set/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/internal/uid/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/iterator/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/graph/simple/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/internal/asm/c128/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/internal/asm/c64/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/internal/asm/f32/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/internal/asm/f64/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/internal/cmplx64/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/internal/math32/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/lapack/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/lapack/gonum/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/lapack/lapack64/BUILD delete mode 100644 vendor/gonum.org/v1/gonum/mat/BUILD delete mode 100644 vendor/google.golang.org/api/compute/v0.alpha/BUILD delete mode 100644 vendor/google.golang.org/api/compute/v0.beta/BUILD delete mode 100644 vendor/google.golang.org/api/compute/v1/BUILD delete mode 100644 vendor/google.golang.org/api/container/v1/BUILD delete mode 100644 vendor/google.golang.org/api/googleapi/BUILD delete mode 100644 vendor/google.golang.org/api/googleapi/transport/BUILD delete mode 100644 vendor/google.golang.org/api/internal/BUILD delete mode 100644 vendor/google.golang.org/api/internal/gensupport/BUILD delete mode 100644 vendor/google.golang.org/api/internal/third_party/uritemplates/BUILD delete mode 100644 vendor/google.golang.org/api/logging/v2beta1/BUILD delete mode 100644 vendor/google.golang.org/api/monitoring/v3/BUILD delete mode 100644 vendor/google.golang.org/api/option/BUILD delete mode 100644 vendor/google.golang.org/api/pubsub/v1/BUILD delete mode 100644 vendor/google.golang.org/api/tpu/v1/BUILD delete mode 100644 vendor/google.golang.org/api/transport/http/BUILD delete mode 100644 vendor/google.golang.org/api/transport/http/internal/propagation/BUILD delete mode 100644 vendor/google.golang.org/appengine/BUILD delete mode 100644 vendor/google.golang.org/appengine/internal/BUILD delete mode 100644 vendor/google.golang.org/appengine/internal/app_identity/BUILD delete mode 100644 vendor/google.golang.org/appengine/internal/base/BUILD delete mode 100644 vendor/google.golang.org/appengine/internal/datastore/BUILD delete mode 100644 vendor/google.golang.org/appengine/internal/log/BUILD delete mode 100644 vendor/google.golang.org/appengine/internal/modules/BUILD delete mode 100644 vendor/google.golang.org/appengine/internal/remote_api/BUILD delete mode 100644 vendor/google.golang.org/appengine/internal/urlfetch/BUILD delete mode 100644 vendor/google.golang.org/appengine/urlfetch/BUILD delete mode 100644 vendor/google.golang.org/genproto/googleapis/api/httpbody/BUILD delete mode 100644 vendor/google.golang.org/genproto/googleapis/rpc/status/BUILD delete mode 100644 vendor/google.golang.org/genproto/protobuf/field_mask/BUILD delete mode 100644 vendor/google.golang.org/grpc/BUILD delete mode 100644 vendor/google.golang.org/grpc/attributes/BUILD delete mode 100644 vendor/google.golang.org/grpc/backoff/BUILD delete mode 100644 vendor/google.golang.org/grpc/balancer/BUILD delete mode 100644 vendor/google.golang.org/grpc/balancer/base/BUILD delete mode 100644 vendor/google.golang.org/grpc/balancer/roundrobin/BUILD delete mode 100644 vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/BUILD delete mode 100644 vendor/google.golang.org/grpc/codes/BUILD delete mode 100644 vendor/google.golang.org/grpc/connectivity/BUILD delete mode 100644 vendor/google.golang.org/grpc/credentials/BUILD delete mode 100644 vendor/google.golang.org/grpc/credentials/internal/BUILD delete mode 100644 vendor/google.golang.org/grpc/encoding/BUILD delete mode 100644 vendor/google.golang.org/grpc/encoding/proto/BUILD delete mode 100644 vendor/google.golang.org/grpc/grpclog/BUILD delete mode 100644 vendor/google.golang.org/grpc/health/BUILD delete mode 100644 vendor/google.golang.org/grpc/health/grpc_health_v1/BUILD delete mode 100644 vendor/google.golang.org/grpc/internal/BUILD delete mode 100644 vendor/google.golang.org/grpc/internal/backoff/BUILD delete mode 100644 vendor/google.golang.org/grpc/internal/balancerload/BUILD delete mode 100644 vendor/google.golang.org/grpc/internal/binarylog/BUILD delete mode 100644 vendor/google.golang.org/grpc/internal/buffer/BUILD delete mode 100644 vendor/google.golang.org/grpc/internal/channelz/BUILD delete mode 100644 vendor/google.golang.org/grpc/internal/envconfig/BUILD delete mode 100644 vendor/google.golang.org/grpc/internal/grpcrand/BUILD delete mode 100644 vendor/google.golang.org/grpc/internal/grpcsync/BUILD delete mode 100644 vendor/google.golang.org/grpc/internal/resolver/dns/BUILD delete mode 100644 vendor/google.golang.org/grpc/internal/resolver/passthrough/BUILD delete mode 100644 vendor/google.golang.org/grpc/internal/syscall/BUILD delete mode 100644 vendor/google.golang.org/grpc/internal/transport/BUILD delete mode 100644 vendor/google.golang.org/grpc/keepalive/BUILD delete mode 100644 vendor/google.golang.org/grpc/metadata/BUILD delete mode 100644 vendor/google.golang.org/grpc/naming/BUILD delete mode 100644 vendor/google.golang.org/grpc/peer/BUILD delete mode 100644 vendor/google.golang.org/grpc/resolver/BUILD delete mode 100644 vendor/google.golang.org/grpc/resolver/dns/BUILD delete mode 100644 vendor/google.golang.org/grpc/resolver/passthrough/BUILD delete mode 100644 vendor/google.golang.org/grpc/serviceconfig/BUILD delete mode 100644 vendor/google.golang.org/grpc/stats/BUILD delete mode 100644 vendor/google.golang.org/grpc/status/BUILD delete mode 100644 vendor/google.golang.org/grpc/tap/BUILD delete mode 100644 vendor/google.golang.org/protobuf/encoding/protojson/BUILD delete mode 100644 vendor/google.golang.org/protobuf/encoding/prototext/BUILD delete mode 100644 vendor/google.golang.org/protobuf/encoding/protowire/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/descfmt/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/descopts/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/detectknown/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/detrand/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/encoding/defval/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/encoding/json/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/encoding/messageset/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/encoding/tag/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/encoding/text/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/errors/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldsort/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/filedesc/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/filetype/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/flags/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/genname/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/impl/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/mapsort/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/pragma/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/set/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/strs/BUILD delete mode 100644 vendor/google.golang.org/protobuf/internal/version/BUILD delete mode 100644 vendor/google.golang.org/protobuf/proto/BUILD delete mode 100644 vendor/google.golang.org/protobuf/reflect/protoreflect/BUILD delete mode 100644 vendor/google.golang.org/protobuf/reflect/protoregistry/BUILD delete mode 100644 vendor/google.golang.org/protobuf/runtime/protoiface/BUILD delete mode 100644 vendor/google.golang.org/protobuf/runtime/protoimpl/BUILD delete mode 100644 vendor/google.golang.org/protobuf/types/descriptorpb/BUILD delete mode 100644 vendor/google.golang.org/protobuf/types/known/anypb/BUILD delete mode 100644 vendor/google.golang.org/protobuf/types/known/durationpb/BUILD delete mode 100644 vendor/google.golang.org/protobuf/types/known/fieldmaskpb/BUILD delete mode 100644 vendor/google.golang.org/protobuf/types/known/timestamppb/BUILD delete mode 100644 vendor/google.golang.org/protobuf/types/known/wrapperspb/BUILD delete mode 100644 vendor/google.golang.org/protobuf/types/pluginpb/BUILD create mode 100644 vendor/gopkg.in/asn1-ber.v1/.travis.yml create mode 100644 vendor/gopkg.in/asn1-ber.v1/LICENSE create mode 100644 vendor/gopkg.in/asn1-ber.v1/README.md create mode 100644 vendor/gopkg.in/asn1-ber.v1/ber.go create mode 100644 vendor/gopkg.in/asn1-ber.v1/content_int.go create mode 100644 vendor/gopkg.in/asn1-ber.v1/header.go create mode 100644 vendor/gopkg.in/asn1-ber.v1/identifier.go create mode 100644 vendor/gopkg.in/asn1-ber.v1/length.go create mode 100644 vendor/gopkg.in/asn1-ber.v1/util.go delete mode 100644 vendor/gopkg.in/fsnotify.v1/BUILD delete mode 100644 vendor/gopkg.in/gcfg.v1/BUILD delete mode 100644 vendor/gopkg.in/gcfg.v1/scanner/BUILD delete mode 100644 vendor/gopkg.in/gcfg.v1/token/BUILD delete mode 100644 vendor/gopkg.in/gcfg.v1/types/BUILD delete mode 100644 vendor/gopkg.in/inf.v0/BUILD create mode 100644 vendor/gopkg.in/ldap.v2/.gitignore create mode 100644 vendor/gopkg.in/ldap.v2/.travis.yml create mode 100644 vendor/gopkg.in/ldap.v2/LICENSE create mode 100644 vendor/gopkg.in/ldap.v2/Makefile create mode 100644 vendor/gopkg.in/ldap.v2/README.md create mode 100644 vendor/gopkg.in/ldap.v2/add.go create mode 100644 vendor/gopkg.in/ldap.v2/atomic_value.go create mode 100644 vendor/gopkg.in/ldap.v2/atomic_value_go13.go create mode 100644 vendor/gopkg.in/ldap.v2/bind.go create mode 100644 vendor/gopkg.in/ldap.v2/client.go create mode 100644 vendor/gopkg.in/ldap.v2/compare.go create mode 100644 vendor/gopkg.in/ldap.v2/conn.go create mode 100644 vendor/gopkg.in/ldap.v2/control.go create mode 100644 vendor/gopkg.in/ldap.v2/debug.go create mode 100644 vendor/gopkg.in/ldap.v2/del.go create mode 100644 vendor/gopkg.in/ldap.v2/dn.go create mode 100644 vendor/gopkg.in/ldap.v2/doc.go create mode 100644 vendor/gopkg.in/ldap.v2/error.go create mode 100644 vendor/gopkg.in/ldap.v2/filter.go create mode 100644 vendor/gopkg.in/ldap.v2/ldap.go create mode 100644 vendor/gopkg.in/ldap.v2/modify.go create mode 100644 vendor/gopkg.in/ldap.v2/passwdmodify.go create mode 100644 vendor/gopkg.in/ldap.v2/search.go delete mode 100644 vendor/gopkg.in/natefinch/lumberjack.v2/BUILD delete mode 100644 vendor/gopkg.in/square/go-jose.v2/BUILD delete mode 100644 vendor/gopkg.in/square/go-jose.v2/cipher/BUILD delete mode 100644 vendor/gopkg.in/square/go-jose.v2/json/BUILD delete mode 100644 vendor/gopkg.in/square/go-jose.v2/jwt/BUILD delete mode 100644 vendor/gopkg.in/tomb.v1/BUILD delete mode 100644 vendor/gopkg.in/warnings.v0/BUILD delete mode 100644 vendor/gopkg.in/yaml.v2/BUILD delete mode 100644 vendor/k8s.io/gengo/args/BUILD delete mode 100644 vendor/k8s.io/gengo/examples/deepcopy-gen/generators/BUILD delete mode 100644 vendor/k8s.io/gengo/examples/defaulter-gen/generators/BUILD delete mode 100644 vendor/k8s.io/gengo/examples/import-boss/generators/BUILD delete mode 100644 vendor/k8s.io/gengo/examples/set-gen/generators/BUILD delete mode 100644 vendor/k8s.io/gengo/examples/set-gen/sets/BUILD delete mode 100644 vendor/k8s.io/gengo/generator/BUILD delete mode 100644 vendor/k8s.io/gengo/namer/BUILD delete mode 100644 vendor/k8s.io/gengo/parser/BUILD delete mode 100644 vendor/k8s.io/gengo/types/BUILD delete mode 100644 vendor/k8s.io/heapster/metrics/api/v1/types/BUILD delete mode 100644 vendor/k8s.io/klog/v2/BUILD delete mode 100644 vendor/k8s.io/kube-openapi/cmd/openapi-gen/BUILD delete mode 100644 vendor/k8s.io/kube-openapi/cmd/openapi-gen/args/BUILD delete mode 100644 vendor/k8s.io/kube-openapi/pkg/aggregator/BUILD delete mode 100644 vendor/k8s.io/kube-openapi/pkg/builder/BUILD delete mode 100644 vendor/k8s.io/kube-openapi/pkg/common/BUILD delete mode 100644 vendor/k8s.io/kube-openapi/pkg/generators/BUILD delete mode 100644 vendor/k8s.io/kube-openapi/pkg/generators/rules/BUILD delete mode 100644 vendor/k8s.io/kube-openapi/pkg/handler/BUILD delete mode 100644 vendor/k8s.io/kube-openapi/pkg/schemaconv/BUILD delete mode 100644 vendor/k8s.io/kube-openapi/pkg/util/BUILD delete mode 100644 vendor/k8s.io/kube-openapi/pkg/util/proto/BUILD delete mode 100644 vendor/k8s.io/kube-openapi/pkg/util/proto/testing/BUILD delete mode 100644 vendor/k8s.io/kube-openapi/pkg/util/proto/validation/BUILD delete mode 100644 vendor/k8s.io/kube-openapi/pkg/util/sets/BUILD delete mode 100644 vendor/k8s.io/system-validators/validators/BUILD delete mode 100644 vendor/k8s.io/utils/buffer/BUILD delete mode 100644 vendor/k8s.io/utils/clock/BUILD delete mode 100644 vendor/k8s.io/utils/exec/BUILD delete mode 100644 vendor/k8s.io/utils/exec/testing/BUILD delete mode 100644 vendor/k8s.io/utils/inotify/BUILD delete mode 100644 vendor/k8s.io/utils/integer/BUILD delete mode 100644 vendor/k8s.io/utils/io/BUILD delete mode 100644 vendor/k8s.io/utils/keymutex/BUILD delete mode 100644 vendor/k8s.io/utils/mount/BUILD delete mode 100644 vendor/k8s.io/utils/net/BUILD delete mode 100644 vendor/k8s.io/utils/nsenter/BUILD delete mode 100644 vendor/k8s.io/utils/path/BUILD delete mode 100644 vendor/k8s.io/utils/pointer/BUILD delete mode 100644 vendor/k8s.io/utils/strings/BUILD delete mode 100644 vendor/k8s.io/utils/trace/BUILD delete mode 100644 vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/BUILD delete mode 100644 vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/commands/build/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/constants/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/expansion/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/factory/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/fs/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/git/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/gvk/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/ifc/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/ifc/transformer/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/image/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/internal/error/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/loader/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/patch/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/patch/transformer/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/resid/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/resmap/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/resource/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/target/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/transformers/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/transformers/config/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/transformers/config/defaultconfig/BUILD delete mode 100644 vendor/sigs.k8s.io/kustomize/pkg/types/BUILD delete mode 100644 vendor/sigs.k8s.io/structured-merge-diff/v4/fieldpath/BUILD delete mode 100644 vendor/sigs.k8s.io/structured-merge-diff/v4/merge/BUILD delete mode 100644 vendor/sigs.k8s.io/structured-merge-diff/v4/schema/BUILD delete mode 100644 vendor/sigs.k8s.io/structured-merge-diff/v4/typed/BUILD delete mode 100644 vendor/sigs.k8s.io/structured-merge-diff/v4/value/BUILD delete mode 100644 vendor/sigs.k8s.io/yaml/BUILD delete mode 100644 vendor/vbom.ml/util/sortorder/BUILD diff --git a/go.mod b/go.mod index 9c19156545b56..60394b537760b 100644 --- a/go.mod +++ b/go.mod @@ -14,19 +14,17 @@ require ( github.com/Azure/go-autorest/autorest v0.9.6 github.com/Azure/go-autorest/autorest/adal v0.8.2 github.com/Azure/go-autorest/autorest/to v0.2.0 + github.com/Azure/go-autorest/autorest/validation v0.1.0 // indirect github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317 github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5 github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990 github.com/PuerkitoBio/purell v1.1.1 github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e - github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7 // indirect github.com/aws/aws-sdk-go v1.28.2 github.com/blang/semver v3.5.0+incompatible - github.com/boltdb/bolt v1.3.1 // indirect github.com/caddyserver/caddy v1.0.3 github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313 - github.com/codegangsta/negroni v1.0.0 // indirect github.com/container-storage-interface/spec v1.2.0 github.com/containernetworking/cni v0.8.0 github.com/coredns/corefile-migration v1.0.10 @@ -35,6 +33,7 @@ require ( github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f github.com/cpuguy83/go-md2man/v2 v2.0.0 github.com/davecgh/go-spew v1.1.1 + github.com/dnaeon/go-vcr v1.0.1 // indirect github.com/docker/distribution v2.7.1+incompatible github.com/docker/docker v1.4.2-0.20200309214505-aa6a9891b09c github.com/docker/go-connections v0.4.0 @@ -43,58 +42,56 @@ require ( github.com/emicklei/go-restful v2.9.5+incompatible github.com/evanphx/json-patch v4.9.0+incompatible github.com/fsnotify/fsnotify v1.4.9 - github.com/go-bindata/go-bindata v3.1.1+incompatible + github.com/go-bindata/go-bindata v3.1.2+incompatible github.com/go-openapi/analysis v0.19.5 github.com/go-openapi/loads v0.19.4 github.com/go-openapi/spec v0.19.3 github.com/go-openapi/strfmt v0.19.3 github.com/go-openapi/validate v0.19.5 - github.com/go-ozzo/ozzo-validation v3.5.0+incompatible // indirect github.com/gogo/protobuf v1.3.1 github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 github.com/golang/mock v1.3.1 + github.com/google/btree v1.0.0 github.com/google/cadvisor v0.37.0 github.com/google/go-cmp v0.4.0 github.com/google/gofuzz v1.1.0 github.com/google/uuid v1.1.1 github.com/googleapis/gnostic v0.4.1 - github.com/gorilla/context v1.1.1 // indirect github.com/hashicorp/golang-lru v0.5.1 github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible - github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6 // indirect github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5 github.com/json-iterator/go v1.1.10 github.com/libopenstorage/openstorage v1.0.0 github.com/lithammer/dedent v1.1.0 - github.com/lpabon/godbc v0.1.1 // indirect - github.com/magiconair/properties v1.8.1 // indirect github.com/miekg/dns v1.1.4 github.com/moby/ipvs v1.0.1 - github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb // indirect github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 github.com/mvdan/xurls v1.1.0 - github.com/onsi/ginkgo v1.11.0 + github.com/onsi/ginkgo v4.5.0-origin.1+incompatible github.com/onsi/gomega v1.7.0 github.com/opencontainers/go-digest v1.0.0-rc1 github.com/opencontainers/runc v1.0.0-rc91.0.20200707015106-819fcc687efb github.com/opencontainers/selinux v1.5.2 + github.com/openshift/api v0.0.0-20201019163320-c6a5ec25f267 + github.com/openshift/apiserver-library-go v0.0.0-20201020095023-fe92bc0abdc3 + github.com/openshift/client-go v0.0.0-20201020082437-7737f16e53fc + github.com/openshift/library-go v0.0.0-20201020083322-646ad9742a1e github.com/pkg/errors v0.9.1 github.com/pmezard/go-difflib v1.0.0 github.com/prometheus/client_golang v1.7.1 github.com/prometheus/client_model v0.2.0 github.com/prometheus/common v0.10.0 github.com/quobyte/api v0.1.2 - github.com/robfig/cron v1.1.0 + github.com/robfig/cron v1.2.0 + github.com/satori/go.uuid v1.2.0 // indirect github.com/spf13/afero v1.2.2 github.com/spf13/cobra v1.0.0 - github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.4.0 github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc github.com/stretchr/testify v1.4.0 github.com/thecodeteam/goscaleio v0.1.0 - github.com/urfave/negroni v1.0.0 // indirect github.com/vishvananda/netlink v1.1.0 github.com/vmware/govmomi v0.20.3 go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5 @@ -105,28 +102,29 @@ require ( golang.org/x/time v0.0.0-20191024005414-555d28b269f0 golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 gonum.org/v1/gonum v0.6.2 - gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e // indirect google.golang.org/api v0.15.1 google.golang.org/grpc v1.27.0 gopkg.in/gcfg.v1 v1.2.0 + gopkg.in/natefinch/lumberjack.v2 v2.0.0 gopkg.in/square/go-jose.v2 v2.2.2 - gopkg.in/yaml.v2 v2.2.8 - k8s.io/api v0.0.0 - k8s.io/apiextensions-apiserver v0.0.0 - k8s.io/apimachinery v0.0.0 - k8s.io/apiserver v0.0.0 + gopkg.in/warnings.v0 v0.1.1 // indirect + gopkg.in/yaml.v2 v2.3.0 + k8s.io/api v0.19.2 + k8s.io/apiextensions-apiserver v0.19.2 + k8s.io/apimachinery v0.19.2 + k8s.io/apiserver v0.19.2 k8s.io/cli-runtime v0.0.0 - k8s.io/client-go v0.0.0 + k8s.io/client-go v0.19.2 k8s.io/cloud-provider v0.0.0 k8s.io/cluster-bootstrap v0.0.0 - k8s.io/code-generator v0.0.0 - k8s.io/component-base v0.0.0 + k8s.io/code-generator v0.19.2 + k8s.io/component-base v0.19.2 k8s.io/cri-api v0.0.0 k8s.io/csi-translation-lib v0.0.0 k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 k8s.io/heapster v1.2.0-beta.1 - k8s.io/klog/v2 v2.2.0 - k8s.io/kube-aggregator v0.0.0 + k8s.io/klog/v2 v2.3.0 + k8s.io/kube-aggregator v0.19.2 k8s.io/kube-controller-manager v0.0.0 k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 k8s.io/kube-proxy v0.0.0 @@ -188,6 +186,7 @@ replace ( github.com/caddyserver/caddy => github.com/caddyserver/caddy v1.0.3 github.com/cenkalti/backoff => github.com/cenkalti/backoff v2.1.1+incompatible github.com/census-instrumentation/opencensus-proto => github.com/census-instrumentation/opencensus-proto v0.2.1 + github.com/certifi/gocertifi => github.com/certifi/gocertifi v0.0.0-20180905225744-ee1a9a0726d2 github.com/cespare/xxhash/v2 => github.com/cespare/xxhash/v2 v2.1.1 github.com/chai2010/gettext-go => github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 github.com/checkpoint-restore/go-criu/v4 => github.com/checkpoint-restore/go-criu/v4 v4.0.2 @@ -227,7 +226,10 @@ replace ( github.com/docker/distribution => github.com/docker/distribution v2.7.1+incompatible github.com/docker/docker => github.com/docker/docker v1.4.2-0.20200309214505-aa6a9891b09c github.com/docker/go-connections => github.com/docker/go-connections v0.4.0 + github.com/docker/go-metrics => github.com/docker/go-metrics v0.0.1 github.com/docker/go-units => github.com/docker/go-units v0.4.0 + github.com/docker/libnetwork => github.com/docker/libnetwork v0.0.0-20190731215715-7f13a5c99f4b + github.com/docker/libtrust => github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 github.com/docker/spdystream => github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 github.com/docopt/docopt-go => github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 github.com/dustin/go-humanize => github.com/dustin/go-humanize v1.0.0 @@ -243,6 +245,8 @@ replace ( github.com/flynn/go-shlex => github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 github.com/fogleman/gg => github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90 github.com/fsnotify/fsnotify => github.com/fsnotify/fsnotify v1.4.9 + github.com/fsouza/go-dockerclient => github.com/fsouza/go-dockerclient v0.0.0-20171004212419-da3951ba2e9e + github.com/getsentry/raven-go => github.com/getsentry/raven-go v0.0.0-20190513200303-c977f96e1095 github.com/ghodss/yaml => github.com/ghodss/yaml v1.0.0 github.com/go-acme/lego => github.com/go-acme/lego v2.5.0+incompatible github.com/go-bindata/go-bindata => github.com/go-bindata/go-bindata v3.1.1+incompatible @@ -263,6 +267,7 @@ replace ( github.com/go-openapi/validate => github.com/go-openapi/validate v0.19.5 github.com/go-ozzo/ozzo-validation => github.com/go-ozzo/ozzo-validation v3.5.0+incompatible github.com/go-stack/stack => github.com/go-stack/stack v1.8.0 + github.com/gobuffalo/flect => github.com/gobuffalo/flect v0.2.0 github.com/godbus/dbus/v5 => github.com/godbus/dbus/v5 v5.0.3 github.com/gogo/protobuf => github.com/gogo/protobuf v1.3.1 github.com/golang/freetype => github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 @@ -273,6 +278,12 @@ replace ( github.com/golangplus/bytes => github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450 github.com/golangplus/fmt => github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995 github.com/golangplus/testing => github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e + github.com/gonum/blas => github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac + github.com/gonum/floats => github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 + github.com/gonum/graph => github.com/gonum/graph v0.0.0-20170401004347-50b27dea7ebb + github.com/gonum/internal => github.com/gonum/internal v0.0.0-20181124074243-f884aa714029 + github.com/gonum/lapack => github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9 + github.com/gonum/matrix => github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9 github.com/google/btree => github.com/google/btree v1.0.0 github.com/google/cadvisor => github.com/google/cadvisor v0.37.0 github.com/google/go-cmp => github.com/google/go-cmp v0.4.0 @@ -357,16 +368,22 @@ replace ( github.com/naoina/go-stringutil => github.com/naoina/go-stringutil v0.1.0 github.com/naoina/toml => github.com/naoina/toml v0.1.1 github.com/olekukonko/tablewriter => github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5 - github.com/onsi/ginkgo => github.com/onsi/ginkgo v1.11.0 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible github.com/onsi/gomega => github.com/onsi/gomega v1.7.0 github.com/opencontainers/go-digest => github.com/opencontainers/go-digest v1.0.0-rc1 github.com/opencontainers/image-spec => github.com/opencontainers/image-spec v1.0.1 github.com/opencontainers/runc => github.com/opencontainers/runc v1.0.0-rc91.0.20200707015106-819fcc687efb github.com/opencontainers/runtime-spec => github.com/opencontainers/runtime-spec v1.0.3-0.20200520003142-237cc4f519e2 github.com/opencontainers/selinux => github.com/opencontainers/selinux v1.5.2 + github.com/openshift/api => github.com/openshift/api v0.0.0-20201019163320-c6a5ec25f267 + github.com/openshift/apiserver-library-go => github.com/openshift/apiserver-library-go v0.0.0-20201020095023-fe92bc0abdc3 + github.com/openshift/build-machinery-go => github.com/openshift/build-machinery-go v0.0.0-20200917070002-f171684f77ab + github.com/openshift/client-go => github.com/openshift/client-go v0.0.0-20201020082437-7737f16e53fc + github.com/openshift/library-go => github.com/openshift/library-go v0.0.0-20201020083322-646ad9742a1e github.com/pelletier/go-toml => github.com/pelletier/go-toml v1.2.0 github.com/peterbourgon/diskv => github.com/peterbourgon/diskv v2.0.1+incompatible github.com/pkg/errors => github.com/pkg/errors v0.9.1 + github.com/pkg/profile => github.com/pkg/profile v1.3.0 github.com/pmezard/go-difflib => github.com/pmezard/go-difflib v1.0.0 github.com/pquerna/cachecontrol => github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 github.com/prometheus/client_golang => github.com/prometheus/client_golang v1.7.1 @@ -443,12 +460,14 @@ replace ( google.golang.org/grpc => google.golang.org/grpc v1.27.0 google.golang.org/protobuf => google.golang.org/protobuf v1.24.0 gopkg.in/alecthomas/kingpin.v2 => gopkg.in/alecthomas/kingpin.v2 v2.2.6 + gopkg.in/asn1-ber.v1 => gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d gopkg.in/check.v1 => gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 gopkg.in/cheggaaa/pb.v1 => gopkg.in/cheggaaa/pb.v1 v1.0.25 gopkg.in/errgo.v2 => gopkg.in/errgo.v2 v2.1.0 gopkg.in/fsnotify.v1 => gopkg.in/fsnotify.v1 v1.4.7 gopkg.in/gcfg.v1 => gopkg.in/gcfg.v1 v1.2.0 gopkg.in/inf.v0 => gopkg.in/inf.v0 v0.9.1 + gopkg.in/ldap.v2 => gopkg.in/ldap.v2 v2.5.1 gopkg.in/mcuadros/go-syslog.v2 => gopkg.in/mcuadros/go-syslog.v2 v2.2.1 gopkg.in/natefinch/lumberjack.v2 => gopkg.in/natefinch/lumberjack.v2 v2.0.0 gopkg.in/resty.v1 => gopkg.in/resty.v1 v1.12.0 @@ -456,26 +475,28 @@ replace ( gopkg.in/tomb.v1 => gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 gopkg.in/warnings.v0 => gopkg.in/warnings.v0 v0.1.1 gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 + gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966 gotest.tools => gotest.tools v2.2.0+incompatible gotest.tools/v3 => gotest.tools/v3 v3.0.2 honnef.co/go/tools => honnef.co/go/tools v0.0.1-2019.2.3 - k8s.io/api => ./staging/src/k8s.io/api - k8s.io/apiextensions-apiserver => ./staging/src/k8s.io/apiextensions-apiserver - k8s.io/apimachinery => ./staging/src/k8s.io/apimachinery - k8s.io/apiserver => ./staging/src/k8s.io/apiserver + k8s.io/api => k8s.io/api v0.19.2 + k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.19.2 + k8s.io/apimachinery => k8s.io/apimachinery v0.19.2 + k8s.io/apiserver => k8s.io/apiserver v0.19.2 k8s.io/cli-runtime => ./staging/src/k8s.io/cli-runtime - k8s.io/client-go => ./staging/src/k8s.io/client-go + k8s.io/client-go => k8s.io/client-go v0.19.2 k8s.io/cloud-provider => ./staging/src/k8s.io/cloud-provider k8s.io/cluster-bootstrap => ./staging/src/k8s.io/cluster-bootstrap - k8s.io/code-generator => ./staging/src/k8s.io/code-generator - k8s.io/component-base => ./staging/src/k8s.io/component-base + k8s.io/code-generator => k8s.io/code-generator v0.19.2 + k8s.io/component-base => k8s.io/component-base v0.19.2 k8s.io/controller-manager => ./staging/src/k8s.io/controller-manager k8s.io/cri-api => ./staging/src/k8s.io/cri-api k8s.io/csi-translation-lib => ./staging/src/k8s.io/csi-translation-lib k8s.io/gengo => k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 k8s.io/heapster => k8s.io/heapster v1.2.0-beta.1 + k8s.io/klog => k8s.io/klog v1.0.0 k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 - k8s.io/kube-aggregator => ./staging/src/k8s.io/kube-aggregator + k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.19.2 k8s.io/kube-controller-manager => ./staging/src/k8s.io/kube-controller-manager k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 k8s.io/kube-proxy => ./staging/src/k8s.io/kube-proxy @@ -496,6 +517,8 @@ replace ( modernc.org/xc => modernc.org/xc v1.0.0 rsc.io/pdf => rsc.io/pdf v0.1.1 sigs.k8s.io/apiserver-network-proxy/konnectivity-client => sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9 + sigs.k8s.io/controller-tools => sigs.k8s.io/controller-tools v0.2.8 + sigs.k8s.io/kube-storage-version-migrator => sigs.k8s.io/kube-storage-version-migrator v0.0.3 sigs.k8s.io/kustomize => sigs.k8s.io/kustomize v2.0.3+incompatible sigs.k8s.io/structured-merge-diff/v4 => sigs.k8s.io/structured-merge-diff/v4 v4.0.1 sigs.k8s.io/yaml => sigs.k8s.io/yaml v1.2.0 diff --git a/go.sum b/go.sum index 1e1eed65a9c55..7b86fb07ec65c 100644 --- a/go.sum +++ b/go.sum @@ -72,6 +72,7 @@ github.com/caddyserver/caddy v1.0.3 h1:i9gRhBgvc5ifchwWtSe7pDpsdS9+Q0Rw9oYQmYUTw github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/certifi/gocertifi v0.0.0-20180905225744-ee1a9a0726d2/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 h1:7aWHqerlJ41y6FOsEUvknqgXnGmJyJSbjhAWq5pO4F8= @@ -141,8 +142,11 @@ github.com/docker/docker v1.4.2-0.20200309214505-aa6a9891b09c h1:zviRyz1SWO8+WVJ github.com/docker/docker v1.4.2-0.20200309214505-aa6a9891b09c/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libnetwork v0.0.0-20190731215715-7f13a5c99f4b/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= +github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= @@ -167,6 +171,8 @@ github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsouza/go-dockerclient v0.0.0-20171004212419-da3951ba2e9e/go.mod h1:KpcjM623fQYE9MZiTGzKhjfxXAV9wbyX2C1cyRHfhl0= +github.com/getsentry/raven-go v0.0.0-20190513200303-c977f96e1095/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= @@ -202,6 +208,7 @@ github.com/go-ozzo/ozzo-validation v3.5.0+incompatible h1:sUy/in/P6askYr16XJgTKq github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= @@ -221,6 +228,12 @@ github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995 h1:f5gsjBiF9tRRVomC github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e h1:KhcknUwkWHKZPbFy2P7jH5LKJ3La+0ZeknkkmrSgqb0= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= +github.com/gonum/graph v0.0.0-20170401004347-50b27dea7ebb/go.mod h1:ye018NnX1zrbOLqwBvs2HqyyTouQgnL8C+qzYk1snPY= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/cadvisor v0.37.0 h1:t3txV4zNZZGTuwuA/Onm3HToPhg16GjigAHZHEVIz+c= @@ -360,8 +373,6 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+ github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= @@ -374,12 +385,24 @@ github.com/opencontainers/runtime-spec v1.0.3-0.20200520003142-237cc4f519e2 h1:9 github.com/opencontainers/runtime-spec v1.0.3-0.20200520003142-237cc4f519e2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/selinux v1.5.2 h1:F6DgIsjgBIcDksLW4D5RG9bXok6oqZ3nvMwj4ZoFu/Q= github.com/opencontainers/selinux v1.5.2/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= +github.com/openshift/api v0.0.0-20201019163320-c6a5ec25f267 h1:d6qOoblJz8DjQ44PRT0hYt3qLqJ/Lnvipk1vXr0gpfo= +github.com/openshift/api v0.0.0-20201019163320-c6a5ec25f267/go.mod h1:RDvBcRQMGLa3aNuDuejVBbTEQj/2i14NXdpOLqbNBvM= +github.com/openshift/apiserver-library-go v0.0.0-20201020095023-fe92bc0abdc3 h1:sBWK03i5njX8E2wWhDCp1dRjV6D2UXdhe5n6fkPycNM= +github.com/openshift/apiserver-library-go v0.0.0-20201020095023-fe92bc0abdc3/go.mod h1:fGp6VNAiZ3Uzcyxgj5CahXv/+BrxyaAhXXRWWffgxwc= +github.com/openshift/build-machinery-go v0.0.0-20200917070002-f171684f77ab/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= +github.com/openshift/client-go v0.0.0-20201020082437-7737f16e53fc h1:aeVqf+NL5rNq1uM2jvIfSQiWodd5OJ5o90ayju+vdeM= +github.com/openshift/client-go v0.0.0-20201020082437-7737f16e53fc/go.mod h1:yZ3u8vgWC19I9gbDMRk8//9JwG/0Sth6v7C+m6R8HXs= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= +github.com/openshift/library-go v0.0.0-20201020083322-646ad9742a1e h1:P7eL0Cbdj09wiGUhDjVW482jF8Diz0f9KR6RVAd66SI= +github.com/openshift/library-go v0.0.0-20201020083322-646ad9742a1e/go.mod h1:qbwvTwCy4btqEcqU3oI59CopNgcRgZUPXG4Y2jc+B4E= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= 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/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.3.0/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 h1:0XM1XL/OFFJjXsYXlG30spTkV/E9+gmd5GD1w2HE8xM= @@ -518,6 +541,8 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d h1:TxyelI5cVkbREznMhfzycHdkp5cLA7DpE+GKjSslYhM= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= @@ -528,6 +553,8 @@ gopkg.in/gcfg.v1 v1.2.0 h1:0HIbH907iBTAntm+88IJV2qmJALDAh8sPekI9Vc1fm0= gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ldap.v2 v2.5.1 h1:wiu0okdNfjlBzg6UWvd1Hn8Y+Ux17/u/4nlk4CQr6tU= +gopkg.in/ldap.v2 v2.5.1/go.mod h1:oI0cpe/D7HRtBQl8aTg+ZmzFUAvu4lsv3eLXMLGFxWk= gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= @@ -540,19 +567,39 @@ gopkg.in/warnings.v0 v0.1.1 h1:XM28wIgFzaBmeZ5dNHIpWLQpt/9DGKxk+rCg/22nnYE= gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2 h1:kG1BFyqVHuQoVQiR1bWGnfz/fmHvvuiSPIV7rvl360E= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +k8s.io/api v0.19.2 h1:q+/krnHWKsL7OBZg/rxnycsl9569Pud76UJ77MvKXms= +k8s.io/api v0.19.2/go.mod h1:IQpK0zFQ1xc5iNIQPqzgoOwuFugaYHK4iCknlAQP9nI= +k8s.io/apiextensions-apiserver v0.19.2 h1:oG84UwiDsVDu7dlsGQs5GySmQHCzMhknfhFExJMz9tA= +k8s.io/apiextensions-apiserver v0.19.2/go.mod h1:EYNjpqIAvNZe+svXVx9j4uBaVhTB4C94HkY3w058qcg= +k8s.io/apimachinery v0.19.2 h1:5Gy9vQpAGTKHPVOh5c4plE274X8D/6cuEiTO2zve7tc= +k8s.io/apimachinery v0.19.2/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= +k8s.io/apiserver v0.19.2 h1:xq2dXAzsAoHv7S4Xc/p7PKhiowdHV/PgdePWo3MxIYM= +k8s.io/apiserver v0.19.2/go.mod h1:FreAq0bJ2vtZFj9Ago/X0oNGC51GfubKK/ViOKfVAOA= +k8s.io/client-go v0.19.2 h1:gMJuU3xJZs86L1oQ99R4EViAADUPMHHtS9jFshasHSc= +k8s.io/client-go v0.19.2/go.mod h1:S5wPhCqyDNAlzM9CnEdgTGV4OqhsW3jGO1UM1epwfJA= +k8s.io/code-generator v0.19.2 h1:7uaWJll6fyCPj2j3sfNN1AiY2gZU1VFN2dFR2uoxGWI= +k8s.io/code-generator v0.19.2/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk= +k8s.io/component-base v0.19.2 h1:jW5Y9RcZTb79liEhW3XDVTW7MuvEGP0tQZnfSX6/+gs= +k8s.io/component-base v0.19.2/go.mod h1:g5LrsiTiabMLZ40AR6Hl45f088DevyGY+cCE2agEIVo= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 h1:t4L10Qfx/p7ASH3gXCdIUtPbbIuegCoUJf3TMSFekjw= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/heapster v1.2.0-beta.1 h1:lUsE/AHOMHpi3MLlBEkaU8Esxm5QhdyCrv1o7ot0s84= k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/kube-aggregator v0.19.2 h1:iDJILLwIKjojE0bjZHKMGp8Ry5U1ugsJzrb/A9lD+00= +k8s.io/kube-aggregator v0.19.2/go.mod h1:wVsjy6OTeUrWkgG9WVsGftnjpm8JIY0vJV7LH2j4nhM= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kubernetes v1.19.2/go.mod h1:yhT1/ltQajQsha3tnYc9QPFYSumGM45nlZdjf7WqE1A= k8s.io/system-validators v1.1.2 h1:0xzEb0PqnDnUOuf/2E/gaJBOBN7j+qf0LIn12jw3oc4= k8s.io/system-validators v1.1.2/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q= k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg= @@ -565,6 +612,8 @@ modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9 h1:rusRLrDhjBp6aYtl9sGEvQJr6faoHoDLd0YcUBTZguI= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0= +sigs.k8s.io/controller-tools v0.2.8/go.mod h1:9VKHPszmf2DHz/QmHkcfZoewO6BL7pPs9uAiBVsaJSE= +sigs.k8s.io/kube-storage-version-migrator v0.0.3/go.mod h1:mXfSLkx9xbJHQsgNDDUZK/iQTs2tMbx/hsJlWe6Fthw= sigs.k8s.io/kustomize v2.0.3+incompatible h1:JUufWFNlI44MdtnjUqVnvh29rR37PQFzPbLXqhyOyX0= sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA= diff --git a/staging/src/k8s.io/api/go.mod b/staging/src/k8s.io/api/go.mod index 7fc38b4576ecc..44d56b26a70b3 100644 --- a/staging/src/k8s.io/api/go.mod +++ b/staging/src/k8s.io/api/go.mod @@ -7,10 +7,39 @@ go 1.15 require ( github.com/gogo/protobuf v1.3.1 github.com/stretchr/testify v1.4.0 - k8s.io/apimachinery v0.0.0 + k8s.io/apimachinery v0.19.2 ) replace ( + github.com/containerd/continuity => github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc + github.com/go-bindata/go-bindata => github.com/go-bindata/go-bindata v3.1.1+incompatible + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/mattn/go-colorable => github.com/mattn/go-colorable v0.0.9 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + github.com/robfig/cron => github.com/robfig/cron v1.1.0 + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api + k8s.io/apiextensions-apiserver => ../apiextensions-apiserver k8s.io/apimachinery => ../apimachinery + k8s.io/apiserver => ../apiserver + k8s.io/cli-runtime => ../cli-runtime + k8s.io/client-go => ../client-go + k8s.io/cloud-provider => ../cloud-provider + k8s.io/cluster-bootstrap => ../cluster-bootstrap + k8s.io/code-generator => ../code-generator + k8s.io/component-base => ../component-base + k8s.io/cri-api => ../cri-api + k8s.io/csi-translation-lib => ../csi-translation-lib + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 + k8s.io/kube-aggregator => ../kube-aggregator + k8s.io/kube-controller-manager => ../kube-controller-manager + k8s.io/kube-proxy => ../kube-proxy + k8s.io/kube-scheduler => ../kube-scheduler + k8s.io/kubectl => ../kubectl + k8s.io/kubelet => ../kubelet + k8s.io/legacy-cloud-providers => ../legacy-cloud-providers + k8s.io/metrics => ../metrics + k8s.io/sample-apiserver => ../sample-apiserver + vbom.ml/util => vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc ) diff --git a/staging/src/k8s.io/api/go.sum b/staging/src/k8s.io/api/go.sum index fc205da8f16cf..203be0d316c4e 100644 --- a/staging/src/k8s.io/api/go.sum +++ b/staging/src/k8s.io/api/go.sum @@ -1,40 +1,242 @@ +bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-sdk-for-go v43.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= +github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317/go.mod h1:DF8FZRxMHMGv/vP2lQP6h+dYzzjpuRn24VeRiYn3qjQ= +github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= +github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990/go.mod h1:ay/0dTb7NsG8QMDfsRfLHgZo/6xAJShLe1+ePPflihk= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= +github.com/aws/aws-sdk-go v1.6.10/go.mod h1:ZRmQr0FajVIyZ4ZzBYKG5P3ZqPz9IHG41ZoMu1ADI3k= +github.com/aws/aws-sdk-go v1.28.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +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/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= +github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/certifi/gocertifi v0.0.0-20180905225744-ee1a9a0726d2/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= +github.com/checkpoint-restore/go-criu/v4 v4.0.2/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= +github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= +github.com/cilium/ebpf v0.0.0-20200507155900-a9f01edf17e3/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s= +github.com/cilium/ebpf v0.0.0-20200601085316-9f1617e5c574/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s= +github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= +github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= +github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v1.0.0/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containerd/typeurl v1.0.0/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/coredns/corefile-migration v1.0.10/go.mod h1:RMy/mXdeDlYwzt0vdMEJvT2hGJ2I86/eO0UdXmH9XNI= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/docker/distribution v0.0.0-20180920194744-16128bbac47f/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v1.4.2-0.20200309214505-aa6a9891b09c/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libnetwork v0.0.0-20190731215715-7f13a5c99f4b/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= +github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsouza/go-dockerclient v0.0.0-20171004212419-da3951ba2e9e/go.mod h1:KpcjM623fQYE9MZiTGzKhjfxXAV9wbyX2C1cyRHfhl0= +github.com/getsentry/raven-go v0.0.0-20190513200303-c977f96e1095/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= +github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.9.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.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 v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= +github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= +github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= +github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= +github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= +github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= +github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= 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.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -43,6 +245,18 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= +github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= +github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= +github.com/gonum/graph v0.0.0-20170401004347-50b27dea7ebb/go.mod h1:ye018NnX1zrbOLqwBvs2HqyyTouQgnL8C+qzYk1snPY= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/cadvisor v0.37.0/go.mod h1:OhDE+goNVel0eGY8mR7Ifq1QUI1in5vJBIgIpcajK/I= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -51,91 +265,453 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v0.0.0-20191024121256-f395758b854c/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= +github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5/go.mod h1:DM4VvS+hD/kDi1U1QsX2fnZowwBhqD0Dk3bRPKF/Oc8= +github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= 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.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/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.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= +github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= +github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= +github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= +github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= +github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= +github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/moby/ipvs v1.0.1/go.mod h1:2pngiyseZbIKXNv7hsKj3O9UEz30c53MT9005gt2hxQ= +github.com/moby/sys/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= +github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= 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 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= +github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= +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/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.0.0-20191031171055-b133feaeeb2e/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc90.0.20200616040943-82d2fa4eb069/go.mod h1:3Sm6Dt7OT8z88EbdQqqcRN2oCT54jbi72tT/HqgflT8= +github.com/opencontainers/runc v1.0.0-rc91.0.20200707015106-819fcc687efb/go.mod h1:ZuXhqlr4EiRYgDrBDNfSbE4+n9JX4+V107NwAmF7sZA= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200520003142-237cc4f519e2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.5.1/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= +github.com/opencontainers/selinux v1.5.2/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= +github.com/openshift/api v0.0.0-20201019163320-c6a5ec25f267/go.mod h1:RDvBcRQMGLa3aNuDuejVBbTEQj/2i14NXdpOLqbNBvM= +github.com/openshift/apiserver-library-go v0.0.0-20201020095023-fe92bc0abdc3/go.mod h1:fGp6VNAiZ3Uzcyxgj5CahXv/+BrxyaAhXXRWWffgxwc= +github.com/openshift/build-machinery-go v0.0.0-20200917070002-f171684f77ab/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= +github.com/openshift/client-go v0.0.0-20201020074620-f8fd44879f7c/go.mod h1:yZ3u8vgWC19I9gbDMRk8//9JwG/0Sth6v7C+m6R8HXs= +github.com/openshift/client-go v0.0.0-20201020082437-7737f16e53fc/go.mod h1:yZ3u8vgWC19I9gbDMRk8//9JwG/0Sth6v7C+m6R8HXs= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= +github.com/openshift/library-go v0.0.0-20201020083322-646ad9742a1e/go.mod h1:qbwvTwCy4btqEcqU3oI59CopNgcRgZUPXG4Y2jc+B4E= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.3.0/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +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.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +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.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +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.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +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.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= +github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= +github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= 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.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/vishvananda/netlink v1.0.0/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.0-20200520041808-52d707b772fe/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= +go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +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/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +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-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/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-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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-20190227155943-e225da77a7e6/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/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/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-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= +gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.1-0.20200106000736-b8fc810ca6b5/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.1/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -148,26 +724,61 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ldap.v2 v2.5.1/go.mod h1:oI0cpe/D7HRtBQl8aTg+ZmzFUAvu4lsv3eLXMLGFxWk= +gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kubernetes v1.19.2/go.mod h1:yhT1/ltQajQsha3tnYc9QPFYSumGM45nlZdjf7WqE1A= +k8s.io/system-validators v1.1.2/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q= +k8s.io/utils v0.0.0-20200414100711-2df71ebbae66/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0= +sigs.k8s.io/controller-tools v0.2.8/go.mod h1:9VKHPszmf2DHz/QmHkcfZoewO6BL7pPs9uAiBVsaJSE= +sigs.k8s.io/kube-storage-version-migrator v0.0.3/go.mod h1:mXfSLkx9xbJHQsgNDDUZK/iQTs2tMbx/hsJlWe6Fthw= +sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI= diff --git a/staging/src/k8s.io/apiextensions-apiserver/go.mod b/staging/src/k8s.io/apiextensions-apiserver/go.mod index 0564880c7a2b1..1af0c97a6ea0b 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/go.mod +++ b/staging/src/k8s.io/apiextensions-apiserver/go.mod @@ -20,25 +20,49 @@ require ( github.com/stretchr/testify v1.4.0 go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5 google.golang.org/grpc v1.27.0 - gopkg.in/yaml.v2 v2.2.8 - k8s.io/api v0.0.0 - k8s.io/apimachinery v0.0.0 - k8s.io/apiserver v0.0.0 - k8s.io/client-go v0.0.0 - k8s.io/code-generator v0.0.0 - k8s.io/component-base v0.0.0 - k8s.io/klog/v2 v2.2.0 + gopkg.in/yaml.v2 v2.3.0 + k8s.io/api v0.19.2 + k8s.io/apimachinery v0.19.2 + k8s.io/apiserver v0.19.2 + k8s.io/client-go v0.19.2 + k8s.io/code-generator v0.19.2 + k8s.io/component-base v0.19.2 + k8s.io/klog/v2 v2.3.0 k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 k8s.io/utils v0.0.0-20200729134348-d5654de09c73 sigs.k8s.io/yaml v1.2.0 ) replace ( + github.com/containerd/continuity => github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc + github.com/go-bindata/go-bindata => github.com/go-bindata/go-bindata v3.1.1+incompatible + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/mattn/go-colorable => github.com/mattn/go-colorable v0.0.9 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + github.com/robfig/cron => github.com/robfig/cron v1.1.0 + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apiextensions-apiserver => ../apiextensions-apiserver k8s.io/apimachinery => ../apimachinery k8s.io/apiserver => ../apiserver + k8s.io/cli-runtime => ../cli-runtime k8s.io/client-go => ../client-go + k8s.io/cloud-provider => ../cloud-provider + k8s.io/cluster-bootstrap => ../cluster-bootstrap k8s.io/code-generator => ../code-generator k8s.io/component-base => ../component-base + k8s.io/cri-api => ../cri-api + k8s.io/csi-translation-lib => ../csi-translation-lib + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 + k8s.io/kube-aggregator => ../kube-aggregator + k8s.io/kube-controller-manager => ../kube-controller-manager + k8s.io/kube-proxy => ../kube-proxy + k8s.io/kube-scheduler => ../kube-scheduler + k8s.io/kubectl => ../kubectl + k8s.io/kubelet => ../kubelet + k8s.io/legacy-cloud-providers => ../legacy-cloud-providers + k8s.io/metrics => ../metrics + k8s.io/sample-apiserver => ../sample-apiserver + vbom.ml/util => vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc ) diff --git a/staging/src/k8s.io/apiextensions-apiserver/go.sum b/staging/src/k8s.io/apiextensions-apiserver/go.sum index 6509ef7570a32..7da6b16961f2b 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/go.sum +++ b/staging/src/k8s.io/apiextensions-apiserver/go.sum @@ -1,3 +1,4 @@ +bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -11,6 +12,7 @@ cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7 cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-sdk-for-go v43.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= @@ -21,11 +23,19 @@ github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+v github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= +github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317/go.mod h1:DF8FZRxMHMGv/vP2lQP6h+dYzzjpuRn24VeRiYn3qjQ= +github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= +github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990/go.mod h1:ay/0dTb7NsG8QMDfsRfLHgZo/6xAJShLe1+ePPflihk= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46 h1:lsxEuwrXEAokXB9qhlbKWPpo3KMLZQ5WB5WLQRW1uq0= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= @@ -37,35 +47,71 @@ github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdko github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= +github.com/aws/aws-sdk-go v1.6.10/go.mod h1:ZRmQr0FajVIyZ4ZzBYKG5P3ZqPz9IHG41ZoMu1ADI3k= +github.com/aws/aws-sdk-go v1.28.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= 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/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= +github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/certifi/gocertifi v0.0.0-20180905225744-ee1a9a0726d2/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= +github.com/checkpoint-restore/go-criu/v4 v4.0.2/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= +github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= +github.com/cilium/ebpf v0.0.0-20200507155900-a9f01edf17e3/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s= +github.com/cilium/ebpf v0.0.0-20200601085316-9f1617e5c574/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s= +github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= +github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= +github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v1.0.0/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containerd/typeurl v1.0.0/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/coredns/corefile-migration v1.0.10/go.mod h1:RMy/mXdeDlYwzt0vdMEJvT2hGJ2I86/eO0UdXmH9XNI= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= @@ -73,19 +119,36 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/docker/distribution v0.0.0-20180920194744-16128bbac47f/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v1.4.2-0.20200309214505-aa6a9891b09c/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libnetwork v0.0.0-20190731215715-7f13a5c99f4b/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= +github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -97,17 +160,27 @@ github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsouza/go-dockerclient v0.0.0-20171004212419-da3951ba2e9e/go.mod h1:KpcjM623fQYE9MZiTGzKhjfxXAV9wbyX2C1cyRHfhl0= +github.com/getsentry/raven-go v0.0.0-20190513200303-c977f96e1095/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= +github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.9.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -169,12 +242,16 @@ github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+ github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.5 h1:QhCBKRYqZR+SKo4gl1lPhPahope8/RLt6EVgY8X80w0= github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -190,6 +267,7 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -198,9 +276,19 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= +github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= +github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= +github.com/gonum/graph v0.0.0-20170401004347-50b27dea7ebb/go.mod h1:ye018NnX1zrbOLqwBvs2HqyyTouQgnL8C+qzYk1snPY= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/cadvisor v0.37.0/go.mod h1:OhDE+goNVel0eGY8mR7Ifq1QUI1in5vJBIgIpcajK/I= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -219,8 +307,14 @@ github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v0.0.0-20191024121256-f395758b854c/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -233,10 +327,14 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5 h1:UImYN5qQ8tuGpGE16ZmjvcTtTw24zw1QAp/SlnNrZhI= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= +github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -244,6 +342,10 @@ github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5/go.mod h1:DM4VvS+hD/kDi1U1QsX2fnZowwBhqD0Dk3bRPKF/Oc8= +github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -252,11 +354,16 @@ github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -267,7 +374,17 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= +github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= +github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= +github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= +github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= +github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -275,15 +392,24 @@ github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= +github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/moby/ipvs v1.0.1/go.mod h1:2pngiyseZbIKXNv7hsKj3O9UEz30c53MT9005gt2hxQ= +github.com/moby/sys/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= 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= @@ -291,20 +417,43 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= +github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 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/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= 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/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.0.0-20191031171055-b133feaeeb2e/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc90.0.20200616040943-82d2fa4eb069/go.mod h1:3Sm6Dt7OT8z88EbdQqqcRN2oCT54jbi72tT/HqgflT8= +github.com/opencontainers/runc v1.0.0-rc91.0.20200707015106-819fcc687efb/go.mod h1:ZuXhqlr4EiRYgDrBDNfSbE4+n9JX4+V107NwAmF7sZA= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200520003142-237cc4f519e2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.5.1/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= +github.com/opencontainers/selinux v1.5.2/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= +github.com/openshift/api v0.0.0-20201019163320-c6a5ec25f267/go.mod h1:RDvBcRQMGLa3aNuDuejVBbTEQj/2i14NXdpOLqbNBvM= +github.com/openshift/apiserver-library-go v0.0.0-20201020095023-fe92bc0abdc3/go.mod h1:fGp6VNAiZ3Uzcyxgj5CahXv/+BrxyaAhXXRWWffgxwc= +github.com/openshift/build-machinery-go v0.0.0-20200917070002-f171684f77ab/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= +github.com/openshift/client-go v0.0.0-20201020074620-f8fd44879f7c/go.mod h1:yZ3u8vgWC19I9gbDMRk8//9JwG/0Sth6v7C+m6R8HXs= +github.com/openshift/client-go v0.0.0-20201020082437-7737f16e53fc/go.mod h1:yZ3u8vgWC19I9gbDMRk8//9JwG/0Sth6v7C+m6R8HXs= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= +github.com/openshift/library-go v0.0.0-20201020083322-646ad9742a1e/go.mod h1:qbwvTwCy4btqEcqU3oI59CopNgcRgZUPXG4Y2jc+B4E= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= @@ -312,12 +461,14 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.8.1/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/pkg/profile v1.3.0/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= 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.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -328,24 +479,38 @@ github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= 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.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= 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.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= +github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= +github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -354,15 +519,19 @@ github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= 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.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -370,16 +539,28 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/vishvananda/netlink v1.0.0/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.0-20200520041808-52d707b772fe/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -404,6 +585,10 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -414,11 +599,16 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -443,9 +633,11 @@ golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -455,7 +647,9 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/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-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= @@ -478,7 +672,11 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/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-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -486,16 +684,27 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 h1:5/PjkGUjvEU5Gl6BxmvKRPpqo2uNMv4rcHBMwzk/st8= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -511,15 +720,18 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -531,6 +743,7 @@ golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -541,11 +754,19 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= +gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.1-0.20200106000736-b8fc810ca6b5/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.1/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -561,6 +782,7 @@ google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -568,6 +790,7 @@ google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiq google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= @@ -584,6 +807,7 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= @@ -592,21 +816,21 @@ gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ldap.v2 v2.5.1/go.mod h1:oI0cpe/D7HRtBQl8aTg+ZmzFUAvu4lsv3eLXMLGFxWk= +gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -617,18 +841,33 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 h1:t4L10Qfx/p7ASH3gXCdIUtPbbIuegCoUJf3TMSFekjw= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kubernetes v1.19.2/go.mod h1:yhT1/ltQajQsha3tnYc9QPFYSumGM45nlZdjf7WqE1A= +k8s.io/system-validators v1.1.2/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q= +k8s.io/utils v0.0.0-20200414100711-2df71ebbae66/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9 h1:rusRLrDhjBp6aYtl9sGEvQJr6faoHoDLd0YcUBTZguI= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0= +sigs.k8s.io/controller-tools v0.2.8/go.mod h1:9VKHPszmf2DHz/QmHkcfZoewO6BL7pPs9uAiBVsaJSE= +sigs.k8s.io/kube-storage-version-migrator v0.0.3/go.mod h1:mXfSLkx9xbJHQsgNDDUZK/iQTs2tMbx/hsJlWe6Fthw= +sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI= diff --git a/staging/src/k8s.io/apimachinery/go.mod b/staging/src/k8s.io/apimachinery/go.mod index 00005fcf73a83..8d269c976225d 100644 --- a/staging/src/k8s.io/apimachinery/go.mod +++ b/staging/src/k8s.io/apimachinery/go.mod @@ -21,7 +21,7 @@ require ( github.com/json-iterator/go v1.1.10 github.com/modern-go/reflect2 v1.0.1 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f - github.com/onsi/ginkgo v1.11.0 // indirect + github.com/onsi/ginkgo v4.5.0-origin.1+incompatible // indirect github.com/onsi/gomega v1.7.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/spf13/pflag v1.0.5 @@ -31,11 +31,16 @@ require ( golang.org/x/text v0.3.3 // indirect google.golang.org/protobuf v1.24.0 // indirect gopkg.in/inf.v0 v0.9.1 - gopkg.in/yaml.v2 v2.2.8 - k8s.io/klog/v2 v2.2.0 + gopkg.in/yaml.v2 v2.3.0 + k8s.io/klog/v2 v2.3.0 k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 sigs.k8s.io/structured-merge-diff/v4 v4.0.1 sigs.k8s.io/yaml v1.2.0 ) -replace k8s.io/apimachinery => ../apimachinery +replace ( + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 + k8s.io/apimachinery => ../apimachinery + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 +) diff --git a/staging/src/k8s.io/apimachinery/go.sum b/staging/src/k8s.io/apimachinery/go.sum index c114497d153e4..ea134f7ff2be5 100644 --- a/staging/src/k8s.io/apimachinery/go.sum +++ b/staging/src/k8s.io/apimachinery/go.sum @@ -23,8 +23,6 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -85,13 +83,11 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 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 v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -172,14 +168,11 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= diff --git a/staging/src/k8s.io/apiserver/go.mod b/staging/src/k8s.io/apiserver/go.mod index 86947be4909d1..b3a29b05cf87e 100644 --- a/staging/src/k8s.io/apiserver/go.mod +++ b/staging/src/k8s.io/apiserver/go.mod @@ -6,32 +6,25 @@ go 1.15 require ( github.com/coreos/go-oidc v2.1.0+incompatible - github.com/coreos/go-semver v0.3.0 // indirect github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f github.com/davecgh/go-spew v1.1.1 - github.com/dustin/go-humanize v1.0.0 // indirect github.com/emicklei/go-restful v2.9.5+incompatible github.com/evanphx/json-patch v4.9.0+incompatible - github.com/go-openapi/jsonreference v0.19.3 // indirect github.com/go-openapi/spec v0.19.3 github.com/gogo/protobuf v1.3.1 github.com/google/go-cmp v0.4.0 github.com/google/gofuzz v1.1.0 github.com/google/uuid v1.1.1 github.com/googleapis/gnostic v0.4.1 - github.com/gorilla/websocket v1.4.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 github.com/hashicorp/golang-lru v0.5.1 - github.com/mailru/easyjson v0.7.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 github.com/pkg/errors v0.9.1 - github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 // indirect github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.4.0 - github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 // indirect - go.etcd.io/bbolt v1.3.5 // indirect go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5 + go.uber.org/atomic v1.4.0 go.uber.org/zap v1.10.0 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 golang.org/x/net v0.0.0-20200707034311-ab3426394381 @@ -40,12 +33,12 @@ require ( google.golang.org/grpc v1.27.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 gopkg.in/square/go-jose.v2 v2.2.2 - gopkg.in/yaml.v2 v2.2.8 - k8s.io/api v0.0.0 - k8s.io/apimachinery v0.0.0 - k8s.io/client-go v0.0.0 - k8s.io/component-base v0.0.0 - k8s.io/klog/v2 v2.2.0 + gopkg.in/yaml.v2 v2.3.0 + k8s.io/api v0.19.2 + k8s.io/apimachinery v0.19.2 + k8s.io/client-go v0.19.2 + k8s.io/component-base v0.19.2 + k8s.io/klog/v2 v2.3.0 k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 k8s.io/utils v0.0.0-20200729134348-d5654de09c73 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9 @@ -54,9 +47,35 @@ require ( ) replace ( + github.com/containerd/continuity => github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc + github.com/go-bindata/go-bindata => github.com/go-bindata/go-bindata v3.1.1+incompatible + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/mattn/go-colorable => github.com/mattn/go-colorable v0.0.9 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + github.com/robfig/cron => github.com/robfig/cron v1.1.0 + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api + k8s.io/apiextensions-apiserver => ../apiextensions-apiserver k8s.io/apimachinery => ../apimachinery k8s.io/apiserver => ../apiserver + k8s.io/cli-runtime => ../cli-runtime k8s.io/client-go => ../client-go + k8s.io/cloud-provider => ../cloud-provider + k8s.io/cluster-bootstrap => ../cluster-bootstrap + k8s.io/code-generator => ../code-generator k8s.io/component-base => ../component-base + k8s.io/cri-api => ../cri-api + k8s.io/csi-translation-lib => ../csi-translation-lib + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 + k8s.io/kube-aggregator => ../kube-aggregator + k8s.io/kube-controller-manager => ../kube-controller-manager + k8s.io/kube-proxy => ../kube-proxy + k8s.io/kube-scheduler => ../kube-scheduler + k8s.io/kubectl => ../kubectl + k8s.io/kubelet => ../kubelet + k8s.io/legacy-cloud-providers => ../legacy-cloud-providers + k8s.io/metrics => ../metrics + k8s.io/sample-apiserver => ../sample-apiserver + vbom.ml/util => vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc ) diff --git a/staging/src/k8s.io/apiserver/go.sum b/staging/src/k8s.io/apiserver/go.sum index 6a81d221c6075..2d1b0b9808f4d 100644 --- a/staging/src/k8s.io/apiserver/go.sum +++ b/staging/src/k8s.io/apiserver/go.sum @@ -1,3 +1,4 @@ +bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -11,6 +12,7 @@ cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7 cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-sdk-for-go v43.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= @@ -22,39 +24,94 @@ github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+v github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= +github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317/go.mod h1:DF8FZRxMHMGv/vP2lQP6h+dYzzjpuRn24VeRiYn3qjQ= +github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= +github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990/go.mod h1:ay/0dTb7NsG8QMDfsRfLHgZo/6xAJShLe1+ePPflihk= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46 h1:lsxEuwrXEAokXB9qhlbKWPpo3KMLZQ5WB5WLQRW1uq0= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= +github.com/aws/aws-sdk-go v1.6.10/go.mod h1:ZRmQr0FajVIyZ4ZzBYKG5P3ZqPz9IHG41ZoMu1ADI3k= +github.com/aws/aws-sdk-go v1.28.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= 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/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= +github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/certifi/gocertifi v0.0.0-20180905225744-ee1a9a0726d2/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= +github.com/checkpoint-restore/go-criu/v4 v4.0.2/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= +github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= +github.com/cilium/ebpf v0.0.0-20200507155900-a9f01edf17e3/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s= +github.com/cilium/ebpf v0.0.0-20200601085316-9f1617e5c574/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s= +github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= +github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= +github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v1.0.0/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containerd/typeurl v1.0.0/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/coredns/corefile-migration v1.0.10/go.mod h1:RMy/mXdeDlYwzt0vdMEJvT2hGJ2I86/eO0UdXmH9XNI= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-oidc v2.1.0+incompatible h1:sdJrfw8akMnCuUlaZU3tE/uYXFgfqom8DBE9so9EBsM= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -63,15 +120,36 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/docker/distribution v0.0.0-20180920194744-16128bbac47f/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v1.4.2-0.20200309214505-aa6a9891b09c/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libnetwork v0.0.0-20190731215715-7f13a5c99f4b/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= +github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -83,16 +161,28 @@ github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsouza/go-dockerclient v0.0.0-20171004212419-da3951ba2e9e/go.mod h1:KpcjM623fQYE9MZiTGzKhjfxXAV9wbyX2C1cyRHfhl0= +github.com/getsentry/raven-go v0.0.0-20190513200303-c977f96e1095/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= +github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.9.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -101,30 +191,67 @@ github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= +github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= +github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= +github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= +github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= +github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 h1:5ZkaAPbicIKTF2I64qf5Fh8Aa83Q/dnOafMYV0OMwjA= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -136,6 +263,7 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -144,9 +272,19 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= +github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= +github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= +github.com/gonum/graph v0.0.0-20170401004347-50b27dea7ebb/go.mod h1:ye018NnX1zrbOLqwBvs2HqyyTouQgnL8C+qzYk1snPY= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/cadvisor v0.37.0/go.mod h1:OhDE+goNVel0eGY8mR7Ifq1QUI1in5vJBIgIpcajK/I= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -165,27 +303,44 @@ github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v0.0.0-20191024121256-f395758b854c/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 h1:z53tR0945TRRQO/fLEVPI6SMv7ZflF0TEaTAoU7tOzg= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5 h1:UImYN5qQ8tuGpGE16ZmjvcTtTw24zw1QAp/SlnNrZhI= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= +github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5/go.mod h1:DM4VvS+hD/kDi1U1QsX2fnZowwBhqD0Dk3bRPKF/Oc8= +github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -194,11 +349,16 @@ github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -209,17 +369,41 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= +github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= +github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= +github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= +github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= +github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= +github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/moby/ipvs v1.0.1/go.mod h1:2pngiyseZbIKXNv7hsKj3O9UEz30c53MT9005gt2hxQ= +github.com/moby/sys/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= 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= @@ -227,30 +411,59 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= +github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 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/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= 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/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.0.0-20191031171055-b133feaeeb2e/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc90.0.20200616040943-82d2fa4eb069/go.mod h1:3Sm6Dt7OT8z88EbdQqqcRN2oCT54jbi72tT/HqgflT8= +github.com/opencontainers/runc v1.0.0-rc91.0.20200707015106-819fcc687efb/go.mod h1:ZuXhqlr4EiRYgDrBDNfSbE4+n9JX4+V107NwAmF7sZA= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200520003142-237cc4f519e2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.5.1/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= +github.com/opencontainers/selinux v1.5.2/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= +github.com/openshift/api v0.0.0-20201019163320-c6a5ec25f267/go.mod h1:RDvBcRQMGLa3aNuDuejVBbTEQj/2i14NXdpOLqbNBvM= +github.com/openshift/apiserver-library-go v0.0.0-20201020095023-fe92bc0abdc3/go.mod h1:fGp6VNAiZ3Uzcyxgj5CahXv/+BrxyaAhXXRWWffgxwc= +github.com/openshift/build-machinery-go v0.0.0-20200917070002-f171684f77ab/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= +github.com/openshift/client-go v0.0.0-20201020074620-f8fd44879f7c/go.mod h1:yZ3u8vgWC19I9gbDMRk8//9JwG/0Sth6v7C+m6R8HXs= +github.com/openshift/client-go v0.0.0-20201020082437-7737f16e53fc/go.mod h1:yZ3u8vgWC19I9gbDMRk8//9JwG/0Sth6v7C+m6R8HXs= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= +github.com/openshift/library-go v0.0.0-20201020083322-646ad9742a1e/go.mod h1:qbwvTwCy4btqEcqU3oI59CopNgcRgZUPXG4Y2jc+B4E= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.3.0/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 h1:0XM1XL/OFFJjXsYXlG30spTkV/E9+gmd5GD1w2HE8xM= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= 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.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -258,30 +471,61 @@ github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1: github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= 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.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= 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.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= +github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= +github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= 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.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -289,18 +533,39 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/vishvananda/netlink v1.0.0/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.0-20200520041808-52d707b772fe/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5 h1:Gqga3zA9tdAcfqobUGjSoCob5L3f8Dt5EuOp3ihNZko= go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= +go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -312,19 +577,30 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -339,23 +615,33 @@ golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCc golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +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/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 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-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/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-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= @@ -377,23 +663,39 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/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-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 h1:5/PjkGUjvEU5Gl6BxmvKRPpqo2uNMv4rcHBMwzk/st8= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -409,36 +711,52 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= +gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.1-0.20200106000736-b8fc810ca6b5/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.1/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -454,12 +772,15 @@ google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= @@ -476,6 +797,7 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= @@ -484,8 +806,11 @@ gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ldap.v2 v2.5.1/go.mod h1:oI0cpe/D7HRtBQl8aTg+ZmzFUAvu4lsv3eLXMLGFxWk= +gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= @@ -493,13 +818,10 @@ gopkg.in/square/go-jose.v2 v2.2.2 h1:orlkJ3myw8CN1nVQHBFfloD+L3egixIa4FvUP6RosSA gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -508,18 +830,34 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kubernetes v1.19.2/go.mod h1:yhT1/ltQajQsha3tnYc9QPFYSumGM45nlZdjf7WqE1A= +k8s.io/system-validators v1.1.2/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q= +k8s.io/utils v0.0.0-20200414100711-2df71ebbae66/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9 h1:rusRLrDhjBp6aYtl9sGEvQJr6faoHoDLd0YcUBTZguI= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0= +sigs.k8s.io/controller-tools v0.2.8/go.mod h1:9VKHPszmf2DHz/QmHkcfZoewO6BL7pPs9uAiBVsaJSE= +sigs.k8s.io/kube-storage-version-migrator v0.0.3/go.mod h1:mXfSLkx9xbJHQsgNDDUZK/iQTs2tMbx/hsJlWe6Fthw= +sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI= diff --git a/staging/src/k8s.io/cli-runtime/go.mod b/staging/src/k8s.io/cli-runtime/go.mod index 1471fe8522622..522bec3cbd0b8 100644 --- a/staging/src/k8s.io/cli-runtime/go.mod +++ b/staging/src/k8s.io/cli-runtime/go.mod @@ -6,30 +6,53 @@ go 1.15 require ( github.com/davecgh/go-spew v1.1.1 - github.com/emicklei/go-restful v2.9.5+incompatible // indirect github.com/evanphx/json-patch v4.9.0+incompatible - github.com/go-openapi/jsonreference v0.19.3 // indirect - github.com/go-openapi/spec v0.19.3 // indirect github.com/googleapis/gnostic v0.4.1 github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de - github.com/mailru/easyjson v0.7.0 // indirect github.com/pkg/errors v0.9.1 github.com/spf13/cobra v1.0.0 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.4.0 golang.org/x/text v0.3.3 - gopkg.in/yaml.v2 v2.2.8 - k8s.io/api v0.0.0 - k8s.io/apimachinery v0.0.0 - k8s.io/client-go v0.0.0 + gopkg.in/yaml.v2 v2.3.0 + k8s.io/api v0.19.2 + k8s.io/apimachinery v0.19.2 + k8s.io/client-go v0.19.2 k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 sigs.k8s.io/kustomize v2.0.3+incompatible sigs.k8s.io/yaml v1.2.0 ) replace ( + github.com/containerd/continuity => github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc + github.com/go-bindata/go-bindata => github.com/go-bindata/go-bindata v3.1.1+incompatible + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/mattn/go-colorable => github.com/mattn/go-colorable v0.0.9 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + github.com/robfig/cron => github.com/robfig/cron v1.1.0 + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api + k8s.io/apiextensions-apiserver => ../apiextensions-apiserver k8s.io/apimachinery => ../apimachinery + k8s.io/apiserver => ../apiserver k8s.io/cli-runtime => ../cli-runtime k8s.io/client-go => ../client-go + k8s.io/cloud-provider => ../cloud-provider + k8s.io/cluster-bootstrap => ../cluster-bootstrap + k8s.io/code-generator => ../code-generator + k8s.io/component-base => ../component-base + k8s.io/cri-api => ../cri-api + k8s.io/csi-translation-lib => ../csi-translation-lib + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 + k8s.io/kube-aggregator => ../kube-aggregator + k8s.io/kube-controller-manager => ../kube-controller-manager + k8s.io/kube-proxy => ../kube-proxy + k8s.io/kube-scheduler => ../kube-scheduler + k8s.io/kubectl => ../kubectl + k8s.io/kubelet => ../kubelet + k8s.io/legacy-cloud-providers => ../legacy-cloud-providers + k8s.io/metrics => ../metrics + k8s.io/sample-apiserver => ../sample-apiserver + vbom.ml/util => vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc ) diff --git a/staging/src/k8s.io/cli-runtime/go.sum b/staging/src/k8s.io/cli-runtime/go.sum index 68712468b4add..252f3df07fc22 100644 --- a/staging/src/k8s.io/cli-runtime/go.sum +++ b/staging/src/k8s.io/cli-runtime/go.sum @@ -1,3 +1,4 @@ +bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -11,6 +12,8 @@ cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7 cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-sdk-for-go v43.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= @@ -20,85 +23,218 @@ github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+v github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= +github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317/go.mod h1:DF8FZRxMHMGv/vP2lQP6h+dYzzjpuRn24VeRiYn3qjQ= +github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= +github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990/go.mod h1:ay/0dTb7NsG8QMDfsRfLHgZo/6xAJShLe1+ePPflihk= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= +github.com/aws/aws-sdk-go v1.6.10/go.mod h1:ZRmQr0FajVIyZ4ZzBYKG5P3ZqPz9IHG41ZoMu1ADI3k= +github.com/aws/aws-sdk-go v1.28.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= 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/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= +github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/certifi/gocertifi v0.0.0-20180905225744-ee1a9a0726d2/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= +github.com/checkpoint-restore/go-criu/v4 v4.0.2/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= +github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= +github.com/cilium/ebpf v0.0.0-20200507155900-a9f01edf17e3/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s= +github.com/cilium/ebpf v0.0.0-20200601085316-9f1617e5c574/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s= +github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= +github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= +github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v1.0.0/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containerd/typeurl v1.0.0/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/coredns/corefile-migration v1.0.10/go.mod h1:RMy/mXdeDlYwzt0vdMEJvT2hGJ2I86/eO0UdXmH9XNI= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/docker/distribution v0.0.0-20180920194744-16128bbac47f/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v1.4.2-0.20200309214505-aa6a9891b09c/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libnetwork v0.0.0-20190731215715-7f13a5c99f4b/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= +github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsouza/go-dockerclient v0.0.0-20171004212419-da3951ba2e9e/go.mod h1:KpcjM623fQYE9MZiTGzKhjfxXAV9wbyX2C1cyRHfhl0= +github.com/getsentry/raven-go v0.0.0-20190513200303-c977f96e1095/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= +github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.9.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.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 v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= +github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= +github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= +github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= +github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= +github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -110,6 +246,7 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -118,9 +255,19 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= +github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= +github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= +github.com/gonum/graph v0.0.0-20170401004347-50b27dea7ebb/go.mod h1:ye018NnX1zrbOLqwBvs2HqyyTouQgnL8C+qzYk1snPY= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/cadvisor v0.37.0/go.mod h1:OhDE+goNVel0eGY8mR7Ifq1QUI1in5vJBIgIpcajK/I= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -134,20 +281,34 @@ github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OI github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v0.0.0-20191024121256-f395758b854c/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= +github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -155,17 +316,28 @@ github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5/go.mod h1:DM4VvS+hD/kDi1U1QsX2fnZowwBhqD0Dk3bRPKF/Oc8= +github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= 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.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/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.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= @@ -174,70 +346,155 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= 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/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= +github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= +github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= +github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= +github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= +github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= +github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/moby/ipvs v1.0.1/go.mod h1:2pngiyseZbIKXNv7hsKj3O9UEz30c53MT9005gt2hxQ= +github.com/moby/sys/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= +github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= 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 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= +github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= 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/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.0.0-20191031171055-b133feaeeb2e/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc90.0.20200616040943-82d2fa4eb069/go.mod h1:3Sm6Dt7OT8z88EbdQqqcRN2oCT54jbi72tT/HqgflT8= +github.com/opencontainers/runc v1.0.0-rc91.0.20200707015106-819fcc687efb/go.mod h1:ZuXhqlr4EiRYgDrBDNfSbE4+n9JX4+V107NwAmF7sZA= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200520003142-237cc4f519e2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.5.1/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= +github.com/opencontainers/selinux v1.5.2/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= +github.com/openshift/api v0.0.0-20201019163320-c6a5ec25f267/go.mod h1:RDvBcRQMGLa3aNuDuejVBbTEQj/2i14NXdpOLqbNBvM= +github.com/openshift/apiserver-library-go v0.0.0-20201020095023-fe92bc0abdc3/go.mod h1:fGp6VNAiZ3Uzcyxgj5CahXv/+BrxyaAhXXRWWffgxwc= +github.com/openshift/build-machinery-go v0.0.0-20200917070002-f171684f77ab/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= +github.com/openshift/client-go v0.0.0-20201020074620-f8fd44879f7c/go.mod h1:yZ3u8vgWC19I9gbDMRk8//9JwG/0Sth6v7C+m6R8HXs= +github.com/openshift/client-go v0.0.0-20201020082437-7737f16e53fc/go.mod h1:yZ3u8vgWC19I9gbDMRk8//9JwG/0Sth6v7C+m6R8HXs= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= +github.com/openshift/library-go v0.0.0-20201020083322-646ad9742a1e/go.mod h1:qbwvTwCy4btqEcqU3oI59CopNgcRgZUPXG4Y2jc+B4E= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= 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/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/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/pkg/profile v1.3.0/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +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.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= 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.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +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.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +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.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= +github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= +github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= 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.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -245,31 +502,66 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/vishvananda/netlink v1.0.0/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.0-20200520041808-52d707b772fe/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= +go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -284,14 +576,20 @@ golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCc golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +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/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -299,8 +597,12 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 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-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/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-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= @@ -321,18 +623,40 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/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-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 h1:5/PjkGUjvEU5Gl6BxmvKRPpqo2uNMv4rcHBMwzk/st8= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -341,40 +665,58 @@ golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= +gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.1-0.20200106000736-b8fc810ca6b5/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.1/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -390,12 +732,14 @@ google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -410,37 +754,60 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ldap.v2 v2.5.1/go.mod h1:oI0cpe/D7HRtBQl8aTg+ZmzFUAvu4lsv3eLXMLGFxWk= +gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kubernetes v1.19.2/go.mod h1:yhT1/ltQajQsha3tnYc9QPFYSumGM45nlZdjf7WqE1A= +k8s.io/system-validators v1.1.2/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q= +k8s.io/utils v0.0.0-20200414100711-2df71ebbae66/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0= +sigs.k8s.io/controller-tools v0.2.8/go.mod h1:9VKHPszmf2DHz/QmHkcfZoewO6BL7pPs9uAiBVsaJSE= +sigs.k8s.io/kube-storage-version-migrator v0.0.3/go.mod h1:mXfSLkx9xbJHQsgNDDUZK/iQTs2tMbx/hsJlWe6Fthw= sigs.k8s.io/kustomize v2.0.3+incompatible h1:JUufWFNlI44MdtnjUqVnvh29rR37PQFzPbLXqhyOyX0= sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA= @@ -448,3 +815,4 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI= diff --git a/staging/src/k8s.io/client-go/go.mod b/staging/src/k8s.io/client-go/go.mod index ac15fefd0310d..697bd14ec2a0a 100644 --- a/staging/src/k8s.io/client-go/go.mod +++ b/staging/src/k8s.io/client-go/go.mod @@ -18,7 +18,7 @@ require ( github.com/google/uuid v1.1.1 github.com/googleapis/gnostic v0.4.1 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 - github.com/imdario/mergo v0.3.5 + github.com/imdario/mergo v0.3.7 github.com/peterbourgon/diskv v2.0.1+incompatible github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.4.0 @@ -26,15 +26,19 @@ require ( golang.org/x/net v0.0.0-20200707034311-ab3426394381 golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 golang.org/x/time v0.0.0-20191024005414-555d28b269f0 - k8s.io/api v0.0.0 - k8s.io/apimachinery v0.0.0 - k8s.io/klog/v2 v2.2.0 + k8s.io/api v0.19.2 + k8s.io/apimachinery v0.19.2 + k8s.io/klog/v2 v2.3.0 k8s.io/utils v0.0.0-20200729134348-d5654de09c73 sigs.k8s.io/yaml v1.2.0 ) replace ( + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apimachinery => ../apimachinery k8s.io/client-go => ../client-go + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 ) diff --git a/staging/src/k8s.io/client-go/go.sum b/staging/src/k8s.io/client-go/go.sum index 4928f7eab86d0..b99cf71a0344c 100644 --- a/staging/src/k8s.io/client-go/go.sum +++ b/staging/src/k8s.io/client-go/go.sum @@ -64,8 +64,6 @@ github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -148,13 +146,11 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= 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/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -324,8 +320,6 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -334,7 +328,6 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= diff --git a/staging/src/k8s.io/cloud-provider/go.mod b/staging/src/k8s.io/cloud-provider/go.mod index 0624e65d53bdb..682947517fbf4 100644 --- a/staging/src/k8s.io/cloud-provider/go.mod +++ b/staging/src/k8s.io/cloud-provider/go.mod @@ -7,18 +7,44 @@ go 1.15 require ( github.com/google/go-cmp v0.4.0 github.com/stretchr/testify v1.4.0 - k8s.io/api v0.0.0 - k8s.io/apimachinery v0.0.0 - k8s.io/client-go v0.0.0 - k8s.io/component-base v0.0.0 - k8s.io/klog/v2 v2.2.0 + k8s.io/api v0.19.2 + k8s.io/apimachinery v0.19.2 + k8s.io/client-go v0.19.2 + k8s.io/component-base v0.19.2 + k8s.io/klog/v2 v2.3.0 k8s.io/utils v0.0.0-20200729134348-d5654de09c73 ) replace ( + github.com/containerd/continuity => github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc + github.com/go-bindata/go-bindata => github.com/go-bindata/go-bindata v3.1.1+incompatible + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/mattn/go-colorable => github.com/mattn/go-colorable v0.0.9 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + github.com/robfig/cron => github.com/robfig/cron v1.1.0 + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api + k8s.io/apiextensions-apiserver => ../apiextensions-apiserver k8s.io/apimachinery => ../apimachinery + k8s.io/apiserver => ../apiserver + k8s.io/cli-runtime => ../cli-runtime k8s.io/client-go => ../client-go k8s.io/cloud-provider => ../cloud-provider + k8s.io/cluster-bootstrap => ../cluster-bootstrap + k8s.io/code-generator => ../code-generator k8s.io/component-base => ../component-base + k8s.io/cri-api => ../cri-api + k8s.io/csi-translation-lib => ../csi-translation-lib + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 + k8s.io/kube-aggregator => ../kube-aggregator + k8s.io/kube-controller-manager => ../kube-controller-manager + k8s.io/kube-proxy => ../kube-proxy + k8s.io/kube-scheduler => ../kube-scheduler + k8s.io/kubectl => ../kubectl + k8s.io/kubelet => ../kubelet + k8s.io/legacy-cloud-providers => ../legacy-cloud-providers + k8s.io/metrics => ../metrics + k8s.io/sample-apiserver => ../sample-apiserver + vbom.ml/util => vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc ) diff --git a/staging/src/k8s.io/cloud-provider/go.sum b/staging/src/k8s.io/cloud-provider/go.sum index 9003a4c7d5605..fc7106fa1fa3f 100644 --- a/staging/src/k8s.io/cloud-provider/go.sum +++ b/staging/src/k8s.io/cloud-provider/go.sum @@ -1,3 +1,4 @@ +bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -11,6 +12,7 @@ cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7 cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-sdk-for-go v43.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= @@ -21,47 +23,152 @@ github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+v github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= +github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317/go.mod h1:DF8FZRxMHMGv/vP2lQP6h+dYzzjpuRn24VeRiYn3qjQ= +github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= +github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990/go.mod h1:ay/0dTb7NsG8QMDfsRfLHgZo/6xAJShLe1+ePPflihk= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= +github.com/aws/aws-sdk-go v1.6.10/go.mod h1:ZRmQr0FajVIyZ4ZzBYKG5P3ZqPz9IHG41ZoMu1ADI3k= +github.com/aws/aws-sdk-go v1.28.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= 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/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= +github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/certifi/gocertifi v0.0.0-20180905225744-ee1a9a0726d2/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= +github.com/checkpoint-restore/go-criu/v4 v4.0.2/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= +github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= +github.com/cilium/ebpf v0.0.0-20200507155900-a9f01edf17e3/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s= +github.com/cilium/ebpf v0.0.0-20200601085316-9f1617e5c574/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s= +github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= +github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= +github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v1.0.0/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containerd/typeurl v1.0.0/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/coredns/corefile-migration v1.0.10/go.mod h1:RMy/mXdeDlYwzt0vdMEJvT2hGJ2I86/eO0UdXmH9XNI= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/docker/distribution v0.0.0-20180920194744-16128bbac47f/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v1.4.2-0.20200309214505-aa6a9891b09c/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libnetwork v0.0.0-20190731215715-7f13a5c99f4b/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= +github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsouza/go-dockerclient v0.0.0-20171004212419-da3951ba2e9e/go.mod h1:KpcjM623fQYE9MZiTGzKhjfxXAV9wbyX2C1cyRHfhl0= +github.com/getsentry/raven-go v0.0.0-20190513200303-c977f96e1095/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= +github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.9.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -70,15 +177,61 @@ github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= +github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= +github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= +github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= +github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= +github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= +github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 h1:5ZkaAPbicIKTF2I64qf5Fh8Aa83Q/dnOafMYV0OMwjA= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -89,6 +242,7 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y 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.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -97,8 +251,18 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= +github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= +github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= +github.com/gonum/graph v0.0.0-20170401004347-50b27dea7ebb/go.mod h1:ye018NnX1zrbOLqwBvs2HqyyTouQgnL8C+qzYk1snPY= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/cadvisor v0.37.0/go.mod h1:OhDE+goNVel0eGY8mR7Ifq1QUI1in5vJBIgIpcajK/I= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -112,41 +276,104 @@ github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OI github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v0.0.0-20191024121256-f395758b854c/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= +github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5/go.mod h1:DM4VvS+hD/kDi1U1QsX2fnZowwBhqD0Dk3bRPKF/Oc8= +github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= 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.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/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.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= +github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= +github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= +github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= +github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= +github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= +github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/moby/ipvs v1.0.1/go.mod h1:2pngiyseZbIKXNv7hsKj3O9UEz30c53MT9005gt2hxQ= +github.com/moby/sys/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= 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= @@ -154,25 +381,57 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= +github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= 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/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.0.0-20191031171055-b133feaeeb2e/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc90.0.20200616040943-82d2fa4eb069/go.mod h1:3Sm6Dt7OT8z88EbdQqqcRN2oCT54jbi72tT/HqgflT8= +github.com/opencontainers/runc v1.0.0-rc91.0.20200707015106-819fcc687efb/go.mod h1:ZuXhqlr4EiRYgDrBDNfSbE4+n9JX4+V107NwAmF7sZA= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200520003142-237cc4f519e2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.5.1/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= +github.com/opencontainers/selinux v1.5.2/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= +github.com/openshift/api v0.0.0-20201019163320-c6a5ec25f267/go.mod h1:RDvBcRQMGLa3aNuDuejVBbTEQj/2i14NXdpOLqbNBvM= +github.com/openshift/apiserver-library-go v0.0.0-20201020095023-fe92bc0abdc3/go.mod h1:fGp6VNAiZ3Uzcyxgj5CahXv/+BrxyaAhXXRWWffgxwc= +github.com/openshift/build-machinery-go v0.0.0-20200917070002-f171684f77ab/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= +github.com/openshift/client-go v0.0.0-20201020074620-f8fd44879f7c/go.mod h1:yZ3u8vgWC19I9gbDMRk8//9JwG/0Sth6v7C+m6R8HXs= +github.com/openshift/client-go v0.0.0-20201020082437-7737f16e53fc/go.mod h1:yZ3u8vgWC19I9gbDMRk8//9JwG/0Sth6v7C+m6R8HXs= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= +github.com/openshift/library-go v0.0.0-20201020083322-646ad9742a1e/go.mod h1:qbwvTwCy4btqEcqU3oI59CopNgcRgZUPXG4Y2jc+B4E= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.3.0/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= 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.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -180,47 +439,124 @@ github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1: github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= 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.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= 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.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= +github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= +github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= 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.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/vishvananda/netlink v1.0.0/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.0-20200520041808-52d707b772fe/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= +go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -235,20 +571,33 @@ golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCc golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +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/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 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-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/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-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= @@ -267,21 +616,41 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/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-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 h1:5/PjkGUjvEU5Gl6BxmvKRPpqo2uNMv4rcHBMwzk/st8= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -291,39 +660,58 @@ golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= +gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.1-0.20200106000736-b8fc810ca6b5/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.1/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -339,11 +727,14 @@ google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -358,23 +749,29 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ldap.v2 v2.5.1/go.mod h1:oI0cpe/D7HRtBQl8aTg+ZmzFUAvu4lsv3eLXMLGFxWk= +gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -383,16 +780,33 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kubernetes v1.19.2/go.mod h1:yhT1/ltQajQsha3tnYc9QPFYSumGM45nlZdjf7WqE1A= +k8s.io/system-validators v1.1.2/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q= +k8s.io/utils v0.0.0-20200414100711-2df71ebbae66/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0= +sigs.k8s.io/controller-tools v0.2.8/go.mod h1:9VKHPszmf2DHz/QmHkcfZoewO6BL7pPs9uAiBVsaJSE= +sigs.k8s.io/kube-storage-version-migrator v0.0.3/go.mod h1:mXfSLkx9xbJHQsgNDDUZK/iQTs2tMbx/hsJlWe6Fthw= +sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI= diff --git a/staging/src/k8s.io/cluster-bootstrap/go.mod b/staging/src/k8s.io/cluster-bootstrap/go.mod index 1709809871a08..6b2f709fb4a4e 100644 --- a/staging/src/k8s.io/cluster-bootstrap/go.mod +++ b/staging/src/k8s.io/cluster-bootstrap/go.mod @@ -7,13 +7,16 @@ go 1.15 require ( github.com/stretchr/testify v1.4.0 gopkg.in/square/go-jose.v2 v2.2.2 - k8s.io/api v0.0.0 - k8s.io/apimachinery v0.0.0 - k8s.io/klog/v2 v2.2.0 + k8s.io/api v0.19.2 + k8s.io/apimachinery v0.19.2 + k8s.io/klog/v2 v2.3.0 ) replace ( + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apimachinery => ../apimachinery k8s.io/cluster-bootstrap => ../cluster-bootstrap + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 ) diff --git a/staging/src/k8s.io/cluster-bootstrap/go.sum b/staging/src/k8s.io/cluster-bootstrap/go.sum index e29f077635d9d..471c728108947 100644 --- a/staging/src/k8s.io/cluster-bootstrap/go.sum +++ b/staging/src/k8s.io/cluster-bootstrap/go.sum @@ -18,8 +18,6 @@ github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -72,11 +70,9 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -154,14 +150,11 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/square/go-jose.v2 v2.2.2 h1:orlkJ3myw8CN1nVQHBFfloD+L3egixIa4FvUP6RosSA= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= diff --git a/staging/src/k8s.io/code-generator/go.mod b/staging/src/k8s.io/code-generator/go.mod index 36455df8c85a7..199624ca5896b 100644 --- a/staging/src/k8s.io/code-generator/go.mod +++ b/staging/src/k8s.io/code-generator/go.mod @@ -17,10 +17,16 @@ require ( golang.org/x/net v0.0.0-20200707034311-ab3426394381 // indirect golang.org/x/text v0.3.3 // indirect golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 // indirect + gopkg.in/yaml.v2 v2.3.0 // indirect k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 - k8s.io/klog/v2 v2.2.0 + k8s.io/klog/v2 v2.3.0 k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 sigs.k8s.io/yaml v1.2.0 // indirect ) -replace k8s.io/code-generator => ../code-generator +replace ( + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 + k8s.io/code-generator => ../code-generator + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 +) diff --git a/staging/src/k8s.io/code-generator/go.sum b/staging/src/k8s.io/code-generator/go.sum index 360770597063a..4c55ee3df2b94 100644 --- a/staging/src/k8s.io/code-generator/go.sum +++ b/staging/src/k8s.io/code-generator/go.sum @@ -13,8 +13,6 @@ github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -64,8 +62,8 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -122,14 +120,11 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 h1:t4L10Qfx/p7ASH3gXCdIUtPbbIuegCoUJf3TMSFekjw= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= diff --git a/staging/src/k8s.io/component-base/go.mod b/staging/src/k8s.io/component-base/go.mod index ed398c85a9ad2..f3a5312fccd9f 100644 --- a/staging/src/k8s.io/component-base/go.mod +++ b/staging/src/k8s.io/component-base/go.mod @@ -18,17 +18,22 @@ require ( github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.4.0 go.uber.org/atomic v1.4.0 // indirect - go.uber.org/multierr v1.1.0 // indirect + go.uber.org/multierr v1.1.1-0.20180122172545-ddea229ff1df // indirect go.uber.org/zap v1.10.0 - k8s.io/apimachinery v0.0.0 - k8s.io/client-go v0.0.0 - k8s.io/klog/v2 v2.2.0 + k8s.io/apimachinery v0.19.2 + k8s.io/client-go v0.19.2 + k8s.io/klog/v2 v2.3.0 k8s.io/utils v0.0.0-20200729134348-d5654de09c73 ) replace ( + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apimachinery => ../apimachinery k8s.io/client-go => ../client-go k8s.io/component-base => ../component-base + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 ) diff --git a/staging/src/k8s.io/component-base/go.sum b/staging/src/k8s.io/component-base/go.sum index 1dd5e20f62ffa..7f05b6ad3d1af 100644 --- a/staging/src/k8s.io/component-base/go.sum +++ b/staging/src/k8s.io/component-base/go.sum @@ -68,8 +68,6 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.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 v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -160,13 +158,11 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/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/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -377,10 +373,6 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= @@ -392,7 +384,6 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= diff --git a/staging/src/k8s.io/cri-api/go.mod b/staging/src/k8s.io/cri-api/go.mod index 7c4c699933642..ff0c07798861d 100644 --- a/staging/src/k8s.io/cri-api/go.mod +++ b/staging/src/k8s.io/cri-api/go.mod @@ -16,7 +16,10 @@ require ( google.golang.org/grpc v1.27.0 google.golang.org/protobuf v1.24.0 // indirect gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect - gopkg.in/yaml.v2 v2.2.8 // indirect + gopkg.in/yaml.v2 v2.3.0 // indirect ) -replace k8s.io/cri-api => ../cri-api +replace ( + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 + k8s.io/cri-api => ../cri-api +) diff --git a/staging/src/k8s.io/cri-api/go.sum b/staging/src/k8s.io/cri-api/go.sum index 770eae3429644..a414ef04394b8 100644 --- a/staging/src/k8s.io/cri-api/go.sum +++ b/staging/src/k8s.io/cri-api/go.sum @@ -98,7 +98,6 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/staging/src/k8s.io/csi-translation-lib/go.mod b/staging/src/k8s.io/csi-translation-lib/go.mod index 05c84888997e8..c1f713cbdeeb7 100644 --- a/staging/src/k8s.io/csi-translation-lib/go.mod +++ b/staging/src/k8s.io/csi-translation-lib/go.mod @@ -6,17 +6,22 @@ go 1.15 require ( github.com/stretchr/testify v1.4.0 - k8s.io/api v0.0.0 - k8s.io/apimachinery v0.0.0 + k8s.io/api v0.19.2 + k8s.io/apimachinery v0.19.2 k8s.io/cloud-provider v0.0.0 - k8s.io/klog/v2 v2.2.0 + k8s.io/klog/v2 v2.3.0 ) replace ( + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apimachinery => ../apimachinery k8s.io/client-go => ../client-go k8s.io/cloud-provider => ../cloud-provider k8s.io/component-base => ../component-base k8s.io/csi-translation-lib => ../csi-translation-lib + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 ) diff --git a/staging/src/k8s.io/csi-translation-lib/go.sum b/staging/src/k8s.io/csi-translation-lib/go.sum index 00d64e38a7103..82cb31805db1e 100644 --- a/staging/src/k8s.io/csi-translation-lib/go.sum +++ b/staging/src/k8s.io/csi-translation-lib/go.sum @@ -61,8 +61,6 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.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 v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -146,11 +144,9 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/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/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -342,10 +338,6 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= @@ -356,7 +348,6 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= diff --git a/staging/src/k8s.io/kube-aggregator/go.mod b/staging/src/k8s.io/kube-aggregator/go.mod index b81ad222608e6..be7dc1d2f3b07 100644 --- a/staging/src/k8s.io/kube-aggregator/go.mod +++ b/staging/src/k8s.io/kube-aggregator/go.mod @@ -5,7 +5,9 @@ module k8s.io/kube-aggregator go 1.15 require ( + github.com/coreos/go-semver v0.3.0 // indirect github.com/davecgh/go-spew v1.1.1 + github.com/dustin/go-humanize v1.0.0 // indirect github.com/emicklei/go-restful v2.9.5+incompatible github.com/go-openapi/spec v0.19.3 github.com/gogo/protobuf v1.3.1 @@ -13,24 +15,30 @@ require ( github.com/spf13/cobra v1.0.0 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.4.0 + go.etcd.io/bbolt v1.3.5 // indirect golang.org/x/net v0.0.0-20200707034311-ab3426394381 - k8s.io/api v0.0.0 - k8s.io/apimachinery v0.0.0 - k8s.io/apiserver v0.0.0 - k8s.io/client-go v0.0.0 - k8s.io/code-generator v0.0.0 - k8s.io/component-base v0.0.0 - k8s.io/klog/v2 v2.2.0 + k8s.io/api v0.19.2 + k8s.io/apimachinery v0.19.2 + k8s.io/apiserver v0.19.2 + k8s.io/client-go v0.19.2 + k8s.io/code-generator v0.19.2 + k8s.io/component-base v0.19.2 + k8s.io/klog/v2 v2.3.0 k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 k8s.io/utils v0.0.0-20200729134348-d5654de09c73 ) replace ( + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apimachinery => ../apimachinery k8s.io/apiserver => ../apiserver k8s.io/client-go => ../client-go k8s.io/code-generator => ../code-generator k8s.io/component-base => ../component-base + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 k8s.io/kube-aggregator => ../kube-aggregator ) diff --git a/staging/src/k8s.io/kube-aggregator/go.sum b/staging/src/k8s.io/kube-aggregator/go.sum index 20f4aaa369a90..3d897bbd7900a 100644 --- a/staging/src/k8s.io/kube-aggregator/go.sum +++ b/staging/src/k8s.io/kube-aggregator/go.sum @@ -104,8 +104,6 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.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 v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -249,13 +247,11 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -264,7 +260,6 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= @@ -535,11 +530,6 @@ gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= @@ -552,7 +542,6 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 h1:t4L10Qfx/p7ASH3gXCdIUtPbbIuegCoUJf3TMSFekjw= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= diff --git a/staging/src/k8s.io/kube-controller-manager/go.mod b/staging/src/k8s.io/kube-controller-manager/go.mod index c4add560cbb2c..11dc2b87b2626 100644 --- a/staging/src/k8s.io/kube-controller-manager/go.mod +++ b/staging/src/k8s.io/kube-controller-manager/go.mod @@ -5,14 +5,19 @@ module k8s.io/kube-controller-manager go 1.15 require ( - k8s.io/apimachinery v0.0.0 - k8s.io/component-base v0.0.0 + k8s.io/apimachinery v0.19.2 + k8s.io/component-base v0.19.2 ) replace ( + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apimachinery => ../apimachinery k8s.io/client-go => ../client-go k8s.io/component-base => ../component-base + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 k8s.io/kube-controller-manager => ../kube-controller-manager ) diff --git a/staging/src/k8s.io/kube-controller-manager/go.sum b/staging/src/k8s.io/kube-controller-manager/go.sum index 57ebfe792b40c..d637c3350b8d8 100644 --- a/staging/src/k8s.io/kube-controller-manager/go.sum +++ b/staging/src/k8s.io/kube-controller-manager/go.sum @@ -61,8 +61,6 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.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 v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -145,11 +143,9 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/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/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -341,10 +337,6 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= @@ -355,7 +347,6 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= diff --git a/staging/src/k8s.io/kube-proxy/go.mod b/staging/src/k8s.io/kube-proxy/go.mod index 22d4aeab42f7b..c0f30f05bee26 100644 --- a/staging/src/k8s.io/kube-proxy/go.mod +++ b/staging/src/k8s.io/kube-proxy/go.mod @@ -5,14 +5,19 @@ module k8s.io/kube-proxy go 1.15 require ( - k8s.io/apimachinery v0.0.0 - k8s.io/component-base v0.0.0 + k8s.io/apimachinery v0.19.2 + k8s.io/component-base v0.19.2 ) replace ( + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apimachinery => ../apimachinery k8s.io/client-go => ../client-go k8s.io/component-base => ../component-base + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 k8s.io/kube-proxy => ../kube-proxy ) diff --git a/staging/src/k8s.io/kube-proxy/go.sum b/staging/src/k8s.io/kube-proxy/go.sum index 57ebfe792b40c..d637c3350b8d8 100644 --- a/staging/src/k8s.io/kube-proxy/go.sum +++ b/staging/src/k8s.io/kube-proxy/go.sum @@ -61,8 +61,6 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.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 v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -145,11 +143,9 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/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/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -341,10 +337,6 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= @@ -355,7 +347,6 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= diff --git a/staging/src/k8s.io/kube-scheduler/go.mod b/staging/src/k8s.io/kube-scheduler/go.mod index 43e106e34f2c4..a169f0bb7a578 100644 --- a/staging/src/k8s.io/kube-scheduler/go.mod +++ b/staging/src/k8s.io/kube-scheduler/go.mod @@ -6,16 +6,21 @@ go 1.15 require ( github.com/google/go-cmp v0.4.0 - k8s.io/api v0.0.0 - k8s.io/apimachinery v0.0.0 - k8s.io/component-base v0.0.0 + k8s.io/api v0.19.2 + k8s.io/apimachinery v0.19.2 + k8s.io/component-base v0.19.2 sigs.k8s.io/yaml v1.2.0 ) replace ( + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apimachinery => ../apimachinery k8s.io/client-go => ../client-go k8s.io/component-base => ../component-base + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 k8s.io/kube-scheduler => ../kube-scheduler ) diff --git a/staging/src/k8s.io/kube-scheduler/go.sum b/staging/src/k8s.io/kube-scheduler/go.sum index 57ebfe792b40c..d637c3350b8d8 100644 --- a/staging/src/k8s.io/kube-scheduler/go.sum +++ b/staging/src/k8s.io/kube-scheduler/go.sum @@ -61,8 +61,6 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.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 v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -145,11 +143,9 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/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/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -341,10 +337,6 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= @@ -355,7 +347,6 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= diff --git a/staging/src/k8s.io/kubectl/go.mod b/staging/src/k8s.io/kubectl/go.mod index 4757b8cbf78c0..286fb8f05f961 100644 --- a/staging/src/k8s.io/kubectl/go.mod +++ b/staging/src/k8s.io/kubectl/go.mod @@ -24,7 +24,7 @@ require ( github.com/lithammer/dedent v1.1.0 github.com/mitchellh/go-wordwrap v1.0.0 github.com/moby/term v0.0.0-20200312100748-672ec06f55cd - github.com/onsi/ginkgo v1.11.0 + github.com/onsi/ginkgo v4.5.0-origin.1+incompatible github.com/onsi/gomega v1.7.0 github.com/opencontainers/go-digest v1.0.0-rc1 // indirect github.com/russross/blackfriday v1.5.2 @@ -33,28 +33,34 @@ require ( github.com/stretchr/testify v1.4.0 github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1 // indirect golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 - gopkg.in/yaml.v2 v2.2.8 - k8s.io/api v0.0.0 - k8s.io/apimachinery v0.0.0 + gopkg.in/yaml.v2 v2.3.0 + k8s.io/api v0.19.2 + k8s.io/apimachinery v0.19.2 k8s.io/cli-runtime v0.0.0 - k8s.io/client-go v0.0.0 - k8s.io/component-base v0.0.0 - k8s.io/klog/v2 v2.2.0 + k8s.io/client-go v0.19.2 + k8s.io/component-base v0.19.2 + k8s.io/klog/v2 v2.3.0 k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 k8s.io/metrics v0.0.0 k8s.io/utils v0.0.0-20200729134348-d5654de09c73 sigs.k8s.io/kustomize v2.0.3+incompatible sigs.k8s.io/yaml v1.2.0 - vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc + vbom.ml/util v0.0.0-20180919145318-efcd4e0f9787 ) replace ( + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apimachinery => ../apimachinery k8s.io/cli-runtime => ../cli-runtime k8s.io/client-go => ../client-go k8s.io/code-generator => ../code-generator k8s.io/component-base => ../component-base + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 k8s.io/kubectl => ../kubectl k8s.io/metrics => ../metrics + vbom.ml/util => vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc ) diff --git a/staging/src/k8s.io/kubectl/go.sum b/staging/src/k8s.io/kubectl/go.sum index a3a6a68549ca3..79729eac90ddd 100644 --- a/staging/src/k8s.io/kubectl/go.sum +++ b/staging/src/k8s.io/kubectl/go.sum @@ -96,8 +96,6 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.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 v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -237,15 +235,13 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW 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/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= 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= @@ -493,11 +489,6 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= @@ -510,7 +501,6 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= diff --git a/staging/src/k8s.io/kubelet/go.mod b/staging/src/k8s.io/kubelet/go.mod index 7c5ff187d76e1..e655dfbce083c 100644 --- a/staging/src/k8s.io/kubelet/go.mod +++ b/staging/src/k8s.io/kubelet/go.mod @@ -8,15 +8,20 @@ require ( github.com/gogo/protobuf v1.3.1 golang.org/x/net v0.0.0-20200707034311-ab3426394381 google.golang.org/grpc v1.27.0 - k8s.io/api v0.0.0 - k8s.io/apimachinery v0.0.0 - k8s.io/component-base v0.0.0 + k8s.io/api v0.19.2 + k8s.io/apimachinery v0.19.2 + k8s.io/component-base v0.19.2 ) replace ( + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apimachinery => ../apimachinery k8s.io/client-go => ../client-go k8s.io/component-base => ../component-base + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 k8s.io/kubelet => ../kubelet ) diff --git a/staging/src/k8s.io/kubelet/go.sum b/staging/src/k8s.io/kubelet/go.sum index 0e5b24ecfbfb8..095291e7e22bd 100644 --- a/staging/src/k8s.io/kubelet/go.sum +++ b/staging/src/k8s.io/kubelet/go.sum @@ -61,8 +61,6 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.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 v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -148,11 +146,9 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/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/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -350,10 +346,6 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= @@ -364,7 +356,6 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= diff --git a/staging/src/k8s.io/legacy-cloud-providers/go.mod b/staging/src/k8s.io/legacy-cloud-providers/go.mod index a5004cd7c2e88..f5ee68c3fd297 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/go.mod +++ b/staging/src/k8s.io/legacy-cloud-providers/go.mod @@ -11,42 +11,61 @@ require ( github.com/Azure/go-autorest/autorest/adal v0.8.2 github.com/Azure/go-autorest/autorest/mocks v0.3.0 github.com/Azure/go-autorest/autorest/to v0.2.0 - github.com/Azure/go-autorest/autorest/validation v0.1.0 // indirect github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317 github.com/aws/aws-sdk-go v1.28.2 - github.com/dnaeon/go-vcr v1.0.1 // indirect github.com/golang/mock v1.3.1 github.com/google/go-cmp v0.4.0 github.com/gophercloud/gophercloud v0.1.0 github.com/mitchellh/mapstructure v1.1.2 github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021 - github.com/satori/go.uuid v1.2.0 // indirect github.com/stretchr/testify v1.4.0 github.com/vmware/govmomi v0.20.3 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 google.golang.org/api v0.15.1 gopkg.in/gcfg.v1 v1.2.0 - gopkg.in/warnings.v0 v0.1.1 // indirect - k8s.io/api v0.0.0 - k8s.io/apimachinery v0.0.0 - k8s.io/apiserver v0.0.0 - k8s.io/client-go v0.0.0 + k8s.io/api v0.19.2 + k8s.io/apimachinery v0.19.2 + k8s.io/apiserver v0.19.2 + k8s.io/client-go v0.19.2 k8s.io/cloud-provider v0.0.0 - k8s.io/component-base v0.0.0 + k8s.io/component-base v0.19.2 k8s.io/csi-translation-lib v0.0.0 - k8s.io/klog/v2 v2.2.0 + k8s.io/klog/v2 v2.3.0 k8s.io/utils v0.0.0-20200729134348-d5654de09c73 sigs.k8s.io/yaml v1.2.0 ) replace ( + github.com/containerd/continuity => github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc + github.com/go-bindata/go-bindata => github.com/go-bindata/go-bindata v3.1.1+incompatible + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/mattn/go-colorable => github.com/mattn/go-colorable v0.0.9 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + github.com/robfig/cron => github.com/robfig/cron v1.1.0 + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api + k8s.io/apiextensions-apiserver => ../apiextensions-apiserver k8s.io/apimachinery => ../apimachinery k8s.io/apiserver => ../apiserver + k8s.io/cli-runtime => ../cli-runtime k8s.io/client-go => ../client-go k8s.io/cloud-provider => ../cloud-provider + k8s.io/cluster-bootstrap => ../cluster-bootstrap + k8s.io/code-generator => ../code-generator k8s.io/component-base => ../component-base + k8s.io/cri-api => ../cri-api k8s.io/csi-translation-lib => ../csi-translation-lib + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 + k8s.io/kube-aggregator => ../kube-aggregator + k8s.io/kube-controller-manager => ../kube-controller-manager + k8s.io/kube-proxy => ../kube-proxy + k8s.io/kube-scheduler => ../kube-scheduler + k8s.io/kubectl => ../kubectl + k8s.io/kubelet => ../kubelet k8s.io/legacy-cloud-providers => ../legacy-cloud-providers + k8s.io/metrics => ../metrics + k8s.io/sample-apiserver => ../sample-apiserver + vbom.ml/util => vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc ) diff --git a/staging/src/k8s.io/legacy-cloud-providers/go.sum b/staging/src/k8s.io/legacy-cloud-providers/go.sum index 4c13cddb3a488..1cc25ab8fe36d 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/go.sum +++ b/staging/src/k8s.io/legacy-cloud-providers/go.sum @@ -1,3 +1,4 @@ +bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0 h1:ROfEUZz+Gh5pa62DJWXSaonyu3StP6EA6lPEXPI6mCo= @@ -44,15 +45,31 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317 h1:JhyuWIqYrstW7KHMjk/fTqU0xtMpBOHuiTA2FVc7L4E= github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317/go.mod h1:DF8FZRxMHMGv/vP2lQP6h+dYzzjpuRn24VeRiYn3qjQ= +github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= +github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990/go.mod h1:ay/0dTb7NsG8QMDfsRfLHgZo/6xAJShLe1+ePPflihk= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= +github.com/aws/aws-sdk-go v1.6.10/go.mod h1:ZRmQr0FajVIyZ4ZzBYKG5P3ZqPz9IHG41ZoMu1ADI3k= github.com/aws/aws-sdk-go v1.28.2 h1:j5IXG9CdyLfcVfICqo1PXVv+rua+QQHbkXuvuU/JF+8= github.com/aws/aws-sdk-go v1.28.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -60,31 +77,86 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce 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/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= +github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/certifi/gocertifi v0.0.0-20180905225744-ee1a9a0726d2/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= +github.com/checkpoint-restore/go-criu/v4 v4.0.2/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= +github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= +github.com/cilium/ebpf v0.0.0-20200507155900-a9f01edf17e3/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s= +github.com/cilium/ebpf v0.0.0-20200601085316-9f1617e5c574/go.mod h1:XT+cAw5wfvsodedcijoh1l9cf7v1x9FlFB/3VmF/O8s= +github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= +github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= +github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v1.0.0/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containerd/typeurl v1.0.0/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/coredns/corefile-migration v1.0.10/go.mod h1:RMy/mXdeDlYwzt0vdMEJvT2hGJ2I86/eO0UdXmH9XNI= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dnaeon/go-vcr v1.0.1 h1:r8L/HqC0Hje5AXMu1ooW8oyQyOFv4GxqpL0nRP7SLLY= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/docker/distribution v0.0.0-20180920194744-16128bbac47f/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v1.4.2-0.20200309214505-aa6a9891b09c/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libnetwork v0.0.0-20190731215715-7f13a5c99f4b/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= +github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -94,16 +166,28 @@ github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsouza/go-dockerclient v0.0.0-20171004212419-da3951ba2e9e/go.mod h1:KpcjM623fQYE9MZiTGzKhjfxXAV9wbyX2C1cyRHfhl0= +github.com/getsentry/raven-go v0.0.0-20190513200303-c977f96e1095/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= +github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.9.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -112,26 +196,63 @@ github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= +github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= +github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= +github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= +github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= +github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 h1:5ZkaAPbicIKTF2I64qf5Fh8Aa83Q/dnOafMYV0OMwjA= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -144,6 +265,7 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -152,8 +274,18 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= +github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= +github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= +github.com/gonum/graph v0.0.0-20170401004347-50b27dea7ebb/go.mod h1:ye018NnX1zrbOLqwBvs2HqyyTouQgnL8C+qzYk1snPY= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/cadvisor v0.37.0/go.mod h1:OhDE+goNVel0eGY8mR7Ifq1QUI1in5vJBIgIpcajK/I= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -173,25 +305,40 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/gophercloud/gophercloud v0.1.0 h1:P/nh25+rzXouhytV2pUHBb65fnds26Ghl8/391+sT5o= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v0.0.0-20191024121256-f395758b854c/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= +github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5/go.mod h1:DM4VvS+hD/kDi1U1QsX2fnZowwBhqD0Dk3bRPKF/Oc8= +github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= @@ -201,11 +348,16 @@ github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/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.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -215,18 +367,41 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= +github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= +github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= +github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= +github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= +github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= +github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/moby/ipvs v1.0.1/go.mod h1:2pngiyseZbIKXNv7hsKj3O9UEz30c53MT9005gt2hxQ= +github.com/moby/sys/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= 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= @@ -234,28 +409,57 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= +github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= 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/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.0.0-20191031171055-b133feaeeb2e/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc90.0.20200616040943-82d2fa4eb069/go.mod h1:3Sm6Dt7OT8z88EbdQqqcRN2oCT54jbi72tT/HqgflT8= +github.com/opencontainers/runc v1.0.0-rc91.0.20200707015106-819fcc687efb/go.mod h1:ZuXhqlr4EiRYgDrBDNfSbE4+n9JX4+V107NwAmF7sZA= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200520003142-237cc4f519e2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.5.1/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= +github.com/opencontainers/selinux v1.5.2/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwyzAJufJyiTt7s0g= +github.com/openshift/api v0.0.0-20201019163320-c6a5ec25f267/go.mod h1:RDvBcRQMGLa3aNuDuejVBbTEQj/2i14NXdpOLqbNBvM= +github.com/openshift/apiserver-library-go v0.0.0-20201020095023-fe92bc0abdc3/go.mod h1:fGp6VNAiZ3Uzcyxgj5CahXv/+BrxyaAhXXRWWffgxwc= +github.com/openshift/build-machinery-go v0.0.0-20200917070002-f171684f77ab/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= +github.com/openshift/client-go v0.0.0-20201020074620-f8fd44879f7c/go.mod h1:yZ3u8vgWC19I9gbDMRk8//9JwG/0Sth6v7C+m6R8HXs= +github.com/openshift/client-go v0.0.0-20201020082437-7737f16e53fc/go.mod h1:yZ3u8vgWC19I9gbDMRk8//9JwG/0Sth6v7C+m6R8HXs= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= +github.com/openshift/library-go v0.0.0-20201020083322-646ad9742a1e/go.mod h1:qbwvTwCy4btqEcqU3oI59CopNgcRgZUPXG4Y2jc+B4E= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.3.0/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= 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.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -263,31 +467,60 @@ github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1: github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= 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.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= 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.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= +github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021 h1:if3/24+h9Sq6eDx8UUz1SO9cT9tizyIsATfB7b4D3tc= github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= +github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= 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.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= @@ -296,15 +529,35 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/vishvananda/netlink v1.0.0/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.0-20200520041808-52d707b772fe/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vmware/govmomi v0.20.3 h1:gpw/0Ku+6RgF3jsi7fnCLmlcikBHfKBCUcu1qgc16OU= github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= +go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs= @@ -314,20 +567,30 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -342,24 +605,33 @@ golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCc golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +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/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 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-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/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-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= @@ -380,25 +652,39 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/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-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 h1:5/PjkGUjvEU5Gl6BxmvKRPpqo2uNMv4rcHBMwzk/st8= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -414,31 +700,45 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= +gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -468,8 +768,10 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaR google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= @@ -486,6 +788,7 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= @@ -498,6 +801,8 @@ gopkg.in/gcfg.v1 v1.2.0 h1:0HIbH907iBTAntm+88IJV2qmJALDAh8sPekI9Vc1fm0= gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ldap.v2 v2.5.1/go.mod h1:oI0cpe/D7HRtBQl8aTg+ZmzFUAvu4lsv3eLXMLGFxWk= +gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -505,13 +810,9 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkep gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.1 h1:XM28wIgFzaBmeZ5dNHIpWLQpt/9DGKxk+rCg/22nnYE= gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -520,17 +821,33 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kubernetes v1.19.2/go.mod h1:yhT1/ltQajQsha3tnYc9QPFYSumGM45nlZdjf7WqE1A= +k8s.io/system-validators v1.1.2/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q= +k8s.io/utils v0.0.0-20200414100711-2df71ebbae66/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0= +sigs.k8s.io/controller-tools v0.2.8/go.mod h1:9VKHPszmf2DHz/QmHkcfZoewO6BL7pPs9uAiBVsaJSE= +sigs.k8s.io/kube-storage-version-migrator v0.0.3/go.mod h1:mXfSLkx9xbJHQsgNDDUZK/iQTs2tMbx/hsJlWe6Fthw= +sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI= diff --git a/staging/src/k8s.io/metrics/go.mod b/staging/src/k8s.io/metrics/go.mod index 0c5fb64901ca6..7a4f9af0e0883 100644 --- a/staging/src/k8s.io/metrics/go.mod +++ b/staging/src/k8s.io/metrics/go.mod @@ -7,16 +7,20 @@ go 1.15 require ( github.com/gogo/protobuf v1.3.1 github.com/stretchr/testify v1.4.0 - k8s.io/api v0.0.0 - k8s.io/apimachinery v0.0.0 - k8s.io/client-go v0.0.0 - k8s.io/code-generator v0.0.0 + k8s.io/api v0.19.2 + k8s.io/apimachinery v0.19.2 + k8s.io/client-go v0.19.2 + k8s.io/code-generator v0.19.2 ) replace ( + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apimachinery => ../apimachinery k8s.io/client-go => ../client-go k8s.io/code-generator => ../code-generator + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 k8s.io/metrics => ../metrics ) diff --git a/staging/src/k8s.io/metrics/go.sum b/staging/src/k8s.io/metrics/go.sum index f8f129563cf8c..a48869aba514c 100644 --- a/staging/src/k8s.io/metrics/go.sum +++ b/staging/src/k8s.io/metrics/go.sum @@ -56,8 +56,6 @@ github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -150,13 +148,11 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -339,8 +335,6 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -351,7 +345,6 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 h1:t4L10Qfx/p7ASH3gXCdIUtPbbIuegCoUJf3TMSFekjw= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= diff --git a/staging/src/k8s.io/sample-apiserver/go.mod b/staging/src/k8s.io/sample-apiserver/go.mod index b1bc4ae1f8e6f..2c6ee603d5677 100644 --- a/staging/src/k8s.io/sample-apiserver/go.mod +++ b/staging/src/k8s.io/sample-apiserver/go.mod @@ -5,24 +5,32 @@ module k8s.io/sample-apiserver go 1.15 require ( + github.com/coreos/go-semver v0.3.0 // indirect + github.com/dustin/go-humanize v1.0.0 // indirect github.com/go-openapi/spec v0.19.3 github.com/google/gofuzz v1.1.0 github.com/spf13/cobra v1.0.0 - k8s.io/apimachinery v0.0.0 - k8s.io/apiserver v0.0.0 - k8s.io/client-go v0.0.0 - k8s.io/code-generator v0.0.0 - k8s.io/component-base v0.0.0 - k8s.io/klog/v2 v2.2.0 + go.etcd.io/bbolt v1.3.5 // indirect + k8s.io/apimachinery v0.19.2 + k8s.io/apiserver v0.19.2 + k8s.io/client-go v0.19.2 + k8s.io/code-generator v0.19.2 + k8s.io/component-base v0.19.2 + k8s.io/klog/v2 v2.3.0 k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 ) replace ( + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + go.uber.org/multierr => go.uber.org/multierr v1.1.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apimachinery => ../apimachinery k8s.io/apiserver => ../apiserver k8s.io/client-go => ../client-go k8s.io/code-generator => ../code-generator k8s.io/component-base => ../component-base + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 k8s.io/sample-apiserver => ../sample-apiserver ) diff --git a/staging/src/k8s.io/sample-apiserver/go.sum b/staging/src/k8s.io/sample-apiserver/go.sum index 2eff56678f8bb..0b216a42fc325 100644 --- a/staging/src/k8s.io/sample-apiserver/go.sum +++ b/staging/src/k8s.io/sample-apiserver/go.sum @@ -102,8 +102,6 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.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 v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -246,13 +244,11 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -261,7 +257,6 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= @@ -532,11 +527,6 @@ gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= @@ -549,7 +539,6 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 h1:t4L10Qfx/p7ASH3gXCdIUtPbbIuegCoUJf3TMSFekjw= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= diff --git a/staging/src/k8s.io/sample-cli-plugin/go.mod b/staging/src/k8s.io/sample-cli-plugin/go.mod index 6fa7242723a9a..8a5e2185855b7 100644 --- a/staging/src/k8s.io/sample-cli-plugin/go.mod +++ b/staging/src/k8s.io/sample-cli-plugin/go.mod @@ -5,16 +5,24 @@ module k8s.io/sample-cli-plugin go 1.15 require ( + github.com/emicklei/go-restful v2.9.5+incompatible // indirect + github.com/go-openapi/jsonreference v0.19.3 // indirect + github.com/go-openapi/spec v0.19.3 // indirect + github.com/mailru/easyjson v0.7.0 // indirect github.com/spf13/cobra v1.0.0 github.com/spf13/pflag v1.0.5 k8s.io/cli-runtime v0.0.0 - k8s.io/client-go v0.0.0 + k8s.io/client-go v0.19.2 ) replace ( + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apimachinery => ../apimachinery k8s.io/cli-runtime => ../cli-runtime k8s.io/client-go => ../client-go + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 k8s.io/sample-cli-plugin => ../sample-cli-plugin ) diff --git a/staging/src/k8s.io/sample-cli-plugin/go.sum b/staging/src/k8s.io/sample-cli-plugin/go.sum index 68712468b4add..11d9ff4e0e97c 100644 --- a/staging/src/k8s.io/sample-cli-plugin/go.sum +++ b/staging/src/k8s.io/sample-cli-plugin/go.sum @@ -74,8 +74,6 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2 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 v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -195,13 +193,11 @@ github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8m 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/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= 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= @@ -422,9 +418,6 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -433,7 +426,6 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= diff --git a/staging/src/k8s.io/sample-controller/go.mod b/staging/src/k8s.io/sample-controller/go.mod index af42e0daf9ad1..698d88f68ed08 100644 --- a/staging/src/k8s.io/sample-controller/go.mod +++ b/staging/src/k8s.io/sample-controller/go.mod @@ -5,17 +5,21 @@ module k8s.io/sample-controller go 1.15 require ( - k8s.io/api v0.0.0 - k8s.io/apimachinery v0.0.0 - k8s.io/client-go v0.0.0 - k8s.io/code-generator v0.0.0 - k8s.io/klog/v2 v2.2.0 + k8s.io/api v0.19.2 + k8s.io/apimachinery v0.19.2 + k8s.io/client-go v0.19.2 + k8s.io/code-generator v0.19.2 + k8s.io/klog/v2 v2.3.0 ) replace ( + github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 + github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 k8s.io/api => ../api k8s.io/apimachinery => ../apimachinery k8s.io/client-go => ../client-go k8s.io/code-generator => ../code-generator + k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 k8s.io/sample-controller => ../sample-controller ) diff --git a/staging/src/k8s.io/sample-controller/go.sum b/staging/src/k8s.io/sample-controller/go.sum index 3e6c142a2151c..bb243c8ced58a 100644 --- a/staging/src/k8s.io/sample-controller/go.sum +++ b/staging/src/k8s.io/sample-controller/go.sum @@ -56,8 +56,6 @@ github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -154,13 +152,11 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible h1:AGewrYJW8aXFkkf86sSoiO9L/a/QYKZvODVCaB/wk4o= +github.com/openshift/ginkgo v4.5.0-origin.1+incompatible/go.mod h1:8METQ1gDhl0KW+pGH4c0DIJYEN/ksVCL6hOuHPmXGnk= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -343,8 +339,6 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -355,7 +349,6 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 h1:t4L10Qfx/p7ASH3gXCdIUtPbbIuegCoUJf3TMSFekjw= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= diff --git a/vendor/BUILD b/vendor/BUILD deleted file mode 100644 index 430dad3586660..0000000000000 --- a/vendor/BUILD +++ /dev/null @@ -1,534 +0,0 @@ -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/bitbucket.org/bertimus9/systemstat:all-srcs", - "//vendor/cloud.google.com/go/compute/metadata:all-srcs", - "//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute:all-srcs", - "//vendor/github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2019-05-01/containerregistry:all-srcs", - "//vendor/github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2020-04-01/containerservice:all-srcs", - "//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network:all-srcs", - "//vendor/github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources:all-srcs", - "//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage:all-srcs", - "//vendor/github.com/Azure/azure-sdk-for-go/storage:all-srcs", - "//vendor/github.com/Azure/azure-sdk-for-go/version:all-srcs", - "//vendor/github.com/Azure/go-ansiterm:all-srcs", - "//vendor/github.com/Azure/go-autorest/autorest:all-srcs", - "//vendor/github.com/Azure/go-autorest/logger:all-srcs", - "//vendor/github.com/Azure/go-autorest/tracing:all-srcs", - "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud:all-srcs", - "//vendor/github.com/JeffAshton/win_pdh:all-srcs", - "//vendor/github.com/MakeNowJust/heredoc:all-srcs", - "//vendor/github.com/Microsoft/go-winio:all-srcs", - "//vendor/github.com/Microsoft/hcsshim:all-srcs", - "//vendor/github.com/NYTimes/gziphandler:all-srcs", - "//vendor/github.com/PuerkitoBio/purell:all-srcs", - "//vendor/github.com/PuerkitoBio/urlesc:all-srcs", - "//vendor/github.com/armon/circbuf:all-srcs", - "//vendor/github.com/asaskevich/govalidator:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/internal/ini:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/internal/sdkio:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/internal/sdkmath:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/internal/sdkrand:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/internal/sdkuri:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/internal/shareddefaults:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/internal/strings:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/private/protocol:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/service/autoscaling:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/service/ec2:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/service/ecr:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/service/elb:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/service/elbv2:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/service/kms:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/service/sts:all-srcs", - "//vendor/github.com/beorn7/perks/quantile:all-srcs", - "//vendor/github.com/blang/semver:all-srcs", - "//vendor/github.com/caddyserver/caddy/caddyfile:all-srcs", - "//vendor/github.com/cespare/xxhash/v2:all-srcs", - "//vendor/github.com/chai2010/gettext-go/gettext:all-srcs", - "//vendor/github.com/checkpoint-restore/go-criu/v4:all-srcs", - "//vendor/github.com/cilium/ebpf:all-srcs", - "//vendor/github.com/clusterhq/flocker-go:all-srcs", - "//vendor/github.com/container-storage-interface/spec/lib/go/csi:all-srcs", - "//vendor/github.com/containerd/cgroups/stats/v1:all-srcs", - "//vendor/github.com/containerd/console:all-srcs", - "//vendor/github.com/containerd/containerd/api/services/containers/v1:all-srcs", - "//vendor/github.com/containerd/containerd/api/services/tasks/v1:all-srcs", - "//vendor/github.com/containerd/containerd/api/services/version/v1:all-srcs", - "//vendor/github.com/containerd/containerd/api/types:all-srcs", - "//vendor/github.com/containerd/containerd/containers:all-srcs", - "//vendor/github.com/containerd/containerd/errdefs:all-srcs", - "//vendor/github.com/containerd/containerd/namespaces:all-srcs", - "//vendor/github.com/containerd/containerd/pkg/dialer:all-srcs", - "//vendor/github.com/containerd/ttrpc:all-srcs", - "//vendor/github.com/containernetworking/cni/libcni:all-srcs", - "//vendor/github.com/containernetworking/cni/pkg/invoke:all-srcs", - "//vendor/github.com/containernetworking/cni/pkg/types:all-srcs", - "//vendor/github.com/containernetworking/cni/pkg/utils:all-srcs", - "//vendor/github.com/containernetworking/cni/pkg/version:all-srcs", - "//vendor/github.com/coredns/corefile-migration/migration:all-srcs", - "//vendor/github.com/coreos/go-oidc:all-srcs", - "//vendor/github.com/coreos/go-semver/semver:all-srcs", - "//vendor/github.com/coreos/go-systemd/daemon:all-srcs", - "//vendor/github.com/coreos/go-systemd/journal:all-srcs", - "//vendor/github.com/coreos/go-systemd/util:all-srcs", - "//vendor/github.com/coreos/go-systemd/v22/dbus:all-srcs", - "//vendor/github.com/coreos/pkg/capnslog:all-srcs", - "//vendor/github.com/coreos/pkg/dlopen:all-srcs", - "//vendor/github.com/cpuguy83/go-md2man/v2/md2man:all-srcs", - "//vendor/github.com/cyphar/filepath-securejoin:all-srcs", - "//vendor/github.com/davecgh/go-spew/spew:all-srcs", - "//vendor/github.com/daviddengcn/go-colortext:all-srcs", - "//vendor/github.com/dgrijalva/jwt-go:all-srcs", - "//vendor/github.com/docker/distribution/digestset:all-srcs", - "//vendor/github.com/docker/distribution/reference:all-srcs", - "//vendor/github.com/docker/distribution/registry/api/errcode:all-srcs", - "//vendor/github.com/docker/docker/api:all-srcs", - "//vendor/github.com/docker/docker/client:all-srcs", - "//vendor/github.com/docker/docker/errdefs:all-srcs", - "//vendor/github.com/docker/docker/pkg/jsonmessage:all-srcs", - "//vendor/github.com/docker/docker/pkg/stdcopy:all-srcs", - "//vendor/github.com/docker/docker/pkg/term:all-srcs", - "//vendor/github.com/docker/go-connections/nat:all-srcs", - "//vendor/github.com/docker/go-connections/sockets:all-srcs", - "//vendor/github.com/docker/go-connections/tlsconfig:all-srcs", - "//vendor/github.com/docker/go-units:all-srcs", - "//vendor/github.com/docker/spdystream:all-srcs", - "//vendor/github.com/dustin/go-humanize:all-srcs", - "//vendor/github.com/elazarl/goproxy:all-srcs", - "//vendor/github.com/emicklei/go-restful:all-srcs", - "//vendor/github.com/euank/go-kmsg-parser/kmsgparser:all-srcs", - "//vendor/github.com/evanphx/json-patch:all-srcs", - "//vendor/github.com/exponent-io/jsonpath:all-srcs", - "//vendor/github.com/fatih/camelcase:all-srcs", - "//vendor/github.com/fsnotify/fsnotify:all-srcs", - "//vendor/github.com/ghodss/yaml:all-srcs", - "//vendor/github.com/go-bindata/go-bindata:all-srcs", - "//vendor/github.com/go-logr/logr:all-srcs", - "//vendor/github.com/go-openapi/analysis:all-srcs", - "//vendor/github.com/go-openapi/errors:all-srcs", - "//vendor/github.com/go-openapi/jsonpointer:all-srcs", - "//vendor/github.com/go-openapi/jsonreference:all-srcs", - "//vendor/github.com/go-openapi/loads:all-srcs", - "//vendor/github.com/go-openapi/runtime:all-srcs", - "//vendor/github.com/go-openapi/spec:all-srcs", - "//vendor/github.com/go-openapi/strfmt:all-srcs", - "//vendor/github.com/go-openapi/swag:all-srcs", - "//vendor/github.com/go-openapi/validate:all-srcs", - "//vendor/github.com/go-ozzo/ozzo-validation:all-srcs", - "//vendor/github.com/go-stack/stack:all-srcs", - "//vendor/github.com/godbus/dbus/v5:all-srcs", - "//vendor/github.com/gogo/protobuf/gogoproto:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/compare:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/defaultcheck:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/description:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/embedcheck:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/enumstringer:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/equal:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/face:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/gostring:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/marshalto:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/oneofcheck:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/populate:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/size:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/stringer:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/testgen:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/union:all-srcs", - "//vendor/github.com/gogo/protobuf/plugin/unmarshal:all-srcs", - "//vendor/github.com/gogo/protobuf/proto:all-srcs", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor:all-srcs", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:all-srcs", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/grpc:all-srcs", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/plugin:all-srcs", - "//vendor/github.com/gogo/protobuf/sortkeys:all-srcs", - "//vendor/github.com/gogo/protobuf/types:all-srcs", - "//vendor/github.com/gogo/protobuf/vanity:all-srcs", - "//vendor/github.com/golang/groupcache/lru:all-srcs", - "//vendor/github.com/golang/mock/gomock:all-srcs", - "//vendor/github.com/golang/protobuf/jsonpb:all-srcs", - "//vendor/github.com/golang/protobuf/proto:all-srcs", - "//vendor/github.com/golang/protobuf/protoc-gen-go/descriptor:all-srcs", - "//vendor/github.com/golang/protobuf/protoc-gen-go/generator:all-srcs", - "//vendor/github.com/golang/protobuf/protoc-gen-go/plugin:all-srcs", - "//vendor/github.com/golang/protobuf/ptypes:all-srcs", - "//vendor/github.com/google/btree:all-srcs", - "//vendor/github.com/google/cadvisor/accelerators:all-srcs", - "//vendor/github.com/google/cadvisor/cache/memory:all-srcs", - "//vendor/github.com/google/cadvisor/client/v2:all-srcs", - "//vendor/github.com/google/cadvisor/collector:all-srcs", - "//vendor/github.com/google/cadvisor/container:all-srcs", - "//vendor/github.com/google/cadvisor/devicemapper:all-srcs", - "//vendor/github.com/google/cadvisor/events:all-srcs", - "//vendor/github.com/google/cadvisor/fs:all-srcs", - "//vendor/github.com/google/cadvisor/info/v1:all-srcs", - "//vendor/github.com/google/cadvisor/info/v2:all-srcs", - "//vendor/github.com/google/cadvisor/machine:all-srcs", - "//vendor/github.com/google/cadvisor/manager:all-srcs", - "//vendor/github.com/google/cadvisor/metrics:all-srcs", - "//vendor/github.com/google/cadvisor/nvm:all-srcs", - "//vendor/github.com/google/cadvisor/perf:all-srcs", - "//vendor/github.com/google/cadvisor/resctrl:all-srcs", - "//vendor/github.com/google/cadvisor/stats:all-srcs", - "//vendor/github.com/google/cadvisor/storage:all-srcs", - "//vendor/github.com/google/cadvisor/summary:all-srcs", - "//vendor/github.com/google/cadvisor/utils:all-srcs", - "//vendor/github.com/google/cadvisor/version:all-srcs", - "//vendor/github.com/google/cadvisor/watcher:all-srcs", - "//vendor/github.com/google/cadvisor/zfs:all-srcs", - "//vendor/github.com/google/go-cmp/cmp:all-srcs", - "//vendor/github.com/google/gofuzz:all-srcs", - "//vendor/github.com/google/uuid:all-srcs", - "//vendor/github.com/googleapis/gax-go/v2:all-srcs", - "//vendor/github.com/googleapis/gnostic/compiler:all-srcs", - "//vendor/github.com/googleapis/gnostic/extensions:all-srcs", - "//vendor/github.com/googleapis/gnostic/openapiv2:all-srcs", - "//vendor/github.com/gophercloud/gophercloud:all-srcs", - "//vendor/github.com/gorilla/websocket:all-srcs", - "//vendor/github.com/gregjones/httpcache:all-srcs", - "//vendor/github.com/grpc-ecosystem/go-grpc-middleware:all-srcs", - "//vendor/github.com/grpc-ecosystem/go-grpc-prometheus:all-srcs", - "//vendor/github.com/grpc-ecosystem/grpc-gateway/internal:all-srcs", - "//vendor/github.com/grpc-ecosystem/grpc-gateway/runtime:all-srcs", - "//vendor/github.com/grpc-ecosystem/grpc-gateway/utilities:all-srcs", - "//vendor/github.com/hashicorp/golang-lru:all-srcs", - "//vendor/github.com/hashicorp/hcl:all-srcs", - "//vendor/github.com/heketi/heketi/client/api/go-client:all-srcs", - "//vendor/github.com/heketi/heketi/pkg/glusterfs/api:all-srcs", - "//vendor/github.com/heketi/heketi/pkg/utils:all-srcs", - "//vendor/github.com/hpcloud/tail:all-srcs", - "//vendor/github.com/imdario/mergo:all-srcs", - "//vendor/github.com/inconshreveable/mousetrap:all-srcs", - "//vendor/github.com/ishidawataru/sctp:all-srcs", - "//vendor/github.com/jmespath/go-jmespath:all-srcs", - "//vendor/github.com/jonboulle/clockwork:all-srcs", - "//vendor/github.com/json-iterator/go:all-srcs", - "//vendor/github.com/karrick/godirwalk:all-srcs", - "//vendor/github.com/konsorten/go-windows-terminal-sequences:all-srcs", - "//vendor/github.com/libopenstorage/openstorage/api:all-srcs", - "//vendor/github.com/libopenstorage/openstorage/pkg/parser:all-srcs", - "//vendor/github.com/libopenstorage/openstorage/pkg/units:all-srcs", - "//vendor/github.com/libopenstorage/openstorage/volume:all-srcs", - "//vendor/github.com/liggitt/tabwriter:all-srcs", - "//vendor/github.com/lithammer/dedent:all-srcs", - "//vendor/github.com/magiconair/properties:all-srcs", - "//vendor/github.com/mailru/easyjson/buffer:all-srcs", - "//vendor/github.com/mailru/easyjson/jlexer:all-srcs", - "//vendor/github.com/mailru/easyjson/jwriter:all-srcs", - "//vendor/github.com/matttproud/golang_protobuf_extensions/pbutil:all-srcs", - "//vendor/github.com/miekg/dns:all-srcs", - "//vendor/github.com/mindprince/gonvml:all-srcs", - "//vendor/github.com/mistifyio/go-zfs:all-srcs", - "//vendor/github.com/mitchellh/go-wordwrap:all-srcs", - "//vendor/github.com/mitchellh/mapstructure:all-srcs", - "//vendor/github.com/moby/ipvs:all-srcs", - "//vendor/github.com/moby/sys/mountinfo:all-srcs", - "//vendor/github.com/moby/term:all-srcs", - "//vendor/github.com/modern-go/concurrent:all-srcs", - "//vendor/github.com/modern-go/reflect2:all-srcs", - "//vendor/github.com/mohae/deepcopy:all-srcs", - "//vendor/github.com/morikuni/aec:all-srcs", - "//vendor/github.com/mrunalp/fileutils:all-srcs", - "//vendor/github.com/munnerz/goautoneg:all-srcs", - "//vendor/github.com/mvdan/xurls:all-srcs", - "//vendor/github.com/mxk/go-flowrate/flowrate:all-srcs", - "//vendor/github.com/onsi/ginkgo:all-srcs", - "//vendor/github.com/onsi/gomega:all-srcs", - "//vendor/github.com/opencontainers/go-digest:all-srcs", - "//vendor/github.com/opencontainers/image-spec/specs-go:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer:all-srcs", - "//vendor/github.com/opencontainers/runc/types:all-srcs", - "//vendor/github.com/opencontainers/runtime-spec/specs-go:all-srcs", - "//vendor/github.com/opencontainers/selinux/go-selinux:all-srcs", - "//vendor/github.com/opencontainers/selinux/pkg/pwalk:all-srcs", - "//vendor/github.com/pelletier/go-toml:all-srcs", - "//vendor/github.com/peterbourgon/diskv:all-srcs", - "//vendor/github.com/pkg/errors:all-srcs", - "//vendor/github.com/pmezard/go-difflib/difflib:all-srcs", - "//vendor/github.com/pquerna/cachecontrol:all-srcs", - "//vendor/github.com/prometheus/client_golang/prometheus:all-srcs", - "//vendor/github.com/prometheus/client_model/go:all-srcs", - "//vendor/github.com/prometheus/common/expfmt:all-srcs", - "//vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg:all-srcs", - "//vendor/github.com/prometheus/common/model:all-srcs", - "//vendor/github.com/prometheus/procfs:all-srcs", - "//vendor/github.com/quobyte/api:all-srcs", - "//vendor/github.com/robfig/cron:all-srcs", - "//vendor/github.com/rubiojr/go-vhd/vhd:all-srcs", - "//vendor/github.com/russross/blackfriday:all-srcs", - "//vendor/github.com/satori/go.uuid:all-srcs", - "//vendor/github.com/seccomp/libseccomp-golang:all-srcs", - "//vendor/github.com/shurcooL/sanitized_anchor_name:all-srcs", - "//vendor/github.com/sirupsen/logrus:all-srcs", - "//vendor/github.com/soheilhy/cmux:all-srcs", - "//vendor/github.com/spf13/afero:all-srcs", - "//vendor/github.com/spf13/cast:all-srcs", - "//vendor/github.com/spf13/cobra:all-srcs", - "//vendor/github.com/spf13/jwalterweatherman:all-srcs", - "//vendor/github.com/spf13/pflag:all-srcs", - "//vendor/github.com/spf13/viper:all-srcs", - "//vendor/github.com/storageos/go-api:all-srcs", - "//vendor/github.com/stretchr/objx:all-srcs", - "//vendor/github.com/stretchr/testify/assert:all-srcs", - "//vendor/github.com/stretchr/testify/mock:all-srcs", - "//vendor/github.com/stretchr/testify/require:all-srcs", - "//vendor/github.com/syndtr/gocapability/capability:all-srcs", - "//vendor/github.com/thecodeteam/goscaleio:all-srcs", - "//vendor/github.com/tmc/grpc-websocket-proxy/wsproxy:all-srcs", - "//vendor/github.com/vishvananda/netlink:all-srcs", - "//vendor/github.com/vishvananda/netns:all-srcs", - "//vendor/github.com/vmware/govmomi:all-srcs", - "//vendor/github.com/xiang90/probing:all-srcs", - "//vendor/go.etcd.io/bbolt:all-srcs", - "//vendor/go.etcd.io/etcd/auth:all-srcs", - "//vendor/go.etcd.io/etcd/client:all-srcs", - "//vendor/go.etcd.io/etcd/clientv3:all-srcs", - "//vendor/go.etcd.io/etcd/embed:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver:all-srcs", - "//vendor/go.etcd.io/etcd/integration:all-srcs", - "//vendor/go.etcd.io/etcd/lease:all-srcs", - "//vendor/go.etcd.io/etcd/mvcc:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/adt:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/contention:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/cpuutil:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/crc:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/debugutil:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/fileutil:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/flags:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/httputil:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/idutil:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/ioutil:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/logutil:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/netutil:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/pathutil:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/pbutil:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/runtime:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/schedule:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/srv:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/systemd:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/testutil:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/tlsutil:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/traceutil:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/transport:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/types:all-srcs", - "//vendor/go.etcd.io/etcd/pkg/wait:all-srcs", - "//vendor/go.etcd.io/etcd/proxy/grpcproxy:all-srcs", - "//vendor/go.etcd.io/etcd/raft:all-srcs", - "//vendor/go.etcd.io/etcd/version:all-srcs", - "//vendor/go.etcd.io/etcd/wal:all-srcs", - "//vendor/go.mongodb.org/mongo-driver/bson:all-srcs", - "//vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore:all-srcs", - "//vendor/go.opencensus.io:all-srcs", - "//vendor/go.uber.org/atomic:all-srcs", - "//vendor/go.uber.org/multierr:all-srcs", - "//vendor/go.uber.org/zap:all-srcs", - "//vendor/golang.org/x/crypto/bcrypt:all-srcs", - "//vendor/golang.org/x/crypto/blowfish:all-srcs", - "//vendor/golang.org/x/crypto/chacha20:all-srcs", - "//vendor/golang.org/x/crypto/cryptobyte:all-srcs", - "//vendor/golang.org/x/crypto/curve25519:all-srcs", - "//vendor/golang.org/x/crypto/ed25519:all-srcs", - "//vendor/golang.org/x/crypto/internal/subtle:all-srcs", - "//vendor/golang.org/x/crypto/nacl/secretbox:all-srcs", - "//vendor/golang.org/x/crypto/pbkdf2:all-srcs", - "//vendor/golang.org/x/crypto/pkcs12:all-srcs", - "//vendor/golang.org/x/crypto/poly1305:all-srcs", - "//vendor/golang.org/x/crypto/salsa20/salsa:all-srcs", - "//vendor/golang.org/x/crypto/ssh:all-srcs", - "//vendor/golang.org/x/mod/module:all-srcs", - "//vendor/golang.org/x/mod/semver:all-srcs", - "//vendor/golang.org/x/net/bpf:all-srcs", - "//vendor/golang.org/x/net/context:all-srcs", - "//vendor/golang.org/x/net/html:all-srcs", - "//vendor/golang.org/x/net/http/httpguts:all-srcs", - "//vendor/golang.org/x/net/http2:all-srcs", - "//vendor/golang.org/x/net/idna:all-srcs", - "//vendor/golang.org/x/net/internal/iana:all-srcs", - "//vendor/golang.org/x/net/internal/socket:all-srcs", - "//vendor/golang.org/x/net/internal/socks:all-srcs", - "//vendor/golang.org/x/net/internal/timeseries:all-srcs", - "//vendor/golang.org/x/net/ipv4:all-srcs", - "//vendor/golang.org/x/net/ipv6:all-srcs", - "//vendor/golang.org/x/net/proxy:all-srcs", - "//vendor/golang.org/x/net/trace:all-srcs", - "//vendor/golang.org/x/net/websocket:all-srcs", - "//vendor/golang.org/x/oauth2:all-srcs", - "//vendor/golang.org/x/sync/singleflight:all-srcs", - "//vendor/golang.org/x/sys/cpu:all-srcs", - "//vendor/golang.org/x/sys/internal/unsafeheader:all-srcs", - "//vendor/golang.org/x/sys/unix:all-srcs", - "//vendor/golang.org/x/sys/windows:all-srcs", - "//vendor/golang.org/x/text/encoding:all-srcs", - "//vendor/golang.org/x/text/internal/language:all-srcs", - "//vendor/golang.org/x/text/internal/tag:all-srcs", - "//vendor/golang.org/x/text/internal/utf8internal:all-srcs", - "//vendor/golang.org/x/text/language:all-srcs", - "//vendor/golang.org/x/text/runes:all-srcs", - "//vendor/golang.org/x/text/secure/bidirule:all-srcs", - "//vendor/golang.org/x/text/transform:all-srcs", - "//vendor/golang.org/x/text/unicode/bidi:all-srcs", - "//vendor/golang.org/x/text/unicode/norm:all-srcs", - "//vendor/golang.org/x/text/width:all-srcs", - "//vendor/golang.org/x/time/rate:all-srcs", - "//vendor/golang.org/x/tools/benchmark/parse:all-srcs", - "//vendor/golang.org/x/tools/container/intsets:all-srcs", - "//vendor/golang.org/x/tools/go/ast/astutil:all-srcs", - "//vendor/golang.org/x/tools/go/gcexportdata:all-srcs", - "//vendor/golang.org/x/tools/go/internal/gcimporter:all-srcs", - "//vendor/golang.org/x/tools/go/internal/packagesdriver:all-srcs", - "//vendor/golang.org/x/tools/go/packages:all-srcs", - "//vendor/golang.org/x/tools/imports:all-srcs", - "//vendor/golang.org/x/tools/internal/event:all-srcs", - "//vendor/golang.org/x/tools/internal/fastwalk:all-srcs", - "//vendor/golang.org/x/tools/internal/gocommand:all-srcs", - "//vendor/golang.org/x/tools/internal/gopathwalk:all-srcs", - "//vendor/golang.org/x/tools/internal/imports:all-srcs", - "//vendor/golang.org/x/tools/internal/packagesinternal:all-srcs", - "//vendor/golang.org/x/tools/internal/typesinternal:all-srcs", - "//vendor/golang.org/x/xerrors:all-srcs", - "//vendor/gonum.org/v1/gonum/blas:all-srcs", - "//vendor/gonum.org/v1/gonum/floats:all-srcs", - "//vendor/gonum.org/v1/gonum/graph:all-srcs", - "//vendor/gonum.org/v1/gonum/internal/asm/c128:all-srcs", - "//vendor/gonum.org/v1/gonum/internal/asm/c64:all-srcs", - "//vendor/gonum.org/v1/gonum/internal/asm/f32:all-srcs", - "//vendor/gonum.org/v1/gonum/internal/asm/f64:all-srcs", - "//vendor/gonum.org/v1/gonum/internal/cmplx64:all-srcs", - "//vendor/gonum.org/v1/gonum/internal/math32:all-srcs", - "//vendor/gonum.org/v1/gonum/lapack:all-srcs", - "//vendor/gonum.org/v1/gonum/mat:all-srcs", - "//vendor/google.golang.org/api/compute/v0.alpha:all-srcs", - "//vendor/google.golang.org/api/compute/v0.beta:all-srcs", - "//vendor/google.golang.org/api/compute/v1:all-srcs", - "//vendor/google.golang.org/api/container/v1:all-srcs", - "//vendor/google.golang.org/api/googleapi:all-srcs", - "//vendor/google.golang.org/api/internal:all-srcs", - "//vendor/google.golang.org/api/logging/v2beta1:all-srcs", - "//vendor/google.golang.org/api/monitoring/v3:all-srcs", - "//vendor/google.golang.org/api/option:all-srcs", - "//vendor/google.golang.org/api/pubsub/v1:all-srcs", - "//vendor/google.golang.org/api/tpu/v1:all-srcs", - "//vendor/google.golang.org/api/transport/http:all-srcs", - "//vendor/google.golang.org/appengine:all-srcs", - "//vendor/google.golang.org/genproto/googleapis/api/httpbody:all-srcs", - "//vendor/google.golang.org/genproto/googleapis/rpc/status:all-srcs", - "//vendor/google.golang.org/genproto/protobuf/field_mask:all-srcs", - "//vendor/google.golang.org/grpc:all-srcs", - "//vendor/google.golang.org/protobuf/encoding/protojson:all-srcs", - "//vendor/google.golang.org/protobuf/encoding/prototext:all-srcs", - "//vendor/google.golang.org/protobuf/encoding/protowire:all-srcs", - "//vendor/google.golang.org/protobuf/internal/descfmt:all-srcs", - "//vendor/google.golang.org/protobuf/internal/descopts:all-srcs", - "//vendor/google.golang.org/protobuf/internal/detectknown:all-srcs", - "//vendor/google.golang.org/protobuf/internal/detrand:all-srcs", - "//vendor/google.golang.org/protobuf/internal/encoding/defval:all-srcs", - "//vendor/google.golang.org/protobuf/internal/encoding/json:all-srcs", - "//vendor/google.golang.org/protobuf/internal/encoding/messageset:all-srcs", - "//vendor/google.golang.org/protobuf/internal/encoding/tag:all-srcs", - "//vendor/google.golang.org/protobuf/internal/encoding/text:all-srcs", - "//vendor/google.golang.org/protobuf/internal/errors:all-srcs", - "//vendor/google.golang.org/protobuf/internal/fieldnum:all-srcs", - "//vendor/google.golang.org/protobuf/internal/fieldsort:all-srcs", - "//vendor/google.golang.org/protobuf/internal/filedesc:all-srcs", - "//vendor/google.golang.org/protobuf/internal/filetype:all-srcs", - "//vendor/google.golang.org/protobuf/internal/flags:all-srcs", - "//vendor/google.golang.org/protobuf/internal/genname:all-srcs", - "//vendor/google.golang.org/protobuf/internal/impl:all-srcs", - "//vendor/google.golang.org/protobuf/internal/mapsort:all-srcs", - "//vendor/google.golang.org/protobuf/internal/pragma:all-srcs", - "//vendor/google.golang.org/protobuf/internal/set:all-srcs", - "//vendor/google.golang.org/protobuf/internal/strs:all-srcs", - "//vendor/google.golang.org/protobuf/internal/version:all-srcs", - "//vendor/google.golang.org/protobuf/proto:all-srcs", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:all-srcs", - "//vendor/google.golang.org/protobuf/reflect/protoregistry:all-srcs", - "//vendor/google.golang.org/protobuf/runtime/protoiface:all-srcs", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:all-srcs", - "//vendor/google.golang.org/protobuf/types/descriptorpb:all-srcs", - "//vendor/google.golang.org/protobuf/types/known/anypb:all-srcs", - "//vendor/google.golang.org/protobuf/types/known/durationpb:all-srcs", - "//vendor/google.golang.org/protobuf/types/known/fieldmaskpb:all-srcs", - "//vendor/google.golang.org/protobuf/types/known/timestamppb:all-srcs", - "//vendor/google.golang.org/protobuf/types/known/wrapperspb:all-srcs", - "//vendor/google.golang.org/protobuf/types/pluginpb:all-srcs", - "//vendor/gopkg.in/fsnotify.v1:all-srcs", - "//vendor/gopkg.in/gcfg.v1:all-srcs", - "//vendor/gopkg.in/inf.v0:all-srcs", - "//vendor/gopkg.in/natefinch/lumberjack.v2:all-srcs", - "//vendor/gopkg.in/square/go-jose.v2:all-srcs", - "//vendor/gopkg.in/tomb.v1:all-srcs", - "//vendor/gopkg.in/warnings.v0:all-srcs", - "//vendor/gopkg.in/yaml.v2:all-srcs", - "//vendor/k8s.io/gengo/args:all-srcs", - "//vendor/k8s.io/gengo/examples/deepcopy-gen/generators:all-srcs", - "//vendor/k8s.io/gengo/examples/defaulter-gen/generators:all-srcs", - "//vendor/k8s.io/gengo/examples/import-boss/generators:all-srcs", - "//vendor/k8s.io/gengo/examples/set-gen/generators:all-srcs", - "//vendor/k8s.io/gengo/examples/set-gen/sets:all-srcs", - "//vendor/k8s.io/gengo/generator:all-srcs", - "//vendor/k8s.io/gengo/namer:all-srcs", - "//vendor/k8s.io/gengo/parser:all-srcs", - "//vendor/k8s.io/gengo/types:all-srcs", - "//vendor/k8s.io/heapster/metrics/api/v1/types:all-srcs", - "//vendor/k8s.io/klog/v2:all-srcs", - "//vendor/k8s.io/kube-openapi/cmd/openapi-gen:all-srcs", - "//vendor/k8s.io/kube-openapi/pkg/aggregator:all-srcs", - "//vendor/k8s.io/kube-openapi/pkg/builder:all-srcs", - "//vendor/k8s.io/kube-openapi/pkg/common:all-srcs", - "//vendor/k8s.io/kube-openapi/pkg/generators:all-srcs", - "//vendor/k8s.io/kube-openapi/pkg/handler:all-srcs", - "//vendor/k8s.io/kube-openapi/pkg/schemaconv:all-srcs", - "//vendor/k8s.io/kube-openapi/pkg/util:all-srcs", - "//vendor/k8s.io/system-validators/validators:all-srcs", - "//vendor/k8s.io/utils/buffer:all-srcs", - "//vendor/k8s.io/utils/clock:all-srcs", - "//vendor/k8s.io/utils/exec:all-srcs", - "//vendor/k8s.io/utils/inotify:all-srcs", - "//vendor/k8s.io/utils/integer:all-srcs", - "//vendor/k8s.io/utils/io:all-srcs", - "//vendor/k8s.io/utils/keymutex:all-srcs", - "//vendor/k8s.io/utils/mount:all-srcs", - "//vendor/k8s.io/utils/net:all-srcs", - "//vendor/k8s.io/utils/nsenter:all-srcs", - "//vendor/k8s.io/utils/path:all-srcs", - "//vendor/k8s.io/utils/pointer:all-srcs", - "//vendor/k8s.io/utils/strings:all-srcs", - "//vendor/k8s.io/utils/trace:all-srcs", - "//vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client:all-srcs", - "//vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/commands/build:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/constants:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/expansion:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/factory:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/fs:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/git:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/gvk:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/ifc:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/image:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/internal/error:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/loader:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/patch:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/resid:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/resmap:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/resource:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/target:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/transformers:all-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/types:all-srcs", - "//vendor/sigs.k8s.io/structured-merge-diff/v4/fieldpath:all-srcs", - "//vendor/sigs.k8s.io/structured-merge-diff/v4/merge:all-srcs", - "//vendor/sigs.k8s.io/structured-merge-diff/v4/schema:all-srcs", - "//vendor/sigs.k8s.io/structured-merge-diff/v4/typed:all-srcs", - "//vendor/sigs.k8s.io/structured-merge-diff/v4/value:all-srcs", - "//vendor/sigs.k8s.io/yaml:all-srcs", - "//vendor/vbom.ml/util/sortorder:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/OWNERS b/vendor/OWNERS index 0f5d2f6734e50..32ac698b5e409 100644 --- a/vendor/OWNERS +++ b/vendor/OWNERS @@ -1,4 +1,4 @@ -# See the OWNERS docs at https://go.k8s.io/owners +See the OWNERS docs at https://go.k8s.io/owners approvers: - dep-approvers diff --git a/vendor/bitbucket.org/bertimus9/systemstat/BUILD b/vendor/bitbucket.org/bertimus9/systemstat/BUILD deleted file mode 100644 index ac59981d1f886..0000000000000 --- a/vendor/bitbucket.org/bertimus9/systemstat/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "systemstat.go", - "systemstat_ex.go", - "systemstat_linux.go", - "utils.go", - ], - importmap = "k8s.io/kubernetes/vendor/bitbucket.org/bertimus9/systemstat", - importpath = "bitbucket.org/bertimus9/systemstat", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/cloud.google.com/go/compute/metadata/BUILD b/vendor/cloud.google.com/go/compute/metadata/BUILD deleted file mode 100644 index 646d2c11ea6a5..0000000000000 --- a/vendor/cloud.google.com/go/compute/metadata/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["metadata.go"], - importmap = "k8s.io/kubernetes/vendor/cloud.google.com/go/compute/metadata", - importpath = "cloud.google.com/go/compute/metadata", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute/BUILD b/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute/BUILD deleted file mode 100644 index 3c70e22d3999e..0000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute/BUILD +++ /dev/null @@ -1,66 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "availabilitysets.go", - "client.go", - "containerservices.go", - "dedicatedhostgroups.go", - "dedicatedhosts.go", - "diskencryptionsets.go", - "disks.go", - "galleries.go", - "galleryapplications.go", - "galleryapplicationversions.go", - "galleryimages.go", - "galleryimageversions.go", - "images.go", - "loganalytics.go", - "models.go", - "operations.go", - "proximityplacementgroups.go", - "resourceskus.go", - "snapshots.go", - "sshpublickeys.go", - "usage.go", - "version.go", - "virtualmachineextensionimages.go", - "virtualmachineextensions.go", - "virtualmachineimages.go", - "virtualmachineruncommands.go", - "virtualmachines.go", - "virtualmachinescalesetextensions.go", - "virtualmachinescalesetrollingupgrades.go", - "virtualmachinescalesets.go", - "virtualmachinescalesetvmextensions.go", - "virtualmachinescalesetvms.go", - "virtualmachinesizes.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute", - importpath = "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-12-01/compute", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/Azure/azure-sdk-for-go/version:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/date:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/validation:go_default_library", - "//vendor/github.com/Azure/go-autorest/tracing:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2019-05-01/containerregistry/BUILD b/vendor/github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2019-05-01/containerregistry/BUILD deleted file mode 100644 index d1ce5b6229cc8..0000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2019-05-01/containerregistry/BUILD +++ /dev/null @@ -1,42 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "models.go", - "operations.go", - "registries.go", - "replications.go", - "runs.go", - "tasks.go", - "version.go", - "webhooks.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2019-05-01/containerregistry", - importpath = "github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2019-05-01/containerregistry", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/Azure/azure-sdk-for-go/version:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/date:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/validation:go_default_library", - "//vendor/github.com/Azure/go-autorest/tracing:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2020-04-01/containerservice/BUILD b/vendor/github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2020-04-01/containerservice/BUILD deleted file mode 100644 index af38c3f717af2..0000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2020-04-01/containerservice/BUILD +++ /dev/null @@ -1,40 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "agentpools.go", - "client.go", - "containerservices.go", - "managedclusters.go", - "models.go", - "openshiftmanagedclusters.go", - "operations.go", - "version.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2020-04-01/containerservice", - importpath = "github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2020-04-01/containerservice", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/Azure/azure-sdk-for-go/version:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/validation:go_default_library", - "//vendor/github.com/Azure/go-autorest/tracing:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network/BUILD b/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network/BUILD deleted file mode 100644 index 73ba2e8acc778..0000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network/BUILD +++ /dev/null @@ -1,118 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "applicationgateways.go", - "applicationsecuritygroups.go", - "availabledelegations.go", - "availableendpointservices.go", - "availableprivateendpointtypes.go", - "availableresourcegroupdelegations.go", - "azurefirewallfqdntags.go", - "azurefirewalls.go", - "bastionhosts.go", - "bgpservicecommunities.go", - "client.go", - "connectionmonitors.go", - "ddoscustompolicies.go", - "ddosprotectionplans.go", - "defaultsecurityrules.go", - "expressroutecircuitauthorizations.go", - "expressroutecircuitconnections.go", - "expressroutecircuitpeerings.go", - "expressroutecircuits.go", - "expressrouteconnections.go", - "expressroutecrossconnectionpeerings.go", - "expressroutecrossconnections.go", - "expressroutegateways.go", - "expressroutelinks.go", - "expressrouteports.go", - "expressrouteportslocations.go", - "expressrouteserviceproviders.go", - "firewallpolicies.go", - "firewallpolicyrulegroups.go", - "hubvirtualnetworkconnections.go", - "inboundnatrules.go", - "interfaceipconfigurations.go", - "interfaceloadbalancers.go", - "interfacesgroup.go", - "interfacetapconfigurations.go", - "loadbalancerbackendaddresspools.go", - "loadbalancerfrontendipconfigurations.go", - "loadbalancerloadbalancingrules.go", - "loadbalancernetworkinterfaces.go", - "loadbalanceroutboundrules.go", - "loadbalancerprobes.go", - "loadbalancers.go", - "localnetworkgateways.go", - "models.go", - "natgateways.go", - "operations.go", - "p2svpngateways.go", - "p2svpnserverconfigurations.go", - "packetcaptures.go", - "peerexpressroutecircuitconnections.go", - "privateendpoints.go", - "privatelinkservices.go", - "profiles.go", - "publicipaddresses.go", - "publicipprefixes.go", - "resourcenavigationlinks.go", - "routefilterrules.go", - "routefilters.go", - "routes.go", - "routetables.go", - "securitygroups.go", - "securityrules.go", - "serviceassociationlinks.go", - "serviceendpointpolicies.go", - "serviceendpointpolicydefinitions.go", - "servicetags.go", - "subnets.go", - "usages.go", - "version.go", - "virtualhubs.go", - "virtualnetworkgatewayconnections.go", - "virtualnetworkgateways.go", - "virtualnetworkpeerings.go", - "virtualnetworks.go", - "virtualnetworktaps.go", - "virtualwans.go", - "vpnconnections.go", - "vpngateways.go", - "vpnlinkconnections.go", - "vpnsitelinkconnections.go", - "vpnsitelinks.go", - "vpnsites.go", - "vpnsitesconfiguration.go", - "watchers.go", - "webapplicationfirewallpolicies.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network", - importpath = "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-06-01/network", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/Azure/azure-sdk-for-go/version:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/date:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/validation:go_default_library", - "//vendor/github.com/Azure/go-autorest/tracing:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources/BUILD b/vendor/github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources/BUILD deleted file mode 100644 index 4583dad7cbf84..0000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources/BUILD +++ /dev/null @@ -1,42 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "deploymentoperations.go", - "deployments.go", - "groups.go", - "models.go", - "providers.go", - "resources.go", - "tags.go", - "version.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources", - importpath = "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2017-05-10/resources", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/Azure/azure-sdk-for-go/version:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/date:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/validation:go_default_library", - "//vendor/github.com/Azure/go-autorest/tracing:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage/BUILD b/vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage/BUILD deleted file mode 100644 index dba3eb4d5913e..0000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage/BUILD +++ /dev/null @@ -1,53 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "accounts.go", - "blobcontainers.go", - "blobservices.go", - "client.go", - "encryptionscopes.go", - "fileservices.go", - "fileshares.go", - "managementpolicies.go", - "models.go", - "objectreplicationpolicies.go", - "operations.go", - "privateendpointconnections.go", - "privatelinkresources.go", - "queue.go", - "queueservices.go", - "skus.go", - "table.go", - "tableservices.go", - "usages.go", - "version.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage", - importpath = "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/Azure/azure-sdk-for-go/version:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/date:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/validation:go_default_library", - "//vendor/github.com/Azure/go-autorest/tracing:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/storage/BUILD b/vendor/github.com/Azure/azure-sdk-for-go/storage/BUILD deleted file mode 100644 index ab0602d66eb98..0000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/storage/BUILD +++ /dev/null @@ -1,58 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "appendblob.go", - "authorization.go", - "blob.go", - "blobsasuri.go", - "blobserviceclient.go", - "blockblob.go", - "client.go", - "commonsasuri.go", - "container.go", - "copyblob.go", - "directory.go", - "entity.go", - "file.go", - "fileserviceclient.go", - "leaseblob.go", - "message.go", - "odata.go", - "pageblob.go", - "queue.go", - "queuesasuri.go", - "queueserviceclient.go", - "share.go", - "storagepolicy.go", - "storageservice.go", - "table.go", - "table_batch.go", - "tableserviceclient.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/azure-sdk-for-go/storage", - importpath = "github.com/Azure/azure-sdk-for-go/storage", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/Azure/azure-sdk-for-go/version:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", - "//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library", - "//vendor/github.com/satori/go.uuid:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/version/BUILD b/vendor/github.com/Azure/azure-sdk-for-go/version/BUILD deleted file mode 100644 index 74defa6111cf9..0000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/version/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["version.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/azure-sdk-for-go/version", - importpath = "github.com/Azure/azure-sdk-for-go/version", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/go-ansiterm/BUILD b/vendor/github.com/Azure/go-ansiterm/BUILD deleted file mode 100644 index d4d03afe167e5..0000000000000 --- a/vendor/github.com/Azure/go-ansiterm/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "constants.go", - "context.go", - "csi_entry_state.go", - "csi_param_state.go", - "escape_intermediate_state.go", - "escape_state.go", - "event_handler.go", - "ground_state.go", - "osc_string_state.go", - "parser.go", - "parser_action_helpers.go", - "parser_actions.go", - "states.go", - "utilities.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/go-ansiterm", - importpath = "github.com/Azure/go-ansiterm", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/Azure/go-ansiterm/winterm:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/go-ansiterm/winterm/BUILD b/vendor/github.com/Azure/go-ansiterm/winterm/BUILD deleted file mode 100644 index 7864290b85a40..0000000000000 --- a/vendor/github.com/Azure/go-ansiterm/winterm/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ansi.go", - "api.go", - "attr_translation.go", - "cursor_helpers.go", - "erase_helpers.go", - "scroll_helper.go", - "utilities.go", - "win_event_handler.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/go-ansiterm/winterm", - importpath = "github.com/Azure/go-ansiterm/winterm", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/Azure/go-ansiterm:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/go-autorest/autorest/BUILD b/vendor/github.com/Azure/go-autorest/autorest/BUILD deleted file mode 100644 index cbb14611ca1f7..0000000000000 --- a/vendor/github.com/Azure/go-autorest/autorest/BUILD +++ /dev/null @@ -1,51 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "authorization.go", - "authorization_sas.go", - "authorization_storage.go", - "autorest.go", - "client.go", - "error.go", - "preparer.go", - "responder.go", - "retriablerequest.go", - "retriablerequest_1.7.go", - "retriablerequest_1.8.go", - "sender.go", - "utility.go", - "version.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/go-autorest/autorest", - importpath = "github.com/Azure/go-autorest/autorest", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/Azure/go-autorest/autorest/adal:go_default_library", - "//vendor/github.com/Azure/go-autorest/logger:go_default_library", - "//vendor/github.com/Azure/go-autorest/tracing:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/Azure/go-autorest/autorest/adal:all-srcs", - "//vendor/github.com/Azure/go-autorest/autorest/azure:all-srcs", - "//vendor/github.com/Azure/go-autorest/autorest/date:all-srcs", - "//vendor/github.com/Azure/go-autorest/autorest/mocks:all-srcs", - "//vendor/github.com/Azure/go-autorest/autorest/to:all-srcs", - "//vendor/github.com/Azure/go-autorest/autorest/validation:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/go-autorest/autorest/adal/BUILD b/vendor/github.com/Azure/go-autorest/autorest/adal/BUILD deleted file mode 100644 index 13898e5e642ce..0000000000000 --- a/vendor/github.com/Azure/go-autorest/autorest/adal/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "config.go", - "devicetoken.go", - "persist.go", - "sender.go", - "token.go", - "version.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/go-autorest/autorest/adal", - importpath = "github.com/Azure/go-autorest/autorest/adal", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/Azure/go-autorest/autorest/date:go_default_library", - "//vendor/github.com/Azure/go-autorest/tracing:go_default_library", - "//vendor/github.com/dgrijalva/jwt-go:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/go-autorest/autorest/azure/BUILD b/vendor/github.com/Azure/go-autorest/autorest/azure/BUILD deleted file mode 100644 index 12d1e06a0ee44..0000000000000 --- a/vendor/github.com/Azure/go-autorest/autorest/azure/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "async.go", - "azure.go", - "environments.go", - "metadata_environment.go", - "rp.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/go-autorest/autorest/azure", - importpath = "github.com/Azure/go-autorest/autorest/azure", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", - "//vendor/github.com/Azure/go-autorest/tracing:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/go-autorest/autorest/date/BUILD b/vendor/github.com/Azure/go-autorest/autorest/date/BUILD deleted file mode 100644 index 19fce15d84f4b..0000000000000 --- a/vendor/github.com/Azure/go-autorest/autorest/date/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "date.go", - "time.go", - "timerfc1123.go", - "unixtime.go", - "utility.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/go-autorest/autorest/date", - importpath = "github.com/Azure/go-autorest/autorest/date", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/go-autorest/autorest/mocks/BUILD b/vendor/github.com/Azure/go-autorest/autorest/mocks/BUILD deleted file mode 100644 index 701650a9313dc..0000000000000 --- a/vendor/github.com/Azure/go-autorest/autorest/mocks/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "helpers.go", - "mocks.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/go-autorest/autorest/mocks", - importpath = "github.com/Azure/go-autorest/autorest/mocks", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/go-autorest/autorest/to/BUILD b/vendor/github.com/Azure/go-autorest/autorest/to/BUILD deleted file mode 100644 index e435f0e4d67ee..0000000000000 --- a/vendor/github.com/Azure/go-autorest/autorest/to/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["convert.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/go-autorest/autorest/to", - importpath = "github.com/Azure/go-autorest/autorest/to", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/go-autorest/autorest/validation/BUILD b/vendor/github.com/Azure/go-autorest/autorest/validation/BUILD deleted file mode 100644 index 411f4e8a24f79..0000000000000 --- a/vendor/github.com/Azure/go-autorest/autorest/validation/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "error.go", - "validation.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/go-autorest/autorest/validation", - importpath = "github.com/Azure/go-autorest/autorest/validation", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/go-autorest/logger/BUILD b/vendor/github.com/Azure/go-autorest/logger/BUILD deleted file mode 100644 index d43bee7c193f6..0000000000000 --- a/vendor/github.com/Azure/go-autorest/logger/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["logger.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/go-autorest/logger", - importpath = "github.com/Azure/go-autorest/logger", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Azure/go-autorest/tracing/BUILD b/vendor/github.com/Azure/go-autorest/tracing/BUILD deleted file mode 100644 index 1040ed1474536..0000000000000 --- a/vendor/github.com/Azure/go-autorest/tracing/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["tracing.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/Azure/go-autorest/tracing", - importpath = "github.com/Azure/go-autorest/tracing", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/BUILD b/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/BUILD deleted file mode 100644 index ebea024bfeb5d..0000000000000 --- a/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/BUILD +++ /dev/null @@ -1,48 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "constants.go", - "context.go", - "doc.go", - "gce_projects.go", - "gen.go", - "op.go", - "project.go", - "ratelimit.go", - "service.go", - "utils.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud", - importpath = "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter:go_default_library", - "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta:go_default_library", - "//vendor/google.golang.org/api/compute/v0.alpha:go_default_library", - "//vendor/google.golang.org/api/compute/v0.beta:go_default_library", - "//vendor/google.golang.org/api/compute/v1:go_default_library", - "//vendor/google.golang.org/api/googleapi:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter:all-srcs", - "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta:all-srcs", - "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter/BUILD b/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter/BUILD deleted file mode 100644 index 42f08ec975bd3..0000000000000 --- a/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["filter.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter", - importpath = "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter", - visibility = ["//visibility:public"], - deps = ["//vendor/k8s.io/klog/v2:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta/BUILD b/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta/BUILD deleted file mode 100644 index 6c72226191252..0000000000000 --- a/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "key.go", - "meta.go", - "method.go", - "service.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta", - importpath = "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/api/compute/v0.alpha:go_default_library", - "//vendor/google.golang.org/api/compute/v0.beta:go_default_library", - "//vendor/google.golang.org/api/compute/v1:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock/BUILD b/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock/BUILD deleted file mode 100644 index 2da95097b2c7c..0000000000000 --- a/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["mock.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock", - importpath = "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/mock", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud:go_default_library", - "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter:go_default_library", - "//vendor/github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta:go_default_library", - "//vendor/google.golang.org/api/compute/v0.alpha:go_default_library", - "//vendor/google.golang.org/api/compute/v0.beta:go_default_library", - "//vendor/google.golang.org/api/compute/v1:go_default_library", - "//vendor/google.golang.org/api/googleapi:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/JeffAshton/win_pdh/BUILD b/vendor/github.com/JeffAshton/win_pdh/BUILD deleted file mode 100644 index 345333dd99374..0000000000000 --- a/vendor/github.com/JeffAshton/win_pdh/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["pdh.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/JeffAshton/win_pdh", - importpath = "github.com/JeffAshton/win_pdh", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/MakeNowJust/heredoc/BUILD b/vendor/github.com/MakeNowJust/heredoc/BUILD deleted file mode 100644 index fa240b5a4fa03..0000000000000 --- a/vendor/github.com/MakeNowJust/heredoc/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["heredoc.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/MakeNowJust/heredoc", - importpath = "github.com/MakeNowJust/heredoc", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/go-winio/BUILD b/vendor/github.com/Microsoft/go-winio/BUILD deleted file mode 100644 index d80d5ba304225..0000000000000 --- a/vendor/github.com/Microsoft/go-winio/BUILD +++ /dev/null @@ -1,47 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "backup.go", - "ea.go", - "file.go", - "fileinfo.go", - "hvsock.go", - "pipe.go", - "privilege.go", - "reparse.go", - "sd.go", - "syscall.go", - "zsyscall_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/go-winio", - importpath = "github.com/Microsoft/go-winio", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/Microsoft/go-winio/pkg/guid:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/Microsoft/go-winio/pkg/guid:all-srcs", - "//vendor/github.com/Microsoft/go-winio/vhd:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/go-winio/pkg/guid/BUILD b/vendor/github.com/Microsoft/go-winio/pkg/guid/BUILD deleted file mode 100644 index 0ab1ff5a853a6..0000000000000 --- a/vendor/github.com/Microsoft/go-winio/pkg/guid/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["guid.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/go-winio/pkg/guid", - importpath = "github.com/Microsoft/go-winio/pkg/guid", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/sys/windows:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/go-winio/vhd/BUILD b/vendor/github.com/Microsoft/go-winio/vhd/BUILD deleted file mode 100644 index 756a7870d18b2..0000000000000 --- a/vendor/github.com/Microsoft/go-winio/vhd/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "vhd.go", - "zvhd.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/go-winio/vhd", - importpath = "github.com/Microsoft/go-winio/vhd", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/sys/windows:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/BUILD b/vendor/github.com/Microsoft/hcsshim/BUILD deleted file mode 100644 index af6dd8c754a7f..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/BUILD +++ /dev/null @@ -1,74 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "container.go", - "errors.go", - "hcsshim.go", - "hnsendpoint.go", - "hnsglobals.go", - "hnsnetwork.go", - "hnspolicy.go", - "hnspolicylist.go", - "hnssupport.go", - "interface.go", - "layer.go", - "process.go", - "zsyscall_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim", - importpath = "github.com/Microsoft/hcsshim", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/Microsoft/go-winio/pkg/guid:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/hcs:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/hcserror:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/hns:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/mergemaps:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/schema1:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/wclayer:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/Microsoft/hcsshim/hcn:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/cni:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/cow:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/hcs:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/hcserror:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/hns:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/interop:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/log:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/logfields:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/longpath:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/mergemaps:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/oc:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/regstate:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/runhcs:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/safefile:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/schema1:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/schema2:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/timeout:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/vmcompute:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/internal/wclayer:all-srcs", - "//vendor/github.com/Microsoft/hcsshim/osversion:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/hcn/BUILD b/vendor/github.com/Microsoft/hcsshim/hcn/BUILD deleted file mode 100644 index fe3fa3781981c..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/hcn/BUILD +++ /dev/null @@ -1,50 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "hcn.go", - "hcnendpoint.go", - "hcnerrors.go", - "hcnglobals.go", - "hcnloadbalancer.go", - "hcnnamespace.go", - "hcnnetwork.go", - "hcnpolicy.go", - "hcnroute.go", - "hcnsupport.go", - "zsyscall_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/hcn", - importpath = "github.com/Microsoft/hcsshim/hcn", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/Microsoft/go-winio/pkg/guid:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/cni:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/hcs:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/hcserror:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/interop:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/regstate:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/runhcs:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/cni/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/cni/BUILD deleted file mode 100644 index 186789abca4af..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/cni/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["registry.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/cni", - importpath = "github.com/Microsoft/hcsshim/internal/cni", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], - deps = [ - "//vendor/github.com/Microsoft/go-winio/pkg/guid:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/regstate:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/cow/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/cow/BUILD deleted file mode 100644 index e0887ad84bee6..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/cow/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["cow.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/cow", - importpath = "github.com/Microsoft/hcsshim/internal/cow", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], - deps = [ - "//vendor/github.com/Microsoft/hcsshim/internal/schema1:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/schema2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hcs/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/hcs/BUILD deleted file mode 100644 index 25cfffbde92ba..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/hcs/BUILD +++ /dev/null @@ -1,50 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "callback.go", - "errors.go", - "process.go", - "service.go", - "syscall.go", - "system.go", - "utils.go", - "waithelper.go", - "zsyscall_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/hcs", - importpath = "github.com/Microsoft/hcsshim/internal/hcs", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], - deps = [ - "//vendor/github.com/Microsoft/go-winio:go_default_library", - "//vendor/github.com/Microsoft/go-winio/vhd:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/cow:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/interop:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/log:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/logfields:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/oc:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/schema1:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/schema2:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/timeout:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/vmcompute:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/go.opencensus.io/trace:go_default_library", - "//vendor/golang.org/x/sys/windows:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hcserror/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/hcserror/BUILD deleted file mode 100644 index 5a622b05f774a..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/hcserror/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["hcserror.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/hcserror", - importpath = "github.com/Microsoft/hcsshim/internal/hcserror", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hns/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/hns/BUILD deleted file mode 100644 index 370561674c468..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/hns/BUILD +++ /dev/null @@ -1,44 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "hns.go", - "hnsendpoint.go", - "hnsfuncs.go", - "hnsglobals.go", - "hnsnetwork.go", - "hnspolicy.go", - "hnspolicylist.go", - "hnssupport.go", - "namespace.go", - "zsyscall_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/hns", - importpath = "github.com/Microsoft/hcsshim/internal/hns", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], - deps = [ - "//vendor/github.com/Microsoft/hcsshim/internal/hcserror:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/interop:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/interop/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/interop/BUILD deleted file mode 100644 index e591140d2c8e6..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/interop/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "interop.go", - "zsyscall_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/interop", - importpath = "github.com/Microsoft/hcsshim/internal/interop", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], - deps = select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/log/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/log/BUILD deleted file mode 100644 index 266e768c01b37..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/log/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["g.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/log", - importpath = "github.com/Microsoft/hcsshim/internal/log", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], - deps = [ - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/go.opencensus.io/trace:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/logfields/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/logfields/BUILD deleted file mode 100644 index f00a7a9f3fa37..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/logfields/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["fields.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/logfields", - importpath = "github.com/Microsoft/hcsshim/internal/logfields", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/longpath/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/longpath/BUILD deleted file mode 100644 index 912f0defb0009..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/longpath/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["longpath.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/longpath", - importpath = "github.com/Microsoft/hcsshim/internal/longpath", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/mergemaps/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/mergemaps/BUILD deleted file mode 100644 index 61c512d219ef2..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/mergemaps/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["merge.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/mergemaps", - importpath = "github.com/Microsoft/hcsshim/internal/mergemaps", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/oc/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/oc/BUILD deleted file mode 100644 index 14614d875bf09..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/oc/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "exporter.go", - "span.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/oc", - importpath = "github.com/Microsoft/hcsshim/internal/oc", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], - deps = [ - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/go.opencensus.io/trace:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/regstate/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/regstate/BUILD deleted file mode 100644 index 26a04e50eeb51..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/regstate/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "regstate.go", - "zsyscall_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/regstate", - importpath = "github.com/Microsoft/hcsshim/internal/regstate", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], - deps = [ - "//vendor/golang.org/x/sys/windows/registry:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/runhcs/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/runhcs/BUILD deleted file mode 100644 index 4138adc0c858b..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/runhcs/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "container.go", - "util.go", - "vm.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/runhcs", - importpath = "github.com/Microsoft/hcsshim/internal/runhcs", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], - deps = [ - "//vendor/github.com/Microsoft/go-winio:go_default_library", - "//vendor/github.com/Microsoft/go-winio/pkg/guid:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/safefile/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/safefile/BUILD deleted file mode 100644 index b88e3a0433050..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/safefile/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "safeopen.go", - "zsyscall_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/safefile", - importpath = "github.com/Microsoft/hcsshim/internal/safefile", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], - deps = [ - "//vendor/github.com/Microsoft/go-winio:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/longpath:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema1/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/schema1/BUILD deleted file mode 100644 index 36bfa879b8474..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/schema1/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["schema1.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/schema1", - importpath = "github.com/Microsoft/hcsshim/internal/schema1", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], - deps = [ - "//vendor/github.com/Microsoft/go-winio/pkg/guid:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/schema2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/schema2/BUILD deleted file mode 100644 index 743c4da4f9eeb..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/schema2/BUILD +++ /dev/null @@ -1,121 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "attachment.go", - "battery.go", - "cache_query_stats_response.go", - "chipset.go", - "close_handle.go", - "com_port.go", - "compute_system.go", - "configuration.go", - "console_size.go", - "container.go", - "container_credential_guard_add_instance_request.go", - "container_credential_guard_hv_socket_service_config.go", - "container_credential_guard_instance.go", - "container_credential_guard_modify_operation.go", - "container_credential_guard_operation_request.go", - "container_credential_guard_remove_instance_request.go", - "container_credential_guard_state.go", - "container_credential_guard_system_info.go", - "container_memory_information.go", - "device.go", - "devices.go", - "enhanced_mode_video.go", - "flexible_io_device.go", - "guest_connection.go", - "guest_connection_info.go", - "guest_crash_reporting.go", - "guest_os.go", - "guest_state.go", - "hosted_system.go", - "hv_socket.go", - "hv_socket_2.go", - "hv_socket_address.go", - "hv_socket_service_config.go", - "hv_socket_system_config.go", - "keyboard.go", - "layer.go", - "linux_kernel_direct.go", - "logical_processor.go", - "mapped_directory.go", - "mapped_pipe.go", - "memory.go", - "memory_2.go", - "memory_information_for_vm.go", - "memory_stats.go", - "modification_request.go", - "modify_setting_request.go", - "mouse.go", - "network_adapter.go", - "networking.go", - "pause_notification.go", - "pause_options.go", - "plan9.go", - "plan9_share.go", - "process_details.go", - "process_modify_request.go", - "process_parameters.go", - "process_status.go", - "processor.go", - "processor_2.go", - "processor_stats.go", - "processor_topology.go", - "properties.go", - "property_query.go", - "property_type.go", - "rdp_connection_options.go", - "registry_changes.go", - "registry_key.go", - "registry_value.go", - "restore_state.go", - "save_options.go", - "scsi.go", - "service_properties.go", - "shared_memory_configuration.go", - "shared_memory_region.go", - "shared_memory_region_info.go", - "silo_properties.go", - "statistics.go", - "storage.go", - "storage_qo_s.go", - "storage_stats.go", - "topology.go", - "uefi.go", - "uefi_boot_entry.go", - "version.go", - "video_monitor.go", - "virtual_machine.go", - "virtual_node_info.go", - "virtual_p_mem_controller.go", - "virtual_p_mem_device.go", - "virtual_pci_device.go", - "virtual_pci_function.go", - "virtual_smb.go", - "virtual_smb_share.go", - "virtual_smb_share_options.go", - "vm_memory.go", - "windows_crash_reporting.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/schema2", - importpath = "github.com/Microsoft/hcsshim/internal/schema2", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], - deps = ["//vendor/github.com/containerd/cgroups/stats/v1:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/timeout/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/timeout/BUILD deleted file mode 100644 index f8b745544ee61..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/timeout/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["timeout.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/timeout", - importpath = "github.com/Microsoft/hcsshim/internal/timeout", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/BUILD deleted file mode 100644 index b3bb2a5713640..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/vmcompute/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "vmcompute.go", - "zsyscall_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/vmcompute", - importpath = "github.com/Microsoft/hcsshim/internal/vmcompute", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], - deps = [ - "//vendor/github.com/Microsoft/hcsshim/internal/interop:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/log:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/logfields:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/oc:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/timeout:go_default_library", - "//vendor/go.opencensus.io/trace:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/BUILD b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/BUILD deleted file mode 100644 index 27e82f931294d..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/BUILD +++ /dev/null @@ -1,64 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "activatelayer.go", - "baselayer.go", - "createlayer.go", - "createscratchlayer.go", - "deactivatelayer.go", - "destroylayer.go", - "expandscratchsize.go", - "exportlayer.go", - "getlayermountpath.go", - "getsharedbaseimages.go", - "grantvmaccess.go", - "importlayer.go", - "layerexists.go", - "layerid.go", - "layerutils.go", - "legacy.go", - "nametoguid.go", - "preparelayer.go", - "processimage.go", - "unpreparelayer.go", - "wclayer.go", - "zsyscall_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/internal/wclayer", - importpath = "github.com/Microsoft/hcsshim/internal/wclayer", - visibility = ["//vendor/github.com/Microsoft/hcsshim:__subpackages__"], - deps = [ - "//vendor/github.com/Microsoft/go-winio:go_default_library", - "//vendor/github.com/Microsoft/go-winio/pkg/guid:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/hcserror:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/interop:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/log:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/longpath:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/oc:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/internal/safefile:go_default_library", - "//vendor/github.com/Microsoft/hcsshim/osversion:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/go.opencensus.io/trace:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/Microsoft/hcsshim/osversion/BUILD b/vendor/github.com/Microsoft/hcsshim/osversion/BUILD deleted file mode 100644 index a48de72eb965d..0000000000000 --- a/vendor/github.com/Microsoft/hcsshim/osversion/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "osversion_windows.go", - "windowsbuilds.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/Microsoft/hcsshim/osversion", - importpath = "github.com/Microsoft/hcsshim/osversion", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/NYTimes/gziphandler/BUILD b/vendor/github.com/NYTimes/gziphandler/BUILD deleted file mode 100644 index bf10161eed351..0000000000000 --- a/vendor/github.com/NYTimes/gziphandler/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "gzip.go", - "gzip_go18.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/NYTimes/gziphandler", - importpath = "github.com/NYTimes/gziphandler", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/PuerkitoBio/purell/BUILD b/vendor/github.com/PuerkitoBio/purell/BUILD deleted file mode 100644 index d6c2cb111adf3..0000000000000 --- a/vendor/github.com/PuerkitoBio/purell/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["purell.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/PuerkitoBio/purell", - importpath = "github.com/PuerkitoBio/purell", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/PuerkitoBio/urlesc:go_default_library", - "//vendor/golang.org/x/net/idna:go_default_library", - "//vendor/golang.org/x/text/unicode/norm:go_default_library", - "//vendor/golang.org/x/text/width:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/PuerkitoBio/urlesc/BUILD b/vendor/github.com/PuerkitoBio/urlesc/BUILD deleted file mode 100644 index 70e9ba4af62e6..0000000000000 --- a/vendor/github.com/PuerkitoBio/urlesc/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["urlesc.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/PuerkitoBio/urlesc", - importpath = "github.com/PuerkitoBio/urlesc", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/armon/circbuf/BUILD b/vendor/github.com/armon/circbuf/BUILD deleted file mode 100644 index 7834f001c7b7c..0000000000000 --- a/vendor/github.com/armon/circbuf/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["circbuf.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/armon/circbuf", - importpath = "github.com/armon/circbuf", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/asaskevich/govalidator/BUILD b/vendor/github.com/asaskevich/govalidator/BUILD deleted file mode 100644 index 23a1ef7ac5c92..0000000000000 --- a/vendor/github.com/asaskevich/govalidator/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "arrays.go", - "converter.go", - "error.go", - "numerics.go", - "patterns.go", - "types.go", - "utils.go", - "validator.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/asaskevich/govalidator", - importpath = "github.com/asaskevich/govalidator", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/BUILD deleted file mode 100644 index 0f3f2653695f6..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/BUILD +++ /dev/null @@ -1,59 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "config.go", - "context_1_5.go", - "context_1_9.go", - "context_background_1_5.go", - "context_background_1_7.go", - "context_sleep.go", - "convert_types.go", - "doc.go", - "errors.go", - "jsonvalue.go", - "logger.go", - "types.go", - "url.go", - "url_1_7.go", - "version.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws", - importpath = "github.com/aws/aws-sdk-go/aws", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/endpoints:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/sdkio:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/awsutil:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/client:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/corehandlers:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/csm:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/defaults:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/ec2metadata:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/endpoints:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/request:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/session:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/awserr/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/awserr/BUILD deleted file mode 100644 index 07cef4441b2e2..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/awserr/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "error.go", - "types.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/awserr", - importpath = "github.com/aws/aws-sdk-go/aws/awserr", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/awsutil/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/awsutil/BUILD deleted file mode 100644 index 187a5c2d6af11..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/awsutil/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "copy.go", - "equal.go", - "path_value.go", - "prettify.go", - "string_value.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/awsutil", - importpath = "github.com/aws/aws-sdk-go/aws/awsutil", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/jmespath/go-jmespath:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/client/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/client/BUILD deleted file mode 100644 index ec41fb0b29fef..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/client/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "default_retryer.go", - "logger.go", - "no_op_retryer.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/client", - importpath = "github.com/aws/aws-sdk-go/aws/client", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/sdkrand:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/BUILD deleted file mode 100644 index 2f14a482c6976..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["client_info.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/client/metadata", - importpath = "github.com/aws/aws-sdk-go/aws/client/metadata", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/BUILD deleted file mode 100644 index 483654bb63c35..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "handlers.go", - "param_validator.go", - "user_agent.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/corehandlers", - importpath = "github.com/aws/aws-sdk-go/aws/corehandlers", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/credentials/BUILD deleted file mode 100644 index b627ce37a2a96..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/credentials/BUILD +++ /dev/null @@ -1,40 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "chain_provider.go", - "credentials.go", - "env_provider.go", - "shared_credentials_provider.go", - "static_provider.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/credentials", - importpath = "github.com/aws/aws-sdk-go/aws/credentials", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/ini:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/shareddefaults:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/BUILD deleted file mode 100644 index 05f47d12fb4b8..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["ec2_role_provider.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds", - importpath = "github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/ec2metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/sdkuri:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/BUILD deleted file mode 100644 index af7666c1e20d4..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["provider.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds", - importpath = "github.com/aws/aws-sdk-go/aws/credentials/endpointcreds", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/BUILD deleted file mode 100644 index 6c31f05f52fa8..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["provider.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds", - importpath = "github.com/aws/aws-sdk-go/aws/credentials/processcreds", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/sdkio:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/BUILD deleted file mode 100644 index cfa4dbd68915f..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "assume_role_provider.go", - "web_identity_provider.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds", - importpath = "github.com/aws/aws-sdk-go/aws/credentials/stscreds", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/sdkrand:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/service/sts:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/service/sts/stsiface:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/csm/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/csm/BUILD deleted file mode 100644 index c7123a6bf0a4a..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/csm/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "enable.go", - "metric.go", - "metric_chan.go", - "metric_exception.go", - "reporter.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/csm", - importpath = "github.com/aws/aws-sdk-go/aws/csm", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/defaults/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/defaults/BUILD deleted file mode 100644 index 21072b1e53c3b..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/defaults/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "defaults.go", - "shared_config.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/defaults", - importpath = "github.com/aws/aws-sdk-go/aws/defaults", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/corehandlers:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/ec2metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/endpoints:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/shareddefaults:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/BUILD deleted file mode 100644 index 3c70477b984a2..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "service.go", - "token_provider.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata", - importpath = "github.com/aws/aws-sdk-go/aws/ec2metadata", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/corehandlers:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/sdkuri:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/BUILD deleted file mode 100644 index 3dd7d18072182..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decode.go", - "defaults.go", - "dep_service_ids.go", - "doc.go", - "endpoints.go", - "legacy_regions.go", - "v3model.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/endpoints", - importpath = "github.com/aws/aws-sdk-go/aws/endpoints", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/request/BUILD deleted file mode 100644 index 6b167e0638ede..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/request/BUILD +++ /dev/null @@ -1,45 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "connection_reset_error.go", - "handlers.go", - "http_request.go", - "offset_reader.go", - "request.go", - "request_1_7.go", - "request_1_8.go", - "request_context.go", - "request_context_1_6.go", - "request_pagination.go", - "retryer.go", - "timeout_read_closer.go", - "validation.go", - "waiter.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/request", - importpath = "github.com/aws/aws-sdk-go/aws/request", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/sdkio:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/session/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/session/BUILD deleted file mode 100644 index 70c3481af43a3..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/session/BUILD +++ /dev/null @@ -1,47 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cabundle_transport.go", - "cabundle_transport_1_5.go", - "cabundle_transport_1_6.go", - "credentials.go", - "doc.go", - "env_config.go", - "session.go", - "shared_config.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/session", - importpath = "github.com/aws/aws-sdk-go/aws/session", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/corehandlers:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/csm:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/defaults:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/endpoints:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/ini:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/shareddefaults:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/BUILD b/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/BUILD deleted file mode 100644 index 1166534047319..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "header_rules.go", - "options.go", - "stream.go", - "uri_path.go", - "v4.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/aws/signer/v4", - importpath = "github.com/aws/aws-sdk-go/aws/signer/v4", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/sdkio:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/strings:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/rest:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/BUILD b/vendor/github.com/aws/aws-sdk-go/internal/ini/BUILD deleted file mode 100644 index f710f9fcaf3ad..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/internal/ini/BUILD +++ /dev/null @@ -1,47 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ast.go", - "comma_token.go", - "comment_token.go", - "doc.go", - "empty_token.go", - "expression.go", - "ini.go", - "ini_lexer.go", - "ini_parser.go", - "literal_tokens.go", - "newline_token.go", - "number_helper.go", - "op_tokens.go", - "parse_error.go", - "parse_stack.go", - "sep_tokens.go", - "skipper.go", - "statement.go", - "value_util.go", - "visitor.go", - "walker.go", - "ws_token.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/internal/ini", - importpath = "github.com/aws/aws-sdk-go/internal/ini", - visibility = ["//vendor/github.com/aws/aws-sdk-go:__subpackages__"], - deps = ["//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/internal/sdkio/BUILD b/vendor/github.com/aws/aws-sdk-go/internal/sdkio/BUILD deleted file mode 100644 index 76f62d877e3c0..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/internal/sdkio/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "byte.go", - "io_go1.6.go", - "io_go1.7.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/internal/sdkio", - importpath = "github.com/aws/aws-sdk-go/internal/sdkio", - visibility = ["//vendor/github.com/aws/aws-sdk-go:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/BUILD b/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/BUILD deleted file mode 100644 index 60e8c3caeeedb..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "floor.go", - "floor_go1.9.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/internal/sdkmath", - importpath = "github.com/aws/aws-sdk-go/internal/sdkmath", - visibility = ["//vendor/github.com/aws/aws-sdk-go:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/BUILD b/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/BUILD deleted file mode 100644 index b537f70538a21..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "locked_source.go", - "read.go", - "read_1_5.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/internal/sdkrand", - importpath = "github.com/aws/aws-sdk-go/internal/sdkrand", - visibility = ["//vendor/github.com/aws/aws-sdk-go:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/BUILD b/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/BUILD deleted file mode 100644 index 9f6a667c16066..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["path.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/internal/sdkuri", - importpath = "github.com/aws/aws-sdk-go/internal/sdkuri", - visibility = ["//vendor/github.com/aws/aws-sdk-go:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/BUILD b/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/BUILD deleted file mode 100644 index 86f88123733f2..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ecs_container.go", - "shared_config.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults", - importpath = "github.com/aws/aws-sdk-go/internal/shareddefaults", - visibility = ["//vendor/github.com/aws/aws-sdk-go:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/internal/strings/BUILD b/vendor/github.com/aws/aws-sdk-go/internal/strings/BUILD deleted file mode 100644 index 6a516155daa02..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/internal/strings/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["strings.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/internal/strings", - importpath = "github.com/aws/aws-sdk-go/internal/strings", - visibility = ["//vendor/github.com/aws/aws-sdk-go:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/BUILD b/vendor/github.com/aws/aws-sdk-go/private/protocol/BUILD deleted file mode 100644 index ccf3cb073b76b..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/BUILD +++ /dev/null @@ -1,48 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "host.go", - "host_prefix.go", - "idempotency.go", - "jsonvalue.go", - "payload.go", - "protocol.go", - "timestamp.go", - "unmarshal.go", - "unmarshal_error.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/private/protocol", - importpath = "github.com/aws/aws-sdk-go/private/protocol", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/sdkmath:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/query:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/rest:all-srcs", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/BUILD b/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/BUILD deleted file mode 100644 index 5475e4eac1c12..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "build.go", - "unmarshal.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query", - importpath = "github.com/aws/aws-sdk-go/private/protocol/ec2query", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/BUILD b/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/BUILD deleted file mode 100644 index d6aff0bd75591..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "build.go", - "unmarshal.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil", - importpath = "github.com/aws/aws-sdk-go/private/protocol/json/jsonutil", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/BUILD b/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/BUILD deleted file mode 100644 index 0010f3e60cf19..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "jsonrpc.go", - "unmarshal_error.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc", - importpath = "github.com/aws/aws-sdk-go/private/protocol/jsonrpc", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/rest:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/BUILD b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/BUILD deleted file mode 100644 index f638f561376b9..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "build.go", - "unmarshal.go", - "unmarshal_error.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/private/protocol/query", - importpath = "github.com/aws/aws-sdk-go/private/protocol/query", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/BUILD b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/BUILD deleted file mode 100644 index 114bf02f53579..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["queryutil.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil", - importpath = "github.com/aws/aws-sdk-go/private/protocol/query/queryutil", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/BUILD b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/BUILD deleted file mode 100644 index 9187f4ccf5969..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "build.go", - "payload.go", - "unmarshal.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/private/protocol/rest", - importpath = "github.com/aws/aws-sdk-go/private/protocol/rest", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/internal/strings:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/BUILD b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/BUILD deleted file mode 100644 index 1d3f3ab0ba379..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "build.go", - "sort.go", - "unmarshal.go", - "xml_to_struct.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil", - importpath = "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/service/autoscaling/BUILD b/vendor/github.com/aws/aws-sdk-go/service/autoscaling/BUILD deleted file mode 100644 index f6fedbc2008d3..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/service/autoscaling/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "doc.go", - "errors.go", - "service.go", - "waiters.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/service/autoscaling", - importpath = "github.com/aws/aws-sdk-go/service/autoscaling", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/query:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/service/ec2/BUILD b/vendor/github.com/aws/aws-sdk-go/service/ec2/BUILD deleted file mode 100644 index ffe2f2c22676f..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/service/ec2/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "customizations.go", - "doc.go", - "errors.go", - "service.go", - "waiters.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/service/ec2", - importpath = "github.com/aws/aws-sdk-go/service/ec2", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/endpoints:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/service/ecr/BUILD b/vendor/github.com/aws/aws-sdk-go/service/ecr/BUILD deleted file mode 100644 index 0438f92e6eb2d..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/service/ecr/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "doc.go", - "errors.go", - "service.go", - "waiters.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/service/ecr", - importpath = "github.com/aws/aws-sdk-go/service/ecr", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/service/elb/BUILD b/vendor/github.com/aws/aws-sdk-go/service/elb/BUILD deleted file mode 100644 index a8cf5c02c2609..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/service/elb/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "doc.go", - "errors.go", - "service.go", - "waiters.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/service/elb", - importpath = "github.com/aws/aws-sdk-go/service/elb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/query:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/service/elbv2/BUILD b/vendor/github.com/aws/aws-sdk-go/service/elbv2/BUILD deleted file mode 100644 index 05778dec14ed0..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/service/elbv2/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "doc.go", - "errors.go", - "service.go", - "waiters.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/service/elbv2", - importpath = "github.com/aws/aws-sdk-go/service/elbv2", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/query:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/service/kms/BUILD b/vendor/github.com/aws/aws-sdk-go/service/kms/BUILD deleted file mode 100644 index 2da091781eff4..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/service/kms/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "doc.go", - "errors.go", - "service.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/service/kms", - importpath = "github.com/aws/aws-sdk-go/service/kms", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/service/sts/BUILD b/vendor/github.com/aws/aws-sdk-go/service/sts/BUILD deleted file mode 100644 index 3f9b213ccdbaf..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/service/sts/BUILD +++ /dev/null @@ -1,42 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "customizations.go", - "doc.go", - "errors.go", - "service.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/service/sts", - importpath = "github.com/aws/aws-sdk-go/service/sts", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/private/protocol/query:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/aws/aws-sdk-go/service/sts/stsiface:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/BUILD b/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/BUILD deleted file mode 100644 index b343717896ca6..0000000000000 --- a/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["interface.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface", - importpath = "github.com/aws/aws-sdk-go/service/sts/stsiface", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/service/sts:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/beorn7/perks/quantile/BUILD b/vendor/github.com/beorn7/perks/quantile/BUILD deleted file mode 100644 index 645d5721b8ad6..0000000000000 --- a/vendor/github.com/beorn7/perks/quantile/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["stream.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/beorn7/perks/quantile", - importpath = "github.com/beorn7/perks/quantile", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/blang/semver/BUILD b/vendor/github.com/blang/semver/BUILD deleted file mode 100644 index bac884eadb5c4..0000000000000 --- a/vendor/github.com/blang/semver/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "json.go", - "range.go", - "semver.go", - "sort.go", - "sql.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/blang/semver", - importpath = "github.com/blang/semver", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/caddyserver/caddy/caddyfile/BUILD b/vendor/github.com/caddyserver/caddy/caddyfile/BUILD deleted file mode 100644 index 8621c62fdea75..0000000000000 --- a/vendor/github.com/caddyserver/caddy/caddyfile/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dispenser.go", - "json.go", - "lexer.go", - "parse.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/caddyserver/caddy/caddyfile", - importpath = "github.com/caddyserver/caddy/caddyfile", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/cespare/xxhash/v2/BUILD b/vendor/github.com/cespare/xxhash/v2/BUILD deleted file mode 100644 index c5e9dff8f773d..0000000000000 --- a/vendor/github.com/cespare/xxhash/v2/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "xxhash.go", - "xxhash_amd64.go", - "xxhash_amd64.s", - "xxhash_other.go", - "xxhash_unsafe.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/cespare/xxhash/v2", - importpath = "github.com/cespare/xxhash/v2", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/chai2010/gettext-go/gettext/BUILD b/vendor/github.com/chai2010/gettext-go/gettext/BUILD deleted file mode 100644 index ada30d83d7d69..0000000000000 --- a/vendor/github.com/chai2010/gettext-go/gettext/BUILD +++ /dev/null @@ -1,42 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "caller.go", - "doc.go", - "domain.go", - "domain_helper.go", - "fs.go", - "gettext.go", - "local.go", - "tr.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/chai2010/gettext-go/gettext", - importpath = "github.com/chai2010/gettext-go/gettext", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/chai2010/gettext-go/gettext/mo:go_default_library", - "//vendor/github.com/chai2010/gettext-go/gettext/plural:go_default_library", - "//vendor/github.com/chai2010/gettext-go/gettext/po:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/chai2010/gettext-go/gettext/mo:all-srcs", - "//vendor/github.com/chai2010/gettext-go/gettext/plural:all-srcs", - "//vendor/github.com/chai2010/gettext-go/gettext/po:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/chai2010/gettext-go/gettext/mo/BUILD b/vendor/github.com/chai2010/gettext-go/gettext/mo/BUILD deleted file mode 100644 index d07e85cb53263..0000000000000 --- a/vendor/github.com/chai2010/gettext-go/gettext/mo/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "encoder.go", - "file.go", - "header.go", - "message.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/chai2010/gettext-go/gettext/mo", - importpath = "github.com/chai2010/gettext-go/gettext/mo", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/chai2010/gettext-go/gettext/plural/BUILD b/vendor/github.com/chai2010/gettext-go/gettext/plural/BUILD deleted file mode 100644 index abc4d8f651a6d..0000000000000 --- a/vendor/github.com/chai2010/gettext-go/gettext/plural/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "formula.go", - "table.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/chai2010/gettext-go/gettext/plural", - importpath = "github.com/chai2010/gettext-go/gettext/plural", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/chai2010/gettext-go/gettext/po/BUILD b/vendor/github.com/chai2010/gettext-go/gettext/po/BUILD deleted file mode 100644 index 1abd31c22f342..0000000000000 --- a/vendor/github.com/chai2010/gettext-go/gettext/po/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "comment.go", - "doc.go", - "file.go", - "header.go", - "line_reader.go", - "message.go", - "re.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/chai2010/gettext-go/gettext/po", - importpath = "github.com/chai2010/gettext-go/gettext/po", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/checkpoint-restore/go-criu/v4/BUILD b/vendor/github.com/checkpoint-restore/go-criu/v4/BUILD deleted file mode 100644 index 0f51ef68091e4..0000000000000 --- a/vendor/github.com/checkpoint-restore/go-criu/v4/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "main.go", - "notify.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/checkpoint-restore/go-criu/v4", - importpath = "github.com/checkpoint-restore/go-criu/v4", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/checkpoint-restore/go-criu/v4/rpc:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/checkpoint-restore/go-criu/v4/rpc:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/checkpoint-restore/go-criu/v4/rpc/BUILD b/vendor/github.com/checkpoint-restore/go-criu/v4/rpc/BUILD deleted file mode 100644 index e6e2cb302b2c6..0000000000000 --- a/vendor/github.com/checkpoint-restore/go-criu/v4/rpc/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["rpc.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/checkpoint-restore/go-criu/v4/rpc", - importpath = "github.com/checkpoint-restore/go-criu/v4/rpc", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/golang/protobuf/proto:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/cilium/ebpf/BUILD b/vendor/github.com/cilium/ebpf/BUILD deleted file mode 100644 index bc8c774c3b31b..0000000000000 --- a/vendor/github.com/cilium/ebpf/BUILD +++ /dev/null @@ -1,45 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "abi.go", - "collection.go", - "doc.go", - "elf_reader.go", - "linker.go", - "map.go", - "marshalers.go", - "prog.go", - "syscalls.go", - "types.go", - "types_string.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/cilium/ebpf", - importpath = "github.com/cilium/ebpf", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/cilium/ebpf/asm:go_default_library", - "//vendor/github.com/cilium/ebpf/internal:go_default_library", - "//vendor/github.com/cilium/ebpf/internal/btf:go_default_library", - "//vendor/github.com/cilium/ebpf/internal/unix:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/cilium/ebpf/asm:all-srcs", - "//vendor/github.com/cilium/ebpf/internal:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/cilium/ebpf/asm/BUILD b/vendor/github.com/cilium/ebpf/asm/BUILD deleted file mode 100644 index 826f0a873d3f2..0000000000000 --- a/vendor/github.com/cilium/ebpf/asm/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "alu.go", - "alu_string.go", - "doc.go", - "func.go", - "func_string.go", - "instruction.go", - "jump.go", - "jump_string.go", - "load_store.go", - "load_store_string.go", - "opcode.go", - "opcode_string.go", - "register.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/cilium/ebpf/asm", - importpath = "github.com/cilium/ebpf/asm", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/cilium/ebpf/internal/BUILD b/vendor/github.com/cilium/ebpf/internal/BUILD deleted file mode 100644 index 5eacb314fe225..0000000000000 --- a/vendor/github.com/cilium/ebpf/internal/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cpu.go", - "endian.go", - "errors.go", - "fd.go", - "feature.go", - "io.go", - "ptr.go", - "ptr_32_be.go", - "ptr_32_le.go", - "ptr_64.go", - "syscall.go", - "syscall_string.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/cilium/ebpf/internal", - importpath = "github.com/cilium/ebpf/internal", - visibility = ["//vendor/github.com/cilium/ebpf:__subpackages__"], - deps = ["//vendor/github.com/cilium/ebpf/internal/unix:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/cilium/ebpf/internal/btf:all-srcs", - "//vendor/github.com/cilium/ebpf/internal/unix:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/cilium/ebpf/internal/btf/BUILD b/vendor/github.com/cilium/ebpf/internal/btf/BUILD deleted file mode 100644 index b25e83c0f4608..0000000000000 --- a/vendor/github.com/cilium/ebpf/internal/btf/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "btf.go", - "btf_types.go", - "doc.go", - "ext_info.go", - "strings.go", - "types.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/cilium/ebpf/internal/btf", - importpath = "github.com/cilium/ebpf/internal/btf", - visibility = ["//vendor/github.com/cilium/ebpf:__subpackages__"], - deps = [ - "//vendor/github.com/cilium/ebpf/asm:go_default_library", - "//vendor/github.com/cilium/ebpf/internal:go_default_library", - "//vendor/github.com/cilium/ebpf/internal/unix:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/cilium/ebpf/internal/unix/BUILD b/vendor/github.com/cilium/ebpf/internal/unix/BUILD deleted file mode 100644 index e71282448f09a..0000000000000 --- a/vendor/github.com/cilium/ebpf/internal/unix/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "types_linux.go", - "types_other.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/cilium/ebpf/internal/unix", - importpath = "github.com/cilium/ebpf/internal/unix", - visibility = ["//vendor/github.com/cilium/ebpf:__subpackages__"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/clusterhq/flocker-go/BUILD b/vendor/github.com/clusterhq/flocker-go/BUILD deleted file mode 100644 index de2fc9bc51be9..0000000000000 --- a/vendor/github.com/clusterhq/flocker-go/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "doc.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/clusterhq/flocker-go", - importpath = "github.com/clusterhq/flocker-go", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/container-storage-interface/spec/lib/go/csi/BUILD b/vendor/github.com/container-storage-interface/spec/lib/go/csi/BUILD deleted file mode 100644 index f680e6f4a9076..0000000000000 --- a/vendor/github.com/container-storage-interface/spec/lib/go/csi/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["csi.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/container-storage-interface/spec/lib/go/csi", - importpath = "github.com/container-storage-interface/spec/lib/go/csi", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/protoc-gen-go/descriptor:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/timestamp:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/wrappers:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containerd/cgroups/stats/v1/BUILD b/vendor/github.com/containerd/cgroups/stats/v1/BUILD deleted file mode 100644 index ec3e8d89f60fb..0000000000000 --- a/vendor/github.com/containerd/cgroups/stats/v1/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "metrics.pb.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/containerd/cgroups/stats/v1", - importpath = "github.com/containerd/cgroups/stats/v1", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containerd/console/BUILD b/vendor/github.com/containerd/console/BUILD deleted file mode 100644 index 637a3ac02d558..0000000000000 --- a/vendor/github.com/containerd/console/BUILD +++ /dev/null @@ -1,65 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "console.go", - "console_linux.go", - "console_unix.go", - "console_windows.go", - "tc_darwin.go", - "tc_freebsd.go", - "tc_linux.go", - "tc_openbsd_cgo.go", - "tc_openbsd_nocgo.go", - "tc_solaris_cgo.go", - "tc_solaris_nocgo.go", - "tc_unix.go", - ], - cgo = True, - importmap = "k8s.io/kubernetes/vendor/github.com/containerd/console", - importpath = "github.com/containerd/console", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containerd/containerd/api/services/containers/v1/BUILD b/vendor/github.com/containerd/containerd/api/services/containers/v1/BUILD deleted file mode 100644 index 4b37541c996e0..0000000000000 --- a/vendor/github.com/containerd/containerd/api/services/containers/v1/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["containers.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/containerd/containerd/api/services/containers/v1", - importpath = "github.com/containerd/containerd/api/services/containers/v1", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/sortkeys:go_default_library", - "//vendor/github.com/gogo/protobuf/types:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containerd/containerd/api/services/tasks/v1/BUILD b/vendor/github.com/containerd/containerd/api/services/tasks/v1/BUILD deleted file mode 100644 index fdb83c566c6a5..0000000000000 --- a/vendor/github.com/containerd/containerd/api/services/tasks/v1/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["tasks.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/containerd/containerd/api/services/tasks/v1", - importpath = "github.com/containerd/containerd/api/services/tasks/v1", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/containerd/containerd/api/types:go_default_library", - "//vendor/github.com/containerd/containerd/api/types/task:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/types:go_default_library", - "//vendor/github.com/opencontainers/go-digest:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containerd/containerd/api/services/version/v1/BUILD b/vendor/github.com/containerd/containerd/api/services/version/v1/BUILD deleted file mode 100644 index 4036da1f84750..0000000000000 --- a/vendor/github.com/containerd/containerd/api/services/version/v1/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["version.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/containerd/containerd/api/services/version/v1", - importpath = "github.com/containerd/containerd/api/services/version/v1", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/types:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containerd/containerd/api/types/BUILD b/vendor/github.com/containerd/containerd/api/types/BUILD deleted file mode 100644 index 35e1a8d187476..0000000000000 --- a/vendor/github.com/containerd/containerd/api/types/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "descriptor.pb.go", - "doc.go", - "metrics.pb.go", - "mount.pb.go", - "platform.pb.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/containerd/containerd/api/types", - importpath = "github.com/containerd/containerd/api/types", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/sortkeys:go_default_library", - "//vendor/github.com/gogo/protobuf/types:go_default_library", - "//vendor/github.com/opencontainers/go-digest:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/containerd/containerd/api/types/task:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containerd/containerd/api/types/task/BUILD b/vendor/github.com/containerd/containerd/api/types/task/BUILD deleted file mode 100644 index 242dd5e03e192..0000000000000 --- a/vendor/github.com/containerd/containerd/api/types/task/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["task.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/containerd/containerd/api/types/task", - importpath = "github.com/containerd/containerd/api/types/task", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containerd/containerd/containers/BUILD b/vendor/github.com/containerd/containerd/containers/BUILD deleted file mode 100644 index 6ddc8f628ce9b..0000000000000 --- a/vendor/github.com/containerd/containerd/containers/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["containers.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/containerd/containerd/containers", - importpath = "github.com/containerd/containerd/containers", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/gogo/protobuf/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containerd/containerd/errdefs/BUILD b/vendor/github.com/containerd/containerd/errdefs/BUILD deleted file mode 100644 index 66bdd1c159037..0000000000000 --- a/vendor/github.com/containerd/containerd/errdefs/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "errors.go", - "grpc.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/containerd/containerd/errdefs", - importpath = "github.com/containerd/containerd/errdefs", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containerd/containerd/namespaces/BUILD b/vendor/github.com/containerd/containerd/namespaces/BUILD deleted file mode 100644 index 075b7a15f1511..0000000000000 --- a/vendor/github.com/containerd/containerd/namespaces/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "context.go", - "grpc.go", - "store.go", - "ttrpc.go", - "validate.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/containerd/containerd/namespaces", - importpath = "github.com/containerd/containerd/namespaces", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/containerd/containerd/errdefs:go_default_library", - "//vendor/github.com/containerd/ttrpc:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/google.golang.org/grpc/metadata:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containerd/containerd/pkg/dialer/BUILD b/vendor/github.com/containerd/containerd/pkg/dialer/BUILD deleted file mode 100644 index 53e359521d03c..0000000000000 --- a/vendor/github.com/containerd/containerd/pkg/dialer/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dialer.go", - "dialer_unix.go", - "dialer_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/containerd/containerd/pkg/dialer", - importpath = "github.com/containerd/containerd/pkg/dialer", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/pkg/errors:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/Microsoft/go-winio:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containerd/ttrpc/BUILD b/vendor/github.com/containerd/ttrpc/BUILD deleted file mode 100644 index 46dafa40dc4b0..0000000000000 --- a/vendor/github.com/containerd/ttrpc/BUILD +++ /dev/null @@ -1,51 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "channel.go", - "client.go", - "codec.go", - "config.go", - "handshake.go", - "interceptor.go", - "metadata.go", - "server.go", - "services.go", - "types.go", - "unixcreds_linux.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/containerd/ttrpc", - importpath = "github.com/containerd/ttrpc", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/google.golang.org/genproto/googleapis/rpc/status:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containernetworking/cni/libcni/BUILD b/vendor/github.com/containernetworking/cni/libcni/BUILD deleted file mode 100644 index 3eff91af15979..0000000000000 --- a/vendor/github.com/containernetworking/cni/libcni/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "conf.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/containernetworking/cni/libcni", - importpath = "github.com/containernetworking/cni/libcni", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/containernetworking/cni/pkg/invoke:go_default_library", - "//vendor/github.com/containernetworking/cni/pkg/types:go_default_library", - "//vendor/github.com/containernetworking/cni/pkg/utils:go_default_library", - "//vendor/github.com/containernetworking/cni/pkg/version:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containernetworking/cni/pkg/invoke/BUILD b/vendor/github.com/containernetworking/cni/pkg/invoke/BUILD deleted file mode 100644 index 5f8e394f8bc86..0000000000000 --- a/vendor/github.com/containernetworking/cni/pkg/invoke/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "args.go", - "delegate.go", - "exec.go", - "find.go", - "os_unix.go", - "os_windows.go", - "raw_exec.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/containernetworking/cni/pkg/invoke", - importpath = "github.com/containernetworking/cni/pkg/invoke", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/containernetworking/cni/pkg/types:go_default_library", - "//vendor/github.com/containernetworking/cni/pkg/version:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containernetworking/cni/pkg/types/020/BUILD b/vendor/github.com/containernetworking/cni/pkg/types/020/BUILD deleted file mode 100644 index ff80d2b073f2d..0000000000000 --- a/vendor/github.com/containernetworking/cni/pkg/types/020/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["types.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/containernetworking/cni/pkg/types/020", - importpath = "github.com/containernetworking/cni/pkg/types/020", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/containernetworking/cni/pkg/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containernetworking/cni/pkg/types/BUILD b/vendor/github.com/containernetworking/cni/pkg/types/BUILD deleted file mode 100644 index 7f0214ac435ab..0000000000000 --- a/vendor/github.com/containernetworking/cni/pkg/types/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "args.go", - "types.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/containernetworking/cni/pkg/types", - importpath = "github.com/containernetworking/cni/pkg/types", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/containernetworking/cni/pkg/types/020:all-srcs", - "//vendor/github.com/containernetworking/cni/pkg/types/current:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containernetworking/cni/pkg/types/current/BUILD b/vendor/github.com/containernetworking/cni/pkg/types/current/BUILD deleted file mode 100644 index 9d8caea53cad7..0000000000000 --- a/vendor/github.com/containernetworking/cni/pkg/types/current/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["types.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/containernetworking/cni/pkg/types/current", - importpath = "github.com/containernetworking/cni/pkg/types/current", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/containernetworking/cni/pkg/types:go_default_library", - "//vendor/github.com/containernetworking/cni/pkg/types/020:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containernetworking/cni/pkg/utils/BUILD b/vendor/github.com/containernetworking/cni/pkg/utils/BUILD deleted file mode 100644 index ae7d377b01925..0000000000000 --- a/vendor/github.com/containernetworking/cni/pkg/utils/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["utils.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/containernetworking/cni/pkg/utils", - importpath = "github.com/containernetworking/cni/pkg/utils", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/containernetworking/cni/pkg/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/containernetworking/cni/pkg/version/BUILD b/vendor/github.com/containernetworking/cni/pkg/version/BUILD deleted file mode 100644 index 7d5af179ebf8b..0000000000000 --- a/vendor/github.com/containernetworking/cni/pkg/version/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "conf.go", - "plugin.go", - "reconcile.go", - "version.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/containernetworking/cni/pkg/version", - importpath = "github.com/containernetworking/cni/pkg/version", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/containernetworking/cni/pkg/types:go_default_library", - "//vendor/github.com/containernetworking/cni/pkg/types/020:go_default_library", - "//vendor/github.com/containernetworking/cni/pkg/types/current:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/coredns/corefile-migration/migration/BUILD b/vendor/github.com/coredns/corefile-migration/migration/BUILD deleted file mode 100644 index 85e758950792d..0000000000000 --- a/vendor/github.com/coredns/corefile-migration/migration/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "migrate.go", - "notice.go", - "plugins.go", - "versions.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/coredns/corefile-migration/migration", - importpath = "github.com/coredns/corefile-migration/migration", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/coredns/corefile-migration/migration/corefile:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/coredns/corefile-migration/migration/corefile:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/coredns/corefile-migration/migration/corefile/BUILD b/vendor/github.com/coredns/corefile-migration/migration/corefile/BUILD deleted file mode 100644 index 5f424b6f9ad03..0000000000000 --- a/vendor/github.com/coredns/corefile-migration/migration/corefile/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["corefile.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/coredns/corefile-migration/migration/corefile", - importpath = "github.com/coredns/corefile-migration/migration/corefile", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/caddyserver/caddy/caddyfile:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/coreos/go-oidc/BUILD b/vendor/github.com/coreos/go-oidc/BUILD deleted file mode 100644 index 101c1145419c0..0000000000000 --- a/vendor/github.com/coreos/go-oidc/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "jose.go", - "jwks.go", - "oidc.go", - "verify.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/coreos/go-oidc", - importpath = "github.com/coreos/go-oidc", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/pquerna/cachecontrol:go_default_library", - "//vendor/golang.org/x/oauth2:go_default_library", - "//vendor/gopkg.in/square/go-jose.v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/coreos/go-semver/semver/BUILD b/vendor/github.com/coreos/go-semver/semver/BUILD deleted file mode 100644 index 954a98ac2ba81..0000000000000 --- a/vendor/github.com/coreos/go-semver/semver/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "semver.go", - "sort.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/coreos/go-semver/semver", - importpath = "github.com/coreos/go-semver/semver", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/coreos/go-systemd/daemon/BUILD b/vendor/github.com/coreos/go-systemd/daemon/BUILD deleted file mode 100644 index cc00ac4aca616..0000000000000 --- a/vendor/github.com/coreos/go-systemd/daemon/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "sdnotify.go", - "watchdog.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/coreos/go-systemd/daemon", - importpath = "github.com/coreos/go-systemd/daemon", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/coreos/go-systemd/journal/BUILD b/vendor/github.com/coreos/go-systemd/journal/BUILD deleted file mode 100644 index ec6fdd9069d6d..0000000000000 --- a/vendor/github.com/coreos/go-systemd/journal/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["journal.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/coreos/go-systemd/journal", - importpath = "github.com/coreos/go-systemd/journal", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/coreos/go-systemd/util/BUILD b/vendor/github.com/coreos/go-systemd/util/BUILD deleted file mode 100644 index 0ae460234f2d3..0000000000000 --- a/vendor/github.com/coreos/go-systemd/util/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "util.go", - "util_cgo.go", - "util_stub.go", - ], - cgo = True, - importmap = "k8s.io/kubernetes/vendor/github.com/coreos/go-systemd/util", - importpath = "github.com/coreos/go-systemd/util", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/coreos/pkg/dlopen:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/coreos/go-systemd/v22/dbus/BUILD b/vendor/github.com/coreos/go-systemd/v22/dbus/BUILD deleted file mode 100644 index 1badc3846fb8d..0000000000000 --- a/vendor/github.com/coreos/go-systemd/v22/dbus/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dbus.go", - "methods.go", - "properties.go", - "set.go", - "subscription.go", - "subscription_set.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/coreos/go-systemd/v22/dbus", - importpath = "github.com/coreos/go-systemd/v22/dbus", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/godbus/dbus/v5:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/coreos/pkg/capnslog/BUILD b/vendor/github.com/coreos/pkg/capnslog/BUILD deleted file mode 100644 index ccb1930ccb72a..0000000000000 --- a/vendor/github.com/coreos/pkg/capnslog/BUILD +++ /dev/null @@ -1,78 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "formatters.go", - "glog_formatter.go", - "init.go", - "init_windows.go", - "journald_formatter.go", - "log_hijack.go", - "logmap.go", - "pkg_logger.go", - "syslog_formatter.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/coreos/pkg/capnslog", - importpath = "github.com/coreos/pkg/capnslog", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - ], - "@io_bazel_rules_go//go/platform:illumos": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - ], - "@io_bazel_rules_go//go/platform:js": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - ], - "@io_bazel_rules_go//go/platform:nacl": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - ], - "@io_bazel_rules_go//go/platform:plan9": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/coreos/pkg/dlopen/BUILD b/vendor/github.com/coreos/pkg/dlopen/BUILD deleted file mode 100644 index b88ef091cc81e..0000000000000 --- a/vendor/github.com/coreos/pkg/dlopen/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dlopen.go", - "dlopen_example.go", - ], - cgo = True, - clinkopts = ["-ldl"], - importmap = "k8s.io/kubernetes/vendor/github.com/coreos/pkg/dlopen", - importpath = "github.com/coreos/pkg/dlopen", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/cpuguy83/go-md2man/v2/md2man/BUILD b/vendor/github.com/cpuguy83/go-md2man/v2/md2man/BUILD deleted file mode 100644 index abe7e7e468982..0000000000000 --- a/vendor/github.com/cpuguy83/go-md2man/v2/md2man/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "md2man.go", - "roff.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/cpuguy83/go-md2man/v2/md2man", - importpath = "github.com/cpuguy83/go-md2man/v2/md2man", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/russross/blackfriday/v2:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/cyphar/filepath-securejoin/BUILD b/vendor/github.com/cyphar/filepath-securejoin/BUILD deleted file mode 100644 index 4268cd5c0fbbc..0000000000000 --- a/vendor/github.com/cyphar/filepath-securejoin/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "join.go", - "vfs.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/cyphar/filepath-securejoin", - importpath = "github.com/cyphar/filepath-securejoin", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/pkg/errors:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/davecgh/go-spew/spew/BUILD b/vendor/github.com/davecgh/go-spew/spew/BUILD deleted file mode 100644 index 89d17c23d68c7..0000000000000 --- a/vendor/github.com/davecgh/go-spew/spew/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bypass.go", - "bypasssafe.go", - "common.go", - "config.go", - "doc.go", - "dump.go", - "format.go", - "spew.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/davecgh/go-spew/spew", - importpath = "github.com/davecgh/go-spew/spew", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/daviddengcn/go-colortext/BUILD b/vendor/github.com/daviddengcn/go-colortext/BUILD deleted file mode 100644 index 1baf6cb5776dd..0000000000000 --- a/vendor/github.com/daviddengcn/go-colortext/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ct.go", - "ct_ansi.go", - "ct_win.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/daviddengcn/go-colortext", - importpath = "github.com/daviddengcn/go-colortext", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/dgrijalva/jwt-go/BUILD b/vendor/github.com/dgrijalva/jwt-go/BUILD deleted file mode 100644 index 5cc911b259838..0000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "claims.go", - "doc.go", - "ecdsa.go", - "ecdsa_utils.go", - "errors.go", - "hmac.go", - "map_claims.go", - "none.go", - "parser.go", - "rsa.go", - "rsa_pss.go", - "rsa_utils.go", - "signing_method.go", - "token.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/dgrijalva/jwt-go", - importpath = "github.com/dgrijalva/jwt-go", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/distribution/digestset/BUILD b/vendor/github.com/docker/distribution/digestset/BUILD deleted file mode 100644 index 3e0ab8fa112b3..0000000000000 --- a/vendor/github.com/docker/distribution/digestset/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["set.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/distribution/digestset", - importpath = "github.com/docker/distribution/digestset", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/opencontainers/go-digest:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/distribution/reference/BUILD b/vendor/github.com/docker/distribution/reference/BUILD deleted file mode 100644 index 76fee6e161498..0000000000000 --- a/vendor/github.com/docker/distribution/reference/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "helpers.go", - "normalize.go", - "reference.go", - "regexp.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/distribution/reference", - importpath = "github.com/docker/distribution/reference", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/docker/distribution/digestset:go_default_library", - "//vendor/github.com/opencontainers/go-digest:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/distribution/registry/api/errcode/BUILD b/vendor/github.com/docker/distribution/registry/api/errcode/BUILD deleted file mode 100644 index 46519150ffc89..0000000000000 --- a/vendor/github.com/docker/distribution/registry/api/errcode/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "errors.go", - "handler.go", - "register.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/distribution/registry/api/errcode", - importpath = "github.com/docker/distribution/registry/api/errcode", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/BUILD b/vendor/github.com/docker/docker/api/BUILD deleted file mode 100644 index 54ae48a2e48dc..0000000000000 --- a/vendor/github.com/docker/docker/api/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "common.go", - "common_unix.go", - "common_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api", - importpath = "github.com/docker/docker/api", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/docker/docker/api/types:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/BUILD b/vendor/github.com/docker/docker/api/types/BUILD deleted file mode 100644 index 5a35184c8269f..0000000000000 --- a/vendor/github.com/docker/docker/api/types/BUILD +++ /dev/null @@ -1,69 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "auth.go", - "client.go", - "configs.go", - "error_response.go", - "graph_driver_data.go", - "id_response.go", - "image_delete_response_item.go", - "image_summary.go", - "plugin.go", - "plugin_device.go", - "plugin_env.go", - "plugin_interface_type.go", - "plugin_mount.go", - "plugin_responses.go", - "port.go", - "seccomp.go", - "service_update_response.go", - "stats.go", - "types.go", - "volume.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types", - importpath = "github.com/docker/docker/api/types", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/docker/docker/api/types/container:go_default_library", - "//vendor/github.com/docker/docker/api/types/filters:go_default_library", - "//vendor/github.com/docker/docker/api/types/mount:go_default_library", - "//vendor/github.com/docker/docker/api/types/network:go_default_library", - "//vendor/github.com/docker/docker/api/types/registry:go_default_library", - "//vendor/github.com/docker/docker/api/types/swarm:go_default_library", - "//vendor/github.com/docker/go-connections/nat:go_default_library", - "//vendor/github.com/docker/go-units:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/docker/docker/api/types/blkiodev:all-srcs", - "//vendor/github.com/docker/docker/api/types/container:all-srcs", - "//vendor/github.com/docker/docker/api/types/events:all-srcs", - "//vendor/github.com/docker/docker/api/types/filters:all-srcs", - "//vendor/github.com/docker/docker/api/types/image:all-srcs", - "//vendor/github.com/docker/docker/api/types/mount:all-srcs", - "//vendor/github.com/docker/docker/api/types/network:all-srcs", - "//vendor/github.com/docker/docker/api/types/registry:all-srcs", - "//vendor/github.com/docker/docker/api/types/strslice:all-srcs", - "//vendor/github.com/docker/docker/api/types/swarm:all-srcs", - "//vendor/github.com/docker/docker/api/types/time:all-srcs", - "//vendor/github.com/docker/docker/api/types/versions:all-srcs", - "//vendor/github.com/docker/docker/api/types/volume:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/blkiodev/BUILD b/vendor/github.com/docker/docker/api/types/blkiodev/BUILD deleted file mode 100644 index 86a286dd3f1a1..0000000000000 --- a/vendor/github.com/docker/docker/api/types/blkiodev/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["blkio.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types/blkiodev", - importpath = "github.com/docker/docker/api/types/blkiodev", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/container/BUILD b/vendor/github.com/docker/docker/api/types/container/BUILD deleted file mode 100644 index 917e5fd774904..0000000000000 --- a/vendor/github.com/docker/docker/api/types/container/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "config.go", - "container_changes.go", - "container_create.go", - "container_top.go", - "container_update.go", - "container_wait.go", - "host_config.go", - "hostconfig_unix.go", - "hostconfig_windows.go", - "waitcondition.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types/container", - importpath = "github.com/docker/docker/api/types/container", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/docker/docker/api/types/blkiodev:go_default_library", - "//vendor/github.com/docker/docker/api/types/mount:go_default_library", - "//vendor/github.com/docker/docker/api/types/strslice:go_default_library", - "//vendor/github.com/docker/go-connections/nat:go_default_library", - "//vendor/github.com/docker/go-units:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/events/BUILD b/vendor/github.com/docker/docker/api/types/events/BUILD deleted file mode 100644 index 2e2c5bf9ddf77..0000000000000 --- a/vendor/github.com/docker/docker/api/types/events/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["events.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types/events", - importpath = "github.com/docker/docker/api/types/events", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/filters/BUILD b/vendor/github.com/docker/docker/api/types/filters/BUILD deleted file mode 100644 index 5bf1db9c2044e..0000000000000 --- a/vendor/github.com/docker/docker/api/types/filters/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["parse.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types/filters", - importpath = "github.com/docker/docker/api/types/filters", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/docker/docker/api/types/versions:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/image/BUILD b/vendor/github.com/docker/docker/api/types/image/BUILD deleted file mode 100644 index 1a385bd2d6b54..0000000000000 --- a/vendor/github.com/docker/docker/api/types/image/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["image_history.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types/image", - importpath = "github.com/docker/docker/api/types/image", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/mount/BUILD b/vendor/github.com/docker/docker/api/types/mount/BUILD deleted file mode 100644 index a299f301c241e..0000000000000 --- a/vendor/github.com/docker/docker/api/types/mount/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["mount.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types/mount", - importpath = "github.com/docker/docker/api/types/mount", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/network/BUILD b/vendor/github.com/docker/docker/api/types/network/BUILD deleted file mode 100644 index 293850e1b48a7..0000000000000 --- a/vendor/github.com/docker/docker/api/types/network/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["network.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types/network", - importpath = "github.com/docker/docker/api/types/network", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/docker/docker/api/types/filters:go_default_library", - "//vendor/github.com/docker/docker/errdefs:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/registry/BUILD b/vendor/github.com/docker/docker/api/types/registry/BUILD deleted file mode 100644 index 6e82898b0b561..0000000000000 --- a/vendor/github.com/docker/docker/api/types/registry/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "authenticate.go", - "registry.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types/registry", - importpath = "github.com/docker/docker/api/types/registry", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/opencontainers/image-spec/specs-go/v1:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/strslice/BUILD b/vendor/github.com/docker/docker/api/types/strslice/BUILD deleted file mode 100644 index 265099fda231c..0000000000000 --- a/vendor/github.com/docker/docker/api/types/strslice/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["strslice.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types/strslice", - importpath = "github.com/docker/docker/api/types/strslice", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/swarm/BUILD b/vendor/github.com/docker/docker/api/types/swarm/BUILD deleted file mode 100644 index 8f6b9868a937c..0000000000000 --- a/vendor/github.com/docker/docker/api/types/swarm/BUILD +++ /dev/null @@ -1,43 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "common.go", - "config.go", - "container.go", - "network.go", - "node.go", - "runtime.go", - "secret.go", - "service.go", - "swarm.go", - "task.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types/swarm", - importpath = "github.com/docker/docker/api/types/swarm", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/docker/docker/api/types/container:go_default_library", - "//vendor/github.com/docker/docker/api/types/mount:go_default_library", - "//vendor/github.com/docker/docker/api/types/network:go_default_library", - "//vendor/github.com/docker/docker/api/types/swarm/runtime:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/docker/docker/api/types/swarm/runtime:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/swarm/runtime/BUILD b/vendor/github.com/docker/docker/api/types/swarm/runtime/BUILD deleted file mode 100644 index c0ce7e23e7cf9..0000000000000 --- a/vendor/github.com/docker/docker/api/types/swarm/runtime/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "gen.go", - "plugin.pb.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types/swarm/runtime", - importpath = "github.com/docker/docker/api/types/swarm/runtime", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/gogo/protobuf/proto:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/time/BUILD b/vendor/github.com/docker/docker/api/types/time/BUILD deleted file mode 100644 index 253e5c2056218..0000000000000 --- a/vendor/github.com/docker/docker/api/types/time/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "duration_convert.go", - "timestamp.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types/time", - importpath = "github.com/docker/docker/api/types/time", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/versions/BUILD b/vendor/github.com/docker/docker/api/types/versions/BUILD deleted file mode 100644 index e964250c90da9..0000000000000 --- a/vendor/github.com/docker/docker/api/types/versions/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["compare.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types/versions", - importpath = "github.com/docker/docker/api/types/versions", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/api/types/volume/BUILD b/vendor/github.com/docker/docker/api/types/volume/BUILD deleted file mode 100644 index 1d021e2ad5344..0000000000000 --- a/vendor/github.com/docker/docker/api/types/volume/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "volume_create.go", - "volume_list.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/api/types/volume", - importpath = "github.com/docker/docker/api/types/volume", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/docker/docker/api/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/client/BUILD b/vendor/github.com/docker/docker/client/BUILD deleted file mode 100644 index 86a55a9432a87..0000000000000 --- a/vendor/github.com/docker/docker/client/BUILD +++ /dev/null @@ -1,159 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "build_cancel.go", - "build_prune.go", - "checkpoint_create.go", - "checkpoint_delete.go", - "checkpoint_list.go", - "client.go", - "client_deprecated.go", - "client_unix.go", - "client_windows.go", - "config_create.go", - "config_inspect.go", - "config_list.go", - "config_remove.go", - "config_update.go", - "container_attach.go", - "container_commit.go", - "container_copy.go", - "container_create.go", - "container_diff.go", - "container_exec.go", - "container_export.go", - "container_inspect.go", - "container_kill.go", - "container_list.go", - "container_logs.go", - "container_pause.go", - "container_prune.go", - "container_remove.go", - "container_rename.go", - "container_resize.go", - "container_restart.go", - "container_start.go", - "container_stats.go", - "container_stop.go", - "container_top.go", - "container_unpause.go", - "container_update.go", - "container_wait.go", - "disk_usage.go", - "distribution_inspect.go", - "errors.go", - "events.go", - "hijack.go", - "image_build.go", - "image_create.go", - "image_history.go", - "image_import.go", - "image_inspect.go", - "image_list.go", - "image_load.go", - "image_prune.go", - "image_pull.go", - "image_push.go", - "image_remove.go", - "image_save.go", - "image_search.go", - "image_tag.go", - "info.go", - "interface.go", - "interface_experimental.go", - "interface_stable.go", - "login.go", - "network_connect.go", - "network_create.go", - "network_disconnect.go", - "network_inspect.go", - "network_list.go", - "network_prune.go", - "network_remove.go", - "node_inspect.go", - "node_list.go", - "node_remove.go", - "node_update.go", - "options.go", - "ping.go", - "plugin_create.go", - "plugin_disable.go", - "plugin_enable.go", - "plugin_inspect.go", - "plugin_install.go", - "plugin_list.go", - "plugin_push.go", - "plugin_remove.go", - "plugin_set.go", - "plugin_upgrade.go", - "request.go", - "secret_create.go", - "secret_inspect.go", - "secret_list.go", - "secret_remove.go", - "secret_update.go", - "service_create.go", - "service_inspect.go", - "service_list.go", - "service_logs.go", - "service_remove.go", - "service_update.go", - "swarm_get_unlock_key.go", - "swarm_init.go", - "swarm_inspect.go", - "swarm_join.go", - "swarm_leave.go", - "swarm_unlock.go", - "swarm_update.go", - "task_inspect.go", - "task_list.go", - "task_logs.go", - "transport.go", - "utils.go", - "version.go", - "volume_create.go", - "volume_inspect.go", - "volume_list.go", - "volume_prune.go", - "volume_remove.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/client", - importpath = "github.com/docker/docker/client", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/docker/distribution/reference:go_default_library", - "//vendor/github.com/docker/docker/api:go_default_library", - "//vendor/github.com/docker/docker/api/types:go_default_library", - "//vendor/github.com/docker/docker/api/types/container:go_default_library", - "//vendor/github.com/docker/docker/api/types/events:go_default_library", - "//vendor/github.com/docker/docker/api/types/filters:go_default_library", - "//vendor/github.com/docker/docker/api/types/image:go_default_library", - "//vendor/github.com/docker/docker/api/types/network:go_default_library", - "//vendor/github.com/docker/docker/api/types/registry:go_default_library", - "//vendor/github.com/docker/docker/api/types/swarm:go_default_library", - "//vendor/github.com/docker/docker/api/types/time:go_default_library", - "//vendor/github.com/docker/docker/api/types/versions:go_default_library", - "//vendor/github.com/docker/docker/api/types/volume:go_default_library", - "//vendor/github.com/docker/docker/errdefs:go_default_library", - "//vendor/github.com/docker/go-connections/sockets:go_default_library", - "//vendor/github.com/docker/go-connections/tlsconfig:go_default_library", - "//vendor/github.com/opencontainers/go-digest:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/errdefs/BUILD b/vendor/github.com/docker/docker/errdefs/BUILD deleted file mode 100644 index 3d8b35a8a85bd..0000000000000 --- a/vendor/github.com/docker/docker/errdefs/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "defs.go", - "doc.go", - "helpers.go", - "http_helpers.go", - "is.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/errdefs", - importpath = "github.com/docker/docker/errdefs", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/containerd/containerd/errdefs:go_default_library", - "//vendor/github.com/docker/distribution/registry/api/errcode:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/pkg/jsonmessage/BUILD b/vendor/github.com/docker/docker/pkg/jsonmessage/BUILD deleted file mode 100644 index 707a1d24090c9..0000000000000 --- a/vendor/github.com/docker/docker/pkg/jsonmessage/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["jsonmessage.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/pkg/jsonmessage", - importpath = "github.com/docker/docker/pkg/jsonmessage", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/docker/docker/pkg/term:go_default_library", - "//vendor/github.com/docker/go-units:go_default_library", - "//vendor/github.com/morikuni/aec:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/pkg/stdcopy/BUILD b/vendor/github.com/docker/docker/pkg/stdcopy/BUILD deleted file mode 100644 index d12c63eb29b84..0000000000000 --- a/vendor/github.com/docker/docker/pkg/stdcopy/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["stdcopy.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/pkg/stdcopy", - importpath = "github.com/docker/docker/pkg/stdcopy", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/pkg/term/BUILD b/vendor/github.com/docker/docker/pkg/term/BUILD deleted file mode 100644 index 54c7f55afad5f..0000000000000 --- a/vendor/github.com/docker/docker/pkg/term/BUILD +++ /dev/null @@ -1,84 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ascii.go", - "proxy.go", - "tc.go", - "term.go", - "term_windows.go", - "termios_bsd.go", - "termios_linux.go", - "winsize.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/pkg/term", - importpath = "github.com/docker/docker/pkg/term", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:illumos": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:js": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:nacl": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:plan9": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/Azure/go-ansiterm/winterm:go_default_library", - "//vendor/github.com/docker/docker/pkg/term/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/docker/docker/pkg/term/windows:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/docker/pkg/term/windows/BUILD b/vendor/github.com/docker/docker/pkg/term/windows/BUILD deleted file mode 100644 index 41d5bb652ebe7..0000000000000 --- a/vendor/github.com/docker/docker/pkg/term/windows/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ansi_reader.go", - "ansi_writer.go", - "console.go", - "windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/docker/pkg/term/windows", - importpath = "github.com/docker/docker/pkg/term/windows", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/Azure/go-ansiterm:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/Azure/go-ansiterm/winterm:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/go-connections/nat/BUILD b/vendor/github.com/docker/go-connections/nat/BUILD deleted file mode 100644 index e35156fea56bd..0000000000000 --- a/vendor/github.com/docker/go-connections/nat/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "nat.go", - "parse.go", - "sort.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/go-connections/nat", - importpath = "github.com/docker/go-connections/nat", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/go-connections/sockets/BUILD b/vendor/github.com/docker/go-connections/sockets/BUILD deleted file mode 100644 index 566439ca36e56..0000000000000 --- a/vendor/github.com/docker/go-connections/sockets/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "inmem_socket.go", - "proxy.go", - "sockets.go", - "sockets_unix.go", - "sockets_windows.go", - "tcp_socket.go", - "unix_socket.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/go-connections/sockets", - importpath = "github.com/docker/go-connections/sockets", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/net/proxy:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/Microsoft/go-winio:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/go-connections/tlsconfig/BUILD b/vendor/github.com/docker/go-connections/tlsconfig/BUILD deleted file mode 100644 index 937d6f965049b..0000000000000 --- a/vendor/github.com/docker/go-connections/tlsconfig/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "certpool_go17.go", - "certpool_other.go", - "config.go", - "config_client_ciphers.go", - "config_legacy_client_ciphers.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/go-connections/tlsconfig", - importpath = "github.com/docker/go-connections/tlsconfig", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/pkg/errors:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/go-units/BUILD b/vendor/github.com/docker/go-units/BUILD deleted file mode 100644 index 7b61006532fa8..0000000000000 --- a/vendor/github.com/docker/go-units/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "duration.go", - "size.go", - "ulimit.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/go-units", - importpath = "github.com/docker/go-units", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/spdystream/BUILD b/vendor/github.com/docker/spdystream/BUILD deleted file mode 100644 index 9b5ad99c7fcee..0000000000000 --- a/vendor/github.com/docker/spdystream/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "connection.go", - "handlers.go", - "priority.go", - "stream.go", - "utils.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/spdystream", - importpath = "github.com/docker/spdystream", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/docker/spdystream/spdy:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/docker/spdystream/spdy:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/docker/spdystream/spdy/BUILD b/vendor/github.com/docker/spdystream/spdy/BUILD deleted file mode 100644 index fcf42c9ee2d47..0000000000000 --- a/vendor/github.com/docker/spdystream/spdy/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dictionary.go", - "read.go", - "types.go", - "write.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/docker/spdystream/spdy", - importpath = "github.com/docker/spdystream/spdy", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/dustin/go-humanize/BUILD b/vendor/github.com/dustin/go-humanize/BUILD deleted file mode 100644 index d39ac95515d90..0000000000000 --- a/vendor/github.com/dustin/go-humanize/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "big.go", - "bigbytes.go", - "bytes.go", - "comma.go", - "commaf.go", - "ftoa.go", - "humanize.go", - "number.go", - "ordinals.go", - "si.go", - "times.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/dustin/go-humanize", - importpath = "github.com/dustin/go-humanize", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/elazarl/goproxy/BUILD b/vendor/github.com/elazarl/goproxy/BUILD deleted file mode 100644 index 07287c386ae0f..0000000000000 --- a/vendor/github.com/elazarl/goproxy/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "actions.go", - "certs.go", - "chunked.go", - "counterecryptor.go", - "ctx.go", - "dispatcher.go", - "doc.go", - "https.go", - "proxy.go", - "responses.go", - "signer.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/elazarl/goproxy", - importpath = "github.com/elazarl/goproxy", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/emicklei/go-restful/BUILD b/vendor/github.com/emicklei/go-restful/BUILD deleted file mode 100644 index 7e04eee526da6..0000000000000 --- a/vendor/github.com/emicklei/go-restful/BUILD +++ /dev/null @@ -1,56 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "compress.go", - "compressor_cache.go", - "compressor_pools.go", - "compressors.go", - "constants.go", - "container.go", - "cors_filter.go", - "curly.go", - "curly_route.go", - "doc.go", - "entity_accessors.go", - "filter.go", - "json.go", - "jsr311.go", - "logger.go", - "mime.go", - "options_filter.go", - "parameter.go", - "path_expression.go", - "path_processor.go", - "request.go", - "response.go", - "route.go", - "route_builder.go", - "router.go", - "service_error.go", - "web_service.go", - "web_service_container.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/emicklei/go-restful", - importpath = "github.com/emicklei/go-restful", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/emicklei/go-restful/log:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/emicklei/go-restful/log:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/emicklei/go-restful/log/BUILD b/vendor/github.com/emicklei/go-restful/log/BUILD deleted file mode 100644 index 112f196316285..0000000000000 --- a/vendor/github.com/emicklei/go-restful/log/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["log.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/emicklei/go-restful/log", - importpath = "github.com/emicklei/go-restful/log", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/euank/go-kmsg-parser/kmsgparser/BUILD b/vendor/github.com/euank/go-kmsg-parser/kmsgparser/BUILD deleted file mode 100644 index b2a54dde52678..0000000000000 --- a/vendor/github.com/euank/go-kmsg-parser/kmsgparser/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "kmsgparser.go", - "log.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/euank/go-kmsg-parser/kmsgparser", - importpath = "github.com/euank/go-kmsg-parser/kmsgparser", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/evanphx/json-patch/BUILD b/vendor/github.com/evanphx/json-patch/BUILD deleted file mode 100644 index a1faebfa64d8c..0000000000000 --- a/vendor/github.com/evanphx/json-patch/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "errors.go", - "merge.go", - "patch.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/evanphx/json-patch", - importpath = "github.com/evanphx/json-patch", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/pkg/errors:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/exponent-io/jsonpath/BUILD b/vendor/github.com/exponent-io/jsonpath/BUILD deleted file mode 100644 index a19bf29e4b3b8..0000000000000 --- a/vendor/github.com/exponent-io/jsonpath/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decoder.go", - "path.go", - "pathaction.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/exponent-io/jsonpath", - importpath = "github.com/exponent-io/jsonpath", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/fatih/camelcase/BUILD b/vendor/github.com/fatih/camelcase/BUILD deleted file mode 100644 index bb20d35a290e0..0000000000000 --- a/vendor/github.com/fatih/camelcase/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["camelcase.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/fatih/camelcase", - importpath = "github.com/fatih/camelcase", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/fsnotify/fsnotify/BUILD b/vendor/github.com/fsnotify/fsnotify/BUILD deleted file mode 100644 index 9c51e325cd554..0000000000000 --- a/vendor/github.com/fsnotify/fsnotify/BUILD +++ /dev/null @@ -1,59 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "fen.go", - "fsnotify.go", - "inotify.go", - "inotify_poller.go", - "kqueue.go", - "open_mode_bsd.go", - "open_mode_darwin.go", - "windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/fsnotify/fsnotify", - importpath = "github.com/fsnotify/fsnotify", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/ghodss/yaml/BUILD b/vendor/github.com/ghodss/yaml/BUILD deleted file mode 100644 index 8a56ef2020825..0000000000000 --- a/vendor/github.com/ghodss/yaml/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "fields.go", - "yaml.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/ghodss/yaml", - importpath = "github.com/ghodss/yaml", - visibility = ["//visibility:public"], - deps = ["//vendor/gopkg.in/yaml.v2:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-bindata/go-bindata/BUILD b/vendor/github.com/go-bindata/go-bindata/BUILD deleted file mode 100644 index 5a618583866be..0000000000000 --- a/vendor/github.com/go-bindata/go-bindata/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "asset.go", - "bytewriter.go", - "config.go", - "convert.go", - "debug.go", - "doc.go", - "file.go", - "release.go", - "restore.go", - "stringwriter.go", - "toc.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/go-bindata/go-bindata", - importpath = "github.com/go-bindata/go-bindata", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/go-bindata/go-bindata/go-bindata:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-bindata/go-bindata/go-bindata/BUILD b/vendor/github.com/go-bindata/go-bindata/go-bindata/BUILD deleted file mode 100644 index 5ed33b4af48b5..0000000000000 --- a/vendor/github.com/go-bindata/go-bindata/go-bindata/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "AppendSliceValue.go", - "main.go", - "version.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/go-bindata/go-bindata/go-bindata", - importpath = "github.com/go-bindata/go-bindata/go-bindata", - visibility = ["//visibility:private"], - deps = ["//vendor/github.com/go-bindata/go-bindata:go_default_library"], -) - -go_binary( - name = "go-bindata", - embed = [":go_default_library"], - tags = ["manual"], - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-logr/logr/BUILD b/vendor/github.com/go-logr/logr/BUILD deleted file mode 100644 index 83b2778b49b64..0000000000000 --- a/vendor/github.com/go-logr/logr/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["logr.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/go-logr/logr", - importpath = "github.com/go-logr/logr", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-openapi/analysis/BUILD b/vendor/github.com/go-openapi/analysis/BUILD deleted file mode 100644 index 5ab9d7dce2f64..0000000000000 --- a/vendor/github.com/go-openapi/analysis/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "analyzer.go", - "debug.go", - "doc.go", - "fixer.go", - "flatten.go", - "mixin.go", - "schema.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/go-openapi/analysis", - importpath = "github.com/go-openapi/analysis", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/go-openapi/analysis/internal:go_default_library", - "//vendor/github.com/go-openapi/jsonpointer:go_default_library", - "//vendor/github.com/go-openapi/spec:go_default_library", - "//vendor/github.com/go-openapi/strfmt:go_default_library", - "//vendor/github.com/go-openapi/swag:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/go-openapi/analysis/internal:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-openapi/analysis/internal/BUILD b/vendor/github.com/go-openapi/analysis/internal/BUILD deleted file mode 100644 index 86adf9279f9d7..0000000000000 --- a/vendor/github.com/go-openapi/analysis/internal/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "post_go18.go", - "pre_go18.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/go-openapi/analysis/internal", - importpath = "github.com/go-openapi/analysis/internal", - visibility = ["//vendor/github.com/go-openapi/analysis:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-openapi/errors/BUILD b/vendor/github.com/go-openapi/errors/BUILD deleted file mode 100644 index 75ad75d400ac5..0000000000000 --- a/vendor/github.com/go-openapi/errors/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "auth.go", - "doc.go", - "headers.go", - "middleware.go", - "parsing.go", - "schema.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/go-openapi/errors", - importpath = "github.com/go-openapi/errors", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-openapi/jsonpointer/BUILD b/vendor/github.com/go-openapi/jsonpointer/BUILD deleted file mode 100644 index bb6b7249c4546..0000000000000 --- a/vendor/github.com/go-openapi/jsonpointer/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["pointer.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/go-openapi/jsonpointer", - importpath = "github.com/go-openapi/jsonpointer", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/go-openapi/swag:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-openapi/jsonreference/BUILD b/vendor/github.com/go-openapi/jsonreference/BUILD deleted file mode 100644 index c354bfa976f0c..0000000000000 --- a/vendor/github.com/go-openapi/jsonreference/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["reference.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/go-openapi/jsonreference", - importpath = "github.com/go-openapi/jsonreference", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/PuerkitoBio/purell:go_default_library", - "//vendor/github.com/go-openapi/jsonpointer:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-openapi/loads/BUILD b/vendor/github.com/go-openapi/loads/BUILD deleted file mode 100644 index bc0dccaa9275e..0000000000000 --- a/vendor/github.com/go-openapi/loads/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "spec.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/go-openapi/loads", - importpath = "github.com/go-openapi/loads", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/go-openapi/analysis:go_default_library", - "//vendor/github.com/go-openapi/spec:go_default_library", - "//vendor/github.com/go-openapi/swag:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-openapi/runtime/BUILD b/vendor/github.com/go-openapi/runtime/BUILD deleted file mode 100644 index 44f522a0731d3..0000000000000 --- a/vendor/github.com/go-openapi/runtime/BUILD +++ /dev/null @@ -1,46 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bytestream.go", - "client_auth_info.go", - "client_operation.go", - "client_request.go", - "client_response.go", - "constants.go", - "csv.go", - "discard.go", - "file.go", - "headers.go", - "interfaces.go", - "json.go", - "request.go", - "statuses.go", - "text.go", - "values.go", - "xml.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/go-openapi/runtime", - importpath = "github.com/go-openapi/runtime", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/go-openapi/errors:go_default_library", - "//vendor/github.com/go-openapi/strfmt:go_default_library", - "//vendor/github.com/go-openapi/swag:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-openapi/spec/BUILD b/vendor/github.com/go-openapi/spec/BUILD deleted file mode 100644 index fac96e66561be..0000000000000 --- a/vendor/github.com/go-openapi/spec/BUILD +++ /dev/null @@ -1,55 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bindata.go", - "cache.go", - "contact_info.go", - "debug.go", - "expander.go", - "external_docs.go", - "header.go", - "info.go", - "items.go", - "license.go", - "normalizer.go", - "operation.go", - "parameter.go", - "path_item.go", - "paths.go", - "ref.go", - "response.go", - "responses.go", - "schema.go", - "schema_loader.go", - "security_scheme.go", - "spec.go", - "swagger.go", - "tag.go", - "unused.go", - "xml_object.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/go-openapi/spec", - importpath = "github.com/go-openapi/spec", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/go-openapi/jsonpointer:go_default_library", - "//vendor/github.com/go-openapi/jsonreference:go_default_library", - "//vendor/github.com/go-openapi/swag:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-openapi/strfmt/BUILD b/vendor/github.com/go-openapi/strfmt/BUILD deleted file mode 100644 index 93d4f3ed52a48..0000000000000 --- a/vendor/github.com/go-openapi/strfmt/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bson.go", - "date.go", - "default.go", - "doc.go", - "duration.go", - "format.go", - "time.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/go-openapi/strfmt", - importpath = "github.com/go-openapi/strfmt", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/asaskevich/govalidator:go_default_library", - "//vendor/github.com/go-openapi/errors:go_default_library", - "//vendor/github.com/mitchellh/mapstructure:go_default_library", - "//vendor/go.mongodb.org/mongo-driver/bson:go_default_library", - "//vendor/go.mongodb.org/mongo-driver/bson/bsontype:go_default_library", - "//vendor/go.mongodb.org/mongo-driver/bson/primitive:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-openapi/swag/BUILD b/vendor/github.com/go-openapi/swag/BUILD deleted file mode 100644 index 11a44b94f111a..0000000000000 --- a/vendor/github.com/go-openapi/swag/BUILD +++ /dev/null @@ -1,44 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "convert.go", - "convert_types.go", - "doc.go", - "json.go", - "loading.go", - "name_lexem.go", - "net.go", - "path.go", - "post_go18.go", - "post_go19.go", - "pre_go18.go", - "pre_go19.go", - "split.go", - "util.go", - "yaml.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/go-openapi/swag", - importpath = "github.com/go-openapi/swag", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/mailru/easyjson/jlexer:go_default_library", - "//vendor/github.com/mailru/easyjson/jwriter:go_default_library", - "//vendor/gopkg.in/yaml.v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-openapi/validate/BUILD b/vendor/github.com/go-openapi/validate/BUILD deleted file mode 100644 index e758a67c6b1b8..0000000000000 --- a/vendor/github.com/go-openapi/validate/BUILD +++ /dev/null @@ -1,54 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "debug.go", - "default_validator.go", - "doc.go", - "example_validator.go", - "formats.go", - "helpers.go", - "object_validator.go", - "options.go", - "result.go", - "rexp.go", - "schema.go", - "schema_messages.go", - "schema_option.go", - "schema_props.go", - "slice_validator.go", - "spec.go", - "spec_messages.go", - "type.go", - "validator.go", - "values.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/go-openapi/validate", - importpath = "github.com/go-openapi/validate", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/go-openapi/analysis:go_default_library", - "//vendor/github.com/go-openapi/errors:go_default_library", - "//vendor/github.com/go-openapi/jsonpointer:go_default_library", - "//vendor/github.com/go-openapi/loads:go_default_library", - "//vendor/github.com/go-openapi/runtime:go_default_library", - "//vendor/github.com/go-openapi/spec:go_default_library", - "//vendor/github.com/go-openapi/strfmt:go_default_library", - "//vendor/github.com/go-openapi/swag:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-ozzo/ozzo-validation/BUILD b/vendor/github.com/go-ozzo/ozzo-validation/BUILD deleted file mode 100644 index 96ca75ad1839f..0000000000000 --- a/vendor/github.com/go-ozzo/ozzo-validation/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "date.go", - "error.go", - "in.go", - "length.go", - "match.go", - "minmax.go", - "multipleof.go", - "not_in.go", - "not_nil.go", - "required.go", - "string.go", - "struct.go", - "util.go", - "validation.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/go-ozzo/ozzo-validation", - importpath = "github.com/go-ozzo/ozzo-validation", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/go-ozzo/ozzo-validation/is:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-ozzo/ozzo-validation/is/BUILD b/vendor/github.com/go-ozzo/ozzo-validation/is/BUILD deleted file mode 100644 index 95b6767cce576..0000000000000 --- a/vendor/github.com/go-ozzo/ozzo-validation/is/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["rules.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/go-ozzo/ozzo-validation/is", - importpath = "github.com/go-ozzo/ozzo-validation/is", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/asaskevich/govalidator:go_default_library", - "//vendor/github.com/go-ozzo/ozzo-validation:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/go-stack/stack/BUILD b/vendor/github.com/go-stack/stack/BUILD deleted file mode 100644 index 4746a090b3424..0000000000000 --- a/vendor/github.com/go-stack/stack/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["stack.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/go-stack/stack", - importpath = "github.com/go-stack/stack", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/godbus/dbus/v5/BUILD b/vendor/github.com/godbus/dbus/v5/BUILD deleted file mode 100644 index d974a0b202d7c..0000000000000 --- a/vendor/github.com/godbus/dbus/v5/BUILD +++ /dev/null @@ -1,60 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "auth.go", - "auth_anonymous.go", - "auth_external.go", - "auth_sha1.go", - "call.go", - "conn.go", - "conn_darwin.go", - "conn_other.go", - "conn_unix.go", - "conn_windows.go", - "dbus.go", - "decoder.go", - "default_handler.go", - "doc.go", - "encoder.go", - "export.go", - "homedir.go", - "homedir_dynamic.go", - "match.go", - "message.go", - "object.go", - "server_interfaces.go", - "sig.go", - "transport_darwin.go", - "transport_generic.go", - "transport_nonce_tcp.go", - "transport_tcp.go", - "transport_unix.go", - "transport_unixcred_dragonfly.go", - "transport_unixcred_freebsd.go", - "transport_unixcred_linux.go", - "transport_unixcred_openbsd.go", - "variant.go", - "variant_lexer.go", - "variant_parser.go", - ], - cgo = True, - importmap = "k8s.io/kubernetes/vendor/github.com/godbus/dbus/v5", - importpath = "github.com/godbus/dbus/v5", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/gogoproto/BUILD b/vendor/github.com/gogo/protobuf/gogoproto/BUILD deleted file mode 100644 index 2487c5e64c6e3..0000000000000 --- a/vendor/github.com/gogo/protobuf/gogoproto/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "gogo.pb.go", - "helper.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/gogoproto", - importpath = "github.com/gogo/protobuf/gogoproto", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/compare/BUILD b/vendor/github.com/gogo/protobuf/plugin/compare/BUILD deleted file mode 100644 index e9574261c1de1..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/compare/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "compare.go", - "comparetest.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/compare", - importpath = "github.com/gogo/protobuf/plugin/compare", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/testgen:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - "//vendor/github.com/gogo/protobuf/vanity:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/defaultcheck/BUILD b/vendor/github.com/gogo/protobuf/plugin/defaultcheck/BUILD deleted file mode 100644 index e7f20bfd5854e..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/defaultcheck/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["defaultcheck.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/defaultcheck", - importpath = "github.com/gogo/protobuf/plugin/defaultcheck", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/description/BUILD b/vendor/github.com/gogo/protobuf/plugin/description/BUILD deleted file mode 100644 index 07a105d9ea34c..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/description/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "description.go", - "descriptiontest.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/description", - importpath = "github.com/gogo/protobuf/plugin/description", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/testgen:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/embedcheck/BUILD b/vendor/github.com/gogo/protobuf/plugin/embedcheck/BUILD deleted file mode 100644 index 30df3a5e27067..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/embedcheck/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["embedcheck.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/embedcheck", - importpath = "github.com/gogo/protobuf/plugin/embedcheck", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/enumstringer/BUILD b/vendor/github.com/gogo/protobuf/plugin/enumstringer/BUILD deleted file mode 100644 index 4a7c629bdaa4c..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/enumstringer/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["enumstringer.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/enumstringer", - importpath = "github.com/gogo/protobuf/plugin/enumstringer", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/equal/BUILD b/vendor/github.com/gogo/protobuf/plugin/equal/BUILD deleted file mode 100644 index 185c2a71ab229..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/equal/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "equal.go", - "equaltest.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/equal", - importpath = "github.com/gogo/protobuf/plugin/equal", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/testgen:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - "//vendor/github.com/gogo/protobuf/vanity:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/face/BUILD b/vendor/github.com/gogo/protobuf/plugin/face/BUILD deleted file mode 100644 index bd3f24c26f13c..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/face/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "face.go", - "facetest.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/face", - importpath = "github.com/gogo/protobuf/plugin/face", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/testgen:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/gostring/BUILD b/vendor/github.com/gogo/protobuf/plugin/gostring/BUILD deleted file mode 100644 index e49b1016a69d5..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/gostring/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "gostring.go", - "gostringtest.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/gostring", - importpath = "github.com/gogo/protobuf/plugin/gostring", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/testgen:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/marshalto/BUILD b/vendor/github.com/gogo/protobuf/plugin/marshalto/BUILD deleted file mode 100644 index 768ebdfa651a1..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/marshalto/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["marshalto.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/marshalto", - importpath = "github.com/gogo/protobuf/plugin/marshalto", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - "//vendor/github.com/gogo/protobuf/vanity:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/oneofcheck/BUILD b/vendor/github.com/gogo/protobuf/plugin/oneofcheck/BUILD deleted file mode 100644 index 7418128fd5ae6..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/oneofcheck/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["oneofcheck.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/oneofcheck", - importpath = "github.com/gogo/protobuf/plugin/oneofcheck", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/populate/BUILD b/vendor/github.com/gogo/protobuf/plugin/populate/BUILD deleted file mode 100644 index 5f6e4f23d3cc9..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/populate/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["populate.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/populate", - importpath = "github.com/gogo/protobuf/plugin/populate", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - "//vendor/github.com/gogo/protobuf/vanity:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/size/BUILD b/vendor/github.com/gogo/protobuf/plugin/size/BUILD deleted file mode 100644 index d42a7d7d3a1d5..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/size/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "size.go", - "sizetest.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/size", - importpath = "github.com/gogo/protobuf/plugin/size", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/testgen:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - "//vendor/github.com/gogo/protobuf/vanity:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/stringer/BUILD b/vendor/github.com/gogo/protobuf/plugin/stringer/BUILD deleted file mode 100644 index a4c075690c783..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/stringer/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "stringer.go", - "stringertest.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/stringer", - importpath = "github.com/gogo/protobuf/plugin/stringer", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/testgen:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/testgen/BUILD b/vendor/github.com/gogo/protobuf/plugin/testgen/BUILD deleted file mode 100644 index dd86d504646e4..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/testgen/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["testgen.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/testgen", - importpath = "github.com/gogo/protobuf/plugin/testgen", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/union/BUILD b/vendor/github.com/gogo/protobuf/plugin/union/BUILD deleted file mode 100644 index b00af8639f21e..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/union/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "union.go", - "uniontest.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/union", - importpath = "github.com/gogo/protobuf/plugin/union", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/testgen:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/plugin/unmarshal/BUILD b/vendor/github.com/gogo/protobuf/plugin/unmarshal/BUILD deleted file mode 100644 index 0e000f4a605d6..0000000000000 --- a/vendor/github.com/gogo/protobuf/plugin/unmarshal/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["unmarshal.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/plugin/unmarshal", - importpath = "github.com/gogo/protobuf/plugin/unmarshal", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/proto/BUILD b/vendor/github.com/gogo/protobuf/proto/BUILD deleted file mode 100644 index 7e9d39a24c8e2..0000000000000 --- a/vendor/github.com/gogo/protobuf/proto/BUILD +++ /dev/null @@ -1,58 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "clone.go", - "custom_gogo.go", - "decode.go", - "deprecated.go", - "discard.go", - "duration.go", - "duration_gogo.go", - "encode.go", - "encode_gogo.go", - "equal.go", - "extensions.go", - "extensions_gogo.go", - "lib.go", - "lib_gogo.go", - "message_set.go", - "pointer_reflect.go", - "pointer_reflect_gogo.go", - "pointer_unsafe.go", - "pointer_unsafe_gogo.go", - "properties.go", - "properties_gogo.go", - "skip_gogo.go", - "table_marshal.go", - "table_marshal_gogo.go", - "table_merge.go", - "table_unmarshal.go", - "table_unmarshal_gogo.go", - "text.go", - "text_gogo.go", - "text_parser.go", - "timestamp.go", - "timestamp_gogo.go", - "wrappers.go", - "wrappers_gogo.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/proto", - importpath = "github.com/gogo/protobuf/proto", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/BUILD b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/BUILD deleted file mode 100644 index 924f248da73de..0000000000000 --- a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "descriptor.go", - "descriptor.pb.go", - "descriptor_gostring.gen.go", - "helper.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor", - importpath = "github.com/gogo/protobuf/protoc-gen-gogo/descriptor", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/gogo/protobuf/proto:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/BUILD b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/BUILD deleted file mode 100644 index f4066a24c5216..0000000000000 --- a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "generator.go", - "helper.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator", - importpath = "github.com/gogo/protobuf/protoc-gen-gogo/generator", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/internal/remap:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/plugin:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/internal/remap:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/internal/remap/BUILD b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/internal/remap/BUILD deleted file mode 100644 index 25d629b68a5fc..0000000000000 --- a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/internal/remap/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["remap.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/internal/remap", - importpath = "github.com/gogo/protobuf/protoc-gen-gogo/generator/internal/remap", - visibility = ["//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/grpc/BUILD b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/grpc/BUILD deleted file mode 100644 index b31609c3b0bfc..0000000000000 --- a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/grpc/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["grpc.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/protoc-gen-gogo/grpc", - importpath = "github.com/gogo/protobuf/protoc-gen-gogo/grpc", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/plugin/BUILD b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/plugin/BUILD deleted file mode 100644 index 7bf1fb04600e8..0000000000000 --- a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/plugin/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["plugin.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/protoc-gen-gogo/plugin", - importpath = "github.com/gogo/protobuf/protoc-gen-gogo/plugin", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/sortkeys/BUILD b/vendor/github.com/gogo/protobuf/sortkeys/BUILD deleted file mode 100644 index 1ae954ed83305..0000000000000 --- a/vendor/github.com/gogo/protobuf/sortkeys/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["sortkeys.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/sortkeys", - importpath = "github.com/gogo/protobuf/sortkeys", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/types/BUILD b/vendor/github.com/gogo/protobuf/types/BUILD deleted file mode 100644 index 371d62d8e6c06..0000000000000 --- a/vendor/github.com/gogo/protobuf/types/BUILD +++ /dev/null @@ -1,46 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "any.go", - "any.pb.go", - "api.pb.go", - "doc.go", - "duration.go", - "duration.pb.go", - "duration_gogo.go", - "empty.pb.go", - "field_mask.pb.go", - "protosize.go", - "source_context.pb.go", - "struct.pb.go", - "timestamp.go", - "timestamp.pb.go", - "timestamp_gogo.go", - "type.pb.go", - "wrappers.pb.go", - "wrappers_gogo.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/types", - importpath = "github.com/gogo/protobuf/types", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/sortkeys:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/vanity/BUILD b/vendor/github.com/gogo/protobuf/vanity/BUILD deleted file mode 100644 index a7cd66deb10f5..0000000000000 --- a/vendor/github.com/gogo/protobuf/vanity/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "enum.go", - "field.go", - "file.go", - "foreach.go", - "msg.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/vanity", - importpath = "github.com/gogo/protobuf/vanity", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/gogo/protobuf/vanity/command:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gogo/protobuf/vanity/command/BUILD b/vendor/github.com/gogo/protobuf/vanity/command/BUILD deleted file mode 100644 index e073a0c68188e..0000000000000 --- a/vendor/github.com/gogo/protobuf/vanity/command/BUILD +++ /dev/null @@ -1,45 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["command.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gogo/protobuf/vanity/command", - importpath = "github.com/gogo/protobuf/vanity/command", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/plugin/compare:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/defaultcheck:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/description:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/embedcheck:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/enumstringer:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/equal:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/face:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/gostring:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/marshalto:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/oneofcheck:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/populate:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/size:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/stringer:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/testgen:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/union:go_default_library", - "//vendor/github.com/gogo/protobuf/plugin/unmarshal:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/grpc:go_default_library", - "//vendor/github.com/gogo/protobuf/protoc-gen-gogo/plugin:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/golang/groupcache/lru/BUILD b/vendor/github.com/golang/groupcache/lru/BUILD deleted file mode 100644 index 021d745749738..0000000000000 --- a/vendor/github.com/golang/groupcache/lru/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["lru.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/golang/groupcache/lru", - importpath = "github.com/golang/groupcache/lru", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/golang/mock/gomock/BUILD b/vendor/github.com/golang/mock/gomock/BUILD deleted file mode 100644 index 7cd2f5ecb43cf..0000000000000 --- a/vendor/github.com/golang/mock/gomock/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "call.go", - "callset.go", - "controller.go", - "matchers.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/golang/mock/gomock", - importpath = "github.com/golang/mock/gomock", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/golang/protobuf/jsonpb/BUILD b/vendor/github.com/golang/protobuf/jsonpb/BUILD deleted file mode 100644 index 9f78b38f5c538..0000000000000 --- a/vendor/github.com/golang/protobuf/jsonpb/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decode.go", - "encode.go", - "json.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/golang/protobuf/jsonpb", - importpath = "github.com/golang/protobuf/jsonpb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/google.golang.org/protobuf/encoding/protojson:go_default_library", - "//vendor/google.golang.org/protobuf/proto:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoregistry:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/golang/protobuf/proto/BUILD b/vendor/github.com/golang/protobuf/proto/BUILD deleted file mode 100644 index c89303dd3297d..0000000000000 --- a/vendor/github.com/golang/protobuf/proto/BUILD +++ /dev/null @@ -1,45 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "buffer.go", - "defaults.go", - "deprecated.go", - "discard.go", - "extensions.go", - "properties.go", - "proto.go", - "registry.go", - "text_decode.go", - "text_encode.go", - "wire.go", - "wrappers.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/golang/protobuf/proto", - importpath = "github.com/golang/protobuf/proto", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/encoding/prototext:go_default_library", - "//vendor/google.golang.org/protobuf/encoding/protowire:go_default_library", - "//vendor/google.golang.org/protobuf/proto:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoregistry:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoiface:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/BUILD b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/BUILD deleted file mode 100644 index d3171a3d166e8..0000000000000 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["descriptor.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor", - importpath = "github.com/golang/protobuf/protoc-gen-go/descriptor", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - "//vendor/google.golang.org/protobuf/types/descriptorpb:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/generator/BUILD b/vendor/github.com/golang/protobuf/protoc-gen-go/generator/BUILD deleted file mode 100644 index 2cba78f1c6560..0000000000000 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/generator/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["generator.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/golang/protobuf/protoc-gen-go/generator", - importpath = "github.com/golang/protobuf/protoc-gen-go/generator", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/protoc-gen-go/descriptor:go_default_library", - "//vendor/github.com/golang/protobuf/protoc-gen-go/generator/internal/remap:go_default_library", - "//vendor/github.com/golang/protobuf/protoc-gen-go/plugin:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/golang/protobuf/protoc-gen-go/generator/internal/remap:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/generator/internal/remap/BUILD b/vendor/github.com/golang/protobuf/protoc-gen-go/generator/internal/remap/BUILD deleted file mode 100644 index 17242727be6f1..0000000000000 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/generator/internal/remap/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["remap.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/golang/protobuf/protoc-gen-go/generator/internal/remap", - importpath = "github.com/golang/protobuf/protoc-gen-go/generator/internal/remap", - visibility = ["//vendor/github.com/golang/protobuf/protoc-gen-go/generator:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/BUILD b/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/BUILD deleted file mode 100644 index 01fc7d321a89a..0000000000000 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["plugin.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/golang/protobuf/protoc-gen-go/plugin", - importpath = "github.com/golang/protobuf/protoc-gen-go/plugin", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - "//vendor/google.golang.org/protobuf/types/pluginpb:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/golang/protobuf/ptypes/BUILD b/vendor/github.com/golang/protobuf/ptypes/BUILD deleted file mode 100644 index 5d05549c51ad0..0000000000000 --- a/vendor/github.com/golang/protobuf/ptypes/BUILD +++ /dev/null @@ -1,42 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "any.go", - "doc.go", - "duration.go", - "timestamp.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/golang/protobuf/ptypes", - importpath = "github.com/golang/protobuf/ptypes", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/any:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/duration:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/timestamp:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoregistry:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/golang/protobuf/ptypes/any:all-srcs", - "//vendor/github.com/golang/protobuf/ptypes/duration:all-srcs", - "//vendor/github.com/golang/protobuf/ptypes/timestamp:all-srcs", - "//vendor/github.com/golang/protobuf/ptypes/wrappers:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/golang/protobuf/ptypes/any/BUILD b/vendor/github.com/golang/protobuf/ptypes/any/BUILD deleted file mode 100644 index 3fde20720e018..0000000000000 --- a/vendor/github.com/golang/protobuf/ptypes/any/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["any.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/golang/protobuf/ptypes/any", - importpath = "github.com/golang/protobuf/ptypes/any", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - "//vendor/google.golang.org/protobuf/types/known/anypb:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/golang/protobuf/ptypes/duration/BUILD b/vendor/github.com/golang/protobuf/ptypes/duration/BUILD deleted file mode 100644 index f795f29400d4b..0000000000000 --- a/vendor/github.com/golang/protobuf/ptypes/duration/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["duration.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/golang/protobuf/ptypes/duration", - importpath = "github.com/golang/protobuf/ptypes/duration", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - "//vendor/google.golang.org/protobuf/types/known/durationpb:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp/BUILD b/vendor/github.com/golang/protobuf/ptypes/timestamp/BUILD deleted file mode 100644 index a43bffa584e67..0000000000000 --- a/vendor/github.com/golang/protobuf/ptypes/timestamp/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["timestamp.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/golang/protobuf/ptypes/timestamp", - importpath = "github.com/golang/protobuf/ptypes/timestamp", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - "//vendor/google.golang.org/protobuf/types/known/timestamppb:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/golang/protobuf/ptypes/wrappers/BUILD b/vendor/github.com/golang/protobuf/ptypes/wrappers/BUILD deleted file mode 100644 index 96dbd888c5d71..0000000000000 --- a/vendor/github.com/golang/protobuf/ptypes/wrappers/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["wrappers.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/golang/protobuf/ptypes/wrappers", - importpath = "github.com/golang/protobuf/ptypes/wrappers", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - "//vendor/google.golang.org/protobuf/types/known/wrapperspb:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/btree/BUILD b/vendor/github.com/google/btree/BUILD deleted file mode 100644 index 22d764332d8c7..0000000000000 --- a/vendor/github.com/google/btree/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["btree.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/btree", - importpath = "github.com/google/btree", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/accelerators/BUILD b/vendor/github.com/google/cadvisor/accelerators/BUILD deleted file mode 100644 index 42422e4be7a5b..0000000000000 --- a/vendor/github.com/google/cadvisor/accelerators/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["nvidia.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/accelerators", - importpath = "github.com/google/cadvisor/accelerators", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/stats:go_default_library", - "//vendor/github.com/mindprince/gonvml:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/cache/memory/BUILD b/vendor/github.com/google/cadvisor/cache/memory/BUILD deleted file mode 100644 index 0213fc7757cc6..0000000000000 --- a/vendor/github.com/google/cadvisor/cache/memory/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["memory.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/cache/memory", - importpath = "github.com/google/cadvisor/cache/memory", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/storage:go_default_library", - "//vendor/github.com/google/cadvisor/utils:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/client/v2/BUILD b/vendor/github.com/google/cadvisor/client/v2/BUILD deleted file mode 100644 index 4f094064d2626..0000000000000 --- a/vendor/github.com/google/cadvisor/client/v2/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["client.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/client/v2", - importpath = "github.com/google/cadvisor/client/v2", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/info/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/collector/BUILD b/vendor/github.com/google/cadvisor/collector/BUILD deleted file mode 100644 index ab109e6e910aa..0000000000000 --- a/vendor/github.com/google/cadvisor/collector/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "collector_manager.go", - "config.go", - "fakes.go", - "generic_collector.go", - "prometheus_collector.go", - "types.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/collector", - importpath = "github.com/google/cadvisor/collector", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/prometheus/client_model/go:go_default_library", - "//vendor/github.com/prometheus/common/expfmt:go_default_library", - "//vendor/github.com/prometheus/common/model:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/container/BUILD b/vendor/github.com/google/cadvisor/container/BUILD deleted file mode 100644 index 5326335b994ac..0000000000000 --- a/vendor/github.com/google/cadvisor/container/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "container.go", - "factory.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/container", - importpath = "github.com/google/cadvisor/container", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/fs:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/watcher:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/google/cadvisor/container/common:all-srcs", - "//vendor/github.com/google/cadvisor/container/containerd:all-srcs", - "//vendor/github.com/google/cadvisor/container/crio:all-srcs", - "//vendor/github.com/google/cadvisor/container/docker:all-srcs", - "//vendor/github.com/google/cadvisor/container/libcontainer:all-srcs", - "//vendor/github.com/google/cadvisor/container/raw:all-srcs", - "//vendor/github.com/google/cadvisor/container/systemd:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/container/common/BUILD b/vendor/github.com/google/cadvisor/container/common/BUILD deleted file mode 100644 index d369e25da07a6..0000000000000 --- a/vendor/github.com/google/cadvisor/container/common/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "container_hints.go", - "fsHandler.go", - "helpers.go", - "inotify_watcher.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/container/common", - importpath = "github.com/google/cadvisor/container/common", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/fs:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/utils:go_default_library", - "//vendor/github.com/karrick/godirwalk:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - "//vendor/k8s.io/utils/inotify:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/container/containerd/BUILD b/vendor/github.com/google/cadvisor/container/containerd/BUILD deleted file mode 100644 index e0549d28734ad..0000000000000 --- a/vendor/github.com/google/cadvisor/container/containerd/BUILD +++ /dev/null @@ -1,53 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "factory.go", - "grpc.go", - "handler.go", - "plugin.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/container/containerd", - importpath = "github.com/google/cadvisor/container/containerd", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/containerd/containerd/api/services/containers/v1:go_default_library", - "//vendor/github.com/containerd/containerd/api/services/tasks/v1:go_default_library", - "//vendor/github.com/containerd/containerd/api/services/version/v1:go_default_library", - "//vendor/github.com/containerd/containerd/containers:go_default_library", - "//vendor/github.com/containerd/containerd/errdefs:go_default_library", - "//vendor/github.com/containerd/containerd/namespaces:go_default_library", - "//vendor/github.com/containerd/containerd/pkg/dialer:go_default_library", - "//vendor/github.com/gogo/protobuf/types:go_default_library", - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/container/common:go_default_library", - "//vendor/github.com/google/cadvisor/container/libcontainer:go_default_library", - "//vendor/github.com/google/cadvisor/fs:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/watcher:go_default_library", - "//vendor/github.com/opencontainers/runtime-spec/specs-go:go_default_library", - "//vendor/golang.org/x/net/context:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/backoff:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/google/cadvisor/container/containerd/install:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/container/containerd/install/BUILD b/vendor/github.com/google/cadvisor/container/containerd/install/BUILD deleted file mode 100644 index 1d9e61b290739..0000000000000 --- a/vendor/github.com/google/cadvisor/container/containerd/install/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["install.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/container/containerd/install", - importpath = "github.com/google/cadvisor/container/containerd/install", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/container/containerd:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/container/crio/BUILD b/vendor/github.com/google/cadvisor/container/crio/BUILD deleted file mode 100644 index a269e7cdcb40a..0000000000000 --- a/vendor/github.com/google/cadvisor/container/crio/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "factory.go", - "handler.go", - "plugin.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/container/crio", - importpath = "github.com/google/cadvisor/container/crio", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/container/common:go_default_library", - "//vendor/github.com/google/cadvisor/container/libcontainer:go_default_library", - "//vendor/github.com/google/cadvisor/fs:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/watcher:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/google/cadvisor/container/crio/install:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/container/crio/install/BUILD b/vendor/github.com/google/cadvisor/container/crio/install/BUILD deleted file mode 100644 index 133f69dfe495c..0000000000000 --- a/vendor/github.com/google/cadvisor/container/crio/install/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["install.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/container/crio/install", - importpath = "github.com/google/cadvisor/container/crio/install", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/container/crio:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/container/docker/BUILD b/vendor/github.com/google/cadvisor/container/docker/BUILD deleted file mode 100644 index 702fcac1333a6..0000000000000 --- a/vendor/github.com/google/cadvisor/container/docker/BUILD +++ /dev/null @@ -1,52 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "docker.go", - "factory.go", - "handler.go", - "plugin.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/container/docker", - importpath = "github.com/google/cadvisor/container/docker", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/blang/semver:go_default_library", - "//vendor/github.com/docker/docker/api/types:go_default_library", - "//vendor/github.com/docker/docker/api/types/container:go_default_library", - "//vendor/github.com/docker/docker/client:go_default_library", - "//vendor/github.com/docker/go-connections/tlsconfig:go_default_library", - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/container/common:go_default_library", - "//vendor/github.com/google/cadvisor/container/docker/utils:go_default_library", - "//vendor/github.com/google/cadvisor/container/libcontainer:go_default_library", - "//vendor/github.com/google/cadvisor/devicemapper:go_default_library", - "//vendor/github.com/google/cadvisor/fs:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/machine:go_default_library", - "//vendor/github.com/google/cadvisor/watcher:go_default_library", - "//vendor/github.com/google/cadvisor/zfs:go_default_library", - "//vendor/golang.org/x/net/context:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/google/cadvisor/container/docker/install:all-srcs", - "//vendor/github.com/google/cadvisor/container/docker/utils:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/container/docker/install/BUILD b/vendor/github.com/google/cadvisor/container/docker/install/BUILD deleted file mode 100644 index c3db922954fc4..0000000000000 --- a/vendor/github.com/google/cadvisor/container/docker/install/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["install.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/container/docker/install", - importpath = "github.com/google/cadvisor/container/docker/install", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/container/docker:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/container/docker/utils/BUILD b/vendor/github.com/google/cadvisor/container/docker/utils/BUILD deleted file mode 100644 index f49d680c57645..0000000000000 --- a/vendor/github.com/google/cadvisor/container/docker/utils/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["docker.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/container/docker/utils", - importpath = "github.com/google/cadvisor/container/docker/utils", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/docker/docker/api/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/container/libcontainer/BUILD b/vendor/github.com/google/cadvisor/container/libcontainer/BUILD deleted file mode 100644 index 4d63f14807df5..0000000000000 --- a/vendor/github.com/google/cadvisor/container/libcontainer/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "handler.go", - "helpers.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/container/libcontainer", - importpath = "github.com/google/cadvisor/container/libcontainer", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/container/raw/BUILD b/vendor/github.com/google/cadvisor/container/raw/BUILD deleted file mode 100644 index 77a56358cd975..0000000000000 --- a/vendor/github.com/google/cadvisor/container/raw/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "factory.go", - "handler.go", - "watcher.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/container/raw", - importpath = "github.com/google/cadvisor/container/raw", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/container/common:go_default_library", - "//vendor/github.com/google/cadvisor/container/libcontainer:go_default_library", - "//vendor/github.com/google/cadvisor/fs:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/machine:go_default_library", - "//vendor/github.com/google/cadvisor/watcher:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - "//vendor/k8s.io/utils/inotify:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/container/systemd/BUILD b/vendor/github.com/google/cadvisor/container/systemd/BUILD deleted file mode 100644 index d56fbe800c36d..0000000000000 --- a/vendor/github.com/google/cadvisor/container/systemd/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "factory.go", - "plugin.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/container/systemd", - importpath = "github.com/google/cadvisor/container/systemd", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/fs:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/watcher:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/google/cadvisor/container/systemd/install:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/container/systemd/install/BUILD b/vendor/github.com/google/cadvisor/container/systemd/install/BUILD deleted file mode 100644 index f21896f66be6d..0000000000000 --- a/vendor/github.com/google/cadvisor/container/systemd/install/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["install.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/container/systemd/install", - importpath = "github.com/google/cadvisor/container/systemd/install", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/container/systemd:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/devicemapper/BUILD b/vendor/github.com/google/cadvisor/devicemapper/BUILD deleted file mode 100644 index 37e44c0039895..0000000000000 --- a/vendor/github.com/google/cadvisor/devicemapper/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dmsetup_client.go", - "doc.go", - "thin_ls_client.go", - "thin_pool_watcher.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/devicemapper", - importpath = "github.com/google/cadvisor/devicemapper", - visibility = ["//visibility:public"], - deps = ["//vendor/k8s.io/klog/v2:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/events/BUILD b/vendor/github.com/google/cadvisor/events/BUILD deleted file mode 100644 index 7a4f73189f878..0000000000000 --- a/vendor/github.com/google/cadvisor/events/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["handler.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/events", - importpath = "github.com/google/cadvisor/events", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/utils:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/fs/BUILD b/vendor/github.com/google/cadvisor/fs/BUILD deleted file mode 100644 index 8ea46d4ecc056..0000000000000 --- a/vendor/github.com/google/cadvisor/fs/BUILD +++ /dev/null @@ -1,43 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "fs.go", - "types.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/fs", - importpath = "github.com/google/cadvisor/fs", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/google/cadvisor/devicemapper:go_default_library", - "//vendor/github.com/google/cadvisor/utils:go_default_library", - "//vendor/github.com/mistifyio/go-zfs:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - "//vendor/k8s.io/utils/mount:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/google/cadvisor/devicemapper:go_default_library", - "//vendor/github.com/google/cadvisor/utils:go_default_library", - "//vendor/github.com/mistifyio/go-zfs:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - "//vendor/k8s.io/utils/mount:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/info/v1/BUILD b/vendor/github.com/google/cadvisor/info/v1/BUILD deleted file mode 100644 index 63113198a547d..0000000000000 --- a/vendor/github.com/google/cadvisor/info/v1/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "container.go", - "docker.go", - "machine.go", - "metric.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/info/v1", - importpath = "github.com/google/cadvisor/info/v1", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/info/v2/BUILD b/vendor/github.com/google/cadvisor/info/v2/BUILD deleted file mode 100644 index d1153420c24b7..0000000000000 --- a/vendor/github.com/google/cadvisor/info/v2/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "container.go", - "conversion.go", - "machine.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/info/v2", - importpath = "github.com/google/cadvisor/info/v2", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/machine/BUILD b/vendor/github.com/google/cadvisor/machine/BUILD deleted file mode 100644 index 49108bded593e..0000000000000 --- a/vendor/github.com/google/cadvisor/machine/BUILD +++ /dev/null @@ -1,44 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "info.go", - "machine.go", - "operatingsystem_unix.go", - "operatingsystem_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/machine", - importpath = "github.com/google/cadvisor/machine", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/fs:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/nvm:go_default_library", - "//vendor/github.com/google/cadvisor/utils:go_default_library", - "//vendor/github.com/google/cadvisor/utils/cloudinfo:go_default_library", - "//vendor/github.com/google/cadvisor/utils/sysfs:go_default_library", - "//vendor/github.com/google/cadvisor/utils/sysinfo:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows/registry:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/manager/BUILD b/vendor/github.com/google/cadvisor/manager/BUILD deleted file mode 100644 index 13a6403671d0d..0000000000000 --- a/vendor/github.com/google/cadvisor/manager/BUILD +++ /dev/null @@ -1,55 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "container.go", - "manager.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/manager", - importpath = "github.com/google/cadvisor/manager", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/docker/go-units:go_default_library", - "//vendor/github.com/google/cadvisor/accelerators:go_default_library", - "//vendor/github.com/google/cadvisor/cache/memory:go_default_library", - "//vendor/github.com/google/cadvisor/collector:go_default_library", - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/container/docker:go_default_library", - "//vendor/github.com/google/cadvisor/container/raw:go_default_library", - "//vendor/github.com/google/cadvisor/events:go_default_library", - "//vendor/github.com/google/cadvisor/fs:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/info/v2:go_default_library", - "//vendor/github.com/google/cadvisor/machine:go_default_library", - "//vendor/github.com/google/cadvisor/nvm:go_default_library", - "//vendor/github.com/google/cadvisor/perf:go_default_library", - "//vendor/github.com/google/cadvisor/resctrl:go_default_library", - "//vendor/github.com/google/cadvisor/stats:go_default_library", - "//vendor/github.com/google/cadvisor/summary:go_default_library", - "//vendor/github.com/google/cadvisor/utils/cpuload:go_default_library", - "//vendor/github.com/google/cadvisor/utils/oomparser:go_default_library", - "//vendor/github.com/google/cadvisor/utils/sysfs:go_default_library", - "//vendor/github.com/google/cadvisor/version:go_default_library", - "//vendor/github.com/google/cadvisor/watcher:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/intelrdt:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - "//vendor/k8s.io/utils/clock:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/metrics/BUILD b/vendor/github.com/google/cadvisor/metrics/BUILD deleted file mode 100644 index e99ef41143e9f..0000000000000 --- a/vendor/github.com/google/cadvisor/metrics/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "metrics.go", - "prometheus.go", - "prometheus_fake.go", - "prometheus_machine.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/metrics", - importpath = "github.com/google/cadvisor/metrics", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/container:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/info/v2:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - "//vendor/k8s.io/utils/clock:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/nvm/BUILD b/vendor/github.com/google/cadvisor/nvm/BUILD deleted file mode 100644 index 37940f400d7cf..0000000000000 --- a/vendor/github.com/google/cadvisor/nvm/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["machine_no_libipmctl.go"], - cgo = True, - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/nvm", - importpath = "github.com/google/cadvisor/nvm", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/perf/BUILD b/vendor/github.com/google/cadvisor/perf/BUILD deleted file mode 100644 index a3217bc8048e6..0000000000000 --- a/vendor/github.com/google/cadvisor/perf/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "collector_no_libpfm.go", - "config.go", - "manager_no_libpfm.go", - ], - cgo = True, - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/perf", - importpath = "github.com/google/cadvisor/perf", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/stats:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/resctrl/BUILD b/vendor/github.com/google/cadvisor/resctrl/BUILD deleted file mode 100644 index 1279e2ee93be2..0000000000000 --- a/vendor/github.com/google/cadvisor/resctrl/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "collector.go", - "manager.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/resctrl", - importpath = "github.com/google/cadvisor/resctrl", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/stats:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/intelrdt:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/stats:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/intelrdt:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/stats/BUILD b/vendor/github.com/google/cadvisor/stats/BUILD deleted file mode 100644 index 41be5d3c6fdc9..0000000000000 --- a/vendor/github.com/google/cadvisor/stats/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "noop.go", - "types.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/stats", - importpath = "github.com/google/cadvisor/stats", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/storage/BUILD b/vendor/github.com/google/cadvisor/storage/BUILD deleted file mode 100644 index 9095b36b95b92..0000000000000 --- a/vendor/github.com/google/cadvisor/storage/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "common_flags.go", - "storage.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/storage", - importpath = "github.com/google/cadvisor/storage", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/google/cadvisor/info/v1:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/summary/BUILD b/vendor/github.com/google/cadvisor/summary/BUILD deleted file mode 100644 index 8ecfc8669c242..0000000000000 --- a/vendor/github.com/google/cadvisor/summary/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "buffer.go", - "percentiles.go", - "summary.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/summary", - importpath = "github.com/google/cadvisor/summary", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/info/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/utils/BUILD b/vendor/github.com/google/cadvisor/utils/BUILD deleted file mode 100644 index bf03361cd10e7..0000000000000 --- a/vendor/github.com/google/cadvisor/utils/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "path.go", - "timed_store.go", - "utils.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/utils", - importpath = "github.com/google/cadvisor/utils", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/google/cadvisor/utils/cloudinfo:all-srcs", - "//vendor/github.com/google/cadvisor/utils/cpuload:all-srcs", - "//vendor/github.com/google/cadvisor/utils/oomparser:all-srcs", - "//vendor/github.com/google/cadvisor/utils/sysfs:all-srcs", - "//vendor/github.com/google/cadvisor/utils/sysinfo:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/utils/cloudinfo/BUILD b/vendor/github.com/google/cadvisor/utils/cloudinfo/BUILD deleted file mode 100644 index c6f3fa9f69c8b..0000000000000 --- a/vendor/github.com/google/cadvisor/utils/cloudinfo/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["cloudinfo.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/utils/cloudinfo", - importpath = "github.com/google/cadvisor/utils/cloudinfo", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/google/cadvisor/utils/cloudinfo/aws:all-srcs", - "//vendor/github.com/google/cadvisor/utils/cloudinfo/azure:all-srcs", - "//vendor/github.com/google/cadvisor/utils/cloudinfo/gce:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/utils/cloudinfo/aws/BUILD b/vendor/github.com/google/cadvisor/utils/cloudinfo/aws/BUILD deleted file mode 100644 index 7820dd54673f3..0000000000000 --- a/vendor/github.com/google/cadvisor/utils/cloudinfo/aws/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["aws.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/utils/cloudinfo/aws", - importpath = "github.com/google/cadvisor/utils/cloudinfo/aws", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/ec2metadata:go_default_library", - "//vendor/github.com/aws/aws-sdk-go/aws/session:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/utils/cloudinfo:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/utils/cloudinfo/azure/BUILD b/vendor/github.com/google/cadvisor/utils/cloudinfo/azure/BUILD deleted file mode 100644 index 7fd7703344006..0000000000000 --- a/vendor/github.com/google/cadvisor/utils/cloudinfo/azure/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["azure.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/utils/cloudinfo/azure", - importpath = "github.com/google/cadvisor/utils/cloudinfo/azure", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/utils/cloudinfo:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/utils/cloudinfo/gce/BUILD b/vendor/github.com/google/cadvisor/utils/cloudinfo/gce/BUILD deleted file mode 100644 index 649b123e71081..0000000000000 --- a/vendor/github.com/google/cadvisor/utils/cloudinfo/gce/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["gce.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/utils/cloudinfo/gce", - importpath = "github.com/google/cadvisor/utils/cloudinfo/gce", - visibility = ["//visibility:public"], - deps = [ - "//vendor/cloud.google.com/go/compute/metadata:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/utils/cloudinfo:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/utils/cpuload/BUILD b/vendor/github.com/google/cadvisor/utils/cpuload/BUILD deleted file mode 100644 index bad9bd6ac3513..0000000000000 --- a/vendor/github.com/google/cadvisor/utils/cpuload/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["cpuload.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/utils/cpuload", - importpath = "github.com/google/cadvisor/utils/cpuload", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/utils/cpuload/netlink:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/google/cadvisor/utils/cpuload/netlink:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/utils/cpuload/netlink/BUILD b/vendor/github.com/google/cadvisor/utils/cpuload/netlink/BUILD deleted file mode 100644 index fa0687cd14dc8..0000000000000 --- a/vendor/github.com/google/cadvisor/utils/cpuload/netlink/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "conn.go", - "netlink.go", - "reader.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/utils/cpuload/netlink", - importpath = "github.com/google/cadvisor/utils/cpuload/netlink", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/utils/oomparser/BUILD b/vendor/github.com/google/cadvisor/utils/oomparser/BUILD deleted file mode 100644 index ae75d0257f41e..0000000000000 --- a/vendor/github.com/google/cadvisor/utils/oomparser/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["oomparser.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/utils/oomparser", - importpath = "github.com/google/cadvisor/utils/oomparser", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/euank/go-kmsg-parser/kmsgparser:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/utils/sysfs/BUILD b/vendor/github.com/google/cadvisor/utils/sysfs/BUILD deleted file mode 100644 index 947d004d5d787..0000000000000 --- a/vendor/github.com/google/cadvisor/utils/sysfs/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["sysfs.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/utils/sysfs", - importpath = "github.com/google/cadvisor/utils/sysfs", - visibility = ["//visibility:public"], - deps = ["//vendor/k8s.io/klog/v2:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/utils/sysinfo/BUILD b/vendor/github.com/google/cadvisor/utils/sysinfo/BUILD deleted file mode 100644 index 97c816157f180..0000000000000 --- a/vendor/github.com/google/cadvisor/utils/sysinfo/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["sysinfo.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/utils/sysinfo", - importpath = "github.com/google/cadvisor/utils/sysinfo", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - "//vendor/github.com/google/cadvisor/utils/sysfs:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/version/BUILD b/vendor/github.com/google/cadvisor/version/BUILD deleted file mode 100644 index fc7930a4f5d7c..0000000000000 --- a/vendor/github.com/google/cadvisor/version/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["version.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/version", - importpath = "github.com/google/cadvisor/version", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/watcher/BUILD b/vendor/github.com/google/cadvisor/watcher/BUILD deleted file mode 100644 index bb427e91076d3..0000000000000 --- a/vendor/github.com/google/cadvisor/watcher/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["watcher.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/watcher", - importpath = "github.com/google/cadvisor/watcher", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/cadvisor/zfs/BUILD b/vendor/github.com/google/cadvisor/zfs/BUILD deleted file mode 100644 index 3f0a3ae5867d5..0000000000000 --- a/vendor/github.com/google/cadvisor/zfs/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["watcher.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/cadvisor/zfs", - importpath = "github.com/google/cadvisor/zfs", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/mistifyio/go-zfs:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/go-cmp/cmp/BUILD b/vendor/github.com/google/go-cmp/cmp/BUILD deleted file mode 100644 index 000ea8cde17cc..0000000000000 --- a/vendor/github.com/google/go-cmp/cmp/BUILD +++ /dev/null @@ -1,47 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "compare.go", - "export_unsafe.go", - "options.go", - "path.go", - "report.go", - "report_compare.go", - "report_reflect.go", - "report_slices.go", - "report_text.go", - "report_value.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/go-cmp/cmp", - importpath = "github.com/google/go-cmp/cmp", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/go-cmp/cmp/internal/diff:go_default_library", - "//vendor/github.com/google/go-cmp/cmp/internal/flags:go_default_library", - "//vendor/github.com/google/go-cmp/cmp/internal/function:go_default_library", - "//vendor/github.com/google/go-cmp/cmp/internal/value:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/google/go-cmp/cmp/cmpopts:all-srcs", - "//vendor/github.com/google/go-cmp/cmp/internal/diff:all-srcs", - "//vendor/github.com/google/go-cmp/cmp/internal/flags:all-srcs", - "//vendor/github.com/google/go-cmp/cmp/internal/function:all-srcs", - "//vendor/github.com/google/go-cmp/cmp/internal/value:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/go-cmp/cmp/cmpopts/BUILD b/vendor/github.com/google/go-cmp/cmp/cmpopts/BUILD deleted file mode 100644 index 94cb303eb308f..0000000000000 --- a/vendor/github.com/google/go-cmp/cmp/cmpopts/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "equate.go", - "ignore.go", - "sort.go", - "struct_filter.go", - "xform.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/go-cmp/cmp/cmpopts", - importpath = "github.com/google/go-cmp/cmp/cmpopts", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/go-cmp/cmp:go_default_library", - "//vendor/github.com/google/go-cmp/cmp/internal/function:go_default_library", - "//vendor/golang.org/x/xerrors:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/go-cmp/cmp/internal/diff/BUILD b/vendor/github.com/google/go-cmp/cmp/internal/diff/BUILD deleted file mode 100644 index 57276db7160c4..0000000000000 --- a/vendor/github.com/google/go-cmp/cmp/internal/diff/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "debug_disable.go", - "diff.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/go-cmp/cmp/internal/diff", - importpath = "github.com/google/go-cmp/cmp/internal/diff", - visibility = ["//vendor/github.com/google/go-cmp/cmp:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/go-cmp/cmp/internal/flags/BUILD b/vendor/github.com/google/go-cmp/cmp/internal/flags/BUILD deleted file mode 100644 index f447972d22570..0000000000000 --- a/vendor/github.com/google/go-cmp/cmp/internal/flags/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "flags.go", - "toolchain_legacy.go", - "toolchain_recent.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/go-cmp/cmp/internal/flags", - importpath = "github.com/google/go-cmp/cmp/internal/flags", - visibility = ["//vendor/github.com/google/go-cmp/cmp:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/go-cmp/cmp/internal/function/BUILD b/vendor/github.com/google/go-cmp/cmp/internal/function/BUILD deleted file mode 100644 index c82060c602508..0000000000000 --- a/vendor/github.com/google/go-cmp/cmp/internal/function/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["func.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/google/go-cmp/cmp/internal/function", - importpath = "github.com/google/go-cmp/cmp/internal/function", - visibility = ["//vendor/github.com/google/go-cmp/cmp:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/BUILD b/vendor/github.com/google/go-cmp/cmp/internal/value/BUILD deleted file mode 100644 index 5ff7cbf2cad5a..0000000000000 --- a/vendor/github.com/google/go-cmp/cmp/internal/value/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "pointer_unsafe.go", - "sort.go", - "zero.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/go-cmp/cmp/internal/value", - importpath = "github.com/google/go-cmp/cmp/internal/value", - visibility = ["//vendor/github.com/google/go-cmp/cmp:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/gofuzz/BUILD b/vendor/github.com/google/gofuzz/BUILD deleted file mode 100644 index ba405489dd838..0000000000000 --- a/vendor/github.com/google/gofuzz/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "fuzz.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/gofuzz", - importpath = "github.com/google/gofuzz", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/google/uuid/BUILD b/vendor/github.com/google/uuid/BUILD deleted file mode 100644 index e842c5ce23863..0000000000000 --- a/vendor/github.com/google/uuid/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dce.go", - "doc.go", - "hash.go", - "marshal.go", - "node.go", - "node_js.go", - "node_net.go", - "sql.go", - "time.go", - "util.go", - "uuid.go", - "version1.go", - "version4.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/google/uuid", - importpath = "github.com/google/uuid", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/googleapis/gax-go/v2/BUILD b/vendor/github.com/googleapis/gax-go/v2/BUILD deleted file mode 100644 index ccbb6ff101414..0000000000000 --- a/vendor/github.com/googleapis/gax-go/v2/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "call_option.go", - "gax.go", - "header.go", - "invoke.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/googleapis/gax-go/v2", - importpath = "github.com/googleapis/gax-go/v2", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/googleapis/gnostic/compiler/BUILD b/vendor/github.com/googleapis/gnostic/compiler/BUILD deleted file mode 100644 index 472cf7b2f64b5..0000000000000 --- a/vendor/github.com/googleapis/gnostic/compiler/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "context.go", - "error.go", - "extension-handler.go", - "helpers.go", - "main.go", - "reader.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/googleapis/gnostic/compiler", - importpath = "github.com/googleapis/gnostic/compiler", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/any:go_default_library", - "//vendor/github.com/googleapis/gnostic/extensions:go_default_library", - "//vendor/gopkg.in/yaml.v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/googleapis/gnostic/extensions/BUILD b/vendor/github.com/googleapis/gnostic/extensions/BUILD deleted file mode 100644 index 78c213f92f668..0000000000000 --- a/vendor/github.com/googleapis/gnostic/extensions/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "extension.pb.go", - "extensions.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/googleapis/gnostic/extensions", - importpath = "github.com/googleapis/gnostic/extensions", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/any:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/googleapis/gnostic/openapiv2/BUILD b/vendor/github.com/googleapis/gnostic/openapiv2/BUILD deleted file mode 100644 index e9b0c065d3f7c..0000000000000 --- a/vendor/github.com/googleapis/gnostic/openapiv2/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "OpenAPIv2.go", - "OpenAPIv2.pb.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/googleapis/gnostic/openapiv2", - importpath = "github.com/googleapis/gnostic/openapiv2", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/any:go_default_library", - "//vendor/github.com/googleapis/gnostic/compiler:go_default_library", - "//vendor/gopkg.in/yaml.v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/BUILD b/vendor/github.com/gophercloud/gophercloud/BUILD deleted file mode 100644 index 194ce2ab7d30e..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "auth_options.go", - "auth_result.go", - "doc.go", - "endpoint_search.go", - "errors.go", - "params.go", - "provider_client.go", - "results.go", - "service_client.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud", - importpath = "github.com/gophercloud/gophercloud", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/pagination:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/BUILD deleted file mode 100644 index ab3a4d0c3dd51..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/BUILD +++ /dev/null @@ -1,55 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "auth_env.go", - "client.go", - "doc.go", - "endpoint_location.go", - "errors.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack", - importpath = "github.com/gophercloud/gophercloud/openstack", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tokens:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/openstack/utils:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v1/volumes:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v3/volumes:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/common/extensions:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/attachinterfaces:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/images:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tenants:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tokens:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/extensions/trusts:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/networks:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/ports:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/utils:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/BUILD deleted file mode 100644 index f3c4347c76bad..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions", - importpath = "github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/gophercloud/gophercloud:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v1/volumes/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v1/volumes/BUILD deleted file mode 100644 index ad27471362d22..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v1/volumes/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v1/volumes", - importpath = "github.com/gophercloud/gophercloud/openstack/blockstorage/v1/volumes", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes/BUILD deleted file mode 100644 index f974b784a7fab..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes", - importpath = "github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v3/volumes/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v3/volumes/BUILD deleted file mode 100644 index c581762c8b3fb..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v3/volumes/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/v3/volumes", - importpath = "github.com/gophercloud/gophercloud/openstack/blockstorage/v3/volumes", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/common/extensions/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/common/extensions/BUILD deleted file mode 100644 index d327186b48c0d..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/common/extensions/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/common/extensions", - importpath = "github.com/gophercloud/gophercloud/openstack/common/extensions", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/attachinterfaces/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/attachinterfaces/BUILD deleted file mode 100644 index c3c04ed256e31..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/attachinterfaces/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/attachinterfaces", - importpath = "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/attachinterfaces", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach/BUILD deleted file mode 100644 index c88cc6bd054bd..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach", - importpath = "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/BUILD deleted file mode 100644 index 14111d48b7eb8..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors", - importpath = "github.com/gophercloud/gophercloud/openstack/compute/v2/flavors", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/images/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/images/BUILD deleted file mode 100644 index fa3577b674258..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/images/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/images", - importpath = "github.com/gophercloud/gophercloud/openstack/compute/v2/images", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers/BUILD deleted file mode 100644 index b2becc09816b6..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "errors.go", - "microversions.go", - "requests.go", - "results.go", - "urls.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers", - importpath = "github.com/gophercloud/gophercloud/openstack/compute/v2/servers", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/images:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tenants/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tenants/BUILD deleted file mode 100644 index 60b32812fa4b7..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tenants/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tenants", - importpath = "github.com/gophercloud/gophercloud/openstack/identity/v2/tenants", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tokens/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tokens/BUILD deleted file mode 100644 index f9e258c5828bb..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tokens/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tokens", - importpath = "github.com/gophercloud/gophercloud/openstack/identity/v2/tokens", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tenants:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/extensions/trusts/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/extensions/trusts/BUILD deleted file mode 100644 index 0b2669f8b6da6..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/extensions/trusts/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/extensions/trusts", - importpath = "github.com/gophercloud/gophercloud/openstack/identity/v3/extensions/trusts", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens/BUILD deleted file mode 100644 index 95d1d1e25878b..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens", - importpath = "github.com/gophercloud/gophercloud/openstack/identity/v3/tokens", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/gophercloud/gophercloud:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/BUILD deleted file mode 100644 index fbdc351b89ab2..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/BUILD +++ /dev/null @@ -1,40 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["delegate.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions", - importpath = "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/openstack/common/extensions:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/external:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/l7policies:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/listeners:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/loadbalancers:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/monitors:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/pools:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups:all-srcs", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/external/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/external/BUILD deleted file mode 100644 index 3f9a188103a1a..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/external/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/external", - importpath = "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/external", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/networks:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips/BUILD deleted file mode 100644 index b40320a8e78d7..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips", - importpath = "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers/BUILD deleted file mode 100644 index ca6c847ad4d91..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers", - importpath = "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/l7policies/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/l7policies/BUILD deleted file mode 100644 index 6f361a91211f8..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/l7policies/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/l7policies", - importpath = "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/l7policies", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/listeners/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/listeners/BUILD deleted file mode 100644 index 9ba1b22a93be8..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/listeners/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/listeners", - importpath = "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/listeners", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/l7policies:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/pools:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/loadbalancers/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/loadbalancers/BUILD deleted file mode 100644 index 407685f313e19..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/loadbalancers/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/loadbalancers", - importpath = "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/loadbalancers", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/listeners:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/pools:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/monitors/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/monitors/BUILD deleted file mode 100644 index 39f3bd9a67121..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/monitors/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/monitors", - importpath = "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/monitors", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/pools/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/pools/BUILD deleted file mode 100644 index f5514ec301181..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/pools/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/pools", - importpath = "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/pools", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/monitors:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups/BUILD deleted file mode 100644 index 1068c1dc6a53c..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups", - importpath = "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules/BUILD deleted file mode 100644 index b1080fee86e5a..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules", - importpath = "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/networks/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/networks/BUILD deleted file mode 100644 index 2f60272be0af1..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/networks/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/networks", - importpath = "github.com/gophercloud/gophercloud/openstack/networking/v2/networks", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/ports/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/ports/BUILD deleted file mode 100644 index 6cf3f7b70724f..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/ports/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "requests.go", - "results.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/ports", - importpath = "github.com/gophercloud/gophercloud/openstack/networking/v2/ports", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gophercloud/gophercloud:go_default_library", - "//vendor/github.com/gophercloud/gophercloud/pagination:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/utils/BUILD b/vendor/github.com/gophercloud/gophercloud/openstack/utils/BUILD deleted file mode 100644 index e8866231e2f83..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/openstack/utils/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "base_endpoint.go", - "choose_version.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/openstack/utils", - importpath = "github.com/gophercloud/gophercloud/openstack/utils", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/gophercloud/gophercloud:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gophercloud/gophercloud/pagination/BUILD b/vendor/github.com/gophercloud/gophercloud/pagination/BUILD deleted file mode 100644 index 2f48299fd7824..0000000000000 --- a/vendor/github.com/gophercloud/gophercloud/pagination/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "http.go", - "linked.go", - "marker.go", - "pager.go", - "pkg.go", - "single.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gophercloud/gophercloud/pagination", - importpath = "github.com/gophercloud/gophercloud/pagination", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/gophercloud/gophercloud:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gorilla/websocket/BUILD b/vendor/github.com/gorilla/websocket/BUILD deleted file mode 100644 index 87ff1e562f41d..0000000000000 --- a/vendor/github.com/gorilla/websocket/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "client_clone.go", - "client_clone_legacy.go", - "compression.go", - "conn.go", - "conn_write.go", - "conn_write_legacy.go", - "doc.go", - "json.go", - "mask.go", - "prepared.go", - "proxy.go", - "server.go", - "trace.go", - "trace_17.go", - "util.go", - "x_net_proxy.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/gorilla/websocket", - importpath = "github.com/gorilla/websocket", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gregjones/httpcache/BUILD b/vendor/github.com/gregjones/httpcache/BUILD deleted file mode 100644 index 4cd475a86a38a..0000000000000 --- a/vendor/github.com/gregjones/httpcache/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["httpcache.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gregjones/httpcache", - importpath = "github.com/gregjones/httpcache", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/gregjones/httpcache/diskcache:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/gregjones/httpcache/diskcache/BUILD b/vendor/github.com/gregjones/httpcache/diskcache/BUILD deleted file mode 100644 index 24e4174fb423a..0000000000000 --- a/vendor/github.com/gregjones/httpcache/diskcache/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["diskcache.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/gregjones/httpcache/diskcache", - importpath = "github.com/gregjones/httpcache/diskcache", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/peterbourgon/diskv:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/BUILD b/vendor/github.com/grpc-ecosystem/go-grpc-middleware/BUILD deleted file mode 100644 index 74846068d97eb..0000000000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-middleware/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "chain.go", - "doc.go", - "wrappers.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/grpc-ecosystem/go-grpc-middleware", - importpath = "github.com/grpc-ecosystem/go-grpc-middleware", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/net/context:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/BUILD b/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/BUILD deleted file mode 100644 index 543abafbca666..0000000000000 --- a/vendor/github.com/grpc-ecosystem/go-grpc-prometheus/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "client_metrics.go", - "client_reporter.go", - "metric_options.go", - "server.go", - "server_metrics.go", - "server_reporter.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/grpc-ecosystem/go-grpc-prometheus", - importpath = "github.com/grpc-ecosystem/go-grpc-prometheus", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/golang.org/x/net/context:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/internal/BUILD b/vendor/github.com/grpc-ecosystem/grpc-gateway/internal/BUILD deleted file mode 100644 index 2497fd6bbf4aa..0000000000000 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/internal/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["stream_chunk.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/grpc-ecosystem/grpc-gateway/internal", - importpath = "github.com/grpc-ecosystem/grpc-gateway/internal", - visibility = ["//vendor/github.com/grpc-ecosystem/grpc-gateway:__subpackages__"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/any:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/internal/BUILD.bazel b/vendor/github.com/grpc-ecosystem/grpc-gateway/internal/BUILD.bazel new file mode 100644 index 0000000000000..76cafe6ec7f7c --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/internal/BUILD.bazel @@ -0,0 +1,22 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") + +package(default_visibility = ["//visibility:public"]) + +proto_library( + name = "internal_proto", + srcs = ["stream_chunk.proto"], + deps = ["@com_google_protobuf//:any_proto"], +) + +go_proto_library( + name = "internal_go_proto", + importpath = "github.com/grpc-ecosystem/grpc-gateway/internal", + proto = ":internal_proto", +) + +go_library( + name = "go_default_library", + embed = [":internal_go_proto"], + importpath = "github.com/grpc-ecosystem/grpc-gateway/internal", +) diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/BUILD b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/BUILD deleted file mode 100644 index 901d239a3ce01..0000000000000 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/BUILD +++ /dev/null @@ -1,58 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "context.go", - "convert.go", - "doc.go", - "errors.go", - "fieldmask.go", - "handler.go", - "marshal_httpbodyproto.go", - "marshal_json.go", - "marshal_jsonpb.go", - "marshal_proto.go", - "marshaler.go", - "marshaler_registry.go", - "mux.go", - "pattern.go", - "proto2_convert.go", - "proto_errors.go", - "query.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime", - importpath = "github.com/grpc-ecosystem/grpc-gateway/runtime", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/jsonpb:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/protoc-gen-go/generator:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/any:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/duration:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/timestamp:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/wrappers:go_default_library", - "//vendor/github.com/grpc-ecosystem/grpc-gateway/internal:go_default_library", - "//vendor/github.com/grpc-ecosystem/grpc-gateway/utilities:go_default_library", - "//vendor/google.golang.org/genproto/googleapis/api/httpbody:go_default_library", - "//vendor/google.golang.org/genproto/protobuf/field_mask:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - "//vendor/google.golang.org/grpc/metadata:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/BUILD.bazel b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/BUILD.bazel new file mode 100644 index 0000000000000..20862228ef872 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/BUILD.bazel @@ -0,0 +1,84 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +package(default_visibility = ["//visibility:public"]) + +go_library( + name = "go_default_library", + srcs = [ + "context.go", + "convert.go", + "doc.go", + "errors.go", + "fieldmask.go", + "handler.go", + "marshal_httpbodyproto.go", + "marshal_json.go", + "marshal_jsonpb.go", + "marshal_proto.go", + "marshaler.go", + "marshaler_registry.go", + "mux.go", + "pattern.go", + "proto2_convert.go", + "proto_errors.go", + "query.go", + ], + importpath = "github.com/grpc-ecosystem/grpc-gateway/runtime", + deps = [ + "//internal:go_default_library", + "//utilities:go_default_library", + "@com_github_golang_protobuf//jsonpb:go_default_library_gen", + "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", + "@go_googleapis//google/api:httpbody_go_proto", + "@io_bazel_rules_go//proto/wkt:any_go_proto", + "@io_bazel_rules_go//proto/wkt:duration_go_proto", + "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", + "@io_bazel_rules_go//proto/wkt:timestamp_go_proto", + "@io_bazel_rules_go//proto/wkt:wrappers_go_proto", + "@org_golang_google_grpc//codes:go_default_library", + "@org_golang_google_grpc//grpclog:go_default_library", + "@org_golang_google_grpc//metadata:go_default_library", + "@org_golang_google_grpc//status:go_default_library", + ], +) + +go_test( + name = "go_default_test", + size = "small", + srcs = [ + "context_test.go", + "errors_test.go", + "fieldmask_test.go", + "handler_test.go", + "marshal_httpbodyproto_test.go", + "marshal_json_test.go", + "marshal_jsonpb_test.go", + "marshal_proto_test.go", + "marshaler_registry_test.go", + "mux_test.go", + "pattern_test.go", + "query_test.go", + ], + embed = [":go_default_library"], + deps = [ + "//examples/proto/examplepb:go_default_library", + "//internal:go_default_library", + "//utilities:go_default_library", + "@com_github_golang_protobuf//jsonpb:go_default_library_gen", + "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_golang_protobuf//ptypes:go_default_library_gen", + "@go_googleapis//google/api:httpbody_go_proto", + "@go_googleapis//google/rpc:errdetails_go_proto", + "@io_bazel_rules_go//proto/wkt:duration_go_proto", + "@io_bazel_rules_go//proto/wkt:empty_go_proto", + "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", + "@io_bazel_rules_go//proto/wkt:struct_go_proto", + "@io_bazel_rules_go//proto/wkt:timestamp_go_proto", + "@io_bazel_rules_go//proto/wkt:wrappers_go_proto", + "@org_golang_google_grpc//:go_default_library", + "@org_golang_google_grpc//codes:go_default_library", + "@org_golang_google_grpc//metadata:go_default_library", + "@org_golang_google_grpc//status:go_default_library", + ], +) diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/BUILD b/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/BUILD deleted file mode 100644 index 09838aaad3c68..0000000000000 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "pattern.go", - "readerfactory.go", - "trie.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities", - importpath = "github.com/grpc-ecosystem/grpc-gateway/utilities", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/BUILD.bazel b/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/BUILD.bazel new file mode 100644 index 0000000000000..7109d79323187 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/BUILD.bazel @@ -0,0 +1,21 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +package(default_visibility = ["//visibility:public"]) + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "pattern.go", + "readerfactory.go", + "trie.go", + ], + importpath = "github.com/grpc-ecosystem/grpc-gateway/utilities", +) + +go_test( + name = "go_default_test", + size = "small", + srcs = ["trie_test.go"], + embed = [":go_default_library"], +) diff --git a/vendor/github.com/hashicorp/golang-lru/BUILD b/vendor/github.com/hashicorp/golang-lru/BUILD deleted file mode 100644 index 49f66d173d33b..0000000000000 --- a/vendor/github.com/hashicorp/golang-lru/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "2q.go", - "arc.go", - "doc.go", - "lru.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/hashicorp/golang-lru", - importpath = "github.com/hashicorp/golang-lru", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/hashicorp/golang-lru/simplelru:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/hashicorp/golang-lru/simplelru:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hashicorp/golang-lru/simplelru/BUILD b/vendor/github.com/hashicorp/golang-lru/simplelru/BUILD deleted file mode 100644 index da03dcec7bf17..0000000000000 --- a/vendor/github.com/hashicorp/golang-lru/simplelru/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "lru.go", - "lru_interface.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/hashicorp/golang-lru/simplelru", - importpath = "github.com/hashicorp/golang-lru/simplelru", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hashicorp/hcl/BUILD b/vendor/github.com/hashicorp/hcl/BUILD deleted file mode 100644 index 95763ac75aaf1..0000000000000 --- a/vendor/github.com/hashicorp/hcl/BUILD +++ /dev/null @@ -1,45 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decoder.go", - "hcl.go", - "lex.go", - "parse.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/hashicorp/hcl", - importpath = "github.com/hashicorp/hcl", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/hashicorp/hcl/hcl/ast:go_default_library", - "//vendor/github.com/hashicorp/hcl/hcl/parser:go_default_library", - "//vendor/github.com/hashicorp/hcl/hcl/token:go_default_library", - "//vendor/github.com/hashicorp/hcl/json/parser:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/hashicorp/hcl/hcl/ast:all-srcs", - "//vendor/github.com/hashicorp/hcl/hcl/parser:all-srcs", - "//vendor/github.com/hashicorp/hcl/hcl/printer:all-srcs", - "//vendor/github.com/hashicorp/hcl/hcl/scanner:all-srcs", - "//vendor/github.com/hashicorp/hcl/hcl/strconv:all-srcs", - "//vendor/github.com/hashicorp/hcl/hcl/token:all-srcs", - "//vendor/github.com/hashicorp/hcl/json/parser:all-srcs", - "//vendor/github.com/hashicorp/hcl/json/scanner:all-srcs", - "//vendor/github.com/hashicorp/hcl/json/token:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hashicorp/hcl/hcl/ast/BUILD b/vendor/github.com/hashicorp/hcl/hcl/ast/BUILD deleted file mode 100644 index 691ee86dc570a..0000000000000 --- a/vendor/github.com/hashicorp/hcl/hcl/ast/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ast.go", - "walk.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/hashicorp/hcl/hcl/ast", - importpath = "github.com/hashicorp/hcl/hcl/ast", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/hashicorp/hcl/hcl/token:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hashicorp/hcl/hcl/parser/BUILD b/vendor/github.com/hashicorp/hcl/hcl/parser/BUILD deleted file mode 100644 index 73d4dad6cfaf9..0000000000000 --- a/vendor/github.com/hashicorp/hcl/hcl/parser/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "error.go", - "parser.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/hashicorp/hcl/hcl/parser", - importpath = "github.com/hashicorp/hcl/hcl/parser", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/hashicorp/hcl/hcl/ast:go_default_library", - "//vendor/github.com/hashicorp/hcl/hcl/scanner:go_default_library", - "//vendor/github.com/hashicorp/hcl/hcl/token:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hashicorp/hcl/hcl/printer/BUILD b/vendor/github.com/hashicorp/hcl/hcl/printer/BUILD deleted file mode 100644 index 9123ba78e1fe6..0000000000000 --- a/vendor/github.com/hashicorp/hcl/hcl/printer/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "nodes.go", - "printer.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/hashicorp/hcl/hcl/printer", - importpath = "github.com/hashicorp/hcl/hcl/printer", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/hashicorp/hcl/hcl/ast:go_default_library", - "//vendor/github.com/hashicorp/hcl/hcl/parser:go_default_library", - "//vendor/github.com/hashicorp/hcl/hcl/token:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hashicorp/hcl/hcl/scanner/BUILD b/vendor/github.com/hashicorp/hcl/hcl/scanner/BUILD deleted file mode 100644 index dddff2552cc10..0000000000000 --- a/vendor/github.com/hashicorp/hcl/hcl/scanner/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["scanner.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/hashicorp/hcl/hcl/scanner", - importpath = "github.com/hashicorp/hcl/hcl/scanner", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/hashicorp/hcl/hcl/token:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hashicorp/hcl/hcl/strconv/BUILD b/vendor/github.com/hashicorp/hcl/hcl/strconv/BUILD deleted file mode 100644 index 6c23016911aa1..0000000000000 --- a/vendor/github.com/hashicorp/hcl/hcl/strconv/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["quote.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/hashicorp/hcl/hcl/strconv", - importpath = "github.com/hashicorp/hcl/hcl/strconv", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hashicorp/hcl/hcl/token/BUILD b/vendor/github.com/hashicorp/hcl/hcl/token/BUILD deleted file mode 100644 index 1daab674b17bf..0000000000000 --- a/vendor/github.com/hashicorp/hcl/hcl/token/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "position.go", - "token.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/hashicorp/hcl/hcl/token", - importpath = "github.com/hashicorp/hcl/hcl/token", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/hashicorp/hcl/hcl/strconv:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hashicorp/hcl/json/parser/BUILD b/vendor/github.com/hashicorp/hcl/json/parser/BUILD deleted file mode 100644 index ef8648c5b5750..0000000000000 --- a/vendor/github.com/hashicorp/hcl/json/parser/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "flatten.go", - "parser.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/hashicorp/hcl/json/parser", - importpath = "github.com/hashicorp/hcl/json/parser", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/hashicorp/hcl/hcl/ast:go_default_library", - "//vendor/github.com/hashicorp/hcl/hcl/token:go_default_library", - "//vendor/github.com/hashicorp/hcl/json/scanner:go_default_library", - "//vendor/github.com/hashicorp/hcl/json/token:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hashicorp/hcl/json/scanner/BUILD b/vendor/github.com/hashicorp/hcl/json/scanner/BUILD deleted file mode 100644 index 4e0722e66fac2..0000000000000 --- a/vendor/github.com/hashicorp/hcl/json/scanner/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["scanner.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/hashicorp/hcl/json/scanner", - importpath = "github.com/hashicorp/hcl/json/scanner", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/hashicorp/hcl/json/token:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hashicorp/hcl/json/token/BUILD b/vendor/github.com/hashicorp/hcl/json/token/BUILD deleted file mode 100644 index abb186e92d83e..0000000000000 --- a/vendor/github.com/hashicorp/hcl/json/token/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "position.go", - "token.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/hashicorp/hcl/json/token", - importpath = "github.com/hashicorp/hcl/json/token", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/hashicorp/hcl/hcl/token:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/heketi/heketi/client/api/go-client/BUILD b/vendor/github.com/heketi/heketi/client/api/go-client/BUILD deleted file mode 100644 index 3eb068052acc7..0000000000000 --- a/vendor/github.com/heketi/heketi/client/api/go-client/BUILD +++ /dev/null @@ -1,42 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "admin.go", - "backup.go", - "block_volume.go", - "client.go", - "cluster.go", - "db.go", - "device.go", - "logging.go", - "node.go", - "operations.go", - "state.go", - "topology.go", - "volume.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/heketi/heketi/client/api/go-client", - importpath = "github.com/heketi/heketi/client/api/go-client", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/dgrijalva/jwt-go:go_default_library", - "//vendor/github.com/heketi/heketi/pkg/glusterfs/api:go_default_library", - "//vendor/github.com/heketi/heketi/pkg/utils:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/heketi/heketi/pkg/glusterfs/api/BUILD b/vendor/github.com/heketi/heketi/pkg/glusterfs/api/BUILD deleted file mode 100644 index 53936fa0ad9e9..0000000000000 --- a/vendor/github.com/heketi/heketi/pkg/glusterfs/api/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["types.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/heketi/heketi/pkg/glusterfs/api", - importpath = "github.com/heketi/heketi/pkg/glusterfs/api", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/go-ozzo/ozzo-validation:go_default_library", - "//vendor/github.com/go-ozzo/ozzo-validation/is:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/heketi/heketi/pkg/utils/BUILD b/vendor/github.com/heketi/heketi/pkg/utils/BUILD deleted file mode 100644 index bb83291af8a68..0000000000000 --- a/vendor/github.com/heketi/heketi/pkg/utils/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bodystring.go", - "jsonutils.go", - "statusgroup.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/heketi/heketi/pkg/utils", - importpath = "github.com/heketi/heketi/pkg/utils", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hpcloud/tail/BUILD b/vendor/github.com/hpcloud/tail/BUILD deleted file mode 100644 index b6bddba86b6be..0000000000000 --- a/vendor/github.com/hpcloud/tail/BUILD +++ /dev/null @@ -1,44 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "tail.go", - "tail_posix.go", - "tail_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/hpcloud/tail", - importpath = "github.com/hpcloud/tail", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/hpcloud/tail/ratelimiter:go_default_library", - "//vendor/github.com/hpcloud/tail/util:go_default_library", - "//vendor/github.com/hpcloud/tail/watch:go_default_library", - "//vendor/gopkg.in/tomb.v1:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/hpcloud/tail/winfile:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/hpcloud/tail/ratelimiter:all-srcs", - "//vendor/github.com/hpcloud/tail/util:all-srcs", - "//vendor/github.com/hpcloud/tail/watch:all-srcs", - "//vendor/github.com/hpcloud/tail/winfile:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hpcloud/tail/ratelimiter/BUILD b/vendor/github.com/hpcloud/tail/ratelimiter/BUILD deleted file mode 100644 index b563182cbab44..0000000000000 --- a/vendor/github.com/hpcloud/tail/ratelimiter/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "leakybucket.go", - "memory.go", - "storage.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/hpcloud/tail/ratelimiter", - importpath = "github.com/hpcloud/tail/ratelimiter", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hpcloud/tail/util/BUILD b/vendor/github.com/hpcloud/tail/util/BUILD deleted file mode 100644 index 8d6ed42c75b38..0000000000000 --- a/vendor/github.com/hpcloud/tail/util/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["util.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/hpcloud/tail/util", - importpath = "github.com/hpcloud/tail/util", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hpcloud/tail/watch/BUILD b/vendor/github.com/hpcloud/tail/watch/BUILD deleted file mode 100644 index 922a5b6044010..0000000000000 --- a/vendor/github.com/hpcloud/tail/watch/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "filechanges.go", - "inotify.go", - "inotify_tracker.go", - "polling.go", - "watch.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/hpcloud/tail/watch", - importpath = "github.com/hpcloud/tail/watch", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/hpcloud/tail/util:go_default_library", - "//vendor/gopkg.in/fsnotify.v1:go_default_library", - "//vendor/gopkg.in/tomb.v1:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/hpcloud/tail/winfile/BUILD b/vendor/github.com/hpcloud/tail/winfile/BUILD deleted file mode 100644 index b7aedb1c7e019..0000000000000 --- a/vendor/github.com/hpcloud/tail/winfile/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["winfile.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/hpcloud/tail/winfile", - importpath = "github.com/hpcloud/tail/winfile", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/imdario/mergo/BUILD b/vendor/github.com/imdario/mergo/BUILD deleted file mode 100644 index 03e1026b2d0df..0000000000000 --- a/vendor/github.com/imdario/mergo/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "map.go", - "merge.go", - "mergo.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/imdario/mergo", - importpath = "github.com/imdario/mergo", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/inconshreveable/mousetrap/BUILD b/vendor/github.com/inconshreveable/mousetrap/BUILD deleted file mode 100644 index 7add0bb0b3959..0000000000000 --- a/vendor/github.com/inconshreveable/mousetrap/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "trap_others.go", - "trap_windows.go", - "trap_windows_1.4.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/inconshreveable/mousetrap", - importpath = "github.com/inconshreveable/mousetrap", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/ishidawataru/sctp/BUILD b/vendor/github.com/ishidawataru/sctp/BUILD deleted file mode 100644 index 72c28d7ff7242..0000000000000 --- a/vendor/github.com/ishidawataru/sctp/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ipsock_linux.go", - "sctp.go", - "sctp_linux.go", - "sctp_unsupported.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/ishidawataru/sctp", - importpath = "github.com/ishidawataru/sctp", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/jmespath/go-jmespath/BUILD b/vendor/github.com/jmespath/go-jmespath/BUILD deleted file mode 100644 index 6edd2b5d95500..0000000000000 --- a/vendor/github.com/jmespath/go-jmespath/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "astnodetype_string.go", - "functions.go", - "interpreter.go", - "lexer.go", - "parser.go", - "toktype_string.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/jmespath/go-jmespath", - importpath = "github.com/jmespath/go-jmespath", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/jonboulle/clockwork/BUILD b/vendor/github.com/jonboulle/clockwork/BUILD deleted file mode 100644 index fefa95a5b1dcc..0000000000000 --- a/vendor/github.com/jonboulle/clockwork/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["clockwork.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/jonboulle/clockwork", - importpath = "github.com/jonboulle/clockwork", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/json-iterator/go/BUILD b/vendor/github.com/json-iterator/go/BUILD deleted file mode 100644 index 1bb22c432d145..0000000000000 --- a/vendor/github.com/json-iterator/go/BUILD +++ /dev/null @@ -1,70 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "adapter.go", - "any.go", - "any_array.go", - "any_bool.go", - "any_float.go", - "any_int32.go", - "any_int64.go", - "any_invalid.go", - "any_nil.go", - "any_number.go", - "any_object.go", - "any_str.go", - "any_uint32.go", - "any_uint64.go", - "config.go", - "iter.go", - "iter_array.go", - "iter_float.go", - "iter_int.go", - "iter_object.go", - "iter_skip.go", - "iter_skip_strict.go", - "iter_str.go", - "jsoniter.go", - "pool.go", - "reflect.go", - "reflect_array.go", - "reflect_dynamic.go", - "reflect_extension.go", - "reflect_json_number.go", - "reflect_json_raw_message.go", - "reflect_map.go", - "reflect_marshaler.go", - "reflect_native.go", - "reflect_optional.go", - "reflect_slice.go", - "reflect_struct_decoder.go", - "reflect_struct_encoder.go", - "stream.go", - "stream_float.go", - "stream_int.go", - "stream_str.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/json-iterator/go", - importpath = "github.com/json-iterator/go", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/modern-go/concurrent:go_default_library", - "//vendor/github.com/modern-go/reflect2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/karrick/godirwalk/BUILD b/vendor/github.com/karrick/godirwalk/BUILD deleted file mode 100644 index d126c13c86776..0000000000000 --- a/vendor/github.com/karrick/godirwalk/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dirent.go", - "doc.go", - "readdir.go", - "readdir_unix.go", - "readdir_windows.go", - "walk.go", - "withFileno.go", - "withIno.go", - "withNamlen.go", - "withoutNamlen.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/karrick/godirwalk", - importpath = "github.com/karrick/godirwalk", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/pkg/errors:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/konsorten/go-windows-terminal-sequences/BUILD b/vendor/github.com/konsorten/go-windows-terminal-sequences/BUILD deleted file mode 100644 index c5ed6513d1cd5..0000000000000 --- a/vendor/github.com/konsorten/go-windows-terminal-sequences/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "sequences.go", - "sequences_dummy.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/konsorten/go-windows-terminal-sequences", - importpath = "github.com/konsorten/go-windows-terminal-sequences", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/libopenstorage/openstorage/api/BUILD b/vendor/github.com/libopenstorage/openstorage/api/BUILD deleted file mode 100644 index 286206632247f..0000000000000 --- a/vendor/github.com/libopenstorage/openstorage/api/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "api.pb.go", - "status.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/libopenstorage/openstorage/api", - importpath = "github.com/libopenstorage/openstorage/api", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/timestamp:go_default_library", - "//vendor/github.com/mohae/deepcopy:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/libopenstorage/openstorage/api/client:all-srcs", - "//vendor/github.com/libopenstorage/openstorage/api/spec:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/libopenstorage/openstorage/api/client/BUILD b/vendor/github.com/libopenstorage/openstorage/api/client/BUILD deleted file mode 100644 index 9e433cd6e2080..0000000000000 --- a/vendor/github.com/libopenstorage/openstorage/api/client/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "request.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/libopenstorage/openstorage/api/client", - importpath = "github.com/libopenstorage/openstorage/api/client", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/libopenstorage/openstorage/api/client/volume:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/libopenstorage/openstorage/api/client/volume/BUILD b/vendor/github.com/libopenstorage/openstorage/api/client/volume/BUILD deleted file mode 100644 index 799ea2cc668b1..0000000000000 --- a/vendor/github.com/libopenstorage/openstorage/api/client/volume/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "volume.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/libopenstorage/openstorage/api/client/volume", - importpath = "github.com/libopenstorage/openstorage/api/client/volume", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/libopenstorage/openstorage/api:go_default_library", - "//vendor/github.com/libopenstorage/openstorage/api/client:go_default_library", - "//vendor/github.com/libopenstorage/openstorage/volume:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/libopenstorage/openstorage/api/spec/BUILD b/vendor/github.com/libopenstorage/openstorage/api/spec/BUILD deleted file mode 100644 index f34f8d7b0d9c7..0000000000000 --- a/vendor/github.com/libopenstorage/openstorage/api/spec/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["spec_handler.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/libopenstorage/openstorage/api/spec", - importpath = "github.com/libopenstorage/openstorage/api/spec", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/libopenstorage/openstorage/api:go_default_library", - "//vendor/github.com/libopenstorage/openstorage/pkg/parser:go_default_library", - "//vendor/github.com/libopenstorage/openstorage/pkg/units:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/libopenstorage/openstorage/pkg/parser/BUILD b/vendor/github.com/libopenstorage/openstorage/pkg/parser/BUILD deleted file mode 100644 index 56fdcf876bf2e..0000000000000 --- a/vendor/github.com/libopenstorage/openstorage/pkg/parser/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["labels.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/libopenstorage/openstorage/pkg/parser", - importpath = "github.com/libopenstorage/openstorage/pkg/parser", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/libopenstorage/openstorage/pkg/units/BUILD b/vendor/github.com/libopenstorage/openstorage/pkg/units/BUILD deleted file mode 100644 index 7689c47a8b280..0000000000000 --- a/vendor/github.com/libopenstorage/openstorage/pkg/units/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["units.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/libopenstorage/openstorage/pkg/units", - importpath = "github.com/libopenstorage/openstorage/pkg/units", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/libopenstorage/openstorage/volume/BUILD b/vendor/github.com/libopenstorage/openstorage/volume/BUILD deleted file mode 100644 index 151005e934500..0000000000000 --- a/vendor/github.com/libopenstorage/openstorage/volume/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "volume.go", - "volume_driver_registry.go", - "volume_not_supported.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/libopenstorage/openstorage/volume", - importpath = "github.com/libopenstorage/openstorage/volume", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/libopenstorage/openstorage/api:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/liggitt/tabwriter/BUILD b/vendor/github.com/liggitt/tabwriter/BUILD deleted file mode 100644 index 73e6abf0420a2..0000000000000 --- a/vendor/github.com/liggitt/tabwriter/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["tabwriter.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/liggitt/tabwriter", - importpath = "github.com/liggitt/tabwriter", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/lithammer/dedent/BUILD b/vendor/github.com/lithammer/dedent/BUILD deleted file mode 100644 index dc71f001713fb..0000000000000 --- a/vendor/github.com/lithammer/dedent/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["dedent.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/lithammer/dedent", - importpath = "github.com/lithammer/dedent", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/magiconair/properties/BUILD b/vendor/github.com/magiconair/properties/BUILD deleted file mode 100644 index bd88d28e05a56..0000000000000 --- a/vendor/github.com/magiconair/properties/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decode.go", - "doc.go", - "integrate.go", - "lex.go", - "load.go", - "parser.go", - "properties.go", - "rangecheck.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/magiconair/properties", - importpath = "github.com/magiconair/properties", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/mailru/easyjson/buffer/BUILD b/vendor/github.com/mailru/easyjson/buffer/BUILD deleted file mode 100644 index 8cb6e9ab1a8d5..0000000000000 --- a/vendor/github.com/mailru/easyjson/buffer/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["pool.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/mailru/easyjson/buffer", - importpath = "github.com/mailru/easyjson/buffer", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/mailru/easyjson/jlexer/BUILD b/vendor/github.com/mailru/easyjson/jlexer/BUILD deleted file mode 100644 index bbe5efd94b31d..0000000000000 --- a/vendor/github.com/mailru/easyjson/jlexer/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bytestostr.go", - "error.go", - "lexer.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/mailru/easyjson/jlexer", - importpath = "github.com/mailru/easyjson/jlexer", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/mailru/easyjson/jwriter/BUILD b/vendor/github.com/mailru/easyjson/jwriter/BUILD deleted file mode 100644 index 4e734da853d73..0000000000000 --- a/vendor/github.com/mailru/easyjson/jwriter/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["writer.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/mailru/easyjson/jwriter", - importpath = "github.com/mailru/easyjson/jwriter", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/mailru/easyjson/buffer:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/BUILD b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/BUILD deleted file mode 100644 index e9196f54def54..0000000000000 --- a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decode.go", - "doc.go", - "encode.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil", - importpath = "github.com/matttproud/golang_protobuf_extensions/pbutil", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/golang/protobuf/proto:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/miekg/dns/BUILD b/vendor/github.com/miekg/dns/BUILD deleted file mode 100644 index 082c05e7dd24a..0000000000000 --- a/vendor/github.com/miekg/dns/BUILD +++ /dev/null @@ -1,136 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "acceptfunc.go", - "client.go", - "clientconfig.go", - "dane.go", - "defaults.go", - "dns.go", - "dnssec.go", - "dnssec_keygen.go", - "dnssec_keyscan.go", - "dnssec_privkey.go", - "doc.go", - "duplicate.go", - "edns.go", - "format.go", - "generate.go", - "labels.go", - "listen_go111.go", - "listen_go_not111.go", - "msg.go", - "msg_helpers.go", - "nsecx.go", - "privaterr.go", - "reverse.go", - "sanitize.go", - "scan.go", - "scan_rr.go", - "serve_mux.go", - "server.go", - "sig0.go", - "singleinflight.go", - "smimea.go", - "tlsa.go", - "tsig.go", - "types.go", - "udp.go", - "udp_windows.go", - "update.go", - "version.go", - "xfr.go", - "zduplicate.go", - "zmsg.go", - "ztypes.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/miekg/dns", - importpath = "github.com/miekg/dns", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/crypto/ed25519:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/golang.org/x/net/ipv4:go_default_library", - "//vendor/golang.org/x/net/ipv6:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/net/ipv4:go_default_library", - "//vendor/golang.org/x/net/ipv6:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/golang.org/x/net/ipv4:go_default_library", - "//vendor/golang.org/x/net/ipv6:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/golang.org/x/net/ipv4:go_default_library", - "//vendor/golang.org/x/net/ipv6:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/golang.org/x/net/ipv4:go_default_library", - "//vendor/golang.org/x/net/ipv6:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:illumos": [ - "//vendor/golang.org/x/net/ipv4:go_default_library", - "//vendor/golang.org/x/net/ipv6:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/golang.org/x/net/ipv4:go_default_library", - "//vendor/golang.org/x/net/ipv6:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:js": [ - "//vendor/golang.org/x/net/ipv4:go_default_library", - "//vendor/golang.org/x/net/ipv6:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/net/ipv4:go_default_library", - "//vendor/golang.org/x/net/ipv6:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:nacl": [ - "//vendor/golang.org/x/net/ipv4:go_default_library", - "//vendor/golang.org/x/net/ipv6:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/golang.org/x/net/ipv4:go_default_library", - "//vendor/golang.org/x/net/ipv6:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/golang.org/x/net/ipv4:go_default_library", - "//vendor/golang.org/x/net/ipv6:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:plan9": [ - "//vendor/golang.org/x/net/ipv4:go_default_library", - "//vendor/golang.org/x/net/ipv6:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/golang.org/x/net/ipv4:go_default_library", - "//vendor/golang.org/x/net/ipv6:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/mindprince/gonvml/BUILD b/vendor/github.com/mindprince/gonvml/BUILD deleted file mode 100644 index 0ee8c9235c82a..0000000000000 --- a/vendor/github.com/mindprince/gonvml/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bindings.go", - "bindings_nocgo.go", - "nvml.h", - ], - cgo = True, - clinkopts = ["-ldl"], - importmap = "k8s.io/kubernetes/vendor/github.com/mindprince/gonvml", - importpath = "github.com/mindprince/gonvml", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/mistifyio/go-zfs/BUILD b/vendor/github.com/mistifyio/go-zfs/BUILD deleted file mode 100644 index 03376510fb8b7..0000000000000 --- a/vendor/github.com/mistifyio/go-zfs/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "error.go", - "utils.go", - "utils_notsolaris.go", - "utils_solaris.go", - "zfs.go", - "zpool.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/mistifyio/go-zfs", - importpath = "github.com/mistifyio/go-zfs", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/google/uuid:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/mitchellh/go-wordwrap/BUILD b/vendor/github.com/mitchellh/go-wordwrap/BUILD deleted file mode 100644 index 3fc1135e6685e..0000000000000 --- a/vendor/github.com/mitchellh/go-wordwrap/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["wordwrap.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/mitchellh/go-wordwrap", - importpath = "github.com/mitchellh/go-wordwrap", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/mitchellh/mapstructure/BUILD b/vendor/github.com/mitchellh/mapstructure/BUILD deleted file mode 100644 index 6e84c36986270..0000000000000 --- a/vendor/github.com/mitchellh/mapstructure/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decode_hooks.go", - "error.go", - "mapstructure.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/mitchellh/mapstructure", - importpath = "github.com/mitchellh/mapstructure", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/moby/ipvs/BUILD b/vendor/github.com/moby/ipvs/BUILD deleted file mode 100644 index aa2852f1747e6..0000000000000 --- a/vendor/github.com/moby/ipvs/BUILD +++ /dev/null @@ -1,43 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "constants.go", - "doc.go", - "ipvs.go", - "netlink.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/moby/ipvs", - importpath = "github.com/moby/ipvs", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/github.com/vishvananda/netlink/nl:go_default_library", - "//vendor/github.com/vishvananda/netns:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/github.com/vishvananda/netlink/nl:go_default_library", - "//vendor/github.com/vishvananda/netns:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/moby/sys/mountinfo/BUILD b/vendor/github.com/moby/sys/mountinfo/BUILD deleted file mode 100644 index 4ff7ffc06e856..0000000000000 --- a/vendor/github.com/moby/sys/mountinfo/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "mountinfo.go", - "mountinfo_filters.go", - "mountinfo_freebsd.go", - "mountinfo_linux.go", - "mountinfo_unsupported.go", - "mountinfo_windows.go", - ], - cgo = True, - importmap = "k8s.io/kubernetes/vendor/github.com/moby/sys/mountinfo", - importpath = "github.com/moby/sys/mountinfo", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/moby/term/BUILD b/vendor/github.com/moby/term/BUILD deleted file mode 100644 index ee10cde993b3f..0000000000000 --- a/vendor/github.com/moby/term/BUILD +++ /dev/null @@ -1,84 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ascii.go", - "proxy.go", - "tc.go", - "term.go", - "term_windows.go", - "termios_bsd.go", - "termios_linux.go", - "winsize.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/moby/term", - importpath = "github.com/moby/term", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:illumos": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:js": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:nacl": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:plan9": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/Azure/go-ansiterm/winterm:go_default_library", - "//vendor/github.com/moby/term/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/moby/term/windows:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/moby/term/windows/BUILD b/vendor/github.com/moby/term/windows/BUILD deleted file mode 100644 index 62bbcb4a66493..0000000000000 --- a/vendor/github.com/moby/term/windows/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ansi_reader.go", - "ansi_writer.go", - "console.go", - "windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/moby/term/windows", - importpath = "github.com/moby/term/windows", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/Azure/go-ansiterm:go_default_library", - "//vendor/github.com/Azure/go-ansiterm/winterm:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/modern-go/concurrent/BUILD b/vendor/github.com/modern-go/concurrent/BUILD deleted file mode 100644 index d06bd58534825..0000000000000 --- a/vendor/github.com/modern-go/concurrent/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "executor.go", - "go_above_19.go", - "go_below_19.go", - "log.go", - "unbounded_executor.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/modern-go/concurrent", - importpath = "github.com/modern-go/concurrent", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/modern-go/reflect2/BUILD b/vendor/github.com/modern-go/reflect2/BUILD deleted file mode 100644 index 5625b84cd7f55..0000000000000 --- a/vendor/github.com/modern-go/reflect2/BUILD +++ /dev/null @@ -1,56 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "go_above_17.go", - "go_above_19.go", - "go_below_17.go", - "go_below_19.go", - "reflect2.go", - "reflect2_amd64.s", - "reflect2_kind.go", - "relfect2_386.s", - "relfect2_amd64p32.s", - "relfect2_arm.s", - "relfect2_arm64.s", - "relfect2_mips64x.s", - "relfect2_mipsx.s", - "relfect2_ppc64x.s", - "relfect2_s390x.s", - "safe_field.go", - "safe_map.go", - "safe_slice.go", - "safe_struct.go", - "safe_type.go", - "type_map.go", - "unsafe_array.go", - "unsafe_eface.go", - "unsafe_field.go", - "unsafe_iface.go", - "unsafe_link.go", - "unsafe_map.go", - "unsafe_ptr.go", - "unsafe_slice.go", - "unsafe_struct.go", - "unsafe_type.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/modern-go/reflect2", - importpath = "github.com/modern-go/reflect2", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/modern-go/concurrent:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/mohae/deepcopy/BUILD b/vendor/github.com/mohae/deepcopy/BUILD deleted file mode 100644 index 2fcfa1c6c98e0..0000000000000 --- a/vendor/github.com/mohae/deepcopy/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["deepcopy.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/mohae/deepcopy", - importpath = "github.com/mohae/deepcopy", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/morikuni/aec/BUILD b/vendor/github.com/morikuni/aec/BUILD deleted file mode 100644 index 7ced26436e95e..0000000000000 --- a/vendor/github.com/morikuni/aec/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "aec.go", - "ansi.go", - "builder.go", - "sgr.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/morikuni/aec", - importpath = "github.com/morikuni/aec", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/mrunalp/fileutils/BUILD b/vendor/github.com/mrunalp/fileutils/BUILD deleted file mode 100644 index 8a4772965b26f..0000000000000 --- a/vendor/github.com/mrunalp/fileutils/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "fileutils.go", - "idtools.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/mrunalp/fileutils", - importpath = "github.com/mrunalp/fileutils", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/munnerz/goautoneg/BUILD b/vendor/github.com/munnerz/goautoneg/BUILD deleted file mode 100644 index fd31c6c004468..0000000000000 --- a/vendor/github.com/munnerz/goautoneg/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["autoneg.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/munnerz/goautoneg", - importpath = "github.com/munnerz/goautoneg", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/mvdan/xurls/BUILD b/vendor/github.com/mvdan/xurls/BUILD deleted file mode 100644 index 9d132a7e8a405..0000000000000 --- a/vendor/github.com/mvdan/xurls/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "regex.go", - "schemes.go", - "tlds.go", - "tlds_pseudo.go", - "xurls.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/mvdan/xurls", - importpath = "github.com/mvdan/xurls", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/mxk/go-flowrate/flowrate/BUILD b/vendor/github.com/mxk/go-flowrate/flowrate/BUILD deleted file mode 100644 index 9a3863787dc1f..0000000000000 --- a/vendor/github.com/mxk/go-flowrate/flowrate/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "flowrate.go", - "io.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/mxk/go-flowrate/flowrate", - importpath = "github.com/mxk/go-flowrate/flowrate", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/.travis.yml b/vendor/github.com/onsi/ginkgo/.travis.yml index b454d643cbc41..72e8ccf0be98d 100644 --- a/vendor/github.com/onsi/ginkgo/.travis.yml +++ b/vendor/github.com/onsi/ginkgo/.travis.yml @@ -1,12 +1,10 @@ language: go go: + - 1.10.x + - 1.11.x - 1.12.x - - 1.13.x - tip -# allow internal package imports, necessary for forked repositories -go_import_path: github.com/onsi/ginkgo - install: - go get -v -t ./... - go get golang.org/x/tools/cmd/cover diff --git a/vendor/github.com/onsi/ginkgo/BUILD b/vendor/github.com/onsi/ginkgo/BUILD deleted file mode 100644 index d9269eac4951c..0000000000000 --- a/vendor/github.com/onsi/ginkgo/BUILD +++ /dev/null @@ -1,53 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["ginkgo_dsl.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo", - importpath = "github.com/onsi/ginkgo", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/onsi/ginkgo/config:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/codelocation:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/failer:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/remote:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/suite:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/testingtproxy:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/writer:go_default_library", - "//vendor/github.com/onsi/ginkgo/reporters:go_default_library", - "//vendor/github.com/onsi/ginkgo/reporters/stenographer:go_default_library", - "//vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable:go_default_library", - "//vendor/github.com/onsi/ginkgo/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/onsi/ginkgo/config:all-srcs", - "//vendor/github.com/onsi/ginkgo/ginkgo:all-srcs", - "//vendor/github.com/onsi/ginkgo/internal/codelocation:all-srcs", - "//vendor/github.com/onsi/ginkgo/internal/containernode:all-srcs", - "//vendor/github.com/onsi/ginkgo/internal/failer:all-srcs", - "//vendor/github.com/onsi/ginkgo/internal/leafnodes:all-srcs", - "//vendor/github.com/onsi/ginkgo/internal/remote:all-srcs", - "//vendor/github.com/onsi/ginkgo/internal/spec:all-srcs", - "//vendor/github.com/onsi/ginkgo/internal/spec_iterator:all-srcs", - "//vendor/github.com/onsi/ginkgo/internal/specrunner:all-srcs", - "//vendor/github.com/onsi/ginkgo/internal/suite:all-srcs", - "//vendor/github.com/onsi/ginkgo/internal/testingtproxy:all-srcs", - "//vendor/github.com/onsi/ginkgo/internal/writer:all-srcs", - "//vendor/github.com/onsi/ginkgo/reporters:all-srcs", - "//vendor/github.com/onsi/ginkgo/types:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/CHANGELOG.md b/vendor/github.com/onsi/ginkgo/CHANGELOG.md index 96f03ad7c2b08..4920406aeb820 100644 --- a/vendor/github.com/onsi/ginkgo/CHANGELOG.md +++ b/vendor/github.com/onsi/ginkgo/CHANGELOG.md @@ -1,51 +1,3 @@ -## 1.11.0 - -### Features -- Add syscall for riscv64 architecture [f66e896] -- teamcity reporter: output location of test failure as well as test definition (#626) [9869142] -- teamcity reporter: output newline after every service message (#625) [3cfa02d] -- Add support for go module when running `generate` command (#578) [9c89e3f] - -## 1.10.3 - -### Fixes -- Set go_import_path in travis.yml to allow internal packages in forks (#607) [3b721db] -- Add integration test [d90e0dc] -- Fix coverage files combining [e5dde8c] -- A new CLI option: -ginkgo.reportFile (#601) [034fd25] - -## 1.10.2 - -### Fixes -- speed up table entry generateIt() (#609) [5049dc5] -- Fix. Write errors to stderr instead of stdout (#610) [7bb3091] - -## 1.10.1 - -### Fixes -- stack backtrace: fix skipping (#600) [2a4c0bd] - -## 1.10.0 - -### Fixes -- stack backtrace: fix alignment and skipping [66915d6] -- fix typo in documentation [8f97b93] - -## 1.9.0 - -### Features -- Option to print output into report, when tests have passed [0545415] - -### Fixes -- Fixed typos in comments [0ecbc58] -- gofmt code [a7f8bfb] -- Simplify code [7454d00] -- Simplify concatenation, incrementation and function assignment [4825557] -- Avoid unnecessary conversions [9d9403c] -- JUnit: include more detailed information about panic [19cca4b] -- Print help to stdout when the user asks for help [4cb7441] - - ## 1.8.0 ### New Features diff --git a/vendor/github.com/onsi/ginkgo/config/BUILD b/vendor/github.com/onsi/ginkgo/config/BUILD deleted file mode 100644 index 146c8ec1c920a..0000000000000 --- a/vendor/github.com/onsi/ginkgo/config/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["config.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/config", - importpath = "github.com/onsi/ginkgo/config", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/config/config.go b/vendor/github.com/onsi/ginkgo/config/config.go index 14c82ec3a7101..dab2a24708cb8 100644 --- a/vendor/github.com/onsi/ginkgo/config/config.go +++ b/vendor/github.com/onsi/ginkgo/config/config.go @@ -20,7 +20,7 @@ import ( "fmt" ) -const VERSION = "1.11.0" +const VERSION = "1.8.0" type GinkgoConfigType struct { RandomSeed int64 @@ -52,15 +52,13 @@ type DefaultReporterConfigType struct { Succinct bool Verbose bool FullTrace bool - ReportPassed bool - ReportFile string } var DefaultReporterConfig = DefaultReporterConfigType{} func processPrefix(prefix string) string { if prefix != "" { - prefix += "." + prefix = prefix + "." } return prefix } @@ -100,9 +98,6 @@ func Flags(flagSet *flag.FlagSet, prefix string, includeParallelFlags bool) { flagSet.BoolVar(&(DefaultReporterConfig.Verbose), prefix+"v", false, "If set, default reporter print out all specs as they begin.") flagSet.BoolVar(&(DefaultReporterConfig.Succinct), prefix+"succinct", false, "If set, default reporter prints out a very succinct report") flagSet.BoolVar(&(DefaultReporterConfig.FullTrace), prefix+"trace", false, "If set, default reporter prints out the full stack trace when a failure occurs") - flagSet.BoolVar(&(DefaultReporterConfig.ReportPassed), prefix+"reportPassed", false, "If set, default reporter prints out captured output of passed tests.") - flagSet.StringVar(&(DefaultReporterConfig.ReportFile), prefix+"reportFile", "", "Override the default reporter output file path.") - } func BuildFlagArgs(prefix string, ginkgo GinkgoConfigType, reporter DefaultReporterConfigType) []string { @@ -201,13 +196,5 @@ func BuildFlagArgs(prefix string, ginkgo GinkgoConfigType, reporter DefaultRepor result = append(result, fmt.Sprintf("--%strace", prefix)) } - if reporter.ReportPassed { - result = append(result, fmt.Sprintf("--%sreportPassed", prefix)) - } - - if reporter.ReportFile != "" { - result = append(result, fmt.Sprintf("--%sreportFile=%s", prefix, reporter.ReportFile)) - } - return result } diff --git a/vendor/github.com/onsi/ginkgo/extension.go b/vendor/github.com/onsi/ginkgo/extension.go new file mode 100644 index 0000000000000..fd188ce1fb361 --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/extension.go @@ -0,0 +1,19 @@ +package ginkgo + +import ( + "github.com/onsi/ginkgo/internal/suite" + "github.com/onsi/ginkgo/internal/writer" + "github.com/onsi/ginkgo/types" +) + +func GlobalSuite() *suite.Suite { + return globalSuite +} + +func GinkgoWriterType() *writer.Writer { + return GinkgoWriter.(*writer.Writer) +} + +func WalkTests(fn func(name, parentName string, node types.TestNode)) { + globalSuite.WalkTests(fn) +} diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/BUILD b/vendor/github.com/onsi/ginkgo/ginkgo/BUILD deleted file mode 100644 index 6d5c4eeee04cc..0000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/BUILD +++ /dev/null @@ -1,64 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bootstrap_command.go", - "build_command.go", - "convert_command.go", - "generate_command.go", - "help_command.go", - "main.go", - "nodot_command.go", - "notifications.go", - "run_command.go", - "run_watch_and_build_command_flags.go", - "suite_runner.go", - "unfocus_command.go", - "version_command.go", - "watch_command.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/ginkgo", - importpath = "github.com/onsi/ginkgo/ginkgo", - visibility = ["//visibility:private"], - deps = [ - "//vendor/github.com/onsi/ginkgo/config:go_default_library", - "//vendor/github.com/onsi/ginkgo/ginkgo/convert:go_default_library", - "//vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler:go_default_library", - "//vendor/github.com/onsi/ginkgo/ginkgo/nodot:go_default_library", - "//vendor/github.com/onsi/ginkgo/ginkgo/testrunner:go_default_library", - "//vendor/github.com/onsi/ginkgo/ginkgo/testsuite:go_default_library", - "//vendor/github.com/onsi/ginkgo/ginkgo/watch:go_default_library", - "//vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable:go_default_library", - "//vendor/github.com/onsi/ginkgo/types:go_default_library", - ], -) - -go_binary( - name = "ginkgo", - embed = [":go_default_library"], - tags = ["manual"], - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/onsi/ginkgo/ginkgo/convert:all-srcs", - "//vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler:all-srcs", - "//vendor/github.com/onsi/ginkgo/ginkgo/nodot:all-srcs", - "//vendor/github.com/onsi/ginkgo/ginkgo/testrunner:all-srcs", - "//vendor/github.com/onsi/ginkgo/ginkgo/testsuite:all-srcs", - "//vendor/github.com/onsi/ginkgo/ginkgo/watch:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/bootstrap_command.go b/vendor/github.com/onsi/ginkgo/ginkgo/bootstrap_command.go index 93150d1a4c8e9..fea4d4d4e6c63 100644 --- a/vendor/github.com/onsi/ginkgo/ginkgo/bootstrap_command.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo/bootstrap_command.go @@ -131,7 +131,10 @@ func determinePackageName(name string, internal bool) string { func fileExists(path string) bool { _, err := os.Stat(path) - return err == nil + if err == nil { + return true + } + return false } func generateBootstrap(agouti, noDot, internal bool, customBootstrapFile string) { diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/convert/BUILD b/vendor/github.com/onsi/ginkgo/ginkgo/convert/BUILD deleted file mode 100644 index 37dc4ff5137e6..0000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/convert/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ginkgo_ast_nodes.go", - "import.go", - "package_rewriter.go", - "test_finder.go", - "testfile_rewriter.go", - "testing_t_rewriter.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/ginkgo/convert", - importpath = "github.com/onsi/ginkgo/ginkgo/convert", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/convert/import.go b/vendor/github.com/onsi/ginkgo/ginkgo/convert/import.go index 06c6ec94c90b7..e226196f72e27 100644 --- a/vendor/github.com/onsi/ginkgo/ginkgo/convert/import.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo/convert/import.go @@ -1,6 +1,7 @@ package convert import ( + "errors" "fmt" "go/ast" ) @@ -23,7 +24,7 @@ func importsForRootNode(rootNode *ast.File) (imports *ast.GenDecl, err error) { } } - err = fmt.Errorf("Could not find imports for root node:\n\t%#v\n", rootNode) + err = errors.New(fmt.Sprintf("Could not find imports for root node:\n\t%#v\n", rootNode)) return } diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/convert/package_rewriter.go b/vendor/github.com/onsi/ginkgo/ginkgo/convert/package_rewriter.go index 5e00d5618be63..ed09c460d4c32 100644 --- a/vendor/github.com/onsi/ginkgo/ginkgo/convert/package_rewriter.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo/convert/package_rewriter.go @@ -24,6 +24,7 @@ func RewritePackage(packageName string) { for _, filename := range findTestsInPackage(pkg) { rewriteTestsInFile(filename) } + return } /* diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/convert/testfile_rewriter.go b/vendor/github.com/onsi/ginkgo/ginkgo/convert/testfile_rewriter.go index d415050ef3366..4b001a7dbb54a 100644 --- a/vendor/github.com/onsi/ginkgo/ginkgo/convert/testfile_rewriter.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo/convert/testfile_rewriter.go @@ -61,6 +61,7 @@ func rewriteTestsInFile(pathToFile string) { } ioutil.WriteFile(pathToFile, buffer.Bytes(), fileInfo.Mode()) + return } /* @@ -87,6 +88,7 @@ func rewriteTestFuncAsItStatement(testFunc *ast.FuncDecl, rootNode *ast.File, de // remove the old test func from the root node's declarations rootNode.Decls = append(rootNode.Decls[:funcIndex], rootNode.Decls[funcIndex+1:]...) + return } /* diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/generate_command.go b/vendor/github.com/onsi/ginkgo/ginkgo/generate_command.go index c0a39237e856e..ad044303b3a56 100644 --- a/vendor/github.com/onsi/ginkgo/ginkgo/generate_command.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo/generate_command.go @@ -1,12 +1,10 @@ package main import ( - "bytes" "flag" "fmt" "os" "path/filepath" - "strconv" "strings" "text/template" ) @@ -160,90 +158,11 @@ func formatSubject(name string) string { return name } -// moduleName returns module name from go.mod from given module root directory -func moduleName(modRoot string) string { - modFile, err := os.Open(filepath.Join(modRoot, "go.mod")) - if err != nil { - return "" - } - - mod := make([]byte, 128) - _, err = modFile.Read(mod) - if err != nil { - return "" - } - - slashSlash := []byte("//") - moduleStr := []byte("module") - - for len(mod) > 0 { - line := mod - mod = nil - if i := bytes.IndexByte(line, '\n'); i >= 0 { - line, mod = line[:i], line[i+1:] - } - if i := bytes.Index(line, slashSlash); i >= 0 { - line = line[:i] - } - line = bytes.TrimSpace(line) - if !bytes.HasPrefix(line, moduleStr) { - continue - } - line = line[len(moduleStr):] - n := len(line) - line = bytes.TrimSpace(line) - if len(line) == n || len(line) == 0 { - continue - } - - if line[0] == '"' || line[0] == '`' { - p, err := strconv.Unquote(string(line)) - if err != nil { - return "" // malformed quoted string or multiline module path - } - return p - } - - return string(line) - } - - return "" // missing module path -} - -func findModuleRoot(dir string) (root string) { - dir = filepath.Clean(dir) - - // Look for enclosing go.mod. - for { - if fi, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil && !fi.IsDir() { - return dir - } - d := filepath.Dir(dir) - if d == dir { - break - } - dir = d - } - return "" -} - func getPackageImportPath() string { workingDir, err := os.Getwd() if err != nil { panic(err.Error()) } - - // Try go.mod file first - modRoot := findModuleRoot(workingDir) - if modRoot != "" { - modName := moduleName(modRoot) - if modName != "" { - cd := strings.Replace(workingDir, modRoot, "", -1) - return modName + cd - } - } - - // Fallback to GOPATH structure sep := string(filepath.Separator) paths := strings.Split(workingDir, sep+"src"+sep) if len(paths) == 1 { diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/BUILD b/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/BUILD deleted file mode 100644 index 33f21a9c096da..0000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "interrupt_handler.go", - "sigquit_swallower_unix.go", - "sigquit_swallower_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler", - importpath = "github.com/onsi/ginkgo/ginkgo/interrupthandler", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/interrupt_handler.go b/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/interrupt_handler.go index ec456bf29223a..c15db0b02ad87 100644 --- a/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/interrupt_handler.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo/interrupthandler/interrupt_handler.go @@ -16,7 +16,7 @@ type InterruptHandler struct { func NewInterruptHandler() *InterruptHandler { h := &InterruptHandler{ lock: &sync.Mutex{}, - C: make(chan bool), + C: make(chan bool, 0), } go h.handleInterrupt() diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/main.go b/vendor/github.com/onsi/ginkgo/ginkgo/main.go index 0741ba8c993d6..4a1aeef4f571b 100644 --- a/vendor/github.com/onsi/ginkgo/ginkgo/main.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo/main.go @@ -153,7 +153,6 @@ func (c *Command) Matches(name string) bool { } func (c *Command) Run(args []string, additionalArgs []string) { - c.FlagSet.Usage = usage c.FlagSet.Parse(args) c.Command(c.FlagSet.Args(), additionalArgs) } @@ -216,21 +215,20 @@ func commandMatching(name string) (*Command, bool) { } func usage() { - fmt.Printf("Ginkgo Version %s\n\n", config.VERSION) + fmt.Fprintf(os.Stderr, "Ginkgo Version %s\n\n", config.VERSION) usageForCommand(DefaultCommand, false) for _, command := range Commands { - fmt.Printf("\n") + fmt.Fprintf(os.Stderr, "\n") usageForCommand(command, false) } } func usageForCommand(command *Command, longForm bool) { - fmt.Printf("%s\n%s\n", command.UsageCommand, strings.Repeat("-", len(command.UsageCommand))) - fmt.Printf("%s\n", strings.Join(command.Usage, "\n")) + fmt.Fprintf(os.Stderr, "%s\n%s\n", command.UsageCommand, strings.Repeat("-", len(command.UsageCommand))) + fmt.Fprintf(os.Stderr, "%s\n", strings.Join(command.Usage, "\n")) if command.SuppressFlagDocumentation && !longForm { - fmt.Printf("%s\n", strings.Join(command.FlagDocSubstitute, "\n ")) + fmt.Fprintf(os.Stderr, "%s\n", strings.Join(command.FlagDocSubstitute, "\n ")) } else { - command.FlagSet.SetOutput(os.Stdout) command.FlagSet.PrintDefaults() } } diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/nodot/BUILD b/vendor/github.com/onsi/ginkgo/ginkgo/nodot/BUILD deleted file mode 100644 index 6d67672cd749d..0000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/nodot/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["nodot.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/ginkgo/nodot", - importpath = "github.com/onsi/ginkgo/ginkgo/nodot", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/run_command.go b/vendor/github.com/onsi/ginkgo/ginkgo/run_command.go index 1d06e08fd4544..569b6a29ca757 100644 --- a/vendor/github.com/onsi/ginkgo/ginkgo/run_command.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo/run_command.go @@ -5,7 +5,6 @@ import ( "fmt" "math/rand" "os" - "regexp" "strings" "time" @@ -164,27 +163,17 @@ func (r *SpecRunner) combineCoverprofiles(runners []*testrunner.TestRunner) erro fmt.Println("path is " + path) - combined, err := os.OpenFile( - filepath.Join(path, r.getCoverprofile()), - os.O_WRONLY|os.O_CREATE, - 0666, - ) + combined, err := os.OpenFile(filepath.Join(path, r.getCoverprofile()), + os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0666) if err != nil { fmt.Printf("Unable to create combined profile, %v\n", err) return nil // non-fatal error } - modeRegex := regexp.MustCompile(`^mode: .*\n`) - for index, runner := range runners { + for _, runner := range runners { contents, err := ioutil.ReadFile(runner.CoverageFile) - // remove the cover mode line from every file - // except the first one - if index > 0 { - contents = modeRegex.ReplaceAll(contents, []byte{}) - } - if err != nil { fmt.Printf("Unable to read coverage file %s to combine, %v\n", runner.CoverageFile, err) return nil // non-fatal error diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/suite_runner.go b/vendor/github.com/onsi/ginkgo/ginkgo/suite_runner.go index ab746d7e953da..ce6c94602f2ab 100644 --- a/vendor/github.com/onsi/ginkgo/ginkgo/suite_runner.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo/suite_runner.go @@ -41,7 +41,7 @@ func (r *SuiteRunner) compileInParallel(runners []*testrunner.TestRunner, numCom //an array of channels - the nth runner's compilation output is sent to the nth channel in this array //we read from these channels in order to ensure we run the suites in order orderedCompilationOutputs := []chan compilationOutput{} - for range runners { + for _ = range runners { orderedCompilationOutputs = append(orderedCompilationOutputs, make(chan compilationOutput, 1)) } diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/BUILD b/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/BUILD deleted file mode 100644 index 41b2eabaf9ec5..0000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "build_args.go", - "build_args_old.go", - "log_writer.go", - "run_result.go", - "test_runner.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/ginkgo/testrunner", - importpath = "github.com/onsi/ginkgo/ginkgo/testrunner", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/onsi/ginkgo/config:go_default_library", - "//vendor/github.com/onsi/ginkgo/ginkgo/testsuite:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/remote:go_default_library", - "//vendor/github.com/onsi/ginkgo/reporters/stenographer:go_default_library", - "//vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable:go_default_library", - "//vendor/github.com/onsi/ginkgo/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/test_runner.go b/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/test_runner.go index 80670d24a0d2f..dccb39518027a 100644 --- a/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/test_runner.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo/testrunner/test_runner.go @@ -156,7 +156,7 @@ func (t *TestRunner) CompileTo(path string) error { fmt.Println(string(output)) } - if !fileExists(path) { + if fileExists(path) == false { compiledFile := t.Suite.PackageName + ".test" if fileExists(compiledFile) { // seems like we are on an old go version that does not support the -o flag on go test @@ -182,7 +182,7 @@ func (t *TestRunner) CompileTo(path string) error { func fileExists(path string) bool { _, err := os.Stat(path) - return err == nil || !os.IsNotExist(err) + return err == nil || os.IsNotExist(err) == false } // copyFile copies the contents of the file named src to the file named @@ -523,7 +523,7 @@ func (t *TestRunner) combineCoverprofiles() { lines := map[string]int{} lineOrder := []string{} for i, coverProfile := range profiles { - for _, line := range strings.Split(coverProfile, "\n")[1:] { + for _, line := range strings.Split(string(coverProfile), "\n")[1:] { if len(line) == 0 { continue } diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/testsuite/BUILD b/vendor/github.com/onsi/ginkgo/ginkgo/testsuite/BUILD deleted file mode 100644 index c029480c07839..0000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/testsuite/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "test_suite.go", - "vendor_check_go15.go", - "vendor_check_go16.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/ginkgo/testsuite", - importpath = "github.com/onsi/ginkgo/ginkgo/testsuite", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/watch/BUILD b/vendor/github.com/onsi/ginkgo/ginkgo/watch/BUILD deleted file mode 100644 index 7ed2be4a0e486..0000000000000 --- a/vendor/github.com/onsi/ginkgo/ginkgo/watch/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "delta.go", - "delta_tracker.go", - "dependencies.go", - "package_hash.go", - "package_hashes.go", - "suite.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/ginkgo/watch", - importpath = "github.com/onsi/ginkgo/ginkgo/watch", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/onsi/ginkgo/ginkgo/testsuite:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/watch/dependencies.go b/vendor/github.com/onsi/ginkgo/ginkgo/watch/dependencies.go index b7f756777e4ff..82c25face30f4 100644 --- a/vendor/github.com/onsi/ginkgo/ginkgo/watch/dependencies.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo/watch/dependencies.go @@ -77,7 +77,7 @@ func (d Dependencies) resolveAndAdd(deps []string, depth int) { if err != nil { continue } - if !pkg.Goroot && !ginkgoAndGomegaFilter.Match([]byte(pkg.Dir)) { + if pkg.Goroot == false && !ginkgoAndGomegaFilter.Match([]byte(pkg.Dir)) { d.addDepIfNotPresent(pkg.Dir, depth) } } diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/watch/package_hash.go b/vendor/github.com/onsi/ginkgo/ginkgo/watch/package_hash.go index 67e2c1c329d05..7e1e4192ddaf1 100644 --- a/vendor/github.com/onsi/ginkgo/ginkgo/watch/package_hash.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo/watch/package_hash.go @@ -36,7 +36,7 @@ func (p *PackageHash) CheckForChanges() bool { codeHash, codeModifiedTime, testHash, testModifiedTime, deleted := p.computeHashes() if deleted { - if !p.Deleted { + if p.Deleted == false { t := time.Now() p.CodeModifiedTime = t p.TestModifiedTime = t diff --git a/vendor/github.com/onsi/ginkgo/ginkgo_dsl.go b/vendor/github.com/onsi/ginkgo/ginkgo_dsl.go index 3cbf89a35c732..b732937cdfa3c 100644 --- a/vendor/github.com/onsi/ginkgo/ginkgo_dsl.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo_dsl.go @@ -199,11 +199,6 @@ type Benchmarker interface { // ginkgo bootstrap func RunSpecs(t GinkgoTestingT, description string) bool { specReporters := []Reporter{buildDefaultReporter()} - if config.DefaultReporterConfig.ReportFile != "" { - reportFile := config.DefaultReporterConfig.ReportFile - specReporters[0] = reporters.NewJUnitReporter(reportFile) - return RunSpecsWithDefaultAndCustomReporters(t, description, specReporters) - } return RunSpecsWithCustomReporters(t, description, specReporters) } @@ -263,7 +258,7 @@ func Fail(message string, callerSkip ...int) { skip = callerSkip[0] } - globalFailer.Fail(message, codelocation.New(skip+1)) + globalFailer.Fail(message, codelocation.NewWithStack(skip+1)) panic(GINKGO_PANIC) } @@ -280,7 +275,7 @@ func Fail(message string, callerSkip ...int) { func GinkgoRecover() { e := recover() if e != nil { - globalFailer.Panic(codelocation.New(1), e) + globalFailer.Panic(codelocation.NewWithStack(1), e) } } @@ -288,7 +283,7 @@ func GinkgoRecover() { //BeforeEach, AfterEach, JustBeforeEach, It, and Measurement blocks. // //In addition you can nest Describe, Context and When blocks. Describe, Context and When blocks are functionally -//equivalent. The difference is purely semantic -- you typically Describe the behavior of an object +//equivalent. The difference is purely semantic -- you typical Describe the behavior of an object //or method and, within that Describe, outline a number of Contexts and Whens. func Describe(text string, body func()) bool { globalSuite.PushContainerNode(text, body, types.FlagTypeNone, codelocation.New(1)) @@ -504,7 +499,7 @@ func AfterSuite(body interface{}, timeout ...float64) bool { //until that node is done before running. // //SynchronizedBeforeSuite accomplishes this by taking *two* function arguments. The first is only run on parallel node #1. The second is -//run on all nodes, but *only* after the first function completes successfully. Ginkgo also makes it possible to send data from the first function (on Node 1) +//run on all nodes, but *only* after the first function completes succesfully. Ginkgo also makes it possible to send data from the first function (on Node 1) //to the second function (on all the other nodes). // //The functions have the following signatures. The first function (which only runs on node 1) has the signature: diff --git a/vendor/github.com/onsi/ginkgo/internal/codelocation/BUILD b/vendor/github.com/onsi/ginkgo/internal/codelocation/BUILD deleted file mode 100644 index 43f65174f6071..0000000000000 --- a/vendor/github.com/onsi/ginkgo/internal/codelocation/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["code_location.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/codelocation", - importpath = "github.com/onsi/ginkgo/internal/codelocation", - visibility = ["//vendor/github.com/onsi/ginkgo:__subpackages__"], - deps = ["//vendor/github.com/onsi/ginkgo/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/internal/codelocation/code_location.go b/vendor/github.com/onsi/ginkgo/internal/codelocation/code_location.go index aa89d6cba8aa4..9a98e3fe78315 100644 --- a/vendor/github.com/onsi/ginkgo/internal/codelocation/code_location.go +++ b/vendor/github.com/onsi/ginkgo/internal/codelocation/code_location.go @@ -11,35 +11,24 @@ import ( func New(skip int) types.CodeLocation { _, file, line, _ := runtime.Caller(skip + 1) - stackTrace := PruneStack(string(debug.Stack()), skip+1) + return types.CodeLocation{FileName: file, LineNumber: line} +} + +func NewWithStack(skip int) types.CodeLocation { + _, file, line, _ := runtime.Caller(skip + 1) + stackTrace := PruneStack(string(debug.Stack()), skip) return types.CodeLocation{FileName: file, LineNumber: line, FullStackTrace: stackTrace} } -// PruneStack removes references to functions that are internal to Ginkgo -// and the Go runtime from a stack string and a certain number of stack entries -// at the beginning of the stack. The stack string has the format -// as returned by runtime/debug.Stack. The leading goroutine information is -// optional and always removed if present. Beware that runtime/debug.Stack -// adds itself as first entry, so typically skip must be >= 1 to remove that -// entry. func PruneStack(fullStackTrace string, skip int) string { stack := strings.Split(fullStackTrace, "\n") - // Ensure that the even entries are the method names and the - // the odd entries the source code information. - if len(stack) > 0 && strings.HasPrefix(stack[0], "goroutine ") { - // Ignore "goroutine 29 [running]:" line. - stack = stack[1:] - } - // The "+1" is for skipping over the initial entry, which is - // runtime/debug.Stack() itself. if len(stack) > 2*(skip+1) { stack = stack[2*(skip+1):] } prunedStack := []string{} re := regexp.MustCompile(`\/ginkgo\/|\/pkg\/testing\/|\/pkg\/runtime\/`) for i := 0; i < len(stack)/2; i++ { - // We filter out based on the source code file name. - if !re.Match([]byte(stack[i*2+1])) { + if !re.Match([]byte(stack[i*2])) { prunedStack = append(prunedStack, stack[i*2]) prunedStack = append(prunedStack, stack[i*2+1]) } diff --git a/vendor/github.com/onsi/ginkgo/internal/containernode/BUILD b/vendor/github.com/onsi/ginkgo/internal/containernode/BUILD deleted file mode 100644 index e0169254722ba..0000000000000 --- a/vendor/github.com/onsi/ginkgo/internal/containernode/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["container_node.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/containernode", - importpath = "github.com/onsi/ginkgo/internal/containernode", - visibility = ["//vendor/github.com/onsi/ginkgo:__subpackages__"], - deps = [ - "//vendor/github.com/onsi/ginkgo/internal/leafnodes:go_default_library", - "//vendor/github.com/onsi/ginkgo/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/internal/failer/BUILD b/vendor/github.com/onsi/ginkgo/internal/failer/BUILD deleted file mode 100644 index 34cff9ec6feaa..0000000000000 --- a/vendor/github.com/onsi/ginkgo/internal/failer/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["failer.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/failer", - importpath = "github.com/onsi/ginkgo/internal/failer", - visibility = ["//vendor/github.com/onsi/ginkgo:__subpackages__"], - deps = ["//vendor/github.com/onsi/ginkgo/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/internal/leafnodes/BUILD b/vendor/github.com/onsi/ginkgo/internal/leafnodes/BUILD deleted file mode 100644 index 0723027633581..0000000000000 --- a/vendor/github.com/onsi/ginkgo/internal/leafnodes/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "benchmarker.go", - "interfaces.go", - "it_node.go", - "measure_node.go", - "runner.go", - "setup_nodes.go", - "suite_nodes.go", - "synchronized_after_suite_node.go", - "synchronized_before_suite_node.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/leafnodes", - importpath = "github.com/onsi/ginkgo/internal/leafnodes", - visibility = ["//vendor/github.com/onsi/ginkgo:__subpackages__"], - deps = [ - "//vendor/github.com/onsi/ginkgo/internal/codelocation:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/failer:go_default_library", - "//vendor/github.com/onsi/ginkgo/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go index 393901e11c3fe..d6d54234c2fe1 100644 --- a/vendor/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go +++ b/vendor/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go @@ -17,7 +17,7 @@ type benchmarker struct { func newBenchmarker() *benchmarker { return &benchmarker{ - measurements: make(map[string]*types.SpecMeasurement), + measurements: make(map[string]*types.SpecMeasurement, 0), } } diff --git a/vendor/github.com/onsi/ginkgo/internal/leafnodes/it_node_extension.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/it_node_extension.go new file mode 100644 index 0000000000000..54747c556739e --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/internal/leafnodes/it_node_extension.go @@ -0,0 +1,13 @@ +package leafnodes + +import ( + "github.com/onsi/ginkgo/types" +) + +func (node *ItNode) SetText(text string) { + node.text = text +} + +func (node *ItNode) SetFlag(flag types.FlagType) { + node.flag = flag +} diff --git a/vendor/github.com/onsi/ginkgo/internal/leafnodes/runner.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/runner.go index 16cb66c3e4923..5b9390528217f 100644 --- a/vendor/github.com/onsi/ginkgo/internal/leafnodes/runner.go +++ b/vendor/github.com/onsi/ginkgo/internal/leafnodes/runner.go @@ -73,7 +73,7 @@ func (r *runner) runAsync() (outcome types.SpecState, failure types.SpecFailure) defer func() { if e := recover(); e != nil || !finished { - r.failer.Panic(codelocation.New(2), e) + r.failer.Panic(codelocation.NewWithStack(2), e) select { case <-done: break @@ -104,7 +104,7 @@ func (r *runner) runSync() (outcome types.SpecState, failure types.SpecFailure) defer func() { if e := recover(); e != nil || !finished { - r.failer.Panic(codelocation.New(2), e) + r.failer.Panic(codelocation.NewWithStack(2), e) } failure, outcome = r.failer.Drain(r.nodeType, r.componentIndex, r.codeLocation) diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/BUILD b/vendor/github.com/onsi/ginkgo/internal/remote/BUILD deleted file mode 100644 index 5def2fce22dcb..0000000000000 --- a/vendor/github.com/onsi/ginkgo/internal/remote/BUILD +++ /dev/null @@ -1,72 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "aggregator.go", - "forwarding_reporter.go", - "output_interceptor.go", - "output_interceptor_unix.go", - "output_interceptor_win.go", - "server.go", - "syscall_dup_linux_arm64.go", - "syscall_dup_linux_riscv64.go", - "syscall_dup_solaris.go", - "syscall_dup_unix.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/remote", - importpath = "github.com/onsi/ginkgo/internal/remote", - visibility = ["//vendor/github.com/onsi/ginkgo:__subpackages__"], - deps = [ - "//vendor/github.com/onsi/ginkgo/config:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/spec_iterator:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/writer:go_default_library", - "//vendor/github.com/onsi/ginkgo/reporters:go_default_library", - "//vendor/github.com/onsi/ginkgo/reporters/stenographer:go_default_library", - "//vendor/github.com/onsi/ginkgo/types:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/hpcloud/tail:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/github.com/hpcloud/tail:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/github.com/hpcloud/tail:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/github.com/hpcloud/tail:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/github.com/hpcloud/tail:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/hpcloud/tail:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/github.com/hpcloud/tail:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/github.com/hpcloud/tail:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/github.com/hpcloud/tail:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/aggregator.go b/vendor/github.com/onsi/ginkgo/internal/remote/aggregator.go index f9ab3006758be..6b54afe014204 100644 --- a/vendor/github.com/onsi/ginkgo/internal/remote/aggregator.go +++ b/vendor/github.com/onsi/ginkgo/internal/remote/aggregator.go @@ -54,11 +54,11 @@ func NewAggregator(nodeCount int, result chan bool, config config.DefaultReporte config: config, stenographer: stenographer, - suiteBeginnings: make(chan configAndSuite), - beforeSuites: make(chan *types.SetupSummary), - afterSuites: make(chan *types.SetupSummary), - specCompletions: make(chan *types.SpecSummary), - suiteEndings: make(chan *types.SuiteSummary), + suiteBeginnings: make(chan configAndSuite, 0), + beforeSuites: make(chan *types.SetupSummary, 0), + afterSuites: make(chan *types.SetupSummary, 0), + specCompletions: make(chan *types.SpecSummary, 0), + suiteEndings: make(chan *types.SuiteSummary, 0), } go aggregator.mux() @@ -227,7 +227,7 @@ func (aggregator *Aggregator) registerSuiteEnding(suite *types.SuiteSummary) (fi aggregatedSuiteSummary.SuiteSucceeded = true for _, suiteSummary := range aggregator.aggregatedSuiteEndings { - if !suiteSummary.SuiteSucceeded { + if suiteSummary.SuiteSucceeded == false { aggregatedSuiteSummary.SuiteSucceeded = false } diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/server.go b/vendor/github.com/onsi/ginkgo/internal/remote/server.go index 93e9dac057de0..367c54daff7fb 100644 --- a/vendor/github.com/onsi/ginkgo/internal/remote/server.go +++ b/vendor/github.com/onsi/ginkgo/internal/remote/server.go @@ -213,7 +213,7 @@ func (server *Server) handleCounter(writer http.ResponseWriter, request *http.Re c := spec_iterator.Counter{} server.lock.Lock() c.Index = server.counter - server.counter++ + server.counter = server.counter + 1 server.lock.Unlock() json.NewEncoder(writer).Encode(c) diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_linux_riscv64.go b/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_linux_riscv64.go deleted file mode 100644 index 0d40f0a541bf4..0000000000000 --- a/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_linux_riscv64.go +++ /dev/null @@ -1,11 +0,0 @@ -// +build linux,riscv64 - -package remote - -import "syscall" - -// linux_riscv64 doesn't have syscall.Dup2 which ginkgo uses, so -// use the nearly identical syscall.Dup3 instead -func syscallDup(oldfd int, newfd int) (err error) { - return syscall.Dup3(oldfd, newfd, 0) -} diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go b/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go index 981aa74664c5a..ef6255960071a 100644 --- a/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go +++ b/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go @@ -1,5 +1,4 @@ // +build !linux !arm64 -// +build !linux !riscv64 // +build !windows // +build !solaris diff --git a/vendor/github.com/onsi/ginkgo/internal/spec/BUILD b/vendor/github.com/onsi/ginkgo/internal/spec/BUILD deleted file mode 100644 index db1f44af3b999..0000000000000 --- a/vendor/github.com/onsi/ginkgo/internal/spec/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "spec.go", - "specs.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/spec", - importpath = "github.com/onsi/ginkgo/internal/spec", - visibility = ["//vendor/github.com/onsi/ginkgo:__subpackages__"], - deps = [ - "//vendor/github.com/onsi/ginkgo/internal/containernode:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/leafnodes:go_default_library", - "//vendor/github.com/onsi/ginkgo/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/internal/spec/spec.go b/vendor/github.com/onsi/ginkgo/internal/spec/spec.go index 6eef40a0e0c23..7fd68ee8e0355 100644 --- a/vendor/github.com/onsi/ginkgo/internal/spec/spec.go +++ b/vendor/github.com/onsi/ginkgo/internal/spec/spec.go @@ -107,11 +107,11 @@ func (spec *Spec) Summary(suiteID string) *types.SpecSummary { NumberOfSamples: spec.subject.Samples(), ComponentTexts: componentTexts, ComponentCodeLocations: componentCodeLocations, - State: spec.getState(), - RunTime: runTime, - Failure: spec.failure, - Measurements: spec.measurementsReport(), - SuiteID: suiteID, + State: spec.getState(), + RunTime: runTime, + Failure: spec.failure, + Measurements: spec.measurementsReport(), + SuiteID: suiteID, } } diff --git a/vendor/github.com/onsi/ginkgo/internal/spec/specs.go b/vendor/github.com/onsi/ginkgo/internal/spec/specs.go index 8a20071375fef..27c0d1d6cd0f4 100644 --- a/vendor/github.com/onsi/ginkgo/internal/spec/specs.go +++ b/vendor/github.com/onsi/ginkgo/internal/spec/specs.go @@ -107,11 +107,11 @@ func (e *Specs) applyRegExpFocusAndSkip(description string, focusString string, toMatch := e.toMatch(description, i) if focusFilter != nil { - matchesFocus = focusFilter.Match(toMatch) + matchesFocus = focusFilter.Match([]byte(toMatch)) } if skipFilter != nil { - matchesSkip = skipFilter.Match(toMatch) + matchesSkip = skipFilter.Match([]byte(toMatch)) } if !matchesFocus || matchesSkip { diff --git a/vendor/github.com/onsi/ginkgo/internal/spec_iterator/BUILD b/vendor/github.com/onsi/ginkgo/internal/spec_iterator/BUILD deleted file mode 100644 index 8e9764da1fd55..0000000000000 --- a/vendor/github.com/onsi/ginkgo/internal/spec_iterator/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "index_computer.go", - "parallel_spec_iterator.go", - "serial_spec_iterator.go", - "sharded_parallel_spec_iterator.go", - "spec_iterator.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/spec_iterator", - importpath = "github.com/onsi/ginkgo/internal/spec_iterator", - visibility = ["//vendor/github.com/onsi/ginkgo:__subpackages__"], - deps = ["//vendor/github.com/onsi/ginkgo/internal/spec:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/internal/specrunner/BUILD b/vendor/github.com/onsi/ginkgo/internal/specrunner/BUILD deleted file mode 100644 index 508bbe3e74fb8..0000000000000 --- a/vendor/github.com/onsi/ginkgo/internal/specrunner/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "random_id.go", - "spec_runner.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/specrunner", - importpath = "github.com/onsi/ginkgo/internal/specrunner", - visibility = ["//vendor/github.com/onsi/ginkgo:__subpackages__"], - deps = [ - "//vendor/github.com/onsi/ginkgo/config:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/leafnodes:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/spec:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/spec_iterator:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/writer:go_default_library", - "//vendor/github.com/onsi/ginkgo/reporters:go_default_library", - "//vendor/github.com/onsi/ginkgo/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go b/vendor/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go index c9a0a60d84cd8..2c683cb8b9495 100644 --- a/vendor/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go +++ b/vendor/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go @@ -300,7 +300,7 @@ func (runner *SpecRunner) reportSpecWillRun(summary *types.SpecSummary) { } func (runner *SpecRunner) reportSpecDidComplete(summary *types.SpecSummary, failed bool) { - if len(summary.CapturedOutput) == 0 { + if failed && len(summary.CapturedOutput) == 0 { summary.CapturedOutput = string(runner.writer.Bytes()) } for i := len(runner.reporters) - 1; i >= 1; i-- { diff --git a/vendor/github.com/onsi/ginkgo/internal/suite/BUILD b/vendor/github.com/onsi/ginkgo/internal/suite/BUILD deleted file mode 100644 index c56d610e0d175..0000000000000 --- a/vendor/github.com/onsi/ginkgo/internal/suite/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["suite.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/suite", - importpath = "github.com/onsi/ginkgo/internal/suite", - visibility = ["//vendor/github.com/onsi/ginkgo:__subpackages__"], - deps = [ - "//vendor/github.com/onsi/ginkgo/config:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/containernode:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/failer:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/leafnodes:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/spec:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/spec_iterator:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/specrunner:go_default_library", - "//vendor/github.com/onsi/ginkgo/internal/writer:go_default_library", - "//vendor/github.com/onsi/ginkgo/reporters:go_default_library", - "//vendor/github.com/onsi/ginkgo/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/internal/suite/suite_extension.go b/vendor/github.com/onsi/ginkgo/internal/suite/suite_extension.go new file mode 100644 index 0000000000000..df4964620d162 --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/internal/suite/suite_extension.go @@ -0,0 +1,52 @@ +package suite + +import ( + "math/rand" + + "github.com/onsi/ginkgo/config" + "github.com/onsi/ginkgo/internal/containernode" + "github.com/onsi/ginkgo/internal/leafnodes" + "github.com/onsi/ginkgo/internal/spec" + "github.com/onsi/ginkgo/internal/spec_iterator" + "github.com/onsi/ginkgo/types" +) + +func (suite *Suite) Iterator(config config.GinkgoConfigType) spec_iterator.SpecIterator { + specsSlice := []*spec.Spec{} + for _, collatedNodes := range suite.topLevelContainer.Collate() { + specsSlice = append(specsSlice, spec.New(collatedNodes.Subject, collatedNodes.Containers, config.EmitSpecProgress)) + } + + specs := spec.NewSpecs(specsSlice) + + if config.RandomizeAllSpecs { + specs.Shuffle(rand.New(rand.NewSource(config.RandomSeed))) + } + + if config.SkipMeasurements { + specs.SkipMeasurements() + } + return spec_iterator.NewSerialIterator(specs.Specs()) +} + +func (suite *Suite) WalkTests(fn func(testName, parentName string, test types.TestNode)) { + suite.topLevelContainer.BackPropagateProgrammaticFocus() + for _, collatedNodes := range suite.topLevelContainer.Collate() { + itNode, ok := collatedNodes.Subject.(*leafnodes.ItNode) + if !ok { + continue + } + fn(collatedNodes.Subject.Text(), containerName(collatedNodes.Containers), itNode) + } +} + +func containerName(containers []*containernode.ContainerNode) string { + var parent string + for i, container := range containers { + if i > 0 { + parent += " " + } + parent += container.Text() + } + return parent +} diff --git a/vendor/github.com/onsi/ginkgo/internal/testingtproxy/BUILD b/vendor/github.com/onsi/ginkgo/internal/testingtproxy/BUILD deleted file mode 100644 index 6a2982e8ed61c..0000000000000 --- a/vendor/github.com/onsi/ginkgo/internal/testingtproxy/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["testing_t_proxy.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/testingtproxy", - importpath = "github.com/onsi/ginkgo/internal/testingtproxy", - visibility = ["//vendor/github.com/onsi/ginkgo:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/internal/writer/BUILD b/vendor/github.com/onsi/ginkgo/internal/writer/BUILD deleted file mode 100644 index cf71e1a6bb42c..0000000000000 --- a/vendor/github.com/onsi/ginkgo/internal/writer/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "fake_writer.go", - "writer.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/internal/writer", - importpath = "github.com/onsi/ginkgo/internal/writer", - visibility = ["//vendor/github.com/onsi/ginkgo:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/reporters/BUILD b/vendor/github.com/onsi/ginkgo/reporters/BUILD deleted file mode 100644 index 7998adffe0b4e..0000000000000 --- a/vendor/github.com/onsi/ginkgo/reporters/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "default_reporter.go", - "fake_reporter.go", - "junit_reporter.go", - "reporter.go", - "teamcity_reporter.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/reporters", - importpath = "github.com/onsi/ginkgo/reporters", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/onsi/ginkgo/config:go_default_library", - "//vendor/github.com/onsi/ginkgo/reporters/stenographer:go_default_library", - "//vendor/github.com/onsi/ginkgo/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/onsi/ginkgo/reporters/stenographer:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/reporters/default_reporter.go b/vendor/github.com/onsi/ginkgo/reporters/default_reporter.go index c76283b46e9bf..ac58dd5f7a3a7 100644 --- a/vendor/github.com/onsi/ginkgo/reporters/default_reporter.go +++ b/vendor/github.com/onsi/ginkgo/reporters/default_reporter.go @@ -62,9 +62,6 @@ func (reporter *DefaultReporter) SpecDidComplete(specSummary *types.SpecSummary) reporter.stenographer.AnnounceSuccesfulSlowSpec(specSummary, reporter.config.Succinct) } else { reporter.stenographer.AnnounceSuccesfulSpec(specSummary) - if reporter.config.ReportPassed { - reporter.stenographer.AnnounceCapturedOutput(specSummary.CapturedOutput) - } } case types.SpecStatePending: reporter.stenographer.AnnouncePendingSpec(specSummary, reporter.config.NoisyPendings && !reporter.config.Succinct) diff --git a/vendor/github.com/onsi/ginkgo/reporters/junit_reporter.go b/vendor/github.com/onsi/ginkgo/reporters/junit_reporter.go index d76e2fe77d95b..2c9f3c79299f3 100644 --- a/vendor/github.com/onsi/ginkgo/reporters/junit_reporter.go +++ b/vendor/github.com/onsi/ginkgo/reporters/junit_reporter.go @@ -13,7 +13,6 @@ import ( "fmt" "math" "os" - "path/filepath" "strings" "github.com/onsi/ginkgo/config" @@ -33,17 +32,12 @@ type JUnitTestSuite struct { type JUnitTestCase struct { Name string `xml:"name,attr"` ClassName string `xml:"classname,attr"` - PassedMessage *JUnitPassedMessage `xml:"passed,omitempty"` FailureMessage *JUnitFailureMessage `xml:"failure,omitempty"` Skipped *JUnitSkipped `xml:"skipped,omitempty"` Time float64 `xml:"time,attr"` SystemOut string `xml:"system-out,omitempty"` } -type JUnitPassedMessage struct { - Message string `xml:",chardata"` -} - type JUnitFailureMessage struct { Type string `xml:"type,attr"` Message string `xml:",chardata"` @@ -54,10 +48,9 @@ type JUnitSkipped struct { } type JUnitReporter struct { - suite JUnitTestSuite - filename string - testSuiteName string - ReporterConfig config.DefaultReporterConfigType + suite JUnitTestSuite + filename string + testSuiteName string } //NewJUnitReporter creates a new JUnit XML reporter. The XML will be stored in the passed in filename. @@ -67,13 +60,12 @@ func NewJUnitReporter(filename string) *JUnitReporter { } } -func (reporter *JUnitReporter) SpecSuiteWillBegin(ginkgoConfig config.GinkgoConfigType, summary *types.SuiteSummary) { +func (reporter *JUnitReporter) SpecSuiteWillBegin(config config.GinkgoConfigType, summary *types.SuiteSummary) { reporter.suite = JUnitTestSuite{ Name: summary.SuiteDescription, TestCases: []JUnitTestCase{}, } reporter.testSuiteName = summary.SuiteDescription - reporter.ReporterConfig = config.DefaultReporterConfig } func (reporter *JUnitReporter) SpecWillRun(specSummary *types.SpecSummary) { @@ -113,21 +105,11 @@ func (reporter *JUnitReporter) SpecDidComplete(specSummary *types.SpecSummary) { Name: strings.Join(specSummary.ComponentTexts[1:], " "), ClassName: reporter.testSuiteName, } - if reporter.ReporterConfig.ReportPassed && specSummary.State == types.SpecStatePassed { - testCase.PassedMessage = &JUnitPassedMessage{ - Message: specSummary.CapturedOutput, - } - } if specSummary.State == types.SpecStateFailed || specSummary.State == types.SpecStateTimedOut || specSummary.State == types.SpecStatePanicked { testCase.FailureMessage = &JUnitFailureMessage{ Type: reporter.failureTypeForState(specSummary.State), Message: failureMessage(specSummary.Failure), } - if specSummary.State == types.SpecStatePanicked { - testCase.FailureMessage.Message += fmt.Sprintf("\n\nPanic: %s\n\nFull stack:\n%s", - specSummary.Failure.ForwardedPanic, - specSummary.Failure.Location.FullStackTrace) - } testCase.SystemOut = specSummary.CapturedOutput } if specSummary.State == types.SpecStateSkipped || specSummary.State == types.SpecStatePending { @@ -142,29 +124,17 @@ func (reporter *JUnitReporter) SpecSuiteDidEnd(summary *types.SuiteSummary) { reporter.suite.Time = math.Trunc(summary.RunTime.Seconds()*1000) / 1000 reporter.suite.Failures = summary.NumberOfFailedSpecs reporter.suite.Errors = 0 - if reporter.ReporterConfig.ReportFile != "" { - reporter.filename = reporter.ReporterConfig.ReportFile - fmt.Printf("\nJUnit path was configured: %s\n", reporter.filename) - } - filePath, _ := filepath.Abs(reporter.filename) - dirPath := filepath.Dir(filePath) - err := os.MkdirAll(dirPath, os.ModePerm) + file, err := os.Create(reporter.filename) if err != nil { - fmt.Printf("\nFailed to create JUnit directory: %s\n\t%s", filePath, err.Error()) - } - file, err := os.Create(filePath) - if err != nil { - fmt.Fprintf(os.Stderr, "Failed to create JUnit report file: %s\n\t%s", filePath, err.Error()) + fmt.Printf("Failed to create JUnit report file: %s\n\t%s", reporter.filename, err.Error()) } defer file.Close() file.WriteString(xml.Header) encoder := xml.NewEncoder(file) encoder.Indent(" ", " ") err = encoder.Encode(reporter.suite) - if err == nil { - fmt.Fprintf(os.Stdout, "\nJUnit report was created: %s\n", filePath) - } else { - fmt.Fprintf(os.Stderr,"\nFailed to generate JUnit report data:\n\t%s", err.Error()) + if err != nil { + fmt.Printf("Failed to generate JUnit report\n\t%s", err.Error()) } } diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/BUILD b/vendor/github.com/onsi/ginkgo/reporters/stenographer/BUILD deleted file mode 100644 index 5b9430385274d..0000000000000 --- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "console_logging.go", - "fake_stenographer.go", - "stenographer.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/reporters/stenographer", - importpath = "github.com/onsi/ginkgo/reporters/stenographer", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/onsi/ginkgo/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable:all-srcs", - "//vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/BUILD b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/BUILD deleted file mode 100644 index f38a9ad208560..0000000000000 --- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "colorable_others.go", - "colorable_windows.go", - "noncolorable.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable", - importpath = "github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/BUILD b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/BUILD deleted file mode 100644 index 86fb1a1007cc8..0000000000000 --- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "isatty_bsd.go", - "isatty_linux.go", - "isatty_solaris.go", - "isatty_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty", - importpath = "github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/reporters/teamcity_reporter.go b/vendor/github.com/onsi/ginkgo/reporters/teamcity_reporter.go index 84fd8aff87898..36ee2a60057b9 100644 --- a/vendor/github.com/onsi/ginkgo/reporters/teamcity_reporter.go +++ b/vendor/github.com/onsi/ginkgo/reporters/teamcity_reporter.go @@ -22,9 +22,8 @@ const ( ) type TeamCityReporter struct { - writer io.Writer - testSuiteName string - ReporterConfig config.DefaultReporterConfigType + writer io.Writer + testSuiteName string } func NewTeamCityReporter(writer io.Writer) *TeamCityReporter { @@ -35,7 +34,7 @@ func NewTeamCityReporter(writer io.Writer) *TeamCityReporter { func (reporter *TeamCityReporter) SpecSuiteWillBegin(config config.GinkgoConfigType, summary *types.SuiteSummary) { reporter.testSuiteName = escape(summary.SuiteDescription) - fmt.Fprintf(reporter.writer, "%s[testSuiteStarted name='%s']\n", messageId, reporter.testSuiteName) + fmt.Fprintf(reporter.writer, "%s[testSuiteStarted name='%s']", messageId, reporter.testSuiteName) } func (reporter *TeamCityReporter) BeforeSuiteDidRun(setupSummary *types.SetupSummary) { @@ -49,50 +48,38 @@ func (reporter *TeamCityReporter) AfterSuiteDidRun(setupSummary *types.SetupSumm func (reporter *TeamCityReporter) handleSetupSummary(name string, setupSummary *types.SetupSummary) { if setupSummary.State != types.SpecStatePassed { testName := escape(name) - fmt.Fprintf(reporter.writer, "%s[testStarted name='%s']\n", messageId, testName) - message := reporter.failureMessage(setupSummary.Failure) - details := reporter.failureDetails(setupSummary.Failure) - fmt.Fprintf(reporter.writer, "%s[testFailed name='%s' message='%s' details='%s']\n", messageId, testName, message, details) + fmt.Fprintf(reporter.writer, "%s[testStarted name='%s']", messageId, testName) + message := escape(setupSummary.Failure.ComponentCodeLocation.String()) + details := escape(setupSummary.Failure.Message) + fmt.Fprintf(reporter.writer, "%s[testFailed name='%s' message='%s' details='%s']", messageId, testName, message, details) durationInMilliseconds := setupSummary.RunTime.Seconds() * 1000 - fmt.Fprintf(reporter.writer, "%s[testFinished name='%s' duration='%v']\n", messageId, testName, durationInMilliseconds) + fmt.Fprintf(reporter.writer, "%s[testFinished name='%s' duration='%v']", messageId, testName, durationInMilliseconds) } } func (reporter *TeamCityReporter) SpecWillRun(specSummary *types.SpecSummary) { testName := escape(strings.Join(specSummary.ComponentTexts[1:], " ")) - fmt.Fprintf(reporter.writer, "%s[testStarted name='%s']\n", messageId, testName) + fmt.Fprintf(reporter.writer, "%s[testStarted name='%s']", messageId, testName) } func (reporter *TeamCityReporter) SpecDidComplete(specSummary *types.SpecSummary) { testName := escape(strings.Join(specSummary.ComponentTexts[1:], " ")) - if reporter.ReporterConfig.ReportPassed && specSummary.State == types.SpecStatePassed { - details := escape(specSummary.CapturedOutput) - fmt.Fprintf(reporter.writer, "%s[testPassed name='%s' details='%s']\n", messageId, testName, details) - } if specSummary.State == types.SpecStateFailed || specSummary.State == types.SpecStateTimedOut || specSummary.State == types.SpecStatePanicked { - message := reporter.failureMessage(specSummary.Failure) - details := reporter.failureDetails(specSummary.Failure) - fmt.Fprintf(reporter.writer, "%s[testFailed name='%s' message='%s' details='%s']\n", messageId, testName, message, details) + message := escape(specSummary.Failure.ComponentCodeLocation.String()) + details := escape(specSummary.Failure.Message) + fmt.Fprintf(reporter.writer, "%s[testFailed name='%s' message='%s' details='%s']", messageId, testName, message, details) } if specSummary.State == types.SpecStateSkipped || specSummary.State == types.SpecStatePending { - fmt.Fprintf(reporter.writer, "%s[testIgnored name='%s']\n", messageId, testName) + fmt.Fprintf(reporter.writer, "%s[testIgnored name='%s']", messageId, testName) } durationInMilliseconds := specSummary.RunTime.Seconds() * 1000 - fmt.Fprintf(reporter.writer, "%s[testFinished name='%s' duration='%v']\n", messageId, testName, durationInMilliseconds) + fmt.Fprintf(reporter.writer, "%s[testFinished name='%s' duration='%v']", messageId, testName, durationInMilliseconds) } func (reporter *TeamCityReporter) SpecSuiteDidEnd(summary *types.SuiteSummary) { - fmt.Fprintf(reporter.writer, "%s[testSuiteFinished name='%s']\n", messageId, reporter.testSuiteName) -} - -func (reporter *TeamCityReporter) failureMessage(failure types.SpecFailure) string { - return escape(failure.ComponentCodeLocation.String()) -} - -func (reporter *TeamCityReporter) failureDetails(failure types.SpecFailure) string { - return escape(fmt.Sprintf("%s\n%s", failure.Message, failure.Location.String())) + fmt.Fprintf(reporter.writer, "%s[testSuiteFinished name='%s']", messageId, reporter.testSuiteName) } func escape(output string) string { diff --git a/vendor/github.com/onsi/ginkgo/types/BUILD b/vendor/github.com/onsi/ginkgo/types/BUILD deleted file mode 100644 index 5fd8517de93c5..0000000000000 --- a/vendor/github.com/onsi/ginkgo/types/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "code_location.go", - "synchronization.go", - "types.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/ginkgo/types", - importpath = "github.com/onsi/ginkgo/types", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/ginkgo/types/types.go b/vendor/github.com/onsi/ginkgo/types/types.go index c143e02d84581..0e89521be9a0f 100644 --- a/vendor/github.com/onsi/ginkgo/types/types.go +++ b/vendor/github.com/onsi/ginkgo/types/types.go @@ -12,12 +12,12 @@ SuiteSummary represents the a summary of the test suite and is passed to both Reporter.SpecSuiteWillBegin Reporter.SpecSuiteDidEnd -this is unfortunate as these two methods should receive different objects. When running in parallel +this is unfortunate as these two methods should receive different objects. When running in parallel each node does not deterministically know how many specs it will end up running. Unfortunately making such a change would break backward compatibility. -Until Ginkgo 2.0 comes out we will continue to reuse this struct but populate unknown fields +Until Ginkgo 2.0 comes out we will continue to reuse this struct but populate unkown fields with -1. */ type SuiteSummary struct { diff --git a/vendor/github.com/onsi/ginkgo/types/types_extension.go b/vendor/github.com/onsi/ginkgo/types/types_extension.go new file mode 100644 index 0000000000000..2b61ba70a55ad --- /dev/null +++ b/vendor/github.com/onsi/ginkgo/types/types_extension.go @@ -0,0 +1,11 @@ +package types + +type TestNode interface { + Type() SpecComponentType + CodeLocation() CodeLocation + + Text() string + SetText(text string) + Flag() FlagType + SetFlag(flag FlagType) +} diff --git a/vendor/github.com/onsi/gomega/BUILD b/vendor/github.com/onsi/gomega/BUILD deleted file mode 100644 index 0d63cdf65b501..0000000000000 --- a/vendor/github.com/onsi/gomega/BUILD +++ /dev/null @@ -1,43 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "gomega_dsl.go", - "matchers.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/gomega", - importpath = "github.com/onsi/gomega", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/onsi/gomega/internal/assertion:go_default_library", - "//vendor/github.com/onsi/gomega/internal/asyncassertion:go_default_library", - "//vendor/github.com/onsi/gomega/internal/testingtsupport:go_default_library", - "//vendor/github.com/onsi/gomega/matchers:go_default_library", - "//vendor/github.com/onsi/gomega/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/onsi/gomega/format:all-srcs", - "//vendor/github.com/onsi/gomega/gstruct:all-srcs", - "//vendor/github.com/onsi/gomega/internal/assertion:all-srcs", - "//vendor/github.com/onsi/gomega/internal/asyncassertion:all-srcs", - "//vendor/github.com/onsi/gomega/internal/oraclematcher:all-srcs", - "//vendor/github.com/onsi/gomega/internal/testingtsupport:all-srcs", - "//vendor/github.com/onsi/gomega/matchers:all-srcs", - "//vendor/github.com/onsi/gomega/types:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/gomega/format/BUILD b/vendor/github.com/onsi/gomega/format/BUILD deleted file mode 100644 index 1cea891924cf3..0000000000000 --- a/vendor/github.com/onsi/gomega/format/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["format.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/gomega/format", - importpath = "github.com/onsi/gomega/format", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/gomega/gstruct/BUILD b/vendor/github.com/onsi/gomega/gstruct/BUILD deleted file mode 100644 index 2ed07c523f2e7..0000000000000 --- a/vendor/github.com/onsi/gomega/gstruct/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "elements.go", - "fields.go", - "ignore.go", - "keys.go", - "pointer.go", - "types.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/gomega/gstruct", - importpath = "github.com/onsi/gomega/gstruct", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/onsi/gomega/format:go_default_library", - "//vendor/github.com/onsi/gomega/gstruct/errors:go_default_library", - "//vendor/github.com/onsi/gomega/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/onsi/gomega/gstruct/errors:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/gomega/gstruct/errors/BUILD b/vendor/github.com/onsi/gomega/gstruct/errors/BUILD deleted file mode 100644 index 0a1fd6a59653e..0000000000000 --- a/vendor/github.com/onsi/gomega/gstruct/errors/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["nested_types.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/gomega/gstruct/errors", - importpath = "github.com/onsi/gomega/gstruct/errors", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/onsi/gomega/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/gomega/internal/assertion/BUILD b/vendor/github.com/onsi/gomega/internal/assertion/BUILD deleted file mode 100644 index cf530c2a2902c..0000000000000 --- a/vendor/github.com/onsi/gomega/internal/assertion/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["assertion.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/gomega/internal/assertion", - importpath = "github.com/onsi/gomega/internal/assertion", - visibility = ["//vendor/github.com/onsi/gomega:__subpackages__"], - deps = ["//vendor/github.com/onsi/gomega/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/gomega/internal/asyncassertion/BUILD b/vendor/github.com/onsi/gomega/internal/asyncassertion/BUILD deleted file mode 100644 index a6a52cd313663..0000000000000 --- a/vendor/github.com/onsi/gomega/internal/asyncassertion/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["async_assertion.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/gomega/internal/asyncassertion", - importpath = "github.com/onsi/gomega/internal/asyncassertion", - visibility = ["//vendor/github.com/onsi/gomega:__subpackages__"], - deps = [ - "//vendor/github.com/onsi/gomega/internal/oraclematcher:go_default_library", - "//vendor/github.com/onsi/gomega/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/gomega/internal/oraclematcher/BUILD b/vendor/github.com/onsi/gomega/internal/oraclematcher/BUILD deleted file mode 100644 index 461e210119551..0000000000000 --- a/vendor/github.com/onsi/gomega/internal/oraclematcher/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["oracle_matcher.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/gomega/internal/oraclematcher", - importpath = "github.com/onsi/gomega/internal/oraclematcher", - visibility = ["//vendor/github.com/onsi/gomega:__subpackages__"], - deps = ["//vendor/github.com/onsi/gomega/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/gomega/internal/testingtsupport/BUILD b/vendor/github.com/onsi/gomega/internal/testingtsupport/BUILD deleted file mode 100644 index 2946e380dd5d4..0000000000000 --- a/vendor/github.com/onsi/gomega/internal/testingtsupport/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["testing_t_support.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/gomega/internal/testingtsupport", - importpath = "github.com/onsi/gomega/internal/testingtsupport", - visibility = ["//vendor/github.com/onsi/gomega:__subpackages__"], - deps = ["//vendor/github.com/onsi/gomega/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/gomega/matchers/BUILD b/vendor/github.com/onsi/gomega/matchers/BUILD deleted file mode 100644 index 295333c9c1b41..0000000000000 --- a/vendor/github.com/onsi/gomega/matchers/BUILD +++ /dev/null @@ -1,80 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "and.go", - "assignable_to_type_of_matcher.go", - "attributes_slice.go", - "be_a_directory.go", - "be_a_regular_file.go", - "be_an_existing_file.go", - "be_closed_matcher.go", - "be_element_of_matcher.go", - "be_empty_matcher.go", - "be_equivalent_to_matcher.go", - "be_false_matcher.go", - "be_identical_to.go", - "be_nil_matcher.go", - "be_numerically_matcher.go", - "be_sent_matcher.go", - "be_temporally_matcher.go", - "be_true_matcher.go", - "be_zero_matcher.go", - "consist_of.go", - "contain_element_matcher.go", - "contain_substring_matcher.go", - "equal_matcher.go", - "have_cap_matcher.go", - "have_key_matcher.go", - "have_key_with_value_matcher.go", - "have_len_matcher.go", - "have_occurred_matcher.go", - "have_prefix_matcher.go", - "have_suffix_matcher.go", - "match_error_matcher.go", - "match_json_matcher.go", - "match_regexp_matcher.go", - "match_xml_matcher.go", - "match_yaml_matcher.go", - "not.go", - "or.go", - "panic_matcher.go", - "receive_matcher.go", - "semi_structured_data_support.go", - "succeed_matcher.go", - "type_support.go", - "with_transform.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/gomega/matchers", - importpath = "github.com/onsi/gomega/matchers", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/onsi/gomega/format:go_default_library", - "//vendor/github.com/onsi/gomega/internal/oraclematcher:go_default_library", - "//vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph:go_default_library", - "//vendor/github.com/onsi/gomega/types:go_default_library", - "//vendor/golang.org/x/net/html/charset:go_default_library", - "//vendor/gopkg.in/yaml.v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph:all-srcs", - "//vendor/github.com/onsi/gomega/matchers/support/goraph/edge:all-srcs", - "//vendor/github.com/onsi/gomega/matchers/support/goraph/node:all-srcs", - "//vendor/github.com/onsi/gomega/matchers/support/goraph/util:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/BUILD b/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/BUILD deleted file mode 100644 index 2632b30457740..0000000000000 --- a/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bipartitegraph.go", - "bipartitegraphmatching.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph", - importpath = "github.com/onsi/gomega/matchers/support/goraph/bipartitegraph", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/onsi/gomega/matchers/support/goraph/edge:go_default_library", - "//vendor/github.com/onsi/gomega/matchers/support/goraph/node:go_default_library", - "//vendor/github.com/onsi/gomega/matchers/support/goraph/util:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/gomega/matchers/support/goraph/edge/BUILD b/vendor/github.com/onsi/gomega/matchers/support/goraph/edge/BUILD deleted file mode 100644 index b126990d6cf94..0000000000000 --- a/vendor/github.com/onsi/gomega/matchers/support/goraph/edge/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["edge.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/gomega/matchers/support/goraph/edge", - importpath = "github.com/onsi/gomega/matchers/support/goraph/edge", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/onsi/gomega/matchers/support/goraph/node:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/gomega/matchers/support/goraph/node/BUILD b/vendor/github.com/onsi/gomega/matchers/support/goraph/node/BUILD deleted file mode 100644 index b2605a393fb05..0000000000000 --- a/vendor/github.com/onsi/gomega/matchers/support/goraph/node/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["node.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/gomega/matchers/support/goraph/node", - importpath = "github.com/onsi/gomega/matchers/support/goraph/node", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/gomega/matchers/support/goraph/util/BUILD b/vendor/github.com/onsi/gomega/matchers/support/goraph/util/BUILD deleted file mode 100644 index f4e9fd6de78b5..0000000000000 --- a/vendor/github.com/onsi/gomega/matchers/support/goraph/util/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["util.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/gomega/matchers/support/goraph/util", - importpath = "github.com/onsi/gomega/matchers/support/goraph/util", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/onsi/gomega/types/BUILD b/vendor/github.com/onsi/gomega/types/BUILD deleted file mode 100644 index 215068b070aae..0000000000000 --- a/vendor/github.com/onsi/gomega/types/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["types.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/onsi/gomega/types", - importpath = "github.com/onsi/gomega/types", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/go-digest/BUILD b/vendor/github.com/opencontainers/go-digest/BUILD deleted file mode 100644 index ab13d2f4701d0..0000000000000 --- a/vendor/github.com/opencontainers/go-digest/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "algorithm.go", - "digest.go", - "digester.go", - "doc.go", - "verifiers.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/go-digest", - importpath = "github.com/opencontainers/go-digest", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/BUILD b/vendor/github.com/opencontainers/image-spec/specs-go/BUILD deleted file mode 100644 index fbc6d3979cdfd..0000000000000 --- a/vendor/github.com/opencontainers/image-spec/specs-go/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "version.go", - "versioned.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/image-spec/specs-go", - importpath = "github.com/opencontainers/image-spec/specs-go", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/opencontainers/image-spec/specs-go/v1:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/v1/BUILD b/vendor/github.com/opencontainers/image-spec/specs-go/v1/BUILD deleted file mode 100644 index ea1b2f024b77c..0000000000000 --- a/vendor/github.com/opencontainers/image-spec/specs-go/v1/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "annotations.go", - "config.go", - "descriptor.go", - "index.go", - "layout.go", - "manifest.go", - "mediatype.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/image-spec/specs-go/v1", - importpath = "github.com/opencontainers/image-spec/specs-go/v1", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/opencontainers/go-digest:go_default_library", - "//vendor/github.com/opencontainers/image-spec/specs-go:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/BUILD deleted file mode 100644 index 6760948c84348..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/BUILD +++ /dev/null @@ -1,128 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "capabilities_linux.go", - "console_linux.go", - "container.go", - "container_linux.go", - "criu_opts_linux.go", - "error.go", - "factory.go", - "factory_linux.go", - "generic_error.go", - "init_linux.go", - "message_linux.go", - "network_linux.go", - "notify_linux.go", - "notify_linux_v2.go", - "process.go", - "process_linux.go", - "restored_process.go", - "rootfs_linux.go", - "setns_init_linux.go", - "standard_init_linux.go", - "state_linux.go", - "stats_linux.go", - "sync.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer", - importpath = "github.com/opencontainers/runc/libcontainer", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/stacktrace:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/utils:go_default_library", - "//vendor/github.com/opencontainers/runtime-spec/specs-go:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/checkpoint-restore/go-criu/v4:go_default_library", - "//vendor/github.com/checkpoint-restore/go-criu/v4/rpc:go_default_library", - "//vendor/github.com/containerd/console:go_default_library", - "//vendor/github.com/cyphar/filepath-securejoin:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/moby/sys/mountinfo:go_default_library", - "//vendor/github.com/mrunalp/fileutils:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/apparmor:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/configs/validate:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/intelrdt:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/keys:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/logs:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/seccomp:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/system:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - "//vendor/github.com/opencontainers/runc/types:go_default_library", - "//vendor/github.com/opencontainers/selinux/go-selinux:go_default_library", - "//vendor/github.com/opencontainers/selinux/go-selinux/label:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/github.com/syndtr/gocapability/capability:go_default_library", - "//vendor/github.com/vishvananda/netlink:go_default_library", - "//vendor/github.com/vishvananda/netlink/nl:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/checkpoint-restore/go-criu/v4:go_default_library", - "//vendor/github.com/checkpoint-restore/go-criu/v4/rpc:go_default_library", - "//vendor/github.com/containerd/console:go_default_library", - "//vendor/github.com/cyphar/filepath-securejoin:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/moby/sys/mountinfo:go_default_library", - "//vendor/github.com/mrunalp/fileutils:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/apparmor:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/configs/validate:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/intelrdt:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/keys:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/logs:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/seccomp:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/system:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - "//vendor/github.com/opencontainers/runc/types:go_default_library", - "//vendor/github.com/opencontainers/selinux/go-selinux:go_default_library", - "//vendor/github.com/opencontainers/selinux/go-selinux/label:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/github.com/syndtr/gocapability/capability:go_default_library", - "//vendor/github.com/vishvananda/netlink:go_default_library", - "//vendor/github.com/vishvananda/netlink/nl:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/apparmor:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/configs:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/intelrdt:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/keys:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/logs:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/seccomp:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/stacktrace:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/system:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/user:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/utils:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/apparmor/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/apparmor/BUILD deleted file mode 100644 index 5f001703ccae4..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/apparmor/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["apparmor_disabled.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/apparmor", - importpath = "github.com/opencontainers/runc/libcontainer/apparmor", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/BUILD deleted file mode 100644 index 009ac65785d2d..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/BUILD +++ /dev/null @@ -1,50 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cgroups.go", - "cgroups_unsupported.go", - "stats.go", - "utils.go", - "v1_utils.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/cgroups", - importpath = "github.com/opencontainers/runc/libcontainer/cgroups", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/docker/go-units:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/docker/go-units:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/devices:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon:all-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/devices/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/devices/BUILD deleted file mode 100644 index 1713bebd7a386..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/devices/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["devices_emulator.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/cgroups/devices", - importpath = "github.com/opencontainers/runc/libcontainer/cgroups/devices", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/BUILD deleted file mode 100644 index 1d1baf67c3cc6..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["ebpf.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf", - importpath = "github.com/opencontainers/runc/libcontainer/cgroups/ebpf", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/cilium/ebpf:go_default_library", - "//vendor/github.com/cilium/ebpf/asm:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/devicefilter:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/devicefilter/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/devicefilter/BUILD deleted file mode 100644 index 7f4340fc06300..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/devicefilter/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["devicefilter.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/devicefilter", - importpath = "github.com/opencontainers/runc/libcontainer/cgroups/ebpf/devicefilter", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/cilium/ebpf/asm:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/BUILD deleted file mode 100644 index 847daec7bd802..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/BUILD +++ /dev/null @@ -1,65 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "blkio.go", - "cpu.go", - "cpuacct.go", - "cpuset.go", - "devices.go", - "freezer.go", - "fs.go", - "hugetlb.go", - "kmem.go", - "memory.go", - "name.go", - "net_cls.go", - "net_prio.go", - "perf_event.go", - "pids.go", - "unsupported.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs", - importpath = "github.com/opencontainers/runc/libcontainer/cgroups/fs", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/moby/sys/mountinfo:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/devices:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/system:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/utils:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/moby/sys/mountinfo:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/devices:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/system:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/utils:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/BUILD deleted file mode 100644 index 19e1ae221000c..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2/BUILD +++ /dev/null @@ -1,56 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cpu.go", - "cpuset.go", - "create.go", - "defaultpath.go", - "devices.go", - "freezer.go", - "fs2.go", - "hugetlb.go", - "io.go", - "memory.go", - "pids.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2", - importpath = "github.com/opencontainers/runc/libcontainer/cgroups/fs2", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/utils:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/devicefilter:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/ebpf/devicefilter:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon/BUILD deleted file mode 100644 index f117ec77fd986..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "fscommon.go", - "utils.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fscommon", - importpath = "github.com/opencontainers/runc/libcontainer/cgroups/fscommon", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/cyphar/filepath-securejoin:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/cyphar/filepath-securejoin:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/BUILD deleted file mode 100644 index e74b5c0f8fae7..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd/BUILD +++ /dev/null @@ -1,92 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "common.go", - "unsupported.go", - "user.go", - "v1.go", - "v2.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd", - importpath = "github.com/opencontainers/runc/libcontainer/cgroups/systemd", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/go-systemd/v22/dbus:go_default_library", - "//vendor/github.com/godbus/dbus/v5:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/devices:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/cyphar/filepath-securejoin:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/system:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - ], - "@io_bazel_rules_go//go/platform:illumos": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - ], - "@io_bazel_rules_go//go/platform:js": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/cyphar/filepath-securejoin:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs2:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/system:go_default_library", - ], - "@io_bazel_rules_go//go/platform:nacl": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - ], - "@io_bazel_rules_go//go/platform:plan9": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - ], - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/configs/BUILD deleted file mode 100644 index 1a4bfe81089d5..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/BUILD +++ /dev/null @@ -1,57 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "blkio_device.go", - "cgroup_linux.go", - "cgroup_unsupported.go", - "config.go", - "config_linux.go", - "device.go", - "hugepage_limit.go", - "intelrdt.go", - "interface_priority_map.go", - "mount.go", - "namespaces.go", - "namespaces_linux.go", - "namespaces_syscall.go", - "namespaces_syscall_unsupported.go", - "namespaces_unsupported.go", - "network.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/configs", - importpath = "github.com/opencontainers/runc/libcontainer/configs", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/opencontainers/runtime-spec/specs-go:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/coreos/go-systemd/v22/dbus:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/coreos/go-systemd/v22/dbus:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/opencontainers/runc/libcontainer/configs/validate:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/validate/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/configs/validate/BUILD deleted file mode 100644 index 50c2a1cf198ad..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/validate/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "rootless.go", - "validator.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/configs/validate", - importpath = "github.com/opencontainers/runc/libcontainer/configs/validate", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - "//vendor/github.com/opencontainers/runc/libcontainer/intelrdt:go_default_library", - "//vendor/github.com/opencontainers/selinux/go-selinux:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/BUILD deleted file mode 100644 index 9de34a167d0ad..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/intelrdt/BUILD +++ /dev/null @@ -1,40 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cmt.go", - "intelrdt.go", - "mbm.go", - "monitoring.go", - "stats.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/intelrdt", - importpath = "github.com/opencontainers/runc/libcontainer/intelrdt", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/sirupsen/logrus:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/keys/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/keys/BUILD deleted file mode 100644 index 0a234be70119b..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/keys/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["keyctl.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/keys", - importpath = "github.com/opencontainers/runc/libcontainer/keys", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/logs/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/logs/BUILD deleted file mode 100644 index f45b37b9c06ef..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/logs/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["logs.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/logs", - importpath = "github.com/opencontainers/runc/libcontainer/logs", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/sirupsen/logrus:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/seccomp/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/seccomp/BUILD deleted file mode 100644 index 3ed24ba69752f..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/seccomp/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "config.go", - "seccomp_unsupported.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/seccomp", - importpath = "github.com/opencontainers/runc/libcontainer/seccomp", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/stacktrace/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/stacktrace/BUILD deleted file mode 100644 index bf17cdbeb72be..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/stacktrace/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "capture.go", - "frame.go", - "stacktrace.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/stacktrace", - importpath = "github.com/opencontainers/runc/libcontainer/stacktrace", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/system/BUILD deleted file mode 100644 index e3b9757cc1e0c..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/system/BUILD +++ /dev/null @@ -1,128 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "linux.go", - "proc.go", - "syscall_linux_32.go", - "syscall_linux_64.go", - "unsupported.go", - "xattrs_linux.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/system", - importpath = "github.com/opencontainers/runc/libcontainer/system", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "@io_bazel_rules_go//go/platform:illumos": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "@io_bazel_rules_go//go/platform:js": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "@io_bazel_rules_go//go/platform:nacl": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "@io_bazel_rules_go//go/platform:plan9": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/opencontainers/runc/libcontainer/user:go_default_library", - ], - "//conditions:default": [], - }) + select({ - "@io_bazel_rules_go//go/platform:android_386": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android_amd64": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android_arm": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android_arm64": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux_386": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux_amd64": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux_arm": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux_arm64": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux_mips": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux_mips64": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux_mips64le": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux_mipsle": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux_ppc64": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux_ppc64le": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux_riscv64": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux_s390x": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/user/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/user/BUILD deleted file mode 100644 index 07f3192ddadf6..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/user/BUILD +++ /dev/null @@ -1,58 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "lookup.go", - "lookup_unix.go", - "lookup_windows.go", - "user.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/user", - importpath = "github.com/opencontainers/runc/libcontainer/user", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/utils/BUILD b/vendor/github.com/opencontainers/runc/libcontainer/utils/BUILD deleted file mode 100644 index 855129eec783a..0000000000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/utils/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cmsg.go", - "utils.go", - "utils_unix.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/libcontainer/utils", - importpath = "github.com/opencontainers/runc/libcontainer/utils", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/sys/unix:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runc/types/BUILD b/vendor/github.com/opencontainers/runc/types/BUILD deleted file mode 100644 index 25d37bd663da8..0000000000000 --- a/vendor/github.com/opencontainers/runc/types/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["events.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runc/types", - importpath = "github.com/opencontainers/runc/types", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/opencontainers/runc/libcontainer/intelrdt:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/runtime-spec/specs-go/BUILD b/vendor/github.com/opencontainers/runtime-spec/specs-go/BUILD deleted file mode 100644 index eaac5302fd105..0000000000000 --- a/vendor/github.com/opencontainers/runtime-spec/specs-go/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "config.go", - "state.go", - "version.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/runtime-spec/specs-go", - importpath = "github.com/opencontainers/runtime-spec/specs-go", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/BUILD b/vendor/github.com/opencontainers/selinux/go-selinux/BUILD deleted file mode 100644 index ccd01b3541984..0000000000000 --- a/vendor/github.com/opencontainers/selinux/go-selinux/BUILD +++ /dev/null @@ -1,43 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "selinux_linux.go", - "selinux_stub.go", - "xattrs.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/selinux/go-selinux", - importpath = "github.com/opencontainers/selinux/go-selinux", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/opencontainers/selinux/pkg/pwalk:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/opencontainers/selinux/pkg/pwalk:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/opencontainers/selinux/go-selinux/label:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/label/BUILD b/vendor/github.com/opencontainers/selinux/go-selinux/label/BUILD deleted file mode 100644 index f877062a10818..0000000000000 --- a/vendor/github.com/opencontainers/selinux/go-selinux/label/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "label.go", - "label_selinux.go", - "label_stub.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/selinux/go-selinux/label", - importpath = "github.com/opencontainers/selinux/go-selinux/label", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/opencontainers/selinux/go-selinux:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/pkg/errors:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/pkg/errors:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/opencontainers/selinux/pkg/pwalk/BUILD b/vendor/github.com/opencontainers/selinux/pkg/pwalk/BUILD deleted file mode 100644 index c38f4087d5cd1..0000000000000 --- a/vendor/github.com/opencontainers/selinux/pkg/pwalk/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["pwalk.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/opencontainers/selinux/pkg/pwalk", - importpath = "github.com/opencontainers/selinux/pkg/pwalk", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/pkg/errors:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/openshift/api/LICENSE b/vendor/github.com/openshift/api/LICENSE new file mode 100644 index 0000000000000..5c389317ecc6d --- /dev/null +++ b/vendor/github.com/openshift/api/LICENSE @@ -0,0 +1,191 @@ + + 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 + + Copyright 2020 Red Hat, Inc. + + 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. diff --git a/vendor/github.com/openshift/api/apps/v1/consts.go b/vendor/github.com/openshift/api/apps/v1/consts.go new file mode 100644 index 0000000000000..212578bccfb1b --- /dev/null +++ b/vendor/github.com/openshift/api/apps/v1/consts.go @@ -0,0 +1,108 @@ +package v1 + +const ( + // DeploymentStatusReasonAnnotation represents the reason for deployment being in a given state + // Used for specifying the reason for cancellation or failure of a deployment + // This is on replication controller set by deployer controller. + DeploymentStatusReasonAnnotation = "openshift.io/deployment.status-reason" + + // DeploymentPodAnnotation is an annotation on a deployment (a ReplicationController). The + // annotation value is the name of the deployer Pod which will act upon the ReplicationController + // to implement the deployment behavior. + // This is set on replication controller by deployer controller. + DeploymentPodAnnotation = "openshift.io/deployer-pod.name" + + // DeploymentConfigAnnotation is an annotation name used to correlate a deployment with the + // DeploymentConfig on which the deployment is based. + // This is set on replication controller pod template by deployer controller. + DeploymentConfigAnnotation = "openshift.io/deployment-config.name" + + // DeploymentCancelledAnnotation indicates that the deployment has been cancelled + // The annotation value does not matter and its mere presence indicates cancellation. + // This is set on replication controller by deployment config controller or oc rollout cancel command. + DeploymentCancelledAnnotation = "openshift.io/deployment.cancelled" + + // DeploymentEncodedConfigAnnotation is an annotation name used to retrieve specific encoded + // DeploymentConfig on which a given deployment is based. + // This is set on replication controller by deployer controller. + DeploymentEncodedConfigAnnotation = "openshift.io/encoded-deployment-config" + + // DeploymentVersionAnnotation is an annotation on a deployment (a ReplicationController). The + // annotation value is the LatestVersion value of the DeploymentConfig which was the basis for + // the deployment. + // This is set on replication controller pod template by deployment config controller. + DeploymentVersionAnnotation = "openshift.io/deployment-config.latest-version" + + // DeployerPodForDeploymentLabel is a label which groups pods related to a + // deployment. The value is a deployment name. The deployer pod and hook pods + // created by the internal strategies will have this label. Custom + // strategies can apply this label to any pods they create, enabling + // platform-provided cancellation and garbage collection support. + // This is set on deployer pod by deployer controller. + DeployerPodForDeploymentLabel = "openshift.io/deployer-pod-for.name" + + // DeploymentStatusAnnotation is an annotation name used to retrieve the DeploymentPhase of + // a deployment. + // This is set on replication controller by deployer controller. + DeploymentStatusAnnotation = "openshift.io/deployment.phase" +) + +type DeploymentConditionReason string + +var ( + // ReplicationControllerUpdatedReason is added in a deployment config when one of its replication + // controllers is updated as part of the rollout process. + ReplicationControllerUpdatedReason DeploymentConditionReason = "ReplicationControllerUpdated" + + // ReplicationControllerCreateError is added in a deployment config when it cannot create a new replication + // controller. + ReplicationControllerCreateErrorReason DeploymentConditionReason = "ReplicationControllerCreateError" + + // ReplicationControllerCreatedReason is added in a deployment config when it creates a new replication + // controller. + NewReplicationControllerCreatedReason DeploymentConditionReason = "NewReplicationControllerCreated" + + // NewReplicationControllerAvailableReason is added in a deployment config when its newest replication controller is made + // available ie. the number of new pods that have passed readiness checks and run for at least + // minReadySeconds is at least the minimum available pods that need to run for the deployment config. + NewReplicationControllerAvailableReason DeploymentConditionReason = "NewReplicationControllerAvailable" + + // ProgressDeadlineExceededReason is added in a deployment config when its newest replication controller fails to show + // any progress within the given deadline (progressDeadlineSeconds). + ProgressDeadlineExceededReason DeploymentConditionReason = "ProgressDeadlineExceeded" + + // DeploymentConfigPausedReason is added in a deployment config when it is paused. Lack of progress shouldn't be + // estimated once a deployment config is paused. + DeploymentConfigPausedReason DeploymentConditionReason = "DeploymentConfigPaused" + + // DeploymentConfigResumedReason is added in a deployment config when it is resumed. Useful for not failing accidentally + // deployment configs that paused amidst a rollout. + DeploymentConfigResumedReason DeploymentConditionReason = "DeploymentConfigResumed" + + // RolloutCancelledReason is added in a deployment config when its newest rollout was + // interrupted by cancellation. + RolloutCancelledReason DeploymentConditionReason = "RolloutCancelled" +) + +// DeploymentStatus describes the possible states a deployment can be in. +type DeploymentStatus string + +var ( + + // DeploymentStatusNew means the deployment has been accepted but not yet acted upon. + DeploymentStatusNew DeploymentStatus = "New" + + // DeploymentStatusPending means the deployment been handed over to a deployment strategy, + // but the strategy has not yet declared the deployment to be running. + DeploymentStatusPending DeploymentStatus = "Pending" + + // DeploymentStatusRunning means the deployment strategy has reported the deployment as + // being in-progress. + DeploymentStatusRunning DeploymentStatus = "Running" + + // DeploymentStatusComplete means the deployment finished without an error. + DeploymentStatusComplete DeploymentStatus = "Complete" + + // DeploymentStatusFailed means the deployment finished with an error. + DeploymentStatusFailed DeploymentStatus = "Failed" +) diff --git a/vendor/github.com/openshift/api/apps/v1/deprecated_consts.go b/vendor/github.com/openshift/api/apps/v1/deprecated_consts.go new file mode 100644 index 0000000000000..31969786c4d1b --- /dev/null +++ b/vendor/github.com/openshift/api/apps/v1/deprecated_consts.go @@ -0,0 +1,38 @@ +package v1 + +// This file contains consts that are not shared between components and set just internally. +// They will likely be removed in (near) future. + +const ( + // DeployerPodCreatedAtAnnotation is an annotation on a deployment that + // records the time in RFC3339 format of when the deployer pod for this particular + // deployment was created. + // This is set by deployer controller, but not consumed by any command or internally. + // DEPRECATED: will be removed soon + DeployerPodCreatedAtAnnotation = "openshift.io/deployer-pod.created-at" + + // DeployerPodStartedAtAnnotation is an annotation on a deployment that + // records the time in RFC3339 format of when the deployer pod for this particular + // deployment was started. + // This is set by deployer controller, but not consumed by any command or internally. + // DEPRECATED: will be removed soon + DeployerPodStartedAtAnnotation = "openshift.io/deployer-pod.started-at" + + // DeployerPodCompletedAtAnnotation is an annotation on deployment that records + // the time in RFC3339 format of when the deployer pod finished. + // This is set by deployer controller, but not consumed by any command or internally. + // DEPRECATED: will be removed soon + DeployerPodCompletedAtAnnotation = "openshift.io/deployer-pod.completed-at" + + // DesiredReplicasAnnotation represents the desired number of replicas for a + // new deployment. + // This is set by deployer controller, but not consumed by any command or internally. + // DEPRECATED: will be removed soon + DesiredReplicasAnnotation = "kubectl.kubernetes.io/desired-replicas" + + // DeploymentAnnotation is an annotation on a deployer Pod. The annotation value is the name + // of the deployment (a ReplicationController) on which the deployer Pod acts. + // This is set by deployer controller and consumed internally and in oc adm top command. + // DEPRECATED: will be removed soon + DeploymentAnnotation = "openshift.io/deployment.name" +) diff --git a/vendor/github.com/openshift/api/apps/v1/doc.go b/vendor/github.com/openshift/api/apps/v1/doc.go new file mode 100644 index 0000000000000..edd16297b5459 --- /dev/null +++ b/vendor/github.com/openshift/api/apps/v1/doc.go @@ -0,0 +1,8 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=github.com/openshift/origin/pkg/apps/apis/apps +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +groupName=apps.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/apps/v1/generated.pb.go b/vendor/github.com/openshift/api/apps/v1/generated.pb.go new file mode 100644 index 0000000000000..d5401270061ff --- /dev/null +++ b/vendor/github.com/openshift/api/apps/v1/generated.pb.go @@ -0,0 +1,7530 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: github.com/openshift/api/apps/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" + v11 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" + + intstr "k8s.io/apimachinery/pkg/util/intstr" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *CustomDeploymentStrategyParams) Reset() { *m = CustomDeploymentStrategyParams{} } +func (*CustomDeploymentStrategyParams) ProtoMessage() {} +func (*CustomDeploymentStrategyParams) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{0} +} +func (m *CustomDeploymentStrategyParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CustomDeploymentStrategyParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CustomDeploymentStrategyParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_CustomDeploymentStrategyParams.Merge(m, src) +} +func (m *CustomDeploymentStrategyParams) XXX_Size() int { + return m.Size() +} +func (m *CustomDeploymentStrategyParams) XXX_DiscardUnknown() { + xxx_messageInfo_CustomDeploymentStrategyParams.DiscardUnknown(m) +} + +var xxx_messageInfo_CustomDeploymentStrategyParams proto.InternalMessageInfo + +func (m *DeploymentCause) Reset() { *m = DeploymentCause{} } +func (*DeploymentCause) ProtoMessage() {} +func (*DeploymentCause) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{1} +} +func (m *DeploymentCause) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentCause) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentCause) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentCause.Merge(m, src) +} +func (m *DeploymentCause) XXX_Size() int { + return m.Size() +} +func (m *DeploymentCause) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentCause.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentCause proto.InternalMessageInfo + +func (m *DeploymentCauseImageTrigger) Reset() { *m = DeploymentCauseImageTrigger{} } +func (*DeploymentCauseImageTrigger) ProtoMessage() {} +func (*DeploymentCauseImageTrigger) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{2} +} +func (m *DeploymentCauseImageTrigger) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentCauseImageTrigger) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentCauseImageTrigger) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentCauseImageTrigger.Merge(m, src) +} +func (m *DeploymentCauseImageTrigger) XXX_Size() int { + return m.Size() +} +func (m *DeploymentCauseImageTrigger) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentCauseImageTrigger.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentCauseImageTrigger proto.InternalMessageInfo + +func (m *DeploymentCondition) Reset() { *m = DeploymentCondition{} } +func (*DeploymentCondition) ProtoMessage() {} +func (*DeploymentCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{3} +} +func (m *DeploymentCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentCondition.Merge(m, src) +} +func (m *DeploymentCondition) XXX_Size() int { + return m.Size() +} +func (m *DeploymentCondition) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentCondition proto.InternalMessageInfo + +func (m *DeploymentConfig) Reset() { *m = DeploymentConfig{} } +func (*DeploymentConfig) ProtoMessage() {} +func (*DeploymentConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{4} +} +func (m *DeploymentConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentConfig.Merge(m, src) +} +func (m *DeploymentConfig) XXX_Size() int { + return m.Size() +} +func (m *DeploymentConfig) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentConfig proto.InternalMessageInfo + +func (m *DeploymentConfigList) Reset() { *m = DeploymentConfigList{} } +func (*DeploymentConfigList) ProtoMessage() {} +func (*DeploymentConfigList) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{5} +} +func (m *DeploymentConfigList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentConfigList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentConfigList) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentConfigList.Merge(m, src) +} +func (m *DeploymentConfigList) XXX_Size() int { + return m.Size() +} +func (m *DeploymentConfigList) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentConfigList.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentConfigList proto.InternalMessageInfo + +func (m *DeploymentConfigRollback) Reset() { *m = DeploymentConfigRollback{} } +func (*DeploymentConfigRollback) ProtoMessage() {} +func (*DeploymentConfigRollback) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{6} +} +func (m *DeploymentConfigRollback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentConfigRollback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentConfigRollback) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentConfigRollback.Merge(m, src) +} +func (m *DeploymentConfigRollback) XXX_Size() int { + return m.Size() +} +func (m *DeploymentConfigRollback) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentConfigRollback.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentConfigRollback proto.InternalMessageInfo + +func (m *DeploymentConfigRollbackSpec) Reset() { *m = DeploymentConfigRollbackSpec{} } +func (*DeploymentConfigRollbackSpec) ProtoMessage() {} +func (*DeploymentConfigRollbackSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{7} +} +func (m *DeploymentConfigRollbackSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentConfigRollbackSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentConfigRollbackSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentConfigRollbackSpec.Merge(m, src) +} +func (m *DeploymentConfigRollbackSpec) XXX_Size() int { + return m.Size() +} +func (m *DeploymentConfigRollbackSpec) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentConfigRollbackSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentConfigRollbackSpec proto.InternalMessageInfo + +func (m *DeploymentConfigSpec) Reset() { *m = DeploymentConfigSpec{} } +func (*DeploymentConfigSpec) ProtoMessage() {} +func (*DeploymentConfigSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{8} +} +func (m *DeploymentConfigSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentConfigSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentConfigSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentConfigSpec.Merge(m, src) +} +func (m *DeploymentConfigSpec) XXX_Size() int { + return m.Size() +} +func (m *DeploymentConfigSpec) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentConfigSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentConfigSpec proto.InternalMessageInfo + +func (m *DeploymentConfigStatus) Reset() { *m = DeploymentConfigStatus{} } +func (*DeploymentConfigStatus) ProtoMessage() {} +func (*DeploymentConfigStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{9} +} +func (m *DeploymentConfigStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentConfigStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentConfigStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentConfigStatus.Merge(m, src) +} +func (m *DeploymentConfigStatus) XXX_Size() int { + return m.Size() +} +func (m *DeploymentConfigStatus) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentConfigStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentConfigStatus proto.InternalMessageInfo + +func (m *DeploymentDetails) Reset() { *m = DeploymentDetails{} } +func (*DeploymentDetails) ProtoMessage() {} +func (*DeploymentDetails) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{10} +} +func (m *DeploymentDetails) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentDetails) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentDetails) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentDetails.Merge(m, src) +} +func (m *DeploymentDetails) XXX_Size() int { + return m.Size() +} +func (m *DeploymentDetails) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentDetails.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentDetails proto.InternalMessageInfo + +func (m *DeploymentLog) Reset() { *m = DeploymentLog{} } +func (*DeploymentLog) ProtoMessage() {} +func (*DeploymentLog) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{11} +} +func (m *DeploymentLog) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentLog) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentLog) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentLog.Merge(m, src) +} +func (m *DeploymentLog) XXX_Size() int { + return m.Size() +} +func (m *DeploymentLog) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentLog.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentLog proto.InternalMessageInfo + +func (m *DeploymentLogOptions) Reset() { *m = DeploymentLogOptions{} } +func (*DeploymentLogOptions) ProtoMessage() {} +func (*DeploymentLogOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{12} +} +func (m *DeploymentLogOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentLogOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentLogOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentLogOptions.Merge(m, src) +} +func (m *DeploymentLogOptions) XXX_Size() int { + return m.Size() +} +func (m *DeploymentLogOptions) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentLogOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentLogOptions proto.InternalMessageInfo + +func (m *DeploymentRequest) Reset() { *m = DeploymentRequest{} } +func (*DeploymentRequest) ProtoMessage() {} +func (*DeploymentRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{13} +} +func (m *DeploymentRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentRequest.Merge(m, src) +} +func (m *DeploymentRequest) XXX_Size() int { + return m.Size() +} +func (m *DeploymentRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentRequest proto.InternalMessageInfo + +func (m *DeploymentStrategy) Reset() { *m = DeploymentStrategy{} } +func (*DeploymentStrategy) ProtoMessage() {} +func (*DeploymentStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{14} +} +func (m *DeploymentStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentStrategy.Merge(m, src) +} +func (m *DeploymentStrategy) XXX_Size() int { + return m.Size() +} +func (m *DeploymentStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentStrategy proto.InternalMessageInfo + +func (m *DeploymentTriggerImageChangeParams) Reset() { *m = DeploymentTriggerImageChangeParams{} } +func (*DeploymentTriggerImageChangeParams) ProtoMessage() {} +func (*DeploymentTriggerImageChangeParams) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{15} +} +func (m *DeploymentTriggerImageChangeParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentTriggerImageChangeParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentTriggerImageChangeParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentTriggerImageChangeParams.Merge(m, src) +} +func (m *DeploymentTriggerImageChangeParams) XXX_Size() int { + return m.Size() +} +func (m *DeploymentTriggerImageChangeParams) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentTriggerImageChangeParams.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentTriggerImageChangeParams proto.InternalMessageInfo + +func (m *DeploymentTriggerPolicies) Reset() { *m = DeploymentTriggerPolicies{} } +func (*DeploymentTriggerPolicies) ProtoMessage() {} +func (*DeploymentTriggerPolicies) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{16} +} +func (m *DeploymentTriggerPolicies) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentTriggerPolicies) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentTriggerPolicies) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentTriggerPolicies.Merge(m, src) +} +func (m *DeploymentTriggerPolicies) XXX_Size() int { + return m.Size() +} +func (m *DeploymentTriggerPolicies) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentTriggerPolicies.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentTriggerPolicies proto.InternalMessageInfo + +func (m *DeploymentTriggerPolicy) Reset() { *m = DeploymentTriggerPolicy{} } +func (*DeploymentTriggerPolicy) ProtoMessage() {} +func (*DeploymentTriggerPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{17} +} +func (m *DeploymentTriggerPolicy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DeploymentTriggerPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DeploymentTriggerPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeploymentTriggerPolicy.Merge(m, src) +} +func (m *DeploymentTriggerPolicy) XXX_Size() int { + return m.Size() +} +func (m *DeploymentTriggerPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_DeploymentTriggerPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_DeploymentTriggerPolicy proto.InternalMessageInfo + +func (m *ExecNewPodHook) Reset() { *m = ExecNewPodHook{} } +func (*ExecNewPodHook) ProtoMessage() {} +func (*ExecNewPodHook) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{18} +} +func (m *ExecNewPodHook) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExecNewPodHook) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExecNewPodHook) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExecNewPodHook.Merge(m, src) +} +func (m *ExecNewPodHook) XXX_Size() int { + return m.Size() +} +func (m *ExecNewPodHook) XXX_DiscardUnknown() { + xxx_messageInfo_ExecNewPodHook.DiscardUnknown(m) +} + +var xxx_messageInfo_ExecNewPodHook proto.InternalMessageInfo + +func (m *LifecycleHook) Reset() { *m = LifecycleHook{} } +func (*LifecycleHook) ProtoMessage() {} +func (*LifecycleHook) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{19} +} +func (m *LifecycleHook) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LifecycleHook) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LifecycleHook) XXX_Merge(src proto.Message) { + xxx_messageInfo_LifecycleHook.Merge(m, src) +} +func (m *LifecycleHook) XXX_Size() int { + return m.Size() +} +func (m *LifecycleHook) XXX_DiscardUnknown() { + xxx_messageInfo_LifecycleHook.DiscardUnknown(m) +} + +var xxx_messageInfo_LifecycleHook proto.InternalMessageInfo + +func (m *RecreateDeploymentStrategyParams) Reset() { *m = RecreateDeploymentStrategyParams{} } +func (*RecreateDeploymentStrategyParams) ProtoMessage() {} +func (*RecreateDeploymentStrategyParams) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{20} +} +func (m *RecreateDeploymentStrategyParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RecreateDeploymentStrategyParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RecreateDeploymentStrategyParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_RecreateDeploymentStrategyParams.Merge(m, src) +} +func (m *RecreateDeploymentStrategyParams) XXX_Size() int { + return m.Size() +} +func (m *RecreateDeploymentStrategyParams) XXX_DiscardUnknown() { + xxx_messageInfo_RecreateDeploymentStrategyParams.DiscardUnknown(m) +} + +var xxx_messageInfo_RecreateDeploymentStrategyParams proto.InternalMessageInfo + +func (m *RollingDeploymentStrategyParams) Reset() { *m = RollingDeploymentStrategyParams{} } +func (*RollingDeploymentStrategyParams) ProtoMessage() {} +func (*RollingDeploymentStrategyParams) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{21} +} +func (m *RollingDeploymentStrategyParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RollingDeploymentStrategyParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RollingDeploymentStrategyParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_RollingDeploymentStrategyParams.Merge(m, src) +} +func (m *RollingDeploymentStrategyParams) XXX_Size() int { + return m.Size() +} +func (m *RollingDeploymentStrategyParams) XXX_DiscardUnknown() { + xxx_messageInfo_RollingDeploymentStrategyParams.DiscardUnknown(m) +} + +var xxx_messageInfo_RollingDeploymentStrategyParams proto.InternalMessageInfo + +func (m *TagImageHook) Reset() { *m = TagImageHook{} } +func (*TagImageHook) ProtoMessage() {} +func (*TagImageHook) Descriptor() ([]byte, []int) { + return fileDescriptor_8f1b1bee37da74c1, []int{22} +} +func (m *TagImageHook) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TagImageHook) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TagImageHook) XXX_Merge(src proto.Message) { + xxx_messageInfo_TagImageHook.Merge(m, src) +} +func (m *TagImageHook) XXX_Size() int { + return m.Size() +} +func (m *TagImageHook) XXX_DiscardUnknown() { + xxx_messageInfo_TagImageHook.DiscardUnknown(m) +} + +var xxx_messageInfo_TagImageHook proto.InternalMessageInfo + +func init() { + proto.RegisterType((*CustomDeploymentStrategyParams)(nil), "github.com.openshift.api.apps.v1.CustomDeploymentStrategyParams") + proto.RegisterType((*DeploymentCause)(nil), "github.com.openshift.api.apps.v1.DeploymentCause") + proto.RegisterType((*DeploymentCauseImageTrigger)(nil), "github.com.openshift.api.apps.v1.DeploymentCauseImageTrigger") + proto.RegisterType((*DeploymentCondition)(nil), "github.com.openshift.api.apps.v1.DeploymentCondition") + proto.RegisterType((*DeploymentConfig)(nil), "github.com.openshift.api.apps.v1.DeploymentConfig") + proto.RegisterType((*DeploymentConfigList)(nil), "github.com.openshift.api.apps.v1.DeploymentConfigList") + proto.RegisterType((*DeploymentConfigRollback)(nil), "github.com.openshift.api.apps.v1.DeploymentConfigRollback") + proto.RegisterMapType((map[string]string)(nil), "github.com.openshift.api.apps.v1.DeploymentConfigRollback.UpdatedAnnotationsEntry") + proto.RegisterType((*DeploymentConfigRollbackSpec)(nil), "github.com.openshift.api.apps.v1.DeploymentConfigRollbackSpec") + proto.RegisterType((*DeploymentConfigSpec)(nil), "github.com.openshift.api.apps.v1.DeploymentConfigSpec") + proto.RegisterMapType((map[string]string)(nil), "github.com.openshift.api.apps.v1.DeploymentConfigSpec.SelectorEntry") + proto.RegisterType((*DeploymentConfigStatus)(nil), "github.com.openshift.api.apps.v1.DeploymentConfigStatus") + proto.RegisterType((*DeploymentDetails)(nil), "github.com.openshift.api.apps.v1.DeploymentDetails") + proto.RegisterType((*DeploymentLog)(nil), "github.com.openshift.api.apps.v1.DeploymentLog") + proto.RegisterType((*DeploymentLogOptions)(nil), "github.com.openshift.api.apps.v1.DeploymentLogOptions") + proto.RegisterType((*DeploymentRequest)(nil), "github.com.openshift.api.apps.v1.DeploymentRequest") + proto.RegisterType((*DeploymentStrategy)(nil), "github.com.openshift.api.apps.v1.DeploymentStrategy") + proto.RegisterMapType((map[string]string)(nil), "github.com.openshift.api.apps.v1.DeploymentStrategy.AnnotationsEntry") + proto.RegisterMapType((map[string]string)(nil), "github.com.openshift.api.apps.v1.DeploymentStrategy.LabelsEntry") + proto.RegisterType((*DeploymentTriggerImageChangeParams)(nil), "github.com.openshift.api.apps.v1.DeploymentTriggerImageChangeParams") + proto.RegisterType((*DeploymentTriggerPolicies)(nil), "github.com.openshift.api.apps.v1.DeploymentTriggerPolicies") + proto.RegisterType((*DeploymentTriggerPolicy)(nil), "github.com.openshift.api.apps.v1.DeploymentTriggerPolicy") + proto.RegisterType((*ExecNewPodHook)(nil), "github.com.openshift.api.apps.v1.ExecNewPodHook") + proto.RegisterType((*LifecycleHook)(nil), "github.com.openshift.api.apps.v1.LifecycleHook") + proto.RegisterType((*RecreateDeploymentStrategyParams)(nil), "github.com.openshift.api.apps.v1.RecreateDeploymentStrategyParams") + proto.RegisterType((*RollingDeploymentStrategyParams)(nil), "github.com.openshift.api.apps.v1.RollingDeploymentStrategyParams") + proto.RegisterType((*TagImageHook)(nil), "github.com.openshift.api.apps.v1.TagImageHook") +} + +func init() { + proto.RegisterFile("github.com/openshift/api/apps/v1/generated.proto", fileDescriptor_8f1b1bee37da74c1) +} + +var fileDescriptor_8f1b1bee37da74c1 = []byte{ + // 2520 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0xcd, 0x6f, 0x5b, 0x59, + 0x15, 0xcf, 0x8b, 0xed, 0xc4, 0x3e, 0xf9, 0x6a, 0x6e, 0xfa, 0xe1, 0xc9, 0xa0, 0x38, 0xf2, 0x68, + 0x86, 0x00, 0x83, 0x3d, 0xcd, 0x94, 0xd1, 0xb4, 0xd5, 0x0c, 0xc4, 0x69, 0x3a, 0x93, 0xca, 0x69, + 0xc3, 0x4d, 0xda, 0xd2, 0x0a, 0x41, 0x6f, 0x9e, 0x6f, 0x9c, 0x3b, 0x79, 0xef, 0x5d, 0xf3, 0xde, + 0xb5, 0x5b, 0x23, 0x84, 0x66, 0x03, 0x12, 0xd2, 0x2c, 0x58, 0xc2, 0x06, 0xb1, 0x60, 0x0b, 0x62, + 0xc1, 0x1e, 0xb1, 0x40, 0xea, 0x02, 0xa4, 0x91, 0x90, 0x60, 0x84, 0x50, 0x34, 0x0d, 0x3b, 0xfe, + 0x84, 0xae, 0xd0, 0xfd, 0x78, 0x5f, 0xfe, 0x68, 0xe2, 0xb4, 0x3b, 0xbf, 0xf3, 0xf1, 0x3b, 0xe7, + 0x9e, 0x7b, 0xce, 0xb9, 0xe7, 0x5e, 0xc3, 0x3b, 0x4d, 0x26, 0x0e, 0xda, 0x7b, 0x15, 0x9b, 0xbb, + 0x55, 0xde, 0xa2, 0x5e, 0x70, 0xc0, 0xf6, 0x45, 0x95, 0xb4, 0x58, 0x95, 0xb4, 0x5a, 0x41, 0xb5, + 0x73, 0xb9, 0xda, 0xa4, 0x1e, 0xf5, 0x89, 0xa0, 0x8d, 0x4a, 0xcb, 0xe7, 0x82, 0xa3, 0xe5, 0x58, + 0xa3, 0x12, 0x69, 0x54, 0x48, 0x8b, 0x55, 0xa4, 0x46, 0xa5, 0x73, 0x79, 0xf1, 0x9b, 0x09, 0xcc, + 0x26, 0x6f, 0xf2, 0xaa, 0x52, 0xdc, 0x6b, 0xef, 0xab, 0x2f, 0xf5, 0xa1, 0x7e, 0x69, 0xc0, 0xc5, + 0xf2, 0xe1, 0xfb, 0x41, 0x85, 0x71, 0x65, 0xd4, 0xe6, 0x3e, 0x1d, 0x60, 0x74, 0xf1, 0x4a, 0x2c, + 0xe3, 0x12, 0xfb, 0x80, 0x79, 0xd4, 0xef, 0x56, 0x5b, 0x87, 0x4d, 0x49, 0x08, 0xaa, 0x2e, 0x15, + 0x64, 0x90, 0xd6, 0x7b, 0xc3, 0xb4, 0xfc, 0xb6, 0x27, 0x98, 0x4b, 0xab, 0x81, 0x7d, 0x40, 0x5d, + 0xd2, 0xa7, 0xf7, 0xee, 0x30, 0xbd, 0xb6, 0x60, 0x4e, 0x95, 0x79, 0x22, 0x10, 0x7e, 0xaf, 0x52, + 0xf9, 0xcf, 0x16, 0x2c, 0xad, 0xb7, 0x03, 0xc1, 0xdd, 0x1b, 0xb4, 0xe5, 0xf0, 0xae, 0x4b, 0x3d, + 0xb1, 0x23, 0xa4, 0x44, 0xb3, 0xbb, 0x4d, 0x7c, 0xe2, 0x06, 0xe8, 0x0d, 0xc8, 0x31, 0x97, 0x34, + 0x69, 0xd1, 0x5a, 0xb6, 0x56, 0x0a, 0xb5, 0x99, 0xa7, 0x47, 0xa5, 0xb1, 0xe3, 0xa3, 0x52, 0x6e, + 0x53, 0x12, 0xb1, 0xe6, 0xa1, 0xef, 0xc2, 0x14, 0xf5, 0x3a, 0xcc, 0xe7, 0x9e, 0x44, 0x28, 0x8e, + 0x2f, 0x67, 0x56, 0xa6, 0x56, 0x17, 0x2b, 0xda, 0x25, 0x15, 0x67, 0x19, 0xa4, 0x4a, 0xe7, 0x72, + 0x65, 0xc3, 0xeb, 0xdc, 0x23, 0x7e, 0x6d, 0xc1, 0xc0, 0x4c, 0x6d, 0xc4, 0x6a, 0x38, 0x89, 0x81, + 0xde, 0x84, 0x49, 0x9b, 0xbb, 0x2e, 0xf1, 0x1a, 0xc5, 0xcc, 0x72, 0x66, 0xa5, 0x50, 0x9b, 0x3a, + 0x3e, 0x2a, 0x4d, 0xae, 0x6b, 0x12, 0x0e, 0x79, 0xe5, 0xbf, 0x58, 0x30, 0x17, 0xfb, 0xbe, 0x4e, + 0xda, 0x01, 0x45, 0x57, 0x21, 0x2b, 0xba, 0xad, 0xd0, 0xe3, 0x37, 0x8d, 0xa9, 0xec, 0x6e, 0xb7, + 0x45, 0x9f, 0x1f, 0x95, 0x2e, 0xc4, 0xe2, 0xbb, 0x3e, 0x6b, 0x36, 0xa9, 0x2f, 0x19, 0x58, 0xa9, + 0xa0, 0x00, 0xa6, 0xd5, 0x8a, 0x0c, 0xa7, 0x38, 0xbe, 0x6c, 0xad, 0x4c, 0xad, 0x7e, 0x50, 0x39, + 0x29, 0x7f, 0x2a, 0x3d, 0x3e, 0x6c, 0x26, 0x40, 0x6a, 0xe7, 0x8e, 0x8f, 0x4a, 0xd3, 0x49, 0x0a, + 0x4e, 0x19, 0x29, 0x37, 0xe0, 0xf5, 0x17, 0xa8, 0xa3, 0x0d, 0xc8, 0xee, 0xfb, 0xdc, 0x55, 0xcb, + 0x99, 0x5a, 0x7d, 0x63, 0x50, 0x54, 0xef, 0xec, 0x7d, 0x42, 0x6d, 0x81, 0xe9, 0x3e, 0xf5, 0xa9, + 0x67, 0xd3, 0xda, 0x74, 0xb8, 0xe6, 0x9b, 0x3e, 0x77, 0xb1, 0x52, 0x2f, 0xff, 0x2b, 0x03, 0x0b, + 0x09, 0x33, 0xdc, 0x6b, 0x30, 0xc1, 0xb8, 0x87, 0xae, 0xa7, 0xa2, 0xf5, 0xd5, 0x9e, 0x68, 0x5d, + 0x1a, 0xa0, 0x92, 0x88, 0x57, 0x1d, 0x26, 0x02, 0x41, 0x44, 0x3b, 0x50, 0x91, 0x2a, 0xd4, 0xae, + 0x18, 0xf5, 0x89, 0x1d, 0x45, 0x7d, 0x7e, 0x54, 0x1a, 0x50, 0x29, 0x95, 0x08, 0x49, 0x4b, 0x61, + 0x83, 0x81, 0x3e, 0x81, 0x59, 0x87, 0x04, 0xe2, 0x6e, 0xab, 0x41, 0x04, 0xdd, 0x65, 0x2e, 0x2d, + 0x4e, 0xa8, 0x35, 0x7f, 0x3d, 0xb1, 0xe6, 0x28, 0xb9, 0x2b, 0xad, 0xc3, 0xa6, 0x24, 0x04, 0x15, + 0x59, 0x4a, 0x32, 0x0a, 0x52, 0xa3, 0x76, 0xd1, 0x78, 0x30, 0x5b, 0x4f, 0x21, 0xe1, 0x1e, 0x64, + 0xd4, 0x01, 0x24, 0x29, 0xbb, 0x3e, 0xf1, 0x02, 0xbd, 0x2a, 0x69, 0x2f, 0x33, 0xb2, 0xbd, 0x45, + 0x63, 0x0f, 0xd5, 0xfb, 0xd0, 0xf0, 0x00, 0x0b, 0xe8, 0x2d, 0x98, 0xf0, 0x29, 0x09, 0xb8, 0x57, + 0xcc, 0xaa, 0x88, 0xcd, 0x86, 0x11, 0xc3, 0x8a, 0x8a, 0x0d, 0x17, 0x7d, 0x0d, 0x26, 0x5d, 0x1a, + 0x04, 0xb2, 0xf2, 0x72, 0x4a, 0x70, 0xce, 0x08, 0x4e, 0x6e, 0x69, 0x32, 0x0e, 0xf9, 0xe5, 0x3f, + 0x8e, 0xc3, 0xb9, 0xd4, 0x36, 0xed, 0xb3, 0x26, 0x7a, 0x04, 0x79, 0xe9, 0x67, 0x83, 0x08, 0x62, + 0x32, 0xe7, 0x9d, 0xd3, 0xad, 0x4a, 0xe7, 0xd2, 0x16, 0x15, 0xa4, 0x86, 0x8c, 0x49, 0x88, 0x69, + 0x38, 0x42, 0x45, 0xdf, 0x83, 0x6c, 0xd0, 0xa2, 0xb6, 0xa9, 0x91, 0xf7, 0x46, 0xaa, 0x11, 0xe5, + 0xe3, 0x4e, 0x8b, 0xda, 0x71, 0xaa, 0xca, 0x2f, 0xac, 0x10, 0xd1, 0xa3, 0x28, 0xab, 0xf4, 0x7e, + 0xbc, 0x7f, 0x06, 0x6c, 0xa5, 0x1f, 0x47, 0x37, 0x9d, 0x69, 0xe5, 0xbf, 0x5b, 0x70, 0xbe, 0x57, + 0xa5, 0xce, 0x02, 0x81, 0xbe, 0xdf, 0x17, 0xb6, 0xca, 0xe9, 0xc2, 0x26, 0xb5, 0x55, 0xd0, 0xce, + 0x19, 0x93, 0xf9, 0x90, 0x92, 0x08, 0xd9, 0x7d, 0xc8, 0x31, 0x41, 0xdd, 0xc0, 0x74, 0xc8, 0xd5, + 0xd1, 0xd7, 0x95, 0x68, 0xc0, 0x12, 0x08, 0x6b, 0xbc, 0xf2, 0xcf, 0x33, 0x50, 0xec, 0x15, 0xc5, + 0xdc, 0x71, 0xf6, 0x88, 0x7d, 0x88, 0x96, 0x21, 0xeb, 0x11, 0x37, 0xac, 0xf0, 0x28, 0xe0, 0xb7, + 0x89, 0x4b, 0xb1, 0xe2, 0xa0, 0xdf, 0x58, 0x80, 0xda, 0xaa, 0x36, 0x1a, 0x6b, 0x9e, 0xc7, 0x05, + 0x91, 0xe9, 0x1a, 0x7a, 0x89, 0x47, 0xf7, 0x32, 0x34, 0x5d, 0xb9, 0xdb, 0x07, 0xba, 0xe1, 0x09, + 0xbf, 0x1b, 0x57, 0x4d, 0xbf, 0x00, 0x1e, 0xe0, 0x09, 0x7a, 0x64, 0x72, 0x4d, 0xe7, 0xc3, 0x87, + 0x67, 0xf7, 0x68, 0x58, 0xce, 0x2d, 0x6e, 0xc0, 0xa5, 0x21, 0xce, 0xa2, 0x73, 0x90, 0x39, 0xa4, + 0x5d, 0x1d, 0x3e, 0x2c, 0x7f, 0xa2, 0xf3, 0x90, 0xeb, 0x10, 0xa7, 0x4d, 0x75, 0xd7, 0xc3, 0xfa, + 0xe3, 0xda, 0xf8, 0xfb, 0x56, 0xf9, 0x4f, 0x19, 0xf8, 0xca, 0x8b, 0x6c, 0xbf, 0xa2, 0x6e, 0x8e, + 0xde, 0x86, 0xbc, 0x4f, 0x3b, 0x2c, 0x60, 0xdc, 0x53, 0x4e, 0x64, 0xe2, 0xbc, 0xc3, 0x86, 0x8e, + 0x23, 0x09, 0xb4, 0x06, 0x73, 0xcc, 0xb3, 0x9d, 0x76, 0x23, 0x3c, 0x54, 0x74, 0x65, 0xe5, 0x6b, + 0x97, 0x8c, 0xd2, 0xdc, 0x66, 0x9a, 0x8d, 0x7b, 0xe5, 0x93, 0x10, 0xd4, 0x6d, 0x39, 0x44, 0x50, + 0xd5, 0xc0, 0x06, 0x40, 0x18, 0x36, 0xee, 0x95, 0x47, 0xf7, 0xe0, 0xa2, 0x21, 0x61, 0xda, 0x72, + 0x98, 0xad, 0x62, 0x2c, 0x2b, 0x44, 0x75, 0xb8, 0x7c, 0x6d, 0xc9, 0x20, 0x5d, 0xdc, 0x1c, 0x28, + 0x85, 0x87, 0x68, 0x27, 0x5c, 0x0b, 0x67, 0x17, 0x75, 0x6e, 0xf4, 0xbb, 0x16, 0xb2, 0x71, 0xaf, + 0x7c, 0xf9, 0x7f, 0xb9, 0xfe, 0x7e, 0xa0, 0xb6, 0x6b, 0x0f, 0xf2, 0x41, 0x08, 0xaa, 0xb7, 0xec, + 0xca, 0x28, 0xc9, 0x17, 0x1a, 0x88, 0x77, 0x27, 0xf2, 0x21, 0xc2, 0x95, 0xfe, 0xbb, 0xcc, 0xc3, + 0x94, 0x34, 0xba, 0x3b, 0xd4, 0xe6, 0x5e, 0x23, 0x28, 0x16, 0x96, 0xad, 0x95, 0x5c, 0xec, 0xff, + 0x56, 0x9a, 0x8d, 0x7b, 0xe5, 0x11, 0x85, 0xbc, 0x08, 0x77, 0x56, 0xf7, 0xe3, 0xeb, 0xa3, 0xb8, + 0x69, 0x76, 0x79, 0x9b, 0x3b, 0xcc, 0x66, 0x34, 0xa8, 0x4d, 0x4b, 0x4f, 0xa3, 0x5c, 0x88, 0xa0, + 0x75, 0xd6, 0xa9, 0xe0, 0xeb, 0x04, 0xca, 0x25, 0xb3, 0x4e, 0xd3, 0x71, 0x24, 0x81, 0xea, 0x70, + 0x3e, 0xcc, 0xc0, 0x8f, 0x59, 0x20, 0xb8, 0xdf, 0xad, 0x33, 0x97, 0x09, 0x95, 0x37, 0xb9, 0x5a, + 0xf1, 0xf8, 0xa8, 0x74, 0x1e, 0x0f, 0xe0, 0xe3, 0x81, 0x5a, 0xb2, 0x8b, 0x09, 0x1a, 0x08, 0x93, + 0x2b, 0x51, 0x4d, 0xec, 0xd2, 0x40, 0x60, 0xc5, 0x91, 0x47, 0x6b, 0x4b, 0x4e, 0x4f, 0x0d, 0xb3, + 0xfd, 0x51, 0xf3, 0xdf, 0x56, 0x54, 0x6c, 0xb8, 0xc8, 0x87, 0x7c, 0x40, 0x1d, 0x6a, 0x0b, 0xee, + 0x17, 0x27, 0x55, 0x8b, 0xbb, 0x71, 0xb6, 0xc3, 0xab, 0xb2, 0x63, 0x60, 0x74, 0x53, 0x8b, 0xf7, + 0xd8, 0x90, 0x71, 0x64, 0x07, 0x6d, 0x41, 0x5e, 0x84, 0x75, 0x93, 0x1f, 0x5e, 0xfa, 0xdb, 0xbc, + 0x11, 0x96, 0x8b, 0xee, 0x54, 0x6a, 0x23, 0xc2, 0x8a, 0x8a, 0x20, 0x16, 0xaf, 0xc3, 0x4c, 0xca, + 0xf6, 0x48, 0x3d, 0xea, 0x0f, 0x39, 0xb8, 0x38, 0xf8, 0xbc, 0x44, 0xd7, 0x61, 0x46, 0xe2, 0x07, + 0xe2, 0x1e, 0xf5, 0x55, 0x6f, 0xb1, 0x54, 0x6f, 0xb9, 0x60, 0x56, 0x36, 0x53, 0x4f, 0x32, 0x71, + 0x5a, 0x16, 0xdd, 0x02, 0xc4, 0xf7, 0x02, 0xea, 0x77, 0x68, 0xe3, 0x23, 0x7d, 0xd1, 0x88, 0xbb, + 0x53, 0xd4, 0xf0, 0xef, 0xf4, 0x49, 0xe0, 0x01, 0x5a, 0x23, 0x66, 0xda, 0x1a, 0xcc, 0x99, 0x43, + 0x23, 0x64, 0x9a, 0x24, 0x8b, 0x2a, 0xe8, 0x6e, 0x9a, 0x8d, 0x7b, 0xe5, 0xd1, 0x47, 0x30, 0x4f, + 0x3a, 0x84, 0x39, 0x64, 0xcf, 0xa1, 0x11, 0x48, 0x4e, 0x81, 0xbc, 0x66, 0x40, 0xe6, 0xd7, 0x7a, + 0x05, 0x70, 0xbf, 0x0e, 0xda, 0x82, 0x85, 0xb6, 0xd7, 0x0f, 0x35, 0xa1, 0xa0, 0x5e, 0x37, 0x50, + 0x0b, 0x77, 0xfb, 0x45, 0xf0, 0x20, 0x3d, 0xf4, 0x10, 0x26, 0x1b, 0x54, 0x10, 0xe6, 0x04, 0xc5, + 0x49, 0x95, 0x37, 0xef, 0x8e, 0x92, 0xab, 0x37, 0xb4, 0xaa, 0xbe, 0x3c, 0x99, 0x0f, 0x1c, 0x02, + 0x22, 0x06, 0x60, 0x87, 0xa3, 0x78, 0x50, 0xcc, 0xab, 0x52, 0xf8, 0xd6, 0x88, 0xa5, 0xa0, 0xb5, + 0xe3, 0x51, 0x31, 0x22, 0x05, 0x38, 0x01, 0x2e, 0x13, 0xcb, 0x97, 0x0d, 0x2b, 0x8a, 0x87, 0xee, + 0x70, 0x51, 0x62, 0xe1, 0x24, 0x13, 0xa7, 0x65, 0xcb, 0xbf, 0xb6, 0x60, 0xbe, 0x6f, 0x4d, 0xc9, + 0x09, 0xd9, 0x7a, 0xf1, 0x84, 0x8c, 0x1e, 0xc0, 0x84, 0x2d, 0x6b, 0x3f, 0x1c, 0x69, 0x2e, 0x8f, + 0x7c, 0xa1, 0x8b, 0x9b, 0x89, 0xfa, 0x0c, 0xb0, 0x01, 0x2c, 0xcf, 0xc1, 0x4c, 0x2c, 0x5a, 0xe7, + 0xcd, 0xf2, 0x67, 0xd9, 0xe4, 0x51, 0x52, 0xe7, 0xcd, 0x3b, 0x2d, 0x1d, 0x82, 0x2a, 0x14, 0x6c, + 0xee, 0x09, 0x22, 0x07, 0x48, 0xe3, 0xf1, 0xbc, 0x01, 0x2d, 0xac, 0x87, 0x0c, 0x1c, 0xcb, 0xc8, + 0x7e, 0xb6, 0xcf, 0x1d, 0x87, 0x3f, 0x56, 0x35, 0x94, 0xe8, 0x67, 0x37, 0x15, 0x15, 0x1b, 0xae, + 0xac, 0x95, 0x96, 0x6c, 0x99, 0xbc, 0x1d, 0x1e, 0xeb, 0x51, 0xad, 0x6c, 0x1b, 0x3a, 0x8e, 0x24, + 0xd0, 0x15, 0x98, 0x0e, 0x98, 0x67, 0xd3, 0xf0, 0xa8, 0xc9, 0xea, 0xe9, 0x41, 0xde, 0x51, 0x77, + 0x12, 0x74, 0x9c, 0x92, 0x42, 0xf7, 0xa1, 0xa0, 0xbe, 0xd5, 0x2d, 0x29, 0x37, 0xf2, 0x2d, 0x69, + 0x46, 0x2e, 0x72, 0x27, 0x04, 0xc0, 0x31, 0x16, 0x5a, 0x05, 0x10, 0xcc, 0xa5, 0x81, 0x20, 0x6e, + 0x2b, 0x30, 0x8d, 0x3b, 0x4a, 0xa6, 0xdd, 0x88, 0x83, 0x13, 0x52, 0xe8, 0x1b, 0x50, 0x90, 0x29, + 0x50, 0x67, 0x1e, 0xd5, 0x55, 0x91, 0xd1, 0x06, 0x76, 0x43, 0x22, 0x8e, 0xf9, 0xa8, 0x02, 0xe0, + 0xc8, 0x03, 0xa4, 0xd6, 0x15, 0x34, 0x50, 0xbd, 0x37, 0x53, 0x9b, 0x95, 0xe0, 0xf5, 0x88, 0x8a, + 0x13, 0x12, 0x32, 0xea, 0x1e, 0x7f, 0x4c, 0x98, 0x50, 0x29, 0x9a, 0x88, 0xfa, 0x6d, 0x7e, 0x9f, + 0x30, 0x81, 0x0d, 0x17, 0xbd, 0x09, 0x93, 0x1d, 0xd3, 0x24, 0x41, 0x81, 0xaa, 0x1a, 0x0b, 0x5b, + 0x63, 0xc8, 0x2b, 0xff, 0x3b, 0x95, 0xbb, 0x98, 0xfe, 0xa8, 0x2d, 0x8f, 0xaa, 0x93, 0x47, 0xf2, + 0xb7, 0x60, 0x42, 0x77, 0xd7, 0xde, 0xcd, 0xd7, 0x2d, 0x18, 0x1b, 0x2e, 0x7a, 0x03, 0x72, 0xfb, + 0xdc, 0xb7, 0xa9, 0xd9, 0xf9, 0xe8, 0x7a, 0x70, 0x53, 0x12, 0xb1, 0xe6, 0xa1, 0x7b, 0x30, 0x47, + 0x9f, 0xa4, 0xe7, 0xbf, 0xac, 0x7a, 0x54, 0x79, 0x5b, 0xf6, 0xc6, 0x8d, 0x34, 0x6b, 0xf8, 0x1b, + 0x49, 0x2f, 0x48, 0xf9, 0x1f, 0x93, 0x80, 0xfa, 0x87, 0x1d, 0x74, 0x2d, 0xf5, 0xa4, 0xf0, 0x56, + 0xcf, 0x93, 0xc2, 0xc5, 0x7e, 0x8d, 0xc4, 0x8b, 0x42, 0x07, 0xa6, 0x6d, 0xf5, 0x22, 0xa5, 0xdf, + 0x9f, 0xcc, 0x34, 0xf3, 0x9d, 0x93, 0x0b, 0xf6, 0xc5, 0xef, 0x58, 0x3a, 0xc1, 0xd7, 0x13, 0xc8, + 0x38, 0x65, 0x07, 0xfd, 0x14, 0x66, 0x7d, 0x6a, 0xfb, 0x94, 0x08, 0x6a, 0x2c, 0xeb, 0xbb, 0x46, + 0xed, 0x64, 0xcb, 0xd8, 0xe8, 0x0d, 0xb5, 0x8d, 0x8e, 0x8f, 0x4a, 0xb3, 0x38, 0x85, 0x8e, 0x7b, + 0xac, 0xa1, 0x1f, 0xc3, 0x8c, 0xcf, 0x1d, 0x87, 0x79, 0x4d, 0x63, 0x3e, 0xab, 0xcc, 0xaf, 0x9d, + 0xc2, 0xbc, 0x56, 0x1b, 0x6a, 0x7d, 0x5e, 0xf5, 0xd7, 0x24, 0x36, 0x4e, 0x9b, 0x42, 0x0f, 0xa0, + 0xe0, 0xd3, 0x80, 0xb7, 0x7d, 0x9b, 0x06, 0xa6, 0xb8, 0x57, 0x06, 0x4d, 0x27, 0xd8, 0x08, 0xc9, + 0x2c, 0x66, 0x3e, 0x95, 0xb6, 0x82, 0xb8, 0x87, 0x85, 0xdc, 0x00, 0xc7, 0x68, 0xe8, 0x40, 0xa6, + 0xf1, 0x1e, 0x75, 0x64, 0x69, 0x67, 0x4e, 0xb7, 0x91, 0xfd, 0x0b, 0xa9, 0xd4, 0x15, 0x84, 0x9e, + 0xb2, 0x12, 0x85, 0x20, 0x89, 0xd8, 0xe0, 0xa3, 0x9f, 0xc0, 0x14, 0x49, 0xdc, 0x5d, 0xf5, 0x60, + 0xb7, 0x71, 0x26, 0x73, 0x7d, 0xd7, 0xd5, 0xe8, 0xb9, 0x32, 0x79, 0x4f, 0x4d, 0x9a, 0x43, 0x77, + 0xe0, 0x02, 0xb1, 0x05, 0xeb, 0xd0, 0x1b, 0x94, 0x34, 0x1c, 0xe6, 0x45, 0xed, 0x55, 0x37, 0x9c, + 0xd7, 0x8e, 0x8f, 0x4a, 0x17, 0xd6, 0x06, 0x09, 0xe0, 0xc1, 0x7a, 0x8b, 0x57, 0x61, 0x2a, 0xb1, + 0xea, 0x51, 0xe6, 0xbb, 0xc5, 0x0f, 0xe1, 0xdc, 0x4b, 0xdd, 0x61, 0x7f, 0x37, 0x0e, 0xe5, 0xbe, + 0x06, 0xa0, 0x9e, 0x24, 0xd7, 0x0f, 0x88, 0xd7, 0x0c, 0x33, 0xb6, 0x0a, 0x05, 0xd2, 0x16, 0xdc, + 0x25, 0x82, 0xd9, 0x0a, 0x38, 0x1f, 0xe7, 0xc2, 0x5a, 0xc8, 0xc0, 0xb1, 0x0c, 0xba, 0x06, 0xb3, + 0xd1, 0xe1, 0x26, 0x3b, 0x9d, 0x3e, 0x8d, 0x0b, 0xba, 0x3c, 0xd6, 0x53, 0x1c, 0xdc, 0x23, 0x19, + 0x5d, 0x9b, 0x33, 0x2f, 0x77, 0x6d, 0xbe, 0x15, 0xbe, 0xfa, 0xa9, 0x35, 0xd1, 0x86, 0x5a, 0x95, + 0x79, 0x89, 0xeb, 0x79, 0xc9, 0x4b, 0x4a, 0xe0, 0x01, 0x5a, 0xe5, 0x9f, 0x59, 0xf0, 0xda, 0xd0, + 0x2b, 0x14, 0xfa, 0x41, 0xf8, 0xd4, 0x63, 0xa9, 0x44, 0xbc, 0x7a, 0xd6, 0xeb, 0x58, 0x77, 0xf0, + 0x8b, 0xcf, 0xb5, 0xfc, 0xaf, 0x7e, 0x5b, 0x1a, 0xfb, 0xf4, 0x3f, 0xcb, 0x63, 0xe5, 0x2f, 0x2d, + 0xb8, 0x34, 0x44, 0xf7, 0x65, 0x9e, 0xc2, 0x7f, 0x61, 0xc1, 0x3c, 0xeb, 0xdd, 0x74, 0xd3, 0x8e, + 0x6f, 0x9c, 0x61, 0x35, 0x7d, 0x09, 0x54, 0xbb, 0x20, 0x67, 0xea, 0x3e, 0x32, 0xee, 0xb7, 0x5a, + 0xfe, 0xa7, 0x05, 0xb3, 0x1b, 0x4f, 0xa8, 0x7d, 0x9b, 0x3e, 0xde, 0xe6, 0x8d, 0x8f, 0x39, 0x3f, + 0x4c, 0xfe, 0x3f, 0x60, 0x0d, 0xff, 0x7f, 0x00, 0x5d, 0x85, 0x0c, 0xf5, 0x3a, 0xa7, 0xf8, 0x47, + 0x62, 0xca, 0xc4, 0x26, 0xb3, 0xe1, 0x75, 0xb0, 0xd4, 0x91, 0x23, 0x6b, 0x2a, 0x09, 0x55, 0xee, + 0x15, 0xe2, 0x91, 0x35, 0x95, 0xb1, 0x38, 0x2d, 0xab, 0xa6, 0x03, 0xee, 0xb4, 0x65, 0x92, 0x67, + 0x63, 0xf7, 0xee, 0x69, 0x12, 0x0e, 0x79, 0xe5, 0xdf, 0x8f, 0xc3, 0x4c, 0x9d, 0xed, 0x53, 0xbb, + 0x6b, 0x3b, 0x54, 0xad, 0xeb, 0x01, 0xcc, 0xec, 0x13, 0xe6, 0xb4, 0x7d, 0xaa, 0xb7, 0xd0, 0x6c, + 0xdd, 0xbb, 0xa1, 0xd5, 0x9b, 0x49, 0xe6, 0xf3, 0xa3, 0xd2, 0x62, 0x4a, 0x3d, 0xc5, 0xc5, 0x69, + 0x24, 0xf4, 0x08, 0x80, 0x46, 0x41, 0x34, 0x3b, 0xf9, 0xce, 0xc9, 0x3b, 0x99, 0x0e, 0xbc, 0x9e, + 0x9d, 0x62, 0x1a, 0x4e, 0x60, 0xa2, 0x1f, 0xca, 0xc1, 0xac, 0xa9, 0xb6, 0x34, 0x50, 0x7f, 0xdb, + 0x4c, 0xad, 0x56, 0x4e, 0x36, 0xb0, 0x6b, 0x54, 0x14, 0x7c, 0xd4, 0x42, 0x42, 0xaa, 0x1a, 0xe6, + 0xcc, 0xcf, 0xf2, 0x5f, 0xc7, 0x61, 0xf9, 0xa4, 0xe3, 0x56, 0xf6, 0x19, 0x39, 0x2c, 0xf2, 0xb6, + 0x08, 0x9b, 0xb0, 0xbe, 0xc5, 0xaa, 0x3e, 0xb3, 0x9b, 0xe2, 0xe0, 0x1e, 0x49, 0x74, 0x0b, 0x32, + 0x2d, 0x9f, 0x9a, 0xe0, 0x54, 0x4f, 0xf6, 0x3d, 0x15, 0xfd, 0xda, 0xa4, 0x4c, 0xa0, 0x6d, 0x9f, + 0x62, 0x09, 0x22, 0xb1, 0x5c, 0xd6, 0x30, 0x2d, 0xeb, 0x6c, 0x58, 0x5b, 0xac, 0x81, 0x25, 0x08, + 0xda, 0x82, 0x6c, 0x8b, 0x07, 0xc2, 0x4c, 0x05, 0x23, 0x83, 0xe5, 0x65, 0xd5, 0x6f, 0xf3, 0x40, + 0x60, 0x05, 0x53, 0xfe, 0x5b, 0x16, 0x4a, 0x27, 0xcc, 0x0d, 0x68, 0x13, 0x16, 0xf4, 0x25, 0x79, + 0x9b, 0xfa, 0x8c, 0x37, 0xd2, 0xb1, 0xbc, 0xa4, 0x2e, 0xb1, 0xfd, 0x6c, 0x3c, 0x48, 0x07, 0x7d, + 0x00, 0x73, 0xcc, 0x13, 0xd4, 0xef, 0x10, 0x27, 0x84, 0xd1, 0xcf, 0x02, 0x0b, 0xfa, 0x75, 0x2e, + 0xc5, 0xc2, 0xbd, 0xb2, 0x03, 0x36, 0x34, 0x73, 0xea, 0x0d, 0x75, 0x60, 0xd6, 0x25, 0x4f, 0x12, + 0xd7, 0x6d, 0x13, 0xc2, 0xe1, 0xff, 0x86, 0xb4, 0x05, 0x73, 0x2a, 0xfa, 0x0f, 0xd3, 0xca, 0xa6, + 0x27, 0xee, 0xf8, 0x3b, 0xc2, 0x67, 0x5e, 0x53, 0x5b, 0xdb, 0x4a, 0x61, 0xe1, 0x1e, 0x6c, 0xf4, + 0x10, 0xf2, 0x2e, 0x79, 0xb2, 0xd3, 0xf6, 0x9b, 0xe1, 0x2d, 0x69, 0x74, 0x3b, 0xea, 0xcd, 0x67, + 0xcb, 0xa0, 0xe0, 0x08, 0x2f, 0x4c, 0xcd, 0xc9, 0x57, 0x91, 0x9a, 0x61, 0x3a, 0xe5, 0x5f, 0x4d, + 0x3a, 0x7d, 0x66, 0xc1, 0x74, 0xb2, 0x8a, 0xfb, 0x7b, 0xa7, 0x35, 0x42, 0xef, 0xfc, 0x36, 0x8c, + 0x0b, 0x6e, 0x4a, 0xf0, 0x54, 0x27, 0x3d, 0x18, 0xd8, 0xf1, 0x5d, 0x8e, 0xc7, 0x05, 0xaf, 0xad, + 0x3c, 0x7d, 0xb6, 0x34, 0xf6, 0xf9, 0xb3, 0xa5, 0xb1, 0x2f, 0x9e, 0x2d, 0x8d, 0x7d, 0x7a, 0xbc, + 0x64, 0x3d, 0x3d, 0x5e, 0xb2, 0x3e, 0x3f, 0x5e, 0xb2, 0xbe, 0x38, 0x5e, 0xb2, 0xbe, 0x3c, 0x5e, + 0xb2, 0x7e, 0xf9, 0xdf, 0xa5, 0xb1, 0x87, 0xe3, 0x9d, 0xcb, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, + 0x19, 0x34, 0x0f, 0xd6, 0x4b, 0x20, 0x00, 0x00, +} + +func (m *CustomDeploymentStrategyParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CustomDeploymentStrategyParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CustomDeploymentStrategyParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Command) > 0 { + for iNdEx := len(m.Command) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Command[iNdEx]) + copy(dAtA[i:], m.Command[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Command[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + if len(m.Environment) > 0 { + for iNdEx := len(m.Environment) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Environment[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Image) + copy(dAtA[i:], m.Image) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Image))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DeploymentCause) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentCause) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentCause) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ImageTrigger != nil { + { + size, err := m.ImageTrigger.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DeploymentCauseImageTrigger) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentCauseImageTrigger) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentCauseImageTrigger) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.From.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DeploymentCondition) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.LastUpdateTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DeploymentConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DeploymentConfigList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentConfigList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentConfigList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DeploymentConfigRollback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentConfigRollback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentConfigRollback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.UpdatedAnnotations) > 0 { + keysForUpdatedAnnotations := make([]string, 0, len(m.UpdatedAnnotations)) + for k := range m.UpdatedAnnotations { + keysForUpdatedAnnotations = append(keysForUpdatedAnnotations, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForUpdatedAnnotations) + for iNdEx := len(keysForUpdatedAnnotations) - 1; iNdEx >= 0; iNdEx-- { + v := m.UpdatedAnnotations[string(keysForUpdatedAnnotations[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForUpdatedAnnotations[iNdEx]) + copy(dAtA[i:], keysForUpdatedAnnotations[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForUpdatedAnnotations[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DeploymentConfigRollbackSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentConfigRollbackSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentConfigRollbackSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.IncludeStrategy { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + i-- + if m.IncludeReplicationMeta { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x28 + i-- + if m.IncludeTemplate { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + i-- + if m.IncludeTriggers { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.Revision)) + i-- + dAtA[i] = 0x10 + { + size, err := m.From.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DeploymentConfigSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentConfigSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentConfigSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) + i-- + dAtA[i] = 0x48 + if m.Template != nil { + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + if len(m.Selector) > 0 { + keysForSelector := make([]string, 0, len(m.Selector)) + for k := range m.Selector { + keysForSelector = append(keysForSelector, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) + for iNdEx := len(keysForSelector) - 1; iNdEx >= 0; iNdEx-- { + v := m.Selector[string(keysForSelector[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForSelector[iNdEx]) + copy(dAtA[i:], keysForSelector[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForSelector[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x3a + } + } + i-- + if m.Paused { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + i-- + if m.Test { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x28 + if m.RevisionHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + i-- + dAtA[i] = 0x20 + } + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x18 + if m.Triggers != nil { + { + size, err := m.Triggers.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Strategy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DeploymentConfigStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentConfigStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentConfigStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + i-- + dAtA[i] = 0x48 + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + } + if m.Details != nil { + { + size, err := m.Details.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + i = encodeVarintGenerated(dAtA, i, uint64(m.UnavailableReplicas)) + i-- + dAtA[i] = 0x30 + i = encodeVarintGenerated(dAtA, i, uint64(m.AvailableReplicas)) + i-- + dAtA[i] = 0x28 + i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedReplicas)) + i-- + dAtA[i] = 0x20 + i = encodeVarintGenerated(dAtA, i, uint64(m.Replicas)) + i-- + dAtA[i] = 0x18 + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.LatestVersion)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + +func (m *DeploymentDetails) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentDetails) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentDetails) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Causes) > 0 { + for iNdEx := len(m.Causes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Causes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DeploymentLog) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentLog) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentLog) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *DeploymentLogOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentLogOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentLogOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Version != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Version)) + i-- + dAtA[i] = 0x50 + } + i-- + if m.NoWait { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x48 + if m.LimitBytes != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.LimitBytes)) + i-- + dAtA[i] = 0x40 + } + if m.TailLines != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TailLines)) + i-- + dAtA[i] = 0x38 + } + i-- + if m.Timestamps { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + if m.SinceTime != nil { + { + size, err := m.SinceTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.SinceSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.SinceSeconds)) + i-- + dAtA[i] = 0x20 + } + i-- + if m.Previous { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i-- + if m.Follow { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + i -= len(m.Container) + copy(dAtA[i:], m.Container) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Container))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DeploymentRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ExcludeTriggers) > 0 { + for iNdEx := len(m.ExcludeTriggers) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ExcludeTriggers[iNdEx]) + copy(dAtA[i:], m.ExcludeTriggers[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ExcludeTriggers[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + i-- + if m.Force { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i-- + if m.Latest { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DeploymentStrategy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentStrategy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ActiveDeadlineSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.ActiveDeadlineSeconds)) + i-- + dAtA[i] = 0x40 + } + if len(m.Annotations) > 0 { + keysForAnnotations := make([]string, 0, len(m.Annotations)) + for k := range m.Annotations { + keysForAnnotations = append(keysForAnnotations, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) + for iNdEx := len(keysForAnnotations) - 1; iNdEx >= 0; iNdEx-- { + v := m.Annotations[string(keysForAnnotations[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForAnnotations[iNdEx]) + copy(dAtA[i:], keysForAnnotations[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForAnnotations[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x3a + } + } + if len(m.Labels) > 0 { + keysForLabels := make([]string, 0, len(m.Labels)) + for k := range m.Labels { + keysForLabels = append(keysForLabels, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) + for iNdEx := len(keysForLabels) - 1; iNdEx >= 0; iNdEx-- { + v := m.Labels[string(keysForLabels[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForLabels[iNdEx]) + copy(dAtA[i:], keysForLabels[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForLabels[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x32 + } + } + { + size, err := m.Resources.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if m.RollingParams != nil { + { + size, err := m.RollingParams.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.RecreateParams != nil { + { + size, err := m.RecreateParams.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.CustomParams != nil { + { + size, err := m.CustomParams.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DeploymentTriggerImageChangeParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentTriggerImageChangeParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentTriggerImageChangeParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.LastTriggeredImage) + copy(dAtA[i:], m.LastTriggeredImage) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.LastTriggeredImage))) + i-- + dAtA[i] = 0x22 + { + size, err := m.From.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.ContainerNames) > 0 { + for iNdEx := len(m.ContainerNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ContainerNames[iNdEx]) + copy(dAtA[i:], m.ContainerNames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContainerNames[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + i-- + if m.Automatic { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + +func (m DeploymentTriggerPolicies) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m DeploymentTriggerPolicies) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m DeploymentTriggerPolicies) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m) > 0 { + for iNdEx := len(m) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *DeploymentTriggerPolicy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DeploymentTriggerPolicy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DeploymentTriggerPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ImageChangeParams != nil { + { + size, err := m.ImageChangeParams.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ExecNewPodHook) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ExecNewPodHook) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ExecNewPodHook) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Volumes) > 0 { + for iNdEx := len(m.Volumes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Volumes[iNdEx]) + copy(dAtA[i:], m.Volumes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Volumes[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + i -= len(m.ContainerName) + copy(dAtA[i:], m.ContainerName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContainerName))) + i-- + dAtA[i] = 0x1a + if len(m.Env) > 0 { + for iNdEx := len(m.Env) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Env[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.Command) > 0 { + for iNdEx := len(m.Command) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Command[iNdEx]) + copy(dAtA[i:], m.Command[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Command[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *LifecycleHook) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LifecycleHook) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LifecycleHook) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TagImages) > 0 { + for iNdEx := len(m.TagImages) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TagImages[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.ExecNewPod != nil { + { + size, err := m.ExecNewPod.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.FailurePolicy) + copy(dAtA[i:], m.FailurePolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FailurePolicy))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RecreateDeploymentStrategyParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RecreateDeploymentStrategyParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RecreateDeploymentStrategyParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Post != nil { + { + size, err := m.Post.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.Mid != nil { + { + size, err := m.Mid.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Pre != nil { + { + size, err := m.Pre.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.TimeoutSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TimeoutSeconds)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *RollingDeploymentStrategyParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RollingDeploymentStrategyParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RollingDeploymentStrategyParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Post != nil { + { + size, err := m.Post.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + if m.Pre != nil { + { + size, err := m.Pre.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + if m.MaxSurge != nil { + { + size, err := m.MaxSurge.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.MaxUnavailable != nil { + { + size, err := m.MaxUnavailable.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.TimeoutSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TimeoutSeconds)) + i-- + dAtA[i] = 0x18 + } + if m.IntervalSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.IntervalSeconds)) + i-- + dAtA[i] = 0x10 + } + if m.UpdatePeriodSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.UpdatePeriodSeconds)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *TagImageHook) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TagImageHook) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TagImageHook) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.To.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.ContainerName) + copy(dAtA[i:], m.ContainerName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContainerName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *CustomDeploymentStrategyParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Image) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Environment) > 0 { + for _, e := range m.Environment { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Command) > 0 { + for _, s := range m.Command { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *DeploymentCause) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.ImageTrigger != nil { + l = m.ImageTrigger.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *DeploymentCauseImageTrigger) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.From.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *DeploymentCondition) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastUpdateTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *DeploymentConfig) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *DeploymentConfigList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *DeploymentConfigRollback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.UpdatedAnnotations) > 0 { + for k, v := range m.UpdatedAnnotations { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *DeploymentConfigRollbackSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.From.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Revision)) + n += 2 + n += 2 + n += 2 + n += 2 + return n +} + +func (m *DeploymentConfigSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Strategy.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Triggers != nil { + l = m.Triggers.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 1 + sovGenerated(uint64(m.Replicas)) + if m.RevisionHistoryLimit != nil { + n += 1 + sovGenerated(uint64(*m.RevisionHistoryLimit)) + } + n += 2 + n += 2 + if len(m.Selector) > 0 { + for k, v := range m.Selector { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if m.Template != nil { + l = m.Template.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 1 + sovGenerated(uint64(m.MinReadySeconds)) + return n +} + +func (m *DeploymentConfigStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 1 + sovGenerated(uint64(m.LatestVersion)) + n += 1 + sovGenerated(uint64(m.ObservedGeneration)) + n += 1 + sovGenerated(uint64(m.Replicas)) + n += 1 + sovGenerated(uint64(m.UpdatedReplicas)) + n += 1 + sovGenerated(uint64(m.AvailableReplicas)) + n += 1 + sovGenerated(uint64(m.UnavailableReplicas)) + if m.Details != nil { + l = m.Details.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + n += 1 + sovGenerated(uint64(m.ReadyReplicas)) + return n +} + +func (m *DeploymentDetails) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Causes) > 0 { + for _, e := range m.Causes { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *DeploymentLog) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *DeploymentLogOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Container) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + n += 2 + if m.SinceSeconds != nil { + n += 1 + sovGenerated(uint64(*m.SinceSeconds)) + } + if m.SinceTime != nil { + l = m.SinceTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + if m.TailLines != nil { + n += 1 + sovGenerated(uint64(*m.TailLines)) + } + if m.LimitBytes != nil { + n += 1 + sovGenerated(uint64(*m.LimitBytes)) + } + n += 2 + if m.Version != nil { + n += 1 + sovGenerated(uint64(*m.Version)) + } + return n +} + +func (m *DeploymentRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + n += 2 + if len(m.ExcludeTriggers) > 0 { + for _, s := range m.ExcludeTriggers { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *DeploymentStrategy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.CustomParams != nil { + l = m.CustomParams.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.RecreateParams != nil { + l = m.RecreateParams.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.RollingParams != nil { + l = m.RollingParams.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = m.Resources.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Labels) > 0 { + for k, v := range m.Labels { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Annotations) > 0 { + for k, v := range m.Annotations { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if m.ActiveDeadlineSeconds != nil { + n += 1 + sovGenerated(uint64(*m.ActiveDeadlineSeconds)) + } + return n +} + +func (m *DeploymentTriggerImageChangeParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 2 + if len(m.ContainerNames) > 0 { + for _, s := range m.ContainerNames { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.From.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.LastTriggeredImage) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m DeploymentTriggerPolicies) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m) > 0 { + for _, e := range m { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *DeploymentTriggerPolicy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.ImageChangeParams != nil { + l = m.ImageChangeParams.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ExecNewPodHook) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Command) > 0 { + for _, s := range m.Command { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Env) > 0 { + for _, e := range m.Env { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.ContainerName) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Volumes) > 0 { + for _, s := range m.Volumes { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *LifecycleHook) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.FailurePolicy) + n += 1 + l + sovGenerated(uint64(l)) + if m.ExecNewPod != nil { + l = m.ExecNewPod.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.TagImages) > 0 { + for _, e := range m.TagImages { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *RecreateDeploymentStrategyParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TimeoutSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) + } + if m.Pre != nil { + l = m.Pre.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Mid != nil { + l = m.Mid.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Post != nil { + l = m.Post.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *RollingDeploymentStrategyParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.UpdatePeriodSeconds != nil { + n += 1 + sovGenerated(uint64(*m.UpdatePeriodSeconds)) + } + if m.IntervalSeconds != nil { + n += 1 + sovGenerated(uint64(*m.IntervalSeconds)) + } + if m.TimeoutSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) + } + if m.MaxUnavailable != nil { + l = m.MaxUnavailable.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.MaxSurge != nil { + l = m.MaxSurge.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Pre != nil { + l = m.Pre.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Post != nil { + l = m.Post.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *TagImageHook) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ContainerName) + n += 1 + l + sovGenerated(uint64(l)) + l = m.To.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *CustomDeploymentStrategyParams) String() string { + if this == nil { + return "nil" + } + repeatedStringForEnvironment := "[]EnvVar{" + for _, f := range this.Environment { + repeatedStringForEnvironment += fmt.Sprintf("%v", f) + "," + } + repeatedStringForEnvironment += "}" + s := strings.Join([]string{`&CustomDeploymentStrategyParams{`, + `Image:` + fmt.Sprintf("%v", this.Image) + `,`, + `Environment:` + repeatedStringForEnvironment + `,`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentCause) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentCause{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `ImageTrigger:` + strings.Replace(this.ImageTrigger.String(), "DeploymentCauseImageTrigger", "DeploymentCauseImageTrigger", 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentCauseImageTrigger) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentCauseImageTrigger{`, + `From:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.From), "ObjectReference", "v1.ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v11.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `LastUpdateTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastUpdateTime), "Time", "v11.Time", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentConfig{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v11.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "DeploymentConfigSpec", "DeploymentConfigSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "DeploymentConfigStatus", "DeploymentConfigStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentConfigList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]DeploymentConfig{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "DeploymentConfig", "DeploymentConfig", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&DeploymentConfigList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v11.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentConfigRollback) String() string { + if this == nil { + return "nil" + } + keysForUpdatedAnnotations := make([]string, 0, len(this.UpdatedAnnotations)) + for k := range this.UpdatedAnnotations { + keysForUpdatedAnnotations = append(keysForUpdatedAnnotations, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForUpdatedAnnotations) + mapStringForUpdatedAnnotations := "map[string]string{" + for _, k := range keysForUpdatedAnnotations { + mapStringForUpdatedAnnotations += fmt.Sprintf("%v: %v,", k, this.UpdatedAnnotations[k]) + } + mapStringForUpdatedAnnotations += "}" + s := strings.Join([]string{`&DeploymentConfigRollback{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `UpdatedAnnotations:` + mapStringForUpdatedAnnotations + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "DeploymentConfigRollbackSpec", "DeploymentConfigRollbackSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentConfigRollbackSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentConfigRollbackSpec{`, + `From:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.From), "ObjectReference", "v1.ObjectReference", 1), `&`, ``, 1) + `,`, + `Revision:` + fmt.Sprintf("%v", this.Revision) + `,`, + `IncludeTriggers:` + fmt.Sprintf("%v", this.IncludeTriggers) + `,`, + `IncludeTemplate:` + fmt.Sprintf("%v", this.IncludeTemplate) + `,`, + `IncludeReplicationMeta:` + fmt.Sprintf("%v", this.IncludeReplicationMeta) + `,`, + `IncludeStrategy:` + fmt.Sprintf("%v", this.IncludeStrategy) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentConfigSpec) String() string { + if this == nil { + return "nil" + } + keysForSelector := make([]string, 0, len(this.Selector)) + for k := range this.Selector { + keysForSelector = append(keysForSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) + mapStringForSelector := "map[string]string{" + for _, k := range keysForSelector { + mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) + } + mapStringForSelector += "}" + s := strings.Join([]string{`&DeploymentConfigSpec{`, + `Strategy:` + strings.Replace(strings.Replace(this.Strategy.String(), "DeploymentStrategy", "DeploymentStrategy", 1), `&`, ``, 1) + `,`, + `Triggers:` + strings.Replace(fmt.Sprintf("%v", this.Triggers), "DeploymentTriggerPolicies", "DeploymentTriggerPolicies", 1) + `,`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, + `Test:` + fmt.Sprintf("%v", this.Test) + `,`, + `Paused:` + fmt.Sprintf("%v", this.Paused) + `,`, + `Selector:` + mapStringForSelector + `,`, + `Template:` + strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v1.PodTemplateSpec", 1) + `,`, + `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentConfigStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]DeploymentCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "DeploymentCondition", "DeploymentCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&DeploymentConfigStatus{`, + `LatestVersion:` + fmt.Sprintf("%v", this.LatestVersion) + `,`, + `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `UpdatedReplicas:` + fmt.Sprintf("%v", this.UpdatedReplicas) + `,`, + `AvailableReplicas:` + fmt.Sprintf("%v", this.AvailableReplicas) + `,`, + `UnavailableReplicas:` + fmt.Sprintf("%v", this.UnavailableReplicas) + `,`, + `Details:` + strings.Replace(this.Details.String(), "DeploymentDetails", "DeploymentDetails", 1) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentDetails) String() string { + if this == nil { + return "nil" + } + repeatedStringForCauses := "[]DeploymentCause{" + for _, f := range this.Causes { + repeatedStringForCauses += strings.Replace(strings.Replace(f.String(), "DeploymentCause", "DeploymentCause", 1), `&`, ``, 1) + "," + } + repeatedStringForCauses += "}" + s := strings.Join([]string{`&DeploymentDetails{`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Causes:` + repeatedStringForCauses + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentLog) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentLog{`, + `}`, + }, "") + return s +} +func (this *DeploymentLogOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentLogOptions{`, + `Container:` + fmt.Sprintf("%v", this.Container) + `,`, + `Follow:` + fmt.Sprintf("%v", this.Follow) + `,`, + `Previous:` + fmt.Sprintf("%v", this.Previous) + `,`, + `SinceSeconds:` + valueToStringGenerated(this.SinceSeconds) + `,`, + `SinceTime:` + strings.Replace(fmt.Sprintf("%v", this.SinceTime), "Time", "v11.Time", 1) + `,`, + `Timestamps:` + fmt.Sprintf("%v", this.Timestamps) + `,`, + `TailLines:` + valueToStringGenerated(this.TailLines) + `,`, + `LimitBytes:` + valueToStringGenerated(this.LimitBytes) + `,`, + `NoWait:` + fmt.Sprintf("%v", this.NoWait) + `,`, + `Version:` + valueToStringGenerated(this.Version) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentRequest) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentRequest{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Latest:` + fmt.Sprintf("%v", this.Latest) + `,`, + `Force:` + fmt.Sprintf("%v", this.Force) + `,`, + `ExcludeTriggers:` + fmt.Sprintf("%v", this.ExcludeTriggers) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentStrategy) String() string { + if this == nil { + return "nil" + } + keysForLabels := make([]string, 0, len(this.Labels)) + for k := range this.Labels { + keysForLabels = append(keysForLabels, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) + mapStringForLabels := "map[string]string{" + for _, k := range keysForLabels { + mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) + } + mapStringForLabels += "}" + keysForAnnotations := make([]string, 0, len(this.Annotations)) + for k := range this.Annotations { + keysForAnnotations = append(keysForAnnotations, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) + mapStringForAnnotations := "map[string]string{" + for _, k := range keysForAnnotations { + mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) + } + mapStringForAnnotations += "}" + s := strings.Join([]string{`&DeploymentStrategy{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `CustomParams:` + strings.Replace(this.CustomParams.String(), "CustomDeploymentStrategyParams", "CustomDeploymentStrategyParams", 1) + `,`, + `RecreateParams:` + strings.Replace(this.RecreateParams.String(), "RecreateDeploymentStrategyParams", "RecreateDeploymentStrategyParams", 1) + `,`, + `RollingParams:` + strings.Replace(this.RollingParams.String(), "RollingDeploymentStrategyParams", "RollingDeploymentStrategyParams", 1) + `,`, + `Resources:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Resources), "ResourceRequirements", "v1.ResourceRequirements", 1), `&`, ``, 1) + `,`, + `Labels:` + mapStringForLabels + `,`, + `Annotations:` + mapStringForAnnotations + `,`, + `ActiveDeadlineSeconds:` + valueToStringGenerated(this.ActiveDeadlineSeconds) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentTriggerImageChangeParams) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentTriggerImageChangeParams{`, + `Automatic:` + fmt.Sprintf("%v", this.Automatic) + `,`, + `ContainerNames:` + fmt.Sprintf("%v", this.ContainerNames) + `,`, + `From:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.From), "ObjectReference", "v1.ObjectReference", 1), `&`, ``, 1) + `,`, + `LastTriggeredImage:` + fmt.Sprintf("%v", this.LastTriggeredImage) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentTriggerPolicy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentTriggerPolicy{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `ImageChangeParams:` + strings.Replace(this.ImageChangeParams.String(), "DeploymentTriggerImageChangeParams", "DeploymentTriggerImageChangeParams", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ExecNewPodHook) String() string { + if this == nil { + return "nil" + } + repeatedStringForEnv := "[]EnvVar{" + for _, f := range this.Env { + repeatedStringForEnv += fmt.Sprintf("%v", f) + "," + } + repeatedStringForEnv += "}" + s := strings.Join([]string{`&ExecNewPodHook{`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `Env:` + repeatedStringForEnv + `,`, + `ContainerName:` + fmt.Sprintf("%v", this.ContainerName) + `,`, + `Volumes:` + fmt.Sprintf("%v", this.Volumes) + `,`, + `}`, + }, "") + return s +} +func (this *LifecycleHook) String() string { + if this == nil { + return "nil" + } + repeatedStringForTagImages := "[]TagImageHook{" + for _, f := range this.TagImages { + repeatedStringForTagImages += strings.Replace(strings.Replace(f.String(), "TagImageHook", "TagImageHook", 1), `&`, ``, 1) + "," + } + repeatedStringForTagImages += "}" + s := strings.Join([]string{`&LifecycleHook{`, + `FailurePolicy:` + fmt.Sprintf("%v", this.FailurePolicy) + `,`, + `ExecNewPod:` + strings.Replace(this.ExecNewPod.String(), "ExecNewPodHook", "ExecNewPodHook", 1) + `,`, + `TagImages:` + repeatedStringForTagImages + `,`, + `}`, + }, "") + return s +} +func (this *RecreateDeploymentStrategyParams) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RecreateDeploymentStrategyParams{`, + `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, + `Pre:` + strings.Replace(this.Pre.String(), "LifecycleHook", "LifecycleHook", 1) + `,`, + `Mid:` + strings.Replace(this.Mid.String(), "LifecycleHook", "LifecycleHook", 1) + `,`, + `Post:` + strings.Replace(this.Post.String(), "LifecycleHook", "LifecycleHook", 1) + `,`, + `}`, + }, "") + return s +} +func (this *RollingDeploymentStrategyParams) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RollingDeploymentStrategyParams{`, + `UpdatePeriodSeconds:` + valueToStringGenerated(this.UpdatePeriodSeconds) + `,`, + `IntervalSeconds:` + valueToStringGenerated(this.IntervalSeconds) + `,`, + `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, + `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "intstr.IntOrString", 1) + `,`, + `MaxSurge:` + strings.Replace(fmt.Sprintf("%v", this.MaxSurge), "IntOrString", "intstr.IntOrString", 1) + `,`, + `Pre:` + strings.Replace(this.Pre.String(), "LifecycleHook", "LifecycleHook", 1) + `,`, + `Post:` + strings.Replace(this.Post.String(), "LifecycleHook", "LifecycleHook", 1) + `,`, + `}`, + }, "") + return s +} +func (this *TagImageHook) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TagImageHook{`, + `ContainerName:` + fmt.Sprintf("%v", this.ContainerName) + `,`, + `To:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.To), "ObjectReference", "v1.ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *CustomDeploymentStrategyParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CustomDeploymentStrategyParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CustomDeploymentStrategyParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Image = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Environment", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Environment = append(m.Environment, v1.EnvVar{}) + if err := m.Environment[len(m.Environment)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Command", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Command = append(m.Command, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentCause) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentCause: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentCause: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = DeploymentTriggerType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImageTrigger", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ImageTrigger == nil { + m.ImageTrigger = &DeploymentCauseImageTrigger{} + } + if err := m.ImageTrigger.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentCauseImageTrigger) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentCauseImageTrigger: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentCauseImageTrigger: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.From.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentCondition) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = DeploymentConditionType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = k8s_io_api_core_v1.ConditionStatus(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastUpdateTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastUpdateTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentConfigList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentConfigList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentConfigList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, DeploymentConfig{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentConfigRollback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentConfigRollback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentConfigRollback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdatedAnnotations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UpdatedAnnotations == nil { + m.UpdatedAnnotations = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.UpdatedAnnotations[mapkey] = mapvalue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentConfigRollbackSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentConfigRollbackSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentConfigRollbackSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.From.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + } + m.Revision = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Revision |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IncludeTriggers", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IncludeTriggers = bool(v != 0) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IncludeTemplate", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IncludeTemplate = bool(v != 0) + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IncludeReplicationMeta", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IncludeReplicationMeta = bool(v != 0) + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IncludeStrategy", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IncludeStrategy = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentConfigSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentConfigSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentConfigSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Strategy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Strategy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Triggers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Triggers == nil { + m.Triggers = DeploymentTriggerPolicies{} + } + if err := m.Triggers.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Replicas", wireType) + } + m.Replicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Replicas |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RevisionHistoryLimit", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RevisionHistoryLimit = &v + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Test", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Test = bool(v != 0) + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Paused", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Paused = bool(v != 0) + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Selector[mapkey] = mapvalue + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Template", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Template == nil { + m.Template = &v1.PodTemplateSpec{} + } + if err := m.Template.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MinReadySeconds", wireType) + } + m.MinReadySeconds = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MinReadySeconds |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentConfigStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentConfigStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentConfigStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LatestVersion", wireType) + } + m.LatestVersion = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LatestVersion |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) + } + m.ObservedGeneration = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ObservedGeneration |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Replicas", wireType) + } + m.Replicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Replicas |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdatedReplicas", wireType) + } + m.UpdatedReplicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UpdatedReplicas |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AvailableReplicas", wireType) + } + m.AvailableReplicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.AvailableReplicas |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UnavailableReplicas", wireType) + } + m.UnavailableReplicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UnavailableReplicas |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Details", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Details == nil { + m.Details = &DeploymentDetails{} + } + if err := m.Details.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, DeploymentCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadyReplicas", wireType) + } + m.ReadyReplicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ReadyReplicas |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentDetails) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentDetails: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentDetails: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Causes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Causes = append(m.Causes, DeploymentCause{}) + if err := m.Causes[len(m.Causes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentLog) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentLog: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentLog: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentLogOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentLogOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentLogOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Container", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Container = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Follow", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Follow = bool(v != 0) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Previous", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Previous = bool(v != 0) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SinceSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.SinceSeconds = &v + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SinceTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SinceTime == nil { + m.SinceTime = &v11.Time{} + } + if err := m.SinceTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamps", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Timestamps = bool(v != 0) + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TailLines", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TailLines = &v + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LimitBytes", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LimitBytes = &v + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NoWait", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.NoWait = bool(v != 0) + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Version = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Latest", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Latest = bool(v != 0) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Force", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Force = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExcludeTriggers", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExcludeTriggers = append(m.ExcludeTriggers, DeploymentTriggerType(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentStrategy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentStrategy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentStrategy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = DeploymentStrategyType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CustomParams", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CustomParams == nil { + m.CustomParams = &CustomDeploymentStrategyParams{} + } + if err := m.CustomParams.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RecreateParams", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RecreateParams == nil { + m.RecreateParams = &RecreateDeploymentStrategyParams{} + } + if err := m.RecreateParams.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RollingParams", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RollingParams == nil { + m.RollingParams = &RollingDeploymentStrategyParams{} + } + if err := m.RollingParams.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Resources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Labels == nil { + m.Labels = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Labels[mapkey] = mapvalue + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Annotations == nil { + m.Annotations = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Annotations[mapkey] = mapvalue + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ActiveDeadlineSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ActiveDeadlineSeconds = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentTriggerImageChangeParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentTriggerImageChangeParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentTriggerImageChangeParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Automatic", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Automatic = bool(v != 0) + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerNames", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContainerNames = append(m.ContainerNames, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.From.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTriggeredImage", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LastTriggeredImage = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentTriggerPolicies) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentTriggerPolicies: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentTriggerPolicies: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + *m = append(*m, DeploymentTriggerPolicy{}) + if err := (*m)[len(*m)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeploymentTriggerPolicy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentTriggerPolicy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentTriggerPolicy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = DeploymentTriggerType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImageChangeParams", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ImageChangeParams == nil { + m.ImageChangeParams = &DeploymentTriggerImageChangeParams{} + } + if err := m.ImageChangeParams.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExecNewPodHook) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExecNewPodHook: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExecNewPodHook: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Command", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Command = append(m.Command, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Env", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Env = append(m.Env, v1.EnvVar{}) + if err := m.Env[len(m.Env)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContainerName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Volumes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Volumes = append(m.Volumes, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LifecycleHook) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LifecycleHook: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LifecycleHook: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FailurePolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FailurePolicy = LifecycleHookFailurePolicy(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExecNewPod", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ExecNewPod == nil { + m.ExecNewPod = &ExecNewPodHook{} + } + if err := m.ExecNewPod.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TagImages", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TagImages = append(m.TagImages, TagImageHook{}) + if err := m.TagImages[len(m.TagImages)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RecreateDeploymentStrategyParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RecreateDeploymentStrategyParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RecreateDeploymentStrategyParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TimeoutSeconds = &v + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pre", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pre == nil { + m.Pre = &LifecycleHook{} + } + if err := m.Pre.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Mid", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Mid == nil { + m.Mid = &LifecycleHook{} + } + if err := m.Mid.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Post", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Post == nil { + m.Post = &LifecycleHook{} + } + if err := m.Post.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RollingDeploymentStrategyParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RollingDeploymentStrategyParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RollingDeploymentStrategyParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdatePeriodSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.UpdatePeriodSeconds = &v + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IntervalSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IntervalSeconds = &v + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TimeoutSeconds = &v + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxUnavailable", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaxUnavailable == nil { + m.MaxUnavailable = &intstr.IntOrString{} + } + if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxSurge", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaxSurge == nil { + m.MaxSurge = &intstr.IntOrString{} + } + if err := m.MaxSurge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pre", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pre == nil { + m.Pre = &LifecycleHook{} + } + if err := m.Pre.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Post", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Post == nil { + m.Post = &LifecycleHook{} + } + if err := m.Post.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TagImageHook) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TagImageHook: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TagImageHook: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContainerName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field To", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.To.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vendor/github.com/openshift/api/apps/v1/generated.proto b/vendor/github.com/openshift/api/apps/v1/generated.proto new file mode 100644 index 0000000000000..d15f20c0d4f0c --- /dev/null +++ b/vendor/github.com/openshift/api/apps/v1/generated.proto @@ -0,0 +1,466 @@ + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package github.com.openshift.api.apps.v1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; +import "k8s.io/apimachinery/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// CustomDeploymentStrategyParams are the input to the Custom deployment strategy. +message CustomDeploymentStrategyParams { + // Image specifies a container image which can carry out a deployment. + optional string image = 1; + + // Environment holds the environment which will be given to the container for Image. + repeated k8s.io.api.core.v1.EnvVar environment = 2; + + // Command is optional and overrides CMD in the container Image. + repeated string command = 3; +} + +// DeploymentCause captures information about a particular cause of a deployment. +message DeploymentCause { + // Type of the trigger that resulted in the creation of a new deployment + optional string type = 1; + + // ImageTrigger contains the image trigger details, if this trigger was fired based on an image change + optional DeploymentCauseImageTrigger imageTrigger = 2; +} + +// DeploymentCauseImageTrigger represents details about the cause of a deployment originating +// from an image change trigger +message DeploymentCauseImageTrigger { + // From is a reference to the changed object which triggered a deployment. The field may have + // the kinds DockerImage, ImageStreamTag, or ImageStreamImage. + optional k8s.io.api.core.v1.ObjectReference from = 1; +} + +// DeploymentCondition describes the state of a deployment config at a certain point. +message DeploymentCondition { + // Type of deployment condition. + optional string type = 1; + + // Status of the condition, one of True, False, Unknown. + optional string status = 2; + + // The last time this condition was updated. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastUpdateTime = 6; + + // The last time the condition transitioned from one status to another. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 3; + + // The reason for the condition's last transition. + optional string reason = 4; + + // A human readable message indicating details about the transition. + optional string message = 5; +} + +// Deployment Configs define the template for a pod and manages deploying new images or configuration changes. +// A single deployment configuration is usually analogous to a single micro-service. Can support many different +// deployment patterns, including full restart, customizable rolling updates, and fully custom behaviors, as +// well as pre- and post- deployment hooks. Each individual deployment is represented as a replication controller. +// +// A deployment is "triggered" when its configuration is changed or a tag in an Image Stream is changed. +// Triggers can be disabled to allow manual control over a deployment. The "strategy" determines how the deployment +// is carried out and may be changed at any time. The `latestVersion` field is updated when a new deployment +// is triggered by any means. +message DeploymentConfig { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Spec represents a desired deployment state and how to deploy to it. + optional DeploymentConfigSpec spec = 2; + + // Status represents the current deployment state. + // +optional + optional DeploymentConfigStatus status = 3; +} + +// DeploymentConfigList is a collection of deployment configs. +message DeploymentConfigList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of deployment configs + repeated DeploymentConfig items = 2; +} + +// DeploymentConfigRollback provides the input to rollback generation. +message DeploymentConfigRollback { + // Name of the deployment config that will be rolled back. + optional string name = 1; + + // UpdatedAnnotations is a set of new annotations that will be added in the deployment config. + map updatedAnnotations = 2; + + // Spec defines the options to rollback generation. + optional DeploymentConfigRollbackSpec spec = 3; +} + +// DeploymentConfigRollbackSpec represents the options for rollback generation. +message DeploymentConfigRollbackSpec { + // From points to a ReplicationController which is a deployment. + optional k8s.io.api.core.v1.ObjectReference from = 1; + + // Revision to rollback to. If set to 0, rollback to the last revision. + optional int64 revision = 2; + + // IncludeTriggers specifies whether to include config Triggers. + optional bool includeTriggers = 3; + + // IncludeTemplate specifies whether to include the PodTemplateSpec. + optional bool includeTemplate = 4; + + // IncludeReplicationMeta specifies whether to include the replica count and selector. + optional bool includeReplicationMeta = 5; + + // IncludeStrategy specifies whether to include the deployment Strategy. + optional bool includeStrategy = 6; +} + +// DeploymentConfigSpec represents the desired state of the deployment. +message DeploymentConfigSpec { + // Strategy describes how a deployment is executed. + // +optional + optional DeploymentStrategy strategy = 1; + + // MinReadySeconds is the minimum number of seconds for which a newly created pod should + // be ready without any of its container crashing, for it to be considered available. + // Defaults to 0 (pod will be considered available as soon as it is ready) + optional int32 minReadySeconds = 9; + + // Triggers determine how updates to a DeploymentConfig result in new deployments. If no triggers + // are defined, a new deployment can only occur as a result of an explicit client update to the + // DeploymentConfig with a new LatestVersion. If null, defaults to having a config change trigger. + // +optional + optional DeploymentTriggerPolicies triggers = 2; + + // Replicas is the number of desired replicas. + // +optional + optional int32 replicas = 3; + + // RevisionHistoryLimit is the number of old ReplicationControllers to retain to allow for rollbacks. + // This field is a pointer to allow for differentiation between an explicit zero and not specified. + // Defaults to 10. (This only applies to DeploymentConfigs created via the new group API resource, not the legacy resource.) + optional int32 revisionHistoryLimit = 4; + + // Test ensures that this deployment config will have zero replicas except while a deployment is running. This allows the + // deployment config to be used as a continuous deployment test - triggering on images, running the deployment, and then succeeding + // or failing. Post strategy hooks and After actions can be used to integrate successful deployment with an action. + // +optional + optional bool test = 5; + + // Paused indicates that the deployment config is paused resulting in no new deployments on template + // changes or changes in the template caused by other triggers. + optional bool paused = 6; + + // Selector is a label query over pods that should match the Replicas count. + map selector = 7; + + // Template is the object that describes the pod that will be created if + // insufficient replicas are detected. + optional k8s.io.api.core.v1.PodTemplateSpec template = 8; +} + +// DeploymentConfigStatus represents the current deployment state. +message DeploymentConfigStatus { + // LatestVersion is used to determine whether the current deployment associated with a deployment + // config is out of sync. + optional int64 latestVersion = 1; + + // ObservedGeneration is the most recent generation observed by the deployment config controller. + optional int64 observedGeneration = 2; + + // Replicas is the total number of pods targeted by this deployment config. + optional int32 replicas = 3; + + // UpdatedReplicas is the total number of non-terminated pods targeted by this deployment config + // that have the desired template spec. + optional int32 updatedReplicas = 4; + + // AvailableReplicas is the total number of available pods targeted by this deployment config. + optional int32 availableReplicas = 5; + + // UnavailableReplicas is the total number of unavailable pods targeted by this deployment config. + optional int32 unavailableReplicas = 6; + + // Details are the reasons for the update to this deployment config. + // This could be based on a change made by the user or caused by an automatic trigger + optional DeploymentDetails details = 7; + + // Conditions represents the latest available observations of a deployment config's current state. + // +patchMergeKey=type + // +patchStrategy=merge + repeated DeploymentCondition conditions = 8; + + // Total number of ready pods targeted by this deployment. + optional int32 readyReplicas = 9; +} + +// DeploymentDetails captures information about the causes of a deployment. +message DeploymentDetails { + // Message is the user specified change message, if this deployment was triggered manually by the user + optional string message = 1; + + // Causes are extended data associated with all the causes for creating a new deployment + repeated DeploymentCause causes = 2; +} + +// DeploymentLog represents the logs for a deployment +message DeploymentLog { +} + +// DeploymentLogOptions is the REST options for a deployment log +message DeploymentLogOptions { + // The container for which to stream logs. Defaults to only container if there is one container in the pod. + optional string container = 1; + + // Follow if true indicates that the build log should be streamed until + // the build terminates. + optional bool follow = 2; + + // Return previous deployment logs. Defaults to false. + optional bool previous = 3; + + // A relative time in seconds before the current time from which to show logs. If this value + // precedes the time a pod was started, only logs since the pod start will be returned. + // If this value is in the future, no logs will be returned. + // Only one of sinceSeconds or sinceTime may be specified. + optional int64 sinceSeconds = 4; + + // An RFC3339 timestamp from which to show logs. If this value + // precedes the time a pod was started, only logs since the pod start will be returned. + // If this value is in the future, no logs will be returned. + // Only one of sinceSeconds or sinceTime may be specified. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time sinceTime = 5; + + // If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line + // of log output. Defaults to false. + optional bool timestamps = 6; + + // If set, the number of lines from the end of the logs to show. If not specified, + // logs are shown from the creation of the container or sinceSeconds or sinceTime + optional int64 tailLines = 7; + + // If set, the number of bytes to read from the server before terminating the + // log output. This may not display a complete final line of logging, and may return + // slightly more or slightly less than the specified limit. + optional int64 limitBytes = 8; + + // NoWait if true causes the call to return immediately even if the deployment + // is not available yet. Otherwise the server will wait until the deployment has started. + // TODO: Fix the tag to 'noWait' in v2 + optional bool nowait = 9; + + // Version of the deployment for which to view logs. + optional int64 version = 10; +} + +// DeploymentRequest is a request to a deployment config for a new deployment. +message DeploymentRequest { + // Name of the deployment config for requesting a new deployment. + optional string name = 1; + + // Latest will update the deployment config with the latest state from all triggers. + optional bool latest = 2; + + // Force will try to force a new deployment to run. If the deployment config is paused, + // then setting this to true will return an Invalid error. + optional bool force = 3; + + // ExcludeTriggers instructs the instantiator to avoid processing the specified triggers. + // This field overrides the triggers from latest and allows clients to control specific + // logic. This field is ignored if not specified. + repeated string excludeTriggers = 4; +} + +// DeploymentStrategy describes how to perform a deployment. +message DeploymentStrategy { + // Type is the name of a deployment strategy. + optional string type = 1; + + // CustomParams are the input to the Custom deployment strategy, and may also + // be specified for the Recreate and Rolling strategies to customize the execution + // process that runs the deployment. + optional CustomDeploymentStrategyParams customParams = 2; + + // RecreateParams are the input to the Recreate deployment strategy. + optional RecreateDeploymentStrategyParams recreateParams = 3; + + // RollingParams are the input to the Rolling deployment strategy. + optional RollingDeploymentStrategyParams rollingParams = 4; + + // Resources contains resource requirements to execute the deployment and any hooks. + optional k8s.io.api.core.v1.ResourceRequirements resources = 5; + + // Labels is a set of key, value pairs added to custom deployer and lifecycle pre/post hook pods. + map labels = 6; + + // Annotations is a set of key, value pairs added to custom deployer and lifecycle pre/post hook pods. + map annotations = 7; + + // ActiveDeadlineSeconds is the duration in seconds that the deployer pods for this deployment + // config may be active on a node before the system actively tries to terminate them. + optional int64 activeDeadlineSeconds = 8; +} + +// DeploymentTriggerImageChangeParams represents the parameters to the ImageChange trigger. +message DeploymentTriggerImageChangeParams { + // Automatic means that the detection of a new tag value should result in an image update + // inside the pod template. + optional bool automatic = 1; + + // ContainerNames is used to restrict tag updates to the specified set of container names in a pod. + // If multiple triggers point to the same containers, the resulting behavior is undefined. Future + // API versions will make this a validation error. If ContainerNames does not point to a valid container, + // the trigger will be ignored. Future API versions will make this a validation error. + repeated string containerNames = 2; + + // From is a reference to an image stream tag to watch for changes. From.Name is the only + // required subfield - if From.Namespace is blank, the namespace of the current deployment + // trigger will be used. + optional k8s.io.api.core.v1.ObjectReference from = 3; + + // LastTriggeredImage is the last image to be triggered. + optional string lastTriggeredImage = 4; +} + +// DeploymentTriggerPolicies is a list of policies where nil values and different from empty arrays. +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +message DeploymentTriggerPolicies { + // items, if empty, will result in an empty slice + + repeated DeploymentTriggerPolicy items = 1; +} + +// DeploymentTriggerPolicy describes a policy for a single trigger that results in a new deployment. +message DeploymentTriggerPolicy { + // Type of the trigger + optional string type = 1; + + // ImageChangeParams represents the parameters for the ImageChange trigger. + optional DeploymentTriggerImageChangeParams imageChangeParams = 2; +} + +// ExecNewPodHook is a hook implementation which runs a command in a new pod +// based on the specified container which is assumed to be part of the +// deployment template. +message ExecNewPodHook { + // Command is the action command and its arguments. + repeated string command = 1; + + // Env is a set of environment variables to supply to the hook pod's container. + repeated k8s.io.api.core.v1.EnvVar env = 2; + + // ContainerName is the name of a container in the deployment pod template + // whose container image will be used for the hook pod's container. + optional string containerName = 3; + + // Volumes is a list of named volumes from the pod template which should be + // copied to the hook pod. Volumes names not found in pod spec are ignored. + // An empty list means no volumes will be copied. + repeated string volumes = 4; +} + +// LifecycleHook defines a specific deployment lifecycle action. Only one type of action may be specified at any time. +message LifecycleHook { + // FailurePolicy specifies what action to take if the hook fails. + optional string failurePolicy = 1; + + // ExecNewPod specifies the options for a lifecycle hook backed by a pod. + optional ExecNewPodHook execNewPod = 2; + + // TagImages instructs the deployer to tag the current image referenced under a container onto an image stream tag. + repeated TagImageHook tagImages = 3; +} + +// RecreateDeploymentStrategyParams are the input to the Recreate deployment +// strategy. +message RecreateDeploymentStrategyParams { + // TimeoutSeconds is the time to wait for updates before giving up. If the + // value is nil, a default will be used. + optional int64 timeoutSeconds = 1; + + // Pre is a lifecycle hook which is executed before the strategy manipulates + // the deployment. All LifecycleHookFailurePolicy values are supported. + optional LifecycleHook pre = 2; + + // Mid is a lifecycle hook which is executed while the deployment is scaled down to zero before the first new + // pod is created. All LifecycleHookFailurePolicy values are supported. + optional LifecycleHook mid = 3; + + // Post is a lifecycle hook which is executed after the strategy has + // finished all deployment logic. All LifecycleHookFailurePolicy values are supported. + optional LifecycleHook post = 4; +} + +// RollingDeploymentStrategyParams are the input to the Rolling deployment +// strategy. +message RollingDeploymentStrategyParams { + // UpdatePeriodSeconds is the time to wait between individual pod updates. + // If the value is nil, a default will be used. + optional int64 updatePeriodSeconds = 1; + + // IntervalSeconds is the time to wait between polling deployment status + // after update. If the value is nil, a default will be used. + optional int64 intervalSeconds = 2; + + // TimeoutSeconds is the time to wait for updates before giving up. If the + // value is nil, a default will be used. + optional int64 timeoutSeconds = 3; + + // MaxUnavailable is the maximum number of pods that can be unavailable + // during the update. Value can be an absolute number (ex: 5) or a + // percentage of total pods at the start of update (ex: 10%). Absolute + // number is calculated from percentage by rounding down. + // + // This cannot be 0 if MaxSurge is 0. By default, 25% is used. + // + // Example: when this is set to 30%, the old RC can be scaled down by 30% + // immediately when the rolling update starts. Once new pods are ready, old + // RC can be scaled down further, followed by scaling up the new RC, + // ensuring that at least 70% of original number of pods are available at + // all times during the update. + optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxUnavailable = 4; + + // MaxSurge is the maximum number of pods that can be scheduled above the + // original number of pods. Value can be an absolute number (ex: 5) or a + // percentage of total pods at the start of the update (ex: 10%). Absolute + // number is calculated from percentage by rounding up. + // + // This cannot be 0 if MaxUnavailable is 0. By default, 25% is used. + // + // Example: when this is set to 30%, the new RC can be scaled up by 30% + // immediately when the rolling update starts. Once old pods have been + // killed, new RC can be scaled up further, ensuring that total number of + // pods running at any time during the update is atmost 130% of original + // pods. + optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxSurge = 5; + + // Pre is a lifecycle hook which is executed before the deployment process + // begins. All LifecycleHookFailurePolicy values are supported. + optional LifecycleHook pre = 7; + + // Post is a lifecycle hook which is executed after the strategy has + // finished all deployment logic. All LifecycleHookFailurePolicy values + // are supported. + optional LifecycleHook post = 8; +} + +// TagImageHook is a request to tag the image in a particular container onto an ImageStreamTag. +message TagImageHook { + // ContainerName is the name of a container in the deployment config whose image value will be used as the source of the tag. If there is only a single + // container this value will be defaulted to the name of that container. + optional string containerName = 1; + + // To is the target ImageStreamTag to set the container's image onto. + optional k8s.io.api.core.v1.ObjectReference to = 2; +} + diff --git a/vendor/github.com/openshift/api/apps/v1/legacy.go b/vendor/github.com/openshift/api/apps/v1/legacy.go new file mode 100644 index 0000000000000..c8fa0ed999f39 --- /dev/null +++ b/vendor/github.com/openshift/api/apps/v1/legacy.go @@ -0,0 +1,28 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + extensionsv1beta1 "k8s.io/api/extensions/v1beta1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + legacyGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} + legacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes, corev1.AddToScheme, extensionsv1beta1.AddToScheme) + DeprecatedInstallWithoutGroup = legacySchemeBuilder.AddToScheme +) + +func addLegacyKnownTypes(scheme *runtime.Scheme) error { + types := []runtime.Object{ + &DeploymentConfig{}, + &DeploymentConfigList{}, + &DeploymentConfigRollback{}, + &DeploymentRequest{}, + &DeploymentLog{}, + &DeploymentLogOptions{}, + &extensionsv1beta1.Scale{}, + } + scheme.AddKnownTypes(legacyGroupVersion, types...) + return nil +} diff --git a/vendor/github.com/openshift/api/apps/v1/register.go b/vendor/github.com/openshift/api/apps/v1/register.go new file mode 100644 index 0000000000000..0c1e47e6d46ef --- /dev/null +++ b/vendor/github.com/openshift/api/apps/v1/register.go @@ -0,0 +1,45 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + extensionsv1beta1 "k8s.io/api/extensions/v1beta1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "apps.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, corev1.AddToScheme, extensionsv1beta1.AddToScheme) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &DeploymentConfig{}, + &DeploymentConfigList{}, + &DeploymentConfigRollback{}, + &DeploymentRequest{}, + &DeploymentLog{}, + &DeploymentLogOptions{}, + &extensionsv1beta1.Scale{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/apps/v1/types.go b/vendor/github.com/openshift/api/apps/v1/types.go new file mode 100644 index 0000000000000..ed147807d08d3 --- /dev/null +++ b/vendor/github.com/openshift/api/apps/v1/types.go @@ -0,0 +1,493 @@ +package v1 + +import ( + "fmt" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" +) + +// +genclient +// +genclient:method=Instantiate,verb=create,subresource=instantiate,input=DeploymentRequest +// +genclient:method=Rollback,verb=create,subresource=rollback,input=DeploymentConfigRollback +// +genclient:method=GetScale,verb=get,subresource=scale,result=k8s.io/api/extensions/v1beta1.Scale +// +genclient:method=UpdateScale,verb=update,subresource=scale,input=k8s.io/api/extensions/v1beta1.Scale,result=k8s.io/api/extensions/v1beta1.Scale +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Deployment Configs define the template for a pod and manages deploying new images or configuration changes. +// A single deployment configuration is usually analogous to a single micro-service. Can support many different +// deployment patterns, including full restart, customizable rolling updates, and fully custom behaviors, as +// well as pre- and post- deployment hooks. Each individual deployment is represented as a replication controller. +// +// A deployment is "triggered" when its configuration is changed or a tag in an Image Stream is changed. +// Triggers can be disabled to allow manual control over a deployment. The "strategy" determines how the deployment +// is carried out and may be changed at any time. The `latestVersion` field is updated when a new deployment +// is triggered by any means. +type DeploymentConfig struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec represents a desired deployment state and how to deploy to it. + Spec DeploymentConfigSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` + + // Status represents the current deployment state. + // +optional + Status DeploymentConfigStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// DeploymentConfigSpec represents the desired state of the deployment. +type DeploymentConfigSpec struct { + // Strategy describes how a deployment is executed. + // +optional + Strategy DeploymentStrategy `json:"strategy" protobuf:"bytes,1,opt,name=strategy"` + + // MinReadySeconds is the minimum number of seconds for which a newly created pod should + // be ready without any of its container crashing, for it to be considered available. + // Defaults to 0 (pod will be considered available as soon as it is ready) + MinReadySeconds int32 `json:"minReadySeconds,omitempty" protobuf:"varint,9,opt,name=minReadySeconds"` + + // Triggers determine how updates to a DeploymentConfig result in new deployments. If no triggers + // are defined, a new deployment can only occur as a result of an explicit client update to the + // DeploymentConfig with a new LatestVersion. If null, defaults to having a config change trigger. + // +optional + Triggers DeploymentTriggerPolicies `json:"triggers" protobuf:"bytes,2,rep,name=triggers"` + + // Replicas is the number of desired replicas. + // +optional + Replicas int32 `json:"replicas" protobuf:"varint,3,opt,name=replicas"` + + // RevisionHistoryLimit is the number of old ReplicationControllers to retain to allow for rollbacks. + // This field is a pointer to allow for differentiation between an explicit zero and not specified. + // Defaults to 10. (This only applies to DeploymentConfigs created via the new group API resource, not the legacy resource.) + RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty" protobuf:"varint,4,opt,name=revisionHistoryLimit"` + + // Test ensures that this deployment config will have zero replicas except while a deployment is running. This allows the + // deployment config to be used as a continuous deployment test - triggering on images, running the deployment, and then succeeding + // or failing. Post strategy hooks and After actions can be used to integrate successful deployment with an action. + // +optional + Test bool `json:"test" protobuf:"varint,5,opt,name=test"` + + // Paused indicates that the deployment config is paused resulting in no new deployments on template + // changes or changes in the template caused by other triggers. + Paused bool `json:"paused,omitempty" protobuf:"varint,6,opt,name=paused"` + + // Selector is a label query over pods that should match the Replicas count. + Selector map[string]string `json:"selector,omitempty" protobuf:"bytes,7,rep,name=selector"` + + // Template is the object that describes the pod that will be created if + // insufficient replicas are detected. + Template *corev1.PodTemplateSpec `json:"template,omitempty" protobuf:"bytes,8,opt,name=template"` +} + +// DeploymentStrategy describes how to perform a deployment. +type DeploymentStrategy struct { + // Type is the name of a deployment strategy. + Type DeploymentStrategyType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type,casttype=DeploymentStrategyType"` + + // CustomParams are the input to the Custom deployment strategy, and may also + // be specified for the Recreate and Rolling strategies to customize the execution + // process that runs the deployment. + CustomParams *CustomDeploymentStrategyParams `json:"customParams,omitempty" protobuf:"bytes,2,opt,name=customParams"` + // RecreateParams are the input to the Recreate deployment strategy. + RecreateParams *RecreateDeploymentStrategyParams `json:"recreateParams,omitempty" protobuf:"bytes,3,opt,name=recreateParams"` + // RollingParams are the input to the Rolling deployment strategy. + RollingParams *RollingDeploymentStrategyParams `json:"rollingParams,omitempty" protobuf:"bytes,4,opt,name=rollingParams"` + + // Resources contains resource requirements to execute the deployment and any hooks. + Resources corev1.ResourceRequirements `json:"resources,omitempty" protobuf:"bytes,5,opt,name=resources"` + // Labels is a set of key, value pairs added to custom deployer and lifecycle pre/post hook pods. + Labels map[string]string `json:"labels,omitempty" protobuf:"bytes,6,rep,name=labels"` + // Annotations is a set of key, value pairs added to custom deployer and lifecycle pre/post hook pods. + Annotations map[string]string `json:"annotations,omitempty" protobuf:"bytes,7,rep,name=annotations"` + + // ActiveDeadlineSeconds is the duration in seconds that the deployer pods for this deployment + // config may be active on a node before the system actively tries to terminate them. + ActiveDeadlineSeconds *int64 `json:"activeDeadlineSeconds,omitempty" protobuf:"varint,8,opt,name=activeDeadlineSeconds"` +} + +// DeploymentStrategyType refers to a specific DeploymentStrategy implementation. +type DeploymentStrategyType string + +const ( + // DeploymentStrategyTypeRecreate is a simple strategy suitable as a default. + DeploymentStrategyTypeRecreate DeploymentStrategyType = "Recreate" + // DeploymentStrategyTypeCustom is a user defined strategy. + DeploymentStrategyTypeCustom DeploymentStrategyType = "Custom" + // DeploymentStrategyTypeRolling uses the Kubernetes RollingUpdater. + DeploymentStrategyTypeRolling DeploymentStrategyType = "Rolling" +) + +// CustomDeploymentStrategyParams are the input to the Custom deployment strategy. +type CustomDeploymentStrategyParams struct { + // Image specifies a container image which can carry out a deployment. + Image string `json:"image,omitempty" protobuf:"bytes,1,opt,name=image"` + // Environment holds the environment which will be given to the container for Image. + Environment []corev1.EnvVar `json:"environment,omitempty" protobuf:"bytes,2,rep,name=environment"` + // Command is optional and overrides CMD in the container Image. + Command []string `json:"command,omitempty" protobuf:"bytes,3,rep,name=command"` +} + +// RecreateDeploymentStrategyParams are the input to the Recreate deployment +// strategy. +type RecreateDeploymentStrategyParams struct { + // TimeoutSeconds is the time to wait for updates before giving up. If the + // value is nil, a default will be used. + TimeoutSeconds *int64 `json:"timeoutSeconds,omitempty" protobuf:"varint,1,opt,name=timeoutSeconds"` + // Pre is a lifecycle hook which is executed before the strategy manipulates + // the deployment. All LifecycleHookFailurePolicy values are supported. + Pre *LifecycleHook `json:"pre,omitempty" protobuf:"bytes,2,opt,name=pre"` + // Mid is a lifecycle hook which is executed while the deployment is scaled down to zero before the first new + // pod is created. All LifecycleHookFailurePolicy values are supported. + Mid *LifecycleHook `json:"mid,omitempty" protobuf:"bytes,3,opt,name=mid"` + // Post is a lifecycle hook which is executed after the strategy has + // finished all deployment logic. All LifecycleHookFailurePolicy values are supported. + Post *LifecycleHook `json:"post,omitempty" protobuf:"bytes,4,opt,name=post"` +} + +// RollingDeploymentStrategyParams are the input to the Rolling deployment +// strategy. +type RollingDeploymentStrategyParams struct { + // UpdatePeriodSeconds is the time to wait between individual pod updates. + // If the value is nil, a default will be used. + UpdatePeriodSeconds *int64 `json:"updatePeriodSeconds,omitempty" protobuf:"varint,1,opt,name=updatePeriodSeconds"` + // IntervalSeconds is the time to wait between polling deployment status + // after update. If the value is nil, a default will be used. + IntervalSeconds *int64 `json:"intervalSeconds,omitempty" protobuf:"varint,2,opt,name=intervalSeconds"` + // TimeoutSeconds is the time to wait for updates before giving up. If the + // value is nil, a default will be used. + TimeoutSeconds *int64 `json:"timeoutSeconds,omitempty" protobuf:"varint,3,opt,name=timeoutSeconds"` + // MaxUnavailable is the maximum number of pods that can be unavailable + // during the update. Value can be an absolute number (ex: 5) or a + // percentage of total pods at the start of update (ex: 10%). Absolute + // number is calculated from percentage by rounding down. + // + // This cannot be 0 if MaxSurge is 0. By default, 25% is used. + // + // Example: when this is set to 30%, the old RC can be scaled down by 30% + // immediately when the rolling update starts. Once new pods are ready, old + // RC can be scaled down further, followed by scaling up the new RC, + // ensuring that at least 70% of original number of pods are available at + // all times during the update. + MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty" protobuf:"bytes,4,opt,name=maxUnavailable"` + // MaxSurge is the maximum number of pods that can be scheduled above the + // original number of pods. Value can be an absolute number (ex: 5) or a + // percentage of total pods at the start of the update (ex: 10%). Absolute + // number is calculated from percentage by rounding up. + // + // This cannot be 0 if MaxUnavailable is 0. By default, 25% is used. + // + // Example: when this is set to 30%, the new RC can be scaled up by 30% + // immediately when the rolling update starts. Once old pods have been + // killed, new RC can be scaled up further, ensuring that total number of + // pods running at any time during the update is atmost 130% of original + // pods. + MaxSurge *intstr.IntOrString `json:"maxSurge,omitempty" protobuf:"bytes,5,opt,name=maxSurge"` + // Pre is a lifecycle hook which is executed before the deployment process + // begins. All LifecycleHookFailurePolicy values are supported. + Pre *LifecycleHook `json:"pre,omitempty" protobuf:"bytes,7,opt,name=pre"` + // Post is a lifecycle hook which is executed after the strategy has + // finished all deployment logic. All LifecycleHookFailurePolicy values + // are supported. + Post *LifecycleHook `json:"post,omitempty" protobuf:"bytes,8,opt,name=post"` +} + +// LifecycleHook defines a specific deployment lifecycle action. Only one type of action may be specified at any time. +type LifecycleHook struct { + // FailurePolicy specifies what action to take if the hook fails. + FailurePolicy LifecycleHookFailurePolicy `json:"failurePolicy" protobuf:"bytes,1,opt,name=failurePolicy,casttype=LifecycleHookFailurePolicy"` + + // ExecNewPod specifies the options for a lifecycle hook backed by a pod. + ExecNewPod *ExecNewPodHook `json:"execNewPod,omitempty" protobuf:"bytes,2,opt,name=execNewPod"` + + // TagImages instructs the deployer to tag the current image referenced under a container onto an image stream tag. + TagImages []TagImageHook `json:"tagImages,omitempty" protobuf:"bytes,3,rep,name=tagImages"` +} + +// LifecycleHookFailurePolicy describes possibles actions to take if a hook fails. +type LifecycleHookFailurePolicy string + +const ( + // LifecycleHookFailurePolicyRetry means retry the hook until it succeeds. + LifecycleHookFailurePolicyRetry LifecycleHookFailurePolicy = "Retry" + // LifecycleHookFailurePolicyAbort means abort the deployment. + LifecycleHookFailurePolicyAbort LifecycleHookFailurePolicy = "Abort" + // LifecycleHookFailurePolicyIgnore means ignore failure and continue the deployment. + LifecycleHookFailurePolicyIgnore LifecycleHookFailurePolicy = "Ignore" +) + +// ExecNewPodHook is a hook implementation which runs a command in a new pod +// based on the specified container which is assumed to be part of the +// deployment template. +type ExecNewPodHook struct { + // Command is the action command and its arguments. + Command []string `json:"command" protobuf:"bytes,1,rep,name=command"` + // Env is a set of environment variables to supply to the hook pod's container. + Env []corev1.EnvVar `json:"env,omitempty" protobuf:"bytes,2,rep,name=env"` + // ContainerName is the name of a container in the deployment pod template + // whose container image will be used for the hook pod's container. + ContainerName string `json:"containerName" protobuf:"bytes,3,opt,name=containerName"` + // Volumes is a list of named volumes from the pod template which should be + // copied to the hook pod. Volumes names not found in pod spec are ignored. + // An empty list means no volumes will be copied. + Volumes []string `json:"volumes,omitempty" protobuf:"bytes,4,rep,name=volumes"` +} + +// TagImageHook is a request to tag the image in a particular container onto an ImageStreamTag. +type TagImageHook struct { + // ContainerName is the name of a container in the deployment config whose image value will be used as the source of the tag. If there is only a single + // container this value will be defaulted to the name of that container. + ContainerName string `json:"containerName" protobuf:"bytes,1,opt,name=containerName"` + // To is the target ImageStreamTag to set the container's image onto. + To corev1.ObjectReference `json:"to" protobuf:"bytes,2,opt,name=to"` +} + +// DeploymentTriggerPolicies is a list of policies where nil values and different from empty arrays. +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +type DeploymentTriggerPolicies []DeploymentTriggerPolicy + +func (t DeploymentTriggerPolicies) String() string { + return fmt.Sprintf("%v", []DeploymentTriggerPolicy(t)) +} + +// DeploymentTriggerPolicy describes a policy for a single trigger that results in a new deployment. +type DeploymentTriggerPolicy struct { + // Type of the trigger + Type DeploymentTriggerType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type,casttype=DeploymentTriggerType"` + // ImageChangeParams represents the parameters for the ImageChange trigger. + ImageChangeParams *DeploymentTriggerImageChangeParams `json:"imageChangeParams,omitempty" protobuf:"bytes,2,opt,name=imageChangeParams"` +} + +// DeploymentTriggerType refers to a specific DeploymentTriggerPolicy implementation. +type DeploymentTriggerType string + +const ( + // DeploymentTriggerOnImageChange will create new deployments in response to updated tags from + // a container image repository. + DeploymentTriggerOnImageChange DeploymentTriggerType = "ImageChange" + // DeploymentTriggerOnConfigChange will create new deployments in response to changes to + // the ControllerTemplate of a DeploymentConfig. + DeploymentTriggerOnConfigChange DeploymentTriggerType = "ConfigChange" +) + +// DeploymentTriggerImageChangeParams represents the parameters to the ImageChange trigger. +type DeploymentTriggerImageChangeParams struct { + // Automatic means that the detection of a new tag value should result in an image update + // inside the pod template. + Automatic bool `json:"automatic,omitempty" protobuf:"varint,1,opt,name=automatic"` + // ContainerNames is used to restrict tag updates to the specified set of container names in a pod. + // If multiple triggers point to the same containers, the resulting behavior is undefined. Future + // API versions will make this a validation error. If ContainerNames does not point to a valid container, + // the trigger will be ignored. Future API versions will make this a validation error. + ContainerNames []string `json:"containerNames,omitempty" protobuf:"bytes,2,rep,name=containerNames"` + // From is a reference to an image stream tag to watch for changes. From.Name is the only + // required subfield - if From.Namespace is blank, the namespace of the current deployment + // trigger will be used. + From corev1.ObjectReference `json:"from" protobuf:"bytes,3,opt,name=from"` + // LastTriggeredImage is the last image to be triggered. + LastTriggeredImage string `json:"lastTriggeredImage,omitempty" protobuf:"bytes,4,opt,name=lastTriggeredImage"` +} + +// DeploymentConfigStatus represents the current deployment state. +type DeploymentConfigStatus struct { + // LatestVersion is used to determine whether the current deployment associated with a deployment + // config is out of sync. + LatestVersion int64 `json:"latestVersion" protobuf:"varint,1,opt,name=latestVersion"` + // ObservedGeneration is the most recent generation observed by the deployment config controller. + ObservedGeneration int64 `json:"observedGeneration" protobuf:"varint,2,opt,name=observedGeneration"` + // Replicas is the total number of pods targeted by this deployment config. + Replicas int32 `json:"replicas" protobuf:"varint,3,opt,name=replicas"` + // UpdatedReplicas is the total number of non-terminated pods targeted by this deployment config + // that have the desired template spec. + UpdatedReplicas int32 `json:"updatedReplicas" protobuf:"varint,4,opt,name=updatedReplicas"` + // AvailableReplicas is the total number of available pods targeted by this deployment config. + AvailableReplicas int32 `json:"availableReplicas" protobuf:"varint,5,opt,name=availableReplicas"` + // UnavailableReplicas is the total number of unavailable pods targeted by this deployment config. + UnavailableReplicas int32 `json:"unavailableReplicas" protobuf:"varint,6,opt,name=unavailableReplicas"` + // Details are the reasons for the update to this deployment config. + // This could be based on a change made by the user or caused by an automatic trigger + Details *DeploymentDetails `json:"details,omitempty" protobuf:"bytes,7,opt,name=details"` + // Conditions represents the latest available observations of a deployment config's current state. + // +patchMergeKey=type + // +patchStrategy=merge + Conditions []DeploymentCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,8,rep,name=conditions"` + // Total number of ready pods targeted by this deployment. + ReadyReplicas int32 `json:"readyReplicas,omitempty" protobuf:"varint,9,opt,name=readyReplicas"` +} + +// DeploymentDetails captures information about the causes of a deployment. +type DeploymentDetails struct { + // Message is the user specified change message, if this deployment was triggered manually by the user + Message string `json:"message,omitempty" protobuf:"bytes,1,opt,name=message"` + // Causes are extended data associated with all the causes for creating a new deployment + Causes []DeploymentCause `json:"causes" protobuf:"bytes,2,rep,name=causes"` +} + +// DeploymentCause captures information about a particular cause of a deployment. +type DeploymentCause struct { + // Type of the trigger that resulted in the creation of a new deployment + Type DeploymentTriggerType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=DeploymentTriggerType"` + // ImageTrigger contains the image trigger details, if this trigger was fired based on an image change + ImageTrigger *DeploymentCauseImageTrigger `json:"imageTrigger,omitempty" protobuf:"bytes,2,opt,name=imageTrigger"` +} + +// DeploymentCauseImageTrigger represents details about the cause of a deployment originating +// from an image change trigger +type DeploymentCauseImageTrigger struct { + // From is a reference to the changed object which triggered a deployment. The field may have + // the kinds DockerImage, ImageStreamTag, or ImageStreamImage. + From corev1.ObjectReference `json:"from" protobuf:"bytes,1,opt,name=from"` +} + +type DeploymentConditionType string + +// These are valid conditions of a DeploymentConfig. +const ( + // DeploymentAvailable means the DeploymentConfig is available, ie. at least the minimum available + // replicas required (dc.spec.replicas in case the DeploymentConfig is of Recreate type, + // dc.spec.replicas - dc.spec.strategy.rollingParams.maxUnavailable in case it's Rolling) are up and + // running for at least dc.spec.minReadySeconds. + DeploymentAvailable DeploymentConditionType = "Available" + // DeploymentProgressing is: + // * True: the DeploymentConfig has been successfully deployed or is amidst getting deployed. + // The two different states can be determined by looking at the Reason of the Condition. + // For example, a complete DC will have {Status: True, Reason: NewReplicationControllerAvailable} + // and a DC in the middle of a rollout {Status: True, Reason: ReplicationControllerUpdated}. + // TODO: Represent a successfully deployed DC by using something else for Status like Unknown? + // * False: the DeploymentConfig has failed to deploy its latest version. + // + // This condition is purely informational and depends on the dc.spec.strategy.*params.timeoutSeconds + // field, which is responsible for the time in seconds to wait for a rollout before deciding that + // no progress can be made, thus the rollout is aborted. + // + // Progress for a DeploymentConfig is considered when new pods scale up or old pods scale down. + DeploymentProgressing DeploymentConditionType = "Progressing" + // DeploymentReplicaFailure is added in a deployment config when one of its pods + // fails to be created or deleted. + DeploymentReplicaFailure DeploymentConditionType = "ReplicaFailure" +) + +// DeploymentCondition describes the state of a deployment config at a certain point. +type DeploymentCondition struct { + // Type of deployment condition. + Type DeploymentConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=DeploymentConditionType"` + // Status of the condition, one of True, False, Unknown. + Status corev1.ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=k8s.io/kubernetes/pkg/api/v1.ConditionStatus"` + // The last time this condition was updated. + LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty" protobuf:"bytes,6,opt,name=lastUpdateTime"` + // The last time the condition transitioned from one status to another. + LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,3,opt,name=lastTransitionTime"` + // The reason for the condition's last transition. + Reason string `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"` + // A human readable message indicating details about the transition. + Message string `json:"message,omitempty" protobuf:"bytes,5,opt,name=message"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DeploymentConfigList is a collection of deployment configs. +type DeploymentConfigList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of deployment configs + Items []DeploymentConfig `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DeploymentConfigRollback provides the input to rollback generation. +type DeploymentConfigRollback struct { + metav1.TypeMeta `json:",inline"` + // Name of the deployment config that will be rolled back. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // UpdatedAnnotations is a set of new annotations that will be added in the deployment config. + UpdatedAnnotations map[string]string `json:"updatedAnnotations,omitempty" protobuf:"bytes,2,rep,name=updatedAnnotations"` + // Spec defines the options to rollback generation. + Spec DeploymentConfigRollbackSpec `json:"spec" protobuf:"bytes,3,opt,name=spec"` +} + +// DeploymentConfigRollbackSpec represents the options for rollback generation. +type DeploymentConfigRollbackSpec struct { + // From points to a ReplicationController which is a deployment. + From corev1.ObjectReference `json:"from" protobuf:"bytes,1,opt,name=from"` + // Revision to rollback to. If set to 0, rollback to the last revision. + Revision int64 `json:"revision,omitempty" protobuf:"varint,2,opt,name=revision"` + // IncludeTriggers specifies whether to include config Triggers. + IncludeTriggers bool `json:"includeTriggers" protobuf:"varint,3,opt,name=includeTriggers"` + // IncludeTemplate specifies whether to include the PodTemplateSpec. + IncludeTemplate bool `json:"includeTemplate" protobuf:"varint,4,opt,name=includeTemplate"` + // IncludeReplicationMeta specifies whether to include the replica count and selector. + IncludeReplicationMeta bool `json:"includeReplicationMeta" protobuf:"varint,5,opt,name=includeReplicationMeta"` + // IncludeStrategy specifies whether to include the deployment Strategy. + IncludeStrategy bool `json:"includeStrategy" protobuf:"varint,6,opt,name=includeStrategy"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DeploymentRequest is a request to a deployment config for a new deployment. +type DeploymentRequest struct { + metav1.TypeMeta `json:",inline"` + // Name of the deployment config for requesting a new deployment. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // Latest will update the deployment config with the latest state from all triggers. + Latest bool `json:"latest" protobuf:"varint,2,opt,name=latest"` + // Force will try to force a new deployment to run. If the deployment config is paused, + // then setting this to true will return an Invalid error. + Force bool `json:"force" protobuf:"varint,3,opt,name=force"` + // ExcludeTriggers instructs the instantiator to avoid processing the specified triggers. + // This field overrides the triggers from latest and allows clients to control specific + // logic. This field is ignored if not specified. + ExcludeTriggers []DeploymentTriggerType `json:"excludeTriggers,omitempty" protobuf:"bytes,4,rep,name=excludeTriggers,casttype=DeploymentTriggerType"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DeploymentLog represents the logs for a deployment +type DeploymentLog struct { + metav1.TypeMeta `json:",inline"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DeploymentLogOptions is the REST options for a deployment log +type DeploymentLogOptions struct { + metav1.TypeMeta `json:",inline"` + + // The container for which to stream logs. Defaults to only container if there is one container in the pod. + Container string `json:"container,omitempty" protobuf:"bytes,1,opt,name=container"` + // Follow if true indicates that the build log should be streamed until + // the build terminates. + Follow bool `json:"follow,omitempty" protobuf:"varint,2,opt,name=follow"` + // Return previous deployment logs. Defaults to false. + Previous bool `json:"previous,omitempty" protobuf:"varint,3,opt,name=previous"` + // A relative time in seconds before the current time from which to show logs. If this value + // precedes the time a pod was started, only logs since the pod start will be returned. + // If this value is in the future, no logs will be returned. + // Only one of sinceSeconds or sinceTime may be specified. + SinceSeconds *int64 `json:"sinceSeconds,omitempty" protobuf:"varint,4,opt,name=sinceSeconds"` + // An RFC3339 timestamp from which to show logs. If this value + // precedes the time a pod was started, only logs since the pod start will be returned. + // If this value is in the future, no logs will be returned. + // Only one of sinceSeconds or sinceTime may be specified. + SinceTime *metav1.Time `json:"sinceTime,omitempty" protobuf:"bytes,5,opt,name=sinceTime"` + // If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line + // of log output. Defaults to false. + Timestamps bool `json:"timestamps,omitempty" protobuf:"varint,6,opt,name=timestamps"` + // If set, the number of lines from the end of the logs to show. If not specified, + // logs are shown from the creation of the container or sinceSeconds or sinceTime + TailLines *int64 `json:"tailLines,omitempty" protobuf:"varint,7,opt,name=tailLines"` + // If set, the number of bytes to read from the server before terminating the + // log output. This may not display a complete final line of logging, and may return + // slightly more or slightly less than the specified limit. + LimitBytes *int64 `json:"limitBytes,omitempty" protobuf:"varint,8,opt,name=limitBytes"` + + // NoWait if true causes the call to return immediately even if the deployment + // is not available yet. Otherwise the server will wait until the deployment has started. + // TODO: Fix the tag to 'noWait' in v2 + NoWait bool `json:"nowait,omitempty" protobuf:"varint,9,opt,name=nowait"` + + // Version of the deployment for which to view logs. + Version *int64 `json:"version,omitempty" protobuf:"varint,10,opt,name=version"` +} diff --git a/vendor/github.com/openshift/api/apps/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/apps/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..f6ab2fd48d3c0 --- /dev/null +++ b/vendor/github.com/openshift/api/apps/v1/zz_generated.deepcopy.go @@ -0,0 +1,681 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + intstr "k8s.io/apimachinery/pkg/util/intstr" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomDeploymentStrategyParams) DeepCopyInto(out *CustomDeploymentStrategyParams) { + *out = *in + if in.Environment != nil { + in, out := &in.Environment, &out.Environment + *out = make([]corev1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomDeploymentStrategyParams. +func (in *CustomDeploymentStrategyParams) DeepCopy() *CustomDeploymentStrategyParams { + if in == nil { + return nil + } + out := new(CustomDeploymentStrategyParams) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentCause) DeepCopyInto(out *DeploymentCause) { + *out = *in + if in.ImageTrigger != nil { + in, out := &in.ImageTrigger, &out.ImageTrigger + *out = new(DeploymentCauseImageTrigger) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentCause. +func (in *DeploymentCause) DeepCopy() *DeploymentCause { + if in == nil { + return nil + } + out := new(DeploymentCause) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentCauseImageTrigger) DeepCopyInto(out *DeploymentCauseImageTrigger) { + *out = *in + out.From = in.From + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentCauseImageTrigger. +func (in *DeploymentCauseImageTrigger) DeepCopy() *DeploymentCauseImageTrigger { + if in == nil { + return nil + } + out := new(DeploymentCauseImageTrigger) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentCondition) DeepCopyInto(out *DeploymentCondition) { + *out = *in + in.LastUpdateTime.DeepCopyInto(&out.LastUpdateTime) + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentCondition. +func (in *DeploymentCondition) DeepCopy() *DeploymentCondition { + if in == nil { + return nil + } + out := new(DeploymentCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentConfig) DeepCopyInto(out *DeploymentConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentConfig. +func (in *DeploymentConfig) DeepCopy() *DeploymentConfig { + if in == nil { + return nil + } + out := new(DeploymentConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DeploymentConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentConfigList) DeepCopyInto(out *DeploymentConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DeploymentConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentConfigList. +func (in *DeploymentConfigList) DeepCopy() *DeploymentConfigList { + if in == nil { + return nil + } + out := new(DeploymentConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DeploymentConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentConfigRollback) DeepCopyInto(out *DeploymentConfigRollback) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.UpdatedAnnotations != nil { + in, out := &in.UpdatedAnnotations, &out.UpdatedAnnotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + out.Spec = in.Spec + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentConfigRollback. +func (in *DeploymentConfigRollback) DeepCopy() *DeploymentConfigRollback { + if in == nil { + return nil + } + out := new(DeploymentConfigRollback) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DeploymentConfigRollback) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentConfigRollbackSpec) DeepCopyInto(out *DeploymentConfigRollbackSpec) { + *out = *in + out.From = in.From + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentConfigRollbackSpec. +func (in *DeploymentConfigRollbackSpec) DeepCopy() *DeploymentConfigRollbackSpec { + if in == nil { + return nil + } + out := new(DeploymentConfigRollbackSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentConfigSpec) DeepCopyInto(out *DeploymentConfigSpec) { + *out = *in + in.Strategy.DeepCopyInto(&out.Strategy) + if in.Triggers != nil { + in, out := &in.Triggers, &out.Triggers + *out = make(DeploymentTriggerPolicies, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.RevisionHistoryLimit != nil { + in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit + *out = new(int32) + **out = **in + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = new(corev1.PodTemplateSpec) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentConfigSpec. +func (in *DeploymentConfigSpec) DeepCopy() *DeploymentConfigSpec { + if in == nil { + return nil + } + out := new(DeploymentConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentConfigStatus) DeepCopyInto(out *DeploymentConfigStatus) { + *out = *in + if in.Details != nil { + in, out := &in.Details, &out.Details + *out = new(DeploymentDetails) + (*in).DeepCopyInto(*out) + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]DeploymentCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentConfigStatus. +func (in *DeploymentConfigStatus) DeepCopy() *DeploymentConfigStatus { + if in == nil { + return nil + } + out := new(DeploymentConfigStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentDetails) DeepCopyInto(out *DeploymentDetails) { + *out = *in + if in.Causes != nil { + in, out := &in.Causes, &out.Causes + *out = make([]DeploymentCause, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentDetails. +func (in *DeploymentDetails) DeepCopy() *DeploymentDetails { + if in == nil { + return nil + } + out := new(DeploymentDetails) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentLog) DeepCopyInto(out *DeploymentLog) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentLog. +func (in *DeploymentLog) DeepCopy() *DeploymentLog { + if in == nil { + return nil + } + out := new(DeploymentLog) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DeploymentLog) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentLogOptions) DeepCopyInto(out *DeploymentLogOptions) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.SinceSeconds != nil { + in, out := &in.SinceSeconds, &out.SinceSeconds + *out = new(int64) + **out = **in + } + if in.SinceTime != nil { + in, out := &in.SinceTime, &out.SinceTime + *out = (*in).DeepCopy() + } + if in.TailLines != nil { + in, out := &in.TailLines, &out.TailLines + *out = new(int64) + **out = **in + } + if in.LimitBytes != nil { + in, out := &in.LimitBytes, &out.LimitBytes + *out = new(int64) + **out = **in + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(int64) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentLogOptions. +func (in *DeploymentLogOptions) DeepCopy() *DeploymentLogOptions { + if in == nil { + return nil + } + out := new(DeploymentLogOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DeploymentLogOptions) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentRequest) DeepCopyInto(out *DeploymentRequest) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.ExcludeTriggers != nil { + in, out := &in.ExcludeTriggers, &out.ExcludeTriggers + *out = make([]DeploymentTriggerType, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentRequest. +func (in *DeploymentRequest) DeepCopy() *DeploymentRequest { + if in == nil { + return nil + } + out := new(DeploymentRequest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DeploymentRequest) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentStrategy) DeepCopyInto(out *DeploymentStrategy) { + *out = *in + if in.CustomParams != nil { + in, out := &in.CustomParams, &out.CustomParams + *out = new(CustomDeploymentStrategyParams) + (*in).DeepCopyInto(*out) + } + if in.RecreateParams != nil { + in, out := &in.RecreateParams, &out.RecreateParams + *out = new(RecreateDeploymentStrategyParams) + (*in).DeepCopyInto(*out) + } + if in.RollingParams != nil { + in, out := &in.RollingParams, &out.RollingParams + *out = new(RollingDeploymentStrategyParams) + (*in).DeepCopyInto(*out) + } + in.Resources.DeepCopyInto(&out.Resources) + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.ActiveDeadlineSeconds != nil { + in, out := &in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds + *out = new(int64) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentStrategy. +func (in *DeploymentStrategy) DeepCopy() *DeploymentStrategy { + if in == nil { + return nil + } + out := new(DeploymentStrategy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentTriggerImageChangeParams) DeepCopyInto(out *DeploymentTriggerImageChangeParams) { + *out = *in + if in.ContainerNames != nil { + in, out := &in.ContainerNames, &out.ContainerNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + out.From = in.From + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentTriggerImageChangeParams. +func (in *DeploymentTriggerImageChangeParams) DeepCopy() *DeploymentTriggerImageChangeParams { + if in == nil { + return nil + } + out := new(DeploymentTriggerImageChangeParams) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in DeploymentTriggerPolicies) DeepCopyInto(out *DeploymentTriggerPolicies) { + { + in := &in + *out = make(DeploymentTriggerPolicies, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentTriggerPolicies. +func (in DeploymentTriggerPolicies) DeepCopy() DeploymentTriggerPolicies { + if in == nil { + return nil + } + out := new(DeploymentTriggerPolicies) + in.DeepCopyInto(out) + return *out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentTriggerPolicy) DeepCopyInto(out *DeploymentTriggerPolicy) { + *out = *in + if in.ImageChangeParams != nil { + in, out := &in.ImageChangeParams, &out.ImageChangeParams + *out = new(DeploymentTriggerImageChangeParams) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentTriggerPolicy. +func (in *DeploymentTriggerPolicy) DeepCopy() *DeploymentTriggerPolicy { + if in == nil { + return nil + } + out := new(DeploymentTriggerPolicy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExecNewPodHook) DeepCopyInto(out *ExecNewPodHook) { + *out = *in + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]corev1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecNewPodHook. +func (in *ExecNewPodHook) DeepCopy() *ExecNewPodHook { + if in == nil { + return nil + } + out := new(ExecNewPodHook) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LifecycleHook) DeepCopyInto(out *LifecycleHook) { + *out = *in + if in.ExecNewPod != nil { + in, out := &in.ExecNewPod, &out.ExecNewPod + *out = new(ExecNewPodHook) + (*in).DeepCopyInto(*out) + } + if in.TagImages != nil { + in, out := &in.TagImages, &out.TagImages + *out = make([]TagImageHook, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LifecycleHook. +func (in *LifecycleHook) DeepCopy() *LifecycleHook { + if in == nil { + return nil + } + out := new(LifecycleHook) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RecreateDeploymentStrategyParams) DeepCopyInto(out *RecreateDeploymentStrategyParams) { + *out = *in + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int64) + **out = **in + } + if in.Pre != nil { + in, out := &in.Pre, &out.Pre + *out = new(LifecycleHook) + (*in).DeepCopyInto(*out) + } + if in.Mid != nil { + in, out := &in.Mid, &out.Mid + *out = new(LifecycleHook) + (*in).DeepCopyInto(*out) + } + if in.Post != nil { + in, out := &in.Post, &out.Post + *out = new(LifecycleHook) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RecreateDeploymentStrategyParams. +func (in *RecreateDeploymentStrategyParams) DeepCopy() *RecreateDeploymentStrategyParams { + if in == nil { + return nil + } + out := new(RecreateDeploymentStrategyParams) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RollingDeploymentStrategyParams) DeepCopyInto(out *RollingDeploymentStrategyParams) { + *out = *in + if in.UpdatePeriodSeconds != nil { + in, out := &in.UpdatePeriodSeconds, &out.UpdatePeriodSeconds + *out = new(int64) + **out = **in + } + if in.IntervalSeconds != nil { + in, out := &in.IntervalSeconds, &out.IntervalSeconds + *out = new(int64) + **out = **in + } + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int64) + **out = **in + } + if in.MaxUnavailable != nil { + in, out := &in.MaxUnavailable, &out.MaxUnavailable + *out = new(intstr.IntOrString) + **out = **in + } + if in.MaxSurge != nil { + in, out := &in.MaxSurge, &out.MaxSurge + *out = new(intstr.IntOrString) + **out = **in + } + if in.Pre != nil { + in, out := &in.Pre, &out.Pre + *out = new(LifecycleHook) + (*in).DeepCopyInto(*out) + } + if in.Post != nil { + in, out := &in.Post, &out.Post + *out = new(LifecycleHook) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RollingDeploymentStrategyParams. +func (in *RollingDeploymentStrategyParams) DeepCopy() *RollingDeploymentStrategyParams { + if in == nil { + return nil + } + out := new(RollingDeploymentStrategyParams) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TagImageHook) DeepCopyInto(out *TagImageHook) { + *out = *in + out.To = in.To + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TagImageHook. +func (in *TagImageHook) DeepCopy() *TagImageHook { + if in == nil { + return nil + } + out := new(TagImageHook) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/apps/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/apps/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000000..9e3a07e8f969b --- /dev/null +++ b/vendor/github.com/openshift/api/apps/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,282 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_CustomDeploymentStrategyParams = map[string]string{ + "": "CustomDeploymentStrategyParams are the input to the Custom deployment strategy.", + "image": "Image specifies a container image which can carry out a deployment.", + "environment": "Environment holds the environment which will be given to the container for Image.", + "command": "Command is optional and overrides CMD in the container Image.", +} + +func (CustomDeploymentStrategyParams) SwaggerDoc() map[string]string { + return map_CustomDeploymentStrategyParams +} + +var map_DeploymentCause = map[string]string{ + "": "DeploymentCause captures information about a particular cause of a deployment.", + "type": "Type of the trigger that resulted in the creation of a new deployment", + "imageTrigger": "ImageTrigger contains the image trigger details, if this trigger was fired based on an image change", +} + +func (DeploymentCause) SwaggerDoc() map[string]string { + return map_DeploymentCause +} + +var map_DeploymentCauseImageTrigger = map[string]string{ + "": "DeploymentCauseImageTrigger represents details about the cause of a deployment originating from an image change trigger", + "from": "From is a reference to the changed object which triggered a deployment. The field may have the kinds DockerImage, ImageStreamTag, or ImageStreamImage.", +} + +func (DeploymentCauseImageTrigger) SwaggerDoc() map[string]string { + return map_DeploymentCauseImageTrigger +} + +var map_DeploymentCondition = map[string]string{ + "": "DeploymentCondition describes the state of a deployment config at a certain point.", + "type": "Type of deployment condition.", + "status": "Status of the condition, one of True, False, Unknown.", + "lastUpdateTime": "The last time this condition was updated.", + "lastTransitionTime": "The last time the condition transitioned from one status to another.", + "reason": "The reason for the condition's last transition.", + "message": "A human readable message indicating details about the transition.", +} + +func (DeploymentCondition) SwaggerDoc() map[string]string { + return map_DeploymentCondition +} + +var map_DeploymentConfig = map[string]string{ + "": "Deployment Configs define the template for a pod and manages deploying new images or configuration changes. A single deployment configuration is usually analogous to a single micro-service. Can support many different deployment patterns, including full restart, customizable rolling updates, and fully custom behaviors, as well as pre- and post- deployment hooks. Each individual deployment is represented as a replication controller.\n\nA deployment is \"triggered\" when its configuration is changed or a tag in an Image Stream is changed. Triggers can be disabled to allow manual control over a deployment. The \"strategy\" determines how the deployment is carried out and may be changed at any time. The `latestVersion` field is updated when a new deployment is triggered by any means.", + "spec": "Spec represents a desired deployment state and how to deploy to it.", + "status": "Status represents the current deployment state.", +} + +func (DeploymentConfig) SwaggerDoc() map[string]string { + return map_DeploymentConfig +} + +var map_DeploymentConfigList = map[string]string{ + "": "DeploymentConfigList is a collection of deployment configs.", + "items": "Items is a list of deployment configs", +} + +func (DeploymentConfigList) SwaggerDoc() map[string]string { + return map_DeploymentConfigList +} + +var map_DeploymentConfigRollback = map[string]string{ + "": "DeploymentConfigRollback provides the input to rollback generation.", + "name": "Name of the deployment config that will be rolled back.", + "updatedAnnotations": "UpdatedAnnotations is a set of new annotations that will be added in the deployment config.", + "spec": "Spec defines the options to rollback generation.", +} + +func (DeploymentConfigRollback) SwaggerDoc() map[string]string { + return map_DeploymentConfigRollback +} + +var map_DeploymentConfigRollbackSpec = map[string]string{ + "": "DeploymentConfigRollbackSpec represents the options for rollback generation.", + "from": "From points to a ReplicationController which is a deployment.", + "revision": "Revision to rollback to. If set to 0, rollback to the last revision.", + "includeTriggers": "IncludeTriggers specifies whether to include config Triggers.", + "includeTemplate": "IncludeTemplate specifies whether to include the PodTemplateSpec.", + "includeReplicationMeta": "IncludeReplicationMeta specifies whether to include the replica count and selector.", + "includeStrategy": "IncludeStrategy specifies whether to include the deployment Strategy.", +} + +func (DeploymentConfigRollbackSpec) SwaggerDoc() map[string]string { + return map_DeploymentConfigRollbackSpec +} + +var map_DeploymentConfigSpec = map[string]string{ + "": "DeploymentConfigSpec represents the desired state of the deployment.", + "strategy": "Strategy describes how a deployment is executed.", + "minReadySeconds": "MinReadySeconds is the minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", + "triggers": "Triggers determine how updates to a DeploymentConfig result in new deployments. If no triggers are defined, a new deployment can only occur as a result of an explicit client update to the DeploymentConfig with a new LatestVersion. If null, defaults to having a config change trigger.", + "replicas": "Replicas is the number of desired replicas.", + "revisionHistoryLimit": "RevisionHistoryLimit is the number of old ReplicationControllers to retain to allow for rollbacks. This field is a pointer to allow for differentiation between an explicit zero and not specified. Defaults to 10. (This only applies to DeploymentConfigs created via the new group API resource, not the legacy resource.)", + "test": "Test ensures that this deployment config will have zero replicas except while a deployment is running. This allows the deployment config to be used as a continuous deployment test - triggering on images, running the deployment, and then succeeding or failing. Post strategy hooks and After actions can be used to integrate successful deployment with an action.", + "paused": "Paused indicates that the deployment config is paused resulting in no new deployments on template changes or changes in the template caused by other triggers.", + "selector": "Selector is a label query over pods that should match the Replicas count.", + "template": "Template is the object that describes the pod that will be created if insufficient replicas are detected.", +} + +func (DeploymentConfigSpec) SwaggerDoc() map[string]string { + return map_DeploymentConfigSpec +} + +var map_DeploymentConfigStatus = map[string]string{ + "": "DeploymentConfigStatus represents the current deployment state.", + "latestVersion": "LatestVersion is used to determine whether the current deployment associated with a deployment config is out of sync.", + "observedGeneration": "ObservedGeneration is the most recent generation observed by the deployment config controller.", + "replicas": "Replicas is the total number of pods targeted by this deployment config.", + "updatedReplicas": "UpdatedReplicas is the total number of non-terminated pods targeted by this deployment config that have the desired template spec.", + "availableReplicas": "AvailableReplicas is the total number of available pods targeted by this deployment config.", + "unavailableReplicas": "UnavailableReplicas is the total number of unavailable pods targeted by this deployment config.", + "details": "Details are the reasons for the update to this deployment config. This could be based on a change made by the user or caused by an automatic trigger", + "conditions": "Conditions represents the latest available observations of a deployment config's current state.", + "readyReplicas": "Total number of ready pods targeted by this deployment.", +} + +func (DeploymentConfigStatus) SwaggerDoc() map[string]string { + return map_DeploymentConfigStatus +} + +var map_DeploymentDetails = map[string]string{ + "": "DeploymentDetails captures information about the causes of a deployment.", + "message": "Message is the user specified change message, if this deployment was triggered manually by the user", + "causes": "Causes are extended data associated with all the causes for creating a new deployment", +} + +func (DeploymentDetails) SwaggerDoc() map[string]string { + return map_DeploymentDetails +} + +var map_DeploymentLog = map[string]string{ + "": "DeploymentLog represents the logs for a deployment", +} + +func (DeploymentLog) SwaggerDoc() map[string]string { + return map_DeploymentLog +} + +var map_DeploymentLogOptions = map[string]string{ + "": "DeploymentLogOptions is the REST options for a deployment log", + "container": "The container for which to stream logs. Defaults to only container if there is one container in the pod.", + "follow": "Follow if true indicates that the build log should be streamed until the build terminates.", + "previous": "Return previous deployment logs. Defaults to false.", + "sinceSeconds": "A relative time in seconds before the current time from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.", + "sinceTime": "An RFC3339 timestamp from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.", + "timestamps": "If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false.", + "tailLines": "If set, the number of lines from the end of the logs to show. If not specified, logs are shown from the creation of the container or sinceSeconds or sinceTime", + "limitBytes": "If set, the number of bytes to read from the server before terminating the log output. This may not display a complete final line of logging, and may return slightly more or slightly less than the specified limit.", + "nowait": "NoWait if true causes the call to return immediately even if the deployment is not available yet. Otherwise the server will wait until the deployment has started.", + "version": "Version of the deployment for which to view logs.", +} + +func (DeploymentLogOptions) SwaggerDoc() map[string]string { + return map_DeploymentLogOptions +} + +var map_DeploymentRequest = map[string]string{ + "": "DeploymentRequest is a request to a deployment config for a new deployment.", + "name": "Name of the deployment config for requesting a new deployment.", + "latest": "Latest will update the deployment config with the latest state from all triggers.", + "force": "Force will try to force a new deployment to run. If the deployment config is paused, then setting this to true will return an Invalid error.", + "excludeTriggers": "ExcludeTriggers instructs the instantiator to avoid processing the specified triggers. This field overrides the triggers from latest and allows clients to control specific logic. This field is ignored if not specified.", +} + +func (DeploymentRequest) SwaggerDoc() map[string]string { + return map_DeploymentRequest +} + +var map_DeploymentStrategy = map[string]string{ + "": "DeploymentStrategy describes how to perform a deployment.", + "type": "Type is the name of a deployment strategy.", + "customParams": "CustomParams are the input to the Custom deployment strategy, and may also be specified for the Recreate and Rolling strategies to customize the execution process that runs the deployment.", + "recreateParams": "RecreateParams are the input to the Recreate deployment strategy.", + "rollingParams": "RollingParams are the input to the Rolling deployment strategy.", + "resources": "Resources contains resource requirements to execute the deployment and any hooks.", + "labels": "Labels is a set of key, value pairs added to custom deployer and lifecycle pre/post hook pods.", + "annotations": "Annotations is a set of key, value pairs added to custom deployer and lifecycle pre/post hook pods.", + "activeDeadlineSeconds": "ActiveDeadlineSeconds is the duration in seconds that the deployer pods for this deployment config may be active on a node before the system actively tries to terminate them.", +} + +func (DeploymentStrategy) SwaggerDoc() map[string]string { + return map_DeploymentStrategy +} + +var map_DeploymentTriggerImageChangeParams = map[string]string{ + "": "DeploymentTriggerImageChangeParams represents the parameters to the ImageChange trigger.", + "automatic": "Automatic means that the detection of a new tag value should result in an image update inside the pod template.", + "containerNames": "ContainerNames is used to restrict tag updates to the specified set of container names in a pod. If multiple triggers point to the same containers, the resulting behavior is undefined. Future API versions will make this a validation error. If ContainerNames does not point to a valid container, the trigger will be ignored. Future API versions will make this a validation error.", + "from": "From is a reference to an image stream tag to watch for changes. From.Name is the only required subfield - if From.Namespace is blank, the namespace of the current deployment trigger will be used.", + "lastTriggeredImage": "LastTriggeredImage is the last image to be triggered.", +} + +func (DeploymentTriggerImageChangeParams) SwaggerDoc() map[string]string { + return map_DeploymentTriggerImageChangeParams +} + +var map_DeploymentTriggerPolicy = map[string]string{ + "": "DeploymentTriggerPolicy describes a policy for a single trigger that results in a new deployment.", + "type": "Type of the trigger", + "imageChangeParams": "ImageChangeParams represents the parameters for the ImageChange trigger.", +} + +func (DeploymentTriggerPolicy) SwaggerDoc() map[string]string { + return map_DeploymentTriggerPolicy +} + +var map_ExecNewPodHook = map[string]string{ + "": "ExecNewPodHook is a hook implementation which runs a command in a new pod based on the specified container which is assumed to be part of the deployment template.", + "command": "Command is the action command and its arguments.", + "env": "Env is a set of environment variables to supply to the hook pod's container.", + "containerName": "ContainerName is the name of a container in the deployment pod template whose container image will be used for the hook pod's container.", + "volumes": "Volumes is a list of named volumes from the pod template which should be copied to the hook pod. Volumes names not found in pod spec are ignored. An empty list means no volumes will be copied.", +} + +func (ExecNewPodHook) SwaggerDoc() map[string]string { + return map_ExecNewPodHook +} + +var map_LifecycleHook = map[string]string{ + "": "LifecycleHook defines a specific deployment lifecycle action. Only one type of action may be specified at any time.", + "failurePolicy": "FailurePolicy specifies what action to take if the hook fails.", + "execNewPod": "ExecNewPod specifies the options for a lifecycle hook backed by a pod.", + "tagImages": "TagImages instructs the deployer to tag the current image referenced under a container onto an image stream tag.", +} + +func (LifecycleHook) SwaggerDoc() map[string]string { + return map_LifecycleHook +} + +var map_RecreateDeploymentStrategyParams = map[string]string{ + "": "RecreateDeploymentStrategyParams are the input to the Recreate deployment strategy.", + "timeoutSeconds": "TimeoutSeconds is the time to wait for updates before giving up. If the value is nil, a default will be used.", + "pre": "Pre is a lifecycle hook which is executed before the strategy manipulates the deployment. All LifecycleHookFailurePolicy values are supported.", + "mid": "Mid is a lifecycle hook which is executed while the deployment is scaled down to zero before the first new pod is created. All LifecycleHookFailurePolicy values are supported.", + "post": "Post is a lifecycle hook which is executed after the strategy has finished all deployment logic. All LifecycleHookFailurePolicy values are supported.", +} + +func (RecreateDeploymentStrategyParams) SwaggerDoc() map[string]string { + return map_RecreateDeploymentStrategyParams +} + +var map_RollingDeploymentStrategyParams = map[string]string{ + "": "RollingDeploymentStrategyParams are the input to the Rolling deployment strategy.", + "updatePeriodSeconds": "UpdatePeriodSeconds is the time to wait between individual pod updates. If the value is nil, a default will be used.", + "intervalSeconds": "IntervalSeconds is the time to wait between polling deployment status after update. If the value is nil, a default will be used.", + "timeoutSeconds": "TimeoutSeconds is the time to wait for updates before giving up. If the value is nil, a default will be used.", + "maxUnavailable": "MaxUnavailable is the maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total pods at the start of update (ex: 10%). Absolute number is calculated from percentage by rounding down.\n\nThis cannot be 0 if MaxSurge is 0. By default, 25% is used.\n\nExample: when this is set to 30%, the old RC can be scaled down by 30% immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that at least 70% of original number of pods are available at all times during the update.", + "maxSurge": "MaxSurge is the maximum number of pods that can be scheduled above the original number of pods. Value can be an absolute number (ex: 5) or a percentage of total pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up.\n\nThis cannot be 0 if MaxUnavailable is 0. By default, 25% is used.\n\nExample: when this is set to 30%, the new RC can be scaled up by 30% immediately when the rolling update starts. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of original pods.", + "pre": "Pre is a lifecycle hook which is executed before the deployment process begins. All LifecycleHookFailurePolicy values are supported.", + "post": "Post is a lifecycle hook which is executed after the strategy has finished all deployment logic. All LifecycleHookFailurePolicy values are supported.", +} + +func (RollingDeploymentStrategyParams) SwaggerDoc() map[string]string { + return map_RollingDeploymentStrategyParams +} + +var map_TagImageHook = map[string]string{ + "": "TagImageHook is a request to tag the image in a particular container onto an ImageStreamTag.", + "containerName": "ContainerName is the name of a container in the deployment config whose image value will be used as the source of the tag. If there is only a single container this value will be defaulted to the name of that container.", + "to": "To is the target ImageStreamTag to set the container's image onto.", +} + +func (TagImageHook) SwaggerDoc() map[string]string { + return map_TagImageHook +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/authorization/v1/0000_03_authorization-openshift_01_rolebindingrestriction.crd.yaml b/vendor/github.com/openshift/api/authorization/v1/0000_03_authorization-openshift_01_rolebindingrestriction.crd.yaml new file mode 100644 index 0000000000000..5fbc03c98b146 --- /dev/null +++ b/vendor/github.com/openshift/api/authorization/v1/0000_03_authorization-openshift_01_rolebindingrestriction.crd.yaml @@ -0,0 +1,207 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: rolebindingrestrictions.authorization.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: authorization.openshift.io + names: + kind: RoleBindingRestriction + listKind: RoleBindingRestrictionList + plural: rolebindingrestrictions + singular: rolebindingrestriction + scope: Namespaced + preserveUnknownFields: false + versions: + - name: v1 + served: true + storage: true + "validation": + "openAPIV3Schema": + description: RoleBindingRestriction is an object that can be matched against + a subject (user, group, or service account) to determine whether rolebindings + on that subject are allowed in the namespace to which the RoleBindingRestriction + belongs. If any one of those RoleBindingRestriction objects matches a subject, + rolebindings on that subject in the namespace are allowed. + type: object + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec defines the matcher. + type: object + properties: + grouprestriction: + description: GroupRestriction matches against group subjects. + type: object + properties: + groups: + description: Groups is a list of groups used to match against an + individual user's groups. If the user is a member of one of the + whitelisted groups, the user is allowed to be bound to a role. + type: array + items: + type: string + nullable: true + labels: + description: Selectors specifies a list of label selectors over + group labels. + type: array + items: + description: A label selector is a label query over a set of resources. + The result of matchLabels and matchExpressions are ANDed. An + empty label selector matches all objects. A null label selector + matches no objects. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If + the operator is In or NotIn, the values array must + be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced + during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A + single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is "key", + the operator is "In", and the values array contains only + "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + nullable: true + nullable: true + serviceaccountrestriction: + description: ServiceAccountRestriction matches against service-account + subjects. + type: object + properties: + namespaces: + description: Namespaces specifies a list of literal namespace names. + type: array + items: + type: string + serviceaccounts: + description: ServiceAccounts specifies a list of literal service-account + names. + type: array + items: + description: ServiceAccountReference specifies a service account + and namespace by their names. + type: object + properties: + name: + description: Name is the name of the service account. + type: string + namespace: + description: Namespace is the namespace of the service account. Service + accounts from inside the whitelisted namespaces are allowed + to be bound to roles. If Namespace is empty, then the namespace + of the RoleBindingRestriction in which the ServiceAccountReference + is embedded is used. + type: string + nullable: true + userrestriction: + description: UserRestriction matches against user subjects. + type: object + properties: + groups: + description: Groups specifies a list of literal group names. + type: array + items: + type: string + nullable: true + labels: + description: Selectors specifies a list of label selectors over + user labels. + type: array + items: + description: A label selector is a label query over a set of resources. + The result of matchLabels and matchExpressions are ANDed. An + empty label selector matches all objects. A null label selector + matches no objects. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If + the operator is In or NotIn, the values array must + be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced + during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A + single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is "key", + the operator is "In", and the values array contains only + "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + nullable: true + users: + description: Users specifies a list of literal user names. + type: array + items: + type: string + nullable: true diff --git a/vendor/github.com/openshift/api/authorization/v1/codec.go b/vendor/github.com/openshift/api/authorization/v1/codec.go new file mode 100644 index 0000000000000..61f1f9f514666 --- /dev/null +++ b/vendor/github.com/openshift/api/authorization/v1/codec.go @@ -0,0 +1,139 @@ +package v1 + +import ( + "github.com/openshift/api/pkg/serialization" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +var _ runtime.NestedObjectDecoder = &PolicyRule{} +var _ runtime.NestedObjectEncoder = &PolicyRule{} + +func (c *PolicyRule) DecodeNestedObjects(d runtime.Decoder) error { + // decoding failures result in a runtime.Unknown object being created in Object and passed + // to conversion + serialization.DecodeNestedRawExtensionOrUnknown(d, &c.AttributeRestrictions) + return nil +} +func (c *PolicyRule) EncodeNestedObjects(e runtime.Encoder) error { + return serialization.EncodeNestedRawExtension(e, &c.AttributeRestrictions) +} + +var _ runtime.NestedObjectDecoder = &SelfSubjectRulesReview{} +var _ runtime.NestedObjectEncoder = &SelfSubjectRulesReview{} + +func (c *SelfSubjectRulesReview) DecodeNestedObjects(d runtime.Decoder) error { + // decoding failures result in a runtime.Unknown object being created in Object and passed + // to conversion + for i := range c.Status.Rules { + c.Status.Rules[i].DecodeNestedObjects(d) + } + return nil +} +func (c *SelfSubjectRulesReview) EncodeNestedObjects(e runtime.Encoder) error { + for i := range c.Status.Rules { + if err := c.Status.Rules[i].EncodeNestedObjects(e); err != nil { + return err + } + } + return nil +} + +var _ runtime.NestedObjectDecoder = &SubjectRulesReview{} +var _ runtime.NestedObjectEncoder = &SubjectRulesReview{} + +func (c *SubjectRulesReview) DecodeNestedObjects(d runtime.Decoder) error { + // decoding failures result in a runtime.Unknown object being created in Object and passed + // to conversion + for i := range c.Status.Rules { + c.Status.Rules[i].DecodeNestedObjects(d) + } + return nil +} +func (c *SubjectRulesReview) EncodeNestedObjects(e runtime.Encoder) error { + for i := range c.Status.Rules { + if err := c.Status.Rules[i].EncodeNestedObjects(e); err != nil { + return err + } + } + return nil +} + +var _ runtime.NestedObjectDecoder = &ClusterRole{} +var _ runtime.NestedObjectEncoder = &ClusterRole{} + +func (c *ClusterRole) DecodeNestedObjects(d runtime.Decoder) error { + // decoding failures result in a runtime.Unknown object being created in Object and passed + // to conversion + for i := range c.Rules { + c.Rules[i].DecodeNestedObjects(d) + } + return nil +} +func (c *ClusterRole) EncodeNestedObjects(e runtime.Encoder) error { + for i := range c.Rules { + if err := c.Rules[i].EncodeNestedObjects(e); err != nil { + return err + } + } + return nil +} + +var _ runtime.NestedObjectDecoder = &Role{} +var _ runtime.NestedObjectEncoder = &Role{} + +func (c *Role) DecodeNestedObjects(d runtime.Decoder) error { + // decoding failures result in a runtime.Unknown object being created in Object and passed + // to conversion + for i := range c.Rules { + c.Rules[i].DecodeNestedObjects(d) + } + return nil +} +func (c *Role) EncodeNestedObjects(e runtime.Encoder) error { + for i := range c.Rules { + if err := c.Rules[i].EncodeNestedObjects(e); err != nil { + return err + } + } + return nil +} + +var _ runtime.NestedObjectDecoder = &ClusterRoleList{} +var _ runtime.NestedObjectEncoder = &ClusterRoleList{} + +func (c *ClusterRoleList) DecodeNestedObjects(d runtime.Decoder) error { + // decoding failures result in a runtime.Unknown object being created in Object and passed + // to conversion + for i := range c.Items { + c.Items[i].DecodeNestedObjects(d) + } + return nil +} +func (c *ClusterRoleList) EncodeNestedObjects(e runtime.Encoder) error { + for i := range c.Items { + if err := c.Items[i].EncodeNestedObjects(e); err != nil { + return err + } + } + return nil +} + +var _ runtime.NestedObjectDecoder = &RoleList{} +var _ runtime.NestedObjectEncoder = &RoleList{} + +func (c *RoleList) DecodeNestedObjects(d runtime.Decoder) error { + // decoding failures result in a runtime.Unknown object being created in Object and passed + // to conversion + for i := range c.Items { + c.Items[i].DecodeNestedObjects(d) + } + return nil +} +func (c *RoleList) EncodeNestedObjects(e runtime.Encoder) error { + for i := range c.Items { + if err := c.Items[i].EncodeNestedObjects(e); err != nil { + return err + } + } + return nil +} diff --git a/vendor/github.com/openshift/api/authorization/v1/doc.go b/vendor/github.com/openshift/api/authorization/v1/doc.go new file mode 100644 index 0000000000000..a66741dce6b5d --- /dev/null +++ b/vendor/github.com/openshift/api/authorization/v1/doc.go @@ -0,0 +1,9 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=github.com/openshift/origin/pkg/authorization/apis/authorization +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +kubebuilder:validation:Optional +// +groupName=authorization.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/authorization/v1/generated.pb.go b/vendor/github.com/openshift/api/authorization/v1/generated.pb.go new file mode 100644 index 0000000000000..d8c343a092ab9 --- /dev/null +++ b/vendor/github.com/openshift/api/authorization/v1/generated.pb.go @@ -0,0 +1,8917 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: github.com/openshift/api/authorization/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + v12 "k8s.io/api/core/v1" + v11 "k8s.io/api/rbac/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *Action) Reset() { *m = Action{} } +func (*Action) ProtoMessage() {} +func (*Action) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{0} +} +func (m *Action) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Action) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Action) XXX_Merge(src proto.Message) { + xxx_messageInfo_Action.Merge(m, src) +} +func (m *Action) XXX_Size() int { + return m.Size() +} +func (m *Action) XXX_DiscardUnknown() { + xxx_messageInfo_Action.DiscardUnknown(m) +} + +var xxx_messageInfo_Action proto.InternalMessageInfo + +func (m *ClusterRole) Reset() { *m = ClusterRole{} } +func (*ClusterRole) ProtoMessage() {} +func (*ClusterRole) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{1} +} +func (m *ClusterRole) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRole) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRole) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRole.Merge(m, src) +} +func (m *ClusterRole) XXX_Size() int { + return m.Size() +} +func (m *ClusterRole) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRole.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRole proto.InternalMessageInfo + +func (m *ClusterRoleBinding) Reset() { *m = ClusterRoleBinding{} } +func (*ClusterRoleBinding) ProtoMessage() {} +func (*ClusterRoleBinding) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{2} +} +func (m *ClusterRoleBinding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRoleBinding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRoleBinding) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRoleBinding.Merge(m, src) +} +func (m *ClusterRoleBinding) XXX_Size() int { + return m.Size() +} +func (m *ClusterRoleBinding) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRoleBinding.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRoleBinding proto.InternalMessageInfo + +func (m *ClusterRoleBindingList) Reset() { *m = ClusterRoleBindingList{} } +func (*ClusterRoleBindingList) ProtoMessage() {} +func (*ClusterRoleBindingList) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{3} +} +func (m *ClusterRoleBindingList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRoleBindingList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRoleBindingList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRoleBindingList.Merge(m, src) +} +func (m *ClusterRoleBindingList) XXX_Size() int { + return m.Size() +} +func (m *ClusterRoleBindingList) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRoleBindingList.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRoleBindingList proto.InternalMessageInfo + +func (m *ClusterRoleList) Reset() { *m = ClusterRoleList{} } +func (*ClusterRoleList) ProtoMessage() {} +func (*ClusterRoleList) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{4} +} +func (m *ClusterRoleList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRoleList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRoleList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRoleList.Merge(m, src) +} +func (m *ClusterRoleList) XXX_Size() int { + return m.Size() +} +func (m *ClusterRoleList) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRoleList.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRoleList proto.InternalMessageInfo + +func (m *GroupRestriction) Reset() { *m = GroupRestriction{} } +func (*GroupRestriction) ProtoMessage() {} +func (*GroupRestriction) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{5} +} +func (m *GroupRestriction) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GroupRestriction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GroupRestriction) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupRestriction.Merge(m, src) +} +func (m *GroupRestriction) XXX_Size() int { + return m.Size() +} +func (m *GroupRestriction) XXX_DiscardUnknown() { + xxx_messageInfo_GroupRestriction.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupRestriction proto.InternalMessageInfo + +func (m *IsPersonalSubjectAccessReview) Reset() { *m = IsPersonalSubjectAccessReview{} } +func (*IsPersonalSubjectAccessReview) ProtoMessage() {} +func (*IsPersonalSubjectAccessReview) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{6} +} +func (m *IsPersonalSubjectAccessReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IsPersonalSubjectAccessReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IsPersonalSubjectAccessReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_IsPersonalSubjectAccessReview.Merge(m, src) +} +func (m *IsPersonalSubjectAccessReview) XXX_Size() int { + return m.Size() +} +func (m *IsPersonalSubjectAccessReview) XXX_DiscardUnknown() { + xxx_messageInfo_IsPersonalSubjectAccessReview.DiscardUnknown(m) +} + +var xxx_messageInfo_IsPersonalSubjectAccessReview proto.InternalMessageInfo + +func (m *LocalResourceAccessReview) Reset() { *m = LocalResourceAccessReview{} } +func (*LocalResourceAccessReview) ProtoMessage() {} +func (*LocalResourceAccessReview) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{7} +} +func (m *LocalResourceAccessReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LocalResourceAccessReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LocalResourceAccessReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_LocalResourceAccessReview.Merge(m, src) +} +func (m *LocalResourceAccessReview) XXX_Size() int { + return m.Size() +} +func (m *LocalResourceAccessReview) XXX_DiscardUnknown() { + xxx_messageInfo_LocalResourceAccessReview.DiscardUnknown(m) +} + +var xxx_messageInfo_LocalResourceAccessReview proto.InternalMessageInfo + +func (m *LocalSubjectAccessReview) Reset() { *m = LocalSubjectAccessReview{} } +func (*LocalSubjectAccessReview) ProtoMessage() {} +func (*LocalSubjectAccessReview) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{8} +} +func (m *LocalSubjectAccessReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LocalSubjectAccessReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LocalSubjectAccessReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_LocalSubjectAccessReview.Merge(m, src) +} +func (m *LocalSubjectAccessReview) XXX_Size() int { + return m.Size() +} +func (m *LocalSubjectAccessReview) XXX_DiscardUnknown() { + xxx_messageInfo_LocalSubjectAccessReview.DiscardUnknown(m) +} + +var xxx_messageInfo_LocalSubjectAccessReview proto.InternalMessageInfo + +func (m *NamedClusterRole) Reset() { *m = NamedClusterRole{} } +func (*NamedClusterRole) ProtoMessage() {} +func (*NamedClusterRole) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{9} +} +func (m *NamedClusterRole) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NamedClusterRole) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NamedClusterRole) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamedClusterRole.Merge(m, src) +} +func (m *NamedClusterRole) XXX_Size() int { + return m.Size() +} +func (m *NamedClusterRole) XXX_DiscardUnknown() { + xxx_messageInfo_NamedClusterRole.DiscardUnknown(m) +} + +var xxx_messageInfo_NamedClusterRole proto.InternalMessageInfo + +func (m *NamedClusterRoleBinding) Reset() { *m = NamedClusterRoleBinding{} } +func (*NamedClusterRoleBinding) ProtoMessage() {} +func (*NamedClusterRoleBinding) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{10} +} +func (m *NamedClusterRoleBinding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NamedClusterRoleBinding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NamedClusterRoleBinding) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamedClusterRoleBinding.Merge(m, src) +} +func (m *NamedClusterRoleBinding) XXX_Size() int { + return m.Size() +} +func (m *NamedClusterRoleBinding) XXX_DiscardUnknown() { + xxx_messageInfo_NamedClusterRoleBinding.DiscardUnknown(m) +} + +var xxx_messageInfo_NamedClusterRoleBinding proto.InternalMessageInfo + +func (m *NamedRole) Reset() { *m = NamedRole{} } +func (*NamedRole) ProtoMessage() {} +func (*NamedRole) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{11} +} +func (m *NamedRole) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NamedRole) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NamedRole) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamedRole.Merge(m, src) +} +func (m *NamedRole) XXX_Size() int { + return m.Size() +} +func (m *NamedRole) XXX_DiscardUnknown() { + xxx_messageInfo_NamedRole.DiscardUnknown(m) +} + +var xxx_messageInfo_NamedRole proto.InternalMessageInfo + +func (m *NamedRoleBinding) Reset() { *m = NamedRoleBinding{} } +func (*NamedRoleBinding) ProtoMessage() {} +func (*NamedRoleBinding) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{12} +} +func (m *NamedRoleBinding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NamedRoleBinding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NamedRoleBinding) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamedRoleBinding.Merge(m, src) +} +func (m *NamedRoleBinding) XXX_Size() int { + return m.Size() +} +func (m *NamedRoleBinding) XXX_DiscardUnknown() { + xxx_messageInfo_NamedRoleBinding.DiscardUnknown(m) +} + +var xxx_messageInfo_NamedRoleBinding proto.InternalMessageInfo + +func (m *OptionalNames) Reset() { *m = OptionalNames{} } +func (*OptionalNames) ProtoMessage() {} +func (*OptionalNames) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{13} +} +func (m *OptionalNames) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OptionalNames) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OptionalNames) XXX_Merge(src proto.Message) { + xxx_messageInfo_OptionalNames.Merge(m, src) +} +func (m *OptionalNames) XXX_Size() int { + return m.Size() +} +func (m *OptionalNames) XXX_DiscardUnknown() { + xxx_messageInfo_OptionalNames.DiscardUnknown(m) +} + +var xxx_messageInfo_OptionalNames proto.InternalMessageInfo + +func (m *OptionalScopes) Reset() { *m = OptionalScopes{} } +func (*OptionalScopes) ProtoMessage() {} +func (*OptionalScopes) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{14} +} +func (m *OptionalScopes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OptionalScopes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OptionalScopes) XXX_Merge(src proto.Message) { + xxx_messageInfo_OptionalScopes.Merge(m, src) +} +func (m *OptionalScopes) XXX_Size() int { + return m.Size() +} +func (m *OptionalScopes) XXX_DiscardUnknown() { + xxx_messageInfo_OptionalScopes.DiscardUnknown(m) +} + +var xxx_messageInfo_OptionalScopes proto.InternalMessageInfo + +func (m *PolicyRule) Reset() { *m = PolicyRule{} } +func (*PolicyRule) ProtoMessage() {} +func (*PolicyRule) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{15} +} +func (m *PolicyRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PolicyRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PolicyRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_PolicyRule.Merge(m, src) +} +func (m *PolicyRule) XXX_Size() int { + return m.Size() +} +func (m *PolicyRule) XXX_DiscardUnknown() { + xxx_messageInfo_PolicyRule.DiscardUnknown(m) +} + +var xxx_messageInfo_PolicyRule proto.InternalMessageInfo + +func (m *ResourceAccessReview) Reset() { *m = ResourceAccessReview{} } +func (*ResourceAccessReview) ProtoMessage() {} +func (*ResourceAccessReview) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{16} +} +func (m *ResourceAccessReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceAccessReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ResourceAccessReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceAccessReview.Merge(m, src) +} +func (m *ResourceAccessReview) XXX_Size() int { + return m.Size() +} +func (m *ResourceAccessReview) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceAccessReview.DiscardUnknown(m) +} + +var xxx_messageInfo_ResourceAccessReview proto.InternalMessageInfo + +func (m *ResourceAccessReviewResponse) Reset() { *m = ResourceAccessReviewResponse{} } +func (*ResourceAccessReviewResponse) ProtoMessage() {} +func (*ResourceAccessReviewResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{17} +} +func (m *ResourceAccessReviewResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceAccessReviewResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ResourceAccessReviewResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceAccessReviewResponse.Merge(m, src) +} +func (m *ResourceAccessReviewResponse) XXX_Size() int { + return m.Size() +} +func (m *ResourceAccessReviewResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceAccessReviewResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ResourceAccessReviewResponse proto.InternalMessageInfo + +func (m *Role) Reset() { *m = Role{} } +func (*Role) ProtoMessage() {} +func (*Role) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{18} +} +func (m *Role) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Role) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Role) XXX_Merge(src proto.Message) { + xxx_messageInfo_Role.Merge(m, src) +} +func (m *Role) XXX_Size() int { + return m.Size() +} +func (m *Role) XXX_DiscardUnknown() { + xxx_messageInfo_Role.DiscardUnknown(m) +} + +var xxx_messageInfo_Role proto.InternalMessageInfo + +func (m *RoleBinding) Reset() { *m = RoleBinding{} } +func (*RoleBinding) ProtoMessage() {} +func (*RoleBinding) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{19} +} +func (m *RoleBinding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleBinding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleBinding) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleBinding.Merge(m, src) +} +func (m *RoleBinding) XXX_Size() int { + return m.Size() +} +func (m *RoleBinding) XXX_DiscardUnknown() { + xxx_messageInfo_RoleBinding.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleBinding proto.InternalMessageInfo + +func (m *RoleBindingList) Reset() { *m = RoleBindingList{} } +func (*RoleBindingList) ProtoMessage() {} +func (*RoleBindingList) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{20} +} +func (m *RoleBindingList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleBindingList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleBindingList) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleBindingList.Merge(m, src) +} +func (m *RoleBindingList) XXX_Size() int { + return m.Size() +} +func (m *RoleBindingList) XXX_DiscardUnknown() { + xxx_messageInfo_RoleBindingList.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleBindingList proto.InternalMessageInfo + +func (m *RoleBindingRestriction) Reset() { *m = RoleBindingRestriction{} } +func (*RoleBindingRestriction) ProtoMessage() {} +func (*RoleBindingRestriction) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{21} +} +func (m *RoleBindingRestriction) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleBindingRestriction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleBindingRestriction) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleBindingRestriction.Merge(m, src) +} +func (m *RoleBindingRestriction) XXX_Size() int { + return m.Size() +} +func (m *RoleBindingRestriction) XXX_DiscardUnknown() { + xxx_messageInfo_RoleBindingRestriction.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleBindingRestriction proto.InternalMessageInfo + +func (m *RoleBindingRestrictionList) Reset() { *m = RoleBindingRestrictionList{} } +func (*RoleBindingRestrictionList) ProtoMessage() {} +func (*RoleBindingRestrictionList) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{22} +} +func (m *RoleBindingRestrictionList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleBindingRestrictionList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleBindingRestrictionList) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleBindingRestrictionList.Merge(m, src) +} +func (m *RoleBindingRestrictionList) XXX_Size() int { + return m.Size() +} +func (m *RoleBindingRestrictionList) XXX_DiscardUnknown() { + xxx_messageInfo_RoleBindingRestrictionList.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleBindingRestrictionList proto.InternalMessageInfo + +func (m *RoleBindingRestrictionSpec) Reset() { *m = RoleBindingRestrictionSpec{} } +func (*RoleBindingRestrictionSpec) ProtoMessage() {} +func (*RoleBindingRestrictionSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{23} +} +func (m *RoleBindingRestrictionSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleBindingRestrictionSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleBindingRestrictionSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleBindingRestrictionSpec.Merge(m, src) +} +func (m *RoleBindingRestrictionSpec) XXX_Size() int { + return m.Size() +} +func (m *RoleBindingRestrictionSpec) XXX_DiscardUnknown() { + xxx_messageInfo_RoleBindingRestrictionSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleBindingRestrictionSpec proto.InternalMessageInfo + +func (m *RoleList) Reset() { *m = RoleList{} } +func (*RoleList) ProtoMessage() {} +func (*RoleList) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{24} +} +func (m *RoleList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoleList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoleList) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoleList.Merge(m, src) +} +func (m *RoleList) XXX_Size() int { + return m.Size() +} +func (m *RoleList) XXX_DiscardUnknown() { + xxx_messageInfo_RoleList.DiscardUnknown(m) +} + +var xxx_messageInfo_RoleList proto.InternalMessageInfo + +func (m *SelfSubjectRulesReview) Reset() { *m = SelfSubjectRulesReview{} } +func (*SelfSubjectRulesReview) ProtoMessage() {} +func (*SelfSubjectRulesReview) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{25} +} +func (m *SelfSubjectRulesReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SelfSubjectRulesReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SelfSubjectRulesReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_SelfSubjectRulesReview.Merge(m, src) +} +func (m *SelfSubjectRulesReview) XXX_Size() int { + return m.Size() +} +func (m *SelfSubjectRulesReview) XXX_DiscardUnknown() { + xxx_messageInfo_SelfSubjectRulesReview.DiscardUnknown(m) +} + +var xxx_messageInfo_SelfSubjectRulesReview proto.InternalMessageInfo + +func (m *SelfSubjectRulesReviewSpec) Reset() { *m = SelfSubjectRulesReviewSpec{} } +func (*SelfSubjectRulesReviewSpec) ProtoMessage() {} +func (*SelfSubjectRulesReviewSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{26} +} +func (m *SelfSubjectRulesReviewSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SelfSubjectRulesReviewSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SelfSubjectRulesReviewSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_SelfSubjectRulesReviewSpec.Merge(m, src) +} +func (m *SelfSubjectRulesReviewSpec) XXX_Size() int { + return m.Size() +} +func (m *SelfSubjectRulesReviewSpec) XXX_DiscardUnknown() { + xxx_messageInfo_SelfSubjectRulesReviewSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_SelfSubjectRulesReviewSpec proto.InternalMessageInfo + +func (m *ServiceAccountReference) Reset() { *m = ServiceAccountReference{} } +func (*ServiceAccountReference) ProtoMessage() {} +func (*ServiceAccountReference) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{27} +} +func (m *ServiceAccountReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServiceAccountReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ServiceAccountReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceAccountReference.Merge(m, src) +} +func (m *ServiceAccountReference) XXX_Size() int { + return m.Size() +} +func (m *ServiceAccountReference) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceAccountReference.DiscardUnknown(m) +} + +var xxx_messageInfo_ServiceAccountReference proto.InternalMessageInfo + +func (m *ServiceAccountRestriction) Reset() { *m = ServiceAccountRestriction{} } +func (*ServiceAccountRestriction) ProtoMessage() {} +func (*ServiceAccountRestriction) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{28} +} +func (m *ServiceAccountRestriction) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServiceAccountRestriction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ServiceAccountRestriction) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceAccountRestriction.Merge(m, src) +} +func (m *ServiceAccountRestriction) XXX_Size() int { + return m.Size() +} +func (m *ServiceAccountRestriction) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceAccountRestriction.DiscardUnknown(m) +} + +var xxx_messageInfo_ServiceAccountRestriction proto.InternalMessageInfo + +func (m *SubjectAccessReview) Reset() { *m = SubjectAccessReview{} } +func (*SubjectAccessReview) ProtoMessage() {} +func (*SubjectAccessReview) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{29} +} +func (m *SubjectAccessReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SubjectAccessReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SubjectAccessReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubjectAccessReview.Merge(m, src) +} +func (m *SubjectAccessReview) XXX_Size() int { + return m.Size() +} +func (m *SubjectAccessReview) XXX_DiscardUnknown() { + xxx_messageInfo_SubjectAccessReview.DiscardUnknown(m) +} + +var xxx_messageInfo_SubjectAccessReview proto.InternalMessageInfo + +func (m *SubjectAccessReviewResponse) Reset() { *m = SubjectAccessReviewResponse{} } +func (*SubjectAccessReviewResponse) ProtoMessage() {} +func (*SubjectAccessReviewResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{30} +} +func (m *SubjectAccessReviewResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SubjectAccessReviewResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SubjectAccessReviewResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubjectAccessReviewResponse.Merge(m, src) +} +func (m *SubjectAccessReviewResponse) XXX_Size() int { + return m.Size() +} +func (m *SubjectAccessReviewResponse) XXX_DiscardUnknown() { + xxx_messageInfo_SubjectAccessReviewResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_SubjectAccessReviewResponse proto.InternalMessageInfo + +func (m *SubjectRulesReview) Reset() { *m = SubjectRulesReview{} } +func (*SubjectRulesReview) ProtoMessage() {} +func (*SubjectRulesReview) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{31} +} +func (m *SubjectRulesReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SubjectRulesReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SubjectRulesReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubjectRulesReview.Merge(m, src) +} +func (m *SubjectRulesReview) XXX_Size() int { + return m.Size() +} +func (m *SubjectRulesReview) XXX_DiscardUnknown() { + xxx_messageInfo_SubjectRulesReview.DiscardUnknown(m) +} + +var xxx_messageInfo_SubjectRulesReview proto.InternalMessageInfo + +func (m *SubjectRulesReviewSpec) Reset() { *m = SubjectRulesReviewSpec{} } +func (*SubjectRulesReviewSpec) ProtoMessage() {} +func (*SubjectRulesReviewSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{32} +} +func (m *SubjectRulesReviewSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SubjectRulesReviewSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SubjectRulesReviewSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubjectRulesReviewSpec.Merge(m, src) +} +func (m *SubjectRulesReviewSpec) XXX_Size() int { + return m.Size() +} +func (m *SubjectRulesReviewSpec) XXX_DiscardUnknown() { + xxx_messageInfo_SubjectRulesReviewSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_SubjectRulesReviewSpec proto.InternalMessageInfo + +func (m *SubjectRulesReviewStatus) Reset() { *m = SubjectRulesReviewStatus{} } +func (*SubjectRulesReviewStatus) ProtoMessage() {} +func (*SubjectRulesReviewStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{33} +} +func (m *SubjectRulesReviewStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SubjectRulesReviewStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SubjectRulesReviewStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubjectRulesReviewStatus.Merge(m, src) +} +func (m *SubjectRulesReviewStatus) XXX_Size() int { + return m.Size() +} +func (m *SubjectRulesReviewStatus) XXX_DiscardUnknown() { + xxx_messageInfo_SubjectRulesReviewStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_SubjectRulesReviewStatus proto.InternalMessageInfo + +func (m *UserRestriction) Reset() { *m = UserRestriction{} } +func (*UserRestriction) ProtoMessage() {} +func (*UserRestriction) Descriptor() ([]byte, []int) { + return fileDescriptor_39b89822f939ca46, []int{34} +} +func (m *UserRestriction) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UserRestriction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *UserRestriction) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserRestriction.Merge(m, src) +} +func (m *UserRestriction) XXX_Size() int { + return m.Size() +} +func (m *UserRestriction) XXX_DiscardUnknown() { + xxx_messageInfo_UserRestriction.DiscardUnknown(m) +} + +var xxx_messageInfo_UserRestriction proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Action)(nil), "github.com.openshift.api.authorization.v1.Action") + proto.RegisterType((*ClusterRole)(nil), "github.com.openshift.api.authorization.v1.ClusterRole") + proto.RegisterType((*ClusterRoleBinding)(nil), "github.com.openshift.api.authorization.v1.ClusterRoleBinding") + proto.RegisterType((*ClusterRoleBindingList)(nil), "github.com.openshift.api.authorization.v1.ClusterRoleBindingList") + proto.RegisterType((*ClusterRoleList)(nil), "github.com.openshift.api.authorization.v1.ClusterRoleList") + proto.RegisterType((*GroupRestriction)(nil), "github.com.openshift.api.authorization.v1.GroupRestriction") + proto.RegisterType((*IsPersonalSubjectAccessReview)(nil), "github.com.openshift.api.authorization.v1.IsPersonalSubjectAccessReview") + proto.RegisterType((*LocalResourceAccessReview)(nil), "github.com.openshift.api.authorization.v1.LocalResourceAccessReview") + proto.RegisterType((*LocalSubjectAccessReview)(nil), "github.com.openshift.api.authorization.v1.LocalSubjectAccessReview") + proto.RegisterType((*NamedClusterRole)(nil), "github.com.openshift.api.authorization.v1.NamedClusterRole") + proto.RegisterType((*NamedClusterRoleBinding)(nil), "github.com.openshift.api.authorization.v1.NamedClusterRoleBinding") + proto.RegisterType((*NamedRole)(nil), "github.com.openshift.api.authorization.v1.NamedRole") + proto.RegisterType((*NamedRoleBinding)(nil), "github.com.openshift.api.authorization.v1.NamedRoleBinding") + proto.RegisterType((*OptionalNames)(nil), "github.com.openshift.api.authorization.v1.OptionalNames") + proto.RegisterType((*OptionalScopes)(nil), "github.com.openshift.api.authorization.v1.OptionalScopes") + proto.RegisterType((*PolicyRule)(nil), "github.com.openshift.api.authorization.v1.PolicyRule") + proto.RegisterType((*ResourceAccessReview)(nil), "github.com.openshift.api.authorization.v1.ResourceAccessReview") + proto.RegisterType((*ResourceAccessReviewResponse)(nil), "github.com.openshift.api.authorization.v1.ResourceAccessReviewResponse") + proto.RegisterType((*Role)(nil), "github.com.openshift.api.authorization.v1.Role") + proto.RegisterType((*RoleBinding)(nil), "github.com.openshift.api.authorization.v1.RoleBinding") + proto.RegisterType((*RoleBindingList)(nil), "github.com.openshift.api.authorization.v1.RoleBindingList") + proto.RegisterType((*RoleBindingRestriction)(nil), "github.com.openshift.api.authorization.v1.RoleBindingRestriction") + proto.RegisterType((*RoleBindingRestrictionList)(nil), "github.com.openshift.api.authorization.v1.RoleBindingRestrictionList") + proto.RegisterType((*RoleBindingRestrictionSpec)(nil), "github.com.openshift.api.authorization.v1.RoleBindingRestrictionSpec") + proto.RegisterType((*RoleList)(nil), "github.com.openshift.api.authorization.v1.RoleList") + proto.RegisterType((*SelfSubjectRulesReview)(nil), "github.com.openshift.api.authorization.v1.SelfSubjectRulesReview") + proto.RegisterType((*SelfSubjectRulesReviewSpec)(nil), "github.com.openshift.api.authorization.v1.SelfSubjectRulesReviewSpec") + proto.RegisterType((*ServiceAccountReference)(nil), "github.com.openshift.api.authorization.v1.ServiceAccountReference") + proto.RegisterType((*ServiceAccountRestriction)(nil), "github.com.openshift.api.authorization.v1.ServiceAccountRestriction") + proto.RegisterType((*SubjectAccessReview)(nil), "github.com.openshift.api.authorization.v1.SubjectAccessReview") + proto.RegisterType((*SubjectAccessReviewResponse)(nil), "github.com.openshift.api.authorization.v1.SubjectAccessReviewResponse") + proto.RegisterType((*SubjectRulesReview)(nil), "github.com.openshift.api.authorization.v1.SubjectRulesReview") + proto.RegisterType((*SubjectRulesReviewSpec)(nil), "github.com.openshift.api.authorization.v1.SubjectRulesReviewSpec") + proto.RegisterType((*SubjectRulesReviewStatus)(nil), "github.com.openshift.api.authorization.v1.SubjectRulesReviewStatus") + proto.RegisterType((*UserRestriction)(nil), "github.com.openshift.api.authorization.v1.UserRestriction") +} + +func init() { + proto.RegisterFile("github.com/openshift/api/authorization/v1/generated.proto", fileDescriptor_39b89822f939ca46) +} + +var fileDescriptor_39b89822f939ca46 = []byte{ + // 1821 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x19, 0xcd, 0x6f, 0x1b, 0x59, + 0x3d, 0xcf, 0x76, 0x1c, 0xfb, 0xe7, 0x26, 0xce, 0xbe, 0x66, 0xdb, 0x69, 0xa0, 0xb6, 0x35, 0x20, + 0xc8, 0x0a, 0x76, 0x4c, 0x02, 0x94, 0xb6, 0x2b, 0xb4, 0xb2, 0xbb, 0x51, 0x15, 0xa9, 0xb4, 0xd9, + 0x17, 0x76, 0xb5, 0x5a, 0x3e, 0xc4, 0x78, 0xf2, 0x62, 0x0f, 0x19, 0xcf, 0x58, 0xf3, 0xc6, 0x2e, + 0x05, 0x21, 0x15, 0x24, 0x0e, 0x5c, 0xd0, 0x5e, 0x40, 0x1c, 0x41, 0xfc, 0x01, 0x88, 0x0b, 0x12, + 0x48, 0x70, 0xe2, 0xd0, 0x03, 0x87, 0x95, 0xb8, 0x54, 0x08, 0x19, 0xea, 0x22, 0x0e, 0x1c, 0xf8, + 0x1b, 0xd0, 0x7b, 0xf3, 0xc6, 0xf3, 0xe1, 0xb1, 0xe2, 0x49, 0x9a, 0x08, 0x56, 0xbd, 0x79, 0xde, + 0xef, 0xfb, 0xf3, 0xfd, 0x7e, 0xcf, 0x70, 0xab, 0x6b, 0x7a, 0xbd, 0x61, 0x47, 0x33, 0x9c, 0x7e, + 0xd3, 0x19, 0x50, 0x9b, 0xf5, 0xcc, 0x23, 0xaf, 0xa9, 0x0f, 0xcc, 0xa6, 0x3e, 0xf4, 0x7a, 0x8e, + 0x6b, 0x7e, 0x57, 0xf7, 0x4c, 0xc7, 0x6e, 0x8e, 0xb6, 0x9b, 0x5d, 0x6a, 0x53, 0x57, 0xf7, 0xe8, + 0xa1, 0x36, 0x70, 0x1d, 0xcf, 0xc1, 0xaf, 0x85, 0xa4, 0xda, 0x94, 0x54, 0xd3, 0x07, 0xa6, 0x16, + 0x23, 0xd5, 0x46, 0xdb, 0x9b, 0xaf, 0x47, 0xa4, 0x74, 0x9d, 0xae, 0xd3, 0x14, 0x1c, 0x3a, 0xc3, + 0x23, 0xf1, 0x25, 0x3e, 0xc4, 0x2f, 0x9f, 0xf3, 0xa6, 0x7a, 0x7c, 0x93, 0x69, 0xa6, 0x23, 0xd4, + 0x30, 0x1c, 0x97, 0xa6, 0x48, 0x8f, 0xe1, 0xb8, 0x1d, 0xdd, 0x48, 0xc3, 0xf9, 0x42, 0x88, 0xd3, + 0xd7, 0x8d, 0x9e, 0x69, 0x53, 0xf7, 0x51, 0x73, 0x70, 0xdc, 0xe5, 0x07, 0xac, 0xd9, 0xa7, 0x9e, + 0x9e, 0x46, 0xd5, 0x9c, 0x47, 0xe5, 0x0e, 0x6d, 0xcf, 0xec, 0xd3, 0x19, 0x82, 0x1b, 0x27, 0x11, + 0x30, 0xa3, 0x47, 0xfb, 0x7a, 0x92, 0x4e, 0xfd, 0x41, 0x01, 0x8a, 0x2d, 0x83, 0xfb, 0x08, 0x37, + 0xa1, 0x6c, 0xeb, 0x7d, 0xca, 0x06, 0xba, 0x41, 0x15, 0xd4, 0x40, 0x5b, 0xe5, 0xf6, 0x2b, 0x4f, + 0xc6, 0xf5, 0xa5, 0xc9, 0xb8, 0x5e, 0xbe, 0x1f, 0x00, 0x48, 0x88, 0x83, 0x1b, 0x50, 0x18, 0x51, + 0xb7, 0xa3, 0xe4, 0x04, 0xee, 0x25, 0x89, 0x5b, 0x78, 0x97, 0xba, 0x1d, 0x22, 0x20, 0xf8, 0x16, + 0xac, 0xbb, 0x94, 0x39, 0x43, 0xd7, 0xa0, 0xad, 0xfd, 0xbd, 0xbb, 0xae, 0x33, 0x1c, 0x28, 0x79, + 0x81, 0xbd, 0x2a, 0xb1, 0x97, 0xc5, 0x21, 0x99, 0x41, 0xc3, 0x6f, 0x02, 0x8e, 0x9c, 0xbd, 0x4b, + 0x5d, 0x66, 0x3a, 0xb6, 0x52, 0x10, 0xc4, 0x55, 0x49, 0xbc, 0x22, 0x8f, 0x49, 0x0a, 0x2a, 0xfe, + 0x2c, 0x94, 0x82, 0x53, 0x65, 0x59, 0x90, 0xad, 0x4b, 0xb2, 0x12, 0x91, 0xe7, 0x64, 0x8a, 0x81, + 0x6f, 0xc2, 0xa5, 0xe0, 0x37, 0xb7, 0x55, 0x29, 0x0a, 0x8a, 0x0d, 0x49, 0x71, 0x89, 0x44, 0x60, + 0x24, 0x86, 0xc9, 0xbd, 0x30, 0xd0, 0xbd, 0x9e, 0x52, 0x8a, 0x7b, 0x61, 0x5f, 0xf7, 0x7a, 0x44, + 0x40, 0xf0, 0x5b, 0xb0, 0x6e, 0xb2, 0xfb, 0x8e, 0x1d, 0x30, 0x79, 0x87, 0xdc, 0x53, 0xca, 0x0d, + 0xb4, 0x55, 0x6a, 0x2b, 0x12, 0x7b, 0x7d, 0x2f, 0x01, 0x27, 0x33, 0x14, 0xf8, 0x3d, 0x58, 0x31, + 0x1c, 0xdb, 0xa3, 0xb6, 0xa7, 0xac, 0x34, 0xd0, 0x56, 0x65, 0xe7, 0x75, 0xcd, 0x8f, 0xb9, 0x16, + 0x8d, 0xb9, 0x36, 0x38, 0xee, 0x6a, 0x32, 0xe6, 0x1a, 0xd1, 0x1f, 0xee, 0x7e, 0xc7, 0xa3, 0x36, + 0xf7, 0x47, 0xe8, 0xb4, 0x3b, 0x3e, 0x17, 0x12, 0xb0, 0x53, 0x7f, 0x9d, 0x83, 0xca, 0x1d, 0x6b, + 0xc8, 0x3c, 0xea, 0x12, 0xc7, 0xa2, 0xf8, 0x5b, 0x50, 0xe2, 0x79, 0x79, 0xa8, 0x7b, 0xba, 0xc8, + 0x83, 0xca, 0xce, 0xe7, 0xe6, 0x8a, 0xe2, 0x59, 0xac, 0x71, 0x6c, 0x6d, 0xb4, 0xad, 0x3d, 0xe8, + 0x7c, 0x9b, 0x1a, 0xde, 0x57, 0xa8, 0xa7, 0xb7, 0xb1, 0x94, 0x06, 0xe1, 0x19, 0x99, 0x72, 0xc5, + 0xef, 0xc3, 0xb2, 0x3b, 0xb4, 0x28, 0x53, 0x72, 0x8d, 0xfc, 0x56, 0x65, 0xe7, 0x8b, 0xda, 0xc2, + 0x65, 0xac, 0xed, 0x3b, 0x96, 0x69, 0x3c, 0x22, 0x43, 0x8b, 0x86, 0x39, 0xc4, 0xbf, 0x18, 0xf1, + 0x59, 0xe2, 0x0e, 0x54, 0xf5, 0x6e, 0xd7, 0xa5, 0x5d, 0x41, 0xc2, 0x41, 0x22, 0xe5, 0x2a, 0x3b, + 0x9f, 0x88, 0x18, 0xa1, 0xf1, 0x72, 0xe5, 0xec, 0x5a, 0x71, 0xd4, 0xf6, 0xe5, 0xc9, 0xb8, 0x5e, + 0x4d, 0x1c, 0x92, 0x24, 0x43, 0xf5, 0xdf, 0x79, 0xc0, 0x11, 0x8f, 0xb5, 0x4d, 0xfb, 0xd0, 0xb4, + 0xbb, 0x17, 0xe0, 0x38, 0x0a, 0xe5, 0x21, 0xa3, 0xae, 0x28, 0x47, 0x51, 0x77, 0x95, 0x9d, 0x9b, + 0x19, 0x9c, 0xf7, 0x60, 0xc0, 0x7f, 0xe9, 0x96, 0xa0, 0x6f, 0xaf, 0xf2, 0xca, 0x7e, 0x27, 0x60, + 0x47, 0x42, 0xce, 0xb8, 0x07, 0xd0, 0xe5, 0x55, 0xe8, 0xcb, 0xc9, 0x9f, 0x51, 0xce, 0x1a, 0x37, + 0xe7, 0xee, 0x94, 0x1f, 0x89, 0xf0, 0xc6, 0x6f, 0x43, 0x89, 0x0d, 0x85, 0xa5, 0x4c, 0x29, 0x88, + 0x64, 0x88, 0x85, 0x89, 0x77, 0xde, 0xd0, 0x41, 0x84, 0x1e, 0x51, 0x97, 0xda, 0x06, 0x0d, 0x4b, + 0xf9, 0x40, 0x12, 0x93, 0x29, 0x1b, 0x7c, 0x1f, 0x56, 0x5c, 0xc7, 0xa2, 0x84, 0x1e, 0x89, 0xba, + 0x5f, 0x90, 0xe3, 0xb4, 0x3c, 0x88, 0x4f, 0x4b, 0x02, 0x26, 0xea, 0x5f, 0x11, 0x5c, 0x99, 0x0d, + 0xf6, 0x3d, 0x93, 0x79, 0xf8, 0xeb, 0x33, 0x01, 0xd7, 0x16, 0x0b, 0x38, 0xa7, 0x16, 0xe1, 0x9e, + 0x1a, 0x12, 0x9c, 0x44, 0x82, 0xdd, 0x81, 0x65, 0xd3, 0xa3, 0xfd, 0xa0, 0x4a, 0xbe, 0x9c, 0x21, + 0x00, 0xb3, 0xfa, 0x86, 0xd5, 0xb2, 0xc7, 0x79, 0x12, 0x9f, 0xb5, 0xfa, 0x67, 0x04, 0xd5, 0x08, + 0xf2, 0x05, 0x58, 0xf5, 0xb5, 0xb8, 0x55, 0x37, 0x4e, 0x69, 0x55, 0xba, 0x39, 0x3f, 0x43, 0xb0, + 0xee, 0xdf, 0x28, 0x94, 0x79, 0xae, 0xe9, 0x5f, 0x6c, 0x2a, 0x14, 0x45, 0xc6, 0x31, 0x05, 0x35, + 0xf2, 0x5b, 0xe5, 0x36, 0x4c, 0xc6, 0xf5, 0xa2, 0xc0, 0x62, 0x44, 0x42, 0xf0, 0x37, 0xa1, 0x68, + 0xe9, 0x1d, 0x6a, 0x05, 0x6a, 0x7d, 0x7e, 0x41, 0x8b, 0x39, 0xcd, 0x01, 0xb5, 0xa8, 0xe1, 0x39, + 0x6e, 0x78, 0x5d, 0x06, 0x27, 0x8c, 0x48, 0xae, 0x6a, 0x1d, 0xae, 0xef, 0xb1, 0x7d, 0xea, 0x32, + 0x5e, 0x16, 0x32, 0x69, 0x5b, 0x86, 0x41, 0x19, 0x23, 0x74, 0x64, 0xd2, 0x87, 0xaa, 0x05, 0xd7, + 0xee, 0x39, 0x86, 0x6e, 0x05, 0x2d, 0x3f, 0x0a, 0xc4, 0x0f, 0x82, 0x4b, 0x5a, 0xc6, 0x63, 0x3b, + 0x83, 0xd3, 0x7c, 0xc2, 0x76, 0x81, 0xeb, 0x46, 0x8a, 0xba, 0xf8, 0x52, 0x7f, 0x9a, 0x03, 0x45, + 0x88, 0x4b, 0x51, 0xe5, 0x85, 0x4b, 0xe3, 0x57, 0x24, 0xef, 0x2d, 0xc9, 0x41, 0x81, 0xb7, 0x1e, + 0x22, 0x20, 0xf8, 0xd3, 0xd3, 0x10, 0xe5, 0x45, 0x88, 0xaa, 0x93, 0x71, 0xbd, 0xe2, 0x87, 0xe8, + 0xc0, 0x32, 0x0d, 0x3a, 0x8d, 0xd3, 0x37, 0xa0, 0xc8, 0x0c, 0x67, 0x40, 0x99, 0x18, 0x05, 0x2a, + 0x3b, 0xb7, 0x4e, 0xd1, 0x95, 0x0e, 0x04, 0x03, 0x3f, 0x0d, 0xfc, 0xdf, 0x44, 0x32, 0x55, 0x7f, + 0x82, 0x60, 0x9d, 0x37, 0xa6, 0xc3, 0xe8, 0x7d, 0xd8, 0x80, 0x02, 0x1f, 0x7a, 0xe4, 0x4c, 0x34, + 0x55, 0x5f, 0xcc, 0x02, 0x02, 0x82, 0xdf, 0x83, 0x02, 0xef, 0x16, 0xb2, 0x23, 0x9f, 0x36, 0xa5, + 0xa7, 0x9c, 0x45, 0x0b, 0x12, 0x1c, 0xd5, 0xdf, 0x20, 0xb8, 0x9a, 0x54, 0x28, 0xb8, 0x6e, 0x4e, + 0xd6, 0xcb, 0x83, 0x8a, 0x1b, 0x12, 0x48, 0xf5, 0xce, 0xd8, 0x47, 0x2e, 0x4b, 0x39, 0x95, 0xc8, + 0x21, 0x89, 0x8a, 0x51, 0x1f, 0x23, 0x10, 0x03, 0xe3, 0xe1, 0x82, 0xde, 0x7b, 0x3b, 0xe6, 0xbd, + 0x66, 0x06, 0xf5, 0xe6, 0xba, 0xed, 0x57, 0x41, 0x1c, 0xb3, 0xf9, 0xab, 0x9f, 0xe6, 0xaf, 0x1b, + 0x59, 0x15, 0x5a, 0xd8, 0x51, 0xb7, 0x61, 0x35, 0x76, 0x53, 0xe2, 0x7a, 0xd0, 0x1b, 0xfd, 0x46, + 0x55, 0x4e, 0xf6, 0xb7, 0xdb, 0xa5, 0x9f, 0xff, 0xa2, 0xbe, 0xf4, 0xf8, 0x6f, 0x8d, 0x25, 0xf5, + 0x0d, 0x58, 0x8b, 0xe7, 0x73, 0x16, 0xe2, 0x1f, 0xe7, 0x01, 0xc2, 0x41, 0x8a, 0x53, 0xf2, 0x71, + 0x3d, 0x46, 0xc9, 0xa7, 0x78, 0x46, 0xfc, 0x73, 0xfc, 0x43, 0x04, 0xaf, 0xea, 0x9e, 0xe7, 0x9a, + 0x9d, 0xa1, 0x47, 0x23, 0xad, 0x35, 0x98, 0x41, 0x32, 0x8e, 0xa2, 0xd7, 0xa5, 0x67, 0x5e, 0x6d, + 0xa5, 0xf1, 0x24, 0xe9, 0xa2, 0xf0, 0x67, 0xa0, 0xac, 0x0f, 0xcc, 0xbb, 0xd1, 0x36, 0x21, 0x26, + 0x98, 0x60, 0x65, 0x60, 0x24, 0x84, 0x73, 0xe4, 0x60, 0x4a, 0xf7, 0x07, 0x0b, 0x89, 0x1c, 0xb4, + 0x57, 0x46, 0x42, 0x38, 0xfe, 0x12, 0xac, 0x46, 0x47, 0x7a, 0xa6, 0x2c, 0x0b, 0x82, 0x57, 0x26, + 0xe3, 0xfa, 0x6a, 0x74, 0xf2, 0x67, 0x24, 0x8e, 0x87, 0xdb, 0x50, 0xb5, 0x63, 0x53, 0x3a, 0x53, + 0x8a, 0x82, 0x54, 0x99, 0x8c, 0xeb, 0x1b, 0xf1, 0x01, 0x5e, 0x36, 0xb2, 0x24, 0x81, 0xda, 0x85, + 0x8d, 0x8b, 0xe9, 0xf9, 0x7f, 0x47, 0xf0, 0xf1, 0x34, 0x49, 0x84, 0xb2, 0x81, 0x63, 0x33, 0x9a, + 0x7d, 0x01, 0xfc, 0x24, 0x2c, 0xf3, 0xee, 0xed, 0xdf, 0x99, 0x65, 0x7f, 0xce, 0xe3, 0x4d, 0x5d, + 0x9a, 0xea, 0x03, 0x17, 0xef, 0xed, 0x6f, 0xc2, 0x1a, 0x1d, 0xe9, 0xd6, 0x90, 0x6b, 0xbb, 0xeb, + 0xba, 0x8e, 0x2b, 0xd7, 0xbd, 0xab, 0x52, 0x89, 0xea, 0x2e, 0x87, 0xea, 0x53, 0x30, 0x49, 0xa0, + 0xab, 0x7f, 0x42, 0x50, 0xf8, 0xff, 0xdf, 0x60, 0xd4, 0xe7, 0x79, 0xa8, 0xbc, 0x5c, 0x2b, 0x3e, + 0xea, 0x6b, 0x05, 0x9f, 0xbc, 0x2f, 0x76, 0x9f, 0x38, 0xc3, 0xe4, 0x7d, 0xf2, 0x22, 0xf1, 0x1c, + 0xc1, 0x95, 0xe8, 0x45, 0x17, 0x99, 0xbf, 0xcf, 0x3f, 0x7f, 0xbb, 0x50, 0x60, 0x03, 0x6a, 0xc8, + 0xd4, 0xdd, 0x3d, 0x9d, 0x61, 0x11, 0x95, 0x0f, 0x06, 0xd4, 0x08, 0x07, 0x04, 0xfe, 0x45, 0x84, + 0x00, 0x75, 0x82, 0x60, 0x33, 0x9d, 0xe4, 0x02, 0xe2, 0x77, 0x14, 0x8f, 0x5f, 0xeb, 0xcc, 0x66, + 0xce, 0x09, 0xe5, 0xef, 0xf3, 0xf3, 0x8c, 0xe4, 0x9e, 0xc0, 0x8f, 0xa0, 0xca, 0x4b, 0xda, 0x0d, + 0x8f, 0xa5, 0xad, 0xb7, 0x33, 0x28, 0x24, 0x66, 0xff, 0x88, 0x26, 0xe2, 0xdd, 0x25, 0x71, 0x48, + 0x92, 0x72, 0xf0, 0xf7, 0x61, 0x5d, 0x14, 0x79, 0x54, 0xb6, 0x1f, 0xf3, 0x37, 0x32, 0xc8, 0x4e, + 0x2e, 0x88, 0xed, 0x8d, 0xc9, 0xb8, 0x3e, 0xb3, 0x36, 0x92, 0x19, 0x51, 0xf8, 0x97, 0x08, 0xae, + 0x31, 0xea, 0x8e, 0x4c, 0x83, 0xea, 0x86, 0xe1, 0x0c, 0x6d, 0x2f, 0xaa, 0x88, 0xdf, 0xcf, 0xde, + 0xca, 0xa0, 0xc8, 0x81, 0xcf, 0xab, 0xe5, 0xf3, 0x8a, 0x6a, 0x74, 0x7d, 0x32, 0xae, 0x5f, 0x9b, + 0x0b, 0x26, 0xf3, 0xb5, 0x50, 0xff, 0x88, 0xa0, 0x74, 0x41, 0x9b, 0xfc, 0x57, 0xe3, 0xf9, 0x98, + 0x79, 0x70, 0x4f, 0xcf, 0xbe, 0xff, 0x20, 0xb8, 0x72, 0x40, 0xad, 0x23, 0xd9, 0x82, 0xfd, 0x9b, + 0xd1, 0x1f, 0x89, 0x82, 0x32, 0x47, 0x99, 0xcb, 0x3c, 0x9d, 0xe1, 0xbc, 0x32, 0xc7, 0xc7, 0x50, + 0x64, 0x9e, 0xee, 0x0d, 0x83, 0xcb, 0xf0, 0x4e, 0x16, 0x51, 0xb3, 0x62, 0x04, 0xab, 0xf6, 0x9a, + 0x14, 0x54, 0xf4, 0xbf, 0x89, 0x14, 0xa1, 0x7e, 0x0f, 0x36, 0xe7, 0xab, 0x17, 0x59, 0x78, 0xd1, + 0x79, 0x2c, 0xbc, 0x16, 0x5c, 0x4d, 0xa6, 0x99, 0xbc, 0xba, 0x16, 0x58, 0x97, 0x62, 0x03, 0x63, + 0xee, 0xe4, 0x81, 0x51, 0xfd, 0x0b, 0x82, 0xf9, 0x59, 0x8d, 0x7f, 0x84, 0xa0, 0x1a, 0x4f, 0x6c, + 0x7f, 0x23, 0xa9, 0xec, 0xb4, 0xcf, 0x50, 0x54, 0xc1, 0x4d, 0x3c, 0x9d, 0x22, 0xe3, 0x08, 0x8c, + 0x24, 0x65, 0x62, 0x0d, 0x60, 0xaa, 0x72, 0x6c, 0xb6, 0x9d, 0xda, 0xc4, 0x48, 0x04, 0x43, 0xfd, + 0x20, 0x07, 0x97, 0x5f, 0xbe, 0xa3, 0xc4, 0xd2, 0xea, 0x9f, 0x08, 0x3e, 0x96, 0xe2, 0x92, 0xd3, + 0xaf, 0x1a, 0xaf, 0xc1, 0x8a, 0x6e, 0x59, 0xce, 0x43, 0x7a, 0x28, 0xac, 0x2f, 0x85, 0x83, 0x55, + 0xcb, 0x3f, 0x26, 0x01, 0x1c, 0x7f, 0x0a, 0x8a, 0x2e, 0xd5, 0x99, 0xec, 0xc8, 0xe5, 0xb0, 0xee, + 0x88, 0x38, 0x25, 0x12, 0x8a, 0x5b, 0x50, 0xa5, 0xf1, 0x85, 0xe2, 0xa4, 0x7d, 0x23, 0x89, 0xaf, + 0xfe, 0x0b, 0x01, 0x4e, 0xe9, 0x53, 0x46, 0xac, 0x4f, 0xb5, 0xce, 0xd6, 0x3c, 0xfe, 0x27, 0x7a, + 0xd4, 0x1f, 0x78, 0x53, 0x4e, 0x6f, 0x50, 0x41, 0x52, 0xa2, 0xb9, 0x49, 0x19, 0xbe, 0xbf, 0xe6, + 0xe6, 0xbe, 0xbf, 0x86, 0xf9, 0x98, 0x3f, 0x8f, 0x7c, 0xfc, 0x1d, 0x02, 0x65, 0x9e, 0xd1, 0xe1, + 0x2e, 0x87, 0x5e, 0xfc, 0xbf, 0x51, 0x29, 0x49, 0x96, 0xcb, 0x98, 0x64, 0xbf, 0x45, 0x90, 0x9c, + 0x8c, 0x70, 0x3d, 0xd8, 0xbc, 0x23, 0x2f, 0x36, 0x62, 0xf3, 0x0e, 0x96, 0xee, 0x45, 0x7c, 0x1e, + 0xbe, 0x79, 0xe7, 0xcf, 0xe3, 0xcd, 0xbb, 0xbd, 0xf5, 0xe4, 0x59, 0x6d, 0xe9, 0xc3, 0x67, 0xb5, + 0xa5, 0xa7, 0xcf, 0x6a, 0x4b, 0x8f, 0x27, 0x35, 0xf4, 0x64, 0x52, 0x43, 0x1f, 0x4e, 0x6a, 0xe8, + 0xe9, 0xa4, 0x86, 0xfe, 0x31, 0xa9, 0xa1, 0x0f, 0x9e, 0xd7, 0x96, 0xde, 0xcf, 0x8d, 0xb6, 0xff, + 0x1b, 0x00, 0x00, 0xff, 0xff, 0x39, 0xa6, 0xdb, 0xa1, 0x02, 0x20, 0x00, 0x00, +} + +func (m *Action) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Action) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Action) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.IsNonResourceURL { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x48 + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x42 + { + size, err := m.Content.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + i -= len(m.ResourceName) + copy(dAtA[i:], m.ResourceName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceName))) + i-- + dAtA[i] = 0x32 + i -= len(m.Resource) + copy(dAtA[i:], m.Resource) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resource))) + i-- + dAtA[i] = 0x2a + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x22 + i -= len(m.Group) + copy(dAtA[i:], m.Group) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) + i-- + dAtA[i] = 0x1a + i -= len(m.Verb) + copy(dAtA[i:], m.Verb) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verb))) + i-- + dAtA[i] = 0x12 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ClusterRole) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterRole) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRole) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.AggregationRule != nil { + { + size, err := m.AggregationRule.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if len(m.Rules) > 0 { + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ClusterRoleBinding) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterRoleBinding) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRoleBinding) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.RoleRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if len(m.Subjects) > 0 { + for iNdEx := len(m.Subjects) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Subjects[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if m.GroupNames != nil { + { + size, err := m.GroupNames.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.UserNames != nil { + { + size, err := m.UserNames.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ClusterRoleBindingList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterRoleBindingList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRoleBindingList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ClusterRoleList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterRoleList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRoleList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *GroupRestriction) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GroupRestriction) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GroupRestriction) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Selectors) > 0 { + for iNdEx := len(m.Selectors) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Selectors[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.Groups) > 0 { + for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Groups[iNdEx]) + copy(dAtA[i:], m.Groups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Groups[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *IsPersonalSubjectAccessReview) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IsPersonalSubjectAccessReview) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IsPersonalSubjectAccessReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *LocalResourceAccessReview) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LocalResourceAccessReview) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LocalResourceAccessReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Action.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *LocalSubjectAccessReview) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LocalSubjectAccessReview) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LocalSubjectAccessReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Scopes != nil { + { + size, err := m.Scopes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if len(m.GroupsSlice) > 0 { + for iNdEx := len(m.GroupsSlice) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.GroupsSlice[iNdEx]) + copy(dAtA[i:], m.GroupsSlice[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.GroupsSlice[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.User) + copy(dAtA[i:], m.User) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) + i-- + dAtA[i] = 0x12 + { + size, err := m.Action.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *NamedClusterRole) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NamedClusterRole) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NamedClusterRole) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Role.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *NamedClusterRoleBinding) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NamedClusterRoleBinding) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NamedClusterRoleBinding) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.RoleBinding.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *NamedRole) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NamedRole) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NamedRole) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Role.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *NamedRoleBinding) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NamedRoleBinding) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NamedRoleBinding) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.RoleBinding.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m OptionalNames) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m OptionalNames) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m OptionalNames) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m) > 0 { + for iNdEx := len(m) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m[iNdEx]) + copy(dAtA[i:], m[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m OptionalScopes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m OptionalScopes) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m OptionalScopes) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m) > 0 { + for iNdEx := len(m) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m[iNdEx]) + copy(dAtA[i:], m[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *PolicyRule) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PolicyRule) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PolicyRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.NonResourceURLsSlice) > 0 { + for iNdEx := len(m.NonResourceURLsSlice) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.NonResourceURLsSlice[iNdEx]) + copy(dAtA[i:], m.NonResourceURLsSlice[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.NonResourceURLsSlice[iNdEx]))) + i-- + dAtA[i] = 0x32 + } + } + if len(m.ResourceNames) > 0 { + for iNdEx := len(m.ResourceNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ResourceNames[iNdEx]) + copy(dAtA[i:], m.ResourceNames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceNames[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + if len(m.Resources) > 0 { + for iNdEx := len(m.Resources) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Resources[iNdEx]) + copy(dAtA[i:], m.Resources[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Resources[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + if len(m.APIGroups) > 0 { + for iNdEx := len(m.APIGroups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.APIGroups[iNdEx]) + copy(dAtA[i:], m.APIGroups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.APIGroups[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + { + size, err := m.AttributeRestrictions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Verbs) > 0 { + for iNdEx := len(m.Verbs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Verbs[iNdEx]) + copy(dAtA[i:], m.Verbs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Verbs[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *ResourceAccessReview) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResourceAccessReview) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceAccessReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Action.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ResourceAccessReviewResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResourceAccessReviewResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceAccessReviewResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.EvaluationError) + copy(dAtA[i:], m.EvaluationError) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.EvaluationError))) + i-- + dAtA[i] = 0x22 + if len(m.GroupsSlice) > 0 { + for iNdEx := len(m.GroupsSlice) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.GroupsSlice[iNdEx]) + copy(dAtA[i:], m.GroupsSlice[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.GroupsSlice[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + if len(m.UsersSlice) > 0 { + for iNdEx := len(m.UsersSlice) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.UsersSlice[iNdEx]) + copy(dAtA[i:], m.UsersSlice[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UsersSlice[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Role) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Role) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Role) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Rules) > 0 { + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RoleBinding) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RoleBinding) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleBinding) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.RoleRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if len(m.Subjects) > 0 { + for iNdEx := len(m.Subjects) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Subjects[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if m.GroupNames != nil { + { + size, err := m.GroupNames.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.UserNames != nil { + { + size, err := m.UserNames.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RoleBindingList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RoleBindingList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleBindingList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RoleBindingRestriction) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RoleBindingRestriction) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleBindingRestriction) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RoleBindingRestrictionList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RoleBindingRestrictionList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleBindingRestrictionList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RoleBindingRestrictionSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RoleBindingRestrictionSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleBindingRestrictionSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ServiceAccountRestriction != nil { + { + size, err := m.ServiceAccountRestriction.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.GroupRestriction != nil { + { + size, err := m.GroupRestriction.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.UserRestriction != nil { + { + size, err := m.UserRestriction.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RoleList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RoleList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoleList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SelfSubjectRulesReview) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SelfSubjectRulesReview) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SelfSubjectRulesReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SelfSubjectRulesReviewSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SelfSubjectRulesReviewSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SelfSubjectRulesReviewSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Scopes != nil { + { + size, err := m.Scopes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ServiceAccountReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ServiceAccountReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ServiceAccountReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ServiceAccountRestriction) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ServiceAccountRestriction) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ServiceAccountRestriction) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Namespaces) > 0 { + for iNdEx := len(m.Namespaces) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Namespaces[iNdEx]) + copy(dAtA[i:], m.Namespaces[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespaces[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.ServiceAccounts) > 0 { + for iNdEx := len(m.ServiceAccounts) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ServiceAccounts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *SubjectAccessReview) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SubjectAccessReview) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SubjectAccessReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Scopes != nil { + { + size, err := m.Scopes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if len(m.GroupsSlice) > 0 { + for iNdEx := len(m.GroupsSlice) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.GroupsSlice[iNdEx]) + copy(dAtA[i:], m.GroupsSlice[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.GroupsSlice[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.User) + copy(dAtA[i:], m.User) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) + i-- + dAtA[i] = 0x12 + { + size, err := m.Action.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SubjectAccessReviewResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SubjectAccessReviewResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SubjectAccessReviewResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.EvaluationError) + copy(dAtA[i:], m.EvaluationError) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.EvaluationError))) + i-- + dAtA[i] = 0x22 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x1a + i-- + if m.Allowed { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SubjectRulesReview) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SubjectRulesReview) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SubjectRulesReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SubjectRulesReviewSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SubjectRulesReviewSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SubjectRulesReviewSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Scopes != nil { + { + size, err := m.Scopes.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if len(m.Groups) > 0 { + for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Groups[iNdEx]) + copy(dAtA[i:], m.Groups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Groups[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.User) + copy(dAtA[i:], m.User) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SubjectRulesReviewStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SubjectRulesReviewStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SubjectRulesReviewStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.EvaluationError) + copy(dAtA[i:], m.EvaluationError) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.EvaluationError))) + i-- + dAtA[i] = 0x12 + if len(m.Rules) > 0 { + for iNdEx := len(m.Rules) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rules[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *UserRestriction) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UserRestriction) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UserRestriction) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Selectors) > 0 { + for iNdEx := len(m.Selectors) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Selectors[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.Groups) > 0 { + for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Groups[iNdEx]) + copy(dAtA[i:], m.Groups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Groups[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.Users) > 0 { + for iNdEx := len(m.Users) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Users[iNdEx]) + copy(dAtA[i:], m.Users[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Users[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Action) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Verb) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Group) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Version) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Resource) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ResourceName) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Content.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + +func (m *ClusterRole) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Rules) > 0 { + for _, e := range m.Rules { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.AggregationRule != nil { + l = m.AggregationRule.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ClusterRoleBinding) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.UserNames != nil { + l = m.UserNames.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.GroupNames != nil { + l = m.GroupNames.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Subjects) > 0 { + for _, e := range m.Subjects { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.RoleRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ClusterRoleBindingList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ClusterRoleList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *GroupRestriction) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Groups) > 0 { + for _, s := range m.Groups { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Selectors) > 0 { + for _, e := range m.Selectors { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *IsPersonalSubjectAccessReview) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *LocalResourceAccessReview) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Action.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *LocalSubjectAccessReview) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Action.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.User) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.GroupsSlice) > 0 { + for _, s := range m.GroupsSlice { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.Scopes != nil { + l = m.Scopes.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *NamedClusterRole) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Role.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *NamedClusterRoleBinding) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.RoleBinding.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *NamedRole) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Role.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *NamedRoleBinding) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.RoleBinding.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m OptionalNames) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m) > 0 { + for _, s := range m { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m OptionalScopes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m) > 0 { + for _, s := range m { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PolicyRule) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Verbs) > 0 { + for _, s := range m.Verbs { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.AttributeRestrictions.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.APIGroups) > 0 { + for _, s := range m.APIGroups { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Resources) > 0 { + for _, s := range m.Resources { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.ResourceNames) > 0 { + for _, s := range m.ResourceNames { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.NonResourceURLsSlice) > 0 { + for _, s := range m.NonResourceURLsSlice { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ResourceAccessReview) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Action.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ResourceAccessReviewResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.UsersSlice) > 0 { + for _, s := range m.UsersSlice { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.GroupsSlice) > 0 { + for _, s := range m.GroupsSlice { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.EvaluationError) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Role) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Rules) > 0 { + for _, e := range m.Rules { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *RoleBinding) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.UserNames != nil { + l = m.UserNames.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.GroupNames != nil { + l = m.GroupNames.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Subjects) > 0 { + for _, e := range m.Subjects { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.RoleRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RoleBindingList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *RoleBindingRestriction) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RoleBindingRestrictionList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *RoleBindingRestrictionSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.UserRestriction != nil { + l = m.UserRestriction.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.GroupRestriction != nil { + l = m.GroupRestriction.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ServiceAccountRestriction != nil { + l = m.ServiceAccountRestriction.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *RoleList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *SelfSubjectRulesReview) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SelfSubjectRulesReviewSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Scopes != nil { + l = m.Scopes.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ServiceAccountReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ServiceAccountRestriction) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.ServiceAccounts) > 0 { + for _, e := range m.ServiceAccounts { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Namespaces) > 0 { + for _, s := range m.Namespaces { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *SubjectAccessReview) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Action.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.User) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.GroupsSlice) > 0 { + for _, s := range m.GroupsSlice { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.Scopes != nil { + l = m.Scopes.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *SubjectAccessReviewResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.EvaluationError) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SubjectRulesReview) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SubjectRulesReviewSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.User) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Groups) > 0 { + for _, s := range m.Groups { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.Scopes != nil { + l = m.Scopes.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *SubjectRulesReviewStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Rules) > 0 { + for _, e := range m.Rules { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.EvaluationError) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *UserRestriction) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Users) > 0 { + for _, s := range m.Users { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Groups) > 0 { + for _, s := range m.Groups { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Selectors) > 0 { + for _, e := range m.Selectors { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *Action) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Action{`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Verb:` + fmt.Sprintf("%v", this.Verb) + `,`, + `Group:` + fmt.Sprintf("%v", this.Group) + `,`, + `Version:` + fmt.Sprintf("%v", this.Version) + `,`, + `Resource:` + fmt.Sprintf("%v", this.Resource) + `,`, + `ResourceName:` + fmt.Sprintf("%v", this.ResourceName) + `,`, + `Content:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Content), "RawExtension", "runtime.RawExtension", 1), `&`, ``, 1) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `IsNonResourceURL:` + fmt.Sprintf("%v", this.IsNonResourceURL) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterRole) String() string { + if this == nil { + return "nil" + } + repeatedStringForRules := "[]PolicyRule{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" + s := strings.Join([]string{`&ClusterRole{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Rules:` + repeatedStringForRules + `,`, + `AggregationRule:` + strings.Replace(fmt.Sprintf("%v", this.AggregationRule), "AggregationRule", "v11.AggregationRule", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterRoleBinding) String() string { + if this == nil { + return "nil" + } + repeatedStringForSubjects := "[]ObjectReference{" + for _, f := range this.Subjects { + repeatedStringForSubjects += fmt.Sprintf("%v", f) + "," + } + repeatedStringForSubjects += "}" + s := strings.Join([]string{`&ClusterRoleBinding{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `UserNames:` + strings.Replace(fmt.Sprintf("%v", this.UserNames), "OptionalNames", "OptionalNames", 1) + `,`, + `GroupNames:` + strings.Replace(fmt.Sprintf("%v", this.GroupNames), "OptionalNames", "OptionalNames", 1) + `,`, + `Subjects:` + repeatedStringForSubjects + `,`, + `RoleRef:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.RoleRef), "ObjectReference", "v12.ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterRoleBindingList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ClusterRoleBinding{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ClusterRoleBinding", "ClusterRoleBinding", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ClusterRoleBindingList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ClusterRoleList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ClusterRole{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ClusterRole", "ClusterRole", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ClusterRoleList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *GroupRestriction) String() string { + if this == nil { + return "nil" + } + repeatedStringForSelectors := "[]LabelSelector{" + for _, f := range this.Selectors { + repeatedStringForSelectors += fmt.Sprintf("%v", f) + "," + } + repeatedStringForSelectors += "}" + s := strings.Join([]string{`&GroupRestriction{`, + `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, + `Selectors:` + repeatedStringForSelectors + `,`, + `}`, + }, "") + return s +} +func (this *IsPersonalSubjectAccessReview) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IsPersonalSubjectAccessReview{`, + `}`, + }, "") + return s +} +func (this *LocalResourceAccessReview) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LocalResourceAccessReview{`, + `Action:` + strings.Replace(strings.Replace(this.Action.String(), "Action", "Action", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LocalSubjectAccessReview) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LocalSubjectAccessReview{`, + `Action:` + strings.Replace(strings.Replace(this.Action.String(), "Action", "Action", 1), `&`, ``, 1) + `,`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `GroupsSlice:` + fmt.Sprintf("%v", this.GroupsSlice) + `,`, + `Scopes:` + strings.Replace(fmt.Sprintf("%v", this.Scopes), "OptionalScopes", "OptionalScopes", 1) + `,`, + `}`, + }, "") + return s +} +func (this *NamedClusterRole) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamedClusterRole{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Role:` + strings.Replace(strings.Replace(this.Role.String(), "ClusterRole", "ClusterRole", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NamedClusterRoleBinding) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamedClusterRoleBinding{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `RoleBinding:` + strings.Replace(strings.Replace(this.RoleBinding.String(), "ClusterRoleBinding", "ClusterRoleBinding", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NamedRole) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamedRole{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Role:` + strings.Replace(strings.Replace(this.Role.String(), "Role", "Role", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NamedRoleBinding) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamedRoleBinding{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `RoleBinding:` + strings.Replace(strings.Replace(this.RoleBinding.String(), "RoleBinding", "RoleBinding", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PolicyRule) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PolicyRule{`, + `Verbs:` + fmt.Sprintf("%v", this.Verbs) + `,`, + `AttributeRestrictions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.AttributeRestrictions), "RawExtension", "runtime.RawExtension", 1), `&`, ``, 1) + `,`, + `APIGroups:` + fmt.Sprintf("%v", this.APIGroups) + `,`, + `Resources:` + fmt.Sprintf("%v", this.Resources) + `,`, + `ResourceNames:` + fmt.Sprintf("%v", this.ResourceNames) + `,`, + `NonResourceURLsSlice:` + fmt.Sprintf("%v", this.NonResourceURLsSlice) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceAccessReview) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceAccessReview{`, + `Action:` + strings.Replace(strings.Replace(this.Action.String(), "Action", "Action", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceAccessReviewResponse) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceAccessReviewResponse{`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `UsersSlice:` + fmt.Sprintf("%v", this.UsersSlice) + `,`, + `GroupsSlice:` + fmt.Sprintf("%v", this.GroupsSlice) + `,`, + `EvaluationError:` + fmt.Sprintf("%v", this.EvaluationError) + `,`, + `}`, + }, "") + return s +} +func (this *Role) String() string { + if this == nil { + return "nil" + } + repeatedStringForRules := "[]PolicyRule{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" + s := strings.Join([]string{`&Role{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Rules:` + repeatedStringForRules + `,`, + `}`, + }, "") + return s +} +func (this *RoleBinding) String() string { + if this == nil { + return "nil" + } + repeatedStringForSubjects := "[]ObjectReference{" + for _, f := range this.Subjects { + repeatedStringForSubjects += fmt.Sprintf("%v", f) + "," + } + repeatedStringForSubjects += "}" + s := strings.Join([]string{`&RoleBinding{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `UserNames:` + strings.Replace(fmt.Sprintf("%v", this.UserNames), "OptionalNames", "OptionalNames", 1) + `,`, + `GroupNames:` + strings.Replace(fmt.Sprintf("%v", this.GroupNames), "OptionalNames", "OptionalNames", 1) + `,`, + `Subjects:` + repeatedStringForSubjects + `,`, + `RoleRef:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.RoleRef), "ObjectReference", "v12.ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RoleBindingList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]RoleBinding{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "RoleBinding", "RoleBinding", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&RoleBindingList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *RoleBindingRestriction) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RoleBindingRestriction{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "RoleBindingRestrictionSpec", "RoleBindingRestrictionSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RoleBindingRestrictionList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]RoleBindingRestriction{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "RoleBindingRestriction", "RoleBindingRestriction", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&RoleBindingRestrictionList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *RoleBindingRestrictionSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RoleBindingRestrictionSpec{`, + `UserRestriction:` + strings.Replace(this.UserRestriction.String(), "UserRestriction", "UserRestriction", 1) + `,`, + `GroupRestriction:` + strings.Replace(this.GroupRestriction.String(), "GroupRestriction", "GroupRestriction", 1) + `,`, + `ServiceAccountRestriction:` + strings.Replace(this.ServiceAccountRestriction.String(), "ServiceAccountRestriction", "ServiceAccountRestriction", 1) + `,`, + `}`, + }, "") + return s +} +func (this *RoleList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Role{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Role", "Role", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&RoleList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *SelfSubjectRulesReview) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SelfSubjectRulesReview{`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "SelfSubjectRulesReviewSpec", "SelfSubjectRulesReviewSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "SubjectRulesReviewStatus", "SubjectRulesReviewStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *SelfSubjectRulesReviewSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SelfSubjectRulesReviewSpec{`, + `Scopes:` + strings.Replace(fmt.Sprintf("%v", this.Scopes), "OptionalScopes", "OptionalScopes", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceAccountReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceAccountReference{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceAccountRestriction) String() string { + if this == nil { + return "nil" + } + repeatedStringForServiceAccounts := "[]ServiceAccountReference{" + for _, f := range this.ServiceAccounts { + repeatedStringForServiceAccounts += strings.Replace(strings.Replace(f.String(), "ServiceAccountReference", "ServiceAccountReference", 1), `&`, ``, 1) + "," + } + repeatedStringForServiceAccounts += "}" + s := strings.Join([]string{`&ServiceAccountRestriction{`, + `ServiceAccounts:` + repeatedStringForServiceAccounts + `,`, + `Namespaces:` + fmt.Sprintf("%v", this.Namespaces) + `,`, + `}`, + }, "") + return s +} +func (this *SubjectAccessReview) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SubjectAccessReview{`, + `Action:` + strings.Replace(strings.Replace(this.Action.String(), "Action", "Action", 1), `&`, ``, 1) + `,`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `GroupsSlice:` + fmt.Sprintf("%v", this.GroupsSlice) + `,`, + `Scopes:` + strings.Replace(fmt.Sprintf("%v", this.Scopes), "OptionalScopes", "OptionalScopes", 1) + `,`, + `}`, + }, "") + return s +} +func (this *SubjectAccessReviewResponse) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SubjectAccessReviewResponse{`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Allowed:` + fmt.Sprintf("%v", this.Allowed) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `EvaluationError:` + fmt.Sprintf("%v", this.EvaluationError) + `,`, + `}`, + }, "") + return s +} +func (this *SubjectRulesReview) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SubjectRulesReview{`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "SubjectRulesReviewSpec", "SubjectRulesReviewSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "SubjectRulesReviewStatus", "SubjectRulesReviewStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *SubjectRulesReviewSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SubjectRulesReviewSpec{`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, + `Scopes:` + strings.Replace(fmt.Sprintf("%v", this.Scopes), "OptionalScopes", "OptionalScopes", 1) + `,`, + `}`, + }, "") + return s +} +func (this *SubjectRulesReviewStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForRules := "[]PolicyRule{" + for _, f := range this.Rules { + repeatedStringForRules += strings.Replace(strings.Replace(f.String(), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + "," + } + repeatedStringForRules += "}" + s := strings.Join([]string{`&SubjectRulesReviewStatus{`, + `Rules:` + repeatedStringForRules + `,`, + `EvaluationError:` + fmt.Sprintf("%v", this.EvaluationError) + `,`, + `}`, + }, "") + return s +} +func (this *UserRestriction) String() string { + if this == nil { + return "nil" + } + repeatedStringForSelectors := "[]LabelSelector{" + for _, f := range this.Selectors { + repeatedStringForSelectors += fmt.Sprintf("%v", f) + "," + } + repeatedStringForSelectors += "}" + s := strings.Join([]string{`&UserRestriction{`, + `Users:` + fmt.Sprintf("%v", this.Users) + `,`, + `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, + `Selectors:` + repeatedStringForSelectors + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *Action) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Action: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Action: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Verb", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Verb = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Group = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Resource = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ResourceName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Content", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Content.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsNonResourceURL", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsNonResourceURL = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterRole) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterRole: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterRole: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rules = append(m.Rules, PolicyRule{}) + if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AggregationRule", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AggregationRule == nil { + m.AggregationRule = &v11.AggregationRule{} + } + if err := m.AggregationRule.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterRoleBinding) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterRoleBinding: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterRoleBinding: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserNames", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UserNames == nil { + m.UserNames = OptionalNames{} + } + if err := m.UserNames.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupNames", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.GroupNames == nil { + m.GroupNames = OptionalNames{} + } + if err := m.GroupNames.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Subjects", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Subjects = append(m.Subjects, v12.ObjectReference{}) + if err := m.Subjects[len(m.Subjects)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RoleRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RoleRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterRoleBindingList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterRoleBindingList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterRoleBindingList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ClusterRoleBinding{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterRoleList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterRoleList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterRoleList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ClusterRole{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GroupRestriction) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GroupRestriction: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GroupRestriction: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Groups", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Groups = append(m.Groups, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selectors", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Selectors = append(m.Selectors, v1.LabelSelector{}) + if err := m.Selectors[len(m.Selectors)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IsPersonalSubjectAccessReview) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IsPersonalSubjectAccessReview: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IsPersonalSubjectAccessReview: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LocalResourceAccessReview) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LocalResourceAccessReview: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LocalResourceAccessReview: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Action.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LocalSubjectAccessReview) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LocalSubjectAccessReview: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LocalSubjectAccessReview: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Action.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupsSlice", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GroupsSlice = append(m.GroupsSlice, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scopes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Scopes == nil { + m.Scopes = OptionalScopes{} + } + if err := m.Scopes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NamedClusterRole) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NamedClusterRole: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NamedClusterRole: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Role.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NamedClusterRoleBinding) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NamedClusterRoleBinding: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NamedClusterRoleBinding: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RoleBinding", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RoleBinding.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NamedRole) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NamedRole: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NamedRole: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Role.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NamedRoleBinding) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NamedRoleBinding: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NamedRoleBinding: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RoleBinding", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RoleBinding.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OptionalNames) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OptionalNames: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OptionalNames: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + *m = append(*m, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OptionalScopes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OptionalScopes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OptionalScopes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + *m = append(*m, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PolicyRule) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PolicyRule: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PolicyRule: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Verbs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Verbs = append(m.Verbs, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AttributeRestrictions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.AttributeRestrictions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIGroups", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIGroups = append(m.APIGroups, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Resources = append(m.Resources, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceNames", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ResourceNames = append(m.ResourceNames, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonResourceURLsSlice", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NonResourceURLsSlice = append(m.NonResourceURLsSlice, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceAccessReview) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceAccessReview: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceAccessReview: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Action.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceAccessReviewResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceAccessReviewResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceAccessReviewResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UsersSlice", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UsersSlice = append(m.UsersSlice, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupsSlice", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GroupsSlice = append(m.GroupsSlice, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EvaluationError", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EvaluationError = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Role) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Role: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Role: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rules = append(m.Rules, PolicyRule{}) + if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RoleBinding) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RoleBinding: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RoleBinding: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserNames", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UserNames == nil { + m.UserNames = OptionalNames{} + } + if err := m.UserNames.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupNames", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.GroupNames == nil { + m.GroupNames = OptionalNames{} + } + if err := m.GroupNames.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Subjects", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Subjects = append(m.Subjects, v12.ObjectReference{}) + if err := m.Subjects[len(m.Subjects)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RoleRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RoleRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RoleBindingList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RoleBindingList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RoleBindingList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, RoleBinding{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RoleBindingRestriction) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RoleBindingRestriction: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RoleBindingRestriction: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RoleBindingRestrictionList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RoleBindingRestrictionList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RoleBindingRestrictionList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, RoleBindingRestriction{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RoleBindingRestrictionSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RoleBindingRestrictionSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RoleBindingRestrictionSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserRestriction", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UserRestriction == nil { + m.UserRestriction = &UserRestriction{} + } + if err := m.UserRestriction.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupRestriction", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.GroupRestriction == nil { + m.GroupRestriction = &GroupRestriction{} + } + if err := m.GroupRestriction.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountRestriction", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ServiceAccountRestriction == nil { + m.ServiceAccountRestriction = &ServiceAccountRestriction{} + } + if err := m.ServiceAccountRestriction.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RoleList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RoleList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RoleList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Role{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SelfSubjectRulesReview) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SelfSubjectRulesReview: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SelfSubjectRulesReview: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SelfSubjectRulesReviewSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SelfSubjectRulesReviewSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SelfSubjectRulesReviewSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scopes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Scopes == nil { + m.Scopes = OptionalScopes{} + } + if err := m.Scopes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServiceAccountReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServiceAccountReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServiceAccountReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServiceAccountRestriction) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServiceAccountRestriction: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServiceAccountRestriction: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccounts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServiceAccounts = append(m.ServiceAccounts, ServiceAccountReference{}) + if err := m.ServiceAccounts[len(m.ServiceAccounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespaces", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespaces = append(m.Namespaces, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SubjectAccessReview) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SubjectAccessReview: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SubjectAccessReview: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Action.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupsSlice", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GroupsSlice = append(m.GroupsSlice, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scopes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Scopes == nil { + m.Scopes = OptionalScopes{} + } + if err := m.Scopes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SubjectAccessReviewResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SubjectAccessReviewResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SubjectAccessReviewResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Allowed", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Allowed = bool(v != 0) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EvaluationError", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EvaluationError = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SubjectRulesReview) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SubjectRulesReview: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SubjectRulesReview: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SubjectRulesReviewSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SubjectRulesReviewSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SubjectRulesReviewSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Groups", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Groups = append(m.Groups, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scopes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Scopes == nil { + m.Scopes = OptionalScopes{} + } + if err := m.Scopes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SubjectRulesReviewStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SubjectRulesReviewStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SubjectRulesReviewStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rules", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rules = append(m.Rules, PolicyRule{}) + if err := m.Rules[len(m.Rules)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EvaluationError", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EvaluationError = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UserRestriction) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UserRestriction: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UserRestriction: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Users", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Users = append(m.Users, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Groups", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Groups = append(m.Groups, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selectors", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Selectors = append(m.Selectors, v1.LabelSelector{}) + if err := m.Selectors[len(m.Selectors)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vendor/github.com/openshift/api/authorization/v1/generated.proto b/vendor/github.com/openshift/api/authorization/v1/generated.proto new file mode 100644 index 0000000000000..6bce7d558e823 --- /dev/null +++ b/vendor/github.com/openshift/api/authorization/v1/generated.proto @@ -0,0 +1,480 @@ + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package github.com.openshift.api.authorization.v1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/api/rbac/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// Action describes a request to the API server +message Action { + // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces + optional string namespace = 1; + + // Verb is one of: get, list, watch, create, update, delete + optional string verb = 2; + + // Group is the API group of the resource + // Serialized as resourceAPIGroup to avoid confusion with the 'groups' field when inlined + optional string resourceAPIGroup = 3; + + // Version is the API version of the resource + // Serialized as resourceAPIVersion to avoid confusion with TypeMeta.apiVersion and ObjectMeta.resourceVersion when inlined + optional string resourceAPIVersion = 4; + + // Resource is one of the existing resource types + optional string resource = 5; + + // ResourceName is the name of the resource being requested for a "get" or deleted for a "delete" + optional string resourceName = 6; + + // Path is the path of a non resource URL + optional string path = 8; + + // IsNonResourceURL is true if this is a request for a non-resource URL (outside of the resource hierarchy) + optional bool isNonResourceURL = 9; + + // Content is the actual content of the request for create and update + // +kubebuilder:pruning:PreserveUnknownFields + optional k8s.io.apimachinery.pkg.runtime.RawExtension content = 7; +} + +// ClusterRole is a logical grouping of PolicyRules that can be referenced as a unit by ClusterRoleBindings. +message ClusterRole { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Rules holds all the PolicyRules for this ClusterRole + repeated PolicyRule rules = 2; + + // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. + // If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be + // stomped by the controller. + optional k8s.io.api.rbac.v1.AggregationRule aggregationRule = 3; +} + +// ClusterRoleBinding references a ClusterRole, but not contain it. It can reference any ClusterRole in the same namespace or in the global namespace. +// It adds who information via (Users and Groups) OR Subjects and namespace information by which namespace it exists in. +// ClusterRoleBindings in a given namespace only have effect in that namespace (excepting the master namespace which has power in all namespaces). +message ClusterRoleBinding { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // UserNames holds all the usernames directly bound to the role. + // This field should only be specified when supporting legacy clients and servers. + // See Subjects for further details. + // +k8s:conversion-gen=false + // +optional + optional OptionalNames userNames = 2; + + // GroupNames holds all the groups directly bound to the role. + // This field should only be specified when supporting legacy clients and servers. + // See Subjects for further details. + // +k8s:conversion-gen=false + // +optional + optional OptionalNames groupNames = 3; + + // Subjects hold object references to authorize with this rule. + // This field is ignored if UserNames or GroupNames are specified to support legacy clients and servers. + // Thus newer clients that do not need to support backwards compatibility should send + // only fully qualified Subjects and should omit the UserNames and GroupNames fields. + // Clients that need to support backwards compatibility can use this field to build the UserNames and GroupNames. + repeated k8s.io.api.core.v1.ObjectReference subjects = 4; + + // RoleRef can only reference the current namespace and the global namespace. + // If the ClusterRoleRef cannot be resolved, the Authorizer must return an error. + // Since Policy is a singleton, this is sufficient knowledge to locate a role. + optional k8s.io.api.core.v1.ObjectReference roleRef = 5; +} + +// ClusterRoleBindingList is a collection of ClusterRoleBindings +message ClusterRoleBindingList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of ClusterRoleBindings + repeated ClusterRoleBinding items = 2; +} + +// ClusterRoleList is a collection of ClusterRoles +message ClusterRoleList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of ClusterRoles + repeated ClusterRole items = 2; +} + +// GroupRestriction matches a group either by a string match on the group name +// or a label selector applied to group labels. +message GroupRestriction { + // Groups is a list of groups used to match against an individual user's + // groups. If the user is a member of one of the whitelisted groups, the user + // is allowed to be bound to a role. + // +nullable + repeated string groups = 1; + + // Selectors specifies a list of label selectors over group labels. + // +nullable + repeated k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector labels = 2; +} + +// IsPersonalSubjectAccessReview is a marker for PolicyRule.AttributeRestrictions that denotes that subjectaccessreviews on self should be allowed +message IsPersonalSubjectAccessReview { +} + +// LocalResourceAccessReview is a means to request a list of which users and groups are authorized to perform the action specified by spec in a particular namespace +message LocalResourceAccessReview { + // Action describes the action being tested. The Namespace element is FORCED to the current namespace. + optional Action Action = 1; +} + +// LocalSubjectAccessReview is an object for requesting information about whether a user or group can perform an action in a particular namespace +message LocalSubjectAccessReview { + // Action describes the action being tested. The Namespace element is FORCED to the current namespace. + optional Action Action = 1; + + // User is optional. If both User and Groups are empty, the current authenticated user is used. + optional string user = 2; + + // Groups is optional. Groups is the list of groups to which the User belongs. + // +k8s:conversion-gen=false + repeated string groups = 3; + + // Scopes to use for the evaluation. Empty means "use the unscoped (full) permissions of the user/groups". + // Nil for a self-SAR, means "use the scopes on this request". + // Nil for a regular SAR, means the same as empty. + // +k8s:conversion-gen=false + optional OptionalScopes scopes = 4; +} + +// NamedClusterRole relates a name with a cluster role +message NamedClusterRole { + // Name is the name of the cluster role + optional string name = 1; + + // Role is the cluster role being named + optional ClusterRole role = 2; +} + +// NamedClusterRoleBinding relates a name with a cluster role binding +message NamedClusterRoleBinding { + // Name is the name of the cluster role binding + optional string name = 1; + + // RoleBinding is the cluster role binding being named + optional ClusterRoleBinding roleBinding = 2; +} + +// NamedRole relates a Role with a name +message NamedRole { + // Name is the name of the role + optional string name = 1; + + // Role is the role being named + optional Role role = 2; +} + +// NamedRoleBinding relates a role binding with a name +message NamedRoleBinding { + // Name is the name of the role binding + optional string name = 1; + + // RoleBinding is the role binding being named + optional RoleBinding roleBinding = 2; +} + +// OptionalNames is an array that may also be left nil to distinguish between set and unset. +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +message OptionalNames { + // items, if empty, will result in an empty slice + + repeated string items = 1; +} + +// OptionalScopes is an array that may also be left nil to distinguish between set and unset. +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +message OptionalScopes { + // items, if empty, will result in an empty slice + + repeated string items = 1; +} + +// PolicyRule holds information that describes a policy rule, but does not contain information +// about who the rule applies to or which namespace the rule applies to. +message PolicyRule { + // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds. + repeated string verbs = 1; + + // AttributeRestrictions will vary depending on what the Authorizer/AuthorizationAttributeBuilder pair supports. + // If the Authorizer does not recognize how to handle the AttributeRestrictions, the Authorizer should report an error. + // +kubebuilder:pruning:PreserveUnknownFields + optional k8s.io.apimachinery.pkg.runtime.RawExtension attributeRestrictions = 2; + + // APIGroups is the name of the APIGroup that contains the resources. If this field is empty, then both kubernetes and origin API groups are assumed. + // That means that if an action is requested against one of the enumerated resources in either the kubernetes or the origin API group, the request + // will be allowed + // +optional + // +nullable + repeated string apiGroups = 3; + + // Resources is a list of resources this rule applies to. ResourceAll represents all resources. + repeated string resources = 4; + + // ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. + repeated string resourceNames = 5; + + // NonResourceURLsSlice is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path + // This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. + repeated string nonResourceURLs = 6; +} + +// ResourceAccessReview is a means to request a list of which users and groups are authorized to perform the +// action specified by spec +message ResourceAccessReview { + // Action describes the action being tested. + optional Action Action = 1; +} + +// ResourceAccessReviewResponse describes who can perform the action +message ResourceAccessReviewResponse { + // Namespace is the namespace used for the access review + optional string namespace = 1; + + // UsersSlice is the list of users who can perform the action + // +k8s:conversion-gen=false + repeated string users = 2; + + // GroupsSlice is the list of groups who can perform the action + // +k8s:conversion-gen=false + repeated string groups = 3; + + // EvaluationError is an indication that some error occurred during resolution, but partial results can still be returned. + // It is entirely possible to get an error and be able to continue determine authorization status in spite of it. This is + // most common when a bound role is missing, but enough roles are still present and bound to reason about the request. + optional string evalutionError = 4; +} + +// Role is a logical grouping of PolicyRules that can be referenced as a unit by RoleBindings. +message Role { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Rules holds all the PolicyRules for this Role + repeated PolicyRule rules = 2; +} + +// RoleBinding references a Role, but not contain it. It can reference any Role in the same namespace or in the global namespace. +// It adds who information via (Users and Groups) OR Subjects and namespace information by which namespace it exists in. +// RoleBindings in a given namespace only have effect in that namespace (excepting the master namespace which has power in all namespaces). +message RoleBinding { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // UserNames holds all the usernames directly bound to the role. + // This field should only be specified when supporting legacy clients and servers. + // See Subjects for further details. + // +k8s:conversion-gen=false + // +optional + optional OptionalNames userNames = 2; + + // GroupNames holds all the groups directly bound to the role. + // This field should only be specified when supporting legacy clients and servers. + // See Subjects for further details. + // +k8s:conversion-gen=false + // +optional + optional OptionalNames groupNames = 3; + + // Subjects hold object references to authorize with this rule. + // This field is ignored if UserNames or GroupNames are specified to support legacy clients and servers. + // Thus newer clients that do not need to support backwards compatibility should send + // only fully qualified Subjects and should omit the UserNames and GroupNames fields. + // Clients that need to support backwards compatibility can use this field to build the UserNames and GroupNames. + repeated k8s.io.api.core.v1.ObjectReference subjects = 4; + + // RoleRef can only reference the current namespace and the global namespace. + // If the RoleRef cannot be resolved, the Authorizer must return an error. + // Since Policy is a singleton, this is sufficient knowledge to locate a role. + optional k8s.io.api.core.v1.ObjectReference roleRef = 5; +} + +// RoleBindingList is a collection of RoleBindings +message RoleBindingList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of RoleBindings + repeated RoleBinding items = 2; +} + +// RoleBindingRestriction is an object that can be matched against a subject +// (user, group, or service account) to determine whether rolebindings on that +// subject are allowed in the namespace to which the RoleBindingRestriction +// belongs. If any one of those RoleBindingRestriction objects matches +// a subject, rolebindings on that subject in the namespace are allowed. +message RoleBindingRestriction { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Spec defines the matcher. + optional RoleBindingRestrictionSpec spec = 2; +} + +// RoleBindingRestrictionList is a collection of RoleBindingRestriction objects. +message RoleBindingRestrictionList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of RoleBindingRestriction objects. + repeated RoleBindingRestriction items = 2; +} + +// RoleBindingRestrictionSpec defines a rolebinding restriction. Exactly one +// field must be non-nil. +message RoleBindingRestrictionSpec { + // UserRestriction matches against user subjects. + // +nullable + optional UserRestriction userrestriction = 1; + + // GroupRestriction matches against group subjects. + // +nullable + optional GroupRestriction grouprestriction = 2; + + // ServiceAccountRestriction matches against service-account subjects. + // +nullable + optional ServiceAccountRestriction serviceaccountrestriction = 3; +} + +// RoleList is a collection of Roles +message RoleList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of Roles + repeated Role items = 2; +} + +// SelfSubjectRulesReview is a resource you can create to determine which actions you can perform in a namespace +message SelfSubjectRulesReview { + // Spec adds information about how to conduct the check + optional SelfSubjectRulesReviewSpec spec = 1; + + // Status is completed by the server to tell which permissions you have + optional SubjectRulesReviewStatus status = 2; +} + +// SelfSubjectRulesReviewSpec adds information about how to conduct the check +message SelfSubjectRulesReviewSpec { + // Scopes to use for the evaluation. Empty means "use the unscoped (full) permissions of the user/groups". + // Nil means "use the scopes on this request". + // +k8s:conversion-gen=false + optional OptionalScopes scopes = 1; +} + +// ServiceAccountReference specifies a service account and namespace by their +// names. +message ServiceAccountReference { + // Name is the name of the service account. + optional string name = 1; + + // Namespace is the namespace of the service account. Service accounts from + // inside the whitelisted namespaces are allowed to be bound to roles. If + // Namespace is empty, then the namespace of the RoleBindingRestriction in + // which the ServiceAccountReference is embedded is used. + optional string namespace = 2; +} + +// ServiceAccountRestriction matches a service account by a string match on +// either the service-account name or the name of the service account's +// namespace. +message ServiceAccountRestriction { + // ServiceAccounts specifies a list of literal service-account names. + repeated ServiceAccountReference serviceaccounts = 1; + + // Namespaces specifies a list of literal namespace names. + repeated string namespaces = 2; +} + +// SubjectAccessReview is an object for requesting information about whether a user or group can perform an action +message SubjectAccessReview { + // Action describes the action being tested. + optional Action Action = 1; + + // User is optional. If both User and Groups are empty, the current authenticated user is used. + optional string user = 2; + + // GroupsSlice is optional. Groups is the list of groups to which the User belongs. + // +k8s:conversion-gen=false + repeated string groups = 3; + + // Scopes to use for the evaluation. Empty means "use the unscoped (full) permissions of the user/groups". + // Nil for a self-SAR, means "use the scopes on this request". + // Nil for a regular SAR, means the same as empty. + // +k8s:conversion-gen=false + optional OptionalScopes scopes = 4; +} + +// SubjectAccessReviewResponse describes whether or not a user or group can perform an action +message SubjectAccessReviewResponse { + // Namespace is the namespace used for the access review + optional string namespace = 1; + + // Allowed is required. True if the action would be allowed, false otherwise. + optional bool allowed = 2; + + // Reason is optional. It indicates why a request was allowed or denied. + optional string reason = 3; + + // EvaluationError is an indication that some error occurred during the authorization check. + // It is entirely possible to get an error and be able to continue determine authorization status in spite of it. This is + // most common when a bound role is missing, but enough roles are still present and bound to reason about the request. + optional string evaluationError = 4; +} + +// SubjectRulesReview is a resource you can create to determine which actions another user can perform in a namespace +message SubjectRulesReview { + // Spec adds information about how to conduct the check + optional SubjectRulesReviewSpec spec = 1; + + // Status is completed by the server to tell which permissions you have + optional SubjectRulesReviewStatus status = 2; +} + +// SubjectRulesReviewSpec adds information about how to conduct the check +message SubjectRulesReviewSpec { + // User is optional. At least one of User and Groups must be specified. + optional string user = 1; + + // Groups is optional. Groups is the list of groups to which the User belongs. At least one of User and Groups must be specified. + repeated string groups = 2; + + // Scopes to use for the evaluation. Empty means "use the unscoped (full) permissions of the user/groups". + optional OptionalScopes scopes = 3; +} + +// SubjectRulesReviewStatus is contains the result of a rules check +message SubjectRulesReviewStatus { + // Rules is the list of rules (no particular sort) that are allowed for the subject + repeated PolicyRule rules = 1; + + // EvaluationError can appear in combination with Rules. It means some error happened during evaluation + // that may have prevented additional rules from being populated. + optional string evaluationError = 2; +} + +// UserRestriction matches a user either by a string match on the user name, +// a string match on the name of a group to which the user belongs, or a label +// selector applied to the user labels. +message UserRestriction { + // Users specifies a list of literal user names. + repeated string users = 1; + + // Groups specifies a list of literal group names. + // +nullable + repeated string groups = 2; + + // Selectors specifies a list of label selectors over user labels. + // +nullable + repeated k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector labels = 3; +} + diff --git a/vendor/github.com/openshift/api/authorization/v1/legacy.go b/vendor/github.com/openshift/api/authorization/v1/legacy.go new file mode 100644 index 0000000000000..f437a242ea8cb --- /dev/null +++ b/vendor/github.com/openshift/api/authorization/v1/legacy.go @@ -0,0 +1,43 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + legacyGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} + legacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes, corev1.AddToScheme, rbacv1.AddToScheme) + DeprecatedInstallWithoutGroup = legacySchemeBuilder.AddToScheme +) + +func addLegacyKnownTypes(scheme *runtime.Scheme) error { + types := []runtime.Object{ + &Role{}, + &RoleBinding{}, + &RoleBindingList{}, + &RoleList{}, + + &SelfSubjectRulesReview{}, + &SubjectRulesReview{}, + &ResourceAccessReview{}, + &SubjectAccessReview{}, + &LocalResourceAccessReview{}, + &LocalSubjectAccessReview{}, + &ResourceAccessReviewResponse{}, + &SubjectAccessReviewResponse{}, + &IsPersonalSubjectAccessReview{}, + + &ClusterRole{}, + &ClusterRoleBinding{}, + &ClusterRoleBindingList{}, + &ClusterRoleList{}, + + &RoleBindingRestriction{}, + &RoleBindingRestrictionList{}, + } + scheme.AddKnownTypes(legacyGroupVersion, types...) + return nil +} diff --git a/vendor/github.com/openshift/api/authorization/v1/register.go b/vendor/github.com/openshift/api/authorization/v1/register.go new file mode 100644 index 0000000000000..f1e12477b6516 --- /dev/null +++ b/vendor/github.com/openshift/api/authorization/v1/register.go @@ -0,0 +1,60 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "authorization.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, corev1.AddToScheme, rbacv1.AddToScheme) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &Role{}, + &RoleBinding{}, + &RoleBindingList{}, + &RoleList{}, + + &SelfSubjectRulesReview{}, + &SubjectRulesReview{}, + &ResourceAccessReview{}, + &SubjectAccessReview{}, + &LocalResourceAccessReview{}, + &LocalSubjectAccessReview{}, + &ResourceAccessReviewResponse{}, + &SubjectAccessReviewResponse{}, + &IsPersonalSubjectAccessReview{}, + + &ClusterRole{}, + &ClusterRoleBinding{}, + &ClusterRoleBindingList{}, + &ClusterRoleList{}, + + &RoleBindingRestriction{}, + &RoleBindingRestrictionList{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/authorization/v1/types.go b/vendor/github.com/openshift/api/authorization/v1/types.go new file mode 100644 index 0000000000000..355d2f3120da6 --- /dev/null +++ b/vendor/github.com/openshift/api/authorization/v1/types.go @@ -0,0 +1,545 @@ +package v1 + +import ( + "fmt" + + corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + kruntime "k8s.io/apimachinery/pkg/runtime" +) + +// Authorization is calculated against +// 1. all deny RoleBinding PolicyRules in the master namespace - short circuit on match +// 2. all allow RoleBinding PolicyRules in the master namespace - short circuit on match +// 3. all deny RoleBinding PolicyRules in the namespace - short circuit on match +// 4. all allow RoleBinding PolicyRules in the namespace - short circuit on match +// 5. deny by default + +const ( + // GroupKind is string representation of kind used in role binding subjects that represents the "group". + GroupKind = "Group" + // UserKind is string representation of kind used in role binding subjects that represents the "user". + UserKind = "User" + + ScopesKey = "scopes.authorization.openshift.io" +) + +// PolicyRule holds information that describes a policy rule, but does not contain information +// about who the rule applies to or which namespace the rule applies to. +type PolicyRule struct { + // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds. + Verbs []string `json:"verbs" protobuf:"bytes,1,rep,name=verbs"` + // AttributeRestrictions will vary depending on what the Authorizer/AuthorizationAttributeBuilder pair supports. + // If the Authorizer does not recognize how to handle the AttributeRestrictions, the Authorizer should report an error. + // +kubebuilder:pruning:PreserveUnknownFields + AttributeRestrictions kruntime.RawExtension `json:"attributeRestrictions,omitempty" protobuf:"bytes,2,opt,name=attributeRestrictions"` + // APIGroups is the name of the APIGroup that contains the resources. If this field is empty, then both kubernetes and origin API groups are assumed. + // That means that if an action is requested against one of the enumerated resources in either the kubernetes or the origin API group, the request + // will be allowed + // +optional + // +nullable + APIGroups []string `json:"apiGroups,omitempty" protobuf:"bytes,3,rep,name=apiGroups"` + // Resources is a list of resources this rule applies to. ResourceAll represents all resources. + Resources []string `json:"resources" protobuf:"bytes,4,rep,name=resources"` + // ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. + ResourceNames []string `json:"resourceNames,omitempty" protobuf:"bytes,5,rep,name=resourceNames"` + // NonResourceURLsSlice is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path + // This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. + NonResourceURLsSlice []string `json:"nonResourceURLs,omitempty" protobuf:"bytes,6,rep,name=nonResourceURLs"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// IsPersonalSubjectAccessReview is a marker for PolicyRule.AttributeRestrictions that denotes that subjectaccessreviews on self should be allowed +type IsPersonalSubjectAccessReview struct { + metav1.TypeMeta `json:",inline"` +} + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Role is a logical grouping of PolicyRules that can be referenced as a unit by RoleBindings. +type Role struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Rules holds all the PolicyRules for this Role + Rules []PolicyRule `json:"rules" protobuf:"bytes,2,rep,name=rules"` +} + +// OptionalNames is an array that may also be left nil to distinguish between set and unset. +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +type OptionalNames []string + +func (t OptionalNames) String() string { + return fmt.Sprintf("%v", []string(t)) +} + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RoleBinding references a Role, but not contain it. It can reference any Role in the same namespace or in the global namespace. +// It adds who information via (Users and Groups) OR Subjects and namespace information by which namespace it exists in. +// RoleBindings in a given namespace only have effect in that namespace (excepting the master namespace which has power in all namespaces). +type RoleBinding struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // UserNames holds all the usernames directly bound to the role. + // This field should only be specified when supporting legacy clients and servers. + // See Subjects for further details. + // +k8s:conversion-gen=false + // +optional + UserNames OptionalNames `json:"userNames" protobuf:"bytes,2,rep,name=userNames"` + // GroupNames holds all the groups directly bound to the role. + // This field should only be specified when supporting legacy clients and servers. + // See Subjects for further details. + // +k8s:conversion-gen=false + // +optional + GroupNames OptionalNames `json:"groupNames" protobuf:"bytes,3,rep,name=groupNames"` + // Subjects hold object references to authorize with this rule. + // This field is ignored if UserNames or GroupNames are specified to support legacy clients and servers. + // Thus newer clients that do not need to support backwards compatibility should send + // only fully qualified Subjects and should omit the UserNames and GroupNames fields. + // Clients that need to support backwards compatibility can use this field to build the UserNames and GroupNames. + Subjects []corev1.ObjectReference `json:"subjects" protobuf:"bytes,4,rep,name=subjects"` + + // RoleRef can only reference the current namespace and the global namespace. + // If the RoleRef cannot be resolved, the Authorizer must return an error. + // Since Policy is a singleton, this is sufficient knowledge to locate a role. + RoleRef corev1.ObjectReference `json:"roleRef" protobuf:"bytes,5,opt,name=roleRef"` +} + +// NamedRole relates a Role with a name +type NamedRole struct { + // Name is the name of the role + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // Role is the role being named + Role Role `json:"role" protobuf:"bytes,2,opt,name=role"` +} + +// NamedRoleBinding relates a role binding with a name +type NamedRoleBinding struct { + // Name is the name of the role binding + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // RoleBinding is the role binding being named + RoleBinding RoleBinding `json:"roleBinding" protobuf:"bytes,2,opt,name=roleBinding"` +} + +// +genclient +// +genclient:onlyVerbs=create +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// SelfSubjectRulesReview is a resource you can create to determine which actions you can perform in a namespace +type SelfSubjectRulesReview struct { + metav1.TypeMeta `json:",inline"` + + // Spec adds information about how to conduct the check + Spec SelfSubjectRulesReviewSpec `json:"spec" protobuf:"bytes,1,opt,name=spec"` + + // Status is completed by the server to tell which permissions you have + Status SubjectRulesReviewStatus `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"` +} + +// SelfSubjectRulesReviewSpec adds information about how to conduct the check +type SelfSubjectRulesReviewSpec struct { + // Scopes to use for the evaluation. Empty means "use the unscoped (full) permissions of the user/groups". + // Nil means "use the scopes on this request". + // +k8s:conversion-gen=false + Scopes OptionalScopes `json:"scopes" protobuf:"bytes,1,rep,name=scopes"` +} + +// +genclient +// +genclient:onlyVerbs=create +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// SubjectRulesReview is a resource you can create to determine which actions another user can perform in a namespace +type SubjectRulesReview struct { + metav1.TypeMeta `json:",inline"` + + // Spec adds information about how to conduct the check + Spec SubjectRulesReviewSpec `json:"spec" protobuf:"bytes,1,opt,name=spec"` + + // Status is completed by the server to tell which permissions you have + Status SubjectRulesReviewStatus `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"` +} + +// SubjectRulesReviewSpec adds information about how to conduct the check +type SubjectRulesReviewSpec struct { + // User is optional. At least one of User and Groups must be specified. + User string `json:"user" protobuf:"bytes,1,opt,name=user"` + // Groups is optional. Groups is the list of groups to which the User belongs. At least one of User and Groups must be specified. + Groups []string `json:"groups" protobuf:"bytes,2,rep,name=groups"` + // Scopes to use for the evaluation. Empty means "use the unscoped (full) permissions of the user/groups". + Scopes OptionalScopes `json:"scopes" protobuf:"bytes,3,opt,name=scopes"` +} + +// SubjectRulesReviewStatus is contains the result of a rules check +type SubjectRulesReviewStatus struct { + // Rules is the list of rules (no particular sort) that are allowed for the subject + Rules []PolicyRule `json:"rules" protobuf:"bytes,1,rep,name=rules"` + // EvaluationError can appear in combination with Rules. It means some error happened during evaluation + // that may have prevented additional rules from being populated. + EvaluationError string `json:"evaluationError,omitempty" protobuf:"bytes,2,opt,name=evaluationError"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ResourceAccessReviewResponse describes who can perform the action +type ResourceAccessReviewResponse struct { + metav1.TypeMeta `json:",inline"` + + // Namespace is the namespace used for the access review + Namespace string `json:"namespace,omitempty" protobuf:"bytes,1,opt,name=namespace"` + // UsersSlice is the list of users who can perform the action + // +k8s:conversion-gen=false + UsersSlice []string `json:"users" protobuf:"bytes,2,rep,name=users"` + // GroupsSlice is the list of groups who can perform the action + // +k8s:conversion-gen=false + GroupsSlice []string `json:"groups" protobuf:"bytes,3,rep,name=groups"` + + // EvaluationError is an indication that some error occurred during resolution, but partial results can still be returned. + // It is entirely possible to get an error and be able to continue determine authorization status in spite of it. This is + // most common when a bound role is missing, but enough roles are still present and bound to reason about the request. + EvaluationError string `json:"evalutionError" protobuf:"bytes,4,opt,name=evalutionError"` +} + +// +genclient +// +genclient:nonNamespaced +// +genclient:skipVerbs=get,list,create,update,patch,delete,deleteCollection,watch +// +genclient:method=Create,verb=create,result=ResourceAccessReviewResponse +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ResourceAccessReview is a means to request a list of which users and groups are authorized to perform the +// action specified by spec +type ResourceAccessReview struct { + metav1.TypeMeta `json:",inline"` + + // Action describes the action being tested. + Action `json:",inline" protobuf:"bytes,1,opt,name=Action"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// SubjectAccessReviewResponse describes whether or not a user or group can perform an action +type SubjectAccessReviewResponse struct { + metav1.TypeMeta `json:",inline"` + + // Namespace is the namespace used for the access review + Namespace string `json:"namespace,omitempty" protobuf:"bytes,1,opt,name=namespace"` + // Allowed is required. True if the action would be allowed, false otherwise. + Allowed bool `json:"allowed" protobuf:"varint,2,opt,name=allowed"` + // Reason is optional. It indicates why a request was allowed or denied. + Reason string `json:"reason,omitempty" protobuf:"bytes,3,opt,name=reason"` + // EvaluationError is an indication that some error occurred during the authorization check. + // It is entirely possible to get an error and be able to continue determine authorization status in spite of it. This is + // most common when a bound role is missing, but enough roles are still present and bound to reason about the request. + EvaluationError string `json:"evaluationError,omitempty" protobuf:"bytes,4,opt,name=evaluationError"` +} + +// OptionalScopes is an array that may also be left nil to distinguish between set and unset. +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +type OptionalScopes []string + +func (t OptionalScopes) String() string { + return fmt.Sprintf("%v", []string(t)) +} + +// +genclient +// +genclient:nonNamespaced +// +genclient:skipVerbs=get,list,create,update,patch,delete,deleteCollection,watch +// +genclient:method=Create,verb=create,result=SubjectAccessReviewResponse +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// SubjectAccessReview is an object for requesting information about whether a user or group can perform an action +type SubjectAccessReview struct { + metav1.TypeMeta `json:",inline"` + + // Action describes the action being tested. + Action `json:",inline" protobuf:"bytes,1,opt,name=Action"` + // User is optional. If both User and Groups are empty, the current authenticated user is used. + User string `json:"user" protobuf:"bytes,2,opt,name=user"` + // GroupsSlice is optional. Groups is the list of groups to which the User belongs. + // +k8s:conversion-gen=false + GroupsSlice []string `json:"groups" protobuf:"bytes,3,rep,name=groups"` + // Scopes to use for the evaluation. Empty means "use the unscoped (full) permissions of the user/groups". + // Nil for a self-SAR, means "use the scopes on this request". + // Nil for a regular SAR, means the same as empty. + // +k8s:conversion-gen=false + Scopes OptionalScopes `json:"scopes" protobuf:"bytes,4,rep,name=scopes"` +} + +// +genclient +// +genclient:skipVerbs=get,list,create,update,patch,delete,deleteCollection,watch +// +genclient:method=Create,verb=create,result=ResourceAccessReviewResponse +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// LocalResourceAccessReview is a means to request a list of which users and groups are authorized to perform the action specified by spec in a particular namespace +type LocalResourceAccessReview struct { + metav1.TypeMeta `json:",inline"` + + // Action describes the action being tested. The Namespace element is FORCED to the current namespace. + Action `json:",inline" protobuf:"bytes,1,opt,name=Action"` +} + +// +genclient +// +genclient:skipVerbs=get,list,create,update,patch,delete,deleteCollection,watch +// +genclient:method=Create,verb=create,result=SubjectAccessReviewResponse +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// LocalSubjectAccessReview is an object for requesting information about whether a user or group can perform an action in a particular namespace +type LocalSubjectAccessReview struct { + metav1.TypeMeta `json:",inline"` + + // Action describes the action being tested. The Namespace element is FORCED to the current namespace. + Action `json:",inline" protobuf:"bytes,1,opt,name=Action"` + // User is optional. If both User and Groups are empty, the current authenticated user is used. + User string `json:"user" protobuf:"bytes,2,opt,name=user"` + // Groups is optional. Groups is the list of groups to which the User belongs. + // +k8s:conversion-gen=false + GroupsSlice []string `json:"groups" protobuf:"bytes,3,rep,name=groups"` + // Scopes to use for the evaluation. Empty means "use the unscoped (full) permissions of the user/groups". + // Nil for a self-SAR, means "use the scopes on this request". + // Nil for a regular SAR, means the same as empty. + // +k8s:conversion-gen=false + Scopes OptionalScopes `json:"scopes" protobuf:"bytes,4,rep,name=scopes"` +} + +// Action describes a request to the API server +type Action struct { + // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces + Namespace string `json:"namespace" protobuf:"bytes,1,opt,name=namespace"` + // Verb is one of: get, list, watch, create, update, delete + Verb string `json:"verb" protobuf:"bytes,2,opt,name=verb"` + // Group is the API group of the resource + // Serialized as resourceAPIGroup to avoid confusion with the 'groups' field when inlined + Group string `json:"resourceAPIGroup" protobuf:"bytes,3,opt,name=resourceAPIGroup"` + // Version is the API version of the resource + // Serialized as resourceAPIVersion to avoid confusion with TypeMeta.apiVersion and ObjectMeta.resourceVersion when inlined + Version string `json:"resourceAPIVersion" protobuf:"bytes,4,opt,name=resourceAPIVersion"` + // Resource is one of the existing resource types + Resource string `json:"resource" protobuf:"bytes,5,opt,name=resource"` + // ResourceName is the name of the resource being requested for a "get" or deleted for a "delete" + ResourceName string `json:"resourceName" protobuf:"bytes,6,opt,name=resourceName"` + // Path is the path of a non resource URL + Path string `json:"path" protobuf:"bytes,8,opt,name=path"` + // IsNonResourceURL is true if this is a request for a non-resource URL (outside of the resource hierarchy) + IsNonResourceURL bool `json:"isNonResourceURL" protobuf:"varint,9,opt,name=isNonResourceURL"` + // Content is the actual content of the request for create and update + // +kubebuilder:pruning:PreserveUnknownFields + Content kruntime.RawExtension `json:"content,omitempty" protobuf:"bytes,7,opt,name=content"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RoleBindingList is a collection of RoleBindings +type RoleBindingList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of RoleBindings + Items []RoleBinding `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RoleList is a collection of Roles +type RoleList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of Roles + Items []Role `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterRole is a logical grouping of PolicyRules that can be referenced as a unit by ClusterRoleBindings. +type ClusterRole struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Rules holds all the PolicyRules for this ClusterRole + Rules []PolicyRule `json:"rules" protobuf:"bytes,2,rep,name=rules"` + + // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. + // If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be + // stomped by the controller. + AggregationRule *rbacv1.AggregationRule `json:"aggregationRule,omitempty" protobuf:"bytes,3,opt,name=aggregationRule"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterRoleBinding references a ClusterRole, but not contain it. It can reference any ClusterRole in the same namespace or in the global namespace. +// It adds who information via (Users and Groups) OR Subjects and namespace information by which namespace it exists in. +// ClusterRoleBindings in a given namespace only have effect in that namespace (excepting the master namespace which has power in all namespaces). +type ClusterRoleBinding struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // UserNames holds all the usernames directly bound to the role. + // This field should only be specified when supporting legacy clients and servers. + // See Subjects for further details. + // +k8s:conversion-gen=false + // +optional + UserNames OptionalNames `json:"userNames" protobuf:"bytes,2,rep,name=userNames"` + // GroupNames holds all the groups directly bound to the role. + // This field should only be specified when supporting legacy clients and servers. + // See Subjects for further details. + // +k8s:conversion-gen=false + // +optional + GroupNames OptionalNames `json:"groupNames" protobuf:"bytes,3,rep,name=groupNames"` + // Subjects hold object references to authorize with this rule. + // This field is ignored if UserNames or GroupNames are specified to support legacy clients and servers. + // Thus newer clients that do not need to support backwards compatibility should send + // only fully qualified Subjects and should omit the UserNames and GroupNames fields. + // Clients that need to support backwards compatibility can use this field to build the UserNames and GroupNames. + Subjects []corev1.ObjectReference `json:"subjects" protobuf:"bytes,4,rep,name=subjects"` + + // RoleRef can only reference the current namespace and the global namespace. + // If the ClusterRoleRef cannot be resolved, the Authorizer must return an error. + // Since Policy is a singleton, this is sufficient knowledge to locate a role. + RoleRef corev1.ObjectReference `json:"roleRef" protobuf:"bytes,5,opt,name=roleRef"` +} + +// NamedClusterRole relates a name with a cluster role +type NamedClusterRole struct { + // Name is the name of the cluster role + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // Role is the cluster role being named + Role ClusterRole `json:"role" protobuf:"bytes,2,opt,name=role"` +} + +// NamedClusterRoleBinding relates a name with a cluster role binding +type NamedClusterRoleBinding struct { + // Name is the name of the cluster role binding + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // RoleBinding is the cluster role binding being named + RoleBinding ClusterRoleBinding `json:"roleBinding" protobuf:"bytes,2,opt,name=roleBinding"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterRoleBindingList is a collection of ClusterRoleBindings +type ClusterRoleBindingList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of ClusterRoleBindings + Items []ClusterRoleBinding `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterRoleList is a collection of ClusterRoles +type ClusterRoleList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of ClusterRoles + Items []ClusterRole `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RoleBindingRestriction is an object that can be matched against a subject +// (user, group, or service account) to determine whether rolebindings on that +// subject are allowed in the namespace to which the RoleBindingRestriction +// belongs. If any one of those RoleBindingRestriction objects matches +// a subject, rolebindings on that subject in the namespace are allowed. +type RoleBindingRestriction struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines the matcher. + Spec RoleBindingRestrictionSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` +} + +// RoleBindingRestrictionSpec defines a rolebinding restriction. Exactly one +// field must be non-nil. +type RoleBindingRestrictionSpec struct { + // UserRestriction matches against user subjects. + // +nullable + UserRestriction *UserRestriction `json:"userrestriction" protobuf:"bytes,1,opt,name=userrestriction"` + + // GroupRestriction matches against group subjects. + // +nullable + GroupRestriction *GroupRestriction `json:"grouprestriction" protobuf:"bytes,2,opt,name=grouprestriction"` + + // ServiceAccountRestriction matches against service-account subjects. + // +nullable + ServiceAccountRestriction *ServiceAccountRestriction `json:"serviceaccountrestriction" protobuf:"bytes,3,opt,name=serviceaccountrestriction"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RoleBindingRestrictionList is a collection of RoleBindingRestriction objects. +type RoleBindingRestrictionList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of RoleBindingRestriction objects. + Items []RoleBindingRestriction `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// UserRestriction matches a user either by a string match on the user name, +// a string match on the name of a group to which the user belongs, or a label +// selector applied to the user labels. +type UserRestriction struct { + // Users specifies a list of literal user names. + Users []string `json:"users" protobuf:"bytes,1,rep,name=users"` + + // Groups specifies a list of literal group names. + // +nullable + Groups []string `json:"groups" protobuf:"bytes,2,rep,name=groups"` + + // Selectors specifies a list of label selectors over user labels. + // +nullable + Selectors []metav1.LabelSelector `json:"labels" protobuf:"bytes,3,rep,name=labels"` +} + +// GroupRestriction matches a group either by a string match on the group name +// or a label selector applied to group labels. +type GroupRestriction struct { + // Groups is a list of groups used to match against an individual user's + // groups. If the user is a member of one of the whitelisted groups, the user + // is allowed to be bound to a role. + // +nullable + Groups []string `json:"groups" protobuf:"bytes,1,rep,name=groups"` + + // Selectors specifies a list of label selectors over group labels. + // +nullable + Selectors []metav1.LabelSelector `json:"labels" protobuf:"bytes,2,rep,name=labels"` +} + +// ServiceAccountRestriction matches a service account by a string match on +// either the service-account name or the name of the service account's +// namespace. +type ServiceAccountRestriction struct { + // ServiceAccounts specifies a list of literal service-account names. + ServiceAccounts []ServiceAccountReference `json:"serviceaccounts" protobuf:"bytes,1,rep,name=serviceaccounts"` + + // Namespaces specifies a list of literal namespace names. + Namespaces []string `json:"namespaces" protobuf:"bytes,2,rep,name=namespaces"` +} + +// ServiceAccountReference specifies a service account and namespace by their +// names. +type ServiceAccountReference struct { + // Name is the name of the service account. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + + // Namespace is the namespace of the service account. Service accounts from + // inside the whitelisted namespaces are allowed to be bound to roles. If + // Namespace is empty, then the namespace of the RoleBindingRestriction in + // which the ServiceAccountReference is embedded is used. + Namespace string `json:"namespace" protobuf:"bytes,2,opt,name=namespace"` +} diff --git a/vendor/github.com/openshift/api/authorization/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/authorization/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..16cbd2e4fb45c --- /dev/null +++ b/vendor/github.com/openshift/api/authorization/v1/zz_generated.deepcopy.go @@ -0,0 +1,993 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Action) DeepCopyInto(out *Action) { + *out = *in + in.Content.DeepCopyInto(&out.Content) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Action. +func (in *Action) DeepCopy() *Action { + if in == nil { + return nil + } + out := new(Action) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterRole) DeepCopyInto(out *ClusterRole) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]PolicyRule, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.AggregationRule != nil { + in, out := &in.AggregationRule, &out.AggregationRule + *out = new(rbacv1.AggregationRule) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterRole. +func (in *ClusterRole) DeepCopy() *ClusterRole { + if in == nil { + return nil + } + out := new(ClusterRole) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterRole) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterRoleBinding) DeepCopyInto(out *ClusterRoleBinding) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.UserNames != nil { + in, out := &in.UserNames, &out.UserNames + *out = make(OptionalNames, len(*in)) + copy(*out, *in) + } + if in.GroupNames != nil { + in, out := &in.GroupNames, &out.GroupNames + *out = make(OptionalNames, len(*in)) + copy(*out, *in) + } + if in.Subjects != nil { + in, out := &in.Subjects, &out.Subjects + *out = make([]corev1.ObjectReference, len(*in)) + copy(*out, *in) + } + out.RoleRef = in.RoleRef + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterRoleBinding. +func (in *ClusterRoleBinding) DeepCopy() *ClusterRoleBinding { + if in == nil { + return nil + } + out := new(ClusterRoleBinding) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterRoleBinding) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterRoleBindingList) DeepCopyInto(out *ClusterRoleBindingList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterRoleBinding, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterRoleBindingList. +func (in *ClusterRoleBindingList) DeepCopy() *ClusterRoleBindingList { + if in == nil { + return nil + } + out := new(ClusterRoleBindingList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterRoleBindingList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterRoleList) DeepCopyInto(out *ClusterRoleList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterRole, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterRoleList. +func (in *ClusterRoleList) DeepCopy() *ClusterRoleList { + if in == nil { + return nil + } + out := new(ClusterRoleList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterRoleList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GroupRestriction) DeepCopyInto(out *GroupRestriction) { + *out = *in + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Selectors != nil { + in, out := &in.Selectors, &out.Selectors + *out = make([]metav1.LabelSelector, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GroupRestriction. +func (in *GroupRestriction) DeepCopy() *GroupRestriction { + if in == nil { + return nil + } + out := new(GroupRestriction) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IsPersonalSubjectAccessReview) DeepCopyInto(out *IsPersonalSubjectAccessReview) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IsPersonalSubjectAccessReview. +func (in *IsPersonalSubjectAccessReview) DeepCopy() *IsPersonalSubjectAccessReview { + if in == nil { + return nil + } + out := new(IsPersonalSubjectAccessReview) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *IsPersonalSubjectAccessReview) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LocalResourceAccessReview) DeepCopyInto(out *LocalResourceAccessReview) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Action.DeepCopyInto(&out.Action) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocalResourceAccessReview. +func (in *LocalResourceAccessReview) DeepCopy() *LocalResourceAccessReview { + if in == nil { + return nil + } + out := new(LocalResourceAccessReview) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *LocalResourceAccessReview) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LocalSubjectAccessReview) DeepCopyInto(out *LocalSubjectAccessReview) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Action.DeepCopyInto(&out.Action) + if in.GroupsSlice != nil { + in, out := &in.GroupsSlice, &out.GroupsSlice + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make(OptionalScopes, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocalSubjectAccessReview. +func (in *LocalSubjectAccessReview) DeepCopy() *LocalSubjectAccessReview { + if in == nil { + return nil + } + out := new(LocalSubjectAccessReview) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *LocalSubjectAccessReview) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamedClusterRole) DeepCopyInto(out *NamedClusterRole) { + *out = *in + in.Role.DeepCopyInto(&out.Role) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamedClusterRole. +func (in *NamedClusterRole) DeepCopy() *NamedClusterRole { + if in == nil { + return nil + } + out := new(NamedClusterRole) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamedClusterRoleBinding) DeepCopyInto(out *NamedClusterRoleBinding) { + *out = *in + in.RoleBinding.DeepCopyInto(&out.RoleBinding) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamedClusterRoleBinding. +func (in *NamedClusterRoleBinding) DeepCopy() *NamedClusterRoleBinding { + if in == nil { + return nil + } + out := new(NamedClusterRoleBinding) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamedRole) DeepCopyInto(out *NamedRole) { + *out = *in + in.Role.DeepCopyInto(&out.Role) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamedRole. +func (in *NamedRole) DeepCopy() *NamedRole { + if in == nil { + return nil + } + out := new(NamedRole) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamedRoleBinding) DeepCopyInto(out *NamedRoleBinding) { + *out = *in + in.RoleBinding.DeepCopyInto(&out.RoleBinding) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamedRoleBinding. +func (in *NamedRoleBinding) DeepCopy() *NamedRoleBinding { + if in == nil { + return nil + } + out := new(NamedRoleBinding) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in OptionalNames) DeepCopyInto(out *OptionalNames) { + { + in := &in + *out = make(OptionalNames, len(*in)) + copy(*out, *in) + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OptionalNames. +func (in OptionalNames) DeepCopy() OptionalNames { + if in == nil { + return nil + } + out := new(OptionalNames) + in.DeepCopyInto(out) + return *out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in OptionalScopes) DeepCopyInto(out *OptionalScopes) { + { + in := &in + *out = make(OptionalScopes, len(*in)) + copy(*out, *in) + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OptionalScopes. +func (in OptionalScopes) DeepCopy() OptionalScopes { + if in == nil { + return nil + } + out := new(OptionalScopes) + in.DeepCopyInto(out) + return *out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PolicyRule) DeepCopyInto(out *PolicyRule) { + *out = *in + if in.Verbs != nil { + in, out := &in.Verbs, &out.Verbs + *out = make([]string, len(*in)) + copy(*out, *in) + } + in.AttributeRestrictions.DeepCopyInto(&out.AttributeRestrictions) + if in.APIGroups != nil { + in, out := &in.APIGroups, &out.APIGroups + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ResourceNames != nil { + in, out := &in.ResourceNames, &out.ResourceNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.NonResourceURLsSlice != nil { + in, out := &in.NonResourceURLsSlice, &out.NonResourceURLsSlice + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PolicyRule. +func (in *PolicyRule) DeepCopy() *PolicyRule { + if in == nil { + return nil + } + out := new(PolicyRule) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceAccessReview) DeepCopyInto(out *ResourceAccessReview) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Action.DeepCopyInto(&out.Action) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceAccessReview. +func (in *ResourceAccessReview) DeepCopy() *ResourceAccessReview { + if in == nil { + return nil + } + out := new(ResourceAccessReview) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ResourceAccessReview) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceAccessReviewResponse) DeepCopyInto(out *ResourceAccessReviewResponse) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.UsersSlice != nil { + in, out := &in.UsersSlice, &out.UsersSlice + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.GroupsSlice != nil { + in, out := &in.GroupsSlice, &out.GroupsSlice + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceAccessReviewResponse. +func (in *ResourceAccessReviewResponse) DeepCopy() *ResourceAccessReviewResponse { + if in == nil { + return nil + } + out := new(ResourceAccessReviewResponse) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ResourceAccessReviewResponse) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Role) DeepCopyInto(out *Role) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]PolicyRule, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Role. +func (in *Role) DeepCopy() *Role { + if in == nil { + return nil + } + out := new(Role) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Role) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RoleBinding) DeepCopyInto(out *RoleBinding) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.UserNames != nil { + in, out := &in.UserNames, &out.UserNames + *out = make(OptionalNames, len(*in)) + copy(*out, *in) + } + if in.GroupNames != nil { + in, out := &in.GroupNames, &out.GroupNames + *out = make(OptionalNames, len(*in)) + copy(*out, *in) + } + if in.Subjects != nil { + in, out := &in.Subjects, &out.Subjects + *out = make([]corev1.ObjectReference, len(*in)) + copy(*out, *in) + } + out.RoleRef = in.RoleRef + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RoleBinding. +func (in *RoleBinding) DeepCopy() *RoleBinding { + if in == nil { + return nil + } + out := new(RoleBinding) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RoleBinding) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RoleBindingList) DeepCopyInto(out *RoleBindingList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]RoleBinding, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RoleBindingList. +func (in *RoleBindingList) DeepCopy() *RoleBindingList { + if in == nil { + return nil + } + out := new(RoleBindingList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RoleBindingList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RoleBindingRestriction) DeepCopyInto(out *RoleBindingRestriction) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RoleBindingRestriction. +func (in *RoleBindingRestriction) DeepCopy() *RoleBindingRestriction { + if in == nil { + return nil + } + out := new(RoleBindingRestriction) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RoleBindingRestriction) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RoleBindingRestrictionList) DeepCopyInto(out *RoleBindingRestrictionList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]RoleBindingRestriction, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RoleBindingRestrictionList. +func (in *RoleBindingRestrictionList) DeepCopy() *RoleBindingRestrictionList { + if in == nil { + return nil + } + out := new(RoleBindingRestrictionList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RoleBindingRestrictionList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RoleBindingRestrictionSpec) DeepCopyInto(out *RoleBindingRestrictionSpec) { + *out = *in + if in.UserRestriction != nil { + in, out := &in.UserRestriction, &out.UserRestriction + *out = new(UserRestriction) + (*in).DeepCopyInto(*out) + } + if in.GroupRestriction != nil { + in, out := &in.GroupRestriction, &out.GroupRestriction + *out = new(GroupRestriction) + (*in).DeepCopyInto(*out) + } + if in.ServiceAccountRestriction != nil { + in, out := &in.ServiceAccountRestriction, &out.ServiceAccountRestriction + *out = new(ServiceAccountRestriction) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RoleBindingRestrictionSpec. +func (in *RoleBindingRestrictionSpec) DeepCopy() *RoleBindingRestrictionSpec { + if in == nil { + return nil + } + out := new(RoleBindingRestrictionSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RoleList) DeepCopyInto(out *RoleList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Role, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RoleList. +func (in *RoleList) DeepCopy() *RoleList { + if in == nil { + return nil + } + out := new(RoleList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RoleList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SelfSubjectRulesReview) DeepCopyInto(out *SelfSubjectRulesReview) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SelfSubjectRulesReview. +func (in *SelfSubjectRulesReview) DeepCopy() *SelfSubjectRulesReview { + if in == nil { + return nil + } + out := new(SelfSubjectRulesReview) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *SelfSubjectRulesReview) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SelfSubjectRulesReviewSpec) DeepCopyInto(out *SelfSubjectRulesReviewSpec) { + *out = *in + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make(OptionalScopes, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SelfSubjectRulesReviewSpec. +func (in *SelfSubjectRulesReviewSpec) DeepCopy() *SelfSubjectRulesReviewSpec { + if in == nil { + return nil + } + out := new(SelfSubjectRulesReviewSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceAccountReference) DeepCopyInto(out *ServiceAccountReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceAccountReference. +func (in *ServiceAccountReference) DeepCopy() *ServiceAccountReference { + if in == nil { + return nil + } + out := new(ServiceAccountReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceAccountRestriction) DeepCopyInto(out *ServiceAccountRestriction) { + *out = *in + if in.ServiceAccounts != nil { + in, out := &in.ServiceAccounts, &out.ServiceAccounts + *out = make([]ServiceAccountReference, len(*in)) + copy(*out, *in) + } + if in.Namespaces != nil { + in, out := &in.Namespaces, &out.Namespaces + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceAccountRestriction. +func (in *ServiceAccountRestriction) DeepCopy() *ServiceAccountRestriction { + if in == nil { + return nil + } + out := new(ServiceAccountRestriction) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SubjectAccessReview) DeepCopyInto(out *SubjectAccessReview) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Action.DeepCopyInto(&out.Action) + if in.GroupsSlice != nil { + in, out := &in.GroupsSlice, &out.GroupsSlice + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make(OptionalScopes, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubjectAccessReview. +func (in *SubjectAccessReview) DeepCopy() *SubjectAccessReview { + if in == nil { + return nil + } + out := new(SubjectAccessReview) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *SubjectAccessReview) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SubjectAccessReviewResponse) DeepCopyInto(out *SubjectAccessReviewResponse) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubjectAccessReviewResponse. +func (in *SubjectAccessReviewResponse) DeepCopy() *SubjectAccessReviewResponse { + if in == nil { + return nil + } + out := new(SubjectAccessReviewResponse) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *SubjectAccessReviewResponse) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SubjectRulesReview) DeepCopyInto(out *SubjectRulesReview) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubjectRulesReview. +func (in *SubjectRulesReview) DeepCopy() *SubjectRulesReview { + if in == nil { + return nil + } + out := new(SubjectRulesReview) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *SubjectRulesReview) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SubjectRulesReviewSpec) DeepCopyInto(out *SubjectRulesReviewSpec) { + *out = *in + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make(OptionalScopes, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubjectRulesReviewSpec. +func (in *SubjectRulesReviewSpec) DeepCopy() *SubjectRulesReviewSpec { + if in == nil { + return nil + } + out := new(SubjectRulesReviewSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SubjectRulesReviewStatus) DeepCopyInto(out *SubjectRulesReviewStatus) { + *out = *in + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]PolicyRule, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubjectRulesReviewStatus. +func (in *SubjectRulesReviewStatus) DeepCopy() *SubjectRulesReviewStatus { + if in == nil { + return nil + } + out := new(SubjectRulesReviewStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UserRestriction) DeepCopyInto(out *UserRestriction) { + *out = *in + if in.Users != nil { + in, out := &in.Users, &out.Users + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Selectors != nil { + in, out := &in.Selectors, &out.Selectors + *out = make([]metav1.LabelSelector, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserRestriction. +func (in *UserRestriction) DeepCopy() *UserRestriction { + if in == nil { + return nil + } + out := new(UserRestriction) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/authorization/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/authorization/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000000..8bce982f19966 --- /dev/null +++ b/vendor/github.com/openshift/api/authorization/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,354 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_Action = map[string]string{ + "": "Action describes a request to the API server", + "namespace": "Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces", + "verb": "Verb is one of: get, list, watch, create, update, delete", + "resourceAPIGroup": "Group is the API group of the resource Serialized as resourceAPIGroup to avoid confusion with the 'groups' field when inlined", + "resourceAPIVersion": "Version is the API version of the resource Serialized as resourceAPIVersion to avoid confusion with TypeMeta.apiVersion and ObjectMeta.resourceVersion when inlined", + "resource": "Resource is one of the existing resource types", + "resourceName": "ResourceName is the name of the resource being requested for a \"get\" or deleted for a \"delete\"", + "path": "Path is the path of a non resource URL", + "isNonResourceURL": "IsNonResourceURL is true if this is a request for a non-resource URL (outside of the resource hierarchy)", + "content": "Content is the actual content of the request for create and update", +} + +func (Action) SwaggerDoc() map[string]string { + return map_Action +} + +var map_ClusterRole = map[string]string{ + "": "ClusterRole is a logical grouping of PolicyRules that can be referenced as a unit by ClusterRoleBindings.", + "rules": "Rules holds all the PolicyRules for this ClusterRole", + "aggregationRule": "AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.", +} + +func (ClusterRole) SwaggerDoc() map[string]string { + return map_ClusterRole +} + +var map_ClusterRoleBinding = map[string]string{ + "": "ClusterRoleBinding references a ClusterRole, but not contain it. It can reference any ClusterRole in the same namespace or in the global namespace. It adds who information via (Users and Groups) OR Subjects and namespace information by which namespace it exists in. ClusterRoleBindings in a given namespace only have effect in that namespace (excepting the master namespace which has power in all namespaces).", + "userNames": "UserNames holds all the usernames directly bound to the role. This field should only be specified when supporting legacy clients and servers. See Subjects for further details.", + "groupNames": "GroupNames holds all the groups directly bound to the role. This field should only be specified when supporting legacy clients and servers. See Subjects for further details.", + "subjects": "Subjects hold object references to authorize with this rule. This field is ignored if UserNames or GroupNames are specified to support legacy clients and servers. Thus newer clients that do not need to support backwards compatibility should send only fully qualified Subjects and should omit the UserNames and GroupNames fields. Clients that need to support backwards compatibility can use this field to build the UserNames and GroupNames.", + "roleRef": "RoleRef can only reference the current namespace and the global namespace. If the ClusterRoleRef cannot be resolved, the Authorizer must return an error. Since Policy is a singleton, this is sufficient knowledge to locate a role.", +} + +func (ClusterRoleBinding) SwaggerDoc() map[string]string { + return map_ClusterRoleBinding +} + +var map_ClusterRoleBindingList = map[string]string{ + "": "ClusterRoleBindingList is a collection of ClusterRoleBindings", + "items": "Items is a list of ClusterRoleBindings", +} + +func (ClusterRoleBindingList) SwaggerDoc() map[string]string { + return map_ClusterRoleBindingList +} + +var map_ClusterRoleList = map[string]string{ + "": "ClusterRoleList is a collection of ClusterRoles", + "items": "Items is a list of ClusterRoles", +} + +func (ClusterRoleList) SwaggerDoc() map[string]string { + return map_ClusterRoleList +} + +var map_GroupRestriction = map[string]string{ + "": "GroupRestriction matches a group either by a string match on the group name or a label selector applied to group labels.", + "groups": "Groups is a list of groups used to match against an individual user's groups. If the user is a member of one of the whitelisted groups, the user is allowed to be bound to a role.", + "labels": "Selectors specifies a list of label selectors over group labels.", +} + +func (GroupRestriction) SwaggerDoc() map[string]string { + return map_GroupRestriction +} + +var map_IsPersonalSubjectAccessReview = map[string]string{ + "": "IsPersonalSubjectAccessReview is a marker for PolicyRule.AttributeRestrictions that denotes that subjectaccessreviews on self should be allowed", +} + +func (IsPersonalSubjectAccessReview) SwaggerDoc() map[string]string { + return map_IsPersonalSubjectAccessReview +} + +var map_LocalResourceAccessReview = map[string]string{ + "": "LocalResourceAccessReview is a means to request a list of which users and groups are authorized to perform the action specified by spec in a particular namespace", +} + +func (LocalResourceAccessReview) SwaggerDoc() map[string]string { + return map_LocalResourceAccessReview +} + +var map_LocalSubjectAccessReview = map[string]string{ + "": "LocalSubjectAccessReview is an object for requesting information about whether a user or group can perform an action in a particular namespace", + "user": "User is optional. If both User and Groups are empty, the current authenticated user is used.", + "groups": "Groups is optional. Groups is the list of groups to which the User belongs.", + "scopes": "Scopes to use for the evaluation. Empty means \"use the unscoped (full) permissions of the user/groups\". Nil for a self-SAR, means \"use the scopes on this request\". Nil for a regular SAR, means the same as empty.", +} + +func (LocalSubjectAccessReview) SwaggerDoc() map[string]string { + return map_LocalSubjectAccessReview +} + +var map_NamedClusterRole = map[string]string{ + "": "NamedClusterRole relates a name with a cluster role", + "name": "Name is the name of the cluster role", + "role": "Role is the cluster role being named", +} + +func (NamedClusterRole) SwaggerDoc() map[string]string { + return map_NamedClusterRole +} + +var map_NamedClusterRoleBinding = map[string]string{ + "": "NamedClusterRoleBinding relates a name with a cluster role binding", + "name": "Name is the name of the cluster role binding", + "roleBinding": "RoleBinding is the cluster role binding being named", +} + +func (NamedClusterRoleBinding) SwaggerDoc() map[string]string { + return map_NamedClusterRoleBinding +} + +var map_NamedRole = map[string]string{ + "": "NamedRole relates a Role with a name", + "name": "Name is the name of the role", + "role": "Role is the role being named", +} + +func (NamedRole) SwaggerDoc() map[string]string { + return map_NamedRole +} + +var map_NamedRoleBinding = map[string]string{ + "": "NamedRoleBinding relates a role binding with a name", + "name": "Name is the name of the role binding", + "roleBinding": "RoleBinding is the role binding being named", +} + +func (NamedRoleBinding) SwaggerDoc() map[string]string { + return map_NamedRoleBinding +} + +var map_PolicyRule = map[string]string{ + "": "PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.", + "verbs": "Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.", + "attributeRestrictions": "AttributeRestrictions will vary depending on what the Authorizer/AuthorizationAttributeBuilder pair supports. If the Authorizer does not recognize how to handle the AttributeRestrictions, the Authorizer should report an error.", + "apiGroups": "APIGroups is the name of the APIGroup that contains the resources. If this field is empty, then both kubernetes and origin API groups are assumed. That means that if an action is requested against one of the enumerated resources in either the kubernetes or the origin API group, the request will be allowed", + "resources": "Resources is a list of resources this rule applies to. ResourceAll represents all resources.", + "resourceNames": "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.", + "nonResourceURLs": "NonResourceURLsSlice is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different.", +} + +func (PolicyRule) SwaggerDoc() map[string]string { + return map_PolicyRule +} + +var map_ResourceAccessReview = map[string]string{ + "": "ResourceAccessReview is a means to request a list of which users and groups are authorized to perform the action specified by spec", +} + +func (ResourceAccessReview) SwaggerDoc() map[string]string { + return map_ResourceAccessReview +} + +var map_ResourceAccessReviewResponse = map[string]string{ + "": "ResourceAccessReviewResponse describes who can perform the action", + "namespace": "Namespace is the namespace used for the access review", + "users": "UsersSlice is the list of users who can perform the action", + "groups": "GroupsSlice is the list of groups who can perform the action", + "evalutionError": "EvaluationError is an indication that some error occurred during resolution, but partial results can still be returned. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. This is most common when a bound role is missing, but enough roles are still present and bound to reason about the request.", +} + +func (ResourceAccessReviewResponse) SwaggerDoc() map[string]string { + return map_ResourceAccessReviewResponse +} + +var map_Role = map[string]string{ + "": "Role is a logical grouping of PolicyRules that can be referenced as a unit by RoleBindings.", + "rules": "Rules holds all the PolicyRules for this Role", +} + +func (Role) SwaggerDoc() map[string]string { + return map_Role +} + +var map_RoleBinding = map[string]string{ + "": "RoleBinding references a Role, but not contain it. It can reference any Role in the same namespace or in the global namespace. It adds who information via (Users and Groups) OR Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace (excepting the master namespace which has power in all namespaces).", + "userNames": "UserNames holds all the usernames directly bound to the role. This field should only be specified when supporting legacy clients and servers. See Subjects for further details.", + "groupNames": "GroupNames holds all the groups directly bound to the role. This field should only be specified when supporting legacy clients and servers. See Subjects for further details.", + "subjects": "Subjects hold object references to authorize with this rule. This field is ignored if UserNames or GroupNames are specified to support legacy clients and servers. Thus newer clients that do not need to support backwards compatibility should send only fully qualified Subjects and should omit the UserNames and GroupNames fields. Clients that need to support backwards compatibility can use this field to build the UserNames and GroupNames.", + "roleRef": "RoleRef can only reference the current namespace and the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error. Since Policy is a singleton, this is sufficient knowledge to locate a role.", +} + +func (RoleBinding) SwaggerDoc() map[string]string { + return map_RoleBinding +} + +var map_RoleBindingList = map[string]string{ + "": "RoleBindingList is a collection of RoleBindings", + "items": "Items is a list of RoleBindings", +} + +func (RoleBindingList) SwaggerDoc() map[string]string { + return map_RoleBindingList +} + +var map_RoleBindingRestriction = map[string]string{ + "": "RoleBindingRestriction is an object that can be matched against a subject (user, group, or service account) to determine whether rolebindings on that subject are allowed in the namespace to which the RoleBindingRestriction belongs. If any one of those RoleBindingRestriction objects matches a subject, rolebindings on that subject in the namespace are allowed.", + "spec": "Spec defines the matcher.", +} + +func (RoleBindingRestriction) SwaggerDoc() map[string]string { + return map_RoleBindingRestriction +} + +var map_RoleBindingRestrictionList = map[string]string{ + "": "RoleBindingRestrictionList is a collection of RoleBindingRestriction objects.", + "items": "Items is a list of RoleBindingRestriction objects.", +} + +func (RoleBindingRestrictionList) SwaggerDoc() map[string]string { + return map_RoleBindingRestrictionList +} + +var map_RoleBindingRestrictionSpec = map[string]string{ + "": "RoleBindingRestrictionSpec defines a rolebinding restriction. Exactly one field must be non-nil.", + "userrestriction": "UserRestriction matches against user subjects.", + "grouprestriction": "GroupRestriction matches against group subjects.", + "serviceaccountrestriction": "ServiceAccountRestriction matches against service-account subjects.", +} + +func (RoleBindingRestrictionSpec) SwaggerDoc() map[string]string { + return map_RoleBindingRestrictionSpec +} + +var map_RoleList = map[string]string{ + "": "RoleList is a collection of Roles", + "items": "Items is a list of Roles", +} + +func (RoleList) SwaggerDoc() map[string]string { + return map_RoleList +} + +var map_SelfSubjectRulesReview = map[string]string{ + "": "SelfSubjectRulesReview is a resource you can create to determine which actions you can perform in a namespace", + "spec": "Spec adds information about how to conduct the check", + "status": "Status is completed by the server to tell which permissions you have", +} + +func (SelfSubjectRulesReview) SwaggerDoc() map[string]string { + return map_SelfSubjectRulesReview +} + +var map_SelfSubjectRulesReviewSpec = map[string]string{ + "": "SelfSubjectRulesReviewSpec adds information about how to conduct the check", + "scopes": "Scopes to use for the evaluation. Empty means \"use the unscoped (full) permissions of the user/groups\". Nil means \"use the scopes on this request\".", +} + +func (SelfSubjectRulesReviewSpec) SwaggerDoc() map[string]string { + return map_SelfSubjectRulesReviewSpec +} + +var map_ServiceAccountReference = map[string]string{ + "": "ServiceAccountReference specifies a service account and namespace by their names.", + "name": "Name is the name of the service account.", + "namespace": "Namespace is the namespace of the service account. Service accounts from inside the whitelisted namespaces are allowed to be bound to roles. If Namespace is empty, then the namespace of the RoleBindingRestriction in which the ServiceAccountReference is embedded is used.", +} + +func (ServiceAccountReference) SwaggerDoc() map[string]string { + return map_ServiceAccountReference +} + +var map_ServiceAccountRestriction = map[string]string{ + "": "ServiceAccountRestriction matches a service account by a string match on either the service-account name or the name of the service account's namespace.", + "serviceaccounts": "ServiceAccounts specifies a list of literal service-account names.", + "namespaces": "Namespaces specifies a list of literal namespace names.", +} + +func (ServiceAccountRestriction) SwaggerDoc() map[string]string { + return map_ServiceAccountRestriction +} + +var map_SubjectAccessReview = map[string]string{ + "": "SubjectAccessReview is an object for requesting information about whether a user or group can perform an action", + "user": "User is optional. If both User and Groups are empty, the current authenticated user is used.", + "groups": "GroupsSlice is optional. Groups is the list of groups to which the User belongs.", + "scopes": "Scopes to use for the evaluation. Empty means \"use the unscoped (full) permissions of the user/groups\". Nil for a self-SAR, means \"use the scopes on this request\". Nil for a regular SAR, means the same as empty.", +} + +func (SubjectAccessReview) SwaggerDoc() map[string]string { + return map_SubjectAccessReview +} + +var map_SubjectAccessReviewResponse = map[string]string{ + "": "SubjectAccessReviewResponse describes whether or not a user or group can perform an action", + "namespace": "Namespace is the namespace used for the access review", + "allowed": "Allowed is required. True if the action would be allowed, false otherwise.", + "reason": "Reason is optional. It indicates why a request was allowed or denied.", + "evaluationError": "EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. This is most common when a bound role is missing, but enough roles are still present and bound to reason about the request.", +} + +func (SubjectAccessReviewResponse) SwaggerDoc() map[string]string { + return map_SubjectAccessReviewResponse +} + +var map_SubjectRulesReview = map[string]string{ + "": "SubjectRulesReview is a resource you can create to determine which actions another user can perform in a namespace", + "spec": "Spec adds information about how to conduct the check", + "status": "Status is completed by the server to tell which permissions you have", +} + +func (SubjectRulesReview) SwaggerDoc() map[string]string { + return map_SubjectRulesReview +} + +var map_SubjectRulesReviewSpec = map[string]string{ + "": "SubjectRulesReviewSpec adds information about how to conduct the check", + "user": "User is optional. At least one of User and Groups must be specified.", + "groups": "Groups is optional. Groups is the list of groups to which the User belongs. At least one of User and Groups must be specified.", + "scopes": "Scopes to use for the evaluation. Empty means \"use the unscoped (full) permissions of the user/groups\".", +} + +func (SubjectRulesReviewSpec) SwaggerDoc() map[string]string { + return map_SubjectRulesReviewSpec +} + +var map_SubjectRulesReviewStatus = map[string]string{ + "": "SubjectRulesReviewStatus is contains the result of a rules check", + "rules": "Rules is the list of rules (no particular sort) that are allowed for the subject", + "evaluationError": "EvaluationError can appear in combination with Rules. It means some error happened during evaluation that may have prevented additional rules from being populated.", +} + +func (SubjectRulesReviewStatus) SwaggerDoc() map[string]string { + return map_SubjectRulesReviewStatus +} + +var map_UserRestriction = map[string]string{ + "": "UserRestriction matches a user either by a string match on the user name, a string match on the name of a group to which the user belongs, or a label selector applied to the user labels.", + "users": "Users specifies a list of literal user names.", + "groups": "Groups specifies a list of literal group names.", + "labels": "Selectors specifies a list of label selectors over user labels.", +} + +func (UserRestriction) SwaggerDoc() map[string]string { + return map_UserRestriction +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/build/v1/consts.go b/vendor/github.com/openshift/api/build/v1/consts.go new file mode 100644 index 0000000000000..19c480764f8e6 --- /dev/null +++ b/vendor/github.com/openshift/api/build/v1/consts.go @@ -0,0 +1,200 @@ +package v1 + +// annotations +const ( + // BuildAnnotation is an annotation that identifies a Pod as being for a Build + BuildAnnotation = "openshift.io/build.name" + + // BuildConfigAnnotation is an annotation that identifies the BuildConfig that a Build was created from + BuildConfigAnnotation = "openshift.io/build-config.name" + + // BuildCloneAnnotation is an annotation whose value is the name of the build this build was cloned from + BuildCloneAnnotation = "openshift.io/build.clone-of" + + // BuildNumberAnnotation is an annotation whose value is the sequential number for this Build + BuildNumberAnnotation = "openshift.io/build.number" + + // BuildPodNameAnnotation is an annotation whose value is the name of the pod running this build + BuildPodNameAnnotation = "openshift.io/build.pod-name" + + // BuildJenkinsStatusJSONAnnotation is an annotation holding the Jenkins status information + BuildJenkinsStatusJSONAnnotation = "openshift.io/jenkins-status-json" + + // BuildJenkinsLogURLAnnotation is an annotation holding a link to the raw Jenkins build console log + BuildJenkinsLogURLAnnotation = "openshift.io/jenkins-log-url" + + // BuildJenkinsConsoleLogURLAnnotation is an annotation holding a link to the Jenkins build console log (including Jenkins chrome wrappering) + BuildJenkinsConsoleLogURLAnnotation = "openshift.io/jenkins-console-log-url" + + // BuildJenkinsBlueOceanLogURLAnnotation is an annotation holding a link to the Jenkins build console log via the Jenkins BlueOcean UI Plugin + BuildJenkinsBlueOceanLogURLAnnotation = "openshift.io/jenkins-blueocean-log-url" + + // BuildJenkinsBuildURIAnnotation is an annotation holding a link to the Jenkins build + BuildJenkinsBuildURIAnnotation = "openshift.io/jenkins-build-uri" + + // BuildSourceSecretMatchURIAnnotationPrefix is a prefix for annotations on a Secret which indicate a source URI against which the Secret can be used + BuildSourceSecretMatchURIAnnotationPrefix = "build.openshift.io/source-secret-match-uri-" + + // BuildConfigPausedAnnotation is an annotation that marks a BuildConfig as paused. + // New Builds cannot be instantiated from a paused BuildConfig. + BuildConfigPausedAnnotation = "openshift.io/build-config.paused" +) + +// labels +const ( + // BuildConfigLabel is the key of a Build label whose value is the ID of a BuildConfig + // on which the Build is based. NOTE: The value for this label may not contain the entire + // BuildConfig name because it will be truncated to maximum label length. + BuildConfigLabel = "openshift.io/build-config.name" + + // BuildLabel is the key of a Pod label whose value is the Name of a Build which is run. + // NOTE: The value for this label may not contain the entire Build name because it will be + // truncated to maximum label length. + BuildLabel = "openshift.io/build.name" + + // BuildRunPolicyLabel represents the start policy used to to start the build. + BuildRunPolicyLabel = "openshift.io/build.start-policy" + + // BuildConfigLabelDeprecated was used as BuildConfigLabel before adding namespaces. + // We keep it for backward compatibility. + BuildConfigLabelDeprecated = "buildconfig" +) + +const ( + // StatusReasonError is a generic reason for a build error condition. + StatusReasonError StatusReason = "Error" + + // StatusReasonCannotCreateBuildPodSpec is an error condition when the build + // strategy cannot create a build pod spec. + StatusReasonCannotCreateBuildPodSpec StatusReason = "CannotCreateBuildPodSpec" + + // StatusReasonCannotCreateBuildPod is an error condition when a build pod + // cannot be created. + StatusReasonCannotCreateBuildPod StatusReason = "CannotCreateBuildPod" + + // StatusReasonInvalidOutputReference is an error condition when the build + // output is an invalid reference. + StatusReasonInvalidOutputReference StatusReason = "InvalidOutputReference" + + // StatusReasonInvalidImageReference is an error condition when the build + // references an invalid image. + StatusReasonInvalidImageReference StatusReason = "InvalidImageReference" + + // StatusReasonCancelBuildFailed is an error condition when cancelling a build + // fails. + StatusReasonCancelBuildFailed StatusReason = "CancelBuildFailed" + + // StatusReasonBuildPodDeleted is an error condition when the build pod is + // deleted before build completion. + StatusReasonBuildPodDeleted StatusReason = "BuildPodDeleted" + + // StatusReasonExceededRetryTimeout is an error condition when the build has + // not completed and retrying the build times out. + StatusReasonExceededRetryTimeout StatusReason = "ExceededRetryTimeout" + + // StatusReasonMissingPushSecret indicates that the build is missing required + // secret for pushing the output image. + // The build will stay in the pending state until the secret is created, or the build times out. + StatusReasonMissingPushSecret StatusReason = "MissingPushSecret" + + // StatusReasonPostCommitHookFailed indicates the post-commit hook failed. + StatusReasonPostCommitHookFailed StatusReason = "PostCommitHookFailed" + + // StatusReasonPushImageToRegistryFailed indicates that an image failed to be + // pushed to the registry. + StatusReasonPushImageToRegistryFailed StatusReason = "PushImageToRegistryFailed" + + // StatusReasonPullBuilderImageFailed indicates that we failed to pull the + // builder image. + StatusReasonPullBuilderImageFailed StatusReason = "PullBuilderImageFailed" + + // StatusReasonFetchSourceFailed indicates that fetching the source of the + // build has failed. + StatusReasonFetchSourceFailed StatusReason = "FetchSourceFailed" + + // StatusReasonFetchImageContentFailed indicates that the fetching of an image and extracting + // its contents for inclusion in the build has failed. + StatusReasonFetchImageContentFailed StatusReason = "FetchImageContentFailed" + + // StatusReasonManageDockerfileFailed indicates that the set up of the Dockerfile for the build + // has failed. + StatusReasonManageDockerfileFailed StatusReason = "ManageDockerfileFailed" + + // StatusReasonInvalidContextDirectory indicates that the supplied + // contextDir does not exist + StatusReasonInvalidContextDirectory StatusReason = "InvalidContextDirectory" + + // StatusReasonCancelledBuild indicates that the build was cancelled by the + // user. + StatusReasonCancelledBuild StatusReason = "CancelledBuild" + + // StatusReasonDockerBuildFailed indicates that the container image build strategy has + // failed. + StatusReasonDockerBuildFailed StatusReason = "DockerBuildFailed" + + // StatusReasonBuildPodExists indicates that the build tried to create a + // build pod but one was already present. + StatusReasonBuildPodExists StatusReason = "BuildPodExists" + + // StatusReasonNoBuildContainerStatus indicates that the build failed because the + // the build pod has no container statuses. + StatusReasonNoBuildContainerStatus StatusReason = "NoBuildContainerStatus" + + // StatusReasonFailedContainer indicates that the pod for the build has at least + // one container with a non-zero exit status. + StatusReasonFailedContainer StatusReason = "FailedContainer" + + // StatusReasonUnresolvableEnvironmentVariable indicates that an error occurred processing + // the supplied options for environment variables in the build strategy environment + StatusReasonUnresolvableEnvironmentVariable StatusReason = "UnresolvableEnvironmentVariable" + + // StatusReasonGenericBuildFailed is the reason associated with a broad + // range of build failures. + StatusReasonGenericBuildFailed StatusReason = "GenericBuildFailed" + + // StatusReasonOutOfMemoryKilled indicates that the build pod was killed for its memory consumption + StatusReasonOutOfMemoryKilled StatusReason = "OutOfMemoryKilled" + + // StatusReasonCannotRetrieveServiceAccount is the reason associated with a failure + // to look up the service account associated with the BuildConfig. + StatusReasonCannotRetrieveServiceAccount StatusReason = "CannotRetrieveServiceAccount" + + // StatusReasonBuildPodEvicted is the reason a build fails due to the build pod being evicted + // from its node + StatusReasonBuildPodEvicted StatusReason = "BuildPodEvicted" +) + +// env vars +// WhitelistEnvVarNames is a list of special env vars allows s2i containers +var WhitelistEnvVarNames = []string{"BUILD_LOGLEVEL", "GIT_SSL_NO_VERIFY", "HTTP_PROXY", "HTTPS_PROXY", "LANG", "NO_PROXY"} + +// env vars +const ( + + // CustomBuildStrategyBaseImageKey is the environment variable that indicates the base image to be used when + // performing a custom build, if needed. + CustomBuildStrategyBaseImageKey = "OPENSHIFT_CUSTOM_BUILD_BASE_IMAGE" + + // AllowedUIDs is an environment variable that contains ranges of UIDs that are allowed in + // Source builder images + AllowedUIDs = "ALLOWED_UIDS" + // DropCapabilities is an environment variable that contains a list of capabilities to drop when + // executing a Source build + DropCapabilities = "DROP_CAPS" +) + +// keys inside of secrets and configmaps +const ( + // WebHookSecretKey is the key used to identify the value containing the webhook invocation + // secret within a secret referenced by a webhook trigger. + WebHookSecretKey = "WebHookSecretKey" + + // RegistryConfKey is the ConfigMap key for the build pod's registry configuration file. + RegistryConfKey = "registries.conf" + + // SignaturePolicyKey is the ConfigMap key for the build pod's image signature policy file. + SignaturePolicyKey = "policy.json" + + // ServiceCAKey is the ConfigMap key for the service signing certificate authority mounted into build pods. + ServiceCAKey = "service-ca.crt" +) diff --git a/vendor/github.com/openshift/api/build/v1/doc.go b/vendor/github.com/openshift/api/build/v1/doc.go new file mode 100644 index 0000000000000..9bc16f64b2359 --- /dev/null +++ b/vendor/github.com/openshift/api/build/v1/doc.go @@ -0,0 +1,8 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=github.com/openshift/origin/pkg/build/apis/build +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +groupName=build.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/build/v1/generated.pb.go b/vendor/github.com/openshift/api/build/v1/generated.pb.go new file mode 100644 index 0000000000000..59d48e5938e92 --- /dev/null +++ b/vendor/github.com/openshift/api/build/v1/generated.pb.go @@ -0,0 +1,16279 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: github.com/openshift/api/build/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v11 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *BinaryBuildRequestOptions) Reset() { *m = BinaryBuildRequestOptions{} } +func (*BinaryBuildRequestOptions) ProtoMessage() {} +func (*BinaryBuildRequestOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{0} +} +func (m *BinaryBuildRequestOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BinaryBuildRequestOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BinaryBuildRequestOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_BinaryBuildRequestOptions.Merge(m, src) +} +func (m *BinaryBuildRequestOptions) XXX_Size() int { + return m.Size() +} +func (m *BinaryBuildRequestOptions) XXX_DiscardUnknown() { + xxx_messageInfo_BinaryBuildRequestOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_BinaryBuildRequestOptions proto.InternalMessageInfo + +func (m *BinaryBuildSource) Reset() { *m = BinaryBuildSource{} } +func (*BinaryBuildSource) ProtoMessage() {} +func (*BinaryBuildSource) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{1} +} +func (m *BinaryBuildSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BinaryBuildSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BinaryBuildSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_BinaryBuildSource.Merge(m, src) +} +func (m *BinaryBuildSource) XXX_Size() int { + return m.Size() +} +func (m *BinaryBuildSource) XXX_DiscardUnknown() { + xxx_messageInfo_BinaryBuildSource.DiscardUnknown(m) +} + +var xxx_messageInfo_BinaryBuildSource proto.InternalMessageInfo + +func (m *BitbucketWebHookCause) Reset() { *m = BitbucketWebHookCause{} } +func (*BitbucketWebHookCause) ProtoMessage() {} +func (*BitbucketWebHookCause) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{2} +} +func (m *BitbucketWebHookCause) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BitbucketWebHookCause) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BitbucketWebHookCause) XXX_Merge(src proto.Message) { + xxx_messageInfo_BitbucketWebHookCause.Merge(m, src) +} +func (m *BitbucketWebHookCause) XXX_Size() int { + return m.Size() +} +func (m *BitbucketWebHookCause) XXX_DiscardUnknown() { + xxx_messageInfo_BitbucketWebHookCause.DiscardUnknown(m) +} + +var xxx_messageInfo_BitbucketWebHookCause proto.InternalMessageInfo + +func (m *Build) Reset() { *m = Build{} } +func (*Build) ProtoMessage() {} +func (*Build) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{3} +} +func (m *Build) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Build) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Build) XXX_Merge(src proto.Message) { + xxx_messageInfo_Build.Merge(m, src) +} +func (m *Build) XXX_Size() int { + return m.Size() +} +func (m *Build) XXX_DiscardUnknown() { + xxx_messageInfo_Build.DiscardUnknown(m) +} + +var xxx_messageInfo_Build proto.InternalMessageInfo + +func (m *BuildCondition) Reset() { *m = BuildCondition{} } +func (*BuildCondition) ProtoMessage() {} +func (*BuildCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{4} +} +func (m *BuildCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildCondition.Merge(m, src) +} +func (m *BuildCondition) XXX_Size() int { + return m.Size() +} +func (m *BuildCondition) XXX_DiscardUnknown() { + xxx_messageInfo_BuildCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildCondition proto.InternalMessageInfo + +func (m *BuildConfig) Reset() { *m = BuildConfig{} } +func (*BuildConfig) ProtoMessage() {} +func (*BuildConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{5} +} +func (m *BuildConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildConfig.Merge(m, src) +} +func (m *BuildConfig) XXX_Size() int { + return m.Size() +} +func (m *BuildConfig) XXX_DiscardUnknown() { + xxx_messageInfo_BuildConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildConfig proto.InternalMessageInfo + +func (m *BuildConfigList) Reset() { *m = BuildConfigList{} } +func (*BuildConfigList) ProtoMessage() {} +func (*BuildConfigList) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{6} +} +func (m *BuildConfigList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildConfigList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildConfigList) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildConfigList.Merge(m, src) +} +func (m *BuildConfigList) XXX_Size() int { + return m.Size() +} +func (m *BuildConfigList) XXX_DiscardUnknown() { + xxx_messageInfo_BuildConfigList.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildConfigList proto.InternalMessageInfo + +func (m *BuildConfigSpec) Reset() { *m = BuildConfigSpec{} } +func (*BuildConfigSpec) ProtoMessage() {} +func (*BuildConfigSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{7} +} +func (m *BuildConfigSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildConfigSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildConfigSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildConfigSpec.Merge(m, src) +} +func (m *BuildConfigSpec) XXX_Size() int { + return m.Size() +} +func (m *BuildConfigSpec) XXX_DiscardUnknown() { + xxx_messageInfo_BuildConfigSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildConfigSpec proto.InternalMessageInfo + +func (m *BuildConfigStatus) Reset() { *m = BuildConfigStatus{} } +func (*BuildConfigStatus) ProtoMessage() {} +func (*BuildConfigStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{8} +} +func (m *BuildConfigStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildConfigStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildConfigStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildConfigStatus.Merge(m, src) +} +func (m *BuildConfigStatus) XXX_Size() int { + return m.Size() +} +func (m *BuildConfigStatus) XXX_DiscardUnknown() { + xxx_messageInfo_BuildConfigStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildConfigStatus proto.InternalMessageInfo + +func (m *BuildList) Reset() { *m = BuildList{} } +func (*BuildList) ProtoMessage() {} +func (*BuildList) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{9} +} +func (m *BuildList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildList) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildList.Merge(m, src) +} +func (m *BuildList) XXX_Size() int { + return m.Size() +} +func (m *BuildList) XXX_DiscardUnknown() { + xxx_messageInfo_BuildList.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildList proto.InternalMessageInfo + +func (m *BuildLog) Reset() { *m = BuildLog{} } +func (*BuildLog) ProtoMessage() {} +func (*BuildLog) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{10} +} +func (m *BuildLog) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildLog) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildLog) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildLog.Merge(m, src) +} +func (m *BuildLog) XXX_Size() int { + return m.Size() +} +func (m *BuildLog) XXX_DiscardUnknown() { + xxx_messageInfo_BuildLog.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildLog proto.InternalMessageInfo + +func (m *BuildLogOptions) Reset() { *m = BuildLogOptions{} } +func (*BuildLogOptions) ProtoMessage() {} +func (*BuildLogOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{11} +} +func (m *BuildLogOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildLogOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildLogOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildLogOptions.Merge(m, src) +} +func (m *BuildLogOptions) XXX_Size() int { + return m.Size() +} +func (m *BuildLogOptions) XXX_DiscardUnknown() { + xxx_messageInfo_BuildLogOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildLogOptions proto.InternalMessageInfo + +func (m *BuildOutput) Reset() { *m = BuildOutput{} } +func (*BuildOutput) ProtoMessage() {} +func (*BuildOutput) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{12} +} +func (m *BuildOutput) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildOutput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildOutput) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildOutput.Merge(m, src) +} +func (m *BuildOutput) XXX_Size() int { + return m.Size() +} +func (m *BuildOutput) XXX_DiscardUnknown() { + xxx_messageInfo_BuildOutput.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildOutput proto.InternalMessageInfo + +func (m *BuildPostCommitSpec) Reset() { *m = BuildPostCommitSpec{} } +func (*BuildPostCommitSpec) ProtoMessage() {} +func (*BuildPostCommitSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{13} +} +func (m *BuildPostCommitSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildPostCommitSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildPostCommitSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildPostCommitSpec.Merge(m, src) +} +func (m *BuildPostCommitSpec) XXX_Size() int { + return m.Size() +} +func (m *BuildPostCommitSpec) XXX_DiscardUnknown() { + xxx_messageInfo_BuildPostCommitSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildPostCommitSpec proto.InternalMessageInfo + +func (m *BuildRequest) Reset() { *m = BuildRequest{} } +func (*BuildRequest) ProtoMessage() {} +func (*BuildRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{14} +} +func (m *BuildRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildRequest.Merge(m, src) +} +func (m *BuildRequest) XXX_Size() int { + return m.Size() +} +func (m *BuildRequest) XXX_DiscardUnknown() { + xxx_messageInfo_BuildRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildRequest proto.InternalMessageInfo + +func (m *BuildSource) Reset() { *m = BuildSource{} } +func (*BuildSource) ProtoMessage() {} +func (*BuildSource) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{15} +} +func (m *BuildSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildSource.Merge(m, src) +} +func (m *BuildSource) XXX_Size() int { + return m.Size() +} +func (m *BuildSource) XXX_DiscardUnknown() { + xxx_messageInfo_BuildSource.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildSource proto.InternalMessageInfo + +func (m *BuildSpec) Reset() { *m = BuildSpec{} } +func (*BuildSpec) ProtoMessage() {} +func (*BuildSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{16} +} +func (m *BuildSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildSpec.Merge(m, src) +} +func (m *BuildSpec) XXX_Size() int { + return m.Size() +} +func (m *BuildSpec) XXX_DiscardUnknown() { + xxx_messageInfo_BuildSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildSpec proto.InternalMessageInfo + +func (m *BuildStatus) Reset() { *m = BuildStatus{} } +func (*BuildStatus) ProtoMessage() {} +func (*BuildStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{17} +} +func (m *BuildStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildStatus.Merge(m, src) +} +func (m *BuildStatus) XXX_Size() int { + return m.Size() +} +func (m *BuildStatus) XXX_DiscardUnknown() { + xxx_messageInfo_BuildStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildStatus proto.InternalMessageInfo + +func (m *BuildStatusOutput) Reset() { *m = BuildStatusOutput{} } +func (*BuildStatusOutput) ProtoMessage() {} +func (*BuildStatusOutput) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{18} +} +func (m *BuildStatusOutput) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildStatusOutput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildStatusOutput) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildStatusOutput.Merge(m, src) +} +func (m *BuildStatusOutput) XXX_Size() int { + return m.Size() +} +func (m *BuildStatusOutput) XXX_DiscardUnknown() { + xxx_messageInfo_BuildStatusOutput.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildStatusOutput proto.InternalMessageInfo + +func (m *BuildStatusOutputTo) Reset() { *m = BuildStatusOutputTo{} } +func (*BuildStatusOutputTo) ProtoMessage() {} +func (*BuildStatusOutputTo) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{19} +} +func (m *BuildStatusOutputTo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildStatusOutputTo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildStatusOutputTo) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildStatusOutputTo.Merge(m, src) +} +func (m *BuildStatusOutputTo) XXX_Size() int { + return m.Size() +} +func (m *BuildStatusOutputTo) XXX_DiscardUnknown() { + xxx_messageInfo_BuildStatusOutputTo.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildStatusOutputTo proto.InternalMessageInfo + +func (m *BuildStrategy) Reset() { *m = BuildStrategy{} } +func (*BuildStrategy) ProtoMessage() {} +func (*BuildStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{20} +} +func (m *BuildStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildStrategy.Merge(m, src) +} +func (m *BuildStrategy) XXX_Size() int { + return m.Size() +} +func (m *BuildStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_BuildStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildStrategy proto.InternalMessageInfo + +func (m *BuildTriggerCause) Reset() { *m = BuildTriggerCause{} } +func (*BuildTriggerCause) ProtoMessage() {} +func (*BuildTriggerCause) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{21} +} +func (m *BuildTriggerCause) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildTriggerCause) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildTriggerCause) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildTriggerCause.Merge(m, src) +} +func (m *BuildTriggerCause) XXX_Size() int { + return m.Size() +} +func (m *BuildTriggerCause) XXX_DiscardUnknown() { + xxx_messageInfo_BuildTriggerCause.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildTriggerCause proto.InternalMessageInfo + +func (m *BuildTriggerPolicy) Reset() { *m = BuildTriggerPolicy{} } +func (*BuildTriggerPolicy) ProtoMessage() {} +func (*BuildTriggerPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{22} +} +func (m *BuildTriggerPolicy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BuildTriggerPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BuildTriggerPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_BuildTriggerPolicy.Merge(m, src) +} +func (m *BuildTriggerPolicy) XXX_Size() int { + return m.Size() +} +func (m *BuildTriggerPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_BuildTriggerPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_BuildTriggerPolicy proto.InternalMessageInfo + +func (m *CommonSpec) Reset() { *m = CommonSpec{} } +func (*CommonSpec) ProtoMessage() {} +func (*CommonSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{23} +} +func (m *CommonSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CommonSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CommonSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_CommonSpec.Merge(m, src) +} +func (m *CommonSpec) XXX_Size() int { + return m.Size() +} +func (m *CommonSpec) XXX_DiscardUnknown() { + xxx_messageInfo_CommonSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_CommonSpec proto.InternalMessageInfo + +func (m *CommonWebHookCause) Reset() { *m = CommonWebHookCause{} } +func (*CommonWebHookCause) ProtoMessage() {} +func (*CommonWebHookCause) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{24} +} +func (m *CommonWebHookCause) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CommonWebHookCause) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CommonWebHookCause) XXX_Merge(src proto.Message) { + xxx_messageInfo_CommonWebHookCause.Merge(m, src) +} +func (m *CommonWebHookCause) XXX_Size() int { + return m.Size() +} +func (m *CommonWebHookCause) XXX_DiscardUnknown() { + xxx_messageInfo_CommonWebHookCause.DiscardUnknown(m) +} + +var xxx_messageInfo_CommonWebHookCause proto.InternalMessageInfo + +func (m *ConfigMapBuildSource) Reset() { *m = ConfigMapBuildSource{} } +func (*ConfigMapBuildSource) ProtoMessage() {} +func (*ConfigMapBuildSource) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{25} +} +func (m *ConfigMapBuildSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConfigMapBuildSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ConfigMapBuildSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConfigMapBuildSource.Merge(m, src) +} +func (m *ConfigMapBuildSource) XXX_Size() int { + return m.Size() +} +func (m *ConfigMapBuildSource) XXX_DiscardUnknown() { + xxx_messageInfo_ConfigMapBuildSource.DiscardUnknown(m) +} + +var xxx_messageInfo_ConfigMapBuildSource proto.InternalMessageInfo + +func (m *CustomBuildStrategy) Reset() { *m = CustomBuildStrategy{} } +func (*CustomBuildStrategy) ProtoMessage() {} +func (*CustomBuildStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{26} +} +func (m *CustomBuildStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CustomBuildStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CustomBuildStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_CustomBuildStrategy.Merge(m, src) +} +func (m *CustomBuildStrategy) XXX_Size() int { + return m.Size() +} +func (m *CustomBuildStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_CustomBuildStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_CustomBuildStrategy proto.InternalMessageInfo + +func (m *DockerBuildStrategy) Reset() { *m = DockerBuildStrategy{} } +func (*DockerBuildStrategy) ProtoMessage() {} +func (*DockerBuildStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{27} +} +func (m *DockerBuildStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DockerBuildStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DockerBuildStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_DockerBuildStrategy.Merge(m, src) +} +func (m *DockerBuildStrategy) XXX_Size() int { + return m.Size() +} +func (m *DockerBuildStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_DockerBuildStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_DockerBuildStrategy proto.InternalMessageInfo + +func (m *DockerStrategyOptions) Reset() { *m = DockerStrategyOptions{} } +func (*DockerStrategyOptions) ProtoMessage() {} +func (*DockerStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{28} +} +func (m *DockerStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DockerStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DockerStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_DockerStrategyOptions.Merge(m, src) +} +func (m *DockerStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *DockerStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_DockerStrategyOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_DockerStrategyOptions proto.InternalMessageInfo + +func (m *GenericWebHookCause) Reset() { *m = GenericWebHookCause{} } +func (*GenericWebHookCause) ProtoMessage() {} +func (*GenericWebHookCause) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{29} +} +func (m *GenericWebHookCause) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenericWebHookCause) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GenericWebHookCause) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenericWebHookCause.Merge(m, src) +} +func (m *GenericWebHookCause) XXX_Size() int { + return m.Size() +} +func (m *GenericWebHookCause) XXX_DiscardUnknown() { + xxx_messageInfo_GenericWebHookCause.DiscardUnknown(m) +} + +var xxx_messageInfo_GenericWebHookCause proto.InternalMessageInfo + +func (m *GenericWebHookEvent) Reset() { *m = GenericWebHookEvent{} } +func (*GenericWebHookEvent) ProtoMessage() {} +func (*GenericWebHookEvent) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{30} +} +func (m *GenericWebHookEvent) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenericWebHookEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GenericWebHookEvent) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenericWebHookEvent.Merge(m, src) +} +func (m *GenericWebHookEvent) XXX_Size() int { + return m.Size() +} +func (m *GenericWebHookEvent) XXX_DiscardUnknown() { + xxx_messageInfo_GenericWebHookEvent.DiscardUnknown(m) +} + +var xxx_messageInfo_GenericWebHookEvent proto.InternalMessageInfo + +func (m *GitBuildSource) Reset() { *m = GitBuildSource{} } +func (*GitBuildSource) ProtoMessage() {} +func (*GitBuildSource) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{31} +} +func (m *GitBuildSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GitBuildSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GitBuildSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_GitBuildSource.Merge(m, src) +} +func (m *GitBuildSource) XXX_Size() int { + return m.Size() +} +func (m *GitBuildSource) XXX_DiscardUnknown() { + xxx_messageInfo_GitBuildSource.DiscardUnknown(m) +} + +var xxx_messageInfo_GitBuildSource proto.InternalMessageInfo + +func (m *GitHubWebHookCause) Reset() { *m = GitHubWebHookCause{} } +func (*GitHubWebHookCause) ProtoMessage() {} +func (*GitHubWebHookCause) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{32} +} +func (m *GitHubWebHookCause) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GitHubWebHookCause) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GitHubWebHookCause) XXX_Merge(src proto.Message) { + xxx_messageInfo_GitHubWebHookCause.Merge(m, src) +} +func (m *GitHubWebHookCause) XXX_Size() int { + return m.Size() +} +func (m *GitHubWebHookCause) XXX_DiscardUnknown() { + xxx_messageInfo_GitHubWebHookCause.DiscardUnknown(m) +} + +var xxx_messageInfo_GitHubWebHookCause proto.InternalMessageInfo + +func (m *GitInfo) Reset() { *m = GitInfo{} } +func (*GitInfo) ProtoMessage() {} +func (*GitInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{33} +} +func (m *GitInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GitInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GitInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_GitInfo.Merge(m, src) +} +func (m *GitInfo) XXX_Size() int { + return m.Size() +} +func (m *GitInfo) XXX_DiscardUnknown() { + xxx_messageInfo_GitInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_GitInfo proto.InternalMessageInfo + +func (m *GitLabWebHookCause) Reset() { *m = GitLabWebHookCause{} } +func (*GitLabWebHookCause) ProtoMessage() {} +func (*GitLabWebHookCause) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{34} +} +func (m *GitLabWebHookCause) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GitLabWebHookCause) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GitLabWebHookCause) XXX_Merge(src proto.Message) { + xxx_messageInfo_GitLabWebHookCause.Merge(m, src) +} +func (m *GitLabWebHookCause) XXX_Size() int { + return m.Size() +} +func (m *GitLabWebHookCause) XXX_DiscardUnknown() { + xxx_messageInfo_GitLabWebHookCause.DiscardUnknown(m) +} + +var xxx_messageInfo_GitLabWebHookCause proto.InternalMessageInfo + +func (m *GitRefInfo) Reset() { *m = GitRefInfo{} } +func (*GitRefInfo) ProtoMessage() {} +func (*GitRefInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{35} +} +func (m *GitRefInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GitRefInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GitRefInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_GitRefInfo.Merge(m, src) +} +func (m *GitRefInfo) XXX_Size() int { + return m.Size() +} +func (m *GitRefInfo) XXX_DiscardUnknown() { + xxx_messageInfo_GitRefInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_GitRefInfo proto.InternalMessageInfo + +func (m *GitSourceRevision) Reset() { *m = GitSourceRevision{} } +func (*GitSourceRevision) ProtoMessage() {} +func (*GitSourceRevision) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{36} +} +func (m *GitSourceRevision) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GitSourceRevision) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GitSourceRevision) XXX_Merge(src proto.Message) { + xxx_messageInfo_GitSourceRevision.Merge(m, src) +} +func (m *GitSourceRevision) XXX_Size() int { + return m.Size() +} +func (m *GitSourceRevision) XXX_DiscardUnknown() { + xxx_messageInfo_GitSourceRevision.DiscardUnknown(m) +} + +var xxx_messageInfo_GitSourceRevision proto.InternalMessageInfo + +func (m *ImageChangeCause) Reset() { *m = ImageChangeCause{} } +func (*ImageChangeCause) ProtoMessage() {} +func (*ImageChangeCause) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{37} +} +func (m *ImageChangeCause) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageChangeCause) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageChangeCause) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageChangeCause.Merge(m, src) +} +func (m *ImageChangeCause) XXX_Size() int { + return m.Size() +} +func (m *ImageChangeCause) XXX_DiscardUnknown() { + xxx_messageInfo_ImageChangeCause.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageChangeCause proto.InternalMessageInfo + +func (m *ImageChangeTrigger) Reset() { *m = ImageChangeTrigger{} } +func (*ImageChangeTrigger) ProtoMessage() {} +func (*ImageChangeTrigger) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{38} +} +func (m *ImageChangeTrigger) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageChangeTrigger) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageChangeTrigger) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageChangeTrigger.Merge(m, src) +} +func (m *ImageChangeTrigger) XXX_Size() int { + return m.Size() +} +func (m *ImageChangeTrigger) XXX_DiscardUnknown() { + xxx_messageInfo_ImageChangeTrigger.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageChangeTrigger proto.InternalMessageInfo + +func (m *ImageLabel) Reset() { *m = ImageLabel{} } +func (*ImageLabel) ProtoMessage() {} +func (*ImageLabel) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{39} +} +func (m *ImageLabel) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageLabel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageLabel) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageLabel.Merge(m, src) +} +func (m *ImageLabel) XXX_Size() int { + return m.Size() +} +func (m *ImageLabel) XXX_DiscardUnknown() { + xxx_messageInfo_ImageLabel.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageLabel proto.InternalMessageInfo + +func (m *ImageSource) Reset() { *m = ImageSource{} } +func (*ImageSource) ProtoMessage() {} +func (*ImageSource) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{40} +} +func (m *ImageSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageSource.Merge(m, src) +} +func (m *ImageSource) XXX_Size() int { + return m.Size() +} +func (m *ImageSource) XXX_DiscardUnknown() { + xxx_messageInfo_ImageSource.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageSource proto.InternalMessageInfo + +func (m *ImageSourcePath) Reset() { *m = ImageSourcePath{} } +func (*ImageSourcePath) ProtoMessage() {} +func (*ImageSourcePath) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{41} +} +func (m *ImageSourcePath) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageSourcePath) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageSourcePath) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageSourcePath.Merge(m, src) +} +func (m *ImageSourcePath) XXX_Size() int { + return m.Size() +} +func (m *ImageSourcePath) XXX_DiscardUnknown() { + xxx_messageInfo_ImageSourcePath.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageSourcePath proto.InternalMessageInfo + +func (m *JenkinsPipelineBuildStrategy) Reset() { *m = JenkinsPipelineBuildStrategy{} } +func (*JenkinsPipelineBuildStrategy) ProtoMessage() {} +func (*JenkinsPipelineBuildStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{42} +} +func (m *JenkinsPipelineBuildStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *JenkinsPipelineBuildStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *JenkinsPipelineBuildStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_JenkinsPipelineBuildStrategy.Merge(m, src) +} +func (m *JenkinsPipelineBuildStrategy) XXX_Size() int { + return m.Size() +} +func (m *JenkinsPipelineBuildStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_JenkinsPipelineBuildStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_JenkinsPipelineBuildStrategy proto.InternalMessageInfo + +func (m *OptionalNodeSelector) Reset() { *m = OptionalNodeSelector{} } +func (*OptionalNodeSelector) ProtoMessage() {} +func (*OptionalNodeSelector) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{43} +} +func (m *OptionalNodeSelector) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OptionalNodeSelector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OptionalNodeSelector) XXX_Merge(src proto.Message) { + xxx_messageInfo_OptionalNodeSelector.Merge(m, src) +} +func (m *OptionalNodeSelector) XXX_Size() int { + return m.Size() +} +func (m *OptionalNodeSelector) XXX_DiscardUnknown() { + xxx_messageInfo_OptionalNodeSelector.DiscardUnknown(m) +} + +var xxx_messageInfo_OptionalNodeSelector proto.InternalMessageInfo + +func (m *ProxyConfig) Reset() { *m = ProxyConfig{} } +func (*ProxyConfig) ProtoMessage() {} +func (*ProxyConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{44} +} +func (m *ProxyConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ProxyConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ProxyConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProxyConfig.Merge(m, src) +} +func (m *ProxyConfig) XXX_Size() int { + return m.Size() +} +func (m *ProxyConfig) XXX_DiscardUnknown() { + xxx_messageInfo_ProxyConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_ProxyConfig proto.InternalMessageInfo + +func (m *SecretBuildSource) Reset() { *m = SecretBuildSource{} } +func (*SecretBuildSource) ProtoMessage() {} +func (*SecretBuildSource) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{45} +} +func (m *SecretBuildSource) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SecretBuildSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SecretBuildSource) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecretBuildSource.Merge(m, src) +} +func (m *SecretBuildSource) XXX_Size() int { + return m.Size() +} +func (m *SecretBuildSource) XXX_DiscardUnknown() { + xxx_messageInfo_SecretBuildSource.DiscardUnknown(m) +} + +var xxx_messageInfo_SecretBuildSource proto.InternalMessageInfo + +func (m *SecretLocalReference) Reset() { *m = SecretLocalReference{} } +func (*SecretLocalReference) ProtoMessage() {} +func (*SecretLocalReference) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{46} +} +func (m *SecretLocalReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SecretLocalReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SecretLocalReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecretLocalReference.Merge(m, src) +} +func (m *SecretLocalReference) XXX_Size() int { + return m.Size() +} +func (m *SecretLocalReference) XXX_DiscardUnknown() { + xxx_messageInfo_SecretLocalReference.DiscardUnknown(m) +} + +var xxx_messageInfo_SecretLocalReference proto.InternalMessageInfo + +func (m *SecretSpec) Reset() { *m = SecretSpec{} } +func (*SecretSpec) ProtoMessage() {} +func (*SecretSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{47} +} +func (m *SecretSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SecretSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SecretSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecretSpec.Merge(m, src) +} +func (m *SecretSpec) XXX_Size() int { + return m.Size() +} +func (m *SecretSpec) XXX_DiscardUnknown() { + xxx_messageInfo_SecretSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_SecretSpec proto.InternalMessageInfo + +func (m *SourceBuildStrategy) Reset() { *m = SourceBuildStrategy{} } +func (*SourceBuildStrategy) ProtoMessage() {} +func (*SourceBuildStrategy) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{48} +} +func (m *SourceBuildStrategy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SourceBuildStrategy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SourceBuildStrategy) XXX_Merge(src proto.Message) { + xxx_messageInfo_SourceBuildStrategy.Merge(m, src) +} +func (m *SourceBuildStrategy) XXX_Size() int { + return m.Size() +} +func (m *SourceBuildStrategy) XXX_DiscardUnknown() { + xxx_messageInfo_SourceBuildStrategy.DiscardUnknown(m) +} + +var xxx_messageInfo_SourceBuildStrategy proto.InternalMessageInfo + +func (m *SourceControlUser) Reset() { *m = SourceControlUser{} } +func (*SourceControlUser) ProtoMessage() {} +func (*SourceControlUser) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{49} +} +func (m *SourceControlUser) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SourceControlUser) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SourceControlUser) XXX_Merge(src proto.Message) { + xxx_messageInfo_SourceControlUser.Merge(m, src) +} +func (m *SourceControlUser) XXX_Size() int { + return m.Size() +} +func (m *SourceControlUser) XXX_DiscardUnknown() { + xxx_messageInfo_SourceControlUser.DiscardUnknown(m) +} + +var xxx_messageInfo_SourceControlUser proto.InternalMessageInfo + +func (m *SourceRevision) Reset() { *m = SourceRevision{} } +func (*SourceRevision) ProtoMessage() {} +func (*SourceRevision) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{50} +} +func (m *SourceRevision) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SourceRevision) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SourceRevision) XXX_Merge(src proto.Message) { + xxx_messageInfo_SourceRevision.Merge(m, src) +} +func (m *SourceRevision) XXX_Size() int { + return m.Size() +} +func (m *SourceRevision) XXX_DiscardUnknown() { + xxx_messageInfo_SourceRevision.DiscardUnknown(m) +} + +var xxx_messageInfo_SourceRevision proto.InternalMessageInfo + +func (m *SourceStrategyOptions) Reset() { *m = SourceStrategyOptions{} } +func (*SourceStrategyOptions) ProtoMessage() {} +func (*SourceStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{51} +} +func (m *SourceStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SourceStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SourceStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_SourceStrategyOptions.Merge(m, src) +} +func (m *SourceStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *SourceStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_SourceStrategyOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_SourceStrategyOptions proto.InternalMessageInfo + +func (m *StageInfo) Reset() { *m = StageInfo{} } +func (*StageInfo) ProtoMessage() {} +func (*StageInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{52} +} +func (m *StageInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StageInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StageInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_StageInfo.Merge(m, src) +} +func (m *StageInfo) XXX_Size() int { + return m.Size() +} +func (m *StageInfo) XXX_DiscardUnknown() { + xxx_messageInfo_StageInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_StageInfo proto.InternalMessageInfo + +func (m *StepInfo) Reset() { *m = StepInfo{} } +func (*StepInfo) ProtoMessage() {} +func (*StepInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{53} +} +func (m *StepInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StepInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StepInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_StepInfo.Merge(m, src) +} +func (m *StepInfo) XXX_Size() int { + return m.Size() +} +func (m *StepInfo) XXX_DiscardUnknown() { + xxx_messageInfo_StepInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_StepInfo proto.InternalMessageInfo + +func (m *WebHookTrigger) Reset() { *m = WebHookTrigger{} } +func (*WebHookTrigger) ProtoMessage() {} +func (*WebHookTrigger) Descriptor() ([]byte, []int) { + return fileDescriptor_2ba579f6f004cb75, []int{54} +} +func (m *WebHookTrigger) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *WebHookTrigger) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *WebHookTrigger) XXX_Merge(src proto.Message) { + xxx_messageInfo_WebHookTrigger.Merge(m, src) +} +func (m *WebHookTrigger) XXX_Size() int { + return m.Size() +} +func (m *WebHookTrigger) XXX_DiscardUnknown() { + xxx_messageInfo_WebHookTrigger.DiscardUnknown(m) +} + +var xxx_messageInfo_WebHookTrigger proto.InternalMessageInfo + +func init() { + proto.RegisterType((*BinaryBuildRequestOptions)(nil), "github.com.openshift.api.build.v1.BinaryBuildRequestOptions") + proto.RegisterType((*BinaryBuildSource)(nil), "github.com.openshift.api.build.v1.BinaryBuildSource") + proto.RegisterType((*BitbucketWebHookCause)(nil), "github.com.openshift.api.build.v1.BitbucketWebHookCause") + proto.RegisterType((*Build)(nil), "github.com.openshift.api.build.v1.Build") + proto.RegisterType((*BuildCondition)(nil), "github.com.openshift.api.build.v1.BuildCondition") + proto.RegisterType((*BuildConfig)(nil), "github.com.openshift.api.build.v1.BuildConfig") + proto.RegisterType((*BuildConfigList)(nil), "github.com.openshift.api.build.v1.BuildConfigList") + proto.RegisterType((*BuildConfigSpec)(nil), "github.com.openshift.api.build.v1.BuildConfigSpec") + proto.RegisterType((*BuildConfigStatus)(nil), "github.com.openshift.api.build.v1.BuildConfigStatus") + proto.RegisterType((*BuildList)(nil), "github.com.openshift.api.build.v1.BuildList") + proto.RegisterType((*BuildLog)(nil), "github.com.openshift.api.build.v1.BuildLog") + proto.RegisterType((*BuildLogOptions)(nil), "github.com.openshift.api.build.v1.BuildLogOptions") + proto.RegisterType((*BuildOutput)(nil), "github.com.openshift.api.build.v1.BuildOutput") + proto.RegisterType((*BuildPostCommitSpec)(nil), "github.com.openshift.api.build.v1.BuildPostCommitSpec") + proto.RegisterType((*BuildRequest)(nil), "github.com.openshift.api.build.v1.BuildRequest") + proto.RegisterType((*BuildSource)(nil), "github.com.openshift.api.build.v1.BuildSource") + proto.RegisterType((*BuildSpec)(nil), "github.com.openshift.api.build.v1.BuildSpec") + proto.RegisterType((*BuildStatus)(nil), "github.com.openshift.api.build.v1.BuildStatus") + proto.RegisterType((*BuildStatusOutput)(nil), "github.com.openshift.api.build.v1.BuildStatusOutput") + proto.RegisterType((*BuildStatusOutputTo)(nil), "github.com.openshift.api.build.v1.BuildStatusOutputTo") + proto.RegisterType((*BuildStrategy)(nil), "github.com.openshift.api.build.v1.BuildStrategy") + proto.RegisterType((*BuildTriggerCause)(nil), "github.com.openshift.api.build.v1.BuildTriggerCause") + proto.RegisterType((*BuildTriggerPolicy)(nil), "github.com.openshift.api.build.v1.BuildTriggerPolicy") + proto.RegisterType((*CommonSpec)(nil), "github.com.openshift.api.build.v1.CommonSpec") + proto.RegisterType((*CommonWebHookCause)(nil), "github.com.openshift.api.build.v1.CommonWebHookCause") + proto.RegisterType((*ConfigMapBuildSource)(nil), "github.com.openshift.api.build.v1.ConfigMapBuildSource") + proto.RegisterType((*CustomBuildStrategy)(nil), "github.com.openshift.api.build.v1.CustomBuildStrategy") + proto.RegisterType((*DockerBuildStrategy)(nil), "github.com.openshift.api.build.v1.DockerBuildStrategy") + proto.RegisterType((*DockerStrategyOptions)(nil), "github.com.openshift.api.build.v1.DockerStrategyOptions") + proto.RegisterType((*GenericWebHookCause)(nil), "github.com.openshift.api.build.v1.GenericWebHookCause") + proto.RegisterType((*GenericWebHookEvent)(nil), "github.com.openshift.api.build.v1.GenericWebHookEvent") + proto.RegisterType((*GitBuildSource)(nil), "github.com.openshift.api.build.v1.GitBuildSource") + proto.RegisterType((*GitHubWebHookCause)(nil), "github.com.openshift.api.build.v1.GitHubWebHookCause") + proto.RegisterType((*GitInfo)(nil), "github.com.openshift.api.build.v1.GitInfo") + proto.RegisterType((*GitLabWebHookCause)(nil), "github.com.openshift.api.build.v1.GitLabWebHookCause") + proto.RegisterType((*GitRefInfo)(nil), "github.com.openshift.api.build.v1.GitRefInfo") + proto.RegisterType((*GitSourceRevision)(nil), "github.com.openshift.api.build.v1.GitSourceRevision") + proto.RegisterType((*ImageChangeCause)(nil), "github.com.openshift.api.build.v1.ImageChangeCause") + proto.RegisterType((*ImageChangeTrigger)(nil), "github.com.openshift.api.build.v1.ImageChangeTrigger") + proto.RegisterType((*ImageLabel)(nil), "github.com.openshift.api.build.v1.ImageLabel") + proto.RegisterType((*ImageSource)(nil), "github.com.openshift.api.build.v1.ImageSource") + proto.RegisterType((*ImageSourcePath)(nil), "github.com.openshift.api.build.v1.ImageSourcePath") + proto.RegisterType((*JenkinsPipelineBuildStrategy)(nil), "github.com.openshift.api.build.v1.JenkinsPipelineBuildStrategy") + proto.RegisterType((*OptionalNodeSelector)(nil), "github.com.openshift.api.build.v1.OptionalNodeSelector") + proto.RegisterMapType((map[string]string)(nil), "github.com.openshift.api.build.v1.OptionalNodeSelector.ItemsEntry") + proto.RegisterType((*ProxyConfig)(nil), "github.com.openshift.api.build.v1.ProxyConfig") + proto.RegisterType((*SecretBuildSource)(nil), "github.com.openshift.api.build.v1.SecretBuildSource") + proto.RegisterType((*SecretLocalReference)(nil), "github.com.openshift.api.build.v1.SecretLocalReference") + proto.RegisterType((*SecretSpec)(nil), "github.com.openshift.api.build.v1.SecretSpec") + proto.RegisterType((*SourceBuildStrategy)(nil), "github.com.openshift.api.build.v1.SourceBuildStrategy") + proto.RegisterType((*SourceControlUser)(nil), "github.com.openshift.api.build.v1.SourceControlUser") + proto.RegisterType((*SourceRevision)(nil), "github.com.openshift.api.build.v1.SourceRevision") + proto.RegisterType((*SourceStrategyOptions)(nil), "github.com.openshift.api.build.v1.SourceStrategyOptions") + proto.RegisterType((*StageInfo)(nil), "github.com.openshift.api.build.v1.StageInfo") + proto.RegisterType((*StepInfo)(nil), "github.com.openshift.api.build.v1.StepInfo") + proto.RegisterType((*WebHookTrigger)(nil), "github.com.openshift.api.build.v1.WebHookTrigger") +} + +func init() { + proto.RegisterFile("github.com/openshift/api/build/v1/generated.proto", fileDescriptor_2ba579f6f004cb75) +} + +var fileDescriptor_2ba579f6f004cb75 = []byte{ + // 4087 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0x4d, 0x6c, 0x1c, 0xc9, + 0x75, 0x56, 0xcf, 0x0c, 0xc9, 0x99, 0x37, 0x14, 0x45, 0x16, 0xa5, 0xd5, 0x48, 0x96, 0x39, 0xda, + 0xde, 0xec, 0x42, 0x9b, 0xdd, 0x1d, 0x9a, 0xb2, 0xa4, 0xc8, 0x36, 0xe2, 0x80, 0x43, 0x52, 0x5a, + 0xca, 0x23, 0x89, 0xa8, 0xe1, 0x6a, 0x37, 0x5e, 0xc1, 0x49, 0xb3, 0xa7, 0x66, 0xd8, 0xcb, 0x99, + 0xee, 0xde, 0xae, 0x1e, 0xee, 0xd2, 0x40, 0x80, 0x45, 0x00, 0x23, 0xb0, 0x7d, 0x89, 0x2f, 0x46, + 0x92, 0x4b, 0x12, 0x04, 0x39, 0xe5, 0x94, 0x43, 0x00, 0x03, 0xbe, 0x04, 0x88, 0x0f, 0x7b, 0x70, + 0x00, 0x07, 0xc9, 0x61, 0x81, 0x18, 0x83, 0xec, 0xe4, 0x90, 0x5b, 0x80, 0x5c, 0x75, 0x08, 0x82, + 0xfa, 0xe9, 0xee, 0xaa, 0x9e, 0x26, 0xd5, 0x43, 0xc9, 0xca, 0x26, 0xbe, 0x71, 0xde, 0xcf, 0xf7, + 0xaa, 0xab, 0x5e, 0xbd, 0x7a, 0xef, 0x55, 0x11, 0xd6, 0x7a, 0x4e, 0xb8, 0x3f, 0xdc, 0x6b, 0xd8, + 0xde, 0x60, 0xd5, 0xf3, 0x89, 0x4b, 0xf7, 0x9d, 0x6e, 0xb8, 0x6a, 0xf9, 0xce, 0xea, 0xde, 0xd0, + 0xe9, 0x77, 0x56, 0x0f, 0xd7, 0x56, 0x7b, 0xc4, 0x25, 0x81, 0x15, 0x92, 0x4e, 0xc3, 0x0f, 0xbc, + 0xd0, 0x43, 0x2f, 0x27, 0x2a, 0x8d, 0x58, 0xa5, 0x61, 0xf9, 0x4e, 0x83, 0xab, 0x34, 0x0e, 0xd7, + 0x2e, 0xbf, 0xa5, 0xa0, 0xf6, 0xbc, 0x9e, 0xb7, 0xca, 0x35, 0xf7, 0x86, 0x5d, 0xfe, 0x8b, 0xff, + 0xe0, 0x7f, 0x09, 0xc4, 0xcb, 0xe6, 0xc1, 0x6d, 0xda, 0x70, 0x3c, 0x6e, 0xd6, 0xf6, 0x02, 0x92, + 0x61, 0xf5, 0xf2, 0x8d, 0x44, 0x66, 0x60, 0xd9, 0xfb, 0x8e, 0x4b, 0x82, 0xa3, 0x55, 0xff, 0xa0, + 0xc7, 0x08, 0x74, 0x75, 0x40, 0x42, 0x2b, 0x4b, 0xeb, 0xd6, 0x71, 0x5a, 0xc1, 0xd0, 0x0d, 0x9d, + 0x01, 0x59, 0xa5, 0xf6, 0x3e, 0x19, 0x58, 0x69, 0x3d, 0xf3, 0xef, 0x4b, 0x70, 0xa9, 0xe9, 0xb8, + 0x56, 0x70, 0xd4, 0x64, 0xdf, 0x84, 0xc9, 0x87, 0x43, 0x42, 0xc3, 0x87, 0x7e, 0xe8, 0x78, 0x2e, + 0x45, 0xbf, 0x0f, 0x65, 0x66, 0xb0, 0x63, 0x85, 0x56, 0xcd, 0xb8, 0x6a, 0x5c, 0xab, 0x5e, 0xff, + 0x4a, 0x43, 0x18, 0x6a, 0xa8, 0x86, 0x1a, 0xfe, 0x41, 0x8f, 0x11, 0x68, 0x83, 0x49, 0x37, 0x0e, + 0xd7, 0x1a, 0x0f, 0xf7, 0x3e, 0x20, 0x76, 0x78, 0x9f, 0x84, 0x56, 0x13, 0x7d, 0x3a, 0xaa, 0x9f, + 0x19, 0x8f, 0xea, 0x90, 0xd0, 0x70, 0x8c, 0x8a, 0x5e, 0x83, 0x59, 0x8b, 0xde, 0x71, 0xfa, 0xa4, + 0x56, 0xb8, 0x6a, 0x5c, 0xab, 0x34, 0x17, 0xa4, 0xf4, 0xec, 0x3a, 0xa7, 0x62, 0xc9, 0x45, 0xb7, + 0x60, 0x21, 0x20, 0x87, 0x0e, 0x75, 0x3c, 0x77, 0xc3, 0x1b, 0x0c, 0x9c, 0xb0, 0x56, 0xd4, 0xe5, + 0x05, 0x15, 0xa7, 0xa4, 0xd0, 0xd7, 0xe0, 0x5c, 0x44, 0xb9, 0x4f, 0x28, 0xb5, 0x7a, 0xa4, 0x56, + 0xe2, 0x8a, 0xe7, 0xa4, 0xe2, 0x9c, 0x24, 0xe3, 0xb4, 0x1c, 0x6a, 0x02, 0x8a, 0x48, 0xeb, 0xc3, + 0x70, 0xdf, 0x0b, 0x1e, 0x58, 0x03, 0x52, 0x9b, 0xe1, 0xda, 0xf1, 0x47, 0x25, 0x1c, 0x9c, 0x21, + 0x8d, 0xb6, 0x60, 0x59, 0xa7, 0x6e, 0x0d, 0x2c, 0xa7, 0x5f, 0x9b, 0xe5, 0x20, 0xcb, 0x12, 0xa4, + 0xaa, 0xb0, 0x70, 0x96, 0x3c, 0xfa, 0x16, 0x5c, 0xd0, 0xbf, 0x2b, 0x24, 0x62, 0x34, 0x73, 0x1c, + 0xe8, 0x82, 0x04, 0x3a, 0xab, 0x31, 0x71, 0xb6, 0x0e, 0x7a, 0x00, 0x2f, 0x4d, 0x30, 0xc4, 0xb0, + 0xca, 0x1c, 0xed, 0x25, 0x89, 0xb6, 0xa0, 0x73, 0xf1, 0x31, 0x5a, 0xe6, 0x37, 0x60, 0x49, 0xf1, + 0xa0, 0xb6, 0x37, 0x0c, 0x6c, 0xa2, 0xac, 0xab, 0x71, 0xd2, 0xba, 0x9a, 0x3f, 0x30, 0xe0, 0x42, + 0xd3, 0x09, 0xf7, 0x86, 0xf6, 0x01, 0x09, 0xdf, 0x25, 0x7b, 0x6f, 0x7b, 0xde, 0xc1, 0x86, 0x35, + 0xa4, 0x04, 0x7d, 0x08, 0x60, 0x7b, 0x83, 0x81, 0xe7, 0xb6, 0x7d, 0x62, 0x4b, 0xef, 0xbb, 0xd9, + 0x78, 0xea, 0x96, 0x6c, 0x6c, 0x70, 0x25, 0x15, 0xaa, 0x79, 0x59, 0x1a, 0x47, 0x93, 0x3c, 0xac, + 0x18, 0x31, 0x7f, 0x54, 0x80, 0x19, 0xfe, 0x11, 0x2f, 0xc0, 0xf1, 0x1f, 0x40, 0x89, 0xb2, 0x0f, + 0x2b, 0x70, 0xf4, 0x37, 0x73, 0x7c, 0x98, 0x98, 0x5e, 0x9f, 0xd8, 0xcd, 0x79, 0x89, 0x5c, 0x62, + 0xbf, 0x30, 0xc7, 0x41, 0x8f, 0x60, 0x96, 0x86, 0x56, 0x38, 0xa4, 0x7c, 0x63, 0x54, 0xaf, 0x37, + 0x72, 0x23, 0x72, 0xad, 0x64, 0x81, 0xc4, 0x6f, 0x2c, 0xd1, 0xcc, 0x7f, 0x2c, 0xc2, 0x02, 0x97, + 0xdb, 0xf0, 0xdc, 0x8e, 0xc3, 0xc2, 0x02, 0xba, 0x05, 0xa5, 0xf0, 0xc8, 0x8f, 0x56, 0xd6, 0x8c, + 0x06, 0xb3, 0x7b, 0xe4, 0x93, 0x27, 0xa3, 0x3a, 0xd2, 0xa5, 0x19, 0x15, 0x73, 0x79, 0xd4, 0x8a, + 0x87, 0x28, 0xf6, 0xfa, 0x0d, 0xdd, 0xe4, 0x93, 0x51, 0x3d, 0x23, 0x3e, 0x36, 0x62, 0x24, 0x7d, + 0x60, 0xe8, 0x03, 0x58, 0xe8, 0x5b, 0x34, 0x7c, 0xc7, 0xef, 0x58, 0x21, 0xd9, 0x75, 0x06, 0x84, + 0xef, 0xaa, 0xea, 0xf5, 0xdf, 0xcc, 0xb7, 0x50, 0x4c, 0x23, 0x71, 0xf5, 0x96, 0x86, 0x84, 0x53, + 0xc8, 0xe8, 0x10, 0x10, 0xa3, 0xec, 0x06, 0x96, 0x4b, 0xc5, 0x57, 0x31, 0x7b, 0xc5, 0xa9, 0xed, + 0xc5, 0x8e, 0xd8, 0x9a, 0x40, 0xc3, 0x19, 0x16, 0xd8, 0x2e, 0x0a, 0x88, 0x45, 0x3d, 0x57, 0x06, + 0xad, 0x78, 0x91, 0x30, 0xa7, 0x62, 0xc9, 0x45, 0xaf, 0xc3, 0xdc, 0x40, 0x46, 0xb7, 0x99, 0xec, + 0xe8, 0x16, 0xf1, 0xcd, 0xbf, 0x2a, 0x40, 0x35, 0x5a, 0xa1, 0xae, 0xd3, 0x7b, 0x01, 0x9e, 0xbe, + 0xab, 0x79, 0xfa, 0xf5, 0xbc, 0x7e, 0x29, 0xc6, 0x77, 0xac, 0xbf, 0x3f, 0x4e, 0xf9, 0xfb, 0x8d, + 0x29, 0x71, 0x4f, 0xf6, 0xfa, 0x9f, 0x19, 0x70, 0x4e, 0x91, 0x6e, 0x39, 0x34, 0x44, 0x8f, 0x27, + 0x66, 0xaa, 0x91, 0x6f, 0xa6, 0x98, 0x36, 0x9f, 0xa7, 0x45, 0x69, 0xad, 0x1c, 0x51, 0x94, 0x59, + 0x6a, 0xc3, 0x8c, 0x13, 0x92, 0x01, 0xdb, 0x1b, 0xc5, 0x69, 0xb6, 0xaf, 0x18, 0x60, 0xf3, 0xac, + 0x84, 0x9e, 0xd9, 0x66, 0x20, 0x58, 0x60, 0x99, 0xbf, 0x2c, 0x6a, 0x9f, 0xc1, 0xa6, 0x0f, 0xd9, + 0x50, 0x0e, 0x03, 0xa7, 0xd7, 0x23, 0x01, 0xad, 0x19, 0xdc, 0xd6, 0xcd, 0xbc, 0xb6, 0x76, 0x85, + 0xde, 0x8e, 0xd7, 0x77, 0xec, 0xa3, 0xe4, 0x6b, 0x24, 0x99, 0xe2, 0x18, 0x18, 0xad, 0x43, 0x25, + 0x18, 0xba, 0x42, 0x50, 0xee, 0xf6, 0x57, 0xa4, 0x78, 0x05, 0x47, 0x8c, 0x27, 0xa3, 0xba, 0x08, + 0x2d, 0x31, 0x05, 0x27, 0x5a, 0xc8, 0xd2, 0xe2, 0xbf, 0x58, 0xe4, 0xb7, 0x72, 0xc7, 0x7f, 0xee, + 0x37, 0xb1, 0x5f, 0x26, 0x34, 0x35, 0xde, 0xa3, 0x0e, 0x5c, 0xa1, 0x43, 0xdb, 0x26, 0x94, 0x76, + 0x87, 0x7d, 0x3e, 0x12, 0xfa, 0xb6, 0x43, 0x43, 0x2f, 0x38, 0x6a, 0x39, 0x2c, 0xc5, 0x60, 0x9b, + 0x6e, 0xa6, 0x79, 0x75, 0x3c, 0xaa, 0x5f, 0x69, 0x9f, 0x20, 0x87, 0x4f, 0x44, 0x41, 0xef, 0x41, + 0xad, 0x6b, 0x39, 0x7d, 0xd2, 0xc9, 0xb0, 0x30, 0xc3, 0x2d, 0x5c, 0x19, 0x8f, 0xea, 0xb5, 0x3b, + 0xc7, 0xc8, 0xe0, 0x63, 0xb5, 0xcd, 0x7b, 0xb0, 0x34, 0xe1, 0xd2, 0xe8, 0x26, 0x54, 0x59, 0x24, + 0x79, 0x44, 0x02, 0x76, 0x56, 0x73, 0x4f, 0x2d, 0x26, 0xa9, 0x46, 0x2b, 0x61, 0x61, 0x55, 0xce, + 0xfc, 0x89, 0x01, 0x15, 0x0e, 0xf6, 0x02, 0x7c, 0xfd, 0xbe, 0xee, 0xeb, 0xd7, 0xf2, 0xfa, 0xdf, + 0x31, 0x5e, 0x0e, 0x50, 0x16, 0x23, 0xf7, 0x7a, 0xe6, 0x7f, 0x95, 0xa4, 0xc7, 0xb7, 0xbc, 0x5e, + 0x94, 0xc5, 0xae, 0x42, 0xc5, 0xf6, 0xdc, 0xd0, 0x62, 0x43, 0x96, 0x87, 0xd6, 0x52, 0xe4, 0x8c, + 0x1b, 0x11, 0x03, 0x27, 0x32, 0x2c, 0xec, 0x76, 0xbd, 0x7e, 0xdf, 0xfb, 0x88, 0xbb, 0x6e, 0x39, + 0x89, 0x12, 0x77, 0x38, 0x15, 0x4b, 0x2e, 0x7a, 0x13, 0xca, 0x3e, 0x4b, 0x8a, 0x3c, 0x19, 0x85, + 0xca, 0xc9, 0x57, 0xef, 0x48, 0x3a, 0x8e, 0x25, 0xd0, 0x0d, 0x98, 0xa7, 0x8e, 0x6b, 0x93, 0x36, + 0xb1, 0x3d, 0xb7, 0x43, 0xb9, 0x77, 0x15, 0x9b, 0x8b, 0xe3, 0x51, 0x7d, 0xbe, 0xad, 0xd0, 0xb1, + 0x26, 0x85, 0xde, 0x85, 0x0a, 0xff, 0xcd, 0x4f, 0x9c, 0x99, 0xa9, 0x4f, 0x9c, 0xb3, 0xec, 0x23, + 0xdb, 0x11, 0x00, 0x4e, 0xb0, 0xd0, 0x75, 0x00, 0x56, 0x18, 0xd0, 0xd0, 0x1a, 0xf8, 0x94, 0x9f, + 0x9d, 0xe5, 0x64, 0xc3, 0xec, 0xc6, 0x1c, 0xac, 0x48, 0xa1, 0x37, 0xa0, 0x12, 0x5a, 0x4e, 0xbf, + 0xe5, 0xb8, 0x84, 0xf2, 0xdc, 0xb3, 0x28, 0x0c, 0xec, 0x46, 0x44, 0x9c, 0xf0, 0x51, 0x03, 0xa0, + 0xcf, 0xdc, 0xb4, 0x79, 0x14, 0x12, 0xca, 0x73, 0xcb, 0x62, 0x73, 0x81, 0x81, 0xb7, 0x62, 0x2a, + 0x56, 0x24, 0xd8, 0xac, 0xbb, 0xde, 0x47, 0x96, 0x13, 0xd6, 0x2a, 0xfa, 0xac, 0x3f, 0xf0, 0xde, + 0xb5, 0x9c, 0x10, 0x4b, 0x2e, 0x7a, 0x15, 0xe6, 0x0e, 0xa5, 0x73, 0x03, 0x07, 0xad, 0xb2, 0x83, + 0x2e, 0x72, 0xea, 0x88, 0x87, 0xf6, 0xe1, 0x8a, 0xe3, 0x52, 0x62, 0x0f, 0x03, 0xd2, 0x3e, 0x70, + 0xfc, 0xdd, 0x56, 0xfb, 0x11, 0x09, 0x9c, 0xee, 0x51, 0xd3, 0xb2, 0x0f, 0x88, 0xdb, 0xa9, 0x55, + 0xb9, 0x91, 0xdf, 0x90, 0x46, 0xae, 0x6c, 0x9f, 0x20, 0x8b, 0x4f, 0x44, 0x32, 0x7f, 0x10, 0x1d, + 0xa9, 0x0f, 0x87, 0xa1, 0x3f, 0x0c, 0xd1, 0x37, 0xa0, 0x10, 0x7a, 0x72, 0xdb, 0xbc, 0xa2, 0xac, + 0x55, 0x83, 0xa5, 0x34, 0xc9, 0xd1, 0x89, 0x49, 0x97, 0x04, 0xc4, 0xb5, 0x49, 0x73, 0x76, 0x3c, + 0xaa, 0x17, 0x76, 0x3d, 0x5c, 0x08, 0x3d, 0xf4, 0x1e, 0x80, 0x3f, 0xa4, 0xfb, 0x6d, 0x62, 0x07, + 0x24, 0x94, 0x67, 0xe6, 0xb5, 0x2c, 0x90, 0x96, 0x67, 0x5b, 0xfd, 0x34, 0x12, 0x9f, 0xdf, 0x9d, + 0x58, 0x1f, 0x2b, 0x58, 0xa8, 0x03, 0x55, 0x67, 0x60, 0xf5, 0x48, 0xcb, 0xda, 0x23, 0x7d, 0xe6, + 0xb0, 0xc5, 0x9c, 0x11, 0x75, 0x3b, 0xd6, 0x4a, 0xe2, 0x48, 0x42, 0xa3, 0x58, 0x85, 0x35, 0xff, + 0xd0, 0x80, 0x65, 0x3e, 0x19, 0x3b, 0x1e, 0x0d, 0x45, 0xa5, 0xc0, 0x63, 0xed, 0xab, 0x30, 0xc7, + 0x22, 0xaf, 0xe5, 0x76, 0xf8, 0xa9, 0x53, 0x11, 0xab, 0xb6, 0x21, 0x48, 0x38, 0xe2, 0xa1, 0x2b, + 0x50, 0xb2, 0x82, 0x9e, 0x88, 0x0c, 0x95, 0x66, 0x99, 0x1d, 0xfa, 0xeb, 0x41, 0x8f, 0x62, 0x4e, + 0x65, 0x2e, 0x42, 0xed, 0xc0, 0xf1, 0x27, 0xaa, 0xbf, 0x36, 0xa7, 0x62, 0xc9, 0x35, 0x7f, 0x36, + 0x07, 0xf3, 0x6a, 0x3d, 0xfb, 0x02, 0xb2, 0x9c, 0xf7, 0xa1, 0x1c, 0xd5, 0x47, 0x72, 0xd5, 0xd6, + 0x72, 0x4c, 0xad, 0xa8, 0x96, 0xb0, 0x54, 0x6c, 0xce, 0xb3, 0xd0, 0x11, 0xfd, 0xc2, 0x31, 0x20, + 0x22, 0xb0, 0x28, 0x8f, 0x56, 0xd2, 0x69, 0x1e, 0xf1, 0xb9, 0x97, 0x27, 0x62, 0x2e, 0xff, 0x3a, + 0x3f, 0x1e, 0xd5, 0x17, 0x77, 0x53, 0x00, 0x78, 0x02, 0x12, 0xad, 0x43, 0xa9, 0x1b, 0x78, 0x03, + 0x1e, 0x99, 0x72, 0x42, 0xf3, 0x15, 0xba, 0x13, 0x78, 0x03, 0xcc, 0x55, 0xd1, 0x7b, 0x30, 0xbb, + 0xc7, 0x8b, 0x41, 0x19, 0xab, 0x72, 0xa5, 0x65, 0xe9, 0xea, 0xb1, 0x09, 0x6c, 0x4d, 0x05, 0x19, + 0x4b, 0x3c, 0xb4, 0xa6, 0x9f, 0x6b, 0xb3, 0x7c, 0xeb, 0x9f, 0x3b, 0xe9, 0x4c, 0x43, 0x5f, 0x83, + 0x22, 0x71, 0x0f, 0x6b, 0x73, 0xdc, 0xd3, 0x2f, 0x67, 0x7d, 0xce, 0x96, 0x7b, 0xf8, 0xc8, 0x0a, + 0x9a, 0x55, 0xb9, 0xb4, 0xc5, 0x2d, 0xf7, 0x10, 0x33, 0x1d, 0x74, 0x00, 0x55, 0x65, 0x7a, 0x6a, + 0x65, 0x0e, 0x71, 0x63, 0xca, 0x44, 0x49, 0x54, 0x9f, 0xf1, 0x9e, 0x51, 0x56, 0x00, 0xab, 0xe8, + 0xe8, 0xfb, 0x06, 0x5c, 0xe8, 0x78, 0xf6, 0x01, 0x09, 0xda, 0x61, 0x60, 0x85, 0xa4, 0x77, 0x24, + 0x8f, 0x2e, 0x1e, 0x09, 0xab, 0xd7, 0x6f, 0xe7, 0xb0, 0xbb, 0x99, 0xa5, 0xdf, 0xbc, 0x34, 0x1e, + 0xd5, 0x2f, 0x64, 0xb2, 0x70, 0xb6, 0x45, 0x3e, 0x16, 0xca, 0x57, 0x21, 0x3d, 0x16, 0xc8, 0x3d, + 0x96, 0x76, 0x96, 0xbe, 0x18, 0x4b, 0x26, 0x0b, 0x67, 0x5b, 0x34, 0xff, 0x65, 0x46, 0x06, 0x56, + 0xd9, 0x54, 0xf8, 0xaa, 0x56, 0x78, 0xd6, 0x53, 0x85, 0xe7, 0x39, 0x45, 0x54, 0xa9, 0x3a, 0x13, + 0x8f, 0x2c, 0x3c, 0x67, 0x8f, 0x6c, 0x00, 0x88, 0x39, 0xec, 0x3a, 0x7d, 0x12, 0x45, 0x24, 0x16, + 0x20, 0x36, 0x63, 0x2a, 0x56, 0x24, 0x50, 0x0b, 0x8a, 0x3d, 0x99, 0x55, 0xe6, 0x8b, 0x0e, 0x77, + 0x9d, 0x50, 0x1d, 0xc3, 0x1c, 0xf3, 0xd0, 0xbb, 0x4e, 0x88, 0x19, 0x0c, 0x2b, 0xf8, 0x79, 0xdc, + 0xa5, 0xb5, 0x99, 0xdc, 0x15, 0x03, 0xdf, 0xe6, 0x12, 0x2d, 0x8e, 0x9d, 0x9c, 0x48, 0xb1, 0x44, + 0x63, 0x79, 0x01, 0xcb, 0x84, 0xc8, 0xc7, 0xe1, 0xa6, 0x13, 0xc8, 0x4e, 0x95, 0x92, 0x48, 0x47, + 0x1c, 0xac, 0x48, 0xa1, 0xef, 0xc0, 0xbc, 0x5c, 0x41, 0x71, 0x6c, 0xcd, 0x4d, 0x79, 0x6c, 0x89, + 0x24, 0x48, 0x41, 0xc0, 0x1a, 0x1e, 0xfa, 0x3d, 0x98, 0xa3, 0xfc, 0x2f, 0x3a, 0xc5, 0x4e, 0x14, + 0xba, 0xea, 0x04, 0xc6, 0x55, 0xb1, 0x60, 0x51, 0x1c, 0xa1, 0xa2, 0x03, 0xfe, 0xd1, 0x5d, 0xa7, + 0x77, 0xdf, 0xf2, 0xd9, 0xae, 0x63, 0x36, 0x7e, 0x2b, 0x57, 0xb1, 0x21, 0x95, 0x54, 0x33, 0xea, + 0x6c, 0x49, 0x48, 0xac, 0xc0, 0x9b, 0xff, 0x1a, 0xa5, 0xda, 0xfc, 0x60, 0xb4, 0x32, 0xfa, 0x5c, + 0xcf, 0xb9, 0xce, 0x49, 0x05, 0xb3, 0xc2, 0xaf, 0x32, 0x98, 0x99, 0xff, 0x39, 0x17, 0x6d, 0x5a, + 0x51, 0x8f, 0xac, 0xc1, 0x8c, 0xbf, 0x6f, 0xd1, 0x68, 0xd7, 0x7e, 0x29, 0x4a, 0xe1, 0x77, 0x18, + 0xf1, 0xc9, 0xa8, 0x0e, 0x22, 0x5b, 0x60, 0xbf, 0xb0, 0x90, 0xe4, 0x09, 0xbb, 0xe5, 0xda, 0xa4, + 0xdf, 0x27, 0x1d, 0x99, 0x82, 0x27, 0x09, 0x7b, 0xc4, 0xc0, 0x89, 0x0c, 0xba, 0x15, 0xf7, 0x49, + 0xc4, 0x2e, 0x5c, 0xd1, 0xfb, 0x24, 0x4f, 0x98, 0x77, 0x89, 0x02, 0xff, 0xd8, 0xbe, 0x49, 0xe9, + 0xe4, 0xbe, 0x09, 0xea, 0xc2, 0x02, 0x0d, 0xad, 0x20, 0x8c, 0x33, 0xe3, 0x53, 0x24, 0xe3, 0x68, + 0x3c, 0xaa, 0x2f, 0xb4, 0x35, 0x14, 0x9c, 0x42, 0x45, 0x43, 0x58, 0xb6, 0xbd, 0x81, 0xdf, 0x27, + 0x51, 0x13, 0x48, 0x18, 0x9b, 0xbe, 0xb7, 0x75, 0x71, 0x3c, 0xaa, 0x2f, 0x6f, 0x4c, 0x42, 0xe1, + 0x2c, 0x7c, 0xf4, 0xdb, 0x50, 0xee, 0x0c, 0x03, 0x8b, 0x11, 0x65, 0x62, 0xff, 0x72, 0x54, 0xca, + 0x6c, 0x4a, 0xfa, 0x93, 0x51, 0xfd, 0x2c, 0xab, 0x05, 0x1a, 0x11, 0x01, 0xc7, 0x2a, 0x68, 0x0f, + 0x2e, 0x7b, 0x3c, 0xf9, 0x15, 0xa1, 0x4f, 0x24, 0x18, 0xd1, 0xf6, 0x96, 0x7d, 0xe5, 0xa8, 0x51, + 0x78, 0xf9, 0xe1, 0xb1, 0x92, 0xf8, 0x04, 0x14, 0x74, 0x17, 0x66, 0xc5, 0x26, 0x92, 0xa7, 0x62, + 0xae, 0xfc, 0x04, 0xc4, 0xdd, 0x00, 0x53, 0xc3, 0x52, 0x1d, 0x3d, 0x86, 0x59, 0x61, 0x46, 0x1e, + 0x69, 0x37, 0xa6, 0x6b, 0x95, 0x8a, 0xe1, 0x27, 0xf1, 0x53, 0xfc, 0xc6, 0x12, 0x13, 0xed, 0xf2, + 0xc6, 0x14, 0x8b, 0xcb, 0x55, 0xbe, 0xcf, 0xf2, 0xb4, 0x76, 0xdb, 0x4c, 0x61, 0xdb, 0xed, 0x7a, + 0x5a, 0x43, 0x8a, 0x47, 0x65, 0x81, 0xc5, 0xa2, 0x72, 0xdf, 0xeb, 0xb5, 0x5d, 0xc7, 0xf7, 0x49, + 0x58, 0x9b, 0xd7, 0xa3, 0x72, 0x2b, 0xe6, 0x60, 0x45, 0x0a, 0x11, 0x1e, 0xd4, 0x44, 0xf3, 0x94, + 0xd6, 0xce, 0xf2, 0xd1, 0xac, 0x4d, 0xd1, 0x57, 0x12, 0x9a, 0x5a, 0x38, 0x93, 0x60, 0x58, 0x01, + 0x36, 0x6d, 0xd9, 0x85, 0x50, 0x67, 0x07, 0x3d, 0x50, 0x6a, 0xa0, 0x5b, 0xa7, 0x99, 0xdf, 0x5d, + 0x4f, 0x2d, 0x8b, 0xcc, 0x96, 0xac, 0x2a, 0x74, 0x11, 0x74, 0x53, 0xd6, 0x34, 0x9b, 0x4e, 0x8f, + 0xd0, 0x50, 0x86, 0x18, 0xbd, 0x48, 0x11, 0x2c, 0xac, 0xca, 0x99, 0x3f, 0x2d, 0xc1, 0x59, 0x09, + 0x27, 0x32, 0x0e, 0x74, 0x53, 0x4b, 0x2d, 0x5e, 0x4e, 0xa5, 0x16, 0x4b, 0x9a, 0xb0, 0x92, 0x5c, + 0x04, 0xb0, 0xa0, 0xa7, 0x51, 0x32, 0xc9, 0xb8, 0x95, 0x3b, 0x63, 0xd3, 0x90, 0x45, 0x84, 0xd0, + 0xf3, 0x35, 0x9c, 0xb2, 0xc0, 0x6c, 0xea, 0xe9, 0x92, 0x2c, 0x05, 0x6e, 0xe5, 0xce, 0xcc, 0x32, + 0x6c, 0xea, 0x79, 0x19, 0x4e, 0x59, 0x60, 0x36, 0xed, 0x21, 0x0d, 0xbd, 0x41, 0x6c, 0xb3, 0x94, + 0xdb, 0xe6, 0x06, 0x57, 0xcc, 0xb0, 0xb9, 0xa1, 0x21, 0xe2, 0x94, 0x05, 0xf4, 0x63, 0x03, 0x2e, + 0x7e, 0x40, 0xdc, 0x03, 0xc7, 0xa5, 0x3b, 0x8e, 0x4f, 0xfa, 0x8e, 0x9b, 0x7c, 0xb1, 0x88, 0xbd, + 0xbf, 0x93, 0xc3, 0xfa, 0x3d, 0x1d, 0x41, 0x1f, 0xc6, 0x97, 0xc6, 0xa3, 0xfa, 0xc5, 0x7b, 0xd9, + 0x36, 0xf0, 0x71, 0xc6, 0xcd, 0xef, 0xcd, 0x48, 0x8f, 0x57, 0x4f, 0x46, 0xf5, 0x2c, 0x31, 0x9e, + 0x72, 0x96, 0x04, 0xb0, 0xc0, 0xef, 0x61, 0x1d, 0x5b, 0x5e, 0x45, 0x4d, 0xe1, 0x35, 0x77, 0x35, + 0x45, 0x71, 0x28, 0xf3, 0xd9, 0xd4, 0x19, 0x38, 0x65, 0x01, 0xb9, 0x70, 0x56, 0x80, 0x47, 0x26, + 0x8b, 0xb9, 0x6f, 0xd4, 0xee, 0x3a, 0xe1, 0xdb, 0xb1, 0x9e, 0xb0, 0xb8, 0x34, 0x1e, 0xd5, 0xcf, + 0x6a, 0x74, 0xac, 0xc3, 0xa3, 0x21, 0x2c, 0xf2, 0x1d, 0xb7, 0xb1, 0x6f, 0xb9, 0x3d, 0x31, 0xed, + 0xd2, 0x67, 0xbe, 0x9a, 0x37, 0x51, 0x15, 0xaa, 0xc2, 0x20, 0x2f, 0x61, 0xb7, 0x53, 0x80, 0x78, + 0xc2, 0x84, 0xfc, 0xcc, 0xbe, 0x15, 0x7f, 0xe6, 0xcc, 0x34, 0x9f, 0xd9, 0xb2, 0xb2, 0x3f, 0x33, + 0xa1, 0x63, 0x1d, 0x1e, 0x7d, 0x17, 0x16, 0xf7, 0x52, 0xd7, 0x97, 0xf2, 0xac, 0xbe, 0x9d, 0xab, + 0xce, 0xc8, 0xb8, 0xf9, 0x14, 0xdf, 0x9a, 0x66, 0xe1, 0x09, 0x3b, 0xe6, 0x4f, 0x4a, 0x80, 0x26, + 0xfb, 0xf2, 0xe8, 0x86, 0x16, 0xca, 0xae, 0xa6, 0x42, 0xd9, 0xa2, 0xaa, 0xa1, 0x44, 0xb2, 0xc7, + 0x30, 0x2b, 0xc6, 0x3b, 0x45, 0xf7, 0x42, 0x0e, 0x44, 0x82, 0x65, 0x39, 0x85, 0xc4, 0x64, 0x09, + 0xbc, 0xf4, 0x47, 0xe9, 0x77, 0xa7, 0x80, 0xcf, 0xf2, 0xf2, 0x08, 0x15, 0xed, 0xcb, 0x83, 0x40, + 0xf8, 0x82, 0xf4, 0xb4, 0x9b, 0xd3, 0x79, 0x5a, 0x64, 0xe8, 0x5c, 0x7c, 0x76, 0x08, 0x3a, 0x56, + 0xa1, 0xe5, 0x44, 0xf5, 0xad, 0x3d, 0xe9, 0x5a, 0xcf, 0x30, 0x51, 0x8a, 0x5b, 0x49, 0x4c, 0x44, + 0xa0, 0x12, 0xaf, 0xb3, 0x74, 0xa4, 0x53, 0x18, 0xc8, 0xf6, 0xa0, 0x04, 0xd9, 0xfc, 0xf9, 0x2c, + 0x28, 0xc5, 0x02, 0xfa, 0x26, 0x2c, 0x50, 0x12, 0x1c, 0x3a, 0x36, 0x59, 0xb7, 0x6d, 0x6f, 0xe8, + 0x46, 0x27, 0x69, 0x7c, 0x3f, 0xda, 0xd6, 0xb8, 0x38, 0x25, 0xcd, 0x2f, 0x9f, 0xf9, 0x81, 0x21, + 0x9d, 0x27, 0xff, 0xe5, 0x73, 0xaa, 0x16, 0x95, 0xfd, 0x30, 0x89, 0xa6, 0x35, 0xd5, 0x8a, 0xcf, + 0xbb, 0xa9, 0xf6, 0x1d, 0x28, 0x53, 0xfd, 0x34, 0xfb, 0x4a, 0xfe, 0x44, 0x45, 0x1e, 0x20, 0x71, + 0xbf, 0x3f, 0x3e, 0x35, 0x62, 0x4c, 0x36, 0x29, 0x32, 0xcd, 0x9c, 0x99, 0x6e, 0x52, 0x9e, 0x92, + 0x60, 0xfe, 0x2e, 0x54, 0x02, 0x22, 0x26, 0x88, 0x4a, 0x17, 0xc9, 0xac, 0xb4, 0xb1, 0x14, 0xc2, + 0xe4, 0xc3, 0xa1, 0x13, 0x90, 0x01, 0x71, 0x43, 0x9a, 0xd4, 0x51, 0x11, 0x97, 0xe2, 0x04, 0x0d, + 0x7d, 0x00, 0xe0, 0xc7, 0x6d, 0x5b, 0x59, 0xc5, 0xe7, 0xce, 0xde, 0xf4, 0x86, 0x6f, 0x92, 0x36, + 0x26, 0x74, 0xac, 0xa0, 0xa3, 0xf7, 0xe1, 0x52, 0x52, 0x88, 0x6c, 0x12, 0xab, 0xc3, 0xcf, 0x58, + 0x79, 0x37, 0x22, 0x6e, 0x0b, 0xbe, 0x3c, 0x1e, 0xd5, 0x2f, 0x6d, 0x1c, 0x27, 0x84, 0x8f, 0xd7, + 0x47, 0x03, 0x98, 0x77, 0xbd, 0x0e, 0x69, 0x93, 0x3e, 0xb1, 0x43, 0x2f, 0x90, 0x15, 0x43, 0x9e, + 0x8a, 0x5e, 0xf4, 0x9e, 0xac, 0xfe, 0x03, 0x45, 0x5d, 0xf4, 0x27, 0x54, 0x0a, 0xd6, 0xe0, 0xcd, + 0x3f, 0x35, 0x20, 0xe3, 0x6d, 0x89, 0xe6, 0xbe, 0xc6, 0xf3, 0x76, 0xdf, 0xd7, 0x60, 0x96, 0x26, + 0x97, 0x04, 0x6a, 0x2f, 0x5c, 0x74, 0x50, 0x24, 0xd7, 0xfc, 0x5b, 0x03, 0xce, 0x67, 0xb5, 0x29, + 0x98, 0x1f, 0xc5, 0x4d, 0x09, 0x39, 0xbc, 0xfc, 0x1d, 0x1b, 0xf5, 0x02, 0x4d, 0x40, 0xe0, 0x04, + 0x8d, 0xc5, 0x93, 0x0e, 0xa1, 0xa1, 0xe3, 0xf2, 0xea, 0x70, 0xd3, 0x09, 0xe4, 0x18, 0xe3, 0x78, + 0xb2, 0xa9, 0x71, 0x71, 0x4a, 0xda, 0xfc, 0x61, 0x09, 0x96, 0x33, 0xd2, 0x46, 0xb4, 0x25, 0x1b, + 0xd4, 0x53, 0xdc, 0xad, 0xc4, 0x6f, 0x07, 0xb4, 0x26, 0x35, 0xf8, 0xc3, 0x7e, 0xff, 0xd9, 0xee, + 0x58, 0x22, 0x7d, 0xac, 0x60, 0x45, 0x1d, 0xe7, 0xe2, 0x29, 0x3a, 0xce, 0xf7, 0x00, 0x91, 0x8f, + 0x7d, 0x8f, 0x12, 0x99, 0xfe, 0x7b, 0xfc, 0x08, 0x28, 0xf1, 0xee, 0x47, 0xfc, 0x6e, 0x64, 0x6b, + 0x42, 0x02, 0x67, 0x68, 0xa1, 0x55, 0xa8, 0x74, 0xbd, 0xc0, 0x26, 0x6c, 0x94, 0x3c, 0xfa, 0x28, + 0x0d, 0x94, 0x3b, 0x11, 0x03, 0x27, 0x32, 0xe8, 0xbd, 0xa4, 0xc1, 0x36, 0x9b, 0xfb, 0x5e, 0x48, + 0x7c, 0x33, 0xdf, 0xec, 0xc7, 0x77, 0xd6, 0xd6, 0xe1, 0x1c, 0x57, 0x58, 0xdf, 0xd9, 0x8e, 0x5a, + 0xf7, 0xe2, 0xd1, 0xda, 0x45, 0xa9, 0x22, 0xda, 0xb6, 0x09, 0x1b, 0xa7, 0xe5, 0xcd, 0x4f, 0x4b, + 0xb0, 0x9c, 0x51, 0x2c, 0xc5, 0xd7, 0x15, 0xc6, 0xb3, 0x5c, 0x57, 0xfc, 0xaa, 0x3c, 0xe1, 0x75, + 0x98, 0x73, 0xbd, 0x0d, 0xcb, 0xde, 0x27, 0xf2, 0x6a, 0x38, 0x9e, 0xa2, 0x07, 0x82, 0x8c, 0x23, + 0x7e, 0xe4, 0x34, 0xa5, 0x53, 0x38, 0xcd, 0xd4, 0x0b, 0xfd, 0xcd, 0xa8, 0x60, 0xed, 0x3a, 0x7d, + 0xb2, 0x63, 0x85, 0xfb, 0xb2, 0xc3, 0x9b, 0xec, 0x4c, 0x8d, 0x8b, 0x53, 0xd2, 0xe8, 0x5b, 0x50, + 0x11, 0xcb, 0x13, 0xf4, 0x68, 0x8e, 0x8b, 0x95, 0x78, 0x30, 0xcd, 0x48, 0x09, 0x27, 0xfa, 0xc8, + 0x87, 0x8b, 0x3c, 0xb3, 0x62, 0x31, 0x77, 0xe0, 0x7c, 0x97, 0x6f, 0x7f, 0xf9, 0x66, 0x44, 0xb4, + 0x8c, 0x6e, 0xb1, 0xfa, 0x6c, 0x3b, 0x5b, 0xe4, 0xc9, 0xf1, 0x2c, 0x7c, 0x1c, 0xac, 0xf9, 0x43, + 0x03, 0xb2, 0xaf, 0x43, 0xf4, 0x0f, 0x33, 0x9e, 0xf1, 0xc3, 0x5e, 0x4d, 0x16, 0x5f, 0xb4, 0x2f, + 0xab, 0x59, 0x0b, 0x6f, 0xfe, 0x99, 0x01, 0xcb, 0x19, 0xf5, 0xdc, 0x17, 0xe3, 0xdc, 0xf8, 0xac, + 0x90, 0x1e, 0xdc, 0xd6, 0x21, 0x71, 0xc3, 0xd3, 0x5d, 0xc2, 0x6c, 0x89, 0xab, 0x8f, 0x82, 0xec, + 0x62, 0xe6, 0x2a, 0xc6, 0x78, 0x3f, 0x4c, 0xbf, 0xf3, 0x78, 0x86, 0xf0, 0x7a, 0xfc, 0x1d, 0x5b, + 0xe9, 0x45, 0xdf, 0xb1, 0x99, 0x7f, 0x67, 0xc0, 0x82, 0x7e, 0xb7, 0x83, 0xbe, 0x0c, 0xc5, 0x61, + 0xe0, 0xc8, 0x49, 0x8d, 0x47, 0xff, 0x0e, 0xde, 0xc6, 0x8c, 0xce, 0xd8, 0x01, 0xe9, 0xca, 0x15, + 0x8b, 0xd9, 0x98, 0x74, 0x31, 0xa3, 0x23, 0x02, 0x55, 0x3f, 0xf0, 0x3e, 0x3e, 0x12, 0x87, 0xf1, + 0x14, 0x2f, 0x40, 0x77, 0x12, 0xad, 0xa4, 0x6d, 0xa6, 0x10, 0xb1, 0x8a, 0xcb, 0xd3, 0x9c, 0xc9, + 0x66, 0xc0, 0x17, 0xc3, 0x5d, 0x7f, 0x5e, 0x80, 0x39, 0xe9, 0x34, 0xe8, 0x43, 0x58, 0xe8, 0x69, + 0xd3, 0x3b, 0xc5, 0xb0, 0x52, 0x77, 0x6e, 0x71, 0x5c, 0xd4, 0xe9, 0x38, 0x65, 0x00, 0xfd, 0x01, + 0x2c, 0xf5, 0x9c, 0x50, 0xff, 0xa6, 0x29, 0x2e, 0x1c, 0xef, 0xa6, 0x75, 0x9b, 0x97, 0xa4, 0xe1, + 0xa5, 0x09, 0x16, 0x9e, 0xb4, 0x84, 0x1e, 0x42, 0x29, 0x20, 0xdd, 0x69, 0x1e, 0x75, 0xb0, 0x3d, + 0x45, 0xba, 0x7c, 0x8f, 0xc5, 0x29, 0x12, 0x26, 0x5d, 0x8a, 0x39, 0x90, 0xf9, 0x47, 0x62, 0xa9, + 0x53, 0x0d, 0x91, 0xff, 0x8d, 0x47, 0xd9, 0xff, 0x6d, 0x00, 0x24, 0x83, 0xfd, 0xf5, 0x5b, 0x5b, + 0xf3, 0x6f, 0x0a, 0x30, 0x29, 0xc8, 0xf6, 0x85, 0x2d, 0xca, 0x34, 0x23, 0xf3, 0x1f, 0x21, 0x24, + 0x17, 0x3d, 0x86, 0x59, 0x8b, 0xff, 0x27, 0xc1, 0x14, 0x23, 0x16, 0xa6, 0x36, 0x3c, 0x37, 0x0c, + 0xbc, 0xfe, 0x3b, 0x94, 0x04, 0xca, 0xf3, 0x7d, 0x8e, 0x85, 0x25, 0x26, 0x22, 0xac, 0x86, 0x90, + 0xff, 0x0d, 0x30, 0xc5, 0x43, 0xdc, 0x49, 0x03, 0x4a, 0x3d, 0x21, 0xe1, 0x70, 0x82, 0x3c, 0xc5, + 0x3d, 0x9d, 0xf9, 0x7d, 0x03, 0x16, 0xd3, 0xdd, 0x43, 0xa6, 0xcf, 0x33, 0x82, 0xed, 0xcd, 0x74, + 0x6f, 0x76, 0x5b, 0x90, 0x71, 0xc4, 0x47, 0xf7, 0x60, 0x8e, 0x65, 0x86, 0x58, 0x46, 0xdb, 0x9c, + 0x79, 0x25, 0x3f, 0xdf, 0xef, 0x08, 0x3d, 0x1c, 0x01, 0x98, 0xff, 0x64, 0x00, 0x9a, 0xec, 0x2f, + 0xa1, 0x1d, 0x38, 0x2f, 0xde, 0x7a, 0xcb, 0x4b, 0xd3, 0x6d, 0x6d, 0x68, 0x57, 0xe4, 0xd0, 0xce, + 0xb7, 0x32, 0x64, 0x70, 0xa6, 0x66, 0x9c, 0x09, 0x17, 0x4e, 0x9f, 0x09, 0xbf, 0x06, 0xb3, 0x3e, + 0x9b, 0xab, 0x8e, 0x4c, 0x57, 0xe3, 0x15, 0xdf, 0xe1, 0x54, 0x2c, 0xb9, 0x66, 0x1b, 0x20, 0x79, + 0xfb, 0x85, 0xae, 0x42, 0xc9, 0xb5, 0x06, 0x51, 0x32, 0x10, 0x07, 0x12, 0xfe, 0xef, 0x27, 0x9c, + 0x83, 0x5e, 0x81, 0x99, 0x43, 0xab, 0x3f, 0x8c, 0xfe, 0xbf, 0x27, 0x7e, 0xc1, 0xf9, 0x88, 0x11, + 0xb1, 0xe0, 0x99, 0x7f, 0x5e, 0x80, 0xaa, 0xf2, 0x36, 0xe1, 0x79, 0xd5, 0x79, 0x2f, 0x41, 0xc1, + 0xa2, 0x3c, 0xaf, 0xae, 0x88, 0xcb, 0xa4, 0x75, 0x8a, 0x0b, 0x16, 0x45, 0xef, 0xc2, 0x8c, 0x6f, + 0x85, 0xfb, 0xd1, 0xfb, 0xd3, 0xeb, 0xd3, 0xbd, 0x9c, 0x60, 0x79, 0x70, 0xf2, 0x1d, 0xec, 0x17, + 0xc5, 0x02, 0x2f, 0x55, 0x4e, 0x14, 0x9f, 0x5f, 0x39, 0x61, 0x7e, 0xcf, 0x80, 0x73, 0xa9, 0x31, + 0xa0, 0xeb, 0x00, 0x34, 0xfe, 0x25, 0x97, 0x20, 0xee, 0xba, 0x24, 0x72, 0x58, 0x91, 0x7a, 0xe6, + 0xca, 0xfc, 0x9f, 0x0d, 0xb8, 0x72, 0xd2, 0x95, 0x0a, 0xab, 0xf7, 0xe4, 0xbd, 0x49, 0x5c, 0x61, + 0x18, 0x7a, 0xbd, 0x77, 0x4f, 0x67, 0xe3, 0xb4, 0x3c, 0xba, 0x09, 0x55, 0x85, 0x24, 0x07, 0x18, + 0x67, 0x27, 0x8a, 0x3a, 0x56, 0xe5, 0x9e, 0x21, 0x39, 0x34, 0xff, 0xc1, 0x80, 0xf3, 0x59, 0x8d, + 0x1f, 0xd4, 0x8b, 0x5e, 0x2a, 0x8b, 0x8a, 0xa0, 0x79, 0xca, 0x06, 0x52, 0x83, 0xbf, 0x57, 0xde, + 0x72, 0xc3, 0xe0, 0x28, 0xfb, 0x0d, 0xf3, 0xe5, 0xdb, 0x00, 0x89, 0x0c, 0x5a, 0x84, 0xe2, 0x01, + 0x39, 0x12, 0x13, 0x87, 0xd9, 0x9f, 0xe8, 0xbc, 0xb6, 0x8d, 0xe4, 0xbe, 0xf9, 0x7a, 0xe1, 0xb6, + 0xf1, 0xf5, 0xf2, 0x9f, 0xfc, 0x45, 0xfd, 0xcc, 0x27, 0xbf, 0xbc, 0x7a, 0xc6, 0xfc, 0x91, 0x01, + 0x6a, 0xee, 0x86, 0xde, 0x80, 0xca, 0x7e, 0x18, 0xfa, 0x9c, 0x24, 0x1f, 0x46, 0xf0, 0xd7, 0xba, + 0x6f, 0xef, 0xee, 0xee, 0x70, 0x22, 0x4e, 0xf8, 0xa8, 0x01, 0xc0, 0x7e, 0x50, 0x21, 0x5d, 0x4a, + 0x1e, 0x33, 0x31, 0xe9, 0xb6, 0x10, 0x57, 0x24, 0x44, 0x89, 0x23, 0x84, 0xc5, 0xbf, 0x9c, 0xc8, + 0x12, 0x47, 0x48, 0x46, 0x3c, 0xf3, 0xaf, 0x0d, 0x58, 0x9a, 0x78, 0x88, 0x83, 0x76, 0xe2, 0xa4, + 0x6e, 0xda, 0xbe, 0xd3, 0x31, 0xe9, 0xdf, 0x33, 0xfb, 0xf5, 0x6d, 0x38, 0x2f, 0x10, 0xb9, 0xd5, + 0xe4, 0xd1, 0xc1, 0x53, 0x03, 0x9c, 0xf9, 0x97, 0x06, 0x40, 0xd2, 0x09, 0x41, 0x7b, 0x30, 0x2f, + 0x86, 0xa4, 0x65, 0x27, 0xf9, 0x3f, 0xf0, 0xbc, 0x34, 0x31, 0xdf, 0x56, 0x50, 0xb0, 0x86, 0xc9, + 0xaa, 0xfe, 0x81, 0x37, 0x74, 0x43, 0xbe, 0xbb, 0x0a, 0xfa, 0x83, 0xf6, 0xfb, 0x11, 0x03, 0x27, + 0x32, 0xe6, 0x27, 0x45, 0x58, 0xce, 0xb8, 0xfa, 0xfd, 0x7f, 0xdd, 0x4f, 0x7b, 0x1d, 0xe6, 0xc4, + 0x6b, 0x60, 0x9a, 0xce, 0x19, 0xc4, 0x63, 0x61, 0x8a, 0x23, 0x3e, 0x5a, 0x83, 0xaa, 0xe3, 0xda, + 0xa2, 0x45, 0x6e, 0x45, 0x7d, 0x14, 0x71, 0x0b, 0x94, 0x90, 0xb1, 0x2a, 0xa3, 0x37, 0x5e, 0x66, + 0x9f, 0xde, 0x78, 0x31, 0xbf, 0x0d, 0x4b, 0x13, 0x59, 0x4f, 0xbe, 0xe3, 0x93, 0xf0, 0xff, 0xcd, + 0x4c, 0x1d, 0x9f, 0xe2, 0x5f, 0x32, 0x05, 0xcf, 0xfc, 0xb1, 0x01, 0x0b, 0xa9, 0xf4, 0xf0, 0x54, + 0x55, 0xfa, 0x43, 0xb5, 0x4a, 0x3f, 0x5d, 0x6a, 0xab, 0xd5, 0xeb, 0xe6, 0x3d, 0xc8, 0x7e, 0xf0, + 0x99, 0x9e, 0x71, 0xe3, 0xe9, 0x33, 0x6e, 0xfe, 0xb4, 0x00, 0x95, 0xf8, 0x9d, 0x0c, 0x7a, 0x4b, + 0x9b, 0xb9, 0x4b, 0xea, 0xcc, 0x3d, 0x19, 0xd5, 0x85, 0xa0, 0x32, 0x8d, 0xef, 0x43, 0x25, 0x7e, + 0x67, 0x15, 0x77, 0x21, 0xf2, 0xbf, 0xa5, 0x8a, 0x97, 0x36, 0x7e, 0xbc, 0x85, 0x13, 0x3c, 0x96, + 0xcf, 0x45, 0x0f, 0xa1, 0xee, 0x3b, 0xfd, 0xbe, 0x43, 0xe5, 0x25, 0x46, 0x91, 0x5f, 0x62, 0xc4, + 0xf9, 0xdc, 0x66, 0x86, 0x0c, 0xce, 0xd4, 0x44, 0x3b, 0x30, 0x43, 0x43, 0xe2, 0x53, 0xd9, 0x13, + 0x7c, 0x23, 0xd7, 0x13, 0x22, 0xe2, 0xf3, 0x6a, 0x2e, 0x76, 0x11, 0x46, 0xa1, 0x58, 0x00, 0x99, + 0xff, 0x61, 0x40, 0x39, 0x12, 0x41, 0x6f, 0x6a, 0x93, 0x57, 0x4b, 0x4d, 0x1e, 0x97, 0xfb, 0x3f, + 0x3b, 0x77, 0xe6, 0xc8, 0x80, 0x05, 0xfd, 0x3a, 0x54, 0xe9, 0x21, 0x18, 0x27, 0xf5, 0x10, 0xd0, + 0x9b, 0x50, 0xb6, 0xfa, 0x7d, 0xef, 0xa3, 0x2d, 0xf7, 0x50, 0xf6, 0xed, 0xe2, 0xfb, 0xbd, 0x75, + 0x49, 0xc7, 0xb1, 0x04, 0x3a, 0x84, 0x73, 0x42, 0x2f, 0x79, 0xe8, 0x56, 0xcc, 0x7d, 0xcd, 0x94, + 0x75, 0xd8, 0x34, 0x97, 0x59, 0x7a, 0xd4, 0xd6, 0x31, 0x71, 0xda, 0x48, 0xf3, 0xda, 0xa7, 0x9f, + 0xaf, 0x9c, 0xf9, 0xc5, 0xe7, 0x2b, 0x67, 0x3e, 0xfb, 0x7c, 0xe5, 0xcc, 0x27, 0xe3, 0x15, 0xe3, + 0xd3, 0xf1, 0x8a, 0xf1, 0x8b, 0xf1, 0x8a, 0xf1, 0xd9, 0x78, 0xc5, 0xf8, 0xb7, 0xf1, 0x8a, 0xf1, + 0xc7, 0xff, 0xbe, 0x72, 0xe6, 0xdb, 0x85, 0xc3, 0xb5, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x2b, + 0xec, 0xd9, 0xf8, 0xf4, 0x40, 0x00, 0x00, +} + +func (m *BinaryBuildRequestOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BinaryBuildRequestOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BinaryBuildRequestOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.CommitterEmail) + copy(dAtA[i:], m.CommitterEmail) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CommitterEmail))) + i-- + dAtA[i] = 0x42 + i -= len(m.CommitterName) + copy(dAtA[i:], m.CommitterName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CommitterName))) + i-- + dAtA[i] = 0x3a + i -= len(m.AuthorEmail) + copy(dAtA[i:], m.AuthorEmail) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AuthorEmail))) + i-- + dAtA[i] = 0x32 + i -= len(m.AuthorName) + copy(dAtA[i:], m.AuthorName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AuthorName))) + i-- + dAtA[i] = 0x2a + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x22 + i -= len(m.Commit) + copy(dAtA[i:], m.Commit) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Commit))) + i-- + dAtA[i] = 0x1a + i -= len(m.AsFile) + copy(dAtA[i:], m.AsFile) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AsFile))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BinaryBuildSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BinaryBuildSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BinaryBuildSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.AsFile) + copy(dAtA[i:], m.AsFile) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AsFile))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BitbucketWebHookCause) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BitbucketWebHookCause) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BitbucketWebHookCause) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.CommonWebHookCause.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Build) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Build) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Build) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BuildCondition) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.LastUpdateTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BuildConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BuildConfigList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildConfigList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildConfigList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BuildConfigSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildConfigSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildConfigSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.FailedBuildsHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.FailedBuildsHistoryLimit)) + i-- + dAtA[i] = 0x28 + } + if m.SuccessfulBuildsHistoryLimit != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.SuccessfulBuildsHistoryLimit)) + i-- + dAtA[i] = 0x20 + } + { + size, err := m.CommonSpec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.RunPolicy) + copy(dAtA[i:], m.RunPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RunPolicy))) + i-- + dAtA[i] = 0x12 + if len(m.Triggers) > 0 { + for iNdEx := len(m.Triggers) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Triggers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *BuildConfigStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildConfigStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildConfigStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.LastVersion)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + +func (m *BuildList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BuildLog) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildLog) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildLog) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *BuildLogOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildLogOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildLogOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.InsecureSkipTLSVerifyBackend { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x58 + if m.Version != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Version)) + i-- + dAtA[i] = 0x50 + } + i-- + if m.NoWait { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x48 + if m.LimitBytes != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.LimitBytes)) + i-- + dAtA[i] = 0x40 + } + if m.TailLines != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.TailLines)) + i-- + dAtA[i] = 0x38 + } + i-- + if m.Timestamps { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + if m.SinceTime != nil { + { + size, err := m.SinceTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.SinceSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.SinceSeconds)) + i-- + dAtA[i] = 0x20 + } + i-- + if m.Previous { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i-- + if m.Follow { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + i -= len(m.Container) + copy(dAtA[i:], m.Container) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Container))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BuildOutput) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildOutput) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildOutput) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ImageLabels) > 0 { + for iNdEx := len(m.ImageLabels) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ImageLabels[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.PushSecret != nil { + { + size, err := m.PushSecret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.To != nil { + { + size, err := m.To.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *BuildPostCommitSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildPostCommitSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildPostCommitSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Script) + copy(dAtA[i:], m.Script) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Script))) + i-- + dAtA[i] = 0x1a + if len(m.Args) > 0 { + for iNdEx := len(m.Args) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Args[iNdEx]) + copy(dAtA[i:], m.Args[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Args[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.Command) > 0 { + for iNdEx := len(m.Command) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Command[iNdEx]) + copy(dAtA[i:], m.Command[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Command[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *BuildRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.SourceStrategyOptions != nil { + { + size, err := m.SourceStrategyOptions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } + if m.DockerStrategyOptions != nil { + { + size, err := m.DockerStrategyOptions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + if len(m.TriggeredBy) > 0 { + for iNdEx := len(m.TriggeredBy) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TriggeredBy[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + } + if len(m.Env) > 0 { + for iNdEx := len(m.Env) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Env[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } + if m.LastVersion != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.LastVersion)) + i-- + dAtA[i] = 0x30 + } + if m.Binary != nil { + { + size, err := m.Binary.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.From != nil { + { + size, err := m.From.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.TriggeredByImage != nil { + { + size, err := m.TriggeredByImage.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Revision != nil { + { + size, err := m.Revision.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BuildSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ConfigMaps) > 0 { + for iNdEx := len(m.ConfigMaps) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ConfigMaps[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + } + if len(m.Secrets) > 0 { + for iNdEx := len(m.Secrets) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Secrets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + } + if m.SourceSecret != nil { + { + size, err := m.SourceSecret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + i -= len(m.ContextDir) + copy(dAtA[i:], m.ContextDir) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ContextDir))) + i-- + dAtA[i] = 0x32 + if len(m.Images) > 0 { + for iNdEx := len(m.Images) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Images[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } + if m.Git != nil { + { + size, err := m.Git.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.Dockerfile != nil { + i -= len(*m.Dockerfile) + copy(dAtA[i:], *m.Dockerfile) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Dockerfile))) + i-- + dAtA[i] = 0x1a + } + if m.Binary != nil { + { + size, err := m.Binary.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BuildSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TriggeredBy) > 0 { + for iNdEx := len(m.TriggeredBy) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TriggeredBy[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.CommonSpec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BuildStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + } + } + i -= len(m.LogSnippet) + copy(dAtA[i:], m.LogSnippet) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.LogSnippet))) + i-- + dAtA[i] = 0x62 + if len(m.Stages) > 0 { + for iNdEx := len(m.Stages) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Stages[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + } + } + { + size, err := m.Output.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + if m.Config != nil { + { + size, err := m.Config.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + i -= len(m.OutputDockerImageReference) + copy(dAtA[i:], m.OutputDockerImageReference) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.OutputDockerImageReference))) + i-- + dAtA[i] = 0x42 + i = encodeVarintGenerated(dAtA, i, uint64(m.Duration)) + i-- + dAtA[i] = 0x38 + if m.CompletionTimestamp != nil { + { + size, err := m.CompletionTimestamp.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if m.StartTimestamp != nil { + { + size, err := m.StartTimestamp.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x22 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x1a + i-- + if m.Cancelled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + i -= len(m.Phase) + copy(dAtA[i:], m.Phase) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BuildStatusOutput) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildStatusOutput) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildStatusOutput) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.To != nil { + { + size, err := m.To.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *BuildStatusOutputTo) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildStatusOutputTo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildStatusOutputTo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.ImageDigest) + copy(dAtA[i:], m.ImageDigest) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ImageDigest))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BuildStrategy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildStrategy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.JenkinsPipelineStrategy != nil { + { + size, err := m.JenkinsPipelineStrategy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.CustomStrategy != nil { + { + size, err := m.CustomStrategy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.SourceStrategy != nil { + { + size, err := m.SourceStrategy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.DockerStrategy != nil { + { + size, err := m.DockerStrategy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BuildTriggerCause) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildTriggerCause) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildTriggerCause) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.BitbucketWebHook != nil { + { + size, err := m.BitbucketWebHook.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if m.GitLabWebHook != nil { + { + size, err := m.GitLabWebHook.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.ImageChangeBuild != nil { + { + size, err := m.ImageChangeBuild.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.GitHubWebHook != nil { + { + size, err := m.GitHubWebHook.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.GenericWebHook != nil { + { + size, err := m.GenericWebHook.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BuildTriggerPolicy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BuildTriggerPolicy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BuildTriggerPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.BitbucketWebHook != nil { + { + size, err := m.BitbucketWebHook.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if m.GitLabWebHook != nil { + { + size, err := m.GitLabWebHook.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.ImageChange != nil { + { + size, err := m.ImageChange.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.GenericWebHook != nil { + { + size, err := m.GenericWebHook.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.GitHubWebHook != nil { + { + size, err := m.GitHubWebHook.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *CommonSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CommonSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CommonSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.NodeSelector != nil { + { + size, err := m.NodeSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + if m.CompletionDeadlineSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.CompletionDeadlineSeconds)) + i-- + dAtA[i] = 0x40 + } + { + size, err := m.PostCommit.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + { + size, err := m.Resources.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + { + size, err := m.Output.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + { + size, err := m.Strategy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if m.Revision != nil { + { + size, err := m.Revision.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + { + size, err := m.Source.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.ServiceAccount) + copy(dAtA[i:], m.ServiceAccount) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceAccount))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *CommonWebHookCause) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CommonWebHookCause) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CommonWebHookCause) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Secret) + copy(dAtA[i:], m.Secret) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Secret))) + i-- + dAtA[i] = 0x12 + if m.Revision != nil { + { + size, err := m.Revision.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ConfigMapBuildSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ConfigMapBuildSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConfigMapBuildSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.DestinationDir) + copy(dAtA[i:], m.DestinationDir) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DestinationDir))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ConfigMap.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *CustomBuildStrategy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CustomBuildStrategy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CustomBuildStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.BuildAPIVersion) + copy(dAtA[i:], m.BuildAPIVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.BuildAPIVersion))) + i-- + dAtA[i] = 0x3a + if len(m.Secrets) > 0 { + for iNdEx := len(m.Secrets) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Secrets[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + } + i-- + if m.ForcePull { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x28 + i-- + if m.ExposeDockerSocket { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + if len(m.Env) > 0 { + for iNdEx := len(m.Env) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Env[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.PullSecret != nil { + { + size, err := m.PullSecret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + { + size, err := m.From.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DockerBuildStrategy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DockerBuildStrategy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DockerBuildStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ImageOptimizationPolicy != nil { + i -= len(*m.ImageOptimizationPolicy) + copy(dAtA[i:], *m.ImageOptimizationPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.ImageOptimizationPolicy))) + i-- + dAtA[i] = 0x42 + } + if len(m.BuildArgs) > 0 { + for iNdEx := len(m.BuildArgs) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.BuildArgs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } + i -= len(m.DockerfilePath) + copy(dAtA[i:], m.DockerfilePath) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DockerfilePath))) + i-- + dAtA[i] = 0x32 + i-- + if m.ForcePull { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x28 + if len(m.Env) > 0 { + for iNdEx := len(m.Env) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Env[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + i-- + if m.NoCache { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + if m.PullSecret != nil { + { + size, err := m.PullSecret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.From != nil { + { + size, err := m.From.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DockerStrategyOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DockerStrategyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DockerStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.NoCache != nil { + i-- + if *m.NoCache { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } + if len(m.BuildArgs) > 0 { + for iNdEx := len(m.BuildArgs) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.BuildArgs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *GenericWebHookCause) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenericWebHookCause) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenericWebHookCause) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Secret) + copy(dAtA[i:], m.Secret) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Secret))) + i-- + dAtA[i] = 0x12 + if m.Revision != nil { + { + size, err := m.Revision.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GenericWebHookEvent) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenericWebHookEvent) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenericWebHookEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.DockerStrategyOptions != nil { + { + size, err := m.DockerStrategyOptions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if len(m.Env) > 0 { + for iNdEx := len(m.Env) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Env[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.Git != nil { + { + size, err := m.Git.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *GitBuildSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GitBuildSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GitBuildSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.ProxyConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Ref) + copy(dAtA[i:], m.Ref) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Ref))) + i-- + dAtA[i] = 0x12 + i -= len(m.URI) + copy(dAtA[i:], m.URI) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.URI))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *GitHubWebHookCause) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GitHubWebHookCause) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GitHubWebHookCause) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Secret) + copy(dAtA[i:], m.Secret) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Secret))) + i-- + dAtA[i] = 0x12 + if m.Revision != nil { + { + size, err := m.Revision.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GitInfo) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GitInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GitInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Refs) > 0 { + for iNdEx := len(m.Refs) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Refs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + { + size, err := m.GitSourceRevision.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.GitBuildSource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *GitLabWebHookCause) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GitLabWebHookCause) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GitLabWebHookCause) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.CommonWebHookCause.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *GitRefInfo) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GitRefInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GitRefInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.GitSourceRevision.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.GitBuildSource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *GitSourceRevision) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GitSourceRevision) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GitSourceRevision) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x22 + { + size, err := m.Committer.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Author.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Commit) + copy(dAtA[i:], m.Commit) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Commit))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageChangeCause) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageChangeCause) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageChangeCause) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.FromRef != nil { + { + size, err := m.FromRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.ImageID) + copy(dAtA[i:], m.ImageID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ImageID))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageChangeTrigger) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageChangeTrigger) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageChangeTrigger) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.Paused { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + if m.From != nil { + { + size, err := m.From.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.LastTriggeredImageID) + copy(dAtA[i:], m.LastTriggeredImageID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.LastTriggeredImageID))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageLabel) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageLabel) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageLabel) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Value) + copy(dAtA[i:], m.Value) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Value))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.As) > 0 { + for iNdEx := len(m.As) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.As[iNdEx]) + copy(dAtA[i:], m.As[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.As[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + if m.PullSecret != nil { + { + size, err := m.PullSecret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if len(m.Paths) > 0 { + for iNdEx := len(m.Paths) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Paths[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.From.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageSourcePath) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageSourcePath) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageSourcePath) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.DestinationDir) + copy(dAtA[i:], m.DestinationDir) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DestinationDir))) + i-- + dAtA[i] = 0x12 + i -= len(m.SourcePath) + copy(dAtA[i:], m.SourcePath) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SourcePath))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *JenkinsPipelineBuildStrategy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *JenkinsPipelineBuildStrategy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *JenkinsPipelineBuildStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Env) > 0 { + for iNdEx := len(m.Env) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Env[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.Jenkinsfile) + copy(dAtA[i:], m.Jenkinsfile) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Jenkinsfile))) + i-- + dAtA[i] = 0x12 + i -= len(m.JenkinsfilePath) + copy(dAtA[i:], m.JenkinsfilePath) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.JenkinsfilePath))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m OptionalNodeSelector) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m OptionalNodeSelector) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m OptionalNodeSelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m) > 0 { + keysForItems := make([]string, 0, len(m)) + for k := range m { + keysForItems = append(keysForItems, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForItems) + for iNdEx := len(keysForItems) - 1; iNdEx >= 0; iNdEx-- { + v := m[string(keysForItems[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForItems[iNdEx]) + copy(dAtA[i:], keysForItems[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForItems[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *ProxyConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ProxyConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ProxyConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.NoProxy != nil { + i -= len(*m.NoProxy) + copy(dAtA[i:], *m.NoProxy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.NoProxy))) + i-- + dAtA[i] = 0x2a + } + if m.HTTPSProxy != nil { + i -= len(*m.HTTPSProxy) + copy(dAtA[i:], *m.HTTPSProxy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.HTTPSProxy))) + i-- + dAtA[i] = 0x22 + } + if m.HTTPProxy != nil { + i -= len(*m.HTTPProxy) + copy(dAtA[i:], *m.HTTPProxy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.HTTPProxy))) + i-- + dAtA[i] = 0x1a + } + return len(dAtA) - i, nil +} + +func (m *SecretBuildSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SecretBuildSource) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SecretBuildSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.DestinationDir) + copy(dAtA[i:], m.DestinationDir) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DestinationDir))) + i-- + dAtA[i] = 0x12 + { + size, err := m.Secret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SecretLocalReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SecretLocalReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SecretLocalReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SecretSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SecretSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SecretSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.MountPath) + copy(dAtA[i:], m.MountPath) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MountPath))) + i-- + dAtA[i] = 0x12 + { + size, err := m.SecretSource.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SourceBuildStrategy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SourceBuildStrategy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SourceBuildStrategy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.ForcePull { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + if m.Incremental != nil { + i-- + if *m.Incremental { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x28 + } + i -= len(m.Scripts) + copy(dAtA[i:], m.Scripts) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Scripts))) + i-- + dAtA[i] = 0x22 + if len(m.Env) > 0 { + for iNdEx := len(m.Env) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Env[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.PullSecret != nil { + { + size, err := m.PullSecret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + { + size, err := m.From.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SourceControlUser) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SourceControlUser) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SourceControlUser) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Email) + copy(dAtA[i:], m.Email) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Email))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SourceRevision) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SourceRevision) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SourceRevision) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Git != nil { + { + size, err := m.Git.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SourceStrategyOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SourceStrategyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SourceStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Incremental != nil { + i-- + if *m.Incremental { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *StageInfo) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StageInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StageInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Steps) > 0 { + for iNdEx := len(m.Steps) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Steps[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + i = encodeVarintGenerated(dAtA, i, uint64(m.DurationMilliseconds)) + i-- + dAtA[i] = 0x18 + { + size, err := m.StartTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *StepInfo) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StepInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StepInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.DurationMilliseconds)) + i-- + dAtA[i] = 0x18 + { + size, err := m.StartTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *WebHookTrigger) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *WebHookTrigger) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *WebHookTrigger) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.SecretReference != nil { + { + size, err := m.SecretReference.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + i-- + if m.AllowEnv { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + i -= len(m.Secret) + copy(dAtA[i:], m.Secret) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Secret))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *BinaryBuildRequestOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.AsFile) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Commit) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.AuthorName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.AuthorEmail) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.CommitterName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.CommitterEmail) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *BinaryBuildSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AsFile) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *BitbucketWebHookCause) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.CommonWebHookCause.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Build) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *BuildCondition) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastUpdateTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *BuildConfig) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *BuildConfigList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *BuildConfigSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Triggers) > 0 { + for _, e := range m.Triggers { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.RunPolicy) + n += 1 + l + sovGenerated(uint64(l)) + l = m.CommonSpec.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.SuccessfulBuildsHistoryLimit != nil { + n += 1 + sovGenerated(uint64(*m.SuccessfulBuildsHistoryLimit)) + } + if m.FailedBuildsHistoryLimit != nil { + n += 1 + sovGenerated(uint64(*m.FailedBuildsHistoryLimit)) + } + return n +} + +func (m *BuildConfigStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 1 + sovGenerated(uint64(m.LastVersion)) + return n +} + +func (m *BuildList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *BuildLog) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *BuildLogOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Container) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + n += 2 + if m.SinceSeconds != nil { + n += 1 + sovGenerated(uint64(*m.SinceSeconds)) + } + if m.SinceTime != nil { + l = m.SinceTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + if m.TailLines != nil { + n += 1 + sovGenerated(uint64(*m.TailLines)) + } + if m.LimitBytes != nil { + n += 1 + sovGenerated(uint64(*m.LimitBytes)) + } + n += 2 + if m.Version != nil { + n += 1 + sovGenerated(uint64(*m.Version)) + } + n += 2 + return n +} + +func (m *BuildOutput) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.To != nil { + l = m.To.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.PushSecret != nil { + l = m.PushSecret.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.ImageLabels) > 0 { + for _, e := range m.ImageLabels { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *BuildPostCommitSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Command) > 0 { + for _, s := range m.Command { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Args) > 0 { + for _, s := range m.Args { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.Script) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *BuildRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Revision != nil { + l = m.Revision.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.TriggeredByImage != nil { + l = m.TriggeredByImage.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.From != nil { + l = m.From.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Binary != nil { + l = m.Binary.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LastVersion != nil { + n += 1 + sovGenerated(uint64(*m.LastVersion)) + } + if len(m.Env) > 0 { + for _, e := range m.Env { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.TriggeredBy) > 0 { + for _, e := range m.TriggeredBy { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.DockerStrategyOptions != nil { + l = m.DockerStrategyOptions.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.SourceStrategyOptions != nil { + l = m.SourceStrategyOptions.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *BuildSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.Binary != nil { + l = m.Binary.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Dockerfile != nil { + l = len(*m.Dockerfile) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Git != nil { + l = m.Git.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Images) > 0 { + for _, e := range m.Images { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.ContextDir) + n += 1 + l + sovGenerated(uint64(l)) + if m.SourceSecret != nil { + l = m.SourceSecret.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Secrets) > 0 { + for _, e := range m.Secrets { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.ConfigMaps) > 0 { + for _, e := range m.ConfigMaps { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *BuildSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.CommonSpec.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.TriggeredBy) > 0 { + for _, e := range m.TriggeredBy { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *BuildStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + if m.StartTimestamp != nil { + l = m.StartTimestamp.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.CompletionTimestamp != nil { + l = m.CompletionTimestamp.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 1 + sovGenerated(uint64(m.Duration)) + l = len(m.OutputDockerImageReference) + n += 1 + l + sovGenerated(uint64(l)) + if m.Config != nil { + l = m.Config.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = m.Output.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Stages) > 0 { + for _, e := range m.Stages { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.LogSnippet) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *BuildStatusOutput) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.To != nil { + l = m.To.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *BuildStatusOutputTo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ImageDigest) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *BuildStrategy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.DockerStrategy != nil { + l = m.DockerStrategy.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.SourceStrategy != nil { + l = m.SourceStrategy.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.CustomStrategy != nil { + l = m.CustomStrategy.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.JenkinsPipelineStrategy != nil { + l = m.JenkinsPipelineStrategy.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *BuildTriggerCause) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + if m.GenericWebHook != nil { + l = m.GenericWebHook.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.GitHubWebHook != nil { + l = m.GitHubWebHook.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ImageChangeBuild != nil { + l = m.ImageChangeBuild.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.GitLabWebHook != nil { + l = m.GitLabWebHook.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.BitbucketWebHook != nil { + l = m.BitbucketWebHook.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *BuildTriggerPolicy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.GitHubWebHook != nil { + l = m.GitHubWebHook.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.GenericWebHook != nil { + l = m.GenericWebHook.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ImageChange != nil { + l = m.ImageChange.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.GitLabWebHook != nil { + l = m.GitLabWebHook.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.BitbucketWebHook != nil { + l = m.BitbucketWebHook.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *CommonSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ServiceAccount) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Source.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Revision != nil { + l = m.Revision.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = m.Strategy.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Output.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Resources.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.PostCommit.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.CompletionDeadlineSeconds != nil { + n += 1 + sovGenerated(uint64(*m.CompletionDeadlineSeconds)) + } + if m.NodeSelector != nil { + l = m.NodeSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *CommonWebHookCause) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Revision != nil { + l = m.Revision.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.Secret) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ConfigMapBuildSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ConfigMap.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DestinationDir) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *CustomBuildStrategy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.From.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.PullSecret != nil { + l = m.PullSecret.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Env) > 0 { + for _, e := range m.Env { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + n += 2 + n += 2 + if len(m.Secrets) > 0 { + for _, e := range m.Secrets { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.BuildAPIVersion) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *DockerBuildStrategy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.From != nil { + l = m.From.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.PullSecret != nil { + l = m.PullSecret.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + if len(m.Env) > 0 { + for _, e := range m.Env { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + n += 2 + l = len(m.DockerfilePath) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.BuildArgs) > 0 { + for _, e := range m.BuildArgs { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.ImageOptimizationPolicy != nil { + l = len(*m.ImageOptimizationPolicy) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *DockerStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.BuildArgs) > 0 { + for _, e := range m.BuildArgs { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.NoCache != nil { + n += 2 + } + return n +} + +func (m *GenericWebHookCause) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Revision != nil { + l = m.Revision.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.Secret) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *GenericWebHookEvent) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.Git != nil { + l = m.Git.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Env) > 0 { + for _, e := range m.Env { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.DockerStrategyOptions != nil { + l = m.DockerStrategyOptions.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *GitBuildSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.URI) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Ref) + n += 1 + l + sovGenerated(uint64(l)) + l = m.ProxyConfig.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *GitHubWebHookCause) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Revision != nil { + l = m.Revision.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.Secret) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *GitInfo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.GitBuildSource.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.GitSourceRevision.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Refs) > 0 { + for _, e := range m.Refs { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *GitLabWebHookCause) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.CommonWebHookCause.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *GitRefInfo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.GitBuildSource.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.GitSourceRevision.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *GitSourceRevision) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Commit) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Author.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Committer.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ImageChangeCause) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ImageID) + n += 1 + l + sovGenerated(uint64(l)) + if m.FromRef != nil { + l = m.FromRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ImageChangeTrigger) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.LastTriggeredImageID) + n += 1 + l + sovGenerated(uint64(l)) + if m.From != nil { + l = m.From.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + return n +} + +func (m *ImageLabel) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Value) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ImageSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.From.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Paths) > 0 { + for _, e := range m.Paths { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.PullSecret != nil { + l = m.PullSecret.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.As) > 0 { + for _, s := range m.As { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ImageSourcePath) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SourcePath) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DestinationDir) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *JenkinsPipelineBuildStrategy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.JenkinsfilePath) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Jenkinsfile) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Env) > 0 { + for _, e := range m.Env { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m OptionalNodeSelector) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m) > 0 { + for k, v := range m { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *ProxyConfig) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.HTTPProxy != nil { + l = len(*m.HTTPProxy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.HTTPSProxy != nil { + l = len(*m.HTTPSProxy) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.NoProxy != nil { + l = len(*m.NoProxy) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *SecretBuildSource) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Secret.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DestinationDir) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SecretLocalReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SecretSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.SecretSource.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.MountPath) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SourceBuildStrategy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.From.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.PullSecret != nil { + l = m.PullSecret.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Env) > 0 { + for _, e := range m.Env { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.Scripts) + n += 1 + l + sovGenerated(uint64(l)) + if m.Incremental != nil { + n += 2 + } + n += 2 + return n +} + +func (m *SourceControlUser) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Email) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SourceRevision) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.Git != nil { + l = m.Git.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *SourceStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Incremental != nil { + n += 2 + } + return n +} + +func (m *StageInfo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.StartTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.DurationMilliseconds)) + if len(m.Steps) > 0 { + for _, e := range m.Steps { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *StepInfo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.StartTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.DurationMilliseconds)) + return n +} + +func (m *WebHookTrigger) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Secret) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + if m.SecretReference != nil { + l = m.SecretReference.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *BinaryBuildRequestOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BinaryBuildRequestOptions{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `AsFile:` + fmt.Sprintf("%v", this.AsFile) + `,`, + `Commit:` + fmt.Sprintf("%v", this.Commit) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `AuthorName:` + fmt.Sprintf("%v", this.AuthorName) + `,`, + `AuthorEmail:` + fmt.Sprintf("%v", this.AuthorEmail) + `,`, + `CommitterName:` + fmt.Sprintf("%v", this.CommitterName) + `,`, + `CommitterEmail:` + fmt.Sprintf("%v", this.CommitterEmail) + `,`, + `}`, + }, "") + return s +} +func (this *BinaryBuildSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BinaryBuildSource{`, + `AsFile:` + fmt.Sprintf("%v", this.AsFile) + `,`, + `}`, + }, "") + return s +} +func (this *BitbucketWebHookCause) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BitbucketWebHookCause{`, + `CommonWebHookCause:` + strings.Replace(strings.Replace(this.CommonWebHookCause.String(), "CommonWebHookCause", "CommonWebHookCause", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Build) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Build{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "BuildSpec", "BuildSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "BuildStatus", "BuildStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *BuildCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BuildCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `LastUpdateTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastUpdateTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *BuildConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BuildConfig{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "BuildConfigSpec", "BuildConfigSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "BuildConfigStatus", "BuildConfigStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *BuildConfigList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]BuildConfig{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "BuildConfig", "BuildConfig", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&BuildConfigList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *BuildConfigSpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForTriggers := "[]BuildTriggerPolicy{" + for _, f := range this.Triggers { + repeatedStringForTriggers += strings.Replace(strings.Replace(f.String(), "BuildTriggerPolicy", "BuildTriggerPolicy", 1), `&`, ``, 1) + "," + } + repeatedStringForTriggers += "}" + s := strings.Join([]string{`&BuildConfigSpec{`, + `Triggers:` + repeatedStringForTriggers + `,`, + `RunPolicy:` + fmt.Sprintf("%v", this.RunPolicy) + `,`, + `CommonSpec:` + strings.Replace(strings.Replace(this.CommonSpec.String(), "CommonSpec", "CommonSpec", 1), `&`, ``, 1) + `,`, + `SuccessfulBuildsHistoryLimit:` + valueToStringGenerated(this.SuccessfulBuildsHistoryLimit) + `,`, + `FailedBuildsHistoryLimit:` + valueToStringGenerated(this.FailedBuildsHistoryLimit) + `,`, + `}`, + }, "") + return s +} +func (this *BuildConfigStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BuildConfigStatus{`, + `LastVersion:` + fmt.Sprintf("%v", this.LastVersion) + `,`, + `}`, + }, "") + return s +} +func (this *BuildList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Build{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Build", "Build", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&BuildList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *BuildLog) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BuildLog{`, + `}`, + }, "") + return s +} +func (this *BuildLogOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BuildLogOptions{`, + `Container:` + fmt.Sprintf("%v", this.Container) + `,`, + `Follow:` + fmt.Sprintf("%v", this.Follow) + `,`, + `Previous:` + fmt.Sprintf("%v", this.Previous) + `,`, + `SinceSeconds:` + valueToStringGenerated(this.SinceSeconds) + `,`, + `SinceTime:` + strings.Replace(fmt.Sprintf("%v", this.SinceTime), "Time", "v1.Time", 1) + `,`, + `Timestamps:` + fmt.Sprintf("%v", this.Timestamps) + `,`, + `TailLines:` + valueToStringGenerated(this.TailLines) + `,`, + `LimitBytes:` + valueToStringGenerated(this.LimitBytes) + `,`, + `NoWait:` + fmt.Sprintf("%v", this.NoWait) + `,`, + `Version:` + valueToStringGenerated(this.Version) + `,`, + `InsecureSkipTLSVerifyBackend:` + fmt.Sprintf("%v", this.InsecureSkipTLSVerifyBackend) + `,`, + `}`, + }, "") + return s +} +func (this *BuildOutput) String() string { + if this == nil { + return "nil" + } + repeatedStringForImageLabels := "[]ImageLabel{" + for _, f := range this.ImageLabels { + repeatedStringForImageLabels += strings.Replace(strings.Replace(f.String(), "ImageLabel", "ImageLabel", 1), `&`, ``, 1) + "," + } + repeatedStringForImageLabels += "}" + s := strings.Join([]string{`&BuildOutput{`, + `To:` + strings.Replace(fmt.Sprintf("%v", this.To), "ObjectReference", "v11.ObjectReference", 1) + `,`, + `PushSecret:` + strings.Replace(fmt.Sprintf("%v", this.PushSecret), "LocalObjectReference", "v11.LocalObjectReference", 1) + `,`, + `ImageLabels:` + repeatedStringForImageLabels + `,`, + `}`, + }, "") + return s +} +func (this *BuildPostCommitSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BuildPostCommitSpec{`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `Args:` + fmt.Sprintf("%v", this.Args) + `,`, + `Script:` + fmt.Sprintf("%v", this.Script) + `,`, + `}`, + }, "") + return s +} +func (this *BuildRequest) String() string { + if this == nil { + return "nil" + } + repeatedStringForEnv := "[]EnvVar{" + for _, f := range this.Env { + repeatedStringForEnv += fmt.Sprintf("%v", f) + "," + } + repeatedStringForEnv += "}" + repeatedStringForTriggeredBy := "[]BuildTriggerCause{" + for _, f := range this.TriggeredBy { + repeatedStringForTriggeredBy += strings.Replace(strings.Replace(f.String(), "BuildTriggerCause", "BuildTriggerCause", 1), `&`, ``, 1) + "," + } + repeatedStringForTriggeredBy += "}" + s := strings.Join([]string{`&BuildRequest{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Revision:` + strings.Replace(this.Revision.String(), "SourceRevision", "SourceRevision", 1) + `,`, + `TriggeredByImage:` + strings.Replace(fmt.Sprintf("%v", this.TriggeredByImage), "ObjectReference", "v11.ObjectReference", 1) + `,`, + `From:` + strings.Replace(fmt.Sprintf("%v", this.From), "ObjectReference", "v11.ObjectReference", 1) + `,`, + `Binary:` + strings.Replace(this.Binary.String(), "BinaryBuildSource", "BinaryBuildSource", 1) + `,`, + `LastVersion:` + valueToStringGenerated(this.LastVersion) + `,`, + `Env:` + repeatedStringForEnv + `,`, + `TriggeredBy:` + repeatedStringForTriggeredBy + `,`, + `DockerStrategyOptions:` + strings.Replace(this.DockerStrategyOptions.String(), "DockerStrategyOptions", "DockerStrategyOptions", 1) + `,`, + `SourceStrategyOptions:` + strings.Replace(this.SourceStrategyOptions.String(), "SourceStrategyOptions", "SourceStrategyOptions", 1) + `,`, + `}`, + }, "") + return s +} +func (this *BuildSource) String() string { + if this == nil { + return "nil" + } + repeatedStringForImages := "[]ImageSource{" + for _, f := range this.Images { + repeatedStringForImages += strings.Replace(strings.Replace(f.String(), "ImageSource", "ImageSource", 1), `&`, ``, 1) + "," + } + repeatedStringForImages += "}" + repeatedStringForSecrets := "[]SecretBuildSource{" + for _, f := range this.Secrets { + repeatedStringForSecrets += strings.Replace(strings.Replace(f.String(), "SecretBuildSource", "SecretBuildSource", 1), `&`, ``, 1) + "," + } + repeatedStringForSecrets += "}" + repeatedStringForConfigMaps := "[]ConfigMapBuildSource{" + for _, f := range this.ConfigMaps { + repeatedStringForConfigMaps += strings.Replace(strings.Replace(f.String(), "ConfigMapBuildSource", "ConfigMapBuildSource", 1), `&`, ``, 1) + "," + } + repeatedStringForConfigMaps += "}" + s := strings.Join([]string{`&BuildSource{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Binary:` + strings.Replace(this.Binary.String(), "BinaryBuildSource", "BinaryBuildSource", 1) + `,`, + `Dockerfile:` + valueToStringGenerated(this.Dockerfile) + `,`, + `Git:` + strings.Replace(this.Git.String(), "GitBuildSource", "GitBuildSource", 1) + `,`, + `Images:` + repeatedStringForImages + `,`, + `ContextDir:` + fmt.Sprintf("%v", this.ContextDir) + `,`, + `SourceSecret:` + strings.Replace(fmt.Sprintf("%v", this.SourceSecret), "LocalObjectReference", "v11.LocalObjectReference", 1) + `,`, + `Secrets:` + repeatedStringForSecrets + `,`, + `ConfigMaps:` + repeatedStringForConfigMaps + `,`, + `}`, + }, "") + return s +} +func (this *BuildSpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForTriggeredBy := "[]BuildTriggerCause{" + for _, f := range this.TriggeredBy { + repeatedStringForTriggeredBy += strings.Replace(strings.Replace(f.String(), "BuildTriggerCause", "BuildTriggerCause", 1), `&`, ``, 1) + "," + } + repeatedStringForTriggeredBy += "}" + s := strings.Join([]string{`&BuildSpec{`, + `CommonSpec:` + strings.Replace(strings.Replace(this.CommonSpec.String(), "CommonSpec", "CommonSpec", 1), `&`, ``, 1) + `,`, + `TriggeredBy:` + repeatedStringForTriggeredBy + `,`, + `}`, + }, "") + return s +} +func (this *BuildStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForStages := "[]StageInfo{" + for _, f := range this.Stages { + repeatedStringForStages += strings.Replace(strings.Replace(f.String(), "StageInfo", "StageInfo", 1), `&`, ``, 1) + "," + } + repeatedStringForStages += "}" + repeatedStringForConditions := "[]BuildCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "BuildCondition", "BuildCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&BuildStatus{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `Cancelled:` + fmt.Sprintf("%v", this.Cancelled) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `StartTimestamp:` + strings.Replace(fmt.Sprintf("%v", this.StartTimestamp), "Time", "v1.Time", 1) + `,`, + `CompletionTimestamp:` + strings.Replace(fmt.Sprintf("%v", this.CompletionTimestamp), "Time", "v1.Time", 1) + `,`, + `Duration:` + fmt.Sprintf("%v", this.Duration) + `,`, + `OutputDockerImageReference:` + fmt.Sprintf("%v", this.OutputDockerImageReference) + `,`, + `Config:` + strings.Replace(fmt.Sprintf("%v", this.Config), "ObjectReference", "v11.ObjectReference", 1) + `,`, + `Output:` + strings.Replace(strings.Replace(this.Output.String(), "BuildStatusOutput", "BuildStatusOutput", 1), `&`, ``, 1) + `,`, + `Stages:` + repeatedStringForStages + `,`, + `LogSnippet:` + fmt.Sprintf("%v", this.LogSnippet) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `}`, + }, "") + return s +} +func (this *BuildStatusOutput) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BuildStatusOutput{`, + `To:` + strings.Replace(this.To.String(), "BuildStatusOutputTo", "BuildStatusOutputTo", 1) + `,`, + `}`, + }, "") + return s +} +func (this *BuildStatusOutputTo) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BuildStatusOutputTo{`, + `ImageDigest:` + fmt.Sprintf("%v", this.ImageDigest) + `,`, + `}`, + }, "") + return s +} +func (this *BuildStrategy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BuildStrategy{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `DockerStrategy:` + strings.Replace(this.DockerStrategy.String(), "DockerBuildStrategy", "DockerBuildStrategy", 1) + `,`, + `SourceStrategy:` + strings.Replace(this.SourceStrategy.String(), "SourceBuildStrategy", "SourceBuildStrategy", 1) + `,`, + `CustomStrategy:` + strings.Replace(this.CustomStrategy.String(), "CustomBuildStrategy", "CustomBuildStrategy", 1) + `,`, + `JenkinsPipelineStrategy:` + strings.Replace(this.JenkinsPipelineStrategy.String(), "JenkinsPipelineBuildStrategy", "JenkinsPipelineBuildStrategy", 1) + `,`, + `}`, + }, "") + return s +} +func (this *BuildTriggerCause) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BuildTriggerCause{`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `GenericWebHook:` + strings.Replace(this.GenericWebHook.String(), "GenericWebHookCause", "GenericWebHookCause", 1) + `,`, + `GitHubWebHook:` + strings.Replace(this.GitHubWebHook.String(), "GitHubWebHookCause", "GitHubWebHookCause", 1) + `,`, + `ImageChangeBuild:` + strings.Replace(this.ImageChangeBuild.String(), "ImageChangeCause", "ImageChangeCause", 1) + `,`, + `GitLabWebHook:` + strings.Replace(this.GitLabWebHook.String(), "GitLabWebHookCause", "GitLabWebHookCause", 1) + `,`, + `BitbucketWebHook:` + strings.Replace(this.BitbucketWebHook.String(), "BitbucketWebHookCause", "BitbucketWebHookCause", 1) + `,`, + `}`, + }, "") + return s +} +func (this *BuildTriggerPolicy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BuildTriggerPolicy{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `GitHubWebHook:` + strings.Replace(this.GitHubWebHook.String(), "WebHookTrigger", "WebHookTrigger", 1) + `,`, + `GenericWebHook:` + strings.Replace(this.GenericWebHook.String(), "WebHookTrigger", "WebHookTrigger", 1) + `,`, + `ImageChange:` + strings.Replace(this.ImageChange.String(), "ImageChangeTrigger", "ImageChangeTrigger", 1) + `,`, + `GitLabWebHook:` + strings.Replace(this.GitLabWebHook.String(), "WebHookTrigger", "WebHookTrigger", 1) + `,`, + `BitbucketWebHook:` + strings.Replace(this.BitbucketWebHook.String(), "WebHookTrigger", "WebHookTrigger", 1) + `,`, + `}`, + }, "") + return s +} +func (this *CommonSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CommonSpec{`, + `ServiceAccount:` + fmt.Sprintf("%v", this.ServiceAccount) + `,`, + `Source:` + strings.Replace(strings.Replace(this.Source.String(), "BuildSource", "BuildSource", 1), `&`, ``, 1) + `,`, + `Revision:` + strings.Replace(this.Revision.String(), "SourceRevision", "SourceRevision", 1) + `,`, + `Strategy:` + strings.Replace(strings.Replace(this.Strategy.String(), "BuildStrategy", "BuildStrategy", 1), `&`, ``, 1) + `,`, + `Output:` + strings.Replace(strings.Replace(this.Output.String(), "BuildOutput", "BuildOutput", 1), `&`, ``, 1) + `,`, + `Resources:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Resources), "ResourceRequirements", "v11.ResourceRequirements", 1), `&`, ``, 1) + `,`, + `PostCommit:` + strings.Replace(strings.Replace(this.PostCommit.String(), "BuildPostCommitSpec", "BuildPostCommitSpec", 1), `&`, ``, 1) + `,`, + `CompletionDeadlineSeconds:` + valueToStringGenerated(this.CompletionDeadlineSeconds) + `,`, + `NodeSelector:` + strings.Replace(fmt.Sprintf("%v", this.NodeSelector), "OptionalNodeSelector", "OptionalNodeSelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *CommonWebHookCause) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CommonWebHookCause{`, + `Revision:` + strings.Replace(this.Revision.String(), "SourceRevision", "SourceRevision", 1) + `,`, + `Secret:` + fmt.Sprintf("%v", this.Secret) + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMapBuildSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ConfigMapBuildSource{`, + `ConfigMap:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ConfigMap), "LocalObjectReference", "v11.LocalObjectReference", 1), `&`, ``, 1) + `,`, + `DestinationDir:` + fmt.Sprintf("%v", this.DestinationDir) + `,`, + `}`, + }, "") + return s +} +func (this *CustomBuildStrategy) String() string { + if this == nil { + return "nil" + } + repeatedStringForEnv := "[]EnvVar{" + for _, f := range this.Env { + repeatedStringForEnv += fmt.Sprintf("%v", f) + "," + } + repeatedStringForEnv += "}" + repeatedStringForSecrets := "[]SecretSpec{" + for _, f := range this.Secrets { + repeatedStringForSecrets += strings.Replace(strings.Replace(f.String(), "SecretSpec", "SecretSpec", 1), `&`, ``, 1) + "," + } + repeatedStringForSecrets += "}" + s := strings.Join([]string{`&CustomBuildStrategy{`, + `From:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.From), "ObjectReference", "v11.ObjectReference", 1), `&`, ``, 1) + `,`, + `PullSecret:` + strings.Replace(fmt.Sprintf("%v", this.PullSecret), "LocalObjectReference", "v11.LocalObjectReference", 1) + `,`, + `Env:` + repeatedStringForEnv + `,`, + `ExposeDockerSocket:` + fmt.Sprintf("%v", this.ExposeDockerSocket) + `,`, + `ForcePull:` + fmt.Sprintf("%v", this.ForcePull) + `,`, + `Secrets:` + repeatedStringForSecrets + `,`, + `BuildAPIVersion:` + fmt.Sprintf("%v", this.BuildAPIVersion) + `,`, + `}`, + }, "") + return s +} +func (this *DockerBuildStrategy) String() string { + if this == nil { + return "nil" + } + repeatedStringForEnv := "[]EnvVar{" + for _, f := range this.Env { + repeatedStringForEnv += fmt.Sprintf("%v", f) + "," + } + repeatedStringForEnv += "}" + repeatedStringForBuildArgs := "[]EnvVar{" + for _, f := range this.BuildArgs { + repeatedStringForBuildArgs += fmt.Sprintf("%v", f) + "," + } + repeatedStringForBuildArgs += "}" + s := strings.Join([]string{`&DockerBuildStrategy{`, + `From:` + strings.Replace(fmt.Sprintf("%v", this.From), "ObjectReference", "v11.ObjectReference", 1) + `,`, + `PullSecret:` + strings.Replace(fmt.Sprintf("%v", this.PullSecret), "LocalObjectReference", "v11.LocalObjectReference", 1) + `,`, + `NoCache:` + fmt.Sprintf("%v", this.NoCache) + `,`, + `Env:` + repeatedStringForEnv + `,`, + `ForcePull:` + fmt.Sprintf("%v", this.ForcePull) + `,`, + `DockerfilePath:` + fmt.Sprintf("%v", this.DockerfilePath) + `,`, + `BuildArgs:` + repeatedStringForBuildArgs + `,`, + `ImageOptimizationPolicy:` + valueToStringGenerated(this.ImageOptimizationPolicy) + `,`, + `}`, + }, "") + return s +} +func (this *DockerStrategyOptions) String() string { + if this == nil { + return "nil" + } + repeatedStringForBuildArgs := "[]EnvVar{" + for _, f := range this.BuildArgs { + repeatedStringForBuildArgs += fmt.Sprintf("%v", f) + "," + } + repeatedStringForBuildArgs += "}" + s := strings.Join([]string{`&DockerStrategyOptions{`, + `BuildArgs:` + repeatedStringForBuildArgs + `,`, + `NoCache:` + valueToStringGenerated(this.NoCache) + `,`, + `}`, + }, "") + return s +} +func (this *GenericWebHookCause) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GenericWebHookCause{`, + `Revision:` + strings.Replace(this.Revision.String(), "SourceRevision", "SourceRevision", 1) + `,`, + `Secret:` + fmt.Sprintf("%v", this.Secret) + `,`, + `}`, + }, "") + return s +} +func (this *GenericWebHookEvent) String() string { + if this == nil { + return "nil" + } + repeatedStringForEnv := "[]EnvVar{" + for _, f := range this.Env { + repeatedStringForEnv += fmt.Sprintf("%v", f) + "," + } + repeatedStringForEnv += "}" + s := strings.Join([]string{`&GenericWebHookEvent{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Git:` + strings.Replace(this.Git.String(), "GitInfo", "GitInfo", 1) + `,`, + `Env:` + repeatedStringForEnv + `,`, + `DockerStrategyOptions:` + strings.Replace(this.DockerStrategyOptions.String(), "DockerStrategyOptions", "DockerStrategyOptions", 1) + `,`, + `}`, + }, "") + return s +} +func (this *GitBuildSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GitBuildSource{`, + `URI:` + fmt.Sprintf("%v", this.URI) + `,`, + `Ref:` + fmt.Sprintf("%v", this.Ref) + `,`, + `ProxyConfig:` + strings.Replace(strings.Replace(this.ProxyConfig.String(), "ProxyConfig", "ProxyConfig", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *GitHubWebHookCause) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GitHubWebHookCause{`, + `Revision:` + strings.Replace(this.Revision.String(), "SourceRevision", "SourceRevision", 1) + `,`, + `Secret:` + fmt.Sprintf("%v", this.Secret) + `,`, + `}`, + }, "") + return s +} +func (this *GitInfo) String() string { + if this == nil { + return "nil" + } + repeatedStringForRefs := "[]GitRefInfo{" + for _, f := range this.Refs { + repeatedStringForRefs += strings.Replace(strings.Replace(f.String(), "GitRefInfo", "GitRefInfo", 1), `&`, ``, 1) + "," + } + repeatedStringForRefs += "}" + s := strings.Join([]string{`&GitInfo{`, + `GitBuildSource:` + strings.Replace(strings.Replace(this.GitBuildSource.String(), "GitBuildSource", "GitBuildSource", 1), `&`, ``, 1) + `,`, + `GitSourceRevision:` + strings.Replace(strings.Replace(this.GitSourceRevision.String(), "GitSourceRevision", "GitSourceRevision", 1), `&`, ``, 1) + `,`, + `Refs:` + repeatedStringForRefs + `,`, + `}`, + }, "") + return s +} +func (this *GitLabWebHookCause) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GitLabWebHookCause{`, + `CommonWebHookCause:` + strings.Replace(strings.Replace(this.CommonWebHookCause.String(), "CommonWebHookCause", "CommonWebHookCause", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *GitRefInfo) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GitRefInfo{`, + `GitBuildSource:` + strings.Replace(strings.Replace(this.GitBuildSource.String(), "GitBuildSource", "GitBuildSource", 1), `&`, ``, 1) + `,`, + `GitSourceRevision:` + strings.Replace(strings.Replace(this.GitSourceRevision.String(), "GitSourceRevision", "GitSourceRevision", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *GitSourceRevision) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GitSourceRevision{`, + `Commit:` + fmt.Sprintf("%v", this.Commit) + `,`, + `Author:` + strings.Replace(strings.Replace(this.Author.String(), "SourceControlUser", "SourceControlUser", 1), `&`, ``, 1) + `,`, + `Committer:` + strings.Replace(strings.Replace(this.Committer.String(), "SourceControlUser", "SourceControlUser", 1), `&`, ``, 1) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *ImageChangeCause) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageChangeCause{`, + `ImageID:` + fmt.Sprintf("%v", this.ImageID) + `,`, + `FromRef:` + strings.Replace(fmt.Sprintf("%v", this.FromRef), "ObjectReference", "v11.ObjectReference", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageChangeTrigger) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageChangeTrigger{`, + `LastTriggeredImageID:` + fmt.Sprintf("%v", this.LastTriggeredImageID) + `,`, + `From:` + strings.Replace(fmt.Sprintf("%v", this.From), "ObjectReference", "v11.ObjectReference", 1) + `,`, + `Paused:` + fmt.Sprintf("%v", this.Paused) + `,`, + `}`, + }, "") + return s +} +func (this *ImageLabel) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageLabel{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `}`, + }, "") + return s +} +func (this *ImageSource) String() string { + if this == nil { + return "nil" + } + repeatedStringForPaths := "[]ImageSourcePath{" + for _, f := range this.Paths { + repeatedStringForPaths += strings.Replace(strings.Replace(f.String(), "ImageSourcePath", "ImageSourcePath", 1), `&`, ``, 1) + "," + } + repeatedStringForPaths += "}" + s := strings.Join([]string{`&ImageSource{`, + `From:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.From), "ObjectReference", "v11.ObjectReference", 1), `&`, ``, 1) + `,`, + `Paths:` + repeatedStringForPaths + `,`, + `PullSecret:` + strings.Replace(fmt.Sprintf("%v", this.PullSecret), "LocalObjectReference", "v11.LocalObjectReference", 1) + `,`, + `As:` + fmt.Sprintf("%v", this.As) + `,`, + `}`, + }, "") + return s +} +func (this *ImageSourcePath) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageSourcePath{`, + `SourcePath:` + fmt.Sprintf("%v", this.SourcePath) + `,`, + `DestinationDir:` + fmt.Sprintf("%v", this.DestinationDir) + `,`, + `}`, + }, "") + return s +} +func (this *JenkinsPipelineBuildStrategy) String() string { + if this == nil { + return "nil" + } + repeatedStringForEnv := "[]EnvVar{" + for _, f := range this.Env { + repeatedStringForEnv += fmt.Sprintf("%v", f) + "," + } + repeatedStringForEnv += "}" + s := strings.Join([]string{`&JenkinsPipelineBuildStrategy{`, + `JenkinsfilePath:` + fmt.Sprintf("%v", this.JenkinsfilePath) + `,`, + `Jenkinsfile:` + fmt.Sprintf("%v", this.Jenkinsfile) + `,`, + `Env:` + repeatedStringForEnv + `,`, + `}`, + }, "") + return s +} +func (this *ProxyConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ProxyConfig{`, + `HTTPProxy:` + valueToStringGenerated(this.HTTPProxy) + `,`, + `HTTPSProxy:` + valueToStringGenerated(this.HTTPSProxy) + `,`, + `NoProxy:` + valueToStringGenerated(this.NoProxy) + `,`, + `}`, + }, "") + return s +} +func (this *SecretBuildSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecretBuildSource{`, + `Secret:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Secret), "LocalObjectReference", "v11.LocalObjectReference", 1), `&`, ``, 1) + `,`, + `DestinationDir:` + fmt.Sprintf("%v", this.DestinationDir) + `,`, + `}`, + }, "") + return s +} +func (this *SecretLocalReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecretLocalReference{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} +func (this *SecretSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecretSpec{`, + `SecretSource:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.SecretSource), "LocalObjectReference", "v11.LocalObjectReference", 1), `&`, ``, 1) + `,`, + `MountPath:` + fmt.Sprintf("%v", this.MountPath) + `,`, + `}`, + }, "") + return s +} +func (this *SourceBuildStrategy) String() string { + if this == nil { + return "nil" + } + repeatedStringForEnv := "[]EnvVar{" + for _, f := range this.Env { + repeatedStringForEnv += fmt.Sprintf("%v", f) + "," + } + repeatedStringForEnv += "}" + s := strings.Join([]string{`&SourceBuildStrategy{`, + `From:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.From), "ObjectReference", "v11.ObjectReference", 1), `&`, ``, 1) + `,`, + `PullSecret:` + strings.Replace(fmt.Sprintf("%v", this.PullSecret), "LocalObjectReference", "v11.LocalObjectReference", 1) + `,`, + `Env:` + repeatedStringForEnv + `,`, + `Scripts:` + fmt.Sprintf("%v", this.Scripts) + `,`, + `Incremental:` + valueToStringGenerated(this.Incremental) + `,`, + `ForcePull:` + fmt.Sprintf("%v", this.ForcePull) + `,`, + `}`, + }, "") + return s +} +func (this *SourceControlUser) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SourceControlUser{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Email:` + fmt.Sprintf("%v", this.Email) + `,`, + `}`, + }, "") + return s +} +func (this *SourceRevision) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SourceRevision{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Git:` + strings.Replace(this.Git.String(), "GitSourceRevision", "GitSourceRevision", 1) + `,`, + `}`, + }, "") + return s +} +func (this *SourceStrategyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SourceStrategyOptions{`, + `Incremental:` + valueToStringGenerated(this.Incremental) + `,`, + `}`, + }, "") + return s +} +func (this *StageInfo) String() string { + if this == nil { + return "nil" + } + repeatedStringForSteps := "[]StepInfo{" + for _, f := range this.Steps { + repeatedStringForSteps += strings.Replace(strings.Replace(f.String(), "StepInfo", "StepInfo", 1), `&`, ``, 1) + "," + } + repeatedStringForSteps += "}" + s := strings.Join([]string{`&StageInfo{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `StartTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.StartTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `DurationMilliseconds:` + fmt.Sprintf("%v", this.DurationMilliseconds) + `,`, + `Steps:` + repeatedStringForSteps + `,`, + `}`, + }, "") + return s +} +func (this *StepInfo) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StepInfo{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `StartTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.StartTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `DurationMilliseconds:` + fmt.Sprintf("%v", this.DurationMilliseconds) + `,`, + `}`, + }, "") + return s +} +func (this *WebHookTrigger) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&WebHookTrigger{`, + `Secret:` + fmt.Sprintf("%v", this.Secret) + `,`, + `AllowEnv:` + fmt.Sprintf("%v", this.AllowEnv) + `,`, + `SecretReference:` + strings.Replace(this.SecretReference.String(), "SecretLocalReference", "SecretLocalReference", 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *BinaryBuildRequestOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BinaryBuildRequestOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BinaryBuildRequestOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AsFile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AsFile = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Commit", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Commit = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthorName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AuthorName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthorEmail", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AuthorEmail = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommitterName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CommitterName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommitterEmail", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CommitterEmail = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BinaryBuildSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BinaryBuildSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BinaryBuildSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AsFile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AsFile = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BitbucketWebHookCause) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BitbucketWebHookCause: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BitbucketWebHookCause: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommonWebHookCause", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CommonWebHookCause.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Build) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Build: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Build: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildCondition) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = BuildConditionType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = k8s_io_api_core_v1.ConditionStatus(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastUpdateTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastUpdateTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildConfigList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildConfigList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildConfigList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, BuildConfig{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildConfigSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildConfigSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildConfigSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Triggers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Triggers = append(m.Triggers, BuildTriggerPolicy{}) + if err := m.Triggers[len(m.Triggers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RunPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RunPolicy = BuildRunPolicy(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommonSpec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CommonSpec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SuccessfulBuildsHistoryLimit", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.SuccessfulBuildsHistoryLimit = &v + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FailedBuildsHistoryLimit", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.FailedBuildsHistoryLimit = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildConfigStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildConfigStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildConfigStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LastVersion", wireType) + } + m.LastVersion = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LastVersion |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Build{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildLog) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildLog: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildLog: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildLogOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildLogOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildLogOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Container", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Container = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Follow", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Follow = bool(v != 0) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Previous", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Previous = bool(v != 0) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SinceSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.SinceSeconds = &v + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SinceTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SinceTime == nil { + m.SinceTime = &v1.Time{} + } + if err := m.SinceTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamps", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Timestamps = bool(v != 0) + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TailLines", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TailLines = &v + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LimitBytes", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LimitBytes = &v + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NoWait", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.NoWait = bool(v != 0) + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Version = &v + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field InsecureSkipTLSVerifyBackend", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.InsecureSkipTLSVerifyBackend = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildOutput) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildOutput: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildOutput: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field To", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.To == nil { + m.To = &v11.ObjectReference{} + } + if err := m.To.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PushSecret", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PushSecret == nil { + m.PushSecret = &v11.LocalObjectReference{} + } + if err := m.PushSecret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImageLabels", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ImageLabels = append(m.ImageLabels, ImageLabel{}) + if err := m.ImageLabels[len(m.ImageLabels)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildPostCommitSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildPostCommitSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildPostCommitSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Command", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Command = append(m.Command, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Args", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Args = append(m.Args, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Script", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Script = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Revision == nil { + m.Revision = &SourceRevision{} + } + if err := m.Revision.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TriggeredByImage", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TriggeredByImage == nil { + m.TriggeredByImage = &v11.ObjectReference{} + } + if err := m.TriggeredByImage.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.From == nil { + m.From = &v11.ObjectReference{} + } + if err := m.From.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Binary", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Binary == nil { + m.Binary = &BinaryBuildSource{} + } + if err := m.Binary.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LastVersion", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LastVersion = &v + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Env", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Env = append(m.Env, v11.EnvVar{}) + if err := m.Env[len(m.Env)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TriggeredBy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TriggeredBy = append(m.TriggeredBy, BuildTriggerCause{}) + if err := m.TriggeredBy[len(m.TriggeredBy)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerStrategyOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DockerStrategyOptions == nil { + m.DockerStrategyOptions = &DockerStrategyOptions{} + } + if err := m.DockerStrategyOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceStrategyOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SourceStrategyOptions == nil { + m.SourceStrategyOptions = &SourceStrategyOptions{} + } + if err := m.SourceStrategyOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = BuildSourceType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Binary", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Binary == nil { + m.Binary = &BinaryBuildSource{} + } + if err := m.Binary.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Dockerfile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Dockerfile = &s + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Git", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Git == nil { + m.Git = &GitBuildSource{} + } + if err := m.Git.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Images", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Images = append(m.Images, ImageSource{}) + if err := m.Images[len(m.Images)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContextDir", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContextDir = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceSecret", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SourceSecret == nil { + m.SourceSecret = &v11.LocalObjectReference{} + } + if err := m.SourceSecret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Secrets", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Secrets = append(m.Secrets, SecretBuildSource{}) + if err := m.Secrets[len(m.Secrets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConfigMaps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConfigMaps = append(m.ConfigMaps, ConfigMapBuildSource{}) + if err := m.ConfigMaps[len(m.ConfigMaps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommonSpec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CommonSpec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TriggeredBy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TriggeredBy = append(m.TriggeredBy, BuildTriggerCause{}) + if err := m.TriggeredBy[len(m.TriggeredBy)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Phase = BuildPhase(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Cancelled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Cancelled = bool(v != 0) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = StatusReason(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.StartTimestamp == nil { + m.StartTimestamp = &v1.Time{} + } + if err := m.StartTimestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CompletionTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CompletionTimestamp == nil { + m.CompletionTimestamp = &v1.Time{} + } + if err := m.CompletionTimestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + } + m.Duration = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Duration |= time.Duration(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OutputDockerImageReference", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OutputDockerImageReference = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Config == nil { + m.Config = &v11.ObjectReference{} + } + if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Output", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Output.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Stages", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Stages = append(m.Stages, StageInfo{}) + if err := m.Stages[len(m.Stages)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LogSnippet", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LogSnippet = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, BuildCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildStatusOutput) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildStatusOutput: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildStatusOutput: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field To", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.To == nil { + m.To = &BuildStatusOutputTo{} + } + if err := m.To.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildStatusOutputTo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildStatusOutputTo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildStatusOutputTo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImageDigest", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ImageDigest = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildStrategy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildStrategy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildStrategy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = BuildStrategyType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerStrategy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DockerStrategy == nil { + m.DockerStrategy = &DockerBuildStrategy{} + } + if err := m.DockerStrategy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceStrategy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SourceStrategy == nil { + m.SourceStrategy = &SourceBuildStrategy{} + } + if err := m.SourceStrategy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CustomStrategy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CustomStrategy == nil { + m.CustomStrategy = &CustomBuildStrategy{} + } + if err := m.CustomStrategy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field JenkinsPipelineStrategy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.JenkinsPipelineStrategy == nil { + m.JenkinsPipelineStrategy = &JenkinsPipelineBuildStrategy{} + } + if err := m.JenkinsPipelineStrategy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildTriggerCause) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildTriggerCause: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildTriggerCause: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GenericWebHook", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.GenericWebHook == nil { + m.GenericWebHook = &GenericWebHookCause{} + } + if err := m.GenericWebHook.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GitHubWebHook", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.GitHubWebHook == nil { + m.GitHubWebHook = &GitHubWebHookCause{} + } + if err := m.GitHubWebHook.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImageChangeBuild", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ImageChangeBuild == nil { + m.ImageChangeBuild = &ImageChangeCause{} + } + if err := m.ImageChangeBuild.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GitLabWebHook", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.GitLabWebHook == nil { + m.GitLabWebHook = &GitLabWebHookCause{} + } + if err := m.GitLabWebHook.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BitbucketWebHook", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.BitbucketWebHook == nil { + m.BitbucketWebHook = &BitbucketWebHookCause{} + } + if err := m.BitbucketWebHook.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BuildTriggerPolicy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BuildTriggerPolicy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BuildTriggerPolicy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = BuildTriggerType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GitHubWebHook", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.GitHubWebHook == nil { + m.GitHubWebHook = &WebHookTrigger{} + } + if err := m.GitHubWebHook.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GenericWebHook", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.GenericWebHook == nil { + m.GenericWebHook = &WebHookTrigger{} + } + if err := m.GenericWebHook.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImageChange", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ImageChange == nil { + m.ImageChange = &ImageChangeTrigger{} + } + if err := m.ImageChange.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GitLabWebHook", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.GitLabWebHook == nil { + m.GitLabWebHook = &WebHookTrigger{} + } + if err := m.GitLabWebHook.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BitbucketWebHook", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.BitbucketWebHook == nil { + m.BitbucketWebHook = &WebHookTrigger{} + } + if err := m.BitbucketWebHook.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CommonSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CommonSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CommonSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServiceAccount = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Source.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Revision == nil { + m.Revision = &SourceRevision{} + } + if err := m.Revision.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Strategy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Strategy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Output", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Output.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Resources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PostCommit", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PostCommit.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CompletionDeadlineSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.CompletionDeadlineSeconds = &v + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NodeSelector == nil { + m.NodeSelector = OptionalNodeSelector{} + } + if err := m.NodeSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CommonWebHookCause) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CommonWebHookCause: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CommonWebHookCause: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Revision == nil { + m.Revision = &SourceRevision{} + } + if err := m.Revision.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Secret = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ConfigMapBuildSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ConfigMapBuildSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ConfigMapBuildSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConfigMap", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ConfigMap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DestinationDir", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DestinationDir = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CustomBuildStrategy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CustomBuildStrategy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CustomBuildStrategy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.From.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PullSecret", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PullSecret == nil { + m.PullSecret = &v11.LocalObjectReference{} + } + if err := m.PullSecret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Env", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Env = append(m.Env, v11.EnvVar{}) + if err := m.Env[len(m.Env)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExposeDockerSocket", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ExposeDockerSocket = bool(v != 0) + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ForcePull", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ForcePull = bool(v != 0) + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Secrets", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Secrets = append(m.Secrets, SecretSpec{}) + if err := m.Secrets[len(m.Secrets)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BuildAPIVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BuildAPIVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DockerBuildStrategy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DockerBuildStrategy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DockerBuildStrategy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.From == nil { + m.From = &v11.ObjectReference{} + } + if err := m.From.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PullSecret", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PullSecret == nil { + m.PullSecret = &v11.LocalObjectReference{} + } + if err := m.PullSecret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NoCache", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.NoCache = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Env", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Env = append(m.Env, v11.EnvVar{}) + if err := m.Env[len(m.Env)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ForcePull", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ForcePull = bool(v != 0) + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerfilePath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DockerfilePath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BuildArgs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BuildArgs = append(m.BuildArgs, v11.EnvVar{}) + if err := m.BuildArgs[len(m.BuildArgs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImageOptimizationPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ImageOptimizationPolicy(dAtA[iNdEx:postIndex]) + m.ImageOptimizationPolicy = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DockerStrategyOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DockerStrategyOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DockerStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BuildArgs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BuildArgs = append(m.BuildArgs, v11.EnvVar{}) + if err := m.BuildArgs[len(m.BuildArgs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NoCache", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.NoCache = &b + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GenericWebHookCause) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenericWebHookCause: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenericWebHookCause: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Revision == nil { + m.Revision = &SourceRevision{} + } + if err := m.Revision.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Secret = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GenericWebHookEvent) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenericWebHookEvent: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenericWebHookEvent: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = BuildSourceType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Git", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Git == nil { + m.Git = &GitInfo{} + } + if err := m.Git.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Env", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Env = append(m.Env, v11.EnvVar{}) + if err := m.Env[len(m.Env)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerStrategyOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DockerStrategyOptions == nil { + m.DockerStrategyOptions = &DockerStrategyOptions{} + } + if err := m.DockerStrategyOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GitBuildSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GitBuildSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GitBuildSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field URI", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.URI = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ref", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ref = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProxyConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ProxyConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GitHubWebHookCause) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GitHubWebHookCause: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GitHubWebHookCause: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Revision == nil { + m.Revision = &SourceRevision{} + } + if err := m.Revision.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Secret = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GitInfo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GitInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GitInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GitBuildSource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.GitBuildSource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GitSourceRevision", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.GitSourceRevision.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Refs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Refs = append(m.Refs, GitRefInfo{}) + if err := m.Refs[len(m.Refs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GitLabWebHookCause) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GitLabWebHookCause: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GitLabWebHookCause: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommonWebHookCause", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CommonWebHookCause.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GitRefInfo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GitRefInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GitRefInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GitBuildSource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.GitBuildSource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GitSourceRevision", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.GitSourceRevision.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GitSourceRevision) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GitSourceRevision: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GitSourceRevision: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Commit", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Commit = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Author", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Author.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Committer", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Committer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageChangeCause) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageChangeCause: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageChangeCause: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImageID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ImageID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FromRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.FromRef == nil { + m.FromRef = &v11.ObjectReference{} + } + if err := m.FromRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageChangeTrigger) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageChangeTrigger: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageChangeTrigger: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTriggeredImageID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LastTriggeredImageID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.From == nil { + m.From = &v11.ObjectReference{} + } + if err := m.From.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Paused", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Paused = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageLabel) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageLabel: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageLabel: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.From.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Paths", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Paths = append(m.Paths, ImageSourcePath{}) + if err := m.Paths[len(m.Paths)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PullSecret", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PullSecret == nil { + m.PullSecret = &v11.LocalObjectReference{} + } + if err := m.PullSecret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field As", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.As = append(m.As, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageSourcePath) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageSourcePath: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageSourcePath: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourcePath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SourcePath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DestinationDir", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DestinationDir = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *JenkinsPipelineBuildStrategy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: JenkinsPipelineBuildStrategy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: JenkinsPipelineBuildStrategy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field JenkinsfilePath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.JenkinsfilePath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Jenkinsfile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Jenkinsfile = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Env", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Env = append(m.Env, v11.EnvVar{}) + if err := m.Env[len(m.Env)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OptionalNodeSelector) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OptionalNodeSelector: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OptionalNodeSelector: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if *m == nil { + *m = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + (*m)[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ProxyConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ProxyConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ProxyConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HTTPProxy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.HTTPProxy = &s + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HTTPSProxy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.HTTPSProxy = &s + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NoProxy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.NoProxy = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SecretBuildSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SecretBuildSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SecretBuildSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Secret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DestinationDir", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DestinationDir = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SecretLocalReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SecretLocalReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SecretLocalReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SecretSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SecretSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SecretSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretSource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SecretSource.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MountPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MountPath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SourceBuildStrategy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SourceBuildStrategy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SourceBuildStrategy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.From.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PullSecret", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PullSecret == nil { + m.PullSecret = &v11.LocalObjectReference{} + } + if err := m.PullSecret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Env", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Env = append(m.Env, v11.EnvVar{}) + if err := m.Env[len(m.Env)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scripts", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Scripts = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Incremental", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Incremental = &b + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ForcePull", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ForcePull = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SourceControlUser) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SourceControlUser: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SourceControlUser: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Email", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Email = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SourceRevision) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SourceRevision: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SourceRevision: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = BuildSourceType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Git", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Git == nil { + m.Git = &GitSourceRevision{} + } + if err := m.Git.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SourceStrategyOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SourceStrategyOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SourceStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Incremental", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Incremental = &b + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StageInfo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StageInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StageInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = StageName(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.StartTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DurationMilliseconds", wireType) + } + m.DurationMilliseconds = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DurationMilliseconds |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Steps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Steps = append(m.Steps, StepInfo{}) + if err := m.Steps[len(m.Steps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StepInfo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StepInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StepInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = StepName(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.StartTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DurationMilliseconds", wireType) + } + m.DurationMilliseconds = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DurationMilliseconds |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WebHookTrigger) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WebHookTrigger: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WebHookTrigger: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Secret = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowEnv", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AllowEnv = bool(v != 0) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretReference", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecretReference == nil { + m.SecretReference = &SecretLocalReference{} + } + if err := m.SecretReference.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vendor/github.com/openshift/api/build/v1/generated.proto b/vendor/github.com/openshift/api/build/v1/generated.proto new file mode 100644 index 0000000000000..52910663fd94c --- /dev/null +++ b/vendor/github.com/openshift/api/build/v1/generated.proto @@ -0,0 +1,1058 @@ + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package github.com.openshift.api.build.v1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// BinaryBuildRequestOptions are the options required to fully speficy a binary build request +message BinaryBuildRequestOptions { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // asFile determines if the binary should be created as a file within the source rather than extracted as an archive + optional string asFile = 2; + + // revision.commit is the value identifying a specific commit + optional string revisionCommit = 3; + + // revision.message is the description of a specific commit + optional string revisionMessage = 4; + + // revision.authorName of the source control user + optional string revisionAuthorName = 5; + + // revision.authorEmail of the source control user + optional string revisionAuthorEmail = 6; + + // revision.committerName of the source control user + optional string revisionCommitterName = 7; + + // revision.committerEmail of the source control user + optional string revisionCommitterEmail = 8; +} + +// BinaryBuildSource describes a binary file to be used for the Docker and Source build strategies, +// where the file will be extracted and used as the build source. +message BinaryBuildSource { + // asFile indicates that the provided binary input should be considered a single file + // within the build input. For example, specifying "webapp.war" would place the provided + // binary as `/webapp.war` for the builder. If left empty, the Docker and Source build + // strategies assume this file is a zip, tar, or tar.gz file and extract it as the source. + // The custom strategy receives this binary as standard input. This filename may not + // contain slashes or be '..' or '.'. + optional string asFile = 1; +} + +// BitbucketWebHookCause has information about a Bitbucket webhook that triggered a +// build. +message BitbucketWebHookCause { + optional CommonWebHookCause commonSpec = 1; +} + +// Build encapsulates the inputs needed to produce a new deployable image, as well as +// the status of the execution and a reference to the Pod which executed the build. +message Build { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // spec is all the inputs used to execute the build. + optional BuildSpec spec = 2; + + // status is the current status of the build. + // +optional + optional BuildStatus status = 3; +} + +// BuildCondition describes the state of a build at a certain point. +message BuildCondition { + // Type of build condition. + optional string type = 1; + + // Status of the condition, one of True, False, Unknown. + optional string status = 2; + + // The last time this condition was updated. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastUpdateTime = 6; + + // The last time the condition transitioned from one status to another. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 3; + + // The reason for the condition's last transition. + optional string reason = 4; + + // A human readable message indicating details about the transition. + optional string message = 5; +} + +// Build configurations define a build process for new container images. There are three types of builds possible - a container image build using a Dockerfile, a Source-to-Image build that uses a specially prepared base image that accepts source code that it can make runnable, and a custom build that can run // arbitrary container images as a base and accept the build parameters. Builds run on the cluster and on completion are pushed to the container image registry specified in the "output" section. A build can be triggered via a webhook, when the base image changes, or when a user manually requests a new build be // created. +// +// Each build created by a build configuration is numbered and refers back to its parent configuration. Multiple builds can be triggered at once. Builds that do not have "output" set can be used to test code or run a verification build. +message BuildConfig { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // spec holds all the input necessary to produce a new build, and the conditions when + // to trigger them. + optional BuildConfigSpec spec = 2; + + // status holds any relevant information about a build config + // +optional + optional BuildConfigStatus status = 3; +} + +// BuildConfigList is a collection of BuildConfigs. +message BuildConfigList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is a list of build configs + repeated BuildConfig items = 2; +} + +// BuildConfigSpec describes when and how builds are created +message BuildConfigSpec { + // triggers determine how new Builds can be launched from a BuildConfig. If + // no triggers are defined, a new build can only occur as a result of an + // explicit client build creation. + // +optional + repeated BuildTriggerPolicy triggers = 1; + + // RunPolicy describes how the new build created from this build + // configuration will be scheduled for execution. + // This is optional, if not specified we default to "Serial". + optional string runPolicy = 2; + + // CommonSpec is the desired build specification + optional CommonSpec commonSpec = 3; + + // successfulBuildsHistoryLimit is the number of old successful builds to retain. + // When a BuildConfig is created, the 5 most recent successful builds are retained unless this value is set. + // If removed after the BuildConfig has been created, all successful builds are retained. + optional int32 successfulBuildsHistoryLimit = 4; + + // failedBuildsHistoryLimit is the number of old failed builds to retain. + // When a BuildConfig is created, the 5 most recent failed builds are retained unless this value is set. + // If removed after the BuildConfig has been created, all failed builds are retained. + optional int32 failedBuildsHistoryLimit = 5; +} + +// BuildConfigStatus contains current state of the build config object. +message BuildConfigStatus { + // lastVersion is used to inform about number of last triggered build. + optional int64 lastVersion = 1; +} + +// BuildList is a collection of Builds. +message BuildList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is a list of builds + repeated Build items = 2; +} + +// BuildLog is the (unused) resource associated with the build log redirector +message BuildLog { +} + +// BuildLogOptions is the REST options for a build log +message BuildLogOptions { + // cointainer for which to stream logs. Defaults to only container if there is one container in the pod. + optional string container = 1; + + // follow if true indicates that the build log should be streamed until + // the build terminates. + optional bool follow = 2; + + // previous returns previous build logs. Defaults to false. + optional bool previous = 3; + + // sinceSeconds is a relative time in seconds before the current time from which to show logs. If this value + // precedes the time a pod was started, only logs since the pod start will be returned. + // If this value is in the future, no logs will be returned. + // Only one of sinceSeconds or sinceTime may be specified. + optional int64 sinceSeconds = 4; + + // sinceTime is an RFC3339 timestamp from which to show logs. If this value + // precedes the time a pod was started, only logs since the pod start will be returned. + // If this value is in the future, no logs will be returned. + // Only one of sinceSeconds or sinceTime may be specified. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time sinceTime = 5; + + // timestamps, If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line + // of log output. Defaults to false. + optional bool timestamps = 6; + + // tailLines, If set, is the number of lines from the end of the logs to show. If not specified, + // logs are shown from the creation of the container or sinceSeconds or sinceTime + optional int64 tailLines = 7; + + // limitBytes, If set, is the number of bytes to read from the server before terminating the + // log output. This may not display a complete final line of logging, and may return + // slightly more or slightly less than the specified limit. + optional int64 limitBytes = 8; + + // noWait if true causes the call to return immediately even if the build + // is not available yet. Otherwise the server will wait until the build has started. + // TODO: Fix the tag to 'noWait' in v2 + optional bool nowait = 9; + + // version of the build for which to view logs. + optional int64 version = 10; + + // insecureSkipTLSVerifyBackend indicates that the apiserver should not confirm the validity of the + // serving certificate of the backend it is connecting to. This will make the HTTPS connection between the apiserver + // and the backend insecure. This means the apiserver cannot verify the log data it is receiving came from the real + // kubelet. If the kubelet is configured to verify the apiserver's TLS credentials, it does not mean the + // connection to the real kubelet is vulnerable to a man in the middle attack (e.g. an attacker could not intercept + // the actual log data coming from the real kubelet). + // +optional + optional bool insecureSkipTLSVerifyBackend = 11; +} + +// BuildOutput is input to a build strategy and describes the container image that the strategy +// should produce. +message BuildOutput { + // to defines an optional location to push the output of this build to. + // Kind must be one of 'ImageStreamTag' or 'DockerImage'. + // This value will be used to look up a container image repository to push to. + // In the case of an ImageStreamTag, the ImageStreamTag will be looked for in the namespace of + // the build unless Namespace is specified. + optional k8s.io.api.core.v1.ObjectReference to = 1; + + // PushSecret is the name of a Secret that would be used for setting + // up the authentication for executing the Docker push to authentication + // enabled Docker Registry (or Docker Hub). + optional k8s.io.api.core.v1.LocalObjectReference pushSecret = 2; + + // imageLabels define a list of labels that are applied to the resulting image. If there + // are multiple labels with the same name then the last one in the list is used. + repeated ImageLabel imageLabels = 3; +} + +// A BuildPostCommitSpec holds a build post commit hook specification. The hook +// executes a command in a temporary container running the build output image, +// immediately after the last layer of the image is committed and before the +// image is pushed to a registry. The command is executed with the current +// working directory ($PWD) set to the image's WORKDIR. +// +// The build will be marked as failed if the hook execution fails. It will fail +// if the script or command return a non-zero exit code, or if there is any +// other error related to starting the temporary container. +// +// There are five different ways to configure the hook. As an example, all forms +// below are equivalent and will execute `rake test --verbose`. +// +// 1. Shell script: +// +// "postCommit": { +// "script": "rake test --verbose", +// } +// +// The above is a convenient form which is equivalent to: +// +// "postCommit": { +// "command": ["/bin/sh", "-ic"], +// "args": ["rake test --verbose"] +// } +// +// 2. A command as the image entrypoint: +// +// "postCommit": { +// "commit": ["rake", "test", "--verbose"] +// } +// +// Command overrides the image entrypoint in the exec form, as documented in +// Docker: https://docs.docker.com/engine/reference/builder/#entrypoint. +// +// 3. Pass arguments to the default entrypoint: +// +// "postCommit": { +// "args": ["rake", "test", "--verbose"] +// } +// +// This form is only useful if the image entrypoint can handle arguments. +// +// 4. Shell script with arguments: +// +// "postCommit": { +// "script": "rake test $1", +// "args": ["--verbose"] +// } +// +// This form is useful if you need to pass arguments that would otherwise be +// hard to quote properly in the shell script. In the script, $0 will be +// "/bin/sh" and $1, $2, etc, are the positional arguments from Args. +// +// 5. Command with arguments: +// +// "postCommit": { +// "command": ["rake", "test"], +// "args": ["--verbose"] +// } +// +// This form is equivalent to appending the arguments to the Command slice. +// +// It is invalid to provide both Script and Command simultaneously. If none of +// the fields are specified, the hook is not executed. +message BuildPostCommitSpec { + // command is the command to run. It may not be specified with Script. + // This might be needed if the image doesn't have `/bin/sh`, or if you + // do not want to use a shell. In all other cases, using Script might be + // more convenient. + repeated string command = 1; + + // args is a list of arguments that are provided to either Command, + // Script or the container image's default entrypoint. The arguments are + // placed immediately after the command to be run. + repeated string args = 2; + + // script is a shell script to be run with `/bin/sh -ic`. It may not be + // specified with Command. Use Script when a shell script is appropriate + // to execute the post build hook, for example for running unit tests + // with `rake test`. If you need control over the image entrypoint, or + // if the image does not have `/bin/sh`, use Command and/or Args. + // The `-i` flag is needed to support CentOS and RHEL images that use + // Software Collections (SCL), in order to have the appropriate + // collections enabled in the shell. E.g., in the Ruby image, this is + // necessary to make `ruby`, `bundle` and other binaries available in + // the PATH. + optional string script = 3; +} + +// BuildRequest is the resource used to pass parameters to build generator +message BuildRequest { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // revision is the information from the source for a specific repo snapshot. + optional SourceRevision revision = 2; + + // triggeredByImage is the Image that triggered this build. + optional k8s.io.api.core.v1.ObjectReference triggeredByImage = 3; + + // from is the reference to the ImageStreamTag that triggered the build. + optional k8s.io.api.core.v1.ObjectReference from = 4; + + // binary indicates a request to build from a binary provided to the builder + optional BinaryBuildSource binary = 5; + + // lastVersion (optional) is the LastVersion of the BuildConfig that was used + // to generate the build. If the BuildConfig in the generator doesn't match, a build will + // not be generated. + optional int64 lastVersion = 6; + + // env contains additional environment variables you want to pass into a builder container. + repeated k8s.io.api.core.v1.EnvVar env = 7; + + // triggeredBy describes which triggers started the most recent update to the + // build configuration and contains information about those triggers. + repeated BuildTriggerCause triggeredBy = 8; + + // DockerStrategyOptions contains additional docker-strategy specific options for the build + optional DockerStrategyOptions dockerStrategyOptions = 9; + + // SourceStrategyOptions contains additional source-strategy specific options for the build + optional SourceStrategyOptions sourceStrategyOptions = 10; +} + +// BuildSource is the SCM used for the build. +message BuildSource { + // type of build input to accept + // +k8s:conversion-gen=false + optional string type = 1; + + // binary builds accept a binary as their input. The binary is generally assumed to be a tar, + // gzipped tar, or zip file depending on the strategy. For container image builds, this is the build + // context and an optional Dockerfile may be specified to override any Dockerfile in the + // build context. For Source builds, this is assumed to be an archive as described above. For + // Source and container image builds, if binary.asFile is set the build will receive a directory with + // a single file. contextDir may be used when an archive is provided. Custom builds will + // receive this binary as input on STDIN. + optional BinaryBuildSource binary = 2; + + // dockerfile is the raw contents of a Dockerfile which should be built. When this option is + // specified, the FROM may be modified based on your strategy base image and additional ENV + // stanzas from your strategy environment will be added after the FROM, but before the rest + // of your Dockerfile stanzas. The Dockerfile source type may be used with other options like + // git - in those cases the Git repo will have any innate Dockerfile replaced in the context + // dir. + optional string dockerfile = 3; + + // git contains optional information about git build source + optional GitBuildSource git = 4; + + // images describes a set of images to be used to provide source for the build + repeated ImageSource images = 5; + + // contextDir specifies the sub-directory where the source code for the application exists. + // This allows to have buildable sources in directory other than root of + // repository. + optional string contextDir = 6; + + // sourceSecret is the name of a Secret that would be used for setting + // up the authentication for cloning private repository. + // The secret contains valid credentials for remote repository, where the + // data's key represent the authentication method to be used and value is + // the base64 encoded credentials. Supported auth methods are: ssh-privatekey. + optional k8s.io.api.core.v1.LocalObjectReference sourceSecret = 7; + + // secrets represents a list of secrets and their destinations that will + // be used only for the build. + repeated SecretBuildSource secrets = 8; + + // configMaps represents a list of configMaps and their destinations that will + // be used for the build. + repeated ConfigMapBuildSource configMaps = 9; +} + +// BuildSpec has the information to represent a build and also additional +// information about a build +message BuildSpec { + // CommonSpec is the information that represents a build + optional CommonSpec commonSpec = 1; + + // triggeredBy describes which triggers started the most recent update to the + // build configuration and contains information about those triggers. + repeated BuildTriggerCause triggeredBy = 2; +} + +// BuildStatus contains the status of a build +message BuildStatus { + // phase is the point in the build lifecycle. Possible values are + // "New", "Pending", "Running", "Complete", "Failed", "Error", and "Cancelled". + optional string phase = 1; + + // cancelled describes if a cancel event was triggered for the build. + optional bool cancelled = 2; + + // reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI. + optional string reason = 3; + + // message is a human-readable message indicating details about why the build has this status. + optional string message = 4; + + // startTimestamp is a timestamp representing the server time when this Build started + // running in a Pod. + // It is represented in RFC3339 form and is in UTC. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time startTimestamp = 5; + + // completionTimestamp is a timestamp representing the server time when this Build was + // finished, whether that build failed or succeeded. It reflects the time at which + // the Pod running the Build terminated. + // It is represented in RFC3339 form and is in UTC. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time completionTimestamp = 6; + + // duration contains time.Duration object describing build time. + optional int64 duration = 7; + + // outputDockerImageReference contains a reference to the container image that + // will be built by this build. Its value is computed from + // Build.Spec.Output.To, and should include the registry address, so that + // it can be used to push and pull the image. + optional string outputDockerImageReference = 8; + + // config is an ObjectReference to the BuildConfig this Build is based on. + optional k8s.io.api.core.v1.ObjectReference config = 9; + + // output describes the container image the build has produced. + optional BuildStatusOutput output = 10; + + // stages contains details about each stage that occurs during the build + // including start time, duration (in milliseconds), and the steps that + // occured within each stage. + repeated StageInfo stages = 11; + + // logSnippet is the last few lines of the build log. This value is only set for builds that failed. + optional string logSnippet = 12; + + // Conditions represents the latest available observations of a build's current state. + // +patchMergeKey=type + // +patchStrategy=merge + repeated BuildCondition conditions = 13; +} + +// BuildStatusOutput contains the status of the built image. +message BuildStatusOutput { + // to describes the status of the built image being pushed to a registry. + optional BuildStatusOutputTo to = 1; +} + +// BuildStatusOutputTo describes the status of the built image with regards to +// image registry to which it was supposed to be pushed. +message BuildStatusOutputTo { + // imageDigest is the digest of the built container image. The digest uniquely + // identifies the image in the registry to which it was pushed. + // + // Please note that this field may not always be set even if the push + // completes successfully - e.g. when the registry returns no digest or + // returns it in a format that the builder doesn't understand. + optional string imageDigest = 1; +} + +// BuildStrategy contains the details of how to perform a build. +message BuildStrategy { + // type is the kind of build strategy. + // +k8s:conversion-gen=false + optional string type = 1; + + // dockerStrategy holds the parameters to the container image build strategy. + optional DockerBuildStrategy dockerStrategy = 2; + + // sourceStrategy holds the parameters to the Source build strategy. + optional SourceBuildStrategy sourceStrategy = 3; + + // customStrategy holds the parameters to the Custom build strategy + optional CustomBuildStrategy customStrategy = 4; + + // JenkinsPipelineStrategy holds the parameters to the Jenkins Pipeline build strategy. + // Deprecated: use OpenShift Pipelines + optional JenkinsPipelineBuildStrategy jenkinsPipelineStrategy = 5; +} + +// BuildTriggerCause holds information about a triggered build. It is used for +// displaying build trigger data for each build and build configuration in oc +// describe. It is also used to describe which triggers led to the most recent +// update in the build configuration. +message BuildTriggerCause { + // message is used to store a human readable message for why the build was + // triggered. E.g.: "Manually triggered by user", "Configuration change",etc. + optional string message = 1; + + // genericWebHook holds data about a builds generic webhook trigger. + optional GenericWebHookCause genericWebHook = 2; + + // gitHubWebHook represents data for a GitHub webhook that fired a + // specific build. + optional GitHubWebHookCause githubWebHook = 3; + + // imageChangeBuild stores information about an imagechange event + // that triggered a new build. + optional ImageChangeCause imageChangeBuild = 4; + + // GitLabWebHook represents data for a GitLab webhook that fired a specific + // build. + optional GitLabWebHookCause gitlabWebHook = 5; + + // BitbucketWebHook represents data for a Bitbucket webhook that fired a + // specific build. + optional BitbucketWebHookCause bitbucketWebHook = 6; +} + +// BuildTriggerPolicy describes a policy for a single trigger that results in a new Build. +message BuildTriggerPolicy { + // type is the type of build trigger + optional string type = 1; + + // github contains the parameters for a GitHub webhook type of trigger + optional WebHookTrigger github = 2; + + // generic contains the parameters for a Generic webhook type of trigger + optional WebHookTrigger generic = 3; + + // imageChange contains parameters for an ImageChange type of trigger + optional ImageChangeTrigger imageChange = 4; + + // GitLabWebHook contains the parameters for a GitLab webhook type of trigger + optional WebHookTrigger gitlab = 5; + + // BitbucketWebHook contains the parameters for a Bitbucket webhook type of + // trigger + optional WebHookTrigger bitbucket = 6; +} + +// CommonSpec encapsulates all the inputs necessary to represent a build. +message CommonSpec { + // serviceAccount is the name of the ServiceAccount to use to run the pod + // created by this build. + // The pod will be allowed to use secrets referenced by the ServiceAccount + optional string serviceAccount = 1; + + // source describes the SCM in use. + optional BuildSource source = 2; + + // revision is the information from the source for a specific repo snapshot. + // This is optional. + optional SourceRevision revision = 3; + + // strategy defines how to perform a build. + optional BuildStrategy strategy = 4; + + // output describes the container image the Strategy should produce. + optional BuildOutput output = 5; + + // resources computes resource requirements to execute the build. + optional k8s.io.api.core.v1.ResourceRequirements resources = 6; + + // postCommit is a build hook executed after the build output image is + // committed, before it is pushed to a registry. + optional BuildPostCommitSpec postCommit = 7; + + // completionDeadlineSeconds is an optional duration in seconds, counted from + // the time when a build pod gets scheduled in the system, that the build may + // be active on a node before the system actively tries to terminate the + // build; value must be positive integer + optional int64 completionDeadlineSeconds = 8; + + // nodeSelector is a selector which must be true for the build pod to fit on a node + // If nil, it can be overridden by default build nodeselector values for the cluster. + // If set to an empty map or a map with any values, default build nodeselector values + // are ignored. + // +optional + optional OptionalNodeSelector nodeSelector = 9; +} + +// CommonWebHookCause factors out the identical format of these webhook +// causes into struct so we can share it in the specific causes; it is too late for +// GitHub and Generic but we can leverage this pattern with GitLab and Bitbucket. +message CommonWebHookCause { + // Revision is the git source revision information of the trigger. + optional SourceRevision revision = 1; + + // Secret is the obfuscated webhook secret that triggered a build. + optional string secret = 2; +} + +// ConfigMapBuildSource describes a configmap and its destination directory that will be +// used only at the build time. The content of the configmap referenced here will +// be copied into the destination directory instead of mounting. +message ConfigMapBuildSource { + // configMap is a reference to an existing configmap that you want to use in your + // build. + optional k8s.io.api.core.v1.LocalObjectReference configMap = 1; + + // destinationDir is the directory where the files from the configmap should be + // available for the build time. + // For the Source build strategy, these will be injected into a container + // where the assemble script runs. + // For the container image build strategy, these will be copied into the build + // directory, where the Dockerfile is located, so users can ADD or COPY them + // during container image build. + optional string destinationDir = 2; +} + +// CustomBuildStrategy defines input parameters specific to Custom build. +message CustomBuildStrategy { + // from is reference to an DockerImage, ImageStreamTag, or ImageStreamImage from which + // the container image should be pulled + optional k8s.io.api.core.v1.ObjectReference from = 1; + + // pullSecret is the name of a Secret that would be used for setting up + // the authentication for pulling the container images from the private Docker + // registries + optional k8s.io.api.core.v1.LocalObjectReference pullSecret = 2; + + // env contains additional environment variables you want to pass into a builder container. + repeated k8s.io.api.core.v1.EnvVar env = 3; + + // exposeDockerSocket will allow running Docker commands (and build container images) from + // inside the container. + // TODO: Allow admins to enforce 'false' for this option + optional bool exposeDockerSocket = 4; + + // forcePull describes if the controller should configure the build pod to always pull the images + // for the builder or only pull if it is not present locally + optional bool forcePull = 5; + + // secrets is a list of additional secrets that will be included in the build pod + repeated SecretSpec secrets = 6; + + // buildAPIVersion is the requested API version for the Build object serialized and passed to the custom builder + optional string buildAPIVersion = 7; +} + +// DockerBuildStrategy defines input parameters specific to container image build. +message DockerBuildStrategy { + // from is a reference to an DockerImage, ImageStreamTag, or ImageStreamImage which overrides + // the FROM image in the Dockerfile for the build. If the Dockerfile uses multi-stage builds, + // this will replace the image in the last FROM directive of the file. + optional k8s.io.api.core.v1.ObjectReference from = 1; + + // pullSecret is the name of a Secret that would be used for setting up + // the authentication for pulling the container images from the private Docker + // registries + optional k8s.io.api.core.v1.LocalObjectReference pullSecret = 2; + + // noCache if set to true indicates that the container image build must be executed with the + // --no-cache=true flag + optional bool noCache = 3; + + // env contains additional environment variables you want to pass into a builder container. + repeated k8s.io.api.core.v1.EnvVar env = 4; + + // forcePull describes if the builder should pull the images from registry prior to building. + optional bool forcePull = 5; + + // dockerfilePath is the path of the Dockerfile that will be used to build the container image, + // relative to the root of the context (contextDir). + // Defaults to `Dockerfile` if unset. + optional string dockerfilePath = 6; + + // buildArgs contains build arguments that will be resolved in the Dockerfile. See + // https://docs.docker.com/engine/reference/builder/#/arg for more details. + repeated k8s.io.api.core.v1.EnvVar buildArgs = 7; + + // imageOptimizationPolicy describes what optimizations the system can use when building images + // to reduce the final size or time spent building the image. The default policy is 'None' which + // means the final build image will be equivalent to an image created by the container image build API. + // The experimental policy 'SkipLayers' will avoid commiting new layers in between each + // image step, and will fail if the Dockerfile cannot provide compatibility with the 'None' + // policy. An additional experimental policy 'SkipLayersAndWarn' is the same as + // 'SkipLayers' but simply warns if compatibility cannot be preserved. + optional string imageOptimizationPolicy = 8; +} + +// DockerStrategyOptions contains extra strategy options for container image builds +message DockerStrategyOptions { + // Args contains any build arguments that are to be passed to Docker. See + // https://docs.docker.com/engine/reference/builder/#/arg for more details + repeated k8s.io.api.core.v1.EnvVar buildArgs = 1; + + // noCache overrides the docker-strategy noCache option in the build config + optional bool noCache = 2; +} + +// GenericWebHookCause holds information about a generic WebHook that +// triggered a build. +message GenericWebHookCause { + // revision is an optional field that stores the git source revision + // information of the generic webhook trigger when it is available. + optional SourceRevision revision = 1; + + // secret is the obfuscated webhook secret that triggered a build. + optional string secret = 2; +} + +// GenericWebHookEvent is the payload expected for a generic webhook post +message GenericWebHookEvent { + // type is the type of source repository + // +k8s:conversion-gen=false + optional string type = 1; + + // git is the git information if the Type is BuildSourceGit + optional GitInfo git = 2; + + // env contains additional environment variables you want to pass into a builder container. + // ValueFrom is not supported. + repeated k8s.io.api.core.v1.EnvVar env = 3; + + // DockerStrategyOptions contains additional docker-strategy specific options for the build + optional DockerStrategyOptions dockerStrategyOptions = 4; +} + +// GitBuildSource defines the parameters of a Git SCM +message GitBuildSource { + // uri points to the source that will be built. The structure of the source + // will depend on the type of build to run + optional string uri = 1; + + // ref is the branch/tag/ref to build. + optional string ref = 2; + + // proxyConfig defines the proxies to use for the git clone operation. Values + // not set here are inherited from cluster-wide build git proxy settings. + optional ProxyConfig proxyConfig = 3; +} + +// GitHubWebHookCause has information about a GitHub webhook that triggered a +// build. +message GitHubWebHookCause { + // revision is the git revision information of the trigger. + optional SourceRevision revision = 1; + + // secret is the obfuscated webhook secret that triggered a build. + optional string secret = 2; +} + +// GitInfo is the aggregated git information for a generic webhook post +message GitInfo { + optional GitBuildSource gitBuildSource = 1; + + optional GitSourceRevision gitSourceRevision = 2; + + // Refs is a list of GitRefs for the provided repo - generally sent + // when used from a post-receive hook. This field is optional and is + // used when sending multiple refs + repeated GitRefInfo refs = 3; +} + +// GitLabWebHookCause has information about a GitLab webhook that triggered a +// build. +message GitLabWebHookCause { + optional CommonWebHookCause commonSpec = 1; +} + +// GitRefInfo is a single ref +message GitRefInfo { + optional GitBuildSource gitBuildSource = 1; + + optional GitSourceRevision gitSourceRevision = 2; +} + +// GitSourceRevision is the commit information from a git source for a build +message GitSourceRevision { + // commit is the commit hash identifying a specific commit + optional string commit = 1; + + // author is the author of a specific commit + optional SourceControlUser author = 2; + + // committer is the committer of a specific commit + optional SourceControlUser committer = 3; + + // message is the description of a specific commit + optional string message = 4; +} + +// ImageChangeCause contains information about the image that triggered a +// build +message ImageChangeCause { + // imageID is the ID of the image that triggered a a new build. + optional string imageID = 1; + + // fromRef contains detailed information about an image that triggered a + // build. + optional k8s.io.api.core.v1.ObjectReference fromRef = 2; +} + +// ImageChangeTrigger allows builds to be triggered when an ImageStream changes +message ImageChangeTrigger { + // lastTriggeredImageID is used internally by the ImageChangeController to save last + // used image ID for build + optional string lastTriggeredImageID = 1; + + // from is a reference to an ImageStreamTag that will trigger a build when updated + // It is optional. If no From is specified, the From image from the build strategy + // will be used. Only one ImageChangeTrigger with an empty From reference is allowed in + // a build configuration. + optional k8s.io.api.core.v1.ObjectReference from = 2; + + // paused is true if this trigger is temporarily disabled. Optional. + optional bool paused = 3; +} + +// ImageLabel represents a label applied to the resulting image. +message ImageLabel { + // name defines the name of the label. It must have non-zero length. + optional string name = 1; + + // value defines the literal value of the label. + optional string value = 2; +} + +// ImageSource is used to describe build source that will be extracted from an image or used during a +// multi stage build. A reference of type ImageStreamTag, ImageStreamImage or DockerImage may be used. +// A pull secret can be specified to pull the image from an external registry or override the default +// service account secret if pulling from the internal registry. Image sources can either be used to +// extract content from an image and place it into the build context along with the repository source, +// or used directly during a multi-stage container image build to allow content to be copied without overwriting +// the contents of the repository source (see the 'paths' and 'as' fields). +message ImageSource { + // from is a reference to an ImageStreamTag, ImageStreamImage, or DockerImage to + // copy source from. + optional k8s.io.api.core.v1.ObjectReference from = 1; + + // A list of image names that this source will be used in place of during a multi-stage container image + // build. For instance, a Dockerfile that uses "COPY --from=nginx:latest" will first check for an image + // source that has "nginx:latest" in this field before attempting to pull directly. If the Dockerfile + // does not reference an image source it is ignored. This field and paths may both be set, in which case + // the contents will be used twice. + // +optional + repeated string as = 4; + + // paths is a list of source and destination paths to copy from the image. This content will be copied + // into the build context prior to starting the build. If no paths are set, the build context will + // not be altered. + // +optional + repeated ImageSourcePath paths = 2; + + // pullSecret is a reference to a secret to be used to pull the image from a registry + // If the image is pulled from the OpenShift registry, this field does not need to be set. + optional k8s.io.api.core.v1.LocalObjectReference pullSecret = 3; +} + +// ImageSourcePath describes a path to be copied from a source image and its destination within the build directory. +message ImageSourcePath { + // sourcePath is the absolute path of the file or directory inside the image to + // copy to the build directory. If the source path ends in /. then the content of + // the directory will be copied, but the directory itself will not be created at the + // destination. + optional string sourcePath = 1; + + // destinationDir is the relative directory within the build directory + // where files copied from the image are placed. + optional string destinationDir = 2; +} + +// JenkinsPipelineBuildStrategy holds parameters specific to a Jenkins Pipeline build. +// Deprecated: use OpenShift Pipelines +message JenkinsPipelineBuildStrategy { + // JenkinsfilePath is the optional path of the Jenkinsfile that will be used to configure the pipeline + // relative to the root of the context (contextDir). If both JenkinsfilePath & Jenkinsfile are + // both not specified, this defaults to Jenkinsfile in the root of the specified contextDir. + optional string jenkinsfilePath = 1; + + // Jenkinsfile defines the optional raw contents of a Jenkinsfile which defines a Jenkins pipeline build. + optional string jenkinsfile = 2; + + // env contains additional environment variables you want to pass into a build pipeline. + repeated k8s.io.api.core.v1.EnvVar env = 3; +} + +// OptionalNodeSelector is a map that may also be left nil to distinguish between set and unset. +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +message OptionalNodeSelector { + // items, if empty, will result in an empty map + + map items = 1; +} + +// ProxyConfig defines what proxies to use for an operation +message ProxyConfig { + // httpProxy is a proxy used to reach the git repository over http + optional string httpProxy = 3; + + // httpsProxy is a proxy used to reach the git repository over https + optional string httpsProxy = 4; + + // noProxy is the list of domains for which the proxy should not be used + optional string noProxy = 5; +} + +// SecretBuildSource describes a secret and its destination directory that will be +// used only at the build time. The content of the secret referenced here will +// be copied into the destination directory instead of mounting. +message SecretBuildSource { + // secret is a reference to an existing secret that you want to use in your + // build. + optional k8s.io.api.core.v1.LocalObjectReference secret = 1; + + // destinationDir is the directory where the files from the secret should be + // available for the build time. + // For the Source build strategy, these will be injected into a container + // where the assemble script runs. Later, when the script finishes, all files + // injected will be truncated to zero length. + // For the container image build strategy, these will be copied into the build + // directory, where the Dockerfile is located, so users can ADD or COPY them + // during container image build. + optional string destinationDir = 2; +} + +// SecretLocalReference contains information that points to the local secret being used +message SecretLocalReference { + // Name is the name of the resource in the same namespace being referenced + optional string name = 1; +} + +// SecretSpec specifies a secret to be included in a build pod and its corresponding mount point +message SecretSpec { + // secretSource is a reference to the secret + optional k8s.io.api.core.v1.LocalObjectReference secretSource = 1; + + // mountPath is the path at which to mount the secret + optional string mountPath = 2; +} + +// SourceBuildStrategy defines input parameters specific to an Source build. +message SourceBuildStrategy { + // from is reference to an DockerImage, ImageStreamTag, or ImageStreamImage from which + // the container image should be pulled + optional k8s.io.api.core.v1.ObjectReference from = 1; + + // pullSecret is the name of a Secret that would be used for setting up + // the authentication for pulling the container images from the private Docker + // registries + optional k8s.io.api.core.v1.LocalObjectReference pullSecret = 2; + + // env contains additional environment variables you want to pass into a builder container. + repeated k8s.io.api.core.v1.EnvVar env = 3; + + // scripts is the location of Source scripts + optional string scripts = 4; + + // incremental flag forces the Source build to do incremental builds if true. + optional bool incremental = 5; + + // forcePull describes if the builder should pull the images from registry prior to building. + optional bool forcePull = 6; +} + +// SourceControlUser defines the identity of a user of source control +message SourceControlUser { + // name of the source control user + optional string name = 1; + + // email of the source control user + optional string email = 2; +} + +// SourceRevision is the revision or commit information from the source for the build +message SourceRevision { + // type of the build source, may be one of 'Source', 'Dockerfile', 'Binary', or 'Images' + // +k8s:conversion-gen=false + optional string type = 1; + + // Git contains information about git-based build source + optional GitSourceRevision git = 2; +} + +// SourceStrategyOptions contains extra strategy options for Source builds +message SourceStrategyOptions { + // incremental overrides the source-strategy incremental option in the build config + optional bool incremental = 1; +} + +// StageInfo contains details about a build stage. +message StageInfo { + // name is a unique identifier for each build stage that occurs. + optional string name = 1; + + // startTime is a timestamp representing the server time when this Stage started. + // It is represented in RFC3339 form and is in UTC. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time startTime = 2; + + // durationMilliseconds identifies how long the stage took + // to complete in milliseconds. + // Note: the duration of a stage can exceed the sum of the duration of the steps within + // the stage as not all actions are accounted for in explicit build steps. + optional int64 durationMilliseconds = 3; + + // steps contains details about each step that occurs during a build stage + // including start time and duration in milliseconds. + repeated StepInfo steps = 4; +} + +// StepInfo contains details about a build step. +message StepInfo { + // name is a unique identifier for each build step. + optional string name = 1; + + // startTime is a timestamp representing the server time when this Step started. + // it is represented in RFC3339 form and is in UTC. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time startTime = 2; + + // durationMilliseconds identifies how long the step took + // to complete in milliseconds. + optional int64 durationMilliseconds = 3; +} + +// WebHookTrigger is a trigger that gets invoked using a webhook type of post +message WebHookTrigger { + // secret used to validate requests. + // Deprecated: use SecretReference instead. + optional string secret = 1; + + // allowEnv determines whether the webhook can set environment variables; can only + // be set to true for GenericWebHook. + optional bool allowEnv = 2; + + // secretReference is a reference to a secret in the same namespace, + // containing the value to be validated when the webhook is invoked. + // The secret being referenced must contain a key named "WebHookSecretKey", the value + // of which will be checked against the value supplied in the webhook invocation. + optional SecretLocalReference secretReference = 3; +} + diff --git a/vendor/github.com/openshift/api/build/v1/legacy.go b/vendor/github.com/openshift/api/build/v1/legacy.go new file mode 100644 index 0000000000000..a74627d2cda08 --- /dev/null +++ b/vendor/github.com/openshift/api/build/v1/legacy.go @@ -0,0 +1,28 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + legacyGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} + legacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes, corev1.AddToScheme) + DeprecatedInstallWithoutGroup = legacySchemeBuilder.AddToScheme +) + +func addLegacyKnownTypes(scheme *runtime.Scheme) error { + types := []runtime.Object{ + &Build{}, + &BuildList{}, + &BuildConfig{}, + &BuildConfigList{}, + &BuildLog{}, + &BuildRequest{}, + &BuildLogOptions{}, + &BinaryBuildRequestOptions{}, + } + scheme.AddKnownTypes(legacyGroupVersion, types...) + return nil +} diff --git a/vendor/github.com/openshift/api/build/v1/register.go b/vendor/github.com/openshift/api/build/v1/register.go new file mode 100644 index 0000000000000..16f68ea8cd6d8 --- /dev/null +++ b/vendor/github.com/openshift/api/build/v1/register.go @@ -0,0 +1,47 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "build.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, corev1.AddToScheme) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// addKnownTypes adds types to API group +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &Build{}, + &BuildList{}, + &BuildConfig{}, + &BuildConfigList{}, + &BuildLog{}, + &BuildRequest{}, + &BuildLogOptions{}, + &BinaryBuildRequestOptions{}, + // This is needed for webhooks + &corev1.PodProxyOptions{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/build/v1/types.go b/vendor/github.com/openshift/api/build/v1/types.go new file mode 100644 index 0000000000000..3c9d088f7ee28 --- /dev/null +++ b/vendor/github.com/openshift/api/build/v1/types.go @@ -0,0 +1,1268 @@ +package v1 + +import ( + "fmt" + "time" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:method=UpdateDetails,verb=update,subresource=details +// +genclient:method=Clone,verb=create,subresource=clone,input=BuildRequest +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Build encapsulates the inputs needed to produce a new deployable image, as well as +// the status of the execution and a reference to the Pod which executed the build. +type Build struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // spec is all the inputs used to execute the build. + Spec BuildSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // status is the current status of the build. + // +optional + Status BuildStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// BuildSpec has the information to represent a build and also additional +// information about a build +type BuildSpec struct { + // CommonSpec is the information that represents a build + CommonSpec `json:",inline" protobuf:"bytes,1,opt,name=commonSpec"` + + // triggeredBy describes which triggers started the most recent update to the + // build configuration and contains information about those triggers. + TriggeredBy []BuildTriggerCause `json:"triggeredBy,omitempty" protobuf:"bytes,2,rep,name=triggeredBy"` +} + +// OptionalNodeSelector is a map that may also be left nil to distinguish between set and unset. +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +type OptionalNodeSelector map[string]string + +func (t OptionalNodeSelector) String() string { + return fmt.Sprintf("%v", map[string]string(t)) +} + +// CommonSpec encapsulates all the inputs necessary to represent a build. +type CommonSpec struct { + // serviceAccount is the name of the ServiceAccount to use to run the pod + // created by this build. + // The pod will be allowed to use secrets referenced by the ServiceAccount + ServiceAccount string `json:"serviceAccount,omitempty" protobuf:"bytes,1,opt,name=serviceAccount"` + + // source describes the SCM in use. + Source BuildSource `json:"source,omitempty" protobuf:"bytes,2,opt,name=source"` + + // revision is the information from the source for a specific repo snapshot. + // This is optional. + Revision *SourceRevision `json:"revision,omitempty" protobuf:"bytes,3,opt,name=revision"` + + // strategy defines how to perform a build. + Strategy BuildStrategy `json:"strategy" protobuf:"bytes,4,opt,name=strategy"` + + // output describes the container image the Strategy should produce. + Output BuildOutput `json:"output,omitempty" protobuf:"bytes,5,opt,name=output"` + + // resources computes resource requirements to execute the build. + Resources corev1.ResourceRequirements `json:"resources,omitempty" protobuf:"bytes,6,opt,name=resources"` + + // postCommit is a build hook executed after the build output image is + // committed, before it is pushed to a registry. + PostCommit BuildPostCommitSpec `json:"postCommit,omitempty" protobuf:"bytes,7,opt,name=postCommit"` + + // completionDeadlineSeconds is an optional duration in seconds, counted from + // the time when a build pod gets scheduled in the system, that the build may + // be active on a node before the system actively tries to terminate the + // build; value must be positive integer + CompletionDeadlineSeconds *int64 `json:"completionDeadlineSeconds,omitempty" protobuf:"varint,8,opt,name=completionDeadlineSeconds"` + + // nodeSelector is a selector which must be true for the build pod to fit on a node + // If nil, it can be overridden by default build nodeselector values for the cluster. + // If set to an empty map or a map with any values, default build nodeselector values + // are ignored. + // +optional + NodeSelector OptionalNodeSelector `json:"nodeSelector" protobuf:"bytes,9,name=nodeSelector"` +} + +// BuildTriggerCause holds information about a triggered build. It is used for +// displaying build trigger data for each build and build configuration in oc +// describe. It is also used to describe which triggers led to the most recent +// update in the build configuration. +type BuildTriggerCause struct { + // message is used to store a human readable message for why the build was + // triggered. E.g.: "Manually triggered by user", "Configuration change",etc. + Message string `json:"message,omitempty" protobuf:"bytes,1,opt,name=message"` + + // genericWebHook holds data about a builds generic webhook trigger. + GenericWebHook *GenericWebHookCause `json:"genericWebHook,omitempty" protobuf:"bytes,2,opt,name=genericWebHook"` + + // gitHubWebHook represents data for a GitHub webhook that fired a + //specific build. + GitHubWebHook *GitHubWebHookCause `json:"githubWebHook,omitempty" protobuf:"bytes,3,opt,name=githubWebHook"` + + // imageChangeBuild stores information about an imagechange event + // that triggered a new build. + ImageChangeBuild *ImageChangeCause `json:"imageChangeBuild,omitempty" protobuf:"bytes,4,opt,name=imageChangeBuild"` + + // GitLabWebHook represents data for a GitLab webhook that fired a specific + // build. + GitLabWebHook *GitLabWebHookCause `json:"gitlabWebHook,omitempty" protobuf:"bytes,5,opt,name=gitlabWebHook"` + + // BitbucketWebHook represents data for a Bitbucket webhook that fired a + // specific build. + BitbucketWebHook *BitbucketWebHookCause `json:"bitbucketWebHook,omitempty" protobuf:"bytes,6,opt,name=bitbucketWebHook"` +} + +// GenericWebHookCause holds information about a generic WebHook that +// triggered a build. +type GenericWebHookCause struct { + // revision is an optional field that stores the git source revision + // information of the generic webhook trigger when it is available. + Revision *SourceRevision `json:"revision,omitempty" protobuf:"bytes,1,opt,name=revision"` + + // secret is the obfuscated webhook secret that triggered a build. + Secret string `json:"secret,omitempty" protobuf:"bytes,2,opt,name=secret"` +} + +// GitHubWebHookCause has information about a GitHub webhook that triggered a +// build. +type GitHubWebHookCause struct { + // revision is the git revision information of the trigger. + Revision *SourceRevision `json:"revision,omitempty" protobuf:"bytes,1,opt,name=revision"` + + // secret is the obfuscated webhook secret that triggered a build. + Secret string `json:"secret,omitempty" protobuf:"bytes,2,opt,name=secret"` +} + +// CommonWebHookCause factors out the identical format of these webhook +// causes into struct so we can share it in the specific causes; it is too late for +// GitHub and Generic but we can leverage this pattern with GitLab and Bitbucket. +type CommonWebHookCause struct { + // Revision is the git source revision information of the trigger. + Revision *SourceRevision `json:"revision,omitempty" protobuf:"bytes,1,opt,name=revision"` + + // Secret is the obfuscated webhook secret that triggered a build. + Secret string `json:"secret,omitempty" protobuf:"bytes,2,opt,name=secret"` +} + +// GitLabWebHookCause has information about a GitLab webhook that triggered a +// build. +type GitLabWebHookCause struct { + CommonWebHookCause `json:",inline" protobuf:"bytes,1,opt,name=commonSpec"` +} + +// BitbucketWebHookCause has information about a Bitbucket webhook that triggered a +// build. +type BitbucketWebHookCause struct { + CommonWebHookCause `json:",inline" protobuf:"bytes,1,opt,name=commonSpec"` +} + +// ImageChangeCause contains information about the image that triggered a +// build +type ImageChangeCause struct { + // imageID is the ID of the image that triggered a a new build. + ImageID string `json:"imageID,omitempty" protobuf:"bytes,1,opt,name=imageID"` + + // fromRef contains detailed information about an image that triggered a + // build. + FromRef *corev1.ObjectReference `json:"fromRef,omitempty" protobuf:"bytes,2,opt,name=fromRef"` +} + +// BuildStatus contains the status of a build +type BuildStatus struct { + // phase is the point in the build lifecycle. Possible values are + // "New", "Pending", "Running", "Complete", "Failed", "Error", and "Cancelled". + Phase BuildPhase `json:"phase" protobuf:"bytes,1,opt,name=phase,casttype=BuildPhase"` + + // cancelled describes if a cancel event was triggered for the build. + Cancelled bool `json:"cancelled,omitempty" protobuf:"varint,2,opt,name=cancelled"` + + // reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI. + Reason StatusReason `json:"reason,omitempty" protobuf:"bytes,3,opt,name=reason,casttype=StatusReason"` + + // message is a human-readable message indicating details about why the build has this status. + Message string `json:"message,omitempty" protobuf:"bytes,4,opt,name=message"` + + // startTimestamp is a timestamp representing the server time when this Build started + // running in a Pod. + // It is represented in RFC3339 form and is in UTC. + StartTimestamp *metav1.Time `json:"startTimestamp,omitempty" protobuf:"bytes,5,opt,name=startTimestamp"` + + // completionTimestamp is a timestamp representing the server time when this Build was + // finished, whether that build failed or succeeded. It reflects the time at which + // the Pod running the Build terminated. + // It is represented in RFC3339 form and is in UTC. + CompletionTimestamp *metav1.Time `json:"completionTimestamp,omitempty" protobuf:"bytes,6,opt,name=completionTimestamp"` + + // duration contains time.Duration object describing build time. + Duration time.Duration `json:"duration,omitempty" protobuf:"varint,7,opt,name=duration,casttype=time.Duration"` + + // outputDockerImageReference contains a reference to the container image that + // will be built by this build. Its value is computed from + // Build.Spec.Output.To, and should include the registry address, so that + // it can be used to push and pull the image. + OutputDockerImageReference string `json:"outputDockerImageReference,omitempty" protobuf:"bytes,8,opt,name=outputDockerImageReference"` + + // config is an ObjectReference to the BuildConfig this Build is based on. + Config *corev1.ObjectReference `json:"config,omitempty" protobuf:"bytes,9,opt,name=config"` + + // output describes the container image the build has produced. + Output BuildStatusOutput `json:"output,omitempty" protobuf:"bytes,10,opt,name=output"` + + // stages contains details about each stage that occurs during the build + // including start time, duration (in milliseconds), and the steps that + // occured within each stage. + Stages []StageInfo `json:"stages,omitempty" protobuf:"bytes,11,opt,name=stages"` + + // logSnippet is the last few lines of the build log. This value is only set for builds that failed. + LogSnippet string `json:"logSnippet,omitempty" protobuf:"bytes,12,opt,name=logSnippet"` + + // Conditions represents the latest available observations of a build's current state. + // +patchMergeKey=type + // +patchStrategy=merge + Conditions []BuildCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,13,rep,name=conditions"` +} + +// StageInfo contains details about a build stage. +type StageInfo struct { + // name is a unique identifier for each build stage that occurs. + Name StageName `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` + + // startTime is a timestamp representing the server time when this Stage started. + // It is represented in RFC3339 form and is in UTC. + StartTime metav1.Time `json:"startTime,omitempty" protobuf:"bytes,2,opt,name=startTime"` + + // durationMilliseconds identifies how long the stage took + // to complete in milliseconds. + // Note: the duration of a stage can exceed the sum of the duration of the steps within + // the stage as not all actions are accounted for in explicit build steps. + DurationMilliseconds int64 `json:"durationMilliseconds,omitempty" protobuf:"varint,3,opt,name=durationMilliseconds"` + + // steps contains details about each step that occurs during a build stage + // including start time and duration in milliseconds. + Steps []StepInfo `json:"steps,omitempty" protobuf:"bytes,4,opt,name=steps"` +} + +// StageName is the unique identifier for each build stage. +type StageName string + +// Valid values for StageName +const ( + // StageFetchInputs fetches any inputs such as source code. + StageFetchInputs StageName = "FetchInputs" + + // StagePullImages pulls any images that are needed such as + // base images or input images. + StagePullImages StageName = "PullImages" + + // StageBuild performs the steps necessary to build the image. + StageBuild StageName = "Build" + + // StagePostCommit executes any post commit steps. + StagePostCommit StageName = "PostCommit" + + // StagePushImage pushes the image to the node. + StagePushImage StageName = "PushImage" +) + +// StepInfo contains details about a build step. +type StepInfo struct { + // name is a unique identifier for each build step. + Name StepName `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` + + // startTime is a timestamp representing the server time when this Step started. + // it is represented in RFC3339 form and is in UTC. + StartTime metav1.Time `json:"startTime,omitempty" protobuf:"bytes,2,opt,name=startTime"` + + // durationMilliseconds identifies how long the step took + // to complete in milliseconds. + DurationMilliseconds int64 `json:"durationMilliseconds,omitempty" protobuf:"varint,3,opt,name=durationMilliseconds"` +} + +// StepName is a unique identifier for each build step. +type StepName string + +// Valid values for StepName +const ( + // StepExecPostCommitHook executes the buildconfigs post commit hook. + StepExecPostCommitHook StepName = "RunPostCommitHook" + + // StepFetchGitSource fetches source code for the build. + StepFetchGitSource StepName = "FetchGitSource" + + // StepPullBaseImage pulls a base image for the build. + StepPullBaseImage StepName = "PullBaseImage" + + // StepPullInputImage pulls an input image for the build. + StepPullInputImage StepName = "PullInputImage" + + // StepPushImage pushes an image to the registry. + StepPushImage StepName = "PushImage" + + // StepPushDockerImage pushes a container image to the registry. + StepPushDockerImage StepName = "PushDockerImage" + + //StepDockerBuild performs the container image build + StepDockerBuild StepName = "DockerBuild" +) + +// BuildPhase represents the status of a build at a point in time. +type BuildPhase string + +// Valid values for BuildPhase. +const ( + // BuildPhaseNew is automatically assigned to a newly created build. + BuildPhaseNew BuildPhase = "New" + + // BuildPhasePending indicates that a pod name has been assigned and a build is + // about to start running. + BuildPhasePending BuildPhase = "Pending" + + // BuildPhaseRunning indicates that a pod has been created and a build is running. + BuildPhaseRunning BuildPhase = "Running" + + // BuildPhaseComplete indicates that a build has been successful. + BuildPhaseComplete BuildPhase = "Complete" + + // BuildPhaseFailed indicates that a build has executed and failed. + BuildPhaseFailed BuildPhase = "Failed" + + // BuildPhaseError indicates that an error prevented the build from executing. + BuildPhaseError BuildPhase = "Error" + + // BuildPhaseCancelled indicates that a running/pending build was stopped from executing. + BuildPhaseCancelled BuildPhase = "Cancelled" +) + +type BuildConditionType string + +// BuildCondition describes the state of a build at a certain point. +type BuildCondition struct { + // Type of build condition. + Type BuildConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=BuildConditionType"` + // Status of the condition, one of True, False, Unknown. + Status corev1.ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=k8s.io/kubernetes/pkg/api/v1.ConditionStatus"` + // The last time this condition was updated. + LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty" protobuf:"bytes,6,opt,name=lastUpdateTime"` + // The last time the condition transitioned from one status to another. + LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,3,opt,name=lastTransitionTime"` + // The reason for the condition's last transition. + Reason string `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"` + // A human readable message indicating details about the transition. + Message string `json:"message,omitempty" protobuf:"bytes,5,opt,name=message"` +} + +// StatusReason is a brief CamelCase string that describes a temporary or +// permanent build error condition, meant for machine parsing and tidy display +// in the CLI. +type StatusReason string + +// BuildStatusOutput contains the status of the built image. +type BuildStatusOutput struct { + // to describes the status of the built image being pushed to a registry. + To *BuildStatusOutputTo `json:"to,omitempty" protobuf:"bytes,1,opt,name=to"` +} + +// BuildStatusOutputTo describes the status of the built image with regards to +// image registry to which it was supposed to be pushed. +type BuildStatusOutputTo struct { + // imageDigest is the digest of the built container image. The digest uniquely + // identifies the image in the registry to which it was pushed. + // + // Please note that this field may not always be set even if the push + // completes successfully - e.g. when the registry returns no digest or + // returns it in a format that the builder doesn't understand. + ImageDigest string `json:"imageDigest,omitempty" protobuf:"bytes,1,opt,name=imageDigest"` +} + +// BuildSourceType is the type of SCM used. +type BuildSourceType string + +// Valid values for BuildSourceType. +const ( + //BuildSourceGit instructs a build to use a Git source control repository as the build input. + BuildSourceGit BuildSourceType = "Git" + // BuildSourceDockerfile uses a Dockerfile as the start of a build + BuildSourceDockerfile BuildSourceType = "Dockerfile" + // BuildSourceBinary indicates the build will accept a Binary file as input. + BuildSourceBinary BuildSourceType = "Binary" + // BuildSourceImage indicates the build will accept an image as input + BuildSourceImage BuildSourceType = "Image" + // BuildSourceNone indicates the build has no predefined input (only valid for Source and Custom Strategies) + BuildSourceNone BuildSourceType = "None" +) + +// BuildSource is the SCM used for the build. +type BuildSource struct { + // type of build input to accept + // +k8s:conversion-gen=false + Type BuildSourceType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=BuildSourceType"` + + // binary builds accept a binary as their input. The binary is generally assumed to be a tar, + // gzipped tar, or zip file depending on the strategy. For container image builds, this is the build + // context and an optional Dockerfile may be specified to override any Dockerfile in the + // build context. For Source builds, this is assumed to be an archive as described above. For + // Source and container image builds, if binary.asFile is set the build will receive a directory with + // a single file. contextDir may be used when an archive is provided. Custom builds will + // receive this binary as input on STDIN. + Binary *BinaryBuildSource `json:"binary,omitempty" protobuf:"bytes,2,opt,name=binary"` + + // dockerfile is the raw contents of a Dockerfile which should be built. When this option is + // specified, the FROM may be modified based on your strategy base image and additional ENV + // stanzas from your strategy environment will be added after the FROM, but before the rest + // of your Dockerfile stanzas. The Dockerfile source type may be used with other options like + // git - in those cases the Git repo will have any innate Dockerfile replaced in the context + // dir. + Dockerfile *string `json:"dockerfile,omitempty" protobuf:"bytes,3,opt,name=dockerfile"` + + // git contains optional information about git build source + Git *GitBuildSource `json:"git,omitempty" protobuf:"bytes,4,opt,name=git"` + + // images describes a set of images to be used to provide source for the build + Images []ImageSource `json:"images,omitempty" protobuf:"bytes,5,rep,name=images"` + + // contextDir specifies the sub-directory where the source code for the application exists. + // This allows to have buildable sources in directory other than root of + // repository. + ContextDir string `json:"contextDir,omitempty" protobuf:"bytes,6,opt,name=contextDir"` + + // sourceSecret is the name of a Secret that would be used for setting + // up the authentication for cloning private repository. + // The secret contains valid credentials for remote repository, where the + // data's key represent the authentication method to be used and value is + // the base64 encoded credentials. Supported auth methods are: ssh-privatekey. + SourceSecret *corev1.LocalObjectReference `json:"sourceSecret,omitempty" protobuf:"bytes,7,opt,name=sourceSecret"` + + // secrets represents a list of secrets and their destinations that will + // be used only for the build. + Secrets []SecretBuildSource `json:"secrets,omitempty" protobuf:"bytes,8,rep,name=secrets"` + + // configMaps represents a list of configMaps and their destinations that will + // be used for the build. + ConfigMaps []ConfigMapBuildSource `json:"configMaps,omitempty" protobuf:"bytes,9,rep,name=configMaps"` +} + +// ImageSource is used to describe build source that will be extracted from an image or used during a +// multi stage build. A reference of type ImageStreamTag, ImageStreamImage or DockerImage may be used. +// A pull secret can be specified to pull the image from an external registry or override the default +// service account secret if pulling from the internal registry. Image sources can either be used to +// extract content from an image and place it into the build context along with the repository source, +// or used directly during a multi-stage container image build to allow content to be copied without overwriting +// the contents of the repository source (see the 'paths' and 'as' fields). +type ImageSource struct { + // from is a reference to an ImageStreamTag, ImageStreamImage, or DockerImage to + // copy source from. + From corev1.ObjectReference `json:"from" protobuf:"bytes,1,opt,name=from"` + + // A list of image names that this source will be used in place of during a multi-stage container image + // build. For instance, a Dockerfile that uses "COPY --from=nginx:latest" will first check for an image + // source that has "nginx:latest" in this field before attempting to pull directly. If the Dockerfile + // does not reference an image source it is ignored. This field and paths may both be set, in which case + // the contents will be used twice. + // +optional + As []string `json:"as,omitempty" protobuf:"bytes,4,rep,name=as"` + + // paths is a list of source and destination paths to copy from the image. This content will be copied + // into the build context prior to starting the build. If no paths are set, the build context will + // not be altered. + // +optional + Paths []ImageSourcePath `json:"paths,omitempty" protobuf:"bytes,2,rep,name=paths"` + + // pullSecret is a reference to a secret to be used to pull the image from a registry + // If the image is pulled from the OpenShift registry, this field does not need to be set. + PullSecret *corev1.LocalObjectReference `json:"pullSecret,omitempty" protobuf:"bytes,3,opt,name=pullSecret"` +} + +// ImageSourcePath describes a path to be copied from a source image and its destination within the build directory. +type ImageSourcePath struct { + // sourcePath is the absolute path of the file or directory inside the image to + // copy to the build directory. If the source path ends in /. then the content of + // the directory will be copied, but the directory itself will not be created at the + // destination. + SourcePath string `json:"sourcePath" protobuf:"bytes,1,opt,name=sourcePath"` + + // destinationDir is the relative directory within the build directory + // where files copied from the image are placed. + DestinationDir string `json:"destinationDir" protobuf:"bytes,2,opt,name=destinationDir"` +} + +// SecretBuildSource describes a secret and its destination directory that will be +// used only at the build time. The content of the secret referenced here will +// be copied into the destination directory instead of mounting. +type SecretBuildSource struct { + // secret is a reference to an existing secret that you want to use in your + // build. + Secret corev1.LocalObjectReference `json:"secret" protobuf:"bytes,1,opt,name=secret"` + + // destinationDir is the directory where the files from the secret should be + // available for the build time. + // For the Source build strategy, these will be injected into a container + // where the assemble script runs. Later, when the script finishes, all files + // injected will be truncated to zero length. + // For the container image build strategy, these will be copied into the build + // directory, where the Dockerfile is located, so users can ADD or COPY them + // during container image build. + DestinationDir string `json:"destinationDir,omitempty" protobuf:"bytes,2,opt,name=destinationDir"` +} + +// ConfigMapBuildSource describes a configmap and its destination directory that will be +// used only at the build time. The content of the configmap referenced here will +// be copied into the destination directory instead of mounting. +type ConfigMapBuildSource struct { + // configMap is a reference to an existing configmap that you want to use in your + // build. + ConfigMap corev1.LocalObjectReference `json:"configMap" protobuf:"bytes,1,opt,name=configMap"` + + // destinationDir is the directory where the files from the configmap should be + // available for the build time. + // For the Source build strategy, these will be injected into a container + // where the assemble script runs. + // For the container image build strategy, these will be copied into the build + // directory, where the Dockerfile is located, so users can ADD or COPY them + // during container image build. + DestinationDir string `json:"destinationDir,omitempty" protobuf:"bytes,2,opt,name=destinationDir"` +} + +// BinaryBuildSource describes a binary file to be used for the Docker and Source build strategies, +// where the file will be extracted and used as the build source. +type BinaryBuildSource struct { + // asFile indicates that the provided binary input should be considered a single file + // within the build input. For example, specifying "webapp.war" would place the provided + // binary as `/webapp.war` for the builder. If left empty, the Docker and Source build + // strategies assume this file is a zip, tar, or tar.gz file and extract it as the source. + // The custom strategy receives this binary as standard input. This filename may not + // contain slashes or be '..' or '.'. + AsFile string `json:"asFile,omitempty" protobuf:"bytes,1,opt,name=asFile"` +} + +// SourceRevision is the revision or commit information from the source for the build +type SourceRevision struct { + // type of the build source, may be one of 'Source', 'Dockerfile', 'Binary', or 'Images' + // +k8s:conversion-gen=false + Type BuildSourceType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=BuildSourceType"` + + // Git contains information about git-based build source + Git *GitSourceRevision `json:"git,omitempty" protobuf:"bytes,2,opt,name=git"` +} + +// GitSourceRevision is the commit information from a git source for a build +type GitSourceRevision struct { + // commit is the commit hash identifying a specific commit + Commit string `json:"commit,omitempty" protobuf:"bytes,1,opt,name=commit"` + + // author is the author of a specific commit + Author SourceControlUser `json:"author,omitempty" protobuf:"bytes,2,opt,name=author"` + + // committer is the committer of a specific commit + Committer SourceControlUser `json:"committer,omitempty" protobuf:"bytes,3,opt,name=committer"` + + // message is the description of a specific commit + Message string `json:"message,omitempty" protobuf:"bytes,4,opt,name=message"` +} + +// ProxyConfig defines what proxies to use for an operation +type ProxyConfig struct { + // httpProxy is a proxy used to reach the git repository over http + HTTPProxy *string `json:"httpProxy,omitempty" protobuf:"bytes,3,opt,name=httpProxy"` + + // httpsProxy is a proxy used to reach the git repository over https + HTTPSProxy *string `json:"httpsProxy,omitempty" protobuf:"bytes,4,opt,name=httpsProxy"` + + // noProxy is the list of domains for which the proxy should not be used + NoProxy *string `json:"noProxy,omitempty" protobuf:"bytes,5,opt,name=noProxy"` +} + +// GitBuildSource defines the parameters of a Git SCM +type GitBuildSource struct { + // uri points to the source that will be built. The structure of the source + // will depend on the type of build to run + URI string `json:"uri" protobuf:"bytes,1,opt,name=uri"` + + // ref is the branch/tag/ref to build. + Ref string `json:"ref,omitempty" protobuf:"bytes,2,opt,name=ref"` + + // proxyConfig defines the proxies to use for the git clone operation. Values + // not set here are inherited from cluster-wide build git proxy settings. + ProxyConfig `json:",inline" protobuf:"bytes,3,opt,name=proxyConfig"` +} + +// SourceControlUser defines the identity of a user of source control +type SourceControlUser struct { + // name of the source control user + Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` + + // email of the source control user + Email string `json:"email,omitempty" protobuf:"bytes,2,opt,name=email"` +} + +// BuildStrategy contains the details of how to perform a build. +type BuildStrategy struct { + // type is the kind of build strategy. + // +k8s:conversion-gen=false + Type BuildStrategyType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=BuildStrategyType"` + + // dockerStrategy holds the parameters to the container image build strategy. + DockerStrategy *DockerBuildStrategy `json:"dockerStrategy,omitempty" protobuf:"bytes,2,opt,name=dockerStrategy"` + + // sourceStrategy holds the parameters to the Source build strategy. + SourceStrategy *SourceBuildStrategy `json:"sourceStrategy,omitempty" protobuf:"bytes,3,opt,name=sourceStrategy"` + + // customStrategy holds the parameters to the Custom build strategy + CustomStrategy *CustomBuildStrategy `json:"customStrategy,omitempty" protobuf:"bytes,4,opt,name=customStrategy"` + + // JenkinsPipelineStrategy holds the parameters to the Jenkins Pipeline build strategy. + // Deprecated: use OpenShift Pipelines + JenkinsPipelineStrategy *JenkinsPipelineBuildStrategy `json:"jenkinsPipelineStrategy,omitempty" protobuf:"bytes,5,opt,name=jenkinsPipelineStrategy"` +} + +// BuildStrategyType describes a particular way of performing a build. +type BuildStrategyType string + +// Valid values for BuildStrategyType. +const ( + // DockerBuildStrategyType performs builds using a Dockerfile. + DockerBuildStrategyType BuildStrategyType = "Docker" + + // SourceBuildStrategyType performs builds build using Source To Images with a Git repository + // and a builder image. + SourceBuildStrategyType BuildStrategyType = "Source" + + // CustomBuildStrategyType performs builds using custom builder container image. + CustomBuildStrategyType BuildStrategyType = "Custom" + + // JenkinsPipelineBuildStrategyType indicates the build will run via Jenkine Pipeline. + JenkinsPipelineBuildStrategyType BuildStrategyType = "JenkinsPipeline" +) + +// CustomBuildStrategy defines input parameters specific to Custom build. +type CustomBuildStrategy struct { + // from is reference to an DockerImage, ImageStreamTag, or ImageStreamImage from which + // the container image should be pulled + From corev1.ObjectReference `json:"from" protobuf:"bytes,1,opt,name=from"` + + // pullSecret is the name of a Secret that would be used for setting up + // the authentication for pulling the container images from the private Docker + // registries + PullSecret *corev1.LocalObjectReference `json:"pullSecret,omitempty" protobuf:"bytes,2,opt,name=pullSecret"` + + // env contains additional environment variables you want to pass into a builder container. + Env []corev1.EnvVar `json:"env,omitempty" protobuf:"bytes,3,rep,name=env"` + + // exposeDockerSocket will allow running Docker commands (and build container images) from + // inside the container. + // TODO: Allow admins to enforce 'false' for this option + ExposeDockerSocket bool `json:"exposeDockerSocket,omitempty" protobuf:"varint,4,opt,name=exposeDockerSocket"` + + // forcePull describes if the controller should configure the build pod to always pull the images + // for the builder or only pull if it is not present locally + ForcePull bool `json:"forcePull,omitempty" protobuf:"varint,5,opt,name=forcePull"` + + // secrets is a list of additional secrets that will be included in the build pod + Secrets []SecretSpec `json:"secrets,omitempty" protobuf:"bytes,6,rep,name=secrets"` + + // buildAPIVersion is the requested API version for the Build object serialized and passed to the custom builder + BuildAPIVersion string `json:"buildAPIVersion,omitempty" protobuf:"bytes,7,opt,name=buildAPIVersion"` +} + +// ImageOptimizationPolicy describes what optimizations the builder can perform when building images. +type ImageOptimizationPolicy string + +const ( + // ImageOptimizationNone will generate a canonical container image as produced by the + // `container image build` command. + ImageOptimizationNone ImageOptimizationPolicy = "None" + + // ImageOptimizationSkipLayers is an experimental policy and will avoid creating + // unique layers for each dockerfile line, resulting in smaller images and saving time + // during creation. Some Dockerfile syntax is not fully supported - content added to + // a VOLUME by an earlier layer may have incorrect uid, gid, and filesystem permissions. + // If an unsupported setting is detected, the build will fail. + ImageOptimizationSkipLayers ImageOptimizationPolicy = "SkipLayers" + + // ImageOptimizationSkipLayersAndWarn is the same as SkipLayers, but will only + // warn to the build output instead of failing when unsupported syntax is detected. This + // policy is experimental. + ImageOptimizationSkipLayersAndWarn ImageOptimizationPolicy = "SkipLayersAndWarn" +) + +// DockerBuildStrategy defines input parameters specific to container image build. +type DockerBuildStrategy struct { + // from is a reference to an DockerImage, ImageStreamTag, or ImageStreamImage which overrides + // the FROM image in the Dockerfile for the build. If the Dockerfile uses multi-stage builds, + // this will replace the image in the last FROM directive of the file. + From *corev1.ObjectReference `json:"from,omitempty" protobuf:"bytes,1,opt,name=from"` + + // pullSecret is the name of a Secret that would be used for setting up + // the authentication for pulling the container images from the private Docker + // registries + PullSecret *corev1.LocalObjectReference `json:"pullSecret,omitempty" protobuf:"bytes,2,opt,name=pullSecret"` + + // noCache if set to true indicates that the container image build must be executed with the + // --no-cache=true flag + NoCache bool `json:"noCache,omitempty" protobuf:"varint,3,opt,name=noCache"` + + // env contains additional environment variables you want to pass into a builder container. + Env []corev1.EnvVar `json:"env,omitempty" protobuf:"bytes,4,rep,name=env"` + + // forcePull describes if the builder should pull the images from registry prior to building. + ForcePull bool `json:"forcePull,omitempty" protobuf:"varint,5,opt,name=forcePull"` + + // dockerfilePath is the path of the Dockerfile that will be used to build the container image, + // relative to the root of the context (contextDir). + // Defaults to `Dockerfile` if unset. + DockerfilePath string `json:"dockerfilePath,omitempty" protobuf:"bytes,6,opt,name=dockerfilePath"` + + // buildArgs contains build arguments that will be resolved in the Dockerfile. See + // https://docs.docker.com/engine/reference/builder/#/arg for more details. + BuildArgs []corev1.EnvVar `json:"buildArgs,omitempty" protobuf:"bytes,7,rep,name=buildArgs"` + + // imageOptimizationPolicy describes what optimizations the system can use when building images + // to reduce the final size or time spent building the image. The default policy is 'None' which + // means the final build image will be equivalent to an image created by the container image build API. + // The experimental policy 'SkipLayers' will avoid commiting new layers in between each + // image step, and will fail if the Dockerfile cannot provide compatibility with the 'None' + // policy. An additional experimental policy 'SkipLayersAndWarn' is the same as + // 'SkipLayers' but simply warns if compatibility cannot be preserved. + ImageOptimizationPolicy *ImageOptimizationPolicy `json:"imageOptimizationPolicy,omitempty" protobuf:"bytes,8,opt,name=imageOptimizationPolicy,casttype=ImageOptimizationPolicy"` +} + +// SourceBuildStrategy defines input parameters specific to an Source build. +type SourceBuildStrategy struct { + // from is reference to an DockerImage, ImageStreamTag, or ImageStreamImage from which + // the container image should be pulled + From corev1.ObjectReference `json:"from" protobuf:"bytes,1,opt,name=from"` + + // pullSecret is the name of a Secret that would be used for setting up + // the authentication for pulling the container images from the private Docker + // registries + PullSecret *corev1.LocalObjectReference `json:"pullSecret,omitempty" protobuf:"bytes,2,opt,name=pullSecret"` + + // env contains additional environment variables you want to pass into a builder container. + Env []corev1.EnvVar `json:"env,omitempty" protobuf:"bytes,3,rep,name=env"` + + // scripts is the location of Source scripts + Scripts string `json:"scripts,omitempty" protobuf:"bytes,4,opt,name=scripts"` + + // incremental flag forces the Source build to do incremental builds if true. + Incremental *bool `json:"incremental,omitempty" protobuf:"varint,5,opt,name=incremental"` + + // forcePull describes if the builder should pull the images from registry prior to building. + ForcePull bool `json:"forcePull,omitempty" protobuf:"varint,6,opt,name=forcePull"` + + // deprecated json field, do not reuse: runtimeImage + // +k8s:protobuf-deprecated=runtimeImage,7 + + // deprecated json field, do not reuse: runtimeArtifacts + // +k8s:protobuf-deprecated=runtimeArtifacts,8 + +} + +// JenkinsPipelineBuildStrategy holds parameters specific to a Jenkins Pipeline build. +// Deprecated: use OpenShift Pipelines +type JenkinsPipelineBuildStrategy struct { + // JenkinsfilePath is the optional path of the Jenkinsfile that will be used to configure the pipeline + // relative to the root of the context (contextDir). If both JenkinsfilePath & Jenkinsfile are + // both not specified, this defaults to Jenkinsfile in the root of the specified contextDir. + JenkinsfilePath string `json:"jenkinsfilePath,omitempty" protobuf:"bytes,1,opt,name=jenkinsfilePath"` + + // Jenkinsfile defines the optional raw contents of a Jenkinsfile which defines a Jenkins pipeline build. + Jenkinsfile string `json:"jenkinsfile,omitempty" protobuf:"bytes,2,opt,name=jenkinsfile"` + + // env contains additional environment variables you want to pass into a build pipeline. + Env []corev1.EnvVar `json:"env,omitempty" protobuf:"bytes,3,rep,name=env"` +} + +// A BuildPostCommitSpec holds a build post commit hook specification. The hook +// executes a command in a temporary container running the build output image, +// immediately after the last layer of the image is committed and before the +// image is pushed to a registry. The command is executed with the current +// working directory ($PWD) set to the image's WORKDIR. +// +// The build will be marked as failed if the hook execution fails. It will fail +// if the script or command return a non-zero exit code, or if there is any +// other error related to starting the temporary container. +// +// There are five different ways to configure the hook. As an example, all forms +// below are equivalent and will execute `rake test --verbose`. +// +// 1. Shell script: +// +// "postCommit": { +// "script": "rake test --verbose", +// } +// +// The above is a convenient form which is equivalent to: +// +// "postCommit": { +// "command": ["/bin/sh", "-ic"], +// "args": ["rake test --verbose"] +// } +// +// 2. A command as the image entrypoint: +// +// "postCommit": { +// "commit": ["rake", "test", "--verbose"] +// } +// +// Command overrides the image entrypoint in the exec form, as documented in +// Docker: https://docs.docker.com/engine/reference/builder/#entrypoint. +// +// 3. Pass arguments to the default entrypoint: +// +// "postCommit": { +// "args": ["rake", "test", "--verbose"] +// } +// +// This form is only useful if the image entrypoint can handle arguments. +// +// 4. Shell script with arguments: +// +// "postCommit": { +// "script": "rake test $1", +// "args": ["--verbose"] +// } +// +// This form is useful if you need to pass arguments that would otherwise be +// hard to quote properly in the shell script. In the script, $0 will be +// "/bin/sh" and $1, $2, etc, are the positional arguments from Args. +// +// 5. Command with arguments: +// +// "postCommit": { +// "command": ["rake", "test"], +// "args": ["--verbose"] +// } +// +// This form is equivalent to appending the arguments to the Command slice. +// +// It is invalid to provide both Script and Command simultaneously. If none of +// the fields are specified, the hook is not executed. +type BuildPostCommitSpec struct { + // command is the command to run. It may not be specified with Script. + // This might be needed if the image doesn't have `/bin/sh`, or if you + // do not want to use a shell. In all other cases, using Script might be + // more convenient. + Command []string `json:"command,omitempty" protobuf:"bytes,1,rep,name=command"` + // args is a list of arguments that are provided to either Command, + // Script or the container image's default entrypoint. The arguments are + // placed immediately after the command to be run. + Args []string `json:"args,omitempty" protobuf:"bytes,2,rep,name=args"` + // script is a shell script to be run with `/bin/sh -ic`. It may not be + // specified with Command. Use Script when a shell script is appropriate + // to execute the post build hook, for example for running unit tests + // with `rake test`. If you need control over the image entrypoint, or + // if the image does not have `/bin/sh`, use Command and/or Args. + // The `-i` flag is needed to support CentOS and RHEL images that use + // Software Collections (SCL), in order to have the appropriate + // collections enabled in the shell. E.g., in the Ruby image, this is + // necessary to make `ruby`, `bundle` and other binaries available in + // the PATH. + Script string `json:"script,omitempty" protobuf:"bytes,3,opt,name=script"` +} + +// BuildOutput is input to a build strategy and describes the container image that the strategy +// should produce. +type BuildOutput struct { + // to defines an optional location to push the output of this build to. + // Kind must be one of 'ImageStreamTag' or 'DockerImage'. + // This value will be used to look up a container image repository to push to. + // In the case of an ImageStreamTag, the ImageStreamTag will be looked for in the namespace of + // the build unless Namespace is specified. + To *corev1.ObjectReference `json:"to,omitempty" protobuf:"bytes,1,opt,name=to"` + + // PushSecret is the name of a Secret that would be used for setting + // up the authentication for executing the Docker push to authentication + // enabled Docker Registry (or Docker Hub). + PushSecret *corev1.LocalObjectReference `json:"pushSecret,omitempty" protobuf:"bytes,2,opt,name=pushSecret"` + + // imageLabels define a list of labels that are applied to the resulting image. If there + // are multiple labels with the same name then the last one in the list is used. + ImageLabels []ImageLabel `json:"imageLabels,omitempty" protobuf:"bytes,3,rep,name=imageLabels"` +} + +// ImageLabel represents a label applied to the resulting image. +type ImageLabel struct { + // name defines the name of the label. It must have non-zero length. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + + // value defines the literal value of the label. + Value string `json:"value,omitempty" protobuf:"bytes,2,opt,name=value"` +} + +// +genclient +// +genclient:method=Instantiate,verb=create,subresource=instantiate,input=BuildRequest,result=Build +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Build configurations define a build process for new container images. There are three types of builds possible - a container image build using a Dockerfile, a Source-to-Image build that uses a specially prepared base image that accepts source code that it can make runnable, and a custom build that can run // arbitrary container images as a base and accept the build parameters. Builds run on the cluster and on completion are pushed to the container image registry specified in the "output" section. A build can be triggered via a webhook, when the base image changes, or when a user manually requests a new build be // created. +// +// Each build created by a build configuration is numbered and refers back to its parent configuration. Multiple builds can be triggered at once. Builds that do not have "output" set can be used to test code or run a verification build. +type BuildConfig struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // spec holds all the input necessary to produce a new build, and the conditions when + // to trigger them. + Spec BuildConfigSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` + // status holds any relevant information about a build config + // +optional + Status BuildConfigStatus `json:"status" protobuf:"bytes,3,opt,name=status"` +} + +// BuildConfigSpec describes when and how builds are created +type BuildConfigSpec struct { + + //triggers determine how new Builds can be launched from a BuildConfig. If + //no triggers are defined, a new build can only occur as a result of an + //explicit client build creation. + // +optional + Triggers []BuildTriggerPolicy `json:"triggers,omitempty" protobuf:"bytes,1,rep,name=triggers"` + + // RunPolicy describes how the new build created from this build + // configuration will be scheduled for execution. + // This is optional, if not specified we default to "Serial". + RunPolicy BuildRunPolicy `json:"runPolicy,omitempty" protobuf:"bytes,2,opt,name=runPolicy,casttype=BuildRunPolicy"` + + // CommonSpec is the desired build specification + CommonSpec `json:",inline" protobuf:"bytes,3,opt,name=commonSpec"` + + // successfulBuildsHistoryLimit is the number of old successful builds to retain. + // When a BuildConfig is created, the 5 most recent successful builds are retained unless this value is set. + // If removed after the BuildConfig has been created, all successful builds are retained. + SuccessfulBuildsHistoryLimit *int32 `json:"successfulBuildsHistoryLimit,omitempty" protobuf:"varint,4,opt,name=successfulBuildsHistoryLimit"` + + // failedBuildsHistoryLimit is the number of old failed builds to retain. + // When a BuildConfig is created, the 5 most recent failed builds are retained unless this value is set. + // If removed after the BuildConfig has been created, all failed builds are retained. + FailedBuildsHistoryLimit *int32 `json:"failedBuildsHistoryLimit,omitempty" protobuf:"varint,5,opt,name=failedBuildsHistoryLimit"` +} + +// BuildRunPolicy defines the behaviour of how the new builds are executed +// from the existing build configuration. +type BuildRunPolicy string + +const ( + // BuildRunPolicyParallel schedules new builds immediately after they are + // created. Builds will be executed in parallel. + BuildRunPolicyParallel BuildRunPolicy = "Parallel" + + // BuildRunPolicySerial schedules new builds to execute in a sequence as + // they are created. Every build gets queued up and will execute when the + // previous build completes. This is the default policy. + BuildRunPolicySerial BuildRunPolicy = "Serial" + + // BuildRunPolicySerialLatestOnly schedules only the latest build to execute, + // cancelling all the previously queued build. + BuildRunPolicySerialLatestOnly BuildRunPolicy = "SerialLatestOnly" +) + +// BuildConfigStatus contains current state of the build config object. +type BuildConfigStatus struct { + // lastVersion is used to inform about number of last triggered build. + LastVersion int64 `json:"lastVersion" protobuf:"varint,1,opt,name=lastVersion"` +} + +// SecretLocalReference contains information that points to the local secret being used +type SecretLocalReference struct { + // Name is the name of the resource in the same namespace being referenced + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` +} + +// WebHookTrigger is a trigger that gets invoked using a webhook type of post +type WebHookTrigger struct { + // secret used to validate requests. + // Deprecated: use SecretReference instead. + Secret string `json:"secret,omitempty" protobuf:"bytes,1,opt,name=secret"` + + // allowEnv determines whether the webhook can set environment variables; can only + // be set to true for GenericWebHook. + AllowEnv bool `json:"allowEnv,omitempty" protobuf:"varint,2,opt,name=allowEnv"` + + // secretReference is a reference to a secret in the same namespace, + // containing the value to be validated when the webhook is invoked. + // The secret being referenced must contain a key named "WebHookSecretKey", the value + // of which will be checked against the value supplied in the webhook invocation. + SecretReference *SecretLocalReference `json:"secretReference,omitempty" protobuf:"bytes,3,opt,name=secretReference"` +} + +// ImageChangeTrigger allows builds to be triggered when an ImageStream changes +type ImageChangeTrigger struct { + // lastTriggeredImageID is used internally by the ImageChangeController to save last + // used image ID for build + LastTriggeredImageID string `json:"lastTriggeredImageID,omitempty" protobuf:"bytes,1,opt,name=lastTriggeredImageID"` + + // from is a reference to an ImageStreamTag that will trigger a build when updated + // It is optional. If no From is specified, the From image from the build strategy + // will be used. Only one ImageChangeTrigger with an empty From reference is allowed in + // a build configuration. + From *corev1.ObjectReference `json:"from,omitempty" protobuf:"bytes,2,opt,name=from"` + + // paused is true if this trigger is temporarily disabled. Optional. + Paused bool `json:"paused,omitempty" protobuf:"varint,3,opt,name=paused"` +} + +// BuildTriggerPolicy describes a policy for a single trigger that results in a new Build. +type BuildTriggerPolicy struct { + // type is the type of build trigger + Type BuildTriggerType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=BuildTriggerType"` + + // github contains the parameters for a GitHub webhook type of trigger + GitHubWebHook *WebHookTrigger `json:"github,omitempty" protobuf:"bytes,2,opt,name=github"` + + // generic contains the parameters for a Generic webhook type of trigger + GenericWebHook *WebHookTrigger `json:"generic,omitempty" protobuf:"bytes,3,opt,name=generic"` + + // imageChange contains parameters for an ImageChange type of trigger + ImageChange *ImageChangeTrigger `json:"imageChange,omitempty" protobuf:"bytes,4,opt,name=imageChange"` + + // GitLabWebHook contains the parameters for a GitLab webhook type of trigger + GitLabWebHook *WebHookTrigger `json:"gitlab,omitempty" protobuf:"bytes,5,opt,name=gitlab"` + + // BitbucketWebHook contains the parameters for a Bitbucket webhook type of + // trigger + BitbucketWebHook *WebHookTrigger `json:"bitbucket,omitempty" protobuf:"bytes,6,opt,name=bitbucket"` +} + +// BuildTriggerType refers to a specific BuildTriggerPolicy implementation. +type BuildTriggerType string + +const ( + // GitHubWebHookBuildTriggerType represents a trigger that launches builds on + // GitHub webhook invocations + GitHubWebHookBuildTriggerType BuildTriggerType = "GitHub" + GitHubWebHookBuildTriggerTypeDeprecated BuildTriggerType = "github" + + // GenericWebHookBuildTriggerType represents a trigger that launches builds on + // generic webhook invocations + GenericWebHookBuildTriggerType BuildTriggerType = "Generic" + GenericWebHookBuildTriggerTypeDeprecated BuildTriggerType = "generic" + + // GitLabWebHookBuildTriggerType represents a trigger that launches builds on + // GitLab webhook invocations + GitLabWebHookBuildTriggerType BuildTriggerType = "GitLab" + + // BitbucketWebHookBuildTriggerType represents a trigger that launches builds on + // Bitbucket webhook invocations + BitbucketWebHookBuildTriggerType BuildTriggerType = "Bitbucket" + + // ImageChangeBuildTriggerType represents a trigger that launches builds on + // availability of a new version of an image + ImageChangeBuildTriggerType BuildTriggerType = "ImageChange" + ImageChangeBuildTriggerTypeDeprecated BuildTriggerType = "imageChange" + + // ConfigChangeBuildTriggerType will trigger a build on an initial build config creation + // WARNING: In the future the behavior will change to trigger a build on any config change + ConfigChangeBuildTriggerType BuildTriggerType = "ConfigChange" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// BuildList is a collection of Builds. +type BuildList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is a list of builds + Items []Build `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// BuildConfigList is a collection of BuildConfigs. +type BuildConfigList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is a list of build configs + Items []BuildConfig `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// GenericWebHookEvent is the payload expected for a generic webhook post +type GenericWebHookEvent struct { + // type is the type of source repository + // +k8s:conversion-gen=false + Type BuildSourceType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type,casttype=BuildSourceType"` + + // git is the git information if the Type is BuildSourceGit + Git *GitInfo `json:"git,omitempty" protobuf:"bytes,2,opt,name=git"` + + // env contains additional environment variables you want to pass into a builder container. + // ValueFrom is not supported. + Env []corev1.EnvVar `json:"env,omitempty" protobuf:"bytes,3,rep,name=env"` + + // DockerStrategyOptions contains additional docker-strategy specific options for the build + DockerStrategyOptions *DockerStrategyOptions `json:"dockerStrategyOptions,omitempty" protobuf:"bytes,4,opt,name=dockerStrategyOptions"` +} + +// GitInfo is the aggregated git information for a generic webhook post +type GitInfo struct { + GitBuildSource `json:",inline" protobuf:"bytes,1,opt,name=gitBuildSource"` + GitSourceRevision `json:",inline" protobuf:"bytes,2,opt,name=gitSourceRevision"` + + // Refs is a list of GitRefs for the provided repo - generally sent + // when used from a post-receive hook. This field is optional and is + // used when sending multiple refs + Refs []GitRefInfo `json:"refs" protobuf:"bytes,3,rep,name=refs"` +} + +// GitRefInfo is a single ref +type GitRefInfo struct { + GitBuildSource `json:",inline" protobuf:"bytes,1,opt,name=gitBuildSource"` + GitSourceRevision `json:",inline" protobuf:"bytes,2,opt,name=gitSourceRevision"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// BuildLog is the (unused) resource associated with the build log redirector +type BuildLog struct { + metav1.TypeMeta `json:",inline"` +} + +// DockerStrategyOptions contains extra strategy options for container image builds +type DockerStrategyOptions struct { + // Args contains any build arguments that are to be passed to Docker. See + // https://docs.docker.com/engine/reference/builder/#/arg for more details + BuildArgs []corev1.EnvVar `json:"buildArgs,omitempty" protobuf:"bytes,1,rep,name=buildArgs"` + + // noCache overrides the docker-strategy noCache option in the build config + NoCache *bool `json:"noCache,omitempty" protobuf:"varint,2,opt,name=noCache"` +} + +// SourceStrategyOptions contains extra strategy options for Source builds +type SourceStrategyOptions struct { + // incremental overrides the source-strategy incremental option in the build config + Incremental *bool `json:"incremental,omitempty" protobuf:"varint,1,opt,name=incremental"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// BuildRequest is the resource used to pass parameters to build generator +type BuildRequest struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // revision is the information from the source for a specific repo snapshot. + Revision *SourceRevision `json:"revision,omitempty" protobuf:"bytes,2,opt,name=revision"` + + // triggeredByImage is the Image that triggered this build. + TriggeredByImage *corev1.ObjectReference `json:"triggeredByImage,omitempty" protobuf:"bytes,3,opt,name=triggeredByImage"` + + // from is the reference to the ImageStreamTag that triggered the build. + From *corev1.ObjectReference `json:"from,omitempty" protobuf:"bytes,4,opt,name=from"` + + // binary indicates a request to build from a binary provided to the builder + Binary *BinaryBuildSource `json:"binary,omitempty" protobuf:"bytes,5,opt,name=binary"` + + // lastVersion (optional) is the LastVersion of the BuildConfig that was used + // to generate the build. If the BuildConfig in the generator doesn't match, a build will + // not be generated. + LastVersion *int64 `json:"lastVersion,omitempty" protobuf:"varint,6,opt,name=lastVersion"` + + // env contains additional environment variables you want to pass into a builder container. + Env []corev1.EnvVar `json:"env,omitempty" protobuf:"bytes,7,rep,name=env"` + + // triggeredBy describes which triggers started the most recent update to the + // build configuration and contains information about those triggers. + TriggeredBy []BuildTriggerCause `json:"triggeredBy,omitempty" protobuf:"bytes,8,rep,name=triggeredBy"` + + // DockerStrategyOptions contains additional docker-strategy specific options for the build + DockerStrategyOptions *DockerStrategyOptions `json:"dockerStrategyOptions,omitempty" protobuf:"bytes,9,opt,name=dockerStrategyOptions"` + + // SourceStrategyOptions contains additional source-strategy specific options for the build + SourceStrategyOptions *SourceStrategyOptions `json:"sourceStrategyOptions,omitempty" protobuf:"bytes,10,opt,name=sourceStrategyOptions"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// BinaryBuildRequestOptions are the options required to fully speficy a binary build request +type BinaryBuildRequestOptions struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // asFile determines if the binary should be created as a file within the source rather than extracted as an archive + AsFile string `json:"asFile,omitempty" protobuf:"bytes,2,opt,name=asFile"` + + // TODO: Improve map[string][]string conversion so we can handled nested objects + + // revision.commit is the value identifying a specific commit + Commit string `json:"revision.commit,omitempty" protobuf:"bytes,3,opt,name=revisionCommit"` + + // revision.message is the description of a specific commit + Message string `json:"revision.message,omitempty" protobuf:"bytes,4,opt,name=revisionMessage"` + + // revision.authorName of the source control user + AuthorName string `json:"revision.authorName,omitempty" protobuf:"bytes,5,opt,name=revisionAuthorName"` + + // revision.authorEmail of the source control user + AuthorEmail string `json:"revision.authorEmail,omitempty" protobuf:"bytes,6,opt,name=revisionAuthorEmail"` + + // revision.committerName of the source control user + CommitterName string `json:"revision.committerName,omitempty" protobuf:"bytes,7,opt,name=revisionCommitterName"` + + // revision.committerEmail of the source control user + CommitterEmail string `json:"revision.committerEmail,omitempty" protobuf:"bytes,8,opt,name=revisionCommitterEmail"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// BuildLogOptions is the REST options for a build log +type BuildLogOptions struct { + metav1.TypeMeta `json:",inline"` + + // cointainer for which to stream logs. Defaults to only container if there is one container in the pod. + Container string `json:"container,omitempty" protobuf:"bytes,1,opt,name=container"` + // follow if true indicates that the build log should be streamed until + // the build terminates. + Follow bool `json:"follow,omitempty" protobuf:"varint,2,opt,name=follow"` + // previous returns previous build logs. Defaults to false. + Previous bool `json:"previous,omitempty" protobuf:"varint,3,opt,name=previous"` + // sinceSeconds is a relative time in seconds before the current time from which to show logs. If this value + // precedes the time a pod was started, only logs since the pod start will be returned. + // If this value is in the future, no logs will be returned. + // Only one of sinceSeconds or sinceTime may be specified. + SinceSeconds *int64 `json:"sinceSeconds,omitempty" protobuf:"varint,4,opt,name=sinceSeconds"` + // sinceTime is an RFC3339 timestamp from which to show logs. If this value + // precedes the time a pod was started, only logs since the pod start will be returned. + // If this value is in the future, no logs will be returned. + // Only one of sinceSeconds or sinceTime may be specified. + SinceTime *metav1.Time `json:"sinceTime,omitempty" protobuf:"bytes,5,opt,name=sinceTime"` + // timestamps, If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line + // of log output. Defaults to false. + Timestamps bool `json:"timestamps,omitempty" protobuf:"varint,6,opt,name=timestamps"` + // tailLines, If set, is the number of lines from the end of the logs to show. If not specified, + // logs are shown from the creation of the container or sinceSeconds or sinceTime + TailLines *int64 `json:"tailLines,omitempty" protobuf:"varint,7,opt,name=tailLines"` + // limitBytes, If set, is the number of bytes to read from the server before terminating the + // log output. This may not display a complete final line of logging, and may return + // slightly more or slightly less than the specified limit. + LimitBytes *int64 `json:"limitBytes,omitempty" protobuf:"varint,8,opt,name=limitBytes"` + + // noWait if true causes the call to return immediately even if the build + // is not available yet. Otherwise the server will wait until the build has started. + // TODO: Fix the tag to 'noWait' in v2 + NoWait bool `json:"nowait,omitempty" protobuf:"varint,9,opt,name=nowait"` + + // version of the build for which to view logs. + Version *int64 `json:"version,omitempty" protobuf:"varint,10,opt,name=version"` + + // insecureSkipTLSVerifyBackend indicates that the apiserver should not confirm the validity of the + // serving certificate of the backend it is connecting to. This will make the HTTPS connection between the apiserver + // and the backend insecure. This means the apiserver cannot verify the log data it is receiving came from the real + // kubelet. If the kubelet is configured to verify the apiserver's TLS credentials, it does not mean the + // connection to the real kubelet is vulnerable to a man in the middle attack (e.g. an attacker could not intercept + // the actual log data coming from the real kubelet). + // +optional + InsecureSkipTLSVerifyBackend bool `json:"insecureSkipTLSVerifyBackend,omitempty" protobuf:"varint,11,opt,name=insecureSkipTLSVerifyBackend"` +} + +// SecretSpec specifies a secret to be included in a build pod and its corresponding mount point +type SecretSpec struct { + // secretSource is a reference to the secret + SecretSource corev1.LocalObjectReference `json:"secretSource" protobuf:"bytes,1,opt,name=secretSource"` + + // mountPath is the path at which to mount the secret + MountPath string `json:"mountPath" protobuf:"bytes,2,opt,name=mountPath"` +} diff --git a/vendor/github.com/openshift/api/build/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/build/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..d7e48fae269e2 --- /dev/null +++ b/vendor/github.com/openshift/api/build/v1/zz_generated.deepcopy.go @@ -0,0 +1,1480 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BinaryBuildRequestOptions) DeepCopyInto(out *BinaryBuildRequestOptions) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BinaryBuildRequestOptions. +func (in *BinaryBuildRequestOptions) DeepCopy() *BinaryBuildRequestOptions { + if in == nil { + return nil + } + out := new(BinaryBuildRequestOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *BinaryBuildRequestOptions) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BinaryBuildSource) DeepCopyInto(out *BinaryBuildSource) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BinaryBuildSource. +func (in *BinaryBuildSource) DeepCopy() *BinaryBuildSource { + if in == nil { + return nil + } + out := new(BinaryBuildSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BitbucketWebHookCause) DeepCopyInto(out *BitbucketWebHookCause) { + *out = *in + in.CommonWebHookCause.DeepCopyInto(&out.CommonWebHookCause) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BitbucketWebHookCause. +func (in *BitbucketWebHookCause) DeepCopy() *BitbucketWebHookCause { + if in == nil { + return nil + } + out := new(BitbucketWebHookCause) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Build) DeepCopyInto(out *Build) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Build. +func (in *Build) DeepCopy() *Build { + if in == nil { + return nil + } + out := new(Build) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Build) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildCondition) DeepCopyInto(out *BuildCondition) { + *out = *in + in.LastUpdateTime.DeepCopyInto(&out.LastUpdateTime) + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildCondition. +func (in *BuildCondition) DeepCopy() *BuildCondition { + if in == nil { + return nil + } + out := new(BuildCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildConfig) DeepCopyInto(out *BuildConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildConfig. +func (in *BuildConfig) DeepCopy() *BuildConfig { + if in == nil { + return nil + } + out := new(BuildConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *BuildConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildConfigList) DeepCopyInto(out *BuildConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]BuildConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildConfigList. +func (in *BuildConfigList) DeepCopy() *BuildConfigList { + if in == nil { + return nil + } + out := new(BuildConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *BuildConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildConfigSpec) DeepCopyInto(out *BuildConfigSpec) { + *out = *in + if in.Triggers != nil { + in, out := &in.Triggers, &out.Triggers + *out = make([]BuildTriggerPolicy, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + in.CommonSpec.DeepCopyInto(&out.CommonSpec) + if in.SuccessfulBuildsHistoryLimit != nil { + in, out := &in.SuccessfulBuildsHistoryLimit, &out.SuccessfulBuildsHistoryLimit + *out = new(int32) + **out = **in + } + if in.FailedBuildsHistoryLimit != nil { + in, out := &in.FailedBuildsHistoryLimit, &out.FailedBuildsHistoryLimit + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildConfigSpec. +func (in *BuildConfigSpec) DeepCopy() *BuildConfigSpec { + if in == nil { + return nil + } + out := new(BuildConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildConfigStatus) DeepCopyInto(out *BuildConfigStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildConfigStatus. +func (in *BuildConfigStatus) DeepCopy() *BuildConfigStatus { + if in == nil { + return nil + } + out := new(BuildConfigStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildList) DeepCopyInto(out *BuildList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Build, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildList. +func (in *BuildList) DeepCopy() *BuildList { + if in == nil { + return nil + } + out := new(BuildList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *BuildList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildLog) DeepCopyInto(out *BuildLog) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildLog. +func (in *BuildLog) DeepCopy() *BuildLog { + if in == nil { + return nil + } + out := new(BuildLog) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *BuildLog) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildLogOptions) DeepCopyInto(out *BuildLogOptions) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.SinceSeconds != nil { + in, out := &in.SinceSeconds, &out.SinceSeconds + *out = new(int64) + **out = **in + } + if in.SinceTime != nil { + in, out := &in.SinceTime, &out.SinceTime + *out = (*in).DeepCopy() + } + if in.TailLines != nil { + in, out := &in.TailLines, &out.TailLines + *out = new(int64) + **out = **in + } + if in.LimitBytes != nil { + in, out := &in.LimitBytes, &out.LimitBytes + *out = new(int64) + **out = **in + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(int64) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildLogOptions. +func (in *BuildLogOptions) DeepCopy() *BuildLogOptions { + if in == nil { + return nil + } + out := new(BuildLogOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *BuildLogOptions) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildOutput) DeepCopyInto(out *BuildOutput) { + *out = *in + if in.To != nil { + in, out := &in.To, &out.To + *out = new(corev1.ObjectReference) + **out = **in + } + if in.PushSecret != nil { + in, out := &in.PushSecret, &out.PushSecret + *out = new(corev1.LocalObjectReference) + **out = **in + } + if in.ImageLabels != nil { + in, out := &in.ImageLabels, &out.ImageLabels + *out = make([]ImageLabel, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildOutput. +func (in *BuildOutput) DeepCopy() *BuildOutput { + if in == nil { + return nil + } + out := new(BuildOutput) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildPostCommitSpec) DeepCopyInto(out *BuildPostCommitSpec) { + *out = *in + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildPostCommitSpec. +func (in *BuildPostCommitSpec) DeepCopy() *BuildPostCommitSpec { + if in == nil { + return nil + } + out := new(BuildPostCommitSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildRequest) DeepCopyInto(out *BuildRequest) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Revision != nil { + in, out := &in.Revision, &out.Revision + *out = new(SourceRevision) + (*in).DeepCopyInto(*out) + } + if in.TriggeredByImage != nil { + in, out := &in.TriggeredByImage, &out.TriggeredByImage + *out = new(corev1.ObjectReference) + **out = **in + } + if in.From != nil { + in, out := &in.From, &out.From + *out = new(corev1.ObjectReference) + **out = **in + } + if in.Binary != nil { + in, out := &in.Binary, &out.Binary + *out = new(BinaryBuildSource) + **out = **in + } + if in.LastVersion != nil { + in, out := &in.LastVersion, &out.LastVersion + *out = new(int64) + **out = **in + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]corev1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.TriggeredBy != nil { + in, out := &in.TriggeredBy, &out.TriggeredBy + *out = make([]BuildTriggerCause, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.DockerStrategyOptions != nil { + in, out := &in.DockerStrategyOptions, &out.DockerStrategyOptions + *out = new(DockerStrategyOptions) + (*in).DeepCopyInto(*out) + } + if in.SourceStrategyOptions != nil { + in, out := &in.SourceStrategyOptions, &out.SourceStrategyOptions + *out = new(SourceStrategyOptions) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildRequest. +func (in *BuildRequest) DeepCopy() *BuildRequest { + if in == nil { + return nil + } + out := new(BuildRequest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *BuildRequest) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildSource) DeepCopyInto(out *BuildSource) { + *out = *in + if in.Binary != nil { + in, out := &in.Binary, &out.Binary + *out = new(BinaryBuildSource) + **out = **in + } + if in.Dockerfile != nil { + in, out := &in.Dockerfile, &out.Dockerfile + *out = new(string) + **out = **in + } + if in.Git != nil { + in, out := &in.Git, &out.Git + *out = new(GitBuildSource) + (*in).DeepCopyInto(*out) + } + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ImageSource, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SourceSecret != nil { + in, out := &in.SourceSecret, &out.SourceSecret + *out = new(corev1.LocalObjectReference) + **out = **in + } + if in.Secrets != nil { + in, out := &in.Secrets, &out.Secrets + *out = make([]SecretBuildSource, len(*in)) + copy(*out, *in) + } + if in.ConfigMaps != nil { + in, out := &in.ConfigMaps, &out.ConfigMaps + *out = make([]ConfigMapBuildSource, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildSource. +func (in *BuildSource) DeepCopy() *BuildSource { + if in == nil { + return nil + } + out := new(BuildSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildSpec) DeepCopyInto(out *BuildSpec) { + *out = *in + in.CommonSpec.DeepCopyInto(&out.CommonSpec) + if in.TriggeredBy != nil { + in, out := &in.TriggeredBy, &out.TriggeredBy + *out = make([]BuildTriggerCause, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildSpec. +func (in *BuildSpec) DeepCopy() *BuildSpec { + if in == nil { + return nil + } + out := new(BuildSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildStatus) DeepCopyInto(out *BuildStatus) { + *out = *in + if in.StartTimestamp != nil { + in, out := &in.StartTimestamp, &out.StartTimestamp + *out = (*in).DeepCopy() + } + if in.CompletionTimestamp != nil { + in, out := &in.CompletionTimestamp, &out.CompletionTimestamp + *out = (*in).DeepCopy() + } + if in.Config != nil { + in, out := &in.Config, &out.Config + *out = new(corev1.ObjectReference) + **out = **in + } + in.Output.DeepCopyInto(&out.Output) + if in.Stages != nil { + in, out := &in.Stages, &out.Stages + *out = make([]StageInfo, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]BuildCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildStatus. +func (in *BuildStatus) DeepCopy() *BuildStatus { + if in == nil { + return nil + } + out := new(BuildStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildStatusOutput) DeepCopyInto(out *BuildStatusOutput) { + *out = *in + if in.To != nil { + in, out := &in.To, &out.To + *out = new(BuildStatusOutputTo) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildStatusOutput. +func (in *BuildStatusOutput) DeepCopy() *BuildStatusOutput { + if in == nil { + return nil + } + out := new(BuildStatusOutput) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildStatusOutputTo) DeepCopyInto(out *BuildStatusOutputTo) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildStatusOutputTo. +func (in *BuildStatusOutputTo) DeepCopy() *BuildStatusOutputTo { + if in == nil { + return nil + } + out := new(BuildStatusOutputTo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildStrategy) DeepCopyInto(out *BuildStrategy) { + *out = *in + if in.DockerStrategy != nil { + in, out := &in.DockerStrategy, &out.DockerStrategy + *out = new(DockerBuildStrategy) + (*in).DeepCopyInto(*out) + } + if in.SourceStrategy != nil { + in, out := &in.SourceStrategy, &out.SourceStrategy + *out = new(SourceBuildStrategy) + (*in).DeepCopyInto(*out) + } + if in.CustomStrategy != nil { + in, out := &in.CustomStrategy, &out.CustomStrategy + *out = new(CustomBuildStrategy) + (*in).DeepCopyInto(*out) + } + if in.JenkinsPipelineStrategy != nil { + in, out := &in.JenkinsPipelineStrategy, &out.JenkinsPipelineStrategy + *out = new(JenkinsPipelineBuildStrategy) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildStrategy. +func (in *BuildStrategy) DeepCopy() *BuildStrategy { + if in == nil { + return nil + } + out := new(BuildStrategy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildTriggerCause) DeepCopyInto(out *BuildTriggerCause) { + *out = *in + if in.GenericWebHook != nil { + in, out := &in.GenericWebHook, &out.GenericWebHook + *out = new(GenericWebHookCause) + (*in).DeepCopyInto(*out) + } + if in.GitHubWebHook != nil { + in, out := &in.GitHubWebHook, &out.GitHubWebHook + *out = new(GitHubWebHookCause) + (*in).DeepCopyInto(*out) + } + if in.ImageChangeBuild != nil { + in, out := &in.ImageChangeBuild, &out.ImageChangeBuild + *out = new(ImageChangeCause) + (*in).DeepCopyInto(*out) + } + if in.GitLabWebHook != nil { + in, out := &in.GitLabWebHook, &out.GitLabWebHook + *out = new(GitLabWebHookCause) + (*in).DeepCopyInto(*out) + } + if in.BitbucketWebHook != nil { + in, out := &in.BitbucketWebHook, &out.BitbucketWebHook + *out = new(BitbucketWebHookCause) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildTriggerCause. +func (in *BuildTriggerCause) DeepCopy() *BuildTriggerCause { + if in == nil { + return nil + } + out := new(BuildTriggerCause) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildTriggerPolicy) DeepCopyInto(out *BuildTriggerPolicy) { + *out = *in + if in.GitHubWebHook != nil { + in, out := &in.GitHubWebHook, &out.GitHubWebHook + *out = new(WebHookTrigger) + (*in).DeepCopyInto(*out) + } + if in.GenericWebHook != nil { + in, out := &in.GenericWebHook, &out.GenericWebHook + *out = new(WebHookTrigger) + (*in).DeepCopyInto(*out) + } + if in.ImageChange != nil { + in, out := &in.ImageChange, &out.ImageChange + *out = new(ImageChangeTrigger) + (*in).DeepCopyInto(*out) + } + if in.GitLabWebHook != nil { + in, out := &in.GitLabWebHook, &out.GitLabWebHook + *out = new(WebHookTrigger) + (*in).DeepCopyInto(*out) + } + if in.BitbucketWebHook != nil { + in, out := &in.BitbucketWebHook, &out.BitbucketWebHook + *out = new(WebHookTrigger) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildTriggerPolicy. +func (in *BuildTriggerPolicy) DeepCopy() *BuildTriggerPolicy { + if in == nil { + return nil + } + out := new(BuildTriggerPolicy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CommonSpec) DeepCopyInto(out *CommonSpec) { + *out = *in + in.Source.DeepCopyInto(&out.Source) + if in.Revision != nil { + in, out := &in.Revision, &out.Revision + *out = new(SourceRevision) + (*in).DeepCopyInto(*out) + } + in.Strategy.DeepCopyInto(&out.Strategy) + in.Output.DeepCopyInto(&out.Output) + in.Resources.DeepCopyInto(&out.Resources) + in.PostCommit.DeepCopyInto(&out.PostCommit) + if in.CompletionDeadlineSeconds != nil { + in, out := &in.CompletionDeadlineSeconds, &out.CompletionDeadlineSeconds + *out = new(int64) + **out = **in + } + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = make(OptionalNodeSelector, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CommonSpec. +func (in *CommonSpec) DeepCopy() *CommonSpec { + if in == nil { + return nil + } + out := new(CommonSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CommonWebHookCause) DeepCopyInto(out *CommonWebHookCause) { + *out = *in + if in.Revision != nil { + in, out := &in.Revision, &out.Revision + *out = new(SourceRevision) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CommonWebHookCause. +func (in *CommonWebHookCause) DeepCopy() *CommonWebHookCause { + if in == nil { + return nil + } + out := new(CommonWebHookCause) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConfigMapBuildSource) DeepCopyInto(out *ConfigMapBuildSource) { + *out = *in + out.ConfigMap = in.ConfigMap + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigMapBuildSource. +func (in *ConfigMapBuildSource) DeepCopy() *ConfigMapBuildSource { + if in == nil { + return nil + } + out := new(ConfigMapBuildSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomBuildStrategy) DeepCopyInto(out *CustomBuildStrategy) { + *out = *in + out.From = in.From + if in.PullSecret != nil { + in, out := &in.PullSecret, &out.PullSecret + *out = new(corev1.LocalObjectReference) + **out = **in + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]corev1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Secrets != nil { + in, out := &in.Secrets, &out.Secrets + *out = make([]SecretSpec, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomBuildStrategy. +func (in *CustomBuildStrategy) DeepCopy() *CustomBuildStrategy { + if in == nil { + return nil + } + out := new(CustomBuildStrategy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DockerBuildStrategy) DeepCopyInto(out *DockerBuildStrategy) { + *out = *in + if in.From != nil { + in, out := &in.From, &out.From + *out = new(corev1.ObjectReference) + **out = **in + } + if in.PullSecret != nil { + in, out := &in.PullSecret, &out.PullSecret + *out = new(corev1.LocalObjectReference) + **out = **in + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]corev1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.BuildArgs != nil { + in, out := &in.BuildArgs, &out.BuildArgs + *out = make([]corev1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ImageOptimizationPolicy != nil { + in, out := &in.ImageOptimizationPolicy, &out.ImageOptimizationPolicy + *out = new(ImageOptimizationPolicy) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DockerBuildStrategy. +func (in *DockerBuildStrategy) DeepCopy() *DockerBuildStrategy { + if in == nil { + return nil + } + out := new(DockerBuildStrategy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DockerStrategyOptions) DeepCopyInto(out *DockerStrategyOptions) { + *out = *in + if in.BuildArgs != nil { + in, out := &in.BuildArgs, &out.BuildArgs + *out = make([]corev1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.NoCache != nil { + in, out := &in.NoCache, &out.NoCache + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DockerStrategyOptions. +func (in *DockerStrategyOptions) DeepCopy() *DockerStrategyOptions { + if in == nil { + return nil + } + out := new(DockerStrategyOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GenericWebHookCause) DeepCopyInto(out *GenericWebHookCause) { + *out = *in + if in.Revision != nil { + in, out := &in.Revision, &out.Revision + *out = new(SourceRevision) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GenericWebHookCause. +func (in *GenericWebHookCause) DeepCopy() *GenericWebHookCause { + if in == nil { + return nil + } + out := new(GenericWebHookCause) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GenericWebHookEvent) DeepCopyInto(out *GenericWebHookEvent) { + *out = *in + if in.Git != nil { + in, out := &in.Git, &out.Git + *out = new(GitInfo) + (*in).DeepCopyInto(*out) + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]corev1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.DockerStrategyOptions != nil { + in, out := &in.DockerStrategyOptions, &out.DockerStrategyOptions + *out = new(DockerStrategyOptions) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GenericWebHookEvent. +func (in *GenericWebHookEvent) DeepCopy() *GenericWebHookEvent { + if in == nil { + return nil + } + out := new(GenericWebHookEvent) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GitBuildSource) DeepCopyInto(out *GitBuildSource) { + *out = *in + in.ProxyConfig.DeepCopyInto(&out.ProxyConfig) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitBuildSource. +func (in *GitBuildSource) DeepCopy() *GitBuildSource { + if in == nil { + return nil + } + out := new(GitBuildSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GitHubWebHookCause) DeepCopyInto(out *GitHubWebHookCause) { + *out = *in + if in.Revision != nil { + in, out := &in.Revision, &out.Revision + *out = new(SourceRevision) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitHubWebHookCause. +func (in *GitHubWebHookCause) DeepCopy() *GitHubWebHookCause { + if in == nil { + return nil + } + out := new(GitHubWebHookCause) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GitInfo) DeepCopyInto(out *GitInfo) { + *out = *in + in.GitBuildSource.DeepCopyInto(&out.GitBuildSource) + out.GitSourceRevision = in.GitSourceRevision + if in.Refs != nil { + in, out := &in.Refs, &out.Refs + *out = make([]GitRefInfo, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitInfo. +func (in *GitInfo) DeepCopy() *GitInfo { + if in == nil { + return nil + } + out := new(GitInfo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GitLabWebHookCause) DeepCopyInto(out *GitLabWebHookCause) { + *out = *in + in.CommonWebHookCause.DeepCopyInto(&out.CommonWebHookCause) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitLabWebHookCause. +func (in *GitLabWebHookCause) DeepCopy() *GitLabWebHookCause { + if in == nil { + return nil + } + out := new(GitLabWebHookCause) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GitRefInfo) DeepCopyInto(out *GitRefInfo) { + *out = *in + in.GitBuildSource.DeepCopyInto(&out.GitBuildSource) + out.GitSourceRevision = in.GitSourceRevision + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitRefInfo. +func (in *GitRefInfo) DeepCopy() *GitRefInfo { + if in == nil { + return nil + } + out := new(GitRefInfo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GitSourceRevision) DeepCopyInto(out *GitSourceRevision) { + *out = *in + out.Author = in.Author + out.Committer = in.Committer + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitSourceRevision. +func (in *GitSourceRevision) DeepCopy() *GitSourceRevision { + if in == nil { + return nil + } + out := new(GitSourceRevision) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageChangeCause) DeepCopyInto(out *ImageChangeCause) { + *out = *in + if in.FromRef != nil { + in, out := &in.FromRef, &out.FromRef + *out = new(corev1.ObjectReference) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageChangeCause. +func (in *ImageChangeCause) DeepCopy() *ImageChangeCause { + if in == nil { + return nil + } + out := new(ImageChangeCause) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageChangeTrigger) DeepCopyInto(out *ImageChangeTrigger) { + *out = *in + if in.From != nil { + in, out := &in.From, &out.From + *out = new(corev1.ObjectReference) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageChangeTrigger. +func (in *ImageChangeTrigger) DeepCopy() *ImageChangeTrigger { + if in == nil { + return nil + } + out := new(ImageChangeTrigger) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageLabel) DeepCopyInto(out *ImageLabel) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageLabel. +func (in *ImageLabel) DeepCopy() *ImageLabel { + if in == nil { + return nil + } + out := new(ImageLabel) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageSource) DeepCopyInto(out *ImageSource) { + *out = *in + out.From = in.From + if in.As != nil { + in, out := &in.As, &out.As + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Paths != nil { + in, out := &in.Paths, &out.Paths + *out = make([]ImageSourcePath, len(*in)) + copy(*out, *in) + } + if in.PullSecret != nil { + in, out := &in.PullSecret, &out.PullSecret + *out = new(corev1.LocalObjectReference) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageSource. +func (in *ImageSource) DeepCopy() *ImageSource { + if in == nil { + return nil + } + out := new(ImageSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageSourcePath) DeepCopyInto(out *ImageSourcePath) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageSourcePath. +func (in *ImageSourcePath) DeepCopy() *ImageSourcePath { + if in == nil { + return nil + } + out := new(ImageSourcePath) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *JenkinsPipelineBuildStrategy) DeepCopyInto(out *JenkinsPipelineBuildStrategy) { + *out = *in + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]corev1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new JenkinsPipelineBuildStrategy. +func (in *JenkinsPipelineBuildStrategy) DeepCopy() *JenkinsPipelineBuildStrategy { + if in == nil { + return nil + } + out := new(JenkinsPipelineBuildStrategy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in OptionalNodeSelector) DeepCopyInto(out *OptionalNodeSelector) { + { + in := &in + *out = make(OptionalNodeSelector, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OptionalNodeSelector. +func (in OptionalNodeSelector) DeepCopy() OptionalNodeSelector { + if in == nil { + return nil + } + out := new(OptionalNodeSelector) + in.DeepCopyInto(out) + return *out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProxyConfig) DeepCopyInto(out *ProxyConfig) { + *out = *in + if in.HTTPProxy != nil { + in, out := &in.HTTPProxy, &out.HTTPProxy + *out = new(string) + **out = **in + } + if in.HTTPSProxy != nil { + in, out := &in.HTTPSProxy, &out.HTTPSProxy + *out = new(string) + **out = **in + } + if in.NoProxy != nil { + in, out := &in.NoProxy, &out.NoProxy + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProxyConfig. +func (in *ProxyConfig) DeepCopy() *ProxyConfig { + if in == nil { + return nil + } + out := new(ProxyConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SecretBuildSource) DeepCopyInto(out *SecretBuildSource) { + *out = *in + out.Secret = in.Secret + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretBuildSource. +func (in *SecretBuildSource) DeepCopy() *SecretBuildSource { + if in == nil { + return nil + } + out := new(SecretBuildSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SecretLocalReference) DeepCopyInto(out *SecretLocalReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretLocalReference. +func (in *SecretLocalReference) DeepCopy() *SecretLocalReference { + if in == nil { + return nil + } + out := new(SecretLocalReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SecretSpec) DeepCopyInto(out *SecretSpec) { + *out = *in + out.SecretSource = in.SecretSource + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretSpec. +func (in *SecretSpec) DeepCopy() *SecretSpec { + if in == nil { + return nil + } + out := new(SecretSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SourceBuildStrategy) DeepCopyInto(out *SourceBuildStrategy) { + *out = *in + out.From = in.From + if in.PullSecret != nil { + in, out := &in.PullSecret, &out.PullSecret + *out = new(corev1.LocalObjectReference) + **out = **in + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]corev1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Incremental != nil { + in, out := &in.Incremental, &out.Incremental + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SourceBuildStrategy. +func (in *SourceBuildStrategy) DeepCopy() *SourceBuildStrategy { + if in == nil { + return nil + } + out := new(SourceBuildStrategy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SourceControlUser) DeepCopyInto(out *SourceControlUser) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SourceControlUser. +func (in *SourceControlUser) DeepCopy() *SourceControlUser { + if in == nil { + return nil + } + out := new(SourceControlUser) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SourceRevision) DeepCopyInto(out *SourceRevision) { + *out = *in + if in.Git != nil { + in, out := &in.Git, &out.Git + *out = new(GitSourceRevision) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SourceRevision. +func (in *SourceRevision) DeepCopy() *SourceRevision { + if in == nil { + return nil + } + out := new(SourceRevision) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SourceStrategyOptions) DeepCopyInto(out *SourceStrategyOptions) { + *out = *in + if in.Incremental != nil { + in, out := &in.Incremental, &out.Incremental + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SourceStrategyOptions. +func (in *SourceStrategyOptions) DeepCopy() *SourceStrategyOptions { + if in == nil { + return nil + } + out := new(SourceStrategyOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StageInfo) DeepCopyInto(out *StageInfo) { + *out = *in + in.StartTime.DeepCopyInto(&out.StartTime) + if in.Steps != nil { + in, out := &in.Steps, &out.Steps + *out = make([]StepInfo, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StageInfo. +func (in *StageInfo) DeepCopy() *StageInfo { + if in == nil { + return nil + } + out := new(StageInfo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StepInfo) DeepCopyInto(out *StepInfo) { + *out = *in + in.StartTime.DeepCopyInto(&out.StartTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StepInfo. +func (in *StepInfo) DeepCopy() *StepInfo { + if in == nil { + return nil + } + out := new(StepInfo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WebHookTrigger) DeepCopyInto(out *WebHookTrigger) { + *out = *in + if in.SecretReference != nil { + in, out := &in.SecretReference, &out.SecretReference + *out = new(SecretLocalReference) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebHookTrigger. +func (in *WebHookTrigger) DeepCopy() *WebHookTrigger { + if in == nil { + return nil + } + out := new(WebHookTrigger) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/build/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/build/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000000..f54e07222b5ce --- /dev/null +++ b/vendor/github.com/openshift/api/build/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,629 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_BinaryBuildRequestOptions = map[string]string{ + "": "BinaryBuildRequestOptions are the options required to fully speficy a binary build request", + "asFile": "asFile determines if the binary should be created as a file within the source rather than extracted as an archive", + "revision.commit": "revision.commit is the value identifying a specific commit", + "revision.message": "revision.message is the description of a specific commit", + "revision.authorName": "revision.authorName of the source control user", + "revision.authorEmail": "revision.authorEmail of the source control user", + "revision.committerName": "revision.committerName of the source control user", + "revision.committerEmail": "revision.committerEmail of the source control user", +} + +func (BinaryBuildRequestOptions) SwaggerDoc() map[string]string { + return map_BinaryBuildRequestOptions +} + +var map_BinaryBuildSource = map[string]string{ + "": "BinaryBuildSource describes a binary file to be used for the Docker and Source build strategies, where the file will be extracted and used as the build source.", + "asFile": "asFile indicates that the provided binary input should be considered a single file within the build input. For example, specifying \"webapp.war\" would place the provided binary as `/webapp.war` for the builder. If left empty, the Docker and Source build strategies assume this file is a zip, tar, or tar.gz file and extract it as the source. The custom strategy receives this binary as standard input. This filename may not contain slashes or be '..' or '.'.", +} + +func (BinaryBuildSource) SwaggerDoc() map[string]string { + return map_BinaryBuildSource +} + +var map_BitbucketWebHookCause = map[string]string{ + "": "BitbucketWebHookCause has information about a Bitbucket webhook that triggered a build.", +} + +func (BitbucketWebHookCause) SwaggerDoc() map[string]string { + return map_BitbucketWebHookCause +} + +var map_Build = map[string]string{ + "": "Build encapsulates the inputs needed to produce a new deployable image, as well as the status of the execution and a reference to the Pod which executed the build.", + "spec": "spec is all the inputs used to execute the build.", + "status": "status is the current status of the build.", +} + +func (Build) SwaggerDoc() map[string]string { + return map_Build +} + +var map_BuildCondition = map[string]string{ + "": "BuildCondition describes the state of a build at a certain point.", + "type": "Type of build condition.", + "status": "Status of the condition, one of True, False, Unknown.", + "lastUpdateTime": "The last time this condition was updated.", + "lastTransitionTime": "The last time the condition transitioned from one status to another.", + "reason": "The reason for the condition's last transition.", + "message": "A human readable message indicating details about the transition.", +} + +func (BuildCondition) SwaggerDoc() map[string]string { + return map_BuildCondition +} + +var map_BuildConfig = map[string]string{ + "": "Build configurations define a build process for new container images. There are three types of builds possible - a container image build using a Dockerfile, a Source-to-Image build that uses a specially prepared base image that accepts source code that it can make runnable, and a custom build that can run // arbitrary container images as a base and accept the build parameters. Builds run on the cluster and on completion are pushed to the container image registry specified in the \"output\" section. A build can be triggered via a webhook, when the base image changes, or when a user manually requests a new build be // created.\n\nEach build created by a build configuration is numbered and refers back to its parent configuration. Multiple builds can be triggered at once. Builds that do not have \"output\" set can be used to test code or run a verification build.", + "spec": "spec holds all the input necessary to produce a new build, and the conditions when to trigger them.", + "status": "status holds any relevant information about a build config", +} + +func (BuildConfig) SwaggerDoc() map[string]string { + return map_BuildConfig +} + +var map_BuildConfigList = map[string]string{ + "": "BuildConfigList is a collection of BuildConfigs.", + "items": "items is a list of build configs", +} + +func (BuildConfigList) SwaggerDoc() map[string]string { + return map_BuildConfigList +} + +var map_BuildConfigSpec = map[string]string{ + "": "BuildConfigSpec describes when and how builds are created", + "triggers": "triggers determine how new Builds can be launched from a BuildConfig. If no triggers are defined, a new build can only occur as a result of an explicit client build creation.", + "runPolicy": "RunPolicy describes how the new build created from this build configuration will be scheduled for execution. This is optional, if not specified we default to \"Serial\".", + "successfulBuildsHistoryLimit": "successfulBuildsHistoryLimit is the number of old successful builds to retain. When a BuildConfig is created, the 5 most recent successful builds are retained unless this value is set. If removed after the BuildConfig has been created, all successful builds are retained.", + "failedBuildsHistoryLimit": "failedBuildsHistoryLimit is the number of old failed builds to retain. When a BuildConfig is created, the 5 most recent failed builds are retained unless this value is set. If removed after the BuildConfig has been created, all failed builds are retained.", +} + +func (BuildConfigSpec) SwaggerDoc() map[string]string { + return map_BuildConfigSpec +} + +var map_BuildConfigStatus = map[string]string{ + "": "BuildConfigStatus contains current state of the build config object.", + "lastVersion": "lastVersion is used to inform about number of last triggered build.", +} + +func (BuildConfigStatus) SwaggerDoc() map[string]string { + return map_BuildConfigStatus +} + +var map_BuildList = map[string]string{ + "": "BuildList is a collection of Builds.", + "items": "items is a list of builds", +} + +func (BuildList) SwaggerDoc() map[string]string { + return map_BuildList +} + +var map_BuildLog = map[string]string{ + "": "BuildLog is the (unused) resource associated with the build log redirector", +} + +func (BuildLog) SwaggerDoc() map[string]string { + return map_BuildLog +} + +var map_BuildLogOptions = map[string]string{ + "": "BuildLogOptions is the REST options for a build log", + "container": "cointainer for which to stream logs. Defaults to only container if there is one container in the pod.", + "follow": "follow if true indicates that the build log should be streamed until the build terminates.", + "previous": "previous returns previous build logs. Defaults to false.", + "sinceSeconds": "sinceSeconds is a relative time in seconds before the current time from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.", + "sinceTime": "sinceTime is an RFC3339 timestamp from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.", + "timestamps": "timestamps, If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false.", + "tailLines": "tailLines, If set, is the number of lines from the end of the logs to show. If not specified, logs are shown from the creation of the container or sinceSeconds or sinceTime", + "limitBytes": "limitBytes, If set, is the number of bytes to read from the server before terminating the log output. This may not display a complete final line of logging, and may return slightly more or slightly less than the specified limit.", + "nowait": "noWait if true causes the call to return immediately even if the build is not available yet. Otherwise the server will wait until the build has started.", + "version": "version of the build for which to view logs.", + "insecureSkipTLSVerifyBackend": "insecureSkipTLSVerifyBackend indicates that the apiserver should not confirm the validity of the serving certificate of the backend it is connecting to. This will make the HTTPS connection between the apiserver and the backend insecure. This means the apiserver cannot verify the log data it is receiving came from the real kubelet. If the kubelet is configured to verify the apiserver's TLS credentials, it does not mean the connection to the real kubelet is vulnerable to a man in the middle attack (e.g. an attacker could not intercept the actual log data coming from the real kubelet).", +} + +func (BuildLogOptions) SwaggerDoc() map[string]string { + return map_BuildLogOptions +} + +var map_BuildOutput = map[string]string{ + "": "BuildOutput is input to a build strategy and describes the container image that the strategy should produce.", + "to": "to defines an optional location to push the output of this build to. Kind must be one of 'ImageStreamTag' or 'DockerImage'. This value will be used to look up a container image repository to push to. In the case of an ImageStreamTag, the ImageStreamTag will be looked for in the namespace of the build unless Namespace is specified.", + "pushSecret": "PushSecret is the name of a Secret that would be used for setting up the authentication for executing the Docker push to authentication enabled Docker Registry (or Docker Hub).", + "imageLabels": "imageLabels define a list of labels that are applied to the resulting image. If there are multiple labels with the same name then the last one in the list is used.", +} + +func (BuildOutput) SwaggerDoc() map[string]string { + return map_BuildOutput +} + +var map_BuildPostCommitSpec = map[string]string{ + "": "A BuildPostCommitSpec holds a build post commit hook specification. The hook executes a command in a temporary container running the build output image, immediately after the last layer of the image is committed and before the image is pushed to a registry. The command is executed with the current working directory ($PWD) set to the image's WORKDIR.\n\nThe build will be marked as failed if the hook execution fails. It will fail if the script or command return a non-zero exit code, or if there is any other error related to starting the temporary container.\n\nThere are five different ways to configure the hook. As an example, all forms below are equivalent and will execute `rake test --verbose`.\n\n1. Shell script:\n\n \"postCommit\": {\n \"script\": \"rake test --verbose\",\n }\n\n The above is a convenient form which is equivalent to:\n\n \"postCommit\": {\n \"command\": [\"/bin/sh\", \"-ic\"],\n \"args\": [\"rake test --verbose\"]\n }\n\n2. A command as the image entrypoint:\n\n \"postCommit\": {\n \"commit\": [\"rake\", \"test\", \"--verbose\"]\n }\n\n Command overrides the image entrypoint in the exec form, as documented in\n Docker: https://docs.docker.com/engine/reference/builder/#entrypoint.\n\n3. Pass arguments to the default entrypoint:\n\n \"postCommit\": {\n\t\t \"args\": [\"rake\", \"test\", \"--verbose\"]\n\t }\n\n This form is only useful if the image entrypoint can handle arguments.\n\n4. Shell script with arguments:\n\n \"postCommit\": {\n \"script\": \"rake test $1\",\n \"args\": [\"--verbose\"]\n }\n\n This form is useful if you need to pass arguments that would otherwise be\n hard to quote properly in the shell script. In the script, $0 will be\n \"/bin/sh\" and $1, $2, etc, are the positional arguments from Args.\n\n5. Command with arguments:\n\n \"postCommit\": {\n \"command\": [\"rake\", \"test\"],\n \"args\": [\"--verbose\"]\n }\n\n This form is equivalent to appending the arguments to the Command slice.\n\nIt is invalid to provide both Script and Command simultaneously. If none of the fields are specified, the hook is not executed.", + "command": "command is the command to run. It may not be specified with Script. This might be needed if the image doesn't have `/bin/sh`, or if you do not want to use a shell. In all other cases, using Script might be more convenient.", + "args": "args is a list of arguments that are provided to either Command, Script or the container image's default entrypoint. The arguments are placed immediately after the command to be run.", + "script": "script is a shell script to be run with `/bin/sh -ic`. It may not be specified with Command. Use Script when a shell script is appropriate to execute the post build hook, for example for running unit tests with `rake test`. If you need control over the image entrypoint, or if the image does not have `/bin/sh`, use Command and/or Args. The `-i` flag is needed to support CentOS and RHEL images that use Software Collections (SCL), in order to have the appropriate collections enabled in the shell. E.g., in the Ruby image, this is necessary to make `ruby`, `bundle` and other binaries available in the PATH.", +} + +func (BuildPostCommitSpec) SwaggerDoc() map[string]string { + return map_BuildPostCommitSpec +} + +var map_BuildRequest = map[string]string{ + "": "BuildRequest is the resource used to pass parameters to build generator", + "revision": "revision is the information from the source for a specific repo snapshot.", + "triggeredByImage": "triggeredByImage is the Image that triggered this build.", + "from": "from is the reference to the ImageStreamTag that triggered the build.", + "binary": "binary indicates a request to build from a binary provided to the builder", + "lastVersion": "lastVersion (optional) is the LastVersion of the BuildConfig that was used to generate the build. If the BuildConfig in the generator doesn't match, a build will not be generated.", + "env": "env contains additional environment variables you want to pass into a builder container.", + "triggeredBy": "triggeredBy describes which triggers started the most recent update to the build configuration and contains information about those triggers.", + "dockerStrategyOptions": "DockerStrategyOptions contains additional docker-strategy specific options for the build", + "sourceStrategyOptions": "SourceStrategyOptions contains additional source-strategy specific options for the build", +} + +func (BuildRequest) SwaggerDoc() map[string]string { + return map_BuildRequest +} + +var map_BuildSource = map[string]string{ + "": "BuildSource is the SCM used for the build.", + "type": "type of build input to accept", + "binary": "binary builds accept a binary as their input. The binary is generally assumed to be a tar, gzipped tar, or zip file depending on the strategy. For container image builds, this is the build context and an optional Dockerfile may be specified to override any Dockerfile in the build context. For Source builds, this is assumed to be an archive as described above. For Source and container image builds, if binary.asFile is set the build will receive a directory with a single file. contextDir may be used when an archive is provided. Custom builds will receive this binary as input on STDIN.", + "dockerfile": "dockerfile is the raw contents of a Dockerfile which should be built. When this option is specified, the FROM may be modified based on your strategy base image and additional ENV stanzas from your strategy environment will be added after the FROM, but before the rest of your Dockerfile stanzas. The Dockerfile source type may be used with other options like git - in those cases the Git repo will have any innate Dockerfile replaced in the context dir.", + "git": "git contains optional information about git build source", + "images": "images describes a set of images to be used to provide source for the build", + "contextDir": "contextDir specifies the sub-directory where the source code for the application exists. This allows to have buildable sources in directory other than root of repository.", + "sourceSecret": "sourceSecret is the name of a Secret that would be used for setting up the authentication for cloning private repository. The secret contains valid credentials for remote repository, where the data's key represent the authentication method to be used and value is the base64 encoded credentials. Supported auth methods are: ssh-privatekey.", + "secrets": "secrets represents a list of secrets and their destinations that will be used only for the build.", + "configMaps": "configMaps represents a list of configMaps and their destinations that will be used for the build.", +} + +func (BuildSource) SwaggerDoc() map[string]string { + return map_BuildSource +} + +var map_BuildSpec = map[string]string{ + "": "BuildSpec has the information to represent a build and also additional information about a build", + "triggeredBy": "triggeredBy describes which triggers started the most recent update to the build configuration and contains information about those triggers.", +} + +func (BuildSpec) SwaggerDoc() map[string]string { + return map_BuildSpec +} + +var map_BuildStatus = map[string]string{ + "": "BuildStatus contains the status of a build", + "phase": "phase is the point in the build lifecycle. Possible values are \"New\", \"Pending\", \"Running\", \"Complete\", \"Failed\", \"Error\", and \"Cancelled\".", + "cancelled": "cancelled describes if a cancel event was triggered for the build.", + "reason": "reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.", + "message": "message is a human-readable message indicating details about why the build has this status.", + "startTimestamp": "startTimestamp is a timestamp representing the server time when this Build started running in a Pod. It is represented in RFC3339 form and is in UTC.", + "completionTimestamp": "completionTimestamp is a timestamp representing the server time when this Build was finished, whether that build failed or succeeded. It reflects the time at which the Pod running the Build terminated. It is represented in RFC3339 form and is in UTC.", + "duration": "duration contains time.Duration object describing build time.", + "outputDockerImageReference": "outputDockerImageReference contains a reference to the container image that will be built by this build. Its value is computed from Build.Spec.Output.To, and should include the registry address, so that it can be used to push and pull the image.", + "config": "config is an ObjectReference to the BuildConfig this Build is based on.", + "output": "output describes the container image the build has produced.", + "stages": "stages contains details about each stage that occurs during the build including start time, duration (in milliseconds), and the steps that occured within each stage.", + "logSnippet": "logSnippet is the last few lines of the build log. This value is only set for builds that failed.", + "conditions": "Conditions represents the latest available observations of a build's current state.", +} + +func (BuildStatus) SwaggerDoc() map[string]string { + return map_BuildStatus +} + +var map_BuildStatusOutput = map[string]string{ + "": "BuildStatusOutput contains the status of the built image.", + "to": "to describes the status of the built image being pushed to a registry.", +} + +func (BuildStatusOutput) SwaggerDoc() map[string]string { + return map_BuildStatusOutput +} + +var map_BuildStatusOutputTo = map[string]string{ + "": "BuildStatusOutputTo describes the status of the built image with regards to image registry to which it was supposed to be pushed.", + "imageDigest": "imageDigest is the digest of the built container image. The digest uniquely identifies the image in the registry to which it was pushed.\n\nPlease note that this field may not always be set even if the push completes successfully - e.g. when the registry returns no digest or returns it in a format that the builder doesn't understand.", +} + +func (BuildStatusOutputTo) SwaggerDoc() map[string]string { + return map_BuildStatusOutputTo +} + +var map_BuildStrategy = map[string]string{ + "": "BuildStrategy contains the details of how to perform a build.", + "type": "type is the kind of build strategy.", + "dockerStrategy": "dockerStrategy holds the parameters to the container image build strategy.", + "sourceStrategy": "sourceStrategy holds the parameters to the Source build strategy.", + "customStrategy": "customStrategy holds the parameters to the Custom build strategy", + "jenkinsPipelineStrategy": "JenkinsPipelineStrategy holds the parameters to the Jenkins Pipeline build strategy. Deprecated: use OpenShift Pipelines", +} + +func (BuildStrategy) SwaggerDoc() map[string]string { + return map_BuildStrategy +} + +var map_BuildTriggerCause = map[string]string{ + "": "BuildTriggerCause holds information about a triggered build. It is used for displaying build trigger data for each build and build configuration in oc describe. It is also used to describe which triggers led to the most recent update in the build configuration.", + "message": "message is used to store a human readable message for why the build was triggered. E.g.: \"Manually triggered by user\", \"Configuration change\",etc.", + "genericWebHook": "genericWebHook holds data about a builds generic webhook trigger.", + "githubWebHook": "gitHubWebHook represents data for a GitHub webhook that fired a specific build.", + "imageChangeBuild": "imageChangeBuild stores information about an imagechange event that triggered a new build.", + "gitlabWebHook": "GitLabWebHook represents data for a GitLab webhook that fired a specific build.", + "bitbucketWebHook": "BitbucketWebHook represents data for a Bitbucket webhook that fired a specific build.", +} + +func (BuildTriggerCause) SwaggerDoc() map[string]string { + return map_BuildTriggerCause +} + +var map_BuildTriggerPolicy = map[string]string{ + "": "BuildTriggerPolicy describes a policy for a single trigger that results in a new Build.", + "type": "type is the type of build trigger", + "github": "github contains the parameters for a GitHub webhook type of trigger", + "generic": "generic contains the parameters for a Generic webhook type of trigger", + "imageChange": "imageChange contains parameters for an ImageChange type of trigger", + "gitlab": "GitLabWebHook contains the parameters for a GitLab webhook type of trigger", + "bitbucket": "BitbucketWebHook contains the parameters for a Bitbucket webhook type of trigger", +} + +func (BuildTriggerPolicy) SwaggerDoc() map[string]string { + return map_BuildTriggerPolicy +} + +var map_CommonSpec = map[string]string{ + "": "CommonSpec encapsulates all the inputs necessary to represent a build.", + "serviceAccount": "serviceAccount is the name of the ServiceAccount to use to run the pod created by this build. The pod will be allowed to use secrets referenced by the ServiceAccount", + "source": "source describes the SCM in use.", + "revision": "revision is the information from the source for a specific repo snapshot. This is optional.", + "strategy": "strategy defines how to perform a build.", + "output": "output describes the container image the Strategy should produce.", + "resources": "resources computes resource requirements to execute the build.", + "postCommit": "postCommit is a build hook executed after the build output image is committed, before it is pushed to a registry.", + "completionDeadlineSeconds": "completionDeadlineSeconds is an optional duration in seconds, counted from the time when a build pod gets scheduled in the system, that the build may be active on a node before the system actively tries to terminate the build; value must be positive integer", + "nodeSelector": "nodeSelector is a selector which must be true for the build pod to fit on a node If nil, it can be overridden by default build nodeselector values for the cluster. If set to an empty map or a map with any values, default build nodeselector values are ignored.", +} + +func (CommonSpec) SwaggerDoc() map[string]string { + return map_CommonSpec +} + +var map_CommonWebHookCause = map[string]string{ + "": "CommonWebHookCause factors out the identical format of these webhook causes into struct so we can share it in the specific causes; it is too late for GitHub and Generic but we can leverage this pattern with GitLab and Bitbucket.", + "revision": "Revision is the git source revision information of the trigger.", + "secret": "Secret is the obfuscated webhook secret that triggered a build.", +} + +func (CommonWebHookCause) SwaggerDoc() map[string]string { + return map_CommonWebHookCause +} + +var map_ConfigMapBuildSource = map[string]string{ + "": "ConfigMapBuildSource describes a configmap and its destination directory that will be used only at the build time. The content of the configmap referenced here will be copied into the destination directory instead of mounting.", + "configMap": "configMap is a reference to an existing configmap that you want to use in your build.", + "destinationDir": "destinationDir is the directory where the files from the configmap should be available for the build time. For the Source build strategy, these will be injected into a container where the assemble script runs. For the container image build strategy, these will be copied into the build directory, where the Dockerfile is located, so users can ADD or COPY them during container image build.", +} + +func (ConfigMapBuildSource) SwaggerDoc() map[string]string { + return map_ConfigMapBuildSource +} + +var map_CustomBuildStrategy = map[string]string{ + "": "CustomBuildStrategy defines input parameters specific to Custom build.", + "from": "from is reference to an DockerImage, ImageStreamTag, or ImageStreamImage from which the container image should be pulled", + "pullSecret": "pullSecret is the name of a Secret that would be used for setting up the authentication for pulling the container images from the private Docker registries", + "env": "env contains additional environment variables you want to pass into a builder container.", + "exposeDockerSocket": "exposeDockerSocket will allow running Docker commands (and build container images) from inside the container.", + "forcePull": "forcePull describes if the controller should configure the build pod to always pull the images for the builder or only pull if it is not present locally", + "secrets": "secrets is a list of additional secrets that will be included in the build pod", + "buildAPIVersion": "buildAPIVersion is the requested API version for the Build object serialized and passed to the custom builder", +} + +func (CustomBuildStrategy) SwaggerDoc() map[string]string { + return map_CustomBuildStrategy +} + +var map_DockerBuildStrategy = map[string]string{ + "": "DockerBuildStrategy defines input parameters specific to container image build.", + "from": "from is a reference to an DockerImage, ImageStreamTag, or ImageStreamImage which overrides the FROM image in the Dockerfile for the build. If the Dockerfile uses multi-stage builds, this will replace the image in the last FROM directive of the file.", + "pullSecret": "pullSecret is the name of a Secret that would be used for setting up the authentication for pulling the container images from the private Docker registries", + "noCache": "noCache if set to true indicates that the container image build must be executed with the --no-cache=true flag", + "env": "env contains additional environment variables you want to pass into a builder container.", + "forcePull": "forcePull describes if the builder should pull the images from registry prior to building.", + "dockerfilePath": "dockerfilePath is the path of the Dockerfile that will be used to build the container image, relative to the root of the context (contextDir). Defaults to `Dockerfile` if unset.", + "buildArgs": "buildArgs contains build arguments that will be resolved in the Dockerfile. See https://docs.docker.com/engine/reference/builder/#/arg for more details.", + "imageOptimizationPolicy": "imageOptimizationPolicy describes what optimizations the system can use when building images to reduce the final size or time spent building the image. The default policy is 'None' which means the final build image will be equivalent to an image created by the container image build API. The experimental policy 'SkipLayers' will avoid commiting new layers in between each image step, and will fail if the Dockerfile cannot provide compatibility with the 'None' policy. An additional experimental policy 'SkipLayersAndWarn' is the same as 'SkipLayers' but simply warns if compatibility cannot be preserved.", +} + +func (DockerBuildStrategy) SwaggerDoc() map[string]string { + return map_DockerBuildStrategy +} + +var map_DockerStrategyOptions = map[string]string{ + "": "DockerStrategyOptions contains extra strategy options for container image builds", + "buildArgs": "Args contains any build arguments that are to be passed to Docker. See https://docs.docker.com/engine/reference/builder/#/arg for more details", + "noCache": "noCache overrides the docker-strategy noCache option in the build config", +} + +func (DockerStrategyOptions) SwaggerDoc() map[string]string { + return map_DockerStrategyOptions +} + +var map_GenericWebHookCause = map[string]string{ + "": "GenericWebHookCause holds information about a generic WebHook that triggered a build.", + "revision": "revision is an optional field that stores the git source revision information of the generic webhook trigger when it is available.", + "secret": "secret is the obfuscated webhook secret that triggered a build.", +} + +func (GenericWebHookCause) SwaggerDoc() map[string]string { + return map_GenericWebHookCause +} + +var map_GenericWebHookEvent = map[string]string{ + "": "GenericWebHookEvent is the payload expected for a generic webhook post", + "type": "type is the type of source repository", + "git": "git is the git information if the Type is BuildSourceGit", + "env": "env contains additional environment variables you want to pass into a builder container. ValueFrom is not supported.", + "dockerStrategyOptions": "DockerStrategyOptions contains additional docker-strategy specific options for the build", +} + +func (GenericWebHookEvent) SwaggerDoc() map[string]string { + return map_GenericWebHookEvent +} + +var map_GitBuildSource = map[string]string{ + "": "GitBuildSource defines the parameters of a Git SCM", + "uri": "uri points to the source that will be built. The structure of the source will depend on the type of build to run", + "ref": "ref is the branch/tag/ref to build.", +} + +func (GitBuildSource) SwaggerDoc() map[string]string { + return map_GitBuildSource +} + +var map_GitHubWebHookCause = map[string]string{ + "": "GitHubWebHookCause has information about a GitHub webhook that triggered a build.", + "revision": "revision is the git revision information of the trigger.", + "secret": "secret is the obfuscated webhook secret that triggered a build.", +} + +func (GitHubWebHookCause) SwaggerDoc() map[string]string { + return map_GitHubWebHookCause +} + +var map_GitInfo = map[string]string{ + "": "GitInfo is the aggregated git information for a generic webhook post", + "refs": "Refs is a list of GitRefs for the provided repo - generally sent when used from a post-receive hook. This field is optional and is used when sending multiple refs", +} + +func (GitInfo) SwaggerDoc() map[string]string { + return map_GitInfo +} + +var map_GitLabWebHookCause = map[string]string{ + "": "GitLabWebHookCause has information about a GitLab webhook that triggered a build.", +} + +func (GitLabWebHookCause) SwaggerDoc() map[string]string { + return map_GitLabWebHookCause +} + +var map_GitRefInfo = map[string]string{ + "": "GitRefInfo is a single ref", +} + +func (GitRefInfo) SwaggerDoc() map[string]string { + return map_GitRefInfo +} + +var map_GitSourceRevision = map[string]string{ + "": "GitSourceRevision is the commit information from a git source for a build", + "commit": "commit is the commit hash identifying a specific commit", + "author": "author is the author of a specific commit", + "committer": "committer is the committer of a specific commit", + "message": "message is the description of a specific commit", +} + +func (GitSourceRevision) SwaggerDoc() map[string]string { + return map_GitSourceRevision +} + +var map_ImageChangeCause = map[string]string{ + "": "ImageChangeCause contains information about the image that triggered a build", + "imageID": "imageID is the ID of the image that triggered a a new build.", + "fromRef": "fromRef contains detailed information about an image that triggered a build.", +} + +func (ImageChangeCause) SwaggerDoc() map[string]string { + return map_ImageChangeCause +} + +var map_ImageChangeTrigger = map[string]string{ + "": "ImageChangeTrigger allows builds to be triggered when an ImageStream changes", + "lastTriggeredImageID": "lastTriggeredImageID is used internally by the ImageChangeController to save last used image ID for build", + "from": "from is a reference to an ImageStreamTag that will trigger a build when updated It is optional. If no From is specified, the From image from the build strategy will be used. Only one ImageChangeTrigger with an empty From reference is allowed in a build configuration.", + "paused": "paused is true if this trigger is temporarily disabled. Optional.", +} + +func (ImageChangeTrigger) SwaggerDoc() map[string]string { + return map_ImageChangeTrigger +} + +var map_ImageLabel = map[string]string{ + "": "ImageLabel represents a label applied to the resulting image.", + "name": "name defines the name of the label. It must have non-zero length.", + "value": "value defines the literal value of the label.", +} + +func (ImageLabel) SwaggerDoc() map[string]string { + return map_ImageLabel +} + +var map_ImageSource = map[string]string{ + "": "ImageSource is used to describe build source that will be extracted from an image or used during a multi stage build. A reference of type ImageStreamTag, ImageStreamImage or DockerImage may be used. A pull secret can be specified to pull the image from an external registry or override the default service account secret if pulling from the internal registry. Image sources can either be used to extract content from an image and place it into the build context along with the repository source, or used directly during a multi-stage container image build to allow content to be copied without overwriting the contents of the repository source (see the 'paths' and 'as' fields).", + "from": "from is a reference to an ImageStreamTag, ImageStreamImage, or DockerImage to copy source from.", + "as": "A list of image names that this source will be used in place of during a multi-stage container image build. For instance, a Dockerfile that uses \"COPY --from=nginx:latest\" will first check for an image source that has \"nginx:latest\" in this field before attempting to pull directly. If the Dockerfile does not reference an image source it is ignored. This field and paths may both be set, in which case the contents will be used twice.", + "paths": "paths is a list of source and destination paths to copy from the image. This content will be copied into the build context prior to starting the build. If no paths are set, the build context will not be altered.", + "pullSecret": "pullSecret is a reference to a secret to be used to pull the image from a registry If the image is pulled from the OpenShift registry, this field does not need to be set.", +} + +func (ImageSource) SwaggerDoc() map[string]string { + return map_ImageSource +} + +var map_ImageSourcePath = map[string]string{ + "": "ImageSourcePath describes a path to be copied from a source image and its destination within the build directory.", + "sourcePath": "sourcePath is the absolute path of the file or directory inside the image to copy to the build directory. If the source path ends in /. then the content of the directory will be copied, but the directory itself will not be created at the destination.", + "destinationDir": "destinationDir is the relative directory within the build directory where files copied from the image are placed.", +} + +func (ImageSourcePath) SwaggerDoc() map[string]string { + return map_ImageSourcePath +} + +var map_JenkinsPipelineBuildStrategy = map[string]string{ + "": "JenkinsPipelineBuildStrategy holds parameters specific to a Jenkins Pipeline build. Deprecated: use OpenShift Pipelines", + "jenkinsfilePath": "JenkinsfilePath is the optional path of the Jenkinsfile that will be used to configure the pipeline relative to the root of the context (contextDir). If both JenkinsfilePath & Jenkinsfile are both not specified, this defaults to Jenkinsfile in the root of the specified contextDir.", + "jenkinsfile": "Jenkinsfile defines the optional raw contents of a Jenkinsfile which defines a Jenkins pipeline build.", + "env": "env contains additional environment variables you want to pass into a build pipeline.", +} + +func (JenkinsPipelineBuildStrategy) SwaggerDoc() map[string]string { + return map_JenkinsPipelineBuildStrategy +} + +var map_ProxyConfig = map[string]string{ + "": "ProxyConfig defines what proxies to use for an operation", + "httpProxy": "httpProxy is a proxy used to reach the git repository over http", + "httpsProxy": "httpsProxy is a proxy used to reach the git repository over https", + "noProxy": "noProxy is the list of domains for which the proxy should not be used", +} + +func (ProxyConfig) SwaggerDoc() map[string]string { + return map_ProxyConfig +} + +var map_SecretBuildSource = map[string]string{ + "": "SecretBuildSource describes a secret and its destination directory that will be used only at the build time. The content of the secret referenced here will be copied into the destination directory instead of mounting.", + "secret": "secret is a reference to an existing secret that you want to use in your build.", + "destinationDir": "destinationDir is the directory where the files from the secret should be available for the build time. For the Source build strategy, these will be injected into a container where the assemble script runs. Later, when the script finishes, all files injected will be truncated to zero length. For the container image build strategy, these will be copied into the build directory, where the Dockerfile is located, so users can ADD or COPY them during container image build.", +} + +func (SecretBuildSource) SwaggerDoc() map[string]string { + return map_SecretBuildSource +} + +var map_SecretLocalReference = map[string]string{ + "": "SecretLocalReference contains information that points to the local secret being used", + "name": "Name is the name of the resource in the same namespace being referenced", +} + +func (SecretLocalReference) SwaggerDoc() map[string]string { + return map_SecretLocalReference +} + +var map_SecretSpec = map[string]string{ + "": "SecretSpec specifies a secret to be included in a build pod and its corresponding mount point", + "secretSource": "secretSource is a reference to the secret", + "mountPath": "mountPath is the path at which to mount the secret", +} + +func (SecretSpec) SwaggerDoc() map[string]string { + return map_SecretSpec +} + +var map_SourceBuildStrategy = map[string]string{ + "": "SourceBuildStrategy defines input parameters specific to an Source build.", + "from": "from is reference to an DockerImage, ImageStreamTag, or ImageStreamImage from which the container image should be pulled", + "pullSecret": "pullSecret is the name of a Secret that would be used for setting up the authentication for pulling the container images from the private Docker registries", + "env": "env contains additional environment variables you want to pass into a builder container.", + "scripts": "scripts is the location of Source scripts", + "incremental": "incremental flag forces the Source build to do incremental builds if true.", + "forcePull": "forcePull describes if the builder should pull the images from registry prior to building.", +} + +func (SourceBuildStrategy) SwaggerDoc() map[string]string { + return map_SourceBuildStrategy +} + +var map_SourceControlUser = map[string]string{ + "": "SourceControlUser defines the identity of a user of source control", + "name": "name of the source control user", + "email": "email of the source control user", +} + +func (SourceControlUser) SwaggerDoc() map[string]string { + return map_SourceControlUser +} + +var map_SourceRevision = map[string]string{ + "": "SourceRevision is the revision or commit information from the source for the build", + "type": "type of the build source, may be one of 'Source', 'Dockerfile', 'Binary', or 'Images'", + "git": "Git contains information about git-based build source", +} + +func (SourceRevision) SwaggerDoc() map[string]string { + return map_SourceRevision +} + +var map_SourceStrategyOptions = map[string]string{ + "": "SourceStrategyOptions contains extra strategy options for Source builds", + "incremental": "incremental overrides the source-strategy incremental option in the build config", +} + +func (SourceStrategyOptions) SwaggerDoc() map[string]string { + return map_SourceStrategyOptions +} + +var map_StageInfo = map[string]string{ + "": "StageInfo contains details about a build stage.", + "name": "name is a unique identifier for each build stage that occurs.", + "startTime": "startTime is a timestamp representing the server time when this Stage started. It is represented in RFC3339 form and is in UTC.", + "durationMilliseconds": "durationMilliseconds identifies how long the stage took to complete in milliseconds. Note: the duration of a stage can exceed the sum of the duration of the steps within the stage as not all actions are accounted for in explicit build steps.", + "steps": "steps contains details about each step that occurs during a build stage including start time and duration in milliseconds.", +} + +func (StageInfo) SwaggerDoc() map[string]string { + return map_StageInfo +} + +var map_StepInfo = map[string]string{ + "": "StepInfo contains details about a build step.", + "name": "name is a unique identifier for each build step.", + "startTime": "startTime is a timestamp representing the server time when this Step started. it is represented in RFC3339 form and is in UTC.", + "durationMilliseconds": "durationMilliseconds identifies how long the step took to complete in milliseconds.", +} + +func (StepInfo) SwaggerDoc() map[string]string { + return map_StepInfo +} + +var map_WebHookTrigger = map[string]string{ + "": "WebHookTrigger is a trigger that gets invoked using a webhook type of post", + "secret": "secret used to validate requests. Deprecated: use SecretReference instead.", + "allowEnv": "allowEnv determines whether the webhook can set environment variables; can only be set to true for GenericWebHook.", + "secretReference": "secretReference is a reference to a secret in the same namespace, containing the value to be validated when the webhook is invoked. The secret being referenced must contain a key named \"WebHookSecretKey\", the value of which will be checked against the value supplied in the webhook invocation.", +} + +func (WebHookTrigger) SwaggerDoc() map[string]string { + return map_WebHookTrigger +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/config/v1/0000_00_cluster-version-operator_01_clusteroperator.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_00_cluster-version-operator_01_clusteroperator.crd.yaml new file mode 100644 index 0000000000000..9e79054c69210 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_00_cluster-version-operator_01_clusteroperator.crd.yaml @@ -0,0 +1,168 @@ +kind: CustomResourceDefinition +apiVersion: apiextensions.k8s.io/v1beta1 +metadata: + name: clusteroperators.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + additionalPrinterColumns: + - JSONPath: .status.versions[?(@.name=="operator")].version + description: The version the operator is at. + name: Version + type: string + - JSONPath: .status.conditions[?(@.type=="Available")].status + description: Whether the operator is running and stable. + name: Available + type: string + - JSONPath: .status.conditions[?(@.type=="Progressing")].status + description: Whether the operator is processing changes. + name: Progressing + type: string + - JSONPath: .status.conditions[?(@.type=="Degraded")].status + description: Whether the operator is degraded. + name: Degraded + type: string + - JSONPath: .status.conditions[?(@.type=="Available")].lastTransitionTime + description: The time the operator's Available status last changed. + name: Since + type: date + group: config.openshift.io + names: + kind: ClusterOperator + listKind: ClusterOperatorList + plural: clusteroperators + singular: clusteroperator + shortNames: + - co + preserveUnknownFields: false + scope: Cluster + subresources: + status: {} + version: v1 + versions: + - name: v1 + served: true + storage: true + validation: + openAPIV3Schema: + description: ClusterOperator is the Custom Resource object which holds the current + state of an operator. This object is used by operators to convey their state + to the rest of the cluster. + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds configuration that could apply to any operator. + type: object + status: + description: status holds the information about the state of an operator. It + is consistent with status information across the Kubernetes ecosystem. + type: object + properties: + conditions: + description: conditions describes the state of the operator's managed + and monitored components. + type: array + items: + description: ClusterOperatorStatusCondition represents the state of + the operator's managed and monitored components. + type: object + required: + - lastTransitionTime + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the time of the last update + to the current status property. + type: string + format: date-time + message: + description: message provides additional information about the + current condition. This is only to be consumed by humans. It + may contain Line Feed characters (U+000A), which should be rendered + as new lines. + type: string + reason: + description: reason is the CamelCase reason for the condition's + current status. + type: string + status: + description: status of the condition, one of True, False, Unknown. + type: string + type: + description: type specifies the aspect reported by this condition. + type: string + extension: + description: extension contains any additional status information specific + to the operator which owns this status object. + type: object + nullable: true + x-kubernetes-preserve-unknown-fields: true + relatedObjects: + description: 'relatedObjects is a list of objects that are "interesting" + or related to this operator. Common uses are: 1. the detailed resource + driving the operator 2. operator namespaces 3. operand namespaces' + type: array + items: + description: ObjectReference contains enough information to let you + inspect or modify the referred object. + type: object + required: + - group + - name + - resource + properties: + group: + description: group of the referent. + type: string + name: + description: name of the referent. + type: string + namespace: + description: namespace of the referent. + type: string + resource: + description: resource of the referent. + type: string + versions: + description: versions is a slice of operator and operand version tuples. Operators + which manage multiple operands will have multiple operand entries + in the array. Available operators must report the version of the + operator itself with the name "operator". An operator reports a new + "operator" version when it has rolled out the new version to all of + its operands. + type: array + items: + type: object + required: + - name + - version + properties: + name: + description: name is the name of the particular operand this version + is for. It usually matches container images, not operators. + type: string + version: + description: version indicates which version of a particular operand + is currently being managed. It must always match the Available + operand. If 1.0.0 is Available, then this must indicate 1.0.0 + even if the operator is trying to rollout 1.1.0 + type: string + versions: + - name: v1 + served: true + storage: true diff --git a/vendor/github.com/openshift/api/config/v1/0000_00_cluster-version-operator_01_clusterversion.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_00_cluster-version-operator_01_clusterversion.crd.yaml new file mode 100644 index 0000000000000..1acda61afc30d --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_00_cluster-version-operator_01_clusterversion.crd.yaml @@ -0,0 +1,334 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: clusterversions.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + versions: + - name: v1 + served: true + storage: true + scope: Cluster + subresources: + status: {} + names: + plural: clusterversions + singular: clusterversion + kind: ClusterVersion + preserveUnknownFields: false + additionalPrinterColumns: + - name: Version + type: string + JSONPath: .status.history[?(@.state=="Completed")].version + - name: Available + type: string + JSONPath: .status.conditions[?(@.type=="Available")].status + - name: Progressing + type: string + JSONPath: .status.conditions[?(@.type=="Progressing")].status + - name: Since + type: date + JSONPath: .status.conditions[?(@.type=="Progressing")].lastTransitionTime + - name: Status + type: string + JSONPath: .status.conditions[?(@.type=="Progressing")].message + validation: + openAPIV3Schema: + description: ClusterVersion is the configuration for the ClusterVersionOperator. + This is where parameters related to automatic updates can be set. + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec is the desired state of the cluster version - the operator + will work to ensure that the desired version is applied to the cluster. + type: object + required: + - clusterID + properties: + channel: + description: channel is an identifier for explicitly requesting that + a non-default set of updates be applied to this cluster. The default + channel will be contain stable updates that are appropriate for production + clusters. + type: string + clusterID: + description: clusterID uniquely identifies this cluster. This is expected + to be an RFC4122 UUID value (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + in hexadecimal values). This is a required field. + type: string + desiredUpdate: + description: "desiredUpdate is an optional field that indicates the + desired value of the cluster version. Setting this value will trigger + an upgrade (if the current version does not match the desired version). + The set of recommended update values is listed as part of available + updates in status, and setting values outside that range may cause + the upgrade to fail. You may specify the version field without setting + image if an update exists with that version in the availableUpdates + or history. \n If an upgrade fails the operator will halt and report + status about the failing component. Setting the desired update value + back to the previous version will cause a rollback to be attempted. + Not all rollbacks will succeed." + type: object + properties: + force: + description: "force allows an administrator to update to an image + that has failed verification, does not appear in the availableUpdates + list, or otherwise would be blocked by normal protections on update. + This option should only be used when the authenticity of the provided + image has been verified out of band because the provided image + will run with full administrative access to the cluster. Do not + use this flag with images that comes from unknown or potentially + malicious sources. \n This flag does not override other forms + of consistency checking that are required before a new update + is deployed." + type: boolean + image: + description: image is a container image location that contains the + update. When this field is part of spec, image is optional if + version is specified and the availableUpdates field contains a + matching version. + type: string + version: + description: version is a semantic versioning identifying the update + version. When this field is part of spec, version is optional + if image is specified. + type: string + overrides: + description: overrides is list of overides for components that are managed + by cluster version operator. Marking a component unmanaged will prevent + the operator from creating or updating the object. + type: array + items: + description: ComponentOverride allows overriding cluster version operator's + behavior for a component. + type: object + required: + - group + - kind + - name + - namespace + - unmanaged + properties: + group: + description: group identifies the API group that the kind is in. + type: string + kind: + description: kind indentifies which object to override. + type: string + name: + description: name is the component's name. + type: string + namespace: + description: namespace is the component's namespace. If the resource + is cluster scoped, the namespace should be empty. + type: string + unmanaged: + description: 'unmanaged controls if cluster version operator should + stop managing the resources in this cluster. Default: false' + type: boolean + upstream: + description: upstream may be used to specify the preferred update server. + By default it will use the appropriate update server for the cluster + and region. + type: string + status: + description: status contains information about the available updates and + any in-progress updates. + type: object + required: + - availableUpdates + - desired + - observedGeneration + - versionHash + properties: + availableUpdates: + description: availableUpdates contains the list of updates that are + appropriate for this cluster. This list may be empty if no updates + are recommended, if the update service is unavailable, or if an invalid + channel has been specified. + type: array + items: + description: Release represents an OpenShift release image and associated + metadata. + type: object + properties: + channels: + description: channels is the set of Cincinnati channels to which + the release currently belongs. + type: array + items: + type: string + image: + description: image is a container image location that contains + the update. When this field is part of spec, image is optional + if version is specified and the availableUpdates field contains + a matching version. + type: string + url: + description: url contains information about this release. This + URL is set by the 'url' metadata property on a release or the + metadata returned by the update API and should be displayed + as a link in user interfaces. The URL field may not be set for + test or nightly releases. + type: string + version: + description: version is a semantic versioning identifying the + update version. When this field is part of spec, version is + optional if image is specified. + type: string + nullable: true + conditions: + description: conditions provides information about the cluster version. + The condition "Available" is set to true if the desiredUpdate has + been reached. The condition "Progressing" is set to true if an update + is being applied. The condition "Degraded" is set to true if an update + is currently blocked by a temporary or permanent error. Conditions + are only valid for the current desiredUpdate when metadata.generation + is equal to status.generation. + type: array + items: + description: ClusterOperatorStatusCondition represents the state of + the operator's managed and monitored components. + type: object + required: + - lastTransitionTime + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the time of the last update + to the current status property. + type: string + format: date-time + message: + description: message provides additional information about the + current condition. This is only to be consumed by humans. It + may contain Line Feed characters (U+000A), which should be rendered + as new lines. + type: string + reason: + description: reason is the CamelCase reason for the condition's + current status. + type: string + status: + description: status of the condition, one of True, False, Unknown. + type: string + type: + description: type specifies the aspect reported by this condition. + type: string + desired: + description: desired is the version that the cluster is reconciling + towards. If the cluster is not yet fully initialized desired will + be set with the information available, which may be an image or a + tag. + type: object + properties: + channels: + description: channels is the set of Cincinnati channels to which + the release currently belongs. + type: array + items: + type: string + image: + description: image is a container image location that contains the + update. When this field is part of spec, image is optional if + version is specified and the availableUpdates field contains a + matching version. + type: string + url: + description: url contains information about this release. This URL + is set by the 'url' metadata property on a release or the metadata + returned by the update API and should be displayed as a link in + user interfaces. The URL field may not be set for test or nightly + releases. + type: string + version: + description: version is a semantic versioning identifying the update + version. When this field is part of spec, version is optional + if image is specified. + type: string + history: + description: history contains a list of the most recent versions applied + to the cluster. This value may be empty during cluster startup, and + then will be updated when a new update is being applied. The newest + update is first in the list and it is ordered by recency. Updates + in the history have state Completed if the rollout completed - if + an update was failing or halfway applied the state will be Partial. + Only a limited amount of update history is preserved. + type: array + items: + description: UpdateHistory is a single attempted update to the cluster. + type: object + required: + - completionTime + - image + - startedTime + - state + - verified + properties: + completionTime: + description: completionTime, if set, is when the update was fully + applied. The update that is currently being applied will have + a null completion time. Completion time will always be set for + entries that are not the current update (usually to the started + time of the next update). + type: string + format: date-time + nullable: true + image: + description: image is a container image location that contains + the update. This value is always populated. + type: string + startedTime: + description: startedTime is the time at which the update was started. + type: string + format: date-time + state: + description: state reflects whether the update was fully applied. + The Partial state indicates the update is not fully applied, + while the Completed state indicates the update was successfully + rolled out at least once (all parts of the update successfully + applied). + type: string + verified: + description: verified indicates whether the provided update was + properly verified before it was installed. If this is false + the cluster may not be trusted. + type: boolean + version: + description: version is a semantic versioning identifying the + update version. If the requested image does not define a version, + or if a failure occurs retrieving the image, this value may + be empty. + type: string + observedGeneration: + description: observedGeneration reports which version of the spec is + being synced. If this value is not equal to metadata.generation, then + the desired and conditions fields may represent a previous version. + type: integer + format: int64 + versionHash: + description: versionHash is a fingerprint of the content that the cluster + will be updated with. It is used by the operator to avoid unnecessary + work and is for internal use only. + type: string + versions: + - name: v1 + served: true + storage: true diff --git a/vendor/github.com/openshift/api/config/v1/0000_03_config-operator_01_operatorhub.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_03_config-operator_01_operatorhub.crd.yaml new file mode 100644 index 0000000000000..19994f42c52fe --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_03_config-operator_01_operatorhub.crd.yaml @@ -0,0 +1,103 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: operatorhubs.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + names: + kind: OperatorHub + listKind: OperatorHubList + plural: operatorhubs + singular: operatorhub + scope: Cluster + preserveUnknownFields: false + subresources: + status: {} + version: v1 + versions: + - name: v1 + served: true + storage: true + "validation": + "openAPIV3Schema": + description: OperatorHub is the Schema for the operatorhubs API. It can be used + to change the state of the default hub sources for OperatorHub on the cluster + from enabled to disabled and vice versa. + type: object + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: OperatorHubSpec defines the desired state of OperatorHub + type: object + properties: + disableAllDefaultSources: + description: disableAllDefaultSources allows you to disable all the + default hub sources. If this is true, a specific entry in sources + can be used to enable a default source. If this is false, a specific + entry in sources can be used to disable or enable a default source. + type: boolean + sources: + description: sources is the list of default hub sources and their configuration. + If the list is empty, it implies that the default hub sources are + enabled on the cluster unless disableAllDefaultSources is true. If + disableAllDefaultSources is true and sources is not empty, the configuration + present in sources will take precedence. The list of default hub sources + and their current state will always be reflected in the status block. + type: array + items: + description: HubSource is used to specify the hub source and its configuration + type: object + properties: + disabled: + description: disabled is used to disable a default hub source + on cluster + type: boolean + name: + description: name is the name of one of the default hub sources + type: string + maxLength: 253 + minLength: 1 + status: + description: OperatorHubStatus defines the observed state of OperatorHub. + The current state of the default hub sources will always be reflected + here. + type: object + properties: + sources: + description: sources encapsulates the result of applying the configuration + for each hub source + type: array + items: + description: HubSourceStatus is used to reflect the current state + of applying the configuration to a default source + type: object + properties: + disabled: + description: disabled is used to disable a default hub source + on cluster + type: boolean + message: + description: message provides more information regarding failures + type: string + name: + description: name is the name of one of the default hub sources + type: string + maxLength: 253 + minLength: 1 + status: + description: status indicates success or failure in applying the + configuration + type: string diff --git a/vendor/github.com/openshift/api/config/v1/0000_03_config-operator_01_proxy.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_03_config-operator_01_proxy.crd.yaml new file mode 100644 index 0000000000000..b6fb1c48ce7ed --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_03_config-operator_01_proxy.crd.yaml @@ -0,0 +1,102 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: proxies.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + scope: Cluster + preserveUnknownFields: false + versions: + - name: v1 + served: true + storage: true + names: + kind: Proxy + listKind: ProxyList + plural: proxies + singular: proxy + subresources: + status: {} + "validation": + "openAPIV3Schema": + description: Proxy holds cluster-wide information on how to configure default + proxies for the cluster. The canonical name is `cluster` + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec holds user-settable values for the proxy configuration + type: object + properties: + httpProxy: + description: httpProxy is the URL of the proxy for HTTP requests. Empty + means unset and will not result in an env var. + type: string + httpsProxy: + description: httpsProxy is the URL of the proxy for HTTPS requests. Empty + means unset and will not result in an env var. + type: string + noProxy: + description: noProxy is a comma-separated list of hostnames and/or CIDRs + for which the proxy should not be used. Empty means unset and will + not result in an env var. + type: string + readinessEndpoints: + description: readinessEndpoints is a list of endpoints used to verify + readiness of the proxy. + type: array + items: + type: string + trustedCA: + description: "trustedCA is a reference to a ConfigMap containing a CA + certificate bundle. The trustedCA field should only be consumed by + a proxy validator. The validator is responsible for reading the certificate + bundle from the required key \"ca-bundle.crt\", merging it with the + system default trust bundle, and writing the merged trust bundle to + a ConfigMap named \"trusted-ca-bundle\" in the \"openshift-config-managed\" + namespace. Clients that expect to make proxy connections must use + the trusted-ca-bundle for all HTTPS requests to the proxy, and may + use the trusted-ca-bundle for non-proxy HTTPS requests as well. \n + The namespace for the ConfigMap referenced by trustedCA is \"openshift-config\". + Here is an example ConfigMap (in yaml): \n apiVersion: v1 kind: ConfigMap + metadata: name: user-ca-bundle namespace: openshift-config data: + \ ca-bundle.crt: | -----BEGIN CERTIFICATE----- Custom + CA certificate bundle. -----END CERTIFICATE-----" + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced config + map + type: string + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object + properties: + httpProxy: + description: httpProxy is the URL of the proxy for HTTP requests. + type: string + httpsProxy: + description: httpsProxy is the URL of the proxy for HTTPS requests. + type: string + noProxy: + description: noProxy is a comma-separated list of hostnames and/or CIDRs + for which the proxy should not be used. + type: string diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_apiserver.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_apiserver.crd.yaml new file mode 100644 index 0000000000000..468ad078dae2b --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_apiserver.crd.yaml @@ -0,0 +1,258 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: apiservers.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + scope: Cluster + names: + kind: APIServer + singular: apiserver + plural: apiservers + listKind: APIServerList + versions: + - name: v1 + served: true + storage: true + subresources: + status: {} + schema: + "openAPIV3Schema": + description: APIServer holds configuration (like serving certificates, client + CA and CORS domains) shared by all API servers in the system, among them + especially kube-apiserver and openshift-apiserver. The canonical name of + an instance is 'cluster'. + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + additionalCORSAllowedOrigins: + description: additionalCORSAllowedOrigins lists additional, user-defined + regular expressions describing hosts for which the API server allows + access using the CORS headers. This may be needed to access the + API and the integrated OAuth server from JavaScript applications. + The values are regular expressions that correspond to the Golang + regular expression language. + type: array + items: + type: string + audit: + description: audit specifies the settings for audit configuration + to be applied to all OpenShift-provided API servers in the cluster. + type: object + default: + profile: Default + properties: + profile: + description: "profile specifies the name of the desired audit + policy configuration to be deployed to all OpenShift-provided + API servers in the cluster. \n The following profiles are provided: + - Default: the existing default policy. - WriteRequestBodies: + like 'Default', but logs request and response HTTP payloads + for write requests (create, update, patch). - AllRequestBodies: + like 'WriteRequestBodies', but also logs request and response + HTTP payloads for read requests (get, list). \n If unset, the + 'Default' profile is used as the default." + type: string + default: Default + enum: + - Default + - WriteRequestBodies + - AllRequestBodies + clientCA: + description: 'clientCA references a ConfigMap containing a certificate + bundle for the signers that will be recognized for incoming client + certificates in addition to the operator managed signers. If this + is empty, then only operator managed signers are valid. You usually + only have to set this if you have your own PKI you wish to honor + client certificates from. The ConfigMap must exist in the openshift-config + namespace and contain the following required fields: - ConfigMap.Data["ca-bundle.crt"] + - CA bundle.' + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced config + map + type: string + encryption: + description: encryption allows the configuration of encryption of + resources at the datastore layer. + type: object + properties: + type: + description: "type defines what encryption type should be used + to encrypt resources at the datastore layer. When this field + is unset (i.e. when it is set to the empty string), identity + is implied. The behavior of unset can and will change over time. + \ Even if encryption is enabled by default, the meaning of unset + may change to a different encryption type based on changes in + best practices. \n When encryption is enabled, all sensitive + resources shipped with the platform are encrypted. This list + of sensitive resources can and will change over time. The current + authoritative list is: \n 1. secrets 2. configmaps 3. + routes.route.openshift.io 4. oauthaccesstokens.oauth.openshift.io + \ 5. oauthauthorizetokens.oauth.openshift.io" + type: string + enum: + - "" + - identity + - aescbc + servingCerts: + description: servingCert is the TLS cert info for serving secure traffic. + If not specified, operator managed certificates will be used for + serving secure traffic. + type: object + properties: + namedCertificates: + description: namedCertificates references secrets containing the + TLS cert info for serving secure traffic to specific hostnames. + If no named certificates are provided, or no named certificates + match the server name as understood by a client, the defaultServingCertificate + will be used. + type: array + items: + description: APIServerNamedServingCert maps a server DNS name, + as understood by a client, to a certificate. + type: object + properties: + names: + description: names is a optional list of explicit DNS names + (leading wildcards allowed) that should use this certificate + to serve secure traffic. If no names are provided, the + implicit names will be extracted from the certificates. + Exact names trump over wildcard names. Explicit names + defined here trump over extracted implicit names. + type: array + items: + type: string + servingCertificate: + description: 'servingCertificate references a kubernetes.io/tls + type secret containing the TLS cert info for serving secure + traffic. The secret must exist in the openshift-config + namespace and contain the following required fields: - + Secret.Data["tls.key"] - TLS private key. - Secret.Data["tls.crt"] + - TLS certificate.' + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + secret + type: string + tlsSecurityProfile: + description: "tlsSecurityProfile specifies settings for TLS connections + for externally exposed servers. \n If unset, a default (which may + change between releases) is chosen. Note that only Old and Intermediate + profiles are currently supported, and the maximum available MinTLSVersions + is VersionTLS12." + type: object + properties: + custom: + description: "custom is a user-defined TLS security profile. Be + extremely careful using a custom profile as invalid configurations + can be catastrophic. An example custom profile looks like this: + \n ciphers: - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 + \ - ECDHE-RSA-AES128-GCM-SHA256 - ECDHE-ECDSA-AES128-GCM-SHA256 + \ minTLSVersion: TLSv1.1" + type: object + properties: + ciphers: + description: "ciphers is used to specify the cipher algorithms + that are negotiated during the TLS handshake. Operators + may remove entries their operands do not support. For example, + to use DES-CBC3-SHA (yaml): \n ciphers: - DES-CBC3-SHA" + type: array + items: + type: string + minTLSVersion: + description: "minTLSVersion is used to specify the minimal + version of the TLS protocol that is negotiated during the + TLS handshake. For example, to use TLS versions 1.1, 1.2 + and 1.3 (yaml): \n minTLSVersion: TLSv1.1 \n NOTE: currently + the highest minTLSVersion allowed is VersionTLS12" + type: string + enum: + - VersionTLS10 + - VersionTLS11 + - VersionTLS12 + - VersionTLS13 + nullable: true + intermediate: + description: "intermediate is a TLS security profile based on: + \n https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28recommended.29 + \n and looks like this (yaml): \n ciphers: - TLS_AES_128_GCM_SHA256 + \ - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 + \ - ECDHE-ECDSA-AES128-GCM-SHA256 - ECDHE-RSA-AES128-GCM-SHA256 + \ - ECDHE-ECDSA-AES256-GCM-SHA384 - ECDHE-RSA-AES256-GCM-SHA384 + \ - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 + \ - DHE-RSA-AES128-GCM-SHA256 - DHE-RSA-AES256-GCM-SHA384 + \ minTLSVersion: TLSv1.2" + type: object + nullable: true + modern: + description: "modern is a TLS security profile based on: \n https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility + \n and looks like this (yaml): \n ciphers: - TLS_AES_128_GCM_SHA256 + \ - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 + \ minTLSVersion: TLSv1.3 \n NOTE: Currently unsupported." + type: object + nullable: true + old: + description: "old is a TLS security profile based on: \n https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility + \n and looks like this (yaml): \n ciphers: - TLS_AES_128_GCM_SHA256 + \ - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 + \ - ECDHE-ECDSA-AES128-GCM-SHA256 - ECDHE-RSA-AES128-GCM-SHA256 + \ - ECDHE-ECDSA-AES256-GCM-SHA384 - ECDHE-RSA-AES256-GCM-SHA384 + \ - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 + \ - DHE-RSA-AES128-GCM-SHA256 - DHE-RSA-AES256-GCM-SHA384 + \ - DHE-RSA-CHACHA20-POLY1305 - ECDHE-ECDSA-AES128-SHA256 + \ - ECDHE-RSA-AES128-SHA256 - ECDHE-ECDSA-AES128-SHA + \ - ECDHE-RSA-AES128-SHA - ECDHE-ECDSA-AES256-SHA384 + \ - ECDHE-RSA-AES256-SHA384 - ECDHE-ECDSA-AES256-SHA + \ - ECDHE-RSA-AES256-SHA - DHE-RSA-AES128-SHA256 - + DHE-RSA-AES256-SHA256 - AES128-GCM-SHA256 - AES256-GCM-SHA384 + \ - AES128-SHA256 - AES256-SHA256 - AES128-SHA - + AES256-SHA - DES-CBC3-SHA minTLSVersion: TLSv1.0" + type: object + nullable: true + type: + description: "type is one of Old, Intermediate, Modern or Custom. + Custom provides the ability to specify individual TLS security + profile parameters. Old, Intermediate and Modern are TLS security + profiles based on: \n https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations + \n The profiles are intent based, so they may change over time + as new ciphers are developed and existing ciphers are found + to be insecure. Depending on precisely which ciphers are available + to a process, the list may be reduced. \n Note that the Modern + profile is currently not supported because it is not yet well + adopted by common software libraries." + type: string + enum: + - Old + - Intermediate + - Modern + - Custom + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_authentication.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_authentication.crd.yaml new file mode 100644 index 0000000000000..c6de0ac13ab77 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_authentication.crd.yaml @@ -0,0 +1,153 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: authentications.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + names: + kind: Authentication + listKind: AuthenticationList + plural: authentications + singular: authentication + scope: Cluster + preserveUnknownFields: false + subresources: + status: {} + versions: + - name: v1 + served: true + storage: true + "validation": + "openAPIV3Schema": + description: Authentication specifies cluster-wide settings for authentication + (like OAuth and webhook token authenticators). The canonical name of an instance + is `cluster`. + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + oauthMetadata: + description: 'oauthMetadata contains the discovery endpoint data for + OAuth 2.0 Authorization Server Metadata for an external OAuth server. + This discovery document can be viewed from its served location: oc + get --raw ''/.well-known/oauth-authorization-server'' For further + details, see the IETF Draft: https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2 + If oauthMetadata.name is non-empty, this value has precedence over + any metadata reference stored in status. The key "oauthMetadata" is + used to locate the data. If specified and the config map or expected + key is not found, no metadata is served. If the specified metadata + is not valid, no metadata is served. The namespace for this config + map is openshift-config.' + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced config + map + type: string + serviceAccountIssuer: + description: serviceAccountIssuer is the identifier of the bound service + account token issuer. The default is https://kubernetes.default.svc + type: string + type: + description: type identifies the cluster managed, user facing authentication + mode in use. Specifically, it manages the component that responds + to login attempts. The default is IntegratedOAuth. + type: string + webhookTokenAuthenticator: + description: webhookTokenAuthenticator configures a remote token reviewer. + These remote authentication webhooks can be used to verify bearer + tokens via the tokenreviews.authentication.k8s.io REST API. This is + required to honor bearer tokens that are provisioned by an external + authentication service. + type: object + required: + - kubeConfig + properties: + kubeConfig: + description: "kubeConfig references a secret that contains kube + config file data which describes how to access the remote webhook + service. The namespace for the referenced secret is openshift-config. + \n For further details, see: \n https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication + \n The key \"kubeConfig\" is used to locate the data. If the secret + or expected key is not found, the webhook is not honored. If the + specified kube config data is not valid, the webhook is not honored." + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced secret + type: string + webhookTokenAuthenticators: + description: webhookTokenAuthenticators is DEPRECATED, setting it has + no effect. + type: array + items: + description: deprecatedWebhookTokenAuthenticator holds the necessary + configuration options for a remote token authenticator. It's the + same as WebhookTokenAuthenticator but it's missing the 'required' + validation on KubeConfig field. + type: object + properties: + kubeConfig: + description: 'kubeConfig contains kube config file data which + describes how to access the remote webhook service. For further + details, see: https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication + The key "kubeConfig" is used to locate the data. If the secret + or expected key is not found, the webhook is not honored. If + the specified kube config data is not valid, the webhook is + not honored. The namespace for this secret is determined by + the point of use.' + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced secret + type: string + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object + properties: + integratedOAuthMetadata: + description: 'integratedOAuthMetadata contains the discovery endpoint + data for OAuth 2.0 Authorization Server Metadata for the in-cluster + integrated OAuth server. This discovery document can be viewed from + its served location: oc get --raw ''/.well-known/oauth-authorization-server'' + For further details, see the IETF Draft: https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2 + This contains the observed value based on cluster state. An explicitly + set value in spec.oauthMetadata has precedence over this field. This + field has no meaning if authentication spec.type is not set to IntegratedOAuth. + The key "oauthMetadata" is used to locate the data. If the config + map or expected key is not found, no metadata is served. If the specified + metadata is not valid, no metadata is served. The namespace for this + config map is openshift-config-managed.' + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced config + map + type: string diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_build.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_build.crd.yaml new file mode 100644 index 0000000000000..9bd6113608e5d --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_build.crd.yaml @@ -0,0 +1,390 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: builds.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + scope: Cluster + preserveUnknownFields: false + names: + kind: Build + singular: build + plural: builds + listKind: BuildList + versions: + - name: v1 + served: true + storage: true + subresources: + status: {} + "validation": + "openAPIV3Schema": + description: "Build configures the behavior of OpenShift builds for the entire + cluster. This includes default settings that can be overridden in BuildConfig + objects, and overrides which are applied to all builds. \n The canonical name + is \"cluster\"" + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec holds user-settable values for the build controller configuration + type: object + properties: + additionalTrustedCA: + description: "AdditionalTrustedCA is a reference to a ConfigMap containing + additional CAs that should be trusted for image pushes and pulls during + builds. The namespace for this config map is openshift-config. \n + DEPRECATED: Additional CAs for image pull and push should be set on + image.config.openshift.io/cluster instead." + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced config + map + type: string + buildDefaults: + description: BuildDefaults controls the default information for Builds + type: object + properties: + defaultProxy: + description: "DefaultProxy contains the default proxy settings for + all build operations, including image pull/push and source download. + \n Values can be overrode by setting the `HTTP_PROXY`, `HTTPS_PROXY`, + and `NO_PROXY` environment variables in the build config's strategy." + type: object + properties: + httpProxy: + description: httpProxy is the URL of the proxy for HTTP requests. Empty + means unset and will not result in an env var. + type: string + httpsProxy: + description: httpsProxy is the URL of the proxy for HTTPS requests. Empty + means unset and will not result in an env var. + type: string + noProxy: + description: noProxy is a comma-separated list of hostnames + and/or CIDRs for which the proxy should not be used. Empty + means unset and will not result in an env var. + type: string + readinessEndpoints: + description: readinessEndpoints is a list of endpoints used + to verify readiness of the proxy. + type: array + items: + type: string + trustedCA: + description: "trustedCA is a reference to a ConfigMap containing + a CA certificate bundle. The trustedCA field should only be + consumed by a proxy validator. The validator is responsible + for reading the certificate bundle from the required key \"ca-bundle.crt\", + merging it with the system default trust bundle, and writing + the merged trust bundle to a ConfigMap named \"trusted-ca-bundle\" + in the \"openshift-config-managed\" namespace. Clients that + expect to make proxy connections must use the trusted-ca-bundle + for all HTTPS requests to the proxy, and may use the trusted-ca-bundle + for non-proxy HTTPS requests as well. \n The namespace for + the ConfigMap referenced by trustedCA is \"openshift-config\". + Here is an example ConfigMap (in yaml): \n apiVersion: v1 + kind: ConfigMap metadata: name: user-ca-bundle namespace: + openshift-config data: ca-bundle.crt: | -----BEGIN + CERTIFICATE----- Custom CA certificate bundle. -----END + CERTIFICATE-----" + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + config map + type: string + env: + description: Env is a set of default environment variables that + will be applied to the build if the specified variables do not + exist on the build + type: array + items: + description: EnvVar represents an environment variable present + in a Container. + type: object + required: + - name + properties: + name: + description: Name of the environment variable. Must be a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) are expanded + using the previous defined environment variables in the + container and any service environment variables. If a variable + cannot be resolved, the reference in the input string will + be unchanged. The $(VAR_NAME) syntax can be escaped with + a double $$, ie: $$(VAR_NAME). Escaped references will never + be expanded, regardless of whether the variable exists or + not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's value. + Cannot be used if value is not empty. + type: object + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + type: object + required: + - key + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the ConfigMap or its + key must be defined + type: boolean + fieldRef: + description: 'Selects a field of the pod: supports metadata.name, + metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, + spec.nodeName, spec.serviceAccountName, status.hostIP, + status.podIP, status.podIPs.' + type: object + required: + - fieldPath + properties: + apiVersion: + description: Version of the schema the FieldPath is + written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the specified + API version. + type: string + resourceFieldRef: + description: 'Selects a resource of the container: only + resources limits and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, requests.memory + and requests.ephemeral-storage) are currently supported.' + type: object + required: + - resource + properties: + containerName: + description: 'Container name: required for volumes, + optional for env vars' + type: string + divisor: + description: Specifies the output format of the exposed + resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + secretKeyRef: + description: Selects a key of a secret in the pod's namespace + type: object + required: + - key + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret or its key + must be defined + type: boolean + gitProxy: + description: "GitProxy contains the proxy settings for git operations + only. If set, this will override any Proxy settings for all git + commands, such as git clone. \n Values that are not set here will + be inherited from DefaultProxy." + type: object + properties: + httpProxy: + description: httpProxy is the URL of the proxy for HTTP requests. Empty + means unset and will not result in an env var. + type: string + httpsProxy: + description: httpsProxy is the URL of the proxy for HTTPS requests. Empty + means unset and will not result in an env var. + type: string + noProxy: + description: noProxy is a comma-separated list of hostnames + and/or CIDRs for which the proxy should not be used. Empty + means unset and will not result in an env var. + type: string + readinessEndpoints: + description: readinessEndpoints is a list of endpoints used + to verify readiness of the proxy. + type: array + items: + type: string + trustedCA: + description: "trustedCA is a reference to a ConfigMap containing + a CA certificate bundle. The trustedCA field should only be + consumed by a proxy validator. The validator is responsible + for reading the certificate bundle from the required key \"ca-bundle.crt\", + merging it with the system default trust bundle, and writing + the merged trust bundle to a ConfigMap named \"trusted-ca-bundle\" + in the \"openshift-config-managed\" namespace. Clients that + expect to make proxy connections must use the trusted-ca-bundle + for all HTTPS requests to the proxy, and may use the trusted-ca-bundle + for non-proxy HTTPS requests as well. \n The namespace for + the ConfigMap referenced by trustedCA is \"openshift-config\". + Here is an example ConfigMap (in yaml): \n apiVersion: v1 + kind: ConfigMap metadata: name: user-ca-bundle namespace: + openshift-config data: ca-bundle.crt: | -----BEGIN + CERTIFICATE----- Custom CA certificate bundle. -----END + CERTIFICATE-----" + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + config map + type: string + imageLabels: + description: ImageLabels is a list of docker labels that are applied + to the resulting image. User can override a default label by providing + a label with the same name in their Build/BuildConfig. + type: array + items: + type: object + properties: + name: + description: Name defines the name of the label. It must have + non-zero length. + type: string + value: + description: Value defines the literal value of the label. + type: string + resources: + description: Resources defines resource requirements to execute + the build. + type: object + properties: + limits: + description: 'Limits describes the maximum amount of compute + resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + requests: + description: 'Requests describes the minimum amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, otherwise + to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + additionalProperties: + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + buildOverrides: + description: BuildOverrides controls override settings for builds + type: object + properties: + forcePull: + description: ForcePull overrides, if set, the equivalent value in + the builds, i.e. false disables force pull for all builds, true + enables force pull for all builds, independently of what each + build specifies itself + type: boolean + imageLabels: + description: ImageLabels is a list of docker labels that are applied + to the resulting image. If user provided a label in their Build/BuildConfig + with the same name as one in this list, the user's label will + be overwritten. + type: array + items: + type: object + properties: + name: + description: Name defines the name of the label. It must have + non-zero length. + type: string + value: + description: Value defines the literal value of the label. + type: string + nodeSelector: + description: NodeSelector is a selector which must be true for the + build pod to fit on a node + type: object + additionalProperties: + type: string + tolerations: + description: Tolerations is a list of Tolerations that will override + any existing tolerations set on a build pod. + type: array + items: + description: The pod this Toleration is attached to tolerates + any taint that matches the triple using the + matching operator . + type: object + properties: + effect: + description: Effect indicates the taint effect to match. Empty + means match all taint effects. When specified, allowed values + are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration applies + to. Empty means match all taint keys. If the key is empty, + operator must be Exists; this combination means to match + all values and all keys. + type: string + operator: + description: Operator represents a key's relationship to the + value. Valid operators are Exists and Equal. Defaults to + Equal. Exists is equivalent to wildcard for value, so that + a pod can tolerate all taints of a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period of time + the toleration (which must be of effect NoExecute, otherwise + this field is ignored) tolerates the taint. By default, + it is not set, which means tolerate the taint forever (do + not evict). Zero and negative values will be treated as + 0 (evict immediately) by the system. + type: integer + format: int64 + value: + description: Value is the taint value the toleration matches + to. If the operator is Exists, the value should be empty, + otherwise just a regular string. + type: string diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_console.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_console.crd.yaml new file mode 100644 index 0000000000000..4234d732ec537 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_console.crd.yaml @@ -0,0 +1,72 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: consoles.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + scope: Cluster + preserveUnknownFields: false + group: config.openshift.io + names: + kind: Console + listKind: ConsoleList + plural: consoles + singular: console + subresources: + status: {} + versions: + - name: v1 + served: true + storage: true + "validation": + "openAPIV3Schema": + description: Console holds cluster-wide configuration for the web console, including + the logout URL, and reports the public URL of the console. The canonical name + is `cluster`. + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + authentication: + description: ConsoleAuthentication defines a list of optional configuration + for console authentication. + type: object + properties: + logoutRedirect: + description: 'An optional, absolute URL to redirect web browsers + to after logging out of the console. If not specified, it will + redirect to the default login page. This is required when using + an identity provider that supports single sign-on (SSO) such as: + - OpenID (Keycloak, Azure) - RequestHeader (GSSAPI, SSPI, SAML) + - OAuth (GitHub, GitLab, Google) Logging out of the console will + destroy the user''s token. The logoutRedirect provides the user + the option to perform single logout (SLO) through the identity + provider to destroy their single sign-on session.' + type: string + pattern: ^$|^((https):\/\/?)[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|\/?))$ + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object + properties: + consoleURL: + description: The URL for the console. This will be derived from the + host for the route that is created for the console. + type: string diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_dns.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_dns.crd.yaml new file mode 100644 index 0000000000000..e864cae7a1259 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_dns.crd.yaml @@ -0,0 +1,102 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: dnses.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + names: + kind: DNS + listKind: DNSList + plural: dnses + singular: dns + scope: Cluster + preserveUnknownFields: false + versions: + - name: v1 + served: true + storage: true + subresources: + status: {} + "validation": + "openAPIV3Schema": + description: DNS holds cluster-wide information about DNS. The canonical name + is `cluster` + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + baseDomain: + description: "baseDomain is the base domain of the cluster. All managed + DNS records will be sub-domains of this base. \n For example, given + the base domain `openshift.example.com`, an API server DNS record + may be created for `cluster-api.openshift.example.com`. \n Once set, + this field cannot be changed." + type: string + privateZone: + description: "privateZone is the location where all the DNS records + that are only available internally to the cluster exist. \n If this + field is nil, no private records should be created. \n Once set, this + field cannot be changed." + type: object + properties: + id: + description: "id is the identifier that can be used to find the + DNS hosted zone. \n on AWS zone can be fetched using `ID` as id + in [1] on Azure zone can be fetched using `ID` as a pre-determined + name in [2], on GCP zone can be fetched using `ID` as a pre-determined + name in [3]. \n [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options + [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show + [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get" + type: string + tags: + description: "tags can be used to query the DNS hosted zone. \n + on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone + using `Tags` as tag-filters, \n [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options" + type: object + additionalProperties: + type: string + publicZone: + description: "publicZone is the location where all the DNS records that + are publicly accessible to the internet exist. \n If this field is + nil, no public records should be created. \n Once set, this field + cannot be changed." + type: object + properties: + id: + description: "id is the identifier that can be used to find the + DNS hosted zone. \n on AWS zone can be fetched using `ID` as id + in [1] on Azure zone can be fetched using `ID` as a pre-determined + name in [2], on GCP zone can be fetched using `ID` as a pre-determined + name in [3]. \n [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options + [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show + [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get" + type: string + tags: + description: "tags can be used to query the DNS hosted zone. \n + on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone + using `Tags` as tag-filters, \n [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options" + type: object + additionalProperties: + type: string + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_featuregate.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_featuregate.crd.yaml new file mode 100644 index 0000000000000..ec458de32004d --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_featuregate.crd.yaml @@ -0,0 +1,78 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: featuregates.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + version: v1 + scope: Cluster + preserveUnknownFields: false + names: + kind: FeatureGate + singular: featuregate + plural: featuregates + listKind: FeatureGateList + versions: + - name: v1 + served: true + storage: true + subresources: + status: {} + "validation": + "openAPIV3Schema": + description: Feature holds cluster-wide information about feature gates. The + canonical name is `cluster` + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + customNoUpgrade: + description: customNoUpgrade allows the enabling or disabling of any + feature. Turning this feature set on IS NOT SUPPORTED, CANNOT BE UNDONE, + and PREVENTS UPGRADES. Because of its nature, this setting cannot + be validated. If you have any typos or accidentally apply invalid + combinations your cluster may fail in an unrecoverable way. featureSet + must equal "CustomNoUpgrade" must be set to use this field. + type: object + properties: + disabled: + description: disabled is a list of all feature gates that you want + to force off + type: array + items: + type: string + enabled: + description: enabled is a list of all feature gates that you want + to force on + type: array + items: + type: string + nullable: true + featureSet: + description: featureSet changes the list of features in the cluster. The + default is empty. Be very careful adjusting this setting. Turning + on or off features may cause irreversible changes in your cluster + which cannot be undone. + type: string + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_image.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_image.crd.yaml new file mode 100644 index 0000000000000..858681c9d864f --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_image.crd.yaml @@ -0,0 +1,146 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: images.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + scope: Cluster + preserveUnknownFields: false + names: + kind: Image + singular: image + plural: images + listKind: ImageList + versions: + - name: v1 + served: true + storage: true + subresources: + status: {} + "validation": + "openAPIV3Schema": + description: Image governs policies related to imagestream imports and runtime + configuration for external registries. It allows cluster admins to configure + which registries OpenShift is allowed to import images from, extra CA trust + bundles for external registries, and policies to block or allow registry hostnames. + When exposing OpenShift's image registry to the public, this also lets cluster + admins specify the external hostname. + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + additionalTrustedCA: + description: additionalTrustedCA is a reference to a ConfigMap containing + additional CAs that should be trusted during imagestream import, pod + image pull, build image pull, and imageregistry pullthrough. The namespace + for this config map is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced config + map + type: string + allowedRegistriesForImport: + description: allowedRegistriesForImport limits the container image registries + that normal users may import images from. Set this list to the registries + that you trust to contain valid Docker images and that you want applications + to be able to import from. Users with permission to create Images + or ImageStreamMappings via the API are not affected by this policy + - typically only administrators or system integrations will have those + permissions. + type: array + items: + description: RegistryLocation contains a location of the registry + specified by the registry domain name. The domain name might include + wildcards, like '*' or '??'. + type: object + properties: + domainName: + description: domainName specifies a domain name for the registry + In case the registry use non-standard (80 or 443) port, the + port should be included in the domain name as well. + type: string + insecure: + description: insecure indicates whether the registry is secure + (https) or insecure (http) By default (if not specified) the + registry is assumed as secure. + type: boolean + externalRegistryHostnames: + description: externalRegistryHostnames provides the hostnames for the + default external image registry. The external hostname should be set + only when the image registry is exposed externally. The first value + is used in 'publicDockerImageRepository' field in ImageStreams. The + value must be in "hostname[:port]" format. + type: array + items: + type: string + registrySources: + description: registrySources contains configuration that determines + how the container runtime should treat individual registries when + accessing images for builds+pods. (e.g. whether or not to allow insecure + access). It does not contain configuration for the internal cluster + registry. + type: object + properties: + allowedRegistries: + description: "allowedRegistries are the only registries permitted + for image pull and push actions. All other registries are denied. + \n Only one of BlockedRegistries or AllowedRegistries may be set." + type: array + items: + type: string + blockedRegistries: + description: "blockedRegistries cannot be used for image pull and + push actions. All other registries are permitted. \n Only one + of BlockedRegistries or AllowedRegistries may be set." + type: array + items: + type: string + insecureRegistries: + description: insecureRegistries are registries which do not have + a valid TLS certificates or only support HTTP connections. + type: array + items: + type: string + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object + properties: + externalRegistryHostnames: + description: externalRegistryHostnames provides the hostnames for the + default external image registry. The external hostname should be set + only when the image registry is exposed externally. The first value + is used in 'publicDockerImageRepository' field in ImageStreams. The + value must be in "hostname[:port]" format. + type: array + items: + type: string + internalRegistryHostname: + description: internalRegistryHostname sets the hostname for the default + internal image registry. The value must be in "hostname[:port]" format. + This value is set by the image registry operator which controls the + internal registry hostname. For backward compatibility, users can + still use OPENSHIFT_DEFAULT_REGISTRY environment variable but this + setting overrides the environment variable. + type: string diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_infrastructure.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_infrastructure.crd.yaml new file mode 100644 index 0000000000000..57b7c6e2b9ee9 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_infrastructure.crd.yaml @@ -0,0 +1,439 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: infrastructures.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + names: + kind: Infrastructure + listKind: InfrastructureList + plural: infrastructures + singular: infrastructure + scope: Cluster + preserveUnknownFields: false + subresources: + status: {} + versions: + - name: v1 + served: true + storage: true + "validation": + "openAPIV3Schema": + description: Infrastructure holds cluster-wide information about Infrastructure. The + canonical name is `cluster` + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + cloudConfig: + description: "cloudConfig is a reference to a ConfigMap containing the + cloud provider configuration file. This configuration file is used + to configure the Kubernetes cloud provider integration when using + the built-in cloud provider integration or the external cloud controller + manager. The namespace for this config map is openshift-config. \n + cloudConfig should only be consumed by the kube_cloud_config controller. + The controller is responsible for using the user configuration in + the spec for various platforms and combining that with the user provided + ConfigMap in this field to create a stitched kube cloud config. The + controller generates a ConfigMap `kube-cloud-config` in `openshift-config-managed` + namespace with the kube cloud config is stored in `cloud.conf` key. + All the clients are expected to use the generated ConfigMap only." + type: object + properties: + key: + description: Key allows pointing to a specific key/value inside + of the configmap. This is useful for logical file references. + type: string + name: + type: string + platformSpec: + description: platformSpec holds desired information specific to the + underlying infrastructure provider. + type: object + properties: + aws: + description: AWS contains settings specific to the Amazon Web Services + infrastructure provider. + type: object + properties: + serviceEndpoints: + description: serviceEndpoints list contains custom endpoints + which will override default service endpoint of AWS Services. + There must be only one ServiceEndpoint for a service. + type: array + items: + description: AWSServiceEndpoint store the configuration of + a custom url to override existing defaults of AWS Services. + type: object + properties: + name: + description: name is the name of the AWS service. The + list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html + This must be provided and cannot be empty. + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, + that overrides the default generated endpoint for a + client. This must be provided and cannot be empty. + type: string + pattern: ^https:// + azure: + description: Azure contains settings specific to the Azure infrastructure + provider. + type: object + baremetal: + description: BareMetal contains settings specific to the BareMetal + platform. + type: object + gcp: + description: GCP contains settings specific to the Google Cloud + Platform infrastructure provider. + type: object + ibmcloud: + description: IBMCloud contains settings specific to the IBMCloud + infrastructure provider. + type: object + kubevirt: + description: Kubevirt contains settings specific to the kubevirt + infrastructure provider. + type: object + openstack: + description: OpenStack contains settings specific to the OpenStack + infrastructure provider. + type: object + ovirt: + description: Ovirt contains settings specific to the oVirt infrastructure + provider. + type: object + type: + description: type is the underlying infrastructure provider for + the cluster. This value controls whether infrastructure automation + such as service load balancers, dynamic volume provisioning, machine + creation and deletion, and other integrations are enabled. If + None, no infrastructure automation is enabled. Allowed values + are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", "OpenStack", + "VSphere", "oVirt", "KubeVirt" and "None". Individual components + may not support all platforms, and must handle unrecognized platforms + as None if they do not support that platform. + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + vsphere: + description: VSphere contains settings specific to the VSphere infrastructure + provider. + type: object + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object + properties: + apiServerInternalURI: + description: apiServerInternalURL is a valid URI with scheme 'https', + address and optionally a port (defaulting to 443). apiServerInternalURL + can be used by components like kubelets, to contact the Kubernetes + API server using the infrastructure provider rather than Kubernetes + networking. + type: string + apiServerURL: + description: apiServerURL is a valid URI with scheme 'https', address + and optionally a port (defaulting to 443). apiServerURL can be used + by components like the web console to tell users where to find the + Kubernetes API. + type: string + etcdDiscoveryDomain: + description: 'etcdDiscoveryDomain is the domain used to fetch the SRV + records for discovering etcd servers and clients. For more info: https://github.com/etcd-io/etcd/blob/329be66e8b3f9e2e6af83c123ff89297e49ebd15/Documentation/op-guide/clustering.md#dns-discovery' + type: string + infrastructureName: + description: infrastructureName uniquely identifies a cluster with a + human friendly name. Once set it should not be changed. Must be of + max length 27 and must have only alphanumeric or hyphen characters. + type: string + platform: + description: "platform is the underlying infrastructure provider for + the cluster. \n Deprecated: Use platformStatus.type instead." + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + platformStatus: + description: platformStatus holds status information specific to the + underlying infrastructure provider. + type: object + properties: + aws: + description: AWS contains settings specific to the Amazon Web Services + infrastructure provider. + type: object + properties: + region: + description: region holds the default AWS region for new AWS + resources created by the cluster. + type: string + serviceEndpoints: + description: ServiceEndpoints list contains custom endpoints + which will override default service endpoint of AWS Services. + There must be only one ServiceEndpoint for a service. + type: array + items: + description: AWSServiceEndpoint store the configuration of + a custom url to override existing defaults of AWS Services. + type: object + properties: + name: + description: name is the name of the AWS service. The + list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html + This must be provided and cannot be empty. + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, + that overrides the default generated endpoint for a + client. This must be provided and cannot be empty. + type: string + pattern: ^https:// + azure: + description: Azure contains settings specific to the Azure infrastructure + provider. + type: object + properties: + cloudName: + description: cloudName is the name of the Azure cloud environment + which can be used to configure the Azure SDK with the appropriate + Azure API endpoints. If empty, the value is equal to `AzurePublicCloud`. + type: string + enum: + - "" + - AzurePublicCloud + - AzureUSGovernmentCloud + - AzureChinaCloud + - AzureGermanCloud + networkResourceGroupName: + description: networkResourceGroupName is the Resource Group + for network resources like the Virtual Network and Subnets + used by the cluster. If empty, the value is same as ResourceGroupName. + type: string + resourceGroupName: + description: resourceGroupName is the Resource Group for new + Azure resources created for the cluster. + type: string + baremetal: + description: BareMetal contains settings specific to the BareMetal + platform. + type: object + properties: + apiServerInternalIP: + description: apiServerInternalIP is an IP address to contact + the Kubernetes API server that can be used by components inside + the cluster, like kubelets using the infrastructure rather + than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI + points to. It is the IP for a self-hosted load balancer in + front of the API servers. + type: string + ingressIP: + description: ingressIP is an external IP which routes to the + default ingress controller. The IP is a suitable target of + a wildcard DNS record used to resolve default route host names. + type: string + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS + used by the nodes. Unlike the one managed by the DNS operator, + `NodeDNSIP` provides name resolution for the nodes themselves. + There is no DNS-as-a-service for BareMetal deployments. In + order to minimize necessary changes to the datacenter DNS, + a DNS service is hosted as a static pod to serve those hostnames + to the nodes in the cluster. + type: string + gcp: + description: GCP contains settings specific to the Google Cloud + Platform infrastructure provider. + type: object + properties: + projectID: + description: resourceGroupName is the Project ID for new GCP + resources created for the cluster. + type: string + region: + description: region holds the region for new GCP resources created + for the cluster. + type: string + ibmcloud: + description: IBMCloud contains settings specific to the IBMCloud + infrastructure provider. + type: object + properties: + location: + description: Location is where the cluster has been deployed + type: string + providerType: + description: ProviderType indicates the type of cluster that + was created + type: string + resourceGroupName: + description: ResourceGroupName is the Resource Group for new + IBMCloud resources created for the cluster. + type: string + kubevirt: + description: Kubevirt contains settings specific to the kubevirt + infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: apiServerInternalIP is an IP address to contact + the Kubernetes API server that can be used by components inside + the cluster, like kubelets using the infrastructure rather + than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI + points to. It is the IP for a self-hosted load balancer in + front of the API servers. + type: string + ingressIP: + description: ingressIP is an external IP which routes to the + default ingress controller. The IP is a suitable target of + a wildcard DNS record used to resolve default route host names. + type: string + openstack: + description: OpenStack contains settings specific to the OpenStack + infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: apiServerInternalIP is an IP address to contact + the Kubernetes API server that can be used by components inside + the cluster, like kubelets using the infrastructure rather + than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI + points to. It is the IP for a self-hosted load balancer in + front of the API servers. + type: string + cloudName: + description: cloudName is the name of the desired OpenStack + cloud in the client configuration file (`clouds.yaml`). + type: string + ingressIP: + description: ingressIP is an external IP which routes to the + default ingress controller. The IP is a suitable target of + a wildcard DNS record used to resolve default route host names. + type: string + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS + used by the nodes. Unlike the one managed by the DNS operator, + `NodeDNSIP` provides name resolution for the nodes themselves. + There is no DNS-as-a-service for OpenStack deployments. In + order to minimize necessary changes to the datacenter DNS, + a DNS service is hosted as a static pod to serve those hostnames + to the nodes in the cluster. + type: string + ovirt: + description: Ovirt contains settings specific to the oVirt infrastructure + provider. + type: object + properties: + apiServerInternalIP: + description: apiServerInternalIP is an IP address to contact + the Kubernetes API server that can be used by components inside + the cluster, like kubelets using the infrastructure rather + than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI + points to. It is the IP for a self-hosted load balancer in + front of the API servers. + type: string + ingressIP: + description: ingressIP is an external IP which routes to the + default ingress controller. The IP is a suitable target of + a wildcard DNS record used to resolve default route host names. + type: string + nodeDNSIP: + description: 'deprecated: as of 4.6, this field is no longer + set or honored. It will be removed in a future release.' + type: string + type: + description: "type is the underlying infrastructure provider for + the cluster. This value controls whether infrastructure automation + such as service load balancers, dynamic volume provisioning, machine + creation and deletion, and other integrations are enabled. If + None, no infrastructure automation is enabled. Allowed values + are \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", \"OpenStack\", + \"VSphere\", \"oVirt\", and \"None\". Individual components may + not support all platforms, and must handle unrecognized platforms + as None if they do not support that platform. \n This value will + be synced with to the `status.platform` and `status.platformStatus.type`. + Currently this value cannot be changed once set." + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + vsphere: + description: VSphere contains settings specific to the VSphere infrastructure + provider. + type: object + properties: + apiServerInternalIP: + description: apiServerInternalIP is an IP address to contact + the Kubernetes API server that can be used by components inside + the cluster, like kubelets using the infrastructure rather + than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI + points to. It is the IP for a self-hosted load balancer in + front of the API servers. + type: string + ingressIP: + description: ingressIP is an external IP which routes to the + default ingress controller. The IP is a suitable target of + a wildcard DNS record used to resolve default route host names. + type: string + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS + used by the nodes. Unlike the one managed by the DNS operator, + `NodeDNSIP` provides name resolution for the nodes themselves. + There is no DNS-as-a-service for vSphere deployments. In order + to minimize necessary changes to the datacenter DNS, a DNS + service is hosted as a static pod to serve those hostnames + to the nodes in the cluster. + type: string diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_ingress.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_ingress.crd.yaml new file mode 100644 index 0000000000000..bd7cdad40ddb0 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_ingress.crd.yaml @@ -0,0 +1,57 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: ingresses.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + names: + kind: Ingress + listKind: IngressList + plural: ingresses + singular: ingress + scope: Cluster + preserveUnknownFields: false + versions: + - name: v1 + served: true + storage: true + subresources: + status: {} + "validation": + "openAPIV3Schema": + description: Ingress holds cluster-wide information about ingress, including + the default ingress domain used for routes. The canonical name is `cluster`. + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + domain: + description: "domain is used to generate a default host name for a route + when the route's host name is empty. The generated host name will + follow this pattern: \"..\". + \n It is also used as the default wildcard domain suffix for ingress. + The default ingresscontroller domain will follow this pattern: \"*.\". + \n Once set, changing domain is not currently supported." + type: string + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_network.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_network.crd.yaml new file mode 100644 index 0000000000000..5b029401b093e --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_network.crd.yaml @@ -0,0 +1,153 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: networks.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + names: + kind: Network + listKind: NetworkList + plural: networks + singular: network + scope: Cluster + preserveUnknownFields: false + versions: + - name: v1 + served: true + storage: true + "validation": + "openAPIV3Schema": + description: 'Network holds cluster-wide information about Network. The canonical + name is `cluster`. It is used to configure the desired network configuration, + such as: IP address pools for services/pod IPs, network plugin, etc. Please + view network.spec for an explanation on what applies when configuring this + resource.' + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration. As a general + rule, this SHOULD NOT be read directly. Instead, you should consume the + NetworkStatus, as it indicates the currently deployed configuration. Currently, + most spec fields are immutable after installation. Please view the individual + ones for further details on each. + type: object + properties: + clusterNetwork: + description: IP address pool to use for pod IPs. This field is immutable + after installation. + type: array + items: + description: ClusterNetworkEntry is a contiguous block of IP addresses + from which pod IPs are allocated. + type: object + properties: + cidr: + description: The complete block for pod IPs. + type: string + hostPrefix: + description: The size (prefix) of block to allocate to each node. + If this field is not used by the plugin, it can be left unset. + type: integer + format: int32 + minimum: 0 + externalIP: + description: externalIP defines configuration for controllers that affect + Service.ExternalIP. If nil, then ExternalIP is not allowed to be set. + type: object + properties: + autoAssignCIDRs: + description: autoAssignCIDRs is a list of CIDRs from which to automatically + assign Service.ExternalIP. These are assigned when the service + is of type LoadBalancer. In general, this is only useful for bare-metal + clusters. In Openshift 3.x, this was misleadingly called "IngressIPs". + Automatically assigned External IPs are not affected by any ExternalIPPolicy + rules. Currently, only one entry may be provided. + type: array + items: + type: string + policy: + description: policy is a set of restrictions applied to the ExternalIP + field. If nil or empty, then ExternalIP is not allowed to be set. + type: object + properties: + allowedCIDRs: + description: allowedCIDRs is the list of allowed CIDRs. + type: array + items: + type: string + rejectedCIDRs: + description: rejectedCIDRs is the list of disallowed CIDRs. + These take precedence over allowedCIDRs. + type: array + items: + type: string + networkType: + description: 'NetworkType is the plugin that is to be deployed (e.g. + OpenShiftSDN). This should match a value that the cluster-network-operator + understands, or else no networking will be installed. Currently supported + values are: - OpenShiftSDN This field is immutable after installation.' + type: string + serviceNetwork: + description: IP address pool for services. Currently, we only support + a single entry here. This field is immutable after installation. + type: array + items: + type: string + serviceNodePortRange: + description: The port range allowed for Services of type NodePort. If + not specified, the default of 30000-32767 will be used. Such Services + without a NodePort specified will have one automatically allocated + from this range. This parameter can be updated after the cluster is + installed. + type: string + pattern: ^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])-([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$ + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object + properties: + clusterNetwork: + description: IP address pool to use for pod IPs. + type: array + items: + description: ClusterNetworkEntry is a contiguous block of IP addresses + from which pod IPs are allocated. + type: object + properties: + cidr: + description: The complete block for pod IPs. + type: string + hostPrefix: + description: The size (prefix) of block to allocate to each node. + If this field is not used by the plugin, it can be left unset. + type: integer + format: int32 + minimum: 0 + clusterNetworkMTU: + description: ClusterNetworkMTU is the MTU for inter-pod networking. + type: integer + networkType: + description: NetworkType is the plugin that is deployed (e.g. OpenShiftSDN). + type: string + serviceNetwork: + description: IP address pool for services. Currently, we only support + a single entry here. + type: array + items: + type: string diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_oauth.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_oauth.crd.yaml new file mode 100644 index 0000000000000..35388d9c998c7 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_oauth.crd.yaml @@ -0,0 +1,667 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: oauths.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + names: + kind: OAuth + listKind: OAuthList + plural: oauths + singular: oauth + scope: Cluster + preserveUnknownFields: false + subresources: + status: {} + versions: + - name: v1 + served: true + storage: true + "validation": + "openAPIV3Schema": + description: OAuth holds cluster-wide information about OAuth. The canonical + name is `cluster`. It is used to configure the integrated OAuth server. This + configuration is only honored when the top level Authentication config has + type set to IntegratedOAuth. + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + identityProviders: + description: identityProviders is an ordered list of ways for a user + to identify themselves. When this list is empty, no identities are + provisioned for users. + type: array + items: + description: IdentityProvider provides identities for users authenticating + using credentials + type: object + properties: + basicAuth: + description: basicAuth contains configuration options for the + BasicAuth IdP + type: object + properties: + ca: + description: ca is an optional reference to a config map by + name containing the PEM-encoded CA bundle. It is used as + a trust anchor to validate the TLS certificate presented + by the remote server. The key "ca.crt" is used to locate + the data. If specified and the config map or expected key + is not found, the identity provider is not honored. If the + specified ca data is not valid, the identity provider is + not honored. If empty, the default system roots are used. + The namespace for this config map is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + config map + type: string + tlsClientCert: + description: tlsClientCert is an optional reference to a secret + by name that contains the PEM-encoded TLS client certificate + to present when connecting to the server. The key "tls.crt" + is used to locate the data. If specified and the secret + or expected key is not found, the identity provider is not + honored. If the specified certificate data is not valid, + the identity provider is not honored. The namespace for + this secret is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + secret + type: string + tlsClientKey: + description: tlsClientKey is an optional reference to a secret + by name that contains the PEM-encoded TLS private key for + the client certificate referenced in tlsClientCert. The + key "tls.key" is used to locate the data. If specified and + the secret or expected key is not found, the identity provider + is not honored. If the specified certificate data is not + valid, the identity provider is not honored. The namespace + for this secret is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + secret + type: string + url: + description: url is the remote URL to connect to + type: string + github: + description: github enables user authentication using GitHub credentials + type: object + properties: + ca: + description: ca is an optional reference to a config map by + name containing the PEM-encoded CA bundle. It is used as + a trust anchor to validate the TLS certificate presented + by the remote server. The key "ca.crt" is used to locate + the data. If specified and the config map or expected key + is not found, the identity provider is not honored. If the + specified ca data is not valid, the identity provider is + not honored. If empty, the default system roots are used. + This can only be configured when hostname is set to a non-empty + value. The namespace for this config map is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + config map + type: string + clientID: + description: clientID is the oauth client ID + type: string + clientSecret: + description: clientSecret is a required reference to the secret + by name containing the oauth client secret. The key "clientSecret" + is used to locate the data. If the secret or expected key + is not found, the identity provider is not honored. The + namespace for this secret is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + secret + type: string + hostname: + description: hostname is the optional domain (e.g. "mycompany.com") + for use with a hosted instance of GitHub Enterprise. It + must match the GitHub Enterprise settings value configured + at /setup/settings#hostname. + type: string + organizations: + description: organizations optionally restricts which organizations + are allowed to log in + type: array + items: + type: string + teams: + description: teams optionally restricts which teams are allowed + to log in. Format is /. + type: array + items: + type: string + gitlab: + description: gitlab enables user authentication using GitLab credentials + type: object + properties: + ca: + description: ca is an optional reference to a config map by + name containing the PEM-encoded CA bundle. It is used as + a trust anchor to validate the TLS certificate presented + by the remote server. The key "ca.crt" is used to locate + the data. If specified and the config map or expected key + is not found, the identity provider is not honored. If the + specified ca data is not valid, the identity provider is + not honored. If empty, the default system roots are used. + The namespace for this config map is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + config map + type: string + clientID: + description: clientID is the oauth client ID + type: string + clientSecret: + description: clientSecret is a required reference to the secret + by name containing the oauth client secret. The key "clientSecret" + is used to locate the data. If the secret or expected key + is not found, the identity provider is not honored. The + namespace for this secret is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + secret + type: string + url: + description: url is the oauth server base URL + type: string + google: + description: google enables user authentication using Google credentials + type: object + properties: + clientID: + description: clientID is the oauth client ID + type: string + clientSecret: + description: clientSecret is a required reference to the secret + by name containing the oauth client secret. The key "clientSecret" + is used to locate the data. If the secret or expected key + is not found, the identity provider is not honored. The + namespace for this secret is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + secret + type: string + hostedDomain: + description: hostedDomain is the optional Google App domain + (e.g. "mycompany.com") to restrict logins to + type: string + htpasswd: + description: htpasswd enables user authentication using an HTPasswd + file to validate credentials + type: object + properties: + fileData: + description: fileData is a required reference to a secret + by name containing the data to use as the htpasswd file. + The key "htpasswd" is used to locate the data. If the secret + or expected key is not found, the identity provider is not + honored. If the specified htpasswd data is not valid, the + identity provider is not honored. The namespace for this + secret is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + secret + type: string + keystone: + description: keystone enables user authentication using keystone + password credentials + type: object + properties: + ca: + description: ca is an optional reference to a config map by + name containing the PEM-encoded CA bundle. It is used as + a trust anchor to validate the TLS certificate presented + by the remote server. The key "ca.crt" is used to locate + the data. If specified and the config map or expected key + is not found, the identity provider is not honored. If the + specified ca data is not valid, the identity provider is + not honored. If empty, the default system roots are used. + The namespace for this config map is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + config map + type: string + domainName: + description: domainName is required for keystone v3 + type: string + tlsClientCert: + description: tlsClientCert is an optional reference to a secret + by name that contains the PEM-encoded TLS client certificate + to present when connecting to the server. The key "tls.crt" + is used to locate the data. If specified and the secret + or expected key is not found, the identity provider is not + honored. If the specified certificate data is not valid, + the identity provider is not honored. The namespace for + this secret is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + secret + type: string + tlsClientKey: + description: tlsClientKey is an optional reference to a secret + by name that contains the PEM-encoded TLS private key for + the client certificate referenced in tlsClientCert. The + key "tls.key" is used to locate the data. If specified and + the secret or expected key is not found, the identity provider + is not honored. If the specified certificate data is not + valid, the identity provider is not honored. The namespace + for this secret is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + secret + type: string + url: + description: url is the remote URL to connect to + type: string + ldap: + description: ldap enables user authentication using LDAP credentials + type: object + properties: + attributes: + description: attributes maps LDAP attributes to identities + type: object + properties: + email: + description: email is the list of attributes whose values + should be used as the email address. Optional. If unspecified, + no email is set for the identity + type: array + items: + type: string + id: + description: id is the list of attributes whose values + should be used as the user ID. Required. First non-empty + attribute is used. At least one attribute is required. + If none of the listed attribute have a value, authentication + fails. LDAP standard identity attribute is "dn" + type: array + items: + type: string + name: + description: name is the list of attributes whose values + should be used as the display name. Optional. If unspecified, + no display name is set for the identity LDAP standard + display name attribute is "cn" + type: array + items: + type: string + preferredUsername: + description: preferredUsername is the list of attributes + whose values should be used as the preferred username. + LDAP standard login attribute is "uid" + type: array + items: + type: string + bindDN: + description: bindDN is an optional DN to bind with during + the search phase. + type: string + bindPassword: + description: bindPassword is an optional reference to a secret + by name containing a password to bind with during the search + phase. The key "bindPassword" is used to locate the data. + If specified and the secret or expected key is not found, + the identity provider is not honored. The namespace for + this secret is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + secret + type: string + ca: + description: ca is an optional reference to a config map by + name containing the PEM-encoded CA bundle. It is used as + a trust anchor to validate the TLS certificate presented + by the remote server. The key "ca.crt" is used to locate + the data. If specified and the config map or expected key + is not found, the identity provider is not honored. If the + specified ca data is not valid, the identity provider is + not honored. If empty, the default system roots are used. + The namespace for this config map is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + config map + type: string + insecure: + description: 'insecure, if true, indicates the connection + should not use TLS WARNING: Should not be set to `true` + with the URL scheme "ldaps://" as "ldaps://" URLs always attempt + to connect using TLS, even when `insecure` is set to `true` + When `true`, "ldap://" URLS connect insecurely. When `false`, + "ldap://" URLs are upgraded to a TLS connection using StartTLS + as specified in https://tools.ietf.org/html/rfc2830.' + type: boolean + url: + description: 'url is an RFC 2255 URL which specifies the LDAP + search parameters to use. The syntax of the URL is: ldap://host:port/basedn?attribute?scope?filter' + type: string + mappingMethod: + description: mappingMethod determines how identities from this + provider are mapped to users Defaults to "claim" + type: string + name: + description: 'name is used to qualify the identities returned + by this provider. - It MUST be unique and not shared by any + other identity provider used - It MUST be a valid path segment: + name cannot equal "." or ".." or contain "/" or "%" or ":" Ref: + https://godoc.org/github.com/openshift/origin/pkg/user/apis/user/validation#ValidateIdentityProviderName' + type: string + openID: + description: openID enables user authentication using OpenID credentials + type: object + properties: + ca: + description: ca is an optional reference to a config map by + name containing the PEM-encoded CA bundle. It is used as + a trust anchor to validate the TLS certificate presented + by the remote server. The key "ca.crt" is used to locate + the data. If specified and the config map or expected key + is not found, the identity provider is not honored. If the + specified ca data is not valid, the identity provider is + not honored. If empty, the default system roots are used. + The namespace for this config map is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + config map + type: string + claims: + description: claims mappings + type: object + properties: + email: + description: email is the list of claims whose values + should be used as the email address. Optional. If unspecified, + no email is set for the identity + type: array + items: + type: string + name: + description: name is the list of claims whose values should + be used as the display name. Optional. If unspecified, + no display name is set for the identity + type: array + items: + type: string + preferredUsername: + description: preferredUsername is the list of claims whose + values should be used as the preferred username. If + unspecified, the preferred username is determined from + the value of the sub claim + type: array + items: + type: string + clientID: + description: clientID is the oauth client ID + type: string + clientSecret: + description: clientSecret is a required reference to the secret + by name containing the oauth client secret. The key "clientSecret" + is used to locate the data. If the secret or expected key + is not found, the identity provider is not honored. The + namespace for this secret is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + secret + type: string + extraAuthorizeParameters: + description: extraAuthorizeParameters are any custom parameters + to add to the authorize request. + type: object + additionalProperties: + type: string + extraScopes: + description: extraScopes are any scopes to request in addition + to the standard "openid" scope. + type: array + items: + type: string + issuer: + description: issuer is the URL that the OpenID Provider asserts + as its Issuer Identifier. It must use the https scheme with + no query or fragment component. + type: string + requestHeader: + description: requestHeader enables user authentication using request + header credentials + type: object + properties: + ca: + description: ca is a required reference to a config map by + name containing the PEM-encoded CA bundle. It is used as + a trust anchor to validate the TLS certificate presented + by the remote server. Specifically, it allows verification + of incoming requests to prevent header spoofing. The key + "ca.crt" is used to locate the data. If the config map or + expected key is not found, the identity provider is not + honored. If the specified ca data is not valid, the identity + provider is not honored. The namespace for this config map + is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced + config map + type: string + challengeURL: + description: challengeURL is a URL to redirect unauthenticated + /authorize requests to Unauthenticated requests from OAuth + clients which expect WWW-Authenticate challenges will be + redirected here. ${url} is replaced with the current URL, + escaped to be safe in a query parameter https://www.example.com/sso-login?then=${url} + ${query} is replaced with the current query string https://www.example.com/auth-proxy/oauth/authorize?${query} + Required when challenge is set to true. + type: string + clientCommonNames: + description: clientCommonNames is an optional list of common + names to require a match from. If empty, any client certificate + validated against the clientCA bundle is considered authoritative. + type: array + items: + type: string + emailHeaders: + description: emailHeaders is the set of headers to check for + the email address + type: array + items: + type: string + headers: + description: headers is the set of headers to check for identity + information + type: array + items: + type: string + loginURL: + description: loginURL is a URL to redirect unauthenticated + /authorize requests to Unauthenticated requests from OAuth + clients which expect interactive logins will be redirected + here ${url} is replaced with the current URL, escaped to + be safe in a query parameter https://www.example.com/sso-login?then=${url} + ${query} is replaced with the current query string https://www.example.com/auth-proxy/oauth/authorize?${query} + Required when login is set to true. + type: string + nameHeaders: + description: nameHeaders is the set of headers to check for + the display name + type: array + items: + type: string + preferredUsernameHeaders: + description: preferredUsernameHeaders is the set of headers + to check for the preferred username + type: array + items: + type: string + type: + description: type identifies the identity provider type for this + entry. + type: string + templates: + description: templates allow you to customize pages like the login page. + type: object + properties: + error: + description: error is the name of a secret that specifies a go template + to use to render error pages during the authentication or grant + flow. The key "errors.html" is used to locate the template data. + If specified and the secret or expected key is not found, the + default error page is used. If the specified template is not valid, + the default error page is used. If unspecified, the default error + page is used. The namespace for this secret is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced secret + type: string + login: + description: login is the name of a secret that specifies a go template + to use to render the login page. The key "login.html" is used + to locate the template data. If specified and the secret or expected + key is not found, the default login page is used. If the specified + template is not valid, the default login page is used. If unspecified, + the default login page is used. The namespace for this secret + is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced secret + type: string + providerSelection: + description: providerSelection is the name of a secret that specifies + a go template to use to render the provider selection page. The + key "providers.html" is used to locate the template data. If specified + and the secret or expected key is not found, the default provider + selection page is used. If the specified template is not valid, + the default provider selection page is used. If unspecified, the + default provider selection page is used. The namespace for this + secret is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced secret + type: string + tokenConfig: + description: tokenConfig contains options for authorization and access + tokens + type: object + properties: + accessTokenInactivityTimeout: + description: accessTokenInactivityTimeout defines the token inactivity + timeout for tokens granted by any client. The value represents + the maximum amount of time that can occur between consecutive + uses of the token. Tokens become invalid if they are not used + within this temporal window. The user will need to acquire a new + token to regain access once a token times out. Takes valid time + duration string such as "5m", "1.5h" or "2h45m". The minimum allowed + value for duration is 300s (5 minutes). If the timeout is configured + per client, then that value takes precedence. If the timeout value + is not specified and the client does not override the value, then + tokens are valid until their lifetime. + type: string + accessTokenInactivityTimeoutSeconds: + description: 'accessTokenInactivityTimeoutSeconds - DEPRECATED: + setting this field has no effect.' + type: integer + format: int32 + accessTokenMaxAgeSeconds: + description: accessTokenMaxAgeSeconds defines the maximum age of + access tokens + type: integer + format: int32 + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_project.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_project.crd.yaml new file mode 100644 index 0000000000000..37541aaed4a0d --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_project.crd.yaml @@ -0,0 +1,65 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: projects.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + scope: Cluster + preserveUnknownFields: false + versions: + - name: v1 + served: true + storage: true + names: + kind: Project + listKind: ProjectList + plural: projects + singular: project + subresources: + status: {} + "validation": + "openAPIV3Schema": + description: Project holds cluster-wide information about Project. The canonical + name is `cluster` + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + projectRequestMessage: + description: projectRequestMessage is the string presented to a user + if they are unable to request a project via the projectrequest api + endpoint + type: string + projectRequestTemplate: + description: projectRequestTemplate is the template to use for creating + projects in response to projectrequest. This must point to a template + in 'openshift-config' namespace. It is optional. If it is not specified, + a default template is used. + type: object + properties: + name: + description: name is the metadata.name of the referenced project + request template + type: string + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_scheduler.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_scheduler.crd.yaml new file mode 100644 index 0000000000000..9652bf1f0a705 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_scheduler.crd.yaml @@ -0,0 +1,91 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: schedulers.config.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: config.openshift.io + scope: Cluster + preserveUnknownFields: false + names: + kind: Scheduler + singular: scheduler + plural: schedulers + listKind: SchedulerList + versions: + - name: v1 + served: true + storage: true + subresources: + status: {} + "validation": + "openAPIV3Schema": + description: Scheduler holds cluster-wide config information to run the Kubernetes + Scheduler and influence its placement decisions. The canonical name for this + config is `cluster`. + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + defaultNodeSelector: + description: 'defaultNodeSelector helps set the cluster-wide default + node selector to restrict pod placement to specific nodes. This is + applied to the pods created in all namespaces and creates an intersection + with any existing nodeSelectors already set on a pod, additionally + constraining that pod''s selector. For example, defaultNodeSelector: + "type=user-node,region=east" would set nodeSelector field in pod spec + to "type=user-node,region=east" to all pods created in all namespaces. + Namespaces having project-wide node selectors won''t be impacted even + if this field is set. This adds an annotation section to the namespace. + For example, if a new namespace is created with node-selector=''type=user-node,region=east'', + the annotation openshift.io/node-selector: type=user-node,region=east + gets added to the project. When the openshift.io/node-selector annotation + is set on the project the value is used in preference to the value + we are setting for defaultNodeSelector field. For instance, openshift.io/node-selector: + "type=user-node,region=west" means that the default of "type=user-node,region=east" + set in defaultNodeSelector would not be applied.' + type: string + mastersSchedulable: + description: 'MastersSchedulable allows masters nodes to be schedulable. + When this flag is turned on, all the master nodes in the cluster will + be made schedulable, so that workload pods can run on them. The default + value for this field is false, meaning none of the master nodes are + schedulable. Important Note: Once the workload pods start running + on the master nodes, extreme care must be taken to ensure that cluster-critical + control plane components are not impacted. Please turn on this field + after doing due diligence.' + type: boolean + policy: + description: policy is a reference to a ConfigMap containing scheduler + policy which has user specified predicates and priorities. If this + ConfigMap is not available scheduler will default to use DefaultAlgorithmProvider. + The namespace for this configmap is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced config + map + type: string + status: + description: status holds observed values from the cluster. They may not + be overridden. + type: object diff --git a/vendor/github.com/openshift/api/config/v1/doc.go b/vendor/github.com/openshift/api/config/v1/doc.go new file mode 100644 index 0000000000000..4ff5208f2c246 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/doc.go @@ -0,0 +1,8 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +kubebuilder:validation:Optional +// +groupName=config.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/config/v1/register.go b/vendor/github.com/openshift/api/config/v1/register.go new file mode 100644 index 0000000000000..35eace3701c2b --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/register.go @@ -0,0 +1,70 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "config.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &APIServer{}, + &APIServerList{}, + &Authentication{}, + &AuthenticationList{}, + &Build{}, + &BuildList{}, + &ClusterOperator{}, + &ClusterOperatorList{}, + &ClusterVersion{}, + &ClusterVersionList{}, + &Console{}, + &ConsoleList{}, + &DNS{}, + &DNSList{}, + &FeatureGate{}, + &FeatureGateList{}, + &Image{}, + &ImageList{}, + &Infrastructure{}, + &InfrastructureList{}, + &Ingress{}, + &IngressList{}, + &Network{}, + &NetworkList{}, + &OAuth{}, + &OAuthList{}, + &OperatorHub{}, + &OperatorHubList{}, + &Project{}, + &ProjectList{}, + &Proxy{}, + &ProxyList{}, + &Scheduler{}, + &SchedulerList{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/config/v1/stringsource.go b/vendor/github.com/openshift/api/config/v1/stringsource.go new file mode 100644 index 0000000000000..6a5718c1db271 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/stringsource.go @@ -0,0 +1,31 @@ +package v1 + +import "encoding/json" + +// UnmarshalJSON implements the json.Unmarshaller interface. +// If the value is a string, it sets the Value field of the StringSource. +// Otherwise, it is unmarshaled into the StringSourceSpec struct +func (s *StringSource) UnmarshalJSON(value []byte) error { + // If we can unmarshal to a simple string, just set the value + var simpleValue string + if err := json.Unmarshal(value, &simpleValue); err == nil { + s.Value = simpleValue + return nil + } + + // Otherwise do the full struct unmarshal + return json.Unmarshal(value, &s.StringSourceSpec) +} + +// MarshalJSON implements the json.Marshaller interface. +// If the StringSource contains only a string Value (or is empty), it is marshaled as a JSON string. +// Otherwise, the StringSourceSpec struct is marshaled as a JSON object. +func (s *StringSource) MarshalJSON() ([]byte, error) { + // If we have only a cleartext value set, do a simple string marshal + if s.StringSourceSpec == (StringSourceSpec{Value: s.Value}) { + return json.Marshal(s.Value) + } + + // Otherwise do the full struct marshal of the externalized bits + return json.Marshal(s.StringSourceSpec) +} diff --git a/vendor/github.com/openshift/api/config/v1/types.go b/vendor/github.com/openshift/api/config/v1/types.go new file mode 100644 index 0000000000000..14274842365f5 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types.go @@ -0,0 +1,312 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +// ConfigMapFileReference references a config map in a specific namespace. +// The namespace must be specified at the point of use. +type ConfigMapFileReference struct { + Name string `json:"name"` + // Key allows pointing to a specific key/value inside of the configmap. This is useful for logical file references. + Key string `json:"key,omitempty"` +} + +// ConfigMapNameReference references a config map in a specific namespace. +// The namespace must be specified at the point of use. +type ConfigMapNameReference struct { + // name is the metadata.name of the referenced config map + // +kubebuilder:validation:Required + // +required + Name string `json:"name"` +} + +// SecretNameReference references a secret in a specific namespace. +// The namespace must be specified at the point of use. +type SecretNameReference struct { + // name is the metadata.name of the referenced secret + // +kubebuilder:validation:Required + // +required + Name string `json:"name"` +} + +// HTTPServingInfo holds configuration for serving HTTP +type HTTPServingInfo struct { + // ServingInfo is the HTTP serving information + ServingInfo `json:",inline"` + // MaxRequestsInFlight is the number of concurrent requests allowed to the server. If zero, no limit. + MaxRequestsInFlight int64 `json:"maxRequestsInFlight"` + // RequestTimeoutSeconds is the number of seconds before requests are timed out. The default is 60 minutes, if + // -1 there is no limit on requests. + RequestTimeoutSeconds int64 `json:"requestTimeoutSeconds"` +} + +// ServingInfo holds information about serving web pages +type ServingInfo struct { + // BindAddress is the ip:port to serve on + BindAddress string `json:"bindAddress"` + // BindNetwork is the type of network to bind to - defaults to "tcp4", accepts "tcp", + // "tcp4", and "tcp6" + BindNetwork string `json:"bindNetwork"` + // CertInfo is the TLS cert info for serving secure traffic. + // this is anonymous so that we can inline it for serialization + CertInfo `json:",inline"` + // ClientCA is the certificate bundle for all the signers that you'll recognize for incoming client certificates + // +optional + ClientCA string `json:"clientCA,omitempty"` + // NamedCertificates is a list of certificates to use to secure requests to specific hostnames + NamedCertificates []NamedCertificate `json:"namedCertificates,omitempty"` + // MinTLSVersion is the minimum TLS version supported. + // Values must match version names from https://golang.org/pkg/crypto/tls/#pkg-constants + MinTLSVersion string `json:"minTLSVersion,omitempty"` + // CipherSuites contains an overridden list of ciphers for the server to support. + // Values must match cipher suite IDs from https://golang.org/pkg/crypto/tls/#pkg-constants + CipherSuites []string `json:"cipherSuites,omitempty"` +} + +// CertInfo relates a certificate with a private key +type CertInfo struct { + // CertFile is a file containing a PEM-encoded certificate + CertFile string `json:"certFile"` + // KeyFile is a file containing a PEM-encoded private key for the certificate specified by CertFile + KeyFile string `json:"keyFile"` +} + +// NamedCertificate specifies a certificate/key, and the names it should be served for +type NamedCertificate struct { + // Names is a list of DNS names this certificate should be used to secure + // A name can be a normal DNS name, or can contain leading wildcard segments. + Names []string `json:"names,omitempty"` + // CertInfo is the TLS cert info for serving secure traffic + CertInfo `json:",inline"` +} + +// LeaderElection provides information to elect a leader +type LeaderElection struct { + // disable allows leader election to be suspended while allowing a fully defaulted "normal" startup case. + Disable bool `json:"disable,omitempty"` + // namespace indicates which namespace the resource is in + Namespace string `json:"namespace,omitempty"` + // name indicates what name to use for the resource + Name string `json:"name,omitempty"` + + // leaseDuration is the duration that non-leader candidates will wait + // after observing a leadership renewal until attempting to acquire + // leadership of a led but unrenewed leader slot. This is effectively the + // maximum duration that a leader can be stopped before it is replaced + // by another candidate. This is only applicable if leader election is + // enabled. + // +nullable + LeaseDuration metav1.Duration `json:"leaseDuration"` + // renewDeadline is the interval between attempts by the acting master to + // renew a leadership slot before it stops leading. This must be less + // than or equal to the lease duration. This is only applicable if leader + // election is enabled. + // +nullable + RenewDeadline metav1.Duration `json:"renewDeadline"` + // retryPeriod is the duration the clients should wait between attempting + // acquisition and renewal of a leadership. This is only applicable if + // leader election is enabled. + // +nullable + RetryPeriod metav1.Duration `json:"retryPeriod"` +} + +// StringSource allows specifying a string inline, or externally via env var or file. +// When it contains only a string value, it marshals to a simple JSON string. +type StringSource struct { + // StringSourceSpec specifies the string value, or external location + StringSourceSpec `json:",inline"` +} + +// StringSourceSpec specifies a string value, or external location +type StringSourceSpec struct { + // Value specifies the cleartext value, or an encrypted value if keyFile is specified. + Value string `json:"value"` + + // Env specifies an envvar containing the cleartext value, or an encrypted value if the keyFile is specified. + Env string `json:"env"` + + // File references a file containing the cleartext value, or an encrypted value if a keyFile is specified. + File string `json:"file"` + + // KeyFile references a file containing the key to use to decrypt the value. + KeyFile string `json:"keyFile"` +} + +// RemoteConnectionInfo holds information necessary for establishing a remote connection +type RemoteConnectionInfo struct { + // URL is the remote URL to connect to + URL string `json:"url"` + // CA is the CA for verifying TLS connections + CA string `json:"ca"` + // CertInfo is the TLS client cert information to present + // this is anonymous so that we can inline it for serialization + CertInfo `json:",inline"` +} + +type AdmissionConfig struct { + PluginConfig map[string]AdmissionPluginConfig `json:"pluginConfig,omitempty"` + + // enabledPlugins is a list of admission plugins that must be on in addition to the default list. + // Some admission plugins are disabled by default, but certain configurations require them. This is fairly uncommon + // and can result in performance penalties and unexpected behavior. + EnabledAdmissionPlugins []string `json:"enabledPlugins,omitempty"` + + // disabledPlugins is a list of admission plugins that must be off. Putting something in this list + // is almost always a mistake and likely to result in cluster instability. + DisabledAdmissionPlugins []string `json:"disabledPlugins,omitempty"` +} + +// AdmissionPluginConfig holds the necessary configuration options for admission plugins +type AdmissionPluginConfig struct { + // Location is the path to a configuration file that contains the plugin's + // configuration + Location string `json:"location"` + + // Configuration is an embedded configuration object to be used as the plugin's + // configuration. If present, it will be used instead of the path to the configuration file. + // +nullable + // +kubebuilder:pruning:PreserveUnknownFields + Configuration runtime.RawExtension `json:"configuration"` +} + +type LogFormatType string + +type WebHookModeType string + +const ( + // LogFormatLegacy saves event in 1-line text format. + LogFormatLegacy LogFormatType = "legacy" + // LogFormatJson saves event in structured json format. + LogFormatJson LogFormatType = "json" + + // WebHookModeBatch indicates that the webhook should buffer audit events + // internally, sending batch updates either once a certain number of + // events have been received or a certain amount of time has passed. + WebHookModeBatch WebHookModeType = "batch" + // WebHookModeBlocking causes the webhook to block on every attempt to process + // a set of events. This causes requests to the API server to wait for a + // round trip to the external audit service before sending a response. + WebHookModeBlocking WebHookModeType = "blocking" +) + +// AuditConfig holds configuration for the audit capabilities +type AuditConfig struct { + // If this flag is set, audit log will be printed in the logs. + // The logs contains, method, user and a requested URL. + Enabled bool `json:"enabled"` + // All requests coming to the apiserver will be logged to this file. + AuditFilePath string `json:"auditFilePath"` + // Maximum number of days to retain old log files based on the timestamp encoded in their filename. + MaximumFileRetentionDays int32 `json:"maximumFileRetentionDays"` + // Maximum number of old log files to retain. + MaximumRetainedFiles int32 `json:"maximumRetainedFiles"` + // Maximum size in megabytes of the log file before it gets rotated. Defaults to 100MB. + MaximumFileSizeMegabytes int32 `json:"maximumFileSizeMegabytes"` + + // PolicyFile is a path to the file that defines the audit policy configuration. + PolicyFile string `json:"policyFile"` + // PolicyConfiguration is an embedded policy configuration object to be used + // as the audit policy configuration. If present, it will be used instead of + // the path to the policy file. + // +nullable + // +kubebuilder:pruning:PreserveUnknownFields + PolicyConfiguration runtime.RawExtension `json:"policyConfiguration"` + + // Format of saved audits (legacy or json). + LogFormat LogFormatType `json:"logFormat"` + + // Path to a .kubeconfig formatted file that defines the audit webhook configuration. + WebHookKubeConfig string `json:"webHookKubeConfig"` + // Strategy for sending audit events (block or batch). + WebHookMode WebHookModeType `json:"webHookMode"` +} + +// EtcdConnectionInfo holds information necessary for connecting to an etcd server +type EtcdConnectionInfo struct { + // URLs are the URLs for etcd + URLs []string `json:"urls,omitempty"` + // CA is a file containing trusted roots for the etcd server certificates + CA string `json:"ca"` + // CertInfo is the TLS client cert information for securing communication to etcd + // this is anonymous so that we can inline it for serialization + CertInfo `json:",inline"` +} + +type EtcdStorageConfig struct { + EtcdConnectionInfo `json:",inline"` + + // StoragePrefix is the path within etcd that the OpenShift resources will + // be rooted under. This value, if changed, will mean existing objects in etcd will + // no longer be located. + StoragePrefix string `json:"storagePrefix"` +} + +// GenericAPIServerConfig is an inline-able struct for aggregated apiservers that need to store data in etcd +type GenericAPIServerConfig struct { + // servingInfo describes how to start serving + ServingInfo HTTPServingInfo `json:"servingInfo"` + + // corsAllowedOrigins + CORSAllowedOrigins []string `json:"corsAllowedOrigins"` + + // auditConfig describes how to configure audit information + AuditConfig AuditConfig `json:"auditConfig"` + + // storageConfig contains information about how to use + StorageConfig EtcdStorageConfig `json:"storageConfig"` + + // admissionConfig holds information about how to configure admission. + AdmissionConfig AdmissionConfig `json:"admission"` + + KubeClientConfig KubeClientConfig `json:"kubeClientConfig"` +} + +type KubeClientConfig struct { + // kubeConfig is a .kubeconfig filename for going to the owning kube-apiserver. Empty uses an in-cluster-config + KubeConfig string `json:"kubeConfig"` + + // connectionOverrides specifies client overrides for system components to loop back to this master. + ConnectionOverrides ClientConnectionOverrides `json:"connectionOverrides"` +} + +type ClientConnectionOverrides struct { + // acceptContentTypes defines the Accept header sent by clients when connecting to a server, overriding the + // default value of 'application/json'. This field will control all connections to the server used by a particular + // client. + AcceptContentTypes string `json:"acceptContentTypes"` + // contentType is the content type used when sending data to the server from this client. + ContentType string `json:"contentType"` + + // qps controls the number of queries per second allowed for this connection. + QPS float32 `json:"qps"` + // burst allows extra queries to accumulate when a client is exceeding its rate. + Burst int32 `json:"burst"` +} + +// GenericControllerConfig provides information to configure a controller +type GenericControllerConfig struct { + // ServingInfo is the HTTP serving information for the controller's endpoints + ServingInfo HTTPServingInfo `json:"servingInfo"` + + // leaderElection provides information to elect a leader. Only override this if you have a specific need + LeaderElection LeaderElection `json:"leaderElection"` + + // authentication allows configuration of authentication for the endpoints + Authentication DelegatedAuthentication `json:"authentication"` + // authorization allows configuration of authentication for the endpoints + Authorization DelegatedAuthorization `json:"authorization"` +} + +// DelegatedAuthentication allows authentication to be disabled. +type DelegatedAuthentication struct { + // disabled indicates that authentication should be disabled. By default it will use delegated authentication. + Disabled bool `json:"disabled,omitempty"` +} + +// DelegatedAuthorization allows authorization to be disabled. +type DelegatedAuthorization struct { + // disabled indicates that authorization should be disabled. By default it will use delegated authorization. + Disabled bool `json:"disabled,omitempty"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_apiserver.go b/vendor/github.com/openshift/api/config/v1/types_apiserver.go new file mode 100644 index 0000000000000..42268db39b53b --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_apiserver.go @@ -0,0 +1,158 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// APIServer holds configuration (like serving certificates, client CA and CORS domains) +// shared by all API servers in the system, among them especially kube-apiserver +// and openshift-apiserver. The canonical name of an instance is 'cluster'. +type APIServer struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + // spec holds user settable values for configuration + // +kubebuilder:validation:Required + // +required + Spec APIServerSpec `json:"spec"` + // status holds observed values from the cluster. They may not be overridden. + // +optional + Status APIServerStatus `json:"status"` +} + +type APIServerSpec struct { + // servingCert is the TLS cert info for serving secure traffic. If not specified, operator managed certificates + // will be used for serving secure traffic. + // +optional + ServingCerts APIServerServingCerts `json:"servingCerts"` + // clientCA references a ConfigMap containing a certificate bundle for the signers that will be recognized for + // incoming client certificates in addition to the operator managed signers. If this is empty, then only operator managed signers are valid. + // You usually only have to set this if you have your own PKI you wish to honor client certificates from. + // The ConfigMap must exist in the openshift-config namespace and contain the following required fields: + // - ConfigMap.Data["ca-bundle.crt"] - CA bundle. + // +optional + ClientCA ConfigMapNameReference `json:"clientCA"` + // additionalCORSAllowedOrigins lists additional, user-defined regular expressions describing hosts for which the + // API server allows access using the CORS headers. This may be needed to access the API and the integrated OAuth + // server from JavaScript applications. + // The values are regular expressions that correspond to the Golang regular expression language. + // +optional + AdditionalCORSAllowedOrigins []string `json:"additionalCORSAllowedOrigins,omitempty"` + // encryption allows the configuration of encryption of resources at the datastore layer. + // +optional + Encryption APIServerEncryption `json:"encryption"` + // tlsSecurityProfile specifies settings for TLS connections for externally exposed servers. + // + // If unset, a default (which may change between releases) is chosen. Note that only Old and + // Intermediate profiles are currently supported, and the maximum available MinTLSVersions + // is VersionTLS12. + // +optional + TLSSecurityProfile *TLSSecurityProfile `json:"tlsSecurityProfile,omitempty"` + // audit specifies the settings for audit configuration to be applied to all OpenShift-provided + // API servers in the cluster. + // +optional + // +kubebuilder:default={profile: Default} + Audit Audit `json:"audit"` +} + +// AuditProfileType defines the audit policy profile type. +// +kubebuilder:validation:Enum=Default;WriteRequestBodies;AllRequestBodies +type AuditProfileType string + +const ( + // "Default" is the existing default audit configuration policy. + AuditProfileDefaultType AuditProfileType = "Default" + + // "WriteRequestBodies" is similar to Default but it logs request and response + // HTTP payloads for write requests (create, update, patch) + WriteRequestBodiesAuditProfileType AuditProfileType = "WriteRequestBodies" + + // "AllRequestBodies" is similar to WriteRequestBodies, but also logs request + // and response HTTP payloads for read requests (get, list). + AllRequestBodiesAuditProfileType AuditProfileType = "AllRequestBodies" +) + +type Audit struct { + // profile specifies the name of the desired audit policy configuration to be deployed to + // all OpenShift-provided API servers in the cluster. + // + // The following profiles are provided: + // - Default: the existing default policy. + // - WriteRequestBodies: like 'Default', but logs request and response HTTP payloads for + // write requests (create, update, patch). + // - AllRequestBodies: like 'WriteRequestBodies', but also logs request and response + // HTTP payloads for read requests (get, list). + // + // If unset, the 'Default' profile is used as the default. + // +kubebuilder:default=Default + Profile AuditProfileType `json:"profile,omitempty"` +} + +type APIServerServingCerts struct { + // namedCertificates references secrets containing the TLS cert info for serving secure traffic to specific hostnames. + // If no named certificates are provided, or no named certificates match the server name as understood by a client, + // the defaultServingCertificate will be used. + // +optional + NamedCertificates []APIServerNamedServingCert `json:"namedCertificates,omitempty"` +} + +// APIServerNamedServingCert maps a server DNS name, as understood by a client, to a certificate. +type APIServerNamedServingCert struct { + // names is a optional list of explicit DNS names (leading wildcards allowed) that should use this certificate to + // serve secure traffic. If no names are provided, the implicit names will be extracted from the certificates. + // Exact names trump over wildcard names. Explicit names defined here trump over extracted implicit names. + // +optional + Names []string `json:"names,omitempty"` + // servingCertificate references a kubernetes.io/tls type secret containing the TLS cert info for serving secure traffic. + // The secret must exist in the openshift-config namespace and contain the following required fields: + // - Secret.Data["tls.key"] - TLS private key. + // - Secret.Data["tls.crt"] - TLS certificate. + ServingCertificate SecretNameReference `json:"servingCertificate"` +} + +type APIServerEncryption struct { + // type defines what encryption type should be used to encrypt resources at the datastore layer. + // When this field is unset (i.e. when it is set to the empty string), identity is implied. + // The behavior of unset can and will change over time. Even if encryption is enabled by default, + // the meaning of unset may change to a different encryption type based on changes in best practices. + // + // When encryption is enabled, all sensitive resources shipped with the platform are encrypted. + // This list of sensitive resources can and will change over time. The current authoritative list is: + // + // 1. secrets + // 2. configmaps + // 3. routes.route.openshift.io + // 4. oauthaccesstokens.oauth.openshift.io + // 5. oauthauthorizetokens.oauth.openshift.io + // + // +unionDiscriminator + // +optional + Type EncryptionType `json:"type,omitempty"` +} + +// +kubebuilder:validation:Enum="";identity;aescbc +type EncryptionType string + +const ( + // identity refers to a type where no encryption is performed at the datastore layer. + // Resources are written as-is without encryption. + EncryptionTypeIdentity EncryptionType = "identity" + + // aescbc refers to a type where AES-CBC with PKCS#7 padding and a 32-byte key + // is used to perform encryption at the datastore layer. + EncryptionTypeAESCBC EncryptionType = "aescbc" +) + +type APIServerStatus struct { +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type APIServerList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + Items []APIServer `json:"items"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_authentication.go b/vendor/github.com/openshift/api/config/v1/types_authentication.go new file mode 100644 index 0000000000000..131af5a0ca961 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_authentication.go @@ -0,0 +1,145 @@ +package v1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Authentication specifies cluster-wide settings for authentication (like OAuth and +// webhook token authenticators). The canonical name of an instance is `cluster`. +type Authentication struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec holds user settable values for configuration + // +kubebuilder:validation:Required + // +required + Spec AuthenticationSpec `json:"spec"` + // status holds observed values from the cluster. They may not be overridden. + // +optional + Status AuthenticationStatus `json:"status"` +} + +type AuthenticationSpec struct { + // type identifies the cluster managed, user facing authentication mode in use. + // Specifically, it manages the component that responds to login attempts. + // The default is IntegratedOAuth. + // +optional + Type AuthenticationType `json:"type"` + + // oauthMetadata contains the discovery endpoint data for OAuth 2.0 + // Authorization Server Metadata for an external OAuth server. + // This discovery document can be viewed from its served location: + // oc get --raw '/.well-known/oauth-authorization-server' + // For further details, see the IETF Draft: + // https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2 + // If oauthMetadata.name is non-empty, this value has precedence + // over any metadata reference stored in status. + // The key "oauthMetadata" is used to locate the data. + // If specified and the config map or expected key is not found, no metadata is served. + // If the specified metadata is not valid, no metadata is served. + // The namespace for this config map is openshift-config. + // +optional + OAuthMetadata ConfigMapNameReference `json:"oauthMetadata"` + + // webhookTokenAuthenticators is DEPRECATED, setting it has no effect. + WebhookTokenAuthenticators []DeprecatedWebhookTokenAuthenticator `json:"webhookTokenAuthenticators,omitempty"` + + // webhookTokenAuthenticator configures a remote token reviewer. + // These remote authentication webhooks can be used to verify bearer tokens + // via the tokenreviews.authentication.k8s.io REST API. This is required to + // honor bearer tokens that are provisioned by an external authentication service. + // +optional + WebhookTokenAuthenticator *WebhookTokenAuthenticator `json:"webhookTokenAuthenticator,omitempty"` + + // serviceAccountIssuer is the identifier of the bound service account token + // issuer. + // The default is https://kubernetes.default.svc + // +optional + ServiceAccountIssuer string `json:"serviceAccountIssuer"` +} + +type AuthenticationStatus struct { + // integratedOAuthMetadata contains the discovery endpoint data for OAuth 2.0 + // Authorization Server Metadata for the in-cluster integrated OAuth server. + // This discovery document can be viewed from its served location: + // oc get --raw '/.well-known/oauth-authorization-server' + // For further details, see the IETF Draft: + // https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2 + // This contains the observed value based on cluster state. + // An explicitly set value in spec.oauthMetadata has precedence over this field. + // This field has no meaning if authentication spec.type is not set to IntegratedOAuth. + // The key "oauthMetadata" is used to locate the data. + // If the config map or expected key is not found, no metadata is served. + // If the specified metadata is not valid, no metadata is served. + // The namespace for this config map is openshift-config-managed. + IntegratedOAuthMetadata ConfigMapNameReference `json:"integratedOAuthMetadata"` + + // TODO if we add support for an in-cluster operator managed Keycloak instance + // KeycloakOAuthMetadata ConfigMapNameReference `json:"keycloakOAuthMetadata"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type AuthenticationList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []Authentication `json:"items"` +} + +type AuthenticationType string + +const ( + // None means that no cluster managed authentication system is in place. + // Note that user login will only work if a manually configured system is in place and + // referenced in authentication spec via oauthMetadata and webhookTokenAuthenticators. + AuthenticationTypeNone AuthenticationType = "None" + + // IntegratedOAuth refers to the cluster managed OAuth server. + // It is configured via the top level OAuth config. + AuthenticationTypeIntegratedOAuth AuthenticationType = "IntegratedOAuth" + + // TODO if we add support for an in-cluster operator managed Keycloak instance + // AuthenticationTypeKeycloak AuthenticationType = "Keycloak" +) + +// deprecatedWebhookTokenAuthenticator holds the necessary configuration options for a remote token authenticator. +// It's the same as WebhookTokenAuthenticator but it's missing the 'required' validation on KubeConfig field. +type DeprecatedWebhookTokenAuthenticator struct { + // kubeConfig contains kube config file data which describes how to access the remote webhook service. + // For further details, see: + // https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication + // The key "kubeConfig" is used to locate the data. + // If the secret or expected key is not found, the webhook is not honored. + // If the specified kube config data is not valid, the webhook is not honored. + // The namespace for this secret is determined by the point of use. + KubeConfig SecretNameReference `json:"kubeConfig"` +} + +// webhookTokenAuthenticator holds the necessary configuration options for a remote token authenticator +type WebhookTokenAuthenticator struct { + // kubeConfig references a secret that contains kube config file data which + // describes how to access the remote webhook service. + // The namespace for the referenced secret is openshift-config. + // + // For further details, see: + // + // https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication + // + // The key "kubeConfig" is used to locate the data. + // If the secret or expected key is not found, the webhook is not honored. + // If the specified kube config data is not valid, the webhook is not honored. + // +kubebuilder:validation:Required + // +required + KubeConfig SecretNameReference `json:"kubeConfig"` +} + +const ( + // OAuthMetadataKey is the key for the oauth authorization server metadata + OAuthMetadataKey = "oauthMetadata" + + // KubeConfigKey is the key for the kube config file data in a secret + KubeConfigKey = "kubeConfig" +) diff --git a/vendor/github.com/openshift/api/config/v1/types_build.go b/vendor/github.com/openshift/api/config/v1/types_build.go new file mode 100644 index 0000000000000..16882e1caf0ba --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_build.go @@ -0,0 +1,116 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Build configures the behavior of OpenShift builds for the entire cluster. +// This includes default settings that can be overridden in BuildConfig objects, and overrides which are applied to all builds. +// +// The canonical name is "cluster" +type Build struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // Spec holds user-settable values for the build controller configuration + // +kubebuilder:validation:Required + // +required + Spec BuildSpec `json:"spec"` +} + +type BuildSpec struct { + // AdditionalTrustedCA is a reference to a ConfigMap containing additional CAs that + // should be trusted for image pushes and pulls during builds. + // The namespace for this config map is openshift-config. + // + // DEPRECATED: Additional CAs for image pull and push should be set on + // image.config.openshift.io/cluster instead. + // + // +optional + AdditionalTrustedCA ConfigMapNameReference `json:"additionalTrustedCA"` + // BuildDefaults controls the default information for Builds + // +optional + BuildDefaults BuildDefaults `json:"buildDefaults"` + // BuildOverrides controls override settings for builds + // +optional + BuildOverrides BuildOverrides `json:"buildOverrides"` +} + +type BuildDefaults struct { + // DefaultProxy contains the default proxy settings for all build operations, including image pull/push + // and source download. + // + // Values can be overrode by setting the `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY` environment variables + // in the build config's strategy. + // +optional + DefaultProxy *ProxySpec `json:"defaultProxy,omitempty"` + + // GitProxy contains the proxy settings for git operations only. If set, this will override + // any Proxy settings for all git commands, such as git clone. + // + // Values that are not set here will be inherited from DefaultProxy. + // +optional + GitProxy *ProxySpec `json:"gitProxy,omitempty"` + + // Env is a set of default environment variables that will be applied to the + // build if the specified variables do not exist on the build + // +optional + Env []corev1.EnvVar `json:"env,omitempty"` + + // ImageLabels is a list of docker labels that are applied to the resulting image. + // User can override a default label by providing a label with the same name in their + // Build/BuildConfig. + // +optional + ImageLabels []ImageLabel `json:"imageLabels,omitempty"` + + // Resources defines resource requirements to execute the build. + // +optional + Resources corev1.ResourceRequirements `json:"resources"` +} + +type ImageLabel struct { + // Name defines the name of the label. It must have non-zero length. + Name string `json:"name"` + + // Value defines the literal value of the label. + // +optional + Value string `json:"value,omitempty"` +} + +type BuildOverrides struct { + // ImageLabels is a list of docker labels that are applied to the resulting image. + // If user provided a label in their Build/BuildConfig with the same name as one in this + // list, the user's label will be overwritten. + // +optional + ImageLabels []ImageLabel `json:"imageLabels,omitempty"` + + // NodeSelector is a selector which must be true for the build pod to fit on a node + // +optional + NodeSelector map[string]string `json:"nodeSelector,omitempty"` + + // Tolerations is a list of Tolerations that will override any existing + // tolerations set on a build pod. + // +optional + Tolerations []corev1.Toleration `json:"tolerations,omitempty"` + + // ForcePull overrides, if set, the equivalent value in the builds, + // i.e. false disables force pull for all builds, + // true enables force pull for all builds, + // independently of what each build specifies itself + // +optional + ForcePull *bool `json:"forcePull,omitempty"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type BuildList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []Build `json:"items"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_cluster_operator.go b/vendor/github.com/openshift/api/config/v1/types_cluster_operator.go new file mode 100644 index 0000000000000..299adb1c9f0da --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_cluster_operator.go @@ -0,0 +1,185 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterOperator is the Custom Resource object which holds the current state +// of an operator. This object is used by operators to convey their state to +// the rest of the cluster. +type ClusterOperator struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata"` + + // spec holds configuration that could apply to any operator. + // +kubebuilder:validation:Required + // +required + Spec ClusterOperatorSpec `json:"spec"` + + // status holds the information about the state of an operator. It is consistent with status information across + // the Kubernetes ecosystem. + // +optional + Status ClusterOperatorStatus `json:"status"` +} + +// ClusterOperatorSpec is empty for now, but you could imagine holding information like "pause". +type ClusterOperatorSpec struct { +} + +// ClusterOperatorStatus provides information about the status of the operator. +// +k8s:deepcopy-gen=true +type ClusterOperatorStatus struct { + // conditions describes the state of the operator's managed and monitored components. + // +patchMergeKey=type + // +patchStrategy=merge + // +optional + Conditions []ClusterOperatorStatusCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"` + + // versions is a slice of operator and operand version tuples. Operators which manage multiple operands will have multiple + // operand entries in the array. Available operators must report the version of the operator itself with the name "operator". + // An operator reports a new "operator" version when it has rolled out the new version to all of its operands. + // +optional + Versions []OperandVersion `json:"versions,omitempty"` + + // relatedObjects is a list of objects that are "interesting" or related to this operator. Common uses are: + // 1. the detailed resource driving the operator + // 2. operator namespaces + // 3. operand namespaces + // +optional + RelatedObjects []ObjectReference `json:"relatedObjects,omitempty"` + + // extension contains any additional status information specific to the + // operator which owns this status object. + // +nullable + // +optional + // +kubebuilder:pruning:PreserveUnknownFields + Extension runtime.RawExtension `json:"extension"` +} + +type OperandVersion struct { + // name is the name of the particular operand this version is for. It usually matches container images, not operators. + // +kubebuilder:validation:Required + // +required + Name string `json:"name"` + + // version indicates which version of a particular operand is currently being managed. It must always match the Available + // operand. If 1.0.0 is Available, then this must indicate 1.0.0 even if the operator is trying to rollout + // 1.1.0 + // +kubebuilder:validation:Required + // +required + Version string `json:"version"` +} + +// ObjectReference contains enough information to let you inspect or modify the referred object. +type ObjectReference struct { + // group of the referent. + // +kubebuilder:validation:Required + // +required + Group string `json:"group"` + // resource of the referent. + // +kubebuilder:validation:Required + // +required + Resource string `json:"resource"` + // namespace of the referent. + // +optional + Namespace string `json:"namespace,omitempty"` + // name of the referent. + // +kubebuilder:validation:Required + // +required + Name string `json:"name"` +} + +type ConditionStatus string + +// These are valid condition statuses. "ConditionTrue" means a resource is in the condition. +// "ConditionFalse" means a resource is not in the condition. "ConditionUnknown" means kubernetes +// can't decide if a resource is in the condition or not. In the future, we could add other +// intermediate conditions, e.g. ConditionDegraded. +const ( + ConditionTrue ConditionStatus = "True" + ConditionFalse ConditionStatus = "False" + ConditionUnknown ConditionStatus = "Unknown" +) + +// ClusterOperatorStatusCondition represents the state of the operator's +// managed and monitored components. +// +k8s:deepcopy-gen=true +type ClusterOperatorStatusCondition struct { + // type specifies the aspect reported by this condition. + // +kubebuilder:validation:Required + // +required + Type ClusterStatusConditionType `json:"type"` + + // status of the condition, one of True, False, Unknown. + // +kubebuilder:validation:Required + // +required + Status ConditionStatus `json:"status"` + + // lastTransitionTime is the time of the last update to the current status property. + // +kubebuilder:validation:Required + // +required + LastTransitionTime metav1.Time `json:"lastTransitionTime"` + + // reason is the CamelCase reason for the condition's current status. + // +optional + Reason string `json:"reason,omitempty"` + + // message provides additional information about the current condition. + // This is only to be consumed by humans. It may contain Line Feed + // characters (U+000A), which should be rendered as new lines. + // +optional + Message string `json:"message,omitempty"` +} + +// ClusterStatusConditionType is an aspect of operator state. +type ClusterStatusConditionType string + +const ( + // Available indicates that the operand (eg: openshift-apiserver for the + // openshift-apiserver-operator), is functional and available in the cluster. + OperatorAvailable ClusterStatusConditionType = "Available" + + // Progressing indicates that the operator is actively rolling out new code, + // propagating config changes, or otherwise moving from one steady state to + // another. Operators should not report progressing when they are reconciling + // a previously known state. + OperatorProgressing ClusterStatusConditionType = "Progressing" + + // Degraded indicates that the operator's current state does not match its + // desired state over a period of time resulting in a lower quality of service. + // The period of time may vary by component, but a Degraded state represents + // persistent observation of a condition. As a result, a component should not + // oscillate in and out of Degraded state. A service may be Available even + // if its degraded. For example, your service may desire 3 running pods, but 1 + // pod is crash-looping. The service is Available but Degraded because it + // may have a lower quality of service. A component may be Progressing but + // not Degraded because the transition from one state to another does not + // persist over a long enough period to report Degraded. A service should not + // report Degraded during the course of a normal upgrade. A service may report + // Degraded in response to a persistent infrastructure failure that requires + // administrator intervention. For example, if a control plane host is unhealthy + // and must be replaced. An operator should report Degraded if unexpected + // errors occur over a period, but the expectation is that all unexpected errors + // are handled as operators mature. + OperatorDegraded ClusterStatusConditionType = "Degraded" + + // Upgradeable indicates whether the operator is in a state that is safe to upgrade. When status is `False` + // administrators should not upgrade their cluster and the message field should contain a human readable description + // of what the administrator should do to allow the operator to successfully update. A missing condition, True, + // and Unknown are all treated by the CVO as allowing an upgrade. + OperatorUpgradeable ClusterStatusConditionType = "Upgradeable" +) + +// ClusterOperatorList is a list of OperatorStatus resources. +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type ClusterOperatorList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []ClusterOperator `json:"items"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_cluster_version.go b/vendor/github.com/openshift/api/config/v1/types_cluster_version.go new file mode 100644 index 0000000000000..58a65228da4e3 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_cluster_version.go @@ -0,0 +1,294 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterVersion is the configuration for the ClusterVersionOperator. This is where +// parameters related to automatic updates can be set. +type ClusterVersion struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec is the desired state of the cluster version - the operator will work + // to ensure that the desired version is applied to the cluster. + // +kubebuilder:validation:Required + // +required + Spec ClusterVersionSpec `json:"spec"` + // status contains information about the available updates and any in-progress + // updates. + // +optional + Status ClusterVersionStatus `json:"status"` +} + +// ClusterVersionSpec is the desired version state of the cluster. It includes +// the version the cluster should be at, how the cluster is identified, and +// where the cluster should look for version updates. +// +k8s:deepcopy-gen=true +type ClusterVersionSpec struct { + // clusterID uniquely identifies this cluster. This is expected to be + // an RFC4122 UUID value (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx in + // hexadecimal values). This is a required field. + // +kubebuilder:validation:Required + // +required + ClusterID ClusterID `json:"clusterID"` + + // desiredUpdate is an optional field that indicates the desired value of + // the cluster version. Setting this value will trigger an upgrade (if + // the current version does not match the desired version). The set of + // recommended update values is listed as part of available updates in + // status, and setting values outside that range may cause the upgrade + // to fail. You may specify the version field without setting image if + // an update exists with that version in the availableUpdates or history. + // + // If an upgrade fails the operator will halt and report status + // about the failing component. Setting the desired update value back to + // the previous version will cause a rollback to be attempted. Not all + // rollbacks will succeed. + // + // +optional + DesiredUpdate *Update `json:"desiredUpdate,omitempty"` + + // upstream may be used to specify the preferred update server. By default + // it will use the appropriate update server for the cluster and region. + // + // +optional + Upstream URL `json:"upstream,omitempty"` + // channel is an identifier for explicitly requesting that a non-default + // set of updates be applied to this cluster. The default channel will be + // contain stable updates that are appropriate for production clusters. + // + // +optional + Channel string `json:"channel,omitempty"` + + // overrides is list of overides for components that are managed by + // cluster version operator. Marking a component unmanaged will prevent + // the operator from creating or updating the object. + // +optional + Overrides []ComponentOverride `json:"overrides,omitempty"` +} + +// ClusterVersionStatus reports the status of the cluster versioning, +// including any upgrades that are in progress. The current field will +// be set to whichever version the cluster is reconciling to, and the +// conditions array will report whether the update succeeded, is in +// progress, or is failing. +// +k8s:deepcopy-gen=true +type ClusterVersionStatus struct { + // desired is the version that the cluster is reconciling towards. + // If the cluster is not yet fully initialized desired will be set + // with the information available, which may be an image or a tag. + // +kubebuilder:validation:Required + // +required + Desired Release `json:"desired"` + + // history contains a list of the most recent versions applied to the cluster. + // This value may be empty during cluster startup, and then will be updated + // when a new update is being applied. The newest update is first in the + // list and it is ordered by recency. Updates in the history have state + // Completed if the rollout completed - if an update was failing or halfway + // applied the state will be Partial. Only a limited amount of update history + // is preserved. + // +optional + History []UpdateHistory `json:"history,omitempty"` + + // observedGeneration reports which version of the spec is being synced. + // If this value is not equal to metadata.generation, then the desired + // and conditions fields may represent a previous version. + // +kubebuilder:validation:Required + // +required + ObservedGeneration int64 `json:"observedGeneration"` + + // versionHash is a fingerprint of the content that the cluster will be + // updated with. It is used by the operator to avoid unnecessary work + // and is for internal use only. + // +kubebuilder:validation:Required + // +required + VersionHash string `json:"versionHash"` + + // conditions provides information about the cluster version. The condition + // "Available" is set to true if the desiredUpdate has been reached. The + // condition "Progressing" is set to true if an update is being applied. + // The condition "Degraded" is set to true if an update is currently blocked + // by a temporary or permanent error. Conditions are only valid for the + // current desiredUpdate when metadata.generation is equal to + // status.generation. + // +optional + Conditions []ClusterOperatorStatusCondition `json:"conditions,omitempty"` + + // availableUpdates contains the list of updates that are appropriate + // for this cluster. This list may be empty if no updates are recommended, + // if the update service is unavailable, or if an invalid channel has + // been specified. + // +nullable + // +kubebuilder:validation:Required + // +required + AvailableUpdates []Release `json:"availableUpdates"` +} + +// UpdateState is a constant representing whether an update was successfully +// applied to the cluster or not. +type UpdateState string + +const ( + // CompletedUpdate indicates an update was successfully applied + // to the cluster (all resource updates were successful). + CompletedUpdate UpdateState = "Completed" + // PartialUpdate indicates an update was never completely applied + // or is currently being applied. + PartialUpdate UpdateState = "Partial" +) + +// UpdateHistory is a single attempted update to the cluster. +type UpdateHistory struct { + // state reflects whether the update was fully applied. The Partial state + // indicates the update is not fully applied, while the Completed state + // indicates the update was successfully rolled out at least once (all + // parts of the update successfully applied). + // +kubebuilder:validation:Required + // +required + State UpdateState `json:"state"` + + // startedTime is the time at which the update was started. + // +kubebuilder:validation:Required + // +required + StartedTime metav1.Time `json:"startedTime"` + // completionTime, if set, is when the update was fully applied. The update + // that is currently being applied will have a null completion time. + // Completion time will always be set for entries that are not the current + // update (usually to the started time of the next update). + // +kubebuilder:validation:Required + // +required + // +nullable + CompletionTime *metav1.Time `json:"completionTime"` + + // version is a semantic versioning identifying the update version. If the + // requested image does not define a version, or if a failure occurs + // retrieving the image, this value may be empty. + // + // +optional + Version string `json:"version"` + // image is a container image location that contains the update. This value + // is always populated. + // +kubebuilder:validation:Required + // +required + Image string `json:"image"` + // verified indicates whether the provided update was properly verified + // before it was installed. If this is false the cluster may not be trusted. + // +kubebuilder:validation:Required + // +required + Verified bool `json:"verified"` +} + +// ClusterID is string RFC4122 uuid. +type ClusterID string + +// ComponentOverride allows overriding cluster version operator's behavior +// for a component. +// +k8s:deepcopy-gen=true +type ComponentOverride struct { + // kind indentifies which object to override. + // +kubebuilder:validation:Required + // +required + Kind string `json:"kind"` + // group identifies the API group that the kind is in. + // +kubebuilder:validation:Required + // +required + Group string `json:"group"` + + // namespace is the component's namespace. If the resource is cluster + // scoped, the namespace should be empty. + // +kubebuilder:validation:Required + // +required + Namespace string `json:"namespace"` + // name is the component's name. + // +kubebuilder:validation:Required + // +required + Name string `json:"name"` + + // unmanaged controls if cluster version operator should stop managing the + // resources in this cluster. + // Default: false + // +kubebuilder:validation:Required + // +required + Unmanaged bool `json:"unmanaged"` +} + +// URL is a thin wrapper around string that ensures the string is a valid URL. +type URL string + +// Update represents an administrator update request. +// +k8s:deepcopy-gen=true +type Update struct { + // version is a semantic versioning identifying the update version. When this + // field is part of spec, version is optional if image is specified. + // + // +optional + Version string `json:"version"` + // image is a container image location that contains the update. When this + // field is part of spec, image is optional if version is specified and the + // availableUpdates field contains a matching version. + // + // +optional + Image string `json:"image"` + // force allows an administrator to update to an image that has failed + // verification, does not appear in the availableUpdates list, or otherwise + // would be blocked by normal protections on update. This option should only + // be used when the authenticity of the provided image has been verified out + // of band because the provided image will run with full administrative access + // to the cluster. Do not use this flag with images that comes from unknown + // or potentially malicious sources. + // + // This flag does not override other forms of consistency checking that are + // required before a new update is deployed. + // + // +optional + Force bool `json:"force"` +} + +// Release represents an OpenShift release image and associated metadata. +// +k8s:deepcopy-gen=true +type Release struct { + // version is a semantic versioning identifying the update version. When this + // field is part of spec, version is optional if image is specified. + // +required + Version string `json:"version"` + + // image is a container image location that contains the update. When this + // field is part of spec, image is optional if version is specified and the + // availableUpdates field contains a matching version. + // +required + Image string `json:"image"` + + // url contains information about this release. This URL is set by + // the 'url' metadata property on a release or the metadata returned by + // the update API and should be displayed as a link in user + // interfaces. The URL field may not be set for test or nightly + // releases. + // +optional + URL URL `json:"url,omitempty"` + + // channels is the set of Cincinnati channels to which the release + // currently belongs. + // +optional + Channels []string `json:"channels,omitempty"` +} + +// RetrievedUpdates reports whether available updates have been retrieved from +// the upstream update server. The condition is Unknown before retrieval, False +// if the updates could not be retrieved or recently failed, or True if the +// availableUpdates field is accurate and recent. +const RetrievedUpdates ClusterStatusConditionType = "RetrievedUpdates" + +// ClusterVersionList is a list of ClusterVersion resources. +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type ClusterVersionList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []ClusterVersion `json:"items"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_console.go b/vendor/github.com/openshift/api/config/v1/types_console.go new file mode 100644 index 0000000000000..d64219300ddbd --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_console.go @@ -0,0 +1,64 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Console holds cluster-wide configuration for the web console, including the +// logout URL, and reports the public URL of the console. The canonical name is +// `cluster`. +type Console struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec holds user settable values for configuration + // +kubebuilder:validation:Required + // +required + Spec ConsoleSpec `json:"spec"` + // status holds observed values from the cluster. They may not be overridden. + // +optional + Status ConsoleStatus `json:"status"` +} + +// ConsoleSpec is the specification of the desired behavior of the Console. +type ConsoleSpec struct { + // +optional + Authentication ConsoleAuthentication `json:"authentication"` +} + +// ConsoleStatus defines the observed status of the Console. +type ConsoleStatus struct { + // The URL for the console. This will be derived from the host for the route that + // is created for the console. + ConsoleURL string `json:"consoleURL"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type ConsoleList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []Console `json:"items"` +} + +// ConsoleAuthentication defines a list of optional configuration for console authentication. +type ConsoleAuthentication struct { + // An optional, absolute URL to redirect web browsers to after logging out of + // the console. If not specified, it will redirect to the default login page. + // This is required when using an identity provider that supports single + // sign-on (SSO) such as: + // - OpenID (Keycloak, Azure) + // - RequestHeader (GSSAPI, SSPI, SAML) + // - OAuth (GitHub, GitLab, Google) + // Logging out of the console will destroy the user's token. The logoutRedirect + // provides the user the option to perform single logout (SLO) through the identity + // provider to destroy their single sign-on session. + // +optional + // +kubebuilder:validation:Pattern=`^$|^((https):\/\/?)[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|\/?))$` + LogoutRedirect string `json:"logoutRedirect,omitempty"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_dns.go b/vendor/github.com/openshift/api/config/v1/types_dns.go new file mode 100644 index 0000000000000..989ef99c3cded --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_dns.go @@ -0,0 +1,87 @@ +package v1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DNS holds cluster-wide information about DNS. The canonical name is `cluster` +type DNS struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec holds user settable values for configuration + // +kubebuilder:validation:Required + // +required + Spec DNSSpec `json:"spec"` + // status holds observed values from the cluster. They may not be overridden. + // +optional + Status DNSStatus `json:"status"` +} + +type DNSSpec struct { + // baseDomain is the base domain of the cluster. All managed DNS records will + // be sub-domains of this base. + // + // For example, given the base domain `openshift.example.com`, an API server + // DNS record may be created for `cluster-api.openshift.example.com`. + // + // Once set, this field cannot be changed. + BaseDomain string `json:"baseDomain"` + // publicZone is the location where all the DNS records that are publicly accessible to + // the internet exist. + // + // If this field is nil, no public records should be created. + // + // Once set, this field cannot be changed. + // + // +optional + PublicZone *DNSZone `json:"publicZone,omitempty"` + // privateZone is the location where all the DNS records that are only available internally + // to the cluster exist. + // + // If this field is nil, no private records should be created. + // + // Once set, this field cannot be changed. + // + // +optional + PrivateZone *DNSZone `json:"privateZone,omitempty"` +} + +// DNSZone is used to define a DNS hosted zone. +// A zone can be identified by an ID or tags. +type DNSZone struct { + // id is the identifier that can be used to find the DNS hosted zone. + // + // on AWS zone can be fetched using `ID` as id in [1] + // on Azure zone can be fetched using `ID` as a pre-determined name in [2], + // on GCP zone can be fetched using `ID` as a pre-determined name in [3]. + // + // [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options + // [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show + // [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get + // +optional + ID string `json:"id,omitempty"` + + // tags can be used to query the DNS hosted zone. + // + // on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone using `Tags` as tag-filters, + // + // [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options + // +optional + Tags map[string]string `json:"tags,omitempty"` +} + +type DNSStatus struct { + // dnsSuffix (service-ca amongst others) +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type DNSList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []DNS `json:"items"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_feature.go b/vendor/github.com/openshift/api/config/v1/types_feature.go new file mode 100644 index 0000000000000..7cb30c5d3404b --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_feature.go @@ -0,0 +1,203 @@ +package v1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Feature holds cluster-wide information about feature gates. The canonical name is `cluster` +type FeatureGate struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec holds user settable values for configuration + // +kubebuilder:validation:Required + // +required + Spec FeatureGateSpec `json:"spec"` + // status holds observed values from the cluster. They may not be overridden. + // +optional + Status FeatureGateStatus `json:"status"` +} + +type FeatureSet string + +var ( + // Default feature set that allows upgrades. + Default FeatureSet = "" + + // TechPreviewNoUpgrade turns on tech preview features that are not part of the normal supported platform. Turning + // this feature set on CANNOT BE UNDONE and PREVENTS UPGRADES. + TechPreviewNoUpgrade FeatureSet = "TechPreviewNoUpgrade" + + // CustomNoUpgrade allows the enabling or disabling of any feature. Turning this feature set on IS NOT SUPPORTED, CANNOT BE UNDONE, and PREVENTS UPGRADES. + // Because of its nature, this setting cannot be validated. If you have any typos or accidentally apply invalid combinations + // your cluster may fail in an unrecoverable way. + CustomNoUpgrade FeatureSet = "CustomNoUpgrade" + + // TopologyManager enables ToplogyManager support. Upgrades are enabled with this feature. + LatencySensitive FeatureSet = "LatencySensitive" + + // IPv6DualStackNoUpgrade enables dual-stack. Turning this feature set on IS NOT SUPPORTED, CANNOT BE UNDONE, and PREVENTS UPGRADES. + IPv6DualStackNoUpgrade FeatureSet = "IPv6DualStackNoUpgrade" +) + +type FeatureGateSpec struct { + FeatureGateSelection `json:",inline"` +} + +// +union +type FeatureGateSelection struct { + // featureSet changes the list of features in the cluster. The default is empty. Be very careful adjusting this setting. + // Turning on or off features may cause irreversible changes in your cluster which cannot be undone. + // +unionDiscriminator + // +optional + FeatureSet FeatureSet `json:"featureSet,omitempty"` + + // customNoUpgrade allows the enabling or disabling of any feature. Turning this feature set on IS NOT SUPPORTED, CANNOT BE UNDONE, and PREVENTS UPGRADES. + // Because of its nature, this setting cannot be validated. If you have any typos or accidentally apply invalid combinations + // your cluster may fail in an unrecoverable way. featureSet must equal "CustomNoUpgrade" must be set to use this field. + // +optional + // +nullable + CustomNoUpgrade *CustomFeatureGates `json:"customNoUpgrade,omitempty"` +} + +type CustomFeatureGates struct { + // enabled is a list of all feature gates that you want to force on + // +optional + Enabled []string `json:"enabled,omitempty"` + // disabled is a list of all feature gates that you want to force off + // +optional + Disabled []string `json:"disabled,omitempty"` +} + +type FeatureGateStatus struct { +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type FeatureGateList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []FeatureGate `json:"items"` +} + +type FeatureGateEnabledDisabled struct { + Enabled []string + Disabled []string +} + +// FeatureSets Contains a map of Feature names to Enabled/Disabled Feature. +// +// NOTE: The caller needs to make sure to check for the existence of the value +// using golang's existence field. A possible scenario is an upgrade where new +// FeatureSets are added and a controller has not been upgraded with a newer +// version of this file. In this upgrade scenario the map could return nil. +// +// example: +// if featureSet, ok := FeatureSets["SomeNewFeature"]; ok { } +// +// If you put an item in either of these lists, put your area and name on it so we can find owners. +var FeatureSets = map[FeatureSet]*FeatureGateEnabledDisabled{ + Default: defaultFeatures, + CustomNoUpgrade: { + Enabled: []string{}, + Disabled: []string{}, + }, + TechPreviewNoUpgrade: newDefaultFeatures().toFeatures(), + LatencySensitive: newDefaultFeatures(). + with( + "TopologyManager", // sig-pod, sjenning + ). + toFeatures(), + IPv6DualStackNoUpgrade: newDefaultFeatures(). + with( + "IPv6DualStack", // sig-network, danwinship + ). + toFeatures(), +} + +var defaultFeatures = &FeatureGateEnabledDisabled{ + Enabled: []string{ + "APIPriorityAndFairness", // sig-apimachinery, deads2k + "RotateKubeletServerCertificate", // sig-pod, sjenning + "SupportPodPidsLimit", // sig-pod, sjenning + "NodeDisruptionExclusion", // sig-scheduling, ccoleman + "ServiceNodeExclusion", // sig-scheduling, ccoleman + "SCTPSupport", // sig-network, ccallend + }, + Disabled: []string{ + "LegacyNodeRoleBehavior", // sig-scheduling, ccoleman + }, +} + +type featureSetBuilder struct { + forceOn []string + forceOff []string +} + +func newDefaultFeatures() *featureSetBuilder { + return &featureSetBuilder{} +} + +func (f *featureSetBuilder) with(forceOn ...string) *featureSetBuilder { + f.forceOn = append(f.forceOn, forceOn...) + return f +} + +func (f *featureSetBuilder) without(forceOff ...string) *featureSetBuilder { + f.forceOff = append(f.forceOff, forceOff...) + return f +} + +func (f *featureSetBuilder) isForcedOff(needle string) bool { + for _, forcedOff := range f.forceOff { + if needle == forcedOff { + return true + } + } + return false +} + +func (f *featureSetBuilder) isForcedOn(needle string) bool { + for _, forceOn := range f.forceOn { + if needle == forceOn { + return true + } + } + return false +} + +func (f *featureSetBuilder) toFeatures() *FeatureGateEnabledDisabled { + finalOn := []string{} + finalOff := []string{} + + // only add the default enabled features if they haven't been explicitly set off + for _, defaultOn := range defaultFeatures.Enabled { + if !f.isForcedOff(defaultOn) { + finalOn = append(finalOn, defaultOn) + } + } + for _, currOn := range f.forceOn { + if f.isForcedOff(currOn) { + panic("coding error, you can't have features both on and off") + } + finalOn = append(finalOn, currOn) + } + + // only add the default disabled features if they haven't been explicitly set on + for _, defaultOff := range defaultFeatures.Disabled { + if !f.isForcedOn(defaultOff) { + finalOff = append(finalOff, defaultOff) + } + } + for _, currOff := range f.forceOff { + finalOff = append(finalOff, currOff) + } + + return &FeatureGateEnabledDisabled{ + Enabled: finalOn, + Disabled: finalOff, + } +} diff --git a/vendor/github.com/openshift/api/config/v1/types_image.go b/vendor/github.com/openshift/api/config/v1/types_image.go new file mode 100644 index 0000000000000..63d3d1379bce1 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_image.go @@ -0,0 +1,115 @@ +package v1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Image governs policies related to imagestream imports and runtime configuration +// for external registries. It allows cluster admins to configure which registries +// OpenShift is allowed to import images from, extra CA trust bundles for external +// registries, and policies to block or allow registry hostnames. +// When exposing OpenShift's image registry to the public, this also lets cluster +// admins specify the external hostname. +type Image struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec holds user settable values for configuration + // +kubebuilder:validation:Required + // +required + Spec ImageSpec `json:"spec"` + // status holds observed values from the cluster. They may not be overridden. + // +optional + Status ImageStatus `json:"status"` +} + +type ImageSpec struct { + // allowedRegistriesForImport limits the container image registries that normal users may import + // images from. Set this list to the registries that you trust to contain valid Docker + // images and that you want applications to be able to import from. Users with + // permission to create Images or ImageStreamMappings via the API are not affected by + // this policy - typically only administrators or system integrations will have those + // permissions. + // +optional + AllowedRegistriesForImport []RegistryLocation `json:"allowedRegistriesForImport,omitempty"` + + // externalRegistryHostnames provides the hostnames for the default external image + // registry. The external hostname should be set only when the image registry + // is exposed externally. The first value is used in 'publicDockerImageRepository' + // field in ImageStreams. The value must be in "hostname[:port]" format. + // +optional + ExternalRegistryHostnames []string `json:"externalRegistryHostnames,omitempty"` + + // additionalTrustedCA is a reference to a ConfigMap containing additional CAs that + // should be trusted during imagestream import, pod image pull, build image pull, and + // imageregistry pullthrough. + // The namespace for this config map is openshift-config. + // +optional + AdditionalTrustedCA ConfigMapNameReference `json:"additionalTrustedCA"` + + // registrySources contains configuration that determines how the container runtime + // should treat individual registries when accessing images for builds+pods. (e.g. + // whether or not to allow insecure access). It does not contain configuration for the + // internal cluster registry. + // +optional + RegistrySources RegistrySources `json:"registrySources"` +} + +type ImageStatus struct { + + // internalRegistryHostname sets the hostname for the default internal image + // registry. The value must be in "hostname[:port]" format. + // This value is set by the image registry operator which controls the internal registry + // hostname. For backward compatibility, users can still use OPENSHIFT_DEFAULT_REGISTRY + // environment variable but this setting overrides the environment variable. + // +optional + InternalRegistryHostname string `json:"internalRegistryHostname,omitempty"` + + // externalRegistryHostnames provides the hostnames for the default external image + // registry. The external hostname should be set only when the image registry + // is exposed externally. The first value is used in 'publicDockerImageRepository' + // field in ImageStreams. The value must be in "hostname[:port]" format. + // +optional + ExternalRegistryHostnames []string `json:"externalRegistryHostnames,omitempty"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type ImageList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []Image `json:"items"` +} + +// RegistryLocation contains a location of the registry specified by the registry domain +// name. The domain name might include wildcards, like '*' or '??'. +type RegistryLocation struct { + // domainName specifies a domain name for the registry + // In case the registry use non-standard (80 or 443) port, the port should be included + // in the domain name as well. + DomainName string `json:"domainName"` + // insecure indicates whether the registry is secure (https) or insecure (http) + // By default (if not specified) the registry is assumed as secure. + // +optional + Insecure bool `json:"insecure,omitempty"` +} + +// RegistrySources holds cluster-wide information about how to handle the registries config. +type RegistrySources struct { + // insecureRegistries are registries which do not have a valid TLS certificates or only support HTTP connections. + // +optional + InsecureRegistries []string `json:"insecureRegistries,omitempty"` + // blockedRegistries cannot be used for image pull and push actions. All other registries are permitted. + // + // Only one of BlockedRegistries or AllowedRegistries may be set. + // +optional + BlockedRegistries []string `json:"blockedRegistries,omitempty"` + // allowedRegistries are the only registries permitted for image pull and push actions. All other registries are denied. + // + // Only one of BlockedRegistries or AllowedRegistries may be set. + // +optional + AllowedRegistries []string `json:"allowedRegistries,omitempty"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_infrastructure.go b/vendor/github.com/openshift/api/config/v1/types_infrastructure.go new file mode 100644 index 0000000000000..efea0a41a40f2 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_infrastructure.go @@ -0,0 +1,472 @@ +package v1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:subresource:status + +// Infrastructure holds cluster-wide information about Infrastructure. The canonical name is `cluster` +type Infrastructure struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec holds user settable values for configuration + // +kubebuilder:validation:Required + // +required + Spec InfrastructureSpec `json:"spec"` + // status holds observed values from the cluster. They may not be overridden. + // +optional + Status InfrastructureStatus `json:"status"` +} + +// InfrastructureSpec contains settings that apply to the cluster infrastructure. +type InfrastructureSpec struct { + // cloudConfig is a reference to a ConfigMap containing the cloud provider configuration file. + // This configuration file is used to configure the Kubernetes cloud provider integration + // when using the built-in cloud provider integration or the external cloud controller manager. + // The namespace for this config map is openshift-config. + // + // cloudConfig should only be consumed by the kube_cloud_config controller. + // The controller is responsible for using the user configuration in the spec + // for various platforms and combining that with the user provided ConfigMap in this field + // to create a stitched kube cloud config. + // The controller generates a ConfigMap `kube-cloud-config` in `openshift-config-managed` namespace + // with the kube cloud config is stored in `cloud.conf` key. + // All the clients are expected to use the generated ConfigMap only. + // + // +optional + CloudConfig ConfigMapFileReference `json:"cloudConfig"` + + // platformSpec holds desired information specific to the underlying + // infrastructure provider. + PlatformSpec PlatformSpec `json:"platformSpec,omitempty"` +} + +// InfrastructureStatus describes the infrastructure the cluster is leveraging. +type InfrastructureStatus struct { + // infrastructureName uniquely identifies a cluster with a human friendly name. + // Once set it should not be changed. Must be of max length 27 and must have only + // alphanumeric or hyphen characters. + InfrastructureName string `json:"infrastructureName"` + + // platform is the underlying infrastructure provider for the cluster. + // + // Deprecated: Use platformStatus.type instead. + Platform PlatformType `json:"platform,omitempty"` + + // platformStatus holds status information specific to the underlying + // infrastructure provider. + // +optional + PlatformStatus *PlatformStatus `json:"platformStatus,omitempty"` + + // etcdDiscoveryDomain is the domain used to fetch the SRV records for discovering + // etcd servers and clients. + // For more info: https://github.com/etcd-io/etcd/blob/329be66e8b3f9e2e6af83c123ff89297e49ebd15/Documentation/op-guide/clustering.md#dns-discovery + EtcdDiscoveryDomain string `json:"etcdDiscoveryDomain"` + + // apiServerURL is a valid URI with scheme 'https', address and + // optionally a port (defaulting to 443). apiServerURL can be used by components like the web console + // to tell users where to find the Kubernetes API. + APIServerURL string `json:"apiServerURL"` + + // apiServerInternalURL is a valid URI with scheme 'https', + // address and optionally a port (defaulting to 443). apiServerInternalURL can be used by components + // like kubelets, to contact the Kubernetes API server using the + // infrastructure provider rather than Kubernetes networking. + APIServerInternalURL string `json:"apiServerInternalURI"` +} + +// PlatformType is a specific supported infrastructure provider. +// +kubebuilder:validation:Enum="";AWS;Azure;BareMetal;GCP;Libvirt;OpenStack;None;VSphere;oVirt;IBMCloud;KubeVirt +type PlatformType string + +const ( + // AWSPlatformType represents Amazon Web Services infrastructure. + AWSPlatformType PlatformType = "AWS" + + // AzurePlatformType represents Microsoft Azure infrastructure. + AzurePlatformType PlatformType = "Azure" + + // BareMetalPlatformType represents managed bare metal infrastructure. + BareMetalPlatformType PlatformType = "BareMetal" + + // GCPPlatformType represents Google Cloud Platform infrastructure. + GCPPlatformType PlatformType = "GCP" + + // LibvirtPlatformType represents libvirt infrastructure. + LibvirtPlatformType PlatformType = "Libvirt" + + // OpenStackPlatformType represents OpenStack infrastructure. + OpenStackPlatformType PlatformType = "OpenStack" + + // NonePlatformType means there is no infrastructure provider. + NonePlatformType PlatformType = "None" + + // VSpherePlatformType represents VMWare vSphere infrastructure. + VSpherePlatformType PlatformType = "VSphere" + + // OvirtPlatformType represents oVirt/RHV infrastructure. + OvirtPlatformType PlatformType = "oVirt" + + // IBMCloudPlatformType represents IBM Cloud infrastructure. + IBMCloudPlatformType PlatformType = "IBMCloud" + + // KubevirtPlatformType represents KubeVirt/Openshift Virtualization infrastructure. + KubevirtPlatformType PlatformType = "KubeVirt" +) + +// IBMCloudProviderType is a specific supported IBM Cloud provider cluster type +type IBMCloudProviderType string + +const ( + // Classic means that the IBM Cloud cluster is using classic infrastructure + IBMCloudProviderTypeClassic IBMCloudProviderType = "Classic" + + // VPC means that the IBM Cloud cluster is using VPC infrastructure + IBMCloudProviderTypeVPC IBMCloudProviderType = "VPC" +) + +// PlatformSpec holds the desired state specific to the underlying infrastructure provider +// of the current cluster. Since these are used at spec-level for the underlying cluster, it +// is supposed that only one of the spec structs is set. +type PlatformSpec struct { + // type is the underlying infrastructure provider for the cluster. This + // value controls whether infrastructure automation such as service load + // balancers, dynamic volume provisioning, machine creation and deletion, and + // other integrations are enabled. If None, no infrastructure automation is + // enabled. Allowed values are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", + // "OpenStack", "VSphere", "oVirt", "KubeVirt" and "None". Individual components may not support + // all platforms, and must handle unrecognized platforms as None if they do + // not support that platform. + // + // +unionDiscriminator + Type PlatformType `json:"type"` + + // AWS contains settings specific to the Amazon Web Services infrastructure provider. + // +optional + AWS *AWSPlatformSpec `json:"aws,omitempty"` + + // Azure contains settings specific to the Azure infrastructure provider. + // +optional + Azure *AzurePlatformSpec `json:"azure,omitempty"` + + // GCP contains settings specific to the Google Cloud Platform infrastructure provider. + // +optional + GCP *GCPPlatformSpec `json:"gcp,omitempty"` + + // BareMetal contains settings specific to the BareMetal platform. + // +optional + BareMetal *BareMetalPlatformSpec `json:"baremetal,omitempty"` + + // OpenStack contains settings specific to the OpenStack infrastructure provider. + // +optional + OpenStack *OpenStackPlatformSpec `json:"openstack,omitempty"` + + // Ovirt contains settings specific to the oVirt infrastructure provider. + // +optional + Ovirt *OvirtPlatformSpec `json:"ovirt,omitempty"` + + // VSphere contains settings specific to the VSphere infrastructure provider. + // +optional + VSphere *VSpherePlatformSpec `json:"vsphere,omitempty"` + + // IBMCloud contains settings specific to the IBMCloud infrastructure provider. + // +optional + IBMCloud *IBMCloudPlatformSpec `json:"ibmcloud,omitempty"` + + // Kubevirt contains settings specific to the kubevirt infrastructure provider. + // +optional + Kubevirt *KubevirtPlatformSpec `json:"kubevirt,omitempty"` +} + +// PlatformStatus holds the current status specific to the underlying infrastructure provider +// of the current cluster. Since these are used at status-level for the underlying cluster, it +// is supposed that only one of the status structs is set. +type PlatformStatus struct { + // type is the underlying infrastructure provider for the cluster. This + // value controls whether infrastructure automation such as service load + // balancers, dynamic volume provisioning, machine creation and deletion, and + // other integrations are enabled. If None, no infrastructure automation is + // enabled. Allowed values are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", + // "OpenStack", "VSphere", "oVirt", and "None". Individual components may not support + // all platforms, and must handle unrecognized platforms as None if they do + // not support that platform. + // + // This value will be synced with to the `status.platform` and `status.platformStatus.type`. + // Currently this value cannot be changed once set. + Type PlatformType `json:"type"` + + // AWS contains settings specific to the Amazon Web Services infrastructure provider. + // +optional + AWS *AWSPlatformStatus `json:"aws,omitempty"` + + // Azure contains settings specific to the Azure infrastructure provider. + // +optional + Azure *AzurePlatformStatus `json:"azure,omitempty"` + + // GCP contains settings specific to the Google Cloud Platform infrastructure provider. + // +optional + GCP *GCPPlatformStatus `json:"gcp,omitempty"` + + // BareMetal contains settings specific to the BareMetal platform. + // +optional + BareMetal *BareMetalPlatformStatus `json:"baremetal,omitempty"` + + // OpenStack contains settings specific to the OpenStack infrastructure provider. + // +optional + OpenStack *OpenStackPlatformStatus `json:"openstack,omitempty"` + + // Ovirt contains settings specific to the oVirt infrastructure provider. + // +optional + Ovirt *OvirtPlatformStatus `json:"ovirt,omitempty"` + + // VSphere contains settings specific to the VSphere infrastructure provider. + // +optional + VSphere *VSpherePlatformStatus `json:"vsphere,omitempty"` + + // IBMCloud contains settings specific to the IBMCloud infrastructure provider. + // +optional + IBMCloud *IBMCloudPlatformStatus `json:"ibmcloud,omitempty"` + + // Kubevirt contains settings specific to the kubevirt infrastructure provider. + // +optional + Kubevirt *KubevirtPlatformStatus `json:"kubevirt,omitempty"` +} + +// AWSServiceEndpoint store the configuration of a custom url to +// override existing defaults of AWS Services. +type AWSServiceEndpoint struct { + // name is the name of the AWS service. + // The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html + // This must be provided and cannot be empty. + // + // +kubebuilder:validation:Pattern=`^[a-z0-9-]+$` + Name string `json:"name"` + + // url is fully qualified URI with scheme https, that overrides the default generated + // endpoint for a client. + // This must be provided and cannot be empty. + // + // +kubebuilder:validation:Pattern=`^https://` + URL string `json:"url"` +} + +// AWSPlatformSpec holds the desired state of the Amazon Web Services infrastructure provider. +// This only includes fields that can be modified in the cluster. +type AWSPlatformSpec struct { + // serviceEndpoints list contains custom endpoints which will override default + // service endpoint of AWS Services. + // There must be only one ServiceEndpoint for a service. + // +optional + ServiceEndpoints []AWSServiceEndpoint `json:"serviceEndpoints,omitempty"` +} + +// AWSPlatformStatus holds the current status of the Amazon Web Services infrastructure provider. +type AWSPlatformStatus struct { + // region holds the default AWS region for new AWS resources created by the cluster. + Region string `json:"region"` + + // ServiceEndpoints list contains custom endpoints which will override default + // service endpoint of AWS Services. + // There must be only one ServiceEndpoint for a service. + // +optional + ServiceEndpoints []AWSServiceEndpoint `json:"serviceEndpoints,omitempty"` +} + +// AzurePlatformSpec holds the desired state of the Azure infrastructure provider. +// This only includes fields that can be modified in the cluster. +type AzurePlatformSpec struct{} + +// AzurePlatformStatus holds the current status of the Azure infrastructure provider. +type AzurePlatformStatus struct { + // resourceGroupName is the Resource Group for new Azure resources created for the cluster. + ResourceGroupName string `json:"resourceGroupName"` + + // networkResourceGroupName is the Resource Group for network resources like the Virtual Network and Subnets used by the cluster. + // If empty, the value is same as ResourceGroupName. + // +optional + NetworkResourceGroupName string `json:"networkResourceGroupName,omitempty"` + + // cloudName is the name of the Azure cloud environment which can be used to configure the Azure SDK + // with the appropriate Azure API endpoints. + // If empty, the value is equal to `AzurePublicCloud`. + // +optional + CloudName AzureCloudEnvironment `json:"cloudName,omitempty"` +} + +// AzureCloudEnvironment is the name of the Azure cloud environment +// +kubebuilder:validation:Enum="";AzurePublicCloud;AzureUSGovernmentCloud;AzureChinaCloud;AzureGermanCloud +type AzureCloudEnvironment string + +const ( + // AzurePublicCloud is the general-purpose, public Azure cloud environment. + AzurePublicCloud AzureCloudEnvironment = "AzurePublicCloud" + + // AzureUSGovernmentCloud is the Azure cloud environment for the US government. + AzureUSGovernmentCloud AzureCloudEnvironment = "AzureUSGovernmentCloud" + + // AzureChinaCloud is the Azure cloud environment used in China. + AzureChinaCloud AzureCloudEnvironment = "AzureChinaCloud" + + // AzureGermanCloud is the Azure cloud environment used in Germany. + AzureGermanCloud AzureCloudEnvironment = "AzureGermanCloud" +) + +// GCPPlatformSpec holds the desired state of the Google Cloud Platform infrastructure provider. +// This only includes fields that can be modified in the cluster. +type GCPPlatformSpec struct{} + +// GCPPlatformStatus holds the current status of the Google Cloud Platform infrastructure provider. +type GCPPlatformStatus struct { + // resourceGroupName is the Project ID for new GCP resources created for the cluster. + ProjectID string `json:"projectID"` + + // region holds the region for new GCP resources created for the cluster. + Region string `json:"region"` +} + +// BareMetalPlatformSpec holds the desired state of the BareMetal infrastructure provider. +// This only includes fields that can be modified in the cluster. +type BareMetalPlatformSpec struct{} + +// BareMetalPlatformStatus holds the current status of the BareMetal infrastructure provider. +// For more information about the network architecture used with the BareMetal platform type, see: +// https://github.com/openshift/installer/blob/master/docs/design/baremetal/networking-infrastructure.md +type BareMetalPlatformStatus struct { + // apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used + // by components inside the cluster, like kubelets using the infrastructure rather + // than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI + // points to. It is the IP for a self-hosted load balancer in front of the API servers. + APIServerInternalIP string `json:"apiServerInternalIP,omitempty"` + + // ingressIP is an external IP which routes to the default ingress controller. + // The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + IngressIP string `json:"ingressIP,omitempty"` + + // nodeDNSIP is the IP address for the internal DNS used by the + // nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` + // provides name resolution for the nodes themselves. There is no DNS-as-a-service for + // BareMetal deployments. In order to minimize necessary changes to the + // datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames + // to the nodes in the cluster. + NodeDNSIP string `json:"nodeDNSIP,omitempty"` +} + +// OpenStackPlatformSpec holds the desired state of the OpenStack infrastructure provider. +// This only includes fields that can be modified in the cluster. +type OpenStackPlatformSpec struct{} + +// OpenStackPlatformStatus holds the current status of the OpenStack infrastructure provider. +type OpenStackPlatformStatus struct { + // apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used + // by components inside the cluster, like kubelets using the infrastructure rather + // than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI + // points to. It is the IP for a self-hosted load balancer in front of the API servers. + APIServerInternalIP string `json:"apiServerInternalIP,omitempty"` + + // cloudName is the name of the desired OpenStack cloud in the + // client configuration file (`clouds.yaml`). + CloudName string `json:"cloudName,omitempty"` + + // ingressIP is an external IP which routes to the default ingress controller. + // The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + IngressIP string `json:"ingressIP,omitempty"` + + // nodeDNSIP is the IP address for the internal DNS used by the + // nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` + // provides name resolution for the nodes themselves. There is no DNS-as-a-service for + // OpenStack deployments. In order to minimize necessary changes to the + // datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames + // to the nodes in the cluster. + NodeDNSIP string `json:"nodeDNSIP,omitempty"` +} + +// OvirtPlatformSpec holds the desired state of the oVirt infrastructure provider. +// This only includes fields that can be modified in the cluster. +type OvirtPlatformSpec struct{} + +// OvirtPlatformStatus holds the current status of the oVirt infrastructure provider. +type OvirtPlatformStatus struct { + // apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used + // by components inside the cluster, like kubelets using the infrastructure rather + // than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI + // points to. It is the IP for a self-hosted load balancer in front of the API servers. + APIServerInternalIP string `json:"apiServerInternalIP,omitempty"` + + // ingressIP is an external IP which routes to the default ingress controller. + // The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + IngressIP string `json:"ingressIP,omitempty"` + + // deprecated: as of 4.6, this field is no longer set or honored. It will be removed in a future release. + NodeDNSIP string `json:"nodeDNSIP,omitempty"` +} + +// VSpherePlatformSpec holds the desired state of the vSphere infrastructure provider. +// This only includes fields that can be modified in the cluster. +type VSpherePlatformSpec struct{} + +// VSpherePlatformStatus holds the current status of the vSphere infrastructure provider. +type VSpherePlatformStatus struct { + // apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used + // by components inside the cluster, like kubelets using the infrastructure rather + // than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI + // points to. It is the IP for a self-hosted load balancer in front of the API servers. + APIServerInternalIP string `json:"apiServerInternalIP,omitempty"` + + // ingressIP is an external IP which routes to the default ingress controller. + // The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + IngressIP string `json:"ingressIP,omitempty"` + + // nodeDNSIP is the IP address for the internal DNS used by the + // nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` + // provides name resolution for the nodes themselves. There is no DNS-as-a-service for + // vSphere deployments. In order to minimize necessary changes to the + // datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames + // to the nodes in the cluster. + NodeDNSIP string `json:"nodeDNSIP,omitempty"` +} + +// IBMCloudPlatformSpec holds the desired state of the IBMCloud infrastructure provider. +// This only includes fields that can be modified in the cluster. +type IBMCloudPlatformSpec struct{} + +//IBMCloudPlatformStatus holds the current status of the IBMCloud infrastructure provider. +type IBMCloudPlatformStatus struct { + // Location is where the cluster has been deployed + Location string `json:"location,omitempty"` + + // ResourceGroupName is the Resource Group for new IBMCloud resources created for the cluster. + ResourceGroupName string `json:"resourceGroupName,omitempty"` + + // ProviderType indicates the type of cluster that was created + ProviderType IBMCloudProviderType `json:"providerType,omitempty"` +} + +// KubevirtPlatformSpec holds the desired state of the kubevirt infrastructure provider. +// This only includes fields that can be modified in the cluster. +type KubevirtPlatformSpec struct{} + +// KubevirtPlatformStatus holds the current status of the kubevirt infrastructure provider. +type KubevirtPlatformStatus struct { + // apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used + // by components inside the cluster, like kubelets using the infrastructure rather + // than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI + // points to. It is the IP for a self-hosted load balancer in front of the API servers. + APIServerInternalIP string `json:"apiServerInternalIP,omitempty"` + + // ingressIP is an external IP which routes to the default ingress controller. + // The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + IngressIP string `json:"ingressIP,omitempty"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// InfrastructureList is +type InfrastructureList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []Infrastructure `json:"items"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_ingress.go b/vendor/github.com/openshift/api/config/v1/types_ingress.go new file mode 100644 index 0000000000000..0216919ad8e96 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_ingress.go @@ -0,0 +1,46 @@ +package v1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Ingress holds cluster-wide information about ingress, including the default ingress domain +// used for routes. The canonical name is `cluster`. +type Ingress struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec holds user settable values for configuration + // +kubebuilder:validation:Required + // +required + Spec IngressSpec `json:"spec"` + // status holds observed values from the cluster. They may not be overridden. + // +optional + Status IngressStatus `json:"status"` +} + +type IngressSpec struct { + // domain is used to generate a default host name for a route when the + // route's host name is empty. The generated host name will follow this + // pattern: "..". + // + // It is also used as the default wildcard domain suffix for ingress. The + // default ingresscontroller domain will follow this pattern: "*.". + // + // Once set, changing domain is not currently supported. + Domain string `json:"domain"` +} + +type IngressStatus struct { +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type IngressList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []Ingress `json:"items"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_network.go b/vendor/github.com/openshift/api/config/v1/types_network.go new file mode 100644 index 0000000000000..257b54b08d7b5 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_network.go @@ -0,0 +1,133 @@ +package v1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Network holds cluster-wide information about Network. The canonical name is `cluster`. It is used to configure the desired network configuration, such as: IP address pools for services/pod IPs, network plugin, etc. +// Please view network.spec for an explanation on what applies when configuring this resource. +type Network struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec holds user settable values for configuration. + // As a general rule, this SHOULD NOT be read directly. Instead, you should + // consume the NetworkStatus, as it indicates the currently deployed configuration. + // Currently, most spec fields are immutable after installation. Please view the individual ones for further details on each. + // +kubebuilder:validation:Required + // +required + Spec NetworkSpec `json:"spec"` + // status holds observed values from the cluster. They may not be overridden. + // +optional + Status NetworkStatus `json:"status"` +} + +// NetworkSpec is the desired network configuration. +// As a general rule, this SHOULD NOT be read directly. Instead, you should +// consume the NetworkStatus, as it indicates the currently deployed configuration. +// Currently, most spec fields are immutable after installation. Please view the individual ones for further details on each. +type NetworkSpec struct { + // IP address pool to use for pod IPs. + // This field is immutable after installation. + ClusterNetwork []ClusterNetworkEntry `json:"clusterNetwork"` + + // IP address pool for services. + // Currently, we only support a single entry here. + // This field is immutable after installation. + ServiceNetwork []string `json:"serviceNetwork"` + + // NetworkType is the plugin that is to be deployed (e.g. OpenShiftSDN). + // This should match a value that the cluster-network-operator understands, + // or else no networking will be installed. + // Currently supported values are: + // - OpenShiftSDN + // This field is immutable after installation. + NetworkType string `json:"networkType"` + + // externalIP defines configuration for controllers that + // affect Service.ExternalIP. If nil, then ExternalIP is + // not allowed to be set. + // +optional + ExternalIP *ExternalIPConfig `json:"externalIP,omitempty"` + + // The port range allowed for Services of type NodePort. + // If not specified, the default of 30000-32767 will be used. + // Such Services without a NodePort specified will have one + // automatically allocated from this range. + // This parameter can be updated after the cluster is + // installed. + // +kubebuilder:validation:Pattern=`^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])-([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$` + ServiceNodePortRange string `json:"serviceNodePortRange,omitempty"` +} + +// NetworkStatus is the current network configuration. +type NetworkStatus struct { + // IP address pool to use for pod IPs. + ClusterNetwork []ClusterNetworkEntry `json:"clusterNetwork,omitempty"` + + // IP address pool for services. + // Currently, we only support a single entry here. + ServiceNetwork []string `json:"serviceNetwork,omitempty"` + + // NetworkType is the plugin that is deployed (e.g. OpenShiftSDN). + NetworkType string `json:"networkType,omitempty"` + + // ClusterNetworkMTU is the MTU for inter-pod networking. + ClusterNetworkMTU int `json:"clusterNetworkMTU,omitempty"` +} + +// ClusterNetworkEntry is a contiguous block of IP addresses from which pod IPs +// are allocated. +type ClusterNetworkEntry struct { + // The complete block for pod IPs. + CIDR string `json:"cidr"` + + // The size (prefix) of block to allocate to each node. If this + // field is not used by the plugin, it can be left unset. + // +kubebuilder:validation:Minimum=0 + // +optional + HostPrefix uint32 `json:"hostPrefix,omitempty"` +} + +// ExternalIPConfig specifies some IP blocks relevant for the ExternalIP field +// of a Service resource. +type ExternalIPConfig struct { + // policy is a set of restrictions applied to the ExternalIP field. + // If nil or empty, then ExternalIP is not allowed to be set. + // +optional + Policy *ExternalIPPolicy `json:"policy,omitempty"` + + // autoAssignCIDRs is a list of CIDRs from which to automatically assign + // Service.ExternalIP. These are assigned when the service is of type + // LoadBalancer. In general, this is only useful for bare-metal clusters. + // In Openshift 3.x, this was misleadingly called "IngressIPs". + // Automatically assigned External IPs are not affected by any + // ExternalIPPolicy rules. + // Currently, only one entry may be provided. + // +optional + AutoAssignCIDRs []string `json:"autoAssignCIDRs,omitempty"` +} + +// ExternalIPPolicy configures exactly which IPs are allowed for the ExternalIP +// field in a Service. If the zero struct is supplied, then none are permitted. +// The policy controller always allows automatically assigned external IPs. +type ExternalIPPolicy struct { + // allowedCIDRs is the list of allowed CIDRs. + AllowedCIDRs []string `json:"allowedCIDRs,omitempty"` + + // rejectedCIDRs is the list of disallowed CIDRs. These take precedence + // over allowedCIDRs. + // +optional + RejectedCIDRs []string `json:"rejectedCIDRs,omitempty"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type NetworkList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []Network `json:"items"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_oauth.go b/vendor/github.com/openshift/api/config/v1/types_oauth.go new file mode 100644 index 0000000000000..fcbd191aa652f --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_oauth.go @@ -0,0 +1,562 @@ +package v1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// OAuth Server and Identity Provider Config + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// OAuth holds cluster-wide information about OAuth. The canonical name is `cluster`. +// It is used to configure the integrated OAuth server. +// This configuration is only honored when the top level Authentication config has type set to IntegratedOAuth. +type OAuth struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata"` + // spec holds user settable values for configuration + // +kubebuilder:validation:Required + // +required + Spec OAuthSpec `json:"spec"` + // status holds observed values from the cluster. They may not be overridden. + // +optional + Status OAuthStatus `json:"status"` +} + +// OAuthSpec contains desired cluster auth configuration +type OAuthSpec struct { + // identityProviders is an ordered list of ways for a user to identify themselves. + // When this list is empty, no identities are provisioned for users. + // +optional + IdentityProviders []IdentityProvider `json:"identityProviders,omitempty"` + + // tokenConfig contains options for authorization and access tokens + TokenConfig TokenConfig `json:"tokenConfig"` + + // templates allow you to customize pages like the login page. + // +optional + Templates OAuthTemplates `json:"templates"` +} + +// OAuthStatus shows current known state of OAuth server in the cluster +type OAuthStatus struct { + // TODO Fill in with status of identityProviders and templates (and maybe tokenConfig) +} + +// TokenConfig holds the necessary configuration options for authorization and access tokens +type TokenConfig struct { + // accessTokenMaxAgeSeconds defines the maximum age of access tokens + AccessTokenMaxAgeSeconds int32 `json:"accessTokenMaxAgeSeconds,omitempty"` + + // accessTokenInactivityTimeoutSeconds - DEPRECATED: setting this field has no effect. + // +optional + AccessTokenInactivityTimeoutSeconds int32 `json:"accessTokenInactivityTimeoutSeconds,omitempty"` + + // accessTokenInactivityTimeout defines the token inactivity timeout + // for tokens granted by any client. + // The value represents the maximum amount of time that can occur between + // consecutive uses of the token. Tokens become invalid if they are not + // used within this temporal window. The user will need to acquire a new + // token to regain access once a token times out. Takes valid time + // duration string such as "5m", "1.5h" or "2h45m". The minimum allowed + // value for duration is 300s (5 minutes). If the timeout is configured + // per client, then that value takes precedence. If the timeout value is + // not specified and the client does not override the value, then tokens + // are valid until their lifetime. + // +optional + AccessTokenInactivityTimeout *metav1.Duration `json:"accessTokenInactivityTimeout,omitempty"` +} + +const ( + // LoginTemplateKey is the key of the login template in a secret + LoginTemplateKey = "login.html" + + // ProviderSelectionTemplateKey is the key for the provider selection template in a secret + ProviderSelectionTemplateKey = "providers.html" + + // ErrorsTemplateKey is the key for the errors template in a secret + ErrorsTemplateKey = "errors.html" + + // BindPasswordKey is the key for the LDAP bind password in a secret + BindPasswordKey = "bindPassword" + + // ClientSecretKey is the key for the oauth client secret data in a secret + ClientSecretKey = "clientSecret" + + // HTPasswdDataKey is the key for the htpasswd file data in a secret + HTPasswdDataKey = "htpasswd" +) + +// OAuthTemplates allow for customization of pages like the login page +type OAuthTemplates struct { + // login is the name of a secret that specifies a go template to use to render the login page. + // The key "login.html" is used to locate the template data. + // If specified and the secret or expected key is not found, the default login page is used. + // If the specified template is not valid, the default login page is used. + // If unspecified, the default login page is used. + // The namespace for this secret is openshift-config. + // +optional + Login SecretNameReference `json:"login"` + + // providerSelection is the name of a secret that specifies a go template to use to render + // the provider selection page. + // The key "providers.html" is used to locate the template data. + // If specified and the secret or expected key is not found, the default provider selection page is used. + // If the specified template is not valid, the default provider selection page is used. + // If unspecified, the default provider selection page is used. + // The namespace for this secret is openshift-config. + // +optional + ProviderSelection SecretNameReference `json:"providerSelection"` + + // error is the name of a secret that specifies a go template to use to render error pages + // during the authentication or grant flow. + // The key "errors.html" is used to locate the template data. + // If specified and the secret or expected key is not found, the default error page is used. + // If the specified template is not valid, the default error page is used. + // If unspecified, the default error page is used. + // The namespace for this secret is openshift-config. + // +optional + Error SecretNameReference `json:"error"` +} + +// IdentityProvider provides identities for users authenticating using credentials +type IdentityProvider struct { + // name is used to qualify the identities returned by this provider. + // - It MUST be unique and not shared by any other identity provider used + // - It MUST be a valid path segment: name cannot equal "." or ".." or contain "/" or "%" or ":" + // Ref: https://godoc.org/github.com/openshift/origin/pkg/user/apis/user/validation#ValidateIdentityProviderName + Name string `json:"name"` + + // mappingMethod determines how identities from this provider are mapped to users + // Defaults to "claim" + // +optional + MappingMethod MappingMethodType `json:"mappingMethod,omitempty"` + + IdentityProviderConfig `json:",inline"` +} + +// MappingMethodType specifies how new identities should be mapped to users when they log in +type MappingMethodType string + +const ( + // MappingMethodClaim provisions a user with the identity’s preferred user name. Fails if a user + // with that user name is already mapped to another identity. + // Default. + MappingMethodClaim MappingMethodType = "claim" + + // MappingMethodLookup looks up existing users already mapped to an identity but does not + // automatically provision users or identities. Requires identities and users be set up + // manually or using an external process. + MappingMethodLookup MappingMethodType = "lookup" + + // MappingMethodAdd provisions a user with the identity’s preferred user name. If a user with + // that user name already exists, the identity is mapped to the existing user, adding to any + // existing identity mappings for the user. + MappingMethodAdd MappingMethodType = "add" +) + +type IdentityProviderType string + +const ( + // IdentityProviderTypeBasicAuth provides identities for users authenticating with HTTP Basic Auth + IdentityProviderTypeBasicAuth IdentityProviderType = "BasicAuth" + + // IdentityProviderTypeGitHub provides identities for users authenticating using GitHub credentials + IdentityProviderTypeGitHub IdentityProviderType = "GitHub" + + // IdentityProviderTypeGitLab provides identities for users authenticating using GitLab credentials + IdentityProviderTypeGitLab IdentityProviderType = "GitLab" + + // IdentityProviderTypeGoogle provides identities for users authenticating using Google credentials + IdentityProviderTypeGoogle IdentityProviderType = "Google" + + // IdentityProviderTypeHTPasswd provides identities from an HTPasswd file + IdentityProviderTypeHTPasswd IdentityProviderType = "HTPasswd" + + // IdentityProviderTypeKeystone provides identitities for users authenticating using keystone password credentials + IdentityProviderTypeKeystone IdentityProviderType = "Keystone" + + // IdentityProviderTypeLDAP provides identities for users authenticating using LDAP credentials + IdentityProviderTypeLDAP IdentityProviderType = "LDAP" + + // IdentityProviderTypeOpenID provides identities for users authenticating using OpenID credentials + IdentityProviderTypeOpenID IdentityProviderType = "OpenID" + + // IdentityProviderTypeRequestHeader provides identities for users authenticating using request header credentials + IdentityProviderTypeRequestHeader IdentityProviderType = "RequestHeader" +) + +// IdentityProviderConfig contains configuration for using a specific identity provider +type IdentityProviderConfig struct { + // type identifies the identity provider type for this entry. + Type IdentityProviderType `json:"type"` + + // Provider-specific configuration + // The json tag MUST match the `Type` specified above, case-insensitively + // e.g. For `Type: "LDAP"`, the `ldap` configuration should be provided + + // basicAuth contains configuration options for the BasicAuth IdP + // +optional + BasicAuth *BasicAuthIdentityProvider `json:"basicAuth,omitempty"` + + // github enables user authentication using GitHub credentials + // +optional + GitHub *GitHubIdentityProvider `json:"github,omitempty"` + + // gitlab enables user authentication using GitLab credentials + // +optional + GitLab *GitLabIdentityProvider `json:"gitlab,omitempty"` + + // google enables user authentication using Google credentials + // +optional + Google *GoogleIdentityProvider `json:"google,omitempty"` + + // htpasswd enables user authentication using an HTPasswd file to validate credentials + // +optional + HTPasswd *HTPasswdIdentityProvider `json:"htpasswd,omitempty"` + + // keystone enables user authentication using keystone password credentials + // +optional + Keystone *KeystoneIdentityProvider `json:"keystone,omitempty"` + + // ldap enables user authentication using LDAP credentials + // +optional + LDAP *LDAPIdentityProvider `json:"ldap,omitempty"` + + // openID enables user authentication using OpenID credentials + // +optional + OpenID *OpenIDIdentityProvider `json:"openID,omitempty"` + + // requestHeader enables user authentication using request header credentials + // +optional + RequestHeader *RequestHeaderIdentityProvider `json:"requestHeader,omitempty"` +} + +// BasicAuthPasswordIdentityProvider provides identities for users authenticating using HTTP basic auth credentials +type BasicAuthIdentityProvider struct { + // OAuthRemoteConnectionInfo contains information about how to connect to the external basic auth server + OAuthRemoteConnectionInfo `json:",inline"` +} + +// OAuthRemoteConnectionInfo holds information necessary for establishing a remote connection +type OAuthRemoteConnectionInfo struct { + // url is the remote URL to connect to + URL string `json:"url"` + + // ca is an optional reference to a config map by name containing the PEM-encoded CA bundle. + // It is used as a trust anchor to validate the TLS certificate presented by the remote server. + // The key "ca.crt" is used to locate the data. + // If specified and the config map or expected key is not found, the identity provider is not honored. + // If the specified ca data is not valid, the identity provider is not honored. + // If empty, the default system roots are used. + // The namespace for this config map is openshift-config. + // +optional + CA ConfigMapNameReference `json:"ca"` + + // tlsClientCert is an optional reference to a secret by name that contains the + // PEM-encoded TLS client certificate to present when connecting to the server. + // The key "tls.crt" is used to locate the data. + // If specified and the secret or expected key is not found, the identity provider is not honored. + // If the specified certificate data is not valid, the identity provider is not honored. + // The namespace for this secret is openshift-config. + // +optional + TLSClientCert SecretNameReference `json:"tlsClientCert"` + + // tlsClientKey is an optional reference to a secret by name that contains the + // PEM-encoded TLS private key for the client certificate referenced in tlsClientCert. + // The key "tls.key" is used to locate the data. + // If specified and the secret or expected key is not found, the identity provider is not honored. + // If the specified certificate data is not valid, the identity provider is not honored. + // The namespace for this secret is openshift-config. + // +optional + TLSClientKey SecretNameReference `json:"tlsClientKey"` +} + +// HTPasswdPasswordIdentityProvider provides identities for users authenticating using htpasswd credentials +type HTPasswdIdentityProvider struct { + // fileData is a required reference to a secret by name containing the data to use as the htpasswd file. + // The key "htpasswd" is used to locate the data. + // If the secret or expected key is not found, the identity provider is not honored. + // If the specified htpasswd data is not valid, the identity provider is not honored. + // The namespace for this secret is openshift-config. + FileData SecretNameReference `json:"fileData"` +} + +// LDAPPasswordIdentityProvider provides identities for users authenticating using LDAP credentials +type LDAPIdentityProvider struct { + // url is an RFC 2255 URL which specifies the LDAP search parameters to use. + // The syntax of the URL is: + // ldap://host:port/basedn?attribute?scope?filter + URL string `json:"url"` + + // bindDN is an optional DN to bind with during the search phase. + // +optional + BindDN string `json:"bindDN"` + + // bindPassword is an optional reference to a secret by name + // containing a password to bind with during the search phase. + // The key "bindPassword" is used to locate the data. + // If specified and the secret or expected key is not found, the identity provider is not honored. + // The namespace for this secret is openshift-config. + // +optional + BindPassword SecretNameReference `json:"bindPassword"` + + // insecure, if true, indicates the connection should not use TLS + // WARNING: Should not be set to `true` with the URL scheme "ldaps://" as "ldaps://" URLs always + // attempt to connect using TLS, even when `insecure` is set to `true` + // When `true`, "ldap://" URLS connect insecurely. When `false`, "ldap://" URLs are upgraded to + // a TLS connection using StartTLS as specified in https://tools.ietf.org/html/rfc2830. + Insecure bool `json:"insecure"` + + // ca is an optional reference to a config map by name containing the PEM-encoded CA bundle. + // It is used as a trust anchor to validate the TLS certificate presented by the remote server. + // The key "ca.crt" is used to locate the data. + // If specified and the config map or expected key is not found, the identity provider is not honored. + // If the specified ca data is not valid, the identity provider is not honored. + // If empty, the default system roots are used. + // The namespace for this config map is openshift-config. + // +optional + CA ConfigMapNameReference `json:"ca"` + + // attributes maps LDAP attributes to identities + Attributes LDAPAttributeMapping `json:"attributes"` +} + +// LDAPAttributeMapping maps LDAP attributes to OpenShift identity fields +type LDAPAttributeMapping struct { + // id is the list of attributes whose values should be used as the user ID. Required. + // First non-empty attribute is used. At least one attribute is required. If none of the listed + // attribute have a value, authentication fails. + // LDAP standard identity attribute is "dn" + ID []string `json:"id"` + + // preferredUsername is the list of attributes whose values should be used as the preferred username. + // LDAP standard login attribute is "uid" + // +optional + PreferredUsername []string `json:"preferredUsername,omitempty"` + + // name is the list of attributes whose values should be used as the display name. Optional. + // If unspecified, no display name is set for the identity + // LDAP standard display name attribute is "cn" + // +optional + Name []string `json:"name,omitempty"` + + // email is the list of attributes whose values should be used as the email address. Optional. + // If unspecified, no email is set for the identity + // +optional + Email []string `json:"email,omitempty"` +} + +// KeystonePasswordIdentityProvider provides identities for users authenticating using keystone password credentials +type KeystoneIdentityProvider struct { + // OAuthRemoteConnectionInfo contains information about how to connect to the keystone server + OAuthRemoteConnectionInfo `json:",inline"` + + // domainName is required for keystone v3 + DomainName string `json:"domainName"` + + // TODO if we ever add support for 3.11 to 4.0 upgrades, add this configuration + // useUsernameIdentity indicates that users should be authenticated by username, not keystone ID + // DEPRECATED - only use this option for legacy systems to ensure backwards compatibility + // +optional + // UseUsernameIdentity bool `json:"useUsernameIdentity"` +} + +// RequestHeaderIdentityProvider provides identities for users authenticating using request header credentials +type RequestHeaderIdentityProvider struct { + // loginURL is a URL to redirect unauthenticated /authorize requests to + // Unauthenticated requests from OAuth clients which expect interactive logins will be redirected here + // ${url} is replaced with the current URL, escaped to be safe in a query parameter + // https://www.example.com/sso-login?then=${url} + // ${query} is replaced with the current query string + // https://www.example.com/auth-proxy/oauth/authorize?${query} + // Required when login is set to true. + LoginURL string `json:"loginURL"` + + // challengeURL is a URL to redirect unauthenticated /authorize requests to + // Unauthenticated requests from OAuth clients which expect WWW-Authenticate challenges will be + // redirected here. + // ${url} is replaced with the current URL, escaped to be safe in a query parameter + // https://www.example.com/sso-login?then=${url} + // ${query} is replaced with the current query string + // https://www.example.com/auth-proxy/oauth/authorize?${query} + // Required when challenge is set to true. + ChallengeURL string `json:"challengeURL"` + + // ca is a required reference to a config map by name containing the PEM-encoded CA bundle. + // It is used as a trust anchor to validate the TLS certificate presented by the remote server. + // Specifically, it allows verification of incoming requests to prevent header spoofing. + // The key "ca.crt" is used to locate the data. + // If the config map or expected key is not found, the identity provider is not honored. + // If the specified ca data is not valid, the identity provider is not honored. + // The namespace for this config map is openshift-config. + ClientCA ConfigMapNameReference `json:"ca"` + + // clientCommonNames is an optional list of common names to require a match from. If empty, any + // client certificate validated against the clientCA bundle is considered authoritative. + // +optional + ClientCommonNames []string `json:"clientCommonNames,omitempty"` + + // headers is the set of headers to check for identity information + Headers []string `json:"headers"` + + // preferredUsernameHeaders is the set of headers to check for the preferred username + PreferredUsernameHeaders []string `json:"preferredUsernameHeaders"` + + // nameHeaders is the set of headers to check for the display name + NameHeaders []string `json:"nameHeaders"` + + // emailHeaders is the set of headers to check for the email address + EmailHeaders []string `json:"emailHeaders"` +} + +// GitHubIdentityProvider provides identities for users authenticating using GitHub credentials +type GitHubIdentityProvider struct { + // clientID is the oauth client ID + ClientID string `json:"clientID"` + + // clientSecret is a required reference to the secret by name containing the oauth client secret. + // The key "clientSecret" is used to locate the data. + // If the secret or expected key is not found, the identity provider is not honored. + // The namespace for this secret is openshift-config. + ClientSecret SecretNameReference `json:"clientSecret"` + + // organizations optionally restricts which organizations are allowed to log in + // +optional + Organizations []string `json:"organizations,omitempty"` + + // teams optionally restricts which teams are allowed to log in. Format is /. + // +optional + Teams []string `json:"teams,omitempty"` + + // hostname is the optional domain (e.g. "mycompany.com") for use with a hosted instance of + // GitHub Enterprise. + // It must match the GitHub Enterprise settings value configured at /setup/settings#hostname. + // +optional + Hostname string `json:"hostname"` + + // ca is an optional reference to a config map by name containing the PEM-encoded CA bundle. + // It is used as a trust anchor to validate the TLS certificate presented by the remote server. + // The key "ca.crt" is used to locate the data. + // If specified and the config map or expected key is not found, the identity provider is not honored. + // If the specified ca data is not valid, the identity provider is not honored. + // If empty, the default system roots are used. + // This can only be configured when hostname is set to a non-empty value. + // The namespace for this config map is openshift-config. + // +optional + CA ConfigMapNameReference `json:"ca"` +} + +// GitLabIdentityProvider provides identities for users authenticating using GitLab credentials +type GitLabIdentityProvider struct { + // clientID is the oauth client ID + ClientID string `json:"clientID"` + + // clientSecret is a required reference to the secret by name containing the oauth client secret. + // The key "clientSecret" is used to locate the data. + // If the secret or expected key is not found, the identity provider is not honored. + // The namespace for this secret is openshift-config. + ClientSecret SecretNameReference `json:"clientSecret"` + + // url is the oauth server base URL + URL string `json:"url"` + + // ca is an optional reference to a config map by name containing the PEM-encoded CA bundle. + // It is used as a trust anchor to validate the TLS certificate presented by the remote server. + // The key "ca.crt" is used to locate the data. + // If specified and the config map or expected key is not found, the identity provider is not honored. + // If the specified ca data is not valid, the identity provider is not honored. + // If empty, the default system roots are used. + // The namespace for this config map is openshift-config. + // +optional + CA ConfigMapNameReference `json:"ca"` +} + +// GoogleIdentityProvider provides identities for users authenticating using Google credentials +type GoogleIdentityProvider struct { + // clientID is the oauth client ID + ClientID string `json:"clientID"` + + // clientSecret is a required reference to the secret by name containing the oauth client secret. + // The key "clientSecret" is used to locate the data. + // If the secret or expected key is not found, the identity provider is not honored. + // The namespace for this secret is openshift-config. + ClientSecret SecretNameReference `json:"clientSecret"` + + // hostedDomain is the optional Google App domain (e.g. "mycompany.com") to restrict logins to + // +optional + HostedDomain string `json:"hostedDomain"` +} + +// OpenIDIdentityProvider provides identities for users authenticating using OpenID credentials +type OpenIDIdentityProvider struct { + // clientID is the oauth client ID + ClientID string `json:"clientID"` + + // clientSecret is a required reference to the secret by name containing the oauth client secret. + // The key "clientSecret" is used to locate the data. + // If the secret or expected key is not found, the identity provider is not honored. + // The namespace for this secret is openshift-config. + ClientSecret SecretNameReference `json:"clientSecret"` + + // ca is an optional reference to a config map by name containing the PEM-encoded CA bundle. + // It is used as a trust anchor to validate the TLS certificate presented by the remote server. + // The key "ca.crt" is used to locate the data. + // If specified and the config map or expected key is not found, the identity provider is not honored. + // If the specified ca data is not valid, the identity provider is not honored. + // If empty, the default system roots are used. + // The namespace for this config map is openshift-config. + // +optional + CA ConfigMapNameReference `json:"ca"` + + // extraScopes are any scopes to request in addition to the standard "openid" scope. + // +optional + ExtraScopes []string `json:"extraScopes,omitempty"` + + // extraAuthorizeParameters are any custom parameters to add to the authorize request. + // +optional + ExtraAuthorizeParameters map[string]string `json:"extraAuthorizeParameters,omitempty"` + + // issuer is the URL that the OpenID Provider asserts as its Issuer Identifier. + // It must use the https scheme with no query or fragment component. + Issuer string `json:"issuer"` + + // claims mappings + Claims OpenIDClaims `json:"claims"` +} + +// UserIDClaim is the claim used to provide a stable identifier for OIDC identities. +// Per http://openid.net/specs/openid-connect-core-1_0.html#ClaimStability +// "The sub (subject) and iss (issuer) Claims, used together, are the only Claims that an RP can +// rely upon as a stable identifier for the End-User, since the sub Claim MUST be locally unique +// and never reassigned within the Issuer for a particular End-User, as described in Section 2. +// Therefore, the only guaranteed unique identifier for a given End-User is the combination of the +// iss Claim and the sub Claim." +const UserIDClaim = "sub" + +// OpenIDClaims contains a list of OpenID claims to use when authenticating with an OpenID identity provider +type OpenIDClaims struct { + // preferredUsername is the list of claims whose values should be used as the preferred username. + // If unspecified, the preferred username is determined from the value of the sub claim + // +optional + PreferredUsername []string `json:"preferredUsername,omitempty"` + + // name is the list of claims whose values should be used as the display name. Optional. + // If unspecified, no display name is set for the identity + // +optional + Name []string `json:"name,omitempty"` + + // email is the list of claims whose values should be used as the email address. Optional. + // If unspecified, no email is set for the identity + // +optional + Email []string `json:"email,omitempty"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type OAuthList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []OAuth `json:"items"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_operatorhub.go b/vendor/github.com/openshift/api/config/v1/types_operatorhub.go new file mode 100644 index 0000000000000..1b2b7f82e9e99 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_operatorhub.go @@ -0,0 +1,79 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// OperatorHubSpec defines the desired state of OperatorHub +type OperatorHubSpec struct { + // disableAllDefaultSources allows you to disable all the default hub + // sources. If this is true, a specific entry in sources can be used to + // enable a default source. If this is false, a specific entry in + // sources can be used to disable or enable a default source. + // +optional + DisableAllDefaultSources bool `json:"disableAllDefaultSources,omitempty"` + // sources is the list of default hub sources and their configuration. + // If the list is empty, it implies that the default hub sources are + // enabled on the cluster unless disableAllDefaultSources is true. + // If disableAllDefaultSources is true and sources is not empty, + // the configuration present in sources will take precedence. The list of + // default hub sources and their current state will always be reflected in + // the status block. + // +optional + Sources []HubSource `json:"sources,omitempty"` +} + +// OperatorHubStatus defines the observed state of OperatorHub. The current +// state of the default hub sources will always be reflected here. +type OperatorHubStatus struct { + // sources encapsulates the result of applying the configuration for each + // hub source + Sources []HubSourceStatus `json:"sources,omitempty"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// OperatorHub is the Schema for the operatorhubs API. It can be used to change +// the state of the default hub sources for OperatorHub on the cluster from +// enabled to disabled and vice versa. +// +kubebuilder:subresource:status +// +genclient +// +genclient:nonNamespaced +type OperatorHub struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata"` + + Spec OperatorHubSpec `json:"spec"` + Status OperatorHubStatus `json:"status"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// OperatorHubList contains a list of OperatorHub +type OperatorHubList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + Items []OperatorHub `json:"items"` +} + +// HubSource is used to specify the hub source and its configuration +type HubSource struct { + // name is the name of one of the default hub sources + // +kubebuilder:validation:MaxLength=253 + // +kubebuilder:validation:MinLength=1 + // +kubebuilder:Required + Name string `json:"name"` + // disabled is used to disable a default hub source on cluster + // +kubebuilder:Required + Disabled bool `json:"disabled"` +} + +// HubSourceStatus is used to reflect the current state of applying the +// configuration to a default source +type HubSourceStatus struct { + HubSource `json:",omitempty"` + // status indicates success or failure in applying the configuration + Status string `json:"status,omitempty"` + // message provides more information regarding failures + Message string `json:"message,omitempty"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_project.go b/vendor/github.com/openshift/api/config/v1/types_project.go new file mode 100644 index 0000000000000..244ce3ef8fdbd --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_project.go @@ -0,0 +1,54 @@ +package v1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Project holds cluster-wide information about Project. The canonical name is `cluster` +type Project struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec holds user settable values for configuration + // +kubebuilder:validation:Required + // +required + Spec ProjectSpec `json:"spec"` + // status holds observed values from the cluster. They may not be overridden. + // +optional + Status ProjectStatus `json:"status"` +} + +// TemplateReference references a template in a specific namespace. +// The namespace must be specified at the point of use. +type TemplateReference struct { + // name is the metadata.name of the referenced project request template + Name string `json:"name"` +} + +// ProjectSpec holds the project creation configuration. +type ProjectSpec struct { + // projectRequestMessage is the string presented to a user if they are unable to request a project via the projectrequest api endpoint + // +optional + ProjectRequestMessage string `json:"projectRequestMessage"` + + // projectRequestTemplate is the template to use for creating projects in response to projectrequest. + // This must point to a template in 'openshift-config' namespace. It is optional. + // If it is not specified, a default template is used. + // + // +optional + ProjectRequestTemplate TemplateReference `json:"projectRequestTemplate"` +} + +type ProjectStatus struct { +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type ProjectList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []Project `json:"items"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_proxy.go b/vendor/github.com/openshift/api/config/v1/types_proxy.go new file mode 100644 index 0000000000000..211e501e08cbe --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_proxy.go @@ -0,0 +1,94 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Proxy holds cluster-wide information on how to configure default proxies for the cluster. The canonical name is `cluster` +type Proxy struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // Spec holds user-settable values for the proxy configuration + // +kubebuilder:validation:Required + // +required + Spec ProxySpec `json:"spec"` + // status holds observed values from the cluster. They may not be overridden. + // +optional + Status ProxyStatus `json:"status"` +} + +// ProxySpec contains cluster proxy creation configuration. +type ProxySpec struct { + // httpProxy is the URL of the proxy for HTTP requests. Empty means unset and will not result in an env var. + // +optional + HTTPProxy string `json:"httpProxy,omitempty"` + + // httpsProxy is the URL of the proxy for HTTPS requests. Empty means unset and will not result in an env var. + // +optional + HTTPSProxy string `json:"httpsProxy,omitempty"` + + // noProxy is a comma-separated list of hostnames and/or CIDRs for which the proxy should not be used. + // Empty means unset and will not result in an env var. + // +optional + NoProxy string `json:"noProxy,omitempty"` + + // readinessEndpoints is a list of endpoints used to verify readiness of the proxy. + // +optional + ReadinessEndpoints []string `json:"readinessEndpoints,omitempty"` + + // trustedCA is a reference to a ConfigMap containing a CA certificate bundle. + // The trustedCA field should only be consumed by a proxy validator. The + // validator is responsible for reading the certificate bundle from the required + // key "ca-bundle.crt", merging it with the system default trust bundle, + // and writing the merged trust bundle to a ConfigMap named "trusted-ca-bundle" + // in the "openshift-config-managed" namespace. Clients that expect to make + // proxy connections must use the trusted-ca-bundle for all HTTPS requests to + // the proxy, and may use the trusted-ca-bundle for non-proxy HTTPS requests as + // well. + // + // The namespace for the ConfigMap referenced by trustedCA is + // "openshift-config". Here is an example ConfigMap (in yaml): + // + // apiVersion: v1 + // kind: ConfigMap + // metadata: + // name: user-ca-bundle + // namespace: openshift-config + // data: + // ca-bundle.crt: | + // -----BEGIN CERTIFICATE----- + // Custom CA certificate bundle. + // -----END CERTIFICATE----- + // + // +optional + TrustedCA ConfigMapNameReference `json:"trustedCA,omitempty"` +} + +// ProxyStatus shows current known state of the cluster proxy. +type ProxyStatus struct { + // httpProxy is the URL of the proxy for HTTP requests. + // +optional + HTTPProxy string `json:"httpProxy,omitempty"` + + // httpsProxy is the URL of the proxy for HTTPS requests. + // +optional + HTTPSProxy string `json:"httpsProxy,omitempty"` + + // noProxy is a comma-separated list of hostnames and/or CIDRs for which the proxy should not be used. + // +optional + NoProxy string `json:"noProxy,omitempty"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type ProxyList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []Proxy `json:"items"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_scheduling.go b/vendor/github.com/openshift/api/config/v1/types_scheduling.go new file mode 100644 index 0000000000000..c54bb49e981fc --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_scheduling.go @@ -0,0 +1,75 @@ +package v1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Scheduler holds cluster-wide config information to run the Kubernetes Scheduler +// and influence its placement decisions. The canonical name for this config is `cluster`. +type Scheduler struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec holds user settable values for configuration + // +kubebuilder:validation:Required + // +required + Spec SchedulerSpec `json:"spec"` + // status holds observed values from the cluster. They may not be overridden. + // +optional + Status SchedulerStatus `json:"status"` +} + +type SchedulerSpec struct { + // policy is a reference to a ConfigMap containing scheduler policy which has + // user specified predicates and priorities. If this ConfigMap is not available + // scheduler will default to use DefaultAlgorithmProvider. + // The namespace for this configmap is openshift-config. + // +optional + Policy ConfigMapNameReference `json:"policy"` + // defaultNodeSelector helps set the cluster-wide default node selector to + // restrict pod placement to specific nodes. This is applied to the pods + // created in all namespaces and creates an intersection with any existing + // nodeSelectors already set on a pod, additionally constraining that pod's selector. + // For example, + // defaultNodeSelector: "type=user-node,region=east" would set nodeSelector + // field in pod spec to "type=user-node,region=east" to all pods created + // in all namespaces. Namespaces having project-wide node selectors won't be + // impacted even if this field is set. This adds an annotation section to + // the namespace. + // For example, if a new namespace is created with + // node-selector='type=user-node,region=east', + // the annotation openshift.io/node-selector: type=user-node,region=east + // gets added to the project. When the openshift.io/node-selector annotation + // is set on the project the value is used in preference to the value we are setting + // for defaultNodeSelector field. + // For instance, + // openshift.io/node-selector: "type=user-node,region=west" means + // that the default of "type=user-node,region=east" set in defaultNodeSelector + // would not be applied. + // +optional + DefaultNodeSelector string `json:"defaultNodeSelector,omitempty"` + // MastersSchedulable allows masters nodes to be schedulable. When this flag is + // turned on, all the master nodes in the cluster will be made schedulable, + // so that workload pods can run on them. The default value for this field is false, + // meaning none of the master nodes are schedulable. + // Important Note: Once the workload pods start running on the master nodes, + // extreme care must be taken to ensure that cluster-critical control plane components + // are not impacted. + // Please turn on this field after doing due diligence. + // +optional + MastersSchedulable bool `json:"mastersSchedulable"` +} + +type SchedulerStatus struct { +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type SchedulerList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []Scheduler `json:"items"` +} diff --git a/vendor/github.com/openshift/api/config/v1/types_tlssecurityprofile.go b/vendor/github.com/openshift/api/config/v1/types_tlssecurityprofile.go new file mode 100644 index 0000000000000..9dbacb9966814 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/types_tlssecurityprofile.go @@ -0,0 +1,262 @@ +package v1 + +// TLSSecurityProfile defines the schema for a TLS security profile. This object +// is used by operators to apply TLS security settings to operands. +// +union +type TLSSecurityProfile struct { + // type is one of Old, Intermediate, Modern or Custom. Custom provides + // the ability to specify individual TLS security profile parameters. + // Old, Intermediate and Modern are TLS security profiles based on: + // + // https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations + // + // The profiles are intent based, so they may change over time as new ciphers are developed and existing ciphers + // are found to be insecure. Depending on precisely which ciphers are available to a process, the list may be + // reduced. + // + // Note that the Modern profile is currently not supported because it is not + // yet well adopted by common software libraries. + // + // +unionDiscriminator + // +optional + Type TLSProfileType `json:"type"` + // old is a TLS security profile based on: + // + // https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility + // + // and looks like this (yaml): + // + // ciphers: + // - TLS_AES_128_GCM_SHA256 + // - TLS_AES_256_GCM_SHA384 + // - TLS_CHACHA20_POLY1305_SHA256 + // - ECDHE-ECDSA-AES128-GCM-SHA256 + // - ECDHE-RSA-AES128-GCM-SHA256 + // - ECDHE-ECDSA-AES256-GCM-SHA384 + // - ECDHE-RSA-AES256-GCM-SHA384 + // - ECDHE-ECDSA-CHACHA20-POLY1305 + // - ECDHE-RSA-CHACHA20-POLY1305 + // - DHE-RSA-AES128-GCM-SHA256 + // - DHE-RSA-AES256-GCM-SHA384 + // - DHE-RSA-CHACHA20-POLY1305 + // - ECDHE-ECDSA-AES128-SHA256 + // - ECDHE-RSA-AES128-SHA256 + // - ECDHE-ECDSA-AES128-SHA + // - ECDHE-RSA-AES128-SHA + // - ECDHE-ECDSA-AES256-SHA384 + // - ECDHE-RSA-AES256-SHA384 + // - ECDHE-ECDSA-AES256-SHA + // - ECDHE-RSA-AES256-SHA + // - DHE-RSA-AES128-SHA256 + // - DHE-RSA-AES256-SHA256 + // - AES128-GCM-SHA256 + // - AES256-GCM-SHA384 + // - AES128-SHA256 + // - AES256-SHA256 + // - AES128-SHA + // - AES256-SHA + // - DES-CBC3-SHA + // minTLSVersion: TLSv1.0 + // + // +optional + // +nullable + Old *OldTLSProfile `json:"old,omitempty"` + // intermediate is a TLS security profile based on: + // + // https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28recommended.29 + // + // and looks like this (yaml): + // + // ciphers: + // - TLS_AES_128_GCM_SHA256 + // - TLS_AES_256_GCM_SHA384 + // - TLS_CHACHA20_POLY1305_SHA256 + // - ECDHE-ECDSA-AES128-GCM-SHA256 + // - ECDHE-RSA-AES128-GCM-SHA256 + // - ECDHE-ECDSA-AES256-GCM-SHA384 + // - ECDHE-RSA-AES256-GCM-SHA384 + // - ECDHE-ECDSA-CHACHA20-POLY1305 + // - ECDHE-RSA-CHACHA20-POLY1305 + // - DHE-RSA-AES128-GCM-SHA256 + // - DHE-RSA-AES256-GCM-SHA384 + // minTLSVersion: TLSv1.2 + // + // +optional + // +nullable + Intermediate *IntermediateTLSProfile `json:"intermediate,omitempty"` + // modern is a TLS security profile based on: + // + // https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility + // + // and looks like this (yaml): + // + // ciphers: + // - TLS_AES_128_GCM_SHA256 + // - TLS_AES_256_GCM_SHA384 + // - TLS_CHACHA20_POLY1305_SHA256 + // minTLSVersion: TLSv1.3 + // + // NOTE: Currently unsupported. + // + // +optional + // +nullable + Modern *ModernTLSProfile `json:"modern,omitempty"` + // custom is a user-defined TLS security profile. Be extremely careful using a custom + // profile as invalid configurations can be catastrophic. An example custom profile + // looks like this: + // + // ciphers: + // - ECDHE-ECDSA-CHACHA20-POLY1305 + // - ECDHE-RSA-CHACHA20-POLY1305 + // - ECDHE-RSA-AES128-GCM-SHA256 + // - ECDHE-ECDSA-AES128-GCM-SHA256 + // minTLSVersion: TLSv1.1 + // + // +optional + // +nullable + Custom *CustomTLSProfile `json:"custom,omitempty"` +} + +// OldTLSProfile is a TLS security profile based on: +// https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility +type OldTLSProfile struct{} + +// IntermediateTLSProfile is a TLS security profile based on: +// https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29 +type IntermediateTLSProfile struct{} + +// ModernTLSProfile is a TLS security profile based on: +// https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility +type ModernTLSProfile struct{} + +// CustomTLSProfile is a user-defined TLS security profile. Be extremely careful +// using a custom TLS profile as invalid configurations can be catastrophic. +type CustomTLSProfile struct { + TLSProfileSpec `json:",inline"` +} + +// TLSProfileType defines a TLS security profile type. +// +kubebuilder:validation:Enum=Old;Intermediate;Modern;Custom +type TLSProfileType string + +const ( + // Old is a TLS security profile based on: + // https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility + TLSProfileOldType TLSProfileType = "Old" + // Intermediate is a TLS security profile based on: + // https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29 + TLSProfileIntermediateType TLSProfileType = "Intermediate" + // Modern is a TLS security profile based on: + // https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility + TLSProfileModernType TLSProfileType = "Modern" + // Custom is a TLS security profile that allows for user-defined parameters. + TLSProfileCustomType TLSProfileType = "Custom" +) + +// TLSProfileSpec is the desired behavior of a TLSSecurityProfile. +type TLSProfileSpec struct { + // ciphers is used to specify the cipher algorithms that are negotiated + // during the TLS handshake. Operators may remove entries their operands + // do not support. For example, to use DES-CBC3-SHA (yaml): + // + // ciphers: + // - DES-CBC3-SHA + // + Ciphers []string `json:"ciphers"` + // minTLSVersion is used to specify the minimal version of the TLS protocol + // that is negotiated during the TLS handshake. For example, to use TLS + // versions 1.1, 1.2 and 1.3 (yaml): + // + // minTLSVersion: TLSv1.1 + // + // NOTE: currently the highest minTLSVersion allowed is VersionTLS12 + // + MinTLSVersion TLSProtocolVersion `json:"minTLSVersion"` +} + +// TLSProtocolVersion is a way to specify the protocol version used for TLS connections. +// Protocol versions are based on the following most common TLS configurations: +// +// https://ssl-config.mozilla.org/ +// +// Note that SSLv3.0 is not a supported protocol version due to well known +// vulnerabilities such as POODLE: https://en.wikipedia.org/wiki/POODLE +// +kubebuilder:validation:Enum=VersionTLS10;VersionTLS11;VersionTLS12;VersionTLS13 +type TLSProtocolVersion string + +const ( + // VersionTLSv10 is version 1.0 of the TLS security protocol. + VersionTLS10 TLSProtocolVersion = "VersionTLS10" + // VersionTLSv11 is version 1.1 of the TLS security protocol. + VersionTLS11 TLSProtocolVersion = "VersionTLS11" + // VersionTLSv12 is version 1.2 of the TLS security protocol. + VersionTLS12 TLSProtocolVersion = "VersionTLS12" + // VersionTLSv13 is version 1.3 of the TLS security protocol. + VersionTLS13 TLSProtocolVersion = "VersionTLS13" +) + +// TLSProfiles Contains a map of TLSProfileType names to TLSProfileSpec. +// +// NOTE: The caller needs to make sure to check that these constants are valid for their binary. Not all +// entries map to values for all binaries. In the case of ties, the kube-apiserver wins. Do not fail, +// just be sure to whitelist only and everything will be ok. +var TLSProfiles = map[TLSProfileType]*TLSProfileSpec{ + TLSProfileOldType: { + Ciphers: []string{ + "TLS_AES_128_GCM_SHA256", + "TLS_AES_256_GCM_SHA384", + "TLS_CHACHA20_POLY1305_SHA256", + "ECDHE-ECDSA-AES128-GCM-SHA256", + "ECDHE-RSA-AES128-GCM-SHA256", + "ECDHE-ECDSA-AES256-GCM-SHA384", + "ECDHE-RSA-AES256-GCM-SHA384", + "ECDHE-ECDSA-CHACHA20-POLY1305", + "ECDHE-RSA-CHACHA20-POLY1305", + "DHE-RSA-AES128-GCM-SHA256", + "DHE-RSA-AES256-GCM-SHA384", + "DHE-RSA-CHACHA20-POLY1305", + "ECDHE-ECDSA-AES128-SHA256", + "ECDHE-RSA-AES128-SHA256", + "ECDHE-ECDSA-AES128-SHA", + "ECDHE-RSA-AES128-SHA", + "ECDHE-ECDSA-AES256-SHA384", + "ECDHE-RSA-AES256-SHA384", + "ECDHE-ECDSA-AES256-SHA", + "ECDHE-RSA-AES256-SHA", + "DHE-RSA-AES128-SHA256", + "DHE-RSA-AES256-SHA256", + "AES128-GCM-SHA256", + "AES256-GCM-SHA384", + "AES128-SHA256", + "AES256-SHA256", + "AES128-SHA", + "AES256-SHA", + "DES-CBC3-SHA", + }, + MinTLSVersion: VersionTLS10, + }, + TLSProfileIntermediateType: { + Ciphers: []string{ + "TLS_AES_128_GCM_SHA256", + "TLS_AES_256_GCM_SHA384", + "TLS_CHACHA20_POLY1305_SHA256", + "ECDHE-ECDSA-AES128-GCM-SHA256", + "ECDHE-RSA-AES128-GCM-SHA256", + "ECDHE-ECDSA-AES256-GCM-SHA384", + "ECDHE-RSA-AES256-GCM-SHA384", + "ECDHE-ECDSA-CHACHA20-POLY1305", + "ECDHE-RSA-CHACHA20-POLY1305", + "DHE-RSA-AES128-GCM-SHA256", + "DHE-RSA-AES256-GCM-SHA384", + }, + MinTLSVersion: VersionTLS12, + }, + TLSProfileModernType: { + Ciphers: []string{ + "TLS_AES_128_GCM_SHA256", + "TLS_AES_256_GCM_SHA384", + "TLS_CHACHA20_POLY1305_SHA256", + }, + MinTLSVersion: VersionTLS13, + }, +} diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..4a41d1b7f20d5 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go @@ -0,0 +1,3733 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *APIServer) DeepCopyInto(out *APIServer) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new APIServer. +func (in *APIServer) DeepCopy() *APIServer { + if in == nil { + return nil + } + out := new(APIServer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *APIServer) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *APIServerEncryption) DeepCopyInto(out *APIServerEncryption) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new APIServerEncryption. +func (in *APIServerEncryption) DeepCopy() *APIServerEncryption { + if in == nil { + return nil + } + out := new(APIServerEncryption) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *APIServerList) DeepCopyInto(out *APIServerList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]APIServer, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new APIServerList. +func (in *APIServerList) DeepCopy() *APIServerList { + if in == nil { + return nil + } + out := new(APIServerList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *APIServerList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *APIServerNamedServingCert) DeepCopyInto(out *APIServerNamedServingCert) { + *out = *in + if in.Names != nil { + in, out := &in.Names, &out.Names + *out = make([]string, len(*in)) + copy(*out, *in) + } + out.ServingCertificate = in.ServingCertificate + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new APIServerNamedServingCert. +func (in *APIServerNamedServingCert) DeepCopy() *APIServerNamedServingCert { + if in == nil { + return nil + } + out := new(APIServerNamedServingCert) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *APIServerServingCerts) DeepCopyInto(out *APIServerServingCerts) { + *out = *in + if in.NamedCertificates != nil { + in, out := &in.NamedCertificates, &out.NamedCertificates + *out = make([]APIServerNamedServingCert, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new APIServerServingCerts. +func (in *APIServerServingCerts) DeepCopy() *APIServerServingCerts { + if in == nil { + return nil + } + out := new(APIServerServingCerts) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *APIServerSpec) DeepCopyInto(out *APIServerSpec) { + *out = *in + in.ServingCerts.DeepCopyInto(&out.ServingCerts) + out.ClientCA = in.ClientCA + if in.AdditionalCORSAllowedOrigins != nil { + in, out := &in.AdditionalCORSAllowedOrigins, &out.AdditionalCORSAllowedOrigins + *out = make([]string, len(*in)) + copy(*out, *in) + } + out.Encryption = in.Encryption + if in.TLSSecurityProfile != nil { + in, out := &in.TLSSecurityProfile, &out.TLSSecurityProfile + *out = new(TLSSecurityProfile) + (*in).DeepCopyInto(*out) + } + out.Audit = in.Audit + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new APIServerSpec. +func (in *APIServerSpec) DeepCopy() *APIServerSpec { + if in == nil { + return nil + } + out := new(APIServerSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *APIServerStatus) DeepCopyInto(out *APIServerStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new APIServerStatus. +func (in *APIServerStatus) DeepCopy() *APIServerStatus { + if in == nil { + return nil + } + out := new(APIServerStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSPlatformSpec) DeepCopyInto(out *AWSPlatformSpec) { + *out = *in + if in.ServiceEndpoints != nil { + in, out := &in.ServiceEndpoints, &out.ServiceEndpoints + *out = make([]AWSServiceEndpoint, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSPlatformSpec. +func (in *AWSPlatformSpec) DeepCopy() *AWSPlatformSpec { + if in == nil { + return nil + } + out := new(AWSPlatformSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSPlatformStatus) DeepCopyInto(out *AWSPlatformStatus) { + *out = *in + if in.ServiceEndpoints != nil { + in, out := &in.ServiceEndpoints, &out.ServiceEndpoints + *out = make([]AWSServiceEndpoint, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSPlatformStatus. +func (in *AWSPlatformStatus) DeepCopy() *AWSPlatformStatus { + if in == nil { + return nil + } + out := new(AWSPlatformStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSServiceEndpoint) DeepCopyInto(out *AWSServiceEndpoint) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSServiceEndpoint. +func (in *AWSServiceEndpoint) DeepCopy() *AWSServiceEndpoint { + if in == nil { + return nil + } + out := new(AWSServiceEndpoint) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AdmissionConfig) DeepCopyInto(out *AdmissionConfig) { + *out = *in + if in.PluginConfig != nil { + in, out := &in.PluginConfig, &out.PluginConfig + *out = make(map[string]AdmissionPluginConfig, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } + if in.EnabledAdmissionPlugins != nil { + in, out := &in.EnabledAdmissionPlugins, &out.EnabledAdmissionPlugins + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.DisabledAdmissionPlugins != nil { + in, out := &in.DisabledAdmissionPlugins, &out.DisabledAdmissionPlugins + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AdmissionConfig. +func (in *AdmissionConfig) DeepCopy() *AdmissionConfig { + if in == nil { + return nil + } + out := new(AdmissionConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AdmissionPluginConfig) DeepCopyInto(out *AdmissionPluginConfig) { + *out = *in + in.Configuration.DeepCopyInto(&out.Configuration) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AdmissionPluginConfig. +func (in *AdmissionPluginConfig) DeepCopy() *AdmissionPluginConfig { + if in == nil { + return nil + } + out := new(AdmissionPluginConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Audit) DeepCopyInto(out *Audit) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Audit. +func (in *Audit) DeepCopy() *Audit { + if in == nil { + return nil + } + out := new(Audit) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuditConfig) DeepCopyInto(out *AuditConfig) { + *out = *in + in.PolicyConfiguration.DeepCopyInto(&out.PolicyConfiguration) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuditConfig. +func (in *AuditConfig) DeepCopy() *AuditConfig { + if in == nil { + return nil + } + out := new(AuditConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Authentication) DeepCopyInto(out *Authentication) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Authentication. +func (in *Authentication) DeepCopy() *Authentication { + if in == nil { + return nil + } + out := new(Authentication) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Authentication) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuthenticationList) DeepCopyInto(out *AuthenticationList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Authentication, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuthenticationList. +func (in *AuthenticationList) DeepCopy() *AuthenticationList { + if in == nil { + return nil + } + out := new(AuthenticationList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AuthenticationList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuthenticationSpec) DeepCopyInto(out *AuthenticationSpec) { + *out = *in + out.OAuthMetadata = in.OAuthMetadata + if in.WebhookTokenAuthenticators != nil { + in, out := &in.WebhookTokenAuthenticators, &out.WebhookTokenAuthenticators + *out = make([]DeprecatedWebhookTokenAuthenticator, len(*in)) + copy(*out, *in) + } + if in.WebhookTokenAuthenticator != nil { + in, out := &in.WebhookTokenAuthenticator, &out.WebhookTokenAuthenticator + *out = new(WebhookTokenAuthenticator) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuthenticationSpec. +func (in *AuthenticationSpec) DeepCopy() *AuthenticationSpec { + if in == nil { + return nil + } + out := new(AuthenticationSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuthenticationStatus) DeepCopyInto(out *AuthenticationStatus) { + *out = *in + out.IntegratedOAuthMetadata = in.IntegratedOAuthMetadata + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuthenticationStatus. +func (in *AuthenticationStatus) DeepCopy() *AuthenticationStatus { + if in == nil { + return nil + } + out := new(AuthenticationStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzurePlatformSpec) DeepCopyInto(out *AzurePlatformSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzurePlatformSpec. +func (in *AzurePlatformSpec) DeepCopy() *AzurePlatformSpec { + if in == nil { + return nil + } + out := new(AzurePlatformSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzurePlatformStatus) DeepCopyInto(out *AzurePlatformStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzurePlatformStatus. +func (in *AzurePlatformStatus) DeepCopy() *AzurePlatformStatus { + if in == nil { + return nil + } + out := new(AzurePlatformStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BareMetalPlatformSpec) DeepCopyInto(out *BareMetalPlatformSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BareMetalPlatformSpec. +func (in *BareMetalPlatformSpec) DeepCopy() *BareMetalPlatformSpec { + if in == nil { + return nil + } + out := new(BareMetalPlatformSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BareMetalPlatformStatus) DeepCopyInto(out *BareMetalPlatformStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BareMetalPlatformStatus. +func (in *BareMetalPlatformStatus) DeepCopy() *BareMetalPlatformStatus { + if in == nil { + return nil + } + out := new(BareMetalPlatformStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BasicAuthIdentityProvider) DeepCopyInto(out *BasicAuthIdentityProvider) { + *out = *in + out.OAuthRemoteConnectionInfo = in.OAuthRemoteConnectionInfo + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BasicAuthIdentityProvider. +func (in *BasicAuthIdentityProvider) DeepCopy() *BasicAuthIdentityProvider { + if in == nil { + return nil + } + out := new(BasicAuthIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Build) DeepCopyInto(out *Build) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Build. +func (in *Build) DeepCopy() *Build { + if in == nil { + return nil + } + out := new(Build) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Build) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildDefaults) DeepCopyInto(out *BuildDefaults) { + *out = *in + if in.DefaultProxy != nil { + in, out := &in.DefaultProxy, &out.DefaultProxy + *out = new(ProxySpec) + (*in).DeepCopyInto(*out) + } + if in.GitProxy != nil { + in, out := &in.GitProxy, &out.GitProxy + *out = new(ProxySpec) + (*in).DeepCopyInto(*out) + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]corev1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ImageLabels != nil { + in, out := &in.ImageLabels, &out.ImageLabels + *out = make([]ImageLabel, len(*in)) + copy(*out, *in) + } + in.Resources.DeepCopyInto(&out.Resources) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildDefaults. +func (in *BuildDefaults) DeepCopy() *BuildDefaults { + if in == nil { + return nil + } + out := new(BuildDefaults) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildList) DeepCopyInto(out *BuildList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Build, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildList. +func (in *BuildList) DeepCopy() *BuildList { + if in == nil { + return nil + } + out := new(BuildList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *BuildList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildOverrides) DeepCopyInto(out *BuildOverrides) { + *out = *in + if in.ImageLabels != nil { + in, out := &in.ImageLabels, &out.ImageLabels + *out = make([]ImageLabel, len(*in)) + copy(*out, *in) + } + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Tolerations != nil { + in, out := &in.Tolerations, &out.Tolerations + *out = make([]corev1.Toleration, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ForcePull != nil { + in, out := &in.ForcePull, &out.ForcePull + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildOverrides. +func (in *BuildOverrides) DeepCopy() *BuildOverrides { + if in == nil { + return nil + } + out := new(BuildOverrides) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BuildSpec) DeepCopyInto(out *BuildSpec) { + *out = *in + out.AdditionalTrustedCA = in.AdditionalTrustedCA + in.BuildDefaults.DeepCopyInto(&out.BuildDefaults) + in.BuildOverrides.DeepCopyInto(&out.BuildOverrides) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildSpec. +func (in *BuildSpec) DeepCopy() *BuildSpec { + if in == nil { + return nil + } + out := new(BuildSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertInfo) DeepCopyInto(out *CertInfo) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertInfo. +func (in *CertInfo) DeepCopy() *CertInfo { + if in == nil { + return nil + } + out := new(CertInfo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClientConnectionOverrides) DeepCopyInto(out *ClientConnectionOverrides) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClientConnectionOverrides. +func (in *ClientConnectionOverrides) DeepCopy() *ClientConnectionOverrides { + if in == nil { + return nil + } + out := new(ClientConnectionOverrides) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterNetworkEntry) DeepCopyInto(out *ClusterNetworkEntry) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterNetworkEntry. +func (in *ClusterNetworkEntry) DeepCopy() *ClusterNetworkEntry { + if in == nil { + return nil + } + out := new(ClusterNetworkEntry) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterOperator) DeepCopyInto(out *ClusterOperator) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterOperator. +func (in *ClusterOperator) DeepCopy() *ClusterOperator { + if in == nil { + return nil + } + out := new(ClusterOperator) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterOperator) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterOperatorList) DeepCopyInto(out *ClusterOperatorList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterOperator, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterOperatorList. +func (in *ClusterOperatorList) DeepCopy() *ClusterOperatorList { + if in == nil { + return nil + } + out := new(ClusterOperatorList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterOperatorList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterOperatorSpec) DeepCopyInto(out *ClusterOperatorSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterOperatorSpec. +func (in *ClusterOperatorSpec) DeepCopy() *ClusterOperatorSpec { + if in == nil { + return nil + } + out := new(ClusterOperatorSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterOperatorStatus) DeepCopyInto(out *ClusterOperatorStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ClusterOperatorStatusCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Versions != nil { + in, out := &in.Versions, &out.Versions + *out = make([]OperandVersion, len(*in)) + copy(*out, *in) + } + if in.RelatedObjects != nil { + in, out := &in.RelatedObjects, &out.RelatedObjects + *out = make([]ObjectReference, len(*in)) + copy(*out, *in) + } + in.Extension.DeepCopyInto(&out.Extension) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterOperatorStatus. +func (in *ClusterOperatorStatus) DeepCopy() *ClusterOperatorStatus { + if in == nil { + return nil + } + out := new(ClusterOperatorStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterOperatorStatusCondition) DeepCopyInto(out *ClusterOperatorStatusCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterOperatorStatusCondition. +func (in *ClusterOperatorStatusCondition) DeepCopy() *ClusterOperatorStatusCondition { + if in == nil { + return nil + } + out := new(ClusterOperatorStatusCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterVersion) DeepCopyInto(out *ClusterVersion) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterVersion. +func (in *ClusterVersion) DeepCopy() *ClusterVersion { + if in == nil { + return nil + } + out := new(ClusterVersion) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterVersion) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterVersionList) DeepCopyInto(out *ClusterVersionList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterVersion, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterVersionList. +func (in *ClusterVersionList) DeepCopy() *ClusterVersionList { + if in == nil { + return nil + } + out := new(ClusterVersionList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterVersionList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterVersionSpec) DeepCopyInto(out *ClusterVersionSpec) { + *out = *in + if in.DesiredUpdate != nil { + in, out := &in.DesiredUpdate, &out.DesiredUpdate + *out = new(Update) + **out = **in + } + if in.Overrides != nil { + in, out := &in.Overrides, &out.Overrides + *out = make([]ComponentOverride, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterVersionSpec. +func (in *ClusterVersionSpec) DeepCopy() *ClusterVersionSpec { + if in == nil { + return nil + } + out := new(ClusterVersionSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterVersionStatus) DeepCopyInto(out *ClusterVersionStatus) { + *out = *in + in.Desired.DeepCopyInto(&out.Desired) + if in.History != nil { + in, out := &in.History, &out.History + *out = make([]UpdateHistory, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ClusterOperatorStatusCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.AvailableUpdates != nil { + in, out := &in.AvailableUpdates, &out.AvailableUpdates + *out = make([]Release, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterVersionStatus. +func (in *ClusterVersionStatus) DeepCopy() *ClusterVersionStatus { + if in == nil { + return nil + } + out := new(ClusterVersionStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ComponentOverride) DeepCopyInto(out *ComponentOverride) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ComponentOverride. +func (in *ComponentOverride) DeepCopy() *ComponentOverride { + if in == nil { + return nil + } + out := new(ComponentOverride) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConfigMapFileReference) DeepCopyInto(out *ConfigMapFileReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigMapFileReference. +func (in *ConfigMapFileReference) DeepCopy() *ConfigMapFileReference { + if in == nil { + return nil + } + out := new(ConfigMapFileReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConfigMapNameReference) DeepCopyInto(out *ConfigMapNameReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigMapNameReference. +func (in *ConfigMapNameReference) DeepCopy() *ConfigMapNameReference { + if in == nil { + return nil + } + out := new(ConfigMapNameReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Console) DeepCopyInto(out *Console) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Console. +func (in *Console) DeepCopy() *Console { + if in == nil { + return nil + } + out := new(Console) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Console) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConsoleAuthentication) DeepCopyInto(out *ConsoleAuthentication) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConsoleAuthentication. +func (in *ConsoleAuthentication) DeepCopy() *ConsoleAuthentication { + if in == nil { + return nil + } + out := new(ConsoleAuthentication) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConsoleList) DeepCopyInto(out *ConsoleList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Console, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConsoleList. +func (in *ConsoleList) DeepCopy() *ConsoleList { + if in == nil { + return nil + } + out := new(ConsoleList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ConsoleList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConsoleSpec) DeepCopyInto(out *ConsoleSpec) { + *out = *in + out.Authentication = in.Authentication + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConsoleSpec. +func (in *ConsoleSpec) DeepCopy() *ConsoleSpec { + if in == nil { + return nil + } + out := new(ConsoleSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConsoleStatus) DeepCopyInto(out *ConsoleStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConsoleStatus. +func (in *ConsoleStatus) DeepCopy() *ConsoleStatus { + if in == nil { + return nil + } + out := new(ConsoleStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomFeatureGates) DeepCopyInto(out *CustomFeatureGates) { + *out = *in + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Disabled != nil { + in, out := &in.Disabled, &out.Disabled + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomFeatureGates. +func (in *CustomFeatureGates) DeepCopy() *CustomFeatureGates { + if in == nil { + return nil + } + out := new(CustomFeatureGates) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomTLSProfile) DeepCopyInto(out *CustomTLSProfile) { + *out = *in + in.TLSProfileSpec.DeepCopyInto(&out.TLSProfileSpec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomTLSProfile. +func (in *CustomTLSProfile) DeepCopy() *CustomTLSProfile { + if in == nil { + return nil + } + out := new(CustomTLSProfile) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DNS) DeepCopyInto(out *DNS) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DNS. +func (in *DNS) DeepCopy() *DNS { + if in == nil { + return nil + } + out := new(DNS) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DNS) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DNSList) DeepCopyInto(out *DNSList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DNS, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DNSList. +func (in *DNSList) DeepCopy() *DNSList { + if in == nil { + return nil + } + out := new(DNSList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DNSList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DNSSpec) DeepCopyInto(out *DNSSpec) { + *out = *in + if in.PublicZone != nil { + in, out := &in.PublicZone, &out.PublicZone + *out = new(DNSZone) + (*in).DeepCopyInto(*out) + } + if in.PrivateZone != nil { + in, out := &in.PrivateZone, &out.PrivateZone + *out = new(DNSZone) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DNSSpec. +func (in *DNSSpec) DeepCopy() *DNSSpec { + if in == nil { + return nil + } + out := new(DNSSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DNSStatus) DeepCopyInto(out *DNSStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DNSStatus. +func (in *DNSStatus) DeepCopy() *DNSStatus { + if in == nil { + return nil + } + out := new(DNSStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DNSZone) DeepCopyInto(out *DNSZone) { + *out = *in + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DNSZone. +func (in *DNSZone) DeepCopy() *DNSZone { + if in == nil { + return nil + } + out := new(DNSZone) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DelegatedAuthentication) DeepCopyInto(out *DelegatedAuthentication) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DelegatedAuthentication. +func (in *DelegatedAuthentication) DeepCopy() *DelegatedAuthentication { + if in == nil { + return nil + } + out := new(DelegatedAuthentication) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DelegatedAuthorization) DeepCopyInto(out *DelegatedAuthorization) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DelegatedAuthorization. +func (in *DelegatedAuthorization) DeepCopy() *DelegatedAuthorization { + if in == nil { + return nil + } + out := new(DelegatedAuthorization) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeprecatedWebhookTokenAuthenticator) DeepCopyInto(out *DeprecatedWebhookTokenAuthenticator) { + *out = *in + out.KubeConfig = in.KubeConfig + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeprecatedWebhookTokenAuthenticator. +func (in *DeprecatedWebhookTokenAuthenticator) DeepCopy() *DeprecatedWebhookTokenAuthenticator { + if in == nil { + return nil + } + out := new(DeprecatedWebhookTokenAuthenticator) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EtcdConnectionInfo) DeepCopyInto(out *EtcdConnectionInfo) { + *out = *in + if in.URLs != nil { + in, out := &in.URLs, &out.URLs + *out = make([]string, len(*in)) + copy(*out, *in) + } + out.CertInfo = in.CertInfo + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EtcdConnectionInfo. +func (in *EtcdConnectionInfo) DeepCopy() *EtcdConnectionInfo { + if in == nil { + return nil + } + out := new(EtcdConnectionInfo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EtcdStorageConfig) DeepCopyInto(out *EtcdStorageConfig) { + *out = *in + in.EtcdConnectionInfo.DeepCopyInto(&out.EtcdConnectionInfo) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EtcdStorageConfig. +func (in *EtcdStorageConfig) DeepCopy() *EtcdStorageConfig { + if in == nil { + return nil + } + out := new(EtcdStorageConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExternalIPConfig) DeepCopyInto(out *ExternalIPConfig) { + *out = *in + if in.Policy != nil { + in, out := &in.Policy, &out.Policy + *out = new(ExternalIPPolicy) + (*in).DeepCopyInto(*out) + } + if in.AutoAssignCIDRs != nil { + in, out := &in.AutoAssignCIDRs, &out.AutoAssignCIDRs + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalIPConfig. +func (in *ExternalIPConfig) DeepCopy() *ExternalIPConfig { + if in == nil { + return nil + } + out := new(ExternalIPConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExternalIPPolicy) DeepCopyInto(out *ExternalIPPolicy) { + *out = *in + if in.AllowedCIDRs != nil { + in, out := &in.AllowedCIDRs, &out.AllowedCIDRs + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.RejectedCIDRs != nil { + in, out := &in.RejectedCIDRs, &out.RejectedCIDRs + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalIPPolicy. +func (in *ExternalIPPolicy) DeepCopy() *ExternalIPPolicy { + if in == nil { + return nil + } + out := new(ExternalIPPolicy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FeatureGate) DeepCopyInto(out *FeatureGate) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FeatureGate. +func (in *FeatureGate) DeepCopy() *FeatureGate { + if in == nil { + return nil + } + out := new(FeatureGate) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *FeatureGate) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FeatureGateEnabledDisabled) DeepCopyInto(out *FeatureGateEnabledDisabled) { + *out = *in + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Disabled != nil { + in, out := &in.Disabled, &out.Disabled + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FeatureGateEnabledDisabled. +func (in *FeatureGateEnabledDisabled) DeepCopy() *FeatureGateEnabledDisabled { + if in == nil { + return nil + } + out := new(FeatureGateEnabledDisabled) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FeatureGateList) DeepCopyInto(out *FeatureGateList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]FeatureGate, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FeatureGateList. +func (in *FeatureGateList) DeepCopy() *FeatureGateList { + if in == nil { + return nil + } + out := new(FeatureGateList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *FeatureGateList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FeatureGateSelection) DeepCopyInto(out *FeatureGateSelection) { + *out = *in + if in.CustomNoUpgrade != nil { + in, out := &in.CustomNoUpgrade, &out.CustomNoUpgrade + *out = new(CustomFeatureGates) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FeatureGateSelection. +func (in *FeatureGateSelection) DeepCopy() *FeatureGateSelection { + if in == nil { + return nil + } + out := new(FeatureGateSelection) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FeatureGateSpec) DeepCopyInto(out *FeatureGateSpec) { + *out = *in + in.FeatureGateSelection.DeepCopyInto(&out.FeatureGateSelection) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FeatureGateSpec. +func (in *FeatureGateSpec) DeepCopy() *FeatureGateSpec { + if in == nil { + return nil + } + out := new(FeatureGateSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FeatureGateStatus) DeepCopyInto(out *FeatureGateStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FeatureGateStatus. +func (in *FeatureGateStatus) DeepCopy() *FeatureGateStatus { + if in == nil { + return nil + } + out := new(FeatureGateStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GCPPlatformSpec) DeepCopyInto(out *GCPPlatformSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GCPPlatformSpec. +func (in *GCPPlatformSpec) DeepCopy() *GCPPlatformSpec { + if in == nil { + return nil + } + out := new(GCPPlatformSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GCPPlatformStatus) DeepCopyInto(out *GCPPlatformStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GCPPlatformStatus. +func (in *GCPPlatformStatus) DeepCopy() *GCPPlatformStatus { + if in == nil { + return nil + } + out := new(GCPPlatformStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GenericAPIServerConfig) DeepCopyInto(out *GenericAPIServerConfig) { + *out = *in + in.ServingInfo.DeepCopyInto(&out.ServingInfo) + if in.CORSAllowedOrigins != nil { + in, out := &in.CORSAllowedOrigins, &out.CORSAllowedOrigins + *out = make([]string, len(*in)) + copy(*out, *in) + } + in.AuditConfig.DeepCopyInto(&out.AuditConfig) + in.StorageConfig.DeepCopyInto(&out.StorageConfig) + in.AdmissionConfig.DeepCopyInto(&out.AdmissionConfig) + out.KubeClientConfig = in.KubeClientConfig + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GenericAPIServerConfig. +func (in *GenericAPIServerConfig) DeepCopy() *GenericAPIServerConfig { + if in == nil { + return nil + } + out := new(GenericAPIServerConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GenericControllerConfig) DeepCopyInto(out *GenericControllerConfig) { + *out = *in + in.ServingInfo.DeepCopyInto(&out.ServingInfo) + out.LeaderElection = in.LeaderElection + out.Authentication = in.Authentication + out.Authorization = in.Authorization + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GenericControllerConfig. +func (in *GenericControllerConfig) DeepCopy() *GenericControllerConfig { + if in == nil { + return nil + } + out := new(GenericControllerConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GitHubIdentityProvider) DeepCopyInto(out *GitHubIdentityProvider) { + *out = *in + out.ClientSecret = in.ClientSecret + if in.Organizations != nil { + in, out := &in.Organizations, &out.Organizations + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Teams != nil { + in, out := &in.Teams, &out.Teams + *out = make([]string, len(*in)) + copy(*out, *in) + } + out.CA = in.CA + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitHubIdentityProvider. +func (in *GitHubIdentityProvider) DeepCopy() *GitHubIdentityProvider { + if in == nil { + return nil + } + out := new(GitHubIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GitLabIdentityProvider) DeepCopyInto(out *GitLabIdentityProvider) { + *out = *in + out.ClientSecret = in.ClientSecret + out.CA = in.CA + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitLabIdentityProvider. +func (in *GitLabIdentityProvider) DeepCopy() *GitLabIdentityProvider { + if in == nil { + return nil + } + out := new(GitLabIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GoogleIdentityProvider) DeepCopyInto(out *GoogleIdentityProvider) { + *out = *in + out.ClientSecret = in.ClientSecret + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GoogleIdentityProvider. +func (in *GoogleIdentityProvider) DeepCopy() *GoogleIdentityProvider { + if in == nil { + return nil + } + out := new(GoogleIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HTPasswdIdentityProvider) DeepCopyInto(out *HTPasswdIdentityProvider) { + *out = *in + out.FileData = in.FileData + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTPasswdIdentityProvider. +func (in *HTPasswdIdentityProvider) DeepCopy() *HTPasswdIdentityProvider { + if in == nil { + return nil + } + out := new(HTPasswdIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HTTPServingInfo) DeepCopyInto(out *HTTPServingInfo) { + *out = *in + in.ServingInfo.DeepCopyInto(&out.ServingInfo) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPServingInfo. +func (in *HTTPServingInfo) DeepCopy() *HTTPServingInfo { + if in == nil { + return nil + } + out := new(HTTPServingInfo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HubSource) DeepCopyInto(out *HubSource) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HubSource. +func (in *HubSource) DeepCopy() *HubSource { + if in == nil { + return nil + } + out := new(HubSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HubSourceStatus) DeepCopyInto(out *HubSourceStatus) { + *out = *in + out.HubSource = in.HubSource + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HubSourceStatus. +func (in *HubSourceStatus) DeepCopy() *HubSourceStatus { + if in == nil { + return nil + } + out := new(HubSourceStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IBMCloudPlatformSpec) DeepCopyInto(out *IBMCloudPlatformSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IBMCloudPlatformSpec. +func (in *IBMCloudPlatformSpec) DeepCopy() *IBMCloudPlatformSpec { + if in == nil { + return nil + } + out := new(IBMCloudPlatformSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IBMCloudPlatformStatus) DeepCopyInto(out *IBMCloudPlatformStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IBMCloudPlatformStatus. +func (in *IBMCloudPlatformStatus) DeepCopy() *IBMCloudPlatformStatus { + if in == nil { + return nil + } + out := new(IBMCloudPlatformStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IdentityProvider) DeepCopyInto(out *IdentityProvider) { + *out = *in + in.IdentityProviderConfig.DeepCopyInto(&out.IdentityProviderConfig) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IdentityProvider. +func (in *IdentityProvider) DeepCopy() *IdentityProvider { + if in == nil { + return nil + } + out := new(IdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IdentityProviderConfig) DeepCopyInto(out *IdentityProviderConfig) { + *out = *in + if in.BasicAuth != nil { + in, out := &in.BasicAuth, &out.BasicAuth + *out = new(BasicAuthIdentityProvider) + **out = **in + } + if in.GitHub != nil { + in, out := &in.GitHub, &out.GitHub + *out = new(GitHubIdentityProvider) + (*in).DeepCopyInto(*out) + } + if in.GitLab != nil { + in, out := &in.GitLab, &out.GitLab + *out = new(GitLabIdentityProvider) + **out = **in + } + if in.Google != nil { + in, out := &in.Google, &out.Google + *out = new(GoogleIdentityProvider) + **out = **in + } + if in.HTPasswd != nil { + in, out := &in.HTPasswd, &out.HTPasswd + *out = new(HTPasswdIdentityProvider) + **out = **in + } + if in.Keystone != nil { + in, out := &in.Keystone, &out.Keystone + *out = new(KeystoneIdentityProvider) + **out = **in + } + if in.LDAP != nil { + in, out := &in.LDAP, &out.LDAP + *out = new(LDAPIdentityProvider) + (*in).DeepCopyInto(*out) + } + if in.OpenID != nil { + in, out := &in.OpenID, &out.OpenID + *out = new(OpenIDIdentityProvider) + (*in).DeepCopyInto(*out) + } + if in.RequestHeader != nil { + in, out := &in.RequestHeader, &out.RequestHeader + *out = new(RequestHeaderIdentityProvider) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IdentityProviderConfig. +func (in *IdentityProviderConfig) DeepCopy() *IdentityProviderConfig { + if in == nil { + return nil + } + out := new(IdentityProviderConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Image) DeepCopyInto(out *Image) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Image. +func (in *Image) DeepCopy() *Image { + if in == nil { + return nil + } + out := new(Image) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Image) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageLabel) DeepCopyInto(out *ImageLabel) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageLabel. +func (in *ImageLabel) DeepCopy() *ImageLabel { + if in == nil { + return nil + } + out := new(ImageLabel) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageList) DeepCopyInto(out *ImageList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Image, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageList. +func (in *ImageList) DeepCopy() *ImageList { + if in == nil { + return nil + } + out := new(ImageList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ImageList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageSpec) DeepCopyInto(out *ImageSpec) { + *out = *in + if in.AllowedRegistriesForImport != nil { + in, out := &in.AllowedRegistriesForImport, &out.AllowedRegistriesForImport + *out = make([]RegistryLocation, len(*in)) + copy(*out, *in) + } + if in.ExternalRegistryHostnames != nil { + in, out := &in.ExternalRegistryHostnames, &out.ExternalRegistryHostnames + *out = make([]string, len(*in)) + copy(*out, *in) + } + out.AdditionalTrustedCA = in.AdditionalTrustedCA + in.RegistrySources.DeepCopyInto(&out.RegistrySources) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageSpec. +func (in *ImageSpec) DeepCopy() *ImageSpec { + if in == nil { + return nil + } + out := new(ImageSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageStatus) DeepCopyInto(out *ImageStatus) { + *out = *in + if in.ExternalRegistryHostnames != nil { + in, out := &in.ExternalRegistryHostnames, &out.ExternalRegistryHostnames + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageStatus. +func (in *ImageStatus) DeepCopy() *ImageStatus { + if in == nil { + return nil + } + out := new(ImageStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Infrastructure) DeepCopyInto(out *Infrastructure) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Infrastructure. +func (in *Infrastructure) DeepCopy() *Infrastructure { + if in == nil { + return nil + } + out := new(Infrastructure) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Infrastructure) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InfrastructureList) DeepCopyInto(out *InfrastructureList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Infrastructure, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InfrastructureList. +func (in *InfrastructureList) DeepCopy() *InfrastructureList { + if in == nil { + return nil + } + out := new(InfrastructureList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *InfrastructureList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InfrastructureSpec) DeepCopyInto(out *InfrastructureSpec) { + *out = *in + out.CloudConfig = in.CloudConfig + in.PlatformSpec.DeepCopyInto(&out.PlatformSpec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InfrastructureSpec. +func (in *InfrastructureSpec) DeepCopy() *InfrastructureSpec { + if in == nil { + return nil + } + out := new(InfrastructureSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InfrastructureStatus) DeepCopyInto(out *InfrastructureStatus) { + *out = *in + if in.PlatformStatus != nil { + in, out := &in.PlatformStatus, &out.PlatformStatus + *out = new(PlatformStatus) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InfrastructureStatus. +func (in *InfrastructureStatus) DeepCopy() *InfrastructureStatus { + if in == nil { + return nil + } + out := new(InfrastructureStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Ingress) DeepCopyInto(out *Ingress) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ingress. +func (in *Ingress) DeepCopy() *Ingress { + if in == nil { + return nil + } + out := new(Ingress) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Ingress) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressList) DeepCopyInto(out *IngressList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Ingress, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressList. +func (in *IngressList) DeepCopy() *IngressList { + if in == nil { + return nil + } + out := new(IngressList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *IngressList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressSpec) DeepCopyInto(out *IngressSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressSpec. +func (in *IngressSpec) DeepCopy() *IngressSpec { + if in == nil { + return nil + } + out := new(IngressSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressStatus) DeepCopyInto(out *IngressStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressStatus. +func (in *IngressStatus) DeepCopy() *IngressStatus { + if in == nil { + return nil + } + out := new(IngressStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IntermediateTLSProfile) DeepCopyInto(out *IntermediateTLSProfile) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IntermediateTLSProfile. +func (in *IntermediateTLSProfile) DeepCopy() *IntermediateTLSProfile { + if in == nil { + return nil + } + out := new(IntermediateTLSProfile) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KeystoneIdentityProvider) DeepCopyInto(out *KeystoneIdentityProvider) { + *out = *in + out.OAuthRemoteConnectionInfo = in.OAuthRemoteConnectionInfo + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KeystoneIdentityProvider. +func (in *KeystoneIdentityProvider) DeepCopy() *KeystoneIdentityProvider { + if in == nil { + return nil + } + out := new(KeystoneIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeClientConfig) DeepCopyInto(out *KubeClientConfig) { + *out = *in + out.ConnectionOverrides = in.ConnectionOverrides + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeClientConfig. +func (in *KubeClientConfig) DeepCopy() *KubeClientConfig { + if in == nil { + return nil + } + out := new(KubeClientConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubevirtPlatformSpec) DeepCopyInto(out *KubevirtPlatformSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubevirtPlatformSpec. +func (in *KubevirtPlatformSpec) DeepCopy() *KubevirtPlatformSpec { + if in == nil { + return nil + } + out := new(KubevirtPlatformSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubevirtPlatformStatus) DeepCopyInto(out *KubevirtPlatformStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubevirtPlatformStatus. +func (in *KubevirtPlatformStatus) DeepCopy() *KubevirtPlatformStatus { + if in == nil { + return nil + } + out := new(KubevirtPlatformStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LDAPAttributeMapping) DeepCopyInto(out *LDAPAttributeMapping) { + *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.PreferredUsername != nil { + in, out := &in.PreferredUsername, &out.PreferredUsername + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Email != nil { + in, out := &in.Email, &out.Email + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LDAPAttributeMapping. +func (in *LDAPAttributeMapping) DeepCopy() *LDAPAttributeMapping { + if in == nil { + return nil + } + out := new(LDAPAttributeMapping) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LDAPIdentityProvider) DeepCopyInto(out *LDAPIdentityProvider) { + *out = *in + out.BindPassword = in.BindPassword + out.CA = in.CA + in.Attributes.DeepCopyInto(&out.Attributes) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LDAPIdentityProvider. +func (in *LDAPIdentityProvider) DeepCopy() *LDAPIdentityProvider { + if in == nil { + return nil + } + out := new(LDAPIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LeaderElection) DeepCopyInto(out *LeaderElection) { + *out = *in + out.LeaseDuration = in.LeaseDuration + out.RenewDeadline = in.RenewDeadline + out.RetryPeriod = in.RetryPeriod + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LeaderElection. +func (in *LeaderElection) DeepCopy() *LeaderElection { + if in == nil { + return nil + } + out := new(LeaderElection) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ModernTLSProfile) DeepCopyInto(out *ModernTLSProfile) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ModernTLSProfile. +func (in *ModernTLSProfile) DeepCopy() *ModernTLSProfile { + if in == nil { + return nil + } + out := new(ModernTLSProfile) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamedCertificate) DeepCopyInto(out *NamedCertificate) { + *out = *in + if in.Names != nil { + in, out := &in.Names, &out.Names + *out = make([]string, len(*in)) + copy(*out, *in) + } + out.CertInfo = in.CertInfo + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamedCertificate. +func (in *NamedCertificate) DeepCopy() *NamedCertificate { + if in == nil { + return nil + } + out := new(NamedCertificate) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Network) DeepCopyInto(out *Network) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Network. +func (in *Network) DeepCopy() *Network { + if in == nil { + return nil + } + out := new(Network) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Network) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkList) DeepCopyInto(out *NetworkList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Network, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkList. +func (in *NetworkList) DeepCopy() *NetworkList { + if in == nil { + return nil + } + out := new(NetworkList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NetworkList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkSpec) DeepCopyInto(out *NetworkSpec) { + *out = *in + if in.ClusterNetwork != nil { + in, out := &in.ClusterNetwork, &out.ClusterNetwork + *out = make([]ClusterNetworkEntry, len(*in)) + copy(*out, *in) + } + if in.ServiceNetwork != nil { + in, out := &in.ServiceNetwork, &out.ServiceNetwork + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ExternalIP != nil { + in, out := &in.ExternalIP, &out.ExternalIP + *out = new(ExternalIPConfig) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkSpec. +func (in *NetworkSpec) DeepCopy() *NetworkSpec { + if in == nil { + return nil + } + out := new(NetworkSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkStatus) DeepCopyInto(out *NetworkStatus) { + *out = *in + if in.ClusterNetwork != nil { + in, out := &in.ClusterNetwork, &out.ClusterNetwork + *out = make([]ClusterNetworkEntry, len(*in)) + copy(*out, *in) + } + if in.ServiceNetwork != nil { + in, out := &in.ServiceNetwork, &out.ServiceNetwork + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkStatus. +func (in *NetworkStatus) DeepCopy() *NetworkStatus { + if in == nil { + return nil + } + out := new(NetworkStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuth) DeepCopyInto(out *OAuth) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuth. +func (in *OAuth) DeepCopy() *OAuth { + if in == nil { + return nil + } + out := new(OAuth) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OAuth) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthList) DeepCopyInto(out *OAuthList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]OAuth, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthList. +func (in *OAuthList) DeepCopy() *OAuthList { + if in == nil { + return nil + } + out := new(OAuthList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OAuthList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthRemoteConnectionInfo) DeepCopyInto(out *OAuthRemoteConnectionInfo) { + *out = *in + out.CA = in.CA + out.TLSClientCert = in.TLSClientCert + out.TLSClientKey = in.TLSClientKey + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthRemoteConnectionInfo. +func (in *OAuthRemoteConnectionInfo) DeepCopy() *OAuthRemoteConnectionInfo { + if in == nil { + return nil + } + out := new(OAuthRemoteConnectionInfo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthSpec) DeepCopyInto(out *OAuthSpec) { + *out = *in + if in.IdentityProviders != nil { + in, out := &in.IdentityProviders, &out.IdentityProviders + *out = make([]IdentityProvider, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + in.TokenConfig.DeepCopyInto(&out.TokenConfig) + out.Templates = in.Templates + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthSpec. +func (in *OAuthSpec) DeepCopy() *OAuthSpec { + if in == nil { + return nil + } + out := new(OAuthSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthStatus) DeepCopyInto(out *OAuthStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthStatus. +func (in *OAuthStatus) DeepCopy() *OAuthStatus { + if in == nil { + return nil + } + out := new(OAuthStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthTemplates) DeepCopyInto(out *OAuthTemplates) { + *out = *in + out.Login = in.Login + out.ProviderSelection = in.ProviderSelection + out.Error = in.Error + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthTemplates. +func (in *OAuthTemplates) DeepCopy() *OAuthTemplates { + if in == nil { + return nil + } + out := new(OAuthTemplates) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ObjectReference) DeepCopyInto(out *ObjectReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectReference. +func (in *ObjectReference) DeepCopy() *ObjectReference { + if in == nil { + return nil + } + out := new(ObjectReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OldTLSProfile) DeepCopyInto(out *OldTLSProfile) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OldTLSProfile. +func (in *OldTLSProfile) DeepCopy() *OldTLSProfile { + if in == nil { + return nil + } + out := new(OldTLSProfile) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OpenIDClaims) DeepCopyInto(out *OpenIDClaims) { + *out = *in + if in.PreferredUsername != nil { + in, out := &in.PreferredUsername, &out.PreferredUsername + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Email != nil { + in, out := &in.Email, &out.Email + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenIDClaims. +func (in *OpenIDClaims) DeepCopy() *OpenIDClaims { + if in == nil { + return nil + } + out := new(OpenIDClaims) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OpenIDIdentityProvider) DeepCopyInto(out *OpenIDIdentityProvider) { + *out = *in + out.ClientSecret = in.ClientSecret + out.CA = in.CA + if in.ExtraScopes != nil { + in, out := &in.ExtraScopes, &out.ExtraScopes + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ExtraAuthorizeParameters != nil { + in, out := &in.ExtraAuthorizeParameters, &out.ExtraAuthorizeParameters + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + in.Claims.DeepCopyInto(&out.Claims) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenIDIdentityProvider. +func (in *OpenIDIdentityProvider) DeepCopy() *OpenIDIdentityProvider { + if in == nil { + return nil + } + out := new(OpenIDIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OpenStackPlatformSpec) DeepCopyInto(out *OpenStackPlatformSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackPlatformSpec. +func (in *OpenStackPlatformSpec) DeepCopy() *OpenStackPlatformSpec { + if in == nil { + return nil + } + out := new(OpenStackPlatformSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OpenStackPlatformStatus) DeepCopyInto(out *OpenStackPlatformStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackPlatformStatus. +func (in *OpenStackPlatformStatus) DeepCopy() *OpenStackPlatformStatus { + if in == nil { + return nil + } + out := new(OpenStackPlatformStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OperandVersion) DeepCopyInto(out *OperandVersion) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OperandVersion. +func (in *OperandVersion) DeepCopy() *OperandVersion { + if in == nil { + return nil + } + out := new(OperandVersion) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OperatorHub) DeepCopyInto(out *OperatorHub) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OperatorHub. +func (in *OperatorHub) DeepCopy() *OperatorHub { + if in == nil { + return nil + } + out := new(OperatorHub) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OperatorHub) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OperatorHubList) DeepCopyInto(out *OperatorHubList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]OperatorHub, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OperatorHubList. +func (in *OperatorHubList) DeepCopy() *OperatorHubList { + if in == nil { + return nil + } + out := new(OperatorHubList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OperatorHubList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OperatorHubSpec) DeepCopyInto(out *OperatorHubSpec) { + *out = *in + if in.Sources != nil { + in, out := &in.Sources, &out.Sources + *out = make([]HubSource, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OperatorHubSpec. +func (in *OperatorHubSpec) DeepCopy() *OperatorHubSpec { + if in == nil { + return nil + } + out := new(OperatorHubSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OperatorHubStatus) DeepCopyInto(out *OperatorHubStatus) { + *out = *in + if in.Sources != nil { + in, out := &in.Sources, &out.Sources + *out = make([]HubSourceStatus, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OperatorHubStatus. +func (in *OperatorHubStatus) DeepCopy() *OperatorHubStatus { + if in == nil { + return nil + } + out := new(OperatorHubStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OvirtPlatformSpec) DeepCopyInto(out *OvirtPlatformSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OvirtPlatformSpec. +func (in *OvirtPlatformSpec) DeepCopy() *OvirtPlatformSpec { + if in == nil { + return nil + } + out := new(OvirtPlatformSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OvirtPlatformStatus) DeepCopyInto(out *OvirtPlatformStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OvirtPlatformStatus. +func (in *OvirtPlatformStatus) DeepCopy() *OvirtPlatformStatus { + if in == nil { + return nil + } + out := new(OvirtPlatformStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PlatformSpec) DeepCopyInto(out *PlatformSpec) { + *out = *in + if in.AWS != nil { + in, out := &in.AWS, &out.AWS + *out = new(AWSPlatformSpec) + (*in).DeepCopyInto(*out) + } + if in.Azure != nil { + in, out := &in.Azure, &out.Azure + *out = new(AzurePlatformSpec) + **out = **in + } + if in.GCP != nil { + in, out := &in.GCP, &out.GCP + *out = new(GCPPlatformSpec) + **out = **in + } + if in.BareMetal != nil { + in, out := &in.BareMetal, &out.BareMetal + *out = new(BareMetalPlatformSpec) + **out = **in + } + if in.OpenStack != nil { + in, out := &in.OpenStack, &out.OpenStack + *out = new(OpenStackPlatformSpec) + **out = **in + } + if in.Ovirt != nil { + in, out := &in.Ovirt, &out.Ovirt + *out = new(OvirtPlatformSpec) + **out = **in + } + if in.VSphere != nil { + in, out := &in.VSphere, &out.VSphere + *out = new(VSpherePlatformSpec) + **out = **in + } + if in.IBMCloud != nil { + in, out := &in.IBMCloud, &out.IBMCloud + *out = new(IBMCloudPlatformSpec) + **out = **in + } + if in.Kubevirt != nil { + in, out := &in.Kubevirt, &out.Kubevirt + *out = new(KubevirtPlatformSpec) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PlatformSpec. +func (in *PlatformSpec) DeepCopy() *PlatformSpec { + if in == nil { + return nil + } + out := new(PlatformSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PlatformStatus) DeepCopyInto(out *PlatformStatus) { + *out = *in + if in.AWS != nil { + in, out := &in.AWS, &out.AWS + *out = new(AWSPlatformStatus) + (*in).DeepCopyInto(*out) + } + if in.Azure != nil { + in, out := &in.Azure, &out.Azure + *out = new(AzurePlatformStatus) + **out = **in + } + if in.GCP != nil { + in, out := &in.GCP, &out.GCP + *out = new(GCPPlatformStatus) + **out = **in + } + if in.BareMetal != nil { + in, out := &in.BareMetal, &out.BareMetal + *out = new(BareMetalPlatformStatus) + **out = **in + } + if in.OpenStack != nil { + in, out := &in.OpenStack, &out.OpenStack + *out = new(OpenStackPlatformStatus) + **out = **in + } + if in.Ovirt != nil { + in, out := &in.Ovirt, &out.Ovirt + *out = new(OvirtPlatformStatus) + **out = **in + } + if in.VSphere != nil { + in, out := &in.VSphere, &out.VSphere + *out = new(VSpherePlatformStatus) + **out = **in + } + if in.IBMCloud != nil { + in, out := &in.IBMCloud, &out.IBMCloud + *out = new(IBMCloudPlatformStatus) + **out = **in + } + if in.Kubevirt != nil { + in, out := &in.Kubevirt, &out.Kubevirt + *out = new(KubevirtPlatformStatus) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PlatformStatus. +func (in *PlatformStatus) DeepCopy() *PlatformStatus { + if in == nil { + return nil + } + out := new(PlatformStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Project) DeepCopyInto(out *Project) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Project. +func (in *Project) DeepCopy() *Project { + if in == nil { + return nil + } + out := new(Project) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Project) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProjectList) DeepCopyInto(out *ProjectList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Project, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectList. +func (in *ProjectList) DeepCopy() *ProjectList { + if in == nil { + return nil + } + out := new(ProjectList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ProjectList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProjectSpec) DeepCopyInto(out *ProjectSpec) { + *out = *in + out.ProjectRequestTemplate = in.ProjectRequestTemplate + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectSpec. +func (in *ProjectSpec) DeepCopy() *ProjectSpec { + if in == nil { + return nil + } + out := new(ProjectSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProjectStatus) DeepCopyInto(out *ProjectStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectStatus. +func (in *ProjectStatus) DeepCopy() *ProjectStatus { + if in == nil { + return nil + } + out := new(ProjectStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Proxy) DeepCopyInto(out *Proxy) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Proxy. +func (in *Proxy) DeepCopy() *Proxy { + if in == nil { + return nil + } + out := new(Proxy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Proxy) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProxyList) DeepCopyInto(out *ProxyList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Proxy, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProxyList. +func (in *ProxyList) DeepCopy() *ProxyList { + if in == nil { + return nil + } + out := new(ProxyList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ProxyList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProxySpec) DeepCopyInto(out *ProxySpec) { + *out = *in + if in.ReadinessEndpoints != nil { + in, out := &in.ReadinessEndpoints, &out.ReadinessEndpoints + *out = make([]string, len(*in)) + copy(*out, *in) + } + out.TrustedCA = in.TrustedCA + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProxySpec. +func (in *ProxySpec) DeepCopy() *ProxySpec { + if in == nil { + return nil + } + out := new(ProxySpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProxyStatus) DeepCopyInto(out *ProxyStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProxyStatus. +func (in *ProxyStatus) DeepCopy() *ProxyStatus { + if in == nil { + return nil + } + out := new(ProxyStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RegistryLocation) DeepCopyInto(out *RegistryLocation) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RegistryLocation. +func (in *RegistryLocation) DeepCopy() *RegistryLocation { + if in == nil { + return nil + } + out := new(RegistryLocation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RegistrySources) DeepCopyInto(out *RegistrySources) { + *out = *in + if in.InsecureRegistries != nil { + in, out := &in.InsecureRegistries, &out.InsecureRegistries + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.BlockedRegistries != nil { + in, out := &in.BlockedRegistries, &out.BlockedRegistries + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.AllowedRegistries != nil { + in, out := &in.AllowedRegistries, &out.AllowedRegistries + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RegistrySources. +func (in *RegistrySources) DeepCopy() *RegistrySources { + if in == nil { + return nil + } + out := new(RegistrySources) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Release) DeepCopyInto(out *Release) { + *out = *in + if in.Channels != nil { + in, out := &in.Channels, &out.Channels + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Release. +func (in *Release) DeepCopy() *Release { + if in == nil { + return nil + } + out := new(Release) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RemoteConnectionInfo) DeepCopyInto(out *RemoteConnectionInfo) { + *out = *in + out.CertInfo = in.CertInfo + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RemoteConnectionInfo. +func (in *RemoteConnectionInfo) DeepCopy() *RemoteConnectionInfo { + if in == nil { + return nil + } + out := new(RemoteConnectionInfo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RequestHeaderIdentityProvider) DeepCopyInto(out *RequestHeaderIdentityProvider) { + *out = *in + out.ClientCA = in.ClientCA + if in.ClientCommonNames != nil { + in, out := &in.ClientCommonNames, &out.ClientCommonNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Headers != nil { + in, out := &in.Headers, &out.Headers + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.PreferredUsernameHeaders != nil { + in, out := &in.PreferredUsernameHeaders, &out.PreferredUsernameHeaders + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.NameHeaders != nil { + in, out := &in.NameHeaders, &out.NameHeaders + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.EmailHeaders != nil { + in, out := &in.EmailHeaders, &out.EmailHeaders + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RequestHeaderIdentityProvider. +func (in *RequestHeaderIdentityProvider) DeepCopy() *RequestHeaderIdentityProvider { + if in == nil { + return nil + } + out := new(RequestHeaderIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Scheduler) DeepCopyInto(out *Scheduler) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Scheduler. +func (in *Scheduler) DeepCopy() *Scheduler { + if in == nil { + return nil + } + out := new(Scheduler) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Scheduler) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SchedulerList) DeepCopyInto(out *SchedulerList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Scheduler, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SchedulerList. +func (in *SchedulerList) DeepCopy() *SchedulerList { + if in == nil { + return nil + } + out := new(SchedulerList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *SchedulerList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SchedulerSpec) DeepCopyInto(out *SchedulerSpec) { + *out = *in + out.Policy = in.Policy + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SchedulerSpec. +func (in *SchedulerSpec) DeepCopy() *SchedulerSpec { + if in == nil { + return nil + } + out := new(SchedulerSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SchedulerStatus) DeepCopyInto(out *SchedulerStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SchedulerStatus. +func (in *SchedulerStatus) DeepCopy() *SchedulerStatus { + if in == nil { + return nil + } + out := new(SchedulerStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SecretNameReference) DeepCopyInto(out *SecretNameReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretNameReference. +func (in *SecretNameReference) DeepCopy() *SecretNameReference { + if in == nil { + return nil + } + out := new(SecretNameReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServingInfo) DeepCopyInto(out *ServingInfo) { + *out = *in + out.CertInfo = in.CertInfo + if in.NamedCertificates != nil { + in, out := &in.NamedCertificates, &out.NamedCertificates + *out = make([]NamedCertificate, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.CipherSuites != nil { + in, out := &in.CipherSuites, &out.CipherSuites + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServingInfo. +func (in *ServingInfo) DeepCopy() *ServingInfo { + if in == nil { + return nil + } + out := new(ServingInfo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StringSource) DeepCopyInto(out *StringSource) { + *out = *in + out.StringSourceSpec = in.StringSourceSpec + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StringSource. +func (in *StringSource) DeepCopy() *StringSource { + if in == nil { + return nil + } + out := new(StringSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StringSourceSpec) DeepCopyInto(out *StringSourceSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StringSourceSpec. +func (in *StringSourceSpec) DeepCopy() *StringSourceSpec { + if in == nil { + return nil + } + out := new(StringSourceSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TLSProfileSpec) DeepCopyInto(out *TLSProfileSpec) { + *out = *in + if in.Ciphers != nil { + in, out := &in.Ciphers, &out.Ciphers + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TLSProfileSpec. +func (in *TLSProfileSpec) DeepCopy() *TLSProfileSpec { + if in == nil { + return nil + } + out := new(TLSProfileSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TLSSecurityProfile) DeepCopyInto(out *TLSSecurityProfile) { + *out = *in + if in.Old != nil { + in, out := &in.Old, &out.Old + *out = new(OldTLSProfile) + **out = **in + } + if in.Intermediate != nil { + in, out := &in.Intermediate, &out.Intermediate + *out = new(IntermediateTLSProfile) + **out = **in + } + if in.Modern != nil { + in, out := &in.Modern, &out.Modern + *out = new(ModernTLSProfile) + **out = **in + } + if in.Custom != nil { + in, out := &in.Custom, &out.Custom + *out = new(CustomTLSProfile) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TLSSecurityProfile. +func (in *TLSSecurityProfile) DeepCopy() *TLSSecurityProfile { + if in == nil { + return nil + } + out := new(TLSSecurityProfile) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TemplateReference) DeepCopyInto(out *TemplateReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateReference. +func (in *TemplateReference) DeepCopy() *TemplateReference { + if in == nil { + return nil + } + out := new(TemplateReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TokenConfig) DeepCopyInto(out *TokenConfig) { + *out = *in + if in.AccessTokenInactivityTimeout != nil { + in, out := &in.AccessTokenInactivityTimeout, &out.AccessTokenInactivityTimeout + *out = new(metav1.Duration) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TokenConfig. +func (in *TokenConfig) DeepCopy() *TokenConfig { + if in == nil { + return nil + } + out := new(TokenConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Update) DeepCopyInto(out *Update) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Update. +func (in *Update) DeepCopy() *Update { + if in == nil { + return nil + } + out := new(Update) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UpdateHistory) DeepCopyInto(out *UpdateHistory) { + *out = *in + in.StartedTime.DeepCopyInto(&out.StartedTime) + if in.CompletionTime != nil { + in, out := &in.CompletionTime, &out.CompletionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UpdateHistory. +func (in *UpdateHistory) DeepCopy() *UpdateHistory { + if in == nil { + return nil + } + out := new(UpdateHistory) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VSpherePlatformSpec) DeepCopyInto(out *VSpherePlatformSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VSpherePlatformSpec. +func (in *VSpherePlatformSpec) DeepCopy() *VSpherePlatformSpec { + if in == nil { + return nil + } + out := new(VSpherePlatformSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VSpherePlatformStatus) DeepCopyInto(out *VSpherePlatformStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VSpherePlatformStatus. +func (in *VSpherePlatformStatus) DeepCopy() *VSpherePlatformStatus { + if in == nil { + return nil + } + out := new(VSpherePlatformStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WebhookTokenAuthenticator) DeepCopyInto(out *WebhookTokenAuthenticator) { + *out = *in + out.KubeConfig = in.KubeConfig + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookTokenAuthenticator. +func (in *WebhookTokenAuthenticator) DeepCopy() *WebhookTokenAuthenticator { + if in == nil { + return nil + } + out := new(WebhookTokenAuthenticator) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000000..118d7bb45f745 --- /dev/null +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,1470 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_AdmissionConfig = map[string]string{ + "enabledPlugins": "enabledPlugins is a list of admission plugins that must be on in addition to the default list. Some admission plugins are disabled by default, but certain configurations require them. This is fairly uncommon and can result in performance penalties and unexpected behavior.", + "disabledPlugins": "disabledPlugins is a list of admission plugins that must be off. Putting something in this list is almost always a mistake and likely to result in cluster instability.", +} + +func (AdmissionConfig) SwaggerDoc() map[string]string { + return map_AdmissionConfig +} + +var map_AdmissionPluginConfig = map[string]string{ + "": "AdmissionPluginConfig holds the necessary configuration options for admission plugins", + "location": "Location is the path to a configuration file that contains the plugin's configuration", + "configuration": "Configuration is an embedded configuration object to be used as the plugin's configuration. If present, it will be used instead of the path to the configuration file.", +} + +func (AdmissionPluginConfig) SwaggerDoc() map[string]string { + return map_AdmissionPluginConfig +} + +var map_AuditConfig = map[string]string{ + "": "AuditConfig holds configuration for the audit capabilities", + "enabled": "If this flag is set, audit log will be printed in the logs. The logs contains, method, user and a requested URL.", + "auditFilePath": "All requests coming to the apiserver will be logged to this file.", + "maximumFileRetentionDays": "Maximum number of days to retain old log files based on the timestamp encoded in their filename.", + "maximumRetainedFiles": "Maximum number of old log files to retain.", + "maximumFileSizeMegabytes": "Maximum size in megabytes of the log file before it gets rotated. Defaults to 100MB.", + "policyFile": "PolicyFile is a path to the file that defines the audit policy configuration.", + "policyConfiguration": "PolicyConfiguration is an embedded policy configuration object to be used as the audit policy configuration. If present, it will be used instead of the path to the policy file.", + "logFormat": "Format of saved audits (legacy or json).", + "webHookKubeConfig": "Path to a .kubeconfig formatted file that defines the audit webhook configuration.", + "webHookMode": "Strategy for sending audit events (block or batch).", +} + +func (AuditConfig) SwaggerDoc() map[string]string { + return map_AuditConfig +} + +var map_CertInfo = map[string]string{ + "": "CertInfo relates a certificate with a private key", + "certFile": "CertFile is a file containing a PEM-encoded certificate", + "keyFile": "KeyFile is a file containing a PEM-encoded private key for the certificate specified by CertFile", +} + +func (CertInfo) SwaggerDoc() map[string]string { + return map_CertInfo +} + +var map_ClientConnectionOverrides = map[string]string{ + "acceptContentTypes": "acceptContentTypes defines the Accept header sent by clients when connecting to a server, overriding the default value of 'application/json'. This field will control all connections to the server used by a particular client.", + "contentType": "contentType is the content type used when sending data to the server from this client.", + "qps": "qps controls the number of queries per second allowed for this connection.", + "burst": "burst allows extra queries to accumulate when a client is exceeding its rate.", +} + +func (ClientConnectionOverrides) SwaggerDoc() map[string]string { + return map_ClientConnectionOverrides +} + +var map_ConfigMapFileReference = map[string]string{ + "": "ConfigMapFileReference references a config map in a specific namespace. The namespace must be specified at the point of use.", + "key": "Key allows pointing to a specific key/value inside of the configmap. This is useful for logical file references.", +} + +func (ConfigMapFileReference) SwaggerDoc() map[string]string { + return map_ConfigMapFileReference +} + +var map_ConfigMapNameReference = map[string]string{ + "": "ConfigMapNameReference references a config map in a specific namespace. The namespace must be specified at the point of use.", + "name": "name is the metadata.name of the referenced config map", +} + +func (ConfigMapNameReference) SwaggerDoc() map[string]string { + return map_ConfigMapNameReference +} + +var map_DelegatedAuthentication = map[string]string{ + "": "DelegatedAuthentication allows authentication to be disabled.", + "disabled": "disabled indicates that authentication should be disabled. By default it will use delegated authentication.", +} + +func (DelegatedAuthentication) SwaggerDoc() map[string]string { + return map_DelegatedAuthentication +} + +var map_DelegatedAuthorization = map[string]string{ + "": "DelegatedAuthorization allows authorization to be disabled.", + "disabled": "disabled indicates that authorization should be disabled. By default it will use delegated authorization.", +} + +func (DelegatedAuthorization) SwaggerDoc() map[string]string { + return map_DelegatedAuthorization +} + +var map_EtcdConnectionInfo = map[string]string{ + "": "EtcdConnectionInfo holds information necessary for connecting to an etcd server", + "urls": "URLs are the URLs for etcd", + "ca": "CA is a file containing trusted roots for the etcd server certificates", +} + +func (EtcdConnectionInfo) SwaggerDoc() map[string]string { + return map_EtcdConnectionInfo +} + +var map_EtcdStorageConfig = map[string]string{ + "storagePrefix": "StoragePrefix is the path within etcd that the OpenShift resources will be rooted under. This value, if changed, will mean existing objects in etcd will no longer be located.", +} + +func (EtcdStorageConfig) SwaggerDoc() map[string]string { + return map_EtcdStorageConfig +} + +var map_GenericAPIServerConfig = map[string]string{ + "": "GenericAPIServerConfig is an inline-able struct for aggregated apiservers that need to store data in etcd", + "servingInfo": "servingInfo describes how to start serving", + "corsAllowedOrigins": "corsAllowedOrigins", + "auditConfig": "auditConfig describes how to configure audit information", + "storageConfig": "storageConfig contains information about how to use", + "admission": "admissionConfig holds information about how to configure admission.", +} + +func (GenericAPIServerConfig) SwaggerDoc() map[string]string { + return map_GenericAPIServerConfig +} + +var map_GenericControllerConfig = map[string]string{ + "": "GenericControllerConfig provides information to configure a controller", + "servingInfo": "ServingInfo is the HTTP serving information for the controller's endpoints", + "leaderElection": "leaderElection provides information to elect a leader. Only override this if you have a specific need", + "authentication": "authentication allows configuration of authentication for the endpoints", + "authorization": "authorization allows configuration of authentication for the endpoints", +} + +func (GenericControllerConfig) SwaggerDoc() map[string]string { + return map_GenericControllerConfig +} + +var map_HTTPServingInfo = map[string]string{ + "": "HTTPServingInfo holds configuration for serving HTTP", + "maxRequestsInFlight": "MaxRequestsInFlight is the number of concurrent requests allowed to the server. If zero, no limit.", + "requestTimeoutSeconds": "RequestTimeoutSeconds is the number of seconds before requests are timed out. The default is 60 minutes, if -1 there is no limit on requests.", +} + +func (HTTPServingInfo) SwaggerDoc() map[string]string { + return map_HTTPServingInfo +} + +var map_KubeClientConfig = map[string]string{ + "kubeConfig": "kubeConfig is a .kubeconfig filename for going to the owning kube-apiserver. Empty uses an in-cluster-config", + "connectionOverrides": "connectionOverrides specifies client overrides for system components to loop back to this master.", +} + +func (KubeClientConfig) SwaggerDoc() map[string]string { + return map_KubeClientConfig +} + +var map_LeaderElection = map[string]string{ + "": "LeaderElection provides information to elect a leader", + "disable": "disable allows leader election to be suspended while allowing a fully defaulted \"normal\" startup case.", + "namespace": "namespace indicates which namespace the resource is in", + "name": "name indicates what name to use for the resource", + "leaseDuration": "leaseDuration is the duration that non-leader candidates will wait after observing a leadership renewal until attempting to acquire leadership of a led but unrenewed leader slot. This is effectively the maximum duration that a leader can be stopped before it is replaced by another candidate. This is only applicable if leader election is enabled.", + "renewDeadline": "renewDeadline is the interval between attempts by the acting master to renew a leadership slot before it stops leading. This must be less than or equal to the lease duration. This is only applicable if leader election is enabled.", + "retryPeriod": "retryPeriod is the duration the clients should wait between attempting acquisition and renewal of a leadership. This is only applicable if leader election is enabled.", +} + +func (LeaderElection) SwaggerDoc() map[string]string { + return map_LeaderElection +} + +var map_NamedCertificate = map[string]string{ + "": "NamedCertificate specifies a certificate/key, and the names it should be served for", + "names": "Names is a list of DNS names this certificate should be used to secure A name can be a normal DNS name, or can contain leading wildcard segments.", +} + +func (NamedCertificate) SwaggerDoc() map[string]string { + return map_NamedCertificate +} + +var map_RemoteConnectionInfo = map[string]string{ + "": "RemoteConnectionInfo holds information necessary for establishing a remote connection", + "url": "URL is the remote URL to connect to", + "ca": "CA is the CA for verifying TLS connections", +} + +func (RemoteConnectionInfo) SwaggerDoc() map[string]string { + return map_RemoteConnectionInfo +} + +var map_SecretNameReference = map[string]string{ + "": "SecretNameReference references a secret in a specific namespace. The namespace must be specified at the point of use.", + "name": "name is the metadata.name of the referenced secret", +} + +func (SecretNameReference) SwaggerDoc() map[string]string { + return map_SecretNameReference +} + +var map_ServingInfo = map[string]string{ + "": "ServingInfo holds information about serving web pages", + "bindAddress": "BindAddress is the ip:port to serve on", + "bindNetwork": "BindNetwork is the type of network to bind to - defaults to \"tcp4\", accepts \"tcp\", \"tcp4\", and \"tcp6\"", + "clientCA": "ClientCA is the certificate bundle for all the signers that you'll recognize for incoming client certificates", + "namedCertificates": "NamedCertificates is a list of certificates to use to secure requests to specific hostnames", + "minTLSVersion": "MinTLSVersion is the minimum TLS version supported. Values must match version names from https://golang.org/pkg/crypto/tls/#pkg-constants", + "cipherSuites": "CipherSuites contains an overridden list of ciphers for the server to support. Values must match cipher suite IDs from https://golang.org/pkg/crypto/tls/#pkg-constants", +} + +func (ServingInfo) SwaggerDoc() map[string]string { + return map_ServingInfo +} + +var map_StringSource = map[string]string{ + "": "StringSource allows specifying a string inline, or externally via env var or file. When it contains only a string value, it marshals to a simple JSON string.", +} + +func (StringSource) SwaggerDoc() map[string]string { + return map_StringSource +} + +var map_StringSourceSpec = map[string]string{ + "": "StringSourceSpec specifies a string value, or external location", + "value": "Value specifies the cleartext value, or an encrypted value if keyFile is specified.", + "env": "Env specifies an envvar containing the cleartext value, or an encrypted value if the keyFile is specified.", + "file": "File references a file containing the cleartext value, or an encrypted value if a keyFile is specified.", + "keyFile": "KeyFile references a file containing the key to use to decrypt the value.", +} + +func (StringSourceSpec) SwaggerDoc() map[string]string { + return map_StringSourceSpec +} + +var map_APIServer = map[string]string{ + "": "APIServer holds configuration (like serving certificates, client CA and CORS domains) shared by all API servers in the system, among them especially kube-apiserver and openshift-apiserver. The canonical name of an instance is 'cluster'.", + "spec": "spec holds user settable values for configuration", + "status": "status holds observed values from the cluster. They may not be overridden.", +} + +func (APIServer) SwaggerDoc() map[string]string { + return map_APIServer +} + +var map_APIServerEncryption = map[string]string{ + "type": "type defines what encryption type should be used to encrypt resources at the datastore layer. When this field is unset (i.e. when it is set to the empty string), identity is implied. The behavior of unset can and will change over time. Even if encryption is enabled by default, the meaning of unset may change to a different encryption type based on changes in best practices.\n\nWhen encryption is enabled, all sensitive resources shipped with the platform are encrypted. This list of sensitive resources can and will change over time. The current authoritative list is:\n\n 1. secrets\n 2. configmaps\n 3. routes.route.openshift.io\n 4. oauthaccesstokens.oauth.openshift.io\n 5. oauthauthorizetokens.oauth.openshift.io", +} + +func (APIServerEncryption) SwaggerDoc() map[string]string { + return map_APIServerEncryption +} + +var map_APIServerNamedServingCert = map[string]string{ + "": "APIServerNamedServingCert maps a server DNS name, as understood by a client, to a certificate.", + "names": "names is a optional list of explicit DNS names (leading wildcards allowed) that should use this certificate to serve secure traffic. If no names are provided, the implicit names will be extracted from the certificates. Exact names trump over wildcard names. Explicit names defined here trump over extracted implicit names.", + "servingCertificate": "servingCertificate references a kubernetes.io/tls type secret containing the TLS cert info for serving secure traffic. The secret must exist in the openshift-config namespace and contain the following required fields: - Secret.Data[\"tls.key\"] - TLS private key. - Secret.Data[\"tls.crt\"] - TLS certificate.", +} + +func (APIServerNamedServingCert) SwaggerDoc() map[string]string { + return map_APIServerNamedServingCert +} + +var map_APIServerServingCerts = map[string]string{ + "namedCertificates": "namedCertificates references secrets containing the TLS cert info for serving secure traffic to specific hostnames. If no named certificates are provided, or no named certificates match the server name as understood by a client, the defaultServingCertificate will be used.", +} + +func (APIServerServingCerts) SwaggerDoc() map[string]string { + return map_APIServerServingCerts +} + +var map_APIServerSpec = map[string]string{ + "servingCerts": "servingCert is the TLS cert info for serving secure traffic. If not specified, operator managed certificates will be used for serving secure traffic.", + "clientCA": "clientCA references a ConfigMap containing a certificate bundle for the signers that will be recognized for incoming client certificates in addition to the operator managed signers. If this is empty, then only operator managed signers are valid. You usually only have to set this if you have your own PKI you wish to honor client certificates from. The ConfigMap must exist in the openshift-config namespace and contain the following required fields: - ConfigMap.Data[\"ca-bundle.crt\"] - CA bundle.", + "additionalCORSAllowedOrigins": "additionalCORSAllowedOrigins lists additional, user-defined regular expressions describing hosts for which the API server allows access using the CORS headers. This may be needed to access the API and the integrated OAuth server from JavaScript applications. The values are regular expressions that correspond to the Golang regular expression language.", + "encryption": "encryption allows the configuration of encryption of resources at the datastore layer.", + "tlsSecurityProfile": "tlsSecurityProfile specifies settings for TLS connections for externally exposed servers.\n\nIf unset, a default (which may change between releases) is chosen. Note that only Old and Intermediate profiles are currently supported, and the maximum available MinTLSVersions is VersionTLS12.", + "audit": "audit specifies the settings for audit configuration to be applied to all OpenShift-provided API servers in the cluster.", +} + +func (APIServerSpec) SwaggerDoc() map[string]string { + return map_APIServerSpec +} + +var map_Audit = map[string]string{ + "profile": "profile specifies the name of the desired audit policy configuration to be deployed to all OpenShift-provided API servers in the cluster.\n\nThe following profiles are provided: - Default: the existing default policy. - WriteRequestBodies: like 'Default', but logs request and response HTTP payloads for write requests (create, update, patch). - AllRequestBodies: like 'WriteRequestBodies', but also logs request and response HTTP payloads for read requests (get, list).\n\nIf unset, the 'Default' profile is used as the default.", +} + +func (Audit) SwaggerDoc() map[string]string { + return map_Audit +} + +var map_Authentication = map[string]string{ + "": "Authentication specifies cluster-wide settings for authentication (like OAuth and webhook token authenticators). The canonical name of an instance is `cluster`.", + "spec": "spec holds user settable values for configuration", + "status": "status holds observed values from the cluster. They may not be overridden.", +} + +func (Authentication) SwaggerDoc() map[string]string { + return map_Authentication +} + +var map_AuthenticationSpec = map[string]string{ + "type": "type identifies the cluster managed, user facing authentication mode in use. Specifically, it manages the component that responds to login attempts. The default is IntegratedOAuth.", + "oauthMetadata": "oauthMetadata contains the discovery endpoint data for OAuth 2.0 Authorization Server Metadata for an external OAuth server. This discovery document can be viewed from its served location: oc get --raw '/.well-known/oauth-authorization-server' For further details, see the IETF Draft: https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2 If oauthMetadata.name is non-empty, this value has precedence over any metadata reference stored in status. The key \"oauthMetadata\" is used to locate the data. If specified and the config map or expected key is not found, no metadata is served. If the specified metadata is not valid, no metadata is served. The namespace for this config map is openshift-config.", + "webhookTokenAuthenticators": "webhookTokenAuthenticators is DEPRECATED, setting it has no effect.", + "webhookTokenAuthenticator": "webhookTokenAuthenticator configures a remote token reviewer. These remote authentication webhooks can be used to verify bearer tokens via the tokenreviews.authentication.k8s.io REST API. This is required to honor bearer tokens that are provisioned by an external authentication service.", + "serviceAccountIssuer": "serviceAccountIssuer is the identifier of the bound service account token issuer. The default is https://kubernetes.default.svc", +} + +func (AuthenticationSpec) SwaggerDoc() map[string]string { + return map_AuthenticationSpec +} + +var map_AuthenticationStatus = map[string]string{ + "integratedOAuthMetadata": "integratedOAuthMetadata contains the discovery endpoint data for OAuth 2.0 Authorization Server Metadata for the in-cluster integrated OAuth server. This discovery document can be viewed from its served location: oc get --raw '/.well-known/oauth-authorization-server' For further details, see the IETF Draft: https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2 This contains the observed value based on cluster state. An explicitly set value in spec.oauthMetadata has precedence over this field. This field has no meaning if authentication spec.type is not set to IntegratedOAuth. The key \"oauthMetadata\" is used to locate the data. If the config map or expected key is not found, no metadata is served. If the specified metadata is not valid, no metadata is served. The namespace for this config map is openshift-config-managed.", +} + +func (AuthenticationStatus) SwaggerDoc() map[string]string { + return map_AuthenticationStatus +} + +var map_DeprecatedWebhookTokenAuthenticator = map[string]string{ + "": "deprecatedWebhookTokenAuthenticator holds the necessary configuration options for a remote token authenticator. It's the same as WebhookTokenAuthenticator but it's missing the 'required' validation on KubeConfig field.", + "kubeConfig": "kubeConfig contains kube config file data which describes how to access the remote webhook service. For further details, see: https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication The key \"kubeConfig\" is used to locate the data. If the secret or expected key is not found, the webhook is not honored. If the specified kube config data is not valid, the webhook is not honored. The namespace for this secret is determined by the point of use.", +} + +func (DeprecatedWebhookTokenAuthenticator) SwaggerDoc() map[string]string { + return map_DeprecatedWebhookTokenAuthenticator +} + +var map_WebhookTokenAuthenticator = map[string]string{ + "": "webhookTokenAuthenticator holds the necessary configuration options for a remote token authenticator", + "kubeConfig": "kubeConfig references a secret that contains kube config file data which describes how to access the remote webhook service. The namespace for the referenced secret is openshift-config.\n\nFor further details, see:\n\nhttps://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication\n\nThe key \"kubeConfig\" is used to locate the data. If the secret or expected key is not found, the webhook is not honored. If the specified kube config data is not valid, the webhook is not honored.", +} + +func (WebhookTokenAuthenticator) SwaggerDoc() map[string]string { + return map_WebhookTokenAuthenticator +} + +var map_Build = map[string]string{ + "": "Build configures the behavior of OpenShift builds for the entire cluster. This includes default settings that can be overridden in BuildConfig objects, and overrides which are applied to all builds.\n\nThe canonical name is \"cluster\"", + "spec": "Spec holds user-settable values for the build controller configuration", +} + +func (Build) SwaggerDoc() map[string]string { + return map_Build +} + +var map_BuildDefaults = map[string]string{ + "defaultProxy": "DefaultProxy contains the default proxy settings for all build operations, including image pull/push and source download.\n\nValues can be overrode by setting the `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY` environment variables in the build config's strategy.", + "gitProxy": "GitProxy contains the proxy settings for git operations only. If set, this will override any Proxy settings for all git commands, such as git clone.\n\nValues that are not set here will be inherited from DefaultProxy.", + "env": "Env is a set of default environment variables that will be applied to the build if the specified variables do not exist on the build", + "imageLabels": "ImageLabels is a list of docker labels that are applied to the resulting image. User can override a default label by providing a label with the same name in their Build/BuildConfig.", + "resources": "Resources defines resource requirements to execute the build.", +} + +func (BuildDefaults) SwaggerDoc() map[string]string { + return map_BuildDefaults +} + +var map_BuildOverrides = map[string]string{ + "imageLabels": "ImageLabels is a list of docker labels that are applied to the resulting image. If user provided a label in their Build/BuildConfig with the same name as one in this list, the user's label will be overwritten.", + "nodeSelector": "NodeSelector is a selector which must be true for the build pod to fit on a node", + "tolerations": "Tolerations is a list of Tolerations that will override any existing tolerations set on a build pod.", + "forcePull": "ForcePull overrides, if set, the equivalent value in the builds, i.e. false disables force pull for all builds, true enables force pull for all builds, independently of what each build specifies itself", +} + +func (BuildOverrides) SwaggerDoc() map[string]string { + return map_BuildOverrides +} + +var map_BuildSpec = map[string]string{ + "additionalTrustedCA": "AdditionalTrustedCA is a reference to a ConfigMap containing additional CAs that should be trusted for image pushes and pulls during builds. The namespace for this config map is openshift-config.\n\nDEPRECATED: Additional CAs for image pull and push should be set on image.config.openshift.io/cluster instead.", + "buildDefaults": "BuildDefaults controls the default information for Builds", + "buildOverrides": "BuildOverrides controls override settings for builds", +} + +func (BuildSpec) SwaggerDoc() map[string]string { + return map_BuildSpec +} + +var map_ImageLabel = map[string]string{ + "name": "Name defines the name of the label. It must have non-zero length.", + "value": "Value defines the literal value of the label.", +} + +func (ImageLabel) SwaggerDoc() map[string]string { + return map_ImageLabel +} + +var map_ClusterOperator = map[string]string{ + "": "ClusterOperator is the Custom Resource object which holds the current state of an operator. This object is used by operators to convey their state to the rest of the cluster.", + "spec": "spec holds configuration that could apply to any operator.", + "status": "status holds the information about the state of an operator. It is consistent with status information across the Kubernetes ecosystem.", +} + +func (ClusterOperator) SwaggerDoc() map[string]string { + return map_ClusterOperator +} + +var map_ClusterOperatorList = map[string]string{ + "": "ClusterOperatorList is a list of OperatorStatus resources.", +} + +func (ClusterOperatorList) SwaggerDoc() map[string]string { + return map_ClusterOperatorList +} + +var map_ClusterOperatorSpec = map[string]string{ + "": "ClusterOperatorSpec is empty for now, but you could imagine holding information like \"pause\".", +} + +func (ClusterOperatorSpec) SwaggerDoc() map[string]string { + return map_ClusterOperatorSpec +} + +var map_ClusterOperatorStatus = map[string]string{ + "": "ClusterOperatorStatus provides information about the status of the operator.", + "conditions": "conditions describes the state of the operator's managed and monitored components.", + "versions": "versions is a slice of operator and operand version tuples. Operators which manage multiple operands will have multiple operand entries in the array. Available operators must report the version of the operator itself with the name \"operator\". An operator reports a new \"operator\" version when it has rolled out the new version to all of its operands.", + "relatedObjects": "relatedObjects is a list of objects that are \"interesting\" or related to this operator. Common uses are: 1. the detailed resource driving the operator 2. operator namespaces 3. operand namespaces", + "extension": "extension contains any additional status information specific to the operator which owns this status object.", +} + +func (ClusterOperatorStatus) SwaggerDoc() map[string]string { + return map_ClusterOperatorStatus +} + +var map_ClusterOperatorStatusCondition = map[string]string{ + "": "ClusterOperatorStatusCondition represents the state of the operator's managed and monitored components.", + "type": "type specifies the aspect reported by this condition.", + "status": "status of the condition, one of True, False, Unknown.", + "lastTransitionTime": "lastTransitionTime is the time of the last update to the current status property.", + "reason": "reason is the CamelCase reason for the condition's current status.", + "message": "message provides additional information about the current condition. This is only to be consumed by humans. It may contain Line Feed characters (U+000A), which should be rendered as new lines.", +} + +func (ClusterOperatorStatusCondition) SwaggerDoc() map[string]string { + return map_ClusterOperatorStatusCondition +} + +var map_ObjectReference = map[string]string{ + "": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "group": "group of the referent.", + "resource": "resource of the referent.", + "namespace": "namespace of the referent.", + "name": "name of the referent.", +} + +func (ObjectReference) SwaggerDoc() map[string]string { + return map_ObjectReference +} + +var map_OperandVersion = map[string]string{ + "name": "name is the name of the particular operand this version is for. It usually matches container images, not operators.", + "version": "version indicates which version of a particular operand is currently being managed. It must always match the Available operand. If 1.0.0 is Available, then this must indicate 1.0.0 even if the operator is trying to rollout 1.1.0", +} + +func (OperandVersion) SwaggerDoc() map[string]string { + return map_OperandVersion +} + +var map_ClusterVersion = map[string]string{ + "": "ClusterVersion is the configuration for the ClusterVersionOperator. This is where parameters related to automatic updates can be set.", + "spec": "spec is the desired state of the cluster version - the operator will work to ensure that the desired version is applied to the cluster.", + "status": "status contains information about the available updates and any in-progress updates.", +} + +func (ClusterVersion) SwaggerDoc() map[string]string { + return map_ClusterVersion +} + +var map_ClusterVersionList = map[string]string{ + "": "ClusterVersionList is a list of ClusterVersion resources.", +} + +func (ClusterVersionList) SwaggerDoc() map[string]string { + return map_ClusterVersionList +} + +var map_ClusterVersionSpec = map[string]string{ + "": "ClusterVersionSpec is the desired version state of the cluster. It includes the version the cluster should be at, how the cluster is identified, and where the cluster should look for version updates.", + "clusterID": "clusterID uniquely identifies this cluster. This is expected to be an RFC4122 UUID value (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx in hexadecimal values). This is a required field.", + "desiredUpdate": "desiredUpdate is an optional field that indicates the desired value of the cluster version. Setting this value will trigger an upgrade (if the current version does not match the desired version). The set of recommended update values is listed as part of available updates in status, and setting values outside that range may cause the upgrade to fail. You may specify the version field without setting image if an update exists with that version in the availableUpdates or history.\n\nIf an upgrade fails the operator will halt and report status about the failing component. Setting the desired update value back to the previous version will cause a rollback to be attempted. Not all rollbacks will succeed.", + "upstream": "upstream may be used to specify the preferred update server. By default it will use the appropriate update server for the cluster and region.", + "channel": "channel is an identifier for explicitly requesting that a non-default set of updates be applied to this cluster. The default channel will be contain stable updates that are appropriate for production clusters.", + "overrides": "overrides is list of overides for components that are managed by cluster version operator. Marking a component unmanaged will prevent the operator from creating or updating the object.", +} + +func (ClusterVersionSpec) SwaggerDoc() map[string]string { + return map_ClusterVersionSpec +} + +var map_ClusterVersionStatus = map[string]string{ + "": "ClusterVersionStatus reports the status of the cluster versioning, including any upgrades that are in progress. The current field will be set to whichever version the cluster is reconciling to, and the conditions array will report whether the update succeeded, is in progress, or is failing.", + "desired": "desired is the version that the cluster is reconciling towards. If the cluster is not yet fully initialized desired will be set with the information available, which may be an image or a tag.", + "history": "history contains a list of the most recent versions applied to the cluster. This value may be empty during cluster startup, and then will be updated when a new update is being applied. The newest update is first in the list and it is ordered by recency. Updates in the history have state Completed if the rollout completed - if an update was failing or halfway applied the state will be Partial. Only a limited amount of update history is preserved.", + "observedGeneration": "observedGeneration reports which version of the spec is being synced. If this value is not equal to metadata.generation, then the desired and conditions fields may represent a previous version.", + "versionHash": "versionHash is a fingerprint of the content that the cluster will be updated with. It is used by the operator to avoid unnecessary work and is for internal use only.", + "conditions": "conditions provides information about the cluster version. The condition \"Available\" is set to true if the desiredUpdate has been reached. The condition \"Progressing\" is set to true if an update is being applied. The condition \"Degraded\" is set to true if an update is currently blocked by a temporary or permanent error. Conditions are only valid for the current desiredUpdate when metadata.generation is equal to status.generation.", + "availableUpdates": "availableUpdates contains the list of updates that are appropriate for this cluster. This list may be empty if no updates are recommended, if the update service is unavailable, or if an invalid channel has been specified.", +} + +func (ClusterVersionStatus) SwaggerDoc() map[string]string { + return map_ClusterVersionStatus +} + +var map_ComponentOverride = map[string]string{ + "": "ComponentOverride allows overriding cluster version operator's behavior for a component.", + "kind": "kind indentifies which object to override.", + "group": "group identifies the API group that the kind is in.", + "namespace": "namespace is the component's namespace. If the resource is cluster scoped, the namespace should be empty.", + "name": "name is the component's name.", + "unmanaged": "unmanaged controls if cluster version operator should stop managing the resources in this cluster. Default: false", +} + +func (ComponentOverride) SwaggerDoc() map[string]string { + return map_ComponentOverride +} + +var map_Release = map[string]string{ + "": "Release represents an OpenShift release image and associated metadata.", + "version": "version is a semantic versioning identifying the update version. When this field is part of spec, version is optional if image is specified.", + "image": "image is a container image location that contains the update. When this field is part of spec, image is optional if version is specified and the availableUpdates field contains a matching version.", + "url": "url contains information about this release. This URL is set by the 'url' metadata property on a release or the metadata returned by the update API and should be displayed as a link in user interfaces. The URL field may not be set for test or nightly releases.", + "channels": "channels is the set of Cincinnati channels to which the release currently belongs.", +} + +func (Release) SwaggerDoc() map[string]string { + return map_Release +} + +var map_Update = map[string]string{ + "": "Update represents an administrator update request.", + "version": "version is a semantic versioning identifying the update version. When this field is part of spec, version is optional if image is specified.", + "image": "image is a container image location that contains the update. When this field is part of spec, image is optional if version is specified and the availableUpdates field contains a matching version.", + "force": "force allows an administrator to update to an image that has failed verification, does not appear in the availableUpdates list, or otherwise would be blocked by normal protections on update. This option should only be used when the authenticity of the provided image has been verified out of band because the provided image will run with full administrative access to the cluster. Do not use this flag with images that comes from unknown or potentially malicious sources.\n\nThis flag does not override other forms of consistency checking that are required before a new update is deployed.", +} + +func (Update) SwaggerDoc() map[string]string { + return map_Update +} + +var map_UpdateHistory = map[string]string{ + "": "UpdateHistory is a single attempted update to the cluster.", + "state": "state reflects whether the update was fully applied. The Partial state indicates the update is not fully applied, while the Completed state indicates the update was successfully rolled out at least once (all parts of the update successfully applied).", + "startedTime": "startedTime is the time at which the update was started.", + "completionTime": "completionTime, if set, is when the update was fully applied. The update that is currently being applied will have a null completion time. Completion time will always be set for entries that are not the current update (usually to the started time of the next update).", + "version": "version is a semantic versioning identifying the update version. If the requested image does not define a version, or if a failure occurs retrieving the image, this value may be empty.", + "image": "image is a container image location that contains the update. This value is always populated.", + "verified": "verified indicates whether the provided update was properly verified before it was installed. If this is false the cluster may not be trusted.", +} + +func (UpdateHistory) SwaggerDoc() map[string]string { + return map_UpdateHistory +} + +var map_Console = map[string]string{ + "": "Console holds cluster-wide configuration for the web console, including the logout URL, and reports the public URL of the console. The canonical name is `cluster`.", + "spec": "spec holds user settable values for configuration", + "status": "status holds observed values from the cluster. They may not be overridden.", +} + +func (Console) SwaggerDoc() map[string]string { + return map_Console +} + +var map_ConsoleAuthentication = map[string]string{ + "": "ConsoleAuthentication defines a list of optional configuration for console authentication.", + "logoutRedirect": "An optional, absolute URL to redirect web browsers to after logging out of the console. If not specified, it will redirect to the default login page. This is required when using an identity provider that supports single sign-on (SSO) such as: - OpenID (Keycloak, Azure) - RequestHeader (GSSAPI, SSPI, SAML) - OAuth (GitHub, GitLab, Google) Logging out of the console will destroy the user's token. The logoutRedirect provides the user the option to perform single logout (SLO) through the identity provider to destroy their single sign-on session.", +} + +func (ConsoleAuthentication) SwaggerDoc() map[string]string { + return map_ConsoleAuthentication +} + +var map_ConsoleSpec = map[string]string{ + "": "ConsoleSpec is the specification of the desired behavior of the Console.", +} + +func (ConsoleSpec) SwaggerDoc() map[string]string { + return map_ConsoleSpec +} + +var map_ConsoleStatus = map[string]string{ + "": "ConsoleStatus defines the observed status of the Console.", + "consoleURL": "The URL for the console. This will be derived from the host for the route that is created for the console.", +} + +func (ConsoleStatus) SwaggerDoc() map[string]string { + return map_ConsoleStatus +} + +var map_DNS = map[string]string{ + "": "DNS holds cluster-wide information about DNS. The canonical name is `cluster`", + "spec": "spec holds user settable values for configuration", + "status": "status holds observed values from the cluster. They may not be overridden.", +} + +func (DNS) SwaggerDoc() map[string]string { + return map_DNS +} + +var map_DNSSpec = map[string]string{ + "baseDomain": "baseDomain is the base domain of the cluster. All managed DNS records will be sub-domains of this base.\n\nFor example, given the base domain `openshift.example.com`, an API server DNS record may be created for `cluster-api.openshift.example.com`.\n\nOnce set, this field cannot be changed.", + "publicZone": "publicZone is the location where all the DNS records that are publicly accessible to the internet exist.\n\nIf this field is nil, no public records should be created.\n\nOnce set, this field cannot be changed.", + "privateZone": "privateZone is the location where all the DNS records that are only available internally to the cluster exist.\n\nIf this field is nil, no private records should be created.\n\nOnce set, this field cannot be changed.", +} + +func (DNSSpec) SwaggerDoc() map[string]string { + return map_DNSSpec +} + +var map_DNSZone = map[string]string{ + "": "DNSZone is used to define a DNS hosted zone. A zone can be identified by an ID or tags.", + "id": "id is the identifier that can be used to find the DNS hosted zone.\n\non AWS zone can be fetched using `ID` as id in [1] on Azure zone can be fetched using `ID` as a pre-determined name in [2], on GCP zone can be fetched using `ID` as a pre-determined name in [3].\n\n[1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get", + "tags": "tags can be used to query the DNS hosted zone.\n\non AWS, resourcegroupstaggingapi [1] can be used to fetch a zone using `Tags` as tag-filters,\n\n[1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options", +} + +func (DNSZone) SwaggerDoc() map[string]string { + return map_DNSZone +} + +var map_CustomFeatureGates = map[string]string{ + "enabled": "enabled is a list of all feature gates that you want to force on", + "disabled": "disabled is a list of all feature gates that you want to force off", +} + +func (CustomFeatureGates) SwaggerDoc() map[string]string { + return map_CustomFeatureGates +} + +var map_FeatureGate = map[string]string{ + "": "Feature holds cluster-wide information about feature gates. The canonical name is `cluster`", + "spec": "spec holds user settable values for configuration", + "status": "status holds observed values from the cluster. They may not be overridden.", +} + +func (FeatureGate) SwaggerDoc() map[string]string { + return map_FeatureGate +} + +var map_FeatureGateSelection = map[string]string{ + "featureSet": "featureSet changes the list of features in the cluster. The default is empty. Be very careful adjusting this setting. Turning on or off features may cause irreversible changes in your cluster which cannot be undone.", + "customNoUpgrade": "customNoUpgrade allows the enabling or disabling of any feature. Turning this feature set on IS NOT SUPPORTED, CANNOT BE UNDONE, and PREVENTS UPGRADES. Because of its nature, this setting cannot be validated. If you have any typos or accidentally apply invalid combinations your cluster may fail in an unrecoverable way. featureSet must equal \"CustomNoUpgrade\" must be set to use this field.", +} + +func (FeatureGateSelection) SwaggerDoc() map[string]string { + return map_FeatureGateSelection +} + +var map_Image = map[string]string{ + "": "Image governs policies related to imagestream imports and runtime configuration for external registries. It allows cluster admins to configure which registries OpenShift is allowed to import images from, extra CA trust bundles for external registries, and policies to block or allow registry hostnames. When exposing OpenShift's image registry to the public, this also lets cluster admins specify the external hostname.", + "spec": "spec holds user settable values for configuration", + "status": "status holds observed values from the cluster. They may not be overridden.", +} + +func (Image) SwaggerDoc() map[string]string { + return map_Image +} + +var map_ImageSpec = map[string]string{ + "allowedRegistriesForImport": "allowedRegistriesForImport limits the container image registries that normal users may import images from. Set this list to the registries that you trust to contain valid Docker images and that you want applications to be able to import from. Users with permission to create Images or ImageStreamMappings via the API are not affected by this policy - typically only administrators or system integrations will have those permissions.", + "externalRegistryHostnames": "externalRegistryHostnames provides the hostnames for the default external image registry. The external hostname should be set only when the image registry is exposed externally. The first value is used in 'publicDockerImageRepository' field in ImageStreams. The value must be in \"hostname[:port]\" format.", + "additionalTrustedCA": "additionalTrustedCA is a reference to a ConfigMap containing additional CAs that should be trusted during imagestream import, pod image pull, build image pull, and imageregistry pullthrough. The namespace for this config map is openshift-config.", + "registrySources": "registrySources contains configuration that determines how the container runtime should treat individual registries when accessing images for builds+pods. (e.g. whether or not to allow insecure access). It does not contain configuration for the internal cluster registry.", +} + +func (ImageSpec) SwaggerDoc() map[string]string { + return map_ImageSpec +} + +var map_ImageStatus = map[string]string{ + "internalRegistryHostname": "internalRegistryHostname sets the hostname for the default internal image registry. The value must be in \"hostname[:port]\" format. This value is set by the image registry operator which controls the internal registry hostname. For backward compatibility, users can still use OPENSHIFT_DEFAULT_REGISTRY environment variable but this setting overrides the environment variable.", + "externalRegistryHostnames": "externalRegistryHostnames provides the hostnames for the default external image registry. The external hostname should be set only when the image registry is exposed externally. The first value is used in 'publicDockerImageRepository' field in ImageStreams. The value must be in \"hostname[:port]\" format.", +} + +func (ImageStatus) SwaggerDoc() map[string]string { + return map_ImageStatus +} + +var map_RegistryLocation = map[string]string{ + "": "RegistryLocation contains a location of the registry specified by the registry domain name. The domain name might include wildcards, like '*' or '??'.", + "domainName": "domainName specifies a domain name for the registry In case the registry use non-standard (80 or 443) port, the port should be included in the domain name as well.", + "insecure": "insecure indicates whether the registry is secure (https) or insecure (http) By default (if not specified) the registry is assumed as secure.", +} + +func (RegistryLocation) SwaggerDoc() map[string]string { + return map_RegistryLocation +} + +var map_RegistrySources = map[string]string{ + "": "RegistrySources holds cluster-wide information about how to handle the registries config.", + "insecureRegistries": "insecureRegistries are registries which do not have a valid TLS certificates or only support HTTP connections.", + "blockedRegistries": "blockedRegistries cannot be used for image pull and push actions. All other registries are permitted.\n\nOnly one of BlockedRegistries or AllowedRegistries may be set.", + "allowedRegistries": "allowedRegistries are the only registries permitted for image pull and push actions. All other registries are denied.\n\nOnly one of BlockedRegistries or AllowedRegistries may be set.", +} + +func (RegistrySources) SwaggerDoc() map[string]string { + return map_RegistrySources +} + +var map_AWSPlatformSpec = map[string]string{ + "": "AWSPlatformSpec holds the desired state of the Amazon Web Services infrastructure provider. This only includes fields that can be modified in the cluster.", + "serviceEndpoints": "serviceEndpoints list contains custom endpoints which will override default service endpoint of AWS Services. There must be only one ServiceEndpoint for a service.", +} + +func (AWSPlatformSpec) SwaggerDoc() map[string]string { + return map_AWSPlatformSpec +} + +var map_AWSPlatformStatus = map[string]string{ + "": "AWSPlatformStatus holds the current status of the Amazon Web Services infrastructure provider.", + "region": "region holds the default AWS region for new AWS resources created by the cluster.", + "serviceEndpoints": "ServiceEndpoints list contains custom endpoints which will override default service endpoint of AWS Services. There must be only one ServiceEndpoint for a service.", +} + +func (AWSPlatformStatus) SwaggerDoc() map[string]string { + return map_AWSPlatformStatus +} + +var map_AWSServiceEndpoint = map[string]string{ + "": "AWSServiceEndpoint store the configuration of a custom url to override existing defaults of AWS Services.", + "name": "name is the name of the AWS service. The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html This must be provided and cannot be empty.", + "url": "url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty.", +} + +func (AWSServiceEndpoint) SwaggerDoc() map[string]string { + return map_AWSServiceEndpoint +} + +var map_AzurePlatformSpec = map[string]string{ + "": "AzurePlatformSpec holds the desired state of the Azure infrastructure provider. This only includes fields that can be modified in the cluster.", +} + +func (AzurePlatformSpec) SwaggerDoc() map[string]string { + return map_AzurePlatformSpec +} + +var map_AzurePlatformStatus = map[string]string{ + "": "AzurePlatformStatus holds the current status of the Azure infrastructure provider.", + "resourceGroupName": "resourceGroupName is the Resource Group for new Azure resources created for the cluster.", + "networkResourceGroupName": "networkResourceGroupName is the Resource Group for network resources like the Virtual Network and Subnets used by the cluster. If empty, the value is same as ResourceGroupName.", + "cloudName": "cloudName is the name of the Azure cloud environment which can be used to configure the Azure SDK with the appropriate Azure API endpoints. If empty, the value is equal to `AzurePublicCloud`.", +} + +func (AzurePlatformStatus) SwaggerDoc() map[string]string { + return map_AzurePlatformStatus +} + +var map_BareMetalPlatformSpec = map[string]string{ + "": "BareMetalPlatformSpec holds the desired state of the BareMetal infrastructure provider. This only includes fields that can be modified in the cluster.", +} + +func (BareMetalPlatformSpec) SwaggerDoc() map[string]string { + return map_BareMetalPlatformSpec +} + +var map_BareMetalPlatformStatus = map[string]string{ + "": "BareMetalPlatformStatus holds the current status of the BareMetal infrastructure provider. For more information about the network architecture used with the BareMetal platform type, see: https://github.com/openshift/installer/blob/master/docs/design/baremetal/networking-infrastructure.md", + "apiServerInternalIP": "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers.", + "ingressIP": "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names.", + "nodeDNSIP": "nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for BareMetal deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster.", +} + +func (BareMetalPlatformStatus) SwaggerDoc() map[string]string { + return map_BareMetalPlatformStatus +} + +var map_GCPPlatformSpec = map[string]string{ + "": "GCPPlatformSpec holds the desired state of the Google Cloud Platform infrastructure provider. This only includes fields that can be modified in the cluster.", +} + +func (GCPPlatformSpec) SwaggerDoc() map[string]string { + return map_GCPPlatformSpec +} + +var map_GCPPlatformStatus = map[string]string{ + "": "GCPPlatformStatus holds the current status of the Google Cloud Platform infrastructure provider.", + "projectID": "resourceGroupName is the Project ID for new GCP resources created for the cluster.", + "region": "region holds the region for new GCP resources created for the cluster.", +} + +func (GCPPlatformStatus) SwaggerDoc() map[string]string { + return map_GCPPlatformStatus +} + +var map_IBMCloudPlatformSpec = map[string]string{ + "": "IBMCloudPlatformSpec holds the desired state of the IBMCloud infrastructure provider. This only includes fields that can be modified in the cluster.", +} + +func (IBMCloudPlatformSpec) SwaggerDoc() map[string]string { + return map_IBMCloudPlatformSpec +} + +var map_IBMCloudPlatformStatus = map[string]string{ + "": "IBMCloudPlatformStatus holds the current status of the IBMCloud infrastructure provider.", + "location": "Location is where the cluster has been deployed", + "resourceGroupName": "ResourceGroupName is the Resource Group for new IBMCloud resources created for the cluster.", + "providerType": "ProviderType indicates the type of cluster that was created", +} + +func (IBMCloudPlatformStatus) SwaggerDoc() map[string]string { + return map_IBMCloudPlatformStatus +} + +var map_Infrastructure = map[string]string{ + "": "Infrastructure holds cluster-wide information about Infrastructure. The canonical name is `cluster`", + "spec": "spec holds user settable values for configuration", + "status": "status holds observed values from the cluster. They may not be overridden.", +} + +func (Infrastructure) SwaggerDoc() map[string]string { + return map_Infrastructure +} + +var map_InfrastructureList = map[string]string{ + "": "InfrastructureList is", +} + +func (InfrastructureList) SwaggerDoc() map[string]string { + return map_InfrastructureList +} + +var map_InfrastructureSpec = map[string]string{ + "": "InfrastructureSpec contains settings that apply to the cluster infrastructure.", + "cloudConfig": "cloudConfig is a reference to a ConfigMap containing the cloud provider configuration file. This configuration file is used to configure the Kubernetes cloud provider integration when using the built-in cloud provider integration or the external cloud controller manager. The namespace for this config map is openshift-config.\n\ncloudConfig should only be consumed by the kube_cloud_config controller. The controller is responsible for using the user configuration in the spec for various platforms and combining that with the user provided ConfigMap in this field to create a stitched kube cloud config. The controller generates a ConfigMap `kube-cloud-config` in `openshift-config-managed` namespace with the kube cloud config is stored in `cloud.conf` key. All the clients are expected to use the generated ConfigMap only.", + "platformSpec": "platformSpec holds desired information specific to the underlying infrastructure provider.", +} + +func (InfrastructureSpec) SwaggerDoc() map[string]string { + return map_InfrastructureSpec +} + +var map_InfrastructureStatus = map[string]string{ + "": "InfrastructureStatus describes the infrastructure the cluster is leveraging.", + "infrastructureName": "infrastructureName uniquely identifies a cluster with a human friendly name. Once set it should not be changed. Must be of max length 27 and must have only alphanumeric or hyphen characters.", + "platform": "platform is the underlying infrastructure provider for the cluster.\n\nDeprecated: Use platformStatus.type instead.", + "platformStatus": "platformStatus holds status information specific to the underlying infrastructure provider.", + "etcdDiscoveryDomain": "etcdDiscoveryDomain is the domain used to fetch the SRV records for discovering etcd servers and clients. For more info: https://github.com/etcd-io/etcd/blob/329be66e8b3f9e2e6af83c123ff89297e49ebd15/Documentation/op-guide/clustering.md#dns-discovery", + "apiServerURL": "apiServerURL is a valid URI with scheme 'https', address and optionally a port (defaulting to 443). apiServerURL can be used by components like the web console to tell users where to find the Kubernetes API.", + "apiServerInternalURI": "apiServerInternalURL is a valid URI with scheme 'https', address and optionally a port (defaulting to 443). apiServerInternalURL can be used by components like kubelets, to contact the Kubernetes API server using the infrastructure provider rather than Kubernetes networking.", +} + +func (InfrastructureStatus) SwaggerDoc() map[string]string { + return map_InfrastructureStatus +} + +var map_KubevirtPlatformSpec = map[string]string{ + "": "KubevirtPlatformSpec holds the desired state of the kubevirt infrastructure provider. This only includes fields that can be modified in the cluster.", +} + +func (KubevirtPlatformSpec) SwaggerDoc() map[string]string { + return map_KubevirtPlatformSpec +} + +var map_KubevirtPlatformStatus = map[string]string{ + "": "KubevirtPlatformStatus holds the current status of the kubevirt infrastructure provider.", + "apiServerInternalIP": "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers.", + "ingressIP": "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names.", +} + +func (KubevirtPlatformStatus) SwaggerDoc() map[string]string { + return map_KubevirtPlatformStatus +} + +var map_OpenStackPlatformSpec = map[string]string{ + "": "OpenStackPlatformSpec holds the desired state of the OpenStack infrastructure provider. This only includes fields that can be modified in the cluster.", +} + +func (OpenStackPlatformSpec) SwaggerDoc() map[string]string { + return map_OpenStackPlatformSpec +} + +var map_OpenStackPlatformStatus = map[string]string{ + "": "OpenStackPlatformStatus holds the current status of the OpenStack infrastructure provider.", + "apiServerInternalIP": "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers.", + "cloudName": "cloudName is the name of the desired OpenStack cloud in the client configuration file (`clouds.yaml`).", + "ingressIP": "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names.", + "nodeDNSIP": "nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for OpenStack deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster.", +} + +func (OpenStackPlatformStatus) SwaggerDoc() map[string]string { + return map_OpenStackPlatformStatus +} + +var map_OvirtPlatformSpec = map[string]string{ + "": "OvirtPlatformSpec holds the desired state of the oVirt infrastructure provider. This only includes fields that can be modified in the cluster.", +} + +func (OvirtPlatformSpec) SwaggerDoc() map[string]string { + return map_OvirtPlatformSpec +} + +var map_OvirtPlatformStatus = map[string]string{ + "": "OvirtPlatformStatus holds the current status of the oVirt infrastructure provider.", + "apiServerInternalIP": "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers.", + "ingressIP": "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names.", + "nodeDNSIP": "deprecated: as of 4.6, this field is no longer set or honored. It will be removed in a future release.", +} + +func (OvirtPlatformStatus) SwaggerDoc() map[string]string { + return map_OvirtPlatformStatus +} + +var map_PlatformSpec = map[string]string{ + "": "PlatformSpec holds the desired state specific to the underlying infrastructure provider of the current cluster. Since these are used at spec-level for the underlying cluster, it is supposed that only one of the spec structs is set.", + "type": "type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", \"OpenStack\", \"VSphere\", \"oVirt\", \"KubeVirt\" and \"None\". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform.", + "aws": "AWS contains settings specific to the Amazon Web Services infrastructure provider.", + "azure": "Azure contains settings specific to the Azure infrastructure provider.", + "gcp": "GCP contains settings specific to the Google Cloud Platform infrastructure provider.", + "baremetal": "BareMetal contains settings specific to the BareMetal platform.", + "openstack": "OpenStack contains settings specific to the OpenStack infrastructure provider.", + "ovirt": "Ovirt contains settings specific to the oVirt infrastructure provider.", + "vsphere": "VSphere contains settings specific to the VSphere infrastructure provider.", + "ibmcloud": "IBMCloud contains settings specific to the IBMCloud infrastructure provider.", + "kubevirt": "Kubevirt contains settings specific to the kubevirt infrastructure provider.", +} + +func (PlatformSpec) SwaggerDoc() map[string]string { + return map_PlatformSpec +} + +var map_PlatformStatus = map[string]string{ + "": "PlatformStatus holds the current status specific to the underlying infrastructure provider of the current cluster. Since these are used at status-level for the underlying cluster, it is supposed that only one of the status structs is set.", + "type": "type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", \"OpenStack\", \"VSphere\", \"oVirt\", and \"None\". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform.\n\nThis value will be synced with to the `status.platform` and `status.platformStatus.type`. Currently this value cannot be changed once set.", + "aws": "AWS contains settings specific to the Amazon Web Services infrastructure provider.", + "azure": "Azure contains settings specific to the Azure infrastructure provider.", + "gcp": "GCP contains settings specific to the Google Cloud Platform infrastructure provider.", + "baremetal": "BareMetal contains settings specific to the BareMetal platform.", + "openstack": "OpenStack contains settings specific to the OpenStack infrastructure provider.", + "ovirt": "Ovirt contains settings specific to the oVirt infrastructure provider.", + "vsphere": "VSphere contains settings specific to the VSphere infrastructure provider.", + "ibmcloud": "IBMCloud contains settings specific to the IBMCloud infrastructure provider.", + "kubevirt": "Kubevirt contains settings specific to the kubevirt infrastructure provider.", +} + +func (PlatformStatus) SwaggerDoc() map[string]string { + return map_PlatformStatus +} + +var map_VSpherePlatformSpec = map[string]string{ + "": "VSpherePlatformSpec holds the desired state of the vSphere infrastructure provider. This only includes fields that can be modified in the cluster.", +} + +func (VSpherePlatformSpec) SwaggerDoc() map[string]string { + return map_VSpherePlatformSpec +} + +var map_VSpherePlatformStatus = map[string]string{ + "": "VSpherePlatformStatus holds the current status of the vSphere infrastructure provider.", + "apiServerInternalIP": "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers.", + "ingressIP": "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names.", + "nodeDNSIP": "nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for vSphere deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster.", +} + +func (VSpherePlatformStatus) SwaggerDoc() map[string]string { + return map_VSpherePlatformStatus +} + +var map_Ingress = map[string]string{ + "": "Ingress holds cluster-wide information about ingress, including the default ingress domain used for routes. The canonical name is `cluster`.", + "spec": "spec holds user settable values for configuration", + "status": "status holds observed values from the cluster. They may not be overridden.", +} + +func (Ingress) SwaggerDoc() map[string]string { + return map_Ingress +} + +var map_IngressSpec = map[string]string{ + "domain": "domain is used to generate a default host name for a route when the route's host name is empty. The generated host name will follow this pattern: \"..\".\n\nIt is also used as the default wildcard domain suffix for ingress. The default ingresscontroller domain will follow this pattern: \"*.\".\n\nOnce set, changing domain is not currently supported.", +} + +func (IngressSpec) SwaggerDoc() map[string]string { + return map_IngressSpec +} + +var map_ClusterNetworkEntry = map[string]string{ + "": "ClusterNetworkEntry is a contiguous block of IP addresses from which pod IPs are allocated.", + "cidr": "The complete block for pod IPs.", + "hostPrefix": "The size (prefix) of block to allocate to each node. If this field is not used by the plugin, it can be left unset.", +} + +func (ClusterNetworkEntry) SwaggerDoc() map[string]string { + return map_ClusterNetworkEntry +} + +var map_ExternalIPConfig = map[string]string{ + "": "ExternalIPConfig specifies some IP blocks relevant for the ExternalIP field of a Service resource.", + "policy": "policy is a set of restrictions applied to the ExternalIP field. If nil or empty, then ExternalIP is not allowed to be set.", + "autoAssignCIDRs": "autoAssignCIDRs is a list of CIDRs from which to automatically assign Service.ExternalIP. These are assigned when the service is of type LoadBalancer. In general, this is only useful for bare-metal clusters. In Openshift 3.x, this was misleadingly called \"IngressIPs\". Automatically assigned External IPs are not affected by any ExternalIPPolicy rules. Currently, only one entry may be provided.", +} + +func (ExternalIPConfig) SwaggerDoc() map[string]string { + return map_ExternalIPConfig +} + +var map_ExternalIPPolicy = map[string]string{ + "": "ExternalIPPolicy configures exactly which IPs are allowed for the ExternalIP field in a Service. If the zero struct is supplied, then none are permitted. The policy controller always allows automatically assigned external IPs.", + "allowedCIDRs": "allowedCIDRs is the list of allowed CIDRs.", + "rejectedCIDRs": "rejectedCIDRs is the list of disallowed CIDRs. These take precedence over allowedCIDRs.", +} + +func (ExternalIPPolicy) SwaggerDoc() map[string]string { + return map_ExternalIPPolicy +} + +var map_Network = map[string]string{ + "": "Network holds cluster-wide information about Network. The canonical name is `cluster`. It is used to configure the desired network configuration, such as: IP address pools for services/pod IPs, network plugin, etc. Please view network.spec for an explanation on what applies when configuring this resource.", + "spec": "spec holds user settable values for configuration. As a general rule, this SHOULD NOT be read directly. Instead, you should consume the NetworkStatus, as it indicates the currently deployed configuration. Currently, most spec fields are immutable after installation. Please view the individual ones for further details on each.", + "status": "status holds observed values from the cluster. They may not be overridden.", +} + +func (Network) SwaggerDoc() map[string]string { + return map_Network +} + +var map_NetworkSpec = map[string]string{ + "": "NetworkSpec is the desired network configuration. As a general rule, this SHOULD NOT be read directly. Instead, you should consume the NetworkStatus, as it indicates the currently deployed configuration. Currently, most spec fields are immutable after installation. Please view the individual ones for further details on each.", + "clusterNetwork": "IP address pool to use for pod IPs. This field is immutable after installation.", + "serviceNetwork": "IP address pool for services. Currently, we only support a single entry here. This field is immutable after installation.", + "networkType": "NetworkType is the plugin that is to be deployed (e.g. OpenShiftSDN). This should match a value that the cluster-network-operator understands, or else no networking will be installed. Currently supported values are: - OpenShiftSDN This field is immutable after installation.", + "externalIP": "externalIP defines configuration for controllers that affect Service.ExternalIP. If nil, then ExternalIP is not allowed to be set.", + "serviceNodePortRange": "The port range allowed for Services of type NodePort. If not specified, the default of 30000-32767 will be used. Such Services without a NodePort specified will have one automatically allocated from this range. This parameter can be updated after the cluster is installed.", +} + +func (NetworkSpec) SwaggerDoc() map[string]string { + return map_NetworkSpec +} + +var map_NetworkStatus = map[string]string{ + "": "NetworkStatus is the current network configuration.", + "clusterNetwork": "IP address pool to use for pod IPs.", + "serviceNetwork": "IP address pool for services. Currently, we only support a single entry here.", + "networkType": "NetworkType is the plugin that is deployed (e.g. OpenShiftSDN).", + "clusterNetworkMTU": "ClusterNetworkMTU is the MTU for inter-pod networking.", +} + +func (NetworkStatus) SwaggerDoc() map[string]string { + return map_NetworkStatus +} + +var map_BasicAuthIdentityProvider = map[string]string{ + "": "BasicAuthPasswordIdentityProvider provides identities for users authenticating using HTTP basic auth credentials", +} + +func (BasicAuthIdentityProvider) SwaggerDoc() map[string]string { + return map_BasicAuthIdentityProvider +} + +var map_GitHubIdentityProvider = map[string]string{ + "": "GitHubIdentityProvider provides identities for users authenticating using GitHub credentials", + "clientID": "clientID is the oauth client ID", + "clientSecret": "clientSecret is a required reference to the secret by name containing the oauth client secret. The key \"clientSecret\" is used to locate the data. If the secret or expected key is not found, the identity provider is not honored. The namespace for this secret is openshift-config.", + "organizations": "organizations optionally restricts which organizations are allowed to log in", + "teams": "teams optionally restricts which teams are allowed to log in. Format is /.", + "hostname": "hostname is the optional domain (e.g. \"mycompany.com\") for use with a hosted instance of GitHub Enterprise. It must match the GitHub Enterprise settings value configured at /setup/settings#hostname.", + "ca": "ca is an optional reference to a config map by name containing the PEM-encoded CA bundle. It is used as a trust anchor to validate the TLS certificate presented by the remote server. The key \"ca.crt\" is used to locate the data. If specified and the config map or expected key is not found, the identity provider is not honored. If the specified ca data is not valid, the identity provider is not honored. If empty, the default system roots are used. This can only be configured when hostname is set to a non-empty value. The namespace for this config map is openshift-config.", +} + +func (GitHubIdentityProvider) SwaggerDoc() map[string]string { + return map_GitHubIdentityProvider +} + +var map_GitLabIdentityProvider = map[string]string{ + "": "GitLabIdentityProvider provides identities for users authenticating using GitLab credentials", + "clientID": "clientID is the oauth client ID", + "clientSecret": "clientSecret is a required reference to the secret by name containing the oauth client secret. The key \"clientSecret\" is used to locate the data. If the secret or expected key is not found, the identity provider is not honored. The namespace for this secret is openshift-config.", + "url": "url is the oauth server base URL", + "ca": "ca is an optional reference to a config map by name containing the PEM-encoded CA bundle. It is used as a trust anchor to validate the TLS certificate presented by the remote server. The key \"ca.crt\" is used to locate the data. If specified and the config map or expected key is not found, the identity provider is not honored. If the specified ca data is not valid, the identity provider is not honored. If empty, the default system roots are used. The namespace for this config map is openshift-config.", +} + +func (GitLabIdentityProvider) SwaggerDoc() map[string]string { + return map_GitLabIdentityProvider +} + +var map_GoogleIdentityProvider = map[string]string{ + "": "GoogleIdentityProvider provides identities for users authenticating using Google credentials", + "clientID": "clientID is the oauth client ID", + "clientSecret": "clientSecret is a required reference to the secret by name containing the oauth client secret. The key \"clientSecret\" is used to locate the data. If the secret or expected key is not found, the identity provider is not honored. The namespace for this secret is openshift-config.", + "hostedDomain": "hostedDomain is the optional Google App domain (e.g. \"mycompany.com\") to restrict logins to", +} + +func (GoogleIdentityProvider) SwaggerDoc() map[string]string { + return map_GoogleIdentityProvider +} + +var map_HTPasswdIdentityProvider = map[string]string{ + "": "HTPasswdPasswordIdentityProvider provides identities for users authenticating using htpasswd credentials", + "fileData": "fileData is a required reference to a secret by name containing the data to use as the htpasswd file. The key \"htpasswd\" is used to locate the data. If the secret or expected key is not found, the identity provider is not honored. If the specified htpasswd data is not valid, the identity provider is not honored. The namespace for this secret is openshift-config.", +} + +func (HTPasswdIdentityProvider) SwaggerDoc() map[string]string { + return map_HTPasswdIdentityProvider +} + +var map_IdentityProvider = map[string]string{ + "": "IdentityProvider provides identities for users authenticating using credentials", + "name": "name is used to qualify the identities returned by this provider. - It MUST be unique and not shared by any other identity provider used - It MUST be a valid path segment: name cannot equal \".\" or \"..\" or contain \"/\" or \"%\" or \":\"\n Ref: https://godoc.org/github.com/openshift/origin/pkg/user/apis/user/validation#ValidateIdentityProviderName", + "mappingMethod": "mappingMethod determines how identities from this provider are mapped to users Defaults to \"claim\"", +} + +func (IdentityProvider) SwaggerDoc() map[string]string { + return map_IdentityProvider +} + +var map_IdentityProviderConfig = map[string]string{ + "": "IdentityProviderConfig contains configuration for using a specific identity provider", + "type": "type identifies the identity provider type for this entry.", + "basicAuth": "basicAuth contains configuration options for the BasicAuth IdP", + "github": "github enables user authentication using GitHub credentials", + "gitlab": "gitlab enables user authentication using GitLab credentials", + "google": "google enables user authentication using Google credentials", + "htpasswd": "htpasswd enables user authentication using an HTPasswd file to validate credentials", + "keystone": "keystone enables user authentication using keystone password credentials", + "ldap": "ldap enables user authentication using LDAP credentials", + "openID": "openID enables user authentication using OpenID credentials", + "requestHeader": "requestHeader enables user authentication using request header credentials", +} + +func (IdentityProviderConfig) SwaggerDoc() map[string]string { + return map_IdentityProviderConfig +} + +var map_KeystoneIdentityProvider = map[string]string{ + "": "KeystonePasswordIdentityProvider provides identities for users authenticating using keystone password credentials", + "domainName": "domainName is required for keystone v3", +} + +func (KeystoneIdentityProvider) SwaggerDoc() map[string]string { + return map_KeystoneIdentityProvider +} + +var map_LDAPAttributeMapping = map[string]string{ + "": "LDAPAttributeMapping maps LDAP attributes to OpenShift identity fields", + "id": "id is the list of attributes whose values should be used as the user ID. Required. First non-empty attribute is used. At least one attribute is required. If none of the listed attribute have a value, authentication fails. LDAP standard identity attribute is \"dn\"", + "preferredUsername": "preferredUsername is the list of attributes whose values should be used as the preferred username. LDAP standard login attribute is \"uid\"", + "name": "name is the list of attributes whose values should be used as the display name. Optional. If unspecified, no display name is set for the identity LDAP standard display name attribute is \"cn\"", + "email": "email is the list of attributes whose values should be used as the email address. Optional. If unspecified, no email is set for the identity", +} + +func (LDAPAttributeMapping) SwaggerDoc() map[string]string { + return map_LDAPAttributeMapping +} + +var map_LDAPIdentityProvider = map[string]string{ + "": "LDAPPasswordIdentityProvider provides identities for users authenticating using LDAP credentials", + "url": "url is an RFC 2255 URL which specifies the LDAP search parameters to use. The syntax of the URL is: ldap://host:port/basedn?attribute?scope?filter", + "bindDN": "bindDN is an optional DN to bind with during the search phase.", + "bindPassword": "bindPassword is an optional reference to a secret by name containing a password to bind with during the search phase. The key \"bindPassword\" is used to locate the data. If specified and the secret or expected key is not found, the identity provider is not honored. The namespace for this secret is openshift-config.", + "insecure": "insecure, if true, indicates the connection should not use TLS WARNING: Should not be set to `true` with the URL scheme \"ldaps://\" as \"ldaps://\" URLs always\n attempt to connect using TLS, even when `insecure` is set to `true`\nWhen `true`, \"ldap://\" URLS connect insecurely. When `false`, \"ldap://\" URLs are upgraded to a TLS connection using StartTLS as specified in https://tools.ietf.org/html/rfc2830.", + "ca": "ca is an optional reference to a config map by name containing the PEM-encoded CA bundle. It is used as a trust anchor to validate the TLS certificate presented by the remote server. The key \"ca.crt\" is used to locate the data. If specified and the config map or expected key is not found, the identity provider is not honored. If the specified ca data is not valid, the identity provider is not honored. If empty, the default system roots are used. The namespace for this config map is openshift-config.", + "attributes": "attributes maps LDAP attributes to identities", +} + +func (LDAPIdentityProvider) SwaggerDoc() map[string]string { + return map_LDAPIdentityProvider +} + +var map_OAuth = map[string]string{ + "": "OAuth holds cluster-wide information about OAuth. The canonical name is `cluster`. It is used to configure the integrated OAuth server. This configuration is only honored when the top level Authentication config has type set to IntegratedOAuth.", + "spec": "spec holds user settable values for configuration", + "status": "status holds observed values from the cluster. They may not be overridden.", +} + +func (OAuth) SwaggerDoc() map[string]string { + return map_OAuth +} + +var map_OAuthRemoteConnectionInfo = map[string]string{ + "": "OAuthRemoteConnectionInfo holds information necessary for establishing a remote connection", + "url": "url is the remote URL to connect to", + "ca": "ca is an optional reference to a config map by name containing the PEM-encoded CA bundle. It is used as a trust anchor to validate the TLS certificate presented by the remote server. The key \"ca.crt\" is used to locate the data. If specified and the config map or expected key is not found, the identity provider is not honored. If the specified ca data is not valid, the identity provider is not honored. If empty, the default system roots are used. The namespace for this config map is openshift-config.", + "tlsClientCert": "tlsClientCert is an optional reference to a secret by name that contains the PEM-encoded TLS client certificate to present when connecting to the server. The key \"tls.crt\" is used to locate the data. If specified and the secret or expected key is not found, the identity provider is not honored. If the specified certificate data is not valid, the identity provider is not honored. The namespace for this secret is openshift-config.", + "tlsClientKey": "tlsClientKey is an optional reference to a secret by name that contains the PEM-encoded TLS private key for the client certificate referenced in tlsClientCert. The key \"tls.key\" is used to locate the data. If specified and the secret or expected key is not found, the identity provider is not honored. If the specified certificate data is not valid, the identity provider is not honored. The namespace for this secret is openshift-config.", +} + +func (OAuthRemoteConnectionInfo) SwaggerDoc() map[string]string { + return map_OAuthRemoteConnectionInfo +} + +var map_OAuthSpec = map[string]string{ + "": "OAuthSpec contains desired cluster auth configuration", + "identityProviders": "identityProviders is an ordered list of ways for a user to identify themselves. When this list is empty, no identities are provisioned for users.", + "tokenConfig": "tokenConfig contains options for authorization and access tokens", + "templates": "templates allow you to customize pages like the login page.", +} + +func (OAuthSpec) SwaggerDoc() map[string]string { + return map_OAuthSpec +} + +var map_OAuthStatus = map[string]string{ + "": "OAuthStatus shows current known state of OAuth server in the cluster", +} + +func (OAuthStatus) SwaggerDoc() map[string]string { + return map_OAuthStatus +} + +var map_OAuthTemplates = map[string]string{ + "": "OAuthTemplates allow for customization of pages like the login page", + "login": "login is the name of a secret that specifies a go template to use to render the login page. The key \"login.html\" is used to locate the template data. If specified and the secret or expected key is not found, the default login page is used. If the specified template is not valid, the default login page is used. If unspecified, the default login page is used. The namespace for this secret is openshift-config.", + "providerSelection": "providerSelection is the name of a secret that specifies a go template to use to render the provider selection page. The key \"providers.html\" is used to locate the template data. If specified and the secret or expected key is not found, the default provider selection page is used. If the specified template is not valid, the default provider selection page is used. If unspecified, the default provider selection page is used. The namespace for this secret is openshift-config.", + "error": "error is the name of a secret that specifies a go template to use to render error pages during the authentication or grant flow. The key \"errors.html\" is used to locate the template data. If specified and the secret or expected key is not found, the default error page is used. If the specified template is not valid, the default error page is used. If unspecified, the default error page is used. The namespace for this secret is openshift-config.", +} + +func (OAuthTemplates) SwaggerDoc() map[string]string { + return map_OAuthTemplates +} + +var map_OpenIDClaims = map[string]string{ + "": "OpenIDClaims contains a list of OpenID claims to use when authenticating with an OpenID identity provider", + "preferredUsername": "preferredUsername is the list of claims whose values should be used as the preferred username. If unspecified, the preferred username is determined from the value of the sub claim", + "name": "name is the list of claims whose values should be used as the display name. Optional. If unspecified, no display name is set for the identity", + "email": "email is the list of claims whose values should be used as the email address. Optional. If unspecified, no email is set for the identity", +} + +func (OpenIDClaims) SwaggerDoc() map[string]string { + return map_OpenIDClaims +} + +var map_OpenIDIdentityProvider = map[string]string{ + "": "OpenIDIdentityProvider provides identities for users authenticating using OpenID credentials", + "clientID": "clientID is the oauth client ID", + "clientSecret": "clientSecret is a required reference to the secret by name containing the oauth client secret. The key \"clientSecret\" is used to locate the data. If the secret or expected key is not found, the identity provider is not honored. The namespace for this secret is openshift-config.", + "ca": "ca is an optional reference to a config map by name containing the PEM-encoded CA bundle. It is used as a trust anchor to validate the TLS certificate presented by the remote server. The key \"ca.crt\" is used to locate the data. If specified and the config map or expected key is not found, the identity provider is not honored. If the specified ca data is not valid, the identity provider is not honored. If empty, the default system roots are used. The namespace for this config map is openshift-config.", + "extraScopes": "extraScopes are any scopes to request in addition to the standard \"openid\" scope.", + "extraAuthorizeParameters": "extraAuthorizeParameters are any custom parameters to add to the authorize request.", + "issuer": "issuer is the URL that the OpenID Provider asserts as its Issuer Identifier. It must use the https scheme with no query or fragment component.", + "claims": "claims mappings", +} + +func (OpenIDIdentityProvider) SwaggerDoc() map[string]string { + return map_OpenIDIdentityProvider +} + +var map_RequestHeaderIdentityProvider = map[string]string{ + "": "RequestHeaderIdentityProvider provides identities for users authenticating using request header credentials", + "loginURL": "loginURL is a URL to redirect unauthenticated /authorize requests to Unauthenticated requests from OAuth clients which expect interactive logins will be redirected here ${url} is replaced with the current URL, escaped to be safe in a query parameter\n https://www.example.com/sso-login?then=${url}\n${query} is replaced with the current query string\n https://www.example.com/auth-proxy/oauth/authorize?${query}\nRequired when login is set to true.", + "challengeURL": "challengeURL is a URL to redirect unauthenticated /authorize requests to Unauthenticated requests from OAuth clients which expect WWW-Authenticate challenges will be redirected here. ${url} is replaced with the current URL, escaped to be safe in a query parameter\n https://www.example.com/sso-login?then=${url}\n${query} is replaced with the current query string\n https://www.example.com/auth-proxy/oauth/authorize?${query}\nRequired when challenge is set to true.", + "ca": "ca is a required reference to a config map by name containing the PEM-encoded CA bundle. It is used as a trust anchor to validate the TLS certificate presented by the remote server. Specifically, it allows verification of incoming requests to prevent header spoofing. The key \"ca.crt\" is used to locate the data. If the config map or expected key is not found, the identity provider is not honored. If the specified ca data is not valid, the identity provider is not honored. The namespace for this config map is openshift-config.", + "clientCommonNames": "clientCommonNames is an optional list of common names to require a match from. If empty, any client certificate validated against the clientCA bundle is considered authoritative.", + "headers": "headers is the set of headers to check for identity information", + "preferredUsernameHeaders": "preferredUsernameHeaders is the set of headers to check for the preferred username", + "nameHeaders": "nameHeaders is the set of headers to check for the display name", + "emailHeaders": "emailHeaders is the set of headers to check for the email address", +} + +func (RequestHeaderIdentityProvider) SwaggerDoc() map[string]string { + return map_RequestHeaderIdentityProvider +} + +var map_TokenConfig = map[string]string{ + "": "TokenConfig holds the necessary configuration options for authorization and access tokens", + "accessTokenMaxAgeSeconds": "accessTokenMaxAgeSeconds defines the maximum age of access tokens", + "accessTokenInactivityTimeoutSeconds": "accessTokenInactivityTimeoutSeconds - DEPRECATED: setting this field has no effect.", + "accessTokenInactivityTimeout": "accessTokenInactivityTimeout defines the token inactivity timeout for tokens granted by any client. The value represents the maximum amount of time that can occur between consecutive uses of the token. Tokens become invalid if they are not used within this temporal window. The user will need to acquire a new token to regain access once a token times out. Takes valid time duration string such as \"5m\", \"1.5h\" or \"2h45m\". The minimum allowed value for duration is 300s (5 minutes). If the timeout is configured per client, then that value takes precedence. If the timeout value is not specified and the client does not override the value, then tokens are valid until their lifetime.", +} + +func (TokenConfig) SwaggerDoc() map[string]string { + return map_TokenConfig +} + +var map_HubSource = map[string]string{ + "": "HubSource is used to specify the hub source and its configuration", + "name": "name is the name of one of the default hub sources", + "disabled": "disabled is used to disable a default hub source on cluster", +} + +func (HubSource) SwaggerDoc() map[string]string { + return map_HubSource +} + +var map_HubSourceStatus = map[string]string{ + "": "HubSourceStatus is used to reflect the current state of applying the configuration to a default source", + "status": "status indicates success or failure in applying the configuration", + "message": "message provides more information regarding failures", +} + +func (HubSourceStatus) SwaggerDoc() map[string]string { + return map_HubSourceStatus +} + +var map_OperatorHub = map[string]string{ + "": "OperatorHub is the Schema for the operatorhubs API. It can be used to change the state of the default hub sources for OperatorHub on the cluster from enabled to disabled and vice versa.", +} + +func (OperatorHub) SwaggerDoc() map[string]string { + return map_OperatorHub +} + +var map_OperatorHubList = map[string]string{ + "": "OperatorHubList contains a list of OperatorHub", +} + +func (OperatorHubList) SwaggerDoc() map[string]string { + return map_OperatorHubList +} + +var map_OperatorHubSpec = map[string]string{ + "": "OperatorHubSpec defines the desired state of OperatorHub", + "disableAllDefaultSources": "disableAllDefaultSources allows you to disable all the default hub sources. If this is true, a specific entry in sources can be used to enable a default source. If this is false, a specific entry in sources can be used to disable or enable a default source.", + "sources": "sources is the list of default hub sources and their configuration. If the list is empty, it implies that the default hub sources are enabled on the cluster unless disableAllDefaultSources is true. If disableAllDefaultSources is true and sources is not empty, the configuration present in sources will take precedence. The list of default hub sources and their current state will always be reflected in the status block.", +} + +func (OperatorHubSpec) SwaggerDoc() map[string]string { + return map_OperatorHubSpec +} + +var map_OperatorHubStatus = map[string]string{ + "": "OperatorHubStatus defines the observed state of OperatorHub. The current state of the default hub sources will always be reflected here.", + "sources": "sources encapsulates the result of applying the configuration for each hub source", +} + +func (OperatorHubStatus) SwaggerDoc() map[string]string { + return map_OperatorHubStatus +} + +var map_Project = map[string]string{ + "": "Project holds cluster-wide information about Project. The canonical name is `cluster`", + "spec": "spec holds user settable values for configuration", + "status": "status holds observed values from the cluster. They may not be overridden.", +} + +func (Project) SwaggerDoc() map[string]string { + return map_Project +} + +var map_ProjectSpec = map[string]string{ + "": "ProjectSpec holds the project creation configuration.", + "projectRequestMessage": "projectRequestMessage is the string presented to a user if they are unable to request a project via the projectrequest api endpoint", + "projectRequestTemplate": "projectRequestTemplate is the template to use for creating projects in response to projectrequest. This must point to a template in 'openshift-config' namespace. It is optional. If it is not specified, a default template is used.", +} + +func (ProjectSpec) SwaggerDoc() map[string]string { + return map_ProjectSpec +} + +var map_TemplateReference = map[string]string{ + "": "TemplateReference references a template in a specific namespace. The namespace must be specified at the point of use.", + "name": "name is the metadata.name of the referenced project request template", +} + +func (TemplateReference) SwaggerDoc() map[string]string { + return map_TemplateReference +} + +var map_Proxy = map[string]string{ + "": "Proxy holds cluster-wide information on how to configure default proxies for the cluster. The canonical name is `cluster`", + "spec": "Spec holds user-settable values for the proxy configuration", + "status": "status holds observed values from the cluster. They may not be overridden.", +} + +func (Proxy) SwaggerDoc() map[string]string { + return map_Proxy +} + +var map_ProxySpec = map[string]string{ + "": "ProxySpec contains cluster proxy creation configuration.", + "httpProxy": "httpProxy is the URL of the proxy for HTTP requests. Empty means unset and will not result in an env var.", + "httpsProxy": "httpsProxy is the URL of the proxy for HTTPS requests. Empty means unset and will not result in an env var.", + "noProxy": "noProxy is a comma-separated list of hostnames and/or CIDRs for which the proxy should not be used. Empty means unset and will not result in an env var.", + "readinessEndpoints": "readinessEndpoints is a list of endpoints used to verify readiness of the proxy.", + "trustedCA": "trustedCA is a reference to a ConfigMap containing a CA certificate bundle. The trustedCA field should only be consumed by a proxy validator. The validator is responsible for reading the certificate bundle from the required key \"ca-bundle.crt\", merging it with the system default trust bundle, and writing the merged trust bundle to a ConfigMap named \"trusted-ca-bundle\" in the \"openshift-config-managed\" namespace. Clients that expect to make proxy connections must use the trusted-ca-bundle for all HTTPS requests to the proxy, and may use the trusted-ca-bundle for non-proxy HTTPS requests as well.\n\nThe namespace for the ConfigMap referenced by trustedCA is \"openshift-config\". Here is an example ConfigMap (in yaml):\n\napiVersion: v1 kind: ConfigMap metadata:\n name: user-ca-bundle\n namespace: openshift-config\n data:\n ca-bundle.crt: |", +} + +func (ProxySpec) SwaggerDoc() map[string]string { + return map_ProxySpec +} + +var map_ProxyStatus = map[string]string{ + "": "ProxyStatus shows current known state of the cluster proxy.", + "httpProxy": "httpProxy is the URL of the proxy for HTTP requests.", + "httpsProxy": "httpsProxy is the URL of the proxy for HTTPS requests.", + "noProxy": "noProxy is a comma-separated list of hostnames and/or CIDRs for which the proxy should not be used.", +} + +func (ProxyStatus) SwaggerDoc() map[string]string { + return map_ProxyStatus +} + +var map_Scheduler = map[string]string{ + "": "Scheduler holds cluster-wide config information to run the Kubernetes Scheduler and influence its placement decisions. The canonical name for this config is `cluster`.", + "spec": "spec holds user settable values for configuration", + "status": "status holds observed values from the cluster. They may not be overridden.", +} + +func (Scheduler) SwaggerDoc() map[string]string { + return map_Scheduler +} + +var map_SchedulerSpec = map[string]string{ + "policy": "policy is a reference to a ConfigMap containing scheduler policy which has user specified predicates and priorities. If this ConfigMap is not available scheduler will default to use DefaultAlgorithmProvider. The namespace for this configmap is openshift-config.", + "defaultNodeSelector": "defaultNodeSelector helps set the cluster-wide default node selector to restrict pod placement to specific nodes. This is applied to the pods created in all namespaces and creates an intersection with any existing nodeSelectors already set on a pod, additionally constraining that pod's selector. For example, defaultNodeSelector: \"type=user-node,region=east\" would set nodeSelector field in pod spec to \"type=user-node,region=east\" to all pods created in all namespaces. Namespaces having project-wide node selectors won't be impacted even if this field is set. This adds an annotation section to the namespace. For example, if a new namespace is created with node-selector='type=user-node,region=east', the annotation openshift.io/node-selector: type=user-node,region=east gets added to the project. When the openshift.io/node-selector annotation is set on the project the value is used in preference to the value we are setting for defaultNodeSelector field. For instance, openshift.io/node-selector: \"type=user-node,region=west\" means that the default of \"type=user-node,region=east\" set in defaultNodeSelector would not be applied.", + "mastersSchedulable": "MastersSchedulable allows masters nodes to be schedulable. When this flag is turned on, all the master nodes in the cluster will be made schedulable, so that workload pods can run on them. The default value for this field is false, meaning none of the master nodes are schedulable. Important Note: Once the workload pods start running on the master nodes, extreme care must be taken to ensure that cluster-critical control plane components are not impacted. Please turn on this field after doing due diligence.", +} + +func (SchedulerSpec) SwaggerDoc() map[string]string { + return map_SchedulerSpec +} + +var map_CustomTLSProfile = map[string]string{ + "": "CustomTLSProfile is a user-defined TLS security profile. Be extremely careful using a custom TLS profile as invalid configurations can be catastrophic.", +} + +func (CustomTLSProfile) SwaggerDoc() map[string]string { + return map_CustomTLSProfile +} + +var map_IntermediateTLSProfile = map[string]string{ + "": "IntermediateTLSProfile is a TLS security profile based on: https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29", +} + +func (IntermediateTLSProfile) SwaggerDoc() map[string]string { + return map_IntermediateTLSProfile +} + +var map_ModernTLSProfile = map[string]string{ + "": "ModernTLSProfile is a TLS security profile based on: https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility", +} + +func (ModernTLSProfile) SwaggerDoc() map[string]string { + return map_ModernTLSProfile +} + +var map_OldTLSProfile = map[string]string{ + "": "OldTLSProfile is a TLS security profile based on: https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility", +} + +func (OldTLSProfile) SwaggerDoc() map[string]string { + return map_OldTLSProfile +} + +var map_TLSProfileSpec = map[string]string{ + "": "TLSProfileSpec is the desired behavior of a TLSSecurityProfile.", + "ciphers": "ciphers is used to specify the cipher algorithms that are negotiated during the TLS handshake. Operators may remove entries their operands do not support. For example, to use DES-CBC3-SHA (yaml):\n\n ciphers:\n - DES-CBC3-SHA", + "minTLSVersion": "minTLSVersion is used to specify the minimal version of the TLS protocol that is negotiated during the TLS handshake. For example, to use TLS versions 1.1, 1.2 and 1.3 (yaml):\n\n minTLSVersion: TLSv1.1\n\nNOTE: currently the highest minTLSVersion allowed is VersionTLS12", +} + +func (TLSProfileSpec) SwaggerDoc() map[string]string { + return map_TLSProfileSpec +} + +var map_TLSSecurityProfile = map[string]string{ + "": "TLSSecurityProfile defines the schema for a TLS security profile. This object is used by operators to apply TLS security settings to operands.", + "type": "type is one of Old, Intermediate, Modern or Custom. Custom provides the ability to specify individual TLS security profile parameters. Old, Intermediate and Modern are TLS security profiles based on:\n\nhttps://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations\n\nThe profiles are intent based, so they may change over time as new ciphers are developed and existing ciphers are found to be insecure. Depending on precisely which ciphers are available to a process, the list may be reduced.\n\nNote that the Modern profile is currently not supported because it is not yet well adopted by common software libraries.", + "old": "old is a TLS security profile based on:\n\nhttps://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility\n\nand looks like this (yaml):\n\n ciphers:\n - TLS_AES_128_GCM_SHA256\n - TLS_AES_256_GCM_SHA384\n - TLS_CHACHA20_POLY1305_SHA256\n - ECDHE-ECDSA-AES128-GCM-SHA256\n - ECDHE-RSA-AES128-GCM-SHA256\n - ECDHE-ECDSA-AES256-GCM-SHA384\n - ECDHE-RSA-AES256-GCM-SHA384\n - ECDHE-ECDSA-CHACHA20-POLY1305\n - ECDHE-RSA-CHACHA20-POLY1305\n - DHE-RSA-AES128-GCM-SHA256\n - DHE-RSA-AES256-GCM-SHA384\n - DHE-RSA-CHACHA20-POLY1305\n - ECDHE-ECDSA-AES128-SHA256\n - ECDHE-RSA-AES128-SHA256\n - ECDHE-ECDSA-AES128-SHA\n - ECDHE-RSA-AES128-SHA\n - ECDHE-ECDSA-AES256-SHA384\n - ECDHE-RSA-AES256-SHA384\n - ECDHE-ECDSA-AES256-SHA\n - ECDHE-RSA-AES256-SHA\n - DHE-RSA-AES128-SHA256\n - DHE-RSA-AES256-SHA256\n - AES128-GCM-SHA256\n - AES256-GCM-SHA384\n - AES128-SHA256\n - AES256-SHA256\n - AES128-SHA\n - AES256-SHA\n - DES-CBC3-SHA\n minTLSVersion: TLSv1.0", + "intermediate": "intermediate is a TLS security profile based on:\n\nhttps://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28recommended.29\n\nand looks like this (yaml):\n\n ciphers:\n - TLS_AES_128_GCM_SHA256\n - TLS_AES_256_GCM_SHA384\n - TLS_CHACHA20_POLY1305_SHA256\n - ECDHE-ECDSA-AES128-GCM-SHA256\n - ECDHE-RSA-AES128-GCM-SHA256\n - ECDHE-ECDSA-AES256-GCM-SHA384\n - ECDHE-RSA-AES256-GCM-SHA384\n - ECDHE-ECDSA-CHACHA20-POLY1305\n - ECDHE-RSA-CHACHA20-POLY1305\n - DHE-RSA-AES128-GCM-SHA256\n - DHE-RSA-AES256-GCM-SHA384\n minTLSVersion: TLSv1.2", + "modern": "modern is a TLS security profile based on:\n\nhttps://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility\n\nand looks like this (yaml):\n\n ciphers:\n - TLS_AES_128_GCM_SHA256\n - TLS_AES_256_GCM_SHA384\n - TLS_CHACHA20_POLY1305_SHA256\n minTLSVersion: TLSv1.3\n\nNOTE: Currently unsupported.", + "custom": "custom is a user-defined TLS security profile. Be extremely careful using a custom profile as invalid configurations can be catastrophic. An example custom profile looks like this:\n\n ciphers:\n - ECDHE-ECDSA-CHACHA20-POLY1305\n - ECDHE-RSA-CHACHA20-POLY1305\n - ECDHE-RSA-AES128-GCM-SHA256\n - ECDHE-ECDSA-AES128-GCM-SHA256\n minTLSVersion: TLSv1.1", +} + +func (TLSSecurityProfile) SwaggerDoc() map[string]string { + return map_TLSSecurityProfile +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/image/docker10/doc.go b/vendor/github.com/openshift/api/image/docker10/doc.go new file mode 100644 index 0000000000000..cc194d24db2ca --- /dev/null +++ b/vendor/github.com/openshift/api/image/docker10/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package docker10 is the docker10 version of the API. +package docker10 diff --git a/vendor/github.com/openshift/api/image/docker10/dockertypes.go b/vendor/github.com/openshift/api/image/docker10/dockertypes.go new file mode 100644 index 0000000000000..a985553db407d --- /dev/null +++ b/vendor/github.com/openshift/api/image/docker10/dockertypes.go @@ -0,0 +1,56 @@ +package docker10 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DockerImage is the type representing a container image and its various properties when +// retrieved from the Docker client API. +type DockerImage struct { + metav1.TypeMeta `json:",inline"` + + ID string `json:"Id"` + Parent string `json:"Parent,omitempty"` + Comment string `json:"Comment,omitempty"` + Created metav1.Time `json:"Created,omitempty"` + Container string `json:"Container,omitempty"` + ContainerConfig DockerConfig `json:"ContainerConfig,omitempty"` + DockerVersion string `json:"DockerVersion,omitempty"` + Author string `json:"Author,omitempty"` + Config *DockerConfig `json:"Config,omitempty"` + Architecture string `json:"Architecture,omitempty"` + Size int64 `json:"Size,omitempty"` +} + +// DockerConfig is the list of configuration options used when creating a container. +type DockerConfig struct { + Hostname string `json:"Hostname,omitempty"` + Domainname string `json:"Domainname,omitempty"` + User string `json:"User,omitempty"` + Memory int64 `json:"Memory,omitempty"` + MemorySwap int64 `json:"MemorySwap,omitempty"` + CPUShares int64 `json:"CpuShares,omitempty"` + CPUSet string `json:"Cpuset,omitempty"` + AttachStdin bool `json:"AttachStdin,omitempty"` + AttachStdout bool `json:"AttachStdout,omitempty"` + AttachStderr bool `json:"AttachStderr,omitempty"` + PortSpecs []string `json:"PortSpecs,omitempty"` + ExposedPorts map[string]struct{} `json:"ExposedPorts,omitempty"` + Tty bool `json:"Tty,omitempty"` + OpenStdin bool `json:"OpenStdin,omitempty"` + StdinOnce bool `json:"StdinOnce,omitempty"` + Env []string `json:"Env,omitempty"` + Cmd []string `json:"Cmd,omitempty"` + DNS []string `json:"Dns,omitempty"` // For Docker API v1.9 and below only + Image string `json:"Image,omitempty"` + Volumes map[string]struct{} `json:"Volumes,omitempty"` + VolumesFrom string `json:"VolumesFrom,omitempty"` + WorkingDir string `json:"WorkingDir,omitempty"` + Entrypoint []string `json:"Entrypoint,omitempty"` + NetworkDisabled bool `json:"NetworkDisabled,omitempty"` + SecurityOpts []string `json:"SecurityOpts,omitempty"` + OnBuild []string `json:"OnBuild,omitempty"` + Labels map[string]string `json:"Labels,omitempty"` +} diff --git a/vendor/github.com/openshift/api/image/docker10/register.go b/vendor/github.com/openshift/api/image/docker10/register.go new file mode 100644 index 0000000000000..31d616a06c0c9 --- /dev/null +++ b/vendor/github.com/openshift/api/image/docker10/register.go @@ -0,0 +1,38 @@ +package docker10 + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +const ( + GroupName = "image.openshift.io" + LegacyGroupName = "" +) + +// SchemeGroupVersion is group version used to register these objects +var ( + SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "1.0"} + LegacySchemeGroupVersion = schema.GroupVersion{Group: LegacyGroupName, Version: "1.0"} + + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + LegacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes) + + AddToScheme = SchemeBuilder.AddToScheme + AddToSchemeInCoreGroup = LegacySchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &DockerImage{}, + ) + return nil +} + +func addLegacyKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(LegacySchemeGroupVersion, + &DockerImage{}, + ) + return nil +} diff --git a/vendor/github.com/openshift/api/image/docker10/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/image/docker10/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..b59f75ac21742 --- /dev/null +++ b/vendor/github.com/openshift/api/image/docker10/zz_generated.deepcopy.go @@ -0,0 +1,113 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package docker10 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DockerConfig) DeepCopyInto(out *DockerConfig) { + *out = *in + if in.PortSpecs != nil { + in, out := &in.PortSpecs, &out.PortSpecs + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ExposedPorts != nil { + in, out := &in.ExposedPorts, &out.ExposedPorts + *out = make(map[string]struct{}, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Cmd != nil { + in, out := &in.Cmd, &out.Cmd + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.DNS != nil { + in, out := &in.DNS, &out.DNS + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make(map[string]struct{}, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Entrypoint != nil { + in, out := &in.Entrypoint, &out.Entrypoint + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.SecurityOpts != nil { + in, out := &in.SecurityOpts, &out.SecurityOpts + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.OnBuild != nil { + in, out := &in.OnBuild, &out.OnBuild + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DockerConfig. +func (in *DockerConfig) DeepCopy() *DockerConfig { + if in == nil { + return nil + } + out := new(DockerConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DockerImage) DeepCopyInto(out *DockerImage) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Created.DeepCopyInto(&out.Created) + in.ContainerConfig.DeepCopyInto(&out.ContainerConfig) + if in.Config != nil { + in, out := &in.Config, &out.Config + *out = new(DockerConfig) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DockerImage. +func (in *DockerImage) DeepCopy() *DockerImage { + if in == nil { + return nil + } + out := new(DockerImage) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DockerImage) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/vendor/github.com/openshift/api/image/dockerpre012/deepcopy.go b/vendor/github.com/openshift/api/image/dockerpre012/deepcopy.go new file mode 100644 index 0000000000000..ddeb4403c4d9f --- /dev/null +++ b/vendor/github.com/openshift/api/image/dockerpre012/deepcopy.go @@ -0,0 +1,18 @@ +package dockerpre012 + +// DeepCopyInto is manually built to copy the (probably bugged) time.Time +func (in *ImagePre012) DeepCopyInto(out *ImagePre012) { + *out = *in + out.Created = in.Created + in.ContainerConfig.DeepCopyInto(&out.ContainerConfig) + if in.Config != nil { + in, out := &in.Config, &out.Config + if *in == nil { + *out = nil + } else { + *out = new(Config) + (*in).DeepCopyInto(*out) + } + } + return +} diff --git a/vendor/github.com/openshift/api/image/dockerpre012/doc.go b/vendor/github.com/openshift/api/image/dockerpre012/doc.go new file mode 100644 index 0000000000000..e4a56260f10b9 --- /dev/null +++ b/vendor/github.com/openshift/api/image/dockerpre012/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package dockerpre012 is the dockerpre012 version of the API. +package dockerpre012 diff --git a/vendor/github.com/openshift/api/image/dockerpre012/dockertypes.go b/vendor/github.com/openshift/api/image/dockerpre012/dockertypes.go new file mode 100644 index 0000000000000..685e0b68c5d90 --- /dev/null +++ b/vendor/github.com/openshift/api/image/dockerpre012/dockertypes.go @@ -0,0 +1,136 @@ +package dockerpre012 + +import ( + "time" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DockerImage is for earlier versions of the Docker API (pre-012 to be specific). It is also the +// version of metadata that the container image registry uses to persist metadata. +type DockerImage struct { + metav1.TypeMeta `json:",inline"` + + ID string `json:"id"` + Parent string `json:"parent,omitempty"` + Comment string `json:"comment,omitempty"` + Created metav1.Time `json:"created"` + Container string `json:"container,omitempty"` + ContainerConfig DockerConfig `json:"container_config,omitempty"` + DockerVersion string `json:"docker_version,omitempty"` + Author string `json:"author,omitempty"` + Config *DockerConfig `json:"config,omitempty"` + Architecture string `json:"architecture,omitempty"` + Size int64 `json:"size,omitempty"` +} + +// DockerConfig is the list of configuration options used when creating a container. +type DockerConfig struct { + Hostname string `json:"Hostname,omitempty"` + Domainname string `json:"Domainname,omitempty"` + User string `json:"User,omitempty"` + Memory int64 `json:"Memory,omitempty"` + MemorySwap int64 `json:"MemorySwap,omitempty"` + CPUShares int64 `json:"CpuShares,omitempty"` + CPUSet string `json:"Cpuset,omitempty"` + AttachStdin bool `json:"AttachStdin,omitempty"` + AttachStdout bool `json:"AttachStdout,omitempty"` + AttachStderr bool `json:"AttachStderr,omitempty"` + PortSpecs []string `json:"PortSpecs,omitempty"` + ExposedPorts map[string]struct{} `json:"ExposedPorts,omitempty"` + Tty bool `json:"Tty,omitempty"` + OpenStdin bool `json:"OpenStdin,omitempty"` + StdinOnce bool `json:"StdinOnce,omitempty"` + Env []string `json:"Env,omitempty"` + Cmd []string `json:"Cmd,omitempty"` + DNS []string `json:"Dns,omitempty"` // For Docker API v1.9 and below only + Image string `json:"Image,omitempty"` + Volumes map[string]struct{} `json:"Volumes,omitempty"` + VolumesFrom string `json:"VolumesFrom,omitempty"` + WorkingDir string `json:"WorkingDir,omitempty"` + Entrypoint []string `json:"Entrypoint,omitempty"` + NetworkDisabled bool `json:"NetworkDisabled,omitempty"` + SecurityOpts []string `json:"SecurityOpts,omitempty"` + OnBuild []string `json:"OnBuild,omitempty"` + // This field is not supported in pre012 and will always be empty. + Labels map[string]string `json:"Labels,omitempty"` +} + +// ImagePre012 serves the same purpose as the Image type except that it is for +// earlier versions of the Docker API (pre-012 to be specific) +// Exists only for legacy conversion, copy of type from fsouza/go-dockerclient +type ImagePre012 struct { + ID string `json:"id"` + Parent string `json:"parent,omitempty"` + Comment string `json:"comment,omitempty"` + Created time.Time `json:"created"` + Container string `json:"container,omitempty"` + ContainerConfig Config `json:"container_config,omitempty"` + DockerVersion string `json:"docker_version,omitempty"` + Author string `json:"author,omitempty"` + Config *Config `json:"config,omitempty"` + Architecture string `json:"architecture,omitempty"` + Size int64 `json:"size,omitempty"` +} + +// Config is the list of configuration options used when creating a container. +// Config does not contain the options that are specific to starting a container on a +// given host. Those are contained in HostConfig +// Exists only for legacy conversion, copy of type from fsouza/go-dockerclient +type Config struct { + Hostname string `json:"Hostname,omitempty" yaml:"Hostname,omitempty"` + Domainname string `json:"Domainname,omitempty" yaml:"Domainname,omitempty"` + User string `json:"User,omitempty" yaml:"User,omitempty"` + Memory int64 `json:"Memory,omitempty" yaml:"Memory,omitempty"` + MemorySwap int64 `json:"MemorySwap,omitempty" yaml:"MemorySwap,omitempty"` + MemoryReservation int64 `json:"MemoryReservation,omitempty" yaml:"MemoryReservation,omitempty"` + KernelMemory int64 `json:"KernelMemory,omitempty" yaml:"KernelMemory,omitempty"` + PidsLimit int64 `json:"PidsLimit,omitempty" yaml:"PidsLimit,omitempty"` + CPUShares int64 `json:"CpuShares,omitempty" yaml:"CpuShares,omitempty"` + CPUSet string `json:"Cpuset,omitempty" yaml:"Cpuset,omitempty"` + AttachStdin bool `json:"AttachStdin,omitempty" yaml:"AttachStdin,omitempty"` + AttachStdout bool `json:"AttachStdout,omitempty" yaml:"AttachStdout,omitempty"` + AttachStderr bool `json:"AttachStderr,omitempty" yaml:"AttachStderr,omitempty"` + PortSpecs []string `json:"PortSpecs,omitempty" yaml:"PortSpecs,omitempty"` + ExposedPorts map[Port]struct{} `json:"ExposedPorts,omitempty" yaml:"ExposedPorts,omitempty"` + StopSignal string `json:"StopSignal,omitempty" yaml:"StopSignal,omitempty"` + Tty bool `json:"Tty,omitempty" yaml:"Tty,omitempty"` + OpenStdin bool `json:"OpenStdin,omitempty" yaml:"OpenStdin,omitempty"` + StdinOnce bool `json:"StdinOnce,omitempty" yaml:"StdinOnce,omitempty"` + Env []string `json:"Env,omitempty" yaml:"Env,omitempty"` + Cmd []string `json:"Cmd" yaml:"Cmd"` + DNS []string `json:"Dns,omitempty" yaml:"Dns,omitempty"` // For Docker API v1.9 and below only + Image string `json:"Image,omitempty" yaml:"Image,omitempty"` + Volumes map[string]struct{} `json:"Volumes,omitempty" yaml:"Volumes,omitempty"` + VolumeDriver string `json:"VolumeDriver,omitempty" yaml:"VolumeDriver,omitempty"` + VolumesFrom string `json:"VolumesFrom,omitempty" yaml:"VolumesFrom,omitempty"` + WorkingDir string `json:"WorkingDir,omitempty" yaml:"WorkingDir,omitempty"` + MacAddress string `json:"MacAddress,omitempty" yaml:"MacAddress,omitempty"` + Entrypoint []string `json:"Entrypoint" yaml:"Entrypoint"` + NetworkDisabled bool `json:"NetworkDisabled,omitempty" yaml:"NetworkDisabled,omitempty"` + SecurityOpts []string `json:"SecurityOpts,omitempty" yaml:"SecurityOpts,omitempty"` + OnBuild []string `json:"OnBuild,omitempty" yaml:"OnBuild,omitempty"` + Mounts []Mount `json:"Mounts,omitempty" yaml:"Mounts,omitempty"` + Labels map[string]string `json:"Labels,omitempty" yaml:"Labels,omitempty"` +} + +// Mount represents a mount point in the container. +// +// It has been added in the version 1.20 of the Docker API, available since +// Docker 1.8. +// Exists only for legacy conversion, copy of type from fsouza/go-dockerclient +type Mount struct { + Name string + Source string + Destination string + Driver string + Mode string + RW bool +} + +// Port represents the port number and the protocol, in the form +// /. For example: 80/tcp. +// Exists only for legacy conversion, copy of type from fsouza/go-dockerclient +type Port string diff --git a/vendor/github.com/openshift/api/image/dockerpre012/register.go b/vendor/github.com/openshift/api/image/dockerpre012/register.go new file mode 100644 index 0000000000000..469806dbe7447 --- /dev/null +++ b/vendor/github.com/openshift/api/image/dockerpre012/register.go @@ -0,0 +1,37 @@ +package dockerpre012 + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +const ( + GroupName = "image.openshift.io" + LegacyGroupName = "" +) + +var ( + SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "pre012"} + LegacySchemeGroupVersion = schema.GroupVersion{Group: LegacyGroupName, Version: "pre012"} + + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme + + LegacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes) + AddToSchemeInCoreGroup = LegacySchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &DockerImage{}, + ) + return nil +} + +func addLegacyKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(LegacySchemeGroupVersion, + &DockerImage{}, + ) + return nil +} diff --git a/vendor/github.com/openshift/api/image/dockerpre012/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/image/dockerpre012/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..d9042704ad8e0 --- /dev/null +++ b/vendor/github.com/openshift/api/image/dockerpre012/zz_generated.deepcopy.go @@ -0,0 +1,216 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package dockerpre012 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Config) DeepCopyInto(out *Config) { + *out = *in + if in.PortSpecs != nil { + in, out := &in.PortSpecs, &out.PortSpecs + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ExposedPorts != nil { + in, out := &in.ExposedPorts, &out.ExposedPorts + *out = make(map[Port]struct{}, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Cmd != nil { + in, out := &in.Cmd, &out.Cmd + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.DNS != nil { + in, out := &in.DNS, &out.DNS + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make(map[string]struct{}, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Entrypoint != nil { + in, out := &in.Entrypoint, &out.Entrypoint + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.SecurityOpts != nil { + in, out := &in.SecurityOpts, &out.SecurityOpts + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.OnBuild != nil { + in, out := &in.OnBuild, &out.OnBuild + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Mounts != nil { + in, out := &in.Mounts, &out.Mounts + *out = make([]Mount, len(*in)) + copy(*out, *in) + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Config. +func (in *Config) DeepCopy() *Config { + if in == nil { + return nil + } + out := new(Config) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DockerConfig) DeepCopyInto(out *DockerConfig) { + *out = *in + if in.PortSpecs != nil { + in, out := &in.PortSpecs, &out.PortSpecs + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ExposedPorts != nil { + in, out := &in.ExposedPorts, &out.ExposedPorts + *out = make(map[string]struct{}, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Cmd != nil { + in, out := &in.Cmd, &out.Cmd + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.DNS != nil { + in, out := &in.DNS, &out.DNS + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make(map[string]struct{}, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Entrypoint != nil { + in, out := &in.Entrypoint, &out.Entrypoint + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.SecurityOpts != nil { + in, out := &in.SecurityOpts, &out.SecurityOpts + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.OnBuild != nil { + in, out := &in.OnBuild, &out.OnBuild + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DockerConfig. +func (in *DockerConfig) DeepCopy() *DockerConfig { + if in == nil { + return nil + } + out := new(DockerConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DockerImage) DeepCopyInto(out *DockerImage) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Created.DeepCopyInto(&out.Created) + in.ContainerConfig.DeepCopyInto(&out.ContainerConfig) + if in.Config != nil { + in, out := &in.Config, &out.Config + *out = new(DockerConfig) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DockerImage. +func (in *DockerImage) DeepCopy() *DockerImage { + if in == nil { + return nil + } + out := new(DockerImage) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DockerImage) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImagePre012. +func (in *ImagePre012) DeepCopy() *ImagePre012 { + if in == nil { + return nil + } + out := new(ImagePre012) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Mount) DeepCopyInto(out *Mount) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Mount. +func (in *Mount) DeepCopy() *Mount { + if in == nil { + return nil + } + out := new(Mount) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/image/v1/consts.go b/vendor/github.com/openshift/api/image/v1/consts.go new file mode 100644 index 0000000000000..11f57a44a3693 --- /dev/null +++ b/vendor/github.com/openshift/api/image/v1/consts.go @@ -0,0 +1,69 @@ +package v1 + +import corev1 "k8s.io/api/core/v1" + +const ( + // ManagedByOpenShiftAnnotation indicates that an image is managed by OpenShift's registry. + ManagedByOpenShiftAnnotation = "openshift.io/image.managed" + + // DockerImageRepositoryCheckAnnotation indicates that OpenShift has + // attempted to import tag and image information from an external Docker + // image repository. + DockerImageRepositoryCheckAnnotation = "openshift.io/image.dockerRepositoryCheck" + + // InsecureRepositoryAnnotation may be set true on an image stream to allow insecure access to pull content. + InsecureRepositoryAnnotation = "openshift.io/image.insecureRepository" + + // ExcludeImageSecretAnnotation indicates that a secret should not be returned by imagestream/secrets. + ExcludeImageSecretAnnotation = "openshift.io/image.excludeSecret" + + // DockerImageLayersOrderAnnotation describes layers order in the docker image. + DockerImageLayersOrderAnnotation = "image.openshift.io/dockerLayersOrder" + + // DockerImageLayersOrderAscending indicates that image layers are sorted in + // the order of their addition (from oldest to latest) + DockerImageLayersOrderAscending = "ascending" + + // DockerImageLayersOrderDescending indicates that layers are sorted in + // reversed order of their addition (from newest to oldest). + DockerImageLayersOrderDescending = "descending" + + // ImporterPreferArchAnnotation represents an architecture that should be + // selected if an image uses a manifest list and it should be + // downconverted. + ImporterPreferArchAnnotation = "importer.image.openshift.io/prefer-arch" + + // ImporterPreferOSAnnotation represents an operation system that should + // be selected if an image uses a manifest list and it should be + // downconverted. + ImporterPreferOSAnnotation = "importer.image.openshift.io/prefer-os" + + // ImageManifestBlobStoredAnnotation indicates that manifest and config blobs of image are stored in on + // storage of integrated Docker registry. + ImageManifestBlobStoredAnnotation = "image.openshift.io/manifestBlobStored" + + // DefaultImageTag is used when an image tag is needed and the configuration does not specify a tag to use. + DefaultImageTag = "latest" + + // ResourceImageStreams represents a number of image streams in a project. + ResourceImageStreams corev1.ResourceName = "openshift.io/imagestreams" + + // ResourceImageStreamImages represents a number of unique references to images in all image stream + // statuses of a project. + ResourceImageStreamImages corev1.ResourceName = "openshift.io/images" + + // ResourceImageStreamTags represents a number of unique references to images in all image stream specs + // of a project. + ResourceImageStreamTags corev1.ResourceName = "openshift.io/image-tags" + + // Limit that applies to images. Used with a max["storage"] LimitRangeItem to set + // the maximum size of an image. + LimitTypeImage corev1.LimitType = "openshift.io/Image" + + // Limit that applies to image streams. Used with a max[resource] LimitRangeItem to set the maximum number + // of resource. Where the resource is one of "openshift.io/images" and "openshift.io/image-tags". + LimitTypeImageStream corev1.LimitType = "openshift.io/ImageStream" + + // The supported type of image signature. + ImageSignatureTypeAtomicImageV1 string = "AtomicImageV1" +) diff --git a/vendor/github.com/openshift/api/image/v1/doc.go b/vendor/github.com/openshift/api/image/v1/doc.go new file mode 100644 index 0000000000000..e57d45bbf9440 --- /dev/null +++ b/vendor/github.com/openshift/api/image/v1/doc.go @@ -0,0 +1,8 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=github.com/openshift/origin/pkg/image/apis/image +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +groupName=image.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/image/v1/generated.pb.go b/vendor/github.com/openshift/api/image/v1/generated.pb.go new file mode 100644 index 0000000000000..1a6b9e69fe8c7 --- /dev/null +++ b/vendor/github.com/openshift/api/image/v1/generated.pb.go @@ -0,0 +1,10890 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: github.com/openshift/api/image/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v11 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *DockerImageReference) Reset() { *m = DockerImageReference{} } +func (*DockerImageReference) ProtoMessage() {} +func (*DockerImageReference) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{0} +} +func (m *DockerImageReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DockerImageReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *DockerImageReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_DockerImageReference.Merge(m, src) +} +func (m *DockerImageReference) XXX_Size() int { + return m.Size() +} +func (m *DockerImageReference) XXX_DiscardUnknown() { + xxx_messageInfo_DockerImageReference.DiscardUnknown(m) +} + +var xxx_messageInfo_DockerImageReference proto.InternalMessageInfo + +func (m *Image) Reset() { *m = Image{} } +func (*Image) ProtoMessage() {} +func (*Image) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{1} +} +func (m *Image) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Image) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Image) XXX_Merge(src proto.Message) { + xxx_messageInfo_Image.Merge(m, src) +} +func (m *Image) XXX_Size() int { + return m.Size() +} +func (m *Image) XXX_DiscardUnknown() { + xxx_messageInfo_Image.DiscardUnknown(m) +} + +var xxx_messageInfo_Image proto.InternalMessageInfo + +func (m *ImageBlobReferences) Reset() { *m = ImageBlobReferences{} } +func (*ImageBlobReferences) ProtoMessage() {} +func (*ImageBlobReferences) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{2} +} +func (m *ImageBlobReferences) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageBlobReferences) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageBlobReferences) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageBlobReferences.Merge(m, src) +} +func (m *ImageBlobReferences) XXX_Size() int { + return m.Size() +} +func (m *ImageBlobReferences) XXX_DiscardUnknown() { + xxx_messageInfo_ImageBlobReferences.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageBlobReferences proto.InternalMessageInfo + +func (m *ImageImportSpec) Reset() { *m = ImageImportSpec{} } +func (*ImageImportSpec) ProtoMessage() {} +func (*ImageImportSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{3} +} +func (m *ImageImportSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageImportSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageImportSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageImportSpec.Merge(m, src) +} +func (m *ImageImportSpec) XXX_Size() int { + return m.Size() +} +func (m *ImageImportSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ImageImportSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageImportSpec proto.InternalMessageInfo + +func (m *ImageImportStatus) Reset() { *m = ImageImportStatus{} } +func (*ImageImportStatus) ProtoMessage() {} +func (*ImageImportStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{4} +} +func (m *ImageImportStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageImportStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageImportStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageImportStatus.Merge(m, src) +} +func (m *ImageImportStatus) XXX_Size() int { + return m.Size() +} +func (m *ImageImportStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ImageImportStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageImportStatus proto.InternalMessageInfo + +func (m *ImageLayer) Reset() { *m = ImageLayer{} } +func (*ImageLayer) ProtoMessage() {} +func (*ImageLayer) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{5} +} +func (m *ImageLayer) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageLayer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageLayer) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageLayer.Merge(m, src) +} +func (m *ImageLayer) XXX_Size() int { + return m.Size() +} +func (m *ImageLayer) XXX_DiscardUnknown() { + xxx_messageInfo_ImageLayer.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageLayer proto.InternalMessageInfo + +func (m *ImageLayerData) Reset() { *m = ImageLayerData{} } +func (*ImageLayerData) ProtoMessage() {} +func (*ImageLayerData) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{6} +} +func (m *ImageLayerData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageLayerData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageLayerData) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageLayerData.Merge(m, src) +} +func (m *ImageLayerData) XXX_Size() int { + return m.Size() +} +func (m *ImageLayerData) XXX_DiscardUnknown() { + xxx_messageInfo_ImageLayerData.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageLayerData proto.InternalMessageInfo + +func (m *ImageList) Reset() { *m = ImageList{} } +func (*ImageList) ProtoMessage() {} +func (*ImageList) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{7} +} +func (m *ImageList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageList.Merge(m, src) +} +func (m *ImageList) XXX_Size() int { + return m.Size() +} +func (m *ImageList) XXX_DiscardUnknown() { + xxx_messageInfo_ImageList.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageList proto.InternalMessageInfo + +func (m *ImageLookupPolicy) Reset() { *m = ImageLookupPolicy{} } +func (*ImageLookupPolicy) ProtoMessage() {} +func (*ImageLookupPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{8} +} +func (m *ImageLookupPolicy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageLookupPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageLookupPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageLookupPolicy.Merge(m, src) +} +func (m *ImageLookupPolicy) XXX_Size() int { + return m.Size() +} +func (m *ImageLookupPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_ImageLookupPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageLookupPolicy proto.InternalMessageInfo + +func (m *ImageSignature) Reset() { *m = ImageSignature{} } +func (*ImageSignature) ProtoMessage() {} +func (*ImageSignature) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{9} +} +func (m *ImageSignature) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageSignature) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageSignature) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageSignature.Merge(m, src) +} +func (m *ImageSignature) XXX_Size() int { + return m.Size() +} +func (m *ImageSignature) XXX_DiscardUnknown() { + xxx_messageInfo_ImageSignature.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageSignature proto.InternalMessageInfo + +func (m *ImageStream) Reset() { *m = ImageStream{} } +func (*ImageStream) ProtoMessage() {} +func (*ImageStream) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{10} +} +func (m *ImageStream) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageStream) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageStream) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageStream.Merge(m, src) +} +func (m *ImageStream) XXX_Size() int { + return m.Size() +} +func (m *ImageStream) XXX_DiscardUnknown() { + xxx_messageInfo_ImageStream.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageStream proto.InternalMessageInfo + +func (m *ImageStreamImage) Reset() { *m = ImageStreamImage{} } +func (*ImageStreamImage) ProtoMessage() {} +func (*ImageStreamImage) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{11} +} +func (m *ImageStreamImage) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageStreamImage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageStreamImage) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageStreamImage.Merge(m, src) +} +func (m *ImageStreamImage) XXX_Size() int { + return m.Size() +} +func (m *ImageStreamImage) XXX_DiscardUnknown() { + xxx_messageInfo_ImageStreamImage.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageStreamImage proto.InternalMessageInfo + +func (m *ImageStreamImport) Reset() { *m = ImageStreamImport{} } +func (*ImageStreamImport) ProtoMessage() {} +func (*ImageStreamImport) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{12} +} +func (m *ImageStreamImport) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageStreamImport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageStreamImport) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageStreamImport.Merge(m, src) +} +func (m *ImageStreamImport) XXX_Size() int { + return m.Size() +} +func (m *ImageStreamImport) XXX_DiscardUnknown() { + xxx_messageInfo_ImageStreamImport.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageStreamImport proto.InternalMessageInfo + +func (m *ImageStreamImportSpec) Reset() { *m = ImageStreamImportSpec{} } +func (*ImageStreamImportSpec) ProtoMessage() {} +func (*ImageStreamImportSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{13} +} +func (m *ImageStreamImportSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageStreamImportSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageStreamImportSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageStreamImportSpec.Merge(m, src) +} +func (m *ImageStreamImportSpec) XXX_Size() int { + return m.Size() +} +func (m *ImageStreamImportSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ImageStreamImportSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageStreamImportSpec proto.InternalMessageInfo + +func (m *ImageStreamImportStatus) Reset() { *m = ImageStreamImportStatus{} } +func (*ImageStreamImportStatus) ProtoMessage() {} +func (*ImageStreamImportStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{14} +} +func (m *ImageStreamImportStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageStreamImportStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageStreamImportStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageStreamImportStatus.Merge(m, src) +} +func (m *ImageStreamImportStatus) XXX_Size() int { + return m.Size() +} +func (m *ImageStreamImportStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ImageStreamImportStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageStreamImportStatus proto.InternalMessageInfo + +func (m *ImageStreamLayers) Reset() { *m = ImageStreamLayers{} } +func (*ImageStreamLayers) ProtoMessage() {} +func (*ImageStreamLayers) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{15} +} +func (m *ImageStreamLayers) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageStreamLayers) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageStreamLayers) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageStreamLayers.Merge(m, src) +} +func (m *ImageStreamLayers) XXX_Size() int { + return m.Size() +} +func (m *ImageStreamLayers) XXX_DiscardUnknown() { + xxx_messageInfo_ImageStreamLayers.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageStreamLayers proto.InternalMessageInfo + +func (m *ImageStreamList) Reset() { *m = ImageStreamList{} } +func (*ImageStreamList) ProtoMessage() {} +func (*ImageStreamList) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{16} +} +func (m *ImageStreamList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageStreamList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageStreamList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageStreamList.Merge(m, src) +} +func (m *ImageStreamList) XXX_Size() int { + return m.Size() +} +func (m *ImageStreamList) XXX_DiscardUnknown() { + xxx_messageInfo_ImageStreamList.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageStreamList proto.InternalMessageInfo + +func (m *ImageStreamMapping) Reset() { *m = ImageStreamMapping{} } +func (*ImageStreamMapping) ProtoMessage() {} +func (*ImageStreamMapping) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{17} +} +func (m *ImageStreamMapping) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageStreamMapping) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageStreamMapping) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageStreamMapping.Merge(m, src) +} +func (m *ImageStreamMapping) XXX_Size() int { + return m.Size() +} +func (m *ImageStreamMapping) XXX_DiscardUnknown() { + xxx_messageInfo_ImageStreamMapping.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageStreamMapping proto.InternalMessageInfo + +func (m *ImageStreamSpec) Reset() { *m = ImageStreamSpec{} } +func (*ImageStreamSpec) ProtoMessage() {} +func (*ImageStreamSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{18} +} +func (m *ImageStreamSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageStreamSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageStreamSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageStreamSpec.Merge(m, src) +} +func (m *ImageStreamSpec) XXX_Size() int { + return m.Size() +} +func (m *ImageStreamSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ImageStreamSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageStreamSpec proto.InternalMessageInfo + +func (m *ImageStreamStatus) Reset() { *m = ImageStreamStatus{} } +func (*ImageStreamStatus) ProtoMessage() {} +func (*ImageStreamStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{19} +} +func (m *ImageStreamStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageStreamStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageStreamStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageStreamStatus.Merge(m, src) +} +func (m *ImageStreamStatus) XXX_Size() int { + return m.Size() +} +func (m *ImageStreamStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ImageStreamStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageStreamStatus proto.InternalMessageInfo + +func (m *ImageStreamTag) Reset() { *m = ImageStreamTag{} } +func (*ImageStreamTag) ProtoMessage() {} +func (*ImageStreamTag) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{20} +} +func (m *ImageStreamTag) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageStreamTag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageStreamTag) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageStreamTag.Merge(m, src) +} +func (m *ImageStreamTag) XXX_Size() int { + return m.Size() +} +func (m *ImageStreamTag) XXX_DiscardUnknown() { + xxx_messageInfo_ImageStreamTag.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageStreamTag proto.InternalMessageInfo + +func (m *ImageStreamTagList) Reset() { *m = ImageStreamTagList{} } +func (*ImageStreamTagList) ProtoMessage() {} +func (*ImageStreamTagList) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{21} +} +func (m *ImageStreamTagList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageStreamTagList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageStreamTagList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageStreamTagList.Merge(m, src) +} +func (m *ImageStreamTagList) XXX_Size() int { + return m.Size() +} +func (m *ImageStreamTagList) XXX_DiscardUnknown() { + xxx_messageInfo_ImageStreamTagList.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageStreamTagList proto.InternalMessageInfo + +func (m *ImageTag) Reset() { *m = ImageTag{} } +func (*ImageTag) ProtoMessage() {} +func (*ImageTag) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{22} +} +func (m *ImageTag) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageTag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageTag) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageTag.Merge(m, src) +} +func (m *ImageTag) XXX_Size() int { + return m.Size() +} +func (m *ImageTag) XXX_DiscardUnknown() { + xxx_messageInfo_ImageTag.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageTag proto.InternalMessageInfo + +func (m *ImageTagList) Reset() { *m = ImageTagList{} } +func (*ImageTagList) ProtoMessage() {} +func (*ImageTagList) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{23} +} +func (m *ImageTagList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ImageTagList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ImageTagList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ImageTagList.Merge(m, src) +} +func (m *ImageTagList) XXX_Size() int { + return m.Size() +} +func (m *ImageTagList) XXX_DiscardUnknown() { + xxx_messageInfo_ImageTagList.DiscardUnknown(m) +} + +var xxx_messageInfo_ImageTagList proto.InternalMessageInfo + +func (m *NamedTagEventList) Reset() { *m = NamedTagEventList{} } +func (*NamedTagEventList) ProtoMessage() {} +func (*NamedTagEventList) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{24} +} +func (m *NamedTagEventList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NamedTagEventList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NamedTagEventList) XXX_Merge(src proto.Message) { + xxx_messageInfo_NamedTagEventList.Merge(m, src) +} +func (m *NamedTagEventList) XXX_Size() int { + return m.Size() +} +func (m *NamedTagEventList) XXX_DiscardUnknown() { + xxx_messageInfo_NamedTagEventList.DiscardUnknown(m) +} + +var xxx_messageInfo_NamedTagEventList proto.InternalMessageInfo + +func (m *RepositoryImportSpec) Reset() { *m = RepositoryImportSpec{} } +func (*RepositoryImportSpec) ProtoMessage() {} +func (*RepositoryImportSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{25} +} +func (m *RepositoryImportSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RepositoryImportSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RepositoryImportSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepositoryImportSpec.Merge(m, src) +} +func (m *RepositoryImportSpec) XXX_Size() int { + return m.Size() +} +func (m *RepositoryImportSpec) XXX_DiscardUnknown() { + xxx_messageInfo_RepositoryImportSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_RepositoryImportSpec proto.InternalMessageInfo + +func (m *RepositoryImportStatus) Reset() { *m = RepositoryImportStatus{} } +func (*RepositoryImportStatus) ProtoMessage() {} +func (*RepositoryImportStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{26} +} +func (m *RepositoryImportStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RepositoryImportStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RepositoryImportStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepositoryImportStatus.Merge(m, src) +} +func (m *RepositoryImportStatus) XXX_Size() int { + return m.Size() +} +func (m *RepositoryImportStatus) XXX_DiscardUnknown() { + xxx_messageInfo_RepositoryImportStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_RepositoryImportStatus proto.InternalMessageInfo + +func (m *SignatureCondition) Reset() { *m = SignatureCondition{} } +func (*SignatureCondition) ProtoMessage() {} +func (*SignatureCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{27} +} +func (m *SignatureCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SignatureCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SignatureCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignatureCondition.Merge(m, src) +} +func (m *SignatureCondition) XXX_Size() int { + return m.Size() +} +func (m *SignatureCondition) XXX_DiscardUnknown() { + xxx_messageInfo_SignatureCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_SignatureCondition proto.InternalMessageInfo + +func (m *SignatureGenericEntity) Reset() { *m = SignatureGenericEntity{} } +func (*SignatureGenericEntity) ProtoMessage() {} +func (*SignatureGenericEntity) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{28} +} +func (m *SignatureGenericEntity) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SignatureGenericEntity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SignatureGenericEntity) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignatureGenericEntity.Merge(m, src) +} +func (m *SignatureGenericEntity) XXX_Size() int { + return m.Size() +} +func (m *SignatureGenericEntity) XXX_DiscardUnknown() { + xxx_messageInfo_SignatureGenericEntity.DiscardUnknown(m) +} + +var xxx_messageInfo_SignatureGenericEntity proto.InternalMessageInfo + +func (m *SignatureIssuer) Reset() { *m = SignatureIssuer{} } +func (*SignatureIssuer) ProtoMessage() {} +func (*SignatureIssuer) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{29} +} +func (m *SignatureIssuer) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SignatureIssuer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SignatureIssuer) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignatureIssuer.Merge(m, src) +} +func (m *SignatureIssuer) XXX_Size() int { + return m.Size() +} +func (m *SignatureIssuer) XXX_DiscardUnknown() { + xxx_messageInfo_SignatureIssuer.DiscardUnknown(m) +} + +var xxx_messageInfo_SignatureIssuer proto.InternalMessageInfo + +func (m *SignatureSubject) Reset() { *m = SignatureSubject{} } +func (*SignatureSubject) ProtoMessage() {} +func (*SignatureSubject) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{30} +} +func (m *SignatureSubject) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SignatureSubject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SignatureSubject) XXX_Merge(src proto.Message) { + xxx_messageInfo_SignatureSubject.Merge(m, src) +} +func (m *SignatureSubject) XXX_Size() int { + return m.Size() +} +func (m *SignatureSubject) XXX_DiscardUnknown() { + xxx_messageInfo_SignatureSubject.DiscardUnknown(m) +} + +var xxx_messageInfo_SignatureSubject proto.InternalMessageInfo + +func (m *TagEvent) Reset() { *m = TagEvent{} } +func (*TagEvent) ProtoMessage() {} +func (*TagEvent) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{31} +} +func (m *TagEvent) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TagEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TagEvent) XXX_Merge(src proto.Message) { + xxx_messageInfo_TagEvent.Merge(m, src) +} +func (m *TagEvent) XXX_Size() int { + return m.Size() +} +func (m *TagEvent) XXX_DiscardUnknown() { + xxx_messageInfo_TagEvent.DiscardUnknown(m) +} + +var xxx_messageInfo_TagEvent proto.InternalMessageInfo + +func (m *TagEventCondition) Reset() { *m = TagEventCondition{} } +func (*TagEventCondition) ProtoMessage() {} +func (*TagEventCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{32} +} +func (m *TagEventCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TagEventCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TagEventCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_TagEventCondition.Merge(m, src) +} +func (m *TagEventCondition) XXX_Size() int { + return m.Size() +} +func (m *TagEventCondition) XXX_DiscardUnknown() { + xxx_messageInfo_TagEventCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_TagEventCondition proto.InternalMessageInfo + +func (m *TagImportPolicy) Reset() { *m = TagImportPolicy{} } +func (*TagImportPolicy) ProtoMessage() {} +func (*TagImportPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{33} +} +func (m *TagImportPolicy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TagImportPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TagImportPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_TagImportPolicy.Merge(m, src) +} +func (m *TagImportPolicy) XXX_Size() int { + return m.Size() +} +func (m *TagImportPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_TagImportPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_TagImportPolicy proto.InternalMessageInfo + +func (m *TagReference) Reset() { *m = TagReference{} } +func (*TagReference) ProtoMessage() {} +func (*TagReference) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{34} +} +func (m *TagReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TagReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TagReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_TagReference.Merge(m, src) +} +func (m *TagReference) XXX_Size() int { + return m.Size() +} +func (m *TagReference) XXX_DiscardUnknown() { + xxx_messageInfo_TagReference.DiscardUnknown(m) +} + +var xxx_messageInfo_TagReference proto.InternalMessageInfo + +func (m *TagReferencePolicy) Reset() { *m = TagReferencePolicy{} } +func (*TagReferencePolicy) ProtoMessage() {} +func (*TagReferencePolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_650a0b34f65fde60, []int{35} +} +func (m *TagReferencePolicy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TagReferencePolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TagReferencePolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_TagReferencePolicy.Merge(m, src) +} +func (m *TagReferencePolicy) XXX_Size() int { + return m.Size() +} +func (m *TagReferencePolicy) XXX_DiscardUnknown() { + xxx_messageInfo_TagReferencePolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_TagReferencePolicy proto.InternalMessageInfo + +func init() { + proto.RegisterType((*DockerImageReference)(nil), "github.com.openshift.api.image.v1.DockerImageReference") + proto.RegisterType((*Image)(nil), "github.com.openshift.api.image.v1.Image") + proto.RegisterType((*ImageBlobReferences)(nil), "github.com.openshift.api.image.v1.ImageBlobReferences") + proto.RegisterType((*ImageImportSpec)(nil), "github.com.openshift.api.image.v1.ImageImportSpec") + proto.RegisterType((*ImageImportStatus)(nil), "github.com.openshift.api.image.v1.ImageImportStatus") + proto.RegisterType((*ImageLayer)(nil), "github.com.openshift.api.image.v1.ImageLayer") + proto.RegisterType((*ImageLayerData)(nil), "github.com.openshift.api.image.v1.ImageLayerData") + proto.RegisterType((*ImageList)(nil), "github.com.openshift.api.image.v1.ImageList") + proto.RegisterType((*ImageLookupPolicy)(nil), "github.com.openshift.api.image.v1.ImageLookupPolicy") + proto.RegisterType((*ImageSignature)(nil), "github.com.openshift.api.image.v1.ImageSignature") + proto.RegisterMapType((map[string]string)(nil), "github.com.openshift.api.image.v1.ImageSignature.SignedClaimsEntry") + proto.RegisterType((*ImageStream)(nil), "github.com.openshift.api.image.v1.ImageStream") + proto.RegisterType((*ImageStreamImage)(nil), "github.com.openshift.api.image.v1.ImageStreamImage") + proto.RegisterType((*ImageStreamImport)(nil), "github.com.openshift.api.image.v1.ImageStreamImport") + proto.RegisterType((*ImageStreamImportSpec)(nil), "github.com.openshift.api.image.v1.ImageStreamImportSpec") + proto.RegisterType((*ImageStreamImportStatus)(nil), "github.com.openshift.api.image.v1.ImageStreamImportStatus") + proto.RegisterType((*ImageStreamLayers)(nil), "github.com.openshift.api.image.v1.ImageStreamLayers") + proto.RegisterMapType((map[string]ImageLayerData)(nil), "github.com.openshift.api.image.v1.ImageStreamLayers.BlobsEntry") + proto.RegisterMapType((map[string]ImageBlobReferences)(nil), "github.com.openshift.api.image.v1.ImageStreamLayers.ImagesEntry") + proto.RegisterType((*ImageStreamList)(nil), "github.com.openshift.api.image.v1.ImageStreamList") + proto.RegisterType((*ImageStreamMapping)(nil), "github.com.openshift.api.image.v1.ImageStreamMapping") + proto.RegisterType((*ImageStreamSpec)(nil), "github.com.openshift.api.image.v1.ImageStreamSpec") + proto.RegisterType((*ImageStreamStatus)(nil), "github.com.openshift.api.image.v1.ImageStreamStatus") + proto.RegisterType((*ImageStreamTag)(nil), "github.com.openshift.api.image.v1.ImageStreamTag") + proto.RegisterType((*ImageStreamTagList)(nil), "github.com.openshift.api.image.v1.ImageStreamTagList") + proto.RegisterType((*ImageTag)(nil), "github.com.openshift.api.image.v1.ImageTag") + proto.RegisterType((*ImageTagList)(nil), "github.com.openshift.api.image.v1.ImageTagList") + proto.RegisterType((*NamedTagEventList)(nil), "github.com.openshift.api.image.v1.NamedTagEventList") + proto.RegisterType((*RepositoryImportSpec)(nil), "github.com.openshift.api.image.v1.RepositoryImportSpec") + proto.RegisterType((*RepositoryImportStatus)(nil), "github.com.openshift.api.image.v1.RepositoryImportStatus") + proto.RegisterType((*SignatureCondition)(nil), "github.com.openshift.api.image.v1.SignatureCondition") + proto.RegisterType((*SignatureGenericEntity)(nil), "github.com.openshift.api.image.v1.SignatureGenericEntity") + proto.RegisterType((*SignatureIssuer)(nil), "github.com.openshift.api.image.v1.SignatureIssuer") + proto.RegisterType((*SignatureSubject)(nil), "github.com.openshift.api.image.v1.SignatureSubject") + proto.RegisterType((*TagEvent)(nil), "github.com.openshift.api.image.v1.TagEvent") + proto.RegisterType((*TagEventCondition)(nil), "github.com.openshift.api.image.v1.TagEventCondition") + proto.RegisterType((*TagImportPolicy)(nil), "github.com.openshift.api.image.v1.TagImportPolicy") + proto.RegisterType((*TagReference)(nil), "github.com.openshift.api.image.v1.TagReference") + proto.RegisterMapType((map[string]string)(nil), "github.com.openshift.api.image.v1.TagReference.AnnotationsEntry") + proto.RegisterType((*TagReferencePolicy)(nil), "github.com.openshift.api.image.v1.TagReferencePolicy") +} + +func init() { + proto.RegisterFile("github.com/openshift/api/image/v1/generated.proto", fileDescriptor_650a0b34f65fde60) +} + +var fileDescriptor_650a0b34f65fde60 = []byte{ + // 2502 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5a, 0x4d, 0x6c, 0x1c, 0x49, + 0x15, 0x4e, 0xcf, 0x9f, 0xc7, 0xcf, 0x8e, 0x1d, 0x57, 0xe2, 0xdd, 0xd9, 0x49, 0xd6, 0xf6, 0x76, + 0x48, 0x14, 0x20, 0x3b, 0x83, 0x4d, 0x76, 0x71, 0x82, 0xc4, 0x6e, 0x26, 0x13, 0xa2, 0x01, 0x7b, + 0xe3, 0x2d, 0x0f, 0x11, 0x8a, 0x82, 0x44, 0xb9, 0xa7, 0xdc, 0x6e, 0x3c, 0xd3, 0x3d, 0x74, 0xf7, + 0x78, 0xd7, 0x11, 0x48, 0x1c, 0xd0, 0x6a, 0x0f, 0x1c, 0xe0, 0xc4, 0x61, 0x8f, 0x68, 0x85, 0x38, + 0x23, 0x10, 0x27, 0x2e, 0x80, 0x14, 0x71, 0x61, 0xb5, 0x5c, 0xf6, 0x82, 0xb5, 0x19, 0x38, 0x73, + 0xe3, 0xb2, 0x27, 0x54, 0xd5, 0xd5, 0xdd, 0xd5, 0x3d, 0x3d, 0x4e, 0xb7, 0x89, 0x07, 0xb8, 0x4d, + 0xd7, 0x7b, 0xef, 0x7b, 0xaf, 0xdf, 0xab, 0x7a, 0x3f, 0xd5, 0x03, 0xab, 0xba, 0xe1, 0xee, 0x0d, + 0x76, 0x6a, 0x9a, 0xd5, 0xab, 0x5b, 0x7d, 0x6a, 0x3a, 0x7b, 0xc6, 0xae, 0x5b, 0x27, 0x7d, 0xa3, + 0x6e, 0xf4, 0x88, 0x4e, 0xeb, 0x07, 0xab, 0x75, 0x9d, 0x9a, 0xd4, 0x26, 0x2e, 0xed, 0xd4, 0xfa, + 0xb6, 0xe5, 0x5a, 0xe8, 0x95, 0x50, 0xa4, 0x16, 0x88, 0xd4, 0x48, 0xdf, 0xa8, 0x71, 0x91, 0xda, + 0xc1, 0x6a, 0xf5, 0x55, 0x09, 0x55, 0xb7, 0x74, 0xab, 0xce, 0x25, 0x77, 0x06, 0xbb, 0xfc, 0x89, + 0x3f, 0xf0, 0x5f, 0x1e, 0x62, 0x55, 0xdd, 0x5f, 0x77, 0x6a, 0x86, 0xc5, 0xd5, 0x6a, 0x96, 0x9d, + 0xa4, 0xb5, 0x7a, 0x23, 0xe4, 0xe9, 0x11, 0x6d, 0xcf, 0x30, 0xa9, 0x7d, 0x58, 0xef, 0xef, 0xeb, + 0x6c, 0xc1, 0xa9, 0xf7, 0xa8, 0x4b, 0x92, 0xa4, 0xea, 0xe3, 0xa4, 0xec, 0x81, 0xe9, 0x1a, 0x3d, + 0x3a, 0x22, 0xf0, 0xfa, 0xb3, 0x04, 0x1c, 0x6d, 0x8f, 0xf6, 0x48, 0x5c, 0x4e, 0xfd, 0x58, 0x81, + 0x0b, 0x4d, 0x4b, 0xdb, 0xa7, 0x76, 0x8b, 0x39, 0x01, 0xd3, 0x5d, 0x6a, 0x53, 0x53, 0xa3, 0xe8, + 0x3a, 0x94, 0x6d, 0xaa, 0x1b, 0x8e, 0x6b, 0x1f, 0x56, 0x94, 0x15, 0xe5, 0xda, 0x74, 0xe3, 0xdc, + 0x93, 0xa3, 0xe5, 0x33, 0xc3, 0xa3, 0xe5, 0x32, 0x16, 0xeb, 0x38, 0xe0, 0x40, 0x75, 0x98, 0x36, + 0x49, 0x8f, 0x3a, 0x7d, 0xa2, 0xd1, 0x4a, 0x8e, 0xb3, 0x2f, 0x08, 0xf6, 0xe9, 0xb7, 0x7c, 0x02, + 0x0e, 0x79, 0xd0, 0x0a, 0x14, 0xd8, 0x43, 0x25, 0xcf, 0x79, 0x67, 0x05, 0x6f, 0x81, 0xf1, 0x62, + 0x4e, 0x41, 0x2f, 0x43, 0xde, 0x25, 0x7a, 0xa5, 0xc0, 0x19, 0x66, 0x04, 0x43, 0xbe, 0x4d, 0x74, + 0xcc, 0xd6, 0x51, 0x15, 0x72, 0x46, 0xb3, 0x52, 0xe4, 0x54, 0x10, 0xd4, 0x5c, 0xab, 0x89, 0x73, + 0x46, 0x53, 0xfd, 0xcb, 0x14, 0x14, 0xf9, 0xeb, 0xa0, 0xef, 0x42, 0x99, 0xb9, 0xb8, 0x43, 0x5c, + 0xc2, 0xdf, 0x62, 0x66, 0xed, 0x4b, 0x35, 0xcf, 0x53, 0x35, 0xd9, 0x53, 0xb5, 0xfe, 0xbe, 0xce, + 0x16, 0x9c, 0x1a, 0xe3, 0xae, 0x1d, 0xac, 0xd6, 0xee, 0xef, 0x7c, 0x8f, 0x6a, 0xee, 0x26, 0x75, + 0x49, 0x03, 0x09, 0x74, 0x08, 0xd7, 0x70, 0x80, 0x8a, 0xb6, 0xe0, 0x42, 0x27, 0xc1, 0x7f, 0xc2, + 0x09, 0x97, 0x84, 0x6c, 0xa2, 0x8f, 0x71, 0xa2, 0x24, 0xfa, 0x01, 0x9c, 0x97, 0xd6, 0x37, 0x7d, + 0xf3, 0xf3, 0xdc, 0xfc, 0x57, 0xc7, 0x9a, 0x2f, 0x02, 0x5d, 0xc3, 0xe4, 0x9d, 0xbb, 0xef, 0xba, + 0xd4, 0x74, 0x0c, 0xcb, 0x6c, 0x5c, 0x14, 0xfa, 0xcf, 0x37, 0x47, 0x11, 0x71, 0x92, 0x1a, 0xb4, + 0x03, 0xd5, 0x84, 0xe5, 0x07, 0xd4, 0x66, 0x78, 0x22, 0x1a, 0xaa, 0x40, 0xad, 0x36, 0xc7, 0x72, + 0xe2, 0x63, 0x50, 0xd0, 0x66, 0xf4, 0x0d, 0x89, 0x69, 0xec, 0x52, 0xc7, 0x15, 0xc1, 0x4c, 0x34, + 0x59, 0xb0, 0xe0, 0x24, 0x39, 0x74, 0x00, 0x0b, 0xd2, 0xf2, 0x06, 0x39, 0xa4, 0xb6, 0x53, 0x29, + 0xad, 0xe4, 0xb9, 0xbb, 0x9e, 0x79, 0xe8, 0x6b, 0xa1, 0x54, 0xe3, 0x25, 0xa1, 0x7b, 0xa1, 0x19, + 0xc7, 0xc3, 0xa3, 0x2a, 0x10, 0x05, 0x70, 0x0c, 0xdd, 0x24, 0xee, 0xc0, 0xa6, 0x4e, 0x65, 0x8a, + 0x2b, 0x5c, 0x4d, 0xab, 0x70, 0xdb, 0x97, 0x0c, 0xf7, 0x57, 0xb0, 0xe4, 0x60, 0x09, 0x18, 0xdd, + 0x87, 0x45, 0x49, 0x77, 0xc8, 0x54, 0x29, 0xaf, 0xe4, 0xaf, 0xcd, 0x36, 0x5e, 0x1a, 0x1e, 0x2d, + 0x2f, 0x36, 0x93, 0x18, 0x70, 0xb2, 0x1c, 0xda, 0x83, 0x4b, 0x09, 0x6e, 0xdc, 0xa4, 0x1d, 0x83, + 0xb4, 0x0f, 0xfb, 0xb4, 0x32, 0xcd, 0xe3, 0xf0, 0x39, 0x61, 0xd6, 0xa5, 0xe6, 0x31, 0xbc, 0xf8, + 0x58, 0x24, 0x74, 0x2f, 0x12, 0x99, 0x3b, 0x96, 0xb9, 0x6b, 0xe8, 0x15, 0xe0, 0xf0, 0x49, 0xae, + 0xf6, 0x18, 0xf0, 0xa8, 0x8c, 0xfa, 0x73, 0x05, 0xce, 0xf3, 0xe7, 0x46, 0xd7, 0xda, 0x09, 0x8e, + 0x8a, 0x83, 0xd6, 0x61, 0x96, 0xbb, 0x75, 0xd3, 0x70, 0x1c, 0xc3, 0xd4, 0xf9, 0x21, 0x29, 0x37, + 0x2e, 0x08, 0xec, 0xd9, 0x96, 0x44, 0xc3, 0x11, 0x4e, 0xa4, 0x42, 0xa9, 0xeb, 0xed, 0x14, 0x65, + 0x25, 0xcf, 0x72, 0xc8, 0xf0, 0x68, 0xb9, 0x24, 0x62, 0x2d, 0x28, 0x8c, 0x47, 0xf3, 0x6c, 0xf6, + 0x4e, 0x33, 0xe7, 0x11, 0x46, 0x0a, 0x8a, 0xfa, 0xa7, 0x3c, 0xcc, 0x73, 0x35, 0xad, 0x5e, 0xdf, + 0xb2, 0xdd, 0xed, 0x3e, 0xd5, 0xd0, 0x5d, 0x28, 0xec, 0xda, 0x56, 0x4f, 0x64, 0x9c, 0xcb, 0xd2, + 0x91, 0xad, 0xb1, 0x32, 0x11, 0xe6, 0x97, 0xe0, 0x4d, 0xc2, 0x0c, 0xf8, 0x75, 0xdb, 0xea, 0x61, + 0x2e, 0x8e, 0xde, 0x84, 0x9c, 0x6b, 0x71, 0xd5, 0x33, 0x6b, 0xd7, 0x92, 0x40, 0x36, 0x2c, 0x8d, + 0x74, 0xe3, 0x48, 0x25, 0x96, 0x08, 0xdb, 0x16, 0xce, 0xb9, 0x16, 0xea, 0x32, 0xf7, 0x30, 0xb3, + 0xb6, 0xac, 0xae, 0xa1, 0x1d, 0x8a, 0x1c, 0xb2, 0x96, 0x62, 0x8f, 0xb6, 0x89, 0xde, 0x92, 0x24, + 0x65, 0x97, 0x86, 0xab, 0x38, 0x82, 0x8e, 0xde, 0x85, 0x79, 0xdb, 0x37, 0x43, 0x28, 0x2c, 0x72, + 0x85, 0xaf, 0xa5, 0x53, 0x88, 0xa3, 0xc2, 0x8d, 0x17, 0x85, 0xce, 0xf9, 0x18, 0x01, 0xc7, 0xd5, + 0xa0, 0xdb, 0x30, 0x6f, 0x98, 0x5a, 0x77, 0xd0, 0x09, 0x93, 0x49, 0x81, 0xef, 0x84, 0x00, 0xa2, + 0x15, 0x25, 0xe3, 0x38, 0xbf, 0xfa, 0x57, 0x05, 0x16, 0xe4, 0x38, 0xba, 0xc4, 0x1d, 0x38, 0xa8, + 0x0d, 0x25, 0x87, 0xff, 0x12, 0xb1, 0xbc, 0x9e, 0xae, 0x7a, 0x78, 0xd2, 0x8d, 0x39, 0xa1, 0xbd, + 0xe4, 0x3d, 0x63, 0x81, 0x85, 0x5a, 0x50, 0xe4, 0xef, 0x1d, 0xc4, 0x36, 0x65, 0xce, 0x68, 0x4c, + 0x0f, 0x8f, 0x96, 0xbd, 0xca, 0x86, 0x3d, 0x04, 0xbf, 0x4a, 0xe6, 0x93, 0xab, 0xa4, 0xfa, 0x9e, + 0x02, 0x10, 0xa6, 0xac, 0xa0, 0xea, 0x2a, 0x63, 0xab, 0xee, 0x15, 0x28, 0x38, 0xc6, 0x63, 0xcf, + 0xb2, 0x7c, 0x58, 0xc3, 0xb9, 0xf8, 0xb6, 0xf1, 0x98, 0x62, 0x4e, 0x66, 0xf5, 0xbe, 0x17, 0xe4, + 0x8b, 0x7c, 0xb4, 0xde, 0x87, 0xc9, 0x21, 0xe4, 0x51, 0x3b, 0x30, 0x17, 0xda, 0xd1, 0x64, 0x85, + 0xe6, 0x15, 0xa1, 0x49, 0xe1, 0x9a, 0xce, 0x3e, 0x53, 0x4b, 0x2e, 0x85, 0x96, 0xdf, 0x29, 0x30, + 0xed, 0xa9, 0x31, 0x1c, 0x17, 0x3d, 0x1a, 0x29, 0xfe, 0xb5, 0x74, 0xe1, 0x63, 0xd2, 0xbc, 0xf4, + 0x07, 0x2d, 0x8f, 0xbf, 0x22, 0x15, 0xfe, 0x4d, 0x28, 0x1a, 0x2e, 0xed, 0x39, 0x95, 0x1c, 0x4f, + 0xfc, 0xe9, 0x83, 0x78, 0x56, 0x80, 0x16, 0x5b, 0x4c, 0x1c, 0x7b, 0x28, 0xea, 0xba, 0xd8, 0x7e, + 0x1b, 0x96, 0xb5, 0x3f, 0xe8, 0x8b, 0x7d, 0x7d, 0x19, 0x8a, 0x5d, 0x76, 0xc6, 0x45, 0x5e, 0x0b, + 0x24, 0xf9, 0xc1, 0xc7, 0x1e, 0x4d, 0xfd, 0x75, 0x49, 0xf8, 0x36, 0x48, 0xf1, 0x13, 0x68, 0x7b, + 0x56, 0xa0, 0xe0, 0x86, 0x51, 0x09, 0x76, 0x12, 0x0f, 0x08, 0xa7, 0xa0, 0x2b, 0x30, 0xa5, 0x59, + 0xa6, 0x4b, 0x4d, 0x97, 0x5b, 0x3f, 0xdb, 0x98, 0x19, 0x1e, 0x2d, 0x4f, 0xdd, 0xf1, 0x96, 0xb0, + 0x4f, 0x43, 0x06, 0x80, 0x66, 0x99, 0x1d, 0xc3, 0x35, 0x2c, 0xd3, 0xa9, 0x14, 0xb8, 0x2f, 0xd3, + 0xe4, 0x8b, 0xe0, 0x65, 0xef, 0xf8, 0xd2, 0xa1, 0xc5, 0xc1, 0x92, 0x83, 0x25, 0x70, 0xf4, 0x55, + 0x38, 0xcb, 0xc5, 0x5b, 0x1d, 0x6a, 0xba, 0x86, 0x7b, 0x28, 0x1a, 0x8e, 0x45, 0x21, 0x76, 0xb6, + 0x25, 0x13, 0x71, 0x94, 0x17, 0xfd, 0x10, 0x66, 0x59, 0x4d, 0xa6, 0x9d, 0x3b, 0x5d, 0x62, 0xf4, + 0xfc, 0xfe, 0xe2, 0x4e, 0xe6, 0x72, 0xcf, 0x0d, 0xf7, 0x51, 0xee, 0x9a, 0xae, 0x2d, 0xe5, 0x56, + 0x99, 0x84, 0x23, 0xea, 0xd0, 0xdb, 0x30, 0xa5, 0xd9, 0x94, 0x35, 0xee, 0x95, 0x29, 0x1e, 0xd0, + 0x2f, 0xa4, 0x0b, 0x68, 0xdb, 0xe8, 0x51, 0xe1, 0x79, 0x4f, 0x1c, 0xfb, 0x38, 0xec, 0x78, 0x18, + 0x8e, 0x33, 0xa0, 0x9d, 0xc6, 0x61, 0xa5, 0x9c, 0xba, 0x30, 0x04, 0x2f, 0xd2, 0x62, 0xb2, 0x76, + 0x63, 0x96, 0x1d, 0x8f, 0x96, 0xc0, 0xc1, 0x01, 0x22, 0xfa, 0x8e, 0x8f, 0xde, 0xb6, 0x78, 0x43, + 0x31, 0xb3, 0xf6, 0xe5, 0x2c, 0xe8, 0xdb, 0x03, 0xbe, 0xeb, 0x64, 0xf8, 0xb6, 0x85, 0x03, 0xc8, + 0xea, 0x1b, 0xb0, 0x30, 0xe2, 0x48, 0x74, 0x0e, 0xf2, 0xfb, 0x54, 0x8c, 0x2b, 0x98, 0xfd, 0x44, + 0x17, 0xa0, 0x78, 0x40, 0xba, 0x03, 0xb1, 0x4f, 0xb1, 0xf7, 0x70, 0x2b, 0xb7, 0xae, 0xa8, 0xbf, + 0xc8, 0xc1, 0x8c, 0x17, 0x19, 0xd7, 0xa6, 0xa4, 0x37, 0x81, 0x23, 0xd3, 0x86, 0x82, 0xd3, 0xa7, + 0x9a, 0x48, 0xfa, 0x6b, 0xa9, 0x77, 0x0e, 0xb7, 0x8f, 0xf5, 0x15, 0xe1, 0x31, 0x63, 0x4f, 0x98, + 0xa3, 0xa1, 0x47, 0x41, 0x85, 0xf2, 0x8a, 0xfb, 0x8d, 0x8c, 0xb8, 0xc7, 0x56, 0x2a, 0xf5, 0x0f, + 0x0a, 0x9c, 0x93, 0xb8, 0x27, 0x35, 0x54, 0x6d, 0x9e, 0xb4, 0x40, 0x86, 0xb9, 0x55, 0x2a, 0x92, + 0xea, 0x6f, 0x72, 0x22, 0xb9, 0xfa, 0x6f, 0xc1, 0x2a, 0xfc, 0x04, 0x5e, 0xe3, 0x61, 0x24, 0xe2, + 0xeb, 0xd9, 0x22, 0x13, 0xf6, 0x93, 0x89, 0x71, 0xdf, 0x89, 0xc5, 0xfd, 0xd6, 0x89, 0xd0, 0x8f, + 0x8f, 0xfe, 0x8f, 0x73, 0xb0, 0x98, 0x68, 0x11, 0xba, 0x0a, 0x25, 0xaf, 0xf5, 0xe3, 0x9e, 0x2b, + 0x87, 0x08, 0x1e, 0x0f, 0x16, 0x54, 0xa4, 0x03, 0xd8, 0xb4, 0x6f, 0x39, 0x86, 0x6b, 0xd9, 0x87, + 0xc2, 0x0f, 0x5f, 0x49, 0x61, 0x29, 0x0e, 0x84, 0x24, 0x37, 0xcc, 0x31, 0x47, 0x87, 0x14, 0x2c, + 0x41, 0xa3, 0x87, 0xcc, 0x20, 0xa2, 0x53, 0xe6, 0x8e, 0x7c, 0x96, 0xe3, 0x25, 0xe3, 0x87, 0x2f, + 0xc1, 0x90, 0xb0, 0x40, 0x54, 0x7f, 0x9b, 0x83, 0x17, 0xc7, 0xb8, 0x0e, 0xe1, 0x88, 0x23, 0x58, + 0x87, 0x91, 0x29, 0x0c, 0xde, 0x48, 0x11, 0x73, 0x9a, 0x91, 0xe0, 0xb4, 0x9b, 0x27, 0x71, 0x9a, + 0x88, 0xee, 0x31, 0x6e, 0x7b, 0x14, 0x73, 0xdb, 0x8d, 0x8c, 0x6e, 0x8b, 0xed, 0x9f, 0x98, 0xe3, + 0x3e, 0x2c, 0x44, 0xce, 0x9d, 0x18, 0x9b, 0x4f, 0xff, 0xdc, 0x75, 0xa0, 0xb8, 0xd3, 0xb5, 0x76, + 0xfc, 0xd6, 0xec, 0x8d, 0x6c, 0x31, 0xf1, 0xcc, 0xac, 0xb1, 0x49, 0x53, 0x14, 0xe8, 0x20, 0xab, + 0xf0, 0x35, 0xec, 0x81, 0xa3, 0xbd, 0x98, 0xef, 0xde, 0x3c, 0x91, 0x1a, 0xcf, 0x65, 0x9e, 0x9e, + 0x31, 0x7e, 0xac, 0xee, 0x03, 0x84, 0xd6, 0x24, 0x54, 0xb9, 0x7b, 0x72, 0x95, 0xcb, 0x70, 0x07, + 0x11, 0x34, 0xe3, 0x52, 0x61, 0xac, 0x7e, 0x5f, 0xd4, 0xc5, 0xb1, 0xda, 0x36, 0xa2, 0xda, 0x5e, + 0x4f, 0x9d, 0x9c, 0x23, 0xa3, 0xbb, 0x5c, 0x8b, 0xff, 0xa8, 0x88, 0x19, 0x5a, 0x78, 0xe6, 0xf4, + 0x9b, 0xf7, 0xed, 0x68, 0xf3, 0x9e, 0xf5, 0xd4, 0x26, 0xb7, 0xf0, 0xff, 0x50, 0x00, 0x49, 0x5c, + 0x9b, 0xa4, 0xdf, 0x37, 0x4c, 0xfd, 0xff, 0xae, 0x5c, 0x3e, 0x6b, 0xa6, 0xfc, 0x55, 0x2e, 0x12, + 0x2d, 0x5e, 0x0f, 0x4c, 0x98, 0xed, 0x4a, 0x83, 0x4b, 0xd6, 0x5e, 0x44, 0x1e, 0x7a, 0xc2, 0x76, + 0x58, 0x5e, 0xc5, 0x11, 0x7c, 0xb4, 0x1d, 0xb9, 0x13, 0x0b, 0x93, 0x9b, 0x98, 0x6c, 0x5f, 0x16, + 0x10, 0x8b, 0xcd, 0x24, 0x26, 0x9c, 0x2c, 0x8b, 0xde, 0x86, 0x82, 0x4b, 0x74, 0x7f, 0x4f, 0xd4, + 0x33, 0x5e, 0x5a, 0x48, 0x43, 0x10, 0xd1, 0x1d, 0xcc, 0xa1, 0xd4, 0x5f, 0x46, 0x3b, 0x0f, 0x51, + 0x34, 0x4e, 0xc5, 0x7a, 0x0a, 0x17, 0xfb, 0x83, 0x9d, 0xae, 0xa1, 0x25, 0x4a, 0x89, 0x68, 0x5e, + 0x16, 0xd0, 0x17, 0xb7, 0xc6, 0xb3, 0xe2, 0xe3, 0x70, 0xd0, 0x83, 0x88, 0x93, 0xd2, 0x44, 0xf8, + 0x2d, 0xd2, 0xa3, 0x9d, 0x36, 0xd1, 0xef, 0x1e, 0x50, 0xd3, 0x65, 0x67, 0x31, 0xd1, 0x53, 0x1f, + 0x14, 0xfc, 0x29, 0x96, 0x7b, 0xaa, 0x4d, 0x26, 0x71, 0x70, 0xbe, 0xe1, 0xed, 0x74, 0xef, 0xd8, + 0x64, 0x0e, 0xf8, 0x54, 0xe4, 0x83, 0xc4, 0x1a, 0x80, 0xf8, 0xb8, 0x62, 0x58, 0x26, 0x77, 0x77, + 0x3e, 0xd4, 0x7e, 0x2f, 0xa0, 0x60, 0x89, 0x6b, 0xe4, 0xd8, 0x94, 0x4e, 0xf9, 0xd8, 0xec, 0x25, + 0x0c, 0xdb, 0x37, 0xd2, 0xbd, 0x36, 0x8f, 0x5e, 0xfa, 0x59, 0x3b, 0x48, 0x49, 0xc5, 0xe7, 0xd2, + 0xc1, 0xff, 0x39, 0x9a, 0x5a, 0xdb, 0x44, 0x9f, 0x40, 0x91, 0x78, 0x10, 0x2d, 0x12, 0xab, 0xd9, + 0x8a, 0x44, 0x9b, 0xe8, 0x63, 0xea, 0xc4, 0xa7, 0x39, 0x28, 0x73, 0xc6, 0xc9, 0x6c, 0xf2, 0xcd, + 0xc8, 0x14, 0x92, 0x79, 0x97, 0x97, 0x63, 0x83, 0xc7, 0xb7, 0x4f, 0x30, 0x70, 0x8e, 0xa6, 0x00, + 0x38, 0xee, 0x5a, 0xb4, 0xf0, 0x9f, 0x5e, 0x8b, 0xaa, 0xbf, 0x57, 0x60, 0xd6, 0x77, 0xf1, 0x04, + 0x76, 0xca, 0x56, 0x74, 0xa7, 0x7c, 0x31, 0xad, 0xe5, 0xe3, 0xf7, 0xc8, 0x3f, 0x15, 0x58, 0x18, + 0xf1, 0x9a, 0x5f, 0x99, 0x95, 0x31, 0xdf, 0x44, 0x4f, 0x60, 0x86, 0x0f, 0x9f, 0x6c, 0x46, 0x2c, + 0x61, 0xe4, 0x4f, 0x2f, 0x61, 0xa8, 0xef, 0xe7, 0xe1, 0x42, 0xd2, 0xd4, 0xf7, 0xbc, 0x3e, 0xa6, + 0xc4, 0x3f, 0x85, 0xe4, 0x26, 0xfd, 0x29, 0xa4, 0xf0, 0x5f, 0xfb, 0x14, 0x92, 0xcf, 0xf8, 0x29, + 0xe4, 0xfd, 0x1c, 0xbc, 0x90, 0x3c, 0x4b, 0x9e, 0xd2, 0xf7, 0x90, 0x70, 0x0a, 0xcd, 0x3d, 0xff, + 0x29, 0x14, 0xdd, 0x82, 0x39, 0xd2, 0xf1, 0xb6, 0x19, 0xe9, 0xb2, 0x8e, 0x83, 0xef, 0xe3, 0xe9, + 0x06, 0x1a, 0x1e, 0x2d, 0xcf, 0xdd, 0x8e, 0x50, 0x70, 0x8c, 0x53, 0xfd, 0x38, 0x0f, 0x68, 0xf4, + 0xa6, 0x19, 0xdd, 0x12, 0xb7, 0xdf, 0xde, 0x41, 0xbc, 0x2a, 0xdf, 0x7e, 0x7f, 0x76, 0xb4, 0xfc, + 0xc2, 0xa8, 0x84, 0x74, 0x2f, 0xbe, 0x11, 0xb8, 0xd0, 0xbb, 0x3b, 0xbf, 0x11, 0x75, 0xca, 0x67, + 0x47, 0xcb, 0x09, 0x7f, 0x2b, 0xa9, 0x05, 0x48, 0x31, 0xd7, 0xe9, 0x70, 0xb6, 0x4b, 0x1c, 0x77, + 0xcb, 0xb6, 0x76, 0x68, 0xdb, 0x10, 0x7f, 0xa8, 0xc8, 0x76, 0x3b, 0x1c, 0xdc, 0x7f, 0x6f, 0xc8, + 0x40, 0x38, 0x8a, 0x8b, 0x0e, 0x00, 0xb1, 0x85, 0xb6, 0x4d, 0x4c, 0xc7, 0x7b, 0x25, 0xa6, 0xad, + 0x90, 0x59, 0x5b, 0x55, 0x68, 0x43, 0x1b, 0x23, 0x68, 0x38, 0x41, 0x03, 0xba, 0x0a, 0x25, 0x9b, + 0x12, 0xc7, 0x32, 0xc5, 0x6d, 0x7d, 0x10, 0x65, 0xcc, 0x57, 0xb1, 0xa0, 0xa2, 0xcf, 0xc3, 0x54, + 0x8f, 0x3a, 0x0e, 0x2b, 0x1f, 0x25, 0xce, 0x38, 0x2f, 0x18, 0xa7, 0x36, 0xbd, 0x65, 0xec, 0xd3, + 0xd5, 0xf7, 0x14, 0x08, 0x43, 0xc4, 0x3b, 0x33, 0x43, 0xbb, 0xeb, 0xdd, 0xf2, 0xaf, 0xc3, 0xac, + 0x65, 0xeb, 0xc4, 0x34, 0x1e, 0x7b, 0x6d, 0x9c, 0x17, 0xe0, 0xe0, 0xc4, 0xdf, 0x97, 0x68, 0x38, + 0xc2, 0xc9, 0xda, 0x3f, 0xcd, 0xea, 0xf5, 0x2c, 0x93, 0x65, 0x6d, 0x11, 0x5a, 0x29, 0xe7, 0xf9, + 0x14, 0x2c, 0x71, 0xa9, 0x1f, 0x2a, 0x30, 0x1f, 0xbb, 0x4f, 0x47, 0x3f, 0x53, 0xe0, 0x05, 0x27, + 0xd1, 0x38, 0x71, 0xe4, 0x6e, 0x66, 0xb9, 0x46, 0x8f, 0x00, 0x34, 0x96, 0x84, 0x3d, 0x63, 0xde, + 0x1e, 0x8f, 0x51, 0xac, 0xfe, 0x4d, 0x81, 0x73, 0xf1, 0x9b, 0xf9, 0xff, 0x45, 0x43, 0xd1, 0x6b, + 0x30, 0xe3, 0xcd, 0x2e, 0xdf, 0xa4, 0x87, 0xad, 0xa6, 0x88, 0xc2, 0x79, 0x01, 0x36, 0xb3, 0x15, + 0x92, 0xb0, 0xcc, 0xa7, 0xfe, 0x24, 0x07, 0x65, 0xbf, 0x62, 0xa1, 0x6f, 0x85, 0x5f, 0x5a, 0x94, + 0xcc, 0xbb, 0x3b, 0xd8, 0x74, 0x23, 0x5f, 0x5b, 0x9e, 0xff, 0xff, 0x84, 0x2e, 0xfb, 0xed, 0x92, + 0x37, 0xda, 0x25, 0xcf, 0xf2, 0xd1, 0xa9, 0xa4, 0x90, 0x66, 0x2a, 0x51, 0x3f, 0xc8, 0xc3, 0xc2, + 0x48, 0x01, 0x47, 0x37, 0x23, 0x39, 0xef, 0x4a, 0x2c, 0xe7, 0x2d, 0x8e, 0x08, 0x9c, 0x5a, 0xca, + 0x4b, 0xce, 0x44, 0xf9, 0x09, 0x66, 0xa2, 0x42, 0xda, 0x4c, 0x54, 0x3c, 0x3e, 0x13, 0xc5, 0xa2, + 0x53, 0x4a, 0x15, 0x9d, 0x3e, 0xcc, 0xc7, 0x3a, 0x12, 0x74, 0x1d, 0xca, 0x86, 0xe9, 0x50, 0x6d, + 0x60, 0x53, 0x71, 0x1f, 0x1f, 0x34, 0xab, 0x2d, 0xb1, 0x8e, 0x03, 0x0e, 0x54, 0x87, 0x69, 0x47, + 0xdb, 0xa3, 0x9d, 0x41, 0x97, 0x76, 0x78, 0x40, 0xca, 0xe1, 0x57, 0xf5, 0x6d, 0x9f, 0x80, 0x43, + 0x1e, 0xf5, 0x5f, 0x05, 0x98, 0x95, 0x7b, 0x92, 0x14, 0x7f, 0x23, 0x78, 0x07, 0x66, 0x88, 0x69, + 0x5a, 0x2e, 0xf1, 0x1a, 0xc7, 0x5c, 0xea, 0x0b, 0x52, 0x59, 0x4f, 0xed, 0x76, 0x08, 0xe1, 0x5d, + 0x90, 0x06, 0x47, 0x59, 0xa2, 0x60, 0x59, 0x13, 0xba, 0x2d, 0xba, 0xc5, 0x7c, 0xfa, 0x6e, 0xb1, + 0x1c, 0xeb, 0x14, 0xeb, 0x30, 0x1d, 0x34, 0x55, 0xe2, 0x6f, 0x24, 0x81, 0x7f, 0xc2, 0x33, 0x19, + 0xf2, 0xa0, 0x5a, 0x24, 0x8a, 0x45, 0x1e, 0xc5, 0xb9, 0x63, 0xa6, 0xfe, 0x78, 0x2b, 0x5a, 0x9a, + 0x74, 0x2b, 0x3a, 0x35, 0x91, 0x56, 0xb4, 0xfa, 0x35, 0x38, 0x17, 0x8f, 0x60, 0xa6, 0x4f, 0xb4, + 0x5b, 0x80, 0x46, 0xf5, 0x3f, 0xab, 0xf7, 0x1a, 0x95, 0x08, 0x13, 0x51, 0xe3, 0xda, 0x93, 0xa7, + 0x4b, 0x67, 0x3e, 0x7a, 0xba, 0x74, 0xe6, 0x93, 0xa7, 0x4b, 0x67, 0x7e, 0x34, 0x5c, 0x52, 0x9e, + 0x0c, 0x97, 0x94, 0x8f, 0x86, 0x4b, 0xca, 0x27, 0xc3, 0x25, 0xe5, 0xd3, 0xe1, 0x92, 0xf2, 0xd3, + 0xbf, 0x2f, 0x9d, 0x79, 0x98, 0x3b, 0x58, 0xfd, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x39, 0xdb, + 0xfe, 0xb3, 0x60, 0x2c, 0x00, 0x00, +} + +func (m *DockerImageReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DockerImageReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DockerImageReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.ID) + copy(dAtA[i:], m.ID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ID))) + i-- + dAtA[i] = 0x2a + i -= len(m.Tag) + copy(dAtA[i:], m.Tag) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Tag))) + i-- + dAtA[i] = 0x22 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0x12 + i -= len(m.Registry) + copy(dAtA[i:], m.Registry) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Registry))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Image) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Image) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Image) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.DockerImageConfig) + copy(dAtA[i:], m.DockerImageConfig) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DockerImageConfig))) + i-- + dAtA[i] = 0x52 + i -= len(m.DockerImageManifestMediaType) + copy(dAtA[i:], m.DockerImageManifestMediaType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DockerImageManifestMediaType))) + i-- + dAtA[i] = 0x4a + if len(m.DockerImageSignatures) > 0 { + for iNdEx := len(m.DockerImageSignatures) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.DockerImageSignatures[iNdEx]) + copy(dAtA[i:], m.DockerImageSignatures[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DockerImageSignatures[iNdEx]))) + i-- + dAtA[i] = 0x42 + } + } + if len(m.Signatures) > 0 { + for iNdEx := len(m.Signatures) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Signatures[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } + if len(m.DockerImageLayers) > 0 { + for iNdEx := len(m.DockerImageLayers) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.DockerImageLayers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + } + i -= len(m.DockerImageManifest) + copy(dAtA[i:], m.DockerImageManifest) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DockerImageManifest))) + i-- + dAtA[i] = 0x2a + i -= len(m.DockerImageMetadataVersion) + copy(dAtA[i:], m.DockerImageMetadataVersion) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DockerImageMetadataVersion))) + i-- + dAtA[i] = 0x22 + { + size, err := m.DockerImageMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.DockerImageReference) + copy(dAtA[i:], m.DockerImageReference) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DockerImageReference))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageBlobReferences) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageBlobReferences) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageBlobReferences) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.ImageMissing { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + if m.Config != nil { + i -= len(*m.Config) + copy(dAtA[i:], *m.Config) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Config))) + i-- + dAtA[i] = 0x12 + } + if len(m.Layers) > 0 { + for iNdEx := len(m.Layers) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Layers[iNdEx]) + copy(dAtA[i:], m.Layers[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Layers[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *ImageImportSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageImportSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageImportSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.ReferencePolicy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + i-- + if m.IncludeManifest { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + { + size, err := m.ImportPolicy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.To != nil { + { + size, err := m.To.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + { + size, err := m.From.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageImportStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageImportStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageImportStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Tag) + copy(dAtA[i:], m.Tag) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Tag))) + i-- + dAtA[i] = 0x1a + if m.Image != nil { + { + size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageLayer) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageLayer) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageLayer) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.MediaType) + copy(dAtA[i:], m.MediaType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MediaType))) + i-- + dAtA[i] = 0x1a + i = encodeVarintGenerated(dAtA, i, uint64(m.LayerSize)) + i-- + dAtA[i] = 0x10 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageLayerData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageLayerData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageLayerData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.MediaType) + copy(dAtA[i:], m.MediaType) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MediaType))) + i-- + dAtA[i] = 0x12 + if m.LayerSize != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.LayerSize)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *ImageList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageLookupPolicy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageLookupPolicy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageLookupPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.Local { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + return len(dAtA) - i, nil +} + +func (m *ImageSignature) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageSignature) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageSignature) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.IssuedTo != nil { + { + size, err := m.IssuedTo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + if m.IssuedBy != nil { + { + size, err := m.IssuedBy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + if m.Created != nil { + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + if len(m.SignedClaims) > 0 { + keysForSignedClaims := make([]string, 0, len(m.SignedClaims)) + for k := range m.SignedClaims { + keysForSignedClaims = append(keysForSignedClaims, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSignedClaims) + for iNdEx := len(keysForSignedClaims) - 1; iNdEx >= 0; iNdEx-- { + v := m.SignedClaims[string(keysForSignedClaims[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForSignedClaims[iNdEx]) + copy(dAtA[i:], keysForSignedClaims[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForSignedClaims[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x32 + } + } + i -= len(m.ImageIdentity) + copy(dAtA[i:], m.ImageIdentity) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ImageIdentity))) + i-- + dAtA[i] = 0x2a + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if m.Content != nil { + i -= len(m.Content) + copy(dAtA[i:], m.Content) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Content))) + i-- + dAtA[i] = 0x1a + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageStream) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageStream) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageStream) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageStreamImage) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageStreamImage) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageStreamImage) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageStreamImport) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageStreamImport) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageStreamImport) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageStreamImportSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageStreamImportSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageStreamImportSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Images) > 0 { + for iNdEx := len(m.Images) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Images[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.Repository != nil { + { + size, err := m.Repository.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i-- + if m.Import { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + +func (m *ImageStreamImportStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageStreamImportStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageStreamImportStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Images) > 0 { + for iNdEx := len(m.Images) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Images[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.Repository != nil { + { + size, err := m.Repository.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Import != nil { + { + size, err := m.Import.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ImageStreamLayers) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageStreamLayers) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageStreamLayers) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Images) > 0 { + keysForImages := make([]string, 0, len(m.Images)) + for k := range m.Images { + keysForImages = append(keysForImages, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForImages) + for iNdEx := len(keysForImages) - 1; iNdEx >= 0; iNdEx-- { + v := m.Images[string(keysForImages[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForImages[iNdEx]) + copy(dAtA[i:], keysForImages[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForImages[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x1a + } + } + if len(m.Blobs) > 0 { + keysForBlobs := make([]string, 0, len(m.Blobs)) + for k := range m.Blobs { + keysForBlobs = append(keysForBlobs, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForBlobs) + for iNdEx := len(keysForBlobs) - 1; iNdEx >= 0; iNdEx-- { + v := m.Blobs[string(keysForBlobs[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForBlobs[iNdEx]) + copy(dAtA[i:], keysForBlobs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForBlobs[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageStreamList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageStreamList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageStreamList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageStreamMapping) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageStreamMapping) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageStreamMapping) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Tag) + copy(dAtA[i:], m.Tag) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Tag))) + i-- + dAtA[i] = 0x1a + { + size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageStreamSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageStreamSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageStreamSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.LookupPolicy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.Tags) > 0 { + for iNdEx := len(m.Tags) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Tags[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.DockerImageRepository) + copy(dAtA[i:], m.DockerImageRepository) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DockerImageRepository))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageStreamStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageStreamStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageStreamStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.PublicDockerImageRepository) + copy(dAtA[i:], m.PublicDockerImageRepository) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PublicDockerImageRepository))) + i-- + dAtA[i] = 0x1a + if len(m.Tags) > 0 { + for iNdEx := len(m.Tags) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Tags[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.DockerImageRepository) + copy(dAtA[i:], m.DockerImageRepository) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DockerImageRepository))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageStreamTag) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageStreamTag) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageStreamTag) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.LookupPolicy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + { + size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + i = encodeVarintGenerated(dAtA, i, uint64(m.Generation)) + i-- + dAtA[i] = 0x18 + if m.Tag != nil { + { + size, err := m.Tag.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageStreamTagList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageStreamTagList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageStreamTagList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageTag) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageTag) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageTag) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Image != nil { + { + size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.Status != nil { + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Spec != nil { + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ImageTagList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ImageTagList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ImageTagList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *NamedTagEventList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NamedTagEventList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NamedTagEventList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Tag) + copy(dAtA[i:], m.Tag) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Tag))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RepositoryImportSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RepositoryImportSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RepositoryImportSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.ReferencePolicy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + i-- + if m.IncludeManifest { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + { + size, err := m.ImportPolicy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.From.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RepositoryImportStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RepositoryImportStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RepositoryImportStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.AdditionalTags) > 0 { + for iNdEx := len(m.AdditionalTags) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AdditionalTags[iNdEx]) + copy(dAtA[i:], m.AdditionalTags[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AdditionalTags[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + if len(m.Images) > 0 { + for iNdEx := len(m.Images) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Images[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SignatureCondition) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SignatureCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SignatureCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x32 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x2a + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size, err := m.LastProbeTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SignatureGenericEntity) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SignatureGenericEntity) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SignatureGenericEntity) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.CommonName) + copy(dAtA[i:], m.CommonName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CommonName))) + i-- + dAtA[i] = 0x12 + i -= len(m.Organization) + copy(dAtA[i:], m.Organization) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Organization))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SignatureIssuer) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SignatureIssuer) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SignatureIssuer) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.SignatureGenericEntity.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SignatureSubject) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SignatureSubject) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SignatureSubject) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.PublicKeyID) + copy(dAtA[i:], m.PublicKeyID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PublicKeyID))) + i-- + dAtA[i] = 0x12 + { + size, err := m.SignatureGenericEntity.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TagEvent) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TagEvent) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TagEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.Generation)) + i-- + dAtA[i] = 0x20 + i -= len(m.Image) + copy(dAtA[i:], m.Image) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Image))) + i-- + dAtA[i] = 0x1a + i -= len(m.DockerImageReference) + copy(dAtA[i:], m.DockerImageReference) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DockerImageReference))) + i-- + dAtA[i] = 0x12 + { + size, err := m.Created.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TagEventCondition) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TagEventCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TagEventCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.Generation)) + i-- + dAtA[i] = 0x30 + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TagImportPolicy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TagImportPolicy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TagImportPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.Scheduled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + i-- + if m.Insecure { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + +func (m *TagReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TagReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TagReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.ReferencePolicy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + { + size, err := m.ImportPolicy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + if m.Generation != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Generation)) + i-- + dAtA[i] = 0x28 + } + i-- + if m.Reference { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + if m.From != nil { + { + size, err := m.From.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if len(m.Annotations) > 0 { + keysForAnnotations := make([]string, 0, len(m.Annotations)) + for k := range m.Annotations { + keysForAnnotations = append(keysForAnnotations, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) + for iNdEx := len(keysForAnnotations) - 1; iNdEx >= 0; iNdEx-- { + v := m.Annotations[string(keysForAnnotations[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForAnnotations[iNdEx]) + copy(dAtA[i:], keysForAnnotations[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForAnnotations[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TagReferencePolicy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TagReferencePolicy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TagReferencePolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *DockerImageReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Registry) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Tag) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ID) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Image) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DockerImageReference) + n += 1 + l + sovGenerated(uint64(l)) + l = m.DockerImageMetadata.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DockerImageMetadataVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DockerImageManifest) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.DockerImageLayers) > 0 { + for _, e := range m.DockerImageLayers { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Signatures) > 0 { + for _, e := range m.Signatures { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.DockerImageSignatures) > 0 { + for _, b := range m.DockerImageSignatures { + l = len(b) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.DockerImageManifestMediaType) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DockerImageConfig) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ImageBlobReferences) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Layers) > 0 { + for _, s := range m.Layers { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.Config != nil { + l = len(*m.Config) + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + return n +} + +func (m *ImageImportSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.From.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.To != nil { + l = m.To.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = m.ImportPolicy.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = m.ReferencePolicy.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ImageImportStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Image != nil { + l = m.Image.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.Tag) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ImageLayer) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.LayerSize)) + l = len(m.MediaType) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ImageLayerData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.LayerSize != nil { + n += 1 + sovGenerated(uint64(*m.LayerSize)) + } + l = len(m.MediaType) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ImageList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ImageLookupPolicy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 2 + return n +} + +func (m *ImageSignature) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.Content != nil { + l = len(m.Content) + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.ImageIdentity) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.SignedClaims) > 0 { + for k, v := range m.SignedClaims { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if m.Created != nil { + l = m.Created.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.IssuedBy != nil { + l = m.IssuedBy.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.IssuedTo != nil { + l = m.IssuedTo.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ImageStream) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ImageStreamImage) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Image.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ImageStreamImport) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ImageStreamImportSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 2 + if m.Repository != nil { + l = m.Repository.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Images) > 0 { + for _, e := range m.Images { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ImageStreamImportStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Import != nil { + l = m.Import.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Repository != nil { + l = m.Repository.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Images) > 0 { + for _, e := range m.Images { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ImageStreamLayers) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Blobs) > 0 { + for k, v := range m.Blobs { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Images) > 0 { + for k, v := range m.Images { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *ImageStreamList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ImageStreamMapping) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Image.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Tag) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ImageStreamSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DockerImageRepository) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Tags) > 0 { + for _, e := range m.Tags { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.LookupPolicy.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ImageStreamStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DockerImageRepository) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Tags) > 0 { + for _, e := range m.Tags { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.PublicDockerImageRepository) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ImageStreamTag) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Tag != nil { + l = m.Tag.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 1 + sovGenerated(uint64(m.Generation)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.Image.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.LookupPolicy.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ImageStreamTagList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ImageTag) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Spec != nil { + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Status != nil { + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Image != nil { + l = m.Image.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ImageTagList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *NamedTagEventList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Tag) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *RepositoryImportSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.From.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.ImportPolicy.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = m.ReferencePolicy.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RepositoryImportStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Images) > 0 { + for _, e := range m.Images { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.AdditionalTags) > 0 { + for _, s := range m.AdditionalTags { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *SignatureCondition) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastProbeTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SignatureGenericEntity) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Organization) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.CommonName) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SignatureIssuer) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.SignatureGenericEntity.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SignatureSubject) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.SignatureGenericEntity.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.PublicKeyID) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *TagEvent) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Created.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DockerImageReference) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Image) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Generation)) + return n +} + +func (m *TagEventCondition) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Generation)) + return n +} + +func (m *TagImportPolicy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 2 + n += 2 + return n +} + +func (m *TagReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Annotations) > 0 { + for k, v := range m.Annotations { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if m.From != nil { + l = m.From.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + if m.Generation != nil { + n += 1 + sovGenerated(uint64(*m.Generation)) + } + l = m.ImportPolicy.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.ReferencePolicy.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *TagReferencePolicy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *DockerImageReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DockerImageReference{`, + `Registry:` + fmt.Sprintf("%v", this.Registry) + `,`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Tag:` + fmt.Sprintf("%v", this.Tag) + `,`, + `ID:` + fmt.Sprintf("%v", this.ID) + `,`, + `}`, + }, "") + return s +} +func (this *Image) String() string { + if this == nil { + return "nil" + } + repeatedStringForDockerImageLayers := "[]ImageLayer{" + for _, f := range this.DockerImageLayers { + repeatedStringForDockerImageLayers += strings.Replace(strings.Replace(f.String(), "ImageLayer", "ImageLayer", 1), `&`, ``, 1) + "," + } + repeatedStringForDockerImageLayers += "}" + repeatedStringForSignatures := "[]ImageSignature{" + for _, f := range this.Signatures { + repeatedStringForSignatures += strings.Replace(strings.Replace(f.String(), "ImageSignature", "ImageSignature", 1), `&`, ``, 1) + "," + } + repeatedStringForSignatures += "}" + s := strings.Join([]string{`&Image{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `DockerImageReference:` + fmt.Sprintf("%v", this.DockerImageReference) + `,`, + `DockerImageMetadata:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.DockerImageMetadata), "RawExtension", "runtime.RawExtension", 1), `&`, ``, 1) + `,`, + `DockerImageMetadataVersion:` + fmt.Sprintf("%v", this.DockerImageMetadataVersion) + `,`, + `DockerImageManifest:` + fmt.Sprintf("%v", this.DockerImageManifest) + `,`, + `DockerImageLayers:` + repeatedStringForDockerImageLayers + `,`, + `Signatures:` + repeatedStringForSignatures + `,`, + `DockerImageSignatures:` + fmt.Sprintf("%v", this.DockerImageSignatures) + `,`, + `DockerImageManifestMediaType:` + fmt.Sprintf("%v", this.DockerImageManifestMediaType) + `,`, + `DockerImageConfig:` + fmt.Sprintf("%v", this.DockerImageConfig) + `,`, + `}`, + }, "") + return s +} +func (this *ImageBlobReferences) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageBlobReferences{`, + `Layers:` + fmt.Sprintf("%v", this.Layers) + `,`, + `Config:` + valueToStringGenerated(this.Config) + `,`, + `ImageMissing:` + fmt.Sprintf("%v", this.ImageMissing) + `,`, + `}`, + }, "") + return s +} +func (this *ImageImportSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageImportSpec{`, + `From:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.From), "ObjectReference", "v11.ObjectReference", 1), `&`, ``, 1) + `,`, + `To:` + strings.Replace(fmt.Sprintf("%v", this.To), "LocalObjectReference", "v11.LocalObjectReference", 1) + `,`, + `ImportPolicy:` + strings.Replace(strings.Replace(this.ImportPolicy.String(), "TagImportPolicy", "TagImportPolicy", 1), `&`, ``, 1) + `,`, + `IncludeManifest:` + fmt.Sprintf("%v", this.IncludeManifest) + `,`, + `ReferencePolicy:` + strings.Replace(strings.Replace(this.ReferencePolicy.String(), "TagReferencePolicy", "TagReferencePolicy", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageImportStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageImportStatus{`, + `Status:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Status), "Status", "v1.Status", 1), `&`, ``, 1) + `,`, + `Image:` + strings.Replace(this.Image.String(), "Image", "Image", 1) + `,`, + `Tag:` + fmt.Sprintf("%v", this.Tag) + `,`, + `}`, + }, "") + return s +} +func (this *ImageLayer) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageLayer{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `LayerSize:` + fmt.Sprintf("%v", this.LayerSize) + `,`, + `MediaType:` + fmt.Sprintf("%v", this.MediaType) + `,`, + `}`, + }, "") + return s +} +func (this *ImageLayerData) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageLayerData{`, + `LayerSize:` + valueToStringGenerated(this.LayerSize) + `,`, + `MediaType:` + fmt.Sprintf("%v", this.MediaType) + `,`, + `}`, + }, "") + return s +} +func (this *ImageList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Image{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Image", "Image", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ImageList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ImageLookupPolicy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageLookupPolicy{`, + `Local:` + fmt.Sprintf("%v", this.Local) + `,`, + `}`, + }, "") + return s +} +func (this *ImageSignature) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]SignatureCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "SignatureCondition", "SignatureCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + keysForSignedClaims := make([]string, 0, len(this.SignedClaims)) + for k := range this.SignedClaims { + keysForSignedClaims = append(keysForSignedClaims, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSignedClaims) + mapStringForSignedClaims := "map[string]string{" + for _, k := range keysForSignedClaims { + mapStringForSignedClaims += fmt.Sprintf("%v: %v,", k, this.SignedClaims[k]) + } + mapStringForSignedClaims += "}" + s := strings.Join([]string{`&ImageSignature{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Content:` + valueToStringGenerated(this.Content) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `ImageIdentity:` + fmt.Sprintf("%v", this.ImageIdentity) + `,`, + `SignedClaims:` + mapStringForSignedClaims + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Time", "v1.Time", 1) + `,`, + `IssuedBy:` + strings.Replace(this.IssuedBy.String(), "SignatureIssuer", "SignatureIssuer", 1) + `,`, + `IssuedTo:` + strings.Replace(this.IssuedTo.String(), "SignatureSubject", "SignatureSubject", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStream) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStream{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ImageStreamSpec", "ImageStreamSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ImageStreamStatus", "ImageStreamStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamImage) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStreamImage{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Image:` + strings.Replace(strings.Replace(this.Image.String(), "Image", "Image", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamImport) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStreamImport{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ImageStreamImportSpec", "ImageStreamImportSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ImageStreamImportStatus", "ImageStreamImportStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamImportSpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForImages := "[]ImageImportSpec{" + for _, f := range this.Images { + repeatedStringForImages += strings.Replace(strings.Replace(f.String(), "ImageImportSpec", "ImageImportSpec", 1), `&`, ``, 1) + "," + } + repeatedStringForImages += "}" + s := strings.Join([]string{`&ImageStreamImportSpec{`, + `Import:` + fmt.Sprintf("%v", this.Import) + `,`, + `Repository:` + strings.Replace(this.Repository.String(), "RepositoryImportSpec", "RepositoryImportSpec", 1) + `,`, + `Images:` + repeatedStringForImages + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamImportStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForImages := "[]ImageImportStatus{" + for _, f := range this.Images { + repeatedStringForImages += strings.Replace(strings.Replace(f.String(), "ImageImportStatus", "ImageImportStatus", 1), `&`, ``, 1) + "," + } + repeatedStringForImages += "}" + s := strings.Join([]string{`&ImageStreamImportStatus{`, + `Import:` + strings.Replace(this.Import.String(), "ImageStream", "ImageStream", 1) + `,`, + `Repository:` + strings.Replace(this.Repository.String(), "RepositoryImportStatus", "RepositoryImportStatus", 1) + `,`, + `Images:` + repeatedStringForImages + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamLayers) String() string { + if this == nil { + return "nil" + } + keysForBlobs := make([]string, 0, len(this.Blobs)) + for k := range this.Blobs { + keysForBlobs = append(keysForBlobs, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForBlobs) + mapStringForBlobs := "map[string]ImageLayerData{" + for _, k := range keysForBlobs { + mapStringForBlobs += fmt.Sprintf("%v: %v,", k, this.Blobs[k]) + } + mapStringForBlobs += "}" + keysForImages := make([]string, 0, len(this.Images)) + for k := range this.Images { + keysForImages = append(keysForImages, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForImages) + mapStringForImages := "map[string]ImageBlobReferences{" + for _, k := range keysForImages { + mapStringForImages += fmt.Sprintf("%v: %v,", k, this.Images[k]) + } + mapStringForImages += "}" + s := strings.Join([]string{`&ImageStreamLayers{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Blobs:` + mapStringForBlobs + `,`, + `Images:` + mapStringForImages + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ImageStream{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ImageStream", "ImageStream", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ImageStreamList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamMapping) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStreamMapping{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Image:` + strings.Replace(strings.Replace(this.Image.String(), "Image", "Image", 1), `&`, ``, 1) + `,`, + `Tag:` + fmt.Sprintf("%v", this.Tag) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamSpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForTags := "[]TagReference{" + for _, f := range this.Tags { + repeatedStringForTags += strings.Replace(strings.Replace(f.String(), "TagReference", "TagReference", 1), `&`, ``, 1) + "," + } + repeatedStringForTags += "}" + s := strings.Join([]string{`&ImageStreamSpec{`, + `DockerImageRepository:` + fmt.Sprintf("%v", this.DockerImageRepository) + `,`, + `Tags:` + repeatedStringForTags + `,`, + `LookupPolicy:` + strings.Replace(strings.Replace(this.LookupPolicy.String(), "ImageLookupPolicy", "ImageLookupPolicy", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForTags := "[]NamedTagEventList{" + for _, f := range this.Tags { + repeatedStringForTags += strings.Replace(strings.Replace(f.String(), "NamedTagEventList", "NamedTagEventList", 1), `&`, ``, 1) + "," + } + repeatedStringForTags += "}" + s := strings.Join([]string{`&ImageStreamStatus{`, + `DockerImageRepository:` + fmt.Sprintf("%v", this.DockerImageRepository) + `,`, + `Tags:` + repeatedStringForTags + `,`, + `PublicDockerImageRepository:` + fmt.Sprintf("%v", this.PublicDockerImageRepository) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamTag) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]TagEventCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "TagEventCondition", "TagEventCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&ImageStreamTag{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Tag:` + strings.Replace(this.Tag.String(), "TagReference", "TagReference", 1) + `,`, + `Generation:` + fmt.Sprintf("%v", this.Generation) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `Image:` + strings.Replace(strings.Replace(this.Image.String(), "Image", "Image", 1), `&`, ``, 1) + `,`, + `LookupPolicy:` + strings.Replace(strings.Replace(this.LookupPolicy.String(), "ImageLookupPolicy", "ImageLookupPolicy", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamTagList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ImageStreamTag{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ImageStreamTag", "ImageStreamTag", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ImageStreamTagList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ImageTag) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageTag{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(this.Spec.String(), "TagReference", "TagReference", 1) + `,`, + `Status:` + strings.Replace(this.Status.String(), "NamedTagEventList", "NamedTagEventList", 1) + `,`, + `Image:` + strings.Replace(this.Image.String(), "Image", "Image", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageTagList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ImageTag{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ImageTag", "ImageTag", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ImageTagList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *NamedTagEventList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]TagEvent{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "TagEvent", "TagEvent", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + repeatedStringForConditions := "[]TagEventCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "TagEventCondition", "TagEventCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&NamedTagEventList{`, + `Tag:` + fmt.Sprintf("%v", this.Tag) + `,`, + `Items:` + repeatedStringForItems + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `}`, + }, "") + return s +} +func (this *RepositoryImportSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RepositoryImportSpec{`, + `From:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.From), "ObjectReference", "v11.ObjectReference", 1), `&`, ``, 1) + `,`, + `ImportPolicy:` + strings.Replace(strings.Replace(this.ImportPolicy.String(), "TagImportPolicy", "TagImportPolicy", 1), `&`, ``, 1) + `,`, + `IncludeManifest:` + fmt.Sprintf("%v", this.IncludeManifest) + `,`, + `ReferencePolicy:` + strings.Replace(strings.Replace(this.ReferencePolicy.String(), "TagReferencePolicy", "TagReferencePolicy", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RepositoryImportStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForImages := "[]ImageImportStatus{" + for _, f := range this.Images { + repeatedStringForImages += strings.Replace(strings.Replace(f.String(), "ImageImportStatus", "ImageImportStatus", 1), `&`, ``, 1) + "," + } + repeatedStringForImages += "}" + s := strings.Join([]string{`&RepositoryImportStatus{`, + `Status:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Status), "Status", "v1.Status", 1), `&`, ``, 1) + `,`, + `Images:` + repeatedStringForImages + `,`, + `AdditionalTags:` + fmt.Sprintf("%v", this.AdditionalTags) + `,`, + `}`, + }, "") + return s +} +func (this *SignatureCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SignatureCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastProbeTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastProbeTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *SignatureGenericEntity) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SignatureGenericEntity{`, + `Organization:` + fmt.Sprintf("%v", this.Organization) + `,`, + `CommonName:` + fmt.Sprintf("%v", this.CommonName) + `,`, + `}`, + }, "") + return s +} +func (this *SignatureIssuer) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SignatureIssuer{`, + `SignatureGenericEntity:` + strings.Replace(strings.Replace(this.SignatureGenericEntity.String(), "SignatureGenericEntity", "SignatureGenericEntity", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *SignatureSubject) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SignatureSubject{`, + `SignatureGenericEntity:` + strings.Replace(strings.Replace(this.SignatureGenericEntity.String(), "SignatureGenericEntity", "SignatureGenericEntity", 1), `&`, ``, 1) + `,`, + `PublicKeyID:` + fmt.Sprintf("%v", this.PublicKeyID) + `,`, + `}`, + }, "") + return s +} +func (this *TagEvent) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TagEvent{`, + `Created:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Created), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `DockerImageReference:` + fmt.Sprintf("%v", this.DockerImageReference) + `,`, + `Image:` + fmt.Sprintf("%v", this.Image) + `,`, + `Generation:` + fmt.Sprintf("%v", this.Generation) + `,`, + `}`, + }, "") + return s +} +func (this *TagEventCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TagEventCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Generation:` + fmt.Sprintf("%v", this.Generation) + `,`, + `}`, + }, "") + return s +} +func (this *TagImportPolicy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TagImportPolicy{`, + `Insecure:` + fmt.Sprintf("%v", this.Insecure) + `,`, + `Scheduled:` + fmt.Sprintf("%v", this.Scheduled) + `,`, + `}`, + }, "") + return s +} +func (this *TagReference) String() string { + if this == nil { + return "nil" + } + keysForAnnotations := make([]string, 0, len(this.Annotations)) + for k := range this.Annotations { + keysForAnnotations = append(keysForAnnotations, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) + mapStringForAnnotations := "map[string]string{" + for _, k := range keysForAnnotations { + mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) + } + mapStringForAnnotations += "}" + s := strings.Join([]string{`&TagReference{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Annotations:` + mapStringForAnnotations + `,`, + `From:` + strings.Replace(fmt.Sprintf("%v", this.From), "ObjectReference", "v11.ObjectReference", 1) + `,`, + `Reference:` + fmt.Sprintf("%v", this.Reference) + `,`, + `Generation:` + valueToStringGenerated(this.Generation) + `,`, + `ImportPolicy:` + strings.Replace(strings.Replace(this.ImportPolicy.String(), "TagImportPolicy", "TagImportPolicy", 1), `&`, ``, 1) + `,`, + `ReferencePolicy:` + strings.Replace(strings.Replace(this.ReferencePolicy.String(), "TagReferencePolicy", "TagReferencePolicy", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *TagReferencePolicy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TagReferencePolicy{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *DockerImageReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DockerImageReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DockerImageReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Registry", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Registry = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tag", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Tag = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Image) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Image: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Image: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerImageReference", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DockerImageReference = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerImageMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.DockerImageMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerImageMetadataVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DockerImageMetadataVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerImageManifest", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DockerImageManifest = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerImageLayers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DockerImageLayers = append(m.DockerImageLayers, ImageLayer{}) + if err := m.DockerImageLayers[len(m.DockerImageLayers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signatures", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signatures = append(m.Signatures, ImageSignature{}) + if err := m.Signatures[len(m.Signatures)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerImageSignatures", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DockerImageSignatures = append(m.DockerImageSignatures, make([]byte, postIndex-iNdEx)) + copy(m.DockerImageSignatures[len(m.DockerImageSignatures)-1], dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerImageManifestMediaType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DockerImageManifestMediaType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerImageConfig", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DockerImageConfig = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageBlobReferences) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageBlobReferences: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageBlobReferences: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Layers", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Layers = append(m.Layers, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Config = &s + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ImageMissing", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ImageMissing = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageImportSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageImportSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageImportSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.From.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field To", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.To == nil { + m.To = &v11.LocalObjectReference{} + } + if err := m.To.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImportPolicy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ImportPolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IncludeManifest", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IncludeManifest = bool(v != 0) + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReferencePolicy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ReferencePolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageImportStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageImportStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageImportStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Image == nil { + m.Image = &Image{} + } + if err := m.Image.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tag", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Tag = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageLayer) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageLayer: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageLayer: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LayerSize", wireType) + } + m.LayerSize = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LayerSize |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MediaType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MediaType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageLayerData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageLayerData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageLayerData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LayerSize", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LayerSize = &v + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MediaType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MediaType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Image{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageLookupPolicy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageLookupPolicy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageLookupPolicy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Local", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Local = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageSignature) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageSignature: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageSignature: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Content", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Content = append(m.Content[:0], dAtA[iNdEx:postIndex]...) + if m.Content == nil { + m.Content = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, SignatureCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImageIdentity", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ImageIdentity = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SignedClaims", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SignedClaims == nil { + m.SignedClaims = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.SignedClaims[mapkey] = mapvalue + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Created", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Created == nil { + m.Created = &v1.Time{} + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IssuedBy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.IssuedBy == nil { + m.IssuedBy = &SignatureIssuer{} + } + if err := m.IssuedBy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IssuedTo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.IssuedTo == nil { + m.IssuedTo = &SignatureSubject{} + } + if err := m.IssuedTo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageStream) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageStream: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageStream: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageStreamImage) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageStreamImage: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageStreamImage: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Image.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageStreamImport) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageStreamImport: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageStreamImport: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageStreamImportSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageStreamImportSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageStreamImportSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Import", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Import = bool(v != 0) + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Repository", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Repository == nil { + m.Repository = &RepositoryImportSpec{} + } + if err := m.Repository.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Images", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Images = append(m.Images, ImageImportSpec{}) + if err := m.Images[len(m.Images)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageStreamImportStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageStreamImportStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageStreamImportStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Import", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Import == nil { + m.Import = &ImageStream{} + } + if err := m.Import.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Repository", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Repository == nil { + m.Repository = &RepositoryImportStatus{} + } + if err := m.Repository.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Images", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Images = append(m.Images, ImageImportStatus{}) + if err := m.Images[len(m.Images)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageStreamLayers) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageStreamLayers: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageStreamLayers: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Blobs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Blobs == nil { + m.Blobs = make(map[string]ImageLayerData) + } + var mapkey string + mapvalue := &ImageLayerData{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &ImageLayerData{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Blobs[mapkey] = *mapvalue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Images", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Images == nil { + m.Images = make(map[string]ImageBlobReferences) + } + var mapkey string + mapvalue := &ImageBlobReferences{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &ImageBlobReferences{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Images[mapkey] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageStreamList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageStreamList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageStreamList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ImageStream{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageStreamMapping) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageStreamMapping: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageStreamMapping: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Image.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tag", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Tag = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageStreamSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageStreamSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageStreamSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerImageRepository", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DockerImageRepository = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tags", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Tags = append(m.Tags, TagReference{}) + if err := m.Tags[len(m.Tags)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LookupPolicy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LookupPolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageStreamStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageStreamStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageStreamStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerImageRepository", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DockerImageRepository = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tags", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Tags = append(m.Tags, NamedTagEventList{}) + if err := m.Tags[len(m.Tags)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PublicDockerImageRepository", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PublicDockerImageRepository = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageStreamTag) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageStreamTag: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageStreamTag: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tag", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Tag == nil { + m.Tag = &TagReference{} + } + if err := m.Tag.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Generation", wireType) + } + m.Generation = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Generation |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, TagEventCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Image.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LookupPolicy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LookupPolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageStreamTagList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageStreamTagList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageStreamTagList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ImageStreamTag{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageTag) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageTag: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageTag: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Spec == nil { + m.Spec = &TagReference{} + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Status == nil { + m.Status = &NamedTagEventList{} + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Image == nil { + m.Image = &Image{} + } + if err := m.Image.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ImageTagList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ImageTagList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ImageTagList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ImageTag{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NamedTagEventList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NamedTagEventList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NamedTagEventList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Tag", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Tag = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, TagEvent{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, TagEventCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RepositoryImportSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RepositoryImportSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RepositoryImportSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.From.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImportPolicy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ImportPolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IncludeManifest", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IncludeManifest = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReferencePolicy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ReferencePolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RepositoryImportStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RepositoryImportStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RepositoryImportStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Images", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Images = append(m.Images, ImageImportStatus{}) + if err := m.Images[len(m.Images)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdditionalTags", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AdditionalTags = append(m.AdditionalTags, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SignatureCondition) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SignatureCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SignatureCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = SignatureConditionType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = k8s_io_api_core_v1.ConditionStatus(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastProbeTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastProbeTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SignatureGenericEntity) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SignatureGenericEntity: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SignatureGenericEntity: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Organization", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Organization = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommonName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CommonName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SignatureIssuer) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SignatureIssuer: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SignatureIssuer: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SignatureGenericEntity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SignatureGenericEntity.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SignatureSubject) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SignatureSubject: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SignatureSubject: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SignatureGenericEntity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SignatureGenericEntity.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PublicKeyID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PublicKeyID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TagEvent) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TagEvent: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TagEvent: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Created", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Created.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerImageReference", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DockerImageReference = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Image = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Generation", wireType) + } + m.Generation = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Generation |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TagEventCondition) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TagEventCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TagEventCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = TagEventConditionType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = k8s_io_api_core_v1.ConditionStatus(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Generation", wireType) + } + m.Generation = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Generation |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TagImportPolicy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TagImportPolicy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TagImportPolicy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Insecure", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Insecure = bool(v != 0) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Scheduled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Scheduled = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TagReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TagReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TagReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Annotations == nil { + m.Annotations = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Annotations[mapkey] = mapvalue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.From == nil { + m.From = &v11.ObjectReference{} + } + if err := m.From.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Reference", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Reference = bool(v != 0) + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Generation", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Generation = &v + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImportPolicy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ImportPolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReferencePolicy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ReferencePolicy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TagReferencePolicy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TagReferencePolicy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TagReferencePolicy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = TagReferencePolicyType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vendor/github.com/openshift/api/image/v1/generated.proto b/vendor/github.com/openshift/api/image/v1/generated.proto new file mode 100644 index 0000000000000..69ed48e89c9d9 --- /dev/null +++ b/vendor/github.com/openshift/api/image/v1/generated.proto @@ -0,0 +1,626 @@ + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package github.com.openshift.api.image.v1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// DockerImageReference points to a container image. +message DockerImageReference { + // Registry is the registry that contains the container image + optional string registry = 1; + + // Namespace is the namespace that contains the container image + optional string namespace = 2; + + // Name is the name of the container image + optional string name = 3; + + // Tag is which tag of the container image is being referenced + optional string tag = 4; + + // ID is the identifier for the container image + optional string iD = 5; +} + +// Image is an immutable representation of a container image and metadata at a point in time. +// Images are named by taking a hash of their contents (metadata and content) and any change +// in format, content, or metadata results in a new name. The images resource is primarily +// for use by cluster administrators and integrations like the cluster image registry - end +// users instead access images via the imagestreamtags or imagestreamimages resources. While +// image metadata is stored in the API, any integration that implements the container image +// registry API must provide its own storage for the raw manifest data, image config, and +// layer contents. +message Image { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // DockerImageReference is the string that can be used to pull this image. + optional string dockerImageReference = 2; + + // DockerImageMetadata contains metadata about this image + // +patchStrategy=replace + // +kubebuilder:pruning:PreserveUnknownFields + optional k8s.io.apimachinery.pkg.runtime.RawExtension dockerImageMetadata = 3; + + // DockerImageMetadataVersion conveys the version of the object, which if empty defaults to "1.0" + optional string dockerImageMetadataVersion = 4; + + // DockerImageManifest is the raw JSON of the manifest + optional string dockerImageManifest = 5; + + // DockerImageLayers represents the layers in the image. May not be set if the image does not define that data. + repeated ImageLayer dockerImageLayers = 6; + + // Signatures holds all signatures of the image. + // +patchMergeKey=name + // +patchStrategy=merge + repeated ImageSignature signatures = 7; + + // DockerImageSignatures provides the signatures as opaque blobs. This is a part of manifest schema v1. + repeated bytes dockerImageSignatures = 8; + + // DockerImageManifestMediaType specifies the mediaType of manifest. This is a part of manifest schema v2. + optional string dockerImageManifestMediaType = 9; + + // DockerImageConfig is a JSON blob that the runtime uses to set up the container. This is a part of manifest schema v2. + optional string dockerImageConfig = 10; +} + +// ImageBlobReferences describes the blob references within an image. +message ImageBlobReferences { + // imageMissing is true if the image is referenced by the image stream but the image + // object has been deleted from the API by an administrator. When this field is set, + // layers and config fields may be empty and callers that depend on the image metadata + // should consider the image to be unavailable for download or viewing. + // +optional + optional bool imageMissing = 3; + + // layers is the list of blobs that compose this image, from base layer to top layer. + // All layers referenced by this array will be defined in the blobs map. Some images + // may have zero layers. + // +optional + repeated string layers = 1; + + // config, if set, is the blob that contains the image config. Some images do + // not have separate config blobs and this field will be set to nil if so. + // +optional + optional string config = 2; +} + +// ImageImportSpec describes a request to import a specific image. +message ImageImportSpec { + // From is the source of an image to import; only kind DockerImage is allowed + optional k8s.io.api.core.v1.ObjectReference from = 1; + + // To is a tag in the current image stream to assign the imported image to, if name is not specified the default tag from from.name will be used + optional k8s.io.api.core.v1.LocalObjectReference to = 2; + + // ImportPolicy is the policy controlling how the image is imported + optional TagImportPolicy importPolicy = 3; + + // ReferencePolicy defines how other components should consume the image + optional TagReferencePolicy referencePolicy = 5; + + // IncludeManifest determines if the manifest for each image is returned in the response + optional bool includeManifest = 4; +} + +// ImageImportStatus describes the result of an image import. +message ImageImportStatus { + // Status is the status of the image import, including errors encountered while retrieving the image + optional k8s.io.apimachinery.pkg.apis.meta.v1.Status status = 1; + + // Image is the metadata of that image, if the image was located + optional Image image = 2; + + // Tag is the tag this image was located under, if any + optional string tag = 3; +} + +// ImageLayer represents a single layer of the image. Some images may have multiple layers. Some may have none. +message ImageLayer { + // Name of the layer as defined by the underlying store. + optional string name = 1; + + // Size of the layer in bytes as defined by the underlying store. + optional int64 size = 2; + + // MediaType of the referenced object. + optional string mediaType = 3; +} + +// ImageLayerData contains metadata about an image layer. +message ImageLayerData { + // Size of the layer in bytes as defined by the underlying store. This field is + // optional if the necessary information about size is not available. + optional int64 size = 1; + + // MediaType of the referenced object. + optional string mediaType = 2; +} + +// ImageList is a list of Image objects. +message ImageList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of images + repeated Image items = 2; +} + +// ImageLookupPolicy describes how an image stream can be used to override the image references +// used by pods, builds, and other resources in a namespace. +message ImageLookupPolicy { + // local will change the docker short image references (like "mysql" or + // "php:latest") on objects in this namespace to the image ID whenever they match + // this image stream, instead of reaching out to a remote registry. The name will + // be fully qualified to an image ID if found. The tag's referencePolicy is taken + // into account on the replaced value. Only works within the current namespace. + optional bool local = 3; +} + +// ImageSignature holds a signature of an image. It allows to verify image identity and possibly other claims +// as long as the signature is trusted. Based on this information it is possible to restrict runnable images +// to those matching cluster-wide policy. +// Mandatory fields should be parsed by clients doing image verification. The others are parsed from +// signature's content by the server. They serve just an informative purpose. +message ImageSignature { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Required: Describes a type of stored blob. + optional string type = 2; + + // Required: An opaque binary string which is an image's signature. + optional bytes content = 3; + + // Conditions represent the latest available observations of a signature's current state. + // +patchMergeKey=type + // +patchStrategy=merge + repeated SignatureCondition conditions = 4; + + // A human readable string representing image's identity. It could be a product name and version, or an + // image pull spec (e.g. "registry.access.redhat.com/rhel7/rhel:7.2"). + optional string imageIdentity = 5; + + // Contains claims from the signature. + map signedClaims = 6; + + // If specified, it is the time of signature's creation. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time created = 7; + + // If specified, it holds information about an issuer of signing certificate or key (a person or entity + // who signed the signing certificate or key). + optional SignatureIssuer issuedBy = 8; + + // If specified, it holds information about a subject of signing certificate or key (a person or entity + // who signed the image). + optional SignatureSubject issuedTo = 9; +} + +// An ImageStream stores a mapping of tags to images, metadata overrides that are applied +// when images are tagged in a stream, and an optional reference to a container image +// repository on a registry. Users typically update the spec.tags field to point to external +// images which are imported from container registries using credentials in your namespace +// with the pull secret type, or to existing image stream tags and images which are +// immediately accessible for tagging or pulling. The history of images applied to a tag +// is visible in the status.tags field and any user who can view an image stream is allowed +// to tag that image into their own image streams. Access to pull images from the integrated +// registry is granted by having the "get imagestreams/layers" permission on a given image +// stream. Users may remove a tag by deleting the imagestreamtag resource, which causes both +// spec and status for that tag to be removed. Image stream history is retained until an +// administrator runs the prune operation, which removes references that are no longer in +// use. To preserve a historical image, ensure there is a tag in spec pointing to that image +// by its digest. +message ImageStream { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Spec describes the desired state of this stream + // +optional + optional ImageStreamSpec spec = 2; + + // Status describes the current state of this stream + // +optional + optional ImageStreamStatus status = 3; +} + +// ImageStreamImage represents an Image that is retrieved by image name from an ImageStream. +// User interfaces and regular users can use this resource to access the metadata details of +// a tagged image in the image stream history for viewing, since Image resources are not +// directly accessible to end users. A not found error will be returned if no such image is +// referenced by a tag within the ImageStream. Images are created when spec tags are set on +// an image stream that represent an image in an external registry, when pushing to the +// integrated registry, or when tagging an existing image from one image stream to another. +// The name of an image stream image is in the form "@", where the digest is +// the content addressible identifier for the image (sha256:xxxxx...). You can use +// ImageStreamImages as the from.kind of an image stream spec tag to reference an image +// exactly. The only operations supported on the imagestreamimage endpoint are retrieving +// the image. +message ImageStreamImage { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Image associated with the ImageStream and image name. + optional Image image = 2; +} + +// The image stream import resource provides an easy way for a user to find and import container images +// from other container image registries into the server. Individual images or an entire image repository may +// be imported, and users may choose to see the results of the import prior to tagging the resulting +// images into the specified image stream. +// +// This API is intended for end-user tools that need to see the metadata of the image prior to import +// (for instance, to generate an application from it). Clients that know the desired image can continue +// to create spec.tags directly into their image streams. +message ImageStreamImport { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Spec is a description of the images that the user wishes to import + optional ImageStreamImportSpec spec = 2; + + // Status is the the result of importing the image + optional ImageStreamImportStatus status = 3; +} + +// ImageStreamImportSpec defines what images should be imported. +message ImageStreamImportSpec { + // Import indicates whether to perform an import - if so, the specified tags are set on the spec + // and status of the image stream defined by the type meta. + optional bool import = 1; + + // Repository is an optional import of an entire container image repository. A maximum limit on the + // number of tags imported this way is imposed by the server. + optional RepositoryImportSpec repository = 2; + + // Images are a list of individual images to import. + repeated ImageImportSpec images = 3; +} + +// ImageStreamImportStatus contains information about the status of an image stream import. +message ImageStreamImportStatus { + // Import is the image stream that was successfully updated or created when 'to' was set. + optional ImageStream import = 1; + + // Repository is set if spec.repository was set to the outcome of the import + optional RepositoryImportStatus repository = 2; + + // Images is set with the result of importing spec.images + repeated ImageImportStatus images = 3; +} + +// ImageStreamLayers describes information about the layers referenced by images in this +// image stream. +message ImageStreamLayers { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // blobs is a map of blob name to metadata about the blob. + map blobs = 2; + + // images is a map between an image name and the names of the blobs and config that + // comprise the image. + map images = 3; +} + +// ImageStreamList is a list of ImageStream objects. +message ImageStreamList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of imageStreams + repeated ImageStream items = 2; +} + +// ImageStreamMapping represents a mapping from a single image stream tag to a container +// image as well as the reference to the container image stream the image came from. This +// resource is used by privileged integrators to create an image resource and to associate +// it with an image stream in the status tags field. Creating an ImageStreamMapping will +// allow any user who can view the image stream to tag or pull that image, so only create +// mappings where the user has proven they have access to the image contents directly. +// The only operation supported for this resource is create and the metadata name and +// namespace should be set to the image stream containing the tag that should be updated. +message ImageStreamMapping { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Image is a container image. + optional Image image = 2; + + // Tag is a string value this image can be located with inside the stream. + optional string tag = 3; +} + +// ImageStreamSpec represents options for ImageStreams. +message ImageStreamSpec { + // lookupPolicy controls how other resources reference images within this namespace. + optional ImageLookupPolicy lookupPolicy = 3; + + // dockerImageRepository is optional, if specified this stream is backed by a container repository on this server + // Deprecated: This field is deprecated as of v3.7 and will be removed in a future release. + // Specify the source for the tags to be imported in each tag via the spec.tags.from reference instead. + optional string dockerImageRepository = 1; + + // tags map arbitrary string values to specific image locators + // +patchMergeKey=name + // +patchStrategy=merge + repeated TagReference tags = 2; +} + +// ImageStreamStatus contains information about the state of this image stream. +message ImageStreamStatus { + // DockerImageRepository represents the effective location this stream may be accessed at. + // May be empty until the server determines where the repository is located + optional string dockerImageRepository = 1; + + // PublicDockerImageRepository represents the public location from where the image can + // be pulled outside the cluster. This field may be empty if the administrator + // has not exposed the integrated registry externally. + optional string publicDockerImageRepository = 3; + + // Tags are a historical record of images associated with each tag. The first entry in the + // TagEvent array is the currently tagged image. + // +patchMergeKey=tag + // +patchStrategy=merge + repeated NamedTagEventList tags = 2; +} + +// ImageStreamTag represents an Image that is retrieved by tag name from an ImageStream. +// Use this resource to interact with the tags and images in an image stream by tag, or +// to see the image details for a particular tag. The image associated with this resource +// is the most recently successfully tagged, imported, or pushed image (as described in the +// image stream status.tags.items list for this tag). If an import is in progress or has +// failed the previous image will be shown. Deleting an image stream tag clears both the +// status and spec fields of an image stream. If no image can be retrieved for a given tag, +// a not found error will be returned. +message ImageStreamTag { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // tag is the spec tag associated with this image stream tag, and it may be null + // if only pushes have occurred to this image stream. + optional TagReference tag = 2; + + // generation is the current generation of the tagged image - if tag is provided + // and this value is not equal to the tag generation, a user has requested an + // import that has not completed, or conditions will be filled out indicating any + // error. + optional int64 generation = 3; + + // lookupPolicy indicates whether this tag will handle image references in this + // namespace. + optional ImageLookupPolicy lookupPolicy = 6; + + // conditions is an array of conditions that apply to the image stream tag. + repeated TagEventCondition conditions = 4; + + // image associated with the ImageStream and tag. + optional Image image = 5; +} + +// ImageStreamTagList is a list of ImageStreamTag objects. +message ImageStreamTagList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of image stream tags + repeated ImageStreamTag items = 2; +} + +// ImageTag represents a single tag within an image stream and includes the spec, +// the status history, and the currently referenced image (if any) of the provided +// tag. This type replaces the ImageStreamTag by providing a full view of the tag. +// ImageTags are returned for every spec or status tag present on the image stream. +// If no tag exists in either form a not found error will be returned by the API. +// A create operation will succeed if no spec tag has already been defined and the +// spec field is set. Delete will remove both spec and status elements from the +// image stream. +message ImageTag { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // spec is the spec tag associated with this image stream tag, and it may be null + // if only pushes have occurred to this image stream. + optional TagReference spec = 2; + + // status is the status tag details associated with this image stream tag, and it + // may be null if no push or import has been performed. + optional NamedTagEventList status = 3; + + // image is the details of the most recent image stream status tag, and it may be + // null if import has not completed or an administrator has deleted the image + // object. To verify this is the most recent image, you must verify the generation + // of the most recent status.items entry matches the spec tag (if a spec tag is + // set). This field will not be set when listing image tags. + optional Image image = 4; +} + +// ImageTagList is a list of ImageTag objects. When listing image tags, the image +// field is not populated. Tags are returned in alphabetical order by image stream +// and then tag. +message ImageTagList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of image stream tags + repeated ImageTag items = 2; +} + +// NamedTagEventList relates a tag to its image history. +message NamedTagEventList { + // Tag is the tag for which the history is recorded + optional string tag = 1; + + // Standard object's metadata. + repeated TagEvent items = 2; + + // Conditions is an array of conditions that apply to the tag event list. + repeated TagEventCondition conditions = 3; +} + +// RepositoryImportSpec describes a request to import images from a container image repository. +message RepositoryImportSpec { + // From is the source for the image repository to import; only kind DockerImage and a name of a container image repository is allowed + optional k8s.io.api.core.v1.ObjectReference from = 1; + + // ImportPolicy is the policy controlling how the image is imported + optional TagImportPolicy importPolicy = 2; + + // ReferencePolicy defines how other components should consume the image + optional TagReferencePolicy referencePolicy = 4; + + // IncludeManifest determines if the manifest for each image is returned in the response + optional bool includeManifest = 3; +} + +// RepositoryImportStatus describes the result of an image repository import +message RepositoryImportStatus { + // Status reflects whether any failure occurred during import + optional k8s.io.apimachinery.pkg.apis.meta.v1.Status status = 1; + + // Images is a list of images successfully retrieved by the import of the repository. + repeated ImageImportStatus images = 2; + + // AdditionalTags are tags that exist in the repository but were not imported because + // a maximum limit of automatic imports was applied. + repeated string additionalTags = 3; +} + +// SignatureCondition describes an image signature condition of particular kind at particular probe time. +message SignatureCondition { + // Type of signature condition, Complete or Failed. + optional string type = 1; + + // Status of the condition, one of True, False, Unknown. + optional string status = 2; + + // Last time the condition was checked. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastProbeTime = 3; + + // Last time the condition transit from one status to another. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 4; + + // (brief) reason for the condition's last transition. + optional string reason = 5; + + // Human readable message indicating details about last transition. + optional string message = 6; +} + +// SignatureGenericEntity holds a generic information about a person or entity who is an issuer or a subject +// of signing certificate or key. +message SignatureGenericEntity { + // Organization name. + optional string organization = 1; + + // Common name (e.g. openshift-signing-service). + optional string commonName = 2; +} + +// SignatureIssuer holds information about an issuer of signing certificate or key. +message SignatureIssuer { + optional SignatureGenericEntity signatureGenericEntity = 1; +} + +// SignatureSubject holds information about a person or entity who created the signature. +message SignatureSubject { + optional SignatureGenericEntity signatureGenericEntity = 1; + + // If present, it is a human readable key id of public key belonging to the subject used to verify image + // signature. It should contain at least 64 lowest bits of public key's fingerprint (e.g. + // 0x685ebe62bf278440). + optional string publicKeyID = 2; +} + +// TagEvent is used by ImageStreamStatus to keep a historical record of images associated with a tag. +message TagEvent { + // Created holds the time the TagEvent was created + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time created = 1; + + // DockerImageReference is the string that can be used to pull this image + optional string dockerImageReference = 2; + + // Image is the image + optional string image = 3; + + // Generation is the spec tag generation that resulted in this tag being updated + optional int64 generation = 4; +} + +// TagEventCondition contains condition information for a tag event. +message TagEventCondition { + // Type of tag event condition, currently only ImportSuccess + optional string type = 1; + + // Status of the condition, one of True, False, Unknown. + optional string status = 2; + + // LastTransitionTIme is the time the condition transitioned from one status to another. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 3; + + // Reason is a brief machine readable explanation for the condition's last transition. + optional string reason = 4; + + // Message is a human readable description of the details about last transition, complementing reason. + optional string message = 5; + + // Generation is the spec tag generation that this status corresponds to + optional int64 generation = 6; +} + +// TagImportPolicy controls how images related to this tag will be imported. +message TagImportPolicy { + // Insecure is true if the server may bypass certificate verification or connect directly over HTTP during image import. + optional bool insecure = 1; + + // Scheduled indicates to the server that this tag should be periodically checked to ensure it is up to date, and imported + optional bool scheduled = 2; +} + +// TagReference specifies optional annotations for images using this tag and an optional reference to an ImageStreamTag, ImageStreamImage, or DockerImage this tag should track. +message TagReference { + // Name of the tag + optional string name = 1; + + // Optional; if specified, annotations that are applied to images retrieved via ImageStreamTags. + // +optional + map annotations = 2; + + // Optional; if specified, a reference to another image that this tag should point to. Valid values + // are ImageStreamTag, ImageStreamImage, and DockerImage. ImageStreamTag references + // can only reference a tag within this same ImageStream. + optional k8s.io.api.core.v1.ObjectReference from = 3; + + // Reference states if the tag will be imported. Default value is false, which means the tag will + // be imported. + optional bool reference = 4; + + // Generation is a counter that tracks mutations to the spec tag (user intent). When a tag reference + // is changed the generation is set to match the current stream generation (which is incremented every + // time spec is changed). Other processes in the system like the image importer observe that the + // generation of spec tag is newer than the generation recorded in the status and use that as a trigger + // to import the newest remote tag. To trigger a new import, clients may set this value to zero which + // will reset the generation to the latest stream generation. Legacy clients will send this value as + // nil which will be merged with the current tag generation. + // +optional + optional int64 generation = 5; + + // ImportPolicy is information that controls how images may be imported by the server. + optional TagImportPolicy importPolicy = 6; + + // ReferencePolicy defines how other components should consume the image. + optional TagReferencePolicy referencePolicy = 7; +} + +// TagReferencePolicy describes how pull-specs for images in this image stream tag are generated when +// image change triggers in deployment configs or builds are resolved. This allows the image stream +// author to control how images are accessed. +message TagReferencePolicy { + // Type determines how the image pull spec should be transformed when the image stream tag is used in + // deployment config triggers or new builds. The default value is `Source`, indicating the original + // location of the image should be used (if imported). The user may also specify `Local`, indicating + // that the pull spec should point to the integrated container image registry and leverage the registry's + // ability to proxy the pull to an upstream registry. `Local` allows the credentials used to pull this + // image to be managed from the image stream's namespace, so others on the platform can access a remote + // image but have no access to the remote secret. It also allows the image layers to be mirrored into + // the local registry which the images can still be pulled even if the upstream registry is unavailable. + optional string type = 1; +} + diff --git a/vendor/github.com/openshift/api/image/v1/legacy.go b/vendor/github.com/openshift/api/image/v1/legacy.go new file mode 100644 index 0000000000000..02bbaa2906fed --- /dev/null +++ b/vendor/github.com/openshift/api/image/v1/legacy.go @@ -0,0 +1,33 @@ +package v1 + +import ( + "github.com/openshift/api/image/docker10" + "github.com/openshift/api/image/dockerpre012" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + legacyGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} + legacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes, docker10.AddToSchemeInCoreGroup, dockerpre012.AddToSchemeInCoreGroup, corev1.AddToScheme) + DeprecatedInstallWithoutGroup = legacySchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addLegacyKnownTypes(scheme *runtime.Scheme) error { + types := []runtime.Object{ + &Image{}, + &ImageList{}, + &ImageSignature{}, + &ImageStream{}, + &ImageStreamList{}, + &ImageStreamMapping{}, + &ImageStreamTag{}, + &ImageStreamTagList{}, + &ImageStreamImage{}, + &ImageStreamImport{}, + } + scheme.AddKnownTypes(legacyGroupVersion, types...) + return nil +} diff --git a/vendor/github.com/openshift/api/image/v1/register.go b/vendor/github.com/openshift/api/image/v1/register.go new file mode 100644 index 0000000000000..fc0910c24686f --- /dev/null +++ b/vendor/github.com/openshift/api/image/v1/register.go @@ -0,0 +1,54 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + + "github.com/openshift/api/image/docker10" + "github.com/openshift/api/image/dockerpre012" +) + +var ( + GroupName = "image.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, docker10.AddToScheme, dockerpre012.AddToScheme, corev1.AddToScheme) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &Image{}, + &ImageList{}, + &ImageSignature{}, + &ImageStream{}, + &ImageStreamList{}, + &ImageStreamMapping{}, + &ImageStreamTag{}, + &ImageStreamTagList{}, + &ImageStreamImage{}, + &ImageStreamLayers{}, + &ImageStreamImport{}, + &ImageTag{}, + &ImageTagList{}, + &corev1.SecretList{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/image/v1/types.go b/vendor/github.com/openshift/api/image/v1/types.go new file mode 100644 index 0000000000000..c29cad9b25d2f --- /dev/null +++ b/vendor/github.com/openshift/api/image/v1/types.go @@ -0,0 +1,634 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ImageList is a list of Image objects. +type ImageList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of images + Items []Image `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Image is an immutable representation of a container image and metadata at a point in time. +// Images are named by taking a hash of their contents (metadata and content) and any change +// in format, content, or metadata results in a new name. The images resource is primarily +// for use by cluster administrators and integrations like the cluster image registry - end +// users instead access images via the imagestreamtags or imagestreamimages resources. While +// image metadata is stored in the API, any integration that implements the container image +// registry API must provide its own storage for the raw manifest data, image config, and +// layer contents. +type Image struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // DockerImageReference is the string that can be used to pull this image. + DockerImageReference string `json:"dockerImageReference,omitempty" protobuf:"bytes,2,opt,name=dockerImageReference"` + // DockerImageMetadata contains metadata about this image + // +patchStrategy=replace + // +kubebuilder:pruning:PreserveUnknownFields + DockerImageMetadata runtime.RawExtension `json:"dockerImageMetadata,omitempty" patchStrategy:"replace" protobuf:"bytes,3,opt,name=dockerImageMetadata"` + // DockerImageMetadataVersion conveys the version of the object, which if empty defaults to "1.0" + DockerImageMetadataVersion string `json:"dockerImageMetadataVersion,omitempty" protobuf:"bytes,4,opt,name=dockerImageMetadataVersion"` + // DockerImageManifest is the raw JSON of the manifest + DockerImageManifest string `json:"dockerImageManifest,omitempty" protobuf:"bytes,5,opt,name=dockerImageManifest"` + // DockerImageLayers represents the layers in the image. May not be set if the image does not define that data. + DockerImageLayers []ImageLayer `json:"dockerImageLayers" protobuf:"bytes,6,rep,name=dockerImageLayers"` + // Signatures holds all signatures of the image. + // +patchMergeKey=name + // +patchStrategy=merge + Signatures []ImageSignature `json:"signatures,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,7,rep,name=signatures"` + // DockerImageSignatures provides the signatures as opaque blobs. This is a part of manifest schema v1. + DockerImageSignatures [][]byte `json:"dockerImageSignatures,omitempty" protobuf:"bytes,8,rep,name=dockerImageSignatures"` + // DockerImageManifestMediaType specifies the mediaType of manifest. This is a part of manifest schema v2. + DockerImageManifestMediaType string `json:"dockerImageManifestMediaType,omitempty" protobuf:"bytes,9,opt,name=dockerImageManifestMediaType"` + // DockerImageConfig is a JSON blob that the runtime uses to set up the container. This is a part of manifest schema v2. + DockerImageConfig string `json:"dockerImageConfig,omitempty" protobuf:"bytes,10,opt,name=dockerImageConfig"` +} + +// ImageLayer represents a single layer of the image. Some images may have multiple layers. Some may have none. +type ImageLayer struct { + // Name of the layer as defined by the underlying store. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // Size of the layer in bytes as defined by the underlying store. + LayerSize int64 `json:"size" protobuf:"varint,2,opt,name=size"` + // MediaType of the referenced object. + MediaType string `json:"mediaType" protobuf:"bytes,3,opt,name=mediaType"` +} + +// +genclient +// +genclient:onlyVerbs=create,delete +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ImageSignature holds a signature of an image. It allows to verify image identity and possibly other claims +// as long as the signature is trusted. Based on this information it is possible to restrict runnable images +// to those matching cluster-wide policy. +// Mandatory fields should be parsed by clients doing image verification. The others are parsed from +// signature's content by the server. They serve just an informative purpose. +type ImageSignature struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Required: Describes a type of stored blob. + Type string `json:"type" protobuf:"bytes,2,opt,name=type"` + // Required: An opaque binary string which is an image's signature. + Content []byte `json:"content" protobuf:"bytes,3,opt,name=content"` + // Conditions represent the latest available observations of a signature's current state. + // +patchMergeKey=type + // +patchStrategy=merge + Conditions []SignatureCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,4,rep,name=conditions"` + + // Following metadata fields will be set by server if the signature content is successfully parsed and + // the information available. + + // A human readable string representing image's identity. It could be a product name and version, or an + // image pull spec (e.g. "registry.access.redhat.com/rhel7/rhel:7.2"). + ImageIdentity string `json:"imageIdentity,omitempty" protobuf:"bytes,5,opt,name=imageIdentity"` + // Contains claims from the signature. + SignedClaims map[string]string `json:"signedClaims,omitempty" protobuf:"bytes,6,rep,name=signedClaims"` + // If specified, it is the time of signature's creation. + Created *metav1.Time `json:"created,omitempty" protobuf:"bytes,7,opt,name=created"` + // If specified, it holds information about an issuer of signing certificate or key (a person or entity + // who signed the signing certificate or key). + IssuedBy *SignatureIssuer `json:"issuedBy,omitempty" protobuf:"bytes,8,opt,name=issuedBy"` + // If specified, it holds information about a subject of signing certificate or key (a person or entity + // who signed the image). + IssuedTo *SignatureSubject `json:"issuedTo,omitempty" protobuf:"bytes,9,opt,name=issuedTo"` +} + +/// SignatureConditionType is a type of image signature condition. +type SignatureConditionType string + +// SignatureCondition describes an image signature condition of particular kind at particular probe time. +type SignatureCondition struct { + // Type of signature condition, Complete or Failed. + Type SignatureConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=SignatureConditionType"` + // Status of the condition, one of True, False, Unknown. + Status corev1.ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=k8s.io/api/core/v1.ConditionStatus"` + // Last time the condition was checked. + LastProbeTime metav1.Time `json:"lastProbeTime,omitempty" protobuf:"bytes,3,opt,name=lastProbeTime"` + // Last time the condition transit from one status to another. + LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,4,opt,name=lastTransitionTime"` + // (brief) reason for the condition's last transition. + Reason string `json:"reason,omitempty" protobuf:"bytes,5,opt,name=reason"` + // Human readable message indicating details about last transition. + Message string `json:"message,omitempty" protobuf:"bytes,6,opt,name=message"` +} + +// SignatureGenericEntity holds a generic information about a person or entity who is an issuer or a subject +// of signing certificate or key. +type SignatureGenericEntity struct { + // Organization name. + Organization string `json:"organization,omitempty" protobuf:"bytes,1,opt,name=organization"` + // Common name (e.g. openshift-signing-service). + CommonName string `json:"commonName,omitempty" protobuf:"bytes,2,opt,name=commonName"` +} + +// SignatureIssuer holds information about an issuer of signing certificate or key. +type SignatureIssuer struct { + SignatureGenericEntity `json:",inline" protobuf:"bytes,1,opt,name=signatureGenericEntity"` +} + +// SignatureSubject holds information about a person or entity who created the signature. +type SignatureSubject struct { + SignatureGenericEntity `json:",inline" protobuf:"bytes,1,opt,name=signatureGenericEntity"` + // If present, it is a human readable key id of public key belonging to the subject used to verify image + // signature. It should contain at least 64 lowest bits of public key's fingerprint (e.g. + // 0x685ebe62bf278440). + PublicKeyID string `json:"publicKeyID" protobuf:"bytes,2,opt,name=publicKeyID"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ImageStreamList is a list of ImageStream objects. +type ImageStreamList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of imageStreams + Items []ImageStream `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient +// +genclient:method=Secrets,verb=get,subresource=secrets,result=k8s.io/api/core/v1.SecretList +// +genclient:method=Layers,verb=get,subresource=layers,result=github.com/openshift/api/image/v1.ImageStreamLayers +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// An ImageStream stores a mapping of tags to images, metadata overrides that are applied +// when images are tagged in a stream, and an optional reference to a container image +// repository on a registry. Users typically update the spec.tags field to point to external +// images which are imported from container registries using credentials in your namespace +// with the pull secret type, or to existing image stream tags and images which are +// immediately accessible for tagging or pulling. The history of images applied to a tag +// is visible in the status.tags field and any user who can view an image stream is allowed +// to tag that image into their own image streams. Access to pull images from the integrated +// registry is granted by having the "get imagestreams/layers" permission on a given image +// stream. Users may remove a tag by deleting the imagestreamtag resource, which causes both +// spec and status for that tag to be removed. Image stream history is retained until an +// administrator runs the prune operation, which removes references that are no longer in +// use. To preserve a historical image, ensure there is a tag in spec pointing to that image +// by its digest. +type ImageStream struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec describes the desired state of this stream + // +optional + Spec ImageStreamSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` + // Status describes the current state of this stream + // +optional + Status ImageStreamStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// ImageStreamSpec represents options for ImageStreams. +type ImageStreamSpec struct { + // lookupPolicy controls how other resources reference images within this namespace. + LookupPolicy ImageLookupPolicy `json:"lookupPolicy,omitempty" protobuf:"bytes,3,opt,name=lookupPolicy"` + // dockerImageRepository is optional, if specified this stream is backed by a container repository on this server + // Deprecated: This field is deprecated as of v3.7 and will be removed in a future release. + // Specify the source for the tags to be imported in each tag via the spec.tags.from reference instead. + DockerImageRepository string `json:"dockerImageRepository,omitempty" protobuf:"bytes,1,opt,name=dockerImageRepository"` + // tags map arbitrary string values to specific image locators + // +patchMergeKey=name + // +patchStrategy=merge + Tags []TagReference `json:"tags,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=tags"` +} + +// ImageLookupPolicy describes how an image stream can be used to override the image references +// used by pods, builds, and other resources in a namespace. +type ImageLookupPolicy struct { + // local will change the docker short image references (like "mysql" or + // "php:latest") on objects in this namespace to the image ID whenever they match + // this image stream, instead of reaching out to a remote registry. The name will + // be fully qualified to an image ID if found. The tag's referencePolicy is taken + // into account on the replaced value. Only works within the current namespace. + Local bool `json:"local" protobuf:"varint,3,opt,name=local"` +} + +// TagReference specifies optional annotations for images using this tag and an optional reference to an ImageStreamTag, ImageStreamImage, or DockerImage this tag should track. +type TagReference struct { + // Name of the tag + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // Optional; if specified, annotations that are applied to images retrieved via ImageStreamTags. + // +optional + Annotations map[string]string `json:"annotations" protobuf:"bytes,2,rep,name=annotations"` + // Optional; if specified, a reference to another image that this tag should point to. Valid values + // are ImageStreamTag, ImageStreamImage, and DockerImage. ImageStreamTag references + // can only reference a tag within this same ImageStream. + From *corev1.ObjectReference `json:"from,omitempty" protobuf:"bytes,3,opt,name=from"` + // Reference states if the tag will be imported. Default value is false, which means the tag will + // be imported. + Reference bool `json:"reference,omitempty" protobuf:"varint,4,opt,name=reference"` + // Generation is a counter that tracks mutations to the spec tag (user intent). When a tag reference + // is changed the generation is set to match the current stream generation (which is incremented every + // time spec is changed). Other processes in the system like the image importer observe that the + // generation of spec tag is newer than the generation recorded in the status and use that as a trigger + // to import the newest remote tag. To trigger a new import, clients may set this value to zero which + // will reset the generation to the latest stream generation. Legacy clients will send this value as + // nil which will be merged with the current tag generation. + // +optional + Generation *int64 `json:"generation" protobuf:"varint,5,opt,name=generation"` + // ImportPolicy is information that controls how images may be imported by the server. + ImportPolicy TagImportPolicy `json:"importPolicy,omitempty" protobuf:"bytes,6,opt,name=importPolicy"` + // ReferencePolicy defines how other components should consume the image. + ReferencePolicy TagReferencePolicy `json:"referencePolicy,omitempty" protobuf:"bytes,7,opt,name=referencePolicy"` +} + +// TagImportPolicy controls how images related to this tag will be imported. +type TagImportPolicy struct { + // Insecure is true if the server may bypass certificate verification or connect directly over HTTP during image import. + Insecure bool `json:"insecure,omitempty" protobuf:"varint,1,opt,name=insecure"` + // Scheduled indicates to the server that this tag should be periodically checked to ensure it is up to date, and imported + Scheduled bool `json:"scheduled,omitempty" protobuf:"varint,2,opt,name=scheduled"` +} + +// TagReferencePolicyType describes how pull-specs for images in an image stream tag are generated when +// image change triggers are fired. +type TagReferencePolicyType string + +const ( + // SourceTagReferencePolicy indicates the image's original location should be used when the image stream tag + // is resolved into other resources (builds and deployment configurations). + SourceTagReferencePolicy TagReferencePolicyType = "Source" + // LocalTagReferencePolicy indicates the image should prefer to pull via the local integrated registry, + // falling back to the remote location if the integrated registry has not been configured. The reference will + // use the internal DNS name or registry service IP. + LocalTagReferencePolicy TagReferencePolicyType = "Local" +) + +// TagReferencePolicy describes how pull-specs for images in this image stream tag are generated when +// image change triggers in deployment configs or builds are resolved. This allows the image stream +// author to control how images are accessed. +type TagReferencePolicy struct { + // Type determines how the image pull spec should be transformed when the image stream tag is used in + // deployment config triggers or new builds. The default value is `Source`, indicating the original + // location of the image should be used (if imported). The user may also specify `Local`, indicating + // that the pull spec should point to the integrated container image registry and leverage the registry's + // ability to proxy the pull to an upstream registry. `Local` allows the credentials used to pull this + // image to be managed from the image stream's namespace, so others on the platform can access a remote + // image but have no access to the remote secret. It also allows the image layers to be mirrored into + // the local registry which the images can still be pulled even if the upstream registry is unavailable. + Type TagReferencePolicyType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=TagReferencePolicyType"` +} + +// ImageStreamStatus contains information about the state of this image stream. +type ImageStreamStatus struct { + // DockerImageRepository represents the effective location this stream may be accessed at. + // May be empty until the server determines where the repository is located + DockerImageRepository string `json:"dockerImageRepository" protobuf:"bytes,1,opt,name=dockerImageRepository"` + // PublicDockerImageRepository represents the public location from where the image can + // be pulled outside the cluster. This field may be empty if the administrator + // has not exposed the integrated registry externally. + PublicDockerImageRepository string `json:"publicDockerImageRepository,omitempty" protobuf:"bytes,3,opt,name=publicDockerImageRepository"` + // Tags are a historical record of images associated with each tag. The first entry in the + // TagEvent array is the currently tagged image. + // +patchMergeKey=tag + // +patchStrategy=merge + Tags []NamedTagEventList `json:"tags,omitempty" patchStrategy:"merge" patchMergeKey:"tag" protobuf:"bytes,2,rep,name=tags"` +} + +// NamedTagEventList relates a tag to its image history. +type NamedTagEventList struct { + // Tag is the tag for which the history is recorded + Tag string `json:"tag" protobuf:"bytes,1,opt,name=tag"` + // Standard object's metadata. + Items []TagEvent `json:"items" protobuf:"bytes,2,rep,name=items"` + // Conditions is an array of conditions that apply to the tag event list. + Conditions []TagEventCondition `json:"conditions,omitempty" protobuf:"bytes,3,rep,name=conditions"` +} + +// TagEvent is used by ImageStreamStatus to keep a historical record of images associated with a tag. +type TagEvent struct { + // Created holds the time the TagEvent was created + Created metav1.Time `json:"created" protobuf:"bytes,1,opt,name=created"` + // DockerImageReference is the string that can be used to pull this image + DockerImageReference string `json:"dockerImageReference" protobuf:"bytes,2,opt,name=dockerImageReference"` + // Image is the image + Image string `json:"image" protobuf:"bytes,3,opt,name=image"` + // Generation is the spec tag generation that resulted in this tag being updated + Generation int64 `json:"generation" protobuf:"varint,4,opt,name=generation"` +} + +type TagEventConditionType string + +// These are valid conditions of TagEvents. +const ( + // ImportSuccess with status False means the import of the specific tag failed + ImportSuccess TagEventConditionType = "ImportSuccess" +) + +// TagEventCondition contains condition information for a tag event. +type TagEventCondition struct { + // Type of tag event condition, currently only ImportSuccess + Type TagEventConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=TagEventConditionType"` + // Status of the condition, one of True, False, Unknown. + Status corev1.ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=k8s.io/api/core/v1.ConditionStatus"` + // LastTransitionTIme is the time the condition transitioned from one status to another. + LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,3,opt,name=lastTransitionTime"` + // Reason is a brief machine readable explanation for the condition's last transition. + Reason string `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"` + // Message is a human readable description of the details about last transition, complementing reason. + Message string `json:"message,omitempty" protobuf:"bytes,5,opt,name=message"` + // Generation is the spec tag generation that this status corresponds to + Generation int64 `json:"generation" protobuf:"varint,6,opt,name=generation"` +} + +// +genclient +// +genclient:skipVerbs=get,list,create,update,patch,delete,deleteCollection,watch +// +genclient:method=Create,verb=create,result=k8s.io/apimachinery/pkg/apis/meta/v1.Status +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ImageStreamMapping represents a mapping from a single image stream tag to a container +// image as well as the reference to the container image stream the image came from. This +// resource is used by privileged integrators to create an image resource and to associate +// it with an image stream in the status tags field. Creating an ImageStreamMapping will +// allow any user who can view the image stream to tag or pull that image, so only create +// mappings where the user has proven they have access to the image contents directly. +// The only operation supported for this resource is create and the metadata name and +// namespace should be set to the image stream containing the tag that should be updated. +type ImageStreamMapping struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Image is a container image. + Image Image `json:"image" protobuf:"bytes,2,opt,name=image"` + // Tag is a string value this image can be located with inside the stream. + Tag string `json:"tag" protobuf:"bytes,3,opt,name=tag"` +} + +// +genclient +// +genclient:onlyVerbs=get,list,create,update,delete +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ImageStreamTag represents an Image that is retrieved by tag name from an ImageStream. +// Use this resource to interact with the tags and images in an image stream by tag, or +// to see the image details for a particular tag. The image associated with this resource +// is the most recently successfully tagged, imported, or pushed image (as described in the +// image stream status.tags.items list for this tag). If an import is in progress or has +// failed the previous image will be shown. Deleting an image stream tag clears both the +// status and spec fields of an image stream. If no image can be retrieved for a given tag, +// a not found error will be returned. +type ImageStreamTag struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // tag is the spec tag associated with this image stream tag, and it may be null + // if only pushes have occurred to this image stream. + Tag *TagReference `json:"tag" protobuf:"bytes,2,opt,name=tag"` + + // generation is the current generation of the tagged image - if tag is provided + // and this value is not equal to the tag generation, a user has requested an + // import that has not completed, or conditions will be filled out indicating any + // error. + Generation int64 `json:"generation" protobuf:"varint,3,opt,name=generation"` + + // lookupPolicy indicates whether this tag will handle image references in this + // namespace. + LookupPolicy ImageLookupPolicy `json:"lookupPolicy" protobuf:"varint,6,opt,name=lookupPolicy"` + + // conditions is an array of conditions that apply to the image stream tag. + Conditions []TagEventCondition `json:"conditions,omitempty" protobuf:"bytes,4,rep,name=conditions"` + + // image associated with the ImageStream and tag. + Image Image `json:"image" protobuf:"bytes,5,opt,name=image"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ImageStreamTagList is a list of ImageStreamTag objects. +type ImageStreamTagList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of image stream tags + Items []ImageStreamTag `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient +// +genclient:onlyVerbs=get,list,create,update,delete +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ImageTag represents a single tag within an image stream and includes the spec, +// the status history, and the currently referenced image (if any) of the provided +// tag. This type replaces the ImageStreamTag by providing a full view of the tag. +// ImageTags are returned for every spec or status tag present on the image stream. +// If no tag exists in either form a not found error will be returned by the API. +// A create operation will succeed if no spec tag has already been defined and the +// spec field is set. Delete will remove both spec and status elements from the +// image stream. +type ImageTag struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // spec is the spec tag associated with this image stream tag, and it may be null + // if only pushes have occurred to this image stream. + Spec *TagReference `json:"spec" protobuf:"bytes,2,opt,name=spec"` + // status is the status tag details associated with this image stream tag, and it + // may be null if no push or import has been performed. + Status *NamedTagEventList `json:"status" protobuf:"bytes,3,opt,name=status"` + // image is the details of the most recent image stream status tag, and it may be + // null if import has not completed or an administrator has deleted the image + // object. To verify this is the most recent image, you must verify the generation + // of the most recent status.items entry matches the spec tag (if a spec tag is + // set). This field will not be set when listing image tags. + Image *Image `json:"image" protobuf:"bytes,4,opt,name=image"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ImageTagList is a list of ImageTag objects. When listing image tags, the image +// field is not populated. Tags are returned in alphabetical order by image stream +// and then tag. +type ImageTagList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of image stream tags + Items []ImageTag `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient +// +genclient:onlyVerbs=get +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ImageStreamImage represents an Image that is retrieved by image name from an ImageStream. +// User interfaces and regular users can use this resource to access the metadata details of +// a tagged image in the image stream history for viewing, since Image resources are not +// directly accessible to end users. A not found error will be returned if no such image is +// referenced by a tag within the ImageStream. Images are created when spec tags are set on +// an image stream that represent an image in an external registry, when pushing to the +// integrated registry, or when tagging an existing image from one image stream to another. +// The name of an image stream image is in the form "@", where the digest is +// the content addressible identifier for the image (sha256:xxxxx...). You can use +// ImageStreamImages as the from.kind of an image stream spec tag to reference an image +// exactly. The only operations supported on the imagestreamimage endpoint are retrieving +// the image. +type ImageStreamImage struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Image associated with the ImageStream and image name. + Image Image `json:"image" protobuf:"bytes,2,opt,name=image"` +} + +// DockerImageReference points to a container image. +type DockerImageReference struct { + // Registry is the registry that contains the container image + Registry string `protobuf:"bytes,1,opt,name=registry"` + // Namespace is the namespace that contains the container image + Namespace string `protobuf:"bytes,2,opt,name=namespace"` + // Name is the name of the container image + Name string `protobuf:"bytes,3,opt,name=name"` + // Tag is which tag of the container image is being referenced + Tag string `protobuf:"bytes,4,opt,name=tag"` + // ID is the identifier for the container image + ID string `protobuf:"bytes,5,opt,name=iD"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ImageStreamLayers describes information about the layers referenced by images in this +// image stream. +type ImageStreamLayers struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // blobs is a map of blob name to metadata about the blob. + Blobs map[string]ImageLayerData `json:"blobs" protobuf:"bytes,2,rep,name=blobs"` + // images is a map between an image name and the names of the blobs and config that + // comprise the image. + Images map[string]ImageBlobReferences `json:"images" protobuf:"bytes,3,rep,name=images"` +} + +// ImageBlobReferences describes the blob references within an image. +type ImageBlobReferences struct { + // imageMissing is true if the image is referenced by the image stream but the image + // object has been deleted from the API by an administrator. When this field is set, + // layers and config fields may be empty and callers that depend on the image metadata + // should consider the image to be unavailable for download or viewing. + // +optional + ImageMissing bool `json:"imageMissing" protobuf:"varint,3,opt,name=imageMissing"` + // layers is the list of blobs that compose this image, from base layer to top layer. + // All layers referenced by this array will be defined in the blobs map. Some images + // may have zero layers. + // +optional + Layers []string `json:"layers" protobuf:"bytes,1,rep,name=layers"` + // config, if set, is the blob that contains the image config. Some images do + // not have separate config blobs and this field will be set to nil if so. + // +optional + Config *string `json:"config" protobuf:"bytes,2,opt,name=config"` +} + +// ImageLayerData contains metadata about an image layer. +type ImageLayerData struct { + // Size of the layer in bytes as defined by the underlying store. This field is + // optional if the necessary information about size is not available. + LayerSize *int64 `json:"size" protobuf:"varint,1,opt,name=size"` + // MediaType of the referenced object. + MediaType string `json:"mediaType" protobuf:"bytes,2,opt,name=mediaType"` +} + +// +genclient +// +genclient:onlyVerbs=create +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// The image stream import resource provides an easy way for a user to find and import container images +// from other container image registries into the server. Individual images or an entire image repository may +// be imported, and users may choose to see the results of the import prior to tagging the resulting +// images into the specified image stream. +// +// This API is intended for end-user tools that need to see the metadata of the image prior to import +// (for instance, to generate an application from it). Clients that know the desired image can continue +// to create spec.tags directly into their image streams. +type ImageStreamImport struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec is a description of the images that the user wishes to import + Spec ImageStreamImportSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` + // Status is the the result of importing the image + Status ImageStreamImportStatus `json:"status" protobuf:"bytes,3,opt,name=status"` +} + +// ImageStreamImportSpec defines what images should be imported. +type ImageStreamImportSpec struct { + // Import indicates whether to perform an import - if so, the specified tags are set on the spec + // and status of the image stream defined by the type meta. + Import bool `json:"import" protobuf:"varint,1,opt,name=import"` + // Repository is an optional import of an entire container image repository. A maximum limit on the + // number of tags imported this way is imposed by the server. + Repository *RepositoryImportSpec `json:"repository,omitempty" protobuf:"bytes,2,opt,name=repository"` + // Images are a list of individual images to import. + Images []ImageImportSpec `json:"images,omitempty" protobuf:"bytes,3,rep,name=images"` +} + +// ImageStreamImportStatus contains information about the status of an image stream import. +type ImageStreamImportStatus struct { + // Import is the image stream that was successfully updated or created when 'to' was set. + Import *ImageStream `json:"import,omitempty" protobuf:"bytes,1,opt,name=import"` + // Repository is set if spec.repository was set to the outcome of the import + Repository *RepositoryImportStatus `json:"repository,omitempty" protobuf:"bytes,2,opt,name=repository"` + // Images is set with the result of importing spec.images + Images []ImageImportStatus `json:"images,omitempty" protobuf:"bytes,3,rep,name=images"` +} + +// RepositoryImportSpec describes a request to import images from a container image repository. +type RepositoryImportSpec struct { + // From is the source for the image repository to import; only kind DockerImage and a name of a container image repository is allowed + From corev1.ObjectReference `json:"from" protobuf:"bytes,1,opt,name=from"` + + // ImportPolicy is the policy controlling how the image is imported + ImportPolicy TagImportPolicy `json:"importPolicy,omitempty" protobuf:"bytes,2,opt,name=importPolicy"` + // ReferencePolicy defines how other components should consume the image + ReferencePolicy TagReferencePolicy `json:"referencePolicy,omitempty" protobuf:"bytes,4,opt,name=referencePolicy"` + // IncludeManifest determines if the manifest for each image is returned in the response + IncludeManifest bool `json:"includeManifest,omitempty" protobuf:"varint,3,opt,name=includeManifest"` +} + +// RepositoryImportStatus describes the result of an image repository import +type RepositoryImportStatus struct { + // Status reflects whether any failure occurred during import + Status metav1.Status `json:"status,omitempty" protobuf:"bytes,1,opt,name=status"` + // Images is a list of images successfully retrieved by the import of the repository. + Images []ImageImportStatus `json:"images,omitempty" protobuf:"bytes,2,rep,name=images"` + // AdditionalTags are tags that exist in the repository but were not imported because + // a maximum limit of automatic imports was applied. + AdditionalTags []string `json:"additionalTags,omitempty" protobuf:"bytes,3,rep,name=additionalTags"` +} + +// ImageImportSpec describes a request to import a specific image. +type ImageImportSpec struct { + // From is the source of an image to import; only kind DockerImage is allowed + From corev1.ObjectReference `json:"from" protobuf:"bytes,1,opt,name=from"` + // To is a tag in the current image stream to assign the imported image to, if name is not specified the default tag from from.name will be used + To *corev1.LocalObjectReference `json:"to,omitempty" protobuf:"bytes,2,opt,name=to"` + + // ImportPolicy is the policy controlling how the image is imported + ImportPolicy TagImportPolicy `json:"importPolicy,omitempty" protobuf:"bytes,3,opt,name=importPolicy"` + // ReferencePolicy defines how other components should consume the image + ReferencePolicy TagReferencePolicy `json:"referencePolicy,omitempty" protobuf:"bytes,5,opt,name=referencePolicy"` + // IncludeManifest determines if the manifest for each image is returned in the response + IncludeManifest bool `json:"includeManifest,omitempty" protobuf:"varint,4,opt,name=includeManifest"` +} + +// ImageImportStatus describes the result of an image import. +type ImageImportStatus struct { + // Status is the status of the image import, including errors encountered while retrieving the image + Status metav1.Status `json:"status" protobuf:"bytes,1,opt,name=status"` + // Image is the metadata of that image, if the image was located + Image *Image `json:"image,omitempty" protobuf:"bytes,2,opt,name=image"` + // Tag is the tag this image was located under, if any + Tag string `json:"tag,omitempty" protobuf:"bytes,3,opt,name=tag"` +} diff --git a/vendor/github.com/openshift/api/image/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/image/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..aab4664823ce1 --- /dev/null +++ b/vendor/github.com/openshift/api/image/v1/zz_generated.deepcopy.go @@ -0,0 +1,978 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DockerImageReference) DeepCopyInto(out *DockerImageReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DockerImageReference. +func (in *DockerImageReference) DeepCopy() *DockerImageReference { + if in == nil { + return nil + } + out := new(DockerImageReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Image) DeepCopyInto(out *Image) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.DockerImageMetadata.DeepCopyInto(&out.DockerImageMetadata) + if in.DockerImageLayers != nil { + in, out := &in.DockerImageLayers, &out.DockerImageLayers + *out = make([]ImageLayer, len(*in)) + copy(*out, *in) + } + if in.Signatures != nil { + in, out := &in.Signatures, &out.Signatures + *out = make([]ImageSignature, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.DockerImageSignatures != nil { + in, out := &in.DockerImageSignatures, &out.DockerImageSignatures + *out = make([][]byte, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = make([]byte, len(*in)) + copy(*out, *in) + } + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Image. +func (in *Image) DeepCopy() *Image { + if in == nil { + return nil + } + out := new(Image) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Image) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageBlobReferences) DeepCopyInto(out *ImageBlobReferences) { + *out = *in + if in.Layers != nil { + in, out := &in.Layers, &out.Layers + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Config != nil { + in, out := &in.Config, &out.Config + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageBlobReferences. +func (in *ImageBlobReferences) DeepCopy() *ImageBlobReferences { + if in == nil { + return nil + } + out := new(ImageBlobReferences) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageImportSpec) DeepCopyInto(out *ImageImportSpec) { + *out = *in + out.From = in.From + if in.To != nil { + in, out := &in.To, &out.To + *out = new(corev1.LocalObjectReference) + **out = **in + } + out.ImportPolicy = in.ImportPolicy + out.ReferencePolicy = in.ReferencePolicy + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageImportSpec. +func (in *ImageImportSpec) DeepCopy() *ImageImportSpec { + if in == nil { + return nil + } + out := new(ImageImportSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageImportStatus) DeepCopyInto(out *ImageImportStatus) { + *out = *in + in.Status.DeepCopyInto(&out.Status) + if in.Image != nil { + in, out := &in.Image, &out.Image + *out = new(Image) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageImportStatus. +func (in *ImageImportStatus) DeepCopy() *ImageImportStatus { + if in == nil { + return nil + } + out := new(ImageImportStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageLayer) DeepCopyInto(out *ImageLayer) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageLayer. +func (in *ImageLayer) DeepCopy() *ImageLayer { + if in == nil { + return nil + } + out := new(ImageLayer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageLayerData) DeepCopyInto(out *ImageLayerData) { + *out = *in + if in.LayerSize != nil { + in, out := &in.LayerSize, &out.LayerSize + *out = new(int64) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageLayerData. +func (in *ImageLayerData) DeepCopy() *ImageLayerData { + if in == nil { + return nil + } + out := new(ImageLayerData) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageList) DeepCopyInto(out *ImageList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Image, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageList. +func (in *ImageList) DeepCopy() *ImageList { + if in == nil { + return nil + } + out := new(ImageList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ImageList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageLookupPolicy) DeepCopyInto(out *ImageLookupPolicy) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageLookupPolicy. +func (in *ImageLookupPolicy) DeepCopy() *ImageLookupPolicy { + if in == nil { + return nil + } + out := new(ImageLookupPolicy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageSignature) DeepCopyInto(out *ImageSignature) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Content != nil { + in, out := &in.Content, &out.Content + *out = make([]byte, len(*in)) + copy(*out, *in) + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]SignatureCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SignedClaims != nil { + in, out := &in.SignedClaims, &out.SignedClaims + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Created != nil { + in, out := &in.Created, &out.Created + *out = (*in).DeepCopy() + } + if in.IssuedBy != nil { + in, out := &in.IssuedBy, &out.IssuedBy + *out = new(SignatureIssuer) + **out = **in + } + if in.IssuedTo != nil { + in, out := &in.IssuedTo, &out.IssuedTo + *out = new(SignatureSubject) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageSignature. +func (in *ImageSignature) DeepCopy() *ImageSignature { + if in == nil { + return nil + } + out := new(ImageSignature) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ImageSignature) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageStream) DeepCopyInto(out *ImageStream) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageStream. +func (in *ImageStream) DeepCopy() *ImageStream { + if in == nil { + return nil + } + out := new(ImageStream) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ImageStream) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageStreamImage) DeepCopyInto(out *ImageStreamImage) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Image.DeepCopyInto(&out.Image) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageStreamImage. +func (in *ImageStreamImage) DeepCopy() *ImageStreamImage { + if in == nil { + return nil + } + out := new(ImageStreamImage) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ImageStreamImage) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageStreamImport) DeepCopyInto(out *ImageStreamImport) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageStreamImport. +func (in *ImageStreamImport) DeepCopy() *ImageStreamImport { + if in == nil { + return nil + } + out := new(ImageStreamImport) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ImageStreamImport) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageStreamImportSpec) DeepCopyInto(out *ImageStreamImportSpec) { + *out = *in + if in.Repository != nil { + in, out := &in.Repository, &out.Repository + *out = new(RepositoryImportSpec) + **out = **in + } + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ImageImportSpec, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageStreamImportSpec. +func (in *ImageStreamImportSpec) DeepCopy() *ImageStreamImportSpec { + if in == nil { + return nil + } + out := new(ImageStreamImportSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageStreamImportStatus) DeepCopyInto(out *ImageStreamImportStatus) { + *out = *in + if in.Import != nil { + in, out := &in.Import, &out.Import + *out = new(ImageStream) + (*in).DeepCopyInto(*out) + } + if in.Repository != nil { + in, out := &in.Repository, &out.Repository + *out = new(RepositoryImportStatus) + (*in).DeepCopyInto(*out) + } + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ImageImportStatus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageStreamImportStatus. +func (in *ImageStreamImportStatus) DeepCopy() *ImageStreamImportStatus { + if in == nil { + return nil + } + out := new(ImageStreamImportStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageStreamLayers) DeepCopyInto(out *ImageStreamLayers) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Blobs != nil { + in, out := &in.Blobs, &out.Blobs + *out = make(map[string]ImageLayerData, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make(map[string]ImageBlobReferences, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageStreamLayers. +func (in *ImageStreamLayers) DeepCopy() *ImageStreamLayers { + if in == nil { + return nil + } + out := new(ImageStreamLayers) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ImageStreamLayers) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageStreamList) DeepCopyInto(out *ImageStreamList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ImageStream, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageStreamList. +func (in *ImageStreamList) DeepCopy() *ImageStreamList { + if in == nil { + return nil + } + out := new(ImageStreamList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ImageStreamList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageStreamMapping) DeepCopyInto(out *ImageStreamMapping) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Image.DeepCopyInto(&out.Image) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageStreamMapping. +func (in *ImageStreamMapping) DeepCopy() *ImageStreamMapping { + if in == nil { + return nil + } + out := new(ImageStreamMapping) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ImageStreamMapping) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageStreamSpec) DeepCopyInto(out *ImageStreamSpec) { + *out = *in + out.LookupPolicy = in.LookupPolicy + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]TagReference, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageStreamSpec. +func (in *ImageStreamSpec) DeepCopy() *ImageStreamSpec { + if in == nil { + return nil + } + out := new(ImageStreamSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageStreamStatus) DeepCopyInto(out *ImageStreamStatus) { + *out = *in + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]NamedTagEventList, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageStreamStatus. +func (in *ImageStreamStatus) DeepCopy() *ImageStreamStatus { + if in == nil { + return nil + } + out := new(ImageStreamStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageStreamTag) DeepCopyInto(out *ImageStreamTag) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Tag != nil { + in, out := &in.Tag, &out.Tag + *out = new(TagReference) + (*in).DeepCopyInto(*out) + } + out.LookupPolicy = in.LookupPolicy + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]TagEventCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + in.Image.DeepCopyInto(&out.Image) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageStreamTag. +func (in *ImageStreamTag) DeepCopy() *ImageStreamTag { + if in == nil { + return nil + } + out := new(ImageStreamTag) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ImageStreamTag) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageStreamTagList) DeepCopyInto(out *ImageStreamTagList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ImageStreamTag, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageStreamTagList. +func (in *ImageStreamTagList) DeepCopy() *ImageStreamTagList { + if in == nil { + return nil + } + out := new(ImageStreamTagList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ImageStreamTagList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageTag) DeepCopyInto(out *ImageTag) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Spec != nil { + in, out := &in.Spec, &out.Spec + *out = new(TagReference) + (*in).DeepCopyInto(*out) + } + if in.Status != nil { + in, out := &in.Status, &out.Status + *out = new(NamedTagEventList) + (*in).DeepCopyInto(*out) + } + if in.Image != nil { + in, out := &in.Image, &out.Image + *out = new(Image) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageTag. +func (in *ImageTag) DeepCopy() *ImageTag { + if in == nil { + return nil + } + out := new(ImageTag) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ImageTag) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageTagList) DeepCopyInto(out *ImageTagList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ImageTag, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageTagList. +func (in *ImageTagList) DeepCopy() *ImageTagList { + if in == nil { + return nil + } + out := new(ImageTagList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ImageTagList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NamedTagEventList) DeepCopyInto(out *NamedTagEventList) { + *out = *in + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]TagEvent, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]TagEventCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamedTagEventList. +func (in *NamedTagEventList) DeepCopy() *NamedTagEventList { + if in == nil { + return nil + } + out := new(NamedTagEventList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RepositoryImportSpec) DeepCopyInto(out *RepositoryImportSpec) { + *out = *in + out.From = in.From + out.ImportPolicy = in.ImportPolicy + out.ReferencePolicy = in.ReferencePolicy + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RepositoryImportSpec. +func (in *RepositoryImportSpec) DeepCopy() *RepositoryImportSpec { + if in == nil { + return nil + } + out := new(RepositoryImportSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RepositoryImportStatus) DeepCopyInto(out *RepositoryImportStatus) { + *out = *in + in.Status.DeepCopyInto(&out.Status) + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ImageImportStatus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.AdditionalTags != nil { + in, out := &in.AdditionalTags, &out.AdditionalTags + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RepositoryImportStatus. +func (in *RepositoryImportStatus) DeepCopy() *RepositoryImportStatus { + if in == nil { + return nil + } + out := new(RepositoryImportStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SignatureCondition) DeepCopyInto(out *SignatureCondition) { + *out = *in + in.LastProbeTime.DeepCopyInto(&out.LastProbeTime) + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SignatureCondition. +func (in *SignatureCondition) DeepCopy() *SignatureCondition { + if in == nil { + return nil + } + out := new(SignatureCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SignatureGenericEntity) DeepCopyInto(out *SignatureGenericEntity) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SignatureGenericEntity. +func (in *SignatureGenericEntity) DeepCopy() *SignatureGenericEntity { + if in == nil { + return nil + } + out := new(SignatureGenericEntity) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SignatureIssuer) DeepCopyInto(out *SignatureIssuer) { + *out = *in + out.SignatureGenericEntity = in.SignatureGenericEntity + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SignatureIssuer. +func (in *SignatureIssuer) DeepCopy() *SignatureIssuer { + if in == nil { + return nil + } + out := new(SignatureIssuer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SignatureSubject) DeepCopyInto(out *SignatureSubject) { + *out = *in + out.SignatureGenericEntity = in.SignatureGenericEntity + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SignatureSubject. +func (in *SignatureSubject) DeepCopy() *SignatureSubject { + if in == nil { + return nil + } + out := new(SignatureSubject) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TagEvent) DeepCopyInto(out *TagEvent) { + *out = *in + in.Created.DeepCopyInto(&out.Created) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TagEvent. +func (in *TagEvent) DeepCopy() *TagEvent { + if in == nil { + return nil + } + out := new(TagEvent) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TagEventCondition) DeepCopyInto(out *TagEventCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TagEventCondition. +func (in *TagEventCondition) DeepCopy() *TagEventCondition { + if in == nil { + return nil + } + out := new(TagEventCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TagImportPolicy) DeepCopyInto(out *TagImportPolicy) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TagImportPolicy. +func (in *TagImportPolicy) DeepCopy() *TagImportPolicy { + if in == nil { + return nil + } + out := new(TagImportPolicy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TagReference) DeepCopyInto(out *TagReference) { + *out = *in + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.From != nil { + in, out := &in.From, &out.From + *out = new(corev1.ObjectReference) + **out = **in + } + if in.Generation != nil { + in, out := &in.Generation, &out.Generation + *out = new(int64) + **out = **in + } + out.ImportPolicy = in.ImportPolicy + out.ReferencePolicy = in.ReferencePolicy + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TagReference. +func (in *TagReference) DeepCopy() *TagReference { + if in == nil { + return nil + } + out := new(TagReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TagReferencePolicy) DeepCopyInto(out *TagReferencePolicy) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TagReferencePolicy. +func (in *TagReferencePolicy) DeepCopy() *TagReferencePolicy { + if in == nil { + return nil + } + out := new(TagReferencePolicy) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/image/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/image/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000000..a50ffbbc52472 --- /dev/null +++ b/vendor/github.com/openshift/api/image/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,413 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_DockerImageReference = map[string]string{ + "": "DockerImageReference points to a container image.", + "Registry": "Registry is the registry that contains the container image", + "Namespace": "Namespace is the namespace that contains the container image", + "Name": "Name is the name of the container image", + "Tag": "Tag is which tag of the container image is being referenced", + "ID": "ID is the identifier for the container image", +} + +func (DockerImageReference) SwaggerDoc() map[string]string { + return map_DockerImageReference +} + +var map_Image = map[string]string{ + "": "Image is an immutable representation of a container image and metadata at a point in time. Images are named by taking a hash of their contents (metadata and content) and any change in format, content, or metadata results in a new name. The images resource is primarily for use by cluster administrators and integrations like the cluster image registry - end users instead access images via the imagestreamtags or imagestreamimages resources. While image metadata is stored in the API, any integration that implements the container image registry API must provide its own storage for the raw manifest data, image config, and layer contents.", + "dockerImageReference": "DockerImageReference is the string that can be used to pull this image.", + "dockerImageMetadata": "DockerImageMetadata contains metadata about this image", + "dockerImageMetadataVersion": "DockerImageMetadataVersion conveys the version of the object, which if empty defaults to \"1.0\"", + "dockerImageManifest": "DockerImageManifest is the raw JSON of the manifest", + "dockerImageLayers": "DockerImageLayers represents the layers in the image. May not be set if the image does not define that data.", + "signatures": "Signatures holds all signatures of the image.", + "dockerImageSignatures": "DockerImageSignatures provides the signatures as opaque blobs. This is a part of manifest schema v1.", + "dockerImageManifestMediaType": "DockerImageManifestMediaType specifies the mediaType of manifest. This is a part of manifest schema v2.", + "dockerImageConfig": "DockerImageConfig is a JSON blob that the runtime uses to set up the container. This is a part of manifest schema v2.", +} + +func (Image) SwaggerDoc() map[string]string { + return map_Image +} + +var map_ImageBlobReferences = map[string]string{ + "": "ImageBlobReferences describes the blob references within an image.", + "imageMissing": "imageMissing is true if the image is referenced by the image stream but the image object has been deleted from the API by an administrator. When this field is set, layers and config fields may be empty and callers that depend on the image metadata should consider the image to be unavailable for download or viewing.", + "layers": "layers is the list of blobs that compose this image, from base layer to top layer. All layers referenced by this array will be defined in the blobs map. Some images may have zero layers.", + "config": "config, if set, is the blob that contains the image config. Some images do not have separate config blobs and this field will be set to nil if so.", +} + +func (ImageBlobReferences) SwaggerDoc() map[string]string { + return map_ImageBlobReferences +} + +var map_ImageImportSpec = map[string]string{ + "": "ImageImportSpec describes a request to import a specific image.", + "from": "From is the source of an image to import; only kind DockerImage is allowed", + "to": "To is a tag in the current image stream to assign the imported image to, if name is not specified the default tag from from.name will be used", + "importPolicy": "ImportPolicy is the policy controlling how the image is imported", + "referencePolicy": "ReferencePolicy defines how other components should consume the image", + "includeManifest": "IncludeManifest determines if the manifest for each image is returned in the response", +} + +func (ImageImportSpec) SwaggerDoc() map[string]string { + return map_ImageImportSpec +} + +var map_ImageImportStatus = map[string]string{ + "": "ImageImportStatus describes the result of an image import.", + "status": "Status is the status of the image import, including errors encountered while retrieving the image", + "image": "Image is the metadata of that image, if the image was located", + "tag": "Tag is the tag this image was located under, if any", +} + +func (ImageImportStatus) SwaggerDoc() map[string]string { + return map_ImageImportStatus +} + +var map_ImageLayer = map[string]string{ + "": "ImageLayer represents a single layer of the image. Some images may have multiple layers. Some may have none.", + "name": "Name of the layer as defined by the underlying store.", + "size": "Size of the layer in bytes as defined by the underlying store.", + "mediaType": "MediaType of the referenced object.", +} + +func (ImageLayer) SwaggerDoc() map[string]string { + return map_ImageLayer +} + +var map_ImageLayerData = map[string]string{ + "": "ImageLayerData contains metadata about an image layer.", + "size": "Size of the layer in bytes as defined by the underlying store. This field is optional if the necessary information about size is not available.", + "mediaType": "MediaType of the referenced object.", +} + +func (ImageLayerData) SwaggerDoc() map[string]string { + return map_ImageLayerData +} + +var map_ImageList = map[string]string{ + "": "ImageList is a list of Image objects.", + "items": "Items is a list of images", +} + +func (ImageList) SwaggerDoc() map[string]string { + return map_ImageList +} + +var map_ImageLookupPolicy = map[string]string{ + "": "ImageLookupPolicy describes how an image stream can be used to override the image references used by pods, builds, and other resources in a namespace.", + "local": "local will change the docker short image references (like \"mysql\" or \"php:latest\") on objects in this namespace to the image ID whenever they match this image stream, instead of reaching out to a remote registry. The name will be fully qualified to an image ID if found. The tag's referencePolicy is taken into account on the replaced value. Only works within the current namespace.", +} + +func (ImageLookupPolicy) SwaggerDoc() map[string]string { + return map_ImageLookupPolicy +} + +var map_ImageSignature = map[string]string{ + "": "ImageSignature holds a signature of an image. It allows to verify image identity and possibly other claims as long as the signature is trusted. Based on this information it is possible to restrict runnable images to those matching cluster-wide policy. Mandatory fields should be parsed by clients doing image verification. The others are parsed from signature's content by the server. They serve just an informative purpose.", + "type": "Required: Describes a type of stored blob.", + "content": "Required: An opaque binary string which is an image's signature.", + "conditions": "Conditions represent the latest available observations of a signature's current state.", + "imageIdentity": "A human readable string representing image's identity. It could be a product name and version, or an image pull spec (e.g. \"registry.access.redhat.com/rhel7/rhel:7.2\").", + "signedClaims": "Contains claims from the signature.", + "created": "If specified, it is the time of signature's creation.", + "issuedBy": "If specified, it holds information about an issuer of signing certificate or key (a person or entity who signed the signing certificate or key).", + "issuedTo": "If specified, it holds information about a subject of signing certificate or key (a person or entity who signed the image).", +} + +func (ImageSignature) SwaggerDoc() map[string]string { + return map_ImageSignature +} + +var map_ImageStream = map[string]string{ + "": "An ImageStream stores a mapping of tags to images, metadata overrides that are applied when images are tagged in a stream, and an optional reference to a container image repository on a registry. Users typically update the spec.tags field to point to external images which are imported from container registries using credentials in your namespace with the pull secret type, or to existing image stream tags and images which are immediately accessible for tagging or pulling. The history of images applied to a tag is visible in the status.tags field and any user who can view an image stream is allowed to tag that image into their own image streams. Access to pull images from the integrated registry is granted by having the \"get imagestreams/layers\" permission on a given image stream. Users may remove a tag by deleting the imagestreamtag resource, which causes both spec and status for that tag to be removed. Image stream history is retained until an administrator runs the prune operation, which removes references that are no longer in use. To preserve a historical image, ensure there is a tag in spec pointing to that image by its digest.", + "spec": "Spec describes the desired state of this stream", + "status": "Status describes the current state of this stream", +} + +func (ImageStream) SwaggerDoc() map[string]string { + return map_ImageStream +} + +var map_ImageStreamImage = map[string]string{ + "": "ImageStreamImage represents an Image that is retrieved by image name from an ImageStream. User interfaces and regular users can use this resource to access the metadata details of a tagged image in the image stream history for viewing, since Image resources are not directly accessible to end users. A not found error will be returned if no such image is referenced by a tag within the ImageStream. Images are created when spec tags are set on an image stream that represent an image in an external registry, when pushing to the integrated registry, or when tagging an existing image from one image stream to another. The name of an image stream image is in the form \"@\", where the digest is the content addressible identifier for the image (sha256:xxxxx...). You can use ImageStreamImages as the from.kind of an image stream spec tag to reference an image exactly. The only operations supported on the imagestreamimage endpoint are retrieving the image.", + "image": "Image associated with the ImageStream and image name.", +} + +func (ImageStreamImage) SwaggerDoc() map[string]string { + return map_ImageStreamImage +} + +var map_ImageStreamImport = map[string]string{ + "": "The image stream import resource provides an easy way for a user to find and import container images from other container image registries into the server. Individual images or an entire image repository may be imported, and users may choose to see the results of the import prior to tagging the resulting images into the specified image stream.\n\nThis API is intended for end-user tools that need to see the metadata of the image prior to import (for instance, to generate an application from it). Clients that know the desired image can continue to create spec.tags directly into their image streams.", + "spec": "Spec is a description of the images that the user wishes to import", + "status": "Status is the the result of importing the image", +} + +func (ImageStreamImport) SwaggerDoc() map[string]string { + return map_ImageStreamImport +} + +var map_ImageStreamImportSpec = map[string]string{ + "": "ImageStreamImportSpec defines what images should be imported.", + "import": "Import indicates whether to perform an import - if so, the specified tags are set on the spec and status of the image stream defined by the type meta.", + "repository": "Repository is an optional import of an entire container image repository. A maximum limit on the number of tags imported this way is imposed by the server.", + "images": "Images are a list of individual images to import.", +} + +func (ImageStreamImportSpec) SwaggerDoc() map[string]string { + return map_ImageStreamImportSpec +} + +var map_ImageStreamImportStatus = map[string]string{ + "": "ImageStreamImportStatus contains information about the status of an image stream import.", + "import": "Import is the image stream that was successfully updated or created when 'to' was set.", + "repository": "Repository is set if spec.repository was set to the outcome of the import", + "images": "Images is set with the result of importing spec.images", +} + +func (ImageStreamImportStatus) SwaggerDoc() map[string]string { + return map_ImageStreamImportStatus +} + +var map_ImageStreamLayers = map[string]string{ + "": "ImageStreamLayers describes information about the layers referenced by images in this image stream.", + "blobs": "blobs is a map of blob name to metadata about the blob.", + "images": "images is a map between an image name and the names of the blobs and config that comprise the image.", +} + +func (ImageStreamLayers) SwaggerDoc() map[string]string { + return map_ImageStreamLayers +} + +var map_ImageStreamList = map[string]string{ + "": "ImageStreamList is a list of ImageStream objects.", + "items": "Items is a list of imageStreams", +} + +func (ImageStreamList) SwaggerDoc() map[string]string { + return map_ImageStreamList +} + +var map_ImageStreamMapping = map[string]string{ + "": "ImageStreamMapping represents a mapping from a single image stream tag to a container image as well as the reference to the container image stream the image came from. This resource is used by privileged integrators to create an image resource and to associate it with an image stream in the status tags field. Creating an ImageStreamMapping will allow any user who can view the image stream to tag or pull that image, so only create mappings where the user has proven they have access to the image contents directly. The only operation supported for this resource is create and the metadata name and namespace should be set to the image stream containing the tag that should be updated.", + "image": "Image is a container image.", + "tag": "Tag is a string value this image can be located with inside the stream.", +} + +func (ImageStreamMapping) SwaggerDoc() map[string]string { + return map_ImageStreamMapping +} + +var map_ImageStreamSpec = map[string]string{ + "": "ImageStreamSpec represents options for ImageStreams.", + "lookupPolicy": "lookupPolicy controls how other resources reference images within this namespace.", + "dockerImageRepository": "dockerImageRepository is optional, if specified this stream is backed by a container repository on this server Deprecated: This field is deprecated as of v3.7 and will be removed in a future release. Specify the source for the tags to be imported in each tag via the spec.tags.from reference instead.", + "tags": "tags map arbitrary string values to specific image locators", +} + +func (ImageStreamSpec) SwaggerDoc() map[string]string { + return map_ImageStreamSpec +} + +var map_ImageStreamStatus = map[string]string{ + "": "ImageStreamStatus contains information about the state of this image stream.", + "dockerImageRepository": "DockerImageRepository represents the effective location this stream may be accessed at. May be empty until the server determines where the repository is located", + "publicDockerImageRepository": "PublicDockerImageRepository represents the public location from where the image can be pulled outside the cluster. This field may be empty if the administrator has not exposed the integrated registry externally.", + "tags": "Tags are a historical record of images associated with each tag. The first entry in the TagEvent array is the currently tagged image.", +} + +func (ImageStreamStatus) SwaggerDoc() map[string]string { + return map_ImageStreamStatus +} + +var map_ImageStreamTag = map[string]string{ + "": "ImageStreamTag represents an Image that is retrieved by tag name from an ImageStream. Use this resource to interact with the tags and images in an image stream by tag, or to see the image details for a particular tag. The image associated with this resource is the most recently successfully tagged, imported, or pushed image (as described in the image stream status.tags.items list for this tag). If an import is in progress or has failed the previous image will be shown. Deleting an image stream tag clears both the status and spec fields of an image stream. If no image can be retrieved for a given tag, a not found error will be returned.", + "tag": "tag is the spec tag associated with this image stream tag, and it may be null if only pushes have occurred to this image stream.", + "generation": "generation is the current generation of the tagged image - if tag is provided and this value is not equal to the tag generation, a user has requested an import that has not completed, or conditions will be filled out indicating any error.", + "lookupPolicy": "lookupPolicy indicates whether this tag will handle image references in this namespace.", + "conditions": "conditions is an array of conditions that apply to the image stream tag.", + "image": "image associated with the ImageStream and tag.", +} + +func (ImageStreamTag) SwaggerDoc() map[string]string { + return map_ImageStreamTag +} + +var map_ImageStreamTagList = map[string]string{ + "": "ImageStreamTagList is a list of ImageStreamTag objects.", + "items": "Items is the list of image stream tags", +} + +func (ImageStreamTagList) SwaggerDoc() map[string]string { + return map_ImageStreamTagList +} + +var map_ImageTag = map[string]string{ + "": "ImageTag represents a single tag within an image stream and includes the spec, the status history, and the currently referenced image (if any) of the provided tag. This type replaces the ImageStreamTag by providing a full view of the tag. ImageTags are returned for every spec or status tag present on the image stream. If no tag exists in either form a not found error will be returned by the API. A create operation will succeed if no spec tag has already been defined and the spec field is set. Delete will remove both spec and status elements from the image stream.", + "spec": "spec is the spec tag associated with this image stream tag, and it may be null if only pushes have occurred to this image stream.", + "status": "status is the status tag details associated with this image stream tag, and it may be null if no push or import has been performed.", + "image": "image is the details of the most recent image stream status tag, and it may be null if import has not completed or an administrator has deleted the image object. To verify this is the most recent image, you must verify the generation of the most recent status.items entry matches the spec tag (if a spec tag is set). This field will not be set when listing image tags.", +} + +func (ImageTag) SwaggerDoc() map[string]string { + return map_ImageTag +} + +var map_ImageTagList = map[string]string{ + "": "ImageTagList is a list of ImageTag objects. When listing image tags, the image field is not populated. Tags are returned in alphabetical order by image stream and then tag.", + "items": "Items is the list of image stream tags", +} + +func (ImageTagList) SwaggerDoc() map[string]string { + return map_ImageTagList +} + +var map_NamedTagEventList = map[string]string{ + "": "NamedTagEventList relates a tag to its image history.", + "tag": "Tag is the tag for which the history is recorded", + "items": "Standard object's metadata.", + "conditions": "Conditions is an array of conditions that apply to the tag event list.", +} + +func (NamedTagEventList) SwaggerDoc() map[string]string { + return map_NamedTagEventList +} + +var map_RepositoryImportSpec = map[string]string{ + "": "RepositoryImportSpec describes a request to import images from a container image repository.", + "from": "From is the source for the image repository to import; only kind DockerImage and a name of a container image repository is allowed", + "importPolicy": "ImportPolicy is the policy controlling how the image is imported", + "referencePolicy": "ReferencePolicy defines how other components should consume the image", + "includeManifest": "IncludeManifest determines if the manifest for each image is returned in the response", +} + +func (RepositoryImportSpec) SwaggerDoc() map[string]string { + return map_RepositoryImportSpec +} + +var map_RepositoryImportStatus = map[string]string{ + "": "RepositoryImportStatus describes the result of an image repository import", + "status": "Status reflects whether any failure occurred during import", + "images": "Images is a list of images successfully retrieved by the import of the repository.", + "additionalTags": "AdditionalTags are tags that exist in the repository but were not imported because a maximum limit of automatic imports was applied.", +} + +func (RepositoryImportStatus) SwaggerDoc() map[string]string { + return map_RepositoryImportStatus +} + +var map_SignatureCondition = map[string]string{ + "": "SignatureCondition describes an image signature condition of particular kind at particular probe time.", + "type": "Type of signature condition, Complete or Failed.", + "status": "Status of the condition, one of True, False, Unknown.", + "lastProbeTime": "Last time the condition was checked.", + "lastTransitionTime": "Last time the condition transit from one status to another.", + "reason": "(brief) reason for the condition's last transition.", + "message": "Human readable message indicating details about last transition.", +} + +func (SignatureCondition) SwaggerDoc() map[string]string { + return map_SignatureCondition +} + +var map_SignatureGenericEntity = map[string]string{ + "": "SignatureGenericEntity holds a generic information about a person or entity who is an issuer or a subject of signing certificate or key.", + "organization": "Organization name.", + "commonName": "Common name (e.g. openshift-signing-service).", +} + +func (SignatureGenericEntity) SwaggerDoc() map[string]string { + return map_SignatureGenericEntity +} + +var map_SignatureIssuer = map[string]string{ + "": "SignatureIssuer holds information about an issuer of signing certificate or key.", +} + +func (SignatureIssuer) SwaggerDoc() map[string]string { + return map_SignatureIssuer +} + +var map_SignatureSubject = map[string]string{ + "": "SignatureSubject holds information about a person or entity who created the signature.", + "publicKeyID": "If present, it is a human readable key id of public key belonging to the subject used to verify image signature. It should contain at least 64 lowest bits of public key's fingerprint (e.g. 0x685ebe62bf278440).", +} + +func (SignatureSubject) SwaggerDoc() map[string]string { + return map_SignatureSubject +} + +var map_TagEvent = map[string]string{ + "": "TagEvent is used by ImageStreamStatus to keep a historical record of images associated with a tag.", + "created": "Created holds the time the TagEvent was created", + "dockerImageReference": "DockerImageReference is the string that can be used to pull this image", + "image": "Image is the image", + "generation": "Generation is the spec tag generation that resulted in this tag being updated", +} + +func (TagEvent) SwaggerDoc() map[string]string { + return map_TagEvent +} + +var map_TagEventCondition = map[string]string{ + "": "TagEventCondition contains condition information for a tag event.", + "type": "Type of tag event condition, currently only ImportSuccess", + "status": "Status of the condition, one of True, False, Unknown.", + "lastTransitionTime": "LastTransitionTIme is the time the condition transitioned from one status to another.", + "reason": "Reason is a brief machine readable explanation for the condition's last transition.", + "message": "Message is a human readable description of the details about last transition, complementing reason.", + "generation": "Generation is the spec tag generation that this status corresponds to", +} + +func (TagEventCondition) SwaggerDoc() map[string]string { + return map_TagEventCondition +} + +var map_TagImportPolicy = map[string]string{ + "": "TagImportPolicy controls how images related to this tag will be imported.", + "insecure": "Insecure is true if the server may bypass certificate verification or connect directly over HTTP during image import.", + "scheduled": "Scheduled indicates to the server that this tag should be periodically checked to ensure it is up to date, and imported", +} + +func (TagImportPolicy) SwaggerDoc() map[string]string { + return map_TagImportPolicy +} + +var map_TagReference = map[string]string{ + "": "TagReference specifies optional annotations for images using this tag and an optional reference to an ImageStreamTag, ImageStreamImage, or DockerImage this tag should track.", + "name": "Name of the tag", + "annotations": "Optional; if specified, annotations that are applied to images retrieved via ImageStreamTags.", + "from": "Optional; if specified, a reference to another image that this tag should point to. Valid values are ImageStreamTag, ImageStreamImage, and DockerImage. ImageStreamTag references can only reference a tag within this same ImageStream.", + "reference": "Reference states if the tag will be imported. Default value is false, which means the tag will be imported.", + "generation": "Generation is a counter that tracks mutations to the spec tag (user intent). When a tag reference is changed the generation is set to match the current stream generation (which is incremented every time spec is changed). Other processes in the system like the image importer observe that the generation of spec tag is newer than the generation recorded in the status and use that as a trigger to import the newest remote tag. To trigger a new import, clients may set this value to zero which will reset the generation to the latest stream generation. Legacy clients will send this value as nil which will be merged with the current tag generation.", + "importPolicy": "ImportPolicy is information that controls how images may be imported by the server.", + "referencePolicy": "ReferencePolicy defines how other components should consume the image.", +} + +func (TagReference) SwaggerDoc() map[string]string { + return map_TagReference +} + +var map_TagReferencePolicy = map[string]string{ + "": "TagReferencePolicy describes how pull-specs for images in this image stream tag are generated when image change triggers in deployment configs or builds are resolved. This allows the image stream author to control how images are accessed.", + "type": "Type determines how the image pull spec should be transformed when the image stream tag is used in deployment config triggers or new builds. The default value is `Source`, indicating the original location of the image should be used (if imported). The user may also specify `Local`, indicating that the pull spec should point to the integrated container image registry and leverage the registry's ability to proxy the pull to an upstream registry. `Local` allows the credentials used to pull this image to be managed from the image stream's namespace, so others on the platform can access a remote image but have no access to the remote secret. It also allows the image layers to be mirrored into the local registry which the images can still be pulled even if the upstream registry is unavailable.", +} + +func (TagReferencePolicy) SwaggerDoc() map[string]string { + return map_TagReferencePolicy +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/kubecontrolplane/v1/doc.go b/vendor/github.com/openshift/api/kubecontrolplane/v1/doc.go new file mode 100644 index 0000000000000..d8872a61329bf --- /dev/null +++ b/vendor/github.com/openshift/api/kubecontrolplane/v1/doc.go @@ -0,0 +1,7 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +groupName=kubecontrolplane.config.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/kubecontrolplane/v1/register.go b/vendor/github.com/openshift/api/kubecontrolplane/v1/register.go new file mode 100644 index 0000000000000..f8abc8ad8ce8f --- /dev/null +++ b/vendor/github.com/openshift/api/kubecontrolplane/v1/register.go @@ -0,0 +1,38 @@ +package v1 + +import ( + configv1 "github.com/openshift/api/config/v1" + osinv1 "github.com/openshift/api/osin/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "kubecontrolplane.config.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, osinv1.Install, configv1.Install) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &KubeAPIServerConfig{}, + &KubeControllerManagerConfig{}, + ) + return nil +} diff --git a/vendor/github.com/openshift/api/kubecontrolplane/v1/types.go b/vendor/github.com/openshift/api/kubecontrolplane/v1/types.go new file mode 100644 index 0000000000000..97c1d5b7d0599 --- /dev/null +++ b/vendor/github.com/openshift/api/kubecontrolplane/v1/types.go @@ -0,0 +1,213 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "fmt" + + configv1 "github.com/openshift/api/config/v1" + osinv1 "github.com/openshift/api/osin/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type KubeAPIServerConfig struct { + metav1.TypeMeta `json:",inline"` + + // provides the standard apiserver configuration + configv1.GenericAPIServerConfig `json:",inline"` + + // authConfig configures authentication options in addition to the standard + // oauth token and client certificate authenticators + AuthConfig MasterAuthConfig `json:"authConfig"` + + // aggregatorConfig has options for configuring the aggregator component of the API server. + AggregatorConfig AggregatorConfig `json:"aggregatorConfig"` + + // kubeletClientInfo contains information about how to connect to kubelets + KubeletClientInfo KubeletConnectionInfo `json:"kubeletClientInfo"` + + // servicesSubnet is the subnet to use for assigning service IPs + ServicesSubnet string `json:"servicesSubnet"` + // servicesNodePortRange is the range to use for assigning service public ports on a host. + ServicesNodePortRange string `json:"servicesNodePortRange"` + + // consolePublicURL is an optional URL to provide a redirect from the kube-apiserver to the webconsole + ConsolePublicURL string `json:"consolePublicURL"` + + // UserAgentMatchingConfig controls how API calls from *voluntarily* identifying clients will be handled. THIS DOES NOT DEFEND AGAINST MALICIOUS CLIENTS! + // TODO I think we should just drop this feature. + UserAgentMatchingConfig UserAgentMatchingConfig `json:"userAgentMatchingConfig"` + + // imagePolicyConfig feeds the image policy admission plugin + // TODO make it an admission plugin config + ImagePolicyConfig KubeAPIServerImagePolicyConfig `json:"imagePolicyConfig"` + + // projectConfig feeds an admission plugin + // TODO make it an admission plugin config + ProjectConfig KubeAPIServerProjectConfig `json:"projectConfig"` + + // serviceAccountPublicKeyFiles is a list of files, each containing a PEM-encoded public RSA key. + // (If any file contains a private key, the public portion of the key is used) + // The list of public keys is used to verify presented service account tokens. + // Each key is tried in order until the list is exhausted or verification succeeds. + // If no keys are specified, no service account authentication will be available. + ServiceAccountPublicKeyFiles []string `json:"serviceAccountPublicKeyFiles"` + + // oauthConfig, if present start the /oauth endpoint in this process + OAuthConfig *osinv1.OAuthConfig `json:"oauthConfig"` + + // TODO this needs to be removed. + APIServerArguments map[string]Arguments `json:"apiServerArguments"` +} + +// Arguments masks the value so protobuf can generate +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +type Arguments []string + +func (t Arguments) String() string { + return fmt.Sprintf("%v", []string(t)) +} + +type KubeAPIServerImagePolicyConfig struct { + // internalRegistryHostname sets the hostname for the default internal image + // registry. The value must be in "hostname[:port]" format. + // For backward compatibility, users can still use OPENSHIFT_DEFAULT_REGISTRY + // environment variable but this setting overrides the environment variable. + InternalRegistryHostname string `json:"internalRegistryHostname"` + // externalRegistryHostnames provides the hostnames for the default external image + // registry. The external hostname should be set only when the image registry + // is exposed externally. The first value is used in 'publicDockerImageRepository' + // field in ImageStreams. The value must be in "hostname[:port]" format. + ExternalRegistryHostnames []string `json:"externalRegistryHostnames"` +} + +type KubeAPIServerProjectConfig struct { + // defaultNodeSelector holds default project node label selector + DefaultNodeSelector string `json:"defaultNodeSelector"` +} + +// KubeletConnectionInfo holds information necessary for connecting to a kubelet +type KubeletConnectionInfo struct { + // port is the port to connect to kubelets on + Port uint32 `json:"port"` + // ca is the CA for verifying TLS connections to kubelets + CA string `json:"ca"` + // CertInfo is the TLS client cert information for securing communication to kubelets + // this is anonymous so that we can inline it for serialization + configv1.CertInfo `json:",inline"` +} + +// UserAgentMatchingConfig controls how API calls from *voluntarily* identifying clients will be handled. THIS DOES NOT DEFEND AGAINST MALICIOUS CLIENTS! +type UserAgentMatchingConfig struct { + // requiredClients if this list is non-empty, then a User-Agent must match one of the UserAgentRegexes to be allowed + RequiredClients []UserAgentMatchRule `json:"requiredClients"` + + // deniedClients if this list is non-empty, then a User-Agent must not match any of the UserAgentRegexes + DeniedClients []UserAgentDenyRule `json:"deniedClients"` + + // defaultRejectionMessage is the message shown when rejecting a client. If it is not a set, a generic message is given. + DefaultRejectionMessage string `json:"defaultRejectionMessage"` +} + +// UserAgentMatchRule describes how to match a given request based on User-Agent and HTTPVerb +type UserAgentMatchRule struct { + // regex is a regex that is checked against the User-Agent. + // Known variants of oc clients + // 1. oc accessing kube resources: oc/v1.2.0 (linux/amd64) kubernetes/bc4550d + // 2. oc accessing openshift resources: oc/v1.1.3 (linux/amd64) openshift/b348c2f + // 3. openshift kubectl accessing kube resources: openshift/v1.2.0 (linux/amd64) kubernetes/bc4550d + // 4. openshift kubectl accessing openshift resources: openshift/v1.1.3 (linux/amd64) openshift/b348c2f + // 5. oadm accessing kube resources: oadm/v1.2.0 (linux/amd64) kubernetes/bc4550d + // 6. oadm accessing openshift resources: oadm/v1.1.3 (linux/amd64) openshift/b348c2f + // 7. openshift cli accessing kube resources: openshift/v1.2.0 (linux/amd64) kubernetes/bc4550d + // 8. openshift cli accessing openshift resources: openshift/v1.1.3 (linux/amd64) openshift/b348c2f + Regex string `json:"regex"` + + // httpVerbs specifies which HTTP verbs should be matched. An empty list means "match all verbs". + HTTPVerbs []string `json:"httpVerbs"` +} + +// UserAgentDenyRule adds a rejection message that can be used to help a user figure out how to get an approved client +type UserAgentDenyRule struct { + UserAgentMatchRule `json:",inline"` + + // RejectionMessage is the message shown when rejecting a client. If it is not a set, the default message is used. + RejectionMessage string `json:"rejectionMessage"` +} + +// MasterAuthConfig configures authentication options in addition to the standard +// oauth token and client certificate authenticators +type MasterAuthConfig struct { + // requestHeader holds options for setting up a front proxy against the the API. It is optional. + RequestHeader *RequestHeaderAuthenticationOptions `json:"requestHeader"` + // webhookTokenAuthenticators, if present configures remote token reviewers + WebhookTokenAuthenticators []WebhookTokenAuthenticator `json:"webhookTokenAuthenticators"` + // oauthMetadataFile is a path to a file containing the discovery endpoint for OAuth 2.0 Authorization + // Server Metadata for an external OAuth server. + // See IETF Draft: // https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2 + // This option is mutually exclusive with OAuthConfig + OAuthMetadataFile string `json:"oauthMetadataFile"` +} + +// WebhookTokenAuthenticators holds the necessary configuation options for +// external token authenticators +type WebhookTokenAuthenticator struct { + // configFile is a path to a Kubeconfig file with the webhook configuration + ConfigFile string `json:"configFile"` + // cacheTTL indicates how long an authentication result should be cached. + // It takes a valid time duration string (e.g. "5m"). + // If empty, you get a default timeout of 2 minutes. + // If zero (e.g. "0m"), caching is disabled + CacheTTL string `json:"cacheTTL"` +} + +// RequestHeaderAuthenticationOptions provides options for setting up a front proxy against the entire +// API instead of against the /oauth endpoint. +type RequestHeaderAuthenticationOptions struct { + // clientCA is a file with the trusted signer certs. It is required. + ClientCA string `json:"clientCA"` + // clientCommonNames is a required list of common names to require a match from. + ClientCommonNames []string `json:"clientCommonNames"` + + // usernameHeaders is the list of headers to check for user information. First hit wins. + UsernameHeaders []string `json:"usernameHeaders"` + // groupHeaders is the set of headers to check for group information. All are unioned. + GroupHeaders []string `json:"groupHeaders"` + // extraHeaderPrefixes is the set of request header prefixes to inspect for user extra. X-Remote-Extra- is suggested. + ExtraHeaderPrefixes []string `json:"extraHeaderPrefixes"` +} + +// AggregatorConfig holds information required to make the aggregator function. +type AggregatorConfig struct { + // proxyClientInfo specifies the client cert/key to use when proxying to aggregated API servers + ProxyClientInfo configv1.CertInfo `json:"proxyClientInfo"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type KubeControllerManagerConfig struct { + metav1.TypeMeta `json:",inline"` + + // serviceServingCert provides support for the old alpha service serving cert signer CA bundle + ServiceServingCert ServiceServingCert `json:"serviceServingCert"` + + // projectConfig is an optimization for the daemonset controller + ProjectConfig KubeControllerManagerProjectConfig `json:"projectConfig"` + + // extendedArguments is used to configure the kube-controller-manager + ExtendedArguments map[string]Arguments `json:"extendedArguments"` +} + +type KubeControllerManagerProjectConfig struct { + // defaultNodeSelector holds default project node label selector + DefaultNodeSelector string `json:"defaultNodeSelector"` +} + +// ServiceServingCert holds configuration for service serving cert signer which creates cert/key pairs for +// pods fulfilling a service to serve with. +type ServiceServingCert struct { + // CertFile is a file containing a PEM-encoded certificate + CertFile string `json:"certFile"` +} diff --git a/vendor/github.com/openshift/api/kubecontrolplane/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/kubecontrolplane/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..3e4b5730f25f1 --- /dev/null +++ b/vendor/github.com/openshift/api/kubecontrolplane/v1/zz_generated.deepcopy.go @@ -0,0 +1,378 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + osinv1 "github.com/openshift/api/osin/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AggregatorConfig) DeepCopyInto(out *AggregatorConfig) { + *out = *in + out.ProxyClientInfo = in.ProxyClientInfo + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AggregatorConfig. +func (in *AggregatorConfig) DeepCopy() *AggregatorConfig { + if in == nil { + return nil + } + out := new(AggregatorConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in Arguments) DeepCopyInto(out *Arguments) { + { + in := &in + *out = make(Arguments, len(*in)) + copy(*out, *in) + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Arguments. +func (in Arguments) DeepCopy() Arguments { + if in == nil { + return nil + } + out := new(Arguments) + in.DeepCopyInto(out) + return *out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeAPIServerConfig) DeepCopyInto(out *KubeAPIServerConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.GenericAPIServerConfig.DeepCopyInto(&out.GenericAPIServerConfig) + in.AuthConfig.DeepCopyInto(&out.AuthConfig) + out.AggregatorConfig = in.AggregatorConfig + out.KubeletClientInfo = in.KubeletClientInfo + in.UserAgentMatchingConfig.DeepCopyInto(&out.UserAgentMatchingConfig) + in.ImagePolicyConfig.DeepCopyInto(&out.ImagePolicyConfig) + out.ProjectConfig = in.ProjectConfig + if in.ServiceAccountPublicKeyFiles != nil { + in, out := &in.ServiceAccountPublicKeyFiles, &out.ServiceAccountPublicKeyFiles + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.OAuthConfig != nil { + in, out := &in.OAuthConfig, &out.OAuthConfig + *out = new(osinv1.OAuthConfig) + (*in).DeepCopyInto(*out) + } + if in.APIServerArguments != nil { + in, out := &in.APIServerArguments, &out.APIServerArguments + *out = make(map[string]Arguments, len(*in)) + for key, val := range *in { + var outVal []string + if val == nil { + (*out)[key] = nil + } else { + in, out := &val, &outVal + *out = make(Arguments, len(*in)) + copy(*out, *in) + } + (*out)[key] = outVal + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeAPIServerConfig. +func (in *KubeAPIServerConfig) DeepCopy() *KubeAPIServerConfig { + if in == nil { + return nil + } + out := new(KubeAPIServerConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *KubeAPIServerConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeAPIServerImagePolicyConfig) DeepCopyInto(out *KubeAPIServerImagePolicyConfig) { + *out = *in + if in.ExternalRegistryHostnames != nil { + in, out := &in.ExternalRegistryHostnames, &out.ExternalRegistryHostnames + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeAPIServerImagePolicyConfig. +func (in *KubeAPIServerImagePolicyConfig) DeepCopy() *KubeAPIServerImagePolicyConfig { + if in == nil { + return nil + } + out := new(KubeAPIServerImagePolicyConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeAPIServerProjectConfig) DeepCopyInto(out *KubeAPIServerProjectConfig) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeAPIServerProjectConfig. +func (in *KubeAPIServerProjectConfig) DeepCopy() *KubeAPIServerProjectConfig { + if in == nil { + return nil + } + out := new(KubeAPIServerProjectConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeControllerManagerConfig) DeepCopyInto(out *KubeControllerManagerConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ServiceServingCert = in.ServiceServingCert + out.ProjectConfig = in.ProjectConfig + if in.ExtendedArguments != nil { + in, out := &in.ExtendedArguments, &out.ExtendedArguments + *out = make(map[string]Arguments, len(*in)) + for key, val := range *in { + var outVal []string + if val == nil { + (*out)[key] = nil + } else { + in, out := &val, &outVal + *out = make(Arguments, len(*in)) + copy(*out, *in) + } + (*out)[key] = outVal + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeControllerManagerConfig. +func (in *KubeControllerManagerConfig) DeepCopy() *KubeControllerManagerConfig { + if in == nil { + return nil + } + out := new(KubeControllerManagerConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *KubeControllerManagerConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeControllerManagerProjectConfig) DeepCopyInto(out *KubeControllerManagerProjectConfig) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeControllerManagerProjectConfig. +func (in *KubeControllerManagerProjectConfig) DeepCopy() *KubeControllerManagerProjectConfig { + if in == nil { + return nil + } + out := new(KubeControllerManagerProjectConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeletConnectionInfo) DeepCopyInto(out *KubeletConnectionInfo) { + *out = *in + out.CertInfo = in.CertInfo + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeletConnectionInfo. +func (in *KubeletConnectionInfo) DeepCopy() *KubeletConnectionInfo { + if in == nil { + return nil + } + out := new(KubeletConnectionInfo) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterAuthConfig) DeepCopyInto(out *MasterAuthConfig) { + *out = *in + if in.RequestHeader != nil { + in, out := &in.RequestHeader, &out.RequestHeader + *out = new(RequestHeaderAuthenticationOptions) + (*in).DeepCopyInto(*out) + } + if in.WebhookTokenAuthenticators != nil { + in, out := &in.WebhookTokenAuthenticators, &out.WebhookTokenAuthenticators + *out = make([]WebhookTokenAuthenticator, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterAuthConfig. +func (in *MasterAuthConfig) DeepCopy() *MasterAuthConfig { + if in == nil { + return nil + } + out := new(MasterAuthConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RequestHeaderAuthenticationOptions) DeepCopyInto(out *RequestHeaderAuthenticationOptions) { + *out = *in + if in.ClientCommonNames != nil { + in, out := &in.ClientCommonNames, &out.ClientCommonNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.UsernameHeaders != nil { + in, out := &in.UsernameHeaders, &out.UsernameHeaders + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.GroupHeaders != nil { + in, out := &in.GroupHeaders, &out.GroupHeaders + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ExtraHeaderPrefixes != nil { + in, out := &in.ExtraHeaderPrefixes, &out.ExtraHeaderPrefixes + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RequestHeaderAuthenticationOptions. +func (in *RequestHeaderAuthenticationOptions) DeepCopy() *RequestHeaderAuthenticationOptions { + if in == nil { + return nil + } + out := new(RequestHeaderAuthenticationOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceServingCert) DeepCopyInto(out *ServiceServingCert) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceServingCert. +func (in *ServiceServingCert) DeepCopy() *ServiceServingCert { + if in == nil { + return nil + } + out := new(ServiceServingCert) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UserAgentDenyRule) DeepCopyInto(out *UserAgentDenyRule) { + *out = *in + in.UserAgentMatchRule.DeepCopyInto(&out.UserAgentMatchRule) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserAgentDenyRule. +func (in *UserAgentDenyRule) DeepCopy() *UserAgentDenyRule { + if in == nil { + return nil + } + out := new(UserAgentDenyRule) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UserAgentMatchRule) DeepCopyInto(out *UserAgentMatchRule) { + *out = *in + if in.HTTPVerbs != nil { + in, out := &in.HTTPVerbs, &out.HTTPVerbs + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserAgentMatchRule. +func (in *UserAgentMatchRule) DeepCopy() *UserAgentMatchRule { + if in == nil { + return nil + } + out := new(UserAgentMatchRule) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UserAgentMatchingConfig) DeepCopyInto(out *UserAgentMatchingConfig) { + *out = *in + if in.RequiredClients != nil { + in, out := &in.RequiredClients, &out.RequiredClients + *out = make([]UserAgentMatchRule, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.DeniedClients != nil { + in, out := &in.DeniedClients, &out.DeniedClients + *out = make([]UserAgentDenyRule, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserAgentMatchingConfig. +func (in *UserAgentMatchingConfig) DeepCopy() *UserAgentMatchingConfig { + if in == nil { + return nil + } + out := new(UserAgentMatchingConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WebhookTokenAuthenticator) DeepCopyInto(out *WebhookTokenAuthenticator) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WebhookTokenAuthenticator. +func (in *WebhookTokenAuthenticator) DeepCopy() *WebhookTokenAuthenticator { + if in == nil { + return nil + } + out := new(WebhookTokenAuthenticator) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/kubecontrolplane/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/kubecontrolplane/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000000..7a0cbada2ea77 --- /dev/null +++ b/vendor/github.com/openshift/api/kubecontrolplane/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,159 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_AggregatorConfig = map[string]string{ + "": "AggregatorConfig holds information required to make the aggregator function.", + "proxyClientInfo": "proxyClientInfo specifies the client cert/key to use when proxying to aggregated API servers", +} + +func (AggregatorConfig) SwaggerDoc() map[string]string { + return map_AggregatorConfig +} + +var map_KubeAPIServerConfig = map[string]string{ + "authConfig": "authConfig configures authentication options in addition to the standard oauth token and client certificate authenticators", + "aggregatorConfig": "aggregatorConfig has options for configuring the aggregator component of the API server.", + "kubeletClientInfo": "kubeletClientInfo contains information about how to connect to kubelets", + "servicesSubnet": "servicesSubnet is the subnet to use for assigning service IPs", + "servicesNodePortRange": "servicesNodePortRange is the range to use for assigning service public ports on a host.", + "consolePublicURL": "consolePublicURL is an optional URL to provide a redirect from the kube-apiserver to the webconsole", + "userAgentMatchingConfig": "UserAgentMatchingConfig controls how API calls from *voluntarily* identifying clients will be handled. THIS DOES NOT DEFEND AGAINST MALICIOUS CLIENTS!", + "imagePolicyConfig": "imagePolicyConfig feeds the image policy admission plugin", + "projectConfig": "projectConfig feeds an admission plugin", + "serviceAccountPublicKeyFiles": "serviceAccountPublicKeyFiles is a list of files, each containing a PEM-encoded public RSA key. (If any file contains a private key, the public portion of the key is used) The list of public keys is used to verify presented service account tokens. Each key is tried in order until the list is exhausted or verification succeeds. If no keys are specified, no service account authentication will be available.", + "oauthConfig": "oauthConfig, if present start the /oauth endpoint in this process", +} + +func (KubeAPIServerConfig) SwaggerDoc() map[string]string { + return map_KubeAPIServerConfig +} + +var map_KubeAPIServerImagePolicyConfig = map[string]string{ + "internalRegistryHostname": "internalRegistryHostname sets the hostname for the default internal image registry. The value must be in \"hostname[:port]\" format. For backward compatibility, users can still use OPENSHIFT_DEFAULT_REGISTRY environment variable but this setting overrides the environment variable.", + "externalRegistryHostnames": "externalRegistryHostnames provides the hostnames for the default external image registry. The external hostname should be set only when the image registry is exposed externally. The first value is used in 'publicDockerImageRepository' field in ImageStreams. The value must be in \"hostname[:port]\" format.", +} + +func (KubeAPIServerImagePolicyConfig) SwaggerDoc() map[string]string { + return map_KubeAPIServerImagePolicyConfig +} + +var map_KubeAPIServerProjectConfig = map[string]string{ + "defaultNodeSelector": "defaultNodeSelector holds default project node label selector", +} + +func (KubeAPIServerProjectConfig) SwaggerDoc() map[string]string { + return map_KubeAPIServerProjectConfig +} + +var map_KubeControllerManagerConfig = map[string]string{ + "serviceServingCert": "serviceServingCert provides support for the old alpha service serving cert signer CA bundle", + "projectConfig": "projectConfig is an optimization for the daemonset controller", + "extendedArguments": "extendedArguments is used to configure the kube-controller-manager", +} + +func (KubeControllerManagerConfig) SwaggerDoc() map[string]string { + return map_KubeControllerManagerConfig +} + +var map_KubeControllerManagerProjectConfig = map[string]string{ + "defaultNodeSelector": "defaultNodeSelector holds default project node label selector", +} + +func (KubeControllerManagerProjectConfig) SwaggerDoc() map[string]string { + return map_KubeControllerManagerProjectConfig +} + +var map_KubeletConnectionInfo = map[string]string{ + "": "KubeletConnectionInfo holds information necessary for connecting to a kubelet", + "port": "port is the port to connect to kubelets on", + "ca": "ca is the CA for verifying TLS connections to kubelets", +} + +func (KubeletConnectionInfo) SwaggerDoc() map[string]string { + return map_KubeletConnectionInfo +} + +var map_MasterAuthConfig = map[string]string{ + "": "MasterAuthConfig configures authentication options in addition to the standard oauth token and client certificate authenticators", + "requestHeader": "requestHeader holds options for setting up a front proxy against the the API. It is optional.", + "webhookTokenAuthenticators": "webhookTokenAuthenticators, if present configures remote token reviewers", + "oauthMetadataFile": "oauthMetadataFile is a path to a file containing the discovery endpoint for OAuth 2.0 Authorization Server Metadata for an external OAuth server. See IETF Draft: // https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2 This option is mutually exclusive with OAuthConfig", +} + +func (MasterAuthConfig) SwaggerDoc() map[string]string { + return map_MasterAuthConfig +} + +var map_RequestHeaderAuthenticationOptions = map[string]string{ + "": "RequestHeaderAuthenticationOptions provides options for setting up a front proxy against the entire API instead of against the /oauth endpoint.", + "clientCA": "clientCA is a file with the trusted signer certs. It is required.", + "clientCommonNames": "clientCommonNames is a required list of common names to require a match from.", + "usernameHeaders": "usernameHeaders is the list of headers to check for user information. First hit wins.", + "groupHeaders": "groupHeaders is the set of headers to check for group information. All are unioned.", + "extraHeaderPrefixes": "extraHeaderPrefixes is the set of request header prefixes to inspect for user extra. X-Remote-Extra- is suggested.", +} + +func (RequestHeaderAuthenticationOptions) SwaggerDoc() map[string]string { + return map_RequestHeaderAuthenticationOptions +} + +var map_ServiceServingCert = map[string]string{ + "": "ServiceServingCert holds configuration for service serving cert signer which creates cert/key pairs for pods fulfilling a service to serve with.", + "certFile": "CertFile is a file containing a PEM-encoded certificate", +} + +func (ServiceServingCert) SwaggerDoc() map[string]string { + return map_ServiceServingCert +} + +var map_UserAgentDenyRule = map[string]string{ + "": "UserAgentDenyRule adds a rejection message that can be used to help a user figure out how to get an approved client", + "rejectionMessage": "RejectionMessage is the message shown when rejecting a client. If it is not a set, the default message is used.", +} + +func (UserAgentDenyRule) SwaggerDoc() map[string]string { + return map_UserAgentDenyRule +} + +var map_UserAgentMatchRule = map[string]string{ + "": "UserAgentMatchRule describes how to match a given request based on User-Agent and HTTPVerb", + "regex": "regex is a regex that is checked against the User-Agent. Known variants of oc clients 1. oc accessing kube resources: oc/v1.2.0 (linux/amd64) kubernetes/bc4550d 2. oc accessing openshift resources: oc/v1.1.3 (linux/amd64) openshift/b348c2f 3. openshift kubectl accessing kube resources: openshift/v1.2.0 (linux/amd64) kubernetes/bc4550d 4. openshift kubectl accessing openshift resources: openshift/v1.1.3 (linux/amd64) openshift/b348c2f 5. oadm accessing kube resources: oadm/v1.2.0 (linux/amd64) kubernetes/bc4550d 6. oadm accessing openshift resources: oadm/v1.1.3 (linux/amd64) openshift/b348c2f 7. openshift cli accessing kube resources: openshift/v1.2.0 (linux/amd64) kubernetes/bc4550d 8. openshift cli accessing openshift resources: openshift/v1.1.3 (linux/amd64) openshift/b348c2f", + "httpVerbs": "httpVerbs specifies which HTTP verbs should be matched. An empty list means \"match all verbs\".", +} + +func (UserAgentMatchRule) SwaggerDoc() map[string]string { + return map_UserAgentMatchRule +} + +var map_UserAgentMatchingConfig = map[string]string{ + "": "UserAgentMatchingConfig controls how API calls from *voluntarily* identifying clients will be handled. THIS DOES NOT DEFEND AGAINST MALICIOUS CLIENTS!", + "requiredClients": "requiredClients if this list is non-empty, then a User-Agent must match one of the UserAgentRegexes to be allowed", + "deniedClients": "deniedClients if this list is non-empty, then a User-Agent must not match any of the UserAgentRegexes", + "defaultRejectionMessage": "defaultRejectionMessage is the message shown when rejecting a client. If it is not a set, a generic message is given.", +} + +func (UserAgentMatchingConfig) SwaggerDoc() map[string]string { + return map_UserAgentMatchingConfig +} + +var map_WebhookTokenAuthenticator = map[string]string{ + "": "WebhookTokenAuthenticators holds the necessary configuation options for external token authenticators", + "configFile": "configFile is a path to a Kubeconfig file with the webhook configuration", + "cacheTTL": "cacheTTL indicates how long an authentication result should be cached. It takes a valid time duration string (e.g. \"5m\"). If empty, you get a default timeout of 2 minutes. If zero (e.g. \"0m\"), caching is disabled", +} + +func (WebhookTokenAuthenticator) SwaggerDoc() map[string]string { + return map_WebhookTokenAuthenticator +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/network/v1/001-clusternetwork-crd.yaml b/vendor/github.com/openshift/api/network/v1/001-clusternetwork-crd.yaml new file mode 100644 index 0000000000000..16bc8b5f22633 --- /dev/null +++ b/vendor/github.com/openshift/api/network/v1/001-clusternetwork-crd.yaml @@ -0,0 +1,127 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: clusternetworks.network.openshift.io +spec: + group: network.openshift.io + names: + kind: ClusterNetwork + listKind: ClusterNetworkList + plural: clusternetworks + singular: clusternetwork + scope: Cluster + additionalPrinterColumns: + - name: Cluster Network + type: string + description: The primary cluster network CIDR + JSONPath: .network + - name: Service Network + type: string + description: The service network CIDR + JSONPath: .serviceNetwork + - name: Plugin Name + type: string + description: The OpenShift SDN network plug-in in use + JSONPath: .pluginName + version: v1 + versions: + - name: v1 + served: true + storage: true + "schema": + "openAPIV3Schema": + description: ClusterNetwork describes the cluster network. There is normally + only one object of this type, named "default", which is created by the SDN + network plugin based on the master configuration when the cluster is brought + up for the first time. + type: object + required: + - clusterNetworks + - serviceNetwork + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + clusterNetworks: + description: ClusterNetworks is a list of ClusterNetwork objects that + defines the global overlay network's L3 space by specifying a set of + CIDR and netmasks that the SDN can allocate addresses from. + type: array + items: + description: ClusterNetworkEntry defines an individual cluster network. + The CIDRs cannot overlap with other cluster network CIDRs, CIDRs reserved + for external ips, CIDRs reserved for service networks, and CIDRs reserved + for ingress ips. + type: object + required: + - CIDR + - hostSubnetLength + properties: + CIDR: + description: CIDR defines the total range of a cluster networks + address space. + type: string + pattern: ^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$ + hostSubnetLength: + description: HostSubnetLength is the number of bits of the accompanying + CIDR address to allocate to each node. eg, 8 would mean that each + node would have a /24 slice of the overlay network for its pods. + type: integer + format: int32 + maximum: 30 + minimum: 2 + hostsubnetlength: + description: HostSubnetLength is the number of bits of network to allocate + to each node. eg, 8 would mean that each node would have a /24 slice + of the overlay network for its pods + type: integer + format: int32 + maximum: 30 + minimum: 2 + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + mtu: + description: MTU is the MTU for the overlay network. This should be 50 + less than the MTU of the network connecting the nodes. It is normally + autodetected by the cluster network operator. + type: integer + format: int32 + maximum: 65536 + minimum: 576 + network: + description: Network is a CIDR string specifying the global overlay network's + L3 space + type: string + pattern: ^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$ + pluginName: + description: PluginName is the name of the network plugin being used + type: string + serviceNetwork: + description: ServiceNetwork is the CIDR range that Service IP addresses + are allocated from + type: string + pattern: ^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$ + vxlanPort: + description: VXLANPort sets the VXLAN destination port used by the cluster. + It is set by the master configuration file on startup and cannot be + edited manually. Valid values for VXLANPort are integers 1-65535 inclusive + and if unset defaults to 4789. Changing VXLANPort allows users to resolve + issues between openshift SDN and other software trying to use the same + VXLAN destination port. + type: integer + format: int32 + maximum: 65535 + minimum: 1 +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/vendor/github.com/openshift/api/network/v1/002-hostsubnet-crd.yaml b/vendor/github.com/openshift/api/network/v1/002-hostsubnet-crd.yaml new file mode 100644 index 0000000000000..1cc4ebd5f7587 --- /dev/null +++ b/vendor/github.com/openshift/api/network/v1/002-hostsubnet-crd.yaml @@ -0,0 +1,105 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: hostsubnets.network.openshift.io +spec: + group: network.openshift.io + names: + kind: HostSubnet + listKind: HostSubnetList + plural: hostsubnets + singular: hostsubnet + scope: Cluster + additionalPrinterColumns: + - name: Host + type: string + description: The name of the node + JSONPath: .host + - name: Host IP + type: string + description: The IP address to be used as a VTEP by other nodes in the overlay + network + JSONPath: .hostIP + - name: Subnet + type: string + description: The CIDR range of the overlay network assigned to the node for its + pods + JSONPath: .subnet + - name: Egress CIDRs + type: string + description: The network egress CIDRs + JSONPath: .egressCIDRs + - name: Egress IPs + type: string + description: The network egress IP addresses + JSONPath: .egressIPs + version: v1 + versions: + - name: v1 + served: true + storage: true + "schema": + "openAPIV3Schema": + description: HostSubnet describes the container subnet network on a node. + The HostSubnet object must have the same name as the Node object it corresponds + to. + type: object + required: + - host + - hostIP + - subnet + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + egressCIDRs: + description: EgressCIDRs is the list of CIDR ranges available for automatically + assigning egress IPs to this node from. If this field is set then EgressIPs + should be treated as read-only. + type: array + items: + description: HostSubnetEgressCIDR represents one egress CIDR from which + to assign IP addresses for this node represented by the HostSubnet + type: string + pattern: ^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$ + egressIPs: + description: EgressIPs is the list of automatic egress IP addresses currently + hosted by this node. If EgressCIDRs is empty, this can be set by hand; + if EgressCIDRs is set then the master will overwrite the value here + with its own allocation of egress IPs. + type: array + items: + description: HostSubnetEgressIP represents one egress IP address currently + hosted on the node represented by HostSubnet + type: string + pattern: ^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$ + host: + description: Host is the name of the node. (This is the same as the object's + name, but both fields must be set.) + type: string + pattern: ^[a-z0-9.-]+$ + hostIP: + description: HostIP is the IP address to be used as a VTEP by other nodes + in the overlay network + type: string + pattern: ^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$ + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + subnet: + description: Subnet is the CIDR range of the overlay network assigned + to the node for its pods + type: string + pattern: ^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$ +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/vendor/github.com/openshift/api/network/v1/003-netnamespace-crd.yaml b/vendor/github.com/openshift/api/network/v1/003-netnamespace-crd.yaml new file mode 100644 index 0000000000000..efe4ebec590d4 --- /dev/null +++ b/vendor/github.com/openshift/api/network/v1/003-netnamespace-crd.yaml @@ -0,0 +1,79 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: netnamespaces.network.openshift.io +spec: + group: network.openshift.io + names: + kind: NetNamespace + listKind: NetNamespaceList + plural: netnamespaces + singular: netnamespace + scope: Cluster + additionalPrinterColumns: + - name: NetID + type: integer + description: The network identifier of the network namespace + JSONPath: .netid + - name: Egress IPs + type: string + description: The network egress IP addresses + JSONPath: .egressIPs + version: v1 + versions: + - name: v1 + served: true + storage: true + "schema": + "openAPIV3Schema": + description: NetNamespace describes a single isolated network. When using + the redhat/openshift-ovs-multitenant plugin, every Namespace will have a + corresponding NetNamespace object with the same name. (When using redhat/openshift-ovs-subnet, + NetNamespaces are not used.) + type: object + required: + - netid + - netname + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + egressIPs: + description: EgressIPs is a list of reserved IPs that will be used as + the source for external traffic coming from pods in this namespace. + (If empty, external traffic will be masqueraded to Node IPs.) + type: array + items: + description: NetNamespaceEgressIP is a single egress IP out of a list + of reserved IPs used as source of external traffic coming from pods + in this namespace + type: string + pattern: ^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$ + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + netid: + description: NetID is the network identifier of the network namespace + assigned to each overlay network packet. This can be manipulated with + the "oc adm pod-network" commands. + type: integer + format: int32 + maximum: 16777215 + minimum: 0 + netname: + description: NetName is the name of the network namespace. (This is the + same as the object's name, but both fields must be set.) + type: string + pattern: ^[a-z0-9.-]+$ +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/vendor/github.com/openshift/api/network/v1/004-egressnetworkpolicy-crd.yaml b/vendor/github.com/openshift/api/network/v1/004-egressnetworkpolicy-crd.yaml new file mode 100644 index 0000000000000..7660739480c25 --- /dev/null +++ b/vendor/github.com/openshift/api/network/v1/004-egressnetworkpolicy-crd.yaml @@ -0,0 +1,87 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: egressnetworkpolicies.network.openshift.io +spec: + group: network.openshift.io + names: + kind: EgressNetworkPolicy + listKind: EgressNetworkPolicyList + plural: egressnetworkpolicies + singular: egressnetworkpolicy + scope: Namespaced + version: v1 + versions: + - name: v1 + served: true + storage: true + "schema": + "openAPIV3Schema": + description: EgressNetworkPolicy describes the current egress network policy + for a Namespace. When using the 'redhat/openshift-ovs-multitenant' network + plugin, traffic from a pod to an IP address outside the cluster will be + checked against each EgressNetworkPolicyRule in the pod's namespace's EgressNetworkPolicy, + in order. If no rule matches (or no EgressNetworkPolicy is present) then + the traffic will be allowed by default. + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec is the specification of the current egress network policy + type: object + required: + - egress + properties: + egress: + description: egress contains the list of egress policy rules + type: array + items: + description: EgressNetworkPolicyRule contains a single egress network + policy rule + type: object + required: + - to + - type + properties: + to: + description: to is the target that traffic is allowed/denied + to + type: object + properties: + cidrSelector: + description: CIDRSelector is the CIDR range to allow/deny + traffic to. If this is set, dnsName must be unset Ideally + we would have liked to use the cidr openapi format for + this property. But openshift-sdn only supports v4 while + specifying the cidr format allows both v4 and v6 cidrs + We are therefore using a regex pattern to validate instead. + type: string + pattern: ^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$ + dnsName: + description: DNSName is the domain name to allow/deny traffic + to. If this is set, cidrSelector must be unset + type: string + pattern: ^([A-Za-z0-9-]+\.)*[A-Za-z0-9-]+\.?$ + type: + description: type marks this as an "Allow" or "Deny" rule + type: string + pattern: ^Allow|Deny$ +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/vendor/github.com/openshift/api/network/v1/constants.go b/vendor/github.com/openshift/api/network/v1/constants.go new file mode 100644 index 0000000000000..54c06f331909e --- /dev/null +++ b/vendor/github.com/openshift/api/network/v1/constants.go @@ -0,0 +1,17 @@ +package v1 + +const ( + // Pod annotations + AssignMacvlanAnnotation = "pod.network.openshift.io/assign-macvlan" + + // HostSubnet annotations. (Note: should be "hostsubnet.network.openshift.io/", but the incorrect name is now part of the API.) + AssignHostSubnetAnnotation = "pod.network.openshift.io/assign-subnet" + FixedVNIDHostAnnotation = "pod.network.openshift.io/fixed-vnid-host" + NodeUIDAnnotation = "pod.network.openshift.io/node-uid" + + // NetNamespace annotations + MulticastEnabledAnnotation = "netnamespace.network.openshift.io/multicast-enabled" + + // ChangePodNetworkAnnotation is an annotation on NetNamespace to request change of pod network + ChangePodNetworkAnnotation string = "pod.network.openshift.io/multitenant.change-network" +) diff --git a/vendor/github.com/openshift/api/network/v1/doc.go b/vendor/github.com/openshift/api/network/v1/doc.go new file mode 100644 index 0000000000000..2816420d9688c --- /dev/null +++ b/vendor/github.com/openshift/api/network/v1/doc.go @@ -0,0 +1,8 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=github.com/openshift/origin/pkg/network/apis/network +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +groupName=network.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/network/v1/generated.pb.go b/vendor/github.com/openshift/api/network/v1/generated.pb.go new file mode 100644 index 0000000000000..466b342c41191 --- /dev/null +++ b/vendor/github.com/openshift/api/network/v1/generated.pb.go @@ -0,0 +1,3222 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: github.com/openshift/api/network/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *ClusterNetwork) Reset() { *m = ClusterNetwork{} } +func (*ClusterNetwork) ProtoMessage() {} +func (*ClusterNetwork) Descriptor() ([]byte, []int) { + return fileDescriptor_38d1cb27735fa5d9, []int{0} +} +func (m *ClusterNetwork) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterNetwork) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterNetwork) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterNetwork.Merge(m, src) +} +func (m *ClusterNetwork) XXX_Size() int { + return m.Size() +} +func (m *ClusterNetwork) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterNetwork.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterNetwork proto.InternalMessageInfo + +func (m *ClusterNetworkEntry) Reset() { *m = ClusterNetworkEntry{} } +func (*ClusterNetworkEntry) ProtoMessage() {} +func (*ClusterNetworkEntry) Descriptor() ([]byte, []int) { + return fileDescriptor_38d1cb27735fa5d9, []int{1} +} +func (m *ClusterNetworkEntry) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterNetworkEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterNetworkEntry) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterNetworkEntry.Merge(m, src) +} +func (m *ClusterNetworkEntry) XXX_Size() int { + return m.Size() +} +func (m *ClusterNetworkEntry) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterNetworkEntry.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterNetworkEntry proto.InternalMessageInfo + +func (m *ClusterNetworkList) Reset() { *m = ClusterNetworkList{} } +func (*ClusterNetworkList) ProtoMessage() {} +func (*ClusterNetworkList) Descriptor() ([]byte, []int) { + return fileDescriptor_38d1cb27735fa5d9, []int{2} +} +func (m *ClusterNetworkList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterNetworkList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterNetworkList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterNetworkList.Merge(m, src) +} +func (m *ClusterNetworkList) XXX_Size() int { + return m.Size() +} +func (m *ClusterNetworkList) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterNetworkList.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterNetworkList proto.InternalMessageInfo + +func (m *EgressNetworkPolicy) Reset() { *m = EgressNetworkPolicy{} } +func (*EgressNetworkPolicy) ProtoMessage() {} +func (*EgressNetworkPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_38d1cb27735fa5d9, []int{3} +} +func (m *EgressNetworkPolicy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EgressNetworkPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EgressNetworkPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_EgressNetworkPolicy.Merge(m, src) +} +func (m *EgressNetworkPolicy) XXX_Size() int { + return m.Size() +} +func (m *EgressNetworkPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_EgressNetworkPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_EgressNetworkPolicy proto.InternalMessageInfo + +func (m *EgressNetworkPolicyList) Reset() { *m = EgressNetworkPolicyList{} } +func (*EgressNetworkPolicyList) ProtoMessage() {} +func (*EgressNetworkPolicyList) Descriptor() ([]byte, []int) { + return fileDescriptor_38d1cb27735fa5d9, []int{4} +} +func (m *EgressNetworkPolicyList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EgressNetworkPolicyList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EgressNetworkPolicyList) XXX_Merge(src proto.Message) { + xxx_messageInfo_EgressNetworkPolicyList.Merge(m, src) +} +func (m *EgressNetworkPolicyList) XXX_Size() int { + return m.Size() +} +func (m *EgressNetworkPolicyList) XXX_DiscardUnknown() { + xxx_messageInfo_EgressNetworkPolicyList.DiscardUnknown(m) +} + +var xxx_messageInfo_EgressNetworkPolicyList proto.InternalMessageInfo + +func (m *EgressNetworkPolicyPeer) Reset() { *m = EgressNetworkPolicyPeer{} } +func (*EgressNetworkPolicyPeer) ProtoMessage() {} +func (*EgressNetworkPolicyPeer) Descriptor() ([]byte, []int) { + return fileDescriptor_38d1cb27735fa5d9, []int{5} +} +func (m *EgressNetworkPolicyPeer) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EgressNetworkPolicyPeer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EgressNetworkPolicyPeer) XXX_Merge(src proto.Message) { + xxx_messageInfo_EgressNetworkPolicyPeer.Merge(m, src) +} +func (m *EgressNetworkPolicyPeer) XXX_Size() int { + return m.Size() +} +func (m *EgressNetworkPolicyPeer) XXX_DiscardUnknown() { + xxx_messageInfo_EgressNetworkPolicyPeer.DiscardUnknown(m) +} + +var xxx_messageInfo_EgressNetworkPolicyPeer proto.InternalMessageInfo + +func (m *EgressNetworkPolicyRule) Reset() { *m = EgressNetworkPolicyRule{} } +func (*EgressNetworkPolicyRule) ProtoMessage() {} +func (*EgressNetworkPolicyRule) Descriptor() ([]byte, []int) { + return fileDescriptor_38d1cb27735fa5d9, []int{6} +} +func (m *EgressNetworkPolicyRule) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EgressNetworkPolicyRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EgressNetworkPolicyRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_EgressNetworkPolicyRule.Merge(m, src) +} +func (m *EgressNetworkPolicyRule) XXX_Size() int { + return m.Size() +} +func (m *EgressNetworkPolicyRule) XXX_DiscardUnknown() { + xxx_messageInfo_EgressNetworkPolicyRule.DiscardUnknown(m) +} + +var xxx_messageInfo_EgressNetworkPolicyRule proto.InternalMessageInfo + +func (m *EgressNetworkPolicySpec) Reset() { *m = EgressNetworkPolicySpec{} } +func (*EgressNetworkPolicySpec) ProtoMessage() {} +func (*EgressNetworkPolicySpec) Descriptor() ([]byte, []int) { + return fileDescriptor_38d1cb27735fa5d9, []int{7} +} +func (m *EgressNetworkPolicySpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EgressNetworkPolicySpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *EgressNetworkPolicySpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_EgressNetworkPolicySpec.Merge(m, src) +} +func (m *EgressNetworkPolicySpec) XXX_Size() int { + return m.Size() +} +func (m *EgressNetworkPolicySpec) XXX_DiscardUnknown() { + xxx_messageInfo_EgressNetworkPolicySpec.DiscardUnknown(m) +} + +var xxx_messageInfo_EgressNetworkPolicySpec proto.InternalMessageInfo + +func (m *HostSubnet) Reset() { *m = HostSubnet{} } +func (*HostSubnet) ProtoMessage() {} +func (*HostSubnet) Descriptor() ([]byte, []int) { + return fileDescriptor_38d1cb27735fa5d9, []int{8} +} +func (m *HostSubnet) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HostSubnet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HostSubnet) XXX_Merge(src proto.Message) { + xxx_messageInfo_HostSubnet.Merge(m, src) +} +func (m *HostSubnet) XXX_Size() int { + return m.Size() +} +func (m *HostSubnet) XXX_DiscardUnknown() { + xxx_messageInfo_HostSubnet.DiscardUnknown(m) +} + +var xxx_messageInfo_HostSubnet proto.InternalMessageInfo + +func (m *HostSubnetList) Reset() { *m = HostSubnetList{} } +func (*HostSubnetList) ProtoMessage() {} +func (*HostSubnetList) Descriptor() ([]byte, []int) { + return fileDescriptor_38d1cb27735fa5d9, []int{9} +} +func (m *HostSubnetList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HostSubnetList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *HostSubnetList) XXX_Merge(src proto.Message) { + xxx_messageInfo_HostSubnetList.Merge(m, src) +} +func (m *HostSubnetList) XXX_Size() int { + return m.Size() +} +func (m *HostSubnetList) XXX_DiscardUnknown() { + xxx_messageInfo_HostSubnetList.DiscardUnknown(m) +} + +var xxx_messageInfo_HostSubnetList proto.InternalMessageInfo + +func (m *NetNamespace) Reset() { *m = NetNamespace{} } +func (*NetNamespace) ProtoMessage() {} +func (*NetNamespace) Descriptor() ([]byte, []int) { + return fileDescriptor_38d1cb27735fa5d9, []int{10} +} +func (m *NetNamespace) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetNamespace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetNamespace) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetNamespace.Merge(m, src) +} +func (m *NetNamespace) XXX_Size() int { + return m.Size() +} +func (m *NetNamespace) XXX_DiscardUnknown() { + xxx_messageInfo_NetNamespace.DiscardUnknown(m) +} + +var xxx_messageInfo_NetNamespace proto.InternalMessageInfo + +func (m *NetNamespaceList) Reset() { *m = NetNamespaceList{} } +func (*NetNamespaceList) ProtoMessage() {} +func (*NetNamespaceList) Descriptor() ([]byte, []int) { + return fileDescriptor_38d1cb27735fa5d9, []int{11} +} +func (m *NetNamespaceList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetNamespaceList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *NetNamespaceList) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetNamespaceList.Merge(m, src) +} +func (m *NetNamespaceList) XXX_Size() int { + return m.Size() +} +func (m *NetNamespaceList) XXX_DiscardUnknown() { + xxx_messageInfo_NetNamespaceList.DiscardUnknown(m) +} + +var xxx_messageInfo_NetNamespaceList proto.InternalMessageInfo + +func init() { + proto.RegisterType((*ClusterNetwork)(nil), "github.com.openshift.api.network.v1.ClusterNetwork") + proto.RegisterType((*ClusterNetworkEntry)(nil), "github.com.openshift.api.network.v1.ClusterNetworkEntry") + proto.RegisterType((*ClusterNetworkList)(nil), "github.com.openshift.api.network.v1.ClusterNetworkList") + proto.RegisterType((*EgressNetworkPolicy)(nil), "github.com.openshift.api.network.v1.EgressNetworkPolicy") + proto.RegisterType((*EgressNetworkPolicyList)(nil), "github.com.openshift.api.network.v1.EgressNetworkPolicyList") + proto.RegisterType((*EgressNetworkPolicyPeer)(nil), "github.com.openshift.api.network.v1.EgressNetworkPolicyPeer") + proto.RegisterType((*EgressNetworkPolicyRule)(nil), "github.com.openshift.api.network.v1.EgressNetworkPolicyRule") + proto.RegisterType((*EgressNetworkPolicySpec)(nil), "github.com.openshift.api.network.v1.EgressNetworkPolicySpec") + proto.RegisterType((*HostSubnet)(nil), "github.com.openshift.api.network.v1.HostSubnet") + proto.RegisterType((*HostSubnetList)(nil), "github.com.openshift.api.network.v1.HostSubnetList") + proto.RegisterType((*NetNamespace)(nil), "github.com.openshift.api.network.v1.NetNamespace") + proto.RegisterType((*NetNamespaceList)(nil), "github.com.openshift.api.network.v1.NetNamespaceList") +} + +func init() { + proto.RegisterFile("github.com/openshift/api/network/v1/generated.proto", fileDescriptor_38d1cb27735fa5d9) +} + +var fileDescriptor_38d1cb27735fa5d9 = []byte{ + // 995 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x4f, 0x6f, 0xe3, 0x44, + 0x14, 0x8f, 0xf3, 0xa7, 0x6d, 0x26, 0x6d, 0x5a, 0xcd, 0x56, 0xac, 0x29, 0x52, 0x12, 0xb9, 0x02, + 0x82, 0x56, 0xd8, 0xa4, 0x8b, 0x50, 0x0f, 0x08, 0xb4, 0x6e, 0x2b, 0x6d, 0xa4, 0x6e, 0x88, 0x26, + 0x65, 0x55, 0x21, 0x40, 0xb8, 0xce, 0xac, 0x63, 0x9a, 0xd8, 0x96, 0x67, 0x12, 0x88, 0x10, 0x7f, + 0x2e, 0xdc, 0xf9, 0x00, 0x7c, 0x0c, 0x3e, 0x02, 0x87, 0x1e, 0x38, 0xec, 0x09, 0xf6, 0x14, 0x51, + 0x73, 0xe7, 0x03, 0xf4, 0x84, 0x66, 0x3c, 0x8e, 0xed, 0xac, 0x2b, 0xa2, 0x22, 0x72, 0x4a, 0xe6, + 0xfd, 0xde, 0xdf, 0xf9, 0xbd, 0xf7, 0xc6, 0xe0, 0xa1, 0x65, 0xd3, 0xc1, 0xf8, 0x42, 0x35, 0xdd, + 0x91, 0xe6, 0x7a, 0xd8, 0x21, 0x03, 0xfb, 0x19, 0xd5, 0x0c, 0xcf, 0xd6, 0x1c, 0x4c, 0xbf, 0x72, + 0xfd, 0x4b, 0x6d, 0xd2, 0xd2, 0x2c, 0xec, 0x60, 0xdf, 0xa0, 0xb8, 0xaf, 0x7a, 0xbe, 0x4b, 0x5d, + 0xb8, 0x1f, 0x1b, 0xa9, 0x73, 0x23, 0xd5, 0xf0, 0x6c, 0x55, 0x18, 0xa9, 0x93, 0xd6, 0xde, 0xdb, + 0x09, 0xcf, 0x96, 0x6b, 0xb9, 0x1a, 0xb7, 0xbd, 0x18, 0x3f, 0xe3, 0x27, 0x7e, 0xe0, 0xff, 0x42, + 0x9f, 0x7b, 0xef, 0x5e, 0x1e, 0x12, 0xd5, 0x76, 0x59, 0xe8, 0x91, 0x61, 0x0e, 0x6c, 0x07, 0xfb, + 0x53, 0xcd, 0xbb, 0xb4, 0x98, 0x80, 0x68, 0x23, 0x4c, 0x8d, 0x8c, 0x4c, 0xf6, 0xde, 0xbb, 0xcd, + 0xca, 0x1f, 0x3b, 0xd4, 0x1e, 0x61, 0x8d, 0x98, 0x03, 0x3c, 0x32, 0x16, 0xed, 0x94, 0x9f, 0x8b, + 0xa0, 0x7a, 0x34, 0x1c, 0x13, 0x8a, 0xfd, 0x4e, 0x98, 0x32, 0xfc, 0x02, 0x6c, 0xb0, 0x28, 0x7d, + 0x83, 0x1a, 0xb2, 0xd4, 0x90, 0x9a, 0x95, 0x83, 0x77, 0xd4, 0xd0, 0xbb, 0x9a, 0xf4, 0xae, 0x7a, + 0x97, 0x16, 0x13, 0x10, 0x95, 0x69, 0xab, 0x93, 0x96, 0xfa, 0xd1, 0xc5, 0x97, 0xd8, 0xa4, 0x4f, + 0x30, 0x35, 0x74, 0x78, 0x35, 0xab, 0xe7, 0x82, 0x59, 0x1d, 0xc4, 0x32, 0x34, 0xf7, 0x0a, 0xdf, + 0x02, 0xeb, 0xe2, 0x7e, 0xe4, 0x7c, 0x43, 0x6a, 0x96, 0xf5, 0x6d, 0xa1, 0xbe, 0x2e, 0x72, 0x40, + 0x11, 0x0e, 0x8f, 0xc1, 0xce, 0xc0, 0x25, 0x94, 0x8c, 0x2f, 0x1c, 0x4c, 0x87, 0xd8, 0xb1, 0xe8, + 0x40, 0x2e, 0x34, 0xa4, 0xe6, 0x96, 0x2e, 0x0b, 0x9b, 0x9d, 0xc7, 0x2e, 0xa1, 0x3d, 0x8e, 0x9f, + 0x72, 0x1c, 0xbd, 0x64, 0x01, 0x3f, 0x00, 0x55, 0x82, 0xfd, 0x89, 0x6d, 0x62, 0x11, 0x40, 0x2e, + 0xf2, 0xb8, 0xaf, 0x08, 0x1f, 0xd5, 0x5e, 0x0a, 0x45, 0x0b, 0xda, 0xf0, 0x00, 0x00, 0x6f, 0x38, + 0xb6, 0x6c, 0xa7, 0x63, 0x8c, 0xb0, 0x5c, 0xe2, 0xb6, 0xf3, 0x12, 0xbb, 0x73, 0x04, 0x25, 0xb4, + 0xe0, 0x37, 0x60, 0xdb, 0x4c, 0x5d, 0x2c, 0x91, 0xd7, 0x1a, 0x85, 0x66, 0xe5, 0xe0, 0x50, 0x5d, + 0xa2, 0x6b, 0xd4, 0x34, 0x29, 0x27, 0x0e, 0xf5, 0xa7, 0xfa, 0x7d, 0x11, 0x72, 0x3b, 0x0d, 0x12, + 0xb4, 0x18, 0x09, 0x3e, 0x00, 0xe5, 0xc9, 0xd7, 0x43, 0xc3, 0xe9, 0xba, 0x3e, 0x95, 0xd7, 0xf9, + 0x7d, 0x6d, 0x05, 0xb3, 0x7a, 0xf9, 0xe9, 0xf9, 0xe9, 0xa3, 0x0e, 0x13, 0xa2, 0x18, 0x87, 0xaf, + 0x82, 0xc2, 0x88, 0x8e, 0xe5, 0x0d, 0xae, 0xb6, 0x1e, 0xcc, 0xea, 0x85, 0x27, 0x67, 0x1f, 0x23, + 0x26, 0x53, 0xbe, 0x05, 0xf7, 0x32, 0x12, 0x81, 0x0d, 0x50, 0x34, 0xed, 0xbe, 0xcf, 0xdb, 0xa3, + 0xac, 0x6f, 0x8a, 0xb4, 0x8a, 0x47, 0xed, 0x63, 0x84, 0x38, 0x12, 0xf1, 0x96, 0xe4, 0x85, 0x73, + 0xfd, 0xaf, 0xbc, 0x25, 0x25, 0xca, 0x6f, 0x12, 0x80, 0xe9, 0xf8, 0xa7, 0x36, 0xa1, 0xf0, 0xd3, + 0x97, 0x3a, 0x54, 0x5d, 0xae, 0x43, 0x99, 0x35, 0xef, 0xcf, 0x1d, 0x91, 0xc4, 0x46, 0x24, 0x49, + 0x74, 0xe7, 0x39, 0x28, 0xd9, 0x14, 0x8f, 0x88, 0x9c, 0xe7, 0x74, 0x3d, 0xbc, 0x03, 0x5d, 0xfa, + 0x96, 0xf0, 0x5f, 0x6a, 0x33, 0x4f, 0x28, 0x74, 0xa8, 0xfc, 0x21, 0x81, 0x7b, 0x27, 0x96, 0x8f, + 0x09, 0x11, 0x7a, 0x5d, 0x77, 0x68, 0x9b, 0xd3, 0x15, 0x4c, 0xdc, 0xe7, 0xa0, 0x48, 0x3c, 0x6c, + 0x72, 0x0a, 0x2a, 0x07, 0xef, 0x2f, 0x55, 0x52, 0x46, 0xa6, 0x3d, 0x0f, 0x9b, 0x31, 0xdd, 0xec, + 0x84, 0xb8, 0x5f, 0xe5, 0x77, 0x09, 0xdc, 0xcf, 0xd0, 0x5f, 0x01, 0x5b, 0x9f, 0xa5, 0xd9, 0x3a, + 0xbc, 0x6b, 0x69, 0xb7, 0x50, 0xf6, 0x5d, 0x66, 0x5d, 0x5d, 0x8c, 0x7d, 0x78, 0x08, 0x36, 0x59, + 0xab, 0xf7, 0xf0, 0x10, 0x9b, 0xd4, 0x8d, 0x86, 0x61, 0x57, 0xb8, 0xd9, 0x64, 0xc3, 0x10, 0x61, + 0x28, 0xa5, 0xc9, 0xf6, 0x5f, 0xdf, 0x21, 0x7c, 0x97, 0x2c, 0xec, 0xbf, 0xe3, 0x4e, 0x8f, 0x2f, + 0x92, 0x08, 0x57, 0x7e, 0xc9, 0xbe, 0x58, 0x34, 0x1e, 0x62, 0xf8, 0x21, 0x28, 0xd2, 0xa9, 0x87, + 0x45, 0xe0, 0x07, 0x11, 0x2d, 0x67, 0x53, 0x0f, 0xdf, 0xcc, 0xea, 0xaf, 0xdd, 0x62, 0xc6, 0x60, + 0xc4, 0x0d, 0xe1, 0x39, 0xc8, 0x53, 0xf7, 0xbf, 0xf6, 0x04, 0xbb, 0x0b, 0x1d, 0x88, 0xe0, 0xf9, + 0x33, 0x17, 0xe5, 0xa9, 0xab, 0x7c, 0x9f, 0x99, 0x35, 0x6b, 0x18, 0xd8, 0x07, 0x6b, 0x98, 0x43, + 0xb2, 0xc4, 0x19, 0xbb, 0x73, 0x60, 0x56, 0x8c, 0x5e, 0x15, 0x81, 0xd7, 0x42, 0x05, 0x24, 0x7c, + 0x2b, 0x7f, 0xe7, 0x01, 0x88, 0x17, 0xcc, 0x0a, 0x26, 0xac, 0x01, 0x8a, 0x6c, 0x7d, 0x09, 0x42, + 0xe7, 0x33, 0xc2, 0x72, 0x40, 0x1c, 0x81, 0x6f, 0x80, 0x35, 0xf6, 0xdb, 0xee, 0xf2, 0x07, 0xac, + 0x1c, 0xa7, 0xfe, 0x98, 0x4b, 0x91, 0x40, 0x99, 0x5e, 0xf8, 0x78, 0x89, 0x47, 0x6a, 0xae, 0x17, + 0xd6, 0x82, 0x04, 0x0a, 0x1f, 0x81, 0x72, 0x58, 0x6c, 0xbb, 0x4b, 0xe4, 0x52, 0xa3, 0xd0, 0x2c, + 0xeb, 0xfb, 0x6c, 0xc7, 0x9f, 0x44, 0xc2, 0x9b, 0x59, 0x1d, 0xc6, 0x77, 0x10, 0x89, 0x51, 0x6c, + 0x05, 0xdb, 0xa0, 0x12, 0x1e, 0x58, 0xb3, 0x86, 0xef, 0x53, 0x59, 0x7f, 0x33, 0x98, 0xd5, 0x2b, + 0x27, 0xb1, 0xf8, 0x66, 0x56, 0xdf, 0x5d, 0x74, 0xc3, 0x37, 0x7d, 0xd2, 0x56, 0xf9, 0x55, 0x02, + 0xd5, 0xc4, 0x46, 0xff, 0xff, 0x07, 0xff, 0x2c, 0x3d, 0xf8, 0xda, 0x52, 0x6d, 0x14, 0x67, 0x78, + 0xcb, 0xbc, 0xff, 0x98, 0x07, 0x9b, 0x1d, 0x4c, 0xd9, 0xec, 0x11, 0xcf, 0x30, 0xf1, 0xca, 0xbe, + 0x86, 0x9c, 0x8c, 0x6d, 0x20, 0x12, 0x41, 0x11, 0x0e, 0xf7, 0x41, 0xc9, 0xc1, 0xd4, 0xee, 0x8b, + 0x4f, 0xa0, 0x79, 0x09, 0x1d, 0x4c, 0xdb, 0xc7, 0x28, 0xc4, 0xe0, 0x51, 0xb2, 0x2f, 0x8a, 0x9c, + 0xd2, 0xd7, 0x17, 0xfb, 0x62, 0x37, 0x59, 0x63, 0x46, 0x67, 0x28, 0x57, 0x12, 0xd8, 0x49, 0xea, + 0xac, 0x80, 0xd0, 0xa7, 0x69, 0x42, 0x5b, 0x4b, 0x11, 0x9a, 0xcc, 0x31, 0x9b, 0x52, 0xbd, 0x79, + 0x75, 0x5d, 0xcb, 0x3d, 0xbf, 0xae, 0xe5, 0x5e, 0x5c, 0xd7, 0x72, 0x3f, 0x04, 0x35, 0xe9, 0x2a, + 0xa8, 0x49, 0xcf, 0x83, 0x9a, 0xf4, 0x22, 0xa8, 0x49, 0x7f, 0x06, 0x35, 0xe9, 0xa7, 0xbf, 0x6a, + 0xb9, 0x4f, 0xf2, 0x93, 0xd6, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xc3, 0xa5, 0xdd, 0x7e, 0x04, + 0x0c, 0x00, 0x00, +} + +func (m *ClusterNetwork) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterNetwork) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterNetwork) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.MTU != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.MTU)) + i-- + dAtA[i] = 0x40 + } + if m.VXLANPort != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.VXLANPort)) + i-- + dAtA[i] = 0x38 + } + if len(m.ClusterNetworks) > 0 { + for iNdEx := len(m.ClusterNetworks) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ClusterNetworks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + } + i -= len(m.PluginName) + copy(dAtA[i:], m.PluginName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.PluginName))) + i-- + dAtA[i] = 0x2a + i -= len(m.ServiceNetwork) + copy(dAtA[i:], m.ServiceNetwork) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceNetwork))) + i-- + dAtA[i] = 0x22 + i = encodeVarintGenerated(dAtA, i, uint64(m.HostSubnetLength)) + i-- + dAtA[i] = 0x18 + i -= len(m.Network) + copy(dAtA[i:], m.Network) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Network))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ClusterNetworkEntry) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterNetworkEntry) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterNetworkEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.HostSubnetLength)) + i-- + dAtA[i] = 0x10 + i -= len(m.CIDR) + copy(dAtA[i:], m.CIDR) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CIDR))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ClusterNetworkList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterNetworkList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterNetworkList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *EgressNetworkPolicy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EgressNetworkPolicy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EgressNetworkPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *EgressNetworkPolicyList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EgressNetworkPolicyList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EgressNetworkPolicyList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *EgressNetworkPolicyPeer) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EgressNetworkPolicyPeer) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EgressNetworkPolicyPeer) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.DNSName) + copy(dAtA[i:], m.DNSName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DNSName))) + i-- + dAtA[i] = 0x12 + i -= len(m.CIDRSelector) + copy(dAtA[i:], m.CIDRSelector) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CIDRSelector))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *EgressNetworkPolicyRule) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EgressNetworkPolicyRule) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EgressNetworkPolicyRule) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.To.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *EgressNetworkPolicySpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EgressNetworkPolicySpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EgressNetworkPolicySpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Egress) > 0 { + for iNdEx := len(m.Egress) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Egress[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *HostSubnet) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HostSubnet) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HostSubnet) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.EgressCIDRs) > 0 { + for iNdEx := len(m.EgressCIDRs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.EgressCIDRs[iNdEx]) + copy(dAtA[i:], m.EgressCIDRs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.EgressCIDRs[iNdEx]))) + i-- + dAtA[i] = 0x32 + } + } + if len(m.EgressIPs) > 0 { + for iNdEx := len(m.EgressIPs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.EgressIPs[iNdEx]) + copy(dAtA[i:], m.EgressIPs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.EgressIPs[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + i -= len(m.Subnet) + copy(dAtA[i:], m.Subnet) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Subnet))) + i-- + dAtA[i] = 0x22 + i -= len(m.HostIP) + copy(dAtA[i:], m.HostIP) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.HostIP))) + i-- + dAtA[i] = 0x1a + i -= len(m.Host) + copy(dAtA[i:], m.Host) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *HostSubnetList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HostSubnetList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HostSubnetList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *NetNamespace) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NetNamespace) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetNamespace) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.EgressIPs) > 0 { + for iNdEx := len(m.EgressIPs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.EgressIPs[iNdEx]) + copy(dAtA[i:], m.EgressIPs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.EgressIPs[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + i = encodeVarintGenerated(dAtA, i, uint64(m.NetID)) + i-- + dAtA[i] = 0x18 + i -= len(m.NetName) + copy(dAtA[i:], m.NetName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.NetName))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *NetNamespaceList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NetNamespaceList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetNamespaceList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ClusterNetwork) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Network) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.HostSubnetLength)) + l = len(m.ServiceNetwork) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.PluginName) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.ClusterNetworks) > 0 { + for _, e := range m.ClusterNetworks { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.VXLANPort != nil { + n += 1 + sovGenerated(uint64(*m.VXLANPort)) + } + if m.MTU != nil { + n += 1 + sovGenerated(uint64(*m.MTU)) + } + return n +} + +func (m *ClusterNetworkEntry) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.CIDR) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.HostSubnetLength)) + return n +} + +func (m *ClusterNetworkList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *EgressNetworkPolicy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *EgressNetworkPolicyList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *EgressNetworkPolicyPeer) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.CIDRSelector) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DNSName) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *EgressNetworkPolicyRule) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = m.To.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *EgressNetworkPolicySpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Egress) > 0 { + for _, e := range m.Egress { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *HostSubnet) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Host) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.HostIP) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Subnet) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.EgressIPs) > 0 { + for _, s := range m.EgressIPs { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.EgressCIDRs) > 0 { + for _, s := range m.EgressCIDRs { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *HostSubnetList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *NetNamespace) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.NetName) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.NetID)) + if len(m.EgressIPs) > 0 { + for _, s := range m.EgressIPs { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *NetNamespaceList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *ClusterNetwork) String() string { + if this == nil { + return "nil" + } + repeatedStringForClusterNetworks := "[]ClusterNetworkEntry{" + for _, f := range this.ClusterNetworks { + repeatedStringForClusterNetworks += strings.Replace(strings.Replace(f.String(), "ClusterNetworkEntry", "ClusterNetworkEntry", 1), `&`, ``, 1) + "," + } + repeatedStringForClusterNetworks += "}" + s := strings.Join([]string{`&ClusterNetwork{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Network:` + fmt.Sprintf("%v", this.Network) + `,`, + `HostSubnetLength:` + fmt.Sprintf("%v", this.HostSubnetLength) + `,`, + `ServiceNetwork:` + fmt.Sprintf("%v", this.ServiceNetwork) + `,`, + `PluginName:` + fmt.Sprintf("%v", this.PluginName) + `,`, + `ClusterNetworks:` + repeatedStringForClusterNetworks + `,`, + `VXLANPort:` + valueToStringGenerated(this.VXLANPort) + `,`, + `MTU:` + valueToStringGenerated(this.MTU) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterNetworkEntry) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterNetworkEntry{`, + `CIDR:` + fmt.Sprintf("%v", this.CIDR) + `,`, + `HostSubnetLength:` + fmt.Sprintf("%v", this.HostSubnetLength) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterNetworkList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ClusterNetwork{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ClusterNetwork", "ClusterNetwork", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ClusterNetworkList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *EgressNetworkPolicy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EgressNetworkPolicy{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "EgressNetworkPolicySpec", "EgressNetworkPolicySpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *EgressNetworkPolicyList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]EgressNetworkPolicy{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "EgressNetworkPolicy", "EgressNetworkPolicy", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&EgressNetworkPolicyList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *EgressNetworkPolicyPeer) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EgressNetworkPolicyPeer{`, + `CIDRSelector:` + fmt.Sprintf("%v", this.CIDRSelector) + `,`, + `DNSName:` + fmt.Sprintf("%v", this.DNSName) + `,`, + `}`, + }, "") + return s +} +func (this *EgressNetworkPolicyRule) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EgressNetworkPolicyRule{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `To:` + strings.Replace(strings.Replace(this.To.String(), "EgressNetworkPolicyPeer", "EgressNetworkPolicyPeer", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *EgressNetworkPolicySpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForEgress := "[]EgressNetworkPolicyRule{" + for _, f := range this.Egress { + repeatedStringForEgress += strings.Replace(strings.Replace(f.String(), "EgressNetworkPolicyRule", "EgressNetworkPolicyRule", 1), `&`, ``, 1) + "," + } + repeatedStringForEgress += "}" + s := strings.Join([]string{`&EgressNetworkPolicySpec{`, + `Egress:` + repeatedStringForEgress + `,`, + `}`, + }, "") + return s +} +func (this *HostSubnet) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HostSubnet{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Host:` + fmt.Sprintf("%v", this.Host) + `,`, + `HostIP:` + fmt.Sprintf("%v", this.HostIP) + `,`, + `Subnet:` + fmt.Sprintf("%v", this.Subnet) + `,`, + `EgressIPs:` + fmt.Sprintf("%v", this.EgressIPs) + `,`, + `EgressCIDRs:` + fmt.Sprintf("%v", this.EgressCIDRs) + `,`, + `}`, + }, "") + return s +} +func (this *HostSubnetList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]HostSubnet{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "HostSubnet", "HostSubnet", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&HostSubnetList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *NetNamespace) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NetNamespace{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `NetName:` + fmt.Sprintf("%v", this.NetName) + `,`, + `NetID:` + fmt.Sprintf("%v", this.NetID) + `,`, + `EgressIPs:` + fmt.Sprintf("%v", this.EgressIPs) + `,`, + `}`, + }, "") + return s +} +func (this *NetNamespaceList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]NetNamespace{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "NetNamespace", "NetNamespace", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&NetNamespaceList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *ClusterNetwork) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterNetwork: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterNetwork: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Network", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Network = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HostSubnetLength", wireType) + } + m.HostSubnetLength = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.HostSubnetLength |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceNetwork", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServiceNetwork = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PluginName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PluginName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClusterNetworks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClusterNetworks = append(m.ClusterNetworks, ClusterNetworkEntry{}) + if err := m.ClusterNetworks[len(m.ClusterNetworks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field VXLANPort", wireType) + } + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.VXLANPort = &v + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MTU", wireType) + } + var v uint32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.MTU = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterNetworkEntry) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterNetworkEntry: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterNetworkEntry: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CIDR", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CIDR = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HostSubnetLength", wireType) + } + m.HostSubnetLength = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.HostSubnetLength |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterNetworkList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterNetworkList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterNetworkList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ClusterNetwork{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EgressNetworkPolicy) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EgressNetworkPolicy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EgressNetworkPolicy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EgressNetworkPolicyList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EgressNetworkPolicyList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EgressNetworkPolicyList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, EgressNetworkPolicy{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EgressNetworkPolicyPeer) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EgressNetworkPolicyPeer: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EgressNetworkPolicyPeer: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CIDRSelector", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CIDRSelector = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DNSName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DNSName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EgressNetworkPolicyRule) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EgressNetworkPolicyRule: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EgressNetworkPolicyRule: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = EgressNetworkPolicyRuleType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field To", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.To.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EgressNetworkPolicySpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EgressNetworkPolicySpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EgressNetworkPolicySpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Egress", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Egress = append(m.Egress, EgressNetworkPolicyRule{}) + if err := m.Egress[len(m.Egress)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HostSubnet) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HostSubnet: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HostSubnet: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Host", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Host = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostIP", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostIP = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Subnet", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Subnet = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EgressIPs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EgressIPs = append(m.EgressIPs, HostSubnetEgressIP(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EgressCIDRs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EgressCIDRs = append(m.EgressCIDRs, HostSubnetEgressCIDR(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HostSubnetList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HostSubnetList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HostSubnetList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, HostSubnet{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NetNamespace) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NetNamespace: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NetNamespace: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NetName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NetName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NetID", wireType) + } + m.NetID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NetID |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EgressIPs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EgressIPs = append(m.EgressIPs, NetNamespaceEgressIP(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NetNamespaceList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NetNamespaceList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NetNamespaceList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, NetNamespace{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vendor/github.com/openshift/api/network/v1/generated.proto b/vendor/github.com/openshift/api/network/v1/generated.proto new file mode 100644 index 0000000000000..e57003f4fcda3 --- /dev/null +++ b/vendor/github.com/openshift/api/network/v1/generated.proto @@ -0,0 +1,203 @@ + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package github.com.openshift.api.network.v1; + +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// ClusterNetwork describes the cluster network. There is normally only one object of this type, +// named "default", which is created by the SDN network plugin based on the master configuration +// when the cluster is brought up for the first time. +// +kubebuilder:resource:scope="Cluster" +// +kubebuilder:printcolumn:name="Cluster Network",type=string,JSONPath=`.network`,description="The primary cluster network CIDR" +// +kubebuilder:printcolumn:name="Service Network",type=string,JSONPath=`.serviceNetwork`,description="The service network CIDR" +// +kubebuilder:printcolumn:name="Plugin Name",type=string,JSONPath=`.pluginName`,description="The Openshift SDN network plug-in in use" +message ClusterNetwork { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Network is a CIDR string specifying the global overlay network's L3 space + // +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$` + optional string network = 2; + + // HostSubnetLength is the number of bits of network to allocate to each node. eg, 8 would mean that each node would have a /24 slice of the overlay network for its pods + // +kubebuilder:validation:Minimum=2 + // +kubebuilder:validation:Maximum=30 + optional uint32 hostsubnetlength = 3; + + // ServiceNetwork is the CIDR range that Service IP addresses are allocated from + // +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$` + optional string serviceNetwork = 4; + + // PluginName is the name of the network plugin being used + optional string pluginName = 5; + + // ClusterNetworks is a list of ClusterNetwork objects that defines the global overlay network's L3 space by specifying a set of CIDR and netmasks that the SDN can allocate addresses from. + repeated ClusterNetworkEntry clusterNetworks = 6; + + // VXLANPort sets the VXLAN destination port used by the cluster. + // It is set by the master configuration file on startup and cannot be edited manually. + // Valid values for VXLANPort are integers 1-65535 inclusive and if unset defaults to 4789. + // Changing VXLANPort allows users to resolve issues between openshift SDN and other software trying to use the same VXLAN destination port. + // +kubebuilder:validation:Minimum=1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Optional + // +optional + optional uint32 vxlanPort = 7; + + // MTU is the MTU for the overlay network. This should be 50 less than the MTU of the network connecting the nodes. It is normally autodetected by the cluster network operator. + // +kubebuilder:validation:Minimum=576 + // +kubebuilder:validation:Maximum=65536 + // +kubebuilder:validation:Optional + // +optional + optional uint32 mtu = 8; +} + +// ClusterNetworkEntry defines an individual cluster network. The CIDRs cannot overlap with other cluster network CIDRs, CIDRs reserved for external ips, CIDRs reserved for service networks, and CIDRs reserved for ingress ips. +message ClusterNetworkEntry { + // CIDR defines the total range of a cluster networks address space. + // +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$` + optional string cidr = 1; + + // HostSubnetLength is the number of bits of the accompanying CIDR address to allocate to each node. eg, 8 would mean that each node would have a /24 slice of the overlay network for its pods. + // +kubebuilder:validation:Minimum=2 + // +kubebuilder:validation:Maximum=30 + optional uint32 hostSubnetLength = 2; +} + +// ClusterNetworkList is a collection of ClusterNetworks +message ClusterNetworkList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of cluster networks + repeated ClusterNetwork items = 2; +} + +// EgressNetworkPolicy describes the current egress network policy for a Namespace. When using +// the 'redhat/openshift-ovs-multitenant' network plugin, traffic from a pod to an IP address +// outside the cluster will be checked against each EgressNetworkPolicyRule in the pod's +// namespace's EgressNetworkPolicy, in order. If no rule matches (or no EgressNetworkPolicy +// is present) then the traffic will be allowed by default. +message EgressNetworkPolicy { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // spec is the specification of the current egress network policy + optional EgressNetworkPolicySpec spec = 2; +} + +// EgressNetworkPolicyList is a collection of EgressNetworkPolicy +message EgressNetworkPolicyList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is the list of policies + repeated EgressNetworkPolicy items = 2; +} + +// EgressNetworkPolicyPeer specifies a target to apply egress network policy to +message EgressNetworkPolicyPeer { + // CIDRSelector is the CIDR range to allow/deny traffic to. If this is set, dnsName must be unset + // Ideally we would have liked to use the cidr openapi format for this property. + // But openshift-sdn only supports v4 while specifying the cidr format allows both v4 and v6 cidrs + // We are therefore using a regex pattern to validate instead. + // +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$` + optional string cidrSelector = 1; + + // DNSName is the domain name to allow/deny traffic to. If this is set, cidrSelector must be unset + // +kubebuilder:validation:Pattern=`^([A-Za-z0-9-]+\.)*[A-Za-z0-9-]+\.?$` + optional string dnsName = 2; +} + +// EgressNetworkPolicyRule contains a single egress network policy rule +message EgressNetworkPolicyRule { + // type marks this as an "Allow" or "Deny" rule + optional string type = 1; + + // to is the target that traffic is allowed/denied to + optional EgressNetworkPolicyPeer to = 2; +} + +// EgressNetworkPolicySpec provides a list of policies on outgoing network traffic +message EgressNetworkPolicySpec { + // egress contains the list of egress policy rules + repeated EgressNetworkPolicyRule egress = 1; +} + +// HostSubnet describes the container subnet network on a node. The HostSubnet object must have the +// same name as the Node object it corresponds to. +// +kubebuilder:printcolumn:name="Host",type=string,JSONPath=`.host`,description="The name of the node" +// +kubebuilder:printcolumn:name="Host IP",type=string,JSONPath=`.hostIP`,description="The IP address to be used as a VTEP by other nodes in the overlay network" +// +kubebuilder:printcolumn:name="Subnet",type=string,JSONPath=`.subnet`,description="The CIDR range of the overlay network assigned to the node for its pods" +// +kubebuilder:printcolumn:name="Egress CIDRs",type=string,JSONPath=`.egressCIDRs`,description="The network egress CIDRs" +// +kubebuilder:printcolumn:name="Egress IPs",type=string,JSONPath=`.egressIPs`,description="The network egress IP addresses" +message HostSubnet { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Host is the name of the node. (This is the same as the object's name, but both fields must be set.) + // +kubebuilder:validation:Pattern=`^[a-z0-9.-]+$` + optional string host = 2; + + // HostIP is the IP address to be used as a VTEP by other nodes in the overlay network + // +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$` + optional string hostIP = 3; + + // Subnet is the CIDR range of the overlay network assigned to the node for its pods + // +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$` + optional string subnet = 4; + + // EgressIPs is the list of automatic egress IP addresses currently hosted by this node. + // If EgressCIDRs is empty, this can be set by hand; if EgressCIDRs is set then the + // master will overwrite the value here with its own allocation of egress IPs. + // +optional + repeated string egressIPs = 5; + + // EgressCIDRs is the list of CIDR ranges available for automatically assigning + // egress IPs to this node from. If this field is set then EgressIPs should be + // treated as read-only. + // +optional + repeated string egressCIDRs = 6; +} + +// HostSubnetList is a collection of HostSubnets +message HostSubnetList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of host subnets + repeated HostSubnet items = 2; +} + +// NetNamespace describes a single isolated network. When using the redhat/openshift-ovs-multitenant +// plugin, every Namespace will have a corresponding NetNamespace object with the same name. +// (When using redhat/openshift-ovs-subnet, NetNamespaces are not used.) +// +kubebuilder:printcolumn:name="NetID",type=integer,JSONPath=`.netid`,description="The network identifier of the network namespace" +// +kubebuilder:printcolumn:name="Egress IPs",type=string,JSONPath=`.egressIPs`,description="The network egress IP addresses" +message NetNamespace { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // NetName is the name of the network namespace. (This is the same as the object's name, but both fields must be set.) + // +kubebuilder:validation:Pattern=`^[a-z0-9.-]+$` + optional string netname = 2; + + // NetID is the network identifier of the network namespace assigned to each overlay network packet. This can be manipulated with the "oc adm pod-network" commands. + // +kubebuilder:validation:Minimum=0 + // +kubebuilder:validation:Maximum=16777215 + optional uint32 netid = 3; + + // EgressIPs is a list of reserved IPs that will be used as the source for external traffic coming from pods in this namespace. + // (If empty, external traffic will be masqueraded to Node IPs.) + // +optional + repeated string egressIPs = 4; +} + +// NetNamespaceList is a collection of NetNamespaces +message NetNamespaceList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of net namespaces + repeated NetNamespace items = 2; +} + diff --git a/vendor/github.com/openshift/api/network/v1/legacy.go b/vendor/github.com/openshift/api/network/v1/legacy.go new file mode 100644 index 0000000000000..4395ebf8e56da --- /dev/null +++ b/vendor/github.com/openshift/api/network/v1/legacy.go @@ -0,0 +1,27 @@ +package v1 + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + legacyGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} + legacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes) + DeprecatedInstallWithoutGroup = legacySchemeBuilder.AddToScheme +) + +func addLegacyKnownTypes(scheme *runtime.Scheme) error { + types := []runtime.Object{ + &ClusterNetwork{}, + &ClusterNetworkList{}, + &HostSubnet{}, + &HostSubnetList{}, + &NetNamespace{}, + &NetNamespaceList{}, + &EgressNetworkPolicy{}, + &EgressNetworkPolicyList{}, + } + scheme.AddKnownTypes(legacyGroupVersion, types...) + return nil +} diff --git a/vendor/github.com/openshift/api/network/v1/register.go b/vendor/github.com/openshift/api/network/v1/register.go new file mode 100644 index 0000000000000..80defa76427c7 --- /dev/null +++ b/vendor/github.com/openshift/api/network/v1/register.go @@ -0,0 +1,44 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "network.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &ClusterNetwork{}, + &ClusterNetworkList{}, + &HostSubnet{}, + &HostSubnetList{}, + &NetNamespace{}, + &NetNamespaceList{}, + &EgressNetworkPolicy{}, + &EgressNetworkPolicyList{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/network/v1/types.go b/vendor/github.com/openshift/api/network/v1/types.go new file mode 100644 index 0000000000000..c0ee55126f51d --- /dev/null +++ b/vendor/github.com/openshift/api/network/v1/types.go @@ -0,0 +1,252 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +const ( + ClusterNetworkDefault = "default" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterNetwork describes the cluster network. There is normally only one object of this type, +// named "default", which is created by the SDN network plugin based on the master configuration +// when the cluster is brought up for the first time. +// +kubebuilder:resource:scope="Cluster" +// +kubebuilder:printcolumn:name="Cluster Network",type=string,JSONPath=`.network`,description="The primary cluster network CIDR" +// +kubebuilder:printcolumn:name="Service Network",type=string,JSONPath=`.serviceNetwork`,description="The service network CIDR" +// +kubebuilder:printcolumn:name="Plugin Name",type=string,JSONPath=`.pluginName`,description="The Openshift SDN network plug-in in use" +type ClusterNetwork struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Network is a CIDR string specifying the global overlay network's L3 space + // +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$` + Network string `json:"network,omitempty" protobuf:"bytes,2,opt,name=network"` + + // HostSubnetLength is the number of bits of network to allocate to each node. eg, 8 would mean that each node would have a /24 slice of the overlay network for its pods + // +kubebuilder:validation:Minimum=2 + // +kubebuilder:validation:Maximum=30 + HostSubnetLength uint32 `json:"hostsubnetlength,omitempty" protobuf:"varint,3,opt,name=hostsubnetlength"` + + // ServiceNetwork is the CIDR range that Service IP addresses are allocated from + // +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$` + ServiceNetwork string `json:"serviceNetwork" protobuf:"bytes,4,opt,name=serviceNetwork"` + + // PluginName is the name of the network plugin being used + PluginName string `json:"pluginName,omitempty" protobuf:"bytes,5,opt,name=pluginName"` + + // ClusterNetworks is a list of ClusterNetwork objects that defines the global overlay network's L3 space by specifying a set of CIDR and netmasks that the SDN can allocate addresses from. + ClusterNetworks []ClusterNetworkEntry `json:"clusterNetworks" protobuf:"bytes,6,rep,name=clusterNetworks"` + + // VXLANPort sets the VXLAN destination port used by the cluster. + // It is set by the master configuration file on startup and cannot be edited manually. + // Valid values for VXLANPort are integers 1-65535 inclusive and if unset defaults to 4789. + // Changing VXLANPort allows users to resolve issues between openshift SDN and other software trying to use the same VXLAN destination port. + // +kubebuilder:validation:Minimum=1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Optional + // +optional + VXLANPort *uint32 `json:"vxlanPort,omitempty" protobuf:"varint,7,opt,name=vxlanPort"` + + // MTU is the MTU for the overlay network. This should be 50 less than the MTU of the network connecting the nodes. It is normally autodetected by the cluster network operator. + // +kubebuilder:validation:Minimum=576 + // +kubebuilder:validation:Maximum=65536 + // +kubebuilder:validation:Optional + // +optional + MTU *uint32 `json:"mtu,omitempty" protobuf:"varint,8,opt,name=mtu"` +} + +// ClusterNetworkEntry defines an individual cluster network. The CIDRs cannot overlap with other cluster network CIDRs, CIDRs reserved for external ips, CIDRs reserved for service networks, and CIDRs reserved for ingress ips. +type ClusterNetworkEntry struct { + // CIDR defines the total range of a cluster networks address space. + // +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$` + CIDR string `json:"CIDR" protobuf:"bytes,1,opt,name=cidr"` + + // HostSubnetLength is the number of bits of the accompanying CIDR address to allocate to each node. eg, 8 would mean that each node would have a /24 slice of the overlay network for its pods. + // +kubebuilder:validation:Minimum=2 + // +kubebuilder:validation:Maximum=30 + HostSubnetLength uint32 `json:"hostSubnetLength" protobuf:"varint,2,opt,name=hostSubnetLength"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterNetworkList is a collection of ClusterNetworks +type ClusterNetworkList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of cluster networks + Items []ClusterNetwork `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// HostSubnetEgressIP represents one egress IP address currently hosted on the node represented by +// HostSubnet +// +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$` +type HostSubnetEgressIP string + +// HostSubnetEgressCIDR represents one egress CIDR from which to assign IP addresses for this node +// represented by the HostSubnet +// +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$` +type HostSubnetEgressCIDR string + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// HostSubnet describes the container subnet network on a node. The HostSubnet object must have the +// same name as the Node object it corresponds to. +// +kubebuilder:printcolumn:name="Host",type=string,JSONPath=`.host`,description="The name of the node" +// +kubebuilder:printcolumn:name="Host IP",type=string,JSONPath=`.hostIP`,description="The IP address to be used as a VTEP by other nodes in the overlay network" +// +kubebuilder:printcolumn:name="Subnet",type=string,JSONPath=`.subnet`,description="The CIDR range of the overlay network assigned to the node for its pods" +// +kubebuilder:printcolumn:name="Egress CIDRs",type=string,JSONPath=`.egressCIDRs`,description="The network egress CIDRs" +// +kubebuilder:printcolumn:name="Egress IPs",type=string,JSONPath=`.egressIPs`,description="The network egress IP addresses" +type HostSubnet struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Host is the name of the node. (This is the same as the object's name, but both fields must be set.) + // +kubebuilder:validation:Pattern=`^[a-z0-9.-]+$` + Host string `json:"host" protobuf:"bytes,2,opt,name=host"` + + // HostIP is the IP address to be used as a VTEP by other nodes in the overlay network + // +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$` + HostIP string `json:"hostIP" protobuf:"bytes,3,opt,name=hostIP"` + + // Subnet is the CIDR range of the overlay network assigned to the node for its pods + // +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$` + Subnet string `json:"subnet" protobuf:"bytes,4,opt,name=subnet"` + + // EgressIPs is the list of automatic egress IP addresses currently hosted by this node. + // If EgressCIDRs is empty, this can be set by hand; if EgressCIDRs is set then the + // master will overwrite the value here with its own allocation of egress IPs. + // +optional + EgressIPs []HostSubnetEgressIP `json:"egressIPs,omitempty" protobuf:"bytes,5,rep,name=egressIPs"` + + // EgressCIDRs is the list of CIDR ranges available for automatically assigning + // egress IPs to this node from. If this field is set then EgressIPs should be + // treated as read-only. + // +optional + EgressCIDRs []HostSubnetEgressCIDR `json:"egressCIDRs,omitempty" protobuf:"bytes,6,rep,name=egressCIDRs"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// HostSubnetList is a collection of HostSubnets +type HostSubnetList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of host subnets + Items []HostSubnet `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// NetNamespaceEgressIP is a single egress IP out of a list of reserved IPs used as source of external traffic coming +// from pods in this namespace +// +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$` +type NetNamespaceEgressIP string + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// NetNamespace describes a single isolated network. When using the redhat/openshift-ovs-multitenant +// plugin, every Namespace will have a corresponding NetNamespace object with the same name. +// (When using redhat/openshift-ovs-subnet, NetNamespaces are not used.) +// +kubebuilder:printcolumn:name="NetID",type=integer,JSONPath=`.netid`,description="The network identifier of the network namespace" +// +kubebuilder:printcolumn:name="Egress IPs",type=string,JSONPath=`.egressIPs`,description="The network egress IP addresses" +type NetNamespace struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // NetName is the name of the network namespace. (This is the same as the object's name, but both fields must be set.) + // +kubebuilder:validation:Pattern=`^[a-z0-9.-]+$` + NetName string `json:"netname" protobuf:"bytes,2,opt,name=netname"` + + // NetID is the network identifier of the network namespace assigned to each overlay network packet. This can be manipulated with the "oc adm pod-network" commands. + // +kubebuilder:validation:Minimum=0 + // +kubebuilder:validation:Maximum=16777215 + NetID uint32 `json:"netid" protobuf:"varint,3,opt,name=netid"` + + // EgressIPs is a list of reserved IPs that will be used as the source for external traffic coming from pods in this namespace. + // (If empty, external traffic will be masqueraded to Node IPs.) + // +optional + EgressIPs []NetNamespaceEgressIP `json:"egressIPs,omitempty" protobuf:"bytes,4,rep,name=egressIPs"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// NetNamespaceList is a collection of NetNamespaces +type NetNamespaceList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of net namespaces + Items []NetNamespace `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// EgressNetworkPolicyRuleType indicates whether an EgressNetworkPolicyRule allows or denies traffic +// +kubebuilder:validation:Pattern=`^Allow|Deny$` +type EgressNetworkPolicyRuleType string + +const ( + EgressNetworkPolicyRuleAllow EgressNetworkPolicyRuleType = "Allow" + EgressNetworkPolicyRuleDeny EgressNetworkPolicyRuleType = "Deny" +) + +// EgressNetworkPolicyPeer specifies a target to apply egress network policy to +type EgressNetworkPolicyPeer struct { + // CIDRSelector is the CIDR range to allow/deny traffic to. If this is set, dnsName must be unset + // Ideally we would have liked to use the cidr openapi format for this property. + // But openshift-sdn only supports v4 while specifying the cidr format allows both v4 and v6 cidrs + // We are therefore using a regex pattern to validate instead. + // +kubebuilder:validation:Pattern=`^(([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|[12][0-9]|3[0-2])$` + CIDRSelector string `json:"cidrSelector,omitempty" protobuf:"bytes,1,rep,name=cidrSelector"` + // DNSName is the domain name to allow/deny traffic to. If this is set, cidrSelector must be unset + // +kubebuilder:validation:Pattern=`^([A-Za-z0-9-]+\.)*[A-Za-z0-9-]+\.?$` + DNSName string `json:"dnsName,omitempty" protobuf:"bytes,2,rep,name=dnsName"` +} + +// EgressNetworkPolicyRule contains a single egress network policy rule +type EgressNetworkPolicyRule struct { + // type marks this as an "Allow" or "Deny" rule + Type EgressNetworkPolicyRuleType `json:"type" protobuf:"bytes,1,rep,name=type"` + // to is the target that traffic is allowed/denied to + To EgressNetworkPolicyPeer `json:"to" protobuf:"bytes,2,rep,name=to"` +} + +// EgressNetworkPolicySpec provides a list of policies on outgoing network traffic +type EgressNetworkPolicySpec struct { + // egress contains the list of egress policy rules + Egress []EgressNetworkPolicyRule `json:"egress" protobuf:"bytes,1,rep,name=egress"` +} + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// EgressNetworkPolicy describes the current egress network policy for a Namespace. When using +// the 'redhat/openshift-ovs-multitenant' network plugin, traffic from a pod to an IP address +// outside the cluster will be checked against each EgressNetworkPolicyRule in the pod's +// namespace's EgressNetworkPolicy, in order. If no rule matches (or no EgressNetworkPolicy +// is present) then the traffic will be allowed by default. +type EgressNetworkPolicy struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // spec is the specification of the current egress network policy + Spec EgressNetworkPolicySpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// EgressNetworkPolicyList is a collection of EgressNetworkPolicy +type EgressNetworkPolicyList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is the list of policies + Items []EgressNetworkPolicy `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/github.com/openshift/api/network/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/network/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..32f766e01eb5f --- /dev/null +++ b/vendor/github.com/openshift/api/network/v1/zz_generated.deepcopy.go @@ -0,0 +1,346 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterNetwork) DeepCopyInto(out *ClusterNetwork) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.ClusterNetworks != nil { + in, out := &in.ClusterNetworks, &out.ClusterNetworks + *out = make([]ClusterNetworkEntry, len(*in)) + copy(*out, *in) + } + if in.VXLANPort != nil { + in, out := &in.VXLANPort, &out.VXLANPort + *out = new(uint32) + **out = **in + } + if in.MTU != nil { + in, out := &in.MTU, &out.MTU + *out = new(uint32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterNetwork. +func (in *ClusterNetwork) DeepCopy() *ClusterNetwork { + if in == nil { + return nil + } + out := new(ClusterNetwork) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterNetwork) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterNetworkEntry) DeepCopyInto(out *ClusterNetworkEntry) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterNetworkEntry. +func (in *ClusterNetworkEntry) DeepCopy() *ClusterNetworkEntry { + if in == nil { + return nil + } + out := new(ClusterNetworkEntry) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterNetworkList) DeepCopyInto(out *ClusterNetworkList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterNetwork, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterNetworkList. +func (in *ClusterNetworkList) DeepCopy() *ClusterNetworkList { + if in == nil { + return nil + } + out := new(ClusterNetworkList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterNetworkList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EgressNetworkPolicy) DeepCopyInto(out *EgressNetworkPolicy) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EgressNetworkPolicy. +func (in *EgressNetworkPolicy) DeepCopy() *EgressNetworkPolicy { + if in == nil { + return nil + } + out := new(EgressNetworkPolicy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *EgressNetworkPolicy) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EgressNetworkPolicyList) DeepCopyInto(out *EgressNetworkPolicyList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]EgressNetworkPolicy, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EgressNetworkPolicyList. +func (in *EgressNetworkPolicyList) DeepCopy() *EgressNetworkPolicyList { + if in == nil { + return nil + } + out := new(EgressNetworkPolicyList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *EgressNetworkPolicyList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EgressNetworkPolicyPeer) DeepCopyInto(out *EgressNetworkPolicyPeer) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EgressNetworkPolicyPeer. +func (in *EgressNetworkPolicyPeer) DeepCopy() *EgressNetworkPolicyPeer { + if in == nil { + return nil + } + out := new(EgressNetworkPolicyPeer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EgressNetworkPolicyRule) DeepCopyInto(out *EgressNetworkPolicyRule) { + *out = *in + out.To = in.To + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EgressNetworkPolicyRule. +func (in *EgressNetworkPolicyRule) DeepCopy() *EgressNetworkPolicyRule { + if in == nil { + return nil + } + out := new(EgressNetworkPolicyRule) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EgressNetworkPolicySpec) DeepCopyInto(out *EgressNetworkPolicySpec) { + *out = *in + if in.Egress != nil { + in, out := &in.Egress, &out.Egress + *out = make([]EgressNetworkPolicyRule, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EgressNetworkPolicySpec. +func (in *EgressNetworkPolicySpec) DeepCopy() *EgressNetworkPolicySpec { + if in == nil { + return nil + } + out := new(EgressNetworkPolicySpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HostSubnet) DeepCopyInto(out *HostSubnet) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.EgressIPs != nil { + in, out := &in.EgressIPs, &out.EgressIPs + *out = make([]HostSubnetEgressIP, len(*in)) + copy(*out, *in) + } + if in.EgressCIDRs != nil { + in, out := &in.EgressCIDRs, &out.EgressCIDRs + *out = make([]HostSubnetEgressCIDR, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HostSubnet. +func (in *HostSubnet) DeepCopy() *HostSubnet { + if in == nil { + return nil + } + out := new(HostSubnet) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *HostSubnet) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HostSubnetList) DeepCopyInto(out *HostSubnetList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]HostSubnet, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HostSubnetList. +func (in *HostSubnetList) DeepCopy() *HostSubnetList { + if in == nil { + return nil + } + out := new(HostSubnetList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *HostSubnetList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetNamespace) DeepCopyInto(out *NetNamespace) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.EgressIPs != nil { + in, out := &in.EgressIPs, &out.EgressIPs + *out = make([]NetNamespaceEgressIP, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetNamespace. +func (in *NetNamespace) DeepCopy() *NetNamespace { + if in == nil { + return nil + } + out := new(NetNamespace) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NetNamespace) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetNamespaceList) DeepCopyInto(out *NetNamespaceList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]NetNamespace, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetNamespaceList. +func (in *NetNamespaceList) DeepCopy() *NetNamespaceList { + if in == nil { + return nil + } + out := new(NetNamespaceList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NetNamespaceList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/vendor/github.com/openshift/api/network/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/network/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000000..9a3d2ffdf84bc --- /dev/null +++ b/vendor/github.com/openshift/api/network/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,137 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_ClusterNetwork = map[string]string{ + "": "ClusterNetwork describes the cluster network. There is normally only one object of this type, named \"default\", which is created by the SDN network plugin based on the master configuration when the cluster is brought up for the first time.", + "network": "Network is a CIDR string specifying the global overlay network's L3 space", + "hostsubnetlength": "HostSubnetLength is the number of bits of network to allocate to each node. eg, 8 would mean that each node would have a /24 slice of the overlay network for its pods", + "serviceNetwork": "ServiceNetwork is the CIDR range that Service IP addresses are allocated from", + "pluginName": "PluginName is the name of the network plugin being used", + "clusterNetworks": "ClusterNetworks is a list of ClusterNetwork objects that defines the global overlay network's L3 space by specifying a set of CIDR and netmasks that the SDN can allocate addresses from.", + "vxlanPort": "VXLANPort sets the VXLAN destination port used by the cluster. It is set by the master configuration file on startup and cannot be edited manually. Valid values for VXLANPort are integers 1-65535 inclusive and if unset defaults to 4789. Changing VXLANPort allows users to resolve issues between openshift SDN and other software trying to use the same VXLAN destination port.", + "mtu": "MTU is the MTU for the overlay network. This should be 50 less than the MTU of the network connecting the nodes. It is normally autodetected by the cluster network operator.", +} + +func (ClusterNetwork) SwaggerDoc() map[string]string { + return map_ClusterNetwork +} + +var map_ClusterNetworkEntry = map[string]string{ + "": "ClusterNetworkEntry defines an individual cluster network. The CIDRs cannot overlap with other cluster network CIDRs, CIDRs reserved for external ips, CIDRs reserved for service networks, and CIDRs reserved for ingress ips.", + "CIDR": "CIDR defines the total range of a cluster networks address space.", + "hostSubnetLength": "HostSubnetLength is the number of bits of the accompanying CIDR address to allocate to each node. eg, 8 would mean that each node would have a /24 slice of the overlay network for its pods.", +} + +func (ClusterNetworkEntry) SwaggerDoc() map[string]string { + return map_ClusterNetworkEntry +} + +var map_ClusterNetworkList = map[string]string{ + "": "ClusterNetworkList is a collection of ClusterNetworks", + "items": "Items is the list of cluster networks", +} + +func (ClusterNetworkList) SwaggerDoc() map[string]string { + return map_ClusterNetworkList +} + +var map_EgressNetworkPolicy = map[string]string{ + "": "EgressNetworkPolicy describes the current egress network policy for a Namespace. When using the 'redhat/openshift-ovs-multitenant' network plugin, traffic from a pod to an IP address outside the cluster will be checked against each EgressNetworkPolicyRule in the pod's namespace's EgressNetworkPolicy, in order. If no rule matches (or no EgressNetworkPolicy is present) then the traffic will be allowed by default.", + "spec": "spec is the specification of the current egress network policy", +} + +func (EgressNetworkPolicy) SwaggerDoc() map[string]string { + return map_EgressNetworkPolicy +} + +var map_EgressNetworkPolicyList = map[string]string{ + "": "EgressNetworkPolicyList is a collection of EgressNetworkPolicy", + "items": "items is the list of policies", +} + +func (EgressNetworkPolicyList) SwaggerDoc() map[string]string { + return map_EgressNetworkPolicyList +} + +var map_EgressNetworkPolicyPeer = map[string]string{ + "": "EgressNetworkPolicyPeer specifies a target to apply egress network policy to", + "cidrSelector": "CIDRSelector is the CIDR range to allow/deny traffic to. If this is set, dnsName must be unset Ideally we would have liked to use the cidr openapi format for this property. But openshift-sdn only supports v4 while specifying the cidr format allows both v4 and v6 cidrs We are therefore using a regex pattern to validate instead.", + "dnsName": "DNSName is the domain name to allow/deny traffic to. If this is set, cidrSelector must be unset", +} + +func (EgressNetworkPolicyPeer) SwaggerDoc() map[string]string { + return map_EgressNetworkPolicyPeer +} + +var map_EgressNetworkPolicyRule = map[string]string{ + "": "EgressNetworkPolicyRule contains a single egress network policy rule", + "type": "type marks this as an \"Allow\" or \"Deny\" rule", + "to": "to is the target that traffic is allowed/denied to", +} + +func (EgressNetworkPolicyRule) SwaggerDoc() map[string]string { + return map_EgressNetworkPolicyRule +} + +var map_EgressNetworkPolicySpec = map[string]string{ + "": "EgressNetworkPolicySpec provides a list of policies on outgoing network traffic", + "egress": "egress contains the list of egress policy rules", +} + +func (EgressNetworkPolicySpec) SwaggerDoc() map[string]string { + return map_EgressNetworkPolicySpec +} + +var map_HostSubnet = map[string]string{ + "": "HostSubnet describes the container subnet network on a node. The HostSubnet object must have the same name as the Node object it corresponds to.", + "host": "Host is the name of the node. (This is the same as the object's name, but both fields must be set.)", + "hostIP": "HostIP is the IP address to be used as a VTEP by other nodes in the overlay network", + "subnet": "Subnet is the CIDR range of the overlay network assigned to the node for its pods", + "egressIPs": "EgressIPs is the list of automatic egress IP addresses currently hosted by this node. If EgressCIDRs is empty, this can be set by hand; if EgressCIDRs is set then the master will overwrite the value here with its own allocation of egress IPs.", + "egressCIDRs": "EgressCIDRs is the list of CIDR ranges available for automatically assigning egress IPs to this node from. If this field is set then EgressIPs should be treated as read-only.", +} + +func (HostSubnet) SwaggerDoc() map[string]string { + return map_HostSubnet +} + +var map_HostSubnetList = map[string]string{ + "": "HostSubnetList is a collection of HostSubnets", + "items": "Items is the list of host subnets", +} + +func (HostSubnetList) SwaggerDoc() map[string]string { + return map_HostSubnetList +} + +var map_NetNamespace = map[string]string{ + "": "NetNamespace describes a single isolated network. When using the redhat/openshift-ovs-multitenant plugin, every Namespace will have a corresponding NetNamespace object with the same name. (When using redhat/openshift-ovs-subnet, NetNamespaces are not used.)", + "netname": "NetName is the name of the network namespace. (This is the same as the object's name, but both fields must be set.)", + "netid": "NetID is the network identifier of the network namespace assigned to each overlay network packet. This can be manipulated with the \"oc adm pod-network\" commands.", + "egressIPs": "EgressIPs is a list of reserved IPs that will be used as the source for external traffic coming from pods in this namespace. (If empty, external traffic will be masqueraded to Node IPs.)", +} + +func (NetNamespace) SwaggerDoc() map[string]string { + return map_NetNamespace +} + +var map_NetNamespaceList = map[string]string{ + "": "NetNamespaceList is a collection of NetNamespaces", + "items": "Items is the list of net namespaces", +} + +func (NetNamespaceList) SwaggerDoc() map[string]string { + return map_NetNamespaceList +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/oauth/v1/doc.go b/vendor/github.com/openshift/api/oauth/v1/doc.go new file mode 100644 index 0000000000000..cae9e70d4a536 --- /dev/null +++ b/vendor/github.com/openshift/api/oauth/v1/doc.go @@ -0,0 +1,8 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=github.com/openshift/origin/pkg/oauth/apis/oauth +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +groupName=oauth.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/oauth/v1/generated.pb.go b/vendor/github.com/openshift/api/oauth/v1/generated.pb.go new file mode 100644 index 0000000000000..43f452aa7ca70 --- /dev/null +++ b/vendor/github.com/openshift/api/oauth/v1/generated.pb.go @@ -0,0 +1,3929 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: github.com/openshift/api/oauth/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *ClusterRoleScopeRestriction) Reset() { *m = ClusterRoleScopeRestriction{} } +func (*ClusterRoleScopeRestriction) ProtoMessage() {} +func (*ClusterRoleScopeRestriction) Descriptor() ([]byte, []int) { + return fileDescriptor_bd688dca7ea39c8a, []int{0} +} +func (m *ClusterRoleScopeRestriction) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterRoleScopeRestriction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterRoleScopeRestriction) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterRoleScopeRestriction.Merge(m, src) +} +func (m *ClusterRoleScopeRestriction) XXX_Size() int { + return m.Size() +} +func (m *ClusterRoleScopeRestriction) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterRoleScopeRestriction.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterRoleScopeRestriction proto.InternalMessageInfo + +func (m *OAuthAccessToken) Reset() { *m = OAuthAccessToken{} } +func (*OAuthAccessToken) ProtoMessage() {} +func (*OAuthAccessToken) Descriptor() ([]byte, []int) { + return fileDescriptor_bd688dca7ea39c8a, []int{1} +} +func (m *OAuthAccessToken) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OAuthAccessToken) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OAuthAccessToken) XXX_Merge(src proto.Message) { + xxx_messageInfo_OAuthAccessToken.Merge(m, src) +} +func (m *OAuthAccessToken) XXX_Size() int { + return m.Size() +} +func (m *OAuthAccessToken) XXX_DiscardUnknown() { + xxx_messageInfo_OAuthAccessToken.DiscardUnknown(m) +} + +var xxx_messageInfo_OAuthAccessToken proto.InternalMessageInfo + +func (m *OAuthAccessTokenList) Reset() { *m = OAuthAccessTokenList{} } +func (*OAuthAccessTokenList) ProtoMessage() {} +func (*OAuthAccessTokenList) Descriptor() ([]byte, []int) { + return fileDescriptor_bd688dca7ea39c8a, []int{2} +} +func (m *OAuthAccessTokenList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OAuthAccessTokenList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OAuthAccessTokenList) XXX_Merge(src proto.Message) { + xxx_messageInfo_OAuthAccessTokenList.Merge(m, src) +} +func (m *OAuthAccessTokenList) XXX_Size() int { + return m.Size() +} +func (m *OAuthAccessTokenList) XXX_DiscardUnknown() { + xxx_messageInfo_OAuthAccessTokenList.DiscardUnknown(m) +} + +var xxx_messageInfo_OAuthAccessTokenList proto.InternalMessageInfo + +func (m *OAuthAuthorizeToken) Reset() { *m = OAuthAuthorizeToken{} } +func (*OAuthAuthorizeToken) ProtoMessage() {} +func (*OAuthAuthorizeToken) Descriptor() ([]byte, []int) { + return fileDescriptor_bd688dca7ea39c8a, []int{3} +} +func (m *OAuthAuthorizeToken) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OAuthAuthorizeToken) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OAuthAuthorizeToken) XXX_Merge(src proto.Message) { + xxx_messageInfo_OAuthAuthorizeToken.Merge(m, src) +} +func (m *OAuthAuthorizeToken) XXX_Size() int { + return m.Size() +} +func (m *OAuthAuthorizeToken) XXX_DiscardUnknown() { + xxx_messageInfo_OAuthAuthorizeToken.DiscardUnknown(m) +} + +var xxx_messageInfo_OAuthAuthorizeToken proto.InternalMessageInfo + +func (m *OAuthAuthorizeTokenList) Reset() { *m = OAuthAuthorizeTokenList{} } +func (*OAuthAuthorizeTokenList) ProtoMessage() {} +func (*OAuthAuthorizeTokenList) Descriptor() ([]byte, []int) { + return fileDescriptor_bd688dca7ea39c8a, []int{4} +} +func (m *OAuthAuthorizeTokenList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OAuthAuthorizeTokenList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OAuthAuthorizeTokenList) XXX_Merge(src proto.Message) { + xxx_messageInfo_OAuthAuthorizeTokenList.Merge(m, src) +} +func (m *OAuthAuthorizeTokenList) XXX_Size() int { + return m.Size() +} +func (m *OAuthAuthorizeTokenList) XXX_DiscardUnknown() { + xxx_messageInfo_OAuthAuthorizeTokenList.DiscardUnknown(m) +} + +var xxx_messageInfo_OAuthAuthorizeTokenList proto.InternalMessageInfo + +func (m *OAuthClient) Reset() { *m = OAuthClient{} } +func (*OAuthClient) ProtoMessage() {} +func (*OAuthClient) Descriptor() ([]byte, []int) { + return fileDescriptor_bd688dca7ea39c8a, []int{5} +} +func (m *OAuthClient) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OAuthClient) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OAuthClient) XXX_Merge(src proto.Message) { + xxx_messageInfo_OAuthClient.Merge(m, src) +} +func (m *OAuthClient) XXX_Size() int { + return m.Size() +} +func (m *OAuthClient) XXX_DiscardUnknown() { + xxx_messageInfo_OAuthClient.DiscardUnknown(m) +} + +var xxx_messageInfo_OAuthClient proto.InternalMessageInfo + +func (m *OAuthClientAuthorization) Reset() { *m = OAuthClientAuthorization{} } +func (*OAuthClientAuthorization) ProtoMessage() {} +func (*OAuthClientAuthorization) Descriptor() ([]byte, []int) { + return fileDescriptor_bd688dca7ea39c8a, []int{6} +} +func (m *OAuthClientAuthorization) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OAuthClientAuthorization) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OAuthClientAuthorization) XXX_Merge(src proto.Message) { + xxx_messageInfo_OAuthClientAuthorization.Merge(m, src) +} +func (m *OAuthClientAuthorization) XXX_Size() int { + return m.Size() +} +func (m *OAuthClientAuthorization) XXX_DiscardUnknown() { + xxx_messageInfo_OAuthClientAuthorization.DiscardUnknown(m) +} + +var xxx_messageInfo_OAuthClientAuthorization proto.InternalMessageInfo + +func (m *OAuthClientAuthorizationList) Reset() { *m = OAuthClientAuthorizationList{} } +func (*OAuthClientAuthorizationList) ProtoMessage() {} +func (*OAuthClientAuthorizationList) Descriptor() ([]byte, []int) { + return fileDescriptor_bd688dca7ea39c8a, []int{7} +} +func (m *OAuthClientAuthorizationList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OAuthClientAuthorizationList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OAuthClientAuthorizationList) XXX_Merge(src proto.Message) { + xxx_messageInfo_OAuthClientAuthorizationList.Merge(m, src) +} +func (m *OAuthClientAuthorizationList) XXX_Size() int { + return m.Size() +} +func (m *OAuthClientAuthorizationList) XXX_DiscardUnknown() { + xxx_messageInfo_OAuthClientAuthorizationList.DiscardUnknown(m) +} + +var xxx_messageInfo_OAuthClientAuthorizationList proto.InternalMessageInfo + +func (m *OAuthClientList) Reset() { *m = OAuthClientList{} } +func (*OAuthClientList) ProtoMessage() {} +func (*OAuthClientList) Descriptor() ([]byte, []int) { + return fileDescriptor_bd688dca7ea39c8a, []int{8} +} +func (m *OAuthClientList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OAuthClientList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OAuthClientList) XXX_Merge(src proto.Message) { + xxx_messageInfo_OAuthClientList.Merge(m, src) +} +func (m *OAuthClientList) XXX_Size() int { + return m.Size() +} +func (m *OAuthClientList) XXX_DiscardUnknown() { + xxx_messageInfo_OAuthClientList.DiscardUnknown(m) +} + +var xxx_messageInfo_OAuthClientList proto.InternalMessageInfo + +func (m *OAuthRedirectReference) Reset() { *m = OAuthRedirectReference{} } +func (*OAuthRedirectReference) ProtoMessage() {} +func (*OAuthRedirectReference) Descriptor() ([]byte, []int) { + return fileDescriptor_bd688dca7ea39c8a, []int{9} +} +func (m *OAuthRedirectReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OAuthRedirectReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OAuthRedirectReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_OAuthRedirectReference.Merge(m, src) +} +func (m *OAuthRedirectReference) XXX_Size() int { + return m.Size() +} +func (m *OAuthRedirectReference) XXX_DiscardUnknown() { + xxx_messageInfo_OAuthRedirectReference.DiscardUnknown(m) +} + +var xxx_messageInfo_OAuthRedirectReference proto.InternalMessageInfo + +func (m *RedirectReference) Reset() { *m = RedirectReference{} } +func (*RedirectReference) ProtoMessage() {} +func (*RedirectReference) Descriptor() ([]byte, []int) { + return fileDescriptor_bd688dca7ea39c8a, []int{10} +} +func (m *RedirectReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RedirectReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RedirectReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_RedirectReference.Merge(m, src) +} +func (m *RedirectReference) XXX_Size() int { + return m.Size() +} +func (m *RedirectReference) XXX_DiscardUnknown() { + xxx_messageInfo_RedirectReference.DiscardUnknown(m) +} + +var xxx_messageInfo_RedirectReference proto.InternalMessageInfo + +func (m *ScopeRestriction) Reset() { *m = ScopeRestriction{} } +func (*ScopeRestriction) ProtoMessage() {} +func (*ScopeRestriction) Descriptor() ([]byte, []int) { + return fileDescriptor_bd688dca7ea39c8a, []int{11} +} +func (m *ScopeRestriction) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ScopeRestriction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ScopeRestriction) XXX_Merge(src proto.Message) { + xxx_messageInfo_ScopeRestriction.Merge(m, src) +} +func (m *ScopeRestriction) XXX_Size() int { + return m.Size() +} +func (m *ScopeRestriction) XXX_DiscardUnknown() { + xxx_messageInfo_ScopeRestriction.DiscardUnknown(m) +} + +var xxx_messageInfo_ScopeRestriction proto.InternalMessageInfo + +func init() { + proto.RegisterType((*ClusterRoleScopeRestriction)(nil), "github.com.openshift.api.oauth.v1.ClusterRoleScopeRestriction") + proto.RegisterType((*OAuthAccessToken)(nil), "github.com.openshift.api.oauth.v1.OAuthAccessToken") + proto.RegisterType((*OAuthAccessTokenList)(nil), "github.com.openshift.api.oauth.v1.OAuthAccessTokenList") + proto.RegisterType((*OAuthAuthorizeToken)(nil), "github.com.openshift.api.oauth.v1.OAuthAuthorizeToken") + proto.RegisterType((*OAuthAuthorizeTokenList)(nil), "github.com.openshift.api.oauth.v1.OAuthAuthorizeTokenList") + proto.RegisterType((*OAuthClient)(nil), "github.com.openshift.api.oauth.v1.OAuthClient") + proto.RegisterType((*OAuthClientAuthorization)(nil), "github.com.openshift.api.oauth.v1.OAuthClientAuthorization") + proto.RegisterType((*OAuthClientAuthorizationList)(nil), "github.com.openshift.api.oauth.v1.OAuthClientAuthorizationList") + proto.RegisterType((*OAuthClientList)(nil), "github.com.openshift.api.oauth.v1.OAuthClientList") + proto.RegisterType((*OAuthRedirectReference)(nil), "github.com.openshift.api.oauth.v1.OAuthRedirectReference") + proto.RegisterType((*RedirectReference)(nil), "github.com.openshift.api.oauth.v1.RedirectReference") + proto.RegisterType((*ScopeRestriction)(nil), "github.com.openshift.api.oauth.v1.ScopeRestriction") +} + +func init() { + proto.RegisterFile("github.com/openshift/api/oauth/v1/generated.proto", fileDescriptor_bd688dca7ea39c8a) +} + +var fileDescriptor_bd688dca7ea39c8a = []byte{ + // 1228 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x57, 0xcd, 0x6f, 0x1b, 0xc5, + 0x1b, 0xce, 0x26, 0xb6, 0x63, 0x8f, 0x9b, 0x0f, 0x4f, 0x9a, 0x76, 0x7f, 0x6d, 0x7f, 0xb6, 0x71, + 0x24, 0x6a, 0x04, 0xac, 0x49, 0x28, 0x55, 0xa5, 0x4a, 0x95, 0x6c, 0x53, 0x15, 0x0b, 0xd2, 0x4a, + 0xe3, 0x06, 0x2a, 0xe8, 0xa1, 0x93, 0xdd, 0x37, 0xf6, 0x90, 0xf5, 0xee, 0xb2, 0x33, 0x0e, 0x09, + 0xea, 0x81, 0x0b, 0x77, 0xfe, 0x11, 0x2e, 0xdc, 0x39, 0x20, 0x71, 0xc8, 0x09, 0xf5, 0xc0, 0xa1, + 0x27, 0x8b, 0x18, 0xf1, 0x4f, 0x70, 0x42, 0x3b, 0xbb, 0xde, 0x0f, 0x7f, 0x10, 0xe7, 0x12, 0x71, + 0xe0, 0xb6, 0xfb, 0x3e, 0xcf, 0xf3, 0xce, 0xc7, 0xbe, 0xcf, 0x3b, 0xb3, 0x68, 0xbb, 0xc3, 0x44, + 0xb7, 0xbf, 0xaf, 0xe9, 0x76, 0xaf, 0x66, 0x3b, 0x60, 0xf1, 0x2e, 0x3b, 0x10, 0x35, 0xea, 0xb0, + 0x9a, 0x4d, 0xfb, 0xa2, 0x5b, 0x3b, 0xda, 0xae, 0x75, 0xc0, 0x02, 0x97, 0x0a, 0x30, 0x34, 0xc7, + 0xb5, 0x85, 0x8d, 0xdf, 0x88, 0x24, 0x5a, 0x28, 0xd1, 0xa8, 0xc3, 0x34, 0x29, 0xd1, 0x8e, 0xb6, + 0x6f, 0xbc, 0x1b, 0xcb, 0xda, 0xb1, 0x3b, 0x76, 0x4d, 0x2a, 0xf7, 0xfb, 0x07, 0xf2, 0x4d, 0xbe, + 0xc8, 0x27, 0x3f, 0xe3, 0x8d, 0x3b, 0x87, 0xf7, 0xb8, 0xc6, 0x6c, 0x6f, 0xd8, 0x1e, 0xd5, 0xbb, + 0xcc, 0x02, 0xf7, 0xa4, 0xe6, 0x1c, 0x76, 0xbc, 0x00, 0xaf, 0xf5, 0x40, 0xd0, 0x29, 0xf3, 0xb8, + 0x71, 0x77, 0x96, 0xca, 0xed, 0x5b, 0x82, 0xf5, 0xa0, 0xc6, 0xf5, 0x2e, 0xf4, 0xe8, 0xb8, 0xae, + 0xf2, 0x93, 0x82, 0x6e, 0x36, 0xcd, 0x3e, 0x17, 0xe0, 0x12, 0xdb, 0x84, 0xb6, 0x6e, 0x3b, 0x40, + 0x80, 0x0b, 0x97, 0xe9, 0x82, 0xd9, 0x16, 0x7e, 0x1b, 0xe5, 0x5c, 0xdb, 0x84, 0xc7, 0xb4, 0x07, + 0x5c, 0x55, 0xca, 0x4b, 0xd5, 0x5c, 0x63, 0x65, 0x38, 0x28, 0xe5, 0xc8, 0x28, 0x48, 0x22, 0x1c, + 0x6b, 0x08, 0x59, 0xde, 0x83, 0x43, 0x75, 0xe0, 0xea, 0xa2, 0x64, 0xaf, 0x0e, 0x07, 0x25, 0xf4, + 0x38, 0x8c, 0x92, 0x18, 0x03, 0xd7, 0xd1, 0x1a, 0x35, 0x4d, 0xfb, 0xeb, 0x87, 0x5c, 0xa7, 0x26, + 0xf5, 0xc6, 0x53, 0x97, 0xca, 0x4a, 0x35, 0xdb, 0xb8, 0x7e, 0x3a, 0x28, 0x2d, 0x0c, 0x07, 0xa5, + 0xb5, 0x7a, 0x12, 0x26, 0xe3, 0xfc, 0xca, 0x9f, 0x29, 0xb4, 0xfe, 0xa4, 0xde, 0x17, 0xdd, 0xba, + 0xae, 0x03, 0xe7, 0x4f, 0xed, 0x43, 0xb0, 0xf0, 0x0b, 0x94, 0xf5, 0xf6, 0xc9, 0xa0, 0x82, 0xaa, + 0x4a, 0x59, 0xa9, 0xe6, 0x77, 0xde, 0xd3, 0xfc, 0xfd, 0xd1, 0xe2, 0xfb, 0xa3, 0x39, 0x87, 0x1d, + 0x2f, 0xc0, 0x35, 0x8f, 0xad, 0x1d, 0x6d, 0x6b, 0x4f, 0xf6, 0xbf, 0x04, 0x5d, 0xec, 0x82, 0xa0, + 0x0d, 0x1c, 0x4c, 0x01, 0x45, 0x31, 0x12, 0x66, 0xc5, 0x3b, 0x08, 0xe9, 0x26, 0x03, 0x4b, 0x78, + 0x2b, 0x53, 0x17, 0xcb, 0x4a, 0x35, 0x17, 0x29, 0x9a, 0x21, 0x42, 0x62, 0x2c, 0x5c, 0x43, 0x39, + 0x38, 0x76, 0x98, 0x0b, 0xbc, 0xe5, 0xaf, 0x73, 0xa9, 0x51, 0x08, 0x24, 0xb9, 0x87, 0x23, 0x80, + 0x44, 0x1c, 0x5c, 0x41, 0x19, 0xee, 0x7d, 0x0f, 0xae, 0xa6, 0xe4, 0x56, 0xa2, 0xe1, 0xa0, 0x94, + 0x91, 0x5f, 0x88, 0x93, 0x00, 0xc1, 0x1f, 0xa0, 0xbc, 0x0b, 0x06, 0x73, 0x41, 0x17, 0x7b, 0xa4, + 0xa5, 0xa6, 0xe5, 0x4c, 0x36, 0x82, 0xb4, 0x79, 0x12, 0x41, 0x24, 0xce, 0xc3, 0xef, 0xa0, 0x6c, + 0x9f, 0x83, 0x2b, 0x67, 0x9f, 0x91, 0x9a, 0xf5, 0x40, 0x93, 0xdd, 0x0b, 0xe2, 0x24, 0x64, 0xe0, + 0xb7, 0xd0, 0xb2, 0xf7, 0xbc, 0xd7, 0xfa, 0x50, 0x5d, 0x96, 0xe4, 0xb5, 0x80, 0xbc, 0xbc, 0xe7, + 0x87, 0xc9, 0x08, 0xc7, 0x0f, 0xd0, 0xaa, 0x57, 0xf7, 0xb6, 0xcb, 0xbe, 0x01, 0xf9, 0x31, 0xd4, + 0xac, 0x54, 0x5c, 0x0b, 0x14, 0xab, 0xf5, 0x04, 0x4a, 0xc6, 0xd8, 0xf8, 0x1e, 0xba, 0xe2, 0xc2, + 0x81, 0x0b, 0xbc, 0xeb, 0xab, 0x73, 0x52, 0x7d, 0x35, 0x50, 0x5f, 0x21, 0x31, 0x8c, 0x24, 0x98, + 0xf8, 0x39, 0x52, 0x99, 0x45, 0x75, 0xc1, 0x8e, 0x98, 0x38, 0x79, 0xca, 0x7a, 0x60, 0xf7, 0x45, + 0x1b, 0x74, 0xdb, 0x32, 0xb8, 0x8a, 0xca, 0x4a, 0x35, 0xdd, 0x28, 0x07, 0x59, 0xd4, 0xd6, 0x0c, + 0x1e, 0x99, 0x99, 0xa1, 0xf2, 0xab, 0x82, 0xae, 0x8e, 0xd7, 0xd9, 0x27, 0x8c, 0x0b, 0xfc, 0x7c, + 0xa2, 0xd6, 0xb4, 0xf9, 0x6a, 0xcd, 0x53, 0xcb, 0x4a, 0x0b, 0x77, 0x7e, 0x14, 0x89, 0xd5, 0xd9, + 0x33, 0x94, 0x66, 0x02, 0x7a, 0xbe, 0x99, 0xf2, 0x3b, 0xef, 0x6b, 0xe7, 0xb6, 0x1b, 0x6d, 0x7c, + 0x96, 0x8d, 0x95, 0x20, 0x7f, 0xba, 0xe5, 0x65, 0x22, 0x7e, 0xc2, 0xca, 0xcf, 0x29, 0xb4, 0xe1, + 0x53, 0x93, 0x1f, 0xe0, 0x3f, 0xef, 0x9c, 0xe7, 0x9d, 0x2d, 0x94, 0xe6, 0x82, 0x8a, 0x91, 0x71, + 0xc2, 0xed, 0x6d, 0x7b, 0x41, 0xe2, 0x63, 0x09, 0x83, 0x2d, 0x5f, 0xc4, 0x60, 0xd9, 0x73, 0x0c, + 0x76, 0x1f, 0xad, 0xe8, 0xb6, 0x01, 0xcd, 0x2e, 0x35, 0x4d, 0xb0, 0x3a, 0x10, 0x38, 0x64, 0x33, + 0x10, 0xac, 0x34, 0xe3, 0x20, 0x49, 0x72, 0xf1, 0x2e, 0xda, 0x48, 0x04, 0x76, 0x41, 0x74, 0x6d, + 0x43, 0xda, 0x23, 0xd7, 0xb8, 0x19, 0xa4, 0xd8, 0x68, 0x4e, 0x52, 0xc8, 0x34, 0x5d, 0xe5, 0x37, + 0x05, 0x5d, 0x9f, 0x52, 0x43, 0x97, 0xe0, 0x8b, 0x2f, 0x92, 0xbe, 0xb8, 0x3b, 0xb7, 0x2f, 0x12, + 0x13, 0x9d, 0x61, 0x8d, 0xef, 0x32, 0x28, 0x2f, 0xd9, 0x7e, 0x31, 0x5e, 0x82, 0x25, 0xde, 0x44, + 0x19, 0x0e, 0xba, 0x0b, 0x22, 0xb0, 0xc3, 0x6a, 0xc0, 0xce, 0xb4, 0x65, 0x94, 0x04, 0x28, 0x6e, + 0xa2, 0x02, 0x35, 0x0c, 0xe6, 0x9d, 0x7c, 0xd4, 0xf4, 0x31, 0xae, 0x2e, 0xc9, 0x02, 0xdf, 0x1c, + 0x0e, 0x4a, 0x85, 0xfa, 0x38, 0x48, 0x26, 0xf9, 0xb8, 0x8d, 0x36, 0x5d, 0xe0, 0x8e, 0x6d, 0x19, + 0x9f, 0x31, 0xd1, 0x0d, 0xbf, 0xa9, 0xe7, 0x14, 0xef, 0xec, 0xfd, 0x7f, 0x30, 0xf6, 0x26, 0x99, + 0x46, 0x22, 0xd3, 0xb5, 0xf8, 0x8e, 0xd7, 0xb7, 0x43, 0x8f, 0x70, 0x35, 0x2d, 0x27, 0xb5, 0xee, + 0xf7, 0xec, 0x28, 0x4e, 0x12, 0x2c, 0xdc, 0x42, 0xf9, 0x8e, 0x4b, 0x2d, 0x11, 0xd4, 0xa1, 0x6f, + 0xa8, 0xdb, 0x23, 0x07, 0x3e, 0x8a, 0xa0, 0xbf, 0x06, 0xa5, 0x75, 0xf9, 0xfa, 0x11, 0xb5, 0x0c, + 0x13, 0xdc, 0xa7, 0x27, 0x0e, 0x90, 0xb8, 0x16, 0xbf, 0x44, 0x05, 0x3e, 0x76, 0x79, 0xe1, 0xea, + 0xf2, 0xdc, 0x5d, 0x73, 0xfc, 0xe2, 0xd3, 0xf8, 0x5f, 0x30, 0x8b, 0xc2, 0x38, 0xc2, 0xc9, 0xe4, + 0x40, 0xf8, 0x19, 0x52, 0x69, 0xd4, 0x72, 0x77, 0xe9, 0x71, 0xbd, 0x03, 0xa3, 0xc3, 0x27, 0x2b, + 0x0f, 0x9f, 0x5b, 0xde, 0xc1, 0x53, 0x9f, 0xc1, 0x21, 0x33, 0xd5, 0xf8, 0x04, 0x6d, 0xc5, 0xb0, + 0x59, 0x27, 0x97, 0xec, 0x02, 0xe9, 0xc6, 0xed, 0xe1, 0xa0, 0xb4, 0x55, 0x3f, 0x9f, 0x4e, 0xe6, + 0xc9, 0x59, 0xf9, 0x61, 0x11, 0xa9, 0x31, 0x1f, 0x8c, 0xbc, 0x23, 0x2f, 0x5e, 0xff, 0xd2, 0x73, + 0x22, 0xde, 0x76, 0x97, 0x2e, 0xd2, 0x76, 0x53, 0xe7, 0xb4, 0xdd, 0xe8, 0x3c, 0x49, 0xcf, 0x3a, + 0x4f, 0x2a, 0x03, 0x05, 0xdd, 0x9a, 0xb5, 0x5f, 0x97, 0xd0, 0x13, 0x5f, 0x24, 0x7b, 0xe2, 0xfd, + 0x79, 0x7b, 0xe2, 0x94, 0xd9, 0xce, 0x68, 0x8c, 0xbf, 0x28, 0x68, 0x2d, 0x26, 0xb9, 0x84, 0x35, + 0xb5, 0x93, 0x6b, 0xd2, 0x2e, 0xb6, 0xa6, 0x19, 0xcb, 0x38, 0x53, 0xd0, 0x35, 0xc9, 0x1a, 0x75, + 0x26, 0x02, 0x07, 0xe0, 0x82, 0xa5, 0xc3, 0x25, 0x54, 0x35, 0xa0, 0x9c, 0x3b, 0x1a, 0x4e, 0x16, + 0x75, 0x7e, 0xe7, 0xce, 0x1c, 0xab, 0x9a, 0x98, 0x6a, 0x74, 0xff, 0x09, 0x43, 0x24, 0xca, 0x5c, + 0x79, 0x89, 0x0a, 0x93, 0xab, 0xdb, 0x42, 0xe9, 0x8e, 0x6b, 0xf7, 0x1d, 0xb9, 0xb4, 0xd8, 0xcd, + 0xe5, 0x91, 0x17, 0x24, 0x3e, 0x86, 0xcb, 0x28, 0x75, 0xc8, 0x2c, 0x23, 0x30, 0xdc, 0x95, 0x80, + 0x93, 0xfa, 0x98, 0x59, 0x06, 0x91, 0x88, 0xc7, 0xb0, 0x22, 0x83, 0x85, 0x0c, 0x69, 0x2e, 0x89, + 0x54, 0x7e, 0x54, 0xd0, 0xfa, 0x94, 0x5f, 0xc9, 0xac, 0xc9, 0x04, 0xb8, 0xd4, 0x1c, 0xfd, 0x49, + 0xae, 0x79, 0x5d, 0xfe, 0xe1, 0x31, 0xd5, 0xc5, 0xa7, 0xd4, 0xec, 0x03, 0x27, 0x21, 0x01, 0x7f, + 0x85, 0xf2, 0x7a, 0xf4, 0x5b, 0x1a, 0x6c, 0xd4, 0x83, 0x39, 0x36, 0xea, 0x1f, 0x7e, 0x66, 0xfd, + 0xf1, 0x62, 0x04, 0x12, 0x1f, 0xa3, 0x51, 0x3d, 0x3d, 0x2b, 0x2e, 0xbc, 0x3a, 0x2b, 0x2e, 0xbc, + 0x3e, 0x2b, 0x2e, 0x7c, 0x3b, 0x2c, 0x2a, 0xa7, 0xc3, 0xa2, 0xf2, 0x6a, 0x58, 0x54, 0x5e, 0x0f, + 0x8b, 0xca, 0xef, 0xc3, 0xa2, 0xf2, 0xfd, 0x1f, 0xc5, 0x85, 0xcf, 0x17, 0x8f, 0xb6, 0xff, 0x0e, + 0x00, 0x00, 0xff, 0xff, 0xd3, 0xf9, 0x68, 0xbb, 0x28, 0x10, 0x00, 0x00, +} + +func (m *ClusterRoleScopeRestriction) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterRoleScopeRestriction) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterRoleScopeRestriction) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.AllowEscalation { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + if len(m.Namespaces) > 0 { + for iNdEx := len(m.Namespaces) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Namespaces[iNdEx]) + copy(dAtA[i:], m.Namespaces[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespaces[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.RoleNames) > 0 { + for iNdEx := len(m.RoleNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.RoleNames[iNdEx]) + copy(dAtA[i:], m.RoleNames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RoleNames[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *OAuthAccessToken) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OAuthAccessToken) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OAuthAccessToken) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.InactivityTimeoutSeconds)) + i-- + dAtA[i] = 0x50 + i -= len(m.RefreshToken) + copy(dAtA[i:], m.RefreshToken) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RefreshToken))) + i-- + dAtA[i] = 0x4a + i -= len(m.AuthorizeToken) + copy(dAtA[i:], m.AuthorizeToken) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AuthorizeToken))) + i-- + dAtA[i] = 0x42 + i -= len(m.UserUID) + copy(dAtA[i:], m.UserUID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UserUID))) + i-- + dAtA[i] = 0x3a + i -= len(m.UserName) + copy(dAtA[i:], m.UserName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UserName))) + i-- + dAtA[i] = 0x32 + i -= len(m.RedirectURI) + copy(dAtA[i:], m.RedirectURI) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RedirectURI))) + i-- + dAtA[i] = 0x2a + if len(m.Scopes) > 0 { + for iNdEx := len(m.Scopes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Scopes[iNdEx]) + copy(dAtA[i:], m.Scopes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Scopes[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + i = encodeVarintGenerated(dAtA, i, uint64(m.ExpiresIn)) + i-- + dAtA[i] = 0x18 + i -= len(m.ClientName) + copy(dAtA[i:], m.ClientName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ClientName))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *OAuthAccessTokenList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OAuthAccessTokenList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OAuthAccessTokenList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *OAuthAuthorizeToken) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OAuthAuthorizeToken) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OAuthAuthorizeToken) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.CodeChallengeMethod) + copy(dAtA[i:], m.CodeChallengeMethod) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CodeChallengeMethod))) + i-- + dAtA[i] = 0x52 + i -= len(m.CodeChallenge) + copy(dAtA[i:], m.CodeChallenge) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CodeChallenge))) + i-- + dAtA[i] = 0x4a + i -= len(m.UserUID) + copy(dAtA[i:], m.UserUID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UserUID))) + i-- + dAtA[i] = 0x42 + i -= len(m.UserName) + copy(dAtA[i:], m.UserName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UserName))) + i-- + dAtA[i] = 0x3a + i -= len(m.State) + copy(dAtA[i:], m.State) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.State))) + i-- + dAtA[i] = 0x32 + i -= len(m.RedirectURI) + copy(dAtA[i:], m.RedirectURI) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RedirectURI))) + i-- + dAtA[i] = 0x2a + if len(m.Scopes) > 0 { + for iNdEx := len(m.Scopes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Scopes[iNdEx]) + copy(dAtA[i:], m.Scopes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Scopes[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + i = encodeVarintGenerated(dAtA, i, uint64(m.ExpiresIn)) + i-- + dAtA[i] = 0x18 + i -= len(m.ClientName) + copy(dAtA[i:], m.ClientName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ClientName))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *OAuthAuthorizeTokenList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OAuthAuthorizeTokenList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OAuthAuthorizeTokenList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *OAuthClient) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OAuthClient) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OAuthClient) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.AccessTokenInactivityTimeoutSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.AccessTokenInactivityTimeoutSeconds)) + i-- + dAtA[i] = 0x48 + } + if m.AccessTokenMaxAgeSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.AccessTokenMaxAgeSeconds)) + i-- + dAtA[i] = 0x40 + } + if len(m.ScopeRestrictions) > 0 { + for iNdEx := len(m.ScopeRestrictions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ScopeRestrictions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } + i -= len(m.GrantMethod) + copy(dAtA[i:], m.GrantMethod) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.GrantMethod))) + i-- + dAtA[i] = 0x32 + if len(m.RedirectURIs) > 0 { + for iNdEx := len(m.RedirectURIs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.RedirectURIs[iNdEx]) + copy(dAtA[i:], m.RedirectURIs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RedirectURIs[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + i-- + if m.RespondWithChallenges { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + if len(m.AdditionalSecrets) > 0 { + for iNdEx := len(m.AdditionalSecrets) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AdditionalSecrets[iNdEx]) + copy(dAtA[i:], m.AdditionalSecrets[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AdditionalSecrets[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.Secret) + copy(dAtA[i:], m.Secret) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Secret))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *OAuthClientAuthorization) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OAuthClientAuthorization) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OAuthClientAuthorization) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Scopes) > 0 { + for iNdEx := len(m.Scopes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Scopes[iNdEx]) + copy(dAtA[i:], m.Scopes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Scopes[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + i -= len(m.UserUID) + copy(dAtA[i:], m.UserUID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UserUID))) + i-- + dAtA[i] = 0x22 + i -= len(m.UserName) + copy(dAtA[i:], m.UserName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UserName))) + i-- + dAtA[i] = 0x1a + i -= len(m.ClientName) + copy(dAtA[i:], m.ClientName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ClientName))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *OAuthClientAuthorizationList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OAuthClientAuthorizationList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OAuthClientAuthorizationList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *OAuthClientList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OAuthClientList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OAuthClientList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *OAuthRedirectReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OAuthRedirectReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OAuthRedirectReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Reference.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RedirectReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RedirectReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RedirectReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x1a + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0x12 + i -= len(m.Group) + copy(dAtA[i:], m.Group) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Group))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ScopeRestriction) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ScopeRestriction) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ScopeRestriction) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ClusterRole != nil { + { + size, err := m.ClusterRole.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.ExactValues) > 0 { + for iNdEx := len(m.ExactValues) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ExactValues[iNdEx]) + copy(dAtA[i:], m.ExactValues[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ExactValues[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ClusterRoleScopeRestriction) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.RoleNames) > 0 { + for _, s := range m.RoleNames { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Namespaces) > 0 { + for _, s := range m.Namespaces { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + n += 2 + return n +} + +func (m *OAuthAccessToken) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ClientName) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.ExpiresIn)) + if len(m.Scopes) > 0 { + for _, s := range m.Scopes { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.RedirectURI) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UserName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UserUID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.AuthorizeToken) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.RefreshToken) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.InactivityTimeoutSeconds)) + return n +} + +func (m *OAuthAccessTokenList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *OAuthAuthorizeToken) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ClientName) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.ExpiresIn)) + if len(m.Scopes) > 0 { + for _, s := range m.Scopes { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.RedirectURI) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.State) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UserName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UserUID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.CodeChallenge) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.CodeChallengeMethod) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *OAuthAuthorizeTokenList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *OAuthClient) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Secret) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.AdditionalSecrets) > 0 { + for _, s := range m.AdditionalSecrets { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + n += 2 + if len(m.RedirectURIs) > 0 { + for _, s := range m.RedirectURIs { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.GrantMethod) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.ScopeRestrictions) > 0 { + for _, e := range m.ScopeRestrictions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.AccessTokenMaxAgeSeconds != nil { + n += 1 + sovGenerated(uint64(*m.AccessTokenMaxAgeSeconds)) + } + if m.AccessTokenInactivityTimeoutSeconds != nil { + n += 1 + sovGenerated(uint64(*m.AccessTokenInactivityTimeoutSeconds)) + } + return n +} + +func (m *OAuthClientAuthorization) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ClientName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UserName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UserUID) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Scopes) > 0 { + for _, s := range m.Scopes { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *OAuthClientAuthorizationList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *OAuthClientList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *OAuthRedirectReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Reference.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RedirectReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Group) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ScopeRestriction) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.ExactValues) > 0 { + for _, s := range m.ExactValues { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.ClusterRole != nil { + l = m.ClusterRole.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *ClusterRoleScopeRestriction) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterRoleScopeRestriction{`, + `RoleNames:` + fmt.Sprintf("%v", this.RoleNames) + `,`, + `Namespaces:` + fmt.Sprintf("%v", this.Namespaces) + `,`, + `AllowEscalation:` + fmt.Sprintf("%v", this.AllowEscalation) + `,`, + `}`, + }, "") + return s +} +func (this *OAuthAccessToken) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&OAuthAccessToken{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ClientName:` + fmt.Sprintf("%v", this.ClientName) + `,`, + `ExpiresIn:` + fmt.Sprintf("%v", this.ExpiresIn) + `,`, + `Scopes:` + fmt.Sprintf("%v", this.Scopes) + `,`, + `RedirectURI:` + fmt.Sprintf("%v", this.RedirectURI) + `,`, + `UserName:` + fmt.Sprintf("%v", this.UserName) + `,`, + `UserUID:` + fmt.Sprintf("%v", this.UserUID) + `,`, + `AuthorizeToken:` + fmt.Sprintf("%v", this.AuthorizeToken) + `,`, + `RefreshToken:` + fmt.Sprintf("%v", this.RefreshToken) + `,`, + `InactivityTimeoutSeconds:` + fmt.Sprintf("%v", this.InactivityTimeoutSeconds) + `,`, + `}`, + }, "") + return s +} +func (this *OAuthAccessTokenList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]OAuthAccessToken{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "OAuthAccessToken", "OAuthAccessToken", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&OAuthAccessTokenList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *OAuthAuthorizeToken) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&OAuthAuthorizeToken{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ClientName:` + fmt.Sprintf("%v", this.ClientName) + `,`, + `ExpiresIn:` + fmt.Sprintf("%v", this.ExpiresIn) + `,`, + `Scopes:` + fmt.Sprintf("%v", this.Scopes) + `,`, + `RedirectURI:` + fmt.Sprintf("%v", this.RedirectURI) + `,`, + `State:` + fmt.Sprintf("%v", this.State) + `,`, + `UserName:` + fmt.Sprintf("%v", this.UserName) + `,`, + `UserUID:` + fmt.Sprintf("%v", this.UserUID) + `,`, + `CodeChallenge:` + fmt.Sprintf("%v", this.CodeChallenge) + `,`, + `CodeChallengeMethod:` + fmt.Sprintf("%v", this.CodeChallengeMethod) + `,`, + `}`, + }, "") + return s +} +func (this *OAuthAuthorizeTokenList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]OAuthAuthorizeToken{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "OAuthAuthorizeToken", "OAuthAuthorizeToken", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&OAuthAuthorizeTokenList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *OAuthClient) String() string { + if this == nil { + return "nil" + } + repeatedStringForScopeRestrictions := "[]ScopeRestriction{" + for _, f := range this.ScopeRestrictions { + repeatedStringForScopeRestrictions += strings.Replace(strings.Replace(f.String(), "ScopeRestriction", "ScopeRestriction", 1), `&`, ``, 1) + "," + } + repeatedStringForScopeRestrictions += "}" + s := strings.Join([]string{`&OAuthClient{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Secret:` + fmt.Sprintf("%v", this.Secret) + `,`, + `AdditionalSecrets:` + fmt.Sprintf("%v", this.AdditionalSecrets) + `,`, + `RespondWithChallenges:` + fmt.Sprintf("%v", this.RespondWithChallenges) + `,`, + `RedirectURIs:` + fmt.Sprintf("%v", this.RedirectURIs) + `,`, + `GrantMethod:` + fmt.Sprintf("%v", this.GrantMethod) + `,`, + `ScopeRestrictions:` + repeatedStringForScopeRestrictions + `,`, + `AccessTokenMaxAgeSeconds:` + valueToStringGenerated(this.AccessTokenMaxAgeSeconds) + `,`, + `AccessTokenInactivityTimeoutSeconds:` + valueToStringGenerated(this.AccessTokenInactivityTimeoutSeconds) + `,`, + `}`, + }, "") + return s +} +func (this *OAuthClientAuthorization) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&OAuthClientAuthorization{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ClientName:` + fmt.Sprintf("%v", this.ClientName) + `,`, + `UserName:` + fmt.Sprintf("%v", this.UserName) + `,`, + `UserUID:` + fmt.Sprintf("%v", this.UserUID) + `,`, + `Scopes:` + fmt.Sprintf("%v", this.Scopes) + `,`, + `}`, + }, "") + return s +} +func (this *OAuthClientAuthorizationList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]OAuthClientAuthorization{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "OAuthClientAuthorization", "OAuthClientAuthorization", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&OAuthClientAuthorizationList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *OAuthClientList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]OAuthClient{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "OAuthClient", "OAuthClient", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&OAuthClientList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *OAuthRedirectReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&OAuthRedirectReference{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Reference:` + strings.Replace(strings.Replace(this.Reference.String(), "RedirectReference", "RedirectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RedirectReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RedirectReference{`, + `Group:` + fmt.Sprintf("%v", this.Group) + `,`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} +func (this *ScopeRestriction) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ScopeRestriction{`, + `ExactValues:` + fmt.Sprintf("%v", this.ExactValues) + `,`, + `ClusterRole:` + strings.Replace(this.ClusterRole.String(), "ClusterRoleScopeRestriction", "ClusterRoleScopeRestriction", 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *ClusterRoleScopeRestriction) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterRoleScopeRestriction: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterRoleScopeRestriction: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RoleNames", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RoleNames = append(m.RoleNames, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespaces", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespaces = append(m.Namespaces, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowEscalation", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AllowEscalation = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OAuthAccessToken) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OAuthAccessToken: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OAuthAccessToken: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpiresIn", wireType) + } + m.ExpiresIn = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ExpiresIn |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scopes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Scopes = append(m.Scopes, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RedirectURI", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RedirectURI = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UserName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserUID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UserUID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthorizeToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AuthorizeToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RefreshToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RefreshToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field InactivityTimeoutSeconds", wireType) + } + m.InactivityTimeoutSeconds = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.InactivityTimeoutSeconds |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OAuthAccessTokenList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OAuthAccessTokenList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OAuthAccessTokenList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, OAuthAccessToken{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OAuthAuthorizeToken) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OAuthAuthorizeToken: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OAuthAuthorizeToken: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpiresIn", wireType) + } + m.ExpiresIn = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ExpiresIn |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scopes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Scopes = append(m.Scopes, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RedirectURI", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RedirectURI = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.State = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UserName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserUID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UserUID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CodeChallenge", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CodeChallenge = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CodeChallengeMethod", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CodeChallengeMethod = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OAuthAuthorizeTokenList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OAuthAuthorizeTokenList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OAuthAuthorizeTokenList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, OAuthAuthorizeToken{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OAuthClient) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OAuthClient: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OAuthClient: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Secret = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdditionalSecrets", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AdditionalSecrets = append(m.AdditionalSecrets, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RespondWithChallenges", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RespondWithChallenges = bool(v != 0) + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RedirectURIs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RedirectURIs = append(m.RedirectURIs, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GrantMethod", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GrantMethod = GrantHandlerType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ScopeRestrictions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ScopeRestrictions = append(m.ScopeRestrictions, ScopeRestriction{}) + if err := m.ScopeRestrictions[len(m.ScopeRestrictions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AccessTokenMaxAgeSeconds", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AccessTokenMaxAgeSeconds = &v + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AccessTokenInactivityTimeoutSeconds", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AccessTokenInactivityTimeoutSeconds = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OAuthClientAuthorization) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OAuthClientAuthorization: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OAuthClientAuthorization: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UserName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserUID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UserUID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scopes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Scopes = append(m.Scopes, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OAuthClientAuthorizationList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OAuthClientAuthorizationList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OAuthClientAuthorizationList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, OAuthClientAuthorization{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OAuthClientList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OAuthClientList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OAuthClientList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, OAuthClient{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OAuthRedirectReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OAuthRedirectReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OAuthRedirectReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reference", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Reference.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RedirectReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RedirectReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RedirectReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Group = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ScopeRestriction) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ScopeRestriction: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ScopeRestriction: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExactValues", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExactValues = append(m.ExactValues, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClusterRole", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ClusterRole == nil { + m.ClusterRole = &ClusterRoleScopeRestriction{} + } + if err := m.ClusterRole.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vendor/github.com/openshift/api/oauth/v1/generated.proto b/vendor/github.com/openshift/api/oauth/v1/generated.proto new file mode 100644 index 0000000000000..e7a8c5c1e7d1c --- /dev/null +++ b/vendor/github.com/openshift/api/oauth/v1/generated.proto @@ -0,0 +1,218 @@ + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package github.com.openshift.api.oauth.v1; + +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// ClusterRoleScopeRestriction describes restrictions on cluster role scopes +message ClusterRoleScopeRestriction { + // RoleNames is the list of cluster roles that can referenced. * means anything + repeated string roleNames = 1; + + // Namespaces is the list of namespaces that can be referenced. * means any of them (including *) + repeated string namespaces = 2; + + // AllowEscalation indicates whether you can request roles and their escalating resources + optional bool allowEscalation = 3; +} + +// OAuthAccessToken describes an OAuth access token +message OAuthAccessToken { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // ClientName references the client that created this token. + optional string clientName = 2; + + // ExpiresIn is the seconds from CreationTime before this token expires. + optional int64 expiresIn = 3; + + // Scopes is an array of the requested scopes. + repeated string scopes = 4; + + // RedirectURI is the redirection associated with the token. + optional string redirectURI = 5; + + // UserName is the user name associated with this token + optional string userName = 6; + + // UserUID is the unique UID associated with this token + optional string userUID = 7; + + // AuthorizeToken contains the token that authorized this token + optional string authorizeToken = 8; + + // RefreshToken is the value by which this token can be renewed. Can be blank. + optional string refreshToken = 9; + + // InactivityTimeoutSeconds is the value in seconds, from the + // CreationTimestamp, after which this token can no longer be used. + // The value is automatically incremented when the token is used. + optional int32 inactivityTimeoutSeconds = 10; +} + +// OAuthAccessTokenList is a collection of OAuth access tokens +message OAuthAccessTokenList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of OAuth access tokens + repeated OAuthAccessToken items = 2; +} + +// OAuthAuthorizeToken describes an OAuth authorization token +message OAuthAuthorizeToken { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // ClientName references the client that created this token. + optional string clientName = 2; + + // ExpiresIn is the seconds from CreationTime before this token expires. + optional int64 expiresIn = 3; + + // Scopes is an array of the requested scopes. + repeated string scopes = 4; + + // RedirectURI is the redirection associated with the token. + optional string redirectURI = 5; + + // State data from request + optional string state = 6; + + // UserName is the user name associated with this token + optional string userName = 7; + + // UserUID is the unique UID associated with this token. UserUID and UserName must both match + // for this token to be valid. + optional string userUID = 8; + + // CodeChallenge is the optional code_challenge associated with this authorization code, as described in rfc7636 + optional string codeChallenge = 9; + + // CodeChallengeMethod is the optional code_challenge_method associated with this authorization code, as described in rfc7636 + optional string codeChallengeMethod = 10; +} + +// OAuthAuthorizeTokenList is a collection of OAuth authorization tokens +message OAuthAuthorizeTokenList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of OAuth authorization tokens + repeated OAuthAuthorizeToken items = 2; +} + +// OAuthClient describes an OAuth client +message OAuthClient { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Secret is the unique secret associated with a client + optional string secret = 2; + + // AdditionalSecrets holds other secrets that may be used to identify the client. This is useful for rotation + // and for service account token validation + repeated string additionalSecrets = 3; + + // RespondWithChallenges indicates whether the client wants authentication needed responses made in the form of challenges instead of redirects + optional bool respondWithChallenges = 4; + + // RedirectURIs is the valid redirection URIs associated with a client + // +patchStrategy=merge + repeated string redirectURIs = 5; + + // GrantMethod is a required field which determines how to handle grants for this client. + // Valid grant handling methods are: + // - auto: always approves grant requests, useful for trusted clients + // - prompt: prompts the end user for approval of grant requests, useful for third-party clients + optional string grantMethod = 6; + + // ScopeRestrictions describes which scopes this client can request. Each requested scope + // is checked against each restriction. If any restriction matches, then the scope is allowed. + // If no restriction matches, then the scope is denied. + repeated ScopeRestriction scopeRestrictions = 7; + + // AccessTokenMaxAgeSeconds overrides the default access token max age for tokens granted to this client. + // 0 means no expiration. + optional int32 accessTokenMaxAgeSeconds = 8; + + // AccessTokenInactivityTimeoutSeconds overrides the default token + // inactivity timeout for tokens granted to this client. + // The value represents the maximum amount of time that can occur between + // consecutive uses of the token. Tokens become invalid if they are not + // used within this temporal window. The user will need to acquire a new + // token to regain access once a token times out. + // This value needs to be set only if the default set in configuration is + // not appropriate for this client. Valid values are: + // - 0: Tokens for this client never time out + // - X: Tokens time out if there is no activity for X seconds + // The current minimum allowed value for X is 300 (5 minutes) + optional int32 accessTokenInactivityTimeoutSeconds = 9; +} + +// OAuthClientAuthorization describes an authorization created by an OAuth client +message OAuthClientAuthorization { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // ClientName references the client that created this authorization + optional string clientName = 2; + + // UserName is the user name that authorized this client + optional string userName = 3; + + // UserUID is the unique UID associated with this authorization. UserUID and UserName + // must both match for this authorization to be valid. + optional string userUID = 4; + + // Scopes is an array of the granted scopes. + repeated string scopes = 5; +} + +// OAuthClientAuthorizationList is a collection of OAuth client authorizations +message OAuthClientAuthorizationList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of OAuth client authorizations + repeated OAuthClientAuthorization items = 2; +} + +// OAuthClientList is a collection of OAuth clients +message OAuthClientList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of OAuth clients + repeated OAuthClient items = 2; +} + +// OAuthRedirectReference is a reference to an OAuth redirect object. +message OAuthRedirectReference { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // The reference to an redirect object in the current namespace. + optional RedirectReference reference = 2; +} + +// RedirectReference specifies the target in the current namespace that resolves into redirect URIs. Only the 'Route' kind is currently allowed. +message RedirectReference { + // The group of the target that is being referred to. + optional string group = 1; + + // The kind of the target that is being referred to. Currently, only 'Route' is allowed. + optional string kind = 2; + + // The name of the target that is being referred to. e.g. name of the Route. + optional string name = 3; +} + +// ScopeRestriction describe one restriction on scopes. Exactly one option must be non-nil. +message ScopeRestriction { + // ExactValues means the scope has to match a particular set of strings exactly + repeated string literals = 1; + + // ClusterRole describes a set of restrictions for cluster role scoping. + optional ClusterRoleScopeRestriction clusterRole = 2; +} + diff --git a/vendor/github.com/openshift/api/oauth/v1/legacy.go b/vendor/github.com/openshift/api/oauth/v1/legacy.go new file mode 100644 index 0000000000000..65b57d2431255 --- /dev/null +++ b/vendor/github.com/openshift/api/oauth/v1/legacy.go @@ -0,0 +1,30 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + extensionsv1beta1 "k8s.io/api/extensions/v1beta1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + legacyGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} + legacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes, corev1.AddToScheme, extensionsv1beta1.AddToScheme) + DeprecatedInstallWithoutGroup = legacySchemeBuilder.AddToScheme +) + +func addLegacyKnownTypes(scheme *runtime.Scheme) error { + types := []runtime.Object{ + &OAuthAccessToken{}, + &OAuthAccessTokenList{}, + &OAuthAuthorizeToken{}, + &OAuthAuthorizeTokenList{}, + &OAuthClient{}, + &OAuthClientList{}, + &OAuthClientAuthorization{}, + &OAuthClientAuthorizationList{}, + &OAuthRedirectReference{}, + } + scheme.AddKnownTypes(legacyGroupVersion, types...) + return nil +} diff --git a/vendor/github.com/openshift/api/oauth/v1/register.go b/vendor/github.com/openshift/api/oauth/v1/register.go new file mode 100644 index 0000000000000..37278c64147cb --- /dev/null +++ b/vendor/github.com/openshift/api/oauth/v1/register.go @@ -0,0 +1,45 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "oauth.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &OAuthAccessToken{}, + &OAuthAccessTokenList{}, + &OAuthAuthorizeToken{}, + &OAuthAuthorizeTokenList{}, + &OAuthClient{}, + &OAuthClientList{}, + &OAuthClientAuthorization{}, + &OAuthClientAuthorizationList{}, + &OAuthRedirectReference{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/oauth/v1/types.go b/vendor/github.com/openshift/api/oauth/v1/types.go new file mode 100644 index 0000000000000..64bc17304706b --- /dev/null +++ b/vendor/github.com/openshift/api/oauth/v1/types.go @@ -0,0 +1,254 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// OAuthAccessToken describes an OAuth access token +type OAuthAccessToken struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // ClientName references the client that created this token. + ClientName string `json:"clientName,omitempty" protobuf:"bytes,2,opt,name=clientName"` + + // ExpiresIn is the seconds from CreationTime before this token expires. + ExpiresIn int64 `json:"expiresIn,omitempty" protobuf:"varint,3,opt,name=expiresIn"` + + // Scopes is an array of the requested scopes. + Scopes []string `json:"scopes,omitempty" protobuf:"bytes,4,rep,name=scopes"` + + // RedirectURI is the redirection associated with the token. + RedirectURI string `json:"redirectURI,omitempty" protobuf:"bytes,5,opt,name=redirectURI"` + + // UserName is the user name associated with this token + UserName string `json:"userName,omitempty" protobuf:"bytes,6,opt,name=userName"` + + // UserUID is the unique UID associated with this token + UserUID string `json:"userUID,omitempty" protobuf:"bytes,7,opt,name=userUID"` + + // AuthorizeToken contains the token that authorized this token + AuthorizeToken string `json:"authorizeToken,omitempty" protobuf:"bytes,8,opt,name=authorizeToken"` + + // RefreshToken is the value by which this token can be renewed. Can be blank. + RefreshToken string `json:"refreshToken,omitempty" protobuf:"bytes,9,opt,name=refreshToken"` + + // InactivityTimeoutSeconds is the value in seconds, from the + // CreationTimestamp, after which this token can no longer be used. + // The value is automatically incremented when the token is used. + InactivityTimeoutSeconds int32 `json:"inactivityTimeoutSeconds,omitempty" protobuf:"varint,10,opt,name=inactivityTimeoutSeconds"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// OAuthAuthorizeToken describes an OAuth authorization token +type OAuthAuthorizeToken struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // ClientName references the client that created this token. + ClientName string `json:"clientName,omitempty" protobuf:"bytes,2,opt,name=clientName"` + + // ExpiresIn is the seconds from CreationTime before this token expires. + ExpiresIn int64 `json:"expiresIn,omitempty" protobuf:"varint,3,opt,name=expiresIn"` + + // Scopes is an array of the requested scopes. + Scopes []string `json:"scopes,omitempty" protobuf:"bytes,4,rep,name=scopes"` + + // RedirectURI is the redirection associated with the token. + RedirectURI string `json:"redirectURI,omitempty" protobuf:"bytes,5,opt,name=redirectURI"` + + // State data from request + State string `json:"state,omitempty" protobuf:"bytes,6,opt,name=state"` + + // UserName is the user name associated with this token + UserName string `json:"userName,omitempty" protobuf:"bytes,7,opt,name=userName"` + + // UserUID is the unique UID associated with this token. UserUID and UserName must both match + // for this token to be valid. + UserUID string `json:"userUID,omitempty" protobuf:"bytes,8,opt,name=userUID"` + + // CodeChallenge is the optional code_challenge associated with this authorization code, as described in rfc7636 + CodeChallenge string `json:"codeChallenge,omitempty" protobuf:"bytes,9,opt,name=codeChallenge"` + + // CodeChallengeMethod is the optional code_challenge_method associated with this authorization code, as described in rfc7636 + CodeChallengeMethod string `json:"codeChallengeMethod,omitempty" protobuf:"bytes,10,opt,name=codeChallengeMethod"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// OAuthClient describes an OAuth client +type OAuthClient struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Secret is the unique secret associated with a client + Secret string `json:"secret,omitempty" protobuf:"bytes,2,opt,name=secret"` + + // AdditionalSecrets holds other secrets that may be used to identify the client. This is useful for rotation + // and for service account token validation + AdditionalSecrets []string `json:"additionalSecrets,omitempty" protobuf:"bytes,3,rep,name=additionalSecrets"` + + // RespondWithChallenges indicates whether the client wants authentication needed responses made in the form of challenges instead of redirects + RespondWithChallenges bool `json:"respondWithChallenges,omitempty" protobuf:"varint,4,opt,name=respondWithChallenges"` + + // RedirectURIs is the valid redirection URIs associated with a client + // +patchStrategy=merge + RedirectURIs []string `json:"redirectURIs,omitempty" patchStrategy:"merge" protobuf:"bytes,5,rep,name=redirectURIs"` + + // GrantMethod is a required field which determines how to handle grants for this client. + // Valid grant handling methods are: + // - auto: always approves grant requests, useful for trusted clients + // - prompt: prompts the end user for approval of grant requests, useful for third-party clients + GrantMethod GrantHandlerType `json:"grantMethod,omitempty" protobuf:"bytes,6,opt,name=grantMethod,casttype=GrantHandlerType"` + + // ScopeRestrictions describes which scopes this client can request. Each requested scope + // is checked against each restriction. If any restriction matches, then the scope is allowed. + // If no restriction matches, then the scope is denied. + ScopeRestrictions []ScopeRestriction `json:"scopeRestrictions,omitempty" protobuf:"bytes,7,rep,name=scopeRestrictions"` + + // AccessTokenMaxAgeSeconds overrides the default access token max age for tokens granted to this client. + // 0 means no expiration. + AccessTokenMaxAgeSeconds *int32 `json:"accessTokenMaxAgeSeconds,omitempty" protobuf:"varint,8,opt,name=accessTokenMaxAgeSeconds"` + + // AccessTokenInactivityTimeoutSeconds overrides the default token + // inactivity timeout for tokens granted to this client. + // The value represents the maximum amount of time that can occur between + // consecutive uses of the token. Tokens become invalid if they are not + // used within this temporal window. The user will need to acquire a new + // token to regain access once a token times out. + // This value needs to be set only if the default set in configuration is + // not appropriate for this client. Valid values are: + // - 0: Tokens for this client never time out + // - X: Tokens time out if there is no activity for X seconds + // The current minimum allowed value for X is 300 (5 minutes) + AccessTokenInactivityTimeoutSeconds *int32 `json:"accessTokenInactivityTimeoutSeconds,omitempty" protobuf:"varint,9,opt,name=accessTokenInactivityTimeoutSeconds"` +} + +type GrantHandlerType string + +const ( + // GrantHandlerAuto auto-approves client authorization grant requests + GrantHandlerAuto GrantHandlerType = "auto" + // GrantHandlerPrompt prompts the user to approve new client authorization grant requests + GrantHandlerPrompt GrantHandlerType = "prompt" + // GrantHandlerDeny auto-denies client authorization grant requests + GrantHandlerDeny GrantHandlerType = "deny" +) + +// ScopeRestriction describe one restriction on scopes. Exactly one option must be non-nil. +type ScopeRestriction struct { + // ExactValues means the scope has to match a particular set of strings exactly + ExactValues []string `json:"literals,omitempty" protobuf:"bytes,1,rep,name=literals"` + + // ClusterRole describes a set of restrictions for cluster role scoping. + ClusterRole *ClusterRoleScopeRestriction `json:"clusterRole,omitempty" protobuf:"bytes,2,opt,name=clusterRole"` +} + +// ClusterRoleScopeRestriction describes restrictions on cluster role scopes +type ClusterRoleScopeRestriction struct { + // RoleNames is the list of cluster roles that can referenced. * means anything + RoleNames []string `json:"roleNames" protobuf:"bytes,1,rep,name=roleNames"` + // Namespaces is the list of namespaces that can be referenced. * means any of them (including *) + Namespaces []string `json:"namespaces" protobuf:"bytes,2,rep,name=namespaces"` + // AllowEscalation indicates whether you can request roles and their escalating resources + AllowEscalation bool `json:"allowEscalation" protobuf:"varint,3,opt,name=allowEscalation"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// OAuthClientAuthorization describes an authorization created by an OAuth client +type OAuthClientAuthorization struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // ClientName references the client that created this authorization + ClientName string `json:"clientName,omitempty" protobuf:"bytes,2,opt,name=clientName"` + + // UserName is the user name that authorized this client + UserName string `json:"userName,omitempty" protobuf:"bytes,3,opt,name=userName"` + + // UserUID is the unique UID associated with this authorization. UserUID and UserName + // must both match for this authorization to be valid. + UserUID string `json:"userUID,omitempty" protobuf:"bytes,4,opt,name=userUID"` + + // Scopes is an array of the granted scopes. + Scopes []string `json:"scopes,omitempty" protobuf:"bytes,5,rep,name=scopes"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// OAuthAccessTokenList is a collection of OAuth access tokens +type OAuthAccessTokenList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of OAuth access tokens + Items []OAuthAccessToken `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// OAuthAuthorizeTokenList is a collection of OAuth authorization tokens +type OAuthAuthorizeTokenList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of OAuth authorization tokens + Items []OAuthAuthorizeToken `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// OAuthClientList is a collection of OAuth clients +type OAuthClientList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of OAuth clients + Items []OAuthClient `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// OAuthClientAuthorizationList is a collection of OAuth client authorizations +type OAuthClientAuthorizationList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of OAuth client authorizations + Items []OAuthClientAuthorization `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// OAuthRedirectReference is a reference to an OAuth redirect object. +type OAuthRedirectReference struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // The reference to an redirect object in the current namespace. + Reference RedirectReference `json:"reference,omitempty" protobuf:"bytes,2,opt,name=reference"` +} + +// RedirectReference specifies the target in the current namespace that resolves into redirect URIs. Only the 'Route' kind is currently allowed. +type RedirectReference struct { + // The group of the target that is being referred to. + Group string `json:"group" protobuf:"bytes,1,opt,name=group"` + + // The kind of the target that is being referred to. Currently, only 'Route' is allowed. + Kind string `json:"kind" protobuf:"bytes,2,opt,name=kind"` + + // The name of the target that is being referred to. e.g. name of the Route. + Name string `json:"name" protobuf:"bytes,3,opt,name=name"` +} diff --git a/vendor/github.com/openshift/api/oauth/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/oauth/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..4506548c69d20 --- /dev/null +++ b/vendor/github.com/openshift/api/oauth/v1/zz_generated.deepcopy.go @@ -0,0 +1,382 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterRoleScopeRestriction) DeepCopyInto(out *ClusterRoleScopeRestriction) { + *out = *in + if in.RoleNames != nil { + in, out := &in.RoleNames, &out.RoleNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Namespaces != nil { + in, out := &in.Namespaces, &out.Namespaces + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterRoleScopeRestriction. +func (in *ClusterRoleScopeRestriction) DeepCopy() *ClusterRoleScopeRestriction { + if in == nil { + return nil + } + out := new(ClusterRoleScopeRestriction) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthAccessToken) DeepCopyInto(out *OAuthAccessToken) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthAccessToken. +func (in *OAuthAccessToken) DeepCopy() *OAuthAccessToken { + if in == nil { + return nil + } + out := new(OAuthAccessToken) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OAuthAccessToken) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthAccessTokenList) DeepCopyInto(out *OAuthAccessTokenList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]OAuthAccessToken, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthAccessTokenList. +func (in *OAuthAccessTokenList) DeepCopy() *OAuthAccessTokenList { + if in == nil { + return nil + } + out := new(OAuthAccessTokenList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OAuthAccessTokenList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthAuthorizeToken) DeepCopyInto(out *OAuthAuthorizeToken) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthAuthorizeToken. +func (in *OAuthAuthorizeToken) DeepCopy() *OAuthAuthorizeToken { + if in == nil { + return nil + } + out := new(OAuthAuthorizeToken) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OAuthAuthorizeToken) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthAuthorizeTokenList) DeepCopyInto(out *OAuthAuthorizeTokenList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]OAuthAuthorizeToken, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthAuthorizeTokenList. +func (in *OAuthAuthorizeTokenList) DeepCopy() *OAuthAuthorizeTokenList { + if in == nil { + return nil + } + out := new(OAuthAuthorizeTokenList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OAuthAuthorizeTokenList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthClient) DeepCopyInto(out *OAuthClient) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.AdditionalSecrets != nil { + in, out := &in.AdditionalSecrets, &out.AdditionalSecrets + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.RedirectURIs != nil { + in, out := &in.RedirectURIs, &out.RedirectURIs + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ScopeRestrictions != nil { + in, out := &in.ScopeRestrictions, &out.ScopeRestrictions + *out = make([]ScopeRestriction, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.AccessTokenMaxAgeSeconds != nil { + in, out := &in.AccessTokenMaxAgeSeconds, &out.AccessTokenMaxAgeSeconds + *out = new(int32) + **out = **in + } + if in.AccessTokenInactivityTimeoutSeconds != nil { + in, out := &in.AccessTokenInactivityTimeoutSeconds, &out.AccessTokenInactivityTimeoutSeconds + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthClient. +func (in *OAuthClient) DeepCopy() *OAuthClient { + if in == nil { + return nil + } + out := new(OAuthClient) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OAuthClient) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthClientAuthorization) DeepCopyInto(out *OAuthClientAuthorization) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthClientAuthorization. +func (in *OAuthClientAuthorization) DeepCopy() *OAuthClientAuthorization { + if in == nil { + return nil + } + out := new(OAuthClientAuthorization) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OAuthClientAuthorization) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthClientAuthorizationList) DeepCopyInto(out *OAuthClientAuthorizationList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]OAuthClientAuthorization, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthClientAuthorizationList. +func (in *OAuthClientAuthorizationList) DeepCopy() *OAuthClientAuthorizationList { + if in == nil { + return nil + } + out := new(OAuthClientAuthorizationList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OAuthClientAuthorizationList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthClientList) DeepCopyInto(out *OAuthClientList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]OAuthClient, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthClientList. +func (in *OAuthClientList) DeepCopy() *OAuthClientList { + if in == nil { + return nil + } + out := new(OAuthClientList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OAuthClientList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthRedirectReference) DeepCopyInto(out *OAuthRedirectReference) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Reference = in.Reference + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthRedirectReference. +func (in *OAuthRedirectReference) DeepCopy() *OAuthRedirectReference { + if in == nil { + return nil + } + out := new(OAuthRedirectReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OAuthRedirectReference) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedirectReference) DeepCopyInto(out *RedirectReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedirectReference. +func (in *RedirectReference) DeepCopy() *RedirectReference { + if in == nil { + return nil + } + out := new(RedirectReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ScopeRestriction) DeepCopyInto(out *ScopeRestriction) { + *out = *in + if in.ExactValues != nil { + in, out := &in.ExactValues, &out.ExactValues + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ClusterRole != nil { + in, out := &in.ClusterRole, &out.ClusterRole + *out = new(ClusterRoleScopeRestriction) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScopeRestriction. +func (in *ScopeRestriction) DeepCopy() *ScopeRestriction { + if in == nil { + return nil + } + out := new(ScopeRestriction) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/oauth/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/oauth/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000000..84ddf18ecd913 --- /dev/null +++ b/vendor/github.com/openshift/api/oauth/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,153 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_ClusterRoleScopeRestriction = map[string]string{ + "": "ClusterRoleScopeRestriction describes restrictions on cluster role scopes", + "roleNames": "RoleNames is the list of cluster roles that can referenced. * means anything", + "namespaces": "Namespaces is the list of namespaces that can be referenced. * means any of them (including *)", + "allowEscalation": "AllowEscalation indicates whether you can request roles and their escalating resources", +} + +func (ClusterRoleScopeRestriction) SwaggerDoc() map[string]string { + return map_ClusterRoleScopeRestriction +} + +var map_OAuthAccessToken = map[string]string{ + "": "OAuthAccessToken describes an OAuth access token", + "clientName": "ClientName references the client that created this token.", + "expiresIn": "ExpiresIn is the seconds from CreationTime before this token expires.", + "scopes": "Scopes is an array of the requested scopes.", + "redirectURI": "RedirectURI is the redirection associated with the token.", + "userName": "UserName is the user name associated with this token", + "userUID": "UserUID is the unique UID associated with this token", + "authorizeToken": "AuthorizeToken contains the token that authorized this token", + "refreshToken": "RefreshToken is the value by which this token can be renewed. Can be blank.", + "inactivityTimeoutSeconds": "InactivityTimeoutSeconds is the value in seconds, from the CreationTimestamp, after which this token can no longer be used. The value is automatically incremented when the token is used.", +} + +func (OAuthAccessToken) SwaggerDoc() map[string]string { + return map_OAuthAccessToken +} + +var map_OAuthAccessTokenList = map[string]string{ + "": "OAuthAccessTokenList is a collection of OAuth access tokens", + "items": "Items is the list of OAuth access tokens", +} + +func (OAuthAccessTokenList) SwaggerDoc() map[string]string { + return map_OAuthAccessTokenList +} + +var map_OAuthAuthorizeToken = map[string]string{ + "": "OAuthAuthorizeToken describes an OAuth authorization token", + "clientName": "ClientName references the client that created this token.", + "expiresIn": "ExpiresIn is the seconds from CreationTime before this token expires.", + "scopes": "Scopes is an array of the requested scopes.", + "redirectURI": "RedirectURI is the redirection associated with the token.", + "state": "State data from request", + "userName": "UserName is the user name associated with this token", + "userUID": "UserUID is the unique UID associated with this token. UserUID and UserName must both match for this token to be valid.", + "codeChallenge": "CodeChallenge is the optional code_challenge associated with this authorization code, as described in rfc7636", + "codeChallengeMethod": "CodeChallengeMethod is the optional code_challenge_method associated with this authorization code, as described in rfc7636", +} + +func (OAuthAuthorizeToken) SwaggerDoc() map[string]string { + return map_OAuthAuthorizeToken +} + +var map_OAuthAuthorizeTokenList = map[string]string{ + "": "OAuthAuthorizeTokenList is a collection of OAuth authorization tokens", + "items": "Items is the list of OAuth authorization tokens", +} + +func (OAuthAuthorizeTokenList) SwaggerDoc() map[string]string { + return map_OAuthAuthorizeTokenList +} + +var map_OAuthClient = map[string]string{ + "": "OAuthClient describes an OAuth client", + "secret": "Secret is the unique secret associated with a client", + "additionalSecrets": "AdditionalSecrets holds other secrets that may be used to identify the client. This is useful for rotation and for service account token validation", + "respondWithChallenges": "RespondWithChallenges indicates whether the client wants authentication needed responses made in the form of challenges instead of redirects", + "redirectURIs": "RedirectURIs is the valid redirection URIs associated with a client", + "grantMethod": "GrantMethod is a required field which determines how to handle grants for this client. Valid grant handling methods are:\n - auto: always approves grant requests, useful for trusted clients\n - prompt: prompts the end user for approval of grant requests, useful for third-party clients", + "scopeRestrictions": "ScopeRestrictions describes which scopes this client can request. Each requested scope is checked against each restriction. If any restriction matches, then the scope is allowed. If no restriction matches, then the scope is denied.", + "accessTokenMaxAgeSeconds": "AccessTokenMaxAgeSeconds overrides the default access token max age for tokens granted to this client. 0 means no expiration.", + "accessTokenInactivityTimeoutSeconds": "AccessTokenInactivityTimeoutSeconds overrides the default token inactivity timeout for tokens granted to this client. The value represents the maximum amount of time that can occur between consecutive uses of the token. Tokens become invalid if they are not used within this temporal window. The user will need to acquire a new token to regain access once a token times out. This value needs to be set only if the default set in configuration is not appropriate for this client. Valid values are: - 0: Tokens for this client never time out - X: Tokens time out if there is no activity for X seconds The current minimum allowed value for X is 300 (5 minutes)", +} + +func (OAuthClient) SwaggerDoc() map[string]string { + return map_OAuthClient +} + +var map_OAuthClientAuthorization = map[string]string{ + "": "OAuthClientAuthorization describes an authorization created by an OAuth client", + "clientName": "ClientName references the client that created this authorization", + "userName": "UserName is the user name that authorized this client", + "userUID": "UserUID is the unique UID associated with this authorization. UserUID and UserName must both match for this authorization to be valid.", + "scopes": "Scopes is an array of the granted scopes.", +} + +func (OAuthClientAuthorization) SwaggerDoc() map[string]string { + return map_OAuthClientAuthorization +} + +var map_OAuthClientAuthorizationList = map[string]string{ + "": "OAuthClientAuthorizationList is a collection of OAuth client authorizations", + "items": "Items is the list of OAuth client authorizations", +} + +func (OAuthClientAuthorizationList) SwaggerDoc() map[string]string { + return map_OAuthClientAuthorizationList +} + +var map_OAuthClientList = map[string]string{ + "": "OAuthClientList is a collection of OAuth clients", + "items": "Items is the list of OAuth clients", +} + +func (OAuthClientList) SwaggerDoc() map[string]string { + return map_OAuthClientList +} + +var map_OAuthRedirectReference = map[string]string{ + "": "OAuthRedirectReference is a reference to an OAuth redirect object.", + "reference": "The reference to an redirect object in the current namespace.", +} + +func (OAuthRedirectReference) SwaggerDoc() map[string]string { + return map_OAuthRedirectReference +} + +var map_RedirectReference = map[string]string{ + "": "RedirectReference specifies the target in the current namespace that resolves into redirect URIs. Only the 'Route' kind is currently allowed.", + "group": "The group of the target that is being referred to.", + "kind": "The kind of the target that is being referred to. Currently, only 'Route' is allowed.", + "name": "The name of the target that is being referred to. e.g. name of the Route.", +} + +func (RedirectReference) SwaggerDoc() map[string]string { + return map_RedirectReference +} + +var map_ScopeRestriction = map[string]string{ + "": "ScopeRestriction describe one restriction on scopes. Exactly one option must be non-nil.", + "literals": "ExactValues means the scope has to match a particular set of strings exactly", + "clusterRole": "ClusterRole describes a set of restrictions for cluster role scoping.", +} + +func (ScopeRestriction) SwaggerDoc() map[string]string { + return map_ScopeRestriction +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/osin/v1/doc.go b/vendor/github.com/openshift/api/osin/v1/doc.go new file mode 100644 index 0000000000000..b74dfc48ad0ef --- /dev/null +++ b/vendor/github.com/openshift/api/osin/v1/doc.go @@ -0,0 +1,7 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +groupName=osin.config.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/osin/v1/register.go b/vendor/github.com/openshift/api/osin/v1/register.go new file mode 100644 index 0000000000000..4d54a5df40474 --- /dev/null +++ b/vendor/github.com/openshift/api/osin/v1/register.go @@ -0,0 +1,50 @@ +package v1 + +import ( + configv1 "github.com/openshift/api/config/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "osin.config.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, configv1.Install) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &OsinServerConfig{}, + + &BasicAuthPasswordIdentityProvider{}, + &AllowAllPasswordIdentityProvider{}, + &DenyAllPasswordIdentityProvider{}, + &HTPasswdPasswordIdentityProvider{}, + &LDAPPasswordIdentityProvider{}, + &KeystonePasswordIdentityProvider{}, + &RequestHeaderIdentityProvider{}, + &GitHubIdentityProvider{}, + &GitLabIdentityProvider{}, + &GoogleIdentityProvider{}, + &OpenIDIdentityProvider{}, + + &SessionSecrets{}, + ) + return nil +} diff --git a/vendor/github.com/openshift/api/osin/v1/types.go b/vendor/github.com/openshift/api/osin/v1/types.go new file mode 100644 index 0000000000000..fa0087d79a37f --- /dev/null +++ b/vendor/github.com/openshift/api/osin/v1/types.go @@ -0,0 +1,434 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + + configv1 "github.com/openshift/api/config/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type OsinServerConfig struct { + metav1.TypeMeta `json:",inline"` + + // provides the standard apiserver configuration + configv1.GenericAPIServerConfig `json:",inline"` + + // oauthConfig holds the necessary configuration options for OAuth authentication + OAuthConfig OAuthConfig `json:"oauthConfig"` +} + +// OAuthConfig holds the necessary configuration options for OAuth authentication +type OAuthConfig struct { + // masterCA is the CA for verifying the TLS connection back to the MasterURL. + // This field is deprecated and will be removed in a future release. + // See loginURL for details. + // Deprecated + MasterCA *string `json:"masterCA"` + + // masterURL is used for making server-to-server calls to exchange authorization codes for access tokens + // This field is deprecated and will be removed in a future release. + // See loginURL for details. + // Deprecated + MasterURL string `json:"masterURL"` + + // masterPublicURL is used for building valid client redirect URLs for internal and external access + // This field is deprecated and will be removed in a future release. + // See loginURL for details. + // Deprecated + MasterPublicURL string `json:"masterPublicURL"` + + // loginURL, along with masterCA, masterURL and masterPublicURL have distinct + // meanings depending on how the OAuth server is run. The two states are: + // 1. embedded in the kube api server (all 3.x releases) + // 2. as a standalone external process (all 4.x releases) + // in the embedded configuration, loginURL is equivalent to masterPublicURL + // and the other fields have functionality that matches their docs. + // in the standalone configuration, the fields are used as: + // loginURL is the URL required to login to the cluster: + // oc login --server= + // masterPublicURL is the issuer URL + // it is accessible from inside (service network) and outside (ingress) of the cluster + // masterURL is the loopback variation of the token_endpoint URL with no path component + // it is only accessible from inside (service network) of the cluster + // masterCA is used to perform TLS verification for connections made to masterURL + // For further details, see the IETF Draft: + // https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2 + LoginURL string `json:"loginURL"` + + // assetPublicURL is used for building valid client redirect URLs for external access + AssetPublicURL string `json:"assetPublicURL"` + + // alwaysShowProviderSelection will force the provider selection page to render even when there is only a single provider. + AlwaysShowProviderSelection bool `json:"alwaysShowProviderSelection"` + + //identityProviders is an ordered list of ways for a user to identify themselves + IdentityProviders []IdentityProvider `json:"identityProviders"` + + // grantConfig describes how to handle grants + GrantConfig GrantConfig `json:"grantConfig"` + + // sessionConfig hold information about configuring sessions. + SessionConfig *SessionConfig `json:"sessionConfig"` + + // tokenConfig contains options for authorization and access tokens + TokenConfig TokenConfig `json:"tokenConfig"` + + // templates allow you to customize pages like the login page. + Templates *OAuthTemplates `json:"templates"` +} + +// OAuthTemplates allow for customization of pages like the login page +type OAuthTemplates struct { + // login is a path to a file containing a go template used to render the login page. + // If unspecified, the default login page is used. + Login string `json:"login"` + + // providerSelection is a path to a file containing a go template used to render the provider selection page. + // If unspecified, the default provider selection page is used. + ProviderSelection string `json:"providerSelection"` + + // error is a path to a file containing a go template used to render error pages during the authentication or grant flow + // If unspecified, the default error page is used. + Error string `json:"error"` +} + +// IdentityProvider provides identities for users authenticating using credentials +type IdentityProvider struct { + // name is used to qualify the identities returned by this provider + Name string `json:"name"` + // challenge indicates whether to issue WWW-Authenticate challenges for this provider + UseAsChallenger bool `json:"challenge"` + // login indicates whether to use this identity provider for unauthenticated browsers to login against + UseAsLogin bool `json:"login"` + // mappingMethod determines how identities from this provider are mapped to users + MappingMethod string `json:"mappingMethod"` + // provider contains the information about how to set up a specific identity provider + // +kubebuilder:pruning:PreserveUnknownFields + Provider runtime.RawExtension `json:"provider"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// BasicAuthPasswordIdentityProvider provides identities for users authenticating using HTTP basic auth credentials +type BasicAuthPasswordIdentityProvider struct { + metav1.TypeMeta `json:",inline"` + + // RemoteConnectionInfo contains information about how to connect to the external basic auth server + configv1.RemoteConnectionInfo `json:",inline"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// AllowAllPasswordIdentityProvider provides identities for users authenticating using non-empty passwords +type AllowAllPasswordIdentityProvider struct { + metav1.TypeMeta `json:",inline"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DenyAllPasswordIdentityProvider provides no identities for users +type DenyAllPasswordIdentityProvider struct { + metav1.TypeMeta `json:",inline"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// HTPasswdPasswordIdentityProvider provides identities for users authenticating using htpasswd credentials +type HTPasswdPasswordIdentityProvider struct { + metav1.TypeMeta `json:",inline"` + + // file is a reference to your htpasswd file + File string `json:"file"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// LDAPPasswordIdentityProvider provides identities for users authenticating using LDAP credentials +type LDAPPasswordIdentityProvider struct { + metav1.TypeMeta `json:",inline"` + // url is an RFC 2255 URL which specifies the LDAP search parameters to use. The syntax of the URL is + // ldap://host:port/basedn?attribute?scope?filter + URL string `json:"url"` + // bindDN is an optional DN to bind with during the search phase. + BindDN string `json:"bindDN"` + // bindPassword is an optional password to bind with during the search phase. + BindPassword configv1.StringSource `json:"bindPassword"` + + // insecure, if true, indicates the connection should not use TLS. + // Cannot be set to true with a URL scheme of "ldaps://" + // If false, "ldaps://" URLs connect using TLS, and "ldap://" URLs are upgraded to a TLS connection using StartTLS as specified in https://tools.ietf.org/html/rfc2830 + Insecure bool `json:"insecure"` + // ca is the optional trusted certificate authority bundle to use when making requests to the server + // If empty, the default system roots are used + CA string `json:"ca"` + // attributes maps LDAP attributes to identities + Attributes LDAPAttributeMapping `json:"attributes"` +} + +// LDAPAttributeMapping maps LDAP attributes to OpenShift identity fields +type LDAPAttributeMapping struct { + // id is the list of attributes whose values should be used as the user ID. Required. + // LDAP standard identity attribute is "dn" + ID []string `json:"id"` + // preferredUsername is the list of attributes whose values should be used as the preferred username. + // LDAP standard login attribute is "uid" + PreferredUsername []string `json:"preferredUsername"` + // name is the list of attributes whose values should be used as the display name. Optional. + // If unspecified, no display name is set for the identity + // LDAP standard display name attribute is "cn" + Name []string `json:"name"` + // email is the list of attributes whose values should be used as the email address. Optional. + // If unspecified, no email is set for the identity + Email []string `json:"email"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// KeystonePasswordIdentityProvider provides identities for users authenticating using keystone password credentials +type KeystonePasswordIdentityProvider struct { + metav1.TypeMeta `json:",inline"` + // RemoteConnectionInfo contains information about how to connect to the keystone server + configv1.RemoteConnectionInfo `json:",inline"` + // domainName is required for keystone v3 + DomainName string `json:"domainName"` + // useKeystoneIdentity flag indicates that user should be authenticated by keystone ID, not by username + UseKeystoneIdentity bool `json:"useKeystoneIdentity"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RequestHeaderIdentityProvider provides identities for users authenticating using request header credentials +type RequestHeaderIdentityProvider struct { + metav1.TypeMeta `json:",inline"` + + // loginURL is a URL to redirect unauthenticated /authorize requests to + // Unauthenticated requests from OAuth clients which expect interactive logins will be redirected here + // ${url} is replaced with the current URL, escaped to be safe in a query parameter + // https://www.example.com/sso-login?then=${url} + // ${query} is replaced with the current query string + // https://www.example.com/auth-proxy/oauth/authorize?${query} + LoginURL string `json:"loginURL"` + + // challengeURL is a URL to redirect unauthenticated /authorize requests to + // Unauthenticated requests from OAuth clients which expect WWW-Authenticate challenges will be redirected here + // ${url} is replaced with the current URL, escaped to be safe in a query parameter + // https://www.example.com/sso-login?then=${url} + // ${query} is replaced with the current query string + // https://www.example.com/auth-proxy/oauth/authorize?${query} + ChallengeURL string `json:"challengeURL"` + + // clientCA is a file with the trusted signer certs. If empty, no request verification is done, and any direct request to the OAuth server can impersonate any identity from this provider, merely by setting a request header. + ClientCA string `json:"clientCA"` + // clientCommonNames is an optional list of common names to require a match from. If empty, any client certificate validated against the clientCA bundle is considered authoritative. + ClientCommonNames []string `json:"clientCommonNames"` + + // headers is the set of headers to check for identity information + Headers []string `json:"headers"` + // preferredUsernameHeaders is the set of headers to check for the preferred username + PreferredUsernameHeaders []string `json:"preferredUsernameHeaders"` + // nameHeaders is the set of headers to check for the display name + NameHeaders []string `json:"nameHeaders"` + // emailHeaders is the set of headers to check for the email address + EmailHeaders []string `json:"emailHeaders"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// GitHubIdentityProvider provides identities for users authenticating using GitHub credentials +type GitHubIdentityProvider struct { + metav1.TypeMeta `json:",inline"` + + // clientID is the oauth client ID + ClientID string `json:"clientID"` + // clientSecret is the oauth client secret + ClientSecret configv1.StringSource `json:"clientSecret"` + // organizations optionally restricts which organizations are allowed to log in + Organizations []string `json:"organizations"` + // teams optionally restricts which teams are allowed to log in. Format is /. + Teams []string `json:"teams"` + // hostname is the optional domain (e.g. "mycompany.com") for use with a hosted instance of GitHub Enterprise. + // It must match the GitHub Enterprise settings value that is configured at /setup/settings#hostname. + Hostname string `json:"hostname"` + // ca is the optional trusted certificate authority bundle to use when making requests to the server. + // If empty, the default system roots are used. This can only be configured when hostname is set to a non-empty value. + CA string `json:"ca"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// GitLabIdentityProvider provides identities for users authenticating using GitLab credentials +type GitLabIdentityProvider struct { + metav1.TypeMeta `json:",inline"` + + // ca is the optional trusted certificate authority bundle to use when making requests to the server + // If empty, the default system roots are used + CA string `json:"ca"` + // url is the oauth server base URL + URL string `json:"url"` + // clientID is the oauth client ID + ClientID string `json:"clientID"` + // clientSecret is the oauth client secret + ClientSecret configv1.StringSource `json:"clientSecret"` + // legacy determines if OAuth2 or OIDC should be used + // If true, OAuth2 is used + // If false, OIDC is used + // If nil and the URL's host is gitlab.com, OIDC is used + // Otherwise, OAuth2 is used + // In a future release, nil will default to using OIDC + // Eventually this flag will be removed and only OIDC will be used + Legacy *bool `json:"legacy,omitempty"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// GoogleIdentityProvider provides identities for users authenticating using Google credentials +type GoogleIdentityProvider struct { + metav1.TypeMeta `json:",inline"` + + // clientID is the oauth client ID + ClientID string `json:"clientID"` + // clientSecret is the oauth client secret + ClientSecret configv1.StringSource `json:"clientSecret"` + + // hostedDomain is the optional Google App domain (e.g. "mycompany.com") to restrict logins to + HostedDomain string `json:"hostedDomain"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// OpenIDIdentityProvider provides identities for users authenticating using OpenID credentials +type OpenIDIdentityProvider struct { + metav1.TypeMeta `json:",inline"` + + // ca is the optional trusted certificate authority bundle to use when making requests to the server + // If empty, the default system roots are used + CA string `json:"ca"` + + // clientID is the oauth client ID + ClientID string `json:"clientID"` + // clientSecret is the oauth client secret + ClientSecret configv1.StringSource `json:"clientSecret"` + + // extraScopes are any scopes to request in addition to the standard "openid" scope. + ExtraScopes []string `json:"extraScopes"` + + // extraAuthorizeParameters are any custom parameters to add to the authorize request. + ExtraAuthorizeParameters map[string]string `json:"extraAuthorizeParameters"` + + // urls to use to authenticate + URLs OpenIDURLs `json:"urls"` + + // claims mappings + Claims OpenIDClaims `json:"claims"` +} + +// OpenIDURLs are URLs to use when authenticating with an OpenID identity provider +type OpenIDURLs struct { + // authorize is the oauth authorization URL + Authorize string `json:"authorize"` + // token is the oauth token granting URL + Token string `json:"token"` + // userInfo is the optional userinfo URL. + // If present, a granted access_token is used to request claims + // If empty, a granted id_token is parsed for claims + UserInfo string `json:"userInfo"` +} + +// OpenIDClaims contains a list of OpenID claims to use when authenticating with an OpenID identity provider +type OpenIDClaims struct { + // id is the list of claims whose values should be used as the user ID. Required. + // OpenID standard identity claim is "sub" + ID []string `json:"id"` + // preferredUsername is the list of claims whose values should be used as the preferred username. + // If unspecified, the preferred username is determined from the value of the id claim + PreferredUsername []string `json:"preferredUsername"` + // name is the list of claims whose values should be used as the display name. Optional. + // If unspecified, no display name is set for the identity + Name []string `json:"name"` + // email is the list of claims whose values should be used as the email address. Optional. + // If unspecified, no email is set for the identity + Email []string `json:"email"` +} + +// GrantConfig holds the necessary configuration options for grant handlers +type GrantConfig struct { + // method determines the default strategy to use when an OAuth client requests a grant. + // This method will be used only if the specific OAuth client doesn't provide a strategy + // of their own. Valid grant handling methods are: + // - auto: always approves grant requests, useful for trusted clients + // - prompt: prompts the end user for approval of grant requests, useful for third-party clients + // - deny: always denies grant requests, useful for black-listed clients + Method GrantHandlerType `json:"method"` + + // serviceAccountMethod is used for determining client authorization for service account oauth client. + // It must be either: deny, prompt + ServiceAccountMethod GrantHandlerType `json:"serviceAccountMethod"` +} + +type GrantHandlerType string + +const ( + // auto auto-approves client authorization grant requests + GrantHandlerAuto GrantHandlerType = "auto" + // prompt prompts the user to approve new client authorization grant requests + GrantHandlerPrompt GrantHandlerType = "prompt" + // deny auto-denies client authorization grant requests + GrantHandlerDeny GrantHandlerType = "deny" +) + +// SessionConfig specifies options for cookie-based sessions. Used by AuthRequestHandlerSession +type SessionConfig struct { + // sessionSecretsFile is a reference to a file containing a serialized SessionSecrets object + // If no file is specified, a random signing and encryption key are generated at each server start + SessionSecretsFile string `json:"sessionSecretsFile"` + // sessionMaxAgeSeconds specifies how long created sessions last. Used by AuthRequestHandlerSession + SessionMaxAgeSeconds int32 `json:"sessionMaxAgeSeconds"` + // sessionName is the cookie name used to store the session + SessionName string `json:"sessionName"` +} + +// TokenConfig holds the necessary configuration options for authorization and access tokens +type TokenConfig struct { + // authorizeTokenMaxAgeSeconds defines the maximum age of authorize tokens + AuthorizeTokenMaxAgeSeconds int32 `json:"authorizeTokenMaxAgeSeconds,omitempty"` + // accessTokenMaxAgeSeconds defines the maximum age of access tokens + AccessTokenMaxAgeSeconds int32 `json:"accessTokenMaxAgeSeconds,omitempty"` + // accessTokenInactivityTimeoutSeconds - DEPRECATED: setting this field has no effect. + // +optional + AccessTokenInactivityTimeoutSeconds *int32 `json:"accessTokenInactivityTimeoutSeconds,omitempty"` + // accessTokenInactivityTimeout defines the token inactivity timeout + // for tokens granted by any client. + // The value represents the maximum amount of time that can occur between + // consecutive uses of the token. Tokens become invalid if they are not + // used within this temporal window. The user will need to acquire a new + // token to regain access once a token times out. Takes valid time + // duration string such as "5m", "1.5h" or "2h45m". The minimum allowed + // value for duration is 300s (5 minutes). If the timeout is configured + // per client, then that value takes precedence. If the timeout value is + // not specified and the client does not override the value, then tokens + // are valid until their lifetime. + // +optional + AccessTokenInactivityTimeout *metav1.Duration `json:"accessTokenInactivityTimeout,omitempty"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// SessionSecrets list the secrets to use to sign/encrypt and authenticate/decrypt created sessions. +type SessionSecrets struct { + metav1.TypeMeta `json:",inline"` + + // Secrets is a list of secrets + // New sessions are signed and encrypted using the first secret. + // Existing sessions are decrypted/authenticated by each secret until one succeeds. This allows rotating secrets. + Secrets []SessionSecret `json:"secrets"` +} + +// SessionSecret is a secret used to authenticate/decrypt cookie-based sessions +type SessionSecret struct { + // Authentication is used to authenticate sessions using HMAC. Recommended to use a secret with 32 or 64 bytes. + Authentication string `json:"authentication"` + // Encryption is used to encrypt sessions. Must be 16, 24, or 32 characters long, to select AES-128, AES- + Encryption string `json:"encryption"` +} diff --git a/vendor/github.com/openshift/api/osin/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/osin/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..eeeaae99fb528 --- /dev/null +++ b/vendor/github.com/openshift/api/osin/v1/zz_generated.deepcopy.go @@ -0,0 +1,639 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AllowAllPasswordIdentityProvider) DeepCopyInto(out *AllowAllPasswordIdentityProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowAllPasswordIdentityProvider. +func (in *AllowAllPasswordIdentityProvider) DeepCopy() *AllowAllPasswordIdentityProvider { + if in == nil { + return nil + } + out := new(AllowAllPasswordIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AllowAllPasswordIdentityProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BasicAuthPasswordIdentityProvider) DeepCopyInto(out *BasicAuthPasswordIdentityProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + out.RemoteConnectionInfo = in.RemoteConnectionInfo + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BasicAuthPasswordIdentityProvider. +func (in *BasicAuthPasswordIdentityProvider) DeepCopy() *BasicAuthPasswordIdentityProvider { + if in == nil { + return nil + } + out := new(BasicAuthPasswordIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *BasicAuthPasswordIdentityProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DenyAllPasswordIdentityProvider) DeepCopyInto(out *DenyAllPasswordIdentityProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DenyAllPasswordIdentityProvider. +func (in *DenyAllPasswordIdentityProvider) DeepCopy() *DenyAllPasswordIdentityProvider { + if in == nil { + return nil + } + out := new(DenyAllPasswordIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DenyAllPasswordIdentityProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GitHubIdentityProvider) DeepCopyInto(out *GitHubIdentityProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ClientSecret = in.ClientSecret + if in.Organizations != nil { + in, out := &in.Organizations, &out.Organizations + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Teams != nil { + in, out := &in.Teams, &out.Teams + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitHubIdentityProvider. +func (in *GitHubIdentityProvider) DeepCopy() *GitHubIdentityProvider { + if in == nil { + return nil + } + out := new(GitHubIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *GitHubIdentityProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GitLabIdentityProvider) DeepCopyInto(out *GitLabIdentityProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ClientSecret = in.ClientSecret + if in.Legacy != nil { + in, out := &in.Legacy, &out.Legacy + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitLabIdentityProvider. +func (in *GitLabIdentityProvider) DeepCopy() *GitLabIdentityProvider { + if in == nil { + return nil + } + out := new(GitLabIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *GitLabIdentityProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GoogleIdentityProvider) DeepCopyInto(out *GoogleIdentityProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ClientSecret = in.ClientSecret + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GoogleIdentityProvider. +func (in *GoogleIdentityProvider) DeepCopy() *GoogleIdentityProvider { + if in == nil { + return nil + } + out := new(GoogleIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *GoogleIdentityProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GrantConfig) DeepCopyInto(out *GrantConfig) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GrantConfig. +func (in *GrantConfig) DeepCopy() *GrantConfig { + if in == nil { + return nil + } + out := new(GrantConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HTPasswdPasswordIdentityProvider) DeepCopyInto(out *HTPasswdPasswordIdentityProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTPasswdPasswordIdentityProvider. +func (in *HTPasswdPasswordIdentityProvider) DeepCopy() *HTPasswdPasswordIdentityProvider { + if in == nil { + return nil + } + out := new(HTPasswdPasswordIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *HTPasswdPasswordIdentityProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IdentityProvider) DeepCopyInto(out *IdentityProvider) { + *out = *in + in.Provider.DeepCopyInto(&out.Provider) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IdentityProvider. +func (in *IdentityProvider) DeepCopy() *IdentityProvider { + if in == nil { + return nil + } + out := new(IdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KeystonePasswordIdentityProvider) DeepCopyInto(out *KeystonePasswordIdentityProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + out.RemoteConnectionInfo = in.RemoteConnectionInfo + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KeystonePasswordIdentityProvider. +func (in *KeystonePasswordIdentityProvider) DeepCopy() *KeystonePasswordIdentityProvider { + if in == nil { + return nil + } + out := new(KeystonePasswordIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *KeystonePasswordIdentityProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LDAPAttributeMapping) DeepCopyInto(out *LDAPAttributeMapping) { + *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.PreferredUsername != nil { + in, out := &in.PreferredUsername, &out.PreferredUsername + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Email != nil { + in, out := &in.Email, &out.Email + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LDAPAttributeMapping. +func (in *LDAPAttributeMapping) DeepCopy() *LDAPAttributeMapping { + if in == nil { + return nil + } + out := new(LDAPAttributeMapping) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LDAPPasswordIdentityProvider) DeepCopyInto(out *LDAPPasswordIdentityProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + out.BindPassword = in.BindPassword + in.Attributes.DeepCopyInto(&out.Attributes) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LDAPPasswordIdentityProvider. +func (in *LDAPPasswordIdentityProvider) DeepCopy() *LDAPPasswordIdentityProvider { + if in == nil { + return nil + } + out := new(LDAPPasswordIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *LDAPPasswordIdentityProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthConfig) DeepCopyInto(out *OAuthConfig) { + *out = *in + if in.MasterCA != nil { + in, out := &in.MasterCA, &out.MasterCA + *out = new(string) + **out = **in + } + if in.IdentityProviders != nil { + in, out := &in.IdentityProviders, &out.IdentityProviders + *out = make([]IdentityProvider, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + out.GrantConfig = in.GrantConfig + if in.SessionConfig != nil { + in, out := &in.SessionConfig, &out.SessionConfig + *out = new(SessionConfig) + **out = **in + } + in.TokenConfig.DeepCopyInto(&out.TokenConfig) + if in.Templates != nil { + in, out := &in.Templates, &out.Templates + *out = new(OAuthTemplates) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthConfig. +func (in *OAuthConfig) DeepCopy() *OAuthConfig { + if in == nil { + return nil + } + out := new(OAuthConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OAuthTemplates) DeepCopyInto(out *OAuthTemplates) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OAuthTemplates. +func (in *OAuthTemplates) DeepCopy() *OAuthTemplates { + if in == nil { + return nil + } + out := new(OAuthTemplates) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OpenIDClaims) DeepCopyInto(out *OpenIDClaims) { + *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.PreferredUsername != nil { + in, out := &in.PreferredUsername, &out.PreferredUsername + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Email != nil { + in, out := &in.Email, &out.Email + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenIDClaims. +func (in *OpenIDClaims) DeepCopy() *OpenIDClaims { + if in == nil { + return nil + } + out := new(OpenIDClaims) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OpenIDIdentityProvider) DeepCopyInto(out *OpenIDIdentityProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ClientSecret = in.ClientSecret + if in.ExtraScopes != nil { + in, out := &in.ExtraScopes, &out.ExtraScopes + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ExtraAuthorizeParameters != nil { + in, out := &in.ExtraAuthorizeParameters, &out.ExtraAuthorizeParameters + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + out.URLs = in.URLs + in.Claims.DeepCopyInto(&out.Claims) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenIDIdentityProvider. +func (in *OpenIDIdentityProvider) DeepCopy() *OpenIDIdentityProvider { + if in == nil { + return nil + } + out := new(OpenIDIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OpenIDIdentityProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OpenIDURLs) DeepCopyInto(out *OpenIDURLs) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenIDURLs. +func (in *OpenIDURLs) DeepCopy() *OpenIDURLs { + if in == nil { + return nil + } + out := new(OpenIDURLs) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OsinServerConfig) DeepCopyInto(out *OsinServerConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.GenericAPIServerConfig.DeepCopyInto(&out.GenericAPIServerConfig) + in.OAuthConfig.DeepCopyInto(&out.OAuthConfig) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OsinServerConfig. +func (in *OsinServerConfig) DeepCopy() *OsinServerConfig { + if in == nil { + return nil + } + out := new(OsinServerConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *OsinServerConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RequestHeaderIdentityProvider) DeepCopyInto(out *RequestHeaderIdentityProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.ClientCommonNames != nil { + in, out := &in.ClientCommonNames, &out.ClientCommonNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Headers != nil { + in, out := &in.Headers, &out.Headers + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.PreferredUsernameHeaders != nil { + in, out := &in.PreferredUsernameHeaders, &out.PreferredUsernameHeaders + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.NameHeaders != nil { + in, out := &in.NameHeaders, &out.NameHeaders + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.EmailHeaders != nil { + in, out := &in.EmailHeaders, &out.EmailHeaders + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RequestHeaderIdentityProvider. +func (in *RequestHeaderIdentityProvider) DeepCopy() *RequestHeaderIdentityProvider { + if in == nil { + return nil + } + out := new(RequestHeaderIdentityProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RequestHeaderIdentityProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SessionConfig) DeepCopyInto(out *SessionConfig) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SessionConfig. +func (in *SessionConfig) DeepCopy() *SessionConfig { + if in == nil { + return nil + } + out := new(SessionConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SessionSecret) DeepCopyInto(out *SessionSecret) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SessionSecret. +func (in *SessionSecret) DeepCopy() *SessionSecret { + if in == nil { + return nil + } + out := new(SessionSecret) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SessionSecrets) DeepCopyInto(out *SessionSecrets) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.Secrets != nil { + in, out := &in.Secrets, &out.Secrets + *out = make([]SessionSecret, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SessionSecrets. +func (in *SessionSecrets) DeepCopy() *SessionSecrets { + if in == nil { + return nil + } + out := new(SessionSecrets) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *SessionSecrets) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TokenConfig) DeepCopyInto(out *TokenConfig) { + *out = *in + if in.AccessTokenInactivityTimeoutSeconds != nil { + in, out := &in.AccessTokenInactivityTimeoutSeconds, &out.AccessTokenInactivityTimeoutSeconds + *out = new(int32) + **out = **in + } + if in.AccessTokenInactivityTimeout != nil { + in, out := &in.AccessTokenInactivityTimeout, &out.AccessTokenInactivityTimeout + *out = new(metav1.Duration) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TokenConfig. +func (in *TokenConfig) DeepCopy() *TokenConfig { + if in == nil { + return nil + } + out := new(TokenConfig) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/pkg/serialization/serialization.go b/vendor/github.com/openshift/api/pkg/serialization/serialization.go new file mode 100644 index 0000000000000..70c8e7a9943b5 --- /dev/null +++ b/vendor/github.com/openshift/api/pkg/serialization/serialization.go @@ -0,0 +1,45 @@ +package serialization + +import ( + "k8s.io/apimachinery/pkg/runtime" +) + +// DecodeNestedRawExtensionOrUnknown +func DecodeNestedRawExtensionOrUnknown(d runtime.Decoder, ext *runtime.RawExtension) { + if ext.Raw == nil || ext.Object != nil { + return + } + obj, gvk, err := d.Decode(ext.Raw, nil, nil) + if err != nil { + unk := &runtime.Unknown{Raw: ext.Raw} + if runtime.IsNotRegisteredError(err) { + if _, gvk, err := d.Decode(ext.Raw, nil, unk); err == nil { + unk.APIVersion = gvk.GroupVersion().String() + unk.Kind = gvk.Kind + ext.Object = unk + return + } + } + // TODO: record mime-type with the object + if gvk != nil { + unk.APIVersion = gvk.GroupVersion().String() + unk.Kind = gvk.Kind + } + obj = unk + } + ext.Object = obj +} + +// EncodeNestedRawExtension will encode the object in the RawExtension (if not nil) or +// return an error. +func EncodeNestedRawExtension(e runtime.Encoder, ext *runtime.RawExtension) error { + if ext.Raw != nil || ext.Object == nil { + return nil + } + data, err := runtime.Encode(e, ext.Object) + if err != nil { + return err + } + ext.Raw = data + return nil +} diff --git a/vendor/github.com/openshift/api/project/v1/doc.go b/vendor/github.com/openshift/api/project/v1/doc.go new file mode 100644 index 0000000000000..5bbd9d5ea7a25 --- /dev/null +++ b/vendor/github.com/openshift/api/project/v1/doc.go @@ -0,0 +1,8 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=github.com/openshift/origin/pkg/project/apis/project +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +groupName=project.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/project/v1/generated.pb.go b/vendor/github.com/openshift/api/project/v1/generated.pb.go new file mode 100644 index 0000000000000..35cbc228466ba --- /dev/null +++ b/vendor/github.com/openshift/api/project/v1/generated.pb.go @@ -0,0 +1,1320 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: github.com/openshift/api/project/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v11 "k8s.io/api/core/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *Project) Reset() { *m = Project{} } +func (*Project) ProtoMessage() {} +func (*Project) Descriptor() ([]byte, []int) { + return fileDescriptor_fbf46eaac05029bf, []int{0} +} +func (m *Project) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Project) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Project) XXX_Merge(src proto.Message) { + xxx_messageInfo_Project.Merge(m, src) +} +func (m *Project) XXX_Size() int { + return m.Size() +} +func (m *Project) XXX_DiscardUnknown() { + xxx_messageInfo_Project.DiscardUnknown(m) +} + +var xxx_messageInfo_Project proto.InternalMessageInfo + +func (m *ProjectList) Reset() { *m = ProjectList{} } +func (*ProjectList) ProtoMessage() {} +func (*ProjectList) Descriptor() ([]byte, []int) { + return fileDescriptor_fbf46eaac05029bf, []int{1} +} +func (m *ProjectList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ProjectList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ProjectList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProjectList.Merge(m, src) +} +func (m *ProjectList) XXX_Size() int { + return m.Size() +} +func (m *ProjectList) XXX_DiscardUnknown() { + xxx_messageInfo_ProjectList.DiscardUnknown(m) +} + +var xxx_messageInfo_ProjectList proto.InternalMessageInfo + +func (m *ProjectRequest) Reset() { *m = ProjectRequest{} } +func (*ProjectRequest) ProtoMessage() {} +func (*ProjectRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_fbf46eaac05029bf, []int{2} +} +func (m *ProjectRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ProjectRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ProjectRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProjectRequest.Merge(m, src) +} +func (m *ProjectRequest) XXX_Size() int { + return m.Size() +} +func (m *ProjectRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ProjectRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ProjectRequest proto.InternalMessageInfo + +func (m *ProjectSpec) Reset() { *m = ProjectSpec{} } +func (*ProjectSpec) ProtoMessage() {} +func (*ProjectSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_fbf46eaac05029bf, []int{3} +} +func (m *ProjectSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ProjectSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ProjectSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProjectSpec.Merge(m, src) +} +func (m *ProjectSpec) XXX_Size() int { + return m.Size() +} +func (m *ProjectSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ProjectSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_ProjectSpec proto.InternalMessageInfo + +func (m *ProjectStatus) Reset() { *m = ProjectStatus{} } +func (*ProjectStatus) ProtoMessage() {} +func (*ProjectStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_fbf46eaac05029bf, []int{4} +} +func (m *ProjectStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ProjectStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ProjectStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProjectStatus.Merge(m, src) +} +func (m *ProjectStatus) XXX_Size() int { + return m.Size() +} +func (m *ProjectStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ProjectStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ProjectStatus proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Project)(nil), "github.com.openshift.api.project.v1.Project") + proto.RegisterType((*ProjectList)(nil), "github.com.openshift.api.project.v1.ProjectList") + proto.RegisterType((*ProjectRequest)(nil), "github.com.openshift.api.project.v1.ProjectRequest") + proto.RegisterType((*ProjectSpec)(nil), "github.com.openshift.api.project.v1.ProjectSpec") + proto.RegisterType((*ProjectStatus)(nil), "github.com.openshift.api.project.v1.ProjectStatus") +} + +func init() { + proto.RegisterFile("github.com/openshift/api/project/v1/generated.proto", fileDescriptor_fbf46eaac05029bf) +} + +var fileDescriptor_fbf46eaac05029bf = []byte{ + // 570 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x93, 0x3d, 0x8f, 0xd3, 0x30, + 0x18, 0xc7, 0x9b, 0xf6, 0x7a, 0x5c, 0x5d, 0xee, 0x84, 0xc2, 0x52, 0x75, 0x48, 0x4b, 0x90, 0x50, + 0x07, 0x70, 0x68, 0x79, 0x11, 0x73, 0x40, 0x08, 0x24, 0x5e, 0x0e, 0xb3, 0x55, 0x0c, 0xb8, 0xa9, + 0x9b, 0x9a, 0x5e, 0x62, 0x13, 0xbb, 0x95, 0x8e, 0x89, 0x8f, 0xc0, 0xce, 0xe7, 0x60, 0x65, 0xee, + 0x78, 0xe3, 0x4d, 0xd5, 0x35, 0x7c, 0x8b, 0x9b, 0x90, 0x1d, 0x37, 0x09, 0x5c, 0x91, 0xee, 0x16, + 0xb6, 0xfa, 0xc9, 0xff, 0xf7, 0xb3, 0xfd, 0x3c, 0x2e, 0x78, 0x10, 0x52, 0x39, 0x9d, 0x8f, 0x60, + 0xc0, 0x22, 0x8f, 0x71, 0x12, 0x8b, 0x29, 0x9d, 0x48, 0x0f, 0x73, 0xea, 0xf1, 0x84, 0x7d, 0x22, + 0x81, 0xf4, 0x16, 0x7d, 0x2f, 0x24, 0x31, 0x49, 0xb0, 0x24, 0x63, 0xc8, 0x13, 0x26, 0x99, 0x7d, + 0xbb, 0x80, 0x60, 0x0e, 0x41, 0xcc, 0x29, 0x34, 0x10, 0x5c, 0xf4, 0xdb, 0xf7, 0x4a, 0xe6, 0x90, + 0x85, 0xcc, 0xd3, 0xec, 0x68, 0x3e, 0xd1, 0x2b, 0xbd, 0xd0, 0xbf, 0x32, 0x67, 0xdb, 0x9d, 0x3d, + 0x11, 0x90, 0x32, 0xbd, 0x75, 0xc0, 0x12, 0xb2, 0x65, 0xdf, 0xf6, 0xc3, 0x22, 0x13, 0xe1, 0x60, + 0x4a, 0x63, 0x92, 0x1c, 0x7b, 0x7c, 0x16, 0xaa, 0x82, 0xf0, 0x22, 0x22, 0xf1, 0x36, 0xea, 0xf1, + 0xbf, 0xa8, 0x64, 0x1e, 0x4b, 0x1a, 0x11, 0x4f, 0x04, 0x53, 0x12, 0xe1, 0xbf, 0x39, 0xf7, 0x7b, + 0x15, 0x5c, 0x3b, 0xcc, 0xee, 0x63, 0x7f, 0x04, 0x7b, 0x4a, 0x3f, 0xc6, 0x12, 0xb7, 0xac, 0xae, + 0xd5, 0x6b, 0x0e, 0xee, 0xc3, 0x4c, 0x0b, 0xcb, 0x5a, 0xc8, 0x67, 0xa1, 0x2a, 0x08, 0xa8, 0xd2, + 0x70, 0xd1, 0x87, 0x6f, 0x47, 0x8a, 0x7f, 0x4d, 0x24, 0xf6, 0xed, 0xe5, 0xaa, 0x53, 0x49, 0x57, + 0x1d, 0x50, 0xd4, 0x50, 0x6e, 0xb5, 0x11, 0xd8, 0x11, 0x9c, 0x04, 0xad, 0xaa, 0xb1, 0x5f, 0xa2, + 0xc5, 0xd0, 0x9c, 0xee, 0x3d, 0x27, 0x81, 0x7f, 0xdd, 0xd8, 0x77, 0xd4, 0x0a, 0x69, 0x97, 0x3d, + 0x04, 0xbb, 0x42, 0x62, 0x39, 0x17, 0xad, 0x9a, 0xb6, 0x0e, 0xae, 0x64, 0xd5, 0xa4, 0x7f, 0x60, + 0xbc, 0xbb, 0xd9, 0x1a, 0x19, 0xa3, 0xfb, 0xd3, 0x02, 0x4d, 0x93, 0x7c, 0x45, 0x85, 0xb4, 0x3f, + 0x5c, 0xe8, 0x10, 0xbc, 0x5c, 0x87, 0x14, 0xad, 0xfb, 0x73, 0xc3, 0xec, 0xb4, 0xb7, 0xa9, 0x94, + 0xba, 0xf3, 0x0e, 0xd4, 0xa9, 0x24, 0x91, 0x68, 0x55, 0xbb, 0xb5, 0x5e, 0x73, 0x70, 0xf7, 0x2a, + 0x17, 0xf1, 0xf7, 0x8d, 0xb8, 0xfe, 0x52, 0x29, 0x50, 0x66, 0x72, 0xcf, 0x2c, 0x70, 0x60, 0x12, + 0x88, 0x7c, 0x9e, 0x13, 0xf1, 0x3f, 0xa6, 0xfc, 0x08, 0x34, 0xc7, 0x54, 0xf0, 0x23, 0x7c, 0xfc, + 0x06, 0x47, 0x44, 0x0f, 0xbb, 0xe1, 0xdf, 0x34, 0x48, 0xf3, 0x59, 0xf1, 0x09, 0x95, 0x73, 0x1a, + 0x23, 0x22, 0x48, 0x28, 0x97, 0x94, 0xc5, 0x7a, 0x9a, 0x65, 0xac, 0xf8, 0x84, 0xca, 0x39, 0x17, + 0xe7, 0x23, 0x52, 0x8f, 0xc2, 0x46, 0x00, 0x4c, 0x68, 0x8c, 0x8f, 0xe8, 0x17, 0x92, 0x88, 0x96, + 0xd5, 0xad, 0xf5, 0x1a, 0xfe, 0x40, 0x1d, 0xf5, 0x79, 0x5e, 0x3d, 0x5f, 0x75, 0xba, 0x17, 0xff, + 0x88, 0x30, 0x0f, 0xe8, 0xa3, 0x95, 0x2c, 0xee, 0x0f, 0x0b, 0xec, 0xff, 0xf1, 0x60, 0xec, 0x17, + 0xa0, 0xce, 0xa7, 0x58, 0x10, 0xdd, 0xc1, 0x86, 0x3f, 0xd8, 0x34, 0xff, 0x50, 0x15, 0xcf, 0x57, + 0x9d, 0x5b, 0x5b, 0xfc, 0x4a, 0x2b, 0x38, 0x0e, 0x88, 0x0e, 0xa1, 0x4c, 0x60, 0x0f, 0x01, 0x08, + 0x58, 0x3c, 0xa6, 0xea, 0x2e, 0x9b, 0xc9, 0xdf, 0x29, 0x0d, 0x04, 0x2a, 0x1c, 0x96, 0xf1, 0xa7, + 0x9b, 0x78, 0x31, 0x86, 0xbc, 0x24, 0x50, 0xc9, 0xe6, 0xf7, 0x96, 0x6b, 0xa7, 0x72, 0xb2, 0x76, + 0x2a, 0xa7, 0x6b, 0xa7, 0xf2, 0x35, 0x75, 0xac, 0x65, 0xea, 0x58, 0x27, 0xa9, 0x63, 0x9d, 0xa6, + 0x8e, 0x75, 0x96, 0x3a, 0xd6, 0xb7, 0x5f, 0x4e, 0x65, 0x58, 0x5d, 0xf4, 0x7f, 0x07, 0x00, 0x00, + 0xff, 0xff, 0x0a, 0xd0, 0xf2, 0xe0, 0x22, 0x05, 0x00, 0x00, +} + +func (m *Project) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Project) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Project) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ProjectList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ProjectList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ProjectList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ProjectRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ProjectRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ProjectRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x1a + i -= len(m.DisplayName) + copy(dAtA[i:], m.DisplayName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DisplayName))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ProjectSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ProjectSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ProjectSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Finalizers) > 0 { + for iNdEx := len(m.Finalizers) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Finalizers[iNdEx]) + copy(dAtA[i:], m.Finalizers[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Finalizers[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *ProjectStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ProjectStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ProjectStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Phase) + copy(dAtA[i:], m.Phase) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Project) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ProjectList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ProjectRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DisplayName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Description) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ProjectSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Finalizers) > 0 { + for _, s := range m.Finalizers { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ProjectStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *Project) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Project{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ProjectSpec", "ProjectSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ProjectStatus", "ProjectStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ProjectList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Project{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Project", "Project", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ProjectList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ProjectRequest) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ProjectRequest{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `DisplayName:` + fmt.Sprintf("%v", this.DisplayName) + `,`, + `Description:` + fmt.Sprintf("%v", this.Description) + `,`, + `}`, + }, "") + return s +} +func (this *ProjectSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ProjectSpec{`, + `Finalizers:` + fmt.Sprintf("%v", this.Finalizers) + `,`, + `}`, + }, "") + return s +} +func (this *ProjectStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]NamespaceCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += fmt.Sprintf("%v", f) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&ProjectStatus{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *Project) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Project: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Project: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ProjectList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ProjectList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ProjectList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Project{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ProjectRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ProjectRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ProjectRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DisplayName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DisplayName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ProjectSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ProjectSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ProjectSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Finalizers", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Finalizers = append(m.Finalizers, k8s_io_api_core_v1.FinalizerName(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ProjectStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ProjectStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ProjectStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Phase = k8s_io_api_core_v1.NamespacePhase(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, v11.NamespaceCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vendor/github.com/openshift/api/project/v1/generated.proto b/vendor/github.com/openshift/api/project/v1/generated.proto new file mode 100644 index 0000000000000..2baaf6a031bd0 --- /dev/null +++ b/vendor/github.com/openshift/api/project/v1/generated.proto @@ -0,0 +1,75 @@ + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package github.com.openshift.api.project.v1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// Projects are the unit of isolation and collaboration in OpenShift. A project has one or more members, +// a quota on the resources that the project may consume, and the security controls on the resources in +// the project. Within a project, members may have different roles - project administrators can set +// membership, editors can create and manage the resources, and viewers can see but not access running +// containers. In a normal cluster project administrators are not able to alter their quotas - that is +// restricted to cluster administrators. +// +// Listing or watching projects will return only projects the user has the reader role on. +// +// An OpenShift project is an alternative representation of a Kubernetes namespace. Projects are exposed +// as editable to end users while namespaces are not. Direct creation of a project is typically restricted +// to administrators, while end users should use the requestproject resource. +message Project { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Spec defines the behavior of the Namespace. + optional ProjectSpec spec = 2; + + // Status describes the current status of a Namespace + // +optional + optional ProjectStatus status = 3; +} + +// ProjectList is a list of Project objects. +message ProjectList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of projects + repeated Project items = 2; +} + +// ProjecRequest is the set of options necessary to fully qualify a project request +message ProjectRequest { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // DisplayName is the display name to apply to a project + optional string displayName = 2; + + // Description is the description to apply to a project + optional string description = 3; +} + +// ProjectSpec describes the attributes on a Project +message ProjectSpec { + // Finalizers is an opaque list of values that must be empty to permanently remove object from storage + repeated string finalizers = 1; +} + +// ProjectStatus is information about the current status of a Project +message ProjectStatus { + // Phase is the current lifecycle phase of the project + // +optional + optional string phase = 1; + + // Represents the latest available observations of the project current state. + // +optional + // +patchMergeKey=type + // +patchStrategy=merge + repeated k8s.io.api.core.v1.NamespaceCondition conditions = 2; +} + diff --git a/vendor/github.com/openshift/api/project/v1/legacy.go b/vendor/github.com/openshift/api/project/v1/legacy.go new file mode 100644 index 0000000000000..186f905f3a8eb --- /dev/null +++ b/vendor/github.com/openshift/api/project/v1/legacy.go @@ -0,0 +1,23 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + legacyGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} + legacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes, corev1.AddToScheme) + DeprecatedInstallWithoutGroup = legacySchemeBuilder.AddToScheme +) + +func addLegacyKnownTypes(scheme *runtime.Scheme) error { + types := []runtime.Object{ + &Project{}, + &ProjectList{}, + &ProjectRequest{}, + } + scheme.AddKnownTypes(legacyGroupVersion, types...) + return nil +} diff --git a/vendor/github.com/openshift/api/project/v1/register.go b/vendor/github.com/openshift/api/project/v1/register.go new file mode 100644 index 0000000000000..e471716ce8e2a --- /dev/null +++ b/vendor/github.com/openshift/api/project/v1/register.go @@ -0,0 +1,40 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "project.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, corev1.AddToScheme) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &Project{}, + &ProjectList{}, + &ProjectRequest{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/project/v1/types.go b/vendor/github.com/openshift/api/project/v1/types.go new file mode 100644 index 0000000000000..dea150f12ff05 --- /dev/null +++ b/vendor/github.com/openshift/api/project/v1/types.go @@ -0,0 +1,93 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ProjectList is a list of Project objects. +type ProjectList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of projects + Items []Project `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +const ( + // These are internal finalizer values to Origin + FinalizerOrigin corev1.FinalizerName = "openshift.io/origin" + // ProjectNodeSelector is an annotation that holds the node selector; + // the node selector annotation determines which nodes will have pods from this project scheduled to them + ProjectNodeSelector = "openshift.io/node-selector" + + // ProjectRequesterAnnotation is the username that requested a given project. Its not guaranteed to be present, + // but it is set by the default project template. + ProjectRequesterAnnotation = "openshift.io/requester" +) + +// ProjectSpec describes the attributes on a Project +type ProjectSpec struct { + // Finalizers is an opaque list of values that must be empty to permanently remove object from storage + Finalizers []corev1.FinalizerName `json:"finalizers,omitempty" protobuf:"bytes,1,rep,name=finalizers,casttype=k8s.io/api/core/v1.FinalizerName"` +} + +// ProjectStatus is information about the current status of a Project +type ProjectStatus struct { + // Phase is the current lifecycle phase of the project + // +optional + Phase corev1.NamespacePhase `json:"phase,omitempty" protobuf:"bytes,1,opt,name=phase,casttype=k8s.io/api/core/v1.NamespacePhase"` + + // Represents the latest available observations of the project current state. + // +optional + // +patchMergeKey=type + // +patchStrategy=merge + Conditions []corev1.NamespaceCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,2,rep,name=conditions"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Projects are the unit of isolation and collaboration in OpenShift. A project has one or more members, +// a quota on the resources that the project may consume, and the security controls on the resources in +// the project. Within a project, members may have different roles - project administrators can set +// membership, editors can create and manage the resources, and viewers can see but not access running +// containers. In a normal cluster project administrators are not able to alter their quotas - that is +// restricted to cluster administrators. +// +// Listing or watching projects will return only projects the user has the reader role on. +// +// An OpenShift project is an alternative representation of a Kubernetes namespace. Projects are exposed +// as editable to end users while namespaces are not. Direct creation of a project is typically restricted +// to administrators, while end users should use the requestproject resource. +type Project struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines the behavior of the Namespace. + Spec ProjectSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Status describes the current status of a Namespace + // +optional + Status ProjectStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +genclient +// +genclient:nonNamespaced +// +genclient:skipVerbs=get,list,create,update,patch,delete,deleteCollection,watch +// +genclient:method=Create,verb=create,result=Project + +// ProjecRequest is the set of options necessary to fully qualify a project request +type ProjectRequest struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // DisplayName is the display name to apply to a project + DisplayName string `json:"displayName,omitempty" protobuf:"bytes,2,opt,name=displayName"` + // Description is the description to apply to a project + Description string `json:"description,omitempty" protobuf:"bytes,3,opt,name=description"` +} diff --git a/vendor/github.com/openshift/api/project/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/project/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..763383030f480 --- /dev/null +++ b/vendor/github.com/openshift/api/project/v1/zz_generated.deepcopy.go @@ -0,0 +1,141 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Project) DeepCopyInto(out *Project) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Project. +func (in *Project) DeepCopy() *Project { + if in == nil { + return nil + } + out := new(Project) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Project) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProjectList) DeepCopyInto(out *ProjectList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Project, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectList. +func (in *ProjectList) DeepCopy() *ProjectList { + if in == nil { + return nil + } + out := new(ProjectList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ProjectList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProjectRequest) DeepCopyInto(out *ProjectRequest) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectRequest. +func (in *ProjectRequest) DeepCopy() *ProjectRequest { + if in == nil { + return nil + } + out := new(ProjectRequest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ProjectRequest) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProjectSpec) DeepCopyInto(out *ProjectSpec) { + *out = *in + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]corev1.FinalizerName, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectSpec. +func (in *ProjectSpec) DeepCopy() *ProjectSpec { + if in == nil { + return nil + } + out := new(ProjectSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProjectStatus) DeepCopyInto(out *ProjectStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]corev1.NamespaceCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectStatus. +func (in *ProjectStatus) DeepCopy() *ProjectStatus { + if in == nil { + return nil + } + out := new(ProjectStatus) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/project/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/project/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000000..080f2677ae10b --- /dev/null +++ b/vendor/github.com/openshift/api/project/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,62 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_Project = map[string]string{ + "": "Projects are the unit of isolation and collaboration in OpenShift. A project has one or more members, a quota on the resources that the project may consume, and the security controls on the resources in the project. Within a project, members may have different roles - project administrators can set membership, editors can create and manage the resources, and viewers can see but not access running containers. In a normal cluster project administrators are not able to alter their quotas - that is restricted to cluster administrators.\n\nListing or watching projects will return only projects the user has the reader role on.\n\nAn OpenShift project is an alternative representation of a Kubernetes namespace. Projects are exposed as editable to end users while namespaces are not. Direct creation of a project is typically restricted to administrators, while end users should use the requestproject resource.", + "spec": "Spec defines the behavior of the Namespace.", + "status": "Status describes the current status of a Namespace", +} + +func (Project) SwaggerDoc() map[string]string { + return map_Project +} + +var map_ProjectList = map[string]string{ + "": "ProjectList is a list of Project objects.", + "items": "Items is the list of projects", +} + +func (ProjectList) SwaggerDoc() map[string]string { + return map_ProjectList +} + +var map_ProjectRequest = map[string]string{ + "": "ProjecRequest is the set of options necessary to fully qualify a project request", + "displayName": "DisplayName is the display name to apply to a project", + "description": "Description is the description to apply to a project", +} + +func (ProjectRequest) SwaggerDoc() map[string]string { + return map_ProjectRequest +} + +var map_ProjectSpec = map[string]string{ + "": "ProjectSpec describes the attributes on a Project", + "finalizers": "Finalizers is an opaque list of values that must be empty to permanently remove object from storage", +} + +func (ProjectSpec) SwaggerDoc() map[string]string { + return map_ProjectSpec +} + +var map_ProjectStatus = map[string]string{ + "": "ProjectStatus is information about the current status of a Project", + "phase": "Phase is the current lifecycle phase of the project", + "conditions": "Represents the latest available observations of the project current state.", +} + +func (ProjectStatus) SwaggerDoc() map[string]string { + return map_ProjectStatus +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/quota/v1/0000_03_quota-openshift_01_clusterresourcequota.crd.yaml b/vendor/github.com/openshift/api/quota/v1/0000_03_quota-openshift_01_clusterresourcequota.crd.yaml new file mode 100644 index 0000000000000..8382490414d40 --- /dev/null +++ b/vendor/github.com/openshift/api/quota/v1/0000_03_quota-openshift_01_clusterresourcequota.crd.yaml @@ -0,0 +1,243 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + annotations: + include.release.openshift.io/self-managed-high-availability: "true" + name: clusterresourcequotas.quota.openshift.io +spec: + group: quota.openshift.io + names: + kind: ClusterResourceQuota + listKind: ClusterResourceQuotaList + plural: clusterresourcequotas + singular: clusterresourcequota + preserveUnknownFields: false + scope: Cluster + subresources: + status: {} + validation: + openAPIV3Schema: + description: ClusterResourceQuota mirrors ResourceQuota at a cluster scope. This + object is easily convertible to synthetic ResourceQuota object to allow quota + evaluation re-use. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec defines the desired quota + properties: + quota: + description: Quota defines the desired quota + properties: + hard: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + type: "" + x-kubernetes-int-or-string: true + description: 'hard is the set of desired hard limits for each named + resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/' + type: object + scopeSelector: + description: scopeSelector is also a collection of filters like + scopes that must match each object tracked by a quota but expressed + using ScopeSelectorOperator in combination with possible values. + For a resource to match, both scopes AND scopeSelector (if specified + in spec), must be matched. + properties: + matchExpressions: + description: A list of scope selector requirements by scope + of the resources. + items: + description: A scoped-resource selector requirement is a selector + that contains values, a scope name, and an operator that + relates the scope name and values. + properties: + operator: + description: Represents a scope's relationship to a set + of values. Valid operators are In, NotIn, Exists, DoesNotExist. + type: string + scopeName: + description: The name of the scope that the selector applies + to. + type: string + values: + description: An array of string values. If the operator + is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - operator + - scopeName + type: object + type: array + type: object + scopes: + description: A collection of filters that must match each object + tracked by a quota. If not specified, the quota matches all objects. + items: + description: A ResourceQuotaScope defines a filter that must match + each object tracked by a quota + type: string + type: array + type: object + selector: + description: Selector is the selector used to match projects. It should + only select active projects on the scale of dozens (though it can + select many more less active projects). These projects will contend + on object creation through this resource. + properties: + annotations: + additionalProperties: + type: string + description: AnnotationSelector is used to select projects by annotation. + nullable: true + type: object + labels: + description: LabelSelector is used to select projects by label. + nullable: true + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement is a selector that + contains values, a key, and an operator that relates the + key and values. + properties: + key: + description: key is the label key that the selector applies + to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of string values. If the + operator is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. A single + {key,value} in the matchLabels map is equivalent to an element + of matchExpressions, whose key field is "key", the operator + is "In", and the values array contains only "value". The requirements + are ANDed. + type: object + type: object + type: object + required: + - quota + - selector + type: object + status: + description: Status defines the actual enforced quota and its current usage + properties: + namespaces: + description: Namespaces slices the usage by project. This division + allows for quick resolution of deletion reconciliation inside of a + single project without requiring a recalculation across all projects. This + can be used to pull the deltas for a given project. + items: + description: ResourceQuotaStatusByNamespace gives status for a particular + project + properties: + namespace: + description: Namespace the project this status applies to + type: string + status: + description: Status indicates how many resources have been consumed + by this project + properties: + hard: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Hard is the set of enforced hard limits for + each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/' + type: object + used: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Used is the current observed total usage of the + resource in the namespace. + type: object + type: object + required: + - namespace + - status + type: object + nullable: true + type: array + total: + description: Total defines the actual enforced quota and its current + usage across all projects + properties: + hard: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Hard is the set of enforced hard limits for each named + resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/' + type: object + used: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Used is the current observed total usage of the resource + in the namespace. + type: object + type: object + required: + - total + type: object + required: + - metadata + - spec + type: object + versions: + - name: v1 + served: true + storage: true diff --git a/vendor/github.com/openshift/api/quota/v1/0000_03_quota-openshift_01_clusterresourcequota.crd.yaml-merge-patch b/vendor/github.com/openshift/api/quota/v1/0000_03_quota-openshift_01_clusterresourcequota.crd.yaml-merge-patch new file mode 100644 index 0000000000000..1897fdbee9ed0 --- /dev/null +++ b/vendor/github.com/openshift/api/quota/v1/0000_03_quota-openshift_01_clusterresourcequota.crd.yaml-merge-patch @@ -0,0 +1,13 @@ +spec: + validation: + openAPIV3Schema: + properties: + spec: + properties: + quota: + properties: + hard: + additionalProperties: + type: "" + x-kubernetes-int-or-string: true + diff --git a/vendor/github.com/openshift/api/quota/v1/doc.go b/vendor/github.com/openshift/api/quota/v1/doc.go new file mode 100644 index 0000000000000..ae5c9c2c762ae --- /dev/null +++ b/vendor/github.com/openshift/api/quota/v1/doc.go @@ -0,0 +1,8 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=github.com/openshift/origin/pkg/quota/apis/quota +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +groupName=quota.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/quota/v1/generated.pb.go b/vendor/github.com/openshift/api/quota/v1/generated.pb.go new file mode 100644 index 0000000000000..691c7f39602b1 --- /dev/null +++ b/vendor/github.com/openshift/api/quota/v1/generated.pb.go @@ -0,0 +1,2176 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: github.com/openshift/api/quota/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *AppliedClusterResourceQuota) Reset() { *m = AppliedClusterResourceQuota{} } +func (*AppliedClusterResourceQuota) ProtoMessage() {} +func (*AppliedClusterResourceQuota) Descriptor() ([]byte, []int) { + return fileDescriptor_f605e5b8440aecb8, []int{0} +} +func (m *AppliedClusterResourceQuota) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AppliedClusterResourceQuota) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AppliedClusterResourceQuota) XXX_Merge(src proto.Message) { + xxx_messageInfo_AppliedClusterResourceQuota.Merge(m, src) +} +func (m *AppliedClusterResourceQuota) XXX_Size() int { + return m.Size() +} +func (m *AppliedClusterResourceQuota) XXX_DiscardUnknown() { + xxx_messageInfo_AppliedClusterResourceQuota.DiscardUnknown(m) +} + +var xxx_messageInfo_AppliedClusterResourceQuota proto.InternalMessageInfo + +func (m *AppliedClusterResourceQuotaList) Reset() { *m = AppliedClusterResourceQuotaList{} } +func (*AppliedClusterResourceQuotaList) ProtoMessage() {} +func (*AppliedClusterResourceQuotaList) Descriptor() ([]byte, []int) { + return fileDescriptor_f605e5b8440aecb8, []int{1} +} +func (m *AppliedClusterResourceQuotaList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AppliedClusterResourceQuotaList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AppliedClusterResourceQuotaList) XXX_Merge(src proto.Message) { + xxx_messageInfo_AppliedClusterResourceQuotaList.Merge(m, src) +} +func (m *AppliedClusterResourceQuotaList) XXX_Size() int { + return m.Size() +} +func (m *AppliedClusterResourceQuotaList) XXX_DiscardUnknown() { + xxx_messageInfo_AppliedClusterResourceQuotaList.DiscardUnknown(m) +} + +var xxx_messageInfo_AppliedClusterResourceQuotaList proto.InternalMessageInfo + +func (m *ClusterResourceQuota) Reset() { *m = ClusterResourceQuota{} } +func (*ClusterResourceQuota) ProtoMessage() {} +func (*ClusterResourceQuota) Descriptor() ([]byte, []int) { + return fileDescriptor_f605e5b8440aecb8, []int{2} +} +func (m *ClusterResourceQuota) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterResourceQuota) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterResourceQuota) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterResourceQuota.Merge(m, src) +} +func (m *ClusterResourceQuota) XXX_Size() int { + return m.Size() +} +func (m *ClusterResourceQuota) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterResourceQuota.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterResourceQuota proto.InternalMessageInfo + +func (m *ClusterResourceQuotaList) Reset() { *m = ClusterResourceQuotaList{} } +func (*ClusterResourceQuotaList) ProtoMessage() {} +func (*ClusterResourceQuotaList) Descriptor() ([]byte, []int) { + return fileDescriptor_f605e5b8440aecb8, []int{3} +} +func (m *ClusterResourceQuotaList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterResourceQuotaList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterResourceQuotaList) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterResourceQuotaList.Merge(m, src) +} +func (m *ClusterResourceQuotaList) XXX_Size() int { + return m.Size() +} +func (m *ClusterResourceQuotaList) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterResourceQuotaList.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterResourceQuotaList proto.InternalMessageInfo + +func (m *ClusterResourceQuotaSelector) Reset() { *m = ClusterResourceQuotaSelector{} } +func (*ClusterResourceQuotaSelector) ProtoMessage() {} +func (*ClusterResourceQuotaSelector) Descriptor() ([]byte, []int) { + return fileDescriptor_f605e5b8440aecb8, []int{4} +} +func (m *ClusterResourceQuotaSelector) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterResourceQuotaSelector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterResourceQuotaSelector) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterResourceQuotaSelector.Merge(m, src) +} +func (m *ClusterResourceQuotaSelector) XXX_Size() int { + return m.Size() +} +func (m *ClusterResourceQuotaSelector) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterResourceQuotaSelector.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterResourceQuotaSelector proto.InternalMessageInfo + +func (m *ClusterResourceQuotaSpec) Reset() { *m = ClusterResourceQuotaSpec{} } +func (*ClusterResourceQuotaSpec) ProtoMessage() {} +func (*ClusterResourceQuotaSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_f605e5b8440aecb8, []int{5} +} +func (m *ClusterResourceQuotaSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterResourceQuotaSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterResourceQuotaSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterResourceQuotaSpec.Merge(m, src) +} +func (m *ClusterResourceQuotaSpec) XXX_Size() int { + return m.Size() +} +func (m *ClusterResourceQuotaSpec) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterResourceQuotaSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterResourceQuotaSpec proto.InternalMessageInfo + +func (m *ClusterResourceQuotaStatus) Reset() { *m = ClusterResourceQuotaStatus{} } +func (*ClusterResourceQuotaStatus) ProtoMessage() {} +func (*ClusterResourceQuotaStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_f605e5b8440aecb8, []int{6} +} +func (m *ClusterResourceQuotaStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClusterResourceQuotaStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ClusterResourceQuotaStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClusterResourceQuotaStatus.Merge(m, src) +} +func (m *ClusterResourceQuotaStatus) XXX_Size() int { + return m.Size() +} +func (m *ClusterResourceQuotaStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ClusterResourceQuotaStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ClusterResourceQuotaStatus proto.InternalMessageInfo + +func (m *ResourceQuotaStatusByNamespace) Reset() { *m = ResourceQuotaStatusByNamespace{} } +func (*ResourceQuotaStatusByNamespace) ProtoMessage() {} +func (*ResourceQuotaStatusByNamespace) Descriptor() ([]byte, []int) { + return fileDescriptor_f605e5b8440aecb8, []int{7} +} +func (m *ResourceQuotaStatusByNamespace) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceQuotaStatusByNamespace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ResourceQuotaStatusByNamespace) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceQuotaStatusByNamespace.Merge(m, src) +} +func (m *ResourceQuotaStatusByNamespace) XXX_Size() int { + return m.Size() +} +func (m *ResourceQuotaStatusByNamespace) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceQuotaStatusByNamespace.DiscardUnknown(m) +} + +var xxx_messageInfo_ResourceQuotaStatusByNamespace proto.InternalMessageInfo + +func init() { + proto.RegisterType((*AppliedClusterResourceQuota)(nil), "github.com.openshift.api.quota.v1.AppliedClusterResourceQuota") + proto.RegisterType((*AppliedClusterResourceQuotaList)(nil), "github.com.openshift.api.quota.v1.AppliedClusterResourceQuotaList") + proto.RegisterType((*ClusterResourceQuota)(nil), "github.com.openshift.api.quota.v1.ClusterResourceQuota") + proto.RegisterType((*ClusterResourceQuotaList)(nil), "github.com.openshift.api.quota.v1.ClusterResourceQuotaList") + proto.RegisterType((*ClusterResourceQuotaSelector)(nil), "github.com.openshift.api.quota.v1.ClusterResourceQuotaSelector") + proto.RegisterMapType((map[string]string)(nil), "github.com.openshift.api.quota.v1.ClusterResourceQuotaSelector.AnnotationsEntry") + proto.RegisterType((*ClusterResourceQuotaSpec)(nil), "github.com.openshift.api.quota.v1.ClusterResourceQuotaSpec") + proto.RegisterType((*ClusterResourceQuotaStatus)(nil), "github.com.openshift.api.quota.v1.ClusterResourceQuotaStatus") + proto.RegisterType((*ResourceQuotaStatusByNamespace)(nil), "github.com.openshift.api.quota.v1.ResourceQuotaStatusByNamespace") +} + +func init() { + proto.RegisterFile("github.com/openshift/api/quota/v1/generated.proto", fileDescriptor_f605e5b8440aecb8) +} + +var fileDescriptor_f605e5b8440aecb8 = []byte{ + // 715 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x55, 0x41, 0x6f, 0xd3, 0x48, + 0x18, 0x8d, 0xdd, 0xa6, 0x6a, 0xa6, 0xdb, 0x55, 0x3b, 0xea, 0x21, 0xca, 0xae, 0x9c, 0xae, 0xa5, + 0x15, 0xbd, 0x30, 0x26, 0x05, 0x41, 0x05, 0xa2, 0xa8, 0x46, 0x1c, 0x40, 0x85, 0x82, 0xe1, 0x84, + 0x0a, 0x62, 0xe2, 0x4e, 0x13, 0x13, 0xdb, 0x63, 0x3c, 0xe3, 0x48, 0xb9, 0xf1, 0x0b, 0x10, 0xbf, + 0x81, 0x1f, 0xc2, 0x0d, 0xa9, 0x37, 0x7a, 0x01, 0xf5, 0x54, 0x11, 0xc3, 0x0f, 0x41, 0x33, 0x9e, + 0xd8, 0x69, 0x9b, 0xb4, 0xa1, 0x3d, 0x70, 0xe1, 0xe6, 0xf9, 0x32, 0xef, 0xbd, 0x79, 0xcf, 0x6f, + 0x1c, 0xd0, 0x68, 0x79, 0xbc, 0x9d, 0x34, 0x91, 0x4b, 0x03, 0x8b, 0x46, 0x24, 0x64, 0x6d, 0x6f, + 0x97, 0x5b, 0x38, 0xf2, 0xac, 0x37, 0x09, 0xe5, 0xd8, 0xea, 0x36, 0xac, 0x16, 0x09, 0x49, 0x8c, + 0x39, 0xd9, 0x41, 0x51, 0x4c, 0x39, 0x85, 0xff, 0x15, 0x10, 0x94, 0x43, 0x10, 0x8e, 0x3c, 0x24, + 0x21, 0xa8, 0xdb, 0xa8, 0x5d, 0x1e, 0x62, 0x6d, 0xd1, 0x16, 0xb5, 0x24, 0xb2, 0x99, 0xec, 0xca, + 0x95, 0x5c, 0xc8, 0xa7, 0x8c, 0xb1, 0x66, 0x76, 0xd6, 0x18, 0xf2, 0xa8, 0x94, 0x75, 0x69, 0x4c, + 0x46, 0xa8, 0xd6, 0xae, 0x15, 0x7b, 0x02, 0xec, 0xb6, 0xbd, 0x90, 0xc4, 0x3d, 0x2b, 0xea, 0xb4, + 0xc4, 0x80, 0x59, 0x01, 0x19, 0x79, 0xd6, 0xda, 0xf5, 0x71, 0xa8, 0x38, 0x09, 0xb9, 0x17, 0x10, + 0x8b, 0xb9, 0x6d, 0x12, 0xe0, 0xe3, 0x38, 0xf3, 0x93, 0x0e, 0xfe, 0xd9, 0x88, 0x22, 0xdf, 0x23, + 0x3b, 0x77, 0xfd, 0x84, 0x71, 0x12, 0x3b, 0x84, 0xd1, 0x24, 0x76, 0xc9, 0x13, 0xe1, 0x11, 0xbe, + 0x02, 0xb3, 0x42, 0x72, 0x07, 0x73, 0x5c, 0xd5, 0x96, 0xb5, 0x95, 0xb9, 0xd5, 0x2b, 0x28, 0x93, + 0x42, 0xc3, 0x52, 0x28, 0xea, 0xb4, 0xc4, 0x80, 0x21, 0xb1, 0x1b, 0x75, 0x1b, 0x68, 0xab, 0xf9, + 0x9a, 0xb8, 0xfc, 0x21, 0xe1, 0xd8, 0x86, 0x7b, 0x87, 0xf5, 0x52, 0x7a, 0x58, 0x07, 0xc5, 0xcc, + 0xc9, 0x59, 0xe1, 0x0b, 0x30, 0xcd, 0x22, 0xe2, 0x56, 0x75, 0xc9, 0x7e, 0x0b, 0x9d, 0x19, 0x3a, + 0x1a, 0x75, 0xd0, 0xa7, 0x11, 0x71, 0xed, 0xbf, 0x94, 0xd0, 0xb4, 0x58, 0x39, 0x92, 0x16, 0x12, + 0x30, 0xc3, 0x38, 0xe6, 0x09, 0xab, 0x4e, 0x49, 0x81, 0xdb, 0xe7, 0x15, 0x90, 0x24, 0xf6, 0xdf, + 0x4a, 0x62, 0x26, 0x5b, 0x3b, 0x8a, 0xdc, 0xfc, 0xa1, 0x81, 0xfa, 0x29, 0x39, 0x6e, 0x7a, 0x8c, + 0xc3, 0xed, 0x13, 0x59, 0xa2, 0xc9, 0xb2, 0x14, 0x68, 0x99, 0xe4, 0x82, 0x52, 0x9f, 0x1d, 0x4c, + 0x86, 0x72, 0x74, 0x41, 0xd9, 0xe3, 0x24, 0x60, 0x55, 0x7d, 0x79, 0x6a, 0x65, 0x6e, 0x75, 0x7d, + 0x02, 0x9f, 0xa7, 0x1c, 0xd8, 0x9e, 0x57, 0x52, 0xe5, 0xfb, 0x82, 0xd4, 0xc9, 0xb8, 0xcd, 0x8f, + 0x3a, 0x58, 0xfa, 0xd3, 0x93, 0x0b, 0xf4, 0xe4, 0xab, 0x06, 0xaa, 0xbf, 0xa9, 0x20, 0xdb, 0x47, + 0x0b, 0x72, 0xe3, 0x9c, 0x06, 0xc7, 0x34, 0xe3, 0xb3, 0x0e, 0xfe, 0x1d, 0x99, 0x07, 0xf1, 0x89, + 0xcb, 0x69, 0x0c, 0x5f, 0x82, 0x19, 0x1f, 0x37, 0x89, 0xcf, 0x94, 0xb5, 0xab, 0x13, 0x5a, 0x13, + 0x98, 0x01, 0x89, 0xbd, 0x98, 0x1e, 0xd6, 0xe7, 0x8f, 0x8c, 0x1c, 0xc5, 0x0a, 0xdf, 0x69, 0x60, + 0x0e, 0x87, 0x21, 0xe5, 0x98, 0x7b, 0x34, 0x1c, 0xb8, 0x7c, 0x7c, 0xde, 0xd7, 0xa8, 0xe8, 0xd1, + 0x46, 0x41, 0x79, 0x2f, 0xe4, 0x71, 0xcf, 0xae, 0x29, 0xfb, 0xb0, 0xf8, 0x25, 0x3f, 0xcb, 0xf0, + 0x01, 0x6a, 0xeb, 0x60, 0xe1, 0x38, 0x18, 0x2e, 0x80, 0xa9, 0x0e, 0xe9, 0xc9, 0x04, 0x2a, 0x8e, + 0x78, 0x84, 0x4b, 0xa0, 0xdc, 0xc5, 0x7e, 0x42, 0x64, 0xaf, 0x2b, 0x4e, 0xb6, 0xb8, 0xa9, 0xaf, + 0x69, 0xe6, 0x97, 0x31, 0x55, 0x11, 0xa5, 0x85, 0x01, 0x98, 0x65, 0x4a, 0x55, 0xe5, 0x79, 0xe7, + 0x82, 0x4e, 0x8b, 0xee, 0xe4, 0x76, 0x72, 0x09, 0xf8, 0x00, 0x94, 0x25, 0x89, 0xba, 0x7d, 0xff, + 0x0f, 0xbd, 0x3b, 0x24, 0xfe, 0xc8, 0x04, 0xf9, 0xc9, 0x7b, 0x96, 0x37, 0x45, 0x8e, 0x9c, 0x8c, + 0xc2, 0xec, 0x6b, 0xa0, 0x36, 0xfe, 0xe6, 0xc0, 0x4d, 0x50, 0xe6, 0x94, 0x63, 0x5f, 0xd9, 0xba, + 0x74, 0xb6, 0x54, 0x76, 0xe3, 0x72, 0xb1, 0x67, 0x02, 0xed, 0x64, 0x24, 0x30, 0x01, 0x20, 0xc4, + 0x01, 0x61, 0x11, 0x76, 0xc9, 0xa0, 0x13, 0x1b, 0x13, 0x24, 0x35, 0x4a, 0xa1, 0xf7, 0x68, 0xc0, + 0x54, 0x7c, 0xaa, 0xf2, 0x11, 0x73, 0x86, 0x84, 0xcc, 0x0f, 0x1a, 0x30, 0x4e, 0xa7, 0x80, 0x16, + 0xa8, 0xe4, 0x80, 0xac, 0x10, 0xf6, 0xa2, 0x62, 0xad, 0xe4, 0xbb, 0x9c, 0x62, 0x0f, 0xdc, 0xca, + 0xbf, 0x50, 0xfa, 0xaf, 0x25, 0x33, 0xe6, 0x5b, 0x64, 0xaf, 0xec, 0xf5, 0x8d, 0xd2, 0x7e, 0xdf, + 0x28, 0x1d, 0xf4, 0x8d, 0xd2, 0xdb, 0xd4, 0xd0, 0xf6, 0x52, 0x43, 0xdb, 0x4f, 0x0d, 0xed, 0x20, + 0x35, 0xb4, 0x6f, 0xa9, 0xa1, 0xbd, 0xff, 0x6e, 0x94, 0x9e, 0xeb, 0xdd, 0xc6, 0xcf, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xa7, 0x76, 0xc9, 0x6f, 0x3d, 0x09, 0x00, 0x00, +} + +func (m *AppliedClusterResourceQuota) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AppliedClusterResourceQuota) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AppliedClusterResourceQuota) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *AppliedClusterResourceQuotaList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AppliedClusterResourceQuotaList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AppliedClusterResourceQuotaList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ClusterResourceQuota) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterResourceQuota) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterResourceQuota) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ClusterResourceQuotaList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterResourceQuotaList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterResourceQuotaList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ClusterResourceQuotaSelector) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterResourceQuotaSelector) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterResourceQuotaSelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.AnnotationSelector) > 0 { + keysForAnnotationSelector := make([]string, 0, len(m.AnnotationSelector)) + for k := range m.AnnotationSelector { + keysForAnnotationSelector = append(keysForAnnotationSelector, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotationSelector) + for iNdEx := len(keysForAnnotationSelector) - 1; iNdEx >= 0; iNdEx-- { + v := m.AnnotationSelector[string(keysForAnnotationSelector[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForAnnotationSelector[iNdEx]) + copy(dAtA[i:], keysForAnnotationSelector[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForAnnotationSelector[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } + if m.LabelSelector != nil { + { + size, err := m.LabelSelector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ClusterResourceQuotaSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterResourceQuotaSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterResourceQuotaSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Quota.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ClusterResourceQuotaStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClusterResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClusterResourceQuotaStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Namespaces) > 0 { + for iNdEx := len(m.Namespaces) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Namespaces[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.Total.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ResourceQuotaStatusByNamespace) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ResourceQuotaStatusByNamespace) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceQuotaStatusByNamespace) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *AppliedClusterResourceQuota) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *AppliedClusterResourceQuotaList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ClusterResourceQuota) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ClusterResourceQuotaList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ClusterResourceQuotaSelector) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.LabelSelector != nil { + l = m.LabelSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.AnnotationSelector) > 0 { + for k, v := range m.AnnotationSelector { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *ClusterResourceQuotaSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Quota.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ClusterResourceQuotaStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Total.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Namespaces) > 0 { + for _, e := range m.Namespaces { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ResourceQuotaStatusByNamespace) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *AppliedClusterResourceQuota) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AppliedClusterResourceQuota{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ClusterResourceQuotaSpec", "ClusterResourceQuotaSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ClusterResourceQuotaStatus", "ClusterResourceQuotaStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *AppliedClusterResourceQuotaList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]AppliedClusterResourceQuota{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "AppliedClusterResourceQuota", "AppliedClusterResourceQuota", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&AppliedClusterResourceQuotaList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ClusterResourceQuota) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterResourceQuota{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ClusterResourceQuotaSpec", "ClusterResourceQuotaSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ClusterResourceQuotaStatus", "ClusterResourceQuotaStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterResourceQuotaList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]ClusterResourceQuota{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "ClusterResourceQuota", "ClusterResourceQuota", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&ClusterResourceQuotaList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ClusterResourceQuotaSelector) String() string { + if this == nil { + return "nil" + } + keysForAnnotationSelector := make([]string, 0, len(this.AnnotationSelector)) + for k := range this.AnnotationSelector { + keysForAnnotationSelector = append(keysForAnnotationSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotationSelector) + mapStringForAnnotationSelector := "map[string]string{" + for _, k := range keysForAnnotationSelector { + mapStringForAnnotationSelector += fmt.Sprintf("%v: %v,", k, this.AnnotationSelector[k]) + } + mapStringForAnnotationSelector += "}" + s := strings.Join([]string{`&ClusterResourceQuotaSelector{`, + `LabelSelector:` + strings.Replace(fmt.Sprintf("%v", this.LabelSelector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `AnnotationSelector:` + mapStringForAnnotationSelector + `,`, + `}`, + }, "") + return s +} +func (this *ClusterResourceQuotaSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterResourceQuotaSpec{`, + `Selector:` + strings.Replace(strings.Replace(this.Selector.String(), "ClusterResourceQuotaSelector", "ClusterResourceQuotaSelector", 1), `&`, ``, 1) + `,`, + `Quota:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Quota), "ResourceQuotaSpec", "v11.ResourceQuotaSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterResourceQuotaStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForNamespaces := "[]ResourceQuotaStatusByNamespace{" + for _, f := range this.Namespaces { + repeatedStringForNamespaces += strings.Replace(strings.Replace(f.String(), "ResourceQuotaStatusByNamespace", "ResourceQuotaStatusByNamespace", 1), `&`, ``, 1) + "," + } + repeatedStringForNamespaces += "}" + s := strings.Join([]string{`&ClusterResourceQuotaStatus{`, + `Total:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Total), "ResourceQuotaStatus", "v11.ResourceQuotaStatus", 1), `&`, ``, 1) + `,`, + `Namespaces:` + repeatedStringForNamespaces + `,`, + `}`, + }, "") + return s +} +func (this *ResourceQuotaStatusByNamespace) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceQuotaStatusByNamespace{`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Status:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Status), "ResourceQuotaStatus", "v11.ResourceQuotaStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *AppliedClusterResourceQuota) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AppliedClusterResourceQuota: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AppliedClusterResourceQuota: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AppliedClusterResourceQuotaList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AppliedClusterResourceQuotaList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AppliedClusterResourceQuotaList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, AppliedClusterResourceQuota{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterResourceQuota) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterResourceQuota: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterResourceQuota: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterResourceQuotaList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterResourceQuotaList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterResourceQuotaList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ClusterResourceQuota{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterResourceQuotaSelector) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterResourceQuotaSelector: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterResourceQuotaSelector: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LabelSelector == nil { + m.LabelSelector = &v1.LabelSelector{} + } + if err := m.LabelSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AnnotationSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AnnotationSelector == nil { + m.AnnotationSelector = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.AnnotationSelector[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterResourceQuotaSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterResourceQuotaSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterResourceQuotaSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Quota", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Quota.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClusterResourceQuotaStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClusterResourceQuotaStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClusterResourceQuotaStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Total", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Total.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespaces", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespaces = append(m.Namespaces, ResourceQuotaStatusByNamespace{}) + if err := m.Namespaces[len(m.Namespaces)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceQuotaStatusByNamespace) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceQuotaStatusByNamespace: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceQuotaStatusByNamespace: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vendor/github.com/openshift/api/quota/v1/generated.proto b/vendor/github.com/openshift/api/quota/v1/generated.proto new file mode 100644 index 0000000000000..ba3fe4659d146 --- /dev/null +++ b/vendor/github.com/openshift/api/quota/v1/generated.proto @@ -0,0 +1,104 @@ + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package github.com.openshift.api.quota.v1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// AppliedClusterResourceQuota mirrors ClusterResourceQuota at a project scope, for projection +// into a project. It allows a project-admin to know which ClusterResourceQuotas are applied to +// his project and their associated usage. +message AppliedClusterResourceQuota { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Spec defines the desired quota + optional ClusterResourceQuotaSpec spec = 2; + + // Status defines the actual enforced quota and its current usage + optional ClusterResourceQuotaStatus status = 3; +} + +// AppliedClusterResourceQuotaList is a collection of AppliedClusterResourceQuotas +message AppliedClusterResourceQuotaList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of AppliedClusterResourceQuota + repeated AppliedClusterResourceQuota items = 2; +} + +// ClusterResourceQuota mirrors ResourceQuota at a cluster scope. This object is easily convertible to +// synthetic ResourceQuota object to allow quota evaluation re-use. +message ClusterResourceQuota { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Spec defines the desired quota + optional ClusterResourceQuotaSpec spec = 2; + + // Status defines the actual enforced quota and its current usage + optional ClusterResourceQuotaStatus status = 3; +} + +// ClusterResourceQuotaList is a collection of ClusterResourceQuotas +message ClusterResourceQuotaList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of ClusterResourceQuotas + repeated ClusterResourceQuota items = 2; +} + +// ClusterResourceQuotaSelector is used to select projects. At least one of LabelSelector or AnnotationSelector +// must present. If only one is present, it is the only selection criteria. If both are specified, +// the project must match both restrictions. +message ClusterResourceQuotaSelector { + // LabelSelector is used to select projects by label. + // +optional + // +nullable + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector labels = 1; + + // AnnotationSelector is used to select projects by annotation. + // +optional + // +nullable + map annotations = 2; +} + +// ClusterResourceQuotaSpec defines the desired quota restrictions +message ClusterResourceQuotaSpec { + // Selector is the selector used to match projects. + // It should only select active projects on the scale of dozens (though it can select + // many more less active projects). These projects will contend on object creation through + // this resource. + optional ClusterResourceQuotaSelector selector = 1; + + // Quota defines the desired quota + optional k8s.io.api.core.v1.ResourceQuotaSpec quota = 2; +} + +// ClusterResourceQuotaStatus defines the actual enforced quota and its current usage +message ClusterResourceQuotaStatus { + // Total defines the actual enforced quota and its current usage across all projects + optional k8s.io.api.core.v1.ResourceQuotaStatus total = 1; + + // Namespaces slices the usage by project. This division allows for quick resolution of + // deletion reconciliation inside of a single project without requiring a recalculation + // across all projects. This can be used to pull the deltas for a given project. + // +optional + // +nullable + repeated ResourceQuotaStatusByNamespace namespaces = 2; +} + +// ResourceQuotaStatusByNamespace gives status for a particular project +message ResourceQuotaStatusByNamespace { + // Namespace the project this status applies to + optional string namespace = 1; + + // Status indicates how many resources have been consumed by this project + optional k8s.io.api.core.v1.ResourceQuotaStatus status = 2; +} + diff --git a/vendor/github.com/openshift/api/quota/v1/legacy.go b/vendor/github.com/openshift/api/quota/v1/legacy.go new file mode 100644 index 0000000000000..402690b5d60c5 --- /dev/null +++ b/vendor/github.com/openshift/api/quota/v1/legacy.go @@ -0,0 +1,24 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + legacyGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} + legacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes, corev1.AddToScheme) + DeprecatedInstallWithoutGroup = legacySchemeBuilder.AddToScheme +) + +func addLegacyKnownTypes(scheme *runtime.Scheme) error { + types := []runtime.Object{ + &ClusterResourceQuota{}, + &ClusterResourceQuotaList{}, + &AppliedClusterResourceQuota{}, + &AppliedClusterResourceQuotaList{}, + } + scheme.AddKnownTypes(legacyGroupVersion, types...) + return nil +} diff --git a/vendor/github.com/openshift/api/quota/v1/register.go b/vendor/github.com/openshift/api/quota/v1/register.go new file mode 100644 index 0000000000000..47c774ef23ec0 --- /dev/null +++ b/vendor/github.com/openshift/api/quota/v1/register.go @@ -0,0 +1,41 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "quota.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, corev1.AddToScheme) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &ClusterResourceQuota{}, + &ClusterResourceQuotaList{}, + &AppliedClusterResourceQuota{}, + &AppliedClusterResourceQuotaList{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/quota/v1/types.go b/vendor/github.com/openshift/api/quota/v1/types.go new file mode 100644 index 0000000000000..1bac842c7b55c --- /dev/null +++ b/vendor/github.com/openshift/api/quota/v1/types.go @@ -0,0 +1,115 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterResourceQuota mirrors ResourceQuota at a cluster scope. This object is easily convertible to +// synthetic ResourceQuota object to allow quota evaluation re-use. +type ClusterResourceQuota struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines the desired quota + Spec ClusterResourceQuotaSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` + + // Status defines the actual enforced quota and its current usage + Status ClusterResourceQuotaStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// ClusterResourceQuotaSpec defines the desired quota restrictions +type ClusterResourceQuotaSpec struct { + // Selector is the selector used to match projects. + // It should only select active projects on the scale of dozens (though it can select + // many more less active projects). These projects will contend on object creation through + // this resource. + Selector ClusterResourceQuotaSelector `json:"selector" protobuf:"bytes,1,opt,name=selector"` + + // Quota defines the desired quota + Quota corev1.ResourceQuotaSpec `json:"quota" protobuf:"bytes,2,opt,name=quota"` +} + +// ClusterResourceQuotaSelector is used to select projects. At least one of LabelSelector or AnnotationSelector +// must present. If only one is present, it is the only selection criteria. If both are specified, +// the project must match both restrictions. +type ClusterResourceQuotaSelector struct { + // LabelSelector is used to select projects by label. + // +optional + // +nullable + LabelSelector *metav1.LabelSelector `json:"labels" protobuf:"bytes,1,opt,name=labels"` + + // AnnotationSelector is used to select projects by annotation. + // +optional + // +nullable + AnnotationSelector map[string]string `json:"annotations" protobuf:"bytes,2,rep,name=annotations"` +} + +// ClusterResourceQuotaStatus defines the actual enforced quota and its current usage +type ClusterResourceQuotaStatus struct { + // Total defines the actual enforced quota and its current usage across all projects + Total corev1.ResourceQuotaStatus `json:"total" protobuf:"bytes,1,opt,name=total"` + + // Namespaces slices the usage by project. This division allows for quick resolution of + // deletion reconciliation inside of a single project without requiring a recalculation + // across all projects. This can be used to pull the deltas for a given project. + // +optional + // +nullable + Namespaces ResourceQuotasStatusByNamespace `json:"namespaces" protobuf:"bytes,2,rep,name=namespaces"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ClusterResourceQuotaList is a collection of ClusterResourceQuotas +type ClusterResourceQuotaList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of ClusterResourceQuotas + Items []ClusterResourceQuota `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// ResourceQuotasStatusByNamespace bundles multiple ResourceQuotaStatusByNamespace +type ResourceQuotasStatusByNamespace []ResourceQuotaStatusByNamespace + +// ResourceQuotaStatusByNamespace gives status for a particular project +type ResourceQuotaStatusByNamespace struct { + // Namespace the project this status applies to + Namespace string `json:"namespace" protobuf:"bytes,1,opt,name=namespace"` + + // Status indicates how many resources have been consumed by this project + Status corev1.ResourceQuotaStatus `json:"status" protobuf:"bytes,2,opt,name=status"` +} + +// +genclient +// +genclient:onlyVerbs=get,list +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// AppliedClusterResourceQuota mirrors ClusterResourceQuota at a project scope, for projection +// into a project. It allows a project-admin to know which ClusterResourceQuotas are applied to +// his project and their associated usage. +type AppliedClusterResourceQuota struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines the desired quota + Spec ClusterResourceQuotaSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` + + // Status defines the actual enforced quota and its current usage + Status ClusterResourceQuotaStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// AppliedClusterResourceQuotaList is a collection of AppliedClusterResourceQuotas +type AppliedClusterResourceQuotaList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of AppliedClusterResourceQuota + Items []AppliedClusterResourceQuota `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/github.com/openshift/api/quota/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/quota/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..2a3530948985f --- /dev/null +++ b/vendor/github.com/openshift/api/quota/v1/zz_generated.deepcopy.go @@ -0,0 +1,241 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppliedClusterResourceQuota) DeepCopyInto(out *AppliedClusterResourceQuota) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppliedClusterResourceQuota. +func (in *AppliedClusterResourceQuota) DeepCopy() *AppliedClusterResourceQuota { + if in == nil { + return nil + } + out := new(AppliedClusterResourceQuota) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AppliedClusterResourceQuota) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppliedClusterResourceQuotaList) DeepCopyInto(out *AppliedClusterResourceQuotaList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]AppliedClusterResourceQuota, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppliedClusterResourceQuotaList. +func (in *AppliedClusterResourceQuotaList) DeepCopy() *AppliedClusterResourceQuotaList { + if in == nil { + return nil + } + out := new(AppliedClusterResourceQuotaList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AppliedClusterResourceQuotaList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterResourceQuota) DeepCopyInto(out *ClusterResourceQuota) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterResourceQuota. +func (in *ClusterResourceQuota) DeepCopy() *ClusterResourceQuota { + if in == nil { + return nil + } + out := new(ClusterResourceQuota) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterResourceQuota) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterResourceQuotaList) DeepCopyInto(out *ClusterResourceQuotaList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterResourceQuota, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterResourceQuotaList. +func (in *ClusterResourceQuotaList) DeepCopy() *ClusterResourceQuotaList { + if in == nil { + return nil + } + out := new(ClusterResourceQuotaList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterResourceQuotaList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterResourceQuotaSelector) DeepCopyInto(out *ClusterResourceQuotaSelector) { + *out = *in + if in.LabelSelector != nil { + in, out := &in.LabelSelector, &out.LabelSelector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.AnnotationSelector != nil { + in, out := &in.AnnotationSelector, &out.AnnotationSelector + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterResourceQuotaSelector. +func (in *ClusterResourceQuotaSelector) DeepCopy() *ClusterResourceQuotaSelector { + if in == nil { + return nil + } + out := new(ClusterResourceQuotaSelector) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterResourceQuotaSpec) DeepCopyInto(out *ClusterResourceQuotaSpec) { + *out = *in + in.Selector.DeepCopyInto(&out.Selector) + in.Quota.DeepCopyInto(&out.Quota) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterResourceQuotaSpec. +func (in *ClusterResourceQuotaSpec) DeepCopy() *ClusterResourceQuotaSpec { + if in == nil { + return nil + } + out := new(ClusterResourceQuotaSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterResourceQuotaStatus) DeepCopyInto(out *ClusterResourceQuotaStatus) { + *out = *in + in.Total.DeepCopyInto(&out.Total) + if in.Namespaces != nil { + in, out := &in.Namespaces, &out.Namespaces + *out = make(ResourceQuotasStatusByNamespace, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterResourceQuotaStatus. +func (in *ClusterResourceQuotaStatus) DeepCopy() *ClusterResourceQuotaStatus { + if in == nil { + return nil + } + out := new(ClusterResourceQuotaStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceQuotaStatusByNamespace) DeepCopyInto(out *ResourceQuotaStatusByNamespace) { + *out = *in + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceQuotaStatusByNamespace. +func (in *ResourceQuotaStatusByNamespace) DeepCopy() *ResourceQuotaStatusByNamespace { + if in == nil { + return nil + } + out := new(ResourceQuotaStatusByNamespace) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in ResourceQuotasStatusByNamespace) DeepCopyInto(out *ResourceQuotasStatusByNamespace) { + { + in := &in + *out = make(ResourceQuotasStatusByNamespace, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceQuotasStatusByNamespace. +func (in ResourceQuotasStatusByNamespace) DeepCopy() ResourceQuotasStatusByNamespace { + if in == nil { + return nil + } + out := new(ResourceQuotasStatusByNamespace) + in.DeepCopyInto(out) + return *out +} diff --git a/vendor/github.com/openshift/api/quota/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/quota/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000000..71c0d6d56f869 --- /dev/null +++ b/vendor/github.com/openshift/api/quota/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,92 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_AppliedClusterResourceQuota = map[string]string{ + "": "AppliedClusterResourceQuota mirrors ClusterResourceQuota at a project scope, for projection into a project. It allows a project-admin to know which ClusterResourceQuotas are applied to his project and their associated usage.", + "spec": "Spec defines the desired quota", + "status": "Status defines the actual enforced quota and its current usage", +} + +func (AppliedClusterResourceQuota) SwaggerDoc() map[string]string { + return map_AppliedClusterResourceQuota +} + +var map_AppliedClusterResourceQuotaList = map[string]string{ + "": "AppliedClusterResourceQuotaList is a collection of AppliedClusterResourceQuotas", + "items": "Items is a list of AppliedClusterResourceQuota", +} + +func (AppliedClusterResourceQuotaList) SwaggerDoc() map[string]string { + return map_AppliedClusterResourceQuotaList +} + +var map_ClusterResourceQuota = map[string]string{ + "": "ClusterResourceQuota mirrors ResourceQuota at a cluster scope. This object is easily convertible to synthetic ResourceQuota object to allow quota evaluation re-use.", + "spec": "Spec defines the desired quota", + "status": "Status defines the actual enforced quota and its current usage", +} + +func (ClusterResourceQuota) SwaggerDoc() map[string]string { + return map_ClusterResourceQuota +} + +var map_ClusterResourceQuotaList = map[string]string{ + "": "ClusterResourceQuotaList is a collection of ClusterResourceQuotas", + "items": "Items is a list of ClusterResourceQuotas", +} + +func (ClusterResourceQuotaList) SwaggerDoc() map[string]string { + return map_ClusterResourceQuotaList +} + +var map_ClusterResourceQuotaSelector = map[string]string{ + "": "ClusterResourceQuotaSelector is used to select projects. At least one of LabelSelector or AnnotationSelector must present. If only one is present, it is the only selection criteria. If both are specified, the project must match both restrictions.", + "labels": "LabelSelector is used to select projects by label.", + "annotations": "AnnotationSelector is used to select projects by annotation.", +} + +func (ClusterResourceQuotaSelector) SwaggerDoc() map[string]string { + return map_ClusterResourceQuotaSelector +} + +var map_ClusterResourceQuotaSpec = map[string]string{ + "": "ClusterResourceQuotaSpec defines the desired quota restrictions", + "selector": "Selector is the selector used to match projects. It should only select active projects on the scale of dozens (though it can select many more less active projects). These projects will contend on object creation through this resource.", + "quota": "Quota defines the desired quota", +} + +func (ClusterResourceQuotaSpec) SwaggerDoc() map[string]string { + return map_ClusterResourceQuotaSpec +} + +var map_ClusterResourceQuotaStatus = map[string]string{ + "": "ClusterResourceQuotaStatus defines the actual enforced quota and its current usage", + "total": "Total defines the actual enforced quota and its current usage across all projects", + "namespaces": "Namespaces slices the usage by project. This division allows for quick resolution of deletion reconciliation inside of a single project without requiring a recalculation across all projects. This can be used to pull the deltas for a given project.", +} + +func (ClusterResourceQuotaStatus) SwaggerDoc() map[string]string { + return map_ClusterResourceQuotaStatus +} + +var map_ResourceQuotaStatusByNamespace = map[string]string{ + "": "ResourceQuotaStatusByNamespace gives status for a particular project", + "namespace": "Namespace the project this status applies to", + "status": "Status indicates how many resources have been consumed by this project", +} + +func (ResourceQuotaStatusByNamespace) SwaggerDoc() map[string]string { + return map_ResourceQuotaStatusByNamespace +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/route/v1/doc.go b/vendor/github.com/openshift/api/route/v1/doc.go new file mode 100644 index 0000000000000..e56fbbd8d1fe3 --- /dev/null +++ b/vendor/github.com/openshift/api/route/v1/doc.go @@ -0,0 +1,8 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=github.com/openshift/origin/pkg/route/apis/route +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +groupName=route.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/route/v1/generated.pb.go b/vendor/github.com/openshift/api/route/v1/generated.pb.go new file mode 100644 index 0000000000000..977fa2618d562 --- /dev/null +++ b/vendor/github.com/openshift/api/route/v1/generated.pb.go @@ -0,0 +1,3039 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: github.com/openshift/api/route/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *Route) Reset() { *m = Route{} } +func (*Route) ProtoMessage() {} +func (*Route) Descriptor() ([]byte, []int) { + return fileDescriptor_373b8fa7ff738721, []int{0} +} +func (m *Route) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Route) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Route) XXX_Merge(src proto.Message) { + xxx_messageInfo_Route.Merge(m, src) +} +func (m *Route) XXX_Size() int { + return m.Size() +} +func (m *Route) XXX_DiscardUnknown() { + xxx_messageInfo_Route.DiscardUnknown(m) +} + +var xxx_messageInfo_Route proto.InternalMessageInfo + +func (m *RouteIngress) Reset() { *m = RouteIngress{} } +func (*RouteIngress) ProtoMessage() {} +func (*RouteIngress) Descriptor() ([]byte, []int) { + return fileDescriptor_373b8fa7ff738721, []int{1} +} +func (m *RouteIngress) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RouteIngress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RouteIngress) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteIngress.Merge(m, src) +} +func (m *RouteIngress) XXX_Size() int { + return m.Size() +} +func (m *RouteIngress) XXX_DiscardUnknown() { + xxx_messageInfo_RouteIngress.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteIngress proto.InternalMessageInfo + +func (m *RouteIngressCondition) Reset() { *m = RouteIngressCondition{} } +func (*RouteIngressCondition) ProtoMessage() {} +func (*RouteIngressCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_373b8fa7ff738721, []int{2} +} +func (m *RouteIngressCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RouteIngressCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RouteIngressCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteIngressCondition.Merge(m, src) +} +func (m *RouteIngressCondition) XXX_Size() int { + return m.Size() +} +func (m *RouteIngressCondition) XXX_DiscardUnknown() { + xxx_messageInfo_RouteIngressCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteIngressCondition proto.InternalMessageInfo + +func (m *RouteList) Reset() { *m = RouteList{} } +func (*RouteList) ProtoMessage() {} +func (*RouteList) Descriptor() ([]byte, []int) { + return fileDescriptor_373b8fa7ff738721, []int{3} +} +func (m *RouteList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RouteList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RouteList) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteList.Merge(m, src) +} +func (m *RouteList) XXX_Size() int { + return m.Size() +} +func (m *RouteList) XXX_DiscardUnknown() { + xxx_messageInfo_RouteList.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteList proto.InternalMessageInfo + +func (m *RoutePort) Reset() { *m = RoutePort{} } +func (*RoutePort) ProtoMessage() {} +func (*RoutePort) Descriptor() ([]byte, []int) { + return fileDescriptor_373b8fa7ff738721, []int{4} +} +func (m *RoutePort) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RoutePort) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RoutePort) XXX_Merge(src proto.Message) { + xxx_messageInfo_RoutePort.Merge(m, src) +} +func (m *RoutePort) XXX_Size() int { + return m.Size() +} +func (m *RoutePort) XXX_DiscardUnknown() { + xxx_messageInfo_RoutePort.DiscardUnknown(m) +} + +var xxx_messageInfo_RoutePort proto.InternalMessageInfo + +func (m *RouteSpec) Reset() { *m = RouteSpec{} } +func (*RouteSpec) ProtoMessage() {} +func (*RouteSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_373b8fa7ff738721, []int{5} +} +func (m *RouteSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RouteSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RouteSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteSpec.Merge(m, src) +} +func (m *RouteSpec) XXX_Size() int { + return m.Size() +} +func (m *RouteSpec) XXX_DiscardUnknown() { + xxx_messageInfo_RouteSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteSpec proto.InternalMessageInfo + +func (m *RouteStatus) Reset() { *m = RouteStatus{} } +func (*RouteStatus) ProtoMessage() {} +func (*RouteStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_373b8fa7ff738721, []int{6} +} +func (m *RouteStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RouteStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RouteStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteStatus.Merge(m, src) +} +func (m *RouteStatus) XXX_Size() int { + return m.Size() +} +func (m *RouteStatus) XXX_DiscardUnknown() { + xxx_messageInfo_RouteStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteStatus proto.InternalMessageInfo + +func (m *RouteTargetReference) Reset() { *m = RouteTargetReference{} } +func (*RouteTargetReference) ProtoMessage() {} +func (*RouteTargetReference) Descriptor() ([]byte, []int) { + return fileDescriptor_373b8fa7ff738721, []int{7} +} +func (m *RouteTargetReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RouteTargetReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RouteTargetReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouteTargetReference.Merge(m, src) +} +func (m *RouteTargetReference) XXX_Size() int { + return m.Size() +} +func (m *RouteTargetReference) XXX_DiscardUnknown() { + xxx_messageInfo_RouteTargetReference.DiscardUnknown(m) +} + +var xxx_messageInfo_RouteTargetReference proto.InternalMessageInfo + +func (m *RouterShard) Reset() { *m = RouterShard{} } +func (*RouterShard) ProtoMessage() {} +func (*RouterShard) Descriptor() ([]byte, []int) { + return fileDescriptor_373b8fa7ff738721, []int{8} +} +func (m *RouterShard) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RouterShard) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RouterShard) XXX_Merge(src proto.Message) { + xxx_messageInfo_RouterShard.Merge(m, src) +} +func (m *RouterShard) XXX_Size() int { + return m.Size() +} +func (m *RouterShard) XXX_DiscardUnknown() { + xxx_messageInfo_RouterShard.DiscardUnknown(m) +} + +var xxx_messageInfo_RouterShard proto.InternalMessageInfo + +func (m *TLSConfig) Reset() { *m = TLSConfig{} } +func (*TLSConfig) ProtoMessage() {} +func (*TLSConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_373b8fa7ff738721, []int{9} +} +func (m *TLSConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TLSConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TLSConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_TLSConfig.Merge(m, src) +} +func (m *TLSConfig) XXX_Size() int { + return m.Size() +} +func (m *TLSConfig) XXX_DiscardUnknown() { + xxx_messageInfo_TLSConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_TLSConfig proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Route)(nil), "github.com.openshift.api.route.v1.Route") + proto.RegisterType((*RouteIngress)(nil), "github.com.openshift.api.route.v1.RouteIngress") + proto.RegisterType((*RouteIngressCondition)(nil), "github.com.openshift.api.route.v1.RouteIngressCondition") + proto.RegisterType((*RouteList)(nil), "github.com.openshift.api.route.v1.RouteList") + proto.RegisterType((*RoutePort)(nil), "github.com.openshift.api.route.v1.RoutePort") + proto.RegisterType((*RouteSpec)(nil), "github.com.openshift.api.route.v1.RouteSpec") + proto.RegisterType((*RouteStatus)(nil), "github.com.openshift.api.route.v1.RouteStatus") + proto.RegisterType((*RouteTargetReference)(nil), "github.com.openshift.api.route.v1.RouteTargetReference") + proto.RegisterType((*RouterShard)(nil), "github.com.openshift.api.route.v1.RouterShard") + proto.RegisterType((*TLSConfig)(nil), "github.com.openshift.api.route.v1.TLSConfig") +} + +func init() { + proto.RegisterFile("github.com/openshift/api/route/v1/generated.proto", fileDescriptor_373b8fa7ff738721) +} + +var fileDescriptor_373b8fa7ff738721 = []byte{ + // 1163 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0xcf, 0xfa, 0x5f, 0xe2, 0x71, 0x1b, 0xc8, 0x40, 0xa9, 0x1b, 0x29, 0x76, 0xba, 0x07, 0x94, + 0xa2, 0xb2, 0x4b, 0x42, 0x81, 0x4a, 0x88, 0x43, 0x9d, 0x22, 0x48, 0xe3, 0xa4, 0xd1, 0xd8, 0xa2, + 0xa2, 0xea, 0x81, 0xc9, 0xee, 0x78, 0x3d, 0xd8, 0x9e, 0x5d, 0x66, 0xc6, 0x29, 0xbe, 0xa0, 0x4a, + 0x7c, 0x81, 0xf2, 0x6d, 0xb8, 0x73, 0xc9, 0xb1, 0xc7, 0x1e, 0x90, 0x45, 0xcc, 0x91, 0x6f, 0x90, + 0x13, 0x9a, 0xd9, 0xb1, 0x77, 0xed, 0x38, 0xa9, 0x0b, 0xb7, 0xdd, 0xf7, 0x7e, 0xbf, 0xdf, 0x7b, + 0xf3, 0xde, 0x9b, 0x37, 0x60, 0x3b, 0xa0, 0xb2, 0xdd, 0x3f, 0x76, 0xbc, 0xb0, 0xe7, 0x86, 0x11, + 0x61, 0xa2, 0x4d, 0x5b, 0xd2, 0xc5, 0x11, 0x75, 0x79, 0xd8, 0x97, 0xc4, 0x3d, 0xd9, 0x76, 0x03, + 0xc2, 0x08, 0xc7, 0x92, 0xf8, 0x4e, 0xc4, 0x43, 0x19, 0xc2, 0xdb, 0x09, 0xc5, 0x99, 0x50, 0x1c, + 0x1c, 0x51, 0x47, 0x53, 0x9c, 0x93, 0xed, 0xf5, 0x8f, 0x53, 0xaa, 0x41, 0x18, 0x84, 0xae, 0x66, + 0x1e, 0xf7, 0x5b, 0xfa, 0x4f, 0xff, 0xe8, 0xaf, 0x58, 0x71, 0xdd, 0xee, 0xdc, 0x17, 0x0e, 0x0d, + 0x75, 0x58, 0x2f, 0xe4, 0xf3, 0xa2, 0xae, 0xdf, 0x4b, 0x30, 0x3d, 0xec, 0xb5, 0x29, 0x23, 0x7c, + 0xe0, 0x46, 0x9d, 0x40, 0x19, 0x84, 0xdb, 0x23, 0x12, 0xcf, 0x63, 0x7d, 0x7e, 0x19, 0x8b, 0xf7, + 0x99, 0xa4, 0x3d, 0xe2, 0x0a, 0xaf, 0x4d, 0x7a, 0xf8, 0x02, 0xef, 0xd3, 0xcb, 0x78, 0x7d, 0x49, + 0xbb, 0x2e, 0x65, 0x52, 0x48, 0x3e, 0x4b, 0xb2, 0x7f, 0xcb, 0x80, 0x3c, 0x52, 0x25, 0x80, 0x3f, + 0x80, 0x15, 0x95, 0x91, 0x8f, 0x25, 0x2e, 0x5b, 0x9b, 0xd6, 0x56, 0x69, 0xe7, 0x13, 0x27, 0x56, + 0x74, 0xd2, 0x8a, 0x4e, 0xd4, 0x09, 0x94, 0x41, 0x38, 0x0a, 0xed, 0x9c, 0x6c, 0x3b, 0x8f, 0x8f, + 0x7f, 0x24, 0x9e, 0x3c, 0x20, 0x12, 0xd7, 0xe0, 0xe9, 0xb0, 0xba, 0x34, 0x1a, 0x56, 0x41, 0x62, + 0x43, 0x13, 0x55, 0x78, 0x08, 0x72, 0x22, 0x22, 0x5e, 0x39, 0xa3, 0xd5, 0xef, 0x3a, 0x6f, 0xec, + 0x89, 0xa3, 0x33, 0x6b, 0x44, 0xc4, 0xab, 0x5d, 0x33, 0xca, 0x39, 0xf5, 0x87, 0xb4, 0x0e, 0xfc, + 0x0e, 0x14, 0x84, 0xc4, 0xb2, 0x2f, 0xca, 0x59, 0xad, 0xe8, 0x2c, 0xac, 0xa8, 0x59, 0xb5, 0x55, + 0xa3, 0x59, 0x88, 0xff, 0x91, 0x51, 0xb3, 0x7f, 0xcd, 0x82, 0x6b, 0x1a, 0xb7, 0xc7, 0x02, 0x4e, + 0x84, 0x80, 0x9b, 0x20, 0xd7, 0x0e, 0x85, 0xd4, 0x65, 0x29, 0x26, 0xa9, 0x7c, 0x1b, 0x0a, 0x89, + 0xb4, 0x07, 0xee, 0x00, 0xa0, 0x43, 0xf0, 0x43, 0xdc, 0x23, 0xfa, 0x80, 0xc5, 0xa4, 0x18, 0x68, + 0xe2, 0x41, 0x29, 0x14, 0xec, 0x02, 0xe0, 0x85, 0xcc, 0xa7, 0x92, 0x86, 0x4c, 0x1d, 0x21, 0xbb, + 0x55, 0xda, 0xb9, 0xbf, 0xe8, 0x11, 0x4c, 0x6a, 0xbb, 0x63, 0x81, 0x24, 0xda, 0xc4, 0x24, 0x50, + 0x4a, 0x1f, 0x36, 0xc1, 0xea, 0x73, 0xda, 0xf5, 0x3d, 0xcc, 0xfd, 0xa3, 0xb0, 0x4b, 0xbd, 0x41, + 0x39, 0xa7, 0xb3, 0xbc, 0x6b, 0x78, 0xab, 0x4f, 0xa6, 0xbc, 0xe7, 0xc3, 0x2a, 0x9c, 0xb6, 0x34, + 0x07, 0x11, 0x41, 0x33, 0x1a, 0xf0, 0x7b, 0x70, 0x33, 0x3e, 0xd1, 0x2e, 0x66, 0x21, 0xa3, 0x1e, + 0xee, 0xaa, 0xa2, 0x30, 0x55, 0x84, 0xbc, 0x96, 0xaf, 0x1a, 0xf9, 0x9b, 0x68, 0x3e, 0x0c, 0x5d, + 0xc6, 0xb7, 0xff, 0xc9, 0x80, 0x1b, 0x73, 0x8f, 0x0a, 0xbf, 0x02, 0x39, 0x39, 0x88, 0x88, 0x69, + 0xc7, 0x9d, 0x71, 0x3b, 0x54, 0x82, 0xe7, 0xc3, 0xea, 0xad, 0xb9, 0x24, 0x9d, 0xbd, 0xa6, 0xc1, + 0xfa, 0x64, 0x6c, 0xe2, 0x3e, 0xdd, 0x9b, 0x1e, 0x83, 0xf3, 0x61, 0x75, 0xce, 0xdd, 0x76, 0x26, + 0x4a, 0xd3, 0xc3, 0x02, 0x3f, 0x04, 0x05, 0x4e, 0xb0, 0x08, 0x99, 0x1e, 0xc2, 0x62, 0x32, 0x54, + 0x48, 0x5b, 0x91, 0xf1, 0xc2, 0x3b, 0x60, 0xb9, 0x47, 0x84, 0xc0, 0x01, 0x31, 0x85, 0x7f, 0xc7, + 0x00, 0x97, 0x0f, 0x62, 0x33, 0x1a, 0xfb, 0x21, 0x07, 0xb0, 0x8b, 0x85, 0x6c, 0x72, 0xcc, 0x44, + 0x9c, 0x3c, 0x35, 0xf5, 0x2c, 0xed, 0x7c, 0xb4, 0xd8, 0x9d, 0x54, 0x8c, 0xda, 0x07, 0xa3, 0x61, + 0x15, 0xd6, 0x2f, 0x28, 0xa1, 0x39, 0xea, 0xf6, 0xef, 0x16, 0x28, 0xea, 0xc2, 0xd5, 0xa9, 0x90, + 0xf0, 0xd9, 0x85, 0x5d, 0xe0, 0x2c, 0x16, 0x57, 0xb1, 0xf5, 0x26, 0x78, 0xd7, 0x9c, 0x6e, 0x65, + 0x6c, 0x49, 0xed, 0x81, 0x03, 0x90, 0xa7, 0x92, 0xf4, 0x54, 0xfd, 0xd5, 0xcc, 0x6f, 0x2d, 0x3a, + 0xf3, 0xb5, 0xeb, 0x46, 0x34, 0xbf, 0xa7, 0xe8, 0x28, 0x56, 0xb1, 0x7f, 0x32, 0x99, 0x1f, 0x85, + 0x5c, 0x42, 0x1f, 0x00, 0x89, 0x79, 0x40, 0xa4, 0xfa, 0x7b, 0xe3, 0x1e, 0x53, 0x9b, 0xd1, 0x89, + 0x37, 0xa3, 0xb3, 0xc7, 0xe4, 0x63, 0xde, 0x90, 0x9c, 0xb2, 0x20, 0xb9, 0x4c, 0xcd, 0x89, 0x16, + 0x4a, 0xe9, 0xda, 0x7f, 0xe4, 0x4c, 0x4c, 0xb5, 0x8d, 0x16, 0x58, 0x0f, 0x2e, 0x28, 0x8a, 0xfe, + 0xb1, 0x1f, 0xf6, 0x30, 0x65, 0xe5, 0x15, 0x0d, 0x5b, 0x33, 0xb0, 0x62, 0x63, 0xec, 0x40, 0x09, + 0x46, 0x49, 0x46, 0x58, 0xb6, 0xcd, 0x84, 0x4e, 0x24, 0x8f, 0xb0, 0x6c, 0x23, 0xed, 0x81, 0x0d, + 0x90, 0x91, 0xa1, 0x59, 0x7c, 0x5f, 0x2c, 0x5a, 0xc1, 0xf8, 0x38, 0x88, 0xb4, 0x08, 0x27, 0xcc, + 0x23, 0x35, 0x60, 0x84, 0x33, 0xcd, 0x10, 0x65, 0x64, 0x08, 0x5f, 0x58, 0x60, 0x0d, 0x77, 0x25, + 0xe1, 0x0c, 0x4b, 0x52, 0xc3, 0x5e, 0x87, 0x30, 0x5f, 0x94, 0x73, 0xba, 0x4d, 0xff, 0x39, 0xc8, + 0x2d, 0x13, 0x64, 0xed, 0xc1, 0xac, 0x32, 0xba, 0x18, 0x0c, 0x3e, 0x02, 0xb9, 0x48, 0xb5, 0x2e, + 0xff, 0x76, 0x8f, 0x84, 0x6a, 0x4b, 0x6d, 0x45, 0xd7, 0x48, 0x35, 0x4b, 0x6b, 0xc0, 0x6f, 0x40, + 0x56, 0x76, 0x45, 0xb9, 0xb0, 0xb0, 0x54, 0xb3, 0xde, 0xd8, 0x0d, 0x59, 0x8b, 0x06, 0xb5, 0xe5, + 0xd1, 0xb0, 0x9a, 0x6d, 0xd6, 0x1b, 0x48, 0x29, 0xcc, 0x59, 0x9e, 0xcb, 0xff, 0x7f, 0x79, 0xda, + 0x14, 0x94, 0x52, 0xcf, 0x11, 0x7c, 0x0a, 0x96, 0x69, 0xbc, 0xb5, 0xca, 0x96, 0xae, 0xb8, 0xfb, + 0x96, 0x8f, 0x41, 0xb2, 0x52, 0x8c, 0x01, 0x8d, 0x05, 0xed, 0x5f, 0xc0, 0xfb, 0xf3, 0x7a, 0xa3, + 0xe6, 0xac, 0x43, 0x99, 0x3f, 0x3b, 0xba, 0xfb, 0x94, 0xf9, 0x48, 0x7b, 0x14, 0x82, 0x25, 0x6f, + 0xda, 0x04, 0xa1, 0x5f, 0x33, 0xed, 0x81, 0x36, 0x28, 0x3c, 0x27, 0x34, 0x68, 0x4b, 0x3d, 0x8d, + 0xf9, 0x1a, 0x50, 0xdb, 0xef, 0x89, 0xb6, 0x20, 0xe3, 0xb1, 0x43, 0x73, 0x54, 0xde, 0x68, 0x63, + 0xee, 0xeb, 0xfb, 0xa0, 0x3e, 0xf4, 0x6b, 0x69, 0xcd, 0xdc, 0x87, 0xb1, 0x03, 0x25, 0x18, 0x45, + 0xf0, 0x99, 0x68, 0xf4, 0x5b, 0x2d, 0xfa, 0xb3, 0x49, 0x65, 0x42, 0x78, 0x78, 0xd8, 0x88, 0x1d, + 0x28, 0xc1, 0xd8, 0x7f, 0x66, 0x41, 0x71, 0xd2, 0x4d, 0xb8, 0x0f, 0x4a, 0x92, 0xf0, 0x1e, 0x65, + 0x58, 0x2d, 0xbc, 0x99, 0x87, 0xa3, 0xd4, 0x4c, 0x5c, 0xaa, 0x73, 0xcd, 0x7a, 0x23, 0x65, 0xd1, + 0x9d, 0x4b, 0xb3, 0xe1, 0x67, 0xa0, 0xe4, 0x11, 0x2e, 0x69, 0x8b, 0x7a, 0x58, 0x8e, 0x0b, 0xf3, + 0xde, 0x58, 0x6c, 0x37, 0x71, 0xa1, 0x34, 0x0e, 0x6e, 0x80, 0x6c, 0x87, 0x0c, 0xcc, 0x2b, 0x51, + 0x32, 0xf0, 0xec, 0x3e, 0x19, 0x20, 0x65, 0x87, 0x5f, 0x82, 0xeb, 0x1e, 0x4e, 0x91, 0xcd, 0x2b, + 0x71, 0xc3, 0x00, 0xaf, 0xef, 0x3e, 0x48, 0x2b, 0x4f, 0x63, 0xe1, 0x33, 0x50, 0xf6, 0x89, 0x90, + 0x26, 0xc3, 0x29, 0xa8, 0x79, 0x87, 0x37, 0x8d, 0x4e, 0xf9, 0xe1, 0x25, 0x38, 0x74, 0xa9, 0x02, + 0x7c, 0x69, 0x81, 0x0d, 0xca, 0x04, 0xf1, 0xfa, 0x9c, 0x7c, 0xed, 0x07, 0x24, 0x55, 0x1d, 0x73, + 0x1b, 0x0a, 0x3a, 0xc6, 0x23, 0x13, 0x63, 0x63, 0xef, 0x2a, 0xf0, 0xf9, 0xb0, 0x7a, 0xfb, 0x4a, + 0x80, 0xae, 0xf8, 0xd5, 0x01, 0x6b, 0x5b, 0xa7, 0x67, 0x95, 0xa5, 0x57, 0x67, 0x95, 0xa5, 0xd7, + 0x67, 0x95, 0xa5, 0x17, 0xa3, 0x8a, 0x75, 0x3a, 0xaa, 0x58, 0xaf, 0x46, 0x15, 0xeb, 0xf5, 0xa8, + 0x62, 0xfd, 0x35, 0xaa, 0x58, 0x2f, 0xff, 0xae, 0x2c, 0x3d, 0xcd, 0x9c, 0x6c, 0xff, 0x1b, 0x00, + 0x00, 0xff, 0xff, 0x26, 0x8b, 0x83, 0xf6, 0x2d, 0x0c, 0x00, 0x00, +} + +func (m *Route) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Route) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Route) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RouteIngress) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RouteIngress) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RouteIngress) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.RouterCanonicalHostname) + copy(dAtA[i:], m.RouterCanonicalHostname) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RouterCanonicalHostname))) + i-- + dAtA[i] = 0x2a + i -= len(m.WildcardPolicy) + copy(dAtA[i:], m.WildcardPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.WildcardPolicy))) + i-- + dAtA[i] = 0x22 + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.RouterName) + copy(dAtA[i:], m.RouterName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RouterName))) + i-- + dAtA[i] = 0x12 + i -= len(m.Host) + copy(dAtA[i:], m.Host) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RouteIngressCondition) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RouteIngressCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RouteIngressCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LastTransitionTime != nil { + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x22 + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RouteList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RouteList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RouteList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RoutePort) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RoutePort) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RoutePort) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.TargetPort.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RouteSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RouteSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RouteSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Subdomain) + copy(dAtA[i:], m.Subdomain) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Subdomain))) + i-- + dAtA[i] = 0x42 + i -= len(m.WildcardPolicy) + copy(dAtA[i:], m.WildcardPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.WildcardPolicy))) + i-- + dAtA[i] = 0x3a + if m.TLS != nil { + { + size, err := m.TLS.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if m.Port != nil { + { + size, err := m.Port.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if len(m.AlternateBackends) > 0 { + for iNdEx := len(m.AlternateBackends) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AlternateBackends[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + { + size, err := m.To.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x12 + i -= len(m.Host) + copy(dAtA[i:], m.Host) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RouteStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RouteStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RouteStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Ingress) > 0 { + for iNdEx := len(m.Ingress) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ingress[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *RouteTargetReference) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RouteTargetReference) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RouteTargetReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Weight != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Weight)) + i-- + dAtA[i] = 0x18 + } + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RouterShard) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RouterShard) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RouterShard) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.DNSSuffix) + copy(dAtA[i:], m.DNSSuffix) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DNSSuffix))) + i-- + dAtA[i] = 0x12 + i -= len(m.ShardName) + copy(dAtA[i:], m.ShardName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ShardName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TLSConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TLSConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TLSConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.InsecureEdgeTerminationPolicy) + copy(dAtA[i:], m.InsecureEdgeTerminationPolicy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.InsecureEdgeTerminationPolicy))) + i-- + dAtA[i] = 0x32 + i -= len(m.DestinationCACertificate) + copy(dAtA[i:], m.DestinationCACertificate) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DestinationCACertificate))) + i-- + dAtA[i] = 0x2a + i -= len(m.CACertificate) + copy(dAtA[i:], m.CACertificate) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.CACertificate))) + i-- + dAtA[i] = 0x22 + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0x1a + i -= len(m.Certificate) + copy(dAtA[i:], m.Certificate) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Certificate))) + i-- + dAtA[i] = 0x12 + i -= len(m.Termination) + copy(dAtA[i:], m.Termination) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Termination))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Route) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RouteIngress) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Host) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.RouterName) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.WildcardPolicy) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.RouterCanonicalHostname) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RouteIngressCondition) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + if m.LastTransitionTime != nil { + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *RouteList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *RoutePort) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.TargetPort.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RouteSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Host) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + l = m.To.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.AlternateBackends) > 0 { + for _, e := range m.AlternateBackends { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.Port != nil { + l = m.Port.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.TLS != nil { + l = m.TLS.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.WildcardPolicy) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Subdomain) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RouteStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Ingress) > 0 { + for _, e := range m.Ingress { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *RouteTargetReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if m.Weight != nil { + n += 1 + sovGenerated(uint64(*m.Weight)) + } + return n +} + +func (m *RouterShard) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ShardName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DNSSuffix) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *TLSConfig) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Termination) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Certificate) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.CACertificate) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DestinationCACertificate) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.InsecureEdgeTerminationPolicy) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *Route) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Route{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "RouteSpec", "RouteSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "RouteStatus", "RouteStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RouteIngress) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]RouteIngressCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "RouteIngressCondition", "RouteIngressCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&RouteIngress{`, + `Host:` + fmt.Sprintf("%v", this.Host) + `,`, + `RouterName:` + fmt.Sprintf("%v", this.RouterName) + `,`, + `Conditions:` + repeatedStringForConditions + `,`, + `WildcardPolicy:` + fmt.Sprintf("%v", this.WildcardPolicy) + `,`, + `RouterCanonicalHostname:` + fmt.Sprintf("%v", this.RouterCanonicalHostname) + `,`, + `}`, + }, "") + return s +} +func (this *RouteIngressCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RouteIngressCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `LastTransitionTime:` + strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1) + `,`, + `}`, + }, "") + return s +} +func (this *RouteList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Route{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Route", "Route", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&RouteList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *RoutePort) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RoutePort{`, + `TargetPort:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TargetPort), "IntOrString", "intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RouteSpec) String() string { + if this == nil { + return "nil" + } + repeatedStringForAlternateBackends := "[]RouteTargetReference{" + for _, f := range this.AlternateBackends { + repeatedStringForAlternateBackends += strings.Replace(strings.Replace(f.String(), "RouteTargetReference", "RouteTargetReference", 1), `&`, ``, 1) + "," + } + repeatedStringForAlternateBackends += "}" + s := strings.Join([]string{`&RouteSpec{`, + `Host:` + fmt.Sprintf("%v", this.Host) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `To:` + strings.Replace(strings.Replace(this.To.String(), "RouteTargetReference", "RouteTargetReference", 1), `&`, ``, 1) + `,`, + `AlternateBackends:` + repeatedStringForAlternateBackends + `,`, + `Port:` + strings.Replace(this.Port.String(), "RoutePort", "RoutePort", 1) + `,`, + `TLS:` + strings.Replace(this.TLS.String(), "TLSConfig", "TLSConfig", 1) + `,`, + `WildcardPolicy:` + fmt.Sprintf("%v", this.WildcardPolicy) + `,`, + `Subdomain:` + fmt.Sprintf("%v", this.Subdomain) + `,`, + `}`, + }, "") + return s +} +func (this *RouteStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForIngress := "[]RouteIngress{" + for _, f := range this.Ingress { + repeatedStringForIngress += strings.Replace(strings.Replace(f.String(), "RouteIngress", "RouteIngress", 1), `&`, ``, 1) + "," + } + repeatedStringForIngress += "}" + s := strings.Join([]string{`&RouteStatus{`, + `Ingress:` + repeatedStringForIngress + `,`, + `}`, + }, "") + return s +} +func (this *RouteTargetReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RouteTargetReference{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Weight:` + valueToStringGenerated(this.Weight) + `,`, + `}`, + }, "") + return s +} +func (this *RouterShard) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RouterShard{`, + `ShardName:` + fmt.Sprintf("%v", this.ShardName) + `,`, + `DNSSuffix:` + fmt.Sprintf("%v", this.DNSSuffix) + `,`, + `}`, + }, "") + return s +} +func (this *TLSConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TLSConfig{`, + `Termination:` + fmt.Sprintf("%v", this.Termination) + `,`, + `Certificate:` + fmt.Sprintf("%v", this.Certificate) + `,`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `CACertificate:` + fmt.Sprintf("%v", this.CACertificate) + `,`, + `DestinationCACertificate:` + fmt.Sprintf("%v", this.DestinationCACertificate) + `,`, + `InsecureEdgeTerminationPolicy:` + fmt.Sprintf("%v", this.InsecureEdgeTerminationPolicy) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *Route) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Route: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Route: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RouteIngress) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RouteIngress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RouteIngress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Host", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Host = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RouterName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RouterName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, RouteIngressCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WildcardPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.WildcardPolicy = WildcardPolicyType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RouterCanonicalHostname", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RouterCanonicalHostname = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RouteIngressCondition) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RouteIngressCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RouteIngressCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = RouteIngressConditionType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = k8s_io_api_core_v1.ConditionStatus(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastTransitionTime == nil { + m.LastTransitionTime = &v1.Time{} + } + if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RouteList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RouteList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RouteList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Route{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RoutePort) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RoutePort: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RoutePort: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetPort", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TargetPort.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RouteSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RouteSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RouteSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Host", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Host = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field To", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.To.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AlternateBackends", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AlternateBackends = append(m.AlternateBackends, RouteTargetReference{}) + if err := m.AlternateBackends[len(m.AlternateBackends)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Port == nil { + m.Port = &RoutePort{} + } + if err := m.Port.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TLS", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TLS == nil { + m.TLS = &TLSConfig{} + } + if err := m.TLS.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WildcardPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.WildcardPolicy = WildcardPolicyType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Subdomain", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Subdomain = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RouteStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RouteStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RouteStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ingress", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ingress = append(m.Ingress, RouteIngress{}) + if err := m.Ingress[len(m.Ingress)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RouteTargetReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RouteTargetReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RouteTargetReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Weight = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RouterShard) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RouterShard: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RouterShard: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShardName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ShardName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DNSSuffix", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DNSSuffix = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TLSConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TLSConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TLSConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Termination", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Termination = TLSTerminationType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Certificate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Certificate = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CACertificate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CACertificate = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DestinationCACertificate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DestinationCACertificate = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InsecureEdgeTerminationPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.InsecureEdgeTerminationPolicy = InsecureEdgeTerminationPolicyType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vendor/github.com/openshift/api/route/v1/generated.proto b/vendor/github.com/openshift/api/route/v1/generated.proto new file mode 100644 index 0000000000000..abf11f4c4a6ea --- /dev/null +++ b/vendor/github.com/openshift/api/route/v1/generated.proto @@ -0,0 +1,245 @@ + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package github.com.openshift.api.route.v1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; +import "k8s.io/apimachinery/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// A route allows developers to expose services through an HTTP(S) aware load balancing and proxy +// layer via a public DNS entry. The route may further specify TLS options and a certificate, or +// specify a public CNAME that the router should also accept for HTTP and HTTPS traffic. An +// administrator typically configures their router to be visible outside the cluster firewall, and +// may also add additional security, caching, or traffic controls on the service content. Routers +// usually talk directly to the service endpoints. +// +// Once a route is created, the `host` field may not be changed. Generally, routers use the oldest +// route with a given host when resolving conflicts. +// +// Routers are subject to additional customization and may support additional controls via the +// annotations field. +// +// Because administrators may configure multiple routers, the route status field is used to +// return information to clients about the names and states of the route under each router. +// If a client chooses a duplicate name, for instance, the route status conditions are used +// to indicate the route cannot be chosen. +// +// To enable HTTP/2 ALPN on a route it requires a custom +// (non-wildcard) certificate. This prevents connection coalescing by +// clients, notably web browsers. We do not support HTTP/2 ALPN on +// routes that use the default certificate because of the risk of +// connection re-use/coalescing. Routes that do not have their own +// custom certificate will not be HTTP/2 ALPN-enabled on either the +// frontend or the backend. +message Route { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // spec is the desired state of the route + optional RouteSpec spec = 2; + + // status is the current state of the route + // +optional + optional RouteStatus status = 3; +} + +// RouteIngress holds information about the places where a route is exposed. +message RouteIngress { + // Host is the host string under which the route is exposed; this value is required + optional string host = 1; + + // Name is a name chosen by the router to identify itself; this value is required + optional string routerName = 2; + + // Conditions is the state of the route, may be empty. + repeated RouteIngressCondition conditions = 3; + + // Wildcard policy is the wildcard policy that was allowed where this route is exposed. + optional string wildcardPolicy = 4; + + // CanonicalHostname is the external host name for the router that can be used as a CNAME + // for the host requested for this route. This value is optional and may not be set in all cases. + optional string routerCanonicalHostname = 5; +} + +// RouteIngressCondition contains details for the current condition of this route on a particular +// router. +message RouteIngressCondition { + // Type is the type of the condition. + // Currently only Ready. + optional string type = 1; + + // Status is the status of the condition. + // Can be True, False, Unknown. + optional string status = 2; + + // (brief) reason for the condition's last transition, and is usually a machine and human + // readable constant + optional string reason = 3; + + // Human readable message indicating details about last transition. + optional string message = 4; + + // RFC 3339 date and time when this condition last transitioned + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 5; +} + +// RouteList is a collection of Routes. +message RouteList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is a list of routes + repeated Route items = 2; +} + +// RoutePort defines a port mapping from a router to an endpoint in the service endpoints. +message RoutePort { + // The target port on pods selected by the service this route points to. + // If this is a string, it will be looked up as a named port in the target + // endpoints port list. Required + optional k8s.io.apimachinery.pkg.util.intstr.IntOrString targetPort = 1; +} + +// RouteSpec describes the hostname or path the route exposes, any security information, +// and one to four backends (services) the route points to. Requests are distributed +// among the backends depending on the weights assigned to each backend. When using +// roundrobin scheduling the portion of requests that go to each backend is the backend +// weight divided by the sum of all of the backend weights. When the backend has more than +// one endpoint the requests that end up on the backend are roundrobin distributed among +// the endpoints. Weights are between 0 and 256 with default 100. Weight 0 causes no requests +// to the backend. If all weights are zero the route will be considered to have no backends +// and return a standard 503 response. +// +// The `tls` field is optional and allows specific certificates or behavior for the +// route. Routers typically configure a default certificate on a wildcard domain to +// terminate routes without explicit certificates, but custom hostnames usually must +// choose passthrough (send traffic directly to the backend via the TLS Server-Name- +// Indication field) or provide a certificate. +message RouteSpec { + // host is an alias/DNS that points to the service. Optional. + // If not specified a route name will typically be automatically + // chosen. + // Must follow DNS952 subdomain conventions. + // +optional + optional string host = 1; + + // subdomain is a DNS subdomain that is requested within the ingress controller's + // domain (as a subdomain). If host is set this field is ignored. An ingress + // controller may choose to ignore this suggested name, in which case the controller + // will report the assigned name in the status.ingress array or refuse to admit the + // route. If this value is set and the server does not support this field host will + // be populated automatically. Otherwise host is left empty. The field may have + // multiple parts separated by a dot, but not all ingress controllers may honor + // the request. This field may not be changed after creation except by a user with + // the update routes/custom-host permission. + // + // Example: subdomain `frontend` automatically receives the router subdomain + // `apps.mycluster.com` to have a full hostname `frontend.apps.mycluster.com`. + // + // +optional + optional string subdomain = 8; + + // path that the router watches for, to route traffic for to the service. Optional + optional string path = 2; + + // to is an object the route should use as the primary backend. Only the Service kind + // is allowed, and it will be defaulted to Service. If the weight field (0-256 default 100) + // is set to zero, no traffic will be sent to this backend. + optional RouteTargetReference to = 3; + + // alternateBackends allows up to 3 additional backends to be assigned to the route. + // Only the Service kind is allowed, and it will be defaulted to Service. + // Use the weight field in RouteTargetReference object to specify relative preference. + repeated RouteTargetReference alternateBackends = 4; + + // If specified, the port to be used by the router. Most routers will use all + // endpoints exposed by the service by default - set this value to instruct routers + // which port to use. + optional RoutePort port = 5; + + // The tls field provides the ability to configure certificates and termination for the route. + optional TLSConfig tls = 6; + + // Wildcard policy if any for the route. + // Currently only 'Subdomain' or 'None' is allowed. + optional string wildcardPolicy = 7; +} + +// RouteStatus provides relevant info about the status of a route, including which routers +// acknowledge it. +message RouteStatus { + // ingress describes the places where the route may be exposed. The list of + // ingress points may contain duplicate Host or RouterName values. Routes + // are considered live once they are `Ready` + repeated RouteIngress ingress = 1; +} + +// RouteTargetReference specifies the target that resolve into endpoints. Only the 'Service' +// kind is allowed. Use 'weight' field to emphasize one over others. +message RouteTargetReference { + // The kind of target that the route is referring to. Currently, only 'Service' is allowed + optional string kind = 1; + + // name of the service/target that is being referred to. e.g. name of the service + optional string name = 2; + + // weight as an integer between 0 and 256, default 100, that specifies the target's relative weight + // against other target reference objects. 0 suppresses requests to this backend. + // +optional + optional int32 weight = 3; +} + +// RouterShard has information of a routing shard and is used to +// generate host names and routing table entries when a routing shard is +// allocated for a specific route. +// Caveat: This is WIP and will likely undergo modifications when sharding +// support is added. +message RouterShard { + // shardName uniquely identifies a router shard in the "set" of + // routers used for routing traffic to the services. + optional string shardName = 1; + + // dnsSuffix for the shard ala: shard-1.v3.openshift.com + optional string dnsSuffix = 2; +} + +// TLSConfig defines config used to secure a route and provide termination +message TLSConfig { + // termination indicates termination type. + // + // * edge - TLS termination is done by the router and http is used to communicate with the backend (default) + // * passthrough - Traffic is sent straight to the destination without the router providing TLS termination + // * reencrypt - TLS termination is done by the router and https is used to communicate with the backend + optional string termination = 1; + + // certificate provides certificate contents + optional string certificate = 2; + + // key provides key file contents + optional string key = 3; + + // caCertificate provides the cert authority certificate contents + optional string caCertificate = 4; + + // destinationCACertificate provides the contents of the ca certificate of the final destination. When using reencrypt + // termination this file should be provided in order to have routers use it for health checks on the secure connection. + // If this field is not specified, the router may provide its own destination CA and perform hostname validation using + // the short service name (service.namespace.svc), which allows infrastructure generated certificates to automatically + // verify. + optional string destinationCACertificate = 5; + + // insecureEdgeTerminationPolicy indicates the desired behavior for insecure connections to a route. While + // each router may make its own decisions on which ports to expose, this is normally port 80. + // + // * Allow - traffic is sent to the server on the insecure port (default) + // * Disable - no traffic is allowed on the insecure port. + // * Redirect - clients are redirected to the secure port. + optional string insecureEdgeTerminationPolicy = 6; +} + diff --git a/vendor/github.com/openshift/api/route/v1/legacy.go b/vendor/github.com/openshift/api/route/v1/legacy.go new file mode 100644 index 0000000000000..498f5dd0f0604 --- /dev/null +++ b/vendor/github.com/openshift/api/route/v1/legacy.go @@ -0,0 +1,22 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + legacyGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} + legacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes, corev1.AddToScheme) + DeprecatedInstallWithoutGroup = legacySchemeBuilder.AddToScheme +) + +func addLegacyKnownTypes(scheme *runtime.Scheme) error { + types := []runtime.Object{ + &Route{}, + &RouteList{}, + } + scheme.AddKnownTypes(legacyGroupVersion, types...) + return nil +} diff --git a/vendor/github.com/openshift/api/route/v1/register.go b/vendor/github.com/openshift/api/route/v1/register.go new file mode 100644 index 0000000000000..6f99ef5c96ae4 --- /dev/null +++ b/vendor/github.com/openshift/api/route/v1/register.go @@ -0,0 +1,39 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "route.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, corev1.AddToScheme) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &Route{}, + &RouteList{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/route/v1/types.go b/vendor/github.com/openshift/api/route/v1/types.go new file mode 100644 index 0000000000000..e36e192d8f6a6 --- /dev/null +++ b/vendor/github.com/openshift/api/route/v1/types.go @@ -0,0 +1,284 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// A route allows developers to expose services through an HTTP(S) aware load balancing and proxy +// layer via a public DNS entry. The route may further specify TLS options and a certificate, or +// specify a public CNAME that the router should also accept for HTTP and HTTPS traffic. An +// administrator typically configures their router to be visible outside the cluster firewall, and +// may also add additional security, caching, or traffic controls on the service content. Routers +// usually talk directly to the service endpoints. +// +// Once a route is created, the `host` field may not be changed. Generally, routers use the oldest +// route with a given host when resolving conflicts. +// +// Routers are subject to additional customization and may support additional controls via the +// annotations field. +// +// Because administrators may configure multiple routers, the route status field is used to +// return information to clients about the names and states of the route under each router. +// If a client chooses a duplicate name, for instance, the route status conditions are used +// to indicate the route cannot be chosen. +// +// To enable HTTP/2 ALPN on a route it requires a custom +// (non-wildcard) certificate. This prevents connection coalescing by +// clients, notably web browsers. We do not support HTTP/2 ALPN on +// routes that use the default certificate because of the risk of +// connection re-use/coalescing. Routes that do not have their own +// custom certificate will not be HTTP/2 ALPN-enabled on either the +// frontend or the backend. +type Route struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // spec is the desired state of the route + Spec RouteSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` + // status is the current state of the route + // +optional + Status RouteStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RouteList is a collection of Routes. +type RouteList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is a list of routes + Items []Route `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// RouteSpec describes the hostname or path the route exposes, any security information, +// and one to four backends (services) the route points to. Requests are distributed +// among the backends depending on the weights assigned to each backend. When using +// roundrobin scheduling the portion of requests that go to each backend is the backend +// weight divided by the sum of all of the backend weights. When the backend has more than +// one endpoint the requests that end up on the backend are roundrobin distributed among +// the endpoints. Weights are between 0 and 256 with default 100. Weight 0 causes no requests +// to the backend. If all weights are zero the route will be considered to have no backends +// and return a standard 503 response. +// +// The `tls` field is optional and allows specific certificates or behavior for the +// route. Routers typically configure a default certificate on a wildcard domain to +// terminate routes without explicit certificates, but custom hostnames usually must +// choose passthrough (send traffic directly to the backend via the TLS Server-Name- +// Indication field) or provide a certificate. +type RouteSpec struct { + // host is an alias/DNS that points to the service. Optional. + // If not specified a route name will typically be automatically + // chosen. + // Must follow DNS952 subdomain conventions. + // +optional + Host string `json:"host,omitempty" protobuf:"bytes,1,opt,name=host"` + // subdomain is a DNS subdomain that is requested within the ingress controller's + // domain (as a subdomain). If host is set this field is ignored. An ingress + // controller may choose to ignore this suggested name, in which case the controller + // will report the assigned name in the status.ingress array or refuse to admit the + // route. If this value is set and the server does not support this field host will + // be populated automatically. Otherwise host is left empty. The field may have + // multiple parts separated by a dot, but not all ingress controllers may honor + // the request. This field may not be changed after creation except by a user with + // the update routes/custom-host permission. + // + // Example: subdomain `frontend` automatically receives the router subdomain + // `apps.mycluster.com` to have a full hostname `frontend.apps.mycluster.com`. + // + // +optional + Subdomain string `json:"subdomain,omitempty" protobuf:"bytes,8,opt,name=subdomain"` + + // path that the router watches for, to route traffic for to the service. Optional + Path string `json:"path,omitempty" protobuf:"bytes,2,opt,name=path"` + + // to is an object the route should use as the primary backend. Only the Service kind + // is allowed, and it will be defaulted to Service. If the weight field (0-256 default 100) + // is set to zero, no traffic will be sent to this backend. + To RouteTargetReference `json:"to" protobuf:"bytes,3,opt,name=to"` + + // alternateBackends allows up to 3 additional backends to be assigned to the route. + // Only the Service kind is allowed, and it will be defaulted to Service. + // Use the weight field in RouteTargetReference object to specify relative preference. + AlternateBackends []RouteTargetReference `json:"alternateBackends,omitempty" protobuf:"bytes,4,rep,name=alternateBackends"` + + // If specified, the port to be used by the router. Most routers will use all + // endpoints exposed by the service by default - set this value to instruct routers + // which port to use. + Port *RoutePort `json:"port,omitempty" protobuf:"bytes,5,opt,name=port"` + + // The tls field provides the ability to configure certificates and termination for the route. + TLS *TLSConfig `json:"tls,omitempty" protobuf:"bytes,6,opt,name=tls"` + + // Wildcard policy if any for the route. + // Currently only 'Subdomain' or 'None' is allowed. + WildcardPolicy WildcardPolicyType `json:"wildcardPolicy,omitempty" protobuf:"bytes,7,opt,name=wildcardPolicy"` +} + +// RouteTargetReference specifies the target that resolve into endpoints. Only the 'Service' +// kind is allowed. Use 'weight' field to emphasize one over others. +type RouteTargetReference struct { + // The kind of target that the route is referring to. Currently, only 'Service' is allowed + Kind string `json:"kind" protobuf:"bytes,1,opt,name=kind"` + + // name of the service/target that is being referred to. e.g. name of the service + Name string `json:"name" protobuf:"bytes,2,opt,name=name"` + + // weight as an integer between 0 and 256, default 100, that specifies the target's relative weight + // against other target reference objects. 0 suppresses requests to this backend. + // +optional + Weight *int32 `json:"weight" protobuf:"varint,3,opt,name=weight"` +} + +// RoutePort defines a port mapping from a router to an endpoint in the service endpoints. +type RoutePort struct { + // The target port on pods selected by the service this route points to. + // If this is a string, it will be looked up as a named port in the target + // endpoints port list. Required + TargetPort intstr.IntOrString `json:"targetPort" protobuf:"bytes,1,opt,name=targetPort"` +} + +// RouteStatus provides relevant info about the status of a route, including which routers +// acknowledge it. +type RouteStatus struct { + // ingress describes the places where the route may be exposed. The list of + // ingress points may contain duplicate Host or RouterName values. Routes + // are considered live once they are `Ready` + Ingress []RouteIngress `json:"ingress,omitempty" protobuf:"bytes,1,rep,name=ingress"` +} + +// RouteIngress holds information about the places where a route is exposed. +type RouteIngress struct { + // Host is the host string under which the route is exposed; this value is required + Host string `json:"host,omitempty" protobuf:"bytes,1,opt,name=host"` + // Name is a name chosen by the router to identify itself; this value is required + RouterName string `json:"routerName,omitempty" protobuf:"bytes,2,opt,name=routerName"` + // Conditions is the state of the route, may be empty. + Conditions []RouteIngressCondition `json:"conditions,omitempty" protobuf:"bytes,3,rep,name=conditions"` + // Wildcard policy is the wildcard policy that was allowed where this route is exposed. + WildcardPolicy WildcardPolicyType `json:"wildcardPolicy,omitempty" protobuf:"bytes,4,opt,name=wildcardPolicy"` + // CanonicalHostname is the external host name for the router that can be used as a CNAME + // for the host requested for this route. This value is optional and may not be set in all cases. + RouterCanonicalHostname string `json:"routerCanonicalHostname,omitempty" protobuf:"bytes,5,opt,name=routerCanonicalHostname"` +} + +// RouteIngressConditionType is a valid value for RouteCondition +type RouteIngressConditionType string + +// These are valid conditions of pod. +const ( + // RouteAdmitted means the route is able to service requests for the provided Host + RouteAdmitted RouteIngressConditionType = "Admitted" + // TODO: add other route condition types +) + +// RouteIngressCondition contains details for the current condition of this route on a particular +// router. +type RouteIngressCondition struct { + // Type is the type of the condition. + // Currently only Ready. + Type RouteIngressConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=RouteIngressConditionType"` + // Status is the status of the condition. + // Can be True, False, Unknown. + Status corev1.ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=k8s.io/api/core/v1.ConditionStatus"` + // (brief) reason for the condition's last transition, and is usually a machine and human + // readable constant + Reason string `json:"reason,omitempty" protobuf:"bytes,3,opt,name=reason"` + // Human readable message indicating details about last transition. + Message string `json:"message,omitempty" protobuf:"bytes,4,opt,name=message"` + // RFC 3339 date and time when this condition last transitioned + LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,5,opt,name=lastTransitionTime"` +} + +// RouterShard has information of a routing shard and is used to +// generate host names and routing table entries when a routing shard is +// allocated for a specific route. +// Caveat: This is WIP and will likely undergo modifications when sharding +// support is added. +type RouterShard struct { + // shardName uniquely identifies a router shard in the "set" of + // routers used for routing traffic to the services. + ShardName string `json:"shardName" protobuf:"bytes,1,opt,name=shardName"` + + // dnsSuffix for the shard ala: shard-1.v3.openshift.com + DNSSuffix string `json:"dnsSuffix" protobuf:"bytes,2,opt,name=dnsSuffix"` +} + +// TLSConfig defines config used to secure a route and provide termination +type TLSConfig struct { + // termination indicates termination type. + // + // * edge - TLS termination is done by the router and http is used to communicate with the backend (default) + // * passthrough - Traffic is sent straight to the destination without the router providing TLS termination + // * reencrypt - TLS termination is done by the router and https is used to communicate with the backend + Termination TLSTerminationType `json:"termination" protobuf:"bytes,1,opt,name=termination,casttype=TLSTerminationType"` + + // certificate provides certificate contents + Certificate string `json:"certificate,omitempty" protobuf:"bytes,2,opt,name=certificate"` + + // key provides key file contents + Key string `json:"key,omitempty" protobuf:"bytes,3,opt,name=key"` + + // caCertificate provides the cert authority certificate contents + CACertificate string `json:"caCertificate,omitempty" protobuf:"bytes,4,opt,name=caCertificate"` + + // destinationCACertificate provides the contents of the ca certificate of the final destination. When using reencrypt + // termination this file should be provided in order to have routers use it for health checks on the secure connection. + // If this field is not specified, the router may provide its own destination CA and perform hostname validation using + // the short service name (service.namespace.svc), which allows infrastructure generated certificates to automatically + // verify. + DestinationCACertificate string `json:"destinationCACertificate,omitempty" protobuf:"bytes,5,opt,name=destinationCACertificate"` + + // insecureEdgeTerminationPolicy indicates the desired behavior for insecure connections to a route. While + // each router may make its own decisions on which ports to expose, this is normally port 80. + // + // * Allow - traffic is sent to the server on the insecure port (default) + // * Disable - no traffic is allowed on the insecure port. + // * Redirect - clients are redirected to the secure port. + InsecureEdgeTerminationPolicy InsecureEdgeTerminationPolicyType `json:"insecureEdgeTerminationPolicy,omitempty" protobuf:"bytes,6,opt,name=insecureEdgeTerminationPolicy,casttype=InsecureEdgeTerminationPolicyType"` +} + +// TLSTerminationType dictates where the secure communication will stop +// TODO: Reconsider this type in v2 +type TLSTerminationType string + +// InsecureEdgeTerminationPolicyType dictates the behavior of insecure +// connections to an edge-terminated route. +type InsecureEdgeTerminationPolicyType string + +const ( + // TLSTerminationEdge terminate encryption at the edge router. + TLSTerminationEdge TLSTerminationType = "edge" + // TLSTerminationPassthrough terminate encryption at the destination, the destination is responsible for decrypting traffic + TLSTerminationPassthrough TLSTerminationType = "passthrough" + // TLSTerminationReencrypt terminate encryption at the edge router and re-encrypt it with a new certificate supplied by the destination + TLSTerminationReencrypt TLSTerminationType = "reencrypt" + + // InsecureEdgeTerminationPolicyNone disables insecure connections for an edge-terminated route. + InsecureEdgeTerminationPolicyNone InsecureEdgeTerminationPolicyType = "None" + // InsecureEdgeTerminationPolicyAllow allows insecure connections for an edge-terminated route. + InsecureEdgeTerminationPolicyAllow InsecureEdgeTerminationPolicyType = "Allow" + // InsecureEdgeTerminationPolicyRedirect redirects insecure connections for an edge-terminated route. + // As an example, for routers that support HTTP and HTTPS, the + // insecure HTTP connections will be redirected to use HTTPS. + InsecureEdgeTerminationPolicyRedirect InsecureEdgeTerminationPolicyType = "Redirect" +) + +// WildcardPolicyType indicates the type of wildcard support needed by routes. +type WildcardPolicyType string + +const ( + // WildcardPolicyNone indicates no wildcard support is needed. + WildcardPolicyNone WildcardPolicyType = "None" + + // WildcardPolicySubdomain indicates the host needs wildcard support for the subdomain. + // Example: For host = "www.acme.test", indicates that the router + // should support requests for *.acme.test + // Note that this will not match acme.test only *.acme.test + WildcardPolicySubdomain WildcardPolicyType = "Subdomain" +) diff --git a/vendor/github.com/openshift/api/route/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/route/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..a9576c414ca56 --- /dev/null +++ b/vendor/github.com/openshift/api/route/v1/zz_generated.deepcopy.go @@ -0,0 +1,240 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Route) DeepCopyInto(out *Route) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Route. +func (in *Route) DeepCopy() *Route { + if in == nil { + return nil + } + out := new(Route) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Route) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RouteIngress) DeepCopyInto(out *RouteIngress) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]RouteIngressCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RouteIngress. +func (in *RouteIngress) DeepCopy() *RouteIngress { + if in == nil { + return nil + } + out := new(RouteIngress) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RouteIngressCondition) DeepCopyInto(out *RouteIngressCondition) { + *out = *in + if in.LastTransitionTime != nil { + in, out := &in.LastTransitionTime, &out.LastTransitionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RouteIngressCondition. +func (in *RouteIngressCondition) DeepCopy() *RouteIngressCondition { + if in == nil { + return nil + } + out := new(RouteIngressCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RouteList) DeepCopyInto(out *RouteList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Route, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RouteList. +func (in *RouteList) DeepCopy() *RouteList { + if in == nil { + return nil + } + out := new(RouteList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RouteList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RoutePort) DeepCopyInto(out *RoutePort) { + *out = *in + out.TargetPort = in.TargetPort + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RoutePort. +func (in *RoutePort) DeepCopy() *RoutePort { + if in == nil { + return nil + } + out := new(RoutePort) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RouteSpec) DeepCopyInto(out *RouteSpec) { + *out = *in + in.To.DeepCopyInto(&out.To) + if in.AlternateBackends != nil { + in, out := &in.AlternateBackends, &out.AlternateBackends + *out = make([]RouteTargetReference, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Port != nil { + in, out := &in.Port, &out.Port + *out = new(RoutePort) + **out = **in + } + if in.TLS != nil { + in, out := &in.TLS, &out.TLS + *out = new(TLSConfig) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RouteSpec. +func (in *RouteSpec) DeepCopy() *RouteSpec { + if in == nil { + return nil + } + out := new(RouteSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RouteStatus) DeepCopyInto(out *RouteStatus) { + *out = *in + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = make([]RouteIngress, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RouteStatus. +func (in *RouteStatus) DeepCopy() *RouteStatus { + if in == nil { + return nil + } + out := new(RouteStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RouteTargetReference) DeepCopyInto(out *RouteTargetReference) { + *out = *in + if in.Weight != nil { + in, out := &in.Weight, &out.Weight + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RouteTargetReference. +func (in *RouteTargetReference) DeepCopy() *RouteTargetReference { + if in == nil { + return nil + } + out := new(RouteTargetReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RouterShard) DeepCopyInto(out *RouterShard) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RouterShard. +func (in *RouterShard) DeepCopy() *RouterShard { + if in == nil { + return nil + } + out := new(RouterShard) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TLSConfig) DeepCopyInto(out *TLSConfig) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TLSConfig. +func (in *TLSConfig) DeepCopy() *TLSConfig { + if in == nil { + return nil + } + out := new(TLSConfig) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/route/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/route/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000000..83b92816b4b64 --- /dev/null +++ b/vendor/github.com/openshift/api/route/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,128 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_Route = map[string]string{ + "": "A route allows developers to expose services through an HTTP(S) aware load balancing and proxy layer via a public DNS entry. The route may further specify TLS options and a certificate, or specify a public CNAME that the router should also accept for HTTP and HTTPS traffic. An administrator typically configures their router to be visible outside the cluster firewall, and may also add additional security, caching, or traffic controls on the service content. Routers usually talk directly to the service endpoints.\n\nOnce a route is created, the `host` field may not be changed. Generally, routers use the oldest route with a given host when resolving conflicts.\n\nRouters are subject to additional customization and may support additional controls via the annotations field.\n\nBecause administrators may configure multiple routers, the route status field is used to return information to clients about the names and states of the route under each router. If a client chooses a duplicate name, for instance, the route status conditions are used to indicate the route cannot be chosen.\n\nTo enable HTTP/2 ALPN on a route it requires a custom (non-wildcard) certificate. This prevents connection coalescing by clients, notably web browsers. We do not support HTTP/2 ALPN on routes that use the default certificate because of the risk of connection re-use/coalescing. Routes that do not have their own custom certificate will not be HTTP/2 ALPN-enabled on either the frontend or the backend.", + "spec": "spec is the desired state of the route", + "status": "status is the current state of the route", +} + +func (Route) SwaggerDoc() map[string]string { + return map_Route +} + +var map_RouteIngress = map[string]string{ + "": "RouteIngress holds information about the places where a route is exposed.", + "host": "Host is the host string under which the route is exposed; this value is required", + "routerName": "Name is a name chosen by the router to identify itself; this value is required", + "conditions": "Conditions is the state of the route, may be empty.", + "wildcardPolicy": "Wildcard policy is the wildcard policy that was allowed where this route is exposed.", + "routerCanonicalHostname": "CanonicalHostname is the external host name for the router that can be used as a CNAME for the host requested for this route. This value is optional and may not be set in all cases.", +} + +func (RouteIngress) SwaggerDoc() map[string]string { + return map_RouteIngress +} + +var map_RouteIngressCondition = map[string]string{ + "": "RouteIngressCondition contains details for the current condition of this route on a particular router.", + "type": "Type is the type of the condition. Currently only Ready.", + "status": "Status is the status of the condition. Can be True, False, Unknown.", + "reason": "(brief) reason for the condition's last transition, and is usually a machine and human readable constant", + "message": "Human readable message indicating details about last transition.", + "lastTransitionTime": "RFC 3339 date and time when this condition last transitioned", +} + +func (RouteIngressCondition) SwaggerDoc() map[string]string { + return map_RouteIngressCondition +} + +var map_RouteList = map[string]string{ + "": "RouteList is a collection of Routes.", + "items": "items is a list of routes", +} + +func (RouteList) SwaggerDoc() map[string]string { + return map_RouteList +} + +var map_RoutePort = map[string]string{ + "": "RoutePort defines a port mapping from a router to an endpoint in the service endpoints.", + "targetPort": "The target port on pods selected by the service this route points to. If this is a string, it will be looked up as a named port in the target endpoints port list. Required", +} + +func (RoutePort) SwaggerDoc() map[string]string { + return map_RoutePort +} + +var map_RouteSpec = map[string]string{ + "": "RouteSpec describes the hostname or path the route exposes, any security information, and one to four backends (services) the route points to. Requests are distributed among the backends depending on the weights assigned to each backend. When using roundrobin scheduling the portion of requests that go to each backend is the backend weight divided by the sum of all of the backend weights. When the backend has more than one endpoint the requests that end up on the backend are roundrobin distributed among the endpoints. Weights are between 0 and 256 with default 100. Weight 0 causes no requests to the backend. If all weights are zero the route will be considered to have no backends and return a standard 503 response.\n\nThe `tls` field is optional and allows specific certificates or behavior for the route. Routers typically configure a default certificate on a wildcard domain to terminate routes without explicit certificates, but custom hostnames usually must choose passthrough (send traffic directly to the backend via the TLS Server-Name- Indication field) or provide a certificate.", + "host": "host is an alias/DNS that points to the service. Optional. If not specified a route name will typically be automatically chosen. Must follow DNS952 subdomain conventions.", + "subdomain": "subdomain is a DNS subdomain that is requested within the ingress controller's domain (as a subdomain). If host is set this field is ignored. An ingress controller may choose to ignore this suggested name, in which case the controller will report the assigned name in the status.ingress array or refuse to admit the route. If this value is set and the server does not support this field host will be populated automatically. Otherwise host is left empty. The field may have multiple parts separated by a dot, but not all ingress controllers may honor the request. This field may not be changed after creation except by a user with the update routes/custom-host permission.\n\nExample: subdomain `frontend` automatically receives the router subdomain `apps.mycluster.com` to have a full hostname `frontend.apps.mycluster.com`.", + "path": "path that the router watches for, to route traffic for to the service. Optional", + "to": "to is an object the route should use as the primary backend. Only the Service kind is allowed, and it will be defaulted to Service. If the weight field (0-256 default 100) is set to zero, no traffic will be sent to this backend.", + "alternateBackends": "alternateBackends allows up to 3 additional backends to be assigned to the route. Only the Service kind is allowed, and it will be defaulted to Service. Use the weight field in RouteTargetReference object to specify relative preference.", + "port": "If specified, the port to be used by the router. Most routers will use all endpoints exposed by the service by default - set this value to instruct routers which port to use.", + "tls": "The tls field provides the ability to configure certificates and termination for the route.", + "wildcardPolicy": "Wildcard policy if any for the route. Currently only 'Subdomain' or 'None' is allowed.", +} + +func (RouteSpec) SwaggerDoc() map[string]string { + return map_RouteSpec +} + +var map_RouteStatus = map[string]string{ + "": "RouteStatus provides relevant info about the status of a route, including which routers acknowledge it.", + "ingress": "ingress describes the places where the route may be exposed. The list of ingress points may contain duplicate Host or RouterName values. Routes are considered live once they are `Ready`", +} + +func (RouteStatus) SwaggerDoc() map[string]string { + return map_RouteStatus +} + +var map_RouteTargetReference = map[string]string{ + "": "RouteTargetReference specifies the target that resolve into endpoints. Only the 'Service' kind is allowed. Use 'weight' field to emphasize one over others.", + "kind": "The kind of target that the route is referring to. Currently, only 'Service' is allowed", + "name": "name of the service/target that is being referred to. e.g. name of the service", + "weight": "weight as an integer between 0 and 256, default 100, that specifies the target's relative weight against other target reference objects. 0 suppresses requests to this backend.", +} + +func (RouteTargetReference) SwaggerDoc() map[string]string { + return map_RouteTargetReference +} + +var map_RouterShard = map[string]string{ + "": "RouterShard has information of a routing shard and is used to generate host names and routing table entries when a routing shard is allocated for a specific route. Caveat: This is WIP and will likely undergo modifications when sharding\n support is added.", + "shardName": "shardName uniquely identifies a router shard in the \"set\" of routers used for routing traffic to the services.", + "dnsSuffix": "dnsSuffix for the shard ala: shard-1.v3.openshift.com", +} + +func (RouterShard) SwaggerDoc() map[string]string { + return map_RouterShard +} + +var map_TLSConfig = map[string]string{ + "": "TLSConfig defines config used to secure a route and provide termination", + "termination": "termination indicates termination type.\n\n* edge - TLS termination is done by the router and http is used to communicate with the backend (default) * passthrough - Traffic is sent straight to the destination without the router providing TLS termination * reencrypt - TLS termination is done by the router and https is used to communicate with the backend", + "certificate": "certificate provides certificate contents", + "key": "key provides key file contents", + "caCertificate": "caCertificate provides the cert authority certificate contents", + "destinationCACertificate": "destinationCACertificate provides the contents of the ca certificate of the final destination. When using reencrypt termination this file should be provided in order to have routers use it for health checks on the secure connection. If this field is not specified, the router may provide its own destination CA and perform hostname validation using the short service name (service.namespace.svc), which allows infrastructure generated certificates to automatically verify.", + "insecureEdgeTerminationPolicy": "insecureEdgeTerminationPolicy indicates the desired behavior for insecure connections to a route. While each router may make its own decisions on which ports to expose, this is normally port 80.\n\n* Allow - traffic is sent to the server on the insecure port (default) * Disable - no traffic is allowed on the insecure port. * Redirect - clients are redirected to the secure port.", +} + +func (TLSConfig) SwaggerDoc() map[string]string { + return map_TLSConfig +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/security/install.go b/vendor/github.com/openshift/api/security/install.go new file mode 100644 index 0000000000000..c2b04c43298ff --- /dev/null +++ b/vendor/github.com/openshift/api/security/install.go @@ -0,0 +1,26 @@ +package security + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + + securityv1 "github.com/openshift/api/security/v1" +) + +const ( + GroupName = "security.openshift.io" +) + +var ( + schemeBuilder = runtime.NewSchemeBuilder(securityv1.Install) + // Install is a function which adds every version of this group to a scheme + Install = schemeBuilder.AddToScheme +) + +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +func Kind(kind string) schema.GroupKind { + return schema.GroupKind{Group: GroupName, Kind: kind} +} diff --git a/vendor/github.com/openshift/api/security/v1/0000_03_security-openshift_01_scc.crd.yaml b/vendor/github.com/openshift/api/security/v1/0000_03_security-openshift_01_scc.crd.yaml new file mode 100644 index 0000000000000..e8f10ce7d876a --- /dev/null +++ b/vendor/github.com/openshift/api/security/v1/0000_03_security-openshift_01_scc.crd.yaml @@ -0,0 +1,355 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: securitycontextconstraints.security.openshift.io + annotations: + include.release.openshift.io/self-managed-high-availability: "true" +spec: + group: security.openshift.io + names: + kind: SecurityContextConstraints + listKind: SecurityContextConstraintsList + plural: securitycontextconstraints + singular: securitycontextconstraints + scope: Cluster + preserveUnknownFields: false + versions: + - name: v1 + served: true + storage: true + additionalPrinterColumns: + - name: Priv + type: string + JSONPath: .allowPrivilegedContainer + description: Determines if a container can request to be run as privileged + - name: Caps + type: string + JSONPath: .allowedCapabilities + description: A list of capabilities that can be requested to add to the container + - name: SELinux + type: string + JSONPath: .seLinuxContext.type + description: Strategy that will dictate what labels will be set in the SecurityContext + - name: RunAsUser + type: string + JSONPath: .runAsUser.type + description: Strategy that will dictate what RunAsUser is used in the SecurityContext + - name: FSGroup + type: string + JSONPath: .fsGroup.type + description: Strategy that will dictate what fs group is used by the SecurityContext + - name: SupGroup + type: string + JSONPath: .supplementalGroups.type + description: Strategy that will dictate what supplemental groups are used by the + SecurityContext + - name: Priority + type: string + JSONPath: .priority + description: Sort order of SCCs + - name: ReadOnlyRootFS + type: string + JSONPath: .readOnlyRootFilesystem + description: Force containers to run with a read only root file system + - name: Volumes + type: string + JSONPath: .volumes + description: White list of allowed volume plugins + "validation": + "openAPIV3Schema": + description: SecurityContextConstraints governs the ability to make requests + that affect the SecurityContext that will be applied to a container. For historical + reasons SCC was exposed under the core Kubernetes API group. That exposure + is deprecated and will be removed in a future release - users should instead + use the security.openshift.io group to manage SecurityContextConstraints. + type: object + required: + - allowHostDirVolumePlugin + - allowHostIPC + - allowHostNetwork + - allowHostPID + - allowHostPorts + - allowPrivilegedContainer + - allowedCapabilities + - defaultAddCapabilities + - priority + - readOnlyRootFilesystem + - requiredDropCapabilities + - volumes + properties: + allowHostDirVolumePlugin: + description: AllowHostDirVolumePlugin determines if the policy allow containers + to use the HostDir volume plugin + type: boolean + allowHostIPC: + description: AllowHostIPC determines if the policy allows host ipc in the + containers. + type: boolean + allowHostNetwork: + description: AllowHostNetwork determines if the policy allows the use of + HostNetwork in the pod spec. + type: boolean + allowHostPID: + description: AllowHostPID determines if the policy allows host pid in the + containers. + type: boolean + allowHostPorts: + description: AllowHostPorts determines if the policy allows host ports in + the containers. + type: boolean + allowPrivilegeEscalation: + description: AllowPrivilegeEscalation determines if a pod can request to + allow privilege escalation. If unspecified, defaults to true. + type: boolean + nullable: true + allowPrivilegedContainer: + description: AllowPrivilegedContainer determines if a container can request + to be run as privileged. + type: boolean + allowedCapabilities: + description: AllowedCapabilities is a list of capabilities that can be requested + to add to the container. Capabilities in this field maybe added at the + pod author's discretion. You must not list a capability in both AllowedCapabilities + and RequiredDropCapabilities. To allow all capabilities you may use '*'. + type: array + items: + description: Capability represent POSIX capabilities type + type: string + nullable: true + allowedFlexVolumes: + description: AllowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty + or nil indicates that all Flexvolumes may be used. This parameter is + effective only when the usage of the Flexvolumes is allowed in the "Volumes" + field. + type: array + items: + description: AllowedFlexVolume represents a single Flexvolume that is + allowed to be used. + type: object + required: + - driver + properties: + driver: + description: Driver is the name of the Flexvolume driver. + type: string + nullable: true + allowedUnsafeSysctls: + description: "AllowedUnsafeSysctls is a list of explicitly allowed unsafe + sysctls, defaults to none. Each entry is either a plain sysctl name or + ends in \"*\" in which case it is considered as a prefix of allowed sysctls. + Single * means all unsafe sysctls are allowed. Kubelet has to whitelist + all allowed unsafe sysctls explicitly to avoid rejection. \n Examples: + e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows + \"foo.bar\", \"foo.baz\", etc." + type: array + items: + type: string + nullable: true + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + defaultAddCapabilities: + description: DefaultAddCapabilities is the default set of capabilities that + will be added to the container unless the pod spec specifically drops + the capability. You may not list a capabiility in both DefaultAddCapabilities + and RequiredDropCapabilities. + type: array + items: + description: Capability represent POSIX capabilities type + type: string + nullable: true + defaultAllowPrivilegeEscalation: + description: DefaultAllowPrivilegeEscalation controls the default setting + for whether a process can gain more privileges than its parent process. + type: boolean + nullable: true + forbiddenSysctls: + description: "ForbiddenSysctls is a list of explicitly forbidden sysctls, + defaults to none. Each entry is either a plain sysctl name or ends in + \"*\" in which case it is considered as a prefix of forbidden sysctls. + Single * means all sysctls are forbidden. \n Examples: e.g. \"foo/*\" + forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", + \"foo.baz\", etc." + type: array + items: + type: string + nullable: true + fsGroup: + description: FSGroup is the strategy that will dictate what fs group is + used by the SecurityContext. + type: object + properties: + ranges: + description: Ranges are the allowed ranges of fs groups. If you would + like to force a single fs group then supply a single range with the + same start and end. + type: array + items: + description: 'IDRange provides a min/max of an allowed range of IDs. + TODO: this could be reused for UIDs.' + type: object + properties: + max: + description: Max is the end of the range, inclusive. + type: integer + format: int64 + min: + description: Min is the start of the range, inclusive. + type: integer + format: int64 + type: + description: Type is the strategy that will dictate what FSGroup is + used in the SecurityContext. + type: string + nullable: true + groups: + description: The groups that have permission to use this security context + constraints + type: array + items: + type: string + nullable: true + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + priority: + description: Priority influences the sort order of SCCs when evaluating + which SCCs to try first for a given pod request based on access in the + Users and Groups fields. The higher the int, the higher priority. An + unset value is considered a 0 priority. If scores for multiple SCCs are + equal they will be sorted from most restrictive to least restrictive. + If both priorities and restrictions are equal the SCCs will be sorted + by name. + type: integer + format: int32 + nullable: true + readOnlyRootFilesystem: + description: ReadOnlyRootFilesystem when set to true will force containers + to run with a read only root file system. If the container specifically + requests to run with a non-read only root file system the SCC should deny + the pod. If set to false the container may run with a read only root file + system if it wishes but it will not be forced to. + type: boolean + requiredDropCapabilities: + description: RequiredDropCapabilities are the capabilities that will be + dropped from the container. These are required to be dropped and cannot + be added. + type: array + items: + description: Capability represent POSIX capabilities type + type: string + nullable: true + runAsUser: + description: RunAsUser is the strategy that will dictate what RunAsUser + is used in the SecurityContext. + type: object + properties: + type: + description: Type is the strategy that will dictate what RunAsUser is + used in the SecurityContext. + type: string + uid: + description: UID is the user id that containers must run as. Required + for the MustRunAs strategy if not using namespace/service account + allocated uids. + type: integer + format: int64 + uidRangeMax: + description: UIDRangeMax defines the max value for a strategy that allocates + by range. + type: integer + format: int64 + uidRangeMin: + description: UIDRangeMin defines the min value for a strategy that allocates + by range. + type: integer + format: int64 + nullable: true + seLinuxContext: + description: SELinuxContext is the strategy that will dictate what labels + will be set in the SecurityContext. + type: object + properties: + seLinuxOptions: + description: seLinuxOptions required to run as; required for MustRunAs + type: object + properties: + level: + description: Level is SELinux level label that applies to the container. + type: string + role: + description: Role is a SELinux role label that applies to the container. + type: string + type: + description: Type is a SELinux type label that applies to the container. + type: string + user: + description: User is a SELinux user label that applies to the container. + type: string + type: + description: Type is the strategy that will dictate what SELinux context + is used in the SecurityContext. + type: string + nullable: true + seccompProfiles: + description: "SeccompProfiles lists the allowed profiles that may be set + for the pod or container's seccomp annotations. An unset (nil) or empty + value means that no profiles may be specifid by the pod or container.\tThe + wildcard '*' may be used to allow all profiles. When used to generate + a value for a pod the first non-wildcard profile will be used as the default." + type: array + items: + type: string + nullable: true + supplementalGroups: + description: SupplementalGroups is the strategy that will dictate what supplemental + groups are used by the SecurityContext. + type: object + properties: + ranges: + description: Ranges are the allowed ranges of supplemental groups. If + you would like to force a single supplemental group then supply a + single range with the same start and end. + type: array + items: + description: 'IDRange provides a min/max of an allowed range of IDs. + TODO: this could be reused for UIDs.' + type: object + properties: + max: + description: Max is the end of the range, inclusive. + type: integer + format: int64 + min: + description: Min is the start of the range, inclusive. + type: integer + format: int64 + type: + description: Type is the strategy that will dictate what supplemental + groups is used in the SecurityContext. + type: string + nullable: true + users: + description: The users who have permissions to use this security context + constraints + type: array + items: + type: string + nullable: true + volumes: + description: Volumes is a white list of allowed volume plugins. FSType + corresponds directly with the field names of a VolumeSource (azureFile, + configMap, emptyDir). To allow all volumes you may use "*". To allow + no volumes, set to ["none"]. + type: array + items: + description: FS Type gives strong typing to different file systems that + are used by volumes. + type: string + nullable: true diff --git a/vendor/github.com/openshift/api/security/v1/consts.go b/vendor/github.com/openshift/api/security/v1/consts.go new file mode 100644 index 0000000000000..28f8e5ae67853 --- /dev/null +++ b/vendor/github.com/openshift/api/security/v1/consts.go @@ -0,0 +1,10 @@ +package v1 + +const ( + UIDRangeAnnotation = "openshift.io/sa.scc.uid-range" + // SupplementalGroupsAnnotation contains a comma delimited list of allocated supplemental groups + // for the namespace. Groups are in the form of a Block which supports {start}/{length} or {start}-{end} + SupplementalGroupsAnnotation = "openshift.io/sa.scc.supplemental-groups" + MCSAnnotation = "openshift.io/sa.scc.mcs" + ValidatedSCCAnnotation = "openshift.io/scc" +) diff --git a/vendor/github.com/openshift/api/security/v1/doc.go b/vendor/github.com/openshift/api/security/v1/doc.go new file mode 100644 index 0000000000000..44fe37eb2dcd9 --- /dev/null +++ b/vendor/github.com/openshift/api/security/v1/doc.go @@ -0,0 +1,8 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=github.com/openshift/origin/pkg/security/apis/security +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +groupName=security.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/security/v1/generated.pb.go b/vendor/github.com/openshift/api/security/v1/generated.pb.go new file mode 100644 index 0000000000000..7ee402afa34ca --- /dev/null +++ b/vendor/github.com/openshift/api/security/v1/generated.pb.go @@ -0,0 +1,5340 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: github.com/openshift/api/security/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *AllowedFlexVolume) Reset() { *m = AllowedFlexVolume{} } +func (*AllowedFlexVolume) ProtoMessage() {} +func (*AllowedFlexVolume) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{0} +} +func (m *AllowedFlexVolume) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllowedFlexVolume) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *AllowedFlexVolume) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllowedFlexVolume.Merge(m, src) +} +func (m *AllowedFlexVolume) XXX_Size() int { + return m.Size() +} +func (m *AllowedFlexVolume) XXX_DiscardUnknown() { + xxx_messageInfo_AllowedFlexVolume.DiscardUnknown(m) +} + +var xxx_messageInfo_AllowedFlexVolume proto.InternalMessageInfo + +func (m *FSGroupStrategyOptions) Reset() { *m = FSGroupStrategyOptions{} } +func (*FSGroupStrategyOptions) ProtoMessage() {} +func (*FSGroupStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{1} +} +func (m *FSGroupStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FSGroupStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *FSGroupStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_FSGroupStrategyOptions.Merge(m, src) +} +func (m *FSGroupStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *FSGroupStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_FSGroupStrategyOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_FSGroupStrategyOptions proto.InternalMessageInfo + +func (m *IDRange) Reset() { *m = IDRange{} } +func (*IDRange) ProtoMessage() {} +func (*IDRange) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{2} +} +func (m *IDRange) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IDRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IDRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_IDRange.Merge(m, src) +} +func (m *IDRange) XXX_Size() int { + return m.Size() +} +func (m *IDRange) XXX_DiscardUnknown() { + xxx_messageInfo_IDRange.DiscardUnknown(m) +} + +var xxx_messageInfo_IDRange proto.InternalMessageInfo + +func (m *PodSecurityPolicyReview) Reset() { *m = PodSecurityPolicyReview{} } +func (*PodSecurityPolicyReview) ProtoMessage() {} +func (*PodSecurityPolicyReview) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{3} +} +func (m *PodSecurityPolicyReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityPolicyReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodSecurityPolicyReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityPolicyReview.Merge(m, src) +} +func (m *PodSecurityPolicyReview) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityPolicyReview) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityPolicyReview.DiscardUnknown(m) +} + +var xxx_messageInfo_PodSecurityPolicyReview proto.InternalMessageInfo + +func (m *PodSecurityPolicyReviewSpec) Reset() { *m = PodSecurityPolicyReviewSpec{} } +func (*PodSecurityPolicyReviewSpec) ProtoMessage() {} +func (*PodSecurityPolicyReviewSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{4} +} +func (m *PodSecurityPolicyReviewSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityPolicyReviewSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodSecurityPolicyReviewSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityPolicyReviewSpec.Merge(m, src) +} +func (m *PodSecurityPolicyReviewSpec) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityPolicyReviewSpec) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityPolicyReviewSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_PodSecurityPolicyReviewSpec proto.InternalMessageInfo + +func (m *PodSecurityPolicyReviewStatus) Reset() { *m = PodSecurityPolicyReviewStatus{} } +func (*PodSecurityPolicyReviewStatus) ProtoMessage() {} +func (*PodSecurityPolicyReviewStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{5} +} +func (m *PodSecurityPolicyReviewStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityPolicyReviewStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodSecurityPolicyReviewStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityPolicyReviewStatus.Merge(m, src) +} +func (m *PodSecurityPolicyReviewStatus) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityPolicyReviewStatus) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityPolicyReviewStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_PodSecurityPolicyReviewStatus proto.InternalMessageInfo + +func (m *PodSecurityPolicySelfSubjectReview) Reset() { *m = PodSecurityPolicySelfSubjectReview{} } +func (*PodSecurityPolicySelfSubjectReview) ProtoMessage() {} +func (*PodSecurityPolicySelfSubjectReview) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{6} +} +func (m *PodSecurityPolicySelfSubjectReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityPolicySelfSubjectReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodSecurityPolicySelfSubjectReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityPolicySelfSubjectReview.Merge(m, src) +} +func (m *PodSecurityPolicySelfSubjectReview) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityPolicySelfSubjectReview) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityPolicySelfSubjectReview.DiscardUnknown(m) +} + +var xxx_messageInfo_PodSecurityPolicySelfSubjectReview proto.InternalMessageInfo + +func (m *PodSecurityPolicySelfSubjectReviewSpec) Reset() { + *m = PodSecurityPolicySelfSubjectReviewSpec{} +} +func (*PodSecurityPolicySelfSubjectReviewSpec) ProtoMessage() {} +func (*PodSecurityPolicySelfSubjectReviewSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{7} +} +func (m *PodSecurityPolicySelfSubjectReviewSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityPolicySelfSubjectReviewSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodSecurityPolicySelfSubjectReviewSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityPolicySelfSubjectReviewSpec.Merge(m, src) +} +func (m *PodSecurityPolicySelfSubjectReviewSpec) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityPolicySelfSubjectReviewSpec) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityPolicySelfSubjectReviewSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_PodSecurityPolicySelfSubjectReviewSpec proto.InternalMessageInfo + +func (m *PodSecurityPolicySubjectReview) Reset() { *m = PodSecurityPolicySubjectReview{} } +func (*PodSecurityPolicySubjectReview) ProtoMessage() {} +func (*PodSecurityPolicySubjectReview) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{8} +} +func (m *PodSecurityPolicySubjectReview) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityPolicySubjectReview) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodSecurityPolicySubjectReview) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityPolicySubjectReview.Merge(m, src) +} +func (m *PodSecurityPolicySubjectReview) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityPolicySubjectReview) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityPolicySubjectReview.DiscardUnknown(m) +} + +var xxx_messageInfo_PodSecurityPolicySubjectReview proto.InternalMessageInfo + +func (m *PodSecurityPolicySubjectReviewSpec) Reset() { *m = PodSecurityPolicySubjectReviewSpec{} } +func (*PodSecurityPolicySubjectReviewSpec) ProtoMessage() {} +func (*PodSecurityPolicySubjectReviewSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{9} +} +func (m *PodSecurityPolicySubjectReviewSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityPolicySubjectReviewSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodSecurityPolicySubjectReviewSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityPolicySubjectReviewSpec.Merge(m, src) +} +func (m *PodSecurityPolicySubjectReviewSpec) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityPolicySubjectReviewSpec) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityPolicySubjectReviewSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_PodSecurityPolicySubjectReviewSpec proto.InternalMessageInfo + +func (m *PodSecurityPolicySubjectReviewStatus) Reset() { *m = PodSecurityPolicySubjectReviewStatus{} } +func (*PodSecurityPolicySubjectReviewStatus) ProtoMessage() {} +func (*PodSecurityPolicySubjectReviewStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{10} +} +func (m *PodSecurityPolicySubjectReviewStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PodSecurityPolicySubjectReviewStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PodSecurityPolicySubjectReviewStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_PodSecurityPolicySubjectReviewStatus.Merge(m, src) +} +func (m *PodSecurityPolicySubjectReviewStatus) XXX_Size() int { + return m.Size() +} +func (m *PodSecurityPolicySubjectReviewStatus) XXX_DiscardUnknown() { + xxx_messageInfo_PodSecurityPolicySubjectReviewStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_PodSecurityPolicySubjectReviewStatus proto.InternalMessageInfo + +func (m *RangeAllocation) Reset() { *m = RangeAllocation{} } +func (*RangeAllocation) ProtoMessage() {} +func (*RangeAllocation) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{11} +} +func (m *RangeAllocation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RangeAllocation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RangeAllocation) XXX_Merge(src proto.Message) { + xxx_messageInfo_RangeAllocation.Merge(m, src) +} +func (m *RangeAllocation) XXX_Size() int { + return m.Size() +} +func (m *RangeAllocation) XXX_DiscardUnknown() { + xxx_messageInfo_RangeAllocation.DiscardUnknown(m) +} + +var xxx_messageInfo_RangeAllocation proto.InternalMessageInfo + +func (m *RangeAllocationList) Reset() { *m = RangeAllocationList{} } +func (*RangeAllocationList) ProtoMessage() {} +func (*RangeAllocationList) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{12} +} +func (m *RangeAllocationList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RangeAllocationList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RangeAllocationList) XXX_Merge(src proto.Message) { + xxx_messageInfo_RangeAllocationList.Merge(m, src) +} +func (m *RangeAllocationList) XXX_Size() int { + return m.Size() +} +func (m *RangeAllocationList) XXX_DiscardUnknown() { + xxx_messageInfo_RangeAllocationList.DiscardUnknown(m) +} + +var xxx_messageInfo_RangeAllocationList proto.InternalMessageInfo + +func (m *RunAsUserStrategyOptions) Reset() { *m = RunAsUserStrategyOptions{} } +func (*RunAsUserStrategyOptions) ProtoMessage() {} +func (*RunAsUserStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{13} +} +func (m *RunAsUserStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RunAsUserStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *RunAsUserStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_RunAsUserStrategyOptions.Merge(m, src) +} +func (m *RunAsUserStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *RunAsUserStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_RunAsUserStrategyOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_RunAsUserStrategyOptions proto.InternalMessageInfo + +func (m *SELinuxContextStrategyOptions) Reset() { *m = SELinuxContextStrategyOptions{} } +func (*SELinuxContextStrategyOptions) ProtoMessage() {} +func (*SELinuxContextStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{14} +} +func (m *SELinuxContextStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SELinuxContextStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SELinuxContextStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_SELinuxContextStrategyOptions.Merge(m, src) +} +func (m *SELinuxContextStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *SELinuxContextStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_SELinuxContextStrategyOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_SELinuxContextStrategyOptions proto.InternalMessageInfo + +func (m *SecurityContextConstraints) Reset() { *m = SecurityContextConstraints{} } +func (*SecurityContextConstraints) ProtoMessage() {} +func (*SecurityContextConstraints) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{15} +} +func (m *SecurityContextConstraints) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SecurityContextConstraints) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SecurityContextConstraints) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecurityContextConstraints.Merge(m, src) +} +func (m *SecurityContextConstraints) XXX_Size() int { + return m.Size() +} +func (m *SecurityContextConstraints) XXX_DiscardUnknown() { + xxx_messageInfo_SecurityContextConstraints.DiscardUnknown(m) +} + +var xxx_messageInfo_SecurityContextConstraints proto.InternalMessageInfo + +func (m *SecurityContextConstraintsList) Reset() { *m = SecurityContextConstraintsList{} } +func (*SecurityContextConstraintsList) ProtoMessage() {} +func (*SecurityContextConstraintsList) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{16} +} +func (m *SecurityContextConstraintsList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SecurityContextConstraintsList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SecurityContextConstraintsList) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecurityContextConstraintsList.Merge(m, src) +} +func (m *SecurityContextConstraintsList) XXX_Size() int { + return m.Size() +} +func (m *SecurityContextConstraintsList) XXX_DiscardUnknown() { + xxx_messageInfo_SecurityContextConstraintsList.DiscardUnknown(m) +} + +var xxx_messageInfo_SecurityContextConstraintsList proto.InternalMessageInfo + +func (m *ServiceAccountPodSecurityPolicyReviewStatus) Reset() { + *m = ServiceAccountPodSecurityPolicyReviewStatus{} +} +func (*ServiceAccountPodSecurityPolicyReviewStatus) ProtoMessage() {} +func (*ServiceAccountPodSecurityPolicyReviewStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{17} +} +func (m *ServiceAccountPodSecurityPolicyReviewStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ServiceAccountPodSecurityPolicyReviewStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ServiceAccountPodSecurityPolicyReviewStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceAccountPodSecurityPolicyReviewStatus.Merge(m, src) +} +func (m *ServiceAccountPodSecurityPolicyReviewStatus) XXX_Size() int { + return m.Size() +} +func (m *ServiceAccountPodSecurityPolicyReviewStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceAccountPodSecurityPolicyReviewStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ServiceAccountPodSecurityPolicyReviewStatus proto.InternalMessageInfo + +func (m *SupplementalGroupsStrategyOptions) Reset() { *m = SupplementalGroupsStrategyOptions{} } +func (*SupplementalGroupsStrategyOptions) ProtoMessage() {} +func (*SupplementalGroupsStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_af65d9655aa67551, []int{18} +} +func (m *SupplementalGroupsStrategyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SupplementalGroupsStrategyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *SupplementalGroupsStrategyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_SupplementalGroupsStrategyOptions.Merge(m, src) +} +func (m *SupplementalGroupsStrategyOptions) XXX_Size() int { + return m.Size() +} +func (m *SupplementalGroupsStrategyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_SupplementalGroupsStrategyOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_SupplementalGroupsStrategyOptions proto.InternalMessageInfo + +func init() { + proto.RegisterType((*AllowedFlexVolume)(nil), "github.com.openshift.api.security.v1.AllowedFlexVolume") + proto.RegisterType((*FSGroupStrategyOptions)(nil), "github.com.openshift.api.security.v1.FSGroupStrategyOptions") + proto.RegisterType((*IDRange)(nil), "github.com.openshift.api.security.v1.IDRange") + proto.RegisterType((*PodSecurityPolicyReview)(nil), "github.com.openshift.api.security.v1.PodSecurityPolicyReview") + proto.RegisterType((*PodSecurityPolicyReviewSpec)(nil), "github.com.openshift.api.security.v1.PodSecurityPolicyReviewSpec") + proto.RegisterType((*PodSecurityPolicyReviewStatus)(nil), "github.com.openshift.api.security.v1.PodSecurityPolicyReviewStatus") + proto.RegisterType((*PodSecurityPolicySelfSubjectReview)(nil), "github.com.openshift.api.security.v1.PodSecurityPolicySelfSubjectReview") + proto.RegisterType((*PodSecurityPolicySelfSubjectReviewSpec)(nil), "github.com.openshift.api.security.v1.PodSecurityPolicySelfSubjectReviewSpec") + proto.RegisterType((*PodSecurityPolicySubjectReview)(nil), "github.com.openshift.api.security.v1.PodSecurityPolicySubjectReview") + proto.RegisterType((*PodSecurityPolicySubjectReviewSpec)(nil), "github.com.openshift.api.security.v1.PodSecurityPolicySubjectReviewSpec") + proto.RegisterType((*PodSecurityPolicySubjectReviewStatus)(nil), "github.com.openshift.api.security.v1.PodSecurityPolicySubjectReviewStatus") + proto.RegisterType((*RangeAllocation)(nil), "github.com.openshift.api.security.v1.RangeAllocation") + proto.RegisterType((*RangeAllocationList)(nil), "github.com.openshift.api.security.v1.RangeAllocationList") + proto.RegisterType((*RunAsUserStrategyOptions)(nil), "github.com.openshift.api.security.v1.RunAsUserStrategyOptions") + proto.RegisterType((*SELinuxContextStrategyOptions)(nil), "github.com.openshift.api.security.v1.SELinuxContextStrategyOptions") + proto.RegisterType((*SecurityContextConstraints)(nil), "github.com.openshift.api.security.v1.SecurityContextConstraints") + proto.RegisterType((*SecurityContextConstraintsList)(nil), "github.com.openshift.api.security.v1.SecurityContextConstraintsList") + proto.RegisterType((*ServiceAccountPodSecurityPolicyReviewStatus)(nil), "github.com.openshift.api.security.v1.ServiceAccountPodSecurityPolicyReviewStatus") + proto.RegisterType((*SupplementalGroupsStrategyOptions)(nil), "github.com.openshift.api.security.v1.SupplementalGroupsStrategyOptions") +} + +func init() { + proto.RegisterFile("github.com/openshift/api/security/v1/generated.proto", fileDescriptor_af65d9655aa67551) +} + +var fileDescriptor_af65d9655aa67551 = []byte{ + // 1748 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x6f, 0x1c, 0x49, + 0x15, 0x77, 0x7b, 0xfc, 0x35, 0x65, 0xc7, 0x1f, 0x65, 0xc7, 0xe9, 0x35, 0xeb, 0x19, 0xd3, 0x0e, + 0x2b, 0x0b, 0xd8, 0x19, 0x1c, 0x2d, 0x6c, 0xd0, 0xb2, 0xd1, 0x4e, 0x7b, 0xd6, 0x59, 0x23, 0x27, + 0x99, 0xad, 0x59, 0x47, 0x28, 0x8a, 0x10, 0xe5, 0x9e, 0x9a, 0x71, 0xc5, 0xfd, 0x45, 0x57, 0xf5, + 0xc4, 0x23, 0x2e, 0x91, 0xb8, 0x70, 0x44, 0xe2, 0x8a, 0x38, 0xc3, 0x3f, 0xc0, 0x05, 0x01, 0xd7, + 0x48, 0x20, 0x91, 0x13, 0xca, 0x69, 0x44, 0x06, 0x71, 0xe2, 0xc8, 0x2d, 0x27, 0x54, 0x35, 0x35, + 0x1f, 0xdd, 0xd3, 0x3d, 0x9e, 0x84, 0x24, 0xe2, 0x36, 0xfd, 0x3e, 0x7e, 0xbf, 0xf7, 0x5e, 0xbf, + 0x7e, 0xf5, 0x6a, 0xc0, 0x47, 0x0d, 0xca, 0xcf, 0xc2, 0xd3, 0x82, 0xe5, 0x39, 0x45, 0xcf, 0x27, + 0x2e, 0x3b, 0xa3, 0x75, 0x5e, 0xc4, 0x3e, 0x2d, 0x32, 0x62, 0x85, 0x01, 0xe5, 0xad, 0x62, 0x73, + 0xbf, 0xd8, 0x20, 0x2e, 0x09, 0x30, 0x27, 0xb5, 0x82, 0x1f, 0x78, 0xdc, 0x83, 0xd7, 0x07, 0x5e, + 0x85, 0xbe, 0x57, 0x01, 0xfb, 0xb4, 0xd0, 0xf3, 0x2a, 0x34, 0xf7, 0xb7, 0x3e, 0x1c, 0xc2, 0x6e, + 0x78, 0x0d, 0xaf, 0x28, 0x9d, 0x4f, 0xc3, 0xba, 0x7c, 0x92, 0x0f, 0xf2, 0x57, 0x17, 0x74, 0xcb, + 0x38, 0xbf, 0xc9, 0x0a, 0xd4, 0x93, 0xe4, 0x96, 0x17, 0x90, 0x04, 0xe2, 0xad, 0x8f, 0x06, 0x36, + 0x0e, 0xb6, 0xce, 0xa8, 0x4b, 0x82, 0x56, 0xd1, 0x3f, 0x6f, 0x08, 0x01, 0x2b, 0x3a, 0x84, 0xe3, + 0x24, 0xaf, 0xef, 0xa5, 0x79, 0x05, 0xa1, 0xcb, 0xa9, 0x43, 0x8a, 0xcc, 0x3a, 0x23, 0x0e, 0x8e, + 0xfb, 0x19, 0x9f, 0x80, 0xb5, 0x92, 0x6d, 0x7b, 0x8f, 0x49, 0xed, 0xd0, 0x26, 0x17, 0xf7, 0x3d, + 0x3b, 0x74, 0x08, 0xfc, 0x00, 0xcc, 0xd5, 0x02, 0xda, 0x24, 0x81, 0xae, 0xed, 0x68, 0x7b, 0x59, + 0x73, 0xf9, 0x69, 0x3b, 0x3f, 0xd5, 0x69, 0xe7, 0xe7, 0xca, 0x52, 0x8a, 0x94, 0xd6, 0xf8, 0xad, + 0x06, 0x36, 0x0f, 0xab, 0xb7, 0x03, 0x2f, 0xf4, 0xab, 0x5c, 0xa0, 0x36, 0x5a, 0xf7, 0x7c, 0x4e, + 0x3d, 0x97, 0xc1, 0x8f, 0xc1, 0x0c, 0x6f, 0xf9, 0x44, 0x01, 0xec, 0x2a, 0x80, 0x99, 0xaf, 0x5a, + 0x3e, 0x79, 0xd9, 0xce, 0xaf, 0xc7, 0xbc, 0x84, 0x18, 0x49, 0x07, 0x78, 0x02, 0xe6, 0x02, 0xec, + 0x36, 0x08, 0xd3, 0xa7, 0x77, 0x32, 0x7b, 0x8b, 0x37, 0x3e, 0x2c, 0x4c, 0xf2, 0x22, 0x0a, 0x47, + 0x65, 0x24, 0xbc, 0x06, 0xa1, 0xca, 0x47, 0x86, 0x14, 0x98, 0x71, 0x1b, 0xcc, 0x2b, 0x13, 0xb8, + 0x0d, 0x32, 0x0e, 0x75, 0x65, 0x64, 0x19, 0x73, 0x51, 0xd9, 0x67, 0xee, 0x50, 0x17, 0x09, 0xb9, + 0x54, 0xe3, 0x0b, 0x7d, 0x3a, 0xa6, 0xc6, 0x17, 0x48, 0xc8, 0x8d, 0x7f, 0x6b, 0xe0, 0x5a, 0xc5, + 0xab, 0x55, 0x15, 0x77, 0xc5, 0xb3, 0xa9, 0xd5, 0x42, 0xa4, 0x49, 0xc9, 0x63, 0x68, 0x81, 0x19, + 0xe6, 0x13, 0x4b, 0x42, 0x2f, 0xde, 0x28, 0x4d, 0x16, 0x79, 0x0a, 0x58, 0xd5, 0x27, 0x96, 0xb9, + 0xd4, 0xab, 0x9b, 0x78, 0x42, 0x12, 0x1c, 0x9e, 0x83, 0x39, 0xc6, 0x31, 0x0f, 0x99, 0x0c, 0x71, + 0xf1, 0xc6, 0xc1, 0xff, 0x46, 0x23, 0xa1, 0x06, 0x65, 0xeb, 0x3e, 0x23, 0x45, 0x61, 0xfc, 0x41, + 0x03, 0x5f, 0x1b, 0x13, 0x20, 0xfc, 0x12, 0x2c, 0x70, 0xe2, 0xf8, 0x36, 0xe6, 0x44, 0x65, 0xbd, + 0x5b, 0xe8, 0x76, 0xa2, 0x0c, 0x40, 0xf4, 0xb8, 0x22, 0xff, 0x4a, 0x99, 0xc9, 0xbc, 0x56, 0x15, + 0xdd, 0x42, 0x4f, 0x8a, 0xfa, 0x30, 0xf0, 0x08, 0xac, 0x33, 0x12, 0x34, 0xa9, 0x45, 0x4a, 0x96, + 0xe5, 0x85, 0x2e, 0xbf, 0x8b, 0x1d, 0xd5, 0x0d, 0x59, 0xf3, 0x5a, 0xa7, 0x9d, 0x5f, 0xaf, 0x8e, + 0xaa, 0x51, 0x92, 0x8f, 0xf1, 0x17, 0x0d, 0x6c, 0x8f, 0xcd, 0x1b, 0xfe, 0x4e, 0x03, 0x9b, 0xb8, + 0xdb, 0xff, 0x51, 0x54, 0xa6, 0x6b, 0xb2, 0xfd, 0xbe, 0x9c, 0xac, 0xba, 0x51, 0xe7, 0xf1, 0xb5, + 0xce, 0xa9, 0xe4, 0x37, 0x4b, 0x89, 0xc4, 0x28, 0x25, 0x20, 0xe3, 0x17, 0xd3, 0xc0, 0x18, 0x41, + 0xae, 0x12, 0xbb, 0x5e, 0x0d, 0x4f, 0x1f, 0x11, 0x8b, 0xab, 0x26, 0x74, 0x23, 0x4d, 0x78, 0xfc, + 0x9a, 0xdd, 0x31, 0x82, 0x9b, 0xda, 0x8f, 0x41, 0xac, 0x1f, 0x7f, 0xf8, 0xba, 0x8c, 0x11, 0xb6, + 0xf1, 0x6d, 0xf9, 0x33, 0xf0, 0xc1, 0x64, 0x11, 0xbf, 0x85, 0x06, 0x35, 0x9e, 0x4c, 0x83, 0xdc, + 0xf8, 0xe8, 0xe1, 0xa3, 0xc8, 0x3b, 0xf8, 0xe2, 0x8d, 0x54, 0xe4, 0xff, 0xa9, 0xfe, 0x7f, 0xd4, + 0x92, 0x5a, 0xf1, 0x1d, 0x14, 0x1f, 0xee, 0x80, 0x99, 0x90, 0x91, 0x40, 0xe6, 0x9a, 0x1d, 0xd4, + 0xe3, 0x84, 0x91, 0x00, 0x49, 0x0d, 0x34, 0xc0, 0x5c, 0x43, 0x9c, 0x2d, 0x4c, 0xcf, 0xc8, 0x91, + 0x01, 0x44, 0xfc, 0xf2, 0xb4, 0x61, 0x48, 0x69, 0x8c, 0xff, 0x68, 0xe0, 0xfa, 0x24, 0x05, 0x80, + 0x15, 0x90, 0x55, 0x5f, 0xa3, 0xd9, 0x1a, 0x97, 0xc2, 0x3d, 0xe5, 0x5a, 0x27, 0x01, 0x71, 0x2d, + 0x62, 0x5e, 0xe9, 0xb4, 0xf3, 0xd9, 0x52, 0xcf, 0x13, 0x0d, 0x40, 0xc4, 0xd9, 0x1a, 0x10, 0xcc, + 0x3c, 0x57, 0xa5, 0x30, 0x38, 0xb0, 0xa4, 0x14, 0x29, 0x6d, 0xa4, 0x76, 0x99, 0x37, 0xd3, 0xb8, + 0xbf, 0xd7, 0xc0, 0x8a, 0x3c, 0x02, 0x45, 0x60, 0x16, 0x16, 0x07, 0x35, 0xfc, 0x09, 0x58, 0x10, + 0x2b, 0x45, 0x0d, 0x73, 0xac, 0xf2, 0xfb, 0xce, 0x10, 0x4d, 0x7f, 0x95, 0x28, 0xf8, 0xe7, 0x0d, + 0x21, 0x60, 0x05, 0x61, 0x3d, 0xc8, 0xf8, 0x0e, 0xe1, 0xd8, 0x84, 0x8a, 0x13, 0x0c, 0x64, 0xa8, + 0x8f, 0x0a, 0x77, 0xc1, 0xac, 0x3c, 0x83, 0x55, 0xbe, 0x57, 0x94, 0xf1, 0xac, 0x8c, 0x04, 0x75, + 0x75, 0xf0, 0x7d, 0x30, 0x23, 0x43, 0x10, 0x99, 0x2e, 0x99, 0x0b, 0xe2, 0x95, 0x96, 0x31, 0xc7, + 0x48, 0x4a, 0x8d, 0xbf, 0x69, 0x60, 0x3d, 0x16, 0xf8, 0x31, 0x65, 0x1c, 0x3e, 0x1c, 0x09, 0xbe, + 0x30, 0x59, 0xf0, 0xc2, 0x5b, 0x86, 0xde, 0x2f, 0x57, 0x4f, 0x32, 0x14, 0xf8, 0x03, 0x30, 0x4b, + 0x39, 0x71, 0x7a, 0x8b, 0xc8, 0x77, 0x27, 0xfb, 0xae, 0x62, 0x71, 0x0e, 0xf2, 0x3d, 0x12, 0x58, + 0xa8, 0x0b, 0x69, 0xfc, 0x5d, 0x03, 0x3a, 0x0a, 0xdd, 0x12, 0x13, 0x8d, 0x1b, 0xdf, 0x9d, 0xbe, + 0x1f, 0xd9, 0x9d, 0xbe, 0x11, 0xdb, 0x9d, 0xae, 0x8e, 0xf8, 0x0d, 0x6d, 0x4f, 0xef, 0x81, 0x4c, + 0x48, 0x6b, 0x6a, 0x79, 0x99, 0x17, 0x8b, 0xcb, 0xc9, 0x51, 0x19, 0x09, 0x19, 0xdc, 0x07, 0x8b, + 0x21, 0xad, 0xc9, 0xf0, 0xee, 0x50, 0x57, 0x56, 0x3a, 0x63, 0xae, 0x74, 0xda, 0xf9, 0xc5, 0x13, + 0xb5, 0x19, 0x89, 0x15, 0x68, 0xd8, 0x26, 0xe2, 0x82, 0x2f, 0xf4, 0x99, 0x04, 0x17, 0x7c, 0x81, + 0x86, 0x6d, 0x8c, 0x3f, 0x6b, 0x60, 0xbb, 0xfa, 0xf9, 0x31, 0x75, 0xc3, 0x8b, 0x03, 0xcf, 0xe5, + 0xe4, 0x82, 0xc7, 0xb3, 0xbb, 0x15, 0xc9, 0xee, 0x9b, 0xb1, 0xec, 0xb6, 0x92, 0x9d, 0x87, 0x52, + 0xfc, 0x31, 0x58, 0x66, 0x44, 0xda, 0x28, 0x44, 0x35, 0xf7, 0x8c, 0xa4, 0xcf, 0x43, 0xa1, 0x29, + 0x4b, 0x13, 0x76, 0xda, 0xf9, 0xe5, 0xa8, 0x0c, 0xc5, 0xd0, 0x8c, 0x5f, 0xaf, 0x81, 0xad, 0xde, + 0x60, 0x50, 0x51, 0x1c, 0x78, 0x2e, 0xe3, 0x01, 0xa6, 0x2e, 0x67, 0xef, 0xe0, 0x83, 0xd9, 0x03, + 0x0b, 0x7e, 0x40, 0x3d, 0xc1, 0x2f, 0x53, 0x9b, 0x35, 0x97, 0x44, 0x87, 0x56, 0x94, 0x0c, 0xf5, + 0xb5, 0xf0, 0x21, 0xd0, 0xe5, 0x60, 0xa9, 0x04, 0xb4, 0x49, 0x6d, 0xd2, 0x20, 0x35, 0x11, 0x30, + 0x16, 0x01, 0xc8, 0xf7, 0xbb, 0x60, 0xee, 0x28, 0x26, 0xbd, 0x94, 0x62, 0x87, 0x52, 0x11, 0x20, + 0x03, 0x9b, 0x35, 0x52, 0xc7, 0xa1, 0xcd, 0x4b, 0xb5, 0xda, 0x01, 0xf6, 0xf1, 0x29, 0xb5, 0x29, + 0xa7, 0x84, 0xe9, 0x33, 0x72, 0xb0, 0x7e, 0x22, 0x76, 0x98, 0x72, 0xa2, 0xc5, 0xcb, 0x76, 0x7e, + 0x7b, 0xf4, 0xaa, 0x53, 0xe8, 0x9b, 0xb4, 0x50, 0x0a, 0x34, 0x6c, 0x01, 0x3d, 0x20, 0x3f, 0x0d, + 0x69, 0x40, 0x6a, 0xe5, 0xc0, 0xf3, 0x23, 0xb4, 0xb3, 0x92, 0xf6, 0x53, 0x91, 0x0e, 0x4a, 0xb1, + 0xb9, 0x9c, 0x38, 0x15, 0x1e, 0x3e, 0x02, 0xeb, 0x6a, 0x4c, 0x47, 0x58, 0xe7, 0x24, 0xeb, 0x4d, + 0xb1, 0x78, 0x96, 0x46, 0xd5, 0x97, 0x13, 0x26, 0x81, 0xf6, 0xdf, 0xdc, 0x17, 0x1e, 0xe3, 0x65, + 0x1a, 0x74, 0xef, 0x5d, 0x15, 0x3b, 0x6c, 0x50, 0x57, 0x9f, 0x4f, 0x78, 0x73, 0x09, 0x76, 0x28, + 0x15, 0x01, 0x16, 0xc1, 0x7c, 0x53, 0x3e, 0x33, 0x7d, 0x41, 0x46, 0x7f, 0xb5, 0xd3, 0xce, 0xcf, + 0x77, 0x4d, 0x44, 0xc4, 0x73, 0x87, 0x55, 0xf9, 0x41, 0xf5, 0xac, 0xe0, 0xcf, 0x35, 0x00, 0x71, + 0xfc, 0x1a, 0xc8, 0xf4, 0xab, 0x72, 0xf0, 0x7d, 0x3c, 0xd9, 0xe0, 0x1b, 0xb9, 0x46, 0x9a, 0x5b, + 0x2a, 0x05, 0x38, 0xa2, 0x62, 0x28, 0x81, 0x0e, 0x96, 0xc1, 0x6a, 0x3f, 0xa5, 0xbb, 0x84, 0x3f, + 0xf6, 0x82, 0x73, 0x3d, 0x2b, 0x8b, 0xa1, 0x2b, 0xa4, 0xd5, 0x52, 0x4c, 0x8f, 0x46, 0x3c, 0xe0, + 0x2d, 0xb0, 0xdc, 0x97, 0x55, 0xbc, 0x80, 0x33, 0x1d, 0x48, 0x8c, 0x4d, 0x85, 0xb1, 0x5c, 0x8a, + 0x68, 0x51, 0xcc, 0x1a, 0xde, 0x04, 0x4b, 0x03, 0xc9, 0x51, 0x59, 0x5f, 0x94, 0xde, 0x1b, 0xca, + 0x7b, 0xa9, 0x34, 0xa4, 0x43, 0x11, 0xcb, 0x88, 0xe7, 0x51, 0xe5, 0x40, 0x5f, 0x4a, 0xf1, 0x3c, + 0xaa, 0x1c, 0xa0, 0x88, 0x25, 0x74, 0x40, 0xbe, 0xf7, 0x3d, 0x44, 0xbe, 0xc6, 0xcf, 0x99, 0x85, + 0x6d, 0x79, 0x8e, 0xe8, 0x9b, 0x12, 0x6c, 0xb7, 0xd3, 0xce, 0xe7, 0xcb, 0xe3, 0x4d, 0xd1, 0x65, + 0x58, 0xf0, 0x47, 0xf1, 0xb9, 0x31, 0xc4, 0x73, 0x4d, 0xf2, 0xbc, 0x3f, 0x3a, 0x33, 0x86, 0x08, + 0x52, 0xbd, 0x45, 0x23, 0xf5, 0xe6, 0xa9, 0x9a, 0x9d, 0xfa, 0x95, 0x57, 0xb9, 0xa5, 0x8e, 0x3d, + 0x3a, 0x06, 0xaf, 0x30, 0x6a, 0x86, 0x62, 0x94, 0xd0, 0x03, 0xd9, 0xa0, 0x77, 0x48, 0xea, 0xcb, + 0x92, 0xff, 0xd6, 0x84, 0xa7, 0x77, 0xca, 0x99, 0x6c, 0xae, 0x29, 0xea, 0x6c, 0xdf, 0x02, 0x0d, + 0x38, 0xe0, 0xaf, 0x34, 0x00, 0x59, 0xe8, 0xfb, 0x36, 0x71, 0x88, 0xcb, 0xb1, 0xdd, 0x5d, 0x37, + 0xf5, 0x15, 0x49, 0x7d, 0x7b, 0xc2, 0xd4, 0x47, 0xfc, 0xe3, 0x31, 0xf4, 0xbf, 0xa7, 0x51, 0x53, + 0x94, 0x40, 0x0f, 0x1b, 0x60, 0xbe, 0xce, 0xe4, 0x6f, 0x7d, 0x55, 0x46, 0xf2, 0x83, 0xc9, 0x22, + 0x49, 0xfe, 0x4b, 0xc7, 0x5c, 0x51, 0xf4, 0xf3, 0x4a, 0x8f, 0x7a, 0xe8, 0xf0, 0x3e, 0xd8, 0x0c, + 0x08, 0xae, 0xdd, 0x73, 0xed, 0x16, 0xf2, 0x3c, 0x7e, 0x48, 0x6d, 0xc2, 0x5a, 0x8c, 0x13, 0x47, + 0x5f, 0x93, 0xdd, 0xd4, 0xbf, 0xf1, 0xa2, 0x44, 0x2b, 0x94, 0xe2, 0x0d, 0xf3, 0x60, 0x56, 0xac, + 0xf4, 0x4c, 0x87, 0x72, 0x8a, 0x65, 0xc5, 0x1a, 0x25, 0xea, 0xcd, 0x50, 0x57, 0x3e, 0xb4, 0xeb, + 0xaf, 0xa7, 0xed, 0xfa, 0xf0, 0x53, 0xb0, 0xc2, 0x88, 0x65, 0x79, 0x8e, 0x5f, 0x09, 0xbc, 0xba, + 0x00, 0xd7, 0x37, 0xa4, 0xf1, 0x7a, 0xa7, 0x9d, 0x5f, 0xa9, 0x46, 0x55, 0x28, 0x6e, 0x0b, 0x8f, + 0xc1, 0x86, 0x1a, 0x55, 0x27, 0x2e, 0xc3, 0x75, 0x52, 0x6d, 0x31, 0x8b, 0xdb, 0x4c, 0xd7, 0x25, + 0x86, 0xde, 0x69, 0xe7, 0x37, 0x4a, 0x09, 0x7a, 0x94, 0xe8, 0x05, 0x3f, 0x03, 0xab, 0x75, 0x2f, + 0x38, 0xa5, 0xb5, 0x1a, 0x71, 0x7b, 0x48, 0xef, 0x49, 0xa4, 0x0d, 0x31, 0xde, 0x0e, 0x63, 0x3a, + 0x34, 0x62, 0x6d, 0xfc, 0x4b, 0x03, 0xb9, 0xf4, 0xf5, 0xe4, 0x1d, 0xac, 0xc5, 0x24, 0xba, 0x16, + 0x7f, 0x36, 0xe9, 0x1f, 0x24, 0x69, 0x21, 0xa7, 0x6c, 0xc8, 0xbf, 0x99, 0x06, 0xdf, 0x7a, 0x85, + 0x7f, 0x55, 0xe0, 0x5f, 0x35, 0x70, 0xdd, 0x9f, 0xe0, 0x4a, 0xa7, 0x2a, 0xf2, 0x26, 0x6f, 0xc9, + 0xdf, 0x56, 0x09, 0x4c, 0x74, 0xa5, 0x44, 0x13, 0x45, 0x29, 0xee, 0xb9, 0x2e, 0x76, 0x48, 0xfc, + 0x9e, 0x7b, 0x17, 0x3b, 0x04, 0x49, 0x8d, 0xf1, 0x27, 0x0d, 0x7c, 0xfd, 0xd2, 0x99, 0x01, 0xcd, + 0xc8, 0xb6, 0x5d, 0x88, 0x6d, 0xdb, 0xb9, 0x74, 0x80, 0xb7, 0xfe, 0x97, 0xac, 0xb9, 0xf7, 0xf4, + 0x45, 0x6e, 0xea, 0xd9, 0x8b, 0xdc, 0xd4, 0xf3, 0x17, 0xb9, 0xa9, 0x27, 0x9d, 0x9c, 0xf6, 0xb4, + 0x93, 0xd3, 0x9e, 0x75, 0x72, 0xda, 0xf3, 0x4e, 0x4e, 0xfb, 0x47, 0x27, 0xa7, 0xfd, 0xf2, 0x9f, + 0xb9, 0xa9, 0x07, 0xd3, 0xcd, 0xfd, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x93, 0x11, 0x3a, 0xff, + 0xc2, 0x17, 0x00, 0x00, +} + +func (m *AllowedFlexVolume) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AllowedFlexVolume) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllowedFlexVolume) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Driver) + copy(dAtA[i:], m.Driver) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Driver))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *FSGroupStrategyOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *FSGroupStrategyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *FSGroupStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Ranges) > 0 { + for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *IDRange) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IDRange) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IDRange) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i = encodeVarintGenerated(dAtA, i, uint64(m.Max)) + i-- + dAtA[i] = 0x10 + i = encodeVarintGenerated(dAtA, i, uint64(m.Min)) + i-- + dAtA[i] = 0x8 + return len(dAtA) - i, nil +} + +func (m *PodSecurityPolicyReview) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodSecurityPolicyReview) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSecurityPolicyReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PodSecurityPolicyReviewSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodSecurityPolicyReviewSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSecurityPolicyReviewSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ServiceAccountNames) > 0 { + for iNdEx := len(m.ServiceAccountNames) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ServiceAccountNames[iNdEx]) + copy(dAtA[i:], m.ServiceAccountNames[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceAccountNames[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PodSecurityPolicyReviewStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodSecurityPolicyReviewStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSecurityPolicyReviewStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.AllowedServiceAccounts) > 0 { + for iNdEx := len(m.AllowedServiceAccounts) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AllowedServiceAccounts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *PodSecurityPolicySelfSubjectReview) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodSecurityPolicySelfSubjectReview) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSecurityPolicySelfSubjectReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PodSecurityPolicySelfSubjectReviewSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodSecurityPolicySelfSubjectReviewSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSecurityPolicySelfSubjectReviewSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PodSecurityPolicySubjectReview) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodSecurityPolicySubjectReview) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSecurityPolicySubjectReview) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PodSecurityPolicySubjectReviewSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodSecurityPolicySubjectReviewSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSecurityPolicySubjectReviewSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Groups) > 0 { + for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Groups[iNdEx]) + copy(dAtA[i:], m.Groups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Groups[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.User) + copy(dAtA[i:], m.User) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.User))) + i-- + dAtA[i] = 0x12 + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PodSecurityPolicySubjectReviewStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PodSecurityPolicySubjectReviewStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PodSecurityPolicySubjectReviewStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x12 + if m.AllowedBy != nil { + { + size, err := m.AllowedBy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RangeAllocation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RangeAllocation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RangeAllocation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Data != nil { + i -= len(m.Data) + copy(dAtA[i:], m.Data) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Data))) + i-- + dAtA[i] = 0x1a + } + i -= len(m.Range) + copy(dAtA[i:], m.Range) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Range))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RangeAllocationList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RangeAllocationList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RangeAllocationList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RunAsUserStrategyOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RunAsUserStrategyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RunAsUserStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.UIDRangeMax != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.UIDRangeMax)) + i-- + dAtA[i] = 0x20 + } + if m.UIDRangeMin != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.UIDRangeMin)) + i-- + dAtA[i] = 0x18 + } + if m.UID != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.UID)) + i-- + dAtA[i] = 0x10 + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SELinuxContextStrategyOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SELinuxContextStrategyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SELinuxContextStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.SELinuxOptions != nil { + { + size, err := m.SELinuxOptions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SecurityContextConstraints) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SecurityContextConstraints) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SecurityContextConstraints) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ForbiddenSysctls) > 0 { + for iNdEx := len(m.ForbiddenSysctls) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ForbiddenSysctls[iNdEx]) + copy(dAtA[i:], m.ForbiddenSysctls[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ForbiddenSysctls[iNdEx]))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xca + } + } + if len(m.AllowedUnsafeSysctls) > 0 { + for iNdEx := len(m.AllowedUnsafeSysctls) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AllowedUnsafeSysctls[iNdEx]) + copy(dAtA[i:], m.AllowedUnsafeSysctls[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllowedUnsafeSysctls[iNdEx]))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc2 + } + } + if m.AllowPrivilegeEscalation != nil { + i-- + if *m.AllowPrivilegeEscalation { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb8 + } + if m.DefaultAllowPrivilegeEscalation != nil { + i-- + if *m.DefaultAllowPrivilegeEscalation { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb0 + } + if len(m.AllowedFlexVolumes) > 0 { + for iNdEx := len(m.AllowedFlexVolumes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AllowedFlexVolumes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa + } + } + if len(m.SeccompProfiles) > 0 { + for iNdEx := len(m.SeccompProfiles) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.SeccompProfiles[iNdEx]) + copy(dAtA[i:], m.SeccompProfiles[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.SeccompProfiles[iNdEx]))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 + } + } + if len(m.Groups) > 0 { + for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Groups[iNdEx]) + copy(dAtA[i:], m.Groups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Groups[iNdEx]))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a + } + } + if len(m.Users) > 0 { + for iNdEx := len(m.Users) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Users[iNdEx]) + copy(dAtA[i:], m.Users[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Users[iNdEx]))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } + } + i-- + if m.ReadOnlyRootFilesystem { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x88 + { + size, err := m.FSGroup.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + { + size, err := m.SupplementalGroups.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x7a + { + size, err := m.RunAsUser.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x72 + { + size, err := m.SELinuxContext.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + i-- + if m.AllowHostIPC { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x60 + i-- + if m.AllowHostPID { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x58 + i-- + if m.AllowHostPorts { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x50 + i-- + if m.AllowHostNetwork { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x48 + if len(m.Volumes) > 0 { + for iNdEx := len(m.Volumes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Volumes[iNdEx]) + copy(dAtA[i:], m.Volumes[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Volumes[iNdEx]))) + i-- + dAtA[i] = 0x42 + } + } + i-- + if m.AllowHostDirVolumePlugin { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 + if len(m.AllowedCapabilities) > 0 { + for iNdEx := len(m.AllowedCapabilities) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AllowedCapabilities[iNdEx]) + copy(dAtA[i:], m.AllowedCapabilities[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AllowedCapabilities[iNdEx]))) + i-- + dAtA[i] = 0x32 + } + } + if len(m.RequiredDropCapabilities) > 0 { + for iNdEx := len(m.RequiredDropCapabilities) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.RequiredDropCapabilities[iNdEx]) + copy(dAtA[i:], m.RequiredDropCapabilities[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RequiredDropCapabilities[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + if len(m.DefaultAddCapabilities) > 0 { + for iNdEx := len(m.DefaultAddCapabilities) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.DefaultAddCapabilities[iNdEx]) + copy(dAtA[i:], m.DefaultAddCapabilities[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DefaultAddCapabilities[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + i-- + if m.AllowPrivilegedContainer { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + if m.Priority != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Priority)) + i-- + dAtA[i] = 0x10 + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SecurityContextConstraintsList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SecurityContextConstraintsList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SecurityContextConstraintsList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ServiceAccountPodSecurityPolicyReviewStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ServiceAccountPodSecurityPolicyReviewStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ServiceAccountPodSecurityPolicyReviewStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x12 + { + size, err := m.PodSecurityPolicySubjectReviewStatus.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *SupplementalGroupsStrategyOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SupplementalGroupsStrategyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SupplementalGroupsStrategyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Ranges) > 0 { + for iNdEx := len(m.Ranges) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ranges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *AllowedFlexVolume) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Driver) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *FSGroupStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Ranges) > 0 { + for _, e := range m.Ranges { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *IDRange) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Min)) + n += 1 + sovGenerated(uint64(m.Max)) + return n +} + +func (m *PodSecurityPolicyReview) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodSecurityPolicyReviewSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Template.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.ServiceAccountNames) > 0 { + for _, s := range m.ServiceAccountNames { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PodSecurityPolicyReviewStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.AllowedServiceAccounts) > 0 { + for _, e := range m.AllowedServiceAccounts { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PodSecurityPolicySelfSubjectReview) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodSecurityPolicySelfSubjectReviewSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Template.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodSecurityPolicySubjectReview) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodSecurityPolicySubjectReviewSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Template.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.User) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Groups) > 0 { + for _, s := range m.Groups { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PodSecurityPolicySubjectReviewStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.AllowedBy != nil { + l = m.AllowedBy.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Template.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RangeAllocation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Range) + n += 1 + l + sovGenerated(uint64(l)) + if m.Data != nil { + l = len(m.Data) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *RangeAllocationList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *RunAsUserStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.UID != nil { + n += 1 + sovGenerated(uint64(*m.UID)) + } + if m.UIDRangeMin != nil { + n += 1 + sovGenerated(uint64(*m.UIDRangeMin)) + } + if m.UIDRangeMax != nil { + n += 1 + sovGenerated(uint64(*m.UIDRangeMax)) + } + return n +} + +func (m *SELinuxContextStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.SELinuxOptions != nil { + l = m.SELinuxOptions.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *SecurityContextConstraints) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Priority != nil { + n += 1 + sovGenerated(uint64(*m.Priority)) + } + n += 2 + if len(m.DefaultAddCapabilities) > 0 { + for _, s := range m.DefaultAddCapabilities { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.RequiredDropCapabilities) > 0 { + for _, s := range m.RequiredDropCapabilities { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.AllowedCapabilities) > 0 { + for _, s := range m.AllowedCapabilities { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + n += 2 + if len(m.Volumes) > 0 { + for _, s := range m.Volumes { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + n += 2 + n += 2 + n += 2 + n += 2 + l = m.SELinuxContext.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.RunAsUser.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.SupplementalGroups.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.FSGroup.Size() + n += 2 + l + sovGenerated(uint64(l)) + n += 3 + if len(m.Users) > 0 { + for _, s := range m.Users { + l = len(s) + n += 2 + l + sovGenerated(uint64(l)) + } + } + if len(m.Groups) > 0 { + for _, s := range m.Groups { + l = len(s) + n += 2 + l + sovGenerated(uint64(l)) + } + } + if len(m.SeccompProfiles) > 0 { + for _, s := range m.SeccompProfiles { + l = len(s) + n += 2 + l + sovGenerated(uint64(l)) + } + } + if len(m.AllowedFlexVolumes) > 0 { + for _, e := range m.AllowedFlexVolumes { + l = e.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + } + if m.DefaultAllowPrivilegeEscalation != nil { + n += 3 + } + if m.AllowPrivilegeEscalation != nil { + n += 3 + } + if len(m.AllowedUnsafeSysctls) > 0 { + for _, s := range m.AllowedUnsafeSysctls { + l = len(s) + n += 2 + l + sovGenerated(uint64(l)) + } + } + if len(m.ForbiddenSysctls) > 0 { + for _, s := range m.ForbiddenSysctls { + l = len(s) + n += 2 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *SecurityContextConstraintsList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ServiceAccountPodSecurityPolicyReviewStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.PodSecurityPolicySubjectReviewStatus.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SupplementalGroupsStrategyOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Ranges) > 0 { + for _, e := range m.Ranges { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *AllowedFlexVolume) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AllowedFlexVolume{`, + `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, + `}`, + }, "") + return s +} +func (this *FSGroupStrategyOptions) String() string { + if this == nil { + return "nil" + } + repeatedStringForRanges := "[]IDRange{" + for _, f := range this.Ranges { + repeatedStringForRanges += strings.Replace(strings.Replace(f.String(), "IDRange", "IDRange", 1), `&`, ``, 1) + "," + } + repeatedStringForRanges += "}" + s := strings.Join([]string{`&FSGroupStrategyOptions{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Ranges:` + repeatedStringForRanges + `,`, + `}`, + }, "") + return s +} +func (this *IDRange) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IDRange{`, + `Min:` + fmt.Sprintf("%v", this.Min) + `,`, + `Max:` + fmt.Sprintf("%v", this.Max) + `,`, + `}`, + }, "") + return s +} +func (this *PodSecurityPolicyReview) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSecurityPolicyReview{`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSecurityPolicyReviewSpec", "PodSecurityPolicyReviewSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodSecurityPolicyReviewStatus", "PodSecurityPolicyReviewStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodSecurityPolicyReviewSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSecurityPolicyReviewSpec{`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `ServiceAccountNames:` + fmt.Sprintf("%v", this.ServiceAccountNames) + `,`, + `}`, + }, "") + return s +} +func (this *PodSecurityPolicyReviewStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForAllowedServiceAccounts := "[]ServiceAccountPodSecurityPolicyReviewStatus{" + for _, f := range this.AllowedServiceAccounts { + repeatedStringForAllowedServiceAccounts += strings.Replace(strings.Replace(f.String(), "ServiceAccountPodSecurityPolicyReviewStatus", "ServiceAccountPodSecurityPolicyReviewStatus", 1), `&`, ``, 1) + "," + } + repeatedStringForAllowedServiceAccounts += "}" + s := strings.Join([]string{`&PodSecurityPolicyReviewStatus{`, + `AllowedServiceAccounts:` + repeatedStringForAllowedServiceAccounts + `,`, + `}`, + }, "") + return s +} +func (this *PodSecurityPolicySelfSubjectReview) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSecurityPolicySelfSubjectReview{`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSecurityPolicySelfSubjectReviewSpec", "PodSecurityPolicySelfSubjectReviewSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodSecurityPolicySubjectReviewStatus", "PodSecurityPolicySubjectReviewStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodSecurityPolicySelfSubjectReviewSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSecurityPolicySelfSubjectReviewSpec{`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodSecurityPolicySubjectReview) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSecurityPolicySubjectReview{`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSecurityPolicySubjectReviewSpec", "PodSecurityPolicySubjectReviewSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodSecurityPolicySubjectReviewStatus", "PodSecurityPolicySubjectReviewStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodSecurityPolicySubjectReviewSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSecurityPolicySubjectReviewSpec{`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, + `}`, + }, "") + return s +} +func (this *PodSecurityPolicySubjectReviewStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSecurityPolicySubjectReviewStatus{`, + `AllowedBy:` + strings.Replace(fmt.Sprintf("%v", this.AllowedBy), "ObjectReference", "v1.ObjectReference", 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Template:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RangeAllocation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RangeAllocation{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v11.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Range:` + fmt.Sprintf("%v", this.Range) + `,`, + `Data:` + valueToStringGenerated(this.Data) + `,`, + `}`, + }, "") + return s +} +func (this *RangeAllocationList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]RangeAllocation{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "RangeAllocation", "RangeAllocation", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&RangeAllocationList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v11.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *RunAsUserStrategyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RunAsUserStrategyOptions{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `UID:` + valueToStringGenerated(this.UID) + `,`, + `UIDRangeMin:` + valueToStringGenerated(this.UIDRangeMin) + `,`, + `UIDRangeMax:` + valueToStringGenerated(this.UIDRangeMax) + `,`, + `}`, + }, "") + return s +} +func (this *SELinuxContextStrategyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SELinuxContextStrategyOptions{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `SELinuxOptions:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxOptions), "SELinuxOptions", "v1.SELinuxOptions", 1) + `,`, + `}`, + }, "") + return s +} +func (this *SecurityContextConstraints) String() string { + if this == nil { + return "nil" + } + repeatedStringForAllowedFlexVolumes := "[]AllowedFlexVolume{" + for _, f := range this.AllowedFlexVolumes { + repeatedStringForAllowedFlexVolumes += strings.Replace(strings.Replace(f.String(), "AllowedFlexVolume", "AllowedFlexVolume", 1), `&`, ``, 1) + "," + } + repeatedStringForAllowedFlexVolumes += "}" + s := strings.Join([]string{`&SecurityContextConstraints{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v11.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Priority:` + valueToStringGenerated(this.Priority) + `,`, + `AllowPrivilegedContainer:` + fmt.Sprintf("%v", this.AllowPrivilegedContainer) + `,`, + `DefaultAddCapabilities:` + fmt.Sprintf("%v", this.DefaultAddCapabilities) + `,`, + `RequiredDropCapabilities:` + fmt.Sprintf("%v", this.RequiredDropCapabilities) + `,`, + `AllowedCapabilities:` + fmt.Sprintf("%v", this.AllowedCapabilities) + `,`, + `AllowHostDirVolumePlugin:` + fmt.Sprintf("%v", this.AllowHostDirVolumePlugin) + `,`, + `Volumes:` + fmt.Sprintf("%v", this.Volumes) + `,`, + `AllowHostNetwork:` + fmt.Sprintf("%v", this.AllowHostNetwork) + `,`, + `AllowHostPorts:` + fmt.Sprintf("%v", this.AllowHostPorts) + `,`, + `AllowHostPID:` + fmt.Sprintf("%v", this.AllowHostPID) + `,`, + `AllowHostIPC:` + fmt.Sprintf("%v", this.AllowHostIPC) + `,`, + `SELinuxContext:` + strings.Replace(strings.Replace(this.SELinuxContext.String(), "SELinuxContextStrategyOptions", "SELinuxContextStrategyOptions", 1), `&`, ``, 1) + `,`, + `RunAsUser:` + strings.Replace(strings.Replace(this.RunAsUser.String(), "RunAsUserStrategyOptions", "RunAsUserStrategyOptions", 1), `&`, ``, 1) + `,`, + `SupplementalGroups:` + strings.Replace(strings.Replace(this.SupplementalGroups.String(), "SupplementalGroupsStrategyOptions", "SupplementalGroupsStrategyOptions", 1), `&`, ``, 1) + `,`, + `FSGroup:` + strings.Replace(strings.Replace(this.FSGroup.String(), "FSGroupStrategyOptions", "FSGroupStrategyOptions", 1), `&`, ``, 1) + `,`, + `ReadOnlyRootFilesystem:` + fmt.Sprintf("%v", this.ReadOnlyRootFilesystem) + `,`, + `Users:` + fmt.Sprintf("%v", this.Users) + `,`, + `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, + `SeccompProfiles:` + fmt.Sprintf("%v", this.SeccompProfiles) + `,`, + `AllowedFlexVolumes:` + repeatedStringForAllowedFlexVolumes + `,`, + `DefaultAllowPrivilegeEscalation:` + valueToStringGenerated(this.DefaultAllowPrivilegeEscalation) + `,`, + `AllowPrivilegeEscalation:` + valueToStringGenerated(this.AllowPrivilegeEscalation) + `,`, + `AllowedUnsafeSysctls:` + fmt.Sprintf("%v", this.AllowedUnsafeSysctls) + `,`, + `ForbiddenSysctls:` + fmt.Sprintf("%v", this.ForbiddenSysctls) + `,`, + `}`, + }, "") + return s +} +func (this *SecurityContextConstraintsList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]SecurityContextConstraints{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "SecurityContextConstraints", "SecurityContextConstraints", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&SecurityContextConstraintsList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v11.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *ServiceAccountPodSecurityPolicyReviewStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceAccountPodSecurityPolicyReviewStatus{`, + `PodSecurityPolicySubjectReviewStatus:` + strings.Replace(strings.Replace(this.PodSecurityPolicySubjectReviewStatus.String(), "PodSecurityPolicySubjectReviewStatus", "PodSecurityPolicySubjectReviewStatus", 1), `&`, ``, 1) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} +func (this *SupplementalGroupsStrategyOptions) String() string { + if this == nil { + return "nil" + } + repeatedStringForRanges := "[]IDRange{" + for _, f := range this.Ranges { + repeatedStringForRanges += strings.Replace(strings.Replace(f.String(), "IDRange", "IDRange", 1), `&`, ``, 1) + "," + } + repeatedStringForRanges += "}" + s := strings.Join([]string{`&SupplementalGroupsStrategyOptions{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Ranges:` + repeatedStringForRanges + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *AllowedFlexVolume) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AllowedFlexVolume: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllowedFlexVolume: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Driver = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *FSGroupStrategyOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: FSGroupStrategyOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FSGroupStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = FSGroupStrategyType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ranges = append(m.Ranges, IDRange{}) + if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IDRange) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IDRange: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IDRange: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Min", wireType) + } + m.Min = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Min |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Max", wireType) + } + m.Max = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Max |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodSecurityPolicyReview) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodSecurityPolicyReview: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodSecurityPolicyReview: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodSecurityPolicyReviewSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodSecurityPolicyReviewSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodSecurityPolicyReviewSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Template", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Template.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountNames", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServiceAccountNames = append(m.ServiceAccountNames, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodSecurityPolicyReviewStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodSecurityPolicyReviewStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodSecurityPolicyReviewStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedServiceAccounts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AllowedServiceAccounts = append(m.AllowedServiceAccounts, ServiceAccountPodSecurityPolicyReviewStatus{}) + if err := m.AllowedServiceAccounts[len(m.AllowedServiceAccounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodSecurityPolicySelfSubjectReview) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodSecurityPolicySelfSubjectReview: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodSecurityPolicySelfSubjectReview: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodSecurityPolicySelfSubjectReviewSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodSecurityPolicySelfSubjectReviewSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodSecurityPolicySelfSubjectReviewSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Template", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Template.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodSecurityPolicySubjectReview) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodSecurityPolicySubjectReview: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodSecurityPolicySubjectReview: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodSecurityPolicySubjectReviewSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodSecurityPolicySubjectReviewSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodSecurityPolicySubjectReviewSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Template", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Template.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Groups", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Groups = append(m.Groups, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodSecurityPolicySubjectReviewStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodSecurityPolicySubjectReviewStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodSecurityPolicySubjectReviewStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedBy", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AllowedBy == nil { + m.AllowedBy = &v1.ObjectReference{} + } + if err := m.AllowedBy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Template", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Template.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RangeAllocation) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RangeAllocation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RangeAllocation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Range", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Range = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) + if m.Data == nil { + m.Data = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RangeAllocationList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RangeAllocationList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RangeAllocationList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, RangeAllocation{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RunAsUserStrategyOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RunAsUserStrategyOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RunAsUserStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = RunAsUserStrategyType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.UID = &v + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UIDRangeMin", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.UIDRangeMin = &v + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UIDRangeMax", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.UIDRangeMax = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SELinuxContextStrategyOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SELinuxContextStrategyOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SELinuxContextStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = SELinuxContextStrategyType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SELinuxOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SELinuxOptions == nil { + m.SELinuxOptions = &v1.SELinuxOptions{} + } + if err := m.SELinuxOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SecurityContextConstraints) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SecurityContextConstraints: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SecurityContextConstraints: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Priority", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Priority = &v + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowPrivilegedContainer", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AllowPrivilegedContainer = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultAddCapabilities", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DefaultAddCapabilities = append(m.DefaultAddCapabilities, k8s_io_api_core_v1.Capability(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RequiredDropCapabilities", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RequiredDropCapabilities = append(m.RequiredDropCapabilities, k8s_io_api_core_v1.Capability(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedCapabilities", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AllowedCapabilities = append(m.AllowedCapabilities, k8s_io_api_core_v1.Capability(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowHostDirVolumePlugin", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AllowHostDirVolumePlugin = bool(v != 0) + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Volumes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Volumes = append(m.Volumes, FSType(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowHostNetwork", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AllowHostNetwork = bool(v != 0) + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowHostPorts", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AllowHostPorts = bool(v != 0) + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowHostPID", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AllowHostPID = bool(v != 0) + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowHostIPC", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AllowHostIPC = bool(v != 0) + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SELinuxContext", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SELinuxContext.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RunAsUser", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RunAsUser.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SupplementalGroups", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SupplementalGroups.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSGroup", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.FSGroup.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnlyRootFilesystem", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnlyRootFilesystem = bool(v != 0) + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Users", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Users = append(m.Users, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Groups", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Groups = append(m.Groups, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SeccompProfiles", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SeccompProfiles = append(m.SeccompProfiles, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedFlexVolumes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AllowedFlexVolumes = append(m.AllowedFlexVolumes, AllowedFlexVolume{}) + if err := m.AllowedFlexVolumes[len(m.AllowedFlexVolumes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 22: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultAllowPrivilegeEscalation", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.DefaultAllowPrivilegeEscalation = &b + case 23: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowPrivilegeEscalation", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.AllowPrivilegeEscalation = &b + case 24: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedUnsafeSysctls", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AllowedUnsafeSysctls = append(m.AllowedUnsafeSysctls, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 25: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ForbiddenSysctls", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ForbiddenSysctls = append(m.ForbiddenSysctls, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SecurityContextConstraintsList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SecurityContextConstraintsList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SecurityContextConstraintsList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, SecurityContextConstraints{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServiceAccountPodSecurityPolicyReviewStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServiceAccountPodSecurityPolicyReviewStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServiceAccountPodSecurityPolicyReviewStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodSecurityPolicySubjectReviewStatus", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PodSecurityPolicySubjectReviewStatus.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SupplementalGroupsStrategyOptions) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SupplementalGroupsStrategyOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SupplementalGroupsStrategyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = SupplementalGroupsStrategyType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ranges", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ranges = append(m.Ranges, IDRange{}) + if err := m.Ranges[len(m.Ranges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vendor/github.com/openshift/api/security/v1/generated.proto b/vendor/github.com/openshift/api/security/v1/generated.proto new file mode 100644 index 0000000000000..2c1df243a40a8 --- /dev/null +++ b/vendor/github.com/openshift/api/security/v1/generated.proto @@ -0,0 +1,351 @@ + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package github.com.openshift.api.security.v1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// AllowedFlexVolume represents a single Flexvolume that is allowed to be used. +message AllowedFlexVolume { + // Driver is the name of the Flexvolume driver. + optional string driver = 1; +} + +// FSGroupStrategyOptions defines the strategy type and options used to create the strategy. +message FSGroupStrategyOptions { + // Type is the strategy that will dictate what FSGroup is used in the SecurityContext. + optional string type = 1; + + // Ranges are the allowed ranges of fs groups. If you would like to force a single + // fs group then supply a single range with the same start and end. + repeated IDRange ranges = 2; +} + +// IDRange provides a min/max of an allowed range of IDs. +// TODO: this could be reused for UIDs. +message IDRange { + // Min is the start of the range, inclusive. + optional int64 min = 1; + + // Max is the end of the range, inclusive. + optional int64 max = 2; +} + +// PodSecurityPolicyReview checks which service accounts (not users, since that would be cluster-wide) can create the `PodTemplateSpec` in question. +message PodSecurityPolicyReview { + // spec is the PodSecurityPolicy to check. + optional PodSecurityPolicyReviewSpec spec = 1; + + // status represents the current information/status for the PodSecurityPolicyReview. + optional PodSecurityPolicyReviewStatus status = 2; +} + +// PodSecurityPolicyReviewSpec defines specification for PodSecurityPolicyReview +message PodSecurityPolicyReviewSpec { + // template is the PodTemplateSpec to check. The template.spec.serviceAccountName field is used + // if serviceAccountNames is empty, unless the template.spec.serviceAccountName is empty, + // in which case "default" is used. + // If serviceAccountNames is specified, template.spec.serviceAccountName is ignored. + optional k8s.io.api.core.v1.PodTemplateSpec template = 1; + + // serviceAccountNames is an optional set of ServiceAccounts to run the check with. + // If serviceAccountNames is empty, the template.spec.serviceAccountName is used, + // unless it's empty, in which case "default" is used instead. + // If serviceAccountNames is specified, template.spec.serviceAccountName is ignored. + repeated string serviceAccountNames = 2; +} + +// PodSecurityPolicyReviewStatus represents the status of PodSecurityPolicyReview. +message PodSecurityPolicyReviewStatus { + // allowedServiceAccounts returns the list of service accounts in *this* namespace that have the power to create the PodTemplateSpec. + repeated ServiceAccountPodSecurityPolicyReviewStatus allowedServiceAccounts = 1; +} + +// PodSecurityPolicySelfSubjectReview checks whether this user/SA tuple can create the PodTemplateSpec +message PodSecurityPolicySelfSubjectReview { + // spec defines specification the PodSecurityPolicySelfSubjectReview. + optional PodSecurityPolicySelfSubjectReviewSpec spec = 1; + + // status represents the current information/status for the PodSecurityPolicySelfSubjectReview. + optional PodSecurityPolicySubjectReviewStatus status = 2; +} + +// PodSecurityPolicySelfSubjectReviewSpec contains specification for PodSecurityPolicySelfSubjectReview. +message PodSecurityPolicySelfSubjectReviewSpec { + // template is the PodTemplateSpec to check. + optional k8s.io.api.core.v1.PodTemplateSpec template = 1; +} + +// PodSecurityPolicySubjectReview checks whether a particular user/SA tuple can create the PodTemplateSpec. +message PodSecurityPolicySubjectReview { + // spec defines specification for the PodSecurityPolicySubjectReview. + optional PodSecurityPolicySubjectReviewSpec spec = 1; + + // status represents the current information/status for the PodSecurityPolicySubjectReview. + optional PodSecurityPolicySubjectReviewStatus status = 2; +} + +// PodSecurityPolicySubjectReviewSpec defines specification for PodSecurityPolicySubjectReview +message PodSecurityPolicySubjectReviewSpec { + // template is the PodTemplateSpec to check. If template.spec.serviceAccountName is empty it will not be defaulted. + // If its non-empty, it will be checked. + optional k8s.io.api.core.v1.PodTemplateSpec template = 1; + + // user is the user you're testing for. + // If you specify "user" but not "group", then is it interpreted as "What if user were not a member of any groups. + // If user and groups are empty, then the check is performed using *only* the serviceAccountName in the template. + optional string user = 2; + + // groups is the groups you're testing for. + repeated string groups = 3; +} + +// PodSecurityPolicySubjectReviewStatus contains information/status for PodSecurityPolicySubjectReview. +message PodSecurityPolicySubjectReviewStatus { + // allowedBy is a reference to the rule that allows the PodTemplateSpec. + // A rule can be a SecurityContextConstraint or a PodSecurityPolicy + // A `nil`, indicates that it was denied. + optional k8s.io.api.core.v1.ObjectReference allowedBy = 1; + + // A machine-readable description of why this operation is in the + // "Failure" status. If this value is empty there + // is no information available. + optional string reason = 2; + + // template is the PodTemplateSpec after the defaulting is applied. + optional k8s.io.api.core.v1.PodTemplateSpec template = 3; +} + +// RangeAllocation is used so we can easily expose a RangeAllocation typed for security group +message RangeAllocation { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // range is a string representing a unique label for a range of uids, "1000000000-2000000000/10000". + optional string range = 2; + + // data is a byte array representing the serialized state of a range allocation. It is a bitmap + // with each bit set to one to represent a range is taken. + optional bytes data = 3; +} + +// RangeAllocationList is a list of RangeAllocations objects +message RangeAllocationList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // List of RangeAllocations. + repeated RangeAllocation items = 2; +} + +// RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. +message RunAsUserStrategyOptions { + // Type is the strategy that will dictate what RunAsUser is used in the SecurityContext. + optional string type = 1; + + // UID is the user id that containers must run as. Required for the MustRunAs strategy if not using + // namespace/service account allocated uids. + optional int64 uid = 2; + + // UIDRangeMin defines the min value for a strategy that allocates by range. + optional int64 uidRangeMin = 3; + + // UIDRangeMax defines the max value for a strategy that allocates by range. + optional int64 uidRangeMax = 4; +} + +// SELinuxContextStrategyOptions defines the strategy type and any options used to create the strategy. +message SELinuxContextStrategyOptions { + // Type is the strategy that will dictate what SELinux context is used in the SecurityContext. + optional string type = 1; + + // seLinuxOptions required to run as; required for MustRunAs + optional k8s.io.api.core.v1.SELinuxOptions seLinuxOptions = 2; +} + +// SecurityContextConstraints governs the ability to make requests that affect the SecurityContext +// that will be applied to a container. +// For historical reasons SCC was exposed under the core Kubernetes API group. +// That exposure is deprecated and will be removed in a future release - users +// should instead use the security.openshift.io group to manage +// SecurityContextConstraints. +// +kubebuilder:printcolumn:name="Priv",type=string,JSONPath=`.allowPrivilegedContainer`,description="Determines if a container can request to be run as privileged" +// +kubebuilder:printcolumn:name="Caps",type=string,JSONPath=`.allowedCapabilities`,description="A list of capabilities that can be requested to add to the container" +// +kubebuilder:printcolumn:name="SELinux",type=string,JSONPath=`.seLinuxContext.type`,description="Strategy that will dictate what labels will be set in the SecurityContext" +// +kubebuilder:printcolumn:name="RunAsUser",type=string,JSONPath=`.runAsUser.type`,description="Strategy that will dictate what RunAsUser is used in the SecurityContext" +// +kubebuilder:printcolumn:name="FSGroup",type=string,JSONPath=`.fsGroup.type`,description="Strategy that will dictate what fs group is used by the SecurityContext" +// +kubebuilder:printcolumn:name="SupGroup",type=string,JSONPath=`.supplementalGroups.type`,description="Strategy that will dictate what supplemental groups are used by the SecurityContext" +// +kubebuilder:printcolumn:name="Priority",type=string,JSONPath=`.priority`,description="Sort order of SCCs" +// +kubebuilder:printcolumn:name="ReadOnlyRootFS",type=string,JSONPath=`.readOnlyRootFilesystem`,description="Force containers to run with a read only root file system" +// +kubebuilder:printcolumn:name="Volumes",type=string,JSONPath=`.volumes`,description="White list of allowed volume plugins" +// +kubebuilder:singular=securitycontextconstraint +message SecurityContextConstraints { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Priority influences the sort order of SCCs when evaluating which SCCs to try first for + // a given pod request based on access in the Users and Groups fields. The higher the int, the + // higher priority. An unset value is considered a 0 priority. If scores + // for multiple SCCs are equal they will be sorted from most restrictive to + // least restrictive. If both priorities and restrictions are equal the + // SCCs will be sorted by name. + // +nullable + optional int32 priority = 2; + + // AllowPrivilegedContainer determines if a container can request to be run as privileged. + optional bool allowPrivilegedContainer = 3; + + // DefaultAddCapabilities is the default set of capabilities that will be added to the container + // unless the pod spec specifically drops the capability. You may not list a capabiility in both + // DefaultAddCapabilities and RequiredDropCapabilities. + // +nullable + repeated string defaultAddCapabilities = 4; + + // RequiredDropCapabilities are the capabilities that will be dropped from the container. These + // are required to be dropped and cannot be added. + // +nullable + repeated string requiredDropCapabilities = 5; + + // AllowedCapabilities is a list of capabilities that can be requested to add to the container. + // Capabilities in this field maybe added at the pod author's discretion. + // You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities. + // To allow all capabilities you may use '*'. + // +nullable + repeated string allowedCapabilities = 6; + + // AllowHostDirVolumePlugin determines if the policy allow containers to use the HostDir volume plugin + // +k8s:conversion-gen=false + optional bool allowHostDirVolumePlugin = 7; + + // Volumes is a white list of allowed volume plugins. FSType corresponds directly with the field names + // of a VolumeSource (azureFile, configMap, emptyDir). To allow all volumes you may use "*". + // To allow no volumes, set to ["none"]. + // +nullable + repeated string volumes = 8; + + // AllowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all + // Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes + // is allowed in the "Volumes" field. + // +optional + // +nullable + repeated AllowedFlexVolume allowedFlexVolumes = 21; + + // AllowHostNetwork determines if the policy allows the use of HostNetwork in the pod spec. + optional bool allowHostNetwork = 9; + + // AllowHostPorts determines if the policy allows host ports in the containers. + optional bool allowHostPorts = 10; + + // AllowHostPID determines if the policy allows host pid in the containers. + optional bool allowHostPID = 11; + + // AllowHostIPC determines if the policy allows host ipc in the containers. + optional bool allowHostIPC = 12; + + // DefaultAllowPrivilegeEscalation controls the default setting for whether a + // process can gain more privileges than its parent process. + // +optional + // +nullable + optional bool defaultAllowPrivilegeEscalation = 22; + + // AllowPrivilegeEscalation determines if a pod can request to allow + // privilege escalation. If unspecified, defaults to true. + // +optional + // +nullable + optional bool allowPrivilegeEscalation = 23; + + // SELinuxContext is the strategy that will dictate what labels will be set in the SecurityContext. + // +nullable + optional SELinuxContextStrategyOptions seLinuxContext = 13; + + // RunAsUser is the strategy that will dictate what RunAsUser is used in the SecurityContext. + // +nullable + optional RunAsUserStrategyOptions runAsUser = 14; + + // SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. + // +nullable + optional SupplementalGroupsStrategyOptions supplementalGroups = 15; + + // FSGroup is the strategy that will dictate what fs group is used by the SecurityContext. + // +nullable + optional FSGroupStrategyOptions fsGroup = 16; + + // ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file + // system. If the container specifically requests to run with a non-read only root file system + // the SCC should deny the pod. + // If set to false the container may run with a read only root file system if it wishes but it + // will not be forced to. + optional bool readOnlyRootFilesystem = 17; + + // The users who have permissions to use this security context constraints + // +optional + // +nullable + repeated string users = 18; + + // The groups that have permission to use this security context constraints + // +optional + // +nullable + repeated string groups = 19; + + // SeccompProfiles lists the allowed profiles that may be set for the pod or + // container's seccomp annotations. An unset (nil) or empty value means that no profiles may + // be specifid by the pod or container. The wildcard '*' may be used to allow all profiles. When + // used to generate a value for a pod the first non-wildcard profile will be used as + // the default. + // +nullable + repeated string seccompProfiles = 20; + + // AllowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. + // Each entry is either a plain sysctl name or ends in "*" in which case it is considered + // as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. + // Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection. + // + // Examples: + // e.g. "foo/*" allows "foo/bar", "foo/baz", etc. + // e.g. "foo.*" allows "foo.bar", "foo.baz", etc. + // +optional + // +nullable + repeated string allowedUnsafeSysctls = 24; + + // ForbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. + // Each entry is either a plain sysctl name or ends in "*" in which case it is considered + // as a prefix of forbidden sysctls. Single * means all sysctls are forbidden. + // + // Examples: + // e.g. "foo/*" forbids "foo/bar", "foo/baz", etc. + // e.g. "foo.*" forbids "foo.bar", "foo.baz", etc. + // +optional + // +nullable + repeated string forbiddenSysctls = 25; +} + +// SecurityContextConstraintsList is a list of SecurityContextConstraints objects +message SecurityContextConstraintsList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // List of security context constraints. + repeated SecurityContextConstraints items = 2; +} + +// ServiceAccountPodSecurityPolicyReviewStatus represents ServiceAccount name and related review status +message ServiceAccountPodSecurityPolicyReviewStatus { + optional PodSecurityPolicySubjectReviewStatus podSecurityPolicySubjectReviewStatus = 1; + + // name contains the allowed and the denied ServiceAccount name + optional string name = 2; +} + +// SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. +message SupplementalGroupsStrategyOptions { + // Type is the strategy that will dictate what supplemental groups is used in the SecurityContext. + optional string type = 1; + + // Ranges are the allowed ranges of supplemental groups. If you would like to force a single + // supplemental group then supply a single range with the same start and end. + repeated IDRange ranges = 2; +} + diff --git a/vendor/github.com/openshift/api/security/v1/legacy.go b/vendor/github.com/openshift/api/security/v1/legacy.go new file mode 100644 index 0000000000000..34f609a07b05c --- /dev/null +++ b/vendor/github.com/openshift/api/security/v1/legacy.go @@ -0,0 +1,25 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + legacyGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} + legacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes, corev1.AddToScheme) + DeprecatedInstallWithoutGroup = legacySchemeBuilder.AddToScheme +) + +func addLegacyKnownTypes(scheme *runtime.Scheme) error { + types := []runtime.Object{ + &SecurityContextConstraints{}, + &SecurityContextConstraintsList{}, + &PodSecurityPolicySubjectReview{}, + &PodSecurityPolicySelfSubjectReview{}, + &PodSecurityPolicyReview{}, + } + scheme.AddKnownTypes(legacyGroupVersion, types...) + return nil +} diff --git a/vendor/github.com/openshift/api/security/v1/register.go b/vendor/github.com/openshift/api/security/v1/register.go new file mode 100644 index 0000000000000..431c3b5397845 --- /dev/null +++ b/vendor/github.com/openshift/api/security/v1/register.go @@ -0,0 +1,44 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "security.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, corev1.AddToScheme) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &SecurityContextConstraints{}, + &SecurityContextConstraintsList{}, + &PodSecurityPolicySubjectReview{}, + &PodSecurityPolicySelfSubjectReview{}, + &PodSecurityPolicyReview{}, + &RangeAllocation{}, + &RangeAllocationList{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/security/v1/types.go b/vendor/github.com/openshift/api/security/v1/types.go new file mode 100644 index 0000000000000..8cf82cc5db88d --- /dev/null +++ b/vendor/github.com/openshift/api/security/v1/types.go @@ -0,0 +1,435 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// AllowAllCapabilities can be used as a value for the +// SecurityContextConstraints.AllowAllCapabilities field and means that any +// capabilities are allowed to be requested. +var AllowAllCapabilities corev1.Capability = "*" + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// SecurityContextConstraints governs the ability to make requests that affect the SecurityContext +// that will be applied to a container. +// For historical reasons SCC was exposed under the core Kubernetes API group. +// That exposure is deprecated and will be removed in a future release - users +// should instead use the security.openshift.io group to manage +// SecurityContextConstraints. +// +kubebuilder:printcolumn:name="Priv",type=string,JSONPath=`.allowPrivilegedContainer`,description="Determines if a container can request to be run as privileged" +// +kubebuilder:printcolumn:name="Caps",type=string,JSONPath=`.allowedCapabilities`,description="A list of capabilities that can be requested to add to the container" +// +kubebuilder:printcolumn:name="SELinux",type=string,JSONPath=`.seLinuxContext.type`,description="Strategy that will dictate what labels will be set in the SecurityContext" +// +kubebuilder:printcolumn:name="RunAsUser",type=string,JSONPath=`.runAsUser.type`,description="Strategy that will dictate what RunAsUser is used in the SecurityContext" +// +kubebuilder:printcolumn:name="FSGroup",type=string,JSONPath=`.fsGroup.type`,description="Strategy that will dictate what fs group is used by the SecurityContext" +// +kubebuilder:printcolumn:name="SupGroup",type=string,JSONPath=`.supplementalGroups.type`,description="Strategy that will dictate what supplemental groups are used by the SecurityContext" +// +kubebuilder:printcolumn:name="Priority",type=string,JSONPath=`.priority`,description="Sort order of SCCs" +// +kubebuilder:printcolumn:name="ReadOnlyRootFS",type=string,JSONPath=`.readOnlyRootFilesystem`,description="Force containers to run with a read only root file system" +// +kubebuilder:printcolumn:name="Volumes",type=string,JSONPath=`.volumes`,description="White list of allowed volume plugins" +// +kubebuilder:singular=securitycontextconstraint +type SecurityContextConstraints struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Priority influences the sort order of SCCs when evaluating which SCCs to try first for + // a given pod request based on access in the Users and Groups fields. The higher the int, the + // higher priority. An unset value is considered a 0 priority. If scores + // for multiple SCCs are equal they will be sorted from most restrictive to + // least restrictive. If both priorities and restrictions are equal the + // SCCs will be sorted by name. + // +nullable + Priority *int32 `json:"priority" protobuf:"varint,2,opt,name=priority"` + + // AllowPrivilegedContainer determines if a container can request to be run as privileged. + AllowPrivilegedContainer bool `json:"allowPrivilegedContainer" protobuf:"varint,3,opt,name=allowPrivilegedContainer"` + // DefaultAddCapabilities is the default set of capabilities that will be added to the container + // unless the pod spec specifically drops the capability. You may not list a capabiility in both + // DefaultAddCapabilities and RequiredDropCapabilities. + // +nullable + DefaultAddCapabilities []corev1.Capability `json:"defaultAddCapabilities" protobuf:"bytes,4,rep,name=defaultAddCapabilities,casttype=Capability"` + // RequiredDropCapabilities are the capabilities that will be dropped from the container. These + // are required to be dropped and cannot be added. + // +nullable + RequiredDropCapabilities []corev1.Capability `json:"requiredDropCapabilities" protobuf:"bytes,5,rep,name=requiredDropCapabilities,casttype=Capability"` + // AllowedCapabilities is a list of capabilities that can be requested to add to the container. + // Capabilities in this field maybe added at the pod author's discretion. + // You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities. + // To allow all capabilities you may use '*'. + // +nullable + AllowedCapabilities []corev1.Capability `json:"allowedCapabilities" protobuf:"bytes,6,rep,name=allowedCapabilities,casttype=Capability"` + // AllowHostDirVolumePlugin determines if the policy allow containers to use the HostDir volume plugin + // +k8s:conversion-gen=false + AllowHostDirVolumePlugin bool `json:"allowHostDirVolumePlugin" protobuf:"varint,7,opt,name=allowHostDirVolumePlugin"` + // Volumes is a white list of allowed volume plugins. FSType corresponds directly with the field names + // of a VolumeSource (azureFile, configMap, emptyDir). To allow all volumes you may use "*". + // To allow no volumes, set to ["none"]. + // +nullable + Volumes []FSType `json:"volumes" protobuf:"bytes,8,rep,name=volumes,casttype=FSType"` + // AllowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all + // Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes + // is allowed in the "Volumes" field. + // +optional + // +nullable + AllowedFlexVolumes []AllowedFlexVolume `json:"allowedFlexVolumes,omitempty" protobuf:"bytes,21,rep,name=allowedFlexVolumes"` + // AllowHostNetwork determines if the policy allows the use of HostNetwork in the pod spec. + AllowHostNetwork bool `json:"allowHostNetwork" protobuf:"varint,9,opt,name=allowHostNetwork"` + // AllowHostPorts determines if the policy allows host ports in the containers. + AllowHostPorts bool `json:"allowHostPorts" protobuf:"varint,10,opt,name=allowHostPorts"` + // AllowHostPID determines if the policy allows host pid in the containers. + AllowHostPID bool `json:"allowHostPID" protobuf:"varint,11,opt,name=allowHostPID"` + // AllowHostIPC determines if the policy allows host ipc in the containers. + AllowHostIPC bool `json:"allowHostIPC" protobuf:"varint,12,opt,name=allowHostIPC"` + // DefaultAllowPrivilegeEscalation controls the default setting for whether a + // process can gain more privileges than its parent process. + // +optional + // +nullable + DefaultAllowPrivilegeEscalation *bool `json:"defaultAllowPrivilegeEscalation,omitempty" protobuf:"varint,22,rep,name=defaultAllowPrivilegeEscalation"` + // AllowPrivilegeEscalation determines if a pod can request to allow + // privilege escalation. If unspecified, defaults to true. + // +optional + // +nullable + AllowPrivilegeEscalation *bool `json:"allowPrivilegeEscalation,omitempty" protobuf:"varint,23,rep,name=allowPrivilegeEscalation"` + // SELinuxContext is the strategy that will dictate what labels will be set in the SecurityContext. + // +nullable + SELinuxContext SELinuxContextStrategyOptions `json:"seLinuxContext,omitempty" protobuf:"bytes,13,opt,name=seLinuxContext"` + // RunAsUser is the strategy that will dictate what RunAsUser is used in the SecurityContext. + // +nullable + RunAsUser RunAsUserStrategyOptions `json:"runAsUser,omitempty" protobuf:"bytes,14,opt,name=runAsUser"` + // SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. + // +nullable + SupplementalGroups SupplementalGroupsStrategyOptions `json:"supplementalGroups,omitempty" protobuf:"bytes,15,opt,name=supplementalGroups"` + // FSGroup is the strategy that will dictate what fs group is used by the SecurityContext. + // +nullable + FSGroup FSGroupStrategyOptions `json:"fsGroup,omitempty" protobuf:"bytes,16,opt,name=fsGroup"` + // ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file + // system. If the container specifically requests to run with a non-read only root file system + // the SCC should deny the pod. + // If set to false the container may run with a read only root file system if it wishes but it + // will not be forced to. + ReadOnlyRootFilesystem bool `json:"readOnlyRootFilesystem" protobuf:"varint,17,opt,name=readOnlyRootFilesystem"` + + // The users who have permissions to use this security context constraints + // +optional + // +nullable + Users []string `json:"users" protobuf:"bytes,18,rep,name=users"` + // The groups that have permission to use this security context constraints + // +optional + // +nullable + Groups []string `json:"groups" protobuf:"bytes,19,rep,name=groups"` + + // SeccompProfiles lists the allowed profiles that may be set for the pod or + // container's seccomp annotations. An unset (nil) or empty value means that no profiles may + // be specifid by the pod or container. The wildcard '*' may be used to allow all profiles. When + // used to generate a value for a pod the first non-wildcard profile will be used as + // the default. + // +nullable + SeccompProfiles []string `json:"seccompProfiles,omitempty" protobuf:"bytes,20,opt,name=seccompProfiles"` + + // AllowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. + // Each entry is either a plain sysctl name or ends in "*" in which case it is considered + // as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. + // Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection. + // + // Examples: + // e.g. "foo/*" allows "foo/bar", "foo/baz", etc. + // e.g. "foo.*" allows "foo.bar", "foo.baz", etc. + // +optional + // +nullable + AllowedUnsafeSysctls []string `json:"allowedUnsafeSysctls,omitempty" protobuf:"bytes,24,rep,name=allowedUnsafeSysctls"` + // ForbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. + // Each entry is either a plain sysctl name or ends in "*" in which case it is considered + // as a prefix of forbidden sysctls. Single * means all sysctls are forbidden. + // + // Examples: + // e.g. "foo/*" forbids "foo/bar", "foo/baz", etc. + // e.g. "foo.*" forbids "foo.bar", "foo.baz", etc. + // +optional + // +nullable + ForbiddenSysctls []string `json:"forbiddenSysctls,omitempty" protobuf:"bytes,25,rep,name=forbiddenSysctls"` +} + +// FS Type gives strong typing to different file systems that are used by volumes. +type FSType string + +var ( + FSTypeAzureFile FSType = "azureFile" + FSTypeAzureDisk FSType = "azureDisk" + FSTypeFlocker FSType = "flocker" + FSTypeFlexVolume FSType = "flexVolume" + FSTypeHostPath FSType = "hostPath" + FSTypeEmptyDir FSType = "emptyDir" + FSTypeGCEPersistentDisk FSType = "gcePersistentDisk" + FSTypeAWSElasticBlockStore FSType = "awsElasticBlockStore" + FSTypeGitRepo FSType = "gitRepo" + FSTypeSecret FSType = "secret" + FSTypeNFS FSType = "nfs" + FSTypeISCSI FSType = "iscsi" + FSTypeGlusterfs FSType = "glusterfs" + FSTypePersistentVolumeClaim FSType = "persistentVolumeClaim" + FSTypeRBD FSType = "rbd" + FSTypeCinder FSType = "cinder" + FSTypeCephFS FSType = "cephFS" + FSTypeDownwardAPI FSType = "downwardAPI" + FSTypeFC FSType = "fc" + FSTypeConfigMap FSType = "configMap" + FSTypeVsphereVolume FSType = "vsphere" + FSTypeQuobyte FSType = "quobyte" + FSTypePhotonPersistentDisk FSType = "photonPersistentDisk" + FSProjected FSType = "projected" + FSPortworxVolume FSType = "portworxVolume" + FSScaleIO FSType = "scaleIO" + FSStorageOS FSType = "storageOS" + FSTypeCSI FSType = "csi" + FSTypeEphemeral FSType = "ephemeral" + FSTypeAll FSType = "*" + FSTypeNone FSType = "none" +) + +// AllowedFlexVolume represents a single Flexvolume that is allowed to be used. +type AllowedFlexVolume struct { + // Driver is the name of the Flexvolume driver. + Driver string `json:"driver" protobuf:"bytes,1,opt,name=driver"` +} + +// SELinuxContextStrategyOptions defines the strategy type and any options used to create the strategy. +type SELinuxContextStrategyOptions struct { + // Type is the strategy that will dictate what SELinux context is used in the SecurityContext. + Type SELinuxContextStrategyType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type,casttype=SELinuxContextStrategyType"` + // seLinuxOptions required to run as; required for MustRunAs + SELinuxOptions *corev1.SELinuxOptions `json:"seLinuxOptions,omitempty" protobuf:"bytes,2,opt,name=seLinuxOptions"` +} + +// RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. +type RunAsUserStrategyOptions struct { + // Type is the strategy that will dictate what RunAsUser is used in the SecurityContext. + Type RunAsUserStrategyType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type,casttype=RunAsUserStrategyType"` + // UID is the user id that containers must run as. Required for the MustRunAs strategy if not using + // namespace/service account allocated uids. + UID *int64 `json:"uid,omitempty" protobuf:"varint,2,opt,name=uid"` + // UIDRangeMin defines the min value for a strategy that allocates by range. + UIDRangeMin *int64 `json:"uidRangeMin,omitempty" protobuf:"varint,3,opt,name=uidRangeMin"` + // UIDRangeMax defines the max value for a strategy that allocates by range. + UIDRangeMax *int64 `json:"uidRangeMax,omitempty" protobuf:"varint,4,opt,name=uidRangeMax"` +} + +// FSGroupStrategyOptions defines the strategy type and options used to create the strategy. +type FSGroupStrategyOptions struct { + // Type is the strategy that will dictate what FSGroup is used in the SecurityContext. + Type FSGroupStrategyType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type,casttype=FSGroupStrategyType"` + // Ranges are the allowed ranges of fs groups. If you would like to force a single + // fs group then supply a single range with the same start and end. + Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"` +} + +// SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. +type SupplementalGroupsStrategyOptions struct { + // Type is the strategy that will dictate what supplemental groups is used in the SecurityContext. + Type SupplementalGroupsStrategyType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type,casttype=SupplementalGroupsStrategyType"` + // Ranges are the allowed ranges of supplemental groups. If you would like to force a single + // supplemental group then supply a single range with the same start and end. + Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"` +} + +// IDRange provides a min/max of an allowed range of IDs. +// TODO: this could be reused for UIDs. +type IDRange struct { + // Min is the start of the range, inclusive. + Min int64 `json:"min,omitempty" protobuf:"varint,1,opt,name=min"` + // Max is the end of the range, inclusive. + Max int64 `json:"max,omitempty" protobuf:"varint,2,opt,name=max"` +} + +// SELinuxContextStrategyType denotes strategy types for generating SELinux options for a +// SecurityContext +type SELinuxContextStrategyType string + +// RunAsUserStrategyType denotes strategy types for generating RunAsUser values for a +// SecurityContext +type RunAsUserStrategyType string + +// SupplementalGroupsStrategyType denotes strategy types for determining valid supplemental +// groups for a SecurityContext. +type SupplementalGroupsStrategyType string + +// FSGroupStrategyType denotes strategy types for generating FSGroup values for a +// SecurityContext +type FSGroupStrategyType string + +const ( + // container must have SELinux labels of X applied. + SELinuxStrategyMustRunAs SELinuxContextStrategyType = "MustRunAs" + // container may make requests for any SELinux context labels. + SELinuxStrategyRunAsAny SELinuxContextStrategyType = "RunAsAny" + + // container must run as a particular uid. + RunAsUserStrategyMustRunAs RunAsUserStrategyType = "MustRunAs" + // container must run as a particular uid. + RunAsUserStrategyMustRunAsRange RunAsUserStrategyType = "MustRunAsRange" + // container must run as a non-root uid + RunAsUserStrategyMustRunAsNonRoot RunAsUserStrategyType = "MustRunAsNonRoot" + // container may make requests for any uid. + RunAsUserStrategyRunAsAny RunAsUserStrategyType = "RunAsAny" + + // container must have FSGroup of X applied. + FSGroupStrategyMustRunAs FSGroupStrategyType = "MustRunAs" + // container may make requests for any FSGroup labels. + FSGroupStrategyRunAsAny FSGroupStrategyType = "RunAsAny" + + // container must run as a particular gid. + SupplementalGroupsStrategyMustRunAs SupplementalGroupsStrategyType = "MustRunAs" + // container may make requests for any gid. + SupplementalGroupsStrategyRunAsAny SupplementalGroupsStrategyType = "RunAsAny" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// SecurityContextConstraintsList is a list of SecurityContextConstraints objects +type SecurityContextConstraintsList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of security context constraints. + Items []SecurityContextConstraints `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient +// +genclient:onlyVerbs=create +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PodSecurityPolicySubjectReview checks whether a particular user/SA tuple can create the PodTemplateSpec. +type PodSecurityPolicySubjectReview struct { + metav1.TypeMeta `json:",inline"` + + // spec defines specification for the PodSecurityPolicySubjectReview. + Spec PodSecurityPolicySubjectReviewSpec `json:"spec" protobuf:"bytes,1,opt,name=spec"` + + // status represents the current information/status for the PodSecurityPolicySubjectReview. + Status PodSecurityPolicySubjectReviewStatus `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"` +} + +// PodSecurityPolicySubjectReviewSpec defines specification for PodSecurityPolicySubjectReview +type PodSecurityPolicySubjectReviewSpec struct { + // template is the PodTemplateSpec to check. If template.spec.serviceAccountName is empty it will not be defaulted. + // If its non-empty, it will be checked. + Template corev1.PodTemplateSpec `json:"template" protobuf:"bytes,1,opt,name=template"` + + // user is the user you're testing for. + // If you specify "user" but not "group", then is it interpreted as "What if user were not a member of any groups. + // If user and groups are empty, then the check is performed using *only* the serviceAccountName in the template. + User string `json:"user,omitempty" protobuf:"bytes,2,opt,name=user"` + + // groups is the groups you're testing for. + Groups []string `json:"groups,omitempty" protobuf:"bytes,3,rep,name=groups"` +} + +// PodSecurityPolicySubjectReviewStatus contains information/status for PodSecurityPolicySubjectReview. +type PodSecurityPolicySubjectReviewStatus struct { + // allowedBy is a reference to the rule that allows the PodTemplateSpec. + // A rule can be a SecurityContextConstraint or a PodSecurityPolicy + // A `nil`, indicates that it was denied. + AllowedBy *corev1.ObjectReference `json:"allowedBy,omitempty" protobuf:"bytes,1,opt,name=allowedBy"` + + // A machine-readable description of why this operation is in the + // "Failure" status. If this value is empty there + // is no information available. + Reason string `json:"reason,omitempty" protobuf:"bytes,2,opt,name=reason"` + + // template is the PodTemplateSpec after the defaulting is applied. + Template corev1.PodTemplateSpec `json:"template,omitempty" protobuf:"bytes,3,opt,name=template"` +} + +// +genclient +// +genclient:onlyVerbs=create +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PodSecurityPolicySelfSubjectReview checks whether this user/SA tuple can create the PodTemplateSpec +type PodSecurityPolicySelfSubjectReview struct { + metav1.TypeMeta `json:",inline"` + + // spec defines specification the PodSecurityPolicySelfSubjectReview. + Spec PodSecurityPolicySelfSubjectReviewSpec `json:"spec" protobuf:"bytes,1,opt,name=spec"` + + // status represents the current information/status for the PodSecurityPolicySelfSubjectReview. + Status PodSecurityPolicySubjectReviewStatus `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"` +} + +// PodSecurityPolicySelfSubjectReviewSpec contains specification for PodSecurityPolicySelfSubjectReview. +type PodSecurityPolicySelfSubjectReviewSpec struct { + // template is the PodTemplateSpec to check. + Template corev1.PodTemplateSpec `json:"template" protobuf:"bytes,1,opt,name=template"` +} + +// +genclient +// +genclient:onlyVerbs=create +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// PodSecurityPolicyReview checks which service accounts (not users, since that would be cluster-wide) can create the `PodTemplateSpec` in question. +type PodSecurityPolicyReview struct { + metav1.TypeMeta `json:",inline"` + + // spec is the PodSecurityPolicy to check. + Spec PodSecurityPolicyReviewSpec `json:"spec" protobuf:"bytes,1,opt,name=spec"` + + // status represents the current information/status for the PodSecurityPolicyReview. + Status PodSecurityPolicyReviewStatus `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"` +} + +// PodSecurityPolicyReviewSpec defines specification for PodSecurityPolicyReview +type PodSecurityPolicyReviewSpec struct { + // template is the PodTemplateSpec to check. The template.spec.serviceAccountName field is used + // if serviceAccountNames is empty, unless the template.spec.serviceAccountName is empty, + // in which case "default" is used. + // If serviceAccountNames is specified, template.spec.serviceAccountName is ignored. + Template corev1.PodTemplateSpec `json:"template" protobuf:"bytes,1,opt,name=template"` + + // serviceAccountNames is an optional set of ServiceAccounts to run the check with. + // If serviceAccountNames is empty, the template.spec.serviceAccountName is used, + // unless it's empty, in which case "default" is used instead. + // If serviceAccountNames is specified, template.spec.serviceAccountName is ignored. + ServiceAccountNames []string `json:"serviceAccountNames,omitempty" protobuf:"bytes,2,rep,name=serviceAccountNames"` // TODO: find a way to express 'all service accounts' +} + +// PodSecurityPolicyReviewStatus represents the status of PodSecurityPolicyReview. +type PodSecurityPolicyReviewStatus struct { + // allowedServiceAccounts returns the list of service accounts in *this* namespace that have the power to create the PodTemplateSpec. + AllowedServiceAccounts []ServiceAccountPodSecurityPolicyReviewStatus `json:"allowedServiceAccounts" protobuf:"bytes,1,rep,name=allowedServiceAccounts"` +} + +// ServiceAccountPodSecurityPolicyReviewStatus represents ServiceAccount name and related review status +type ServiceAccountPodSecurityPolicyReviewStatus struct { + PodSecurityPolicySubjectReviewStatus `json:",inline" protobuf:"bytes,1,opt,name=podSecurityPolicySubjectReviewStatus"` + + // name contains the allowed and the denied ServiceAccount name + Name string `json:"name" protobuf:"bytes,2,opt,name=name"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RangeAllocation is used so we can easily expose a RangeAllocation typed for security group +type RangeAllocation struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // range is a string representing a unique label for a range of uids, "1000000000-2000000000/10000". + Range string `json:"range" protobuf:"bytes,2,opt,name=range"` + + // data is a byte array representing the serialized state of a range allocation. It is a bitmap + // with each bit set to one to represent a range is taken. + Data []byte `json:"data" protobuf:"bytes,3,opt,name=data"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// RangeAllocationList is a list of RangeAllocations objects +type RangeAllocationList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of RangeAllocations. + Items []RangeAllocation `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/github.com/openshift/api/security/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/security/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..e6587b0462f11 --- /dev/null +++ b/vendor/github.com/openshift/api/security/v1/zz_generated.deepcopy.go @@ -0,0 +1,532 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AllowedFlexVolume) DeepCopyInto(out *AllowedFlexVolume) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AllowedFlexVolume. +func (in *AllowedFlexVolume) DeepCopy() *AllowedFlexVolume { + if in == nil { + return nil + } + out := new(AllowedFlexVolume) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FSGroupStrategyOptions) DeepCopyInto(out *FSGroupStrategyOptions) { + *out = *in + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FSGroupStrategyOptions. +func (in *FSGroupStrategyOptions) DeepCopy() *FSGroupStrategyOptions { + if in == nil { + return nil + } + out := new(FSGroupStrategyOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IDRange) DeepCopyInto(out *IDRange) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IDRange. +func (in *IDRange) DeepCopy() *IDRange { + if in == nil { + return nil + } + out := new(IDRange) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodSecurityPolicyReview) DeepCopyInto(out *PodSecurityPolicyReview) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicyReview. +func (in *PodSecurityPolicyReview) DeepCopy() *PodSecurityPolicyReview { + if in == nil { + return nil + } + out := new(PodSecurityPolicyReview) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PodSecurityPolicyReview) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodSecurityPolicyReviewSpec) DeepCopyInto(out *PodSecurityPolicyReviewSpec) { + *out = *in + in.Template.DeepCopyInto(&out.Template) + if in.ServiceAccountNames != nil { + in, out := &in.ServiceAccountNames, &out.ServiceAccountNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicyReviewSpec. +func (in *PodSecurityPolicyReviewSpec) DeepCopy() *PodSecurityPolicyReviewSpec { + if in == nil { + return nil + } + out := new(PodSecurityPolicyReviewSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodSecurityPolicyReviewStatus) DeepCopyInto(out *PodSecurityPolicyReviewStatus) { + *out = *in + if in.AllowedServiceAccounts != nil { + in, out := &in.AllowedServiceAccounts, &out.AllowedServiceAccounts + *out = make([]ServiceAccountPodSecurityPolicyReviewStatus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicyReviewStatus. +func (in *PodSecurityPolicyReviewStatus) DeepCopy() *PodSecurityPolicyReviewStatus { + if in == nil { + return nil + } + out := new(PodSecurityPolicyReviewStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodSecurityPolicySelfSubjectReview) DeepCopyInto(out *PodSecurityPolicySelfSubjectReview) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicySelfSubjectReview. +func (in *PodSecurityPolicySelfSubjectReview) DeepCopy() *PodSecurityPolicySelfSubjectReview { + if in == nil { + return nil + } + out := new(PodSecurityPolicySelfSubjectReview) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PodSecurityPolicySelfSubjectReview) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodSecurityPolicySelfSubjectReviewSpec) DeepCopyInto(out *PodSecurityPolicySelfSubjectReviewSpec) { + *out = *in + in.Template.DeepCopyInto(&out.Template) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicySelfSubjectReviewSpec. +func (in *PodSecurityPolicySelfSubjectReviewSpec) DeepCopy() *PodSecurityPolicySelfSubjectReviewSpec { + if in == nil { + return nil + } + out := new(PodSecurityPolicySelfSubjectReviewSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodSecurityPolicySubjectReview) DeepCopyInto(out *PodSecurityPolicySubjectReview) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicySubjectReview. +func (in *PodSecurityPolicySubjectReview) DeepCopy() *PodSecurityPolicySubjectReview { + if in == nil { + return nil + } + out := new(PodSecurityPolicySubjectReview) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PodSecurityPolicySubjectReview) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodSecurityPolicySubjectReviewSpec) DeepCopyInto(out *PodSecurityPolicySubjectReviewSpec) { + *out = *in + in.Template.DeepCopyInto(&out.Template) + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicySubjectReviewSpec. +func (in *PodSecurityPolicySubjectReviewSpec) DeepCopy() *PodSecurityPolicySubjectReviewSpec { + if in == nil { + return nil + } + out := new(PodSecurityPolicySubjectReviewSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodSecurityPolicySubjectReviewStatus) DeepCopyInto(out *PodSecurityPolicySubjectReviewStatus) { + *out = *in + if in.AllowedBy != nil { + in, out := &in.AllowedBy, &out.AllowedBy + *out = new(corev1.ObjectReference) + **out = **in + } + in.Template.DeepCopyInto(&out.Template) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityPolicySubjectReviewStatus. +func (in *PodSecurityPolicySubjectReviewStatus) DeepCopy() *PodSecurityPolicySubjectReviewStatus { + if in == nil { + return nil + } + out := new(PodSecurityPolicySubjectReviewStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RangeAllocation) DeepCopyInto(out *RangeAllocation) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make([]byte, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RangeAllocation. +func (in *RangeAllocation) DeepCopy() *RangeAllocation { + if in == nil { + return nil + } + out := new(RangeAllocation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RangeAllocation) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RangeAllocationList) DeepCopyInto(out *RangeAllocationList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]RangeAllocation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RangeAllocationList. +func (in *RangeAllocationList) DeepCopy() *RangeAllocationList { + if in == nil { + return nil + } + out := new(RangeAllocationList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RangeAllocationList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RunAsUserStrategyOptions) DeepCopyInto(out *RunAsUserStrategyOptions) { + *out = *in + if in.UID != nil { + in, out := &in.UID, &out.UID + *out = new(int64) + **out = **in + } + if in.UIDRangeMin != nil { + in, out := &in.UIDRangeMin, &out.UIDRangeMin + *out = new(int64) + **out = **in + } + if in.UIDRangeMax != nil { + in, out := &in.UIDRangeMax, &out.UIDRangeMax + *out = new(int64) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunAsUserStrategyOptions. +func (in *RunAsUserStrategyOptions) DeepCopy() *RunAsUserStrategyOptions { + if in == nil { + return nil + } + out := new(RunAsUserStrategyOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SELinuxContextStrategyOptions) DeepCopyInto(out *SELinuxContextStrategyOptions) { + *out = *in + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(corev1.SELinuxOptions) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SELinuxContextStrategyOptions. +func (in *SELinuxContextStrategyOptions) DeepCopy() *SELinuxContextStrategyOptions { + if in == nil { + return nil + } + out := new(SELinuxContextStrategyOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SecurityContextConstraints) DeepCopyInto(out *SecurityContextConstraints) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Priority != nil { + in, out := &in.Priority, &out.Priority + *out = new(int32) + **out = **in + } + if in.DefaultAddCapabilities != nil { + in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities + *out = make([]corev1.Capability, len(*in)) + copy(*out, *in) + } + if in.RequiredDropCapabilities != nil { + in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities + *out = make([]corev1.Capability, len(*in)) + copy(*out, *in) + } + if in.AllowedCapabilities != nil { + in, out := &in.AllowedCapabilities, &out.AllowedCapabilities + *out = make([]corev1.Capability, len(*in)) + copy(*out, *in) + } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]FSType, len(*in)) + copy(*out, *in) + } + if in.AllowedFlexVolumes != nil { + in, out := &in.AllowedFlexVolumes, &out.AllowedFlexVolumes + *out = make([]AllowedFlexVolume, len(*in)) + copy(*out, *in) + } + if in.DefaultAllowPrivilegeEscalation != nil { + in, out := &in.DefaultAllowPrivilegeEscalation, &out.DefaultAllowPrivilegeEscalation + *out = new(bool) + **out = **in + } + if in.AllowPrivilegeEscalation != nil { + in, out := &in.AllowPrivilegeEscalation, &out.AllowPrivilegeEscalation + *out = new(bool) + **out = **in + } + in.SELinuxContext.DeepCopyInto(&out.SELinuxContext) + in.RunAsUser.DeepCopyInto(&out.RunAsUser) + in.SupplementalGroups.DeepCopyInto(&out.SupplementalGroups) + in.FSGroup.DeepCopyInto(&out.FSGroup) + if in.Users != nil { + in, out := &in.Users, &out.Users + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.SeccompProfiles != nil { + in, out := &in.SeccompProfiles, &out.SeccompProfiles + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.AllowedUnsafeSysctls != nil { + in, out := &in.AllowedUnsafeSysctls, &out.AllowedUnsafeSysctls + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ForbiddenSysctls != nil { + in, out := &in.ForbiddenSysctls, &out.ForbiddenSysctls + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecurityContextConstraints. +func (in *SecurityContextConstraints) DeepCopy() *SecurityContextConstraints { + if in == nil { + return nil + } + out := new(SecurityContextConstraints) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *SecurityContextConstraints) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SecurityContextConstraintsList) DeepCopyInto(out *SecurityContextConstraintsList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]SecurityContextConstraints, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecurityContextConstraintsList. +func (in *SecurityContextConstraintsList) DeepCopy() *SecurityContextConstraintsList { + if in == nil { + return nil + } + out := new(SecurityContextConstraintsList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *SecurityContextConstraintsList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceAccountPodSecurityPolicyReviewStatus) DeepCopyInto(out *ServiceAccountPodSecurityPolicyReviewStatus) { + *out = *in + in.PodSecurityPolicySubjectReviewStatus.DeepCopyInto(&out.PodSecurityPolicySubjectReviewStatus) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceAccountPodSecurityPolicyReviewStatus. +func (in *ServiceAccountPodSecurityPolicyReviewStatus) DeepCopy() *ServiceAccountPodSecurityPolicyReviewStatus { + if in == nil { + return nil + } + out := new(ServiceAccountPodSecurityPolicyReviewStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SupplementalGroupsStrategyOptions) DeepCopyInto(out *SupplementalGroupsStrategyOptions) { + *out = *in + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SupplementalGroupsStrategyOptions. +func (in *SupplementalGroupsStrategyOptions) DeepCopy() *SupplementalGroupsStrategyOptions { + if in == nil { + return nil + } + out := new(SupplementalGroupsStrategyOptions) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/security/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/security/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000000..1077c04017bab --- /dev/null +++ b/vendor/github.com/openshift/api/security/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,224 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_AllowedFlexVolume = map[string]string{ + "": "AllowedFlexVolume represents a single Flexvolume that is allowed to be used.", + "driver": "Driver is the name of the Flexvolume driver.", +} + +func (AllowedFlexVolume) SwaggerDoc() map[string]string { + return map_AllowedFlexVolume +} + +var map_FSGroupStrategyOptions = map[string]string{ + "": "FSGroupStrategyOptions defines the strategy type and options used to create the strategy.", + "type": "Type is the strategy that will dictate what FSGroup is used in the SecurityContext.", + "ranges": "Ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end.", +} + +func (FSGroupStrategyOptions) SwaggerDoc() map[string]string { + return map_FSGroupStrategyOptions +} + +var map_IDRange = map[string]string{ + "": "IDRange provides a min/max of an allowed range of IDs.", + "min": "Min is the start of the range, inclusive.", + "max": "Max is the end of the range, inclusive.", +} + +func (IDRange) SwaggerDoc() map[string]string { + return map_IDRange +} + +var map_PodSecurityPolicyReview = map[string]string{ + "": "PodSecurityPolicyReview checks which service accounts (not users, since that would be cluster-wide) can create the `PodTemplateSpec` in question.", + "spec": "spec is the PodSecurityPolicy to check.", + "status": "status represents the current information/status for the PodSecurityPolicyReview.", +} + +func (PodSecurityPolicyReview) SwaggerDoc() map[string]string { + return map_PodSecurityPolicyReview +} + +var map_PodSecurityPolicyReviewSpec = map[string]string{ + "": "PodSecurityPolicyReviewSpec defines specification for PodSecurityPolicyReview", + "template": "template is the PodTemplateSpec to check. The template.spec.serviceAccountName field is used if serviceAccountNames is empty, unless the template.spec.serviceAccountName is empty, in which case \"default\" is used. If serviceAccountNames is specified, template.spec.serviceAccountName is ignored.", + "serviceAccountNames": "serviceAccountNames is an optional set of ServiceAccounts to run the check with. If serviceAccountNames is empty, the template.spec.serviceAccountName is used, unless it's empty, in which case \"default\" is used instead. If serviceAccountNames is specified, template.spec.serviceAccountName is ignored.", +} + +func (PodSecurityPolicyReviewSpec) SwaggerDoc() map[string]string { + return map_PodSecurityPolicyReviewSpec +} + +var map_PodSecurityPolicyReviewStatus = map[string]string{ + "": "PodSecurityPolicyReviewStatus represents the status of PodSecurityPolicyReview.", + "allowedServiceAccounts": "allowedServiceAccounts returns the list of service accounts in *this* namespace that have the power to create the PodTemplateSpec.", +} + +func (PodSecurityPolicyReviewStatus) SwaggerDoc() map[string]string { + return map_PodSecurityPolicyReviewStatus +} + +var map_PodSecurityPolicySelfSubjectReview = map[string]string{ + "": "PodSecurityPolicySelfSubjectReview checks whether this user/SA tuple can create the PodTemplateSpec", + "spec": "spec defines specification the PodSecurityPolicySelfSubjectReview.", + "status": "status represents the current information/status for the PodSecurityPolicySelfSubjectReview.", +} + +func (PodSecurityPolicySelfSubjectReview) SwaggerDoc() map[string]string { + return map_PodSecurityPolicySelfSubjectReview +} + +var map_PodSecurityPolicySelfSubjectReviewSpec = map[string]string{ + "": "PodSecurityPolicySelfSubjectReviewSpec contains specification for PodSecurityPolicySelfSubjectReview.", + "template": "template is the PodTemplateSpec to check.", +} + +func (PodSecurityPolicySelfSubjectReviewSpec) SwaggerDoc() map[string]string { + return map_PodSecurityPolicySelfSubjectReviewSpec +} + +var map_PodSecurityPolicySubjectReview = map[string]string{ + "": "PodSecurityPolicySubjectReview checks whether a particular user/SA tuple can create the PodTemplateSpec.", + "spec": "spec defines specification for the PodSecurityPolicySubjectReview.", + "status": "status represents the current information/status for the PodSecurityPolicySubjectReview.", +} + +func (PodSecurityPolicySubjectReview) SwaggerDoc() map[string]string { + return map_PodSecurityPolicySubjectReview +} + +var map_PodSecurityPolicySubjectReviewSpec = map[string]string{ + "": "PodSecurityPolicySubjectReviewSpec defines specification for PodSecurityPolicySubjectReview", + "template": "template is the PodTemplateSpec to check. If template.spec.serviceAccountName is empty it will not be defaulted. If its non-empty, it will be checked.", + "user": "user is the user you're testing for. If you specify \"user\" but not \"group\", then is it interpreted as \"What if user were not a member of any groups. If user and groups are empty, then the check is performed using *only* the serviceAccountName in the template.", + "groups": "groups is the groups you're testing for.", +} + +func (PodSecurityPolicySubjectReviewSpec) SwaggerDoc() map[string]string { + return map_PodSecurityPolicySubjectReviewSpec +} + +var map_PodSecurityPolicySubjectReviewStatus = map[string]string{ + "": "PodSecurityPolicySubjectReviewStatus contains information/status for PodSecurityPolicySubjectReview.", + "allowedBy": "allowedBy is a reference to the rule that allows the PodTemplateSpec. A rule can be a SecurityContextConstraint or a PodSecurityPolicy A `nil`, indicates that it was denied.", + "reason": "A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available.", + "template": "template is the PodTemplateSpec after the defaulting is applied.", +} + +func (PodSecurityPolicySubjectReviewStatus) SwaggerDoc() map[string]string { + return map_PodSecurityPolicySubjectReviewStatus +} + +var map_RangeAllocation = map[string]string{ + "": "RangeAllocation is used so we can easily expose a RangeAllocation typed for security group", + "range": "range is a string representing a unique label for a range of uids, \"1000000000-2000000000/10000\".", + "data": "data is a byte array representing the serialized state of a range allocation. It is a bitmap with each bit set to one to represent a range is taken.", +} + +func (RangeAllocation) SwaggerDoc() map[string]string { + return map_RangeAllocation +} + +var map_RangeAllocationList = map[string]string{ + "": "RangeAllocationList is a list of RangeAllocations objects", + "items": "List of RangeAllocations.", +} + +func (RangeAllocationList) SwaggerDoc() map[string]string { + return map_RangeAllocationList +} + +var map_RunAsUserStrategyOptions = map[string]string{ + "": "RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy.", + "type": "Type is the strategy that will dictate what RunAsUser is used in the SecurityContext.", + "uid": "UID is the user id that containers must run as. Required for the MustRunAs strategy if not using namespace/service account allocated uids.", + "uidRangeMin": "UIDRangeMin defines the min value for a strategy that allocates by range.", + "uidRangeMax": "UIDRangeMax defines the max value for a strategy that allocates by range.", +} + +func (RunAsUserStrategyOptions) SwaggerDoc() map[string]string { + return map_RunAsUserStrategyOptions +} + +var map_SELinuxContextStrategyOptions = map[string]string{ + "": "SELinuxContextStrategyOptions defines the strategy type and any options used to create the strategy.", + "type": "Type is the strategy that will dictate what SELinux context is used in the SecurityContext.", + "seLinuxOptions": "seLinuxOptions required to run as; required for MustRunAs", +} + +func (SELinuxContextStrategyOptions) SwaggerDoc() map[string]string { + return map_SELinuxContextStrategyOptions +} + +var map_SecurityContextConstraints = map[string]string{ + "": "SecurityContextConstraints governs the ability to make requests that affect the SecurityContext that will be applied to a container. For historical reasons SCC was exposed under the core Kubernetes API group. That exposure is deprecated and will be removed in a future release - users should instead use the security.openshift.io group to manage SecurityContextConstraints.", + "priority": "Priority influences the sort order of SCCs when evaluating which SCCs to try first for a given pod request based on access in the Users and Groups fields. The higher the int, the higher priority. An unset value is considered a 0 priority. If scores for multiple SCCs are equal they will be sorted from most restrictive to least restrictive. If both priorities and restrictions are equal the SCCs will be sorted by name.", + "allowPrivilegedContainer": "AllowPrivilegedContainer determines if a container can request to be run as privileged.", + "defaultAddCapabilities": "DefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capabiility in both DefaultAddCapabilities and RequiredDropCapabilities.", + "requiredDropCapabilities": "RequiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.", + "allowedCapabilities": "AllowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field maybe added at the pod author's discretion. You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities. To allow all capabilities you may use '*'.", + "allowHostDirVolumePlugin": "AllowHostDirVolumePlugin determines if the policy allow containers to use the HostDir volume plugin", + "volumes": "Volumes is a white list of allowed volume plugins. FSType corresponds directly with the field names of a VolumeSource (azureFile, configMap, emptyDir). To allow all volumes you may use \"*\". To allow no volumes, set to [\"none\"].", + "allowedFlexVolumes": "AllowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the \"Volumes\" field.", + "allowHostNetwork": "AllowHostNetwork determines if the policy allows the use of HostNetwork in the pod spec.", + "allowHostPorts": "AllowHostPorts determines if the policy allows host ports in the containers.", + "allowHostPID": "AllowHostPID determines if the policy allows host pid in the containers.", + "allowHostIPC": "AllowHostIPC determines if the policy allows host ipc in the containers.", + "defaultAllowPrivilegeEscalation": "DefaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.", + "allowPrivilegeEscalation": "AllowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.", + "seLinuxContext": "SELinuxContext is the strategy that will dictate what labels will be set in the SecurityContext.", + "runAsUser": "RunAsUser is the strategy that will dictate what RunAsUser is used in the SecurityContext.", + "supplementalGroups": "SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.", + "fsGroup": "FSGroup is the strategy that will dictate what fs group is used by the SecurityContext.", + "readOnlyRootFilesystem": "ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the SCC should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", + "users": "The users who have permissions to use this security context constraints", + "groups": "The groups that have permission to use this security context constraints", + "seccompProfiles": "SeccompProfiles lists the allowed profiles that may be set for the pod or container's seccomp annotations. An unset (nil) or empty value means that no profiles may be specifid by the pod or container.\tThe wildcard '*' may be used to allow all profiles. When used to generate a value for a pod the first non-wildcard profile will be used as the default.", + "allowedUnsafeSysctls": "AllowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n\nExamples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.", + "forbiddenSysctls": "ForbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n\nExamples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.", +} + +func (SecurityContextConstraints) SwaggerDoc() map[string]string { + return map_SecurityContextConstraints +} + +var map_SecurityContextConstraintsList = map[string]string{ + "": "SecurityContextConstraintsList is a list of SecurityContextConstraints objects", + "items": "List of security context constraints.", +} + +func (SecurityContextConstraintsList) SwaggerDoc() map[string]string { + return map_SecurityContextConstraintsList +} + +var map_ServiceAccountPodSecurityPolicyReviewStatus = map[string]string{ + "": "ServiceAccountPodSecurityPolicyReviewStatus represents ServiceAccount name and related review status", + "name": "name contains the allowed and the denied ServiceAccount name", +} + +func (ServiceAccountPodSecurityPolicyReviewStatus) SwaggerDoc() map[string]string { + return map_ServiceAccountPodSecurityPolicyReviewStatus +} + +var map_SupplementalGroupsStrategyOptions = map[string]string{ + "": "SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.", + "type": "Type is the strategy that will dictate what supplemental groups is used in the SecurityContext.", + "ranges": "Ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end.", +} + +func (SupplementalGroupsStrategyOptions) SwaggerDoc() map[string]string { + return map_SupplementalGroupsStrategyOptions +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/template/v1/codec.go b/vendor/github.com/openshift/api/template/v1/codec.go new file mode 100644 index 0000000000000..9e9177ed6a7da --- /dev/null +++ b/vendor/github.com/openshift/api/template/v1/codec.go @@ -0,0 +1,33 @@ +package v1 + +import ( + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + + "github.com/openshift/api/pkg/serialization" +) + +var _ runtime.NestedObjectDecoder = &Template{} +var _ runtime.NestedObjectEncoder = &Template{} + +// DecodeNestedObjects decodes the object as a runtime.Unknown with JSON content. +func (c *Template) DecodeNestedObjects(d runtime.Decoder) error { + for i := range c.Objects { + if c.Objects[i].Object != nil { + continue + } + c.Objects[i].Object = &runtime.Unknown{ + ContentType: "application/json", + Raw: c.Objects[i].Raw, + } + } + return nil +} +func (c *Template) EncodeNestedObjects(e runtime.Encoder) error { + for i := range c.Objects { + if err := serialization.EncodeNestedRawExtension(unstructured.UnstructuredJSONScheme, &c.Objects[i]); err != nil { + return err + } + } + return nil +} diff --git a/vendor/github.com/openshift/api/template/v1/consts.go b/vendor/github.com/openshift/api/template/v1/consts.go new file mode 100644 index 0000000000000..cc8b49d55f681 --- /dev/null +++ b/vendor/github.com/openshift/api/template/v1/consts.go @@ -0,0 +1,16 @@ +package v1 + +const ( + // TemplateInstanceFinalizer is used to clean up the objects created by the template instance, + // when the template instance is deleted. + TemplateInstanceFinalizer = "template.openshift.io/finalizer" + + // TemplateInstanceOwner is a label applied to all objects created from a template instance + // which contains the uid of the template instance. + TemplateInstanceOwner = "template.openshift.io/template-instance-owner" + + // WaitForReadyAnnotation indicates that the TemplateInstance controller + // should wait for the object to be ready before reporting the template + // instantiation complete. + WaitForReadyAnnotation = "template.alpha.openshift.io/wait-for-ready" +) diff --git a/vendor/github.com/openshift/api/template/v1/doc.go b/vendor/github.com/openshift/api/template/v1/doc.go new file mode 100644 index 0000000000000..34f9f8d455456 --- /dev/null +++ b/vendor/github.com/openshift/api/template/v1/doc.go @@ -0,0 +1,8 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=github.com/openshift/origin/pkg/template/apis/template +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +groupName=template.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/template/v1/generated.pb.go b/vendor/github.com/openshift/api/template/v1/generated.pb.go new file mode 100644 index 0000000000000..a47fd1ae9fcef --- /dev/null +++ b/vendor/github.com/openshift/api/template/v1/generated.pb.go @@ -0,0 +1,4157 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: github.com/openshift/api/template/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + k8s_io_api_core_v1 "k8s.io/api/core/v1" + v11 "k8s.io/api/core/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *BrokerTemplateInstance) Reset() { *m = BrokerTemplateInstance{} } +func (*BrokerTemplateInstance) ProtoMessage() {} +func (*BrokerTemplateInstance) Descriptor() ([]byte, []int) { + return fileDescriptor_8d3ee9f55fa8363e, []int{0} +} +func (m *BrokerTemplateInstance) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BrokerTemplateInstance) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BrokerTemplateInstance) XXX_Merge(src proto.Message) { + xxx_messageInfo_BrokerTemplateInstance.Merge(m, src) +} +func (m *BrokerTemplateInstance) XXX_Size() int { + return m.Size() +} +func (m *BrokerTemplateInstance) XXX_DiscardUnknown() { + xxx_messageInfo_BrokerTemplateInstance.DiscardUnknown(m) +} + +var xxx_messageInfo_BrokerTemplateInstance proto.InternalMessageInfo + +func (m *BrokerTemplateInstanceList) Reset() { *m = BrokerTemplateInstanceList{} } +func (*BrokerTemplateInstanceList) ProtoMessage() {} +func (*BrokerTemplateInstanceList) Descriptor() ([]byte, []int) { + return fileDescriptor_8d3ee9f55fa8363e, []int{1} +} +func (m *BrokerTemplateInstanceList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BrokerTemplateInstanceList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BrokerTemplateInstanceList) XXX_Merge(src proto.Message) { + xxx_messageInfo_BrokerTemplateInstanceList.Merge(m, src) +} +func (m *BrokerTemplateInstanceList) XXX_Size() int { + return m.Size() +} +func (m *BrokerTemplateInstanceList) XXX_DiscardUnknown() { + xxx_messageInfo_BrokerTemplateInstanceList.DiscardUnknown(m) +} + +var xxx_messageInfo_BrokerTemplateInstanceList proto.InternalMessageInfo + +func (m *BrokerTemplateInstanceSpec) Reset() { *m = BrokerTemplateInstanceSpec{} } +func (*BrokerTemplateInstanceSpec) ProtoMessage() {} +func (*BrokerTemplateInstanceSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_8d3ee9f55fa8363e, []int{2} +} +func (m *BrokerTemplateInstanceSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BrokerTemplateInstanceSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *BrokerTemplateInstanceSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_BrokerTemplateInstanceSpec.Merge(m, src) +} +func (m *BrokerTemplateInstanceSpec) XXX_Size() int { + return m.Size() +} +func (m *BrokerTemplateInstanceSpec) XXX_DiscardUnknown() { + xxx_messageInfo_BrokerTemplateInstanceSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_BrokerTemplateInstanceSpec proto.InternalMessageInfo + +func (m *ExtraValue) Reset() { *m = ExtraValue{} } +func (*ExtraValue) ProtoMessage() {} +func (*ExtraValue) Descriptor() ([]byte, []int) { + return fileDescriptor_8d3ee9f55fa8363e, []int{3} +} +func (m *ExtraValue) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ExtraValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ExtraValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExtraValue.Merge(m, src) +} +func (m *ExtraValue) XXX_Size() int { + return m.Size() +} +func (m *ExtraValue) XXX_DiscardUnknown() { + xxx_messageInfo_ExtraValue.DiscardUnknown(m) +} + +var xxx_messageInfo_ExtraValue proto.InternalMessageInfo + +func (m *Parameter) Reset() { *m = Parameter{} } +func (*Parameter) ProtoMessage() {} +func (*Parameter) Descriptor() ([]byte, []int) { + return fileDescriptor_8d3ee9f55fa8363e, []int{4} +} +func (m *Parameter) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Parameter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Parameter) XXX_Merge(src proto.Message) { + xxx_messageInfo_Parameter.Merge(m, src) +} +func (m *Parameter) XXX_Size() int { + return m.Size() +} +func (m *Parameter) XXX_DiscardUnknown() { + xxx_messageInfo_Parameter.DiscardUnknown(m) +} + +var xxx_messageInfo_Parameter proto.InternalMessageInfo + +func (m *Template) Reset() { *m = Template{} } +func (*Template) ProtoMessage() {} +func (*Template) Descriptor() ([]byte, []int) { + return fileDescriptor_8d3ee9f55fa8363e, []int{5} +} +func (m *Template) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Template) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Template) XXX_Merge(src proto.Message) { + xxx_messageInfo_Template.Merge(m, src) +} +func (m *Template) XXX_Size() int { + return m.Size() +} +func (m *Template) XXX_DiscardUnknown() { + xxx_messageInfo_Template.DiscardUnknown(m) +} + +var xxx_messageInfo_Template proto.InternalMessageInfo + +func (m *TemplateInstance) Reset() { *m = TemplateInstance{} } +func (*TemplateInstance) ProtoMessage() {} +func (*TemplateInstance) Descriptor() ([]byte, []int) { + return fileDescriptor_8d3ee9f55fa8363e, []int{6} +} +func (m *TemplateInstance) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TemplateInstance) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TemplateInstance) XXX_Merge(src proto.Message) { + xxx_messageInfo_TemplateInstance.Merge(m, src) +} +func (m *TemplateInstance) XXX_Size() int { + return m.Size() +} +func (m *TemplateInstance) XXX_DiscardUnknown() { + xxx_messageInfo_TemplateInstance.DiscardUnknown(m) +} + +var xxx_messageInfo_TemplateInstance proto.InternalMessageInfo + +func (m *TemplateInstanceCondition) Reset() { *m = TemplateInstanceCondition{} } +func (*TemplateInstanceCondition) ProtoMessage() {} +func (*TemplateInstanceCondition) Descriptor() ([]byte, []int) { + return fileDescriptor_8d3ee9f55fa8363e, []int{7} +} +func (m *TemplateInstanceCondition) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TemplateInstanceCondition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TemplateInstanceCondition) XXX_Merge(src proto.Message) { + xxx_messageInfo_TemplateInstanceCondition.Merge(m, src) +} +func (m *TemplateInstanceCondition) XXX_Size() int { + return m.Size() +} +func (m *TemplateInstanceCondition) XXX_DiscardUnknown() { + xxx_messageInfo_TemplateInstanceCondition.DiscardUnknown(m) +} + +var xxx_messageInfo_TemplateInstanceCondition proto.InternalMessageInfo + +func (m *TemplateInstanceList) Reset() { *m = TemplateInstanceList{} } +func (*TemplateInstanceList) ProtoMessage() {} +func (*TemplateInstanceList) Descriptor() ([]byte, []int) { + return fileDescriptor_8d3ee9f55fa8363e, []int{8} +} +func (m *TemplateInstanceList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TemplateInstanceList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TemplateInstanceList) XXX_Merge(src proto.Message) { + xxx_messageInfo_TemplateInstanceList.Merge(m, src) +} +func (m *TemplateInstanceList) XXX_Size() int { + return m.Size() +} +func (m *TemplateInstanceList) XXX_DiscardUnknown() { + xxx_messageInfo_TemplateInstanceList.DiscardUnknown(m) +} + +var xxx_messageInfo_TemplateInstanceList proto.InternalMessageInfo + +func (m *TemplateInstanceObject) Reset() { *m = TemplateInstanceObject{} } +func (*TemplateInstanceObject) ProtoMessage() {} +func (*TemplateInstanceObject) Descriptor() ([]byte, []int) { + return fileDescriptor_8d3ee9f55fa8363e, []int{9} +} +func (m *TemplateInstanceObject) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TemplateInstanceObject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TemplateInstanceObject) XXX_Merge(src proto.Message) { + xxx_messageInfo_TemplateInstanceObject.Merge(m, src) +} +func (m *TemplateInstanceObject) XXX_Size() int { + return m.Size() +} +func (m *TemplateInstanceObject) XXX_DiscardUnknown() { + xxx_messageInfo_TemplateInstanceObject.DiscardUnknown(m) +} + +var xxx_messageInfo_TemplateInstanceObject proto.InternalMessageInfo + +func (m *TemplateInstanceRequester) Reset() { *m = TemplateInstanceRequester{} } +func (*TemplateInstanceRequester) ProtoMessage() {} +func (*TemplateInstanceRequester) Descriptor() ([]byte, []int) { + return fileDescriptor_8d3ee9f55fa8363e, []int{10} +} +func (m *TemplateInstanceRequester) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TemplateInstanceRequester) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TemplateInstanceRequester) XXX_Merge(src proto.Message) { + xxx_messageInfo_TemplateInstanceRequester.Merge(m, src) +} +func (m *TemplateInstanceRequester) XXX_Size() int { + return m.Size() +} +func (m *TemplateInstanceRequester) XXX_DiscardUnknown() { + xxx_messageInfo_TemplateInstanceRequester.DiscardUnknown(m) +} + +var xxx_messageInfo_TemplateInstanceRequester proto.InternalMessageInfo + +func (m *TemplateInstanceSpec) Reset() { *m = TemplateInstanceSpec{} } +func (*TemplateInstanceSpec) ProtoMessage() {} +func (*TemplateInstanceSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_8d3ee9f55fa8363e, []int{11} +} +func (m *TemplateInstanceSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TemplateInstanceSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TemplateInstanceSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_TemplateInstanceSpec.Merge(m, src) +} +func (m *TemplateInstanceSpec) XXX_Size() int { + return m.Size() +} +func (m *TemplateInstanceSpec) XXX_DiscardUnknown() { + xxx_messageInfo_TemplateInstanceSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_TemplateInstanceSpec proto.InternalMessageInfo + +func (m *TemplateInstanceStatus) Reset() { *m = TemplateInstanceStatus{} } +func (*TemplateInstanceStatus) ProtoMessage() {} +func (*TemplateInstanceStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_8d3ee9f55fa8363e, []int{12} +} +func (m *TemplateInstanceStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TemplateInstanceStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TemplateInstanceStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_TemplateInstanceStatus.Merge(m, src) +} +func (m *TemplateInstanceStatus) XXX_Size() int { + return m.Size() +} +func (m *TemplateInstanceStatus) XXX_DiscardUnknown() { + xxx_messageInfo_TemplateInstanceStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_TemplateInstanceStatus proto.InternalMessageInfo + +func (m *TemplateList) Reset() { *m = TemplateList{} } +func (*TemplateList) ProtoMessage() {} +func (*TemplateList) Descriptor() ([]byte, []int) { + return fileDescriptor_8d3ee9f55fa8363e, []int{13} +} +func (m *TemplateList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TemplateList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *TemplateList) XXX_Merge(src proto.Message) { + xxx_messageInfo_TemplateList.Merge(m, src) +} +func (m *TemplateList) XXX_Size() int { + return m.Size() +} +func (m *TemplateList) XXX_DiscardUnknown() { + xxx_messageInfo_TemplateList.DiscardUnknown(m) +} + +var xxx_messageInfo_TemplateList proto.InternalMessageInfo + +func init() { + proto.RegisterType((*BrokerTemplateInstance)(nil), "github.com.openshift.api.template.v1.BrokerTemplateInstance") + proto.RegisterType((*BrokerTemplateInstanceList)(nil), "github.com.openshift.api.template.v1.BrokerTemplateInstanceList") + proto.RegisterType((*BrokerTemplateInstanceSpec)(nil), "github.com.openshift.api.template.v1.BrokerTemplateInstanceSpec") + proto.RegisterType((*ExtraValue)(nil), "github.com.openshift.api.template.v1.ExtraValue") + proto.RegisterType((*Parameter)(nil), "github.com.openshift.api.template.v1.Parameter") + proto.RegisterType((*Template)(nil), "github.com.openshift.api.template.v1.Template") + proto.RegisterMapType((map[string]string)(nil), "github.com.openshift.api.template.v1.Template.LabelsEntry") + proto.RegisterType((*TemplateInstance)(nil), "github.com.openshift.api.template.v1.TemplateInstance") + proto.RegisterType((*TemplateInstanceCondition)(nil), "github.com.openshift.api.template.v1.TemplateInstanceCondition") + proto.RegisterType((*TemplateInstanceList)(nil), "github.com.openshift.api.template.v1.TemplateInstanceList") + proto.RegisterType((*TemplateInstanceObject)(nil), "github.com.openshift.api.template.v1.TemplateInstanceObject") + proto.RegisterType((*TemplateInstanceRequester)(nil), "github.com.openshift.api.template.v1.TemplateInstanceRequester") + proto.RegisterMapType((map[string]ExtraValue)(nil), "github.com.openshift.api.template.v1.TemplateInstanceRequester.ExtraEntry") + proto.RegisterType((*TemplateInstanceSpec)(nil), "github.com.openshift.api.template.v1.TemplateInstanceSpec") + proto.RegisterType((*TemplateInstanceStatus)(nil), "github.com.openshift.api.template.v1.TemplateInstanceStatus") + proto.RegisterType((*TemplateList)(nil), "github.com.openshift.api.template.v1.TemplateList") +} + +func init() { + proto.RegisterFile("github.com/openshift/api/template/v1/generated.proto", fileDescriptor_8d3ee9f55fa8363e) +} + +var fileDescriptor_8d3ee9f55fa8363e = []byte{ + // 1243 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0x4d, 0x8f, 0x1b, 0x45, + 0x13, 0xf6, 0xf8, 0x6b, 0xed, 0x76, 0x92, 0x77, 0xd5, 0x6f, 0x14, 0x0d, 0x96, 0x62, 0x5b, 0x13, + 0x84, 0x0c, 0x4a, 0xc6, 0x6c, 0x14, 0x42, 0x58, 0x21, 0x01, 0xc3, 0x6e, 0xa2, 0x85, 0x0d, 0xa0, + 0xde, 0x0d, 0x42, 0xb0, 0x07, 0xda, 0xe3, 0xb6, 0x77, 0xb2, 0x9e, 0x0f, 0xba, 0xdb, 0x26, 0xbe, + 0xe5, 0xc0, 0x0f, 0xe0, 0xc8, 0x91, 0x9f, 0xc0, 0x91, 0x13, 0x12, 0xb7, 0x3d, 0x86, 0x5b, 0x0e, + 0x60, 0xb1, 0xe6, 0xc4, 0x1f, 0x00, 0x29, 0x5c, 0x50, 0xf7, 0xf4, 0x7c, 0xf8, 0x8b, 0x78, 0x37, + 0x52, 0x72, 0x9b, 0xa9, 0xae, 0xe7, 0xa9, 0xae, 0xea, 0xea, 0xa7, 0x0b, 0xdc, 0xe8, 0x39, 0xfc, + 0x70, 0xd0, 0x36, 0x6d, 0xdf, 0x6d, 0xf9, 0x01, 0xf1, 0xd8, 0xa1, 0xd3, 0xe5, 0x2d, 0x1c, 0x38, + 0x2d, 0x4e, 0xdc, 0xa0, 0x8f, 0x39, 0x69, 0x0d, 0x37, 0x5a, 0x3d, 0xe2, 0x11, 0x8a, 0x39, 0xe9, + 0x98, 0x01, 0xf5, 0xb9, 0x0f, 0x5f, 0x4e, 0x50, 0x66, 0x8c, 0x32, 0x71, 0xe0, 0x98, 0x11, 0xca, + 0x1c, 0x6e, 0x54, 0xaf, 0xa5, 0xb8, 0x7b, 0x7e, 0xcf, 0x6f, 0x49, 0x70, 0x7b, 0xd0, 0x95, 0x7f, + 0xf2, 0x47, 0x7e, 0x85, 0xa4, 0x55, 0xe3, 0xe8, 0x16, 0x33, 0x1d, 0x5f, 0x06, 0xb7, 0x7d, 0xba, + 0x28, 0x70, 0xf5, 0x46, 0xe2, 0xe3, 0x62, 0xfb, 0xd0, 0xf1, 0x08, 0x1d, 0xb5, 0x82, 0xa3, 0x9e, + 0x30, 0xb0, 0x96, 0x4b, 0x38, 0x5e, 0x84, 0x6a, 0x2d, 0x43, 0xd1, 0x81, 0xc7, 0x1d, 0x97, 0xcc, + 0x01, 0x6e, 0x3e, 0x0d, 0xc0, 0xec, 0x43, 0xe2, 0xe2, 0x59, 0x9c, 0x31, 0xd6, 0xc0, 0x25, 0x8b, + 0xfa, 0x47, 0x84, 0xee, 0xab, 0x3a, 0xec, 0x78, 0x8c, 0x63, 0xcf, 0x26, 0xf0, 0x4b, 0x50, 0x12, + 0xdb, 0xeb, 0x60, 0x8e, 0x75, 0xad, 0xa1, 0x35, 0x2b, 0xd7, 0x5f, 0x37, 0xc3, 0x28, 0x66, 0x3a, + 0x8a, 0x19, 0x1c, 0xf5, 0x84, 0x81, 0x99, 0xc2, 0xdb, 0x1c, 0x6e, 0x98, 0x1f, 0xb7, 0xef, 0x13, + 0x9b, 0xdf, 0x25, 0x1c, 0x5b, 0xf0, 0x78, 0x5c, 0xcf, 0x4c, 0xc6, 0x75, 0x90, 0xd8, 0x50, 0xcc, + 0x0a, 0xdb, 0x20, 0xcf, 0x02, 0x62, 0xeb, 0x59, 0xc9, 0xfe, 0xae, 0xb9, 0xca, 0x19, 0x99, 0x8b, + 0x77, 0xbb, 0x17, 0x10, 0xdb, 0x3a, 0xa7, 0xa2, 0xe5, 0xc5, 0x1f, 0x92, 0xdc, 0xc6, 0x6f, 0x1a, + 0xa8, 0x2e, 0x86, 0xec, 0x3a, 0x8c, 0xc3, 0x83, 0xb9, 0x24, 0xcd, 0xd5, 0x92, 0x14, 0x68, 0x99, + 0xe2, 0xba, 0x0a, 0x5a, 0x8a, 0x2c, 0xa9, 0x04, 0x31, 0x28, 0x38, 0x9c, 0xb8, 0x4c, 0xcf, 0x36, + 0x72, 0xcd, 0xca, 0xf5, 0xb7, 0x9f, 0x25, 0x43, 0xeb, 0xbc, 0x0a, 0x54, 0xd8, 0x11, 0x94, 0x28, + 0x64, 0x36, 0xbe, 0xc9, 0x2e, 0xcb, 0x4f, 0x14, 0x01, 0x3a, 0x60, 0x9d, 0xcf, 0xd8, 0x55, 0x9e, + 0x57, 0x52, 0x79, 0x9a, 0xa2, 0x7b, 0x93, 0xa3, 0x43, 0xa4, 0x4b, 0x28, 0x11, 0x31, 0x75, 0x15, + 0x73, 0x7d, 0x96, 0x1c, 0xcd, 0xd1, 0xc2, 0x0f, 0x41, 0x91, 0x11, 0x9b, 0x12, 0xae, 0xce, 0x73, + 0xa5, 0x00, 0x17, 0x54, 0x80, 0xe2, 0x9e, 0x84, 0x22, 0x45, 0x01, 0x4d, 0x00, 0xda, 0x8e, 0xd7, + 0x71, 0xbc, 0xde, 0xce, 0x16, 0xd3, 0x73, 0x8d, 0x5c, 0xb3, 0x6c, 0x5d, 0x10, 0x8d, 0x64, 0xc5, + 0x56, 0x94, 0xf2, 0x30, 0xde, 0x04, 0x60, 0xfb, 0x01, 0xa7, 0xf8, 0x53, 0xdc, 0x1f, 0x10, 0x58, + 0x8f, 0xea, 0xae, 0x49, 0x60, 0x79, 0xb6, 0x6a, 0x9b, 0xa5, 0xef, 0xbe, 0xaf, 0x67, 0x1e, 0xfe, + 0xda, 0xc8, 0x18, 0x3f, 0x65, 0x41, 0xf9, 0x13, 0x4c, 0xb1, 0x4b, 0x38, 0xa1, 0xb0, 0x01, 0xf2, + 0x1e, 0x76, 0xc3, 0x12, 0x95, 0x93, 0x7e, 0xfa, 0x08, 0xbb, 0x04, 0xc9, 0x15, 0xf8, 0x06, 0xa8, + 0x74, 0x1c, 0x16, 0xf4, 0xf1, 0x48, 0x18, 0x65, 0xaa, 0x65, 0xeb, 0xff, 0xca, 0xb1, 0xb2, 0x95, + 0x2c, 0xa1, 0xb4, 0x9f, 0x84, 0x11, 0x66, 0x53, 0x27, 0xe0, 0x8e, 0xef, 0xe9, 0xb9, 0x19, 0x58, + 0xb2, 0x84, 0xd2, 0x7e, 0xf0, 0x0a, 0x28, 0x0c, 0x45, 0x46, 0x7a, 0x5e, 0x02, 0xe2, 0x16, 0x90, + 0x69, 0xa2, 0x70, 0x0d, 0x5e, 0x05, 0xa5, 0xe8, 0x5a, 0xeb, 0x05, 0xe9, 0x17, 0xf7, 0xe4, 0x1d, + 0x65, 0x47, 0xb1, 0x87, 0x48, 0xb1, 0x4b, 0x7d, 0x57, 0x2f, 0x4e, 0xa7, 0x78, 0x9b, 0xfa, 0x2e, + 0x92, 0x2b, 0x82, 0x8f, 0x92, 0xaf, 0x06, 0x0e, 0x25, 0x1d, 0x7d, 0xad, 0xa1, 0x35, 0x4b, 0x09, + 0x1f, 0x52, 0x76, 0x14, 0x7b, 0x18, 0xff, 0xe4, 0x40, 0x29, 0xea, 0x8e, 0xe7, 0xa0, 0x19, 0xaf, + 0x82, 0x35, 0x97, 0x30, 0x86, 0x7b, 0x51, 0xed, 0xff, 0xa7, 0xdc, 0xd7, 0xee, 0x86, 0x66, 0x14, + 0xad, 0xc3, 0xcf, 0xc0, 0x9a, 0x2f, 0x29, 0xc2, 0x06, 0xaa, 0x5c, 0xbf, 0xb6, 0x74, 0x2f, 0x4a, + 0x25, 0x4d, 0x84, 0xbf, 0xde, 0x7e, 0xc0, 0x89, 0xc7, 0x1c, 0xdf, 0x4b, 0x98, 0xc3, 0x8d, 0x30, + 0x14, 0xd1, 0x41, 0x1b, 0x80, 0x20, 0xea, 0x19, 0xa6, 0xe7, 0x25, 0x79, 0x6b, 0xb5, 0xcb, 0x1d, + 0xf7, 0x5a, 0x92, 0x67, 0x6c, 0x62, 0x28, 0x45, 0x0b, 0x0f, 0x41, 0xb1, 0x8f, 0xdb, 0xa4, 0xcf, + 0xf4, 0x82, 0x0c, 0xb0, 0xb9, 0x5a, 0x80, 0xe8, 0x2c, 0xcc, 0x5d, 0x09, 0xde, 0xf6, 0x38, 0x1d, + 0x59, 0x17, 0x55, 0xac, 0x73, 0x61, 0x2a, 0xe1, 0x12, 0x52, 0xfc, 0xd5, 0xb7, 0x40, 0x25, 0xe5, + 0x0c, 0xd7, 0x41, 0xee, 0x88, 0x8c, 0xc2, 0x3b, 0x80, 0xc4, 0x27, 0xbc, 0x18, 0xb5, 0xa1, 0x2c, + 0xb9, 0xea, 0xbb, 0xcd, 0xec, 0x2d, 0xcd, 0xf8, 0x31, 0x0b, 0xd6, 0x5f, 0xc0, 0xcb, 0x71, 0x30, + 0xf5, 0x72, 0x9c, 0xb2, 0x32, 0x4f, 0x7b, 0x33, 0x60, 0x07, 0x14, 0x19, 0xc7, 0x7c, 0xc0, 0xe4, + 0x3d, 0x5d, 0x59, 0xb7, 0xe7, 0xf8, 0x25, 0x47, 0x4a, 0xe2, 0xe4, 0x3f, 0x52, 0xdc, 0xc6, 0xdf, + 0x59, 0xf0, 0xd2, 0x2c, 0xe4, 0x7d, 0xdf, 0xeb, 0x38, 0xf2, 0xe6, 0xbf, 0x07, 0xf2, 0x7c, 0x14, + 0x44, 0x4a, 0x74, 0x2d, 0xda, 0xe5, 0xfe, 0x28, 0x20, 0x4f, 0xc6, 0xf5, 0xcb, 0x4b, 0x81, 0xc2, + 0x01, 0x49, 0x28, 0xdc, 0x8d, 0xd3, 0x08, 0x6f, 0xca, 0x8d, 0xe9, 0x8d, 0x3c, 0x19, 0xd7, 0x17, + 0x0c, 0x30, 0x66, 0xcc, 0x34, 0xbd, 0x5d, 0x38, 0x04, 0xb0, 0x8f, 0x19, 0xdf, 0xa7, 0xd8, 0x63, + 0x61, 0x24, 0xc7, 0x25, 0xaa, 0x40, 0xaf, 0xad, 0x76, 0xbc, 0x02, 0x61, 0x55, 0xd5, 0x2e, 0xe0, + 0xee, 0x1c, 0x1b, 0x5a, 0x10, 0x01, 0xbe, 0x02, 0x8a, 0x94, 0x60, 0xe6, 0x7b, 0x4a, 0x03, 0xe3, + 0x72, 0x22, 0x69, 0x45, 0x6a, 0x35, 0x2d, 0x0c, 0x85, 0xff, 0x16, 0x06, 0xe3, 0x17, 0x0d, 0x5c, + 0x7c, 0x01, 0xd3, 0xc0, 0x17, 0xd3, 0xd3, 0xc0, 0xcd, 0xb3, 0x75, 0xd5, 0x92, 0x39, 0xe0, 0x00, + 0x5c, 0x9a, 0xf5, 0x0c, 0x6f, 0x0e, 0xb4, 0x40, 0x8e, 0x92, 0xee, 0x69, 0x5e, 0xfd, 0x8a, 0x8a, + 0x90, 0x43, 0xa4, 0x8b, 0x04, 0xd8, 0xf8, 0x73, 0x41, 0xaf, 0x8a, 0xb7, 0x80, 0x30, 0xf1, 0x6a, + 0x5e, 0x05, 0xa5, 0x01, 0x23, 0x34, 0xf5, 0x72, 0xc6, 0x65, 0xb8, 0xa7, 0xec, 0x28, 0xf6, 0x80, + 0x97, 0x41, 0x6e, 0xe0, 0x74, 0x54, 0x4f, 0xc6, 0xa1, 0xee, 0xed, 0x6c, 0x21, 0x61, 0x87, 0x06, + 0x28, 0xf6, 0xa8, 0x3f, 0x08, 0xa2, 0x57, 0x1f, 0x88, 0xb3, 0xbe, 0x23, 0x2d, 0x48, 0xad, 0x40, + 0x1f, 0x14, 0x88, 0x78, 0xed, 0x95, 0xf4, 0x7e, 0x70, 0xb6, 0x4a, 0xc6, 0x09, 0x98, 0x72, 0x74, + 0x08, 0x95, 0x32, 0xae, 0xae, 0xb4, 0xa1, 0x30, 0x4e, 0xf5, 0xbe, 0x1a, 0x2f, 0x96, 0x09, 0xe4, + 0xed, 0xb4, 0x40, 0x0a, 0xb9, 0x5b, 0x69, 0x43, 0xc9, 0xc4, 0x92, 0x96, 0xd4, 0x1f, 0xb2, 0xf3, + 0xdd, 0x29, 0x67, 0xb9, 0x03, 0x50, 0x8a, 0xd0, 0x71, 0x77, 0x9e, 0x2a, 0xf1, 0xe4, 0x58, 0x22, + 0x0b, 0x8a, 0x19, 0xa5, 0x5a, 0xa4, 0xc7, 0xb7, 0xe6, 0xa2, 0x4e, 0xd9, 0xf5, 0x6d, 0xdc, 0x9f, + 0x6d, 0x17, 0xb0, 0x60, 0x7e, 0xeb, 0x83, 0x32, 0x8d, 0xca, 0xab, 0x44, 0xe2, 0x9d, 0x67, 0x3c, + 0x25, 0xeb, 0xfc, 0x64, 0x5c, 0x2f, 0xc7, 0xbf, 0x28, 0x09, 0x60, 0xfc, 0xa5, 0xcd, 0x77, 0x7f, + 0x28, 0x5f, 0x90, 0x01, 0x60, 0x47, 0x8a, 0x16, 0xce, 0x83, 0x67, 0xde, 0x49, 0xac, 0x8c, 0xc9, + 0xe3, 0x14, 0x9b, 0x18, 0x4a, 0x85, 0x81, 0xbd, 0x64, 0xf2, 0x38, 0xd5, 0xe4, 0xbf, 0xf8, 0x06, + 0x2f, 0x1f, 0x44, 0x8c, 0x9f, 0x35, 0x70, 0x2e, 0x02, 0x3d, 0x07, 0x05, 0xdb, 0x9b, 0x56, 0xb0, + 0xd3, 0xb6, 0xdf, 0x42, 0xe5, 0xb2, 0x9a, 0xc7, 0x27, 0xb5, 0xcc, 0xa3, 0x93, 0x5a, 0xe6, 0xf1, + 0x49, 0x2d, 0xf3, 0x70, 0x52, 0xd3, 0x8e, 0x27, 0x35, 0xed, 0xd1, 0xa4, 0xa6, 0x3d, 0x9e, 0xd4, + 0xb4, 0xdf, 0x27, 0x35, 0xed, 0xdb, 0x3f, 0x6a, 0x99, 0xcf, 0xb3, 0xc3, 0x8d, 0x7f, 0x03, 0x00, + 0x00, 0xff, 0xff, 0x33, 0xf4, 0x09, 0xac, 0xfb, 0x0f, 0x00, 0x00, +} + +func (m *BrokerTemplateInstance) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BrokerTemplateInstance) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BrokerTemplateInstance) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BrokerTemplateInstanceList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BrokerTemplateInstanceList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BrokerTemplateInstanceList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *BrokerTemplateInstanceSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BrokerTemplateInstanceSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BrokerTemplateInstanceSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.BindingIDs) > 0 { + for iNdEx := len(m.BindingIDs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.BindingIDs[iNdEx]) + copy(dAtA[i:], m.BindingIDs[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.BindingIDs[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + { + size, err := m.Secret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.TemplateInstance.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m ExtraValue) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m ExtraValue) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m ExtraValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m) > 0 { + for iNdEx := len(m) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m[iNdEx]) + copy(dAtA[i:], m[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *Parameter) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Parameter) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Parameter) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.Required { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 + i -= len(m.From) + copy(dAtA[i:], m.From) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.From))) + i-- + dAtA[i] = 0x32 + i -= len(m.Generate) + copy(dAtA[i:], m.Generate) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Generate))) + i-- + dAtA[i] = 0x2a + i -= len(m.Value) + copy(dAtA[i:], m.Value) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Value))) + i-- + dAtA[i] = 0x22 + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x1a + i -= len(m.DisplayName) + copy(dAtA[i:], m.DisplayName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DisplayName))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Template) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Template) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Template) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ObjectLabels) > 0 { + keysForObjectLabels := make([]string, 0, len(m.ObjectLabels)) + for k := range m.ObjectLabels { + keysForObjectLabels = append(keysForObjectLabels, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForObjectLabels) + for iNdEx := len(keysForObjectLabels) - 1; iNdEx >= 0; iNdEx-- { + v := m.ObjectLabels[string(keysForObjectLabels[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForObjectLabels[iNdEx]) + copy(dAtA[i:], keysForObjectLabels[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForObjectLabels[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x2a + } + } + if len(m.Parameters) > 0 { + for iNdEx := len(m.Parameters) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Parameters[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.Objects) > 0 { + for iNdEx := len(m.Objects) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Objects[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TemplateInstance) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TemplateInstance) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TemplateInstance) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TemplateInstanceCondition) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TemplateInstanceCondition) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TemplateInstanceCondition) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x2a + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x22 + { + size, err := m.LastTransitionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TemplateInstanceList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TemplateInstanceList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TemplateInstanceList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TemplateInstanceObject) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TemplateInstanceObject) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TemplateInstanceObject) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Ref.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TemplateInstanceRequester) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TemplateInstanceRequester) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TemplateInstanceRequester) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Extra) > 0 { + keysForExtra := make([]string, 0, len(m.Extra)) + for k := range m.Extra { + keysForExtra = append(keysForExtra, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) + for iNdEx := len(keysForExtra) - 1; iNdEx >= 0; iNdEx-- { + v := m.Extra[string(keysForExtra[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForExtra[iNdEx]) + copy(dAtA[i:], keysForExtra[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForExtra[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x22 + } + } + if len(m.Groups) > 0 { + for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Groups[iNdEx]) + copy(dAtA[i:], m.Groups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Groups[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.UID) + copy(dAtA[i:], m.UID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) + i-- + dAtA[i] = 0x12 + i -= len(m.Username) + copy(dAtA[i:], m.Username) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Username))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TemplateInstanceSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TemplateInstanceSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TemplateInstanceSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Requester != nil { + { + size, err := m.Requester.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Secret != nil { + { + size, err := m.Secret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TemplateInstanceStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TemplateInstanceStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TemplateInstanceStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Objects) > 0 { + for iNdEx := len(m.Objects) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Objects[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *TemplateList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TemplateList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TemplateList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *BrokerTemplateInstance) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *BrokerTemplateInstanceList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *BrokerTemplateInstanceSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.TemplateInstance.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Secret.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.BindingIDs) > 0 { + for _, s := range m.BindingIDs { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m ExtraValue) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m) > 0 { + for _, s := range m { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *Parameter) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DisplayName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Description) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Value) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Generate) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.From) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + +func (m *Template) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Objects) > 0 { + for _, e := range m.Objects { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Parameters) > 0 { + for _, e := range m.Parameters { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.ObjectLabels) > 0 { + for k, v := range m.ObjectLabels { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *TemplateInstance) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *TemplateInstanceCondition) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *TemplateInstanceList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *TemplateInstanceObject) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Ref.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *TemplateInstanceRequester) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Username) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UID) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Groups) > 0 { + for _, s := range m.Groups { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Extra) > 0 { + for k, v := range m.Extra { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *TemplateInstanceSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Template.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Secret != nil { + l = m.Secret.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Requester != nil { + l = m.Requester.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *TemplateInstanceStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Objects) > 0 { + for _, e := range m.Objects { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *TemplateList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *BrokerTemplateInstance) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BrokerTemplateInstance{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "BrokerTemplateInstanceSpec", "BrokerTemplateInstanceSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *BrokerTemplateInstanceList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]BrokerTemplateInstance{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "BrokerTemplateInstance", "BrokerTemplateInstance", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&BrokerTemplateInstanceList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *BrokerTemplateInstanceSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&BrokerTemplateInstanceSpec{`, + `TemplateInstance:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TemplateInstance), "ObjectReference", "v11.ObjectReference", 1), `&`, ``, 1) + `,`, + `Secret:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Secret), "ObjectReference", "v11.ObjectReference", 1), `&`, ``, 1) + `,`, + `BindingIDs:` + fmt.Sprintf("%v", this.BindingIDs) + `,`, + `}`, + }, "") + return s +} +func (this *Parameter) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Parameter{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `DisplayName:` + fmt.Sprintf("%v", this.DisplayName) + `,`, + `Description:` + fmt.Sprintf("%v", this.Description) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `Generate:` + fmt.Sprintf("%v", this.Generate) + `,`, + `From:` + fmt.Sprintf("%v", this.From) + `,`, + `Required:` + fmt.Sprintf("%v", this.Required) + `,`, + `}`, + }, "") + return s +} +func (this *Template) String() string { + if this == nil { + return "nil" + } + repeatedStringForObjects := "[]RawExtension{" + for _, f := range this.Objects { + repeatedStringForObjects += fmt.Sprintf("%v", f) + "," + } + repeatedStringForObjects += "}" + repeatedStringForParameters := "[]Parameter{" + for _, f := range this.Parameters { + repeatedStringForParameters += strings.Replace(strings.Replace(f.String(), "Parameter", "Parameter", 1), `&`, ``, 1) + "," + } + repeatedStringForParameters += "}" + keysForObjectLabels := make([]string, 0, len(this.ObjectLabels)) + for k := range this.ObjectLabels { + keysForObjectLabels = append(keysForObjectLabels, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForObjectLabels) + mapStringForObjectLabels := "map[string]string{" + for _, k := range keysForObjectLabels { + mapStringForObjectLabels += fmt.Sprintf("%v: %v,", k, this.ObjectLabels[k]) + } + mapStringForObjectLabels += "}" + s := strings.Join([]string{`&Template{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Objects:` + repeatedStringForObjects + `,`, + `Parameters:` + repeatedStringForParameters + `,`, + `ObjectLabels:` + mapStringForObjectLabels + `,`, + `}`, + }, "") + return s +} +func (this *TemplateInstance) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TemplateInstance{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "TemplateInstanceSpec", "TemplateInstanceSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "TemplateInstanceStatus", "TemplateInstanceStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *TemplateInstanceCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TemplateInstanceCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastTransitionTime), "Time", "v1.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *TemplateInstanceList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]TemplateInstance{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "TemplateInstance", "TemplateInstance", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&TemplateInstanceList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *TemplateInstanceObject) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TemplateInstanceObject{`, + `Ref:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ref), "ObjectReference", "v11.ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *TemplateInstanceRequester) String() string { + if this == nil { + return "nil" + } + keysForExtra := make([]string, 0, len(this.Extra)) + for k := range this.Extra { + keysForExtra = append(keysForExtra, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) + mapStringForExtra := "map[string]ExtraValue{" + for _, k := range keysForExtra { + mapStringForExtra += fmt.Sprintf("%v: %v,", k, this.Extra[k]) + } + mapStringForExtra += "}" + s := strings.Join([]string{`&TemplateInstanceRequester{`, + `Username:` + fmt.Sprintf("%v", this.Username) + `,`, + `UID:` + fmt.Sprintf("%v", this.UID) + `,`, + `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, + `Extra:` + mapStringForExtra + `,`, + `}`, + }, "") + return s +} +func (this *TemplateInstanceSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TemplateInstanceSpec{`, + `Template:` + strings.Replace(strings.Replace(this.Template.String(), "Template", "Template", 1), `&`, ``, 1) + `,`, + `Secret:` + strings.Replace(fmt.Sprintf("%v", this.Secret), "LocalObjectReference", "v11.LocalObjectReference", 1) + `,`, + `Requester:` + strings.Replace(this.Requester.String(), "TemplateInstanceRequester", "TemplateInstanceRequester", 1) + `,`, + `}`, + }, "") + return s +} +func (this *TemplateInstanceStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]TemplateInstanceCondition{" + for _, f := range this.Conditions { + repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "TemplateInstanceCondition", "TemplateInstanceCondition", 1), `&`, ``, 1) + "," + } + repeatedStringForConditions += "}" + repeatedStringForObjects := "[]TemplateInstanceObject{" + for _, f := range this.Objects { + repeatedStringForObjects += strings.Replace(strings.Replace(f.String(), "TemplateInstanceObject", "TemplateInstanceObject", 1), `&`, ``, 1) + "," + } + repeatedStringForObjects += "}" + s := strings.Join([]string{`&TemplateInstanceStatus{`, + `Conditions:` + repeatedStringForConditions + `,`, + `Objects:` + repeatedStringForObjects + `,`, + `}`, + }, "") + return s +} +func (this *TemplateList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Template{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Template", "Template", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&TemplateList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *BrokerTemplateInstance) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BrokerTemplateInstance: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BrokerTemplateInstance: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BrokerTemplateInstanceList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BrokerTemplateInstanceList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BrokerTemplateInstanceList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, BrokerTemplateInstance{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *BrokerTemplateInstanceSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BrokerTemplateInstanceSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BrokerTemplateInstanceSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TemplateInstance", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TemplateInstance.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Secret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BindingIDs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BindingIDs = append(m.BindingIDs, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExtraValue) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExtraValue: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExtraValue: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + *m = append(*m, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Parameter) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Parameter: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Parameter: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DisplayName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DisplayName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Generate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Generate = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.From = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Required", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Required = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Template) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Template: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Template: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Objects", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Objects = append(m.Objects, runtime.RawExtension{}) + if err := m.Objects[len(m.Objects)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Parameters", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Parameters = append(m.Parameters, Parameter{}) + if err := m.Parameters[len(m.Parameters)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectLabels", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ObjectLabels == nil { + m.ObjectLabels = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.ObjectLabels[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TemplateInstance) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TemplateInstance: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TemplateInstance: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TemplateInstanceCondition) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TemplateInstanceCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TemplateInstanceCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = TemplateInstanceConditionType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = k8s_io_api_core_v1.ConditionStatus(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TemplateInstanceList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TemplateInstanceList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TemplateInstanceList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, TemplateInstance{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TemplateInstanceObject) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TemplateInstanceObject: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TemplateInstanceObject: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ref", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Ref.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TemplateInstanceRequester) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TemplateInstanceRequester: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TemplateInstanceRequester: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Username", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Username = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Groups", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Groups = append(m.Groups, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Extra", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Extra == nil { + m.Extra = make(map[string]ExtraValue) + } + var mapkey string + mapvalue := &ExtraValue{} + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &ExtraValue{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Extra[mapkey] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TemplateInstanceSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TemplateInstanceSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TemplateInstanceSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Template", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Template.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Secret == nil { + m.Secret = &v11.LocalObjectReference{} + } + if err := m.Secret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Requester", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Requester == nil { + m.Requester = &TemplateInstanceRequester{} + } + if err := m.Requester.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TemplateInstanceStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TemplateInstanceStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TemplateInstanceStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, TemplateInstanceCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Objects", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Objects = append(m.Objects, TemplateInstanceObject{}) + if err := m.Objects[len(m.Objects)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TemplateList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TemplateList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TemplateList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Template{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vendor/github.com/openshift/api/template/v1/generated.proto b/vendor/github.com/openshift/api/template/v1/generated.proto new file mode 100644 index 0000000000000..5c017e228f03f --- /dev/null +++ b/vendor/github.com/openshift/api/template/v1/generated.proto @@ -0,0 +1,232 @@ + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package github.com.openshift.api.template.v1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// BrokerTemplateInstance holds the service broker-related state associated with +// a TemplateInstance. BrokerTemplateInstance is part of an experimental API. +message BrokerTemplateInstance { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // spec describes the state of this BrokerTemplateInstance. + optional BrokerTemplateInstanceSpec spec = 2; +} + +// BrokerTemplateInstanceList is a list of BrokerTemplateInstance objects. +message BrokerTemplateInstanceList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is a list of BrokerTemplateInstances + repeated BrokerTemplateInstance items = 2; +} + +// BrokerTemplateInstanceSpec describes the state of a BrokerTemplateInstance. +message BrokerTemplateInstanceSpec { + // templateinstance is a reference to a TemplateInstance object residing + // in a namespace. + optional k8s.io.api.core.v1.ObjectReference templateInstance = 1; + + // secret is a reference to a Secret object residing in a namespace, + // containing the necessary template parameters. + optional k8s.io.api.core.v1.ObjectReference secret = 2; + + // bindingids is a list of 'binding_id's provided during successive bind + // calls to the template service broker. + repeated string bindingIDs = 3; +} + +// ExtraValue masks the value so protobuf can generate +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +message ExtraValue { + // items, if empty, will result in an empty slice + + repeated string items = 1; +} + +// Parameter defines a name/value variable that is to be processed during +// the Template to Config transformation. +message Parameter { + // Name must be set and it can be referenced in Template + // Items using ${PARAMETER_NAME}. Required. + optional string name = 1; + + // Optional: The name that will show in UI instead of parameter 'Name' + optional string displayName = 2; + + // Description of a parameter. Optional. + optional string description = 3; + + // Value holds the Parameter data. If specified, the generator will be + // ignored. The value replaces all occurrences of the Parameter ${Name} + // expression during the Template to Config transformation. Optional. + optional string value = 4; + + // generate specifies the generator to be used to generate random string + // from an input value specified by From field. The result string is + // stored into Value field. If empty, no generator is being used, leaving + // the result Value untouched. Optional. + // + // The only supported generator is "expression", which accepts a "from" + // value in the form of a simple regular expression containing the + // range expression "[a-zA-Z0-9]", and the length expression "a{length}". + // + // Examples: + // + // from | value + // ----------------------------- + // "test[0-9]{1}x" | "test7x" + // "[0-1]{8}" | "01001100" + // "0x[A-F0-9]{4}" | "0xB3AF" + // "[a-zA-Z0-9]{8}" | "hW4yQU5i" + optional string generate = 5; + + // From is an input value for the generator. Optional. + optional string from = 6; + + // Optional: Indicates the parameter must have a value. Defaults to false. + optional bool required = 7; +} + +// Template contains the inputs needed to produce a Config. +message Template { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // message is an optional instructional message that will + // be displayed when this template is instantiated. + // This field should inform the user how to utilize the newly created resources. + // Parameter substitution will be performed on the message before being + // displayed so that generated credentials and other parameters can be + // included in the output. + optional string message = 2; + + // objects is an array of resources to include in this template. + // If a namespace value is hardcoded in the object, it will be removed + // during template instantiation, however if the namespace value + // is, or contains, a ${PARAMETER_REFERENCE}, the resolved + // value after parameter substitution will be respected and the object + // will be created in that namespace. + // +kubebuilder:pruning:PreserveUnknownFields + repeated k8s.io.apimachinery.pkg.runtime.RawExtension objects = 3; + + // parameters is an optional array of Parameters used during the + // Template to Config transformation. + repeated Parameter parameters = 4; + + // labels is a optional set of labels that are applied to every + // object during the Template to Config transformation. + map labels = 5; +} + +// TemplateInstance requests and records the instantiation of a Template. +// TemplateInstance is part of an experimental API. +message TemplateInstance { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // spec describes the desired state of this TemplateInstance. + optional TemplateInstanceSpec spec = 2; + + // status describes the current state of this TemplateInstance. + // +optional + optional TemplateInstanceStatus status = 3; +} + +// TemplateInstanceCondition contains condition information for a +// TemplateInstance. +message TemplateInstanceCondition { + // Type of the condition, currently Ready or InstantiateFailure. + optional string type = 1; + + // Status of the condition, one of True, False or Unknown. + optional string status = 2; + + // LastTransitionTime is the last time a condition status transitioned from + // one state to another. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 3; + + // Reason is a brief machine readable explanation for the condition's last + // transition. + optional string reason = 4; + + // Message is a human readable description of the details of the last + // transition, complementing reason. + optional string message = 5; +} + +// TemplateInstanceList is a list of TemplateInstance objects. +message TemplateInstanceList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // items is a list of Templateinstances + repeated TemplateInstance items = 2; +} + +// TemplateInstanceObject references an object created by a TemplateInstance. +message TemplateInstanceObject { + // ref is a reference to the created object. When used under .spec, only + // name and namespace are used; these can contain references to parameters + // which will be substituted following the usual rules. + optional k8s.io.api.core.v1.ObjectReference ref = 1; +} + +// TemplateInstanceRequester holds the identity of an agent requesting a +// template instantiation. +message TemplateInstanceRequester { + // username uniquely identifies this user among all active users. + optional string username = 1; + + // uid is a unique value that identifies this user across time; if this user is + // deleted and another user by the same name is added, they will have + // different UIDs. + optional string uid = 2; + + // groups represent the groups this user is a part of. + repeated string groups = 3; + + // extra holds additional information provided by the authenticator. + map extra = 4; +} + +// TemplateInstanceSpec describes the desired state of a TemplateInstance. +message TemplateInstanceSpec { + // template is a full copy of the template for instantiation. + optional Template template = 1; + + // secret is a reference to a Secret object containing the necessary + // template parameters. + optional k8s.io.api.core.v1.LocalObjectReference secret = 2; + + // requester holds the identity of the agent requesting the template + // instantiation. + // +optional + optional TemplateInstanceRequester requester = 3; +} + +// TemplateInstanceStatus describes the current state of a TemplateInstance. +message TemplateInstanceStatus { + // conditions represent the latest available observations of a + // TemplateInstance's current state. + repeated TemplateInstanceCondition conditions = 1; + + // Objects references the objects created by the TemplateInstance. + repeated TemplateInstanceObject objects = 2; +} + +// TemplateList is a list of Template objects. +message TemplateList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is a list of templates + repeated Template items = 2; +} + diff --git a/vendor/github.com/openshift/api/template/v1/legacy.go b/vendor/github.com/openshift/api/template/v1/legacy.go new file mode 100644 index 0000000000000..9266f3ac9e69f --- /dev/null +++ b/vendor/github.com/openshift/api/template/v1/legacy.go @@ -0,0 +1,24 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + legacyGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} + legacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes, corev1.AddToScheme) + DeprecatedInstallWithoutGroup = legacySchemeBuilder.AddToScheme +) + +func addLegacyKnownTypes(scheme *runtime.Scheme) error { + types := []runtime.Object{ + &Template{}, + &TemplateList{}, + } + scheme.AddKnownTypes(legacyGroupVersion, types...) + scheme.AddKnownTypeWithName(legacyGroupVersion.WithKind("TemplateConfig"), &Template{}) + scheme.AddKnownTypeWithName(legacyGroupVersion.WithKind("ProcessedTemplate"), &Template{}) + return nil +} diff --git a/vendor/github.com/openshift/api/template/v1/register.go b/vendor/github.com/openshift/api/template/v1/register.go new file mode 100644 index 0000000000000..e34ff5610b603 --- /dev/null +++ b/vendor/github.com/openshift/api/template/v1/register.go @@ -0,0 +1,43 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "template.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, corev1.AddToScheme) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &Template{}, + &TemplateList{}, + &TemplateInstance{}, + &TemplateInstanceList{}, + &BrokerTemplateInstance{}, + &BrokerTemplateInstanceList{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/template/v1/types.go b/vendor/github.com/openshift/api/template/v1/types.go new file mode 100644 index 0000000000000..566c0af5feacb --- /dev/null +++ b/vendor/github.com/openshift/api/template/v1/types.go @@ -0,0 +1,258 @@ +package v1 + +import ( + "fmt" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Template contains the inputs needed to produce a Config. +type Template struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // message is an optional instructional message that will + // be displayed when this template is instantiated. + // This field should inform the user how to utilize the newly created resources. + // Parameter substitution will be performed on the message before being + // displayed so that generated credentials and other parameters can be + // included in the output. + Message string `json:"message,omitempty" protobuf:"bytes,2,opt,name=message"` + + // objects is an array of resources to include in this template. + // If a namespace value is hardcoded in the object, it will be removed + // during template instantiation, however if the namespace value + // is, or contains, a ${PARAMETER_REFERENCE}, the resolved + // value after parameter substitution will be respected and the object + // will be created in that namespace. + // +kubebuilder:pruning:PreserveUnknownFields + Objects []runtime.RawExtension `json:"objects" protobuf:"bytes,3,rep,name=objects"` + + // parameters is an optional array of Parameters used during the + // Template to Config transformation. + Parameters []Parameter `json:"parameters,omitempty" protobuf:"bytes,4,rep,name=parameters"` + + // labels is a optional set of labels that are applied to every + // object during the Template to Config transformation. + ObjectLabels map[string]string `json:"labels,omitempty" protobuf:"bytes,5,rep,name=labels"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// TemplateList is a list of Template objects. +type TemplateList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of templates + Items []Template `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// Parameter defines a name/value variable that is to be processed during +// the Template to Config transformation. +type Parameter struct { + // Name must be set and it can be referenced in Template + // Items using ${PARAMETER_NAME}. Required. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + + // Optional: The name that will show in UI instead of parameter 'Name' + DisplayName string `json:"displayName,omitempty" protobuf:"bytes,2,opt,name=displayName"` + + // Description of a parameter. Optional. + Description string `json:"description,omitempty" protobuf:"bytes,3,opt,name=description"` + + // Value holds the Parameter data. If specified, the generator will be + // ignored. The value replaces all occurrences of the Parameter ${Name} + // expression during the Template to Config transformation. Optional. + Value string `json:"value,omitempty" protobuf:"bytes,4,opt,name=value"` + + // generate specifies the generator to be used to generate random string + // from an input value specified by From field. The result string is + // stored into Value field. If empty, no generator is being used, leaving + // the result Value untouched. Optional. + // + // The only supported generator is "expression", which accepts a "from" + // value in the form of a simple regular expression containing the + // range expression "[a-zA-Z0-9]", and the length expression "a{length}". + // + // Examples: + // + // from | value + // ----------------------------- + // "test[0-9]{1}x" | "test7x" + // "[0-1]{8}" | "01001100" + // "0x[A-F0-9]{4}" | "0xB3AF" + // "[a-zA-Z0-9]{8}" | "hW4yQU5i" + // + Generate string `json:"generate,omitempty" protobuf:"bytes,5,opt,name=generate"` + + // From is an input value for the generator. Optional. + From string `json:"from,omitempty" protobuf:"bytes,6,opt,name=from"` + + // Optional: Indicates the parameter must have a value. Defaults to false. + Required bool `json:"required,omitempty" protobuf:"varint,7,opt,name=required"` +} + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// TemplateInstance requests and records the instantiation of a Template. +// TemplateInstance is part of an experimental API. +type TemplateInstance struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // spec describes the desired state of this TemplateInstance. + Spec TemplateInstanceSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` + + // status describes the current state of this TemplateInstance. + // +optional + Status TemplateInstanceStatus `json:"status" protobuf:"bytes,3,opt,name=status"` +} + +// TemplateInstanceSpec describes the desired state of a TemplateInstance. +type TemplateInstanceSpec struct { + // template is a full copy of the template for instantiation. + Template Template `json:"template" protobuf:"bytes,1,opt,name=template"` + + // secret is a reference to a Secret object containing the necessary + // template parameters. + Secret *corev1.LocalObjectReference `json:"secret,omitempty" protobuf:"bytes,2,opt,name=secret"` + + // requester holds the identity of the agent requesting the template + // instantiation. + // +optional + Requester *TemplateInstanceRequester `json:"requester" protobuf:"bytes,3,opt,name=requester"` +} + +// TemplateInstanceRequester holds the identity of an agent requesting a +// template instantiation. +type TemplateInstanceRequester struct { + // username uniquely identifies this user among all active users. + Username string `json:"username,omitempty" protobuf:"bytes,1,opt,name=username"` + + // uid is a unique value that identifies this user across time; if this user is + // deleted and another user by the same name is added, they will have + // different UIDs. + UID string `json:"uid,omitempty" protobuf:"bytes,2,opt,name=uid"` + + // groups represent the groups this user is a part of. + Groups []string `json:"groups,omitempty" protobuf:"bytes,3,rep,name=groups"` + + // extra holds additional information provided by the authenticator. + Extra map[string]ExtraValue `json:"extra,omitempty" protobuf:"bytes,4,rep,name=extra"` +} + +// ExtraValue masks the value so protobuf can generate +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +type ExtraValue []string + +func (t ExtraValue) String() string { + return fmt.Sprintf("%v", []string(t)) +} + +// TemplateInstanceStatus describes the current state of a TemplateInstance. +type TemplateInstanceStatus struct { + // conditions represent the latest available observations of a + // TemplateInstance's current state. + Conditions []TemplateInstanceCondition `json:"conditions,omitempty" protobuf:"bytes,1,rep,name=conditions"` + + // Objects references the objects created by the TemplateInstance. + Objects []TemplateInstanceObject `json:"objects,omitempty" protobuf:"bytes,2,rep,name=objects"` +} + +// TemplateInstanceCondition contains condition information for a +// TemplateInstance. +type TemplateInstanceCondition struct { + // Type of the condition, currently Ready or InstantiateFailure. + Type TemplateInstanceConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=TemplateInstanceConditionType"` + // Status of the condition, one of True, False or Unknown. + Status corev1.ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status"` + // LastTransitionTime is the last time a condition status transitioned from + // one state to another. + LastTransitionTime metav1.Time `json:"lastTransitionTime" protobuf:"bytes,3,opt,name=lastTransitionTime"` + // Reason is a brief machine readable explanation for the condition's last + // transition. + Reason string `json:"reason" protobuf:"bytes,4,opt,name=reason"` + // Message is a human readable description of the details of the last + // transition, complementing reason. + Message string `json:"message" protobuf:"bytes,5,opt,name=message"` +} + +// TemplateInstanceConditionType is the type of condition pertaining to a +// TemplateInstance. +type TemplateInstanceConditionType string + +const ( + // TemplateInstanceReady indicates the readiness of the template + // instantiation. + TemplateInstanceReady TemplateInstanceConditionType = "Ready" + // TemplateInstanceInstantiateFailure indicates the failure of the template + // instantiation + TemplateInstanceInstantiateFailure TemplateInstanceConditionType = "InstantiateFailure" +) + +// TemplateInstanceObject references an object created by a TemplateInstance. +type TemplateInstanceObject struct { + // ref is a reference to the created object. When used under .spec, only + // name and namespace are used; these can contain references to parameters + // which will be substituted following the usual rules. + Ref corev1.ObjectReference `json:"ref,omitempty" protobuf:"bytes,1,opt,name=ref"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// TemplateInstanceList is a list of TemplateInstance objects. +type TemplateInstanceList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is a list of Templateinstances + Items []TemplateInstance `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// BrokerTemplateInstance holds the service broker-related state associated with +// a TemplateInstance. BrokerTemplateInstance is part of an experimental API. +type BrokerTemplateInstance struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // spec describes the state of this BrokerTemplateInstance. + Spec BrokerTemplateInstanceSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` +} + +// BrokerTemplateInstanceSpec describes the state of a BrokerTemplateInstance. +type BrokerTemplateInstanceSpec struct { + // templateinstance is a reference to a TemplateInstance object residing + // in a namespace. + TemplateInstance corev1.ObjectReference `json:"templateInstance" protobuf:"bytes,1,opt,name=templateInstance"` + + // secret is a reference to a Secret object residing in a namespace, + // containing the necessary template parameters. + Secret corev1.ObjectReference `json:"secret" protobuf:"bytes,2,opt,name=secret"` + + // bindingids is a list of 'binding_id's provided during successive bind + // calls to the template service broker. + BindingIDs []string `json:"bindingIDs,omitempty" protobuf:"bytes,3,rep,name=bindingIDs"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// BrokerTemplateInstanceList is a list of BrokerTemplateInstance objects. +type BrokerTemplateInstanceList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // items is a list of BrokerTemplateInstances + Items []BrokerTemplateInstance `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/github.com/openshift/api/template/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/template/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..ef6c4ee3002c0 --- /dev/null +++ b/vendor/github.com/openshift/api/template/v1/zz_generated.deepcopy.go @@ -0,0 +1,393 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BrokerTemplateInstance) DeepCopyInto(out *BrokerTemplateInstance) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BrokerTemplateInstance. +func (in *BrokerTemplateInstance) DeepCopy() *BrokerTemplateInstance { + if in == nil { + return nil + } + out := new(BrokerTemplateInstance) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *BrokerTemplateInstance) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BrokerTemplateInstanceList) DeepCopyInto(out *BrokerTemplateInstanceList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]BrokerTemplateInstance, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BrokerTemplateInstanceList. +func (in *BrokerTemplateInstanceList) DeepCopy() *BrokerTemplateInstanceList { + if in == nil { + return nil + } + out := new(BrokerTemplateInstanceList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *BrokerTemplateInstanceList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BrokerTemplateInstanceSpec) DeepCopyInto(out *BrokerTemplateInstanceSpec) { + *out = *in + out.TemplateInstance = in.TemplateInstance + out.Secret = in.Secret + if in.BindingIDs != nil { + in, out := &in.BindingIDs, &out.BindingIDs + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BrokerTemplateInstanceSpec. +func (in *BrokerTemplateInstanceSpec) DeepCopy() *BrokerTemplateInstanceSpec { + if in == nil { + return nil + } + out := new(BrokerTemplateInstanceSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in ExtraValue) DeepCopyInto(out *ExtraValue) { + { + in := &in + *out = make(ExtraValue, len(*in)) + copy(*out, *in) + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExtraValue. +func (in ExtraValue) DeepCopy() ExtraValue { + if in == nil { + return nil + } + out := new(ExtraValue) + in.DeepCopyInto(out) + return *out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Parameter) DeepCopyInto(out *Parameter) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Parameter. +func (in *Parameter) DeepCopy() *Parameter { + if in == nil { + return nil + } + out := new(Parameter) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Template) DeepCopyInto(out *Template) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Objects != nil { + in, out := &in.Objects, &out.Objects + *out = make([]runtime.RawExtension, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Parameters != nil { + in, out := &in.Parameters, &out.Parameters + *out = make([]Parameter, len(*in)) + copy(*out, *in) + } + if in.ObjectLabels != nil { + in, out := &in.ObjectLabels, &out.ObjectLabels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Template. +func (in *Template) DeepCopy() *Template { + if in == nil { + return nil + } + out := new(Template) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Template) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TemplateInstance) DeepCopyInto(out *TemplateInstance) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateInstance. +func (in *TemplateInstance) DeepCopy() *TemplateInstance { + if in == nil { + return nil + } + out := new(TemplateInstance) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *TemplateInstance) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TemplateInstanceCondition) DeepCopyInto(out *TemplateInstanceCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateInstanceCondition. +func (in *TemplateInstanceCondition) DeepCopy() *TemplateInstanceCondition { + if in == nil { + return nil + } + out := new(TemplateInstanceCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TemplateInstanceList) DeepCopyInto(out *TemplateInstanceList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]TemplateInstance, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateInstanceList. +func (in *TemplateInstanceList) DeepCopy() *TemplateInstanceList { + if in == nil { + return nil + } + out := new(TemplateInstanceList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *TemplateInstanceList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TemplateInstanceObject) DeepCopyInto(out *TemplateInstanceObject) { + *out = *in + out.Ref = in.Ref + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateInstanceObject. +func (in *TemplateInstanceObject) DeepCopy() *TemplateInstanceObject { + if in == nil { + return nil + } + out := new(TemplateInstanceObject) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TemplateInstanceRequester) DeepCopyInto(out *TemplateInstanceRequester) { + *out = *in + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Extra != nil { + in, out := &in.Extra, &out.Extra + *out = make(map[string]ExtraValue, len(*in)) + for key, val := range *in { + var outVal []string + if val == nil { + (*out)[key] = nil + } else { + in, out := &val, &outVal + *out = make(ExtraValue, len(*in)) + copy(*out, *in) + } + (*out)[key] = outVal + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateInstanceRequester. +func (in *TemplateInstanceRequester) DeepCopy() *TemplateInstanceRequester { + if in == nil { + return nil + } + out := new(TemplateInstanceRequester) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TemplateInstanceSpec) DeepCopyInto(out *TemplateInstanceSpec) { + *out = *in + in.Template.DeepCopyInto(&out.Template) + if in.Secret != nil { + in, out := &in.Secret, &out.Secret + *out = new(corev1.LocalObjectReference) + **out = **in + } + if in.Requester != nil { + in, out := &in.Requester, &out.Requester + *out = new(TemplateInstanceRequester) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateInstanceSpec. +func (in *TemplateInstanceSpec) DeepCopy() *TemplateInstanceSpec { + if in == nil { + return nil + } + out := new(TemplateInstanceSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TemplateInstanceStatus) DeepCopyInto(out *TemplateInstanceStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]TemplateInstanceCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Objects != nil { + in, out := &in.Objects, &out.Objects + *out = make([]TemplateInstanceObject, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateInstanceStatus. +func (in *TemplateInstanceStatus) DeepCopy() *TemplateInstanceStatus { + if in == nil { + return nil + } + out := new(TemplateInstanceStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TemplateList) DeepCopyInto(out *TemplateList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Template, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateList. +func (in *TemplateList) DeepCopy() *TemplateList { + if in == nil { + return nil + } + out := new(TemplateList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *TemplateList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/vendor/github.com/openshift/api/template/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/template/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000000..bbf8153101cb1 --- /dev/null +++ b/vendor/github.com/openshift/api/template/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,153 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_BrokerTemplateInstance = map[string]string{ + "": "BrokerTemplateInstance holds the service broker-related state associated with a TemplateInstance. BrokerTemplateInstance is part of an experimental API.", + "spec": "spec describes the state of this BrokerTemplateInstance.", +} + +func (BrokerTemplateInstance) SwaggerDoc() map[string]string { + return map_BrokerTemplateInstance +} + +var map_BrokerTemplateInstanceList = map[string]string{ + "": "BrokerTemplateInstanceList is a list of BrokerTemplateInstance objects.", + "items": "items is a list of BrokerTemplateInstances", +} + +func (BrokerTemplateInstanceList) SwaggerDoc() map[string]string { + return map_BrokerTemplateInstanceList +} + +var map_BrokerTemplateInstanceSpec = map[string]string{ + "": "BrokerTemplateInstanceSpec describes the state of a BrokerTemplateInstance.", + "templateInstance": "templateinstance is a reference to a TemplateInstance object residing in a namespace.", + "secret": "secret is a reference to a Secret object residing in a namespace, containing the necessary template parameters.", + "bindingIDs": "bindingids is a list of 'binding_id's provided during successive bind calls to the template service broker.", +} + +func (BrokerTemplateInstanceSpec) SwaggerDoc() map[string]string { + return map_BrokerTemplateInstanceSpec +} + +var map_Parameter = map[string]string{ + "": "Parameter defines a name/value variable that is to be processed during the Template to Config transformation.", + "name": "Name must be set and it can be referenced in Template Items using ${PARAMETER_NAME}. Required.", + "displayName": "Optional: The name that will show in UI instead of parameter 'Name'", + "description": "Description of a parameter. Optional.", + "value": "Value holds the Parameter data. If specified, the generator will be ignored. The value replaces all occurrences of the Parameter ${Name} expression during the Template to Config transformation. Optional.", + "generate": "generate specifies the generator to be used to generate random string from an input value specified by From field. The result string is stored into Value field. If empty, no generator is being used, leaving the result Value untouched. Optional.\n\nThe only supported generator is \"expression\", which accepts a \"from\" value in the form of a simple regular expression containing the range expression \"[a-zA-Z0-9]\", and the length expression \"a{length}\".\n\nExamples:\n\nfrom | value", + "from": "From is an input value for the generator. Optional.", + "required": "Optional: Indicates the parameter must have a value. Defaults to false.", +} + +func (Parameter) SwaggerDoc() map[string]string { + return map_Parameter +} + +var map_Template = map[string]string{ + "": "Template contains the inputs needed to produce a Config.", + "message": "message is an optional instructional message that will be displayed when this template is instantiated. This field should inform the user how to utilize the newly created resources. Parameter substitution will be performed on the message before being displayed so that generated credentials and other parameters can be included in the output.", + "objects": "objects is an array of resources to include in this template. If a namespace value is hardcoded in the object, it will be removed during template instantiation, however if the namespace value is, or contains, a ${PARAMETER_REFERENCE}, the resolved value after parameter substitution will be respected and the object will be created in that namespace.", + "parameters": "parameters is an optional array of Parameters used during the Template to Config transformation.", + "labels": "labels is a optional set of labels that are applied to every object during the Template to Config transformation.", +} + +func (Template) SwaggerDoc() map[string]string { + return map_Template +} + +var map_TemplateInstance = map[string]string{ + "": "TemplateInstance requests and records the instantiation of a Template. TemplateInstance is part of an experimental API.", + "spec": "spec describes the desired state of this TemplateInstance.", + "status": "status describes the current state of this TemplateInstance.", +} + +func (TemplateInstance) SwaggerDoc() map[string]string { + return map_TemplateInstance +} + +var map_TemplateInstanceCondition = map[string]string{ + "": "TemplateInstanceCondition contains condition information for a TemplateInstance.", + "type": "Type of the condition, currently Ready or InstantiateFailure.", + "status": "Status of the condition, one of True, False or Unknown.", + "lastTransitionTime": "LastTransitionTime is the last time a condition status transitioned from one state to another.", + "reason": "Reason is a brief machine readable explanation for the condition's last transition.", + "message": "Message is a human readable description of the details of the last transition, complementing reason.", +} + +func (TemplateInstanceCondition) SwaggerDoc() map[string]string { + return map_TemplateInstanceCondition +} + +var map_TemplateInstanceList = map[string]string{ + "": "TemplateInstanceList is a list of TemplateInstance objects.", + "items": "items is a list of Templateinstances", +} + +func (TemplateInstanceList) SwaggerDoc() map[string]string { + return map_TemplateInstanceList +} + +var map_TemplateInstanceObject = map[string]string{ + "": "TemplateInstanceObject references an object created by a TemplateInstance.", + "ref": "ref is a reference to the created object. When used under .spec, only name and namespace are used; these can contain references to parameters which will be substituted following the usual rules.", +} + +func (TemplateInstanceObject) SwaggerDoc() map[string]string { + return map_TemplateInstanceObject +} + +var map_TemplateInstanceRequester = map[string]string{ + "": "TemplateInstanceRequester holds the identity of an agent requesting a template instantiation.", + "username": "username uniquely identifies this user among all active users.", + "uid": "uid is a unique value that identifies this user across time; if this user is deleted and another user by the same name is added, they will have different UIDs.", + "groups": "groups represent the groups this user is a part of.", + "extra": "extra holds additional information provided by the authenticator.", +} + +func (TemplateInstanceRequester) SwaggerDoc() map[string]string { + return map_TemplateInstanceRequester +} + +var map_TemplateInstanceSpec = map[string]string{ + "": "TemplateInstanceSpec describes the desired state of a TemplateInstance.", + "template": "template is a full copy of the template for instantiation.", + "secret": "secret is a reference to a Secret object containing the necessary template parameters.", + "requester": "requester holds the identity of the agent requesting the template instantiation.", +} + +func (TemplateInstanceSpec) SwaggerDoc() map[string]string { + return map_TemplateInstanceSpec +} + +var map_TemplateInstanceStatus = map[string]string{ + "": "TemplateInstanceStatus describes the current state of a TemplateInstance.", + "conditions": "conditions represent the latest available observations of a TemplateInstance's current state.", + "objects": "Objects references the objects created by the TemplateInstance.", +} + +func (TemplateInstanceStatus) SwaggerDoc() map[string]string { + return map_TemplateInstanceStatus +} + +var map_TemplateList = map[string]string{ + "": "TemplateList is a list of Template objects.", + "items": "Items is a list of templates", +} + +func (TemplateList) SwaggerDoc() map[string]string { + return map_TemplateList +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/user/v1/doc.go b/vendor/github.com/openshift/api/user/v1/doc.go new file mode 100644 index 0000000000000..42287095e242a --- /dev/null +++ b/vendor/github.com/openshift/api/user/v1/doc.go @@ -0,0 +1,8 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=github.com/openshift/origin/pkg/user/apis/user +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +groupName=user.openshift.io +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/user/v1/generated.pb.go b/vendor/github.com/openshift/api/user/v1/generated.pb.go new file mode 100644 index 0000000000000..f2d5da0bcd105 --- /dev/null +++ b/vendor/github.com/openshift/api/user/v1/generated.pb.go @@ -0,0 +1,2298 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: github.com/openshift/api/user/v1/generated.proto + +package v1 + +import ( + fmt "fmt" + + io "io" + + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + + math "math" + math_bits "math/bits" + reflect "reflect" + strings "strings" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +func (m *Group) Reset() { *m = Group{} } +func (*Group) ProtoMessage() {} +func (*Group) Descriptor() ([]byte, []int) { + return fileDescriptor_ea159b02d89a1362, []int{0} +} +func (m *Group) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Group) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Group) XXX_Merge(src proto.Message) { + xxx_messageInfo_Group.Merge(m, src) +} +func (m *Group) XXX_Size() int { + return m.Size() +} +func (m *Group) XXX_DiscardUnknown() { + xxx_messageInfo_Group.DiscardUnknown(m) +} + +var xxx_messageInfo_Group proto.InternalMessageInfo + +func (m *GroupList) Reset() { *m = GroupList{} } +func (*GroupList) ProtoMessage() {} +func (*GroupList) Descriptor() ([]byte, []int) { + return fileDescriptor_ea159b02d89a1362, []int{1} +} +func (m *GroupList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GroupList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GroupList) XXX_Merge(src proto.Message) { + xxx_messageInfo_GroupList.Merge(m, src) +} +func (m *GroupList) XXX_Size() int { + return m.Size() +} +func (m *GroupList) XXX_DiscardUnknown() { + xxx_messageInfo_GroupList.DiscardUnknown(m) +} + +var xxx_messageInfo_GroupList proto.InternalMessageInfo + +func (m *Identity) Reset() { *m = Identity{} } +func (*Identity) ProtoMessage() {} +func (*Identity) Descriptor() ([]byte, []int) { + return fileDescriptor_ea159b02d89a1362, []int{2} +} +func (m *Identity) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Identity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *Identity) XXX_Merge(src proto.Message) { + xxx_messageInfo_Identity.Merge(m, src) +} +func (m *Identity) XXX_Size() int { + return m.Size() +} +func (m *Identity) XXX_DiscardUnknown() { + xxx_messageInfo_Identity.DiscardUnknown(m) +} + +var xxx_messageInfo_Identity proto.InternalMessageInfo + +func (m *IdentityList) Reset() { *m = IdentityList{} } +func (*IdentityList) ProtoMessage() {} +func (*IdentityList) Descriptor() ([]byte, []int) { + return fileDescriptor_ea159b02d89a1362, []int{3} +} +func (m *IdentityList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IdentityList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *IdentityList) XXX_Merge(src proto.Message) { + xxx_messageInfo_IdentityList.Merge(m, src) +} +func (m *IdentityList) XXX_Size() int { + return m.Size() +} +func (m *IdentityList) XXX_DiscardUnknown() { + xxx_messageInfo_IdentityList.DiscardUnknown(m) +} + +var xxx_messageInfo_IdentityList proto.InternalMessageInfo + +func (m *OptionalNames) Reset() { *m = OptionalNames{} } +func (*OptionalNames) ProtoMessage() {} +func (*OptionalNames) Descriptor() ([]byte, []int) { + return fileDescriptor_ea159b02d89a1362, []int{4} +} +func (m *OptionalNames) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OptionalNames) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OptionalNames) XXX_Merge(src proto.Message) { + xxx_messageInfo_OptionalNames.Merge(m, src) +} +func (m *OptionalNames) XXX_Size() int { + return m.Size() +} +func (m *OptionalNames) XXX_DiscardUnknown() { + xxx_messageInfo_OptionalNames.DiscardUnknown(m) +} + +var xxx_messageInfo_OptionalNames proto.InternalMessageInfo + +func (m *User) Reset() { *m = User{} } +func (*User) ProtoMessage() {} +func (*User) Descriptor() ([]byte, []int) { + return fileDescriptor_ea159b02d89a1362, []int{5} +} +func (m *User) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *User) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *User) XXX_Merge(src proto.Message) { + xxx_messageInfo_User.Merge(m, src) +} +func (m *User) XXX_Size() int { + return m.Size() +} +func (m *User) XXX_DiscardUnknown() { + xxx_messageInfo_User.DiscardUnknown(m) +} + +var xxx_messageInfo_User proto.InternalMessageInfo + +func (m *UserIdentityMapping) Reset() { *m = UserIdentityMapping{} } +func (*UserIdentityMapping) ProtoMessage() {} +func (*UserIdentityMapping) Descriptor() ([]byte, []int) { + return fileDescriptor_ea159b02d89a1362, []int{6} +} +func (m *UserIdentityMapping) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UserIdentityMapping) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *UserIdentityMapping) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserIdentityMapping.Merge(m, src) +} +func (m *UserIdentityMapping) XXX_Size() int { + return m.Size() +} +func (m *UserIdentityMapping) XXX_DiscardUnknown() { + xxx_messageInfo_UserIdentityMapping.DiscardUnknown(m) +} + +var xxx_messageInfo_UserIdentityMapping proto.InternalMessageInfo + +func (m *UserList) Reset() { *m = UserList{} } +func (*UserList) ProtoMessage() {} +func (*UserList) Descriptor() ([]byte, []int) { + return fileDescriptor_ea159b02d89a1362, []int{7} +} +func (m *UserList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UserList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *UserList) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserList.Merge(m, src) +} +func (m *UserList) XXX_Size() int { + return m.Size() +} +func (m *UserList) XXX_DiscardUnknown() { + xxx_messageInfo_UserList.DiscardUnknown(m) +} + +var xxx_messageInfo_UserList proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Group)(nil), "github.com.openshift.api.user.v1.Group") + proto.RegisterType((*GroupList)(nil), "github.com.openshift.api.user.v1.GroupList") + proto.RegisterType((*Identity)(nil), "github.com.openshift.api.user.v1.Identity") + proto.RegisterMapType((map[string]string)(nil), "github.com.openshift.api.user.v1.Identity.ExtraEntry") + proto.RegisterType((*IdentityList)(nil), "github.com.openshift.api.user.v1.IdentityList") + proto.RegisterType((*OptionalNames)(nil), "github.com.openshift.api.user.v1.OptionalNames") + proto.RegisterType((*User)(nil), "github.com.openshift.api.user.v1.User") + proto.RegisterType((*UserIdentityMapping)(nil), "github.com.openshift.api.user.v1.UserIdentityMapping") + proto.RegisterType((*UserList)(nil), "github.com.openshift.api.user.v1.UserList") +} + +func init() { + proto.RegisterFile("github.com/openshift/api/user/v1/generated.proto", fileDescriptor_ea159b02d89a1362) +} + +var fileDescriptor_ea159b02d89a1362 = []byte{ + // 724 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0x3d, 0x6f, 0x13, 0x4b, + 0x14, 0xf5, 0xd8, 0xde, 0xc8, 0x9e, 0x38, 0x4f, 0xd6, 0xbe, 0x14, 0x96, 0x8b, 0xb5, 0xb5, 0x4f, + 0x7a, 0xcf, 0x7a, 0x82, 0xd9, 0x38, 0x02, 0x64, 0xa5, 0xb4, 0x08, 0x28, 0x22, 0x21, 0x61, 0x24, + 0x9a, 0x88, 0x82, 0x89, 0x3d, 0x5e, 0x0f, 0xf6, 0x7e, 0x68, 0x77, 0xd6, 0xc2, 0x5d, 0x7e, 0x02, + 0x74, 0x94, 0xfc, 0x09, 0x44, 0x81, 0xe8, 0x43, 0x97, 0x32, 0x05, 0xb2, 0xc8, 0xd2, 0xf1, 0x2b, + 0xd0, 0xcc, 0x7e, 0x78, 0x9d, 0x0f, 0x39, 0x12, 0x92, 0xbb, 0x9d, 0x3b, 0xf7, 0x9c, 0x39, 0xf7, + 0xdc, 0x7b, 0x17, 0x6e, 0x99, 0x8c, 0x0f, 0x83, 0x13, 0xd4, 0x73, 0x2c, 0xc3, 0x71, 0xa9, 0xed, + 0x0f, 0xd9, 0x80, 0x1b, 0xc4, 0x65, 0x46, 0xe0, 0x53, 0xcf, 0x98, 0xb4, 0x0d, 0x93, 0xda, 0xd4, + 0x23, 0x9c, 0xf6, 0x91, 0xeb, 0x39, 0xdc, 0x51, 0x9b, 0x73, 0x04, 0x4a, 0x11, 0x88, 0xb8, 0x0c, + 0x09, 0x04, 0x9a, 0xb4, 0xeb, 0xf7, 0x33, 0x9c, 0xa6, 0x63, 0x3a, 0x86, 0x04, 0x9e, 0x04, 0x03, + 0x79, 0x92, 0x07, 0xf9, 0x15, 0x11, 0xd6, 0xf5, 0x51, 0xc7, 0x47, 0xcc, 0x91, 0x8f, 0xf6, 0x1c, + 0x8f, 0xde, 0xf0, 0x68, 0xfd, 0xc1, 0x3c, 0xc7, 0x22, 0xbd, 0x21, 0xb3, 0xa9, 0x37, 0x35, 0xdc, + 0x91, 0x29, 0x02, 0xbe, 0x61, 0x51, 0x4e, 0x6e, 0x42, 0x3d, 0xba, 0x0d, 0xe5, 0x05, 0x36, 0x67, + 0x16, 0x35, 0xfc, 0xde, 0x90, 0x5a, 0xe4, 0x2a, 0x4e, 0xff, 0x02, 0xa0, 0xf2, 0xd4, 0x73, 0x02, + 0x57, 0x7d, 0x0d, 0x4b, 0x82, 0xbc, 0x4f, 0x38, 0xa9, 0x81, 0x26, 0x68, 0xad, 0x6f, 0x6f, 0xa1, + 0x88, 0x14, 0x65, 0x49, 0x91, 0x3b, 0x32, 0x45, 0xc0, 0x47, 0x22, 0x1b, 0x4d, 0xda, 0xe8, 0xf0, + 0xe4, 0x0d, 0xed, 0xf1, 0x03, 0xca, 0x49, 0x57, 0x3d, 0x9b, 0x35, 0x72, 0xe1, 0xac, 0x01, 0xe7, + 0x31, 0x9c, 0xb2, 0xaa, 0x47, 0x50, 0x11, 0xbe, 0xf9, 0xb5, 0xbc, 0xa4, 0x37, 0xd0, 0x32, 0x7b, + 0xd1, 0xa1, 0xcb, 0x99, 0x63, 0x93, 0xf1, 0x73, 0x62, 0x51, 0xbf, 0x5b, 0x0e, 0x67, 0x0d, 0xe5, + 0xa5, 0x60, 0xc0, 0x11, 0x91, 0xfe, 0x19, 0xc0, 0xb2, 0x54, 0xbf, 0xcf, 0x7c, 0xae, 0xbe, 0xba, + 0x56, 0x01, 0xba, 0x5b, 0x05, 0x02, 0x2d, 0xf5, 0x57, 0x63, 0xfd, 0xa5, 0x24, 0x92, 0x51, 0xbf, + 0x0f, 0x15, 0xc6, 0xa9, 0x25, 0xd4, 0x17, 0x5a, 0xeb, 0xdb, 0xff, 0x2d, 0x57, 0x2f, 0x95, 0x75, + 0x37, 0x62, 0x4e, 0x65, 0x4f, 0xa0, 0x71, 0x44, 0xa2, 0x7f, 0x2b, 0xc0, 0xd2, 0x5e, 0x9f, 0xda, + 0x9c, 0xf1, 0xe9, 0x0a, 0xac, 0xef, 0xc0, 0x8a, 0xeb, 0x39, 0x13, 0xd6, 0xa7, 0x9e, 0xf0, 0x52, + 0x76, 0xa0, 0xdc, 0xdd, 0x8c, 0x31, 0x95, 0xa3, 0xcc, 0x1d, 0x5e, 0xc8, 0x54, 0x1f, 0xc3, 0x6a, + 0x72, 0x16, 0xd6, 0x4b, 0x74, 0x41, 0xa2, 0x6b, 0x31, 0xba, 0x7a, 0x74, 0xe5, 0x1e, 0x5f, 0x43, + 0xa8, 0xbb, 0xb0, 0x28, 0x5c, 0xa9, 0x15, 0x65, 0x75, 0xff, 0x64, 0xaa, 0x43, 0x62, 0x0f, 0xe6, + 0xb5, 0x60, 0x3a, 0xa0, 0x1e, 0xb5, 0x7b, 0xb4, 0x5b, 0x89, 0xe9, 0x8b, 0x82, 0x04, 0x4b, 0xb8, + 0x7a, 0x0c, 0x15, 0xfa, 0x96, 0x7b, 0xa4, 0xa6, 0xc8, 0x1e, 0x3c, 0x5c, 0xde, 0x83, 0xc4, 0x63, + 0xb4, 0x2b, 0x70, 0xbb, 0x36, 0xf7, 0xa6, 0xf3, 0x8e, 0xc8, 0x18, 0x8e, 0x28, 0xeb, 0x1d, 0x08, + 0xe7, 0x39, 0x6a, 0x15, 0x16, 0x46, 0x74, 0x2a, 0xbb, 0x51, 0xc6, 0xe2, 0x53, 0xdd, 0x84, 0xca, + 0x84, 0x8c, 0x83, 0xd8, 0x3b, 0x1c, 0x1d, 0x76, 0xf2, 0x1d, 0xa0, 0x7f, 0x05, 0xb0, 0x92, 0xbc, + 0xb3, 0x82, 0x41, 0x3c, 0x5c, 0x1c, 0xc4, 0xff, 0xef, 0x6e, 0xc2, 0x2d, 0xb3, 0xb8, 0x03, 0x37, + 0x16, 0x16, 0x4d, 0x6d, 0x24, 0x2f, 0x80, 0x66, 0xa1, 0x55, 0x8e, 0xf6, 0x2e, 0x8b, 0xd8, 0x29, + 0x7d, 0xf8, 0xd8, 0xc8, 0x9d, 0x7e, 0x6f, 0xe6, 0xf4, 0x5f, 0x00, 0xca, 0x06, 0xad, 0x60, 0x86, + 0xef, 0xc1, 0xd2, 0x20, 0x18, 0x8f, 0x33, 0xf3, 0x9b, 0xba, 0xf4, 0x24, 0x8e, 0xe3, 0x34, 0x43, + 0x45, 0x10, 0xb2, 0xa8, 0x6c, 0x46, 0xfd, 0x5a, 0x41, 0x16, 0xf2, 0x97, 0xe0, 0xde, 0x4b, 0xa3, + 0x38, 0x93, 0xa1, 0xea, 0x70, 0xcd, 0x14, 0xfb, 0xea, 0xd7, 0x8a, 0x32, 0x17, 0x86, 0xb3, 0xc6, + 0x9a, 0xdc, 0x60, 0x1f, 0xc7, 0x37, 0xfa, 0xfb, 0x3c, 0xfc, 0x5b, 0x14, 0x9b, 0xf8, 0x79, 0x40, + 0x5c, 0x97, 0xd9, 0xe6, 0x0a, 0x6a, 0x7f, 0x01, 0x4b, 0xb1, 0xd6, 0x69, 0xfc, 0xf7, 0xbc, 0xd3, + 0x0e, 0xa5, 0x06, 0x25, 0x8a, 0x71, 0x4a, 0x93, 0xae, 0x64, 0xe1, 0x8f, 0x56, 0x52, 0xff, 0x04, + 0x60, 0x49, 0x1c, 0x57, 0x30, 0xf8, 0xcf, 0x16, 0x07, 0xff, 0xdf, 0xe5, 0x83, 0x2f, 0x84, 0xdd, + 0x3c, 0xf4, 0xdd, 0xd6, 0xd9, 0xa5, 0x96, 0x3b, 0xbf, 0xd4, 0x72, 0x17, 0x97, 0x5a, 0xee, 0x34, + 0xd4, 0xc0, 0x59, 0xa8, 0x81, 0xf3, 0x50, 0x03, 0x17, 0xa1, 0x06, 0x7e, 0x84, 0x1a, 0x78, 0xf7, + 0x53, 0xcb, 0x1d, 0xe7, 0x27, 0xed, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x87, 0x3b, 0x61, 0x21, + 0x38, 0x08, 0x00, 0x00, +} + +func (m *Group) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Group) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Group) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Users != nil { + { + size, err := m.Users.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *GroupList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GroupList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GroupList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Identity) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Identity) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Extra) > 0 { + keysForExtra := make([]string, 0, len(m.Extra)) + for k := range m.Extra { + keysForExtra = append(keysForExtra, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) + for iNdEx := len(keysForExtra) - 1; iNdEx >= 0; iNdEx-- { + v := m.Extra[string(keysForExtra[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForExtra[iNdEx]) + copy(dAtA[i:], keysForExtra[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForExtra[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x2a + } + } + { + size, err := m.User.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + i -= len(m.ProviderUserName) + copy(dAtA[i:], m.ProviderUserName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ProviderUserName))) + i-- + dAtA[i] = 0x1a + i -= len(m.ProviderName) + copy(dAtA[i:], m.ProviderName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ProviderName))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *IdentityList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IdentityList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IdentityList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m OptionalNames) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m OptionalNames) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m OptionalNames) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m) > 0 { + for iNdEx := len(m) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m[iNdEx]) + copy(dAtA[i:], m[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *User) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *User) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *User) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Groups) > 0 { + for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Groups[iNdEx]) + copy(dAtA[i:], m.Groups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Groups[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + if len(m.Identities) > 0 { + for iNdEx := len(m.Identities) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Identities[iNdEx]) + copy(dAtA[i:], m.Identities[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Identities[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.FullName) + copy(dAtA[i:], m.FullName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FullName))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *UserIdentityMapping) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UserIdentityMapping) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UserIdentityMapping) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.User.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Identity.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *UserList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UserList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UserList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + offset -= sovGenerated(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Group) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Users != nil { + l = m.Users.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *GroupList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *Identity) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ProviderName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ProviderUserName) + n += 1 + l + sovGenerated(uint64(l)) + l = m.User.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Extra) > 0 { + for k, v := range m.Extra { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *IdentityList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m OptionalNames) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m) > 0 { + for _, s := range m { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *User) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FullName) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Identities) > 0 { + for _, s := range m.Identities { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Groups) > 0 { + for _, s := range m.Groups { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *UserIdentityMapping) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Identity.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.User.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *UserList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *Group) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Group{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Users:` + strings.Replace(fmt.Sprintf("%v", this.Users), "OptionalNames", "OptionalNames", 1) + `,`, + `}`, + }, "") + return s +} +func (this *GroupList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Group{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Group", "Group", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&GroupList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *Identity) String() string { + if this == nil { + return "nil" + } + keysForExtra := make([]string, 0, len(this.Extra)) + for k := range this.Extra { + keysForExtra = append(keysForExtra, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) + mapStringForExtra := "map[string]string{" + for _, k := range keysForExtra { + mapStringForExtra += fmt.Sprintf("%v: %v,", k, this.Extra[k]) + } + mapStringForExtra += "}" + s := strings.Join([]string{`&Identity{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `ProviderName:` + fmt.Sprintf("%v", this.ProviderName) + `,`, + `ProviderUserName:` + fmt.Sprintf("%v", this.ProviderUserName) + `,`, + `User:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.User), "ObjectReference", "v11.ObjectReference", 1), `&`, ``, 1) + `,`, + `Extra:` + mapStringForExtra + `,`, + `}`, + }, "") + return s +} +func (this *IdentityList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]Identity{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "Identity", "Identity", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&IdentityList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *User) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&User{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `FullName:` + fmt.Sprintf("%v", this.FullName) + `,`, + `Identities:` + fmt.Sprintf("%v", this.Identities) + `,`, + `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, + `}`, + }, "") + return s +} +func (this *UserIdentityMapping) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&UserIdentityMapping{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Identity:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Identity), "ObjectReference", "v11.ObjectReference", 1), `&`, ``, 1) + `,`, + `User:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.User), "ObjectReference", "v11.ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *UserList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]User{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "User", "User", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&UserList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *Group) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Group: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Group: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Users", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Users == nil { + m.Users = OptionalNames{} + } + if err := m.Users.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GroupList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GroupList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GroupList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Group{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Identity) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Identity: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Identity: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProviderName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProviderName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProviderUserName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProviderUserName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.User.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Extra", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Extra == nil { + m.Extra = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Extra[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IdentityList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IdentityList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IdentityList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Identity{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OptionalNames) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OptionalNames: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OptionalNames: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + *m = append(*m, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *User) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: User: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: User: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FullName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FullName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Identities", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Identities = append(m.Identities, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Groups", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Groups = append(m.Groups, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UserIdentityMapping) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UserIdentityMapping: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UserIdentityMapping: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Identity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Identity.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.User.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UserList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UserList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UserList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, User{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenerated + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenerated + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") +) diff --git a/vendor/github.com/openshift/api/user/v1/generated.proto b/vendor/github.com/openshift/api/user/v1/generated.proto new file mode 100644 index 0000000000000..7444d41ef07b1 --- /dev/null +++ b/vendor/github.com/openshift/api/user/v1/generated.proto @@ -0,0 +1,108 @@ + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package github.com.openshift.api.user.v1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; +import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// Group represents a referenceable set of Users +message Group { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Users is the list of users in this group. + optional OptionalNames users = 2; +} + +// GroupList is a collection of Groups +message GroupList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of groups + repeated Group items = 2; +} + +// Identity records a successful authentication of a user with an identity provider. The +// information about the source of authentication is stored on the identity, and the identity +// is then associated with a single user object. Multiple identities can reference a single +// user. Information retrieved from the authentication provider is stored in the extra field +// using a schema determined by the provider. +message Identity { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // ProviderName is the source of identity information + optional string providerName = 2; + + // ProviderUserName uniquely represents this identity in the scope of the provider + optional string providerUserName = 3; + + // User is a reference to the user this identity is associated with + // Both Name and UID must be set + optional k8s.io.api.core.v1.ObjectReference user = 4; + + // Extra holds extra information about this identity + map extra = 5; +} + +// IdentityList is a collection of Identities +message IdentityList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of identities + repeated Identity items = 2; +} + +// OptionalNames is an array that may also be left nil to distinguish between set and unset. +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +message OptionalNames { + // items, if empty, will result in an empty slice + + repeated string items = 1; +} + +// Upon log in, every user of the system receives a User and Identity resource. Administrators +// may directly manipulate the attributes of the users for their own tracking, or set groups +// via the API. The user name is unique and is chosen based on the value provided by the +// identity provider - if a user already exists with the incoming name, the user name may have +// a number appended to it depending on the configuration of the system. +message User { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // FullName is the full name of user + optional string fullName = 2; + + // Identities are the identities associated with this user + repeated string identities = 3; + + // Groups specifies group names this user is a member of. + // This field is deprecated and will be removed in a future release. + // Instead, create a Group object containing the name of this User. + repeated string groups = 4; +} + +// UserIdentityMapping maps a user to an identity +message UserIdentityMapping { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Identity is a reference to an identity + optional k8s.io.api.core.v1.ObjectReference identity = 2; + + // User is a reference to a user + optional k8s.io.api.core.v1.ObjectReference user = 3; +} + +// UserList is a collection of Users +message UserList { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // Items is the list of users + repeated User items = 2; +} + diff --git a/vendor/github.com/openshift/api/user/v1/legacy.go b/vendor/github.com/openshift/api/user/v1/legacy.go new file mode 100644 index 0000000000000..6817a9f1f3ea9 --- /dev/null +++ b/vendor/github.com/openshift/api/user/v1/legacy.go @@ -0,0 +1,27 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + legacyGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} + legacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes, corev1.AddToScheme) + DeprecatedInstallWithoutGroup = legacySchemeBuilder.AddToScheme +) + +func addLegacyKnownTypes(scheme *runtime.Scheme) error { + types := []runtime.Object{ + &User{}, + &UserList{}, + &Identity{}, + &IdentityList{}, + &UserIdentityMapping{}, + &Group{}, + &GroupList{}, + } + scheme.AddKnownTypes(legacyGroupVersion, types...) + return nil +} diff --git a/vendor/github.com/openshift/api/user/v1/register.go b/vendor/github.com/openshift/api/user/v1/register.go new file mode 100644 index 0000000000000..11341d72a98ac --- /dev/null +++ b/vendor/github.com/openshift/api/user/v1/register.go @@ -0,0 +1,44 @@ +package v1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "user.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, corev1.AddToScheme) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &User{}, + &UserList{}, + &Identity{}, + &IdentityList{}, + &UserIdentityMapping{}, + &Group{}, + &GroupList{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/vendor/github.com/openshift/api/user/v1/types.go b/vendor/github.com/openshift/api/user/v1/types.go new file mode 100644 index 0000000000000..8708d027353f1 --- /dev/null +++ b/vendor/github.com/openshift/api/user/v1/types.go @@ -0,0 +1,131 @@ +package v1 + +import ( + "fmt" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Upon log in, every user of the system receives a User and Identity resource. Administrators +// may directly manipulate the attributes of the users for their own tracking, or set groups +// via the API. The user name is unique and is chosen based on the value provided by the +// identity provider - if a user already exists with the incoming name, the user name may have +// a number appended to it depending on the configuration of the system. +type User struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // FullName is the full name of user + FullName string `json:"fullName,omitempty" protobuf:"bytes,2,opt,name=fullName"` + + // Identities are the identities associated with this user + Identities []string `json:"identities" protobuf:"bytes,3,rep,name=identities"` + + // Groups specifies group names this user is a member of. + // This field is deprecated and will be removed in a future release. + // Instead, create a Group object containing the name of this User. + Groups []string `json:"groups" protobuf:"bytes,4,rep,name=groups"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// UserList is a collection of Users +type UserList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of users + Items []User `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Identity records a successful authentication of a user with an identity provider. The +// information about the source of authentication is stored on the identity, and the identity +// is then associated with a single user object. Multiple identities can reference a single +// user. Information retrieved from the authentication provider is stored in the extra field +// using a schema determined by the provider. +type Identity struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // ProviderName is the source of identity information + ProviderName string `json:"providerName" protobuf:"bytes,2,opt,name=providerName"` + + // ProviderUserName uniquely represents this identity in the scope of the provider + ProviderUserName string `json:"providerUserName" protobuf:"bytes,3,opt,name=providerUserName"` + + // User is a reference to the user this identity is associated with + // Both Name and UID must be set + User corev1.ObjectReference `json:"user" protobuf:"bytes,4,opt,name=user"` + + // Extra holds extra information about this identity + Extra map[string]string `json:"extra,omitempty" protobuf:"bytes,5,rep,name=extra"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// IdentityList is a collection of Identities +type IdentityList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of identities + Items []Identity `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient +// +genclient:nonNamespaced +// +genclient:onlyVerbs=get,create,update,delete +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// UserIdentityMapping maps a user to an identity +type UserIdentityMapping struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Identity is a reference to an identity + Identity corev1.ObjectReference `json:"identity,omitempty" protobuf:"bytes,2,opt,name=identity"` + // User is a reference to a user + User corev1.ObjectReference `json:"user,omitempty" protobuf:"bytes,3,opt,name=user"` +} + +// OptionalNames is an array that may also be left nil to distinguish between set and unset. +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +type OptionalNames []string + +func (t OptionalNames) String() string { + return fmt.Sprintf("%v", []string(t)) +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Group represents a referenceable set of Users +type Group struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Users is the list of users in this group. + Users OptionalNames `json:"users" protobuf:"bytes,2,rep,name=users"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// GroupList is a collection of Groups +type GroupList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of groups + Items []Group `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/github.com/openshift/api/user/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/user/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..6e45450adb36e --- /dev/null +++ b/vendor/github.com/openshift/api/user/v1/zz_generated.deepcopy.go @@ -0,0 +1,257 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Group) DeepCopyInto(out *Group) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Users != nil { + in, out := &in.Users, &out.Users + *out = make(OptionalNames, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Group. +func (in *Group) DeepCopy() *Group { + if in == nil { + return nil + } + out := new(Group) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Group) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GroupList) DeepCopyInto(out *GroupList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Group, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GroupList. +func (in *GroupList) DeepCopy() *GroupList { + if in == nil { + return nil + } + out := new(GroupList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *GroupList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Identity) DeepCopyInto(out *Identity) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.User = in.User + if in.Extra != nil { + in, out := &in.Extra, &out.Extra + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Identity. +func (in *Identity) DeepCopy() *Identity { + if in == nil { + return nil + } + out := new(Identity) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Identity) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IdentityList) DeepCopyInto(out *IdentityList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Identity, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IdentityList. +func (in *IdentityList) DeepCopy() *IdentityList { + if in == nil { + return nil + } + out := new(IdentityList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *IdentityList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in OptionalNames) DeepCopyInto(out *OptionalNames) { + { + in := &in + *out = make(OptionalNames, len(*in)) + copy(*out, *in) + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OptionalNames. +func (in OptionalNames) DeepCopy() OptionalNames { + if in == nil { + return nil + } + out := new(OptionalNames) + in.DeepCopyInto(out) + return *out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *User) DeepCopyInto(out *User) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.Identities != nil { + in, out := &in.Identities, &out.Identities + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new User. +func (in *User) DeepCopy() *User { + if in == nil { + return nil + } + out := new(User) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *User) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UserIdentityMapping) DeepCopyInto(out *UserIdentityMapping) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Identity = in.Identity + out.User = in.User + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserIdentityMapping. +func (in *UserIdentityMapping) DeepCopy() *UserIdentityMapping { + if in == nil { + return nil + } + out := new(UserIdentityMapping) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *UserIdentityMapping) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UserList) DeepCopyInto(out *UserList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]User, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserList. +func (in *UserList) DeepCopy() *UserList { + if in == nil { + return nil + } + out := new(UserList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *UserList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/vendor/github.com/openshift/api/user/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/user/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000000..e034251f965c7 --- /dev/null +++ b/vendor/github.com/openshift/api/user/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,83 @@ +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_Group = map[string]string{ + "": "Group represents a referenceable set of Users", + "users": "Users is the list of users in this group.", +} + +func (Group) SwaggerDoc() map[string]string { + return map_Group +} + +var map_GroupList = map[string]string{ + "": "GroupList is a collection of Groups", + "items": "Items is the list of groups", +} + +func (GroupList) SwaggerDoc() map[string]string { + return map_GroupList +} + +var map_Identity = map[string]string{ + "": "Identity records a successful authentication of a user with an identity provider. The information about the source of authentication is stored on the identity, and the identity is then associated with a single user object. Multiple identities can reference a single user. Information retrieved from the authentication provider is stored in the extra field using a schema determined by the provider.", + "providerName": "ProviderName is the source of identity information", + "providerUserName": "ProviderUserName uniquely represents this identity in the scope of the provider", + "user": "User is a reference to the user this identity is associated with Both Name and UID must be set", + "extra": "Extra holds extra information about this identity", +} + +func (Identity) SwaggerDoc() map[string]string { + return map_Identity +} + +var map_IdentityList = map[string]string{ + "": "IdentityList is a collection of Identities", + "items": "Items is the list of identities", +} + +func (IdentityList) SwaggerDoc() map[string]string { + return map_IdentityList +} + +var map_User = map[string]string{ + "": "Upon log in, every user of the system receives a User and Identity resource. Administrators may directly manipulate the attributes of the users for their own tracking, or set groups via the API. The user name is unique and is chosen based on the value provided by the identity provider - if a user already exists with the incoming name, the user name may have a number appended to it depending on the configuration of the system.", + "fullName": "FullName is the full name of user", + "identities": "Identities are the identities associated with this user", + "groups": "Groups specifies group names this user is a member of. This field is deprecated and will be removed in a future release. Instead, create a Group object containing the name of this User.", +} + +func (User) SwaggerDoc() map[string]string { + return map_User +} + +var map_UserIdentityMapping = map[string]string{ + "": "UserIdentityMapping maps a user to an identity", + "identity": "Identity is a reference to an identity", + "user": "User is a reference to a user", +} + +func (UserIdentityMapping) SwaggerDoc() map[string]string { + return map_UserIdentityMapping +} + +var map_UserList = map[string]string{ + "": "UserList is a collection of Users", + "items": "Items is the list of users", +} + +func (UserList) SwaggerDoc() map[string]string { + return map_UserList +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/apiserver-library-go/LICENSE b/vendor/github.com/openshift/apiserver-library-go/LICENSE new file mode 100644 index 0000000000000..261eeb9e9f8b2 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/LICENSE @@ -0,0 +1,201 @@ + 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. diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/accept.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/accept.go new file mode 100644 index 0000000000000..8ff6c7d70eecc --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/accept.go @@ -0,0 +1,124 @@ +package imagepolicy + +import ( + "fmt" + + "k8s.io/klog/v2" + + apierrs "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + kapi "k8s.io/kubernetes/pkg/apis/core" + + "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators" + "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/rules" + "github.com/openshift/library-go/pkg/image/reference" +) + +var errRejectByPolicy = fmt.Errorf("this image is prohibited by policy") + +type policyDecisions map[kapi.ObjectReference]policyDecision + +type policyDecision struct { + attrs *rules.ImagePolicyAttributes + tested bool + resolutionErr error +} + +func accept(accepter rules.Accepter, policy imageResolutionPolicy, resolver imageResolver, m imagereferencemutators.ImageReferenceMutator, annotations imagereferencemutators.AnnotationAccessor, attr admission.Attributes, excludedRules sets.String) error { + decisions := policyDecisions{} + + t := attr.GetResource().GroupResource() + gr := metav1.GroupResource{Resource: t.Resource, Group: t.Group} + + resolveAllNames := imagereferencemutators.ResolveAllNames(annotations) + + errs := m.Mutate(func(ref *kapi.ObjectReference) error { + // create the attribute set for this particular reference, if we have never seen the reference + // before + decision, ok := decisions[*ref] + if !ok { + if policy.RequestsResolution(gr) { + resolvedAttrs, err := resolver.ResolveObjectReference(ref, attr.GetNamespace(), resolveAllNames) + switch { + case err != nil && policy.FailOnResolutionFailure(gr): + klog.V(5).Infof("resource failed on error during required image resolution: %v", err) + // if we had a resolution error and we're supposed to fail, fail + decision.resolutionErr = err + decision.tested = true + decisions[*ref] = decision + return err + + case err != nil: + klog.V(5).Infof("error during optional image resolution: %v", err) + // if we had an error, but aren't supposed to fail, just don't do anything else and keep track of + // the resolution failure + decision.resolutionErr = err + + case err == nil: + // if we resolved properly, assign the attributes and rewrite the pull spec if we need to + decision.attrs = resolvedAttrs + + if policy.RewriteImagePullSpec(resolvedAttrs, attr.GetOperation() == admission.Update, gr) { + ref.Namespace = "" + ref.Name = decision.attrs.Name.Exact() + ref.Kind = "DockerImage" + } + } + } + // if we don't have any image policy attributes, attempt a best effort parse for the remaining tests + if decision.attrs == nil { + decision.attrs = &rules.ImagePolicyAttributes{} + + // an objectref that is DockerImage ref will have a name that corresponds to its pull spec. We can parse that + // to a docker image ref + if ref != nil && ref.Kind == "DockerImage" { + decision.attrs.Name, _ = reference.Parse(ref.Name) + } + } + decision.attrs.Resource = gr + decision.attrs.ExcludedRules = excludedRules + klog.V(5).Infof("post resolution, ref=%s:%s/%s, image attributes=%#v, resolution err=%v", ref.Kind, ref.Name, ref.Namespace, *decision.attrs, decision.resolutionErr) + } + + // we only need to test a given input once for acceptance + if !decision.tested { + accepted := accepter.Accepts(decision.attrs) + klog.V(5).Infof("Made decision for %v (as: %v, resolution err: %v): accept=%t", ref, decision.attrs.Name, decision.resolutionErr, accepted) + + decision.tested = true + decisions[*ref] = decision + + if !accepted { + // if the image is rejected due to a resolution error, return the resolution error + // This is a dubious result. It's entirely possible we had an error resolving the image, + // but no rule actually requires image resolution and the image was rejected for some other + // reason. The user will then see that it was rejected due to the resolution error, but + // that isn't really why it was rejected. Better logic would check if the rule that + // rejected the image, required resolution, and only then report the resolution falure. + if decision.resolutionErr != nil { + return decision.resolutionErr + } + // otherwise the image is being rejected by policy + return errRejectByPolicy + } + } + + return nil + }) + + for i := range errs { + errs[i].Type = field.ErrorTypeForbidden + if errs[i].Detail != errRejectByPolicy.Error() { + errs[i].Detail = fmt.Sprintf("this image is prohibited by policy: %s", errs[i].Detail) + } + } + + if len(errs) > 0 { + klog.V(5).Infof("image policy admission rejecting due to: %v", errs) + return apierrs.NewInvalid(attr.GetKind().GroupKind(), attr.GetName(), errs) + } + return nil +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/default-policy.yaml b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/default-policy.yaml new file mode 100644 index 0000000000000..8a24de7b4b829 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/default-policy.yaml @@ -0,0 +1,20 @@ +kind: ImagePolicyConfig +apiVersion: image.openshift.io/v1 +# To require that all images running on the platform be imported first, you may uncomment the +# following rule. Any image that refers to a registry outside of OpenShift will be rejected unless it +# unless it points directly to an image digest (myregistry.com/myrepo/image@sha256:ea83bcf...) and that +# digest has been imported via the import-image flow. +#resolveImages: Required +executionRules: +- name: execution-denied + # Reject all images that have the annotation images.openshift.io/deny-execution set to true. + # This annotation may be set by infrastructure that wishes to flag particular images as dangerous + onResources: + - resource: pods + - resource: builds + group: build.openshift.io + reject: true + matchImageAnnotations: + - key: images.openshift.io/deny-execution + value: "true" + skipOnResolutionFailure: true diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/defaults.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/defaults.go new file mode 100644 index 0000000000000..6c2d1499caf9e --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/defaults.go @@ -0,0 +1,77 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + kapi "k8s.io/kubernetes/pkg/apis/core" +) + +func SetDefaults_ImagePolicyConfig(obj *ImagePolicyConfig) { + if obj == nil { + return + } + + if len(obj.ResolveImages) == 0 { + obj.ResolveImages = Attempt + } + + for i := range obj.ExecutionRules { + if len(obj.ExecutionRules[i].OnResources) == 0 { + obj.ExecutionRules[i].OnResources = []metav1.GroupResource{{Resource: "pods", Group: kapi.GroupName}} + } + } + + if obj.ResolutionRules == nil { + obj.ResolutionRules = []ImageResolutionPolicyRule{ + {TargetResource: metav1.GroupResource{Group: "", Resource: "pods"}, LocalNames: true}, + {TargetResource: metav1.GroupResource{Group: "", Resource: "replicationcontrollers"}, LocalNames: true}, + {TargetResource: metav1.GroupResource{Group: "apps", Resource: "daemonsets"}, LocalNames: true}, + {TargetResource: metav1.GroupResource{Group: "apps", Resource: "deployments"}, LocalNames: true}, + {TargetResource: metav1.GroupResource{Group: "apps", Resource: "statefulsets"}, LocalNames: true}, + {TargetResource: metav1.GroupResource{Group: "apps", Resource: "replicasets"}, LocalNames: true}, + {TargetResource: metav1.GroupResource{Group: "build.openshift.io", Resource: "builds"}, LocalNames: true}, + {TargetResource: metav1.GroupResource{Group: "batch", Resource: "jobs"}, LocalNames: true}, + {TargetResource: metav1.GroupResource{Group: "batch", Resource: "cronjobs"}, LocalNames: true}, + {TargetResource: metav1.GroupResource{Group: "extensions", Resource: "daemonsets"}, LocalNames: true}, + {TargetResource: metav1.GroupResource{Group: "extensions", Resource: "deployments"}, LocalNames: true}, + {TargetResource: metav1.GroupResource{Group: "extensions", Resource: "replicasets"}, LocalNames: true}, + } + // default the resolution policy to the global default + for i := range obj.ResolutionRules { + if len(obj.ResolutionRules[i].Policy) != 0 { + continue + } + obj.ResolutionRules[i].Policy = DoNotAttempt + for _, rule := range obj.ExecutionRules { + if executionRuleCoversResource(rule, obj.ResolutionRules[i].TargetResource) { + obj.ResolutionRules[i].Policy = obj.ResolveImages + break + } + } + } + } else { + // default the resolution policy to the global default + for i := range obj.ResolutionRules { + if len(obj.ResolutionRules[i].Policy) != 0 { + continue + } + obj.ResolutionRules[i].Policy = obj.ResolveImages + } + } + +} + +func addDefaultingFuncs(scheme *runtime.Scheme) error { + scheme.AddTypeDefaultingFunc(&ImagePolicyConfig{}, func(obj interface{}) { SetDefaults_ImagePolicyConfig(obj.(*ImagePolicyConfig)) }) + return nil +} + +// executionRuleCoversResource returns true if gr is covered by rule. +func executionRuleCoversResource(rule ImageExecutionPolicyRule, gr metav1.GroupResource) bool { + for _, target := range rule.OnResources { + if target.Group == gr.Group && (target.Resource == gr.Resource || target.Resource == "*") { + return true + } + } + return false +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/doc.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/doc.go new file mode 100644 index 0000000000000..124d5620f4a74 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/register.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/register.go new file mode 100644 index 0000000000000..602e3a2c541a6 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/register.go @@ -0,0 +1,26 @@ +package v1 + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +func (obj *ImagePolicyConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } + +var GroupVersion = schema.GroupVersion{Group: "image.openshift.io", Version: "v1"} + +var ( + schemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + addDefaultingFuncs, + ) + Install = schemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &ImagePolicyConfig{}, + ) + return nil +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/types.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/types.go new file mode 100644 index 0000000000000..b5d5198a0e95e --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/types.go @@ -0,0 +1,132 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" +) + +const ( + PluginName = "image.openshift.io/ImagePolicy" + + // IgnorePolicyRulesAnnotation is a comma delimited list of rule names to omit from consideration + // in a given namespace. Loaded from the namespace. + IgnorePolicyRulesAnnotation = "alpha.image.policy.openshift.io/ignore-rules" + // ResolveNamesAnnotation when placed on an object template or object requests that all relevant + // image names be resolved by taking the name and tag and attempting to resolve a local image stream. + // This overrides the imageLookupPolicy on the image stream. If the object is not namespaced the + // annotation is ignored. The only valid value is '*'. + ResolveNamesAnnotation = "alpha.image.policy.openshift.io/resolve-names" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ImagePolicyConfig is the configuration for control of images running on the platform. +type ImagePolicyConfig struct { + metav1.TypeMeta `json:",inline"` + + // ResolveImages indicates the default image resolution behavior. If a rewriting policy is chosen, + // then the image pull specs will be updated. + ResolveImages ImageResolutionType `json:"resolveImages"` + + // ResolutionRules allows more specific image resolution rules to be applied per resource. If + // empty, it defaults to allowing local image stream lookups - "mysql" will map to the image stream + // tag "mysql:latest" in the current namespace if the stream supports it. The default for this + // field is all known types that support image resolution, and the policy for those rules will be + // set to the overall resolution policy if an execution rule references the same resource. + ResolutionRules []ImageResolutionPolicyRule `json:"resolutionRules"` + + // ExecutionRules determine whether the use of an image is allowed in an object with a pod spec. + // By default, these rules only apply to pods, but may be extended to other resource types. + // If all execution rules are negations, the default behavior is allow all. If any execution rule + // is an allow, the default behavior is to reject all. + ExecutionRules []ImageExecutionPolicyRule `json:"executionRules"` +} + +// ImageResolutionType is an enumerated string that indicates how image pull spec resolution should be handled +type ImageResolutionType string + +var ( + // require resolution to succeed and rewrite the resource to use it + RequiredRewrite ImageResolutionType = "RequiredRewrite" + // require resolution to succeed, but don't rewrite the image pull spec + Required ImageResolutionType = "Required" + // attempt resolution, rewrite if successful + AttemptRewrite ImageResolutionType = "AttemptRewrite" + // attempt resolution, don't rewrite + Attempt ImageResolutionType = "Attempt" + // don't attempt resolution + DoNotAttempt ImageResolutionType = "DoNotAttempt" +) + +// ImageResolutionPolicyRule describes resolution rules based on resource. +type ImageResolutionPolicyRule struct { + // Policy controls whether resolution will happen if the rule doesn't match local names. This value + // overrides the global image policy for all target resources. + Policy ImageResolutionType `json:"policy"` + // TargetResource is the identified group and resource. If Resource is *, this rule will apply + // to all resources in that group. + TargetResource metav1.GroupResource `json:"targetResource"` + // LocalNames will allow single segment names to be interpreted as namespace local image + // stream tags, but only if the target image stream tag has the "resolveLocalNames" field + // set. + LocalNames bool `json:"localNames"` +} + +// ImageExecutionPolicyRule determines whether a provided image may be used on the platform. +type ImageExecutionPolicyRule struct { + ImageCondition `json:",inline"` + + // Reject means this rule, if it matches the condition, will cause an immediate failure. No + // other rules will be considered. + Reject bool `json:"reject"` +} + +// ImageCondition defines the conditions for matching a particular image source. The conditions below +// are all required (logical AND). If Reject is specified, the condition is false if all conditions match, +// and true otherwise. +type ImageCondition struct { + // Name is the name of this policy rule for reference. It must be unique across all rules. + Name string `json:"name"` + // IgnoreNamespaceOverride prevents this condition from being overridden when the + // `alpha.image.policy.openshift.io/ignore-rules` is set on a namespace and contains this rule name. + IgnoreNamespaceOverride bool `json:"ignoreNamespaceOverride"` + + // OnResources determines which resources this applies to. Defaults to 'pods' for ImageExecutionPolicyRules. + OnResources []metav1.GroupResource `json:"onResources"` + + // InvertMatch means the value of the condition is logically inverted (true -> false, false -> true). + InvertMatch bool `json:"invertMatch"` + + // MatchIntegratedRegistry will only match image sources that originate from the configured integrated + // registry. + MatchIntegratedRegistry bool `json:"matchIntegratedRegistry"` + // MatchRegistries will match image references that point to the provided registries. The image registry + // must match at least one of these strings. + MatchRegistries []string `json:"matchRegistries"` + + // SkipOnResolutionFailure allows the subsequent conditions to be bypassed if the integrated registry does + // not have access to image metadata (no image exists matching the image digest). + SkipOnResolutionFailure bool `json:"skipOnResolutionFailure"` + + // MatchDockerImageLabels checks against the resolved image for the presence of a Docker label. All + // conditions must match. + MatchDockerImageLabels []ValueCondition `json:"matchDockerImageLabels"` + // MatchImageLabels checks against the resolved image for a label. All conditions must match. + MatchImageLabels []metav1.LabelSelector `json:"matchImageLabels"` + // MatchImageLabelSelectors is the processed form of MatchImageLabels. All conditions must match. + // TODO: this only existed on the internal type, it's set as part of processing the configuration, + // so presumably it should not be supplied by the user. Not sure the best way to deal with it. + MatchImageLabelSelectors []labels.Selector `json:"-"` + // MatchImageAnnotations checks against the resolved image for an annotation. All conditions must match. + MatchImageAnnotations []ValueCondition `json:"matchImageAnnotations"` +} + +// ValueCondition reflects whether the following key in a map is set or has a given value. +type ValueCondition struct { + // Key is the name of a key in a map to retrieve. + Key string `json:"key"` + // Set indicates the provided key exists in the map. This field is exclusive with Value. + Set bool `json:"set"` + // Value indicates the provided key has the given value. This field is exclusive with Set. + Value string `json:"value"` +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000000..c3d67efcd8981 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1/zz_generated.deepcopy.go @@ -0,0 +1,150 @@ +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageCondition) DeepCopyInto(out *ImageCondition) { + *out = *in + if in.OnResources != nil { + in, out := &in.OnResources, &out.OnResources + *out = make([]metav1.GroupResource, len(*in)) + copy(*out, *in) + } + if in.MatchRegistries != nil { + in, out := &in.MatchRegistries, &out.MatchRegistries + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.MatchDockerImageLabels != nil { + in, out := &in.MatchDockerImageLabels, &out.MatchDockerImageLabels + *out = make([]ValueCondition, len(*in)) + copy(*out, *in) + } + if in.MatchImageLabels != nil { + in, out := &in.MatchImageLabels, &out.MatchImageLabels + *out = make([]metav1.LabelSelector, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.MatchImageLabelSelectors != nil { + in, out := &in.MatchImageLabelSelectors, &out.MatchImageLabelSelectors + *out = make([]labels.Selector, len(*in)) + for i := range *in { + if (*in)[i] != nil { + (*out)[i] = (*in)[i].DeepCopySelector() + } + } + } + if in.MatchImageAnnotations != nil { + in, out := &in.MatchImageAnnotations, &out.MatchImageAnnotations + *out = make([]ValueCondition, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageCondition. +func (in *ImageCondition) DeepCopy() *ImageCondition { + if in == nil { + return nil + } + out := new(ImageCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageExecutionPolicyRule) DeepCopyInto(out *ImageExecutionPolicyRule) { + *out = *in + in.ImageCondition.DeepCopyInto(&out.ImageCondition) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageExecutionPolicyRule. +func (in *ImageExecutionPolicyRule) DeepCopy() *ImageExecutionPolicyRule { + if in == nil { + return nil + } + out := new(ImageExecutionPolicyRule) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImagePolicyConfig) DeepCopyInto(out *ImagePolicyConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.ResolutionRules != nil { + in, out := &in.ResolutionRules, &out.ResolutionRules + *out = make([]ImageResolutionPolicyRule, len(*in)) + copy(*out, *in) + } + if in.ExecutionRules != nil { + in, out := &in.ExecutionRules, &out.ExecutionRules + *out = make([]ImageExecutionPolicyRule, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImagePolicyConfig. +func (in *ImagePolicyConfig) DeepCopy() *ImagePolicyConfig { + if in == nil { + return nil + } + out := new(ImagePolicyConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ImagePolicyConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageResolutionPolicyRule) DeepCopyInto(out *ImageResolutionPolicyRule) { + *out = *in + out.TargetResource = in.TargetResource + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageResolutionPolicyRule. +func (in *ImageResolutionPolicyRule) DeepCopy() *ImageResolutionPolicyRule { + if in == nil { + return nil + } + out := new(ImageResolutionPolicyRule) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ValueCondition) DeepCopyInto(out *ValueCondition) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValueCondition. +func (in *ValueCondition) DeepCopy() *ValueCondition { + if in == nil { + return nil + } + out := new(ValueCondition) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/validation/validation.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/validation/validation.go new file mode 100644 index 0000000000000..ecc0756ed18e1 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/validation/validation.go @@ -0,0 +1,55 @@ +package validation + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apimachinery/pkg/util/validation/field" + + imagepolicy "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1" +) + +func Validate(config *imagepolicy.ImagePolicyConfig) field.ErrorList { + allErrs := field.ErrorList{} + if config == nil { + return allErrs + } + names := sets.NewString() + for i, rule := range config.ExecutionRules { + if names.Has(rule.Name) { + allErrs = append(allErrs, field.Duplicate(field.NewPath(imagepolicy.PluginName, "executionRules").Index(i).Child("name"), rule.Name)) + } + names.Insert(rule.Name) + for j, selector := range rule.MatchImageLabels { + _, err := metav1.LabelSelectorAsSelector(&selector) + if err != nil { + allErrs = append(allErrs, field.Invalid(field.NewPath(imagepolicy.PluginName, "executionRules").Index(i).Child("matchImageLabels").Index(j), nil, err.Error())) + } + } + } + + for i, rule := range config.ResolutionRules { + if len(rule.Policy) == 0 { + allErrs = append(allErrs, field.Required(field.NewPath(imagepolicy.PluginName, "resolutionRules").Index(i).Child("policy"), "a policy must be specified for this resource")) + } + if len(rule.TargetResource.Resource) == 0 { + allErrs = append(allErrs, field.Required(field.NewPath(imagepolicy.PluginName, "resolutionRules").Index(i).Child("targetResource", "resource"), "a target resource name or '*' must be provided")) + } + } + + // if you don't attempt resolution, you'll never be able to pass any rule that logically requires it + if config.ResolveImages == imagepolicy.DoNotAttempt { + for i, rule := range config.ExecutionRules { + if len(rule.MatchDockerImageLabels) > 0 { + allErrs = append(allErrs, field.Invalid(field.NewPath(imagepolicy.PluginName, "executionRules").Index(i).Child("matchDockerImageLabels"), rule.MatchDockerImageLabels, "images are not being resolved, this condition will always fail")) + } + if len(rule.MatchImageLabels) > 0 { + allErrs = append(allErrs, field.Invalid(field.NewPath(imagepolicy.PluginName, "executionRules").Index(i).Child("matchImageLabels"), rule.MatchImageLabels, "images are not being resolved, this condition will always fail")) + } + if len(rule.MatchImageAnnotations) > 0 { + allErrs = append(allErrs, field.Invalid(field.NewPath(imagepolicy.PluginName, "executionRules").Index(i).Child("matchImageAnnotations"), rule.MatchImageAnnotations, "images are not being resolved, this condition will always fail")) + } + } + } + + return allErrs +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/helpers.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/helpers.go new file mode 100644 index 0000000000000..91c1cfe9b169e --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/helpers.go @@ -0,0 +1,32 @@ +package imagepolicy + +import ( + imagepolicyapiv1 "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1" +) + +// RequestsResolution returns true if you should attempt to resolve image pull specs +func RequestsResolution(imageResolutionType imagepolicyapiv1.ImageResolutionType) bool { + switch imageResolutionType { + case imagepolicyapiv1.RequiredRewrite, imagepolicyapiv1.Required, imagepolicyapiv1.AttemptRewrite, imagepolicyapiv1.Attempt: + return true + } + return false +} + +// FailOnResolutionFailure returns true if you should fail when resolution fails +func FailOnResolutionFailure(imageResolutionType imagepolicyapiv1.ImageResolutionType) bool { + switch imageResolutionType { + case imagepolicyapiv1.RequiredRewrite, imagepolicyapiv1.Required: + return true + } + return false +} + +// RewriteImagePullSpec returns true if you should rewrite image pull specs when resolution succeeds +func RewriteImagePullSpec(imageResolutionType imagepolicyapiv1.ImageResolutionType) bool { + switch imageResolutionType { + case imagepolicyapiv1.RequiredRewrite, imagepolicyapiv1.AttemptRewrite: + return true + } + return false +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagepolicy.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagepolicy.go new file mode 100644 index 0000000000000..df97813f821b3 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagepolicy.go @@ -0,0 +1,518 @@ +package imagepolicy + +import ( + "context" + "fmt" + "io" + "io/ioutil" + "reflect" + "strings" + "time" + + lru "github.com/hashicorp/golang-lru" + + apierrs "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/apimachinery/pkg/util/diff" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/client-go/informers" + corev1listers "k8s.io/client-go/listers/core/v1" + "k8s.io/client-go/rest" + "k8s.io/klog/v2" + kapi "k8s.io/kubernetes/pkg/apis/core" + + imagev1 "github.com/openshift/api/image/v1" + imagepolicy "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1" + "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/validation" + "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators" + "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/rules" + imagev1client "github.com/openshift/client-go/image/clientset/versioned" + imagev1typedclient "github.com/openshift/client-go/image/clientset/versioned/typed/image/v1" + "github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig" + "github.com/openshift/library-go/pkg/image/imageutil" + "github.com/openshift/library-go/pkg/image/reference" +) + +func Register(plugins *admission.Plugins) { + plugins.Register(imagepolicy.PluginName, + func(input io.Reader) (admission.Interface, error) { + config := &imagepolicy.ImagePolicyConfig{} + if input != nil { + configContent, err := ioutil.ReadAll(input) + if err != nil { + return nil, err + } + scheme := runtime.NewScheme() + utilruntime.Must(imagepolicy.Install(scheme)) + codecs := serializer.NewCodecFactory(scheme) + err = runtime.DecodeInto(codecs.UniversalDecoder(imagepolicy.GroupVersion), configContent, config) + if err != nil { + return nil, err + } + } + + imagepolicy.SetDefaults_ImagePolicyConfig(config) + if errs := validation.Validate(config); len(errs) > 0 { + return nil, errs.ToAggregate() + } + klog.V(5).Infof("%s admission controller loaded with config: %#v", imagepolicy.PluginName, config) + return NewImagePolicyPlugin(config) + }) +} + +type ImagePolicyPlugin struct { + *admission.Handler + config *imagepolicy.ImagePolicyConfig + Client imagev1client.Interface + + accepter rules.Accepter + + integratedRegistryMatcher integratedRegistryMatcher + + NsLister corev1listers.NamespaceLister + resolver imageResolver + + imageMutators imagereferencemutators.ImageMutators +} + +var _ = initializer.WantsExternalKubeInformerFactory(&ImagePolicyPlugin{}) +var _ = admissionrestconfig.WantsRESTClientConfig(&ImagePolicyPlugin{}) +var _ = WantsInternalImageRegistry(&ImagePolicyPlugin{}) +var _ = WantsImageMutators(&ImagePolicyPlugin{}) +var _ = admission.ValidationInterface(&ImagePolicyPlugin{}) +var _ = admission.MutationInterface(&ImagePolicyPlugin{}) + +type integratedRegistryMatcher struct { + rules.RegistryMatcher +} + +// imageResolver abstracts identifying an image for a particular reference. +type imageResolver interface { + ResolveObjectReference(ref *kapi.ObjectReference, defaultNamespace string, forceResolveLocalNames bool) (*rules.ImagePolicyAttributes, error) +} + +// imageResolutionPolicy determines whether an image should be resolved +type imageResolutionPolicy interface { + // RequestsResolution returns true if you should attempt to resolve image pull specs + RequestsResolution(metav1.GroupResource) bool + // FailOnResolutionFailure returns true if you should fail when resolution fails + FailOnResolutionFailure(metav1.GroupResource) bool + // RewriteImagePullSpec returns true if you should rewrite image pull specs when resolution succeeds + RewriteImagePullSpec(attr *rules.ImagePolicyAttributes, isUpdate bool, gr metav1.GroupResource) bool +} + +// ImagePolicyPlugin returns an admission controller for pods that controls what images are allowed to run on the +// cluster. +func NewImagePolicyPlugin(parsed *imagepolicy.ImagePolicyConfig) (*ImagePolicyPlugin, error) { + m := integratedRegistryMatcher{ + RegistryMatcher: rules.NewRegistryMatcher(nil), + } + accepter, err := rules.NewExecutionRulesAccepter(parsed.ExecutionRules, m) + if err != nil { + return nil, err + } + + return &ImagePolicyPlugin{ + Handler: admission.NewHandler(admission.Create, admission.Update), + config: parsed, + + accepter: accepter, + + integratedRegistryMatcher: m, + }, nil +} + +func (a *ImagePolicyPlugin) SetInternalImageRegistry(internalImageRegistryName string) { + a.integratedRegistryMatcher.RegistryMatcher = rules.RegistryNameMatcher(internalImageRegistryName) +} + +func (a *ImagePolicyPlugin) SetImageMutators(imageMutators imagereferencemutators.ImageMutators) { + a.imageMutators = imageMutators +} + +func (a *ImagePolicyPlugin) SetRESTClientConfig(restClientConfig rest.Config) { + var err error + a.Client, err = imagev1client.NewForConfig(&restClientConfig) + if err != nil { + utilruntime.HandleError(err) + return + } +} + +func (a *ImagePolicyPlugin) SetExternalKubeInformerFactory(kubeInformers informers.SharedInformerFactory) { + a.NsLister = kubeInformers.Core().V1().Namespaces().Lister() +} + +// Validate ensures that all required interfaces have been provided, or returns an error. +func (a *ImagePolicyPlugin) ValidateInitialization() error { + if a.Client == nil { + return fmt.Errorf("%s needs an Openshift client", imagepolicy.PluginName) + } + if a.NsLister == nil { + return fmt.Errorf("%s needs a namespace lister", imagepolicy.PluginName) + } + if a.imageMutators == nil { + return fmt.Errorf("%s needs an image mutators", imagepolicy.PluginName) + } + imageResolver, err := newImageResolutionCache(a.Client.ImageV1(), a.integratedRegistryMatcher) + if err != nil { + return fmt.Errorf("unable to create image policy controller: %v", err) + } + a.resolver = imageResolver + return nil +} + +// Admit attempts to apply the image policy to the incoming resource. +func (a *ImagePolicyPlugin) Admit(ctx context.Context, attr admission.Attributes, _ admission.ObjectInterfaces) error { + return a.admit(ctx, attr, true) +} + +// Validate attempts to apply the image policy to the incoming resource. +func (a *ImagePolicyPlugin) Validate(ctx context.Context, attr admission.Attributes, _ admission.ObjectInterfaces) error { + return a.admit(ctx, attr, false) +} + +func (a *ImagePolicyPlugin) admit(ctx context.Context, attr admission.Attributes, mutationAllowed bool) error { + switch attr.GetOperation() { + case admission.Create, admission.Update: + if len(attr.GetSubresource()) > 0 { + return nil + } + // only create and update are tested, and only on core resources + // TODO: scan all resources + // TODO: Create a general equivalence map for admission - operation X on subresource Y is equivalent to reduced operation + default: + return nil + } + + policy := resolutionConfig{a.config} + + schemagr := attr.GetResource().GroupResource() + apigr := metav1.GroupResource{Resource: schemagr.Resource, Group: schemagr.Group} + + if !a.accepter.Covers(apigr) && !policy.Covers(apigr) { + return nil + } + + klog.V(5).Infof("running image policy admission for %s:%s/%s", attr.GetKind(), attr.GetNamespace(), attr.GetName()) + m, err := a.imageMutators.GetImageReferenceMutator(attr.GetObject(), attr.GetOldObject()) + if err != nil { + return apierrs.NewForbidden(schemagr, attr.GetName(), fmt.Errorf("unable to apply image policy against objects of type %T: %v", attr.GetObject(), err)) + } + + if !mutationAllowed { + m = &mutationPreventer{m} + } + + annotations, _ := a.imageMutators.GetAnnotationAccessor(attr.GetObject()) + + // load exclusion rules from the namespace cache + var excluded sets.String + if ns := attr.GetNamespace(); len(ns) > 0 { + if ns, err := a.NsLister.Get(ns); err == nil { + if value := ns.Annotations[imagepolicy.IgnorePolicyRulesAnnotation]; len(value) > 0 { + excluded = sets.NewString(strings.Split(value, ",")...) + } + } + } + + if err := accept(a.accepter, policy, a.resolver, m, annotations, attr, excluded); err != nil { + return err + } + + return nil +} + +type mutationPreventer struct { + m imagereferencemutators.ImageReferenceMutator +} + +func (m *mutationPreventer) Mutate(fn imagereferencemutators.ImageReferenceMutateFunc) field.ErrorList { + return m.m.Mutate(func(ref *kapi.ObjectReference) error { + original := ref.DeepCopy() + if err := fn(ref); err != nil { + return fmt.Errorf("error in image policy validation: %v", err) + } + if !reflect.DeepEqual(ref, original) { + klog.V(2).Infof("disallowed mutation in image policy validation: %s", diff.ObjectGoPrintSideBySide(original, ref)) + return fmt.Errorf("this image is prohibited by policy (changed after admission)") + } + return nil + }) +} + +type imageResolutionCache struct { + imageClient imagev1typedclient.ImageV1Interface + integrated rules.RegistryMatcher + expiration time.Duration + + cache *lru.Cache +} + +type imageCacheEntry struct { + expires time.Time + image *imagev1.Image +} + +// newImageResolutionCache creates a new resolver that caches frequently loaded images for one minute. +func newImageResolutionCache(imageClient imagev1typedclient.ImageV1Interface, integratedRegistry rules.RegistryMatcher) (*imageResolutionCache, error) { + imageCache, err := lru.New(128) + if err != nil { + return nil, err + } + return &imageResolutionCache{ + imageClient: imageClient, + integrated: integratedRegistry, + cache: imageCache, + expiration: time.Minute, + }, nil +} + +var now = time.Now + +// ResolveObjectReference converts a reference into an image API or returns an error. If the kind is not recognized +// this method will return an error to prevent references that may be images from being ignored. +func (c *imageResolutionCache) ResolveObjectReference(ref *kapi.ObjectReference, defaultNamespace string, forceResolveLocalNames bool) (*rules.ImagePolicyAttributes, error) { + switch ref.Kind { + case "ImageStreamTag": + ns := ref.Namespace + if len(ns) == 0 { + ns = defaultNamespace + } + name, tag, ok := imageutil.SplitImageStreamTag(ref.Name) + if !ok { + return &rules.ImagePolicyAttributes{IntegratedRegistry: true}, fmt.Errorf("references of kind ImageStreamTag must be of the form NAME:TAG") + } + return c.resolveImageStreamTag(ns, name, tag, false, false) + + case "ImageStreamImage": + ns := ref.Namespace + if len(ns) == 0 { + ns = defaultNamespace + } + name, id, ok := imageutil.SplitImageStreamImage(ref.Name) + if !ok { + return &rules.ImagePolicyAttributes{IntegratedRegistry: true}, fmt.Errorf("references of kind ImageStreamImage must be of the form NAME@DIGEST") + } + return c.resolveImageStreamImage(ns, name, id) + + case "DockerImage": + ref, err := reference.Parse(ref.Name) + if err != nil { + return nil, err + } + return c.resolveImageReference(ref, defaultNamespace, forceResolveLocalNames) + + default: + return nil, fmt.Errorf("image policy does not allow image references of kind %q", ref.Kind) + } +} + +// Resolve converts an image reference into a resolved image or returns an error. Only images located in the internal +// registry or those with a digest can be resolved - all other scenarios will return an error. +func (c *imageResolutionCache) resolveImageReference(ref reference.DockerImageReference, defaultNamespace string, forceResolveLocalNames bool) (*rules.ImagePolicyAttributes, error) { + // images by ID can be checked for policy + if len(ref.ID) > 0 { + now := now() + if value, ok := c.cache.Get(ref.ID); ok { + cached := value.(imageCacheEntry) + if now.Before(cached.expires) { + return &rules.ImagePolicyAttributes{Name: ref, Image: cached.image}, nil + } + } + image, err := c.imageClient.Images().Get(context.TODO(), ref.ID, metav1.GetOptions{}) + if err != nil { + return nil, err + } + c.cache.Add(ref.ID, imageCacheEntry{expires: now.Add(c.expiration), image: image}) + return &rules.ImagePolicyAttributes{Name: ref, Image: image, IntegratedRegistry: c.integrated.Matches(ref.Registry)}, nil + } + + // an image spec that points to the internal registry is by definition also an imagestreamtag reference, + // so attempt to resolve it as such. + fullReference := c.integrated.Matches(ref.Registry) + // if we've been explicitly told to treat this image spec as an imagestreamtag reference, or if it is a single + // segment value, attempt to resolve the value as an imagestream tag that will ultimately resolve to an image. + partialReference := forceResolveLocalNames || (len(ref.Registry) == 0 && len(ref.Namespace) == 0 && len(ref.Name) > 0) + + // if we can't treat it as an imagestreamtag reference, and since we don't have an imageid (checked earlier), + // we aren't going to be able to resolve this value to an image. + if !fullReference && !partialReference { + return nil, fmt.Errorf("(%s) could not be resolved to an exact image reference", ref.Exact()) + } + + tag := ref.Tag + if len(tag) == 0 { + tag = imagev1.DefaultImageTag + } + if len(ref.Namespace) == 0 || forceResolveLocalNames { + ref.Namespace = defaultNamespace + } + + return c.resolveImageStreamTag(ref.Namespace, ref.Name, tag, partialReference, forceResolveLocalNames) +} + +// resolveImageStreamTag loads an image stream tag and creates a fully qualified image stream image reference, +// or returns an error. +func (c *imageResolutionCache) resolveImageStreamTag(namespace, name, tag string, partial, forceResolveLocalNames bool) (*rules.ImagePolicyAttributes, error) { + attrs := &rules.ImagePolicyAttributes{IntegratedRegistry: true} + resolved, err := c.imageClient.ImageStreamTags(namespace).Get(context.TODO(), imageutil.JoinImageStreamTag(name, tag), metav1.GetOptions{}) + if err != nil { + if partial { + attrs.IntegratedRegistry = false + } + // if a stream exists, resolves names, and a registry is installed, change the reference to be a pointer + // to the internal registry. This prevents the lookup from going to the original location, which is consistent + // with the intent of resolving local names. + if isImageStreamTagNotFound(err) { + if stream, err := c.imageClient.ImageStreams(namespace).Get(context.TODO(), name, metav1.GetOptions{}); err == nil && (forceResolveLocalNames || stream.Spec.LookupPolicy.Local) && len(stream.Status.DockerImageRepository) > 0 { + if ref, err := reference.Parse(stream.Status.DockerImageRepository); err == nil { + klog.V(4).Infof("%s/%s:%s points to a local name resolving stream, but the tag does not exist", namespace, name, tag) + ref.Tag = tag + attrs.Name = ref + attrs.LocalRewrite = true + return attrs, nil + } + } + } + return attrs, err + } + if partial { + if !forceResolveLocalNames && !resolved.LookupPolicy.Local { + attrs.IntegratedRegistry = false + return attrs, fmt.Errorf("ImageStreamTag does not allow local references and the resource did not request image stream resolution") + } + attrs.LocalRewrite = true + } + ref, err := reference.Parse(resolved.Image.DockerImageReference) + if err != nil { + return attrs, fmt.Errorf("image reference %s could not be parsed: %v", resolved.Image.DockerImageReference, err) + } + ref.Tag = "" + ref.ID = resolved.Image.Name + + now := now() + c.cache.Add(resolved.Image.Name, imageCacheEntry{expires: now.Add(c.expiration), image: &resolved.Image}) + + attrs.Name = ref + attrs.Image = &resolved.Image + return attrs, nil +} + +// resolveImageStreamImage loads an image stream image if it exists, or returns an error. +func (c *imageResolutionCache) resolveImageStreamImage(namespace, name, id string) (*rules.ImagePolicyAttributes, error) { + attrs := &rules.ImagePolicyAttributes{IntegratedRegistry: true} + resolved, err := c.imageClient.ImageStreamImages(namespace).Get(context.TODO(), imageutil.JoinImageStreamImage(name, id), metav1.GetOptions{}) + if err != nil { + return attrs, err + } + ref, err := reference.Parse(resolved.Image.DockerImageReference) + if err != nil { + return attrs, fmt.Errorf("ImageStreamTag could not be resolved: %v", err) + } + now := now() + c.cache.Add(resolved.Image.Name, imageCacheEntry{expires: now.Add(c.expiration), image: &resolved.Image}) + + attrs.Name = ref + attrs.Image = &resolved.Image + return attrs, nil +} + +// isImageStreamTagNotFound returns true iff the tag is missing but the image stream +// exists. +func isImageStreamTagNotFound(err error) bool { + if err == nil || !apierrs.IsNotFound(err) { + return false + } + status, ok := err.(apierrs.APIStatus) + if !ok { + return false + } + details := status.Status().Details + if details == nil { + return false + } + return details.Kind == "imagestreamtags" && details.Group == "image.openshift.io" +} + +// resolutionConfig translates an ImagePolicyConfig into imageResolutionPolicy +type resolutionConfig struct { + config *imagepolicy.ImagePolicyConfig +} + +// Covers returns true if the resolver specifically should touch this resource. +func (config resolutionConfig) Covers(gr metav1.GroupResource) bool { + for _, rule := range config.config.ResolutionRules { + if resolutionRuleCoversResource(rule.TargetResource, gr) { + return true + } + } + return false +} + +// RequestsResolution is true if the policy demands it or if any rule covers it. +func (config resolutionConfig) RequestsResolution(gr metav1.GroupResource) bool { + if RequestsResolution(config.config.ResolveImages) { + return true + } + for _, rule := range config.config.ResolutionRules { + if resolutionRuleCoversResource(rule.TargetResource, gr) { + return true + } + } + return false +} + +// FailOnResolutionFailure does not depend on the nested rules. +func (config resolutionConfig) FailOnResolutionFailure(gr metav1.GroupResource) bool { + return FailOnResolutionFailure(config.config.ResolveImages) +} + +var skipImageRewriteOnUpdate = map[metav1.GroupResource]struct{}{ + // Job template specs are immutable, they cannot be updated. + {Group: "batch", Resource: "jobs"}: {}, + // Build specs are immutable, they cannot be updated. + {Group: "build.openshift.io", Resource: "builds"}: {}, + // TODO: remove when statefulsets allow spec.template updates in 3.7 + {Group: "apps", Resource: "statefulsets"}: {}, +} + +// RewriteImagePullSpec applies to implicit rewrite attributes and local resources as well as if the policy requires it. +// If a local name check is requested and a rule matches true is returned. The policy default resolution is only respected +// if a resource isn't covered by a rule - if pods have a rule with DoNotAttempt and the global policy is RequiredRewrite, +// no pods will be rewritten. +func (config resolutionConfig) RewriteImagePullSpec(attr *rules.ImagePolicyAttributes, isUpdate bool, gr metav1.GroupResource) bool { + if isUpdate { + if _, ok := skipImageRewriteOnUpdate[gr]; ok { + return false + } + } + hasMatchingRule := false + for _, rule := range config.config.ResolutionRules { + if !resolutionRuleCoversResource(rule.TargetResource, gr) { + continue + } + if rule.LocalNames && attr.LocalRewrite { + return true + } + if RewriteImagePullSpec(rule.Policy) { + return true + } + hasMatchingRule = true + } + if hasMatchingRule { + return false + } + return RewriteImagePullSpec(config.config.ResolveImages) +} + +// resolutionRuleCoversResource implements wildcard checking on Resource names +func resolutionRuleCoversResource(rule metav1.GroupResource, gr metav1.GroupResource) bool { + return rule.Group == gr.Group && (rule.Resource == gr.Resource || rule.Resource == "*") +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators/interfaces.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators/interfaces.go new file mode 100644 index 0000000000000..47f6f9cfb1de5 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators/interfaces.go @@ -0,0 +1,49 @@ +package imagereferencemutators + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/validation/field" + kapi "k8s.io/kubernetes/pkg/apis/core" +) + +type ImageMutators interface { + GetImageReferenceMutator(obj, old runtime.Object) (ImageReferenceMutator, error) + GetAnnotationAccessor(obj runtime.Object) (AnnotationAccessor, bool) +} + +// ImageReferenceMutateFunc is passed a reference representing an image, and may alter +// the Name, Kind, and Namespace fields of the reference. If an error is returned the +// object may still be mutated under the covers. +type ImageReferenceMutateFunc func(ref *kapi.ObjectReference) error + +type ImageReferenceMutator interface { + // Mutate invokes fn on every image reference in the object. If fn returns an error, + // a field.Error is added to the list to be returned. Mutate does not terminate early + // if errors are detected. + Mutate(fn ImageReferenceMutateFunc) field.ErrorList +} + +type AnnotationAccessor interface { + // Annotations returns a map representing annotations. Not mutable. + Annotations() map[string]string + // SetAnnotations sets representing annotations onto the object. + SetAnnotations(map[string]string) + // TemplateAnnotations returns a map representing annotations on a nested template in the object. Not mutable. + // If no template is present bool will be false. + TemplateAnnotations() (map[string]string, bool) + // SetTemplateAnnotations sets annotations on a nested template in the object. + // If no template is present bool will be false. + SetTemplateAnnotations(map[string]string) bool +} + +type ContainerMutator interface { + GetName() string + GetImage() string + SetImage(image string) +} + +type PodSpecReferenceMutator interface { + GetContainerByIndex(init bool, i int) (ContainerMutator, bool) + GetContainerByName(name string) (ContainerMutator, bool) + GetPath() *field.Path +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators/meta.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators/meta.go new file mode 100644 index 0000000000000..1b606e5609c83 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators/meta.go @@ -0,0 +1,105 @@ +package imagereferencemutators + +import ( + "fmt" + + kapiv1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + kapi "k8s.io/kubernetes/pkg/apis/core" + + imagepolicyv1 "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1" +) + +type KubeImageMutators struct{} + +var errNoImageMutator = fmt.Errorf("No list of images available for this object") + +func ResolveAllNames(annotations AnnotationAccessor) bool { + if annotations == nil { + return false + } + + a, ok := annotations.TemplateAnnotations() + if ok && a[imagepolicyv1.ResolveNamesAnnotation] == "*" { + return true + } + + a = annotations.Annotations() + if a != nil && a[imagepolicyv1.ResolveNamesAnnotation] == "*" { + return true + } + + return false +} + +// GetImageReferenceMutator returns a mutator for the provided object, or an error if no +// such mutator is defined. Only references that are different between obj and old will +// be returned unless old is nil. +func (m KubeImageMutators) GetImageReferenceMutator(obj, old runtime.Object) (ImageReferenceMutator, error) { + oldAnnotations, _ := m.GetAnnotationAccessor(old) + annotations, _ := m.GetAnnotationAccessor(obj) + resolveAnnotationChanged := ResolveAllNames(annotations) != ResolveAllNames(oldAnnotations) + + if spec, path, err := GetPodSpec(obj); err == nil { + var oldSpec *kapi.PodSpec + if old != nil { + oldSpec, _, err = GetPodSpec(old) + if err != nil { + return nil, fmt.Errorf("old and new pod spec objects were not of the same type %T != %T: %v", obj, old, err) + } + } + return NewPodSpecMutator(spec, oldSpec, path, resolveAnnotationChanged), nil + } + if spec, path, err := GetPodSpecV1(obj); err == nil { + var oldSpec *kapiv1.PodSpec + if old != nil { + oldSpec, _, err = GetPodSpecV1(old) + if err != nil { + return nil, fmt.Errorf("old and new pod spec objects were not of the same type %T != %T: %v", obj, old, err) + } + } + return NewPodSpecV1Mutator(spec, oldSpec, path, resolveAnnotationChanged), nil + } + return nil, errNoImageMutator +} + +type annotationsAccessor struct { + object metav1.Object + template metav1.Object +} + +func (a annotationsAccessor) Annotations() map[string]string { + return a.object.GetAnnotations() +} + +func (a annotationsAccessor) TemplateAnnotations() (map[string]string, bool) { + if a.template == nil { + return nil, false + } + return a.template.GetAnnotations(), true +} + +func (a annotationsAccessor) SetAnnotations(annotations map[string]string) { + a.object.SetAnnotations(annotations) +} + +func (a annotationsAccessor) SetTemplateAnnotations(annotations map[string]string) bool { + if a.template == nil { + return false + } + a.template.SetAnnotations(annotations) + return true +} + +// GetAnnotationAccessor returns an accessor for the provided object or false if the object +// does not support accessing annotations. +func (KubeImageMutators) GetAnnotationAccessor(obj runtime.Object) (AnnotationAccessor, bool) { + switch t := obj.(type) { + case metav1.Object: + templateObject, _ := GetTemplateMetaObject(obj) + return annotationsAccessor{object: t, template: templateObject}, true + default: + return nil, false + } +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators/pods.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators/pods.go new file mode 100644 index 0000000000000..dd4c1eafd38e5 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators/pods.go @@ -0,0 +1,448 @@ +package imagereferencemutators + +import ( + "fmt" + + kappsv1 "k8s.io/api/apps/v1" + kappsv1beta1 "k8s.io/api/apps/v1beta1" + kappsv1beta2 "k8s.io/api/apps/v1beta2" + batchv1 "k8s.io/api/batch/v1" + batchv1beta1 "k8s.io/api/batch/v1beta1" + batchv2alpha1 "k8s.io/api/batch/v2alpha1" + corev1 "k8s.io/api/core/v1" + extensionsv1beta1 "k8s.io/api/extensions/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/kubernetes/pkg/apis/apps" + "k8s.io/kubernetes/pkg/apis/batch" + "k8s.io/kubernetes/pkg/apis/core" +) + +var errNoPodSpec = fmt.Errorf("No PodSpec available for this object") + +// GetPodSpec returns a mutable pod spec out of the provided object, including a field path +// to the field in the object, or an error if the object does not contain a pod spec. +// This only returns internal objects. +func GetPodSpec(obj runtime.Object) (*core.PodSpec, *field.Path, error) { + switch r := obj.(type) { + case *core.Pod: + return &r.Spec, field.NewPath("spec"), nil + case *core.PodTemplate: + return &r.Template.Spec, field.NewPath("template", "spec"), nil + case *core.ReplicationController: + if r.Spec.Template != nil { + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + } + case *apps.DaemonSet: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + case *apps.Deployment: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + case *apps.ReplicaSet: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + case *batch.Job: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + case *batch.CronJob: + return &r.Spec.JobTemplate.Spec.Template.Spec, field.NewPath("spec", "jobTemplate", "spec", "template", "spec"), nil + case *batch.JobTemplate: + return &r.Template.Spec.Template.Spec, field.NewPath("template", "spec", "template", "spec"), nil + case *apps.StatefulSet: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + } + return nil, nil, errNoPodSpec +} + +// GetPodSpecV1 returns a mutable pod spec out of the provided object, including a field path +// to the field in the object, or an error if the object does not contain a pod spec. +// This only returns pod specs for v1 compatible objects. +func GetPodSpecV1(obj runtime.Object) (*corev1.PodSpec, *field.Path, error) { + switch r := obj.(type) { + + case *corev1.Pod: + return &r.Spec, field.NewPath("spec"), nil + + case *corev1.PodTemplate: + return &r.Template.Spec, field.NewPath("template", "spec"), nil + + case *corev1.ReplicationController: + if r.Spec.Template != nil { + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + } + + case *extensionsv1beta1.DaemonSet: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + case *kappsv1.DaemonSet: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + case *kappsv1beta2.DaemonSet: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + + case *extensionsv1beta1.Deployment: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + case *kappsv1.Deployment: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + case *kappsv1beta1.Deployment: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + case *kappsv1beta2.Deployment: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + + case *extensionsv1beta1.ReplicaSet: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + case *kappsv1.ReplicaSet: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + case *kappsv1beta2.ReplicaSet: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + + case *batchv1.Job: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + + case *batchv2alpha1.CronJob: + return &r.Spec.JobTemplate.Spec.Template.Spec, field.NewPath("spec", "jobTemplate", "spec", "template", "spec"), nil + case *batchv1beta1.CronJob: + return &r.Spec.JobTemplate.Spec.Template.Spec, field.NewPath("spec", "jobTemplate", "spec", "template", "spec"), nil + + case *batchv2alpha1.JobTemplate: + return &r.Template.Spec.Template.Spec, field.NewPath("template", "spec", "template", "spec"), nil + case *batchv1beta1.JobTemplate: + return &r.Template.Spec.Template.Spec, field.NewPath("template", "spec", "template", "spec"), nil + + case *kappsv1.StatefulSet: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + case *kappsv1beta1.StatefulSet: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + case *kappsv1beta2.StatefulSet: + return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil + } + return nil, nil, errNoPodSpec +} + +// GetTemplateMetaObject returns a mutable metav1.Object interface for the template +// the object contains, or false if no such object is available. +func GetTemplateMetaObject(obj runtime.Object) (metav1.Object, bool) { + switch r := obj.(type) { + + case *corev1.PodTemplate: + return &r.Template.ObjectMeta, true + + case *corev1.ReplicationController: + if r.Spec.Template != nil { + return &r.Spec.Template.ObjectMeta, true + } + + case *extensionsv1beta1.DaemonSet: + return &r.Spec.Template.ObjectMeta, true + case *kappsv1.DaemonSet: + return &r.Spec.Template.ObjectMeta, true + case *kappsv1beta2.DaemonSet: + return &r.Spec.Template.ObjectMeta, true + + case *extensionsv1beta1.Deployment: + return &r.Spec.Template.ObjectMeta, true + case *kappsv1.Deployment: + return &r.Spec.Template.ObjectMeta, true + case *kappsv1beta1.Deployment: + return &r.Spec.Template.ObjectMeta, true + case *kappsv1beta2.Deployment: + return &r.Spec.Template.ObjectMeta, true + + case *extensionsv1beta1.ReplicaSet: + return &r.Spec.Template.ObjectMeta, true + case *kappsv1.ReplicaSet: + return &r.Spec.Template.ObjectMeta, true + case *kappsv1beta2.ReplicaSet: + return &r.Spec.Template.ObjectMeta, true + + case *batchv1.Job: + return &r.Spec.Template.ObjectMeta, true + + case *batchv2alpha1.CronJob: + return &r.Spec.JobTemplate.Spec.Template.ObjectMeta, true + case *batchv1beta1.CronJob: + return &r.Spec.JobTemplate.Spec.Template.ObjectMeta, true + + case *batchv2alpha1.JobTemplate: + return &r.Template.Spec.Template.ObjectMeta, true + case *batchv1beta1.JobTemplate: + return &r.Template.Spec.Template.ObjectMeta, true + + case *kappsv1.StatefulSet: + return &r.Spec.Template.ObjectMeta, true + case *kappsv1beta1.StatefulSet: + return &r.Spec.Template.ObjectMeta, true + case *kappsv1beta2.StatefulSet: + return &r.Spec.Template.ObjectMeta, true + + case *core.PodTemplate: + return &r.Template.ObjectMeta, true + case *core.ReplicationController: + if r.Spec.Template != nil { + return &r.Spec.Template.ObjectMeta, true + } + case *apps.DaemonSet: + return &r.Spec.Template.ObjectMeta, true + case *apps.Deployment: + return &r.Spec.Template.ObjectMeta, true + case *apps.ReplicaSet: + return &r.Spec.Template.ObjectMeta, true + case *batch.Job: + return &r.Spec.Template.ObjectMeta, true + case *batch.CronJob: + return &r.Spec.JobTemplate.Spec.Template.ObjectMeta, true + case *batch.JobTemplate: + return &r.Template.Spec.Template.ObjectMeta, true + case *apps.StatefulSet: + return &r.Spec.Template.ObjectMeta, true + } + return nil, false +} + +type containerMutator struct { + *core.Container +} + +func (m containerMutator) GetName() string { return m.Name } +func (m containerMutator) GetImage() string { return m.Image } +func (m containerMutator) SetImage(image string) { m.Image = image } + +type containerV1Mutator struct { + *corev1.Container +} + +func (m containerV1Mutator) GetName() string { return m.Name } +func (m containerV1Mutator) GetImage() string { return m.Image } +func (m containerV1Mutator) SetImage(image string) { m.Image = image } + +// podSpecMutator implements the mutation interface over objects with a pod spec. +type podSpecMutator struct { + spec *core.PodSpec + oldSpec *core.PodSpec + path *field.Path + resolveAnnotationChanged bool +} + +func NewPodSpecMutator(spec *core.PodSpec, oldSpec *core.PodSpec, path *field.Path, resolveAnnotationChanged bool) *podSpecMutator { + return &podSpecMutator{ + spec: spec, + oldSpec: oldSpec, + path: path, + resolveAnnotationChanged: resolveAnnotationChanged, + } +} + +func (m *podSpecMutator) GetPath() *field.Path { + return m.path +} + +func hasIdenticalPodSpecImage(spec *core.PodSpec, containerName, image string) bool { + if spec == nil { + return false + } + for i := range spec.InitContainers { + if spec.InitContainers[i].Name == containerName { + return spec.InitContainers[i].Image == image + } + } + for i := range spec.Containers { + if spec.Containers[i].Name == containerName { + return spec.Containers[i].Image == image + } + } + return false +} + +// Mutate applies fn to all containers and init containers. If fn changes the Kind to +// any value other than "DockerImage", an error is set on that field. +func (m *podSpecMutator) Mutate(fn ImageReferenceMutateFunc) field.ErrorList { + var errs field.ErrorList + for i := range m.spec.InitContainers { + container := &m.spec.InitContainers[i] + if !m.resolveAnnotationChanged && hasIdenticalPodSpecImage(m.oldSpec, container.Name, container.Image) { + continue + } + ref := core.ObjectReference{Kind: "DockerImage", Name: container.Image} + if err := fn(&ref); err != nil { + errs = append(errs, FieldErrorOrInternal(err, m.path.Child("initContainers").Index(i).Child("image"))) + continue + } + if ref.Kind != "DockerImage" { + errs = append(errs, FieldErrorOrInternal(fmt.Errorf("pod specs may only contain references to docker images, not %q", ref.Kind), m.path.Child("initContainers").Index(i).Child("image"))) + continue + } + container.Image = ref.Name + } + for i := range m.spec.Containers { + container := &m.spec.Containers[i] + if !m.resolveAnnotationChanged && hasIdenticalPodSpecImage(m.oldSpec, container.Name, container.Image) { + continue + } + ref := core.ObjectReference{Kind: "DockerImage", Name: container.Image} + if err := fn(&ref); err != nil { + errs = append(errs, FieldErrorOrInternal(err, m.path.Child("containers").Index(i).Child("image"))) + continue + } + if ref.Kind != "DockerImage" { + errs = append(errs, FieldErrorOrInternal(fmt.Errorf("pod specs may only contain references to docker images, not %q", ref.Kind), m.path.Child("containers").Index(i).Child("image"))) + continue + } + container.Image = ref.Name + } + return errs +} + +func (m *podSpecMutator) GetContainerByName(name string) (ContainerMutator, bool) { + spec := m.spec + for i := range spec.InitContainers { + if name != spec.InitContainers[i].Name { + continue + } + return containerMutator{&spec.InitContainers[i]}, true + } + for i := range spec.Containers { + if name != spec.Containers[i].Name { + continue + } + return containerMutator{&spec.Containers[i]}, true + } + return nil, false +} + +func (m *podSpecMutator) GetContainerByIndex(init bool, i int) (ContainerMutator, bool) { + var container *core.Container + spec := m.spec + if init { + if i < 0 || i >= len(spec.InitContainers) { + return nil, false + } + container = &spec.InitContainers[i] + } else { + if i < 0 || i >= len(spec.Containers) { + return nil, false + } + container = &spec.Containers[i] + } + return containerMutator{container}, true +} + +func NewPodSpecV1Mutator(spec *corev1.PodSpec, oldSpec *corev1.PodSpec, path *field.Path, resolveAnnotationChanged bool) *podSpecV1Mutator { + return &podSpecV1Mutator{ + spec: spec, + oldSpec: oldSpec, + path: path, + resolveAnnotationChanged: resolveAnnotationChanged, + } +} + +// podSpecV1Mutator implements the mutation interface over objects with a pod spec. +type podSpecV1Mutator struct { + spec *corev1.PodSpec + oldSpec *corev1.PodSpec + path *field.Path + resolveAnnotationChanged bool +} + +func (m *podSpecV1Mutator) GetPath() *field.Path { + return m.path +} + +func hasIdenticalPodSpecV1Image(spec *corev1.PodSpec, containerName, image string) bool { + if spec == nil { + return false + } + for i := range spec.InitContainers { + if spec.InitContainers[i].Name == containerName { + return spec.InitContainers[i].Image == image + } + } + for i := range spec.Containers { + if spec.Containers[i].Name == containerName { + return spec.Containers[i].Image == image + } + } + return false +} + +// Mutate applies fn to all containers and init containers. If fn changes the Kind to +// any value other than "DockerImage", an error is set on that field. +func (m *podSpecV1Mutator) Mutate(fn ImageReferenceMutateFunc) field.ErrorList { + var errs field.ErrorList + for i := range m.spec.InitContainers { + container := &m.spec.InitContainers[i] + if !m.resolveAnnotationChanged && hasIdenticalPodSpecV1Image(m.oldSpec, container.Name, container.Image) { + continue + } + ref := core.ObjectReference{Kind: "DockerImage", Name: container.Image} + if err := fn(&ref); err != nil { + errs = append(errs, FieldErrorOrInternal(err, m.path.Child("initContainers").Index(i).Child("image"))) + continue + } + if ref.Kind != "DockerImage" { + errs = append(errs, FieldErrorOrInternal(fmt.Errorf("pod specs may only contain references to docker images, not %q", ref.Kind), m.path.Child("initContainers").Index(i).Child("image"))) + continue + } + container.Image = ref.Name + } + for i := range m.spec.Containers { + container := &m.spec.Containers[i] + if !m.resolveAnnotationChanged && hasIdenticalPodSpecV1Image(m.oldSpec, container.Name, container.Image) { + continue + } + ref := core.ObjectReference{Kind: "DockerImage", Name: container.Image} + if err := fn(&ref); err != nil { + errs = append(errs, FieldErrorOrInternal(err, m.path.Child("containers").Index(i).Child("image"))) + continue + } + if ref.Kind != "DockerImage" { + errs = append(errs, FieldErrorOrInternal(fmt.Errorf("pod specs may only contain references to docker images, not %q", ref.Kind), m.path.Child("containers").Index(i).Child("image"))) + continue + } + container.Image = ref.Name + } + return errs +} + +func (m *podSpecV1Mutator) GetContainerByName(name string) (ContainerMutator, bool) { + spec := m.spec + for i := range spec.InitContainers { + if name != spec.InitContainers[i].Name { + continue + } + return containerV1Mutator{&spec.InitContainers[i]}, true + } + for i := range spec.Containers { + if name != spec.Containers[i].Name { + continue + } + return containerV1Mutator{&spec.Containers[i]}, true + } + return nil, false +} + +func (m *podSpecV1Mutator) GetContainerByIndex(init bool, i int) (ContainerMutator, bool) { + var container *corev1.Container + spec := m.spec + if init { + if i < 0 || i >= len(spec.InitContainers) { + return nil, false + } + container = &spec.InitContainers[i] + } else { + if i < 0 || i >= len(spec.Containers) { + return nil, false + } + container = &spec.Containers[i] + } + return containerV1Mutator{container}, true +} + +func FieldErrorOrInternal(err error, path *field.Path) *field.Error { + if ferr, ok := err.(*field.Error); ok { + if len(ferr.Field) == 0 { + ferr.Field = path.String() + } + return ferr + } + if errors.IsNotFound(err) { + return field.NotFound(path, err) + } + return field.InternalError(path, err) +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/intializers.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/intializers.go new file mode 100644 index 0000000000000..a700371c8b323 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/intializers.go @@ -0,0 +1,40 @@ +package imagepolicy + +import ( + "k8s.io/apiserver/pkg/admission" + + "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators" +) + +func NewInitializer(imageMutators imagereferencemutators.ImageMutators, internalImageRegistry string) admission.PluginInitializer { + return &localInitializer{ + imageMutators: imageMutators, + internalImageRegistry: internalImageRegistry, + } +} + +type WantsImageMutators interface { + SetImageMutators(imagereferencemutators.ImageMutators) + admission.InitializationValidator +} + +type WantsInternalImageRegistry interface { + SetInternalImageRegistry(string) + admission.InitializationValidator +} + +type localInitializer struct { + imageMutators imagereferencemutators.ImageMutators + internalImageRegistry string +} + +// Initialize will check the initialization interfaces implemented by each plugin +// and provide the appropriate initialization data +func (i *localInitializer) Initialize(plugin admission.Interface) { + if wants, ok := plugin.(WantsImageMutators); ok { + wants.SetImageMutators(i.imageMutators) + } + if wants, ok := plugin.(WantsInternalImageRegistry); ok { + wants.SetInternalImageRegistry(i.internalImageRegistry) + } +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/rules/accept.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/rules/accept.go new file mode 100644 index 0000000000000..f117cb73ae36d --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/rules/accept.go @@ -0,0 +1,119 @@ +package rules + +import ( + "k8s.io/klog/v2" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + imagepolicy "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1" +) + +type Accepter interface { + Covers(metav1.GroupResource) bool + + Accepts(*ImagePolicyAttributes) bool +} + +// mappedAccepter implements the Accepter interface for a map of group resources and accepters +type mappedAccepter map[metav1.GroupResource]Accepter + +func (a mappedAccepter) Covers(gr metav1.GroupResource) bool { + _, ok := a[gr] + return ok +} + +// Accepts returns true if no Accepter is registered for the group resource in attributes, +// or if the registered Accepter also returns true. +func (a mappedAccepter) Accepts(attr *ImagePolicyAttributes) bool { + accepter, ok := a[attr.Resource] + if !ok { + return true + } + return accepter.Accepts(attr) +} + +type executionAccepter struct { + rules []imagepolicy.ImageExecutionPolicyRule + covers metav1.GroupResource + defaultReject bool + + integratedRegistryMatcher RegistryMatcher +} + +// NewExecutionRuleseAccepter creates an Accepter from the provided rules. +func NewExecutionRulesAccepter(rules []imagepolicy.ImageExecutionPolicyRule, integratedRegistryMatcher RegistryMatcher) (Accepter, error) { + mapped := make(mappedAccepter) + + for _, rule := range rules { + over, selectors, err := imageConditionInfo(&rule.ImageCondition) + if err != nil { + return nil, err + } + rule.ImageCondition.MatchImageLabelSelectors = selectors + for gr := range over { + a, ok := mapped[gr] + if !ok { + a = &executionAccepter{ + covers: gr, + integratedRegistryMatcher: integratedRegistryMatcher, + } + mapped[gr] = a + } + byResource := a.(*executionAccepter) + byResource.rules = append(byResource.rules, rule) + } + } + + for _, a := range mapped { + byResource := a.(*executionAccepter) + if len(byResource.rules) > 0 { + // if all rules are reject, the default behavior is allow + allReject := true + for _, rule := range byResource.rules { + if !rule.Reject { + allReject = false + break + } + } + byResource.defaultReject = !allReject + } + } + + return mapped, nil +} + +func (r *executionAccepter) Covers(gr metav1.GroupResource) bool { + return r.covers == gr +} + +func (r *executionAccepter) Accepts(attrs *ImagePolicyAttributes) bool { + if attrs.Resource != r.covers { + return true + } + + anyMatched := false + for _, rule := range r.rules { + klog.V(5).Infof("image policy checking rule %q", rule.Name) + if attrs.ExcludedRules.Has(rule.Name) && !rule.IgnoreNamespaceOverride { + klog.V(5).Infof("skipping because rule is excluded by namespace annotations\n") + continue + } + + // if we don't have a resolved image and we're supposed to skip the rule if that happens, + // continue here. Otherwise, the reject option is impossible to reason about. + if attrs.Image == nil && rule.SkipOnResolutionFailure { + klog.V(5).Infof("skipping because image is not resolved and skip on failure is true\n") + continue + } + + matches := matchImageCondition(&rule.ImageCondition, r.integratedRegistryMatcher, attrs) + klog.V(5).Infof("Rule %q(reject=%t) applies to image %v: %t", rule.Name, rule.Reject, attrs.Name, matches) + if matches { + if rule.Reject { + return false + } + anyMatched = true + } + } + return anyMatched || !r.defaultReject +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/rules/rules.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/rules/rules.go new file mode 100644 index 0000000000000..78735e4276e89 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/rules/rules.go @@ -0,0 +1,178 @@ +package rules + +import ( + "github.com/openshift/library-go/pkg/image/imageutil" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/klog/v2" + + "github.com/openshift/api/image/docker10" + imagev1 "github.com/openshift/api/image/v1" + imagepolicy "github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1" + "github.com/openshift/library-go/pkg/image/reference" +) + +type ImagePolicyAttributes struct { + Resource metav1.GroupResource + Name reference.DockerImageReference + Image *imagev1.Image + ExcludedRules sets.String + IntegratedRegistry bool + LocalRewrite bool +} + +type RegistryMatcher interface { + Matches(name string) bool +} + +type RegistryNameMatcher string + +func (m RegistryNameMatcher) Matches(name string) bool { + if len(m) == 0 { + return false + } + return string(m) == name +} + +type nameSet []string + +func (m nameSet) Matches(name string) bool { + for _, s := range m { + if s == name { + return true + } + } + return false +} + +func NewRegistryMatcher(names []string) RegistryMatcher { + return nameSet(names) +} + +type resourceSet map[metav1.GroupResource]struct{} + +func imageConditionInfo(rule *imagepolicy.ImageCondition) (covers resourceSet, selectors []labels.Selector, err error) { + covers = make(resourceSet) + for _, gr := range rule.OnResources { + covers[gr] = struct{}{} + } + + for i := range rule.MatchImageLabels { + s, err := metav1.LabelSelectorAsSelector(&rule.MatchImageLabels[i]) + if err != nil { + return nil, nil, err + } + selectors = append(selectors, s) + } + + return covers, selectors, nil +} + +func requiresImage(rule *imagepolicy.ImageCondition) bool { + switch { + case len(rule.MatchImageLabels) > 0, + len(rule.MatchImageAnnotations) > 0, + len(rule.MatchDockerImageLabels) > 0: + return true + } + + return false +} + +// matchImageCondition determines the result of an ImageCondition or the provided arguments. +func matchImageCondition(condition *imagepolicy.ImageCondition, integrated RegistryMatcher, attrs *ImagePolicyAttributes) bool { + result := matchImageConditionValues(condition, integrated, attrs) + klog.V(5).Infof("image matches conditions for %q: %t(invert=%t)", condition.Name, result, condition.InvertMatch) + if condition.InvertMatch { + result = !result + } + return result +} + +// matchImageConditionValues handles only the match rules on the condition, returning true if the conditions match. +// Use matchImageCondition to apply invertMatch rules. +func matchImageConditionValues(rule *imagepolicy.ImageCondition, integrated RegistryMatcher, attrs *ImagePolicyAttributes) bool { + if rule.MatchIntegratedRegistry && !(attrs.IntegratedRegistry || integrated.Matches(attrs.Name.Registry)) { + klog.V(5).Infof("image registry %v does not match integrated registry", attrs.Name.Registry) + return false + } + if len(rule.MatchRegistries) > 0 && !hasAnyMatch(attrs.Name.Registry, rule.MatchRegistries) { + klog.V(5).Infof("image registry %v does not match registries from rule: %#v", attrs.Name.Registry, rule.MatchRegistries) + return false + } + + // all subsequent calls require the image + image := attrs.Image + if image == nil { + if rule.SkipOnResolutionFailure { + klog.V(5).Infof("rule does not match because image did not resolve and SkipOnResolutionFailure is true") + // Likely we will never get here (see: https://github.com/openshift/origin/blob/4f709b48f8e52e8c6012bd8b91945f022a437a6a/pkg/image/admission/imagepolicy/rules/accept.go#L99-L103) + // but if we do, treat the condition as not matching since we are supposed to skip this rule on resolution failure. + return false + } + + // if we don't require an image to evaluate our rules, then there's no reason to continue from here + // we already know that we passed our filter + r := requiresImage(rule) + klog.V(5).Infof("image did not resolve, rule requires image metadata for matching: %t", r) + return !r + } + + if len(rule.MatchDockerImageLabels) > 0 { + if err := imageutil.ImageWithMetadata(image); err != nil { + if rule.SkipOnResolutionFailure { + return false + } else { + return true + } + } + dockerImageMetadata, hasMetadata := image.DockerImageMetadata.Object.(*docker10.DockerImage) + if !hasMetadata { + klog.V(5).Infof("image has no labels to match rule labels") + return false + } + + if !matchKeyValue(dockerImageMetadata.Config.Labels, rule.MatchDockerImageLabels) { + klog.V(5).Infof("image labels %#v do not match rule labels %#v", dockerImageMetadata.Config.Labels, rule.MatchDockerImageLabels) + return false + } + } + if !matchKeyValue(image.Annotations, rule.MatchImageAnnotations) { + klog.V(5).Infof("image annotations %#v do not match rule annotations %#v", image.Annotations, rule.MatchImageAnnotations) + return false + } + for _, s := range rule.MatchImageLabelSelectors { + if !s.Matches(labels.Set(image.Labels)) { + klog.V(5).Infof("image label selectors %#v do not match rule label selectors %#v", image.Labels, s) + return false + } + } + + return true +} + +func matchKeyValue(all map[string]string, conditions []imagepolicy.ValueCondition) bool { + for _, condition := range conditions { + switch { + case condition.Set: + if _, ok := all[condition.Key]; !ok { + return false + } + default: + if all[condition.Key] != condition.Value { + return false + } + } + } + return true +} + +func hasAnyMatch(name string, all []string) bool { + for _, s := range all { + if name == s { + return true + } + } + return false +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/accessor.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/accessor.go new file mode 100644 index 0000000000000..02c2fabf65472 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/accessor.go @@ -0,0 +1,171 @@ +package clusterresourcequota + +import ( + "context" + "time" + + lru "github.com/hashicorp/golang-lru" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" + kapierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + utilwait "k8s.io/apimachinery/pkg/util/wait" + etcd "k8s.io/apiserver/pkg/storage/etcd3" + corev1listers "k8s.io/client-go/listers/core/v1" + utilquota "k8s.io/kubernetes/pkg/quota/v1" + + quotav1 "github.com/openshift/api/quota/v1" + quotatypedclient "github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1" + quotalister "github.com/openshift/client-go/quota/listers/quota/v1" + "github.com/openshift/library-go/pkg/quota/clusterquotamapping" + quotautil "github.com/openshift/library-go/pkg/quota/quotautil" +) + +type clusterQuotaAccessor struct { + clusterQuotaLister quotalister.ClusterResourceQuotaLister + namespaceLister corev1listers.NamespaceLister + clusterQuotaClient quotatypedclient.ClusterResourceQuotasGetter + + clusterQuotaMapper clusterquotamapping.ClusterQuotaMapper + + // updatedClusterQuotas holds a cache of quotas that we've updated. This is used to pull the "really latest" during back to + // back quota evaluations that touch the same quota doc. This only works because we can compare etcd resourceVersions + // for the same resource as integers. Before this change: 22 updates with 12 conflicts. after this change: 15 updates with 0 conflicts + updatedClusterQuotas *lru.Cache +} + +// newQuotaAccessor creates an object that conforms to the QuotaAccessor interface to be used to retrieve quota objects. +func newQuotaAccessor( + clusterQuotaLister quotalister.ClusterResourceQuotaLister, + namespaceLister corev1listers.NamespaceLister, + clusterQuotaClient quotatypedclient.ClusterResourceQuotasGetter, + clusterQuotaMapper clusterquotamapping.ClusterQuotaMapper, +) *clusterQuotaAccessor { + updatedCache, err := lru.New(100) + if err != nil { + // this should never happen + panic(err) + } + + return &clusterQuotaAccessor{ + clusterQuotaLister: clusterQuotaLister, + namespaceLister: namespaceLister, + clusterQuotaClient: clusterQuotaClient, + clusterQuotaMapper: clusterQuotaMapper, + updatedClusterQuotas: updatedCache, + } +} + +// UpdateQuotaStatus the newQuota coming in will be incremented from the original. The difference between the original +// and the new is the amount to add to the namespace total, but the total status is the used value itself +func (e *clusterQuotaAccessor) UpdateQuotaStatus(newQuota *corev1.ResourceQuota) error { + clusterQuota, err := e.clusterQuotaLister.Get(newQuota.Name) + if err != nil { + return err + } + clusterQuota = e.checkCache(clusterQuota) + + // re-assign objectmeta + // make a copy + clusterQuota = clusterQuota.DeepCopy() + clusterQuota.ObjectMeta = newQuota.ObjectMeta + clusterQuota.Namespace = "" + + // determine change in usage + usageDiff := utilquota.Subtract(newQuota.Status.Used, clusterQuota.Status.Total.Used) + + // update aggregate usage + clusterQuota.Status.Total.Used = newQuota.Status.Used + + // update per namespace totals + oldNamespaceTotals, _ := quotautil.GetResourceQuotasStatusByNamespace(clusterQuota.Status.Namespaces, newQuota.Namespace) + namespaceTotalCopy := oldNamespaceTotals.DeepCopy() + newNamespaceTotals := *namespaceTotalCopy + newNamespaceTotals.Used = utilquota.Add(oldNamespaceTotals.Used, usageDiff) + quotautil.InsertResourceQuotasStatus(&clusterQuota.Status.Namespaces, quotav1.ResourceQuotaStatusByNamespace{ + Namespace: newQuota.Namespace, + Status: newNamespaceTotals, + }) + + updatedQuota, err := e.clusterQuotaClient.ClusterResourceQuotas().UpdateStatus(context.TODO(), clusterQuota, metav1.UpdateOptions{}) + if err != nil { + return err + } + + e.updatedClusterQuotas.Add(clusterQuota.Name, updatedQuota) + return nil +} + +var etcdVersioner = etcd.APIObjectVersioner{} + +// checkCache compares the passed quota against the value in the look-aside cache and returns the newer +// if the cache is out of date, it deletes the stale entry. This only works because of etcd resourceVersions +// being monotonically increasing integers +func (e *clusterQuotaAccessor) checkCache(clusterQuota *quotav1.ClusterResourceQuota) *quotav1.ClusterResourceQuota { + uncastCachedQuota, ok := e.updatedClusterQuotas.Get(clusterQuota.Name) + if !ok { + return clusterQuota + } + cachedQuota := uncastCachedQuota.(*quotav1.ClusterResourceQuota) + + if etcdVersioner.CompareResourceVersion(clusterQuota, cachedQuota) >= 0 { + e.updatedClusterQuotas.Remove(clusterQuota.Name) + return clusterQuota + } + return cachedQuota +} + +func (e *clusterQuotaAccessor) GetQuotas(namespaceName string) ([]corev1.ResourceQuota, error) { + clusterQuotaNames, err := e.waitForReadyClusterQuotaNames(namespaceName) + if err != nil { + return nil, err + } + + resourceQuotas := []corev1.ResourceQuota{} + for _, clusterQuotaName := range clusterQuotaNames { + clusterQuota, err := e.clusterQuotaLister.Get(clusterQuotaName) + if kapierrors.IsNotFound(err) { + continue + } + if err != nil { + return nil, err + } + + clusterQuota = e.checkCache(clusterQuota) + + // now convert to a ResourceQuota + convertedQuota := corev1.ResourceQuota{} + convertedQuota.ObjectMeta = clusterQuota.ObjectMeta + convertedQuota.Namespace = namespaceName + convertedQuota.Spec = clusterQuota.Spec.Quota + convertedQuota.Status = clusterQuota.Status.Total + resourceQuotas = append(resourceQuotas, convertedQuota) + + } + + return resourceQuotas, nil +} + +func (e *clusterQuotaAccessor) waitForReadyClusterQuotaNames(namespaceName string) ([]string, error) { + var clusterQuotaNames []string + // wait for a valid mapping cache. The overall response can be delayed for up to 10 seconds. + err := utilwait.PollImmediate(100*time.Millisecond, 8*time.Second, func() (done bool, err error) { + var namespaceSelectionFields clusterquotamapping.SelectionFields + clusterQuotaNames, namespaceSelectionFields = e.clusterQuotaMapper.GetClusterQuotasFor(namespaceName) + namespace, err := e.namespaceLister.Get(namespaceName) + // if we can't find the namespace yet, just wait for the cache to update. Requests to non-existent namespaces + // may hang, but those people are doing something wrong and namespacelifecycle should reject them. + if kapierrors.IsNotFound(err) { + return false, nil + } + if err != nil { + return false, err + } + if equality.Semantic.DeepEqual(namespaceSelectionFields, clusterquotamapping.GetSelectionFields(namespace)) { + return true, nil + } + return false, nil + }) + return clusterQuotaNames, err +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/admission.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/admission.go new file mode 100644 index 0000000000000..741629e55c683 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/admission.go @@ -0,0 +1,221 @@ +package clusterresourcequota + +import ( + "context" + "errors" + "io" + "sort" + "sync" + "time" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + utilwait "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/client-go/informers" + corev1listers "k8s.io/client-go/listers/core/v1" + "k8s.io/client-go/rest" + "k8s.io/kubernetes/pkg/quota/v1" + "k8s.io/kubernetes/pkg/quota/v1/install" + "k8s.io/kubernetes/plugin/pkg/admission/resourcequota" + resourcequotaapi "k8s.io/kubernetes/plugin/pkg/admission/resourcequota/apis/resourcequota" + + quotatypedclient "github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1" + quotainformer "github.com/openshift/client-go/quota/informers/externalversions/quota/v1" + quotalister "github.com/openshift/client-go/quota/listers/quota/v1" + "github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig" + "github.com/openshift/library-go/pkg/quota/clusterquotamapping" +) + +func Register(plugins *admission.Plugins) { + plugins.Register("quota.openshift.io/ClusterResourceQuota", + func(config io.Reader) (admission.Interface, error) { + return NewClusterResourceQuota() + }) +} + +// clusterQuotaAdmission implements an admission controller that can enforce clusterQuota constraints +type clusterQuotaAdmission struct { + *admission.Handler + + // these are used to create the accessor + clusterQuotaLister quotalister.ClusterResourceQuotaLister + namespaceLister corev1listers.NamespaceLister + clusterQuotaSynced func() bool + namespaceSynced func() bool + clusterQuotaClient quotatypedclient.ClusterResourceQuotasGetter + clusterQuotaMapper clusterquotamapping.ClusterQuotaMapper + + lockFactory LockFactory + + // these are used to create the evaluator + registry quota.Registry + + init sync.Once + evaluator resourcequota.Evaluator +} + +var _ initializer.WantsExternalKubeInformerFactory = &clusterQuotaAdmission{} +var _ admissionrestconfig.WantsRESTClientConfig = &clusterQuotaAdmission{} +var _ WantsClusterQuota = &clusterQuotaAdmission{} +var _ WantsOriginQuotaRegistry = &clusterQuotaAdmission{} +var _ admission.ValidationInterface = &clusterQuotaAdmission{} + +const ( + timeToWaitForCacheSync = 10 * time.Second + numEvaluatorThreads = 10 +) + +// NewClusterResourceQuota configures an admission controller that can enforce clusterQuota constraints +// using the provided registry. The registry must have the capability to handle group/kinds that +// are persisted by the server this admission controller is intercepting +func NewClusterResourceQuota() (admission.Interface, error) { + return &clusterQuotaAdmission{ + Handler: admission.NewHandler(admission.Create, admission.Update), + lockFactory: NewDefaultLockFactory(), + }, nil +} + +// Admit makes admission decisions while enforcing clusterQuota +func (q *clusterQuotaAdmission) Validate(ctx context.Context, a admission.Attributes, _ admission.ObjectInterfaces) (err error) { + // ignore all operations that correspond to sub-resource actions + if len(a.GetSubresource()) != 0 { + return nil + } + // ignore cluster level resources + if len(a.GetNamespace()) == 0 { + return nil + } + + if !q.waitForSyncedStore(time.After(timeToWaitForCacheSync)) { + return admission.NewForbidden(a, errors.New("caches not synchronized")) + } + + q.init.Do(func() { + clusterQuotaAccessor := newQuotaAccessor(q.clusterQuotaLister, q.namespaceLister, q.clusterQuotaClient, q.clusterQuotaMapper) + q.evaluator = resourcequota.NewQuotaEvaluator(clusterQuotaAccessor, ignoredResources, q.registry, q.lockAquisition, &resourcequotaapi.Configuration{}, numEvaluatorThreads, utilwait.NeverStop) + }) + + return q.evaluator.Evaluate(a) +} + +func (q *clusterQuotaAdmission) lockAquisition(quotas []corev1.ResourceQuota) func() { + locks := []sync.Locker{} + + // acquire the locks in alphabetical order because I'm too lazy to think of something clever + sort.Sort(ByName(quotas)) + for _, quota := range quotas { + lock := q.lockFactory.GetLock(quota.Name) + lock.Lock() + locks = append(locks, lock) + } + + return func() { + for i := len(locks) - 1; i >= 0; i-- { + locks[i].Unlock() + } + } +} + +func (q *clusterQuotaAdmission) waitForSyncedStore(timeout <-chan time.Time) bool { + for !q.clusterQuotaSynced() || !q.namespaceSynced() { + select { + case <-time.After(100 * time.Millisecond): + case <-timeout: + return q.clusterQuotaSynced() && q.namespaceSynced() + } + } + + return true +} + +func (q *clusterQuotaAdmission) SetOriginQuotaRegistry(registry quota.Registry) { + q.registry = registry +} + +func (q *clusterQuotaAdmission) SetExternalKubeInformerFactory(informers informers.SharedInformerFactory) { + q.namespaceLister = informers.Core().V1().Namespaces().Lister() + q.namespaceSynced = informers.Core().V1().Namespaces().Informer().HasSynced +} + +func (q *clusterQuotaAdmission) SetRESTClientConfig(restClientConfig rest.Config) { + var err error + + // ClusterResourceQuota is served using CRD resource any status update must use JSON + jsonClientConfig := rest.CopyConfig(&restClientConfig) + jsonClientConfig.ContentConfig.AcceptContentTypes = "application/json" + jsonClientConfig.ContentConfig.ContentType = "application/json" + + q.clusterQuotaClient, err = quotatypedclient.NewForConfig(jsonClientConfig) + if err != nil { + utilruntime.HandleError(err) + return + } +} + +func (q *clusterQuotaAdmission) SetClusterQuota(clusterQuotaMapper clusterquotamapping.ClusterQuotaMapper, informers quotainformer.ClusterResourceQuotaInformer) { + q.clusterQuotaMapper = clusterQuotaMapper + q.clusterQuotaLister = informers.Lister() + q.clusterQuotaSynced = informers.Informer().HasSynced +} + +func (q *clusterQuotaAdmission) ValidateInitialization() error { + if q.clusterQuotaLister == nil { + return errors.New("missing clusterQuotaLister") + } + if q.namespaceLister == nil { + return errors.New("missing namespaceLister") + } + if q.clusterQuotaClient == nil { + return errors.New("missing clusterQuotaClient") + } + if q.clusterQuotaMapper == nil { + return errors.New("missing clusterQuotaMapper") + } + if q.registry == nil { + return errors.New("missing registry") + } + + return nil +} + +type ByName []corev1.ResourceQuota + +func (v ByName) Len() int { return len(v) } +func (v ByName) Swap(i, j int) { v[i], v[j] = v[j], v[i] } +func (v ByName) Less(i, j int) bool { return v[i].Name < v[j].Name } + +// ignoredResources is the set of resources that clusterquota ignores. It's larger because we have to ignore requests +// that the namespace lifecycle plugin ignores. This is because of the need to have a matching namespace in order to be sure +// that the cache is current enough to have mapped the CRQ to the namespaces. Normal RQ doesn't have that requirement. +var ignoredResources = map[schema.GroupResource]struct{}{} + +func init() { + for k := range install.DefaultIgnoredResources() { + ignoredResources[k] = struct{}{} + } + for k := range accessReviewResources { + ignoredResources[k] = struct{}{} + } + +} + +// accessReviewResources are resources which give a view into permissions in a namespace. Users must be allowed to create these +// resources because returning "not found" errors allows someone to search for the "people I'm going to fire in 2017" namespace. +var accessReviewResources = map[schema.GroupResource]bool{ + {Group: "authorization.k8s.io", Resource: "localsubjectaccessreviews"}: true, + {Group: "", Resource: "subjectaccessreviews"}: true, + {Group: "", Resource: "localsubjectaccessreviews"}: true, + {Group: "", Resource: "resourceaccessreviews"}: true, + {Group: "", Resource: "localresourceaccessreviews"}: true, + {Group: "", Resource: "selfsubjectrulesreviews"}: true, + {Group: "", Resource: "subjectrulesreviews"}: true, + {Group: "authorization.openshift.io", Resource: "subjectaccessreviews"}: true, + {Group: "authorization.openshift.io", Resource: "localsubjectaccessreviews"}: true, + {Group: "authorization.openshift.io", Resource: "resourceaccessreviews"}: true, + {Group: "authorization.openshift.io", Resource: "localresourceaccessreviews"}: true, + {Group: "authorization.openshift.io", Resource: "selfsubjectrulesreviews"}: true, + {Group: "authorization.openshift.io", Resource: "subjectrulesreviews"}: true, +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/intializers.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/intializers.go new file mode 100644 index 0000000000000..a7ed923c9276f --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/intializers.go @@ -0,0 +1,51 @@ +package clusterresourcequota + +import ( + "k8s.io/apiserver/pkg/admission" + quota "k8s.io/kubernetes/pkg/quota/v1" + + quotainformer "github.com/openshift/client-go/quota/informers/externalversions/quota/v1" + "github.com/openshift/library-go/pkg/quota/clusterquotamapping" +) + +func NewInitializer( + clusterResourceQuotaInformer quotainformer.ClusterResourceQuotaInformer, + clusterQuotaMapper clusterquotamapping.ClusterQuotaMapper, + quotaRegistry quota.Registry, +) admission.PluginInitializer { + return &localInitializer{ + clusterResourceQuotaInformer: clusterResourceQuotaInformer, + clusterQuotaMapper: clusterQuotaMapper, + quotaRegistry: quotaRegistry, + } +} + +// WantsClusterQuota should be implemented by admission plugins that need to know how to map between +// cluster quota and namespaces and get access to the informer. +type WantsClusterQuota interface { + SetClusterQuota(clusterquotamapping.ClusterQuotaMapper, quotainformer.ClusterResourceQuotaInformer) + admission.InitializationValidator +} + +// WantsQuotaRegistry should be implemented by admission plugins that need a quota registry +type WantsOriginQuotaRegistry interface { + SetOriginQuotaRegistry(quota.Registry) + admission.InitializationValidator +} + +type localInitializer struct { + clusterResourceQuotaInformer quotainformer.ClusterResourceQuotaInformer + clusterQuotaMapper clusterquotamapping.ClusterQuotaMapper + quotaRegistry quota.Registry +} + +// Initialize will check the initialization interfaces implemented by each plugin +// and provide the appropriate initialization data +func (i *localInitializer) Initialize(plugin admission.Interface) { + if wants, ok := plugin.(WantsClusterQuota); ok { + wants.SetClusterQuota(i.clusterQuotaMapper, i.clusterResourceQuotaInformer) + } + if wants, ok := plugin.(WantsOriginQuotaRegistry); ok { + wants.SetOriginQuotaRegistry(i.quotaRegistry) + } +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/lockfactory.go b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/lockfactory.go new file mode 100644 index 0000000000000..ed73d0e2d14f3 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota/lockfactory.go @@ -0,0 +1,40 @@ +package clusterresourcequota + +import ( + "sync" +) + +type LockFactory interface { + GetLock(string) sync.Locker +} + +type DefaultLockFactory struct { + lock sync.RWMutex + + locks map[string]sync.Locker +} + +func NewDefaultLockFactory() *DefaultLockFactory { + return &DefaultLockFactory{locks: map[string]sync.Locker{}} +} + +func (f *DefaultLockFactory) GetLock(key string) sync.Locker { + lock, exists := f.getExistingLock(key) + if exists { + return lock + } + + f.lock.Lock() + defer f.lock.Unlock() + lock = &sync.Mutex{} + f.locks[key] = lock + return lock +} + +func (f *DefaultLockFactory) getExistingLock(key string) (sync.Locker, bool) { + f.lock.RLock() + defer f.lock.RUnlock() + + lock, exists := f.locks[key] + return lock, exists +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/authorization/scope/converter.go b/vendor/github.com/openshift/apiserver-library-go/pkg/authorization/scope/converter.go new file mode 100644 index 0000000000000..015cb0158f9f2 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/authorization/scope/converter.go @@ -0,0 +1,408 @@ +package scope + +import ( + "fmt" + + rbacv1 "k8s.io/api/rbac/v1" + kapierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/runtime/schema" + kutilerrors "k8s.io/apimachinery/pkg/util/errors" + "k8s.io/apimachinery/pkg/util/sets" + kauthorizer "k8s.io/apiserver/pkg/authorization/authorizer" + rbaclisters "k8s.io/client-go/listers/rbac/v1" + rbacv1helpers "k8s.io/kubernetes/pkg/apis/rbac/v1" + authorizerrbac "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac" + + scopemetadata "github.com/openshift/library-go/pkg/authorization/scopemetadata" +) + +const ( + scopesAllNamespaces = "*" + + legacyGroupName = "" + coreGroupName = "" + kubeAuthorizationGroupName = "authorization.k8s.io" + openshiftAuthorizationGroupName = "authorization.openshift.io" + imageGroupName = "image.openshift.io" + networkGroupName = "network.openshift.io" + oauthGroupName = "oauth.openshift.io" + projectGroupName = "project.openshift.io" + userGroupName = "user.openshift.io" +) + +// scopeDiscoveryRule is a rule that allows a client to discover the API resources available on this server +var scopeDiscoveryRule = rbacv1.PolicyRule{ + Verbs: []string{"get"}, + NonResourceURLs: []string{ + // Server version checking + "/version", "/version/*", + + // API discovery/negotiation + "/api", "/api/*", + "/apis", "/apis/*", + "/oapi", "/oapi/*", + "/openapi/v2", + "/swaggerapi", "/swaggerapi/*", "/swagger.json", "/swagger-2.0.0.pb-v1", + "/osapi", "/osapi/", // these cannot be removed until we can drop support for pre 3.1 clients + "/.well-known", "/.well-known/*", + + // we intentionally allow all to here + "/", + }, +} + +// ScopesToRules takes the scopes and return the rules back. We ALWAYS add the discovery rules and it is possible to get some rules and and +// an error since errors aren't fatal to evaluation +func ScopesToRules(scopes []string, namespace string, clusterRoleGetter rbaclisters.ClusterRoleLister) ([]rbacv1.PolicyRule, error) { + rules := append([]rbacv1.PolicyRule{}, scopeDiscoveryRule) + + errors := []error{} + for _, scope := range scopes { + found := false + + for _, evaluator := range ScopeEvaluators { + if evaluator.Handles(scope) { + found = true + currRules, err := evaluator.ResolveRules(scope, namespace, clusterRoleGetter) + if err != nil { + errors = append(errors, err) + continue + } + + rules = append(rules, currRules...) + } + } + + if !found { + errors = append(errors, fmt.Errorf("no scope evaluator found for %q", scope)) + } + } + + return rules, kutilerrors.NewAggregate(errors) +} + +// ScopesToVisibleNamespaces returns a list of namespaces that the provided scopes have "get" access to. +// This exists only to support efficiently list/watch of projects (ACLed namespaces) +func ScopesToVisibleNamespaces(scopes []string, clusterRoleGetter rbaclisters.ClusterRoleLister, ignoreUnhandledScopes bool) (sets.String, error) { + if len(scopes) == 0 { + return sets.NewString("*"), nil + } + + visibleNamespaces := sets.String{} + + errors := []error{} + for _, scope := range scopes { + found := false + + for _, evaluator := range ScopeEvaluators { + if evaluator.Handles(scope) { + found = true + allowedNamespaces, err := evaluator.ResolveGettableNamespaces(scope, clusterRoleGetter) + if err != nil { + errors = append(errors, err) + continue + } + + visibleNamespaces.Insert(allowedNamespaces...) + break + } + } + + if !found && !ignoreUnhandledScopes { + errors = append(errors, fmt.Errorf("no scope evaluator found for %q", scope)) + } + } + + return visibleNamespaces, kutilerrors.NewAggregate(errors) +} + +const ( + UserIndicator = "user:" + ClusterRoleIndicator = "role:" +) + +// ScopeEvaluator takes a scope and returns the rules that express it +type ScopeEvaluator interface { + // Handles returns true if this evaluator can evaluate this scope + Handles(scope string) bool + // Validate returns an error if the scope is malformed + Validate(scope string) error + // Describe returns a description, warning (typically used to warn about escalation dangers), or an error if the scope is malformed + Describe(scope string) (description string, warning string, err error) + // ResolveRules returns the policy rules that this scope allows + ResolveRules(scope, namespace string, clusterRoleGetter rbaclisters.ClusterRoleLister) ([]rbacv1.PolicyRule, error) + ResolveGettableNamespaces(scope string, clusterRoleGetter rbaclisters.ClusterRoleLister) ([]string, error) +} + +// ScopeEvaluators map prefixes to a function that handles that prefix +var ScopeEvaluators = []ScopeEvaluator{ + userEvaluator{}, + clusterRoleEvaluator{}, +} + +// scopes are in the format +// +// we have the following formats: +// user: +// role:: +// TODO +// cluster:: +// namespace::: + +const ( + UserInfo = UserIndicator + "info" + UserAccessCheck = UserIndicator + "check-access" + + // UserListScopedProjects gives explicit permission to see the projects that this token can see. + UserListScopedProjects = UserIndicator + "list-scoped-projects" + + // UserListAllProjects gives explicit permission to see the projects a user can see. This is often used to prime secondary ACL systems + // unrelated to openshift and to display projects for selection in a secondary UI. + UserListAllProjects = UserIndicator + "list-projects" + + // UserFull includes all permissions of the user + UserFull = UserIndicator + "full" +) + +var defaultSupportedScopesMap = map[string]string{ + UserInfo: "Read-only access to your user information (including username, identities, and group membership)", + UserAccessCheck: `Read-only access to view your privileges (for example, "can I create builds?")`, + UserListScopedProjects: `Read-only access to list your projects viewable with this token and view their metadata (display name, description, etc.)`, + UserListAllProjects: `Read-only access to list your projects and view their metadata (display name, description, etc.)`, + UserFull: `Full read/write access with all of your permissions`, +} + +func DefaultSupportedScopes() []string { + return sets.StringKeySet(defaultSupportedScopesMap).List() +} + +func DescribeScopes(scopes []string) map[string]string { + ret := map[string]string{} + for _, s := range scopes { + val, ok := defaultSupportedScopesMap[s] + if ok { + ret[s] = val + } else { + ret[s] = "" + } + } + return ret +} + +// user: +type userEvaluator struct { + scopemetadata.UserEvaluator +} + +func (userEvaluator) ResolveRules(scope, namespace string, _ rbaclisters.ClusterRoleLister) ([]rbacv1.PolicyRule, error) { + switch scope { + case UserInfo: + return []rbacv1.PolicyRule{ + rbacv1helpers.NewRule("get"). + Groups(userGroupName, legacyGroupName). + Resources("users"). + Names("~"). + RuleOrDie(), + }, nil + case UserAccessCheck: + return []rbacv1.PolicyRule{ + rbacv1helpers.NewRule("create"). + Groups(kubeAuthorizationGroupName). + Resources("selfsubjectaccessreviews"). + RuleOrDie(), + rbacv1helpers.NewRule("create"). + Groups(openshiftAuthorizationGroupName, legacyGroupName). + Resources("selfsubjectrulesreviews"). + RuleOrDie(), + }, nil + case UserListScopedProjects: + return []rbacv1.PolicyRule{ + rbacv1helpers.NewRule("list", "watch"). + Groups(projectGroupName, legacyGroupName). + Resources("projects"). + RuleOrDie(), + }, nil + case UserListAllProjects: + return []rbacv1.PolicyRule{ + rbacv1helpers.NewRule("list", "watch"). + Groups(projectGroupName, legacyGroupName). + Resources("projects"). + RuleOrDie(), + rbacv1helpers.NewRule("get"). + Groups(coreGroupName). + Resources("namespaces"). + RuleOrDie(), + }, nil + case UserFull: + return []rbacv1.PolicyRule{ + rbacv1helpers.NewRule(rbacv1.VerbAll). + Groups(rbacv1.APIGroupAll). + Resources(rbacv1.ResourceAll). + RuleOrDie(), + rbacv1helpers.NewRule(rbacv1.VerbAll). + URLs(rbacv1.NonResourceAll). + RuleOrDie(), + }, nil + default: + return nil, fmt.Errorf("unrecognized scope: %v", scope) + } +} + +func (userEvaluator) ResolveGettableNamespaces(scope string, _ rbaclisters.ClusterRoleLister) ([]string, error) { + switch scope { + case UserFull, UserListAllProjects: + return []string{"*"}, nil + default: + return []string{}, nil + } +} + +// escalatingScopeResources are resources that are considered escalating for scope evaluation +var escalatingScopeResources = []schema.GroupResource{ + {Group: coreGroupName, Resource: "secrets"}, + {Group: imageGroupName, Resource: "imagestreams/secrets"}, + {Group: oauthGroupName, Resource: "oauthauthorizetokens"}, + {Group: oauthGroupName, Resource: "oauthaccesstokens"}, + {Group: openshiftAuthorizationGroupName, Resource: "roles"}, + {Group: openshiftAuthorizationGroupName, Resource: "rolebindings"}, + {Group: openshiftAuthorizationGroupName, Resource: "clusterroles"}, + {Group: openshiftAuthorizationGroupName, Resource: "clusterrolebindings"}, + // used in Service admission to create a service with external IP outside the allowed range + {Group: networkGroupName, Resource: "service/externalips"}, + + {Group: legacyGroupName, Resource: "imagestreams/secrets"}, + {Group: legacyGroupName, Resource: "oauthauthorizetokens"}, + {Group: legacyGroupName, Resource: "oauthaccesstokens"}, + {Group: legacyGroupName, Resource: "roles"}, + {Group: legacyGroupName, Resource: "rolebindings"}, + {Group: legacyGroupName, Resource: "clusterroles"}, + {Group: legacyGroupName, Resource: "clusterrolebindings"}, +} + +// role:: +type clusterRoleEvaluator struct { + scopemetadata.ClusterRoleEvaluator +} + +var clusterRoleEvaluatorInstance = clusterRoleEvaluator{} + +func (e clusterRoleEvaluator) ResolveRules(scope, namespace string, clusterRoleGetter rbaclisters.ClusterRoleLister) ([]rbacv1.PolicyRule, error) { + _, scopeNamespace, _, err := scopemetadata.ClusterRoleEvaluatorParseScope(scope) + if err != nil { + return nil, err + } + + // if the scope limit on the clusterrole doesn't match, then don't add any rules, but its not an error + if !(scopeNamespace == scopesAllNamespaces || scopeNamespace == namespace) { + return []rbacv1.PolicyRule{}, nil + } + + return e.resolveRules(scope, clusterRoleGetter) +} + +func has(set []string, value string) bool { + for _, element := range set { + if value == element { + return true + } + } + return false +} + +// resolveRules doesn't enforce namespace checks +func (e clusterRoleEvaluator) resolveRules(scope string, clusterRoleGetter rbaclisters.ClusterRoleLister) ([]rbacv1.PolicyRule, error) { + roleName, _, escalating, err := scopemetadata.ClusterRoleEvaluatorParseScope(scope) + if err != nil { + return nil, err + } + + role, err := clusterRoleGetter.Get(roleName) + if err != nil { + if kapierrors.IsNotFound(err) { + return []rbacv1.PolicyRule{}, nil + } + return nil, err + } + + rules := []rbacv1.PolicyRule{} + for _, rule := range role.Rules { + if escalating { + rules = append(rules, rule) + continue + } + + // rules with unbounded access shouldn't be allowed in scopes. + if has(rule.Verbs, rbacv1.VerbAll) || + has(rule.Resources, rbacv1.ResourceAll) || + has(rule.APIGroups, rbacv1.APIGroupAll) { + continue + } + // rules that allow escalating resource access should be cleaned. + safeRule := removeEscalatingResources(rule) + rules = append(rules, safeRule) + } + + return rules, nil +} + +func (e clusterRoleEvaluator) ResolveGettableNamespaces(scope string, clusterRoleGetter rbaclisters.ClusterRoleLister) ([]string, error) { + _, scopeNamespace, _, err := scopemetadata.ClusterRoleEvaluatorParseScope(scope) + if err != nil { + return nil, err + } + rules, err := e.resolveRules(scope, clusterRoleGetter) + if err != nil { + return nil, err + } + + attributes := kauthorizer.AttributesRecord{ + APIGroup: coreGroupName, + Verb: "get", + Resource: "namespaces", + ResourceRequest: true, + } + + if authorizerrbac.RulesAllow(attributes, rules...) { + return []string{scopeNamespace}, nil + } + + return []string{}, nil +} + +func remove(array []string, item string) []string { + newar := array[:0] + for _, element := range array { + if element != item { + newar = append(newar, element) + } + } + return newar +} + +// removeEscalatingResources inspects a PolicyRule and removes any references to escalating resources. +// It has coarse logic for now. It is possible to rewrite one rule into many for the finest grain control +// but removing the entire matching resource regardless of verb or secondary group is cheaper, easier, and errs on the side removing +// too much, not too little +func removeEscalatingResources(in rbacv1.PolicyRule) rbacv1.PolicyRule { + var ruleCopy *rbacv1.PolicyRule + + for _, resource := range escalatingScopeResources { + if !(has(in.APIGroups, resource.Group) && has(in.Resources, resource.Resource)) { + continue + } + + if ruleCopy == nil { + // we're using a cache of cache of an object that uses pointers to data. I'm pretty sure we need to do a copy to avoid + // muddying the cache + ruleCopy = in.DeepCopy() + } + + ruleCopy.Resources = remove(ruleCopy.Resources, resource.Resource) + } + + if ruleCopy != nil { + return *ruleCopy + } + + return in +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/configflags/audit.go b/vendor/github.com/openshift/apiserver-library-go/pkg/configflags/audit.go new file mode 100644 index 0000000000000..f7d378daf145f --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/configflags/audit.go @@ -0,0 +1,54 @@ +package configflags + +import ( + "io/ioutil" + "os" + "path/filepath" + "strconv" + + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + + configv1 "github.com/openshift/api/config/v1" +) + +const defaultAuditPolicyFilePath = "openshift.local.audit/policy.yaml" + +func AuditFlags(c *configv1.AuditConfig, args map[string][]string) map[string][]string { + if !c.Enabled { + return args + } + + auditPolicyFilePath := c.PolicyFile + if len(c.PolicyConfiguration.Raw) > 0 && string(c.PolicyConfiguration.Raw) != "null" { + if len(auditPolicyFilePath) == 0 { + auditPolicyFilePath = defaultAuditPolicyFilePath + } + if err := os.MkdirAll(filepath.Dir(auditPolicyFilePath), 0755); err != nil { + utilruntime.HandleError(err) + } + if err := ioutil.WriteFile(auditPolicyFilePath, c.PolicyConfiguration.Raw, 0644); err != nil { + utilruntime.HandleError(err) + } + } + + SetIfUnset(args, "audit-log-maxbackup", strconv.Itoa(int(c.MaximumRetainedFiles))) + SetIfUnset(args, "audit-log-maxsize", strconv.Itoa(int(c.MaximumFileSizeMegabytes))) + SetIfUnset(args, "audit-log-maxage", strconv.Itoa(int(c.MaximumFileRetentionDays))) + auditFilePath := c.AuditFilePath + if len(auditFilePath) == 0 { + auditFilePath = "-" + } + SetIfUnset(args, "audit-log-path", auditFilePath) + if len(auditPolicyFilePath) > 0 { + SetIfUnset(args, "audit-policy-file", auditPolicyFilePath) + } + if len(c.LogFormat) > 0 { + SetIfUnset(args, "audit-log-format", string(c.LogFormat)) + } + if len(c.WebHookMode) > 0 { + SetIfUnset(args, "audit-webhook-mode", string(c.WebHookMode)) + } + SetIfUnset(args, "audit-webhook-config-file", string(c.WebHookKubeConfig)) + + return args +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/configflags/helpers.go b/vendor/github.com/openshift/apiserver-library-go/pkg/configflags/helpers.go new file mode 100644 index 0000000000000..12870a4b5916b --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/configflags/helpers.go @@ -0,0 +1,43 @@ +package configflags + +import ( + "fmt" + "sort" + "strings" +) + +// ArgsWithPrefix filters arguments by prefix and collects values. +func ArgsWithPrefix(args map[string][]string, prefix string) map[string][]string { + filtered := map[string][]string{} + for key, slice := range args { + if !strings.HasPrefix(key, prefix) { + continue + } + for _, val := range slice { + filtered[key] = append(filtered[key], val) + } + } + return filtered +} + +func SetIfUnset(cmdLineArgs map[string][]string, key string, value ...string) { + if _, ok := cmdLineArgs[key]; !ok { + cmdLineArgs[key] = value + } +} + +func ToFlagSlice(args map[string][]string) []string { + var keys []string + for key := range args { + keys = append(keys, key) + } + sort.Strings(keys) + + var flags []string + for _, key := range keys { + for _, token := range args[key] { + flags = append(flags, fmt.Sprintf("--%s=%v", key, token)) + } + } + return flags +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/capabilities/mustrunas.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/capabilities/mustrunas.go new file mode 100644 index 0000000000000..9e6e1d5a59b54 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/capabilities/mustrunas.go @@ -0,0 +1,149 @@ +package capabilities + +import ( + "fmt" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" + + securityv1 "github.com/openshift/api/security/v1" +) + +// defaultCapabilities implements the CapabilitiesSecurityContextConstraintsStrategy interface +type defaultCapabilities struct { + defaultAddCapabilities []corev1.Capability + requiredDropCapabilities []corev1.Capability + allowedCaps []corev1.Capability +} + +var _ CapabilitiesSecurityContextConstraintsStrategy = &defaultCapabilities{} + +// NewDefaultCapabilities creates a new defaultCapabilities strategy that will provide defaults and validation +// based on the configured initial caps and allowed caps. +func NewDefaultCapabilities(defaultAddCapabilities, requiredDropCapabilities, allowedCaps []corev1.Capability) (CapabilitiesSecurityContextConstraintsStrategy, error) { + return &defaultCapabilities{ + defaultAddCapabilities: defaultAddCapabilities, + requiredDropCapabilities: requiredDropCapabilities, + allowedCaps: allowedCaps, + }, nil +} + +// Generate creates the capabilities based on policy rules. Generate will produce the following: +// 1. a capabilities.Add set containing all the required adds (unless the +// container specifically is dropping the cap) and container requested adds +// 2. a capabilities.Drop set containing all the required drops and container requested drops +// +// Returns the original container capabilities if no changes are required. +func (s *defaultCapabilities) Generate(pod *api.Pod, container *api.Container) (*api.Capabilities, error) { + defaultAdd := makeCapSet(s.defaultAddCapabilities) + requiredDrop := makeCapSet(s.requiredDropCapabilities) + containerAdd := sets.NewString() + containerDrop := sets.NewString() + + var containerCapabilities *api.Capabilities + if container.SecurityContext != nil && container.SecurityContext.Capabilities != nil { + containerCapabilities = container.SecurityContext.Capabilities + containerAdd = makeCapSetInternal(container.SecurityContext.Capabilities.Add) + containerDrop = makeCapSetInternal(container.SecurityContext.Capabilities.Drop) + } + + // remove any default adds that the container is specifically dropping + defaultAdd = defaultAdd.Difference(containerDrop) + + combinedAdd := defaultAdd.Union(containerAdd) + combinedDrop := requiredDrop.Union(containerDrop) + + // no changes? return the original capabilities + if (len(combinedAdd) == len(containerAdd)) && (len(combinedDrop) == len(containerDrop)) { + return containerCapabilities, nil + } + + return &api.Capabilities{ + Add: capabilityFromStringSlice(combinedAdd.List()), + Drop: capabilityFromStringSlice(combinedDrop.List()), + }, nil +} + +// Validate ensures that the specified values fall within the range of the strategy. +func (s *defaultCapabilities) Validate(fldPath *field.Path, pod *api.Pod, container *api.Container, capabilities *api.Capabilities) field.ErrorList { + allErrs := field.ErrorList{} + + if capabilities == nil { + // if container.SC.Caps is nil then nothing was defaulted by the strat or requested by the pod author + // if there are no required caps on the strategy and nothing is requested on the pod + // then we can safely return here without further validation. + if len(s.defaultAddCapabilities) == 0 && len(s.requiredDropCapabilities) == 0 { + return allErrs + } + + // container has no requested caps but we have required caps. We should have something in + // at least the drops on the container. + allErrs = append(allErrs, field.Invalid(fldPath.Child("capabilities"), capabilities, + "required capabilities are not set on the securityContext")) + return allErrs + } + + allowedAdd := makeCapSet(s.allowedCaps) + allowAllCaps := allowedAdd.Has(string(securityv1.AllowAllCapabilities)) + if allowAllCaps { + // skip validation against allowed/defaultAdd/requiredDrop because all capabilities are allowed by a wildcard + return allErrs + } + + // validate that anything being added is in the default or allowed sets + defaultAdd := makeCapSet(s.defaultAddCapabilities) + + for _, cap := range capabilities.Add { + sCap := string(cap) + if !defaultAdd.Has(sCap) && !allowedAdd.Has(sCap) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("capabilities", "add"), sCap, "capability may not be added")) + } + } + + // validate that anything that is required to be dropped is in the drop set + containerDrops := makeCapSetInternal(capabilities.Drop) + + for _, requiredDrop := range s.requiredDropCapabilities { + sDrop := string(requiredDrop) + if !containerDrops.Has(sDrop) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("capabilities", "drop"), capabilities.Drop, + fmt.Sprintf("%s is required to be dropped but was not found", sDrop))) + } + } + + return allErrs +} + +// capabilityFromStringSlice creates a capability slice from a string slice. +func capabilityFromStringSlice(slice []string) []api.Capability { + if len(slice) == 0 { + return nil + } + caps := []api.Capability{} + for _, c := range slice { + caps = append(caps, api.Capability(c)) + } + return caps +} + +// makeCapSet makes a string set from capabilities and normalizes them to be all lower case to help +// with comparisons. +func makeCapSetInternal(caps []api.Capability) sets.String { + s := sets.NewString() + for _, c := range caps { + s.Insert(string(c)) + } + return s +} + +// makeCapSet makes a string set from capabilities and normalizes them to be all lower case to help +// with comparisons. +func makeCapSet(caps []corev1.Capability) sets.String { + s := sets.NewString() + for _, c := range caps { + s.Insert(string(c)) + } + return s +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/capabilities/types.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/capabilities/types.go new file mode 100644 index 0000000000000..2c030d3947bbf --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/capabilities/types.go @@ -0,0 +1,14 @@ +package capabilities + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" +) + +// CapabilitiesSecurityContextConstraintsStrategy defines the interface for all cap constraint strategies. +type CapabilitiesSecurityContextConstraintsStrategy interface { + // Generate creates the capabilities based on policy rules. + Generate(pod *api.Pod, container *api.Container) (*api.Capabilities, error) + // Validate ensures that the specified values fall within the range of the strategy. + Validate(fldPath *field.Path, pod *api.Pod, container *api.Container, capabilities *api.Capabilities) field.ErrorList +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/group/mustrunas.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/group/mustrunas.go new file mode 100644 index 0000000000000..14d3f06ee3b04 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/group/mustrunas.go @@ -0,0 +1,76 @@ +package group + +import ( + "fmt" + + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" + + securityv1 "github.com/openshift/api/security/v1" +) + +// mustRunAs implements the GroupSecurityContextConstraintsStrategy interface +type mustRunAs struct { + ranges []securityv1.IDRange + field string +} + +var _ GroupSecurityContextConstraintsStrategy = &mustRunAs{} + +// NewMustRunAs provides a new MustRunAs strategy based on ranges. +func NewMustRunAs(ranges []securityv1.IDRange, field string) (GroupSecurityContextConstraintsStrategy, error) { + if len(ranges) == 0 { + return nil, fmt.Errorf("ranges must be supplied for MustRunAs") + } + return &mustRunAs{ + ranges: ranges, + field: field, + }, nil +} + +// Generate creates the group based on policy rules. By default this returns the first group of the +// first range (min val). +func (s *mustRunAs) Generate(_ *api.Pod) ([]int64, error) { + return []int64{s.ranges[0].Min}, nil +} + +// Generate a single value to be applied. This is used for FSGroup. This strategy will return +// the first group of the first range (min val). +func (s *mustRunAs) GenerateSingle(_ *api.Pod) (*int64, error) { + single := new(int64) + *single = s.ranges[0].Min + return single, nil +} + +// Validate ensures that the specified values fall within the range of the strategy. +// Groups are passed in here to allow this strategy to support multiple group fields (fsgroup and +// supplemental groups). +func (s *mustRunAs) Validate(fldPath *field.Path, _ *api.Pod, groups []int64) field.ErrorList { + allErrs := field.ErrorList{} + + if len(groups) == 0 && len(s.ranges) > 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child(s.field), groups, "unable to validate empty groups against required ranges")) + } + + for _, group := range groups { + if !s.isGroupValid(group) { + detail := fmt.Sprintf("%d is not an allowed group", group) + allErrs = append(allErrs, field.Invalid(fldPath.Child(s.field), groups, detail)) + } + } + + return allErrs +} + +func (s *mustRunAs) isGroupValid(group int64) bool { + for _, rng := range s.ranges { + if fallsInRange(group, rng) { + return true + } + } + return false +} + +func fallsInRange(group int64, rng securityv1.IDRange) bool { + return group >= rng.Min && group <= rng.Max +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/group/runasany.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/group/runasany.go new file mode 100644 index 0000000000000..01b300e4c0f6c --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/group/runasany.go @@ -0,0 +1,33 @@ +package group + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" +) + +// mustRunAs implements the GroupSecurityContextConstraintsStrategy interface +type runAsAny struct { +} + +var _ GroupSecurityContextConstraintsStrategy = &runAsAny{} + +// NewRunAsAny provides a new RunAsAny strategy. +func NewRunAsAny() (GroupSecurityContextConstraintsStrategy, error) { + return &runAsAny{}, nil +} + +// Generate creates the group based on policy rules. This strategy returns an empty slice. +func (s *runAsAny) Generate(_ *api.Pod) ([]int64, error) { + return nil, nil +} + +// Generate a single value to be applied. This is used for FSGroup. This strategy returns nil. +func (s *runAsAny) GenerateSingle(_ *api.Pod) (*int64, error) { + return nil, nil +} + +// Validate ensures that the specified values fall within the range of the strategy. +func (s *runAsAny) Validate(fldPath *field.Path, _ *api.Pod, groups []int64) field.ErrorList { + return field.ErrorList{} + +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/group/types.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/group/types.go new file mode 100644 index 0000000000000..752195ab957f9 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/group/types.go @@ -0,0 +1,19 @@ +package group + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" +) + +// GroupSecurityContextConstraintsStrategy defines the interface for all group constraint strategies. +type GroupSecurityContextConstraintsStrategy interface { + // Generate creates the group based on policy rules. The underlying implementation can + // decide whether it will return a full range of values or a subset of values from the + // configured ranges. + Generate(pod *api.Pod) ([]int64, error) + // Generate a single value to be applied. The underlying implementation decides which + // value to return if configured with multiple ranges. This is used for FSGroup. + GenerateSingle(pod *api.Pod) (*int64, error) + // Validate ensures that the specified values fall within the range of the strategy. + Validate(fldPath *field.Path, pod *api.Pod, groups []int64) field.ErrorList +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission/admission.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission/admission.go new file mode 100644 index 0000000000000..da613abd13d4e --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission/admission.go @@ -0,0 +1,308 @@ +package sccadmission + +import ( + "context" + "fmt" + "io" + "sort" + "strings" + "time" + + apiequality "k8s.io/apimachinery/pkg/api/equality" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/apiserver/pkg/authentication/user" + "k8s.io/apiserver/pkg/authorization/authorizer" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/tools/cache" + "k8s.io/klog/v2" + coreapi "k8s.io/kubernetes/pkg/apis/core" + kapihelper "k8s.io/kubernetes/pkg/apis/core/helper" + rbacregistry "k8s.io/kubernetes/pkg/registry/rbac" + "k8s.io/kubernetes/pkg/serviceaccount" + + securityv1 "github.com/openshift/api/security/v1" + securityv1informer "github.com/openshift/client-go/security/informers/externalversions/security/v1" + securityv1listers "github.com/openshift/client-go/security/listers/security/v1" + + "github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccmatching" +) + +const PluginName = "security.openshift.io/SecurityContextConstraint" + +func Register(plugins *admission.Plugins) { + plugins.Register(PluginName, + func(config io.Reader) (admission.Interface, error) { + return NewConstraint(), nil + }) +} + +type constraint struct { + *admission.Handler + client kubernetes.Interface + sccLister securityv1listers.SecurityContextConstraintsLister + sccSynced cache.InformerSynced + authorizer authorizer.Authorizer +} + +var ( + _ = initializer.WantsAuthorizer(&constraint{}) + _ = initializer.WantsExternalKubeClientSet(&constraint{}) + _ = WantsSecurityInformer(&constraint{}) + _ = admission.ValidationInterface(&constraint{}) + _ = admission.MutationInterface(&constraint{}) +) + +// NewConstraint creates a new SCC constraint admission plugin. +func NewConstraint() *constraint { + return &constraint{ + Handler: admission.NewHandler(admission.Create, admission.Update), + } +} + +// Admit determines if the pod should be admitted based on the requested security context +// and the available SCCs. +// +// 1. Find SCCs for the user. +// 2. Find SCCs for the SA. If there is an error retrieving SA SCCs it is not fatal. +// 3. Remove duplicates between the user/SA SCCs. +// 4. Create the providers, includes setting pre-allocated values if necessary. +// 5. Try to generate and validate an SCC with providers. If we find one then admit the pod +// with the validated SCC. If we don't find any reject the pod and give all errors from the +// failed attempts. +// On updates, the BeforeUpdate of the pod strategy only zeroes out the status. That means that +// any change that claims the pod is no longer privileged will be removed. That should hold until +// we get a true old/new set of objects in. +func (c *constraint) Admit(ctx context.Context, a admission.Attributes, _ admission.ObjectInterfaces) error { + if ignore, err := shouldIgnore(a); err != nil { + return err + } else if ignore { + return nil + } + pod := a.GetObject().(*coreapi.Pod) + + // TODO(liggitt): allow spec mutation during initializing updates? + specMutationAllowed := a.GetOperation() == admission.Create + + allowedPod, sccName, validationErrs, err := c.computeSecurityContext(ctx, a, pod, specMutationAllowed, "") + if err != nil { + return admission.NewForbidden(a, err) + } + + if allowedPod != nil { + *pod = *allowedPod + // annotate and accept the pod + klog.V(4).Infof("pod %s (generate: %s) validated against provider %s", pod.Name, pod.GenerateName, sccName) + if pod.ObjectMeta.Annotations == nil { + pod.ObjectMeta.Annotations = map[string]string{} + } + pod.ObjectMeta.Annotations[securityv1.ValidatedSCCAnnotation] = sccName + return nil + } + + // we didn't validate against any security context constraint provider, reject the pod and give the errors for each attempt + klog.V(4).Infof("unable to validate pod %s (generate: %s) against any security context constraint: %v", pod.Name, pod.GenerateName, validationErrs) + return admission.NewForbidden(a, fmt.Errorf("unable to validate against any security context constraint: %v", validationErrs)) +} + +func (c *constraint) Validate(ctx context.Context, a admission.Attributes, _ admission.ObjectInterfaces) error { + if ignore, err := shouldIgnore(a); err != nil { + return err + } else if ignore { + return nil + } + pod := a.GetObject().(*coreapi.Pod) + + // compute the context. Mutation is not allowed. ValidatedSCCAnnotation is used as a hint to gain same speed-up. + allowedPod, _, validationErrs, err := c.computeSecurityContext(ctx, a, pod, false, pod.ObjectMeta.Annotations[securityv1.ValidatedSCCAnnotation]) + if err != nil { + return admission.NewForbidden(a, err) + } + if allowedPod != nil && apiequality.Semantic.DeepEqual(pod, allowedPod) { + return nil + } + + // we didn't validate against any provider, reject the pod and give the errors for each attempt + klog.V(4).Infof("unable to validate pod %s (generate: %s) in namespace %s against any security context constraint: %v", pod.Name, pod.GenerateName, a.GetNamespace(), validationErrs) + return admission.NewForbidden(a, fmt.Errorf("unable to validate against any security context constraint: %v", validationErrs)) +} + +func (c *constraint) computeSecurityContext(ctx context.Context, a admission.Attributes, pod *coreapi.Pod, specMutationAllowed bool, validatedSCCHint string) (*coreapi.Pod, string, field.ErrorList, error) { + // get all constraints that are usable by the user + klog.V(4).Infof("getting security context constraints for pod %s (generate: %s) in namespace %s with user info %v", pod.Name, pod.GenerateName, a.GetNamespace(), a.GetUserInfo()) + + err := wait.PollImmediate(1*time.Second, 10*time.Second, func() (bool, error) { + return c.sccSynced(), nil + }) + if err != nil { + return nil, "", nil, admission.NewForbidden(a, fmt.Errorf("securitycontextconstraints.security.openshift.io cache is not synchronized")) + } + + constraints, err := sccmatching.NewDefaultSCCMatcher(c.sccLister, nil).FindApplicableSCCs(ctx, a.GetNamespace()) + if err != nil { + return nil, "", nil, admission.NewForbidden(a, err) + } + if len(constraints) == 0 { + sccs, err := c.sccLister.List(labels.Everything()) + if err != nil { + return nil, "", nil, admission.NewForbidden(a, err) + } + if len(sccs) == 0 { + return nil, "", nil, admission.NewForbidden(a, fmt.Errorf("no SecurityContextConstraints found in cluster")) + } + return nil, "", nil, admission.NewForbidden(a, fmt.Errorf("no SecurityContextConstraints found in namespace %s", a.GetNamespace())) + } + + // If mutation is not allowed and validatedSCCHint is provided, check the validated policy first. + // Keep the other the same for everything else + sort.SliceStable(constraints, func(i, j int) bool { + if !specMutationAllowed { + if constraints[i].Name == validatedSCCHint { + return true + } + if constraints[j].Name == validatedSCCHint { + return false + } + } + return i < j + }) + + providers, errs := sccmatching.CreateProvidersFromConstraints(a.GetNamespace(), constraints, c.client) + logProviders(pod, providers, errs) + + if len(providers) == 0 { + return nil, "", nil, admission.NewForbidden(a, fmt.Errorf("no SecurityContextConstraintsProvider available to validate pod request")) + } + + // all containers in a single pod must validate under a single provider or we will reject the request + var ( + allowedPod *coreapi.Pod + allowingProvider sccmatching.SecurityContextConstraintsProvider + validationErrs field.ErrorList + saUserInfo user.Info + ) + + userInfo := a.GetUserInfo() + if len(pod.Spec.ServiceAccountName) > 0 { + saUserInfo = serviceaccount.UserInfo(a.GetNamespace(), pod.Spec.ServiceAccountName, "") + } + +loop: + for _, provider := range providers { + // Get the SCC attributes required to decide whether the SCC applies for current user/SA + sccName := provider.GetSCCName() + sccUsers := provider.GetSCCUsers() + sccGroups := provider.GetSCCGroups() + + // continue to the next provider if the current SCC one does not apply to either the user or the serviceaccount + if !sccmatching.ConstraintAppliesTo(ctx, sccName, sccUsers, sccGroups, userInfo, a.GetNamespace(), c.authorizer) && + !(saUserInfo != nil && sccmatching.ConstraintAppliesTo(ctx, sccName, sccUsers, sccGroups, saUserInfo, a.GetNamespace(), c.authorizer)) { + continue + } + + podCopy := pod.DeepCopy() + if errs := sccmatching.AssignSecurityContext(provider, podCopy, field.NewPath(fmt.Sprintf("provider %s: ", sccName))); len(errs) > 0 { + validationErrs = append(validationErrs, errs...) + continue + } + + // the entire pod validated + switch { + case specMutationAllowed: + // if mutation is allowed, use the first found SCC that allows the pod. + // This behavior is different from Kubernetes which tries to search a non-mutating provider + // even on creating. We prefer most restrictive SCC in this case even if it mutates a pod. + allowedPod = podCopy + allowingProvider = provider + klog.V(5).Infof("pod %s (generate: %s) validated against provider %s with mutation", pod.Name, pod.GenerateName, sccName) + break loop + case apiequality.Semantic.DeepEqual(pod, podCopy): + // if we don't allow mutation, only use the validated pod if it didn't require any spec changes + allowedPod = podCopy + allowingProvider = provider + klog.V(5).Infof("pod %s (generate: %s) validated against provider %s without mutation", pod.Name, pod.GenerateName, sccName) + break loop + default: + klog.V(5).Infof("pod %s (generate: %s) validated against provider %s, but required mutation, skipping", pod.Name, pod.GenerateName, sccName) + } + } + + if allowedPod == nil || allowingProvider == nil { + return nil, "", validationErrs, nil + } + return allowedPod, allowingProvider.GetSCCName(), validationErrs, nil +} + +func shouldIgnore(a admission.Attributes) (bool, error) { + if a.GetResource().GroupResource() != coreapi.Resource("pods") { + return true, nil + } + if len(a.GetSubresource()) != 0 { + return true, nil + } + + _, ok := a.GetObject().(*coreapi.Pod) + // if we can't convert then fail closed since we've already checked that this is supposed to be a pod object. + // this shouldn't normally happen during admission but could happen if an integrator passes a versioned + // pod object rather than an internal object. + if !ok { + return false, admission.NewForbidden(a, fmt.Errorf("object was marked as kind pod but was unable to be converted: %v", a.GetObject())) + } + + // if this is an update, see if we are only updating the ownerRef. Garbage collection does this + // and we should allow it in general, since you had the power to update and the power to delete. + // The worst that happens is that you delete something, but you aren't controlling the privileged object itself + if a.GetOperation() == admission.Update && rbacregistry.IsOnlyMutatingGCFields(a.GetObject(), a.GetOldObject(), kapihelper.Semantic) { + return true, nil + } + + return false, nil +} + +// SetSecurityInformers implements WantsSecurityInformer interface for constraint. +func (c *constraint) SetSecurityInformers(informers securityv1informer.SecurityContextConstraintsInformer) { + c.sccLister = informers.Lister() + c.sccSynced = informers.Informer().HasSynced +} + +func (c *constraint) SetExternalKubeClientSet(client kubernetes.Interface) { + c.client = client +} + +func (c *constraint) SetAuthorizer(authorizer authorizer.Authorizer) { + c.authorizer = authorizer +} + +// ValidateInitialization implements InitializationValidator interface for constraint. +func (c *constraint) ValidateInitialization() error { + if c.sccLister == nil { + return fmt.Errorf("%s requires an sccLister", PluginName) + } + if c.sccSynced == nil { + return fmt.Errorf("%s requires an sccSynced", PluginName) + } + if c.client == nil { + return fmt.Errorf("%s requires a client", PluginName) + } + if c.authorizer == nil { + return fmt.Errorf("%s requires an authorizer", PluginName) + } + return nil +} + +// logProviders logs what providers were found for the pod as well as any errors that were encountered +// while creating providers. +func logProviders(pod *coreapi.Pod, providers []sccmatching.SecurityContextConstraintsProvider, providerCreationErrs []error) { + names := make([]string, len(providers)) + for i, p := range providers { + names[i] = p.GetSCCName() + } + klog.V(4).Infof("validating pod %s (generate: %s) against providers %s", pod.Name, pod.GenerateName, strings.Join(names, ",")) + + for _, err := range providerCreationErrs { + klog.V(4).Infof("provider creation error: %v", err) + } +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission/intializers.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission/intializers.go new file mode 100644 index 0000000000000..287fe08b870bc --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission/intializers.go @@ -0,0 +1,28 @@ +package sccadmission + +import ( + "k8s.io/apiserver/pkg/admission" + + securityv1informer "github.com/openshift/client-go/security/informers/externalversions/security/v1" +) + +func NewInitializer(sccInformer securityv1informer.SecurityContextConstraintsInformer) admission.PluginInitializer { + return &localInitializer{sccInformer: sccInformer} +} + +type WantsSecurityInformer interface { + SetSecurityInformers(securityv1informer.SecurityContextConstraintsInformer) + admission.InitializationValidator +} + +type localInitializer struct { + sccInformer securityv1informer.SecurityContextConstraintsInformer +} + +// Initialize will check the initialization interfaces implemented by each plugin +// and provide the appropriate initialization data +func (i *localInitializer) Initialize(plugin admission.Interface) { + if wants, ok := plugin.(WantsSecurityInformer); ok { + wants.SetSecurityInformers(i.sccInformer) + } +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission/scc_exec.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission/scc_exec.go new file mode 100644 index 0000000000000..299278447cc17 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission/scc_exec.go @@ -0,0 +1,104 @@ +package sccadmission + +import ( + "context" + "fmt" + "io" + + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apiserver/pkg/admission" + "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/apiserver/pkg/authorization/authorizer" + "k8s.io/client-go/kubernetes" + coreapi "k8s.io/kubernetes/pkg/apis/core" + coreapiv1conversions "k8s.io/kubernetes/pkg/apis/core/v1" + + securityv1informers "github.com/openshift/client-go/security/informers/externalversions/security/v1" +) + +func RegisterSCCExecRestrictions(plugins *admission.Plugins) { + plugins.Register("security.openshift.io/SCCExecRestrictions", + func(config io.Reader) (admission.Interface, error) { + execAdmitter := NewSCCExecRestrictions() + return execAdmitter, nil + }) +} + +var ( + _ = initializer.WantsAuthorizer(&sccExecRestrictions{}) + _ = initializer.WantsExternalKubeClientSet(&sccExecRestrictions{}) + _ = WantsSecurityInformer(&sccExecRestrictions{}) + _ = admission.ValidationInterface(&sccExecRestrictions{}) +) + +// sccExecRestrictions is an implementation of admission.ValidationInterface which says no to a pod/exec on +// a pod that the user would not be allowed to create +type sccExecRestrictions struct { + *admission.Handler + constraintAdmission *constraint + client kubernetes.Interface +} + +func (d *sccExecRestrictions) Validate(ctx context.Context, a admission.Attributes, o admission.ObjectInterfaces) (err error) { + if a.GetOperation() != admission.Connect { + return nil + } + if a.GetResource().GroupResource() != coreapi.Resource("pods") { + return nil + } + if a.GetSubresource() != "attach" && a.GetSubresource() != "exec" { + return nil + } + + pod, err := d.client.CoreV1().Pods(a.GetNamespace()).Get(context.TODO(), a.GetName(), metav1.GetOptions{}) + switch { + case errors.IsNotFound(err): + return admission.NewNotFound(a) + case err != nil: + return admission.NewForbidden(a, fmt.Errorf("failed to get pod: %v", err)) + } + + // we have to convert to the internal pod because admission uses internal types for now + internalPod := &coreapi.Pod{} + if err := coreapiv1conversions.Convert_v1_Pod_To_core_Pod(pod, internalPod, nil); err != nil { + return admission.NewForbidden(a, err) + } + + // TODO, if we want to actually limit who can use which service account, then we'll need to add logic here to make sure that + // we're allowed to use the SA the pod is using. Otherwise, user-A creates pod and user-B (who can't use the SA) can exec into it. + createAttributes := admission.NewAttributesRecord(internalPod, nil, coreapi.Kind("Pod").WithVersion(""), a.GetNamespace(), a.GetName(), a.GetResource(), "", admission.Create, nil, false, a.GetUserInfo()) + // call SCC.Admit instead of SCC.Validate because we accept that a different SCC is chosen. SCC.Validate would require + // that the chosen SCC (stored in the "openshift.io/scc" annotation) does not change. + if err := d.constraintAdmission.Admit(ctx, createAttributes, o); err != nil { + return admission.NewForbidden(a, fmt.Errorf("%s operation is not allowed because the pod's security context exceeds your permissions: %v", a.GetSubresource(), err)) + } + + return nil +} + +// NewSCCExecRestrictions creates a new admission controller that denies an exec operation on a privileged pod +func NewSCCExecRestrictions() *sccExecRestrictions { + return &sccExecRestrictions{ + Handler: admission.NewHandler(admission.Connect), + constraintAdmission: NewConstraint(), + } +} + +func (d *sccExecRestrictions) SetExternalKubeClientSet(c kubernetes.Interface) { + d.client = c + d.constraintAdmission.SetExternalKubeClientSet(c) +} + +func (d *sccExecRestrictions) SetSecurityInformers(informers securityv1informers.SecurityContextConstraintsInformer) { + d.constraintAdmission.SetSecurityInformers(informers) +} + +func (d *sccExecRestrictions) SetAuthorizer(authorizer authorizer.Authorizer) { + d.constraintAdmission.SetAuthorizer(authorizer) +} + +// Validate defines actions to validate sccExecRestrictions +func (d *sccExecRestrictions) ValidateInitialization() error { + return d.constraintAdmission.ValidateInitialization() +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccmatching/matcher.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccmatching/matcher.go new file mode 100644 index 0000000000000..7625979b4a5d0 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccmatching/matcher.go @@ -0,0 +1,409 @@ +package sccmatching + +import ( + "context" + "fmt" + "sort" + "strings" + + "k8s.io/klog/v2" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/authentication/user" + "k8s.io/apiserver/pkg/authorization/authorizer" + "k8s.io/client-go/kubernetes" + kapi "k8s.io/kubernetes/pkg/apis/core" + + "github.com/openshift/api/security" + securityv1 "github.com/openshift/api/security/v1" + sccsort "github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util/sort" + securityv1listers "github.com/openshift/client-go/security/listers/security/v1" + "github.com/openshift/library-go/pkg/security/uid" +) + +type SCCMatcher interface { + FindApplicableSCCs(ctx context.Context, namespace string, user ...user.Info) ([]*securityv1.SecurityContextConstraints, error) +} + +type defaultSCCMatcher struct { + cache securityv1listers.SecurityContextConstraintsLister + authorizer authorizer.Authorizer +} + +func NewDefaultSCCMatcher(c securityv1listers.SecurityContextConstraintsLister, authorizer authorizer.Authorizer) SCCMatcher { + return &defaultSCCMatcher{cache: c, authorizer: authorizer} +} + +// FindApplicableSCCs implements SCCMatcher interface +// It finds all SCCs that the subjects in the `users` argument may use. +// The returned SCCs are sorted by priority. +func (d *defaultSCCMatcher) FindApplicableSCCs(ctx context.Context, namespace string, users ...user.Info) ([]*securityv1.SecurityContextConstraints, error) { + var matchedConstraints []*securityv1.SecurityContextConstraints + constraints, err := d.cache.List(labels.Everything()) + if err != nil { + return nil, err + } + + // filter out SCCs if we got some users, leave as is if not + if len(users) == 0 { + matchedConstraints = constraints + } else { + for _, constraint := range constraints { + for _, user := range users { + if ConstraintAppliesTo(ctx, constraint.Name, constraint.Users, constraint.Groups, user, namespace, d.authorizer) { + matchedConstraints = append(matchedConstraints, constraint) + break + } + } + } + } + + sort.Sort(sccsort.ByPriority(matchedConstraints)) + + return matchedConstraints, nil +} + +// authorizedForSCC returns true if info is authorized to perform the "use" verb on the SCC resource. +func authorizedForSCC(ctx context.Context, sccName string, info user.Info, namespace string, a authorizer.Authorizer) bool { + // check against the namespace that the pod is being created in to allow per-namespace SCC grants. + attr := authorizer.AttributesRecord{ + User: info, + Verb: "use", + Namespace: namespace, + Name: sccName, + APIGroup: security.GroupName, + Resource: "securitycontextconstraints", + ResourceRequest: true, + } + decision, reason, err := a.Authorize(ctx, attr) + if err != nil { + klog.V(5).Infof("cannot authorize for SCC: %v %q %v", decision, reason, err) + return false + } + return decision == authorizer.DecisionAllow +} + +// ConstraintAppliesTo inspects the constraint's users and groups against the userInfo to determine +// if it is usable by the userInfo. +// Anything we do here needs to work with a deny authorizer so the choices are limited to SAR / Authorizer +func ConstraintAppliesTo(ctx context.Context, sccName string, sccUsers, sccGroups []string, userInfo user.Info, namespace string, a authorizer.Authorizer) bool { + for _, user := range sccUsers { + if userInfo.GetName() == user { + return true + } + } + for _, userGroup := range userInfo.GetGroups() { + if constraintSupportsGroup(userGroup, sccGroups) { + return true + } + } + if a != nil { + return authorizedForSCC(ctx, sccName, userInfo, namespace, a) + } + return false +} + +// AssignSecurityContext creates a security context for each container in the pod +// and validates that the sc falls within the scc constraints. All containers must validate against +// the same scc or is not considered valid. +func AssignSecurityContext(provider SecurityContextConstraintsProvider, pod *kapi.Pod, fldPath *field.Path) field.ErrorList { + errs := field.ErrorList{} + + psc, generatedAnnotations, err := provider.CreatePodSecurityContext(pod) + if err != nil { + errs = append(errs, field.Invalid(fldPath.Child("spec", "securityContext"), pod.Spec.SecurityContext, err.Error())) + } + + pod.Spec.SecurityContext = psc + pod.Annotations = generatedAnnotations + errs = append(errs, provider.ValidatePodSecurityContext(pod, fldPath.Child("spec", "securityContext"))...) + + for i := range pod.Spec.InitContainers { + sc, err := provider.CreateContainerSecurityContext(pod, &pod.Spec.InitContainers[i]) + if err != nil { + errs = append(errs, field.Invalid(field.NewPath("spec", "initContainers").Index(i).Child("securityContext"), "", err.Error())) + continue + } + pod.Spec.InitContainers[i].SecurityContext = sc + errs = append(errs, provider.ValidateContainerSecurityContext(pod, &pod.Spec.InitContainers[i], field.NewPath("spec", "initContainers").Index(i).Child("securityContext"))...) + } + + for i := range pod.Spec.Containers { + sc, err := provider.CreateContainerSecurityContext(pod, &pod.Spec.Containers[i]) + if err != nil { + errs = append(errs, field.Invalid(field.NewPath("spec", "containers").Index(i).Child("securityContext"), "", err.Error())) + continue + } + pod.Spec.Containers[i].SecurityContext = sc + errs = append(errs, provider.ValidateContainerSecurityContext(pod, &pod.Spec.Containers[i], field.NewPath("spec", "containers").Index(i).Child("securityContext"))...) + } + + if len(errs) > 0 { + return errs + } + + return nil +} + +// constraintSupportsGroup checks that group is in constraintGroups. +func constraintSupportsGroup(group string, constraintGroups []string) bool { + for _, g := range constraintGroups { + if g == group { + return true + } + } + return false +} + +// getNamespaceByName retrieves a namespace only if ns is nil. +func getNamespaceByName(name string, ns *corev1.Namespace, client kubernetes.Interface) (*corev1.Namespace, error) { + if ns != nil && name == ns.Name { + return ns, nil + } + return client.CoreV1().Namespaces().Get(context.TODO(), name, metav1.GetOptions{}) +} + +// CreateProvidersFromConstraints creates providers from the constraints supplied, including +// looking up pre-allocated values if necessary using the pod's namespace. +func CreateProvidersFromConstraints(ns string, sccs []*securityv1.SecurityContextConstraints, client kubernetes.Interface) ([]SecurityContextConstraintsProvider, []error) { + var ( + // namespace is declared here for reuse but we will not fetch it unless required by the matched constraints + namespace *corev1.Namespace + // collected providers + providers []SecurityContextConstraintsProvider + // collected errors to return + errs []error + ) + + // set pre-allocated values on constraints + for _, constraint := range sccs { + var ( + provider SecurityContextConstraintsProvider + err error + ) + provider, namespace, err = CreateProviderFromConstraint(ns, namespace, constraint, client) + if err != nil { + errs = append(errs, err) + continue + } + providers = append(providers, provider) + } + return providers, errs +} + +// CreateProviderFromConstraint creates a SecurityContextConstraintProvider from a SecurityContextConstraint +func CreateProviderFromConstraint(ns string, namespace *corev1.Namespace, constraint *securityv1.SecurityContextConstraints, client kubernetes.Interface) (SecurityContextConstraintsProvider, *corev1.Namespace, error) { + var err error + resolveUIDRange := requiresPreAllocatedUIDRange(constraint) + resolveSELinuxLevel := requiresPreAllocatedSELinuxLevel(constraint) + resolveFSGroup := requiresPreallocatedFSGroup(constraint) + resolveSupplementalGroups := requiresPreallocatedSupplementalGroups(constraint) + requiresNamespaceAllocations := resolveUIDRange || resolveSELinuxLevel || resolveFSGroup || resolveSupplementalGroups + + if requiresNamespaceAllocations { + // Ensure we have the namespace + namespace, err = getNamespaceByName(ns, namespace, client) + if err != nil { + return nil, namespace, fmt.Errorf("error fetching namespace %s required to preallocate values for %s: %v", ns, constraint.Name, err) + } + } + + // Make a copy of the constraint so we don't mutate the store's cache + constraint = constraint.DeepCopy() + + // Resolve the values from the namespace + if resolveUIDRange { + constraint.RunAsUser.UIDRangeMin, constraint.RunAsUser.UIDRangeMax, err = getPreallocatedUIDRange(namespace) + if err != nil { + return nil, namespace, fmt.Errorf("unable to find pre-allocated uid annotation for namespace %s while trying to configure SCC %s: %v", namespace.Name, constraint.Name, err) + } + } + if resolveSELinuxLevel { + var level string + if level, err = getPreallocatedLevel(namespace); err != nil { + return nil, namespace, fmt.Errorf("unable to find pre-allocated mcs annotation for namespace %s while trying to configure SCC %s: %v", namespace.Name, constraint.Name, err) + } + + if constraint.SELinuxContext.SELinuxOptions == nil { + constraint.SELinuxContext.SELinuxOptions = &corev1.SELinuxOptions{} + } + constraint.SELinuxContext.SELinuxOptions.Level = level + } + if resolveFSGroup { + fsGroup, err := getPreallocatedFSGroup(namespace) + if err != nil { + return nil, namespace, fmt.Errorf("unable to find pre-allocated group annotation for namespace %s while trying to configure SCC %s: %v", namespace.Name, constraint.Name, err) + } + constraint.FSGroup.Ranges = fsGroup + } + if resolveSupplementalGroups { + supplementalGroups, err := getPreallocatedSupplementalGroups(namespace) + if err != nil { + return nil, namespace, fmt.Errorf("unable to find pre-allocated group annotation for namespace %s while trying to configure SCC %s: %v", namespace.Name, constraint.Name, err) + } + constraint.SupplementalGroups.Ranges = supplementalGroups + } + + // Create the provider + provider, err := NewSimpleProvider(constraint) + if err != nil { + return nil, namespace, fmt.Errorf("error creating provider for SCC %s in namespace %s: %v", constraint.Name, ns, err) + } + return provider, namespace, nil +} + +// getPreallocatedUIDRange retrieves the annotated value from the namespace, splits it to make +// the min/max and formats the data into the necessary types for the strategy options. +func getPreallocatedUIDRange(ns *corev1.Namespace) (*int64, *int64, error) { + annotationVal, ok := ns.Annotations[securityv1.UIDRangeAnnotation] + if !ok { + return nil, nil, fmt.Errorf("unable to find annotation %s", securityv1.UIDRangeAnnotation) + } + if len(annotationVal) == 0 { + return nil, nil, fmt.Errorf("found annotation %s but it was empty", securityv1.UIDRangeAnnotation) + } + uidBlock, err := uid.ParseBlock(annotationVal) + if err != nil { + return nil, nil, err + } + + var min int64 = int64(uidBlock.Start) + var max int64 = int64(uidBlock.End) + klog.V(4).Infof("got preallocated values for min: %d, max: %d for uid range in namespace %s", min, max, ns.Name) + return &min, &max, nil +} + +// getPreallocatedLevel gets the annotated value from the namespace. +func getPreallocatedLevel(ns *corev1.Namespace) (string, error) { + level, ok := ns.Annotations[securityv1.MCSAnnotation] + if !ok { + return "", fmt.Errorf("unable to find annotation %s", securityv1.MCSAnnotation) + } + if len(level) == 0 { + return "", fmt.Errorf("found annotation %s but it was empty", securityv1.MCSAnnotation) + } + klog.V(4).Infof("got preallocated value for level: %s for selinux options in namespace %s", level, ns.Name) + return level, nil +} + +// getSupplementalGroupsAnnotation provides a backwards compatible way to get supplemental groups +// annotations from a namespace by looking for SupplementalGroupsAnnotation and falling back to +// UIDRangeAnnotation if it is not found. +func getSupplementalGroupsAnnotation(ns *corev1.Namespace) (string, error) { + groups, ok := ns.Annotations[securityv1.SupplementalGroupsAnnotation] + if !ok { + klog.V(4).Infof("unable to find supplemental group annotation %s falling back to %s", securityv1.SupplementalGroupsAnnotation, securityv1.UIDRangeAnnotation) + + groups, ok = ns.Annotations[securityv1.UIDRangeAnnotation] + if !ok { + return "", fmt.Errorf("unable to find supplemental group or uid annotation for namespace %s", ns.Name) + } + } + + if len(groups) == 0 { + return "", fmt.Errorf("unable to find groups using %s and %s annotations", securityv1.SupplementalGroupsAnnotation, securityv1.UIDRangeAnnotation) + } + return groups, nil +} + +// getPreallocatedFSGroup gets the annotated value from the namespace. +func getPreallocatedFSGroup(ns *corev1.Namespace) ([]securityv1.IDRange, error) { + groups, err := getSupplementalGroupsAnnotation(ns) + if err != nil { + return nil, err + } + klog.V(4).Infof("got preallocated value for groups: %s in namespace %s", groups, ns.Name) + + blocks, err := parseSupplementalGroupAnnotation(groups) + if err != nil { + return nil, err + } + return []securityv1.IDRange{ + { + Min: int64(blocks[0].Start), + Max: int64(blocks[0].Start), + }, + }, nil +} + +// getPreallocatedSupplementalGroups gets the annotated value from the namespace. +func getPreallocatedSupplementalGroups(ns *corev1.Namespace) ([]securityv1.IDRange, error) { + groups, err := getSupplementalGroupsAnnotation(ns) + if err != nil { + return nil, err + } + klog.V(4).Infof("got preallocated value for groups: %s in namespace %s", groups, ns.Name) + + blocks, err := parseSupplementalGroupAnnotation(groups) + if err != nil { + return nil, err + } + + idRanges := []securityv1.IDRange{} + for _, block := range blocks { + rng := securityv1.IDRange{ + Min: int64(block.Start), + Max: int64(block.End), + } + idRanges = append(idRanges, rng) + } + return idRanges, nil +} + +// parseSupplementalGroupAnnotation parses the group annotation into blocks. +func parseSupplementalGroupAnnotation(groups string) ([]uid.Block, error) { + blocks := []uid.Block{} + segments := strings.Split(groups, ",") + for _, segment := range segments { + block, err := uid.ParseBlock(segment) + if err != nil { + return nil, err + } + blocks = append(blocks, block) + } + if len(blocks) == 0 { + return nil, fmt.Errorf("no blocks parsed from annotation %s", groups) + } + return blocks, nil +} + +// requiresPreAllocatedUIDRange returns true if the strategy is must run in range and the min or max +// is not set. +func requiresPreAllocatedUIDRange(constraint *securityv1.SecurityContextConstraints) bool { + if constraint.RunAsUser.Type != securityv1.RunAsUserStrategyMustRunAsRange { + return false + } + return constraint.RunAsUser.UIDRangeMin == nil && constraint.RunAsUser.UIDRangeMax == nil +} + +// requiresPreAllocatedSELinuxLevel returns true if the strategy is must run as and the level is not set. +func requiresPreAllocatedSELinuxLevel(constraint *securityv1.SecurityContextConstraints) bool { + if constraint.SELinuxContext.Type != securityv1.SELinuxStrategyMustRunAs { + return false + } + if constraint.SELinuxContext.SELinuxOptions == nil { + return true + } + return constraint.SELinuxContext.SELinuxOptions.Level == "" +} + +// requiresPreAllocatedSELinuxLevel returns true if the strategy is must run as and there is no +// range specified. +func requiresPreallocatedSupplementalGroups(constraint *securityv1.SecurityContextConstraints) bool { + if constraint.SupplementalGroups.Type != securityv1.SupplementalGroupsStrategyMustRunAs { + return false + } + return len(constraint.SupplementalGroups.Ranges) == 0 +} + +// requiresPreallocatedFSGroup returns true if the strategy is must run as and there is no +// range specified. +func requiresPreallocatedFSGroup(constraint *securityv1.SecurityContextConstraints) bool { + if constraint.FSGroup.Type != securityv1.FSGroupStrategyMustRunAs { + return false + } + return len(constraint.FSGroup.Ranges) == 0 +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccmatching/provider.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccmatching/provider.go new file mode 100644 index 0000000000000..5428d375dae75 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccmatching/provider.go @@ -0,0 +1,436 @@ +package sccmatching + +import ( + "fmt" + + securityv1 "github.com/openshift/api/security/v1" + "github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/capabilities" + "github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/group" + "github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/seccomp" + "github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux" + "github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user" + sccutil "github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/security/podsecuritypolicy/sysctl" + "k8s.io/kubernetes/pkg/securitycontext" + "k8s.io/kubernetes/pkg/util/maps" +) + +// used to pass in the field being validated for reusable group strategies so they +// can create informative error messages. +const ( + fsGroupField = "fsGroup" + supplementalGroupsField = "supplementalGroups" +) + +// simpleProvider is the default implementation of SecurityContextConstraintsProvider +type simpleProvider struct { + scc *securityv1.SecurityContextConstraints + runAsUserStrategy user.RunAsUserSecurityContextConstraintsStrategy + seLinuxStrategy selinux.SELinuxSecurityContextConstraintsStrategy + fsGroupStrategy group.GroupSecurityContextConstraintsStrategy + supplementalGroupStrategy group.GroupSecurityContextConstraintsStrategy + capabilitiesStrategy capabilities.CapabilitiesSecurityContextConstraintsStrategy + seccompStrategy seccomp.SeccompStrategy + sysctlsStrategy sysctl.SysctlsStrategy +} + +// ensure we implement the interface correctly. +var _ SecurityContextConstraintsProvider = &simpleProvider{} + +// NewSimpleProvider creates a new SecurityContextConstraintsProvider instance. +func NewSimpleProvider(scc *securityv1.SecurityContextConstraints) (SecurityContextConstraintsProvider, error) { + if scc == nil { + return nil, fmt.Errorf("NewSimpleProvider requires a SecurityContextConstraints") + } + + userStrat, err := createUserStrategy(&scc.RunAsUser) + if err != nil { + return nil, err + } + + seLinuxStrat, err := createSELinuxStrategy(&scc.SELinuxContext) + if err != nil { + return nil, err + } + + fsGroupStrat, err := createFSGroupStrategy(&scc.FSGroup) + if err != nil { + return nil, err + } + + supGroupStrat, err := createSupplementalGroupStrategy(&scc.SupplementalGroups) + if err != nil { + return nil, err + } + + capStrat, err := createCapabilitiesStrategy(scc.DefaultAddCapabilities, scc.RequiredDropCapabilities, scc.AllowedCapabilities) + if err != nil { + return nil, err + } + + seccompStrat, err := createSeccompStrategy(scc.SeccompProfiles) + if err != nil { + return nil, err + } + + sysctlsStrat, err := createSysctlsStrategy(sysctl.SafeSysctlWhitelist(), scc.AllowedUnsafeSysctls, scc.ForbiddenSysctls) + if err != nil { + return nil, err + } + + return &simpleProvider{ + scc: scc, + runAsUserStrategy: userStrat, + seLinuxStrategy: seLinuxStrat, + fsGroupStrategy: fsGroupStrat, + supplementalGroupStrategy: supGroupStrat, + capabilitiesStrategy: capStrat, + seccompStrategy: seccompStrat, + sysctlsStrategy: sysctlsStrat, + }, nil +} + +// Create a PodSecurityContext based on the given constraints. If a setting is already set +// on the PodSecurityContext it will not be changed. Validate should be used after the context +// is created to ensure it complies with the required restrictions. +func (s *simpleProvider) CreatePodSecurityContext(pod *api.Pod) (*api.PodSecurityContext, map[string]string, error) { + sc := securitycontext.NewPodSecurityContextMutator(pod.Spec.SecurityContext) + + annotationsCopy := maps.CopySS(pod.Annotations) + + if sc.SupplementalGroups() == nil { + supGroups, err := s.supplementalGroupStrategy.Generate(pod) + if err != nil { + return nil, nil, err + } + sc.SetSupplementalGroups(supGroups) + } + + if sc.FSGroup() == nil { + fsGroup, err := s.fsGroupStrategy.GenerateSingle(pod) + if err != nil { + return nil, nil, err + } + sc.SetFSGroup(fsGroup) + } + + if sc.SELinuxOptions() == nil { + seLinux, err := s.seLinuxStrategy.Generate(pod, nil) + if err != nil { + return nil, nil, err + } + sc.SetSELinuxOptions(seLinux) + } + + // we only generate a seccomp annotation for the entire pod. Validation + // will catch any container annotations that are invalid and containers + // will inherit the pod annotation. + _, hasPodProfile := pod.Annotations[api.SeccompPodAnnotationKey] + if !hasPodProfile { + profile, err := s.seccompStrategy.Generate(pod) + if err != nil { + return nil, nil, err + } + + if profile != "" { + if annotationsCopy == nil { + annotationsCopy = map[string]string{} + } + annotationsCopy[api.SeccompPodAnnotationKey] = profile + } + } + + return sc.PodSecurityContext(), annotationsCopy, nil +} + +// Create a SecurityContext based on the given constraints. If a setting is already set on the +// container's security context then it will not be changed. Validation should be used after +// the context is created to ensure it complies with the required restrictions. +func (s *simpleProvider) CreateContainerSecurityContext(pod *api.Pod, container *api.Container) (*api.SecurityContext, error) { + sc := securitycontext.NewEffectiveContainerSecurityContextMutator( + securitycontext.NewPodSecurityContextAccessor(pod.Spec.SecurityContext), + securitycontext.NewContainerSecurityContextMutator(container.SecurityContext), + ) + if sc.RunAsUser() == nil { + uid, err := s.runAsUserStrategy.Generate(pod, container) + if err != nil { + return nil, err + } + sc.SetRunAsUser(uid) + } + + if sc.SELinuxOptions() == nil { + seLinux, err := s.seLinuxStrategy.Generate(pod, container) + if err != nil { + return nil, err + } + sc.SetSELinuxOptions(seLinux) + } + + // if we're using the non-root strategy set the marker that this container should not be + // run as root which will signal to the kubelet to do a final check either on the runAsUser + // or, if runAsUser is not set, the image + if sc.RunAsNonRoot() == nil && sc.RunAsUser() == nil && s.scc.RunAsUser.Type == securityv1.RunAsUserStrategyMustRunAsNonRoot { + nonRoot := true + sc.SetRunAsNonRoot(&nonRoot) + } + + caps, err := s.capabilitiesStrategy.Generate(pod, container) + if err != nil { + return nil, err + } + sc.SetCapabilities(caps) + + // if the SCC requires a read only root filesystem and the container has not made a specific + // request then default ReadOnlyRootFilesystem to true. + if s.scc.ReadOnlyRootFilesystem && sc.ReadOnlyRootFilesystem() == nil { + readOnlyRootFS := true + sc.SetReadOnlyRootFilesystem(&readOnlyRootFS) + } + + // if the SCC sets DefaultAllowPrivilegeEscalation and the container security context + // allowPrivilegeEscalation is not set, then default to that set by the SCC. + if s.scc.DefaultAllowPrivilegeEscalation != nil && sc.AllowPrivilegeEscalation() == nil { + sc.SetAllowPrivilegeEscalation(s.scc.DefaultAllowPrivilegeEscalation) + } + + // if the SCC sets AllowPrivilegeEscalation to false set that as the default + if s.scc.AllowPrivilegeEscalation != nil && !*s.scc.AllowPrivilegeEscalation && sc.AllowPrivilegeEscalation() == nil { + sc.SetAllowPrivilegeEscalation(s.scc.AllowPrivilegeEscalation) + } + + return sc.ContainerSecurityContext(), nil +} + +// Ensure a pod's SecurityContext is in compliance with the given constraints. +func (s *simpleProvider) ValidatePodSecurityContext(pod *api.Pod, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + sc := securitycontext.NewPodSecurityContextAccessor(pod.Spec.SecurityContext) + + fsGroups := []int64{} + if fsGroup := sc.FSGroup(); fsGroup != nil { + fsGroups = append(fsGroups, *fsGroup) + } + allErrs = append(allErrs, s.fsGroupStrategy.Validate(fldPath, pod, fsGroups)...) + allErrs = append(allErrs, s.supplementalGroupStrategy.Validate(fldPath, pod, sc.SupplementalGroups())...) + allErrs = append(allErrs, s.seccompStrategy.ValidatePod(pod)...) + + allErrs = append(allErrs, s.seLinuxStrategy.Validate(fldPath.Child("seLinuxOptions"), pod, nil, sc.SELinuxOptions())...) + + if !s.scc.AllowHostNetwork && sc.HostNetwork() { + allErrs = append(allErrs, field.Invalid(fldPath.Child("hostNetwork"), sc.HostNetwork(), "Host network is not allowed to be used")) + } + + if !s.scc.AllowHostPID && sc.HostPID() { + allErrs = append(allErrs, field.Invalid(fldPath.Child("hostPID"), sc.HostPID(), "Host PID is not allowed to be used")) + } + + if !s.scc.AllowHostIPC && sc.HostIPC() { + allErrs = append(allErrs, field.Invalid(fldPath.Child("hostIPC"), sc.HostIPC(), "Host IPC is not allowed to be used")) + } + + allErrs = append(allErrs, s.sysctlsStrategy.Validate(pod)...) + + if len(pod.Spec.Volumes) > 0 && !sccutil.SCCAllowsAllVolumes(s.scc) { + allowedVolumes := sccutil.FSTypeToStringSetInternal(s.scc.Volumes) + for i, v := range pod.Spec.Volumes { + fsType, err := sccutil.GetVolumeFSType(v) + if err != nil { + allErrs = append(allErrs, field.Invalid(field.NewPath("spec", "volumes").Index(i), string(fsType), err.Error())) + continue + } + + if !allowedVolumes.Has(string(fsType)) { + allErrs = append(allErrs, field.Invalid( + field.NewPath("spec", "volumes").Index(i), string(fsType), + fmt.Sprintf("%s volumes are not allowed to be used", string(fsType)))) + } + } + } + + if len(pod.Spec.Volumes) > 0 && len(s.scc.AllowedFlexVolumes) > 0 && sccutil.SCCAllowsFSTypeInternal(s.scc, securityv1.FSTypeFlexVolume) { + for i, v := range pod.Spec.Volumes { + if v.FlexVolume == nil { + continue + } + + found := false + driver := v.FlexVolume.Driver + for _, allowedFlexVolume := range s.scc.AllowedFlexVolumes { + if driver == allowedFlexVolume.Driver { + found = true + break + } + } + if !found { + allErrs = append(allErrs, + field.Invalid(fldPath.Child("volumes").Index(i).Child("driver"), driver, + "Flexvolume driver is not allowed to be used")) + } + } + } + + return allErrs +} + +// Ensure a container's SecurityContext is in compliance with the given constraints +func (s *simpleProvider) ValidateContainerSecurityContext(pod *api.Pod, container *api.Container, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + podSC := securitycontext.NewPodSecurityContextAccessor(pod.Spec.SecurityContext) + sc := securitycontext.NewEffectiveContainerSecurityContextAccessor(podSC, securitycontext.NewContainerSecurityContextMutator(container.SecurityContext)) + + allErrs = append(allErrs, s.runAsUserStrategy.Validate(fldPath, pod, container, sc.RunAsNonRoot(), sc.RunAsUser())...) + allErrs = append(allErrs, s.seLinuxStrategy.Validate(fldPath.Child("seLinuxOptions"), pod, container, sc.SELinuxOptions())...) + allErrs = append(allErrs, s.seccompStrategy.ValidateContainer(pod, container)...) + + privileged := sc.Privileged() + if !s.scc.AllowPrivilegedContainer && privileged != nil && *privileged { + allErrs = append(allErrs, field.Invalid(fldPath.Child("privileged"), *privileged, "Privileged containers are not allowed")) + } + + allErrs = append(allErrs, s.capabilitiesStrategy.Validate(fldPath, pod, container, sc.Capabilities())...) + + if !s.scc.AllowHostNetwork && podSC.HostNetwork() { + allErrs = append(allErrs, field.Invalid(fldPath.Child("hostNetwork"), podSC.HostNetwork(), "Host network is not allowed to be used")) + } + + if !s.scc.AllowHostPorts { + containersPath := fldPath.Child("containers") + for idx, c := range pod.Spec.Containers { + idxPath := containersPath.Index(idx) + allErrs = append(allErrs, s.hasHostPort(&c, idxPath)...) + } + + containersPath = fldPath.Child("initContainers") + for idx, c := range pod.Spec.InitContainers { + idxPath := containersPath.Index(idx) + allErrs = append(allErrs, s.hasHostPort(&c, idxPath)...) + } + } + + if !s.scc.AllowHostPID && podSC.HostPID() { + allErrs = append(allErrs, field.Invalid(fldPath.Child("hostPID"), podSC.HostPID(), "Host PID is not allowed to be used")) + } + + if !s.scc.AllowHostIPC && podSC.HostIPC() { + allErrs = append(allErrs, field.Invalid(fldPath.Child("hostIPC"), podSC.HostIPC(), "Host IPC is not allowed to be used")) + } + + if s.scc.ReadOnlyRootFilesystem { + readOnly := sc.ReadOnlyRootFilesystem() + if readOnly == nil { + allErrs = append(allErrs, field.Invalid(fldPath.Child("readOnlyRootFilesystem"), readOnly, "ReadOnlyRootFilesystem may not be nil and must be set to true")) + } else if !*readOnly { + allErrs = append(allErrs, field.Invalid(fldPath.Child("readOnlyRootFilesystem"), *readOnly, "ReadOnlyRootFilesystem must be set to true")) + } + } + + allowEscalation := sc.AllowPrivilegeEscalation() + if s.scc.AllowPrivilegeEscalation != nil && !*s.scc.AllowPrivilegeEscalation { + if allowEscalation == nil { + allErrs = append(allErrs, field.Invalid(fldPath.Child("allowPrivilegeEscalation"), allowEscalation, "Allowing privilege escalation for containers is not allowed")) + } + + if allowEscalation != nil && *allowEscalation { + allErrs = append(allErrs, field.Invalid(fldPath.Child("allowPrivilegeEscalation"), *allowEscalation, "Allowing privilege escalation for containers is not allowed")) + } + } + + return allErrs +} + +// hasHostPort checks the port definitions on the container for HostPort > 0. +func (s *simpleProvider) hasHostPort(container *api.Container, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for _, cp := range container.Ports { + if cp.HostPort > 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("hostPort"), cp.HostPort, "Host ports are not allowed to be used")) + } + } + return allErrs +} + +// Get the name of the SCC that this provider was initialized with. +func (s *simpleProvider) GetSCCName() string { + return s.scc.Name +} + +func (s *simpleProvider) GetSCCUsers() []string { + return s.scc.Users +} + +func (s *simpleProvider) GetSCCGroups() []string { + return s.scc.Groups +} + +// createUserStrategy creates a new user strategy. +func createUserStrategy(opts *securityv1.RunAsUserStrategyOptions) (user.RunAsUserSecurityContextConstraintsStrategy, error) { + switch opts.Type { + case securityv1.RunAsUserStrategyMustRunAs: + return user.NewMustRunAs(opts) + case securityv1.RunAsUserStrategyMustRunAsRange: + return user.NewMustRunAsRange(opts) + case securityv1.RunAsUserStrategyMustRunAsNonRoot: + return user.NewRunAsNonRoot(opts) + case securityv1.RunAsUserStrategyRunAsAny: + return user.NewRunAsAny(opts) + default: + return nil, fmt.Errorf("Unrecognized RunAsUser strategy type %s", opts.Type) + } +} + +// createSELinuxStrategy creates a new selinux strategy. +func createSELinuxStrategy(opts *securityv1.SELinuxContextStrategyOptions) (selinux.SELinuxSecurityContextConstraintsStrategy, error) { + switch opts.Type { + case securityv1.SELinuxStrategyMustRunAs: + return selinux.NewMustRunAs(opts) + case securityv1.SELinuxStrategyRunAsAny: + return selinux.NewRunAsAny(opts) + default: + return nil, fmt.Errorf("Unrecognized SELinuxContext strategy type %s", opts.Type) + } +} + +// createFSGroupStrategy creates a new fsgroup strategy +func createFSGroupStrategy(opts *securityv1.FSGroupStrategyOptions) (group.GroupSecurityContextConstraintsStrategy, error) { + switch opts.Type { + case securityv1.FSGroupStrategyRunAsAny: + return group.NewRunAsAny() + case securityv1.FSGroupStrategyMustRunAs: + return group.NewMustRunAs(opts.Ranges, fsGroupField) + default: + return nil, fmt.Errorf("Unrecognized FSGroup strategy type %s", opts.Type) + } +} + +// createSupplementalGroupStrategy creates a new supplemental group strategy +func createSupplementalGroupStrategy(opts *securityv1.SupplementalGroupsStrategyOptions) (group.GroupSecurityContextConstraintsStrategy, error) { + switch opts.Type { + case securityv1.SupplementalGroupsStrategyRunAsAny: + return group.NewRunAsAny() + case securityv1.SupplementalGroupsStrategyMustRunAs: + return group.NewMustRunAs(opts.Ranges, supplementalGroupsField) + default: + return nil, fmt.Errorf("Unrecognized SupplementalGroups strategy type %s", opts.Type) + } +} + +// createCapabilitiesStrategy creates a new capabilities strategy. +func createCapabilitiesStrategy(defaultAddCaps, requiredDropCaps, allowedCaps []corev1.Capability) (capabilities.CapabilitiesSecurityContextConstraintsStrategy, error) { + return capabilities.NewDefaultCapabilities(defaultAddCaps, requiredDropCaps, allowedCaps) +} + +// createSeccompStrategy creates a new seccomp strategy +func createSeccompStrategy(allowedProfiles []string) (seccomp.SeccompStrategy, error) { + return seccomp.NewWithSeccompProfile(allowedProfiles) +} + +// createSysctlsStrategy creates a new sysctls strategy +func createSysctlsStrategy(safeWhitelist, allowedUnsafeSysctls, forbiddenSysctls []string) (sysctl.SysctlsStrategy, error) { + return sysctl.NewMustMatchPatterns(safeWhitelist, allowedUnsafeSysctls, forbiddenSysctls), nil +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccmatching/types.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccmatching/types.go new file mode 100644 index 0000000000000..40747bf860f3b --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccmatching/types.go @@ -0,0 +1,25 @@ +package sccmatching + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" +) + +// SecurityContextConstraintsProvider provides the implementation to generate a new security +// context based on constraints or validate an existing security context against constraints. +type SecurityContextConstraintsProvider interface { + // Create a PodSecurityContext based on the given constraints. + CreatePodSecurityContext(pod *api.Pod) (*api.PodSecurityContext, map[string]string, error) + // Create a container SecurityContext based on the given constraints + CreateContainerSecurityContext(pod *api.Pod, container *api.Container) (*api.SecurityContext, error) + // Ensure a pod's SecurityContext is in compliance with the given constraints. + ValidatePodSecurityContext(pod *api.Pod, fldPath *field.Path) field.ErrorList + // Ensure a container's SecurityContext is in compliance with the given constraints + ValidateContainerSecurityContext(pod *api.Pod, container *api.Container, fldPath *field.Path) field.ErrorList + // Get the name of the SCC that this provider was initialized with. + GetSCCName() string + // Get the users associated to the SCC this provider was initialized with + GetSCCUsers() []string + // Get the groups associated to the SCC this provider was initialized with + GetSCCGroups() []string +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/seccomp/types.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/seccomp/types.go new file mode 100644 index 0000000000000..046fff560b607 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/seccomp/types.go @@ -0,0 +1,18 @@ +package seccomp + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" +) + +// SeccompStrategy defines the interface for all seccomp constraint strategies. +type SeccompStrategy interface { + // Generate creates the profile based on policy rules. + Generate(pod *api.Pod) (string, error) + // ValidatePod ensures that the specified values on the pod fall within the range + // of the strategy. + ValidatePod(pod *api.Pod) field.ErrorList + // ValidateContainer ensures that the specified values on the container fall within + // the range of the strategy. + ValidateContainer(pod *api.Pod, container *api.Container) field.ErrorList +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/seccomp/withseccomp.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/seccomp/withseccomp.go new file mode 100644 index 0000000000000..4e28169802c08 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/seccomp/withseccomp.go @@ -0,0 +1,113 @@ +package seccomp + +import ( + "fmt" + + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" +) + +const ( + allowAnyProfile = "*" +) + +// withSeccompProfile implements the SeccompStrategy. +type withSeccompProfile struct { + allowedProfiles []string +} + +var _ SeccompStrategy = &withSeccompProfile{} + +// NewWithSeccompProfile creates a new must run as strategy or returns an error if it cannot +// be created. +func NewWithSeccompProfile(allowedProfiles []string) (SeccompStrategy, error) { + return &withSeccompProfile{allowedProfiles}, nil +} + +// Generate creates the profile based on policy rules. +func (s *withSeccompProfile) Generate(pod *api.Pod) (string, error) { + // return the first non-wildcard profile + for _, p := range s.allowedProfiles { + if p != allowAnyProfile { + return p, nil + } + } + // if we reached this point then either there are no allowed profiles (empty slice) + // or the only thing in the slice is the wildcard. In either case just return empty + // which means use the runtime default. + return "", nil +} + +// ValidatePod ensures that the specified values on the pod fall within the range +// of the strategy. +func (s *withSeccompProfile) ValidatePod(pod *api.Pod) field.ErrorList { + allErrs := field.ErrorList{} + fieldPath := field.NewPath("pod", "metadata", "annotations", api.SeccompPodAnnotationKey) + + podProfile, _ := pod.Annotations[api.SeccompPodAnnotationKey] + + if len(s.allowedProfiles) == 0 && podProfile != "" { + + allErrs = append(allErrs, field.Forbidden(fieldPath, "seccomp may not be set")) + return allErrs + } + + if !isProfileAllowed(podProfile, s.allowedProfiles) { + msg := fmt.Sprintf("%s is not a valid seccomp profile. Valid values are %v", podProfile, s.allowedProfiles) + allErrs = append(allErrs, field.Forbidden(fieldPath, msg)) + } + + return allErrs +} + +// ValidateContainer ensures that the specified values on the container fall within +// the range of the strategy. +func (s *withSeccompProfile) ValidateContainer(pod *api.Pod, container *api.Container) field.ErrorList { + allErrs := field.ErrorList{} + fieldPath := field.NewPath("pod", "metadata", "annotations", api.SeccompContainerAnnotationKeyPrefix+container.Name) + + // container inherits the pod profile if not set. TODO: when this is a field this can be removed and it should + // be accounted for in DetermineEffectiveSecurityContext + containerProfile := profileForContainer(pod, container) + + if len(s.allowedProfiles) == 0 && containerProfile != "" { + allErrs = append(allErrs, field.Forbidden(fieldPath, "seccomp may not be set")) + return allErrs + } + + if !isProfileAllowed(containerProfile, s.allowedProfiles) { + msg := fmt.Sprintf("%s is not a valid seccomp profile. Valid values are %v", containerProfile, s.allowedProfiles) + allErrs = append(allErrs, field.Forbidden(fieldPath, msg)) + } + + return allErrs +} + +// isProfileAllowed checks if profile is in allowedProfiles or if allowedProfiles +// contains the wildcard. +func isProfileAllowed(profile string, allowedProfiles []string) bool { + // for backwards compatibility and PSPs without a defined list of allowed profiles. + // If a PSP does not have allowedProfiles set then we should allow an empty profile. + // This will mean that the runtime default is used. + if len(allowedProfiles) == 0 && profile == "" { + return true + } + + for _, p := range allowedProfiles { + if profile == p || p == allowAnyProfile { + return true + } + } + return false +} + +// profileForContainer returns the container profile or the pod profile if the container annotatation is not set. +// If the container profile is set but empty then empty will be returned. This mirrors the functionality in the +// kubelet's docker tools. +func profileForContainer(pod *api.Pod, container *api.Container) string { + containerProfile, hasContainerProfile := pod.Annotations[api.SeccompContainerAnnotationKeyPrefix+container.Name] + if hasContainerProfile { + return containerProfile + } + return pod.Annotations[api.SeccompPodAnnotationKey] +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/convert.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/convert.go new file mode 100644 index 0000000000000..f11900ef22e2a --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/convert.go @@ -0,0 +1,24 @@ +package selinux + +import ( + corev1 "k8s.io/api/core/v1" + coreapi "k8s.io/kubernetes/pkg/apis/core" + corev1conversions "k8s.io/kubernetes/pkg/apis/core/v1" +) + +func ToInternalSELinuxOptions(external *corev1.SELinuxOptions) (*coreapi.SELinuxOptions, error) { + if external == nil { + return nil, nil + } + internal := &coreapi.SELinuxOptions{} + err := corev1conversions.Convert_v1_SELinuxOptions_To_core_SELinuxOptions(external, internal, nil) + return internal, err +} + +func ToInternalSELinuxOptionsOrDie(external *corev1.SELinuxOptions) *coreapi.SELinuxOptions { + ret, err := ToInternalSELinuxOptions(external) + if err != nil { + panic(err) + } + return ret +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/doc.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/doc.go new file mode 100644 index 0000000000000..4ec01e969b00b --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/doc.go @@ -0,0 +1,2 @@ +// Package selinux contains security context constraints SELinux strategy implementations. +package selinux diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/mustrunas.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/mustrunas.go new file mode 100644 index 0000000000000..9e3b319b81d5a --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/mustrunas.go @@ -0,0 +1,105 @@ +package selinux + +import ( + "fmt" + "sort" + "strings" + + "k8s.io/apimachinery/pkg/util/validation/field" + coreapi "k8s.io/kubernetes/pkg/apis/core" + + securityv1 "github.com/openshift/api/security/v1" + "github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util" +) + +type mustRunAs struct { + opts *securityv1.SELinuxContextStrategyOptions +} + +var _ SELinuxSecurityContextConstraintsStrategy = &mustRunAs{} + +func NewMustRunAs(options *securityv1.SELinuxContextStrategyOptions) (SELinuxSecurityContextConstraintsStrategy, error) { + if options == nil { + return nil, fmt.Errorf("MustRunAs requires SELinuxContextStrategyOptions") + } + if options.SELinuxOptions == nil { + return nil, fmt.Errorf("MustRunAs requires SELinuxOptions") + } + return &mustRunAs{ + opts: options, + }, nil +} + +// Generate creates the SELinuxOptions based on constraint rules. +func (s *mustRunAs) Generate(_ *coreapi.Pod, _ *coreapi.Container) (*coreapi.SELinuxOptions, error) { + return ToInternalSELinuxOptions(s.opts.SELinuxOptions) +} + +// Validate ensures that the specified values fall within the range of the strategy. +func (s *mustRunAs) Validate(fldPath *field.Path, _ *coreapi.Pod, _ *coreapi.Container, seLinux *coreapi.SELinuxOptions) field.ErrorList { + allErrs := field.ErrorList{} + + if seLinux == nil { + allErrs = append(allErrs, field.Required(fldPath, "")) + return allErrs + } + if !equalLevels(s.opts.SELinuxOptions.Level, seLinux.Level) { + detail := fmt.Sprintf("must be %s", s.opts.SELinuxOptions.Level) + allErrs = append(allErrs, field.Invalid(fldPath.Child("level"), seLinux.Level, detail)) + } + if seLinux.Role != s.opts.SELinuxOptions.Role { + detail := fmt.Sprintf("must be %s", s.opts.SELinuxOptions.Role) + allErrs = append(allErrs, field.Invalid(fldPath.Child("role"), seLinux.Role, detail)) + } + if seLinux.Type != s.opts.SELinuxOptions.Type { + detail := fmt.Sprintf("must be %s", s.opts.SELinuxOptions.Type) + allErrs = append(allErrs, field.Invalid(fldPath.Child("type"), seLinux.Type, detail)) + } + if seLinux.User != s.opts.SELinuxOptions.User { + detail := fmt.Sprintf("must be %s", s.opts.SELinuxOptions.User) + allErrs = append(allErrs, field.Invalid(fldPath.Child("user"), seLinux.User, detail)) + } + + return allErrs +} + +// equalLevels compares SELinux levels for equality. +func equalLevels(expected, actual string) bool { + if expected == actual { + return true + } + // "s0:c6,c0" => [ "s0", "c6,c0" ] + expectedParts := strings.SplitN(expected, ":", 2) + actualParts := strings.SplitN(actual, ":", 2) + + // both SELinux levels must be in a format "sX:cY" + if len(expectedParts) != 2 || len(actualParts) != 2 { + return false + } + + if !equalSensitivity(expectedParts[0], actualParts[0]) { + return false + } + + if !equalCategories(expectedParts[1], actualParts[1]) { + return false + } + + return true +} + +// equalSensitivity compares sensitivities of the SELinux levels for equality. +func equalSensitivity(expected, actual string) bool { + return expected == actual +} + +// equalCategories compares categories of the SELinux levels for equality. +func equalCategories(expected, actual string) bool { + expectedCategories := strings.Split(expected, ",") + actualCategories := strings.Split(actual, ",") + + sort.Strings(expectedCategories) + sort.Strings(actualCategories) + + return util.EqualStringSlices(expectedCategories, actualCategories) +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/runasany.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/runasany.go new file mode 100644 index 0000000000000..95adb503628cb --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/runasany.go @@ -0,0 +1,28 @@ +package selinux + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + coreapi "k8s.io/kubernetes/pkg/apis/core" + + securityv1 "github.com/openshift/api/security/v1" +) + +// runAsAny implements the SELinuxSecurityContextConstraintsStrategy interface. +type runAsAny struct{} + +var _ SELinuxSecurityContextConstraintsStrategy = &runAsAny{} + +// NewRunAsAny provides a strategy that will return the configured se linux context or nil. +func NewRunAsAny(options *securityv1.SELinuxContextStrategyOptions) (SELinuxSecurityContextConstraintsStrategy, error) { + return &runAsAny{}, nil +} + +// Generate creates the SELinuxOptions based on constraint rules. +func (s *runAsAny) Generate(pod *coreapi.Pod, container *coreapi.Container) (*coreapi.SELinuxOptions, error) { + return nil, nil +} + +// Validate ensures that the specified values fall within the range of the strategy. +func (s *runAsAny) Validate(fldPath *field.Path, _ *coreapi.Pod, _ *coreapi.Container, options *coreapi.SELinuxOptions) field.ErrorList { + return field.ErrorList{} +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/types.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/types.go new file mode 100644 index 0000000000000..4cd5f3e8f2b5a --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux/types.go @@ -0,0 +1,14 @@ +package selinux + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + coreapi "k8s.io/kubernetes/pkg/apis/core" +) + +// SELinuxSecurityContextConstraintsStrategy defines the interface for all SELinux constraint strategies. +type SELinuxSecurityContextConstraintsStrategy interface { + // Generate creates the SELinuxOptions based on constraint rules. + Generate(pod *coreapi.Pod, container *coreapi.Container) (*coreapi.SELinuxOptions, error) + // Validate ensures that the specified values fall within the range of the strategy. + Validate(fldPath *field.Path, pod *coreapi.Pod, container *coreapi.Container, options *coreapi.SELinuxOptions) field.ErrorList +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/doc.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/doc.go new file mode 100644 index 0000000000000..f28032767eba0 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/doc.go @@ -0,0 +1,2 @@ +// Package user contains security context constraints user strategy implementations. +package user diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/mustrunas.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/mustrunas.go new file mode 100644 index 0000000000000..455d7f8def1b2 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/mustrunas.go @@ -0,0 +1,53 @@ +package user + +import ( + "fmt" + + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" + + securityv1 "github.com/openshift/api/security/v1" +) + +// mustRunAs implements the RunAsUserSecurityContextConstraintsStrategy interface +type mustRunAs struct { + opts *securityv1.RunAsUserStrategyOptions +} + +var _ RunAsUserSecurityContextConstraintsStrategy = &mustRunAs{} + +// NewMustRunAs provides a strategy that requires the container to run as a specific UID. +func NewMustRunAs(options *securityv1.RunAsUserStrategyOptions) (RunAsUserSecurityContextConstraintsStrategy, error) { + if options == nil { + return nil, fmt.Errorf("MustRunAs requires run as user options") + } + if options.UID == nil { + return nil, fmt.Errorf("MustRunAs requires a UID") + } + return &mustRunAs{ + opts: options, + }, nil +} + +// Generate creates the uid based on policy rules. MustRunAs returns the UID it is initialized with. +func (s *mustRunAs) Generate(pod *api.Pod, container *api.Container) (*int64, error) { + return s.opts.UID, nil +} + +// Validate ensures that the specified values fall within the range of the strategy. +func (s *mustRunAs) Validate(fldPath *field.Path, _ *api.Pod, _ *api.Container, runAsNonRoot *bool, runAsUser *int64) field.ErrorList { + allErrs := field.ErrorList{} + + if runAsUser == nil { + allErrs = append(allErrs, field.Required(fldPath.Child("runAsUser"), "")) + return allErrs + } + + if *s.opts.UID != *runAsUser { + detail := fmt.Sprintf("must be: %v", *s.opts.UID) + allErrs = append(allErrs, field.Invalid(fldPath.Child("runAsUser"), *runAsUser, detail)) + return allErrs + } + + return allErrs +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/mustrunasrange.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/mustrunasrange.go new file mode 100644 index 0000000000000..1ca709e2a43a8 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/mustrunasrange.go @@ -0,0 +1,56 @@ +package user + +import ( + "fmt" + + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" + + securityv1 "github.com/openshift/api/security/v1" +) + +// mustRunAsRange implements the RunAsUserSecurityContextConstraintsStrategy interface +type mustRunAsRange struct { + opts *securityv1.RunAsUserStrategyOptions +} + +var _ RunAsUserSecurityContextConstraintsStrategy = &mustRunAsRange{} + +// NewMustRunAsRange provides a strategy that requires the container to run as a specific UID in a range. +func NewMustRunAsRange(options *securityv1.RunAsUserStrategyOptions) (RunAsUserSecurityContextConstraintsStrategy, error) { + if options == nil { + return nil, fmt.Errorf("MustRunAsRange requires run as user options") + } + if options.UIDRangeMin == nil { + return nil, fmt.Errorf("MustRunAsRange requires a UIDRangeMin") + } + if options.UIDRangeMax == nil { + return nil, fmt.Errorf("MustRunAsRange requires a UIDRangeMax") + } + return &mustRunAsRange{ + opts: options, + }, nil +} + +// Generate creates the uid based on policy rules. MustRunAs returns the UIDRangeMin it is initialized with. +func (s *mustRunAsRange) Generate(pod *api.Pod, container *api.Container) (*int64, error) { + return s.opts.UIDRangeMin, nil +} + +// Validate ensures that the specified values fall within the range of the strategy. +func (s *mustRunAsRange) Validate(fldPath *field.Path, _ *api.Pod, _ *api.Container, runAsNonRoot *bool, runAsUser *int64) field.ErrorList { + allErrs := field.ErrorList{} + + if runAsUser == nil { + allErrs = append(allErrs, field.Required(fldPath.Child("runAsUser"), "")) + return allErrs + } + + if *runAsUser < *s.opts.UIDRangeMin || *runAsUser > *s.opts.UIDRangeMax { + detail := fmt.Sprintf("must be in the ranges: [%v, %v]", *s.opts.UIDRangeMin, *s.opts.UIDRangeMax) + allErrs = append(allErrs, field.Invalid(fldPath.Child("runAsUser"), *runAsUser, detail)) + return allErrs + } + + return allErrs +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/nonroot.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/nonroot.go new file mode 100644 index 0000000000000..52e27a3d83601 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/nonroot.go @@ -0,0 +1,43 @@ +package user + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" + + securityv1 "github.com/openshift/api/security/v1" +) + +type nonRoot struct{} + +var _ RunAsUserSecurityContextConstraintsStrategy = &nonRoot{} + +func NewRunAsNonRoot(options *securityv1.RunAsUserStrategyOptions) (RunAsUserSecurityContextConstraintsStrategy, error) { + return &nonRoot{}, nil +} + +// Generate creates the uid based on policy rules. This strategy does return a UID. It assumes +// that the user will specify a UID or the container image specifies a UID. +func (s *nonRoot) Generate(pod *api.Pod, container *api.Container) (*int64, error) { + return nil, nil +} + +// Validate ensures that the specified values fall within the range of the strategy. Validation +// of this will pass if either the UID is not set, assuming that the image will provided the UID +// or if the UID is set it is not root. In order to work properly this assumes that the kubelet +// will populate an +func (s *nonRoot) Validate(fldPath *field.Path, _ *api.Pod, _ *api.Container, runAsNonRoot *bool, runAsUser *int64) field.ErrorList { + allErrs := field.ErrorList{} + if runAsNonRoot == nil && runAsUser == nil { + allErrs = append(allErrs, field.Required(fldPath.Child("runAsNonRoot"), "must be true")) + return allErrs + } + if runAsNonRoot != nil && *runAsNonRoot == false { + allErrs = append(allErrs, field.Invalid(fldPath.Child("runAsNonRoot"), *runAsNonRoot, "must be true")) + return allErrs + } + if runAsUser != nil && *runAsUser == 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("runAsUser"), *runAsUser, "running with the root UID is forbidden")) + return allErrs + } + return allErrs +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/runasany.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/runasany.go new file mode 100644 index 0000000000000..f56505ed1d4cc --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/runasany.go @@ -0,0 +1,28 @@ +package user + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" + + securityv1 "github.com/openshift/api/security/v1" +) + +// runAsAny implements the interface RunAsUserSecurityContextConstraintsStrategy. +type runAsAny struct{} + +var _ RunAsUserSecurityContextConstraintsStrategy = &runAsAny{} + +// NewRunAsAny provides a strategy that will return nil. +func NewRunAsAny(options *securityv1.RunAsUserStrategyOptions) (RunAsUserSecurityContextConstraintsStrategy, error) { + return &runAsAny{}, nil +} + +// Generate creates the uid based on policy rules. +func (s *runAsAny) Generate(pod *api.Pod, container *api.Container) (*int64, error) { + return nil, nil +} + +// Validate ensures that the specified values fall within the range of the strategy. +func (s *runAsAny) Validate(fldPath *field.Path, _ *api.Pod, _ *api.Container, runAsNonRoot *bool, runAsUser *int64) field.ErrorList { + return field.ErrorList{} +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/types.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/types.go new file mode 100644 index 0000000000000..fd60d45fd1364 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user/types.go @@ -0,0 +1,14 @@ +package user + +import ( + "k8s.io/apimachinery/pkg/util/validation/field" + api "k8s.io/kubernetes/pkg/apis/core" +) + +// RunAsUserSecurityContextConstraintsStrategy defines the interface for all uid constraint strategies. +type RunAsUserSecurityContextConstraintsStrategy interface { + // Generate creates the uid based on policy rules. + Generate(pod *api.Pod, container *api.Container) (*int64, error) + // Validate ensures that the specified values fall within the range of the strategy. + Validate(fldPath *field.Path, pod *api.Pod, container *api.Container, runAsNonRoot *bool, runAsUser *int64) field.ErrorList +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util/sort/bypriority.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util/sort/bypriority.go new file mode 100644 index 0000000000000..2fb523b543c53 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util/sort/bypriority.go @@ -0,0 +1,54 @@ +package sort + +import ( + securityv1 "github.com/openshift/api/security/v1" +) + +// ByPriority is a helper to sort SCCs based on priority. If priorities are equal +// a string compare of the name is used. +type ByPriority []*securityv1.SecurityContextConstraints + +func (s ByPriority) Len() int { + return len(s) +} +func (s ByPriority) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s ByPriority) Less(i, j int) bool { + iSCC := s[i] + jSCC := s[j] + + iSCCPriority := getPriority(iSCC) + jSCCPriority := getPriority(jSCC) + + // a higher priority is considered "less" so that it moves to the front of the line + if iSCCPriority > jSCCPriority { + return true + } + + if iSCCPriority < jSCCPriority { + return false + } + + // priorities are equal, let's try point values + iRestrictionScore := pointValue(iSCC) + jRestrictionScore := pointValue(jSCC) + + // a lower restriction score is considered "less" so that it moves to the front of the line + // (the greater the score, the more lax the SCC is) + if iRestrictionScore < jRestrictionScore { + return true + } + + if iRestrictionScore > jRestrictionScore { + return false + } + + // they are still equal, sort by name + return iSCC.Name < jSCC.Name +} + +func getPriority(scc *securityv1.SecurityContextConstraints) int { + if scc.Priority == nil { + return 0 + } + return int(*scc.Priority) +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util/sort/byrestrictions.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util/sort/byrestrictions.go new file mode 100644 index 0000000000000..67189e0859f4d --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util/sort/byrestrictions.go @@ -0,0 +1,175 @@ +package sort + +import ( + "strings" + + "k8s.io/klog/v2" + + corev1 "k8s.io/api/core/v1" + + securityv1 "github.com/openshift/api/security/v1" +) + +// ByRestrictions is a helper to sort SCCs in order of most restrictive to least restrictive. +type ByRestrictions []*securityv1.SecurityContextConstraints + +func (s ByRestrictions) Len() int { + return len(s) +} +func (s ByRestrictions) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s ByRestrictions) Less(i, j int) bool { + return pointValue(s[i]) < pointValue(s[j]) +} + +// The following constants define the weight of the restrictions and used for +// calculating the points of the particular SCC. The lower the number, the more +// restrictive SCC is. Make sure that weak restrictions are always valued +// higher than the combination of the strong restrictions. + +type points int + +const ( + privilegedPoints points = 1000000 + + hostNetworkPoints points = 200000 + hostPortsPoints points = 400000 + + hostVolumePoints points = 100000 + nonTrivialVolumePoints points = 50000 + + runAsAnyUserPoints points = 40000 + runAsNonRootPoints points = 30000 + runAsRangePoints points = 20000 + runAsUserPoints points = 10000 + + capDefaultPoints points = 5000 + capAddOnePoints points = 300 + capAllowAllPoints points = 4000 + capAllowOnePoints points = 10 + capDropAllPoints points = -3000 + capDropOnePoints points = -50 + capMaxPoints points = 9999 + capMinPoints points = 0 + + noPoints points = 0 +) + +// pointValue places a value on the SCC based on the settings of the SCC that can be used +// to determine how restrictive it is. The lower the number, the more restrictive it is. +func pointValue(constraint *securityv1.SecurityContextConstraints) points { + totalPoints := noPoints + + if constraint.AllowPrivilegedContainer { + totalPoints += privilegedPoints + } + + // add points based on volume requests + totalPoints += volumePointValue(constraint) + + if constraint.AllowHostNetwork { + totalPoints += hostNetworkPoints + } + if constraint.AllowHostPorts { + totalPoints += hostPortsPoints + } + + // add points based on capabilities + totalPoints += capabilitiesPointValue(constraint) + + // the map contains points for both RunAsUser and SELinuxContext + // strategies by taking advantage that they have identical strategy names + strategiesPoints := map[string]points{ + string(securityv1.RunAsUserStrategyRunAsAny): runAsAnyUserPoints, + string(securityv1.RunAsUserStrategyMustRunAsNonRoot): runAsNonRootPoints, + string(securityv1.RunAsUserStrategyMustRunAsRange): runAsRangePoints, + string(securityv1.RunAsUserStrategyMustRunAs): runAsUserPoints, + } + + strategyType := string(constraint.SELinuxContext.Type) + points, found := strategiesPoints[strategyType] + if found { + totalPoints += points + } else { + klog.Warningf("SELinuxContext type %q has no point value, this may cause issues in sorting SCCs by restriction", strategyType) + } + + strategyType = string(constraint.RunAsUser.Type) + points, found = strategiesPoints[strategyType] + if found { + totalPoints += points + } else { + klog.Warningf("RunAsUser type %q has no point value, this may cause issues in sorting SCCs by restriction", strategyType) + } + + return totalPoints +} + +// volumePointValue returns a score based on the volumes allowed by the SCC. +// Allowing a host volume will return a score of 100000. Allowance of anything other +// than Secret, ConfigMap, EmptyDir, DownwardAPI, Projected, and None will result in +// a score of 50000. If the SCC only allows these trivial types, it will have a +// score of 0. +func volumePointValue(scc *securityv1.SecurityContextConstraints) points { + hasHostVolume := false + hasNonTrivialVolume := false + for _, v := range scc.Volumes { + switch v { + case securityv1.FSTypeHostPath, securityv1.FSTypeAll: + hasHostVolume = true + // nothing more to do, this is the max point value + break + // it is easier to specifically list the trivial volumes and allow the + // default case to be non-trivial so we don't have to worry about adding + // volumes in the future unless they're trivial. + case securityv1.FSTypeSecret, securityv1.FSTypeConfigMap, securityv1.FSTypeEmptyDir, + securityv1.FSTypeDownwardAPI, securityv1.FSProjected, securityv1.FSTypeNone: + // do nothing + default: + hasNonTrivialVolume = true + } + } + + if hasHostVolume { + return hostVolumePoints + } + if hasNonTrivialVolume { + return nonTrivialVolumePoints + } + return noPoints +} + +// hasCap checks for needle in haystack. +func hasCap(needle string, haystack []corev1.Capability) bool { + for _, c := range haystack { + if needle == strings.ToUpper(string(c)) { + return true + } + } + return false +} + +// capabilitiesPointValue returns a score based on the capabilities allowed, +// added, or removed by the SCC. This allow us to prefer the more restrictive +// SCC. +func capabilitiesPointValue(scc *securityv1.SecurityContextConstraints) points { + capsPoints := capDefaultPoints + capsPoints += capAddOnePoints * points(len(scc.DefaultAddCapabilities)) + if hasCap(string(securityv1.AllowAllCapabilities), scc.AllowedCapabilities) { + capsPoints += capAllowAllPoints + } else if hasCap("ALL", scc.AllowedCapabilities) { + capsPoints += capAllowAllPoints + } else { + capsPoints += capAllowOnePoints * points(len(scc.AllowedCapabilities)) + } + if hasCap("ALL", scc.RequiredDropCapabilities) { + capsPoints += capDropAllPoints + } else { + capsPoints += capDropOnePoints * points(len(scc.RequiredDropCapabilities)) + } + if capsPoints > capMaxPoints { + return capMaxPoints + } else if capsPoints < capMinPoints { + return capMinPoints + } + return capsPoints +} diff --git a/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util/util.go b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util/util.go new file mode 100644 index 0000000000000..9e4a5cfdbc988 --- /dev/null +++ b/vendor/github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util/util.go @@ -0,0 +1,178 @@ +package util + +import ( + "fmt" + + "k8s.io/apimachinery/pkg/util/sets" + api "k8s.io/kubernetes/pkg/apis/core" + + securityv1 "github.com/openshift/api/security/v1" +) + +func GetAllFSTypesExcept(exceptions ...string) sets.String { + fstypes := GetAllFSTypesAsSet() + for _, e := range exceptions { + fstypes.Delete(e) + } + return fstypes +} + +func GetAllFSTypesAsSet() sets.String { + fstypes := sets.NewString() + fstypes.Insert( + string(securityv1.FSTypeHostPath), + string(securityv1.FSTypeAzureFile), + string(securityv1.FSTypeFlocker), + string(securityv1.FSTypeFlexVolume), + string(securityv1.FSTypeEmptyDir), + string(securityv1.FSTypeGCEPersistentDisk), + string(securityv1.FSTypeAWSElasticBlockStore), + string(securityv1.FSTypeGitRepo), + string(securityv1.FSTypeSecret), + string(securityv1.FSTypeNFS), + string(securityv1.FSTypeISCSI), + string(securityv1.FSTypeGlusterfs), + string(securityv1.FSTypePersistentVolumeClaim), + string(securityv1.FSTypeRBD), + string(securityv1.FSTypeCinder), + string(securityv1.FSTypeCephFS), + string(securityv1.FSTypeDownwardAPI), + string(securityv1.FSTypeFC), + string(securityv1.FSTypeConfigMap), + string(securityv1.FSTypeVsphereVolume), + string(securityv1.FSTypeQuobyte), + string(securityv1.FSTypeAzureDisk), + string(securityv1.FSTypePhotonPersistentDisk), + string(securityv1.FSProjected), + string(securityv1.FSPortworxVolume), + string(securityv1.FSScaleIO), + string(securityv1.FSStorageOS), + string(securityv1.FSTypeCSI), + string(securityv1.FSTypeEphemeral), + ) + return fstypes +} + +// getVolumeFSType gets the FSType for a volume. +func GetVolumeFSType(v api.Volume) (securityv1.FSType, error) { + switch { + case v.HostPath != nil: + return securityv1.FSTypeHostPath, nil + case v.EmptyDir != nil: + return securityv1.FSTypeEmptyDir, nil + case v.GCEPersistentDisk != nil: + return securityv1.FSTypeGCEPersistentDisk, nil + case v.AWSElasticBlockStore != nil: + return securityv1.FSTypeAWSElasticBlockStore, nil + case v.GitRepo != nil: + return securityv1.FSTypeGitRepo, nil + case v.Secret != nil: + return securityv1.FSTypeSecret, nil + case v.NFS != nil: + return securityv1.FSTypeNFS, nil + case v.ISCSI != nil: + return securityv1.FSTypeISCSI, nil + case v.Glusterfs != nil: + return securityv1.FSTypeGlusterfs, nil + case v.PersistentVolumeClaim != nil: + return securityv1.FSTypePersistentVolumeClaim, nil + case v.RBD != nil: + return securityv1.FSTypeRBD, nil + case v.FlexVolume != nil: + return securityv1.FSTypeFlexVolume, nil + case v.Cinder != nil: + return securityv1.FSTypeCinder, nil + case v.CephFS != nil: + return securityv1.FSTypeCephFS, nil + case v.Flocker != nil: + return securityv1.FSTypeFlocker, nil + case v.DownwardAPI != nil: + return securityv1.FSTypeDownwardAPI, nil + case v.FC != nil: + return securityv1.FSTypeFC, nil + case v.AzureFile != nil: + return securityv1.FSTypeAzureFile, nil + case v.ConfigMap != nil: + return securityv1.FSTypeConfigMap, nil + case v.VsphereVolume != nil: + return securityv1.FSTypeVsphereVolume, nil + case v.Quobyte != nil: + return securityv1.FSTypeQuobyte, nil + case v.AzureDisk != nil: + return securityv1.FSTypeAzureDisk, nil + case v.PhotonPersistentDisk != nil: + return securityv1.FSTypePhotonPersistentDisk, nil + case v.Projected != nil: + return securityv1.FSProjected, nil + case v.PortworxVolume != nil: + return securityv1.FSPortworxVolume, nil + case v.ScaleIO != nil: + return securityv1.FSScaleIO, nil + case v.StorageOS != nil: + return securityv1.FSStorageOS, nil + case v.CSI != nil: + return securityv1.FSTypeCSI, nil + case v.Ephemeral != nil: + return securityv1.FSTypeEphemeral, nil + } + + return "", fmt.Errorf("unknown volume type for volume: %#v", v) +} + +// fsTypeToStringSet converts an FSType slice to a string set. +func FSTypeToStringSetInternal(fsTypes []securityv1.FSType) sets.String { + set := sets.NewString() + for _, v := range fsTypes { + set.Insert(string(v)) + } + return set +} + +// SCCAllowsAllVolumes checks for FSTypeAll in the scc's allowed volumes. +func SCCAllowsAllVolumes(scc *securityv1.SecurityContextConstraints) bool { + return SCCAllowsFSTypeInternal(scc, securityv1.FSTypeAll) +} + +// SCCAllowsFSTypeInternal is a utility for checking if an SCC allows a particular FSType. +// If all volumes are allowed then this will return true for any FSType passed. +func SCCAllowsFSTypeInternal(scc *securityv1.SecurityContextConstraints, fsType securityv1.FSType) bool { + if scc == nil { + return false + } + + for _, v := range scc.Volumes { + if v == fsType || v == securityv1.FSTypeAll { + return true + } + } + return false +} + +// SCCAllowsFSType is a utility for checking if an SCC allows a particular FSType. +// If all volumes are allowed then this will return true for any FSType passed. +func SCCAllowsFSType(scc *securityv1.SecurityContextConstraints, fsType securityv1.FSType) bool { + if scc == nil { + return false + } + + for _, v := range scc.Volumes { + if v == fsType || v == securityv1.FSTypeAll { + return true + } + } + return false +} + +// EqualStringSlices compares string slices for equality. Slices are equal when +// their sizes and elements on similar positions are equal. +func EqualStringSlices(a, b []string) bool { + if len(a) != len(b) { + return false + } + for i := 0; i < len(a); i++ { + if a[i] != b[i] { + return false + } + } + return true +} diff --git a/vendor/github.com/openshift/client-go/LICENSE b/vendor/github.com/openshift/client-go/LICENSE new file mode 100644 index 0000000000000..c4ea8b6f9d88b --- /dev/null +++ b/vendor/github.com/openshift/client-go/LICENSE @@ -0,0 +1,191 @@ + + 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 + + Copyright 2014 Red Hat, Inc. + + 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. diff --git a/vendor/github.com/openshift/client-go/apps/clientset/versioned/clientset.go b/vendor/github.com/openshift/client-go/apps/clientset/versioned/clientset.go new file mode 100644 index 0000000000000..0c3af7b68e63f --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/clientset/versioned/clientset.go @@ -0,0 +1,81 @@ +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + + appsv1 "github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1" + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + AppsV1() appsv1.AppsV1Interface +} + +// Clientset contains the clients for groups. Each group has exactly one +// version included in a Clientset. +type Clientset struct { + *discovery.DiscoveryClient + appsV1 *appsv1.AppsV1Client +} + +// AppsV1 retrieves the AppsV1Client +func (c *Clientset) AppsV1() appsv1.AppsV1Interface { + return c.appsV1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + var cs Clientset + var err error + cs.appsV1, err = appsv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + var cs Clientset + cs.appsV1 = appsv1.NewForConfigOrDie(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) + return &cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.appsV1 = appsv1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/vendor/github.com/openshift/client-go/apps/clientset/versioned/doc.go b/vendor/github.com/openshift/client-go/apps/clientset/versioned/doc.go new file mode 100644 index 0000000000000..0e0c2a8900e2c --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/clientset/versioned/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated clientset. +package versioned diff --git a/vendor/github.com/openshift/client-go/apps/clientset/versioned/scheme/doc.go b/vendor/github.com/openshift/client-go/apps/clientset/versioned/scheme/doc.go new file mode 100644 index 0000000000000..14db57a58f8d2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/clientset/versioned/scheme/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package contains the scheme of the automatically generated clientset. +package scheme diff --git a/vendor/github.com/openshift/client-go/apps/clientset/versioned/scheme/register.go b/vendor/github.com/openshift/client-go/apps/clientset/versioned/scheme/register.go new file mode 100644 index 0000000000000..2bd1eb6a4382b --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/clientset/versioned/scheme/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package scheme + +import ( + appsv1 "github.com/openshift/api/apps/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + appsv1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/apps_client.go b/vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/apps_client.go new file mode 100644 index 0000000000000..6053c41d2e5d5 --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/apps_client.go @@ -0,0 +1,73 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/apps/v1" + "github.com/openshift/client-go/apps/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type AppsV1Interface interface { + RESTClient() rest.Interface + DeploymentConfigsGetter +} + +// AppsV1Client is used to interact with features provided by the apps.openshift.io group. +type AppsV1Client struct { + restClient rest.Interface +} + +func (c *AppsV1Client) DeploymentConfigs(namespace string) DeploymentConfigInterface { + return newDeploymentConfigs(c, namespace) +} + +// NewForConfig creates a new AppsV1Client for the given config. +func NewForConfig(c *rest.Config) (*AppsV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &AppsV1Client{client}, nil +} + +// NewForConfigOrDie creates a new AppsV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *AppsV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new AppsV1Client for the given RESTClient. +func New(c rest.Interface) *AppsV1Client { + return &AppsV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *AppsV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/deploymentconfig.go b/vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/deploymentconfig.go new file mode 100644 index 0000000000000..cad2bab6c1942 --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/deploymentconfig.go @@ -0,0 +1,244 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/apps/v1" + scheme "github.com/openshift/client-go/apps/clientset/versioned/scheme" + v1beta1 "k8s.io/api/extensions/v1beta1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// DeploymentConfigsGetter has a method to return a DeploymentConfigInterface. +// A group's client should implement this interface. +type DeploymentConfigsGetter interface { + DeploymentConfigs(namespace string) DeploymentConfigInterface +} + +// DeploymentConfigInterface has methods to work with DeploymentConfig resources. +type DeploymentConfigInterface interface { + Create(ctx context.Context, deploymentConfig *v1.DeploymentConfig, opts metav1.CreateOptions) (*v1.DeploymentConfig, error) + Update(ctx context.Context, deploymentConfig *v1.DeploymentConfig, opts metav1.UpdateOptions) (*v1.DeploymentConfig, error) + UpdateStatus(ctx context.Context, deploymentConfig *v1.DeploymentConfig, opts metav1.UpdateOptions) (*v1.DeploymentConfig, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.DeploymentConfig, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.DeploymentConfigList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.DeploymentConfig, err error) + Instantiate(ctx context.Context, deploymentConfigName string, deploymentRequest *v1.DeploymentRequest, opts metav1.CreateOptions) (*v1.DeploymentConfig, error) + Rollback(ctx context.Context, deploymentConfigName string, deploymentConfigRollback *v1.DeploymentConfigRollback, opts metav1.CreateOptions) (*v1.DeploymentConfig, error) + GetScale(ctx context.Context, deploymentConfigName string, options metav1.GetOptions) (*v1beta1.Scale, error) + UpdateScale(ctx context.Context, deploymentConfigName string, scale *v1beta1.Scale, opts metav1.UpdateOptions) (*v1beta1.Scale, error) + + DeploymentConfigExpansion +} + +// deploymentConfigs implements DeploymentConfigInterface +type deploymentConfigs struct { + client rest.Interface + ns string +} + +// newDeploymentConfigs returns a DeploymentConfigs +func newDeploymentConfigs(c *AppsV1Client, namespace string) *deploymentConfigs { + return &deploymentConfigs{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the deploymentConfig, and returns the corresponding deploymentConfig object, and an error if there is any. +func (c *deploymentConfigs) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.DeploymentConfig, err error) { + result = &v1.DeploymentConfig{} + err = c.client.Get(). + Namespace(c.ns). + Resource("deploymentconfigs"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of DeploymentConfigs that match those selectors. +func (c *deploymentConfigs) List(ctx context.Context, opts metav1.ListOptions) (result *v1.DeploymentConfigList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.DeploymentConfigList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("deploymentconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested deploymentConfigs. +func (c *deploymentConfigs) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("deploymentconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a deploymentConfig and creates it. Returns the server's representation of the deploymentConfig, and an error, if there is any. +func (c *deploymentConfigs) Create(ctx context.Context, deploymentConfig *v1.DeploymentConfig, opts metav1.CreateOptions) (result *v1.DeploymentConfig, err error) { + result = &v1.DeploymentConfig{} + err = c.client.Post(). + Namespace(c.ns). + Resource("deploymentconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(deploymentConfig). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a deploymentConfig and updates it. Returns the server's representation of the deploymentConfig, and an error, if there is any. +func (c *deploymentConfigs) Update(ctx context.Context, deploymentConfig *v1.DeploymentConfig, opts metav1.UpdateOptions) (result *v1.DeploymentConfig, err error) { + result = &v1.DeploymentConfig{} + err = c.client.Put(). + Namespace(c.ns). + Resource("deploymentconfigs"). + Name(deploymentConfig.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(deploymentConfig). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *deploymentConfigs) UpdateStatus(ctx context.Context, deploymentConfig *v1.DeploymentConfig, opts metav1.UpdateOptions) (result *v1.DeploymentConfig, err error) { + result = &v1.DeploymentConfig{} + err = c.client.Put(). + Namespace(c.ns). + Resource("deploymentconfigs"). + Name(deploymentConfig.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(deploymentConfig). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the deploymentConfig and deletes it. Returns an error if one occurs. +func (c *deploymentConfigs) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("deploymentconfigs"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *deploymentConfigs) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("deploymentconfigs"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched deploymentConfig. +func (c *deploymentConfigs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.DeploymentConfig, err error) { + result = &v1.DeploymentConfig{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("deploymentconfigs"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// Instantiate takes the representation of a deploymentRequest and creates it. Returns the server's representation of the deploymentConfig, and an error, if there is any. +func (c *deploymentConfigs) Instantiate(ctx context.Context, deploymentConfigName string, deploymentRequest *v1.DeploymentRequest, opts metav1.CreateOptions) (result *v1.DeploymentConfig, err error) { + result = &v1.DeploymentConfig{} + err = c.client.Post(). + Namespace(c.ns). + Resource("deploymentconfigs"). + Name(deploymentConfigName). + SubResource("instantiate"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(deploymentRequest). + Do(ctx). + Into(result) + return +} + +// Rollback takes the representation of a deploymentConfigRollback and creates it. Returns the server's representation of the deploymentConfig, and an error, if there is any. +func (c *deploymentConfigs) Rollback(ctx context.Context, deploymentConfigName string, deploymentConfigRollback *v1.DeploymentConfigRollback, opts metav1.CreateOptions) (result *v1.DeploymentConfig, err error) { + result = &v1.DeploymentConfig{} + err = c.client.Post(). + Namespace(c.ns). + Resource("deploymentconfigs"). + Name(deploymentConfigName). + SubResource("rollback"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(deploymentConfigRollback). + Do(ctx). + Into(result) + return +} + +// GetScale takes name of the deploymentConfig, and returns the corresponding v1beta1.Scale object, and an error if there is any. +func (c *deploymentConfigs) GetScale(ctx context.Context, deploymentConfigName string, options metav1.GetOptions) (result *v1beta1.Scale, err error) { + result = &v1beta1.Scale{} + err = c.client.Get(). + Namespace(c.ns). + Resource("deploymentconfigs"). + Name(deploymentConfigName). + SubResource("scale"). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// UpdateScale takes the top resource name and the representation of a scale and updates it. Returns the server's representation of the scale, and an error, if there is any. +func (c *deploymentConfigs) UpdateScale(ctx context.Context, deploymentConfigName string, scale *v1beta1.Scale, opts metav1.UpdateOptions) (result *v1beta1.Scale, err error) { + result = &v1beta1.Scale{} + err = c.client.Put(). + Namespace(c.ns). + Resource("deploymentconfigs"). + Name(deploymentConfigName). + SubResource("scale"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(scale). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/doc.go b/vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/doc.go new file mode 100644 index 0000000000000..225e6b2be34f2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/generated_expansion.go b/vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/generated_expansion.go new file mode 100644 index 0000000000000..0545f8c09a154 --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1/generated_expansion.go @@ -0,0 +1,5 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type DeploymentConfigExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/apps/informers/externalversions/apps/interface.go b/vendor/github.com/openshift/client-go/apps/informers/externalversions/apps/interface.go new file mode 100644 index 0000000000000..a10023dd51756 --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/informers/externalversions/apps/interface.go @@ -0,0 +1,30 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package apps + +import ( + v1 "github.com/openshift/client-go/apps/informers/externalversions/apps/v1" + internalinterfaces "github.com/openshift/client-go/apps/informers/externalversions/internalinterfaces" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1 provides access to shared informers for resources in V1. + V1() v1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1 returns a new v1.Interface. +func (g *group) V1() v1.Interface { + return v1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/apps/informers/externalversions/apps/v1/deploymentconfig.go b/vendor/github.com/openshift/client-go/apps/informers/externalversions/apps/v1/deploymentconfig.go new file mode 100644 index 0000000000000..4be7179ad34c6 --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/informers/externalversions/apps/v1/deploymentconfig.go @@ -0,0 +1,74 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + appsv1 "github.com/openshift/api/apps/v1" + versioned "github.com/openshift/client-go/apps/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/apps/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/apps/listers/apps/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// DeploymentConfigInformer provides access to a shared informer and lister for +// DeploymentConfigs. +type DeploymentConfigInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.DeploymentConfigLister +} + +type deploymentConfigInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewDeploymentConfigInformer constructs a new informer for DeploymentConfig type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewDeploymentConfigInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredDeploymentConfigInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredDeploymentConfigInformer constructs a new informer for DeploymentConfig type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredDeploymentConfigInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AppsV1().DeploymentConfigs(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AppsV1().DeploymentConfigs(namespace).Watch(context.TODO(), options) + }, + }, + &appsv1.DeploymentConfig{}, + resyncPeriod, + indexers, + ) +} + +func (f *deploymentConfigInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredDeploymentConfigInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *deploymentConfigInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&appsv1.DeploymentConfig{}, f.defaultInformer) +} + +func (f *deploymentConfigInformer) Lister() v1.DeploymentConfigLister { + return v1.NewDeploymentConfigLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/apps/informers/externalversions/apps/v1/interface.go b/vendor/github.com/openshift/client-go/apps/informers/externalversions/apps/v1/interface.go new file mode 100644 index 0000000000000..e95a869d2f6f0 --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/informers/externalversions/apps/v1/interface.go @@ -0,0 +1,29 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + internalinterfaces "github.com/openshift/client-go/apps/informers/externalversions/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // DeploymentConfigs returns a DeploymentConfigInformer. + DeploymentConfigs() DeploymentConfigInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// DeploymentConfigs returns a DeploymentConfigInformer. +func (v *version) DeploymentConfigs() DeploymentConfigInformer { + return &deploymentConfigInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/github.com/openshift/client-go/apps/informers/externalversions/factory.go b/vendor/github.com/openshift/client-go/apps/informers/externalversions/factory.go new file mode 100644 index 0000000000000..e29a202e87a79 --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/informers/externalversions/factory.go @@ -0,0 +1,164 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + reflect "reflect" + sync "sync" + time "time" + + versioned "github.com/openshift/client-go/apps/clientset/versioned" + apps "github.com/openshift/client-go/apps/informers/externalversions/apps" + internalinterfaces "github.com/openshift/client-go/apps/informers/externalversions/internalinterfaces" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// SharedInformerOption defines the functional option type for SharedInformerFactory. +type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory + +type sharedInformerFactory struct { + client versioned.Interface + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc + lock sync.Mutex + defaultResync time.Duration + customResync map[reflect.Type]time.Duration + + informers map[reflect.Type]cache.SharedIndexInformer + // startedInformers is used for tracking which informers have been started. + // This allows Start() to be called multiple times safely. + startedInformers map[reflect.Type]bool +} + +// WithCustomResyncConfig sets a custom resync period for the specified informer types. +func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + for k, v := range resyncConfig { + factory.customResync[reflect.TypeOf(k)] = v + } + return factory + } +} + +// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory. +func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.tweakListOptions = tweakListOptions + return factory + } +} + +// WithNamespace limits the SharedInformerFactory to the specified namespace. +func WithNamespace(namespace string) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.namespace = namespace + return factory + } +} + +// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. +func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync) +} + +// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory. +// Listers obtained via this SharedInformerFactory will be subject to the same filters +// as specified here. +// Deprecated: Please use NewSharedInformerFactoryWithOptions instead +func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions)) +} + +// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options. +func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory { + factory := &sharedInformerFactory{ + client: client, + namespace: v1.NamespaceAll, + defaultResync: defaultResync, + informers: make(map[reflect.Type]cache.SharedIndexInformer), + startedInformers: make(map[reflect.Type]bool), + customResync: make(map[reflect.Type]time.Duration), + } + + // Apply all options + for _, opt := range options { + factory = opt(factory) + } + + return factory +} + +// Start initializes all requested informers. +func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) { + f.lock.Lock() + defer f.lock.Unlock() + + for informerType, informer := range f.informers { + if !f.startedInformers[informerType] { + go informer.Run(stopCh) + f.startedInformers[informerType] = true + } + } +} + +// WaitForCacheSync waits for all started informers' cache were synced. +func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool { + informers := func() map[reflect.Type]cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informers := map[reflect.Type]cache.SharedIndexInformer{} + for informerType, informer := range f.informers { + if f.startedInformers[informerType] { + informers[informerType] = informer + } + } + return informers + }() + + res := map[reflect.Type]bool{} + for informType, informer := range informers { + res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced) + } + return res +} + +// InternalInformerFor returns the SharedIndexInformer for obj using an internal +// client. +func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(obj) + informer, exists := f.informers[informerType] + if exists { + return informer + } + + resyncPeriod, exists := f.customResync[informerType] + if !exists { + resyncPeriod = f.defaultResync + } + + informer = newFunc(f.client, resyncPeriod) + f.informers[informerType] = informer + + return informer +} + +// SharedInformerFactory provides shared informers for resources in all known +// API group versions. +type SharedInformerFactory interface { + internalinterfaces.SharedInformerFactory + ForResource(resource schema.GroupVersionResource) (GenericInformer, error) + WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool + + Apps() apps.Interface +} + +func (f *sharedInformerFactory) Apps() apps.Interface { + return apps.New(f, f.namespace, f.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/apps/informers/externalversions/generic.go b/vendor/github.com/openshift/client-go/apps/informers/externalversions/generic.go new file mode 100644 index 0000000000000..7ea4a7c77a29a --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/informers/externalversions/generic.go @@ -0,0 +1,46 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + "fmt" + + v1 "github.com/openshift/api/apps/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// GenericInformer is type of SharedIndexInformer which will locate and delegate to other +// sharedInformers based on type +type GenericInformer interface { + Informer() cache.SharedIndexInformer + Lister() cache.GenericLister +} + +type genericInformer struct { + informer cache.SharedIndexInformer + resource schema.GroupResource +} + +// Informer returns the SharedIndexInformer. +func (f *genericInformer) Informer() cache.SharedIndexInformer { + return f.informer +} + +// Lister returns the GenericLister. +func (f *genericInformer) Lister() cache.GenericLister { + return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource) +} + +// ForResource gives generic access to a shared informer of the matching type +// TODO extend this to unknown resources with a client pool +func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { + switch resource { + // Group=apps.openshift.io, Version=v1 + case v1.SchemeGroupVersion.WithResource("deploymentconfigs"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1().DeploymentConfigs().Informer()}, nil + + } + + return nil, fmt.Errorf("no informer found for %v", resource) +} diff --git a/vendor/github.com/openshift/client-go/apps/informers/externalversions/internalinterfaces/factory_interfaces.go b/vendor/github.com/openshift/client-go/apps/informers/externalversions/internalinterfaces/factory_interfaces.go new file mode 100644 index 0000000000000..308cc551b44fb --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -0,0 +1,24 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package internalinterfaces + +import ( + time "time" + + versioned "github.com/openshift/client-go/apps/clientset/versioned" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + cache "k8s.io/client-go/tools/cache" +) + +// NewInformerFunc takes versioned.Interface and time.Duration to return a SharedIndexInformer. +type NewInformerFunc func(versioned.Interface, time.Duration) cache.SharedIndexInformer + +// SharedInformerFactory a small interface to allow for adding an informer without an import cycle +type SharedInformerFactory interface { + Start(stopCh <-chan struct{}) + InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer +} + +// TweakListOptionsFunc is a function that transforms a v1.ListOptions. +type TweakListOptionsFunc func(*v1.ListOptions) diff --git a/vendor/github.com/openshift/client-go/apps/listers/apps/v1/deploymentconfig.go b/vendor/github.com/openshift/client-go/apps/listers/apps/v1/deploymentconfig.go new file mode 100644 index 0000000000000..d31ba9e3b16a5 --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/listers/apps/v1/deploymentconfig.go @@ -0,0 +1,83 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/apps/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// DeploymentConfigLister helps list DeploymentConfigs. +// All objects returned here must be treated as read-only. +type DeploymentConfigLister interface { + // List lists all DeploymentConfigs in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.DeploymentConfig, err error) + // DeploymentConfigs returns an object that can list and get DeploymentConfigs. + DeploymentConfigs(namespace string) DeploymentConfigNamespaceLister + DeploymentConfigListerExpansion +} + +// deploymentConfigLister implements the DeploymentConfigLister interface. +type deploymentConfigLister struct { + indexer cache.Indexer +} + +// NewDeploymentConfigLister returns a new DeploymentConfigLister. +func NewDeploymentConfigLister(indexer cache.Indexer) DeploymentConfigLister { + return &deploymentConfigLister{indexer: indexer} +} + +// List lists all DeploymentConfigs in the indexer. +func (s *deploymentConfigLister) List(selector labels.Selector) (ret []*v1.DeploymentConfig, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.DeploymentConfig)) + }) + return ret, err +} + +// DeploymentConfigs returns an object that can list and get DeploymentConfigs. +func (s *deploymentConfigLister) DeploymentConfigs(namespace string) DeploymentConfigNamespaceLister { + return deploymentConfigNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// DeploymentConfigNamespaceLister helps list and get DeploymentConfigs. +// All objects returned here must be treated as read-only. +type DeploymentConfigNamespaceLister interface { + // List lists all DeploymentConfigs in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.DeploymentConfig, err error) + // Get retrieves the DeploymentConfig from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.DeploymentConfig, error) + DeploymentConfigNamespaceListerExpansion +} + +// deploymentConfigNamespaceLister implements the DeploymentConfigNamespaceLister +// interface. +type deploymentConfigNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all DeploymentConfigs in the indexer for a given namespace. +func (s deploymentConfigNamespaceLister) List(selector labels.Selector) (ret []*v1.DeploymentConfig, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.DeploymentConfig)) + }) + return ret, err +} + +// Get retrieves the DeploymentConfig from the indexer for a given namespace and name. +func (s deploymentConfigNamespaceLister) Get(name string) (*v1.DeploymentConfig, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("deploymentconfig"), name) + } + return obj.(*v1.DeploymentConfig), nil +} diff --git a/vendor/github.com/openshift/client-go/apps/listers/apps/v1/expansion_generated.go b/vendor/github.com/openshift/client-go/apps/listers/apps/v1/expansion_generated.go new file mode 100644 index 0000000000000..8a7cce0eb3316 --- /dev/null +++ b/vendor/github.com/openshift/client-go/apps/listers/apps/v1/expansion_generated.go @@ -0,0 +1,11 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +// DeploymentConfigListerExpansion allows custom methods to be added to +// DeploymentConfigLister. +type DeploymentConfigListerExpansion interface{} + +// DeploymentConfigNamespaceListerExpansion allows custom methods to be added to +// DeploymentConfigNamespaceLister. +type DeploymentConfigNamespaceListerExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/clientset.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/clientset.go new file mode 100644 index 0000000000000..76fd2f8386629 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/clientset.go @@ -0,0 +1,81 @@ +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + + authorizationv1 "github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1" + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + AuthorizationV1() authorizationv1.AuthorizationV1Interface +} + +// Clientset contains the clients for groups. Each group has exactly one +// version included in a Clientset. +type Clientset struct { + *discovery.DiscoveryClient + authorizationV1 *authorizationv1.AuthorizationV1Client +} + +// AuthorizationV1 retrieves the AuthorizationV1Client +func (c *Clientset) AuthorizationV1() authorizationv1.AuthorizationV1Interface { + return c.authorizationV1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + var cs Clientset + var err error + cs.authorizationV1, err = authorizationv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + var cs Clientset + cs.authorizationV1 = authorizationv1.NewForConfigOrDie(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) + return &cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.authorizationV1 = authorizationv1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/doc.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/doc.go new file mode 100644 index 0000000000000..0e0c2a8900e2c --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated clientset. +package versioned diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/fake/clientset_generated.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/fake/clientset_generated.go new file mode 100644 index 0000000000000..3fbb2887e436c --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/fake/clientset_generated.go @@ -0,0 +1,66 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + clientset "github.com/openshift/client-go/authorization/clientset/versioned" + authorizationv1 "github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1" + fakeauthorizationv1 "github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/discovery" + fakediscovery "k8s.io/client-go/discovery/fake" + "k8s.io/client-go/testing" +) + +// NewSimpleClientset returns a clientset that will respond with the provided objects. +// It's backed by a very simple object tracker that processes creates, updates and deletions as-is, +// without applying any validations and/or defaults. It shouldn't be considered a replacement +// for a real clientset and is mostly useful in simple unit tests. +func NewSimpleClientset(objects ...runtime.Object) *Clientset { + o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder()) + for _, obj := range objects { + if err := o.Add(obj); err != nil { + panic(err) + } + } + + cs := &Clientset{tracker: o} + cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake} + cs.AddReactor("*", "*", testing.ObjectReaction(o)) + cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) { + gvr := action.GetResource() + ns := action.GetNamespace() + watch, err := o.Watch(gvr, ns) + if err != nil { + return false, nil, err + } + return true, watch, nil + }) + + return cs +} + +// Clientset implements clientset.Interface. Meant to be embedded into a +// struct to get a default implementation. This makes faking out just the method +// you want to test easier. +type Clientset struct { + testing.Fake + discovery *fakediscovery.FakeDiscovery + tracker testing.ObjectTracker +} + +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + return c.discovery +} + +func (c *Clientset) Tracker() testing.ObjectTracker { + return c.tracker +} + +var _ clientset.Interface = &Clientset{} + +// AuthorizationV1 retrieves the AuthorizationV1Client +func (c *Clientset) AuthorizationV1() authorizationv1.AuthorizationV1Interface { + return &fakeauthorizationv1.FakeAuthorizationV1{Fake: &c.Fake} +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/fake/doc.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/fake/doc.go new file mode 100644 index 0000000000000..3630ed1cd17db --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/fake/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated fake clientset. +package fake diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/fake/register.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/fake/register.go new file mode 100644 index 0000000000000..9acd9bd4cf05d --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/fake/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + authorizationv1 "github.com/openshift/api/authorization/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var scheme = runtime.NewScheme() +var codecs = serializer.NewCodecFactory(scheme) + +var localSchemeBuilder = runtime.SchemeBuilder{ + authorizationv1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(scheme)) +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/scheme/doc.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/scheme/doc.go new file mode 100644 index 0000000000000..14db57a58f8d2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/scheme/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package contains the scheme of the automatically generated clientset. +package scheme diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/scheme/register.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/scheme/register.go new file mode 100644 index 0000000000000..e175014102c66 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/scheme/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package scheme + +import ( + authorizationv1 "github.com/openshift/api/authorization/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + authorizationv1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/authorization_client.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/authorization_client.go new file mode 100644 index 0000000000000..283d76ab0912d --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/authorization_client.go @@ -0,0 +1,123 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/authorization/v1" + "github.com/openshift/client-go/authorization/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type AuthorizationV1Interface interface { + RESTClient() rest.Interface + ClusterRolesGetter + ClusterRoleBindingsGetter + LocalResourceAccessReviewsGetter + LocalSubjectAccessReviewsGetter + ResourceAccessReviewsGetter + RolesGetter + RoleBindingsGetter + RoleBindingRestrictionsGetter + SelfSubjectRulesReviewsGetter + SubjectAccessReviewsGetter + SubjectRulesReviewsGetter +} + +// AuthorizationV1Client is used to interact with features provided by the authorization.openshift.io group. +type AuthorizationV1Client struct { + restClient rest.Interface +} + +func (c *AuthorizationV1Client) ClusterRoles() ClusterRoleInterface { + return newClusterRoles(c) +} + +func (c *AuthorizationV1Client) ClusterRoleBindings() ClusterRoleBindingInterface { + return newClusterRoleBindings(c) +} + +func (c *AuthorizationV1Client) LocalResourceAccessReviews(namespace string) LocalResourceAccessReviewInterface { + return newLocalResourceAccessReviews(c, namespace) +} + +func (c *AuthorizationV1Client) LocalSubjectAccessReviews(namespace string) LocalSubjectAccessReviewInterface { + return newLocalSubjectAccessReviews(c, namespace) +} + +func (c *AuthorizationV1Client) ResourceAccessReviews() ResourceAccessReviewInterface { + return newResourceAccessReviews(c) +} + +func (c *AuthorizationV1Client) Roles(namespace string) RoleInterface { + return newRoles(c, namespace) +} + +func (c *AuthorizationV1Client) RoleBindings(namespace string) RoleBindingInterface { + return newRoleBindings(c, namespace) +} + +func (c *AuthorizationV1Client) RoleBindingRestrictions(namespace string) RoleBindingRestrictionInterface { + return newRoleBindingRestrictions(c, namespace) +} + +func (c *AuthorizationV1Client) SelfSubjectRulesReviews(namespace string) SelfSubjectRulesReviewInterface { + return newSelfSubjectRulesReviews(c, namespace) +} + +func (c *AuthorizationV1Client) SubjectAccessReviews() SubjectAccessReviewInterface { + return newSubjectAccessReviews(c) +} + +func (c *AuthorizationV1Client) SubjectRulesReviews(namespace string) SubjectRulesReviewInterface { + return newSubjectRulesReviews(c, namespace) +} + +// NewForConfig creates a new AuthorizationV1Client for the given config. +func NewForConfig(c *rest.Config) (*AuthorizationV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &AuthorizationV1Client{client}, nil +} + +// NewForConfigOrDie creates a new AuthorizationV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *AuthorizationV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new AuthorizationV1Client for the given RESTClient. +func New(c rest.Interface) *AuthorizationV1Client { + return &AuthorizationV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *AuthorizationV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/clusterrole.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/clusterrole.go new file mode 100644 index 0000000000000..7df56a19ef240 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/clusterrole.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/authorization/v1" + scheme "github.com/openshift/client-go/authorization/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// ClusterRolesGetter has a method to return a ClusterRoleInterface. +// A group's client should implement this interface. +type ClusterRolesGetter interface { + ClusterRoles() ClusterRoleInterface +} + +// ClusterRoleInterface has methods to work with ClusterRole resources. +type ClusterRoleInterface interface { + Create(ctx context.Context, clusterRole *v1.ClusterRole, opts metav1.CreateOptions) (*v1.ClusterRole, error) + Update(ctx context.Context, clusterRole *v1.ClusterRole, opts metav1.UpdateOptions) (*v1.ClusterRole, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ClusterRole, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ClusterRoleList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterRole, err error) + ClusterRoleExpansion +} + +// clusterRoles implements ClusterRoleInterface +type clusterRoles struct { + client rest.Interface +} + +// newClusterRoles returns a ClusterRoles +func newClusterRoles(c *AuthorizationV1Client) *clusterRoles { + return &clusterRoles{ + client: c.RESTClient(), + } +} + +// Get takes name of the clusterRole, and returns the corresponding clusterRole object, and an error if there is any. +func (c *clusterRoles) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ClusterRole, err error) { + result = &v1.ClusterRole{} + err = c.client.Get(). + Resource("clusterroles"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ClusterRoles that match those selectors. +func (c *clusterRoles) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ClusterRoleList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ClusterRoleList{} + err = c.client.Get(). + Resource("clusterroles"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested clusterRoles. +func (c *clusterRoles) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("clusterroles"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a clusterRole and creates it. Returns the server's representation of the clusterRole, and an error, if there is any. +func (c *clusterRoles) Create(ctx context.Context, clusterRole *v1.ClusterRole, opts metav1.CreateOptions) (result *v1.ClusterRole, err error) { + result = &v1.ClusterRole{} + err = c.client.Post(). + Resource("clusterroles"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterRole). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a clusterRole and updates it. Returns the server's representation of the clusterRole, and an error, if there is any. +func (c *clusterRoles) Update(ctx context.Context, clusterRole *v1.ClusterRole, opts metav1.UpdateOptions) (result *v1.ClusterRole, err error) { + result = &v1.ClusterRole{} + err = c.client.Put(). + Resource("clusterroles"). + Name(clusterRole.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterRole). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the clusterRole and deletes it. Returns an error if one occurs. +func (c *clusterRoles) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("clusterroles"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *clusterRoles) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("clusterroles"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched clusterRole. +func (c *clusterRoles) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterRole, err error) { + result = &v1.ClusterRole{} + err = c.client.Patch(pt). + Resource("clusterroles"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/clusterrolebinding.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/clusterrolebinding.go new file mode 100644 index 0000000000000..bf91922374cdb --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/clusterrolebinding.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/authorization/v1" + scheme "github.com/openshift/client-go/authorization/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// ClusterRoleBindingsGetter has a method to return a ClusterRoleBindingInterface. +// A group's client should implement this interface. +type ClusterRoleBindingsGetter interface { + ClusterRoleBindings() ClusterRoleBindingInterface +} + +// ClusterRoleBindingInterface has methods to work with ClusterRoleBinding resources. +type ClusterRoleBindingInterface interface { + Create(ctx context.Context, clusterRoleBinding *v1.ClusterRoleBinding, opts metav1.CreateOptions) (*v1.ClusterRoleBinding, error) + Update(ctx context.Context, clusterRoleBinding *v1.ClusterRoleBinding, opts metav1.UpdateOptions) (*v1.ClusterRoleBinding, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ClusterRoleBinding, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ClusterRoleBindingList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterRoleBinding, err error) + ClusterRoleBindingExpansion +} + +// clusterRoleBindings implements ClusterRoleBindingInterface +type clusterRoleBindings struct { + client rest.Interface +} + +// newClusterRoleBindings returns a ClusterRoleBindings +func newClusterRoleBindings(c *AuthorizationV1Client) *clusterRoleBindings { + return &clusterRoleBindings{ + client: c.RESTClient(), + } +} + +// Get takes name of the clusterRoleBinding, and returns the corresponding clusterRoleBinding object, and an error if there is any. +func (c *clusterRoleBindings) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ClusterRoleBinding, err error) { + result = &v1.ClusterRoleBinding{} + err = c.client.Get(). + Resource("clusterrolebindings"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ClusterRoleBindings that match those selectors. +func (c *clusterRoleBindings) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ClusterRoleBindingList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ClusterRoleBindingList{} + err = c.client.Get(). + Resource("clusterrolebindings"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested clusterRoleBindings. +func (c *clusterRoleBindings) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("clusterrolebindings"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a clusterRoleBinding and creates it. Returns the server's representation of the clusterRoleBinding, and an error, if there is any. +func (c *clusterRoleBindings) Create(ctx context.Context, clusterRoleBinding *v1.ClusterRoleBinding, opts metav1.CreateOptions) (result *v1.ClusterRoleBinding, err error) { + result = &v1.ClusterRoleBinding{} + err = c.client.Post(). + Resource("clusterrolebindings"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterRoleBinding). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a clusterRoleBinding and updates it. Returns the server's representation of the clusterRoleBinding, and an error, if there is any. +func (c *clusterRoleBindings) Update(ctx context.Context, clusterRoleBinding *v1.ClusterRoleBinding, opts metav1.UpdateOptions) (result *v1.ClusterRoleBinding, err error) { + result = &v1.ClusterRoleBinding{} + err = c.client.Put(). + Resource("clusterrolebindings"). + Name(clusterRoleBinding.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterRoleBinding). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the clusterRoleBinding and deletes it. Returns an error if one occurs. +func (c *clusterRoleBindings) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("clusterrolebindings"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *clusterRoleBindings) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("clusterrolebindings"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched clusterRoleBinding. +func (c *clusterRoleBindings) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterRoleBinding, err error) { + result = &v1.ClusterRoleBinding{} + err = c.client.Patch(pt). + Resource("clusterrolebindings"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/doc.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/doc.go new file mode 100644 index 0000000000000..225e6b2be34f2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/doc.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/doc.go new file mode 100644 index 0000000000000..2b5ba4c8e4422 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// Package fake has the automatically generated clients. +package fake diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_authorization_client.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_authorization_client.go new file mode 100644 index 0000000000000..28402c4534041 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_authorization_client.go @@ -0,0 +1,64 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + v1 "github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1" + rest "k8s.io/client-go/rest" + testing "k8s.io/client-go/testing" +) + +type FakeAuthorizationV1 struct { + *testing.Fake +} + +func (c *FakeAuthorizationV1) ClusterRoles() v1.ClusterRoleInterface { + return &FakeClusterRoles{c} +} + +func (c *FakeAuthorizationV1) ClusterRoleBindings() v1.ClusterRoleBindingInterface { + return &FakeClusterRoleBindings{c} +} + +func (c *FakeAuthorizationV1) LocalResourceAccessReviews(namespace string) v1.LocalResourceAccessReviewInterface { + return &FakeLocalResourceAccessReviews{c, namespace} +} + +func (c *FakeAuthorizationV1) LocalSubjectAccessReviews(namespace string) v1.LocalSubjectAccessReviewInterface { + return &FakeLocalSubjectAccessReviews{c, namespace} +} + +func (c *FakeAuthorizationV1) ResourceAccessReviews() v1.ResourceAccessReviewInterface { + return &FakeResourceAccessReviews{c} +} + +func (c *FakeAuthorizationV1) Roles(namespace string) v1.RoleInterface { + return &FakeRoles{c, namespace} +} + +func (c *FakeAuthorizationV1) RoleBindings(namespace string) v1.RoleBindingInterface { + return &FakeRoleBindings{c, namespace} +} + +func (c *FakeAuthorizationV1) RoleBindingRestrictions(namespace string) v1.RoleBindingRestrictionInterface { + return &FakeRoleBindingRestrictions{c, namespace} +} + +func (c *FakeAuthorizationV1) SelfSubjectRulesReviews(namespace string) v1.SelfSubjectRulesReviewInterface { + return &FakeSelfSubjectRulesReviews{c, namespace} +} + +func (c *FakeAuthorizationV1) SubjectAccessReviews() v1.SubjectAccessReviewInterface { + return &FakeSubjectAccessReviews{c} +} + +func (c *FakeAuthorizationV1) SubjectRulesReviews(namespace string) v1.SubjectRulesReviewInterface { + return &FakeSubjectRulesReviews{c, namespace} +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *FakeAuthorizationV1) RESTClient() rest.Interface { + var ret *rest.RESTClient + return ret +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_clusterrole.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_clusterrole.go new file mode 100644 index 0000000000000..9af6217e5795f --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_clusterrole.go @@ -0,0 +1,106 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + authorizationv1 "github.com/openshift/api/authorization/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeClusterRoles implements ClusterRoleInterface +type FakeClusterRoles struct { + Fake *FakeAuthorizationV1 +} + +var clusterrolesResource = schema.GroupVersionResource{Group: "authorization.openshift.io", Version: "v1", Resource: "clusterroles"} + +var clusterrolesKind = schema.GroupVersionKind{Group: "authorization.openshift.io", Version: "v1", Kind: "ClusterRole"} + +// Get takes name of the clusterRole, and returns the corresponding clusterRole object, and an error if there is any. +func (c *FakeClusterRoles) Get(ctx context.Context, name string, options v1.GetOptions) (result *authorizationv1.ClusterRole, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(clusterrolesResource, name), &authorizationv1.ClusterRole{}) + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.ClusterRole), err +} + +// List takes label and field selectors, and returns the list of ClusterRoles that match those selectors. +func (c *FakeClusterRoles) List(ctx context.Context, opts v1.ListOptions) (result *authorizationv1.ClusterRoleList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(clusterrolesResource, clusterrolesKind, opts), &authorizationv1.ClusterRoleList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &authorizationv1.ClusterRoleList{ListMeta: obj.(*authorizationv1.ClusterRoleList).ListMeta} + for _, item := range obj.(*authorizationv1.ClusterRoleList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested clusterRoles. +func (c *FakeClusterRoles) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(clusterrolesResource, opts)) +} + +// Create takes the representation of a clusterRole and creates it. Returns the server's representation of the clusterRole, and an error, if there is any. +func (c *FakeClusterRoles) Create(ctx context.Context, clusterRole *authorizationv1.ClusterRole, opts v1.CreateOptions) (result *authorizationv1.ClusterRole, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(clusterrolesResource, clusterRole), &authorizationv1.ClusterRole{}) + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.ClusterRole), err +} + +// Update takes the representation of a clusterRole and updates it. Returns the server's representation of the clusterRole, and an error, if there is any. +func (c *FakeClusterRoles) Update(ctx context.Context, clusterRole *authorizationv1.ClusterRole, opts v1.UpdateOptions) (result *authorizationv1.ClusterRole, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(clusterrolesResource, clusterRole), &authorizationv1.ClusterRole{}) + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.ClusterRole), err +} + +// Delete takes name of the clusterRole and deletes it. Returns an error if one occurs. +func (c *FakeClusterRoles) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(clusterrolesResource, name), &authorizationv1.ClusterRole{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeClusterRoles) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(clusterrolesResource, listOpts) + + _, err := c.Fake.Invokes(action, &authorizationv1.ClusterRoleList{}) + return err +} + +// Patch applies the patch and returns the patched clusterRole. +func (c *FakeClusterRoles) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *authorizationv1.ClusterRole, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(clusterrolesResource, name, pt, data, subresources...), &authorizationv1.ClusterRole{}) + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.ClusterRole), err +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_clusterrolebinding.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_clusterrolebinding.go new file mode 100644 index 0000000000000..9c9450ebff09b --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_clusterrolebinding.go @@ -0,0 +1,106 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + authorizationv1 "github.com/openshift/api/authorization/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeClusterRoleBindings implements ClusterRoleBindingInterface +type FakeClusterRoleBindings struct { + Fake *FakeAuthorizationV1 +} + +var clusterrolebindingsResource = schema.GroupVersionResource{Group: "authorization.openshift.io", Version: "v1", Resource: "clusterrolebindings"} + +var clusterrolebindingsKind = schema.GroupVersionKind{Group: "authorization.openshift.io", Version: "v1", Kind: "ClusterRoleBinding"} + +// Get takes name of the clusterRoleBinding, and returns the corresponding clusterRoleBinding object, and an error if there is any. +func (c *FakeClusterRoleBindings) Get(ctx context.Context, name string, options v1.GetOptions) (result *authorizationv1.ClusterRoleBinding, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(clusterrolebindingsResource, name), &authorizationv1.ClusterRoleBinding{}) + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.ClusterRoleBinding), err +} + +// List takes label and field selectors, and returns the list of ClusterRoleBindings that match those selectors. +func (c *FakeClusterRoleBindings) List(ctx context.Context, opts v1.ListOptions) (result *authorizationv1.ClusterRoleBindingList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(clusterrolebindingsResource, clusterrolebindingsKind, opts), &authorizationv1.ClusterRoleBindingList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &authorizationv1.ClusterRoleBindingList{ListMeta: obj.(*authorizationv1.ClusterRoleBindingList).ListMeta} + for _, item := range obj.(*authorizationv1.ClusterRoleBindingList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested clusterRoleBindings. +func (c *FakeClusterRoleBindings) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(clusterrolebindingsResource, opts)) +} + +// Create takes the representation of a clusterRoleBinding and creates it. Returns the server's representation of the clusterRoleBinding, and an error, if there is any. +func (c *FakeClusterRoleBindings) Create(ctx context.Context, clusterRoleBinding *authorizationv1.ClusterRoleBinding, opts v1.CreateOptions) (result *authorizationv1.ClusterRoleBinding, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(clusterrolebindingsResource, clusterRoleBinding), &authorizationv1.ClusterRoleBinding{}) + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.ClusterRoleBinding), err +} + +// Update takes the representation of a clusterRoleBinding and updates it. Returns the server's representation of the clusterRoleBinding, and an error, if there is any. +func (c *FakeClusterRoleBindings) Update(ctx context.Context, clusterRoleBinding *authorizationv1.ClusterRoleBinding, opts v1.UpdateOptions) (result *authorizationv1.ClusterRoleBinding, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(clusterrolebindingsResource, clusterRoleBinding), &authorizationv1.ClusterRoleBinding{}) + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.ClusterRoleBinding), err +} + +// Delete takes name of the clusterRoleBinding and deletes it. Returns an error if one occurs. +func (c *FakeClusterRoleBindings) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(clusterrolebindingsResource, name), &authorizationv1.ClusterRoleBinding{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeClusterRoleBindings) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(clusterrolebindingsResource, listOpts) + + _, err := c.Fake.Invokes(action, &authorizationv1.ClusterRoleBindingList{}) + return err +} + +// Patch applies the patch and returns the patched clusterRoleBinding. +func (c *FakeClusterRoleBindings) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *authorizationv1.ClusterRoleBinding, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(clusterrolebindingsResource, name, pt, data, subresources...), &authorizationv1.ClusterRoleBinding{}) + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.ClusterRoleBinding), err +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_localresourceaccessreview.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_localresourceaccessreview.go new file mode 100644 index 0000000000000..751825516a5ef --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_localresourceaccessreview.go @@ -0,0 +1,33 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + v1 "github.com/openshift/api/authorization/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + testing "k8s.io/client-go/testing" +) + +// FakeLocalResourceAccessReviews implements LocalResourceAccessReviewInterface +type FakeLocalResourceAccessReviews struct { + Fake *FakeAuthorizationV1 + ns string +} + +var localresourceaccessreviewsResource = schema.GroupVersionResource{Group: "authorization.openshift.io", Version: "v1", Resource: "localresourceaccessreviews"} + +var localresourceaccessreviewsKind = schema.GroupVersionKind{Group: "authorization.openshift.io", Version: "v1", Kind: "LocalResourceAccessReview"} + +// Create takes the representation of a localResourceAccessReview and creates it. Returns the server's representation of the resourceAccessReviewResponse, and an error, if there is any. +func (c *FakeLocalResourceAccessReviews) Create(ctx context.Context, localResourceAccessReview *v1.LocalResourceAccessReview, opts metav1.CreateOptions) (result *v1.ResourceAccessReviewResponse, err error) { + obj, err := c.Fake. + Invokes(testing.NewCreateAction(localresourceaccessreviewsResource, c.ns, localResourceAccessReview), &v1.ResourceAccessReviewResponse{}) + + if obj == nil { + return nil, err + } + return obj.(*v1.ResourceAccessReviewResponse), err +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_localsubjectaccessreview.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_localsubjectaccessreview.go new file mode 100644 index 0000000000000..36a727f4cafef --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_localsubjectaccessreview.go @@ -0,0 +1,33 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + v1 "github.com/openshift/api/authorization/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + testing "k8s.io/client-go/testing" +) + +// FakeLocalSubjectAccessReviews implements LocalSubjectAccessReviewInterface +type FakeLocalSubjectAccessReviews struct { + Fake *FakeAuthorizationV1 + ns string +} + +var localsubjectaccessreviewsResource = schema.GroupVersionResource{Group: "authorization.openshift.io", Version: "v1", Resource: "localsubjectaccessreviews"} + +var localsubjectaccessreviewsKind = schema.GroupVersionKind{Group: "authorization.openshift.io", Version: "v1", Kind: "LocalSubjectAccessReview"} + +// Create takes the representation of a localSubjectAccessReview and creates it. Returns the server's representation of the subjectAccessReviewResponse, and an error, if there is any. +func (c *FakeLocalSubjectAccessReviews) Create(ctx context.Context, localSubjectAccessReview *v1.LocalSubjectAccessReview, opts metav1.CreateOptions) (result *v1.SubjectAccessReviewResponse, err error) { + obj, err := c.Fake. + Invokes(testing.NewCreateAction(localsubjectaccessreviewsResource, c.ns, localSubjectAccessReview), &v1.SubjectAccessReviewResponse{}) + + if obj == nil { + return nil, err + } + return obj.(*v1.SubjectAccessReviewResponse), err +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_resourceaccessreview.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_resourceaccessreview.go new file mode 100644 index 0000000000000..757919b313618 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_resourceaccessreview.go @@ -0,0 +1,31 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + v1 "github.com/openshift/api/authorization/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + testing "k8s.io/client-go/testing" +) + +// FakeResourceAccessReviews implements ResourceAccessReviewInterface +type FakeResourceAccessReviews struct { + Fake *FakeAuthorizationV1 +} + +var resourceaccessreviewsResource = schema.GroupVersionResource{Group: "authorization.openshift.io", Version: "v1", Resource: "resourceaccessreviews"} + +var resourceaccessreviewsKind = schema.GroupVersionKind{Group: "authorization.openshift.io", Version: "v1", Kind: "ResourceAccessReview"} + +// Create takes the representation of a resourceAccessReview and creates it. Returns the server's representation of the resourceAccessReviewResponse, and an error, if there is any. +func (c *FakeResourceAccessReviews) Create(ctx context.Context, resourceAccessReview *v1.ResourceAccessReview, opts metav1.CreateOptions) (result *v1.ResourceAccessReviewResponse, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(resourceaccessreviewsResource, resourceAccessReview), &v1.ResourceAccessReviewResponse{}) + if obj == nil { + return nil, err + } + return obj.(*v1.ResourceAccessReviewResponse), err +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_role.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_role.go new file mode 100644 index 0000000000000..2ac735322b951 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_role.go @@ -0,0 +1,114 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + authorizationv1 "github.com/openshift/api/authorization/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeRoles implements RoleInterface +type FakeRoles struct { + Fake *FakeAuthorizationV1 + ns string +} + +var rolesResource = schema.GroupVersionResource{Group: "authorization.openshift.io", Version: "v1", Resource: "roles"} + +var rolesKind = schema.GroupVersionKind{Group: "authorization.openshift.io", Version: "v1", Kind: "Role"} + +// Get takes name of the role, and returns the corresponding role object, and an error if there is any. +func (c *FakeRoles) Get(ctx context.Context, name string, options v1.GetOptions) (result *authorizationv1.Role, err error) { + obj, err := c.Fake. + Invokes(testing.NewGetAction(rolesResource, c.ns, name), &authorizationv1.Role{}) + + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.Role), err +} + +// List takes label and field selectors, and returns the list of Roles that match those selectors. +func (c *FakeRoles) List(ctx context.Context, opts v1.ListOptions) (result *authorizationv1.RoleList, err error) { + obj, err := c.Fake. + Invokes(testing.NewListAction(rolesResource, rolesKind, c.ns, opts), &authorizationv1.RoleList{}) + + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &authorizationv1.RoleList{ListMeta: obj.(*authorizationv1.RoleList).ListMeta} + for _, item := range obj.(*authorizationv1.RoleList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested roles. +func (c *FakeRoles) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewWatchAction(rolesResource, c.ns, opts)) + +} + +// Create takes the representation of a role and creates it. Returns the server's representation of the role, and an error, if there is any. +func (c *FakeRoles) Create(ctx context.Context, role *authorizationv1.Role, opts v1.CreateOptions) (result *authorizationv1.Role, err error) { + obj, err := c.Fake. + Invokes(testing.NewCreateAction(rolesResource, c.ns, role), &authorizationv1.Role{}) + + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.Role), err +} + +// Update takes the representation of a role and updates it. Returns the server's representation of the role, and an error, if there is any. +func (c *FakeRoles) Update(ctx context.Context, role *authorizationv1.Role, opts v1.UpdateOptions) (result *authorizationv1.Role, err error) { + obj, err := c.Fake. + Invokes(testing.NewUpdateAction(rolesResource, c.ns, role), &authorizationv1.Role{}) + + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.Role), err +} + +// Delete takes name of the role and deletes it. Returns an error if one occurs. +func (c *FakeRoles) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewDeleteAction(rolesResource, c.ns, name), &authorizationv1.Role{}) + + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeRoles) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(rolesResource, c.ns, listOpts) + + _, err := c.Fake.Invokes(action, &authorizationv1.RoleList{}) + return err +} + +// Patch applies the patch and returns the patched role. +func (c *FakeRoles) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *authorizationv1.Role, err error) { + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(rolesResource, c.ns, name, pt, data, subresources...), &authorizationv1.Role{}) + + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.Role), err +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_rolebinding.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_rolebinding.go new file mode 100644 index 0000000000000..d1933e3526cc5 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_rolebinding.go @@ -0,0 +1,114 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + authorizationv1 "github.com/openshift/api/authorization/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeRoleBindings implements RoleBindingInterface +type FakeRoleBindings struct { + Fake *FakeAuthorizationV1 + ns string +} + +var rolebindingsResource = schema.GroupVersionResource{Group: "authorization.openshift.io", Version: "v1", Resource: "rolebindings"} + +var rolebindingsKind = schema.GroupVersionKind{Group: "authorization.openshift.io", Version: "v1", Kind: "RoleBinding"} + +// Get takes name of the roleBinding, and returns the corresponding roleBinding object, and an error if there is any. +func (c *FakeRoleBindings) Get(ctx context.Context, name string, options v1.GetOptions) (result *authorizationv1.RoleBinding, err error) { + obj, err := c.Fake. + Invokes(testing.NewGetAction(rolebindingsResource, c.ns, name), &authorizationv1.RoleBinding{}) + + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.RoleBinding), err +} + +// List takes label and field selectors, and returns the list of RoleBindings that match those selectors. +func (c *FakeRoleBindings) List(ctx context.Context, opts v1.ListOptions) (result *authorizationv1.RoleBindingList, err error) { + obj, err := c.Fake. + Invokes(testing.NewListAction(rolebindingsResource, rolebindingsKind, c.ns, opts), &authorizationv1.RoleBindingList{}) + + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &authorizationv1.RoleBindingList{ListMeta: obj.(*authorizationv1.RoleBindingList).ListMeta} + for _, item := range obj.(*authorizationv1.RoleBindingList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested roleBindings. +func (c *FakeRoleBindings) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewWatchAction(rolebindingsResource, c.ns, opts)) + +} + +// Create takes the representation of a roleBinding and creates it. Returns the server's representation of the roleBinding, and an error, if there is any. +func (c *FakeRoleBindings) Create(ctx context.Context, roleBinding *authorizationv1.RoleBinding, opts v1.CreateOptions) (result *authorizationv1.RoleBinding, err error) { + obj, err := c.Fake. + Invokes(testing.NewCreateAction(rolebindingsResource, c.ns, roleBinding), &authorizationv1.RoleBinding{}) + + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.RoleBinding), err +} + +// Update takes the representation of a roleBinding and updates it. Returns the server's representation of the roleBinding, and an error, if there is any. +func (c *FakeRoleBindings) Update(ctx context.Context, roleBinding *authorizationv1.RoleBinding, opts v1.UpdateOptions) (result *authorizationv1.RoleBinding, err error) { + obj, err := c.Fake. + Invokes(testing.NewUpdateAction(rolebindingsResource, c.ns, roleBinding), &authorizationv1.RoleBinding{}) + + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.RoleBinding), err +} + +// Delete takes name of the roleBinding and deletes it. Returns an error if one occurs. +func (c *FakeRoleBindings) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewDeleteAction(rolebindingsResource, c.ns, name), &authorizationv1.RoleBinding{}) + + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeRoleBindings) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(rolebindingsResource, c.ns, listOpts) + + _, err := c.Fake.Invokes(action, &authorizationv1.RoleBindingList{}) + return err +} + +// Patch applies the patch and returns the patched roleBinding. +func (c *FakeRoleBindings) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *authorizationv1.RoleBinding, err error) { + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(rolebindingsResource, c.ns, name, pt, data, subresources...), &authorizationv1.RoleBinding{}) + + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.RoleBinding), err +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_rolebindingrestriction.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_rolebindingrestriction.go new file mode 100644 index 0000000000000..76c5b6d235dec --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_rolebindingrestriction.go @@ -0,0 +1,114 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + authorizationv1 "github.com/openshift/api/authorization/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeRoleBindingRestrictions implements RoleBindingRestrictionInterface +type FakeRoleBindingRestrictions struct { + Fake *FakeAuthorizationV1 + ns string +} + +var rolebindingrestrictionsResource = schema.GroupVersionResource{Group: "authorization.openshift.io", Version: "v1", Resource: "rolebindingrestrictions"} + +var rolebindingrestrictionsKind = schema.GroupVersionKind{Group: "authorization.openshift.io", Version: "v1", Kind: "RoleBindingRestriction"} + +// Get takes name of the roleBindingRestriction, and returns the corresponding roleBindingRestriction object, and an error if there is any. +func (c *FakeRoleBindingRestrictions) Get(ctx context.Context, name string, options v1.GetOptions) (result *authorizationv1.RoleBindingRestriction, err error) { + obj, err := c.Fake. + Invokes(testing.NewGetAction(rolebindingrestrictionsResource, c.ns, name), &authorizationv1.RoleBindingRestriction{}) + + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.RoleBindingRestriction), err +} + +// List takes label and field selectors, and returns the list of RoleBindingRestrictions that match those selectors. +func (c *FakeRoleBindingRestrictions) List(ctx context.Context, opts v1.ListOptions) (result *authorizationv1.RoleBindingRestrictionList, err error) { + obj, err := c.Fake. + Invokes(testing.NewListAction(rolebindingrestrictionsResource, rolebindingrestrictionsKind, c.ns, opts), &authorizationv1.RoleBindingRestrictionList{}) + + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &authorizationv1.RoleBindingRestrictionList{ListMeta: obj.(*authorizationv1.RoleBindingRestrictionList).ListMeta} + for _, item := range obj.(*authorizationv1.RoleBindingRestrictionList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested roleBindingRestrictions. +func (c *FakeRoleBindingRestrictions) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewWatchAction(rolebindingrestrictionsResource, c.ns, opts)) + +} + +// Create takes the representation of a roleBindingRestriction and creates it. Returns the server's representation of the roleBindingRestriction, and an error, if there is any. +func (c *FakeRoleBindingRestrictions) Create(ctx context.Context, roleBindingRestriction *authorizationv1.RoleBindingRestriction, opts v1.CreateOptions) (result *authorizationv1.RoleBindingRestriction, err error) { + obj, err := c.Fake. + Invokes(testing.NewCreateAction(rolebindingrestrictionsResource, c.ns, roleBindingRestriction), &authorizationv1.RoleBindingRestriction{}) + + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.RoleBindingRestriction), err +} + +// Update takes the representation of a roleBindingRestriction and updates it. Returns the server's representation of the roleBindingRestriction, and an error, if there is any. +func (c *FakeRoleBindingRestrictions) Update(ctx context.Context, roleBindingRestriction *authorizationv1.RoleBindingRestriction, opts v1.UpdateOptions) (result *authorizationv1.RoleBindingRestriction, err error) { + obj, err := c.Fake. + Invokes(testing.NewUpdateAction(rolebindingrestrictionsResource, c.ns, roleBindingRestriction), &authorizationv1.RoleBindingRestriction{}) + + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.RoleBindingRestriction), err +} + +// Delete takes name of the roleBindingRestriction and deletes it. Returns an error if one occurs. +func (c *FakeRoleBindingRestrictions) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewDeleteAction(rolebindingrestrictionsResource, c.ns, name), &authorizationv1.RoleBindingRestriction{}) + + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeRoleBindingRestrictions) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(rolebindingrestrictionsResource, c.ns, listOpts) + + _, err := c.Fake.Invokes(action, &authorizationv1.RoleBindingRestrictionList{}) + return err +} + +// Patch applies the patch and returns the patched roleBindingRestriction. +func (c *FakeRoleBindingRestrictions) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *authorizationv1.RoleBindingRestriction, err error) { + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(rolebindingrestrictionsResource, c.ns, name, pt, data, subresources...), &authorizationv1.RoleBindingRestriction{}) + + if obj == nil { + return nil, err + } + return obj.(*authorizationv1.RoleBindingRestriction), err +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_selfsubjectrulesreview.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_selfsubjectrulesreview.go new file mode 100644 index 0000000000000..737d8f193af1c --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_selfsubjectrulesreview.go @@ -0,0 +1,33 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + v1 "github.com/openshift/api/authorization/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + testing "k8s.io/client-go/testing" +) + +// FakeSelfSubjectRulesReviews implements SelfSubjectRulesReviewInterface +type FakeSelfSubjectRulesReviews struct { + Fake *FakeAuthorizationV1 + ns string +} + +var selfsubjectrulesreviewsResource = schema.GroupVersionResource{Group: "authorization.openshift.io", Version: "v1", Resource: "selfsubjectrulesreviews"} + +var selfsubjectrulesreviewsKind = schema.GroupVersionKind{Group: "authorization.openshift.io", Version: "v1", Kind: "SelfSubjectRulesReview"} + +// Create takes the representation of a selfSubjectRulesReview and creates it. Returns the server's representation of the selfSubjectRulesReview, and an error, if there is any. +func (c *FakeSelfSubjectRulesReviews) Create(ctx context.Context, selfSubjectRulesReview *v1.SelfSubjectRulesReview, opts metav1.CreateOptions) (result *v1.SelfSubjectRulesReview, err error) { + obj, err := c.Fake. + Invokes(testing.NewCreateAction(selfsubjectrulesreviewsResource, c.ns, selfSubjectRulesReview), &v1.SelfSubjectRulesReview{}) + + if obj == nil { + return nil, err + } + return obj.(*v1.SelfSubjectRulesReview), err +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_subjectaccessreview.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_subjectaccessreview.go new file mode 100644 index 0000000000000..10a87cd5205f7 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_subjectaccessreview.go @@ -0,0 +1,31 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + v1 "github.com/openshift/api/authorization/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + testing "k8s.io/client-go/testing" +) + +// FakeSubjectAccessReviews implements SubjectAccessReviewInterface +type FakeSubjectAccessReviews struct { + Fake *FakeAuthorizationV1 +} + +var subjectaccessreviewsResource = schema.GroupVersionResource{Group: "authorization.openshift.io", Version: "v1", Resource: "subjectaccessreviews"} + +var subjectaccessreviewsKind = schema.GroupVersionKind{Group: "authorization.openshift.io", Version: "v1", Kind: "SubjectAccessReview"} + +// Create takes the representation of a subjectAccessReview and creates it. Returns the server's representation of the subjectAccessReviewResponse, and an error, if there is any. +func (c *FakeSubjectAccessReviews) Create(ctx context.Context, subjectAccessReview *v1.SubjectAccessReview, opts metav1.CreateOptions) (result *v1.SubjectAccessReviewResponse, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(subjectaccessreviewsResource, subjectAccessReview), &v1.SubjectAccessReviewResponse{}) + if obj == nil { + return nil, err + } + return obj.(*v1.SubjectAccessReviewResponse), err +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_subjectrulesreview.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_subjectrulesreview.go new file mode 100644 index 0000000000000..eb89088ed6fd0 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake/fake_subjectrulesreview.go @@ -0,0 +1,33 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + v1 "github.com/openshift/api/authorization/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + testing "k8s.io/client-go/testing" +) + +// FakeSubjectRulesReviews implements SubjectRulesReviewInterface +type FakeSubjectRulesReviews struct { + Fake *FakeAuthorizationV1 + ns string +} + +var subjectrulesreviewsResource = schema.GroupVersionResource{Group: "authorization.openshift.io", Version: "v1", Resource: "subjectrulesreviews"} + +var subjectrulesreviewsKind = schema.GroupVersionKind{Group: "authorization.openshift.io", Version: "v1", Kind: "SubjectRulesReview"} + +// Create takes the representation of a subjectRulesReview and creates it. Returns the server's representation of the subjectRulesReview, and an error, if there is any. +func (c *FakeSubjectRulesReviews) Create(ctx context.Context, subjectRulesReview *v1.SubjectRulesReview, opts metav1.CreateOptions) (result *v1.SubjectRulesReview, err error) { + obj, err := c.Fake. + Invokes(testing.NewCreateAction(subjectrulesreviewsResource, c.ns, subjectRulesReview), &v1.SubjectRulesReview{}) + + if obj == nil { + return nil, err + } + return obj.(*v1.SubjectRulesReview), err +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/generated_expansion.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/generated_expansion.go new file mode 100644 index 0000000000000..ff51ceca26629 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/generated_expansion.go @@ -0,0 +1,25 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type ClusterRoleExpansion interface{} + +type ClusterRoleBindingExpansion interface{} + +type LocalResourceAccessReviewExpansion interface{} + +type LocalSubjectAccessReviewExpansion interface{} + +type ResourceAccessReviewExpansion interface{} + +type RoleExpansion interface{} + +type RoleBindingExpansion interface{} + +type RoleBindingRestrictionExpansion interface{} + +type SelfSubjectRulesReviewExpansion interface{} + +type SubjectAccessReviewExpansion interface{} + +type SubjectRulesReviewExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/localresourceaccessreview.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/localresourceaccessreview.go new file mode 100644 index 0000000000000..41b33dc45abd0 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/localresourceaccessreview.go @@ -0,0 +1,52 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + + v1 "github.com/openshift/api/authorization/v1" + scheme "github.com/openshift/client-go/authorization/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// LocalResourceAccessReviewsGetter has a method to return a LocalResourceAccessReviewInterface. +// A group's client should implement this interface. +type LocalResourceAccessReviewsGetter interface { + LocalResourceAccessReviews(namespace string) LocalResourceAccessReviewInterface +} + +// LocalResourceAccessReviewInterface has methods to work with LocalResourceAccessReview resources. +type LocalResourceAccessReviewInterface interface { + Create(ctx context.Context, localResourceAccessReview *v1.LocalResourceAccessReview, opts metav1.CreateOptions) (*v1.ResourceAccessReviewResponse, error) + + LocalResourceAccessReviewExpansion +} + +// localResourceAccessReviews implements LocalResourceAccessReviewInterface +type localResourceAccessReviews struct { + client rest.Interface + ns string +} + +// newLocalResourceAccessReviews returns a LocalResourceAccessReviews +func newLocalResourceAccessReviews(c *AuthorizationV1Client, namespace string) *localResourceAccessReviews { + return &localResourceAccessReviews{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Create takes the representation of a localResourceAccessReview and creates it. Returns the server's representation of the resourceAccessReviewResponse, and an error, if there is any. +func (c *localResourceAccessReviews) Create(ctx context.Context, localResourceAccessReview *v1.LocalResourceAccessReview, opts metav1.CreateOptions) (result *v1.ResourceAccessReviewResponse, err error) { + result = &v1.ResourceAccessReviewResponse{} + err = c.client.Post(). + Namespace(c.ns). + Resource("localresourceaccessreviews"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(localResourceAccessReview). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/localsubjectaccessreview.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/localsubjectaccessreview.go new file mode 100644 index 0000000000000..d4dc64c830ffa --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/localsubjectaccessreview.go @@ -0,0 +1,52 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + + v1 "github.com/openshift/api/authorization/v1" + scheme "github.com/openshift/client-go/authorization/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// LocalSubjectAccessReviewsGetter has a method to return a LocalSubjectAccessReviewInterface. +// A group's client should implement this interface. +type LocalSubjectAccessReviewsGetter interface { + LocalSubjectAccessReviews(namespace string) LocalSubjectAccessReviewInterface +} + +// LocalSubjectAccessReviewInterface has methods to work with LocalSubjectAccessReview resources. +type LocalSubjectAccessReviewInterface interface { + Create(ctx context.Context, localSubjectAccessReview *v1.LocalSubjectAccessReview, opts metav1.CreateOptions) (*v1.SubjectAccessReviewResponse, error) + + LocalSubjectAccessReviewExpansion +} + +// localSubjectAccessReviews implements LocalSubjectAccessReviewInterface +type localSubjectAccessReviews struct { + client rest.Interface + ns string +} + +// newLocalSubjectAccessReviews returns a LocalSubjectAccessReviews +func newLocalSubjectAccessReviews(c *AuthorizationV1Client, namespace string) *localSubjectAccessReviews { + return &localSubjectAccessReviews{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Create takes the representation of a localSubjectAccessReview and creates it. Returns the server's representation of the subjectAccessReviewResponse, and an error, if there is any. +func (c *localSubjectAccessReviews) Create(ctx context.Context, localSubjectAccessReview *v1.LocalSubjectAccessReview, opts metav1.CreateOptions) (result *v1.SubjectAccessReviewResponse, err error) { + result = &v1.SubjectAccessReviewResponse{} + err = c.client.Post(). + Namespace(c.ns). + Resource("localsubjectaccessreviews"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(localSubjectAccessReview). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/resourceaccessreview.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/resourceaccessreview.go new file mode 100644 index 0000000000000..4fe3c3d3c18d6 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/resourceaccessreview.go @@ -0,0 +1,49 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + + v1 "github.com/openshift/api/authorization/v1" + scheme "github.com/openshift/client-go/authorization/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// ResourceAccessReviewsGetter has a method to return a ResourceAccessReviewInterface. +// A group's client should implement this interface. +type ResourceAccessReviewsGetter interface { + ResourceAccessReviews() ResourceAccessReviewInterface +} + +// ResourceAccessReviewInterface has methods to work with ResourceAccessReview resources. +type ResourceAccessReviewInterface interface { + Create(ctx context.Context, resourceAccessReview *v1.ResourceAccessReview, opts metav1.CreateOptions) (*v1.ResourceAccessReviewResponse, error) + + ResourceAccessReviewExpansion +} + +// resourceAccessReviews implements ResourceAccessReviewInterface +type resourceAccessReviews struct { + client rest.Interface +} + +// newResourceAccessReviews returns a ResourceAccessReviews +func newResourceAccessReviews(c *AuthorizationV1Client) *resourceAccessReviews { + return &resourceAccessReviews{ + client: c.RESTClient(), + } +} + +// Create takes the representation of a resourceAccessReview and creates it. Returns the server's representation of the resourceAccessReviewResponse, and an error, if there is any. +func (c *resourceAccessReviews) Create(ctx context.Context, resourceAccessReview *v1.ResourceAccessReview, opts metav1.CreateOptions) (result *v1.ResourceAccessReviewResponse, err error) { + result = &v1.ResourceAccessReviewResponse{} + err = c.client.Post(). + Resource("resourceaccessreviews"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(resourceAccessReview). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/role.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/role.go new file mode 100644 index 0000000000000..fee5093c79daa --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/role.go @@ -0,0 +1,162 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/authorization/v1" + scheme "github.com/openshift/client-go/authorization/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// RolesGetter has a method to return a RoleInterface. +// A group's client should implement this interface. +type RolesGetter interface { + Roles(namespace string) RoleInterface +} + +// RoleInterface has methods to work with Role resources. +type RoleInterface interface { + Create(ctx context.Context, role *v1.Role, opts metav1.CreateOptions) (*v1.Role, error) + Update(ctx context.Context, role *v1.Role, opts metav1.UpdateOptions) (*v1.Role, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Role, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.RoleList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Role, err error) + RoleExpansion +} + +// roles implements RoleInterface +type roles struct { + client rest.Interface + ns string +} + +// newRoles returns a Roles +func newRoles(c *AuthorizationV1Client, namespace string) *roles { + return &roles{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the role, and returns the corresponding role object, and an error if there is any. +func (c *roles) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Role, err error) { + result = &v1.Role{} + err = c.client.Get(). + Namespace(c.ns). + Resource("roles"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Roles that match those selectors. +func (c *roles) List(ctx context.Context, opts metav1.ListOptions) (result *v1.RoleList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.RoleList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("roles"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested roles. +func (c *roles) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("roles"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a role and creates it. Returns the server's representation of the role, and an error, if there is any. +func (c *roles) Create(ctx context.Context, role *v1.Role, opts metav1.CreateOptions) (result *v1.Role, err error) { + result = &v1.Role{} + err = c.client.Post(). + Namespace(c.ns). + Resource("roles"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(role). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a role and updates it. Returns the server's representation of the role, and an error, if there is any. +func (c *roles) Update(ctx context.Context, role *v1.Role, opts metav1.UpdateOptions) (result *v1.Role, err error) { + result = &v1.Role{} + err = c.client.Put(). + Namespace(c.ns). + Resource("roles"). + Name(role.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(role). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the role and deletes it. Returns an error if one occurs. +func (c *roles) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("roles"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *roles) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("roles"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched role. +func (c *roles) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Role, err error) { + result = &v1.Role{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("roles"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/rolebinding.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/rolebinding.go new file mode 100644 index 0000000000000..d58c83f820367 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/rolebinding.go @@ -0,0 +1,162 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/authorization/v1" + scheme "github.com/openshift/client-go/authorization/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// RoleBindingsGetter has a method to return a RoleBindingInterface. +// A group's client should implement this interface. +type RoleBindingsGetter interface { + RoleBindings(namespace string) RoleBindingInterface +} + +// RoleBindingInterface has methods to work with RoleBinding resources. +type RoleBindingInterface interface { + Create(ctx context.Context, roleBinding *v1.RoleBinding, opts metav1.CreateOptions) (*v1.RoleBinding, error) + Update(ctx context.Context, roleBinding *v1.RoleBinding, opts metav1.UpdateOptions) (*v1.RoleBinding, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.RoleBinding, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.RoleBindingList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.RoleBinding, err error) + RoleBindingExpansion +} + +// roleBindings implements RoleBindingInterface +type roleBindings struct { + client rest.Interface + ns string +} + +// newRoleBindings returns a RoleBindings +func newRoleBindings(c *AuthorizationV1Client, namespace string) *roleBindings { + return &roleBindings{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the roleBinding, and returns the corresponding roleBinding object, and an error if there is any. +func (c *roleBindings) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.RoleBinding, err error) { + result = &v1.RoleBinding{} + err = c.client.Get(). + Namespace(c.ns). + Resource("rolebindings"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of RoleBindings that match those selectors. +func (c *roleBindings) List(ctx context.Context, opts metav1.ListOptions) (result *v1.RoleBindingList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.RoleBindingList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("rolebindings"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested roleBindings. +func (c *roleBindings) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("rolebindings"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a roleBinding and creates it. Returns the server's representation of the roleBinding, and an error, if there is any. +func (c *roleBindings) Create(ctx context.Context, roleBinding *v1.RoleBinding, opts metav1.CreateOptions) (result *v1.RoleBinding, err error) { + result = &v1.RoleBinding{} + err = c.client.Post(). + Namespace(c.ns). + Resource("rolebindings"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(roleBinding). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a roleBinding and updates it. Returns the server's representation of the roleBinding, and an error, if there is any. +func (c *roleBindings) Update(ctx context.Context, roleBinding *v1.RoleBinding, opts metav1.UpdateOptions) (result *v1.RoleBinding, err error) { + result = &v1.RoleBinding{} + err = c.client.Put(). + Namespace(c.ns). + Resource("rolebindings"). + Name(roleBinding.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(roleBinding). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the roleBinding and deletes it. Returns an error if one occurs. +func (c *roleBindings) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("rolebindings"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *roleBindings) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("rolebindings"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched roleBinding. +func (c *roleBindings) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.RoleBinding, err error) { + result = &v1.RoleBinding{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("rolebindings"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/rolebindingrestriction.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/rolebindingrestriction.go new file mode 100644 index 0000000000000..bd0e49ba13bac --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/rolebindingrestriction.go @@ -0,0 +1,162 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/authorization/v1" + scheme "github.com/openshift/client-go/authorization/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// RoleBindingRestrictionsGetter has a method to return a RoleBindingRestrictionInterface. +// A group's client should implement this interface. +type RoleBindingRestrictionsGetter interface { + RoleBindingRestrictions(namespace string) RoleBindingRestrictionInterface +} + +// RoleBindingRestrictionInterface has methods to work with RoleBindingRestriction resources. +type RoleBindingRestrictionInterface interface { + Create(ctx context.Context, roleBindingRestriction *v1.RoleBindingRestriction, opts metav1.CreateOptions) (*v1.RoleBindingRestriction, error) + Update(ctx context.Context, roleBindingRestriction *v1.RoleBindingRestriction, opts metav1.UpdateOptions) (*v1.RoleBindingRestriction, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.RoleBindingRestriction, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.RoleBindingRestrictionList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.RoleBindingRestriction, err error) + RoleBindingRestrictionExpansion +} + +// roleBindingRestrictions implements RoleBindingRestrictionInterface +type roleBindingRestrictions struct { + client rest.Interface + ns string +} + +// newRoleBindingRestrictions returns a RoleBindingRestrictions +func newRoleBindingRestrictions(c *AuthorizationV1Client, namespace string) *roleBindingRestrictions { + return &roleBindingRestrictions{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the roleBindingRestriction, and returns the corresponding roleBindingRestriction object, and an error if there is any. +func (c *roleBindingRestrictions) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.RoleBindingRestriction, err error) { + result = &v1.RoleBindingRestriction{} + err = c.client.Get(). + Namespace(c.ns). + Resource("rolebindingrestrictions"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of RoleBindingRestrictions that match those selectors. +func (c *roleBindingRestrictions) List(ctx context.Context, opts metav1.ListOptions) (result *v1.RoleBindingRestrictionList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.RoleBindingRestrictionList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("rolebindingrestrictions"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested roleBindingRestrictions. +func (c *roleBindingRestrictions) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("rolebindingrestrictions"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a roleBindingRestriction and creates it. Returns the server's representation of the roleBindingRestriction, and an error, if there is any. +func (c *roleBindingRestrictions) Create(ctx context.Context, roleBindingRestriction *v1.RoleBindingRestriction, opts metav1.CreateOptions) (result *v1.RoleBindingRestriction, err error) { + result = &v1.RoleBindingRestriction{} + err = c.client.Post(). + Namespace(c.ns). + Resource("rolebindingrestrictions"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(roleBindingRestriction). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a roleBindingRestriction and updates it. Returns the server's representation of the roleBindingRestriction, and an error, if there is any. +func (c *roleBindingRestrictions) Update(ctx context.Context, roleBindingRestriction *v1.RoleBindingRestriction, opts metav1.UpdateOptions) (result *v1.RoleBindingRestriction, err error) { + result = &v1.RoleBindingRestriction{} + err = c.client.Put(). + Namespace(c.ns). + Resource("rolebindingrestrictions"). + Name(roleBindingRestriction.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(roleBindingRestriction). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the roleBindingRestriction and deletes it. Returns an error if one occurs. +func (c *roleBindingRestrictions) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("rolebindingrestrictions"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *roleBindingRestrictions) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("rolebindingrestrictions"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched roleBindingRestriction. +func (c *roleBindingRestrictions) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.RoleBindingRestriction, err error) { + result = &v1.RoleBindingRestriction{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("rolebindingrestrictions"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/selfsubjectrulesreview.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/selfsubjectrulesreview.go new file mode 100644 index 0000000000000..dccc70e40bc1e --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/selfsubjectrulesreview.go @@ -0,0 +1,51 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + + v1 "github.com/openshift/api/authorization/v1" + scheme "github.com/openshift/client-go/authorization/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// SelfSubjectRulesReviewsGetter has a method to return a SelfSubjectRulesReviewInterface. +// A group's client should implement this interface. +type SelfSubjectRulesReviewsGetter interface { + SelfSubjectRulesReviews(namespace string) SelfSubjectRulesReviewInterface +} + +// SelfSubjectRulesReviewInterface has methods to work with SelfSubjectRulesReview resources. +type SelfSubjectRulesReviewInterface interface { + Create(ctx context.Context, selfSubjectRulesReview *v1.SelfSubjectRulesReview, opts metav1.CreateOptions) (*v1.SelfSubjectRulesReview, error) + SelfSubjectRulesReviewExpansion +} + +// selfSubjectRulesReviews implements SelfSubjectRulesReviewInterface +type selfSubjectRulesReviews struct { + client rest.Interface + ns string +} + +// newSelfSubjectRulesReviews returns a SelfSubjectRulesReviews +func newSelfSubjectRulesReviews(c *AuthorizationV1Client, namespace string) *selfSubjectRulesReviews { + return &selfSubjectRulesReviews{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Create takes the representation of a selfSubjectRulesReview and creates it. Returns the server's representation of the selfSubjectRulesReview, and an error, if there is any. +func (c *selfSubjectRulesReviews) Create(ctx context.Context, selfSubjectRulesReview *v1.SelfSubjectRulesReview, opts metav1.CreateOptions) (result *v1.SelfSubjectRulesReview, err error) { + result = &v1.SelfSubjectRulesReview{} + err = c.client.Post(). + Namespace(c.ns). + Resource("selfsubjectrulesreviews"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(selfSubjectRulesReview). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/subjectaccessreview.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/subjectaccessreview.go new file mode 100644 index 0000000000000..448b55ad9653c --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/subjectaccessreview.go @@ -0,0 +1,49 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + + v1 "github.com/openshift/api/authorization/v1" + scheme "github.com/openshift/client-go/authorization/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// SubjectAccessReviewsGetter has a method to return a SubjectAccessReviewInterface. +// A group's client should implement this interface. +type SubjectAccessReviewsGetter interface { + SubjectAccessReviews() SubjectAccessReviewInterface +} + +// SubjectAccessReviewInterface has methods to work with SubjectAccessReview resources. +type SubjectAccessReviewInterface interface { + Create(ctx context.Context, subjectAccessReview *v1.SubjectAccessReview, opts metav1.CreateOptions) (*v1.SubjectAccessReviewResponse, error) + + SubjectAccessReviewExpansion +} + +// subjectAccessReviews implements SubjectAccessReviewInterface +type subjectAccessReviews struct { + client rest.Interface +} + +// newSubjectAccessReviews returns a SubjectAccessReviews +func newSubjectAccessReviews(c *AuthorizationV1Client) *subjectAccessReviews { + return &subjectAccessReviews{ + client: c.RESTClient(), + } +} + +// Create takes the representation of a subjectAccessReview and creates it. Returns the server's representation of the subjectAccessReviewResponse, and an error, if there is any. +func (c *subjectAccessReviews) Create(ctx context.Context, subjectAccessReview *v1.SubjectAccessReview, opts metav1.CreateOptions) (result *v1.SubjectAccessReviewResponse, err error) { + result = &v1.SubjectAccessReviewResponse{} + err = c.client.Post(). + Resource("subjectaccessreviews"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(subjectAccessReview). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/subjectrulesreview.go b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/subjectrulesreview.go new file mode 100644 index 0000000000000..dd02802f73c87 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/subjectrulesreview.go @@ -0,0 +1,51 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + + v1 "github.com/openshift/api/authorization/v1" + scheme "github.com/openshift/client-go/authorization/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// SubjectRulesReviewsGetter has a method to return a SubjectRulesReviewInterface. +// A group's client should implement this interface. +type SubjectRulesReviewsGetter interface { + SubjectRulesReviews(namespace string) SubjectRulesReviewInterface +} + +// SubjectRulesReviewInterface has methods to work with SubjectRulesReview resources. +type SubjectRulesReviewInterface interface { + Create(ctx context.Context, subjectRulesReview *v1.SubjectRulesReview, opts metav1.CreateOptions) (*v1.SubjectRulesReview, error) + SubjectRulesReviewExpansion +} + +// subjectRulesReviews implements SubjectRulesReviewInterface +type subjectRulesReviews struct { + client rest.Interface + ns string +} + +// newSubjectRulesReviews returns a SubjectRulesReviews +func newSubjectRulesReviews(c *AuthorizationV1Client, namespace string) *subjectRulesReviews { + return &subjectRulesReviews{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Create takes the representation of a subjectRulesReview and creates it. Returns the server's representation of the subjectRulesReview, and an error, if there is any. +func (c *subjectRulesReviews) Create(ctx context.Context, subjectRulesReview *v1.SubjectRulesReview, opts metav1.CreateOptions) (result *v1.SubjectRulesReview, err error) { + result = &v1.SubjectRulesReview{} + err = c.client.Post(). + Namespace(c.ns). + Resource("subjectrulesreviews"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(subjectRulesReview). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/interface.go b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/interface.go new file mode 100644 index 0000000000000..b5cdb4853b6b0 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/interface.go @@ -0,0 +1,30 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package authorization + +import ( + v1 "github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1" + internalinterfaces "github.com/openshift/client-go/authorization/informers/externalversions/internalinterfaces" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1 provides access to shared informers for resources in V1. + V1() v1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1 returns a new v1.Interface. +func (g *group) V1() v1.Interface { + return v1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/clusterrole.go b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/clusterrole.go new file mode 100644 index 0000000000000..f58334174b244 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/clusterrole.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + authorizationv1 "github.com/openshift/api/authorization/v1" + versioned "github.com/openshift/client-go/authorization/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/authorization/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/authorization/listers/authorization/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// ClusterRoleInformer provides access to a shared informer and lister for +// ClusterRoles. +type ClusterRoleInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.ClusterRoleLister +} + +type clusterRoleInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewClusterRoleInformer constructs a new informer for ClusterRole type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewClusterRoleInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredClusterRoleInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredClusterRoleInformer constructs a new informer for ClusterRole type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredClusterRoleInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AuthorizationV1().ClusterRoles().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AuthorizationV1().ClusterRoles().Watch(context.TODO(), options) + }, + }, + &authorizationv1.ClusterRole{}, + resyncPeriod, + indexers, + ) +} + +func (f *clusterRoleInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredClusterRoleInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *clusterRoleInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&authorizationv1.ClusterRole{}, f.defaultInformer) +} + +func (f *clusterRoleInformer) Lister() v1.ClusterRoleLister { + return v1.NewClusterRoleLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/clusterrolebinding.go b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/clusterrolebinding.go new file mode 100644 index 0000000000000..b66ea22a2493f --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/clusterrolebinding.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + authorizationv1 "github.com/openshift/api/authorization/v1" + versioned "github.com/openshift/client-go/authorization/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/authorization/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/authorization/listers/authorization/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// ClusterRoleBindingInformer provides access to a shared informer and lister for +// ClusterRoleBindings. +type ClusterRoleBindingInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.ClusterRoleBindingLister +} + +type clusterRoleBindingInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewClusterRoleBindingInformer constructs a new informer for ClusterRoleBinding type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewClusterRoleBindingInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredClusterRoleBindingInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredClusterRoleBindingInformer constructs a new informer for ClusterRoleBinding type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredClusterRoleBindingInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AuthorizationV1().ClusterRoleBindings().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AuthorizationV1().ClusterRoleBindings().Watch(context.TODO(), options) + }, + }, + &authorizationv1.ClusterRoleBinding{}, + resyncPeriod, + indexers, + ) +} + +func (f *clusterRoleBindingInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredClusterRoleBindingInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *clusterRoleBindingInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&authorizationv1.ClusterRoleBinding{}, f.defaultInformer) +} + +func (f *clusterRoleBindingInformer) Lister() v1.ClusterRoleBindingLister { + return v1.NewClusterRoleBindingLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/interface.go b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/interface.go new file mode 100644 index 0000000000000..803cd2f3b5d6b --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/interface.go @@ -0,0 +1,57 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + internalinterfaces "github.com/openshift/client-go/authorization/informers/externalversions/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // ClusterRoles returns a ClusterRoleInformer. + ClusterRoles() ClusterRoleInformer + // ClusterRoleBindings returns a ClusterRoleBindingInformer. + ClusterRoleBindings() ClusterRoleBindingInformer + // Roles returns a RoleInformer. + Roles() RoleInformer + // RoleBindings returns a RoleBindingInformer. + RoleBindings() RoleBindingInformer + // RoleBindingRestrictions returns a RoleBindingRestrictionInformer. + RoleBindingRestrictions() RoleBindingRestrictionInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// ClusterRoles returns a ClusterRoleInformer. +func (v *version) ClusterRoles() ClusterRoleInformer { + return &clusterRoleInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + +// ClusterRoleBindings returns a ClusterRoleBindingInformer. +func (v *version) ClusterRoleBindings() ClusterRoleBindingInformer { + return &clusterRoleBindingInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + +// Roles returns a RoleInformer. +func (v *version) Roles() RoleInformer { + return &roleInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} + +// RoleBindings returns a RoleBindingInformer. +func (v *version) RoleBindings() RoleBindingInformer { + return &roleBindingInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} + +// RoleBindingRestrictions returns a RoleBindingRestrictionInformer. +func (v *version) RoleBindingRestrictions() RoleBindingRestrictionInformer { + return &roleBindingRestrictionInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/role.go b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/role.go new file mode 100644 index 0000000000000..d422c78276e27 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/role.go @@ -0,0 +1,74 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + authorizationv1 "github.com/openshift/api/authorization/v1" + versioned "github.com/openshift/client-go/authorization/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/authorization/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/authorization/listers/authorization/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// RoleInformer provides access to a shared informer and lister for +// Roles. +type RoleInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.RoleLister +} + +type roleInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewRoleInformer constructs a new informer for Role type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewRoleInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredRoleInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredRoleInformer constructs a new informer for Role type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredRoleInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AuthorizationV1().Roles(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AuthorizationV1().Roles(namespace).Watch(context.TODO(), options) + }, + }, + &authorizationv1.Role{}, + resyncPeriod, + indexers, + ) +} + +func (f *roleInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredRoleInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *roleInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&authorizationv1.Role{}, f.defaultInformer) +} + +func (f *roleInformer) Lister() v1.RoleLister { + return v1.NewRoleLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/rolebinding.go b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/rolebinding.go new file mode 100644 index 0000000000000..80afa1f3a233a --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/rolebinding.go @@ -0,0 +1,74 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + authorizationv1 "github.com/openshift/api/authorization/v1" + versioned "github.com/openshift/client-go/authorization/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/authorization/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/authorization/listers/authorization/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// RoleBindingInformer provides access to a shared informer and lister for +// RoleBindings. +type RoleBindingInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.RoleBindingLister +} + +type roleBindingInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewRoleBindingInformer constructs a new informer for RoleBinding type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewRoleBindingInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredRoleBindingInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredRoleBindingInformer constructs a new informer for RoleBinding type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredRoleBindingInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AuthorizationV1().RoleBindings(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AuthorizationV1().RoleBindings(namespace).Watch(context.TODO(), options) + }, + }, + &authorizationv1.RoleBinding{}, + resyncPeriod, + indexers, + ) +} + +func (f *roleBindingInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredRoleBindingInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *roleBindingInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&authorizationv1.RoleBinding{}, f.defaultInformer) +} + +func (f *roleBindingInformer) Lister() v1.RoleBindingLister { + return v1.NewRoleBindingLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/rolebindingrestriction.go b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/rolebindingrestriction.go new file mode 100644 index 0000000000000..1f6b462476a9d --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1/rolebindingrestriction.go @@ -0,0 +1,74 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + authorizationv1 "github.com/openshift/api/authorization/v1" + versioned "github.com/openshift/client-go/authorization/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/authorization/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/authorization/listers/authorization/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// RoleBindingRestrictionInformer provides access to a shared informer and lister for +// RoleBindingRestrictions. +type RoleBindingRestrictionInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.RoleBindingRestrictionLister +} + +type roleBindingRestrictionInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewRoleBindingRestrictionInformer constructs a new informer for RoleBindingRestriction type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewRoleBindingRestrictionInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredRoleBindingRestrictionInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredRoleBindingRestrictionInformer constructs a new informer for RoleBindingRestriction type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredRoleBindingRestrictionInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AuthorizationV1().RoleBindingRestrictions(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.AuthorizationV1().RoleBindingRestrictions(namespace).Watch(context.TODO(), options) + }, + }, + &authorizationv1.RoleBindingRestriction{}, + resyncPeriod, + indexers, + ) +} + +func (f *roleBindingRestrictionInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredRoleBindingRestrictionInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *roleBindingRestrictionInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&authorizationv1.RoleBindingRestriction{}, f.defaultInformer) +} + +func (f *roleBindingRestrictionInformer) Lister() v1.RoleBindingRestrictionLister { + return v1.NewRoleBindingRestrictionLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/authorization/informers/externalversions/factory.go b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/factory.go new file mode 100644 index 0000000000000..91878ff07535b --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/factory.go @@ -0,0 +1,164 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + reflect "reflect" + sync "sync" + time "time" + + versioned "github.com/openshift/client-go/authorization/clientset/versioned" + authorization "github.com/openshift/client-go/authorization/informers/externalversions/authorization" + internalinterfaces "github.com/openshift/client-go/authorization/informers/externalversions/internalinterfaces" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// SharedInformerOption defines the functional option type for SharedInformerFactory. +type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory + +type sharedInformerFactory struct { + client versioned.Interface + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc + lock sync.Mutex + defaultResync time.Duration + customResync map[reflect.Type]time.Duration + + informers map[reflect.Type]cache.SharedIndexInformer + // startedInformers is used for tracking which informers have been started. + // This allows Start() to be called multiple times safely. + startedInformers map[reflect.Type]bool +} + +// WithCustomResyncConfig sets a custom resync period for the specified informer types. +func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + for k, v := range resyncConfig { + factory.customResync[reflect.TypeOf(k)] = v + } + return factory + } +} + +// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory. +func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.tweakListOptions = tweakListOptions + return factory + } +} + +// WithNamespace limits the SharedInformerFactory to the specified namespace. +func WithNamespace(namespace string) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.namespace = namespace + return factory + } +} + +// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. +func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync) +} + +// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory. +// Listers obtained via this SharedInformerFactory will be subject to the same filters +// as specified here. +// Deprecated: Please use NewSharedInformerFactoryWithOptions instead +func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions)) +} + +// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options. +func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory { + factory := &sharedInformerFactory{ + client: client, + namespace: v1.NamespaceAll, + defaultResync: defaultResync, + informers: make(map[reflect.Type]cache.SharedIndexInformer), + startedInformers: make(map[reflect.Type]bool), + customResync: make(map[reflect.Type]time.Duration), + } + + // Apply all options + for _, opt := range options { + factory = opt(factory) + } + + return factory +} + +// Start initializes all requested informers. +func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) { + f.lock.Lock() + defer f.lock.Unlock() + + for informerType, informer := range f.informers { + if !f.startedInformers[informerType] { + go informer.Run(stopCh) + f.startedInformers[informerType] = true + } + } +} + +// WaitForCacheSync waits for all started informers' cache were synced. +func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool { + informers := func() map[reflect.Type]cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informers := map[reflect.Type]cache.SharedIndexInformer{} + for informerType, informer := range f.informers { + if f.startedInformers[informerType] { + informers[informerType] = informer + } + } + return informers + }() + + res := map[reflect.Type]bool{} + for informType, informer := range informers { + res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced) + } + return res +} + +// InternalInformerFor returns the SharedIndexInformer for obj using an internal +// client. +func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(obj) + informer, exists := f.informers[informerType] + if exists { + return informer + } + + resyncPeriod, exists := f.customResync[informerType] + if !exists { + resyncPeriod = f.defaultResync + } + + informer = newFunc(f.client, resyncPeriod) + f.informers[informerType] = informer + + return informer +} + +// SharedInformerFactory provides shared informers for resources in all known +// API group versions. +type SharedInformerFactory interface { + internalinterfaces.SharedInformerFactory + ForResource(resource schema.GroupVersionResource) (GenericInformer, error) + WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool + + Authorization() authorization.Interface +} + +func (f *sharedInformerFactory) Authorization() authorization.Interface { + return authorization.New(f, f.namespace, f.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/authorization/informers/externalversions/generic.go b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/generic.go new file mode 100644 index 0000000000000..ed77429a852cb --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/generic.go @@ -0,0 +1,54 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + "fmt" + + v1 "github.com/openshift/api/authorization/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// GenericInformer is type of SharedIndexInformer which will locate and delegate to other +// sharedInformers based on type +type GenericInformer interface { + Informer() cache.SharedIndexInformer + Lister() cache.GenericLister +} + +type genericInformer struct { + informer cache.SharedIndexInformer + resource schema.GroupResource +} + +// Informer returns the SharedIndexInformer. +func (f *genericInformer) Informer() cache.SharedIndexInformer { + return f.informer +} + +// Lister returns the GenericLister. +func (f *genericInformer) Lister() cache.GenericLister { + return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource) +} + +// ForResource gives generic access to a shared informer of the matching type +// TODO extend this to unknown resources with a client pool +func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { + switch resource { + // Group=authorization.openshift.io, Version=v1 + case v1.SchemeGroupVersion.WithResource("clusterroles"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Authorization().V1().ClusterRoles().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("clusterrolebindings"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Authorization().V1().ClusterRoleBindings().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("roles"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Authorization().V1().Roles().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("rolebindings"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Authorization().V1().RoleBindings().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("rolebindingrestrictions"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Authorization().V1().RoleBindingRestrictions().Informer()}, nil + + } + + return nil, fmt.Errorf("no informer found for %v", resource) +} diff --git a/vendor/github.com/openshift/client-go/authorization/informers/externalversions/internalinterfaces/factory_interfaces.go b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/internalinterfaces/factory_interfaces.go new file mode 100644 index 0000000000000..d0a681edd2827 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -0,0 +1,24 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package internalinterfaces + +import ( + time "time" + + versioned "github.com/openshift/client-go/authorization/clientset/versioned" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + cache "k8s.io/client-go/tools/cache" +) + +// NewInformerFunc takes versioned.Interface and time.Duration to return a SharedIndexInformer. +type NewInformerFunc func(versioned.Interface, time.Duration) cache.SharedIndexInformer + +// SharedInformerFactory a small interface to allow for adding an informer without an import cycle +type SharedInformerFactory interface { + Start(stopCh <-chan struct{}) + InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer +} + +// TweakListOptionsFunc is a function that transforms a v1.ListOptions. +type TweakListOptionsFunc func(*v1.ListOptions) diff --git a/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/clusterrole.go b/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/clusterrole.go new file mode 100644 index 0000000000000..07e5f73f697e1 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/clusterrole.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/authorization/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// ClusterRoleLister helps list ClusterRoles. +// All objects returned here must be treated as read-only. +type ClusterRoleLister interface { + // List lists all ClusterRoles in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.ClusterRole, err error) + // Get retrieves the ClusterRole from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.ClusterRole, error) + ClusterRoleListerExpansion +} + +// clusterRoleLister implements the ClusterRoleLister interface. +type clusterRoleLister struct { + indexer cache.Indexer +} + +// NewClusterRoleLister returns a new ClusterRoleLister. +func NewClusterRoleLister(indexer cache.Indexer) ClusterRoleLister { + return &clusterRoleLister{indexer: indexer} +} + +// List lists all ClusterRoles in the indexer. +func (s *clusterRoleLister) List(selector labels.Selector) (ret []*v1.ClusterRole, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.ClusterRole)) + }) + return ret, err +} + +// Get retrieves the ClusterRole from the index for a given name. +func (s *clusterRoleLister) Get(name string) (*v1.ClusterRole, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("clusterrole"), name) + } + return obj.(*v1.ClusterRole), nil +} diff --git a/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/clusterrolebinding.go b/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/clusterrolebinding.go new file mode 100644 index 0000000000000..cf643af1e4ee3 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/clusterrolebinding.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/authorization/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// ClusterRoleBindingLister helps list ClusterRoleBindings. +// All objects returned here must be treated as read-only. +type ClusterRoleBindingLister interface { + // List lists all ClusterRoleBindings in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.ClusterRoleBinding, err error) + // Get retrieves the ClusterRoleBinding from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.ClusterRoleBinding, error) + ClusterRoleBindingListerExpansion +} + +// clusterRoleBindingLister implements the ClusterRoleBindingLister interface. +type clusterRoleBindingLister struct { + indexer cache.Indexer +} + +// NewClusterRoleBindingLister returns a new ClusterRoleBindingLister. +func NewClusterRoleBindingLister(indexer cache.Indexer) ClusterRoleBindingLister { + return &clusterRoleBindingLister{indexer: indexer} +} + +// List lists all ClusterRoleBindings in the indexer. +func (s *clusterRoleBindingLister) List(selector labels.Selector) (ret []*v1.ClusterRoleBinding, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.ClusterRoleBinding)) + }) + return ret, err +} + +// Get retrieves the ClusterRoleBinding from the index for a given name. +func (s *clusterRoleBindingLister) Get(name string) (*v1.ClusterRoleBinding, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("clusterrolebinding"), name) + } + return obj.(*v1.ClusterRoleBinding), nil +} diff --git a/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/expansion_generated.go b/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/expansion_generated.go new file mode 100644 index 0000000000000..0c01759a3d461 --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/expansion_generated.go @@ -0,0 +1,35 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +// ClusterRoleListerExpansion allows custom methods to be added to +// ClusterRoleLister. +type ClusterRoleListerExpansion interface{} + +// ClusterRoleBindingListerExpansion allows custom methods to be added to +// ClusterRoleBindingLister. +type ClusterRoleBindingListerExpansion interface{} + +// RoleListerExpansion allows custom methods to be added to +// RoleLister. +type RoleListerExpansion interface{} + +// RoleNamespaceListerExpansion allows custom methods to be added to +// RoleNamespaceLister. +type RoleNamespaceListerExpansion interface{} + +// RoleBindingListerExpansion allows custom methods to be added to +// RoleBindingLister. +type RoleBindingListerExpansion interface{} + +// RoleBindingNamespaceListerExpansion allows custom methods to be added to +// RoleBindingNamespaceLister. +type RoleBindingNamespaceListerExpansion interface{} + +// RoleBindingRestrictionListerExpansion allows custom methods to be added to +// RoleBindingRestrictionLister. +type RoleBindingRestrictionListerExpansion interface{} + +// RoleBindingRestrictionNamespaceListerExpansion allows custom methods to be added to +// RoleBindingRestrictionNamespaceLister. +type RoleBindingRestrictionNamespaceListerExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/role.go b/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/role.go new file mode 100644 index 0000000000000..0a898491a06ed --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/role.go @@ -0,0 +1,83 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/authorization/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// RoleLister helps list Roles. +// All objects returned here must be treated as read-only. +type RoleLister interface { + // List lists all Roles in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.Role, err error) + // Roles returns an object that can list and get Roles. + Roles(namespace string) RoleNamespaceLister + RoleListerExpansion +} + +// roleLister implements the RoleLister interface. +type roleLister struct { + indexer cache.Indexer +} + +// NewRoleLister returns a new RoleLister. +func NewRoleLister(indexer cache.Indexer) RoleLister { + return &roleLister{indexer: indexer} +} + +// List lists all Roles in the indexer. +func (s *roleLister) List(selector labels.Selector) (ret []*v1.Role, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.Role)) + }) + return ret, err +} + +// Roles returns an object that can list and get Roles. +func (s *roleLister) Roles(namespace string) RoleNamespaceLister { + return roleNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// RoleNamespaceLister helps list and get Roles. +// All objects returned here must be treated as read-only. +type RoleNamespaceLister interface { + // List lists all Roles in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.Role, err error) + // Get retrieves the Role from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.Role, error) + RoleNamespaceListerExpansion +} + +// roleNamespaceLister implements the RoleNamespaceLister +// interface. +type roleNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all Roles in the indexer for a given namespace. +func (s roleNamespaceLister) List(selector labels.Selector) (ret []*v1.Role, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.Role)) + }) + return ret, err +} + +// Get retrieves the Role from the indexer for a given namespace and name. +func (s roleNamespaceLister) Get(name string) (*v1.Role, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("role"), name) + } + return obj.(*v1.Role), nil +} diff --git a/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/rolebinding.go b/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/rolebinding.go new file mode 100644 index 0000000000000..8fb116acffb1f --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/rolebinding.go @@ -0,0 +1,83 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/authorization/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// RoleBindingLister helps list RoleBindings. +// All objects returned here must be treated as read-only. +type RoleBindingLister interface { + // List lists all RoleBindings in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.RoleBinding, err error) + // RoleBindings returns an object that can list and get RoleBindings. + RoleBindings(namespace string) RoleBindingNamespaceLister + RoleBindingListerExpansion +} + +// roleBindingLister implements the RoleBindingLister interface. +type roleBindingLister struct { + indexer cache.Indexer +} + +// NewRoleBindingLister returns a new RoleBindingLister. +func NewRoleBindingLister(indexer cache.Indexer) RoleBindingLister { + return &roleBindingLister{indexer: indexer} +} + +// List lists all RoleBindings in the indexer. +func (s *roleBindingLister) List(selector labels.Selector) (ret []*v1.RoleBinding, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.RoleBinding)) + }) + return ret, err +} + +// RoleBindings returns an object that can list and get RoleBindings. +func (s *roleBindingLister) RoleBindings(namespace string) RoleBindingNamespaceLister { + return roleBindingNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// RoleBindingNamespaceLister helps list and get RoleBindings. +// All objects returned here must be treated as read-only. +type RoleBindingNamespaceLister interface { + // List lists all RoleBindings in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.RoleBinding, err error) + // Get retrieves the RoleBinding from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.RoleBinding, error) + RoleBindingNamespaceListerExpansion +} + +// roleBindingNamespaceLister implements the RoleBindingNamespaceLister +// interface. +type roleBindingNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all RoleBindings in the indexer for a given namespace. +func (s roleBindingNamespaceLister) List(selector labels.Selector) (ret []*v1.RoleBinding, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.RoleBinding)) + }) + return ret, err +} + +// Get retrieves the RoleBinding from the indexer for a given namespace and name. +func (s roleBindingNamespaceLister) Get(name string) (*v1.RoleBinding, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("rolebinding"), name) + } + return obj.(*v1.RoleBinding), nil +} diff --git a/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/rolebindingrestriction.go b/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/rolebindingrestriction.go new file mode 100644 index 0000000000000..7c23a96e6c8ae --- /dev/null +++ b/vendor/github.com/openshift/client-go/authorization/listers/authorization/v1/rolebindingrestriction.go @@ -0,0 +1,83 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/authorization/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// RoleBindingRestrictionLister helps list RoleBindingRestrictions. +// All objects returned here must be treated as read-only. +type RoleBindingRestrictionLister interface { + // List lists all RoleBindingRestrictions in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.RoleBindingRestriction, err error) + // RoleBindingRestrictions returns an object that can list and get RoleBindingRestrictions. + RoleBindingRestrictions(namespace string) RoleBindingRestrictionNamespaceLister + RoleBindingRestrictionListerExpansion +} + +// roleBindingRestrictionLister implements the RoleBindingRestrictionLister interface. +type roleBindingRestrictionLister struct { + indexer cache.Indexer +} + +// NewRoleBindingRestrictionLister returns a new RoleBindingRestrictionLister. +func NewRoleBindingRestrictionLister(indexer cache.Indexer) RoleBindingRestrictionLister { + return &roleBindingRestrictionLister{indexer: indexer} +} + +// List lists all RoleBindingRestrictions in the indexer. +func (s *roleBindingRestrictionLister) List(selector labels.Selector) (ret []*v1.RoleBindingRestriction, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.RoleBindingRestriction)) + }) + return ret, err +} + +// RoleBindingRestrictions returns an object that can list and get RoleBindingRestrictions. +func (s *roleBindingRestrictionLister) RoleBindingRestrictions(namespace string) RoleBindingRestrictionNamespaceLister { + return roleBindingRestrictionNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// RoleBindingRestrictionNamespaceLister helps list and get RoleBindingRestrictions. +// All objects returned here must be treated as read-only. +type RoleBindingRestrictionNamespaceLister interface { + // List lists all RoleBindingRestrictions in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.RoleBindingRestriction, err error) + // Get retrieves the RoleBindingRestriction from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.RoleBindingRestriction, error) + RoleBindingRestrictionNamespaceListerExpansion +} + +// roleBindingRestrictionNamespaceLister implements the RoleBindingRestrictionNamespaceLister +// interface. +type roleBindingRestrictionNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all RoleBindingRestrictions in the indexer for a given namespace. +func (s roleBindingRestrictionNamespaceLister) List(selector labels.Selector) (ret []*v1.RoleBindingRestriction, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.RoleBindingRestriction)) + }) + return ret, err +} + +// Get retrieves the RoleBindingRestriction from the indexer for a given namespace and name. +func (s roleBindingRestrictionNamespaceLister) Get(name string) (*v1.RoleBindingRestriction, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("rolebindingrestriction"), name) + } + return obj.(*v1.RoleBindingRestriction), nil +} diff --git a/vendor/github.com/openshift/client-go/build/clientset/versioned/clientset.go b/vendor/github.com/openshift/client-go/build/clientset/versioned/clientset.go new file mode 100644 index 0000000000000..3b5bf5b349243 --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/clientset/versioned/clientset.go @@ -0,0 +1,81 @@ +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + + buildv1 "github.com/openshift/client-go/build/clientset/versioned/typed/build/v1" + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + BuildV1() buildv1.BuildV1Interface +} + +// Clientset contains the clients for groups. Each group has exactly one +// version included in a Clientset. +type Clientset struct { + *discovery.DiscoveryClient + buildV1 *buildv1.BuildV1Client +} + +// BuildV1 retrieves the BuildV1Client +func (c *Clientset) BuildV1() buildv1.BuildV1Interface { + return c.buildV1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + var cs Clientset + var err error + cs.buildV1, err = buildv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + var cs Clientset + cs.buildV1 = buildv1.NewForConfigOrDie(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) + return &cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.buildV1 = buildv1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/vendor/github.com/openshift/client-go/build/clientset/versioned/doc.go b/vendor/github.com/openshift/client-go/build/clientset/versioned/doc.go new file mode 100644 index 0000000000000..0e0c2a8900e2c --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/clientset/versioned/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated clientset. +package versioned diff --git a/vendor/github.com/openshift/client-go/build/clientset/versioned/scheme/doc.go b/vendor/github.com/openshift/client-go/build/clientset/versioned/scheme/doc.go new file mode 100644 index 0000000000000..14db57a58f8d2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/clientset/versioned/scheme/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package contains the scheme of the automatically generated clientset. +package scheme diff --git a/vendor/github.com/openshift/client-go/build/clientset/versioned/scheme/register.go b/vendor/github.com/openshift/client-go/build/clientset/versioned/scheme/register.go new file mode 100644 index 0000000000000..79dc180e4d2c1 --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/clientset/versioned/scheme/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package scheme + +import ( + buildv1 "github.com/openshift/api/build/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + buildv1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/build.go b/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/build.go new file mode 100644 index 0000000000000..5ae828789804a --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/build.go @@ -0,0 +1,212 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/build/v1" + scheme "github.com/openshift/client-go/build/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// BuildsGetter has a method to return a BuildInterface. +// A group's client should implement this interface. +type BuildsGetter interface { + Builds(namespace string) BuildInterface +} + +// BuildInterface has methods to work with Build resources. +type BuildInterface interface { + Create(ctx context.Context, build *v1.Build, opts metav1.CreateOptions) (*v1.Build, error) + Update(ctx context.Context, build *v1.Build, opts metav1.UpdateOptions) (*v1.Build, error) + UpdateStatus(ctx context.Context, build *v1.Build, opts metav1.UpdateOptions) (*v1.Build, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Build, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.BuildList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Build, err error) + UpdateDetails(ctx context.Context, buildName string, build *v1.Build, opts metav1.UpdateOptions) (*v1.Build, error) + Clone(ctx context.Context, buildName string, buildRequest *v1.BuildRequest, opts metav1.CreateOptions) (*v1.Build, error) + + BuildExpansion +} + +// builds implements BuildInterface +type builds struct { + client rest.Interface + ns string +} + +// newBuilds returns a Builds +func newBuilds(c *BuildV1Client, namespace string) *builds { + return &builds{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the build, and returns the corresponding build object, and an error if there is any. +func (c *builds) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Build, err error) { + result = &v1.Build{} + err = c.client.Get(). + Namespace(c.ns). + Resource("builds"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Builds that match those selectors. +func (c *builds) List(ctx context.Context, opts metav1.ListOptions) (result *v1.BuildList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.BuildList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("builds"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested builds. +func (c *builds) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("builds"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a build and creates it. Returns the server's representation of the build, and an error, if there is any. +func (c *builds) Create(ctx context.Context, build *v1.Build, opts metav1.CreateOptions) (result *v1.Build, err error) { + result = &v1.Build{} + err = c.client.Post(). + Namespace(c.ns). + Resource("builds"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(build). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a build and updates it. Returns the server's representation of the build, and an error, if there is any. +func (c *builds) Update(ctx context.Context, build *v1.Build, opts metav1.UpdateOptions) (result *v1.Build, err error) { + result = &v1.Build{} + err = c.client.Put(). + Namespace(c.ns). + Resource("builds"). + Name(build.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(build). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *builds) UpdateStatus(ctx context.Context, build *v1.Build, opts metav1.UpdateOptions) (result *v1.Build, err error) { + result = &v1.Build{} + err = c.client.Put(). + Namespace(c.ns). + Resource("builds"). + Name(build.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(build). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the build and deletes it. Returns an error if one occurs. +func (c *builds) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("builds"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *builds) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("builds"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched build. +func (c *builds) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Build, err error) { + result = &v1.Build{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("builds"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// UpdateDetails takes the top resource name and the representation of a build and updates it. Returns the server's representation of the build, and an error, if there is any. +func (c *builds) UpdateDetails(ctx context.Context, buildName string, build *v1.Build, opts metav1.UpdateOptions) (result *v1.Build, err error) { + result = &v1.Build{} + err = c.client.Put(). + Namespace(c.ns). + Resource("builds"). + Name(buildName). + SubResource("details"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(build). + Do(ctx). + Into(result) + return +} + +// Clone takes the representation of a buildRequest and creates it. Returns the server's representation of the build, and an error, if there is any. +func (c *builds) Clone(ctx context.Context, buildName string, buildRequest *v1.BuildRequest, opts metav1.CreateOptions) (result *v1.Build, err error) { + result = &v1.Build{} + err = c.client.Post(). + Namespace(c.ns). + Resource("builds"). + Name(buildName). + SubResource("clone"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(buildRequest). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/build_client.go b/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/build_client.go new file mode 100644 index 0000000000000..d16ddad404122 --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/build_client.go @@ -0,0 +1,78 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/build/v1" + "github.com/openshift/client-go/build/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type BuildV1Interface interface { + RESTClient() rest.Interface + BuildsGetter + BuildConfigsGetter +} + +// BuildV1Client is used to interact with features provided by the build.openshift.io group. +type BuildV1Client struct { + restClient rest.Interface +} + +func (c *BuildV1Client) Builds(namespace string) BuildInterface { + return newBuilds(c, namespace) +} + +func (c *BuildV1Client) BuildConfigs(namespace string) BuildConfigInterface { + return newBuildConfigs(c, namespace) +} + +// NewForConfig creates a new BuildV1Client for the given config. +func NewForConfig(c *rest.Config) (*BuildV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &BuildV1Client{client}, nil +} + +// NewForConfigOrDie creates a new BuildV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *BuildV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new BuildV1Client for the given RESTClient. +func New(c rest.Interface) *BuildV1Client { + return &BuildV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *BuildV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/buildconfig.go b/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/buildconfig.go new file mode 100644 index 0000000000000..7a8f70008838c --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/buildconfig.go @@ -0,0 +1,196 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/build/v1" + scheme "github.com/openshift/client-go/build/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// BuildConfigsGetter has a method to return a BuildConfigInterface. +// A group's client should implement this interface. +type BuildConfigsGetter interface { + BuildConfigs(namespace string) BuildConfigInterface +} + +// BuildConfigInterface has methods to work with BuildConfig resources. +type BuildConfigInterface interface { + Create(ctx context.Context, buildConfig *v1.BuildConfig, opts metav1.CreateOptions) (*v1.BuildConfig, error) + Update(ctx context.Context, buildConfig *v1.BuildConfig, opts metav1.UpdateOptions) (*v1.BuildConfig, error) + UpdateStatus(ctx context.Context, buildConfig *v1.BuildConfig, opts metav1.UpdateOptions) (*v1.BuildConfig, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.BuildConfig, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.BuildConfigList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.BuildConfig, err error) + Instantiate(ctx context.Context, buildConfigName string, buildRequest *v1.BuildRequest, opts metav1.CreateOptions) (*v1.Build, error) + + BuildConfigExpansion +} + +// buildConfigs implements BuildConfigInterface +type buildConfigs struct { + client rest.Interface + ns string +} + +// newBuildConfigs returns a BuildConfigs +func newBuildConfigs(c *BuildV1Client, namespace string) *buildConfigs { + return &buildConfigs{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the buildConfig, and returns the corresponding buildConfig object, and an error if there is any. +func (c *buildConfigs) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.BuildConfig, err error) { + result = &v1.BuildConfig{} + err = c.client.Get(). + Namespace(c.ns). + Resource("buildconfigs"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of BuildConfigs that match those selectors. +func (c *buildConfigs) List(ctx context.Context, opts metav1.ListOptions) (result *v1.BuildConfigList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.BuildConfigList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("buildconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested buildConfigs. +func (c *buildConfigs) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("buildconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a buildConfig and creates it. Returns the server's representation of the buildConfig, and an error, if there is any. +func (c *buildConfigs) Create(ctx context.Context, buildConfig *v1.BuildConfig, opts metav1.CreateOptions) (result *v1.BuildConfig, err error) { + result = &v1.BuildConfig{} + err = c.client.Post(). + Namespace(c.ns). + Resource("buildconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(buildConfig). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a buildConfig and updates it. Returns the server's representation of the buildConfig, and an error, if there is any. +func (c *buildConfigs) Update(ctx context.Context, buildConfig *v1.BuildConfig, opts metav1.UpdateOptions) (result *v1.BuildConfig, err error) { + result = &v1.BuildConfig{} + err = c.client.Put(). + Namespace(c.ns). + Resource("buildconfigs"). + Name(buildConfig.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(buildConfig). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *buildConfigs) UpdateStatus(ctx context.Context, buildConfig *v1.BuildConfig, opts metav1.UpdateOptions) (result *v1.BuildConfig, err error) { + result = &v1.BuildConfig{} + err = c.client.Put(). + Namespace(c.ns). + Resource("buildconfigs"). + Name(buildConfig.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(buildConfig). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the buildConfig and deletes it. Returns an error if one occurs. +func (c *buildConfigs) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("buildconfigs"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *buildConfigs) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("buildconfigs"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched buildConfig. +func (c *buildConfigs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.BuildConfig, err error) { + result = &v1.BuildConfig{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("buildconfigs"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// Instantiate takes the representation of a buildRequest and creates it. Returns the server's representation of the build, and an error, if there is any. +func (c *buildConfigs) Instantiate(ctx context.Context, buildConfigName string, buildRequest *v1.BuildRequest, opts metav1.CreateOptions) (result *v1.Build, err error) { + result = &v1.Build{} + err = c.client.Post(). + Namespace(c.ns). + Resource("buildconfigs"). + Name(buildConfigName). + SubResource("instantiate"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(buildRequest). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/doc.go b/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/doc.go new file mode 100644 index 0000000000000..225e6b2be34f2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/generated_expansion.go b/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/generated_expansion.go new file mode 100644 index 0000000000000..d2a1f885c056f --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/clientset/versioned/typed/build/v1/generated_expansion.go @@ -0,0 +1,7 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type BuildExpansion interface{} + +type BuildConfigExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/build/informers/externalversions/build/interface.go b/vendor/github.com/openshift/client-go/build/informers/externalversions/build/interface.go new file mode 100644 index 0000000000000..01a651928a8b1 --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/informers/externalversions/build/interface.go @@ -0,0 +1,30 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package build + +import ( + v1 "github.com/openshift/client-go/build/informers/externalversions/build/v1" + internalinterfaces "github.com/openshift/client-go/build/informers/externalversions/internalinterfaces" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1 provides access to shared informers for resources in V1. + V1() v1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1 returns a new v1.Interface. +func (g *group) V1() v1.Interface { + return v1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/build/informers/externalversions/build/v1/build.go b/vendor/github.com/openshift/client-go/build/informers/externalversions/build/v1/build.go new file mode 100644 index 0000000000000..2055ed96f5752 --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/informers/externalversions/build/v1/build.go @@ -0,0 +1,74 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + buildv1 "github.com/openshift/api/build/v1" + versioned "github.com/openshift/client-go/build/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/build/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/build/listers/build/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// BuildInformer provides access to a shared informer and lister for +// Builds. +type BuildInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.BuildLister +} + +type buildInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewBuildInformer constructs a new informer for Build type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewBuildInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredBuildInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredBuildInformer constructs a new informer for Build type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredBuildInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.BuildV1().Builds(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.BuildV1().Builds(namespace).Watch(context.TODO(), options) + }, + }, + &buildv1.Build{}, + resyncPeriod, + indexers, + ) +} + +func (f *buildInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredBuildInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *buildInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&buildv1.Build{}, f.defaultInformer) +} + +func (f *buildInformer) Lister() v1.BuildLister { + return v1.NewBuildLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/build/informers/externalversions/build/v1/buildconfig.go b/vendor/github.com/openshift/client-go/build/informers/externalversions/build/v1/buildconfig.go new file mode 100644 index 0000000000000..28012f8c6dcf5 --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/informers/externalversions/build/v1/buildconfig.go @@ -0,0 +1,74 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + buildv1 "github.com/openshift/api/build/v1" + versioned "github.com/openshift/client-go/build/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/build/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/build/listers/build/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// BuildConfigInformer provides access to a shared informer and lister for +// BuildConfigs. +type BuildConfigInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.BuildConfigLister +} + +type buildConfigInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewBuildConfigInformer constructs a new informer for BuildConfig type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewBuildConfigInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredBuildConfigInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredBuildConfigInformer constructs a new informer for BuildConfig type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredBuildConfigInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.BuildV1().BuildConfigs(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.BuildV1().BuildConfigs(namespace).Watch(context.TODO(), options) + }, + }, + &buildv1.BuildConfig{}, + resyncPeriod, + indexers, + ) +} + +func (f *buildConfigInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredBuildConfigInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *buildConfigInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&buildv1.BuildConfig{}, f.defaultInformer) +} + +func (f *buildConfigInformer) Lister() v1.BuildConfigLister { + return v1.NewBuildConfigLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/build/informers/externalversions/build/v1/interface.go b/vendor/github.com/openshift/client-go/build/informers/externalversions/build/v1/interface.go new file mode 100644 index 0000000000000..da69fc9bb6247 --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/informers/externalversions/build/v1/interface.go @@ -0,0 +1,36 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + internalinterfaces "github.com/openshift/client-go/build/informers/externalversions/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // Builds returns a BuildInformer. + Builds() BuildInformer + // BuildConfigs returns a BuildConfigInformer. + BuildConfigs() BuildConfigInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// Builds returns a BuildInformer. +func (v *version) Builds() BuildInformer { + return &buildInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} + +// BuildConfigs returns a BuildConfigInformer. +func (v *version) BuildConfigs() BuildConfigInformer { + return &buildConfigInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/github.com/openshift/client-go/build/informers/externalversions/factory.go b/vendor/github.com/openshift/client-go/build/informers/externalversions/factory.go new file mode 100644 index 0000000000000..fadac908e0479 --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/informers/externalversions/factory.go @@ -0,0 +1,164 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + reflect "reflect" + sync "sync" + time "time" + + versioned "github.com/openshift/client-go/build/clientset/versioned" + build "github.com/openshift/client-go/build/informers/externalversions/build" + internalinterfaces "github.com/openshift/client-go/build/informers/externalversions/internalinterfaces" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// SharedInformerOption defines the functional option type for SharedInformerFactory. +type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory + +type sharedInformerFactory struct { + client versioned.Interface + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc + lock sync.Mutex + defaultResync time.Duration + customResync map[reflect.Type]time.Duration + + informers map[reflect.Type]cache.SharedIndexInformer + // startedInformers is used for tracking which informers have been started. + // This allows Start() to be called multiple times safely. + startedInformers map[reflect.Type]bool +} + +// WithCustomResyncConfig sets a custom resync period for the specified informer types. +func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + for k, v := range resyncConfig { + factory.customResync[reflect.TypeOf(k)] = v + } + return factory + } +} + +// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory. +func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.tweakListOptions = tweakListOptions + return factory + } +} + +// WithNamespace limits the SharedInformerFactory to the specified namespace. +func WithNamespace(namespace string) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.namespace = namespace + return factory + } +} + +// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. +func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync) +} + +// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory. +// Listers obtained via this SharedInformerFactory will be subject to the same filters +// as specified here. +// Deprecated: Please use NewSharedInformerFactoryWithOptions instead +func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions)) +} + +// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options. +func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory { + factory := &sharedInformerFactory{ + client: client, + namespace: v1.NamespaceAll, + defaultResync: defaultResync, + informers: make(map[reflect.Type]cache.SharedIndexInformer), + startedInformers: make(map[reflect.Type]bool), + customResync: make(map[reflect.Type]time.Duration), + } + + // Apply all options + for _, opt := range options { + factory = opt(factory) + } + + return factory +} + +// Start initializes all requested informers. +func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) { + f.lock.Lock() + defer f.lock.Unlock() + + for informerType, informer := range f.informers { + if !f.startedInformers[informerType] { + go informer.Run(stopCh) + f.startedInformers[informerType] = true + } + } +} + +// WaitForCacheSync waits for all started informers' cache were synced. +func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool { + informers := func() map[reflect.Type]cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informers := map[reflect.Type]cache.SharedIndexInformer{} + for informerType, informer := range f.informers { + if f.startedInformers[informerType] { + informers[informerType] = informer + } + } + return informers + }() + + res := map[reflect.Type]bool{} + for informType, informer := range informers { + res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced) + } + return res +} + +// InternalInformerFor returns the SharedIndexInformer for obj using an internal +// client. +func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(obj) + informer, exists := f.informers[informerType] + if exists { + return informer + } + + resyncPeriod, exists := f.customResync[informerType] + if !exists { + resyncPeriod = f.defaultResync + } + + informer = newFunc(f.client, resyncPeriod) + f.informers[informerType] = informer + + return informer +} + +// SharedInformerFactory provides shared informers for resources in all known +// API group versions. +type SharedInformerFactory interface { + internalinterfaces.SharedInformerFactory + ForResource(resource schema.GroupVersionResource) (GenericInformer, error) + WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool + + Build() build.Interface +} + +func (f *sharedInformerFactory) Build() build.Interface { + return build.New(f, f.namespace, f.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/build/informers/externalversions/generic.go b/vendor/github.com/openshift/client-go/build/informers/externalversions/generic.go new file mode 100644 index 0000000000000..e8b2035b702c2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/informers/externalversions/generic.go @@ -0,0 +1,48 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + "fmt" + + v1 "github.com/openshift/api/build/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// GenericInformer is type of SharedIndexInformer which will locate and delegate to other +// sharedInformers based on type +type GenericInformer interface { + Informer() cache.SharedIndexInformer + Lister() cache.GenericLister +} + +type genericInformer struct { + informer cache.SharedIndexInformer + resource schema.GroupResource +} + +// Informer returns the SharedIndexInformer. +func (f *genericInformer) Informer() cache.SharedIndexInformer { + return f.informer +} + +// Lister returns the GenericLister. +func (f *genericInformer) Lister() cache.GenericLister { + return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource) +} + +// ForResource gives generic access to a shared informer of the matching type +// TODO extend this to unknown resources with a client pool +func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { + switch resource { + // Group=build.openshift.io, Version=v1 + case v1.SchemeGroupVersion.WithResource("builds"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Build().V1().Builds().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("buildconfigs"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Build().V1().BuildConfigs().Informer()}, nil + + } + + return nil, fmt.Errorf("no informer found for %v", resource) +} diff --git a/vendor/github.com/openshift/client-go/build/informers/externalversions/internalinterfaces/factory_interfaces.go b/vendor/github.com/openshift/client-go/build/informers/externalversions/internalinterfaces/factory_interfaces.go new file mode 100644 index 0000000000000..1bcbd5975acf7 --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -0,0 +1,24 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package internalinterfaces + +import ( + time "time" + + versioned "github.com/openshift/client-go/build/clientset/versioned" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + cache "k8s.io/client-go/tools/cache" +) + +// NewInformerFunc takes versioned.Interface and time.Duration to return a SharedIndexInformer. +type NewInformerFunc func(versioned.Interface, time.Duration) cache.SharedIndexInformer + +// SharedInformerFactory a small interface to allow for adding an informer without an import cycle +type SharedInformerFactory interface { + Start(stopCh <-chan struct{}) + InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer +} + +// TweakListOptionsFunc is a function that transforms a v1.ListOptions. +type TweakListOptionsFunc func(*v1.ListOptions) diff --git a/vendor/github.com/openshift/client-go/build/listers/build/v1/build.go b/vendor/github.com/openshift/client-go/build/listers/build/v1/build.go new file mode 100644 index 0000000000000..e072f9bac85e7 --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/listers/build/v1/build.go @@ -0,0 +1,83 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/build/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// BuildLister helps list Builds. +// All objects returned here must be treated as read-only. +type BuildLister interface { + // List lists all Builds in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.Build, err error) + // Builds returns an object that can list and get Builds. + Builds(namespace string) BuildNamespaceLister + BuildListerExpansion +} + +// buildLister implements the BuildLister interface. +type buildLister struct { + indexer cache.Indexer +} + +// NewBuildLister returns a new BuildLister. +func NewBuildLister(indexer cache.Indexer) BuildLister { + return &buildLister{indexer: indexer} +} + +// List lists all Builds in the indexer. +func (s *buildLister) List(selector labels.Selector) (ret []*v1.Build, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.Build)) + }) + return ret, err +} + +// Builds returns an object that can list and get Builds. +func (s *buildLister) Builds(namespace string) BuildNamespaceLister { + return buildNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// BuildNamespaceLister helps list and get Builds. +// All objects returned here must be treated as read-only. +type BuildNamespaceLister interface { + // List lists all Builds in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.Build, err error) + // Get retrieves the Build from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.Build, error) + BuildNamespaceListerExpansion +} + +// buildNamespaceLister implements the BuildNamespaceLister +// interface. +type buildNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all Builds in the indexer for a given namespace. +func (s buildNamespaceLister) List(selector labels.Selector) (ret []*v1.Build, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.Build)) + }) + return ret, err +} + +// Get retrieves the Build from the indexer for a given namespace and name. +func (s buildNamespaceLister) Get(name string) (*v1.Build, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("build"), name) + } + return obj.(*v1.Build), nil +} diff --git a/vendor/github.com/openshift/client-go/build/listers/build/v1/buildconfig.go b/vendor/github.com/openshift/client-go/build/listers/build/v1/buildconfig.go new file mode 100644 index 0000000000000..d2bbdb4ec6a55 --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/listers/build/v1/buildconfig.go @@ -0,0 +1,83 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/build/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// BuildConfigLister helps list BuildConfigs. +// All objects returned here must be treated as read-only. +type BuildConfigLister interface { + // List lists all BuildConfigs in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.BuildConfig, err error) + // BuildConfigs returns an object that can list and get BuildConfigs. + BuildConfigs(namespace string) BuildConfigNamespaceLister + BuildConfigListerExpansion +} + +// buildConfigLister implements the BuildConfigLister interface. +type buildConfigLister struct { + indexer cache.Indexer +} + +// NewBuildConfigLister returns a new BuildConfigLister. +func NewBuildConfigLister(indexer cache.Indexer) BuildConfigLister { + return &buildConfigLister{indexer: indexer} +} + +// List lists all BuildConfigs in the indexer. +func (s *buildConfigLister) List(selector labels.Selector) (ret []*v1.BuildConfig, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.BuildConfig)) + }) + return ret, err +} + +// BuildConfigs returns an object that can list and get BuildConfigs. +func (s *buildConfigLister) BuildConfigs(namespace string) BuildConfigNamespaceLister { + return buildConfigNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// BuildConfigNamespaceLister helps list and get BuildConfigs. +// All objects returned here must be treated as read-only. +type BuildConfigNamespaceLister interface { + // List lists all BuildConfigs in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.BuildConfig, err error) + // Get retrieves the BuildConfig from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.BuildConfig, error) + BuildConfigNamespaceListerExpansion +} + +// buildConfigNamespaceLister implements the BuildConfigNamespaceLister +// interface. +type buildConfigNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all BuildConfigs in the indexer for a given namespace. +func (s buildConfigNamespaceLister) List(selector labels.Selector) (ret []*v1.BuildConfig, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.BuildConfig)) + }) + return ret, err +} + +// Get retrieves the BuildConfig from the indexer for a given namespace and name. +func (s buildConfigNamespaceLister) Get(name string) (*v1.BuildConfig, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("buildconfig"), name) + } + return obj.(*v1.BuildConfig), nil +} diff --git a/vendor/github.com/openshift/client-go/build/listers/build/v1/expansion_generated.go b/vendor/github.com/openshift/client-go/build/listers/build/v1/expansion_generated.go new file mode 100644 index 0000000000000..1fc9faecdd2df --- /dev/null +++ b/vendor/github.com/openshift/client-go/build/listers/build/v1/expansion_generated.go @@ -0,0 +1,19 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +// BuildListerExpansion allows custom methods to be added to +// BuildLister. +type BuildListerExpansion interface{} + +// BuildNamespaceListerExpansion allows custom methods to be added to +// BuildNamespaceLister. +type BuildNamespaceListerExpansion interface{} + +// BuildConfigListerExpansion allows custom methods to be added to +// BuildConfigLister. +type BuildConfigListerExpansion interface{} + +// BuildConfigNamespaceListerExpansion allows custom methods to be added to +// BuildConfigNamespaceLister. +type BuildConfigNamespaceListerExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/clientset.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/clientset.go new file mode 100644 index 0000000000000..70cd52cc07376 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/clientset.go @@ -0,0 +1,81 @@ +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + + configv1 "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1" + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + ConfigV1() configv1.ConfigV1Interface +} + +// Clientset contains the clients for groups. Each group has exactly one +// version included in a Clientset. +type Clientset struct { + *discovery.DiscoveryClient + configV1 *configv1.ConfigV1Client +} + +// ConfigV1 retrieves the ConfigV1Client +func (c *Clientset) ConfigV1() configv1.ConfigV1Interface { + return c.configV1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + var cs Clientset + var err error + cs.configV1, err = configv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + var cs Clientset + cs.configV1 = configv1.NewForConfigOrDie(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) + return &cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.configV1 = configv1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/doc.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/doc.go new file mode 100644 index 0000000000000..0e0c2a8900e2c --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated clientset. +package versioned diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/fake/clientset_generated.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/fake/clientset_generated.go new file mode 100644 index 0000000000000..08c7c431c4ffe --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/fake/clientset_generated.go @@ -0,0 +1,66 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + clientset "github.com/openshift/client-go/config/clientset/versioned" + configv1 "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1" + fakeconfigv1 "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/discovery" + fakediscovery "k8s.io/client-go/discovery/fake" + "k8s.io/client-go/testing" +) + +// NewSimpleClientset returns a clientset that will respond with the provided objects. +// It's backed by a very simple object tracker that processes creates, updates and deletions as-is, +// without applying any validations and/or defaults. It shouldn't be considered a replacement +// for a real clientset and is mostly useful in simple unit tests. +func NewSimpleClientset(objects ...runtime.Object) *Clientset { + o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder()) + for _, obj := range objects { + if err := o.Add(obj); err != nil { + panic(err) + } + } + + cs := &Clientset{tracker: o} + cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake} + cs.AddReactor("*", "*", testing.ObjectReaction(o)) + cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) { + gvr := action.GetResource() + ns := action.GetNamespace() + watch, err := o.Watch(gvr, ns) + if err != nil { + return false, nil, err + } + return true, watch, nil + }) + + return cs +} + +// Clientset implements clientset.Interface. Meant to be embedded into a +// struct to get a default implementation. This makes faking out just the method +// you want to test easier. +type Clientset struct { + testing.Fake + discovery *fakediscovery.FakeDiscovery + tracker testing.ObjectTracker +} + +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + return c.discovery +} + +func (c *Clientset) Tracker() testing.ObjectTracker { + return c.tracker +} + +var _ clientset.Interface = &Clientset{} + +// ConfigV1 retrieves the ConfigV1Client +func (c *Clientset) ConfigV1() configv1.ConfigV1Interface { + return &fakeconfigv1.FakeConfigV1{Fake: &c.Fake} +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/fake/doc.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/fake/doc.go new file mode 100644 index 0000000000000..3630ed1cd17db --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/fake/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated fake clientset. +package fake diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/fake/register.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/fake/register.go new file mode 100644 index 0000000000000..94a788d5fbf67 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/fake/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var scheme = runtime.NewScheme() +var codecs = serializer.NewCodecFactory(scheme) + +var localSchemeBuilder = runtime.SchemeBuilder{ + configv1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(scheme)) +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/scheme/doc.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/scheme/doc.go new file mode 100644 index 0000000000000..14db57a58f8d2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/scheme/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package contains the scheme of the automatically generated clientset. +package scheme diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/scheme/register.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/scheme/register.go new file mode 100644 index 0000000000000..00d32306d7325 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/scheme/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package scheme + +import ( + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + configv1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/apiserver.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/apiserver.go new file mode 100644 index 0000000000000..f9b22b322df5d --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/apiserver.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// APIServersGetter has a method to return a APIServerInterface. +// A group's client should implement this interface. +type APIServersGetter interface { + APIServers() APIServerInterface +} + +// APIServerInterface has methods to work with APIServer resources. +type APIServerInterface interface { + Create(ctx context.Context, aPIServer *v1.APIServer, opts metav1.CreateOptions) (*v1.APIServer, error) + Update(ctx context.Context, aPIServer *v1.APIServer, opts metav1.UpdateOptions) (*v1.APIServer, error) + UpdateStatus(ctx context.Context, aPIServer *v1.APIServer, opts metav1.UpdateOptions) (*v1.APIServer, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.APIServer, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.APIServerList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.APIServer, err error) + APIServerExpansion +} + +// aPIServers implements APIServerInterface +type aPIServers struct { + client rest.Interface +} + +// newAPIServers returns a APIServers +func newAPIServers(c *ConfigV1Client) *aPIServers { + return &aPIServers{ + client: c.RESTClient(), + } +} + +// Get takes name of the aPIServer, and returns the corresponding aPIServer object, and an error if there is any. +func (c *aPIServers) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.APIServer, err error) { + result = &v1.APIServer{} + err = c.client.Get(). + Resource("apiservers"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of APIServers that match those selectors. +func (c *aPIServers) List(ctx context.Context, opts metav1.ListOptions) (result *v1.APIServerList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.APIServerList{} + err = c.client.Get(). + Resource("apiservers"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested aPIServers. +func (c *aPIServers) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("apiservers"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a aPIServer and creates it. Returns the server's representation of the aPIServer, and an error, if there is any. +func (c *aPIServers) Create(ctx context.Context, aPIServer *v1.APIServer, opts metav1.CreateOptions) (result *v1.APIServer, err error) { + result = &v1.APIServer{} + err = c.client.Post(). + Resource("apiservers"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(aPIServer). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a aPIServer and updates it. Returns the server's representation of the aPIServer, and an error, if there is any. +func (c *aPIServers) Update(ctx context.Context, aPIServer *v1.APIServer, opts metav1.UpdateOptions) (result *v1.APIServer, err error) { + result = &v1.APIServer{} + err = c.client.Put(). + Resource("apiservers"). + Name(aPIServer.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(aPIServer). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *aPIServers) UpdateStatus(ctx context.Context, aPIServer *v1.APIServer, opts metav1.UpdateOptions) (result *v1.APIServer, err error) { + result = &v1.APIServer{} + err = c.client.Put(). + Resource("apiservers"). + Name(aPIServer.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(aPIServer). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the aPIServer and deletes it. Returns an error if one occurs. +func (c *aPIServers) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("apiservers"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *aPIServers) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("apiservers"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched aPIServer. +func (c *aPIServers) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.APIServer, err error) { + result = &v1.APIServer{} + err = c.client.Patch(pt). + Resource("apiservers"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/authentication.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/authentication.go new file mode 100644 index 0000000000000..7c6c81d576b5d --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/authentication.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// AuthenticationsGetter has a method to return a AuthenticationInterface. +// A group's client should implement this interface. +type AuthenticationsGetter interface { + Authentications() AuthenticationInterface +} + +// AuthenticationInterface has methods to work with Authentication resources. +type AuthenticationInterface interface { + Create(ctx context.Context, authentication *v1.Authentication, opts metav1.CreateOptions) (*v1.Authentication, error) + Update(ctx context.Context, authentication *v1.Authentication, opts metav1.UpdateOptions) (*v1.Authentication, error) + UpdateStatus(ctx context.Context, authentication *v1.Authentication, opts metav1.UpdateOptions) (*v1.Authentication, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Authentication, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.AuthenticationList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Authentication, err error) + AuthenticationExpansion +} + +// authentications implements AuthenticationInterface +type authentications struct { + client rest.Interface +} + +// newAuthentications returns a Authentications +func newAuthentications(c *ConfigV1Client) *authentications { + return &authentications{ + client: c.RESTClient(), + } +} + +// Get takes name of the authentication, and returns the corresponding authentication object, and an error if there is any. +func (c *authentications) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Authentication, err error) { + result = &v1.Authentication{} + err = c.client.Get(). + Resource("authentications"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Authentications that match those selectors. +func (c *authentications) List(ctx context.Context, opts metav1.ListOptions) (result *v1.AuthenticationList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.AuthenticationList{} + err = c.client.Get(). + Resource("authentications"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested authentications. +func (c *authentications) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("authentications"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a authentication and creates it. Returns the server's representation of the authentication, and an error, if there is any. +func (c *authentications) Create(ctx context.Context, authentication *v1.Authentication, opts metav1.CreateOptions) (result *v1.Authentication, err error) { + result = &v1.Authentication{} + err = c.client.Post(). + Resource("authentications"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(authentication). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a authentication and updates it. Returns the server's representation of the authentication, and an error, if there is any. +func (c *authentications) Update(ctx context.Context, authentication *v1.Authentication, opts metav1.UpdateOptions) (result *v1.Authentication, err error) { + result = &v1.Authentication{} + err = c.client.Put(). + Resource("authentications"). + Name(authentication.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(authentication). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *authentications) UpdateStatus(ctx context.Context, authentication *v1.Authentication, opts metav1.UpdateOptions) (result *v1.Authentication, err error) { + result = &v1.Authentication{} + err = c.client.Put(). + Resource("authentications"). + Name(authentication.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(authentication). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the authentication and deletes it. Returns an error if one occurs. +func (c *authentications) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("authentications"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *authentications) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("authentications"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched authentication. +func (c *authentications) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Authentication, err error) { + result = &v1.Authentication{} + err = c.client.Patch(pt). + Resource("authentications"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/build.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/build.go new file mode 100644 index 0000000000000..10c7a4901abd2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/build.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// BuildsGetter has a method to return a BuildInterface. +// A group's client should implement this interface. +type BuildsGetter interface { + Builds() BuildInterface +} + +// BuildInterface has methods to work with Build resources. +type BuildInterface interface { + Create(ctx context.Context, build *v1.Build, opts metav1.CreateOptions) (*v1.Build, error) + Update(ctx context.Context, build *v1.Build, opts metav1.UpdateOptions) (*v1.Build, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Build, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.BuildList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Build, err error) + BuildExpansion +} + +// builds implements BuildInterface +type builds struct { + client rest.Interface +} + +// newBuilds returns a Builds +func newBuilds(c *ConfigV1Client) *builds { + return &builds{ + client: c.RESTClient(), + } +} + +// Get takes name of the build, and returns the corresponding build object, and an error if there is any. +func (c *builds) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Build, err error) { + result = &v1.Build{} + err = c.client.Get(). + Resource("builds"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Builds that match those selectors. +func (c *builds) List(ctx context.Context, opts metav1.ListOptions) (result *v1.BuildList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.BuildList{} + err = c.client.Get(). + Resource("builds"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested builds. +func (c *builds) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("builds"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a build and creates it. Returns the server's representation of the build, and an error, if there is any. +func (c *builds) Create(ctx context.Context, build *v1.Build, opts metav1.CreateOptions) (result *v1.Build, err error) { + result = &v1.Build{} + err = c.client.Post(). + Resource("builds"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(build). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a build and updates it. Returns the server's representation of the build, and an error, if there is any. +func (c *builds) Update(ctx context.Context, build *v1.Build, opts metav1.UpdateOptions) (result *v1.Build, err error) { + result = &v1.Build{} + err = c.client.Put(). + Resource("builds"). + Name(build.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(build). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the build and deletes it. Returns an error if one occurs. +func (c *builds) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("builds"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *builds) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("builds"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched build. +func (c *builds) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Build, err error) { + result = &v1.Build{} + err = c.client.Patch(pt). + Resource("builds"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/clusteroperator.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/clusteroperator.go new file mode 100644 index 0000000000000..8802d34fbd60a --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/clusteroperator.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// ClusterOperatorsGetter has a method to return a ClusterOperatorInterface. +// A group's client should implement this interface. +type ClusterOperatorsGetter interface { + ClusterOperators() ClusterOperatorInterface +} + +// ClusterOperatorInterface has methods to work with ClusterOperator resources. +type ClusterOperatorInterface interface { + Create(ctx context.Context, clusterOperator *v1.ClusterOperator, opts metav1.CreateOptions) (*v1.ClusterOperator, error) + Update(ctx context.Context, clusterOperator *v1.ClusterOperator, opts metav1.UpdateOptions) (*v1.ClusterOperator, error) + UpdateStatus(ctx context.Context, clusterOperator *v1.ClusterOperator, opts metav1.UpdateOptions) (*v1.ClusterOperator, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ClusterOperator, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ClusterOperatorList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterOperator, err error) + ClusterOperatorExpansion +} + +// clusterOperators implements ClusterOperatorInterface +type clusterOperators struct { + client rest.Interface +} + +// newClusterOperators returns a ClusterOperators +func newClusterOperators(c *ConfigV1Client) *clusterOperators { + return &clusterOperators{ + client: c.RESTClient(), + } +} + +// Get takes name of the clusterOperator, and returns the corresponding clusterOperator object, and an error if there is any. +func (c *clusterOperators) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ClusterOperator, err error) { + result = &v1.ClusterOperator{} + err = c.client.Get(). + Resource("clusteroperators"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ClusterOperators that match those selectors. +func (c *clusterOperators) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ClusterOperatorList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ClusterOperatorList{} + err = c.client.Get(). + Resource("clusteroperators"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested clusterOperators. +func (c *clusterOperators) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("clusteroperators"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a clusterOperator and creates it. Returns the server's representation of the clusterOperator, and an error, if there is any. +func (c *clusterOperators) Create(ctx context.Context, clusterOperator *v1.ClusterOperator, opts metav1.CreateOptions) (result *v1.ClusterOperator, err error) { + result = &v1.ClusterOperator{} + err = c.client.Post(). + Resource("clusteroperators"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterOperator). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a clusterOperator and updates it. Returns the server's representation of the clusterOperator, and an error, if there is any. +func (c *clusterOperators) Update(ctx context.Context, clusterOperator *v1.ClusterOperator, opts metav1.UpdateOptions) (result *v1.ClusterOperator, err error) { + result = &v1.ClusterOperator{} + err = c.client.Put(). + Resource("clusteroperators"). + Name(clusterOperator.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterOperator). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *clusterOperators) UpdateStatus(ctx context.Context, clusterOperator *v1.ClusterOperator, opts metav1.UpdateOptions) (result *v1.ClusterOperator, err error) { + result = &v1.ClusterOperator{} + err = c.client.Put(). + Resource("clusteroperators"). + Name(clusterOperator.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterOperator). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the clusterOperator and deletes it. Returns an error if one occurs. +func (c *clusterOperators) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("clusteroperators"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *clusterOperators) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("clusteroperators"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched clusterOperator. +func (c *clusterOperators) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterOperator, err error) { + result = &v1.ClusterOperator{} + err = c.client.Patch(pt). + Resource("clusteroperators"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/clusterversion.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/clusterversion.go new file mode 100644 index 0000000000000..1f60d59d91a9f --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/clusterversion.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// ClusterVersionsGetter has a method to return a ClusterVersionInterface. +// A group's client should implement this interface. +type ClusterVersionsGetter interface { + ClusterVersions() ClusterVersionInterface +} + +// ClusterVersionInterface has methods to work with ClusterVersion resources. +type ClusterVersionInterface interface { + Create(ctx context.Context, clusterVersion *v1.ClusterVersion, opts metav1.CreateOptions) (*v1.ClusterVersion, error) + Update(ctx context.Context, clusterVersion *v1.ClusterVersion, opts metav1.UpdateOptions) (*v1.ClusterVersion, error) + UpdateStatus(ctx context.Context, clusterVersion *v1.ClusterVersion, opts metav1.UpdateOptions) (*v1.ClusterVersion, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ClusterVersion, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ClusterVersionList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterVersion, err error) + ClusterVersionExpansion +} + +// clusterVersions implements ClusterVersionInterface +type clusterVersions struct { + client rest.Interface +} + +// newClusterVersions returns a ClusterVersions +func newClusterVersions(c *ConfigV1Client) *clusterVersions { + return &clusterVersions{ + client: c.RESTClient(), + } +} + +// Get takes name of the clusterVersion, and returns the corresponding clusterVersion object, and an error if there is any. +func (c *clusterVersions) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ClusterVersion, err error) { + result = &v1.ClusterVersion{} + err = c.client.Get(). + Resource("clusterversions"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ClusterVersions that match those selectors. +func (c *clusterVersions) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ClusterVersionList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ClusterVersionList{} + err = c.client.Get(). + Resource("clusterversions"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested clusterVersions. +func (c *clusterVersions) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("clusterversions"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a clusterVersion and creates it. Returns the server's representation of the clusterVersion, and an error, if there is any. +func (c *clusterVersions) Create(ctx context.Context, clusterVersion *v1.ClusterVersion, opts metav1.CreateOptions) (result *v1.ClusterVersion, err error) { + result = &v1.ClusterVersion{} + err = c.client.Post(). + Resource("clusterversions"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterVersion). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a clusterVersion and updates it. Returns the server's representation of the clusterVersion, and an error, if there is any. +func (c *clusterVersions) Update(ctx context.Context, clusterVersion *v1.ClusterVersion, opts metav1.UpdateOptions) (result *v1.ClusterVersion, err error) { + result = &v1.ClusterVersion{} + err = c.client.Put(). + Resource("clusterversions"). + Name(clusterVersion.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterVersion). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *clusterVersions) UpdateStatus(ctx context.Context, clusterVersion *v1.ClusterVersion, opts metav1.UpdateOptions) (result *v1.ClusterVersion, err error) { + result = &v1.ClusterVersion{} + err = c.client.Put(). + Resource("clusterversions"). + Name(clusterVersion.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterVersion). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the clusterVersion and deletes it. Returns an error if one occurs. +func (c *clusterVersions) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("clusterversions"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *clusterVersions) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("clusterversions"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched clusterVersion. +func (c *clusterVersions) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterVersion, err error) { + result = &v1.ClusterVersion{} + err = c.client.Patch(pt). + Resource("clusterversions"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/config_client.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/config_client.go new file mode 100644 index 0000000000000..0f2182d2f5d65 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/config_client.go @@ -0,0 +1,153 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/config/v1" + "github.com/openshift/client-go/config/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type ConfigV1Interface interface { + RESTClient() rest.Interface + APIServersGetter + AuthenticationsGetter + BuildsGetter + ClusterOperatorsGetter + ClusterVersionsGetter + ConsolesGetter + DNSesGetter + FeatureGatesGetter + ImagesGetter + InfrastructuresGetter + IngressesGetter + NetworksGetter + OAuthsGetter + OperatorHubsGetter + ProjectsGetter + ProxiesGetter + SchedulersGetter +} + +// ConfigV1Client is used to interact with features provided by the config.openshift.io group. +type ConfigV1Client struct { + restClient rest.Interface +} + +func (c *ConfigV1Client) APIServers() APIServerInterface { + return newAPIServers(c) +} + +func (c *ConfigV1Client) Authentications() AuthenticationInterface { + return newAuthentications(c) +} + +func (c *ConfigV1Client) Builds() BuildInterface { + return newBuilds(c) +} + +func (c *ConfigV1Client) ClusterOperators() ClusterOperatorInterface { + return newClusterOperators(c) +} + +func (c *ConfigV1Client) ClusterVersions() ClusterVersionInterface { + return newClusterVersions(c) +} + +func (c *ConfigV1Client) Consoles() ConsoleInterface { + return newConsoles(c) +} + +func (c *ConfigV1Client) DNSes() DNSInterface { + return newDNSes(c) +} + +func (c *ConfigV1Client) FeatureGates() FeatureGateInterface { + return newFeatureGates(c) +} + +func (c *ConfigV1Client) Images() ImageInterface { + return newImages(c) +} + +func (c *ConfigV1Client) Infrastructures() InfrastructureInterface { + return newInfrastructures(c) +} + +func (c *ConfigV1Client) Ingresses() IngressInterface { + return newIngresses(c) +} + +func (c *ConfigV1Client) Networks() NetworkInterface { + return newNetworks(c) +} + +func (c *ConfigV1Client) OAuths() OAuthInterface { + return newOAuths(c) +} + +func (c *ConfigV1Client) OperatorHubs() OperatorHubInterface { + return newOperatorHubs(c) +} + +func (c *ConfigV1Client) Projects() ProjectInterface { + return newProjects(c) +} + +func (c *ConfigV1Client) Proxies() ProxyInterface { + return newProxies(c) +} + +func (c *ConfigV1Client) Schedulers() SchedulerInterface { + return newSchedulers(c) +} + +// NewForConfig creates a new ConfigV1Client for the given config. +func NewForConfig(c *rest.Config) (*ConfigV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &ConfigV1Client{client}, nil +} + +// NewForConfigOrDie creates a new ConfigV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *ConfigV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new ConfigV1Client for the given RESTClient. +func New(c rest.Interface) *ConfigV1Client { + return &ConfigV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *ConfigV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/console.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/console.go new file mode 100644 index 0000000000000..eeef3d8bdce72 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/console.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// ConsolesGetter has a method to return a ConsoleInterface. +// A group's client should implement this interface. +type ConsolesGetter interface { + Consoles() ConsoleInterface +} + +// ConsoleInterface has methods to work with Console resources. +type ConsoleInterface interface { + Create(ctx context.Context, console *v1.Console, opts metav1.CreateOptions) (*v1.Console, error) + Update(ctx context.Context, console *v1.Console, opts metav1.UpdateOptions) (*v1.Console, error) + UpdateStatus(ctx context.Context, console *v1.Console, opts metav1.UpdateOptions) (*v1.Console, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Console, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ConsoleList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Console, err error) + ConsoleExpansion +} + +// consoles implements ConsoleInterface +type consoles struct { + client rest.Interface +} + +// newConsoles returns a Consoles +func newConsoles(c *ConfigV1Client) *consoles { + return &consoles{ + client: c.RESTClient(), + } +} + +// Get takes name of the console, and returns the corresponding console object, and an error if there is any. +func (c *consoles) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Console, err error) { + result = &v1.Console{} + err = c.client.Get(). + Resource("consoles"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Consoles that match those selectors. +func (c *consoles) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ConsoleList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ConsoleList{} + err = c.client.Get(). + Resource("consoles"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested consoles. +func (c *consoles) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("consoles"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a console and creates it. Returns the server's representation of the console, and an error, if there is any. +func (c *consoles) Create(ctx context.Context, console *v1.Console, opts metav1.CreateOptions) (result *v1.Console, err error) { + result = &v1.Console{} + err = c.client.Post(). + Resource("consoles"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(console). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a console and updates it. Returns the server's representation of the console, and an error, if there is any. +func (c *consoles) Update(ctx context.Context, console *v1.Console, opts metav1.UpdateOptions) (result *v1.Console, err error) { + result = &v1.Console{} + err = c.client.Put(). + Resource("consoles"). + Name(console.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(console). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *consoles) UpdateStatus(ctx context.Context, console *v1.Console, opts metav1.UpdateOptions) (result *v1.Console, err error) { + result = &v1.Console{} + err = c.client.Put(). + Resource("consoles"). + Name(console.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(console). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the console and deletes it. Returns an error if one occurs. +func (c *consoles) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("consoles"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *consoles) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("consoles"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched console. +func (c *consoles) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Console, err error) { + result = &v1.Console{} + err = c.client.Patch(pt). + Resource("consoles"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/dns.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/dns.go new file mode 100644 index 0000000000000..574eda990278b --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/dns.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// DNSesGetter has a method to return a DNSInterface. +// A group's client should implement this interface. +type DNSesGetter interface { + DNSes() DNSInterface +} + +// DNSInterface has methods to work with DNS resources. +type DNSInterface interface { + Create(ctx context.Context, dNS *v1.DNS, opts metav1.CreateOptions) (*v1.DNS, error) + Update(ctx context.Context, dNS *v1.DNS, opts metav1.UpdateOptions) (*v1.DNS, error) + UpdateStatus(ctx context.Context, dNS *v1.DNS, opts metav1.UpdateOptions) (*v1.DNS, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.DNS, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.DNSList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.DNS, err error) + DNSExpansion +} + +// dNSes implements DNSInterface +type dNSes struct { + client rest.Interface +} + +// newDNSes returns a DNSes +func newDNSes(c *ConfigV1Client) *dNSes { + return &dNSes{ + client: c.RESTClient(), + } +} + +// Get takes name of the dNS, and returns the corresponding dNS object, and an error if there is any. +func (c *dNSes) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.DNS, err error) { + result = &v1.DNS{} + err = c.client.Get(). + Resource("dnses"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of DNSes that match those selectors. +func (c *dNSes) List(ctx context.Context, opts metav1.ListOptions) (result *v1.DNSList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.DNSList{} + err = c.client.Get(). + Resource("dnses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested dNSes. +func (c *dNSes) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("dnses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a dNS and creates it. Returns the server's representation of the dNS, and an error, if there is any. +func (c *dNSes) Create(ctx context.Context, dNS *v1.DNS, opts metav1.CreateOptions) (result *v1.DNS, err error) { + result = &v1.DNS{} + err = c.client.Post(). + Resource("dnses"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(dNS). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a dNS and updates it. Returns the server's representation of the dNS, and an error, if there is any. +func (c *dNSes) Update(ctx context.Context, dNS *v1.DNS, opts metav1.UpdateOptions) (result *v1.DNS, err error) { + result = &v1.DNS{} + err = c.client.Put(). + Resource("dnses"). + Name(dNS.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(dNS). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *dNSes) UpdateStatus(ctx context.Context, dNS *v1.DNS, opts metav1.UpdateOptions) (result *v1.DNS, err error) { + result = &v1.DNS{} + err = c.client.Put(). + Resource("dnses"). + Name(dNS.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(dNS). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the dNS and deletes it. Returns an error if one occurs. +func (c *dNSes) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("dnses"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *dNSes) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("dnses"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched dNS. +func (c *dNSes) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.DNS, err error) { + result = &v1.DNS{} + err = c.client.Patch(pt). + Resource("dnses"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/doc.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/doc.go new file mode 100644 index 0000000000000..225e6b2be34f2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/doc.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/doc.go new file mode 100644 index 0000000000000..2b5ba4c8e4422 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// Package fake has the automatically generated clients. +package fake diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_apiserver.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_apiserver.go new file mode 100644 index 0000000000000..7e1e09a15ebc3 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_apiserver.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeAPIServers implements APIServerInterface +type FakeAPIServers struct { + Fake *FakeConfigV1 +} + +var apiserversResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "apiservers"} + +var apiserversKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "APIServer"} + +// Get takes name of the aPIServer, and returns the corresponding aPIServer object, and an error if there is any. +func (c *FakeAPIServers) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.APIServer, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(apiserversResource, name), &configv1.APIServer{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.APIServer), err +} + +// List takes label and field selectors, and returns the list of APIServers that match those selectors. +func (c *FakeAPIServers) List(ctx context.Context, opts v1.ListOptions) (result *configv1.APIServerList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(apiserversResource, apiserversKind, opts), &configv1.APIServerList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.APIServerList{ListMeta: obj.(*configv1.APIServerList).ListMeta} + for _, item := range obj.(*configv1.APIServerList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested aPIServers. +func (c *FakeAPIServers) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(apiserversResource, opts)) +} + +// Create takes the representation of a aPIServer and creates it. Returns the server's representation of the aPIServer, and an error, if there is any. +func (c *FakeAPIServers) Create(ctx context.Context, aPIServer *configv1.APIServer, opts v1.CreateOptions) (result *configv1.APIServer, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(apiserversResource, aPIServer), &configv1.APIServer{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.APIServer), err +} + +// Update takes the representation of a aPIServer and updates it. Returns the server's representation of the aPIServer, and an error, if there is any. +func (c *FakeAPIServers) Update(ctx context.Context, aPIServer *configv1.APIServer, opts v1.UpdateOptions) (result *configv1.APIServer, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(apiserversResource, aPIServer), &configv1.APIServer{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.APIServer), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeAPIServers) UpdateStatus(ctx context.Context, aPIServer *configv1.APIServer, opts v1.UpdateOptions) (*configv1.APIServer, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(apiserversResource, "status", aPIServer), &configv1.APIServer{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.APIServer), err +} + +// Delete takes name of the aPIServer and deletes it. Returns an error if one occurs. +func (c *FakeAPIServers) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(apiserversResource, name), &configv1.APIServer{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeAPIServers) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(apiserversResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.APIServerList{}) + return err +} + +// Patch applies the patch and returns the patched aPIServer. +func (c *FakeAPIServers) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.APIServer, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(apiserversResource, name, pt, data, subresources...), &configv1.APIServer{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.APIServer), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_authentication.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_authentication.go new file mode 100644 index 0000000000000..90cd41c074051 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_authentication.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeAuthentications implements AuthenticationInterface +type FakeAuthentications struct { + Fake *FakeConfigV1 +} + +var authenticationsResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "authentications"} + +var authenticationsKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "Authentication"} + +// Get takes name of the authentication, and returns the corresponding authentication object, and an error if there is any. +func (c *FakeAuthentications) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.Authentication, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(authenticationsResource, name), &configv1.Authentication{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Authentication), err +} + +// List takes label and field selectors, and returns the list of Authentications that match those selectors. +func (c *FakeAuthentications) List(ctx context.Context, opts v1.ListOptions) (result *configv1.AuthenticationList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(authenticationsResource, authenticationsKind, opts), &configv1.AuthenticationList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.AuthenticationList{ListMeta: obj.(*configv1.AuthenticationList).ListMeta} + for _, item := range obj.(*configv1.AuthenticationList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested authentications. +func (c *FakeAuthentications) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(authenticationsResource, opts)) +} + +// Create takes the representation of a authentication and creates it. Returns the server's representation of the authentication, and an error, if there is any. +func (c *FakeAuthentications) Create(ctx context.Context, authentication *configv1.Authentication, opts v1.CreateOptions) (result *configv1.Authentication, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(authenticationsResource, authentication), &configv1.Authentication{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Authentication), err +} + +// Update takes the representation of a authentication and updates it. Returns the server's representation of the authentication, and an error, if there is any. +func (c *FakeAuthentications) Update(ctx context.Context, authentication *configv1.Authentication, opts v1.UpdateOptions) (result *configv1.Authentication, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(authenticationsResource, authentication), &configv1.Authentication{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Authentication), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeAuthentications) UpdateStatus(ctx context.Context, authentication *configv1.Authentication, opts v1.UpdateOptions) (*configv1.Authentication, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(authenticationsResource, "status", authentication), &configv1.Authentication{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Authentication), err +} + +// Delete takes name of the authentication and deletes it. Returns an error if one occurs. +func (c *FakeAuthentications) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(authenticationsResource, name), &configv1.Authentication{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeAuthentications) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(authenticationsResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.AuthenticationList{}) + return err +} + +// Patch applies the patch and returns the patched authentication. +func (c *FakeAuthentications) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.Authentication, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(authenticationsResource, name, pt, data, subresources...), &configv1.Authentication{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Authentication), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_build.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_build.go new file mode 100644 index 0000000000000..5232442e76897 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_build.go @@ -0,0 +1,106 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeBuilds implements BuildInterface +type FakeBuilds struct { + Fake *FakeConfigV1 +} + +var buildsResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "builds"} + +var buildsKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "Build"} + +// Get takes name of the build, and returns the corresponding build object, and an error if there is any. +func (c *FakeBuilds) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.Build, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(buildsResource, name), &configv1.Build{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Build), err +} + +// List takes label and field selectors, and returns the list of Builds that match those selectors. +func (c *FakeBuilds) List(ctx context.Context, opts v1.ListOptions) (result *configv1.BuildList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(buildsResource, buildsKind, opts), &configv1.BuildList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.BuildList{ListMeta: obj.(*configv1.BuildList).ListMeta} + for _, item := range obj.(*configv1.BuildList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested builds. +func (c *FakeBuilds) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(buildsResource, opts)) +} + +// Create takes the representation of a build and creates it. Returns the server's representation of the build, and an error, if there is any. +func (c *FakeBuilds) Create(ctx context.Context, build *configv1.Build, opts v1.CreateOptions) (result *configv1.Build, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(buildsResource, build), &configv1.Build{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Build), err +} + +// Update takes the representation of a build and updates it. Returns the server's representation of the build, and an error, if there is any. +func (c *FakeBuilds) Update(ctx context.Context, build *configv1.Build, opts v1.UpdateOptions) (result *configv1.Build, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(buildsResource, build), &configv1.Build{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Build), err +} + +// Delete takes name of the build and deletes it. Returns an error if one occurs. +func (c *FakeBuilds) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(buildsResource, name), &configv1.Build{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeBuilds) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(buildsResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.BuildList{}) + return err +} + +// Patch applies the patch and returns the patched build. +func (c *FakeBuilds) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.Build, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(buildsResource, name, pt, data, subresources...), &configv1.Build{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Build), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_clusteroperator.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_clusteroperator.go new file mode 100644 index 0000000000000..8422324bba83f --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_clusteroperator.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeClusterOperators implements ClusterOperatorInterface +type FakeClusterOperators struct { + Fake *FakeConfigV1 +} + +var clusteroperatorsResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "clusteroperators"} + +var clusteroperatorsKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "ClusterOperator"} + +// Get takes name of the clusterOperator, and returns the corresponding clusterOperator object, and an error if there is any. +func (c *FakeClusterOperators) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.ClusterOperator, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(clusteroperatorsResource, name), &configv1.ClusterOperator{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.ClusterOperator), err +} + +// List takes label and field selectors, and returns the list of ClusterOperators that match those selectors. +func (c *FakeClusterOperators) List(ctx context.Context, opts v1.ListOptions) (result *configv1.ClusterOperatorList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(clusteroperatorsResource, clusteroperatorsKind, opts), &configv1.ClusterOperatorList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.ClusterOperatorList{ListMeta: obj.(*configv1.ClusterOperatorList).ListMeta} + for _, item := range obj.(*configv1.ClusterOperatorList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested clusterOperators. +func (c *FakeClusterOperators) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(clusteroperatorsResource, opts)) +} + +// Create takes the representation of a clusterOperator and creates it. Returns the server's representation of the clusterOperator, and an error, if there is any. +func (c *FakeClusterOperators) Create(ctx context.Context, clusterOperator *configv1.ClusterOperator, opts v1.CreateOptions) (result *configv1.ClusterOperator, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(clusteroperatorsResource, clusterOperator), &configv1.ClusterOperator{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.ClusterOperator), err +} + +// Update takes the representation of a clusterOperator and updates it. Returns the server's representation of the clusterOperator, and an error, if there is any. +func (c *FakeClusterOperators) Update(ctx context.Context, clusterOperator *configv1.ClusterOperator, opts v1.UpdateOptions) (result *configv1.ClusterOperator, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(clusteroperatorsResource, clusterOperator), &configv1.ClusterOperator{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.ClusterOperator), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeClusterOperators) UpdateStatus(ctx context.Context, clusterOperator *configv1.ClusterOperator, opts v1.UpdateOptions) (*configv1.ClusterOperator, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(clusteroperatorsResource, "status", clusterOperator), &configv1.ClusterOperator{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.ClusterOperator), err +} + +// Delete takes name of the clusterOperator and deletes it. Returns an error if one occurs. +func (c *FakeClusterOperators) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(clusteroperatorsResource, name), &configv1.ClusterOperator{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeClusterOperators) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(clusteroperatorsResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.ClusterOperatorList{}) + return err +} + +// Patch applies the patch and returns the patched clusterOperator. +func (c *FakeClusterOperators) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.ClusterOperator, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(clusteroperatorsResource, name, pt, data, subresources...), &configv1.ClusterOperator{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.ClusterOperator), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_clusterversion.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_clusterversion.go new file mode 100644 index 0000000000000..6a4b8d890c629 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_clusterversion.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeClusterVersions implements ClusterVersionInterface +type FakeClusterVersions struct { + Fake *FakeConfigV1 +} + +var clusterversionsResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "clusterversions"} + +var clusterversionsKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "ClusterVersion"} + +// Get takes name of the clusterVersion, and returns the corresponding clusterVersion object, and an error if there is any. +func (c *FakeClusterVersions) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.ClusterVersion, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(clusterversionsResource, name), &configv1.ClusterVersion{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.ClusterVersion), err +} + +// List takes label and field selectors, and returns the list of ClusterVersions that match those selectors. +func (c *FakeClusterVersions) List(ctx context.Context, opts v1.ListOptions) (result *configv1.ClusterVersionList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(clusterversionsResource, clusterversionsKind, opts), &configv1.ClusterVersionList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.ClusterVersionList{ListMeta: obj.(*configv1.ClusterVersionList).ListMeta} + for _, item := range obj.(*configv1.ClusterVersionList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested clusterVersions. +func (c *FakeClusterVersions) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(clusterversionsResource, opts)) +} + +// Create takes the representation of a clusterVersion and creates it. Returns the server's representation of the clusterVersion, and an error, if there is any. +func (c *FakeClusterVersions) Create(ctx context.Context, clusterVersion *configv1.ClusterVersion, opts v1.CreateOptions) (result *configv1.ClusterVersion, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(clusterversionsResource, clusterVersion), &configv1.ClusterVersion{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.ClusterVersion), err +} + +// Update takes the representation of a clusterVersion and updates it. Returns the server's representation of the clusterVersion, and an error, if there is any. +func (c *FakeClusterVersions) Update(ctx context.Context, clusterVersion *configv1.ClusterVersion, opts v1.UpdateOptions) (result *configv1.ClusterVersion, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(clusterversionsResource, clusterVersion), &configv1.ClusterVersion{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.ClusterVersion), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeClusterVersions) UpdateStatus(ctx context.Context, clusterVersion *configv1.ClusterVersion, opts v1.UpdateOptions) (*configv1.ClusterVersion, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(clusterversionsResource, "status", clusterVersion), &configv1.ClusterVersion{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.ClusterVersion), err +} + +// Delete takes name of the clusterVersion and deletes it. Returns an error if one occurs. +func (c *FakeClusterVersions) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(clusterversionsResource, name), &configv1.ClusterVersion{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeClusterVersions) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(clusterversionsResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.ClusterVersionList{}) + return err +} + +// Patch applies the patch and returns the patched clusterVersion. +func (c *FakeClusterVersions) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.ClusterVersion, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(clusterversionsResource, name, pt, data, subresources...), &configv1.ClusterVersion{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.ClusterVersion), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_config_client.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_config_client.go new file mode 100644 index 0000000000000..d743f4679220d --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_config_client.go @@ -0,0 +1,88 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + v1 "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1" + rest "k8s.io/client-go/rest" + testing "k8s.io/client-go/testing" +) + +type FakeConfigV1 struct { + *testing.Fake +} + +func (c *FakeConfigV1) APIServers() v1.APIServerInterface { + return &FakeAPIServers{c} +} + +func (c *FakeConfigV1) Authentications() v1.AuthenticationInterface { + return &FakeAuthentications{c} +} + +func (c *FakeConfigV1) Builds() v1.BuildInterface { + return &FakeBuilds{c} +} + +func (c *FakeConfigV1) ClusterOperators() v1.ClusterOperatorInterface { + return &FakeClusterOperators{c} +} + +func (c *FakeConfigV1) ClusterVersions() v1.ClusterVersionInterface { + return &FakeClusterVersions{c} +} + +func (c *FakeConfigV1) Consoles() v1.ConsoleInterface { + return &FakeConsoles{c} +} + +func (c *FakeConfigV1) DNSes() v1.DNSInterface { + return &FakeDNSes{c} +} + +func (c *FakeConfigV1) FeatureGates() v1.FeatureGateInterface { + return &FakeFeatureGates{c} +} + +func (c *FakeConfigV1) Images() v1.ImageInterface { + return &FakeImages{c} +} + +func (c *FakeConfigV1) Infrastructures() v1.InfrastructureInterface { + return &FakeInfrastructures{c} +} + +func (c *FakeConfigV1) Ingresses() v1.IngressInterface { + return &FakeIngresses{c} +} + +func (c *FakeConfigV1) Networks() v1.NetworkInterface { + return &FakeNetworks{c} +} + +func (c *FakeConfigV1) OAuths() v1.OAuthInterface { + return &FakeOAuths{c} +} + +func (c *FakeConfigV1) OperatorHubs() v1.OperatorHubInterface { + return &FakeOperatorHubs{c} +} + +func (c *FakeConfigV1) Projects() v1.ProjectInterface { + return &FakeProjects{c} +} + +func (c *FakeConfigV1) Proxies() v1.ProxyInterface { + return &FakeProxies{c} +} + +func (c *FakeConfigV1) Schedulers() v1.SchedulerInterface { + return &FakeSchedulers{c} +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *FakeConfigV1) RESTClient() rest.Interface { + var ret *rest.RESTClient + return ret +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_console.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_console.go new file mode 100644 index 0000000000000..a275feeb3ceb6 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_console.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeConsoles implements ConsoleInterface +type FakeConsoles struct { + Fake *FakeConfigV1 +} + +var consolesResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "consoles"} + +var consolesKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "Console"} + +// Get takes name of the console, and returns the corresponding console object, and an error if there is any. +func (c *FakeConsoles) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.Console, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(consolesResource, name), &configv1.Console{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Console), err +} + +// List takes label and field selectors, and returns the list of Consoles that match those selectors. +func (c *FakeConsoles) List(ctx context.Context, opts v1.ListOptions) (result *configv1.ConsoleList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(consolesResource, consolesKind, opts), &configv1.ConsoleList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.ConsoleList{ListMeta: obj.(*configv1.ConsoleList).ListMeta} + for _, item := range obj.(*configv1.ConsoleList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested consoles. +func (c *FakeConsoles) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(consolesResource, opts)) +} + +// Create takes the representation of a console and creates it. Returns the server's representation of the console, and an error, if there is any. +func (c *FakeConsoles) Create(ctx context.Context, console *configv1.Console, opts v1.CreateOptions) (result *configv1.Console, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(consolesResource, console), &configv1.Console{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Console), err +} + +// Update takes the representation of a console and updates it. Returns the server's representation of the console, and an error, if there is any. +func (c *FakeConsoles) Update(ctx context.Context, console *configv1.Console, opts v1.UpdateOptions) (result *configv1.Console, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(consolesResource, console), &configv1.Console{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Console), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeConsoles) UpdateStatus(ctx context.Context, console *configv1.Console, opts v1.UpdateOptions) (*configv1.Console, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(consolesResource, "status", console), &configv1.Console{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Console), err +} + +// Delete takes name of the console and deletes it. Returns an error if one occurs. +func (c *FakeConsoles) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(consolesResource, name), &configv1.Console{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeConsoles) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(consolesResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.ConsoleList{}) + return err +} + +// Patch applies the patch and returns the patched console. +func (c *FakeConsoles) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.Console, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(consolesResource, name, pt, data, subresources...), &configv1.Console{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Console), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_dns.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_dns.go new file mode 100644 index 0000000000000..1aab6def6c2ae --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_dns.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeDNSes implements DNSInterface +type FakeDNSes struct { + Fake *FakeConfigV1 +} + +var dnsesResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "dnses"} + +var dnsesKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "DNS"} + +// Get takes name of the dNS, and returns the corresponding dNS object, and an error if there is any. +func (c *FakeDNSes) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.DNS, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(dnsesResource, name), &configv1.DNS{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.DNS), err +} + +// List takes label and field selectors, and returns the list of DNSes that match those selectors. +func (c *FakeDNSes) List(ctx context.Context, opts v1.ListOptions) (result *configv1.DNSList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(dnsesResource, dnsesKind, opts), &configv1.DNSList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.DNSList{ListMeta: obj.(*configv1.DNSList).ListMeta} + for _, item := range obj.(*configv1.DNSList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested dNSes. +func (c *FakeDNSes) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(dnsesResource, opts)) +} + +// Create takes the representation of a dNS and creates it. Returns the server's representation of the dNS, and an error, if there is any. +func (c *FakeDNSes) Create(ctx context.Context, dNS *configv1.DNS, opts v1.CreateOptions) (result *configv1.DNS, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(dnsesResource, dNS), &configv1.DNS{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.DNS), err +} + +// Update takes the representation of a dNS and updates it. Returns the server's representation of the dNS, and an error, if there is any. +func (c *FakeDNSes) Update(ctx context.Context, dNS *configv1.DNS, opts v1.UpdateOptions) (result *configv1.DNS, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(dnsesResource, dNS), &configv1.DNS{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.DNS), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeDNSes) UpdateStatus(ctx context.Context, dNS *configv1.DNS, opts v1.UpdateOptions) (*configv1.DNS, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(dnsesResource, "status", dNS), &configv1.DNS{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.DNS), err +} + +// Delete takes name of the dNS and deletes it. Returns an error if one occurs. +func (c *FakeDNSes) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(dnsesResource, name), &configv1.DNS{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeDNSes) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(dnsesResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.DNSList{}) + return err +} + +// Patch applies the patch and returns the patched dNS. +func (c *FakeDNSes) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.DNS, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(dnsesResource, name, pt, data, subresources...), &configv1.DNS{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.DNS), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_featuregate.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_featuregate.go new file mode 100644 index 0000000000000..8ad782e8736ca --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_featuregate.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeFeatureGates implements FeatureGateInterface +type FakeFeatureGates struct { + Fake *FakeConfigV1 +} + +var featuregatesResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "featuregates"} + +var featuregatesKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "FeatureGate"} + +// Get takes name of the featureGate, and returns the corresponding featureGate object, and an error if there is any. +func (c *FakeFeatureGates) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.FeatureGate, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(featuregatesResource, name), &configv1.FeatureGate{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.FeatureGate), err +} + +// List takes label and field selectors, and returns the list of FeatureGates that match those selectors. +func (c *FakeFeatureGates) List(ctx context.Context, opts v1.ListOptions) (result *configv1.FeatureGateList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(featuregatesResource, featuregatesKind, opts), &configv1.FeatureGateList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.FeatureGateList{ListMeta: obj.(*configv1.FeatureGateList).ListMeta} + for _, item := range obj.(*configv1.FeatureGateList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested featureGates. +func (c *FakeFeatureGates) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(featuregatesResource, opts)) +} + +// Create takes the representation of a featureGate and creates it. Returns the server's representation of the featureGate, and an error, if there is any. +func (c *FakeFeatureGates) Create(ctx context.Context, featureGate *configv1.FeatureGate, opts v1.CreateOptions) (result *configv1.FeatureGate, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(featuregatesResource, featureGate), &configv1.FeatureGate{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.FeatureGate), err +} + +// Update takes the representation of a featureGate and updates it. Returns the server's representation of the featureGate, and an error, if there is any. +func (c *FakeFeatureGates) Update(ctx context.Context, featureGate *configv1.FeatureGate, opts v1.UpdateOptions) (result *configv1.FeatureGate, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(featuregatesResource, featureGate), &configv1.FeatureGate{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.FeatureGate), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeFeatureGates) UpdateStatus(ctx context.Context, featureGate *configv1.FeatureGate, opts v1.UpdateOptions) (*configv1.FeatureGate, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(featuregatesResource, "status", featureGate), &configv1.FeatureGate{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.FeatureGate), err +} + +// Delete takes name of the featureGate and deletes it. Returns an error if one occurs. +func (c *FakeFeatureGates) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(featuregatesResource, name), &configv1.FeatureGate{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeFeatureGates) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(featuregatesResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.FeatureGateList{}) + return err +} + +// Patch applies the patch and returns the patched featureGate. +func (c *FakeFeatureGates) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.FeatureGate, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(featuregatesResource, name, pt, data, subresources...), &configv1.FeatureGate{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.FeatureGate), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_image.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_image.go new file mode 100644 index 0000000000000..6cff256912d68 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_image.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeImages implements ImageInterface +type FakeImages struct { + Fake *FakeConfigV1 +} + +var imagesResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "images"} + +var imagesKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "Image"} + +// Get takes name of the image, and returns the corresponding image object, and an error if there is any. +func (c *FakeImages) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.Image, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(imagesResource, name), &configv1.Image{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Image), err +} + +// List takes label and field selectors, and returns the list of Images that match those selectors. +func (c *FakeImages) List(ctx context.Context, opts v1.ListOptions) (result *configv1.ImageList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(imagesResource, imagesKind, opts), &configv1.ImageList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.ImageList{ListMeta: obj.(*configv1.ImageList).ListMeta} + for _, item := range obj.(*configv1.ImageList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested images. +func (c *FakeImages) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(imagesResource, opts)) +} + +// Create takes the representation of a image and creates it. Returns the server's representation of the image, and an error, if there is any. +func (c *FakeImages) Create(ctx context.Context, image *configv1.Image, opts v1.CreateOptions) (result *configv1.Image, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(imagesResource, image), &configv1.Image{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Image), err +} + +// Update takes the representation of a image and updates it. Returns the server's representation of the image, and an error, if there is any. +func (c *FakeImages) Update(ctx context.Context, image *configv1.Image, opts v1.UpdateOptions) (result *configv1.Image, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(imagesResource, image), &configv1.Image{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Image), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeImages) UpdateStatus(ctx context.Context, image *configv1.Image, opts v1.UpdateOptions) (*configv1.Image, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(imagesResource, "status", image), &configv1.Image{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Image), err +} + +// Delete takes name of the image and deletes it. Returns an error if one occurs. +func (c *FakeImages) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(imagesResource, name), &configv1.Image{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeImages) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(imagesResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.ImageList{}) + return err +} + +// Patch applies the patch and returns the patched image. +func (c *FakeImages) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.Image, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(imagesResource, name, pt, data, subresources...), &configv1.Image{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Image), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_infrastructure.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_infrastructure.go new file mode 100644 index 0000000000000..698db7184a79b --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_infrastructure.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeInfrastructures implements InfrastructureInterface +type FakeInfrastructures struct { + Fake *FakeConfigV1 +} + +var infrastructuresResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "infrastructures"} + +var infrastructuresKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "Infrastructure"} + +// Get takes name of the infrastructure, and returns the corresponding infrastructure object, and an error if there is any. +func (c *FakeInfrastructures) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.Infrastructure, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(infrastructuresResource, name), &configv1.Infrastructure{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Infrastructure), err +} + +// List takes label and field selectors, and returns the list of Infrastructures that match those selectors. +func (c *FakeInfrastructures) List(ctx context.Context, opts v1.ListOptions) (result *configv1.InfrastructureList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(infrastructuresResource, infrastructuresKind, opts), &configv1.InfrastructureList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.InfrastructureList{ListMeta: obj.(*configv1.InfrastructureList).ListMeta} + for _, item := range obj.(*configv1.InfrastructureList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested infrastructures. +func (c *FakeInfrastructures) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(infrastructuresResource, opts)) +} + +// Create takes the representation of a infrastructure and creates it. Returns the server's representation of the infrastructure, and an error, if there is any. +func (c *FakeInfrastructures) Create(ctx context.Context, infrastructure *configv1.Infrastructure, opts v1.CreateOptions) (result *configv1.Infrastructure, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(infrastructuresResource, infrastructure), &configv1.Infrastructure{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Infrastructure), err +} + +// Update takes the representation of a infrastructure and updates it. Returns the server's representation of the infrastructure, and an error, if there is any. +func (c *FakeInfrastructures) Update(ctx context.Context, infrastructure *configv1.Infrastructure, opts v1.UpdateOptions) (result *configv1.Infrastructure, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(infrastructuresResource, infrastructure), &configv1.Infrastructure{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Infrastructure), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeInfrastructures) UpdateStatus(ctx context.Context, infrastructure *configv1.Infrastructure, opts v1.UpdateOptions) (*configv1.Infrastructure, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(infrastructuresResource, "status", infrastructure), &configv1.Infrastructure{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Infrastructure), err +} + +// Delete takes name of the infrastructure and deletes it. Returns an error if one occurs. +func (c *FakeInfrastructures) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(infrastructuresResource, name), &configv1.Infrastructure{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeInfrastructures) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(infrastructuresResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.InfrastructureList{}) + return err +} + +// Patch applies the patch and returns the patched infrastructure. +func (c *FakeInfrastructures) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.Infrastructure, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(infrastructuresResource, name, pt, data, subresources...), &configv1.Infrastructure{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Infrastructure), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_ingress.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_ingress.go new file mode 100644 index 0000000000000..7314198cdf505 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_ingress.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeIngresses implements IngressInterface +type FakeIngresses struct { + Fake *FakeConfigV1 +} + +var ingressesResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "ingresses"} + +var ingressesKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "Ingress"} + +// Get takes name of the ingress, and returns the corresponding ingress object, and an error if there is any. +func (c *FakeIngresses) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.Ingress, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(ingressesResource, name), &configv1.Ingress{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Ingress), err +} + +// List takes label and field selectors, and returns the list of Ingresses that match those selectors. +func (c *FakeIngresses) List(ctx context.Context, opts v1.ListOptions) (result *configv1.IngressList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(ingressesResource, ingressesKind, opts), &configv1.IngressList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.IngressList{ListMeta: obj.(*configv1.IngressList).ListMeta} + for _, item := range obj.(*configv1.IngressList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested ingresses. +func (c *FakeIngresses) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(ingressesResource, opts)) +} + +// Create takes the representation of a ingress and creates it. Returns the server's representation of the ingress, and an error, if there is any. +func (c *FakeIngresses) Create(ctx context.Context, ingress *configv1.Ingress, opts v1.CreateOptions) (result *configv1.Ingress, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(ingressesResource, ingress), &configv1.Ingress{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Ingress), err +} + +// Update takes the representation of a ingress and updates it. Returns the server's representation of the ingress, and an error, if there is any. +func (c *FakeIngresses) Update(ctx context.Context, ingress *configv1.Ingress, opts v1.UpdateOptions) (result *configv1.Ingress, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(ingressesResource, ingress), &configv1.Ingress{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Ingress), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeIngresses) UpdateStatus(ctx context.Context, ingress *configv1.Ingress, opts v1.UpdateOptions) (*configv1.Ingress, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(ingressesResource, "status", ingress), &configv1.Ingress{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Ingress), err +} + +// Delete takes name of the ingress and deletes it. Returns an error if one occurs. +func (c *FakeIngresses) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(ingressesResource, name), &configv1.Ingress{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeIngresses) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(ingressesResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.IngressList{}) + return err +} + +// Patch applies the patch and returns the patched ingress. +func (c *FakeIngresses) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.Ingress, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(ingressesResource, name, pt, data, subresources...), &configv1.Ingress{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Ingress), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_network.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_network.go new file mode 100644 index 0000000000000..a1953c5429477 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_network.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeNetworks implements NetworkInterface +type FakeNetworks struct { + Fake *FakeConfigV1 +} + +var networksResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "networks"} + +var networksKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "Network"} + +// Get takes name of the network, and returns the corresponding network object, and an error if there is any. +func (c *FakeNetworks) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.Network, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(networksResource, name), &configv1.Network{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Network), err +} + +// List takes label and field selectors, and returns the list of Networks that match those selectors. +func (c *FakeNetworks) List(ctx context.Context, opts v1.ListOptions) (result *configv1.NetworkList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(networksResource, networksKind, opts), &configv1.NetworkList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.NetworkList{ListMeta: obj.(*configv1.NetworkList).ListMeta} + for _, item := range obj.(*configv1.NetworkList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested networks. +func (c *FakeNetworks) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(networksResource, opts)) +} + +// Create takes the representation of a network and creates it. Returns the server's representation of the network, and an error, if there is any. +func (c *FakeNetworks) Create(ctx context.Context, network *configv1.Network, opts v1.CreateOptions) (result *configv1.Network, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(networksResource, network), &configv1.Network{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Network), err +} + +// Update takes the representation of a network and updates it. Returns the server's representation of the network, and an error, if there is any. +func (c *FakeNetworks) Update(ctx context.Context, network *configv1.Network, opts v1.UpdateOptions) (result *configv1.Network, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(networksResource, network), &configv1.Network{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Network), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeNetworks) UpdateStatus(ctx context.Context, network *configv1.Network, opts v1.UpdateOptions) (*configv1.Network, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(networksResource, "status", network), &configv1.Network{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Network), err +} + +// Delete takes name of the network and deletes it. Returns an error if one occurs. +func (c *FakeNetworks) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(networksResource, name), &configv1.Network{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeNetworks) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(networksResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.NetworkList{}) + return err +} + +// Patch applies the patch and returns the patched network. +func (c *FakeNetworks) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.Network, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(networksResource, name, pt, data, subresources...), &configv1.Network{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Network), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_oauth.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_oauth.go new file mode 100644 index 0000000000000..c5146adcf53c0 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_oauth.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeOAuths implements OAuthInterface +type FakeOAuths struct { + Fake *FakeConfigV1 +} + +var oauthsResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "oauths"} + +var oauthsKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "OAuth"} + +// Get takes name of the oAuth, and returns the corresponding oAuth object, and an error if there is any. +func (c *FakeOAuths) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.OAuth, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(oauthsResource, name), &configv1.OAuth{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.OAuth), err +} + +// List takes label and field selectors, and returns the list of OAuths that match those selectors. +func (c *FakeOAuths) List(ctx context.Context, opts v1.ListOptions) (result *configv1.OAuthList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(oauthsResource, oauthsKind, opts), &configv1.OAuthList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.OAuthList{ListMeta: obj.(*configv1.OAuthList).ListMeta} + for _, item := range obj.(*configv1.OAuthList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested oAuths. +func (c *FakeOAuths) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(oauthsResource, opts)) +} + +// Create takes the representation of a oAuth and creates it. Returns the server's representation of the oAuth, and an error, if there is any. +func (c *FakeOAuths) Create(ctx context.Context, oAuth *configv1.OAuth, opts v1.CreateOptions) (result *configv1.OAuth, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(oauthsResource, oAuth), &configv1.OAuth{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.OAuth), err +} + +// Update takes the representation of a oAuth and updates it. Returns the server's representation of the oAuth, and an error, if there is any. +func (c *FakeOAuths) Update(ctx context.Context, oAuth *configv1.OAuth, opts v1.UpdateOptions) (result *configv1.OAuth, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(oauthsResource, oAuth), &configv1.OAuth{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.OAuth), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeOAuths) UpdateStatus(ctx context.Context, oAuth *configv1.OAuth, opts v1.UpdateOptions) (*configv1.OAuth, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(oauthsResource, "status", oAuth), &configv1.OAuth{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.OAuth), err +} + +// Delete takes name of the oAuth and deletes it. Returns an error if one occurs. +func (c *FakeOAuths) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(oauthsResource, name), &configv1.OAuth{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeOAuths) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(oauthsResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.OAuthList{}) + return err +} + +// Patch applies the patch and returns the patched oAuth. +func (c *FakeOAuths) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.OAuth, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(oauthsResource, name, pt, data, subresources...), &configv1.OAuth{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.OAuth), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_operatorhub.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_operatorhub.go new file mode 100644 index 0000000000000..9da8b92884a7f --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_operatorhub.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeOperatorHubs implements OperatorHubInterface +type FakeOperatorHubs struct { + Fake *FakeConfigV1 +} + +var operatorhubsResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "operatorhubs"} + +var operatorhubsKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "OperatorHub"} + +// Get takes name of the operatorHub, and returns the corresponding operatorHub object, and an error if there is any. +func (c *FakeOperatorHubs) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.OperatorHub, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(operatorhubsResource, name), &configv1.OperatorHub{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.OperatorHub), err +} + +// List takes label and field selectors, and returns the list of OperatorHubs that match those selectors. +func (c *FakeOperatorHubs) List(ctx context.Context, opts v1.ListOptions) (result *configv1.OperatorHubList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(operatorhubsResource, operatorhubsKind, opts), &configv1.OperatorHubList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.OperatorHubList{ListMeta: obj.(*configv1.OperatorHubList).ListMeta} + for _, item := range obj.(*configv1.OperatorHubList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested operatorHubs. +func (c *FakeOperatorHubs) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(operatorhubsResource, opts)) +} + +// Create takes the representation of a operatorHub and creates it. Returns the server's representation of the operatorHub, and an error, if there is any. +func (c *FakeOperatorHubs) Create(ctx context.Context, operatorHub *configv1.OperatorHub, opts v1.CreateOptions) (result *configv1.OperatorHub, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(operatorhubsResource, operatorHub), &configv1.OperatorHub{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.OperatorHub), err +} + +// Update takes the representation of a operatorHub and updates it. Returns the server's representation of the operatorHub, and an error, if there is any. +func (c *FakeOperatorHubs) Update(ctx context.Context, operatorHub *configv1.OperatorHub, opts v1.UpdateOptions) (result *configv1.OperatorHub, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(operatorhubsResource, operatorHub), &configv1.OperatorHub{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.OperatorHub), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeOperatorHubs) UpdateStatus(ctx context.Context, operatorHub *configv1.OperatorHub, opts v1.UpdateOptions) (*configv1.OperatorHub, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(operatorhubsResource, "status", operatorHub), &configv1.OperatorHub{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.OperatorHub), err +} + +// Delete takes name of the operatorHub and deletes it. Returns an error if one occurs. +func (c *FakeOperatorHubs) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(operatorhubsResource, name), &configv1.OperatorHub{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeOperatorHubs) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(operatorhubsResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.OperatorHubList{}) + return err +} + +// Patch applies the patch and returns the patched operatorHub. +func (c *FakeOperatorHubs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.OperatorHub, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(operatorhubsResource, name, pt, data, subresources...), &configv1.OperatorHub{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.OperatorHub), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_project.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_project.go new file mode 100644 index 0000000000000..08ed1144f43cb --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_project.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeProjects implements ProjectInterface +type FakeProjects struct { + Fake *FakeConfigV1 +} + +var projectsResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "projects"} + +var projectsKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "Project"} + +// Get takes name of the project, and returns the corresponding project object, and an error if there is any. +func (c *FakeProjects) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.Project, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(projectsResource, name), &configv1.Project{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Project), err +} + +// List takes label and field selectors, and returns the list of Projects that match those selectors. +func (c *FakeProjects) List(ctx context.Context, opts v1.ListOptions) (result *configv1.ProjectList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(projectsResource, projectsKind, opts), &configv1.ProjectList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.ProjectList{ListMeta: obj.(*configv1.ProjectList).ListMeta} + for _, item := range obj.(*configv1.ProjectList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested projects. +func (c *FakeProjects) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(projectsResource, opts)) +} + +// Create takes the representation of a project and creates it. Returns the server's representation of the project, and an error, if there is any. +func (c *FakeProjects) Create(ctx context.Context, project *configv1.Project, opts v1.CreateOptions) (result *configv1.Project, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(projectsResource, project), &configv1.Project{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Project), err +} + +// Update takes the representation of a project and updates it. Returns the server's representation of the project, and an error, if there is any. +func (c *FakeProjects) Update(ctx context.Context, project *configv1.Project, opts v1.UpdateOptions) (result *configv1.Project, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(projectsResource, project), &configv1.Project{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Project), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeProjects) UpdateStatus(ctx context.Context, project *configv1.Project, opts v1.UpdateOptions) (*configv1.Project, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(projectsResource, "status", project), &configv1.Project{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Project), err +} + +// Delete takes name of the project and deletes it. Returns an error if one occurs. +func (c *FakeProjects) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(projectsResource, name), &configv1.Project{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeProjects) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(projectsResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.ProjectList{}) + return err +} + +// Patch applies the patch and returns the patched project. +func (c *FakeProjects) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.Project, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(projectsResource, name, pt, data, subresources...), &configv1.Project{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Project), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_proxy.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_proxy.go new file mode 100644 index 0000000000000..5bf694e723615 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_proxy.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeProxies implements ProxyInterface +type FakeProxies struct { + Fake *FakeConfigV1 +} + +var proxiesResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "proxies"} + +var proxiesKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "Proxy"} + +// Get takes name of the proxy, and returns the corresponding proxy object, and an error if there is any. +func (c *FakeProxies) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.Proxy, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(proxiesResource, name), &configv1.Proxy{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Proxy), err +} + +// List takes label and field selectors, and returns the list of Proxies that match those selectors. +func (c *FakeProxies) List(ctx context.Context, opts v1.ListOptions) (result *configv1.ProxyList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(proxiesResource, proxiesKind, opts), &configv1.ProxyList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.ProxyList{ListMeta: obj.(*configv1.ProxyList).ListMeta} + for _, item := range obj.(*configv1.ProxyList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested proxies. +func (c *FakeProxies) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(proxiesResource, opts)) +} + +// Create takes the representation of a proxy and creates it. Returns the server's representation of the proxy, and an error, if there is any. +func (c *FakeProxies) Create(ctx context.Context, proxy *configv1.Proxy, opts v1.CreateOptions) (result *configv1.Proxy, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(proxiesResource, proxy), &configv1.Proxy{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Proxy), err +} + +// Update takes the representation of a proxy and updates it. Returns the server's representation of the proxy, and an error, if there is any. +func (c *FakeProxies) Update(ctx context.Context, proxy *configv1.Proxy, opts v1.UpdateOptions) (result *configv1.Proxy, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(proxiesResource, proxy), &configv1.Proxy{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Proxy), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeProxies) UpdateStatus(ctx context.Context, proxy *configv1.Proxy, opts v1.UpdateOptions) (*configv1.Proxy, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(proxiesResource, "status", proxy), &configv1.Proxy{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Proxy), err +} + +// Delete takes name of the proxy and deletes it. Returns an error if one occurs. +func (c *FakeProxies) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(proxiesResource, name), &configv1.Proxy{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeProxies) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(proxiesResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.ProxyList{}) + return err +} + +// Patch applies the patch and returns the patched proxy. +func (c *FakeProxies) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.Proxy, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(proxiesResource, name, pt, data, subresources...), &configv1.Proxy{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Proxy), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_scheduler.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_scheduler.go new file mode 100644 index 0000000000000..fb099606a1757 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake/fake_scheduler.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeSchedulers implements SchedulerInterface +type FakeSchedulers struct { + Fake *FakeConfigV1 +} + +var schedulersResource = schema.GroupVersionResource{Group: "config.openshift.io", Version: "v1", Resource: "schedulers"} + +var schedulersKind = schema.GroupVersionKind{Group: "config.openshift.io", Version: "v1", Kind: "Scheduler"} + +// Get takes name of the scheduler, and returns the corresponding scheduler object, and an error if there is any. +func (c *FakeSchedulers) Get(ctx context.Context, name string, options v1.GetOptions) (result *configv1.Scheduler, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(schedulersResource, name), &configv1.Scheduler{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Scheduler), err +} + +// List takes label and field selectors, and returns the list of Schedulers that match those selectors. +func (c *FakeSchedulers) List(ctx context.Context, opts v1.ListOptions) (result *configv1.SchedulerList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(schedulersResource, schedulersKind, opts), &configv1.SchedulerList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &configv1.SchedulerList{ListMeta: obj.(*configv1.SchedulerList).ListMeta} + for _, item := range obj.(*configv1.SchedulerList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested schedulers. +func (c *FakeSchedulers) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(schedulersResource, opts)) +} + +// Create takes the representation of a scheduler and creates it. Returns the server's representation of the scheduler, and an error, if there is any. +func (c *FakeSchedulers) Create(ctx context.Context, scheduler *configv1.Scheduler, opts v1.CreateOptions) (result *configv1.Scheduler, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(schedulersResource, scheduler), &configv1.Scheduler{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Scheduler), err +} + +// Update takes the representation of a scheduler and updates it. Returns the server's representation of the scheduler, and an error, if there is any. +func (c *FakeSchedulers) Update(ctx context.Context, scheduler *configv1.Scheduler, opts v1.UpdateOptions) (result *configv1.Scheduler, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(schedulersResource, scheduler), &configv1.Scheduler{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Scheduler), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeSchedulers) UpdateStatus(ctx context.Context, scheduler *configv1.Scheduler, opts v1.UpdateOptions) (*configv1.Scheduler, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(schedulersResource, "status", scheduler), &configv1.Scheduler{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Scheduler), err +} + +// Delete takes name of the scheduler and deletes it. Returns an error if one occurs. +func (c *FakeSchedulers) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(schedulersResource, name), &configv1.Scheduler{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeSchedulers) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(schedulersResource, listOpts) + + _, err := c.Fake.Invokes(action, &configv1.SchedulerList{}) + return err +} + +// Patch applies the patch and returns the patched scheduler. +func (c *FakeSchedulers) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *configv1.Scheduler, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(schedulersResource, name, pt, data, subresources...), &configv1.Scheduler{}) + if obj == nil { + return nil, err + } + return obj.(*configv1.Scheduler), err +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/featuregate.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/featuregate.go new file mode 100644 index 0000000000000..dd784e1d20336 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/featuregate.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// FeatureGatesGetter has a method to return a FeatureGateInterface. +// A group's client should implement this interface. +type FeatureGatesGetter interface { + FeatureGates() FeatureGateInterface +} + +// FeatureGateInterface has methods to work with FeatureGate resources. +type FeatureGateInterface interface { + Create(ctx context.Context, featureGate *v1.FeatureGate, opts metav1.CreateOptions) (*v1.FeatureGate, error) + Update(ctx context.Context, featureGate *v1.FeatureGate, opts metav1.UpdateOptions) (*v1.FeatureGate, error) + UpdateStatus(ctx context.Context, featureGate *v1.FeatureGate, opts metav1.UpdateOptions) (*v1.FeatureGate, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.FeatureGate, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.FeatureGateList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.FeatureGate, err error) + FeatureGateExpansion +} + +// featureGates implements FeatureGateInterface +type featureGates struct { + client rest.Interface +} + +// newFeatureGates returns a FeatureGates +func newFeatureGates(c *ConfigV1Client) *featureGates { + return &featureGates{ + client: c.RESTClient(), + } +} + +// Get takes name of the featureGate, and returns the corresponding featureGate object, and an error if there is any. +func (c *featureGates) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.FeatureGate, err error) { + result = &v1.FeatureGate{} + err = c.client.Get(). + Resource("featuregates"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of FeatureGates that match those selectors. +func (c *featureGates) List(ctx context.Context, opts metav1.ListOptions) (result *v1.FeatureGateList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.FeatureGateList{} + err = c.client.Get(). + Resource("featuregates"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested featureGates. +func (c *featureGates) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("featuregates"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a featureGate and creates it. Returns the server's representation of the featureGate, and an error, if there is any. +func (c *featureGates) Create(ctx context.Context, featureGate *v1.FeatureGate, opts metav1.CreateOptions) (result *v1.FeatureGate, err error) { + result = &v1.FeatureGate{} + err = c.client.Post(). + Resource("featuregates"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(featureGate). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a featureGate and updates it. Returns the server's representation of the featureGate, and an error, if there is any. +func (c *featureGates) Update(ctx context.Context, featureGate *v1.FeatureGate, opts metav1.UpdateOptions) (result *v1.FeatureGate, err error) { + result = &v1.FeatureGate{} + err = c.client.Put(). + Resource("featuregates"). + Name(featureGate.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(featureGate). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *featureGates) UpdateStatus(ctx context.Context, featureGate *v1.FeatureGate, opts metav1.UpdateOptions) (result *v1.FeatureGate, err error) { + result = &v1.FeatureGate{} + err = c.client.Put(). + Resource("featuregates"). + Name(featureGate.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(featureGate). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the featureGate and deletes it. Returns an error if one occurs. +func (c *featureGates) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("featuregates"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *featureGates) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("featuregates"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched featureGate. +func (c *featureGates) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.FeatureGate, err error) { + result = &v1.FeatureGate{} + err = c.client.Patch(pt). + Resource("featuregates"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/generated_expansion.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/generated_expansion.go new file mode 100644 index 0000000000000..50a4ec7f8f3d3 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/generated_expansion.go @@ -0,0 +1,37 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type APIServerExpansion interface{} + +type AuthenticationExpansion interface{} + +type BuildExpansion interface{} + +type ClusterOperatorExpansion interface{} + +type ClusterVersionExpansion interface{} + +type ConsoleExpansion interface{} + +type DNSExpansion interface{} + +type FeatureGateExpansion interface{} + +type ImageExpansion interface{} + +type InfrastructureExpansion interface{} + +type IngressExpansion interface{} + +type NetworkExpansion interface{} + +type OAuthExpansion interface{} + +type OperatorHubExpansion interface{} + +type ProjectExpansion interface{} + +type ProxyExpansion interface{} + +type SchedulerExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/image.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/image.go new file mode 100644 index 0000000000000..874ef211f632e --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/image.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// ImagesGetter has a method to return a ImageInterface. +// A group's client should implement this interface. +type ImagesGetter interface { + Images() ImageInterface +} + +// ImageInterface has methods to work with Image resources. +type ImageInterface interface { + Create(ctx context.Context, image *v1.Image, opts metav1.CreateOptions) (*v1.Image, error) + Update(ctx context.Context, image *v1.Image, opts metav1.UpdateOptions) (*v1.Image, error) + UpdateStatus(ctx context.Context, image *v1.Image, opts metav1.UpdateOptions) (*v1.Image, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Image, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ImageList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Image, err error) + ImageExpansion +} + +// images implements ImageInterface +type images struct { + client rest.Interface +} + +// newImages returns a Images +func newImages(c *ConfigV1Client) *images { + return &images{ + client: c.RESTClient(), + } +} + +// Get takes name of the image, and returns the corresponding image object, and an error if there is any. +func (c *images) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Image, err error) { + result = &v1.Image{} + err = c.client.Get(). + Resource("images"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Images that match those selectors. +func (c *images) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ImageList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ImageList{} + err = c.client.Get(). + Resource("images"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested images. +func (c *images) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("images"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a image and creates it. Returns the server's representation of the image, and an error, if there is any. +func (c *images) Create(ctx context.Context, image *v1.Image, opts metav1.CreateOptions) (result *v1.Image, err error) { + result = &v1.Image{} + err = c.client.Post(). + Resource("images"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(image). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a image and updates it. Returns the server's representation of the image, and an error, if there is any. +func (c *images) Update(ctx context.Context, image *v1.Image, opts metav1.UpdateOptions) (result *v1.Image, err error) { + result = &v1.Image{} + err = c.client.Put(). + Resource("images"). + Name(image.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(image). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *images) UpdateStatus(ctx context.Context, image *v1.Image, opts metav1.UpdateOptions) (result *v1.Image, err error) { + result = &v1.Image{} + err = c.client.Put(). + Resource("images"). + Name(image.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(image). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the image and deletes it. Returns an error if one occurs. +func (c *images) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("images"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *images) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("images"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched image. +func (c *images) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Image, err error) { + result = &v1.Image{} + err = c.client.Patch(pt). + Resource("images"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/infrastructure.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/infrastructure.go new file mode 100644 index 0000000000000..661eff231574c --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/infrastructure.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// InfrastructuresGetter has a method to return a InfrastructureInterface. +// A group's client should implement this interface. +type InfrastructuresGetter interface { + Infrastructures() InfrastructureInterface +} + +// InfrastructureInterface has methods to work with Infrastructure resources. +type InfrastructureInterface interface { + Create(ctx context.Context, infrastructure *v1.Infrastructure, opts metav1.CreateOptions) (*v1.Infrastructure, error) + Update(ctx context.Context, infrastructure *v1.Infrastructure, opts metav1.UpdateOptions) (*v1.Infrastructure, error) + UpdateStatus(ctx context.Context, infrastructure *v1.Infrastructure, opts metav1.UpdateOptions) (*v1.Infrastructure, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Infrastructure, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.InfrastructureList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Infrastructure, err error) + InfrastructureExpansion +} + +// infrastructures implements InfrastructureInterface +type infrastructures struct { + client rest.Interface +} + +// newInfrastructures returns a Infrastructures +func newInfrastructures(c *ConfigV1Client) *infrastructures { + return &infrastructures{ + client: c.RESTClient(), + } +} + +// Get takes name of the infrastructure, and returns the corresponding infrastructure object, and an error if there is any. +func (c *infrastructures) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Infrastructure, err error) { + result = &v1.Infrastructure{} + err = c.client.Get(). + Resource("infrastructures"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Infrastructures that match those selectors. +func (c *infrastructures) List(ctx context.Context, opts metav1.ListOptions) (result *v1.InfrastructureList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.InfrastructureList{} + err = c.client.Get(). + Resource("infrastructures"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested infrastructures. +func (c *infrastructures) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("infrastructures"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a infrastructure and creates it. Returns the server's representation of the infrastructure, and an error, if there is any. +func (c *infrastructures) Create(ctx context.Context, infrastructure *v1.Infrastructure, opts metav1.CreateOptions) (result *v1.Infrastructure, err error) { + result = &v1.Infrastructure{} + err = c.client.Post(). + Resource("infrastructures"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(infrastructure). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a infrastructure and updates it. Returns the server's representation of the infrastructure, and an error, if there is any. +func (c *infrastructures) Update(ctx context.Context, infrastructure *v1.Infrastructure, opts metav1.UpdateOptions) (result *v1.Infrastructure, err error) { + result = &v1.Infrastructure{} + err = c.client.Put(). + Resource("infrastructures"). + Name(infrastructure.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(infrastructure). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *infrastructures) UpdateStatus(ctx context.Context, infrastructure *v1.Infrastructure, opts metav1.UpdateOptions) (result *v1.Infrastructure, err error) { + result = &v1.Infrastructure{} + err = c.client.Put(). + Resource("infrastructures"). + Name(infrastructure.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(infrastructure). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the infrastructure and deletes it. Returns an error if one occurs. +func (c *infrastructures) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("infrastructures"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *infrastructures) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("infrastructures"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched infrastructure. +func (c *infrastructures) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Infrastructure, err error) { + result = &v1.Infrastructure{} + err = c.client.Patch(pt). + Resource("infrastructures"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/ingress.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/ingress.go new file mode 100644 index 0000000000000..ec4bf5d7177dc --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/ingress.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// IngressesGetter has a method to return a IngressInterface. +// A group's client should implement this interface. +type IngressesGetter interface { + Ingresses() IngressInterface +} + +// IngressInterface has methods to work with Ingress resources. +type IngressInterface interface { + Create(ctx context.Context, ingress *v1.Ingress, opts metav1.CreateOptions) (*v1.Ingress, error) + Update(ctx context.Context, ingress *v1.Ingress, opts metav1.UpdateOptions) (*v1.Ingress, error) + UpdateStatus(ctx context.Context, ingress *v1.Ingress, opts metav1.UpdateOptions) (*v1.Ingress, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Ingress, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.IngressList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Ingress, err error) + IngressExpansion +} + +// ingresses implements IngressInterface +type ingresses struct { + client rest.Interface +} + +// newIngresses returns a Ingresses +func newIngresses(c *ConfigV1Client) *ingresses { + return &ingresses{ + client: c.RESTClient(), + } +} + +// Get takes name of the ingress, and returns the corresponding ingress object, and an error if there is any. +func (c *ingresses) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Ingress, err error) { + result = &v1.Ingress{} + err = c.client.Get(). + Resource("ingresses"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Ingresses that match those selectors. +func (c *ingresses) List(ctx context.Context, opts metav1.ListOptions) (result *v1.IngressList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.IngressList{} + err = c.client.Get(). + Resource("ingresses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested ingresses. +func (c *ingresses) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("ingresses"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a ingress and creates it. Returns the server's representation of the ingress, and an error, if there is any. +func (c *ingresses) Create(ctx context.Context, ingress *v1.Ingress, opts metav1.CreateOptions) (result *v1.Ingress, err error) { + result = &v1.Ingress{} + err = c.client.Post(). + Resource("ingresses"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(ingress). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a ingress and updates it. Returns the server's representation of the ingress, and an error, if there is any. +func (c *ingresses) Update(ctx context.Context, ingress *v1.Ingress, opts metav1.UpdateOptions) (result *v1.Ingress, err error) { + result = &v1.Ingress{} + err = c.client.Put(). + Resource("ingresses"). + Name(ingress.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(ingress). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *ingresses) UpdateStatus(ctx context.Context, ingress *v1.Ingress, opts metav1.UpdateOptions) (result *v1.Ingress, err error) { + result = &v1.Ingress{} + err = c.client.Put(). + Resource("ingresses"). + Name(ingress.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(ingress). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the ingress and deletes it. Returns an error if one occurs. +func (c *ingresses) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("ingresses"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *ingresses) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("ingresses"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched ingress. +func (c *ingresses) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Ingress, err error) { + result = &v1.Ingress{} + err = c.client.Patch(pt). + Resource("ingresses"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/network.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/network.go new file mode 100644 index 0000000000000..f9016202ae89a --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/network.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// NetworksGetter has a method to return a NetworkInterface. +// A group's client should implement this interface. +type NetworksGetter interface { + Networks() NetworkInterface +} + +// NetworkInterface has methods to work with Network resources. +type NetworkInterface interface { + Create(ctx context.Context, network *v1.Network, opts metav1.CreateOptions) (*v1.Network, error) + Update(ctx context.Context, network *v1.Network, opts metav1.UpdateOptions) (*v1.Network, error) + UpdateStatus(ctx context.Context, network *v1.Network, opts metav1.UpdateOptions) (*v1.Network, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Network, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.NetworkList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Network, err error) + NetworkExpansion +} + +// networks implements NetworkInterface +type networks struct { + client rest.Interface +} + +// newNetworks returns a Networks +func newNetworks(c *ConfigV1Client) *networks { + return &networks{ + client: c.RESTClient(), + } +} + +// Get takes name of the network, and returns the corresponding network object, and an error if there is any. +func (c *networks) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Network, err error) { + result = &v1.Network{} + err = c.client.Get(). + Resource("networks"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Networks that match those selectors. +func (c *networks) List(ctx context.Context, opts metav1.ListOptions) (result *v1.NetworkList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.NetworkList{} + err = c.client.Get(). + Resource("networks"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested networks. +func (c *networks) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("networks"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a network and creates it. Returns the server's representation of the network, and an error, if there is any. +func (c *networks) Create(ctx context.Context, network *v1.Network, opts metav1.CreateOptions) (result *v1.Network, err error) { + result = &v1.Network{} + err = c.client.Post(). + Resource("networks"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(network). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a network and updates it. Returns the server's representation of the network, and an error, if there is any. +func (c *networks) Update(ctx context.Context, network *v1.Network, opts metav1.UpdateOptions) (result *v1.Network, err error) { + result = &v1.Network{} + err = c.client.Put(). + Resource("networks"). + Name(network.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(network). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *networks) UpdateStatus(ctx context.Context, network *v1.Network, opts metav1.UpdateOptions) (result *v1.Network, err error) { + result = &v1.Network{} + err = c.client.Put(). + Resource("networks"). + Name(network.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(network). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the network and deletes it. Returns an error if one occurs. +func (c *networks) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("networks"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *networks) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("networks"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched network. +func (c *networks) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Network, err error) { + result = &v1.Network{} + err = c.client.Patch(pt). + Resource("networks"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/oauth.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/oauth.go new file mode 100644 index 0000000000000..93fe9a521d077 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/oauth.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// OAuthsGetter has a method to return a OAuthInterface. +// A group's client should implement this interface. +type OAuthsGetter interface { + OAuths() OAuthInterface +} + +// OAuthInterface has methods to work with OAuth resources. +type OAuthInterface interface { + Create(ctx context.Context, oAuth *v1.OAuth, opts metav1.CreateOptions) (*v1.OAuth, error) + Update(ctx context.Context, oAuth *v1.OAuth, opts metav1.UpdateOptions) (*v1.OAuth, error) + UpdateStatus(ctx context.Context, oAuth *v1.OAuth, opts metav1.UpdateOptions) (*v1.OAuth, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.OAuth, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.OAuthList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.OAuth, err error) + OAuthExpansion +} + +// oAuths implements OAuthInterface +type oAuths struct { + client rest.Interface +} + +// newOAuths returns a OAuths +func newOAuths(c *ConfigV1Client) *oAuths { + return &oAuths{ + client: c.RESTClient(), + } +} + +// Get takes name of the oAuth, and returns the corresponding oAuth object, and an error if there is any. +func (c *oAuths) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.OAuth, err error) { + result = &v1.OAuth{} + err = c.client.Get(). + Resource("oauths"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of OAuths that match those selectors. +func (c *oAuths) List(ctx context.Context, opts metav1.ListOptions) (result *v1.OAuthList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.OAuthList{} + err = c.client.Get(). + Resource("oauths"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested oAuths. +func (c *oAuths) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("oauths"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a oAuth and creates it. Returns the server's representation of the oAuth, and an error, if there is any. +func (c *oAuths) Create(ctx context.Context, oAuth *v1.OAuth, opts metav1.CreateOptions) (result *v1.OAuth, err error) { + result = &v1.OAuth{} + err = c.client.Post(). + Resource("oauths"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(oAuth). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a oAuth and updates it. Returns the server's representation of the oAuth, and an error, if there is any. +func (c *oAuths) Update(ctx context.Context, oAuth *v1.OAuth, opts metav1.UpdateOptions) (result *v1.OAuth, err error) { + result = &v1.OAuth{} + err = c.client.Put(). + Resource("oauths"). + Name(oAuth.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(oAuth). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *oAuths) UpdateStatus(ctx context.Context, oAuth *v1.OAuth, opts metav1.UpdateOptions) (result *v1.OAuth, err error) { + result = &v1.OAuth{} + err = c.client.Put(). + Resource("oauths"). + Name(oAuth.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(oAuth). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the oAuth and deletes it. Returns an error if one occurs. +func (c *oAuths) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("oauths"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *oAuths) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("oauths"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched oAuth. +func (c *oAuths) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.OAuth, err error) { + result = &v1.OAuth{} + err = c.client.Patch(pt). + Resource("oauths"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/operatorhub.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/operatorhub.go new file mode 100644 index 0000000000000..06a2b18442aae --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/operatorhub.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// OperatorHubsGetter has a method to return a OperatorHubInterface. +// A group's client should implement this interface. +type OperatorHubsGetter interface { + OperatorHubs() OperatorHubInterface +} + +// OperatorHubInterface has methods to work with OperatorHub resources. +type OperatorHubInterface interface { + Create(ctx context.Context, operatorHub *v1.OperatorHub, opts metav1.CreateOptions) (*v1.OperatorHub, error) + Update(ctx context.Context, operatorHub *v1.OperatorHub, opts metav1.UpdateOptions) (*v1.OperatorHub, error) + UpdateStatus(ctx context.Context, operatorHub *v1.OperatorHub, opts metav1.UpdateOptions) (*v1.OperatorHub, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.OperatorHub, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.OperatorHubList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.OperatorHub, err error) + OperatorHubExpansion +} + +// operatorHubs implements OperatorHubInterface +type operatorHubs struct { + client rest.Interface +} + +// newOperatorHubs returns a OperatorHubs +func newOperatorHubs(c *ConfigV1Client) *operatorHubs { + return &operatorHubs{ + client: c.RESTClient(), + } +} + +// Get takes name of the operatorHub, and returns the corresponding operatorHub object, and an error if there is any. +func (c *operatorHubs) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.OperatorHub, err error) { + result = &v1.OperatorHub{} + err = c.client.Get(). + Resource("operatorhubs"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of OperatorHubs that match those selectors. +func (c *operatorHubs) List(ctx context.Context, opts metav1.ListOptions) (result *v1.OperatorHubList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.OperatorHubList{} + err = c.client.Get(). + Resource("operatorhubs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested operatorHubs. +func (c *operatorHubs) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("operatorhubs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a operatorHub and creates it. Returns the server's representation of the operatorHub, and an error, if there is any. +func (c *operatorHubs) Create(ctx context.Context, operatorHub *v1.OperatorHub, opts metav1.CreateOptions) (result *v1.OperatorHub, err error) { + result = &v1.OperatorHub{} + err = c.client.Post(). + Resource("operatorhubs"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(operatorHub). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a operatorHub and updates it. Returns the server's representation of the operatorHub, and an error, if there is any. +func (c *operatorHubs) Update(ctx context.Context, operatorHub *v1.OperatorHub, opts metav1.UpdateOptions) (result *v1.OperatorHub, err error) { + result = &v1.OperatorHub{} + err = c.client.Put(). + Resource("operatorhubs"). + Name(operatorHub.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(operatorHub). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *operatorHubs) UpdateStatus(ctx context.Context, operatorHub *v1.OperatorHub, opts metav1.UpdateOptions) (result *v1.OperatorHub, err error) { + result = &v1.OperatorHub{} + err = c.client.Put(). + Resource("operatorhubs"). + Name(operatorHub.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(operatorHub). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the operatorHub and deletes it. Returns an error if one occurs. +func (c *operatorHubs) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("operatorhubs"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *operatorHubs) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("operatorhubs"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched operatorHub. +func (c *operatorHubs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.OperatorHub, err error) { + result = &v1.OperatorHub{} + err = c.client.Patch(pt). + Resource("operatorhubs"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/project.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/project.go new file mode 100644 index 0000000000000..d2f91a2ebae2c --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/project.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// ProjectsGetter has a method to return a ProjectInterface. +// A group's client should implement this interface. +type ProjectsGetter interface { + Projects() ProjectInterface +} + +// ProjectInterface has methods to work with Project resources. +type ProjectInterface interface { + Create(ctx context.Context, project *v1.Project, opts metav1.CreateOptions) (*v1.Project, error) + Update(ctx context.Context, project *v1.Project, opts metav1.UpdateOptions) (*v1.Project, error) + UpdateStatus(ctx context.Context, project *v1.Project, opts metav1.UpdateOptions) (*v1.Project, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Project, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ProjectList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Project, err error) + ProjectExpansion +} + +// projects implements ProjectInterface +type projects struct { + client rest.Interface +} + +// newProjects returns a Projects +func newProjects(c *ConfigV1Client) *projects { + return &projects{ + client: c.RESTClient(), + } +} + +// Get takes name of the project, and returns the corresponding project object, and an error if there is any. +func (c *projects) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Project, err error) { + result = &v1.Project{} + err = c.client.Get(). + Resource("projects"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Projects that match those selectors. +func (c *projects) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ProjectList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ProjectList{} + err = c.client.Get(). + Resource("projects"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested projects. +func (c *projects) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("projects"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a project and creates it. Returns the server's representation of the project, and an error, if there is any. +func (c *projects) Create(ctx context.Context, project *v1.Project, opts metav1.CreateOptions) (result *v1.Project, err error) { + result = &v1.Project{} + err = c.client.Post(). + Resource("projects"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(project). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a project and updates it. Returns the server's representation of the project, and an error, if there is any. +func (c *projects) Update(ctx context.Context, project *v1.Project, opts metav1.UpdateOptions) (result *v1.Project, err error) { + result = &v1.Project{} + err = c.client.Put(). + Resource("projects"). + Name(project.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(project). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *projects) UpdateStatus(ctx context.Context, project *v1.Project, opts metav1.UpdateOptions) (result *v1.Project, err error) { + result = &v1.Project{} + err = c.client.Put(). + Resource("projects"). + Name(project.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(project). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the project and deletes it. Returns an error if one occurs. +func (c *projects) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("projects"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *projects) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("projects"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched project. +func (c *projects) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Project, err error) { + result = &v1.Project{} + err = c.client.Patch(pt). + Resource("projects"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/proxy.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/proxy.go new file mode 100644 index 0000000000000..74c635c23de79 --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/proxy.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// ProxiesGetter has a method to return a ProxyInterface. +// A group's client should implement this interface. +type ProxiesGetter interface { + Proxies() ProxyInterface +} + +// ProxyInterface has methods to work with Proxy resources. +type ProxyInterface interface { + Create(ctx context.Context, proxy *v1.Proxy, opts metav1.CreateOptions) (*v1.Proxy, error) + Update(ctx context.Context, proxy *v1.Proxy, opts metav1.UpdateOptions) (*v1.Proxy, error) + UpdateStatus(ctx context.Context, proxy *v1.Proxy, opts metav1.UpdateOptions) (*v1.Proxy, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Proxy, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ProxyList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Proxy, err error) + ProxyExpansion +} + +// proxies implements ProxyInterface +type proxies struct { + client rest.Interface +} + +// newProxies returns a Proxies +func newProxies(c *ConfigV1Client) *proxies { + return &proxies{ + client: c.RESTClient(), + } +} + +// Get takes name of the proxy, and returns the corresponding proxy object, and an error if there is any. +func (c *proxies) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Proxy, err error) { + result = &v1.Proxy{} + err = c.client.Get(). + Resource("proxies"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Proxies that match those selectors. +func (c *proxies) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ProxyList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ProxyList{} + err = c.client.Get(). + Resource("proxies"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested proxies. +func (c *proxies) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("proxies"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a proxy and creates it. Returns the server's representation of the proxy, and an error, if there is any. +func (c *proxies) Create(ctx context.Context, proxy *v1.Proxy, opts metav1.CreateOptions) (result *v1.Proxy, err error) { + result = &v1.Proxy{} + err = c.client.Post(). + Resource("proxies"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(proxy). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a proxy and updates it. Returns the server's representation of the proxy, and an error, if there is any. +func (c *proxies) Update(ctx context.Context, proxy *v1.Proxy, opts metav1.UpdateOptions) (result *v1.Proxy, err error) { + result = &v1.Proxy{} + err = c.client.Put(). + Resource("proxies"). + Name(proxy.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(proxy). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *proxies) UpdateStatus(ctx context.Context, proxy *v1.Proxy, opts metav1.UpdateOptions) (result *v1.Proxy, err error) { + result = &v1.Proxy{} + err = c.client.Put(). + Resource("proxies"). + Name(proxy.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(proxy). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the proxy and deletes it. Returns an error if one occurs. +func (c *proxies) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("proxies"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *proxies) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("proxies"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched proxy. +func (c *proxies) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Proxy, err error) { + result = &v1.Proxy{} + err = c.client.Patch(pt). + Resource("proxies"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/scheduler.go b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/scheduler.go new file mode 100644 index 0000000000000..8f9f9219cf1dc --- /dev/null +++ b/vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/scheduler.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/config/v1" + scheme "github.com/openshift/client-go/config/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// SchedulersGetter has a method to return a SchedulerInterface. +// A group's client should implement this interface. +type SchedulersGetter interface { + Schedulers() SchedulerInterface +} + +// SchedulerInterface has methods to work with Scheduler resources. +type SchedulerInterface interface { + Create(ctx context.Context, scheduler *v1.Scheduler, opts metav1.CreateOptions) (*v1.Scheduler, error) + Update(ctx context.Context, scheduler *v1.Scheduler, opts metav1.UpdateOptions) (*v1.Scheduler, error) + UpdateStatus(ctx context.Context, scheduler *v1.Scheduler, opts metav1.UpdateOptions) (*v1.Scheduler, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Scheduler, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.SchedulerList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Scheduler, err error) + SchedulerExpansion +} + +// schedulers implements SchedulerInterface +type schedulers struct { + client rest.Interface +} + +// newSchedulers returns a Schedulers +func newSchedulers(c *ConfigV1Client) *schedulers { + return &schedulers{ + client: c.RESTClient(), + } +} + +// Get takes name of the scheduler, and returns the corresponding scheduler object, and an error if there is any. +func (c *schedulers) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Scheduler, err error) { + result = &v1.Scheduler{} + err = c.client.Get(). + Resource("schedulers"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Schedulers that match those selectors. +func (c *schedulers) List(ctx context.Context, opts metav1.ListOptions) (result *v1.SchedulerList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.SchedulerList{} + err = c.client.Get(). + Resource("schedulers"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested schedulers. +func (c *schedulers) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("schedulers"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a scheduler and creates it. Returns the server's representation of the scheduler, and an error, if there is any. +func (c *schedulers) Create(ctx context.Context, scheduler *v1.Scheduler, opts metav1.CreateOptions) (result *v1.Scheduler, err error) { + result = &v1.Scheduler{} + err = c.client.Post(). + Resource("schedulers"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(scheduler). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a scheduler and updates it. Returns the server's representation of the scheduler, and an error, if there is any. +func (c *schedulers) Update(ctx context.Context, scheduler *v1.Scheduler, opts metav1.UpdateOptions) (result *v1.Scheduler, err error) { + result = &v1.Scheduler{} + err = c.client.Put(). + Resource("schedulers"). + Name(scheduler.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(scheduler). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *schedulers) UpdateStatus(ctx context.Context, scheduler *v1.Scheduler, opts metav1.UpdateOptions) (result *v1.Scheduler, err error) { + result = &v1.Scheduler{} + err = c.client.Put(). + Resource("schedulers"). + Name(scheduler.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(scheduler). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the scheduler and deletes it. Returns an error if one occurs. +func (c *schedulers) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("schedulers"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *schedulers) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("schedulers"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched scheduler. +func (c *schedulers) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Scheduler, err error) { + result = &v1.Scheduler{} + err = c.client.Patch(pt). + Resource("schedulers"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/clientset.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/clientset.go new file mode 100644 index 0000000000000..94520d6d4ec7d --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/clientset.go @@ -0,0 +1,81 @@ +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + + imagev1 "github.com/openshift/client-go/image/clientset/versioned/typed/image/v1" + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + ImageV1() imagev1.ImageV1Interface +} + +// Clientset contains the clients for groups. Each group has exactly one +// version included in a Clientset. +type Clientset struct { + *discovery.DiscoveryClient + imageV1 *imagev1.ImageV1Client +} + +// ImageV1 retrieves the ImageV1Client +func (c *Clientset) ImageV1() imagev1.ImageV1Interface { + return c.imageV1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + var cs Clientset + var err error + cs.imageV1, err = imagev1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + var cs Clientset + cs.imageV1 = imagev1.NewForConfigOrDie(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) + return &cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.imageV1 = imagev1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/doc.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/doc.go new file mode 100644 index 0000000000000..0e0c2a8900e2c --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated clientset. +package versioned diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/scheme/doc.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/scheme/doc.go new file mode 100644 index 0000000000000..14db57a58f8d2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/scheme/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package contains the scheme of the automatically generated clientset. +package scheme diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/scheme/register.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/scheme/register.go new file mode 100644 index 0000000000000..32fa9cb7ab214 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/scheme/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package scheme + +import ( + imagev1 "github.com/openshift/api/image/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + imagev1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/doc.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/doc.go new file mode 100644 index 0000000000000..225e6b2be34f2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/generated_expansion.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/generated_expansion.go new file mode 100644 index 0000000000000..c495ba76e69cd --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/generated_expansion.go @@ -0,0 +1,19 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type ImageExpansion interface{} + +type ImageSignatureExpansion interface{} + +type ImageStreamExpansion interface{} + +type ImageStreamImageExpansion interface{} + +type ImageStreamImportExpansion interface{} + +type ImageStreamMappingExpansion interface{} + +type ImageStreamTagExpansion interface{} + +type ImageTagExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/image.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/image.go new file mode 100644 index 0000000000000..86d04f5310f75 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/image.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/image/v1" + scheme "github.com/openshift/client-go/image/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// ImagesGetter has a method to return a ImageInterface. +// A group's client should implement this interface. +type ImagesGetter interface { + Images() ImageInterface +} + +// ImageInterface has methods to work with Image resources. +type ImageInterface interface { + Create(ctx context.Context, image *v1.Image, opts metav1.CreateOptions) (*v1.Image, error) + Update(ctx context.Context, image *v1.Image, opts metav1.UpdateOptions) (*v1.Image, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Image, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ImageList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Image, err error) + ImageExpansion +} + +// images implements ImageInterface +type images struct { + client rest.Interface +} + +// newImages returns a Images +func newImages(c *ImageV1Client) *images { + return &images{ + client: c.RESTClient(), + } +} + +// Get takes name of the image, and returns the corresponding image object, and an error if there is any. +func (c *images) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Image, err error) { + result = &v1.Image{} + err = c.client.Get(). + Resource("images"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Images that match those selectors. +func (c *images) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ImageList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ImageList{} + err = c.client.Get(). + Resource("images"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested images. +func (c *images) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("images"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a image and creates it. Returns the server's representation of the image, and an error, if there is any. +func (c *images) Create(ctx context.Context, image *v1.Image, opts metav1.CreateOptions) (result *v1.Image, err error) { + result = &v1.Image{} + err = c.client.Post(). + Resource("images"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(image). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a image and updates it. Returns the server's representation of the image, and an error, if there is any. +func (c *images) Update(ctx context.Context, image *v1.Image, opts metav1.UpdateOptions) (result *v1.Image, err error) { + result = &v1.Image{} + err = c.client.Put(). + Resource("images"). + Name(image.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(image). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the image and deletes it. Returns an error if one occurs. +func (c *images) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("images"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *images) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("images"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched image. +func (c *images) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Image, err error) { + result = &v1.Image{} + err = c.client.Patch(pt). + Resource("images"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/image_client.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/image_client.go new file mode 100644 index 0000000000000..1b85d2d6fafe9 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/image_client.go @@ -0,0 +1,108 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/image/v1" + "github.com/openshift/client-go/image/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type ImageV1Interface interface { + RESTClient() rest.Interface + ImagesGetter + ImageSignaturesGetter + ImageStreamsGetter + ImageStreamImagesGetter + ImageStreamImportsGetter + ImageStreamMappingsGetter + ImageStreamTagsGetter + ImageTagsGetter +} + +// ImageV1Client is used to interact with features provided by the image.openshift.io group. +type ImageV1Client struct { + restClient rest.Interface +} + +func (c *ImageV1Client) Images() ImageInterface { + return newImages(c) +} + +func (c *ImageV1Client) ImageSignatures() ImageSignatureInterface { + return newImageSignatures(c) +} + +func (c *ImageV1Client) ImageStreams(namespace string) ImageStreamInterface { + return newImageStreams(c, namespace) +} + +func (c *ImageV1Client) ImageStreamImages(namespace string) ImageStreamImageInterface { + return newImageStreamImages(c, namespace) +} + +func (c *ImageV1Client) ImageStreamImports(namespace string) ImageStreamImportInterface { + return newImageStreamImports(c, namespace) +} + +func (c *ImageV1Client) ImageStreamMappings(namespace string) ImageStreamMappingInterface { + return newImageStreamMappings(c, namespace) +} + +func (c *ImageV1Client) ImageStreamTags(namespace string) ImageStreamTagInterface { + return newImageStreamTags(c, namespace) +} + +func (c *ImageV1Client) ImageTags(namespace string) ImageTagInterface { + return newImageTags(c, namespace) +} + +// NewForConfig creates a new ImageV1Client for the given config. +func NewForConfig(c *rest.Config) (*ImageV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &ImageV1Client{client}, nil +} + +// NewForConfigOrDie creates a new ImageV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *ImageV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new ImageV1Client for the given RESTClient. +func New(c rest.Interface) *ImageV1Client { + return &ImageV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *ImageV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagesignature.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagesignature.go new file mode 100644 index 0000000000000..195b8f371754d --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagesignature.go @@ -0,0 +1,59 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + + v1 "github.com/openshift/api/image/v1" + scheme "github.com/openshift/client-go/image/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// ImageSignaturesGetter has a method to return a ImageSignatureInterface. +// A group's client should implement this interface. +type ImageSignaturesGetter interface { + ImageSignatures() ImageSignatureInterface +} + +// ImageSignatureInterface has methods to work with ImageSignature resources. +type ImageSignatureInterface interface { + Create(ctx context.Context, imageSignature *v1.ImageSignature, opts metav1.CreateOptions) (*v1.ImageSignature, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + ImageSignatureExpansion +} + +// imageSignatures implements ImageSignatureInterface +type imageSignatures struct { + client rest.Interface +} + +// newImageSignatures returns a ImageSignatures +func newImageSignatures(c *ImageV1Client) *imageSignatures { + return &imageSignatures{ + client: c.RESTClient(), + } +} + +// Create takes the representation of a imageSignature and creates it. Returns the server's representation of the imageSignature, and an error, if there is any. +func (c *imageSignatures) Create(ctx context.Context, imageSignature *v1.ImageSignature, opts metav1.CreateOptions) (result *v1.ImageSignature, err error) { + result = &v1.ImageSignature{} + err = c.client.Post(). + Resource("imagesignatures"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(imageSignature). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the imageSignature and deletes it. Returns an error if one occurs. +func (c *imageSignatures) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("imagesignatures"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestream.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestream.go new file mode 100644 index 0000000000000..dcfb8942e4c00 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestream.go @@ -0,0 +1,211 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/image/v1" + scheme "github.com/openshift/client-go/image/clientset/versioned/scheme" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// ImageStreamsGetter has a method to return a ImageStreamInterface. +// A group's client should implement this interface. +type ImageStreamsGetter interface { + ImageStreams(namespace string) ImageStreamInterface +} + +// ImageStreamInterface has methods to work with ImageStream resources. +type ImageStreamInterface interface { + Create(ctx context.Context, imageStream *v1.ImageStream, opts metav1.CreateOptions) (*v1.ImageStream, error) + Update(ctx context.Context, imageStream *v1.ImageStream, opts metav1.UpdateOptions) (*v1.ImageStream, error) + UpdateStatus(ctx context.Context, imageStream *v1.ImageStream, opts metav1.UpdateOptions) (*v1.ImageStream, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ImageStream, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ImageStreamList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ImageStream, err error) + Secrets(ctx context.Context, imageStreamName string, options metav1.GetOptions) (*corev1.SecretList, error) + Layers(ctx context.Context, imageStreamName string, options metav1.GetOptions) (*v1.ImageStreamLayers, error) + + ImageStreamExpansion +} + +// imageStreams implements ImageStreamInterface +type imageStreams struct { + client rest.Interface + ns string +} + +// newImageStreams returns a ImageStreams +func newImageStreams(c *ImageV1Client, namespace string) *imageStreams { + return &imageStreams{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the imageStream, and returns the corresponding imageStream object, and an error if there is any. +func (c *imageStreams) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ImageStream, err error) { + result = &v1.ImageStream{} + err = c.client.Get(). + Namespace(c.ns). + Resource("imagestreams"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ImageStreams that match those selectors. +func (c *imageStreams) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ImageStreamList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ImageStreamList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("imagestreams"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested imageStreams. +func (c *imageStreams) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("imagestreams"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a imageStream and creates it. Returns the server's representation of the imageStream, and an error, if there is any. +func (c *imageStreams) Create(ctx context.Context, imageStream *v1.ImageStream, opts metav1.CreateOptions) (result *v1.ImageStream, err error) { + result = &v1.ImageStream{} + err = c.client.Post(). + Namespace(c.ns). + Resource("imagestreams"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(imageStream). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a imageStream and updates it. Returns the server's representation of the imageStream, and an error, if there is any. +func (c *imageStreams) Update(ctx context.Context, imageStream *v1.ImageStream, opts metav1.UpdateOptions) (result *v1.ImageStream, err error) { + result = &v1.ImageStream{} + err = c.client.Put(). + Namespace(c.ns). + Resource("imagestreams"). + Name(imageStream.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(imageStream). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *imageStreams) UpdateStatus(ctx context.Context, imageStream *v1.ImageStream, opts metav1.UpdateOptions) (result *v1.ImageStream, err error) { + result = &v1.ImageStream{} + err = c.client.Put(). + Namespace(c.ns). + Resource("imagestreams"). + Name(imageStream.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(imageStream). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the imageStream and deletes it. Returns an error if one occurs. +func (c *imageStreams) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("imagestreams"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *imageStreams) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("imagestreams"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched imageStream. +func (c *imageStreams) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ImageStream, err error) { + result = &v1.ImageStream{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("imagestreams"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// Secrets takes name of the imageStream, and returns the corresponding corev1.SecretList object, and an error if there is any. +func (c *imageStreams) Secrets(ctx context.Context, imageStreamName string, options metav1.GetOptions) (result *corev1.SecretList, err error) { + result = &corev1.SecretList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("imagestreams"). + Name(imageStreamName). + SubResource("secrets"). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// Layers takes name of the imageStream, and returns the corresponding v1.ImageStreamLayers object, and an error if there is any. +func (c *imageStreams) Layers(ctx context.Context, imageStreamName string, options metav1.GetOptions) (result *v1.ImageStreamLayers, err error) { + result = &v1.ImageStreamLayers{} + err = c.client.Get(). + Namespace(c.ns). + Resource("imagestreams"). + Name(imageStreamName). + SubResource("layers"). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreamimage.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreamimage.go new file mode 100644 index 0000000000000..79f46753a7779 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreamimage.go @@ -0,0 +1,51 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + + imagev1 "github.com/openshift/api/image/v1" + scheme "github.com/openshift/client-go/image/clientset/versioned/scheme" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// ImageStreamImagesGetter has a method to return a ImageStreamImageInterface. +// A group's client should implement this interface. +type ImageStreamImagesGetter interface { + ImageStreamImages(namespace string) ImageStreamImageInterface +} + +// ImageStreamImageInterface has methods to work with ImageStreamImage resources. +type ImageStreamImageInterface interface { + Get(ctx context.Context, name string, opts v1.GetOptions) (*imagev1.ImageStreamImage, error) + ImageStreamImageExpansion +} + +// imageStreamImages implements ImageStreamImageInterface +type imageStreamImages struct { + client rest.Interface + ns string +} + +// newImageStreamImages returns a ImageStreamImages +func newImageStreamImages(c *ImageV1Client, namespace string) *imageStreamImages { + return &imageStreamImages{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the imageStreamImage, and returns the corresponding imageStreamImage object, and an error if there is any. +func (c *imageStreamImages) Get(ctx context.Context, name string, options v1.GetOptions) (result *imagev1.ImageStreamImage, err error) { + result = &imagev1.ImageStreamImage{} + err = c.client.Get(). + Namespace(c.ns). + Resource("imagestreamimages"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreamimport.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreamimport.go new file mode 100644 index 0000000000000..7c43c951de187 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreamimport.go @@ -0,0 +1,51 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + + v1 "github.com/openshift/api/image/v1" + scheme "github.com/openshift/client-go/image/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// ImageStreamImportsGetter has a method to return a ImageStreamImportInterface. +// A group's client should implement this interface. +type ImageStreamImportsGetter interface { + ImageStreamImports(namespace string) ImageStreamImportInterface +} + +// ImageStreamImportInterface has methods to work with ImageStreamImport resources. +type ImageStreamImportInterface interface { + Create(ctx context.Context, imageStreamImport *v1.ImageStreamImport, opts metav1.CreateOptions) (*v1.ImageStreamImport, error) + ImageStreamImportExpansion +} + +// imageStreamImports implements ImageStreamImportInterface +type imageStreamImports struct { + client rest.Interface + ns string +} + +// newImageStreamImports returns a ImageStreamImports +func newImageStreamImports(c *ImageV1Client, namespace string) *imageStreamImports { + return &imageStreamImports{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Create takes the representation of a imageStreamImport and creates it. Returns the server's representation of the imageStreamImport, and an error, if there is any. +func (c *imageStreamImports) Create(ctx context.Context, imageStreamImport *v1.ImageStreamImport, opts metav1.CreateOptions) (result *v1.ImageStreamImport, err error) { + result = &v1.ImageStreamImport{} + err = c.client.Post(). + Namespace(c.ns). + Resource("imagestreamimports"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(imageStreamImport). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreammapping.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreammapping.go new file mode 100644 index 0000000000000..5dc7df95740b9 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreammapping.go @@ -0,0 +1,52 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + + v1 "github.com/openshift/api/image/v1" + scheme "github.com/openshift/client-go/image/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// ImageStreamMappingsGetter has a method to return a ImageStreamMappingInterface. +// A group's client should implement this interface. +type ImageStreamMappingsGetter interface { + ImageStreamMappings(namespace string) ImageStreamMappingInterface +} + +// ImageStreamMappingInterface has methods to work with ImageStreamMapping resources. +type ImageStreamMappingInterface interface { + Create(ctx context.Context, imageStreamMapping *v1.ImageStreamMapping, opts metav1.CreateOptions) (*metav1.Status, error) + + ImageStreamMappingExpansion +} + +// imageStreamMappings implements ImageStreamMappingInterface +type imageStreamMappings struct { + client rest.Interface + ns string +} + +// newImageStreamMappings returns a ImageStreamMappings +func newImageStreamMappings(c *ImageV1Client, namespace string) *imageStreamMappings { + return &imageStreamMappings{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Create takes the representation of a imageStreamMapping and creates it. Returns the server's representation of the status, and an error, if there is any. +func (c *imageStreamMappings) Create(ctx context.Context, imageStreamMapping *v1.ImageStreamMapping, opts metav1.CreateOptions) (result *metav1.Status, err error) { + result = &metav1.Status{} + err = c.client.Post(). + Namespace(c.ns). + Resource("imagestreammappings"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(imageStreamMapping). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreamtag.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreamtag.go new file mode 100644 index 0000000000000..4ea36ccdc2111 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagestreamtag.go @@ -0,0 +1,111 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/image/v1" + scheme "github.com/openshift/client-go/image/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// ImageStreamTagsGetter has a method to return a ImageStreamTagInterface. +// A group's client should implement this interface. +type ImageStreamTagsGetter interface { + ImageStreamTags(namespace string) ImageStreamTagInterface +} + +// ImageStreamTagInterface has methods to work with ImageStreamTag resources. +type ImageStreamTagInterface interface { + Create(ctx context.Context, imageStreamTag *v1.ImageStreamTag, opts metav1.CreateOptions) (*v1.ImageStreamTag, error) + Update(ctx context.Context, imageStreamTag *v1.ImageStreamTag, opts metav1.UpdateOptions) (*v1.ImageStreamTag, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ImageStreamTag, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ImageStreamTagList, error) + ImageStreamTagExpansion +} + +// imageStreamTags implements ImageStreamTagInterface +type imageStreamTags struct { + client rest.Interface + ns string +} + +// newImageStreamTags returns a ImageStreamTags +func newImageStreamTags(c *ImageV1Client, namespace string) *imageStreamTags { + return &imageStreamTags{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the imageStreamTag, and returns the corresponding imageStreamTag object, and an error if there is any. +func (c *imageStreamTags) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ImageStreamTag, err error) { + result = &v1.ImageStreamTag{} + err = c.client.Get(). + Namespace(c.ns). + Resource("imagestreamtags"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ImageStreamTags that match those selectors. +func (c *imageStreamTags) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ImageStreamTagList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ImageStreamTagList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("imagestreamtags"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Create takes the representation of a imageStreamTag and creates it. Returns the server's representation of the imageStreamTag, and an error, if there is any. +func (c *imageStreamTags) Create(ctx context.Context, imageStreamTag *v1.ImageStreamTag, opts metav1.CreateOptions) (result *v1.ImageStreamTag, err error) { + result = &v1.ImageStreamTag{} + err = c.client.Post(). + Namespace(c.ns). + Resource("imagestreamtags"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(imageStreamTag). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a imageStreamTag and updates it. Returns the server's representation of the imageStreamTag, and an error, if there is any. +func (c *imageStreamTags) Update(ctx context.Context, imageStreamTag *v1.ImageStreamTag, opts metav1.UpdateOptions) (result *v1.ImageStreamTag, err error) { + result = &v1.ImageStreamTag{} + err = c.client.Put(). + Namespace(c.ns). + Resource("imagestreamtags"). + Name(imageStreamTag.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(imageStreamTag). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the imageStreamTag and deletes it. Returns an error if one occurs. +func (c *imageStreamTags) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("imagestreamtags"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} diff --git a/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagetag.go b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagetag.go new file mode 100644 index 0000000000000..a0d80e3ac8c00 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/imagetag.go @@ -0,0 +1,111 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/image/v1" + scheme "github.com/openshift/client-go/image/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// ImageTagsGetter has a method to return a ImageTagInterface. +// A group's client should implement this interface. +type ImageTagsGetter interface { + ImageTags(namespace string) ImageTagInterface +} + +// ImageTagInterface has methods to work with ImageTag resources. +type ImageTagInterface interface { + Create(ctx context.Context, imageTag *v1.ImageTag, opts metav1.CreateOptions) (*v1.ImageTag, error) + Update(ctx context.Context, imageTag *v1.ImageTag, opts metav1.UpdateOptions) (*v1.ImageTag, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ImageTag, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ImageTagList, error) + ImageTagExpansion +} + +// imageTags implements ImageTagInterface +type imageTags struct { + client rest.Interface + ns string +} + +// newImageTags returns a ImageTags +func newImageTags(c *ImageV1Client, namespace string) *imageTags { + return &imageTags{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the imageTag, and returns the corresponding imageTag object, and an error if there is any. +func (c *imageTags) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ImageTag, err error) { + result = &v1.ImageTag{} + err = c.client.Get(). + Namespace(c.ns). + Resource("imagetags"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ImageTags that match those selectors. +func (c *imageTags) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ImageTagList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ImageTagList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("imagetags"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Create takes the representation of a imageTag and creates it. Returns the server's representation of the imageTag, and an error, if there is any. +func (c *imageTags) Create(ctx context.Context, imageTag *v1.ImageTag, opts metav1.CreateOptions) (result *v1.ImageTag, err error) { + result = &v1.ImageTag{} + err = c.client.Post(). + Namespace(c.ns). + Resource("imagetags"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(imageTag). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a imageTag and updates it. Returns the server's representation of the imageTag, and an error, if there is any. +func (c *imageTags) Update(ctx context.Context, imageTag *v1.ImageTag, opts metav1.UpdateOptions) (result *v1.ImageTag, err error) { + result = &v1.ImageTag{} + err = c.client.Put(). + Namespace(c.ns). + Resource("imagetags"). + Name(imageTag.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(imageTag). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the imageTag and deletes it. Returns an error if one occurs. +func (c *imageTags) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("imagetags"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} diff --git a/vendor/github.com/openshift/client-go/image/informers/externalversions/factory.go b/vendor/github.com/openshift/client-go/image/informers/externalversions/factory.go new file mode 100644 index 0000000000000..067795180f33a --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/informers/externalversions/factory.go @@ -0,0 +1,164 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + reflect "reflect" + sync "sync" + time "time" + + versioned "github.com/openshift/client-go/image/clientset/versioned" + image "github.com/openshift/client-go/image/informers/externalversions/image" + internalinterfaces "github.com/openshift/client-go/image/informers/externalversions/internalinterfaces" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// SharedInformerOption defines the functional option type for SharedInformerFactory. +type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory + +type sharedInformerFactory struct { + client versioned.Interface + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc + lock sync.Mutex + defaultResync time.Duration + customResync map[reflect.Type]time.Duration + + informers map[reflect.Type]cache.SharedIndexInformer + // startedInformers is used for tracking which informers have been started. + // This allows Start() to be called multiple times safely. + startedInformers map[reflect.Type]bool +} + +// WithCustomResyncConfig sets a custom resync period for the specified informer types. +func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + for k, v := range resyncConfig { + factory.customResync[reflect.TypeOf(k)] = v + } + return factory + } +} + +// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory. +func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.tweakListOptions = tweakListOptions + return factory + } +} + +// WithNamespace limits the SharedInformerFactory to the specified namespace. +func WithNamespace(namespace string) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.namespace = namespace + return factory + } +} + +// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. +func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync) +} + +// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory. +// Listers obtained via this SharedInformerFactory will be subject to the same filters +// as specified here. +// Deprecated: Please use NewSharedInformerFactoryWithOptions instead +func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions)) +} + +// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options. +func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory { + factory := &sharedInformerFactory{ + client: client, + namespace: v1.NamespaceAll, + defaultResync: defaultResync, + informers: make(map[reflect.Type]cache.SharedIndexInformer), + startedInformers: make(map[reflect.Type]bool), + customResync: make(map[reflect.Type]time.Duration), + } + + // Apply all options + for _, opt := range options { + factory = opt(factory) + } + + return factory +} + +// Start initializes all requested informers. +func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) { + f.lock.Lock() + defer f.lock.Unlock() + + for informerType, informer := range f.informers { + if !f.startedInformers[informerType] { + go informer.Run(stopCh) + f.startedInformers[informerType] = true + } + } +} + +// WaitForCacheSync waits for all started informers' cache were synced. +func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool { + informers := func() map[reflect.Type]cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informers := map[reflect.Type]cache.SharedIndexInformer{} + for informerType, informer := range f.informers { + if f.startedInformers[informerType] { + informers[informerType] = informer + } + } + return informers + }() + + res := map[reflect.Type]bool{} + for informType, informer := range informers { + res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced) + } + return res +} + +// InternalInformerFor returns the SharedIndexInformer for obj using an internal +// client. +func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(obj) + informer, exists := f.informers[informerType] + if exists { + return informer + } + + resyncPeriod, exists := f.customResync[informerType] + if !exists { + resyncPeriod = f.defaultResync + } + + informer = newFunc(f.client, resyncPeriod) + f.informers[informerType] = informer + + return informer +} + +// SharedInformerFactory provides shared informers for resources in all known +// API group versions. +type SharedInformerFactory interface { + internalinterfaces.SharedInformerFactory + ForResource(resource schema.GroupVersionResource) (GenericInformer, error) + WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool + + Image() image.Interface +} + +func (f *sharedInformerFactory) Image() image.Interface { + return image.New(f, f.namespace, f.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/image/informers/externalversions/generic.go b/vendor/github.com/openshift/client-go/image/informers/externalversions/generic.go new file mode 100644 index 0000000000000..55f59dedef45a --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/informers/externalversions/generic.go @@ -0,0 +1,48 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + "fmt" + + v1 "github.com/openshift/api/image/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// GenericInformer is type of SharedIndexInformer which will locate and delegate to other +// sharedInformers based on type +type GenericInformer interface { + Informer() cache.SharedIndexInformer + Lister() cache.GenericLister +} + +type genericInformer struct { + informer cache.SharedIndexInformer + resource schema.GroupResource +} + +// Informer returns the SharedIndexInformer. +func (f *genericInformer) Informer() cache.SharedIndexInformer { + return f.informer +} + +// Lister returns the GenericLister. +func (f *genericInformer) Lister() cache.GenericLister { + return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource) +} + +// ForResource gives generic access to a shared informer of the matching type +// TODO extend this to unknown resources with a client pool +func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { + switch resource { + // Group=image.openshift.io, Version=v1 + case v1.SchemeGroupVersion.WithResource("images"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Image().V1().Images().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("imagestreams"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Image().V1().ImageStreams().Informer()}, nil + + } + + return nil, fmt.Errorf("no informer found for %v", resource) +} diff --git a/vendor/github.com/openshift/client-go/image/informers/externalversions/image/interface.go b/vendor/github.com/openshift/client-go/image/informers/externalversions/image/interface.go new file mode 100644 index 0000000000000..092550ed3dab4 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/informers/externalversions/image/interface.go @@ -0,0 +1,30 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package image + +import ( + v1 "github.com/openshift/client-go/image/informers/externalversions/image/v1" + internalinterfaces "github.com/openshift/client-go/image/informers/externalversions/internalinterfaces" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1 provides access to shared informers for resources in V1. + V1() v1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1 returns a new v1.Interface. +func (g *group) V1() v1.Interface { + return v1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/image/informers/externalversions/image/v1/image.go b/vendor/github.com/openshift/client-go/image/informers/externalversions/image/v1/image.go new file mode 100644 index 0000000000000..ee2d0a7067ed1 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/informers/externalversions/image/v1/image.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + imagev1 "github.com/openshift/api/image/v1" + versioned "github.com/openshift/client-go/image/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/image/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/image/listers/image/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// ImageInformer provides access to a shared informer and lister for +// Images. +type ImageInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.ImageLister +} + +type imageInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewImageInformer constructs a new informer for Image type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewImageInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredImageInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredImageInformer constructs a new informer for Image type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredImageInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.ImageV1().Images().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.ImageV1().Images().Watch(context.TODO(), options) + }, + }, + &imagev1.Image{}, + resyncPeriod, + indexers, + ) +} + +func (f *imageInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredImageInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *imageInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&imagev1.Image{}, f.defaultInformer) +} + +func (f *imageInformer) Lister() v1.ImageLister { + return v1.NewImageLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/image/informers/externalversions/image/v1/imagestream.go b/vendor/github.com/openshift/client-go/image/informers/externalversions/image/v1/imagestream.go new file mode 100644 index 0000000000000..4a94cc5c7df92 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/informers/externalversions/image/v1/imagestream.go @@ -0,0 +1,74 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + imagev1 "github.com/openshift/api/image/v1" + versioned "github.com/openshift/client-go/image/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/image/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/image/listers/image/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// ImageStreamInformer provides access to a shared informer and lister for +// ImageStreams. +type ImageStreamInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.ImageStreamLister +} + +type imageStreamInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewImageStreamInformer constructs a new informer for ImageStream type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewImageStreamInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredImageStreamInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredImageStreamInformer constructs a new informer for ImageStream type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredImageStreamInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.ImageV1().ImageStreams(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.ImageV1().ImageStreams(namespace).Watch(context.TODO(), options) + }, + }, + &imagev1.ImageStream{}, + resyncPeriod, + indexers, + ) +} + +func (f *imageStreamInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredImageStreamInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *imageStreamInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&imagev1.ImageStream{}, f.defaultInformer) +} + +func (f *imageStreamInformer) Lister() v1.ImageStreamLister { + return v1.NewImageStreamLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/image/informers/externalversions/image/v1/interface.go b/vendor/github.com/openshift/client-go/image/informers/externalversions/image/v1/interface.go new file mode 100644 index 0000000000000..fd35c4df1abb7 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/informers/externalversions/image/v1/interface.go @@ -0,0 +1,36 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + internalinterfaces "github.com/openshift/client-go/image/informers/externalversions/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // Images returns a ImageInformer. + Images() ImageInformer + // ImageStreams returns a ImageStreamInformer. + ImageStreams() ImageStreamInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// Images returns a ImageInformer. +func (v *version) Images() ImageInformer { + return &imageInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + +// ImageStreams returns a ImageStreamInformer. +func (v *version) ImageStreams() ImageStreamInformer { + return &imageStreamInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/github.com/openshift/client-go/image/informers/externalversions/internalinterfaces/factory_interfaces.go b/vendor/github.com/openshift/client-go/image/informers/externalversions/internalinterfaces/factory_interfaces.go new file mode 100644 index 0000000000000..c35dcbfa44bb9 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -0,0 +1,24 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package internalinterfaces + +import ( + time "time" + + versioned "github.com/openshift/client-go/image/clientset/versioned" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + cache "k8s.io/client-go/tools/cache" +) + +// NewInformerFunc takes versioned.Interface and time.Duration to return a SharedIndexInformer. +type NewInformerFunc func(versioned.Interface, time.Duration) cache.SharedIndexInformer + +// SharedInformerFactory a small interface to allow for adding an informer without an import cycle +type SharedInformerFactory interface { + Start(stopCh <-chan struct{}) + InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer +} + +// TweakListOptionsFunc is a function that transforms a v1.ListOptions. +type TweakListOptionsFunc func(*v1.ListOptions) diff --git a/vendor/github.com/openshift/client-go/image/listers/image/v1/expansion_generated.go b/vendor/github.com/openshift/client-go/image/listers/image/v1/expansion_generated.go new file mode 100644 index 0000000000000..308b6db702d9f --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/listers/image/v1/expansion_generated.go @@ -0,0 +1,31 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +// ImageListerExpansion allows custom methods to be added to +// ImageLister. +type ImageListerExpansion interface{} + +// ImageStreamListerExpansion allows custom methods to be added to +// ImageStreamLister. +type ImageStreamListerExpansion interface{} + +// ImageStreamNamespaceListerExpansion allows custom methods to be added to +// ImageStreamNamespaceLister. +type ImageStreamNamespaceListerExpansion interface{} + +// ImageStreamTagListerExpansion allows custom methods to be added to +// ImageStreamTagLister. +type ImageStreamTagListerExpansion interface{} + +// ImageStreamTagNamespaceListerExpansion allows custom methods to be added to +// ImageStreamTagNamespaceLister. +type ImageStreamTagNamespaceListerExpansion interface{} + +// ImageTagListerExpansion allows custom methods to be added to +// ImageTagLister. +type ImageTagListerExpansion interface{} + +// ImageTagNamespaceListerExpansion allows custom methods to be added to +// ImageTagNamespaceLister. +type ImageTagNamespaceListerExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/image/listers/image/v1/image.go b/vendor/github.com/openshift/client-go/image/listers/image/v1/image.go new file mode 100644 index 0000000000000..bb66460a77268 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/listers/image/v1/image.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/image/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// ImageLister helps list Images. +// All objects returned here must be treated as read-only. +type ImageLister interface { + // List lists all Images in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.Image, err error) + // Get retrieves the Image from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.Image, error) + ImageListerExpansion +} + +// imageLister implements the ImageLister interface. +type imageLister struct { + indexer cache.Indexer +} + +// NewImageLister returns a new ImageLister. +func NewImageLister(indexer cache.Indexer) ImageLister { + return &imageLister{indexer: indexer} +} + +// List lists all Images in the indexer. +func (s *imageLister) List(selector labels.Selector) (ret []*v1.Image, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.Image)) + }) + return ret, err +} + +// Get retrieves the Image from the index for a given name. +func (s *imageLister) Get(name string) (*v1.Image, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("image"), name) + } + return obj.(*v1.Image), nil +} diff --git a/vendor/github.com/openshift/client-go/image/listers/image/v1/imagestream.go b/vendor/github.com/openshift/client-go/image/listers/image/v1/imagestream.go new file mode 100644 index 0000000000000..02ed4da3654a9 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/listers/image/v1/imagestream.go @@ -0,0 +1,83 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/image/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// ImageStreamLister helps list ImageStreams. +// All objects returned here must be treated as read-only. +type ImageStreamLister interface { + // List lists all ImageStreams in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.ImageStream, err error) + // ImageStreams returns an object that can list and get ImageStreams. + ImageStreams(namespace string) ImageStreamNamespaceLister + ImageStreamListerExpansion +} + +// imageStreamLister implements the ImageStreamLister interface. +type imageStreamLister struct { + indexer cache.Indexer +} + +// NewImageStreamLister returns a new ImageStreamLister. +func NewImageStreamLister(indexer cache.Indexer) ImageStreamLister { + return &imageStreamLister{indexer: indexer} +} + +// List lists all ImageStreams in the indexer. +func (s *imageStreamLister) List(selector labels.Selector) (ret []*v1.ImageStream, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.ImageStream)) + }) + return ret, err +} + +// ImageStreams returns an object that can list and get ImageStreams. +func (s *imageStreamLister) ImageStreams(namespace string) ImageStreamNamespaceLister { + return imageStreamNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// ImageStreamNamespaceLister helps list and get ImageStreams. +// All objects returned here must be treated as read-only. +type ImageStreamNamespaceLister interface { + // List lists all ImageStreams in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.ImageStream, err error) + // Get retrieves the ImageStream from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.ImageStream, error) + ImageStreamNamespaceListerExpansion +} + +// imageStreamNamespaceLister implements the ImageStreamNamespaceLister +// interface. +type imageStreamNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all ImageStreams in the indexer for a given namespace. +func (s imageStreamNamespaceLister) List(selector labels.Selector) (ret []*v1.ImageStream, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.ImageStream)) + }) + return ret, err +} + +// Get retrieves the ImageStream from the indexer for a given namespace and name. +func (s imageStreamNamespaceLister) Get(name string) (*v1.ImageStream, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("imagestream"), name) + } + return obj.(*v1.ImageStream), nil +} diff --git a/vendor/github.com/openshift/client-go/image/listers/image/v1/imagestreamtag.go b/vendor/github.com/openshift/client-go/image/listers/image/v1/imagestreamtag.go new file mode 100644 index 0000000000000..6042b27bbe683 --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/listers/image/v1/imagestreamtag.go @@ -0,0 +1,83 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/image/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// ImageStreamTagLister helps list ImageStreamTags. +// All objects returned here must be treated as read-only. +type ImageStreamTagLister interface { + // List lists all ImageStreamTags in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.ImageStreamTag, err error) + // ImageStreamTags returns an object that can list and get ImageStreamTags. + ImageStreamTags(namespace string) ImageStreamTagNamespaceLister + ImageStreamTagListerExpansion +} + +// imageStreamTagLister implements the ImageStreamTagLister interface. +type imageStreamTagLister struct { + indexer cache.Indexer +} + +// NewImageStreamTagLister returns a new ImageStreamTagLister. +func NewImageStreamTagLister(indexer cache.Indexer) ImageStreamTagLister { + return &imageStreamTagLister{indexer: indexer} +} + +// List lists all ImageStreamTags in the indexer. +func (s *imageStreamTagLister) List(selector labels.Selector) (ret []*v1.ImageStreamTag, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.ImageStreamTag)) + }) + return ret, err +} + +// ImageStreamTags returns an object that can list and get ImageStreamTags. +func (s *imageStreamTagLister) ImageStreamTags(namespace string) ImageStreamTagNamespaceLister { + return imageStreamTagNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// ImageStreamTagNamespaceLister helps list and get ImageStreamTags. +// All objects returned here must be treated as read-only. +type ImageStreamTagNamespaceLister interface { + // List lists all ImageStreamTags in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.ImageStreamTag, err error) + // Get retrieves the ImageStreamTag from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.ImageStreamTag, error) + ImageStreamTagNamespaceListerExpansion +} + +// imageStreamTagNamespaceLister implements the ImageStreamTagNamespaceLister +// interface. +type imageStreamTagNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all ImageStreamTags in the indexer for a given namespace. +func (s imageStreamTagNamespaceLister) List(selector labels.Selector) (ret []*v1.ImageStreamTag, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.ImageStreamTag)) + }) + return ret, err +} + +// Get retrieves the ImageStreamTag from the indexer for a given namespace and name. +func (s imageStreamTagNamespaceLister) Get(name string) (*v1.ImageStreamTag, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("imagestreamtag"), name) + } + return obj.(*v1.ImageStreamTag), nil +} diff --git a/vendor/github.com/openshift/client-go/image/listers/image/v1/imagetag.go b/vendor/github.com/openshift/client-go/image/listers/image/v1/imagetag.go new file mode 100644 index 0000000000000..bbc4518c2348d --- /dev/null +++ b/vendor/github.com/openshift/client-go/image/listers/image/v1/imagetag.go @@ -0,0 +1,83 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/image/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// ImageTagLister helps list ImageTags. +// All objects returned here must be treated as read-only. +type ImageTagLister interface { + // List lists all ImageTags in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.ImageTag, err error) + // ImageTags returns an object that can list and get ImageTags. + ImageTags(namespace string) ImageTagNamespaceLister + ImageTagListerExpansion +} + +// imageTagLister implements the ImageTagLister interface. +type imageTagLister struct { + indexer cache.Indexer +} + +// NewImageTagLister returns a new ImageTagLister. +func NewImageTagLister(indexer cache.Indexer) ImageTagLister { + return &imageTagLister{indexer: indexer} +} + +// List lists all ImageTags in the indexer. +func (s *imageTagLister) List(selector labels.Selector) (ret []*v1.ImageTag, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.ImageTag)) + }) + return ret, err +} + +// ImageTags returns an object that can list and get ImageTags. +func (s *imageTagLister) ImageTags(namespace string) ImageTagNamespaceLister { + return imageTagNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// ImageTagNamespaceLister helps list and get ImageTags. +// All objects returned here must be treated as read-only. +type ImageTagNamespaceLister interface { + // List lists all ImageTags in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.ImageTag, err error) + // Get retrieves the ImageTag from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.ImageTag, error) + ImageTagNamespaceListerExpansion +} + +// imageTagNamespaceLister implements the ImageTagNamespaceLister +// interface. +type imageTagNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all ImageTags in the indexer for a given namespace. +func (s imageTagNamespaceLister) List(selector labels.Selector) (ret []*v1.ImageTag, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.ImageTag)) + }) + return ret, err +} + +// Get retrieves the ImageTag from the indexer for a given namespace and name. +func (s imageTagNamespaceLister) Get(name string) (*v1.ImageTag, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("imagetag"), name) + } + return obj.(*v1.ImageTag), nil +} diff --git a/vendor/github.com/openshift/client-go/network/clientset/versioned/clientset.go b/vendor/github.com/openshift/client-go/network/clientset/versioned/clientset.go new file mode 100644 index 0000000000000..692d81521dd6e --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/clientset/versioned/clientset.go @@ -0,0 +1,81 @@ +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + + networkv1 "github.com/openshift/client-go/network/clientset/versioned/typed/network/v1" + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + NetworkV1() networkv1.NetworkV1Interface +} + +// Clientset contains the clients for groups. Each group has exactly one +// version included in a Clientset. +type Clientset struct { + *discovery.DiscoveryClient + networkV1 *networkv1.NetworkV1Client +} + +// NetworkV1 retrieves the NetworkV1Client +func (c *Clientset) NetworkV1() networkv1.NetworkV1Interface { + return c.networkV1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + var cs Clientset + var err error + cs.networkV1, err = networkv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + var cs Clientset + cs.networkV1 = networkv1.NewForConfigOrDie(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) + return &cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.networkV1 = networkv1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/vendor/github.com/openshift/client-go/network/clientset/versioned/doc.go b/vendor/github.com/openshift/client-go/network/clientset/versioned/doc.go new file mode 100644 index 0000000000000..0e0c2a8900e2c --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/clientset/versioned/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated clientset. +package versioned diff --git a/vendor/github.com/openshift/client-go/network/clientset/versioned/scheme/doc.go b/vendor/github.com/openshift/client-go/network/clientset/versioned/scheme/doc.go new file mode 100644 index 0000000000000..14db57a58f8d2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/clientset/versioned/scheme/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package contains the scheme of the automatically generated clientset. +package scheme diff --git a/vendor/github.com/openshift/client-go/network/clientset/versioned/scheme/register.go b/vendor/github.com/openshift/client-go/network/clientset/versioned/scheme/register.go new file mode 100644 index 0000000000000..c1dbc29462113 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/clientset/versioned/scheme/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package scheme + +import ( + networkv1 "github.com/openshift/api/network/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + networkv1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/clusternetwork.go b/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/clusternetwork.go new file mode 100644 index 0000000000000..7bca86a9b01d3 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/clusternetwork.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/network/v1" + scheme "github.com/openshift/client-go/network/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// ClusterNetworksGetter has a method to return a ClusterNetworkInterface. +// A group's client should implement this interface. +type ClusterNetworksGetter interface { + ClusterNetworks() ClusterNetworkInterface +} + +// ClusterNetworkInterface has methods to work with ClusterNetwork resources. +type ClusterNetworkInterface interface { + Create(ctx context.Context, clusterNetwork *v1.ClusterNetwork, opts metav1.CreateOptions) (*v1.ClusterNetwork, error) + Update(ctx context.Context, clusterNetwork *v1.ClusterNetwork, opts metav1.UpdateOptions) (*v1.ClusterNetwork, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ClusterNetwork, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ClusterNetworkList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterNetwork, err error) + ClusterNetworkExpansion +} + +// clusterNetworks implements ClusterNetworkInterface +type clusterNetworks struct { + client rest.Interface +} + +// newClusterNetworks returns a ClusterNetworks +func newClusterNetworks(c *NetworkV1Client) *clusterNetworks { + return &clusterNetworks{ + client: c.RESTClient(), + } +} + +// Get takes name of the clusterNetwork, and returns the corresponding clusterNetwork object, and an error if there is any. +func (c *clusterNetworks) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ClusterNetwork, err error) { + result = &v1.ClusterNetwork{} + err = c.client.Get(). + Resource("clusternetworks"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ClusterNetworks that match those selectors. +func (c *clusterNetworks) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ClusterNetworkList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ClusterNetworkList{} + err = c.client.Get(). + Resource("clusternetworks"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested clusterNetworks. +func (c *clusterNetworks) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("clusternetworks"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a clusterNetwork and creates it. Returns the server's representation of the clusterNetwork, and an error, if there is any. +func (c *clusterNetworks) Create(ctx context.Context, clusterNetwork *v1.ClusterNetwork, opts metav1.CreateOptions) (result *v1.ClusterNetwork, err error) { + result = &v1.ClusterNetwork{} + err = c.client.Post(). + Resource("clusternetworks"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterNetwork). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a clusterNetwork and updates it. Returns the server's representation of the clusterNetwork, and an error, if there is any. +func (c *clusterNetworks) Update(ctx context.Context, clusterNetwork *v1.ClusterNetwork, opts metav1.UpdateOptions) (result *v1.ClusterNetwork, err error) { + result = &v1.ClusterNetwork{} + err = c.client.Put(). + Resource("clusternetworks"). + Name(clusterNetwork.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterNetwork). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the clusterNetwork and deletes it. Returns an error if one occurs. +func (c *clusterNetworks) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("clusternetworks"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *clusterNetworks) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("clusternetworks"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched clusterNetwork. +func (c *clusterNetworks) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterNetwork, err error) { + result = &v1.ClusterNetwork{} + err = c.client.Patch(pt). + Resource("clusternetworks"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/doc.go b/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/doc.go new file mode 100644 index 0000000000000..225e6b2be34f2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/egressnetworkpolicy.go b/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/egressnetworkpolicy.go new file mode 100644 index 0000000000000..fab6251aa380a --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/egressnetworkpolicy.go @@ -0,0 +1,162 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/network/v1" + scheme "github.com/openshift/client-go/network/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// EgressNetworkPoliciesGetter has a method to return a EgressNetworkPolicyInterface. +// A group's client should implement this interface. +type EgressNetworkPoliciesGetter interface { + EgressNetworkPolicies(namespace string) EgressNetworkPolicyInterface +} + +// EgressNetworkPolicyInterface has methods to work with EgressNetworkPolicy resources. +type EgressNetworkPolicyInterface interface { + Create(ctx context.Context, egressNetworkPolicy *v1.EgressNetworkPolicy, opts metav1.CreateOptions) (*v1.EgressNetworkPolicy, error) + Update(ctx context.Context, egressNetworkPolicy *v1.EgressNetworkPolicy, opts metav1.UpdateOptions) (*v1.EgressNetworkPolicy, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.EgressNetworkPolicy, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.EgressNetworkPolicyList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.EgressNetworkPolicy, err error) + EgressNetworkPolicyExpansion +} + +// egressNetworkPolicies implements EgressNetworkPolicyInterface +type egressNetworkPolicies struct { + client rest.Interface + ns string +} + +// newEgressNetworkPolicies returns a EgressNetworkPolicies +func newEgressNetworkPolicies(c *NetworkV1Client, namespace string) *egressNetworkPolicies { + return &egressNetworkPolicies{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the egressNetworkPolicy, and returns the corresponding egressNetworkPolicy object, and an error if there is any. +func (c *egressNetworkPolicies) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.EgressNetworkPolicy, err error) { + result = &v1.EgressNetworkPolicy{} + err = c.client.Get(). + Namespace(c.ns). + Resource("egressnetworkpolicies"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of EgressNetworkPolicies that match those selectors. +func (c *egressNetworkPolicies) List(ctx context.Context, opts metav1.ListOptions) (result *v1.EgressNetworkPolicyList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.EgressNetworkPolicyList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("egressnetworkpolicies"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested egressNetworkPolicies. +func (c *egressNetworkPolicies) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("egressnetworkpolicies"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a egressNetworkPolicy and creates it. Returns the server's representation of the egressNetworkPolicy, and an error, if there is any. +func (c *egressNetworkPolicies) Create(ctx context.Context, egressNetworkPolicy *v1.EgressNetworkPolicy, opts metav1.CreateOptions) (result *v1.EgressNetworkPolicy, err error) { + result = &v1.EgressNetworkPolicy{} + err = c.client.Post(). + Namespace(c.ns). + Resource("egressnetworkpolicies"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(egressNetworkPolicy). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a egressNetworkPolicy and updates it. Returns the server's representation of the egressNetworkPolicy, and an error, if there is any. +func (c *egressNetworkPolicies) Update(ctx context.Context, egressNetworkPolicy *v1.EgressNetworkPolicy, opts metav1.UpdateOptions) (result *v1.EgressNetworkPolicy, err error) { + result = &v1.EgressNetworkPolicy{} + err = c.client.Put(). + Namespace(c.ns). + Resource("egressnetworkpolicies"). + Name(egressNetworkPolicy.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(egressNetworkPolicy). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the egressNetworkPolicy and deletes it. Returns an error if one occurs. +func (c *egressNetworkPolicies) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("egressnetworkpolicies"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *egressNetworkPolicies) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("egressnetworkpolicies"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched egressNetworkPolicy. +func (c *egressNetworkPolicies) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.EgressNetworkPolicy, err error) { + result = &v1.EgressNetworkPolicy{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("egressnetworkpolicies"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/generated_expansion.go b/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/generated_expansion.go new file mode 100644 index 0000000000000..14e656e32da7f --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/generated_expansion.go @@ -0,0 +1,11 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type ClusterNetworkExpansion interface{} + +type EgressNetworkPolicyExpansion interface{} + +type HostSubnetExpansion interface{} + +type NetNamespaceExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/hostsubnet.go b/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/hostsubnet.go new file mode 100644 index 0000000000000..1fb983d56b655 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/hostsubnet.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/network/v1" + scheme "github.com/openshift/client-go/network/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// HostSubnetsGetter has a method to return a HostSubnetInterface. +// A group's client should implement this interface. +type HostSubnetsGetter interface { + HostSubnets() HostSubnetInterface +} + +// HostSubnetInterface has methods to work with HostSubnet resources. +type HostSubnetInterface interface { + Create(ctx context.Context, hostSubnet *v1.HostSubnet, opts metav1.CreateOptions) (*v1.HostSubnet, error) + Update(ctx context.Context, hostSubnet *v1.HostSubnet, opts metav1.UpdateOptions) (*v1.HostSubnet, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.HostSubnet, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.HostSubnetList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.HostSubnet, err error) + HostSubnetExpansion +} + +// hostSubnets implements HostSubnetInterface +type hostSubnets struct { + client rest.Interface +} + +// newHostSubnets returns a HostSubnets +func newHostSubnets(c *NetworkV1Client) *hostSubnets { + return &hostSubnets{ + client: c.RESTClient(), + } +} + +// Get takes name of the hostSubnet, and returns the corresponding hostSubnet object, and an error if there is any. +func (c *hostSubnets) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.HostSubnet, err error) { + result = &v1.HostSubnet{} + err = c.client.Get(). + Resource("hostsubnets"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of HostSubnets that match those selectors. +func (c *hostSubnets) List(ctx context.Context, opts metav1.ListOptions) (result *v1.HostSubnetList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.HostSubnetList{} + err = c.client.Get(). + Resource("hostsubnets"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested hostSubnets. +func (c *hostSubnets) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("hostsubnets"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a hostSubnet and creates it. Returns the server's representation of the hostSubnet, and an error, if there is any. +func (c *hostSubnets) Create(ctx context.Context, hostSubnet *v1.HostSubnet, opts metav1.CreateOptions) (result *v1.HostSubnet, err error) { + result = &v1.HostSubnet{} + err = c.client.Post(). + Resource("hostsubnets"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(hostSubnet). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a hostSubnet and updates it. Returns the server's representation of the hostSubnet, and an error, if there is any. +func (c *hostSubnets) Update(ctx context.Context, hostSubnet *v1.HostSubnet, opts metav1.UpdateOptions) (result *v1.HostSubnet, err error) { + result = &v1.HostSubnet{} + err = c.client.Put(). + Resource("hostsubnets"). + Name(hostSubnet.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(hostSubnet). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the hostSubnet and deletes it. Returns an error if one occurs. +func (c *hostSubnets) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("hostsubnets"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *hostSubnets) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("hostsubnets"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched hostSubnet. +func (c *hostSubnets) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.HostSubnet, err error) { + result = &v1.HostSubnet{} + err = c.client.Patch(pt). + Resource("hostsubnets"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/netnamespace.go b/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/netnamespace.go new file mode 100644 index 0000000000000..b98d0243ecf8d --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/netnamespace.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/network/v1" + scheme "github.com/openshift/client-go/network/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// NetNamespacesGetter has a method to return a NetNamespaceInterface. +// A group's client should implement this interface. +type NetNamespacesGetter interface { + NetNamespaces() NetNamespaceInterface +} + +// NetNamespaceInterface has methods to work with NetNamespace resources. +type NetNamespaceInterface interface { + Create(ctx context.Context, netNamespace *v1.NetNamespace, opts metav1.CreateOptions) (*v1.NetNamespace, error) + Update(ctx context.Context, netNamespace *v1.NetNamespace, opts metav1.UpdateOptions) (*v1.NetNamespace, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.NetNamespace, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.NetNamespaceList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.NetNamespace, err error) + NetNamespaceExpansion +} + +// netNamespaces implements NetNamespaceInterface +type netNamespaces struct { + client rest.Interface +} + +// newNetNamespaces returns a NetNamespaces +func newNetNamespaces(c *NetworkV1Client) *netNamespaces { + return &netNamespaces{ + client: c.RESTClient(), + } +} + +// Get takes name of the netNamespace, and returns the corresponding netNamespace object, and an error if there is any. +func (c *netNamespaces) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.NetNamespace, err error) { + result = &v1.NetNamespace{} + err = c.client.Get(). + Resource("netnamespaces"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of NetNamespaces that match those selectors. +func (c *netNamespaces) List(ctx context.Context, opts metav1.ListOptions) (result *v1.NetNamespaceList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.NetNamespaceList{} + err = c.client.Get(). + Resource("netnamespaces"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested netNamespaces. +func (c *netNamespaces) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("netnamespaces"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a netNamespace and creates it. Returns the server's representation of the netNamespace, and an error, if there is any. +func (c *netNamespaces) Create(ctx context.Context, netNamespace *v1.NetNamespace, opts metav1.CreateOptions) (result *v1.NetNamespace, err error) { + result = &v1.NetNamespace{} + err = c.client.Post(). + Resource("netnamespaces"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(netNamespace). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a netNamespace and updates it. Returns the server's representation of the netNamespace, and an error, if there is any. +func (c *netNamespaces) Update(ctx context.Context, netNamespace *v1.NetNamespace, opts metav1.UpdateOptions) (result *v1.NetNamespace, err error) { + result = &v1.NetNamespace{} + err = c.client.Put(). + Resource("netnamespaces"). + Name(netNamespace.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(netNamespace). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the netNamespace and deletes it. Returns an error if one occurs. +func (c *netNamespaces) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("netnamespaces"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *netNamespaces) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("netnamespaces"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched netNamespace. +func (c *netNamespaces) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.NetNamespace, err error) { + result = &v1.NetNamespace{} + err = c.client.Patch(pt). + Resource("netnamespaces"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/network_client.go b/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/network_client.go new file mode 100644 index 0000000000000..5ba34c5d825c5 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/clientset/versioned/typed/network/v1/network_client.go @@ -0,0 +1,88 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/network/v1" + "github.com/openshift/client-go/network/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type NetworkV1Interface interface { + RESTClient() rest.Interface + ClusterNetworksGetter + EgressNetworkPoliciesGetter + HostSubnetsGetter + NetNamespacesGetter +} + +// NetworkV1Client is used to interact with features provided by the network.openshift.io group. +type NetworkV1Client struct { + restClient rest.Interface +} + +func (c *NetworkV1Client) ClusterNetworks() ClusterNetworkInterface { + return newClusterNetworks(c) +} + +func (c *NetworkV1Client) EgressNetworkPolicies(namespace string) EgressNetworkPolicyInterface { + return newEgressNetworkPolicies(c, namespace) +} + +func (c *NetworkV1Client) HostSubnets() HostSubnetInterface { + return newHostSubnets(c) +} + +func (c *NetworkV1Client) NetNamespaces() NetNamespaceInterface { + return newNetNamespaces(c) +} + +// NewForConfig creates a new NetworkV1Client for the given config. +func NewForConfig(c *rest.Config) (*NetworkV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &NetworkV1Client{client}, nil +} + +// NewForConfigOrDie creates a new NetworkV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *NetworkV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new NetworkV1Client for the given RESTClient. +func New(c rest.Interface) *NetworkV1Client { + return &NetworkV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *NetworkV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/github.com/openshift/client-go/network/informers/externalversions/factory.go b/vendor/github.com/openshift/client-go/network/informers/externalversions/factory.go new file mode 100644 index 0000000000000..2130766650066 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/informers/externalversions/factory.go @@ -0,0 +1,164 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + reflect "reflect" + sync "sync" + time "time" + + versioned "github.com/openshift/client-go/network/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/network/informers/externalversions/internalinterfaces" + network "github.com/openshift/client-go/network/informers/externalversions/network" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// SharedInformerOption defines the functional option type for SharedInformerFactory. +type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory + +type sharedInformerFactory struct { + client versioned.Interface + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc + lock sync.Mutex + defaultResync time.Duration + customResync map[reflect.Type]time.Duration + + informers map[reflect.Type]cache.SharedIndexInformer + // startedInformers is used for tracking which informers have been started. + // This allows Start() to be called multiple times safely. + startedInformers map[reflect.Type]bool +} + +// WithCustomResyncConfig sets a custom resync period for the specified informer types. +func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + for k, v := range resyncConfig { + factory.customResync[reflect.TypeOf(k)] = v + } + return factory + } +} + +// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory. +func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.tweakListOptions = tweakListOptions + return factory + } +} + +// WithNamespace limits the SharedInformerFactory to the specified namespace. +func WithNamespace(namespace string) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.namespace = namespace + return factory + } +} + +// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. +func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync) +} + +// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory. +// Listers obtained via this SharedInformerFactory will be subject to the same filters +// as specified here. +// Deprecated: Please use NewSharedInformerFactoryWithOptions instead +func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions)) +} + +// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options. +func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory { + factory := &sharedInformerFactory{ + client: client, + namespace: v1.NamespaceAll, + defaultResync: defaultResync, + informers: make(map[reflect.Type]cache.SharedIndexInformer), + startedInformers: make(map[reflect.Type]bool), + customResync: make(map[reflect.Type]time.Duration), + } + + // Apply all options + for _, opt := range options { + factory = opt(factory) + } + + return factory +} + +// Start initializes all requested informers. +func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) { + f.lock.Lock() + defer f.lock.Unlock() + + for informerType, informer := range f.informers { + if !f.startedInformers[informerType] { + go informer.Run(stopCh) + f.startedInformers[informerType] = true + } + } +} + +// WaitForCacheSync waits for all started informers' cache were synced. +func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool { + informers := func() map[reflect.Type]cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informers := map[reflect.Type]cache.SharedIndexInformer{} + for informerType, informer := range f.informers { + if f.startedInformers[informerType] { + informers[informerType] = informer + } + } + return informers + }() + + res := map[reflect.Type]bool{} + for informType, informer := range informers { + res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced) + } + return res +} + +// InternalInformerFor returns the SharedIndexInformer for obj using an internal +// client. +func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(obj) + informer, exists := f.informers[informerType] + if exists { + return informer + } + + resyncPeriod, exists := f.customResync[informerType] + if !exists { + resyncPeriod = f.defaultResync + } + + informer = newFunc(f.client, resyncPeriod) + f.informers[informerType] = informer + + return informer +} + +// SharedInformerFactory provides shared informers for resources in all known +// API group versions. +type SharedInformerFactory interface { + internalinterfaces.SharedInformerFactory + ForResource(resource schema.GroupVersionResource) (GenericInformer, error) + WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool + + Network() network.Interface +} + +func (f *sharedInformerFactory) Network() network.Interface { + return network.New(f, f.namespace, f.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/network/informers/externalversions/generic.go b/vendor/github.com/openshift/client-go/network/informers/externalversions/generic.go new file mode 100644 index 0000000000000..f157510f2438c --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/informers/externalversions/generic.go @@ -0,0 +1,52 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + "fmt" + + v1 "github.com/openshift/api/network/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// GenericInformer is type of SharedIndexInformer which will locate and delegate to other +// sharedInformers based on type +type GenericInformer interface { + Informer() cache.SharedIndexInformer + Lister() cache.GenericLister +} + +type genericInformer struct { + informer cache.SharedIndexInformer + resource schema.GroupResource +} + +// Informer returns the SharedIndexInformer. +func (f *genericInformer) Informer() cache.SharedIndexInformer { + return f.informer +} + +// Lister returns the GenericLister. +func (f *genericInformer) Lister() cache.GenericLister { + return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource) +} + +// ForResource gives generic access to a shared informer of the matching type +// TODO extend this to unknown resources with a client pool +func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { + switch resource { + // Group=network.openshift.io, Version=v1 + case v1.SchemeGroupVersion.WithResource("clusternetworks"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Network().V1().ClusterNetworks().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("egressnetworkpolicies"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Network().V1().EgressNetworkPolicies().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("hostsubnets"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Network().V1().HostSubnets().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("netnamespaces"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Network().V1().NetNamespaces().Informer()}, nil + + } + + return nil, fmt.Errorf("no informer found for %v", resource) +} diff --git a/vendor/github.com/openshift/client-go/network/informers/externalversions/internalinterfaces/factory_interfaces.go b/vendor/github.com/openshift/client-go/network/informers/externalversions/internalinterfaces/factory_interfaces.go new file mode 100644 index 0000000000000..27f8e38600660 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -0,0 +1,24 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package internalinterfaces + +import ( + time "time" + + versioned "github.com/openshift/client-go/network/clientset/versioned" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + cache "k8s.io/client-go/tools/cache" +) + +// NewInformerFunc takes versioned.Interface and time.Duration to return a SharedIndexInformer. +type NewInformerFunc func(versioned.Interface, time.Duration) cache.SharedIndexInformer + +// SharedInformerFactory a small interface to allow for adding an informer without an import cycle +type SharedInformerFactory interface { + Start(stopCh <-chan struct{}) + InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer +} + +// TweakListOptionsFunc is a function that transforms a v1.ListOptions. +type TweakListOptionsFunc func(*v1.ListOptions) diff --git a/vendor/github.com/openshift/client-go/network/informers/externalversions/network/interface.go b/vendor/github.com/openshift/client-go/network/informers/externalversions/network/interface.go new file mode 100644 index 0000000000000..1d7e251ce2e36 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/informers/externalversions/network/interface.go @@ -0,0 +1,30 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package network + +import ( + internalinterfaces "github.com/openshift/client-go/network/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/network/informers/externalversions/network/v1" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1 provides access to shared informers for resources in V1. + V1() v1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1 returns a new v1.Interface. +func (g *group) V1() v1.Interface { + return v1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/clusternetwork.go b/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/clusternetwork.go new file mode 100644 index 0000000000000..d3a837184ba74 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/clusternetwork.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + networkv1 "github.com/openshift/api/network/v1" + versioned "github.com/openshift/client-go/network/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/network/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/network/listers/network/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// ClusterNetworkInformer provides access to a shared informer and lister for +// ClusterNetworks. +type ClusterNetworkInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.ClusterNetworkLister +} + +type clusterNetworkInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewClusterNetworkInformer constructs a new informer for ClusterNetwork type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewClusterNetworkInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredClusterNetworkInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredClusterNetworkInformer constructs a new informer for ClusterNetwork type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredClusterNetworkInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.NetworkV1().ClusterNetworks().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.NetworkV1().ClusterNetworks().Watch(context.TODO(), options) + }, + }, + &networkv1.ClusterNetwork{}, + resyncPeriod, + indexers, + ) +} + +func (f *clusterNetworkInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredClusterNetworkInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *clusterNetworkInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&networkv1.ClusterNetwork{}, f.defaultInformer) +} + +func (f *clusterNetworkInformer) Lister() v1.ClusterNetworkLister { + return v1.NewClusterNetworkLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/egressnetworkpolicy.go b/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/egressnetworkpolicy.go new file mode 100644 index 0000000000000..cac3b26d798c7 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/egressnetworkpolicy.go @@ -0,0 +1,74 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + networkv1 "github.com/openshift/api/network/v1" + versioned "github.com/openshift/client-go/network/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/network/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/network/listers/network/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// EgressNetworkPolicyInformer provides access to a shared informer and lister for +// EgressNetworkPolicies. +type EgressNetworkPolicyInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.EgressNetworkPolicyLister +} + +type egressNetworkPolicyInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewEgressNetworkPolicyInformer constructs a new informer for EgressNetworkPolicy type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewEgressNetworkPolicyInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredEgressNetworkPolicyInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredEgressNetworkPolicyInformer constructs a new informer for EgressNetworkPolicy type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredEgressNetworkPolicyInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.NetworkV1().EgressNetworkPolicies(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.NetworkV1().EgressNetworkPolicies(namespace).Watch(context.TODO(), options) + }, + }, + &networkv1.EgressNetworkPolicy{}, + resyncPeriod, + indexers, + ) +} + +func (f *egressNetworkPolicyInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredEgressNetworkPolicyInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *egressNetworkPolicyInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&networkv1.EgressNetworkPolicy{}, f.defaultInformer) +} + +func (f *egressNetworkPolicyInformer) Lister() v1.EgressNetworkPolicyLister { + return v1.NewEgressNetworkPolicyLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/hostsubnet.go b/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/hostsubnet.go new file mode 100644 index 0000000000000..e7b79021efc51 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/hostsubnet.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + networkv1 "github.com/openshift/api/network/v1" + versioned "github.com/openshift/client-go/network/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/network/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/network/listers/network/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// HostSubnetInformer provides access to a shared informer and lister for +// HostSubnets. +type HostSubnetInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.HostSubnetLister +} + +type hostSubnetInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewHostSubnetInformer constructs a new informer for HostSubnet type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewHostSubnetInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredHostSubnetInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredHostSubnetInformer constructs a new informer for HostSubnet type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredHostSubnetInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.NetworkV1().HostSubnets().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.NetworkV1().HostSubnets().Watch(context.TODO(), options) + }, + }, + &networkv1.HostSubnet{}, + resyncPeriod, + indexers, + ) +} + +func (f *hostSubnetInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredHostSubnetInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *hostSubnetInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&networkv1.HostSubnet{}, f.defaultInformer) +} + +func (f *hostSubnetInformer) Lister() v1.HostSubnetLister { + return v1.NewHostSubnetLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/interface.go b/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/interface.go new file mode 100644 index 0000000000000..1f696be4fa30e --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/interface.go @@ -0,0 +1,50 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + internalinterfaces "github.com/openshift/client-go/network/informers/externalversions/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // ClusterNetworks returns a ClusterNetworkInformer. + ClusterNetworks() ClusterNetworkInformer + // EgressNetworkPolicies returns a EgressNetworkPolicyInformer. + EgressNetworkPolicies() EgressNetworkPolicyInformer + // HostSubnets returns a HostSubnetInformer. + HostSubnets() HostSubnetInformer + // NetNamespaces returns a NetNamespaceInformer. + NetNamespaces() NetNamespaceInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// ClusterNetworks returns a ClusterNetworkInformer. +func (v *version) ClusterNetworks() ClusterNetworkInformer { + return &clusterNetworkInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + +// EgressNetworkPolicies returns a EgressNetworkPolicyInformer. +func (v *version) EgressNetworkPolicies() EgressNetworkPolicyInformer { + return &egressNetworkPolicyInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} + +// HostSubnets returns a HostSubnetInformer. +func (v *version) HostSubnets() HostSubnetInformer { + return &hostSubnetInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + +// NetNamespaces returns a NetNamespaceInformer. +func (v *version) NetNamespaces() NetNamespaceInformer { + return &netNamespaceInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/netnamespace.go b/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/netnamespace.go new file mode 100644 index 0000000000000..a1a91e947c7ba --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/informers/externalversions/network/v1/netnamespace.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + networkv1 "github.com/openshift/api/network/v1" + versioned "github.com/openshift/client-go/network/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/network/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/network/listers/network/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// NetNamespaceInformer provides access to a shared informer and lister for +// NetNamespaces. +type NetNamespaceInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.NetNamespaceLister +} + +type netNamespaceInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewNetNamespaceInformer constructs a new informer for NetNamespace type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewNetNamespaceInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredNetNamespaceInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredNetNamespaceInformer constructs a new informer for NetNamespace type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredNetNamespaceInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.NetworkV1().NetNamespaces().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.NetworkV1().NetNamespaces().Watch(context.TODO(), options) + }, + }, + &networkv1.NetNamespace{}, + resyncPeriod, + indexers, + ) +} + +func (f *netNamespaceInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredNetNamespaceInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *netNamespaceInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&networkv1.NetNamespace{}, f.defaultInformer) +} + +func (f *netNamespaceInformer) Lister() v1.NetNamespaceLister { + return v1.NewNetNamespaceLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/network/listers/network/v1/clusternetwork.go b/vendor/github.com/openshift/client-go/network/listers/network/v1/clusternetwork.go new file mode 100644 index 0000000000000..fbd211d6e62a3 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/listers/network/v1/clusternetwork.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/network/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// ClusterNetworkLister helps list ClusterNetworks. +// All objects returned here must be treated as read-only. +type ClusterNetworkLister interface { + // List lists all ClusterNetworks in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.ClusterNetwork, err error) + // Get retrieves the ClusterNetwork from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.ClusterNetwork, error) + ClusterNetworkListerExpansion +} + +// clusterNetworkLister implements the ClusterNetworkLister interface. +type clusterNetworkLister struct { + indexer cache.Indexer +} + +// NewClusterNetworkLister returns a new ClusterNetworkLister. +func NewClusterNetworkLister(indexer cache.Indexer) ClusterNetworkLister { + return &clusterNetworkLister{indexer: indexer} +} + +// List lists all ClusterNetworks in the indexer. +func (s *clusterNetworkLister) List(selector labels.Selector) (ret []*v1.ClusterNetwork, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.ClusterNetwork)) + }) + return ret, err +} + +// Get retrieves the ClusterNetwork from the index for a given name. +func (s *clusterNetworkLister) Get(name string) (*v1.ClusterNetwork, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("clusternetwork"), name) + } + return obj.(*v1.ClusterNetwork), nil +} diff --git a/vendor/github.com/openshift/client-go/network/listers/network/v1/egressnetworkpolicy.go b/vendor/github.com/openshift/client-go/network/listers/network/v1/egressnetworkpolicy.go new file mode 100644 index 0000000000000..f54356c136222 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/listers/network/v1/egressnetworkpolicy.go @@ -0,0 +1,83 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/network/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// EgressNetworkPolicyLister helps list EgressNetworkPolicies. +// All objects returned here must be treated as read-only. +type EgressNetworkPolicyLister interface { + // List lists all EgressNetworkPolicies in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.EgressNetworkPolicy, err error) + // EgressNetworkPolicies returns an object that can list and get EgressNetworkPolicies. + EgressNetworkPolicies(namespace string) EgressNetworkPolicyNamespaceLister + EgressNetworkPolicyListerExpansion +} + +// egressNetworkPolicyLister implements the EgressNetworkPolicyLister interface. +type egressNetworkPolicyLister struct { + indexer cache.Indexer +} + +// NewEgressNetworkPolicyLister returns a new EgressNetworkPolicyLister. +func NewEgressNetworkPolicyLister(indexer cache.Indexer) EgressNetworkPolicyLister { + return &egressNetworkPolicyLister{indexer: indexer} +} + +// List lists all EgressNetworkPolicies in the indexer. +func (s *egressNetworkPolicyLister) List(selector labels.Selector) (ret []*v1.EgressNetworkPolicy, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.EgressNetworkPolicy)) + }) + return ret, err +} + +// EgressNetworkPolicies returns an object that can list and get EgressNetworkPolicies. +func (s *egressNetworkPolicyLister) EgressNetworkPolicies(namespace string) EgressNetworkPolicyNamespaceLister { + return egressNetworkPolicyNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// EgressNetworkPolicyNamespaceLister helps list and get EgressNetworkPolicies. +// All objects returned here must be treated as read-only. +type EgressNetworkPolicyNamespaceLister interface { + // List lists all EgressNetworkPolicies in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.EgressNetworkPolicy, err error) + // Get retrieves the EgressNetworkPolicy from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.EgressNetworkPolicy, error) + EgressNetworkPolicyNamespaceListerExpansion +} + +// egressNetworkPolicyNamespaceLister implements the EgressNetworkPolicyNamespaceLister +// interface. +type egressNetworkPolicyNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all EgressNetworkPolicies in the indexer for a given namespace. +func (s egressNetworkPolicyNamespaceLister) List(selector labels.Selector) (ret []*v1.EgressNetworkPolicy, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.EgressNetworkPolicy)) + }) + return ret, err +} + +// Get retrieves the EgressNetworkPolicy from the indexer for a given namespace and name. +func (s egressNetworkPolicyNamespaceLister) Get(name string) (*v1.EgressNetworkPolicy, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("egressnetworkpolicy"), name) + } + return obj.(*v1.EgressNetworkPolicy), nil +} diff --git a/vendor/github.com/openshift/client-go/network/listers/network/v1/expansion_generated.go b/vendor/github.com/openshift/client-go/network/listers/network/v1/expansion_generated.go new file mode 100644 index 0000000000000..41f06c59aea68 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/listers/network/v1/expansion_generated.go @@ -0,0 +1,23 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +// ClusterNetworkListerExpansion allows custom methods to be added to +// ClusterNetworkLister. +type ClusterNetworkListerExpansion interface{} + +// EgressNetworkPolicyListerExpansion allows custom methods to be added to +// EgressNetworkPolicyLister. +type EgressNetworkPolicyListerExpansion interface{} + +// EgressNetworkPolicyNamespaceListerExpansion allows custom methods to be added to +// EgressNetworkPolicyNamespaceLister. +type EgressNetworkPolicyNamespaceListerExpansion interface{} + +// HostSubnetListerExpansion allows custom methods to be added to +// HostSubnetLister. +type HostSubnetListerExpansion interface{} + +// NetNamespaceListerExpansion allows custom methods to be added to +// NetNamespaceLister. +type NetNamespaceListerExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/network/listers/network/v1/hostsubnet.go b/vendor/github.com/openshift/client-go/network/listers/network/v1/hostsubnet.go new file mode 100644 index 0000000000000..144d3232cd882 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/listers/network/v1/hostsubnet.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/network/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// HostSubnetLister helps list HostSubnets. +// All objects returned here must be treated as read-only. +type HostSubnetLister interface { + // List lists all HostSubnets in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.HostSubnet, err error) + // Get retrieves the HostSubnet from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.HostSubnet, error) + HostSubnetListerExpansion +} + +// hostSubnetLister implements the HostSubnetLister interface. +type hostSubnetLister struct { + indexer cache.Indexer +} + +// NewHostSubnetLister returns a new HostSubnetLister. +func NewHostSubnetLister(indexer cache.Indexer) HostSubnetLister { + return &hostSubnetLister{indexer: indexer} +} + +// List lists all HostSubnets in the indexer. +func (s *hostSubnetLister) List(selector labels.Selector) (ret []*v1.HostSubnet, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.HostSubnet)) + }) + return ret, err +} + +// Get retrieves the HostSubnet from the index for a given name. +func (s *hostSubnetLister) Get(name string) (*v1.HostSubnet, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("hostsubnet"), name) + } + return obj.(*v1.HostSubnet), nil +} diff --git a/vendor/github.com/openshift/client-go/network/listers/network/v1/netnamespace.go b/vendor/github.com/openshift/client-go/network/listers/network/v1/netnamespace.go new file mode 100644 index 0000000000000..d8eb9b65d13e0 --- /dev/null +++ b/vendor/github.com/openshift/client-go/network/listers/network/v1/netnamespace.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/network/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// NetNamespaceLister helps list NetNamespaces. +// All objects returned here must be treated as read-only. +type NetNamespaceLister interface { + // List lists all NetNamespaces in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.NetNamespace, err error) + // Get retrieves the NetNamespace from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.NetNamespace, error) + NetNamespaceListerExpansion +} + +// netNamespaceLister implements the NetNamespaceLister interface. +type netNamespaceLister struct { + indexer cache.Indexer +} + +// NewNetNamespaceLister returns a new NetNamespaceLister. +func NewNetNamespaceLister(indexer cache.Indexer) NetNamespaceLister { + return &netNamespaceLister{indexer: indexer} +} + +// List lists all NetNamespaces in the indexer. +func (s *netNamespaceLister) List(selector labels.Selector) (ret []*v1.NetNamespace, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.NetNamespace)) + }) + return ret, err +} + +// Get retrieves the NetNamespace from the index for a given name. +func (s *netNamespaceLister) Get(name string) (*v1.NetNamespace, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("netnamespace"), name) + } + return obj.(*v1.NetNamespace), nil +} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/clientset.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/clientset.go new file mode 100644 index 0000000000000..cd082a0ed6a2d --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/clientset.go @@ -0,0 +1,81 @@ +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + + oauthv1 "github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1" + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + OauthV1() oauthv1.OauthV1Interface +} + +// Clientset contains the clients for groups. Each group has exactly one +// version included in a Clientset. +type Clientset struct { + *discovery.DiscoveryClient + oauthV1 *oauthv1.OauthV1Client +} + +// OauthV1 retrieves the OauthV1Client +func (c *Clientset) OauthV1() oauthv1.OauthV1Interface { + return c.oauthV1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + var cs Clientset + var err error + cs.oauthV1, err = oauthv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + var cs Clientset + cs.oauthV1 = oauthv1.NewForConfigOrDie(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) + return &cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.oauthV1 = oauthv1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/doc.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/doc.go new file mode 100644 index 0000000000000..0e0c2a8900e2c --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated clientset. +package versioned diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/fake/clientset_generated.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/fake/clientset_generated.go new file mode 100644 index 0000000000000..12c674981e5c3 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/fake/clientset_generated.go @@ -0,0 +1,66 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + clientset "github.com/openshift/client-go/oauth/clientset/versioned" + oauthv1 "github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1" + fakeoauthv1 "github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/discovery" + fakediscovery "k8s.io/client-go/discovery/fake" + "k8s.io/client-go/testing" +) + +// NewSimpleClientset returns a clientset that will respond with the provided objects. +// It's backed by a very simple object tracker that processes creates, updates and deletions as-is, +// without applying any validations and/or defaults. It shouldn't be considered a replacement +// for a real clientset and is mostly useful in simple unit tests. +func NewSimpleClientset(objects ...runtime.Object) *Clientset { + o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder()) + for _, obj := range objects { + if err := o.Add(obj); err != nil { + panic(err) + } + } + + cs := &Clientset{tracker: o} + cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake} + cs.AddReactor("*", "*", testing.ObjectReaction(o)) + cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) { + gvr := action.GetResource() + ns := action.GetNamespace() + watch, err := o.Watch(gvr, ns) + if err != nil { + return false, nil, err + } + return true, watch, nil + }) + + return cs +} + +// Clientset implements clientset.Interface. Meant to be embedded into a +// struct to get a default implementation. This makes faking out just the method +// you want to test easier. +type Clientset struct { + testing.Fake + discovery *fakediscovery.FakeDiscovery + tracker testing.ObjectTracker +} + +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + return c.discovery +} + +func (c *Clientset) Tracker() testing.ObjectTracker { + return c.tracker +} + +var _ clientset.Interface = &Clientset{} + +// OauthV1 retrieves the OauthV1Client +func (c *Clientset) OauthV1() oauthv1.OauthV1Interface { + return &fakeoauthv1.FakeOauthV1{Fake: &c.Fake} +} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/fake/doc.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/fake/doc.go new file mode 100644 index 0000000000000..3630ed1cd17db --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/fake/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated fake clientset. +package fake diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/fake/register.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/fake/register.go new file mode 100644 index 0000000000000..8f5400f9073e3 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/fake/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + oauthv1 "github.com/openshift/api/oauth/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var scheme = runtime.NewScheme() +var codecs = serializer.NewCodecFactory(scheme) + +var localSchemeBuilder = runtime.SchemeBuilder{ + oauthv1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(scheme)) +} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/scheme/doc.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/scheme/doc.go new file mode 100644 index 0000000000000..14db57a58f8d2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/scheme/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package contains the scheme of the automatically generated clientset. +package scheme diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/scheme/register.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/scheme/register.go new file mode 100644 index 0000000000000..a959a85e942e5 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/scheme/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package scheme + +import ( + oauthv1 "github.com/openshift/api/oauth/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + oauthv1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/doc.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/doc.go new file mode 100644 index 0000000000000..225e6b2be34f2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/doc.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/doc.go new file mode 100644 index 0000000000000..2b5ba4c8e4422 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// Package fake has the automatically generated clients. +package fake diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauth_client.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauth_client.go new file mode 100644 index 0000000000000..3eba1766ad7c1 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauth_client.go @@ -0,0 +1,36 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + v1 "github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1" + rest "k8s.io/client-go/rest" + testing "k8s.io/client-go/testing" +) + +type FakeOauthV1 struct { + *testing.Fake +} + +func (c *FakeOauthV1) OAuthAccessTokens() v1.OAuthAccessTokenInterface { + return &FakeOAuthAccessTokens{c} +} + +func (c *FakeOauthV1) OAuthAuthorizeTokens() v1.OAuthAuthorizeTokenInterface { + return &FakeOAuthAuthorizeTokens{c} +} + +func (c *FakeOauthV1) OAuthClients() v1.OAuthClientInterface { + return &FakeOAuthClients{c} +} + +func (c *FakeOauthV1) OAuthClientAuthorizations() v1.OAuthClientAuthorizationInterface { + return &FakeOAuthClientAuthorizations{c} +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *FakeOauthV1) RESTClient() rest.Interface { + var ret *rest.RESTClient + return ret +} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthaccesstoken.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthaccesstoken.go new file mode 100644 index 0000000000000..0d1abe1aab140 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthaccesstoken.go @@ -0,0 +1,106 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + oauthv1 "github.com/openshift/api/oauth/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeOAuthAccessTokens implements OAuthAccessTokenInterface +type FakeOAuthAccessTokens struct { + Fake *FakeOauthV1 +} + +var oauthaccesstokensResource = schema.GroupVersionResource{Group: "oauth.openshift.io", Version: "v1", Resource: "oauthaccesstokens"} + +var oauthaccesstokensKind = schema.GroupVersionKind{Group: "oauth.openshift.io", Version: "v1", Kind: "OAuthAccessToken"} + +// Get takes name of the oAuthAccessToken, and returns the corresponding oAuthAccessToken object, and an error if there is any. +func (c *FakeOAuthAccessTokens) Get(ctx context.Context, name string, options v1.GetOptions) (result *oauthv1.OAuthAccessToken, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(oauthaccesstokensResource, name), &oauthv1.OAuthAccessToken{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthAccessToken), err +} + +// List takes label and field selectors, and returns the list of OAuthAccessTokens that match those selectors. +func (c *FakeOAuthAccessTokens) List(ctx context.Context, opts v1.ListOptions) (result *oauthv1.OAuthAccessTokenList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(oauthaccesstokensResource, oauthaccesstokensKind, opts), &oauthv1.OAuthAccessTokenList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &oauthv1.OAuthAccessTokenList{ListMeta: obj.(*oauthv1.OAuthAccessTokenList).ListMeta} + for _, item := range obj.(*oauthv1.OAuthAccessTokenList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested oAuthAccessTokens. +func (c *FakeOAuthAccessTokens) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(oauthaccesstokensResource, opts)) +} + +// Create takes the representation of a oAuthAccessToken and creates it. Returns the server's representation of the oAuthAccessToken, and an error, if there is any. +func (c *FakeOAuthAccessTokens) Create(ctx context.Context, oAuthAccessToken *oauthv1.OAuthAccessToken, opts v1.CreateOptions) (result *oauthv1.OAuthAccessToken, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(oauthaccesstokensResource, oAuthAccessToken), &oauthv1.OAuthAccessToken{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthAccessToken), err +} + +// Update takes the representation of a oAuthAccessToken and updates it. Returns the server's representation of the oAuthAccessToken, and an error, if there is any. +func (c *FakeOAuthAccessTokens) Update(ctx context.Context, oAuthAccessToken *oauthv1.OAuthAccessToken, opts v1.UpdateOptions) (result *oauthv1.OAuthAccessToken, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(oauthaccesstokensResource, oAuthAccessToken), &oauthv1.OAuthAccessToken{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthAccessToken), err +} + +// Delete takes name of the oAuthAccessToken and deletes it. Returns an error if one occurs. +func (c *FakeOAuthAccessTokens) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(oauthaccesstokensResource, name), &oauthv1.OAuthAccessToken{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeOAuthAccessTokens) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(oauthaccesstokensResource, listOpts) + + _, err := c.Fake.Invokes(action, &oauthv1.OAuthAccessTokenList{}) + return err +} + +// Patch applies the patch and returns the patched oAuthAccessToken. +func (c *FakeOAuthAccessTokens) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *oauthv1.OAuthAccessToken, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(oauthaccesstokensResource, name, pt, data, subresources...), &oauthv1.OAuthAccessToken{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthAccessToken), err +} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthauthorizetoken.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthauthorizetoken.go new file mode 100644 index 0000000000000..5da4a58eb5d2b --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthauthorizetoken.go @@ -0,0 +1,106 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + oauthv1 "github.com/openshift/api/oauth/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeOAuthAuthorizeTokens implements OAuthAuthorizeTokenInterface +type FakeOAuthAuthorizeTokens struct { + Fake *FakeOauthV1 +} + +var oauthauthorizetokensResource = schema.GroupVersionResource{Group: "oauth.openshift.io", Version: "v1", Resource: "oauthauthorizetokens"} + +var oauthauthorizetokensKind = schema.GroupVersionKind{Group: "oauth.openshift.io", Version: "v1", Kind: "OAuthAuthorizeToken"} + +// Get takes name of the oAuthAuthorizeToken, and returns the corresponding oAuthAuthorizeToken object, and an error if there is any. +func (c *FakeOAuthAuthorizeTokens) Get(ctx context.Context, name string, options v1.GetOptions) (result *oauthv1.OAuthAuthorizeToken, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(oauthauthorizetokensResource, name), &oauthv1.OAuthAuthorizeToken{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthAuthorizeToken), err +} + +// List takes label and field selectors, and returns the list of OAuthAuthorizeTokens that match those selectors. +func (c *FakeOAuthAuthorizeTokens) List(ctx context.Context, opts v1.ListOptions) (result *oauthv1.OAuthAuthorizeTokenList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(oauthauthorizetokensResource, oauthauthorizetokensKind, opts), &oauthv1.OAuthAuthorizeTokenList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &oauthv1.OAuthAuthorizeTokenList{ListMeta: obj.(*oauthv1.OAuthAuthorizeTokenList).ListMeta} + for _, item := range obj.(*oauthv1.OAuthAuthorizeTokenList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested oAuthAuthorizeTokens. +func (c *FakeOAuthAuthorizeTokens) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(oauthauthorizetokensResource, opts)) +} + +// Create takes the representation of a oAuthAuthorizeToken and creates it. Returns the server's representation of the oAuthAuthorizeToken, and an error, if there is any. +func (c *FakeOAuthAuthorizeTokens) Create(ctx context.Context, oAuthAuthorizeToken *oauthv1.OAuthAuthorizeToken, opts v1.CreateOptions) (result *oauthv1.OAuthAuthorizeToken, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(oauthauthorizetokensResource, oAuthAuthorizeToken), &oauthv1.OAuthAuthorizeToken{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthAuthorizeToken), err +} + +// Update takes the representation of a oAuthAuthorizeToken and updates it. Returns the server's representation of the oAuthAuthorizeToken, and an error, if there is any. +func (c *FakeOAuthAuthorizeTokens) Update(ctx context.Context, oAuthAuthorizeToken *oauthv1.OAuthAuthorizeToken, opts v1.UpdateOptions) (result *oauthv1.OAuthAuthorizeToken, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(oauthauthorizetokensResource, oAuthAuthorizeToken), &oauthv1.OAuthAuthorizeToken{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthAuthorizeToken), err +} + +// Delete takes name of the oAuthAuthorizeToken and deletes it. Returns an error if one occurs. +func (c *FakeOAuthAuthorizeTokens) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(oauthauthorizetokensResource, name), &oauthv1.OAuthAuthorizeToken{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeOAuthAuthorizeTokens) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(oauthauthorizetokensResource, listOpts) + + _, err := c.Fake.Invokes(action, &oauthv1.OAuthAuthorizeTokenList{}) + return err +} + +// Patch applies the patch and returns the patched oAuthAuthorizeToken. +func (c *FakeOAuthAuthorizeTokens) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *oauthv1.OAuthAuthorizeToken, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(oauthauthorizetokensResource, name, pt, data, subresources...), &oauthv1.OAuthAuthorizeToken{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthAuthorizeToken), err +} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthclient.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthclient.go new file mode 100644 index 0000000000000..c80a02f741faf --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthclient.go @@ -0,0 +1,106 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + oauthv1 "github.com/openshift/api/oauth/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeOAuthClients implements OAuthClientInterface +type FakeOAuthClients struct { + Fake *FakeOauthV1 +} + +var oauthclientsResource = schema.GroupVersionResource{Group: "oauth.openshift.io", Version: "v1", Resource: "oauthclients"} + +var oauthclientsKind = schema.GroupVersionKind{Group: "oauth.openshift.io", Version: "v1", Kind: "OAuthClient"} + +// Get takes name of the oAuthClient, and returns the corresponding oAuthClient object, and an error if there is any. +func (c *FakeOAuthClients) Get(ctx context.Context, name string, options v1.GetOptions) (result *oauthv1.OAuthClient, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(oauthclientsResource, name), &oauthv1.OAuthClient{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthClient), err +} + +// List takes label and field selectors, and returns the list of OAuthClients that match those selectors. +func (c *FakeOAuthClients) List(ctx context.Context, opts v1.ListOptions) (result *oauthv1.OAuthClientList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(oauthclientsResource, oauthclientsKind, opts), &oauthv1.OAuthClientList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &oauthv1.OAuthClientList{ListMeta: obj.(*oauthv1.OAuthClientList).ListMeta} + for _, item := range obj.(*oauthv1.OAuthClientList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested oAuthClients. +func (c *FakeOAuthClients) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(oauthclientsResource, opts)) +} + +// Create takes the representation of a oAuthClient and creates it. Returns the server's representation of the oAuthClient, and an error, if there is any. +func (c *FakeOAuthClients) Create(ctx context.Context, oAuthClient *oauthv1.OAuthClient, opts v1.CreateOptions) (result *oauthv1.OAuthClient, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(oauthclientsResource, oAuthClient), &oauthv1.OAuthClient{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthClient), err +} + +// Update takes the representation of a oAuthClient and updates it. Returns the server's representation of the oAuthClient, and an error, if there is any. +func (c *FakeOAuthClients) Update(ctx context.Context, oAuthClient *oauthv1.OAuthClient, opts v1.UpdateOptions) (result *oauthv1.OAuthClient, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(oauthclientsResource, oAuthClient), &oauthv1.OAuthClient{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthClient), err +} + +// Delete takes name of the oAuthClient and deletes it. Returns an error if one occurs. +func (c *FakeOAuthClients) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(oauthclientsResource, name), &oauthv1.OAuthClient{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeOAuthClients) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(oauthclientsResource, listOpts) + + _, err := c.Fake.Invokes(action, &oauthv1.OAuthClientList{}) + return err +} + +// Patch applies the patch and returns the patched oAuthClient. +func (c *FakeOAuthClients) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *oauthv1.OAuthClient, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(oauthclientsResource, name, pt, data, subresources...), &oauthv1.OAuthClient{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthClient), err +} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthclientauthorization.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthclientauthorization.go new file mode 100644 index 0000000000000..1394a2a7a60d1 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake/fake_oauthclientauthorization.go @@ -0,0 +1,106 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + oauthv1 "github.com/openshift/api/oauth/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeOAuthClientAuthorizations implements OAuthClientAuthorizationInterface +type FakeOAuthClientAuthorizations struct { + Fake *FakeOauthV1 +} + +var oauthclientauthorizationsResource = schema.GroupVersionResource{Group: "oauth.openshift.io", Version: "v1", Resource: "oauthclientauthorizations"} + +var oauthclientauthorizationsKind = schema.GroupVersionKind{Group: "oauth.openshift.io", Version: "v1", Kind: "OAuthClientAuthorization"} + +// Get takes name of the oAuthClientAuthorization, and returns the corresponding oAuthClientAuthorization object, and an error if there is any. +func (c *FakeOAuthClientAuthorizations) Get(ctx context.Context, name string, options v1.GetOptions) (result *oauthv1.OAuthClientAuthorization, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(oauthclientauthorizationsResource, name), &oauthv1.OAuthClientAuthorization{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthClientAuthorization), err +} + +// List takes label and field selectors, and returns the list of OAuthClientAuthorizations that match those selectors. +func (c *FakeOAuthClientAuthorizations) List(ctx context.Context, opts v1.ListOptions) (result *oauthv1.OAuthClientAuthorizationList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(oauthclientauthorizationsResource, oauthclientauthorizationsKind, opts), &oauthv1.OAuthClientAuthorizationList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &oauthv1.OAuthClientAuthorizationList{ListMeta: obj.(*oauthv1.OAuthClientAuthorizationList).ListMeta} + for _, item := range obj.(*oauthv1.OAuthClientAuthorizationList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested oAuthClientAuthorizations. +func (c *FakeOAuthClientAuthorizations) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(oauthclientauthorizationsResource, opts)) +} + +// Create takes the representation of a oAuthClientAuthorization and creates it. Returns the server's representation of the oAuthClientAuthorization, and an error, if there is any. +func (c *FakeOAuthClientAuthorizations) Create(ctx context.Context, oAuthClientAuthorization *oauthv1.OAuthClientAuthorization, opts v1.CreateOptions) (result *oauthv1.OAuthClientAuthorization, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(oauthclientauthorizationsResource, oAuthClientAuthorization), &oauthv1.OAuthClientAuthorization{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthClientAuthorization), err +} + +// Update takes the representation of a oAuthClientAuthorization and updates it. Returns the server's representation of the oAuthClientAuthorization, and an error, if there is any. +func (c *FakeOAuthClientAuthorizations) Update(ctx context.Context, oAuthClientAuthorization *oauthv1.OAuthClientAuthorization, opts v1.UpdateOptions) (result *oauthv1.OAuthClientAuthorization, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(oauthclientauthorizationsResource, oAuthClientAuthorization), &oauthv1.OAuthClientAuthorization{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthClientAuthorization), err +} + +// Delete takes name of the oAuthClientAuthorization and deletes it. Returns an error if one occurs. +func (c *FakeOAuthClientAuthorizations) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(oauthclientauthorizationsResource, name), &oauthv1.OAuthClientAuthorization{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeOAuthClientAuthorizations) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(oauthclientauthorizationsResource, listOpts) + + _, err := c.Fake.Invokes(action, &oauthv1.OAuthClientAuthorizationList{}) + return err +} + +// Patch applies the patch and returns the patched oAuthClientAuthorization. +func (c *FakeOAuthClientAuthorizations) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *oauthv1.OAuthClientAuthorization, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(oauthclientauthorizationsResource, name, pt, data, subresources...), &oauthv1.OAuthClientAuthorization{}) + if obj == nil { + return nil, err + } + return obj.(*oauthv1.OAuthClientAuthorization), err +} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/generated_expansion.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/generated_expansion.go new file mode 100644 index 0000000000000..d5e00863715b4 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/generated_expansion.go @@ -0,0 +1,11 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type OAuthAccessTokenExpansion interface{} + +type OAuthAuthorizeTokenExpansion interface{} + +type OAuthClientExpansion interface{} + +type OAuthClientAuthorizationExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauth_client.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauth_client.go new file mode 100644 index 0000000000000..d0ee41087c19e --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauth_client.go @@ -0,0 +1,88 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/oauth/v1" + "github.com/openshift/client-go/oauth/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type OauthV1Interface interface { + RESTClient() rest.Interface + OAuthAccessTokensGetter + OAuthAuthorizeTokensGetter + OAuthClientsGetter + OAuthClientAuthorizationsGetter +} + +// OauthV1Client is used to interact with features provided by the oauth.openshift.io group. +type OauthV1Client struct { + restClient rest.Interface +} + +func (c *OauthV1Client) OAuthAccessTokens() OAuthAccessTokenInterface { + return newOAuthAccessTokens(c) +} + +func (c *OauthV1Client) OAuthAuthorizeTokens() OAuthAuthorizeTokenInterface { + return newOAuthAuthorizeTokens(c) +} + +func (c *OauthV1Client) OAuthClients() OAuthClientInterface { + return newOAuthClients(c) +} + +func (c *OauthV1Client) OAuthClientAuthorizations() OAuthClientAuthorizationInterface { + return newOAuthClientAuthorizations(c) +} + +// NewForConfig creates a new OauthV1Client for the given config. +func NewForConfig(c *rest.Config) (*OauthV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &OauthV1Client{client}, nil +} + +// NewForConfigOrDie creates a new OauthV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *OauthV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new OauthV1Client for the given RESTClient. +func New(c rest.Interface) *OauthV1Client { + return &OauthV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *OauthV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthaccesstoken.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthaccesstoken.go new file mode 100644 index 0000000000000..ec7c0056517de --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthaccesstoken.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/oauth/v1" + scheme "github.com/openshift/client-go/oauth/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// OAuthAccessTokensGetter has a method to return a OAuthAccessTokenInterface. +// A group's client should implement this interface. +type OAuthAccessTokensGetter interface { + OAuthAccessTokens() OAuthAccessTokenInterface +} + +// OAuthAccessTokenInterface has methods to work with OAuthAccessToken resources. +type OAuthAccessTokenInterface interface { + Create(ctx context.Context, oAuthAccessToken *v1.OAuthAccessToken, opts metav1.CreateOptions) (*v1.OAuthAccessToken, error) + Update(ctx context.Context, oAuthAccessToken *v1.OAuthAccessToken, opts metav1.UpdateOptions) (*v1.OAuthAccessToken, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.OAuthAccessToken, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.OAuthAccessTokenList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.OAuthAccessToken, err error) + OAuthAccessTokenExpansion +} + +// oAuthAccessTokens implements OAuthAccessTokenInterface +type oAuthAccessTokens struct { + client rest.Interface +} + +// newOAuthAccessTokens returns a OAuthAccessTokens +func newOAuthAccessTokens(c *OauthV1Client) *oAuthAccessTokens { + return &oAuthAccessTokens{ + client: c.RESTClient(), + } +} + +// Get takes name of the oAuthAccessToken, and returns the corresponding oAuthAccessToken object, and an error if there is any. +func (c *oAuthAccessTokens) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.OAuthAccessToken, err error) { + result = &v1.OAuthAccessToken{} + err = c.client.Get(). + Resource("oauthaccesstokens"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of OAuthAccessTokens that match those selectors. +func (c *oAuthAccessTokens) List(ctx context.Context, opts metav1.ListOptions) (result *v1.OAuthAccessTokenList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.OAuthAccessTokenList{} + err = c.client.Get(). + Resource("oauthaccesstokens"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested oAuthAccessTokens. +func (c *oAuthAccessTokens) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("oauthaccesstokens"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a oAuthAccessToken and creates it. Returns the server's representation of the oAuthAccessToken, and an error, if there is any. +func (c *oAuthAccessTokens) Create(ctx context.Context, oAuthAccessToken *v1.OAuthAccessToken, opts metav1.CreateOptions) (result *v1.OAuthAccessToken, err error) { + result = &v1.OAuthAccessToken{} + err = c.client.Post(). + Resource("oauthaccesstokens"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(oAuthAccessToken). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a oAuthAccessToken and updates it. Returns the server's representation of the oAuthAccessToken, and an error, if there is any. +func (c *oAuthAccessTokens) Update(ctx context.Context, oAuthAccessToken *v1.OAuthAccessToken, opts metav1.UpdateOptions) (result *v1.OAuthAccessToken, err error) { + result = &v1.OAuthAccessToken{} + err = c.client.Put(). + Resource("oauthaccesstokens"). + Name(oAuthAccessToken.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(oAuthAccessToken). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the oAuthAccessToken and deletes it. Returns an error if one occurs. +func (c *oAuthAccessTokens) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("oauthaccesstokens"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *oAuthAccessTokens) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("oauthaccesstokens"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched oAuthAccessToken. +func (c *oAuthAccessTokens) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.OAuthAccessToken, err error) { + result = &v1.OAuthAccessToken{} + err = c.client.Patch(pt). + Resource("oauthaccesstokens"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthauthorizetoken.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthauthorizetoken.go new file mode 100644 index 0000000000000..43d8e8cfc2096 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthauthorizetoken.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/oauth/v1" + scheme "github.com/openshift/client-go/oauth/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// OAuthAuthorizeTokensGetter has a method to return a OAuthAuthorizeTokenInterface. +// A group's client should implement this interface. +type OAuthAuthorizeTokensGetter interface { + OAuthAuthorizeTokens() OAuthAuthorizeTokenInterface +} + +// OAuthAuthorizeTokenInterface has methods to work with OAuthAuthorizeToken resources. +type OAuthAuthorizeTokenInterface interface { + Create(ctx context.Context, oAuthAuthorizeToken *v1.OAuthAuthorizeToken, opts metav1.CreateOptions) (*v1.OAuthAuthorizeToken, error) + Update(ctx context.Context, oAuthAuthorizeToken *v1.OAuthAuthorizeToken, opts metav1.UpdateOptions) (*v1.OAuthAuthorizeToken, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.OAuthAuthorizeToken, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.OAuthAuthorizeTokenList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.OAuthAuthorizeToken, err error) + OAuthAuthorizeTokenExpansion +} + +// oAuthAuthorizeTokens implements OAuthAuthorizeTokenInterface +type oAuthAuthorizeTokens struct { + client rest.Interface +} + +// newOAuthAuthorizeTokens returns a OAuthAuthorizeTokens +func newOAuthAuthorizeTokens(c *OauthV1Client) *oAuthAuthorizeTokens { + return &oAuthAuthorizeTokens{ + client: c.RESTClient(), + } +} + +// Get takes name of the oAuthAuthorizeToken, and returns the corresponding oAuthAuthorizeToken object, and an error if there is any. +func (c *oAuthAuthorizeTokens) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.OAuthAuthorizeToken, err error) { + result = &v1.OAuthAuthorizeToken{} + err = c.client.Get(). + Resource("oauthauthorizetokens"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of OAuthAuthorizeTokens that match those selectors. +func (c *oAuthAuthorizeTokens) List(ctx context.Context, opts metav1.ListOptions) (result *v1.OAuthAuthorizeTokenList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.OAuthAuthorizeTokenList{} + err = c.client.Get(). + Resource("oauthauthorizetokens"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested oAuthAuthorizeTokens. +func (c *oAuthAuthorizeTokens) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("oauthauthorizetokens"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a oAuthAuthorizeToken and creates it. Returns the server's representation of the oAuthAuthorizeToken, and an error, if there is any. +func (c *oAuthAuthorizeTokens) Create(ctx context.Context, oAuthAuthorizeToken *v1.OAuthAuthorizeToken, opts metav1.CreateOptions) (result *v1.OAuthAuthorizeToken, err error) { + result = &v1.OAuthAuthorizeToken{} + err = c.client.Post(). + Resource("oauthauthorizetokens"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(oAuthAuthorizeToken). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a oAuthAuthorizeToken and updates it. Returns the server's representation of the oAuthAuthorizeToken, and an error, if there is any. +func (c *oAuthAuthorizeTokens) Update(ctx context.Context, oAuthAuthorizeToken *v1.OAuthAuthorizeToken, opts metav1.UpdateOptions) (result *v1.OAuthAuthorizeToken, err error) { + result = &v1.OAuthAuthorizeToken{} + err = c.client.Put(). + Resource("oauthauthorizetokens"). + Name(oAuthAuthorizeToken.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(oAuthAuthorizeToken). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the oAuthAuthorizeToken and deletes it. Returns an error if one occurs. +func (c *oAuthAuthorizeTokens) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("oauthauthorizetokens"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *oAuthAuthorizeTokens) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("oauthauthorizetokens"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched oAuthAuthorizeToken. +func (c *oAuthAuthorizeTokens) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.OAuthAuthorizeToken, err error) { + result = &v1.OAuthAuthorizeToken{} + err = c.client.Patch(pt). + Resource("oauthauthorizetokens"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthclient.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthclient.go new file mode 100644 index 0000000000000..1d64a5c272393 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthclient.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/oauth/v1" + scheme "github.com/openshift/client-go/oauth/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// OAuthClientsGetter has a method to return a OAuthClientInterface. +// A group's client should implement this interface. +type OAuthClientsGetter interface { + OAuthClients() OAuthClientInterface +} + +// OAuthClientInterface has methods to work with OAuthClient resources. +type OAuthClientInterface interface { + Create(ctx context.Context, oAuthClient *v1.OAuthClient, opts metav1.CreateOptions) (*v1.OAuthClient, error) + Update(ctx context.Context, oAuthClient *v1.OAuthClient, opts metav1.UpdateOptions) (*v1.OAuthClient, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.OAuthClient, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.OAuthClientList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.OAuthClient, err error) + OAuthClientExpansion +} + +// oAuthClients implements OAuthClientInterface +type oAuthClients struct { + client rest.Interface +} + +// newOAuthClients returns a OAuthClients +func newOAuthClients(c *OauthV1Client) *oAuthClients { + return &oAuthClients{ + client: c.RESTClient(), + } +} + +// Get takes name of the oAuthClient, and returns the corresponding oAuthClient object, and an error if there is any. +func (c *oAuthClients) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.OAuthClient, err error) { + result = &v1.OAuthClient{} + err = c.client.Get(). + Resource("oauthclients"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of OAuthClients that match those selectors. +func (c *oAuthClients) List(ctx context.Context, opts metav1.ListOptions) (result *v1.OAuthClientList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.OAuthClientList{} + err = c.client.Get(). + Resource("oauthclients"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested oAuthClients. +func (c *oAuthClients) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("oauthclients"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a oAuthClient and creates it. Returns the server's representation of the oAuthClient, and an error, if there is any. +func (c *oAuthClients) Create(ctx context.Context, oAuthClient *v1.OAuthClient, opts metav1.CreateOptions) (result *v1.OAuthClient, err error) { + result = &v1.OAuthClient{} + err = c.client.Post(). + Resource("oauthclients"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(oAuthClient). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a oAuthClient and updates it. Returns the server's representation of the oAuthClient, and an error, if there is any. +func (c *oAuthClients) Update(ctx context.Context, oAuthClient *v1.OAuthClient, opts metav1.UpdateOptions) (result *v1.OAuthClient, err error) { + result = &v1.OAuthClient{} + err = c.client.Put(). + Resource("oauthclients"). + Name(oAuthClient.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(oAuthClient). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the oAuthClient and deletes it. Returns an error if one occurs. +func (c *oAuthClients) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("oauthclients"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *oAuthClients) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("oauthclients"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched oAuthClient. +func (c *oAuthClients) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.OAuthClient, err error) { + result = &v1.OAuthClient{} + err = c.client.Patch(pt). + Resource("oauthclients"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthclientauthorization.go b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthclientauthorization.go new file mode 100644 index 0000000000000..c199d86307477 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/oauthclientauthorization.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/oauth/v1" + scheme "github.com/openshift/client-go/oauth/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// OAuthClientAuthorizationsGetter has a method to return a OAuthClientAuthorizationInterface. +// A group's client should implement this interface. +type OAuthClientAuthorizationsGetter interface { + OAuthClientAuthorizations() OAuthClientAuthorizationInterface +} + +// OAuthClientAuthorizationInterface has methods to work with OAuthClientAuthorization resources. +type OAuthClientAuthorizationInterface interface { + Create(ctx context.Context, oAuthClientAuthorization *v1.OAuthClientAuthorization, opts metav1.CreateOptions) (*v1.OAuthClientAuthorization, error) + Update(ctx context.Context, oAuthClientAuthorization *v1.OAuthClientAuthorization, opts metav1.UpdateOptions) (*v1.OAuthClientAuthorization, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.OAuthClientAuthorization, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.OAuthClientAuthorizationList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.OAuthClientAuthorization, err error) + OAuthClientAuthorizationExpansion +} + +// oAuthClientAuthorizations implements OAuthClientAuthorizationInterface +type oAuthClientAuthorizations struct { + client rest.Interface +} + +// newOAuthClientAuthorizations returns a OAuthClientAuthorizations +func newOAuthClientAuthorizations(c *OauthV1Client) *oAuthClientAuthorizations { + return &oAuthClientAuthorizations{ + client: c.RESTClient(), + } +} + +// Get takes name of the oAuthClientAuthorization, and returns the corresponding oAuthClientAuthorization object, and an error if there is any. +func (c *oAuthClientAuthorizations) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.OAuthClientAuthorization, err error) { + result = &v1.OAuthClientAuthorization{} + err = c.client.Get(). + Resource("oauthclientauthorizations"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of OAuthClientAuthorizations that match those selectors. +func (c *oAuthClientAuthorizations) List(ctx context.Context, opts metav1.ListOptions) (result *v1.OAuthClientAuthorizationList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.OAuthClientAuthorizationList{} + err = c.client.Get(). + Resource("oauthclientauthorizations"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested oAuthClientAuthorizations. +func (c *oAuthClientAuthorizations) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("oauthclientauthorizations"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a oAuthClientAuthorization and creates it. Returns the server's representation of the oAuthClientAuthorization, and an error, if there is any. +func (c *oAuthClientAuthorizations) Create(ctx context.Context, oAuthClientAuthorization *v1.OAuthClientAuthorization, opts metav1.CreateOptions) (result *v1.OAuthClientAuthorization, err error) { + result = &v1.OAuthClientAuthorization{} + err = c.client.Post(). + Resource("oauthclientauthorizations"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(oAuthClientAuthorization). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a oAuthClientAuthorization and updates it. Returns the server's representation of the oAuthClientAuthorization, and an error, if there is any. +func (c *oAuthClientAuthorizations) Update(ctx context.Context, oAuthClientAuthorization *v1.OAuthClientAuthorization, opts metav1.UpdateOptions) (result *v1.OAuthClientAuthorization, err error) { + result = &v1.OAuthClientAuthorization{} + err = c.client.Put(). + Resource("oauthclientauthorizations"). + Name(oAuthClientAuthorization.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(oAuthClientAuthorization). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the oAuthClientAuthorization and deletes it. Returns an error if one occurs. +func (c *oAuthClientAuthorizations) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("oauthclientauthorizations"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *oAuthClientAuthorizations) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("oauthclientauthorizations"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched oAuthClientAuthorization. +func (c *oAuthClientAuthorizations) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.OAuthClientAuthorization, err error) { + result = &v1.OAuthClientAuthorization{} + err = c.client.Patch(pt). + Resource("oauthclientauthorizations"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/oauth/informers/externalversions/factory.go b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/factory.go new file mode 100644 index 0000000000000..13c201b24eea6 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/factory.go @@ -0,0 +1,164 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + reflect "reflect" + sync "sync" + time "time" + + versioned "github.com/openshift/client-go/oauth/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/oauth/informers/externalversions/internalinterfaces" + oauth "github.com/openshift/client-go/oauth/informers/externalversions/oauth" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// SharedInformerOption defines the functional option type for SharedInformerFactory. +type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory + +type sharedInformerFactory struct { + client versioned.Interface + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc + lock sync.Mutex + defaultResync time.Duration + customResync map[reflect.Type]time.Duration + + informers map[reflect.Type]cache.SharedIndexInformer + // startedInformers is used for tracking which informers have been started. + // This allows Start() to be called multiple times safely. + startedInformers map[reflect.Type]bool +} + +// WithCustomResyncConfig sets a custom resync period for the specified informer types. +func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + for k, v := range resyncConfig { + factory.customResync[reflect.TypeOf(k)] = v + } + return factory + } +} + +// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory. +func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.tweakListOptions = tweakListOptions + return factory + } +} + +// WithNamespace limits the SharedInformerFactory to the specified namespace. +func WithNamespace(namespace string) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.namespace = namespace + return factory + } +} + +// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. +func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync) +} + +// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory. +// Listers obtained via this SharedInformerFactory will be subject to the same filters +// as specified here. +// Deprecated: Please use NewSharedInformerFactoryWithOptions instead +func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions)) +} + +// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options. +func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory { + factory := &sharedInformerFactory{ + client: client, + namespace: v1.NamespaceAll, + defaultResync: defaultResync, + informers: make(map[reflect.Type]cache.SharedIndexInformer), + startedInformers: make(map[reflect.Type]bool), + customResync: make(map[reflect.Type]time.Duration), + } + + // Apply all options + for _, opt := range options { + factory = opt(factory) + } + + return factory +} + +// Start initializes all requested informers. +func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) { + f.lock.Lock() + defer f.lock.Unlock() + + for informerType, informer := range f.informers { + if !f.startedInformers[informerType] { + go informer.Run(stopCh) + f.startedInformers[informerType] = true + } + } +} + +// WaitForCacheSync waits for all started informers' cache were synced. +func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool { + informers := func() map[reflect.Type]cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informers := map[reflect.Type]cache.SharedIndexInformer{} + for informerType, informer := range f.informers { + if f.startedInformers[informerType] { + informers[informerType] = informer + } + } + return informers + }() + + res := map[reflect.Type]bool{} + for informType, informer := range informers { + res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced) + } + return res +} + +// InternalInformerFor returns the SharedIndexInformer for obj using an internal +// client. +func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(obj) + informer, exists := f.informers[informerType] + if exists { + return informer + } + + resyncPeriod, exists := f.customResync[informerType] + if !exists { + resyncPeriod = f.defaultResync + } + + informer = newFunc(f.client, resyncPeriod) + f.informers[informerType] = informer + + return informer +} + +// SharedInformerFactory provides shared informers for resources in all known +// API group versions. +type SharedInformerFactory interface { + internalinterfaces.SharedInformerFactory + ForResource(resource schema.GroupVersionResource) (GenericInformer, error) + WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool + + Oauth() oauth.Interface +} + +func (f *sharedInformerFactory) Oauth() oauth.Interface { + return oauth.New(f, f.namespace, f.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/oauth/informers/externalversions/generic.go b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/generic.go new file mode 100644 index 0000000000000..bd51d836c8744 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/generic.go @@ -0,0 +1,52 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + "fmt" + + v1 "github.com/openshift/api/oauth/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// GenericInformer is type of SharedIndexInformer which will locate and delegate to other +// sharedInformers based on type +type GenericInformer interface { + Informer() cache.SharedIndexInformer + Lister() cache.GenericLister +} + +type genericInformer struct { + informer cache.SharedIndexInformer + resource schema.GroupResource +} + +// Informer returns the SharedIndexInformer. +func (f *genericInformer) Informer() cache.SharedIndexInformer { + return f.informer +} + +// Lister returns the GenericLister. +func (f *genericInformer) Lister() cache.GenericLister { + return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource) +} + +// ForResource gives generic access to a shared informer of the matching type +// TODO extend this to unknown resources with a client pool +func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { + switch resource { + // Group=oauth.openshift.io, Version=v1 + case v1.SchemeGroupVersion.WithResource("oauthaccesstokens"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Oauth().V1().OAuthAccessTokens().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("oauthauthorizetokens"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Oauth().V1().OAuthAuthorizeTokens().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("oauthclients"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Oauth().V1().OAuthClients().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("oauthclientauthorizations"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Oauth().V1().OAuthClientAuthorizations().Informer()}, nil + + } + + return nil, fmt.Errorf("no informer found for %v", resource) +} diff --git a/vendor/github.com/openshift/client-go/oauth/informers/externalversions/internalinterfaces/factory_interfaces.go b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/internalinterfaces/factory_interfaces.go new file mode 100644 index 0000000000000..968f52798481f --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -0,0 +1,24 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package internalinterfaces + +import ( + time "time" + + versioned "github.com/openshift/client-go/oauth/clientset/versioned" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + cache "k8s.io/client-go/tools/cache" +) + +// NewInformerFunc takes versioned.Interface and time.Duration to return a SharedIndexInformer. +type NewInformerFunc func(versioned.Interface, time.Duration) cache.SharedIndexInformer + +// SharedInformerFactory a small interface to allow for adding an informer without an import cycle +type SharedInformerFactory interface { + Start(stopCh <-chan struct{}) + InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer +} + +// TweakListOptionsFunc is a function that transforms a v1.ListOptions. +type TweakListOptionsFunc func(*v1.ListOptions) diff --git a/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/interface.go b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/interface.go new file mode 100644 index 0000000000000..8afb627c64914 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/interface.go @@ -0,0 +1,30 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package oauth + +import ( + internalinterfaces "github.com/openshift/client-go/oauth/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1 provides access to shared informers for resources in V1. + V1() v1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1 returns a new v1.Interface. +func (g *group) V1() v1.Interface { + return v1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/interface.go b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/interface.go new file mode 100644 index 0000000000000..241c47aa68b29 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/interface.go @@ -0,0 +1,50 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + internalinterfaces "github.com/openshift/client-go/oauth/informers/externalversions/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // OAuthAccessTokens returns a OAuthAccessTokenInformer. + OAuthAccessTokens() OAuthAccessTokenInformer + // OAuthAuthorizeTokens returns a OAuthAuthorizeTokenInformer. + OAuthAuthorizeTokens() OAuthAuthorizeTokenInformer + // OAuthClients returns a OAuthClientInformer. + OAuthClients() OAuthClientInformer + // OAuthClientAuthorizations returns a OAuthClientAuthorizationInformer. + OAuthClientAuthorizations() OAuthClientAuthorizationInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// OAuthAccessTokens returns a OAuthAccessTokenInformer. +func (v *version) OAuthAccessTokens() OAuthAccessTokenInformer { + return &oAuthAccessTokenInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + +// OAuthAuthorizeTokens returns a OAuthAuthorizeTokenInformer. +func (v *version) OAuthAuthorizeTokens() OAuthAuthorizeTokenInformer { + return &oAuthAuthorizeTokenInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + +// OAuthClients returns a OAuthClientInformer. +func (v *version) OAuthClients() OAuthClientInformer { + return &oAuthClientInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + +// OAuthClientAuthorizations returns a OAuthClientAuthorizationInformer. +func (v *version) OAuthClientAuthorizations() OAuthClientAuthorizationInformer { + return &oAuthClientAuthorizationInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthaccesstoken.go b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthaccesstoken.go new file mode 100644 index 0000000000000..35c1b59b26bd2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthaccesstoken.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + oauthv1 "github.com/openshift/api/oauth/v1" + versioned "github.com/openshift/client-go/oauth/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/oauth/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/oauth/listers/oauth/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// OAuthAccessTokenInformer provides access to a shared informer and lister for +// OAuthAccessTokens. +type OAuthAccessTokenInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.OAuthAccessTokenLister +} + +type oAuthAccessTokenInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewOAuthAccessTokenInformer constructs a new informer for OAuthAccessToken type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewOAuthAccessTokenInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredOAuthAccessTokenInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredOAuthAccessTokenInformer constructs a new informer for OAuthAccessToken type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredOAuthAccessTokenInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.OauthV1().OAuthAccessTokens().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.OauthV1().OAuthAccessTokens().Watch(context.TODO(), options) + }, + }, + &oauthv1.OAuthAccessToken{}, + resyncPeriod, + indexers, + ) +} + +func (f *oAuthAccessTokenInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredOAuthAccessTokenInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *oAuthAccessTokenInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&oauthv1.OAuthAccessToken{}, f.defaultInformer) +} + +func (f *oAuthAccessTokenInformer) Lister() v1.OAuthAccessTokenLister { + return v1.NewOAuthAccessTokenLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthauthorizetoken.go b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthauthorizetoken.go new file mode 100644 index 0000000000000..1c9ff0946a742 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthauthorizetoken.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + oauthv1 "github.com/openshift/api/oauth/v1" + versioned "github.com/openshift/client-go/oauth/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/oauth/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/oauth/listers/oauth/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// OAuthAuthorizeTokenInformer provides access to a shared informer and lister for +// OAuthAuthorizeTokens. +type OAuthAuthorizeTokenInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.OAuthAuthorizeTokenLister +} + +type oAuthAuthorizeTokenInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewOAuthAuthorizeTokenInformer constructs a new informer for OAuthAuthorizeToken type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewOAuthAuthorizeTokenInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredOAuthAuthorizeTokenInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredOAuthAuthorizeTokenInformer constructs a new informer for OAuthAuthorizeToken type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredOAuthAuthorizeTokenInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.OauthV1().OAuthAuthorizeTokens().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.OauthV1().OAuthAuthorizeTokens().Watch(context.TODO(), options) + }, + }, + &oauthv1.OAuthAuthorizeToken{}, + resyncPeriod, + indexers, + ) +} + +func (f *oAuthAuthorizeTokenInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredOAuthAuthorizeTokenInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *oAuthAuthorizeTokenInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&oauthv1.OAuthAuthorizeToken{}, f.defaultInformer) +} + +func (f *oAuthAuthorizeTokenInformer) Lister() v1.OAuthAuthorizeTokenLister { + return v1.NewOAuthAuthorizeTokenLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthclient.go b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthclient.go new file mode 100644 index 0000000000000..58cf1f786b651 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthclient.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + oauthv1 "github.com/openshift/api/oauth/v1" + versioned "github.com/openshift/client-go/oauth/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/oauth/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/oauth/listers/oauth/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// OAuthClientInformer provides access to a shared informer and lister for +// OAuthClients. +type OAuthClientInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.OAuthClientLister +} + +type oAuthClientInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewOAuthClientInformer constructs a new informer for OAuthClient type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewOAuthClientInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredOAuthClientInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredOAuthClientInformer constructs a new informer for OAuthClient type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredOAuthClientInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.OauthV1().OAuthClients().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.OauthV1().OAuthClients().Watch(context.TODO(), options) + }, + }, + &oauthv1.OAuthClient{}, + resyncPeriod, + indexers, + ) +} + +func (f *oAuthClientInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredOAuthClientInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *oAuthClientInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&oauthv1.OAuthClient{}, f.defaultInformer) +} + +func (f *oAuthClientInformer) Lister() v1.OAuthClientLister { + return v1.NewOAuthClientLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthclientauthorization.go b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthclientauthorization.go new file mode 100644 index 0000000000000..df8f93d4f12d5 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1/oauthclientauthorization.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + oauthv1 "github.com/openshift/api/oauth/v1" + versioned "github.com/openshift/client-go/oauth/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/oauth/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/oauth/listers/oauth/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// OAuthClientAuthorizationInformer provides access to a shared informer and lister for +// OAuthClientAuthorizations. +type OAuthClientAuthorizationInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.OAuthClientAuthorizationLister +} + +type oAuthClientAuthorizationInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewOAuthClientAuthorizationInformer constructs a new informer for OAuthClientAuthorization type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewOAuthClientAuthorizationInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredOAuthClientAuthorizationInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredOAuthClientAuthorizationInformer constructs a new informer for OAuthClientAuthorization type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredOAuthClientAuthorizationInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.OauthV1().OAuthClientAuthorizations().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.OauthV1().OAuthClientAuthorizations().Watch(context.TODO(), options) + }, + }, + &oauthv1.OAuthClientAuthorization{}, + resyncPeriod, + indexers, + ) +} + +func (f *oAuthClientAuthorizationInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredOAuthClientAuthorizationInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *oAuthClientAuthorizationInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&oauthv1.OAuthClientAuthorization{}, f.defaultInformer) +} + +func (f *oAuthClientAuthorizationInformer) Lister() v1.OAuthClientAuthorizationLister { + return v1.NewOAuthClientAuthorizationLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/expansion_generated.go b/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/expansion_generated.go new file mode 100644 index 0000000000000..e7d8b5eb59e18 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/expansion_generated.go @@ -0,0 +1,19 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +// OAuthAccessTokenListerExpansion allows custom methods to be added to +// OAuthAccessTokenLister. +type OAuthAccessTokenListerExpansion interface{} + +// OAuthAuthorizeTokenListerExpansion allows custom methods to be added to +// OAuthAuthorizeTokenLister. +type OAuthAuthorizeTokenListerExpansion interface{} + +// OAuthClientListerExpansion allows custom methods to be added to +// OAuthClientLister. +type OAuthClientListerExpansion interface{} + +// OAuthClientAuthorizationListerExpansion allows custom methods to be added to +// OAuthClientAuthorizationLister. +type OAuthClientAuthorizationListerExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthaccesstoken.go b/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthaccesstoken.go new file mode 100644 index 0000000000000..8486f9181981f --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthaccesstoken.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/oauth/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// OAuthAccessTokenLister helps list OAuthAccessTokens. +// All objects returned here must be treated as read-only. +type OAuthAccessTokenLister interface { + // List lists all OAuthAccessTokens in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.OAuthAccessToken, err error) + // Get retrieves the OAuthAccessToken from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.OAuthAccessToken, error) + OAuthAccessTokenListerExpansion +} + +// oAuthAccessTokenLister implements the OAuthAccessTokenLister interface. +type oAuthAccessTokenLister struct { + indexer cache.Indexer +} + +// NewOAuthAccessTokenLister returns a new OAuthAccessTokenLister. +func NewOAuthAccessTokenLister(indexer cache.Indexer) OAuthAccessTokenLister { + return &oAuthAccessTokenLister{indexer: indexer} +} + +// List lists all OAuthAccessTokens in the indexer. +func (s *oAuthAccessTokenLister) List(selector labels.Selector) (ret []*v1.OAuthAccessToken, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.OAuthAccessToken)) + }) + return ret, err +} + +// Get retrieves the OAuthAccessToken from the index for a given name. +func (s *oAuthAccessTokenLister) Get(name string) (*v1.OAuthAccessToken, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("oauthaccesstoken"), name) + } + return obj.(*v1.OAuthAccessToken), nil +} diff --git a/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthauthorizetoken.go b/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthauthorizetoken.go new file mode 100644 index 0000000000000..d42a247b52756 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthauthorizetoken.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/oauth/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// OAuthAuthorizeTokenLister helps list OAuthAuthorizeTokens. +// All objects returned here must be treated as read-only. +type OAuthAuthorizeTokenLister interface { + // List lists all OAuthAuthorizeTokens in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.OAuthAuthorizeToken, err error) + // Get retrieves the OAuthAuthorizeToken from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.OAuthAuthorizeToken, error) + OAuthAuthorizeTokenListerExpansion +} + +// oAuthAuthorizeTokenLister implements the OAuthAuthorizeTokenLister interface. +type oAuthAuthorizeTokenLister struct { + indexer cache.Indexer +} + +// NewOAuthAuthorizeTokenLister returns a new OAuthAuthorizeTokenLister. +func NewOAuthAuthorizeTokenLister(indexer cache.Indexer) OAuthAuthorizeTokenLister { + return &oAuthAuthorizeTokenLister{indexer: indexer} +} + +// List lists all OAuthAuthorizeTokens in the indexer. +func (s *oAuthAuthorizeTokenLister) List(selector labels.Selector) (ret []*v1.OAuthAuthorizeToken, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.OAuthAuthorizeToken)) + }) + return ret, err +} + +// Get retrieves the OAuthAuthorizeToken from the index for a given name. +func (s *oAuthAuthorizeTokenLister) Get(name string) (*v1.OAuthAuthorizeToken, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("oauthauthorizetoken"), name) + } + return obj.(*v1.OAuthAuthorizeToken), nil +} diff --git a/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthclient.go b/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthclient.go new file mode 100644 index 0000000000000..51c1b62a9f373 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthclient.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/oauth/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// OAuthClientLister helps list OAuthClients. +// All objects returned here must be treated as read-only. +type OAuthClientLister interface { + // List lists all OAuthClients in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.OAuthClient, err error) + // Get retrieves the OAuthClient from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.OAuthClient, error) + OAuthClientListerExpansion +} + +// oAuthClientLister implements the OAuthClientLister interface. +type oAuthClientLister struct { + indexer cache.Indexer +} + +// NewOAuthClientLister returns a new OAuthClientLister. +func NewOAuthClientLister(indexer cache.Indexer) OAuthClientLister { + return &oAuthClientLister{indexer: indexer} +} + +// List lists all OAuthClients in the indexer. +func (s *oAuthClientLister) List(selector labels.Selector) (ret []*v1.OAuthClient, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.OAuthClient)) + }) + return ret, err +} + +// Get retrieves the OAuthClient from the index for a given name. +func (s *oAuthClientLister) Get(name string) (*v1.OAuthClient, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("oauthclient"), name) + } + return obj.(*v1.OAuthClient), nil +} diff --git a/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthclientauthorization.go b/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthclientauthorization.go new file mode 100644 index 0000000000000..2627a03e219e4 --- /dev/null +++ b/vendor/github.com/openshift/client-go/oauth/listers/oauth/v1/oauthclientauthorization.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/oauth/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// OAuthClientAuthorizationLister helps list OAuthClientAuthorizations. +// All objects returned here must be treated as read-only. +type OAuthClientAuthorizationLister interface { + // List lists all OAuthClientAuthorizations in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.OAuthClientAuthorization, err error) + // Get retrieves the OAuthClientAuthorization from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.OAuthClientAuthorization, error) + OAuthClientAuthorizationListerExpansion +} + +// oAuthClientAuthorizationLister implements the OAuthClientAuthorizationLister interface. +type oAuthClientAuthorizationLister struct { + indexer cache.Indexer +} + +// NewOAuthClientAuthorizationLister returns a new OAuthClientAuthorizationLister. +func NewOAuthClientAuthorizationLister(indexer cache.Indexer) OAuthClientAuthorizationLister { + return &oAuthClientAuthorizationLister{indexer: indexer} +} + +// List lists all OAuthClientAuthorizations in the indexer. +func (s *oAuthClientAuthorizationLister) List(selector labels.Selector) (ret []*v1.OAuthClientAuthorization, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.OAuthClientAuthorization)) + }) + return ret, err +} + +// Get retrieves the OAuthClientAuthorization from the index for a given name. +func (s *oAuthClientAuthorizationLister) Get(name string) (*v1.OAuthClientAuthorization, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("oauthclientauthorization"), name) + } + return obj.(*v1.OAuthClientAuthorization), nil +} diff --git a/vendor/github.com/openshift/client-go/quota/clientset/versioned/clientset.go b/vendor/github.com/openshift/client-go/quota/clientset/versioned/clientset.go new file mode 100644 index 0000000000000..8252c33c7a3ab --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/clientset/versioned/clientset.go @@ -0,0 +1,81 @@ +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + + quotav1 "github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1" + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + QuotaV1() quotav1.QuotaV1Interface +} + +// Clientset contains the clients for groups. Each group has exactly one +// version included in a Clientset. +type Clientset struct { + *discovery.DiscoveryClient + quotaV1 *quotav1.QuotaV1Client +} + +// QuotaV1 retrieves the QuotaV1Client +func (c *Clientset) QuotaV1() quotav1.QuotaV1Interface { + return c.quotaV1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + var cs Clientset + var err error + cs.quotaV1, err = quotav1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + var cs Clientset + cs.quotaV1 = quotav1.NewForConfigOrDie(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) + return &cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.quotaV1 = quotav1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/vendor/github.com/openshift/client-go/quota/clientset/versioned/doc.go b/vendor/github.com/openshift/client-go/quota/clientset/versioned/doc.go new file mode 100644 index 0000000000000..0e0c2a8900e2c --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/clientset/versioned/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated clientset. +package versioned diff --git a/vendor/github.com/openshift/client-go/quota/clientset/versioned/scheme/doc.go b/vendor/github.com/openshift/client-go/quota/clientset/versioned/scheme/doc.go new file mode 100644 index 0000000000000..14db57a58f8d2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/clientset/versioned/scheme/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package contains the scheme of the automatically generated clientset. +package scheme diff --git a/vendor/github.com/openshift/client-go/quota/clientset/versioned/scheme/register.go b/vendor/github.com/openshift/client-go/quota/clientset/versioned/scheme/register.go new file mode 100644 index 0000000000000..bebce254ad65b --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/clientset/versioned/scheme/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package scheme + +import ( + quotav1 "github.com/openshift/api/quota/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + quotav1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/appliedclusterresourcequota.go b/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/appliedclusterresourcequota.go new file mode 100644 index 0000000000000..6c260129061bc --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/appliedclusterresourcequota.go @@ -0,0 +1,70 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + quotav1 "github.com/openshift/api/quota/v1" + scheme "github.com/openshift/client-go/quota/clientset/versioned/scheme" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// AppliedClusterResourceQuotasGetter has a method to return a AppliedClusterResourceQuotaInterface. +// A group's client should implement this interface. +type AppliedClusterResourceQuotasGetter interface { + AppliedClusterResourceQuotas(namespace string) AppliedClusterResourceQuotaInterface +} + +// AppliedClusterResourceQuotaInterface has methods to work with AppliedClusterResourceQuota resources. +type AppliedClusterResourceQuotaInterface interface { + Get(ctx context.Context, name string, opts v1.GetOptions) (*quotav1.AppliedClusterResourceQuota, error) + List(ctx context.Context, opts v1.ListOptions) (*quotav1.AppliedClusterResourceQuotaList, error) + AppliedClusterResourceQuotaExpansion +} + +// appliedClusterResourceQuotas implements AppliedClusterResourceQuotaInterface +type appliedClusterResourceQuotas struct { + client rest.Interface + ns string +} + +// newAppliedClusterResourceQuotas returns a AppliedClusterResourceQuotas +func newAppliedClusterResourceQuotas(c *QuotaV1Client, namespace string) *appliedClusterResourceQuotas { + return &appliedClusterResourceQuotas{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the appliedClusterResourceQuota, and returns the corresponding appliedClusterResourceQuota object, and an error if there is any. +func (c *appliedClusterResourceQuotas) Get(ctx context.Context, name string, options v1.GetOptions) (result *quotav1.AppliedClusterResourceQuota, err error) { + result = "av1.AppliedClusterResourceQuota{} + err = c.client.Get(). + Namespace(c.ns). + Resource("appliedclusterresourcequotas"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of AppliedClusterResourceQuotas that match those selectors. +func (c *appliedClusterResourceQuotas) List(ctx context.Context, opts v1.ListOptions) (result *quotav1.AppliedClusterResourceQuotaList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = "av1.AppliedClusterResourceQuotaList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("appliedclusterresourcequotas"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/clusterresourcequota.go b/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/clusterresourcequota.go new file mode 100644 index 0000000000000..89215a5d0ac5a --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/clusterresourcequota.go @@ -0,0 +1,168 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/quota/v1" + scheme "github.com/openshift/client-go/quota/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// ClusterResourceQuotasGetter has a method to return a ClusterResourceQuotaInterface. +// A group's client should implement this interface. +type ClusterResourceQuotasGetter interface { + ClusterResourceQuotas() ClusterResourceQuotaInterface +} + +// ClusterResourceQuotaInterface has methods to work with ClusterResourceQuota resources. +type ClusterResourceQuotaInterface interface { + Create(ctx context.Context, clusterResourceQuota *v1.ClusterResourceQuota, opts metav1.CreateOptions) (*v1.ClusterResourceQuota, error) + Update(ctx context.Context, clusterResourceQuota *v1.ClusterResourceQuota, opts metav1.UpdateOptions) (*v1.ClusterResourceQuota, error) + UpdateStatus(ctx context.Context, clusterResourceQuota *v1.ClusterResourceQuota, opts metav1.UpdateOptions) (*v1.ClusterResourceQuota, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ClusterResourceQuota, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ClusterResourceQuotaList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterResourceQuota, err error) + ClusterResourceQuotaExpansion +} + +// clusterResourceQuotas implements ClusterResourceQuotaInterface +type clusterResourceQuotas struct { + client rest.Interface +} + +// newClusterResourceQuotas returns a ClusterResourceQuotas +func newClusterResourceQuotas(c *QuotaV1Client) *clusterResourceQuotas { + return &clusterResourceQuotas{ + client: c.RESTClient(), + } +} + +// Get takes name of the clusterResourceQuota, and returns the corresponding clusterResourceQuota object, and an error if there is any. +func (c *clusterResourceQuotas) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ClusterResourceQuota, err error) { + result = &v1.ClusterResourceQuota{} + err = c.client.Get(). + Resource("clusterresourcequotas"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ClusterResourceQuotas that match those selectors. +func (c *clusterResourceQuotas) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ClusterResourceQuotaList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ClusterResourceQuotaList{} + err = c.client.Get(). + Resource("clusterresourcequotas"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested clusterResourceQuotas. +func (c *clusterResourceQuotas) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("clusterresourcequotas"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a clusterResourceQuota and creates it. Returns the server's representation of the clusterResourceQuota, and an error, if there is any. +func (c *clusterResourceQuotas) Create(ctx context.Context, clusterResourceQuota *v1.ClusterResourceQuota, opts metav1.CreateOptions) (result *v1.ClusterResourceQuota, err error) { + result = &v1.ClusterResourceQuota{} + err = c.client.Post(). + Resource("clusterresourcequotas"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterResourceQuota). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a clusterResourceQuota and updates it. Returns the server's representation of the clusterResourceQuota, and an error, if there is any. +func (c *clusterResourceQuotas) Update(ctx context.Context, clusterResourceQuota *v1.ClusterResourceQuota, opts metav1.UpdateOptions) (result *v1.ClusterResourceQuota, err error) { + result = &v1.ClusterResourceQuota{} + err = c.client.Put(). + Resource("clusterresourcequotas"). + Name(clusterResourceQuota.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterResourceQuota). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *clusterResourceQuotas) UpdateStatus(ctx context.Context, clusterResourceQuota *v1.ClusterResourceQuota, opts metav1.UpdateOptions) (result *v1.ClusterResourceQuota, err error) { + result = &v1.ClusterResourceQuota{} + err = c.client.Put(). + Resource("clusterresourcequotas"). + Name(clusterResourceQuota.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(clusterResourceQuota). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the clusterResourceQuota and deletes it. Returns an error if one occurs. +func (c *clusterResourceQuotas) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("clusterresourcequotas"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *clusterResourceQuotas) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("clusterresourcequotas"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched clusterResourceQuota. +func (c *clusterResourceQuotas) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterResourceQuota, err error) { + result = &v1.ClusterResourceQuota{} + err = c.client.Patch(pt). + Resource("clusterresourcequotas"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/doc.go b/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/doc.go new file mode 100644 index 0000000000000..225e6b2be34f2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/generated_expansion.go b/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/generated_expansion.go new file mode 100644 index 0000000000000..c79f16776b035 --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/generated_expansion.go @@ -0,0 +1,7 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type AppliedClusterResourceQuotaExpansion interface{} + +type ClusterResourceQuotaExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/quota_client.go b/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/quota_client.go new file mode 100644 index 0000000000000..325bdc0046093 --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1/quota_client.go @@ -0,0 +1,78 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/quota/v1" + "github.com/openshift/client-go/quota/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type QuotaV1Interface interface { + RESTClient() rest.Interface + AppliedClusterResourceQuotasGetter + ClusterResourceQuotasGetter +} + +// QuotaV1Client is used to interact with features provided by the quota.openshift.io group. +type QuotaV1Client struct { + restClient rest.Interface +} + +func (c *QuotaV1Client) AppliedClusterResourceQuotas(namespace string) AppliedClusterResourceQuotaInterface { + return newAppliedClusterResourceQuotas(c, namespace) +} + +func (c *QuotaV1Client) ClusterResourceQuotas() ClusterResourceQuotaInterface { + return newClusterResourceQuotas(c) +} + +// NewForConfig creates a new QuotaV1Client for the given config. +func NewForConfig(c *rest.Config) (*QuotaV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &QuotaV1Client{client}, nil +} + +// NewForConfigOrDie creates a new QuotaV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *QuotaV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new QuotaV1Client for the given RESTClient. +func New(c rest.Interface) *QuotaV1Client { + return &QuotaV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *QuotaV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/github.com/openshift/client-go/quota/informers/externalversions/factory.go b/vendor/github.com/openshift/client-go/quota/informers/externalversions/factory.go new file mode 100644 index 0000000000000..0481c6da7b20d --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/informers/externalversions/factory.go @@ -0,0 +1,164 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + reflect "reflect" + sync "sync" + time "time" + + versioned "github.com/openshift/client-go/quota/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/quota/informers/externalversions/internalinterfaces" + quota "github.com/openshift/client-go/quota/informers/externalversions/quota" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// SharedInformerOption defines the functional option type for SharedInformerFactory. +type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory + +type sharedInformerFactory struct { + client versioned.Interface + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc + lock sync.Mutex + defaultResync time.Duration + customResync map[reflect.Type]time.Duration + + informers map[reflect.Type]cache.SharedIndexInformer + // startedInformers is used for tracking which informers have been started. + // This allows Start() to be called multiple times safely. + startedInformers map[reflect.Type]bool +} + +// WithCustomResyncConfig sets a custom resync period for the specified informer types. +func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + for k, v := range resyncConfig { + factory.customResync[reflect.TypeOf(k)] = v + } + return factory + } +} + +// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory. +func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.tweakListOptions = tweakListOptions + return factory + } +} + +// WithNamespace limits the SharedInformerFactory to the specified namespace. +func WithNamespace(namespace string) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.namespace = namespace + return factory + } +} + +// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. +func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync) +} + +// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory. +// Listers obtained via this SharedInformerFactory will be subject to the same filters +// as specified here. +// Deprecated: Please use NewSharedInformerFactoryWithOptions instead +func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions)) +} + +// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options. +func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory { + factory := &sharedInformerFactory{ + client: client, + namespace: v1.NamespaceAll, + defaultResync: defaultResync, + informers: make(map[reflect.Type]cache.SharedIndexInformer), + startedInformers: make(map[reflect.Type]bool), + customResync: make(map[reflect.Type]time.Duration), + } + + // Apply all options + for _, opt := range options { + factory = opt(factory) + } + + return factory +} + +// Start initializes all requested informers. +func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) { + f.lock.Lock() + defer f.lock.Unlock() + + for informerType, informer := range f.informers { + if !f.startedInformers[informerType] { + go informer.Run(stopCh) + f.startedInformers[informerType] = true + } + } +} + +// WaitForCacheSync waits for all started informers' cache were synced. +func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool { + informers := func() map[reflect.Type]cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informers := map[reflect.Type]cache.SharedIndexInformer{} + for informerType, informer := range f.informers { + if f.startedInformers[informerType] { + informers[informerType] = informer + } + } + return informers + }() + + res := map[reflect.Type]bool{} + for informType, informer := range informers { + res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced) + } + return res +} + +// InternalInformerFor returns the SharedIndexInformer for obj using an internal +// client. +func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(obj) + informer, exists := f.informers[informerType] + if exists { + return informer + } + + resyncPeriod, exists := f.customResync[informerType] + if !exists { + resyncPeriod = f.defaultResync + } + + informer = newFunc(f.client, resyncPeriod) + f.informers[informerType] = informer + + return informer +} + +// SharedInformerFactory provides shared informers for resources in all known +// API group versions. +type SharedInformerFactory interface { + internalinterfaces.SharedInformerFactory + ForResource(resource schema.GroupVersionResource) (GenericInformer, error) + WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool + + Quota() quota.Interface +} + +func (f *sharedInformerFactory) Quota() quota.Interface { + return quota.New(f, f.namespace, f.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/quota/informers/externalversions/generic.go b/vendor/github.com/openshift/client-go/quota/informers/externalversions/generic.go new file mode 100644 index 0000000000000..d739a07c9c5a0 --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/informers/externalversions/generic.go @@ -0,0 +1,46 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + "fmt" + + v1 "github.com/openshift/api/quota/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// GenericInformer is type of SharedIndexInformer which will locate and delegate to other +// sharedInformers based on type +type GenericInformer interface { + Informer() cache.SharedIndexInformer + Lister() cache.GenericLister +} + +type genericInformer struct { + informer cache.SharedIndexInformer + resource schema.GroupResource +} + +// Informer returns the SharedIndexInformer. +func (f *genericInformer) Informer() cache.SharedIndexInformer { + return f.informer +} + +// Lister returns the GenericLister. +func (f *genericInformer) Lister() cache.GenericLister { + return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource) +} + +// ForResource gives generic access to a shared informer of the matching type +// TODO extend this to unknown resources with a client pool +func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { + switch resource { + // Group=quota.openshift.io, Version=v1 + case v1.SchemeGroupVersion.WithResource("clusterresourcequotas"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Quota().V1().ClusterResourceQuotas().Informer()}, nil + + } + + return nil, fmt.Errorf("no informer found for %v", resource) +} diff --git a/vendor/github.com/openshift/client-go/quota/informers/externalversions/internalinterfaces/factory_interfaces.go b/vendor/github.com/openshift/client-go/quota/informers/externalversions/internalinterfaces/factory_interfaces.go new file mode 100644 index 0000000000000..3e3f07fc30976 --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -0,0 +1,24 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package internalinterfaces + +import ( + time "time" + + versioned "github.com/openshift/client-go/quota/clientset/versioned" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + cache "k8s.io/client-go/tools/cache" +) + +// NewInformerFunc takes versioned.Interface and time.Duration to return a SharedIndexInformer. +type NewInformerFunc func(versioned.Interface, time.Duration) cache.SharedIndexInformer + +// SharedInformerFactory a small interface to allow for adding an informer without an import cycle +type SharedInformerFactory interface { + Start(stopCh <-chan struct{}) + InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer +} + +// TweakListOptionsFunc is a function that transforms a v1.ListOptions. +type TweakListOptionsFunc func(*v1.ListOptions) diff --git a/vendor/github.com/openshift/client-go/quota/informers/externalversions/quota/interface.go b/vendor/github.com/openshift/client-go/quota/informers/externalversions/quota/interface.go new file mode 100644 index 0000000000000..5df3c875230ff --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/informers/externalversions/quota/interface.go @@ -0,0 +1,30 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package quota + +import ( + internalinterfaces "github.com/openshift/client-go/quota/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/quota/informers/externalversions/quota/v1" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1 provides access to shared informers for resources in V1. + V1() v1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1 returns a new v1.Interface. +func (g *group) V1() v1.Interface { + return v1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/quota/informers/externalversions/quota/v1/clusterresourcequota.go b/vendor/github.com/openshift/client-go/quota/informers/externalversions/quota/v1/clusterresourcequota.go new file mode 100644 index 0000000000000..cb8eb0e30829c --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/informers/externalversions/quota/v1/clusterresourcequota.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + quotav1 "github.com/openshift/api/quota/v1" + versioned "github.com/openshift/client-go/quota/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/quota/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/quota/listers/quota/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// ClusterResourceQuotaInformer provides access to a shared informer and lister for +// ClusterResourceQuotas. +type ClusterResourceQuotaInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.ClusterResourceQuotaLister +} + +type clusterResourceQuotaInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewClusterResourceQuotaInformer constructs a new informer for ClusterResourceQuota type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewClusterResourceQuotaInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredClusterResourceQuotaInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredClusterResourceQuotaInformer constructs a new informer for ClusterResourceQuota type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredClusterResourceQuotaInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.QuotaV1().ClusterResourceQuotas().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.QuotaV1().ClusterResourceQuotas().Watch(context.TODO(), options) + }, + }, + "av1.ClusterResourceQuota{}, + resyncPeriod, + indexers, + ) +} + +func (f *clusterResourceQuotaInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredClusterResourceQuotaInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *clusterResourceQuotaInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor("av1.ClusterResourceQuota{}, f.defaultInformer) +} + +func (f *clusterResourceQuotaInformer) Lister() v1.ClusterResourceQuotaLister { + return v1.NewClusterResourceQuotaLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/quota/informers/externalversions/quota/v1/interface.go b/vendor/github.com/openshift/client-go/quota/informers/externalversions/quota/v1/interface.go new file mode 100644 index 0000000000000..600eccd5109f4 --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/informers/externalversions/quota/v1/interface.go @@ -0,0 +1,29 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + internalinterfaces "github.com/openshift/client-go/quota/informers/externalversions/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // ClusterResourceQuotas returns a ClusterResourceQuotaInformer. + ClusterResourceQuotas() ClusterResourceQuotaInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// ClusterResourceQuotas returns a ClusterResourceQuotaInformer. +func (v *version) ClusterResourceQuotas() ClusterResourceQuotaInformer { + return &clusterResourceQuotaInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/github.com/openshift/client-go/quota/listers/quota/v1/appliedclusterresourcequota.go b/vendor/github.com/openshift/client-go/quota/listers/quota/v1/appliedclusterresourcequota.go new file mode 100644 index 0000000000000..1f2e026b5637c --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/listers/quota/v1/appliedclusterresourcequota.go @@ -0,0 +1,83 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/quota/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// AppliedClusterResourceQuotaLister helps list AppliedClusterResourceQuotas. +// All objects returned here must be treated as read-only. +type AppliedClusterResourceQuotaLister interface { + // List lists all AppliedClusterResourceQuotas in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.AppliedClusterResourceQuota, err error) + // AppliedClusterResourceQuotas returns an object that can list and get AppliedClusterResourceQuotas. + AppliedClusterResourceQuotas(namespace string) AppliedClusterResourceQuotaNamespaceLister + AppliedClusterResourceQuotaListerExpansion +} + +// appliedClusterResourceQuotaLister implements the AppliedClusterResourceQuotaLister interface. +type appliedClusterResourceQuotaLister struct { + indexer cache.Indexer +} + +// NewAppliedClusterResourceQuotaLister returns a new AppliedClusterResourceQuotaLister. +func NewAppliedClusterResourceQuotaLister(indexer cache.Indexer) AppliedClusterResourceQuotaLister { + return &appliedClusterResourceQuotaLister{indexer: indexer} +} + +// List lists all AppliedClusterResourceQuotas in the indexer. +func (s *appliedClusterResourceQuotaLister) List(selector labels.Selector) (ret []*v1.AppliedClusterResourceQuota, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.AppliedClusterResourceQuota)) + }) + return ret, err +} + +// AppliedClusterResourceQuotas returns an object that can list and get AppliedClusterResourceQuotas. +func (s *appliedClusterResourceQuotaLister) AppliedClusterResourceQuotas(namespace string) AppliedClusterResourceQuotaNamespaceLister { + return appliedClusterResourceQuotaNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// AppliedClusterResourceQuotaNamespaceLister helps list and get AppliedClusterResourceQuotas. +// All objects returned here must be treated as read-only. +type AppliedClusterResourceQuotaNamespaceLister interface { + // List lists all AppliedClusterResourceQuotas in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.AppliedClusterResourceQuota, err error) + // Get retrieves the AppliedClusterResourceQuota from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.AppliedClusterResourceQuota, error) + AppliedClusterResourceQuotaNamespaceListerExpansion +} + +// appliedClusterResourceQuotaNamespaceLister implements the AppliedClusterResourceQuotaNamespaceLister +// interface. +type appliedClusterResourceQuotaNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all AppliedClusterResourceQuotas in the indexer for a given namespace. +func (s appliedClusterResourceQuotaNamespaceLister) List(selector labels.Selector) (ret []*v1.AppliedClusterResourceQuota, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.AppliedClusterResourceQuota)) + }) + return ret, err +} + +// Get retrieves the AppliedClusterResourceQuota from the indexer for a given namespace and name. +func (s appliedClusterResourceQuotaNamespaceLister) Get(name string) (*v1.AppliedClusterResourceQuota, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("appliedclusterresourcequota"), name) + } + return obj.(*v1.AppliedClusterResourceQuota), nil +} diff --git a/vendor/github.com/openshift/client-go/quota/listers/quota/v1/clusterresourcequota.go b/vendor/github.com/openshift/client-go/quota/listers/quota/v1/clusterresourcequota.go new file mode 100644 index 0000000000000..dffa1f0f71408 --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/listers/quota/v1/clusterresourcequota.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/quota/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// ClusterResourceQuotaLister helps list ClusterResourceQuotas. +// All objects returned here must be treated as read-only. +type ClusterResourceQuotaLister interface { + // List lists all ClusterResourceQuotas in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.ClusterResourceQuota, err error) + // Get retrieves the ClusterResourceQuota from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.ClusterResourceQuota, error) + ClusterResourceQuotaListerExpansion +} + +// clusterResourceQuotaLister implements the ClusterResourceQuotaLister interface. +type clusterResourceQuotaLister struct { + indexer cache.Indexer +} + +// NewClusterResourceQuotaLister returns a new ClusterResourceQuotaLister. +func NewClusterResourceQuotaLister(indexer cache.Indexer) ClusterResourceQuotaLister { + return &clusterResourceQuotaLister{indexer: indexer} +} + +// List lists all ClusterResourceQuotas in the indexer. +func (s *clusterResourceQuotaLister) List(selector labels.Selector) (ret []*v1.ClusterResourceQuota, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.ClusterResourceQuota)) + }) + return ret, err +} + +// Get retrieves the ClusterResourceQuota from the index for a given name. +func (s *clusterResourceQuotaLister) Get(name string) (*v1.ClusterResourceQuota, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("clusterresourcequota"), name) + } + return obj.(*v1.ClusterResourceQuota), nil +} diff --git a/vendor/github.com/openshift/client-go/quota/listers/quota/v1/expansion_generated.go b/vendor/github.com/openshift/client-go/quota/listers/quota/v1/expansion_generated.go new file mode 100644 index 0000000000000..c9ee1cd57d6b8 --- /dev/null +++ b/vendor/github.com/openshift/client-go/quota/listers/quota/v1/expansion_generated.go @@ -0,0 +1,15 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +// AppliedClusterResourceQuotaListerExpansion allows custom methods to be added to +// AppliedClusterResourceQuotaLister. +type AppliedClusterResourceQuotaListerExpansion interface{} + +// AppliedClusterResourceQuotaNamespaceListerExpansion allows custom methods to be added to +// AppliedClusterResourceQuotaNamespaceLister. +type AppliedClusterResourceQuotaNamespaceListerExpansion interface{} + +// ClusterResourceQuotaListerExpansion allows custom methods to be added to +// ClusterResourceQuotaLister. +type ClusterResourceQuotaListerExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/route/clientset/versioned/clientset.go b/vendor/github.com/openshift/client-go/route/clientset/versioned/clientset.go new file mode 100644 index 0000000000000..6689bcac66b06 --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/clientset/versioned/clientset.go @@ -0,0 +1,81 @@ +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + + routev1 "github.com/openshift/client-go/route/clientset/versioned/typed/route/v1" + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + RouteV1() routev1.RouteV1Interface +} + +// Clientset contains the clients for groups. Each group has exactly one +// version included in a Clientset. +type Clientset struct { + *discovery.DiscoveryClient + routeV1 *routev1.RouteV1Client +} + +// RouteV1 retrieves the RouteV1Client +func (c *Clientset) RouteV1() routev1.RouteV1Interface { + return c.routeV1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + var cs Clientset + var err error + cs.routeV1, err = routev1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + var cs Clientset + cs.routeV1 = routev1.NewForConfigOrDie(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) + return &cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.routeV1 = routev1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/vendor/github.com/openshift/client-go/route/clientset/versioned/doc.go b/vendor/github.com/openshift/client-go/route/clientset/versioned/doc.go new file mode 100644 index 0000000000000..0e0c2a8900e2c --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/clientset/versioned/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated clientset. +package versioned diff --git a/vendor/github.com/openshift/client-go/route/clientset/versioned/scheme/doc.go b/vendor/github.com/openshift/client-go/route/clientset/versioned/scheme/doc.go new file mode 100644 index 0000000000000..14db57a58f8d2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/clientset/versioned/scheme/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package contains the scheme of the automatically generated clientset. +package scheme diff --git a/vendor/github.com/openshift/client-go/route/clientset/versioned/scheme/register.go b/vendor/github.com/openshift/client-go/route/clientset/versioned/scheme/register.go new file mode 100644 index 0000000000000..0604e5613d7f1 --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/clientset/versioned/scheme/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package scheme + +import ( + routev1 "github.com/openshift/api/route/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + routev1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/doc.go b/vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/doc.go new file mode 100644 index 0000000000000..225e6b2be34f2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/generated_expansion.go b/vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/generated_expansion.go new file mode 100644 index 0000000000000..4f2173b6fc52a --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/generated_expansion.go @@ -0,0 +1,5 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type RouteExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/route.go b/vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/route.go new file mode 100644 index 0000000000000..adbe7e565cb36 --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/route.go @@ -0,0 +1,179 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/route/v1" + scheme "github.com/openshift/client-go/route/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// RoutesGetter has a method to return a RouteInterface. +// A group's client should implement this interface. +type RoutesGetter interface { + Routes(namespace string) RouteInterface +} + +// RouteInterface has methods to work with Route resources. +type RouteInterface interface { + Create(ctx context.Context, route *v1.Route, opts metav1.CreateOptions) (*v1.Route, error) + Update(ctx context.Context, route *v1.Route, opts metav1.UpdateOptions) (*v1.Route, error) + UpdateStatus(ctx context.Context, route *v1.Route, opts metav1.UpdateOptions) (*v1.Route, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Route, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.RouteList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Route, err error) + RouteExpansion +} + +// routes implements RouteInterface +type routes struct { + client rest.Interface + ns string +} + +// newRoutes returns a Routes +func newRoutes(c *RouteV1Client, namespace string) *routes { + return &routes{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the route, and returns the corresponding route object, and an error if there is any. +func (c *routes) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Route, err error) { + result = &v1.Route{} + err = c.client.Get(). + Namespace(c.ns). + Resource("routes"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Routes that match those selectors. +func (c *routes) List(ctx context.Context, opts metav1.ListOptions) (result *v1.RouteList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.RouteList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("routes"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested routes. +func (c *routes) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("routes"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a route and creates it. Returns the server's representation of the route, and an error, if there is any. +func (c *routes) Create(ctx context.Context, route *v1.Route, opts metav1.CreateOptions) (result *v1.Route, err error) { + result = &v1.Route{} + err = c.client.Post(). + Namespace(c.ns). + Resource("routes"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(route). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a route and updates it. Returns the server's representation of the route, and an error, if there is any. +func (c *routes) Update(ctx context.Context, route *v1.Route, opts metav1.UpdateOptions) (result *v1.Route, err error) { + result = &v1.Route{} + err = c.client.Put(). + Namespace(c.ns). + Resource("routes"). + Name(route.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(route). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *routes) UpdateStatus(ctx context.Context, route *v1.Route, opts metav1.UpdateOptions) (result *v1.Route, err error) { + result = &v1.Route{} + err = c.client.Put(). + Namespace(c.ns). + Resource("routes"). + Name(route.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(route). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the route and deletes it. Returns an error if one occurs. +func (c *routes) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("routes"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *routes) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("routes"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched route. +func (c *routes) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Route, err error) { + result = &v1.Route{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("routes"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/route_client.go b/vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/route_client.go new file mode 100644 index 0000000000000..351945deab76e --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/clientset/versioned/typed/route/v1/route_client.go @@ -0,0 +1,73 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/route/v1" + "github.com/openshift/client-go/route/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type RouteV1Interface interface { + RESTClient() rest.Interface + RoutesGetter +} + +// RouteV1Client is used to interact with features provided by the route.openshift.io group. +type RouteV1Client struct { + restClient rest.Interface +} + +func (c *RouteV1Client) Routes(namespace string) RouteInterface { + return newRoutes(c, namespace) +} + +// NewForConfig creates a new RouteV1Client for the given config. +func NewForConfig(c *rest.Config) (*RouteV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &RouteV1Client{client}, nil +} + +// NewForConfigOrDie creates a new RouteV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *RouteV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new RouteV1Client for the given RESTClient. +func New(c rest.Interface) *RouteV1Client { + return &RouteV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *RouteV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/github.com/openshift/client-go/route/informers/externalversions/factory.go b/vendor/github.com/openshift/client-go/route/informers/externalversions/factory.go new file mode 100644 index 0000000000000..cb6b89987df0f --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/informers/externalversions/factory.go @@ -0,0 +1,164 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + reflect "reflect" + sync "sync" + time "time" + + versioned "github.com/openshift/client-go/route/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/route/informers/externalversions/internalinterfaces" + route "github.com/openshift/client-go/route/informers/externalversions/route" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// SharedInformerOption defines the functional option type for SharedInformerFactory. +type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory + +type sharedInformerFactory struct { + client versioned.Interface + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc + lock sync.Mutex + defaultResync time.Duration + customResync map[reflect.Type]time.Duration + + informers map[reflect.Type]cache.SharedIndexInformer + // startedInformers is used for tracking which informers have been started. + // This allows Start() to be called multiple times safely. + startedInformers map[reflect.Type]bool +} + +// WithCustomResyncConfig sets a custom resync period for the specified informer types. +func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + for k, v := range resyncConfig { + factory.customResync[reflect.TypeOf(k)] = v + } + return factory + } +} + +// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory. +func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.tweakListOptions = tweakListOptions + return factory + } +} + +// WithNamespace limits the SharedInformerFactory to the specified namespace. +func WithNamespace(namespace string) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.namespace = namespace + return factory + } +} + +// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. +func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync) +} + +// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory. +// Listers obtained via this SharedInformerFactory will be subject to the same filters +// as specified here. +// Deprecated: Please use NewSharedInformerFactoryWithOptions instead +func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions)) +} + +// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options. +func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory { + factory := &sharedInformerFactory{ + client: client, + namespace: v1.NamespaceAll, + defaultResync: defaultResync, + informers: make(map[reflect.Type]cache.SharedIndexInformer), + startedInformers: make(map[reflect.Type]bool), + customResync: make(map[reflect.Type]time.Duration), + } + + // Apply all options + for _, opt := range options { + factory = opt(factory) + } + + return factory +} + +// Start initializes all requested informers. +func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) { + f.lock.Lock() + defer f.lock.Unlock() + + for informerType, informer := range f.informers { + if !f.startedInformers[informerType] { + go informer.Run(stopCh) + f.startedInformers[informerType] = true + } + } +} + +// WaitForCacheSync waits for all started informers' cache were synced. +func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool { + informers := func() map[reflect.Type]cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informers := map[reflect.Type]cache.SharedIndexInformer{} + for informerType, informer := range f.informers { + if f.startedInformers[informerType] { + informers[informerType] = informer + } + } + return informers + }() + + res := map[reflect.Type]bool{} + for informType, informer := range informers { + res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced) + } + return res +} + +// InternalInformerFor returns the SharedIndexInformer for obj using an internal +// client. +func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(obj) + informer, exists := f.informers[informerType] + if exists { + return informer + } + + resyncPeriod, exists := f.customResync[informerType] + if !exists { + resyncPeriod = f.defaultResync + } + + informer = newFunc(f.client, resyncPeriod) + f.informers[informerType] = informer + + return informer +} + +// SharedInformerFactory provides shared informers for resources in all known +// API group versions. +type SharedInformerFactory interface { + internalinterfaces.SharedInformerFactory + ForResource(resource schema.GroupVersionResource) (GenericInformer, error) + WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool + + Route() route.Interface +} + +func (f *sharedInformerFactory) Route() route.Interface { + return route.New(f, f.namespace, f.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/route/informers/externalversions/generic.go b/vendor/github.com/openshift/client-go/route/informers/externalversions/generic.go new file mode 100644 index 0000000000000..e0067144fd591 --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/informers/externalversions/generic.go @@ -0,0 +1,46 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + "fmt" + + v1 "github.com/openshift/api/route/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// GenericInformer is type of SharedIndexInformer which will locate and delegate to other +// sharedInformers based on type +type GenericInformer interface { + Informer() cache.SharedIndexInformer + Lister() cache.GenericLister +} + +type genericInformer struct { + informer cache.SharedIndexInformer + resource schema.GroupResource +} + +// Informer returns the SharedIndexInformer. +func (f *genericInformer) Informer() cache.SharedIndexInformer { + return f.informer +} + +// Lister returns the GenericLister. +func (f *genericInformer) Lister() cache.GenericLister { + return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource) +} + +// ForResource gives generic access to a shared informer of the matching type +// TODO extend this to unknown resources with a client pool +func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { + switch resource { + // Group=route.openshift.io, Version=v1 + case v1.SchemeGroupVersion.WithResource("routes"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Route().V1().Routes().Informer()}, nil + + } + + return nil, fmt.Errorf("no informer found for %v", resource) +} diff --git a/vendor/github.com/openshift/client-go/route/informers/externalversions/internalinterfaces/factory_interfaces.go b/vendor/github.com/openshift/client-go/route/informers/externalversions/internalinterfaces/factory_interfaces.go new file mode 100644 index 0000000000000..1f807bab67f84 --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -0,0 +1,24 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package internalinterfaces + +import ( + time "time" + + versioned "github.com/openshift/client-go/route/clientset/versioned" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + cache "k8s.io/client-go/tools/cache" +) + +// NewInformerFunc takes versioned.Interface and time.Duration to return a SharedIndexInformer. +type NewInformerFunc func(versioned.Interface, time.Duration) cache.SharedIndexInformer + +// SharedInformerFactory a small interface to allow for adding an informer without an import cycle +type SharedInformerFactory interface { + Start(stopCh <-chan struct{}) + InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer +} + +// TweakListOptionsFunc is a function that transforms a v1.ListOptions. +type TweakListOptionsFunc func(*v1.ListOptions) diff --git a/vendor/github.com/openshift/client-go/route/informers/externalversions/route/interface.go b/vendor/github.com/openshift/client-go/route/informers/externalversions/route/interface.go new file mode 100644 index 0000000000000..69e1be333c3fe --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/informers/externalversions/route/interface.go @@ -0,0 +1,30 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package route + +import ( + internalinterfaces "github.com/openshift/client-go/route/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/route/informers/externalversions/route/v1" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1 provides access to shared informers for resources in V1. + V1() v1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1 returns a new v1.Interface. +func (g *group) V1() v1.Interface { + return v1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/route/informers/externalversions/route/v1/interface.go b/vendor/github.com/openshift/client-go/route/informers/externalversions/route/v1/interface.go new file mode 100644 index 0000000000000..63ee15aecfdb5 --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/informers/externalversions/route/v1/interface.go @@ -0,0 +1,29 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + internalinterfaces "github.com/openshift/client-go/route/informers/externalversions/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // Routes returns a RouteInformer. + Routes() RouteInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// Routes returns a RouteInformer. +func (v *version) Routes() RouteInformer { + return &routeInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/github.com/openshift/client-go/route/informers/externalversions/route/v1/route.go b/vendor/github.com/openshift/client-go/route/informers/externalversions/route/v1/route.go new file mode 100644 index 0000000000000..adb8459582891 --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/informers/externalversions/route/v1/route.go @@ -0,0 +1,74 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + routev1 "github.com/openshift/api/route/v1" + versioned "github.com/openshift/client-go/route/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/route/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/route/listers/route/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// RouteInformer provides access to a shared informer and lister for +// Routes. +type RouteInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.RouteLister +} + +type routeInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewRouteInformer constructs a new informer for Route type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewRouteInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredRouteInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredRouteInformer constructs a new informer for Route type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredRouteInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.RouteV1().Routes(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.RouteV1().Routes(namespace).Watch(context.TODO(), options) + }, + }, + &routev1.Route{}, + resyncPeriod, + indexers, + ) +} + +func (f *routeInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredRouteInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *routeInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&routev1.Route{}, f.defaultInformer) +} + +func (f *routeInformer) Lister() v1.RouteLister { + return v1.NewRouteLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/route/listers/route/v1/expansion_generated.go b/vendor/github.com/openshift/client-go/route/listers/route/v1/expansion_generated.go new file mode 100644 index 0000000000000..74feb63800a13 --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/listers/route/v1/expansion_generated.go @@ -0,0 +1,11 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +// RouteListerExpansion allows custom methods to be added to +// RouteLister. +type RouteListerExpansion interface{} + +// RouteNamespaceListerExpansion allows custom methods to be added to +// RouteNamespaceLister. +type RouteNamespaceListerExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/route/listers/route/v1/route.go b/vendor/github.com/openshift/client-go/route/listers/route/v1/route.go new file mode 100644 index 0000000000000..ddf09a7f76426 --- /dev/null +++ b/vendor/github.com/openshift/client-go/route/listers/route/v1/route.go @@ -0,0 +1,83 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/route/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// RouteLister helps list Routes. +// All objects returned here must be treated as read-only. +type RouteLister interface { + // List lists all Routes in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.Route, err error) + // Routes returns an object that can list and get Routes. + Routes(namespace string) RouteNamespaceLister + RouteListerExpansion +} + +// routeLister implements the RouteLister interface. +type routeLister struct { + indexer cache.Indexer +} + +// NewRouteLister returns a new RouteLister. +func NewRouteLister(indexer cache.Indexer) RouteLister { + return &routeLister{indexer: indexer} +} + +// List lists all Routes in the indexer. +func (s *routeLister) List(selector labels.Selector) (ret []*v1.Route, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.Route)) + }) + return ret, err +} + +// Routes returns an object that can list and get Routes. +func (s *routeLister) Routes(namespace string) RouteNamespaceLister { + return routeNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// RouteNamespaceLister helps list and get Routes. +// All objects returned here must be treated as read-only. +type RouteNamespaceLister interface { + // List lists all Routes in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.Route, err error) + // Get retrieves the Route from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.Route, error) + RouteNamespaceListerExpansion +} + +// routeNamespaceLister implements the RouteNamespaceLister +// interface. +type routeNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all Routes in the indexer for a given namespace. +func (s routeNamespaceLister) List(selector labels.Selector) (ret []*v1.Route, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.Route)) + }) + return ret, err +} + +// Get retrieves the Route from the indexer for a given namespace and name. +func (s routeNamespaceLister) Get(name string) (*v1.Route, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("route"), name) + } + return obj.(*v1.Route), nil +} diff --git a/vendor/github.com/openshift/client-go/security/clientset/versioned/clientset.go b/vendor/github.com/openshift/client-go/security/clientset/versioned/clientset.go new file mode 100644 index 0000000000000..38c96c951cfec --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/clientset/versioned/clientset.go @@ -0,0 +1,81 @@ +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + + securityv1 "github.com/openshift/client-go/security/clientset/versioned/typed/security/v1" + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + SecurityV1() securityv1.SecurityV1Interface +} + +// Clientset contains the clients for groups. Each group has exactly one +// version included in a Clientset. +type Clientset struct { + *discovery.DiscoveryClient + securityV1 *securityv1.SecurityV1Client +} + +// SecurityV1 retrieves the SecurityV1Client +func (c *Clientset) SecurityV1() securityv1.SecurityV1Interface { + return c.securityV1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + var cs Clientset + var err error + cs.securityV1, err = securityv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + var cs Clientset + cs.securityV1 = securityv1.NewForConfigOrDie(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) + return &cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.securityV1 = securityv1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/vendor/github.com/openshift/client-go/security/clientset/versioned/doc.go b/vendor/github.com/openshift/client-go/security/clientset/versioned/doc.go new file mode 100644 index 0000000000000..0e0c2a8900e2c --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/clientset/versioned/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated clientset. +package versioned diff --git a/vendor/github.com/openshift/client-go/security/clientset/versioned/scheme/doc.go b/vendor/github.com/openshift/client-go/security/clientset/versioned/scheme/doc.go new file mode 100644 index 0000000000000..14db57a58f8d2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/clientset/versioned/scheme/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package contains the scheme of the automatically generated clientset. +package scheme diff --git a/vendor/github.com/openshift/client-go/security/clientset/versioned/scheme/register.go b/vendor/github.com/openshift/client-go/security/clientset/versioned/scheme/register.go new file mode 100644 index 0000000000000..871d4424f3e04 --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/clientset/versioned/scheme/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package scheme + +import ( + securityv1 "github.com/openshift/api/security/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + securityv1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/doc.go b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/doc.go new file mode 100644 index 0000000000000..225e6b2be34f2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/generated_expansion.go b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/generated_expansion.go new file mode 100644 index 0000000000000..db29417c88c73 --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/generated_expansion.go @@ -0,0 +1,13 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type PodSecurityPolicyReviewExpansion interface{} + +type PodSecurityPolicySelfSubjectReviewExpansion interface{} + +type PodSecurityPolicySubjectReviewExpansion interface{} + +type RangeAllocationExpansion interface{} + +type SecurityContextConstraintsExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/podsecuritypolicyreview.go b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/podsecuritypolicyreview.go new file mode 100644 index 0000000000000..4d4937b4c3439 --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/podsecuritypolicyreview.go @@ -0,0 +1,51 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + + v1 "github.com/openshift/api/security/v1" + scheme "github.com/openshift/client-go/security/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// PodSecurityPolicyReviewsGetter has a method to return a PodSecurityPolicyReviewInterface. +// A group's client should implement this interface. +type PodSecurityPolicyReviewsGetter interface { + PodSecurityPolicyReviews(namespace string) PodSecurityPolicyReviewInterface +} + +// PodSecurityPolicyReviewInterface has methods to work with PodSecurityPolicyReview resources. +type PodSecurityPolicyReviewInterface interface { + Create(ctx context.Context, podSecurityPolicyReview *v1.PodSecurityPolicyReview, opts metav1.CreateOptions) (*v1.PodSecurityPolicyReview, error) + PodSecurityPolicyReviewExpansion +} + +// podSecurityPolicyReviews implements PodSecurityPolicyReviewInterface +type podSecurityPolicyReviews struct { + client rest.Interface + ns string +} + +// newPodSecurityPolicyReviews returns a PodSecurityPolicyReviews +func newPodSecurityPolicyReviews(c *SecurityV1Client, namespace string) *podSecurityPolicyReviews { + return &podSecurityPolicyReviews{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Create takes the representation of a podSecurityPolicyReview and creates it. Returns the server's representation of the podSecurityPolicyReview, and an error, if there is any. +func (c *podSecurityPolicyReviews) Create(ctx context.Context, podSecurityPolicyReview *v1.PodSecurityPolicyReview, opts metav1.CreateOptions) (result *v1.PodSecurityPolicyReview, err error) { + result = &v1.PodSecurityPolicyReview{} + err = c.client.Post(). + Namespace(c.ns). + Resource("podsecuritypolicyreviews"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(podSecurityPolicyReview). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/podsecuritypolicyselfsubjectreview.go b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/podsecuritypolicyselfsubjectreview.go new file mode 100644 index 0000000000000..1190e3796c85b --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/podsecuritypolicyselfsubjectreview.go @@ -0,0 +1,51 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + + v1 "github.com/openshift/api/security/v1" + scheme "github.com/openshift/client-go/security/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// PodSecurityPolicySelfSubjectReviewsGetter has a method to return a PodSecurityPolicySelfSubjectReviewInterface. +// A group's client should implement this interface. +type PodSecurityPolicySelfSubjectReviewsGetter interface { + PodSecurityPolicySelfSubjectReviews(namespace string) PodSecurityPolicySelfSubjectReviewInterface +} + +// PodSecurityPolicySelfSubjectReviewInterface has methods to work with PodSecurityPolicySelfSubjectReview resources. +type PodSecurityPolicySelfSubjectReviewInterface interface { + Create(ctx context.Context, podSecurityPolicySelfSubjectReview *v1.PodSecurityPolicySelfSubjectReview, opts metav1.CreateOptions) (*v1.PodSecurityPolicySelfSubjectReview, error) + PodSecurityPolicySelfSubjectReviewExpansion +} + +// podSecurityPolicySelfSubjectReviews implements PodSecurityPolicySelfSubjectReviewInterface +type podSecurityPolicySelfSubjectReviews struct { + client rest.Interface + ns string +} + +// newPodSecurityPolicySelfSubjectReviews returns a PodSecurityPolicySelfSubjectReviews +func newPodSecurityPolicySelfSubjectReviews(c *SecurityV1Client, namespace string) *podSecurityPolicySelfSubjectReviews { + return &podSecurityPolicySelfSubjectReviews{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Create takes the representation of a podSecurityPolicySelfSubjectReview and creates it. Returns the server's representation of the podSecurityPolicySelfSubjectReview, and an error, if there is any. +func (c *podSecurityPolicySelfSubjectReviews) Create(ctx context.Context, podSecurityPolicySelfSubjectReview *v1.PodSecurityPolicySelfSubjectReview, opts metav1.CreateOptions) (result *v1.PodSecurityPolicySelfSubjectReview, err error) { + result = &v1.PodSecurityPolicySelfSubjectReview{} + err = c.client.Post(). + Namespace(c.ns). + Resource("podsecuritypolicyselfsubjectreviews"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(podSecurityPolicySelfSubjectReview). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/podsecuritypolicysubjectreview.go b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/podsecuritypolicysubjectreview.go new file mode 100644 index 0000000000000..5678072a3c064 --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/podsecuritypolicysubjectreview.go @@ -0,0 +1,51 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + + v1 "github.com/openshift/api/security/v1" + scheme "github.com/openshift/client-go/security/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// PodSecurityPolicySubjectReviewsGetter has a method to return a PodSecurityPolicySubjectReviewInterface. +// A group's client should implement this interface. +type PodSecurityPolicySubjectReviewsGetter interface { + PodSecurityPolicySubjectReviews(namespace string) PodSecurityPolicySubjectReviewInterface +} + +// PodSecurityPolicySubjectReviewInterface has methods to work with PodSecurityPolicySubjectReview resources. +type PodSecurityPolicySubjectReviewInterface interface { + Create(ctx context.Context, podSecurityPolicySubjectReview *v1.PodSecurityPolicySubjectReview, opts metav1.CreateOptions) (*v1.PodSecurityPolicySubjectReview, error) + PodSecurityPolicySubjectReviewExpansion +} + +// podSecurityPolicySubjectReviews implements PodSecurityPolicySubjectReviewInterface +type podSecurityPolicySubjectReviews struct { + client rest.Interface + ns string +} + +// newPodSecurityPolicySubjectReviews returns a PodSecurityPolicySubjectReviews +func newPodSecurityPolicySubjectReviews(c *SecurityV1Client, namespace string) *podSecurityPolicySubjectReviews { + return &podSecurityPolicySubjectReviews{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Create takes the representation of a podSecurityPolicySubjectReview and creates it. Returns the server's representation of the podSecurityPolicySubjectReview, and an error, if there is any. +func (c *podSecurityPolicySubjectReviews) Create(ctx context.Context, podSecurityPolicySubjectReview *v1.PodSecurityPolicySubjectReview, opts metav1.CreateOptions) (result *v1.PodSecurityPolicySubjectReview, err error) { + result = &v1.PodSecurityPolicySubjectReview{} + err = c.client.Post(). + Namespace(c.ns). + Resource("podsecuritypolicysubjectreviews"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(podSecurityPolicySubjectReview). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/rangeallocation.go b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/rangeallocation.go new file mode 100644 index 0000000000000..003b48bc397f4 --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/rangeallocation.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/security/v1" + scheme "github.com/openshift/client-go/security/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// RangeAllocationsGetter has a method to return a RangeAllocationInterface. +// A group's client should implement this interface. +type RangeAllocationsGetter interface { + RangeAllocations() RangeAllocationInterface +} + +// RangeAllocationInterface has methods to work with RangeAllocation resources. +type RangeAllocationInterface interface { + Create(ctx context.Context, rangeAllocation *v1.RangeAllocation, opts metav1.CreateOptions) (*v1.RangeAllocation, error) + Update(ctx context.Context, rangeAllocation *v1.RangeAllocation, opts metav1.UpdateOptions) (*v1.RangeAllocation, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.RangeAllocation, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.RangeAllocationList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.RangeAllocation, err error) + RangeAllocationExpansion +} + +// rangeAllocations implements RangeAllocationInterface +type rangeAllocations struct { + client rest.Interface +} + +// newRangeAllocations returns a RangeAllocations +func newRangeAllocations(c *SecurityV1Client) *rangeAllocations { + return &rangeAllocations{ + client: c.RESTClient(), + } +} + +// Get takes name of the rangeAllocation, and returns the corresponding rangeAllocation object, and an error if there is any. +func (c *rangeAllocations) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.RangeAllocation, err error) { + result = &v1.RangeAllocation{} + err = c.client.Get(). + Resource("rangeallocations"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of RangeAllocations that match those selectors. +func (c *rangeAllocations) List(ctx context.Context, opts metav1.ListOptions) (result *v1.RangeAllocationList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.RangeAllocationList{} + err = c.client.Get(). + Resource("rangeallocations"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested rangeAllocations. +func (c *rangeAllocations) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("rangeallocations"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a rangeAllocation and creates it. Returns the server's representation of the rangeAllocation, and an error, if there is any. +func (c *rangeAllocations) Create(ctx context.Context, rangeAllocation *v1.RangeAllocation, opts metav1.CreateOptions) (result *v1.RangeAllocation, err error) { + result = &v1.RangeAllocation{} + err = c.client.Post(). + Resource("rangeallocations"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(rangeAllocation). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a rangeAllocation and updates it. Returns the server's representation of the rangeAllocation, and an error, if there is any. +func (c *rangeAllocations) Update(ctx context.Context, rangeAllocation *v1.RangeAllocation, opts metav1.UpdateOptions) (result *v1.RangeAllocation, err error) { + result = &v1.RangeAllocation{} + err = c.client.Put(). + Resource("rangeallocations"). + Name(rangeAllocation.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(rangeAllocation). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the rangeAllocation and deletes it. Returns an error if one occurs. +func (c *rangeAllocations) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("rangeallocations"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *rangeAllocations) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("rangeallocations"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched rangeAllocation. +func (c *rangeAllocations) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.RangeAllocation, err error) { + result = &v1.RangeAllocation{} + err = c.client.Patch(pt). + Resource("rangeallocations"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/security_client.go b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/security_client.go new file mode 100644 index 0000000000000..6ec1a5707aaec --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/security_client.go @@ -0,0 +1,93 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/security/v1" + "github.com/openshift/client-go/security/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type SecurityV1Interface interface { + RESTClient() rest.Interface + PodSecurityPolicyReviewsGetter + PodSecurityPolicySelfSubjectReviewsGetter + PodSecurityPolicySubjectReviewsGetter + RangeAllocationsGetter + SecurityContextConstraintsGetter +} + +// SecurityV1Client is used to interact with features provided by the security.openshift.io group. +type SecurityV1Client struct { + restClient rest.Interface +} + +func (c *SecurityV1Client) PodSecurityPolicyReviews(namespace string) PodSecurityPolicyReviewInterface { + return newPodSecurityPolicyReviews(c, namespace) +} + +func (c *SecurityV1Client) PodSecurityPolicySelfSubjectReviews(namespace string) PodSecurityPolicySelfSubjectReviewInterface { + return newPodSecurityPolicySelfSubjectReviews(c, namespace) +} + +func (c *SecurityV1Client) PodSecurityPolicySubjectReviews(namespace string) PodSecurityPolicySubjectReviewInterface { + return newPodSecurityPolicySubjectReviews(c, namespace) +} + +func (c *SecurityV1Client) RangeAllocations() RangeAllocationInterface { + return newRangeAllocations(c) +} + +func (c *SecurityV1Client) SecurityContextConstraints() SecurityContextConstraintsInterface { + return newSecurityContextConstraints(c) +} + +// NewForConfig creates a new SecurityV1Client for the given config. +func NewForConfig(c *rest.Config) (*SecurityV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &SecurityV1Client{client}, nil +} + +// NewForConfigOrDie creates a new SecurityV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *SecurityV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new SecurityV1Client for the given RESTClient. +func New(c rest.Interface) *SecurityV1Client { + return &SecurityV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *SecurityV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/securitycontextconstraints.go b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/securitycontextconstraints.go new file mode 100644 index 0000000000000..4522c1c91114c --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/clientset/versioned/typed/security/v1/securitycontextconstraints.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/security/v1" + scheme "github.com/openshift/client-go/security/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// SecurityContextConstraintsGetter has a method to return a SecurityContextConstraintsInterface. +// A group's client should implement this interface. +type SecurityContextConstraintsGetter interface { + SecurityContextConstraints() SecurityContextConstraintsInterface +} + +// SecurityContextConstraintsInterface has methods to work with SecurityContextConstraints resources. +type SecurityContextConstraintsInterface interface { + Create(ctx context.Context, securityContextConstraints *v1.SecurityContextConstraints, opts metav1.CreateOptions) (*v1.SecurityContextConstraints, error) + Update(ctx context.Context, securityContextConstraints *v1.SecurityContextConstraints, opts metav1.UpdateOptions) (*v1.SecurityContextConstraints, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.SecurityContextConstraints, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.SecurityContextConstraintsList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.SecurityContextConstraints, err error) + SecurityContextConstraintsExpansion +} + +// securityContextConstraints implements SecurityContextConstraintsInterface +type securityContextConstraints struct { + client rest.Interface +} + +// newSecurityContextConstraints returns a SecurityContextConstraints +func newSecurityContextConstraints(c *SecurityV1Client) *securityContextConstraints { + return &securityContextConstraints{ + client: c.RESTClient(), + } +} + +// Get takes name of the securityContextConstraints, and returns the corresponding securityContextConstraints object, and an error if there is any. +func (c *securityContextConstraints) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.SecurityContextConstraints, err error) { + result = &v1.SecurityContextConstraints{} + err = c.client.Get(). + Resource("securitycontextconstraints"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of SecurityContextConstraints that match those selectors. +func (c *securityContextConstraints) List(ctx context.Context, opts metav1.ListOptions) (result *v1.SecurityContextConstraintsList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.SecurityContextConstraintsList{} + err = c.client.Get(). + Resource("securitycontextconstraints"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested securityContextConstraints. +func (c *securityContextConstraints) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("securitycontextconstraints"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a securityContextConstraints and creates it. Returns the server's representation of the securityContextConstraints, and an error, if there is any. +func (c *securityContextConstraints) Create(ctx context.Context, securityContextConstraints *v1.SecurityContextConstraints, opts metav1.CreateOptions) (result *v1.SecurityContextConstraints, err error) { + result = &v1.SecurityContextConstraints{} + err = c.client.Post(). + Resource("securitycontextconstraints"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(securityContextConstraints). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a securityContextConstraints and updates it. Returns the server's representation of the securityContextConstraints, and an error, if there is any. +func (c *securityContextConstraints) Update(ctx context.Context, securityContextConstraints *v1.SecurityContextConstraints, opts metav1.UpdateOptions) (result *v1.SecurityContextConstraints, err error) { + result = &v1.SecurityContextConstraints{} + err = c.client.Put(). + Resource("securitycontextconstraints"). + Name(securityContextConstraints.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(securityContextConstraints). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the securityContextConstraints and deletes it. Returns an error if one occurs. +func (c *securityContextConstraints) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("securitycontextconstraints"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *securityContextConstraints) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("securitycontextconstraints"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched securityContextConstraints. +func (c *securityContextConstraints) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.SecurityContextConstraints, err error) { + result = &v1.SecurityContextConstraints{} + err = c.client.Patch(pt). + Resource("securitycontextconstraints"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/security/informers/externalversions/factory.go b/vendor/github.com/openshift/client-go/security/informers/externalversions/factory.go new file mode 100644 index 0000000000000..f9d3cab507208 --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/informers/externalversions/factory.go @@ -0,0 +1,164 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + reflect "reflect" + sync "sync" + time "time" + + versioned "github.com/openshift/client-go/security/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/security/informers/externalversions/internalinterfaces" + security "github.com/openshift/client-go/security/informers/externalversions/security" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// SharedInformerOption defines the functional option type for SharedInformerFactory. +type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory + +type sharedInformerFactory struct { + client versioned.Interface + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc + lock sync.Mutex + defaultResync time.Duration + customResync map[reflect.Type]time.Duration + + informers map[reflect.Type]cache.SharedIndexInformer + // startedInformers is used for tracking which informers have been started. + // This allows Start() to be called multiple times safely. + startedInformers map[reflect.Type]bool +} + +// WithCustomResyncConfig sets a custom resync period for the specified informer types. +func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + for k, v := range resyncConfig { + factory.customResync[reflect.TypeOf(k)] = v + } + return factory + } +} + +// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory. +func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.tweakListOptions = tweakListOptions + return factory + } +} + +// WithNamespace limits the SharedInformerFactory to the specified namespace. +func WithNamespace(namespace string) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.namespace = namespace + return factory + } +} + +// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. +func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync) +} + +// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory. +// Listers obtained via this SharedInformerFactory will be subject to the same filters +// as specified here. +// Deprecated: Please use NewSharedInformerFactoryWithOptions instead +func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions)) +} + +// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options. +func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory { + factory := &sharedInformerFactory{ + client: client, + namespace: v1.NamespaceAll, + defaultResync: defaultResync, + informers: make(map[reflect.Type]cache.SharedIndexInformer), + startedInformers: make(map[reflect.Type]bool), + customResync: make(map[reflect.Type]time.Duration), + } + + // Apply all options + for _, opt := range options { + factory = opt(factory) + } + + return factory +} + +// Start initializes all requested informers. +func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) { + f.lock.Lock() + defer f.lock.Unlock() + + for informerType, informer := range f.informers { + if !f.startedInformers[informerType] { + go informer.Run(stopCh) + f.startedInformers[informerType] = true + } + } +} + +// WaitForCacheSync waits for all started informers' cache were synced. +func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool { + informers := func() map[reflect.Type]cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informers := map[reflect.Type]cache.SharedIndexInformer{} + for informerType, informer := range f.informers { + if f.startedInformers[informerType] { + informers[informerType] = informer + } + } + return informers + }() + + res := map[reflect.Type]bool{} + for informType, informer := range informers { + res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced) + } + return res +} + +// InternalInformerFor returns the SharedIndexInformer for obj using an internal +// client. +func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(obj) + informer, exists := f.informers[informerType] + if exists { + return informer + } + + resyncPeriod, exists := f.customResync[informerType] + if !exists { + resyncPeriod = f.defaultResync + } + + informer = newFunc(f.client, resyncPeriod) + f.informers[informerType] = informer + + return informer +} + +// SharedInformerFactory provides shared informers for resources in all known +// API group versions. +type SharedInformerFactory interface { + internalinterfaces.SharedInformerFactory + ForResource(resource schema.GroupVersionResource) (GenericInformer, error) + WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool + + Security() security.Interface +} + +func (f *sharedInformerFactory) Security() security.Interface { + return security.New(f, f.namespace, f.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/security/informers/externalversions/generic.go b/vendor/github.com/openshift/client-go/security/informers/externalversions/generic.go new file mode 100644 index 0000000000000..6a0d9f170f3f2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/informers/externalversions/generic.go @@ -0,0 +1,48 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + "fmt" + + v1 "github.com/openshift/api/security/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// GenericInformer is type of SharedIndexInformer which will locate and delegate to other +// sharedInformers based on type +type GenericInformer interface { + Informer() cache.SharedIndexInformer + Lister() cache.GenericLister +} + +type genericInformer struct { + informer cache.SharedIndexInformer + resource schema.GroupResource +} + +// Informer returns the SharedIndexInformer. +func (f *genericInformer) Informer() cache.SharedIndexInformer { + return f.informer +} + +// Lister returns the GenericLister. +func (f *genericInformer) Lister() cache.GenericLister { + return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource) +} + +// ForResource gives generic access to a shared informer of the matching type +// TODO extend this to unknown resources with a client pool +func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { + switch resource { + // Group=security.openshift.io, Version=v1 + case v1.SchemeGroupVersion.WithResource("rangeallocations"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Security().V1().RangeAllocations().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("securitycontextconstraints"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Security().V1().SecurityContextConstraints().Informer()}, nil + + } + + return nil, fmt.Errorf("no informer found for %v", resource) +} diff --git a/vendor/github.com/openshift/client-go/security/informers/externalversions/internalinterfaces/factory_interfaces.go b/vendor/github.com/openshift/client-go/security/informers/externalversions/internalinterfaces/factory_interfaces.go new file mode 100644 index 0000000000000..6977ed09aaf81 --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -0,0 +1,24 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package internalinterfaces + +import ( + time "time" + + versioned "github.com/openshift/client-go/security/clientset/versioned" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + cache "k8s.io/client-go/tools/cache" +) + +// NewInformerFunc takes versioned.Interface and time.Duration to return a SharedIndexInformer. +type NewInformerFunc func(versioned.Interface, time.Duration) cache.SharedIndexInformer + +// SharedInformerFactory a small interface to allow for adding an informer without an import cycle +type SharedInformerFactory interface { + Start(stopCh <-chan struct{}) + InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer +} + +// TweakListOptionsFunc is a function that transforms a v1.ListOptions. +type TweakListOptionsFunc func(*v1.ListOptions) diff --git a/vendor/github.com/openshift/client-go/security/informers/externalversions/security/interface.go b/vendor/github.com/openshift/client-go/security/informers/externalversions/security/interface.go new file mode 100644 index 0000000000000..f83962861f658 --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/informers/externalversions/security/interface.go @@ -0,0 +1,30 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package security + +import ( + internalinterfaces "github.com/openshift/client-go/security/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/security/informers/externalversions/security/v1" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1 provides access to shared informers for resources in V1. + V1() v1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1 returns a new v1.Interface. +func (g *group) V1() v1.Interface { + return v1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/security/informers/externalversions/security/v1/interface.go b/vendor/github.com/openshift/client-go/security/informers/externalversions/security/v1/interface.go new file mode 100644 index 0000000000000..a5e60e5cab7d6 --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/informers/externalversions/security/v1/interface.go @@ -0,0 +1,36 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + internalinterfaces "github.com/openshift/client-go/security/informers/externalversions/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // RangeAllocations returns a RangeAllocationInformer. + RangeAllocations() RangeAllocationInformer + // SecurityContextConstraints returns a SecurityContextConstraintsInformer. + SecurityContextConstraints() SecurityContextConstraintsInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// RangeAllocations returns a RangeAllocationInformer. +func (v *version) RangeAllocations() RangeAllocationInformer { + return &rangeAllocationInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + +// SecurityContextConstraints returns a SecurityContextConstraintsInformer. +func (v *version) SecurityContextConstraints() SecurityContextConstraintsInformer { + return &securityContextConstraintsInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/github.com/openshift/client-go/security/informers/externalversions/security/v1/rangeallocation.go b/vendor/github.com/openshift/client-go/security/informers/externalversions/security/v1/rangeallocation.go new file mode 100644 index 0000000000000..98f26821a589e --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/informers/externalversions/security/v1/rangeallocation.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + securityv1 "github.com/openshift/api/security/v1" + versioned "github.com/openshift/client-go/security/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/security/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/security/listers/security/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// RangeAllocationInformer provides access to a shared informer and lister for +// RangeAllocations. +type RangeAllocationInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.RangeAllocationLister +} + +type rangeAllocationInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewRangeAllocationInformer constructs a new informer for RangeAllocation type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewRangeAllocationInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredRangeAllocationInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredRangeAllocationInformer constructs a new informer for RangeAllocation type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredRangeAllocationInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.SecurityV1().RangeAllocations().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.SecurityV1().RangeAllocations().Watch(context.TODO(), options) + }, + }, + &securityv1.RangeAllocation{}, + resyncPeriod, + indexers, + ) +} + +func (f *rangeAllocationInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredRangeAllocationInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *rangeAllocationInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&securityv1.RangeAllocation{}, f.defaultInformer) +} + +func (f *rangeAllocationInformer) Lister() v1.RangeAllocationLister { + return v1.NewRangeAllocationLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/security/informers/externalversions/security/v1/securitycontextconstraints.go b/vendor/github.com/openshift/client-go/security/informers/externalversions/security/v1/securitycontextconstraints.go new file mode 100644 index 0000000000000..107888c45f4c6 --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/informers/externalversions/security/v1/securitycontextconstraints.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + securityv1 "github.com/openshift/api/security/v1" + versioned "github.com/openshift/client-go/security/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/security/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/security/listers/security/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// SecurityContextConstraintsInformer provides access to a shared informer and lister for +// SecurityContextConstraints. +type SecurityContextConstraintsInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.SecurityContextConstraintsLister +} + +type securityContextConstraintsInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewSecurityContextConstraintsInformer constructs a new informer for SecurityContextConstraints type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewSecurityContextConstraintsInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredSecurityContextConstraintsInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredSecurityContextConstraintsInformer constructs a new informer for SecurityContextConstraints type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredSecurityContextConstraintsInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.SecurityV1().SecurityContextConstraints().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.SecurityV1().SecurityContextConstraints().Watch(context.TODO(), options) + }, + }, + &securityv1.SecurityContextConstraints{}, + resyncPeriod, + indexers, + ) +} + +func (f *securityContextConstraintsInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredSecurityContextConstraintsInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *securityContextConstraintsInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&securityv1.SecurityContextConstraints{}, f.defaultInformer) +} + +func (f *securityContextConstraintsInformer) Lister() v1.SecurityContextConstraintsLister { + return v1.NewSecurityContextConstraintsLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/security/listers/security/v1/expansion_generated.go b/vendor/github.com/openshift/client-go/security/listers/security/v1/expansion_generated.go new file mode 100644 index 0000000000000..fa088f154096d --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/listers/security/v1/expansion_generated.go @@ -0,0 +1,11 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +// RangeAllocationListerExpansion allows custom methods to be added to +// RangeAllocationLister. +type RangeAllocationListerExpansion interface{} + +// SecurityContextConstraintsListerExpansion allows custom methods to be added to +// SecurityContextConstraintsLister. +type SecurityContextConstraintsListerExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/security/listers/security/v1/rangeallocation.go b/vendor/github.com/openshift/client-go/security/listers/security/v1/rangeallocation.go new file mode 100644 index 0000000000000..c945dbb5b2522 --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/listers/security/v1/rangeallocation.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/security/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// RangeAllocationLister helps list RangeAllocations. +// All objects returned here must be treated as read-only. +type RangeAllocationLister interface { + // List lists all RangeAllocations in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.RangeAllocation, err error) + // Get retrieves the RangeAllocation from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.RangeAllocation, error) + RangeAllocationListerExpansion +} + +// rangeAllocationLister implements the RangeAllocationLister interface. +type rangeAllocationLister struct { + indexer cache.Indexer +} + +// NewRangeAllocationLister returns a new RangeAllocationLister. +func NewRangeAllocationLister(indexer cache.Indexer) RangeAllocationLister { + return &rangeAllocationLister{indexer: indexer} +} + +// List lists all RangeAllocations in the indexer. +func (s *rangeAllocationLister) List(selector labels.Selector) (ret []*v1.RangeAllocation, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.RangeAllocation)) + }) + return ret, err +} + +// Get retrieves the RangeAllocation from the index for a given name. +func (s *rangeAllocationLister) Get(name string) (*v1.RangeAllocation, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("rangeallocation"), name) + } + return obj.(*v1.RangeAllocation), nil +} diff --git a/vendor/github.com/openshift/client-go/security/listers/security/v1/securitycontextconstraints.go b/vendor/github.com/openshift/client-go/security/listers/security/v1/securitycontextconstraints.go new file mode 100644 index 0000000000000..6fe0bd1d598cc --- /dev/null +++ b/vendor/github.com/openshift/client-go/security/listers/security/v1/securitycontextconstraints.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/security/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// SecurityContextConstraintsLister helps list SecurityContextConstraints. +// All objects returned here must be treated as read-only. +type SecurityContextConstraintsLister interface { + // List lists all SecurityContextConstraints in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.SecurityContextConstraints, err error) + // Get retrieves the SecurityContextConstraints from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.SecurityContextConstraints, error) + SecurityContextConstraintsListerExpansion +} + +// securityContextConstraintsLister implements the SecurityContextConstraintsLister interface. +type securityContextConstraintsLister struct { + indexer cache.Indexer +} + +// NewSecurityContextConstraintsLister returns a new SecurityContextConstraintsLister. +func NewSecurityContextConstraintsLister(indexer cache.Indexer) SecurityContextConstraintsLister { + return &securityContextConstraintsLister{indexer: indexer} +} + +// List lists all SecurityContextConstraints in the indexer. +func (s *securityContextConstraintsLister) List(selector labels.Selector) (ret []*v1.SecurityContextConstraints, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.SecurityContextConstraints)) + }) + return ret, err +} + +// Get retrieves the SecurityContextConstraints from the index for a given name. +func (s *securityContextConstraintsLister) Get(name string) (*v1.SecurityContextConstraints, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("securitycontextconstraints"), name) + } + return obj.(*v1.SecurityContextConstraints), nil +} diff --git a/vendor/github.com/openshift/client-go/template/clientset/versioned/clientset.go b/vendor/github.com/openshift/client-go/template/clientset/versioned/clientset.go new file mode 100644 index 0000000000000..d74519703ca89 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/clientset/versioned/clientset.go @@ -0,0 +1,81 @@ +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + + templatev1 "github.com/openshift/client-go/template/clientset/versioned/typed/template/v1" + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + TemplateV1() templatev1.TemplateV1Interface +} + +// Clientset contains the clients for groups. Each group has exactly one +// version included in a Clientset. +type Clientset struct { + *discovery.DiscoveryClient + templateV1 *templatev1.TemplateV1Client +} + +// TemplateV1 retrieves the TemplateV1Client +func (c *Clientset) TemplateV1() templatev1.TemplateV1Interface { + return c.templateV1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + var cs Clientset + var err error + cs.templateV1, err = templatev1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + var cs Clientset + cs.templateV1 = templatev1.NewForConfigOrDie(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) + return &cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.templateV1 = templatev1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/vendor/github.com/openshift/client-go/template/clientset/versioned/doc.go b/vendor/github.com/openshift/client-go/template/clientset/versioned/doc.go new file mode 100644 index 0000000000000..0e0c2a8900e2c --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/clientset/versioned/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated clientset. +package versioned diff --git a/vendor/github.com/openshift/client-go/template/clientset/versioned/scheme/doc.go b/vendor/github.com/openshift/client-go/template/clientset/versioned/scheme/doc.go new file mode 100644 index 0000000000000..14db57a58f8d2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/clientset/versioned/scheme/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package contains the scheme of the automatically generated clientset. +package scheme diff --git a/vendor/github.com/openshift/client-go/template/clientset/versioned/scheme/register.go b/vendor/github.com/openshift/client-go/template/clientset/versioned/scheme/register.go new file mode 100644 index 0000000000000..c230242131102 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/clientset/versioned/scheme/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package scheme + +import ( + templatev1 "github.com/openshift/api/template/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + templatev1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/brokertemplateinstance.go b/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/brokertemplateinstance.go new file mode 100644 index 0000000000000..9f4bd6a27c5c6 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/brokertemplateinstance.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/template/v1" + scheme "github.com/openshift/client-go/template/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// BrokerTemplateInstancesGetter has a method to return a BrokerTemplateInstanceInterface. +// A group's client should implement this interface. +type BrokerTemplateInstancesGetter interface { + BrokerTemplateInstances() BrokerTemplateInstanceInterface +} + +// BrokerTemplateInstanceInterface has methods to work with BrokerTemplateInstance resources. +type BrokerTemplateInstanceInterface interface { + Create(ctx context.Context, brokerTemplateInstance *v1.BrokerTemplateInstance, opts metav1.CreateOptions) (*v1.BrokerTemplateInstance, error) + Update(ctx context.Context, brokerTemplateInstance *v1.BrokerTemplateInstance, opts metav1.UpdateOptions) (*v1.BrokerTemplateInstance, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.BrokerTemplateInstance, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.BrokerTemplateInstanceList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.BrokerTemplateInstance, err error) + BrokerTemplateInstanceExpansion +} + +// brokerTemplateInstances implements BrokerTemplateInstanceInterface +type brokerTemplateInstances struct { + client rest.Interface +} + +// newBrokerTemplateInstances returns a BrokerTemplateInstances +func newBrokerTemplateInstances(c *TemplateV1Client) *brokerTemplateInstances { + return &brokerTemplateInstances{ + client: c.RESTClient(), + } +} + +// Get takes name of the brokerTemplateInstance, and returns the corresponding brokerTemplateInstance object, and an error if there is any. +func (c *brokerTemplateInstances) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.BrokerTemplateInstance, err error) { + result = &v1.BrokerTemplateInstance{} + err = c.client.Get(). + Resource("brokertemplateinstances"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of BrokerTemplateInstances that match those selectors. +func (c *brokerTemplateInstances) List(ctx context.Context, opts metav1.ListOptions) (result *v1.BrokerTemplateInstanceList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.BrokerTemplateInstanceList{} + err = c.client.Get(). + Resource("brokertemplateinstances"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested brokerTemplateInstances. +func (c *brokerTemplateInstances) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("brokertemplateinstances"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a brokerTemplateInstance and creates it. Returns the server's representation of the brokerTemplateInstance, and an error, if there is any. +func (c *brokerTemplateInstances) Create(ctx context.Context, brokerTemplateInstance *v1.BrokerTemplateInstance, opts metav1.CreateOptions) (result *v1.BrokerTemplateInstance, err error) { + result = &v1.BrokerTemplateInstance{} + err = c.client.Post(). + Resource("brokertemplateinstances"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(brokerTemplateInstance). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a brokerTemplateInstance and updates it. Returns the server's representation of the brokerTemplateInstance, and an error, if there is any. +func (c *brokerTemplateInstances) Update(ctx context.Context, brokerTemplateInstance *v1.BrokerTemplateInstance, opts metav1.UpdateOptions) (result *v1.BrokerTemplateInstance, err error) { + result = &v1.BrokerTemplateInstance{} + err = c.client.Put(). + Resource("brokertemplateinstances"). + Name(brokerTemplateInstance.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(brokerTemplateInstance). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the brokerTemplateInstance and deletes it. Returns an error if one occurs. +func (c *brokerTemplateInstances) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("brokertemplateinstances"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *brokerTemplateInstances) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("brokertemplateinstances"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched brokerTemplateInstance. +func (c *brokerTemplateInstances) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.BrokerTemplateInstance, err error) { + result = &v1.BrokerTemplateInstance{} + err = c.client.Patch(pt). + Resource("brokertemplateinstances"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/doc.go b/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/doc.go new file mode 100644 index 0000000000000..225e6b2be34f2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/generated_expansion.go b/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/generated_expansion.go new file mode 100644 index 0000000000000..57f72c3538118 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/generated_expansion.go @@ -0,0 +1,9 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type BrokerTemplateInstanceExpansion interface{} + +type TemplateExpansion interface{} + +type TemplateInstanceExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/template.go b/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/template.go new file mode 100644 index 0000000000000..6cec071652476 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/template.go @@ -0,0 +1,162 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/template/v1" + scheme "github.com/openshift/client-go/template/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// TemplatesGetter has a method to return a TemplateInterface. +// A group's client should implement this interface. +type TemplatesGetter interface { + Templates(namespace string) TemplateInterface +} + +// TemplateInterface has methods to work with Template resources. +type TemplateInterface interface { + Create(ctx context.Context, template *v1.Template, opts metav1.CreateOptions) (*v1.Template, error) + Update(ctx context.Context, template *v1.Template, opts metav1.UpdateOptions) (*v1.Template, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Template, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.TemplateList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Template, err error) + TemplateExpansion +} + +// templates implements TemplateInterface +type templates struct { + client rest.Interface + ns string +} + +// newTemplates returns a Templates +func newTemplates(c *TemplateV1Client, namespace string) *templates { + return &templates{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the template, and returns the corresponding template object, and an error if there is any. +func (c *templates) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Template, err error) { + result = &v1.Template{} + err = c.client.Get(). + Namespace(c.ns). + Resource("templates"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Templates that match those selectors. +func (c *templates) List(ctx context.Context, opts metav1.ListOptions) (result *v1.TemplateList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.TemplateList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("templates"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested templates. +func (c *templates) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("templates"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a template and creates it. Returns the server's representation of the template, and an error, if there is any. +func (c *templates) Create(ctx context.Context, template *v1.Template, opts metav1.CreateOptions) (result *v1.Template, err error) { + result = &v1.Template{} + err = c.client.Post(). + Namespace(c.ns). + Resource("templates"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(template). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a template and updates it. Returns the server's representation of the template, and an error, if there is any. +func (c *templates) Update(ctx context.Context, template *v1.Template, opts metav1.UpdateOptions) (result *v1.Template, err error) { + result = &v1.Template{} + err = c.client.Put(). + Namespace(c.ns). + Resource("templates"). + Name(template.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(template). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the template and deletes it. Returns an error if one occurs. +func (c *templates) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("templates"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *templates) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("templates"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched template. +func (c *templates) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Template, err error) { + result = &v1.Template{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("templates"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/template_client.go b/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/template_client.go new file mode 100644 index 0000000000000..d784b6e07ae79 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/template_client.go @@ -0,0 +1,83 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/template/v1" + "github.com/openshift/client-go/template/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type TemplateV1Interface interface { + RESTClient() rest.Interface + BrokerTemplateInstancesGetter + TemplatesGetter + TemplateInstancesGetter +} + +// TemplateV1Client is used to interact with features provided by the template.openshift.io group. +type TemplateV1Client struct { + restClient rest.Interface +} + +func (c *TemplateV1Client) BrokerTemplateInstances() BrokerTemplateInstanceInterface { + return newBrokerTemplateInstances(c) +} + +func (c *TemplateV1Client) Templates(namespace string) TemplateInterface { + return newTemplates(c, namespace) +} + +func (c *TemplateV1Client) TemplateInstances(namespace string) TemplateInstanceInterface { + return newTemplateInstances(c, namespace) +} + +// NewForConfig creates a new TemplateV1Client for the given config. +func NewForConfig(c *rest.Config) (*TemplateV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &TemplateV1Client{client}, nil +} + +// NewForConfigOrDie creates a new TemplateV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *TemplateV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new TemplateV1Client for the given RESTClient. +func New(c rest.Interface) *TemplateV1Client { + return &TemplateV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *TemplateV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/templateinstance.go b/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/templateinstance.go new file mode 100644 index 0000000000000..4328de1a5c9c6 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/clientset/versioned/typed/template/v1/templateinstance.go @@ -0,0 +1,179 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/template/v1" + scheme "github.com/openshift/client-go/template/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// TemplateInstancesGetter has a method to return a TemplateInstanceInterface. +// A group's client should implement this interface. +type TemplateInstancesGetter interface { + TemplateInstances(namespace string) TemplateInstanceInterface +} + +// TemplateInstanceInterface has methods to work with TemplateInstance resources. +type TemplateInstanceInterface interface { + Create(ctx context.Context, templateInstance *v1.TemplateInstance, opts metav1.CreateOptions) (*v1.TemplateInstance, error) + Update(ctx context.Context, templateInstance *v1.TemplateInstance, opts metav1.UpdateOptions) (*v1.TemplateInstance, error) + UpdateStatus(ctx context.Context, templateInstance *v1.TemplateInstance, opts metav1.UpdateOptions) (*v1.TemplateInstance, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.TemplateInstance, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.TemplateInstanceList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.TemplateInstance, err error) + TemplateInstanceExpansion +} + +// templateInstances implements TemplateInstanceInterface +type templateInstances struct { + client rest.Interface + ns string +} + +// newTemplateInstances returns a TemplateInstances +func newTemplateInstances(c *TemplateV1Client, namespace string) *templateInstances { + return &templateInstances{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the templateInstance, and returns the corresponding templateInstance object, and an error if there is any. +func (c *templateInstances) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.TemplateInstance, err error) { + result = &v1.TemplateInstance{} + err = c.client.Get(). + Namespace(c.ns). + Resource("templateinstances"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of TemplateInstances that match those selectors. +func (c *templateInstances) List(ctx context.Context, opts metav1.ListOptions) (result *v1.TemplateInstanceList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.TemplateInstanceList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("templateinstances"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested templateInstances. +func (c *templateInstances) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("templateinstances"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a templateInstance and creates it. Returns the server's representation of the templateInstance, and an error, if there is any. +func (c *templateInstances) Create(ctx context.Context, templateInstance *v1.TemplateInstance, opts metav1.CreateOptions) (result *v1.TemplateInstance, err error) { + result = &v1.TemplateInstance{} + err = c.client.Post(). + Namespace(c.ns). + Resource("templateinstances"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(templateInstance). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a templateInstance and updates it. Returns the server's representation of the templateInstance, and an error, if there is any. +func (c *templateInstances) Update(ctx context.Context, templateInstance *v1.TemplateInstance, opts metav1.UpdateOptions) (result *v1.TemplateInstance, err error) { + result = &v1.TemplateInstance{} + err = c.client.Put(). + Namespace(c.ns). + Resource("templateinstances"). + Name(templateInstance.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(templateInstance). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *templateInstances) UpdateStatus(ctx context.Context, templateInstance *v1.TemplateInstance, opts metav1.UpdateOptions) (result *v1.TemplateInstance, err error) { + result = &v1.TemplateInstance{} + err = c.client.Put(). + Namespace(c.ns). + Resource("templateinstances"). + Name(templateInstance.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(templateInstance). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the templateInstance and deletes it. Returns an error if one occurs. +func (c *templateInstances) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("templateinstances"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *templateInstances) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Namespace(c.ns). + Resource("templateinstances"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched templateInstance. +func (c *templateInstances) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.TemplateInstance, err error) { + result = &v1.TemplateInstance{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("templateinstances"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/template/informers/externalversions/factory.go b/vendor/github.com/openshift/client-go/template/informers/externalversions/factory.go new file mode 100644 index 0000000000000..84fd496942537 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/informers/externalversions/factory.go @@ -0,0 +1,164 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + reflect "reflect" + sync "sync" + time "time" + + versioned "github.com/openshift/client-go/template/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/template/informers/externalversions/internalinterfaces" + template "github.com/openshift/client-go/template/informers/externalversions/template" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// SharedInformerOption defines the functional option type for SharedInformerFactory. +type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory + +type sharedInformerFactory struct { + client versioned.Interface + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc + lock sync.Mutex + defaultResync time.Duration + customResync map[reflect.Type]time.Duration + + informers map[reflect.Type]cache.SharedIndexInformer + // startedInformers is used for tracking which informers have been started. + // This allows Start() to be called multiple times safely. + startedInformers map[reflect.Type]bool +} + +// WithCustomResyncConfig sets a custom resync period for the specified informer types. +func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + for k, v := range resyncConfig { + factory.customResync[reflect.TypeOf(k)] = v + } + return factory + } +} + +// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory. +func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.tweakListOptions = tweakListOptions + return factory + } +} + +// WithNamespace limits the SharedInformerFactory to the specified namespace. +func WithNamespace(namespace string) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.namespace = namespace + return factory + } +} + +// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. +func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync) +} + +// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory. +// Listers obtained via this SharedInformerFactory will be subject to the same filters +// as specified here. +// Deprecated: Please use NewSharedInformerFactoryWithOptions instead +func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions)) +} + +// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options. +func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory { + factory := &sharedInformerFactory{ + client: client, + namespace: v1.NamespaceAll, + defaultResync: defaultResync, + informers: make(map[reflect.Type]cache.SharedIndexInformer), + startedInformers: make(map[reflect.Type]bool), + customResync: make(map[reflect.Type]time.Duration), + } + + // Apply all options + for _, opt := range options { + factory = opt(factory) + } + + return factory +} + +// Start initializes all requested informers. +func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) { + f.lock.Lock() + defer f.lock.Unlock() + + for informerType, informer := range f.informers { + if !f.startedInformers[informerType] { + go informer.Run(stopCh) + f.startedInformers[informerType] = true + } + } +} + +// WaitForCacheSync waits for all started informers' cache were synced. +func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool { + informers := func() map[reflect.Type]cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informers := map[reflect.Type]cache.SharedIndexInformer{} + for informerType, informer := range f.informers { + if f.startedInformers[informerType] { + informers[informerType] = informer + } + } + return informers + }() + + res := map[reflect.Type]bool{} + for informType, informer := range informers { + res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced) + } + return res +} + +// InternalInformerFor returns the SharedIndexInformer for obj using an internal +// client. +func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(obj) + informer, exists := f.informers[informerType] + if exists { + return informer + } + + resyncPeriod, exists := f.customResync[informerType] + if !exists { + resyncPeriod = f.defaultResync + } + + informer = newFunc(f.client, resyncPeriod) + f.informers[informerType] = informer + + return informer +} + +// SharedInformerFactory provides shared informers for resources in all known +// API group versions. +type SharedInformerFactory interface { + internalinterfaces.SharedInformerFactory + ForResource(resource schema.GroupVersionResource) (GenericInformer, error) + WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool + + Template() template.Interface +} + +func (f *sharedInformerFactory) Template() template.Interface { + return template.New(f, f.namespace, f.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/template/informers/externalversions/generic.go b/vendor/github.com/openshift/client-go/template/informers/externalversions/generic.go new file mode 100644 index 0000000000000..47ac89753ba32 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/informers/externalversions/generic.go @@ -0,0 +1,50 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + "fmt" + + v1 "github.com/openshift/api/template/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// GenericInformer is type of SharedIndexInformer which will locate and delegate to other +// sharedInformers based on type +type GenericInformer interface { + Informer() cache.SharedIndexInformer + Lister() cache.GenericLister +} + +type genericInformer struct { + informer cache.SharedIndexInformer + resource schema.GroupResource +} + +// Informer returns the SharedIndexInformer. +func (f *genericInformer) Informer() cache.SharedIndexInformer { + return f.informer +} + +// Lister returns the GenericLister. +func (f *genericInformer) Lister() cache.GenericLister { + return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource) +} + +// ForResource gives generic access to a shared informer of the matching type +// TODO extend this to unknown resources with a client pool +func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { + switch resource { + // Group=template.openshift.io, Version=v1 + case v1.SchemeGroupVersion.WithResource("brokertemplateinstances"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Template().V1().BrokerTemplateInstances().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("templates"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Template().V1().Templates().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("templateinstances"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Template().V1().TemplateInstances().Informer()}, nil + + } + + return nil, fmt.Errorf("no informer found for %v", resource) +} diff --git a/vendor/github.com/openshift/client-go/template/informers/externalversions/internalinterfaces/factory_interfaces.go b/vendor/github.com/openshift/client-go/template/informers/externalversions/internalinterfaces/factory_interfaces.go new file mode 100644 index 0000000000000..1b2aea92f99c3 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -0,0 +1,24 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package internalinterfaces + +import ( + time "time" + + versioned "github.com/openshift/client-go/template/clientset/versioned" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + cache "k8s.io/client-go/tools/cache" +) + +// NewInformerFunc takes versioned.Interface and time.Duration to return a SharedIndexInformer. +type NewInformerFunc func(versioned.Interface, time.Duration) cache.SharedIndexInformer + +// SharedInformerFactory a small interface to allow for adding an informer without an import cycle +type SharedInformerFactory interface { + Start(stopCh <-chan struct{}) + InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer +} + +// TweakListOptionsFunc is a function that transforms a v1.ListOptions. +type TweakListOptionsFunc func(*v1.ListOptions) diff --git a/vendor/github.com/openshift/client-go/template/informers/externalversions/template/interface.go b/vendor/github.com/openshift/client-go/template/informers/externalversions/template/interface.go new file mode 100644 index 0000000000000..a06ae741861d8 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/informers/externalversions/template/interface.go @@ -0,0 +1,30 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package template + +import ( + internalinterfaces "github.com/openshift/client-go/template/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/template/informers/externalversions/template/v1" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1 provides access to shared informers for resources in V1. + V1() v1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1 returns a new v1.Interface. +func (g *group) V1() v1.Interface { + return v1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/brokertemplateinstance.go b/vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/brokertemplateinstance.go new file mode 100644 index 0000000000000..5651bafc59eca --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/brokertemplateinstance.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + templatev1 "github.com/openshift/api/template/v1" + versioned "github.com/openshift/client-go/template/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/template/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/template/listers/template/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// BrokerTemplateInstanceInformer provides access to a shared informer and lister for +// BrokerTemplateInstances. +type BrokerTemplateInstanceInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.BrokerTemplateInstanceLister +} + +type brokerTemplateInstanceInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewBrokerTemplateInstanceInformer constructs a new informer for BrokerTemplateInstance type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewBrokerTemplateInstanceInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredBrokerTemplateInstanceInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredBrokerTemplateInstanceInformer constructs a new informer for BrokerTemplateInstance type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredBrokerTemplateInstanceInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.TemplateV1().BrokerTemplateInstances().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.TemplateV1().BrokerTemplateInstances().Watch(context.TODO(), options) + }, + }, + &templatev1.BrokerTemplateInstance{}, + resyncPeriod, + indexers, + ) +} + +func (f *brokerTemplateInstanceInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredBrokerTemplateInstanceInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *brokerTemplateInstanceInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&templatev1.BrokerTemplateInstance{}, f.defaultInformer) +} + +func (f *brokerTemplateInstanceInformer) Lister() v1.BrokerTemplateInstanceLister { + return v1.NewBrokerTemplateInstanceLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/interface.go b/vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/interface.go new file mode 100644 index 0000000000000..19f80d3c9a926 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/interface.go @@ -0,0 +1,43 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + internalinterfaces "github.com/openshift/client-go/template/informers/externalversions/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // BrokerTemplateInstances returns a BrokerTemplateInstanceInformer. + BrokerTemplateInstances() BrokerTemplateInstanceInformer + // Templates returns a TemplateInformer. + Templates() TemplateInformer + // TemplateInstances returns a TemplateInstanceInformer. + TemplateInstances() TemplateInstanceInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// BrokerTemplateInstances returns a BrokerTemplateInstanceInformer. +func (v *version) BrokerTemplateInstances() BrokerTemplateInstanceInformer { + return &brokerTemplateInstanceInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + +// Templates returns a TemplateInformer. +func (v *version) Templates() TemplateInformer { + return &templateInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} + +// TemplateInstances returns a TemplateInstanceInformer. +func (v *version) TemplateInstances() TemplateInstanceInformer { + return &templateInstanceInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/template.go b/vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/template.go new file mode 100644 index 0000000000000..dcc6213891abe --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/template.go @@ -0,0 +1,74 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + templatev1 "github.com/openshift/api/template/v1" + versioned "github.com/openshift/client-go/template/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/template/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/template/listers/template/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// TemplateInformer provides access to a shared informer and lister for +// Templates. +type TemplateInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.TemplateLister +} + +type templateInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewTemplateInformer constructs a new informer for Template type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewTemplateInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredTemplateInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredTemplateInformer constructs a new informer for Template type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredTemplateInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.TemplateV1().Templates(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.TemplateV1().Templates(namespace).Watch(context.TODO(), options) + }, + }, + &templatev1.Template{}, + resyncPeriod, + indexers, + ) +} + +func (f *templateInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredTemplateInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *templateInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&templatev1.Template{}, f.defaultInformer) +} + +func (f *templateInformer) Lister() v1.TemplateLister { + return v1.NewTemplateLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/templateinstance.go b/vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/templateinstance.go new file mode 100644 index 0000000000000..c45181db770f5 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/informers/externalversions/template/v1/templateinstance.go @@ -0,0 +1,74 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + templatev1 "github.com/openshift/api/template/v1" + versioned "github.com/openshift/client-go/template/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/template/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/template/listers/template/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// TemplateInstanceInformer provides access to a shared informer and lister for +// TemplateInstances. +type TemplateInstanceInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.TemplateInstanceLister +} + +type templateInstanceInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewTemplateInstanceInformer constructs a new informer for TemplateInstance type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewTemplateInstanceInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredTemplateInstanceInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredTemplateInstanceInformer constructs a new informer for TemplateInstance type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredTemplateInstanceInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.TemplateV1().TemplateInstances(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.TemplateV1().TemplateInstances(namespace).Watch(context.TODO(), options) + }, + }, + &templatev1.TemplateInstance{}, + resyncPeriod, + indexers, + ) +} + +func (f *templateInstanceInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredTemplateInstanceInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *templateInstanceInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&templatev1.TemplateInstance{}, f.defaultInformer) +} + +func (f *templateInstanceInformer) Lister() v1.TemplateInstanceLister { + return v1.NewTemplateInstanceLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/template/listers/template/v1/brokertemplateinstance.go b/vendor/github.com/openshift/client-go/template/listers/template/v1/brokertemplateinstance.go new file mode 100644 index 0000000000000..8455b726dfce5 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/listers/template/v1/brokertemplateinstance.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/template/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// BrokerTemplateInstanceLister helps list BrokerTemplateInstances. +// All objects returned here must be treated as read-only. +type BrokerTemplateInstanceLister interface { + // List lists all BrokerTemplateInstances in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.BrokerTemplateInstance, err error) + // Get retrieves the BrokerTemplateInstance from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.BrokerTemplateInstance, error) + BrokerTemplateInstanceListerExpansion +} + +// brokerTemplateInstanceLister implements the BrokerTemplateInstanceLister interface. +type brokerTemplateInstanceLister struct { + indexer cache.Indexer +} + +// NewBrokerTemplateInstanceLister returns a new BrokerTemplateInstanceLister. +func NewBrokerTemplateInstanceLister(indexer cache.Indexer) BrokerTemplateInstanceLister { + return &brokerTemplateInstanceLister{indexer: indexer} +} + +// List lists all BrokerTemplateInstances in the indexer. +func (s *brokerTemplateInstanceLister) List(selector labels.Selector) (ret []*v1.BrokerTemplateInstance, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.BrokerTemplateInstance)) + }) + return ret, err +} + +// Get retrieves the BrokerTemplateInstance from the index for a given name. +func (s *brokerTemplateInstanceLister) Get(name string) (*v1.BrokerTemplateInstance, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("brokertemplateinstance"), name) + } + return obj.(*v1.BrokerTemplateInstance), nil +} diff --git a/vendor/github.com/openshift/client-go/template/listers/template/v1/expansion_generated.go b/vendor/github.com/openshift/client-go/template/listers/template/v1/expansion_generated.go new file mode 100644 index 0000000000000..851f826072ca6 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/listers/template/v1/expansion_generated.go @@ -0,0 +1,15 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +// BrokerTemplateInstanceListerExpansion allows custom methods to be added to +// BrokerTemplateInstanceLister. +type BrokerTemplateInstanceListerExpansion interface{} + +// TemplateInstanceListerExpansion allows custom methods to be added to +// TemplateInstanceLister. +type TemplateInstanceListerExpansion interface{} + +// TemplateInstanceNamespaceListerExpansion allows custom methods to be added to +// TemplateInstanceNamespaceLister. +type TemplateInstanceNamespaceListerExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/template/listers/template/v1/template.go b/vendor/github.com/openshift/client-go/template/listers/template/v1/template.go new file mode 100644 index 0000000000000..3b92dc78c48b5 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/listers/template/v1/template.go @@ -0,0 +1,83 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/template/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// TemplateLister helps list Templates. +// All objects returned here must be treated as read-only. +type TemplateLister interface { + // List lists all Templates in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.Template, err error) + // Templates returns an object that can list and get Templates. + Templates(namespace string) TemplateNamespaceLister + TemplateListerExpansion +} + +// templateLister implements the TemplateLister interface. +type templateLister struct { + indexer cache.Indexer +} + +// NewTemplateLister returns a new TemplateLister. +func NewTemplateLister(indexer cache.Indexer) TemplateLister { + return &templateLister{indexer: indexer} +} + +// List lists all Templates in the indexer. +func (s *templateLister) List(selector labels.Selector) (ret []*v1.Template, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.Template)) + }) + return ret, err +} + +// Templates returns an object that can list and get Templates. +func (s *templateLister) Templates(namespace string) TemplateNamespaceLister { + return templateNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// TemplateNamespaceLister helps list and get Templates. +// All objects returned here must be treated as read-only. +type TemplateNamespaceLister interface { + // List lists all Templates in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.Template, err error) + // Get retrieves the Template from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.Template, error) + TemplateNamespaceListerExpansion +} + +// templateNamespaceLister implements the TemplateNamespaceLister +// interface. +type templateNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all Templates in the indexer for a given namespace. +func (s templateNamespaceLister) List(selector labels.Selector) (ret []*v1.Template, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.Template)) + }) + return ret, err +} + +// Get retrieves the Template from the indexer for a given namespace and name. +func (s templateNamespaceLister) Get(name string) (*v1.Template, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("template"), name) + } + return obj.(*v1.Template), nil +} diff --git a/vendor/github.com/openshift/client-go/template/listers/template/v1/template_expansion.go b/vendor/github.com/openshift/client-go/template/listers/template/v1/template_expansion.go new file mode 100644 index 0000000000000..3528107a97cc8 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/listers/template/v1/template_expansion.go @@ -0,0 +1,29 @@ +package v1 + +import ( + templateapiv1 "github.com/openshift/api/template/v1" + "k8s.io/apimachinery/pkg/api/errors" +) + +const TemplateUIDIndex = "templateuid" + +// TemplateListerExpansion allows custom methods to be added to +// TemplateLister. +type TemplateListerExpansion interface { + GetByUID(uid string) (*templateapiv1.Template, error) +} + +// TemplateNamespaceListerExpansion allows custom methods to be added to +// TemplateNamespaceLister. +type TemplateNamespaceListerExpansion interface{} + +func (s templateLister) GetByUID(uid string) (*templateapiv1.Template, error) { + templates, err := s.indexer.ByIndex(TemplateUIDIndex, uid) + if err != nil { + return nil, err + } + if len(templates) == 0 { + return nil, errors.NewNotFound(templateapiv1.Resource("template"), uid) + } + return templates[0].(*templateapiv1.Template), nil +} diff --git a/vendor/github.com/openshift/client-go/template/listers/template/v1/templateinstance.go b/vendor/github.com/openshift/client-go/template/listers/template/v1/templateinstance.go new file mode 100644 index 0000000000000..edc8f6db93632 --- /dev/null +++ b/vendor/github.com/openshift/client-go/template/listers/template/v1/templateinstance.go @@ -0,0 +1,83 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/template/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// TemplateInstanceLister helps list TemplateInstances. +// All objects returned here must be treated as read-only. +type TemplateInstanceLister interface { + // List lists all TemplateInstances in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.TemplateInstance, err error) + // TemplateInstances returns an object that can list and get TemplateInstances. + TemplateInstances(namespace string) TemplateInstanceNamespaceLister + TemplateInstanceListerExpansion +} + +// templateInstanceLister implements the TemplateInstanceLister interface. +type templateInstanceLister struct { + indexer cache.Indexer +} + +// NewTemplateInstanceLister returns a new TemplateInstanceLister. +func NewTemplateInstanceLister(indexer cache.Indexer) TemplateInstanceLister { + return &templateInstanceLister{indexer: indexer} +} + +// List lists all TemplateInstances in the indexer. +func (s *templateInstanceLister) List(selector labels.Selector) (ret []*v1.TemplateInstance, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.TemplateInstance)) + }) + return ret, err +} + +// TemplateInstances returns an object that can list and get TemplateInstances. +func (s *templateInstanceLister) TemplateInstances(namespace string) TemplateInstanceNamespaceLister { + return templateInstanceNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// TemplateInstanceNamespaceLister helps list and get TemplateInstances. +// All objects returned here must be treated as read-only. +type TemplateInstanceNamespaceLister interface { + // List lists all TemplateInstances in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.TemplateInstance, err error) + // Get retrieves the TemplateInstance from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.TemplateInstance, error) + TemplateInstanceNamespaceListerExpansion +} + +// templateInstanceNamespaceLister implements the TemplateInstanceNamespaceLister +// interface. +type templateInstanceNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all TemplateInstances in the indexer for a given namespace. +func (s templateInstanceNamespaceLister) List(selector labels.Selector) (ret []*v1.TemplateInstance, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1.TemplateInstance)) + }) + return ret, err +} + +// Get retrieves the TemplateInstance from the indexer for a given namespace and name. +func (s templateInstanceNamespaceLister) Get(name string) (*v1.TemplateInstance, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("templateinstance"), name) + } + return obj.(*v1.TemplateInstance), nil +} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/clientset.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/clientset.go new file mode 100644 index 0000000000000..f3ff1ebd7b766 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/clientset.go @@ -0,0 +1,81 @@ +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + + userv1 "github.com/openshift/client-go/user/clientset/versioned/typed/user/v1" + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + UserV1() userv1.UserV1Interface +} + +// Clientset contains the clients for groups. Each group has exactly one +// version included in a Clientset. +type Clientset struct { + *discovery.DiscoveryClient + userV1 *userv1.UserV1Client +} + +// UserV1 retrieves the UserV1Client +func (c *Clientset) UserV1() userv1.UserV1Interface { + return c.userV1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + var cs Clientset + var err error + cs.userV1, err = userv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + var cs Clientset + cs.userV1 = userv1.NewForConfigOrDie(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) + return &cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.userV1 = userv1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/doc.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/doc.go new file mode 100644 index 0000000000000..0e0c2a8900e2c --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated clientset. +package versioned diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/fake/clientset_generated.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/fake/clientset_generated.go new file mode 100644 index 0000000000000..ff3eb60226707 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/fake/clientset_generated.go @@ -0,0 +1,66 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + clientset "github.com/openshift/client-go/user/clientset/versioned" + userv1 "github.com/openshift/client-go/user/clientset/versioned/typed/user/v1" + fakeuserv1 "github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/discovery" + fakediscovery "k8s.io/client-go/discovery/fake" + "k8s.io/client-go/testing" +) + +// NewSimpleClientset returns a clientset that will respond with the provided objects. +// It's backed by a very simple object tracker that processes creates, updates and deletions as-is, +// without applying any validations and/or defaults. It shouldn't be considered a replacement +// for a real clientset and is mostly useful in simple unit tests. +func NewSimpleClientset(objects ...runtime.Object) *Clientset { + o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder()) + for _, obj := range objects { + if err := o.Add(obj); err != nil { + panic(err) + } + } + + cs := &Clientset{tracker: o} + cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake} + cs.AddReactor("*", "*", testing.ObjectReaction(o)) + cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) { + gvr := action.GetResource() + ns := action.GetNamespace() + watch, err := o.Watch(gvr, ns) + if err != nil { + return false, nil, err + } + return true, watch, nil + }) + + return cs +} + +// Clientset implements clientset.Interface. Meant to be embedded into a +// struct to get a default implementation. This makes faking out just the method +// you want to test easier. +type Clientset struct { + testing.Fake + discovery *fakediscovery.FakeDiscovery + tracker testing.ObjectTracker +} + +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + return c.discovery +} + +func (c *Clientset) Tracker() testing.ObjectTracker { + return c.tracker +} + +var _ clientset.Interface = &Clientset{} + +// UserV1 retrieves the UserV1Client +func (c *Clientset) UserV1() userv1.UserV1Interface { + return &fakeuserv1.FakeUserV1{Fake: &c.Fake} +} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/fake/doc.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/fake/doc.go new file mode 100644 index 0000000000000..3630ed1cd17db --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/fake/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated fake clientset. +package fake diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/fake/register.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/fake/register.go new file mode 100644 index 0000000000000..6936cf5701871 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/fake/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + userv1 "github.com/openshift/api/user/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var scheme = runtime.NewScheme() +var codecs = serializer.NewCodecFactory(scheme) + +var localSchemeBuilder = runtime.SchemeBuilder{ + userv1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(scheme)) +} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/scheme/doc.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/scheme/doc.go new file mode 100644 index 0000000000000..14db57a58f8d2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/scheme/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package contains the scheme of the automatically generated clientset. +package scheme diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/scheme/register.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/scheme/register.go new file mode 100644 index 0000000000000..85f7e81258d04 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/scheme/register.go @@ -0,0 +1,40 @@ +// Code generated by client-gen. DO NOT EDIT. + +package scheme + +import ( + userv1 "github.com/openshift/api/user/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + userv1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/doc.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/doc.go new file mode 100644 index 0000000000000..225e6b2be34f2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/doc.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/doc.go new file mode 100644 index 0000000000000..2b5ba4c8e4422 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// Package fake has the automatically generated clients. +package fake diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_group.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_group.go new file mode 100644 index 0000000000000..c09f6bb984b7e --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_group.go @@ -0,0 +1,106 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + userv1 "github.com/openshift/api/user/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeGroups implements GroupInterface +type FakeGroups struct { + Fake *FakeUserV1 +} + +var groupsResource = schema.GroupVersionResource{Group: "user.openshift.io", Version: "v1", Resource: "groups"} + +var groupsKind = schema.GroupVersionKind{Group: "user.openshift.io", Version: "v1", Kind: "Group"} + +// Get takes name of the group, and returns the corresponding group object, and an error if there is any. +func (c *FakeGroups) Get(ctx context.Context, name string, options v1.GetOptions) (result *userv1.Group, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(groupsResource, name), &userv1.Group{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.Group), err +} + +// List takes label and field selectors, and returns the list of Groups that match those selectors. +func (c *FakeGroups) List(ctx context.Context, opts v1.ListOptions) (result *userv1.GroupList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(groupsResource, groupsKind, opts), &userv1.GroupList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &userv1.GroupList{ListMeta: obj.(*userv1.GroupList).ListMeta} + for _, item := range obj.(*userv1.GroupList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested groups. +func (c *FakeGroups) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(groupsResource, opts)) +} + +// Create takes the representation of a group and creates it. Returns the server's representation of the group, and an error, if there is any. +func (c *FakeGroups) Create(ctx context.Context, group *userv1.Group, opts v1.CreateOptions) (result *userv1.Group, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(groupsResource, group), &userv1.Group{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.Group), err +} + +// Update takes the representation of a group and updates it. Returns the server's representation of the group, and an error, if there is any. +func (c *FakeGroups) Update(ctx context.Context, group *userv1.Group, opts v1.UpdateOptions) (result *userv1.Group, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(groupsResource, group), &userv1.Group{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.Group), err +} + +// Delete takes name of the group and deletes it. Returns an error if one occurs. +func (c *FakeGroups) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(groupsResource, name), &userv1.Group{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeGroups) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(groupsResource, listOpts) + + _, err := c.Fake.Invokes(action, &userv1.GroupList{}) + return err +} + +// Patch applies the patch and returns the patched group. +func (c *FakeGroups) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *userv1.Group, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(groupsResource, name, pt, data, subresources...), &userv1.Group{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.Group), err +} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_identity.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_identity.go new file mode 100644 index 0000000000000..6319204c0f2b4 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_identity.go @@ -0,0 +1,106 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + userv1 "github.com/openshift/api/user/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeIdentities implements IdentityInterface +type FakeIdentities struct { + Fake *FakeUserV1 +} + +var identitiesResource = schema.GroupVersionResource{Group: "user.openshift.io", Version: "v1", Resource: "identities"} + +var identitiesKind = schema.GroupVersionKind{Group: "user.openshift.io", Version: "v1", Kind: "Identity"} + +// Get takes name of the identity, and returns the corresponding identity object, and an error if there is any. +func (c *FakeIdentities) Get(ctx context.Context, name string, options v1.GetOptions) (result *userv1.Identity, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(identitiesResource, name), &userv1.Identity{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.Identity), err +} + +// List takes label and field selectors, and returns the list of Identities that match those selectors. +func (c *FakeIdentities) List(ctx context.Context, opts v1.ListOptions) (result *userv1.IdentityList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(identitiesResource, identitiesKind, opts), &userv1.IdentityList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &userv1.IdentityList{ListMeta: obj.(*userv1.IdentityList).ListMeta} + for _, item := range obj.(*userv1.IdentityList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested identities. +func (c *FakeIdentities) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(identitiesResource, opts)) +} + +// Create takes the representation of a identity and creates it. Returns the server's representation of the identity, and an error, if there is any. +func (c *FakeIdentities) Create(ctx context.Context, identity *userv1.Identity, opts v1.CreateOptions) (result *userv1.Identity, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(identitiesResource, identity), &userv1.Identity{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.Identity), err +} + +// Update takes the representation of a identity and updates it. Returns the server's representation of the identity, and an error, if there is any. +func (c *FakeIdentities) Update(ctx context.Context, identity *userv1.Identity, opts v1.UpdateOptions) (result *userv1.Identity, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(identitiesResource, identity), &userv1.Identity{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.Identity), err +} + +// Delete takes name of the identity and deletes it. Returns an error if one occurs. +func (c *FakeIdentities) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(identitiesResource, name), &userv1.Identity{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeIdentities) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(identitiesResource, listOpts) + + _, err := c.Fake.Invokes(action, &userv1.IdentityList{}) + return err +} + +// Patch applies the patch and returns the patched identity. +func (c *FakeIdentities) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *userv1.Identity, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(identitiesResource, name, pt, data, subresources...), &userv1.Identity{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.Identity), err +} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_user.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_user.go new file mode 100644 index 0000000000000..c88485803c9b7 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_user.go @@ -0,0 +1,106 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + userv1 "github.com/openshift/api/user/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeUsers implements UserInterface +type FakeUsers struct { + Fake *FakeUserV1 +} + +var usersResource = schema.GroupVersionResource{Group: "user.openshift.io", Version: "v1", Resource: "users"} + +var usersKind = schema.GroupVersionKind{Group: "user.openshift.io", Version: "v1", Kind: "User"} + +// Get takes name of the user, and returns the corresponding user object, and an error if there is any. +func (c *FakeUsers) Get(ctx context.Context, name string, options v1.GetOptions) (result *userv1.User, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(usersResource, name), &userv1.User{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.User), err +} + +// List takes label and field selectors, and returns the list of Users that match those selectors. +func (c *FakeUsers) List(ctx context.Context, opts v1.ListOptions) (result *userv1.UserList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(usersResource, usersKind, opts), &userv1.UserList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &userv1.UserList{ListMeta: obj.(*userv1.UserList).ListMeta} + for _, item := range obj.(*userv1.UserList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested users. +func (c *FakeUsers) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewRootWatchAction(usersResource, opts)) +} + +// Create takes the representation of a user and creates it. Returns the server's representation of the user, and an error, if there is any. +func (c *FakeUsers) Create(ctx context.Context, user *userv1.User, opts v1.CreateOptions) (result *userv1.User, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(usersResource, user), &userv1.User{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.User), err +} + +// Update takes the representation of a user and updates it. Returns the server's representation of the user, and an error, if there is any. +func (c *FakeUsers) Update(ctx context.Context, user *userv1.User, opts v1.UpdateOptions) (result *userv1.User, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(usersResource, user), &userv1.User{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.User), err +} + +// Delete takes name of the user and deletes it. Returns an error if one occurs. +func (c *FakeUsers) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(usersResource, name), &userv1.User{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeUsers) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewRootDeleteCollectionAction(usersResource, listOpts) + + _, err := c.Fake.Invokes(action, &userv1.UserList{}) + return err +} + +// Patch applies the patch and returns the patched user. +func (c *FakeUsers) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *userv1.User, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(usersResource, name, pt, data, subresources...), &userv1.User{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.User), err +} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_user_client.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_user_client.go new file mode 100644 index 0000000000000..bd16882dc9ca2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_user_client.go @@ -0,0 +1,36 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + v1 "github.com/openshift/client-go/user/clientset/versioned/typed/user/v1" + rest "k8s.io/client-go/rest" + testing "k8s.io/client-go/testing" +) + +type FakeUserV1 struct { + *testing.Fake +} + +func (c *FakeUserV1) Groups() v1.GroupInterface { + return &FakeGroups{c} +} + +func (c *FakeUserV1) Identities() v1.IdentityInterface { + return &FakeIdentities{c} +} + +func (c *FakeUserV1) Users() v1.UserInterface { + return &FakeUsers{c} +} + +func (c *FakeUserV1) UserIdentityMappings() v1.UserIdentityMappingInterface { + return &FakeUserIdentityMappings{c} +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *FakeUserV1) RESTClient() rest.Interface { + var ret *rest.RESTClient + return ret +} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_useridentitymapping.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_useridentitymapping.go new file mode 100644 index 0000000000000..b34d4ea159af5 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake/fake_useridentitymapping.go @@ -0,0 +1,58 @@ +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + userv1 "github.com/openshift/api/user/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + testing "k8s.io/client-go/testing" +) + +// FakeUserIdentityMappings implements UserIdentityMappingInterface +type FakeUserIdentityMappings struct { + Fake *FakeUserV1 +} + +var useridentitymappingsResource = schema.GroupVersionResource{Group: "user.openshift.io", Version: "v1", Resource: "useridentitymappings"} + +var useridentitymappingsKind = schema.GroupVersionKind{Group: "user.openshift.io", Version: "v1", Kind: "UserIdentityMapping"} + +// Get takes name of the userIdentityMapping, and returns the corresponding userIdentityMapping object, and an error if there is any. +func (c *FakeUserIdentityMappings) Get(ctx context.Context, name string, options v1.GetOptions) (result *userv1.UserIdentityMapping, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(useridentitymappingsResource, name), &userv1.UserIdentityMapping{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.UserIdentityMapping), err +} + +// Create takes the representation of a userIdentityMapping and creates it. Returns the server's representation of the userIdentityMapping, and an error, if there is any. +func (c *FakeUserIdentityMappings) Create(ctx context.Context, userIdentityMapping *userv1.UserIdentityMapping, opts v1.CreateOptions) (result *userv1.UserIdentityMapping, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(useridentitymappingsResource, userIdentityMapping), &userv1.UserIdentityMapping{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.UserIdentityMapping), err +} + +// Update takes the representation of a userIdentityMapping and updates it. Returns the server's representation of the userIdentityMapping, and an error, if there is any. +func (c *FakeUserIdentityMappings) Update(ctx context.Context, userIdentityMapping *userv1.UserIdentityMapping, opts v1.UpdateOptions) (result *userv1.UserIdentityMapping, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(useridentitymappingsResource, userIdentityMapping), &userv1.UserIdentityMapping{}) + if obj == nil { + return nil, err + } + return obj.(*userv1.UserIdentityMapping), err +} + +// Delete takes name of the userIdentityMapping and deletes it. Returns an error if one occurs. +func (c *FakeUserIdentityMappings) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(useridentitymappingsResource, name), &userv1.UserIdentityMapping{}) + return err +} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/generated_expansion.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/generated_expansion.go new file mode 100644 index 0000000000000..11d78bf5b4c58 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/generated_expansion.go @@ -0,0 +1,11 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type GroupExpansion interface{} + +type IdentityExpansion interface{} + +type UserExpansion interface{} + +type UserIdentityMappingExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/group.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/group.go new file mode 100644 index 0000000000000..cea6c488e77e2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/group.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/user/v1" + scheme "github.com/openshift/client-go/user/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// GroupsGetter has a method to return a GroupInterface. +// A group's client should implement this interface. +type GroupsGetter interface { + Groups() GroupInterface +} + +// GroupInterface has methods to work with Group resources. +type GroupInterface interface { + Create(ctx context.Context, group *v1.Group, opts metav1.CreateOptions) (*v1.Group, error) + Update(ctx context.Context, group *v1.Group, opts metav1.UpdateOptions) (*v1.Group, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Group, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.GroupList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Group, err error) + GroupExpansion +} + +// groups implements GroupInterface +type groups struct { + client rest.Interface +} + +// newGroups returns a Groups +func newGroups(c *UserV1Client) *groups { + return &groups{ + client: c.RESTClient(), + } +} + +// Get takes name of the group, and returns the corresponding group object, and an error if there is any. +func (c *groups) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Group, err error) { + result = &v1.Group{} + err = c.client.Get(). + Resource("groups"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Groups that match those selectors. +func (c *groups) List(ctx context.Context, opts metav1.ListOptions) (result *v1.GroupList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.GroupList{} + err = c.client.Get(). + Resource("groups"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested groups. +func (c *groups) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("groups"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a group and creates it. Returns the server's representation of the group, and an error, if there is any. +func (c *groups) Create(ctx context.Context, group *v1.Group, opts metav1.CreateOptions) (result *v1.Group, err error) { + result = &v1.Group{} + err = c.client.Post(). + Resource("groups"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(group). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a group and updates it. Returns the server's representation of the group, and an error, if there is any. +func (c *groups) Update(ctx context.Context, group *v1.Group, opts metav1.UpdateOptions) (result *v1.Group, err error) { + result = &v1.Group{} + err = c.client.Put(). + Resource("groups"). + Name(group.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(group). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the group and deletes it. Returns an error if one occurs. +func (c *groups) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("groups"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *groups) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("groups"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched group. +func (c *groups) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Group, err error) { + result = &v1.Group{} + err = c.client.Patch(pt). + Resource("groups"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/identity.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/identity.go new file mode 100644 index 0000000000000..1c5e09f56e7d2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/identity.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/user/v1" + scheme "github.com/openshift/client-go/user/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// IdentitiesGetter has a method to return a IdentityInterface. +// A group's client should implement this interface. +type IdentitiesGetter interface { + Identities() IdentityInterface +} + +// IdentityInterface has methods to work with Identity resources. +type IdentityInterface interface { + Create(ctx context.Context, identity *v1.Identity, opts metav1.CreateOptions) (*v1.Identity, error) + Update(ctx context.Context, identity *v1.Identity, opts metav1.UpdateOptions) (*v1.Identity, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Identity, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.IdentityList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Identity, err error) + IdentityExpansion +} + +// identities implements IdentityInterface +type identities struct { + client rest.Interface +} + +// newIdentities returns a Identities +func newIdentities(c *UserV1Client) *identities { + return &identities{ + client: c.RESTClient(), + } +} + +// Get takes name of the identity, and returns the corresponding identity object, and an error if there is any. +func (c *identities) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.Identity, err error) { + result = &v1.Identity{} + err = c.client.Get(). + Resource("identities"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Identities that match those selectors. +func (c *identities) List(ctx context.Context, opts metav1.ListOptions) (result *v1.IdentityList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.IdentityList{} + err = c.client.Get(). + Resource("identities"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested identities. +func (c *identities) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("identities"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a identity and creates it. Returns the server's representation of the identity, and an error, if there is any. +func (c *identities) Create(ctx context.Context, identity *v1.Identity, opts metav1.CreateOptions) (result *v1.Identity, err error) { + result = &v1.Identity{} + err = c.client.Post(). + Resource("identities"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(identity). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a identity and updates it. Returns the server's representation of the identity, and an error, if there is any. +func (c *identities) Update(ctx context.Context, identity *v1.Identity, opts metav1.UpdateOptions) (result *v1.Identity, err error) { + result = &v1.Identity{} + err = c.client.Put(). + Resource("identities"). + Name(identity.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(identity). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the identity and deletes it. Returns an error if one occurs. +func (c *identities) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("identities"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *identities) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("identities"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched identity. +func (c *identities) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Identity, err error) { + result = &v1.Identity{} + err = c.client.Patch(pt). + Resource("identities"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/user.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/user.go new file mode 100644 index 0000000000000..bcfa9cfb0c233 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/user.go @@ -0,0 +1,152 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + "time" + + v1 "github.com/openshift/api/user/v1" + scheme "github.com/openshift/client-go/user/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// UsersGetter has a method to return a UserInterface. +// A group's client should implement this interface. +type UsersGetter interface { + Users() UserInterface +} + +// UserInterface has methods to work with User resources. +type UserInterface interface { + Create(ctx context.Context, user *v1.User, opts metav1.CreateOptions) (*v1.User, error) + Update(ctx context.Context, user *v1.User, opts metav1.UpdateOptions) (*v1.User, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.User, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.UserList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.User, err error) + UserExpansion +} + +// users implements UserInterface +type users struct { + client rest.Interface +} + +// newUsers returns a Users +func newUsers(c *UserV1Client) *users { + return &users{ + client: c.RESTClient(), + } +} + +// Get takes name of the user, and returns the corresponding user object, and an error if there is any. +func (c *users) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.User, err error) { + result = &v1.User{} + err = c.client.Get(). + Resource("users"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Users that match those selectors. +func (c *users) List(ctx context.Context, opts metav1.ListOptions) (result *v1.UserList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.UserList{} + err = c.client.Get(). + Resource("users"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested users. +func (c *users) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("users"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a user and creates it. Returns the server's representation of the user, and an error, if there is any. +func (c *users) Create(ctx context.Context, user *v1.User, opts metav1.CreateOptions) (result *v1.User, err error) { + result = &v1.User{} + err = c.client.Post(). + Resource("users"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(user). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a user and updates it. Returns the server's representation of the user, and an error, if there is any. +func (c *users) Update(ctx context.Context, user *v1.User, opts metav1.UpdateOptions) (result *v1.User, err error) { + result = &v1.User{} + err = c.client.Put(). + Resource("users"). + Name(user.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(user). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the user and deletes it. Returns an error if one occurs. +func (c *users) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("users"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *users) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("users"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched user. +func (c *users) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.User, err error) { + result = &v1.User{} + err = c.client.Patch(pt). + Resource("users"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/user_client.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/user_client.go new file mode 100644 index 0000000000000..40790bc4a6fd3 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/user_client.go @@ -0,0 +1,88 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/user/v1" + "github.com/openshift/client-go/user/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type UserV1Interface interface { + RESTClient() rest.Interface + GroupsGetter + IdentitiesGetter + UsersGetter + UserIdentityMappingsGetter +} + +// UserV1Client is used to interact with features provided by the user.openshift.io group. +type UserV1Client struct { + restClient rest.Interface +} + +func (c *UserV1Client) Groups() GroupInterface { + return newGroups(c) +} + +func (c *UserV1Client) Identities() IdentityInterface { + return newIdentities(c) +} + +func (c *UserV1Client) Users() UserInterface { + return newUsers(c) +} + +func (c *UserV1Client) UserIdentityMappings() UserIdentityMappingInterface { + return newUserIdentityMappings(c) +} + +// NewForConfig creates a new UserV1Client for the given config. +func NewForConfig(c *rest.Config) (*UserV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &UserV1Client{client}, nil +} + +// NewForConfigOrDie creates a new UserV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *UserV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new UserV1Client for the given RESTClient. +func New(c rest.Interface) *UserV1Client { + return &UserV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *UserV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/useridentitymapping.go b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/useridentitymapping.go new file mode 100644 index 0000000000000..b11bfa7028c36 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/useridentitymapping.go @@ -0,0 +1,86 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + + v1 "github.com/openshift/api/user/v1" + scheme "github.com/openshift/client-go/user/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rest "k8s.io/client-go/rest" +) + +// UserIdentityMappingsGetter has a method to return a UserIdentityMappingInterface. +// A group's client should implement this interface. +type UserIdentityMappingsGetter interface { + UserIdentityMappings() UserIdentityMappingInterface +} + +// UserIdentityMappingInterface has methods to work with UserIdentityMapping resources. +type UserIdentityMappingInterface interface { + Create(ctx context.Context, userIdentityMapping *v1.UserIdentityMapping, opts metav1.CreateOptions) (*v1.UserIdentityMapping, error) + Update(ctx context.Context, userIdentityMapping *v1.UserIdentityMapping, opts metav1.UpdateOptions) (*v1.UserIdentityMapping, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.UserIdentityMapping, error) + UserIdentityMappingExpansion +} + +// userIdentityMappings implements UserIdentityMappingInterface +type userIdentityMappings struct { + client rest.Interface +} + +// newUserIdentityMappings returns a UserIdentityMappings +func newUserIdentityMappings(c *UserV1Client) *userIdentityMappings { + return &userIdentityMappings{ + client: c.RESTClient(), + } +} + +// Get takes name of the userIdentityMapping, and returns the corresponding userIdentityMapping object, and an error if there is any. +func (c *userIdentityMappings) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.UserIdentityMapping, err error) { + result = &v1.UserIdentityMapping{} + err = c.client.Get(). + Resource("useridentitymappings"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// Create takes the representation of a userIdentityMapping and creates it. Returns the server's representation of the userIdentityMapping, and an error, if there is any. +func (c *userIdentityMappings) Create(ctx context.Context, userIdentityMapping *v1.UserIdentityMapping, opts metav1.CreateOptions) (result *v1.UserIdentityMapping, err error) { + result = &v1.UserIdentityMapping{} + err = c.client.Post(). + Resource("useridentitymappings"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(userIdentityMapping). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a userIdentityMapping and updates it. Returns the server's representation of the userIdentityMapping, and an error, if there is any. +func (c *userIdentityMappings) Update(ctx context.Context, userIdentityMapping *v1.UserIdentityMapping, opts metav1.UpdateOptions) (result *v1.UserIdentityMapping, err error) { + result = &v1.UserIdentityMapping{} + err = c.client.Put(). + Resource("useridentitymappings"). + Name(userIdentityMapping.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(userIdentityMapping). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the userIdentityMapping and deletes it. Returns an error if one occurs. +func (c *userIdentityMappings) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("useridentitymappings"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} diff --git a/vendor/github.com/openshift/client-go/user/informers/externalversions/factory.go b/vendor/github.com/openshift/client-go/user/informers/externalversions/factory.go new file mode 100644 index 0000000000000..cde67f04bd1c0 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/informers/externalversions/factory.go @@ -0,0 +1,164 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + reflect "reflect" + sync "sync" + time "time" + + versioned "github.com/openshift/client-go/user/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/user/informers/externalversions/internalinterfaces" + user "github.com/openshift/client-go/user/informers/externalversions/user" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// SharedInformerOption defines the functional option type for SharedInformerFactory. +type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory + +type sharedInformerFactory struct { + client versioned.Interface + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc + lock sync.Mutex + defaultResync time.Duration + customResync map[reflect.Type]time.Duration + + informers map[reflect.Type]cache.SharedIndexInformer + // startedInformers is used for tracking which informers have been started. + // This allows Start() to be called multiple times safely. + startedInformers map[reflect.Type]bool +} + +// WithCustomResyncConfig sets a custom resync period for the specified informer types. +func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + for k, v := range resyncConfig { + factory.customResync[reflect.TypeOf(k)] = v + } + return factory + } +} + +// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory. +func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.tweakListOptions = tweakListOptions + return factory + } +} + +// WithNamespace limits the SharedInformerFactory to the specified namespace. +func WithNamespace(namespace string) SharedInformerOption { + return func(factory *sharedInformerFactory) *sharedInformerFactory { + factory.namespace = namespace + return factory + } +} + +// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces. +func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync) +} + +// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory. +// Listers obtained via this SharedInformerFactory will be subject to the same filters +// as specified here. +// Deprecated: Please use NewSharedInformerFactoryWithOptions instead +func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory { + return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions)) +} + +// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options. +func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory { + factory := &sharedInformerFactory{ + client: client, + namespace: v1.NamespaceAll, + defaultResync: defaultResync, + informers: make(map[reflect.Type]cache.SharedIndexInformer), + startedInformers: make(map[reflect.Type]bool), + customResync: make(map[reflect.Type]time.Duration), + } + + // Apply all options + for _, opt := range options { + factory = opt(factory) + } + + return factory +} + +// Start initializes all requested informers. +func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) { + f.lock.Lock() + defer f.lock.Unlock() + + for informerType, informer := range f.informers { + if !f.startedInformers[informerType] { + go informer.Run(stopCh) + f.startedInformers[informerType] = true + } + } +} + +// WaitForCacheSync waits for all started informers' cache were synced. +func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool { + informers := func() map[reflect.Type]cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informers := map[reflect.Type]cache.SharedIndexInformer{} + for informerType, informer := range f.informers { + if f.startedInformers[informerType] { + informers[informerType] = informer + } + } + return informers + }() + + res := map[reflect.Type]bool{} + for informType, informer := range informers { + res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced) + } + return res +} + +// InternalInformerFor returns the SharedIndexInformer for obj using an internal +// client. +func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(obj) + informer, exists := f.informers[informerType] + if exists { + return informer + } + + resyncPeriod, exists := f.customResync[informerType] + if !exists { + resyncPeriod = f.defaultResync + } + + informer = newFunc(f.client, resyncPeriod) + f.informers[informerType] = informer + + return informer +} + +// SharedInformerFactory provides shared informers for resources in all known +// API group versions. +type SharedInformerFactory interface { + internalinterfaces.SharedInformerFactory + ForResource(resource schema.GroupVersionResource) (GenericInformer, error) + WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool + + User() user.Interface +} + +func (f *sharedInformerFactory) User() user.Interface { + return user.New(f, f.namespace, f.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/user/informers/externalversions/generic.go b/vendor/github.com/openshift/client-go/user/informers/externalversions/generic.go new file mode 100644 index 0000000000000..6c8cb23b6e717 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/informers/externalversions/generic.go @@ -0,0 +1,50 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package externalversions + +import ( + "fmt" + + v1 "github.com/openshift/api/user/v1" + schema "k8s.io/apimachinery/pkg/runtime/schema" + cache "k8s.io/client-go/tools/cache" +) + +// GenericInformer is type of SharedIndexInformer which will locate and delegate to other +// sharedInformers based on type +type GenericInformer interface { + Informer() cache.SharedIndexInformer + Lister() cache.GenericLister +} + +type genericInformer struct { + informer cache.SharedIndexInformer + resource schema.GroupResource +} + +// Informer returns the SharedIndexInformer. +func (f *genericInformer) Informer() cache.SharedIndexInformer { + return f.informer +} + +// Lister returns the GenericLister. +func (f *genericInformer) Lister() cache.GenericLister { + return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource) +} + +// ForResource gives generic access to a shared informer of the matching type +// TODO extend this to unknown resources with a client pool +func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { + switch resource { + // Group=user.openshift.io, Version=v1 + case v1.SchemeGroupVersion.WithResource("groups"): + return &genericInformer{resource: resource.GroupResource(), informer: f.User().V1().Groups().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("identities"): + return &genericInformer{resource: resource.GroupResource(), informer: f.User().V1().Identities().Informer()}, nil + case v1.SchemeGroupVersion.WithResource("users"): + return &genericInformer{resource: resource.GroupResource(), informer: f.User().V1().Users().Informer()}, nil + + } + + return nil, fmt.Errorf("no informer found for %v", resource) +} diff --git a/vendor/github.com/openshift/client-go/user/informers/externalversions/internalinterfaces/factory_interfaces.go b/vendor/github.com/openshift/client-go/user/informers/externalversions/internalinterfaces/factory_interfaces.go new file mode 100644 index 0000000000000..8bd5bff0ccf03 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -0,0 +1,24 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package internalinterfaces + +import ( + time "time" + + versioned "github.com/openshift/client-go/user/clientset/versioned" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + cache "k8s.io/client-go/tools/cache" +) + +// NewInformerFunc takes versioned.Interface and time.Duration to return a SharedIndexInformer. +type NewInformerFunc func(versioned.Interface, time.Duration) cache.SharedIndexInformer + +// SharedInformerFactory a small interface to allow for adding an informer without an import cycle +type SharedInformerFactory interface { + Start(stopCh <-chan struct{}) + InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer +} + +// TweakListOptionsFunc is a function that transforms a v1.ListOptions. +type TweakListOptionsFunc func(*v1.ListOptions) diff --git a/vendor/github.com/openshift/client-go/user/informers/externalversions/user/interface.go b/vendor/github.com/openshift/client-go/user/informers/externalversions/user/interface.go new file mode 100644 index 0000000000000..8ae8bae69500b --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/informers/externalversions/user/interface.go @@ -0,0 +1,30 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package user + +import ( + internalinterfaces "github.com/openshift/client-go/user/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/user/informers/externalversions/user/v1" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1 provides access to shared informers for resources in V1. + V1() v1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1 returns a new v1.Interface. +func (g *group) V1() v1.Interface { + return v1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/group.go b/vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/group.go new file mode 100644 index 0000000000000..24df75f7c13d4 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/group.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + userv1 "github.com/openshift/api/user/v1" + versioned "github.com/openshift/client-go/user/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/user/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/user/listers/user/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// GroupInformer provides access to a shared informer and lister for +// Groups. +type GroupInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.GroupLister +} + +type groupInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewGroupInformer constructs a new informer for Group type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewGroupInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredGroupInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredGroupInformer constructs a new informer for Group type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredGroupInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.UserV1().Groups().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.UserV1().Groups().Watch(context.TODO(), options) + }, + }, + &userv1.Group{}, + resyncPeriod, + indexers, + ) +} + +func (f *groupInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredGroupInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *groupInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&userv1.Group{}, f.defaultInformer) +} + +func (f *groupInformer) Lister() v1.GroupLister { + return v1.NewGroupLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/identity.go b/vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/identity.go new file mode 100644 index 0000000000000..9a4689781814c --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/identity.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + userv1 "github.com/openshift/api/user/v1" + versioned "github.com/openshift/client-go/user/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/user/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/user/listers/user/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// IdentityInformer provides access to a shared informer and lister for +// Identities. +type IdentityInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.IdentityLister +} + +type identityInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewIdentityInformer constructs a new informer for Identity type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewIdentityInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredIdentityInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredIdentityInformer constructs a new informer for Identity type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredIdentityInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.UserV1().Identities().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.UserV1().Identities().Watch(context.TODO(), options) + }, + }, + &userv1.Identity{}, + resyncPeriod, + indexers, + ) +} + +func (f *identityInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredIdentityInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *identityInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&userv1.Identity{}, f.defaultInformer) +} + +func (f *identityInformer) Lister() v1.IdentityLister { + return v1.NewIdentityLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/interface.go b/vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/interface.go new file mode 100644 index 0000000000000..267a1543ddef9 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/interface.go @@ -0,0 +1,43 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + internalinterfaces "github.com/openshift/client-go/user/informers/externalversions/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // Groups returns a GroupInformer. + Groups() GroupInformer + // Identities returns a IdentityInformer. + Identities() IdentityInformer + // Users returns a UserInformer. + Users() UserInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// Groups returns a GroupInformer. +func (v *version) Groups() GroupInformer { + return &groupInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + +// Identities returns a IdentityInformer. +func (v *version) Identities() IdentityInformer { + return &identityInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + +// Users returns a UserInformer. +func (v *version) Users() UserInformer { + return &userInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} diff --git a/vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/user.go b/vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/user.go new file mode 100644 index 0000000000000..57aaca1f70145 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/informers/externalversions/user/v1/user.go @@ -0,0 +1,73 @@ +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + time "time" + + userv1 "github.com/openshift/api/user/v1" + versioned "github.com/openshift/client-go/user/clientset/versioned" + internalinterfaces "github.com/openshift/client-go/user/informers/externalversions/internalinterfaces" + v1 "github.com/openshift/client-go/user/listers/user/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// UserInformer provides access to a shared informer and lister for +// Users. +type UserInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.UserLister +} + +type userInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewUserInformer constructs a new informer for User type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewUserInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredUserInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredUserInformer constructs a new informer for User type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredUserInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.UserV1().Users().List(context.TODO(), options) + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.UserV1().Users().Watch(context.TODO(), options) + }, + }, + &userv1.User{}, + resyncPeriod, + indexers, + ) +} + +func (f *userInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredUserInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *userInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&userv1.User{}, f.defaultInformer) +} + +func (f *userInformer) Lister() v1.UserLister { + return v1.NewUserLister(f.Informer().GetIndexer()) +} diff --git a/vendor/github.com/openshift/client-go/user/listers/user/v1/expansion_generated.go b/vendor/github.com/openshift/client-go/user/listers/user/v1/expansion_generated.go new file mode 100644 index 0000000000000..dcb8be2181276 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/listers/user/v1/expansion_generated.go @@ -0,0 +1,15 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +// GroupListerExpansion allows custom methods to be added to +// GroupLister. +type GroupListerExpansion interface{} + +// IdentityListerExpansion allows custom methods to be added to +// IdentityLister. +type IdentityListerExpansion interface{} + +// UserListerExpansion allows custom methods to be added to +// UserLister. +type UserListerExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/user/listers/user/v1/group.go b/vendor/github.com/openshift/client-go/user/listers/user/v1/group.go new file mode 100644 index 0000000000000..824b87634e524 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/listers/user/v1/group.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/user/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// GroupLister helps list Groups. +// All objects returned here must be treated as read-only. +type GroupLister interface { + // List lists all Groups in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.Group, err error) + // Get retrieves the Group from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.Group, error) + GroupListerExpansion +} + +// groupLister implements the GroupLister interface. +type groupLister struct { + indexer cache.Indexer +} + +// NewGroupLister returns a new GroupLister. +func NewGroupLister(indexer cache.Indexer) GroupLister { + return &groupLister{indexer: indexer} +} + +// List lists all Groups in the indexer. +func (s *groupLister) List(selector labels.Selector) (ret []*v1.Group, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.Group)) + }) + return ret, err +} + +// Get retrieves the Group from the index for a given name. +func (s *groupLister) Get(name string) (*v1.Group, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("group"), name) + } + return obj.(*v1.Group), nil +} diff --git a/vendor/github.com/openshift/client-go/user/listers/user/v1/identity.go b/vendor/github.com/openshift/client-go/user/listers/user/v1/identity.go new file mode 100644 index 0000000000000..67d3decbeb484 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/listers/user/v1/identity.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/user/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// IdentityLister helps list Identities. +// All objects returned here must be treated as read-only. +type IdentityLister interface { + // List lists all Identities in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.Identity, err error) + // Get retrieves the Identity from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.Identity, error) + IdentityListerExpansion +} + +// identityLister implements the IdentityLister interface. +type identityLister struct { + indexer cache.Indexer +} + +// NewIdentityLister returns a new IdentityLister. +func NewIdentityLister(indexer cache.Indexer) IdentityLister { + return &identityLister{indexer: indexer} +} + +// List lists all Identities in the indexer. +func (s *identityLister) List(selector labels.Selector) (ret []*v1.Identity, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.Identity)) + }) + return ret, err +} + +// Get retrieves the Identity from the index for a given name. +func (s *identityLister) Get(name string) (*v1.Identity, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("identity"), name) + } + return obj.(*v1.Identity), nil +} diff --git a/vendor/github.com/openshift/client-go/user/listers/user/v1/user.go b/vendor/github.com/openshift/client-go/user/listers/user/v1/user.go new file mode 100644 index 0000000000000..45164add31df7 --- /dev/null +++ b/vendor/github.com/openshift/client-go/user/listers/user/v1/user.go @@ -0,0 +1,52 @@ +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/user/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// UserLister helps list Users. +// All objects returned here must be treated as read-only. +type UserLister interface { + // List lists all Users in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1.User, err error) + // Get retrieves the User from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1.User, error) + UserListerExpansion +} + +// userLister implements the UserLister interface. +type userLister struct { + indexer cache.Indexer +} + +// NewUserLister returns a new UserLister. +func NewUserLister(indexer cache.Indexer) UserLister { + return &userLister{indexer: indexer} +} + +// List lists all Users in the indexer. +func (s *userLister) List(selector labels.Selector) (ret []*v1.User, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.User)) + }) + return ret, err +} + +// Get retrieves the User from the index for a given name. +func (s *userLister) Get(name string) (*v1.User, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("user"), name) + } + return obj.(*v1.User), nil +} diff --git a/vendor/github.com/openshift/library-go/LICENSE b/vendor/github.com/openshift/library-go/LICENSE new file mode 100644 index 0000000000000..261eeb9e9f8b2 --- /dev/null +++ b/vendor/github.com/openshift/library-go/LICENSE @@ -0,0 +1,201 @@ + 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. diff --git a/vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissionregistrationtesting/admissiontesting.go b/vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissionregistrationtesting/admissiontesting.go new file mode 100644 index 0000000000000..ecaf34d8a1fa4 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissionregistrationtesting/admissiontesting.go @@ -0,0 +1,25 @@ +package admissionregistrationtesting + +import ( + "fmt" + + "k8s.io/apimachinery/pkg/util/errors" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apiserver/pkg/admission" +) + +func AdmissionRegistrationTest(registeredAdmission *admission.Plugins, orderedAdmissionPlugins []string, defaultOffPlugins sets.String) error { + errs := []error{} + registeredPlugins := sets.NewString(registeredAdmission.Registered()...) + orderedAdmissionPluginsSet := sets.NewString(orderedAdmissionPlugins...) + + // make sure that all orderedAdmissionPlugins are registered + if diff := orderedAdmissionPluginsSet.Difference(registeredPlugins); len(diff) > 0 { + errs = append(errs, fmt.Errorf("registered plugins missing admission plugins: %v", diff.List())) + } + if diff := defaultOffPlugins.Difference(orderedAdmissionPluginsSet); len(diff) > 0 { + errs = append(errs, fmt.Errorf("ordered admission plugins missing defaultOff plugins: %v", diff.List())) + } + + return errors.NewAggregate(errs) +} diff --git a/vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig/intiializers.go b/vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig/intiializers.go new file mode 100644 index 0000000000000..5b4dc1036b07a --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig/intiializers.go @@ -0,0 +1,30 @@ +package admissionrestconfig + +import ( + "k8s.io/apiserver/pkg/admission" + restclient "k8s.io/client-go/rest" +) + +func NewInitializer(restClientConfig restclient.Config) admission.PluginInitializer { + return &localInitializer{ + restClientConfig: restClientConfig, + } +} + +// WantsRESTClientConfig gives access to a RESTClientConfig. It's useful for doing unusual things with transports. +type WantsRESTClientConfig interface { + SetRESTClientConfig(restclient.Config) + admission.InitializationValidator +} + +type localInitializer struct { + restClientConfig restclient.Config +} + +// Initialize will check the initialization interfaces implemented by each plugin +// and provide the appropriate initialization data +func (i *localInitializer) Initialize(plugin admission.Interface) { + if wants, ok := plugin.(WantsRESTClientConfig); ok { + wants.SetRESTClientConfig(i.restClientConfig) + } +} diff --git a/vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissiontimeout/decorator.go b/vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissiontimeout/decorator.go new file mode 100644 index 0000000000000..3b2d245540492 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissiontimeout/decorator.go @@ -0,0 +1,22 @@ +package admissiontimeout + +import ( + "time" + + "k8s.io/apiserver/pkg/admission" +) + +// AdmissionTimeout provides a decorator that will fail an admission plugin after a certain amount of time +// +// DEPRECATED: use the context of the admission handler instead. +type AdmissionTimeout struct { + Timeout time.Duration +} + +func (d AdmissionTimeout) WithTimeout(admissionPlugin admission.Interface, name string) admission.Interface { + return pluginHandlerWithTimeout{ + name: name, + admissionPlugin: admissionPlugin, + timeout: d.Timeout, + } +} diff --git a/vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissiontimeout/timeoutadmission.go b/vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissiontimeout/timeoutadmission.go new file mode 100644 index 0000000000000..8667304edfd46 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/apiserver/admission/admissiontimeout/timeoutadmission.go @@ -0,0 +1,68 @@ +package admissiontimeout + +import ( + "context" + "fmt" + "time" + + "k8s.io/apimachinery/pkg/api/errors" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apiserver/pkg/admission" +) + +type pluginHandlerWithTimeout struct { + name string + admissionPlugin admission.Interface + timeout time.Duration +} + +var _ admission.ValidationInterface = &pluginHandlerWithTimeout{} +var _ admission.MutationInterface = &pluginHandlerWithTimeout{} + +func (p pluginHandlerWithTimeout) Handles(operation admission.Operation) bool { + return p.admissionPlugin.Handles(operation) +} + +func (p pluginHandlerWithTimeout) Admit(ctx context.Context, a admission.Attributes, o admission.ObjectInterfaces) error { + mutatingHandler, ok := p.admissionPlugin.(admission.MutationInterface) + if !ok { + return nil + } + + admissionDone := make(chan struct{}) + admissionErr := fmt.Errorf("default to mutation error") + go func() { + defer utilruntime.HandleCrash() + defer close(admissionDone) + admissionErr = mutatingHandler.Admit(ctx, a, o) + }() + + select { + case <-admissionDone: + return admissionErr + case <-time.After(p.timeout): + return errors.NewInternalError(fmt.Errorf("admission plugin %q failed to complete mutation in %v", p.name, p.timeout)) + } +} + +func (p pluginHandlerWithTimeout) Validate(ctx context.Context, a admission.Attributes, o admission.ObjectInterfaces) error { + validatingHandler, ok := p.admissionPlugin.(admission.ValidationInterface) + if !ok { + return nil + } + + admissionDone := make(chan struct{}) + admissionErr := fmt.Errorf("default to validation error") + go func() { + defer utilruntime.HandleCrash() + defer close(admissionDone) + admissionErr = validatingHandler.Validate(ctx, a, o) + }() + + select { + case <-admissionDone: + return admissionErr + case <-time.After(p.timeout): + return errors.NewInternalError(fmt.Errorf("admission plugin %q failed to complete validation in %v", p.name, p.timeout)) + } +} diff --git a/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/cachecontrol.go b/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/cachecontrol.go new file mode 100644 index 0000000000000..611735cccbb8b --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/cachecontrol.go @@ -0,0 +1,35 @@ +package apiserverconfig + +import ( + "net/http" + "strings" +) + +// cacheExcludedPaths is small and simple until the handlers include the cache headers they need +var cacheExcludedPathPrefixes = []string{ + "/swagger-2.0.0.json", + "/swagger-2.0.0.pb-v1", + "/swagger-2.0.0.pb-v1.gz", + "/swagger.json", + "/swaggerapi", + "/openapi/", +} + +// cacheControlFilter sets the Cache-Control header to the specified value. +func WithCacheControl(handler http.Handler, value string) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + if _, ok := w.Header()["Cache-Control"]; ok { + handler.ServeHTTP(w, req) + return + } + for _, prefix := range cacheExcludedPathPrefixes { + if strings.HasPrefix(req.URL.Path, prefix) { + handler.ServeHTTP(w, req) + return + } + } + + w.Header().Set("Cache-Control", value) + handler.ServeHTTP(w, req) + }) +} diff --git a/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/longrunning.go b/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/longrunning.go new file mode 100644 index 0000000000000..5dde34ca7d437 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/longrunning.go @@ -0,0 +1,26 @@ +package apiserverconfig + +import ( + "net/http" + "regexp" + + "k8s.io/apimachinery/pkg/util/sets" + apirequest "k8s.io/apiserver/pkg/endpoints/request" + genericfilters "k8s.io/apiserver/pkg/server/filters" +) + +// request paths that match this regular expression will be treated as long running +// and not subjected to the default server timeout. +const originLongRunningEndpointsRE = "(/|^)(buildconfigs/.*/instantiatebinary|imagestreamimports)$" + +var ( + originLongRunningRequestRE = regexp.MustCompile(originLongRunningEndpointsRE) + kubeLongRunningFunc = genericfilters.BasicLongRunningRequestCheck( + sets.NewString("watch", "proxy"), + sets.NewString("attach", "exec", "proxy", "log", "portforward"), + ) +) + +func IsLongRunningRequest(r *http.Request, requestInfo *apirequest.RequestInfo) bool { + return originLongRunningRequestRE.MatchString(r.URL.Path) || kubeLongRunningFunc(r, requestInfo) +} diff --git a/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/personal_subjectaccessreview.go b/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/personal_subjectaccessreview.go new file mode 100644 index 0000000000000..d97946b9b4f69 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/personal_subjectaccessreview.go @@ -0,0 +1,129 @@ +package apiserverconfig + +import ( + "bytes" + "io/ioutil" + "net/http" + + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apiserver/pkg/endpoints/request" + apirequest "k8s.io/apiserver/pkg/endpoints/request" + + authorizationv1 "github.com/openshift/api/authorization/v1" +) + +type personalSARRequestInfoResolver struct { + // infoFactory is used to determine info for the request + infoFactory apirequest.RequestInfoResolver +} + +func newPersonalSARRequestInfoResolver(infoFactory apirequest.RequestInfoResolver) apirequest.RequestInfoResolver { + return &personalSARRequestInfoResolver{ + infoFactory: infoFactory, + } +} + +func (a *personalSARRequestInfoResolver) NewRequestInfo(req *http.Request) (*request.RequestInfo, error) { + requestInfo, err := a.infoFactory.NewRequestInfo(req) + if err != nil { + return requestInfo, err + } + + // only match SAR and LSAR requests for personal review + switch { + case !requestInfo.IsResourceRequest: + return requestInfo, nil + + case len(requestInfo.APIGroup) != 0 && requestInfo.APIGroup != "authorization.openshift.io": + return requestInfo, nil + + case len(requestInfo.Subresource) != 0: + return requestInfo, nil + + case requestInfo.Verb != "create": + return requestInfo, nil + + case requestInfo.Resource != "subjectaccessreviews" && requestInfo.Resource != "localsubjectaccessreviews": + return requestInfo, nil + } + + // at this point we're probably running a SAR or LSAR. Decode the body and check. This is expensive. + isSelfSAR, err := isPersonalAccessReviewFromRequest(req, requestInfo) + if err != nil { + return nil, err + } + if !isSelfSAR { + return requestInfo, nil + } + + // if we do have a self-SAR, rewrite the requestInfo to indicate this is a selfsubjectaccessreviews.authorization.k8s.io request + requestInfo.APIGroup = "authorization.k8s.io" + requestInfo.Resource = "selfsubjectaccessreviews" + + return requestInfo, nil +} + +// isPersonalAccessReviewFromRequest this variant handles the case where we have an httpRequest +func isPersonalAccessReviewFromRequest(req *http.Request, requestInfo *request.RequestInfo) (bool, error) { + // TODO once we're integrated with the api installer, we should have direct access to the deserialized content + // for now, this only happens on subjectaccessreviews with a personal check, pay the double retrieve and decode cost + body, err := ioutil.ReadAll(req.Body) + if err != nil { + return false, err + } + req.Body = ioutil.NopCloser(bytes.NewBuffer(body)) + + defaultGVK := schema.GroupVersionKind{Version: requestInfo.APIVersion, Group: requestInfo.APIGroup} + switch requestInfo.Resource { + case "subjectaccessreviews": + defaultGVK.Kind = "SubjectAccessReview" + case "localsubjectaccessreviews": + defaultGVK.Kind = "LocalSubjectAccessReview" + } + + obj, _, err := sarCodecFactory.UniversalDeserializer().Decode(body, &defaultGVK, nil) + if err != nil { + return false, err + } + switch castObj := obj.(type) { + case *authorizationv1.SubjectAccessReview: + return IsPersonalAccessReviewFromSAR(castObj), nil + + case *authorizationv1.LocalSubjectAccessReview: + return isPersonalAccessReviewFromLocalSAR(castObj), nil + + default: + return false, nil + } +} + +// IsPersonalAccessReviewFromSAR this variant handles the case where we have an SAR +func IsPersonalAccessReviewFromSAR(sar *authorizationv1.SubjectAccessReview) bool { + if len(sar.User) == 0 && len(sar.GroupsSlice) == 0 { + return true + } + + return false +} + +// isPersonalAccessReviewFromLocalSAR this variant handles the case where we have a local SAR +func isPersonalAccessReviewFromLocalSAR(sar *authorizationv1.LocalSubjectAccessReview) bool { + if len(sar.User) == 0 && len(sar.GroupsSlice) == 0 { + return true + } + + return false +} + +var ( + sarScheme = runtime.NewScheme() + sarCodecFactory = serializer.NewCodecFactory(sarScheme) +) + +func init() { + utilruntime.Must(authorizationv1.Install(sarScheme)) + utilruntime.Must(authorizationv1.DeprecatedInstallWithoutGroup(sarScheme)) +} diff --git a/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/project_request_info_resolver.go b/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/project_request_info_resolver.go new file mode 100644 index 0000000000000..7682302f89a64 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/project_request_info_resolver.go @@ -0,0 +1,34 @@ +package apiserverconfig + +import ( + "net/http" + + apirequest "k8s.io/apiserver/pkg/endpoints/request" + + projectv1 "github.com/openshift/api/project/v1" +) + +type projectRequestInfoResolver struct { + // infoFactory is used to determine info for the request + infoFactory apirequest.RequestInfoResolver +} + +func newProjectRequestInfoResolver(infoFactory apirequest.RequestInfoResolver) apirequest.RequestInfoResolver { + return &projectRequestInfoResolver{ + infoFactory: infoFactory, + } +} + +func (a *projectRequestInfoResolver) NewRequestInfo(req *http.Request) (*apirequest.RequestInfo, error) { + requestInfo, err := a.infoFactory.NewRequestInfo(req) + if err != nil { + return requestInfo, err + } + + // if the resource is projects, we need to set the namespace to the value of the name. + if (len(requestInfo.APIGroup) == 0 || requestInfo.APIGroup == projectv1.GroupName) && requestInfo.Resource == "projects" && len(requestInfo.Name) > 0 { + requestInfo.Namespace = requestInfo.Name + } + + return requestInfo, nil +} diff --git a/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/requestinforesolver.go b/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/requestinforesolver.go new file mode 100644 index 0000000000000..d14647d55a87a --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/apiserver/apiserverconfig/requestinforesolver.go @@ -0,0 +1,17 @@ +package apiserverconfig + +import ( + "k8s.io/apimachinery/pkg/util/sets" + apirequest "k8s.io/apiserver/pkg/endpoints/request" +) + +func OpenshiftRequestInfoResolver() apirequest.RequestInfoResolver { + // Default API request info factory + requestInfoFactory := &apirequest.RequestInfoFactory{ + APIPrefixes: sets.NewString("api", "apis"), + GrouplessAPIPrefixes: sets.NewString("api"), + } + personalSARRequestInfoResolver := newPersonalSARRequestInfoResolver(requestInfoFactory) + projectRequestInfoResolver := newProjectRequestInfoResolver(personalSARRequestInfoResolver) + return projectRequestInfoResolver +} diff --git a/vendor/github.com/openshift/library-go/pkg/apiserver/httprequest/httprequest.go b/vendor/github.com/openshift/library-go/pkg/apiserver/httprequest/httprequest.go new file mode 100644 index 0000000000000..470ed3419a2cd --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/apiserver/httprequest/httprequest.go @@ -0,0 +1,129 @@ +package httprequest + +import ( + "net" + "net/http" + "strings" + + "github.com/munnerz/goautoneg" +) + +// PrefersHTML returns true if the request was made by something that looks like a browser, or can receive HTML +func PrefersHTML(req *http.Request) bool { + accepts := goautoneg.ParseAccept(req.Header.Get("Accept")) + acceptsHTML := false + acceptsJSON := false + for _, accept := range accepts { + if accept.Type == "text" && accept.SubType == "html" { + acceptsHTML = true + } else if accept.Type == "application" && accept.SubType == "json" { + acceptsJSON = true + } + } + + // If HTML is accepted, return true + if acceptsHTML { + return true + } + + // If JSON was specifically requested, return false + // This gives browsers a way to make requests and add an "Accept" header to request JSON + if acceptsJSON { + return false + } + + // In Intranet/Compatibility mode, IE sends an Accept header that does not contain "text/html". + if strings.HasPrefix(req.UserAgent(), "Mozilla") { + return true + } + + return false +} + +// SchemeHost returns the scheme and host used to make this request. +// Suitable for use to compute scheme/host in returned 302 redirect Location. +// Note the returned host is not normalized, and may or may not contain a port. +// Returned values are based on the following information: +// +// Host: +// * X-Forwarded-Host/X-Forwarded-Port headers +// * Host field on the request (parsed from Host header) +// * Host in the request's URL (parsed from Request-Line) +// +// Scheme: +// * X-Forwarded-Proto header +// * Existence of TLS information on the request implies https +// * Scheme in the request's URL (parsed from Request-Line) +// * Port (if included in calculated Host value, 443 implies https) +// * Otherwise, defaults to "http" +func SchemeHost(req *http.Request) (string /*scheme*/, string /*host*/) { + forwarded := func(attr string) string { + // Get the X-Forwarded- value + value := req.Header.Get("X-Forwarded-" + attr) + // Take the first comma-separated value, if multiple exist + value = strings.SplitN(value, ",", 2)[0] + // Trim whitespace + return strings.TrimSpace(value) + } + + hasExplicitHost := func(h string) bool { + _, _, err := net.SplitHostPort(h) + return err == nil + } + + forwardedHost := forwarded("Host") + host := "" + hostHadExplicitPort := false + switch { + case len(forwardedHost) > 0: + host = forwardedHost + hostHadExplicitPort = hasExplicitHost(host) + + // If both X-Forwarded-Host and X-Forwarded-Port are sent, use the explicit port info + if forwardedPort := forwarded("Port"); len(forwardedPort) > 0 { + if h, _, err := net.SplitHostPort(forwardedHost); err == nil { + host = net.JoinHostPort(h, forwardedPort) + } else { + host = net.JoinHostPort(forwardedHost, forwardedPort) + } + } + + case len(req.Host) > 0: + host = req.Host + hostHadExplicitPort = hasExplicitHost(host) + + case len(req.URL.Host) > 0: + host = req.URL.Host + hostHadExplicitPort = hasExplicitHost(host) + } + + port := "" + if _, p, err := net.SplitHostPort(host); err == nil { + port = p + } + + forwardedProto := forwarded("Proto") + scheme := "" + switch { + case len(forwardedProto) > 0: + scheme = forwardedProto + case req.TLS != nil: + scheme = "https" + case len(req.URL.Scheme) > 0: + scheme = req.URL.Scheme + case port == "443": + scheme = "https" + default: + scheme = "http" + } + + if !hostHadExplicitPort { + if (scheme == "https" && port == "443") || (scheme == "http" && port == "80") { + if hostWithoutPort, _, err := net.SplitHostPort(host); err == nil { + host = hostWithoutPort + } + } + } + + return scheme, host +} diff --git a/vendor/github.com/openshift/library-go/pkg/authentication/bootstrapauthenticator/bootstrap.go b/vendor/github.com/openshift/library-go/pkg/authentication/bootstrapauthenticator/bootstrap.go new file mode 100644 index 0000000000000..c2c6b1f6b431b --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/authentication/bootstrapauthenticator/bootstrap.go @@ -0,0 +1,179 @@ +package bootstrapauthenticator + +import ( + "context" + "crypto/sha512" + "encoding/base64" + "fmt" + "time" + + "golang.org/x/crypto/bcrypt" + "k8s.io/klog/v2" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apiserver/pkg/authentication/authenticator" + "k8s.io/apiserver/pkg/authentication/user" + v1 "k8s.io/client-go/kubernetes/typed/core/v1" +) + +const ( + // BootstrapUser is the magic bootstrap OAuth user that can perform any action + BootstrapUser = "kube:admin" + // support basic auth which does not allow : in username + bootstrapUserBasicAuth = "kubeadmin" + // force the use of a secure password length + // expected format is 5char-5char-5char-5char + minPasswordLen = 23 +) + +var ( + // make it obvious that we refuse to honor short passwords + errPasswordTooShort = fmt.Errorf("%s password must be at least %d characters long", bootstrapUserBasicAuth, minPasswordLen) + + // we refuse to honor a secret that is too new when compared to kube-system + // since kube-system always exists and cannot be deleted + // and creation timestamp is controlled by the api, we can use this to + // detect if the secret was recreated after the initial bootstrapping + errSecretRecreated = fmt.Errorf("%s secret cannot be recreated", bootstrapUserBasicAuth) +) + +// Password checks a username and password against a backing authentication +// store and returns a Response or an error if the password could not be +// checked. +// +// This was copied from +// k8s.io/apiserver/pkg/authentication/authenticator due to its +// removal in 1.19. +type Password interface { + AuthenticatePassword(ctx context.Context, user, password string) (*authenticator.Response, bool, error) +} + +func New(getter BootstrapUserDataGetter) Password { + return &bootstrapPassword{ + getter: getter, + names: sets.NewString(BootstrapUser, bootstrapUserBasicAuth), + } +} + +type bootstrapPassword struct { + getter BootstrapUserDataGetter + names sets.String +} + +func (b *bootstrapPassword) AuthenticatePassword(ctx context.Context, username, password string) (*authenticator.Response, bool, error) { + if !b.names.Has(username) { + return nil, false, nil + } + + data, ok, err := b.getter.Get() + if err != nil || !ok { + return nil, ok, err + } + + // check length after we know that the secret is functional since + // we do not want to complain when the bootstrap user is disabled + if len(password) < minPasswordLen { + return nil, false, errPasswordTooShort + } + + if err := bcrypt.CompareHashAndPassword(data.PasswordHash, []byte(password)); err != nil { + if err == bcrypt.ErrMismatchedHashAndPassword { + klog.V(4).Infof("%s password mismatch", bootstrapUserBasicAuth) + return nil, false, nil + } + return nil, false, err + } + + // do not set other fields, see identitymapper.userToInfo func + return &authenticator.Response{ + User: &user.DefaultInfo{ + Name: BootstrapUser, + UID: data.UID, // uid ties this authentication to the current state of the secret + }, + }, true, nil +} + +type BootstrapUserData struct { + PasswordHash []byte + UID string +} + +type BootstrapUserDataGetter interface { + Get() (data *BootstrapUserData, ok bool, err error) + IsEnabled() (bool, error) +} + +func NewBootstrapUserDataGetter(secrets v1.SecretsGetter, namespaces v1.NamespacesGetter) BootstrapUserDataGetter { + return &bootstrapUserDataGetter{ + secrets: secrets.Secrets(metav1.NamespaceSystem), + namespaces: namespaces.Namespaces(), + } +} + +type bootstrapUserDataGetter struct { + secrets v1.SecretInterface + namespaces v1.NamespaceInterface +} + +func (b *bootstrapUserDataGetter) Get() (*BootstrapUserData, bool, error) { + secret, err := b.getBootstrapUserSecret() + if err != nil || secret == nil { + return nil, false, err + } + + hashedPassword := secret.Data[bootstrapUserBasicAuth] + + // make sure the value is a valid bcrypt hash + if _, err := bcrypt.Cost(hashedPassword); err != nil { + return nil, false, err + } + + exactSecret := string(secret.UID) + secret.ResourceVersion + both := append([]byte(exactSecret), hashedPassword...) + + // use a hash to avoid leaking any derivative of the password + // this makes it easy for us to tell if the secret changed + uidBytes := sha512.Sum512(both) + + return &BootstrapUserData{ + PasswordHash: hashedPassword, + UID: base64.RawURLEncoding.EncodeToString(uidBytes[:]), + }, true, nil +} + +func (b *bootstrapUserDataGetter) IsEnabled() (bool, error) { + secret, err := b.getBootstrapUserSecret() + if err == errSecretRecreated { + return false, nil + } + if err != nil || secret == nil { + return false, err + } + return true, nil +} + +func (b *bootstrapUserDataGetter) getBootstrapUserSecret() (*corev1.Secret, error) { + secret, err := b.secrets.Get(context.TODO(), bootstrapUserBasicAuth, metav1.GetOptions{}) + if errors.IsNotFound(err) { + klog.V(4).Infof("%s secret does not exist", bootstrapUserBasicAuth) + return nil, nil + } + if err != nil { + return nil, err + } + if secret.DeletionTimestamp != nil { + klog.V(4).Infof("%s secret is being deleted", bootstrapUserBasicAuth) + return nil, nil + } + namespace, err := b.namespaces.Get(context.TODO(), metav1.NamespaceSystem, metav1.GetOptions{}) + if err != nil { + return nil, err + } + if secret.CreationTimestamp.After(namespace.CreationTimestamp.Add(time.Hour)) { + return nil, errSecretRecreated + } + return secret, nil +} diff --git a/vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/clusterrole_describers.go b/vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/clusterrole_describers.go new file mode 100644 index 0000000000000..e9b7518f3ddca --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/clusterrole_describers.go @@ -0,0 +1,86 @@ +package scopemetadata + +import ( + "fmt" + "strings" +) + +// role:: +type ClusterRoleEvaluator struct{} + +var clusterRoleEvaluatorInstance = ClusterRoleEvaluator{} + +func (ClusterRoleEvaluator) Handles(scope string) bool { + return ClusterRoleEvaluatorHandles(scope) +} + +func (e ClusterRoleEvaluator) Validate(scope string) error { + _, _, _, err := ClusterRoleEvaluatorParseScope(scope) + return err +} + +func (e ClusterRoleEvaluator) Describe(scope string) (string, string, error) { + roleName, scopeNamespace, escalating, err := ClusterRoleEvaluatorParseScope(scope) + if err != nil { + return "", "", err + } + + // Anything you can do [in project "foo" | server-wide] that is also allowed by the "admin" role[, except access escalating resources like secrets] + + scopePhrase := "" + if scopeNamespace == scopesAllNamespaces { + scopePhrase = "server-wide" + } else { + scopePhrase = fmt.Sprintf("in project %q", scopeNamespace) + } + + warning := "" + escalatingPhrase := "" + if escalating { + warning = fmt.Sprintf("Includes access to escalating resources like secrets") + } else { + escalatingPhrase = ", except access escalating resources like secrets" + } + + description := fmt.Sprintf("Anything you can do %s that is also allowed by the %q role%s", scopePhrase, roleName, escalatingPhrase) + + return description, warning, nil +} + +func ClusterRoleEvaluatorHandles(scope string) bool { + return strings.HasPrefix(scope, clusterRoleIndicator) +} + +// ClusterRoleEvaluatorParseScope parses the requested scope, determining the requested role name, namespace, and if +// access to escalating objects is required. It will return an error if it doesn't parse cleanly +func ClusterRoleEvaluatorParseScope(scope string) (string /*role name*/, string /*namespace*/, bool /*escalating*/, error) { + if !ClusterRoleEvaluatorHandles(scope) { + return "", "", false, fmt.Errorf("bad format for scope %v", scope) + } + return parseClusterRoleScope(scope) +} + +func parseClusterRoleScope(scope string) (string /*role name*/, string /*namespace*/, bool /*escalating*/, error) { + if !strings.HasPrefix(scope, clusterRoleIndicator) { + return "", "", false, fmt.Errorf("bad format for scope %v", scope) + } + escalating := false + if strings.HasSuffix(scope, ":!") { + escalating = true + // clip that last segment before parsing the rest + scope = scope[:strings.LastIndex(scope, ":")] + } + + tokens := strings.SplitN(scope, ":", 2) + if len(tokens) != 2 { + return "", "", false, fmt.Errorf("bad format for scope %v", scope) + } + + // namespaces can't have colons, but roles can. pick last. + lastColonIndex := strings.LastIndex(tokens[1], ":") + if lastColonIndex <= 0 || lastColonIndex == (len(tokens[1])-1) { + return "", "", false, fmt.Errorf("bad format for scope %v", scope) + } + + return tokens[1][0:lastColonIndex], tokens[1][lastColonIndex+1:], escalating, nil +} diff --git a/vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/describers.go b/vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/describers.go new file mode 100644 index 0000000000000..65280256c8aa3 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/describers.go @@ -0,0 +1,17 @@ +package scopemetadata + +// ScopeDescriber takes a scope and returns metadata about it +type ScopeDescriber interface { + // Handles returns true if this evaluator can evaluate this scope + Handles(scope string) bool + // Validate returns an error if the scope is malformed + Validate(scope string) error + // Describe returns a description, warning (typically used to warn about escalation dangers), or an error if the scope is malformed + Describe(scope string) (description string, warning string, err error) +} + +// ScopeDescribers map prefixes to a function that handles that prefix +var ScopeDescribers = []ScopeDescriber{ + UserEvaluator{}, + ClusterRoleEvaluator{}, +} diff --git a/vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/user_describers.go b/vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/user_describers.go new file mode 100644 index 0000000000000..586a7d787ae56 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/user_describers.go @@ -0,0 +1,68 @@ +package scopemetadata + +import ( + "fmt" +) + +// these must agree with the scope authorizer, but it's an API we cannot realistically change +const ( + scopesAllNamespaces = "*" + + userIndicator = "user:" + clusterRoleIndicator = "role:" + + UserInfo = userIndicator + "info" + UserAccessCheck = userIndicator + "check-access" + + // UserListScopedProjects gives explicit permission to see the projects that this token can see. + UserListScopedProjects = userIndicator + "list-scoped-projects" + + // UserListAllProjects gives explicit permission to see the projects a user can see. This is often used to prime secondary ACL systems + // unrelated to openshift and to display projects for selection in a secondary UI. + UserListAllProjects = userIndicator + "list-projects" + + // UserFull includes all permissions of the user + userFull = userIndicator + "full" +) + +// user: +type UserEvaluator struct{} + +func (UserEvaluator) Handles(scope string) bool { + return UserEvaluatorHandles(scope) +} + +func (e UserEvaluator) Validate(scope string) error { + if e.Handles(scope) { + return nil + } + + return fmt.Errorf("unrecognized scope: %v", scope) +} + +var defaultSupportedScopesMap = map[string]string{ + UserInfo: "Read-only access to your user information (including username, identities, and group membership)", + UserAccessCheck: `Read-only access to view your privileges (for example, "can I create builds?")`, + UserListScopedProjects: `Read-only access to list your projects viewable with this token and view their metadata (display name, description, etc.)`, + UserListAllProjects: `Read-only access to list your projects and view their metadata (display name, description, etc.)`, + userFull: `Full read/write access with all of your permissions`, +} + +func (UserEvaluator) Describe(scope string) (string, string, error) { + switch scope { + case UserInfo, UserAccessCheck, UserListScopedProjects, UserListAllProjects: + return defaultSupportedScopesMap[scope], "", nil + case userFull: + return defaultSupportedScopesMap[scope], `Includes any access you have to escalating resources like secrets`, nil + default: + return "", "", fmt.Errorf("unrecognized scope: %v", scope) + } +} + +func UserEvaluatorHandles(scope string) bool { + switch scope { + case userFull, UserInfo, UserAccessCheck, UserListScopedProjects, UserListAllProjects: + return true + } + return false +} diff --git a/vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/validation.go b/vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/validation.go new file mode 100644 index 0000000000000..59a7009b9ef5d --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/authorization/scopemetadata/validation.go @@ -0,0 +1,152 @@ +package scopemetadata + +import ( + "fmt" + + kutilerrors "k8s.io/apimachinery/pkg/util/errors" + "k8s.io/apimachinery/pkg/util/validation/field" + + oauthv1 "github.com/openshift/api/oauth/v1" +) + +func ValidateScopes(scopes []string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if len(scopes) == 0 { + allErrs = append(allErrs, field.Required(fldPath, "may not be empty")) + } + + for i, scope := range scopes { + illegalCharacter := false + // https://tools.ietf.org/html/rfc6749#section-3.3 (full list of allowed chars is %x21 / %x23-5B / %x5D-7E) + // for those without an ascii table, that's `!`, `#-[`, `]-~` inclusive. + for _, ch := range scope { + switch { + case ch == '!': + case ch >= '#' && ch <= '[': + case ch >= ']' && ch <= '~': + default: + allErrs = append(allErrs, field.Invalid(fldPath.Index(i), scope, fmt.Sprintf("%v not allowed", ch))) + illegalCharacter = true + } + } + if illegalCharacter { + continue + } + + found := false + for _, evaluator := range ScopeDescribers { + if !evaluator.Handles(scope) { + continue + } + + found = true + if err := evaluator.Validate(scope); err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i), scope, err.Error())) + break + } + } + + if !found { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i), scope, "no scope handler found")) + } + } + + return allErrs +} + +func ValidateScopeRestrictions(client *oauthv1.OAuthClient, scopes ...string) error { + if len(scopes) == 0 { + return fmt.Errorf("%s may not request unscoped tokens", client.Name) + } + + if len(client.ScopeRestrictions) == 0 { + return nil + } + + errs := []error{} + for _, scope := range scopes { + if err := validateScopeRestrictions(client, scope); err != nil { + errs = append(errs, err) + } + } + + return kutilerrors.NewAggregate(errs) +} + +func validateScopeRestrictions(client *oauthv1.OAuthClient, scope string) error { + errs := []error{} + + for _, restriction := range client.ScopeRestrictions { + if len(restriction.ExactValues) > 0 { + if err := validateLiteralScopeRestrictions(scope, restriction.ExactValues); err != nil { + errs = append(errs, err) + continue + } + return nil + } + + if restriction.ClusterRole != nil { + if !ClusterRoleEvaluatorHandles(scope) { + continue + } + if err := validateClusterRoleScopeRestrictions(scope, *restriction.ClusterRole); err != nil { + errs = append(errs, err) + continue + } + return nil + } + } + + // if we got here, then nothing matched. If we already have errors, do nothing, otherwise add one to make it report failed. + if len(errs) == 0 { + errs = append(errs, fmt.Errorf("%v did not match any scope restriction", scope)) + } + + return kutilerrors.NewAggregate(errs) +} + +func validateLiteralScopeRestrictions(scope string, literals []string) error { + for _, literal := range literals { + if literal == scope { + return nil + } + } + + return fmt.Errorf("%v not found in %v", scope, literals) +} + +func validateClusterRoleScopeRestrictions(scope string, restriction oauthv1.ClusterRoleScopeRestriction) error { + role, namespace, escalating, err := ClusterRoleEvaluatorParseScope(scope) + if err != nil { + return err + } + + foundName := false + for _, restrictedRoleName := range restriction.RoleNames { + if restrictedRoleName == "*" || restrictedRoleName == role { + foundName = true + break + } + } + if !foundName { + return fmt.Errorf("%v does not use an approved name", scope) + } + + foundNamespace := false + for _, restrictedNamespace := range restriction.Namespaces { + if restrictedNamespace == "*" || restrictedNamespace == namespace { + foundNamespace = true + break + } + } + if !foundNamespace { + return fmt.Errorf("%v does not use an approved namespace", scope) + } + + if escalating && !restriction.AllowEscalation { + return fmt.Errorf("%v is not allowed to escalate", scope) + } + + return nil +} diff --git a/vendor/github.com/openshift/library-go/pkg/config/client/client_config.go b/vendor/github.com/openshift/library-go/pkg/config/client/client_config.go new file mode 100644 index 0000000000000..a247311057b98 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/config/client/client_config.go @@ -0,0 +1,131 @@ +package client + +import ( + "io/ioutil" + "net" + "net/http" + "time" + + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" + + configv1 "github.com/openshift/api/config/v1" +) + +// GetKubeConfigOrInClusterConfig loads in-cluster config if kubeConfigFile is empty or the file if not, +// then applies overrides. +func GetKubeConfigOrInClusterConfig(kubeConfigFile string, overrides *ClientConnectionOverrides) (*rest.Config, error) { + if len(kubeConfigFile) > 0 { + return GetClientConfig(kubeConfigFile, overrides) + } + + clientConfig, err := rest.InClusterConfig() + if err != nil { + return nil, err + } + + applyClientConnectionOverrides(overrides, clientConfig) + + t := ClientTransportOverrides{WrapTransport: clientConfig.WrapTransport} + if overrides != nil { + t.MaxIdleConnsPerHost = overrides.MaxIdleConnsPerHost + } + clientConfig.WrapTransport = t.DefaultClientTransport + + return clientConfig, nil +} + +// GetClientConfig returns the rest.Config for a kubeconfig file +func GetClientConfig(kubeConfigFile string, overrides *ClientConnectionOverrides) (*rest.Config, error) { + kubeConfigBytes, err := ioutil.ReadFile(kubeConfigFile) + if err != nil { + return nil, err + } + kubeConfig, err := clientcmd.NewClientConfigFromBytes(kubeConfigBytes) + if err != nil { + return nil, err + } + clientConfig, err := kubeConfig.ClientConfig() + if err != nil { + return nil, err + } + applyClientConnectionOverrides(overrides, clientConfig) + + t := ClientTransportOverrides{WrapTransport: clientConfig.WrapTransport} + if overrides != nil { + t.MaxIdleConnsPerHost = overrides.MaxIdleConnsPerHost + } + clientConfig.WrapTransport = t.DefaultClientTransport + + return clientConfig, nil +} + +// applyClientConnectionOverrides updates a kubeConfig with the overrides from the config. +func applyClientConnectionOverrides(overrides *ClientConnectionOverrides, kubeConfig *rest.Config) { + if overrides == nil { + return + } + if overrides.QPS > 0 { + kubeConfig.QPS = overrides.QPS + } + if overrides.Burst > 0 { + kubeConfig.Burst = int(overrides.Burst) + } + if len(overrides.AcceptContentTypes) > 0 { + kubeConfig.ContentConfig.AcceptContentTypes = overrides.AcceptContentTypes + } + if len(overrides.ContentType) > 0 { + kubeConfig.ContentConfig.ContentType = overrides.ContentType + } + + // TODO both of these default values look wrong + // if we have no preferences at this point, claim that we accept both proto and json. We will get proto if the server supports it. + // this is a slightly niggly thing. If the server has proto and our client does not (possible, but not super likely) then this fails. + if len(kubeConfig.ContentConfig.AcceptContentTypes) == 0 { + kubeConfig.ContentConfig.AcceptContentTypes = "application/vnd.kubernetes.protobuf,application/json" + } + if len(kubeConfig.ContentConfig.ContentType) == 0 { + kubeConfig.ContentConfig.ContentType = "application/vnd.kubernetes.protobuf" + } +} + +type ClientTransportOverrides struct { + WrapTransport func(rt http.RoundTripper) http.RoundTripper + MaxIdleConnsPerHost int +} + +// defaultClientTransport sets defaults for a client Transport that are suitable for use by infrastructure components. +func (c ClientTransportOverrides) DefaultClientTransport(rt http.RoundTripper) http.RoundTripper { + transport, ok := rt.(*http.Transport) + if !ok { + return rt + } + + transport.DialContext = (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).DialContext + + // Hold open more internal idle connections + transport.MaxIdleConnsPerHost = 100 + if c.MaxIdleConnsPerHost > 0 { + transport.MaxIdleConnsPerHost = c.MaxIdleConnsPerHost + } + + if c.WrapTransport == nil { + return transport + + } + return c.WrapTransport(transport) +} + +// ClientConnectionOverrides allows overriding values for rest.Config not held in a kubeconfig. Most commonly used +// for QPS. Empty values are not used. +type ClientConnectionOverrides struct { + configv1.ClientConnectionOverrides + + // MaxIdleConnsPerHost, if non-zero, controls the maximum idle (keep-alive) connections to keep per-host:port. + // If zero, DefaultMaxIdleConnsPerHost is used. + // TODO roll this into the connection overrides in api + MaxIdleConnsPerHost int +} diff --git a/vendor/github.com/openshift/library-go/pkg/config/configdefaults/config_default.go b/vendor/github.com/openshift/library-go/pkg/config/configdefaults/config_default.go new file mode 100644 index 0000000000000..7d3f44caf2a8e --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/config/configdefaults/config_default.go @@ -0,0 +1,81 @@ +package configdefaults + +import ( + "time" + + configv1 "github.com/openshift/api/config/v1" + "github.com/openshift/library-go/pkg/crypto" +) + +func DefaultString(target *string, defaultVal string) { + if len(*target) == 0 { + *target = defaultVal + } +} + +func DefaultInt(target *int, defaultVal int) { + if *target == 0 { + *target = defaultVal + } +} + +func DefaultMetaDuration(target *time.Duration, defaultVal time.Duration) { + if *target == 0 { + *target = defaultVal + } +} + +func DefaultStringSlice(target *[]string, defaultVal []string) { + if len(*target) == 0 { + *target = defaultVal + } +} + +func SetRecommendedHTTPServingInfoDefaults(config *configv1.HTTPServingInfo) { + if config.MaxRequestsInFlight == 0 { + config.MaxRequestsInFlight = 3000 + } + if config.RequestTimeoutSeconds == 0 { + config.RequestTimeoutSeconds = 60 * 60 // one hour + } + + SetRecommendedServingInfoDefaults(&config.ServingInfo) +} + +func SetRecommendedServingInfoDefaults(config *configv1.ServingInfo) { + DefaultString(&config.BindAddress, "0.0.0.0:8443") + DefaultString(&config.BindNetwork, "tcp") + DefaultString(&config.CertInfo.KeyFile, "/var/run/secrets/serving-cert/tls.key") + DefaultString(&config.CertInfo.CertFile, "/var/run/secrets/serving-cert/tls.crt") + DefaultString(&config.ClientCA, "/var/run/configmaps/client-ca/ca-bundle.crt") + DefaultString(&config.MinTLSVersion, crypto.TLSVersionToNameOrDie(crypto.DefaultTLSVersion())) + + if len(config.CipherSuites) == 0 { + config.CipherSuites = crypto.CipherSuitesToNamesOrDie(crypto.DefaultCiphers()) + } +} + +func SetRecommendedGenericAPIServerConfigDefaults(config *configv1.GenericAPIServerConfig) { + SetRecommendedHTTPServingInfoDefaults(&config.ServingInfo) + SetRecommendedEtcdConnectionInfoDefaults(&config.StorageConfig.EtcdConnectionInfo) + SetRecommendedKubeClientConfigDefaults(&config.KubeClientConfig) +} + +func SetRecommendedEtcdConnectionInfoDefaults(config *configv1.EtcdConnectionInfo) { + DefaultStringSlice(&config.URLs, []string{"https://etcd.kube-system.svc:2379"}) + DefaultString(&config.CertInfo.KeyFile, "/var/run/secrets/etcd-client/tls.key") + DefaultString(&config.CertInfo.CertFile, "/var/run/secrets/etcd-client/tls.crt") + DefaultString(&config.CA, "/var/run/configmaps/etcd-serving-ca/ca-bundle.crt") +} + +func SetRecommendedKubeClientConfigDefaults(config *configv1.KubeClientConfig) { + // these are historical values + if config.ConnectionOverrides.QPS <= 0 { + config.ConnectionOverrides.QPS = 150.0 + } + if config.ConnectionOverrides.Burst <= 0 { + config.ConnectionOverrides.Burst = 300 + } + DefaultString(&config.ConnectionOverrides.AcceptContentTypes, "application/vnd.kubernetes.protobuf,application/json") + DefaultString(&config.ConnectionOverrides.ContentType, "application/vnd.kubernetes.protobuf") +} diff --git a/vendor/github.com/openshift/library-go/pkg/config/helpers/client.go b/vendor/github.com/openshift/library-go/pkg/config/helpers/client.go new file mode 100644 index 0000000000000..f28ef543f1634 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/config/helpers/client.go @@ -0,0 +1,71 @@ +package helpers + +import ( + "io/ioutil" + + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" + + configv1 "github.com/openshift/api/config/v1" + "github.com/openshift/library-go/pkg/config/client" +) + +// TODO this file needs to collapse with pkg/config/client. We cannot safely delegate from this file because this one +// TODO uses JSON and other uses protobuf. + +// GetKubeClientConfig loads in-cluster config if kubeConfigFile is empty or the file if not, then applies overrides. +func GetKubeClientConfig(kubeClientConnection configv1.KubeClientConfig) (*rest.Config, error) { + return GetKubeConfigOrInClusterConfig(kubeClientConnection.KubeConfig, kubeClientConnection.ConnectionOverrides) +} + +// GetKubeConfigOrInClusterConfig loads in-cluster config if kubeConfigFile is empty or the file if not, +// then applies overrides. +func GetKubeConfigOrInClusterConfig(kubeConfigFile string, overrides configv1.ClientConnectionOverrides) (*rest.Config, error) { + if len(kubeConfigFile) > 0 { + return GetClientConfig(kubeConfigFile, overrides) + } + + clientConfig, err := rest.InClusterConfig() + if err != nil { + return nil, err + } + applyClientConnectionOverrides(overrides, clientConfig) + clientConfig.WrapTransport = client.ClientTransportOverrides{WrapTransport: clientConfig.WrapTransport}.DefaultClientTransport + + return clientConfig, nil +} + +func GetClientConfig(kubeConfigFile string, overrides configv1.ClientConnectionOverrides) (*rest.Config, error) { + kubeConfigBytes, err := ioutil.ReadFile(kubeConfigFile) + if err != nil { + return nil, err + } + kubeConfig, err := clientcmd.NewClientConfigFromBytes(kubeConfigBytes) + if err != nil { + return nil, err + } + clientConfig, err := kubeConfig.ClientConfig() + if err != nil { + return nil, err + } + applyClientConnectionOverrides(overrides, clientConfig) + clientConfig.WrapTransport = client.ClientTransportOverrides{WrapTransport: clientConfig.WrapTransport}.DefaultClientTransport + + return clientConfig, nil +} + +// applyClientConnectionOverrides updates a kubeConfig with the overrides from the config. +func applyClientConnectionOverrides(overrides configv1.ClientConnectionOverrides, kubeConfig *rest.Config) { + if overrides.QPS != 0 { + kubeConfig.QPS = overrides.QPS + } + if overrides.Burst != 0 { + kubeConfig.Burst = int(overrides.Burst) + } + if len(overrides.AcceptContentTypes) != 0 { + kubeConfig.ContentConfig.AcceptContentTypes = overrides.AcceptContentTypes + } + if len(overrides.ContentType) != 0 { + kubeConfig.ContentConfig.ContentType = overrides.ContentType + } +} diff --git a/vendor/github.com/openshift/library-go/pkg/config/helpers/config_refs.go b/vendor/github.com/openshift/library-go/pkg/config/helpers/config_refs.go new file mode 100644 index 0000000000000..21d4d24f17366 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/config/helpers/config_refs.go @@ -0,0 +1,145 @@ +package helpers + +import ( + "strings" + + configv1 "github.com/openshift/api/config/v1" +) + +func GetHTTPServingInfoFileReferences(config *configv1.HTTPServingInfo) []*string { + if config == nil { + return []*string{} + } + + return GetServingInfoFileReferences(&config.ServingInfo) +} + +func GetServingInfoFileReferences(config *configv1.ServingInfo) []*string { + if config == nil { + return []*string{} + } + + refs := []*string{} + refs = append(refs, GetCertFileReferences(&config.CertInfo)...) + refs = append(refs, &config.ClientCA) + for i := range config.NamedCertificates { + refs = append(refs, &config.NamedCertificates[i].CertFile) + refs = append(refs, &config.NamedCertificates[i].KeyFile) + } + + return refs +} + +func GetCertFileReferences(config *configv1.CertInfo) []*string { + if config == nil { + return []*string{} + } + + refs := []*string{} + refs = append(refs, &config.CertFile) + refs = append(refs, &config.KeyFile) + return refs +} + +func GetRemoteConnectionInfoFileReferences(config *configv1.RemoteConnectionInfo) []*string { + if config == nil { + return []*string{} + } + + refs := []*string{} + refs = append(refs, GetCertFileReferences(&config.CertInfo)...) + refs = append(refs, &config.CA) + return refs +} + +func GetEtcdConnectionInfoFileReferences(config *configv1.EtcdConnectionInfo) []*string { + if config == nil { + return []*string{} + } + + refs := []*string{} + refs = append(refs, GetCertFileReferences(&config.CertInfo)...) + refs = append(refs, &config.CA) + return refs +} + +func GetStringSourceFileReferences(s *configv1.StringSource) []*string { + if s == nil { + return []*string{} + } + + return []*string{ + &s.File, + &s.KeyFile, + } +} + +func GetAdmissionPluginConfigFileReferences(config *configv1.AdmissionPluginConfig) []*string { + if config == nil { + return []*string{} + } + + refs := []*string{} + refs = append(refs, &config.Location) + return refs +} + +func GetAuditConfigFileReferences(config *configv1.AuditConfig) []*string { + if config == nil { + return []*string{} + } + + refs := []*string{} + refs = append(refs, &config.PolicyFile) + refs = append(refs, &config.AuditFilePath) + return refs +} + +func GetKubeClientConfigFileReferences(config *configv1.KubeClientConfig) []*string { + if config == nil { + return []*string{} + } + + refs := []*string{} + refs = append(refs, &config.KubeConfig) + return refs +} + +func GetGenericAPIServerConfigFileReferences(config *configv1.GenericAPIServerConfig) []*string { + if config == nil { + return []*string{} + } + + refs := []*string{} + refs = append(refs, GetHTTPServingInfoFileReferences(&config.ServingInfo)...) + refs = append(refs, GetEtcdConnectionInfoFileReferences(&config.StorageConfig.EtcdConnectionInfo)...) + refs = append(refs, GetAuditConfigFileReferences(&config.AuditConfig)...) + refs = append(refs, GetKubeClientConfigFileReferences(&config.KubeClientConfig)...) + + // TODO admission config file resolution is currently broken. + //for k := range config.AdmissionPluginConfig { + // refs = append(refs, GetAdmissionPluginConfigReferences(&(config.AdmissionPluginConfig[k]))...) + //} + return refs +} + +func GetFlagsWithFileExtensionsFileReferences(args map[string][]string) []*string { + if args == nil { + return []*string{} + } + + refs := []*string{} + for key, s := range args { + if len(s) == 0 { + continue + } + if !strings.HasSuffix(key, "-file") && !strings.HasSuffix(key, "-dir") { + continue + } + for i := range s { + refs = append(refs, &s[i]) + } + } + + return refs +} diff --git a/vendor/github.com/openshift/library-go/pkg/config/helpers/general.go b/vendor/github.com/openshift/library-go/pkg/config/helpers/general.go new file mode 100644 index 0000000000000..fa7e4b46510be --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/config/helpers/general.go @@ -0,0 +1,64 @@ +package helpers + +import ( + "fmt" + "path/filepath" + "strings" +) + +// ResolvePaths updates the given refs to be absolute paths, relative to the given base directory. +// Empty and "-" paths are never resolved. +func ResolvePaths(refs []*string, base string) error { + for _, ref := range refs { + // Don't resolve empty paths, or "-" + if len(*ref) > 0 && *ref != "-" { + // Don't resolve absolute paths + if !filepath.IsAbs(*ref) { + *ref = filepath.Join(base, *ref) + } + } + } + return nil +} + +func makeRelative(path, base string) (string, error) { + if len(path) > 0 && path != "-" { + rel, err := filepath.Rel(base, path) + if err != nil { + return path, err + } + return rel, nil + } + return path, nil +} + +// RelativizePathWithNoBacksteps updates the given refs to be relative paths, relative to the given base directory as long as they do not require backsteps. +// Any path requiring a backstep is left as-is as long it is absolute. Any non-absolute path that can't be relativized produces an error +// Empty and "-" paths are never relativized. +func RelativizePathWithNoBacksteps(refs []*string, base string) error { + for _, ref := range refs { + // Don't relativize empty paths, or "-" + if len(*ref) > 0 && *ref != "-" { + rel, err := makeRelative(*ref, base) + if err != nil { + return err + } + + if rel == "-" { + rel = "./-" + } + + // if we have a backstep, don't mess with the path + if strings.HasPrefix(rel, "../") { + if filepath.IsAbs(*ref) { + continue + } + + return fmt.Errorf("%v requires backsteps and is not absolute", *ref) + } + + *ref = rel + } + } + return nil +} diff --git a/vendor/github.com/openshift/library-go/pkg/config/helpers/readresource.go b/vendor/github.com/openshift/library-go/pkg/config/helpers/readresource.go new file mode 100644 index 0000000000000..292f32f9d29c1 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/config/helpers/readresource.go @@ -0,0 +1,167 @@ +package helpers + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "reflect" + + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" + kyaml "k8s.io/apimachinery/pkg/util/yaml" + "k8s.io/klog/v2" + "sigs.k8s.io/yaml" +) + +// InstallFunc is the "normal" function for installing scheme +type InstallFunc func(scheme *runtime.Scheme) error + +// ReadYAMLToInternal reads content of a reader and returns the runtime.Object that matches it. It chooses the match from +// the scheme installation that you provide. It converts to internal for you. +func ReadYAMLToInternal(reader io.Reader, schemeFns ...InstallFunc) (runtime.Object, error) { + if reader == nil || reflect.ValueOf(reader).IsNil() { + return nil, nil + } + data, err := ioutil.ReadAll(reader) + if err != nil { + return nil, err + } + jsonData, err := kyaml.ToJSON(data) + if err != nil { + // maybe we were already json + jsonData = data + } + + scheme := runtime.NewScheme() + for _, schemeFn := range schemeFns { + err := schemeFn(scheme) + if err != nil { + return nil, err + } + } + codec := serializer.NewCodecFactory(scheme).LegacyCodec(scheme.PrioritizedVersionsAllGroups()...) + + obj, err := runtime.Decode(codec, jsonData) + if err != nil { + return nil, captureSurroundingJSONForError("error reading config: ", jsonData, err) + } + // make sure there are no extra fields in jsonData + if err := strictDecodeCheck(jsonData, obj, scheme); err != nil { + return nil, err + } + + return obj, nil +} + +// ReadYAML reads content of a reader and returns the runtime.Object that matches it. It chooses the match from +// the scheme installation that you provide. It does not convert and it does not default. +func ReadYAML(reader io.Reader, schemeFns ...InstallFunc) (runtime.Object, error) { + if reader == nil || reflect.ValueOf(reader).IsNil() { + return nil, nil + } + data, err := ioutil.ReadAll(reader) + if err != nil { + return nil, err + } + jsonData, err := kyaml.ToJSON(data) + if err != nil { + // maybe we were already json + jsonData = data + } + + scheme := runtime.NewScheme() + for _, schemeFn := range schemeFns { + err := schemeFn(scheme) + if err != nil { + return nil, err + } + } + codec := serializer.NewCodecFactory(scheme).UniversalDeserializer() + + obj, err := runtime.Decode(codec, jsonData) + if err != nil { + return nil, captureSurroundingJSONForError("error reading config: ", jsonData, err) + } + // make sure there are no extra fields in jsonData + if err := strictDecodeCheck(jsonData, obj, scheme); err != nil { + return nil, err + } + + return obj, nil +} + +// TODO: we ultimately want a better decoder for JSON that allows us exact line numbers and better +// surrounding text description. This should be removed / replaced when that happens. +func captureSurroundingJSONForError(prefix string, data []byte, err error) error { + if syntaxErr, ok := err.(*json.SyntaxError); err != nil && ok { + offset := syntaxErr.Offset + begin := offset - 20 + if begin < 0 { + begin = 0 + } + end := offset + 20 + if end > int64(len(data)) { + end = int64(len(data)) + } + return fmt.Errorf("%s%v (found near '%s')", prefix, err, string(data[begin:end])) + } + if err != nil { + return fmt.Errorf("%s%v", prefix, err) + } + return err +} + +// strictDecodeCheck fails decodes when jsonData contains fields not included in the external version of obj +func strictDecodeCheck(jsonData []byte, obj runtime.Object, scheme *runtime.Scheme) error { + out, err := getExternalZeroValue(obj, scheme) // we need the external version of obj as that has the correct JSON struct tags + if err != nil { + klog.Errorf("Encountered config error %v in object %T, raw JSON:\n%s", err, obj, string(jsonData)) // TODO just return the error and die + // never error for now, we need to determine a safe way to make this check fatal + return nil + } + d := json.NewDecoder(bytes.NewReader(jsonData)) + d.DisallowUnknownFields() + // note that we only care about the error, out is discarded + if err := d.Decode(out); err != nil { + klog.Errorf("Encountered config error %v in object %T, raw JSON:\n%s", err, obj, string(jsonData)) // TODO just return the error and die + } + // never error for now, we need to determine a safe way to make this check fatal + return nil +} + +// getExternalZeroValue returns the zero value of the external version of obj +func getExternalZeroValue(obj runtime.Object, scheme *runtime.Scheme) (runtime.Object, error) { + gvks, _, err := scheme.ObjectKinds(obj) + if err != nil { + return nil, err + } + if len(gvks) == 0 { // should never happen + return nil, fmt.Errorf("no gvks found for %#v", obj) + } + return scheme.New(gvks[0]) +} + +// WriteYAML serializes a yaml file based on the scheme functions provided +func WriteYAML(obj runtime.Object, schemeFns ...InstallFunc) ([]byte, error) { + scheme := runtime.NewScheme() + for _, schemeFn := range schemeFns { + err := schemeFn(scheme) + if err != nil { + return nil, err + } + } + codec := serializer.NewCodecFactory(scheme).LegacyCodec(scheme.PrioritizedVersionsAllGroups()...) + + json, err := runtime.Encode(codec, obj) + if err != nil { + return nil, err + } + + content, err := yaml.JSONToYAML(json) + if err != nil { + return nil, err + } + return content, err +} diff --git a/vendor/github.com/openshift/library-go/pkg/config/validation/general.go b/vendor/github.com/openshift/library-go/pkg/config/validation/general.go new file mode 100644 index 0000000000000..3a5dcd0b7fe1c --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/config/validation/general.go @@ -0,0 +1,130 @@ +package validation + +import ( + "fmt" + "net" + "net/url" + "os" + "strings" + + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apimachinery/pkg/util/validation/field" +) + +type ValidationResults struct { + Warnings field.ErrorList + Errors field.ErrorList +} + +func (r *ValidationResults) Append(additionalResults ValidationResults) { + r.AddErrors(additionalResults.Errors...) + r.AddWarnings(additionalResults.Warnings...) +} + +func (r *ValidationResults) AddErrors(errors ...*field.Error) { + if len(errors) == 0 { + return + } + r.Errors = append(r.Errors, errors...) +} + +func (r *ValidationResults) AddWarnings(warnings ...*field.Error) { + if len(warnings) == 0 { + return + } + r.Warnings = append(r.Warnings, warnings...) +} + +func ValidateHostPort(value string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if len(value) == 0 { + allErrs = append(allErrs, field.Required(fldPath, "")) + } else if _, _, err := net.SplitHostPort(value); err != nil { + allErrs = append(allErrs, field.Invalid(fldPath, value, "must be a host:port")) + } + + return allErrs +} + +func ValidateFile(path string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if len(path) == 0 { + allErrs = append(allErrs, field.Required(fldPath, "")) + } else if _, err := os.Stat(path); err != nil { + allErrs = append(allErrs, field.Invalid(fldPath, path, fmt.Sprintf("could not read file: %v", err))) + } + + return allErrs +} + +func ValidateSecureURL(urlString string, fldPath *field.Path) (*url.URL, field.ErrorList) { + url, urlErrs := ValidateURL(urlString, fldPath) + if len(urlErrs) == 0 && url.Scheme != "https" { + urlErrs = append(urlErrs, field.Invalid(fldPath, urlString, "must use https scheme")) + } + return url, urlErrs +} + +func ValidateURL(urlString string, fldPath *field.Path) (*url.URL, field.ErrorList) { + allErrs := field.ErrorList{} + + urlObj, err := url.Parse(urlString) + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath, urlString, "must be a valid URL")) + return nil, allErrs + } + if len(urlObj.Scheme) == 0 { + allErrs = append(allErrs, field.Invalid(fldPath, urlString, "must contain a scheme (e.g. https://)")) + } + if len(urlObj.Host) == 0 { + allErrs = append(allErrs, field.Invalid(fldPath, urlString, "must contain a host")) + } + return urlObj, allErrs +} + +func ValidateDir(path string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(path) == 0 { + allErrs = append(allErrs, field.Required(fldPath, "")) + } else { + fileInfo, err := os.Stat(path) + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath, path, fmt.Sprintf("could not read info: %v", err))) + } else if !fileInfo.IsDir() { + allErrs = append(allErrs, field.Invalid(fldPath, path, "not a directory")) + } + } + + return allErrs +} + +// HostnameMatchSpecCandidates returns a list of match specs that would match the provided hostname +// Returns nil if len(hostname) == 0 +func HostnameMatchSpecCandidates(hostname string) []string { + if len(hostname) == 0 { + return nil + } + + // Exact match has priority + candidates := []string{hostname} + + // Replace successive labels in the name with wildcards, to require an exact match on number of + // path segments, because certificates cannot wildcard multiple levels of subdomains + // + // This is primarily to be consistent with tls.Config#getCertificate implementation + // + // It using a cert signed for *.foo.example.com and *.bar.example.com by specifying the name *.*.example.com + labels := strings.Split(hostname, ".") + for i := range labels { + labels[i] = "*" + candidates = append(candidates, strings.Join(labels, ".")) + } + return candidates +} + +// HostnameMatches returns true if the given hostname is matched by the given matchSpec +func HostnameMatches(hostname string, matchSpec string) bool { + return sets.NewString(HostnameMatchSpecCandidates(hostname)...).Has(matchSpec) +} diff --git a/vendor/github.com/openshift/library-go/pkg/config/validation/serving_info.go b/vendor/github.com/openshift/library-go/pkg/config/validation/serving_info.go new file mode 100644 index 0000000000000..947f5c91482e3 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/config/validation/serving_info.go @@ -0,0 +1,174 @@ +package validation + +import ( + "crypto/tls" + "crypto/x509" + "fmt" + "strings" + + "k8s.io/apimachinery/pkg/util/sets" + utilvalidation "k8s.io/apimachinery/pkg/util/validation" + "k8s.io/apimachinery/pkg/util/validation/field" + + configv1 "github.com/openshift/api/config/v1" + "github.com/openshift/library-go/pkg/crypto" +) + +func ValidateHTTPServingInfo(info configv1.HTTPServingInfo, fldPath *field.Path) ValidationResults { + validationResults := ValidationResults{} + + validationResults.Append(ValidateServingInfo(info.ServingInfo, true, fldPath)) + + if info.MaxRequestsInFlight < 0 { + validationResults.AddErrors(field.Invalid(fldPath.Child("maxRequestsInFlight"), info.MaxRequestsInFlight, "must be zero (no limit) or greater")) + } + + if info.RequestTimeoutSeconds < -1 { + validationResults.AddErrors(field.Invalid(fldPath.Child("requestTimeoutSeconds"), info.RequestTimeoutSeconds, "must be -1 (no timeout), 0 (default timeout), or greater")) + } + + return validationResults +} + +func ValidateServingInfo(info configv1.ServingInfo, certificatesRequired bool, fldPath *field.Path) ValidationResults { + validationResults := ValidationResults{} + + validationResults.AddErrors(ValidateHostPort(info.BindAddress, fldPath.Child("bindAddress"))...) + validationResults.AddErrors(ValidateCertInfo(info.CertInfo, certificatesRequired, fldPath)...) + + if len(info.NamedCertificates) > 0 && len(info.CertFile) == 0 { + validationResults.AddErrors(field.Invalid(fldPath.Child("namedCertificates"), "", "a default certificate and key is required in certFile/keyFile in order to use namedCertificates")) + } + + validationResults.Append(ValidateNamedCertificates(fldPath.Child("namedCertificates"), info.NamedCertificates)) + + switch info.BindNetwork { + case "tcp", "tcp4", "tcp6": + default: + validationResults.AddErrors(field.Invalid(fldPath.Child("bindNetwork"), info.BindNetwork, "must be 'tcp', 'tcp4', or 'tcp6'")) + } + + if len(info.CertFile) > 0 { + if len(info.ClientCA) > 0 { + validationResults.AddErrors(ValidateFile(info.ClientCA, fldPath.Child("clientCA"))...) + } + } else { + if certificatesRequired && len(info.ClientCA) > 0 { + validationResults.AddErrors(field.Invalid(fldPath.Child("clientCA"), info.ClientCA, "cannot specify a clientCA without a certFile")) + } + } + + if _, err := crypto.TLSVersion(info.MinTLSVersion); err != nil { + validationResults.AddErrors(field.NotSupported(fldPath.Child("minTLSVersion"), info.MinTLSVersion, crypto.ValidTLSVersions())) + } + for i, cipher := range info.CipherSuites { + if _, err := crypto.CipherSuite(cipher); err != nil { + validationResults.AddErrors(field.NotSupported(fldPath.Child("cipherSuites").Index(i), cipher, crypto.ValidCipherSuites())) + } + } + + return validationResults +} + +func ValidateNamedCertificates(fldPath *field.Path, namedCertificates []configv1.NamedCertificate) ValidationResults { + validationResults := ValidationResults{} + + takenNames := sets.NewString() + for i, namedCertificate := range namedCertificates { + idxPath := fldPath.Index(i) + + certDNSNames := []string{} + if len(namedCertificate.CertFile) == 0 { + validationResults.AddErrors(field.Required(idxPath.Child("certInfo"), "")) + } else if certInfoErrors := ValidateCertInfo(namedCertificate.CertInfo, false, idxPath); len(certInfoErrors) > 0 { + validationResults.AddErrors(certInfoErrors...) + } else if cert, err := tls.LoadX509KeyPair(namedCertificate.CertFile, namedCertificate.KeyFile); err != nil { + validationResults.AddErrors(field.Invalid(idxPath.Child("certInfo"), namedCertificate.CertInfo, fmt.Sprintf("error loading certificate/key: %v", err))) + } else { + leaf, _ := x509.ParseCertificate(cert.Certificate[0]) + certDNSNames = append(certDNSNames, leaf.Subject.CommonName) + certDNSNames = append(certDNSNames, leaf.DNSNames...) + } + + if len(namedCertificate.Names) == 0 { + validationResults.AddErrors(field.Required(idxPath.Child("names"), "")) + } + for j, name := range namedCertificate.Names { + jdxPath := idxPath.Child("names").Index(j) + if len(name) == 0 { + validationResults.AddErrors(field.Required(jdxPath, "")) + continue + } + + if takenNames.Has(name) { + validationResults.AddErrors(field.Invalid(jdxPath, name, "this name is already used in another named certificate")) + continue + } + + // validate names as domain names or *.*.foo.com domain names + validDNSName := true + for _, s := range strings.Split(name, ".") { + if s != "*" && len(utilvalidation.IsDNS1123Label(s)) != 0 { + validDNSName = false + } + } + if !validDNSName { + validationResults.AddErrors(field.Invalid(jdxPath, name, "must be a valid DNS name")) + continue + } + + takenNames.Insert(name) + + // validate certificate has common name or subject alt names that match + if len(certDNSNames) > 0 { + foundMatch := false + for _, dnsName := range certDNSNames { + if HostnameMatches(dnsName, name) { + foundMatch = true + break + } + // if the cert has a wildcard dnsName, and we've configured a non-wildcard name, see if our specified name will match against the dnsName. + if strings.HasPrefix(dnsName, "*.") && !strings.HasPrefix(name, "*.") && HostnameMatches(name, dnsName) { + foundMatch = true + break + } + } + if !foundMatch { + validationResults.AddWarnings(field.Invalid(jdxPath, name, "the specified certificate does not have a CommonName or DNS subjectAltName that matches this name")) + } + } + } + } + + return validationResults +} + +func ValidateCertInfo(certInfo configv1.CertInfo, required bool, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if required { + if len(certInfo.CertFile) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("certFile"), "The certificate file must be provided")) + } + if len(certInfo.KeyFile) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("keyFile"), "The certificate key must be provided")) + } + } + + if (len(certInfo.CertFile) == 0) != (len(certInfo.KeyFile) == 0) { + allErrs = append(allErrs, field.Required(fldPath.Child("certFile"), "Both the certificate file and the certificate key must be provided together or not at all")) + allErrs = append(allErrs, field.Required(fldPath.Child("keyFile"), "Both the certificate file and the certificate key must be provided together or not at all")) + } + + if len(certInfo.CertFile) > 0 { + allErrs = append(allErrs, ValidateFile(certInfo.CertFile, fldPath.Child("certFile"))...) + } + + if len(certInfo.KeyFile) > 0 { + allErrs = append(allErrs, ValidateFile(certInfo.KeyFile, fldPath.Child("keyFile"))...) + } + + // validate certfile/keyfile load/parse? + + return allErrs +} diff --git a/vendor/github.com/openshift/library-go/pkg/crypto/crypto.go b/vendor/github.com/openshift/library-go/pkg/crypto/crypto.go new file mode 100644 index 0000000000000..544ea9fb85591 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/crypto/crypto.go @@ -0,0 +1,1182 @@ +package crypto + +import ( + "bytes" + "crypto" + "crypto/ecdsa" + "crypto/rand" + "crypto/rsa" + "crypto/sha1" + "crypto/tls" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "errors" + "fmt" + "io" + "io/ioutil" + "math/big" + mathrand "math/rand" + "net" + "os" + "path/filepath" + "sort" + "strconv" + "sync" + "time" + + "k8s.io/klog/v2" + + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apiserver/pkg/authentication/user" + "k8s.io/client-go/util/cert" +) + +// TLS versions that are known to golang. Go 1.13 adds support for +// TLS 1.3 that's opt-out with a build flag. +var versions = map[string]uint16{ + "VersionTLS10": tls.VersionTLS10, + "VersionTLS11": tls.VersionTLS11, + "VersionTLS12": tls.VersionTLS12, + "VersionTLS13": tls.VersionTLS13, +} + +// TLS versions that are enabled. +var supportedVersions = map[string]uint16{ + "VersionTLS10": tls.VersionTLS10, + "VersionTLS11": tls.VersionTLS11, + "VersionTLS12": tls.VersionTLS12, + "VersionTLS13": tls.VersionTLS13, +} + +// TLSVersionToNameOrDie given a tls version as an int, return its readable name +func TLSVersionToNameOrDie(intVal uint16) string { + matches := []string{} + for key, version := range versions { + if version == intVal { + matches = append(matches, key) + } + } + + if len(matches) == 0 { + panic(fmt.Sprintf("no name found for %d", intVal)) + } + if len(matches) > 1 { + panic(fmt.Sprintf("multiple names found for %d: %v", intVal, matches)) + } + return matches[0] +} + +func TLSVersion(versionName string) (uint16, error) { + if len(versionName) == 0 { + return DefaultTLSVersion(), nil + } + if version, ok := versions[versionName]; ok { + return version, nil + } + return 0, fmt.Errorf("unknown tls version %q", versionName) +} +func TLSVersionOrDie(versionName string) uint16 { + version, err := TLSVersion(versionName) + if err != nil { + panic(err) + } + return version +} + +// TLS versions that are known to golang, but may not necessarily be enabled. +func GolangTLSVersions() []string { + supported := []string{} + for k := range versions { + supported = append(supported, k) + } + sort.Strings(supported) + return supported +} + +// Returns the build enabled TLS versions. +func ValidTLSVersions() []string { + validVersions := []string{} + for k := range supportedVersions { + validVersions = append(validVersions, k) + } + sort.Strings(validVersions) + return validVersions +} +func DefaultTLSVersion() uint16 { + // Can't use SSLv3 because of POODLE and BEAST + // Can't use TLSv1.0 because of POODLE and BEAST using CBC cipher + // Can't use TLSv1.1 because of RC4 cipher usage + return tls.VersionTLS12 +} + +// ciphersTLS13 copies golang 1.13 implementation, where TLS1.3 suites are not +// configurable (cipherSuites field is ignored for TLS1.3 flows and all of the +// below three - and none other - are used) +var ciphersTLS13 = map[string]uint16{ + "TLS_AES_128_GCM_SHA256": tls.TLS_AES_128_GCM_SHA256, + "TLS_AES_256_GCM_SHA384": tls.TLS_AES_256_GCM_SHA384, + "TLS_CHACHA20_POLY1305_SHA256": tls.TLS_CHACHA20_POLY1305_SHA256, +} + +var ciphers = map[string]uint16{ + "TLS_RSA_WITH_RC4_128_SHA": tls.TLS_RSA_WITH_RC4_128_SHA, + "TLS_RSA_WITH_3DES_EDE_CBC_SHA": tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA, + "TLS_RSA_WITH_AES_128_CBC_SHA": tls.TLS_RSA_WITH_AES_128_CBC_SHA, + "TLS_RSA_WITH_AES_256_CBC_SHA": tls.TLS_RSA_WITH_AES_256_CBC_SHA, + "TLS_RSA_WITH_AES_128_CBC_SHA256": tls.TLS_RSA_WITH_AES_128_CBC_SHA256, + "TLS_RSA_WITH_AES_128_GCM_SHA256": tls.TLS_RSA_WITH_AES_128_GCM_SHA256, + "TLS_RSA_WITH_AES_256_GCM_SHA384": tls.TLS_RSA_WITH_AES_256_GCM_SHA384, + "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA": tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA": tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA": tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, + "TLS_ECDHE_RSA_WITH_RC4_128_SHA": tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA, + "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA": tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA": tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA": tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256": tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256": tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, + "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256": tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256": tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384": tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, + "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384": tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, + "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305": tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, + "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305": tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, + "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256": tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, + "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256": tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, +} + +// openSSLToIANACiphersMap maps OpenSSL cipher suite names to IANA names +// ref: https://www.iana.org/assignments/tls-parameters/tls-parameters.xml +var openSSLToIANACiphersMap = map[string]string{ + // TLS 1.3 ciphers - not configurable in go 1.13, all of them are used in TLSv1.3 flows + // "TLS_AES_128_GCM_SHA256": "TLS_AES_128_GCM_SHA256", // 0x13,0x01 + // "TLS_AES_256_GCM_SHA384": "TLS_AES_256_GCM_SHA384", // 0x13,0x02 + // "TLS_CHACHA20_POLY1305_SHA256": "TLS_CHACHA20_POLY1305_SHA256", // 0x13,0x03 + + // TLS 1.2 + "ECDHE-ECDSA-AES128-GCM-SHA256": "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", // 0xC0,0x2B + "ECDHE-RSA-AES128-GCM-SHA256": "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", // 0xC0,0x2F + "ECDHE-ECDSA-AES256-GCM-SHA384": "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", // 0xC0,0x2C + "ECDHE-RSA-AES256-GCM-SHA384": "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", // 0xC0,0x30 + "ECDHE-ECDSA-CHACHA20-POLY1305": "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", // 0xCC,0xA9 + "ECDHE-RSA-CHACHA20-POLY1305": "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", // 0xCC,0xA8 + "ECDHE-ECDSA-AES128-SHA256": "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", // 0xC0,0x23 + "ECDHE-RSA-AES128-SHA256": "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", // 0xC0,0x27 + "AES128-GCM-SHA256": "TLS_RSA_WITH_AES_128_GCM_SHA256", // 0x00,0x9C + "AES256-GCM-SHA384": "TLS_RSA_WITH_AES_256_GCM_SHA384", // 0x00,0x9D + "AES128-SHA256": "TLS_RSA_WITH_AES_128_CBC_SHA256", // 0x00,0x3C + + // TLS 1 + "ECDHE-ECDSA-AES128-SHA": "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", // 0xC0,0x09 + "ECDHE-RSA-AES128-SHA": "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", // 0xC0,0x13 + "ECDHE-ECDSA-AES256-SHA": "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", // 0xC0,0x0A + "ECDHE-RSA-AES256-SHA": "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", // 0xC0,0x14 + + // SSL 3 + "AES128-SHA": "TLS_RSA_WITH_AES_128_CBC_SHA", // 0x00,0x2F + "AES256-SHA": "TLS_RSA_WITH_AES_256_CBC_SHA", // 0x00,0x35 + "DES-CBC3-SHA": "TLS_RSA_WITH_3DES_EDE_CBC_SHA", // 0x00,0x0A +} + +// CipherSuitesToNamesOrDie given a list of cipher suites as ints, return their readable names +func CipherSuitesToNamesOrDie(intVals []uint16) []string { + ret := []string{} + for _, intVal := range intVals { + ret = append(ret, CipherSuiteToNameOrDie(intVal)) + } + + return ret +} + +// CipherSuiteToNameOrDie given a cipher suite as an int, return its readable name +func CipherSuiteToNameOrDie(intVal uint16) string { + // The following suite ids appear twice in the cipher map (with + // and without the _SHA256 suffix) for the purposes of backwards + // compatibility. Always return the current rather than the legacy + // name. + switch intVal { + case tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: + return "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" + case tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + return "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256" + } + + matches := []string{} + for key, version := range ciphers { + if version == intVal { + matches = append(matches, key) + } + } + + if len(matches) == 0 { + panic(fmt.Sprintf("no name found for %d", intVal)) + } + if len(matches) > 1 { + panic(fmt.Sprintf("multiple names found for %d: %v", intVal, matches)) + } + return matches[0] +} + +func CipherSuite(cipherName string) (uint16, error) { + if cipher, ok := ciphers[cipherName]; ok { + return cipher, nil + } + + if _, ok := ciphersTLS13[cipherName]; ok { + return 0, fmt.Errorf("all golang TLSv1.3 ciphers are always used for TLSv1.3 flows") + } + + return 0, fmt.Errorf("unknown cipher name %q", cipherName) +} + +func CipherSuitesOrDie(cipherNames []string) []uint16 { + if len(cipherNames) == 0 { + return DefaultCiphers() + } + cipherValues := []uint16{} + for _, cipherName := range cipherNames { + cipher, err := CipherSuite(cipherName) + if err != nil { + panic(err) + } + cipherValues = append(cipherValues, cipher) + } + return cipherValues +} +func ValidCipherSuites() []string { + validCipherSuites := []string{} + for k := range ciphers { + validCipherSuites = append(validCipherSuites, k) + } + sort.Strings(validCipherSuites) + return validCipherSuites +} +func DefaultCiphers() []uint16 { + // HTTP/2 mandates TLS 1.2 or higher with an AEAD cipher + // suite (GCM, Poly1305) and ephemeral key exchange (ECDHE, DHE) for + // perfect forward secrecy. Servers may provide additional cipher + // suites for backwards compatibility with HTTP/1.1 clients. + // See RFC7540, section 9.2 (Use of TLS Features) and Appendix A + // (TLS 1.2 Cipher Suite Black List). + return []uint16{ + tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, + tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, + tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, // required by http/2 + tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, + tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, + tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, // forbidden by http/2, not flagged by http2isBadCipher() in go1.8 + tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, // forbidden by http/2, not flagged by http2isBadCipher() in go1.8 + tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, // forbidden by http/2 + tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, // forbidden by http/2 + tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, // forbidden by http/2 + tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, // forbidden by http/2 + tls.TLS_RSA_WITH_AES_128_GCM_SHA256, // forbidden by http/2 + tls.TLS_RSA_WITH_AES_256_GCM_SHA384, // forbidden by http/2 + // the next one is in the intermediate suite, but go1.8 http2isBadCipher() complains when it is included at the recommended index + // because it comes after ciphers forbidden by the http/2 spec + // tls.TLS_RSA_WITH_AES_128_CBC_SHA256, + // tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, // forbidden by http/2, disabled to mitigate SWEET32 attack + // tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA, // forbidden by http/2, disabled to mitigate SWEET32 attack + tls.TLS_RSA_WITH_AES_128_CBC_SHA, // forbidden by http/2 + tls.TLS_RSA_WITH_AES_256_CBC_SHA, // forbidden by http/2 + } +} + +// SecureTLSConfig enforces the default minimum security settings for the cluster. +func SecureTLSConfig(config *tls.Config) *tls.Config { + if config.MinVersion == 0 { + config.MinVersion = DefaultTLSVersion() + } + + config.PreferServerCipherSuites = true + if len(config.CipherSuites) == 0 { + config.CipherSuites = DefaultCiphers() + } + return config +} + +// OpenSSLToIANACipherSuites maps input OpenSSL Cipher Suite names to their +// IANA counterparts. +// Unknown ciphers are left out. +func OpenSSLToIANACipherSuites(ciphers []string) []string { + ianaCiphers := make([]string, 0, len(ciphers)) + + for _, c := range ciphers { + ianaCipher, found := openSSLToIANACiphersMap[c] + if found { + ianaCiphers = append(ianaCiphers, ianaCipher) + } + } + + return ianaCiphers +} + +type TLSCertificateConfig struct { + Certs []*x509.Certificate + Key crypto.PrivateKey +} + +type TLSCARoots struct { + Roots []*x509.Certificate +} + +func (c *TLSCertificateConfig) WriteCertConfigFile(certFile, keyFile string) error { + // ensure parent dir + if err := os.MkdirAll(filepath.Dir(certFile), os.FileMode(0755)); err != nil { + return err + } + certFileWriter, err := os.OpenFile(certFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) + if err != nil { + return err + } + if err := os.MkdirAll(filepath.Dir(keyFile), os.FileMode(0755)); err != nil { + return err + } + keyFileWriter, err := os.OpenFile(keyFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) + if err != nil { + return err + } + + if err := writeCertificates(certFileWriter, c.Certs...); err != nil { + return err + } + if err := writeKeyFile(keyFileWriter, c.Key); err != nil { + return err + } + + if err := certFileWriter.Close(); err != nil { + return err + } + if err := keyFileWriter.Close(); err != nil { + return err + } + + return nil +} + +func (c *TLSCertificateConfig) WriteCertConfig(certFile, keyFile io.Writer) error { + if err := writeCertificates(certFile, c.Certs...); err != nil { + return err + } + if err := writeKeyFile(keyFile, c.Key); err != nil { + return err + } + return nil +} + +func (c *TLSCertificateConfig) GetPEMBytes() ([]byte, []byte, error) { + certBytes, err := EncodeCertificates(c.Certs...) + if err != nil { + return nil, nil, err + } + keyBytes, err := encodeKey(c.Key) + if err != nil { + return nil, nil, err + } + + return certBytes, keyBytes, nil +} + +func GetTLSCertificateConfig(certFile, keyFile string) (*TLSCertificateConfig, error) { + if len(certFile) == 0 { + return nil, errors.New("certFile missing") + } + if len(keyFile) == 0 { + return nil, errors.New("keyFile missing") + } + + certPEMBlock, err := ioutil.ReadFile(certFile) + if err != nil { + return nil, err + } + certs, err := cert.ParseCertsPEM(certPEMBlock) + if err != nil { + return nil, fmt.Errorf("Error reading %s: %s", certFile, err) + } + + keyPEMBlock, err := ioutil.ReadFile(keyFile) + if err != nil { + return nil, err + } + keyPairCert, err := tls.X509KeyPair(certPEMBlock, keyPEMBlock) + if err != nil { + return nil, err + } + key := keyPairCert.PrivateKey + + return &TLSCertificateConfig{certs, key}, nil +} + +func GetTLSCertificateConfigFromBytes(certBytes, keyBytes []byte) (*TLSCertificateConfig, error) { + if len(certBytes) == 0 { + return nil, errors.New("certFile missing") + } + if len(keyBytes) == 0 { + return nil, errors.New("keyFile missing") + } + + certs, err := cert.ParseCertsPEM(certBytes) + if err != nil { + return nil, fmt.Errorf("Error reading cert: %s", err) + } + + keyPairCert, err := tls.X509KeyPair(certBytes, keyBytes) + if err != nil { + return nil, err + } + key := keyPairCert.PrivateKey + + return &TLSCertificateConfig{certs, key}, nil +} + +const ( + DefaultCertificateLifetimeInDays = 365 * 2 // 2 years + DefaultCACertificateLifetimeInDays = 365 * 5 // 5 years + + // Default keys are 2048 bits + keyBits = 2048 +) + +type CA struct { + Config *TLSCertificateConfig + + SerialGenerator SerialGenerator +} + +// SerialGenerator is an interface for getting a serial number for the cert. It MUST be thread-safe. +type SerialGenerator interface { + Next(template *x509.Certificate) (int64, error) +} + +// SerialFileGenerator returns a unique, monotonically increasing serial number and ensures the CA on disk records that value. +type SerialFileGenerator struct { + SerialFile string + + // lock guards access to the Serial field + lock sync.Mutex + Serial int64 +} + +func NewSerialFileGenerator(serialFile string) (*SerialFileGenerator, error) { + // read serial file, it must already exist + serial, err := fileToSerial(serialFile) + if err != nil { + return nil, err + } + + generator := &SerialFileGenerator{ + Serial: serial, + SerialFile: serialFile, + } + + // 0 is unused and 1 is reserved for the CA itself + // Thus we need to guarantee that the first external call to SerialFileGenerator.Next returns 2+ + // meaning that SerialFileGenerator.Serial must not be less than 1 (it is guaranteed to be non-negative) + if generator.Serial < 1 { + // fake a call to Next so the file stays in sync and Serial is incremented + if _, err := generator.Next(&x509.Certificate{}); err != nil { + return nil, err + } + } + + return generator, nil +} + +// Next returns a unique, monotonically increasing serial number and ensures the CA on disk records that value. +func (s *SerialFileGenerator) Next(template *x509.Certificate) (int64, error) { + s.lock.Lock() + defer s.lock.Unlock() + + // do a best effort check to make sure concurrent external writes are not occurring to the underlying serial file + serial, err := fileToSerial(s.SerialFile) + if err != nil { + return 0, err + } + if serial != s.Serial { + return 0, fmt.Errorf("serial file %s out of sync ram=%d disk=%d", s.SerialFile, s.Serial, serial) + } + + next := s.Serial + 1 + s.Serial = next + + // Output in hex, padded to multiples of two characters for OpenSSL's sake + serialText := fmt.Sprintf("%X", next) + if len(serialText)%2 == 1 { + serialText = "0" + serialText + } + // always add a newline at the end to have a valid file + serialText += "\n" + + if err := ioutil.WriteFile(s.SerialFile, []byte(serialText), os.FileMode(0640)); err != nil { + return 0, err + } + return next, nil +} + +func fileToSerial(serialFile string) (int64, error) { + serialData, err := ioutil.ReadFile(serialFile) + if err != nil { + return 0, err + } + + // read the file as a single hex number after stripping any whitespace + serial, err := strconv.ParseInt(string(bytes.TrimSpace(serialData)), 16, 64) + if err != nil { + return 0, err + } + + if serial < 0 { + return 0, fmt.Errorf("invalid negative serial %d in serial file %s", serial, serialFile) + } + + return serial, nil +} + +// RandomSerialGenerator returns a serial based on time.Now and the subject +type RandomSerialGenerator struct { +} + +func (s *RandomSerialGenerator) Next(template *x509.Certificate) (int64, error) { + return randomSerialNumber(), nil +} + +// randomSerialNumber returns a random int64 serial number based on +// time.Now. It is defined separately from the generator interface so +// that the caller doesn't have to worry about an input template or +// error - these are unnecessary when creating a random serial. +func randomSerialNumber() int64 { + r := mathrand.New(mathrand.NewSource(time.Now().UTC().UnixNano())) + return r.Int63() +} + +// EnsureCA returns a CA, whether it was created (as opposed to pre-existing), and any error +// if serialFile is empty, a RandomSerialGenerator will be used +func EnsureCA(certFile, keyFile, serialFile, name string, expireDays int) (*CA, bool, error) { + if ca, err := GetCA(certFile, keyFile, serialFile); err == nil { + return ca, false, err + } + ca, err := MakeSelfSignedCA(certFile, keyFile, serialFile, name, expireDays) + return ca, true, err +} + +// if serialFile is empty, a RandomSerialGenerator will be used +func GetCA(certFile, keyFile, serialFile string) (*CA, error) { + caConfig, err := GetTLSCertificateConfig(certFile, keyFile) + if err != nil { + return nil, err + } + + var serialGenerator SerialGenerator + if len(serialFile) > 0 { + serialGenerator, err = NewSerialFileGenerator(serialFile) + if err != nil { + return nil, err + } + } else { + serialGenerator = &RandomSerialGenerator{} + } + + return &CA{ + SerialGenerator: serialGenerator, + Config: caConfig, + }, nil +} + +func GetCAFromBytes(certBytes, keyBytes []byte) (*CA, error) { + caConfig, err := GetTLSCertificateConfigFromBytes(certBytes, keyBytes) + if err != nil { + return nil, err + } + + return &CA{ + SerialGenerator: &RandomSerialGenerator{}, + Config: caConfig, + }, nil +} + +// if serialFile is empty, a RandomSerialGenerator will be used +func MakeSelfSignedCA(certFile, keyFile, serialFile, name string, expireDays int) (*CA, error) { + klog.V(2).Infof("Generating new CA for %s cert, and key in %s, %s", name, certFile, keyFile) + + caConfig, err := MakeSelfSignedCAConfig(name, expireDays) + if err != nil { + return nil, err + } + if err := caConfig.WriteCertConfigFile(certFile, keyFile); err != nil { + return nil, err + } + + var serialGenerator SerialGenerator + if len(serialFile) > 0 { + // create / overwrite the serial file with a zero padded hex value (ending in a newline to have a valid file) + if err := ioutil.WriteFile(serialFile, []byte("00\n"), 0644); err != nil { + return nil, err + } + serialGenerator, err = NewSerialFileGenerator(serialFile) + if err != nil { + return nil, err + } + } else { + serialGenerator = &RandomSerialGenerator{} + } + + return &CA{ + SerialGenerator: serialGenerator, + Config: caConfig, + }, nil +} + +func MakeSelfSignedCAConfig(name string, expireDays int) (*TLSCertificateConfig, error) { + subject := pkix.Name{CommonName: name} + return MakeSelfSignedCAConfigForSubject(subject, expireDays) +} + +func MakeSelfSignedCAConfigForSubject(subject pkix.Name, expireDays int) (*TLSCertificateConfig, error) { + var caLifetimeInDays = DefaultCACertificateLifetimeInDays + if expireDays > 0 { + caLifetimeInDays = expireDays + } + + if caLifetimeInDays > DefaultCACertificateLifetimeInDays { + warnAboutCertificateLifeTime(subject.CommonName, DefaultCACertificateLifetimeInDays) + } + + caLifetime := time.Duration(caLifetimeInDays) * 24 * time.Hour + return makeSelfSignedCAConfigForSubjectAndDuration(subject, caLifetime) +} + +func MakeSelfSignedCAConfigForDuration(name string, caLifetime time.Duration) (*TLSCertificateConfig, error) { + subject := pkix.Name{CommonName: name} + return makeSelfSignedCAConfigForSubjectAndDuration(subject, caLifetime) +} + +func makeSelfSignedCAConfigForSubjectAndDuration(subject pkix.Name, caLifetime time.Duration) (*TLSCertificateConfig, error) { + // Create CA cert + rootcaPublicKey, rootcaPrivateKey, publicKeyHash, err := newKeyPairWithHash() + if err != nil { + return nil, err + } + // AuthorityKeyId and SubjectKeyId should match for a self-signed CA + authorityKeyId := publicKeyHash + subjectKeyId := publicKeyHash + rootcaTemplate := newSigningCertificateTemplateForDuration(subject, caLifetime, time.Now, authorityKeyId, subjectKeyId) + rootcaCert, err := signCertificate(rootcaTemplate, rootcaPublicKey, rootcaTemplate, rootcaPrivateKey) + if err != nil { + return nil, err + } + caConfig := &TLSCertificateConfig{ + Certs: []*x509.Certificate{rootcaCert}, + Key: rootcaPrivateKey, + } + return caConfig, nil +} + +func MakeCAConfigForDuration(name string, caLifetime time.Duration, issuer *CA) (*TLSCertificateConfig, error) { + // Create CA cert + signerPublicKey, signerPrivateKey, publicKeyHash, err := newKeyPairWithHash() + if err != nil { + return nil, err + } + authorityKeyId := issuer.Config.Certs[0].SubjectKeyId + subjectKeyId := publicKeyHash + signerTemplate := newSigningCertificateTemplateForDuration(pkix.Name{CommonName: name}, caLifetime, time.Now, authorityKeyId, subjectKeyId) + signerCert, err := issuer.signCertificate(signerTemplate, signerPublicKey) + if err != nil { + return nil, err + } + signerConfig := &TLSCertificateConfig{ + Certs: append([]*x509.Certificate{signerCert}, issuer.Config.Certs...), + Key: signerPrivateKey, + } + return signerConfig, nil +} + +func (ca *CA) EnsureServerCert(certFile, keyFile string, hostnames sets.String, expireDays int) (*TLSCertificateConfig, bool, error) { + certConfig, err := GetServerCert(certFile, keyFile, hostnames) + if err != nil { + certConfig, err = ca.MakeAndWriteServerCert(certFile, keyFile, hostnames, expireDays) + return certConfig, true, err + } + + return certConfig, false, nil +} + +func GetServerCert(certFile, keyFile string, hostnames sets.String) (*TLSCertificateConfig, error) { + server, err := GetTLSCertificateConfig(certFile, keyFile) + if err != nil { + return nil, err + } + + cert := server.Certs[0] + ips, dns := IPAddressesDNSNames(hostnames.List()) + missingIps := ipsNotInSlice(ips, cert.IPAddresses) + missingDns := stringsNotInSlice(dns, cert.DNSNames) + if len(missingIps) == 0 && len(missingDns) == 0 { + klog.V(4).Infof("Found existing server certificate in %s", certFile) + return server, nil + } + + return nil, fmt.Errorf("Existing server certificate in %s was missing some hostnames (%v) or IP addresses (%v).", certFile, missingDns, missingIps) +} + +func (ca *CA) MakeAndWriteServerCert(certFile, keyFile string, hostnames sets.String, expireDays int) (*TLSCertificateConfig, error) { + klog.V(4).Infof("Generating server certificate in %s, key in %s", certFile, keyFile) + + server, err := ca.MakeServerCert(hostnames, expireDays) + if err != nil { + return nil, err + } + if err := server.WriteCertConfigFile(certFile, keyFile); err != nil { + return server, err + } + return server, nil +} + +// CertificateExtensionFunc is passed a certificate that it may extend, or return an error +// if the extension attempt failed. +type CertificateExtensionFunc func(*x509.Certificate) error + +func (ca *CA) MakeServerCert(hostnames sets.String, expireDays int, fns ...CertificateExtensionFunc) (*TLSCertificateConfig, error) { + serverPublicKey, serverPrivateKey, publicKeyHash, _ := newKeyPairWithHash() + authorityKeyId := ca.Config.Certs[0].SubjectKeyId + subjectKeyId := publicKeyHash + serverTemplate := newServerCertificateTemplate(pkix.Name{CommonName: hostnames.List()[0]}, hostnames.List(), expireDays, time.Now, authorityKeyId, subjectKeyId) + for _, fn := range fns { + if err := fn(serverTemplate); err != nil { + return nil, err + } + } + serverCrt, err := ca.signCertificate(serverTemplate, serverPublicKey) + if err != nil { + return nil, err + } + server := &TLSCertificateConfig{ + Certs: append([]*x509.Certificate{serverCrt}, ca.Config.Certs...), + Key: serverPrivateKey, + } + return server, nil +} + +func (ca *CA) MakeServerCertForDuration(hostnames sets.String, lifetime time.Duration, fns ...CertificateExtensionFunc) (*TLSCertificateConfig, error) { + serverPublicKey, serverPrivateKey, publicKeyHash, _ := newKeyPairWithHash() + authorityKeyId := ca.Config.Certs[0].SubjectKeyId + subjectKeyId := publicKeyHash + serverTemplate := newServerCertificateTemplateForDuration(pkix.Name{CommonName: hostnames.List()[0]}, hostnames.List(), lifetime, time.Now, authorityKeyId, subjectKeyId) + for _, fn := range fns { + if err := fn(serverTemplate); err != nil { + return nil, err + } + } + serverCrt, err := ca.signCertificate(serverTemplate, serverPublicKey) + if err != nil { + return nil, err + } + server := &TLSCertificateConfig{ + Certs: append([]*x509.Certificate{serverCrt}, ca.Config.Certs...), + Key: serverPrivateKey, + } + return server, nil +} + +func (ca *CA) EnsureClientCertificate(certFile, keyFile string, u user.Info, expireDays int) (*TLSCertificateConfig, bool, error) { + certConfig, err := GetTLSCertificateConfig(certFile, keyFile) + if err != nil { + certConfig, err = ca.MakeClientCertificate(certFile, keyFile, u, expireDays) + return certConfig, true, err // true indicates we wrote the files. + } + + return certConfig, false, nil +} + +func (ca *CA) MakeClientCertificate(certFile, keyFile string, u user.Info, expireDays int) (*TLSCertificateConfig, error) { + klog.V(4).Infof("Generating client cert in %s and key in %s", certFile, keyFile) + // ensure parent dirs + if err := os.MkdirAll(filepath.Dir(certFile), os.FileMode(0755)); err != nil { + return nil, err + } + if err := os.MkdirAll(filepath.Dir(keyFile), os.FileMode(0755)); err != nil { + return nil, err + } + + clientPublicKey, clientPrivateKey, _ := NewKeyPair() + clientTemplate := newClientCertificateTemplate(userToSubject(u), expireDays, time.Now) + clientCrt, err := ca.signCertificate(clientTemplate, clientPublicKey) + if err != nil { + return nil, err + } + + certData, err := EncodeCertificates(clientCrt) + if err != nil { + return nil, err + } + keyData, err := encodeKey(clientPrivateKey) + if err != nil { + return nil, err + } + + if err = ioutil.WriteFile(certFile, certData, os.FileMode(0644)); err != nil { + return nil, err + } + if err = ioutil.WriteFile(keyFile, keyData, os.FileMode(0600)); err != nil { + return nil, err + } + + return GetTLSCertificateConfig(certFile, keyFile) +} + +func (ca *CA) MakeClientCertificateForDuration(u user.Info, lifetime time.Duration) (*TLSCertificateConfig, error) { + clientPublicKey, clientPrivateKey, _ := NewKeyPair() + clientTemplate := newClientCertificateTemplateForDuration(userToSubject(u), lifetime, time.Now) + clientCrt, err := ca.signCertificate(clientTemplate, clientPublicKey) + if err != nil { + return nil, err + } + + certData, err := EncodeCertificates(clientCrt) + if err != nil { + return nil, err + } + keyData, err := encodeKey(clientPrivateKey) + if err != nil { + return nil, err + } + + return GetTLSCertificateConfigFromBytes(certData, keyData) +} + +type sortedForDER []string + +func (s sortedForDER) Len() int { + return len(s) +} +func (s sortedForDER) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} +func (s sortedForDER) Less(i, j int) bool { + l1 := len(s[i]) + l2 := len(s[j]) + if l1 == l2 { + return s[i] < s[j] + } + return l1 < l2 +} + +func userToSubject(u user.Info) pkix.Name { + // Ok we are going to order groups in a peculiar way here to workaround a + // 2 bugs, 1 in golang (https://github.com/golang/go/issues/24254) which + // incorrectly encodes Multivalued RDNs and another in GNUTLS clients + // which are too picky (https://gitlab.com/gnutls/gnutls/issues/403) + // and try to "correct" this issue when reading client certs. + // + // This workaround should be killed once Golang's pkix module is fixed to + // generate a correct DER encoding. + // + // The workaround relies on the fact that the first octect that differs + // between the encoding of two group RDNs will end up being the encoded + // length which is directly related to the group name's length. So we'll + // sort such that shortest names come first. + ugroups := u.GetGroups() + groups := make([]string, len(ugroups)) + copy(groups, ugroups) + sort.Sort(sortedForDER(groups)) + + return pkix.Name{ + CommonName: u.GetName(), + SerialNumber: u.GetUID(), + Organization: groups, + } +} + +func (ca *CA) signCertificate(template *x509.Certificate, requestKey crypto.PublicKey) (*x509.Certificate, error) { + // Increment and persist serial + serial, err := ca.SerialGenerator.Next(template) + if err != nil { + return nil, err + } + template.SerialNumber = big.NewInt(serial) + return signCertificate(template, requestKey, ca.Config.Certs[0], ca.Config.Key) +} + +func NewKeyPair() (crypto.PublicKey, crypto.PrivateKey, error) { + return newRSAKeyPair() +} + +func newKeyPairWithHash() (crypto.PublicKey, crypto.PrivateKey, []byte, error) { + publicKey, privateKey, err := newRSAKeyPair() + var publicKeyHash []byte + if err == nil { + hash := sha1.New() + hash.Write(publicKey.N.Bytes()) + publicKeyHash = hash.Sum(nil) + } + return publicKey, privateKey, publicKeyHash, err +} + +func newRSAKeyPair() (*rsa.PublicKey, *rsa.PrivateKey, error) { + privateKey, err := rsa.GenerateKey(rand.Reader, keyBits) + if err != nil { + return nil, nil, err + } + return &privateKey.PublicKey, privateKey, nil +} + +// Can be used for CA or intermediate signing certs +func newSigningCertificateTemplateForDuration(subject pkix.Name, caLifetime time.Duration, currentTime func() time.Time, authorityKeyId, subjectKeyId []byte) *x509.Certificate { + return &x509.Certificate{ + Subject: subject, + + SignatureAlgorithm: x509.SHA256WithRSA, + + NotBefore: currentTime().Add(-1 * time.Second), + NotAfter: currentTime().Add(caLifetime), + + // Specify a random serial number to avoid the same issuer+serial + // number referring to different certs in a chain of trust if the + // signing certificate is ever rotated. + SerialNumber: big.NewInt(randomSerialNumber()), + + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, + BasicConstraintsValid: true, + IsCA: true, + + AuthorityKeyId: authorityKeyId, + SubjectKeyId: subjectKeyId, + } +} + +// Can be used for ListenAndServeTLS +func newServerCertificateTemplate(subject pkix.Name, hosts []string, expireDays int, currentTime func() time.Time, authorityKeyId, subjectKeyId []byte) *x509.Certificate { + var lifetimeInDays = DefaultCertificateLifetimeInDays + if expireDays > 0 { + lifetimeInDays = expireDays + } + + if lifetimeInDays > DefaultCertificateLifetimeInDays { + warnAboutCertificateLifeTime(subject.CommonName, DefaultCertificateLifetimeInDays) + } + + lifetime := time.Duration(lifetimeInDays) * 24 * time.Hour + + return newServerCertificateTemplateForDuration(subject, hosts, lifetime, currentTime, authorityKeyId, subjectKeyId) +} + +// Can be used for ListenAndServeTLS +func newServerCertificateTemplateForDuration(subject pkix.Name, hosts []string, lifetime time.Duration, currentTime func() time.Time, authorityKeyId, subjectKeyId []byte) *x509.Certificate { + template := &x509.Certificate{ + Subject: subject, + + SignatureAlgorithm: x509.SHA256WithRSA, + + NotBefore: currentTime().Add(-1 * time.Second), + NotAfter: currentTime().Add(lifetime), + SerialNumber: big.NewInt(1), + + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + BasicConstraintsValid: true, + + AuthorityKeyId: authorityKeyId, + SubjectKeyId: subjectKeyId, + } + + template.IPAddresses, template.DNSNames = IPAddressesDNSNames(hosts) + + return template +} + +func IPAddressesDNSNames(hosts []string) ([]net.IP, []string) { + ips := []net.IP{} + dns := []string{} + for _, host := range hosts { + if ip := net.ParseIP(host); ip != nil { + ips = append(ips, ip) + } else { + dns = append(dns, host) + } + } + + // Include IP addresses as DNS subjectAltNames in the cert as well, for the sake of Python, Windows (< 10), and unnamed other libraries + // Ensure these technically invalid DNS subjectAltNames occur after the valid ones, to avoid triggering cert errors in Firefox + // See https://bugzilla.mozilla.org/show_bug.cgi?id=1148766 + for _, ip := range ips { + dns = append(dns, ip.String()) + } + + return ips, dns +} + +func CertsFromPEM(pemCerts []byte) ([]*x509.Certificate, error) { + ok := false + certs := []*x509.Certificate{} + for len(pemCerts) > 0 { + var block *pem.Block + block, pemCerts = pem.Decode(pemCerts) + if block == nil { + break + } + if block.Type != "CERTIFICATE" || len(block.Headers) != 0 { + continue + } + + cert, err := x509.ParseCertificate(block.Bytes) + if err != nil { + return certs, err + } + + certs = append(certs, cert) + ok = true + } + + if !ok { + return certs, errors.New("Could not read any certificates") + } + return certs, nil +} + +// Can be used as a certificate in http.Transport TLSClientConfig +func newClientCertificateTemplate(subject pkix.Name, expireDays int, currentTime func() time.Time) *x509.Certificate { + var lifetimeInDays = DefaultCertificateLifetimeInDays + if expireDays > 0 { + lifetimeInDays = expireDays + } + + if lifetimeInDays > DefaultCertificateLifetimeInDays { + warnAboutCertificateLifeTime(subject.CommonName, DefaultCertificateLifetimeInDays) + } + + lifetime := time.Duration(lifetimeInDays) * 24 * time.Hour + + return newClientCertificateTemplateForDuration(subject, lifetime, currentTime) +} + +// Can be used as a certificate in http.Transport TLSClientConfig +func newClientCertificateTemplateForDuration(subject pkix.Name, lifetime time.Duration, currentTime func() time.Time) *x509.Certificate { + return &x509.Certificate{ + Subject: subject, + + SignatureAlgorithm: x509.SHA256WithRSA, + + NotBefore: currentTime().Add(-1 * time.Second), + NotAfter: currentTime().Add(lifetime), + SerialNumber: big.NewInt(1), + + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth}, + BasicConstraintsValid: true, + } +} + +func warnAboutCertificateLifeTime(name string, defaultLifetimeInDays int) { + defaultLifetimeInYears := defaultLifetimeInDays / 365 + fmt.Fprintf(os.Stderr, "WARNING: Validity period of the certificate for %q is greater than %d years!\n", name, defaultLifetimeInYears) + fmt.Fprintln(os.Stderr, "WARNING: By security reasons it is strongly recommended to change this period and make it smaller!") +} + +func signCertificate(template *x509.Certificate, requestKey crypto.PublicKey, issuer *x509.Certificate, issuerKey crypto.PrivateKey) (*x509.Certificate, error) { + derBytes, err := x509.CreateCertificate(rand.Reader, template, issuer, requestKey, issuerKey) + if err != nil { + return nil, err + } + certs, err := x509.ParseCertificates(derBytes) + if err != nil { + return nil, err + } + if len(certs) != 1 { + return nil, errors.New("Expected a single certificate") + } + return certs[0], nil +} + +func EncodeCertificates(certs ...*x509.Certificate) ([]byte, error) { + b := bytes.Buffer{} + for _, cert := range certs { + if err := pem.Encode(&b, &pem.Block{Type: "CERTIFICATE", Bytes: cert.Raw}); err != nil { + return []byte{}, err + } + } + return b.Bytes(), nil +} +func encodeKey(key crypto.PrivateKey) ([]byte, error) { + b := bytes.Buffer{} + switch key := key.(type) { + case *ecdsa.PrivateKey: + keyBytes, err := x509.MarshalECPrivateKey(key) + if err != nil { + return []byte{}, err + } + if err := pem.Encode(&b, &pem.Block{Type: "EC PRIVATE KEY", Bytes: keyBytes}); err != nil { + return b.Bytes(), err + } + case *rsa.PrivateKey: + if err := pem.Encode(&b, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)}); err != nil { + return []byte{}, err + } + default: + return []byte{}, errors.New("Unrecognized key type") + + } + return b.Bytes(), nil +} + +func writeCertificates(f io.Writer, certs ...*x509.Certificate) error { + bytes, err := EncodeCertificates(certs...) + if err != nil { + return err + } + if _, err := f.Write(bytes); err != nil { + return err + } + + return nil +} +func writeKeyFile(f io.Writer, key crypto.PrivateKey) error { + bytes, err := encodeKey(key) + if err != nil { + return err + } + if _, err := f.Write(bytes); err != nil { + return err + } + + return nil +} + +func stringsNotInSlice(needles []string, haystack []string) []string { + missing := []string{} + for _, needle := range needles { + if !stringInSlice(needle, haystack) { + missing = append(missing, needle) + } + } + return missing +} + +func stringInSlice(needle string, haystack []string) bool { + for _, straw := range haystack { + if needle == straw { + return true + } + } + return false +} + +func ipsNotInSlice(needles []net.IP, haystack []net.IP) []net.IP { + missing := []net.IP{} + for _, needle := range needles { + if !ipInSlice(needle, haystack) { + missing = append(missing, needle) + } + } + return missing +} + +func ipInSlice(needle net.IP, haystack []net.IP) bool { + for _, straw := range haystack { + if needle.Equal(straw) { + return true + } + } + return false +} diff --git a/vendor/github.com/openshift/library-go/pkg/crypto/rotation.go b/vendor/github.com/openshift/library-go/pkg/crypto/rotation.go new file mode 100644 index 0000000000000..0aa127037c805 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/crypto/rotation.go @@ -0,0 +1,20 @@ +package crypto + +import ( + "crypto/x509" + "time" +) + +// FilterExpiredCerts checks are all certificates in the bundle valid, i.e. they have not expired. +// The function returns new bundle with only valid certificates or error if no valid certificate is found. +func FilterExpiredCerts(certs ...*x509.Certificate) []*x509.Certificate { + currentTime := time.Now() + var validCerts []*x509.Certificate + for _, c := range certs { + if c.NotAfter.After(currentTime) { + validCerts = append(validCerts, c) + } + } + + return validCerts +} diff --git a/vendor/github.com/openshift/library-go/pkg/image/imageutil/helpers.go b/vendor/github.com/openshift/library-go/pkg/image/imageutil/helpers.go new file mode 100644 index 0000000000000..d35c052f37c6c --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/image/imageutil/helpers.go @@ -0,0 +1,379 @@ +package imageutil + +import ( + "encoding/json" + "fmt" + "regexp" + "sort" + "strings" + + "github.com/blang/semver" + + "github.com/openshift/api/image/docker10" + imagev1 "github.com/openshift/api/image/v1" + digestinternal "github.com/openshift/library-go/pkg/image/internal/digest" + imagereference "github.com/openshift/library-go/pkg/image/reference" +) + +const ( + // DefaultImageTag is used when an image tag is needed and the configuration does not specify a tag to use. + DefaultImageTag = "latest" +) + +var ParseDigest = digestinternal.ParseDigest + +// SplitImageStreamTag turns the name of an ImageStreamTag into Name and Tag. +// It returns false if the tag was not properly specified in the name. +func SplitImageStreamTag(nameAndTag string) (name string, tag string, ok bool) { + parts := strings.SplitN(nameAndTag, ":", 2) + name = parts[0] + if len(parts) > 1 { + tag = parts[1] + } + if len(tag) == 0 { + tag = DefaultImageTag + } + return name, tag, len(parts) == 2 +} + +// SplitImageStreamImage turns the name of an ImageStreamImage into Name and ID. +// It returns false if the ID was not properly specified in the name. +func SplitImageStreamImage(nameAndID string) (name string, id string, ok bool) { + parts := strings.SplitN(nameAndID, "@", 2) + name = parts[0] + if len(parts) > 1 { + id = parts[1] + } + return name, id, len(parts) == 2 +} + +// JoinImageStreamTag turns a name and tag into the name of an ImageStreamTag +func JoinImageStreamTag(name, tag string) string { + if len(tag) == 0 { + tag = DefaultImageTag + } + return fmt.Sprintf("%s:%s", name, tag) +} + +// JoinImageStreamImage creates a name for image stream image object from an image stream name and an id. +func JoinImageStreamImage(name, id string) string { + return fmt.Sprintf("%s@%s", name, id) +} + +// ParseImageStreamTagName splits a string into its name component and tag component, and returns an error +// if the string is not in the right form. +func ParseImageStreamTagName(istag string) (name string, tag string, err error) { + if strings.Contains(istag, "@") { + err = fmt.Errorf("%q is an image stream image, not an image stream tag", istag) + return + } + segments := strings.SplitN(istag, ":", 3) + switch len(segments) { + case 2: + name = segments[0] + tag = segments[1] + if len(name) == 0 || len(tag) == 0 { + err = fmt.Errorf("image stream tag name %q must have a name and a tag", istag) + } + default: + err = fmt.Errorf("expected exactly one : delimiter in the istag %q", istag) + } + return +} + +// ParseImageStreamImageName splits a string into its name component and ID component, and returns an error +// if the string is not in the right form. +func ParseImageStreamImageName(input string) (name string, id string, err error) { + segments := strings.SplitN(input, "@", 3) + switch len(segments) { + case 2: + name = segments[0] + id = segments[1] + if len(name) == 0 || len(id) == 0 { + err = fmt.Errorf("image stream image name %q must have a name and ID", input) + } + default: + err = fmt.Errorf("expected exactly one @ in the isimage name %q", input) + } + return +} + +var ( + reMinorSemantic = regexp.MustCompile(`^[\d]+\.[\d]+$`) + reMinorWithPatch = regexp.MustCompile(`^([\d]+\.[\d]+)-\w+$`) +) + +type tagPriority int + +const ( + // the "latest" tag + tagPriorityLatest tagPriority = iota + + // a semantic minor version ("5.1", "v5.1", "v5.1-rc1") + tagPriorityMinor + + // a full semantic version ("5.1.3-other", "v5.1.3-other") + tagPriorityFull + + // other tags + tagPriorityOther +) + +type prioritizedTag struct { + tag string + priority tagPriority + semver semver.Version + prefix string +} + +func prioritizeTag(tag string) prioritizedTag { + if tag == "latest" { + return prioritizedTag{ + tag: tag, + priority: tagPriorityLatest, + } + } + + short := tag + prefix := "" + if strings.HasPrefix(tag, "v") { + prefix = "v" + short = tag[1:] + } + + // 5.1.3 + if v, err := semver.Parse(short); err == nil { + return prioritizedTag{ + tag: tag, + priority: tagPriorityFull, + semver: v, + prefix: prefix, + } + } + + // 5.1 + if reMinorSemantic.MatchString(short) { + if v, err := semver.Parse(short + ".0"); err == nil { + return prioritizedTag{ + tag: tag, + priority: tagPriorityMinor, + semver: v, + prefix: prefix, + } + } + } + + // 5.1-rc1 + if match := reMinorWithPatch.FindStringSubmatch(short); match != nil { + if v, err := semver.Parse(strings.Replace(short, match[1], match[1]+".0", 1)); err == nil { + return prioritizedTag{ + tag: tag, + priority: tagPriorityMinor, + semver: v, + prefix: prefix, + } + } + } + + // other + return prioritizedTag{ + tag: tag, + priority: tagPriorityOther, + prefix: prefix, + } +} + +type prioritizedTags []prioritizedTag + +func (t prioritizedTags) Len() int { return len(t) } +func (t prioritizedTags) Swap(i, j int) { t[i], t[j] = t[j], t[i] } +func (t prioritizedTags) Less(i, j int) bool { + if t[i].priority != t[j].priority { + return t[i].priority < t[j].priority + } + + if t[i].priority == tagPriorityOther { + return t[i].tag < t[j].tag + } + + cmp := t[i].semver.Compare(t[j].semver) + if cmp > 0 { // the newer tag has a higher priority + return true + } + return cmp == 0 && t[i].prefix < t[j].prefix +} + +// PrioritizeTags orders a set of image tags with a few conventions: +// +// 1. the "latest" tag, if present, should be first +// 2. any tags that represent a semantic minor version ("5.1", "v5.1", "v5.1-rc1") should be next, in descending order +// 3. any tags that represent a full semantic version ("5.1.3-other", "v5.1.3-other") should be next, in descending order +// 4. any remaining tags should be sorted in lexicographic order +// +// The method updates the tags in place. +func PrioritizeTags(tags []string) { + ptags := make(prioritizedTags, len(tags)) + for i, tag := range tags { + ptags[i] = prioritizeTag(tag) + } + sort.Sort(ptags) + for i, pt := range ptags { + tags[i] = pt.tag + } +} + +// StatusHasTag returns named tag from image stream's status and boolean whether one was found. +func StatusHasTag(stream *imagev1.ImageStream, name string) (imagev1.NamedTagEventList, bool) { + for _, tag := range stream.Status.Tags { + if tag.Tag == name { + return tag, true + } + } + return imagev1.NamedTagEventList{}, false +} + +// LatestTaggedImage returns the most recent TagEvent for the specified image +// repository and tag. Will resolve lookups for the empty tag. Returns nil +// if tag isn't present in stream.status.tags. +func LatestTaggedImage(stream *imagev1.ImageStream, tag string) *imagev1.TagEvent { + if len(tag) == 0 { + tag = imagev1.DefaultImageTag + } + + // find the most recent tag event with an image reference + t, ok := StatusHasTag(stream, tag) + if ok { + if len(t.Items) == 0 { + return nil + } + return &t.Items[0] + } + + return nil +} + +// ImageWithMetadata mutates the given image. It parses raw DockerImageManifest data stored in the image and +// fills its DockerImageMetadata and other fields. +// Copied from github.com/openshift/image-registry/pkg/origin-common/util/util.go +func ImageWithMetadata(image *imagev1.Image) error { + // Check if the metadata are already filled in for this image. + meta, hasMetadata := image.DockerImageMetadata.Object.(*docker10.DockerImage) + if hasMetadata && meta.Size > 0 { + return nil + } + + version := image.DockerImageMetadataVersion + if len(version) == 0 { + version = "1.0" + } + + obj := &docker10.DockerImage{} + if len(image.DockerImageMetadata.Raw) != 0 { + if err := json.Unmarshal(image.DockerImageMetadata.Raw, obj); err != nil { + return err + } + image.DockerImageMetadata.Object = obj + } + + image.DockerImageMetadataVersion = version + + return nil +} + +func ImageWithMetadataOrDie(image *imagev1.Image) { + if err := ImageWithMetadata(image); err != nil { + panic(err) + } +} + +// ResolveLatestTaggedImage returns the appropriate pull spec for a given tag in +// the image stream, handling the tag's reference policy if necessary to return +// a resolved image. Callers that transform an ImageStreamTag into a pull spec +// should use this method instead of LatestTaggedImage. +func ResolveLatestTaggedImage(stream *imagev1.ImageStream, tag string) (string, bool) { + if len(tag) == 0 { + tag = imagev1.DefaultImageTag + } + return resolveTagReference(stream, tag, LatestTaggedImage(stream, tag)) +} + +// ResolveTagReference applies the tag reference rules for a stream, tag, and tag event for +// that tag. It returns true if the tag is +func resolveTagReference(stream *imagev1.ImageStream, tag string, latest *imagev1.TagEvent) (string, bool) { + if latest == nil { + return "", false + } + return resolveReferenceForTagEvent(stream, tag, latest), true +} + +// SpecHasTag returns named tag from image stream's spec and boolean whether one was found. +func SpecHasTag(stream *imagev1.ImageStream, name string) (imagev1.TagReference, bool) { + for _, tag := range stream.Spec.Tags { + if tag.Name == name { + return tag, true + } + } + return imagev1.TagReference{}, false +} + +// ResolveReferenceForTagEvent applies the tag reference rules for a stream, tag, and tag event for +// that tag. +func resolveReferenceForTagEvent(stream *imagev1.ImageStream, tag string, latest *imagev1.TagEvent) string { + // retrieve spec policy - if not found, we use the latest spec + ref, ok := SpecHasTag(stream, tag) + if !ok { + return latest.DockerImageReference + } + + switch ref.ReferencePolicy.Type { + // the local reference policy attempts to use image pull through on the integrated + // registry if possible + case imagev1.LocalTagReferencePolicy: + local := stream.Status.DockerImageRepository + if len(local) == 0 || len(latest.Image) == 0 { + // fallback to the originating reference if no local docker registry defined or we + // lack an image ID + return latest.DockerImageReference + } + + // we must use imageapi's helper since we're calling Exact later on, which produces string + ref, err := imagereference.Parse(local) + if err != nil { + // fallback to the originating reference if the reported local repository spec is not valid + return latest.DockerImageReference + } + + // create a local pullthrough URL + ref.Tag = "" + ref.ID = latest.Image + return ref.Exact() + + // the default policy is to use the originating image + default: + return latest.DockerImageReference + } +} + +// DigestOrImageMatch matches the digest in the image name. +func DigestOrImageMatch(image, imageID string) bool { + if d, err := ParseDigest(image); err == nil { + return strings.HasPrefix(d.Hex(), imageID) || strings.HasPrefix(image, imageID) + } + return strings.HasPrefix(image, imageID) +} + +// ParseDockerImageReference parses a Docker pull spec string into a +// DockerImageReference. +func ParseDockerImageReference(spec string) (imagev1.DockerImageReference, error) { + ref, err := imagereference.Parse(spec) + if err != nil { + return imagev1.DockerImageReference{}, err + } + return imagev1.DockerImageReference{ + Registry: ref.Registry, + Namespace: ref.Namespace, + Name: ref.Name, + Tag: ref.Tag, + ID: ref.ID, + }, nil +} diff --git a/vendor/github.com/openshift/library-go/pkg/image/internal/digest/digest.go b/vendor/github.com/openshift/library-go/pkg/image/internal/digest/digest.go new file mode 100644 index 0000000000000..a740c2d9a0061 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/image/internal/digest/digest.go @@ -0,0 +1,138 @@ +package digest + +import ( + "fmt" + "hash" + "io" + "regexp" + "strings" +) + +const ( + // DigestSha256EmptyTar is the canonical sha256 digest of empty data + DigestSha256EmptyTar = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" +) + +// Digest allows simple protection of hex formatted digest strings, prefixed +// by their algorithm. Strings of type Digest have some guarantee of being in +// the correct format and it provides quick access to the components of a +// digest string. +// +// The following is an example of the contents of Digest types: +// +// sha256:7173b809ca12ec5dee4506cd86be934c4596dd234ee82c0662eac04a8c2c71dc +// +// This allows to abstract the digest behind this type and work only in those +// terms. +type Digest string + +// NewDigest returns a Digest from alg and a hash.Hash object. +func NewDigest(alg Algorithm, h hash.Hash) Digest { + return NewDigestFromBytes(alg, h.Sum(nil)) +} + +// NewDigestFromBytes returns a new digest from the byte contents of p. +// Typically, this can come from hash.Hash.Sum(...) or xxx.SumXXX(...) +// functions. This is also useful for rebuilding digests from binary +// serializations. +func NewDigestFromBytes(alg Algorithm, p []byte) Digest { + return Digest(fmt.Sprintf("%s:%x", alg, p)) +} + +// NewDigestFromHex returns a Digest from alg and a the hex encoded digest. +func NewDigestFromHex(alg, hex string) Digest { + return Digest(fmt.Sprintf("%s:%s", alg, hex)) +} + +// DigestRegexp matches valid digest types. +var DigestRegexp = regexp.MustCompile(`[a-zA-Z0-9-_+.]+:[a-fA-F0-9]+`) + +// DigestRegexpAnchored matches valid digest types, anchored to the start and end of the match. +var DigestRegexpAnchored = regexp.MustCompile(`^` + DigestRegexp.String() + `$`) + +var ( + // ErrDigestInvalidFormat returned when digest format invalid. + ErrDigestInvalidFormat = fmt.Errorf("invalid checksum digest format") + + // ErrDigestInvalidLength returned when digest has invalid length. + ErrDigestInvalidLength = fmt.Errorf("invalid checksum digest length") + + // ErrDigestUnsupported returned when the digest algorithm is unsupported. + ErrDigestUnsupported = fmt.Errorf("unsupported digest algorithm") +) + +// ParseDigest parses s and returns the validated digest object. An error will +// be returned if the format is invalid. +func ParseDigest(s string) (Digest, error) { + d := Digest(s) + + return d, d.Validate() +} + +// FromReader returns the most valid digest for the underlying content using +// the canonical digest algorithm. +func FromReader(rd io.Reader) (Digest, error) { + return Canonical.FromReader(rd) +} + +// FromBytes digests the input and returns a Digest. +func FromBytes(p []byte) Digest { + return Canonical.FromBytes(p) +} + +// Validate checks that the contents of d is a valid digest, returning an +// error if not. +func (d Digest) Validate() error { + s := string(d) + + if !DigestRegexpAnchored.MatchString(s) { + return ErrDigestInvalidFormat + } + + i := strings.Index(s, ":") + if i < 0 { + return ErrDigestInvalidFormat + } + + // case: "sha256:" with no hex. + if i+1 == len(s) { + return ErrDigestInvalidFormat + } + + switch algorithm := Algorithm(s[:i]); algorithm { + case SHA256, SHA384, SHA512: + if algorithm.Size()*2 != len(s[i+1:]) { + return ErrDigestInvalidLength + } + default: + return ErrDigestUnsupported + } + + return nil +} + +// Algorithm returns the algorithm portion of the digest. This will panic if +// the underlying digest is not in a valid format. +func (d Digest) Algorithm() Algorithm { + return Algorithm(d[:d.sepIndex()]) +} + +// Hex returns the hex digest portion of the digest. This will panic if the +// underlying digest is not in a valid format. +func (d Digest) Hex() string { + return string(d[d.sepIndex()+1:]) +} + +func (d Digest) String() string { + return string(d) +} + +func (d Digest) sepIndex() int { + i := strings.Index(string(d), ":") + + if i < 0 { + panic("could not find ':' in digest: " + d) + } + + return i +} diff --git a/vendor/github.com/openshift/library-go/pkg/image/internal/digest/digester.go b/vendor/github.com/openshift/library-go/pkg/image/internal/digest/digester.go new file mode 100644 index 0000000000000..f3105a45b6977 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/image/internal/digest/digester.go @@ -0,0 +1,155 @@ +package digest + +import ( + "crypto" + "fmt" + "hash" + "io" +) + +// Algorithm identifies and implementation of a digester by an identifier. +// Note the that this defines both the hash algorithm used and the string +// encoding. +type Algorithm string + +// supported digest types +const ( + SHA256 Algorithm = "sha256" // sha256 with hex encoding + SHA384 Algorithm = "sha384" // sha384 with hex encoding + SHA512 Algorithm = "sha512" // sha512 with hex encoding + + // Canonical is the primary digest algorithm used with the distribution + // project. Other digests may be used but this one is the primary storage + // digest. + Canonical = SHA256 +) + +var ( + // TODO(stevvooe): Follow the pattern of the standard crypto package for + // registration of digests. Effectively, we are a registerable set and + // common symbol access. + + // algorithms maps values to hash.Hash implementations. Other algorithms + // may be available but they cannot be calculated by the digest package. + algorithms = map[Algorithm]crypto.Hash{ + SHA256: crypto.SHA256, + SHA384: crypto.SHA384, + SHA512: crypto.SHA512, + } +) + +// Available returns true if the digest type is available for use. If this +// returns false, New and Hash will return nil. +func (a Algorithm) Available() bool { + h, ok := algorithms[a] + if !ok { + return false + } + + // check availability of the hash, as well + return h.Available() +} + +func (a Algorithm) String() string { + return string(a) +} + +// Size returns number of bytes returned by the hash. +func (a Algorithm) Size() int { + h, ok := algorithms[a] + if !ok { + return 0 + } + return h.Size() +} + +// Set implemented to allow use of Algorithm as a command line flag. +func (a *Algorithm) Set(value string) error { + if value == "" { + *a = Canonical + } else { + // just do a type conversion, support is queried with Available. + *a = Algorithm(value) + } + + return nil +} + +// New returns a new digester for the specified algorithm. If the algorithm +// does not have a digester implementation, nil will be returned. This can be +// checked by calling Available before calling New. +func (a Algorithm) New() Digester { + return &digester{ + alg: a, + hash: a.Hash(), + } +} + +// Hash returns a new hash as used by the algorithm. If not available, the +// method will panic. Check Algorithm.Available() before calling. +func (a Algorithm) Hash() hash.Hash { + if !a.Available() { + // NOTE(stevvooe): A missing hash is usually a programming error that + // must be resolved at compile time. We don't import in the digest + // package to allow users to choose their hash implementation (such as + // when using stevvooe/resumable or a hardware accelerated package). + // + // Applications that may want to resolve the hash at runtime should + // call Algorithm.Available before call Algorithm.Hash(). + panic(fmt.Sprintf("%v not available (make sure it is imported)", a)) + } + + return algorithms[a].New() +} + +// FromReader returns the digest of the reader using the algorithm. +func (a Algorithm) FromReader(rd io.Reader) (Digest, error) { + digester := a.New() + + if _, err := io.Copy(digester.Hash(), rd); err != nil { + return "", err + } + + return digester.Digest(), nil +} + +// FromBytes digests the input and returns a Digest. +func (a Algorithm) FromBytes(p []byte) Digest { + digester := a.New() + + if _, err := digester.Hash().Write(p); err != nil { + // Writes to a Hash should never fail. None of the existing + // hash implementations in the stdlib or hashes vendored + // here can return errors from Write. Having a panic in this + // condition instead of having FromBytes return an error value + // avoids unnecessary error handling paths in all callers. + panic("write to hash function returned error: " + err.Error()) + } + + return digester.Digest() +} + +// TODO(stevvooe): Allow resolution of verifiers using the digest type and +// this registration system. + +// Digester calculates the digest of written data. Writes should go directly +// to the return value of Hash, while calling Digest will return the current +// value of the digest. +type Digester interface { + Hash() hash.Hash // provides direct access to underlying hash instance. + Digest() Digest +} + +// digester provides a simple digester definition that embeds a hasher. +type digester struct { + alg Algorithm + hash hash.Hash +} + +func (d *digester) Hash() hash.Hash { + return d.hash +} + +func (d *digester) Digest() Digest { + return NewDigest(d.alg, d.hash) +} diff --git a/vendor/github.com/openshift/library-go/pkg/image/internal/digest/doc.go b/vendor/github.com/openshift/library-go/pkg/image/internal/digest/doc.go new file mode 100644 index 0000000000000..6e6e4347ea44d --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/image/internal/digest/doc.go @@ -0,0 +1,5 @@ +// digest is a copy from "github.com/docker/distribution/digest" that is kept because we want to avoid the godep, +// this package has no non-standard dependencies, and if it changes lots of other docker registry stuff breaks. +// Don't try this at home! +// Changes here require sign-off from openshift/api-reviewers and they will be rejected. +package digest diff --git a/vendor/github.com/openshift/library-go/pkg/image/internal/reference/doc.go b/vendor/github.com/openshift/library-go/pkg/image/internal/reference/doc.go new file mode 100644 index 0000000000000..22188ea98f7cc --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/image/internal/reference/doc.go @@ -0,0 +1,5 @@ +// reference is a copy from "github.com/docker/distribution/reference" that is kept because we want to avoid the godep, +// this package has no non-standard dependencies, and if it changes lots of other docker registry stuff breaks. +// Don't try this at home! +// Changes here require sign-off from openshift/api-reviewers and they will be rejected. +package reference diff --git a/vendor/github.com/openshift/library-go/pkg/image/internal/reference/reference.go b/vendor/github.com/openshift/library-go/pkg/image/internal/reference/reference.go new file mode 100644 index 0000000000000..eb498bc9d97f0 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/image/internal/reference/reference.go @@ -0,0 +1,370 @@ +// Package reference provides a general type to represent any way of referencing images within the registry. +// Its main purpose is to abstract tags and digests (content-addressable hash). +// +// Grammar +// +// reference := name [ ":" tag ] [ "@" digest ] +// name := [hostname '/'] component ['/' component]* +// hostname := hostcomponent ['.' hostcomponent]* [':' port-number] +// hostcomponent := /([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])/ +// port-number := /[0-9]+/ +// component := alpha-numeric [separator alpha-numeric]* +// alpha-numeric := /[a-z0-9]+/ +// separator := /[_.]|__|[-]*/ +// +// tag := /[\w][\w.-]{0,127}/ +// +// digest := digest-algorithm ":" digest-hex +// digest-algorithm := digest-algorithm-component [ digest-algorithm-separator digest-algorithm-component ] +// digest-algorithm-separator := /[+.-_]/ +// digest-algorithm-component := /[A-Za-z][A-Za-z0-9]*/ +// digest-hex := /[0-9a-fA-F]{32,}/ ; At least 128 bit digest value +package reference + +import ( + "errors" + "fmt" + "path" + "strings" + + "github.com/openshift/library-go/pkg/image/internal/digest" +) + +const ( + // NameTotalLengthMax is the maximum total number of characters in a repository name. + NameTotalLengthMax = 255 +) + +var ( + // ErrReferenceInvalidFormat represents an error while trying to parse a string as a reference. + ErrReferenceInvalidFormat = errors.New("invalid reference format") + + // ErrTagInvalidFormat represents an error while trying to parse a string as a tag. + ErrTagInvalidFormat = errors.New("invalid tag format") + + // ErrDigestInvalidFormat represents an error while trying to parse a string as a tag. + ErrDigestInvalidFormat = errors.New("invalid digest format") + + // ErrNameContainsUppercase is returned for invalid repository names that contain uppercase characters. + ErrNameContainsUppercase = errors.New("repository name must be lowercase") + + // ErrNameEmpty is returned for empty, invalid repository names. + ErrNameEmpty = errors.New("repository name must have at least one component") + + // ErrNameTooLong is returned when a repository name is longer than NameTotalLengthMax. + ErrNameTooLong = fmt.Errorf("repository name must not be more than %v characters", NameTotalLengthMax) +) + +// Reference is an opaque object reference identifier that may include +// modifiers such as a hostname, name, tag, and digest. +type Reference interface { + // String returns the full reference + String() string +} + +// Field provides a wrapper type for resolving correct reference types when +// working with encoding. +type Field struct { + reference Reference +} + +// AsField wraps a reference in a Field for encoding. +func AsField(reference Reference) Field { + return Field{reference} +} + +// Reference unwraps the reference type from the field to +// return the Reference object. This object should be +// of the appropriate type to further check for different +// reference types. +func (f Field) Reference() Reference { + return f.reference +} + +// MarshalText serializes the field to byte text which +// is the string of the reference. +func (f Field) MarshalText() (p []byte, err error) { + return []byte(f.reference.String()), nil +} + +// UnmarshalText parses text bytes by invoking the +// reference parser to ensure the appropriately +// typed reference object is wrapped by field. +func (f *Field) UnmarshalText(p []byte) error { + r, err := Parse(string(p)) + if err != nil { + return err + } + + f.reference = r + return nil +} + +// Named is an object with a full name +type Named interface { + Reference + Name() string +} + +// Tagged is an object which has a tag +type Tagged interface { + Reference + Tag() string +} + +// NamedTagged is an object including a name and tag. +type NamedTagged interface { + Named + Tag() string +} + +// Digested is an object which has a digest +// in which it can be referenced by +type Digested interface { + Reference + Digest() digest.Digest +} + +// Canonical reference is an object with a fully unique +// name including a name with hostname and digest +type Canonical interface { + Named + Digest() digest.Digest +} + +// SplitHostname splits a named reference into a +// hostname and name string. If no valid hostname is +// found, the hostname is empty and the full value +// is returned as name +func SplitHostname(named Named) (string, string) { + name := named.Name() + match := anchoredNameRegexp.FindStringSubmatch(name) + if len(match) != 3 { + return "", name + } + return match[1], match[2] +} + +// Parse parses s and returns a syntactically valid Reference. +// If an error was encountered it is returned, along with a nil Reference. +// NOTE: Parse will not handle short digests. +func Parse(s string) (Reference, error) { + matches := ReferenceRegexp.FindStringSubmatch(s) + if matches == nil { + if s == "" { + return nil, ErrNameEmpty + } + if ReferenceRegexp.FindStringSubmatch(strings.ToLower(s)) != nil { + return nil, ErrNameContainsUppercase + } + return nil, ErrReferenceInvalidFormat + } + + if len(matches[1]) > NameTotalLengthMax { + return nil, ErrNameTooLong + } + + ref := reference{ + name: matches[1], + tag: matches[2], + } + if matches[3] != "" { + var err error + ref.digest, err = digest.ParseDigest(matches[3]) + if err != nil { + return nil, err + } + } + + r := getBestReferenceType(ref) + if r == nil { + return nil, ErrNameEmpty + } + + return r, nil +} + +// ParseNamed parses s and returns a syntactically valid reference implementing +// the Named interface. The reference must have a name, otherwise an error is +// returned. +// If an error was encountered it is returned, along with a nil Reference. +// NOTE: ParseNamed will not handle short digests. +func ParseNamed(s string) (Named, error) { + ref, err := Parse(s) + if err != nil { + return nil, err + } + named, isNamed := ref.(Named) + if !isNamed { + return nil, fmt.Errorf("reference %s has no name", ref.String()) + } + return named, nil +} + +// WithName returns a named object representing the given string. If the input +// is invalid ErrReferenceInvalidFormat will be returned. +func WithName(name string) (Named, error) { + if len(name) > NameTotalLengthMax { + return nil, ErrNameTooLong + } + if !anchoredNameRegexp.MatchString(name) { + return nil, ErrReferenceInvalidFormat + } + return repository(name), nil +} + +// WithTag combines the name from "name" and the tag from "tag" to form a +// reference incorporating both the name and the tag. +func WithTag(name Named, tag string) (NamedTagged, error) { + if !anchoredTagRegexp.MatchString(tag) { + return nil, ErrTagInvalidFormat + } + if canonical, ok := name.(Canonical); ok { + return reference{ + name: name.Name(), + tag: tag, + digest: canonical.Digest(), + }, nil + } + return taggedReference{ + name: name.Name(), + tag: tag, + }, nil +} + +// WithDigest combines the name from "name" and the digest from "digest" to form +// a reference incorporating both the name and the digest. +func WithDigest(name Named, digest digest.Digest) (Canonical, error) { + if !anchoredDigestRegexp.MatchString(digest.String()) { + return nil, ErrDigestInvalidFormat + } + if tagged, ok := name.(Tagged); ok { + return reference{ + name: name.Name(), + tag: tagged.Tag(), + digest: digest, + }, nil + } + return canonicalReference{ + name: name.Name(), + digest: digest, + }, nil +} + +// Match reports whether ref matches the specified pattern. +// See https://godoc.org/path#Match for supported patterns. +func Match(pattern string, ref Reference) (bool, error) { + matched, err := path.Match(pattern, ref.String()) + if namedRef, isNamed := ref.(Named); isNamed && !matched { + matched, _ = path.Match(pattern, namedRef.Name()) + } + return matched, err +} + +// TrimNamed removes any tag or digest from the named reference. +func TrimNamed(ref Named) Named { + return repository(ref.Name()) +} + +func getBestReferenceType(ref reference) Reference { + if ref.name == "" { + // Allow digest only references + if ref.digest != "" { + return digestReference(ref.digest) + } + return nil + } + if ref.tag == "" { + if ref.digest != "" { + return canonicalReference{ + name: ref.name, + digest: ref.digest, + } + } + return repository(ref.name) + } + if ref.digest == "" { + return taggedReference{ + name: ref.name, + tag: ref.tag, + } + } + + return ref +} + +type reference struct { + name string + tag string + digest digest.Digest +} + +func (r reference) String() string { + return r.name + ":" + r.tag + "@" + r.digest.String() +} + +func (r reference) Name() string { + return r.name +} + +func (r reference) Tag() string { + return r.tag +} + +func (r reference) Digest() digest.Digest { + return r.digest +} + +type repository string + +func (r repository) String() string { + return string(r) +} + +func (r repository) Name() string { + return string(r) +} + +type digestReference digest.Digest + +func (d digestReference) String() string { + return string(d) +} + +func (d digestReference) Digest() digest.Digest { + return digest.Digest(d) +} + +type taggedReference struct { + name string + tag string +} + +func (t taggedReference) String() string { + return t.name + ":" + t.tag +} + +func (t taggedReference) Name() string { + return t.name +} + +func (t taggedReference) Tag() string { + return t.tag +} + +type canonicalReference struct { + name string + digest digest.Digest +} + +func (c canonicalReference) String() string { + return c.name + "@" + c.digest.String() +} + +func (c canonicalReference) Name() string { + return c.name +} + +func (c canonicalReference) Digest() digest.Digest { + return c.digest +} diff --git a/vendor/github.com/openshift/library-go/pkg/image/internal/reference/regexp.go b/vendor/github.com/openshift/library-go/pkg/image/internal/reference/regexp.go new file mode 100644 index 0000000000000..9a7d366bc8a8c --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/image/internal/reference/regexp.go @@ -0,0 +1,124 @@ +package reference + +import "regexp" + +var ( + // alphaNumericRegexp defines the alpha numeric atom, typically a + // component of names. This only allows lower case characters and digits. + alphaNumericRegexp = match(`[a-z0-9]+`) + + // separatorRegexp defines the separators allowed to be embedded in name + // components. This allow one period, one or two underscore and multiple + // dashes. + separatorRegexp = match(`(?:[._]|__|[-]*)`) + + // nameComponentRegexp restricts registry path component names to start + // with at least one letter or number, with following parts able to be + // separated by one period, one or two underscore and multiple dashes. + nameComponentRegexp = expression( + alphaNumericRegexp, + optional(repeated(separatorRegexp, alphaNumericRegexp))) + + // hostnameComponentRegexp restricts the registry hostname component of a + // repository name to start with a component as defined by hostnameRegexp + // and followed by an optional port. + hostnameComponentRegexp = match(`(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])`) + + // hostnameRegexp defines the structure of potential hostname components + // that may be part of image names. This is purposely a subset of what is + // allowed by DNS to ensure backwards compatibility with Docker image + // names. + hostnameRegexp = expression( + hostnameComponentRegexp, + optional(repeated(literal(`.`), hostnameComponentRegexp)), + optional(literal(`:`), match(`[0-9]+`))) + + // TagRegexp matches valid tag names. From docker/docker:graph/tags.go. + TagRegexp = match(`[\w][\w.-]{0,127}`) + + // anchoredTagRegexp matches valid tag names, anchored at the start and + // end of the matched string. + anchoredTagRegexp = anchored(TagRegexp) + + // DigestRegexp matches valid digests. + DigestRegexp = match(`[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][[:xdigit:]]{32,}`) + + // anchoredDigestRegexp matches valid digests, anchored at the start and + // end of the matched string. + anchoredDigestRegexp = anchored(DigestRegexp) + + // NameRegexp is the format for the name component of references. The + // regexp has capturing groups for the hostname and name part omitting + // the separating forward slash from either. + NameRegexp = expression( + optional(hostnameRegexp, literal(`/`)), + nameComponentRegexp, + optional(repeated(literal(`/`), nameComponentRegexp))) + + // anchoredNameRegexp is used to parse a name value, capturing the + // hostname and trailing components. + anchoredNameRegexp = anchored( + optional(capture(hostnameRegexp), literal(`/`)), + capture(nameComponentRegexp, + optional(repeated(literal(`/`), nameComponentRegexp)))) + + // ReferenceRegexp is the full supported format of a reference. The regexp + // is anchored and has capturing groups for name, tag, and digest + // components. + ReferenceRegexp = anchored(capture(NameRegexp), + optional(literal(":"), capture(TagRegexp)), + optional(literal("@"), capture(DigestRegexp))) +) + +// match compiles the string to a regular expression. +var match = regexp.MustCompile + +// literal compiles s into a literal regular expression, escaping any regexp +// reserved characters. +func literal(s string) *regexp.Regexp { + re := match(regexp.QuoteMeta(s)) + + if _, complete := re.LiteralPrefix(); !complete { + panic("must be a literal") + } + + return re +} + +// expression defines a full expression, where each regular expression must +// follow the previous. +func expression(res ...*regexp.Regexp) *regexp.Regexp { + var s string + for _, re := range res { + s += re.String() + } + + return match(s) +} + +// optional wraps the expression in a non-capturing group and makes the +// production optional. +func optional(res ...*regexp.Regexp) *regexp.Regexp { + return match(group(expression(res...)).String() + `?`) +} + +// repeated wraps the regexp in a non-capturing group to get one or more +// matches. +func repeated(res ...*regexp.Regexp) *regexp.Regexp { + return match(group(expression(res...)).String() + `+`) +} + +// group wraps the regexp in a non-capturing group. +func group(res ...*regexp.Regexp) *regexp.Regexp { + return match(`(?:` + expression(res...).String() + `)`) +} + +// capture wraps the expression in a capturing group. +func capture(res ...*regexp.Regexp) *regexp.Regexp { + return match(`(` + expression(res...).String() + `)`) +} + +// anchored anchors the regular expression by adding start and end delimiters. +func anchored(res ...*regexp.Regexp) *regexp.Regexp { + return match(`^` + expression(res...).String() + `$`) +} diff --git a/vendor/github.com/openshift/library-go/pkg/image/reference/reference.go b/vendor/github.com/openshift/library-go/pkg/image/reference/reference.go new file mode 100644 index 0000000000000..d2aaac6111d0a --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/image/reference/reference.go @@ -0,0 +1,257 @@ +package reference + +import ( + "net" + "net/url" + "strings" + + "github.com/openshift/library-go/pkg/image/internal/digest" + "github.com/openshift/library-go/pkg/image/internal/reference" +) + +// DockerImageReference points to a Docker image. +type DockerImageReference struct { + Registry string + Namespace string + Name string + Tag string + ID string +} + +const ( + // DockerDefaultRegistry is the value for the registry when none was provided. + DockerDefaultRegistry = "docker.io" + // DockerDefaultV1Registry is the host name of the default v1 registry + DockerDefaultV1Registry = "index." + DockerDefaultRegistry + // DockerDefaultV2Registry is the host name of the default v2 registry + DockerDefaultV2Registry = "registry-1." + DockerDefaultRegistry +) + +// Parse parses a Docker pull spec string into a +// DockerImageReference. +func Parse(spec string) (DockerImageReference, error) { + var ref DockerImageReference + + namedRef, err := reference.ParseNamed(spec) + if err != nil { + return ref, err + } + + name := namedRef.Name() + i := strings.IndexRune(name, '/') + + // if there are no path components, and it looks like a url (contains a .) or localhost, it's a registry + isRegistryOnly := i == -1 && (strings.ContainsAny(spec, ".") || strings.HasPrefix(spec, "localhost")) + + // if there are no path components, and it's not a registry, it's a name + isNameOnly := i == -1 && !isRegistryOnly + + // if there are path components, and the first component doesn't look like a url, it's a name + isNameOnly = isNameOnly || (i > -1 && (!strings.ContainsAny(name[:i], ":.") && name[:i] != "localhost")) + + if isRegistryOnly { + ref.Registry = namedRef.String() + } else if isNameOnly { + ref.Name = name + } else { + ref.Registry, ref.Name = name[:i], name[i+1:] + } + + if named, ok := namedRef.(reference.NamedTagged); !isRegistryOnly && ok { + ref.Tag = named.Tag() + } + + if named, ok := namedRef.(reference.Canonical); ok { + ref.ID = named.Digest().String() + } + + // It's not enough just to use the reference.ParseNamed(). We have to fill + // ref.Namespace from ref.Name + if i := strings.IndexRune(ref.Name, '/'); i != -1 { + ref.Namespace, ref.Name = ref.Name[:i], ref.Name[i+1:] + } + + return ref, nil +} + +// Equal returns true if the other DockerImageReference is equivalent to the +// reference r. The comparison applies defaults to the Docker image reference, +// so that e.g., "foobar" equals "docker.io/library/foobar:latest". +func (r DockerImageReference) Equal(other DockerImageReference) bool { + defaultedRef := r.DockerClientDefaults() + otherDefaultedRef := other.DockerClientDefaults() + return defaultedRef == otherDefaultedRef +} + +// DockerClientDefaults sets the default values used by the Docker client. +func (r DockerImageReference) DockerClientDefaults() DockerImageReference { + if len(r.Registry) == 0 { + r.Registry = DockerDefaultRegistry + } + if len(r.Namespace) == 0 && IsRegistryDockerHub(r.Registry) { + r.Namespace = "library" + } + if len(r.Tag) == 0 { + r.Tag = "latest" + } + return r +} + +// Minimal reduces a DockerImageReference to its minimalist form. +func (r DockerImageReference) Minimal() DockerImageReference { + if r.Tag == "latest" { + r.Tag = "" + } + return r +} + +// AsRepository returns the reference without tags or IDs. +func (r DockerImageReference) AsRepository() DockerImageReference { + r.Tag = "" + r.ID = "" + return r +} + +// RepositoryName returns the registry relative name +func (r DockerImageReference) RepositoryName() string { + r.Tag = "" + r.ID = "" + r.Registry = "" + return r.Exact() +} + +// RegistryHostPort returns the registry hostname and the port. +// If the port is not specified in the registry hostname we default to 443. +// This will also default to Docker client defaults if the registry hostname is empty. +func (r DockerImageReference) RegistryHostPort(insecure bool) (string, string) { + registryHost := r.AsV2().DockerClientDefaults().Registry + if strings.Contains(registryHost, ":") { + hostname, port, _ := net.SplitHostPort(registryHost) + return hostname, port + } + if insecure { + return registryHost, "80" + } + return registryHost, "443" +} + +// RepositoryName returns the registry relative name +func (r DockerImageReference) RegistryURL() *url.URL { + return &url.URL{ + Scheme: "https", + Host: r.AsV2().Registry, + } +} + +// DaemonMinimal clears defaults that Docker assumes. +func (r DockerImageReference) DaemonMinimal() DockerImageReference { + switch r.Registry { + case DockerDefaultV1Registry, DockerDefaultV2Registry: + r.Registry = DockerDefaultRegistry + } + if IsRegistryDockerHub(r.Registry) && r.Namespace == "library" { + r.Namespace = "" + } + return r.Minimal() +} + +func (r DockerImageReference) AsV2() DockerImageReference { + switch r.Registry { + case DockerDefaultV1Registry, DockerDefaultRegistry: + r.Registry = DockerDefaultV2Registry + } + return r +} + +// MostSpecific returns the most specific image reference that can be constructed from the +// current ref, preferring an ID over a Tag. Allows client code dealing with both tags and IDs +// to get the most specific reference easily. +func (r DockerImageReference) MostSpecific() DockerImageReference { + if len(r.ID) == 0 { + return r + } + if _, err := digest.ParseDigest(r.ID); err == nil { + r.Tag = "" + return r + } + if len(r.Tag) == 0 { + r.Tag, r.ID = r.ID, "" + return r + } + return r +} + +// NameString returns the name of the reference with its tag or ID. +func (r DockerImageReference) NameString() string { + switch { + case len(r.Name) == 0: + return "" + case len(r.ID) > 0: + var ref string + if _, err := digest.ParseDigest(r.ID); err == nil { + // if it parses as a digest, its v2 pull by id + ref = "@" + r.ID + } else { + // if it doesn't parse as a digest, it's presumably a v1 registry by-id tag + ref = ":" + r.ID + } + return r.Name + ref + case len(r.Tag) > 0: + return r.Name + ":" + r.Tag + default: + return r.Name + } +} + +// Exact returns a string representation of the set fields on the DockerImageReference +func (r DockerImageReference) Exact() string { + name := r.NameString() + if len(name) == 0 { + return name + } + s := r.Registry + if len(s) > 0 { + s += "/" + } + + if len(r.Namespace) != 0 { + s += r.Namespace + "/" + } + return s + name +} + +// String converts a DockerImageReference to a Docker pull spec (which implies a default namespace +// according to V1 Docker registry rules). Use Exact() if you want no defaulting. +func (r DockerImageReference) String() string { + if len(r.Namespace) == 0 && IsRegistryDockerHub(r.Registry) { + r.Namespace = "library" + } + return r.Exact() +} + +// IsRegistryDockerHub returns true if the given registry name belongs to +// Docker hub. +func IsRegistryDockerHub(registry string) bool { + switch registry { + case DockerDefaultRegistry, DockerDefaultV1Registry, DockerDefaultV2Registry: + return true + default: + return false + } +} + +// DeepCopyInto writing into out. in must be non-nil. +func (in *DockerImageReference) DeepCopyInto(out *DockerImageReference) { + *out = *in + return +} + +// DeepCopy copies the receiver, creating a new DockerImageReference. +func (in *DockerImageReference) DeepCopy() *DockerImageReference { + if in == nil { + return nil + } + out := new(DockerImageReference) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/library-go/pkg/oauth/oauthdiscovery/discovery.go b/vendor/github.com/openshift/library-go/pkg/oauth/oauthdiscovery/discovery.go new file mode 100644 index 0000000000000..713a404208f73 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/oauth/oauthdiscovery/discovery.go @@ -0,0 +1,32 @@ +package oauthdiscovery + +// OauthAuthorizationServerMetadata holds OAuth 2.0 Authorization Server Metadata used for discovery +// https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2 +type OauthAuthorizationServerMetadata struct { + // The authorization server's issuer identifier, which is a URL that uses the https scheme and has no query or fragment components. + // This is the location where .well-known RFC 5785 [RFC5785] resources containing information about the authorization server are published. + Issuer string `json:"issuer"` + + // URL of the authorization server's authorization endpoint [RFC6749]. + AuthorizationEndpoint string `json:"authorization_endpoint"` + + // URL of the authorization server's token endpoint [RFC6749]. + TokenEndpoint string `json:"token_endpoint"` + + // JSON array containing a list of the OAuth 2.0 [RFC6749] scope values that this authorization server supports. + // Servers MAY choose not to advertise some supported scope values even when this parameter is used. + ScopesSupported []string `json:"scopes_supported"` + + // JSON array containing a list of the OAuth 2.0 response_type values that this authorization server supports. + // The array values used are the same as those used with the response_types parameter defined by "OAuth 2.0 Dynamic Client Registration Protocol" [RFC7591]. + ResponseTypesSupported []string `json:"response_types_supported"` + + // JSON array containing a list of the OAuth 2.0 grant type values that this authorization server supports. + // The array values used are the same as those used with the grant_types parameter defined by "OAuth 2.0 Dynamic Client Registration Protocol" [RFC7591]. + GrantTypesSupported []string `json:"grant_types_supported"` + + // JSON array containing a list of PKCE [RFC7636] code challenge methods supported by this authorization server. + // Code challenge method values are used in the "code_challenge_method" parameter defined in Section 4.3 of [RFC7636]. + // The valid code challenge method values are those registered in the IANA "PKCE Code Challenge Methods" registry [IANA.OAuth.Parameters]. + CodeChallengeMethodsSupported []string `json:"code_challenge_methods_supported"` +} diff --git a/vendor/github.com/openshift/library-go/pkg/oauth/oauthdiscovery/urls.go b/vendor/github.com/openshift/library-go/pkg/oauth/oauthdiscovery/urls.go new file mode 100644 index 0000000000000..2539d4a391679 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/oauth/oauthdiscovery/urls.go @@ -0,0 +1,37 @@ +package oauthdiscovery + +import ( + "path" + "strings" +) + +const ( + AuthorizePath = "/authorize" + TokenPath = "/token" + InfoPath = "/info" + + RequestTokenEndpoint = "/token/request" + DisplayTokenEndpoint = "/token/display" + ImplicitTokenEndpoint = "/token/implicit" +) + +const OpenShiftOAuthAPIPrefix = "/oauth" + +func OpenShiftOAuthAuthorizeURL(masterAddr string) string { + return openShiftOAuthURL(masterAddr, AuthorizePath) +} +func OpenShiftOAuthTokenURL(masterAddr string) string { + return openShiftOAuthURL(masterAddr, TokenPath) +} +func OpenShiftOAuthTokenRequestURL(masterAddr string) string { + return openShiftOAuthURL(masterAddr, RequestTokenEndpoint) +} +func OpenShiftOAuthTokenDisplayURL(masterAddr string) string { + return openShiftOAuthURL(masterAddr, DisplayTokenEndpoint) +} +func OpenShiftOAuthTokenImplicitURL(masterAddr string) string { + return openShiftOAuthURL(masterAddr, ImplicitTokenEndpoint) +} +func openShiftOAuthURL(masterAddr, oauthEndpoint string) string { + return strings.TrimRight(masterAddr, "/") + path.Join(OpenShiftOAuthAPIPrefix, oauthEndpoint) +} diff --git a/vendor/github.com/openshift/library-go/pkg/quota/clusterquotamapping/clusterquotamapping.go b/vendor/github.com/openshift/library-go/pkg/quota/clusterquotamapping/clusterquotamapping.go new file mode 100644 index 0000000000000..fc88dc807504f --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/quota/clusterquotamapping/clusterquotamapping.go @@ -0,0 +1,409 @@ +package clusterquotamapping + +import ( + "fmt" + "time" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + kapierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apimachinery/pkg/util/wait" + corev1informers "k8s.io/client-go/informers/core/v1" + corev1listers "k8s.io/client-go/listers/core/v1" + "k8s.io/client-go/tools/cache" + "k8s.io/client-go/util/workqueue" + "k8s.io/klog/v2" + + quotav1 "github.com/openshift/api/quota/v1" + quotainformer "github.com/openshift/client-go/quota/informers/externalversions/quota/v1" + quotalister "github.com/openshift/client-go/quota/listers/quota/v1" +) + +// Look out, here there be dragons! +// There is a race when dealing with the DeltaFifo compression used to back a reflector for a controller that uses two +// SharedInformers for both their watch events AND their caches. The scenario looks like this +// +// 1. Add, Delete a namespace really fast, *before* the add is observed by the controller using the reflector. +// 2. Add or Update a quota that matches the Add namespace +// 3. The cache had the intermediate state for the namespace for some period of time. This makes the quota update the mapping indicating a match. +// 4. The ns Delete is compressed out and never delivered to the controller, so the improper match is never cleared. +// +// This sounds pretty bad, however, we fail in the "safe" direction and the consequences are detectable. +// When going from quota to namespace, you can get back a namespace that doesn't exist. There are no resource in a non-existence +// namespace, so you know to clear all referenced resources. In addition, this add/delete has to happen so fast +// that it would be nearly impossible for any resources to be created. If you do create resources, then we must be observing +// their deletes. When quota is replenished, we'll see that we need to clear any charges. +// +// When going from namespace to quota, you can get back a quota that doesn't exist. Since the cache is shared, +// we know that a missing quota means that there isn't anything for us to bill against, so we can skip it. +// +// If the mapping cache is wrong and a previously deleted quota or namespace is created, this controller +// correctly adds the items back to the list and clears out all previous mappings. +// +// In addition to those constraints, the timing threshold for actually hitting this problem is really tight. It's +// basically a script that is creating and deleting things as fast as it possibly can. Sub-millisecond in the fuzz +// test where I caught the problem. + +// NewClusterQuotaMappingController builds a mapping between namespaces and clusterresourcequotas +func NewClusterQuotaMappingController(namespaceInformer corev1informers.NamespaceInformer, quotaInformer quotainformer.ClusterResourceQuotaInformer) *ClusterQuotaMappingController { + c := newClusterQuotaMappingController(namespaceInformer.Informer(), quotaInformer) + c.namespaceLister = v1NamespaceLister{lister: namespaceInformer.Lister()} + return c +} + +type namespaceLister interface { + Each(label labels.Selector, fn func(metav1.Object) bool) error + Get(name string) (metav1.Object, error) +} + +type v1NamespaceLister struct { + lister corev1listers.NamespaceLister +} + +func (l v1NamespaceLister) Each(label labels.Selector, fn func(metav1.Object) bool) error { + results, err := l.lister.List(label) + if err != nil { + return err + } + for i := range results { + if !fn(results[i]) { + return nil + } + } + return nil +} +func (l v1NamespaceLister) Get(name string) (metav1.Object, error) { + return l.lister.Get(name) +} + +func newClusterQuotaMappingController(namespaceInformer cache.SharedIndexInformer, quotaInformer quotainformer.ClusterResourceQuotaInformer) *ClusterQuotaMappingController { + c := &ClusterQuotaMappingController{ + namespaceQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "controller_clusterquotamappingcontroller_namespaces"), + quotaQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "controller_clusterquotamappingcontroller_clusterquotas"), + clusterQuotaMapper: NewClusterQuotaMapper(), + } + namespaceInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{ + AddFunc: c.addNamespace, + UpdateFunc: c.updateNamespace, + DeleteFunc: c.deleteNamespace, + }) + c.namespacesSynced = namespaceInformer.HasSynced + + quotaInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ + AddFunc: c.addQuota, + UpdateFunc: c.updateQuota, + DeleteFunc: c.deleteQuota, + }) + c.quotaLister = quotaInformer.Lister() + c.quotasSynced = quotaInformer.Informer().HasSynced + + return c +} + +type ClusterQuotaMappingController struct { + namespaceQueue workqueue.RateLimitingInterface + namespaceLister namespaceLister + namespacesSynced func() bool + + quotaQueue workqueue.RateLimitingInterface + quotaLister quotalister.ClusterResourceQuotaLister + quotasSynced func() bool + + clusterQuotaMapper *clusterQuotaMapper +} + +func (c *ClusterQuotaMappingController) GetClusterQuotaMapper() ClusterQuotaMapper { + return c.clusterQuotaMapper +} + +func (c *ClusterQuotaMappingController) Run(workers int, stopCh <-chan struct{}) { + defer utilruntime.HandleCrash() + defer c.namespaceQueue.ShutDown() + defer c.quotaQueue.ShutDown() + + klog.Infof("Starting ClusterQuotaMappingController controller") + defer klog.Infof("Shutting down ClusterQuotaMappingController controller") + + if !cache.WaitForCacheSync(stopCh, c.namespacesSynced, c.quotasSynced) { + utilruntime.HandleError(fmt.Errorf("timed out waiting for caches to sync")) + return + } + + klog.V(4).Infof("Starting workers for quota mapping controller workers") + for i := 0; i < workers; i++ { + go wait.Until(c.namespaceWorker, time.Second, stopCh) + go wait.Until(c.quotaWorker, time.Second, stopCh) + } + + <-stopCh +} + +func (c *ClusterQuotaMappingController) syncQuota(quota *quotav1.ClusterResourceQuota) error { + matcherFunc, err := GetObjectMatcher(quota.Spec.Selector) + if err != nil { + return err + } + + if err := c.namespaceLister.Each(labels.Everything(), func(obj metav1.Object) bool { + // attempt to set the mapping. The quotas never collide with each other (same quota is never processed twice in parallel) + // so this means that the project we have is out of date, pull a more recent copy from the cache and retest + for { + matches, err := matcherFunc(obj) + if err != nil { + utilruntime.HandleError(err) + break + } + success, quotaMatches, _ := c.clusterQuotaMapper.setMapping(quota, obj, !matches) + if success { + break + } + + // if the quota is mismatched, then someone has updated the quota or has deleted the entry entirely. + // if we've been updated, we'll be rekicked, if we've been deleted we should stop. Either way, this + // execution is finished + if !quotaMatches { + return false + } + newer, err := c.namespaceLister.Get(obj.GetName()) + if kapierrors.IsNotFound(err) { + // if the namespace is gone, then the deleteNamespace path will be called, just continue + break + } + if err != nil { + utilruntime.HandleError(err) + break + } + obj = newer + } + return true + }); err != nil { + return err + } + + c.clusterQuotaMapper.completeQuota(quota) + return nil +} + +func (c *ClusterQuotaMappingController) syncNamespace(namespace metav1.Object) error { + allQuotas, err1 := c.quotaLister.List(labels.Everything()) + if err1 != nil { + return err1 + } + for i := range allQuotas { + quota := allQuotas[i] + + for { + matcherFunc, err := GetObjectMatcher(quota.Spec.Selector) + if err != nil { + utilruntime.HandleError(err) + break + } + + // attempt to set the mapping. The namespaces never collide with each other (same namespace is never processed twice in parallel) + // so this means that the quota we have is out of date, pull a more recent copy from the cache and retest + matches, err := matcherFunc(namespace) + if err != nil { + utilruntime.HandleError(err) + break + } + success, _, namespaceMatches := c.clusterQuotaMapper.setMapping(quota, namespace, !matches) + if success { + break + } + + // if the namespace is mismatched, then someone has updated the namespace or has deleted the entry entirely. + // if we've been updated, we'll be rekicked, if we've been deleted we should stop. Either way, this + // execution is finished + if !namespaceMatches { + return nil + } + + quota, err = c.quotaLister.Get(quota.Name) + if kapierrors.IsNotFound(err) { + // if the quota is gone, then the deleteQuota path will be called, just continue + break + } + if err != nil { + utilruntime.HandleError(err) + break + } + } + } + + c.clusterQuotaMapper.completeNamespace(namespace) + return nil +} + +func (c *ClusterQuotaMappingController) quotaWork() bool { + key, quit := c.quotaQueue.Get() + if quit { + return true + } + defer c.quotaQueue.Done(key) + + quota, err := c.quotaLister.Get(key.(string)) + if err != nil { + if errors.IsNotFound(err) { + c.quotaQueue.Forget(key) + return false + } + utilruntime.HandleError(err) + return false + } + + err = c.syncQuota(quota) + outOfRetries := c.quotaQueue.NumRequeues(key) > 5 + switch { + case err != nil && outOfRetries: + utilruntime.HandleError(err) + c.quotaQueue.Forget(key) + + case err != nil && !outOfRetries: + c.quotaQueue.AddRateLimited(key) + + default: + c.quotaQueue.Forget(key) + } + + return false +} + +func (c *ClusterQuotaMappingController) quotaWorker() { + for { + if quit := c.quotaWork(); quit { + return + } + } +} + +func (c *ClusterQuotaMappingController) namespaceWork() bool { + key, quit := c.namespaceQueue.Get() + if quit { + return true + } + defer c.namespaceQueue.Done(key) + + namespace, err := c.namespaceLister.Get(key.(string)) + if kapierrors.IsNotFound(err) { + c.namespaceQueue.Forget(key) + return false + } + if err != nil { + utilruntime.HandleError(err) + return false + } + + err = c.syncNamespace(namespace) + outOfRetries := c.namespaceQueue.NumRequeues(key) > 5 + switch { + case err != nil && outOfRetries: + utilruntime.HandleError(err) + c.namespaceQueue.Forget(key) + + case err != nil && !outOfRetries: + c.namespaceQueue.AddRateLimited(key) + + default: + c.namespaceQueue.Forget(key) + } + + return false +} + +func (c *ClusterQuotaMappingController) namespaceWorker() { + for { + if quit := c.namespaceWork(); quit { + return + } + } +} + +func (c *ClusterQuotaMappingController) deleteNamespace(obj interface{}) { + var name string + switch ns := obj.(type) { + case cache.DeletedFinalStateUnknown: + switch nested := ns.Obj.(type) { + case *corev1.Namespace: + name = nested.Name + default: + utilruntime.HandleError(fmt.Errorf("tombstone contained object that is not a Namespace %T", ns.Obj)) + return + } + case *corev1.Namespace: + name = ns.Name + default: + utilruntime.HandleError(fmt.Errorf("not a Namespace %v", obj)) + return + } + c.clusterQuotaMapper.removeNamespace(name) +} + +func (c *ClusterQuotaMappingController) addNamespace(cur interface{}) { + c.enqueueNamespace(cur) +} +func (c *ClusterQuotaMappingController) updateNamespace(old, cur interface{}) { + c.enqueueNamespace(cur) +} +func (c *ClusterQuotaMappingController) enqueueNamespace(obj interface{}) { + switch ns := obj.(type) { + case *corev1.Namespace: + if !c.clusterQuotaMapper.requireNamespace(ns) { + return + } + default: + utilruntime.HandleError(fmt.Errorf("not a Namespace %v", obj)) + return + } + + key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj) + if err != nil { + utilruntime.HandleError(err) + return + } + c.namespaceQueue.Add(key) +} + +func (c *ClusterQuotaMappingController) deleteQuota(obj interface{}) { + quota, ok1 := obj.(*quotav1.ClusterResourceQuota) + if !ok1 { + tombstone, ok := obj.(cache.DeletedFinalStateUnknown) + if !ok { + utilruntime.HandleError(fmt.Errorf("couldn't get object from tombstone %v", obj)) + return + } + quota, ok = tombstone.Obj.(*quotav1.ClusterResourceQuota) + if !ok { + utilruntime.HandleError(fmt.Errorf("tombstone contained object that is not a Quota %v", obj)) + return + } + } + + c.clusterQuotaMapper.removeQuota(quota.Name) +} + +func (c *ClusterQuotaMappingController) addQuota(cur interface{}) { + c.enqueueQuota(cur) +} +func (c *ClusterQuotaMappingController) updateQuota(old, cur interface{}) { + c.enqueueQuota(cur) +} +func (c *ClusterQuotaMappingController) enqueueQuota(obj interface{}) { + quota, ok := obj.(*quotav1.ClusterResourceQuota) + if !ok { + utilruntime.HandleError(fmt.Errorf("not a Quota %v", obj)) + return + } + if !c.clusterQuotaMapper.requireQuota(quota) { + return + } + + key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(quota) + if err != nil { + utilruntime.HandleError(err) + return + } + c.quotaQueue.Add(key) +} diff --git a/vendor/github.com/openshift/library-go/pkg/quota/clusterquotamapping/helpers.go b/vendor/github.com/openshift/library-go/pkg/quota/clusterquotamapping/helpers.go new file mode 100644 index 0000000000000..0c2c2ae7a5c3c --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/quota/clusterquotamapping/helpers.go @@ -0,0 +1,139 @@ +package clusterquotamapping + +import ( + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/runtime" + + quotav1 "github.com/openshift/api/quota/v1" +) + +func GetResourceQuotasStatusByNamespace(namespaceStatuses quotav1.ResourceQuotasStatusByNamespace, namespace string) (corev1.ResourceQuotaStatus, bool) { + for i := range namespaceStatuses { + curr := namespaceStatuses[i] + if curr.Namespace == namespace { + return curr.Status, true + } + } + return corev1.ResourceQuotaStatus{}, false +} + +func RemoveResourceQuotasStatusByNamespace(namespaceStatuses *quotav1.ResourceQuotasStatusByNamespace, namespace string) { + newNamespaceStatuses := quotav1.ResourceQuotasStatusByNamespace{} + for i := range *namespaceStatuses { + curr := (*namespaceStatuses)[i] + if curr.Namespace == namespace { + continue + } + newNamespaceStatuses = append(newNamespaceStatuses, curr) + } + *namespaceStatuses = newNamespaceStatuses +} + +func InsertResourceQuotasStatus(namespaceStatuses *quotav1.ResourceQuotasStatusByNamespace, newStatus quotav1.ResourceQuotaStatusByNamespace) { + newNamespaceStatuses := quotav1.ResourceQuotasStatusByNamespace{} + found := false + for i := range *namespaceStatuses { + curr := (*namespaceStatuses)[i] + if curr.Namespace == newStatus.Namespace { + // do this so that we don't change serialization order + newNamespaceStatuses = append(newNamespaceStatuses, newStatus) + found = true + continue + } + newNamespaceStatuses = append(newNamespaceStatuses, curr) + } + if !found { + newNamespaceStatuses = append(newNamespaceStatuses, newStatus) + } + *namespaceStatuses = newNamespaceStatuses +} + +var accessor = meta.NewAccessor() + +func GetMatcher(selector quotav1.ClusterResourceQuotaSelector) (func(obj runtime.Object) (bool, error), error) { + var labelSelector labels.Selector + if selector.LabelSelector != nil { + var err error + labelSelector, err = metav1.LabelSelectorAsSelector(selector.LabelSelector) + if err != nil { + return nil, err + } + } + + var annotationSelector map[string]string + if len(selector.AnnotationSelector) > 0 { + // ensure our matcher has a stable copy of the map + annotationSelector = make(map[string]string, len(selector.AnnotationSelector)) + for k, v := range selector.AnnotationSelector { + annotationSelector[k] = v + } + } + + return func(obj runtime.Object) (bool, error) { + if labelSelector != nil { + objLabels, err := accessor.Labels(obj) + if err != nil { + return false, err + } + if !labelSelector.Matches(labels.Set(objLabels)) { + return false, nil + } + } + + if annotationSelector != nil { + objAnnotations, err := accessor.Annotations(obj) + if err != nil { + return false, err + } + for k, v := range annotationSelector { + if objValue, exists := objAnnotations[k]; !exists || objValue != v { + return false, nil + } + } + } + + return true, nil + }, nil +} + +func GetObjectMatcher(selector quotav1.ClusterResourceQuotaSelector) (func(obj metav1.Object) (bool, error), error) { + var labelSelector labels.Selector + if selector.LabelSelector != nil { + var err error + labelSelector, err = metav1.LabelSelectorAsSelector(selector.LabelSelector) + if err != nil { + return nil, err + } + } + + var annotationSelector map[string]string + if len(selector.AnnotationSelector) > 0 { + // ensure our matcher has a stable copy of the map + annotationSelector = make(map[string]string, len(selector.AnnotationSelector)) + for k, v := range selector.AnnotationSelector { + annotationSelector[k] = v + } + } + + return func(obj metav1.Object) (bool, error) { + if labelSelector != nil { + if !labelSelector.Matches(labels.Set(obj.GetLabels())) { + return false, nil + } + } + + if annotationSelector != nil { + objAnnotations := obj.GetAnnotations() + for k, v := range annotationSelector { + if objValue, exists := objAnnotations[k]; !exists || objValue != v { + return false, nil + } + } + } + + return true, nil + }, nil +} diff --git a/vendor/github.com/openshift/library-go/pkg/quota/clusterquotamapping/mapper.go b/vendor/github.com/openshift/library-go/pkg/quota/clusterquotamapping/mapper.go new file mode 100644 index 0000000000000..e8d66c4fa2ab5 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/quota/clusterquotamapping/mapper.go @@ -0,0 +1,289 @@ +package clusterquotamapping + +import ( + "reflect" + "sync" + + "k8s.io/apimachinery/pkg/api/equality" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/sets" + + quotav1 "github.com/openshift/api/quota/v1" +) + +type ClusterQuotaMapper interface { + // GetClusterQuotasFor returns the list of clusterquota names that this namespace matches. It also + // returns the selectionFields associated with the namespace for the check so that callers can determine staleness + GetClusterQuotasFor(namespaceName string) ([]string, SelectionFields) + // GetNamespacesFor returns the list of namespace names that this cluster quota matches. It also + // returns the selector associated with the clusterquota for the check so that callers can determine staleness + GetNamespacesFor(quotaName string) ([]string, quotav1.ClusterResourceQuotaSelector) + + AddListener(listener MappingChangeListener) +} + +// MappingChangeListener is notified of changes to the mapping. It must not block. +type MappingChangeListener interface { + AddMapping(quotaName, namespaceName string) + RemoveMapping(quotaName, namespaceName string) +} + +type SelectionFields struct { + Labels map[string]string + Annotations map[string]string +} + +// clusterQuotaMapper gives thread safe access to the actual mappings that are being stored. +// Many method use a shareable read lock to check status followed by a non-shareable +// write lock which double checks the condition before proceeding. Since locks aren't escalatable +// you have to perform the recheck because someone could have beaten you in. +type clusterQuotaMapper struct { + lock sync.RWMutex + + // requiredQuotaToSelector indicates the latest label selector this controller has observed for a quota + requiredQuotaToSelector map[string]quotav1.ClusterResourceQuotaSelector + // requiredNamespaceToLabels indicates the latest selectionFields this controller has observed for a namespace + requiredNamespaceToLabels map[string]SelectionFields + // completedQuotaToSelector indicates the latest label selector this controller has scanned against namespaces + completedQuotaToSelector map[string]quotav1.ClusterResourceQuotaSelector + // completedNamespaceToLabels indicates the latest selectionFields this controller has scanned against cluster quotas + completedNamespaceToLabels map[string]SelectionFields + + quotaToNamespaces map[string]sets.String + namespaceToQuota map[string]sets.String + + listeners []MappingChangeListener +} + +func NewClusterQuotaMapper() *clusterQuotaMapper { + return &clusterQuotaMapper{ + requiredQuotaToSelector: map[string]quotav1.ClusterResourceQuotaSelector{}, + requiredNamespaceToLabels: map[string]SelectionFields{}, + completedQuotaToSelector: map[string]quotav1.ClusterResourceQuotaSelector{}, + completedNamespaceToLabels: map[string]SelectionFields{}, + + quotaToNamespaces: map[string]sets.String{}, + namespaceToQuota: map[string]sets.String{}, + } +} + +func (m *clusterQuotaMapper) GetClusterQuotasFor(namespaceName string) ([]string, SelectionFields) { + m.lock.RLock() + defer m.lock.RUnlock() + + quotas, ok := m.namespaceToQuota[namespaceName] + if !ok { + return []string{}, m.completedNamespaceToLabels[namespaceName] + } + return quotas.List(), m.completedNamespaceToLabels[namespaceName] +} + +func (m *clusterQuotaMapper) GetNamespacesFor(quotaName string) ([]string, quotav1.ClusterResourceQuotaSelector) { + m.lock.RLock() + defer m.lock.RUnlock() + + namespaces, ok := m.quotaToNamespaces[quotaName] + if !ok { + return []string{}, m.completedQuotaToSelector[quotaName] + } + return namespaces.List(), m.completedQuotaToSelector[quotaName] +} + +func (m *clusterQuotaMapper) AddListener(listener MappingChangeListener) { + m.lock.Lock() + defer m.lock.Unlock() + + m.listeners = append(m.listeners, listener) +} + +// requireQuota updates the selector requirements for the given quota. This prevents stale updates to the mapping itself. +// returns true if a modification was made +func (m *clusterQuotaMapper) requireQuota(quota *quotav1.ClusterResourceQuota) bool { + m.lock.RLock() + selector, exists := m.requiredQuotaToSelector[quota.Name] + m.lock.RUnlock() + + if selectorMatches(selector, exists, quota) { + return false + } + + m.lock.Lock() + defer m.lock.Unlock() + selector, exists = m.requiredQuotaToSelector[quota.Name] + if selectorMatches(selector, exists, quota) { + return false + } + + m.requiredQuotaToSelector[quota.Name] = quota.Spec.Selector + return true +} + +// completeQuota updates the latest selector used to generate the mappings for this quota. The value is returned +// by the Get methods for the mapping so that callers can determine staleness +func (m *clusterQuotaMapper) completeQuota(quota *quotav1.ClusterResourceQuota) { + m.lock.Lock() + defer m.lock.Unlock() + m.completedQuotaToSelector[quota.Name] = quota.Spec.Selector +} + +// removeQuota deletes a quota from all mappings +func (m *clusterQuotaMapper) removeQuota(quotaName string) { + m.lock.Lock() + defer m.lock.Unlock() + + delete(m.requiredQuotaToSelector, quotaName) + delete(m.completedQuotaToSelector, quotaName) + delete(m.quotaToNamespaces, quotaName) + for namespaceName, quotas := range m.namespaceToQuota { + if quotas.Has(quotaName) { + quotas.Delete(quotaName) + for _, listener := range m.listeners { + listener.RemoveMapping(quotaName, namespaceName) + } + } + } +} + +// requireNamespace updates the label requirements for the given namespace. This prevents stale updates to the mapping itself. +// returns true if a modification was made +func (m *clusterQuotaMapper) requireNamespace(namespace metav1.Object) bool { + m.lock.RLock() + selectionFields, exists := m.requiredNamespaceToLabels[namespace.GetName()] + m.lock.RUnlock() + + if selectionFieldsMatch(selectionFields, exists, namespace) { + return false + } + + m.lock.Lock() + defer m.lock.Unlock() + selectionFields, exists = m.requiredNamespaceToLabels[namespace.GetName()] + if selectionFieldsMatch(selectionFields, exists, namespace) { + return false + } + + m.requiredNamespaceToLabels[namespace.GetName()] = GetSelectionFields(namespace) + return true +} + +// completeNamespace updates the latest selectionFields used to generate the mappings for this namespace. The value is returned +// by the Get methods for the mapping so that callers can determine staleness +func (m *clusterQuotaMapper) completeNamespace(namespace metav1.Object) { + m.lock.Lock() + defer m.lock.Unlock() + m.completedNamespaceToLabels[namespace.GetName()] = GetSelectionFields(namespace) +} + +// removeNamespace deletes a namespace from all mappings +func (m *clusterQuotaMapper) removeNamespace(namespaceName string) { + m.lock.Lock() + defer m.lock.Unlock() + + delete(m.requiredNamespaceToLabels, namespaceName) + delete(m.completedNamespaceToLabels, namespaceName) + delete(m.namespaceToQuota, namespaceName) + for quotaName, namespaces := range m.quotaToNamespaces { + if namespaces.Has(namespaceName) { + namespaces.Delete(namespaceName) + for _, listener := range m.listeners { + listener.RemoveMapping(quotaName, namespaceName) + } + } + } +} + +func selectorMatches(selector quotav1.ClusterResourceQuotaSelector, exists bool, quota *quotav1.ClusterResourceQuota) bool { + return exists && equality.Semantic.DeepEqual(selector, quota.Spec.Selector) +} +func selectionFieldsMatch(selectionFields SelectionFields, exists bool, namespace metav1.Object) bool { + return exists && reflect.DeepEqual(selectionFields, GetSelectionFields(namespace)) +} + +// setMapping maps (or removes a mapping) between a clusterquota and a namespace +// It returns whether the action worked, whether the quota is out of date, whether the namespace is out of date +// This allows callers to decide whether to pull new information from the cache or simply skip execution +func (m *clusterQuotaMapper) setMapping(quota *quotav1.ClusterResourceQuota, namespace metav1.Object, remove bool) (bool /*added*/, bool /*quota matches*/, bool /*namespace matches*/) { + m.lock.RLock() + selector, selectorExists := m.requiredQuotaToSelector[quota.Name] + selectionFields, selectionFieldsExist := m.requiredNamespaceToLabels[namespace.GetName()] + m.lock.RUnlock() + + if !selectorMatches(selector, selectorExists, quota) { + return false, false, selectionFieldsMatch(selectionFields, selectionFieldsExist, namespace) + } + if !selectionFieldsMatch(selectionFields, selectionFieldsExist, namespace) { + return false, true, false + } + + m.lock.Lock() + defer m.lock.Unlock() + selector, selectorExists = m.requiredQuotaToSelector[quota.Name] + selectionFields, selectionFieldsExist = m.requiredNamespaceToLabels[namespace.GetName()] + if !selectorMatches(selector, selectorExists, quota) { + return false, false, selectionFieldsMatch(selectionFields, selectionFieldsExist, namespace) + } + if !selectionFieldsMatch(selectionFields, selectionFieldsExist, namespace) { + return false, true, false + } + + if remove { + mutated := false + + namespaces, ok := m.quotaToNamespaces[quota.Name] + if !ok { + m.quotaToNamespaces[quota.Name] = sets.String{} + } else { + mutated = namespaces.Has(namespace.GetName()) + namespaces.Delete(namespace.GetName()) + } + + quotas, ok := m.namespaceToQuota[namespace.GetName()] + if !ok { + m.namespaceToQuota[namespace.GetName()] = sets.String{} + } else { + mutated = mutated || quotas.Has(quota.Name) + quotas.Delete(quota.Name) + } + + if mutated { + for _, listener := range m.listeners { + listener.RemoveMapping(quota.Name, namespace.GetName()) + } + } + + return true, true, true + } + + mutated := false + + namespaces, ok := m.quotaToNamespaces[quota.Name] + if !ok { + mutated = true + m.quotaToNamespaces[quota.Name] = sets.NewString(namespace.GetName()) + } else { + mutated = !namespaces.Has(namespace.GetName()) + namespaces.Insert(namespace.GetName()) + } + + quotas, ok := m.namespaceToQuota[namespace.GetName()] + if !ok { + mutated = true + m.namespaceToQuota[namespace.GetName()] = sets.NewString(quota.Name) + } else { + mutated = mutated || !quotas.Has(quota.Name) + quotas.Insert(quota.Name) + } + + if mutated { + for _, listener := range m.listeners { + listener.AddMapping(quota.Name, namespace.GetName()) + } + } + + return true, true, true + +} + +func GetSelectionFields(namespace metav1.Object) SelectionFields { + return SelectionFields{Labels: namespace.GetLabels(), Annotations: namespace.GetAnnotations()} +} diff --git a/vendor/github.com/openshift/library-go/pkg/quota/quotautil/error.go b/vendor/github.com/openshift/library-go/pkg/quota/quotautil/error.go new file mode 100644 index 0000000000000..14faf6bc025dc --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/quota/quotautil/error.go @@ -0,0 +1,42 @@ +package quotautil + +import ( + "strings" + + apierrs "k8s.io/apimachinery/pkg/api/errors" +) + +// errMessageString is a part of error message copied from quotaAdmission.Admit() method in +// k8s.io/kubernetes/plugin/pkg/admission/resourcequota/admission.go module +const errQuotaMessageString = `exceeded quota:` +const errQuotaUnknownMessageString = `status unknown for quota:` +const errLimitsMessageString = `exceeds the maximum limit` + +// IsErrorQuotaExceeded returns true if the given error stands for a denied request caused by detected quota +// abuse. +func IsErrorQuotaExceeded(err error) bool { + if isForbidden := apierrs.IsForbidden(err); isForbidden || apierrs.IsInvalid(err) { + lowered := strings.ToLower(err.Error()) + // the limit error message can be accompanied only by Invalid reason + if strings.Contains(lowered, errLimitsMessageString) { + return true + } + // the quota error message can be accompanied only by Forbidden reason + if isForbidden && (strings.Contains(lowered, errQuotaMessageString) || strings.Contains(lowered, errQuotaUnknownMessageString)) { + return true + } + } + return false +} + +// IsErrorLimitExceeded returns true if the given error is a limit error. +func IsErrorLimitExceeded(err error) bool { + if isForbidden := apierrs.IsForbidden(err); isForbidden || apierrs.IsInvalid(err) { + lowered := strings.ToLower(err.Error()) + // the limit error message can be accompanied only by Invalid reason + if strings.Contains(lowered, errLimitsMessageString) { + return true + } + } + return false +} diff --git a/vendor/github.com/openshift/library-go/pkg/quota/quotautil/helpers.go b/vendor/github.com/openshift/library-go/pkg/quota/quotautil/helpers.go new file mode 100644 index 0000000000000..a6bfc6269ed6d --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/quota/quotautil/helpers.go @@ -0,0 +1,48 @@ +package quotautil + +import ( + corev1 "k8s.io/api/core/v1" + + quotav1 "github.com/openshift/api/quota/v1" +) + +func GetResourceQuotasStatusByNamespace(namespaceStatuses quotav1.ResourceQuotasStatusByNamespace, namespace string) (corev1.ResourceQuotaStatus, bool) { + for i := range namespaceStatuses { + curr := namespaceStatuses[i] + if curr.Namespace == namespace { + return curr.Status, true + } + } + return corev1.ResourceQuotaStatus{}, false +} + +func RemoveResourceQuotasStatusByNamespace(namespaceStatuses *quotav1.ResourceQuotasStatusByNamespace, namespace string) { + newNamespaceStatuses := quotav1.ResourceQuotasStatusByNamespace{} + for i := range *namespaceStatuses { + curr := (*namespaceStatuses)[i] + if curr.Namespace == namespace { + continue + } + newNamespaceStatuses = append(newNamespaceStatuses, curr) + } + *namespaceStatuses = newNamespaceStatuses +} + +func InsertResourceQuotasStatus(namespaceStatuses *quotav1.ResourceQuotasStatusByNamespace, newStatus quotav1.ResourceQuotaStatusByNamespace) { + newNamespaceStatuses := quotav1.ResourceQuotasStatusByNamespace{} + found := false + for i := range *namespaceStatuses { + curr := (*namespaceStatuses)[i] + if curr.Namespace == newStatus.Namespace { + // do this so that we don't change serialization order + newNamespaceStatuses = append(newNamespaceStatuses, newStatus) + found = true + continue + } + newNamespaceStatuses = append(newNamespaceStatuses, curr) + } + if !found { + newNamespaceStatuses = append(newNamespaceStatuses, newStatus) + } + *namespaceStatuses = newNamespaceStatuses +} diff --git a/vendor/github.com/openshift/library-go/pkg/security/ldaputil/attribute.go b/vendor/github.com/openshift/library-go/pkg/security/ldaputil/attribute.go new file mode 100644 index 0000000000000..16ca72231b400 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/security/ldaputil/attribute.go @@ -0,0 +1,47 @@ +package ldaputil + +import ( + "encoding/base64" + "strings" + + "gopkg.in/ldap.v2" +) + +// GetAttributeValue finds the first attribute of those given that the LDAP entry has, and +// returns it. GetAttributeValue is able to query the DN as well as Attributes of the LDAP entry. +// If no value is found, the empty string is returned. +func GetAttributeValue(entry *ldap.Entry, attributes []string) string { + for _, k := range attributes { + // Ignore empty attributes + if len(k) == 0 { + continue + } + // Special-case DN, since it's not an attribute + if strings.ToLower(k) == "dn" { + return entry.DN + } + // Otherwise get an attribute and return it if present + if v := entry.GetAttributeValue(k); len(v) > 0 { + return v + } + } + return "" +} + +func GetRawAttributeValue(entry *ldap.Entry, attributes []string) string { + for _, k := range attributes { + // Ignore empty attributes + if len(k) == 0 { + continue + } + // Special-case DN, since it's not an attribute + if strings.ToLower(k) == "dn" { + return base64.RawURLEncoding.EncodeToString([]byte(entry.DN)) + } + // Otherwise get an attribute and return it if present + if v := entry.GetRawAttributeValue(k); len(v) > 0 { + return base64.RawURLEncoding.EncodeToString(v) + } + } + return "" +} diff --git a/vendor/github.com/openshift/library-go/pkg/security/ldaputil/url.go b/vendor/github.com/openshift/library-go/pkg/security/ldaputil/url.go new file mode 100644 index 0000000000000..caf64963ac455 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/security/ldaputil/url.go @@ -0,0 +1,247 @@ +package ldaputil + +import ( + "fmt" + "net" + "net/url" + "strings" + + "gopkg.in/ldap.v2" +) + +// Scheme is a valid ldap scheme +type Scheme string + +const ( + SchemeLDAP Scheme = "ldap" + SchemeLDAPS Scheme = "ldaps" +) + +// Scope is a valid LDAP search scope +type Scope int + +const ( + ScopeWholeSubtree Scope = ldap.ScopeWholeSubtree + ScopeSingleLevel Scope = ldap.ScopeSingleLevel + ScopeBaseObject Scope = ldap.ScopeBaseObject +) + +// DerefAliases is a valid LDAP alias dereference parameter +type DerefAliases int + +const ( + DerefAliasesNever = ldap.NeverDerefAliases + DerefAliasesSearching = ldap.DerefInSearching + DerefAliasesFinding = ldap.DerefFindingBaseObj + DerefAliasesAlways = ldap.DerefAlways +) + +const ( + defaultLDAPPort = "389" + defaultLDAPSPort = "636" + + defaultHost = "localhost" + defaultQueryAttribute = "uid" + defaultFilter = "(objectClass=*)" + + scopeWholeSubtreeString = "sub" + scopeSingleLevelString = "one" + scopeBaseObjectString = "base" + + criticalExtensionPrefix = "!" +) + +// LDAPURL holds a parsed RFC 2255 URL +type LDAPURL struct { + // Scheme is ldap or ldaps + Scheme Scheme + // Host is the host:port of the LDAP server + Host string + // The DN of the branch of the directory where all searches should start from + BaseDN string + // The attribute to search for + QueryAttribute string + // The scope of the search. Can be ldap.ScopeWholeSubtree, ldap.ScopeSingleLevel, or ldap.ScopeBaseObject + Scope Scope + // A valid LDAP search filter (e.g. "(objectClass=*)") + Filter string +} + +// ParseURL parsed the given ldapURL as an RFC 2255 URL +// The syntax of the URL is ldap://host:port/basedn?attribute?scope?filter +func ParseURL(ldapURL string) (LDAPURL, error) { + // Must be a valid URL to start + parsedURL, err := url.Parse(ldapURL) + if err != nil { + return LDAPURL{}, err + } + + opts := LDAPURL{} + + determinedScheme, err := DetermineLDAPScheme(parsedURL.Scheme) + if err != nil { + return LDAPURL{}, err + } + opts.Scheme = determinedScheme + + determinedHost, err := DetermineLDAPHost(parsedURL.Host, opts.Scheme) + if err != nil { + return LDAPURL{}, err + } + opts.Host = determinedHost + + // Set base dn (default to "") + // url.Parse() already percent-decodes the path + opts.BaseDN = strings.TrimLeft(parsedURL.Path, "/") + + attributes, scope, filter, extensions, err := SplitLDAPQuery(parsedURL.RawQuery) + if err != nil { + return LDAPURL{}, err + } + + // Attributes contains comma-separated attributes + // Set query attribute to first attribute + // Default to uid to match mod_auth_ldap + opts.QueryAttribute = strings.Split(attributes, ",")[0] + if len(opts.QueryAttribute) == 0 { + opts.QueryAttribute = defaultQueryAttribute + } + + determinedScope, err := DetermineLDAPScope(scope) + if err != nil { + return LDAPURL{}, err + } + opts.Scope = determinedScope + + determinedFilter, err := DetermineLDAPFilter(filter) + if err != nil { + return LDAPURL{}, err + } + opts.Filter = determinedFilter + + // Extensions are in "name=value,name2=value2" form + // Critical extensions are prefixed with a ! + // Optional extensions are ignored, per RFC + // Fail if there are any critical extensions, since we don't support any + if len(extensions) > 0 { + for _, extension := range strings.Split(extensions, ",") { + exttype := strings.SplitN(extension, "=", 2)[0] + if strings.HasPrefix(exttype, criticalExtensionPrefix) { + return LDAPURL{}, fmt.Errorf("unsupported critical extension %s", extension) + } + } + } + + return opts, nil + +} + +// DetermineLDAPScheme determines the LDAP connection scheme. Scheme is one of "ldap" or "ldaps" +// Default to "ldap" +func DetermineLDAPScheme(scheme string) (Scheme, error) { + switch Scheme(scheme) { + case SchemeLDAP, SchemeLDAPS: + return Scheme(scheme), nil + default: + return "", fmt.Errorf("invalid scheme %q", scheme) + } +} + +// DetermineLDAPHost determines the host and port for the LDAP connection. +// The default host is localhost; the default port for scheme "ldap" is 389, for "ldaps" is 686 +func DetermineLDAPHost(hostport string, scheme Scheme) (string, error) { + if len(hostport) == 0 { + hostport = defaultHost + } + // add port if missing + if _, _, err := net.SplitHostPort(hostport); err != nil { + switch scheme { + case SchemeLDAPS: + return net.JoinHostPort(hostport, defaultLDAPSPort), nil + case SchemeLDAP: + return net.JoinHostPort(hostport, defaultLDAPPort), nil + default: + return "", fmt.Errorf("no default port for scheme %q", scheme) + } + } + // nothing needed to be done + return hostport, nil +} + +// SplitLDAPQuery splits the query in the URL into the substituent parts. All sections are optional. +// Query syntax is attribute?scope?filter?extensions +func SplitLDAPQuery(query string) (attributes, scope, filter, extensions string, err error) { + parts := strings.Split(query, "?") + switch len(parts) { + case 4: + extensions = parts[3] + fallthrough + case 3: + if v, err := url.QueryUnescape(parts[2]); err != nil { + return "", "", "", "", err + } else { + filter = v + } + fallthrough + case 2: + if v, err := url.QueryUnescape(parts[1]); err != nil { + return "", "", "", "", err + } else { + scope = v + } + fallthrough + case 1: + if v, err := url.QueryUnescape(parts[0]); err != nil { + return "", "", "", "", err + } else { + attributes = v + } + return attributes, scope, filter, extensions, nil + case 0: + return + default: + err = fmt.Errorf("too many query options %q", query) + return "", "", "", "", err + } +} + +// DetermineLDAPScope determines the LDAP search scope. Scope is one of "sub", "one", or "base" +// Default to "sub" to match mod_auth_ldap +func DetermineLDAPScope(scope string) (Scope, error) { + switch scope { + case "", scopeWholeSubtreeString: + return ScopeWholeSubtree, nil + case scopeSingleLevelString: + return ScopeSingleLevel, nil + case scopeBaseObjectString: + return ScopeBaseObject, nil + default: + return -1, fmt.Errorf("invalid scope %q", scope) + } +} + +// DetermineLDAPFilter determines the LDAP search filter. Filter is a valid LDAP filter +// Default to "(objectClass=*)" per RFC +func DetermineLDAPFilter(filter string) (string, error) { + if len(filter) == 0 { + return defaultFilter, nil + } + if _, err := ldap.CompileFilter(filter); err != nil { + return "", fmt.Errorf("invalid filter: %v", err) + } + return filter, nil +} + +func DetermineDerefAliasesBehavior(derefAliasesString string) (DerefAliases, error) { + mapping := map[string]DerefAliases{ + "never": DerefAliasesNever, + "search": DerefAliasesSearching, + "base": DerefAliasesFinding, + "always": DerefAliasesAlways, + } + derefAliases, exists := mapping[derefAliasesString] + if !exists { + return -1, fmt.Errorf("not a valid LDAP alias dereferncing behavior: %s", derefAliasesString) + } + return derefAliases, nil +} diff --git a/vendor/github.com/openshift/library-go/pkg/security/uid/uid.go b/vendor/github.com/openshift/library-go/pkg/security/uid/uid.go new file mode 100644 index 0000000000000..836a71a5a41a8 --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/security/uid/uid.go @@ -0,0 +1,125 @@ +package uid + +import ( + "fmt" + "strings" +) + +type Block struct { + Start uint32 + End uint32 +} + +var ( + ErrBlockSlashBadFormat = fmt.Errorf("block not in the format \"/\"") + ErrBlockDashBadFormat = fmt.Errorf("block not in the format \"-\"") +) + +func ParseBlock(in string) (Block, error) { + if strings.Contains(in, "/") { + var start, size uint32 + n, err := fmt.Sscanf(in, "%d/%d", &start, &size) + if err != nil { + return Block{}, err + } + if n != 2 { + return Block{}, ErrBlockSlashBadFormat + } + return Block{Start: start, End: start + size - 1}, nil + } + + var start, end uint32 + n, err := fmt.Sscanf(in, "%d-%d", &start, &end) + if err != nil { + return Block{}, err + } + if n != 2 { + return Block{}, ErrBlockDashBadFormat + } + return Block{Start: start, End: end}, nil +} + +func (b Block) String() string { + return fmt.Sprintf("%d/%d", b.Start, b.Size()) +} + +func (b Block) RangeString() string { + return fmt.Sprintf("%d-%d", b.Start, b.End) +} + +func (b Block) Size() uint32 { + return b.End - b.Start + 1 +} + +type Range struct { + block Block + size uint32 +} + +func NewRange(start, end, size uint32) (*Range, error) { + if start > end { + return nil, fmt.Errorf("start %d must be less than end %d", start, end) + } + if size == 0 { + return nil, fmt.Errorf("block size must be a positive integer") + } + if (end - start) < size { + return nil, fmt.Errorf("block size must be less than or equal to the range") + } + return &Range{ + block: Block{start, end}, + size: size, + }, nil +} + +func ParseRange(in string) (*Range, error) { + var start, end, block uint32 + n, err := fmt.Sscanf(in, "%d-%d/%d", &start, &end, &block) + if err != nil { + return nil, err + } + if n != 3 { + return nil, fmt.Errorf("range not in the format \"-/\"") + } + return NewRange(start, end, block) +} + +func (r *Range) Size() uint32 { + return r.block.Size() / r.size +} + +func (r *Range) String() string { + return fmt.Sprintf("%s/%d", r.block.RangeString(), r.size) +} + +func (r *Range) BlockAt(offset uint32) (Block, bool) { + if offset > r.Size() { + return Block{}, false + } + start := r.block.Start + offset*r.size + return Block{ + Start: start, + End: start + r.size - 1, + }, true +} + +func (r *Range) Contains(block Block) bool { + ok, _ := r.Offset(block) + return ok +} + +func (r *Range) Offset(block Block) (bool, uint32) { + if block.Start < r.block.Start { + return false, 0 + } + if block.End > r.block.End { + return false, 0 + } + if block.End-block.Start+1 != r.size { + return false, 0 + } + if (block.Start-r.block.Start)%r.size != 0 { + return false, 0 + } + return true, (block.Start - r.block.Start) / r.size +} diff --git a/vendor/github.com/pelletier/go-toml/BUILD b/vendor/github.com/pelletier/go-toml/BUILD deleted file mode 100644 index 2ce3ca77f3641..0000000000000 --- a/vendor/github.com/pelletier/go-toml/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "keysparsing.go", - "lexer.go", - "marshal.go", - "parser.go", - "position.go", - "token.go", - "toml.go", - "tomltree_create.go", - "tomltree_write.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/pelletier/go-toml", - importpath = "github.com/pelletier/go-toml", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/peterbourgon/diskv/BUILD b/vendor/github.com/peterbourgon/diskv/BUILD deleted file mode 100644 index 3a05f82cb4a9c..0000000000000 --- a/vendor/github.com/peterbourgon/diskv/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "compression.go", - "diskv.go", - "index.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/peterbourgon/diskv", - importpath = "github.com/peterbourgon/diskv", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/google/btree:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/pkg/errors/BUILD b/vendor/github.com/pkg/errors/BUILD deleted file mode 100644 index 9abdea74d22a9..0000000000000 --- a/vendor/github.com/pkg/errors/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "errors.go", - "go113.go", - "stack.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/pkg/errors", - importpath = "github.com/pkg/errors", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/pmezard/go-difflib/difflib/BUILD b/vendor/github.com/pmezard/go-difflib/difflib/BUILD deleted file mode 100644 index 235b20044835d..0000000000000 --- a/vendor/github.com/pmezard/go-difflib/difflib/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["difflib.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/pmezard/go-difflib/difflib", - importpath = "github.com/pmezard/go-difflib/difflib", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/pquerna/cachecontrol/BUILD b/vendor/github.com/pquerna/cachecontrol/BUILD deleted file mode 100644 index b3ba0a740e3c5..0000000000000 --- a/vendor/github.com/pquerna/cachecontrol/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "doc.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/pquerna/cachecontrol", - importpath = "github.com/pquerna/cachecontrol", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/pquerna/cachecontrol/cacheobject:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/pquerna/cachecontrol/cacheobject:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/pquerna/cachecontrol/cacheobject/BUILD b/vendor/github.com/pquerna/cachecontrol/cacheobject/BUILD deleted file mode 100644 index 858e7e47d7be1..0000000000000 --- a/vendor/github.com/pquerna/cachecontrol/cacheobject/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "directive.go", - "lex.go", - "object.go", - "reasons.go", - "warning.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/pquerna/cachecontrol/cacheobject", - importpath = "github.com/pquerna/cachecontrol/cacheobject", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/prometheus/client_golang/prometheus/BUILD b/vendor/github.com/prometheus/client_golang/prometheus/BUILD deleted file mode 100644 index 57c00d4d6c9e8..0000000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/BUILD +++ /dev/null @@ -1,110 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "build_info.go", - "build_info_pre_1.12.go", - "collector.go", - "counter.go", - "desc.go", - "doc.go", - "expvar_collector.go", - "fnv.go", - "gauge.go", - "go_collector.go", - "histogram.go", - "labels.go", - "metric.go", - "observer.go", - "process_collector.go", - "process_collector_other.go", - "process_collector_windows.go", - "registry.go", - "summary.go", - "timer.go", - "untyped.go", - "value.go", - "vec.go", - "wrap.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/client_golang/prometheus", - importpath = "github.com/prometheus/client_golang/prometheus", - visibility = ["//build/visible_to:vendor_githubcom_prometheus_CONSUMERS"], - deps = [ - "//vendor/github.com/beorn7/perks/quantile:go_default_library", - "//vendor/github.com/cespare/xxhash/v2:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus/internal:go_default_library", - "//vendor/github.com/prometheus/client_model/go:go_default_library", - "//vendor/github.com/prometheus/common/expfmt:go_default_library", - "//vendor/github.com/prometheus/common/model:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/github.com/prometheus/procfs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/prometheus/procfs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/github.com/prometheus/procfs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/github.com/prometheus/procfs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/github.com/prometheus/procfs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:illumos": [ - "//vendor/github.com/prometheus/procfs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/github.com/prometheus/procfs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:js": [ - "//vendor/github.com/prometheus/procfs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/prometheus/procfs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:nacl": [ - "//vendor/github.com/prometheus/procfs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/github.com/prometheus/procfs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/github.com/prometheus/procfs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:plan9": [ - "//vendor/github.com/prometheus/procfs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/github.com/prometheus/procfs:go_default_library", - ], - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/prometheus/client_golang/prometheus/internal:all-srcs", - "//vendor/github.com/prometheus/client_golang/prometheus/promhttp:all-srcs", - "//vendor/github.com/prometheus/client_golang/prometheus/testutil:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/prometheus/client_golang/prometheus/internal/BUILD b/vendor/github.com/prometheus/client_golang/prometheus/internal/BUILD deleted file mode 100644 index ee7f167765eb5..0000000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/internal/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["metric.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/client_golang/prometheus/internal", - importpath = "github.com/prometheus/client_golang/prometheus/internal", - visibility = ["//build/visible_to:vendor_githubcom_prometheus_CONSUMERS"], - deps = ["//vendor/github.com/prometheus/client_model/go:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/BUILD b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/BUILD deleted file mode 100644 index b684d053210e0..0000000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "delegator.go", - "http.go", - "instrument_client.go", - "instrument_server.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/client_golang/prometheus/promhttp", - importpath = "github.com/prometheus/client_golang/prometheus/promhttp", - visibility = ["//build/visible_to:vendor_githubcom_prometheus_CONSUMERS"], - deps = [ - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/github.com/prometheus/client_model/go:go_default_library", - "//vendor/github.com/prometheus/common/expfmt:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/prometheus/client_golang/prometheus/testutil/BUILD b/vendor/github.com/prometheus/client_golang/prometheus/testutil/BUILD deleted file mode 100644 index d0a932d26e46c..0000000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/testutil/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "lint.go", - "testutil.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/client_golang/prometheus/testutil", - importpath = "github.com/prometheus/client_golang/prometheus/testutil", - visibility = ["//build/visible_to:vendor_githubcom_prometheus_CONSUMERS"], - deps = [ - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus/internal:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint:go_default_library", - "//vendor/github.com/prometheus/client_model/go:go_default_library", - "//vendor/github.com/prometheus/common/expfmt:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/BUILD b/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/BUILD deleted file mode 100644 index 6d44c7da3a82c..0000000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["promlint.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/client_golang/prometheus/testutil/promlint", - importpath = "github.com/prometheus/client_golang/prometheus/testutil/promlint", - visibility = ["//build/visible_to:vendor_githubcom_prometheus_CONSUMERS"], - deps = [ - "//vendor/github.com/prometheus/client_model/go:go_default_library", - "//vendor/github.com/prometheus/common/expfmt:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/prometheus/client_model/go/BUILD b/vendor/github.com/prometheus/client_model/go/BUILD deleted file mode 100644 index bbe989671a497..0000000000000 --- a/vendor/github.com/prometheus/client_model/go/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["metrics.pb.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/client_model/go", - importpath = "github.com/prometheus/client_model/go", - visibility = ["//build/visible_to:vendor_githubcom_prometheus_CONSUMERS"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/timestamp:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/prometheus/common/expfmt/BUILD b/vendor/github.com/prometheus/common/expfmt/BUILD deleted file mode 100644 index 199335238a52d..0000000000000 --- a/vendor/github.com/prometheus/common/expfmt/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decode.go", - "encode.go", - "expfmt.go", - "openmetrics_create.go", - "text_create.go", - "text_parse.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/common/expfmt", - importpath = "github.com/prometheus/common/expfmt", - visibility = ["//build/visible_to:vendor_githubcom_prometheus_CONSUMERS"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes:go_default_library", - "//vendor/github.com/matttproud/golang_protobuf_extensions/pbutil:go_default_library", - "//vendor/github.com/prometheus/client_model/go:go_default_library", - "//vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg:go_default_library", - "//vendor/github.com/prometheus/common/model:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/BUILD b/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/BUILD deleted file mode 100644 index a233d08b50b10..0000000000000 --- a/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["autoneg.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg", - importpath = "github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg", - visibility = ["//build/visible_to:vendor_githubcom_prometheus_CONSUMERS"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/prometheus/common/model/BUILD b/vendor/github.com/prometheus/common/model/BUILD deleted file mode 100644 index df8c5328dd6dd..0000000000000 --- a/vendor/github.com/prometheus/common/model/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "alert.go", - "fingerprinting.go", - "fnv.go", - "labels.go", - "labelset.go", - "metric.go", - "model.go", - "signature.go", - "silence.go", - "time.go", - "value.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/common/model", - importpath = "github.com/prometheus/common/model", - visibility = ["//build/visible_to:vendor_githubcom_prometheus_CONSUMERS"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/prometheus/procfs/BUILD b/vendor/github.com/prometheus/procfs/BUILD deleted file mode 100644 index 440f2cc86573b..0000000000000 --- a/vendor/github.com/prometheus/procfs/BUILD +++ /dev/null @@ -1,112 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "arp.go", - "buddyinfo.go", - "cpuinfo.go", - "cpuinfo_arm.go", - "cpuinfo_arm64.go", - "cpuinfo_default.go", - "cpuinfo_mips.go", - "cpuinfo_mips64.go", - "cpuinfo_mips64le.go", - "cpuinfo_mipsle.go", - "cpuinfo_ppc64.go", - "cpuinfo_ppc64le.go", - "cpuinfo_s390x.go", - "crypto.go", - "doc.go", - "fs.go", - "fscache.go", - "ipvs.go", - "kernel_random.go", - "loadavg.go", - "mdstat.go", - "meminfo.go", - "mountinfo.go", - "mountstats.go", - "net_conntrackstat.go", - "net_dev.go", - "net_sockstat.go", - "net_softnet.go", - "net_udp.go", - "net_unix.go", - "proc.go", - "proc_cgroup.go", - "proc_environ.go", - "proc_fdinfo.go", - "proc_io.go", - "proc_limits.go", - "proc_maps.go", - "proc_ns.go", - "proc_psi.go", - "proc_smaps.go", - "proc_stat.go", - "proc_status.go", - "schedstat.go", - "stat.go", - "swaps.go", - "vm.go", - "xfrm.go", - "zoneinfo.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/procfs", - importpath = "github.com/prometheus/procfs", - visibility = ["//build/visible_to:vendor_githubcom_prometheus_CONSUMERS"], - deps = [ - "//vendor/github.com/prometheus/procfs/internal/fs:go_default_library", - "//vendor/github.com/prometheus/procfs/internal/util:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/prometheus/procfs/internal/fs:all-srcs", - "//vendor/github.com/prometheus/procfs/internal/util:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/prometheus/procfs/internal/fs/BUILD b/vendor/github.com/prometheus/procfs/internal/fs/BUILD deleted file mode 100644 index 3644e2f175c0e..0000000000000 --- a/vendor/github.com/prometheus/procfs/internal/fs/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["fs.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/procfs/internal/fs", - importpath = "github.com/prometheus/procfs/internal/fs", - visibility = ["//build/visible_to:vendor_githubcom_prometheus_CONSUMERS"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/prometheus/procfs/internal/util/BUILD b/vendor/github.com/prometheus/procfs/internal/util/BUILD deleted file mode 100644 index 9e4e4d2685fbd..0000000000000 --- a/vendor/github.com/prometheus/procfs/internal/util/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "parse.go", - "readfile.go", - "sysreadfile.go", - "sysreadfile_compat.go", - "valueparser.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/prometheus/procfs/internal/util", - importpath = "github.com/prometheus/procfs/internal/util", - visibility = ["//build/visible_to:vendor_githubcom_prometheus_CONSUMERS"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/quobyte/api/BUILD b/vendor/github.com/quobyte/api/BUILD deleted file mode 100644 index 2bf9176ca19f4..0000000000000 --- a/vendor/github.com/quobyte/api/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "quobyte.go", - "rpc_client.go", - "types.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/quobyte/api", - importpath = "github.com/quobyte/api", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/robfig/cron/BUILD b/vendor/github.com/robfig/cron/BUILD deleted file mode 100644 index 80b07385bb7ee..0000000000000 --- a/vendor/github.com/robfig/cron/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "constantdelay.go", - "cron.go", - "doc.go", - "parser.go", - "spec.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/robfig/cron", - importpath = "github.com/robfig/cron", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/rubiojr/go-vhd/vhd/BUILD b/vendor/github.com/rubiojr/go-vhd/vhd/BUILD deleted file mode 100644 index 9784f6795a806..0000000000000 --- a/vendor/github.com/rubiojr/go-vhd/vhd/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "util.go", - "vhd.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/rubiojr/go-vhd/vhd", - importpath = "github.com/rubiojr/go-vhd/vhd", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/text/encoding/unicode:go_default_library", - "//vendor/golang.org/x/text/transform:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/russross/blackfriday/BUILD b/vendor/github.com/russross/blackfriday/BUILD deleted file mode 100644 index ec89615652016..0000000000000 --- a/vendor/github.com/russross/blackfriday/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "block.go", - "doc.go", - "html.go", - "inline.go", - "latex.go", - "markdown.go", - "smartypants.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/russross/blackfriday", - importpath = "github.com/russross/blackfriday", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/russross/blackfriday/v2:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/russross/blackfriday/v2/BUILD b/vendor/github.com/russross/blackfriday/v2/BUILD deleted file mode 100644 index c66f642af71a3..0000000000000 --- a/vendor/github.com/russross/blackfriday/v2/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "block.go", - "doc.go", - "esc.go", - "html.go", - "inline.go", - "markdown.go", - "node.go", - "smartypants.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/russross/blackfriday/v2", - importpath = "github.com/russross/blackfriday/v2", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/shurcooL/sanitized_anchor_name:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/satori/go.uuid/BUILD b/vendor/github.com/satori/go.uuid/BUILD deleted file mode 100644 index bf866f823f121..0000000000000 --- a/vendor/github.com/satori/go.uuid/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "codec.go", - "generator.go", - "sql.go", - "uuid.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/satori/go.uuid", - importpath = "github.com/satori/go.uuid", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/seccomp/libseccomp-golang/BUILD b/vendor/github.com/seccomp/libseccomp-golang/BUILD deleted file mode 100644 index 0a971ac0700b9..0000000000000 --- a/vendor/github.com/seccomp/libseccomp-golang/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "seccomp.go", - "seccomp_internal.go", - ], - cgo = True, - clinkopts = select({"@io_bazel_rules_go//go/platform:linux":["-lseccomp",],"//conditions:default":[],}), - importmap = "k8s.io/kubernetes/vendor/github.com/seccomp/libseccomp-golang", - importpath = "github.com/seccomp/libseccomp-golang", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/shurcooL/sanitized_anchor_name/BUILD b/vendor/github.com/shurcooL/sanitized_anchor_name/BUILD deleted file mode 100644 index 7f2707384e6ff..0000000000000 --- a/vendor/github.com/shurcooL/sanitized_anchor_name/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["main.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/shurcooL/sanitized_anchor_name", - importpath = "github.com/shurcooL/sanitized_anchor_name", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/sirupsen/logrus/BUILD b/vendor/github.com/sirupsen/logrus/BUILD deleted file mode 100644 index f8dd207d2d85d..0000000000000 --- a/vendor/github.com/sirupsen/logrus/BUILD +++ /dev/null @@ -1,78 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "alt_exit.go", - "doc.go", - "entry.go", - "exported.go", - "formatter.go", - "hooks.go", - "json_formatter.go", - "logger.go", - "logrus.go", - "terminal_check_bsd.go", - "terminal_check_js.go", - "terminal_check_no_terminal.go", - "terminal_check_notappengine.go", - "terminal_check_solaris.go", - "terminal_check_unix.go", - "terminal_check_windows.go", - "text_formatter.go", - "writer.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/sirupsen/logrus", - importpath = "github.com/sirupsen/logrus", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/konsorten/go-windows-terminal-sequences:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/soheilhy/cmux/BUILD b/vendor/github.com/soheilhy/cmux/BUILD deleted file mode 100644 index 3b5d786c99f09..0000000000000 --- a/vendor/github.com/soheilhy/cmux/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "buffer.go", - "cmux.go", - "doc.go", - "matchers.go", - "patricia.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/soheilhy/cmux", - importpath = "github.com/soheilhy/cmux", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/net/http2:go_default_library", - "//vendor/golang.org/x/net/http2/hpack:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/spf13/afero/BUILD b/vendor/github.com/spf13/afero/BUILD deleted file mode 100644 index 8aa0f3fe24938..0000000000000 --- a/vendor/github.com/spf13/afero/BUILD +++ /dev/null @@ -1,49 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "afero.go", - "basepath.go", - "cacheOnReadFs.go", - "const_bsds.go", - "const_win_unix.go", - "copyOnWriteFs.go", - "httpFs.go", - "ioutil.go", - "lstater.go", - "match.go", - "memmap.go", - "os.go", - "path.go", - "readonlyfs.go", - "regexpfs.go", - "unionFile.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/spf13/afero", - importpath = "github.com/spf13/afero", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/spf13/afero/mem:go_default_library", - "//vendor/golang.org/x/text/transform:go_default_library", - "//vendor/golang.org/x/text/unicode/norm:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/spf13/afero/mem:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/spf13/afero/mem/BUILD b/vendor/github.com/spf13/afero/mem/BUILD deleted file mode 100644 index 77f23bad69770..0000000000000 --- a/vendor/github.com/spf13/afero/mem/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dir.go", - "dirmap.go", - "file.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/spf13/afero/mem", - importpath = "github.com/spf13/afero/mem", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/spf13/cast/BUILD b/vendor/github.com/spf13/cast/BUILD deleted file mode 100644 index 9f3c504b7678d..0000000000000 --- a/vendor/github.com/spf13/cast/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cast.go", - "caste.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/spf13/cast", - importpath = "github.com/spf13/cast", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/spf13/cobra/BUILD b/vendor/github.com/spf13/cobra/BUILD deleted file mode 100644 index dc25cbf5f4af2..0000000000000 --- a/vendor/github.com/spf13/cobra/BUILD +++ /dev/null @@ -1,46 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "args.go", - "bash_completions.go", - "cobra.go", - "command.go", - "command_notwin.go", - "command_win.go", - "custom_completions.go", - "fish_completions.go", - "powershell_completions.go", - "shell_completions.go", - "zsh_completions.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/spf13/cobra", - importpath = "github.com/spf13/cobra", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/spf13/pflag:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/inconshreveable/mousetrap:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/spf13/cobra/doc:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/spf13/cobra/doc/BUILD b/vendor/github.com/spf13/cobra/doc/BUILD deleted file mode 100644 index 170e56994dbbf..0000000000000 --- a/vendor/github.com/spf13/cobra/doc/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "man_docs.go", - "md_docs.go", - "rest_docs.go", - "util.go", - "yaml_docs.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/spf13/cobra/doc", - importpath = "github.com/spf13/cobra/doc", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/cpuguy83/go-md2man/v2/md2man:go_default_library", - "//vendor/github.com/spf13/cobra:go_default_library", - "//vendor/github.com/spf13/pflag:go_default_library", - "//vendor/gopkg.in/yaml.v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/spf13/jwalterweatherman/BUILD b/vendor/github.com/spf13/jwalterweatherman/BUILD deleted file mode 100644 index a956bb41d2775..0000000000000 --- a/vendor/github.com/spf13/jwalterweatherman/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "default_notepad.go", - "log_counter.go", - "notepad.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/spf13/jwalterweatherman", - importpath = "github.com/spf13/jwalterweatherman", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/spf13/pflag/BUILD b/vendor/github.com/spf13/pflag/BUILD deleted file mode 100644 index 19e41844a53e3..0000000000000 --- a/vendor/github.com/spf13/pflag/BUILD +++ /dev/null @@ -1,60 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bool.go", - "bool_slice.go", - "bytes.go", - "count.go", - "duration.go", - "duration_slice.go", - "flag.go", - "float32.go", - "float32_slice.go", - "float64.go", - "float64_slice.go", - "golangflag.go", - "int.go", - "int16.go", - "int32.go", - "int32_slice.go", - "int64.go", - "int64_slice.go", - "int8.go", - "int_slice.go", - "ip.go", - "ip_slice.go", - "ipmask.go", - "ipnet.go", - "string.go", - "string_array.go", - "string_slice.go", - "string_to_int.go", - "string_to_int64.go", - "string_to_string.go", - "uint.go", - "uint16.go", - "uint32.go", - "uint64.go", - "uint8.go", - "uint_slice.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/spf13/pflag", - importpath = "github.com/spf13/pflag", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/spf13/viper/BUILD b/vendor/github.com/spf13/viper/BUILD deleted file mode 100644 index 64a8e099ac202..0000000000000 --- a/vendor/github.com/spf13/viper/BUILD +++ /dev/null @@ -1,40 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "flags.go", - "util.go", - "viper.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/spf13/viper", - importpath = "github.com/spf13/viper", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/fsnotify/fsnotify:go_default_library", - "//vendor/github.com/hashicorp/hcl:go_default_library", - "//vendor/github.com/hashicorp/hcl/hcl/printer:go_default_library", - "//vendor/github.com/magiconair/properties:go_default_library", - "//vendor/github.com/mitchellh/mapstructure:go_default_library", - "//vendor/github.com/pelletier/go-toml:go_default_library", - "//vendor/github.com/spf13/afero:go_default_library", - "//vendor/github.com/spf13/cast:go_default_library", - "//vendor/github.com/spf13/jwalterweatherman:go_default_library", - "//vendor/github.com/spf13/pflag:go_default_library", - "//vendor/gopkg.in/yaml.v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/storageos/go-api/BUILD b/vendor/github.com/storageos/go-api/BUILD deleted file mode 100644 index c052c8e32665e..0000000000000 --- a/vendor/github.com/storageos/go-api/BUILD +++ /dev/null @@ -1,50 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "health.go", - "logger.go", - "login.go", - "namespace.go", - "network_diagnostics.go", - "node.go", - "policy.go", - "pool.go", - "rule.go", - "server_version.go", - "template.go", - "user.go", - "util.go", - "validation.go", - "volume.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/storageos/go-api", - importpath = "github.com/storageos/go-api", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/storageos/go-api/netutil:go_default_library", - "//vendor/github.com/storageos/go-api/serror:go_default_library", - "//vendor/github.com/storageos/go-api/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/storageos/go-api/netutil:all-srcs", - "//vendor/github.com/storageos/go-api/serror:all-srcs", - "//vendor/github.com/storageos/go-api/types:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/storageos/go-api/netutil/BUILD b/vendor/github.com/storageos/go-api/netutil/BUILD deleted file mode 100644 index 3fec107c645e2..0000000000000 --- a/vendor/github.com/storageos/go-api/netutil/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "errors.go", - "netutil.go", - "parsers.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/storageos/go-api/netutil", - importpath = "github.com/storageos/go-api/netutil", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/storageos/go-api/serror:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/storageos/go-api/serror/BUILD b/vendor/github.com/storageos/go-api/serror/BUILD deleted file mode 100644 index 1f41af7ed221a..0000000000000 --- a/vendor/github.com/storageos/go-api/serror/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "error_kind.go", - "kind_lookup_map.go", - "storageos_error.go", - "storageoserrorkind_string.go", - "typed_error.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/storageos/go-api/serror", - importpath = "github.com/storageos/go-api/serror", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/storageos/go-api/types/BUILD b/vendor/github.com/storageos/go-api/types/BUILD deleted file mode 100644 index 02b1afff3f0f4..0000000000000 --- a/vendor/github.com/storageos/go-api/types/BUILD +++ /dev/null @@ -1,51 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "auth.go", - "capacity_stats.go", - "connectivity.go", - "delete_options.go", - "deployment.go", - "driver_instance.go", - "error_response.go", - "events.go", - "health.go", - "list_options.go", - "logger.go", - "namespace.go", - "node.go", - "node_update_options.go", - "operator.go", - "policy.go", - "pool.go", - "pool_options.go", - "rule.go", - "template.go", - "template_create_options.go", - "user.go", - "version.go", - "volume.go", - "volume_create_options.go", - "volume_stats.go", - "volume_update_options.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/storageos/go-api/types", - importpath = "github.com/storageos/go-api/types", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/stretchr/objx/BUILD b/vendor/github.com/stretchr/objx/BUILD deleted file mode 100644 index d36bce95f168a..0000000000000 --- a/vendor/github.com/stretchr/objx/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "accessors.go", - "conversions.go", - "doc.go", - "map.go", - "mutations.go", - "security.go", - "tests.go", - "type_specific.go", - "type_specific_codegen.go", - "value.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/stretchr/objx", - importpath = "github.com/stretchr/objx", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/stretchr/testify/assert/BUILD b/vendor/github.com/stretchr/testify/assert/BUILD deleted file mode 100644 index c675c739d1b86..0000000000000 --- a/vendor/github.com/stretchr/testify/assert/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "assertion_format.go", - "assertion_forward.go", - "assertion_order.go", - "assertions.go", - "doc.go", - "errors.go", - "forward_assertions.go", - "http_assertions.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/stretchr/testify/assert", - importpath = "github.com/stretchr/testify/assert", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/davecgh/go-spew/spew:go_default_library", - "//vendor/github.com/pmezard/go-difflib/difflib:go_default_library", - "//vendor/gopkg.in/yaml.v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/stretchr/testify/mock/BUILD b/vendor/github.com/stretchr/testify/mock/BUILD deleted file mode 100644 index 9430500cbff52..0000000000000 --- a/vendor/github.com/stretchr/testify/mock/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "mock.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/stretchr/testify/mock", - importpath = "github.com/stretchr/testify/mock", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/davecgh/go-spew/spew:go_default_library", - "//vendor/github.com/pmezard/go-difflib/difflib:go_default_library", - "//vendor/github.com/stretchr/objx:go_default_library", - "//vendor/github.com/stretchr/testify/assert:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/stretchr/testify/require/BUILD b/vendor/github.com/stretchr/testify/require/BUILD deleted file mode 100644 index 456b0baf79da6..0000000000000 --- a/vendor/github.com/stretchr/testify/require/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "forward_requirements.go", - "require.go", - "require_forward.go", - "requirements.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/stretchr/testify/require", - importpath = "github.com/stretchr/testify/require", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/stretchr/testify/assert:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/syndtr/gocapability/capability/BUILD b/vendor/github.com/syndtr/gocapability/capability/BUILD deleted file mode 100644 index f90a25bf14d7a..0000000000000 --- a/vendor/github.com/syndtr/gocapability/capability/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "capability.go", - "capability_linux.go", - "capability_noop.go", - "enum.go", - "enum_gen.go", - "syscall_linux.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/syndtr/gocapability/capability", - importpath = "github.com/syndtr/gocapability/capability", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/thecodeteam/goscaleio/BUILD b/vendor/github.com/thecodeteam/goscaleio/BUILD deleted file mode 100644 index 19460ee186f74..0000000000000 --- a/vendor/github.com/thecodeteam/goscaleio/BUILD +++ /dev/null @@ -1,43 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "certs.go", - "device.go", - "instance.go", - "protectiondomain.go", - "scsiinitiator.go", - "sdc.go", - "sds.go", - "storagepool.go", - "system.go", - "user.go", - "volume.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/thecodeteam/goscaleio", - importpath = "github.com/thecodeteam/goscaleio", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/github.com/thecodeteam/goscaleio/types/v1:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/thecodeteam/goscaleio/types/v1:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/thecodeteam/goscaleio/types/v1/BUILD b/vendor/github.com/thecodeteam/goscaleio/types/v1/BUILD deleted file mode 100644 index 0461664988ff8..0000000000000 --- a/vendor/github.com/thecodeteam/goscaleio/types/v1/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["types.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/thecodeteam/goscaleio/types/v1", - importpath = "github.com/thecodeteam/goscaleio/types/v1", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/tmc/grpc-websocket-proxy/wsproxy/BUILD b/vendor/github.com/tmc/grpc-websocket-proxy/wsproxy/BUILD deleted file mode 100644 index 452ce98a42472..0000000000000 --- a/vendor/github.com/tmc/grpc-websocket-proxy/wsproxy/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "websocket_proxy.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/tmc/grpc-websocket-proxy/wsproxy", - importpath = "github.com/tmc/grpc-websocket-proxy/wsproxy", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gorilla/websocket:go_default_library", - "//vendor/github.com/sirupsen/logrus:go_default_library", - "//vendor/golang.org/x/net/context:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vishvananda/netlink/BUILD b/vendor/github.com/vishvananda/netlink/BUILD deleted file mode 100644 index 0154865f3fe27..0000000000000 --- a/vendor/github.com/vishvananda/netlink/BUILD +++ /dev/null @@ -1,127 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "addr.go", - "addr_linux.go", - "bpf_linux.go", - "bridge_linux.go", - "class.go", - "class_linux.go", - "conntrack_linux.go", - "conntrack_unspecified.go", - "devlink_linux.go", - "filter.go", - "filter_linux.go", - "fou.go", - "fou_linux.go", - "fou_unspecified.go", - "genetlink_linux.go", - "genetlink_unspecified.go", - "gtp_linux.go", - "handle_linux.go", - "handle_unspecified.go", - "ioctl_linux.go", - "link.go", - "link_linux.go", - "link_tuntap_linux.go", - "neigh.go", - "neigh_linux.go", - "netlink.go", - "netlink_linux.go", - "netlink_unspecified.go", - "netns_linux.go", - "netns_unspecified.go", - "order.go", - "protinfo.go", - "protinfo_linux.go", - "qdisc.go", - "qdisc_linux.go", - "rdma_link_linux.go", - "route.go", - "route_linux.go", - "route_unspecified.go", - "rule.go", - "rule_linux.go", - "socket.go", - "socket_linux.go", - "xfrm.go", - "xfrm_monitor_linux.go", - "xfrm_policy.go", - "xfrm_policy_linux.go", - "xfrm_state.go", - "xfrm_state_linux.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vishvananda/netlink", - importpath = "github.com/vishvananda/netlink", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vishvananda/netlink/nl:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "@io_bazel_rules_go//go/platform:illumos": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "@io_bazel_rules_go//go/platform:js": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "@io_bazel_rules_go//go/platform:nacl": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "@io_bazel_rules_go//go/platform:plan9": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/vishvananda/netlink/nl:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vishvananda/netlink/nl/BUILD b/vendor/github.com/vishvananda/netlink/nl/BUILD deleted file mode 100644 index cdf3a1e41ffba..0000000000000 --- a/vendor/github.com/vishvananda/netlink/nl/BUILD +++ /dev/null @@ -1,54 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "addr_linux.go", - "bridge_linux.go", - "conntrack_linux.go", - "devlink_linux.go", - "genetlink_linux.go", - "link_linux.go", - "mpls_linux.go", - "nl_linux.go", - "nl_unspecified.go", - "rdma_link_linux.go", - "route_linux.go", - "seg6_linux.go", - "seg6local_linux.go", - "syscall.go", - "tc_linux.go", - "xfrm_linux.go", - "xfrm_monitor_linux.go", - "xfrm_policy_linux.go", - "xfrm_state_linux.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vishvananda/netlink/nl", - importpath = "github.com/vishvananda/netlink/nl", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/vishvananda/netns:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vishvananda/netns/BUILD b/vendor/github.com/vishvananda/netns/BUILD deleted file mode 100644 index 057dd7bc88bb8..0000000000000 --- a/vendor/github.com/vishvananda/netns/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "netns.go", - "netns_linux.go", - "netns_unspecified.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vishvananda/netns", - importpath = "github.com/vishvananda/netns", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/sys/unix:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/BUILD b/vendor/github.com/vmware/govmomi/BUILD deleted file mode 100644 index f09517ddbaa9c..0000000000000 --- a/vendor/github.com/vmware/govmomi/BUILD +++ /dev/null @@ -1,48 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["client.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi", - importpath = "github.com/vmware/govmomi", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/property:go_default_library", - "//vendor/github.com/vmware/govmomi/session:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/vmware/govmomi/find:all-srcs", - "//vendor/github.com/vmware/govmomi/list:all-srcs", - "//vendor/github.com/vmware/govmomi/lookup:all-srcs", - "//vendor/github.com/vmware/govmomi/nfc:all-srcs", - "//vendor/github.com/vmware/govmomi/object:all-srcs", - "//vendor/github.com/vmware/govmomi/pbm:all-srcs", - "//vendor/github.com/vmware/govmomi/property:all-srcs", - "//vendor/github.com/vmware/govmomi/session:all-srcs", - "//vendor/github.com/vmware/govmomi/simulator:all-srcs", - "//vendor/github.com/vmware/govmomi/sts:all-srcs", - "//vendor/github.com/vmware/govmomi/task:all-srcs", - "//vendor/github.com/vmware/govmomi/vapi/internal:all-srcs", - "//vendor/github.com/vmware/govmomi/vapi/rest:all-srcs", - "//vendor/github.com/vmware/govmomi/vapi/simulator:all-srcs", - "//vendor/github.com/vmware/govmomi/vapi/tags:all-srcs", - "//vendor/github.com/vmware/govmomi/vim25:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/find/BUILD b/vendor/github.com/vmware/govmomi/find/BUILD deleted file mode 100644 index e7eca197743d3..0000000000000 --- a/vendor/github.com/vmware/govmomi/find/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "error.go", - "finder.go", - "recurser.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/find", - importpath = "github.com/vmware/govmomi/find", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/list:go_default_library", - "//vendor/github.com/vmware/govmomi/object:go_default_library", - "//vendor/github.com/vmware/govmomi/property:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/mo:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/list/BUILD b/vendor/github.com/vmware/govmomi/list/BUILD deleted file mode 100644 index d89684ad86e14..0000000000000 --- a/vendor/github.com/vmware/govmomi/list/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "lister.go", - "path.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/list", - importpath = "github.com/vmware/govmomi/list", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/property:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/mo:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/lookup/BUILD b/vendor/github.com/vmware/govmomi/lookup/BUILD deleted file mode 100644 index 664b465796b73..0000000000000 --- a/vendor/github.com/vmware/govmomi/lookup/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["client.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/lookup", - importpath = "github.com/vmware/govmomi/lookup", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/lookup/methods:go_default_library", - "//vendor/github.com/vmware/govmomi/lookup/types:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/vmware/govmomi/lookup/methods:all-srcs", - "//vendor/github.com/vmware/govmomi/lookup/simulator:all-srcs", - "//vendor/github.com/vmware/govmomi/lookup/types:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/lookup/methods/BUILD b/vendor/github.com/vmware/govmomi/lookup/methods/BUILD deleted file mode 100644 index 34d58172449d0..0000000000000 --- a/vendor/github.com/vmware/govmomi/lookup/methods/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["methods.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/lookup/methods", - importpath = "github.com/vmware/govmomi/lookup/methods", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/lookup/types:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/lookup/simulator/BUILD b/vendor/github.com/vmware/govmomi/lookup/simulator/BUILD deleted file mode 100644 index c81e04ab0f78c..0000000000000 --- a/vendor/github.com/vmware/govmomi/lookup/simulator/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "registration_info.go", - "simulator.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/lookup/simulator", - importpath = "github.com/vmware/govmomi/lookup/simulator", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/uuid:go_default_library", - "//vendor/github.com/vmware/govmomi/lookup:go_default_library", - "//vendor/github.com/vmware/govmomi/lookup/methods:go_default_library", - "//vendor/github.com/vmware/govmomi/lookup/types:go_default_library", - "//vendor/github.com/vmware/govmomi/simulator:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/lookup/types/BUILD b/vendor/github.com/vmware/govmomi/lookup/types/BUILD deleted file mode 100644 index adba9e8bef0f7..0000000000000 --- a/vendor/github.com/vmware/govmomi/lookup/types/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["types.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/lookup/types", - importpath = "github.com/vmware/govmomi/lookup/types", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/vmware/govmomi/vim25/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/nfc/BUILD b/vendor/github.com/vmware/govmomi/nfc/BUILD deleted file mode 100644 index 29f53191bd347..0000000000000 --- a/vendor/github.com/vmware/govmomi/nfc/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "lease.go", - "lease_updater.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/nfc", - importpath = "github.com/vmware/govmomi/nfc", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/property:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/methods:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/mo:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/progress:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/object/BUILD b/vendor/github.com/vmware/govmomi/object/BUILD deleted file mode 100644 index b9dd3fcc88985..0000000000000 --- a/vendor/github.com/vmware/govmomi/object/BUILD +++ /dev/null @@ -1,88 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "authorization_manager.go", - "authorization_manager_internal.go", - "cluster_compute_resource.go", - "common.go", - "compute_resource.go", - "custom_fields_manager.go", - "customization_spec_manager.go", - "datacenter.go", - "datastore.go", - "datastore_file.go", - "datastore_file_manager.go", - "datastore_path.go", - "diagnostic_log.go", - "diagnostic_manager.go", - "distributed_virtual_portgroup.go", - "distributed_virtual_switch.go", - "extension_manager.go", - "file_manager.go", - "folder.go", - "history_collector.go", - "host_account_manager.go", - "host_certificate_info.go", - "host_certificate_manager.go", - "host_config_manager.go", - "host_datastore_browser.go", - "host_datastore_system.go", - "host_date_time_system.go", - "host_firewall_system.go", - "host_network_system.go", - "host_service_system.go", - "host_storage_system.go", - "host_system.go", - "host_virtual_nic_manager.go", - "host_vsan_internal_system.go", - "host_vsan_system.go", - "namespace_manager.go", - "network.go", - "network_reference.go", - "opaque_network.go", - "option_manager.go", - "resource_pool.go", - "search_index.go", - "storage_pod.go", - "storage_resource_manager.go", - "task.go", - "types.go", - "virtual_app.go", - "virtual_device_list.go", - "virtual_disk_manager.go", - "virtual_disk_manager_internal.go", - "virtual_machine.go", - "vmware_distributed_virtual_switch.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/object", - importpath = "github.com/vmware/govmomi/object", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/nfc:go_default_library", - "//vendor/github.com/vmware/govmomi/property:go_default_library", - "//vendor/github.com/vmware/govmomi/session:go_default_library", - "//vendor/github.com/vmware/govmomi/task:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/methods:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/mo:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/progress:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/pbm/BUILD b/vendor/github.com/vmware/govmomi/pbm/BUILD deleted file mode 100644 index 182f2ac6f86cb..0000000000000 --- a/vendor/github.com/vmware/govmomi/pbm/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "pbm_util.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/pbm", - importpath = "github.com/vmware/govmomi/pbm", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/pbm/methods:go_default_library", - "//vendor/github.com/vmware/govmomi/pbm/types:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/vmware/govmomi/pbm/methods:all-srcs", - "//vendor/github.com/vmware/govmomi/pbm/types:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/pbm/methods/BUILD b/vendor/github.com/vmware/govmomi/pbm/methods/BUILD deleted file mode 100644 index 3ba9aeaae868b..0000000000000 --- a/vendor/github.com/vmware/govmomi/pbm/methods/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["methods.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/pbm/methods", - importpath = "github.com/vmware/govmomi/pbm/methods", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/pbm/types:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/pbm/types/BUILD b/vendor/github.com/vmware/govmomi/pbm/types/BUILD deleted file mode 100644 index 88c37dd17745d..0000000000000 --- a/vendor/github.com/vmware/govmomi/pbm/types/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "enum.go", - "if.go", - "types.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/pbm/types", - importpath = "github.com/vmware/govmomi/pbm/types", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/vmware/govmomi/vim25/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/property/BUILD b/vendor/github.com/vmware/govmomi/property/BUILD deleted file mode 100644 index f41b46a2721b6..0000000000000 --- a/vendor/github.com/vmware/govmomi/property/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "collector.go", - "filter.go", - "wait.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/property", - importpath = "github.com/vmware/govmomi/property", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/vim25:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/methods:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/mo:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/session/BUILD b/vendor/github.com/vmware/govmomi/session/BUILD deleted file mode 100644 index acadfcb97dacd..0000000000000 --- a/vendor/github.com/vmware/govmomi/session/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "keep_alive.go", - "manager.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/session", - importpath = "github.com/vmware/govmomi/session", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/property:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/methods:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/mo:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/simulator/BUILD b/vendor/github.com/vmware/govmomi/simulator/BUILD deleted file mode 100644 index 498ec1a32fade..0000000000000 --- a/vendor/github.com/vmware/govmomi/simulator/BUILD +++ /dev/null @@ -1,88 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "authorization_manager.go", - "cluster_compute_resource.go", - "container.go", - "custom_fields_manager.go", - "datacenter.go", - "datastore.go", - "doc.go", - "dvs.go", - "entity.go", - "environment_browser.go", - "event_manager.go", - "file_manager.go", - "folder.go", - "guest_id.go", - "host_datastore_browser.go", - "host_datastore_system.go", - "host_firewall_system.go", - "host_local_account_manager.go", - "host_network_system.go", - "host_system.go", - "ip_pool_manager.go", - "license_manager.go", - "model.go", - "object.go", - "option_manager.go", - "os_unix.go", - "os_windows.go", - "performance_manager.go", - "portgroup.go", - "property_collector.go", - "property_filter.go", - "registry.go", - "resource_pool.go", - "search_index.go", - "service_instance.go", - "session_manager.go", - "simulator.go", - "snapshot.go", - "storage_resource_manager.go", - "task.go", - "task_manager.go", - "user_directory.go", - "view_manager.go", - "virtual_disk_manager.go", - "virtual_machine.go", - "vstorage_object_manager.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/simulator", - importpath = "github.com/vmware/govmomi/simulator", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/uuid:go_default_library", - "//vendor/github.com/vmware/govmomi/find:go_default_library", - "//vendor/github.com/vmware/govmomi/object:go_default_library", - "//vendor/github.com/vmware/govmomi/session:go_default_library", - "//vendor/github.com/vmware/govmomi/simulator/esx:go_default_library", - "//vendor/github.com/vmware/govmomi/simulator/vpx:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/methods:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/mo:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/xml:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/vmware/govmomi/simulator/esx:all-srcs", - "//vendor/github.com/vmware/govmomi/simulator/vpx:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/simulator/esx/BUILD b/vendor/github.com/vmware/govmomi/simulator/esx/BUILD deleted file mode 100644 index 12f0fe6b5c882..0000000000000 --- a/vendor/github.com/vmware/govmomi/simulator/esx/BUILD +++ /dev/null @@ -1,45 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "authorization_manager.go", - "datacenter.go", - "doc.go", - "event_manager.go", - "host_config_info.go", - "host_firewall_system.go", - "host_hardware_info.go", - "host_storage_device_info.go", - "host_system.go", - "performance_manager.go", - "performance_manager_data.go", - "resource_pool.go", - "root_folder.go", - "service_content.go", - "setting.go", - "task_manager.go", - "virtual_device.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/simulator/esx", - importpath = "github.com/vmware/govmomi/simulator/esx", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/vim25/mo:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/simulator/vpx/BUILD b/vendor/github.com/vmware/govmomi/simulator/vpx/BUILD deleted file mode 100644 index 98ea6116900b1..0000000000000 --- a/vendor/github.com/vmware/govmomi/simulator/vpx/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "performance_manager.go", - "performance_manager_data.go", - "root_folder.go", - "service_content.go", - "setting.go", - "task_manager.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/simulator/vpx", - importpath = "github.com/vmware/govmomi/simulator/vpx", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/vim25/mo:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/sts/BUILD b/vendor/github.com/vmware/govmomi/sts/BUILD deleted file mode 100644 index 7d49afde1bd3e..0000000000000 --- a/vendor/github.com/vmware/govmomi/sts/BUILD +++ /dev/null @@ -1,40 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "signer.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/sts", - importpath = "github.com/vmware/govmomi/sts", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/uuid:go_default_library", - "//vendor/github.com/vmware/govmomi/lookup:go_default_library", - "//vendor/github.com/vmware/govmomi/lookup/types:go_default_library", - "//vendor/github.com/vmware/govmomi/sts/internal:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/methods:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/xml:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/vmware/govmomi/sts/internal:all-srcs", - "//vendor/github.com/vmware/govmomi/sts/simulator:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/sts/internal/BUILD b/vendor/github.com/vmware/govmomi/sts/internal/BUILD deleted file mode 100644 index b038a88129ac6..0000000000000 --- a/vendor/github.com/vmware/govmomi/sts/internal/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["types.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/sts/internal", - importpath = "github.com/vmware/govmomi/sts/internal", - visibility = ["//vendor/github.com/vmware/govmomi/sts:__subpackages__"], - deps = [ - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/xml:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/sts/simulator/BUILD b/vendor/github.com/vmware/govmomi/sts/simulator/BUILD deleted file mode 100644 index 1324ef4b34d4f..0000000000000 --- a/vendor/github.com/vmware/govmomi/sts/simulator/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["simulator.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/sts/simulator", - importpath = "github.com/vmware/govmomi/sts/simulator", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/sts/internal:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/task/BUILD b/vendor/github.com/vmware/govmomi/task/BUILD deleted file mode 100644 index 3eb3ff61d3fe8..0000000000000 --- a/vendor/github.com/vmware/govmomi/task/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "error.go", - "wait.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/task", - importpath = "github.com/vmware/govmomi/task", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/property:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/progress:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/vapi/internal/BUILD b/vendor/github.com/vmware/govmomi/vapi/internal/BUILD deleted file mode 100644 index f04058b9025a3..0000000000000 --- a/vendor/github.com/vmware/govmomi/vapi/internal/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["internal.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/vapi/internal", - importpath = "github.com/vmware/govmomi/vapi/internal", - visibility = ["//vendor/github.com/vmware/govmomi/vapi:__subpackages__"], - deps = [ - "//vendor/github.com/vmware/govmomi/vim25/mo:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/vapi/rest/BUILD b/vendor/github.com/vmware/govmomi/vapi/rest/BUILD deleted file mode 100644 index 2004583df0a22..0000000000000 --- a/vendor/github.com/vmware/govmomi/vapi/rest/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["client.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/vapi/rest", - importpath = "github.com/vmware/govmomi/vapi/rest", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/vapi/internal:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/vapi/simulator/BUILD b/vendor/github.com/vmware/govmomi/vapi/simulator/BUILD deleted file mode 100644 index f98c9186009ea..0000000000000 --- a/vendor/github.com/vmware/govmomi/vapi/simulator/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["simulator.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/vapi/simulator", - importpath = "github.com/vmware/govmomi/vapi/simulator", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/uuid:go_default_library", - "//vendor/github.com/vmware/govmomi/vapi/internal:go_default_library", - "//vendor/github.com/vmware/govmomi/vapi/tags:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/vapi/tags/BUILD b/vendor/github.com/vmware/govmomi/vapi/tags/BUILD deleted file mode 100644 index d3c2d33bb0964..0000000000000 --- a/vendor/github.com/vmware/govmomi/vapi/tags/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "categories.go", - "tag_association.go", - "tags.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/vapi/tags", - importpath = "github.com/vmware/govmomi/vapi/tags", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/vapi/internal:go_default_library", - "//vendor/github.com/vmware/govmomi/vapi/rest:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/mo:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/vim25/BUILD b/vendor/github.com/vmware/govmomi/vim25/BUILD deleted file mode 100644 index 2e3751243e048..0000000000000 --- a/vendor/github.com/vmware/govmomi/vim25/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "doc.go", - "retry.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/vim25", - importpath = "github.com/vmware/govmomi/vim25", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/vim25/methods:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/github.com/vmware/govmomi/vim25/debug:all-srcs", - "//vendor/github.com/vmware/govmomi/vim25/methods:all-srcs", - "//vendor/github.com/vmware/govmomi/vim25/mo:all-srcs", - "//vendor/github.com/vmware/govmomi/vim25/progress:all-srcs", - "//vendor/github.com/vmware/govmomi/vim25/soap:all-srcs", - "//vendor/github.com/vmware/govmomi/vim25/types:all-srcs", - "//vendor/github.com/vmware/govmomi/vim25/xml:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/vim25/debug/BUILD b/vendor/github.com/vmware/govmomi/vim25/debug/BUILD deleted file mode 100644 index 3221d27cbe2df..0000000000000 --- a/vendor/github.com/vmware/govmomi/vim25/debug/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["debug.go"], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/vim25/debug", - importpath = "github.com/vmware/govmomi/vim25/debug", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/vim25/methods/BUILD b/vendor/github.com/vmware/govmomi/vim25/methods/BUILD deleted file mode 100644 index 394acf607f004..0000000000000 --- a/vendor/github.com/vmware/govmomi/vim25/methods/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "methods.go", - "service_content.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/vim25/methods", - importpath = "github.com/vmware/govmomi/vim25/methods", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/vim25/mo/BUILD b/vendor/github.com/vmware/govmomi/vim25/mo/BUILD deleted file mode 100644 index d55915f793764..0000000000000 --- a/vendor/github.com/vmware/govmomi/vim25/mo/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ancestors.go", - "entity.go", - "extra.go", - "mo.go", - "reference.go", - "registry.go", - "retrieve.go", - "type_info.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/vim25/mo", - importpath = "github.com/vmware/govmomi/vim25/mo", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/vim25/methods:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/soap:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/vim25/progress/BUILD b/vendor/github.com/vmware/govmomi/vim25/progress/BUILD deleted file mode 100644 index d3aa1cf0ed571..0000000000000 --- a/vendor/github.com/vmware/govmomi/vim25/progress/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "aggregator.go", - "doc.go", - "prefix.go", - "reader.go", - "report.go", - "scale.go", - "sinker.go", - "tee.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/vim25/progress", - importpath = "github.com/vmware/govmomi/vim25/progress", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/vim25/soap/BUILD b/vendor/github.com/vmware/govmomi/vim25/soap/BUILD deleted file mode 100644 index db42ce6e3587d..0000000000000 --- a/vendor/github.com/vmware/govmomi/vim25/soap/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "debug.go", - "error.go", - "soap.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/vim25/soap", - importpath = "github.com/vmware/govmomi/vim25/soap", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/vmware/govmomi/vim25/debug:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/progress:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/types:go_default_library", - "//vendor/github.com/vmware/govmomi/vim25/xml:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/vim25/types/BUILD b/vendor/github.com/vmware/govmomi/vim25/types/BUILD deleted file mode 100644 index 77ea6c4e20eca..0000000000000 --- a/vendor/github.com/vmware/govmomi/vim25/types/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "base.go", - "enum.go", - "fault.go", - "helpers.go", - "if.go", - "registry.go", - "types.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/vim25/types", - importpath = "github.com/vmware/govmomi/vim25/types", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/vmware/govmomi/vim25/xml/BUILD b/vendor/github.com/vmware/govmomi/vim25/xml/BUILD deleted file mode 100644 index e6ec69c45d7fe..0000000000000 --- a/vendor/github.com/vmware/govmomi/vim25/xml/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "extras.go", - "marshal.go", - "read.go", - "typeinfo.go", - "xml.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/vmware/govmomi/vim25/xml", - importpath = "github.com/vmware/govmomi/vim25/xml", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/github.com/xiang90/probing/BUILD b/vendor/github.com/xiang90/probing/BUILD deleted file mode 100644 index 5a001468b44ff..0000000000000 --- a/vendor/github.com/xiang90/probing/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "prober.go", - "server.go", - "status.go", - ], - importmap = "k8s.io/kubernetes/vendor/github.com/xiang90/probing", - importpath = "github.com/xiang90/probing", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/bbolt/BUILD b/vendor/go.etcd.io/bbolt/BUILD deleted file mode 100644 index 53c3dfc46b9ac..0000000000000 --- a/vendor/go.etcd.io/bbolt/BUILD +++ /dev/null @@ -1,61 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bolt_386.go", - "bolt_amd64.go", - "bolt_arm.go", - "bolt_arm64.go", - "bolt_linux.go", - "bolt_mips64x.go", - "bolt_mipsx.go", - "bolt_openbsd.go", - "bolt_ppc64.go", - "bolt_ppc64le.go", - "bolt_riscv64.go", - "bolt_s390x.go", - "bolt_unix.go", - "bolt_unix_aix.go", - "bolt_unix_solaris.go", - "bolt_windows.go", - "boltsync_unix.go", - "bucket.go", - "cursor.go", - "db.go", - "doc.go", - "errors.go", - "freelist.go", - "freelist_hmap.go", - "node.go", - "page.go", - "tx.go", - "unsafe.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/bbolt", - importpath = "go.etcd.io/bbolt", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/auth/BUILD b/vendor/go.etcd.io/etcd/auth/BUILD deleted file mode 100644 index 1f00bba7213b3..0000000000000 --- a/vendor/go.etcd.io/etcd/auth/BUILD +++ /dev/null @@ -1,50 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "jwt.go", - "metrics.go", - "nop.go", - "options.go", - "range_perm_cache.go", - "simple_token.go", - "store.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/auth", - importpath = "go.etcd.io/etcd/auth", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/dgrijalva/jwt-go:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/go.etcd.io/etcd/auth/authpb:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/backend:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/adt:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - "//vendor/golang.org/x/crypto/bcrypt:go_default_library", - "//vendor/google.golang.org/grpc/credentials:go_default_library", - "//vendor/google.golang.org/grpc/metadata:go_default_library", - "//vendor/google.golang.org/grpc/peer:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/auth/authpb:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/auth/authpb/BUILD b/vendor/go.etcd.io/etcd/auth/authpb/BUILD deleted file mode 100644 index cd8b94c146cdd..0000000000000 --- a/vendor/go.etcd.io/etcd/auth/authpb/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["auth.pb.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/auth/authpb", - importpath = "go.etcd.io/etcd/auth/authpb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/client/BUILD b/vendor/go.etcd.io/etcd/client/BUILD deleted file mode 100644 index 27a4d441e9f5d..0000000000000 --- a/vendor/go.etcd.io/etcd/client/BUILD +++ /dev/null @@ -1,44 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "auth_role.go", - "auth_user.go", - "cancelreq.go", - "client.go", - "cluster_error.go", - "curl.go", - "discover.go", - "doc.go", - "json.go", - "keys.go", - "members.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/client", - importpath = "go.etcd.io/etcd/client", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/json-iterator/go:go_default_library", - "//vendor/github.com/modern-go/reflect2:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/pathutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/srv:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.etcd.io/etcd/version:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/clientv3/BUILD b/vendor/go.etcd.io/etcd/clientv3/BUILD deleted file mode 100644 index 613a97106538f..0000000000000 --- a/vendor/go.etcd.io/etcd/clientv3/BUILD +++ /dev/null @@ -1,73 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "auth.go", - "client.go", - "cluster.go", - "compact_op.go", - "compare.go", - "config.go", - "ctx.go", - "doc.go", - "kv.go", - "lease.go", - "logger.go", - "maintenance.go", - "op.go", - "options.go", - "retry.go", - "retry_interceptor.go", - "sort.go", - "txn.go", - "utils.go", - "watch.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/clientv3", - importpath = "go.etcd.io/etcd/clientv3", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/google/uuid:go_default_library", - "//vendor/go.etcd.io/etcd/auth/authpb:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3/balancer:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3/balancer/picker:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3/balancer/resolver/endpoint:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3/credentials:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/mvccpb:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/logutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.etcd.io/etcd/version:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/credentials:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - "//vendor/google.golang.org/grpc/keepalive:go_default_library", - "//vendor/google.golang.org/grpc/metadata:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/clientv3/balancer:all-srcs", - "//vendor/go.etcd.io/etcd/clientv3/concurrency:all-srcs", - "//vendor/go.etcd.io/etcd/clientv3/credentials:all-srcs", - "//vendor/go.etcd.io/etcd/clientv3/namespace:all-srcs", - "//vendor/go.etcd.io/etcd/clientv3/naming:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/clientv3/balancer/BUILD b/vendor/go.etcd.io/etcd/clientv3/balancer/BUILD deleted file mode 100644 index 5e7c111cfb6aa..0000000000000 --- a/vendor/go.etcd.io/etcd/clientv3/balancer/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "balancer.go", - "utils.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/clientv3/balancer", - importpath = "go.etcd.io/etcd/clientv3/balancer", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/clientv3/balancer/connectivity:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3/balancer/picker:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - "//vendor/google.golang.org/grpc/balancer:go_default_library", - "//vendor/google.golang.org/grpc/connectivity:go_default_library", - "//vendor/google.golang.org/grpc/resolver:go_default_library", - "//vendor/google.golang.org/grpc/resolver/dns:go_default_library", - "//vendor/google.golang.org/grpc/resolver/passthrough:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/clientv3/balancer/connectivity:all-srcs", - "//vendor/go.etcd.io/etcd/clientv3/balancer/picker:all-srcs", - "//vendor/go.etcd.io/etcd/clientv3/balancer/resolver/endpoint:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/clientv3/balancer/connectivity/BUILD b/vendor/go.etcd.io/etcd/clientv3/balancer/connectivity/BUILD deleted file mode 100644 index 5e6e85f34741f..0000000000000 --- a/vendor/go.etcd.io/etcd/clientv3/balancer/connectivity/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["connectivity.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/clientv3/balancer/connectivity", - importpath = "go.etcd.io/etcd/clientv3/balancer/connectivity", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.uber.org/zap:go_default_library", - "//vendor/google.golang.org/grpc/connectivity:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/clientv3/balancer/picker/BUILD b/vendor/go.etcd.io/etcd/clientv3/balancer/picker/BUILD deleted file mode 100644 index 6a037c75186f1..0000000000000 --- a/vendor/go.etcd.io/etcd/clientv3/balancer/picker/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "err.go", - "picker.go", - "roundrobin_balanced.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/clientv3/balancer/picker", - importpath = "go.etcd.io/etcd/clientv3/balancer/picker", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.uber.org/zap:go_default_library", - "//vendor/go.uber.org/zap/zapcore:go_default_library", - "//vendor/google.golang.org/grpc/balancer:go_default_library", - "//vendor/google.golang.org/grpc/resolver:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/clientv3/balancer/resolver/endpoint/BUILD b/vendor/go.etcd.io/etcd/clientv3/balancer/resolver/endpoint/BUILD deleted file mode 100644 index 6780b5be42a99..0000000000000 --- a/vendor/go.etcd.io/etcd/clientv3/balancer/resolver/endpoint/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["endpoint.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/clientv3/balancer/resolver/endpoint", - importpath = "go.etcd.io/etcd/clientv3/balancer/resolver/endpoint", - visibility = ["//visibility:public"], - deps = ["//vendor/google.golang.org/grpc/resolver:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/clientv3/concurrency/BUILD b/vendor/go.etcd.io/etcd/clientv3/concurrency/BUILD deleted file mode 100644 index 01431c6fd9a83..0000000000000 --- a/vendor/go.etcd.io/etcd/clientv3/concurrency/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "election.go", - "key.go", - "mutex.go", - "session.go", - "stm.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/clientv3/concurrency", - importpath = "go.etcd.io/etcd/clientv3/concurrency", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/clientv3:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/mvccpb:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/clientv3/credentials/BUILD b/vendor/go.etcd.io/etcd/clientv3/credentials/BUILD deleted file mode 100644 index 750c5dadd8713..0000000000000 --- a/vendor/go.etcd.io/etcd/clientv3/credentials/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["credentials.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/clientv3/credentials", - importpath = "go.etcd.io/etcd/clientv3/credentials", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/clientv3/balancer/resolver/endpoint:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes:go_default_library", - "//vendor/google.golang.org/grpc/credentials:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/clientv3/namespace/BUILD b/vendor/go.etcd.io/etcd/clientv3/namespace/BUILD deleted file mode 100644 index 514ecb42227fe..0000000000000 --- a/vendor/go.etcd.io/etcd/clientv3/namespace/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "kv.go", - "lease.go", - "util.go", - "watch.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/clientv3/namespace", - importpath = "go.etcd.io/etcd/clientv3/namespace", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/clientv3:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/clientv3/naming/BUILD b/vendor/go.etcd.io/etcd/clientv3/naming/BUILD deleted file mode 100644 index b0834930626da..0000000000000 --- a/vendor/go.etcd.io/etcd/clientv3/naming/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "grpc.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/clientv3/naming", - importpath = "go.etcd.io/etcd/clientv3/naming", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/clientv3:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/naming:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/embed/BUILD b/vendor/go.etcd.io/etcd/embed/BUILD deleted file mode 100644 index 099262ba8c49c..0000000000000 --- a/vendor/go.etcd.io/etcd/embed/BUILD +++ /dev/null @@ -1,76 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "config.go", - "config_logging.go", - "config_logging_journal_unix.go", - "config_logging_journal_windows.go", - "doc.go", - "etcd.go", - "serve.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/embed", - importpath = "go.etcd.io/etcd/embed", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/grpc-ecosystem/go-grpc-prometheus:go_default_library", - "//vendor/github.com/grpc-ecosystem/grpc-gateway/runtime:go_default_library", - "//vendor/github.com/soheilhy/cmux:go_default_library", - "//vendor/github.com/tmc/grpc-websocket-proxy/wsproxy:go_default_library", - "//vendor/go.etcd.io/bbolt:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3/credentials:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/etcdhttp:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/rafthttp:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2http:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2v3:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3client:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3compactor:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3election:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb/gw:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3lock:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb/gw:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3rpc:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb/gw:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/debugutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/flags:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/httputil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/logutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/netutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/runtime:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/srv:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/tlsutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/transport:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.etcd.io/etcd/version:go_default_library", - "//vendor/go.etcd.io/etcd/wal:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - "//vendor/go.uber.org/zap/zapcore:go_default_library", - "//vendor/golang.org/x/crypto/bcrypt:go_default_library", - "//vendor/golang.org/x/net/trace:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - "//vendor/google.golang.org/grpc/keepalive:go_default_library", - "//vendor/sigs.k8s.io/yaml:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/BUILD b/vendor/go.etcd.io/etcd/etcdserver/BUILD deleted file mode 100644 index 2dee19225c83c..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/BUILD +++ /dev/null @@ -1,94 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "apply.go", - "apply_auth.go", - "apply_v2.go", - "backend.go", - "cluster_util.go", - "config.go", - "consistent_index.go", - "corrupt.go", - "doc.go", - "errors.go", - "metrics.go", - "quota.go", - "raft.go", - "server.go", - "server_access_control.go", - "snapshot_merge.go", - "storage.go", - "util.go", - "v2_server.go", - "v3_server.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver", - importpath = "go.etcd.io/etcd/etcdserver", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/go-semver/semver:go_default_library", - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/dustin/go-humanize:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/go.etcd.io/bbolt:go_default_library", - "//vendor/go.etcd.io/etcd/auth:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/membership:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/rafthttp:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/snap:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2discovery:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2http/httptypes:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2stats:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2store:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3alarm:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3compactor:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/lease:go_default_library", - "//vendor/go.etcd.io/etcd/lease/leasehttp:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/backend:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/mvccpb:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/contention:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/fileutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/idutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/logutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/netutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/pbutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/runtime:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/schedule:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/traceutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/transport:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/wait:go_default_library", - "//vendor/go.etcd.io/etcd/raft:go_default_library", - "//vendor/go.etcd.io/etcd/raft/raftpb:go_default_library", - "//vendor/go.etcd.io/etcd/version:go_default_library", - "//vendor/go.etcd.io/etcd/wal:go_default_library", - "//vendor/go.etcd.io/etcd/wal/walpb:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - "//vendor/go.uber.org/zap/zapcore:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/BUILD deleted file mode 100644 index 20305f4bb567f..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/BUILD +++ /dev/null @@ -1,54 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "capability.go", - "cluster.go", - "doc.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api", - importpath = "go.etcd.io/etcd/etcdserver/api", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/go-semver/semver:go_default_library", - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/membership:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.etcd.io/etcd/version:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/etcdhttp:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/membership:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/rafthttp:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/snap:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2auth:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2discovery:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2error:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2http:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2stats:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2store:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2v3:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3alarm:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3client:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3compactor:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3election:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3lock:all-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3rpc:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/etcdhttp/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/etcdhttp/BUILD deleted file mode 100644 index 3f175d533ef41..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/etcdhttp/BUILD +++ /dev/null @@ -1,46 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "base.go", - "doc.go", - "metrics.go", - "peer.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/etcdhttp", - importpath = "go.etcd.io/etcd/etcdserver/api/etcdhttp", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus/promhttp:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/membership:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/rafthttp:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2error:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2http/httptypes:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/lease/leasehttp:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/logutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.etcd.io/etcd/raft:go_default_library", - "//vendor/go.etcd.io/etcd/version:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/membership/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/membership/BUILD deleted file mode 100644 index 4cbddd12cf6e4..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/membership/BUILD +++ /dev/null @@ -1,44 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cluster.go", - "doc.go", - "errors.go", - "member.go", - "metrics.go", - "store.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/membership", - importpath = "go.etcd.io/etcd/etcdserver/api/membership", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/go-semver/semver:go_default_library", - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2error:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2store:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/backend:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/netutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.etcd.io/etcd/raft:go_default_library", - "//vendor/go.etcd.io/etcd/raft/raftpb:go_default_library", - "//vendor/go.etcd.io/etcd/version:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/rafthttp/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/rafthttp/BUILD deleted file mode 100644 index 97ed3f4ba3a79..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/rafthttp/BUILD +++ /dev/null @@ -1,60 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "coder.go", - "doc.go", - "http.go", - "metrics.go", - "msg_codec.go", - "msgappv2_codec.go", - "peer.go", - "peer_status.go", - "pipeline.go", - "probing_status.go", - "remote.go", - "snapshot_sender.go", - "stream.go", - "transport.go", - "urlpick.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/rafthttp", - importpath = "go.etcd.io/etcd/etcdserver/api/rafthttp", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/go-semver/semver:go_default_library", - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/dustin/go-humanize:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/github.com/xiang90/probing:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/snap:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2stats:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/httputil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/ioutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/logutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/pbutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/transport:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.etcd.io/etcd/raft:go_default_library", - "//vendor/go.etcd.io/etcd/raft/raftpb:go_default_library", - "//vendor/go.etcd.io/etcd/version:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - "//vendor/golang.org/x/time/rate:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/snap/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/snap/BUILD deleted file mode 100644 index 9b531a5b7cb21..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/snap/BUILD +++ /dev/null @@ -1,45 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "db.go", - "doc.go", - "message.go", - "metrics.go", - "snapshotter.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/snap", - importpath = "go.etcd.io/etcd/etcdserver/api/snap", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/dustin/go-humanize:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/snap/snappb:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/fileutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/ioutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/pbutil:go_default_library", - "//vendor/go.etcd.io/etcd/raft:go_default_library", - "//vendor/go.etcd.io/etcd/raft/raftpb:go_default_library", - "//vendor/go.etcd.io/etcd/wal/walpb:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/snap/snappb:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/snap/snappb/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/snap/snappb/BUILD deleted file mode 100644 index 2bbcbe4eb6c32..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/snap/snappb/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["snap.pb.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/snap/snappb", - importpath = "go.etcd.io/etcd/etcdserver/api/snap/snappb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v2auth/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v2auth/BUILD deleted file mode 100644 index 8f2dffd4f02cd..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v2auth/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "auth.go", - "auth_requests.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v2auth", - importpath = "go.etcd.io/etcd/etcdserver/api/v2auth", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2error:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - "//vendor/golang.org/x/crypto/bcrypt:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v2discovery/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v2discovery/BUILD deleted file mode 100644 index 46fbc7c054f1b..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v2discovery/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["discovery.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v2discovery", - importpath = "go.etcd.io/etcd/etcdserver/api/v2discovery", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/jonboulle/clockwork:go_default_library", - "//vendor/go.etcd.io/etcd/client:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/transport:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v2error/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v2error/BUILD deleted file mode 100644 index 8dbebf404aaa2..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v2error/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["error.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v2error", - importpath = "go.etcd.io/etcd/etcdserver/api/v2error", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v2http/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v2http/BUILD deleted file mode 100644 index 121999e32ddb5..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v2http/BUILD +++ /dev/null @@ -1,51 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "capability.go", - "client.go", - "client_auth.go", - "doc.go", - "http.go", - "metrics.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v2http", - importpath = "go.etcd.io/etcd/etcdserver/api/v2http", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/jonboulle/clockwork:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/etcdhttp:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/membership:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2auth:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2error:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2http/httptypes:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2stats:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2store:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/logutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2http/httptypes:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v2http/httptypes/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v2http/httptypes/BUILD deleted file mode 100644 index 96b9dcb597d8f..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v2http/httptypes/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "errors.go", - "member.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v2http/httptypes", - importpath = "go.etcd.io/etcd/etcdserver/api/v2http/httptypes", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v2stats/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v2stats/BUILD deleted file mode 100644 index f982b2f28fedb..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v2stats/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "leader.go", - "queue.go", - "server.go", - "stats.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v2stats", - importpath = "go.etcd.io/etcd/etcdserver/api/v2stats", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/go.etcd.io/etcd/raft:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v2store/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v2store/BUILD deleted file mode 100644 index 494feaa02dab1..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v2store/BUILD +++ /dev/null @@ -1,42 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "event.go", - "event_history.go", - "event_queue.go", - "metrics.go", - "node.go", - "node_extern.go", - "stats.go", - "store.go", - "ttl_key_heap.go", - "watcher.go", - "watcher_hub.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v2store", - importpath = "go.etcd.io/etcd/etcdserver/api/v2store", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/jonboulle/clockwork:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2error:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v2v3/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v2v3/BUILD deleted file mode 100644 index 51b3209e3dc73..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v2v3/BUILD +++ /dev/null @@ -1,43 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cluster.go", - "doc.go", - "server.go", - "store.go", - "watcher.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v2v3", - importpath = "go.etcd.io/etcd/etcdserver/api/v2v3", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/go-semver/semver:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3/concurrency:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/membership:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2error:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2store:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/mvccpb:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v3alarm/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v3alarm/BUILD deleted file mode 100644 index a731b0cbdce7e..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v3alarm/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["alarms.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v3alarm", - importpath = "go.etcd.io/etcd/etcdserver/api/v3alarm", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/backend:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v3client/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v3client/BUILD deleted file mode 100644 index a368b96808648..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v3client/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "v3client.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v3client", - importpath = "go.etcd.io/etcd/etcdserver/api/v3client", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/clientv3:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3rpc:go_default_library", - "//vendor/go.etcd.io/etcd/proxy/grpcproxy/adapter:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v3compactor/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v3compactor/BUILD deleted file mode 100644 index 7fff7300215b8..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v3compactor/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "compactor.go", - "doc.go", - "periodic.go", - "revision.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v3compactor", - importpath = "go.etcd.io/etcd/etcdserver/api/v3compactor", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/jonboulle/clockwork:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v3election/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v3election/BUILD deleted file mode 100644 index ca10223ff87c4..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v3election/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "election.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v3election", - importpath = "go.etcd.io/etcd/etcdserver/api/v3election", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/clientv3:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3/concurrency:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb/BUILD deleted file mode 100644 index d1d7ca040c916..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["v3election.pb.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb", - importpath = "go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/mvccpb:go_default_library", - "//vendor/golang.org/x/net/context:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb/gw:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb/gw/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb/gw/BUILD deleted file mode 100644 index a036ba0326a3c..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb/gw/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["v3election.pb.gw.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb/gw", - importpath = "go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb/gw", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/grpc-ecosystem/grpc-gateway/runtime:go_default_library", - "//vendor/github.com/grpc-ecosystem/grpc-gateway/utilities:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb:go_default_library", - "//vendor/golang.org/x/net/context:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v3lock/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v3lock/BUILD deleted file mode 100644 index 9cc3b7df92715..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v3lock/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "lock.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v3lock", - importpath = "go.etcd.io/etcd/etcdserver/api/v3lock", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/clientv3:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3/concurrency:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb/BUILD deleted file mode 100644 index abbefd080b031..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["v3lock.pb.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb", - importpath = "go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/golang.org/x/net/context:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb/gw:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb/gw/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb/gw/BUILD deleted file mode 100644 index ba8c3ebfb552b..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb/gw/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["v3lock.pb.gw.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb/gw", - importpath = "go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb/gw", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/grpc-ecosystem/grpc-gateway/runtime:go_default_library", - "//vendor/github.com/grpc-ecosystem/grpc-gateway/utilities:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb:go_default_library", - "//vendor/golang.org/x/net/context:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/BUILD deleted file mode 100644 index 923aa7ac85daa..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/BUILD +++ /dev/null @@ -1,71 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "auth.go", - "codec.go", - "grpc.go", - "header.go", - "interceptor.go", - "key.go", - "lease.go", - "maintenance.go", - "member.go", - "metrics.go", - "quota.go", - "util.go", - "watch.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v3rpc", - importpath = "go.etcd.io/etcd/etcdserver/api/v3rpc", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/dustin/go-humanize:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/grpc-ecosystem/go-grpc-middleware:go_default_library", - "//vendor/github.com/grpc-ecosystem/go-grpc-prometheus:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/go.etcd.io/etcd/auth:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3/credentials:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/membership:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/lease:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/backend:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/mvccpb:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/adt:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.etcd.io/etcd/raft:go_default_library", - "//vendor/go.etcd.io/etcd/version:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/health:go_default_library", - "//vendor/google.golang.org/grpc/health/grpc_health_v1:go_default_library", - "//vendor/google.golang.org/grpc/metadata:go_default_library", - "//vendor/google.golang.org/grpc/peer:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes/BUILD b/vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes/BUILD deleted file mode 100644 index 69abbaf4c8ddd..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "error.go", - "md.go", - "metadatafields.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes", - importpath = "go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/etcdserverpb/BUILD b/vendor/go.etcd.io/etcd/etcdserver/etcdserverpb/BUILD deleted file mode 100644 index ce3cc5560184e..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/etcdserverpb/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "etcdserver.pb.go", - "raft_internal.pb.go", - "raft_internal_stringer.go", - "rpc.pb.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/etcdserverpb", - importpath = "go.etcd.io/etcd/etcdserver/etcdserverpb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/go.etcd.io/etcd/auth/authpb:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/mvccpb:go_default_library", - "//vendor/golang.org/x/net/context:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb/gw:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/etcdserver/etcdserverpb/gw/BUILD b/vendor/go.etcd.io/etcd/etcdserver/etcdserverpb/gw/BUILD deleted file mode 100644 index 8dee89b1b6045..0000000000000 --- a/vendor/go.etcd.io/etcd/etcdserver/etcdserverpb/gw/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["rpc.pb.gw.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/etcdserver/etcdserverpb/gw", - importpath = "go.etcd.io/etcd/etcdserver/etcdserverpb/gw", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/grpc-ecosystem/grpc-gateway/runtime:go_default_library", - "//vendor/github.com/grpc-ecosystem/grpc-gateway/utilities:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/golang.org/x/net/context:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/integration/BUILD b/vendor/go.etcd.io/etcd/integration/BUILD deleted file mode 100644 index 1b827b3b98396..0000000000000 --- a/vendor/go.etcd.io/etcd/integration/BUILD +++ /dev/null @@ -1,55 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bridge.go", - "cluster.go", - "cluster_direct.go", - "doc.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/integration", - importpath = "go.etcd.io/etcd/integration", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/soheilhy/cmux:go_default_library", - "//vendor/go.etcd.io/etcd/client:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3:go_default_library", - "//vendor/go.etcd.io/etcd/embed:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/etcdhttp:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/rafthttp:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v2http:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3client:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3election:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3lock:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3rpc:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/logutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/testutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/tlsutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/transport:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - "//vendor/golang.org/x/crypto/bcrypt:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - "//vendor/google.golang.org/grpc/keepalive:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/lease/BUILD b/vendor/go.etcd.io/etcd/lease/BUILD deleted file mode 100644 index 31740f66e5fa5..0000000000000 --- a/vendor/go.etcd.io/etcd/lease/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "lease_queue.go", - "lessor.go", - "metrics.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/lease", - importpath = "go.etcd.io/etcd/lease", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/lease/leasepb:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/backend:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/lease/leasehttp:all-srcs", - "//vendor/go.etcd.io/etcd/lease/leasepb:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/lease/leasehttp/BUILD b/vendor/go.etcd.io/etcd/lease/leasehttp/BUILD deleted file mode 100644 index 4751b8e4e0f34..0000000000000 --- a/vendor/go.etcd.io/etcd/lease/leasehttp/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "http.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/lease/leasehttp", - importpath = "go.etcd.io/etcd/lease/leasehttp", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/lease:go_default_library", - "//vendor/go.etcd.io/etcd/lease/leasepb:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/httputil:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/lease/leasepb/BUILD b/vendor/go.etcd.io/etcd/lease/leasepb/BUILD deleted file mode 100644 index d6be9ccff3d3d..0000000000000 --- a/vendor/go.etcd.io/etcd/lease/leasepb/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["lease.pb.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/lease/leasepb", - importpath = "go.etcd.io/etcd/lease/leasepb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/mvcc/BUILD b/vendor/go.etcd.io/etcd/mvcc/BUILD deleted file mode 100644 index b92a07f6edd11..0000000000000 --- a/vendor/go.etcd.io/etcd/mvcc/BUILD +++ /dev/null @@ -1,57 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "index.go", - "key_index.go", - "kv.go", - "kv_view.go", - "kvstore.go", - "kvstore_compaction.go", - "kvstore_txn.go", - "metrics.go", - "metrics_txn.go", - "revision.go", - "util.go", - "watchable_store.go", - "watchable_store_txn.go", - "watcher.go", - "watcher_group.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/mvcc", - importpath = "go.etcd.io/etcd/mvcc", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/google/btree:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/go.etcd.io/etcd/auth:go_default_library", - "//vendor/go.etcd.io/etcd/lease:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/backend:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/mvccpb:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/adt:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/schedule:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/traceutil:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/mvcc/backend:all-srcs", - "//vendor/go.etcd.io/etcd/mvcc/mvccpb:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/mvcc/backend/BUILD b/vendor/go.etcd.io/etcd/mvcc/backend/BUILD deleted file mode 100644 index fd0fa05eaa5f8..0000000000000 --- a/vendor/go.etcd.io/etcd/mvcc/backend/BUILD +++ /dev/null @@ -1,40 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "backend.go", - "batch_tx.go", - "config_default.go", - "config_linux.go", - "config_windows.go", - "doc.go", - "metrics.go", - "read_tx.go", - "tx_buffer.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/mvcc/backend", - importpath = "go.etcd.io/etcd/mvcc/backend", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/dustin/go-humanize:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/go.etcd.io/bbolt:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/mvcc/mvccpb/BUILD b/vendor/go.etcd.io/etcd/mvcc/mvccpb/BUILD deleted file mode 100644 index 56cadada9e950..0000000000000 --- a/vendor/go.etcd.io/etcd/mvcc/mvccpb/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["kv.pb.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/mvcc/mvccpb", - importpath = "go.etcd.io/etcd/mvcc/mvccpb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/adt/BUILD b/vendor/go.etcd.io/etcd/pkg/adt/BUILD deleted file mode 100644 index 21a28af92253e..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/adt/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "interval_tree.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/adt", - importpath = "go.etcd.io/etcd/pkg/adt", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/contention/BUILD b/vendor/go.etcd.io/etcd/pkg/contention/BUILD deleted file mode 100644 index ede13a23e6805..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/contention/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "contention.go", - "doc.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/contention", - importpath = "go.etcd.io/etcd/pkg/contention", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/cpuutil/BUILD b/vendor/go.etcd.io/etcd/pkg/cpuutil/BUILD deleted file mode 100644 index 4f1ffa73cb00c..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/cpuutil/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "endian.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/cpuutil", - importpath = "go.etcd.io/etcd/pkg/cpuutil", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/crc/BUILD b/vendor/go.etcd.io/etcd/pkg/crc/BUILD deleted file mode 100644 index 06324b424ba21..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/crc/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["crc.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/crc", - importpath = "go.etcd.io/etcd/pkg/crc", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/debugutil/BUILD b/vendor/go.etcd.io/etcd/pkg/debugutil/BUILD deleted file mode 100644 index fa77dd0a0880f..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/debugutil/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "pprof.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/debugutil", - importpath = "go.etcd.io/etcd/pkg/debugutil", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/fileutil/BUILD b/vendor/go.etcd.io/etcd/pkg/fileutil/BUILD deleted file mode 100644 index 1487f39b81cc6..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/fileutil/BUILD +++ /dev/null @@ -1,48 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dir_unix.go", - "dir_windows.go", - "doc.go", - "fileutil.go", - "lock.go", - "lock_flock.go", - "lock_linux.go", - "lock_plan9.go", - "lock_solaris.go", - "lock_unix.go", - "lock_windows.go", - "preallocate.go", - "preallocate_darwin.go", - "preallocate_unix.go", - "preallocate_unsupported.go", - "purge.go", - "read_dir.go", - "sync.go", - "sync_darwin.go", - "sync_linux.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/fileutil", - importpath = "go.etcd.io/etcd/pkg/fileutil", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/flags/BUILD b/vendor/go.etcd.io/etcd/pkg/flags/BUILD deleted file mode 100644 index ac2bef893b628..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/flags/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "flag.go", - "ignored.go", - "selective_string.go", - "strings.go", - "unique_strings.go", - "unique_urls.go", - "urls.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/flags", - importpath = "go.etcd.io/etcd/pkg/flags", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/spf13/pflag:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/httputil/BUILD b/vendor/go.etcd.io/etcd/pkg/httputil/BUILD deleted file mode 100644 index fddbeb76878c7..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/httputil/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["httputil.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/httputil", - importpath = "go.etcd.io/etcd/pkg/httputil", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/idutil/BUILD b/vendor/go.etcd.io/etcd/pkg/idutil/BUILD deleted file mode 100644 index 13fe42dd44c24..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/idutil/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["id.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/idutil", - importpath = "go.etcd.io/etcd/pkg/idutil", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/ioutil/BUILD b/vendor/go.etcd.io/etcd/pkg/ioutil/BUILD deleted file mode 100644 index c0cea37ee823f..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/ioutil/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "pagewriter.go", - "readcloser.go", - "reader.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/ioutil", - importpath = "go.etcd.io/etcd/pkg/ioutil", - visibility = ["//visibility:public"], - deps = ["//vendor/go.etcd.io/etcd/pkg/fileutil:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/logutil/BUILD b/vendor/go.etcd.io/etcd/pkg/logutil/BUILD deleted file mode 100644 index f9d9d9ebe1a50..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/logutil/BUILD +++ /dev/null @@ -1,99 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "discard_logger.go", - "doc.go", - "log_level.go", - "logger.go", - "merge_logger.go", - "package_logger.go", - "zap.go", - "zap_grpc.go", - "zap_journal.go", - "zap_raft.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/logutil", - importpath = "go.etcd.io/etcd/pkg/logutil", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/go.etcd.io/etcd/raft:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - "//vendor/go.uber.org/zap/zapcore:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/systemd:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/systemd:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/systemd:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/systemd:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/systemd:go_default_library", - ], - "@io_bazel_rules_go//go/platform:illumos": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/systemd:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/systemd:go_default_library", - ], - "@io_bazel_rules_go//go/platform:js": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/systemd:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/systemd:go_default_library", - ], - "@io_bazel_rules_go//go/platform:nacl": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/systemd:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/systemd:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/systemd:go_default_library", - ], - "@io_bazel_rules_go//go/platform:plan9": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/systemd:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/github.com/coreos/go-systemd/journal:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/systemd:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/netutil/BUILD b/vendor/go.etcd.io/etcd/pkg/netutil/BUILD deleted file mode 100644 index a9d095d346c82..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/netutil/BUILD +++ /dev/null @@ -1,42 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "isolate_linux.go", - "isolate_stub.go", - "netutil.go", - "routes.go", - "routes_linux.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/netutil", - importpath = "go.etcd.io/etcd/pkg/netutil", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/pkg/types:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/go.etcd.io/etcd/pkg/cpuutil:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/go.etcd.io/etcd/pkg/cpuutil:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/pathutil/BUILD b/vendor/go.etcd.io/etcd/pkg/pathutil/BUILD deleted file mode 100644 index 91b209719854f..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/pathutil/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["path.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/pathutil", - importpath = "go.etcd.io/etcd/pkg/pathutil", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/pbutil/BUILD b/vendor/go.etcd.io/etcd/pkg/pbutil/BUILD deleted file mode 100644 index 191e2be13c4cc..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/pbutil/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["pbutil.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/pbutil", - importpath = "go.etcd.io/etcd/pkg/pbutil", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/coreos/pkg/capnslog:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/runtime/BUILD b/vendor/go.etcd.io/etcd/pkg/runtime/BUILD deleted file mode 100644 index e57067b72f03c..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/runtime/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "fds_linux.go", - "fds_other.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/runtime", - importpath = "go.etcd.io/etcd/pkg/runtime", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/schedule/BUILD b/vendor/go.etcd.io/etcd/pkg/schedule/BUILD deleted file mode 100644 index 8034e28a3c4f8..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/schedule/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "schedule.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/schedule", - importpath = "go.etcd.io/etcd/pkg/schedule", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/srv/BUILD b/vendor/go.etcd.io/etcd/pkg/srv/BUILD deleted file mode 100644 index 9a41be6c3989a..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/srv/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["srv.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/srv", - importpath = "go.etcd.io/etcd/pkg/srv", - visibility = ["//visibility:public"], - deps = ["//vendor/go.etcd.io/etcd/pkg/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/systemd/BUILD b/vendor/go.etcd.io/etcd/pkg/systemd/BUILD deleted file mode 100644 index 4807d55c3dc5a..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/systemd/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "journal.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/systemd", - importpath = "go.etcd.io/etcd/pkg/systemd", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/testutil/BUILD b/vendor/go.etcd.io/etcd/pkg/testutil/BUILD deleted file mode 100644 index a95a164b902b2..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/testutil/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "assert.go", - "leak.go", - "pauseable_handler.go", - "recorder.go", - "testutil.go", - "var.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/testutil", - importpath = "go.etcd.io/etcd/pkg/testutil", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/tlsutil/BUILD b/vendor/go.etcd.io/etcd/pkg/tlsutil/BUILD deleted file mode 100644 index 31dfe0f311688..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/tlsutil/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cipher_suites.go", - "doc.go", - "tlsutil.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/tlsutil", - importpath = "go.etcd.io/etcd/pkg/tlsutil", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/traceutil/BUILD b/vendor/go.etcd.io/etcd/pkg/traceutil/BUILD deleted file mode 100644 index 0027d062eb569..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/traceutil/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["trace.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/traceutil", - importpath = "go.etcd.io/etcd/pkg/traceutil", - visibility = ["//visibility:public"], - deps = ["//vendor/go.uber.org/zap:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/transport/BUILD b/vendor/go.etcd.io/etcd/pkg/transport/BUILD deleted file mode 100644 index 55f9b3c4deb5b..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/transport/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "keepalive_listener.go", - "limit_listen.go", - "listener.go", - "listener_tls.go", - "timeout_conn.go", - "timeout_dialer.go", - "timeout_listener.go", - "timeout_transport.go", - "tls.go", - "transport.go", - "unix_listener.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/transport", - importpath = "go.etcd.io/etcd/pkg/transport", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/pkg/fileutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/tlsutil:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/types/BUILD b/vendor/go.etcd.io/etcd/pkg/types/BUILD deleted file mode 100644 index 013c7522e0acb..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/types/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "id.go", - "set.go", - "slice.go", - "urls.go", - "urlsmap.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/types", - importpath = "go.etcd.io/etcd/pkg/types", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/pkg/wait/BUILD b/vendor/go.etcd.io/etcd/pkg/wait/BUILD deleted file mode 100644 index b7647a7d48920..0000000000000 --- a/vendor/go.etcd.io/etcd/pkg/wait/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "wait.go", - "wait_time.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/pkg/wait", - importpath = "go.etcd.io/etcd/pkg/wait", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/proxy/grpcproxy/BUILD b/vendor/go.etcd.io/etcd/proxy/grpcproxy/BUILD deleted file mode 100644 index ffc19c8d353fc..0000000000000 --- a/vendor/go.etcd.io/etcd/proxy/grpcproxy/BUILD +++ /dev/null @@ -1,69 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "auth.go", - "cluster.go", - "doc.go", - "election.go", - "health.go", - "kv.go", - "leader.go", - "lease.go", - "lock.go", - "logger.go", - "maintenance.go", - "metrics.go", - "register.go", - "util.go", - "watch.go", - "watch_broadcast.go", - "watch_broadcasts.go", - "watch_ranges.go", - "watcher.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/proxy/grpcproxy", - importpath = "go.etcd.io/etcd/proxy/grpcproxy", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3/concurrency:go_default_library", - "//vendor/go.etcd.io/etcd/clientv3/naming:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/etcdhttp:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3rpc:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc:go_default_library", - "//vendor/go.etcd.io/etcd/mvcc/mvccpb:go_default_library", - "//vendor/go.etcd.io/etcd/proxy/grpcproxy/cache:go_default_library", - "//vendor/golang.org/x/time/rate:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/metadata:go_default_library", - "//vendor/google.golang.org/grpc/naming:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/proxy/grpcproxy/adapter:all-srcs", - "//vendor/go.etcd.io/etcd/proxy/grpcproxy/cache:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/proxy/grpcproxy/adapter/BUILD b/vendor/go.etcd.io/etcd/proxy/grpcproxy/adapter/BUILD deleted file mode 100644 index 65bb94fdb9516..0000000000000 --- a/vendor/go.etcd.io/etcd/proxy/grpcproxy/adapter/BUILD +++ /dev/null @@ -1,43 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "auth_client_adapter.go", - "chan_stream.go", - "cluster_client_adapter.go", - "doc.go", - "election_client_adapter.go", - "kv_client_adapter.go", - "lease_client_adapter.go", - "lock_client_adapter.go", - "maintenance_client_adapter.go", - "watch_client_adapter.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/proxy/grpcproxy/adapter", - importpath = "go.etcd.io/etcd/proxy/grpcproxy/adapter", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/etcdserver/api/v3election/v3electionpb:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3lock/v3lockpb:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/metadata:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/proxy/grpcproxy/cache/BUILD b/vendor/go.etcd.io/etcd/proxy/grpcproxy/cache/BUILD deleted file mode 100644 index 3716f76589007..0000000000000 --- a/vendor/go.etcd.io/etcd/proxy/grpcproxy/cache/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["store.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/proxy/grpcproxy/cache", - importpath = "go.etcd.io/etcd/proxy/grpcproxy/cache", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/groupcache/lru:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes:go_default_library", - "//vendor/go.etcd.io/etcd/etcdserver/etcdserverpb:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/adt:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/raft/BUILD b/vendor/go.etcd.io/etcd/raft/BUILD deleted file mode 100644 index eb4dcf189934e..0000000000000 --- a/vendor/go.etcd.io/etcd/raft/BUILD +++ /dev/null @@ -1,48 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bootstrap.go", - "doc.go", - "log.go", - "log_unstable.go", - "logger.go", - "node.go", - "raft.go", - "rawnode.go", - "read_only.go", - "status.go", - "storage.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/raft", - importpath = "go.etcd.io/etcd/raft", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/raft/confchange:go_default_library", - "//vendor/go.etcd.io/etcd/raft/quorum:go_default_library", - "//vendor/go.etcd.io/etcd/raft/raftpb:go_default_library", - "//vendor/go.etcd.io/etcd/raft/tracker:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/raft/confchange:all-srcs", - "//vendor/go.etcd.io/etcd/raft/quorum:all-srcs", - "//vendor/go.etcd.io/etcd/raft/raftpb:all-srcs", - "//vendor/go.etcd.io/etcd/raft/tracker:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/raft/confchange/BUILD b/vendor/go.etcd.io/etcd/raft/confchange/BUILD deleted file mode 100644 index 44ff151784e4c..0000000000000 --- a/vendor/go.etcd.io/etcd/raft/confchange/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "confchange.go", - "restore.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/raft/confchange", - importpath = "go.etcd.io/etcd/raft/confchange", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/raft/quorum:go_default_library", - "//vendor/go.etcd.io/etcd/raft/raftpb:go_default_library", - "//vendor/go.etcd.io/etcd/raft/tracker:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/raft/quorum/BUILD b/vendor/go.etcd.io/etcd/raft/quorum/BUILD deleted file mode 100644 index cdf3358c40cb4..0000000000000 --- a/vendor/go.etcd.io/etcd/raft/quorum/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "joint.go", - "majority.go", - "quorum.go", - "voteresult_string.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/raft/quorum", - importpath = "go.etcd.io/etcd/raft/quorum", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/raft/raftpb/BUILD b/vendor/go.etcd.io/etcd/raft/raftpb/BUILD deleted file mode 100644 index f6dcf83b2add8..0000000000000 --- a/vendor/go.etcd.io/etcd/raft/raftpb/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "confchange.go", - "confstate.go", - "raft.pb.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/raft/raftpb", - importpath = "go.etcd.io/etcd/raft/raftpb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/raft/tracker/BUILD b/vendor/go.etcd.io/etcd/raft/tracker/BUILD deleted file mode 100644 index e943efa9c12f5..0000000000000 --- a/vendor/go.etcd.io/etcd/raft/tracker/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "inflights.go", - "progress.go", - "state.go", - "tracker.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/raft/tracker", - importpath = "go.etcd.io/etcd/raft/tracker", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.etcd.io/etcd/raft/quorum:go_default_library", - "//vendor/go.etcd.io/etcd/raft/raftpb:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/version/BUILD b/vendor/go.etcd.io/etcd/version/BUILD deleted file mode 100644 index 92889010dc350..0000000000000 --- a/vendor/go.etcd.io/etcd/version/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["version.go"], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/version", - importpath = "go.etcd.io/etcd/version", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/coreos/go-semver/semver:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/wal/BUILD b/vendor/go.etcd.io/etcd/wal/BUILD deleted file mode 100644 index 1d1cbd7e386db..0000000000000 --- a/vendor/go.etcd.io/etcd/wal/BUILD +++ /dev/null @@ -1,47 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decoder.go", - "doc.go", - "encoder.go", - "file_pipeline.go", - "metrics.go", - "repair.go", - "util.go", - "wal.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/wal", - importpath = "go.etcd.io/etcd/wal", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/coreos/pkg/capnslog:go_default_library", - "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/crc:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/fileutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/ioutil:go_default_library", - "//vendor/go.etcd.io/etcd/pkg/pbutil:go_default_library", - "//vendor/go.etcd.io/etcd/raft:go_default_library", - "//vendor/go.etcd.io/etcd/raft/raftpb:go_default_library", - "//vendor/go.etcd.io/etcd/wal/walpb:go_default_library", - "//vendor/go.uber.org/zap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.etcd.io/etcd/wal/walpb:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.etcd.io/etcd/wal/walpb/BUILD b/vendor/go.etcd.io/etcd/wal/walpb/BUILD deleted file mode 100644 index e20c20d96a097..0000000000000 --- a/vendor/go.etcd.io/etcd/wal/walpb/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "record.go", - "record.pb.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.etcd.io/etcd/wal/walpb", - importpath = "go.etcd.io/etcd/wal/walpb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.mongodb.org/mongo-driver/bson/BUILD b/vendor/go.mongodb.org/mongo-driver/bson/BUILD deleted file mode 100644 index b08efddcbf5db..0000000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/BUILD +++ /dev/null @@ -1,50 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bson.go", - "bson_1_8.go", - "decoder.go", - "doc.go", - "encoder.go", - "marshal.go", - "primitive_codecs.go", - "raw.go", - "raw_element.go", - "raw_value.go", - "registry.go", - "types.go", - "unmarshal.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.mongodb.org/mongo-driver/bson", - importpath = "go.mongodb.org/mongo-driver/bson", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.mongodb.org/mongo-driver/bson/bsoncodec:go_default_library", - "//vendor/go.mongodb.org/mongo-driver/bson/bsonrw:go_default_library", - "//vendor/go.mongodb.org/mongo-driver/bson/bsontype:go_default_library", - "//vendor/go.mongodb.org/mongo-driver/bson/primitive:go_default_library", - "//vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.mongodb.org/mongo-driver/bson/bsoncodec:all-srcs", - "//vendor/go.mongodb.org/mongo-driver/bson/bsonrw:all-srcs", - "//vendor/go.mongodb.org/mongo-driver/bson/bsontype:all-srcs", - "//vendor/go.mongodb.org/mongo-driver/bson/primitive:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/BUILD b/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/BUILD deleted file mode 100644 index fb99c13d85ff3..0000000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bsoncodec.go", - "default_value_decoders.go", - "default_value_encoders.go", - "doc.go", - "mode.go", - "pointer_codec.go", - "proxy.go", - "registry.go", - "struct_codec.go", - "struct_tag_parser.go", - "types.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec", - importpath = "go.mongodb.org/mongo-driver/bson/bsoncodec", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.mongodb.org/mongo-driver/bson/bsonrw:go_default_library", - "//vendor/go.mongodb.org/mongo-driver/bson/bsontype:go_default_library", - "//vendor/go.mongodb.org/mongo-driver/bson/primitive:go_default_library", - "//vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/BUILD b/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/BUILD deleted file mode 100644 index fcc369da73303..0000000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/BUILD +++ /dev/null @@ -1,42 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "copier.go", - "doc.go", - "extjson_parser.go", - "extjson_reader.go", - "extjson_tables.go", - "extjson_wrappers.go", - "extjson_writer.go", - "json_scanner.go", - "mode.go", - "reader.go", - "value_reader.go", - "value_writer.go", - "writer.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.mongodb.org/mongo-driver/bson/bsonrw", - importpath = "go.mongodb.org/mongo-driver/bson/bsonrw", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.mongodb.org/mongo-driver/bson/bsontype:go_default_library", - "//vendor/go.mongodb.org/mongo-driver/bson/primitive:go_default_library", - "//vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsontype/BUILD b/vendor/go.mongodb.org/mongo-driver/bson/bsontype/BUILD deleted file mode 100644 index 4ccad4dfff6cb..0000000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsontype/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["bsontype.go"], - importmap = "k8s.io/kubernetes/vendor/go.mongodb.org/mongo-driver/bson/bsontype", - importpath = "go.mongodb.org/mongo-driver/bson/bsontype", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.mongodb.org/mongo-driver/bson/primitive/BUILD b/vendor/go.mongodb.org/mongo-driver/bson/primitive/BUILD deleted file mode 100644 index 156f3b44f87b2..0000000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/primitive/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decimal.go", - "objectid.go", - "primitive.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.mongodb.org/mongo-driver/bson/primitive", - importpath = "go.mongodb.org/mongo-driver/bson/primitive", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore/BUILD b/vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore/BUILD deleted file mode 100644 index d4d5ad6b7e44a..0000000000000 --- a/vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bsoncore.go", - "document.go", - "document_sequence.go", - "element.go", - "tables.go", - "value.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore", - importpath = "go.mongodb.org/mongo-driver/x/bsonx/bsoncore", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/go-stack/stack:go_default_library", - "//vendor/go.mongodb.org/mongo-driver/bson/bsontype:go_default_library", - "//vendor/go.mongodb.org/mongo-driver/bson/primitive:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/BUILD b/vendor/go.opencensus.io/BUILD deleted file mode 100644 index 9994caa892e80..0000000000000 --- a/vendor/go.opencensus.io/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["opencensus.go"], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io", - importpath = "go.opencensus.io", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.opencensus.io/internal:all-srcs", - "//vendor/go.opencensus.io/metric/metricdata:all-srcs", - "//vendor/go.opencensus.io/metric/metricproducer:all-srcs", - "//vendor/go.opencensus.io/plugin/ochttp:all-srcs", - "//vendor/go.opencensus.io/resource:all-srcs", - "//vendor/go.opencensus.io/stats:all-srcs", - "//vendor/go.opencensus.io/tag:all-srcs", - "//vendor/go.opencensus.io/trace:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/internal/BUILD b/vendor/go.opencensus.io/internal/BUILD deleted file mode 100644 index a807b90b780f1..0000000000000 --- a/vendor/go.opencensus.io/internal/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "internal.go", - "sanitize.go", - "traceinternals.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/internal", - importpath = "go.opencensus.io/internal", - visibility = ["//vendor/go.opencensus.io:__subpackages__"], - deps = ["//vendor/go.opencensus.io:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.opencensus.io/internal/tagencoding:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/internal/tagencoding/BUILD b/vendor/go.opencensus.io/internal/tagencoding/BUILD deleted file mode 100644 index 90646af721017..0000000000000 --- a/vendor/go.opencensus.io/internal/tagencoding/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["tagencoding.go"], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/internal/tagencoding", - importpath = "go.opencensus.io/internal/tagencoding", - visibility = ["//vendor/go.opencensus.io:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/metric/metricdata/BUILD b/vendor/go.opencensus.io/metric/metricdata/BUILD deleted file mode 100644 index 1a0d71b8441c0..0000000000000 --- a/vendor/go.opencensus.io/metric/metricdata/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "exemplar.go", - "label.go", - "metric.go", - "point.go", - "type_string.go", - "unit.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/metric/metricdata", - importpath = "go.opencensus.io/metric/metricdata", - visibility = ["//visibility:public"], - deps = ["//vendor/go.opencensus.io/resource:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/metric/metricproducer/BUILD b/vendor/go.opencensus.io/metric/metricproducer/BUILD deleted file mode 100644 index 094a81e497a9f..0000000000000 --- a/vendor/go.opencensus.io/metric/metricproducer/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "manager.go", - "producer.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/metric/metricproducer", - importpath = "go.opencensus.io/metric/metricproducer", - visibility = ["//visibility:public"], - deps = ["//vendor/go.opencensus.io/metric/metricdata:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/plugin/ochttp/BUILD b/vendor/go.opencensus.io/plugin/ochttp/BUILD deleted file mode 100644 index 32c7edfb8285b..0000000000000 --- a/vendor/go.opencensus.io/plugin/ochttp/BUILD +++ /dev/null @@ -1,44 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "client_stats.go", - "doc.go", - "route.go", - "server.go", - "span_annotating_client_trace.go", - "stats.go", - "trace.go", - "wrapped_body.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/plugin/ochttp", - importpath = "go.opencensus.io/plugin/ochttp", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.opencensus.io/plugin/ochttp/propagation/b3:go_default_library", - "//vendor/go.opencensus.io/stats:go_default_library", - "//vendor/go.opencensus.io/stats/view:go_default_library", - "//vendor/go.opencensus.io/tag:go_default_library", - "//vendor/go.opencensus.io/trace:go_default_library", - "//vendor/go.opencensus.io/trace/propagation:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.opencensus.io/plugin/ochttp/propagation/b3:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/plugin/ochttp/propagation/b3/BUILD b/vendor/go.opencensus.io/plugin/ochttp/propagation/b3/BUILD deleted file mode 100644 index db509b26e9042..0000000000000 --- a/vendor/go.opencensus.io/plugin/ochttp/propagation/b3/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["b3.go"], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/plugin/ochttp/propagation/b3", - importpath = "go.opencensus.io/plugin/ochttp/propagation/b3", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.opencensus.io/trace:go_default_library", - "//vendor/go.opencensus.io/trace/propagation:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/resource/BUILD b/vendor/go.opencensus.io/resource/BUILD deleted file mode 100644 index 103c75a883740..0000000000000 --- a/vendor/go.opencensus.io/resource/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["resource.go"], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/resource", - importpath = "go.opencensus.io/resource", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/stats/BUILD b/vendor/go.opencensus.io/stats/BUILD deleted file mode 100644 index 2055f0819737d..0000000000000 --- a/vendor/go.opencensus.io/stats/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "measure.go", - "measure_float64.go", - "measure_int64.go", - "record.go", - "units.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/stats", - importpath = "go.opencensus.io/stats", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.opencensus.io/metric/metricdata:go_default_library", - "//vendor/go.opencensus.io/stats/internal:go_default_library", - "//vendor/go.opencensus.io/tag:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.opencensus.io/stats/internal:all-srcs", - "//vendor/go.opencensus.io/stats/view:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/stats/internal/BUILD b/vendor/go.opencensus.io/stats/internal/BUILD deleted file mode 100644 index 73374dbb867ef..0000000000000 --- a/vendor/go.opencensus.io/stats/internal/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["record.go"], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/stats/internal", - importpath = "go.opencensus.io/stats/internal", - visibility = ["//vendor/go.opencensus.io/stats:__subpackages__"], - deps = ["//vendor/go.opencensus.io/tag:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/stats/view/BUILD b/vendor/go.opencensus.io/stats/view/BUILD deleted file mode 100644 index ad6e8a19fef86..0000000000000 --- a/vendor/go.opencensus.io/stats/view/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "aggregation.go", - "aggregation_data.go", - "collector.go", - "doc.go", - "export.go", - "view.go", - "view_to_metric.go", - "worker.go", - "worker_commands.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/stats/view", - importpath = "go.opencensus.io/stats/view", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.opencensus.io/internal/tagencoding:go_default_library", - "//vendor/go.opencensus.io/metric/metricdata:go_default_library", - "//vendor/go.opencensus.io/metric/metricproducer:go_default_library", - "//vendor/go.opencensus.io/stats:go_default_library", - "//vendor/go.opencensus.io/stats/internal:go_default_library", - "//vendor/go.opencensus.io/tag:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/tag/BUILD b/vendor/go.opencensus.io/tag/BUILD deleted file mode 100644 index 7e0469d471f4c..0000000000000 --- a/vendor/go.opencensus.io/tag/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "context.go", - "doc.go", - "key.go", - "map.go", - "map_codec.go", - "metadata.go", - "profile_19.go", - "profile_not19.go", - "validate.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/tag", - importpath = "go.opencensus.io/tag", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/trace/BUILD b/vendor/go.opencensus.io/trace/BUILD deleted file mode 100644 index f10e79b4ce979..0000000000000 --- a/vendor/go.opencensus.io/trace/BUILD +++ /dev/null @@ -1,48 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "basetypes.go", - "config.go", - "doc.go", - "evictedqueue.go", - "export.go", - "lrumap.go", - "sampling.go", - "spanbucket.go", - "spanstore.go", - "status_codes.go", - "trace.go", - "trace_go11.go", - "trace_nongo11.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/trace", - importpath = "go.opencensus.io/trace", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/groupcache/lru:go_default_library", - "//vendor/go.opencensus.io/internal:go_default_library", - "//vendor/go.opencensus.io/trace/internal:go_default_library", - "//vendor/go.opencensus.io/trace/tracestate:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.opencensus.io/trace/internal:all-srcs", - "//vendor/go.opencensus.io/trace/propagation:all-srcs", - "//vendor/go.opencensus.io/trace/tracestate:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/trace/internal/BUILD b/vendor/go.opencensus.io/trace/internal/BUILD deleted file mode 100644 index c086397ddc2c8..0000000000000 --- a/vendor/go.opencensus.io/trace/internal/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["internal.go"], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/trace/internal", - importpath = "go.opencensus.io/trace/internal", - visibility = ["//vendor/go.opencensus.io/trace:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/trace/propagation/BUILD b/vendor/go.opencensus.io/trace/propagation/BUILD deleted file mode 100644 index e631692201598..0000000000000 --- a/vendor/go.opencensus.io/trace/propagation/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["propagation.go"], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/trace/propagation", - importpath = "go.opencensus.io/trace/propagation", - visibility = ["//visibility:public"], - deps = ["//vendor/go.opencensus.io/trace:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.opencensus.io/trace/tracestate/BUILD b/vendor/go.opencensus.io/trace/tracestate/BUILD deleted file mode 100644 index 790d44bae01b9..0000000000000 --- a/vendor/go.opencensus.io/trace/tracestate/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["tracestate.go"], - importmap = "k8s.io/kubernetes/vendor/go.opencensus.io/trace/tracestate", - importpath = "go.opencensus.io/trace/tracestate", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.uber.org/atomic/BUILD b/vendor/go.uber.org/atomic/BUILD deleted file mode 100644 index 0787088d90d5a..0000000000000 --- a/vendor/go.uber.org/atomic/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "atomic.go", - "error.go", - "string.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.uber.org/atomic", - importpath = "go.uber.org/atomic", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.uber.org/multierr/BUILD b/vendor/go.uber.org/multierr/BUILD deleted file mode 100644 index 47cb1afb218da..0000000000000 --- a/vendor/go.uber.org/multierr/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["error.go"], - importmap = "k8s.io/kubernetes/vendor/go.uber.org/multierr", - importpath = "go.uber.org/multierr", - visibility = ["//visibility:public"], - deps = ["//vendor/go.uber.org/atomic:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.uber.org/zap/BUILD b/vendor/go.uber.org/zap/BUILD deleted file mode 100644 index 38c3e16f2522b..0000000000000 --- a/vendor/go.uber.org/zap/BUILD +++ /dev/null @@ -1,56 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "array.go", - "config.go", - "doc.go", - "encoder.go", - "error.go", - "field.go", - "flag.go", - "global.go", - "global_go112.go", - "global_prego112.go", - "http_handler.go", - "level.go", - "logger.go", - "options.go", - "sink.go", - "stacktrace.go", - "sugar.go", - "time.go", - "writer.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.uber.org/zap", - importpath = "go.uber.org/zap", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.uber.org/atomic:go_default_library", - "//vendor/go.uber.org/multierr:go_default_library", - "//vendor/go.uber.org/zap/internal/bufferpool:go_default_library", - "//vendor/go.uber.org/zap/zapcore:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/go.uber.org/zap/buffer:all-srcs", - "//vendor/go.uber.org/zap/internal/bufferpool:all-srcs", - "//vendor/go.uber.org/zap/internal/color:all-srcs", - "//vendor/go.uber.org/zap/internal/exit:all-srcs", - "//vendor/go.uber.org/zap/zapcore:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.uber.org/zap/buffer/BUILD b/vendor/go.uber.org/zap/buffer/BUILD deleted file mode 100644 index 11f657905e958..0000000000000 --- a/vendor/go.uber.org/zap/buffer/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "buffer.go", - "pool.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.uber.org/zap/buffer", - importpath = "go.uber.org/zap/buffer", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.uber.org/zap/internal/bufferpool/BUILD b/vendor/go.uber.org/zap/internal/bufferpool/BUILD deleted file mode 100644 index 9eb29655b2b86..0000000000000 --- a/vendor/go.uber.org/zap/internal/bufferpool/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["bufferpool.go"], - importmap = "k8s.io/kubernetes/vendor/go.uber.org/zap/internal/bufferpool", - importpath = "go.uber.org/zap/internal/bufferpool", - visibility = ["//vendor/go.uber.org/zap:__subpackages__"], - deps = ["//vendor/go.uber.org/zap/buffer:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.uber.org/zap/internal/color/BUILD b/vendor/go.uber.org/zap/internal/color/BUILD deleted file mode 100644 index f3a3cd7600f91..0000000000000 --- a/vendor/go.uber.org/zap/internal/color/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["color.go"], - importmap = "k8s.io/kubernetes/vendor/go.uber.org/zap/internal/color", - importpath = "go.uber.org/zap/internal/color", - visibility = ["//vendor/go.uber.org/zap:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.uber.org/zap/internal/exit/BUILD b/vendor/go.uber.org/zap/internal/exit/BUILD deleted file mode 100644 index 9ce1f43d4d6c2..0000000000000 --- a/vendor/go.uber.org/zap/internal/exit/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["exit.go"], - importmap = "k8s.io/kubernetes/vendor/go.uber.org/zap/internal/exit", - importpath = "go.uber.org/zap/internal/exit", - visibility = ["//vendor/go.uber.org/zap:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/go.uber.org/zap/zapcore/BUILD b/vendor/go.uber.org/zap/zapcore/BUILD deleted file mode 100644 index 503ff088c8cc4..0000000000000 --- a/vendor/go.uber.org/zap/zapcore/BUILD +++ /dev/null @@ -1,48 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "console_encoder.go", - "core.go", - "doc.go", - "encoder.go", - "entry.go", - "error.go", - "field.go", - "hook.go", - "json_encoder.go", - "level.go", - "level_strings.go", - "marshaler.go", - "memory_encoder.go", - "sampler.go", - "tee.go", - "write_syncer.go", - ], - importmap = "k8s.io/kubernetes/vendor/go.uber.org/zap/zapcore", - importpath = "go.uber.org/zap/zapcore", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.uber.org/atomic:go_default_library", - "//vendor/go.uber.org/multierr:go_default_library", - "//vendor/go.uber.org/zap/buffer:go_default_library", - "//vendor/go.uber.org/zap/internal/bufferpool:go_default_library", - "//vendor/go.uber.org/zap/internal/color:go_default_library", - "//vendor/go.uber.org/zap/internal/exit:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/bcrypt/BUILD b/vendor/golang.org/x/crypto/bcrypt/BUILD deleted file mode 100644 index ac99ad08751b1..0000000000000 --- a/vendor/golang.org/x/crypto/bcrypt/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "base64.go", - "bcrypt.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/bcrypt", - importpath = "golang.org/x/crypto/bcrypt", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/crypto/blowfish:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/blowfish/BUILD b/vendor/golang.org/x/crypto/blowfish/BUILD deleted file mode 100644 index ebd128523773a..0000000000000 --- a/vendor/golang.org/x/crypto/blowfish/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "block.go", - "cipher.go", - "const.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/blowfish", - importpath = "golang.org/x/crypto/blowfish", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/chacha20/BUILD b/vendor/golang.org/x/crypto/chacha20/BUILD deleted file mode 100644 index 5bcaa7cf9c947..0000000000000 --- a/vendor/golang.org/x/crypto/chacha20/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "chacha_arm64.go", - "chacha_arm64.s", - "chacha_generic.go", - "chacha_noasm.go", - "chacha_ppc64le.go", - "chacha_ppc64le.s", - "chacha_s390x.go", - "chacha_s390x.s", - "xor.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/chacha20", - importpath = "golang.org/x/crypto/chacha20", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/crypto/internal/subtle:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:s390x": [ - "//vendor/golang.org/x/sys/cpu:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/cryptobyte/BUILD b/vendor/golang.org/x/crypto/cryptobyte/BUILD deleted file mode 100644 index 8f0e66c82e4d8..0000000000000 --- a/vendor/golang.org/x/crypto/cryptobyte/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "asn1.go", - "builder.go", - "string.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/cryptobyte", - importpath = "golang.org/x/crypto/cryptobyte", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/crypto/cryptobyte/asn1:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/crypto/cryptobyte/asn1:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/cryptobyte/asn1/BUILD b/vendor/golang.org/x/crypto/cryptobyte/asn1/BUILD deleted file mode 100644 index 6832f4b41ea5c..0000000000000 --- a/vendor/golang.org/x/crypto/cryptobyte/asn1/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["asn1.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/cryptobyte/asn1", - importpath = "golang.org/x/crypto/cryptobyte/asn1", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/curve25519/BUILD b/vendor/golang.org/x/crypto/curve25519/BUILD deleted file mode 100644 index 42c6b1a6f0383..0000000000000 --- a/vendor/golang.org/x/crypto/curve25519/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "curve25519.go", - "curve25519_amd64.go", - "curve25519_amd64.s", - "curve25519_generic.go", - "curve25519_noasm.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/curve25519", - importpath = "golang.org/x/crypto/curve25519", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/ed25519/BUILD b/vendor/golang.org/x/crypto/ed25519/BUILD deleted file mode 100644 index d223609d395e4..0000000000000 --- a/vendor/golang.org/x/crypto/ed25519/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ed25519.go", - "ed25519_go113.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/ed25519", - importpath = "golang.org/x/crypto/ed25519", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/crypto/ed25519/internal/edwards25519:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/crypto/ed25519/internal/edwards25519:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/BUILD b/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/BUILD deleted file mode 100644 index dee9737f45a14..0000000000000 --- a/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "const.go", - "edwards25519.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/ed25519/internal/edwards25519", - importpath = "golang.org/x/crypto/ed25519/internal/edwards25519", - visibility = ["//vendor/golang.org/x/crypto/ed25519:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/internal/subtle/BUILD b/vendor/golang.org/x/crypto/internal/subtle/BUILD deleted file mode 100644 index d12a34e6e9b19..0000000000000 --- a/vendor/golang.org/x/crypto/internal/subtle/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["aliasing.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/internal/subtle", - importpath = "golang.org/x/crypto/internal/subtle", - visibility = ["//vendor/golang.org/x/crypto:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/nacl/secretbox/BUILD b/vendor/golang.org/x/crypto/nacl/secretbox/BUILD deleted file mode 100644 index 04e21a8d1a76f..0000000000000 --- a/vendor/golang.org/x/crypto/nacl/secretbox/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["secretbox.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/nacl/secretbox", - importpath = "golang.org/x/crypto/nacl/secretbox", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/crypto/internal/subtle:go_default_library", - "//vendor/golang.org/x/crypto/poly1305:go_default_library", - "//vendor/golang.org/x/crypto/salsa20/salsa:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/pbkdf2/BUILD b/vendor/golang.org/x/crypto/pbkdf2/BUILD deleted file mode 100644 index 565fe0b251aa3..0000000000000 --- a/vendor/golang.org/x/crypto/pbkdf2/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["pbkdf2.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/pbkdf2", - importpath = "golang.org/x/crypto/pbkdf2", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/pkcs12/BUILD b/vendor/golang.org/x/crypto/pkcs12/BUILD deleted file mode 100644 index e3fdab0817336..0000000000000 --- a/vendor/golang.org/x/crypto/pkcs12/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bmp-string.go", - "crypto.go", - "errors.go", - "mac.go", - "pbkdf.go", - "pkcs12.go", - "safebags.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/pkcs12", - importpath = "golang.org/x/crypto/pkcs12", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/crypto/pkcs12/internal/rc2:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/crypto/pkcs12/internal/rc2:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/pkcs12/internal/rc2/BUILD b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/BUILD deleted file mode 100644 index 17c20a8a42ab7..0000000000000 --- a/vendor/golang.org/x/crypto/pkcs12/internal/rc2/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["rc2.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/pkcs12/internal/rc2", - importpath = "golang.org/x/crypto/pkcs12/internal/rc2", - visibility = ["//vendor/golang.org/x/crypto/pkcs12:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/poly1305/BUILD b/vendor/golang.org/x/crypto/poly1305/BUILD deleted file mode 100644 index 6b01cb009409b..0000000000000 --- a/vendor/golang.org/x/crypto/poly1305/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bits_compat.go", - "bits_go1.13.go", - "mac_noasm.go", - "poly1305.go", - "sum_amd64.go", - "sum_amd64.s", - "sum_generic.go", - "sum_ppc64le.go", - "sum_ppc64le.s", - "sum_s390x.go", - "sum_s390x.s", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/poly1305", - importpath = "golang.org/x/crypto/poly1305", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:s390x": [ - "//vendor/golang.org/x/sys/cpu:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/BUILD b/vendor/golang.org/x/crypto/salsa20/salsa/BUILD deleted file mode 100644 index 3738fa5f0b34a..0000000000000 --- a/vendor/golang.org/x/crypto/salsa20/salsa/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "hsalsa20.go", - "salsa208.go", - "salsa20_amd64.go", - "salsa20_amd64.s", - "salsa20_noasm.go", - "salsa20_ref.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/salsa20/salsa", - importpath = "golang.org/x/crypto/salsa20/salsa", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/ssh/BUILD b/vendor/golang.org/x/crypto/ssh/BUILD deleted file mode 100644 index 4cf6d3592d451..0000000000000 --- a/vendor/golang.org/x/crypto/ssh/BUILD +++ /dev/null @@ -1,56 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "buffer.go", - "certs.go", - "channel.go", - "cipher.go", - "client.go", - "client_auth.go", - "common.go", - "connection.go", - "doc.go", - "handshake.go", - "kex.go", - "keys.go", - "mac.go", - "messages.go", - "mux.go", - "server.go", - "session.go", - "ssh_gss.go", - "streamlocal.go", - "tcpip.go", - "transport.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/ssh", - importpath = "golang.org/x/crypto/ssh", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/crypto/chacha20:go_default_library", - "//vendor/golang.org/x/crypto/curve25519:go_default_library", - "//vendor/golang.org/x/crypto/ed25519:go_default_library", - "//vendor/golang.org/x/crypto/poly1305:go_default_library", - "//vendor/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf:all-srcs", - "//vendor/golang.org/x/crypto/ssh/terminal:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf/BUILD b/vendor/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf/BUILD deleted file mode 100644 index c795f9ed41528..0000000000000 --- a/vendor/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["bcrypt_pbkdf.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf", - importpath = "golang.org/x/crypto/ssh/internal/bcrypt_pbkdf", - visibility = ["//vendor/golang.org/x/crypto/ssh:__subpackages__"], - deps = ["//vendor/golang.org/x/crypto/blowfish:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/crypto/ssh/terminal/BUILD b/vendor/golang.org/x/crypto/ssh/terminal/BUILD deleted file mode 100644 index d66c8136e0a9c..0000000000000 --- a/vendor/golang.org/x/crypto/ssh/terminal/BUILD +++ /dev/null @@ -1,68 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "terminal.go", - "util.go", - "util_aix.go", - "util_bsd.go", - "util_linux.go", - "util_plan9.go", - "util_solaris.go", - "util_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/crypto/ssh/terminal", - importpath = "golang.org/x/crypto/ssh/terminal", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/mod/module/BUILD b/vendor/golang.org/x/mod/module/BUILD deleted file mode 100644 index 975a875313d3a..0000000000000 --- a/vendor/golang.org/x/mod/module/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["module.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/mod/module", - importpath = "golang.org/x/mod/module", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/mod/semver:go_default_library", - "//vendor/golang.org/x/xerrors:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/mod/semver/BUILD b/vendor/golang.org/x/mod/semver/BUILD deleted file mode 100644 index 458b0f0a28822..0000000000000 --- a/vendor/golang.org/x/mod/semver/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["semver.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/mod/semver", - importpath = "golang.org/x/mod/semver", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/bpf/BUILD b/vendor/golang.org/x/net/bpf/BUILD deleted file mode 100644 index d9a69839de50d..0000000000000 --- a/vendor/golang.org/x/net/bpf/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "asm.go", - "constants.go", - "doc.go", - "instructions.go", - "setter.go", - "vm.go", - "vm_instructions.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/bpf", - importpath = "golang.org/x/net/bpf", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/context/BUILD b/vendor/golang.org/x/net/context/BUILD deleted file mode 100644 index 842286cf031af..0000000000000 --- a/vendor/golang.org/x/net/context/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "context.go", - "go17.go", - "go19.go", - "pre_go17.go", - "pre_go19.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/context", - importpath = "golang.org/x/net/context", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/net/context/ctxhttp:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/context/ctxhttp/BUILD b/vendor/golang.org/x/net/context/ctxhttp/BUILD deleted file mode 100644 index 1c66c22a3002c..0000000000000 --- a/vendor/golang.org/x/net/context/ctxhttp/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["ctxhttp.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/context/ctxhttp", - importpath = "golang.org/x/net/context/ctxhttp", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/html/BUILD b/vendor/golang.org/x/net/html/BUILD deleted file mode 100644 index d0feedbbb89ef..0000000000000 --- a/vendor/golang.org/x/net/html/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "const.go", - "doc.go", - "doctype.go", - "entity.go", - "escape.go", - "foreign.go", - "node.go", - "parse.go", - "render.go", - "token.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/html", - importpath = "golang.org/x/net/html", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/net/html/atom:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/net/html/atom:all-srcs", - "//vendor/golang.org/x/net/html/charset:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/html/atom/BUILD b/vendor/golang.org/x/net/html/atom/BUILD deleted file mode 100644 index f51c384fa719f..0000000000000 --- a/vendor/golang.org/x/net/html/atom/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "atom.go", - "table.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/html/atom", - importpath = "golang.org/x/net/html/atom", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/html/charset/BUILD b/vendor/golang.org/x/net/html/charset/BUILD deleted file mode 100644 index 4197d83abb978..0000000000000 --- a/vendor/golang.org/x/net/html/charset/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["charset.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/html/charset", - importpath = "golang.org/x/net/html/charset", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/net/html:go_default_library", - "//vendor/golang.org/x/text/encoding:go_default_library", - "//vendor/golang.org/x/text/encoding/charmap:go_default_library", - "//vendor/golang.org/x/text/encoding/htmlindex:go_default_library", - "//vendor/golang.org/x/text/transform:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/http/httpguts/BUILD b/vendor/golang.org/x/net/http/httpguts/BUILD deleted file mode 100644 index 5e8a48e858bd6..0000000000000 --- a/vendor/golang.org/x/net/http/httpguts/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "guts.go", - "httplex.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/http/httpguts", - importpath = "golang.org/x/net/http/httpguts", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/net/idna:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/http2/BUILD b/vendor/golang.org/x/net/http2/BUILD deleted file mode 100644 index fa35f30c2b2b9..0000000000000 --- a/vendor/golang.org/x/net/http2/BUILD +++ /dev/null @@ -1,50 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ciphers.go", - "client_conn_pool.go", - "databuffer.go", - "errors.go", - "flow.go", - "frame.go", - "go111.go", - "gotrack.go", - "headermap.go", - "http2.go", - "not_go111.go", - "pipe.go", - "server.go", - "transport.go", - "write.go", - "writesched.go", - "writesched_priority.go", - "writesched_random.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/http2", - importpath = "golang.org/x/net/http2", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/net/http/httpguts:go_default_library", - "//vendor/golang.org/x/net/http2/hpack:go_default_library", - "//vendor/golang.org/x/net/idna:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/net/http2/hpack:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/http2/hpack/BUILD b/vendor/golang.org/x/net/http2/hpack/BUILD deleted file mode 100644 index 1f949ee4dfc1f..0000000000000 --- a/vendor/golang.org/x/net/http2/hpack/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "encode.go", - "hpack.go", - "huffman.go", - "tables.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/http2/hpack", - importpath = "golang.org/x/net/http2/hpack", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/idna/BUILD b/vendor/golang.org/x/net/idna/BUILD deleted file mode 100644 index c3b6ca7e3483b..0000000000000 --- a/vendor/golang.org/x/net/idna/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "idna10.0.0.go", - "idna9.0.0.go", - "punycode.go", - "tables10.0.0.go", - "tables11.0.0.go", - "tables12.00.go", - "tables9.0.0.go", - "trie.go", - "trieval.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/idna", - importpath = "golang.org/x/net/idna", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/text/secure/bidirule:go_default_library", - "//vendor/golang.org/x/text/unicode/bidi:go_default_library", - "//vendor/golang.org/x/text/unicode/norm:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/internal/iana/BUILD b/vendor/golang.org/x/net/internal/iana/BUILD deleted file mode 100644 index b24db04b35a67..0000000000000 --- a/vendor/golang.org/x/net/internal/iana/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["const.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/internal/iana", - importpath = "golang.org/x/net/internal/iana", - visibility = ["//vendor/golang.org/x/net:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/internal/socket/BUILD b/vendor/golang.org/x/net/internal/socket/BUILD deleted file mode 100644 index 742cb2bbc0c98..0000000000000 --- a/vendor/golang.org/x/net/internal/socket/BUILD +++ /dev/null @@ -1,152 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cmsghdr.go", - "cmsghdr_bsd.go", - "cmsghdr_linux_32bit.go", - "cmsghdr_linux_64bit.go", - "cmsghdr_solaris_64bit.go", - "cmsghdr_stub.go", - "empty.s", - "error_unix.go", - "error_windows.go", - "iovec_32bit.go", - "iovec_64bit.go", - "iovec_solaris_64bit.go", - "iovec_stub.go", - "mmsghdr_stub.go", - "mmsghdr_unix.go", - "msghdr_bsd.go", - "msghdr_bsdvar.go", - "msghdr_linux.go", - "msghdr_linux_32bit.go", - "msghdr_linux_64bit.go", - "msghdr_openbsd.go", - "msghdr_solaris_64bit.go", - "msghdr_stub.go", - "norace.go", - "race.go", - "rawconn.go", - "rawconn_mmsg.go", - "rawconn_msg.go", - "rawconn_nommsg.go", - "rawconn_nomsg.go", - "socket.go", - "sys.go", - "sys_bsd.go", - "sys_bsdvar.go", - "sys_const_unix.go", - "sys_darwin.go", - "sys_dragonfly.go", - "sys_go1_11_darwin.go", - "sys_linkname.go", - "sys_linux.go", - "sys_linux_386.go", - "sys_linux_386.s", - "sys_linux_amd64.go", - "sys_linux_arm.go", - "sys_linux_arm64.go", - "sys_linux_mips.go", - "sys_linux_mips64.go", - "sys_linux_mips64le.go", - "sys_linux_mipsle.go", - "sys_linux_ppc64.go", - "sys_linux_ppc64le.go", - "sys_linux_riscv64.go", - "sys_linux_s390x.go", - "sys_linux_s390x.s", - "sys_netbsd.go", - "sys_posix.go", - "sys_solaris.go", - "sys_solaris_amd64.s", - "sys_stub.go", - "sys_unix.go", - "sys_windows.go", - "zsys_aix_ppc64.go", - "zsys_darwin_386.go", - "zsys_darwin_amd64.go", - "zsys_darwin_arm.go", - "zsys_darwin_arm64.go", - "zsys_dragonfly_amd64.go", - "zsys_freebsd_386.go", - "zsys_freebsd_amd64.go", - "zsys_freebsd_arm.go", - "zsys_freebsd_arm64.go", - "zsys_linux_386.go", - "zsys_linux_amd64.go", - "zsys_linux_arm.go", - "zsys_linux_arm64.go", - "zsys_linux_mips.go", - "zsys_linux_mips64.go", - "zsys_linux_mips64le.go", - "zsys_linux_mipsle.go", - "zsys_linux_ppc64.go", - "zsys_linux_ppc64le.go", - "zsys_linux_riscv64.go", - "zsys_linux_s390x.go", - "zsys_netbsd_386.go", - "zsys_netbsd_amd64.go", - "zsys_netbsd_arm.go", - "zsys_netbsd_arm64.go", - "zsys_openbsd_386.go", - "zsys_openbsd_amd64.go", - "zsys_openbsd_arm.go", - "zsys_openbsd_arm64.go", - "zsys_solaris_amd64.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/internal/socket", - importpath = "golang.org/x/net/internal/socket", - visibility = ["//vendor/golang.org/x/net:__subpackages__"], - deps = select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/internal/socks/BUILD b/vendor/golang.org/x/net/internal/socks/BUILD deleted file mode 100644 index 13f7bcbd6e292..0000000000000 --- a/vendor/golang.org/x/net/internal/socks/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "socks.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/internal/socks", - importpath = "golang.org/x/net/internal/socks", - visibility = ["//vendor/golang.org/x/net:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/internal/timeseries/BUILD b/vendor/golang.org/x/net/internal/timeseries/BUILD deleted file mode 100644 index 789f12532299a..0000000000000 --- a/vendor/golang.org/x/net/internal/timeseries/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["timeseries.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/internal/timeseries", - importpath = "golang.org/x/net/internal/timeseries", - visibility = ["//vendor/golang.org/x/net:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/ipv4/BUILD b/vendor/golang.org/x/net/ipv4/BUILD deleted file mode 100644 index 5a52a2649d504..0000000000000 --- a/vendor/golang.org/x/net/ipv4/BUILD +++ /dev/null @@ -1,101 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "batch.go", - "control.go", - "control_bsd.go", - "control_pktinfo.go", - "control_stub.go", - "control_unix.go", - "control_windows.go", - "dgramopt.go", - "doc.go", - "endpoint.go", - "genericopt.go", - "header.go", - "helper.go", - "iana.go", - "icmp.go", - "icmp_linux.go", - "icmp_stub.go", - "packet.go", - "payload.go", - "payload_cmsg.go", - "payload_nocmsg.go", - "sockopt.go", - "sockopt_posix.go", - "sockopt_stub.go", - "sys_aix.go", - "sys_asmreq.go", - "sys_asmreq_stub.go", - "sys_asmreqn.go", - "sys_asmreqn_stub.go", - "sys_bpf.go", - "sys_bpf_stub.go", - "sys_bsd.go", - "sys_darwin.go", - "sys_dragonfly.go", - "sys_freebsd.go", - "sys_linux.go", - "sys_solaris.go", - "sys_ssmreq.go", - "sys_ssmreq_stub.go", - "sys_stub.go", - "sys_windows.go", - "zsys_aix_ppc64.go", - "zsys_darwin.go", - "zsys_dragonfly.go", - "zsys_freebsd_386.go", - "zsys_freebsd_amd64.go", - "zsys_freebsd_arm.go", - "zsys_freebsd_arm64.go", - "zsys_linux_386.go", - "zsys_linux_amd64.go", - "zsys_linux_arm.go", - "zsys_linux_arm64.go", - "zsys_linux_mips.go", - "zsys_linux_mips64.go", - "zsys_linux_mips64le.go", - "zsys_linux_mipsle.go", - "zsys_linux_ppc.go", - "zsys_linux_ppc64.go", - "zsys_linux_ppc64le.go", - "zsys_linux_riscv64.go", - "zsys_linux_s390x.go", - "zsys_netbsd.go", - "zsys_openbsd.go", - "zsys_solaris.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/ipv4", - importpath = "golang.org/x/net/ipv4", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/net/bpf:go_default_library", - "//vendor/golang.org/x/net/internal/iana:go_default_library", - "//vendor/golang.org/x/net/internal/socket:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/ipv6/BUILD b/vendor/golang.org/x/net/ipv6/BUILD deleted file mode 100644 index 7efdd4ea18548..0000000000000 --- a/vendor/golang.org/x/net/ipv6/BUILD +++ /dev/null @@ -1,100 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "batch.go", - "control.go", - "control_rfc2292_unix.go", - "control_rfc3542_unix.go", - "control_stub.go", - "control_unix.go", - "control_windows.go", - "dgramopt.go", - "doc.go", - "endpoint.go", - "genericopt.go", - "header.go", - "helper.go", - "iana.go", - "icmp.go", - "icmp_bsd.go", - "icmp_linux.go", - "icmp_solaris.go", - "icmp_stub.go", - "icmp_windows.go", - "payload.go", - "payload_cmsg.go", - "payload_nocmsg.go", - "sockopt.go", - "sockopt_posix.go", - "sockopt_stub.go", - "sys_aix.go", - "sys_asmreq.go", - "sys_asmreq_stub.go", - "sys_bpf.go", - "sys_bpf_stub.go", - "sys_bsd.go", - "sys_darwin.go", - "sys_freebsd.go", - "sys_linux.go", - "sys_solaris.go", - "sys_ssmreq.go", - "sys_ssmreq_stub.go", - "sys_stub.go", - "sys_windows.go", - "zsys_aix_ppc64.go", - "zsys_darwin.go", - "zsys_dragonfly.go", - "zsys_freebsd_386.go", - "zsys_freebsd_amd64.go", - "zsys_freebsd_arm.go", - "zsys_freebsd_arm64.go", - "zsys_linux_386.go", - "zsys_linux_amd64.go", - "zsys_linux_arm.go", - "zsys_linux_arm64.go", - "zsys_linux_mips.go", - "zsys_linux_mips64.go", - "zsys_linux_mips64le.go", - "zsys_linux_mipsle.go", - "zsys_linux_ppc.go", - "zsys_linux_ppc64.go", - "zsys_linux_ppc64le.go", - "zsys_linux_riscv64.go", - "zsys_linux_s390x.go", - "zsys_netbsd.go", - "zsys_openbsd.go", - "zsys_solaris.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/ipv6", - importpath = "golang.org/x/net/ipv6", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/net/bpf:go_default_library", - "//vendor/golang.org/x/net/internal/iana:go_default_library", - "//vendor/golang.org/x/net/internal/socket:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/proxy/BUILD b/vendor/golang.org/x/net/proxy/BUILD deleted file mode 100644 index 4c99fa9a9ba34..0000000000000 --- a/vendor/golang.org/x/net/proxy/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dial.go", - "direct.go", - "per_host.go", - "proxy.go", - "socks5.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/proxy", - importpath = "golang.org/x/net/proxy", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/net/internal/socks:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/trace/BUILD b/vendor/golang.org/x/net/trace/BUILD deleted file mode 100644 index 2cfceb4120c32..0000000000000 --- a/vendor/golang.org/x/net/trace/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "events.go", - "histogram.go", - "trace.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/trace", - importpath = "golang.org/x/net/trace", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/net/internal/timeseries:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/net/websocket/BUILD b/vendor/golang.org/x/net/websocket/BUILD deleted file mode 100644 index b336c57f24dc6..0000000000000 --- a/vendor/golang.org/x/net/websocket/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "dial.go", - "hybi.go", - "server.go", - "websocket.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/net/websocket", - importpath = "golang.org/x/net/websocket", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/oauth2/BUILD b/vendor/golang.org/x/oauth2/BUILD deleted file mode 100644 index 3d9c1eb1f0dfd..0000000000000 --- a/vendor/golang.org/x/oauth2/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "oauth2.go", - "token.go", - "transport.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/oauth2", - importpath = "golang.org/x/oauth2", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/oauth2/internal:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/oauth2/google:all-srcs", - "//vendor/golang.org/x/oauth2/internal:all-srcs", - "//vendor/golang.org/x/oauth2/jws:all-srcs", - "//vendor/golang.org/x/oauth2/jwt:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/oauth2/google/BUILD b/vendor/golang.org/x/oauth2/google/BUILD deleted file mode 100644 index a9ce97737c0c2..0000000000000 --- a/vendor/golang.org/x/oauth2/google/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "appengine.go", - "appengine_gen2_flex.go", - "default.go", - "doc.go", - "google.go", - "jwt.go", - "sdk.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/oauth2/google", - importpath = "golang.org/x/oauth2/google", - visibility = ["//visibility:public"], - deps = [ - "//vendor/cloud.google.com/go/compute/metadata:go_default_library", - "//vendor/golang.org/x/oauth2:go_default_library", - "//vendor/golang.org/x/oauth2/internal:go_default_library", - "//vendor/golang.org/x/oauth2/jws:go_default_library", - "//vendor/golang.org/x/oauth2/jwt:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/oauth2/internal/BUILD b/vendor/golang.org/x/oauth2/internal/BUILD deleted file mode 100644 index 5cf91f28ad932..0000000000000 --- a/vendor/golang.org/x/oauth2/internal/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "oauth2.go", - "token.go", - "transport.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/oauth2/internal", - importpath = "golang.org/x/oauth2/internal", - visibility = ["//vendor/golang.org/x/oauth2:__subpackages__"], - deps = ["//vendor/golang.org/x/net/context/ctxhttp:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/oauth2/jws/BUILD b/vendor/golang.org/x/oauth2/jws/BUILD deleted file mode 100644 index 2e10f9ad012fe..0000000000000 --- a/vendor/golang.org/x/oauth2/jws/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["jws.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/oauth2/jws", - importpath = "golang.org/x/oauth2/jws", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/oauth2/jwt/BUILD b/vendor/golang.org/x/oauth2/jwt/BUILD deleted file mode 100644 index a1cf5c5c83c06..0000000000000 --- a/vendor/golang.org/x/oauth2/jwt/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["jwt.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/oauth2/jwt", - importpath = "golang.org/x/oauth2/jwt", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/oauth2:go_default_library", - "//vendor/golang.org/x/oauth2/internal:go_default_library", - "//vendor/golang.org/x/oauth2/jws:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/sync/singleflight/BUILD b/vendor/golang.org/x/sync/singleflight/BUILD deleted file mode 100644 index 036740f471fa7..0000000000000 --- a/vendor/golang.org/x/sync/singleflight/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["singleflight.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/sync/singleflight", - importpath = "golang.org/x/sync/singleflight", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/sys/cpu/BUILD b/vendor/golang.org/x/sys/cpu/BUILD deleted file mode 100644 index 5f02c25d9ee8d..0000000000000 --- a/vendor/golang.org/x/sys/cpu/BUILD +++ /dev/null @@ -1,51 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "asm_aix_ppc64.s", - "byteorder.go", - "cpu.go", - "cpu_aix.go", - "cpu_arm.go", - "cpu_arm64.go", - "cpu_arm64.s", - "cpu_gc_arm64.go", - "cpu_gc_s390x.go", - "cpu_gc_x86.go", - "cpu_linux.go", - "cpu_linux_arm.go", - "cpu_linux_arm64.go", - "cpu_linux_mips64x.go", - "cpu_linux_noinit.go", - "cpu_linux_ppc64x.go", - "cpu_linux_s390x.go", - "cpu_mips64x.go", - "cpu_mipsx.go", - "cpu_other_arm64.go", - "cpu_riscv64.go", - "cpu_s390x.s", - "cpu_wasm.go", - "cpu_x86.go", - "cpu_x86.s", - "hwcap_linux.go", - "syscall_aix_ppc64_gc.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/sys/cpu", - importpath = "golang.org/x/sys/cpu", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/sys/internal/unsafeheader/BUILD b/vendor/golang.org/x/sys/internal/unsafeheader/BUILD deleted file mode 100644 index 6bb5499b056d6..0000000000000 --- a/vendor/golang.org/x/sys/internal/unsafeheader/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["unsafeheader.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/sys/internal/unsafeheader", - importpath = "golang.org/x/sys/internal/unsafeheader", - visibility = ["//vendor/golang.org/x/sys:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/sys/unix/BUILD b/vendor/golang.org/x/sys/unix/BUILD deleted file mode 100644 index 1fe841101b9f2..0000000000000 --- a/vendor/golang.org/x/sys/unix/BUILD +++ /dev/null @@ -1,329 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "affinity_linux.go", - "aliases.go", - "asm_aix_ppc64.s", - "asm_darwin_386.s", - "asm_darwin_amd64.s", - "asm_darwin_arm.s", - "asm_darwin_arm64.s", - "asm_dragonfly_amd64.s", - "asm_freebsd_386.s", - "asm_freebsd_amd64.s", - "asm_freebsd_arm.s", - "asm_freebsd_arm64.s", - "asm_linux_386.s", - "asm_linux_amd64.s", - "asm_linux_arm.s", - "asm_linux_arm64.s", - "asm_linux_mips64x.s", - "asm_linux_mipsx.s", - "asm_linux_ppc64x.s", - "asm_linux_riscv64.s", - "asm_linux_s390x.s", - "asm_netbsd_386.s", - "asm_netbsd_amd64.s", - "asm_netbsd_arm.s", - "asm_netbsd_arm64.s", - "asm_openbsd_386.s", - "asm_openbsd_amd64.s", - "asm_openbsd_arm.s", - "asm_openbsd_arm64.s", - "asm_solaris_amd64.s", - "bluetooth_linux.go", - "cap_freebsd.go", - "constants.go", - "dev_aix_ppc64.go", - "dev_darwin.go", - "dev_dragonfly.go", - "dev_freebsd.go", - "dev_linux.go", - "dev_netbsd.go", - "dev_openbsd.go", - "dirent.go", - "endian_big.go", - "endian_little.go", - "env_unix.go", - "errors_freebsd_386.go", - "errors_freebsd_amd64.go", - "errors_freebsd_arm.go", - "errors_freebsd_arm64.go", - "fcntl.go", - "fcntl_darwin.go", - "fcntl_linux_32bit.go", - "fdset.go", - "ioctl.go", - "pagesize_unix.go", - "pledge_openbsd.go", - "race.go", - "race0.go", - "readdirent_getdents.go", - "readdirent_getdirentries.go", - "sockcmsg_dragonfly.go", - "sockcmsg_linux.go", - "sockcmsg_unix.go", - "sockcmsg_unix_other.go", - "str.go", - "syscall.go", - "syscall_aix.go", - "syscall_aix_ppc64.go", - "syscall_bsd.go", - "syscall_darwin.1_12.go", - "syscall_darwin.1_13.go", - "syscall_darwin.go", - "syscall_darwin_386.1_11.go", - "syscall_darwin_386.go", - "syscall_darwin_amd64.1_11.go", - "syscall_darwin_amd64.go", - "syscall_darwin_arm.1_11.go", - "syscall_darwin_arm.go", - "syscall_darwin_arm64.1_11.go", - "syscall_darwin_arm64.go", - "syscall_darwin_libSystem.go", - "syscall_dragonfly.go", - "syscall_dragonfly_amd64.go", - "syscall_freebsd.go", - "syscall_freebsd_386.go", - "syscall_freebsd_amd64.go", - "syscall_freebsd_arm.go", - "syscall_freebsd_arm64.go", - "syscall_illumos.go", - "syscall_linux.go", - "syscall_linux_386.go", - "syscall_linux_amd64.go", - "syscall_linux_amd64_gc.go", - "syscall_linux_arm.go", - "syscall_linux_arm64.go", - "syscall_linux_gc.go", - "syscall_linux_gc_386.go", - "syscall_linux_mips64x.go", - "syscall_linux_mipsx.go", - "syscall_linux_ppc64x.go", - "syscall_linux_riscv64.go", - "syscall_linux_s390x.go", - "syscall_netbsd.go", - "syscall_netbsd_386.go", - "syscall_netbsd_amd64.go", - "syscall_netbsd_arm.go", - "syscall_netbsd_arm64.go", - "syscall_openbsd.go", - "syscall_openbsd_386.go", - "syscall_openbsd_amd64.go", - "syscall_openbsd_arm.go", - "syscall_openbsd_arm64.go", - "syscall_solaris.go", - "syscall_solaris_amd64.go", - "syscall_unix.go", - "syscall_unix_gc.go", - "syscall_unix_gc_ppc64x.go", - "timestruct.go", - "unveil_openbsd.go", - "xattr_bsd.go", - "zerrors_aix_ppc64.go", - "zerrors_darwin_386.go", - "zerrors_darwin_amd64.go", - "zerrors_darwin_arm.go", - "zerrors_darwin_arm64.go", - "zerrors_dragonfly_amd64.go", - "zerrors_freebsd_386.go", - "zerrors_freebsd_amd64.go", - "zerrors_freebsd_arm.go", - "zerrors_freebsd_arm64.go", - "zerrors_linux.go", - "zerrors_linux_386.go", - "zerrors_linux_amd64.go", - "zerrors_linux_arm.go", - "zerrors_linux_arm64.go", - "zerrors_linux_mips.go", - "zerrors_linux_mips64.go", - "zerrors_linux_mips64le.go", - "zerrors_linux_mipsle.go", - "zerrors_linux_ppc64.go", - "zerrors_linux_ppc64le.go", - "zerrors_linux_riscv64.go", - "zerrors_linux_s390x.go", - "zerrors_netbsd_386.go", - "zerrors_netbsd_amd64.go", - "zerrors_netbsd_arm.go", - "zerrors_netbsd_arm64.go", - "zerrors_openbsd_386.go", - "zerrors_openbsd_amd64.go", - "zerrors_openbsd_arm.go", - "zerrors_openbsd_arm64.go", - "zerrors_solaris_amd64.go", - "zptrace_armnn_linux.go", - "zptrace_linux_arm64.go", - "zptrace_mipsnn_linux.go", - "zptrace_mipsnnle_linux.go", - "zptrace_x86_linux.go", - "zsyscall_aix_ppc64.go", - "zsyscall_aix_ppc64_gc.go", - "zsyscall_darwin_386.1_11.go", - "zsyscall_darwin_386.1_13.go", - "zsyscall_darwin_386.1_13.s", - "zsyscall_darwin_386.go", - "zsyscall_darwin_386.s", - "zsyscall_darwin_amd64.1_11.go", - "zsyscall_darwin_amd64.1_13.go", - "zsyscall_darwin_amd64.1_13.s", - "zsyscall_darwin_amd64.go", - "zsyscall_darwin_amd64.s", - "zsyscall_darwin_arm.1_11.go", - "zsyscall_darwin_arm.1_13.go", - "zsyscall_darwin_arm.1_13.s", - "zsyscall_darwin_arm.go", - "zsyscall_darwin_arm.s", - "zsyscall_darwin_arm64.1_11.go", - "zsyscall_darwin_arm64.1_13.go", - "zsyscall_darwin_arm64.1_13.s", - "zsyscall_darwin_arm64.go", - "zsyscall_darwin_arm64.s", - "zsyscall_dragonfly_amd64.go", - "zsyscall_freebsd_386.go", - "zsyscall_freebsd_amd64.go", - "zsyscall_freebsd_arm.go", - "zsyscall_freebsd_arm64.go", - "zsyscall_illumos_amd64.go", - "zsyscall_linux.go", - "zsyscall_linux_386.go", - "zsyscall_linux_amd64.go", - "zsyscall_linux_arm.go", - "zsyscall_linux_arm64.go", - "zsyscall_linux_mips.go", - "zsyscall_linux_mips64.go", - "zsyscall_linux_mips64le.go", - "zsyscall_linux_mipsle.go", - "zsyscall_linux_ppc64.go", - "zsyscall_linux_ppc64le.go", - "zsyscall_linux_riscv64.go", - "zsyscall_linux_s390x.go", - "zsyscall_netbsd_386.go", - "zsyscall_netbsd_amd64.go", - "zsyscall_netbsd_arm.go", - "zsyscall_netbsd_arm64.go", - "zsyscall_openbsd_386.go", - "zsyscall_openbsd_amd64.go", - "zsyscall_openbsd_arm.go", - "zsyscall_openbsd_arm64.go", - "zsyscall_solaris_amd64.go", - "zsysctl_openbsd_386.go", - "zsysctl_openbsd_amd64.go", - "zsysctl_openbsd_arm.go", - "zsysctl_openbsd_arm64.go", - "zsysnum_darwin_386.go", - "zsysnum_darwin_amd64.go", - "zsysnum_darwin_arm.go", - "zsysnum_darwin_arm64.go", - "zsysnum_dragonfly_amd64.go", - "zsysnum_freebsd_386.go", - "zsysnum_freebsd_amd64.go", - "zsysnum_freebsd_arm.go", - "zsysnum_freebsd_arm64.go", - "zsysnum_linux_386.go", - "zsysnum_linux_amd64.go", - "zsysnum_linux_arm.go", - "zsysnum_linux_arm64.go", - "zsysnum_linux_mips.go", - "zsysnum_linux_mips64.go", - "zsysnum_linux_mips64le.go", - "zsysnum_linux_mipsle.go", - "zsysnum_linux_ppc64.go", - "zsysnum_linux_ppc64le.go", - "zsysnum_linux_riscv64.go", - "zsysnum_linux_s390x.go", - "zsysnum_netbsd_386.go", - "zsysnum_netbsd_amd64.go", - "zsysnum_netbsd_arm.go", - "zsysnum_netbsd_arm64.go", - "zsysnum_openbsd_386.go", - "zsysnum_openbsd_amd64.go", - "zsysnum_openbsd_arm.go", - "zsysnum_openbsd_arm64.go", - "ztypes_aix_ppc64.go", - "ztypes_darwin_386.go", - "ztypes_darwin_amd64.go", - "ztypes_darwin_arm.go", - "ztypes_darwin_arm64.go", - "ztypes_dragonfly_amd64.go", - "ztypes_freebsd_386.go", - "ztypes_freebsd_amd64.go", - "ztypes_freebsd_arm.go", - "ztypes_freebsd_arm64.go", - "ztypes_linux.go", - "ztypes_linux_386.go", - "ztypes_linux_amd64.go", - "ztypes_linux_arm.go", - "ztypes_linux_arm64.go", - "ztypes_linux_mips.go", - "ztypes_linux_mips64.go", - "ztypes_linux_mips64le.go", - "ztypes_linux_mipsle.go", - "ztypes_linux_ppc64.go", - "ztypes_linux_ppc64le.go", - "ztypes_linux_riscv64.go", - "ztypes_linux_s390x.go", - "ztypes_netbsd_386.go", - "ztypes_netbsd_amd64.go", - "ztypes_netbsd_arm.go", - "ztypes_netbsd_arm64.go", - "ztypes_openbsd_386.go", - "ztypes_openbsd_amd64.go", - "ztypes_openbsd_arm.go", - "ztypes_openbsd_arm64.go", - "ztypes_solaris_amd64.go", - ], - cgo = True, - importmap = "k8s.io/kubernetes/vendor/golang.org/x/sys/unix", - importpath = "golang.org/x/sys/unix", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/golang.org/x/sys/internal/unsafeheader:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/internal/unsafeheader:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/golang.org/x/sys/internal/unsafeheader:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/golang.org/x/sys/internal/unsafeheader:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/golang.org/x/sys/internal/unsafeheader:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/golang.org/x/sys/internal/unsafeheader:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/internal/unsafeheader:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/golang.org/x/sys/internal/unsafeheader:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/golang.org/x/sys/internal/unsafeheader:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/golang.org/x/sys/internal/unsafeheader:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/sys/windows/BUILD b/vendor/golang.org/x/sys/windows/BUILD deleted file mode 100644 index 2145ed0e4bc61..0000000000000 --- a/vendor/golang.org/x/sys/windows/BUILD +++ /dev/null @@ -1,55 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "aliases.go", - "dll_windows.go", - "empty.s", - "env_windows.go", - "eventlog.go", - "exec_windows.go", - "memory_windows.go", - "race.go", - "race0.go", - "security_windows.go", - "service.go", - "str.go", - "syscall.go", - "syscall_windows.go", - "types_windows.go", - "types_windows_386.go", - "types_windows_amd64.go", - "types_windows_arm.go", - "zerrors_windows.go", - "zknownfolderids_windows.go", - "zsyscall_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/sys/windows", - importpath = "golang.org/x/sys/windows", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/internal/unsafeheader:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/sys/windows/registry:all-srcs", - "//vendor/golang.org/x/sys/windows/svc:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/sys/windows/registry/BUILD b/vendor/golang.org/x/sys/windows/registry/BUILD deleted file mode 100644 index 8ed8a932b612c..0000000000000 --- a/vendor/golang.org/x/sys/windows/registry/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "key.go", - "syscall.go", - "value.go", - "zsyscall_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/sys/windows/registry", - importpath = "golang.org/x/sys/windows/registry", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/sys/windows/svc/BUILD b/vendor/golang.org/x/sys/windows/svc/BUILD deleted file mode 100644 index 1ab636749faf6..0000000000000 --- a/vendor/golang.org/x/sys/windows/svc/BUILD +++ /dev/null @@ -1,42 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "event.go", - "go12.go", - "go13.go", - "security.go", - "service.go", - "sys_386.s", - "sys_amd64.s", - "sys_arm.s", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/sys/windows/svc", - importpath = "golang.org/x/sys/windows/svc", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/internal/unsafeheader:go_default_library", - "//vendor/golang.org/x/sys/windows:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/sys/windows/svc/mgr:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/BUILD b/vendor/golang.org/x/sys/windows/svc/mgr/BUILD deleted file mode 100644 index 7354ecd0ef6de..0000000000000 --- a/vendor/golang.org/x/sys/windows/svc/mgr/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "config.go", - "mgr.go", - "recovery.go", - "service.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/sys/windows/svc/mgr", - importpath = "golang.org/x/sys/windows/svc/mgr", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/golang.org/x/sys/internal/unsafeheader:go_default_library", - "//vendor/golang.org/x/sys/windows:go_default_library", - "//vendor/golang.org/x/sys/windows/svc:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/encoding/BUILD b/vendor/golang.org/x/text/encoding/BUILD deleted file mode 100644 index effa752fd9f85..0000000000000 --- a/vendor/golang.org/x/text/encoding/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["encoding.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/encoding", - importpath = "golang.org/x/text/encoding", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/text/encoding/internal/identifier:go_default_library", - "//vendor/golang.org/x/text/transform:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/text/encoding/charmap:all-srcs", - "//vendor/golang.org/x/text/encoding/htmlindex:all-srcs", - "//vendor/golang.org/x/text/encoding/internal:all-srcs", - "//vendor/golang.org/x/text/encoding/japanese:all-srcs", - "//vendor/golang.org/x/text/encoding/korean:all-srcs", - "//vendor/golang.org/x/text/encoding/simplifiedchinese:all-srcs", - "//vendor/golang.org/x/text/encoding/traditionalchinese:all-srcs", - "//vendor/golang.org/x/text/encoding/unicode:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/encoding/charmap/BUILD b/vendor/golang.org/x/text/encoding/charmap/BUILD deleted file mode 100644 index 630ad68a7eb0f..0000000000000 --- a/vendor/golang.org/x/text/encoding/charmap/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "charmap.go", - "tables.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/encoding/charmap", - importpath = "golang.org/x/text/encoding/charmap", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/text/encoding:go_default_library", - "//vendor/golang.org/x/text/encoding/internal:go_default_library", - "//vendor/golang.org/x/text/encoding/internal/identifier:go_default_library", - "//vendor/golang.org/x/text/transform:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/encoding/htmlindex/BUILD b/vendor/golang.org/x/text/encoding/htmlindex/BUILD deleted file mode 100644 index d2c94998d0cb2..0000000000000 --- a/vendor/golang.org/x/text/encoding/htmlindex/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "htmlindex.go", - "map.go", - "tables.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/encoding/htmlindex", - importpath = "golang.org/x/text/encoding/htmlindex", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/text/encoding:go_default_library", - "//vendor/golang.org/x/text/encoding/charmap:go_default_library", - "//vendor/golang.org/x/text/encoding/internal/identifier:go_default_library", - "//vendor/golang.org/x/text/encoding/japanese:go_default_library", - "//vendor/golang.org/x/text/encoding/korean:go_default_library", - "//vendor/golang.org/x/text/encoding/simplifiedchinese:go_default_library", - "//vendor/golang.org/x/text/encoding/traditionalchinese:go_default_library", - "//vendor/golang.org/x/text/encoding/unicode:go_default_library", - "//vendor/golang.org/x/text/language:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/encoding/internal/BUILD b/vendor/golang.org/x/text/encoding/internal/BUILD deleted file mode 100644 index 8672bd42de0d4..0000000000000 --- a/vendor/golang.org/x/text/encoding/internal/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["internal.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/encoding/internal", - importpath = "golang.org/x/text/encoding/internal", - visibility = ["//vendor/golang.org/x/text/encoding:__subpackages__"], - deps = [ - "//vendor/golang.org/x/text/encoding:go_default_library", - "//vendor/golang.org/x/text/encoding/internal/identifier:go_default_library", - "//vendor/golang.org/x/text/transform:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/text/encoding/internal/identifier:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/encoding/internal/identifier/BUILD b/vendor/golang.org/x/text/encoding/internal/identifier/BUILD deleted file mode 100644 index 6ad8664ffbc2e..0000000000000 --- a/vendor/golang.org/x/text/encoding/internal/identifier/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "identifier.go", - "mib.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/encoding/internal/identifier", - importpath = "golang.org/x/text/encoding/internal/identifier", - visibility = ["//vendor/golang.org/x/text/encoding:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/encoding/japanese/BUILD b/vendor/golang.org/x/text/encoding/japanese/BUILD deleted file mode 100644 index 981c059bdd8ea..0000000000000 --- a/vendor/golang.org/x/text/encoding/japanese/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "all.go", - "eucjp.go", - "iso2022jp.go", - "shiftjis.go", - "tables.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/encoding/japanese", - importpath = "golang.org/x/text/encoding/japanese", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/text/encoding:go_default_library", - "//vendor/golang.org/x/text/encoding/internal:go_default_library", - "//vendor/golang.org/x/text/encoding/internal/identifier:go_default_library", - "//vendor/golang.org/x/text/transform:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/encoding/korean/BUILD b/vendor/golang.org/x/text/encoding/korean/BUILD deleted file mode 100644 index 1e7308181f9e2..0000000000000 --- a/vendor/golang.org/x/text/encoding/korean/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "euckr.go", - "tables.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/encoding/korean", - importpath = "golang.org/x/text/encoding/korean", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/text/encoding:go_default_library", - "//vendor/golang.org/x/text/encoding/internal:go_default_library", - "//vendor/golang.org/x/text/encoding/internal/identifier:go_default_library", - "//vendor/golang.org/x/text/transform:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/BUILD b/vendor/golang.org/x/text/encoding/simplifiedchinese/BUILD deleted file mode 100644 index d75c89a2f884c..0000000000000 --- a/vendor/golang.org/x/text/encoding/simplifiedchinese/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "all.go", - "gbk.go", - "hzgb2312.go", - "tables.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/encoding/simplifiedchinese", - importpath = "golang.org/x/text/encoding/simplifiedchinese", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/text/encoding:go_default_library", - "//vendor/golang.org/x/text/encoding/internal:go_default_library", - "//vendor/golang.org/x/text/encoding/internal/identifier:go_default_library", - "//vendor/golang.org/x/text/transform:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/encoding/traditionalchinese/BUILD b/vendor/golang.org/x/text/encoding/traditionalchinese/BUILD deleted file mode 100644 index 5149ac32f1f52..0000000000000 --- a/vendor/golang.org/x/text/encoding/traditionalchinese/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "big5.go", - "tables.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/encoding/traditionalchinese", - importpath = "golang.org/x/text/encoding/traditionalchinese", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/text/encoding:go_default_library", - "//vendor/golang.org/x/text/encoding/internal:go_default_library", - "//vendor/golang.org/x/text/encoding/internal/identifier:go_default_library", - "//vendor/golang.org/x/text/transform:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/encoding/unicode/BUILD b/vendor/golang.org/x/text/encoding/unicode/BUILD deleted file mode 100644 index 80f88378bec30..0000000000000 --- a/vendor/golang.org/x/text/encoding/unicode/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "override.go", - "unicode.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/encoding/unicode", - importpath = "golang.org/x/text/encoding/unicode", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/text/encoding:go_default_library", - "//vendor/golang.org/x/text/encoding/internal:go_default_library", - "//vendor/golang.org/x/text/encoding/internal/identifier:go_default_library", - "//vendor/golang.org/x/text/internal/utf8internal:go_default_library", - "//vendor/golang.org/x/text/runes:go_default_library", - "//vendor/golang.org/x/text/transform:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/internal/language/BUILD b/vendor/golang.org/x/text/internal/language/BUILD deleted file mode 100644 index 6a8fccdbee11e..0000000000000 --- a/vendor/golang.org/x/text/internal/language/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "common.go", - "compact.go", - "compose.go", - "coverage.go", - "language.go", - "lookup.go", - "match.go", - "parse.go", - "tables.go", - "tags.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/internal/language", - importpath = "golang.org/x/text/internal/language", - visibility = ["//vendor/golang.org/x/text:__subpackages__"], - deps = ["//vendor/golang.org/x/text/internal/tag:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/text/internal/language/compact:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/internal/language/compact/BUILD b/vendor/golang.org/x/text/internal/language/compact/BUILD deleted file mode 100644 index 83a8edd0e09ac..0000000000000 --- a/vendor/golang.org/x/text/internal/language/compact/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "compact.go", - "language.go", - "parents.go", - "tables.go", - "tags.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/internal/language/compact", - importpath = "golang.org/x/text/internal/language/compact", - visibility = ["//vendor/golang.org/x/text:__subpackages__"], - deps = ["//vendor/golang.org/x/text/internal/language:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/internal/tag/BUILD b/vendor/golang.org/x/text/internal/tag/BUILD deleted file mode 100644 index 06366c50226a2..0000000000000 --- a/vendor/golang.org/x/text/internal/tag/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["tag.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/internal/tag", - importpath = "golang.org/x/text/internal/tag", - visibility = ["//vendor/golang.org/x/text:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/internal/utf8internal/BUILD b/vendor/golang.org/x/text/internal/utf8internal/BUILD deleted file mode 100644 index 3b5adfe702b4e..0000000000000 --- a/vendor/golang.org/x/text/internal/utf8internal/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["utf8internal.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/internal/utf8internal", - importpath = "golang.org/x/text/internal/utf8internal", - visibility = ["//vendor/golang.org/x/text:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/language/BUILD b/vendor/golang.org/x/text/language/BUILD deleted file mode 100644 index 8159965f70976..0000000000000 --- a/vendor/golang.org/x/text/language/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "coverage.go", - "doc.go", - "go1_1.go", - "go1_2.go", - "language.go", - "match.go", - "parse.go", - "tables.go", - "tags.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/language", - importpath = "golang.org/x/text/language", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/text/internal/language:go_default_library", - "//vendor/golang.org/x/text/internal/language/compact:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/runes/BUILD b/vendor/golang.org/x/text/runes/BUILD deleted file mode 100644 index b9e6473c608e8..0000000000000 --- a/vendor/golang.org/x/text/runes/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cond.go", - "runes.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/runes", - importpath = "golang.org/x/text/runes", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/text/transform:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/secure/bidirule/BUILD b/vendor/golang.org/x/text/secure/bidirule/BUILD deleted file mode 100644 index 9d82acdd2e554..0000000000000 --- a/vendor/golang.org/x/text/secure/bidirule/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bidirule.go", - "bidirule10.0.0.go", - "bidirule9.0.0.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/secure/bidirule", - importpath = "golang.org/x/text/secure/bidirule", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/text/transform:go_default_library", - "//vendor/golang.org/x/text/unicode/bidi:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/transform/BUILD b/vendor/golang.org/x/text/transform/BUILD deleted file mode 100644 index 0e6f6780bb6ef..0000000000000 --- a/vendor/golang.org/x/text/transform/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["transform.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/transform", - importpath = "golang.org/x/text/transform", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/unicode/bidi/BUILD b/vendor/golang.org/x/text/unicode/bidi/BUILD deleted file mode 100644 index f56c04a284afa..0000000000000 --- a/vendor/golang.org/x/text/unicode/bidi/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bidi.go", - "bracket.go", - "core.go", - "prop.go", - "tables10.0.0.go", - "tables11.0.0.go", - "tables12.0.0.go", - "tables9.0.0.go", - "trieval.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/unicode/bidi", - importpath = "golang.org/x/text/unicode/bidi", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/unicode/norm/BUILD b/vendor/golang.org/x/text/unicode/norm/BUILD deleted file mode 100644 index b16d38bd50afe..0000000000000 --- a/vendor/golang.org/x/text/unicode/norm/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "composition.go", - "forminfo.go", - "input.go", - "iter.go", - "normalize.go", - "readwriter.go", - "tables10.0.0.go", - "tables11.0.0.go", - "tables12.0.0.go", - "tables9.0.0.go", - "transform.go", - "trie.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/unicode/norm", - importpath = "golang.org/x/text/unicode/norm", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/text/transform:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/text/width/BUILD b/vendor/golang.org/x/text/width/BUILD deleted file mode 100644 index e9eb0572a0a2d..0000000000000 --- a/vendor/golang.org/x/text/width/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "kind_string.go", - "tables10.0.0.go", - "tables11.0.0.go", - "tables12.0.0.go", - "tables9.0.0.go", - "transform.go", - "trieval.go", - "width.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/text/width", - importpath = "golang.org/x/text/width", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/text/transform:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/time/rate/BUILD b/vendor/golang.org/x/time/rate/BUILD deleted file mode 100644 index 66a1cb79e231c..0000000000000 --- a/vendor/golang.org/x/time/rate/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["rate.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/time/rate", - importpath = "golang.org/x/time/rate", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/benchmark/parse/BUILD b/vendor/golang.org/x/tools/benchmark/parse/BUILD deleted file mode 100644 index 1bd93c7fc77bf..0000000000000 --- a/vendor/golang.org/x/tools/benchmark/parse/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["parse.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/benchmark/parse", - importpath = "golang.org/x/tools/benchmark/parse", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/container/intsets/BUILD b/vendor/golang.org/x/tools/container/intsets/BUILD deleted file mode 100644 index ff14c41ac6e0e..0000000000000 --- a/vendor/golang.org/x/tools/container/intsets/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "popcnt_amd64.go", - "popcnt_amd64.s", - "popcnt_generic.go", - "sparse.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/container/intsets", - importpath = "golang.org/x/tools/container/intsets", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/go/ast/astutil/BUILD b/vendor/golang.org/x/tools/go/ast/astutil/BUILD deleted file mode 100644 index 57b9d42a44650..0000000000000 --- a/vendor/golang.org/x/tools/go/ast/astutil/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "enclosing.go", - "imports.go", - "rewrite.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/go/ast/astutil", - importpath = "golang.org/x/tools/go/ast/astutil", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/go/gcexportdata/BUILD b/vendor/golang.org/x/tools/go/gcexportdata/BUILD deleted file mode 100644 index ce4a66daebf32..0000000000000 --- a/vendor/golang.org/x/tools/go/gcexportdata/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "gcexportdata.go", - "importer.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/go/gcexportdata", - importpath = "golang.org/x/tools/go/gcexportdata", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/tools/go/internal/gcimporter:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/BUILD b/vendor/golang.org/x/tools/go/internal/gcimporter/BUILD deleted file mode 100644 index a8279f92e1d2f..0000000000000 --- a/vendor/golang.org/x/tools/go/internal/gcimporter/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bexport.go", - "bimport.go", - "exportdata.go", - "gcimporter.go", - "iexport.go", - "iimport.go", - "newInterface10.go", - "newInterface11.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/go/internal/gcimporter", - importpath = "golang.org/x/tools/go/internal/gcimporter", - visibility = ["//vendor/golang.org/x/tools/go:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/go/internal/packagesdriver/BUILD b/vendor/golang.org/x/tools/go/internal/packagesdriver/BUILD deleted file mode 100644 index deb2fcc609ec9..0000000000000 --- a/vendor/golang.org/x/tools/go/internal/packagesdriver/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["sizes.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/go/internal/packagesdriver", - importpath = "golang.org/x/tools/go/internal/packagesdriver", - visibility = ["//vendor/golang.org/x/tools/go:__subpackages__"], - deps = ["//vendor/golang.org/x/tools/internal/gocommand:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/go/packages/BUILD b/vendor/golang.org/x/tools/go/packages/BUILD deleted file mode 100644 index e0a3afe889065..0000000000000 --- a/vendor/golang.org/x/tools/go/packages/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "external.go", - "golist.go", - "golist_overlay.go", - "loadmode_string.go", - "packages.go", - "visit.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/go/packages", - importpath = "golang.org/x/tools/go/packages", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/tools/go/gcexportdata:go_default_library", - "//vendor/golang.org/x/tools/go/internal/packagesdriver:go_default_library", - "//vendor/golang.org/x/tools/internal/gocommand:go_default_library", - "//vendor/golang.org/x/tools/internal/packagesinternal:go_default_library", - "//vendor/golang.org/x/tools/internal/typesinternal:go_default_library", - "//vendor/golang.org/x/xerrors:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/imports/BUILD b/vendor/golang.org/x/tools/imports/BUILD deleted file mode 100644 index 99f274530f499..0000000000000 --- a/vendor/golang.org/x/tools/imports/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["forward.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/imports", - importpath = "golang.org/x/tools/imports", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/tools/internal/imports:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/internal/event/BUILD b/vendor/golang.org/x/tools/internal/event/BUILD deleted file mode 100644 index 07e3617690b5c..0000000000000 --- a/vendor/golang.org/x/tools/internal/event/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "event.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/internal/event", - importpath = "golang.org/x/tools/internal/event", - visibility = ["//vendor/golang.org/x/tools:__subpackages__"], - deps = [ - "//vendor/golang.org/x/tools/internal/event/core:go_default_library", - "//vendor/golang.org/x/tools/internal/event/keys:go_default_library", - "//vendor/golang.org/x/tools/internal/event/label:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/tools/internal/event/core:all-srcs", - "//vendor/golang.org/x/tools/internal/event/keys:all-srcs", - "//vendor/golang.org/x/tools/internal/event/label:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/internal/event/core/BUILD b/vendor/golang.org/x/tools/internal/event/core/BUILD deleted file mode 100644 index b8d28b5beb807..0000000000000 --- a/vendor/golang.org/x/tools/internal/event/core/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "event.go", - "export.go", - "fast.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/internal/event/core", - importpath = "golang.org/x/tools/internal/event/core", - visibility = ["//vendor/golang.org/x/tools:__subpackages__"], - deps = [ - "//vendor/golang.org/x/tools/internal/event/keys:go_default_library", - "//vendor/golang.org/x/tools/internal/event/label:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/internal/event/keys/BUILD b/vendor/golang.org/x/tools/internal/event/keys/BUILD deleted file mode 100644 index 6fdbf3fcad337..0000000000000 --- a/vendor/golang.org/x/tools/internal/event/keys/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "keys.go", - "standard.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/internal/event/keys", - importpath = "golang.org/x/tools/internal/event/keys", - visibility = ["//vendor/golang.org/x/tools:__subpackages__"], - deps = ["//vendor/golang.org/x/tools/internal/event/label:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/internal/event/label/BUILD b/vendor/golang.org/x/tools/internal/event/label/BUILD deleted file mode 100644 index 505813d2f9d1d..0000000000000 --- a/vendor/golang.org/x/tools/internal/event/label/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["label.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/internal/event/label", - importpath = "golang.org/x/tools/internal/event/label", - visibility = ["//vendor/golang.org/x/tools:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/internal/fastwalk/BUILD b/vendor/golang.org/x/tools/internal/fastwalk/BUILD deleted file mode 100644 index 097e744f039ce..0000000000000 --- a/vendor/golang.org/x/tools/internal/fastwalk/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "fastwalk.go", - "fastwalk_dirent_fileno.go", - "fastwalk_dirent_ino.go", - "fastwalk_dirent_namlen_bsd.go", - "fastwalk_dirent_namlen_linux.go", - "fastwalk_portable.go", - "fastwalk_unix.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/internal/fastwalk", - importpath = "golang.org/x/tools/internal/fastwalk", - visibility = ["//vendor/golang.org/x/tools:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/internal/gocommand/BUILD b/vendor/golang.org/x/tools/internal/gocommand/BUILD deleted file mode 100644 index 991f97c8b9ba3..0000000000000 --- a/vendor/golang.org/x/tools/internal/gocommand/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "invoke.go", - "vendor.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/internal/gocommand", - importpath = "golang.org/x/tools/internal/gocommand", - visibility = ["//vendor/golang.org/x/tools:__subpackages__"], - deps = [ - "//vendor/golang.org/x/mod/semver:go_default_library", - "//vendor/golang.org/x/tools/internal/event:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/internal/gopathwalk/BUILD b/vendor/golang.org/x/tools/internal/gopathwalk/BUILD deleted file mode 100644 index 4bf31cc47b0f7..0000000000000 --- a/vendor/golang.org/x/tools/internal/gopathwalk/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["walk.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/internal/gopathwalk", - importpath = "golang.org/x/tools/internal/gopathwalk", - visibility = ["//vendor/golang.org/x/tools:__subpackages__"], - deps = ["//vendor/golang.org/x/tools/internal/fastwalk:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/internal/imports/BUILD b/vendor/golang.org/x/tools/internal/imports/BUILD deleted file mode 100644 index 188edecb69efe..0000000000000 --- a/vendor/golang.org/x/tools/internal/imports/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "fix.go", - "imports.go", - "mod.go", - "mod_cache.go", - "sortimports.go", - "zstdlib.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/internal/imports", - importpath = "golang.org/x/tools/internal/imports", - visibility = ["//vendor/golang.org/x/tools:__subpackages__"], - deps = [ - "//vendor/golang.org/x/mod/module:go_default_library", - "//vendor/golang.org/x/tools/go/ast/astutil:go_default_library", - "//vendor/golang.org/x/tools/internal/gocommand:go_default_library", - "//vendor/golang.org/x/tools/internal/gopathwalk:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/internal/packagesinternal/BUILD b/vendor/golang.org/x/tools/internal/packagesinternal/BUILD deleted file mode 100644 index 721c6803d760e..0000000000000 --- a/vendor/golang.org/x/tools/internal/packagesinternal/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["packages.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/internal/packagesinternal", - importpath = "golang.org/x/tools/internal/packagesinternal", - visibility = ["//vendor/golang.org/x/tools:__subpackages__"], - deps = ["//vendor/golang.org/x/tools/internal/gocommand:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/tools/internal/typesinternal/BUILD b/vendor/golang.org/x/tools/internal/typesinternal/BUILD deleted file mode 100644 index 0764ca11568bf..0000000000000 --- a/vendor/golang.org/x/tools/internal/typesinternal/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["types.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/tools/internal/typesinternal", - importpath = "golang.org/x/tools/internal/typesinternal", - visibility = ["//vendor/golang.org/x/tools:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/xerrors/BUILD b/vendor/golang.org/x/xerrors/BUILD deleted file mode 100644 index 1132dcda39c58..0000000000000 --- a/vendor/golang.org/x/xerrors/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "adaptor.go", - "doc.go", - "errors.go", - "fmt.go", - "format.go", - "frame.go", - "wrap.go", - ], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/xerrors", - importpath = "golang.org/x/xerrors", - visibility = ["//visibility:public"], - deps = ["//vendor/golang.org/x/xerrors/internal:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/golang.org/x/xerrors/internal:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/golang.org/x/xerrors/internal/BUILD b/vendor/golang.org/x/xerrors/internal/BUILD deleted file mode 100644 index 8586b13e303da..0000000000000 --- a/vendor/golang.org/x/xerrors/internal/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["internal.go"], - importmap = "k8s.io/kubernetes/vendor/golang.org/x/xerrors/internal", - importpath = "golang.org/x/xerrors/internal", - visibility = ["//vendor/golang.org/x/xerrors:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/blas/BUILD b/vendor/gonum.org/v1/gonum/blas/BUILD deleted file mode 100644 index b484b19b2ee20..0000000000000 --- a/vendor/gonum.org/v1/gonum/blas/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "blas.go", - "doc.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/blas", - importpath = "gonum.org/v1/gonum/blas", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/gonum.org/v1/gonum/blas/blas64:all-srcs", - "//vendor/gonum.org/v1/gonum/blas/cblas128:all-srcs", - "//vendor/gonum.org/v1/gonum/blas/gonum:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/blas/blas64/BUILD b/vendor/gonum.org/v1/gonum/blas/blas64/BUILD deleted file mode 100644 index d71e8b82d3ccf..0000000000000 --- a/vendor/gonum.org/v1/gonum/blas/blas64/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "blas64.go", - "conv.go", - "conv_symmetric.go", - "doc.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/blas/blas64", - importpath = "gonum.org/v1/gonum/blas/blas64", - visibility = ["//visibility:public"], - deps = [ - "//vendor/gonum.org/v1/gonum/blas:go_default_library", - "//vendor/gonum.org/v1/gonum/blas/gonum:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/blas/cblas128/BUILD b/vendor/gonum.org/v1/gonum/blas/cblas128/BUILD deleted file mode 100644 index a8ab6d44ef27c..0000000000000 --- a/vendor/gonum.org/v1/gonum/blas/cblas128/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cblas128.go", - "conv.go", - "conv_hermitian.go", - "conv_symmetric.go", - "doc.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/blas/cblas128", - importpath = "gonum.org/v1/gonum/blas/cblas128", - visibility = ["//visibility:public"], - deps = [ - "//vendor/gonum.org/v1/gonum/blas:go_default_library", - "//vendor/gonum.org/v1/gonum/blas/gonum:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/blas/gonum/BUILD b/vendor/gonum.org/v1/gonum/blas/gonum/BUILD deleted file mode 100644 index 741399f851245..0000000000000 --- a/vendor/gonum.org/v1/gonum/blas/gonum/BUILD +++ /dev/null @@ -1,55 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dgemm.go", - "doc.go", - "errors.go", - "gemv.go", - "gonum.go", - "level1cmplx128.go", - "level1cmplx64.go", - "level1float32.go", - "level1float32_dsdot.go", - "level1float32_sdot.go", - "level1float32_sdsdot.go", - "level1float64.go", - "level1float64_ddot.go", - "level2cmplx128.go", - "level2cmplx64.go", - "level2float32.go", - "level2float64.go", - "level3cmplx128.go", - "level3cmplx64.go", - "level3float32.go", - "level3float64.go", - "sgemm.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/blas/gonum", - importpath = "gonum.org/v1/gonum/blas/gonum", - visibility = ["//visibility:public"], - deps = [ - "//vendor/gonum.org/v1/gonum/blas:go_default_library", - "//vendor/gonum.org/v1/gonum/internal/asm/c128:go_default_library", - "//vendor/gonum.org/v1/gonum/internal/asm/c64:go_default_library", - "//vendor/gonum.org/v1/gonum/internal/asm/f32:go_default_library", - "//vendor/gonum.org/v1/gonum/internal/asm/f64:go_default_library", - "//vendor/gonum.org/v1/gonum/internal/cmplx64:go_default_library", - "//vendor/gonum.org/v1/gonum/internal/math32:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/floats/BUILD b/vendor/gonum.org/v1/gonum/floats/BUILD deleted file mode 100644 index 7ea301756cbff..0000000000000 --- a/vendor/gonum.org/v1/gonum/floats/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "floats.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/floats", - importpath = "gonum.org/v1/gonum/floats", - visibility = ["//visibility:public"], - deps = ["//vendor/gonum.org/v1/gonum/internal/asm/f64:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/BUILD b/vendor/gonum.org/v1/gonum/graph/BUILD deleted file mode 100644 index c7a933c314da3..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "graph.go", - "multigraph.go", - "nodes_edges.go", - "undirect.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph", - importpath = "gonum.org/v1/gonum/graph", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/gonum.org/v1/gonum/graph/encoding:all-srcs", - "//vendor/gonum.org/v1/gonum/graph/formats/dot:all-srcs", - "//vendor/gonum.org/v1/gonum/graph/internal/ordered:all-srcs", - "//vendor/gonum.org/v1/gonum/graph/internal/set:all-srcs", - "//vendor/gonum.org/v1/gonum/graph/internal/uid:all-srcs", - "//vendor/gonum.org/v1/gonum/graph/iterator:all-srcs", - "//vendor/gonum.org/v1/gonum/graph/simple:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/encoding/BUILD b/vendor/gonum.org/v1/gonum/graph/encoding/BUILD deleted file mode 100644 index 125d82e1d7c9c..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/encoding/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "encoding.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph/encoding", - importpath = "gonum.org/v1/gonum/graph/encoding", - visibility = ["//visibility:public"], - deps = ["//vendor/gonum.org/v1/gonum/graph:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/gonum.org/v1/gonum/graph/encoding/dot:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/encoding/dot/BUILD b/vendor/gonum.org/v1/gonum/graph/encoding/dot/BUILD deleted file mode 100644 index 4f3b4e27e9625..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/encoding/dot/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decode.go", - "doc.go", - "encode.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph/encoding/dot", - importpath = "gonum.org/v1/gonum/graph/encoding/dot", - visibility = ["//visibility:public"], - deps = [ - "//vendor/gonum.org/v1/gonum/graph:go_default_library", - "//vendor/gonum.org/v1/gonum/graph/encoding:go_default_library", - "//vendor/gonum.org/v1/gonum/graph/formats/dot:go_default_library", - "//vendor/gonum.org/v1/gonum/graph/formats/dot/ast:go_default_library", - "//vendor/gonum.org/v1/gonum/graph/internal/ordered:go_default_library", - "//vendor/gonum.org/v1/gonum/graph/internal/set:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/formats/dot/BUILD b/vendor/gonum.org/v1/gonum/graph/formats/dot/BUILD deleted file mode 100644 index d027f8a373ede..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/formats/dot/BUILD +++ /dev/null @@ -1,40 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "dot.go", - "sem.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph/formats/dot", - importpath = "gonum.org/v1/gonum/graph/formats/dot", - visibility = ["//visibility:public"], - deps = [ - "//vendor/gonum.org/v1/gonum/graph/formats/dot/ast:go_default_library", - "//vendor/gonum.org/v1/gonum/graph/formats/dot/internal/lexer:go_default_library", - "//vendor/gonum.org/v1/gonum/graph/formats/dot/internal/parser:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/gonum.org/v1/gonum/graph/formats/dot/ast:all-srcs", - "//vendor/gonum.org/v1/gonum/graph/formats/dot/internal/astx:all-srcs", - "//vendor/gonum.org/v1/gonum/graph/formats/dot/internal/errors:all-srcs", - "//vendor/gonum.org/v1/gonum/graph/formats/dot/internal/lexer:all-srcs", - "//vendor/gonum.org/v1/gonum/graph/formats/dot/internal/parser:all-srcs", - "//vendor/gonum.org/v1/gonum/graph/formats/dot/internal/token:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/formats/dot/ast/BUILD b/vendor/gonum.org/v1/gonum/graph/formats/dot/ast/BUILD deleted file mode 100644 index 83686be8a55e3..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/formats/dot/ast/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ast.go", - "doc.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph/formats/dot/ast", - importpath = "gonum.org/v1/gonum/graph/formats/dot/ast", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/astx/BUILD b/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/astx/BUILD deleted file mode 100644 index 9f58c047e7362..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/astx/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "astx.go", - "doc.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/astx", - importpath = "gonum.org/v1/gonum/graph/formats/dot/internal/astx", - visibility = ["//vendor/gonum.org/v1/gonum/graph/formats/dot:__subpackages__"], - deps = [ - "//vendor/gonum.org/v1/gonum/graph/formats/dot/ast:go_default_library", - "//vendor/gonum.org/v1/gonum/graph/formats/dot/internal/token:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/errors/BUILD b/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/errors/BUILD deleted file mode 100644 index c844c9c8cfad6..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/errors/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "errors.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/errors", - importpath = "gonum.org/v1/gonum/graph/formats/dot/internal/errors", - visibility = ["//vendor/gonum.org/v1/gonum/graph/formats/dot:__subpackages__"], - deps = ["//vendor/gonum.org/v1/gonum/graph/formats/dot/internal/token:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/lexer/BUILD b/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/lexer/BUILD deleted file mode 100644 index 7019d45892806..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/lexer/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "acttab.go", - "doc.go", - "lexer.go", - "transitiontable.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/lexer", - importpath = "gonum.org/v1/gonum/graph/formats/dot/internal/lexer", - visibility = ["//vendor/gonum.org/v1/gonum/graph/formats/dot:__subpackages__"], - deps = ["//vendor/gonum.org/v1/gonum/graph/formats/dot/internal/token:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/parser/BUILD b/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/parser/BUILD deleted file mode 100644 index 6c11b6c1090a0..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/parser/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "action.go", - "actiontable.go", - "doc.go", - "gototable.go", - "parser.go", - "productionstable.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/parser", - importpath = "gonum.org/v1/gonum/graph/formats/dot/internal/parser", - visibility = ["//vendor/gonum.org/v1/gonum/graph/formats/dot:__subpackages__"], - deps = [ - "//vendor/gonum.org/v1/gonum/graph/formats/dot/ast:go_default_library", - "//vendor/gonum.org/v1/gonum/graph/formats/dot/internal/astx:go_default_library", - "//vendor/gonum.org/v1/gonum/graph/formats/dot/internal/errors:go_default_library", - "//vendor/gonum.org/v1/gonum/graph/formats/dot/internal/token:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/token/BUILD b/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/token/BUILD deleted file mode 100644 index 67e46127da7f0..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/token/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "token.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph/formats/dot/internal/token", - importpath = "gonum.org/v1/gonum/graph/formats/dot/internal/token", - visibility = ["//vendor/gonum.org/v1/gonum/graph/formats/dot:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/internal/ordered/BUILD b/vendor/gonum.org/v1/gonum/graph/internal/ordered/BUILD deleted file mode 100644 index 8b4b536254f47..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/internal/ordered/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "sort.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph/internal/ordered", - importpath = "gonum.org/v1/gonum/graph/internal/ordered", - visibility = ["//vendor/gonum.org/v1/gonum/graph:__subpackages__"], - deps = ["//vendor/gonum.org/v1/gonum/graph:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/internal/set/BUILD b/vendor/gonum.org/v1/gonum/graph/internal/set/BUILD deleted file mode 100644 index 3ddb9ea0b71a8..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/internal/set/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "same.go", - "set.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph/internal/set", - importpath = "gonum.org/v1/gonum/graph/internal/set", - visibility = ["//vendor/gonum.org/v1/gonum/graph:__subpackages__"], - deps = ["//vendor/gonum.org/v1/gonum/graph:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/internal/uid/BUILD b/vendor/gonum.org/v1/gonum/graph/internal/uid/BUILD deleted file mode 100644 index 9648abd51254a..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/internal/uid/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["uid.go"], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph/internal/uid", - importpath = "gonum.org/v1/gonum/graph/internal/uid", - visibility = ["//vendor/gonum.org/v1/gonum/graph:__subpackages__"], - deps = ["//vendor/gonum.org/v1/gonum/graph/internal/set:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/iterator/BUILD b/vendor/gonum.org/v1/gonum/graph/iterator/BUILD deleted file mode 100644 index 3e27258879613..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/iterator/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "edges.go", - "lines.go", - "nodes.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph/iterator", - importpath = "gonum.org/v1/gonum/graph/iterator", - visibility = ["//visibility:public"], - deps = ["//vendor/gonum.org/v1/gonum/graph:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/graph/simple/BUILD b/vendor/gonum.org/v1/gonum/graph/simple/BUILD deleted file mode 100644 index c8964e8fcd2cd..0000000000000 --- a/vendor/gonum.org/v1/gonum/graph/simple/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dense_directed_matrix.go", - "dense_undirected_matrix.go", - "directed.go", - "doc.go", - "simple.go", - "undirected.go", - "weighted_directed.go", - "weighted_undirected.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/graph/simple", - importpath = "gonum.org/v1/gonum/graph/simple", - visibility = ["//visibility:public"], - deps = [ - "//vendor/gonum.org/v1/gonum/graph:go_default_library", - "//vendor/gonum.org/v1/gonum/graph/internal/ordered:go_default_library", - "//vendor/gonum.org/v1/gonum/graph/internal/uid:go_default_library", - "//vendor/gonum.org/v1/gonum/graph/iterator:go_default_library", - "//vendor/gonum.org/v1/gonum/mat:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/internal/asm/c128/BUILD b/vendor/gonum.org/v1/gonum/internal/asm/c128/BUILD deleted file mode 100644 index a187f5a60401b..0000000000000 --- a/vendor/gonum.org/v1/gonum/internal/asm/c128/BUILD +++ /dev/null @@ -1,40 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "axpyinc_amd64.s", - "axpyincto_amd64.s", - "axpyunitary_amd64.s", - "axpyunitaryto_amd64.s", - "doc.go", - "dotcinc_amd64.s", - "dotcunitary_amd64.s", - "dotuinc_amd64.s", - "dotuunitary_amd64.s", - "dscalinc_amd64.s", - "dscalunitary_amd64.s", - "scal.go", - "scalUnitary_amd64.s", - "scalinc_amd64.s", - "stubs_amd64.go", - "stubs_noasm.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/internal/asm/c128", - importpath = "gonum.org/v1/gonum/internal/asm/c128", - visibility = ["//vendor/gonum.org/v1/gonum:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/internal/asm/c64/BUILD b/vendor/gonum.org/v1/gonum/internal/asm/c64/BUILD deleted file mode 100644 index 817807ea0695e..0000000000000 --- a/vendor/gonum.org/v1/gonum/internal/asm/c64/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "axpyinc_amd64.s", - "axpyincto_amd64.s", - "axpyunitary_amd64.s", - "axpyunitaryto_amd64.s", - "conj.go", - "doc.go", - "dotcinc_amd64.s", - "dotcunitary_amd64.s", - "dotuinc_amd64.s", - "dotuunitary_amd64.s", - "scal.go", - "stubs_amd64.go", - "stubs_noasm.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/internal/asm/c64", - importpath = "gonum.org/v1/gonum/internal/asm/c64", - visibility = ["//vendor/gonum.org/v1/gonum:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/internal/asm/f32/BUILD b/vendor/gonum.org/v1/gonum/internal/asm/f32/BUILD deleted file mode 100644 index 6d58be0f97fd5..0000000000000 --- a/vendor/gonum.org/v1/gonum/internal/asm/f32/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "axpyinc_amd64.s", - "axpyincto_amd64.s", - "axpyunitary_amd64.s", - "axpyunitaryto_amd64.s", - "ddotinc_amd64.s", - "ddotunitary_amd64.s", - "doc.go", - "dotinc_amd64.s", - "dotunitary_amd64.s", - "ge_amd64.go", - "ge_amd64.s", - "ge_noasm.go", - "scal.go", - "stubs_amd64.go", - "stubs_noasm.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/internal/asm/f32", - importpath = "gonum.org/v1/gonum/internal/asm/f32", - visibility = ["//vendor/gonum.org/v1/gonum:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/internal/asm/f64/BUILD b/vendor/gonum.org/v1/gonum/internal/asm/f64/BUILD deleted file mode 100644 index 59361a98b9b8c..0000000000000 --- a/vendor/gonum.org/v1/gonum/internal/asm/f64/BUILD +++ /dev/null @@ -1,55 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "abssum_amd64.s", - "abssuminc_amd64.s", - "add_amd64.s", - "addconst_amd64.s", - "axpy.go", - "axpyinc_amd64.s", - "axpyincto_amd64.s", - "axpyunitary_amd64.s", - "axpyunitaryto_amd64.s", - "cumprod_amd64.s", - "cumsum_amd64.s", - "div_amd64.s", - "divto_amd64.s", - "doc.go", - "dot.go", - "dot_amd64.s", - "ge_amd64.go", - "ge_noasm.go", - "gemvN_amd64.s", - "gemvT_amd64.s", - "ger_amd64.s", - "l1norm_amd64.s", - "linfnorm_amd64.s", - "scal.go", - "scalinc_amd64.s", - "scalincto_amd64.s", - "scalunitary_amd64.s", - "scalunitaryto_amd64.s", - "stubs_amd64.go", - "stubs_noasm.go", - "sum_amd64.s", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/internal/asm/f64", - importpath = "gonum.org/v1/gonum/internal/asm/f64", - visibility = ["//vendor/gonum.org/v1/gonum:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/internal/cmplx64/BUILD b/vendor/gonum.org/v1/gonum/internal/cmplx64/BUILD deleted file mode 100644 index 43ea882af9e5d..0000000000000 --- a/vendor/gonum.org/v1/gonum/internal/cmplx64/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "abs.go", - "conj.go", - "doc.go", - "isinf.go", - "isnan.go", - "sqrt.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/internal/cmplx64", - importpath = "gonum.org/v1/gonum/internal/cmplx64", - visibility = ["//vendor/gonum.org/v1/gonum:__subpackages__"], - deps = ["//vendor/gonum.org/v1/gonum/internal/math32:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/internal/math32/BUILD b/vendor/gonum.org/v1/gonum/internal/math32/BUILD deleted file mode 100644 index 2ee81db5a0d74..0000000000000 --- a/vendor/gonum.org/v1/gonum/internal/math32/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "math.go", - "signbit.go", - "sqrt.go", - "sqrt_amd64.go", - "sqrt_amd64.s", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/internal/math32", - importpath = "gonum.org/v1/gonum/internal/math32", - visibility = ["//vendor/gonum.org/v1/gonum:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/lapack/BUILD b/vendor/gonum.org/v1/gonum/lapack/BUILD deleted file mode 100644 index 6e796b8b23b24..0000000000000 --- a/vendor/gonum.org/v1/gonum/lapack/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "lapack.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/lapack", - importpath = "gonum.org/v1/gonum/lapack", - visibility = ["//visibility:public"], - deps = ["//vendor/gonum.org/v1/gonum/blas:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/gonum.org/v1/gonum/lapack/gonum:all-srcs", - "//vendor/gonum.org/v1/gonum/lapack/lapack64:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/lapack/gonum/BUILD b/vendor/gonum.org/v1/gonum/lapack/gonum/BUILD deleted file mode 100644 index a7842ae39344f..0000000000000 --- a/vendor/gonum.org/v1/gonum/lapack/gonum/BUILD +++ /dev/null @@ -1,152 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dbdsqr.go", - "dcombssq.go", - "dgebak.go", - "dgebal.go", - "dgebd2.go", - "dgebrd.go", - "dgecon.go", - "dgeev.go", - "dgehd2.go", - "dgehrd.go", - "dgelq2.go", - "dgelqf.go", - "dgels.go", - "dgeql2.go", - "dgeqp3.go", - "dgeqr2.go", - "dgeqrf.go", - "dgerq2.go", - "dgerqf.go", - "dgesvd.go", - "dgetf2.go", - "dgetrf.go", - "dgetri.go", - "dgetrs.go", - "dggsvd3.go", - "dggsvp3.go", - "dhseqr.go", - "dlabrd.go", - "dlacn2.go", - "dlacpy.go", - "dlae2.go", - "dlaev2.go", - "dlaexc.go", - "dlags2.go", - "dlahqr.go", - "dlahr2.go", - "dlaln2.go", - "dlange.go", - "dlansb.go", - "dlanst.go", - "dlansy.go", - "dlantr.go", - "dlanv2.go", - "dlapll.go", - "dlapmt.go", - "dlapy2.go", - "dlaqp2.go", - "dlaqps.go", - "dlaqr04.go", - "dlaqr1.go", - "dlaqr23.go", - "dlaqr5.go", - "dlarf.go", - "dlarfb.go", - "dlarfg.go", - "dlarft.go", - "dlarfx.go", - "dlartg.go", - "dlas2.go", - "dlascl.go", - "dlaset.go", - "dlasq1.go", - "dlasq2.go", - "dlasq3.go", - "dlasq4.go", - "dlasq5.go", - "dlasq6.go", - "dlasr.go", - "dlasrt.go", - "dlassq.go", - "dlasv2.go", - "dlaswp.go", - "dlasy2.go", - "dlatbs.go", - "dlatrd.go", - "dlatrs.go", - "dlauu2.go", - "dlauum.go", - "doc.go", - "dorg2l.go", - "dorg2r.go", - "dorgbr.go", - "dorghr.go", - "dorgl2.go", - "dorglq.go", - "dorgql.go", - "dorgqr.go", - "dorgtr.go", - "dorm2r.go", - "dormbr.go", - "dormhr.go", - "dorml2.go", - "dormlq.go", - "dormqr.go", - "dormr2.go", - "dpbcon.go", - "dpbtf2.go", - "dpbtrf.go", - "dpbtrs.go", - "dpocon.go", - "dpotf2.go", - "dpotrf.go", - "dpotri.go", - "dpotrs.go", - "drscl.go", - "dsteqr.go", - "dsterf.go", - "dsyev.go", - "dsytd2.go", - "dsytrd.go", - "dtgsja.go", - "dtrcon.go", - "dtrevc3.go", - "dtrexc.go", - "dtrti2.go", - "dtrtri.go", - "dtrtrs.go", - "errors.go", - "iladlc.go", - "iladlr.go", - "ilaenv.go", - "iparmq.go", - "lapack.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/lapack/gonum", - importpath = "gonum.org/v1/gonum/lapack/gonum", - visibility = ["//visibility:public"], - deps = [ - "//vendor/gonum.org/v1/gonum/blas:go_default_library", - "//vendor/gonum.org/v1/gonum/blas/blas64:go_default_library", - "//vendor/gonum.org/v1/gonum/lapack:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/lapack/lapack64/BUILD b/vendor/gonum.org/v1/gonum/lapack/lapack64/BUILD deleted file mode 100644 index e8b4159ada8be..0000000000000 --- a/vendor/gonum.org/v1/gonum/lapack/lapack64/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "lapack64.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/lapack/lapack64", - importpath = "gonum.org/v1/gonum/lapack/lapack64", - visibility = ["//visibility:public"], - deps = [ - "//vendor/gonum.org/v1/gonum/blas:go_default_library", - "//vendor/gonum.org/v1/gonum/blas/blas64:go_default_library", - "//vendor/gonum.org/v1/gonum/lapack:go_default_library", - "//vendor/gonum.org/v1/gonum/lapack/gonum:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gonum.org/v1/gonum/mat/BUILD b/vendor/gonum.org/v1/gonum/mat/BUILD deleted file mode 100644 index 4ccbb981ba303..0000000000000 --- a/vendor/gonum.org/v1/gonum/mat/BUILD +++ /dev/null @@ -1,67 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "band.go", - "cdense.go", - "cholesky.go", - "cmatrix.go", - "consts.go", - "dense.go", - "dense_arithmetic.go", - "diagonal.go", - "doc.go", - "eigen.go", - "errors.go", - "format.go", - "gsvd.go", - "hogsvd.go", - "index_no_bound_checks.go", - "inner.go", - "io.go", - "lq.go", - "lu.go", - "matrix.go", - "offset.go", - "pool.go", - "product.go", - "qr.go", - "shadow.go", - "shadow_common.go", - "shadow_complex.go", - "solve.go", - "svd.go", - "symband.go", - "symmetric.go", - "triangular.go", - "triband.go", - "vector.go", - ], - importmap = "k8s.io/kubernetes/vendor/gonum.org/v1/gonum/mat", - importpath = "gonum.org/v1/gonum/mat", - visibility = ["//visibility:public"], - deps = [ - "//vendor/gonum.org/v1/gonum/blas:go_default_library", - "//vendor/gonum.org/v1/gonum/blas/blas64:go_default_library", - "//vendor/gonum.org/v1/gonum/blas/cblas128:go_default_library", - "//vendor/gonum.org/v1/gonum/floats:go_default_library", - "//vendor/gonum.org/v1/gonum/internal/asm/f64:go_default_library", - "//vendor/gonum.org/v1/gonum/lapack:go_default_library", - "//vendor/gonum.org/v1/gonum/lapack/lapack64:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/compute/v0.alpha/BUILD b/vendor/google.golang.org/api/compute/v0.alpha/BUILD deleted file mode 100644 index 619ace4cac157..0000000000000 --- a/vendor/google.golang.org/api/compute/v0.alpha/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["compute-gen.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/compute/v0.alpha", - importpath = "google.golang.org/api/compute/v0.alpha", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/api/googleapi:go_default_library", - "//vendor/google.golang.org/api/internal/gensupport:go_default_library", - "//vendor/google.golang.org/api/option:go_default_library", - "//vendor/google.golang.org/api/transport/http:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/compute/v0.beta/BUILD b/vendor/google.golang.org/api/compute/v0.beta/BUILD deleted file mode 100644 index b6d7c3e86e8c1..0000000000000 --- a/vendor/google.golang.org/api/compute/v0.beta/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["compute-gen.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/compute/v0.beta", - importpath = "google.golang.org/api/compute/v0.beta", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/api/googleapi:go_default_library", - "//vendor/google.golang.org/api/internal/gensupport:go_default_library", - "//vendor/google.golang.org/api/option:go_default_library", - "//vendor/google.golang.org/api/transport/http:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/compute/v1/BUILD b/vendor/google.golang.org/api/compute/v1/BUILD deleted file mode 100644 index ff296c5272742..0000000000000 --- a/vendor/google.golang.org/api/compute/v1/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["compute-gen.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/compute/v1", - importpath = "google.golang.org/api/compute/v1", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/api/googleapi:go_default_library", - "//vendor/google.golang.org/api/internal/gensupport:go_default_library", - "//vendor/google.golang.org/api/option:go_default_library", - "//vendor/google.golang.org/api/transport/http:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/container/v1/BUILD b/vendor/google.golang.org/api/container/v1/BUILD deleted file mode 100644 index e76450df20982..0000000000000 --- a/vendor/google.golang.org/api/container/v1/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["container-gen.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/container/v1", - importpath = "google.golang.org/api/container/v1", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/api/googleapi:go_default_library", - "//vendor/google.golang.org/api/internal/gensupport:go_default_library", - "//vendor/google.golang.org/api/option:go_default_library", - "//vendor/google.golang.org/api/transport/http:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/googleapi/BUILD b/vendor/google.golang.org/api/googleapi/BUILD deleted file mode 100644 index b9253eee6fd82..0000000000000 --- a/vendor/google.golang.org/api/googleapi/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "googleapi.go", - "types.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/googleapi", - importpath = "google.golang.org/api/googleapi", - visibility = ["//visibility:public"], - deps = ["//vendor/google.golang.org/api/internal/third_party/uritemplates:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/google.golang.org/api/googleapi/transport:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/googleapi/transport/BUILD b/vendor/google.golang.org/api/googleapi/transport/BUILD deleted file mode 100644 index 2f42337660bc8..0000000000000 --- a/vendor/google.golang.org/api/googleapi/transport/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["apikey.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/googleapi/transport", - importpath = "google.golang.org/api/googleapi/transport", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/internal/BUILD b/vendor/google.golang.org/api/internal/BUILD deleted file mode 100644 index 84091ecd9e4d0..0000000000000 --- a/vendor/google.golang.org/api/internal/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "creds.go", - "pool.go", - "settings.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/internal", - importpath = "google.golang.org/api/internal", - visibility = ["//vendor/google.golang.org/api:__subpackages__"], - deps = [ - "//vendor/golang.org/x/oauth2:go_default_library", - "//vendor/golang.org/x/oauth2/google:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/naming:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/google.golang.org/api/internal/gensupport:all-srcs", - "//vendor/google.golang.org/api/internal/third_party/uritemplates:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/internal/gensupport/BUILD b/vendor/google.golang.org/api/internal/gensupport/BUILD deleted file mode 100644 index 0c19de40971ca..0000000000000 --- a/vendor/google.golang.org/api/internal/gensupport/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "buffer.go", - "doc.go", - "json.go", - "jsonfloat.go", - "media.go", - "params.go", - "resumable.go", - "send.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/internal/gensupport", - importpath = "google.golang.org/api/internal/gensupport", - visibility = ["//vendor/google.golang.org/api:__subpackages__"], - deps = [ - "//vendor/github.com/googleapis/gax-go/v2:go_default_library", - "//vendor/google.golang.org/api/googleapi:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/internal/third_party/uritemplates/BUILD b/vendor/google.golang.org/api/internal/third_party/uritemplates/BUILD deleted file mode 100644 index c39319fae34f5..0000000000000 --- a/vendor/google.golang.org/api/internal/third_party/uritemplates/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "uritemplates.go", - "utils.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/internal/third_party/uritemplates", - importpath = "google.golang.org/api/internal/third_party/uritemplates", - visibility = ["//vendor/google.golang.org/api:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/logging/v2beta1/BUILD b/vendor/google.golang.org/api/logging/v2beta1/BUILD deleted file mode 100644 index ebb7750430058..0000000000000 --- a/vendor/google.golang.org/api/logging/v2beta1/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["logging-gen.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/logging/v2beta1", - importpath = "google.golang.org/api/logging/v2beta1", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/api/googleapi:go_default_library", - "//vendor/google.golang.org/api/internal/gensupport:go_default_library", - "//vendor/google.golang.org/api/option:go_default_library", - "//vendor/google.golang.org/api/transport/http:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/monitoring/v3/BUILD b/vendor/google.golang.org/api/monitoring/v3/BUILD deleted file mode 100644 index f2ed312636a71..0000000000000 --- a/vendor/google.golang.org/api/monitoring/v3/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["monitoring-gen.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/monitoring/v3", - importpath = "google.golang.org/api/monitoring/v3", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/api/googleapi:go_default_library", - "//vendor/google.golang.org/api/internal/gensupport:go_default_library", - "//vendor/google.golang.org/api/option:go_default_library", - "//vendor/google.golang.org/api/transport/http:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/option/BUILD b/vendor/google.golang.org/api/option/BUILD deleted file mode 100644 index e40d2b5d89e2b..0000000000000 --- a/vendor/google.golang.org/api/option/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "credentials_go19.go", - "credentials_notgo19.go", - "option.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/option", - importpath = "google.golang.org/api/option", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/oauth2:go_default_library", - "//vendor/golang.org/x/oauth2/google:go_default_library", - "//vendor/google.golang.org/api/internal:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/pubsub/v1/BUILD b/vendor/google.golang.org/api/pubsub/v1/BUILD deleted file mode 100644 index 64fb8a9ea0612..0000000000000 --- a/vendor/google.golang.org/api/pubsub/v1/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["pubsub-gen.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/pubsub/v1", - importpath = "google.golang.org/api/pubsub/v1", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/api/googleapi:go_default_library", - "//vendor/google.golang.org/api/internal/gensupport:go_default_library", - "//vendor/google.golang.org/api/option:go_default_library", - "//vendor/google.golang.org/api/transport/http:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/tpu/v1/BUILD b/vendor/google.golang.org/api/tpu/v1/BUILD deleted file mode 100644 index ec74ff2b88e5e..0000000000000 --- a/vendor/google.golang.org/api/tpu/v1/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["tpu-gen.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/tpu/v1", - importpath = "google.golang.org/api/tpu/v1", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/api/googleapi:go_default_library", - "//vendor/google.golang.org/api/internal/gensupport:go_default_library", - "//vendor/google.golang.org/api/option:go_default_library", - "//vendor/google.golang.org/api/transport/http:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/transport/http/BUILD b/vendor/google.golang.org/api/transport/http/BUILD deleted file mode 100644 index 1614dc3dcad4c..0000000000000 --- a/vendor/google.golang.org/api/transport/http/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["dial.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/transport/http", - importpath = "google.golang.org/api/transport/http", - visibility = ["//visibility:public"], - deps = [ - "//vendor/go.opencensus.io/plugin/ochttp:go_default_library", - "//vendor/golang.org/x/oauth2:go_default_library", - "//vendor/google.golang.org/api/googleapi/transport:go_default_library", - "//vendor/google.golang.org/api/internal:go_default_library", - "//vendor/google.golang.org/api/option:go_default_library", - "//vendor/google.golang.org/api/transport/http/internal/propagation:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/google.golang.org/api/transport/http/internal/propagation:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/api/transport/http/internal/propagation/BUILD b/vendor/google.golang.org/api/transport/http/internal/propagation/BUILD deleted file mode 100644 index 8fec89c26c11b..0000000000000 --- a/vendor/google.golang.org/api/transport/http/internal/propagation/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["http.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/api/transport/http/internal/propagation", - importpath = "google.golang.org/api/transport/http/internal/propagation", - visibility = ["//vendor/google.golang.org/api/transport/http:__subpackages__"], - deps = [ - "//vendor/go.opencensus.io/trace:go_default_library", - "//vendor/go.opencensus.io/trace/propagation:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/appengine/BUILD b/vendor/google.golang.org/appengine/BUILD deleted file mode 100644 index 13a7a43001c3c..0000000000000 --- a/vendor/google.golang.org/appengine/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "appengine.go", - "appengine_vm.go", - "errors.go", - "identity.go", - "namespace.go", - "timeout.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/appengine", - importpath = "google.golang.org/appengine", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/golang.org/x/net/context:go_default_library", - "//vendor/google.golang.org/appengine/internal:go_default_library", - "//vendor/google.golang.org/appengine/internal/app_identity:go_default_library", - "//vendor/google.golang.org/appengine/internal/modules:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/google.golang.org/appengine/internal:all-srcs", - "//vendor/google.golang.org/appengine/urlfetch:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/appengine/internal/BUILD b/vendor/google.golang.org/appengine/internal/BUILD deleted file mode 100644 index 8ba712c25ccb6..0000000000000 --- a/vendor/google.golang.org/appengine/internal/BUILD +++ /dev/null @@ -1,52 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api.go", - "api_common.go", - "app_id.go", - "identity.go", - "identity_vm.go", - "internal.go", - "main_common.go", - "main_vm.go", - "metadata.go", - "net.go", - "transaction.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/appengine/internal", - importpath = "google.golang.org/appengine/internal", - visibility = ["//vendor/google.golang.org/appengine:__subpackages__"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/golang.org/x/net/context:go_default_library", - "//vendor/google.golang.org/appengine/internal/base:go_default_library", - "//vendor/google.golang.org/appengine/internal/datastore:go_default_library", - "//vendor/google.golang.org/appengine/internal/log:go_default_library", - "//vendor/google.golang.org/appengine/internal/remote_api:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/google.golang.org/appengine/internal/app_identity:all-srcs", - "//vendor/google.golang.org/appengine/internal/base:all-srcs", - "//vendor/google.golang.org/appengine/internal/datastore:all-srcs", - "//vendor/google.golang.org/appengine/internal/log:all-srcs", - "//vendor/google.golang.org/appengine/internal/modules:all-srcs", - "//vendor/google.golang.org/appengine/internal/remote_api:all-srcs", - "//vendor/google.golang.org/appengine/internal/urlfetch:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/appengine/internal/app_identity/BUILD b/vendor/google.golang.org/appengine/internal/app_identity/BUILD deleted file mode 100644 index 243881c182530..0000000000000 --- a/vendor/google.golang.org/appengine/internal/app_identity/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["app_identity_service.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/appengine/internal/app_identity", - importpath = "google.golang.org/appengine/internal/app_identity", - visibility = ["//vendor/google.golang.org/appengine:__subpackages__"], - deps = ["//vendor/github.com/golang/protobuf/proto:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/appengine/internal/base/BUILD b/vendor/google.golang.org/appengine/internal/base/BUILD deleted file mode 100644 index 88e1b9c8c5a89..0000000000000 --- a/vendor/google.golang.org/appengine/internal/base/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["api_base.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/appengine/internal/base", - importpath = "google.golang.org/appengine/internal/base", - visibility = ["//vendor/google.golang.org/appengine:__subpackages__"], - deps = ["//vendor/github.com/golang/protobuf/proto:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/appengine/internal/datastore/BUILD b/vendor/google.golang.org/appengine/internal/datastore/BUILD deleted file mode 100644 index 909168b3db157..0000000000000 --- a/vendor/google.golang.org/appengine/internal/datastore/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["datastore_v3.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/appengine/internal/datastore", - importpath = "google.golang.org/appengine/internal/datastore", - visibility = ["//vendor/google.golang.org/appengine:__subpackages__"], - deps = ["//vendor/github.com/golang/protobuf/proto:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/appengine/internal/log/BUILD b/vendor/google.golang.org/appengine/internal/log/BUILD deleted file mode 100644 index 12c0dbd2ebb8f..0000000000000 --- a/vendor/google.golang.org/appengine/internal/log/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["log_service.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/appengine/internal/log", - importpath = "google.golang.org/appengine/internal/log", - visibility = ["//vendor/google.golang.org/appengine:__subpackages__"], - deps = ["//vendor/github.com/golang/protobuf/proto:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/appengine/internal/modules/BUILD b/vendor/google.golang.org/appengine/internal/modules/BUILD deleted file mode 100644 index 9ac457ffe3071..0000000000000 --- a/vendor/google.golang.org/appengine/internal/modules/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["modules_service.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/appengine/internal/modules", - importpath = "google.golang.org/appengine/internal/modules", - visibility = ["//vendor/google.golang.org/appengine:__subpackages__"], - deps = ["//vendor/github.com/golang/protobuf/proto:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/appengine/internal/remote_api/BUILD b/vendor/google.golang.org/appengine/internal/remote_api/BUILD deleted file mode 100644 index 5fd6cc9f69d5c..0000000000000 --- a/vendor/google.golang.org/appengine/internal/remote_api/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["remote_api.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/appengine/internal/remote_api", - importpath = "google.golang.org/appengine/internal/remote_api", - visibility = ["//vendor/google.golang.org/appengine:__subpackages__"], - deps = ["//vendor/github.com/golang/protobuf/proto:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/appengine/internal/urlfetch/BUILD b/vendor/google.golang.org/appengine/internal/urlfetch/BUILD deleted file mode 100644 index fb232a6b98dfe..0000000000000 --- a/vendor/google.golang.org/appengine/internal/urlfetch/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["urlfetch_service.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/appengine/internal/urlfetch", - importpath = "google.golang.org/appengine/internal/urlfetch", - visibility = ["//vendor/google.golang.org/appengine:__subpackages__"], - deps = ["//vendor/github.com/golang/protobuf/proto:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/appengine/urlfetch/BUILD b/vendor/google.golang.org/appengine/urlfetch/BUILD deleted file mode 100644 index 28741b27a6843..0000000000000 --- a/vendor/google.golang.org/appengine/urlfetch/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["urlfetch.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/appengine/urlfetch", - importpath = "google.golang.org/appengine/urlfetch", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/golang.org/x/net/context:go_default_library", - "//vendor/google.golang.org/appengine/internal:go_default_library", - "//vendor/google.golang.org/appengine/internal/urlfetch:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/genproto/googleapis/api/httpbody/BUILD b/vendor/google.golang.org/genproto/googleapis/api/httpbody/BUILD deleted file mode 100644 index 419581c4d9196..0000000000000 --- a/vendor/google.golang.org/genproto/googleapis/api/httpbody/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["httpbody.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/genproto/googleapis/api/httpbody", - importpath = "google.golang.org/genproto/googleapis/api/httpbody", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/any:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/status/BUILD b/vendor/google.golang.org/genproto/googleapis/rpc/status/BUILD deleted file mode 100644 index 9e420236af751..0000000000000 --- a/vendor/google.golang.org/genproto/googleapis/rpc/status/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["status.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/genproto/googleapis/rpc/status", - importpath = "google.golang.org/genproto/googleapis/rpc/status", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/any:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/genproto/protobuf/field_mask/BUILD b/vendor/google.golang.org/genproto/protobuf/field_mask/BUILD deleted file mode 100644 index 8da606f9a2a89..0000000000000 --- a/vendor/google.golang.org/genproto/protobuf/field_mask/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["field_mask.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/genproto/protobuf/field_mask", - importpath = "google.golang.org/genproto/protobuf/field_mask", - visibility = ["//visibility:public"], - deps = ["//vendor/google.golang.org/protobuf/types/known/fieldmaskpb:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/BUILD b/vendor/google.golang.org/grpc/BUILD deleted file mode 100644 index b7789e9f7fc97..0000000000000 --- a/vendor/google.golang.org/grpc/BUILD +++ /dev/null @@ -1,101 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "backoff.go", - "balancer.go", - "balancer_conn_wrappers.go", - "balancer_v1_wrapper.go", - "call.go", - "clientconn.go", - "codec.go", - "dialoptions.go", - "doc.go", - "interceptor.go", - "picker_wrapper.go", - "pickfirst.go", - "preloader.go", - "proxy.go", - "resolver_conn_wrapper.go", - "rpc_util.go", - "server.go", - "service_config.go", - "stream.go", - "trace.go", - "version.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc", - importpath = "google.golang.org/grpc", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/net/trace:go_default_library", - "//vendor/google.golang.org/grpc/backoff:go_default_library", - "//vendor/google.golang.org/grpc/balancer:go_default_library", - "//vendor/google.golang.org/grpc/balancer/base:go_default_library", - "//vendor/google.golang.org/grpc/balancer/roundrobin:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/connectivity:go_default_library", - "//vendor/google.golang.org/grpc/credentials:go_default_library", - "//vendor/google.golang.org/grpc/encoding:go_default_library", - "//vendor/google.golang.org/grpc/encoding/proto:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - "//vendor/google.golang.org/grpc/internal:go_default_library", - "//vendor/google.golang.org/grpc/internal/backoff:go_default_library", - "//vendor/google.golang.org/grpc/internal/balancerload:go_default_library", - "//vendor/google.golang.org/grpc/internal/binarylog:go_default_library", - "//vendor/google.golang.org/grpc/internal/buffer:go_default_library", - "//vendor/google.golang.org/grpc/internal/channelz:go_default_library", - "//vendor/google.golang.org/grpc/internal/envconfig:go_default_library", - "//vendor/google.golang.org/grpc/internal/grpcrand:go_default_library", - "//vendor/google.golang.org/grpc/internal/grpcsync:go_default_library", - "//vendor/google.golang.org/grpc/internal/resolver/dns:go_default_library", - "//vendor/google.golang.org/grpc/internal/resolver/passthrough:go_default_library", - "//vendor/google.golang.org/grpc/internal/transport:go_default_library", - "//vendor/google.golang.org/grpc/keepalive:go_default_library", - "//vendor/google.golang.org/grpc/metadata:go_default_library", - "//vendor/google.golang.org/grpc/naming:go_default_library", - "//vendor/google.golang.org/grpc/peer:go_default_library", - "//vendor/google.golang.org/grpc/resolver:go_default_library", - "//vendor/google.golang.org/grpc/serviceconfig:go_default_library", - "//vendor/google.golang.org/grpc/stats:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - "//vendor/google.golang.org/grpc/tap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/google.golang.org/grpc/attributes:all-srcs", - "//vendor/google.golang.org/grpc/backoff:all-srcs", - "//vendor/google.golang.org/grpc/balancer:all-srcs", - "//vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1:all-srcs", - "//vendor/google.golang.org/grpc/codes:all-srcs", - "//vendor/google.golang.org/grpc/connectivity:all-srcs", - "//vendor/google.golang.org/grpc/credentials:all-srcs", - "//vendor/google.golang.org/grpc/encoding:all-srcs", - "//vendor/google.golang.org/grpc/grpclog:all-srcs", - "//vendor/google.golang.org/grpc/health:all-srcs", - "//vendor/google.golang.org/grpc/internal:all-srcs", - "//vendor/google.golang.org/grpc/keepalive:all-srcs", - "//vendor/google.golang.org/grpc/metadata:all-srcs", - "//vendor/google.golang.org/grpc/naming:all-srcs", - "//vendor/google.golang.org/grpc/peer:all-srcs", - "//vendor/google.golang.org/grpc/resolver:all-srcs", - "//vendor/google.golang.org/grpc/serviceconfig:all-srcs", - "//vendor/google.golang.org/grpc/stats:all-srcs", - "//vendor/google.golang.org/grpc/status:all-srcs", - "//vendor/google.golang.org/grpc/tap:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/attributes/BUILD b/vendor/google.golang.org/grpc/attributes/BUILD deleted file mode 100644 index 6f3b9c3e433e3..0000000000000 --- a/vendor/google.golang.org/grpc/attributes/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["attributes.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/attributes", - importpath = "google.golang.org/grpc/attributes", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/backoff/BUILD b/vendor/google.golang.org/grpc/backoff/BUILD deleted file mode 100644 index ba8e91cc2d0f4..0000000000000 --- a/vendor/google.golang.org/grpc/backoff/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["backoff.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/backoff", - importpath = "google.golang.org/grpc/backoff", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/balancer/BUILD b/vendor/google.golang.org/grpc/balancer/BUILD deleted file mode 100644 index 50a83b867e0da..0000000000000 --- a/vendor/google.golang.org/grpc/balancer/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["balancer.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/balancer", - importpath = "google.golang.org/grpc/balancer", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/grpc/connectivity:go_default_library", - "//vendor/google.golang.org/grpc/credentials:go_default_library", - "//vendor/google.golang.org/grpc/internal:go_default_library", - "//vendor/google.golang.org/grpc/metadata:go_default_library", - "//vendor/google.golang.org/grpc/resolver:go_default_library", - "//vendor/google.golang.org/grpc/serviceconfig:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/google.golang.org/grpc/balancer/base:all-srcs", - "//vendor/google.golang.org/grpc/balancer/roundrobin:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/balancer/base/BUILD b/vendor/google.golang.org/grpc/balancer/base/BUILD deleted file mode 100644 index 525d9f1a4c6f5..0000000000000 --- a/vendor/google.golang.org/grpc/balancer/base/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "balancer.go", - "base.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/balancer/base", - importpath = "google.golang.org/grpc/balancer/base", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/grpc/balancer:go_default_library", - "//vendor/google.golang.org/grpc/connectivity:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - "//vendor/google.golang.org/grpc/resolver:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/balancer/roundrobin/BUILD b/vendor/google.golang.org/grpc/balancer/roundrobin/BUILD deleted file mode 100644 index a6babacbeaa4e..0000000000000 --- a/vendor/google.golang.org/grpc/balancer/roundrobin/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["roundrobin.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/balancer/roundrobin", - importpath = "google.golang.org/grpc/balancer/roundrobin", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/grpc/balancer:go_default_library", - "//vendor/google.golang.org/grpc/balancer/base:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - "//vendor/google.golang.org/grpc/internal/grpcrand:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/BUILD b/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/BUILD deleted file mode 100644 index 2390cccf8871e..0000000000000 --- a/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["binarylog.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1", - importpath = "google.golang.org/grpc/binarylog/grpc_binarylog_v1", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/duration:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes/timestamp:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/codes/BUILD b/vendor/google.golang.org/grpc/codes/BUILD deleted file mode 100644 index ec463a52bbf1f..0000000000000 --- a/vendor/google.golang.org/grpc/codes/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "code_string.go", - "codes.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/codes", - importpath = "google.golang.org/grpc/codes", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/connectivity/BUILD b/vendor/google.golang.org/grpc/connectivity/BUILD deleted file mode 100644 index 52d140665c7f1..0000000000000 --- a/vendor/google.golang.org/grpc/connectivity/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["connectivity.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/connectivity", - importpath = "google.golang.org/grpc/connectivity", - visibility = ["//visibility:public"], - deps = ["//vendor/google.golang.org/grpc/grpclog:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/credentials/BUILD b/vendor/google.golang.org/grpc/credentials/BUILD deleted file mode 100644 index ea8a850dfc865..0000000000000 --- a/vendor/google.golang.org/grpc/credentials/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "credentials.go", - "go12.go", - "tls.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/credentials", - importpath = "google.golang.org/grpc/credentials", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/google.golang.org/grpc/credentials/internal:go_default_library", - "//vendor/google.golang.org/grpc/internal:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/google.golang.org/grpc/credentials/internal:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/credentials/internal/BUILD b/vendor/google.golang.org/grpc/credentials/internal/BUILD deleted file mode 100644 index deee7a55f2b46..0000000000000 --- a/vendor/google.golang.org/grpc/credentials/internal/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["syscallconn.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/credentials/internal", - importpath = "google.golang.org/grpc/credentials/internal", - visibility = ["//vendor/google.golang.org/grpc/credentials:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/encoding/BUILD b/vendor/google.golang.org/grpc/encoding/BUILD deleted file mode 100644 index 7f6bcc2a893ce..0000000000000 --- a/vendor/google.golang.org/grpc/encoding/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["encoding.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/encoding", - importpath = "google.golang.org/grpc/encoding", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/google.golang.org/grpc/encoding/proto:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/encoding/proto/BUILD b/vendor/google.golang.org/grpc/encoding/proto/BUILD deleted file mode 100644 index 3173d4a556be1..0000000000000 --- a/vendor/google.golang.org/grpc/encoding/proto/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["proto.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/encoding/proto", - importpath = "google.golang.org/grpc/encoding/proto", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/google.golang.org/grpc/encoding:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/grpclog/BUILD b/vendor/google.golang.org/grpc/grpclog/BUILD deleted file mode 100644 index dfa99a7ad3218..0000000000000 --- a/vendor/google.golang.org/grpc/grpclog/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "grpclog.go", - "logger.go", - "loggerv2.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/grpclog", - importpath = "google.golang.org/grpc/grpclog", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/health/BUILD b/vendor/google.golang.org/grpc/health/BUILD deleted file mode 100644 index f0138c8f172c8..0000000000000 --- a/vendor/google.golang.org/grpc/health/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "server.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/health", - importpath = "google.golang.org/grpc/health", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/connectivity:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - "//vendor/google.golang.org/grpc/health/grpc_health_v1:go_default_library", - "//vendor/google.golang.org/grpc/internal:go_default_library", - "//vendor/google.golang.org/grpc/internal/backoff:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/google.golang.org/grpc/health/grpc_health_v1:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/health/grpc_health_v1/BUILD b/vendor/google.golang.org/grpc/health/grpc_health_v1/BUILD deleted file mode 100644 index df65940f50415..0000000000000 --- a/vendor/google.golang.org/grpc/health/grpc_health_v1/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["health.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/health/grpc_health_v1", - importpath = "google.golang.org/grpc/health/grpc_health_v1", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/internal/BUILD b/vendor/google.golang.org/grpc/internal/BUILD deleted file mode 100644 index 026e64ca3c8ca..0000000000000 --- a/vendor/google.golang.org/grpc/internal/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["internal.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/internal", - importpath = "google.golang.org/grpc/internal", - visibility = ["//vendor/google.golang.org/grpc:__subpackages__"], - deps = ["//vendor/google.golang.org/grpc/connectivity:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/google.golang.org/grpc/internal/backoff:all-srcs", - "//vendor/google.golang.org/grpc/internal/balancerload:all-srcs", - "//vendor/google.golang.org/grpc/internal/binarylog:all-srcs", - "//vendor/google.golang.org/grpc/internal/buffer:all-srcs", - "//vendor/google.golang.org/grpc/internal/channelz:all-srcs", - "//vendor/google.golang.org/grpc/internal/envconfig:all-srcs", - "//vendor/google.golang.org/grpc/internal/grpcrand:all-srcs", - "//vendor/google.golang.org/grpc/internal/grpcsync:all-srcs", - "//vendor/google.golang.org/grpc/internal/resolver/dns:all-srcs", - "//vendor/google.golang.org/grpc/internal/resolver/passthrough:all-srcs", - "//vendor/google.golang.org/grpc/internal/syscall:all-srcs", - "//vendor/google.golang.org/grpc/internal/transport:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/internal/backoff/BUILD b/vendor/google.golang.org/grpc/internal/backoff/BUILD deleted file mode 100644 index ba3aed98960a3..0000000000000 --- a/vendor/google.golang.org/grpc/internal/backoff/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["backoff.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/backoff", - importpath = "google.golang.org/grpc/internal/backoff", - visibility = ["//vendor/google.golang.org/grpc:__subpackages__"], - deps = [ - "//vendor/google.golang.org/grpc/backoff:go_default_library", - "//vendor/google.golang.org/grpc/internal/grpcrand:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/internal/balancerload/BUILD b/vendor/google.golang.org/grpc/internal/balancerload/BUILD deleted file mode 100644 index ac1b0e7adf186..0000000000000 --- a/vendor/google.golang.org/grpc/internal/balancerload/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["load.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/balancerload", - importpath = "google.golang.org/grpc/internal/balancerload", - visibility = ["//vendor/google.golang.org/grpc:__subpackages__"], - deps = ["//vendor/google.golang.org/grpc/metadata:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/internal/binarylog/BUILD b/vendor/google.golang.org/grpc/internal/binarylog/BUILD deleted file mode 100644 index baff49ab51788..0000000000000 --- a/vendor/google.golang.org/grpc/internal/binarylog/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "binarylog.go", - "binarylog_testutil.go", - "env_config.go", - "method_logger.go", - "sink.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/binarylog", - importpath = "google.golang.org/grpc/internal/binarylog", - visibility = ["//vendor/google.golang.org/grpc:__subpackages__"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes:go_default_library", - "//vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - "//vendor/google.golang.org/grpc/metadata:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/internal/buffer/BUILD b/vendor/google.golang.org/grpc/internal/buffer/BUILD deleted file mode 100644 index 5739f87b56997..0000000000000 --- a/vendor/google.golang.org/grpc/internal/buffer/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["unbounded.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/buffer", - importpath = "google.golang.org/grpc/internal/buffer", - visibility = ["//vendor/google.golang.org/grpc:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/internal/channelz/BUILD b/vendor/google.golang.org/grpc/internal/channelz/BUILD deleted file mode 100644 index 9f9328df9dff8..0000000000000 --- a/vendor/google.golang.org/grpc/internal/channelz/BUILD +++ /dev/null @@ -1,43 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "funcs.go", - "types.go", - "types_linux.go", - "types_nonlinux.go", - "util_linux.go", - "util_nonlinux.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/channelz", - importpath = "google.golang.org/grpc/internal/channelz", - visibility = ["//vendor/google.golang.org/grpc:__subpackages__"], - deps = [ - "//vendor/google.golang.org/grpc/connectivity:go_default_library", - "//vendor/google.golang.org/grpc/credentials:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/internal/envconfig/BUILD b/vendor/google.golang.org/grpc/internal/envconfig/BUILD deleted file mode 100644 index ca751b243d17f..0000000000000 --- a/vendor/google.golang.org/grpc/internal/envconfig/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["envconfig.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/envconfig", - importpath = "google.golang.org/grpc/internal/envconfig", - visibility = ["//vendor/google.golang.org/grpc:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/internal/grpcrand/BUILD b/vendor/google.golang.org/grpc/internal/grpcrand/BUILD deleted file mode 100644 index 0768b8d8c2819..0000000000000 --- a/vendor/google.golang.org/grpc/internal/grpcrand/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["grpcrand.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/grpcrand", - importpath = "google.golang.org/grpc/internal/grpcrand", - visibility = ["//vendor/google.golang.org/grpc:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/internal/grpcsync/BUILD b/vendor/google.golang.org/grpc/internal/grpcsync/BUILD deleted file mode 100644 index 6beae9da52497..0000000000000 --- a/vendor/google.golang.org/grpc/internal/grpcsync/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["event.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/grpcsync", - importpath = "google.golang.org/grpc/internal/grpcsync", - visibility = ["//vendor/google.golang.org/grpc:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/internal/resolver/dns/BUILD b/vendor/google.golang.org/grpc/internal/resolver/dns/BUILD deleted file mode 100644 index 33336b1378325..0000000000000 --- a/vendor/google.golang.org/grpc/internal/resolver/dns/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dns_resolver.go", - "go113.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/resolver/dns", - importpath = "google.golang.org/grpc/internal/resolver/dns", - visibility = ["//vendor/google.golang.org/grpc:__subpackages__"], - deps = [ - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - "//vendor/google.golang.org/grpc/internal/envconfig:go_default_library", - "//vendor/google.golang.org/grpc/internal/grpcrand:go_default_library", - "//vendor/google.golang.org/grpc/resolver:go_default_library", - "//vendor/google.golang.org/grpc/serviceconfig:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/internal/resolver/passthrough/BUILD b/vendor/google.golang.org/grpc/internal/resolver/passthrough/BUILD deleted file mode 100644 index 7cf337b9ad829..0000000000000 --- a/vendor/google.golang.org/grpc/internal/resolver/passthrough/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["passthrough.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/resolver/passthrough", - importpath = "google.golang.org/grpc/internal/resolver/passthrough", - visibility = ["//vendor/google.golang.org/grpc:__subpackages__"], - deps = ["//vendor/google.golang.org/grpc/resolver:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/internal/syscall/BUILD b/vendor/google.golang.org/grpc/internal/syscall/BUILD deleted file mode 100644 index 9b6243efcd75b..0000000000000 --- a/vendor/google.golang.org/grpc/internal/syscall/BUILD +++ /dev/null @@ -1,76 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "syscall_linux.go", - "syscall_nonlinux.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/syscall", - importpath = "google.golang.org/grpc/internal/syscall", - visibility = ["//vendor/google.golang.org/grpc:__subpackages__"], - deps = select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "@io_bazel_rules_go//go/platform:illumos": [ - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "@io_bazel_rules_go//go/platform:js": [ - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "@io_bazel_rules_go//go/platform:nacl": [ - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "@io_bazel_rules_go//go/platform:plan9": [ - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/internal/transport/BUILD b/vendor/google.golang.org/grpc/internal/transport/BUILD deleted file mode 100644 index c6fcac9274e09..0000000000000 --- a/vendor/google.golang.org/grpc/internal/transport/BUILD +++ /dev/null @@ -1,53 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bdp_estimator.go", - "controlbuf.go", - "defaults.go", - "flowcontrol.go", - "handler_server.go", - "http2_client.go", - "http2_server.go", - "http_util.go", - "log.go", - "transport.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/transport", - importpath = "google.golang.org/grpc/internal/transport", - visibility = ["//vendor/google.golang.org/grpc:__subpackages__"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/golang.org/x/net/http2:go_default_library", - "//vendor/golang.org/x/net/http2/hpack:go_default_library", - "//vendor/google.golang.org/genproto/googleapis/rpc/status:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/credentials:go_default_library", - "//vendor/google.golang.org/grpc/grpclog:go_default_library", - "//vendor/google.golang.org/grpc/internal:go_default_library", - "//vendor/google.golang.org/grpc/internal/channelz:go_default_library", - "//vendor/google.golang.org/grpc/internal/grpcrand:go_default_library", - "//vendor/google.golang.org/grpc/internal/syscall:go_default_library", - "//vendor/google.golang.org/grpc/keepalive:go_default_library", - "//vendor/google.golang.org/grpc/metadata:go_default_library", - "//vendor/google.golang.org/grpc/peer:go_default_library", - "//vendor/google.golang.org/grpc/stats:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - "//vendor/google.golang.org/grpc/tap:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/keepalive/BUILD b/vendor/google.golang.org/grpc/keepalive/BUILD deleted file mode 100644 index 2741c47630478..0000000000000 --- a/vendor/google.golang.org/grpc/keepalive/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["keepalive.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/keepalive", - importpath = "google.golang.org/grpc/keepalive", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/metadata/BUILD b/vendor/google.golang.org/grpc/metadata/BUILD deleted file mode 100644 index 79315f4b5a590..0000000000000 --- a/vendor/google.golang.org/grpc/metadata/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["metadata.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/metadata", - importpath = "google.golang.org/grpc/metadata", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/naming/BUILD b/vendor/google.golang.org/grpc/naming/BUILD deleted file mode 100644 index cb5a7e38158bf..0000000000000 --- a/vendor/google.golang.org/grpc/naming/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dns_resolver.go", - "naming.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/naming", - importpath = "google.golang.org/grpc/naming", - visibility = ["//visibility:public"], - deps = ["//vendor/google.golang.org/grpc/grpclog:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/peer/BUILD b/vendor/google.golang.org/grpc/peer/BUILD deleted file mode 100644 index 7da82ae782f31..0000000000000 --- a/vendor/google.golang.org/grpc/peer/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["peer.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/peer", - importpath = "google.golang.org/grpc/peer", - visibility = ["//visibility:public"], - deps = ["//vendor/google.golang.org/grpc/credentials:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/resolver/BUILD b/vendor/google.golang.org/grpc/resolver/BUILD deleted file mode 100644 index 82ebdc596eabb..0000000000000 --- a/vendor/google.golang.org/grpc/resolver/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["resolver.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/resolver", - importpath = "google.golang.org/grpc/resolver", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/grpc/attributes:go_default_library", - "//vendor/google.golang.org/grpc/credentials:go_default_library", - "//vendor/google.golang.org/grpc/serviceconfig:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/google.golang.org/grpc/resolver/dns:all-srcs", - "//vendor/google.golang.org/grpc/resolver/passthrough:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/resolver/dns/BUILD b/vendor/google.golang.org/grpc/resolver/dns/BUILD deleted file mode 100644 index a9aa640a52f30..0000000000000 --- a/vendor/google.golang.org/grpc/resolver/dns/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["dns_resolver.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/resolver/dns", - importpath = "google.golang.org/grpc/resolver/dns", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/grpc/internal/resolver/dns:go_default_library", - "//vendor/google.golang.org/grpc/resolver:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/resolver/passthrough/BUILD b/vendor/google.golang.org/grpc/resolver/passthrough/BUILD deleted file mode 100644 index 28ea1bd500704..0000000000000 --- a/vendor/google.golang.org/grpc/resolver/passthrough/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["passthrough.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/resolver/passthrough", - importpath = "google.golang.org/grpc/resolver/passthrough", - visibility = ["//visibility:public"], - deps = ["//vendor/google.golang.org/grpc/internal/resolver/passthrough:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/serviceconfig/BUILD b/vendor/google.golang.org/grpc/serviceconfig/BUILD deleted file mode 100644 index 567dc9a3ae58e..0000000000000 --- a/vendor/google.golang.org/grpc/serviceconfig/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["serviceconfig.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/serviceconfig", - importpath = "google.golang.org/grpc/serviceconfig", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/stats/BUILD b/vendor/google.golang.org/grpc/stats/BUILD deleted file mode 100644 index f8276e01f0f6e..0000000000000 --- a/vendor/google.golang.org/grpc/stats/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "handlers.go", - "stats.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/stats", - importpath = "google.golang.org/grpc/stats", - visibility = ["//visibility:public"], - deps = ["//vendor/google.golang.org/grpc/metadata:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/status/BUILD b/vendor/google.golang.org/grpc/status/BUILD deleted file mode 100644 index a3327e6e3977a..0000000000000 --- a/vendor/google.golang.org/grpc/status/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["status.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/status", - importpath = "google.golang.org/grpc/status", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/golang/protobuf/ptypes:go_default_library", - "//vendor/google.golang.org/genproto/googleapis/rpc/status:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/internal:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/grpc/tap/BUILD b/vendor/google.golang.org/grpc/tap/BUILD deleted file mode 100644 index 047002e864c1a..0000000000000 --- a/vendor/google.golang.org/grpc/tap/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["tap.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/grpc/tap", - importpath = "google.golang.org/grpc/tap", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/BUILD b/vendor/google.golang.org/protobuf/encoding/protojson/BUILD deleted file mode 100644 index 21731daa30f1e..0000000000000 --- a/vendor/google.golang.org/protobuf/encoding/protojson/BUILD +++ /dev/null @@ -1,42 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decode.go", - "doc.go", - "encode.go", - "well_known_types.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/encoding/protojson", - importpath = "google.golang.org/protobuf/encoding/protojson", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/internal/detectknown:go_default_library", - "//vendor/google.golang.org/protobuf/internal/encoding/json:go_default_library", - "//vendor/google.golang.org/protobuf/internal/encoding/messageset:go_default_library", - "//vendor/google.golang.org/protobuf/internal/errors:go_default_library", - "//vendor/google.golang.org/protobuf/internal/fieldnum:go_default_library", - "//vendor/google.golang.org/protobuf/internal/flags:go_default_library", - "//vendor/google.golang.org/protobuf/internal/pragma:go_default_library", - "//vendor/google.golang.org/protobuf/internal/set:go_default_library", - "//vendor/google.golang.org/protobuf/internal/strs:go_default_library", - "//vendor/google.golang.org/protobuf/proto:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoregistry:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/encoding/prototext/BUILD b/vendor/google.golang.org/protobuf/encoding/prototext/BUILD deleted file mode 100644 index 588da5c40bfc5..0000000000000 --- a/vendor/google.golang.org/protobuf/encoding/prototext/BUILD +++ /dev/null @@ -1,42 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decode.go", - "doc.go", - "encode.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/encoding/prototext", - importpath = "google.golang.org/protobuf/encoding/prototext", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/encoding/protowire:go_default_library", - "//vendor/google.golang.org/protobuf/internal/encoding/messageset:go_default_library", - "//vendor/google.golang.org/protobuf/internal/encoding/text:go_default_library", - "//vendor/google.golang.org/protobuf/internal/errors:go_default_library", - "//vendor/google.golang.org/protobuf/internal/fieldnum:go_default_library", - "//vendor/google.golang.org/protobuf/internal/flags:go_default_library", - "//vendor/google.golang.org/protobuf/internal/mapsort:go_default_library", - "//vendor/google.golang.org/protobuf/internal/pragma:go_default_library", - "//vendor/google.golang.org/protobuf/internal/set:go_default_library", - "//vendor/google.golang.org/protobuf/internal/strs:go_default_library", - "//vendor/google.golang.org/protobuf/proto:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoregistry:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/encoding/protowire/BUILD b/vendor/google.golang.org/protobuf/encoding/protowire/BUILD deleted file mode 100644 index 8fe3e0f454605..0000000000000 --- a/vendor/google.golang.org/protobuf/encoding/protowire/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["wire.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/encoding/protowire", - importpath = "google.golang.org/protobuf/encoding/protowire", - visibility = ["//visibility:public"], - deps = ["//vendor/google.golang.org/protobuf/internal/errors:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/descfmt/BUILD b/vendor/google.golang.org/protobuf/internal/descfmt/BUILD deleted file mode 100644 index 5fa866078fa18..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/descfmt/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["stringer.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/descfmt", - importpath = "google.golang.org/protobuf/internal/descfmt", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = [ - "//vendor/google.golang.org/protobuf/internal/detrand:go_default_library", - "//vendor/google.golang.org/protobuf/internal/pragma:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/descopts/BUILD b/vendor/google.golang.org/protobuf/internal/descopts/BUILD deleted file mode 100644 index 0d6cb47cba645..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/descopts/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["options.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/descopts", - importpath = "google.golang.org/protobuf/internal/descopts", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = ["//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/detectknown/BUILD b/vendor/google.golang.org/protobuf/internal/detectknown/BUILD deleted file mode 100644 index 9163b6070e89e..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/detectknown/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["detect.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/detectknown", - importpath = "google.golang.org/protobuf/internal/detectknown", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = ["//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/detrand/BUILD b/vendor/google.golang.org/protobuf/internal/detrand/BUILD deleted file mode 100644 index b077cafd4612f..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/detrand/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["rand.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/detrand", - importpath = "google.golang.org/protobuf/internal/detrand", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/encoding/defval/BUILD b/vendor/google.golang.org/protobuf/internal/encoding/defval/BUILD deleted file mode 100644 index a0e69f9eb019b..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/encoding/defval/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["default.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/encoding/defval", - importpath = "google.golang.org/protobuf/internal/encoding/defval", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = [ - "//vendor/google.golang.org/protobuf/internal/encoding/text:go_default_library", - "//vendor/google.golang.org/protobuf/internal/errors:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/encoding/json/BUILD b/vendor/google.golang.org/protobuf/internal/encoding/json/BUILD deleted file mode 100644 index 890a6cc5678ee..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/encoding/json/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decode.go", - "decode_number.go", - "decode_string.go", - "decode_token.go", - "encode.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/encoding/json", - importpath = "google.golang.org/protobuf/internal/encoding/json", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = [ - "//vendor/google.golang.org/protobuf/internal/detrand:go_default_library", - "//vendor/google.golang.org/protobuf/internal/errors:go_default_library", - "//vendor/google.golang.org/protobuf/internal/strs:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/encoding/messageset/BUILD b/vendor/google.golang.org/protobuf/internal/encoding/messageset/BUILD deleted file mode 100644 index 49177d6ca7118..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/encoding/messageset/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["messageset.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/encoding/messageset", - importpath = "google.golang.org/protobuf/internal/encoding/messageset", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = [ - "//vendor/google.golang.org/protobuf/encoding/protowire:go_default_library", - "//vendor/google.golang.org/protobuf/internal/errors:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoregistry:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/encoding/tag/BUILD b/vendor/google.golang.org/protobuf/internal/encoding/tag/BUILD deleted file mode 100644 index f5503c4b8c7a9..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/encoding/tag/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["tag.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/encoding/tag", - importpath = "google.golang.org/protobuf/internal/encoding/tag", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = [ - "//vendor/google.golang.org/protobuf/internal/encoding/defval:go_default_library", - "//vendor/google.golang.org/protobuf/internal/filedesc:go_default_library", - "//vendor/google.golang.org/protobuf/internal/strs:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/BUILD b/vendor/google.golang.org/protobuf/internal/encoding/text/BUILD deleted file mode 100644 index 8ad53ab78dc63..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/encoding/text/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decode.go", - "decode_number.go", - "decode_string.go", - "decode_token.go", - "doc.go", - "encode.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/encoding/text", - importpath = "google.golang.org/protobuf/internal/encoding/text", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = [ - "//vendor/google.golang.org/protobuf/internal/detrand:go_default_library", - "//vendor/google.golang.org/protobuf/internal/errors:go_default_library", - "//vendor/google.golang.org/protobuf/internal/flags:go_default_library", - "//vendor/google.golang.org/protobuf/internal/strs:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/errors/BUILD b/vendor/google.golang.org/protobuf/internal/errors/BUILD deleted file mode 100644 index 41ca931c77ee3..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/errors/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "errors.go", - "is_go112.go", - "is_go113.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/errors", - importpath = "google.golang.org/protobuf/internal/errors", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = ["//vendor/google.golang.org/protobuf/internal/detrand:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/fieldnum/BUILD b/vendor/google.golang.org/protobuf/internal/fieldnum/BUILD deleted file mode 100644 index 920e39df40139..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/fieldnum/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "any_gen.go", - "api_gen.go", - "descriptor_gen.go", - "doc.go", - "duration_gen.go", - "empty_gen.go", - "field_mask_gen.go", - "source_context_gen.go", - "struct_gen.go", - "timestamp_gen.go", - "type_gen.go", - "wrappers_gen.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/fieldnum", - importpath = "google.golang.org/protobuf/internal/fieldnum", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/fieldsort/BUILD b/vendor/google.golang.org/protobuf/internal/fieldsort/BUILD deleted file mode 100644 index ff2bc8f3fff3e..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/fieldsort/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["fieldsort.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/fieldsort", - importpath = "google.golang.org/protobuf/internal/fieldsort", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = ["//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/BUILD b/vendor/google.golang.org/protobuf/internal/filedesc/BUILD deleted file mode 100644 index b53ff8612a166..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/filedesc/BUILD +++ /dev/null @@ -1,44 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "build.go", - "desc.go", - "desc_init.go", - "desc_lazy.go", - "desc_list.go", - "desc_list_gen.go", - "placeholder.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/filedesc", - importpath = "google.golang.org/protobuf/internal/filedesc", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = [ - "//vendor/google.golang.org/protobuf/encoding/protowire:go_default_library", - "//vendor/google.golang.org/protobuf/internal/descfmt:go_default_library", - "//vendor/google.golang.org/protobuf/internal/descopts:go_default_library", - "//vendor/google.golang.org/protobuf/internal/encoding/defval:go_default_library", - "//vendor/google.golang.org/protobuf/internal/errors:go_default_library", - "//vendor/google.golang.org/protobuf/internal/fieldnum:go_default_library", - "//vendor/google.golang.org/protobuf/internal/pragma:go_default_library", - "//vendor/google.golang.org/protobuf/internal/strs:go_default_library", - "//vendor/google.golang.org/protobuf/proto:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoregistry:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/filetype/BUILD b/vendor/google.golang.org/protobuf/internal/filetype/BUILD deleted file mode 100644 index 18d66a3f88702..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/filetype/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["build.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/filetype", - importpath = "google.golang.org/protobuf/internal/filetype", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = [ - "//vendor/google.golang.org/protobuf/internal/descopts:go_default_library", - "//vendor/google.golang.org/protobuf/internal/filedesc:go_default_library", - "//vendor/google.golang.org/protobuf/internal/impl:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoregistry:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/flags/BUILD b/vendor/google.golang.org/protobuf/internal/flags/BUILD deleted file mode 100644 index 76f0ee9243c9c..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/flags/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "flags.go", - "proto_legacy_disable.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/flags", - importpath = "google.golang.org/protobuf/internal/flags", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/genname/BUILD b/vendor/google.golang.org/protobuf/internal/genname/BUILD deleted file mode 100644 index eed14d714eea3..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/genname/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["name.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/genname", - importpath = "google.golang.org/protobuf/internal/genname", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/impl/BUILD b/vendor/google.golang.org/protobuf/internal/impl/BUILD deleted file mode 100644 index f9949e950c971..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/impl/BUILD +++ /dev/null @@ -1,75 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api_export.go", - "checkinit.go", - "codec_extension.go", - "codec_field.go", - "codec_gen.go", - "codec_map.go", - "codec_map_go111.go", - "codec_map_go112.go", - "codec_message.go", - "codec_messageset.go", - "codec_tables.go", - "codec_unsafe.go", - "convert.go", - "convert_list.go", - "convert_map.go", - "decode.go", - "encode.go", - "enum.go", - "extension.go", - "legacy_enum.go", - "legacy_export.go", - "legacy_extension.go", - "legacy_file.go", - "legacy_message.go", - "merge.go", - "merge_gen.go", - "message.go", - "message_reflect.go", - "message_reflect_field.go", - "message_reflect_gen.go", - "pointer_unsafe.go", - "validate.go", - "weak.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/impl", - importpath = "google.golang.org/protobuf/internal/impl", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = [ - "//vendor/google.golang.org/protobuf/encoding/prototext:go_default_library", - "//vendor/google.golang.org/protobuf/encoding/protowire:go_default_library", - "//vendor/google.golang.org/protobuf/internal/descopts:go_default_library", - "//vendor/google.golang.org/protobuf/internal/encoding/messageset:go_default_library", - "//vendor/google.golang.org/protobuf/internal/encoding/tag:go_default_library", - "//vendor/google.golang.org/protobuf/internal/errors:go_default_library", - "//vendor/google.golang.org/protobuf/internal/fieldsort:go_default_library", - "//vendor/google.golang.org/protobuf/internal/filedesc:go_default_library", - "//vendor/google.golang.org/protobuf/internal/flags:go_default_library", - "//vendor/google.golang.org/protobuf/internal/genname:go_default_library", - "//vendor/google.golang.org/protobuf/internal/pragma:go_default_library", - "//vendor/google.golang.org/protobuf/internal/strs:go_default_library", - "//vendor/google.golang.org/protobuf/proto:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoregistry:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoiface:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/mapsort/BUILD b/vendor/google.golang.org/protobuf/internal/mapsort/BUILD deleted file mode 100644 index 76be74e7cbdf9..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/mapsort/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["mapsort.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/mapsort", - importpath = "google.golang.org/protobuf/internal/mapsort", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = ["//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/pragma/BUILD b/vendor/google.golang.org/protobuf/internal/pragma/BUILD deleted file mode 100644 index 0cc85d1c46f26..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/pragma/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["pragma.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/pragma", - importpath = "google.golang.org/protobuf/internal/pragma", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/set/BUILD b/vendor/google.golang.org/protobuf/internal/set/BUILD deleted file mode 100644 index c2b3059444c56..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/set/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["ints.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/set", - importpath = "google.golang.org/protobuf/internal/set", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/strs/BUILD b/vendor/google.golang.org/protobuf/internal/strs/BUILD deleted file mode 100644 index f947815b62794..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/strs/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "strings.go", - "strings_unsafe.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/strs", - importpath = "google.golang.org/protobuf/internal/strs", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], - deps = [ - "//vendor/google.golang.org/protobuf/internal/flags:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/internal/version/BUILD b/vendor/google.golang.org/protobuf/internal/version/BUILD deleted file mode 100644 index 34aef25a1502c..0000000000000 --- a/vendor/google.golang.org/protobuf/internal/version/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["version.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/internal/version", - importpath = "google.golang.org/protobuf/internal/version", - visibility = ["//vendor/google.golang.org/protobuf:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/proto/BUILD b/vendor/google.golang.org/protobuf/proto/BUILD deleted file mode 100644 index 261df34ce8268..0000000000000 --- a/vendor/google.golang.org/protobuf/proto/BUILD +++ /dev/null @@ -1,53 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "checkinit.go", - "decode.go", - "decode_gen.go", - "doc.go", - "encode.go", - "encode_gen.go", - "equal.go", - "extension.go", - "merge.go", - "messageset.go", - "proto.go", - "proto_methods.go", - "reset.go", - "size.go", - "size_gen.go", - "wrappers.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/proto", - importpath = "google.golang.org/protobuf/proto", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/encoding/protowire:go_default_library", - "//vendor/google.golang.org/protobuf/internal/encoding/messageset:go_default_library", - "//vendor/google.golang.org/protobuf/internal/errors:go_default_library", - "//vendor/google.golang.org/protobuf/internal/fieldsort:go_default_library", - "//vendor/google.golang.org/protobuf/internal/flags:go_default_library", - "//vendor/google.golang.org/protobuf/internal/mapsort:go_default_library", - "//vendor/google.golang.org/protobuf/internal/pragma:go_default_library", - "//vendor/google.golang.org/protobuf/internal/strs:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoregistry:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoiface:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/BUILD b/vendor/google.golang.org/protobuf/reflect/protoreflect/BUILD deleted file mode 100644 index a892c80961100..0000000000000 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "methods.go", - "proto.go", - "source.go", - "type.go", - "value.go", - "value_union.go", - "value_unsafe.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/reflect/protoreflect", - importpath = "google.golang.org/protobuf/reflect/protoreflect", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/encoding/protowire:go_default_library", - "//vendor/google.golang.org/protobuf/internal/pragma:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/reflect/protoregistry/BUILD b/vendor/google.golang.org/protobuf/reflect/protoregistry/BUILD deleted file mode 100644 index a4e46ac0014dd..0000000000000 --- a/vendor/google.golang.org/protobuf/reflect/protoregistry/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["registry.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/reflect/protoregistry", - importpath = "google.golang.org/protobuf/reflect/protoregistry", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/internal/errors:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/runtime/protoiface/BUILD b/vendor/google.golang.org/protobuf/runtime/protoiface/BUILD deleted file mode 100644 index 5b81910d8962b..0000000000000 --- a/vendor/google.golang.org/protobuf/runtime/protoiface/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "legacy.go", - "methods.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/runtime/protoiface", - importpath = "google.golang.org/protobuf/runtime/protoiface", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/internal/pragma:go_default_library", - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/runtime/protoimpl/BUILD b/vendor/google.golang.org/protobuf/runtime/protoimpl/BUILD deleted file mode 100644 index a8410b152ce5b..0000000000000 --- a/vendor/google.golang.org/protobuf/runtime/protoimpl/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "impl.go", - "version.go", - ], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/runtime/protoimpl", - importpath = "google.golang.org/protobuf/runtime/protoimpl", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/internal/filedesc:go_default_library", - "//vendor/google.golang.org/protobuf/internal/filetype:go_default_library", - "//vendor/google.golang.org/protobuf/internal/impl:go_default_library", - "//vendor/google.golang.org/protobuf/internal/version:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/types/descriptorpb/BUILD b/vendor/google.golang.org/protobuf/types/descriptorpb/BUILD deleted file mode 100644 index 0ef2fa771ef80..0000000000000 --- a/vendor/google.golang.org/protobuf/types/descriptorpb/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["descriptor.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/types/descriptorpb", - importpath = "google.golang.org/protobuf/types/descriptorpb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoiface:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/types/known/anypb/BUILD b/vendor/google.golang.org/protobuf/types/known/anypb/BUILD deleted file mode 100644 index 19475f032b617..0000000000000 --- a/vendor/google.golang.org/protobuf/types/known/anypb/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["any.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/types/known/anypb", - importpath = "google.golang.org/protobuf/types/known/anypb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/types/known/durationpb/BUILD b/vendor/google.golang.org/protobuf/types/known/durationpb/BUILD deleted file mode 100644 index dae0d15660436..0000000000000 --- a/vendor/google.golang.org/protobuf/types/known/durationpb/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["duration.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/types/known/durationpb", - importpath = "google.golang.org/protobuf/types/known/durationpb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/types/known/fieldmaskpb/BUILD b/vendor/google.golang.org/protobuf/types/known/fieldmaskpb/BUILD deleted file mode 100644 index 06bc864a10a93..0000000000000 --- a/vendor/google.golang.org/protobuf/types/known/fieldmaskpb/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["field_mask.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/types/known/fieldmaskpb", - importpath = "google.golang.org/protobuf/types/known/fieldmaskpb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/types/known/timestamppb/BUILD b/vendor/google.golang.org/protobuf/types/known/timestamppb/BUILD deleted file mode 100644 index 81446ab07f0a2..0000000000000 --- a/vendor/google.golang.org/protobuf/types/known/timestamppb/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["timestamp.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/types/known/timestamppb", - importpath = "google.golang.org/protobuf/types/known/timestamppb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/types/known/wrapperspb/BUILD b/vendor/google.golang.org/protobuf/types/known/wrapperspb/BUILD deleted file mode 100644 index 3e9dd2d50bfbb..0000000000000 --- a/vendor/google.golang.org/protobuf/types/known/wrapperspb/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["wrappers.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/types/known/wrapperspb", - importpath = "google.golang.org/protobuf/types/known/wrapperspb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/google.golang.org/protobuf/types/pluginpb/BUILD b/vendor/google.golang.org/protobuf/types/pluginpb/BUILD deleted file mode 100644 index d8def49ba07a9..0000000000000 --- a/vendor/google.golang.org/protobuf/types/pluginpb/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["plugin.pb.go"], - importmap = "k8s.io/kubernetes/vendor/google.golang.org/protobuf/types/pluginpb", - importpath = "google.golang.org/protobuf/types/pluginpb", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/protobuf/reflect/protoreflect:go_default_library", - "//vendor/google.golang.org/protobuf/runtime/protoimpl:go_default_library", - "//vendor/google.golang.org/protobuf/types/descriptorpb:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gopkg.in/asn1-ber.v1/.travis.yml b/vendor/gopkg.in/asn1-ber.v1/.travis.yml new file mode 100644 index 0000000000000..ecf413251b943 --- /dev/null +++ b/vendor/gopkg.in/asn1-ber.v1/.travis.yml @@ -0,0 +1,36 @@ +language: go +matrix: + include: + - go: 1.2.x + env: GOOS=linux GOARCH=amd64 + - go: 1.2.x + env: GOOS=linux GOARCH=386 + - go: 1.2.x + env: GOOS=windows GOARCH=amd64 + - go: 1.2.x + env: GOOS=windows GOARCH=386 + - go: 1.3.x + - go: 1.4.x + - go: 1.5.x + - go: 1.6.x + - go: 1.7.x + - go: 1.8.x + - go: 1.9.x + - go: 1.10.x + - go: 1.11.x + env: GOOS=linux GOARCH=amd64 + - go: 1.11.x + env: GOOS=linux GOARCH=386 + - go: 1.11.x + env: GOOS=windows GOARCH=amd64 + - go: 1.11.x + env: GOOS=windows GOARCH=386 + - go: tip +go_import_path: gopkg.in/asn-ber.v1 +install: + - go list -f '{{range .Imports}}{{.}} {{end}}' ./... | xargs go get -v + - go list -f '{{range .TestImports}}{{.}} {{end}}' ./... | xargs go get -v + - go get code.google.com/p/go.tools/cmd/cover || go get golang.org/x/tools/cmd/cover + - go build -v ./... +script: + - go test -v -cover ./... || go test -v ./... diff --git a/vendor/gopkg.in/asn1-ber.v1/LICENSE b/vendor/gopkg.in/asn1-ber.v1/LICENSE new file mode 100644 index 0000000000000..23f942534570e --- /dev/null +++ b/vendor/gopkg.in/asn1-ber.v1/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2011-2015 Michael Mitton (mmitton@gmail.com) +Portions copyright (c) 2015-2016 go-asn1-ber Authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/gopkg.in/asn1-ber.v1/README.md b/vendor/gopkg.in/asn1-ber.v1/README.md new file mode 100644 index 0000000000000..e3a9560d6814b --- /dev/null +++ b/vendor/gopkg.in/asn1-ber.v1/README.md @@ -0,0 +1,24 @@ +[![GoDoc](https://godoc.org/gopkg.in/asn1-ber.v1?status.svg)](https://godoc.org/gopkg.in/asn1-ber.v1) [![Build Status](https://travis-ci.org/go-asn1-ber/asn1-ber.svg)](https://travis-ci.org/go-asn1-ber/asn1-ber) + + +ASN1 BER Encoding / Decoding Library for the GO programming language. +--------------------------------------------------------------------- + +Required libraries: + None + +Working: + Very basic encoding / decoding needed for LDAP protocol + +Tests Implemented: + A few + +TODO: + Fix all encoding / decoding to conform to ASN1 BER spec + Implement Tests / Benchmarks + +--- + +The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/) +The design is licensed under the Creative Commons 3.0 Attributions license. +Read this article for more details: http://blog.golang.org/gopher diff --git a/vendor/gopkg.in/asn1-ber.v1/ber.go b/vendor/gopkg.in/asn1-ber.v1/ber.go new file mode 100644 index 0000000000000..6153f460688c0 --- /dev/null +++ b/vendor/gopkg.in/asn1-ber.v1/ber.go @@ -0,0 +1,512 @@ +package ber + +import ( + "bytes" + "errors" + "fmt" + "io" + "math" + "os" + "reflect" +) + +// MaxPacketLengthBytes specifies the maximum allowed packet size when calling ReadPacket or DecodePacket. Set to 0 for +// no limit. +var MaxPacketLengthBytes int64 = math.MaxInt32 + +type Packet struct { + Identifier + Value interface{} + ByteValue []byte + Data *bytes.Buffer + Children []*Packet + Description string +} + +type Identifier struct { + ClassType Class + TagType Type + Tag Tag +} + +type Tag uint64 + +const ( + TagEOC Tag = 0x00 + TagBoolean Tag = 0x01 + TagInteger Tag = 0x02 + TagBitString Tag = 0x03 + TagOctetString Tag = 0x04 + TagNULL Tag = 0x05 + TagObjectIdentifier Tag = 0x06 + TagObjectDescriptor Tag = 0x07 + TagExternal Tag = 0x08 + TagRealFloat Tag = 0x09 + TagEnumerated Tag = 0x0a + TagEmbeddedPDV Tag = 0x0b + TagUTF8String Tag = 0x0c + TagRelativeOID Tag = 0x0d + TagSequence Tag = 0x10 + TagSet Tag = 0x11 + TagNumericString Tag = 0x12 + TagPrintableString Tag = 0x13 + TagT61String Tag = 0x14 + TagVideotexString Tag = 0x15 + TagIA5String Tag = 0x16 + TagUTCTime Tag = 0x17 + TagGeneralizedTime Tag = 0x18 + TagGraphicString Tag = 0x19 + TagVisibleString Tag = 0x1a + TagGeneralString Tag = 0x1b + TagUniversalString Tag = 0x1c + TagCharacterString Tag = 0x1d + TagBMPString Tag = 0x1e + TagBitmask Tag = 0x1f // xxx11111b + + // HighTag indicates the start of a high-tag byte sequence + HighTag Tag = 0x1f // xxx11111b + // HighTagContinueBitmask indicates the high-tag byte sequence should continue + HighTagContinueBitmask Tag = 0x80 // 10000000b + // HighTagValueBitmask obtains the tag value from a high-tag byte sequence byte + HighTagValueBitmask Tag = 0x7f // 01111111b +) + +const ( + // LengthLongFormBitmask is the mask to apply to the length byte to see if a long-form byte sequence is used + LengthLongFormBitmask = 0x80 + // LengthValueBitmask is the mask to apply to the length byte to get the number of bytes in the long-form byte sequence + LengthValueBitmask = 0x7f + + // LengthIndefinite is returned from readLength to indicate an indefinite length + LengthIndefinite = -1 +) + +var tagMap = map[Tag]string{ + TagEOC: "EOC (End-of-Content)", + TagBoolean: "Boolean", + TagInteger: "Integer", + TagBitString: "Bit String", + TagOctetString: "Octet String", + TagNULL: "NULL", + TagObjectIdentifier: "Object Identifier", + TagObjectDescriptor: "Object Descriptor", + TagExternal: "External", + TagRealFloat: "Real (float)", + TagEnumerated: "Enumerated", + TagEmbeddedPDV: "Embedded PDV", + TagUTF8String: "UTF8 String", + TagRelativeOID: "Relative-OID", + TagSequence: "Sequence and Sequence of", + TagSet: "Set and Set OF", + TagNumericString: "Numeric String", + TagPrintableString: "Printable String", + TagT61String: "T61 String", + TagVideotexString: "Videotex String", + TagIA5String: "IA5 String", + TagUTCTime: "UTC Time", + TagGeneralizedTime: "Generalized Time", + TagGraphicString: "Graphic String", + TagVisibleString: "Visible String", + TagGeneralString: "General String", + TagUniversalString: "Universal String", + TagCharacterString: "Character String", + TagBMPString: "BMP String", +} + +type Class uint8 + +const ( + ClassUniversal Class = 0 // 00xxxxxxb + ClassApplication Class = 64 // 01xxxxxxb + ClassContext Class = 128 // 10xxxxxxb + ClassPrivate Class = 192 // 11xxxxxxb + ClassBitmask Class = 192 // 11xxxxxxb +) + +var ClassMap = map[Class]string{ + ClassUniversal: "Universal", + ClassApplication: "Application", + ClassContext: "Context", + ClassPrivate: "Private", +} + +type Type uint8 + +const ( + TypePrimitive Type = 0 // xx0xxxxxb + TypeConstructed Type = 32 // xx1xxxxxb + TypeBitmask Type = 32 // xx1xxxxxb +) + +var TypeMap = map[Type]string{ + TypePrimitive: "Primitive", + TypeConstructed: "Constructed", +} + +var Debug bool = false + +func PrintBytes(out io.Writer, buf []byte, indent string) { + data_lines := make([]string, (len(buf)/30)+1) + num_lines := make([]string, (len(buf)/30)+1) + + for i, b := range buf { + data_lines[i/30] += fmt.Sprintf("%02x ", b) + num_lines[i/30] += fmt.Sprintf("%02d ", (i+1)%100) + } + + for i := 0; i < len(data_lines); i++ { + out.Write([]byte(indent + data_lines[i] + "\n")) + out.Write([]byte(indent + num_lines[i] + "\n\n")) + } +} + +func PrintPacket(p *Packet) { + printPacket(os.Stdout, p, 0, false) +} + +func printPacket(out io.Writer, p *Packet, indent int, printBytes bool) { + indent_str := "" + + for len(indent_str) != indent { + indent_str += " " + } + + class_str := ClassMap[p.ClassType] + + tagtype_str := TypeMap[p.TagType] + + tag_str := fmt.Sprintf("0x%02X", p.Tag) + + if p.ClassType == ClassUniversal { + tag_str = tagMap[p.Tag] + } + + value := fmt.Sprint(p.Value) + description := "" + + if p.Description != "" { + description = p.Description + ": " + } + + fmt.Fprintf(out, "%s%s(%s, %s, %s) Len=%d %q\n", indent_str, description, class_str, tagtype_str, tag_str, p.Data.Len(), value) + + if printBytes { + PrintBytes(out, p.Bytes(), indent_str) + } + + for _, child := range p.Children { + printPacket(out, child, indent+1, printBytes) + } +} + +// ReadPacket reads a single Packet from the reader +func ReadPacket(reader io.Reader) (*Packet, error) { + p, _, err := readPacket(reader) + if err != nil { + return nil, err + } + return p, nil +} + +func DecodeString(data []byte) string { + return string(data) +} + +func ParseInt64(bytes []byte) (ret int64, err error) { + if len(bytes) > 8 { + // We'll overflow an int64 in this case. + err = fmt.Errorf("integer too large") + return + } + for bytesRead := 0; bytesRead < len(bytes); bytesRead++ { + ret <<= 8 + ret |= int64(bytes[bytesRead]) + } + + // Shift up and down in order to sign extend the result. + ret <<= 64 - uint8(len(bytes))*8 + ret >>= 64 - uint8(len(bytes))*8 + return +} + +func encodeInteger(i int64) []byte { + n := int64Length(i) + out := make([]byte, n) + + var j int + for ; n > 0; n-- { + out[j] = (byte(i >> uint((n-1)*8))) + j++ + } + + return out +} + +func int64Length(i int64) (numBytes int) { + numBytes = 1 + + for i > 127 { + numBytes++ + i >>= 8 + } + + for i < -128 { + numBytes++ + i >>= 8 + } + + return +} + +// DecodePacket decodes the given bytes into a single Packet +// If a decode error is encountered, nil is returned. +func DecodePacket(data []byte) *Packet { + p, _, _ := readPacket(bytes.NewBuffer(data)) + + return p +} + +// DecodePacketErr decodes the given bytes into a single Packet +// If a decode error is encountered, nil is returned +func DecodePacketErr(data []byte) (*Packet, error) { + p, _, err := readPacket(bytes.NewBuffer(data)) + if err != nil { + return nil, err + } + return p, nil +} + +// readPacket reads a single Packet from the reader, returning the number of bytes read +func readPacket(reader io.Reader) (*Packet, int, error) { + identifier, length, read, err := readHeader(reader) + if err != nil { + return nil, read, err + } + + p := &Packet{ + Identifier: identifier, + } + + p.Data = new(bytes.Buffer) + p.Children = make([]*Packet, 0, 2) + p.Value = nil + + if p.TagType == TypeConstructed { + // TODO: if universal, ensure tag type is allowed to be constructed + + // Track how much content we've read + contentRead := 0 + for { + if length != LengthIndefinite { + // End if we've read what we've been told to + if contentRead == length { + break + } + // Detect if a packet boundary didn't fall on the expected length + if contentRead > length { + return nil, read, fmt.Errorf("expected to read %d bytes, read %d", length, contentRead) + } + } + + // Read the next packet + child, r, err := readPacket(reader) + if err != nil { + return nil, read, err + } + contentRead += r + read += r + + // Test is this is the EOC marker for our packet + if isEOCPacket(child) { + if length == LengthIndefinite { + break + } + return nil, read, errors.New("eoc child not allowed with definite length") + } + + // Append and continue + p.AppendChild(child) + } + return p, read, nil + } + + if length == LengthIndefinite { + return nil, read, errors.New("indefinite length used with primitive type") + } + + // Read definite-length content + if MaxPacketLengthBytes > 0 && int64(length) > MaxPacketLengthBytes { + return nil, read, fmt.Errorf("length %d greater than maximum %d", length, MaxPacketLengthBytes) + } + content := make([]byte, length, length) + if length > 0 { + _, err := io.ReadFull(reader, content) + if err != nil { + if err == io.EOF { + return nil, read, io.ErrUnexpectedEOF + } + return nil, read, err + } + read += length + } + + if p.ClassType == ClassUniversal { + p.Data.Write(content) + p.ByteValue = content + + switch p.Tag { + case TagEOC: + case TagBoolean: + val, _ := ParseInt64(content) + + p.Value = val != 0 + case TagInteger: + p.Value, _ = ParseInt64(content) + case TagBitString: + case TagOctetString: + // the actual string encoding is not known here + // (e.g. for LDAP content is already an UTF8-encoded + // string). Return the data without further processing + p.Value = DecodeString(content) + case TagNULL: + case TagObjectIdentifier: + case TagObjectDescriptor: + case TagExternal: + case TagRealFloat: + case TagEnumerated: + p.Value, _ = ParseInt64(content) + case TagEmbeddedPDV: + case TagUTF8String: + p.Value = DecodeString(content) + case TagRelativeOID: + case TagSequence: + case TagSet: + case TagNumericString: + case TagPrintableString: + p.Value = DecodeString(content) + case TagT61String: + case TagVideotexString: + case TagIA5String: + case TagUTCTime: + case TagGeneralizedTime: + case TagGraphicString: + case TagVisibleString: + case TagGeneralString: + case TagUniversalString: + case TagCharacterString: + case TagBMPString: + } + } else { + p.Data.Write(content) + } + + return p, read, nil +} + +func (p *Packet) Bytes() []byte { + var out bytes.Buffer + + out.Write(encodeIdentifier(p.Identifier)) + out.Write(encodeLength(p.Data.Len())) + out.Write(p.Data.Bytes()) + + return out.Bytes() +} + +func (p *Packet) AppendChild(child *Packet) { + p.Data.Write(child.Bytes()) + p.Children = append(p.Children, child) +} + +func Encode(ClassType Class, TagType Type, Tag Tag, Value interface{}, Description string) *Packet { + p := new(Packet) + + p.ClassType = ClassType + p.TagType = TagType + p.Tag = Tag + p.Data = new(bytes.Buffer) + + p.Children = make([]*Packet, 0, 2) + + p.Value = Value + p.Description = Description + + if Value != nil { + v := reflect.ValueOf(Value) + + if ClassType == ClassUniversal { + switch Tag { + case TagOctetString: + sv, ok := v.Interface().(string) + + if ok { + p.Data.Write([]byte(sv)) + } + } + } + } + + return p +} + +func NewSequence(Description string) *Packet { + return Encode(ClassUniversal, TypeConstructed, TagSequence, nil, Description) +} + +func NewBoolean(ClassType Class, TagType Type, Tag Tag, Value bool, Description string) *Packet { + intValue := int64(0) + + if Value { + intValue = 1 + } + + p := Encode(ClassType, TagType, Tag, nil, Description) + + p.Value = Value + p.Data.Write(encodeInteger(intValue)) + + return p +} + +func NewInteger(ClassType Class, TagType Type, Tag Tag, Value interface{}, Description string) *Packet { + p := Encode(ClassType, TagType, Tag, nil, Description) + + p.Value = Value + switch v := Value.(type) { + case int: + p.Data.Write(encodeInteger(int64(v))) + case uint: + p.Data.Write(encodeInteger(int64(v))) + case int64: + p.Data.Write(encodeInteger(v)) + case uint64: + // TODO : check range or add encodeUInt... + p.Data.Write(encodeInteger(int64(v))) + case int32: + p.Data.Write(encodeInteger(int64(v))) + case uint32: + p.Data.Write(encodeInteger(int64(v))) + case int16: + p.Data.Write(encodeInteger(int64(v))) + case uint16: + p.Data.Write(encodeInteger(int64(v))) + case int8: + p.Data.Write(encodeInteger(int64(v))) + case uint8: + p.Data.Write(encodeInteger(int64(v))) + default: + // TODO : add support for big.Int ? + panic(fmt.Sprintf("Invalid type %T, expected {u|}int{64|32|16|8}", v)) + } + + return p +} + +func NewString(ClassType Class, TagType Type, Tag Tag, Value, Description string) *Packet { + p := Encode(ClassType, TagType, Tag, nil, Description) + + p.Value = Value + p.Data.Write([]byte(Value)) + + return p +} diff --git a/vendor/gopkg.in/asn1-ber.v1/content_int.go b/vendor/gopkg.in/asn1-ber.v1/content_int.go new file mode 100644 index 0000000000000..1858b74b6d6a6 --- /dev/null +++ b/vendor/gopkg.in/asn1-ber.v1/content_int.go @@ -0,0 +1,25 @@ +package ber + +func encodeUnsignedInteger(i uint64) []byte { + n := uint64Length(i) + out := make([]byte, n) + + var j int + for ; n > 0; n-- { + out[j] = (byte(i >> uint((n-1)*8))) + j++ + } + + return out +} + +func uint64Length(i uint64) (numBytes int) { + numBytes = 1 + + for i > 255 { + numBytes++ + i >>= 8 + } + + return +} diff --git a/vendor/gopkg.in/asn1-ber.v1/header.go b/vendor/gopkg.in/asn1-ber.v1/header.go new file mode 100644 index 0000000000000..71615621cb41f --- /dev/null +++ b/vendor/gopkg.in/asn1-ber.v1/header.go @@ -0,0 +1,35 @@ +package ber + +import ( + "errors" + "fmt" + "io" +) + +func readHeader(reader io.Reader) (identifier Identifier, length int, read int, err error) { + if i, c, err := readIdentifier(reader); err != nil { + return Identifier{}, 0, read, err + } else { + identifier = i + read += c + } + + if l, c, err := readLength(reader); err != nil { + return Identifier{}, 0, read, err + } else { + length = l + read += c + } + + // Validate length type with identifier (x.600, 8.1.3.2.a) + if length == LengthIndefinite && identifier.TagType == TypePrimitive { + return Identifier{}, 0, read, errors.New("indefinite length used with primitive type") + } + + if length < LengthIndefinite { + err = fmt.Errorf("length cannot be less than %d", LengthIndefinite) + return + } + + return identifier, length, read, nil +} diff --git a/vendor/gopkg.in/asn1-ber.v1/identifier.go b/vendor/gopkg.in/asn1-ber.v1/identifier.go new file mode 100644 index 0000000000000..e8c435749a68a --- /dev/null +++ b/vendor/gopkg.in/asn1-ber.v1/identifier.go @@ -0,0 +1,112 @@ +package ber + +import ( + "errors" + "fmt" + "io" +) + +func readIdentifier(reader io.Reader) (Identifier, int, error) { + identifier := Identifier{} + read := 0 + + // identifier byte + b, err := readByte(reader) + if err != nil { + if Debug { + fmt.Printf("error reading identifier byte: %v\n", err) + } + return Identifier{}, read, err + } + read++ + + identifier.ClassType = Class(b) & ClassBitmask + identifier.TagType = Type(b) & TypeBitmask + + if tag := Tag(b) & TagBitmask; tag != HighTag { + // short-form tag + identifier.Tag = tag + return identifier, read, nil + } + + // high-tag-number tag + tagBytes := 0 + for { + b, err := readByte(reader) + if err != nil { + if Debug { + fmt.Printf("error reading high-tag-number tag byte %d: %v\n", tagBytes, err) + } + return Identifier{}, read, err + } + tagBytes++ + read++ + + // Lowest 7 bits get appended to the tag value (x.690, 8.1.2.4.2.b) + identifier.Tag <<= 7 + identifier.Tag |= Tag(b) & HighTagValueBitmask + + // First byte may not be all zeros (x.690, 8.1.2.4.2.c) + if tagBytes == 1 && identifier.Tag == 0 { + return Identifier{}, read, errors.New("invalid first high-tag-number tag byte") + } + // Overflow of int64 + // TODO: support big int tags? + if tagBytes > 9 { + return Identifier{}, read, errors.New("high-tag-number tag overflow") + } + + // Top bit of 0 means this is the last byte in the high-tag-number tag (x.690, 8.1.2.4.2.a) + if Tag(b)&HighTagContinueBitmask == 0 { + break + } + } + + return identifier, read, nil +} + +func encodeIdentifier(identifier Identifier) []byte { + b := []byte{0x0} + b[0] |= byte(identifier.ClassType) + b[0] |= byte(identifier.TagType) + + if identifier.Tag < HighTag { + // Short-form + b[0] |= byte(identifier.Tag) + } else { + // high-tag-number + b[0] |= byte(HighTag) + + tag := identifier.Tag + + b = append(b, encodeHighTag(tag)...) + } + return b +} + +func encodeHighTag(tag Tag) []byte { + // set cap=4 to hopefully avoid additional allocations + b := make([]byte, 0, 4) + for tag != 0 { + // t := last 7 bits of tag (HighTagValueBitmask = 0x7F) + t := tag & HighTagValueBitmask + + // right shift tag 7 to remove what was just pulled off + tag >>= 7 + + // if b already has entries this entry needs a continuation bit (0x80) + if len(b) != 0 { + t |= HighTagContinueBitmask + } + + b = append(b, byte(t)) + } + // reverse + // since bits were pulled off 'tag' small to high the byte slice is in reverse order. + // example: tag = 0xFF results in {0x7F, 0x01 + 0x80 (continuation bit)} + // this needs to be reversed into 0x81 0x7F + for i, j := 0, len(b)-1; i < len(b)/2; i++ { + b[i], b[j-i] = b[j-i], b[i] + } + return b +} diff --git a/vendor/gopkg.in/asn1-ber.v1/length.go b/vendor/gopkg.in/asn1-ber.v1/length.go new file mode 100644 index 0000000000000..750e8f44360ab --- /dev/null +++ b/vendor/gopkg.in/asn1-ber.v1/length.go @@ -0,0 +1,81 @@ +package ber + +import ( + "errors" + "fmt" + "io" +) + +func readLength(reader io.Reader) (length int, read int, err error) { + // length byte + b, err := readByte(reader) + if err != nil { + if Debug { + fmt.Printf("error reading length byte: %v\n", err) + } + return 0, 0, err + } + read++ + + switch { + case b == 0xFF: + // Invalid 0xFF (x.600, 8.1.3.5.c) + return 0, read, errors.New("invalid length byte 0xff") + + case b == LengthLongFormBitmask: + // Indefinite form, we have to decode packets until we encounter an EOC packet (x.600, 8.1.3.6) + length = LengthIndefinite + + case b&LengthLongFormBitmask == 0: + // Short definite form, extract the length from the bottom 7 bits (x.600, 8.1.3.4) + length = int(b) & LengthValueBitmask + + case b&LengthLongFormBitmask != 0: + // Long definite form, extract the number of length bytes to follow from the bottom 7 bits (x.600, 8.1.3.5.b) + lengthBytes := int(b) & LengthValueBitmask + // Protect against overflow + // TODO: support big int length? + if lengthBytes > 8 { + return 0, read, errors.New("long-form length overflow") + } + + // Accumulate into a 64-bit variable + var length64 int64 + for i := 0; i < lengthBytes; i++ { + b, err = readByte(reader) + if err != nil { + if Debug { + fmt.Printf("error reading long-form length byte %d: %v\n", i, err) + } + return 0, read, err + } + read++ + + // x.600, 8.1.3.5 + length64 <<= 8 + length64 |= int64(b) + } + + // Cast to a platform-specific integer + length = int(length64) + // Ensure we didn't overflow + if int64(length) != length64 { + return 0, read, errors.New("long-form length overflow") + } + + default: + return 0, read, errors.New("invalid length byte") + } + + return length, read, nil +} + +func encodeLength(length int) []byte { + length_bytes := encodeUnsignedInteger(uint64(length)) + if length > 127 || len(length_bytes) > 1 { + longFormBytes := []byte{(LengthLongFormBitmask | byte(len(length_bytes)))} + longFormBytes = append(longFormBytes, length_bytes...) + length_bytes = longFormBytes + } + return length_bytes +} diff --git a/vendor/gopkg.in/asn1-ber.v1/util.go b/vendor/gopkg.in/asn1-ber.v1/util.go new file mode 100644 index 0000000000000..3e56b66c8cebe --- /dev/null +++ b/vendor/gopkg.in/asn1-ber.v1/util.go @@ -0,0 +1,24 @@ +package ber + +import "io" + +func readByte(reader io.Reader) (byte, error) { + bytes := make([]byte, 1, 1) + _, err := io.ReadFull(reader, bytes) + if err != nil { + if err == io.EOF { + return 0, io.ErrUnexpectedEOF + } + return 0, err + } + return bytes[0], nil +} + +func isEOCPacket(p *Packet) bool { + return p != nil && + p.Tag == TagEOC && + p.ClassType == ClassUniversal && + p.TagType == TypePrimitive && + len(p.ByteValue) == 0 && + len(p.Children) == 0 +} diff --git a/vendor/gopkg.in/fsnotify.v1/BUILD b/vendor/gopkg.in/fsnotify.v1/BUILD deleted file mode 100644 index 75a959fb06423..0000000000000 --- a/vendor/gopkg.in/fsnotify.v1/BUILD +++ /dev/null @@ -1,59 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "fen.go", - "fsnotify.go", - "inotify.go", - "inotify_poller.go", - "kqueue.go", - "open_mode_bsd.go", - "open_mode_darwin.go", - "windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/gopkg.in/fsnotify.v1", - importpath = "gopkg.in/fsnotify.v1", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gopkg.in/gcfg.v1/BUILD b/vendor/gopkg.in/gcfg.v1/BUILD deleted file mode 100644 index 272e1a28d38d5..0000000000000 --- a/vendor/gopkg.in/gcfg.v1/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "errors.go", - "go1_0.go", - "go1_2.go", - "read.go", - "set.go", - ], - importmap = "k8s.io/kubernetes/vendor/gopkg.in/gcfg.v1", - importpath = "gopkg.in/gcfg.v1", - visibility = ["//visibility:public"], - deps = [ - "//vendor/gopkg.in/gcfg.v1/scanner:go_default_library", - "//vendor/gopkg.in/gcfg.v1/token:go_default_library", - "//vendor/gopkg.in/gcfg.v1/types:go_default_library", - "//vendor/gopkg.in/warnings.v0:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/gopkg.in/gcfg.v1/scanner:all-srcs", - "//vendor/gopkg.in/gcfg.v1/token:all-srcs", - "//vendor/gopkg.in/gcfg.v1/types:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gopkg.in/gcfg.v1/scanner/BUILD b/vendor/gopkg.in/gcfg.v1/scanner/BUILD deleted file mode 100644 index 24f9b926fa9c1..0000000000000 --- a/vendor/gopkg.in/gcfg.v1/scanner/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "errors.go", - "scanner.go", - ], - importmap = "k8s.io/kubernetes/vendor/gopkg.in/gcfg.v1/scanner", - importpath = "gopkg.in/gcfg.v1/scanner", - visibility = ["//visibility:public"], - deps = ["//vendor/gopkg.in/gcfg.v1/token:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gopkg.in/gcfg.v1/token/BUILD b/vendor/gopkg.in/gcfg.v1/token/BUILD deleted file mode 100644 index f016416c38cad..0000000000000 --- a/vendor/gopkg.in/gcfg.v1/token/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "position.go", - "serialize.go", - "token.go", - ], - importmap = "k8s.io/kubernetes/vendor/gopkg.in/gcfg.v1/token", - importpath = "gopkg.in/gcfg.v1/token", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gopkg.in/gcfg.v1/types/BUILD b/vendor/gopkg.in/gcfg.v1/types/BUILD deleted file mode 100644 index 63a692c2ea0fc..0000000000000 --- a/vendor/gopkg.in/gcfg.v1/types/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "bool.go", - "doc.go", - "enum.go", - "int.go", - "scan.go", - ], - importmap = "k8s.io/kubernetes/vendor/gopkg.in/gcfg.v1/types", - importpath = "gopkg.in/gcfg.v1/types", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gopkg.in/inf.v0/BUILD b/vendor/gopkg.in/inf.v0/BUILD deleted file mode 100644 index bfe9e500ee1ce..0000000000000 --- a/vendor/gopkg.in/inf.v0/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "dec.go", - "rounder.go", - ], - importmap = "k8s.io/kubernetes/vendor/gopkg.in/inf.v0", - importpath = "gopkg.in/inf.v0", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gopkg.in/ldap.v2/.gitignore b/vendor/gopkg.in/ldap.v2/.gitignore new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/vendor/gopkg.in/ldap.v2/.travis.yml b/vendor/gopkg.in/ldap.v2/.travis.yml new file mode 100644 index 0000000000000..9782c9bac8bbe --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/.travis.yml @@ -0,0 +1,31 @@ +language: go +env: + global: + - VET_VERSIONS="1.6 1.7 1.8 1.9 tip" + - LINT_VERSIONS="1.6 1.7 1.8 1.9 tip" +go: + - 1.2 + - 1.3 + - 1.4 + - 1.5 + - 1.6 + - 1.7 + - 1.8 + - 1.9 + - tip +matrix: + fast_finish: true + allow_failures: + - go: tip +go_import_path: gopkg.in/ldap.v2 +install: + - go get gopkg.in/asn1-ber.v1 + - go get gopkg.in/ldap.v2 + - go get code.google.com/p/go.tools/cmd/cover || go get golang.org/x/tools/cmd/cover + - go get github.com/golang/lint/golint || true + - go build -v ./... +script: + - make test + - make fmt + - if [[ "$VET_VERSIONS" == *"$TRAVIS_GO_VERSION"* ]]; then make vet; fi + - if [[ "$LINT_VERSIONS" == *"$TRAVIS_GO_VERSION"* ]]; then make lint; fi diff --git a/vendor/gopkg.in/ldap.v2/LICENSE b/vendor/gopkg.in/ldap.v2/LICENSE new file mode 100644 index 0000000000000..6c0ed4b387271 --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2011-2015 Michael Mitton (mmitton@gmail.com) +Portions copyright (c) 2015-2016 go-ldap Authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/gopkg.in/ldap.v2/Makefile b/vendor/gopkg.in/ldap.v2/Makefile new file mode 100644 index 0000000000000..a9d351c764044 --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/Makefile @@ -0,0 +1,52 @@ +.PHONY: default install build test quicktest fmt vet lint + +GO_VERSION := $(shell go version | cut -d' ' -f3 | cut -d. -f2) + +# Only use the `-race` flag on newer versions of Go +IS_OLD_GO := $(shell test $(GO_VERSION) -le 2 && echo true) +ifeq ($(IS_OLD_GO),true) + RACE_FLAG := +else + RACE_FLAG := -race -cpu 1,2,4 +endif + +default: fmt vet lint build quicktest + +install: + go get -t -v ./... + +build: + go build -v ./... + +test: + go test -v $(RACE_FLAG) -cover ./... + +quicktest: + go test ./... + +# Capture output and force failure when there is non-empty output +fmt: + @echo gofmt -l . + @OUTPUT=`gofmt -l . 2>&1`; \ + if [ "$$OUTPUT" ]; then \ + echo "gofmt must be run on the following files:"; \ + echo "$$OUTPUT"; \ + exit 1; \ + fi + +# Only run on go1.5+ +vet: + go tool vet -atomic -bool -copylocks -nilfunc -printf -shadow -rangeloops -unreachable -unsafeptr -unusedresult . + +# https://github.com/golang/lint +# go get github.com/golang/lint/golint +# Capture output and force failure when there is non-empty output +# Only run on go1.5+ +lint: + @echo golint ./... + @OUTPUT=`golint ./... 2>&1`; \ + if [ "$$OUTPUT" ]; then \ + echo "golint errors:"; \ + echo "$$OUTPUT"; \ + exit 1; \ + fi diff --git a/vendor/gopkg.in/ldap.v2/README.md b/vendor/gopkg.in/ldap.v2/README.md new file mode 100644 index 0000000000000..a26ed2d82b3be --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/README.md @@ -0,0 +1,53 @@ +[![GoDoc](https://godoc.org/gopkg.in/ldap.v2?status.svg)](https://godoc.org/gopkg.in/ldap.v2) +[![Build Status](https://travis-ci.org/go-ldap/ldap.svg)](https://travis-ci.org/go-ldap/ldap) + +# Basic LDAP v3 functionality for the GO programming language. + +## Install + +For the latest version use: + + go get gopkg.in/ldap.v2 + +Import the latest version with: + + import "gopkg.in/ldap.v2" + +## Required Libraries: + + - gopkg.in/asn1-ber.v1 + +## Features: + + - Connecting to LDAP server (non-TLS, TLS, STARTTLS) + - Binding to LDAP server + - Searching for entries + - Filter Compile / Decompile + - Paging Search Results + - Modify Requests / Responses + - Add Requests / Responses + - Delete Requests / Responses + +## Examples: + + - search + - modify + +## Contributing: + +Bug reports and pull requests are welcome! + +Before submitting a pull request, please make sure tests and verification scripts pass: +``` +make all +``` + +To set up a pre-push hook to run the tests and verify scripts before pushing: +``` +ln -s ../../.githooks/pre-push .git/hooks/pre-push +``` + +--- +The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/) +The design is licensed under the Creative Commons 3.0 Attributions license. +Read this article for more details: http://blog.golang.org/gopher diff --git a/vendor/gopkg.in/ldap.v2/add.go b/vendor/gopkg.in/ldap.v2/add.go new file mode 100644 index 0000000000000..0e5f6cdba1168 --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/add.go @@ -0,0 +1,113 @@ +// +// https://tools.ietf.org/html/rfc4511 +// +// AddRequest ::= [APPLICATION 8] SEQUENCE { +// entry LDAPDN, +// attributes AttributeList } +// +// AttributeList ::= SEQUENCE OF attribute Attribute + +package ldap + +import ( + "errors" + "log" + + "gopkg.in/asn1-ber.v1" +) + +// Attribute represents an LDAP attribute +type Attribute struct { + // Type is the name of the LDAP attribute + Type string + // Vals are the LDAP attribute values + Vals []string +} + +func (a *Attribute) encode() *ber.Packet { + seq := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Attribute") + seq.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, a.Type, "Type")) + set := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSet, nil, "AttributeValue") + for _, value := range a.Vals { + set.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, value, "Vals")) + } + seq.AppendChild(set) + return seq +} + +// AddRequest represents an LDAP AddRequest operation +type AddRequest struct { + // DN identifies the entry being added + DN string + // Attributes list the attributes of the new entry + Attributes []Attribute +} + +func (a AddRequest) encode() *ber.Packet { + request := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationAddRequest, nil, "Add Request") + request.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, a.DN, "DN")) + attributes := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Attributes") + for _, attribute := range a.Attributes { + attributes.AppendChild(attribute.encode()) + } + request.AppendChild(attributes) + return request +} + +// Attribute adds an attribute with the given type and values +func (a *AddRequest) Attribute(attrType string, attrVals []string) { + a.Attributes = append(a.Attributes, Attribute{Type: attrType, Vals: attrVals}) +} + +// NewAddRequest returns an AddRequest for the given DN, with no attributes +func NewAddRequest(dn string) *AddRequest { + return &AddRequest{ + DN: dn, + } + +} + +// Add performs the given AddRequest +func (l *Conn) Add(addRequest *AddRequest) error { + packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") + packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) + packet.AppendChild(addRequest.encode()) + + l.Debug.PrintPacket(packet) + + msgCtx, err := l.sendMessage(packet) + if err != nil { + return err + } + defer l.finishMessage(msgCtx) + + l.Debug.Printf("%d: waiting for response", msgCtx.id) + packetResponse, ok := <-msgCtx.responses + if !ok { + return NewError(ErrorNetwork, errors.New("ldap: response channel closed")) + } + packet, err = packetResponse.ReadPacket() + l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + if err != nil { + return err + } + + if l.Debug { + if err := addLDAPDescriptions(packet); err != nil { + return err + } + ber.PrintPacket(packet) + } + + if packet.Children[1].Tag == ApplicationAddResponse { + resultCode, resultDescription := getLDAPResultCode(packet) + if resultCode != 0 { + return NewError(resultCode, errors.New(resultDescription)) + } + } else { + log.Printf("Unexpected Response: %d", packet.Children[1].Tag) + } + + l.Debug.Printf("%d: returning", msgCtx.id) + return nil +} diff --git a/vendor/gopkg.in/ldap.v2/atomic_value.go b/vendor/gopkg.in/ldap.v2/atomic_value.go new file mode 100644 index 0000000000000..bccf7573e0e3d --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/atomic_value.go @@ -0,0 +1,13 @@ +// +build go1.4 + +package ldap + +import ( + "sync/atomic" +) + +// For compilers that support it, we just use the underlying sync/atomic.Value +// type. +type atomicValue struct { + atomic.Value +} diff --git a/vendor/gopkg.in/ldap.v2/atomic_value_go13.go b/vendor/gopkg.in/ldap.v2/atomic_value_go13.go new file mode 100644 index 0000000000000..04920bb2600ca --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/atomic_value_go13.go @@ -0,0 +1,28 @@ +// +build !go1.4 + +package ldap + +import ( + "sync" +) + +// This is a helper type that emulates the use of the "sync/atomic.Value" +// struct that's available in Go 1.4 and up. +type atomicValue struct { + value interface{} + lock sync.RWMutex +} + +func (av *atomicValue) Store(val interface{}) { + av.lock.Lock() + av.value = val + av.lock.Unlock() +} + +func (av *atomicValue) Load() interface{} { + av.lock.RLock() + ret := av.value + av.lock.RUnlock() + + return ret +} diff --git a/vendor/gopkg.in/ldap.v2/bind.go b/vendor/gopkg.in/ldap.v2/bind.go new file mode 100644 index 0000000000000..26b3cc7270db6 --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/bind.go @@ -0,0 +1,143 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ldap + +import ( + "errors" + + "gopkg.in/asn1-ber.v1" +) + +// SimpleBindRequest represents a username/password bind operation +type SimpleBindRequest struct { + // Username is the name of the Directory object that the client wishes to bind as + Username string + // Password is the credentials to bind with + Password string + // Controls are optional controls to send with the bind request + Controls []Control +} + +// SimpleBindResult contains the response from the server +type SimpleBindResult struct { + Controls []Control +} + +// NewSimpleBindRequest returns a bind request +func NewSimpleBindRequest(username string, password string, controls []Control) *SimpleBindRequest { + return &SimpleBindRequest{ + Username: username, + Password: password, + Controls: controls, + } +} + +func (bindRequest *SimpleBindRequest) encode() *ber.Packet { + request := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationBindRequest, nil, "Bind Request") + request.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, 3, "Version")) + request.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, bindRequest.Username, "User Name")) + request.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 0, bindRequest.Password, "Password")) + + request.AppendChild(encodeControls(bindRequest.Controls)) + + return request +} + +// SimpleBind performs the simple bind operation defined in the given request +func (l *Conn) SimpleBind(simpleBindRequest *SimpleBindRequest) (*SimpleBindResult, error) { + packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") + packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) + encodedBindRequest := simpleBindRequest.encode() + packet.AppendChild(encodedBindRequest) + + if l.Debug { + ber.PrintPacket(packet) + } + + msgCtx, err := l.sendMessage(packet) + if err != nil { + return nil, err + } + defer l.finishMessage(msgCtx) + + packetResponse, ok := <-msgCtx.responses + if !ok { + return nil, NewError(ErrorNetwork, errors.New("ldap: response channel closed")) + } + packet, err = packetResponse.ReadPacket() + l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + if err != nil { + return nil, err + } + + if l.Debug { + if err := addLDAPDescriptions(packet); err != nil { + return nil, err + } + ber.PrintPacket(packet) + } + + result := &SimpleBindResult{ + Controls: make([]Control, 0), + } + + if len(packet.Children) == 3 { + for _, child := range packet.Children[2].Children { + result.Controls = append(result.Controls, DecodeControl(child)) + } + } + + resultCode, resultDescription := getLDAPResultCode(packet) + if resultCode != 0 { + return result, NewError(resultCode, errors.New(resultDescription)) + } + + return result, nil +} + +// Bind performs a bind with the given username and password +func (l *Conn) Bind(username, password string) error { + packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") + packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) + bindRequest := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationBindRequest, nil, "Bind Request") + bindRequest.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, 3, "Version")) + bindRequest.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, username, "User Name")) + bindRequest.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 0, password, "Password")) + packet.AppendChild(bindRequest) + + if l.Debug { + ber.PrintPacket(packet) + } + + msgCtx, err := l.sendMessage(packet) + if err != nil { + return err + } + defer l.finishMessage(msgCtx) + + packetResponse, ok := <-msgCtx.responses + if !ok { + return NewError(ErrorNetwork, errors.New("ldap: response channel closed")) + } + packet, err = packetResponse.ReadPacket() + l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + if err != nil { + return err + } + + if l.Debug { + if err := addLDAPDescriptions(packet); err != nil { + return err + } + ber.PrintPacket(packet) + } + + resultCode, resultDescription := getLDAPResultCode(packet) + if resultCode != 0 { + return NewError(resultCode, errors.New(resultDescription)) + } + + return nil +} diff --git a/vendor/gopkg.in/ldap.v2/client.go b/vendor/gopkg.in/ldap.v2/client.go new file mode 100644 index 0000000000000..055b27b5fc4d3 --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/client.go @@ -0,0 +1,27 @@ +package ldap + +import ( + "crypto/tls" + "time" +) + +// Client knows how to interact with an LDAP server +type Client interface { + Start() + StartTLS(config *tls.Config) error + Close() + SetTimeout(time.Duration) + + Bind(username, password string) error + SimpleBind(simpleBindRequest *SimpleBindRequest) (*SimpleBindResult, error) + + Add(addRequest *AddRequest) error + Del(delRequest *DelRequest) error + Modify(modifyRequest *ModifyRequest) error + + Compare(dn, attribute, value string) (bool, error) + PasswordModify(passwordModifyRequest *PasswordModifyRequest) (*PasswordModifyResult, error) + + Search(searchRequest *SearchRequest) (*SearchResult, error) + SearchWithPaging(searchRequest *SearchRequest, pagingSize uint32) (*SearchResult, error) +} diff --git a/vendor/gopkg.in/ldap.v2/compare.go b/vendor/gopkg.in/ldap.v2/compare.go new file mode 100644 index 0000000000000..cc6d2af5e5d7b --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/compare.go @@ -0,0 +1,85 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// +// File contains Compare functionality +// +// https://tools.ietf.org/html/rfc4511 +// +// CompareRequest ::= [APPLICATION 14] SEQUENCE { +// entry LDAPDN, +// ava AttributeValueAssertion } +// +// AttributeValueAssertion ::= SEQUENCE { +// attributeDesc AttributeDescription, +// assertionValue AssertionValue } +// +// AttributeDescription ::= LDAPString +// -- Constrained to +// -- [RFC4512] +// +// AttributeValue ::= OCTET STRING +// + +package ldap + +import ( + "errors" + "fmt" + + "gopkg.in/asn1-ber.v1" +) + +// Compare checks to see if the attribute of the dn matches value. Returns true if it does otherwise +// false with any error that occurs if any. +func (l *Conn) Compare(dn, attribute, value string) (bool, error) { + packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") + packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) + + request := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationCompareRequest, nil, "Compare Request") + request.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, dn, "DN")) + + ava := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "AttributeValueAssertion") + ava.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, attribute, "AttributeDesc")) + ava.AppendChild(ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagOctetString, value, "AssertionValue")) + request.AppendChild(ava) + packet.AppendChild(request) + + l.Debug.PrintPacket(packet) + + msgCtx, err := l.sendMessage(packet) + if err != nil { + return false, err + } + defer l.finishMessage(msgCtx) + + l.Debug.Printf("%d: waiting for response", msgCtx.id) + packetResponse, ok := <-msgCtx.responses + if !ok { + return false, NewError(ErrorNetwork, errors.New("ldap: response channel closed")) + } + packet, err = packetResponse.ReadPacket() + l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + if err != nil { + return false, err + } + + if l.Debug { + if err := addLDAPDescriptions(packet); err != nil { + return false, err + } + ber.PrintPacket(packet) + } + + if packet.Children[1].Tag == ApplicationCompareResponse { + resultCode, resultDescription := getLDAPResultCode(packet) + if resultCode == LDAPResultCompareTrue { + return true, nil + } else if resultCode == LDAPResultCompareFalse { + return false, nil + } else { + return false, NewError(resultCode, errors.New(resultDescription)) + } + } + return false, fmt.Errorf("Unexpected Response: %d", packet.Children[1].Tag) +} diff --git a/vendor/gopkg.in/ldap.v2/conn.go b/vendor/gopkg.in/ldap.v2/conn.go new file mode 100644 index 0000000000000..eb28eb4726aa5 --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/conn.go @@ -0,0 +1,470 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ldap + +import ( + "crypto/tls" + "errors" + "fmt" + "log" + "net" + "sync" + "sync/atomic" + "time" + + "gopkg.in/asn1-ber.v1" +) + +const ( + // MessageQuit causes the processMessages loop to exit + MessageQuit = 0 + // MessageRequest sends a request to the server + MessageRequest = 1 + // MessageResponse receives a response from the server + MessageResponse = 2 + // MessageFinish indicates the client considers a particular message ID to be finished + MessageFinish = 3 + // MessageTimeout indicates the client-specified timeout for a particular message ID has been reached + MessageTimeout = 4 +) + +// PacketResponse contains the packet or error encountered reading a response +type PacketResponse struct { + // Packet is the packet read from the server + Packet *ber.Packet + // Error is an error encountered while reading + Error error +} + +// ReadPacket returns the packet or an error +func (pr *PacketResponse) ReadPacket() (*ber.Packet, error) { + if (pr == nil) || (pr.Packet == nil && pr.Error == nil) { + return nil, NewError(ErrorNetwork, errors.New("ldap: could not retrieve response")) + } + return pr.Packet, pr.Error +} + +type messageContext struct { + id int64 + // close(done) should only be called from finishMessage() + done chan struct{} + // close(responses) should only be called from processMessages(), and only sent to from sendResponse() + responses chan *PacketResponse +} + +// sendResponse should only be called within the processMessages() loop which +// is also responsible for closing the responses channel. +func (msgCtx *messageContext) sendResponse(packet *PacketResponse) { + select { + case msgCtx.responses <- packet: + // Successfully sent packet to message handler. + case <-msgCtx.done: + // The request handler is done and will not receive more + // packets. + } +} + +type messagePacket struct { + Op int + MessageID int64 + Packet *ber.Packet + Context *messageContext +} + +type sendMessageFlags uint + +const ( + startTLS sendMessageFlags = 1 << iota +) + +// Conn represents an LDAP Connection +type Conn struct { + conn net.Conn + isTLS bool + closing uint32 + closeErr atomicValue + isStartingTLS bool + Debug debugging + chanConfirm chan struct{} + messageContexts map[int64]*messageContext + chanMessage chan *messagePacket + chanMessageID chan int64 + wgClose sync.WaitGroup + outstandingRequests uint + messageMutex sync.Mutex + requestTimeout int64 +} + +var _ Client = &Conn{} + +// DefaultTimeout is a package-level variable that sets the timeout value +// used for the Dial and DialTLS methods. +// +// WARNING: since this is a package-level variable, setting this value from +// multiple places will probably result in undesired behaviour. +var DefaultTimeout = 60 * time.Second + +// Dial connects to the given address on the given network using net.Dial +// and then returns a new Conn for the connection. +func Dial(network, addr string) (*Conn, error) { + c, err := net.DialTimeout(network, addr, DefaultTimeout) + if err != nil { + return nil, NewError(ErrorNetwork, err) + } + conn := NewConn(c, false) + conn.Start() + return conn, nil +} + +// DialTLS connects to the given address on the given network using tls.Dial +// and then returns a new Conn for the connection. +func DialTLS(network, addr string, config *tls.Config) (*Conn, error) { + dc, err := net.DialTimeout(network, addr, DefaultTimeout) + if err != nil { + return nil, NewError(ErrorNetwork, err) + } + c := tls.Client(dc, config) + err = c.Handshake() + if err != nil { + // Handshake error, close the established connection before we return an error + dc.Close() + return nil, NewError(ErrorNetwork, err) + } + conn := NewConn(c, true) + conn.Start() + return conn, nil +} + +// NewConn returns a new Conn using conn for network I/O. +func NewConn(conn net.Conn, isTLS bool) *Conn { + return &Conn{ + conn: conn, + chanConfirm: make(chan struct{}), + chanMessageID: make(chan int64), + chanMessage: make(chan *messagePacket, 10), + messageContexts: map[int64]*messageContext{}, + requestTimeout: 0, + isTLS: isTLS, + } +} + +// Start initializes goroutines to read responses and process messages +func (l *Conn) Start() { + go l.reader() + go l.processMessages() + l.wgClose.Add(1) +} + +// isClosing returns whether or not we're currently closing. +func (l *Conn) isClosing() bool { + return atomic.LoadUint32(&l.closing) == 1 +} + +// setClosing sets the closing value to true +func (l *Conn) setClosing() bool { + return atomic.CompareAndSwapUint32(&l.closing, 0, 1) +} + +// Close closes the connection. +func (l *Conn) Close() { + l.messageMutex.Lock() + defer l.messageMutex.Unlock() + + if l.setClosing() { + l.Debug.Printf("Sending quit message and waiting for confirmation") + l.chanMessage <- &messagePacket{Op: MessageQuit} + <-l.chanConfirm + close(l.chanMessage) + + l.Debug.Printf("Closing network connection") + if err := l.conn.Close(); err != nil { + log.Println(err) + } + + l.wgClose.Done() + } + l.wgClose.Wait() +} + +// SetTimeout sets the time after a request is sent that a MessageTimeout triggers +func (l *Conn) SetTimeout(timeout time.Duration) { + if timeout > 0 { + atomic.StoreInt64(&l.requestTimeout, int64(timeout)) + } +} + +// Returns the next available messageID +func (l *Conn) nextMessageID() int64 { + if messageID, ok := <-l.chanMessageID; ok { + return messageID + } + return 0 +} + +// StartTLS sends the command to start a TLS session and then creates a new TLS Client +func (l *Conn) StartTLS(config *tls.Config) error { + if l.isTLS { + return NewError(ErrorNetwork, errors.New("ldap: already encrypted")) + } + + packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") + packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) + request := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationExtendedRequest, nil, "Start TLS") + request.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 0, "1.3.6.1.4.1.1466.20037", "TLS Extended Command")) + packet.AppendChild(request) + l.Debug.PrintPacket(packet) + + msgCtx, err := l.sendMessageWithFlags(packet, startTLS) + if err != nil { + return err + } + defer l.finishMessage(msgCtx) + + l.Debug.Printf("%d: waiting for response", msgCtx.id) + + packetResponse, ok := <-msgCtx.responses + if !ok { + return NewError(ErrorNetwork, errors.New("ldap: response channel closed")) + } + packet, err = packetResponse.ReadPacket() + l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + if err != nil { + return err + } + + if l.Debug { + if err := addLDAPDescriptions(packet); err != nil { + l.Close() + return err + } + ber.PrintPacket(packet) + } + + if resultCode, message := getLDAPResultCode(packet); resultCode == LDAPResultSuccess { + conn := tls.Client(l.conn, config) + + if err := conn.Handshake(); err != nil { + l.Close() + return NewError(ErrorNetwork, fmt.Errorf("TLS handshake failed (%v)", err)) + } + + l.isTLS = true + l.conn = conn + } else { + return NewError(resultCode, fmt.Errorf("ldap: cannot StartTLS (%s)", message)) + } + go l.reader() + + return nil +} + +func (l *Conn) sendMessage(packet *ber.Packet) (*messageContext, error) { + return l.sendMessageWithFlags(packet, 0) +} + +func (l *Conn) sendMessageWithFlags(packet *ber.Packet, flags sendMessageFlags) (*messageContext, error) { + if l.isClosing() { + return nil, NewError(ErrorNetwork, errors.New("ldap: connection closed")) + } + l.messageMutex.Lock() + l.Debug.Printf("flags&startTLS = %d", flags&startTLS) + if l.isStartingTLS { + l.messageMutex.Unlock() + return nil, NewError(ErrorNetwork, errors.New("ldap: connection is in startls phase")) + } + if flags&startTLS != 0 { + if l.outstandingRequests != 0 { + l.messageMutex.Unlock() + return nil, NewError(ErrorNetwork, errors.New("ldap: cannot StartTLS with outstanding requests")) + } + l.isStartingTLS = true + } + l.outstandingRequests++ + + l.messageMutex.Unlock() + + responses := make(chan *PacketResponse) + messageID := packet.Children[0].Value.(int64) + message := &messagePacket{ + Op: MessageRequest, + MessageID: messageID, + Packet: packet, + Context: &messageContext{ + id: messageID, + done: make(chan struct{}), + responses: responses, + }, + } + l.sendProcessMessage(message) + return message.Context, nil +} + +func (l *Conn) finishMessage(msgCtx *messageContext) { + close(msgCtx.done) + + if l.isClosing() { + return + } + + l.messageMutex.Lock() + l.outstandingRequests-- + if l.isStartingTLS { + l.isStartingTLS = false + } + l.messageMutex.Unlock() + + message := &messagePacket{ + Op: MessageFinish, + MessageID: msgCtx.id, + } + l.sendProcessMessage(message) +} + +func (l *Conn) sendProcessMessage(message *messagePacket) bool { + l.messageMutex.Lock() + defer l.messageMutex.Unlock() + if l.isClosing() { + return false + } + l.chanMessage <- message + return true +} + +func (l *Conn) processMessages() { + defer func() { + if err := recover(); err != nil { + log.Printf("ldap: recovered panic in processMessages: %v", err) + } + for messageID, msgCtx := range l.messageContexts { + // If we are closing due to an error, inform anyone who + // is waiting about the error. + if l.isClosing() && l.closeErr.Load() != nil { + msgCtx.sendResponse(&PacketResponse{Error: l.closeErr.Load().(error)}) + } + l.Debug.Printf("Closing channel for MessageID %d", messageID) + close(msgCtx.responses) + delete(l.messageContexts, messageID) + } + close(l.chanMessageID) + close(l.chanConfirm) + }() + + var messageID int64 = 1 + for { + select { + case l.chanMessageID <- messageID: + messageID++ + case message := <-l.chanMessage: + switch message.Op { + case MessageQuit: + l.Debug.Printf("Shutting down - quit message received") + return + case MessageRequest: + // Add to message list and write to network + l.Debug.Printf("Sending message %d", message.MessageID) + + buf := message.Packet.Bytes() + _, err := l.conn.Write(buf) + if err != nil { + l.Debug.Printf("Error Sending Message: %s", err.Error()) + message.Context.sendResponse(&PacketResponse{Error: fmt.Errorf("unable to send request: %s", err)}) + close(message.Context.responses) + break + } + + // Only add to messageContexts if we were able to + // successfully write the message. + l.messageContexts[message.MessageID] = message.Context + + // Add timeout if defined + requestTimeout := time.Duration(atomic.LoadInt64(&l.requestTimeout)) + if requestTimeout > 0 { + go func() { + defer func() { + if err := recover(); err != nil { + log.Printf("ldap: recovered panic in RequestTimeout: %v", err) + } + }() + time.Sleep(requestTimeout) + timeoutMessage := &messagePacket{ + Op: MessageTimeout, + MessageID: message.MessageID, + } + l.sendProcessMessage(timeoutMessage) + }() + } + case MessageResponse: + l.Debug.Printf("Receiving message %d", message.MessageID) + if msgCtx, ok := l.messageContexts[message.MessageID]; ok { + msgCtx.sendResponse(&PacketResponse{message.Packet, nil}) + } else { + log.Printf("Received unexpected message %d, %v", message.MessageID, l.isClosing()) + ber.PrintPacket(message.Packet) + } + case MessageTimeout: + // Handle the timeout by closing the channel + // All reads will return immediately + if msgCtx, ok := l.messageContexts[message.MessageID]; ok { + l.Debug.Printf("Receiving message timeout for %d", message.MessageID) + msgCtx.sendResponse(&PacketResponse{message.Packet, errors.New("ldap: connection timed out")}) + delete(l.messageContexts, message.MessageID) + close(msgCtx.responses) + } + case MessageFinish: + l.Debug.Printf("Finished message %d", message.MessageID) + if msgCtx, ok := l.messageContexts[message.MessageID]; ok { + delete(l.messageContexts, message.MessageID) + close(msgCtx.responses) + } + } + } + } +} + +func (l *Conn) reader() { + cleanstop := false + defer func() { + if err := recover(); err != nil { + log.Printf("ldap: recovered panic in reader: %v", err) + } + if !cleanstop { + l.Close() + } + }() + + for { + if cleanstop { + l.Debug.Printf("reader clean stopping (without closing the connection)") + return + } + packet, err := ber.ReadPacket(l.conn) + if err != nil { + // A read error is expected here if we are closing the connection... + if !l.isClosing() { + l.closeErr.Store(fmt.Errorf("unable to read LDAP response packet: %s", err)) + l.Debug.Printf("reader error: %s", err.Error()) + } + return + } + addLDAPDescriptions(packet) + if len(packet.Children) == 0 { + l.Debug.Printf("Received bad ldap packet") + continue + } + l.messageMutex.Lock() + if l.isStartingTLS { + cleanstop = true + } + l.messageMutex.Unlock() + message := &messagePacket{ + Op: MessageResponse, + MessageID: packet.Children[0].Value.(int64), + Packet: packet, + } + if !l.sendProcessMessage(message) { + return + } + } +} diff --git a/vendor/gopkg.in/ldap.v2/control.go b/vendor/gopkg.in/ldap.v2/control.go new file mode 100644 index 0000000000000..342f325ca6144 --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/control.go @@ -0,0 +1,420 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ldap + +import ( + "fmt" + "strconv" + + "gopkg.in/asn1-ber.v1" +) + +const ( + // ControlTypePaging - https://www.ietf.org/rfc/rfc2696.txt + ControlTypePaging = "1.2.840.113556.1.4.319" + // ControlTypeBeheraPasswordPolicy - https://tools.ietf.org/html/draft-behera-ldap-password-policy-10 + ControlTypeBeheraPasswordPolicy = "1.3.6.1.4.1.42.2.27.8.5.1" + // ControlTypeVChuPasswordMustChange - https://tools.ietf.org/html/draft-vchu-ldap-pwd-policy-00 + ControlTypeVChuPasswordMustChange = "2.16.840.1.113730.3.4.4" + // ControlTypeVChuPasswordWarning - https://tools.ietf.org/html/draft-vchu-ldap-pwd-policy-00 + ControlTypeVChuPasswordWarning = "2.16.840.1.113730.3.4.5" + // ControlTypeManageDsaIT - https://tools.ietf.org/html/rfc3296 + ControlTypeManageDsaIT = "2.16.840.1.113730.3.4.2" +) + +// ControlTypeMap maps controls to text descriptions +var ControlTypeMap = map[string]string{ + ControlTypePaging: "Paging", + ControlTypeBeheraPasswordPolicy: "Password Policy - Behera Draft", + ControlTypeManageDsaIT: "Manage DSA IT", +} + +// Control defines an interface controls provide to encode and describe themselves +type Control interface { + // GetControlType returns the OID + GetControlType() string + // Encode returns the ber packet representation + Encode() *ber.Packet + // String returns a human-readable description + String() string +} + +// ControlString implements the Control interface for simple controls +type ControlString struct { + ControlType string + Criticality bool + ControlValue string +} + +// GetControlType returns the OID +func (c *ControlString) GetControlType() string { + return c.ControlType +} + +// Encode returns the ber packet representation +func (c *ControlString) Encode() *ber.Packet { + packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Control") + packet.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, c.ControlType, "Control Type ("+ControlTypeMap[c.ControlType]+")")) + if c.Criticality { + packet.AppendChild(ber.NewBoolean(ber.ClassUniversal, ber.TypePrimitive, ber.TagBoolean, c.Criticality, "Criticality")) + } + packet.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, string(c.ControlValue), "Control Value")) + return packet +} + +// String returns a human-readable description +func (c *ControlString) String() string { + return fmt.Sprintf("Control Type: %s (%q) Criticality: %t Control Value: %s", ControlTypeMap[c.ControlType], c.ControlType, c.Criticality, c.ControlValue) +} + +// ControlPaging implements the paging control described in https://www.ietf.org/rfc/rfc2696.txt +type ControlPaging struct { + // PagingSize indicates the page size + PagingSize uint32 + // Cookie is an opaque value returned by the server to track a paging cursor + Cookie []byte +} + +// GetControlType returns the OID +func (c *ControlPaging) GetControlType() string { + return ControlTypePaging +} + +// Encode returns the ber packet representation +func (c *ControlPaging) Encode() *ber.Packet { + packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Control") + packet.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, ControlTypePaging, "Control Type ("+ControlTypeMap[ControlTypePaging]+")")) + + p2 := ber.Encode(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, nil, "Control Value (Paging)") + seq := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Search Control Value") + seq.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, int64(c.PagingSize), "Paging Size")) + cookie := ber.Encode(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, nil, "Cookie") + cookie.Value = c.Cookie + cookie.Data.Write(c.Cookie) + seq.AppendChild(cookie) + p2.AppendChild(seq) + + packet.AppendChild(p2) + return packet +} + +// String returns a human-readable description +func (c *ControlPaging) String() string { + return fmt.Sprintf( + "Control Type: %s (%q) Criticality: %t PagingSize: %d Cookie: %q", + ControlTypeMap[ControlTypePaging], + ControlTypePaging, + false, + c.PagingSize, + c.Cookie) +} + +// SetCookie stores the given cookie in the paging control +func (c *ControlPaging) SetCookie(cookie []byte) { + c.Cookie = cookie +} + +// ControlBeheraPasswordPolicy implements the control described in https://tools.ietf.org/html/draft-behera-ldap-password-policy-10 +type ControlBeheraPasswordPolicy struct { + // Expire contains the number of seconds before a password will expire + Expire int64 + // Grace indicates the remaining number of times a user will be allowed to authenticate with an expired password + Grace int64 + // Error indicates the error code + Error int8 + // ErrorString is a human readable error + ErrorString string +} + +// GetControlType returns the OID +func (c *ControlBeheraPasswordPolicy) GetControlType() string { + return ControlTypeBeheraPasswordPolicy +} + +// Encode returns the ber packet representation +func (c *ControlBeheraPasswordPolicy) Encode() *ber.Packet { + packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Control") + packet.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, ControlTypeBeheraPasswordPolicy, "Control Type ("+ControlTypeMap[ControlTypeBeheraPasswordPolicy]+")")) + + return packet +} + +// String returns a human-readable description +func (c *ControlBeheraPasswordPolicy) String() string { + return fmt.Sprintf( + "Control Type: %s (%q) Criticality: %t Expire: %d Grace: %d Error: %d, ErrorString: %s", + ControlTypeMap[ControlTypeBeheraPasswordPolicy], + ControlTypeBeheraPasswordPolicy, + false, + c.Expire, + c.Grace, + c.Error, + c.ErrorString) +} + +// ControlVChuPasswordMustChange implements the control described in https://tools.ietf.org/html/draft-vchu-ldap-pwd-policy-00 +type ControlVChuPasswordMustChange struct { + // MustChange indicates if the password is required to be changed + MustChange bool +} + +// GetControlType returns the OID +func (c *ControlVChuPasswordMustChange) GetControlType() string { + return ControlTypeVChuPasswordMustChange +} + +// Encode returns the ber packet representation +func (c *ControlVChuPasswordMustChange) Encode() *ber.Packet { + return nil +} + +// String returns a human-readable description +func (c *ControlVChuPasswordMustChange) String() string { + return fmt.Sprintf( + "Control Type: %s (%q) Criticality: %t MustChange: %v", + ControlTypeMap[ControlTypeVChuPasswordMustChange], + ControlTypeVChuPasswordMustChange, + false, + c.MustChange) +} + +// ControlVChuPasswordWarning implements the control described in https://tools.ietf.org/html/draft-vchu-ldap-pwd-policy-00 +type ControlVChuPasswordWarning struct { + // Expire indicates the time in seconds until the password expires + Expire int64 +} + +// GetControlType returns the OID +func (c *ControlVChuPasswordWarning) GetControlType() string { + return ControlTypeVChuPasswordWarning +} + +// Encode returns the ber packet representation +func (c *ControlVChuPasswordWarning) Encode() *ber.Packet { + return nil +} + +// String returns a human-readable description +func (c *ControlVChuPasswordWarning) String() string { + return fmt.Sprintf( + "Control Type: %s (%q) Criticality: %t Expire: %b", + ControlTypeMap[ControlTypeVChuPasswordWarning], + ControlTypeVChuPasswordWarning, + false, + c.Expire) +} + +// ControlManageDsaIT implements the control described in https://tools.ietf.org/html/rfc3296 +type ControlManageDsaIT struct { + // Criticality indicates if this control is required + Criticality bool +} + +// GetControlType returns the OID +func (c *ControlManageDsaIT) GetControlType() string { + return ControlTypeManageDsaIT +} + +// Encode returns the ber packet representation +func (c *ControlManageDsaIT) Encode() *ber.Packet { + //FIXME + packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Control") + packet.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, ControlTypeManageDsaIT, "Control Type ("+ControlTypeMap[ControlTypeManageDsaIT]+")")) + if c.Criticality { + packet.AppendChild(ber.NewBoolean(ber.ClassUniversal, ber.TypePrimitive, ber.TagBoolean, c.Criticality, "Criticality")) + } + return packet +} + +// String returns a human-readable description +func (c *ControlManageDsaIT) String() string { + return fmt.Sprintf( + "Control Type: %s (%q) Criticality: %t", + ControlTypeMap[ControlTypeManageDsaIT], + ControlTypeManageDsaIT, + c.Criticality) +} + +// NewControlManageDsaIT returns a ControlManageDsaIT control +func NewControlManageDsaIT(Criticality bool) *ControlManageDsaIT { + return &ControlManageDsaIT{Criticality: Criticality} +} + +// FindControl returns the first control of the given type in the list, or nil +func FindControl(controls []Control, controlType string) Control { + for _, c := range controls { + if c.GetControlType() == controlType { + return c + } + } + return nil +} + +// DecodeControl returns a control read from the given packet, or nil if no recognized control can be made +func DecodeControl(packet *ber.Packet) Control { + var ( + ControlType = "" + Criticality = false + value *ber.Packet + ) + + switch len(packet.Children) { + case 0: + // at least one child is required for control type + return nil + + case 1: + // just type, no criticality or value + packet.Children[0].Description = "Control Type (" + ControlTypeMap[ControlType] + ")" + ControlType = packet.Children[0].Value.(string) + + case 2: + packet.Children[0].Description = "Control Type (" + ControlTypeMap[ControlType] + ")" + ControlType = packet.Children[0].Value.(string) + + // Children[1] could be criticality or value (both are optional) + // duck-type on whether this is a boolean + if _, ok := packet.Children[1].Value.(bool); ok { + packet.Children[1].Description = "Criticality" + Criticality = packet.Children[1].Value.(bool) + } else { + packet.Children[1].Description = "Control Value" + value = packet.Children[1] + } + + case 3: + packet.Children[0].Description = "Control Type (" + ControlTypeMap[ControlType] + ")" + ControlType = packet.Children[0].Value.(string) + + packet.Children[1].Description = "Criticality" + Criticality = packet.Children[1].Value.(bool) + + packet.Children[2].Description = "Control Value" + value = packet.Children[2] + + default: + // more than 3 children is invalid + return nil + } + + switch ControlType { + case ControlTypeManageDsaIT: + return NewControlManageDsaIT(Criticality) + case ControlTypePaging: + value.Description += " (Paging)" + c := new(ControlPaging) + if value.Value != nil { + valueChildren := ber.DecodePacket(value.Data.Bytes()) + value.Data.Truncate(0) + value.Value = nil + value.AppendChild(valueChildren) + } + value = value.Children[0] + value.Description = "Search Control Value" + value.Children[0].Description = "Paging Size" + value.Children[1].Description = "Cookie" + c.PagingSize = uint32(value.Children[0].Value.(int64)) + c.Cookie = value.Children[1].Data.Bytes() + value.Children[1].Value = c.Cookie + return c + case ControlTypeBeheraPasswordPolicy: + value.Description += " (Password Policy - Behera)" + c := NewControlBeheraPasswordPolicy() + if value.Value != nil { + valueChildren := ber.DecodePacket(value.Data.Bytes()) + value.Data.Truncate(0) + value.Value = nil + value.AppendChild(valueChildren) + } + + sequence := value.Children[0] + + for _, child := range sequence.Children { + if child.Tag == 0 { + //Warning + warningPacket := child.Children[0] + packet := ber.DecodePacket(warningPacket.Data.Bytes()) + val, ok := packet.Value.(int64) + if ok { + if warningPacket.Tag == 0 { + //timeBeforeExpiration + c.Expire = val + warningPacket.Value = c.Expire + } else if warningPacket.Tag == 1 { + //graceAuthNsRemaining + c.Grace = val + warningPacket.Value = c.Grace + } + } + } else if child.Tag == 1 { + // Error + packet := ber.DecodePacket(child.Data.Bytes()) + val, ok := packet.Value.(int8) + if !ok { + // what to do? + val = -1 + } + c.Error = val + child.Value = c.Error + c.ErrorString = BeheraPasswordPolicyErrorMap[c.Error] + } + } + return c + case ControlTypeVChuPasswordMustChange: + c := &ControlVChuPasswordMustChange{MustChange: true} + return c + case ControlTypeVChuPasswordWarning: + c := &ControlVChuPasswordWarning{Expire: -1} + expireStr := ber.DecodeString(value.Data.Bytes()) + + expire, err := strconv.ParseInt(expireStr, 10, 64) + if err != nil { + return nil + } + c.Expire = expire + value.Value = c.Expire + + return c + default: + c := new(ControlString) + c.ControlType = ControlType + c.Criticality = Criticality + if value != nil { + c.ControlValue = value.Value.(string) + } + return c + } +} + +// NewControlString returns a generic control +func NewControlString(controlType string, criticality bool, controlValue string) *ControlString { + return &ControlString{ + ControlType: controlType, + Criticality: criticality, + ControlValue: controlValue, + } +} + +// NewControlPaging returns a paging control +func NewControlPaging(pagingSize uint32) *ControlPaging { + return &ControlPaging{PagingSize: pagingSize} +} + +// NewControlBeheraPasswordPolicy returns a ControlBeheraPasswordPolicy +func NewControlBeheraPasswordPolicy() *ControlBeheraPasswordPolicy { + return &ControlBeheraPasswordPolicy{ + Expire: -1, + Grace: -1, + Error: -1, + } +} + +func encodeControls(controls []Control) *ber.Packet { + packet := ber.Encode(ber.ClassContext, ber.TypeConstructed, 0, nil, "Controls") + for _, control := range controls { + packet.AppendChild(control.Encode()) + } + return packet +} diff --git a/vendor/gopkg.in/ldap.v2/debug.go b/vendor/gopkg.in/ldap.v2/debug.go new file mode 100644 index 0000000000000..7279fc2518229 --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/debug.go @@ -0,0 +1,24 @@ +package ldap + +import ( + "log" + + "gopkg.in/asn1-ber.v1" +) + +// debugging type +// - has a Printf method to write the debug output +type debugging bool + +// write debug output +func (debug debugging) Printf(format string, args ...interface{}) { + if debug { + log.Printf(format, args...) + } +} + +func (debug debugging) PrintPacket(packet *ber.Packet) { + if debug { + ber.PrintPacket(packet) + } +} diff --git a/vendor/gopkg.in/ldap.v2/del.go b/vendor/gopkg.in/ldap.v2/del.go new file mode 100644 index 0000000000000..4fd63dc3f25ab --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/del.go @@ -0,0 +1,84 @@ +// +// https://tools.ietf.org/html/rfc4511 +// +// DelRequest ::= [APPLICATION 10] LDAPDN + +package ldap + +import ( + "errors" + "log" + + "gopkg.in/asn1-ber.v1" +) + +// DelRequest implements an LDAP deletion request +type DelRequest struct { + // DN is the name of the directory entry to delete + DN string + // Controls hold optional controls to send with the request + Controls []Control +} + +func (d DelRequest) encode() *ber.Packet { + request := ber.Encode(ber.ClassApplication, ber.TypePrimitive, ApplicationDelRequest, d.DN, "Del Request") + request.Data.Write([]byte(d.DN)) + return request +} + +// NewDelRequest creates a delete request for the given DN and controls +func NewDelRequest(DN string, + Controls []Control) *DelRequest { + return &DelRequest{ + DN: DN, + Controls: Controls, + } +} + +// Del executes the given delete request +func (l *Conn) Del(delRequest *DelRequest) error { + packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") + packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) + packet.AppendChild(delRequest.encode()) + if delRequest.Controls != nil { + packet.AppendChild(encodeControls(delRequest.Controls)) + } + + l.Debug.PrintPacket(packet) + + msgCtx, err := l.sendMessage(packet) + if err != nil { + return err + } + defer l.finishMessage(msgCtx) + + l.Debug.Printf("%d: waiting for response", msgCtx.id) + packetResponse, ok := <-msgCtx.responses + if !ok { + return NewError(ErrorNetwork, errors.New("ldap: response channel closed")) + } + packet, err = packetResponse.ReadPacket() + l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + if err != nil { + return err + } + + if l.Debug { + if err := addLDAPDescriptions(packet); err != nil { + return err + } + ber.PrintPacket(packet) + } + + if packet.Children[1].Tag == ApplicationDelResponse { + resultCode, resultDescription := getLDAPResultCode(packet) + if resultCode != 0 { + return NewError(resultCode, errors.New(resultDescription)) + } + } else { + log.Printf("Unexpected Response: %d", packet.Children[1].Tag) + } + + l.Debug.Printf("%d: returning", msgCtx.id) + return nil +} diff --git a/vendor/gopkg.in/ldap.v2/dn.go b/vendor/gopkg.in/ldap.v2/dn.go new file mode 100644 index 0000000000000..34e9023af936e --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/dn.go @@ -0,0 +1,247 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// +// File contains DN parsing functionality +// +// https://tools.ietf.org/html/rfc4514 +// +// distinguishedName = [ relativeDistinguishedName +// *( COMMA relativeDistinguishedName ) ] +// relativeDistinguishedName = attributeTypeAndValue +// *( PLUS attributeTypeAndValue ) +// attributeTypeAndValue = attributeType EQUALS attributeValue +// attributeType = descr / numericoid +// attributeValue = string / hexstring +// +// ; The following characters are to be escaped when they appear +// ; in the value to be encoded: ESC, one of , leading +// ; SHARP or SPACE, trailing SPACE, and NULL. +// string = [ ( leadchar / pair ) [ *( stringchar / pair ) +// ( trailchar / pair ) ] ] +// +// leadchar = LUTF1 / UTFMB +// LUTF1 = %x01-1F / %x21 / %x24-2A / %x2D-3A / +// %x3D / %x3F-5B / %x5D-7F +// +// trailchar = TUTF1 / UTFMB +// TUTF1 = %x01-1F / %x21 / %x23-2A / %x2D-3A / +// %x3D / %x3F-5B / %x5D-7F +// +// stringchar = SUTF1 / UTFMB +// SUTF1 = %x01-21 / %x23-2A / %x2D-3A / +// %x3D / %x3F-5B / %x5D-7F +// +// pair = ESC ( ESC / special / hexpair ) +// special = escaped / SPACE / SHARP / EQUALS +// escaped = DQUOTE / PLUS / COMMA / SEMI / LANGLE / RANGLE +// hexstring = SHARP 1*hexpair +// hexpair = HEX HEX +// +// where the productions , , , , +// , , , , , , , , +// , , and are defined in [RFC4512]. +// + +package ldap + +import ( + "bytes" + enchex "encoding/hex" + "errors" + "fmt" + "strings" + + "gopkg.in/asn1-ber.v1" +) + +// AttributeTypeAndValue represents an attributeTypeAndValue from https://tools.ietf.org/html/rfc4514 +type AttributeTypeAndValue struct { + // Type is the attribute type + Type string + // Value is the attribute value + Value string +} + +// RelativeDN represents a relativeDistinguishedName from https://tools.ietf.org/html/rfc4514 +type RelativeDN struct { + Attributes []*AttributeTypeAndValue +} + +// DN represents a distinguishedName from https://tools.ietf.org/html/rfc4514 +type DN struct { + RDNs []*RelativeDN +} + +// ParseDN returns a distinguishedName or an error +func ParseDN(str string) (*DN, error) { + dn := new(DN) + dn.RDNs = make([]*RelativeDN, 0) + rdn := new(RelativeDN) + rdn.Attributes = make([]*AttributeTypeAndValue, 0) + buffer := bytes.Buffer{} + attribute := new(AttributeTypeAndValue) + escaping := false + + unescapedTrailingSpaces := 0 + stringFromBuffer := func() string { + s := buffer.String() + s = s[0 : len(s)-unescapedTrailingSpaces] + buffer.Reset() + unescapedTrailingSpaces = 0 + return s + } + + for i := 0; i < len(str); i++ { + char := str[i] + if escaping { + unescapedTrailingSpaces = 0 + escaping = false + switch char { + case ' ', '"', '#', '+', ',', ';', '<', '=', '>', '\\': + buffer.WriteByte(char) + continue + } + // Not a special character, assume hex encoded octet + if len(str) == i+1 { + return nil, errors.New("Got corrupted escaped character") + } + + dst := []byte{0} + n, err := enchex.Decode([]byte(dst), []byte(str[i:i+2])) + if err != nil { + return nil, fmt.Errorf("Failed to decode escaped character: %s", err) + } else if n != 1 { + return nil, fmt.Errorf("Expected 1 byte when un-escaping, got %d", n) + } + buffer.WriteByte(dst[0]) + i++ + } else if char == '\\' { + unescapedTrailingSpaces = 0 + escaping = true + } else if char == '=' { + attribute.Type = stringFromBuffer() + // Special case: If the first character in the value is # the + // following data is BER encoded so we can just fast forward + // and decode. + if len(str) > i+1 && str[i+1] == '#' { + i += 2 + index := strings.IndexAny(str[i:], ",+") + data := str + if index > 0 { + data = str[i : i+index] + } else { + data = str[i:] + } + rawBER, err := enchex.DecodeString(data) + if err != nil { + return nil, fmt.Errorf("Failed to decode BER encoding: %s", err) + } + packet := ber.DecodePacket(rawBER) + buffer.WriteString(packet.Data.String()) + i += len(data) - 1 + } + } else if char == ',' || char == '+' { + // We're done with this RDN or value, push it + if len(attribute.Type) == 0 { + return nil, errors.New("incomplete type, value pair") + } + attribute.Value = stringFromBuffer() + rdn.Attributes = append(rdn.Attributes, attribute) + attribute = new(AttributeTypeAndValue) + if char == ',' { + dn.RDNs = append(dn.RDNs, rdn) + rdn = new(RelativeDN) + rdn.Attributes = make([]*AttributeTypeAndValue, 0) + } + } else if char == ' ' && buffer.Len() == 0 { + // ignore unescaped leading spaces + continue + } else { + if char == ' ' { + // Track unescaped spaces in case they are trailing and we need to remove them + unescapedTrailingSpaces++ + } else { + // Reset if we see a non-space char + unescapedTrailingSpaces = 0 + } + buffer.WriteByte(char) + } + } + if buffer.Len() > 0 { + if len(attribute.Type) == 0 { + return nil, errors.New("DN ended with incomplete type, value pair") + } + attribute.Value = stringFromBuffer() + rdn.Attributes = append(rdn.Attributes, attribute) + dn.RDNs = append(dn.RDNs, rdn) + } + return dn, nil +} + +// Equal returns true if the DNs are equal as defined by rfc4517 4.2.15 (distinguishedNameMatch). +// Returns true if they have the same number of relative distinguished names +// and corresponding relative distinguished names (by position) are the same. +func (d *DN) Equal(other *DN) bool { + if len(d.RDNs) != len(other.RDNs) { + return false + } + for i := range d.RDNs { + if !d.RDNs[i].Equal(other.RDNs[i]) { + return false + } + } + return true +} + +// AncestorOf returns true if the other DN consists of at least one RDN followed by all the RDNs of the current DN. +// "ou=widgets,o=acme.com" is an ancestor of "ou=sprockets,ou=widgets,o=acme.com" +// "ou=widgets,o=acme.com" is not an ancestor of "ou=sprockets,ou=widgets,o=foo.com" +// "ou=widgets,o=acme.com" is not an ancestor of "ou=widgets,o=acme.com" +func (d *DN) AncestorOf(other *DN) bool { + if len(d.RDNs) >= len(other.RDNs) { + return false + } + // Take the last `len(d.RDNs)` RDNs from the other DN to compare against + otherRDNs := other.RDNs[len(other.RDNs)-len(d.RDNs):] + for i := range d.RDNs { + if !d.RDNs[i].Equal(otherRDNs[i]) { + return false + } + } + return true +} + +// Equal returns true if the RelativeDNs are equal as defined by rfc4517 4.2.15 (distinguishedNameMatch). +// Relative distinguished names are the same if and only if they have the same number of AttributeTypeAndValues +// and each attribute of the first RDN is the same as the attribute of the second RDN with the same attribute type. +// The order of attributes is not significant. +// Case of attribute types is not significant. +func (r *RelativeDN) Equal(other *RelativeDN) bool { + if len(r.Attributes) != len(other.Attributes) { + return false + } + return r.hasAllAttributes(other.Attributes) && other.hasAllAttributes(r.Attributes) +} + +func (r *RelativeDN) hasAllAttributes(attrs []*AttributeTypeAndValue) bool { + for _, attr := range attrs { + found := false + for _, myattr := range r.Attributes { + if myattr.Equal(attr) { + found = true + break + } + } + if !found { + return false + } + } + return true +} + +// Equal returns true if the AttributeTypeAndValue is equivalent to the specified AttributeTypeAndValue +// Case of the attribute type is not significant +func (a *AttributeTypeAndValue) Equal(other *AttributeTypeAndValue) bool { + return strings.EqualFold(a.Type, other.Type) && a.Value == other.Value +} diff --git a/vendor/gopkg.in/ldap.v2/doc.go b/vendor/gopkg.in/ldap.v2/doc.go new file mode 100644 index 0000000000000..f20d39bc99f95 --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/doc.go @@ -0,0 +1,4 @@ +/* +Package ldap provides basic LDAP v3 functionality. +*/ +package ldap diff --git a/vendor/gopkg.in/ldap.v2/error.go b/vendor/gopkg.in/ldap.v2/error.go new file mode 100644 index 0000000000000..4cccb537fdd87 --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/error.go @@ -0,0 +1,155 @@ +package ldap + +import ( + "fmt" + + "gopkg.in/asn1-ber.v1" +) + +// LDAP Result Codes +const ( + LDAPResultSuccess = 0 + LDAPResultOperationsError = 1 + LDAPResultProtocolError = 2 + LDAPResultTimeLimitExceeded = 3 + LDAPResultSizeLimitExceeded = 4 + LDAPResultCompareFalse = 5 + LDAPResultCompareTrue = 6 + LDAPResultAuthMethodNotSupported = 7 + LDAPResultStrongAuthRequired = 8 + LDAPResultReferral = 10 + LDAPResultAdminLimitExceeded = 11 + LDAPResultUnavailableCriticalExtension = 12 + LDAPResultConfidentialityRequired = 13 + LDAPResultSaslBindInProgress = 14 + LDAPResultNoSuchAttribute = 16 + LDAPResultUndefinedAttributeType = 17 + LDAPResultInappropriateMatching = 18 + LDAPResultConstraintViolation = 19 + LDAPResultAttributeOrValueExists = 20 + LDAPResultInvalidAttributeSyntax = 21 + LDAPResultNoSuchObject = 32 + LDAPResultAliasProblem = 33 + LDAPResultInvalidDNSyntax = 34 + LDAPResultAliasDereferencingProblem = 36 + LDAPResultInappropriateAuthentication = 48 + LDAPResultInvalidCredentials = 49 + LDAPResultInsufficientAccessRights = 50 + LDAPResultBusy = 51 + LDAPResultUnavailable = 52 + LDAPResultUnwillingToPerform = 53 + LDAPResultLoopDetect = 54 + LDAPResultNamingViolation = 64 + LDAPResultObjectClassViolation = 65 + LDAPResultNotAllowedOnNonLeaf = 66 + LDAPResultNotAllowedOnRDN = 67 + LDAPResultEntryAlreadyExists = 68 + LDAPResultObjectClassModsProhibited = 69 + LDAPResultAffectsMultipleDSAs = 71 + LDAPResultOther = 80 + + ErrorNetwork = 200 + ErrorFilterCompile = 201 + ErrorFilterDecompile = 202 + ErrorDebugging = 203 + ErrorUnexpectedMessage = 204 + ErrorUnexpectedResponse = 205 +) + +// LDAPResultCodeMap contains string descriptions for LDAP error codes +var LDAPResultCodeMap = map[uint8]string{ + LDAPResultSuccess: "Success", + LDAPResultOperationsError: "Operations Error", + LDAPResultProtocolError: "Protocol Error", + LDAPResultTimeLimitExceeded: "Time Limit Exceeded", + LDAPResultSizeLimitExceeded: "Size Limit Exceeded", + LDAPResultCompareFalse: "Compare False", + LDAPResultCompareTrue: "Compare True", + LDAPResultAuthMethodNotSupported: "Auth Method Not Supported", + LDAPResultStrongAuthRequired: "Strong Auth Required", + LDAPResultReferral: "Referral", + LDAPResultAdminLimitExceeded: "Admin Limit Exceeded", + LDAPResultUnavailableCriticalExtension: "Unavailable Critical Extension", + LDAPResultConfidentialityRequired: "Confidentiality Required", + LDAPResultSaslBindInProgress: "Sasl Bind In Progress", + LDAPResultNoSuchAttribute: "No Such Attribute", + LDAPResultUndefinedAttributeType: "Undefined Attribute Type", + LDAPResultInappropriateMatching: "Inappropriate Matching", + LDAPResultConstraintViolation: "Constraint Violation", + LDAPResultAttributeOrValueExists: "Attribute Or Value Exists", + LDAPResultInvalidAttributeSyntax: "Invalid Attribute Syntax", + LDAPResultNoSuchObject: "No Such Object", + LDAPResultAliasProblem: "Alias Problem", + LDAPResultInvalidDNSyntax: "Invalid DN Syntax", + LDAPResultAliasDereferencingProblem: "Alias Dereferencing Problem", + LDAPResultInappropriateAuthentication: "Inappropriate Authentication", + LDAPResultInvalidCredentials: "Invalid Credentials", + LDAPResultInsufficientAccessRights: "Insufficient Access Rights", + LDAPResultBusy: "Busy", + LDAPResultUnavailable: "Unavailable", + LDAPResultUnwillingToPerform: "Unwilling To Perform", + LDAPResultLoopDetect: "Loop Detect", + LDAPResultNamingViolation: "Naming Violation", + LDAPResultObjectClassViolation: "Object Class Violation", + LDAPResultNotAllowedOnNonLeaf: "Not Allowed On Non Leaf", + LDAPResultNotAllowedOnRDN: "Not Allowed On RDN", + LDAPResultEntryAlreadyExists: "Entry Already Exists", + LDAPResultObjectClassModsProhibited: "Object Class Mods Prohibited", + LDAPResultAffectsMultipleDSAs: "Affects Multiple DSAs", + LDAPResultOther: "Other", + + ErrorNetwork: "Network Error", + ErrorFilterCompile: "Filter Compile Error", + ErrorFilterDecompile: "Filter Decompile Error", + ErrorDebugging: "Debugging Error", + ErrorUnexpectedMessage: "Unexpected Message", + ErrorUnexpectedResponse: "Unexpected Response", +} + +func getLDAPResultCode(packet *ber.Packet) (code uint8, description string) { + if packet == nil { + return ErrorUnexpectedResponse, "Empty packet" + } else if len(packet.Children) >= 2 { + response := packet.Children[1] + if response == nil { + return ErrorUnexpectedResponse, "Empty response in packet" + } + if response.ClassType == ber.ClassApplication && response.TagType == ber.TypeConstructed && len(response.Children) >= 3 { + // Children[1].Children[2] is the diagnosticMessage which is guaranteed to exist as seen here: https://tools.ietf.org/html/rfc4511#section-4.1.9 + return uint8(response.Children[0].Value.(int64)), response.Children[2].Value.(string) + } + } + + return ErrorNetwork, "Invalid packet format" +} + +// Error holds LDAP error information +type Error struct { + // Err is the underlying error + Err error + // ResultCode is the LDAP error code + ResultCode uint8 +} + +func (e *Error) Error() string { + return fmt.Sprintf("LDAP Result Code %d %q: %s", e.ResultCode, LDAPResultCodeMap[e.ResultCode], e.Err.Error()) +} + +// NewError creates an LDAP error with the given code and underlying error +func NewError(resultCode uint8, err error) error { + return &Error{ResultCode: resultCode, Err: err} +} + +// IsErrorWithCode returns true if the given error is an LDAP error with the given result code +func IsErrorWithCode(err error, desiredResultCode uint8) bool { + if err == nil { + return false + } + + serverError, ok := err.(*Error) + if !ok { + return false + } + + return serverError.ResultCode == desiredResultCode +} diff --git a/vendor/gopkg.in/ldap.v2/filter.go b/vendor/gopkg.in/ldap.v2/filter.go new file mode 100644 index 0000000000000..3858a2865c016 --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/filter.go @@ -0,0 +1,469 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ldap + +import ( + "bytes" + hexpac "encoding/hex" + "errors" + "fmt" + "strings" + "unicode/utf8" + + "gopkg.in/asn1-ber.v1" +) + +// Filter choices +const ( + FilterAnd = 0 + FilterOr = 1 + FilterNot = 2 + FilterEqualityMatch = 3 + FilterSubstrings = 4 + FilterGreaterOrEqual = 5 + FilterLessOrEqual = 6 + FilterPresent = 7 + FilterApproxMatch = 8 + FilterExtensibleMatch = 9 +) + +// FilterMap contains human readable descriptions of Filter choices +var FilterMap = map[uint64]string{ + FilterAnd: "And", + FilterOr: "Or", + FilterNot: "Not", + FilterEqualityMatch: "Equality Match", + FilterSubstrings: "Substrings", + FilterGreaterOrEqual: "Greater Or Equal", + FilterLessOrEqual: "Less Or Equal", + FilterPresent: "Present", + FilterApproxMatch: "Approx Match", + FilterExtensibleMatch: "Extensible Match", +} + +// SubstringFilter options +const ( + FilterSubstringsInitial = 0 + FilterSubstringsAny = 1 + FilterSubstringsFinal = 2 +) + +// FilterSubstringsMap contains human readable descriptions of SubstringFilter choices +var FilterSubstringsMap = map[uint64]string{ + FilterSubstringsInitial: "Substrings Initial", + FilterSubstringsAny: "Substrings Any", + FilterSubstringsFinal: "Substrings Final", +} + +// MatchingRuleAssertion choices +const ( + MatchingRuleAssertionMatchingRule = 1 + MatchingRuleAssertionType = 2 + MatchingRuleAssertionMatchValue = 3 + MatchingRuleAssertionDNAttributes = 4 +) + +// MatchingRuleAssertionMap contains human readable descriptions of MatchingRuleAssertion choices +var MatchingRuleAssertionMap = map[uint64]string{ + MatchingRuleAssertionMatchingRule: "Matching Rule Assertion Matching Rule", + MatchingRuleAssertionType: "Matching Rule Assertion Type", + MatchingRuleAssertionMatchValue: "Matching Rule Assertion Match Value", + MatchingRuleAssertionDNAttributes: "Matching Rule Assertion DN Attributes", +} + +// CompileFilter converts a string representation of a filter into a BER-encoded packet +func CompileFilter(filter string) (*ber.Packet, error) { + if len(filter) == 0 || filter[0] != '(' { + return nil, NewError(ErrorFilterCompile, errors.New("ldap: filter does not start with an '('")) + } + packet, pos, err := compileFilter(filter, 1) + if err != nil { + return nil, err + } + switch { + case pos > len(filter): + return nil, NewError(ErrorFilterCompile, errors.New("ldap: unexpected end of filter")) + case pos < len(filter): + return nil, NewError(ErrorFilterCompile, errors.New("ldap: finished compiling filter with extra at end: "+fmt.Sprint(filter[pos:]))) + } + return packet, nil +} + +// DecompileFilter converts a packet representation of a filter into a string representation +func DecompileFilter(packet *ber.Packet) (ret string, err error) { + defer func() { + if r := recover(); r != nil { + err = NewError(ErrorFilterDecompile, errors.New("ldap: error decompiling filter")) + } + }() + ret = "(" + err = nil + childStr := "" + + switch packet.Tag { + case FilterAnd: + ret += "&" + for _, child := range packet.Children { + childStr, err = DecompileFilter(child) + if err != nil { + return + } + ret += childStr + } + case FilterOr: + ret += "|" + for _, child := range packet.Children { + childStr, err = DecompileFilter(child) + if err != nil { + return + } + ret += childStr + } + case FilterNot: + ret += "!" + childStr, err = DecompileFilter(packet.Children[0]) + if err != nil { + return + } + ret += childStr + + case FilterSubstrings: + ret += ber.DecodeString(packet.Children[0].Data.Bytes()) + ret += "=" + for i, child := range packet.Children[1].Children { + if i == 0 && child.Tag != FilterSubstringsInitial { + ret += "*" + } + ret += EscapeFilter(ber.DecodeString(child.Data.Bytes())) + if child.Tag != FilterSubstringsFinal { + ret += "*" + } + } + case FilterEqualityMatch: + ret += ber.DecodeString(packet.Children[0].Data.Bytes()) + ret += "=" + ret += EscapeFilter(ber.DecodeString(packet.Children[1].Data.Bytes())) + case FilterGreaterOrEqual: + ret += ber.DecodeString(packet.Children[0].Data.Bytes()) + ret += ">=" + ret += EscapeFilter(ber.DecodeString(packet.Children[1].Data.Bytes())) + case FilterLessOrEqual: + ret += ber.DecodeString(packet.Children[0].Data.Bytes()) + ret += "<=" + ret += EscapeFilter(ber.DecodeString(packet.Children[1].Data.Bytes())) + case FilterPresent: + ret += ber.DecodeString(packet.Data.Bytes()) + ret += "=*" + case FilterApproxMatch: + ret += ber.DecodeString(packet.Children[0].Data.Bytes()) + ret += "~=" + ret += EscapeFilter(ber.DecodeString(packet.Children[1].Data.Bytes())) + case FilterExtensibleMatch: + attr := "" + dnAttributes := false + matchingRule := "" + value := "" + + for _, child := range packet.Children { + switch child.Tag { + case MatchingRuleAssertionMatchingRule: + matchingRule = ber.DecodeString(child.Data.Bytes()) + case MatchingRuleAssertionType: + attr = ber.DecodeString(child.Data.Bytes()) + case MatchingRuleAssertionMatchValue: + value = ber.DecodeString(child.Data.Bytes()) + case MatchingRuleAssertionDNAttributes: + dnAttributes = child.Value.(bool) + } + } + + if len(attr) > 0 { + ret += attr + } + if dnAttributes { + ret += ":dn" + } + if len(matchingRule) > 0 { + ret += ":" + ret += matchingRule + } + ret += ":=" + ret += EscapeFilter(value) + } + + ret += ")" + return +} + +func compileFilterSet(filter string, pos int, parent *ber.Packet) (int, error) { + for pos < len(filter) && filter[pos] == '(' { + child, newPos, err := compileFilter(filter, pos+1) + if err != nil { + return pos, err + } + pos = newPos + parent.AppendChild(child) + } + if pos == len(filter) { + return pos, NewError(ErrorFilterCompile, errors.New("ldap: unexpected end of filter")) + } + + return pos + 1, nil +} + +func compileFilter(filter string, pos int) (*ber.Packet, int, error) { + var ( + packet *ber.Packet + err error + ) + + defer func() { + if r := recover(); r != nil { + err = NewError(ErrorFilterCompile, errors.New("ldap: error compiling filter")) + } + }() + newPos := pos + + currentRune, currentWidth := utf8.DecodeRuneInString(filter[newPos:]) + + switch currentRune { + case utf8.RuneError: + return nil, 0, NewError(ErrorFilterCompile, fmt.Errorf("ldap: error reading rune at position %d", newPos)) + case '(': + packet, newPos, err = compileFilter(filter, pos+currentWidth) + newPos++ + return packet, newPos, err + case '&': + packet = ber.Encode(ber.ClassContext, ber.TypeConstructed, FilterAnd, nil, FilterMap[FilterAnd]) + newPos, err = compileFilterSet(filter, pos+currentWidth, packet) + return packet, newPos, err + case '|': + packet = ber.Encode(ber.ClassContext, ber.TypeConstructed, FilterOr, nil, FilterMap[FilterOr]) + newPos, err = compileFilterSet(filter, pos+currentWidth, packet) + return packet, newPos, err + case '!': + packet = ber.Encode(ber.ClassContext, ber.TypeConstructed, FilterNot, nil, FilterMap[FilterNot]) + var child *ber.Packet + child, newPos, err = compileFilter(filter, pos+currentWidth) + packet.AppendChild(child) + return packet, newPos, err + default: + const ( + stateReadingAttr = 0 + stateReadingExtensibleMatchingRule = 1 + stateReadingCondition = 2 + ) + + state := stateReadingAttr + + attribute := "" + extensibleDNAttributes := false + extensibleMatchingRule := "" + condition := "" + + for newPos < len(filter) { + remainingFilter := filter[newPos:] + currentRune, currentWidth = utf8.DecodeRuneInString(remainingFilter) + if currentRune == ')' { + break + } + if currentRune == utf8.RuneError { + return packet, newPos, NewError(ErrorFilterCompile, fmt.Errorf("ldap: error reading rune at position %d", newPos)) + } + + switch state { + case stateReadingAttr: + switch { + // Extensible rule, with only DN-matching + case currentRune == ':' && strings.HasPrefix(remainingFilter, ":dn:="): + packet = ber.Encode(ber.ClassContext, ber.TypeConstructed, FilterExtensibleMatch, nil, FilterMap[FilterExtensibleMatch]) + extensibleDNAttributes = true + state = stateReadingCondition + newPos += 5 + + // Extensible rule, with DN-matching and a matching OID + case currentRune == ':' && strings.HasPrefix(remainingFilter, ":dn:"): + packet = ber.Encode(ber.ClassContext, ber.TypeConstructed, FilterExtensibleMatch, nil, FilterMap[FilterExtensibleMatch]) + extensibleDNAttributes = true + state = stateReadingExtensibleMatchingRule + newPos += 4 + + // Extensible rule, with attr only + case currentRune == ':' && strings.HasPrefix(remainingFilter, ":="): + packet = ber.Encode(ber.ClassContext, ber.TypeConstructed, FilterExtensibleMatch, nil, FilterMap[FilterExtensibleMatch]) + state = stateReadingCondition + newPos += 2 + + // Extensible rule, with no DN attribute matching + case currentRune == ':': + packet = ber.Encode(ber.ClassContext, ber.TypeConstructed, FilterExtensibleMatch, nil, FilterMap[FilterExtensibleMatch]) + state = stateReadingExtensibleMatchingRule + newPos++ + + // Equality condition + case currentRune == '=': + packet = ber.Encode(ber.ClassContext, ber.TypeConstructed, FilterEqualityMatch, nil, FilterMap[FilterEqualityMatch]) + state = stateReadingCondition + newPos++ + + // Greater-than or equal + case currentRune == '>' && strings.HasPrefix(remainingFilter, ">="): + packet = ber.Encode(ber.ClassContext, ber.TypeConstructed, FilterGreaterOrEqual, nil, FilterMap[FilterGreaterOrEqual]) + state = stateReadingCondition + newPos += 2 + + // Less-than or equal + case currentRune == '<' && strings.HasPrefix(remainingFilter, "<="): + packet = ber.Encode(ber.ClassContext, ber.TypeConstructed, FilterLessOrEqual, nil, FilterMap[FilterLessOrEqual]) + state = stateReadingCondition + newPos += 2 + + // Approx + case currentRune == '~' && strings.HasPrefix(remainingFilter, "~="): + packet = ber.Encode(ber.ClassContext, ber.TypeConstructed, FilterApproxMatch, nil, FilterMap[FilterApproxMatch]) + state = stateReadingCondition + newPos += 2 + + // Still reading the attribute name + default: + attribute += fmt.Sprintf("%c", currentRune) + newPos += currentWidth + } + + case stateReadingExtensibleMatchingRule: + switch { + + // Matching rule OID is done + case currentRune == ':' && strings.HasPrefix(remainingFilter, ":="): + state = stateReadingCondition + newPos += 2 + + // Still reading the matching rule oid + default: + extensibleMatchingRule += fmt.Sprintf("%c", currentRune) + newPos += currentWidth + } + + case stateReadingCondition: + // append to the condition + condition += fmt.Sprintf("%c", currentRune) + newPos += currentWidth + } + } + + if newPos == len(filter) { + err = NewError(ErrorFilterCompile, errors.New("ldap: unexpected end of filter")) + return packet, newPos, err + } + if packet == nil { + err = NewError(ErrorFilterCompile, errors.New("ldap: error parsing filter")) + return packet, newPos, err + } + + switch { + case packet.Tag == FilterExtensibleMatch: + // MatchingRuleAssertion ::= SEQUENCE { + // matchingRule [1] MatchingRuleID OPTIONAL, + // type [2] AttributeDescription OPTIONAL, + // matchValue [3] AssertionValue, + // dnAttributes [4] BOOLEAN DEFAULT FALSE + // } + + // Include the matching rule oid, if specified + if len(extensibleMatchingRule) > 0 { + packet.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, MatchingRuleAssertionMatchingRule, extensibleMatchingRule, MatchingRuleAssertionMap[MatchingRuleAssertionMatchingRule])) + } + + // Include the attribute, if specified + if len(attribute) > 0 { + packet.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, MatchingRuleAssertionType, attribute, MatchingRuleAssertionMap[MatchingRuleAssertionType])) + } + + // Add the value (only required child) + encodedString, encodeErr := escapedStringToEncodedBytes(condition) + if encodeErr != nil { + return packet, newPos, encodeErr + } + packet.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, MatchingRuleAssertionMatchValue, encodedString, MatchingRuleAssertionMap[MatchingRuleAssertionMatchValue])) + + // Defaults to false, so only include in the sequence if true + if extensibleDNAttributes { + packet.AppendChild(ber.NewBoolean(ber.ClassContext, ber.TypePrimitive, MatchingRuleAssertionDNAttributes, extensibleDNAttributes, MatchingRuleAssertionMap[MatchingRuleAssertionDNAttributes])) + } + + case packet.Tag == FilterEqualityMatch && condition == "*": + packet = ber.NewString(ber.ClassContext, ber.TypePrimitive, FilterPresent, attribute, FilterMap[FilterPresent]) + case packet.Tag == FilterEqualityMatch && strings.Contains(condition, "*"): + packet.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, attribute, "Attribute")) + packet.Tag = FilterSubstrings + packet.Description = FilterMap[uint64(packet.Tag)] + seq := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Substrings") + parts := strings.Split(condition, "*") + for i, part := range parts { + if part == "" { + continue + } + var tag ber.Tag + switch i { + case 0: + tag = FilterSubstringsInitial + case len(parts) - 1: + tag = FilterSubstringsFinal + default: + tag = FilterSubstringsAny + } + encodedString, encodeErr := escapedStringToEncodedBytes(part) + if encodeErr != nil { + return packet, newPos, encodeErr + } + seq.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, tag, encodedString, FilterSubstringsMap[uint64(tag)])) + } + packet.AppendChild(seq) + default: + encodedString, encodeErr := escapedStringToEncodedBytes(condition) + if encodeErr != nil { + return packet, newPos, encodeErr + } + packet.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, attribute, "Attribute")) + packet.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, encodedString, "Condition")) + } + + newPos += currentWidth + return packet, newPos, err + } +} + +// Convert from "ABC\xx\xx\xx" form to literal bytes for transport +func escapedStringToEncodedBytes(escapedString string) (string, error) { + var buffer bytes.Buffer + i := 0 + for i < len(escapedString) { + currentRune, currentWidth := utf8.DecodeRuneInString(escapedString[i:]) + if currentRune == utf8.RuneError { + return "", NewError(ErrorFilterCompile, fmt.Errorf("ldap: error reading rune at position %d", i)) + } + + // Check for escaped hex characters and convert them to their literal value for transport. + if currentRune == '\\' { + // http://tools.ietf.org/search/rfc4515 + // \ (%x5C) is not a valid character unless it is followed by two HEX characters due to not + // being a member of UTF1SUBSET. + if i+2 > len(escapedString) { + return "", NewError(ErrorFilterCompile, errors.New("ldap: missing characters for escape in filter")) + } + escByte, decodeErr := hexpac.DecodeString(escapedString[i+1 : i+3]) + if decodeErr != nil { + return "", NewError(ErrorFilterCompile, errors.New("ldap: invalid characters for escape in filter")) + } + buffer.WriteByte(escByte[0]) + i += 2 // +1 from end of loop, so 3 total for \xx. + } else { + buffer.WriteRune(currentRune) + } + + i += currentWidth + } + return buffer.String(), nil +} diff --git a/vendor/gopkg.in/ldap.v2/ldap.go b/vendor/gopkg.in/ldap.v2/ldap.go new file mode 100644 index 0000000000000..496924756976e --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/ldap.go @@ -0,0 +1,320 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ldap + +import ( + "errors" + "io/ioutil" + "os" + + "gopkg.in/asn1-ber.v1" +) + +// LDAP Application Codes +const ( + ApplicationBindRequest = 0 + ApplicationBindResponse = 1 + ApplicationUnbindRequest = 2 + ApplicationSearchRequest = 3 + ApplicationSearchResultEntry = 4 + ApplicationSearchResultDone = 5 + ApplicationModifyRequest = 6 + ApplicationModifyResponse = 7 + ApplicationAddRequest = 8 + ApplicationAddResponse = 9 + ApplicationDelRequest = 10 + ApplicationDelResponse = 11 + ApplicationModifyDNRequest = 12 + ApplicationModifyDNResponse = 13 + ApplicationCompareRequest = 14 + ApplicationCompareResponse = 15 + ApplicationAbandonRequest = 16 + ApplicationSearchResultReference = 19 + ApplicationExtendedRequest = 23 + ApplicationExtendedResponse = 24 +) + +// ApplicationMap contains human readable descriptions of LDAP Application Codes +var ApplicationMap = map[uint8]string{ + ApplicationBindRequest: "Bind Request", + ApplicationBindResponse: "Bind Response", + ApplicationUnbindRequest: "Unbind Request", + ApplicationSearchRequest: "Search Request", + ApplicationSearchResultEntry: "Search Result Entry", + ApplicationSearchResultDone: "Search Result Done", + ApplicationModifyRequest: "Modify Request", + ApplicationModifyResponse: "Modify Response", + ApplicationAddRequest: "Add Request", + ApplicationAddResponse: "Add Response", + ApplicationDelRequest: "Del Request", + ApplicationDelResponse: "Del Response", + ApplicationModifyDNRequest: "Modify DN Request", + ApplicationModifyDNResponse: "Modify DN Response", + ApplicationCompareRequest: "Compare Request", + ApplicationCompareResponse: "Compare Response", + ApplicationAbandonRequest: "Abandon Request", + ApplicationSearchResultReference: "Search Result Reference", + ApplicationExtendedRequest: "Extended Request", + ApplicationExtendedResponse: "Extended Response", +} + +// Ldap Behera Password Policy Draft 10 (https://tools.ietf.org/html/draft-behera-ldap-password-policy-10) +const ( + BeheraPasswordExpired = 0 + BeheraAccountLocked = 1 + BeheraChangeAfterReset = 2 + BeheraPasswordModNotAllowed = 3 + BeheraMustSupplyOldPassword = 4 + BeheraInsufficientPasswordQuality = 5 + BeheraPasswordTooShort = 6 + BeheraPasswordTooYoung = 7 + BeheraPasswordInHistory = 8 +) + +// BeheraPasswordPolicyErrorMap contains human readable descriptions of Behera Password Policy error codes +var BeheraPasswordPolicyErrorMap = map[int8]string{ + BeheraPasswordExpired: "Password expired", + BeheraAccountLocked: "Account locked", + BeheraChangeAfterReset: "Password must be changed", + BeheraPasswordModNotAllowed: "Policy prevents password modification", + BeheraMustSupplyOldPassword: "Policy requires old password in order to change password", + BeheraInsufficientPasswordQuality: "Password fails quality checks", + BeheraPasswordTooShort: "Password is too short for policy", + BeheraPasswordTooYoung: "Password has been changed too recently", + BeheraPasswordInHistory: "New password is in list of old passwords", +} + +// Adds descriptions to an LDAP Response packet for debugging +func addLDAPDescriptions(packet *ber.Packet) (err error) { + defer func() { + if r := recover(); r != nil { + err = NewError(ErrorDebugging, errors.New("ldap: cannot process packet to add descriptions")) + } + }() + packet.Description = "LDAP Response" + packet.Children[0].Description = "Message ID" + + application := uint8(packet.Children[1].Tag) + packet.Children[1].Description = ApplicationMap[application] + + switch application { + case ApplicationBindRequest: + addRequestDescriptions(packet) + case ApplicationBindResponse: + addDefaultLDAPResponseDescriptions(packet) + case ApplicationUnbindRequest: + addRequestDescriptions(packet) + case ApplicationSearchRequest: + addRequestDescriptions(packet) + case ApplicationSearchResultEntry: + packet.Children[1].Children[0].Description = "Object Name" + packet.Children[1].Children[1].Description = "Attributes" + for _, child := range packet.Children[1].Children[1].Children { + child.Description = "Attribute" + child.Children[0].Description = "Attribute Name" + child.Children[1].Description = "Attribute Values" + for _, grandchild := range child.Children[1].Children { + grandchild.Description = "Attribute Value" + } + } + if len(packet.Children) == 3 { + addControlDescriptions(packet.Children[2]) + } + case ApplicationSearchResultDone: + addDefaultLDAPResponseDescriptions(packet) + case ApplicationModifyRequest: + addRequestDescriptions(packet) + case ApplicationModifyResponse: + case ApplicationAddRequest: + addRequestDescriptions(packet) + case ApplicationAddResponse: + case ApplicationDelRequest: + addRequestDescriptions(packet) + case ApplicationDelResponse: + case ApplicationModifyDNRequest: + addRequestDescriptions(packet) + case ApplicationModifyDNResponse: + case ApplicationCompareRequest: + addRequestDescriptions(packet) + case ApplicationCompareResponse: + case ApplicationAbandonRequest: + addRequestDescriptions(packet) + case ApplicationSearchResultReference: + case ApplicationExtendedRequest: + addRequestDescriptions(packet) + case ApplicationExtendedResponse: + } + + return nil +} + +func addControlDescriptions(packet *ber.Packet) { + packet.Description = "Controls" + for _, child := range packet.Children { + var value *ber.Packet + controlType := "" + child.Description = "Control" + switch len(child.Children) { + case 0: + // at least one child is required for control type + continue + + case 1: + // just type, no criticality or value + controlType = child.Children[0].Value.(string) + child.Children[0].Description = "Control Type (" + ControlTypeMap[controlType] + ")" + + case 2: + controlType = child.Children[0].Value.(string) + child.Children[0].Description = "Control Type (" + ControlTypeMap[controlType] + ")" + // Children[1] could be criticality or value (both are optional) + // duck-type on whether this is a boolean + if _, ok := child.Children[1].Value.(bool); ok { + child.Children[1].Description = "Criticality" + } else { + child.Children[1].Description = "Control Value" + value = child.Children[1] + } + + case 3: + // criticality and value present + controlType = child.Children[0].Value.(string) + child.Children[0].Description = "Control Type (" + ControlTypeMap[controlType] + ")" + child.Children[1].Description = "Criticality" + child.Children[2].Description = "Control Value" + value = child.Children[2] + + default: + // more than 3 children is invalid + continue + } + if value == nil { + continue + } + switch controlType { + case ControlTypePaging: + value.Description += " (Paging)" + if value.Value != nil { + valueChildren := ber.DecodePacket(value.Data.Bytes()) + value.Data.Truncate(0) + value.Value = nil + valueChildren.Children[1].Value = valueChildren.Children[1].Data.Bytes() + value.AppendChild(valueChildren) + } + value.Children[0].Description = "Real Search Control Value" + value.Children[0].Children[0].Description = "Paging Size" + value.Children[0].Children[1].Description = "Cookie" + + case ControlTypeBeheraPasswordPolicy: + value.Description += " (Password Policy - Behera Draft)" + if value.Value != nil { + valueChildren := ber.DecodePacket(value.Data.Bytes()) + value.Data.Truncate(0) + value.Value = nil + value.AppendChild(valueChildren) + } + sequence := value.Children[0] + for _, child := range sequence.Children { + if child.Tag == 0 { + //Warning + warningPacket := child.Children[0] + packet := ber.DecodePacket(warningPacket.Data.Bytes()) + val, ok := packet.Value.(int64) + if ok { + if warningPacket.Tag == 0 { + //timeBeforeExpiration + value.Description += " (TimeBeforeExpiration)" + warningPacket.Value = val + } else if warningPacket.Tag == 1 { + //graceAuthNsRemaining + value.Description += " (GraceAuthNsRemaining)" + warningPacket.Value = val + } + } + } else if child.Tag == 1 { + // Error + packet := ber.DecodePacket(child.Data.Bytes()) + val, ok := packet.Value.(int8) + if !ok { + val = -1 + } + child.Description = "Error" + child.Value = val + } + } + } + } +} + +func addRequestDescriptions(packet *ber.Packet) { + packet.Description = "LDAP Request" + packet.Children[0].Description = "Message ID" + packet.Children[1].Description = ApplicationMap[uint8(packet.Children[1].Tag)] + if len(packet.Children) == 3 { + addControlDescriptions(packet.Children[2]) + } +} + +func addDefaultLDAPResponseDescriptions(packet *ber.Packet) { + resultCode, _ := getLDAPResultCode(packet) + packet.Children[1].Children[0].Description = "Result Code (" + LDAPResultCodeMap[resultCode] + ")" + packet.Children[1].Children[1].Description = "Matched DN" + packet.Children[1].Children[2].Description = "Error Message" + if len(packet.Children[1].Children) > 3 { + packet.Children[1].Children[3].Description = "Referral" + } + if len(packet.Children) == 3 { + addControlDescriptions(packet.Children[2]) + } +} + +// DebugBinaryFile reads and prints packets from the given filename +func DebugBinaryFile(fileName string) error { + file, err := ioutil.ReadFile(fileName) + if err != nil { + return NewError(ErrorDebugging, err) + } + ber.PrintBytes(os.Stdout, file, "") + packet := ber.DecodePacket(file) + addLDAPDescriptions(packet) + ber.PrintPacket(packet) + + return nil +} + +var hex = "0123456789abcdef" + +func mustEscape(c byte) bool { + return c > 0x7f || c == '(' || c == ')' || c == '\\' || c == '*' || c == 0 +} + +// EscapeFilter escapes from the provided LDAP filter string the special +// characters in the set `()*\` and those out of the range 0 < c < 0x80, +// as defined in RFC4515. +func EscapeFilter(filter string) string { + escape := 0 + for i := 0; i < len(filter); i++ { + if mustEscape(filter[i]) { + escape++ + } + } + if escape == 0 { + return filter + } + buf := make([]byte, len(filter)+escape*2) + for i, j := 0, 0; i < len(filter); i++ { + c := filter[i] + if mustEscape(c) { + buf[j+0] = '\\' + buf[j+1] = hex[c>>4] + buf[j+2] = hex[c&0xf] + j += 3 + } else { + buf[j] = c + j++ + } + } + return string(buf) +} diff --git a/vendor/gopkg.in/ldap.v2/modify.go b/vendor/gopkg.in/ldap.v2/modify.go new file mode 100644 index 0000000000000..e4ab6cefc7ed6 --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/modify.go @@ -0,0 +1,170 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// +// File contains Modify functionality +// +// https://tools.ietf.org/html/rfc4511 +// +// ModifyRequest ::= [APPLICATION 6] SEQUENCE { +// object LDAPDN, +// changes SEQUENCE OF change SEQUENCE { +// operation ENUMERATED { +// add (0), +// delete (1), +// replace (2), +// ... }, +// modification PartialAttribute } } +// +// PartialAttribute ::= SEQUENCE { +// type AttributeDescription, +// vals SET OF value AttributeValue } +// +// AttributeDescription ::= LDAPString +// -- Constrained to +// -- [RFC4512] +// +// AttributeValue ::= OCTET STRING +// + +package ldap + +import ( + "errors" + "log" + + "gopkg.in/asn1-ber.v1" +) + +// Change operation choices +const ( + AddAttribute = 0 + DeleteAttribute = 1 + ReplaceAttribute = 2 +) + +// PartialAttribute for a ModifyRequest as defined in https://tools.ietf.org/html/rfc4511 +type PartialAttribute struct { + // Type is the type of the partial attribute + Type string + // Vals are the values of the partial attribute + Vals []string +} + +func (p *PartialAttribute) encode() *ber.Packet { + seq := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "PartialAttribute") + seq.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, p.Type, "Type")) + set := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSet, nil, "AttributeValue") + for _, value := range p.Vals { + set.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, value, "Vals")) + } + seq.AppendChild(set) + return seq +} + +// ModifyRequest as defined in https://tools.ietf.org/html/rfc4511 +type ModifyRequest struct { + // DN is the distinguishedName of the directory entry to modify + DN string + // AddAttributes contain the attributes to add + AddAttributes []PartialAttribute + // DeleteAttributes contain the attributes to delete + DeleteAttributes []PartialAttribute + // ReplaceAttributes contain the attributes to replace + ReplaceAttributes []PartialAttribute +} + +// Add inserts the given attribute to the list of attributes to add +func (m *ModifyRequest) Add(attrType string, attrVals []string) { + m.AddAttributes = append(m.AddAttributes, PartialAttribute{Type: attrType, Vals: attrVals}) +} + +// Delete inserts the given attribute to the list of attributes to delete +func (m *ModifyRequest) Delete(attrType string, attrVals []string) { + m.DeleteAttributes = append(m.DeleteAttributes, PartialAttribute{Type: attrType, Vals: attrVals}) +} + +// Replace inserts the given attribute to the list of attributes to replace +func (m *ModifyRequest) Replace(attrType string, attrVals []string) { + m.ReplaceAttributes = append(m.ReplaceAttributes, PartialAttribute{Type: attrType, Vals: attrVals}) +} + +func (m ModifyRequest) encode() *ber.Packet { + request := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationModifyRequest, nil, "Modify Request") + request.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, m.DN, "DN")) + changes := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Changes") + for _, attribute := range m.AddAttributes { + change := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Change") + change.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagEnumerated, uint64(AddAttribute), "Operation")) + change.AppendChild(attribute.encode()) + changes.AppendChild(change) + } + for _, attribute := range m.DeleteAttributes { + change := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Change") + change.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagEnumerated, uint64(DeleteAttribute), "Operation")) + change.AppendChild(attribute.encode()) + changes.AppendChild(change) + } + for _, attribute := range m.ReplaceAttributes { + change := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Change") + change.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagEnumerated, uint64(ReplaceAttribute), "Operation")) + change.AppendChild(attribute.encode()) + changes.AppendChild(change) + } + request.AppendChild(changes) + return request +} + +// NewModifyRequest creates a modify request for the given DN +func NewModifyRequest( + dn string, +) *ModifyRequest { + return &ModifyRequest{ + DN: dn, + } +} + +// Modify performs the ModifyRequest +func (l *Conn) Modify(modifyRequest *ModifyRequest) error { + packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") + packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) + packet.AppendChild(modifyRequest.encode()) + + l.Debug.PrintPacket(packet) + + msgCtx, err := l.sendMessage(packet) + if err != nil { + return err + } + defer l.finishMessage(msgCtx) + + l.Debug.Printf("%d: waiting for response", msgCtx.id) + packetResponse, ok := <-msgCtx.responses + if !ok { + return NewError(ErrorNetwork, errors.New("ldap: response channel closed")) + } + packet, err = packetResponse.ReadPacket() + l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + if err != nil { + return err + } + + if l.Debug { + if err := addLDAPDescriptions(packet); err != nil { + return err + } + ber.PrintPacket(packet) + } + + if packet.Children[1].Tag == ApplicationModifyResponse { + resultCode, resultDescription := getLDAPResultCode(packet) + if resultCode != 0 { + return NewError(resultCode, errors.New(resultDescription)) + } + } else { + log.Printf("Unexpected Response: %d", packet.Children[1].Tag) + } + + l.Debug.Printf("%d: returning", msgCtx.id) + return nil +} diff --git a/vendor/gopkg.in/ldap.v2/passwdmodify.go b/vendor/gopkg.in/ldap.v2/passwdmodify.go new file mode 100644 index 0000000000000..7d8246fd1895f --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/passwdmodify.go @@ -0,0 +1,148 @@ +// This file contains the password modify extended operation as specified in rfc 3062 +// +// https://tools.ietf.org/html/rfc3062 +// + +package ldap + +import ( + "errors" + "fmt" + + "gopkg.in/asn1-ber.v1" +) + +const ( + passwordModifyOID = "1.3.6.1.4.1.4203.1.11.1" +) + +// PasswordModifyRequest implements the Password Modify Extended Operation as defined in https://www.ietf.org/rfc/rfc3062.txt +type PasswordModifyRequest struct { + // UserIdentity is an optional string representation of the user associated with the request. + // This string may or may not be an LDAPDN [RFC2253]. + // If no UserIdentity field is present, the request acts up upon the password of the user currently associated with the LDAP session + UserIdentity string + // OldPassword, if present, contains the user's current password + OldPassword string + // NewPassword, if present, contains the desired password for this user + NewPassword string +} + +// PasswordModifyResult holds the server response to a PasswordModifyRequest +type PasswordModifyResult struct { + // GeneratedPassword holds a password generated by the server, if present + GeneratedPassword string +} + +func (r *PasswordModifyRequest) encode() (*ber.Packet, error) { + request := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationExtendedRequest, nil, "Password Modify Extended Operation") + request.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 0, passwordModifyOID, "Extended Request Name: Password Modify OID")) + extendedRequestValue := ber.Encode(ber.ClassContext, ber.TypePrimitive, 1, nil, "Extended Request Value: Password Modify Request") + passwordModifyRequestValue := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Password Modify Request") + if r.UserIdentity != "" { + passwordModifyRequestValue.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 0, r.UserIdentity, "User Identity")) + } + if r.OldPassword != "" { + passwordModifyRequestValue.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 1, r.OldPassword, "Old Password")) + } + if r.NewPassword != "" { + passwordModifyRequestValue.AppendChild(ber.NewString(ber.ClassContext, ber.TypePrimitive, 2, r.NewPassword, "New Password")) + } + + extendedRequestValue.AppendChild(passwordModifyRequestValue) + request.AppendChild(extendedRequestValue) + + return request, nil +} + +// NewPasswordModifyRequest creates a new PasswordModifyRequest +// +// According to the RFC 3602: +// userIdentity is a string representing the user associated with the request. +// This string may or may not be an LDAPDN (RFC 2253). +// If userIdentity is empty then the operation will act on the user associated +// with the session. +// +// oldPassword is the current user's password, it can be empty or it can be +// needed depending on the session user access rights (usually an administrator +// can change a user's password without knowing the current one) and the +// password policy (see pwdSafeModify password policy's attribute) +// +// newPassword is the desired user's password. If empty the server can return +// an error or generate a new password that will be available in the +// PasswordModifyResult.GeneratedPassword +// +func NewPasswordModifyRequest(userIdentity string, oldPassword string, newPassword string) *PasswordModifyRequest { + return &PasswordModifyRequest{ + UserIdentity: userIdentity, + OldPassword: oldPassword, + NewPassword: newPassword, + } +} + +// PasswordModify performs the modification request +func (l *Conn) PasswordModify(passwordModifyRequest *PasswordModifyRequest) (*PasswordModifyResult, error) { + packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") + packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) + + encodedPasswordModifyRequest, err := passwordModifyRequest.encode() + if err != nil { + return nil, err + } + packet.AppendChild(encodedPasswordModifyRequest) + + l.Debug.PrintPacket(packet) + + msgCtx, err := l.sendMessage(packet) + if err != nil { + return nil, err + } + defer l.finishMessage(msgCtx) + + result := &PasswordModifyResult{} + + l.Debug.Printf("%d: waiting for response", msgCtx.id) + packetResponse, ok := <-msgCtx.responses + if !ok { + return nil, NewError(ErrorNetwork, errors.New("ldap: response channel closed")) + } + packet, err = packetResponse.ReadPacket() + l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + if err != nil { + return nil, err + } + + if packet == nil { + return nil, NewError(ErrorNetwork, errors.New("ldap: could not retrieve message")) + } + + if l.Debug { + if err := addLDAPDescriptions(packet); err != nil { + return nil, err + } + ber.PrintPacket(packet) + } + + if packet.Children[1].Tag == ApplicationExtendedResponse { + resultCode, resultDescription := getLDAPResultCode(packet) + if resultCode != 0 { + return nil, NewError(resultCode, errors.New(resultDescription)) + } + } else { + return nil, NewError(ErrorUnexpectedResponse, fmt.Errorf("Unexpected Response: %d", packet.Children[1].Tag)) + } + + extendedResponse := packet.Children[1] + for _, child := range extendedResponse.Children { + if child.Tag == 11 { + passwordModifyResponseValue := ber.DecodePacket(child.Data.Bytes()) + if len(passwordModifyResponseValue.Children) == 1 { + if passwordModifyResponseValue.Children[0].Tag == 0 { + result.GeneratedPassword = ber.DecodeString(passwordModifyResponseValue.Children[0].Data.Bytes()) + } + } + } + } + + return result, nil +} diff --git a/vendor/gopkg.in/ldap.v2/search.go b/vendor/gopkg.in/ldap.v2/search.go new file mode 100644 index 0000000000000..2a99894c94ba3 --- /dev/null +++ b/vendor/gopkg.in/ldap.v2/search.go @@ -0,0 +1,450 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// +// File contains Search functionality +// +// https://tools.ietf.org/html/rfc4511 +// +// SearchRequest ::= [APPLICATION 3] SEQUENCE { +// baseObject LDAPDN, +// scope ENUMERATED { +// baseObject (0), +// singleLevel (1), +// wholeSubtree (2), +// ... }, +// derefAliases ENUMERATED { +// neverDerefAliases (0), +// derefInSearching (1), +// derefFindingBaseObj (2), +// derefAlways (3) }, +// sizeLimit INTEGER (0 .. maxInt), +// timeLimit INTEGER (0 .. maxInt), +// typesOnly BOOLEAN, +// filter Filter, +// attributes AttributeSelection } +// +// AttributeSelection ::= SEQUENCE OF selector LDAPString +// -- The LDAPString is constrained to +// -- in Section 4.5.1.8 +// +// Filter ::= CHOICE { +// and [0] SET SIZE (1..MAX) OF filter Filter, +// or [1] SET SIZE (1..MAX) OF filter Filter, +// not [2] Filter, +// equalityMatch [3] AttributeValueAssertion, +// substrings [4] SubstringFilter, +// greaterOrEqual [5] AttributeValueAssertion, +// lessOrEqual [6] AttributeValueAssertion, +// present [7] AttributeDescription, +// approxMatch [8] AttributeValueAssertion, +// extensibleMatch [9] MatchingRuleAssertion, +// ... } +// +// SubstringFilter ::= SEQUENCE { +// type AttributeDescription, +// substrings SEQUENCE SIZE (1..MAX) OF substring CHOICE { +// initial [0] AssertionValue, -- can occur at most once +// any [1] AssertionValue, +// final [2] AssertionValue } -- can occur at most once +// } +// +// MatchingRuleAssertion ::= SEQUENCE { +// matchingRule [1] MatchingRuleId OPTIONAL, +// type [2] AttributeDescription OPTIONAL, +// matchValue [3] AssertionValue, +// dnAttributes [4] BOOLEAN DEFAULT FALSE } +// +// + +package ldap + +import ( + "errors" + "fmt" + "sort" + "strings" + + "gopkg.in/asn1-ber.v1" +) + +// scope choices +const ( + ScopeBaseObject = 0 + ScopeSingleLevel = 1 + ScopeWholeSubtree = 2 +) + +// ScopeMap contains human readable descriptions of scope choices +var ScopeMap = map[int]string{ + ScopeBaseObject: "Base Object", + ScopeSingleLevel: "Single Level", + ScopeWholeSubtree: "Whole Subtree", +} + +// derefAliases +const ( + NeverDerefAliases = 0 + DerefInSearching = 1 + DerefFindingBaseObj = 2 + DerefAlways = 3 +) + +// DerefMap contains human readable descriptions of derefAliases choices +var DerefMap = map[int]string{ + NeverDerefAliases: "NeverDerefAliases", + DerefInSearching: "DerefInSearching", + DerefFindingBaseObj: "DerefFindingBaseObj", + DerefAlways: "DerefAlways", +} + +// NewEntry returns an Entry object with the specified distinguished name and attribute key-value pairs. +// The map of attributes is accessed in alphabetical order of the keys in order to ensure that, for the +// same input map of attributes, the output entry will contain the same order of attributes +func NewEntry(dn string, attributes map[string][]string) *Entry { + var attributeNames []string + for attributeName := range attributes { + attributeNames = append(attributeNames, attributeName) + } + sort.Strings(attributeNames) + + var encodedAttributes []*EntryAttribute + for _, attributeName := range attributeNames { + encodedAttributes = append(encodedAttributes, NewEntryAttribute(attributeName, attributes[attributeName])) + } + return &Entry{ + DN: dn, + Attributes: encodedAttributes, + } +} + +// Entry represents a single search result entry +type Entry struct { + // DN is the distinguished name of the entry + DN string + // Attributes are the returned attributes for the entry + Attributes []*EntryAttribute +} + +// GetAttributeValues returns the values for the named attribute, or an empty list +func (e *Entry) GetAttributeValues(attribute string) []string { + for _, attr := range e.Attributes { + if attr.Name == attribute { + return attr.Values + } + } + return []string{} +} + +// GetRawAttributeValues returns the byte values for the named attribute, or an empty list +func (e *Entry) GetRawAttributeValues(attribute string) [][]byte { + for _, attr := range e.Attributes { + if attr.Name == attribute { + return attr.ByteValues + } + } + return [][]byte{} +} + +// GetAttributeValue returns the first value for the named attribute, or "" +func (e *Entry) GetAttributeValue(attribute string) string { + values := e.GetAttributeValues(attribute) + if len(values) == 0 { + return "" + } + return values[0] +} + +// GetRawAttributeValue returns the first value for the named attribute, or an empty slice +func (e *Entry) GetRawAttributeValue(attribute string) []byte { + values := e.GetRawAttributeValues(attribute) + if len(values) == 0 { + return []byte{} + } + return values[0] +} + +// Print outputs a human-readable description +func (e *Entry) Print() { + fmt.Printf("DN: %s\n", e.DN) + for _, attr := range e.Attributes { + attr.Print() + } +} + +// PrettyPrint outputs a human-readable description indenting +func (e *Entry) PrettyPrint(indent int) { + fmt.Printf("%sDN: %s\n", strings.Repeat(" ", indent), e.DN) + for _, attr := range e.Attributes { + attr.PrettyPrint(indent + 2) + } +} + +// NewEntryAttribute returns a new EntryAttribute with the desired key-value pair +func NewEntryAttribute(name string, values []string) *EntryAttribute { + var bytes [][]byte + for _, value := range values { + bytes = append(bytes, []byte(value)) + } + return &EntryAttribute{ + Name: name, + Values: values, + ByteValues: bytes, + } +} + +// EntryAttribute holds a single attribute +type EntryAttribute struct { + // Name is the name of the attribute + Name string + // Values contain the string values of the attribute + Values []string + // ByteValues contain the raw values of the attribute + ByteValues [][]byte +} + +// Print outputs a human-readable description +func (e *EntryAttribute) Print() { + fmt.Printf("%s: %s\n", e.Name, e.Values) +} + +// PrettyPrint outputs a human-readable description with indenting +func (e *EntryAttribute) PrettyPrint(indent int) { + fmt.Printf("%s%s: %s\n", strings.Repeat(" ", indent), e.Name, e.Values) +} + +// SearchResult holds the server's response to a search request +type SearchResult struct { + // Entries are the returned entries + Entries []*Entry + // Referrals are the returned referrals + Referrals []string + // Controls are the returned controls + Controls []Control +} + +// Print outputs a human-readable description +func (s *SearchResult) Print() { + for _, entry := range s.Entries { + entry.Print() + } +} + +// PrettyPrint outputs a human-readable description with indenting +func (s *SearchResult) PrettyPrint(indent int) { + for _, entry := range s.Entries { + entry.PrettyPrint(indent) + } +} + +// SearchRequest represents a search request to send to the server +type SearchRequest struct { + BaseDN string + Scope int + DerefAliases int + SizeLimit int + TimeLimit int + TypesOnly bool + Filter string + Attributes []string + Controls []Control +} + +func (s *SearchRequest) encode() (*ber.Packet, error) { + request := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationSearchRequest, nil, "Search Request") + request.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, s.BaseDN, "Base DN")) + request.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagEnumerated, uint64(s.Scope), "Scope")) + request.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagEnumerated, uint64(s.DerefAliases), "Deref Aliases")) + request.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, uint64(s.SizeLimit), "Size Limit")) + request.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, uint64(s.TimeLimit), "Time Limit")) + request.AppendChild(ber.NewBoolean(ber.ClassUniversal, ber.TypePrimitive, ber.TagBoolean, s.TypesOnly, "Types Only")) + // compile and encode filter + filterPacket, err := CompileFilter(s.Filter) + if err != nil { + return nil, err + } + request.AppendChild(filterPacket) + // encode attributes + attributesPacket := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "Attributes") + for _, attribute := range s.Attributes { + attributesPacket.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, attribute, "Attribute")) + } + request.AppendChild(attributesPacket) + return request, nil +} + +// NewSearchRequest creates a new search request +func NewSearchRequest( + BaseDN string, + Scope, DerefAliases, SizeLimit, TimeLimit int, + TypesOnly bool, + Filter string, + Attributes []string, + Controls []Control, +) *SearchRequest { + return &SearchRequest{ + BaseDN: BaseDN, + Scope: Scope, + DerefAliases: DerefAliases, + SizeLimit: SizeLimit, + TimeLimit: TimeLimit, + TypesOnly: TypesOnly, + Filter: Filter, + Attributes: Attributes, + Controls: Controls, + } +} + +// SearchWithPaging accepts a search request and desired page size in order to execute LDAP queries to fulfill the +// search request. All paged LDAP query responses will be buffered and the final result will be returned atomically. +// The following four cases are possible given the arguments: +// - given SearchRequest missing a control of type ControlTypePaging: we will add one with the desired paging size +// - given SearchRequest contains a control of type ControlTypePaging that isn't actually a ControlPaging: fail without issuing any queries +// - given SearchRequest contains a control of type ControlTypePaging with pagingSize equal to the size requested: no change to the search request +// - given SearchRequest contains a control of type ControlTypePaging with pagingSize not equal to the size requested: fail without issuing any queries +// A requested pagingSize of 0 is interpreted as no limit by LDAP servers. +func (l *Conn) SearchWithPaging(searchRequest *SearchRequest, pagingSize uint32) (*SearchResult, error) { + var pagingControl *ControlPaging + + control := FindControl(searchRequest.Controls, ControlTypePaging) + if control == nil { + pagingControl = NewControlPaging(pagingSize) + searchRequest.Controls = append(searchRequest.Controls, pagingControl) + } else { + castControl, ok := control.(*ControlPaging) + if !ok { + return nil, fmt.Errorf("Expected paging control to be of type *ControlPaging, got %v", control) + } + if castControl.PagingSize != pagingSize { + return nil, fmt.Errorf("Paging size given in search request (%d) conflicts with size given in search call (%d)", castControl.PagingSize, pagingSize) + } + pagingControl = castControl + } + + searchResult := new(SearchResult) + for { + result, err := l.Search(searchRequest) + l.Debug.Printf("Looking for Paging Control...") + if err != nil { + return searchResult, err + } + if result == nil { + return searchResult, NewError(ErrorNetwork, errors.New("ldap: packet not received")) + } + + for _, entry := range result.Entries { + searchResult.Entries = append(searchResult.Entries, entry) + } + for _, referral := range result.Referrals { + searchResult.Referrals = append(searchResult.Referrals, referral) + } + for _, control := range result.Controls { + searchResult.Controls = append(searchResult.Controls, control) + } + + l.Debug.Printf("Looking for Paging Control...") + pagingResult := FindControl(result.Controls, ControlTypePaging) + if pagingResult == nil { + pagingControl = nil + l.Debug.Printf("Could not find paging control. Breaking...") + break + } + + cookie := pagingResult.(*ControlPaging).Cookie + if len(cookie) == 0 { + pagingControl = nil + l.Debug.Printf("Could not find cookie. Breaking...") + break + } + pagingControl.SetCookie(cookie) + } + + if pagingControl != nil { + l.Debug.Printf("Abandoning Paging...") + pagingControl.PagingSize = 0 + l.Search(searchRequest) + } + + return searchResult, nil +} + +// Search performs the given search request +func (l *Conn) Search(searchRequest *SearchRequest) (*SearchResult, error) { + packet := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request") + packet.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, l.nextMessageID(), "MessageID")) + // encode search request + encodedSearchRequest, err := searchRequest.encode() + if err != nil { + return nil, err + } + packet.AppendChild(encodedSearchRequest) + // encode search controls + if searchRequest.Controls != nil { + packet.AppendChild(encodeControls(searchRequest.Controls)) + } + + l.Debug.PrintPacket(packet) + + msgCtx, err := l.sendMessage(packet) + if err != nil { + return nil, err + } + defer l.finishMessage(msgCtx) + + result := &SearchResult{ + Entries: make([]*Entry, 0), + Referrals: make([]string, 0), + Controls: make([]Control, 0)} + + foundSearchResultDone := false + for !foundSearchResultDone { + l.Debug.Printf("%d: waiting for response", msgCtx.id) + packetResponse, ok := <-msgCtx.responses + if !ok { + return nil, NewError(ErrorNetwork, errors.New("ldap: response channel closed")) + } + packet, err = packetResponse.ReadPacket() + l.Debug.Printf("%d: got response %p", msgCtx.id, packet) + if err != nil { + return nil, err + } + + if l.Debug { + if err := addLDAPDescriptions(packet); err != nil { + return nil, err + } + ber.PrintPacket(packet) + } + + switch packet.Children[1].Tag { + case 4: + entry := new(Entry) + entry.DN = packet.Children[1].Children[0].Value.(string) + for _, child := range packet.Children[1].Children[1].Children { + attr := new(EntryAttribute) + attr.Name = child.Children[0].Value.(string) + for _, value := range child.Children[1].Children { + attr.Values = append(attr.Values, value.Value.(string)) + attr.ByteValues = append(attr.ByteValues, value.ByteValue) + } + entry.Attributes = append(entry.Attributes, attr) + } + result.Entries = append(result.Entries, entry) + case 5: + resultCode, resultDescription := getLDAPResultCode(packet) + if resultCode != 0 { + return result, NewError(resultCode, errors.New(resultDescription)) + } + if len(packet.Children) == 3 { + for _, child := range packet.Children[2].Children { + result.Controls = append(result.Controls, DecodeControl(child)) + } + } + foundSearchResultDone = true + case 19: + result.Referrals = append(result.Referrals, packet.Children[1].Children[0].Value.(string)) + } + } + l.Debug.Printf("%d: returning", msgCtx.id) + return result, nil +} diff --git a/vendor/gopkg.in/natefinch/lumberjack.v2/BUILD b/vendor/gopkg.in/natefinch/lumberjack.v2/BUILD deleted file mode 100644 index fbe225737aa39..0000000000000 --- a/vendor/gopkg.in/natefinch/lumberjack.v2/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "chown.go", - "chown_linux.go", - "lumberjack.go", - ], - importmap = "k8s.io/kubernetes/vendor/gopkg.in/natefinch/lumberjack.v2", - importpath = "gopkg.in/natefinch/lumberjack.v2", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gopkg.in/square/go-jose.v2/BUILD b/vendor/gopkg.in/square/go-jose.v2/BUILD deleted file mode 100644 index c40ade04d8e03..0000000000000 --- a/vendor/gopkg.in/square/go-jose.v2/BUILD +++ /dev/null @@ -1,46 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "asymmetric.go", - "crypter.go", - "doc.go", - "encoding.go", - "jwe.go", - "jwk.go", - "jws.go", - "opaque.go", - "shared.go", - "signing.go", - "symmetric.go", - ], - importmap = "k8s.io/kubernetes/vendor/gopkg.in/square/go-jose.v2", - importpath = "gopkg.in/square/go-jose.v2", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/crypto/ed25519:go_default_library", - "//vendor/golang.org/x/crypto/pbkdf2:go_default_library", - "//vendor/gopkg.in/square/go-jose.v2/cipher:go_default_library", - "//vendor/gopkg.in/square/go-jose.v2/json:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/gopkg.in/square/go-jose.v2/cipher:all-srcs", - "//vendor/gopkg.in/square/go-jose.v2/json:all-srcs", - "//vendor/gopkg.in/square/go-jose.v2/jwt:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gopkg.in/square/go-jose.v2/cipher/BUILD b/vendor/gopkg.in/square/go-jose.v2/cipher/BUILD deleted file mode 100644 index 8aeced59d219e..0000000000000 --- a/vendor/gopkg.in/square/go-jose.v2/cipher/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cbc_hmac.go", - "concat_kdf.go", - "ecdh_es.go", - "key_wrap.go", - ], - importmap = "k8s.io/kubernetes/vendor/gopkg.in/square/go-jose.v2/cipher", - importpath = "gopkg.in/square/go-jose.v2/cipher", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gopkg.in/square/go-jose.v2/json/BUILD b/vendor/gopkg.in/square/go-jose.v2/json/BUILD deleted file mode 100644 index e35ed8ae35b87..0000000000000 --- a/vendor/gopkg.in/square/go-jose.v2/json/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "decode.go", - "encode.go", - "indent.go", - "scanner.go", - "stream.go", - "tags.go", - ], - importmap = "k8s.io/kubernetes/vendor/gopkg.in/square/go-jose.v2/json", - importpath = "gopkg.in/square/go-jose.v2/json", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gopkg.in/square/go-jose.v2/jwt/BUILD b/vendor/gopkg.in/square/go-jose.v2/jwt/BUILD deleted file mode 100644 index 82d3e91fc34a6..0000000000000 --- a/vendor/gopkg.in/square/go-jose.v2/jwt/BUILD +++ /dev/null @@ -1,34 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "builder.go", - "claims.go", - "doc.go", - "errors.go", - "jwt.go", - "validation.go", - ], - importmap = "k8s.io/kubernetes/vendor/gopkg.in/square/go-jose.v2/jwt", - importpath = "gopkg.in/square/go-jose.v2/jwt", - visibility = ["//visibility:public"], - deps = [ - "//vendor/gopkg.in/square/go-jose.v2:go_default_library", - "//vendor/gopkg.in/square/go-jose.v2/json:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gopkg.in/tomb.v1/BUILD b/vendor/gopkg.in/tomb.v1/BUILD deleted file mode 100644 index 25bf1d8bf061c..0000000000000 --- a/vendor/gopkg.in/tomb.v1/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["tomb.go"], - importmap = "k8s.io/kubernetes/vendor/gopkg.in/tomb.v1", - importpath = "gopkg.in/tomb.v1", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gopkg.in/warnings.v0/BUILD b/vendor/gopkg.in/warnings.v0/BUILD deleted file mode 100644 index 66073aaa19f96..0000000000000 --- a/vendor/gopkg.in/warnings.v0/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["warnings.go"], - importmap = "k8s.io/kubernetes/vendor/gopkg.in/warnings.v0", - importpath = "gopkg.in/warnings.v0", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/gopkg.in/yaml.v2/BUILD b/vendor/gopkg.in/yaml.v2/BUILD deleted file mode 100644 index e4ea2aefaa358..0000000000000 --- a/vendor/gopkg.in/yaml.v2/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "apic.go", - "decode.go", - "emitterc.go", - "encode.go", - "parserc.go", - "readerc.go", - "resolve.go", - "scannerc.go", - "sorter.go", - "writerc.go", - "yaml.go", - "yamlh.go", - "yamlprivateh.go", - ], - importmap = "k8s.io/kubernetes/vendor/gopkg.in/yaml.v2", - importpath = "gopkg.in/yaml.v2", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/gengo/args/BUILD b/vendor/k8s.io/gengo/args/BUILD deleted file mode 100644 index 969a80e167eb8..0000000000000 --- a/vendor/k8s.io/gengo/args/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["args.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/gengo/args", - importpath = "k8s.io/gengo/args", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/spf13/pflag:go_default_library", - "//vendor/k8s.io/gengo/generator:go_default_library", - "//vendor/k8s.io/gengo/namer:go_default_library", - "//vendor/k8s.io/gengo/parser:go_default_library", - "//vendor/k8s.io/gengo/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/gengo/examples/deepcopy-gen/generators/BUILD b/vendor/k8s.io/gengo/examples/deepcopy-gen/generators/BUILD deleted file mode 100644 index 8f43480df281a..0000000000000 --- a/vendor/k8s.io/gengo/examples/deepcopy-gen/generators/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["deepcopy.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/gengo/examples/deepcopy-gen/generators", - importpath = "k8s.io/gengo/examples/deepcopy-gen/generators", - visibility = ["//visibility:public"], - deps = [ - "//vendor/k8s.io/gengo/args:go_default_library", - "//vendor/k8s.io/gengo/examples/set-gen/sets:go_default_library", - "//vendor/k8s.io/gengo/generator:go_default_library", - "//vendor/k8s.io/gengo/namer:go_default_library", - "//vendor/k8s.io/gengo/types:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/gengo/examples/defaulter-gen/generators/BUILD b/vendor/k8s.io/gengo/examples/defaulter-gen/generators/BUILD deleted file mode 100644 index 15b9a2af3d8db..0000000000000 --- a/vendor/k8s.io/gengo/examples/defaulter-gen/generators/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["defaulter.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/gengo/examples/defaulter-gen/generators", - importpath = "k8s.io/gengo/examples/defaulter-gen/generators", - visibility = ["//visibility:public"], - deps = [ - "//vendor/k8s.io/gengo/args:go_default_library", - "//vendor/k8s.io/gengo/generator:go_default_library", - "//vendor/k8s.io/gengo/namer:go_default_library", - "//vendor/k8s.io/gengo/types:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/gengo/examples/import-boss/generators/BUILD b/vendor/k8s.io/gengo/examples/import-boss/generators/BUILD deleted file mode 100644 index da135f115da7b..0000000000000 --- a/vendor/k8s.io/gengo/examples/import-boss/generators/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["import_restrict.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/gengo/examples/import-boss/generators", - importpath = "k8s.io/gengo/examples/import-boss/generators", - visibility = ["//visibility:public"], - deps = [ - "//vendor/k8s.io/gengo/args:go_default_library", - "//vendor/k8s.io/gengo/generator:go_default_library", - "//vendor/k8s.io/gengo/namer:go_default_library", - "//vendor/k8s.io/gengo/types:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - "//vendor/sigs.k8s.io/yaml:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/gengo/examples/set-gen/generators/BUILD b/vendor/k8s.io/gengo/examples/set-gen/generators/BUILD deleted file mode 100644 index 0f70f0ebf995b..0000000000000 --- a/vendor/k8s.io/gengo/examples/set-gen/generators/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "sets.go", - "tags.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/gengo/examples/set-gen/generators", - importpath = "k8s.io/gengo/examples/set-gen/generators", - visibility = ["//visibility:public"], - deps = [ - "//vendor/k8s.io/gengo/args:go_default_library", - "//vendor/k8s.io/gengo/generator:go_default_library", - "//vendor/k8s.io/gengo/namer:go_default_library", - "//vendor/k8s.io/gengo/types:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/gengo/examples/set-gen/sets/BUILD b/vendor/k8s.io/gengo/examples/set-gen/sets/BUILD deleted file mode 100644 index 94c38c42bd459..0000000000000 --- a/vendor/k8s.io/gengo/examples/set-gen/sets/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "byte.go", - "doc.go", - "empty.go", - "int.go", - "int64.go", - "string.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/gengo/examples/set-gen/sets", - importpath = "k8s.io/gengo/examples/set-gen/sets", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/gengo/generator/BUILD b/vendor/k8s.io/gengo/generator/BUILD deleted file mode 100644 index 727ecf0b4a48b..0000000000000 --- a/vendor/k8s.io/gengo/generator/BUILD +++ /dev/null @@ -1,40 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "default_generator.go", - "default_package.go", - "doc.go", - "error_tracker.go", - "execute.go", - "generator.go", - "import_tracker.go", - "snippet_writer.go", - "transitive_closure.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/gengo/generator", - importpath = "k8s.io/gengo/generator", - visibility = ["//visibility:public"], - deps = [ - "//vendor/golang.org/x/tools/imports:go_default_library", - "//vendor/k8s.io/gengo/namer:go_default_library", - "//vendor/k8s.io/gengo/parser:go_default_library", - "//vendor/k8s.io/gengo/types:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/gengo/namer/BUILD b/vendor/k8s.io/gengo/namer/BUILD deleted file mode 100644 index 045081034ea37..0000000000000 --- a/vendor/k8s.io/gengo/namer/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "import_tracker.go", - "namer.go", - "order.go", - "plural_namer.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/gengo/namer", - importpath = "k8s.io/gengo/namer", - visibility = ["//visibility:public"], - deps = ["//vendor/k8s.io/gengo/types:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/gengo/parser/BUILD b/vendor/k8s.io/gengo/parser/BUILD deleted file mode 100644 index 9071823cb2c5e..0000000000000 --- a/vendor/k8s.io/gengo/parser/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "parse.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/gengo/parser", - importpath = "k8s.io/gengo/parser", - visibility = ["//visibility:public"], - deps = [ - "//vendor/k8s.io/gengo/types:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/gengo/types/BUILD b/vendor/k8s.io/gengo/types/BUILD deleted file mode 100644 index 06691a90abbe5..0000000000000 --- a/vendor/k8s.io/gengo/types/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "comments.go", - "doc.go", - "flatten.go", - "types.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/gengo/types", - importpath = "k8s.io/gengo/types", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/heapster/metrics/api/v1/types/BUILD b/vendor/k8s.io/heapster/metrics/api/v1/types/BUILD deleted file mode 100644 index 08207fdb9a938..0000000000000 --- a/vendor/k8s.io/heapster/metrics/api/v1/types/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "historical_types.go", - "model_types.go", - "types.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/heapster/metrics/api/v1/types", - importpath = "k8s.io/heapster/metrics/api/v1/types", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/klog/v2/BUILD b/vendor/k8s.io/klog/v2/BUILD deleted file mode 100644 index c918d762bf790..0000000000000 --- a/vendor/k8s.io/klog/v2/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "klog.go", - "klog_file.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/klog/v2", - importpath = "k8s.io/klog/v2", - visibility = ["//visibility:public"], - deps = ["//vendor/github.com/go-logr/logr:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/kube-openapi/cmd/openapi-gen/BUILD b/vendor/k8s.io/kube-openapi/cmd/openapi-gen/BUILD deleted file mode 100644 index 90eb84414ce4f..0000000000000 --- a/vendor/k8s.io/kube-openapi/cmd/openapi-gen/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") - -go_library( - name = "go_default_library", - srcs = ["openapi-gen.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-openapi/cmd/openapi-gen", - importpath = "k8s.io/kube-openapi/cmd/openapi-gen", - visibility = ["//visibility:private"], - deps = [ - "//vendor/github.com/spf13/pflag:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - "//vendor/k8s.io/kube-openapi/cmd/openapi-gen/args:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/generators:go_default_library", - ], -) - -go_binary( - name = "openapi-gen", - embed = [":go_default_library"], - tags = ["manual"], - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/k8s.io/kube-openapi/cmd/openapi-gen/args:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/kube-openapi/cmd/openapi-gen/args/BUILD b/vendor/k8s.io/kube-openapi/cmd/openapi-gen/args/BUILD deleted file mode 100644 index d659baf63cc9e..0000000000000 --- a/vendor/k8s.io/kube-openapi/cmd/openapi-gen/args/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["args.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-openapi/cmd/openapi-gen/args", - importpath = "k8s.io/kube-openapi/cmd/openapi-gen/args", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/spf13/pflag:go_default_library", - "//vendor/k8s.io/gengo/args:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/kube-openapi/pkg/aggregator/BUILD b/vendor/k8s.io/kube-openapi/pkg/aggregator/BUILD deleted file mode 100644 index f4e30b50b307c..0000000000000 --- a/vendor/k8s.io/kube-openapi/pkg/aggregator/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "aggregator.go", - "mutating_walker.go", - "walker.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-openapi/pkg/aggregator", - importpath = "k8s.io/kube-openapi/pkg/aggregator", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/go-openapi/spec:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/util:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/kube-openapi/pkg/builder/BUILD b/vendor/k8s.io/kube-openapi/pkg/builder/BUILD deleted file mode 100644 index 0dd6b9868ffdb..0000000000000 --- a/vendor/k8s.io/kube-openapi/pkg/builder/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "openapi.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-openapi/pkg/builder", - importpath = "k8s.io/kube-openapi/pkg/builder", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/emicklei/go-restful:go_default_library", - "//vendor/github.com/go-openapi/spec:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/common:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/util:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/kube-openapi/pkg/common/BUILD b/vendor/k8s.io/kube-openapi/pkg/common/BUILD deleted file mode 100644 index fe28bbebc1e84..0000000000000 --- a/vendor/k8s.io/kube-openapi/pkg/common/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "common.go", - "doc.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-openapi/pkg/common", - importpath = "k8s.io/kube-openapi/pkg/common", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/emicklei/go-restful:go_default_library", - "//vendor/github.com/go-openapi/spec:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/kube-openapi/pkg/generators/BUILD b/vendor/k8s.io/kube-openapi/pkg/generators/BUILD deleted file mode 100644 index 4e2641b13de07..0000000000000 --- a/vendor/k8s.io/kube-openapi/pkg/generators/BUILD +++ /dev/null @@ -1,43 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "api_linter.go", - "config.go", - "extension.go", - "openapi.go", - "union.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-openapi/pkg/generators", - importpath = "k8s.io/kube-openapi/pkg/generators", - visibility = ["//visibility:public"], - deps = [ - "//vendor/k8s.io/gengo/args:go_default_library", - "//vendor/k8s.io/gengo/examples/set-gen/sets:go_default_library", - "//vendor/k8s.io/gengo/generator:go_default_library", - "//vendor/k8s.io/gengo/namer:go_default_library", - "//vendor/k8s.io/gengo/types:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - "//vendor/k8s.io/kube-openapi/cmd/openapi-gen/args:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/common:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/generators/rules:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/k8s.io/kube-openapi/pkg/generators/rules:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/kube-openapi/pkg/generators/rules/BUILD b/vendor/k8s.io/kube-openapi/pkg/generators/rules/BUILD deleted file mode 100644 index cb62c427e1dc4..0000000000000 --- a/vendor/k8s.io/kube-openapi/pkg/generators/rules/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "idl_tag.go", - "names_match.go", - "omitempty_match_case.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-openapi/pkg/generators/rules", - importpath = "k8s.io/kube-openapi/pkg/generators/rules", - visibility = ["//visibility:public"], - deps = [ - "//vendor/k8s.io/gengo/types:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/util/sets:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/kube-openapi/pkg/handler/BUILD b/vendor/k8s.io/kube-openapi/pkg/handler/BUILD deleted file mode 100644 index c24cc6c25fd51..0000000000000 --- a/vendor/k8s.io/kube-openapi/pkg/handler/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["handler.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-openapi/pkg/handler", - importpath = "k8s.io/kube-openapi/pkg/handler", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/NYTimes/gziphandler:go_default_library", - "//vendor/github.com/emicklei/go-restful:go_default_library", - "//vendor/github.com/go-openapi/spec:go_default_library", - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/github.com/googleapis/gnostic/compiler:go_default_library", - "//vendor/github.com/googleapis/gnostic/openapiv2:go_default_library", - "//vendor/github.com/json-iterator/go:go_default_library", - "//vendor/github.com/munnerz/goautoneg:go_default_library", - "//vendor/gopkg.in/yaml.v2:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/builder:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/common:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/kube-openapi/pkg/schemaconv/BUILD b/vendor/k8s.io/kube-openapi/pkg/schemaconv/BUILD deleted file mode 100644 index 0d1fd772c0607..0000000000000 --- a/vendor/k8s.io/kube-openapi/pkg/schemaconv/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["smd.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-openapi/pkg/schemaconv", - importpath = "k8s.io/kube-openapi/pkg/schemaconv", - visibility = ["//visibility:public"], - deps = [ - "//vendor/k8s.io/kube-openapi/pkg/util/proto:go_default_library", - "//vendor/sigs.k8s.io/structured-merge-diff/v4/schema:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/kube-openapi/pkg/util/BUILD b/vendor/k8s.io/kube-openapi/pkg/util/BUILD deleted file mode 100644 index ad41287bb5573..0000000000000 --- a/vendor/k8s.io/kube-openapi/pkg/util/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "trie.go", - "util.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-openapi/pkg/util", - importpath = "k8s.io/kube-openapi/pkg/util", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/k8s.io/kube-openapi/pkg/util/proto:all-srcs", - "//vendor/k8s.io/kube-openapi/pkg/util/sets:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/kube-openapi/pkg/util/proto/BUILD b/vendor/k8s.io/kube-openapi/pkg/util/proto/BUILD deleted file mode 100644 index 265f6683d7158..0000000000000 --- a/vendor/k8s.io/kube-openapi/pkg/util/proto/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "document.go", - "openapi.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-openapi/pkg/util/proto", - importpath = "k8s.io/kube-openapi/pkg/util/proto", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/googleapis/gnostic/openapiv2:go_default_library", - "//vendor/gopkg.in/yaml.v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/k8s.io/kube-openapi/pkg/util/proto/testing:all-srcs", - "//vendor/k8s.io/kube-openapi/pkg/util/proto/validation:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/kube-openapi/pkg/util/proto/testing/BUILD b/vendor/k8s.io/kube-openapi/pkg/util/proto/testing/BUILD deleted file mode 100644 index b7f617755e575..0000000000000 --- a/vendor/k8s.io/kube-openapi/pkg/util/proto/testing/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["openapi.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-openapi/pkg/util/proto/testing", - importpath = "k8s.io/kube-openapi/pkg/util/proto/testing", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/googleapis/gnostic/compiler:go_default_library", - "//vendor/github.com/googleapis/gnostic/openapiv2:go_default_library", - "//vendor/gopkg.in/yaml.v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/kube-openapi/pkg/util/proto/validation/BUILD b/vendor/k8s.io/kube-openapi/pkg/util/proto/validation/BUILD deleted file mode 100644 index 1e6eb63b8ce28..0000000000000 --- a/vendor/k8s.io/kube-openapi/pkg/util/proto/validation/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "errors.go", - "types.go", - "validation.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-openapi/pkg/util/proto/validation", - importpath = "k8s.io/kube-openapi/pkg/util/proto/validation", - visibility = ["//visibility:public"], - deps = ["//vendor/k8s.io/kube-openapi/pkg/util/proto:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/kube-openapi/pkg/util/sets/BUILD b/vendor/k8s.io/kube-openapi/pkg/util/sets/BUILD deleted file mode 100644 index bd2aafaf021b6..0000000000000 --- a/vendor/k8s.io/kube-openapi/pkg/util/sets/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "empty.go", - "string.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-openapi/pkg/util/sets", - importpath = "k8s.io/kube-openapi/pkg/util/sets", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/system-validators/validators/BUILD b/vendor/k8s.io/system-validators/validators/BUILD deleted file mode 100644 index 179235b5e098c..0000000000000 --- a/vendor/k8s.io/system-validators/validators/BUILD +++ /dev/null @@ -1,50 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cgroup_validator_linux.go", - "cgroup_validator_other.go", - "docker_validator.go", - "kernel_validator.go", - "kernel_validator_helper.go", - "os_validator.go", - "package_validator_linux.go", - "package_validator_other.go", - "report.go", - "types.go", - "types_unix.go", - "types_windows.go", - "validators.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/system-validators/validators", - importpath = "k8s.io/system-validators/validators", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/pkg/errors:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/github.com/blang/semver:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/github.com/blang/semver:go_default_library", - "//vendor/golang.org/x/sys/unix:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/buffer/BUILD b/vendor/k8s.io/utils/buffer/BUILD deleted file mode 100644 index 0f44f14ad2039..0000000000000 --- a/vendor/k8s.io/utils/buffer/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["ring_growing.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/buffer", - importpath = "k8s.io/utils/buffer", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/clock/BUILD b/vendor/k8s.io/utils/clock/BUILD deleted file mode 100644 index 1b2e304c37f37..0000000000000 --- a/vendor/k8s.io/utils/clock/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["clock.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/clock", - importpath = "k8s.io/utils/clock", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/exec/BUILD b/vendor/k8s.io/utils/exec/BUILD deleted file mode 100644 index 4fa22b95a5d34..0000000000000 --- a/vendor/k8s.io/utils/exec/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "exec.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/exec", - importpath = "k8s.io/utils/exec", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/k8s.io/utils/exec/testing:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/exec/testing/BUILD b/vendor/k8s.io/utils/exec/testing/BUILD deleted file mode 100644 index 2ff9f85b7264b..0000000000000 --- a/vendor/k8s.io/utils/exec/testing/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["fake_exec.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/exec/testing", - importpath = "k8s.io/utils/exec/testing", - visibility = ["//visibility:public"], - deps = ["//vendor/k8s.io/utils/exec:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/inotify/BUILD b/vendor/k8s.io/utils/inotify/BUILD deleted file mode 100644 index 1c527bd12d3fd..0000000000000 --- a/vendor/k8s.io/utils/inotify/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "inotify.go", - "inotify_linux.go", - "inotify_others.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/inotify", - importpath = "k8s.io/utils/inotify", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/integer/BUILD b/vendor/k8s.io/utils/integer/BUILD deleted file mode 100644 index 0999029515326..0000000000000 --- a/vendor/k8s.io/utils/integer/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["integer.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/integer", - importpath = "k8s.io/utils/integer", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/io/BUILD b/vendor/k8s.io/utils/io/BUILD deleted file mode 100644 index 17396a0c3d45e..0000000000000 --- a/vendor/k8s.io/utils/io/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["read.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/io", - importpath = "k8s.io/utils/io", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/keymutex/BUILD b/vendor/k8s.io/utils/keymutex/BUILD deleted file mode 100644 index cc867e4f2e12d..0000000000000 --- a/vendor/k8s.io/utils/keymutex/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "hashed.go", - "keymutex.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/keymutex", - importpath = "k8s.io/utils/keymutex", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/mount/BUILD b/vendor/k8s.io/utils/mount/BUILD deleted file mode 100644 index 2dded4405aa18..0000000000000 --- a/vendor/k8s.io/utils/mount/BUILD +++ /dev/null @@ -1,84 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "fake_mounter.go", - "mount.go", - "mount_helper_common.go", - "mount_helper_unix.go", - "mount_helper_windows.go", - "mount_linux.go", - "mount_unsupported.go", - "mount_windows.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/mount", - importpath = "k8s.io/utils/mount", - visibility = ["//visibility:public"], - deps = [ - "//vendor/k8s.io/klog/v2:go_default_library", - "//vendor/k8s.io/utils/exec:go_default_library", - ] + select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/k8s.io/utils/io:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/k8s.io/utils/io:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/k8s.io/utils/io:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/k8s.io/utils/io:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/k8s.io/utils/io:go_default_library", - ], - "@io_bazel_rules_go//go/platform:illumos": [ - "//vendor/k8s.io/utils/io:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/k8s.io/utils/io:go_default_library", - ], - "@io_bazel_rules_go//go/platform:js": [ - "//vendor/k8s.io/utils/io:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/k8s.io/utils/io:go_default_library", - ], - "@io_bazel_rules_go//go/platform:nacl": [ - "//vendor/k8s.io/utils/io:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/k8s.io/utils/io:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/k8s.io/utils/io:go_default_library", - ], - "@io_bazel_rules_go//go/platform:plan9": [ - "//vendor/k8s.io/utils/io:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/k8s.io/utils/io:go_default_library", - ], - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/k8s.io/utils/keymutex:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/net/BUILD b/vendor/k8s.io/utils/net/BUILD deleted file mode 100644 index 704e873064af9..0000000000000 --- a/vendor/k8s.io/utils/net/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "ipnet.go", - "net.go", - "port.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/net", - importpath = "k8s.io/utils/net", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/nsenter/BUILD b/vendor/k8s.io/utils/nsenter/BUILD deleted file mode 100644 index 8c08b176e5074..0000000000000 --- a/vendor/k8s.io/utils/nsenter/BUILD +++ /dev/null @@ -1,76 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "nsenter.go", - "nsenter_unsupported.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/nsenter", - importpath = "k8s.io/utils/nsenter", - visibility = ["//visibility:public"], - deps = select({ - "@io_bazel_rules_go//go/platform:aix": [ - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/k8s.io/klog/v2:go_default_library", - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "@io_bazel_rules_go//go/platform:illumos": [ - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "@io_bazel_rules_go//go/platform:ios": [ - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "@io_bazel_rules_go//go/platform:js": [ - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "@io_bazel_rules_go//go/platform:linux": [ - "//vendor/k8s.io/klog/v2:go_default_library", - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "@io_bazel_rules_go//go/platform:nacl": [ - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "@io_bazel_rules_go//go/platform:plan9": [ - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "@io_bazel_rules_go//go/platform:windows": [ - "//vendor/k8s.io/utils/exec:go_default_library", - ], - "//conditions:default": [], - }), -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/path/BUILD b/vendor/k8s.io/utils/path/BUILD deleted file mode 100644 index 43e3f6f88d6a7..0000000000000 --- a/vendor/k8s.io/utils/path/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["file.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/path", - importpath = "k8s.io/utils/path", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/pointer/BUILD b/vendor/k8s.io/utils/pointer/BUILD deleted file mode 100644 index a41ce26388af8..0000000000000 --- a/vendor/k8s.io/utils/pointer/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["pointer.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/pointer", - importpath = "k8s.io/utils/pointer", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/strings/BUILD b/vendor/k8s.io/utils/strings/BUILD deleted file mode 100644 index 08bd01b744e34..0000000000000 --- a/vendor/k8s.io/utils/strings/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "escape.go", - "line_delimiter.go", - "strings.go", - ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/strings", - importpath = "k8s.io/utils/strings", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/k8s.io/utils/trace/BUILD b/vendor/k8s.io/utils/trace/BUILD deleted file mode 100644 index 18918e0f0c39e..0000000000000 --- a/vendor/k8s.io/utils/trace/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["trace.go"], - importmap = "k8s.io/kubernetes/vendor/k8s.io/utils/trace", - importpath = "k8s.io/utils/trace", - visibility = ["//visibility:public"], - deps = ["//vendor/k8s.io/klog/v2:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/modules.txt b/vendor/modules.txt index 397f97d5f5ea4..fa6237f2e3bc3 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -45,6 +45,7 @@ github.com/Azure/go-autorest/autorest/mocks github.com/Azure/go-autorest/autorest/to # github.com/Azure/go-autorest/autorest/to => github.com/Azure/go-autorest/autorest/to v0.2.0 # github.com/Azure/go-autorest/autorest/validation v0.1.0 => github.com/Azure/go-autorest/autorest/validation v0.1.0 +## explicit github.com/Azure/go-autorest/autorest/validation # github.com/Azure/go-autorest/autorest/validation => github.com/Azure/go-autorest/autorest/validation v0.1.0 # github.com/Azure/go-autorest/logger v0.1.0 => github.com/Azure/go-autorest/logger v0.1.0 @@ -123,8 +124,6 @@ github.com/armon/circbuf # github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a => github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a github.com/asaskevich/govalidator # github.com/asaskevich/govalidator => github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a -# github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7 => github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7 -## explicit # github.com/auth0/go-jwt-middleware => github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7 # github.com/aws/aws-sdk-go v1.28.2 => github.com/aws/aws-sdk-go v1.28.2 ## explicit @@ -179,8 +178,6 @@ github.com/beorn7/perks/quantile ## explicit github.com/blang/semver # github.com/blang/semver => github.com/blang/semver v3.5.0+incompatible -# github.com/boltdb/bolt v1.3.1 => github.com/boltdb/bolt v1.3.1 -## explicit # github.com/boltdb/bolt => github.com/boltdb/bolt v1.3.1 # github.com/caddyserver/caddy v1.0.3 => github.com/caddyserver/caddy v1.0.3 ## explicit @@ -188,6 +185,7 @@ github.com/blang/semver github.com/caddyserver/caddy/caddyfile # github.com/cenkalti/backoff => github.com/cenkalti/backoff v2.1.1+incompatible # github.com/census-instrumentation/opencensus-proto => github.com/census-instrumentation/opencensus-proto v0.2.1 +# github.com/certifi/gocertifi => github.com/certifi/gocertifi v0.0.0-20180905225744-ee1a9a0726d2 # github.com/cespare/xxhash/v2 v2.1.1 => github.com/cespare/xxhash/v2 v2.1.1 github.com/cespare/xxhash/v2 # github.com/cespare/xxhash/v2 => github.com/cespare/xxhash/v2 v2.1.1 @@ -217,8 +215,6 @@ github.com/cilium/ebpf/internal/unix github.com/clusterhq/flocker-go # github.com/clusterhq/flocker-go => github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313 # github.com/cockroachdb/datadriven => github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa -# github.com/codegangsta/negroni v1.0.0 => github.com/codegangsta/negroni v1.0.0 -## explicit # github.com/codegangsta/negroni => github.com/codegangsta/negroni v1.0.0 # github.com/container-storage-interface/spec v1.2.0 => github.com/container-storage-interface/spec v1.2.0 ## explicit @@ -304,6 +300,8 @@ github.com/daviddengcn/go-colortext # github.com/dgrijalva/jwt-go v3.2.0+incompatible => github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/dgrijalva/jwt-go # github.com/dgrijalva/jwt-go => github.com/dgrijalva/jwt-go v3.2.0+incompatible +# github.com/dnaeon/go-vcr v1.0.1 => github.com/dnaeon/go-vcr v1.0.1 +## explicit # github.com/dnaeon/go-vcr => github.com/dnaeon/go-vcr v1.0.1 # github.com/docker/distribution v2.7.1+incompatible => github.com/docker/distribution v2.7.1+incompatible ## explicit @@ -342,10 +340,13 @@ github.com/docker/docker/pkg/term/windows github.com/docker/go-connections/nat github.com/docker/go-connections/sockets github.com/docker/go-connections/tlsconfig +# github.com/docker/go-metrics => github.com/docker/go-metrics v0.0.1 # github.com/docker/go-units v0.4.0 => github.com/docker/go-units v0.4.0 ## explicit github.com/docker/go-units # github.com/docker/go-units => github.com/docker/go-units v0.4.0 +# github.com/docker/libnetwork => github.com/docker/libnetwork v0.0.0-20190731215715-7f13a5c99f4b +# github.com/docker/libtrust => github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 # github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 => github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 github.com/docker/spdystream # github.com/docker/spdystream => github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 @@ -385,11 +386,13 @@ github.com/fatih/camelcase ## explicit github.com/fsnotify/fsnotify # github.com/fsnotify/fsnotify => github.com/fsnotify/fsnotify v1.4.9 +# github.com/fsouza/go-dockerclient => github.com/fsouza/go-dockerclient v0.0.0-20171004212419-da3951ba2e9e +# github.com/getsentry/raven-go => github.com/getsentry/raven-go v0.0.0-20190513200303-c977f96e1095 # github.com/ghodss/yaml v1.0.0 => github.com/ghodss/yaml v1.0.0 github.com/ghodss/yaml # github.com/ghodss/yaml => github.com/ghodss/yaml v1.0.0 # github.com/go-acme/lego => github.com/go-acme/lego v2.5.0+incompatible -# github.com/go-bindata/go-bindata v3.1.1+incompatible => github.com/go-bindata/go-bindata v3.1.1+incompatible +# github.com/go-bindata/go-bindata v3.1.2+incompatible => github.com/go-bindata/go-bindata v3.1.1+incompatible ## explicit github.com/go-bindata/go-bindata # github.com/go-bindata/go-bindata => github.com/go-bindata/go-bindata v3.1.1+incompatible @@ -438,13 +441,13 @@ github.com/go-openapi/swag github.com/go-openapi/validate # github.com/go-openapi/validate => github.com/go-openapi/validate v0.19.5 # github.com/go-ozzo/ozzo-validation v3.5.0+incompatible => github.com/go-ozzo/ozzo-validation v3.5.0+incompatible -## explicit github.com/go-ozzo/ozzo-validation # github.com/go-ozzo/ozzo-validation => github.com/go-ozzo/ozzo-validation v3.5.0+incompatible github.com/go-ozzo/ozzo-validation/is # github.com/go-stack/stack v1.8.0 => github.com/go-stack/stack v1.8.0 github.com/go-stack/stack # github.com/go-stack/stack => github.com/go-stack/stack v1.8.0 +# github.com/gobuffalo/flect => github.com/gobuffalo/flect v0.2.0 # github.com/godbus/dbus/v5 v5.0.3 => github.com/godbus/dbus/v5 v5.0.3 github.com/godbus/dbus/v5 # github.com/godbus/dbus/v5 => github.com/godbus/dbus/v5 v5.0.3 @@ -504,7 +507,14 @@ github.com/golang/protobuf/ptypes/wrappers # github.com/golangplus/bytes => github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450 # github.com/golangplus/fmt => github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995 # github.com/golangplus/testing => github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e +# github.com/gonum/blas => github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac +# github.com/gonum/floats => github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 +# github.com/gonum/graph => github.com/gonum/graph v0.0.0-20170401004347-50b27dea7ebb +# github.com/gonum/internal => github.com/gonum/internal v0.0.0-20181124074243-f884aa714029 +# github.com/gonum/lapack => github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9 +# github.com/gonum/matrix => github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9 # github.com/google/btree v1.0.0 => github.com/google/btree v1.0.0 +## explicit github.com/google/btree # github.com/google/btree => github.com/google/btree v1.0.0 # github.com/google/cadvisor v0.37.0 => github.com/google/cadvisor v0.37.0 @@ -617,8 +627,6 @@ github.com/gophercloud/gophercloud/openstack/networking/v2/ports github.com/gophercloud/gophercloud/openstack/utils github.com/gophercloud/gophercloud/pagination # github.com/gopherjs/gopherjs => github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 -# github.com/gorilla/context v1.1.1 => github.com/gorilla/context v1.1.1 -## explicit # github.com/gorilla/context => github.com/gorilla/context v1.1.1 # github.com/gorilla/mux => github.com/gorilla/mux v1.7.3 # github.com/gorilla/websocket v1.4.0 => github.com/gorilla/websocket v1.4.0 @@ -663,8 +671,6 @@ github.com/hashicorp/hcl/json/token github.com/heketi/heketi/client/api/go-client github.com/heketi/heketi/pkg/glusterfs/api github.com/heketi/heketi/pkg/utils -# github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6 => github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6 -## explicit # github.com/heketi/tests => github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6 # github.com/hpcloud/tail v1.0.0 => github.com/hpcloud/tail v1.0.0 github.com/hpcloud/tail @@ -674,7 +680,7 @@ github.com/hpcloud/tail/util github.com/hpcloud/tail/watch github.com/hpcloud/tail/winfile # github.com/ianlancetaylor/demangle => github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 -# github.com/imdario/mergo v0.3.5 => github.com/imdario/mergo v0.3.5 +# github.com/imdario/mergo v0.3.7 => github.com/imdario/mergo v0.3.5 github.com/imdario/mergo # github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 # github.com/inconshreveable/mousetrap v1.0.0 => github.com/inconshreveable/mousetrap v1.0.0 @@ -730,15 +736,12 @@ github.com/liggitt/tabwriter ## explicit github.com/lithammer/dedent # github.com/lithammer/dedent => github.com/lithammer/dedent v1.1.0 -# github.com/lpabon/godbc v0.1.1 => github.com/lpabon/godbc v0.1.1 -## explicit # github.com/lpabon/godbc => github.com/lpabon/godbc v0.1.1 # github.com/lucas-clemente/aes12 => github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f # github.com/lucas-clemente/quic-clients => github.com/lucas-clemente/quic-clients v0.1.0 # github.com/lucas-clemente/quic-go => github.com/lucas-clemente/quic-go v0.10.2 # github.com/lucas-clemente/quic-go-certificates => github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced # github.com/magiconair/properties v1.8.1 => github.com/magiconair/properties v1.8.1 -## explicit github.com/magiconair/properties # github.com/magiconair/properties => github.com/magiconair/properties v1.8.1 # github.com/mailru/easyjson v0.7.0 => github.com/mailru/easyjson v0.7.0 @@ -789,7 +792,6 @@ github.com/modern-go/concurrent github.com/modern-go/reflect2 # github.com/modern-go/reflect2 => github.com/modern-go/reflect2 v1.0.1 # github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb => github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb -## explicit github.com/mohae/deepcopy # github.com/mohae/deepcopy => github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb # github.com/morikuni/aec v1.0.0 => github.com/morikuni/aec v1.0.0 @@ -814,10 +816,10 @@ github.com/mxk/go-flowrate/flowrate # github.com/naoina/go-stringutil => github.com/naoina/go-stringutil v0.1.0 # github.com/naoina/toml => github.com/naoina/toml v0.1.1 # github.com/olekukonko/tablewriter => github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5 -# github.com/onsi/ginkgo v1.11.0 => github.com/onsi/ginkgo v1.11.0 +# github.com/onsi/ginkgo v4.5.0-origin.1+incompatible => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible ## explicit github.com/onsi/ginkgo -# github.com/onsi/ginkgo => github.com/onsi/ginkgo v1.11.0 +# github.com/onsi/ginkgo => github.com/openshift/ginkgo v4.5.0-origin.1+incompatible github.com/onsi/ginkgo/config github.com/onsi/ginkgo/ginkgo github.com/onsi/ginkgo/ginkgo/convert @@ -900,6 +902,175 @@ github.com/opencontainers/runtime-spec/specs-go github.com/opencontainers/selinux/go-selinux github.com/opencontainers/selinux/go-selinux/label github.com/opencontainers/selinux/pkg/pwalk +# github.com/openshift/api v0.0.0-20201019163320-c6a5ec25f267 => github.com/openshift/api v0.0.0-20201019163320-c6a5ec25f267 +## explicit +# github.com/openshift/api => github.com/openshift/api v0.0.0-20201019163320-c6a5ec25f267 +github.com/openshift/api/apps/v1 +github.com/openshift/api/authorization/v1 +github.com/openshift/api/build/v1 +github.com/openshift/api/config/v1 +github.com/openshift/api/image/docker10 +github.com/openshift/api/image/dockerpre012 +github.com/openshift/api/image/v1 +github.com/openshift/api/kubecontrolplane/v1 +github.com/openshift/api/network/v1 +github.com/openshift/api/oauth/v1 +github.com/openshift/api/osin/v1 +github.com/openshift/api/pkg/serialization +github.com/openshift/api/project/v1 +github.com/openshift/api/quota/v1 +github.com/openshift/api/route/v1 +github.com/openshift/api/security +github.com/openshift/api/security/v1 +github.com/openshift/api/template/v1 +github.com/openshift/api/user/v1 +# github.com/openshift/apiserver-library-go v0.0.0-20201020095023-fe92bc0abdc3 => github.com/openshift/apiserver-library-go v0.0.0-20201020095023-fe92bc0abdc3 +## explicit +# github.com/openshift/apiserver-library-go => github.com/openshift/apiserver-library-go v0.0.0-20201020095023-fe92bc0abdc3 +github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy +github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/v1 +github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/apis/imagepolicy/validation +github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/imagereferencemutators +github.com/openshift/apiserver-library-go/pkg/admission/imagepolicy/rules +github.com/openshift/apiserver-library-go/pkg/admission/quota/clusterresourcequota +github.com/openshift/apiserver-library-go/pkg/authorization/scope +github.com/openshift/apiserver-library-go/pkg/configflags +github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/capabilities +github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/group +github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccadmission +github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/sccmatching +github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/seccomp +github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/selinux +github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/user +github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util +github.com/openshift/apiserver-library-go/pkg/securitycontextconstraints/util/sort +# github.com/openshift/build-machinery-go => github.com/openshift/build-machinery-go v0.0.0-20200917070002-f171684f77ab +# github.com/openshift/client-go v0.0.0-20201020082437-7737f16e53fc => github.com/openshift/client-go v0.0.0-20201020082437-7737f16e53fc +## explicit +# github.com/openshift/client-go => github.com/openshift/client-go v0.0.0-20201020082437-7737f16e53fc +github.com/openshift/client-go/apps/clientset/versioned +github.com/openshift/client-go/apps/clientset/versioned/scheme +github.com/openshift/client-go/apps/clientset/versioned/typed/apps/v1 +github.com/openshift/client-go/apps/informers/externalversions +github.com/openshift/client-go/apps/informers/externalversions/apps +github.com/openshift/client-go/apps/informers/externalversions/apps/v1 +github.com/openshift/client-go/apps/informers/externalversions/internalinterfaces +github.com/openshift/client-go/apps/listers/apps/v1 +github.com/openshift/client-go/authorization/clientset/versioned +github.com/openshift/client-go/authorization/clientset/versioned/fake +github.com/openshift/client-go/authorization/clientset/versioned/scheme +github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1 +github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1/fake +github.com/openshift/client-go/authorization/informers/externalversions +github.com/openshift/client-go/authorization/informers/externalversions/authorization +github.com/openshift/client-go/authorization/informers/externalversions/authorization/v1 +github.com/openshift/client-go/authorization/informers/externalversions/internalinterfaces +github.com/openshift/client-go/authorization/listers/authorization/v1 +github.com/openshift/client-go/build/clientset/versioned +github.com/openshift/client-go/build/clientset/versioned/scheme +github.com/openshift/client-go/build/clientset/versioned/typed/build/v1 +github.com/openshift/client-go/build/informers/externalversions +github.com/openshift/client-go/build/informers/externalversions/build +github.com/openshift/client-go/build/informers/externalversions/build/v1 +github.com/openshift/client-go/build/informers/externalversions/internalinterfaces +github.com/openshift/client-go/build/listers/build/v1 +github.com/openshift/client-go/config/clientset/versioned +github.com/openshift/client-go/config/clientset/versioned/fake +github.com/openshift/client-go/config/clientset/versioned/scheme +github.com/openshift/client-go/config/clientset/versioned/typed/config/v1 +github.com/openshift/client-go/config/clientset/versioned/typed/config/v1/fake +github.com/openshift/client-go/image/clientset/versioned +github.com/openshift/client-go/image/clientset/versioned/scheme +github.com/openshift/client-go/image/clientset/versioned/typed/image/v1 +github.com/openshift/client-go/image/informers/externalversions +github.com/openshift/client-go/image/informers/externalversions/image +github.com/openshift/client-go/image/informers/externalversions/image/v1 +github.com/openshift/client-go/image/informers/externalversions/internalinterfaces +github.com/openshift/client-go/image/listers/image/v1 +github.com/openshift/client-go/network/clientset/versioned +github.com/openshift/client-go/network/clientset/versioned/scheme +github.com/openshift/client-go/network/clientset/versioned/typed/network/v1 +github.com/openshift/client-go/network/informers/externalversions +github.com/openshift/client-go/network/informers/externalversions/internalinterfaces +github.com/openshift/client-go/network/informers/externalversions/network +github.com/openshift/client-go/network/informers/externalversions/network/v1 +github.com/openshift/client-go/network/listers/network/v1 +github.com/openshift/client-go/oauth/clientset/versioned +github.com/openshift/client-go/oauth/clientset/versioned/fake +github.com/openshift/client-go/oauth/clientset/versioned/scheme +github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1 +github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1/fake +github.com/openshift/client-go/oauth/informers/externalversions +github.com/openshift/client-go/oauth/informers/externalversions/internalinterfaces +github.com/openshift/client-go/oauth/informers/externalversions/oauth +github.com/openshift/client-go/oauth/informers/externalversions/oauth/v1 +github.com/openshift/client-go/oauth/listers/oauth/v1 +github.com/openshift/client-go/quota/clientset/versioned +github.com/openshift/client-go/quota/clientset/versioned/scheme +github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1 +github.com/openshift/client-go/quota/informers/externalversions +github.com/openshift/client-go/quota/informers/externalversions/internalinterfaces +github.com/openshift/client-go/quota/informers/externalversions/quota +github.com/openshift/client-go/quota/informers/externalversions/quota/v1 +github.com/openshift/client-go/quota/listers/quota/v1 +github.com/openshift/client-go/route/clientset/versioned +github.com/openshift/client-go/route/clientset/versioned/scheme +github.com/openshift/client-go/route/clientset/versioned/typed/route/v1 +github.com/openshift/client-go/route/informers/externalversions +github.com/openshift/client-go/route/informers/externalversions/internalinterfaces +github.com/openshift/client-go/route/informers/externalversions/route +github.com/openshift/client-go/route/informers/externalversions/route/v1 +github.com/openshift/client-go/route/listers/route/v1 +github.com/openshift/client-go/security/clientset/versioned +github.com/openshift/client-go/security/clientset/versioned/scheme +github.com/openshift/client-go/security/clientset/versioned/typed/security/v1 +github.com/openshift/client-go/security/informers/externalversions +github.com/openshift/client-go/security/informers/externalversions/internalinterfaces +github.com/openshift/client-go/security/informers/externalversions/security +github.com/openshift/client-go/security/informers/externalversions/security/v1 +github.com/openshift/client-go/security/listers/security/v1 +github.com/openshift/client-go/template/clientset/versioned +github.com/openshift/client-go/template/clientset/versioned/scheme +github.com/openshift/client-go/template/clientset/versioned/typed/template/v1 +github.com/openshift/client-go/template/informers/externalversions +github.com/openshift/client-go/template/informers/externalversions/internalinterfaces +github.com/openshift/client-go/template/informers/externalversions/template +github.com/openshift/client-go/template/informers/externalversions/template/v1 +github.com/openshift/client-go/template/listers/template/v1 +github.com/openshift/client-go/user/clientset/versioned +github.com/openshift/client-go/user/clientset/versioned/fake +github.com/openshift/client-go/user/clientset/versioned/scheme +github.com/openshift/client-go/user/clientset/versioned/typed/user/v1 +github.com/openshift/client-go/user/clientset/versioned/typed/user/v1/fake +github.com/openshift/client-go/user/informers/externalversions +github.com/openshift/client-go/user/informers/externalversions/internalinterfaces +github.com/openshift/client-go/user/informers/externalversions/user +github.com/openshift/client-go/user/informers/externalversions/user/v1 +github.com/openshift/client-go/user/listers/user/v1 +# github.com/openshift/library-go v0.0.0-20201020083322-646ad9742a1e => github.com/openshift/library-go v0.0.0-20201020083322-646ad9742a1e +## explicit +# github.com/openshift/library-go => github.com/openshift/library-go v0.0.0-20201020083322-646ad9742a1e +github.com/openshift/library-go/pkg/apiserver/admission/admissionregistrationtesting +github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig +github.com/openshift/library-go/pkg/apiserver/admission/admissiontimeout +github.com/openshift/library-go/pkg/apiserver/apiserverconfig +github.com/openshift/library-go/pkg/apiserver/httprequest +github.com/openshift/library-go/pkg/authentication/bootstrapauthenticator +github.com/openshift/library-go/pkg/authorization/scopemetadata +github.com/openshift/library-go/pkg/config/client +github.com/openshift/library-go/pkg/config/configdefaults +github.com/openshift/library-go/pkg/config/helpers +github.com/openshift/library-go/pkg/config/validation +github.com/openshift/library-go/pkg/crypto +github.com/openshift/library-go/pkg/image/imageutil +github.com/openshift/library-go/pkg/image/internal/digest +github.com/openshift/library-go/pkg/image/internal/reference +github.com/openshift/library-go/pkg/image/reference +github.com/openshift/library-go/pkg/oauth/oauthdiscovery +github.com/openshift/library-go/pkg/quota/clusterquotamapping +github.com/openshift/library-go/pkg/quota/quotautil +github.com/openshift/library-go/pkg/security/ldaputil +github.com/openshift/library-go/pkg/security/uid # github.com/pelletier/go-toml v1.2.0 => github.com/pelletier/go-toml v1.2.0 github.com/pelletier/go-toml # github.com/pelletier/go-toml => github.com/pelletier/go-toml v1.2.0 @@ -910,6 +1081,7 @@ github.com/peterbourgon/diskv ## explicit github.com/pkg/errors # github.com/pkg/errors => github.com/pkg/errors v0.9.1 +# github.com/pkg/profile => github.com/pkg/profile v1.3.0 # github.com/pmezard/go-difflib v1.0.0 => github.com/pmezard/go-difflib v1.0.0 ## explicit # github.com/pmezard/go-difflib => github.com/pmezard/go-difflib v1.0.0 @@ -946,7 +1118,7 @@ github.com/prometheus/procfs/internal/util github.com/quobyte/api # github.com/quobyte/api => github.com/quobyte/api v0.1.2 # github.com/remyoudompheng/bigfft => github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446 -# github.com/robfig/cron v1.1.0 => github.com/robfig/cron v1.1.0 +# github.com/robfig/cron v1.2.0 => github.com/robfig/cron v1.1.0 ## explicit github.com/robfig/cron # github.com/robfig/cron => github.com/robfig/cron v1.1.0 @@ -962,6 +1134,7 @@ github.com/russross/blackfriday github.com/russross/blackfriday/v2 # github.com/russross/blackfriday/v2 => github.com/russross/blackfriday/v2 v2.0.1 # github.com/satori/go.uuid v1.2.0 => github.com/satori/go.uuid v1.2.0 +## explicit github.com/satori/go.uuid # github.com/satori/go.uuid => github.com/satori/go.uuid v1.2.0 # github.com/seccomp/libseccomp-golang v0.9.1 => github.com/seccomp/libseccomp-golang v0.9.1 @@ -993,7 +1166,6 @@ github.com/spf13/cobra # github.com/spf13/cobra => github.com/spf13/cobra v1.0.0 github.com/spf13/cobra/doc # github.com/spf13/jwalterweatherman v1.1.0 => github.com/spf13/jwalterweatherman v1.1.0 -## explicit github.com/spf13/jwalterweatherman # github.com/spf13/jwalterweatherman => github.com/spf13/jwalterweatherman v1.1.0 # github.com/spf13/pflag v1.0.5 => github.com/spf13/pflag v1.0.5 @@ -1034,8 +1206,6 @@ github.com/thecodeteam/goscaleio/types/v1 github.com/tmc/grpc-websocket-proxy/wsproxy # github.com/ugorji/go => github.com/ugorji/go v1.1.4 # github.com/urfave/cli => github.com/urfave/cli v1.22.2 -# github.com/urfave/negroni v1.0.0 => github.com/urfave/negroni v1.0.0 -## explicit # github.com/urfave/negroni => github.com/urfave/negroni v1.0.0 # github.com/vektah/gqlparser => github.com/vektah/gqlparser v1.1.2 # github.com/vishvananda/netlink v1.1.0 => github.com/vishvananda/netlink v1.1.0 @@ -1206,7 +1376,7 @@ go.opencensus.io/trace/tracestate # go.uber.org/atomic v1.4.0 => go.uber.org/atomic v1.4.0 go.uber.org/atomic # go.uber.org/atomic => go.uber.org/atomic v1.4.0 -# go.uber.org/multierr v1.1.0 => go.uber.org/multierr v1.1.0 +# go.uber.org/multierr v1.1.1-0.20180122172545-ddea229ff1df => go.uber.org/multierr v1.1.0 go.uber.org/multierr # go.uber.org/multierr => go.uber.org/multierr v1.1.0 # go.uber.org/zap v1.10.0 => go.uber.org/zap v1.10.0 @@ -1374,8 +1544,6 @@ gonum.org/v1/gonum/lapack gonum.org/v1/gonum/lapack/gonum gonum.org/v1/gonum/lapack/lapack64 gonum.org/v1/gonum/mat -# gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e => gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e -## explicit # gonum.org/v1/netlib => gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e # gonum.org/v1/plot => gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b # google.golang.org/api v0.15.1 => google.golang.org/api v0.15.1 @@ -1497,6 +1665,9 @@ google.golang.org/protobuf/types/known/timestamppb google.golang.org/protobuf/types/known/wrapperspb google.golang.org/protobuf/types/pluginpb # gopkg.in/alecthomas/kingpin.v2 => gopkg.in/alecthomas/kingpin.v2 v2.2.6 +# gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d => gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d +gopkg.in/asn1-ber.v1 +# gopkg.in/asn1-ber.v1 => gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d # gopkg.in/check.v1 => gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 # gopkg.in/cheggaaa/pb.v1 => gopkg.in/cheggaaa/pb.v1 v1.0.25 # gopkg.in/errgo.v2 => gopkg.in/errgo.v2 v2.1.0 @@ -1513,8 +1684,12 @@ gopkg.in/gcfg.v1/types # gopkg.in/inf.v0 v0.9.1 => gopkg.in/inf.v0 v0.9.1 gopkg.in/inf.v0 # gopkg.in/inf.v0 => gopkg.in/inf.v0 v0.9.1 +# gopkg.in/ldap.v2 v2.5.1 => gopkg.in/ldap.v2 v2.5.1 +gopkg.in/ldap.v2 +# gopkg.in/ldap.v2 => gopkg.in/ldap.v2 v2.5.1 # gopkg.in/mcuadros/go-syslog.v2 => gopkg.in/mcuadros/go-syslog.v2 v2.2.1 # gopkg.in/natefinch/lumberjack.v2 v2.0.0 => gopkg.in/natefinch/lumberjack.v2 v2.0.0 +## explicit gopkg.in/natefinch/lumberjack.v2 # gopkg.in/natefinch/lumberjack.v2 => gopkg.in/natefinch/lumberjack.v2 v2.0.0 # gopkg.in/resty.v1 => gopkg.in/resty.v1 v1.12.0 @@ -1529,18 +1704,20 @@ gopkg.in/square/go-jose.v2/jwt gopkg.in/tomb.v1 # gopkg.in/tomb.v1 => gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 # gopkg.in/warnings.v0 v0.1.1 => gopkg.in/warnings.v0 v0.1.1 +## explicit gopkg.in/warnings.v0 # gopkg.in/warnings.v0 => gopkg.in/warnings.v0 v0.1.1 -# gopkg.in/yaml.v2 v2.2.8 => gopkg.in/yaml.v2 v2.2.8 +# gopkg.in/yaml.v2 v2.3.0 => gopkg.in/yaml.v2 v2.2.8 ## explicit gopkg.in/yaml.v2 # gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 +# gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966 # gotest.tools => gotest.tools v2.2.0+incompatible # gotest.tools/v3 => gotest.tools/v3 v3.0.2 # honnef.co/go/tools => honnef.co/go/tools v0.0.1-2019.2.3 -# k8s.io/api v0.0.0 => ./staging/src/k8s.io/api +# k8s.io/api v0.19.2 => k8s.io/api v0.19.2 ## explicit -# k8s.io/api => ./staging/src/k8s.io/api +# k8s.io/api => k8s.io/api v0.19.2 k8s.io/api/admission/v1 k8s.io/api/admission/v1beta1 k8s.io/api/admissionregistration/v1 @@ -1585,9 +1762,9 @@ k8s.io/api/settings/v1alpha1 k8s.io/api/storage/v1 k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1beta1 -# k8s.io/apiextensions-apiserver v0.0.0 => ./staging/src/k8s.io/apiextensions-apiserver +# k8s.io/apiextensions-apiserver v0.19.2 => k8s.io/apiextensions-apiserver v0.19.2 ## explicit -# k8s.io/apiextensions-apiserver => ./staging/src/k8s.io/apiextensions-apiserver +# k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.19.2 k8s.io/apiextensions-apiserver/pkg/apihelpers k8s.io/apiextensions-apiserver/pkg/apis/apiextensions k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install @@ -1630,9 +1807,9 @@ k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition k8s.io/apiextensions-apiserver/test/integration k8s.io/apiextensions-apiserver/test/integration/fixtures -# k8s.io/apimachinery v0.0.0 => ./staging/src/k8s.io/apimachinery +# k8s.io/apimachinery v0.19.2 => k8s.io/apimachinery v0.19.2 ## explicit -# k8s.io/apimachinery => ./staging/src/k8s.io/apimachinery +# k8s.io/apimachinery => k8s.io/apimachinery v0.19.2 k8s.io/apimachinery/pkg/api/apitesting k8s.io/apimachinery/pkg/api/apitesting/fuzzer k8s.io/apimachinery/pkg/api/apitesting/naming @@ -1702,9 +1879,9 @@ k8s.io/apimachinery/pkg/watch k8s.io/apimachinery/third_party/forked/golang/json k8s.io/apimachinery/third_party/forked/golang/netutil k8s.io/apimachinery/third_party/forked/golang/reflect -# k8s.io/apiserver v0.0.0 => ./staging/src/k8s.io/apiserver +# k8s.io/apiserver v0.19.2 => k8s.io/apiserver v0.19.2 ## explicit -# k8s.io/apiserver => ./staging/src/k8s.io/apiserver +# k8s.io/apiserver => k8s.io/apiserver v0.19.2 k8s.io/apiserver/pkg/admission k8s.io/apiserver/pkg/admission/configuration k8s.io/apiserver/pkg/admission/initializer @@ -1855,9 +2032,9 @@ k8s.io/cli-runtime/pkg/kustomize/k8sdeps/transformer/patch k8s.io/cli-runtime/pkg/kustomize/k8sdeps/validator k8s.io/cli-runtime/pkg/printers k8s.io/cli-runtime/pkg/resource -# k8s.io/client-go v0.0.0 => ./staging/src/k8s.io/client-go +# k8s.io/client-go v0.19.2 => k8s.io/client-go v0.19.2 ## explicit -# k8s.io/client-go => ./staging/src/k8s.io/client-go +# k8s.io/client-go => k8s.io/client-go v0.19.2 k8s.io/client-go/discovery k8s.io/client-go/discovery/cached k8s.io/client-go/discovery/cached/disk @@ -2127,17 +2304,17 @@ k8s.io/cluster-bootstrap/token/jws k8s.io/cluster-bootstrap/token/util k8s.io/cluster-bootstrap/util/secrets k8s.io/cluster-bootstrap/util/tokens -# k8s.io/code-generator v0.0.0 => ./staging/src/k8s.io/code-generator +# k8s.io/code-generator v0.19.2 => k8s.io/code-generator v0.19.2 ## explicit -# k8s.io/code-generator => ./staging/src/k8s.io/code-generator +# k8s.io/code-generator => k8s.io/code-generator v0.19.2 k8s.io/code-generator/cmd/go-to-protobuf k8s.io/code-generator/cmd/go-to-protobuf/protobuf k8s.io/code-generator/cmd/go-to-protobuf/protoc-gen-gogo k8s.io/code-generator/pkg/util k8s.io/code-generator/third_party/forked/golang/reflect -# k8s.io/component-base v0.0.0 => ./staging/src/k8s.io/component-base +# k8s.io/component-base v0.19.2 => k8s.io/component-base v0.19.2 ## explicit -# k8s.io/component-base => ./staging/src/k8s.io/component-base +# k8s.io/component-base => k8s.io/component-base v0.19.2 k8s.io/component-base/cli/flag k8s.io/component-base/cli/globalflag k8s.io/component-base/codec @@ -2193,13 +2370,14 @@ k8s.io/gengo/types ## explicit # k8s.io/heapster => k8s.io/heapster v1.2.0-beta.1 k8s.io/heapster/metrics/api/v1/types -# k8s.io/klog/v2 v2.2.0 => k8s.io/klog/v2 v2.2.0 +# k8s.io/klog => k8s.io/klog v1.0.0 +# k8s.io/klog/v2 v2.3.0 => k8s.io/klog/v2 v2.2.0 ## explicit k8s.io/klog/v2 # k8s.io/klog/v2 => k8s.io/klog/v2 v2.2.0 -# k8s.io/kube-aggregator v0.0.0 => ./staging/src/k8s.io/kube-aggregator +# k8s.io/kube-aggregator v0.19.2 => k8s.io/kube-aggregator v0.19.2 ## explicit -# k8s.io/kube-aggregator => ./staging/src/k8s.io/kube-aggregator +# k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.19.2 k8s.io/kube-aggregator/pkg/apis/apiregistration k8s.io/kube-aggregator/pkg/apis/apiregistration/install k8s.io/kube-aggregator/pkg/apis/apiregistration/v1 @@ -2475,6 +2653,8 @@ k8s.io/utils/trace # sigs.k8s.io/apiserver-network-proxy/konnectivity-client => sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9 sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client +# sigs.k8s.io/controller-tools => sigs.k8s.io/controller-tools v0.2.8 +# sigs.k8s.io/kube-storage-version-migrator => sigs.k8s.io/kube-storage-version-migrator v0.0.3 # sigs.k8s.io/kustomize v2.0.3+incompatible => sigs.k8s.io/kustomize v2.0.3+incompatible ## explicit # sigs.k8s.io/kustomize => sigs.k8s.io/kustomize v2.0.3+incompatible @@ -2511,6 +2691,6 @@ sigs.k8s.io/structured-merge-diff/v4/value ## explicit sigs.k8s.io/yaml # sigs.k8s.io/yaml => sigs.k8s.io/yaml v1.2.0 -# vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc => vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc +# vbom.ml/util v0.0.0-20180919145318-efcd4e0f9787 => vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc # vbom.ml/util => vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc vbom.ml/util/sortorder diff --git a/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/BUILD b/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/BUILD deleted file mode 100644 index b059782628573..0000000000000 --- a/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "client.go", - "conn.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client", - importpath = "sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client", - visibility = ["//visibility:public"], - deps = [ - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", - "//vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client/BUILD b/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client/BUILD deleted file mode 100644 index e42a33f0fb2cd..0000000000000 --- a/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["client.pb.go"], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client", - importpath = "sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/golang/protobuf/proto:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - "//vendor/google.golang.org/grpc/codes:go_default_library", - "//vendor/google.golang.org/grpc/status:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/commands/build/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/commands/build/BUILD deleted file mode 100644 index 225b86735e535..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/commands/build/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["build.go"], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/commands/build", - importpath = "sigs.k8s.io/kustomize/pkg/commands/build", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/github.com/spf13/cobra:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/constants:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/fs:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/ifc/transformer:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/loader:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/resmap:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/target:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/constants/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/constants/BUILD deleted file mode 100644 index c18418cef5966..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/constants/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["constants.go"], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/constants", - importpath = "sigs.k8s.io/kustomize/pkg/constants", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/expansion/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/expansion/BUILD deleted file mode 100644 index bc3ecdeabb9df..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/expansion/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["expand.go"], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/expansion", - importpath = "sigs.k8s.io/kustomize/pkg/expansion", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/factory/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/factory/BUILD deleted file mode 100644 index 2a2351e2d32f5..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/factory/BUILD +++ /dev/null @@ -1,29 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["factory.go"], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/factory", - importpath = "sigs.k8s.io/kustomize/pkg/factory", - visibility = ["//visibility:public"], - deps = [ - "//vendor/sigs.k8s.io/kustomize/pkg/ifc:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/ifc/transformer:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/resmap:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/resource:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/fs/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/fs/BUILD deleted file mode 100644 index 04fbbaa4a7f7d..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/fs/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "confirmeddir.go", - "fakefile.go", - "fakefileinfo.go", - "fakefs.go", - "fs.go", - "realfile.go", - "realfs.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/fs", - importpath = "sigs.k8s.io/kustomize/pkg/fs", - visibility = ["//visibility:public"], - deps = ["//vendor/sigs.k8s.io/kustomize/pkg/constants:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/git/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/git/BUILD deleted file mode 100644 index 0bc085057921f..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/git/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "cloner.go", - "repospec.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/git", - importpath = "sigs.k8s.io/kustomize/pkg/git", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/fs:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/gvk/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/gvk/BUILD deleted file mode 100644 index abc3b10ab151d..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/gvk/BUILD +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["gvk.go"], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/gvk", - importpath = "sigs.k8s.io/kustomize/pkg/gvk", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/ifc/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/ifc/BUILD deleted file mode 100644 index 6bca6dcbccfdd..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/ifc/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["ifc.go"], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/ifc", - importpath = "sigs.k8s.io/kustomize/pkg/ifc", - visibility = ["//visibility:public"], - deps = [ - "//vendor/sigs.k8s.io/kustomize/pkg/gvk:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/ifc/transformer:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/ifc/transformer/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/ifc/transformer/BUILD deleted file mode 100644 index 624dc8925f602..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/ifc/transformer/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["factory.go"], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/ifc/transformer", - importpath = "sigs.k8s.io/kustomize/pkg/ifc/transformer", - visibility = ["//visibility:public"], - deps = [ - "//vendor/sigs.k8s.io/kustomize/pkg/resource:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/transformers:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/image/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/image/BUILD deleted file mode 100644 index 07207fa49c787..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/image/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "deprecatedimage.go", - "image.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/image", - importpath = "sigs.k8s.io/kustomize/pkg/image", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/internal/error/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/internal/error/BUILD deleted file mode 100644 index f46e6424f6fa1..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/internal/error/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "configmaperror.go", - "kustomizationerror.go", - "patcherror.go", - "resourceerror.go", - "secreterror.go", - "yamlformaterror.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/internal/error", - importpath = "sigs.k8s.io/kustomize/pkg/internal/error", - visibility = ["//vendor/sigs.k8s.io/kustomize/pkg:__subpackages__"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/loader/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/loader/BUILD deleted file mode 100644 index 2bf269f62fda2..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/loader/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "fileloader.go", - "loader.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/loader", - importpath = "sigs.k8s.io/kustomize/pkg/loader", - visibility = ["//visibility:public"], - deps = [ - "//vendor/sigs.k8s.io/kustomize/pkg/fs:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/git:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/ifc:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/patch/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/patch/BUILD deleted file mode 100644 index d0e41faf46c97..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/patch/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "json6902.go", - "strategicmerge.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/patch", - importpath = "sigs.k8s.io/kustomize/pkg/patch", - visibility = ["//visibility:public"], - deps = ["//vendor/sigs.k8s.io/kustomize/pkg/gvk:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/patch/transformer:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/patch/transformer/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/patch/transformer/BUILD deleted file mode 100644 index 19416d6701cf5..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/patch/transformer/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "factory.go", - "patchjson6902json.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/patch/transformer", - importpath = "sigs.k8s.io/kustomize/pkg/patch/transformer", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/evanphx/json-patch:go_default_library", - "//vendor/github.com/ghodss/yaml:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/gvk:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/ifc:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/patch:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/resid:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/resmap:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/resource:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/transformers:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/resid/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/resid/BUILD deleted file mode 100644 index f8f9f627e92ea..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/resid/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = ["resid.go"], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/resid", - importpath = "sigs.k8s.io/kustomize/pkg/resid", - visibility = ["//visibility:public"], - deps = ["//vendor/sigs.k8s.io/kustomize/pkg/gvk:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/resmap/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/resmap/BUILD deleted file mode 100644 index dab802ce88fc1..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/resmap/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "factory.go", - "idslice.go", - "resmap.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/resmap", - importpath = "sigs.k8s.io/kustomize/pkg/resmap", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/ghodss/yaml:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/ifc:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/internal/error:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/resid:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/resource:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/resource/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/resource/BUILD deleted file mode 100644 index 50eef7e33954d..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/resource/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "factory.go", - "resource.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/resource", - importpath = "sigs.k8s.io/kustomize/pkg/resource", - visibility = ["//visibility:public"], - deps = [ - "//vendor/sigs.k8s.io/kustomize/pkg/ifc:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/internal/error:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/patch:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/resid:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/target/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/target/BUILD deleted file mode 100644 index 4a524516d62ef..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/target/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "kusttarget.go", - "resaccumulator.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/target", - importpath = "sigs.k8s.io/kustomize/pkg/target", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/ghodss/yaml:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/constants:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/ifc:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/ifc/transformer:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/internal/error:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/patch/transformer:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/resid:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/resmap:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/resource:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/transformers:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/transformers/config:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/types:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/transformers/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/transformers/BUILD deleted file mode 100644 index 369df843f4904..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/transformers/BUILD +++ /dev/null @@ -1,45 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "image.go", - "labelsandannotations.go", - "multitransformer.go", - "mutatefield.go", - "namereference.go", - "namespace.go", - "nooptransformer.go", - "prefixsuffixname.go", - "refvars.go", - "transformer.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/transformers", - importpath = "sigs.k8s.io/kustomize/pkg/transformers", - visibility = ["//visibility:public"], - deps = [ - "//vendor/sigs.k8s.io/kustomize/pkg/expansion:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/gvk:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/image:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/resmap:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/resource:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/transformers/config:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/transformers/config:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/transformers/config/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/transformers/config/BUILD deleted file mode 100644 index 64fe15a31de02..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/transformers/config/BUILD +++ /dev/null @@ -1,41 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "factory.go", - "factorycrd.go", - "fieldspec.go", - "namebackreferences.go", - "transformerconfig.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/transformers/config", - importpath = "sigs.k8s.io/kustomize/pkg/transformers/config", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/ghodss/yaml:go_default_library", - "//vendor/github.com/go-openapi/spec:go_default_library", - "//vendor/github.com/pkg/errors:go_default_library", - "//vendor/k8s.io/kube-openapi/pkg/common:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/gvk:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/ifc:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/transformers/config/defaultconfig:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//vendor/sigs.k8s.io/kustomize/pkg/transformers/config/defaultconfig:all-srcs", - ], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/transformers/config/defaultconfig/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/transformers/config/defaultconfig/BUILD deleted file mode 100644 index 380e4cd07cb23..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/transformers/config/defaultconfig/BUILD +++ /dev/null @@ -1,31 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "commonannotations.go", - "commonlabels.go", - "defaultconfig.go", - "nameprefix.go", - "namereference.go", - "namespace.go", - "varreference.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/transformers/config/defaultconfig", - importpath = "sigs.k8s.io/kustomize/pkg/transformers/config/defaultconfig", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/kustomize/pkg/types/BUILD b/vendor/sigs.k8s.io/kustomize/pkg/types/BUILD deleted file mode 100644 index bff01419e4d0f..0000000000000 --- a/vendor/sigs.k8s.io/kustomize/pkg/types/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "genargs.go", - "generationbehavior.go", - "kustomization.go", - "var.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/kustomize/pkg/types", - importpath = "sigs.k8s.io/kustomize/pkg/types", - visibility = ["//visibility:public"], - deps = [ - "//vendor/sigs.k8s.io/kustomize/pkg/gvk:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/image:go_default_library", - "//vendor/sigs.k8s.io/kustomize/pkg/patch:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/fieldpath/BUILD b/vendor/sigs.k8s.io/structured-merge-diff/v4/fieldpath/BUILD deleted file mode 100644 index 4fb03bd35ac6e..0000000000000 --- a/vendor/sigs.k8s.io/structured-merge-diff/v4/fieldpath/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "element.go", - "fromvalue.go", - "managers.go", - "path.go", - "pathelementmap.go", - "serialize.go", - "serialize-pe.go", - "set.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/structured-merge-diff/v4/fieldpath", - importpath = "sigs.k8s.io/structured-merge-diff/v4/fieldpath", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/json-iterator/go:go_default_library", - "//vendor/sigs.k8s.io/structured-merge-diff/v4/value:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/merge/BUILD b/vendor/sigs.k8s.io/structured-merge-diff/v4/merge/BUILD deleted file mode 100644 index b2560a3c5e675..0000000000000 --- a/vendor/sigs.k8s.io/structured-merge-diff/v4/merge/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "conflict.go", - "update.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/structured-merge-diff/v4/merge", - importpath = "sigs.k8s.io/structured-merge-diff/v4/merge", - visibility = ["//visibility:public"], - deps = [ - "//vendor/sigs.k8s.io/structured-merge-diff/v4/fieldpath:go_default_library", - "//vendor/sigs.k8s.io/structured-merge-diff/v4/typed:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/schema/BUILD b/vendor/sigs.k8s.io/structured-merge-diff/v4/schema/BUILD deleted file mode 100644 index f3db4ad95ca03..0000000000000 --- a/vendor/sigs.k8s.io/structured-merge-diff/v4/schema/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "elements.go", - "equals.go", - "schemaschema.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/structured-merge-diff/v4/schema", - importpath = "sigs.k8s.io/structured-merge-diff/v4/schema", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/BUILD b/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/BUILD deleted file mode 100644 index 9307033713817..0000000000000 --- a/vendor/sigs.k8s.io/structured-merge-diff/v4/typed/BUILD +++ /dev/null @@ -1,39 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "helpers.go", - "merge.go", - "parser.go", - "remove.go", - "tofieldset.go", - "typed.go", - "union.go", - "validate.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/structured-merge-diff/v4/typed", - importpath = "sigs.k8s.io/structured-merge-diff/v4/typed", - visibility = ["//visibility:public"], - deps = [ - "//vendor/gopkg.in/yaml.v2:go_default_library", - "//vendor/sigs.k8s.io/structured-merge-diff/v4/fieldpath:go_default_library", - "//vendor/sigs.k8s.io/structured-merge-diff/v4/schema:go_default_library", - "//vendor/sigs.k8s.io/structured-merge-diff/v4/value:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/BUILD b/vendor/sigs.k8s.io/structured-merge-diff/v4/value/BUILD deleted file mode 100644 index 3f233be5e99d4..0000000000000 --- a/vendor/sigs.k8s.io/structured-merge-diff/v4/value/BUILD +++ /dev/null @@ -1,44 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "allocator.go", - "doc.go", - "fields.go", - "jsontagutil.go", - "list.go", - "listreflect.go", - "listunstructured.go", - "map.go", - "mapreflect.go", - "mapunstructured.go", - "reflectcache.go", - "scalar.go", - "structreflect.go", - "value.go", - "valuereflect.go", - "valueunstructured.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/structured-merge-diff/v4/value", - importpath = "sigs.k8s.io/structured-merge-diff/v4/value", - visibility = ["//visibility:public"], - deps = [ - "//vendor/github.com/json-iterator/go:go_default_library", - "//vendor/gopkg.in/yaml.v2:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/sigs.k8s.io/yaml/BUILD b/vendor/sigs.k8s.io/yaml/BUILD deleted file mode 100644 index a030e7f2cdbfa..0000000000000 --- a/vendor/sigs.k8s.io/yaml/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "fields.go", - "yaml.go", - "yaml_go110.go", - ], - importmap = "k8s.io/kubernetes/vendor/sigs.k8s.io/yaml", - importpath = "sigs.k8s.io/yaml", - visibility = ["//visibility:public"], - deps = ["//vendor/gopkg.in/yaml.v2:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) diff --git a/vendor/vbom.ml/util/sortorder/BUILD b/vendor/vbom.ml/util/sortorder/BUILD deleted file mode 100644 index fb0c34cfd1dc3..0000000000000 --- a/vendor/vbom.ml/util/sortorder/BUILD +++ /dev/null @@ -1,26 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "natsort.go", - ], - importmap = "k8s.io/kubernetes/vendor/vbom.ml/util/sortorder", - importpath = "vbom.ml/util/sortorder", - visibility = ["//visibility:public"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], - visibility = ["//visibility:public"], -) From 512f733fcbf275af939217b1a566b831775ba86e Mon Sep 17 00:00:00 2001 From: Tomas Nozicka Date: Thu, 29 Oct 2020 13:56:33 +0100 Subject: [PATCH 96/96] UPSTREAM: : update generated --- .../generated/zz_generated.annotations.go | 10382 ++++ .../v1/zz_generated.conversion.go | 71 + .../v1/zz_generated.deepcopy.go | 16 + .../zz_generated.deepcopy.go | 16 + .../v1/zz_generated.conversion.go | 69 + .../v1/zz_generated.deepcopy.go | 16 + .../runonceduration/zz_generated.deepcopy.go | 16 + .../v1/zz_generated.conversion.go | 71 + .../externalipranger/zz_generated.deepcopy.go | 16 + .../v1/zz_generated.conversion.go | 69 + .../v1/zz_generated.deepcopy.go | 16 + .../zz_generated.deepcopy.go | 16 + .../v1/zz_generated.conversion.go | 67 + .../v1/zz_generated.deepcopy.go | 16 + .../ingressadmission/zz_generated.deepcopy.go | 16 + .../v1/zz_generated.conversion.go | 69 + .../v1/zz_generated.deepcopy.go | 16 + .../zz_generated.deepcopy.go | 16 + pkg/generated/openapi/zz_generated.openapi.go | 47248 ++++++++++++++++ test/e2e/generated/bindata.go | 8978 +++ 20 files changed, 67200 insertions(+) create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.conversion.go create mode 100644 openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.conversion.go create mode 100644 openshift-kube-apiserver/admission/network/apis/externalipranger/v1/zz_generated.conversion.go create mode 100644 openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.conversion.go create mode 100644 openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.conversion.go create mode 100644 openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.conversion.go create mode 100644 pkg/generated/openapi/zz_generated.openapi.go create mode 100644 test/e2e/generated/bindata.go diff --git a/openshift-hack/e2e/annotate/generated/zz_generated.annotations.go b/openshift-hack/e2e/annotate/generated/zz_generated.annotations.go index 951c880085e16..1ea45a46ddb24 100644 --- a/openshift-hack/e2e/annotate/generated/zz_generated.annotations.go +++ b/openshift-hack/e2e/annotate/generated/zz_generated.annotations.go @@ -1 +1,10383 @@ package generated + +import ( + "fmt" + "github.com/onsi/ginkgo" + "github.com/onsi/ginkgo/types" +) + +var annotations = map[string]string{ + "[Top Level] Recreate [Feature:Recreate] recreate nodes and ensure they function upon restart": "recreate nodes and ensure they function upon restart [Disabled:Broken] [sig-cluster-lifecycle] [Suite:k8s]", + + "[Top Level] [k8s.io] Cluster size autoscaler scalability [Slow] CA ignores unschedulable pods while scheduling schedulable pods [Feature:ClusterAutoscalerScalability6]": "CA ignores unschedulable pods while scheduling schedulable pods [Feature:ClusterAutoscalerScalability6] [sig-cluster-lifecycle] [Suite:k8s]", + + "[Top Level] [k8s.io] Cluster size autoscaler scalability [Slow] should scale down empty nodes [Feature:ClusterAutoscalerScalability3]": "should scale down empty nodes [Feature:ClusterAutoscalerScalability3] [sig-cluster-lifecycle] [Suite:k8s]", + + "[Top Level] [k8s.io] Cluster size autoscaler scalability [Slow] should scale down underutilized nodes [Feature:ClusterAutoscalerScalability4]": "should scale down underutilized nodes [Feature:ClusterAutoscalerScalability4] [sig-cluster-lifecycle] [Suite:k8s]", + + "[Top Level] [k8s.io] Cluster size autoscaler scalability [Slow] should scale up at all [Feature:ClusterAutoscalerScalability1]": "should scale up at all [Feature:ClusterAutoscalerScalability1] [sig-cluster-lifecycle] [Suite:k8s]", + + "[Top Level] [k8s.io] Cluster size autoscaler scalability [Slow] should scale up twice [Feature:ClusterAutoscalerScalability2]": "should scale up twice [Feature:ClusterAutoscalerScalability2] [sig-cluster-lifecycle] [Suite:k8s]", + + "[Top Level] [k8s.io] Cluster size autoscaler scalability [Slow] shouldn't scale down with underutilized nodes due to host port conflicts [Feature:ClusterAutoscalerScalability5]": "shouldn't scale down with underutilized nodes due to host port conflicts [Feature:ClusterAutoscalerScalability5] [sig-cluster-lifecycle] [Suite:k8s]", + + "[Top Level] [k8s.io] Container Lifecycle Hook when create a pod with lifecycle hook should execute poststart exec hook properly [NodeConformance] [Conformance]": "should execute poststart exec hook properly [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Container Lifecycle Hook when create a pod with lifecycle hook should execute poststart http hook properly [NodeConformance] [Conformance]": "should execute poststart http hook properly [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Container Lifecycle Hook when create a pod with lifecycle hook should execute prestop exec hook properly [NodeConformance] [Conformance]": "should execute prestop exec hook properly [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Container Lifecycle Hook when create a pod with lifecycle hook should execute prestop http hook properly [NodeConformance] [Conformance]": "should execute prestop http hook properly [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Container Runtime blackbox test on terminated container should report termination message [LinuxOnly] as empty when pod succeeds and TerminationMessagePolicy FallbackToLogsOnError is set [NodeConformance] [Conformance]": "should report termination message [LinuxOnly] as empty when pod succeeds and TerminationMessagePolicy FallbackToLogsOnError is set [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Container Runtime blackbox test on terminated container should report termination message [LinuxOnly] from file when pod succeeds and TerminationMessagePolicy FallbackToLogsOnError is set [NodeConformance] [Conformance]": "should report termination message [LinuxOnly] from file when pod succeeds and TerminationMessagePolicy FallbackToLogsOnError is set [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Container Runtime blackbox test on terminated container should report termination message [LinuxOnly] from log output if TerminationMessagePolicy FallbackToLogsOnError is set [NodeConformance] [Conformance]": "should report termination message [LinuxOnly] from log output if TerminationMessagePolicy FallbackToLogsOnError is set [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Container Runtime blackbox test on terminated container should report termination message [LinuxOnly] if TerminationMessagePath is set [NodeConformance]": "should report termination message [LinuxOnly] if TerminationMessagePath is set [NodeConformance] [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Container Runtime blackbox test on terminated container should report termination message [LinuxOnly] if TerminationMessagePath is set as non-root user and at a non-default path [NodeConformance] [Conformance]": "should report termination message [LinuxOnly] if TerminationMessagePath is set as non-root user and at a non-default path [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Container Runtime blackbox test when running a container with a new image should be able to pull from private registry with secret [NodeConformance]": "should be able to pull from private registry with secret [NodeConformance] [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Container Runtime blackbox test when running a container with a new image should be able to pull image [NodeConformance]": "should be able to pull image [NodeConformance] [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Container Runtime blackbox test when running a container with a new image should not be able to pull from private registry without secret [NodeConformance]": "should not be able to pull from private registry without secret [NodeConformance] [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Container Runtime blackbox test when running a container with a new image should not be able to pull image from invalid registry [NodeConformance]": "should not be able to pull image from invalid registry [NodeConformance] [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Container Runtime blackbox test when starting a container that exits should run with the expected status [NodeConformance] [Conformance]": "should run with the expected status [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Docker Containers should be able to override the image's default arguments (docker cmd) [NodeConformance] [Conformance]": "should be able to override the image's default arguments (docker cmd) [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Docker Containers should be able to override the image's default command (docker entrypoint) [NodeConformance] [Conformance]": "should be able to override the image's default command (docker entrypoint) [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Docker Containers should be able to override the image's default command and arguments [NodeConformance] [Conformance]": "should be able to override the image's default command and arguments [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Docker Containers should use the image defaults if command and args are blank [NodeConformance] [Conformance]": "should use the image defaults if command and args are blank [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Downward API [Serial] [Disruptive] [NodeFeature:EphemeralStorage] Downward API tests for local ephemeral storage should provide container's limits.ephemeral-storage and requests.ephemeral-storage as env vars": "should provide container's limits.ephemeral-storage and requests.ephemeral-storage as env vars [sig-node] [Suite:k8s]", + + "[Top Level] [k8s.io] Downward API [Serial] [Disruptive] [NodeFeature:EphemeralStorage] Downward API tests for local ephemeral storage should provide default limits.ephemeral-storage from node allocatable": "should provide default limits.ephemeral-storage from node allocatable [sig-node] [Suite:k8s]", + + "[Top Level] [k8s.io] GKE local SSD [Feature:GKELocalSSD] should write and read from node local SSD [Feature:GKELocalSSD]": "should write and read from node local SSD [Feature:GKELocalSSD] [sig-arch] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] GKE node pools [Feature:GKENodePool] should create a cluster with multiple node pools [Feature:GKENodePool]": "should create a cluster with multiple node pools [Feature:GKENodePool] [sig-arch] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] InitContainer [NodeConformance] should invoke init containers on a RestartAlways pod [Conformance]": "should invoke init containers on a RestartAlways pod [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] InitContainer [NodeConformance] should invoke init containers on a RestartNever pod [Conformance]": "should invoke init containers on a RestartNever pod [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] InitContainer [NodeConformance] should not start app containers and fail the pod if init containers fail on a RestartNever pod [Conformance]": "should not start app containers and fail the pod if init containers fail on a RestartNever pod [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] InitContainer [NodeConformance] should not start app containers if init containers fail on a RestartAlways pod [Conformance]": "should not start app containers if init containers fail on a RestartAlways pod [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Kubelet when scheduling a busybox Pod with hostAliases should write entries to /etc/hosts [LinuxOnly] [NodeConformance] [Conformance]": "should write entries to /etc/hosts [LinuxOnly] [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Kubelet when scheduling a busybox command in a pod should print the output to logs [NodeConformance] [Conformance]": "should print the output to logs [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Kubelet when scheduling a busybox command that always fails in a pod should be possible to delete [NodeConformance] [Conformance]": "should be possible to delete [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Kubelet when scheduling a busybox command that always fails in a pod should have an terminated reason [NodeConformance] [Conformance]": "should have an terminated reason [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Kubelet when scheduling a read only busybox container should not write to root filesystem [LinuxOnly] [NodeConformance] [Conformance]": "should not write to root filesystem [LinuxOnly] [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] KubeletManagedEtcHosts should test kubelet managed /etc/hosts file [LinuxOnly] [NodeConformance] [Conformance]": "should test kubelet managed /etc/hosts file [LinuxOnly] [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Lease lease API should be available [Conformance]": "lease API should be available [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] NodeLease when the NodeLease feature is enabled should have OwnerReferences set": "should have OwnerReferences set [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] NodeLease when the NodeLease feature is enabled the kubelet should create and update a lease in the kube-node-lease namespace": "the kubelet should create and update a lease in the kube-node-lease namespace [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] NodeLease when the NodeLease feature is enabled the kubelet should report node status infrequently": "the kubelet should report node status infrequently [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Pods should allow activeDeadlineSeconds to be updated [NodeConformance] [Conformance]": "should allow activeDeadlineSeconds to be updated [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Pods should be submitted and removed [NodeConformance] [Conformance]": "should be submitted and removed [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Pods should be updated [NodeConformance] [Conformance]": "should be updated [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Pods should cap back-off at MaxContainerBackOff [Slow][NodeConformance]": "should cap back-off at MaxContainerBackOff [Slow][NodeConformance] [sig-node] [Suite:k8s]", + + "[Top Level] [k8s.io] Pods should contain environment variables for services [NodeConformance] [Conformance]": "should contain environment variables for services [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Pods should delete a collection of pods [Conformance]": "should delete a collection of pods [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Pods should get a host IP [NodeConformance] [Conformance]": "should get a host IP [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Pods should have their auto-restart back-off timer reset on image update [Slow][NodeConformance]": "should have their auto-restart back-off timer reset on image update [Slow][NodeConformance] [sig-node] [Suite:k8s]", + + "[Top Level] [k8s.io] Pods should support pod readiness gates [NodeFeature:PodReadinessGate]": "should support pod readiness gates [NodeFeature:PodReadinessGate] [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Pods should support remote command execution over websockets [NodeConformance] [Conformance]": "should support remote command execution over websockets [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Pods should support retrieving logs from the container over websockets [NodeConformance] [Conformance]": "should support retrieving logs from the container over websockets [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] PrivilegedPod [NodeConformance] should enable privileged commands [LinuxOnly]": "should enable privileged commands [LinuxOnly] [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Probing container should *not* be restarted with a /healthz http liveness probe [NodeConformance] [Conformance]": "should *not* be restarted with a /healthz http liveness probe [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Probing container should *not* be restarted with a exec \"cat /tmp/health\" liveness probe [NodeConformance] [Conformance]": "should *not* be restarted with a exec \"cat /tmp/health\" liveness probe [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Probing container should *not* be restarted with a non-local redirect http liveness probe": "should *not* be restarted with a non-local redirect http liveness probe [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Probing container should *not* be restarted with a tcp:8080 liveness probe [NodeConformance] [Conformance]": "should *not* be restarted with a tcp:8080 liveness probe [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Probing container should be restarted with a /healthz http liveness probe [NodeConformance] [Conformance]": "should be restarted with a /healthz http liveness probe [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Probing container should be restarted with a docker exec liveness probe with timeout ": "should be restarted with a docker exec liveness probe with timeout [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Probing container should be restarted with a exec \"cat /tmp/health\" liveness probe [NodeConformance] [Conformance]": "should be restarted with a exec \"cat /tmp/health\" liveness probe [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Probing container should be restarted with a local redirect http liveness probe": "should be restarted with a local redirect http liveness probe [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Probing container should have monotonically increasing restart count [NodeConformance] [Conformance]": "should have monotonically increasing restart count [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Probing container with readiness probe should not be ready before initial delay and never restart [NodeConformance] [Conformance]": "with readiness probe should not be ready before initial delay and never restart [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Probing container with readiness probe that fails should never be ready and never restart [NodeConformance] [Conformance]": "with readiness probe that fails should never be ready and never restart [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Security Context When creating a container with runAsNonRoot should not run with an explicit root user ID [LinuxOnly]": "should not run with an explicit root user ID [LinuxOnly] [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Security Context When creating a container with runAsNonRoot should not run without a specified user ID": "should not run without a specified user ID [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Security Context When creating a container with runAsNonRoot should run with an explicit non-root user ID [LinuxOnly]": "should run with an explicit non-root user ID [LinuxOnly] [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Security Context When creating a container with runAsNonRoot should run with an image specified user ID": "should run with an image specified user ID [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Security Context When creating a container with runAsUser should run the container with uid 0 [LinuxOnly] [NodeConformance]": "should run the container with uid 0 [LinuxOnly] [NodeConformance] [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Security Context When creating a container with runAsUser should run the container with uid 65534 [LinuxOnly] [NodeConformance] [Conformance]": "should run the container with uid 65534 [LinuxOnly] [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Security Context When creating a pod with privileged should run the container as privileged when true [LinuxOnly] [NodeFeature:HostAccess]": "should run the container as privileged when true [LinuxOnly] [NodeFeature:HostAccess] [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Security Context When creating a pod with privileged should run the container as unprivileged when false [LinuxOnly] [NodeConformance] [Conformance]": "should run the container as unprivileged when false [LinuxOnly] [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Security Context When creating a pod with readOnlyRootFilesystem should run the container with readonly rootfs when readOnlyRootFilesystem=true [LinuxOnly] [NodeConformance]": "should run the container with readonly rootfs when readOnlyRootFilesystem=true [LinuxOnly] [NodeConformance] [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Security Context When creating a pod with readOnlyRootFilesystem should run the container with writable rootfs when readOnlyRootFilesystem=false [NodeConformance] [Conformance]": "should run the container with writable rootfs when readOnlyRootFilesystem=false [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Security Context when creating containers with AllowPrivilegeEscalation should allow privilege escalation when not explicitly set and uid != 0 [LinuxOnly] [NodeConformance]": "should allow privilege escalation when not explicitly set and uid != 0 [LinuxOnly] [NodeConformance] [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Security Context when creating containers with AllowPrivilegeEscalation should allow privilege escalation when true [LinuxOnly] [NodeConformance]": "should allow privilege escalation when true [LinuxOnly] [NodeConformance] [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] Security Context when creating containers with AllowPrivilegeEscalation should not allow privilege escalation when false [LinuxOnly] [NodeConformance] [Conformance]": "should not allow privilege escalation when false [LinuxOnly] [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Sysctls [LinuxOnly] [NodeFeature:Sysctls] should not launch unsafe, but not explicitly enabled sysctls on the node": "should not launch unsafe, but not explicitly enabled sysctls on the node [Disabled:Broken] [sig-node] [Suite:k8s]", + + "[Top Level] [k8s.io] Sysctls [LinuxOnly] [NodeFeature:Sysctls] should reject invalid sysctls": "should reject invalid sysctls [Disabled:Broken] [sig-node] [Suite:k8s]", + + "[Top Level] [k8s.io] Sysctls [LinuxOnly] [NodeFeature:Sysctls] should support sysctls": "should support sysctls [Disabled:Broken] [sig-node] [Suite:k8s]", + + "[Top Level] [k8s.io] Sysctls [LinuxOnly] [NodeFeature:Sysctls] should support unsafe sysctls which are actually whitelisted": "should support unsafe sysctls which are actually whitelisted [Disabled:Broken] [sig-node] [Suite:k8s]", + + "[Top Level] [k8s.io] Variable Expansion should allow composing env vars into new env vars [NodeConformance] [Conformance]": "should allow composing env vars into new env vars [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Variable Expansion should allow substituting values in a container's args [NodeConformance] [Conformance]": "should allow substituting values in a container's args [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Variable Expansion should allow substituting values in a container's command [NodeConformance] [Conformance]": "should allow substituting values in a container's command [NodeConformance] [Conformance] [sig-node] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Variable Expansion should allow substituting values in a volume subpath [sig-storage] [Conformance]": "should allow substituting values in a volume subpath [sig-storage] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] Variable Expansion should fail substituting values in a volume subpath with absolute path [sig-storage][Slow] [Conformance]": "should fail substituting values in a volume subpath with absolute path [sig-storage][Slow] [Conformance] [Suite:k8s]", + + "[Top Level] [k8s.io] Variable Expansion should fail substituting values in a volume subpath with backticks [sig-storage][Slow] [Conformance]": "should fail substituting values in a volume subpath with backticks [sig-storage][Slow] [Conformance] [Suite:k8s]", + + "[Top Level] [k8s.io] Variable Expansion should succeed in writing subpaths in container [sig-storage][Slow] [Conformance]": "should succeed in writing subpaths in container [sig-storage][Slow] [Conformance] [Suite:k8s]", + + "[Top Level] [k8s.io] Variable Expansion should verify that a failing subpath expansion can be modified during the lifecycle of a container [sig-storage][Slow] [Conformance]": "should verify that a failing subpath expansion can be modified during the lifecycle of a container [sig-storage][Slow] [Conformance] [Suite:k8s]", + + "[Top Level] [k8s.io] [Feature:Example] [k8s.io] Downward API should create a pod that prints his name and namespace": "should create a pod that prints his name and namespace [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [Feature:Example] [k8s.io] Liveness liveness pods should be automatically restarted": "liveness pods should be automatically restarted [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [Feature:Example] [k8s.io] Secret should create a pod that reads a secret": "should create a pod that reads a secret [sig-node] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [Feature:TTLAfterFinished][NodeAlphaFeature:TTLAfterFinished] job should be deleted once it finishes after TTL seconds": "job should be deleted once it finishes after TTL seconds [Disabled:Alpha] [sig-node] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] AppArmor load AppArmor profiles can disable an AppArmor profile, using unconfined": "can disable an AppArmor profile, using unconfined [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] AppArmor load AppArmor profiles should enforce an AppArmor profile": "should enforce an AppArmor profile [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Events should be sent by kubelets and the scheduler about pods scheduling and running [Conformance]": "should be sent by kubelets and the scheduler about pods scheduling and running [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Hostname of Pod [Feature:SetHostnameAsFQDN] a pod with subdomain field has FQDN, hostname is shortname [Feature:SetHostnameAsFQDN]": "a pod with subdomain field has FQDN, hostname is shortname [Feature:SetHostnameAsFQDN] [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Hostname of Pod [Feature:SetHostnameAsFQDN] a pod with subdomain field has FQDN, when setHostnameAsFQDN is set to true, the FQDN is set as hostname [Feature:SetHostnameAsFQDN]": "a pod with subdomain field has FQDN, when setHostnameAsFQDN is set to true, the FQDN is set as hostname [Feature:SetHostnameAsFQDN] [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Hostname of Pod [Feature:SetHostnameAsFQDN] a pod without FQDN is not affected by SetHostnameAsFQDN field [Feature:SetHostnameAsFQDN]": "a pod without FQDN is not affected by SetHostnameAsFQDN field [Feature:SetHostnameAsFQDN] [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Hostname of Pod [Feature:SetHostnameAsFQDN] a pod without subdomain field does not have FQDN [Feature:SetHostnameAsFQDN]": "a pod without subdomain field does not have FQDN [Feature:SetHostnameAsFQDN] [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Kubelet [Serial] [Slow] [k8s.io] [sig-node] experimental resource usage tracking [Feature:ExperimentalResourceUsageTracking] resource tracking for 100 pods per node": "resource tracking for 100 pods per node [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Kubelet [Serial] [Slow] [k8s.io] [sig-node] regular resource usage tracking [Feature:RegularResourceUsageTracking] resource tracking for 0 pods per node": "resource tracking for 0 pods per node [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Kubelet [Serial] [Slow] [k8s.io] [sig-node] regular resource usage tracking [Feature:RegularResourceUsageTracking] resource tracking for 100 pods per node": "resource tracking for 100 pods per node [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Mount propagation should propagate mounts to the host": "should propagate mounts to the host [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] NoExecuteTaintManager Multiple Pods [Serial] evicts pods with minTolerationSeconds [Disruptive] [Conformance]": "evicts pods with minTolerationSeconds [Disruptive] [Conformance] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] NoExecuteTaintManager Multiple Pods [Serial] only evicts pods without tolerations from tainted nodes": "only evicts pods without tolerations from tainted nodes [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] NoExecuteTaintManager Single Pod [Serial] doesn't evict pod with tolerations from tainted nodes": "doesn't evict pod with tolerations from tainted nodes [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] NoExecuteTaintManager Single Pod [Serial] eventually evict pod with finite tolerations from tainted nodes": "eventually evict pod with finite tolerations from tainted nodes [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] NoExecuteTaintManager Single Pod [Serial] evicts pods from tainted nodes": "evicts pods from tainted nodes [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] NoExecuteTaintManager Single Pod [Serial] removing taint cancels eviction [Disruptive] [Conformance]": "removing taint cancels eviction [Disruptive] [Conformance] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] NodeProblemDetector [DisabledForLargeClusters] should run without error": "should run without error [Disabled:SpecialConfig] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Pod garbage collector [Feature:PodGarbageCollector] [Slow] should handle the creation of 1000 pods": "should handle the creation of 1000 pods [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Pods Extended [k8s.io] Delete Grace Period should be submitted and removed": "should be submitted and removed [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Pods Extended [k8s.io] Pod Container Status should never report success for a pending container": "should never report success for a pending container [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Pods Extended [k8s.io] Pods Set QOS Class should be set on Pods with matching resource requests and limits for memory and cpu [Conformance]": "should be set on Pods with matching resource requests and limits for memory and cpu [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] PreStop graceful pod terminated should wait until preStop hook completes the process [Flaky]": "graceful pod terminated should wait until preStop hook completes the process [Flaky] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] PreStop should call prestop when killing a pod [Conformance]": "should call prestop when killing a pod [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] SSH should SSH to all nodes and run commands": "should SSH to all nodes and run commands [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Security Context should support container.SecurityContext.RunAsUser And container.SecurityContext.RunAsGroup [LinuxOnly]": "should support container.SecurityContext.RunAsUser And container.SecurityContext.RunAsGroup [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Security Context should support container.SecurityContext.RunAsUser [LinuxOnly]": "should support container.SecurityContext.RunAsUser [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Security Context should support pod.Spec.SecurityContext.RunAsUser And pod.Spec.SecurityContext.RunAsGroup [LinuxOnly]": "should support pod.Spec.SecurityContext.RunAsUser And pod.Spec.SecurityContext.RunAsGroup [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Security Context should support pod.Spec.SecurityContext.RunAsUser [LinuxOnly]": "should support pod.Spec.SecurityContext.RunAsUser [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Security Context should support pod.Spec.SecurityContext.SupplementalGroups [LinuxOnly]": "should support pod.Spec.SecurityContext.SupplementalGroups [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Security Context should support seccomp alpha runtime/default annotation [Feature:Seccomp] [LinuxOnly]": "should support seccomp alpha runtime/default annotation [Feature:Seccomp] [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Security Context should support seccomp alpha unconfined annotation on the container [Feature:Seccomp] [LinuxOnly]": "should support seccomp alpha unconfined annotation on the container [Feature:Seccomp] [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Security Context should support seccomp alpha unconfined annotation on the pod [Feature:Seccomp] [LinuxOnly]": "should support seccomp alpha unconfined annotation on the pod [Feature:Seccomp] [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Security Context should support seccomp default which is unconfined [Feature:Seccomp] [LinuxOnly]": "should support seccomp default which is unconfined [Feature:Seccomp] [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Security Context should support volume SELinux relabeling [Flaky] [LinuxOnly]": "should support volume SELinux relabeling [Flaky] [LinuxOnly] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Security Context should support volume SELinux relabeling when using hostIPC [Flaky] [LinuxOnly]": "should support volume SELinux relabeling when using hostIPC [Flaky] [LinuxOnly] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] Security Context should support volume SELinux relabeling when using hostPID [Flaky] [LinuxOnly]": "should support volume SELinux relabeling when using hostPID [Flaky] [LinuxOnly] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] crictl should be able to run crictl on the node": "should be able to run crictl on the node [Skipped:gce] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] kubelet [k8s.io] [sig-node] Clean up pods on node kubelet should be able to delete 10 pods per node in 1m0s.": "kubelet should be able to delete 10 pods per node in 1m0s. [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] kubelet [k8s.io] [sig-node] host cleanup with volume mounts [sig-storage][HostCleanup][Flaky] Host cleanup after disrupting NFS volume [NFS] after stopping the nfs-server and deleting the (active) client pod, the NFS mount and the pod's UID directory should be removed.": "after stopping the nfs-server and deleting the (active) client pod, the NFS mount and the pod's UID directory should be removed. [Suite:k8s]", + + "[Top Level] [k8s.io] [sig-node] kubelet [k8s.io] [sig-node] host cleanup with volume mounts [sig-storage][HostCleanup][Flaky] Host cleanup after disrupting NFS volume [NFS] after stopping the nfs-server and deleting the (sleeping) client pod, the NFS mount and the pod's UID directory should be removed.": "after stopping the nfs-server and deleting the (sleeping) client pod, the NFS mount and the pod's UID directory should be removed. [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] listing mutating webhooks should work [Conformance]": "listing mutating webhooks should work [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] listing validating webhooks should work [Conformance]": "listing validating webhooks should work [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] patching/updating a mutating webhook should work [Conformance]": "patching/updating a mutating webhook should work [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] patching/updating a validating webhook should work [Conformance]": "patching/updating a validating webhook should work [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] should be able to deny attaching pod [Conformance]": "should be able to deny attaching pod [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] should be able to deny custom resource creation, update and deletion [Conformance]": "should be able to deny custom resource creation, update and deletion [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] should be able to deny pod and configmap creation [Conformance]": "should be able to deny pod and configmap creation [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] should deny crd creation [Conformance]": "should deny crd creation [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] should honor timeout [Conformance]": "should honor timeout [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] should include webhook resources in discovery documents [Conformance]": "should include webhook resources in discovery documents [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] should mutate configmap [Conformance]": "should mutate configmap [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] should mutate custom resource [Conformance]": "should mutate custom resource [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] should mutate custom resource with different stored version [Conformance]": "should mutate custom resource with different stored version [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] should mutate custom resource with pruning [Conformance]": "should mutate custom resource with pruning [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] should mutate pod and apply defaults after mutation [Conformance]": "should mutate pod and apply defaults after mutation [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] should not be able to mutate or prevent deletion of webhook configuration objects [Conformance]": "should not be able to mutate or prevent deletion of webhook configuration objects [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] should unconditionally reject operations on fail closed webhook [Conformance]": "should unconditionally reject operations on fail closed webhook [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Aggregator Should be able to support the 1.17 Sample API Server using the current Aggregator [Conformance]": "Should be able to support the 1.17 Sample API Server using the current Aggregator [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourceConversionWebhook [Privileged:ClusterAdmin] should be able to convert a non homogeneous list of CRs [Conformance]": "should be able to convert a non homogeneous list of CRs [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourceConversionWebhook [Privileged:ClusterAdmin] should be able to convert from CR v1 to CR v2 [Conformance]": "should be able to convert from CR v1 to CR v2 [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourceDefinition Watch [Privileged:ClusterAdmin] CustomResourceDefinition Watch watch on custom resource definition objects [Conformance]": "watch on custom resource definition objects [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourceDefinition resources [Privileged:ClusterAdmin] Simple CustomResourceDefinition creating/deleting custom resource definition objects works [Conformance]": "creating/deleting custom resource definition objects works [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourceDefinition resources [Privileged:ClusterAdmin] Simple CustomResourceDefinition getting/updating/patching custom resource definition status sub-resource works [Conformance]": "getting/updating/patching custom resource definition status sub-resource works [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourceDefinition resources [Privileged:ClusterAdmin] Simple CustomResourceDefinition listing custom resource definition objects works [Conformance]": "listing custom resource definition objects works [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourceDefinition resources [Privileged:ClusterAdmin] custom resource defaulting for requests and from storage works [Conformance]": "custom resource defaulting for requests and from storage works [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourceDefinition resources [Privileged:ClusterAdmin] should include custom resource definition resources in discovery documents [Conformance]": "should include custom resource definition resources in discovery documents [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourcePublishOpenAPI [Privileged:ClusterAdmin] [Flaky] kubectl explain works for CR with the same resource name as built-in object.": "[Flaky] kubectl explain works for CR with the same resource name as built-in object. [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourcePublishOpenAPI [Privileged:ClusterAdmin] removes definition from spec when one version gets changed to not be served [Conformance]": "removes definition from spec when one version gets changed to not be served [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourcePublishOpenAPI [Privileged:ClusterAdmin] updates the published spec when one version gets renamed [Conformance]": "updates the published spec when one version gets renamed [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourcePublishOpenAPI [Privileged:ClusterAdmin] works for CRD preserving unknown fields at the schema root [Conformance]": "works for CRD preserving unknown fields at the schema root [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourcePublishOpenAPI [Privileged:ClusterAdmin] works for CRD preserving unknown fields in an embedded object [Conformance]": "works for CRD preserving unknown fields in an embedded object [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourcePublishOpenAPI [Privileged:ClusterAdmin] works for CRD with validation schema [Conformance]": "works for CRD with validation schema [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourcePublishOpenAPI [Privileged:ClusterAdmin] works for CRD without validation schema [Conformance]": "works for CRD without validation schema [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourcePublishOpenAPI [Privileged:ClusterAdmin] works for multiple CRDs of different groups [Conformance]": "works for multiple CRDs of different groups [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourcePublishOpenAPI [Privileged:ClusterAdmin] works for multiple CRDs of same group and version but different kinds [Conformance]": "works for multiple CRDs of same group and version but different kinds [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] CustomResourcePublishOpenAPI [Privileged:ClusterAdmin] works for multiple CRDs of same group but different versions [Conformance]": "works for multiple CRDs of same group but different versions [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Discovery Custom resource should have storage version hash": "Custom resource should have storage version hash [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Discovery should validate PreferredVersion for each APIGroup [Conformance]": "should validate PreferredVersion for each APIGroup [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Etcd failure [Disruptive] should recover from SIGKILL": "should recover from SIGKILL [Serial] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Etcd failure [Disruptive] should recover from network partition with master": "should recover from network partition with master [Serial] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Events should delete a collection of events [Conformance]": "should delete a collection of events [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Events should ensure that an event can be fetched, patched, deleted, and listed [Conformance]": "should ensure that an event can be fetched, patched, deleted, and listed [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Garbage collector should delete RS created by deployment when not orphaning [Conformance]": "should delete RS created by deployment when not orphaning [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Garbage collector should delete jobs and pods created by cronjob": "should delete jobs and pods created by cronjob [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Garbage collector should delete pods created by rc when not orphaning [Conformance]": "should delete pods created by rc when not orphaning [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Garbage collector should keep the rc around until all its pods are deleted if the deleteOptions says so [Conformance]": "should keep the rc around until all its pods are deleted if the deleteOptions says so [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Garbage collector should not be blocked by dependency circle [Conformance]": "should not be blocked by dependency circle [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Garbage collector should not delete dependents that have both valid owner and owner that's waiting for dependents to be deleted [Conformance]": "should not delete dependents that have both valid owner and owner that's waiting for dependents to be deleted [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Garbage collector should orphan RS created by deployment when deleteOptions.PropagationPolicy is Orphan [Conformance]": "should orphan RS created by deployment when deleteOptions.PropagationPolicy is Orphan [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Garbage collector should orphan pods created by rc if delete options say so [Conformance]": "should orphan pods created by rc if delete options say so [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Garbage collector should orphan pods created by rc if deleteOptions.OrphanDependents is nil": "should orphan pods created by rc if deleteOptions.OrphanDependents is nil [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Garbage collector should support cascading deletion of custom resources": "should support cascading deletion of custom resources [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Garbage collector should support orphan deletion of custom resources": "should support orphan deletion of custom resources [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Generated clientset should create pods, set the deletionTimestamp and deletionGracePeriodSeconds of the pod": "should create pods, set the deletionTimestamp and deletionGracePeriodSeconds of the pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Generated clientset should create v1beta1 cronJobs, delete cronJobs, watch cronJobs": "should create v1beta1 cronJobs, delete cronJobs, watch cronJobs [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Namespaces [Serial] should always delete fast (ALL of 100 namespaces in 150 seconds) [Feature:ComprehensiveNamespaceDraining]": "should always delete fast (ALL of 100 namespaces in 150 seconds) [Feature:ComprehensiveNamespaceDraining] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Namespaces [Serial] should delete fast enough (90 percent of 100 namespaces in 150 seconds)": "should delete fast enough (90 percent of 100 namespaces in 150 seconds) [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Namespaces [Serial] should ensure that all pods are removed when a namespace is deleted [Conformance]": "should ensure that all pods are removed when a namespace is deleted [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Namespaces [Serial] should ensure that all services are removed when a namespace is deleted [Conformance]": "should ensure that all services are removed when a namespace is deleted [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Namespaces [Serial] should patch a Namespace [Conformance]": "should patch a Namespace [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota [Feature:PodPriority] should verify ResourceQuota's multiple priority class scope (quota set to pod count: 2) against 2 pods with same priority classes.": "should verify ResourceQuota's multiple priority class scope (quota set to pod count: 2) against 2 pods with same priority classes. [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota [Feature:PodPriority] should verify ResourceQuota's priority class scope (cpu, memory quota set) against a pod with same priority class.": "should verify ResourceQuota's priority class scope (cpu, memory quota set) against a pod with same priority class. [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota [Feature:PodPriority] should verify ResourceQuota's priority class scope (quota set to pod count: 1) against 2 pods with different priority class.": "should verify ResourceQuota's priority class scope (quota set to pod count: 1) against 2 pods with different priority class. [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota [Feature:PodPriority] should verify ResourceQuota's priority class scope (quota set to pod count: 1) against 2 pods with same priority class.": "should verify ResourceQuota's priority class scope (quota set to pod count: 1) against 2 pods with same priority class. [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota [Feature:PodPriority] should verify ResourceQuota's priority class scope (quota set to pod count: 1) against a pod with different priority class (ScopeSelectorOpExists).": "should verify ResourceQuota's priority class scope (quota set to pod count: 1) against a pod with different priority class (ScopeSelectorOpExists). [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota [Feature:PodPriority] should verify ResourceQuota's priority class scope (quota set to pod count: 1) against a pod with different priority class (ScopeSelectorOpNotIn).": "should verify ResourceQuota's priority class scope (quota set to pod count: 1) against a pod with different priority class (ScopeSelectorOpNotIn). [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota [Feature:PodPriority] should verify ResourceQuota's priority class scope (quota set to pod count: 1) against a pod with same priority class.": "should verify ResourceQuota's priority class scope (quota set to pod count: 1) against a pod with same priority class. [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota [Feature:ScopeSelectors] should verify ResourceQuota with best effort scope using scope-selectors.": "should verify ResourceQuota with best effort scope using scope-selectors. [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota [Feature:ScopeSelectors] should verify ResourceQuota with terminating scopes through scope selectors.": "should verify ResourceQuota with terminating scopes through scope selectors. [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota should be able to update and delete ResourceQuota. [Conformance]": "should be able to update and delete ResourceQuota. [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota should create a ResourceQuota and capture the life of a configMap. [Conformance]": "should create a ResourceQuota and capture the life of a configMap. [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota should create a ResourceQuota and capture the life of a custom resource.": "should create a ResourceQuota and capture the life of a custom resource. [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota should create a ResourceQuota and capture the life of a persistent volume claim with a storage class. [sig-storage]": "should create a ResourceQuota and capture the life of a persistent volume claim with a storage class. [sig-storage] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota should create a ResourceQuota and capture the life of a persistent volume claim. [sig-storage]": "should create a ResourceQuota and capture the life of a persistent volume claim. [sig-storage] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota should create a ResourceQuota and capture the life of a pod. [Conformance]": "should create a ResourceQuota and capture the life of a pod. [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota should create a ResourceQuota and capture the life of a replica set. [Conformance]": "should create a ResourceQuota and capture the life of a replica set. [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota should create a ResourceQuota and capture the life of a replication controller. [Conformance]": "should create a ResourceQuota and capture the life of a replication controller. [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota should create a ResourceQuota and capture the life of a secret. [Conformance]": "should create a ResourceQuota and capture the life of a secret. [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota should create a ResourceQuota and capture the life of a service. [Conformance]": "should create a ResourceQuota and capture the life of a service. [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota should create a ResourceQuota and ensure its status is promptly calculated. [Conformance]": "should create a ResourceQuota and ensure its status is promptly calculated. [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota should verify ResourceQuota with best effort scope. [Conformance]": "should verify ResourceQuota with best effort scope. [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] ResourceQuota should verify ResourceQuota with terminating scopes. [Conformance]": "should verify ResourceQuota with terminating scopes. [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Secrets should be consumable from pods in env vars [NodeConformance] [Conformance]": "should be consumable from pods in env vars [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Secrets should be consumable via the environment [NodeConformance] [Conformance]": "should be consumable via the environment [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Secrets should fail to create secret due to empty secret key [Conformance]": "should fail to create secret due to empty secret key [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Secrets should patch a secret [Conformance]": "should patch a secret [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Servers with support for API chunking should return chunks of results for list calls": "should return chunks of results for list calls [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Servers with support for API chunking should support continue listing from the last key if the original version has been compacted away, though the list is inconsistent [Slow]": "should support continue listing from the last key if the original version has been compacted away, though the list is inconsistent [Slow] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Servers with support for Table transformation should return a 406 for a backend which does not implement metadata [Conformance]": "should return a 406 for a backend which does not implement metadata [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Servers with support for Table transformation should return chunks of table results for list calls": "should return chunks of table results for list calls [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Servers with support for Table transformation should return generic metadata details across all namespaces for nodes": "should return generic metadata details across all namespaces for nodes [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Servers with support for Table transformation should return pod details": "should return pod details [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Watchers should be able to restart watching from the last resource version observed by the previous watch [Conformance]": "should be able to restart watching from the last resource version observed by the previous watch [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Watchers should be able to start watching from a specific resource version [Conformance]": "should be able to start watching from a specific resource version [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Watchers should observe add, update, and delete watch notifications on configmaps [Conformance]": "should observe add, update, and delete watch notifications on configmaps [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Watchers should observe an object deletion if it stops meeting the requirements of the selector [Conformance]": "should observe an object deletion if it stops meeting the requirements of the selector [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] Watchers should receive events on concurrent watches in same order [Conformance]": "should receive events on concurrent watches in same order [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] client-go should negotiate watch and report errors with accept \"application/json,application/vnd.kubernetes.protobuf\"": "watch and report errors with accept \"application/json,application/vnd.kubernetes.protobuf\" [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] client-go should negotiate watch and report errors with accept \"application/json\"": "watch and report errors with accept \"application/json\" [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] client-go should negotiate watch and report errors with accept \"application/vnd.kubernetes.protobuf,application/json\"": "watch and report errors with accept \"application/vnd.kubernetes.protobuf,application/json\" [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] client-go should negotiate watch and report errors with accept \"application/vnd.kubernetes.protobuf\"": "watch and report errors with accept \"application/vnd.kubernetes.protobuf\" [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] health handlers should contain necessary checks": "should contain necessary checks [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-api-machinery] server version should find the server version [Conformance]": "should find the server version [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] CronJob should delete failed finished jobs with limit of one job": "should delete failed finished jobs with limit of one job [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] CronJob should delete successful finished jobs with limit of one successful job": "should delete successful finished jobs with limit of one successful job [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] CronJob should not emit unexpected warnings": "should not emit unexpected warnings [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] CronJob should not schedule jobs when suspended [Slow]": "should not schedule jobs when suspended [Slow] [Suite:k8s]", + + "[Top Level] [sig-apps] CronJob should not schedule new jobs when ForbidConcurrent [Slow]": "should not schedule new jobs when ForbidConcurrent [Slow] [Suite:k8s]", + + "[Top Level] [sig-apps] CronJob should remove from active list jobs that have been deleted": "should remove from active list jobs that have been deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] CronJob should replace jobs when ReplaceConcurrent": "should replace jobs when ReplaceConcurrent [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] CronJob should schedule multiple jobs concurrently": "should schedule multiple jobs concurrently [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] Daemon set [Serial] should not update pod when spec was updated and update strategy is OnDelete": "should not update pod when spec was updated and update strategy is OnDelete [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-apps] Daemon set [Serial] should retry creating failed daemon pods [Conformance]": "should retry creating failed daemon pods [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] Daemon set [Serial] should rollback without unnecessary restarts [Conformance]": "should rollback without unnecessary restarts [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] Daemon set [Serial] should run and stop complex daemon [Conformance]": "should run and stop complex daemon [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] Daemon set [Serial] should run and stop complex daemon with node affinity": "should run and stop complex daemon with node affinity [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-apps] Daemon set [Serial] should run and stop simple daemon [Conformance]": "should run and stop simple daemon [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] Daemon set [Serial] should update pod when spec was updated and update strategy is RollingUpdate [Conformance]": "should update pod when spec was updated and update strategy is RollingUpdate [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] DaemonRestart [Disruptive] Controller Manager should not create/delete replicas across restart": "Controller Manager should not create/delete replicas across restart [Serial] [Suite:k8s]", + + "[Top Level] [sig-apps] DaemonRestart [Disruptive] Kube-proxy should recover after being killed accidentally": "Kube-proxy should recover after being killed accidentally [Serial] [Suite:k8s]", + + "[Top Level] [sig-apps] DaemonRestart [Disruptive] Kubelet should not restart containers across restart": "Kubelet should not restart containers across restart [Serial] [Suite:k8s]", + + "[Top Level] [sig-apps] DaemonRestart [Disruptive] Scheduler should continue assigning pods to nodes across restart": "Scheduler should continue assigning pods to nodes across restart [Serial] [Suite:k8s]", + + "[Top Level] [sig-apps] Deployment RecreateDeployment should delete old pods and create new ones [Conformance]": "RecreateDeployment should delete old pods and create new ones [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] Deployment RollingUpdateDeployment should delete old pods and create new ones [Conformance]": "RollingUpdateDeployment should delete old pods and create new ones [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] Deployment deployment reaping should cascade to its replica sets and pods": "deployment reaping should cascade to its replica sets and pods [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] Deployment deployment should delete old replica sets [Conformance]": "deployment should delete old replica sets [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] Deployment deployment should support proportional scaling [Conformance]": "deployment should support proportional scaling [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] Deployment deployment should support rollover [Conformance]": "deployment should support rollover [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] Deployment iterative rollouts should eventually progress": "iterative rollouts should eventually progress [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] Deployment should not disrupt a cloud load-balancer's connectivity during rollout": "should not disrupt a cloud load-balancer's connectivity during rollout [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] Deployment test Deployment ReplicaSet orphaning and adoption regarding controllerRef": "test Deployment ReplicaSet orphaning and adoption regarding controllerRef [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] DisruptionController Listing PodDisruptionBudgets for all namespaces should list and delete a collection of PodDisruptionBudgets": "should list and delete a collection of PodDisruptionBudgets [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] DisruptionController evictions: enough pods, absolute => should allow an eviction": "evictions: enough pods, absolute => should allow an eviction [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] DisruptionController evictions: enough pods, replicaSet, percentage => should allow an eviction": "evictions: enough pods, replicaSet, percentage => should allow an eviction [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] DisruptionController evictions: maxUnavailable allow single eviction, percentage => should allow an eviction": "evictions: maxUnavailable allow single eviction, percentage => should allow an eviction [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] DisruptionController evictions: maxUnavailable deny evictions, integer => should not allow an eviction [Serial]": "evictions: maxUnavailable deny evictions, integer => should not allow an eviction [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-apps] DisruptionController evictions: no PDB => should allow an eviction": "evictions: no PDB => should allow an eviction [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] DisruptionController evictions: too few pods, absolute => should not allow an eviction": "evictions: too few pods, absolute => should not allow an eviction [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] DisruptionController evictions: too few pods, replicaSet, percentage => should not allow an eviction [Serial]": "evictions: too few pods, replicaSet, percentage => should not allow an eviction [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-apps] DisruptionController should block an eviction until the PDB is updated to allow it": "should block an eviction until the PDB is updated to allow it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] DisruptionController should create a PodDisruptionBudget": "should create a PodDisruptionBudget [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] DisruptionController should observe PodDisruptionBudget status updated": "should observe PodDisruptionBudget status updated [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] DisruptionController should update/patch PodDisruptionBudget status": "should update/patch PodDisruptionBudget status [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] Job should adopt matching orphans and release non-matching pods [Conformance]": "should adopt matching orphans and release non-matching pods [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] Job should delete a job [Conformance]": "should delete a job [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] Job should fail to exceed backoffLimit": "should fail to exceed backoffLimit [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] Job should fail when exceeds active deadline": "should fail when exceeds active deadline [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] Job should remove pods when job is deleted": "should remove pods when job is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] Job should run a job to completion when tasks sometimes fail and are locally restarted [Conformance]": "should run a job to completion when tasks sometimes fail and are locally restarted [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] Job should run a job to completion when tasks sometimes fail and are not locally restarted": "should run a job to completion when tasks sometimes fail and are not locally restarted [Flaky] [Suite:k8s]", + + "[Top Level] [sig-apps] Job should run a job to completion when tasks succeed": "should run a job to completion when tasks succeed [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] Network Partition [Disruptive] [Slow] [k8s.io] Pods should be evicted from unready Node [Feature:TaintEviction] All pods on the unreachable node should be marked as NotReady upon the node turn NotReady AND all pods should be evicted after eviction timeout passes": "[Feature:TaintEviction] All pods on the unreachable node should be marked as NotReady upon the node turn NotReady AND all pods should be evicted after eviction timeout passes [Serial] [Suite:k8s]", + + "[Top Level] [sig-apps] Network Partition [Disruptive] [Slow] [k8s.io] Pods should return to running and ready state after network partition is healed All pods on the unreachable node should be marked as NotReady upon the node turn NotReady AND all pods should be mark back to Ready when the node get back to Ready before pod eviction timeout": "All pods on the unreachable node should be marked as NotReady upon the node turn NotReady AND all pods should be mark back to Ready when the node get back to Ready before pod eviction timeout [Serial] [Suite:k8s]", + + "[Top Level] [sig-apps] Network Partition [Disruptive] [Slow] [k8s.io] [Job] should create new pods when node is partitioned": "should create new pods when node is partitioned [Serial] [Suite:k8s]", + + "[Top Level] [sig-apps] Network Partition [Disruptive] [Slow] [k8s.io] [ReplicationController] should eagerly create replacement pod during network partition when termination grace is non-zero": "should eagerly create replacement pod during network partition when termination grace is non-zero [Serial] [Suite:k8s]", + + "[Top Level] [sig-apps] Network Partition [Disruptive] [Slow] [k8s.io] [ReplicationController] should recreate pods scheduled on the unreachable node AND allow scheduling of pods on a node after it rejoins the cluster": "should recreate pods scheduled on the unreachable node AND allow scheduling of pods on a node after it rejoins the cluster [Serial] [Suite:k8s]", + + "[Top Level] [sig-apps] Network Partition [Disruptive] [Slow] [k8s.io] [StatefulSet] should come back up if node goes down [Slow] [Disruptive]": "should come back up if node goes down [Slow] [Disruptive] [Serial] [Suite:k8s]", + + "[Top Level] [sig-apps] Network Partition [Disruptive] [Slow] [k8s.io] [StatefulSet] should not reschedule stateful pods if there is a network partition [Slow] [Disruptive]": "should not reschedule stateful pods if there is a network partition [Slow] [Disruptive] [Serial] [Suite:k8s]", + + "[Top Level] [sig-apps] ReplicaSet should adopt matching pods on creation and release no longer matching pods [Conformance]": "should adopt matching pods on creation and release no longer matching pods [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] ReplicaSet should serve a basic image on each replica with a private image": "should serve a basic image on each replica with a private image [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] ReplicaSet should serve a basic image on each replica with a public image [Conformance]": "should serve a basic image on each replica with a public image [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] ReplicaSet should surface a failure condition on a common issue like exceeded quota": "should surface a failure condition on a common issue like exceeded quota [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] ReplicationController [Flaky] should test the lifecycle of a ReplicationController": "[Flaky] should test the lifecycle of a ReplicationController [Suite:k8s]", + + "[Top Level] [sig-apps] ReplicationController should adopt matching pods on creation [Conformance]": "should adopt matching pods on creation [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] ReplicationController should release no longer matching pods [Conformance]": "should release no longer matching pods [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] ReplicationController should serve a basic image on each replica with a private image": "should serve a basic image on each replica with a private image [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] ReplicationController should serve a basic image on each replica with a public image [Conformance]": "should serve a basic image on each replica with a public image [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] ReplicationController should surface a failure condition on a common issue like exceeded quota [Conformance]": "should surface a failure condition on a common issue like exceeded quota [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] Burst scaling should run to completion even with unhealthy pods [Slow] [Conformance]": "Burst scaling should run to completion even with unhealthy pods [Slow] [Conformance] [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] Scaling should happen in predictable order and halt if any stateful pod is unhealthy [Slow] [Conformance]": "Scaling should happen in predictable order and halt if any stateful pod is unhealthy [Slow] [Conformance] [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] Should recreate evicted statefulset [Conformance]": "Should recreate evicted statefulset [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] should adopt matching orphans and release non-matching pods": "should adopt matching orphans and release non-matching pods [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] should have a working scale subresource [Conformance]": "should have a working scale subresource [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] should implement legacy replacement when the update strategy is OnDelete": "should implement legacy replacement when the update strategy is OnDelete [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] should not deadlock when a pod's predecessor fails": "should not deadlock when a pod's predecessor fails [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] should perform canary updates and phased rolling updates of template modifications [Conformance]": "should perform canary updates and phased rolling updates of template modifications [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] should perform rolling updates and roll backs of template modifications [Conformance]": "should perform rolling updates and roll backs of template modifications [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] should perform rolling updates and roll backs of template modifications with PVCs": "should perform rolling updates and roll backs of template modifications with PVCs [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] should provide basic identity": "should provide basic identity [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Deploy clustered applications [Feature:StatefulSet] [Slow] should creating a working CockroachDB cluster": "should creating a working CockroachDB cluster [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Deploy clustered applications [Feature:StatefulSet] [Slow] should creating a working mysql cluster": "should creating a working mysql cluster [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Deploy clustered applications [Feature:StatefulSet] [Slow] should creating a working redis cluster": "should creating a working redis cluster [Suite:k8s]", + + "[Top Level] [sig-apps] StatefulSet [k8s.io] Deploy clustered applications [Feature:StatefulSet] [Slow] should creating a working zookeeper cluster": "should creating a working zookeeper cluster [Suite:k8s]", + + "[Top Level] [sig-auth] Certificates API [Privileged:ClusterAdmin] should support CSR API operations [Conformance]": "should support CSR API operations [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-auth] Certificates API [Privileged:ClusterAdmin] should support building a client with a CSR": "should support building a client with a CSR [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-auth] Metadata Concealment should run a check-metadata-concealment job to completion": "should run a check-metadata-concealment job to completion [Skipped:gce] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-auth] PodSecurityPolicy [Feature:PodSecurityPolicy] should allow pods under the privileged policy.PodSecurityPolicy": "should allow pods under the privileged policy.PodSecurityPolicy [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-auth] PodSecurityPolicy [Feature:PodSecurityPolicy] should enforce the restricted policy.PodSecurityPolicy": "should enforce the restricted policy.PodSecurityPolicy [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-auth] PodSecurityPolicy [Feature:PodSecurityPolicy] should forbid pod creation when no PSP is available": "should forbid pod creation when no PSP is available [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-auth] ServiceAccounts should allow opting out of API token automount [Conformance]": "should allow opting out of API token automount [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-auth] ServiceAccounts should ensure a single API token exists": "should ensure a single API token exists [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-auth] ServiceAccounts should mount an API token into pods [Conformance]": "should mount an API token into pods [Conformance] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-auth] ServiceAccounts should run through the lifecycle of a ServiceAccount [Conformance]": "should run through the lifecycle of a ServiceAccount [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-auth] ServiceAccounts should set ownership and permission when RunAsUser or FsGroup is present [LinuxOnly] [NodeFeature:FSGroup] [Feature:TokenRequestProjection]": "should set ownership and permission when RunAsUser or FsGroup is present [LinuxOnly] [NodeFeature:FSGroup] [Feature:TokenRequestProjection] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-auth] ServiceAccounts should support InClusterConfig with token rotation [Slow] [Feature:TokenRequestProjection]": "should support InClusterConfig with token rotation [Slow] [Feature:TokenRequestProjection] [Suite:k8s]", + + "[Top Level] [sig-auth] ServiceAccounts should support OIDC discovery of service account issuer [Feature:ServiceAccountIssuerDiscovery]": "should support OIDC discovery of service account issuer [Feature:ServiceAccountIssuerDiscovery] [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-auth] [Feature:NodeAuthenticator] The kubelet can delegate ServiceAccount tokens to the API server": "The kubelet can delegate ServiceAccount tokens to the API server [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-auth] [Feature:NodeAuthenticator] The kubelet's main port 10250 should reject requests with no credentials": "The kubelet's main port 10250 should reject requests with no credentials [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-auth] [Feature:NodeAuthorizer] A node shouldn't be able to create another node": "A node shouldn't be able to create another node [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-auth] [Feature:NodeAuthorizer] A node shouldn't be able to delete another node": "A node shouldn't be able to delete another node [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-auth] [Feature:NodeAuthorizer] Getting a non-existent configmap should exit with the Forbidden error, not a NotFound error": "Getting a non-existent configmap should exit with the Forbidden error, not a NotFound error [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-auth] [Feature:NodeAuthorizer] Getting a non-existent secret should exit with the Forbidden error, not a NotFound error": "Getting a non-existent secret should exit with the Forbidden error, not a NotFound error [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-auth] [Feature:NodeAuthorizer] Getting a secret for a workload the node has access to should succeed": "Getting a secret for a workload the node has access to should succeed [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-auth] [Feature:NodeAuthorizer] Getting an existing configmap should exit with the Forbidden error": "Getting an existing configmap should exit with the Forbidden error [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-auth] [Feature:NodeAuthorizer] Getting an existing secret should exit with the Forbidden error": "Getting an existing secret should exit with the Forbidden error [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] Should be able to scale a node group down to 0[Feature:ClusterSizeAutoscalingScaleDown]": "Should be able to scale a node group down to 0[Feature:ClusterSizeAutoscalingScaleDown] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] Should be able to scale a node group up from 0[Feature:ClusterSizeAutoscalingScaleUp]": "Should be able to scale a node group up from 0[Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] Should not scale GPU pool up if pod does not require GPUs [GpuType:] [Feature:ClusterSizeAutoscalingGpu]": "Should not scale GPU pool up if pod does not require GPUs [GpuType:] [Feature:ClusterSizeAutoscalingGpu] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] Should scale down GPU pool from 1 [GpuType:] [Feature:ClusterSizeAutoscalingGpu]": "Should scale down GPU pool from 1 [GpuType:] [Feature:ClusterSizeAutoscalingGpu] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] Should scale up GPU pool from 0 [GpuType:] [Feature:ClusterSizeAutoscalingGpu]": "Should scale up GPU pool from 0 [GpuType:] [Feature:ClusterSizeAutoscalingGpu] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] Should scale up GPU pool from 1 [GpuType:] [Feature:ClusterSizeAutoscalingGpu]": "Should scale up GPU pool from 1 [GpuType:] [Feature:ClusterSizeAutoscalingGpu] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] Shouldn't perform scale up operation and should list unhealthy status if most of the cluster is broken[Feature:ClusterSizeAutoscalingScaleUp]": "Shouldn't perform scale up operation and should list unhealthy status if most of the cluster is broken[Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should add node to the particular mig [Feature:ClusterSizeAutoscalingScaleUp]": "should add node to the particular mig [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should be able to scale down by draining multiple pods one by one as dictated by pdb[Feature:ClusterSizeAutoscalingScaleDown]": "should be able to scale down by draining multiple pods one by one as dictated by pdb[Feature:ClusterSizeAutoscalingScaleDown] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should be able to scale down by draining system pods with pdb[Feature:ClusterSizeAutoscalingScaleDown]": "should be able to scale down by draining system pods with pdb[Feature:ClusterSizeAutoscalingScaleDown] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should be able to scale down when rescheduling a pod is required and pdb allows for it[Feature:ClusterSizeAutoscalingScaleDown]": "should be able to scale down when rescheduling a pod is required and pdb allows for it[Feature:ClusterSizeAutoscalingScaleDown] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should correctly scale down after a node is not needed [Feature:ClusterSizeAutoscalingScaleDown]": "should correctly scale down after a node is not needed [Feature:ClusterSizeAutoscalingScaleDown] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should correctly scale down after a node is not needed and one node is broken [Feature:ClusterSizeAutoscalingScaleDown]": "should correctly scale down after a node is not needed and one node is broken [Feature:ClusterSizeAutoscalingScaleDown] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should correctly scale down after a node is not needed when there is non autoscaled pool[Feature:ClusterSizeAutoscalingScaleDown]": "should correctly scale down after a node is not needed when there is non autoscaled pool[Feature:ClusterSizeAutoscalingScaleDown] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should disable node pool autoscaling [Feature:ClusterSizeAutoscalingScaleUp]": "should disable node pool autoscaling [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should increase cluster size if pending pods are small [Feature:ClusterSizeAutoscalingScaleUp]": "should increase cluster size if pending pods are small [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should increase cluster size if pending pods are small and one node is broken [Feature:ClusterSizeAutoscalingScaleUp]": "should increase cluster size if pending pods are small and one node is broken [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should increase cluster size if pending pods are small and there is another node pool that is not autoscaled [Feature:ClusterSizeAutoscalingScaleUp]": "should increase cluster size if pending pods are small and there is another node pool that is not autoscaled [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should increase cluster size if pod requesting EmptyDir volume is pending [Feature:ClusterSizeAutoscalingScaleUp]": "should increase cluster size if pod requesting EmptyDir volume is pending [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should increase cluster size if pod requesting volume is pending [Feature:ClusterSizeAutoscalingScaleUp]": "should increase cluster size if pod requesting volume is pending [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should increase cluster size if pods are pending due to host port conflict [Feature:ClusterSizeAutoscalingScaleUp]": "should increase cluster size if pods are pending due to host port conflict [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should increase cluster size if pods are pending due to pod anti-affinity [Feature:ClusterSizeAutoscalingScaleUp]": "should increase cluster size if pods are pending due to pod anti-affinity [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should scale down when expendable pod is running [Feature:ClusterSizeAutoscalingScaleDown]": "should scale down when expendable pod is running [Feature:ClusterSizeAutoscalingScaleDown] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should scale up correct target pool [Feature:ClusterSizeAutoscalingScaleUp]": "should scale up correct target pool [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] should scale up when non expendable pod is created [Feature:ClusterSizeAutoscalingScaleUp]": "should scale up when non expendable pod is created [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] shouldn't be able to scale down when rescheduling a pod is required, but pdb doesn't allow drain[Feature:ClusterSizeAutoscalingScaleDown]": "shouldn't be able to scale down when rescheduling a pod is required, but pdb doesn't allow drain[Feature:ClusterSizeAutoscalingScaleDown] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] shouldn't increase cluster size if pending pod is too large [Feature:ClusterSizeAutoscalingScaleUp]": "shouldn't increase cluster size if pending pod is too large [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] shouldn't scale down when non expendable pod is running [Feature:ClusterSizeAutoscalingScaleDown]": "shouldn't scale down when non expendable pod is running [Feature:ClusterSizeAutoscalingScaleDown] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] shouldn't scale up when expendable pod is created [Feature:ClusterSizeAutoscalingScaleUp]": "shouldn't scale up when expendable pod is created [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] shouldn't scale up when expendable pod is preempted [Feature:ClusterSizeAutoscalingScaleUp]": "shouldn't scale up when expendable pod is preempted [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] Cluster size autoscaling [Slow] shouldn't trigger additional scale-ups during processing scale-up [Feature:ClusterSizeAutoscalingScaleUp]": "shouldn't trigger additional scale-ups during processing scale-up [Feature:ClusterSizeAutoscalingScaleUp] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] DNS horizontal autoscaling [DisabledForLargeClusters] kube-dns-autoscaler should scale kube-dns pods in both nonfaulty and faulty scenarios": "[DisabledForLargeClusters] kube-dns-autoscaler should scale kube-dns pods in both nonfaulty and faulty scenarios [Disabled:SpecialConfig] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] DNS horizontal autoscaling [Serial] [Slow] kube-dns-autoscaler should scale kube-dns pods when cluster size changed": "[Serial] [Slow] kube-dns-autoscaler should scale kube-dns pods when cluster size changed [Disabled:SpecialConfig] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [Feature:HPA] Horizontal pod autoscaling (scale resource: CPU) [sig-autoscaling] ReplicationController light Should scale from 1 pod to 2 pods": "Should scale from 1 pod to 2 pods [Flaky] [Serial] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [Feature:HPA] Horizontal pod autoscaling (scale resource: CPU) [sig-autoscaling] ReplicationController light Should scale from 2 pods to 1 pod [Slow]": "Should scale from 2 pods to 1 pod [Slow] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [Feature:HPA] Horizontal pod autoscaling (scale resource: CPU) [sig-autoscaling] [Serial] [Slow] Deployment Should scale from 1 pod to 3 pods and from 3 to 5": "Should scale from 1 pod to 3 pods and from 3 to 5 [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [Feature:HPA] Horizontal pod autoscaling (scale resource: CPU) [sig-autoscaling] [Serial] [Slow] Deployment Should scale from 5 pods to 3 pods and from 3 to 1": "Should scale from 5 pods to 3 pods and from 3 to 1 [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [Feature:HPA] Horizontal pod autoscaling (scale resource: CPU) [sig-autoscaling] [Serial] [Slow] ReplicaSet Should scale from 1 pod to 3 pods and from 3 to 5": "Should scale from 1 pod to 3 pods and from 3 to 5 [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [Feature:HPA] Horizontal pod autoscaling (scale resource: CPU) [sig-autoscaling] [Serial] [Slow] ReplicaSet Should scale from 5 pods to 3 pods and from 3 to 1": "Should scale from 5 pods to 3 pods and from 3 to 1 [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [Feature:HPA] Horizontal pod autoscaling (scale resource: CPU) [sig-autoscaling] [Serial] [Slow] ReplicationController Should scale from 1 pod to 3 pods and from 3 to 5 and verify decision stability": "Should scale from 1 pod to 3 pods and from 3 to 5 and verify decision stability [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [Feature:HPA] Horizontal pod autoscaling (scale resource: CPU) [sig-autoscaling] [Serial] [Slow] ReplicationController Should scale from 5 pods to 3 pods and from 3 to 1 and verify decision stability": "Should scale from 5 pods to 3 pods and from 3 to 1 and verify decision stability [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [HPA] Horizontal pod autoscaling (scale resource: Custom Metrics from Stackdriver) should scale down with Custom Metric of type Object from Stackdriver [Feature:CustomMetricsAutoscaling]": "should scale down with Custom Metric of type Object from Stackdriver [Feature:CustomMetricsAutoscaling] [Skipped:gce] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [HPA] Horizontal pod autoscaling (scale resource: Custom Metrics from Stackdriver) should scale down with Custom Metric of type Pod from Stackdriver [Feature:CustomMetricsAutoscaling]": "should scale down with Custom Metric of type Pod from Stackdriver [Feature:CustomMetricsAutoscaling] [Skipped:gce] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [HPA] Horizontal pod autoscaling (scale resource: Custom Metrics from Stackdriver) should scale down with Custom Metric of type Pod from Stackdriver with Prometheus [Feature:CustomMetricsAutoscaling]": "should scale down with Custom Metric of type Pod from Stackdriver with Prometheus [Feature:CustomMetricsAutoscaling] [Skipped:gce] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [HPA] Horizontal pod autoscaling (scale resource: Custom Metrics from Stackdriver) should scale down with External Metric with target average value from Stackdriver [Feature:CustomMetricsAutoscaling]": "should scale down with External Metric with target average value from Stackdriver [Feature:CustomMetricsAutoscaling] [Skipped:gce] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [HPA] Horizontal pod autoscaling (scale resource: Custom Metrics from Stackdriver) should scale down with External Metric with target value from Stackdriver [Feature:CustomMetricsAutoscaling]": "should scale down with External Metric with target value from Stackdriver [Feature:CustomMetricsAutoscaling] [Skipped:gce] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [HPA] Horizontal pod autoscaling (scale resource: Custom Metrics from Stackdriver) should scale up with two External metrics from Stackdriver [Feature:CustomMetricsAutoscaling]": "should scale up with two External metrics from Stackdriver [Feature:CustomMetricsAutoscaling] [Skipped:gce] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-autoscaling] [HPA] Horizontal pod autoscaling (scale resource: Custom Metrics from Stackdriver) should scale up with two metrics of type Pod from Stackdriver [Feature:CustomMetricsAutoscaling]": "should scale up with two metrics of type Pod from Stackdriver [Feature:CustomMetricsAutoscaling] [Skipped:gce] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl Port forwarding With a server listening on 0.0.0.0 should support forwarding over websockets": "should support forwarding over websockets [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl Port forwarding With a server listening on 0.0.0.0 that expects NO client request should support a client that connects, sends DATA, and disconnects": "should support a client that connects, sends DATA, and disconnects [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl Port forwarding With a server listening on 0.0.0.0 that expects a client request should support a client that connects, sends DATA, and disconnects": "should support a client that connects, sends DATA, and disconnects [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl Port forwarding With a server listening on 0.0.0.0 that expects a client request should support a client that connects, sends NO DATA, and disconnects": "should support a client that connects, sends NO DATA, and disconnects [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl Port forwarding With a server listening on localhost should support forwarding over websockets": "should support forwarding over websockets [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl Port forwarding With a server listening on localhost that expects NO client request should support a client that connects, sends DATA, and disconnects": "should support a client that connects, sends DATA, and disconnects [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl Port forwarding With a server listening on localhost that expects a client request should support a client that connects, sends DATA, and disconnects": "should support a client that connects, sends DATA, and disconnects [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl Port forwarding With a server listening on localhost that expects a client request should support a client that connects, sends NO DATA, and disconnects": "should support a client that connects, sends NO DATA, and disconnects [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Guestbook application should create and stop a working application [Conformance]": "should create and stop a working application [Conformance] [Slow] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl api-versions should check if v1 is in available api versions [Conformance]": "should check if v1 is in available api versions [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl apply apply set/view last-applied": "apply set/view last-applied [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl apply should apply a new configuration to an existing RC": "should apply a new configuration to an existing RC [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl apply should reuse port when apply to an existing SVC": "should reuse port when apply to an existing SVC [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl client-side validation should create/apply a CR with unknown fields for CRD with no validation schema": "should create/apply a CR with unknown fields for CRD with no validation schema [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl client-side validation should create/apply a valid CR for CRD with validation schema": "should create/apply a valid CR for CRD with validation schema [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl client-side validation should create/apply a valid CR with arbitrary-extra properties for CRD with partially-specified validation schema": "should create/apply a valid CR with arbitrary-extra properties for CRD with partially-specified validation schema [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl cluster-info dump should check if cluster-info dump succeeds": "should check if cluster-info dump succeeds [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl cluster-info should check if Kubernetes master services is included in cluster-info [Conformance]": "should check if Kubernetes master services is included in cluster-info [Conformance] [Disabled:SpecialConfig] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl copy should copy a file from a running Pod": "should copy a file from a running Pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl create quota should create a quota with scopes": "should create a quota with scopes [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl create quota should create a quota without scopes": "should create a quota without scopes [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl create quota should reject quota with invalid scopes": "should reject quota with invalid scopes [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl describe should check if kubectl describe prints relevant information for cronjob": "should check if kubectl describe prints relevant information for cronjob [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl describe should check if kubectl describe prints relevant information for rc and pods [Conformance]": "should check if kubectl describe prints relevant information for rc and pods [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl diff should check if kubectl diff finds a difference for Deployments [Conformance]": "should check if kubectl diff finds a difference for Deployments [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl expose should create services for rc [Conformance]": "should create services for rc [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl get componentstatuses should get componentstatuses": "should get componentstatuses [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl label should update the label on a resource [Conformance]": "should update the label on a resource [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl logs should be able to retrieve and filter logs [Conformance]": "should be able to retrieve and filter logs [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl patch should add annotations for pods in rc [Conformance]": "should add annotations for pods in rc [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl replace should update a single-container pod's image [Conformance]": "should update a single-container pod's image [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl run pod should create a pod from an image when restart is Never [Conformance]": "should create a pod from an image when restart is Never [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl server-side dry-run should check if kubectl can dry-run update Pods [Conformance]": "should check if kubectl can dry-run update Pods [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl taint [Serial] should remove all the taints with the same key off a node": "should remove all the taints with the same key off a node [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl taint [Serial] should update the taint on a node": "should update the taint on a node [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Kubectl version should check is all data is printed [Conformance]": "should check is all data is printed [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Proxy server should support --unix-socket=/path [Conformance]": "should support --unix-socket=/path [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Proxy server should support proxy with --port 0 [Conformance]": "should support proxy with --port 0 [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Simple pod should contain last line of the log": "should contain last line of the log [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Simple pod should handle in-cluster config": "should handle in-cluster config [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Simple pod should return command exit codes": "should return command exit codes [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Simple pod should support exec through an HTTP proxy": "should support exec through an HTTP proxy [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Simple pod should support exec through kubectl proxy": "should support exec through kubectl proxy [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Simple pod should support exec using resource/name": "should support exec using resource/name [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Simple pod should support exec": "should support exec [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Simple pod should support inline execution and attach": "should support inline execution and attach [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Simple pod should support port-forward": "should support port-forward [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Update Demo should create and stop a replication controller [Conformance]": "should create and stop a replication controller [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-cli] Kubectl client Update Demo should scale a replication controller [Conformance]": "should scale a replication controller [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Cluster level logging implemented by Stackdriver [Feature:StackdriverLogging] [Soak] should ingest logs from applications running for a prolonged amount of time": "should ingest logs from applications running for a prolonged amount of time [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Cluster level logging implemented by Stackdriver should ingest events [Feature:StackdriverLogging]": "should ingest events [Feature:StackdriverLogging] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Cluster level logging implemented by Stackdriver should ingest logs [Feature:StackdriverLogging]": "should ingest logs [Feature:StackdriverLogging] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Cluster level logging implemented by Stackdriver should ingest system logs from all nodes [Feature:StackdriverLogging]": "should ingest system logs from all nodes [Feature:StackdriverLogging] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Cluster level logging using Elasticsearch [Feature:Elasticsearch] should check that logs from containers are ingested into Elasticsearch": "should check that logs from containers are ingested into Elasticsearch [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Events API should delete a collection of events [Conformance]": "should delete a collection of events [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Events API should ensure that an event can be fetched, patched, deleted, and listed [Conformance]": "should ensure that an event can be fetched, patched, deleted, and listed [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Kibana Logging Instances Is Alive [Feature:Elasticsearch] should check that the Kibana logging instance is alive": "should check that the Kibana logging instance is alive [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Logging soak [Performance] [Slow] [Disruptive] should survive logging 1KB every 1s seconds, for a duration of 2m0s": "should survive logging 1KB every 1s seconds, for a duration of 2m0s [Serial] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] MetricsGrabber should grab all metrics from API server.": "should grab all metrics from API server. [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] MetricsGrabber should grab all metrics from a ControllerManager.": "should grab all metrics from a ControllerManager. [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] MetricsGrabber should grab all metrics from a Kubelet.": "should grab all metrics from a Kubelet. [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] MetricsGrabber should grab all metrics from a Scheduler.": "should grab all metrics from a Scheduler. [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Stackdriver Monitoring should have accelerator metrics [Feature:StackdriverAcceleratorMonitoring]": "should have accelerator metrics [Feature:StackdriverAcceleratorMonitoring] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Stackdriver Monitoring should have cluster metrics [Feature:StackdriverMonitoring]": "should have cluster metrics [Feature:StackdriverMonitoring] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Stackdriver Monitoring should run Custom Metrics - Stackdriver Adapter for external metrics [Feature:StackdriverExternalMetrics]": "should run Custom Metrics - Stackdriver Adapter for external metrics [Feature:StackdriverExternalMetrics] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Stackdriver Monitoring should run Custom Metrics - Stackdriver Adapter for new resource model [Feature:StackdriverCustomMetrics]": "should run Custom Metrics - Stackdriver Adapter for new resource model [Feature:StackdriverCustomMetrics] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Stackdriver Monitoring should run Custom Metrics - Stackdriver Adapter for old resource model [Feature:StackdriverCustomMetrics]": "should run Custom Metrics - Stackdriver Adapter for old resource model [Feature:StackdriverCustomMetrics] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-instrumentation] Stackdriver Monitoring should run Stackdriver Metadata Agent [Feature:StackdriverMetadataAgent]": "should run Stackdriver Metadata Agent [Feature:StackdriverMetadataAgent] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-network] ClusterDns [Feature:Example] should create pod that uses dns": "should create pod that uses dns [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-network] Conntrack should be able to preserve UDP traffic when server pod cycles for a ClusterIP service": "should be able to preserve UDP traffic when server pod cycles for a ClusterIP service [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Conntrack should be able to preserve UDP traffic when server pod cycles for a NodePort service": "should be able to preserve UDP traffic when server pod cycles for a NodePort service [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] DNS configMap federations [Feature:Federation] should be able to change federation configuration [Slow][Serial]": "should be able to change federation configuration [Slow][Serial] [Disabled:SpecialConfig] [Suite:k8s]", + + "[Top Level] [sig-network] DNS configMap nameserver Change stubDomain should be able to change stubDomain configuration [Slow][Serial]": "should be able to change stubDomain configuration [Slow][Serial] [Disabled:SpecialConfig] [Suite:k8s]", + + "[Top Level] [sig-network] DNS configMap nameserver Forward PTR lookup should forward PTR records lookup to upstream nameserver [Slow][Serial]": "should forward PTR records lookup to upstream nameserver [Slow][Serial] [Disabled:SpecialConfig] [Suite:k8s]", + + "[Top Level] [sig-network] DNS configMap nameserver Forward external name lookup should forward externalname lookup to upstream nameserver [Slow][Serial]": "should forward externalname lookup to upstream nameserver [Slow][Serial] [Disabled:SpecialConfig] [Suite:k8s]", + + "[Top Level] [sig-network] DNS should provide /etc/hosts entries for the cluster [LinuxOnly] [Conformance]": "should provide /etc/hosts entries for the cluster [LinuxOnly] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] DNS should provide DNS for ExternalName services [Conformance]": "should provide DNS for ExternalName services [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] DNS should provide DNS for pods for Hostname [LinuxOnly] [Conformance]": "should provide DNS for pods for Hostname [LinuxOnly] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] DNS should provide DNS for pods for Subdomain [Conformance]": "should provide DNS for pods for Subdomain [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] DNS should provide DNS for services [Conformance]": "should provide DNS for services [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] DNS should provide DNS for the cluster [Conformance]": "should provide DNS for the cluster [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] DNS should provide DNS for the cluster [Provider:GCE]": "should provide DNS for the cluster [Provider:GCE] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] DNS should resolve DNS of partial qualified names for services [LinuxOnly] [Conformance]": "should resolve DNS of partial qualified names for services [LinuxOnly] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] DNS should resolve DNS of partial qualified names for the cluster [LinuxOnly]": "should resolve DNS of partial qualified names for the cluster [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] DNS should support configurable pod DNS nameservers [Conformance]": "should support configurable pod DNS nameservers [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] DNS should support configurable pod resolv.conf": "should support configurable pod resolv.conf [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] ESIPP [Slow] should handle updates to ExternalTrafficPolicy field": "should handle updates to ExternalTrafficPolicy field [Suite:k8s]", + + "[Top Level] [sig-network] ESIPP [Slow] should only target nodes with endpoints": "should only target nodes with endpoints [Suite:k8s]", + + "[Top Level] [sig-network] ESIPP [Slow] should work for type=LoadBalancer": "should work for type=LoadBalancer [Suite:k8s]", + + "[Top Level] [sig-network] ESIPP [Slow] should work for type=NodePort": "should work for type=NodePort [Suite:k8s]", + + "[Top Level] [sig-network] ESIPP [Slow] should work from pods": "should work from pods [Suite:k8s]", + + "[Top Level] [sig-network] EndpointSlice should create Endpoints and EndpointSlices for Pods matching a Service": "should create Endpoints and EndpointSlices for Pods matching a Service [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] EndpointSlice should create and delete Endpoints and EndpointSlices for a Service with a selector specified": "should create and delete Endpoints and EndpointSlices for a Service with a selector specified [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] EndpointSlice should have Endpoints and EndpointSlices pointing to API Server": "should have Endpoints and EndpointSlices pointing to API Server [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] EndpointSliceMirroring should mirror a custom Endpoints resource through create update and delete": "should mirror a custom Endpoints resource through create update and delete [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Firewall rule [Slow] [Serial] should create valid firewall rules for LoadBalancer type service": "[Slow] [Serial] should create valid firewall rules for LoadBalancer type service [Suite:k8s]", + + "[Top Level] [sig-network] Firewall rule should have correct firewall rules for e2e cluster": "should have correct firewall rules for e2e cluster [Disabled:SpecialConfig] [Suite:k8s]", + + "[Top Level] [sig-network] Ingress API should support creating Ingress API operations [Conformance]": "should support creating Ingress API operations [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] IngressClass API should support creating IngressClass API operations [Conformance]": " should support creating IngressClass API operations [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] IngressClass [Feature:Ingress] should not set default value if no default IngressClass [Serial]": "should not set default value if no default IngressClass [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-network] IngressClass [Feature:Ingress] should prevent Ingress creation if more than 1 IngressClass marked as default [Serial]": "should prevent Ingress creation if more than 1 IngressClass marked as default [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-network] IngressClass [Feature:Ingress] should set default value on new IngressClass [Serial]": "should set default value on new IngressClass [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:Ingress] multicluster ingress should get instance group annotation": "multicluster ingress should get instance group annotation [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:Ingress] should conform to Ingress spec": "should conform to Ingress spec [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:Ingress] should create ingress with pre-shared certificate": "should create ingress with pre-shared certificate [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:Ingress] should support multiple TLS certs": "should support multiple TLS certs [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:NEG] rolling update backend pods should not cause service disruption": "rolling update backend pods should not cause service disruption [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:NEG] should be able to create a ClusterIP service": "should be able to create a ClusterIP service [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:NEG] should be able to switch between IG and NEG modes": "should be able to switch between IG and NEG modes [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:NEG] should conform to Ingress spec": "should conform to Ingress spec [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:NEG] should create NEGs for all ports with the Ingress annotation, and NEGs for the standalone annotation otherwise": "should create NEGs for all ports with the Ingress annotation, and NEGs for the standalone annotation otherwise [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:NEG] should sync endpoints for both Ingress-referenced NEG and standalone NEG": "should sync endpoints for both Ingress-referenced NEG and standalone NEG [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:NEG] should sync endpoints to NEG": "should sync endpoints to NEG [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:kubemci] should conform to Ingress spec": "should conform to Ingress spec [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:kubemci] should create ingress with backend HTTPS": "should create ingress with backend HTTPS [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:kubemci] should create ingress with pre-shared certificate": "should create ingress with pre-shared certificate [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:kubemci] should remove clusters as expected": "should remove clusters as expected [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:kubemci] should support https-only annotation": "should support https-only annotation [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 GCE [Slow] [Feature:kubemci] single and multi-cluster ingresses should be able to exist together": "single and multi-cluster ingresses should be able to exist together [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 Scalability GCE [Slow] [Serial] [Feature:IngressScale] Creating and updating ingresses should happen promptly with small/medium/large amount of ingresses": "Creating and updating ingresses should happen promptly with small/medium/large amount of ingresses [Suite:k8s]", + + "[Top Level] [sig-network] Loadbalancing: L7 [Slow] Nginx should conform to Ingress spec": "should conform to Ingress spec [Suite:k8s]", + + "[Top Level] [sig-network] Network should resolve connection reset issue #74839 [Slow]": "should resolve connection reset issue #74839 [Slow] [Suite:k8s]", + + "[Top Level] [sig-network] Network should set TCP CLOSE_WAIT timeout [Privileged]": "should set TCP CLOSE_WAIT timeout [Privileged] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should allow egress access on one named port [Feature:NetworkPolicy]": "should allow egress access on one named port [Feature:NetworkPolicy] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should allow egress access to server in CIDR block [Feature:NetworkPolicy]": "should allow egress access to server in CIDR block [Feature:NetworkPolicy] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should allow ingress access from namespace on one named port [Feature:NetworkPolicy]": "should allow ingress access from namespace on one named port [Feature:NetworkPolicy] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should allow ingress access from updated namespace [Feature:NetworkPolicy]": "should allow ingress access from updated namespace [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should allow ingress access from updated pod [Feature:NetworkPolicy]": "should allow ingress access from updated pod [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should allow ingress access on one named port [Feature:NetworkPolicy]": "should allow ingress access on one named port [Feature:NetworkPolicy] [Disabled:Broken] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should deny ingress access to updated pod [Feature:NetworkPolicy]": "should deny ingress access to updated pod [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce egress policy allowing traffic to a server in a different namespace based on PodSelector and NamespaceSelector [Feature:NetworkPolicy]": "should enforce egress policy allowing traffic to a server in a different namespace based on PodSelector and NamespaceSelector [Feature:NetworkPolicy] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce except clause while egress access to server in CIDR block [Feature:NetworkPolicy]": "should enforce except clause while egress access to server in CIDR block [Feature:NetworkPolicy] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce multiple egress policies with egress allow-all policy taking precedence [Feature:NetworkPolicy]": "should enforce multiple egress policies with egress allow-all policy taking precedence [Feature:NetworkPolicy] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce multiple ingress policies with ingress allow-all policy taking precedence [Feature:NetworkPolicy]": "should enforce multiple ingress policies with ingress allow-all policy taking precedence [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce multiple, stacked policies with overlapping podSelectors [Feature:NetworkPolicy]": "should enforce multiple, stacked policies with overlapping podSelectors [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce policies to check ingress and egress policies can be controlled independently based on PodSelector [Feature:NetworkPolicy]": "should enforce policies to check ingress and egress policies can be controlled independently based on PodSelector [Feature:NetworkPolicy] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce policy based on NamespaceSelector with MatchExpressions[Feature:NetworkPolicy]": "should enforce policy based on NamespaceSelector with MatchExpressions[Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce policy based on PodSelector and NamespaceSelector [Feature:NetworkPolicy]": "should enforce policy based on PodSelector and NamespaceSelector [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce policy based on PodSelector or NamespaceSelector [Feature:NetworkPolicy]": "should enforce policy based on PodSelector or NamespaceSelector [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce policy based on PodSelector with MatchExpressions[Feature:NetworkPolicy]": "should enforce policy based on PodSelector with MatchExpressions[Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce policy based on Ports [Feature:NetworkPolicy]": "should enforce policy based on Ports [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce policy to allow traffic from pods within server namespace based on PodSelector [Feature:NetworkPolicy]": "should enforce policy to allow traffic from pods within server namespace based on PodSelector [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce policy to allow traffic only from a different namespace, based on NamespaceSelector [Feature:NetworkPolicy]": "should enforce policy to allow traffic only from a different namespace, based on NamespaceSelector [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce policy to allow traffic only from a pod in a different namespace based on PodSelector and NamespaceSelector [Feature:NetworkPolicy]": "should enforce policy to allow traffic only from a pod in a different namespace based on PodSelector and NamespaceSelector [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should enforce updated policy [Feature:NetworkPolicy]": "should enforce updated policy [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should ensure an IP overlapping both IPBlock.CIDR and IPBlock.Except is allowed [Feature:NetworkPolicy]": "should ensure an IP overlapping both IPBlock.CIDR and IPBlock.Except is allowed [Feature:NetworkPolicy] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should not allow access by TCP when a policy specifies only SCTP [Feature:NetworkPolicy] [Feature:SCTP]": "should not allow access by TCP when a policy specifies only SCTP [Feature:NetworkPolicy] [Feature:SCTP] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should stop enforcing policies after they are deleted [Feature:NetworkPolicy]": "should stop enforcing policies after they are deleted [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should support a 'default-deny-all' policy [Feature:NetworkPolicy]": "should support a 'default-deny-all' policy [Feature:NetworkPolicy] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should support a 'default-deny-ingress' policy [Feature:NetworkPolicy]": "should support a 'default-deny-ingress' policy [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should support allow-all policy [Feature:NetworkPolicy]": "should support allow-all policy [Feature:NetworkPolicy] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] NetworkPolicy [LinuxOnly] NetworkPolicy between server and client should work with Ingress,Egress specified together [Feature:NetworkPolicy]": "should work with Ingress,Egress specified together [Feature:NetworkPolicy] [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Pods should function for intra-pod communication: http [NodeConformance] [Conformance]": "should function for intra-pod communication: http [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Pods should function for intra-pod communication: udp [NodeConformance] [Conformance]": "should function for intra-pod communication: udp [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Pods should function for node-pod communication: http [LinuxOnly] [NodeConformance] [Conformance]": "should function for node-pod communication: http [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Pods should function for node-pod communication: udp [LinuxOnly] [NodeConformance] [Conformance]": "should function for node-pod communication: udp [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should be able to handle large requests: http": "should be able to handle large requests: http [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should be able to handle large requests: udp": "should be able to handle large requests: udp [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should function for client IP based session affinity: http [LinuxOnly]": "should function for client IP based session affinity: http [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should function for client IP based session affinity: udp [LinuxOnly]": "should function for client IP based session affinity: udp [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should function for endpoint-Service: http": "should function for endpoint-Service: http [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should function for endpoint-Service: udp": "should function for endpoint-Service: udp [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should function for node-Service: http": "should function for node-Service: http [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should function for node-Service: udp": "should function for node-Service: udp [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should function for pod-Service: http": "should function for pod-Service: http [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should function for pod-Service: sctp [Feature:SCTPConnectivity]": "should function for pod-Service: sctp [Feature:SCTPConnectivity] [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should function for pod-Service: udp": "should function for pod-Service: udp [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should update endpoints: http": "should update endpoints: http [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should update endpoints: udp": "should update endpoints: udp [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should update nodePort: http [Slow]": "should update nodePort: http [Slow] [Suite:k8s]", + + "[Top Level] [sig-network] Networking Granular Checks: Services should update nodePort: udp [Slow]": "should update nodePort: udp [Slow] [Suite:k8s]", + + "[Top Level] [sig-network] Networking IPerf IPv4 [Experimental] [Feature:Networking-IPv4] [Slow] [Feature:Networking-Performance] should transfer ~ 1GB onto the service endpoint 1 servers (maximum of 1 clients)": "should transfer ~ 1GB onto the service endpoint 1 servers (maximum of 1 clients) [Suite:k8s]", + + "[Top Level] [sig-network] Networking IPerf IPv6 [Experimental] [Feature:Networking-IPv6] [Slow] [Feature:Networking-Performance] [LinuxOnly] should transfer ~ 1GB onto the service endpoint 1 servers (maximum of 1 clients)": "should transfer ~ 1GB onto the service endpoint 1 servers (maximum of 1 clients) [Disabled:Unimplemented] [Suite:k8s]", + + "[Top Level] [sig-network] Networking should check kube-proxy urls": "should check kube-proxy urls [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-network] Networking should function for pod-pod: sctp [Feature:SCTPConnectivity]": "should function for pod-pod: sctp [Feature:SCTPConnectivity] [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-network] Networking should provide Internet connection for containers [Feature:Networking-IPv4]": "should provide Internet connection for containers [Feature:Networking-IPv4] [Skipped:azure] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Networking should provide Internet connection for containers [Feature:Networking-IPv6][Experimental][LinuxOnly]": "should provide Internet connection for containers [Feature:Networking-IPv6][Experimental][LinuxOnly] [Disabled:Unimplemented] [Skipped:azure] [Suite:k8s]", + + "[Top Level] [sig-network] Networking should provide unchanging, static URL paths for kubernetes api services": "should provide unchanging, static URL paths for kubernetes api services [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-network] Networking should recreate its iptables rules if they are deleted [Disruptive]": "should recreate its iptables rules if they are deleted [Disruptive] [Serial] [Suite:k8s]", + + "[Top Level] [sig-network] NoSNAT [Feature:NoSNAT] [Slow] Should be able to send traffic between Pods without SNAT": "Should be able to send traffic between Pods without SNAT [Suite:k8s]", + + "[Top Level] [sig-network] Proxy version v1 should proxy logs on node using proxy subresource ": "should proxy logs on node using proxy subresource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Proxy version v1 should proxy logs on node with explicit kubelet port using proxy subresource ": "should proxy logs on node with explicit kubelet port using proxy subresource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Proxy version v1 should proxy through a service and a pod [Conformance]": "should proxy through a service and a pod [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] SCTP [Feature:SCTP] [LinuxOnly] should allow creating a basic SCTP service with pod and endpoints": "should allow creating a basic SCTP service with pod and endpoints [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] SCTP [Feature:SCTP] [LinuxOnly] should create a ClusterIP Service with SCTP ports": "should create a ClusterIP Service with SCTP ports [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] SCTP [Feature:SCTP] [LinuxOnly] should create a Pod with SCTP HostPort": "should create a Pod with SCTP HostPort [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Service endpoints latency should not be very high [Conformance]": "should not be very high [Conformance] [Serial] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services [Slow] should be able to create and tear down a standard-tier load balancer [Slow]": "should be able to create and tear down a standard-tier load balancer [Slow] [Suite:k8s]", + + "[Top Level] [sig-network] Services should allow pods to hairpin back to themselves through services": "should allow pods to hairpin back to themselves through services [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Services should be able to change the type and ports of a service [Slow] [DisabledForLargeClusters]": "should be able to change the type and ports of a service [Slow] [DisabledForLargeClusters] [Suite:k8s]", + + "[Top Level] [sig-network] Services should be able to change the type from ClusterIP to ExternalName [Conformance]": "should be able to change the type from ClusterIP to ExternalName [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should be able to change the type from ExternalName to ClusterIP [Conformance]": "should be able to change the type from ExternalName to ClusterIP [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should be able to change the type from ExternalName to NodePort [Conformance]": "should be able to change the type from ExternalName to NodePort [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should be able to change the type from NodePort to ExternalName [Conformance]": "should be able to change the type from NodePort to ExternalName [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should be able to create a functioning NodePort service [Conformance]": "should be able to create a functioning NodePort service [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should be able to create an internal type load balancer [Slow]": "should be able to create an internal type load balancer [Slow] [Suite:k8s]", + + "[Top Level] [sig-network] Services should be able to switch session affinity for LoadBalancer service with ESIPP off [Slow] [DisabledForLargeClusters] [LinuxOnly]": "should be able to switch session affinity for LoadBalancer service with ESIPP off [Slow] [DisabledForLargeClusters] [LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-network] Services should be able to switch session affinity for LoadBalancer service with ESIPP on [Slow] [DisabledForLargeClusters] [LinuxOnly]": "should be able to switch session affinity for LoadBalancer service with ESIPP on [Slow] [DisabledForLargeClusters] [LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-network] Services should be able to switch session affinity for NodePort service [LinuxOnly] [Conformance]": "should be able to switch session affinity for NodePort service [LinuxOnly] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should be able to switch session affinity for service with type clusterIP [LinuxOnly] [Conformance]": "should be able to switch session affinity for service with type clusterIP [LinuxOnly] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should be able to up and down services": "should be able to up and down services [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-network] Services should be able to update service type to NodePort listening on same port number but different protocols": "should be able to update service type to NodePort listening on same port number but different protocols [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Services should be rejected when no endpoints exist": "should be rejected when no endpoints exist [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Services should check NodePort out-of-range": "should check NodePort out-of-range [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Services should create endpoints for unready pods": "should create endpoints for unready pods [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Services should find a service from listing all namespaces [Conformance]": "should find a service from listing all namespaces [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should handle load balancer cleanup finalizer for service [Slow]": "should handle load balancer cleanup finalizer for service [Slow] [Suite:k8s]", + + "[Top Level] [sig-network] Services should have session affinity timeout work for NodePort service [LinuxOnly] [Conformance]": "should have session affinity timeout work for NodePort service [LinuxOnly] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should have session affinity timeout work for service with type clusterIP [LinuxOnly] [Conformance]": "should have session affinity timeout work for service with type clusterIP [LinuxOnly] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should have session affinity work for LoadBalancer service with ESIPP off [Slow] [DisabledForLargeClusters] [LinuxOnly]": "should have session affinity work for LoadBalancer service with ESIPP off [Slow] [DisabledForLargeClusters] [LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-network] Services should have session affinity work for LoadBalancer service with ESIPP on [Slow] [DisabledForLargeClusters] [LinuxOnly]": "should have session affinity work for LoadBalancer service with ESIPP on [Slow] [DisabledForLargeClusters] [LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-network] Services should have session affinity work for NodePort service [LinuxOnly] [Conformance]": "should have session affinity work for NodePort service [LinuxOnly] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should have session affinity work for service with type clusterIP [LinuxOnly] [Conformance]": "should have session affinity work for service with type clusterIP [LinuxOnly] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should implement service.kubernetes.io/headless": "should implement service.kubernetes.io/headless [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-network] Services should implement service.kubernetes.io/service-proxy-name": "should implement service.kubernetes.io/service-proxy-name [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-network] Services should only allow access from service loadbalancer source ranges [Slow]": "should only allow access from service loadbalancer source ranges [Slow] [Suite:k8s]", + + "[Top Level] [sig-network] Services should preserve source pod IP for traffic thru service cluster IP [LinuxOnly]": "should preserve source pod IP for traffic thru service cluster IP [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Services should prevent NodePort collisions": "should prevent NodePort collisions [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Services should provide secure master service [Conformance]": "should provide secure master service [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should reconcile LB health check interval [Slow][Serial]": "should reconcile LB health check interval [Slow][Serial] [Suite:k8s]", + + "[Top Level] [sig-network] Services should release NodePorts on delete": "should release NodePorts on delete [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-network] Services should serve a basic endpoint from pods [Conformance]": "should serve a basic endpoint from pods [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should serve multiport endpoints from pods [Conformance]": "should serve multiport endpoints from pods [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should test the lifecycle of an Endpoint [Conformance]": "should test the lifecycle of an Endpoint [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-network] Services should work after restarting apiserver [Disruptive]": "should work after restarting apiserver [Disruptive] [Serial] [Suite:k8s]", + + "[Top Level] [sig-network] Services should work after restarting kube-proxy [Disruptive]": "should work after restarting kube-proxy [Disruptive] [Serial] [Suite:k8s]", + + "[Top Level] [sig-network] [Feature:IPv6DualStackAlphaFeature] [LinuxOnly] should be able to reach pod on ipv4 and ipv6 ip [Feature:IPv6DualStackAlphaFeature:Phase2]": "should be able to reach pod on ipv4 and ipv6 ip [Feature:IPv6DualStackAlphaFeature:Phase2] [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-network] [Feature:IPv6DualStackAlphaFeature] [LinuxOnly] should create pod, add ipv6 and ipv4 ip to pod ips": "should create pod, add ipv6 and ipv4 ip to pod ips [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-network] [Feature:IPv6DualStackAlphaFeature] [LinuxOnly] should create service with cluster ip from primary service range [Feature:IPv6DualStackAlphaFeature:Phase2]": "should create service with cluster ip from primary service range [Feature:IPv6DualStackAlphaFeature:Phase2] [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-network] [Feature:IPv6DualStackAlphaFeature] [LinuxOnly] should create service with ipv4 cluster ip [Feature:IPv6DualStackAlphaFeature:Phase2]": "should create service with ipv4 cluster ip [Feature:IPv6DualStackAlphaFeature:Phase2] [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-network] [Feature:IPv6DualStackAlphaFeature] [LinuxOnly] should create service with ipv6 cluster ip [Feature:IPv6DualStackAlphaFeature:Phase2]": "should create service with ipv6 cluster ip [Feature:IPv6DualStackAlphaFeature:Phase2] [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-network] [Feature:IPv6DualStackAlphaFeature] [LinuxOnly] should have ipv4 and ipv6 internal node ip": "should have ipv4 and ipv6 internal node ip [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-network] [Feature:IPv6DualStackAlphaFeature] [LinuxOnly] should have ipv4 and ipv6 node podCIDRs": "should have ipv4 and ipv6 node podCIDRs [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-network] [Feature:PerformanceDNS][Serial] Should answer DNS query for maximum number of services per cluster": "Should answer DNS query for maximum number of services per cluster [Slow] [Suite:k8s]", + + "[Top Level] [sig-node] ConfigMap should be consumable via environment variable [NodeConformance] [Conformance]": "should be consumable via environment variable [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-node] ConfigMap should be consumable via the environment [NodeConformance] [Conformance]": "should be consumable via the environment [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-node] ConfigMap should fail to create ConfigMap with empty key [Conformance]": "should fail to create ConfigMap with empty key [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-node] ConfigMap should run through a ConfigMap lifecycle [Conformance]": "should run through a ConfigMap lifecycle [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-node] ConfigMap should update ConfigMap successfully": "should update ConfigMap successfully [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-node] Downward API should provide container's limits.cpu/memory and requests.cpu/memory as env vars [NodeConformance] [Conformance]": "should provide container's limits.cpu/memory and requests.cpu/memory as env vars [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-node] Downward API should provide default limits.cpu/memory from node allocatable [NodeConformance] [Conformance]": "should provide default limits.cpu/memory from node allocatable [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-node] Downward API should provide host IP and pod IP as an env var if pod uses host network [LinuxOnly]": "should provide host IP and pod IP as an env var if pod uses host network [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-node] Downward API should provide host IP as an env var [NodeConformance] [Conformance]": "should provide host IP as an env var [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-node] Downward API should provide pod UID as env vars [NodeConformance] [Conformance]": "should provide pod UID as env vars [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-node] Downward API should provide pod name, namespace and IP address as env vars [NodeConformance] [Conformance]": "should provide pod name, namespace and IP address as env vars [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-node] PodTemplates should delete a collection of pod templates [Conformance]": "should delete a collection of pod templates [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-node] PodTemplates should run the lifecycle of PodTemplates [Conformance]": "should run the lifecycle of PodTemplates [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-node] RuntimeClass should reject a Pod requesting a RuntimeClass with an unconfigured handler": "should reject a Pod requesting a RuntimeClass with an unconfigured handler [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-node] RuntimeClass should reject a Pod requesting a RuntimeClass with conflicting node selector": "should reject a Pod requesting a RuntimeClass with conflicting node selector [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-node] RuntimeClass should reject a Pod requesting a deleted RuntimeClass": "should reject a Pod requesting a deleted RuntimeClass [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-node] RuntimeClass should reject a Pod requesting a non-existent RuntimeClass": "should reject a Pod requesting a non-existent RuntimeClass [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-node] RuntimeClass should run a Pod requesting a RuntimeClass with a configured handler [NodeFeature:RuntimeHandler]": "should run a Pod requesting a RuntimeClass with a configured handler [NodeFeature:RuntimeHandler] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-node] RuntimeClass should run a Pod requesting a RuntimeClass with scheduling [NodeFeature:RuntimeHandler] [Disruptive] ": "should run a Pod requesting a RuntimeClass with scheduling [NodeFeature:RuntimeHandler] [Disruptive] [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-scheduling] GPUDevicePluginAcrossRecreate [Feature:Recreate] run Nvidia GPU Device Plugin tests with a recreation": "run Nvidia GPU Device Plugin tests with a recreation [Disabled:SpecialConfig] [Suite:k8s]", + + "[Top Level] [sig-scheduling] LimitRange should create a LimitRange with defaults and ensure pod has those defaults applied. [Conformance]": "should create a LimitRange with defaults and ensure pod has those defaults applied. [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-scheduling] Multi-AZ Cluster Volumes [sig-storage] should only be allowed to provision PDs in zones where nodes exist": "should only be allowed to provision PDs in zones where nodes exist [Skipped:gce] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-scheduling] Multi-AZ Cluster Volumes [sig-storage] should schedule pods in the same zones as statically provisioned PVs": "should schedule pods in the same zones as statically provisioned PVs [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-scheduling] Multi-AZ Clusters should spread the pods of a replication controller across zones": "should spread the pods of a replication controller across zones [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-scheduling] Multi-AZ Clusters should spread the pods of a service across zones": "should spread the pods of a service across zones [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPredicates [Serial] PodTopologySpread Filtering validates 4 pods with MaxSkew=1 are evenly distributed into 2 nodes": "validates 4 pods with MaxSkew=1 are evenly distributed into 2 nodes [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPredicates [Serial] validates local ephemeral storage resource limits of pods that are allowed to run [Feature:LocalStorageCapacityIsolation]": "validates local ephemeral storage resource limits of pods that are allowed to run [Feature:LocalStorageCapacityIsolation] [Disabled:SpecialConfig] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPredicates [Serial] validates pod overhead is considered along with resource limits of pods that are allowed to run verify pod overhead is accounted for": "verify pod overhead is accounted for [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPredicates [Serial] validates resource limits of pods that are allowed to run [Conformance]": "validates resource limits of pods that are allowed to run [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPredicates [Serial] validates that NodeAffinity is respected if not matching": "validates that NodeAffinity is respected if not matching [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPredicates [Serial] validates that NodeSelector is respected if matching [Conformance]": "validates that NodeSelector is respected if matching [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPredicates [Serial] validates that NodeSelector is respected if not matching [Conformance]": "validates that NodeSelector is respected if not matching [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPredicates [Serial] validates that required NodeAffinity setting is respected if matching": "validates that required NodeAffinity setting is respected if matching [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPredicates [Serial] validates that taints-tolerations is respected if matching": "validates that taints-tolerations is respected if matching [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPredicates [Serial] validates that taints-tolerations is respected if not matching": "validates that taints-tolerations is respected if not matching [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPredicates [Serial] validates that there exists conflict between pods with same hostPort and protocol but one using 0.0.0.0 hostIP [Conformance]": "validates that there exists conflict between pods with same hostPort and protocol but one using 0.0.0.0 hostIP [Conformance] [Slow] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPredicates [Serial] validates that there is no conflict between pods with same hostPort but different hostIP and protocol [Conformance]": "validates that there is no conflict between pods with same hostPort but different hostIP and protocol [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPreemption [Serial] PodTopologySpread Preemption validates proper pods are preempted": "validates proper pods are preempted [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPreemption [Serial] PreemptionExecutionPath runs ReplicaSets to verify preemption running path [Conformance]": "runs ReplicaSets to verify preemption running path [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPreemption [Serial] validates basic preemption works [Conformance]": "validates basic preemption works [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPreemption [Serial] validates lower priority pod preemption by critical pod [Conformance]": "validates lower priority pod preemption by critical pod [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPriorities [Serial] Pod should avoid nodes that have avoidPod annotation": "Pod should avoid nodes that have avoidPod annotation [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPriorities [Serial] Pod should be preferably scheduled to nodes pod can tolerate": "Pod should be preferably scheduled to nodes pod can tolerate [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPriorities [Serial] Pod should be scheduled to node that don't match the PodAntiAffinity terms": "Pod should be scheduled to node that don't match the PodAntiAffinity terms [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-scheduling] SchedulerPriorities [Serial] PodTopologySpread Scoring validates pod should be preferably scheduled to node which makes the matching pods more evenly distributed": "validates pod should be preferably scheduled to node which makes the matching pods more evenly distributed [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-scheduling] [Feature:GPUDevicePlugin] run Nvidia GPU Device Plugin tests": "run Nvidia GPU Device Plugin tests [Disabled:SpecialConfig] [Suite:k8s]", + + "[Top Level] [sig-service-catalog] [Feature:PodPreset] PodPreset should create a pod preset": "should create a pod preset [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-service-catalog] [Feature:PodPreset] PodPreset should not modify the pod on conflict": "should not modify the pod on conflict [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: CSI Ephemeral-volume (default fs)] ephemeral should create read-only inline ephemeral volume": "should create read-only inline ephemeral volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: CSI Ephemeral-volume (default fs)] ephemeral should create read/write inline ephemeral volume": "should create read/write inline ephemeral volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: CSI Ephemeral-volume (default fs)] ephemeral should support multiple inline ephemeral volumes": "should support multiple inline ephemeral volumes [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: CSI Ephemeral-volume (default fs)] ephemeral should support two pods which share the same volume": "should support two pods which share the same volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic Snapshot (delete policy)] snapshottable[Feature:VolumeSnapshotDataSource] volume snapshot controller should create snapshot objects correctly": "should create snapshot objects correctly [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic Snapshot (delete policy)] snapshottable[Feature:VolumeSnapshotDataSource] volume snapshot controller should delete the VolumeSnapshotContent according to its deletion policy": "should delete the VolumeSnapshotContent according to its deletion policy [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic Snapshot (delete policy)] snapshottable[Feature:VolumeSnapshotDataSource] volume snapshot controller should restore from snapshot with saved data after modifying source data": "should restore from snapshot with saved data after modifying source data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic Snapshot (retain policy)] snapshottable[Feature:VolumeSnapshotDataSource] volume snapshot controller should create snapshot objects correctly": "should create snapshot objects correctly [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic Snapshot (retain policy)] snapshottable[Feature:VolumeSnapshotDataSource] volume snapshot controller should delete the VolumeSnapshotContent according to its deletion policy": "should delete the VolumeSnapshotContent according to its deletion policy [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Dynamic Snapshot (retain policy)] snapshottable[Feature:VolumeSnapshotDataSource] volume snapshot controller should restore from snapshot with saved data after modifying source data": "should restore from snapshot with saved data after modifying source data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (immediate-binding)] ephemeral should create read-only inline ephemeral volume": "should create read-only inline ephemeral volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (immediate-binding)] ephemeral should create read/write inline ephemeral volume": "should create read/write inline ephemeral volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (immediate-binding)] ephemeral should support multiple inline ephemeral volumes": "should support multiple inline ephemeral volumes [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (immediate-binding)] ephemeral should support two pods which share the same volume": "should support two pods which share the same volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (late-binding)] ephemeral should create read-only inline ephemeral volume": "should create read-only inline ephemeral volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (late-binding)] ephemeral should create read/write inline ephemeral volume": "should create read/write inline ephemeral volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (late-binding)] ephemeral should support multiple inline ephemeral volumes": "should support multiple inline ephemeral volumes [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (late-binding)] ephemeral should support two pods which share the same volume": "should support two pods which share the same volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: csi-hostpath] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: CSI Ephemeral-volume (default fs)] ephemeral should create read-only inline ephemeral volume": "should create read-only inline ephemeral volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: CSI Ephemeral-volume (default fs)] ephemeral should create read/write inline ephemeral volume": "should create read/write inline ephemeral volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: CSI Ephemeral-volume (default fs)] ephemeral should support multiple inline ephemeral volumes": "should support multiple inline ephemeral volumes [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: CSI Ephemeral-volume (default fs)] ephemeral should support two pods which share the same volume": "should support two pods which share the same volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic Snapshot (delete policy)] snapshottable[Feature:VolumeSnapshotDataSource] volume snapshot controller should create snapshot objects correctly": "should create snapshot objects correctly [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic Snapshot (delete policy)] snapshottable[Feature:VolumeSnapshotDataSource] volume snapshot controller should delete the VolumeSnapshotContent according to its deletion policy": "should delete the VolumeSnapshotContent according to its deletion policy [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic Snapshot (delete policy)] snapshottable[Feature:VolumeSnapshotDataSource] volume snapshot controller should restore from snapshot with saved data after modifying source data": "should restore from snapshot with saved data after modifying source data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic Snapshot (retain policy)] snapshottable[Feature:VolumeSnapshotDataSource] volume snapshot controller should create snapshot objects correctly": "should create snapshot objects correctly [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic Snapshot (retain policy)] snapshottable[Feature:VolumeSnapshotDataSource] volume snapshot controller should delete the VolumeSnapshotContent according to its deletion policy": "should delete the VolumeSnapshotContent according to its deletion policy [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Dynamic Snapshot (retain policy)] snapshottable[Feature:VolumeSnapshotDataSource] volume snapshot controller should restore from snapshot with saved data after modifying source data": "should restore from snapshot with saved data after modifying source data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (immediate-binding)] ephemeral should create read-only inline ephemeral volume": "should create read-only inline ephemeral volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (immediate-binding)] ephemeral should create read/write inline ephemeral volume": "should create read/write inline ephemeral volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (immediate-binding)] ephemeral should support multiple inline ephemeral volumes": "should support multiple inline ephemeral volumes [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (immediate-binding)] ephemeral should support two pods which share the same volume": "should support two pods which share the same volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (late-binding)] ephemeral should create read-only inline ephemeral volume": "should create read-only inline ephemeral volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (late-binding)] ephemeral should create read/write inline ephemeral volume": "should create read/write inline ephemeral volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (late-binding)] ephemeral should support multiple inline ephemeral volumes": "should support multiple inline ephemeral volumes [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume] (late-binding)] ephemeral should support two pods which share the same volume": "should support two pods which share the same volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI Volumes [Driver: pd.csi.storage.gke.io][Serial] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI NodeStage error cases [Slow] should call NodeUnstage after NodeStage ephemeral error": "should call NodeUnstage after NodeStage ephemeral error [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI NodeStage error cases [Slow] should call NodeUnstage after NodeStage success": "should call NodeUnstage after NodeStage success [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI NodeStage error cases [Slow] should not call NodeUnstage after NodeStage final error": "should not call NodeUnstage after NodeStage final error [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI NodeStage error cases [Slow] should retry NodeStage after NodeStage ephemeral error": "should retry NodeStage after NodeStage ephemeral error [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI NodeStage error cases [Slow] should retry NodeStage after NodeStage final error": "should retry NodeStage after NodeStage final error [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI Volume expansion should expand volume by restarting pod if attach=off, nodeExpansion=on": "should expand volume by restarting pod if attach=off, nodeExpansion=on [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI Volume expansion should expand volume by restarting pod if attach=on, nodeExpansion=on": "should expand volume by restarting pod if attach=on, nodeExpansion=on [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI Volume expansion should expand volume without restarting pod if nodeExpansion=off": "should expand volume without restarting pod if nodeExpansion=off [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI Volume expansion should not expand volume if resizingOnDriver=off, resizingOnSC=on": "should not expand volume if resizingOnDriver=off, resizingOnSC=on [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI attach test using mock driver should not require VolumeAttach for drivers without attachment": "should not require VolumeAttach for drivers without attachment [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI attach test using mock driver should preserve attachment policy when no CSIDriver present": "should preserve attachment policy when no CSIDriver present [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI attach test using mock driver should require VolumeAttach for drivers with attachment": "should require VolumeAttach for drivers with attachment [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI online volume expansion should expand volume without restarting pod if attach=off, nodeExpansion=on": "should expand volume without restarting pod if attach=off, nodeExpansion=on [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI online volume expansion should expand volume without restarting pod if attach=on, nodeExpansion=on": "should expand volume without restarting pod if attach=on, nodeExpansion=on [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI volume limit information using mock driver should report attach limit when limit is bigger than 0 [Slow]": "should report attach limit when limit is bigger than 0 [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI workload information using mock driver contain ephemeral=true when using inline volume": "contain ephemeral=true when using inline volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI workload information using mock driver should be passed when podInfoOnMount=true": "should be passed when podInfoOnMount=true [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI workload information using mock driver should not be passed when CSIDriver does not exist": "should not be passed when CSIDriver does not exist [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI workload information using mock driver should not be passed when podInfoOnMount=false": "should not be passed when podInfoOnMount=false [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSI workload information using mock driver should not be passed when podInfoOnMount=nil": "should not be passed when podInfoOnMount=nil [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSIStorageCapacity [Feature:CSIStorageCapacity] CSIStorageCapacity disabled": "CSIStorageCapacity disabled [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSIStorageCapacity [Feature:CSIStorageCapacity] CSIStorageCapacity unused": "CSIStorageCapacity unused [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSIStorageCapacity [Feature:CSIStorageCapacity] CSIStorageCapacity used, have capacity": "CSIStorageCapacity used, have capacity [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSIStorageCapacity [Feature:CSIStorageCapacity] CSIStorageCapacity used, insufficient capacity": "CSIStorageCapacity used, insufficient capacity [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume CSIStorageCapacity [Feature:CSIStorageCapacity] CSIStorageCapacity used, no capacity": "CSIStorageCapacity used, no capacity [Disabled:Alpha] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume storage capacity exhausted, immediate binding": "exhausted, immediate binding [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume storage capacity exhausted, late binding, no topology": "exhausted, late binding, no topology [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume storage capacity exhausted, late binding, with topology": "exhausted, late binding, with topology [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] CSI mock volume storage capacity unlimited": "unlimited [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap Should fail non-optional pod creation due to configMap object does not exist [Slow]": "Should fail non-optional pod creation due to configMap object does not exist [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap Should fail non-optional pod creation due to the key in the configMap object does not exist [Slow]": "Should fail non-optional pod creation due to the key in the configMap object does not exist [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap binary data should be reflected in volume [NodeConformance] [Conformance]": "binary data should be reflected in volume [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap optional updates should be reflected in volume [NodeConformance] [Conformance]": "optional updates should be reflected in volume [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap should be consumable from pods in volume [NodeConformance] [Conformance]": "should be consumable from pods in volume [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap should be consumable from pods in volume as non-root [NodeConformance] [Conformance]": "should be consumable from pods in volume as non-root [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap should be consumable from pods in volume as non-root with FSGroup [LinuxOnly] [NodeFeature:FSGroup]": "should be consumable from pods in volume as non-root with FSGroup [LinuxOnly] [NodeFeature:FSGroup] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap should be consumable from pods in volume as non-root with defaultMode and fsGroup set [LinuxOnly] [NodeFeature:FSGroup]": "should be consumable from pods in volume as non-root with defaultMode and fsGroup set [LinuxOnly] [NodeFeature:FSGroup] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap should be consumable from pods in volume with defaultMode set [LinuxOnly] [NodeConformance] [Conformance]": "should be consumable from pods in volume with defaultMode set [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap should be consumable from pods in volume with mappings [NodeConformance] [Conformance]": "should be consumable from pods in volume with mappings [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap should be consumable from pods in volume with mappings and Item mode set [LinuxOnly] [NodeConformance] [Conformance]": "should be consumable from pods in volume with mappings and Item mode set [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap should be consumable from pods in volume with mappings as non-root [NodeConformance] [Conformance]": "should be consumable from pods in volume with mappings as non-root [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap should be consumable from pods in volume with mappings as non-root with FSGroup [LinuxOnly] [NodeFeature:FSGroup]": "should be consumable from pods in volume with mappings as non-root with FSGroup [LinuxOnly] [NodeFeature:FSGroup] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap should be consumable in multiple volumes in the same pod [NodeConformance] [Conformance]": "should be consumable in multiple volumes in the same pod [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap should be immutable if `immutable` field is set": "should be immutable if `immutable` field is set [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] ConfigMap updates should be reflected in volume [NodeConformance] [Conformance]": "updates should be reflected in volume [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Downward API volume should provide container's cpu limit [NodeConformance] [Conformance]": "should provide container's cpu limit [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Downward API volume should provide container's cpu request [NodeConformance] [Conformance]": "should provide container's cpu request [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Downward API volume should provide container's memory limit [NodeConformance] [Conformance]": "should provide container's memory limit [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Downward API volume should provide container's memory request [NodeConformance] [Conformance]": "should provide container's memory request [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Downward API volume should provide node allocatable (cpu) as default cpu limit if the limit is not set [NodeConformance] [Conformance]": "should provide node allocatable (cpu) as default cpu limit if the limit is not set [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Downward API volume should provide node allocatable (memory) as default memory limit if the limit is not set [NodeConformance] [Conformance]": "should provide node allocatable (memory) as default memory limit if the limit is not set [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Downward API volume should provide podname as non-root with fsgroup [LinuxOnly] [NodeFeature:FSGroup]": "should provide podname as non-root with fsgroup [LinuxOnly] [NodeFeature:FSGroup] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Downward API volume should provide podname as non-root with fsgroup and defaultMode [LinuxOnly] [NodeFeature:FSGroup]": "should provide podname as non-root with fsgroup and defaultMode [LinuxOnly] [NodeFeature:FSGroup] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Downward API volume should provide podname only [NodeConformance] [Conformance]": "should provide podname only [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Downward API volume should set DefaultMode on files [LinuxOnly] [NodeConformance] [Conformance]": "should set DefaultMode on files [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Downward API volume should set mode on item file [LinuxOnly] [NodeConformance] [Conformance]": "should set mode on item file [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Downward API volume should update annotations on modification [NodeConformance] [Conformance]": "should update annotations on modification [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Downward API volume should update labels on modification [NodeConformance] [Conformance]": "should update labels on modification [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Dynamic Provisioning DynamicProvisioner Default should be disabled by changing the default annotation [Serial] [Disruptive]": "should be disabled by changing the default annotation [Serial] [Disruptive] [Suite:k8s]", + + "[Top Level] [sig-storage] Dynamic Provisioning DynamicProvisioner Default should be disabled by removing the default annotation [Serial] [Disruptive]": "should be disabled by removing the default annotation [Serial] [Disruptive] [Suite:k8s]", + + "[Top Level] [sig-storage] Dynamic Provisioning DynamicProvisioner Default should create and delete default persistent volumes [Slow]": "should create and delete default persistent volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] Dynamic Provisioning DynamicProvisioner External should let an external dynamic provisioner create and delete persistent volumes [Slow]": "should let an external dynamic provisioner create and delete persistent volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] Dynamic Provisioning DynamicProvisioner [Slow] deletion should be idempotent": "deletion should be idempotent [Suite:k8s]", + + "[Top Level] [sig-storage] Dynamic Provisioning DynamicProvisioner [Slow] should not provision a volume in an unmanaged GCE zone.": "should not provision a volume in an unmanaged GCE zone. [Suite:k8s]", + + "[Top Level] [sig-storage] Dynamic Provisioning DynamicProvisioner [Slow] should provision storage with different parameters": "should provision storage with different parameters [Suite:k8s]", + + "[Top Level] [sig-storage] Dynamic Provisioning DynamicProvisioner [Slow] should provision storage with non-default reclaim policy Retain": "should provision storage with non-default reclaim policy Retain [Suite:k8s]", + + "[Top Level] [sig-storage] Dynamic Provisioning DynamicProvisioner [Slow] should test that deleting a claim before the volume is provisioned deletes the volume.": "should test that deleting a claim before the volume is provisioned deletes the volume. [Suite:k8s]", + + "[Top Level] [sig-storage] Dynamic Provisioning Invalid AWS KMS key should report an error and create no PV": "should report an error and create no PV [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Dynamic Provisioning [k8s.io] GlusterDynamicProvisioner should create and delete persistent volumes [fast]": "should create and delete persistent volumes [fast] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes pod should support shared volumes between containers [Conformance]": "pod should support shared volumes between containers [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes should support (non-root,0644,default) [LinuxOnly] [NodeConformance] [Conformance]": "should support (non-root,0644,default) [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes should support (non-root,0644,tmpfs) [LinuxOnly] [NodeConformance] [Conformance]": "should support (non-root,0644,tmpfs) [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes should support (non-root,0666,default) [LinuxOnly] [NodeConformance] [Conformance]": "should support (non-root,0666,default) [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes should support (non-root,0666,tmpfs) [LinuxOnly] [NodeConformance] [Conformance]": "should support (non-root,0666,tmpfs) [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes should support (non-root,0777,default) [LinuxOnly] [NodeConformance] [Conformance]": "should support (non-root,0777,default) [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes should support (non-root,0777,tmpfs) [LinuxOnly] [NodeConformance] [Conformance]": "should support (non-root,0777,tmpfs) [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes should support (root,0644,default) [LinuxOnly] [NodeConformance] [Conformance]": "should support (root,0644,default) [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes should support (root,0644,tmpfs) [LinuxOnly] [NodeConformance] [Conformance]": "should support (root,0644,tmpfs) [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes should support (root,0666,default) [LinuxOnly] [NodeConformance] [Conformance]": "should support (root,0666,default) [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes should support (root,0666,tmpfs) [LinuxOnly] [NodeConformance] [Conformance]": "should support (root,0666,tmpfs) [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes should support (root,0777,default) [LinuxOnly] [NodeConformance] [Conformance]": "should support (root,0777,default) [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes should support (root,0777,tmpfs) [LinuxOnly] [NodeConformance] [Conformance]": "should support (root,0777,tmpfs) [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes volume on default medium should have the correct mode [LinuxOnly] [NodeConformance] [Conformance]": "volume on default medium should have the correct mode [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes volume on tmpfs should have the correct mode [LinuxOnly] [NodeConformance] [Conformance]": "volume on tmpfs should have the correct mode [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes when FSGroup is specified [LinuxOnly] [NodeFeature:FSGroup] files with FSGroup ownership should support (root,0644,tmpfs)": "files with FSGroup ownership should support (root,0644,tmpfs) [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes when FSGroup is specified [LinuxOnly] [NodeFeature:FSGroup] new files should be created with FSGroup ownership when container is non-root": "new files should be created with FSGroup ownership when container is non-root [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes when FSGroup is specified [LinuxOnly] [NodeFeature:FSGroup] new files should be created with FSGroup ownership when container is root": "new files should be created with FSGroup ownership when container is root [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes when FSGroup is specified [LinuxOnly] [NodeFeature:FSGroup] nonexistent volume subPath should have the correct mode and owner using FSGroup": "nonexistent volume subPath should have the correct mode and owner using FSGroup [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes when FSGroup is specified [LinuxOnly] [NodeFeature:FSGroup] volume on default medium should have the correct mode using FSGroup": "volume on default medium should have the correct mode using FSGroup [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir volumes when FSGroup is specified [LinuxOnly] [NodeFeature:FSGroup] volume on tmpfs should have the correct mode using FSGroup": "volume on tmpfs should have the correct mode using FSGroup [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir wrapper volumes should not cause race condition when used for configmaps [Serial] [Conformance]": "should not cause race condition when used for configmaps [Serial] [Conformance] [Suite:openshift/conformance/serial/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir wrapper volumes should not cause race condition when used for git_repo [Serial] [Slow]": "should not cause race condition when used for git_repo [Serial] [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] EmptyDir wrapper volumes should not conflict [Conformance]": "should not conflict [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Ephemeralstorage When pod refers to non-existent ephemeral storage should allow deletion of pod with invalid volume : configmap": "should allow deletion of pod with invalid volume : configmap [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Ephemeralstorage When pod refers to non-existent ephemeral storage should allow deletion of pod with invalid volume : projected": "should allow deletion of pod with invalid volume : projected [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Ephemeralstorage When pod refers to non-existent ephemeral storage should allow deletion of pod with invalid volume : secret": "should allow deletion of pod with invalid volume : secret [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Flexvolumes should be mountable when attachable [Feature:Flexvolumes]": "should be mountable when attachable [Feature:Flexvolumes] [Skipped:gce] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Flexvolumes should be mountable when non-attachable": "should be mountable when non-attachable [Skipped:gce] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] GCP Volumes GlusterFS should be mountable": "should be mountable [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] GCP Volumes NFSv3 should be mountable for NFSv3": "should be mountable for NFSv3 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] GCP Volumes NFSv4 should be mountable for NFSv4": "should be mountable for NFSv4 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] GenericPersistentVolume[Disruptive] When kubelet restarts Should test that a file written to the mount before kubelet restart is readable after restart.": "Should test that a file written to the mount before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] GenericPersistentVolume[Disruptive] When kubelet restarts Should test that a volume mounted to a pod that is deleted while the kubelet is down unmounts when the kubelet returns.": "Should test that a volume mounted to a pod that is deleted while the kubelet is down unmounts when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] GenericPersistentVolume[Disruptive] When kubelet restarts Should test that a volume mounted to a pod that is force deleted while the kubelet is down unmounts when the kubelet returns.": "Should test that a volume mounted to a pod that is force deleted while the kubelet is down unmounts when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] HostPath should give a volume the correct mode [LinuxOnly] [NodeConformance]": "should give a volume the correct mode [LinuxOnly] [NodeConformance] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] HostPath should support r/w [NodeConformance]": "should support r/w [NodeConformance] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] HostPath should support subPath [NodeConformance]": "should support subPath [NodeConformance] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Block Device [Slow] Should be able to mount block device 'ablkdev' successfully when HostPathType is HostPathBlockDev": "Should be able to mount block device 'ablkdev' successfully when HostPathType is HostPathBlockDev [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Block Device [Slow] Should be able to mount block device 'ablkdev' successfully when HostPathType is HostPathUnset": "Should be able to mount block device 'ablkdev' successfully when HostPathType is HostPathUnset [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Block Device [Slow] Should fail on mounting block device 'ablkdev' when HostPathType is HostPathCharDev": "Should fail on mounting block device 'ablkdev' when HostPathType is HostPathCharDev [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Block Device [Slow] Should fail on mounting block device 'ablkdev' when HostPathType is HostPathDirectory": "Should fail on mounting block device 'ablkdev' when HostPathType is HostPathDirectory [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Block Device [Slow] Should fail on mounting block device 'ablkdev' when HostPathType is HostPathFile": "Should fail on mounting block device 'ablkdev' when HostPathType is HostPathFile [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Block Device [Slow] Should fail on mounting block device 'ablkdev' when HostPathType is HostPathSocket": "Should fail on mounting block device 'ablkdev' when HostPathType is HostPathSocket [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Block Device [Slow] Should fail on mounting non-existent block device 'does-not-exist-blk-dev' when HostPathType is HostPathBlockDev": "Should fail on mounting non-existent block device 'does-not-exist-blk-dev' when HostPathType is HostPathBlockDev [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Character Device [Slow] Should be able to mount character device 'achardev' successfully when HostPathType is HostPathCharDev": "Should be able to mount character device 'achardev' successfully when HostPathType is HostPathCharDev [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Character Device [Slow] Should be able to mount character device 'achardev' successfully when HostPathType is HostPathUnset": "Should be able to mount character device 'achardev' successfully when HostPathType is HostPathUnset [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Character Device [Slow] Should fail on mounting character device 'achardev' when HostPathType is HostPathBlockDev": "Should fail on mounting character device 'achardev' when HostPathType is HostPathBlockDev [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Character Device [Slow] Should fail on mounting character device 'achardev' when HostPathType is HostPathDirectory": "Should fail on mounting character device 'achardev' when HostPathType is HostPathDirectory [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Character Device [Slow] Should fail on mounting character device 'achardev' when HostPathType is HostPathFile": "Should fail on mounting character device 'achardev' when HostPathType is HostPathFile [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Character Device [Slow] Should fail on mounting character device 'achardev' when HostPathType is HostPathSocket": "Should fail on mounting character device 'achardev' when HostPathType is HostPathSocket [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Character Device [Slow] Should fail on mounting non-existent character device 'does-not-exist-char-dev' when HostPathType is HostPathCharDev": "Should fail on mounting non-existent character device 'does-not-exist-char-dev' when HostPathType is HostPathCharDev [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Directory [Slow] Should be able to mount directory 'adir' successfully when HostPathType is HostPathDirectory": "Should be able to mount directory 'adir' successfully when HostPathType is HostPathDirectory [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Directory [Slow] Should be able to mount directory 'adir' successfully when HostPathType is HostPathUnset": "Should be able to mount directory 'adir' successfully when HostPathType is HostPathUnset [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Directory [Slow] Should fail on mounting directory 'adir' when HostPathType is HostPathBlockDev": "Should fail on mounting directory 'adir' when HostPathType is HostPathBlockDev [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Directory [Slow] Should fail on mounting directory 'adir' when HostPathType is HostPathCharDev": "Should fail on mounting directory 'adir' when HostPathType is HostPathCharDev [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Directory [Slow] Should fail on mounting directory 'adir' when HostPathType is HostPathFile": "Should fail on mounting directory 'adir' when HostPathType is HostPathFile [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Directory [Slow] Should fail on mounting directory 'adir' when HostPathType is HostPathSocket": "Should fail on mounting directory 'adir' when HostPathType is HostPathSocket [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Directory [Slow] Should fail on mounting non-existent directory 'does-not-exist-dir' when HostPathType is HostPathDirectory": "Should fail on mounting non-existent directory 'does-not-exist-dir' when HostPathType is HostPathDirectory [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType File [Slow] Should be able to mount file 'afile' successfully when HostPathType is HostPathFile": "Should be able to mount file 'afile' successfully when HostPathType is HostPathFile [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType File [Slow] Should be able to mount file 'afile' successfully when HostPathType is HostPathUnset": "Should be able to mount file 'afile' successfully when HostPathType is HostPathUnset [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType File [Slow] Should fail on mounting file 'afile' when HostPathType is HostPathBlockDev": "Should fail on mounting file 'afile' when HostPathType is HostPathBlockDev [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType File [Slow] Should fail on mounting file 'afile' when HostPathType is HostPathCharDev": "Should fail on mounting file 'afile' when HostPathType is HostPathCharDev [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType File [Slow] Should fail on mounting file 'afile' when HostPathType is HostPathDirectory": "Should fail on mounting file 'afile' when HostPathType is HostPathDirectory [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType File [Slow] Should fail on mounting file 'afile' when HostPathType is HostPathSocket": "Should fail on mounting file 'afile' when HostPathType is HostPathSocket [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType File [Slow] Should fail on mounting non-existent file 'does-not-exist-file' when HostPathType is HostPathFile": "Should fail on mounting non-existent file 'does-not-exist-file' when HostPathType is HostPathFile [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Socket [Slow] Should be able to mount socket 'asocket' successfully when HostPathType is HostPathSocket": "Should be able to mount socket 'asocket' successfully when HostPathType is HostPathSocket [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Socket [Slow] Should be able to mount socket 'asocket' successfully when HostPathType is HostPathUnset": "Should be able to mount socket 'asocket' successfully when HostPathType is HostPathUnset [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Socket [Slow] Should fail on mounting non-existent socket 'does-not-exist-socket' when HostPathType is HostPathSocket": "Should fail on mounting non-existent socket 'does-not-exist-socket' when HostPathType is HostPathSocket [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Socket [Slow] Should fail on mounting socket 'asocket' when HostPathType is HostPathBlockDev": "Should fail on mounting socket 'asocket' when HostPathType is HostPathBlockDev [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Socket [Slow] Should fail on mounting socket 'asocket' when HostPathType is HostPathCharDev": "Should fail on mounting socket 'asocket' when HostPathType is HostPathCharDev [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Socket [Slow] Should fail on mounting socket 'asocket' when HostPathType is HostPathDirectory": "Should fail on mounting socket 'asocket' when HostPathType is HostPathDirectory [Suite:k8s]", + + "[Top Level] [sig-storage] HostPathType Socket [Slow] Should fail on mounting socket 'asocket' when HostPathType is HostPathFile": "Should fail on mounting socket 'asocket' when HostPathType is HostPathFile [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: aws] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: azure-disk] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail in binding dynamic provisioned PV to PVC [Slow]": "should fail in binding dynamic provisioned PV to PVC [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to create pod by failing to mount volume [Slow]": "should fail to create pod by failing to mount volume [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: ceph][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: cinder] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail in binding dynamic provisioned PV to PVC [Slow]": "should fail in binding dynamic provisioned PV to PVC [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to create pod by failing to mount volume [Slow]": "should fail to create pod by failing to mount volume [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: emptydir] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gcepd] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail in binding dynamic provisioned PV to PVC [Slow]": "should fail in binding dynamic provisioned PV to PVC [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to create pod by failing to mount volume [Slow]": "should fail to create pod by failing to mount volume [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: gluster] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail in binding dynamic provisioned PV to PVC [Slow]": "should fail in binding dynamic provisioned PV to PVC [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to create pod by failing to mount volume [Slow]": "should fail to create pod by failing to mount volume [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPathSymlink] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail in binding dynamic provisioned PV to PVC [Slow]": "should fail in binding dynamic provisioned PV to PVC [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to create pod by failing to mount volume [Slow]": "should fail to create pod by failing to mount volume [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: hostPath] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Disabled:Broken] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: iscsi][Feature:Volumes] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Disabled:Broken] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: block] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail in binding dynamic provisioned PV to PVC [Slow]": "should fail in binding dynamic provisioned PV to PVC [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to create pod by failing to mount volume [Slow]": "should fail to create pod by failing to mount volume [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: blockfs] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail in binding dynamic provisioned PV to PVC [Slow]": "should fail in binding dynamic provisioned PV to PVC [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to create pod by failing to mount volume [Slow]": "should fail to create pod by failing to mount volume [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-bindmounted] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail in binding dynamic provisioned PV to PVC [Slow]": "should fail in binding dynamic provisioned PV to PVC [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to create pod by failing to mount volume [Slow]": "should fail to create pod by failing to mount volume [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link-bindmounted] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail in binding dynamic provisioned PV to PVC [Slow]": "should fail in binding dynamic provisioned PV to PVC [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to create pod by failing to mount volume [Slow]": "should fail to create pod by failing to mount volume [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir-link] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail in binding dynamic provisioned PV to PVC [Slow]": "should fail in binding dynamic provisioned PV to PVC [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to create pod by failing to mount volume [Slow]": "should fail to create pod by failing to mount volume [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: dir] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail in binding dynamic provisioned PV to PVC [Slow]": "should fail in binding dynamic provisioned PV to PVC [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to create pod by failing to mount volume [Slow]": "should fail to create pod by failing to mount volume [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: gce-localssd-scsi-fs] [Serial] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail in binding dynamic provisioned PV to PVC [Slow]": "should fail in binding dynamic provisioned PV to PVC [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to create pod by failing to mount volume [Slow]": "should fail to create pod by failing to mount volume [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: local][LocalVolumeType: tmpfs] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail in binding dynamic provisioned PV to PVC [Slow]": "should fail in binding dynamic provisioned PV to PVC [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to create pod by failing to mount volume [Slow]": "should fail to create pod by failing to mount volume [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: nfs] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: rbd][Feature:Volumes][Serial] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Disabled:Unsupported] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail in binding dynamic provisioned PV to PVC [Slow]": "should fail in binding dynamic provisioned PV to PVC [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand Verify if offline PVC expansion works": "Verify if offline PVC expansion works [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)(allowExpansion)] volume-expand should resize volume when PVC is edited while pod is using it": "should resize volume when PVC is edited while pod is using it [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] stress multiple pods should access different volumes repeatedly [Slow] [Serial]": "multiple pods should access different volumes repeatedly [Slow] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] volume-expand should not allow expansion of pvcs without AllowVolumeExpansion property": "should not allow expansion of pvcs without AllowVolumeExpansion property [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (delayed binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (delayed binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits [Serial]": "should support volume limits [Serial] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (immediate binding)] topology should fail to schedule a pod which has topologies that conflict with AllowedTopologies": "should fail to schedule a pod which has topologies that conflict with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (immediate binding)] topology should provision a volume and schedule a pod with AllowedTopologies": "should provision a volume and schedule a pod with AllowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with mount options": "should provision storage with mount options [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source in parallel [Slow]": "should provision storage with pvc data source in parallel [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with pvc data source": "should provision storage with pvc data source [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] provisioning should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource]": "should provision storage with snapshot data source [Feature:VolumeSnapshotDataSource] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Dynamic PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Inline-volume (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.": "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (block volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (block volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to create pod by failing to mount volume [Slow]": "should fail to create pod by failing to mount volume [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (block volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (block volmode)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should be able to unmount after the subpath directory is deleted": "should be able to unmount after the subpath directory is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if non-existent subpath is outside the volume [Slow][LinuxOnly]": "should fail if non-existent subpath is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath directory is outside the volume [Slow][LinuxOnly]": "should fail if subpath directory is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath file is outside the volume [Slow][LinuxOnly]": "should fail if subpath file is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly]": "should fail if subpath with backstepping is outside the volume [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should support creating multiple subpath from same volumes [Slow]": "should support creating multiple subpath from same volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directories when readOnly specified in the volumeSource": "should support existing directories when readOnly specified in the volumeSource [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing directory": "should support existing directory [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should support existing single file [LinuxOnly]": "should support existing single file [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should support file as subpath [LinuxOnly]": "should support file as subpath [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should support non-existent path": "should support non-existent path [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly directory specified in the volumeMount": "should support readOnly directory specified in the volumeMount [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should support readOnly file specified in the volumeMount [LinuxOnly]": "should support readOnly file specified in the volumeMount [LinuxOnly] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using directory as subpath [Slow]": "should support restarting containers using directory as subpath [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should support restarting containers using file as subpath [Slow][LinuxOnly]": "should support restarting containers using file as subpath [Slow][LinuxOnly] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is force deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly]": "should unmount if pod is gracefully deleted while kubelet is down [Disruptive][Slow][LinuxOnly] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] subPath should verify container cannot write to subpath readonly volumes [Slow]": "should verify container cannot write to subpath readonly volumes [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] volumeIO should write files of various sizes, verify size, validate content [Slow]": "should write files of various sizes, verify size, validate content [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (default fs)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (ext3)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (ext3)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (ext4)] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (ext4)] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (filesystem volmode)] disruptive[Disruptive] Should test that pv written before kubelet restart is readable after restart.": "Should test that pv written before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on different node": "should access to two volumes with different volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with different volume mode and retain data across pod recreation on the same node": "should access to two volumes with different volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on different node": "should access to two volumes with the same volume mode and retain data across pod recreation on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should access to two volumes with the same volume mode and retain data across pod recreation on the same node": "should access to two volumes with the same volume mode and retain data across pod recreation on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single read-only volume from pods on the same node": "should concurrently access the single read-only volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on different node": "should concurrently access the single volume from pods on different node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (filesystem volmode)] multiVolume [Slow] should concurrently access the single volume from pods on the same node": "should concurrently access the single volume from pods on the same node [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should fail to use a volume in a pod with mismatched mode [Slow]": "should fail to use a volume in a pod with mismatched mode [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (filesystem volmode)] volumeMode should not mount / map unused volumes in a pod": "should not mount / map unused volumes in a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (ntfs)][sig-windows] volumes should store data": "should store data [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should allow exec of files on the volume": "should allow exec of files on the volume [Suite:k8s]", + + "[Top Level] [sig-storage] In-tree Volumes [Driver: vsphere] [Testpattern: Pre-provisioned PV (xfs)][Slow] volumes should store data": "should store data [Suite:k8s]", + + "[Top Level] [sig-storage] Mounted flexvolume volume expand [Slow] [Feature:ExpandInUsePersistentVolumes] should be resizable when mounted": "should be resizable when mounted [Suite:k8s]", + + "[Top Level] [sig-storage] Mounted volume expand Should verify mounted devices can be resized": "Should verify mounted devices can be resized [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] NFSPersistentVolumes[Disruptive][Flaky] when kube-controller-manager restarts should delete a bound PVC from a clientPod, restart the kube-control-manager, and ensure the kube-controller-manager does not crash": "should delete a bound PVC from a clientPod, restart the kube-control-manager, and ensure the kube-controller-manager does not crash [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] NFSPersistentVolumes[Disruptive][Flaky] when kubelet restarts Should test that a file written to the mount before kubelet restart is readable after restart.": "Should test that a file written to the mount before kubelet restart is readable after restart. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] NFSPersistentVolumes[Disruptive][Flaky] when kubelet restarts Should test that a volume mounted to a pod that is deleted while the kubelet is down unmounts when the kubelet returns.": "Should test that a volume mounted to a pod that is deleted while the kubelet is down unmounts when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] NFSPersistentVolumes[Disruptive][Flaky] when kubelet restarts Should test that a volume mounted to a pod that is force deleted while the kubelet is down unmounts when the kubelet returns.": "Should test that a volume mounted to a pod that is force deleted while the kubelet is down unmounts when the kubelet returns. [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] Node Poweroff [Feature:vsphere] [Slow] [Disruptive] verify volume status after node power off": "verify volume status after node power off [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] Node Unregister [Feature:vsphere] [Slow] [Disruptive] node unregister": "node unregister [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] PV Protection Verify \"immediate\" deletion of a PV that is not bound to a PVC": "Verify \"immediate\" deletion of a PV that is not bound to a PVC [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PV Protection Verify that PV bound to a PVC is not removed immediately": "Verify that PV bound to a PVC is not removed immediately [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PVC Protection Verify \"immediate\" deletion of a PVC that is not in active use by a pod": "Verify \"immediate\" deletion of a PVC that is not in active use by a pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PVC Protection Verify that PVC in active use by a pod is not removed immediately": "Verify that PVC in active use by a pod is not removed immediately [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PVC Protection Verify that scheduling of a pod that uses PVC that is being deleted fails and the pod becomes Unschedulable": "Verify that scheduling of a pod that uses PVC that is being deleted fails and the pod becomes Unschedulable [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes Default StorageClass pods that use multiple volumes should be reschedulable [Slow]": "should be reschedulable [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes GCEPD should test that deleting a PVC before the pod does not cause pod deletion to fail on PD detach": "should test that deleting a PVC before the pod does not cause pod deletion to fail on PD detach [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes GCEPD should test that deleting the Namespace of a PVC and Pod causes the successful detach of Persistent Disk": "should test that deleting the Namespace of a PVC and Pod causes the successful detach of Persistent Disk [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes GCEPD should test that deleting the PV before the pod does not cause pod deletion to fail on PD detach": "should test that deleting the PV before the pod does not cause pod deletion to fail on PD detach [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes NFS when invoking the Recycle reclaim policy should test that a PV becomes Available and is clean after the PVC is deleted.": "should test that a PV becomes Available and is clean after the PVC is deleted. [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes NFS with Single PV - PVC pairs create a PV and a pre-bound PVC: test write access": "create a PV and a pre-bound PVC: test write access [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes NFS with Single PV - PVC pairs create a PVC and a pre-bound PV: test write access": "create a PVC and a pre-bound PV: test write access [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes NFS with Single PV - PVC pairs create a PVC and non-pre-bound PV: test write access": "create a PVC and non-pre-bound PV: test write access [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes NFS with Single PV - PVC pairs should create a non-pre-bound PV and PVC: test write access ": "should create a non-pre-bound PV and PVC: test write access [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes NFS with multiple PVs and PVCs all in same ns should create 2 PVs and 4 PVCs: test write access": "should create 2 PVs and 4 PVCs: test write access [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes NFS with multiple PVs and PVCs all in same ns should create 3 PVs and 3 PVCs: test write access": "should create 3 PVs and 3 PVCs: test write access [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes NFS with multiple PVs and PVCs all in same ns should create 4 PVs and 2 PVCs: test write access [Slow]": "should create 4 PVs and 2 PVCs: test write access [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes [Feature:vsphere][Feature:LabelSelector] [sig-storage] Selector-Label Volume Binding:vsphere [Feature:vsphere] should bind volume with claim for given label": "should bind volume with claim for given label [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes [Feature:vsphere][Feature:ReclaimPolicy] [sig-storage] persistentvolumereclaim:vsphere [Feature:vsphere] should delete persistent volume when reclaimPolicy set to delete and associated claim is deleted": "should delete persistent volume when reclaimPolicy set to delete and associated claim is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes [Feature:vsphere][Feature:ReclaimPolicy] [sig-storage] persistentvolumereclaim:vsphere [Feature:vsphere] should not detach and unmount PV when associated pvc with delete as reclaimPolicy is deleted when it is in use by the pod": "should not detach and unmount PV when associated pvc with delete as reclaimPolicy is deleted when it is in use by the pod [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes [Feature:vsphere][Feature:ReclaimPolicy] [sig-storage] persistentvolumereclaim:vsphere [Feature:vsphere] should retain persistent volume when reclaimPolicy set to retain when associated claim is deleted": "should retain persistent volume when reclaimPolicy set to retain when associated claim is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local Local volume that cannot be mounted [Slow] should fail due to non-existent path": "should fail due to non-existent path [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local Local volume that cannot be mounted [Slow] should fail due to wrong node": "should fail due to wrong node [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local Pod with node different from PV's NodeAffinity should fail scheduling due to different NodeAffinity": "should fail scheduling due to different NodeAffinity [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local Pod with node different from PV's NodeAffinity should fail scheduling due to different NodeSelector": "should fail scheduling due to different NodeSelector [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local Pods sharing a single local PV [Serial] all pods should be running": "all pods should be running [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local StatefulSet with pod affinity [Slow] should use volumes on one node when pod has affinity": "should use volumes on one node when pod has affinity [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local StatefulSet with pod affinity [Slow] should use volumes on one node when pod management is parallel and pod has affinity": "should use volumes on one node when pod management is parallel and pod has affinity [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local StatefulSet with pod affinity [Slow] should use volumes spread across nodes when pod has anti-affinity": "should use volumes spread across nodes when pod has anti-affinity [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local StatefulSet with pod affinity [Slow] should use volumes spread across nodes when pod management is parallel and pod has anti-affinity": "should use volumes spread across nodes when pod management is parallel and pod has anti-affinity [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local Stress with local volumes [Serial] should be able to process many pods and reuse local volumes": "should be able to process many pods and reuse local volumes [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: block] One pod requesting one prebound PVC should be able to mount volume and read from pod1": "should be able to mount volume and read from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: block] One pod requesting one prebound PVC should be able to mount volume and write from pod1": "should be able to mount volume and write from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: block] Set fsGroup for local volume should set different fsGroup for second pod if first pod is deleted": "should set different fsGroup for second pod if first pod is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: block] Set fsGroup for local volume should set fsGroup for one pod [Slow]": "should set fsGroup for one pod [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: block] Set fsGroup for local volume should set same fsGroup for two pods simultaneously [Slow]": "should set same fsGroup for two pods simultaneously [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: block] Two pods mounting a local volume at the same time should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: block] Two pods mounting a local volume one after the other should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: blockfswithformat] One pod requesting one prebound PVC should be able to mount volume and read from pod1": "should be able to mount volume and read from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: blockfswithformat] One pod requesting one prebound PVC should be able to mount volume and write from pod1": "should be able to mount volume and write from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: blockfswithformat] Set fsGroup for local volume should set different fsGroup for second pod if first pod is deleted": "should set different fsGroup for second pod if first pod is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: blockfswithformat] Set fsGroup for local volume should set fsGroup for one pod [Slow]": "should set fsGroup for one pod [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: blockfswithformat] Set fsGroup for local volume should set same fsGroup for two pods simultaneously [Slow]": "should set same fsGroup for two pods simultaneously [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: blockfswithformat] Two pods mounting a local volume at the same time should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: blockfswithformat] Two pods mounting a local volume one after the other should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: blockfswithoutformat] One pod requesting one prebound PVC should be able to mount volume and read from pod1": "should be able to mount volume and read from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: blockfswithoutformat] One pod requesting one prebound PVC should be able to mount volume and write from pod1": "should be able to mount volume and write from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: blockfswithoutformat] Set fsGroup for local volume should set different fsGroup for second pod if first pod is deleted": "should set different fsGroup for second pod if first pod is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: blockfswithoutformat] Set fsGroup for local volume should set fsGroup for one pod [Slow]": "should set fsGroup for one pod [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: blockfswithoutformat] Set fsGroup for local volume should set same fsGroup for two pods simultaneously [Slow]": "should set same fsGroup for two pods simultaneously [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: blockfswithoutformat] Two pods mounting a local volume at the same time should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: blockfswithoutformat] Two pods mounting a local volume one after the other should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-bindmounted] One pod requesting one prebound PVC should be able to mount volume and read from pod1": "should be able to mount volume and read from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-bindmounted] One pod requesting one prebound PVC should be able to mount volume and write from pod1": "should be able to mount volume and write from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-bindmounted] Set fsGroup for local volume should set different fsGroup for second pod if first pod is deleted": "should set different fsGroup for second pod if first pod is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-bindmounted] Set fsGroup for local volume should set fsGroup for one pod [Slow]": "should set fsGroup for one pod [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-bindmounted] Set fsGroup for local volume should set same fsGroup for two pods simultaneously [Slow]": "should set same fsGroup for two pods simultaneously [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-bindmounted] Two pods mounting a local volume at the same time should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-bindmounted] Two pods mounting a local volume one after the other should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-link-bindmounted] One pod requesting one prebound PVC should be able to mount volume and read from pod1": "should be able to mount volume and read from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-link-bindmounted] One pod requesting one prebound PVC should be able to mount volume and write from pod1": "should be able to mount volume and write from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-link-bindmounted] Set fsGroup for local volume should set different fsGroup for second pod if first pod is deleted": "should set different fsGroup for second pod if first pod is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-link-bindmounted] Set fsGroup for local volume should set fsGroup for one pod [Slow]": "should set fsGroup for one pod [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-link-bindmounted] Set fsGroup for local volume should set same fsGroup for two pods simultaneously [Slow]": "should set same fsGroup for two pods simultaneously [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-link-bindmounted] Two pods mounting a local volume at the same time should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-link-bindmounted] Two pods mounting a local volume one after the other should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-link] One pod requesting one prebound PVC should be able to mount volume and read from pod1": "should be able to mount volume and read from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-link] One pod requesting one prebound PVC should be able to mount volume and write from pod1": "should be able to mount volume and write from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-link] Set fsGroup for local volume should set different fsGroup for second pod if first pod is deleted": "should set different fsGroup for second pod if first pod is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-link] Set fsGroup for local volume should set fsGroup for one pod [Slow]": "should set fsGroup for one pod [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-link] Set fsGroup for local volume should set same fsGroup for two pods simultaneously [Slow]": "should set same fsGroup for two pods simultaneously [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-link] Two pods mounting a local volume at the same time should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir-link] Two pods mounting a local volume one after the other should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir] One pod requesting one prebound PVC should be able to mount volume and read from pod1": "should be able to mount volume and read from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir] One pod requesting one prebound PVC should be able to mount volume and write from pod1": "should be able to mount volume and write from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir] Set fsGroup for local volume should set different fsGroup for second pod if first pod is deleted": "should set different fsGroup for second pod if first pod is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir] Set fsGroup for local volume should set fsGroup for one pod [Slow]": "should set fsGroup for one pod [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir] Set fsGroup for local volume should set same fsGroup for two pods simultaneously [Slow]": "should set same fsGroup for two pods simultaneously [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir] Two pods mounting a local volume at the same time should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: dir] Two pods mounting a local volume one after the other should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: gce-localssd-scsi-fs] [Serial] One pod requesting one prebound PVC should be able to mount volume and read from pod1": "should be able to mount volume and read from pod1 [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: gce-localssd-scsi-fs] [Serial] One pod requesting one prebound PVC should be able to mount volume and write from pod1": "should be able to mount volume and write from pod1 [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: gce-localssd-scsi-fs] [Serial] Set fsGroup for local volume should set different fsGroup for second pod if first pod is deleted": "should set different fsGroup for second pod if first pod is deleted [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: gce-localssd-scsi-fs] [Serial] Set fsGroup for local volume should set fsGroup for one pod [Slow]": "should set fsGroup for one pod [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: gce-localssd-scsi-fs] [Serial] Set fsGroup for local volume should set same fsGroup for two pods simultaneously [Slow]": "should set same fsGroup for two pods simultaneously [Slow] [Skipped:gce] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: gce-localssd-scsi-fs] [Serial] Two pods mounting a local volume at the same time should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: gce-localssd-scsi-fs] [Serial] Two pods mounting a local volume one after the other should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Skipped:gce] [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: tmpfs] One pod requesting one prebound PVC should be able to mount volume and read from pod1": "should be able to mount volume and read from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: tmpfs] One pod requesting one prebound PVC should be able to mount volume and write from pod1": "should be able to mount volume and write from pod1 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: tmpfs] Set fsGroup for local volume should set different fsGroup for second pod if first pod is deleted": "should set different fsGroup for second pod if first pod is deleted [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: tmpfs] Set fsGroup for local volume should set fsGroup for one pod [Slow]": "should set fsGroup for one pod [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: tmpfs] Set fsGroup for local volume should set same fsGroup for two pods simultaneously [Slow]": "should set same fsGroup for two pods simultaneously [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: tmpfs] Two pods mounting a local volume at the same time should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes-local [Volume type: tmpfs] Two pods mounting a local volume one after the other should be able to write from pod1 and read from pod2": "should be able to write from pod1 and read from pod2 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes:vsphere [Feature:vsphere] should test that a file written to the vsphere volume mount before kubelet restart can be read after restart [Disruptive]": "should test that a file written to the vsphere volume mount before kubelet restart can be read after restart [Disruptive] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes:vsphere [Feature:vsphere] should test that a vsphere volume mounted to a pod that is deleted while the kubelet is down unmounts when the kubelet returns [Disruptive]": "should test that a vsphere volume mounted to a pod that is deleted while the kubelet is down unmounts when the kubelet returns [Disruptive] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes:vsphere [Feature:vsphere] should test that deleting a PVC before the pod does not cause pod deletion to fail on vsphere volume detach": "should test that deleting a PVC before the pod does not cause pod deletion to fail on vsphere volume detach [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes:vsphere [Feature:vsphere] should test that deleting the Namespace of a PVC and Pod causes the successful detach of vsphere volume": "should test that deleting the Namespace of a PVC and Pod causes the successful detach of vsphere volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] PersistentVolumes:vsphere [Feature:vsphere] should test that deleting the PV before the pod does not cause pod deletion to fail on vsphere volume detach": "should test that deleting the PV before the pod does not cause pod deletion to fail on vsphere volume detach [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Pod Disks [Serial] attach on previously attached volumes should work": "[Serial] attach on previously attached volumes should work [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] Pod Disks detach in a disrupted environment [Slow] [Disruptive] when node's API object is deleted": "when node's API object is deleted [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] Pod Disks detach in a disrupted environment [Slow] [Disruptive] when pod is evicted": "when pod is evicted [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] Pod Disks schedule a pod w/ RW PD(s) mounted to 1 or more containers, write to PD, verify content, delete pod, and repeat in rapid succession [Slow] using 1 containers and 2 PDs": "using 1 containers and 2 PDs [Suite:k8s]", + + "[Top Level] [sig-storage] Pod Disks schedule a pod w/ RW PD(s) mounted to 1 or more containers, write to PD, verify content, delete pod, and repeat in rapid succession [Slow] using 4 containers and 1 PDs": "using 4 containers and 1 PDs [Suite:k8s]", + + "[Top Level] [sig-storage] Pod Disks schedule pods each with a PD, delete pod and verify detach [Slow] for RW PD with pod delete grace period of \"default (30s)\"": "for RW PD with pod delete grace period of \"default (30s)\" [Suite:k8s]", + + "[Top Level] [sig-storage] Pod Disks schedule pods each with a PD, delete pod and verify detach [Slow] for RW PD with pod delete grace period of \"immediate (0s)\"": "for RW PD with pod delete grace period of \"immediate (0s)\" [Suite:k8s]", + + "[Top Level] [sig-storage] Pod Disks schedule pods each with a PD, delete pod and verify detach [Slow] for read-only PD with pod delete grace period of \"default (30s)\"": "for read-only PD with pod delete grace period of \"default (30s)\" [Suite:k8s]", + + "[Top Level] [sig-storage] Pod Disks schedule pods each with a PD, delete pod and verify detach [Slow] for read-only PD with pod delete grace period of \"immediate (0s)\"": "for read-only PD with pod delete grace period of \"immediate (0s)\" [Suite:k8s]", + + "[Top Level] [sig-storage] Pod Disks should be able to delete a non-existent PD without error": "should be able to delete a non-existent PD without error [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected combined should project all components that make up the projection API [Projection][NodeConformance] [Conformance]": "should project all components that make up the projection API [Projection][NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected configMap Should fail non-optional pod creation due to configMap object does not exist [Slow]": "Should fail non-optional pod creation due to configMap object does not exist [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected configMap Should fail non-optional pod creation due to the key in the configMap object does not exist [Slow]": "Should fail non-optional pod creation due to the key in the configMap object does not exist [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected configMap optional updates should be reflected in volume [NodeConformance] [Conformance]": "optional updates should be reflected in volume [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected configMap should be consumable from pods in volume [NodeConformance] [Conformance]": "should be consumable from pods in volume [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected configMap should be consumable from pods in volume as non-root [NodeConformance] [Conformance]": "should be consumable from pods in volume as non-root [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected configMap should be consumable from pods in volume as non-root with FSGroup [LinuxOnly] [NodeFeature:FSGroup]": "should be consumable from pods in volume as non-root with FSGroup [LinuxOnly] [NodeFeature:FSGroup] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected configMap should be consumable from pods in volume as non-root with defaultMode and fsGroup set [LinuxOnly] [NodeFeature:FSGroup]": "should be consumable from pods in volume as non-root with defaultMode and fsGroup set [LinuxOnly] [NodeFeature:FSGroup] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected configMap should be consumable from pods in volume with defaultMode set [LinuxOnly] [NodeConformance] [Conformance]": "should be consumable from pods in volume with defaultMode set [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected configMap should be consumable from pods in volume with mappings [NodeConformance] [Conformance]": "should be consumable from pods in volume with mappings [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected configMap should be consumable from pods in volume with mappings and Item mode set [LinuxOnly] [NodeConformance] [Conformance]": "should be consumable from pods in volume with mappings and Item mode set [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected configMap should be consumable from pods in volume with mappings as non-root [NodeConformance] [Conformance]": "should be consumable from pods in volume with mappings as non-root [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected configMap should be consumable from pods in volume with mappings as non-root with FSGroup [LinuxOnly] [NodeFeature:FSGroup]": "should be consumable from pods in volume with mappings as non-root with FSGroup [LinuxOnly] [NodeFeature:FSGroup] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected configMap should be consumable in multiple volumes in the same pod [NodeConformance] [Conformance]": "should be consumable in multiple volumes in the same pod [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected configMap updates should be reflected in volume [NodeConformance] [Conformance]": "updates should be reflected in volume [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected downwardAPI should provide container's cpu limit [NodeConformance] [Conformance]": "should provide container's cpu limit [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected downwardAPI should provide container's cpu request [NodeConformance] [Conformance]": "should provide container's cpu request [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected downwardAPI should provide container's memory limit [NodeConformance] [Conformance]": "should provide container's memory limit [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected downwardAPI should provide container's memory request [NodeConformance] [Conformance]": "should provide container's memory request [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected downwardAPI should provide node allocatable (cpu) as default cpu limit if the limit is not set [NodeConformance] [Conformance]": "should provide node allocatable (cpu) as default cpu limit if the limit is not set [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected downwardAPI should provide node allocatable (memory) as default memory limit if the limit is not set [NodeConformance] [Conformance]": "should provide node allocatable (memory) as default memory limit if the limit is not set [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected downwardAPI should provide podname as non-root with fsgroup [LinuxOnly] [NodeFeature:FSGroup]": "should provide podname as non-root with fsgroup [LinuxOnly] [NodeFeature:FSGroup] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected downwardAPI should provide podname as non-root with fsgroup and defaultMode [LinuxOnly] [NodeFeature:FSGroup]": "should provide podname as non-root with fsgroup and defaultMode [LinuxOnly] [NodeFeature:FSGroup] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected downwardAPI should provide podname only [NodeConformance] [Conformance]": "should provide podname only [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected downwardAPI should set DefaultMode on files [LinuxOnly] [NodeConformance] [Conformance]": "should set DefaultMode on files [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected downwardAPI should set mode on item file [LinuxOnly] [NodeConformance] [Conformance]": "should set mode on item file [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected downwardAPI should update annotations on modification [NodeConformance] [Conformance]": "should update annotations on modification [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected downwardAPI should update labels on modification [NodeConformance] [Conformance]": "should update labels on modification [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected secret Should fail non-optional pod creation due to secret object does not exist [Slow]": "Should fail non-optional pod creation due to secret object does not exist [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected secret Should fail non-optional pod creation due to the key in the secret object does not exist [Slow]": "Should fail non-optional pod creation due to the key in the secret object does not exist [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected secret optional updates should be reflected in volume [NodeConformance] [Conformance]": "optional updates should be reflected in volume [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected secret should be able to mount in a volume regardless of a different secret existing with same name in different namespace [NodeConformance]": "should be able to mount in a volume regardless of a different secret existing with same name in different namespace [NodeConformance] [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected secret should be consumable from pods in volume [NodeConformance] [Conformance]": "should be consumable from pods in volume [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected secret should be consumable from pods in volume as non-root with defaultMode and fsGroup set [LinuxOnly] [NodeConformance] [Conformance]": "should be consumable from pods in volume as non-root with defaultMode and fsGroup set [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected secret should be consumable from pods in volume with defaultMode set [LinuxOnly] [NodeConformance] [Conformance]": "should be consumable from pods in volume with defaultMode set [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected secret should be consumable from pods in volume with mappings [NodeConformance] [Conformance]": "should be consumable from pods in volume with mappings [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected secret should be consumable from pods in volume with mappings and Item Mode set [LinuxOnly] [NodeConformance] [Conformance]": "should be consumable from pods in volume with mappings and Item Mode set [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Projected secret should be consumable in multiple volumes in a pod [NodeConformance] [Conformance]": "should be consumable in multiple volumes in a pod [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Regional PD RegionalPD should failover to a different zone when all nodes in one zone become unreachable [Slow] [Disruptive]": "should failover to a different zone when all nodes in one zone become unreachable [Slow] [Disruptive] [Serial] [Suite:k8s]", + + "[Top Level] [sig-storage] Regional PD RegionalPD should provision storage [Slow]": "should provision storage [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] Regional PD RegionalPD should provision storage in the allowedTopologies [Slow]": "should provision storage in the allowedTopologies [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] Regional PD RegionalPD should provision storage in the allowedTopologies with delayed binding [Slow]": "should provision storage in the allowedTopologies with delayed binding [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] Regional PD RegionalPD should provision storage with delayed binding [Slow]": "should provision storage with delayed binding [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] Secrets Should fail non-optional pod creation due to secret object does not exist [Slow]": "Should fail non-optional pod creation due to secret object does not exist [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] Secrets Should fail non-optional pod creation due to the key in the secret object does not exist [Slow]": "Should fail non-optional pod creation due to the key in the secret object does not exist [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] Secrets optional updates should be reflected in volume [NodeConformance] [Conformance]": "optional updates should be reflected in volume [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Secrets should be able to mount in a volume regardless of a different secret existing with same name in different namespace [NodeConformance] [Conformance]": "should be able to mount in a volume regardless of a different secret existing with same name in different namespace [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Secrets should be consumable from pods in volume [NodeConformance] [Conformance]": "should be consumable from pods in volume [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Secrets should be consumable from pods in volume as non-root with defaultMode and fsGroup set [LinuxOnly] [NodeConformance] [Conformance]": "should be consumable from pods in volume as non-root with defaultMode and fsGroup set [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Secrets should be consumable from pods in volume with defaultMode set [LinuxOnly] [NodeConformance] [Conformance]": "should be consumable from pods in volume with defaultMode set [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Secrets should be consumable from pods in volume with mappings [NodeConformance] [Conformance]": "should be consumable from pods in volume with mappings [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Secrets should be consumable from pods in volume with mappings and Item Mode set [LinuxOnly] [NodeConformance] [Conformance]": "should be consumable from pods in volume with mappings and Item Mode set [LinuxOnly] [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Secrets should be consumable in multiple volumes in a pod [NodeConformance] [Conformance]": "should be consumable in multiple volumes in a pod [NodeConformance] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Secrets should be immutable if `immutable` field is set": "should be immutable if `immutable` field is set [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Storage Policy Based Volume Provisioning [Feature:vsphere] verify VSAN storage capability with invalid capability name objectSpaceReserve is not honored for dynamically provisioned pvc using storageclass": "verify VSAN storage capability with invalid capability name objectSpaceReserve is not honored for dynamically provisioned pvc using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Storage Policy Based Volume Provisioning [Feature:vsphere] verify VSAN storage capability with invalid diskStripes value is not honored for dynamically provisioned pvc using storageclass": "verify VSAN storage capability with invalid diskStripes value is not honored for dynamically provisioned pvc using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Storage Policy Based Volume Provisioning [Feature:vsphere] verify VSAN storage capability with invalid hostFailuresToTolerate value is not honored for dynamically provisioned pvc using storageclass": "verify VSAN storage capability with invalid hostFailuresToTolerate value is not honored for dynamically provisioned pvc using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Storage Policy Based Volume Provisioning [Feature:vsphere] verify VSAN storage capability with non-vsan datastore is not honored for dynamically provisioned pvc using storageclass": "verify VSAN storage capability with non-vsan datastore is not honored for dynamically provisioned pvc using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Storage Policy Based Volume Provisioning [Feature:vsphere] verify VSAN storage capability with valid diskStripes and objectSpaceReservation values and a VSAN datastore is honored for dynamically provisioned pvc using storageclass": "verify VSAN storage capability with valid diskStripes and objectSpaceReservation values and a VSAN datastore is honored for dynamically provisioned pvc using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Storage Policy Based Volume Provisioning [Feature:vsphere] verify VSAN storage capability with valid diskStripes and objectSpaceReservation values is honored for dynamically provisioned pvc using storageclass": "verify VSAN storage capability with valid diskStripes and objectSpaceReservation values is honored for dynamically provisioned pvc using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Storage Policy Based Volume Provisioning [Feature:vsphere] verify VSAN storage capability with valid hostFailuresToTolerate and cacheReservation values is honored for dynamically provisioned pvc using storageclass": "verify VSAN storage capability with valid hostFailuresToTolerate and cacheReservation values is honored for dynamically provisioned pvc using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Storage Policy Based Volume Provisioning [Feature:vsphere] verify VSAN storage capability with valid objectSpaceReservation and iopsLimit values is honored for dynamically provisioned pvc using storageclass": "verify VSAN storage capability with valid objectSpaceReservation and iopsLimit values is honored for dynamically provisioned pvc using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Storage Policy Based Volume Provisioning [Feature:vsphere] verify an existing and compatible SPBM policy is honored for dynamically provisioned pvc using storageclass": "verify an existing and compatible SPBM policy is honored for dynamically provisioned pvc using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Storage Policy Based Volume Provisioning [Feature:vsphere] verify an if a SPBM policy and VSAN capabilities cannot be honored for dynamically provisioned pvc using storageclass": "verify an if a SPBM policy and VSAN capabilities cannot be honored for dynamically provisioned pvc using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Storage Policy Based Volume Provisioning [Feature:vsphere] verify clean up of stale dummy VM for dynamically provisioned pvc using SPBM policy": "verify clean up of stale dummy VM for dynamically provisioned pvc using SPBM policy [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Storage Policy Based Volume Provisioning [Feature:vsphere] verify if a SPBM policy is not honored on a non-compatible datastore for dynamically provisioned pvc using storageclass": "verify if a SPBM policy is not honored on a non-compatible datastore for dynamically provisioned pvc using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Storage Policy Based Volume Provisioning [Feature:vsphere] verify if a non-existing SPBM policy is not honored for dynamically provisioned pvc using storageclass": "verify if a non-existing SPBM policy is not honored for dynamically provisioned pvc using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Subpath Atomic writer volumes should support subpaths with configmap pod [LinuxOnly] [Conformance]": "should support subpaths with configmap pod [LinuxOnly] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Subpath Atomic writer volumes should support subpaths with configmap pod with mountPath of existing file [LinuxOnly] [Conformance]": "should support subpaths with configmap pod with mountPath of existing file [LinuxOnly] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Subpath Atomic writer volumes should support subpaths with downward pod [LinuxOnly] [Conformance]": "should support subpaths with downward pod [LinuxOnly] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Subpath Atomic writer volumes should support subpaths with projected pod [LinuxOnly] [Conformance]": "should support subpaths with projected pod [LinuxOnly] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Subpath Atomic writer volumes should support subpaths with secret pod [LinuxOnly] [Conformance]": "should support subpaths with secret pod [LinuxOnly] [Conformance] [Suite:openshift/conformance/parallel/minimal] [Suite:k8s]", + + "[Top Level] [sig-storage] Subpath Container restart should verify that container can restart successfully after configmaps modified": "should verify that container can restart successfully after configmaps modified [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Verify Volume Attach Through vpxd Restart [Feature:vsphere][Serial][Disruptive] verify volume remains attached through vpxd restart": "verify volume remains attached through vpxd restart [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Attach Verify [Feature:vsphere][Serial][Disruptive] verify volume remains attached after master kubelet restart": "verify volume remains attached after master kubelet restart [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Disk Format [Feature:vsphere] verify disk format type - eagerzeroedthick is honored for dynamically provisioned pv using storageclass": "verify disk format type - eagerzeroedthick is honored for dynamically provisioned pv using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Disk Format [Feature:vsphere] verify disk format type - thin is honored for dynamically provisioned pv using storageclass": "verify disk format type - thin is honored for dynamically provisioned pv using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Disk Format [Feature:vsphere] verify disk format type - zeroedthick is honored for dynamically provisioned pv using storageclass": "verify disk format type - zeroedthick is honored for dynamically provisioned pv using storageclass [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Disk Size [Feature:vsphere] verify dynamically provisioned pv has size rounded up correctly": "verify dynamically provisioned pv has size rounded up correctly [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume FStype [Feature:vsphere] verify fstype - default value should be ext4": "verify fstype - default value should be ext4 [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume FStype [Feature:vsphere] verify fstype - ext3 formatted volume": "verify fstype - ext3 formatted volume [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume FStype [Feature:vsphere] verify invalid fstype": "verify invalid fstype [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Operations Storm [Feature:vsphere] should create pod with many volumes and verify no attach call fails": "should create pod with many volumes and verify no attach call fails [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Placement [Feature:vsphere] should create and delete pod with multiple volumes from different datastore": "should create and delete pod with multiple volumes from different datastore [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Placement [Feature:vsphere] should create and delete pod with multiple volumes from same datastore": "should create and delete pod with multiple volumes from same datastore [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Placement [Feature:vsphere] should create and delete pod with the same volume source attach/detach to different worker nodes": "should create and delete pod with the same volume source attach/detach to different worker nodes [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Placement [Feature:vsphere] should create and delete pod with the same volume source on the same worker node": "should create and delete pod with the same volume source on the same worker node [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Placement [Feature:vsphere] test back to back pod creation and deletion with different volume sources on the same worker node": "test back to back pod creation and deletion with different volume sources on the same worker node [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Provisioning On Clustered Datastore [Feature:vsphere] verify dynamic provision with default parameter on clustered datastore": "verify dynamic provision with default parameter on clustered datastore [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Provisioning On Clustered Datastore [Feature:vsphere] verify dynamic provision with spbm policy on clustered datastore": "verify dynamic provision with spbm policy on clustered datastore [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Provisioning On Clustered Datastore [Feature:vsphere] verify static provisioning on clustered datastore": "verify static provisioning on clustered datastore [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume Provisioning on Datastore [Feature:vsphere] verify dynamically provisioned pv using storageclass fails on an invalid datastore": "verify dynamically provisioned pv using storageclass fails on an invalid datastore [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volume limits should verify that all nodes have volume limits": "should verify that all nodes have volume limits [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Volumes ConfigMap should be mountable": "should be mountable [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify PVC creation fails if no zones are specified in the storage class (No shared datastores exist among all the nodes)": "Verify PVC creation fails if no zones are specified in the storage class (No shared datastores exist among all the nodes) [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify PVC creation fails if only datastore is specified in the storage class (No shared datastores exist among all the nodes)": "Verify PVC creation fails if only datastore is specified in the storage class (No shared datastores exist among all the nodes) [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify PVC creation fails if only storage policy is specified in the storage class (No shared datastores exist among all the nodes)": "Verify PVC creation fails if only storage policy is specified in the storage class (No shared datastores exist among all the nodes) [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify PVC creation fails if the availability zone specified in the storage class have no shared datastores under it.": "Verify PVC creation fails if the availability zone specified in the storage class have no shared datastores under it. [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify PVC creation with an invalid VSAN capability along with a compatible zone combination specified in storage class fails": "Verify PVC creation with an invalid VSAN capability along with a compatible zone combination specified in storage class fails [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify PVC creation with compatible policy and datastore without any zones specified in the storage class fails (No shared datastores exist among all the nodes)": "Verify PVC creation with compatible policy and datastore without any zones specified in the storage class fails (No shared datastores exist among all the nodes) [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify PVC creation with incompatible datastore and zone combination specified in storage class fails": "Verify PVC creation with incompatible datastore and zone combination specified in storage class fails [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify PVC creation with incompatible storage policy along with compatible zone and datastore combination specified in storage class fails": "Verify PVC creation with incompatible storage policy along with compatible zone and datastore combination specified in storage class fails [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify PVC creation with incompatible storagePolicy and zone combination specified in storage class fails": "Verify PVC creation with incompatible storagePolicy and zone combination specified in storage class fails [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify PVC creation with incompatible zone along with compatible storagePolicy and datastore combination specified in storage class fails": "Verify PVC creation with incompatible zone along with compatible storagePolicy and datastore combination specified in storage class fails [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify PVC creation with invalid zone specified in storage class fails": "Verify PVC creation with invalid zone specified in storage class fails [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a PVC creation fails when multiple zones are specified in the storage class without shared datastores among the zones in waitForFirstConsumer binding mode": "Verify a PVC creation fails when multiple zones are specified in the storage class without shared datastores among the zones in waitForFirstConsumer binding mode [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a pod fails to get scheduled when conflicting volume topology (allowedTopologies) and pod scheduling constraints(nodeSelector) are specified": "Verify a pod fails to get scheduled when conflicting volume topology (allowedTopologies) and pod scheduling constraints(nodeSelector) are specified [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a pod is created and attached to a dynamically created PV with storage policy specified in storage class in waitForFirstConsumer binding mode with allowedTopologies": "Verify a pod is created and attached to a dynamically created PV with storage policy specified in storage class in waitForFirstConsumer binding mode with allowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a pod is created and attached to a dynamically created PV with storage policy specified in storage class in waitForFirstConsumer binding mode with multiple allowedTopologies": "Verify a pod is created and attached to a dynamically created PV with storage policy specified in storage class in waitForFirstConsumer binding mode with multiple allowedTopologies [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a pod is created and attached to a dynamically created PV with storage policy specified in storage class in waitForFirstConsumer binding mode": "Verify a pod is created and attached to a dynamically created PV with storage policy specified in storage class in waitForFirstConsumer binding mode [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a pod is created and attached to a dynamically created PV, based on a VSAN capability, datastore and compatible zone specified in storage class": "Verify a pod is created and attached to a dynamically created PV, based on a VSAN capability, datastore and compatible zone specified in storage class [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a pod is created and attached to a dynamically created PV, based on allowed zones specified in storage class ": "Verify a pod is created and attached to a dynamically created PV, based on allowed zones specified in storage class [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a pod is created and attached to a dynamically created PV, based on multiple zones specified in storage class ": "Verify a pod is created and attached to a dynamically created PV, based on multiple zones specified in storage class [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a pod is created and attached to a dynamically created PV, based on multiple zones specified in the storage class. (No shared datastores exist among both zones)": "Verify a pod is created and attached to a dynamically created PV, based on multiple zones specified in the storage class. (No shared datastores exist among both zones) [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a pod is created and attached to a dynamically created PV, based on the allowed zones and datastore specified in storage class when there are multiple datastores with the same name under different zones across datacenters": "Verify a pod is created and attached to a dynamically created PV, based on the allowed zones and datastore specified in storage class when there are multiple datastores with the same name under different zones across datacenters [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a pod is created and attached to a dynamically created PV, based on the allowed zones and datastore specified in storage class": "Verify a pod is created and attached to a dynamically created PV, based on the allowed zones and datastore specified in storage class [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a pod is created and attached to a dynamically created PV, based on the allowed zones and storage policy specified in storage class": "Verify a pod is created and attached to a dynamically created PV, based on the allowed zones and storage policy specified in storage class [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a pod is created and attached to a dynamically created PV, based on the allowed zones specified in storage class when the datastore under the zone is present in another datacenter": "Verify a pod is created and attached to a dynamically created PV, based on the allowed zones specified in storage class when the datastore under the zone is present in another datacenter [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a pod is created and attached to a dynamically created PV, based on the allowed zones, datastore and storage policy specified in storage class": "Verify a pod is created and attached to a dynamically created PV, based on the allowed zones, datastore and storage policy specified in storage class [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify a pod is created on a non-Workspace zone and attached to a dynamically created PV, based on the allowed zones and storage policy specified in storage class": "Verify a pod is created on a non-Workspace zone and attached to a dynamically created PV, based on the allowed zones and storage policy specified in storage class [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify dynamically created pv with allowed zones specified in storage class, shows the right zone information on its labels": "Verify dynamically created pv with allowed zones specified in storage class, shows the right zone information on its labels [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] Zone Support [Feature:vsphere] Verify dynamically created pv with multiple zones specified in the storage class, shows both the zones on its labels": "Verify dynamically created pv with multiple zones specified in the storage class, shows both the zones on its labels [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] [Feature:Flexvolumes] Detaching volumes should not work when mount is in progress [Slow]": "should not work when mount is in progress [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] [Feature:Flexvolumes] Mounted flexvolume expand[Slow] Should verify mounted flex volumes can be resized": "Should verify mounted flex volumes can be resized [Suite:k8s]", + + "[Top Level] [sig-storage] [Serial] Volume metrics PVController should create bound pv/pvc count metrics for pvc controller after creating both pv and pvc": "should create bound pv/pvc count metrics for pvc controller after creating both pv and pvc [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] [Serial] Volume metrics PVController should create none metrics for pvc controller before creating any PV or PVC": "should create none metrics for pvc controller before creating any PV or PVC [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] [Serial] Volume metrics PVController should create unbound pv count metrics for pvc controller after creating pv only": "should create unbound pv count metrics for pvc controller after creating pv only [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] [Serial] Volume metrics PVController should create unbound pvc count metrics for pvc controller after creating pvc only": "should create unbound pvc count metrics for pvc controller after creating pvc only [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] [Serial] Volume metrics should create metrics for total number of volumes in A/D Controller": "should create metrics for total number of volumes in A/D Controller [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] [Serial] Volume metrics should create metrics for total time taken in volume operations in P/V Controller": "should create metrics for total time taken in volume operations in P/V Controller [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] [Serial] Volume metrics should create prometheus metrics for volume provisioning and attach/detach": "should create prometheus metrics for volume provisioning and attach/detach [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] [Serial] Volume metrics should create prometheus metrics for volume provisioning errors [Slow]": "should create prometheus metrics for volume provisioning errors [Slow] [Suite:k8s]", + + "[Top Level] [sig-storage] [Serial] Volume metrics should create volume metrics in Volume Manager": "should create volume metrics in Volume Manager [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] [Serial] Volume metrics should create volume metrics with the correct PVC ref": "should create volume metrics with the correct PVC ref [Suite:openshift/conformance/serial] [Suite:k8s]", + + "[Top Level] [sig-storage] vcp at scale [Feature:vsphere] vsphere scale tests": "vsphere scale tests [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] vcp-performance [Feature:vsphere] vcp performance tests": "vcp performance tests [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] vsphere cloud provider stress [Feature:vsphere] vsphere stress tests": "vsphere stress tests [Suite:openshift/conformance/parallel] [Suite:k8s]", + + "[Top Level] [sig-storage] vsphere statefulset [Feature:vsphere] vsphere statefulset testing": "vsphere statefulset testing [Suite:openshift/conformance/parallel] [Suite:k8s]", +} + +func init() { + ginkgo.WalkTests(func(name, parentName string, node types.TestNode) { + combined := name + if len(parentName) > 0 { + combined = parentName + " " + combined + } + if updated, ok := annotations[combined]; ok { + node.SetText(updated) + } else { + panic(fmt.Sprintf("unable to find test %s", combined)) + } + }) +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.conversion.go b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.conversion.go new file mode 100644 index 0000000000000..f8ca2c657e34d --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.conversion.go @@ -0,0 +1,71 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +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. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1 + +import ( + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + clusterresourceoverride "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*ClusterResourceOverrideConfig)(nil), (*clusterresourceoverride.ClusterResourceOverrideConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_ClusterResourceOverrideConfig_To_clusterresourceoverride_ClusterResourceOverrideConfig(a.(*ClusterResourceOverrideConfig), b.(*clusterresourceoverride.ClusterResourceOverrideConfig), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*clusterresourceoverride.ClusterResourceOverrideConfig)(nil), (*ClusterResourceOverrideConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_clusterresourceoverride_ClusterResourceOverrideConfig_To_v1_ClusterResourceOverrideConfig(a.(*clusterresourceoverride.ClusterResourceOverrideConfig), b.(*ClusterResourceOverrideConfig), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1_ClusterResourceOverrideConfig_To_clusterresourceoverride_ClusterResourceOverrideConfig(in *ClusterResourceOverrideConfig, out *clusterresourceoverride.ClusterResourceOverrideConfig, s conversion.Scope) error { + out.LimitCPUToMemoryPercent = in.LimitCPUToMemoryPercent + out.CPURequestToLimitPercent = in.CPURequestToLimitPercent + out.MemoryRequestToLimitPercent = in.MemoryRequestToLimitPercent + return nil +} + +// Convert_v1_ClusterResourceOverrideConfig_To_clusterresourceoverride_ClusterResourceOverrideConfig is an autogenerated conversion function. +func Convert_v1_ClusterResourceOverrideConfig_To_clusterresourceoverride_ClusterResourceOverrideConfig(in *ClusterResourceOverrideConfig, out *clusterresourceoverride.ClusterResourceOverrideConfig, s conversion.Scope) error { + return autoConvert_v1_ClusterResourceOverrideConfig_To_clusterresourceoverride_ClusterResourceOverrideConfig(in, out, s) +} + +func autoConvert_clusterresourceoverride_ClusterResourceOverrideConfig_To_v1_ClusterResourceOverrideConfig(in *clusterresourceoverride.ClusterResourceOverrideConfig, out *ClusterResourceOverrideConfig, s conversion.Scope) error { + out.LimitCPUToMemoryPercent = in.LimitCPUToMemoryPercent + out.CPURequestToLimitPercent = in.CPURequestToLimitPercent + out.MemoryRequestToLimitPercent = in.MemoryRequestToLimitPercent + return nil +} + +// Convert_clusterresourceoverride_ClusterResourceOverrideConfig_To_v1_ClusterResourceOverrideConfig is an autogenerated conversion function. +func Convert_clusterresourceoverride_ClusterResourceOverrideConfig_To_v1_ClusterResourceOverrideConfig(in *clusterresourceoverride.ClusterResourceOverrideConfig, out *ClusterResourceOverrideConfig, s conversion.Scope) error { + return autoConvert_clusterresourceoverride_ClusterResourceOverrideConfig_To_v1_ClusterResourceOverrideConfig(in, out, s) +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.deepcopy.go index 14255bad29a36..e609027ea9ce3 100644 --- a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.deepcopy.go +++ b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.deepcopy.go @@ -1,5 +1,21 @@ // +build !ignore_autogenerated +/* +Copyright The Kubernetes Authors. + +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. +*/ + // Code generated by deepcopy-gen. DO NOT EDIT. package v1 diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/zz_generated.deepcopy.go index 09414272c2210..d2e3345945004 100644 --- a/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/zz_generated.deepcopy.go +++ b/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/zz_generated.deepcopy.go @@ -1,5 +1,21 @@ // +build !ignore_autogenerated +/* +Copyright The Kubernetes Authors. + +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. +*/ + // Code generated by deepcopy-gen. DO NOT EDIT. package clusterresourceoverride diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.conversion.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.conversion.go new file mode 100644 index 0000000000000..c2d65e81b521b --- /dev/null +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.conversion.go @@ -0,0 +1,69 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +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. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1 + +import ( + unsafe "unsafe" + + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + runonceduration "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*RunOnceDurationConfig)(nil), (*runonceduration.RunOnceDurationConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_RunOnceDurationConfig_To_runonceduration_RunOnceDurationConfig(a.(*RunOnceDurationConfig), b.(*runonceduration.RunOnceDurationConfig), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*runonceduration.RunOnceDurationConfig)(nil), (*RunOnceDurationConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_runonceduration_RunOnceDurationConfig_To_v1_RunOnceDurationConfig(a.(*runonceduration.RunOnceDurationConfig), b.(*RunOnceDurationConfig), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1_RunOnceDurationConfig_To_runonceduration_RunOnceDurationConfig(in *RunOnceDurationConfig, out *runonceduration.RunOnceDurationConfig, s conversion.Scope) error { + out.ActiveDeadlineSecondsOverride = (*int64)(unsafe.Pointer(in.ActiveDeadlineSecondsOverride)) + return nil +} + +// Convert_v1_RunOnceDurationConfig_To_runonceduration_RunOnceDurationConfig is an autogenerated conversion function. +func Convert_v1_RunOnceDurationConfig_To_runonceduration_RunOnceDurationConfig(in *RunOnceDurationConfig, out *runonceduration.RunOnceDurationConfig, s conversion.Scope) error { + return autoConvert_v1_RunOnceDurationConfig_To_runonceduration_RunOnceDurationConfig(in, out, s) +} + +func autoConvert_runonceduration_RunOnceDurationConfig_To_v1_RunOnceDurationConfig(in *runonceduration.RunOnceDurationConfig, out *RunOnceDurationConfig, s conversion.Scope) error { + out.ActiveDeadlineSecondsOverride = (*int64)(unsafe.Pointer(in.ActiveDeadlineSecondsOverride)) + return nil +} + +// Convert_runonceduration_RunOnceDurationConfig_To_v1_RunOnceDurationConfig is an autogenerated conversion function. +func Convert_runonceduration_RunOnceDurationConfig_To_v1_RunOnceDurationConfig(in *runonceduration.RunOnceDurationConfig, out *RunOnceDurationConfig, s conversion.Scope) error { + return autoConvert_runonceduration_RunOnceDurationConfig_To_v1_RunOnceDurationConfig(in, out, s) +} diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.deepcopy.go index 3000ba62bd174..ff4c0295065c0 100644 --- a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.deepcopy.go +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.deepcopy.go @@ -1,5 +1,21 @@ // +build !ignore_autogenerated +/* +Copyright The Kubernetes Authors. + +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. +*/ + // Code generated by deepcopy-gen. DO NOT EDIT. package v1 diff --git a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/zz_generated.deepcopy.go index b87ed7a25b492..e2e9680e82357 100644 --- a/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/zz_generated.deepcopy.go +++ b/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/zz_generated.deepcopy.go @@ -1,5 +1,21 @@ // +build !ignore_autogenerated +/* +Copyright The Kubernetes Authors. + +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. +*/ + // Code generated by deepcopy-gen. DO NOT EDIT. package runonceduration diff --git a/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/zz_generated.conversion.go b/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/zz_generated.conversion.go new file mode 100644 index 0000000000000..8ec11178435ca --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/zz_generated.conversion.go @@ -0,0 +1,71 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +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. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1 + +import ( + unsafe "unsafe" + + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + externalipranger "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*ExternalIPRangerAdmissionConfig)(nil), (*externalipranger.ExternalIPRangerAdmissionConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_ExternalIPRangerAdmissionConfig_To_externalipranger_ExternalIPRangerAdmissionConfig(a.(*ExternalIPRangerAdmissionConfig), b.(*externalipranger.ExternalIPRangerAdmissionConfig), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*externalipranger.ExternalIPRangerAdmissionConfig)(nil), (*ExternalIPRangerAdmissionConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_externalipranger_ExternalIPRangerAdmissionConfig_To_v1_ExternalIPRangerAdmissionConfig(a.(*externalipranger.ExternalIPRangerAdmissionConfig), b.(*ExternalIPRangerAdmissionConfig), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1_ExternalIPRangerAdmissionConfig_To_externalipranger_ExternalIPRangerAdmissionConfig(in *ExternalIPRangerAdmissionConfig, out *externalipranger.ExternalIPRangerAdmissionConfig, s conversion.Scope) error { + out.ExternalIPNetworkCIDRs = *(*[]string)(unsafe.Pointer(&in.ExternalIPNetworkCIDRs)) + out.AllowIngressIP = in.AllowIngressIP + return nil +} + +// Convert_v1_ExternalIPRangerAdmissionConfig_To_externalipranger_ExternalIPRangerAdmissionConfig is an autogenerated conversion function. +func Convert_v1_ExternalIPRangerAdmissionConfig_To_externalipranger_ExternalIPRangerAdmissionConfig(in *ExternalIPRangerAdmissionConfig, out *externalipranger.ExternalIPRangerAdmissionConfig, s conversion.Scope) error { + return autoConvert_v1_ExternalIPRangerAdmissionConfig_To_externalipranger_ExternalIPRangerAdmissionConfig(in, out, s) +} + +func autoConvert_externalipranger_ExternalIPRangerAdmissionConfig_To_v1_ExternalIPRangerAdmissionConfig(in *externalipranger.ExternalIPRangerAdmissionConfig, out *ExternalIPRangerAdmissionConfig, s conversion.Scope) error { + out.ExternalIPNetworkCIDRs = *(*[]string)(unsafe.Pointer(&in.ExternalIPNetworkCIDRs)) + out.AllowIngressIP = in.AllowIngressIP + return nil +} + +// Convert_externalipranger_ExternalIPRangerAdmissionConfig_To_v1_ExternalIPRangerAdmissionConfig is an autogenerated conversion function. +func Convert_externalipranger_ExternalIPRangerAdmissionConfig_To_v1_ExternalIPRangerAdmissionConfig(in *externalipranger.ExternalIPRangerAdmissionConfig, out *ExternalIPRangerAdmissionConfig, s conversion.Scope) error { + return autoConvert_externalipranger_ExternalIPRangerAdmissionConfig_To_v1_ExternalIPRangerAdmissionConfig(in, out, s) +} diff --git a/openshift-kube-apiserver/admission/network/apis/externalipranger/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/network/apis/externalipranger/zz_generated.deepcopy.go index 8437974962071..55601d78cf56c 100644 --- a/openshift-kube-apiserver/admission/network/apis/externalipranger/zz_generated.deepcopy.go +++ b/openshift-kube-apiserver/admission/network/apis/externalipranger/zz_generated.deepcopy.go @@ -1,5 +1,21 @@ // +build !ignore_autogenerated +/* +Copyright The Kubernetes Authors. + +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. +*/ + // Code generated by deepcopy-gen. DO NOT EDIT. package externalipranger diff --git a/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.conversion.go b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.conversion.go new file mode 100644 index 0000000000000..413965b8ee704 --- /dev/null +++ b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.conversion.go @@ -0,0 +1,69 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +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. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1 + +import ( + unsafe "unsafe" + + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + restrictedendpoints "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*RestrictedEndpointsAdmissionConfig)(nil), (*restrictedendpoints.RestrictedEndpointsAdmissionConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_RestrictedEndpointsAdmissionConfig_To_restrictedendpoints_RestrictedEndpointsAdmissionConfig(a.(*RestrictedEndpointsAdmissionConfig), b.(*restrictedendpoints.RestrictedEndpointsAdmissionConfig), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*restrictedendpoints.RestrictedEndpointsAdmissionConfig)(nil), (*RestrictedEndpointsAdmissionConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_restrictedendpoints_RestrictedEndpointsAdmissionConfig_To_v1_RestrictedEndpointsAdmissionConfig(a.(*restrictedendpoints.RestrictedEndpointsAdmissionConfig), b.(*RestrictedEndpointsAdmissionConfig), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1_RestrictedEndpointsAdmissionConfig_To_restrictedendpoints_RestrictedEndpointsAdmissionConfig(in *RestrictedEndpointsAdmissionConfig, out *restrictedendpoints.RestrictedEndpointsAdmissionConfig, s conversion.Scope) error { + out.RestrictedCIDRs = *(*[]string)(unsafe.Pointer(&in.RestrictedCIDRs)) + return nil +} + +// Convert_v1_RestrictedEndpointsAdmissionConfig_To_restrictedendpoints_RestrictedEndpointsAdmissionConfig is an autogenerated conversion function. +func Convert_v1_RestrictedEndpointsAdmissionConfig_To_restrictedendpoints_RestrictedEndpointsAdmissionConfig(in *RestrictedEndpointsAdmissionConfig, out *restrictedendpoints.RestrictedEndpointsAdmissionConfig, s conversion.Scope) error { + return autoConvert_v1_RestrictedEndpointsAdmissionConfig_To_restrictedendpoints_RestrictedEndpointsAdmissionConfig(in, out, s) +} + +func autoConvert_restrictedendpoints_RestrictedEndpointsAdmissionConfig_To_v1_RestrictedEndpointsAdmissionConfig(in *restrictedendpoints.RestrictedEndpointsAdmissionConfig, out *RestrictedEndpointsAdmissionConfig, s conversion.Scope) error { + out.RestrictedCIDRs = *(*[]string)(unsafe.Pointer(&in.RestrictedCIDRs)) + return nil +} + +// Convert_restrictedendpoints_RestrictedEndpointsAdmissionConfig_To_v1_RestrictedEndpointsAdmissionConfig is an autogenerated conversion function. +func Convert_restrictedendpoints_RestrictedEndpointsAdmissionConfig_To_v1_RestrictedEndpointsAdmissionConfig(in *restrictedendpoints.RestrictedEndpointsAdmissionConfig, out *RestrictedEndpointsAdmissionConfig, s conversion.Scope) error { + return autoConvert_restrictedendpoints_RestrictedEndpointsAdmissionConfig_To_v1_RestrictedEndpointsAdmissionConfig(in, out, s) +} diff --git a/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.deepcopy.go index e9597be6b05da..d63f90426e6f9 100644 --- a/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.deepcopy.go +++ b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.deepcopy.go @@ -1,5 +1,21 @@ // +build !ignore_autogenerated +/* +Copyright The Kubernetes Authors. + +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. +*/ + // Code generated by deepcopy-gen. DO NOT EDIT. package v1 diff --git a/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/zz_generated.deepcopy.go index 0a00cc4bc8da4..f6e62a3e11b7f 100644 --- a/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/zz_generated.deepcopy.go +++ b/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/zz_generated.deepcopy.go @@ -1,5 +1,21 @@ // +build !ignore_autogenerated +/* +Copyright The Kubernetes Authors. + +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. +*/ + // Code generated by deepcopy-gen. DO NOT EDIT. package restrictedendpoints diff --git a/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.conversion.go b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.conversion.go new file mode 100644 index 0000000000000..1a4fd21ec0e01 --- /dev/null +++ b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.conversion.go @@ -0,0 +1,67 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +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. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1 + +import ( + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + ingressadmission "k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*IngressAdmissionConfig)(nil), (*ingressadmission.IngressAdmissionConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_IngressAdmissionConfig_To_ingressadmission_IngressAdmissionConfig(a.(*IngressAdmissionConfig), b.(*ingressadmission.IngressAdmissionConfig), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*ingressadmission.IngressAdmissionConfig)(nil), (*IngressAdmissionConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_ingressadmission_IngressAdmissionConfig_To_v1_IngressAdmissionConfig(a.(*ingressadmission.IngressAdmissionConfig), b.(*IngressAdmissionConfig), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1_IngressAdmissionConfig_To_ingressadmission_IngressAdmissionConfig(in *IngressAdmissionConfig, out *ingressadmission.IngressAdmissionConfig, s conversion.Scope) error { + out.AllowHostnameChanges = in.AllowHostnameChanges + return nil +} + +// Convert_v1_IngressAdmissionConfig_To_ingressadmission_IngressAdmissionConfig is an autogenerated conversion function. +func Convert_v1_IngressAdmissionConfig_To_ingressadmission_IngressAdmissionConfig(in *IngressAdmissionConfig, out *ingressadmission.IngressAdmissionConfig, s conversion.Scope) error { + return autoConvert_v1_IngressAdmissionConfig_To_ingressadmission_IngressAdmissionConfig(in, out, s) +} + +func autoConvert_ingressadmission_IngressAdmissionConfig_To_v1_IngressAdmissionConfig(in *ingressadmission.IngressAdmissionConfig, out *IngressAdmissionConfig, s conversion.Scope) error { + out.AllowHostnameChanges = in.AllowHostnameChanges + return nil +} + +// Convert_ingressadmission_IngressAdmissionConfig_To_v1_IngressAdmissionConfig is an autogenerated conversion function. +func Convert_ingressadmission_IngressAdmissionConfig_To_v1_IngressAdmissionConfig(in *ingressadmission.IngressAdmissionConfig, out *IngressAdmissionConfig, s conversion.Scope) error { + return autoConvert_ingressadmission_IngressAdmissionConfig_To_v1_IngressAdmissionConfig(in, out, s) +} diff --git a/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.deepcopy.go index ba0f8a528c380..e59ff458868b3 100644 --- a/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.deepcopy.go +++ b/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.deepcopy.go @@ -1,5 +1,21 @@ // +build !ignore_autogenerated +/* +Copyright The Kubernetes Authors. + +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. +*/ + // Code generated by deepcopy-gen. DO NOT EDIT. package v1 diff --git a/openshift-kube-apiserver/admission/route/apis/ingressadmission/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/route/apis/ingressadmission/zz_generated.deepcopy.go index e75a7b7a07f22..159314a6901ea 100644 --- a/openshift-kube-apiserver/admission/route/apis/ingressadmission/zz_generated.deepcopy.go +++ b/openshift-kube-apiserver/admission/route/apis/ingressadmission/zz_generated.deepcopy.go @@ -1,5 +1,21 @@ // +build !ignore_autogenerated +/* +Copyright The Kubernetes Authors. + +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. +*/ + // Code generated by deepcopy-gen. DO NOT EDIT. package ingressadmission diff --git a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.conversion.go b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.conversion.go new file mode 100644 index 0000000000000..6a13d569f2ea5 --- /dev/null +++ b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.conversion.go @@ -0,0 +1,69 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +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. +*/ + +// Code generated by conversion-gen. DO NOT EDIT. + +package v1 + +import ( + unsafe "unsafe" + + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + podnodeconstraints "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints" +) + +func init() { + localSchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(s *runtime.Scheme) error { + if err := s.AddGeneratedConversionFunc((*PodNodeConstraintsConfig)(nil), (*podnodeconstraints.PodNodeConstraintsConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_PodNodeConstraintsConfig_To_podnodeconstraints_PodNodeConstraintsConfig(a.(*PodNodeConstraintsConfig), b.(*podnodeconstraints.PodNodeConstraintsConfig), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*podnodeconstraints.PodNodeConstraintsConfig)(nil), (*PodNodeConstraintsConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_podnodeconstraints_PodNodeConstraintsConfig_To_v1_PodNodeConstraintsConfig(a.(*podnodeconstraints.PodNodeConstraintsConfig), b.(*PodNodeConstraintsConfig), scope) + }); err != nil { + return err + } + return nil +} + +func autoConvert_v1_PodNodeConstraintsConfig_To_podnodeconstraints_PodNodeConstraintsConfig(in *PodNodeConstraintsConfig, out *podnodeconstraints.PodNodeConstraintsConfig, s conversion.Scope) error { + out.NodeSelectorLabelBlacklist = *(*[]string)(unsafe.Pointer(&in.NodeSelectorLabelBlacklist)) + return nil +} + +// Convert_v1_PodNodeConstraintsConfig_To_podnodeconstraints_PodNodeConstraintsConfig is an autogenerated conversion function. +func Convert_v1_PodNodeConstraintsConfig_To_podnodeconstraints_PodNodeConstraintsConfig(in *PodNodeConstraintsConfig, out *podnodeconstraints.PodNodeConstraintsConfig, s conversion.Scope) error { + return autoConvert_v1_PodNodeConstraintsConfig_To_podnodeconstraints_PodNodeConstraintsConfig(in, out, s) +} + +func autoConvert_podnodeconstraints_PodNodeConstraintsConfig_To_v1_PodNodeConstraintsConfig(in *podnodeconstraints.PodNodeConstraintsConfig, out *PodNodeConstraintsConfig, s conversion.Scope) error { + out.NodeSelectorLabelBlacklist = *(*[]string)(unsafe.Pointer(&in.NodeSelectorLabelBlacklist)) + return nil +} + +// Convert_podnodeconstraints_PodNodeConstraintsConfig_To_v1_PodNodeConstraintsConfig is an autogenerated conversion function. +func Convert_podnodeconstraints_PodNodeConstraintsConfig_To_v1_PodNodeConstraintsConfig(in *podnodeconstraints.PodNodeConstraintsConfig, out *PodNodeConstraintsConfig, s conversion.Scope) error { + return autoConvert_podnodeconstraints_PodNodeConstraintsConfig_To_v1_PodNodeConstraintsConfig(in, out, s) +} diff --git a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.deepcopy.go index 5d7b49dc20032..624cec3cceb09 100644 --- a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.deepcopy.go +++ b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.deepcopy.go @@ -1,5 +1,21 @@ // +build !ignore_autogenerated +/* +Copyright The Kubernetes Authors. + +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. +*/ + // Code generated by deepcopy-gen. DO NOT EDIT. package v1 diff --git a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/zz_generated.deepcopy.go b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/zz_generated.deepcopy.go index 46ccf9f25bd18..e8f45f4e9b281 100644 --- a/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/zz_generated.deepcopy.go +++ b/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/zz_generated.deepcopy.go @@ -1,5 +1,21 @@ // +build !ignore_autogenerated +/* +Copyright The Kubernetes Authors. + +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. +*/ + // Code generated by deepcopy-gen. DO NOT EDIT. package podnodeconstraints diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go new file mode 100644 index 0000000000000..1390fc99b64c9 --- /dev/null +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -0,0 +1,47248 @@ +// +build !ignore_autogenerated + +/* +Copyright The Kubernetes Authors. + +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. +*/ + +// Code generated by openapi-gen. DO NOT EDIT. + +// This file was autogenerated by openapi-gen. Do not edit it manually! + +package openapi + +import ( + spec "github.com/go-openapi/spec" + v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + v1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + resource "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + intstr "k8s.io/apimachinery/pkg/util/intstr" + common "k8s.io/kube-openapi/pkg/common" +) + +func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition { + return map[string]common.OpenAPIDefinition{ + "k8s.io/api/admissionregistration/v1.MutatingWebhook": schema_k8sio_api_admissionregistration_v1_MutatingWebhook(ref), + "k8s.io/api/admissionregistration/v1.MutatingWebhookConfiguration": schema_k8sio_api_admissionregistration_v1_MutatingWebhookConfiguration(ref), + "k8s.io/api/admissionregistration/v1.MutatingWebhookConfigurationList": schema_k8sio_api_admissionregistration_v1_MutatingWebhookConfigurationList(ref), + "k8s.io/api/admissionregistration/v1.Rule": schema_k8sio_api_admissionregistration_v1_Rule(ref), + "k8s.io/api/admissionregistration/v1.RuleWithOperations": schema_k8sio_api_admissionregistration_v1_RuleWithOperations(ref), + "k8s.io/api/admissionregistration/v1.ServiceReference": schema_k8sio_api_admissionregistration_v1_ServiceReference(ref), + "k8s.io/api/admissionregistration/v1.ValidatingWebhook": schema_k8sio_api_admissionregistration_v1_ValidatingWebhook(ref), + "k8s.io/api/admissionregistration/v1.ValidatingWebhookConfiguration": schema_k8sio_api_admissionregistration_v1_ValidatingWebhookConfiguration(ref), + "k8s.io/api/admissionregistration/v1.ValidatingWebhookConfigurationList": schema_k8sio_api_admissionregistration_v1_ValidatingWebhookConfigurationList(ref), + "k8s.io/api/admissionregistration/v1.WebhookClientConfig": schema_k8sio_api_admissionregistration_v1_WebhookClientConfig(ref), + "k8s.io/api/admissionregistration/v1beta1.MutatingWebhook": schema_k8sio_api_admissionregistration_v1beta1_MutatingWebhook(ref), + "k8s.io/api/admissionregistration/v1beta1.MutatingWebhookConfiguration": schema_k8sio_api_admissionregistration_v1beta1_MutatingWebhookConfiguration(ref), + "k8s.io/api/admissionregistration/v1beta1.MutatingWebhookConfigurationList": schema_k8sio_api_admissionregistration_v1beta1_MutatingWebhookConfigurationList(ref), + "k8s.io/api/admissionregistration/v1beta1.Rule": schema_k8sio_api_admissionregistration_v1beta1_Rule(ref), + "k8s.io/api/admissionregistration/v1beta1.RuleWithOperations": schema_k8sio_api_admissionregistration_v1beta1_RuleWithOperations(ref), + "k8s.io/api/admissionregistration/v1beta1.ServiceReference": schema_k8sio_api_admissionregistration_v1beta1_ServiceReference(ref), + "k8s.io/api/admissionregistration/v1beta1.ValidatingWebhook": schema_k8sio_api_admissionregistration_v1beta1_ValidatingWebhook(ref), + "k8s.io/api/admissionregistration/v1beta1.ValidatingWebhookConfiguration": schema_k8sio_api_admissionregistration_v1beta1_ValidatingWebhookConfiguration(ref), + "k8s.io/api/admissionregistration/v1beta1.ValidatingWebhookConfigurationList": schema_k8sio_api_admissionregistration_v1beta1_ValidatingWebhookConfigurationList(ref), + "k8s.io/api/admissionregistration/v1beta1.WebhookClientConfig": schema_k8sio_api_admissionregistration_v1beta1_WebhookClientConfig(ref), + "k8s.io/api/apps/v1.ControllerRevision": schema_k8sio_api_apps_v1_ControllerRevision(ref), + "k8s.io/api/apps/v1.ControllerRevisionList": schema_k8sio_api_apps_v1_ControllerRevisionList(ref), + "k8s.io/api/apps/v1.DaemonSet": schema_k8sio_api_apps_v1_DaemonSet(ref), + "k8s.io/api/apps/v1.DaemonSetCondition": schema_k8sio_api_apps_v1_DaemonSetCondition(ref), + "k8s.io/api/apps/v1.DaemonSetList": schema_k8sio_api_apps_v1_DaemonSetList(ref), + "k8s.io/api/apps/v1.DaemonSetSpec": schema_k8sio_api_apps_v1_DaemonSetSpec(ref), + "k8s.io/api/apps/v1.DaemonSetStatus": schema_k8sio_api_apps_v1_DaemonSetStatus(ref), + "k8s.io/api/apps/v1.DaemonSetUpdateStrategy": schema_k8sio_api_apps_v1_DaemonSetUpdateStrategy(ref), + "k8s.io/api/apps/v1.Deployment": schema_k8sio_api_apps_v1_Deployment(ref), + "k8s.io/api/apps/v1.DeploymentCondition": schema_k8sio_api_apps_v1_DeploymentCondition(ref), + "k8s.io/api/apps/v1.DeploymentList": schema_k8sio_api_apps_v1_DeploymentList(ref), + "k8s.io/api/apps/v1.DeploymentSpec": schema_k8sio_api_apps_v1_DeploymentSpec(ref), + "k8s.io/api/apps/v1.DeploymentStatus": schema_k8sio_api_apps_v1_DeploymentStatus(ref), + "k8s.io/api/apps/v1.DeploymentStrategy": schema_k8sio_api_apps_v1_DeploymentStrategy(ref), + "k8s.io/api/apps/v1.ReplicaSet": schema_k8sio_api_apps_v1_ReplicaSet(ref), + "k8s.io/api/apps/v1.ReplicaSetCondition": schema_k8sio_api_apps_v1_ReplicaSetCondition(ref), + "k8s.io/api/apps/v1.ReplicaSetList": schema_k8sio_api_apps_v1_ReplicaSetList(ref), + "k8s.io/api/apps/v1.ReplicaSetSpec": schema_k8sio_api_apps_v1_ReplicaSetSpec(ref), + "k8s.io/api/apps/v1.ReplicaSetStatus": schema_k8sio_api_apps_v1_ReplicaSetStatus(ref), + "k8s.io/api/apps/v1.RollingUpdateDaemonSet": schema_k8sio_api_apps_v1_RollingUpdateDaemonSet(ref), + "k8s.io/api/apps/v1.RollingUpdateDeployment": schema_k8sio_api_apps_v1_RollingUpdateDeployment(ref), + "k8s.io/api/apps/v1.RollingUpdateStatefulSetStrategy": schema_k8sio_api_apps_v1_RollingUpdateStatefulSetStrategy(ref), + "k8s.io/api/apps/v1.StatefulSet": schema_k8sio_api_apps_v1_StatefulSet(ref), + "k8s.io/api/apps/v1.StatefulSetCondition": schema_k8sio_api_apps_v1_StatefulSetCondition(ref), + "k8s.io/api/apps/v1.StatefulSetList": schema_k8sio_api_apps_v1_StatefulSetList(ref), + "k8s.io/api/apps/v1.StatefulSetSpec": schema_k8sio_api_apps_v1_StatefulSetSpec(ref), + "k8s.io/api/apps/v1.StatefulSetStatus": schema_k8sio_api_apps_v1_StatefulSetStatus(ref), + "k8s.io/api/apps/v1.StatefulSetUpdateStrategy": schema_k8sio_api_apps_v1_StatefulSetUpdateStrategy(ref), + "k8s.io/api/apps/v1beta1.ControllerRevision": schema_k8sio_api_apps_v1beta1_ControllerRevision(ref), + "k8s.io/api/apps/v1beta1.ControllerRevisionList": schema_k8sio_api_apps_v1beta1_ControllerRevisionList(ref), + "k8s.io/api/apps/v1beta1.Deployment": schema_k8sio_api_apps_v1beta1_Deployment(ref), + "k8s.io/api/apps/v1beta1.DeploymentCondition": schema_k8sio_api_apps_v1beta1_DeploymentCondition(ref), + "k8s.io/api/apps/v1beta1.DeploymentList": schema_k8sio_api_apps_v1beta1_DeploymentList(ref), + "k8s.io/api/apps/v1beta1.DeploymentRollback": schema_k8sio_api_apps_v1beta1_DeploymentRollback(ref), + "k8s.io/api/apps/v1beta1.DeploymentSpec": schema_k8sio_api_apps_v1beta1_DeploymentSpec(ref), + "k8s.io/api/apps/v1beta1.DeploymentStatus": schema_k8sio_api_apps_v1beta1_DeploymentStatus(ref), + "k8s.io/api/apps/v1beta1.DeploymentStrategy": schema_k8sio_api_apps_v1beta1_DeploymentStrategy(ref), + "k8s.io/api/apps/v1beta1.RollbackConfig": schema_k8sio_api_apps_v1beta1_RollbackConfig(ref), + "k8s.io/api/apps/v1beta1.RollingUpdateDeployment": schema_k8sio_api_apps_v1beta1_RollingUpdateDeployment(ref), + "k8s.io/api/apps/v1beta1.RollingUpdateStatefulSetStrategy": schema_k8sio_api_apps_v1beta1_RollingUpdateStatefulSetStrategy(ref), + "k8s.io/api/apps/v1beta1.Scale": schema_k8sio_api_apps_v1beta1_Scale(ref), + "k8s.io/api/apps/v1beta1.ScaleSpec": schema_k8sio_api_apps_v1beta1_ScaleSpec(ref), + "k8s.io/api/apps/v1beta1.ScaleStatus": schema_k8sio_api_apps_v1beta1_ScaleStatus(ref), + "k8s.io/api/apps/v1beta1.StatefulSet": schema_k8sio_api_apps_v1beta1_StatefulSet(ref), + "k8s.io/api/apps/v1beta1.StatefulSetCondition": schema_k8sio_api_apps_v1beta1_StatefulSetCondition(ref), + "k8s.io/api/apps/v1beta1.StatefulSetList": schema_k8sio_api_apps_v1beta1_StatefulSetList(ref), + "k8s.io/api/apps/v1beta1.StatefulSetSpec": schema_k8sio_api_apps_v1beta1_StatefulSetSpec(ref), + "k8s.io/api/apps/v1beta1.StatefulSetStatus": schema_k8sio_api_apps_v1beta1_StatefulSetStatus(ref), + "k8s.io/api/apps/v1beta1.StatefulSetUpdateStrategy": schema_k8sio_api_apps_v1beta1_StatefulSetUpdateStrategy(ref), + "k8s.io/api/apps/v1beta2.ControllerRevision": schema_k8sio_api_apps_v1beta2_ControllerRevision(ref), + "k8s.io/api/apps/v1beta2.ControllerRevisionList": schema_k8sio_api_apps_v1beta2_ControllerRevisionList(ref), + "k8s.io/api/apps/v1beta2.DaemonSet": schema_k8sio_api_apps_v1beta2_DaemonSet(ref), + "k8s.io/api/apps/v1beta2.DaemonSetCondition": schema_k8sio_api_apps_v1beta2_DaemonSetCondition(ref), + "k8s.io/api/apps/v1beta2.DaemonSetList": schema_k8sio_api_apps_v1beta2_DaemonSetList(ref), + "k8s.io/api/apps/v1beta2.DaemonSetSpec": schema_k8sio_api_apps_v1beta2_DaemonSetSpec(ref), + "k8s.io/api/apps/v1beta2.DaemonSetStatus": schema_k8sio_api_apps_v1beta2_DaemonSetStatus(ref), + "k8s.io/api/apps/v1beta2.DaemonSetUpdateStrategy": schema_k8sio_api_apps_v1beta2_DaemonSetUpdateStrategy(ref), + "k8s.io/api/apps/v1beta2.Deployment": schema_k8sio_api_apps_v1beta2_Deployment(ref), + "k8s.io/api/apps/v1beta2.DeploymentCondition": schema_k8sio_api_apps_v1beta2_DeploymentCondition(ref), + "k8s.io/api/apps/v1beta2.DeploymentList": schema_k8sio_api_apps_v1beta2_DeploymentList(ref), + "k8s.io/api/apps/v1beta2.DeploymentSpec": schema_k8sio_api_apps_v1beta2_DeploymentSpec(ref), + "k8s.io/api/apps/v1beta2.DeploymentStatus": schema_k8sio_api_apps_v1beta2_DeploymentStatus(ref), + "k8s.io/api/apps/v1beta2.DeploymentStrategy": schema_k8sio_api_apps_v1beta2_DeploymentStrategy(ref), + "k8s.io/api/apps/v1beta2.ReplicaSet": schema_k8sio_api_apps_v1beta2_ReplicaSet(ref), + "k8s.io/api/apps/v1beta2.ReplicaSetCondition": schema_k8sio_api_apps_v1beta2_ReplicaSetCondition(ref), + "k8s.io/api/apps/v1beta2.ReplicaSetList": schema_k8sio_api_apps_v1beta2_ReplicaSetList(ref), + "k8s.io/api/apps/v1beta2.ReplicaSetSpec": schema_k8sio_api_apps_v1beta2_ReplicaSetSpec(ref), + "k8s.io/api/apps/v1beta2.ReplicaSetStatus": schema_k8sio_api_apps_v1beta2_ReplicaSetStatus(ref), + "k8s.io/api/apps/v1beta2.RollingUpdateDaemonSet": schema_k8sio_api_apps_v1beta2_RollingUpdateDaemonSet(ref), + "k8s.io/api/apps/v1beta2.RollingUpdateDeployment": schema_k8sio_api_apps_v1beta2_RollingUpdateDeployment(ref), + "k8s.io/api/apps/v1beta2.RollingUpdateStatefulSetStrategy": schema_k8sio_api_apps_v1beta2_RollingUpdateStatefulSetStrategy(ref), + "k8s.io/api/apps/v1beta2.Scale": schema_k8sio_api_apps_v1beta2_Scale(ref), + "k8s.io/api/apps/v1beta2.ScaleSpec": schema_k8sio_api_apps_v1beta2_ScaleSpec(ref), + "k8s.io/api/apps/v1beta2.ScaleStatus": schema_k8sio_api_apps_v1beta2_ScaleStatus(ref), + "k8s.io/api/apps/v1beta2.StatefulSet": schema_k8sio_api_apps_v1beta2_StatefulSet(ref), + "k8s.io/api/apps/v1beta2.StatefulSetCondition": schema_k8sio_api_apps_v1beta2_StatefulSetCondition(ref), + "k8s.io/api/apps/v1beta2.StatefulSetList": schema_k8sio_api_apps_v1beta2_StatefulSetList(ref), + "k8s.io/api/apps/v1beta2.StatefulSetSpec": schema_k8sio_api_apps_v1beta2_StatefulSetSpec(ref), + "k8s.io/api/apps/v1beta2.StatefulSetStatus": schema_k8sio_api_apps_v1beta2_StatefulSetStatus(ref), + "k8s.io/api/apps/v1beta2.StatefulSetUpdateStrategy": schema_k8sio_api_apps_v1beta2_StatefulSetUpdateStrategy(ref), + "k8s.io/api/authentication/v1.BoundObjectReference": schema_k8sio_api_authentication_v1_BoundObjectReference(ref), + "k8s.io/api/authentication/v1.TokenRequest": schema_k8sio_api_authentication_v1_TokenRequest(ref), + "k8s.io/api/authentication/v1.TokenRequestSpec": schema_k8sio_api_authentication_v1_TokenRequestSpec(ref), + "k8s.io/api/authentication/v1.TokenRequestStatus": schema_k8sio_api_authentication_v1_TokenRequestStatus(ref), + "k8s.io/api/authentication/v1.TokenReview": schema_k8sio_api_authentication_v1_TokenReview(ref), + "k8s.io/api/authentication/v1.TokenReviewSpec": schema_k8sio_api_authentication_v1_TokenReviewSpec(ref), + "k8s.io/api/authentication/v1.TokenReviewStatus": schema_k8sio_api_authentication_v1_TokenReviewStatus(ref), + "k8s.io/api/authentication/v1.UserInfo": schema_k8sio_api_authentication_v1_UserInfo(ref), + "k8s.io/api/authentication/v1beta1.TokenReview": schema_k8sio_api_authentication_v1beta1_TokenReview(ref), + "k8s.io/api/authentication/v1beta1.TokenReviewSpec": schema_k8sio_api_authentication_v1beta1_TokenReviewSpec(ref), + "k8s.io/api/authentication/v1beta1.TokenReviewStatus": schema_k8sio_api_authentication_v1beta1_TokenReviewStatus(ref), + "k8s.io/api/authentication/v1beta1.UserInfo": schema_k8sio_api_authentication_v1beta1_UserInfo(ref), + "k8s.io/api/authorization/v1.LocalSubjectAccessReview": schema_k8sio_api_authorization_v1_LocalSubjectAccessReview(ref), + "k8s.io/api/authorization/v1.NonResourceAttributes": schema_k8sio_api_authorization_v1_NonResourceAttributes(ref), + "k8s.io/api/authorization/v1.NonResourceRule": schema_k8sio_api_authorization_v1_NonResourceRule(ref), + "k8s.io/api/authorization/v1.ResourceAttributes": schema_k8sio_api_authorization_v1_ResourceAttributes(ref), + "k8s.io/api/authorization/v1.ResourceRule": schema_k8sio_api_authorization_v1_ResourceRule(ref), + "k8s.io/api/authorization/v1.SelfSubjectAccessReview": schema_k8sio_api_authorization_v1_SelfSubjectAccessReview(ref), + "k8s.io/api/authorization/v1.SelfSubjectAccessReviewSpec": schema_k8sio_api_authorization_v1_SelfSubjectAccessReviewSpec(ref), + "k8s.io/api/authorization/v1.SelfSubjectRulesReview": schema_k8sio_api_authorization_v1_SelfSubjectRulesReview(ref), + "k8s.io/api/authorization/v1.SelfSubjectRulesReviewSpec": schema_k8sio_api_authorization_v1_SelfSubjectRulesReviewSpec(ref), + "k8s.io/api/authorization/v1.SubjectAccessReview": schema_k8sio_api_authorization_v1_SubjectAccessReview(ref), + "k8s.io/api/authorization/v1.SubjectAccessReviewSpec": schema_k8sio_api_authorization_v1_SubjectAccessReviewSpec(ref), + "k8s.io/api/authorization/v1.SubjectAccessReviewStatus": schema_k8sio_api_authorization_v1_SubjectAccessReviewStatus(ref), + "k8s.io/api/authorization/v1.SubjectRulesReviewStatus": schema_k8sio_api_authorization_v1_SubjectRulesReviewStatus(ref), + "k8s.io/api/authorization/v1beta1.LocalSubjectAccessReview": schema_k8sio_api_authorization_v1beta1_LocalSubjectAccessReview(ref), + "k8s.io/api/authorization/v1beta1.NonResourceAttributes": schema_k8sio_api_authorization_v1beta1_NonResourceAttributes(ref), + "k8s.io/api/authorization/v1beta1.NonResourceRule": schema_k8sio_api_authorization_v1beta1_NonResourceRule(ref), + "k8s.io/api/authorization/v1beta1.ResourceAttributes": schema_k8sio_api_authorization_v1beta1_ResourceAttributes(ref), + "k8s.io/api/authorization/v1beta1.ResourceRule": schema_k8sio_api_authorization_v1beta1_ResourceRule(ref), + "k8s.io/api/authorization/v1beta1.SelfSubjectAccessReview": schema_k8sio_api_authorization_v1beta1_SelfSubjectAccessReview(ref), + "k8s.io/api/authorization/v1beta1.SelfSubjectAccessReviewSpec": schema_k8sio_api_authorization_v1beta1_SelfSubjectAccessReviewSpec(ref), + "k8s.io/api/authorization/v1beta1.SelfSubjectRulesReview": schema_k8sio_api_authorization_v1beta1_SelfSubjectRulesReview(ref), + "k8s.io/api/authorization/v1beta1.SelfSubjectRulesReviewSpec": schema_k8sio_api_authorization_v1beta1_SelfSubjectRulesReviewSpec(ref), + "k8s.io/api/authorization/v1beta1.SubjectAccessReview": schema_k8sio_api_authorization_v1beta1_SubjectAccessReview(ref), + "k8s.io/api/authorization/v1beta1.SubjectAccessReviewSpec": schema_k8sio_api_authorization_v1beta1_SubjectAccessReviewSpec(ref), + "k8s.io/api/authorization/v1beta1.SubjectAccessReviewStatus": schema_k8sio_api_authorization_v1beta1_SubjectAccessReviewStatus(ref), + "k8s.io/api/authorization/v1beta1.SubjectRulesReviewStatus": schema_k8sio_api_authorization_v1beta1_SubjectRulesReviewStatus(ref), + "k8s.io/api/autoscaling/v1.CrossVersionObjectReference": schema_k8sio_api_autoscaling_v1_CrossVersionObjectReference(ref), + "k8s.io/api/autoscaling/v1.ExternalMetricSource": schema_k8sio_api_autoscaling_v1_ExternalMetricSource(ref), + "k8s.io/api/autoscaling/v1.ExternalMetricStatus": schema_k8sio_api_autoscaling_v1_ExternalMetricStatus(ref), + "k8s.io/api/autoscaling/v1.HorizontalPodAutoscaler": schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscaler(ref), + "k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerCondition": schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerCondition(ref), + "k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerList": schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerList(ref), + "k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerSpec": schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerSpec(ref), + "k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerStatus": schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerStatus(ref), + "k8s.io/api/autoscaling/v1.MetricSpec": schema_k8sio_api_autoscaling_v1_MetricSpec(ref), + "k8s.io/api/autoscaling/v1.MetricStatus": schema_k8sio_api_autoscaling_v1_MetricStatus(ref), + "k8s.io/api/autoscaling/v1.ObjectMetricSource": schema_k8sio_api_autoscaling_v1_ObjectMetricSource(ref), + "k8s.io/api/autoscaling/v1.ObjectMetricStatus": schema_k8sio_api_autoscaling_v1_ObjectMetricStatus(ref), + "k8s.io/api/autoscaling/v1.PodsMetricSource": schema_k8sio_api_autoscaling_v1_PodsMetricSource(ref), + "k8s.io/api/autoscaling/v1.PodsMetricStatus": schema_k8sio_api_autoscaling_v1_PodsMetricStatus(ref), + "k8s.io/api/autoscaling/v1.ResourceMetricSource": schema_k8sio_api_autoscaling_v1_ResourceMetricSource(ref), + "k8s.io/api/autoscaling/v1.ResourceMetricStatus": schema_k8sio_api_autoscaling_v1_ResourceMetricStatus(ref), + "k8s.io/api/autoscaling/v1.Scale": schema_k8sio_api_autoscaling_v1_Scale(ref), + "k8s.io/api/autoscaling/v1.ScaleSpec": schema_k8sio_api_autoscaling_v1_ScaleSpec(ref), + "k8s.io/api/autoscaling/v1.ScaleStatus": schema_k8sio_api_autoscaling_v1_ScaleStatus(ref), + "k8s.io/api/autoscaling/v2beta1.CrossVersionObjectReference": schema_k8sio_api_autoscaling_v2beta1_CrossVersionObjectReference(ref), + "k8s.io/api/autoscaling/v2beta1.ExternalMetricSource": schema_k8sio_api_autoscaling_v2beta1_ExternalMetricSource(ref), + "k8s.io/api/autoscaling/v2beta1.ExternalMetricStatus": schema_k8sio_api_autoscaling_v2beta1_ExternalMetricStatus(ref), + "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscaler": schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscaler(ref), + "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerCondition": schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerCondition(ref), + "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerList": schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerList(ref), + "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerSpec": schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerSpec(ref), + "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerStatus": schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerStatus(ref), + "k8s.io/api/autoscaling/v2beta1.MetricSpec": schema_k8sio_api_autoscaling_v2beta1_MetricSpec(ref), + "k8s.io/api/autoscaling/v2beta1.MetricStatus": schema_k8sio_api_autoscaling_v2beta1_MetricStatus(ref), + "k8s.io/api/autoscaling/v2beta1.ObjectMetricSource": schema_k8sio_api_autoscaling_v2beta1_ObjectMetricSource(ref), + "k8s.io/api/autoscaling/v2beta1.ObjectMetricStatus": schema_k8sio_api_autoscaling_v2beta1_ObjectMetricStatus(ref), + "k8s.io/api/autoscaling/v2beta1.PodsMetricSource": schema_k8sio_api_autoscaling_v2beta1_PodsMetricSource(ref), + "k8s.io/api/autoscaling/v2beta1.PodsMetricStatus": schema_k8sio_api_autoscaling_v2beta1_PodsMetricStatus(ref), + "k8s.io/api/autoscaling/v2beta1.ResourceMetricSource": schema_k8sio_api_autoscaling_v2beta1_ResourceMetricSource(ref), + "k8s.io/api/autoscaling/v2beta1.ResourceMetricStatus": schema_k8sio_api_autoscaling_v2beta1_ResourceMetricStatus(ref), + "k8s.io/api/autoscaling/v2beta2.CrossVersionObjectReference": schema_k8sio_api_autoscaling_v2beta2_CrossVersionObjectReference(ref), + "k8s.io/api/autoscaling/v2beta2.ExternalMetricSource": schema_k8sio_api_autoscaling_v2beta2_ExternalMetricSource(ref), + "k8s.io/api/autoscaling/v2beta2.ExternalMetricStatus": schema_k8sio_api_autoscaling_v2beta2_ExternalMetricStatus(ref), + "k8s.io/api/autoscaling/v2beta2.HPAScalingPolicy": schema_k8sio_api_autoscaling_v2beta2_HPAScalingPolicy(ref), + "k8s.io/api/autoscaling/v2beta2.HPAScalingRules": schema_k8sio_api_autoscaling_v2beta2_HPAScalingRules(ref), + "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscaler": schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscaler(ref), + "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerBehavior": schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerBehavior(ref), + "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerCondition": schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerCondition(ref), + "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerList": schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerList(ref), + "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerSpec": schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerSpec(ref), + "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerStatus": schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerStatus(ref), + "k8s.io/api/autoscaling/v2beta2.MetricIdentifier": schema_k8sio_api_autoscaling_v2beta2_MetricIdentifier(ref), + "k8s.io/api/autoscaling/v2beta2.MetricSpec": schema_k8sio_api_autoscaling_v2beta2_MetricSpec(ref), + "k8s.io/api/autoscaling/v2beta2.MetricStatus": schema_k8sio_api_autoscaling_v2beta2_MetricStatus(ref), + "k8s.io/api/autoscaling/v2beta2.MetricTarget": schema_k8sio_api_autoscaling_v2beta2_MetricTarget(ref), + "k8s.io/api/autoscaling/v2beta2.MetricValueStatus": schema_k8sio_api_autoscaling_v2beta2_MetricValueStatus(ref), + "k8s.io/api/autoscaling/v2beta2.ObjectMetricSource": schema_k8sio_api_autoscaling_v2beta2_ObjectMetricSource(ref), + "k8s.io/api/autoscaling/v2beta2.ObjectMetricStatus": schema_k8sio_api_autoscaling_v2beta2_ObjectMetricStatus(ref), + "k8s.io/api/autoscaling/v2beta2.PodsMetricSource": schema_k8sio_api_autoscaling_v2beta2_PodsMetricSource(ref), + "k8s.io/api/autoscaling/v2beta2.PodsMetricStatus": schema_k8sio_api_autoscaling_v2beta2_PodsMetricStatus(ref), + "k8s.io/api/autoscaling/v2beta2.ResourceMetricSource": schema_k8sio_api_autoscaling_v2beta2_ResourceMetricSource(ref), + "k8s.io/api/autoscaling/v2beta2.ResourceMetricStatus": schema_k8sio_api_autoscaling_v2beta2_ResourceMetricStatus(ref), + "k8s.io/api/batch/v1.Job": schema_k8sio_api_batch_v1_Job(ref), + "k8s.io/api/batch/v1.JobCondition": schema_k8sio_api_batch_v1_JobCondition(ref), + "k8s.io/api/batch/v1.JobList": schema_k8sio_api_batch_v1_JobList(ref), + "k8s.io/api/batch/v1.JobSpec": schema_k8sio_api_batch_v1_JobSpec(ref), + "k8s.io/api/batch/v1.JobStatus": schema_k8sio_api_batch_v1_JobStatus(ref), + "k8s.io/api/batch/v1beta1.CronJob": schema_k8sio_api_batch_v1beta1_CronJob(ref), + "k8s.io/api/batch/v1beta1.CronJobList": schema_k8sio_api_batch_v1beta1_CronJobList(ref), + "k8s.io/api/batch/v1beta1.CronJobSpec": schema_k8sio_api_batch_v1beta1_CronJobSpec(ref), + "k8s.io/api/batch/v1beta1.CronJobStatus": schema_k8sio_api_batch_v1beta1_CronJobStatus(ref), + "k8s.io/api/batch/v1beta1.JobTemplate": schema_k8sio_api_batch_v1beta1_JobTemplate(ref), + "k8s.io/api/batch/v1beta1.JobTemplateSpec": schema_k8sio_api_batch_v1beta1_JobTemplateSpec(ref), + "k8s.io/api/batch/v2alpha1.CronJob": schema_k8sio_api_batch_v2alpha1_CronJob(ref), + "k8s.io/api/batch/v2alpha1.CronJobList": schema_k8sio_api_batch_v2alpha1_CronJobList(ref), + "k8s.io/api/batch/v2alpha1.CronJobSpec": schema_k8sio_api_batch_v2alpha1_CronJobSpec(ref), + "k8s.io/api/batch/v2alpha1.CronJobStatus": schema_k8sio_api_batch_v2alpha1_CronJobStatus(ref), + "k8s.io/api/batch/v2alpha1.JobTemplate": schema_k8sio_api_batch_v2alpha1_JobTemplate(ref), + "k8s.io/api/batch/v2alpha1.JobTemplateSpec": schema_k8sio_api_batch_v2alpha1_JobTemplateSpec(ref), + "k8s.io/api/certificates/v1.CertificateSigningRequest": schema_k8sio_api_certificates_v1_CertificateSigningRequest(ref), + "k8s.io/api/certificates/v1.CertificateSigningRequestCondition": schema_k8sio_api_certificates_v1_CertificateSigningRequestCondition(ref), + "k8s.io/api/certificates/v1.CertificateSigningRequestList": schema_k8sio_api_certificates_v1_CertificateSigningRequestList(ref), + "k8s.io/api/certificates/v1.CertificateSigningRequestSpec": schema_k8sio_api_certificates_v1_CertificateSigningRequestSpec(ref), + "k8s.io/api/certificates/v1.CertificateSigningRequestStatus": schema_k8sio_api_certificates_v1_CertificateSigningRequestStatus(ref), + "k8s.io/api/certificates/v1beta1.CertificateSigningRequest": schema_k8sio_api_certificates_v1beta1_CertificateSigningRequest(ref), + "k8s.io/api/certificates/v1beta1.CertificateSigningRequestCondition": schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestCondition(ref), + "k8s.io/api/certificates/v1beta1.CertificateSigningRequestList": schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestList(ref), + "k8s.io/api/certificates/v1beta1.CertificateSigningRequestSpec": schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestSpec(ref), + "k8s.io/api/certificates/v1beta1.CertificateSigningRequestStatus": schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestStatus(ref), + "k8s.io/api/coordination/v1.Lease": schema_k8sio_api_coordination_v1_Lease(ref), + "k8s.io/api/coordination/v1.LeaseList": schema_k8sio_api_coordination_v1_LeaseList(ref), + "k8s.io/api/coordination/v1.LeaseSpec": schema_k8sio_api_coordination_v1_LeaseSpec(ref), + "k8s.io/api/coordination/v1beta1.Lease": schema_k8sio_api_coordination_v1beta1_Lease(ref), + "k8s.io/api/coordination/v1beta1.LeaseList": schema_k8sio_api_coordination_v1beta1_LeaseList(ref), + "k8s.io/api/coordination/v1beta1.LeaseSpec": schema_k8sio_api_coordination_v1beta1_LeaseSpec(ref), + "k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource": schema_k8sio_api_core_v1_AWSElasticBlockStoreVolumeSource(ref), + "k8s.io/api/core/v1.Affinity": schema_k8sio_api_core_v1_Affinity(ref), + "k8s.io/api/core/v1.AttachedVolume": schema_k8sio_api_core_v1_AttachedVolume(ref), + "k8s.io/api/core/v1.AvoidPods": schema_k8sio_api_core_v1_AvoidPods(ref), + "k8s.io/api/core/v1.AzureDiskVolumeSource": schema_k8sio_api_core_v1_AzureDiskVolumeSource(ref), + "k8s.io/api/core/v1.AzureFilePersistentVolumeSource": schema_k8sio_api_core_v1_AzureFilePersistentVolumeSource(ref), + "k8s.io/api/core/v1.AzureFileVolumeSource": schema_k8sio_api_core_v1_AzureFileVolumeSource(ref), + "k8s.io/api/core/v1.Binding": schema_k8sio_api_core_v1_Binding(ref), + "k8s.io/api/core/v1.CSIPersistentVolumeSource": schema_k8sio_api_core_v1_CSIPersistentVolumeSource(ref), + "k8s.io/api/core/v1.CSIVolumeSource": schema_k8sio_api_core_v1_CSIVolumeSource(ref), + "k8s.io/api/core/v1.Capabilities": schema_k8sio_api_core_v1_Capabilities(ref), + "k8s.io/api/core/v1.CephFSPersistentVolumeSource": schema_k8sio_api_core_v1_CephFSPersistentVolumeSource(ref), + "k8s.io/api/core/v1.CephFSVolumeSource": schema_k8sio_api_core_v1_CephFSVolumeSource(ref), + "k8s.io/api/core/v1.CinderPersistentVolumeSource": schema_k8sio_api_core_v1_CinderPersistentVolumeSource(ref), + "k8s.io/api/core/v1.CinderVolumeSource": schema_k8sio_api_core_v1_CinderVolumeSource(ref), + "k8s.io/api/core/v1.ClientIPConfig": schema_k8sio_api_core_v1_ClientIPConfig(ref), + "k8s.io/api/core/v1.ComponentCondition": schema_k8sio_api_core_v1_ComponentCondition(ref), + "k8s.io/api/core/v1.ComponentStatus": schema_k8sio_api_core_v1_ComponentStatus(ref), + "k8s.io/api/core/v1.ComponentStatusList": schema_k8sio_api_core_v1_ComponentStatusList(ref), + "k8s.io/api/core/v1.ConfigMap": schema_k8sio_api_core_v1_ConfigMap(ref), + "k8s.io/api/core/v1.ConfigMapEnvSource": schema_k8sio_api_core_v1_ConfigMapEnvSource(ref), + "k8s.io/api/core/v1.ConfigMapKeySelector": schema_k8sio_api_core_v1_ConfigMapKeySelector(ref), + "k8s.io/api/core/v1.ConfigMapList": schema_k8sio_api_core_v1_ConfigMapList(ref), + "k8s.io/api/core/v1.ConfigMapNodeConfigSource": schema_k8sio_api_core_v1_ConfigMapNodeConfigSource(ref), + "k8s.io/api/core/v1.ConfigMapProjection": schema_k8sio_api_core_v1_ConfigMapProjection(ref), + "k8s.io/api/core/v1.ConfigMapVolumeSource": schema_k8sio_api_core_v1_ConfigMapVolumeSource(ref), + "k8s.io/api/core/v1.Container": schema_k8sio_api_core_v1_Container(ref), + "k8s.io/api/core/v1.ContainerImage": schema_k8sio_api_core_v1_ContainerImage(ref), + "k8s.io/api/core/v1.ContainerPort": schema_k8sio_api_core_v1_ContainerPort(ref), + "k8s.io/api/core/v1.ContainerState": schema_k8sio_api_core_v1_ContainerState(ref), + "k8s.io/api/core/v1.ContainerStateRunning": schema_k8sio_api_core_v1_ContainerStateRunning(ref), + "k8s.io/api/core/v1.ContainerStateTerminated": schema_k8sio_api_core_v1_ContainerStateTerminated(ref), + "k8s.io/api/core/v1.ContainerStateWaiting": schema_k8sio_api_core_v1_ContainerStateWaiting(ref), + "k8s.io/api/core/v1.ContainerStatus": schema_k8sio_api_core_v1_ContainerStatus(ref), + "k8s.io/api/core/v1.DaemonEndpoint": schema_k8sio_api_core_v1_DaemonEndpoint(ref), + "k8s.io/api/core/v1.DownwardAPIProjection": schema_k8sio_api_core_v1_DownwardAPIProjection(ref), + "k8s.io/api/core/v1.DownwardAPIVolumeFile": schema_k8sio_api_core_v1_DownwardAPIVolumeFile(ref), + "k8s.io/api/core/v1.DownwardAPIVolumeSource": schema_k8sio_api_core_v1_DownwardAPIVolumeSource(ref), + "k8s.io/api/core/v1.EmptyDirVolumeSource": schema_k8sio_api_core_v1_EmptyDirVolumeSource(ref), + "k8s.io/api/core/v1.EndpointAddress": schema_k8sio_api_core_v1_EndpointAddress(ref), + "k8s.io/api/core/v1.EndpointPort": schema_k8sio_api_core_v1_EndpointPort(ref), + "k8s.io/api/core/v1.EndpointSubset": schema_k8sio_api_core_v1_EndpointSubset(ref), + "k8s.io/api/core/v1.Endpoints": schema_k8sio_api_core_v1_Endpoints(ref), + "k8s.io/api/core/v1.EndpointsList": schema_k8sio_api_core_v1_EndpointsList(ref), + "k8s.io/api/core/v1.EnvFromSource": schema_k8sio_api_core_v1_EnvFromSource(ref), + "k8s.io/api/core/v1.EnvVar": schema_k8sio_api_core_v1_EnvVar(ref), + "k8s.io/api/core/v1.EnvVarSource": schema_k8sio_api_core_v1_EnvVarSource(ref), + "k8s.io/api/core/v1.EphemeralContainer": schema_k8sio_api_core_v1_EphemeralContainer(ref), + "k8s.io/api/core/v1.EphemeralContainerCommon": schema_k8sio_api_core_v1_EphemeralContainerCommon(ref), + "k8s.io/api/core/v1.EphemeralContainers": schema_k8sio_api_core_v1_EphemeralContainers(ref), + "k8s.io/api/core/v1.EphemeralVolumeSource": schema_k8sio_api_core_v1_EphemeralVolumeSource(ref), + "k8s.io/api/core/v1.Event": schema_k8sio_api_core_v1_Event(ref), + "k8s.io/api/core/v1.EventList": schema_k8sio_api_core_v1_EventList(ref), + "k8s.io/api/core/v1.EventSeries": schema_k8sio_api_core_v1_EventSeries(ref), + "k8s.io/api/core/v1.EventSource": schema_k8sio_api_core_v1_EventSource(ref), + "k8s.io/api/core/v1.ExecAction": schema_k8sio_api_core_v1_ExecAction(ref), + "k8s.io/api/core/v1.FCVolumeSource": schema_k8sio_api_core_v1_FCVolumeSource(ref), + "k8s.io/api/core/v1.FlexPersistentVolumeSource": schema_k8sio_api_core_v1_FlexPersistentVolumeSource(ref), + "k8s.io/api/core/v1.FlexVolumeSource": schema_k8sio_api_core_v1_FlexVolumeSource(ref), + "k8s.io/api/core/v1.FlockerVolumeSource": schema_k8sio_api_core_v1_FlockerVolumeSource(ref), + "k8s.io/api/core/v1.GCEPersistentDiskVolumeSource": schema_k8sio_api_core_v1_GCEPersistentDiskVolumeSource(ref), + "k8s.io/api/core/v1.GitRepoVolumeSource": schema_k8sio_api_core_v1_GitRepoVolumeSource(ref), + "k8s.io/api/core/v1.GlusterfsPersistentVolumeSource": schema_k8sio_api_core_v1_GlusterfsPersistentVolumeSource(ref), + "k8s.io/api/core/v1.GlusterfsVolumeSource": schema_k8sio_api_core_v1_GlusterfsVolumeSource(ref), + "k8s.io/api/core/v1.HTTPGetAction": schema_k8sio_api_core_v1_HTTPGetAction(ref), + "k8s.io/api/core/v1.HTTPHeader": schema_k8sio_api_core_v1_HTTPHeader(ref), + "k8s.io/api/core/v1.Handler": schema_k8sio_api_core_v1_Handler(ref), + "k8s.io/api/core/v1.HostAlias": schema_k8sio_api_core_v1_HostAlias(ref), + "k8s.io/api/core/v1.HostPathVolumeSource": schema_k8sio_api_core_v1_HostPathVolumeSource(ref), + "k8s.io/api/core/v1.ISCSIPersistentVolumeSource": schema_k8sio_api_core_v1_ISCSIPersistentVolumeSource(ref), + "k8s.io/api/core/v1.ISCSIVolumeSource": schema_k8sio_api_core_v1_ISCSIVolumeSource(ref), + "k8s.io/api/core/v1.KeyToPath": schema_k8sio_api_core_v1_KeyToPath(ref), + "k8s.io/api/core/v1.Lifecycle": schema_k8sio_api_core_v1_Lifecycle(ref), + "k8s.io/api/core/v1.LimitRange": schema_k8sio_api_core_v1_LimitRange(ref), + "k8s.io/api/core/v1.LimitRangeItem": schema_k8sio_api_core_v1_LimitRangeItem(ref), + "k8s.io/api/core/v1.LimitRangeList": schema_k8sio_api_core_v1_LimitRangeList(ref), + "k8s.io/api/core/v1.LimitRangeSpec": schema_k8sio_api_core_v1_LimitRangeSpec(ref), + "k8s.io/api/core/v1.List": schema_k8sio_api_core_v1_List(ref), + "k8s.io/api/core/v1.LoadBalancerIngress": schema_k8sio_api_core_v1_LoadBalancerIngress(ref), + "k8s.io/api/core/v1.LoadBalancerStatus": schema_k8sio_api_core_v1_LoadBalancerStatus(ref), + "k8s.io/api/core/v1.LocalObjectReference": schema_k8sio_api_core_v1_LocalObjectReference(ref), + "k8s.io/api/core/v1.LocalVolumeSource": schema_k8sio_api_core_v1_LocalVolumeSource(ref), + "k8s.io/api/core/v1.NFSVolumeSource": schema_k8sio_api_core_v1_NFSVolumeSource(ref), + "k8s.io/api/core/v1.Namespace": schema_k8sio_api_core_v1_Namespace(ref), + "k8s.io/api/core/v1.NamespaceCondition": schema_k8sio_api_core_v1_NamespaceCondition(ref), + "k8s.io/api/core/v1.NamespaceList": schema_k8sio_api_core_v1_NamespaceList(ref), + "k8s.io/api/core/v1.NamespaceSpec": schema_k8sio_api_core_v1_NamespaceSpec(ref), + "k8s.io/api/core/v1.NamespaceStatus": schema_k8sio_api_core_v1_NamespaceStatus(ref), + "k8s.io/api/core/v1.Node": schema_k8sio_api_core_v1_Node(ref), + "k8s.io/api/core/v1.NodeAddress": schema_k8sio_api_core_v1_NodeAddress(ref), + "k8s.io/api/core/v1.NodeAffinity": schema_k8sio_api_core_v1_NodeAffinity(ref), + "k8s.io/api/core/v1.NodeCondition": schema_k8sio_api_core_v1_NodeCondition(ref), + "k8s.io/api/core/v1.NodeConfigSource": schema_k8sio_api_core_v1_NodeConfigSource(ref), + "k8s.io/api/core/v1.NodeConfigStatus": schema_k8sio_api_core_v1_NodeConfigStatus(ref), + "k8s.io/api/core/v1.NodeDaemonEndpoints": schema_k8sio_api_core_v1_NodeDaemonEndpoints(ref), + "k8s.io/api/core/v1.NodeList": schema_k8sio_api_core_v1_NodeList(ref), + "k8s.io/api/core/v1.NodeProxyOptions": schema_k8sio_api_core_v1_NodeProxyOptions(ref), + "k8s.io/api/core/v1.NodeResources": schema_k8sio_api_core_v1_NodeResources(ref), + "k8s.io/api/core/v1.NodeSelector": schema_k8sio_api_core_v1_NodeSelector(ref), + "k8s.io/api/core/v1.NodeSelectorRequirement": schema_k8sio_api_core_v1_NodeSelectorRequirement(ref), + "k8s.io/api/core/v1.NodeSelectorTerm": schema_k8sio_api_core_v1_NodeSelectorTerm(ref), + "k8s.io/api/core/v1.NodeSpec": schema_k8sio_api_core_v1_NodeSpec(ref), + "k8s.io/api/core/v1.NodeStatus": schema_k8sio_api_core_v1_NodeStatus(ref), + "k8s.io/api/core/v1.NodeSystemInfo": schema_k8sio_api_core_v1_NodeSystemInfo(ref), + "k8s.io/api/core/v1.ObjectFieldSelector": schema_k8sio_api_core_v1_ObjectFieldSelector(ref), + "k8s.io/api/core/v1.ObjectReference": schema_k8sio_api_core_v1_ObjectReference(ref), + "k8s.io/api/core/v1.PersistentVolume": schema_k8sio_api_core_v1_PersistentVolume(ref), + "k8s.io/api/core/v1.PersistentVolumeClaim": schema_k8sio_api_core_v1_PersistentVolumeClaim(ref), + "k8s.io/api/core/v1.PersistentVolumeClaimCondition": schema_k8sio_api_core_v1_PersistentVolumeClaimCondition(ref), + "k8s.io/api/core/v1.PersistentVolumeClaimList": schema_k8sio_api_core_v1_PersistentVolumeClaimList(ref), + "k8s.io/api/core/v1.PersistentVolumeClaimSpec": schema_k8sio_api_core_v1_PersistentVolumeClaimSpec(ref), + "k8s.io/api/core/v1.PersistentVolumeClaimStatus": schema_k8sio_api_core_v1_PersistentVolumeClaimStatus(ref), + "k8s.io/api/core/v1.PersistentVolumeClaimTemplate": schema_k8sio_api_core_v1_PersistentVolumeClaimTemplate(ref), + "k8s.io/api/core/v1.PersistentVolumeClaimVolumeSource": schema_k8sio_api_core_v1_PersistentVolumeClaimVolumeSource(ref), + "k8s.io/api/core/v1.PersistentVolumeList": schema_k8sio_api_core_v1_PersistentVolumeList(ref), + "k8s.io/api/core/v1.PersistentVolumeSource": schema_k8sio_api_core_v1_PersistentVolumeSource(ref), + "k8s.io/api/core/v1.PersistentVolumeSpec": schema_k8sio_api_core_v1_PersistentVolumeSpec(ref), + "k8s.io/api/core/v1.PersistentVolumeStatus": schema_k8sio_api_core_v1_PersistentVolumeStatus(ref), + "k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource": schema_k8sio_api_core_v1_PhotonPersistentDiskVolumeSource(ref), + "k8s.io/api/core/v1.Pod": schema_k8sio_api_core_v1_Pod(ref), + "k8s.io/api/core/v1.PodAffinity": schema_k8sio_api_core_v1_PodAffinity(ref), + "k8s.io/api/core/v1.PodAffinityTerm": schema_k8sio_api_core_v1_PodAffinityTerm(ref), + "k8s.io/api/core/v1.PodAntiAffinity": schema_k8sio_api_core_v1_PodAntiAffinity(ref), + "k8s.io/api/core/v1.PodAttachOptions": schema_k8sio_api_core_v1_PodAttachOptions(ref), + "k8s.io/api/core/v1.PodCondition": schema_k8sio_api_core_v1_PodCondition(ref), + "k8s.io/api/core/v1.PodDNSConfig": schema_k8sio_api_core_v1_PodDNSConfig(ref), + "k8s.io/api/core/v1.PodDNSConfigOption": schema_k8sio_api_core_v1_PodDNSConfigOption(ref), + "k8s.io/api/core/v1.PodExecOptions": schema_k8sio_api_core_v1_PodExecOptions(ref), + "k8s.io/api/core/v1.PodIP": schema_k8sio_api_core_v1_PodIP(ref), + "k8s.io/api/core/v1.PodList": schema_k8sio_api_core_v1_PodList(ref), + "k8s.io/api/core/v1.PodLogOptions": schema_k8sio_api_core_v1_PodLogOptions(ref), + "k8s.io/api/core/v1.PodPortForwardOptions": schema_k8sio_api_core_v1_PodPortForwardOptions(ref), + "k8s.io/api/core/v1.PodProxyOptions": schema_k8sio_api_core_v1_PodProxyOptions(ref), + "k8s.io/api/core/v1.PodReadinessGate": schema_k8sio_api_core_v1_PodReadinessGate(ref), + "k8s.io/api/core/v1.PodSecurityContext": schema_k8sio_api_core_v1_PodSecurityContext(ref), + "k8s.io/api/core/v1.PodSignature": schema_k8sio_api_core_v1_PodSignature(ref), + "k8s.io/api/core/v1.PodSpec": schema_k8sio_api_core_v1_PodSpec(ref), + "k8s.io/api/core/v1.PodStatus": schema_k8sio_api_core_v1_PodStatus(ref), + "k8s.io/api/core/v1.PodStatusResult": schema_k8sio_api_core_v1_PodStatusResult(ref), + "k8s.io/api/core/v1.PodTemplate": schema_k8sio_api_core_v1_PodTemplate(ref), + "k8s.io/api/core/v1.PodTemplateList": schema_k8sio_api_core_v1_PodTemplateList(ref), + "k8s.io/api/core/v1.PodTemplateSpec": schema_k8sio_api_core_v1_PodTemplateSpec(ref), + "k8s.io/api/core/v1.PortworxVolumeSource": schema_k8sio_api_core_v1_PortworxVolumeSource(ref), + "k8s.io/api/core/v1.PreferAvoidPodsEntry": schema_k8sio_api_core_v1_PreferAvoidPodsEntry(ref), + "k8s.io/api/core/v1.PreferredSchedulingTerm": schema_k8sio_api_core_v1_PreferredSchedulingTerm(ref), + "k8s.io/api/core/v1.Probe": schema_k8sio_api_core_v1_Probe(ref), + "k8s.io/api/core/v1.ProjectedVolumeSource": schema_k8sio_api_core_v1_ProjectedVolumeSource(ref), + "k8s.io/api/core/v1.QuobyteVolumeSource": schema_k8sio_api_core_v1_QuobyteVolumeSource(ref), + "k8s.io/api/core/v1.RBDPersistentVolumeSource": schema_k8sio_api_core_v1_RBDPersistentVolumeSource(ref), + "k8s.io/api/core/v1.RBDVolumeSource": schema_k8sio_api_core_v1_RBDVolumeSource(ref), + "k8s.io/api/core/v1.RangeAllocation": schema_k8sio_api_core_v1_RangeAllocation(ref), + "k8s.io/api/core/v1.ReplicationController": schema_k8sio_api_core_v1_ReplicationController(ref), + "k8s.io/api/core/v1.ReplicationControllerCondition": schema_k8sio_api_core_v1_ReplicationControllerCondition(ref), + "k8s.io/api/core/v1.ReplicationControllerList": schema_k8sio_api_core_v1_ReplicationControllerList(ref), + "k8s.io/api/core/v1.ReplicationControllerSpec": schema_k8sio_api_core_v1_ReplicationControllerSpec(ref), + "k8s.io/api/core/v1.ReplicationControllerStatus": schema_k8sio_api_core_v1_ReplicationControllerStatus(ref), + "k8s.io/api/core/v1.ResourceFieldSelector": schema_k8sio_api_core_v1_ResourceFieldSelector(ref), + "k8s.io/api/core/v1.ResourceQuota": schema_k8sio_api_core_v1_ResourceQuota(ref), + "k8s.io/api/core/v1.ResourceQuotaList": schema_k8sio_api_core_v1_ResourceQuotaList(ref), + "k8s.io/api/core/v1.ResourceQuotaSpec": schema_k8sio_api_core_v1_ResourceQuotaSpec(ref), + "k8s.io/api/core/v1.ResourceQuotaStatus": schema_k8sio_api_core_v1_ResourceQuotaStatus(ref), + "k8s.io/api/core/v1.ResourceRequirements": schema_k8sio_api_core_v1_ResourceRequirements(ref), + "k8s.io/api/core/v1.SELinuxOptions": schema_k8sio_api_core_v1_SELinuxOptions(ref), + "k8s.io/api/core/v1.ScaleIOPersistentVolumeSource": schema_k8sio_api_core_v1_ScaleIOPersistentVolumeSource(ref), + "k8s.io/api/core/v1.ScaleIOVolumeSource": schema_k8sio_api_core_v1_ScaleIOVolumeSource(ref), + "k8s.io/api/core/v1.ScopeSelector": schema_k8sio_api_core_v1_ScopeSelector(ref), + "k8s.io/api/core/v1.ScopedResourceSelectorRequirement": schema_k8sio_api_core_v1_ScopedResourceSelectorRequirement(ref), + "k8s.io/api/core/v1.SeccompProfile": schema_k8sio_api_core_v1_SeccompProfile(ref), + "k8s.io/api/core/v1.Secret": schema_k8sio_api_core_v1_Secret(ref), + "k8s.io/api/core/v1.SecretEnvSource": schema_k8sio_api_core_v1_SecretEnvSource(ref), + "k8s.io/api/core/v1.SecretKeySelector": schema_k8sio_api_core_v1_SecretKeySelector(ref), + "k8s.io/api/core/v1.SecretList": schema_k8sio_api_core_v1_SecretList(ref), + "k8s.io/api/core/v1.SecretProjection": schema_k8sio_api_core_v1_SecretProjection(ref), + "k8s.io/api/core/v1.SecretReference": schema_k8sio_api_core_v1_SecretReference(ref), + "k8s.io/api/core/v1.SecretVolumeSource": schema_k8sio_api_core_v1_SecretVolumeSource(ref), + "k8s.io/api/core/v1.SecurityContext": schema_k8sio_api_core_v1_SecurityContext(ref), + "k8s.io/api/core/v1.SerializedReference": schema_k8sio_api_core_v1_SerializedReference(ref), + "k8s.io/api/core/v1.Service": schema_k8sio_api_core_v1_Service(ref), + "k8s.io/api/core/v1.ServiceAccount": schema_k8sio_api_core_v1_ServiceAccount(ref), + "k8s.io/api/core/v1.ServiceAccountList": schema_k8sio_api_core_v1_ServiceAccountList(ref), + "k8s.io/api/core/v1.ServiceAccountTokenProjection": schema_k8sio_api_core_v1_ServiceAccountTokenProjection(ref), + "k8s.io/api/core/v1.ServiceList": schema_k8sio_api_core_v1_ServiceList(ref), + "k8s.io/api/core/v1.ServicePort": schema_k8sio_api_core_v1_ServicePort(ref), + "k8s.io/api/core/v1.ServiceProxyOptions": schema_k8sio_api_core_v1_ServiceProxyOptions(ref), + "k8s.io/api/core/v1.ServiceSpec": schema_k8sio_api_core_v1_ServiceSpec(ref), + "k8s.io/api/core/v1.ServiceStatus": schema_k8sio_api_core_v1_ServiceStatus(ref), + "k8s.io/api/core/v1.SessionAffinityConfig": schema_k8sio_api_core_v1_SessionAffinityConfig(ref), + "k8s.io/api/core/v1.StorageOSPersistentVolumeSource": schema_k8sio_api_core_v1_StorageOSPersistentVolumeSource(ref), + "k8s.io/api/core/v1.StorageOSVolumeSource": schema_k8sio_api_core_v1_StorageOSVolumeSource(ref), + "k8s.io/api/core/v1.Sysctl": schema_k8sio_api_core_v1_Sysctl(ref), + "k8s.io/api/core/v1.TCPSocketAction": schema_k8sio_api_core_v1_TCPSocketAction(ref), + "k8s.io/api/core/v1.Taint": schema_k8sio_api_core_v1_Taint(ref), + "k8s.io/api/core/v1.Toleration": schema_k8sio_api_core_v1_Toleration(ref), + "k8s.io/api/core/v1.TopologySelectorLabelRequirement": schema_k8sio_api_core_v1_TopologySelectorLabelRequirement(ref), + "k8s.io/api/core/v1.TopologySelectorTerm": schema_k8sio_api_core_v1_TopologySelectorTerm(ref), + "k8s.io/api/core/v1.TopologySpreadConstraint": schema_k8sio_api_core_v1_TopologySpreadConstraint(ref), + "k8s.io/api/core/v1.TypedLocalObjectReference": schema_k8sio_api_core_v1_TypedLocalObjectReference(ref), + "k8s.io/api/core/v1.Volume": schema_k8sio_api_core_v1_Volume(ref), + "k8s.io/api/core/v1.VolumeDevice": schema_k8sio_api_core_v1_VolumeDevice(ref), + "k8s.io/api/core/v1.VolumeMount": schema_k8sio_api_core_v1_VolumeMount(ref), + "k8s.io/api/core/v1.VolumeNodeAffinity": schema_k8sio_api_core_v1_VolumeNodeAffinity(ref), + "k8s.io/api/core/v1.VolumeProjection": schema_k8sio_api_core_v1_VolumeProjection(ref), + "k8s.io/api/core/v1.VolumeSource": schema_k8sio_api_core_v1_VolumeSource(ref), + "k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource": schema_k8sio_api_core_v1_VsphereVirtualDiskVolumeSource(ref), + "k8s.io/api/core/v1.WeightedPodAffinityTerm": schema_k8sio_api_core_v1_WeightedPodAffinityTerm(ref), + "k8s.io/api/core/v1.WindowsSecurityContextOptions": schema_k8sio_api_core_v1_WindowsSecurityContextOptions(ref), + "k8s.io/api/discovery/v1alpha1.Endpoint": schema_k8sio_api_discovery_v1alpha1_Endpoint(ref), + "k8s.io/api/discovery/v1alpha1.EndpointConditions": schema_k8sio_api_discovery_v1alpha1_EndpointConditions(ref), + "k8s.io/api/discovery/v1alpha1.EndpointPort": schema_k8sio_api_discovery_v1alpha1_EndpointPort(ref), + "k8s.io/api/discovery/v1alpha1.EndpointSlice": schema_k8sio_api_discovery_v1alpha1_EndpointSlice(ref), + "k8s.io/api/discovery/v1alpha1.EndpointSliceList": schema_k8sio_api_discovery_v1alpha1_EndpointSliceList(ref), + "k8s.io/api/discovery/v1beta1.Endpoint": schema_k8sio_api_discovery_v1beta1_Endpoint(ref), + "k8s.io/api/discovery/v1beta1.EndpointConditions": schema_k8sio_api_discovery_v1beta1_EndpointConditions(ref), + "k8s.io/api/discovery/v1beta1.EndpointPort": schema_k8sio_api_discovery_v1beta1_EndpointPort(ref), + "k8s.io/api/discovery/v1beta1.EndpointSlice": schema_k8sio_api_discovery_v1beta1_EndpointSlice(ref), + "k8s.io/api/discovery/v1beta1.EndpointSliceList": schema_k8sio_api_discovery_v1beta1_EndpointSliceList(ref), + "k8s.io/api/events/v1.Event": schema_k8sio_api_events_v1_Event(ref), + "k8s.io/api/events/v1.EventList": schema_k8sio_api_events_v1_EventList(ref), + "k8s.io/api/events/v1.EventSeries": schema_k8sio_api_events_v1_EventSeries(ref), + "k8s.io/api/events/v1beta1.Event": schema_k8sio_api_events_v1beta1_Event(ref), + "k8s.io/api/events/v1beta1.EventList": schema_k8sio_api_events_v1beta1_EventList(ref), + "k8s.io/api/events/v1beta1.EventSeries": schema_k8sio_api_events_v1beta1_EventSeries(ref), + "k8s.io/api/extensions/v1beta1.AllowedCSIDriver": schema_k8sio_api_extensions_v1beta1_AllowedCSIDriver(ref), + "k8s.io/api/extensions/v1beta1.AllowedFlexVolume": schema_k8sio_api_extensions_v1beta1_AllowedFlexVolume(ref), + "k8s.io/api/extensions/v1beta1.AllowedHostPath": schema_k8sio_api_extensions_v1beta1_AllowedHostPath(ref), + "k8s.io/api/extensions/v1beta1.DaemonSet": schema_k8sio_api_extensions_v1beta1_DaemonSet(ref), + "k8s.io/api/extensions/v1beta1.DaemonSetCondition": schema_k8sio_api_extensions_v1beta1_DaemonSetCondition(ref), + "k8s.io/api/extensions/v1beta1.DaemonSetList": schema_k8sio_api_extensions_v1beta1_DaemonSetList(ref), + "k8s.io/api/extensions/v1beta1.DaemonSetSpec": schema_k8sio_api_extensions_v1beta1_DaemonSetSpec(ref), + "k8s.io/api/extensions/v1beta1.DaemonSetStatus": schema_k8sio_api_extensions_v1beta1_DaemonSetStatus(ref), + "k8s.io/api/extensions/v1beta1.DaemonSetUpdateStrategy": schema_k8sio_api_extensions_v1beta1_DaemonSetUpdateStrategy(ref), + "k8s.io/api/extensions/v1beta1.Deployment": schema_k8sio_api_extensions_v1beta1_Deployment(ref), + "k8s.io/api/extensions/v1beta1.DeploymentCondition": schema_k8sio_api_extensions_v1beta1_DeploymentCondition(ref), + "k8s.io/api/extensions/v1beta1.DeploymentList": schema_k8sio_api_extensions_v1beta1_DeploymentList(ref), + "k8s.io/api/extensions/v1beta1.DeploymentRollback": schema_k8sio_api_extensions_v1beta1_DeploymentRollback(ref), + "k8s.io/api/extensions/v1beta1.DeploymentSpec": schema_k8sio_api_extensions_v1beta1_DeploymentSpec(ref), + "k8s.io/api/extensions/v1beta1.DeploymentStatus": schema_k8sio_api_extensions_v1beta1_DeploymentStatus(ref), + "k8s.io/api/extensions/v1beta1.DeploymentStrategy": schema_k8sio_api_extensions_v1beta1_DeploymentStrategy(ref), + "k8s.io/api/extensions/v1beta1.FSGroupStrategyOptions": schema_k8sio_api_extensions_v1beta1_FSGroupStrategyOptions(ref), + "k8s.io/api/extensions/v1beta1.HTTPIngressPath": schema_k8sio_api_extensions_v1beta1_HTTPIngressPath(ref), + "k8s.io/api/extensions/v1beta1.HTTPIngressRuleValue": schema_k8sio_api_extensions_v1beta1_HTTPIngressRuleValue(ref), + "k8s.io/api/extensions/v1beta1.HostPortRange": schema_k8sio_api_extensions_v1beta1_HostPortRange(ref), + "k8s.io/api/extensions/v1beta1.IDRange": schema_k8sio_api_extensions_v1beta1_IDRange(ref), + "k8s.io/api/extensions/v1beta1.IPBlock": schema_k8sio_api_extensions_v1beta1_IPBlock(ref), + "k8s.io/api/extensions/v1beta1.Ingress": schema_k8sio_api_extensions_v1beta1_Ingress(ref), + "k8s.io/api/extensions/v1beta1.IngressBackend": schema_k8sio_api_extensions_v1beta1_IngressBackend(ref), + "k8s.io/api/extensions/v1beta1.IngressList": schema_k8sio_api_extensions_v1beta1_IngressList(ref), + "k8s.io/api/extensions/v1beta1.IngressRule": schema_k8sio_api_extensions_v1beta1_IngressRule(ref), + "k8s.io/api/extensions/v1beta1.IngressRuleValue": schema_k8sio_api_extensions_v1beta1_IngressRuleValue(ref), + "k8s.io/api/extensions/v1beta1.IngressSpec": schema_k8sio_api_extensions_v1beta1_IngressSpec(ref), + "k8s.io/api/extensions/v1beta1.IngressStatus": schema_k8sio_api_extensions_v1beta1_IngressStatus(ref), + "k8s.io/api/extensions/v1beta1.IngressTLS": schema_k8sio_api_extensions_v1beta1_IngressTLS(ref), + "k8s.io/api/extensions/v1beta1.NetworkPolicy": schema_k8sio_api_extensions_v1beta1_NetworkPolicy(ref), + "k8s.io/api/extensions/v1beta1.NetworkPolicyEgressRule": schema_k8sio_api_extensions_v1beta1_NetworkPolicyEgressRule(ref), + "k8s.io/api/extensions/v1beta1.NetworkPolicyIngressRule": schema_k8sio_api_extensions_v1beta1_NetworkPolicyIngressRule(ref), + "k8s.io/api/extensions/v1beta1.NetworkPolicyList": schema_k8sio_api_extensions_v1beta1_NetworkPolicyList(ref), + "k8s.io/api/extensions/v1beta1.NetworkPolicyPeer": schema_k8sio_api_extensions_v1beta1_NetworkPolicyPeer(ref), + "k8s.io/api/extensions/v1beta1.NetworkPolicyPort": schema_k8sio_api_extensions_v1beta1_NetworkPolicyPort(ref), + "k8s.io/api/extensions/v1beta1.NetworkPolicySpec": schema_k8sio_api_extensions_v1beta1_NetworkPolicySpec(ref), + "k8s.io/api/extensions/v1beta1.PodSecurityPolicy": schema_k8sio_api_extensions_v1beta1_PodSecurityPolicy(ref), + "k8s.io/api/extensions/v1beta1.PodSecurityPolicyList": schema_k8sio_api_extensions_v1beta1_PodSecurityPolicyList(ref), + "k8s.io/api/extensions/v1beta1.PodSecurityPolicySpec": schema_k8sio_api_extensions_v1beta1_PodSecurityPolicySpec(ref), + "k8s.io/api/extensions/v1beta1.ReplicaSet": schema_k8sio_api_extensions_v1beta1_ReplicaSet(ref), + "k8s.io/api/extensions/v1beta1.ReplicaSetCondition": schema_k8sio_api_extensions_v1beta1_ReplicaSetCondition(ref), + "k8s.io/api/extensions/v1beta1.ReplicaSetList": schema_k8sio_api_extensions_v1beta1_ReplicaSetList(ref), + "k8s.io/api/extensions/v1beta1.ReplicaSetSpec": schema_k8sio_api_extensions_v1beta1_ReplicaSetSpec(ref), + "k8s.io/api/extensions/v1beta1.ReplicaSetStatus": schema_k8sio_api_extensions_v1beta1_ReplicaSetStatus(ref), + "k8s.io/api/extensions/v1beta1.RollbackConfig": schema_k8sio_api_extensions_v1beta1_RollbackConfig(ref), + "k8s.io/api/extensions/v1beta1.RollingUpdateDaemonSet": schema_k8sio_api_extensions_v1beta1_RollingUpdateDaemonSet(ref), + "k8s.io/api/extensions/v1beta1.RollingUpdateDeployment": schema_k8sio_api_extensions_v1beta1_RollingUpdateDeployment(ref), + "k8s.io/api/extensions/v1beta1.RunAsGroupStrategyOptions": schema_k8sio_api_extensions_v1beta1_RunAsGroupStrategyOptions(ref), + "k8s.io/api/extensions/v1beta1.RunAsUserStrategyOptions": schema_k8sio_api_extensions_v1beta1_RunAsUserStrategyOptions(ref), + "k8s.io/api/extensions/v1beta1.RuntimeClassStrategyOptions": schema_k8sio_api_extensions_v1beta1_RuntimeClassStrategyOptions(ref), + "k8s.io/api/extensions/v1beta1.SELinuxStrategyOptions": schema_k8sio_api_extensions_v1beta1_SELinuxStrategyOptions(ref), + "k8s.io/api/extensions/v1beta1.Scale": schema_k8sio_api_extensions_v1beta1_Scale(ref), + "k8s.io/api/extensions/v1beta1.ScaleSpec": schema_k8sio_api_extensions_v1beta1_ScaleSpec(ref), + "k8s.io/api/extensions/v1beta1.ScaleStatus": schema_k8sio_api_extensions_v1beta1_ScaleStatus(ref), + "k8s.io/api/extensions/v1beta1.SupplementalGroupsStrategyOptions": schema_k8sio_api_extensions_v1beta1_SupplementalGroupsStrategyOptions(ref), + "k8s.io/api/flowcontrol/v1alpha1.FlowDistinguisherMethod": schema_k8sio_api_flowcontrol_v1alpha1_FlowDistinguisherMethod(ref), + "k8s.io/api/flowcontrol/v1alpha1.FlowSchema": schema_k8sio_api_flowcontrol_v1alpha1_FlowSchema(ref), + "k8s.io/api/flowcontrol/v1alpha1.FlowSchemaCondition": schema_k8sio_api_flowcontrol_v1alpha1_FlowSchemaCondition(ref), + "k8s.io/api/flowcontrol/v1alpha1.FlowSchemaList": schema_k8sio_api_flowcontrol_v1alpha1_FlowSchemaList(ref), + "k8s.io/api/flowcontrol/v1alpha1.FlowSchemaSpec": schema_k8sio_api_flowcontrol_v1alpha1_FlowSchemaSpec(ref), + "k8s.io/api/flowcontrol/v1alpha1.FlowSchemaStatus": schema_k8sio_api_flowcontrol_v1alpha1_FlowSchemaStatus(ref), + "k8s.io/api/flowcontrol/v1alpha1.GroupSubject": schema_k8sio_api_flowcontrol_v1alpha1_GroupSubject(ref), + "k8s.io/api/flowcontrol/v1alpha1.LimitResponse": schema_k8sio_api_flowcontrol_v1alpha1_LimitResponse(ref), + "k8s.io/api/flowcontrol/v1alpha1.LimitedPriorityLevelConfiguration": schema_k8sio_api_flowcontrol_v1alpha1_LimitedPriorityLevelConfiguration(ref), + "k8s.io/api/flowcontrol/v1alpha1.NonResourcePolicyRule": schema_k8sio_api_flowcontrol_v1alpha1_NonResourcePolicyRule(ref), + "k8s.io/api/flowcontrol/v1alpha1.PolicyRulesWithSubjects": schema_k8sio_api_flowcontrol_v1alpha1_PolicyRulesWithSubjects(ref), + "k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfiguration": schema_k8sio_api_flowcontrol_v1alpha1_PriorityLevelConfiguration(ref), + "k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfigurationCondition": schema_k8sio_api_flowcontrol_v1alpha1_PriorityLevelConfigurationCondition(ref), + "k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfigurationList": schema_k8sio_api_flowcontrol_v1alpha1_PriorityLevelConfigurationList(ref), + "k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfigurationReference": schema_k8sio_api_flowcontrol_v1alpha1_PriorityLevelConfigurationReference(ref), + "k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfigurationSpec": schema_k8sio_api_flowcontrol_v1alpha1_PriorityLevelConfigurationSpec(ref), + "k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfigurationStatus": schema_k8sio_api_flowcontrol_v1alpha1_PriorityLevelConfigurationStatus(ref), + "k8s.io/api/flowcontrol/v1alpha1.QueuingConfiguration": schema_k8sio_api_flowcontrol_v1alpha1_QueuingConfiguration(ref), + "k8s.io/api/flowcontrol/v1alpha1.ResourcePolicyRule": schema_k8sio_api_flowcontrol_v1alpha1_ResourcePolicyRule(ref), + "k8s.io/api/flowcontrol/v1alpha1.ServiceAccountSubject": schema_k8sio_api_flowcontrol_v1alpha1_ServiceAccountSubject(ref), + "k8s.io/api/flowcontrol/v1alpha1.Subject": schema_k8sio_api_flowcontrol_v1alpha1_Subject(ref), + "k8s.io/api/flowcontrol/v1alpha1.UserSubject": schema_k8sio_api_flowcontrol_v1alpha1_UserSubject(ref), + "k8s.io/api/imagepolicy/v1alpha1.ImageReview": schema_k8sio_api_imagepolicy_v1alpha1_ImageReview(ref), + "k8s.io/api/imagepolicy/v1alpha1.ImageReviewContainerSpec": schema_k8sio_api_imagepolicy_v1alpha1_ImageReviewContainerSpec(ref), + "k8s.io/api/imagepolicy/v1alpha1.ImageReviewSpec": schema_k8sio_api_imagepolicy_v1alpha1_ImageReviewSpec(ref), + "k8s.io/api/imagepolicy/v1alpha1.ImageReviewStatus": schema_k8sio_api_imagepolicy_v1alpha1_ImageReviewStatus(ref), + "k8s.io/api/networking/v1.HTTPIngressPath": schema_k8sio_api_networking_v1_HTTPIngressPath(ref), + "k8s.io/api/networking/v1.HTTPIngressRuleValue": schema_k8sio_api_networking_v1_HTTPIngressRuleValue(ref), + "k8s.io/api/networking/v1.IPBlock": schema_k8sio_api_networking_v1_IPBlock(ref), + "k8s.io/api/networking/v1.Ingress": schema_k8sio_api_networking_v1_Ingress(ref), + "k8s.io/api/networking/v1.IngressBackend": schema_k8sio_api_networking_v1_IngressBackend(ref), + "k8s.io/api/networking/v1.IngressClass": schema_k8sio_api_networking_v1_IngressClass(ref), + "k8s.io/api/networking/v1.IngressClassList": schema_k8sio_api_networking_v1_IngressClassList(ref), + "k8s.io/api/networking/v1.IngressClassSpec": schema_k8sio_api_networking_v1_IngressClassSpec(ref), + "k8s.io/api/networking/v1.IngressList": schema_k8sio_api_networking_v1_IngressList(ref), + "k8s.io/api/networking/v1.IngressRule": schema_k8sio_api_networking_v1_IngressRule(ref), + "k8s.io/api/networking/v1.IngressRuleValue": schema_k8sio_api_networking_v1_IngressRuleValue(ref), + "k8s.io/api/networking/v1.IngressServiceBackend": schema_k8sio_api_networking_v1_IngressServiceBackend(ref), + "k8s.io/api/networking/v1.IngressSpec": schema_k8sio_api_networking_v1_IngressSpec(ref), + "k8s.io/api/networking/v1.IngressStatus": schema_k8sio_api_networking_v1_IngressStatus(ref), + "k8s.io/api/networking/v1.IngressTLS": schema_k8sio_api_networking_v1_IngressTLS(ref), + "k8s.io/api/networking/v1.NetworkPolicy": schema_k8sio_api_networking_v1_NetworkPolicy(ref), + "k8s.io/api/networking/v1.NetworkPolicyEgressRule": schema_k8sio_api_networking_v1_NetworkPolicyEgressRule(ref), + "k8s.io/api/networking/v1.NetworkPolicyIngressRule": schema_k8sio_api_networking_v1_NetworkPolicyIngressRule(ref), + "k8s.io/api/networking/v1.NetworkPolicyList": schema_k8sio_api_networking_v1_NetworkPolicyList(ref), + "k8s.io/api/networking/v1.NetworkPolicyPeer": schema_k8sio_api_networking_v1_NetworkPolicyPeer(ref), + "k8s.io/api/networking/v1.NetworkPolicyPort": schema_k8sio_api_networking_v1_NetworkPolicyPort(ref), + "k8s.io/api/networking/v1.NetworkPolicySpec": schema_k8sio_api_networking_v1_NetworkPolicySpec(ref), + "k8s.io/api/networking/v1.ServiceBackendPort": schema_k8sio_api_networking_v1_ServiceBackendPort(ref), + "k8s.io/api/networking/v1beta1.HTTPIngressPath": schema_k8sio_api_networking_v1beta1_HTTPIngressPath(ref), + "k8s.io/api/networking/v1beta1.HTTPIngressRuleValue": schema_k8sio_api_networking_v1beta1_HTTPIngressRuleValue(ref), + "k8s.io/api/networking/v1beta1.Ingress": schema_k8sio_api_networking_v1beta1_Ingress(ref), + "k8s.io/api/networking/v1beta1.IngressBackend": schema_k8sio_api_networking_v1beta1_IngressBackend(ref), + "k8s.io/api/networking/v1beta1.IngressClass": schema_k8sio_api_networking_v1beta1_IngressClass(ref), + "k8s.io/api/networking/v1beta1.IngressClassList": schema_k8sio_api_networking_v1beta1_IngressClassList(ref), + "k8s.io/api/networking/v1beta1.IngressClassSpec": schema_k8sio_api_networking_v1beta1_IngressClassSpec(ref), + "k8s.io/api/networking/v1beta1.IngressList": schema_k8sio_api_networking_v1beta1_IngressList(ref), + "k8s.io/api/networking/v1beta1.IngressRule": schema_k8sio_api_networking_v1beta1_IngressRule(ref), + "k8s.io/api/networking/v1beta1.IngressRuleValue": schema_k8sio_api_networking_v1beta1_IngressRuleValue(ref), + "k8s.io/api/networking/v1beta1.IngressSpec": schema_k8sio_api_networking_v1beta1_IngressSpec(ref), + "k8s.io/api/networking/v1beta1.IngressStatus": schema_k8sio_api_networking_v1beta1_IngressStatus(ref), + "k8s.io/api/networking/v1beta1.IngressTLS": schema_k8sio_api_networking_v1beta1_IngressTLS(ref), + "k8s.io/api/node/v1alpha1.Overhead": schema_k8sio_api_node_v1alpha1_Overhead(ref), + "k8s.io/api/node/v1alpha1.RuntimeClass": schema_k8sio_api_node_v1alpha1_RuntimeClass(ref), + "k8s.io/api/node/v1alpha1.RuntimeClassList": schema_k8sio_api_node_v1alpha1_RuntimeClassList(ref), + "k8s.io/api/node/v1alpha1.RuntimeClassSpec": schema_k8sio_api_node_v1alpha1_RuntimeClassSpec(ref), + "k8s.io/api/node/v1alpha1.Scheduling": schema_k8sio_api_node_v1alpha1_Scheduling(ref), + "k8s.io/api/node/v1beta1.Overhead": schema_k8sio_api_node_v1beta1_Overhead(ref), + "k8s.io/api/node/v1beta1.RuntimeClass": schema_k8sio_api_node_v1beta1_RuntimeClass(ref), + "k8s.io/api/node/v1beta1.RuntimeClassList": schema_k8sio_api_node_v1beta1_RuntimeClassList(ref), + "k8s.io/api/node/v1beta1.Scheduling": schema_k8sio_api_node_v1beta1_Scheduling(ref), + "k8s.io/api/policy/v1beta1.AllowedCSIDriver": schema_k8sio_api_policy_v1beta1_AllowedCSIDriver(ref), + "k8s.io/api/policy/v1beta1.AllowedFlexVolume": schema_k8sio_api_policy_v1beta1_AllowedFlexVolume(ref), + "k8s.io/api/policy/v1beta1.AllowedHostPath": schema_k8sio_api_policy_v1beta1_AllowedHostPath(ref), + "k8s.io/api/policy/v1beta1.Eviction": schema_k8sio_api_policy_v1beta1_Eviction(ref), + "k8s.io/api/policy/v1beta1.FSGroupStrategyOptions": schema_k8sio_api_policy_v1beta1_FSGroupStrategyOptions(ref), + "k8s.io/api/policy/v1beta1.HostPortRange": schema_k8sio_api_policy_v1beta1_HostPortRange(ref), + "k8s.io/api/policy/v1beta1.IDRange": schema_k8sio_api_policy_v1beta1_IDRange(ref), + "k8s.io/api/policy/v1beta1.PodDisruptionBudget": schema_k8sio_api_policy_v1beta1_PodDisruptionBudget(ref), + "k8s.io/api/policy/v1beta1.PodDisruptionBudgetList": schema_k8sio_api_policy_v1beta1_PodDisruptionBudgetList(ref), + "k8s.io/api/policy/v1beta1.PodDisruptionBudgetSpec": schema_k8sio_api_policy_v1beta1_PodDisruptionBudgetSpec(ref), + "k8s.io/api/policy/v1beta1.PodDisruptionBudgetStatus": schema_k8sio_api_policy_v1beta1_PodDisruptionBudgetStatus(ref), + "k8s.io/api/policy/v1beta1.PodSecurityPolicy": schema_k8sio_api_policy_v1beta1_PodSecurityPolicy(ref), + "k8s.io/api/policy/v1beta1.PodSecurityPolicyList": schema_k8sio_api_policy_v1beta1_PodSecurityPolicyList(ref), + "k8s.io/api/policy/v1beta1.PodSecurityPolicySpec": schema_k8sio_api_policy_v1beta1_PodSecurityPolicySpec(ref), + "k8s.io/api/policy/v1beta1.RunAsGroupStrategyOptions": schema_k8sio_api_policy_v1beta1_RunAsGroupStrategyOptions(ref), + "k8s.io/api/policy/v1beta1.RunAsUserStrategyOptions": schema_k8sio_api_policy_v1beta1_RunAsUserStrategyOptions(ref), + "k8s.io/api/policy/v1beta1.RuntimeClassStrategyOptions": schema_k8sio_api_policy_v1beta1_RuntimeClassStrategyOptions(ref), + "k8s.io/api/policy/v1beta1.SELinuxStrategyOptions": schema_k8sio_api_policy_v1beta1_SELinuxStrategyOptions(ref), + "k8s.io/api/policy/v1beta1.SupplementalGroupsStrategyOptions": schema_k8sio_api_policy_v1beta1_SupplementalGroupsStrategyOptions(ref), + "k8s.io/api/rbac/v1.AggregationRule": schema_k8sio_api_rbac_v1_AggregationRule(ref), + "k8s.io/api/rbac/v1.ClusterRole": schema_k8sio_api_rbac_v1_ClusterRole(ref), + "k8s.io/api/rbac/v1.ClusterRoleBinding": schema_k8sio_api_rbac_v1_ClusterRoleBinding(ref), + "k8s.io/api/rbac/v1.ClusterRoleBindingList": schema_k8sio_api_rbac_v1_ClusterRoleBindingList(ref), + "k8s.io/api/rbac/v1.ClusterRoleList": schema_k8sio_api_rbac_v1_ClusterRoleList(ref), + "k8s.io/api/rbac/v1.PolicyRule": schema_k8sio_api_rbac_v1_PolicyRule(ref), + "k8s.io/api/rbac/v1.Role": schema_k8sio_api_rbac_v1_Role(ref), + "k8s.io/api/rbac/v1.RoleBinding": schema_k8sio_api_rbac_v1_RoleBinding(ref), + "k8s.io/api/rbac/v1.RoleBindingList": schema_k8sio_api_rbac_v1_RoleBindingList(ref), + "k8s.io/api/rbac/v1.RoleList": schema_k8sio_api_rbac_v1_RoleList(ref), + "k8s.io/api/rbac/v1.RoleRef": schema_k8sio_api_rbac_v1_RoleRef(ref), + "k8s.io/api/rbac/v1.Subject": schema_k8sio_api_rbac_v1_Subject(ref), + "k8s.io/api/rbac/v1alpha1.AggregationRule": schema_k8sio_api_rbac_v1alpha1_AggregationRule(ref), + "k8s.io/api/rbac/v1alpha1.ClusterRole": schema_k8sio_api_rbac_v1alpha1_ClusterRole(ref), + "k8s.io/api/rbac/v1alpha1.ClusterRoleBinding": schema_k8sio_api_rbac_v1alpha1_ClusterRoleBinding(ref), + "k8s.io/api/rbac/v1alpha1.ClusterRoleBindingList": schema_k8sio_api_rbac_v1alpha1_ClusterRoleBindingList(ref), + "k8s.io/api/rbac/v1alpha1.ClusterRoleList": schema_k8sio_api_rbac_v1alpha1_ClusterRoleList(ref), + "k8s.io/api/rbac/v1alpha1.PolicyRule": schema_k8sio_api_rbac_v1alpha1_PolicyRule(ref), + "k8s.io/api/rbac/v1alpha1.Role": schema_k8sio_api_rbac_v1alpha1_Role(ref), + "k8s.io/api/rbac/v1alpha1.RoleBinding": schema_k8sio_api_rbac_v1alpha1_RoleBinding(ref), + "k8s.io/api/rbac/v1alpha1.RoleBindingList": schema_k8sio_api_rbac_v1alpha1_RoleBindingList(ref), + "k8s.io/api/rbac/v1alpha1.RoleList": schema_k8sio_api_rbac_v1alpha1_RoleList(ref), + "k8s.io/api/rbac/v1alpha1.RoleRef": schema_k8sio_api_rbac_v1alpha1_RoleRef(ref), + "k8s.io/api/rbac/v1alpha1.Subject": schema_k8sio_api_rbac_v1alpha1_Subject(ref), + "k8s.io/api/rbac/v1beta1.AggregationRule": schema_k8sio_api_rbac_v1beta1_AggregationRule(ref), + "k8s.io/api/rbac/v1beta1.ClusterRole": schema_k8sio_api_rbac_v1beta1_ClusterRole(ref), + "k8s.io/api/rbac/v1beta1.ClusterRoleBinding": schema_k8sio_api_rbac_v1beta1_ClusterRoleBinding(ref), + "k8s.io/api/rbac/v1beta1.ClusterRoleBindingList": schema_k8sio_api_rbac_v1beta1_ClusterRoleBindingList(ref), + "k8s.io/api/rbac/v1beta1.ClusterRoleList": schema_k8sio_api_rbac_v1beta1_ClusterRoleList(ref), + "k8s.io/api/rbac/v1beta1.PolicyRule": schema_k8sio_api_rbac_v1beta1_PolicyRule(ref), + "k8s.io/api/rbac/v1beta1.Role": schema_k8sio_api_rbac_v1beta1_Role(ref), + "k8s.io/api/rbac/v1beta1.RoleBinding": schema_k8sio_api_rbac_v1beta1_RoleBinding(ref), + "k8s.io/api/rbac/v1beta1.RoleBindingList": schema_k8sio_api_rbac_v1beta1_RoleBindingList(ref), + "k8s.io/api/rbac/v1beta1.RoleList": schema_k8sio_api_rbac_v1beta1_RoleList(ref), + "k8s.io/api/rbac/v1beta1.RoleRef": schema_k8sio_api_rbac_v1beta1_RoleRef(ref), + "k8s.io/api/rbac/v1beta1.Subject": schema_k8sio_api_rbac_v1beta1_Subject(ref), + "k8s.io/api/scheduling/v1.PriorityClass": schema_k8sio_api_scheduling_v1_PriorityClass(ref), + "k8s.io/api/scheduling/v1.PriorityClassList": schema_k8sio_api_scheduling_v1_PriorityClassList(ref), + "k8s.io/api/scheduling/v1alpha1.PriorityClass": schema_k8sio_api_scheduling_v1alpha1_PriorityClass(ref), + "k8s.io/api/scheduling/v1alpha1.PriorityClassList": schema_k8sio_api_scheduling_v1alpha1_PriorityClassList(ref), + "k8s.io/api/scheduling/v1beta1.PriorityClass": schema_k8sio_api_scheduling_v1beta1_PriorityClass(ref), + "k8s.io/api/scheduling/v1beta1.PriorityClassList": schema_k8sio_api_scheduling_v1beta1_PriorityClassList(ref), + "k8s.io/api/settings/v1alpha1.PodPreset": schema_k8sio_api_settings_v1alpha1_PodPreset(ref), + "k8s.io/api/settings/v1alpha1.PodPresetList": schema_k8sio_api_settings_v1alpha1_PodPresetList(ref), + "k8s.io/api/settings/v1alpha1.PodPresetSpec": schema_k8sio_api_settings_v1alpha1_PodPresetSpec(ref), + "k8s.io/api/storage/v1.CSIDriver": schema_k8sio_api_storage_v1_CSIDriver(ref), + "k8s.io/api/storage/v1.CSIDriverList": schema_k8sio_api_storage_v1_CSIDriverList(ref), + "k8s.io/api/storage/v1.CSIDriverSpec": schema_k8sio_api_storage_v1_CSIDriverSpec(ref), + "k8s.io/api/storage/v1.CSINode": schema_k8sio_api_storage_v1_CSINode(ref), + "k8s.io/api/storage/v1.CSINodeDriver": schema_k8sio_api_storage_v1_CSINodeDriver(ref), + "k8s.io/api/storage/v1.CSINodeList": schema_k8sio_api_storage_v1_CSINodeList(ref), + "k8s.io/api/storage/v1.CSINodeSpec": schema_k8sio_api_storage_v1_CSINodeSpec(ref), + "k8s.io/api/storage/v1.StorageClass": schema_k8sio_api_storage_v1_StorageClass(ref), + "k8s.io/api/storage/v1.StorageClassList": schema_k8sio_api_storage_v1_StorageClassList(ref), + "k8s.io/api/storage/v1.VolumeAttachment": schema_k8sio_api_storage_v1_VolumeAttachment(ref), + "k8s.io/api/storage/v1.VolumeAttachmentList": schema_k8sio_api_storage_v1_VolumeAttachmentList(ref), + "k8s.io/api/storage/v1.VolumeAttachmentSource": schema_k8sio_api_storage_v1_VolumeAttachmentSource(ref), + "k8s.io/api/storage/v1.VolumeAttachmentSpec": schema_k8sio_api_storage_v1_VolumeAttachmentSpec(ref), + "k8s.io/api/storage/v1.VolumeAttachmentStatus": schema_k8sio_api_storage_v1_VolumeAttachmentStatus(ref), + "k8s.io/api/storage/v1.VolumeError": schema_k8sio_api_storage_v1_VolumeError(ref), + "k8s.io/api/storage/v1.VolumeNodeResources": schema_k8sio_api_storage_v1_VolumeNodeResources(ref), + "k8s.io/api/storage/v1alpha1.CSIStorageCapacity": schema_k8sio_api_storage_v1alpha1_CSIStorageCapacity(ref), + "k8s.io/api/storage/v1alpha1.CSIStorageCapacityList": schema_k8sio_api_storage_v1alpha1_CSIStorageCapacityList(ref), + "k8s.io/api/storage/v1alpha1.VolumeAttachment": schema_k8sio_api_storage_v1alpha1_VolumeAttachment(ref), + "k8s.io/api/storage/v1alpha1.VolumeAttachmentList": schema_k8sio_api_storage_v1alpha1_VolumeAttachmentList(ref), + "k8s.io/api/storage/v1alpha1.VolumeAttachmentSource": schema_k8sio_api_storage_v1alpha1_VolumeAttachmentSource(ref), + "k8s.io/api/storage/v1alpha1.VolumeAttachmentSpec": schema_k8sio_api_storage_v1alpha1_VolumeAttachmentSpec(ref), + "k8s.io/api/storage/v1alpha1.VolumeAttachmentStatus": schema_k8sio_api_storage_v1alpha1_VolumeAttachmentStatus(ref), + "k8s.io/api/storage/v1alpha1.VolumeError": schema_k8sio_api_storage_v1alpha1_VolumeError(ref), + "k8s.io/api/storage/v1beta1.CSIDriver": schema_k8sio_api_storage_v1beta1_CSIDriver(ref), + "k8s.io/api/storage/v1beta1.CSIDriverList": schema_k8sio_api_storage_v1beta1_CSIDriverList(ref), + "k8s.io/api/storage/v1beta1.CSIDriverSpec": schema_k8sio_api_storage_v1beta1_CSIDriverSpec(ref), + "k8s.io/api/storage/v1beta1.CSINode": schema_k8sio_api_storage_v1beta1_CSINode(ref), + "k8s.io/api/storage/v1beta1.CSINodeDriver": schema_k8sio_api_storage_v1beta1_CSINodeDriver(ref), + "k8s.io/api/storage/v1beta1.CSINodeList": schema_k8sio_api_storage_v1beta1_CSINodeList(ref), + "k8s.io/api/storage/v1beta1.CSINodeSpec": schema_k8sio_api_storage_v1beta1_CSINodeSpec(ref), + "k8s.io/api/storage/v1beta1.StorageClass": schema_k8sio_api_storage_v1beta1_StorageClass(ref), + "k8s.io/api/storage/v1beta1.StorageClassList": schema_k8sio_api_storage_v1beta1_StorageClassList(ref), + "k8s.io/api/storage/v1beta1.VolumeAttachment": schema_k8sio_api_storage_v1beta1_VolumeAttachment(ref), + "k8s.io/api/storage/v1beta1.VolumeAttachmentList": schema_k8sio_api_storage_v1beta1_VolumeAttachmentList(ref), + "k8s.io/api/storage/v1beta1.VolumeAttachmentSource": schema_k8sio_api_storage_v1beta1_VolumeAttachmentSource(ref), + "k8s.io/api/storage/v1beta1.VolumeAttachmentSpec": schema_k8sio_api_storage_v1beta1_VolumeAttachmentSpec(ref), + "k8s.io/api/storage/v1beta1.VolumeAttachmentStatus": schema_k8sio_api_storage_v1beta1_VolumeAttachmentStatus(ref), + "k8s.io/api/storage/v1beta1.VolumeError": schema_k8sio_api_storage_v1beta1_VolumeError(ref), + "k8s.io/api/storage/v1beta1.VolumeNodeResources": schema_k8sio_api_storage_v1beta1_VolumeNodeResources(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.ConversionRequest": schema_pkg_apis_apiextensions_v1_ConversionRequest(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.ConversionResponse": schema_pkg_apis_apiextensions_v1_ConversionResponse(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.ConversionReview": schema_pkg_apis_apiextensions_v1_ConversionReview(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceColumnDefinition": schema_pkg_apis_apiextensions_v1_CustomResourceColumnDefinition(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceConversion": schema_pkg_apis_apiextensions_v1_CustomResourceConversion(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinition": schema_pkg_apis_apiextensions_v1_CustomResourceDefinition(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionCondition": schema_pkg_apis_apiextensions_v1_CustomResourceDefinitionCondition(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionList": schema_pkg_apis_apiextensions_v1_CustomResourceDefinitionList(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionNames": schema_pkg_apis_apiextensions_v1_CustomResourceDefinitionNames(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionSpec": schema_pkg_apis_apiextensions_v1_CustomResourceDefinitionSpec(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionStatus": schema_pkg_apis_apiextensions_v1_CustomResourceDefinitionStatus(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionVersion": schema_pkg_apis_apiextensions_v1_CustomResourceDefinitionVersion(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceSubresourceScale": schema_pkg_apis_apiextensions_v1_CustomResourceSubresourceScale(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceSubresourceStatus": schema_pkg_apis_apiextensions_v1_CustomResourceSubresourceStatus(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceSubresources": schema_pkg_apis_apiextensions_v1_CustomResourceSubresources(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceValidation": schema_pkg_apis_apiextensions_v1_CustomResourceValidation(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.ExternalDocumentation": schema_pkg_apis_apiextensions_v1_ExternalDocumentation(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON": schema_pkg_apis_apiextensions_v1_JSON(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaProps": schema_pkg_apis_apiextensions_v1_JSONSchemaProps(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaPropsOrArray": schema_pkg_apis_apiextensions_v1_JSONSchemaPropsOrArray(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaPropsOrBool": schema_pkg_apis_apiextensions_v1_JSONSchemaPropsOrBool(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaPropsOrStringArray": schema_pkg_apis_apiextensions_v1_JSONSchemaPropsOrStringArray(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.ServiceReference": schema_pkg_apis_apiextensions_v1_ServiceReference(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.WebhookClientConfig": schema_pkg_apis_apiextensions_v1_WebhookClientConfig(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.WebhookConversion": schema_pkg_apis_apiextensions_v1_WebhookConversion(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ConversionRequest": schema_pkg_apis_apiextensions_v1beta1_ConversionRequest(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ConversionResponse": schema_pkg_apis_apiextensions_v1beta1_ConversionResponse(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ConversionReview": schema_pkg_apis_apiextensions_v1beta1_ConversionReview(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceColumnDefinition": schema_pkg_apis_apiextensions_v1beta1_CustomResourceColumnDefinition(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceConversion": schema_pkg_apis_apiextensions_v1beta1_CustomResourceConversion(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinition": schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinition(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionCondition": schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionCondition(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionList": schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionList(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionNames": schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionNames(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionSpec": schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionSpec(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionStatus": schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionStatus(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionVersion": schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionVersion(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresourceScale": schema_pkg_apis_apiextensions_v1beta1_CustomResourceSubresourceScale(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresourceStatus": schema_pkg_apis_apiextensions_v1beta1_CustomResourceSubresourceStatus(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresources": schema_pkg_apis_apiextensions_v1beta1_CustomResourceSubresources(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceValidation": schema_pkg_apis_apiextensions_v1beta1_CustomResourceValidation(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ExternalDocumentation": schema_pkg_apis_apiextensions_v1beta1_ExternalDocumentation(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSON": schema_pkg_apis_apiextensions_v1beta1_JSON(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps": schema_pkg_apis_apiextensions_v1beta1_JSONSchemaProps(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrArray": schema_pkg_apis_apiextensions_v1beta1_JSONSchemaPropsOrArray(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrBool": schema_pkg_apis_apiextensions_v1beta1_JSONSchemaPropsOrBool(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrStringArray": schema_pkg_apis_apiextensions_v1beta1_JSONSchemaPropsOrStringArray(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ServiceReference": schema_pkg_apis_apiextensions_v1beta1_ServiceReference(ref), + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.WebhookClientConfig": schema_pkg_apis_apiextensions_v1beta1_WebhookClientConfig(ref), + "k8s.io/apimachinery/pkg/api/resource.Quantity": schema_apimachinery_pkg_api_resource_Quantity(ref), + "k8s.io/apimachinery/pkg/api/resource.int64Amount": schema_apimachinery_pkg_api_resource_int64Amount(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.APIGroup": schema_pkg_apis_meta_v1_APIGroup(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.APIGroupList": schema_pkg_apis_meta_v1_APIGroupList(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.APIResource": schema_pkg_apis_meta_v1_APIResource(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.APIResourceList": schema_pkg_apis_meta_v1_APIResourceList(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.APIVersions": schema_pkg_apis_meta_v1_APIVersions(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.Condition": schema_pkg_apis_meta_v1_Condition(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.CreateOptions": schema_pkg_apis_meta_v1_CreateOptions(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.DeleteOptions": schema_pkg_apis_meta_v1_DeleteOptions(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration": schema_pkg_apis_meta_v1_Duration(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.ExportOptions": schema_pkg_apis_meta_v1_ExportOptions(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.FieldsV1": schema_pkg_apis_meta_v1_FieldsV1(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.GetOptions": schema_pkg_apis_meta_v1_GetOptions(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.GroupKind": schema_pkg_apis_meta_v1_GroupKind(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.GroupResource": schema_pkg_apis_meta_v1_GroupResource(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersion": schema_pkg_apis_meta_v1_GroupVersion(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionForDiscovery": schema_pkg_apis_meta_v1_GroupVersionForDiscovery(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionKind": schema_pkg_apis_meta_v1_GroupVersionKind(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionResource": schema_pkg_apis_meta_v1_GroupVersionResource(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.InternalEvent": schema_pkg_apis_meta_v1_InternalEvent(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector": schema_pkg_apis_meta_v1_LabelSelector(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelectorRequirement": schema_pkg_apis_meta_v1_LabelSelectorRequirement(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.List": schema_pkg_apis_meta_v1_List(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta": schema_pkg_apis_meta_v1_ListMeta(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.ListOptions": schema_pkg_apis_meta_v1_ListOptions(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry": schema_pkg_apis_meta_v1_ManagedFieldsEntry(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime": schema_pkg_apis_meta_v1_MicroTime(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta": schema_pkg_apis_meta_v1_ObjectMeta(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference": schema_pkg_apis_meta_v1_OwnerReference(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.PartialObjectMetadata": schema_pkg_apis_meta_v1_PartialObjectMetadata(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.PartialObjectMetadataList": schema_pkg_apis_meta_v1_PartialObjectMetadataList(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.Patch": schema_pkg_apis_meta_v1_Patch(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.PatchOptions": schema_pkg_apis_meta_v1_PatchOptions(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.Preconditions": schema_pkg_apis_meta_v1_Preconditions(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.RootPaths": schema_pkg_apis_meta_v1_RootPaths(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.ServerAddressByClientCIDR": schema_pkg_apis_meta_v1_ServerAddressByClientCIDR(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.Status": schema_pkg_apis_meta_v1_Status(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.StatusCause": schema_pkg_apis_meta_v1_StatusCause(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.StatusDetails": schema_pkg_apis_meta_v1_StatusDetails(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.Table": schema_pkg_apis_meta_v1_Table(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.TableColumnDefinition": schema_pkg_apis_meta_v1_TableColumnDefinition(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.TableOptions": schema_pkg_apis_meta_v1_TableOptions(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.TableRow": schema_pkg_apis_meta_v1_TableRow(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.TableRowCondition": schema_pkg_apis_meta_v1_TableRowCondition(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.Time": schema_pkg_apis_meta_v1_Time(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.Timestamp": schema_pkg_apis_meta_v1_Timestamp(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta": schema_pkg_apis_meta_v1_TypeMeta(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.UpdateOptions": schema_pkg_apis_meta_v1_UpdateOptions(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.WatchEvent": schema_pkg_apis_meta_v1_WatchEvent(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1beta1.PartialObjectMetadataList": schema_pkg_apis_meta_v1beta1_PartialObjectMetadataList(ref), + "k8s.io/apimachinery/pkg/runtime.RawExtension": schema_k8sio_apimachinery_pkg_runtime_RawExtension(ref), + "k8s.io/apimachinery/pkg/runtime.TypeMeta": schema_k8sio_apimachinery_pkg_runtime_TypeMeta(ref), + "k8s.io/apimachinery/pkg/runtime.Unknown": schema_k8sio_apimachinery_pkg_runtime_Unknown(ref), + "k8s.io/apimachinery/pkg/util/intstr.IntOrString": schema_apimachinery_pkg_util_intstr_IntOrString(ref), + "k8s.io/apimachinery/pkg/version.Info": schema_k8sio_apimachinery_pkg_version_Info(ref), + "k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.ServerStorageVersion": schema_pkg_apis_apiserverinternal_v1alpha1_ServerStorageVersion(ref), + "k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.StorageVersion": schema_pkg_apis_apiserverinternal_v1alpha1_StorageVersion(ref), + "k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.StorageVersionCondition": schema_pkg_apis_apiserverinternal_v1alpha1_StorageVersionCondition(ref), + "k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.StorageVersionList": schema_pkg_apis_apiserverinternal_v1alpha1_StorageVersionList(ref), + "k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.StorageVersionSpec": schema_pkg_apis_apiserverinternal_v1alpha1_StorageVersionSpec(ref), + "k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.StorageVersionStatus": schema_pkg_apis_apiserverinternal_v1alpha1_StorageVersionStatus(ref), + "k8s.io/apiserver/pkg/apis/audit/v1.Event": schema_pkg_apis_audit_v1_Event(ref), + "k8s.io/apiserver/pkg/apis/audit/v1.EventList": schema_pkg_apis_audit_v1_EventList(ref), + "k8s.io/apiserver/pkg/apis/audit/v1.GroupResources": schema_pkg_apis_audit_v1_GroupResources(ref), + "k8s.io/apiserver/pkg/apis/audit/v1.ObjectReference": schema_pkg_apis_audit_v1_ObjectReference(ref), + "k8s.io/apiserver/pkg/apis/audit/v1.Policy": schema_pkg_apis_audit_v1_Policy(ref), + "k8s.io/apiserver/pkg/apis/audit/v1.PolicyList": schema_pkg_apis_audit_v1_PolicyList(ref), + "k8s.io/apiserver/pkg/apis/audit/v1.PolicyRule": schema_pkg_apis_audit_v1_PolicyRule(ref), + "k8s.io/apiserver/pkg/apis/audit/v1alpha1.Event": schema_pkg_apis_audit_v1alpha1_Event(ref), + "k8s.io/apiserver/pkg/apis/audit/v1alpha1.EventList": schema_pkg_apis_audit_v1alpha1_EventList(ref), + "k8s.io/apiserver/pkg/apis/audit/v1alpha1.GroupResources": schema_pkg_apis_audit_v1alpha1_GroupResources(ref), + "k8s.io/apiserver/pkg/apis/audit/v1alpha1.ObjectReference": schema_pkg_apis_audit_v1alpha1_ObjectReference(ref), + "k8s.io/apiserver/pkg/apis/audit/v1alpha1.Policy": schema_pkg_apis_audit_v1alpha1_Policy(ref), + "k8s.io/apiserver/pkg/apis/audit/v1alpha1.PolicyList": schema_pkg_apis_audit_v1alpha1_PolicyList(ref), + "k8s.io/apiserver/pkg/apis/audit/v1alpha1.PolicyRule": schema_pkg_apis_audit_v1alpha1_PolicyRule(ref), + "k8s.io/apiserver/pkg/apis/audit/v1beta1.Event": schema_pkg_apis_audit_v1beta1_Event(ref), + "k8s.io/apiserver/pkg/apis/audit/v1beta1.EventList": schema_pkg_apis_audit_v1beta1_EventList(ref), + "k8s.io/apiserver/pkg/apis/audit/v1beta1.GroupResources": schema_pkg_apis_audit_v1beta1_GroupResources(ref), + "k8s.io/apiserver/pkg/apis/audit/v1beta1.ObjectReference": schema_pkg_apis_audit_v1beta1_ObjectReference(ref), + "k8s.io/apiserver/pkg/apis/audit/v1beta1.Policy": schema_pkg_apis_audit_v1beta1_Policy(ref), + "k8s.io/apiserver/pkg/apis/audit/v1beta1.PolicyList": schema_pkg_apis_audit_v1beta1_PolicyList(ref), + "k8s.io/apiserver/pkg/apis/audit/v1beta1.PolicyRule": schema_pkg_apis_audit_v1beta1_PolicyRule(ref), + "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.ExecCredential": schema_pkg_apis_clientauthentication_v1alpha1_ExecCredential(ref), + "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.ExecCredentialSpec": schema_pkg_apis_clientauthentication_v1alpha1_ExecCredentialSpec(ref), + "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.ExecCredentialStatus": schema_pkg_apis_clientauthentication_v1alpha1_ExecCredentialStatus(ref), + "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.Response": schema_pkg_apis_clientauthentication_v1alpha1_Response(ref), + "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1.ExecCredential": schema_pkg_apis_clientauthentication_v1beta1_ExecCredential(ref), + "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1.ExecCredentialSpec": schema_pkg_apis_clientauthentication_v1beta1_ExecCredentialSpec(ref), + "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1.ExecCredentialStatus": schema_pkg_apis_clientauthentication_v1beta1_ExecCredentialStatus(ref), + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIService": schema_pkg_apis_apiregistration_v1_APIService(ref), + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceCondition": schema_pkg_apis_apiregistration_v1_APIServiceCondition(ref), + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceList": schema_pkg_apis_apiregistration_v1_APIServiceList(ref), + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceSpec": schema_pkg_apis_apiregistration_v1_APIServiceSpec(ref), + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceStatus": schema_pkg_apis_apiregistration_v1_APIServiceStatus(ref), + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.ServiceReference": schema_pkg_apis_apiregistration_v1_ServiceReference(ref), + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIService": schema_pkg_apis_apiregistration_v1beta1_APIService(ref), + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceCondition": schema_pkg_apis_apiregistration_v1beta1_APIServiceCondition(ref), + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceList": schema_pkg_apis_apiregistration_v1beta1_APIServiceList(ref), + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceSpec": schema_pkg_apis_apiregistration_v1beta1_APIServiceSpec(ref), + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceStatus": schema_pkg_apis_apiregistration_v1beta1_APIServiceStatus(ref), + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.ServiceReference": schema_pkg_apis_apiregistration_v1beta1_ServiceReference(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.AttachDetachControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_AttachDetachControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.CSRSigningConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_CSRSigningConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.CSRSigningControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_CSRSigningControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.CloudProviderConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_CloudProviderConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.DaemonSetControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_DaemonSetControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.DeploymentControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_DeploymentControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.DeprecatedControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_DeprecatedControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.EndpointControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_EndpointControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.EndpointSliceControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_EndpointSliceControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.EndpointSliceMirroringControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_EndpointSliceMirroringControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.GarbageCollectorControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_GarbageCollectorControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.GenericControllerManagerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_GenericControllerManagerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.GroupResource": schema_k8sio_kube_controller_manager_config_v1alpha1_GroupResource(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.HPAControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_HPAControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.JobControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_JobControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.KubeCloudSharedConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_KubeCloudSharedConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.KubeControllerManagerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_KubeControllerManagerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.NamespaceControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_NamespaceControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.NodeIPAMControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_NodeIPAMControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.NodeLifecycleControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_NodeLifecycleControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.PersistentVolumeBinderControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_PersistentVolumeBinderControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.PersistentVolumeRecyclerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_PersistentVolumeRecyclerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.PodGCControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_PodGCControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.ReplicaSetControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_ReplicaSetControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.ReplicationControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_ReplicationControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.ResourceQuotaControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_ResourceQuotaControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.SAControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_SAControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.ServiceControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_ServiceControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.StatefulSetControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_StatefulSetControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.TTLAfterFinishedControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_TTLAfterFinishedControllerConfiguration(ref), + "k8s.io/kube-controller-manager/config/v1alpha1.VolumeConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_VolumeConfiguration(ref), + "k8s.io/kube-proxy/config/v1alpha1.KubeProxyConfiguration": schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyConfiguration(ref), + "k8s.io/kube-proxy/config/v1alpha1.KubeProxyConntrackConfiguration": schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyConntrackConfiguration(ref), + "k8s.io/kube-proxy/config/v1alpha1.KubeProxyIPTablesConfiguration": schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyIPTablesConfiguration(ref), + "k8s.io/kube-proxy/config/v1alpha1.KubeProxyIPVSConfiguration": schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyIPVSConfiguration(ref), + "k8s.io/kube-proxy/config/v1alpha1.KubeProxyWinkernelConfiguration": schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyWinkernelConfiguration(ref), + "k8s.io/kube-scheduler/config/v1.ExtenderManagedResource": schema_k8sio_kube_scheduler_config_v1_ExtenderManagedResource(ref), + "k8s.io/kube-scheduler/config/v1.ExtenderTLSConfig": schema_k8sio_kube_scheduler_config_v1_ExtenderTLSConfig(ref), + "k8s.io/kube-scheduler/config/v1.LabelPreference": schema_k8sio_kube_scheduler_config_v1_LabelPreference(ref), + "k8s.io/kube-scheduler/config/v1.LabelsPresence": schema_k8sio_kube_scheduler_config_v1_LabelsPresence(ref), + "k8s.io/kube-scheduler/config/v1.LegacyExtender": schema_k8sio_kube_scheduler_config_v1_LegacyExtender(ref), + "k8s.io/kube-scheduler/config/v1.Policy": schema_k8sio_kube_scheduler_config_v1_Policy(ref), + "k8s.io/kube-scheduler/config/v1.PredicateArgument": schema_k8sio_kube_scheduler_config_v1_PredicateArgument(ref), + "k8s.io/kube-scheduler/config/v1.PredicatePolicy": schema_k8sio_kube_scheduler_config_v1_PredicatePolicy(ref), + "k8s.io/kube-scheduler/config/v1.PriorityArgument": schema_k8sio_kube_scheduler_config_v1_PriorityArgument(ref), + "k8s.io/kube-scheduler/config/v1.PriorityPolicy": schema_k8sio_kube_scheduler_config_v1_PriorityPolicy(ref), + "k8s.io/kube-scheduler/config/v1.RequestedToCapacityRatioArguments": schema_k8sio_kube_scheduler_config_v1_RequestedToCapacityRatioArguments(ref), + "k8s.io/kube-scheduler/config/v1.ResourceSpec": schema_k8sio_kube_scheduler_config_v1_ResourceSpec(ref), + "k8s.io/kube-scheduler/config/v1.ServiceAffinity": schema_k8sio_kube_scheduler_config_v1_ServiceAffinity(ref), + "k8s.io/kube-scheduler/config/v1.ServiceAntiAffinity": schema_k8sio_kube_scheduler_config_v1_ServiceAntiAffinity(ref), + "k8s.io/kube-scheduler/config/v1.UtilizationShapePoint": schema_k8sio_kube_scheduler_config_v1_UtilizationShapePoint(ref), + "k8s.io/kube-scheduler/config/v1beta1.Extender": schema_k8sio_kube_scheduler_config_v1beta1_Extender(ref), + "k8s.io/kube-scheduler/config/v1beta1.InterPodAffinityArgs": schema_k8sio_kube_scheduler_config_v1beta1_InterPodAffinityArgs(ref), + "k8s.io/kube-scheduler/config/v1beta1.KubeSchedulerConfiguration": schema_k8sio_kube_scheduler_config_v1beta1_KubeSchedulerConfiguration(ref), + "k8s.io/kube-scheduler/config/v1beta1.KubeSchedulerProfile": schema_k8sio_kube_scheduler_config_v1beta1_KubeSchedulerProfile(ref), + "k8s.io/kube-scheduler/config/v1beta1.NodeLabelArgs": schema_k8sio_kube_scheduler_config_v1beta1_NodeLabelArgs(ref), + "k8s.io/kube-scheduler/config/v1beta1.NodeResourcesFitArgs": schema_k8sio_kube_scheduler_config_v1beta1_NodeResourcesFitArgs(ref), + "k8s.io/kube-scheduler/config/v1beta1.NodeResourcesLeastAllocatedArgs": schema_k8sio_kube_scheduler_config_v1beta1_NodeResourcesLeastAllocatedArgs(ref), + "k8s.io/kube-scheduler/config/v1beta1.NodeResourcesMostAllocatedArgs": schema_k8sio_kube_scheduler_config_v1beta1_NodeResourcesMostAllocatedArgs(ref), + "k8s.io/kube-scheduler/config/v1beta1.Plugin": schema_k8sio_kube_scheduler_config_v1beta1_Plugin(ref), + "k8s.io/kube-scheduler/config/v1beta1.PluginConfig": schema_k8sio_kube_scheduler_config_v1beta1_PluginConfig(ref), + "k8s.io/kube-scheduler/config/v1beta1.PluginSet": schema_k8sio_kube_scheduler_config_v1beta1_PluginSet(ref), + "k8s.io/kube-scheduler/config/v1beta1.Plugins": schema_k8sio_kube_scheduler_config_v1beta1_Plugins(ref), + "k8s.io/kube-scheduler/config/v1beta1.PodTopologySpreadArgs": schema_k8sio_kube_scheduler_config_v1beta1_PodTopologySpreadArgs(ref), + "k8s.io/kube-scheduler/config/v1beta1.RequestedToCapacityRatioArgs": schema_k8sio_kube_scheduler_config_v1beta1_RequestedToCapacityRatioArgs(ref), + "k8s.io/kube-scheduler/config/v1beta1.ResourceSpec": schema_k8sio_kube_scheduler_config_v1beta1_ResourceSpec(ref), + "k8s.io/kube-scheduler/config/v1beta1.ServiceAffinityArgs": schema_k8sio_kube_scheduler_config_v1beta1_ServiceAffinityArgs(ref), + "k8s.io/kube-scheduler/config/v1beta1.UtilizationShapePoint": schema_k8sio_kube_scheduler_config_v1beta1_UtilizationShapePoint(ref), + "k8s.io/kube-scheduler/config/v1beta1.VolumeBindingArgs": schema_k8sio_kube_scheduler_config_v1beta1_VolumeBindingArgs(ref), + "k8s.io/kubelet/config/v1beta1.KubeletAnonymousAuthentication": schema_k8sio_kubelet_config_v1beta1_KubeletAnonymousAuthentication(ref), + "k8s.io/kubelet/config/v1beta1.KubeletAuthentication": schema_k8sio_kubelet_config_v1beta1_KubeletAuthentication(ref), + "k8s.io/kubelet/config/v1beta1.KubeletAuthorization": schema_k8sio_kubelet_config_v1beta1_KubeletAuthorization(ref), + "k8s.io/kubelet/config/v1beta1.KubeletConfiguration": schema_k8sio_kubelet_config_v1beta1_KubeletConfiguration(ref), + "k8s.io/kubelet/config/v1beta1.KubeletWebhookAuthentication": schema_k8sio_kubelet_config_v1beta1_KubeletWebhookAuthentication(ref), + "k8s.io/kubelet/config/v1beta1.KubeletWebhookAuthorization": schema_k8sio_kubelet_config_v1beta1_KubeletWebhookAuthorization(ref), + "k8s.io/kubelet/config/v1beta1.KubeletX509Authentication": schema_k8sio_kubelet_config_v1beta1_KubeletX509Authentication(ref), + "k8s.io/kubelet/config/v1beta1.SerializedNodeConfigSource": schema_k8sio_kubelet_config_v1beta1_SerializedNodeConfigSource(ref), + "k8s.io/kubernetes/cmd/cloud-controller-manager/app/apis/config/v1alpha1.CloudControllerManagerConfiguration": schema_app_apis_config_v1alpha1_CloudControllerManagerConfiguration(ref), + "k8s.io/kubernetes/pkg/apis/abac/v1beta1.Policy": schema_pkg_apis_abac_v1beta1_Policy(ref), + "k8s.io/kubernetes/pkg/apis/abac/v1beta1.PolicySpec": schema_pkg_apis_abac_v1beta1_PolicySpec(ref), + "k8s.io/metrics/pkg/apis/custom_metrics/v1beta1.MetricListOptions": schema_pkg_apis_custom_metrics_v1beta1_MetricListOptions(ref), + "k8s.io/metrics/pkg/apis/custom_metrics/v1beta1.MetricValue": schema_pkg_apis_custom_metrics_v1beta1_MetricValue(ref), + "k8s.io/metrics/pkg/apis/custom_metrics/v1beta1.MetricValueList": schema_pkg_apis_custom_metrics_v1beta1_MetricValueList(ref), + "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricIdentifier": schema_pkg_apis_custom_metrics_v1beta2_MetricIdentifier(ref), + "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricListOptions": schema_pkg_apis_custom_metrics_v1beta2_MetricListOptions(ref), + "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricValue": schema_pkg_apis_custom_metrics_v1beta2_MetricValue(ref), + "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricValueList": schema_pkg_apis_custom_metrics_v1beta2_MetricValueList(ref), + "k8s.io/metrics/pkg/apis/external_metrics/v1beta1.ExternalMetricValue": schema_pkg_apis_external_metrics_v1beta1_ExternalMetricValue(ref), + "k8s.io/metrics/pkg/apis/external_metrics/v1beta1.ExternalMetricValueList": schema_pkg_apis_external_metrics_v1beta1_ExternalMetricValueList(ref), + "k8s.io/metrics/pkg/apis/metrics/v1alpha1.ContainerMetrics": schema_pkg_apis_metrics_v1alpha1_ContainerMetrics(ref), + "k8s.io/metrics/pkg/apis/metrics/v1alpha1.NodeMetrics": schema_pkg_apis_metrics_v1alpha1_NodeMetrics(ref), + "k8s.io/metrics/pkg/apis/metrics/v1alpha1.NodeMetricsList": schema_pkg_apis_metrics_v1alpha1_NodeMetricsList(ref), + "k8s.io/metrics/pkg/apis/metrics/v1alpha1.PodMetrics": schema_pkg_apis_metrics_v1alpha1_PodMetrics(ref), + "k8s.io/metrics/pkg/apis/metrics/v1alpha1.PodMetricsList": schema_pkg_apis_metrics_v1alpha1_PodMetricsList(ref), + "k8s.io/metrics/pkg/apis/metrics/v1beta1.ContainerMetrics": schema_pkg_apis_metrics_v1beta1_ContainerMetrics(ref), + "k8s.io/metrics/pkg/apis/metrics/v1beta1.NodeMetrics": schema_pkg_apis_metrics_v1beta1_NodeMetrics(ref), + "k8s.io/metrics/pkg/apis/metrics/v1beta1.NodeMetricsList": schema_pkg_apis_metrics_v1beta1_NodeMetricsList(ref), + "k8s.io/metrics/pkg/apis/metrics/v1beta1.PodMetrics": schema_pkg_apis_metrics_v1beta1_PodMetrics(ref), + "k8s.io/metrics/pkg/apis/metrics/v1beta1.PodMetricsList": schema_pkg_apis_metrics_v1beta1_PodMetricsList(ref), + } +} + +func schema_k8sio_api_admissionregistration_v1_MutatingWebhook(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MutatingWebhook describes an admission webhook and the resources and operations it applies to.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + "clientConfig": { + SchemaProps: spec.SchemaProps{ + Description: "ClientConfig defines how to communicate with the hook. Required", + Ref: ref("k8s.io/api/admissionregistration/v1.WebhookClientConfig"), + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/admissionregistration/v1.RuleWithOperations"), + }, + }, + }, + }, + }, + "failurePolicy": { + SchemaProps: spec.SchemaProps{ + Description: "FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Fail.", + Type: []string{"string"}, + Format: "", + }, + }, + "matchPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "matchPolicy defines how the \"rules\" list is used to match incoming requests. Allowed values are \"Exact\" or \"Equivalent\".\n\n- Exact: match a request only if it exactly matches a specified rule. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, but \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook.\n\n- Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, and \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook.\n\nDefaults to \"Equivalent\"", + Type: []string{"string"}, + Format: "", + }, + }, + "namespaceSelector": { + SchemaProps: spec.SchemaProps{ + Description: "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "objectSelector": { + SchemaProps: spec.SchemaProps{ + Description: "ObjectSelector decides whether to run the webhook based on if the object has matching labels. objectSelector is evaluated against both the oldObject and newObject that would be sent to the webhook, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. Default to the empty LabelSelector, which matches everything.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "sideEffects": { + SchemaProps: spec.SchemaProps{ + Description: "SideEffects states whether this webhook has side effects. Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some.", + Type: []string{"string"}, + Format: "", + }, + }, + "timeoutSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored or the API call will fail based on the failure policy. The timeout value must be between 1 and 30 seconds. Default to 10 seconds.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "admissionReviewVersions": { + SchemaProps: spec.SchemaProps{ + Description: "AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "reinvocationPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "reinvocationPolicy indicates whether this webhook should be called multiple times as part of a single admission evaluation. Allowed values are \"Never\" and \"IfNeeded\".\n\nNever: the webhook will not be called more than once in a single admission evaluation.\n\nIfNeeded: the webhook will be called at least one additional time as part of the admission evaluation if the object being admitted is modified by other admission plugins after the initial webhook call. Webhooks that specify this option *must* be idempotent, able to process objects they previously admitted. Note: * the number of additional invocations is not guaranteed to be exactly one. * if additional invocations result in further modifications to the object, webhooks are not guaranteed to be invoked again. * webhooks that use this option may be reordered to minimize the number of additional invocations. * to validate an object after all mutations are guaranteed complete, use a validating admission webhook instead.\n\nDefaults to \"Never\".", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name", "clientConfig", "sideEffects", "admissionReviewVersions"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/admissionregistration/v1.RuleWithOperations", "k8s.io/api/admissionregistration/v1.WebhookClientConfig", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_admissionregistration_v1_MutatingWebhookConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "webhooks": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Webhooks is a list of webhooks and the affected resources and operations.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/admissionregistration/v1.MutatingWebhook"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/admissionregistration/v1.MutatingWebhook", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_admissionregistration_v1_MutatingWebhookConfigurationList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of MutatingWebhookConfiguration.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/admissionregistration/v1.MutatingWebhookConfiguration"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/admissionregistration/v1.MutatingWebhookConfiguration", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_admissionregistration_v1_Rule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended to make sure that all the tuple expansions are valid.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "apiGroups": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "apiVersions": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nDepending on the enclosing object, subresources might not be allowed. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "scope": { + SchemaProps: spec.SchemaProps{ + Description: "scope specifies the scope of this rule. Valid values are \"Cluster\", \"Namespaced\", and \"*\" \"Cluster\" means that only cluster-scoped resources will match this rule. Namespace API objects are cluster-scoped. \"Namespaced\" means that only namespaced resources will match this rule. \"*\" means that there are no scope restrictions. Subresources match the scope of their parent resource. Default is \"*\".", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_admissionregistration_v1_RuleWithOperations(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "operations": { + SchemaProps: spec.SchemaProps{ + Description: "Operations is the operations the admission hook cares about - CREATE, UPDATE, DELETE, CONNECT or * for all of those operations and any future admission operations that are added. If '*' is present, the length of the slice must be one. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "apiGroups": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "apiVersions": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nDepending on the enclosing object, subresources might not be allowed. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "scope": { + SchemaProps: spec.SchemaProps{ + Description: "scope specifies the scope of this rule. Valid values are \"Cluster\", \"Namespaced\", and \"*\" \"Cluster\" means that only cluster-scoped resources will match this rule. Namespace API objects are cluster-scoped. \"Namespaced\" means that only namespaced resources will match this rule. \"*\" means that there are no scope restrictions. Subresources match the scope of their parent resource. Default is \"*\".", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_admissionregistration_v1_ServiceReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceReference holds a reference to Service.legacy.k8s.io", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "`namespace` is the namespace of the service. Required", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "`name` is the name of the service. Required", + Type: []string{"string"}, + Format: "", + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Description: "`path` is an optional URL path which will be sent in any request to this service.", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, the port on the service that hosting webhook. Default to 443 for backward compatibility. `port` should be a valid port number (1-65535, inclusive).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"namespace", "name"}, + }, + }, + } +} + +func schema_k8sio_api_admissionregistration_v1_ValidatingWebhook(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ValidatingWebhook describes an admission webhook and the resources and operations it applies to.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + "clientConfig": { + SchemaProps: spec.SchemaProps{ + Description: "ClientConfig defines how to communicate with the hook. Required", + Ref: ref("k8s.io/api/admissionregistration/v1.WebhookClientConfig"), + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/admissionregistration/v1.RuleWithOperations"), + }, + }, + }, + }, + }, + "failurePolicy": { + SchemaProps: spec.SchemaProps{ + Description: "FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Fail.", + Type: []string{"string"}, + Format: "", + }, + }, + "matchPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "matchPolicy defines how the \"rules\" list is used to match incoming requests. Allowed values are \"Exact\" or \"Equivalent\".\n\n- Exact: match a request only if it exactly matches a specified rule. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, but \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook.\n\n- Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, and \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook.\n\nDefaults to \"Equivalent\"", + Type: []string{"string"}, + Format: "", + }, + }, + "namespaceSelector": { + SchemaProps: spec.SchemaProps{ + Description: "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "objectSelector": { + SchemaProps: spec.SchemaProps{ + Description: "ObjectSelector decides whether to run the webhook based on if the object has matching labels. objectSelector is evaluated against both the oldObject and newObject that would be sent to the webhook, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. Default to the empty LabelSelector, which matches everything.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "sideEffects": { + SchemaProps: spec.SchemaProps{ + Description: "SideEffects states whether this webhook has side effects. Acceptable values are: None, NoneOnDryRun (webhooks created via v1beta1 may also specify Some or Unknown). Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some.", + Type: []string{"string"}, + Format: "", + }, + }, + "timeoutSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored or the API call will fail based on the failure policy. The timeout value must be between 1 and 30 seconds. Default to 10 seconds.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "admissionReviewVersions": { + SchemaProps: spec.SchemaProps{ + Description: "AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"name", "clientConfig", "sideEffects", "admissionReviewVersions"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/admissionregistration/v1.RuleWithOperations", "k8s.io/api/admissionregistration/v1.WebhookClientConfig", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_admissionregistration_v1_ValidatingWebhookConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "webhooks": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Webhooks is a list of webhooks and the affected resources and operations.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/admissionregistration/v1.ValidatingWebhook"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/admissionregistration/v1.ValidatingWebhook", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_admissionregistration_v1_ValidatingWebhookConfigurationList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of ValidatingWebhookConfiguration.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/admissionregistration/v1.ValidatingWebhookConfiguration"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/admissionregistration/v1.ValidatingWebhookConfiguration", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_admissionregistration_v1_WebhookClientConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "WebhookClientConfig contains the information to make a TLS connection with the webhook", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "url": { + SchemaProps: spec.SchemaProps{ + Description: "`url` gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.", + Type: []string{"string"}, + Format: "", + }, + }, + "service": { + SchemaProps: spec.SchemaProps{ + Description: "`service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.", + Ref: ref("k8s.io/api/admissionregistration/v1.ServiceReference"), + }, + }, + "caBundle": { + SchemaProps: spec.SchemaProps{ + Description: "`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.", + Type: []string{"string"}, + Format: "byte", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/admissionregistration/v1.ServiceReference"}, + } +} + +func schema_k8sio_api_admissionregistration_v1beta1_MutatingWebhook(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MutatingWebhook describes an admission webhook and the resources and operations it applies to.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + "clientConfig": { + SchemaProps: spec.SchemaProps{ + Description: "ClientConfig defines how to communicate with the hook. Required", + Ref: ref("k8s.io/api/admissionregistration/v1beta1.WebhookClientConfig"), + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/admissionregistration/v1beta1.RuleWithOperations"), + }, + }, + }, + }, + }, + "failurePolicy": { + SchemaProps: spec.SchemaProps{ + Description: "FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.", + Type: []string{"string"}, + Format: "", + }, + }, + "matchPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "matchPolicy defines how the \"rules\" list is used to match incoming requests. Allowed values are \"Exact\" or \"Equivalent\".\n\n- Exact: match a request only if it exactly matches a specified rule. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, but \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook.\n\n- Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, and \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook.\n\nDefaults to \"Exact\"", + Type: []string{"string"}, + Format: "", + }, + }, + "namespaceSelector": { + SchemaProps: spec.SchemaProps{ + Description: "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "objectSelector": { + SchemaProps: spec.SchemaProps{ + Description: "ObjectSelector decides whether to run the webhook based on if the object has matching labels. objectSelector is evaluated against both the oldObject and newObject that would be sent to the webhook, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. Default to the empty LabelSelector, which matches everything.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "sideEffects": { + SchemaProps: spec.SchemaProps{ + Description: "SideEffects states whether this webhook has side effects. Acceptable values are: Unknown, None, Some, NoneOnDryRun Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some. Defaults to Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "timeoutSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored or the API call will fail based on the failure policy. The timeout value must be between 1 and 30 seconds. Default to 30 seconds.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "admissionReviewVersions": { + SchemaProps: spec.SchemaProps{ + Description: "AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy. Default to `['v1beta1']`.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "reinvocationPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "reinvocationPolicy indicates whether this webhook should be called multiple times as part of a single admission evaluation. Allowed values are \"Never\" and \"IfNeeded\".\n\nNever: the webhook will not be called more than once in a single admission evaluation.\n\nIfNeeded: the webhook will be called at least one additional time as part of the admission evaluation if the object being admitted is modified by other admission plugins after the initial webhook call. Webhooks that specify this option *must* be idempotent, able to process objects they previously admitted. Note: * the number of additional invocations is not guaranteed to be exactly one. * if additional invocations result in further modifications to the object, webhooks are not guaranteed to be invoked again. * webhooks that use this option may be reordered to minimize the number of additional invocations. * to validate an object after all mutations are guaranteed complete, use a validating admission webhook instead.\n\nDefaults to \"Never\".", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name", "clientConfig"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/admissionregistration/v1beta1.RuleWithOperations", "k8s.io/api/admissionregistration/v1beta1.WebhookClientConfig", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_admissionregistration_v1beta1_MutatingWebhookConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object. Deprecated in v1.16, planned for removal in v1.19. Use admissionregistration.k8s.io/v1 MutatingWebhookConfiguration instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "webhooks": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Webhooks is a list of webhooks and the affected resources and operations.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/admissionregistration/v1beta1.MutatingWebhook"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/admissionregistration/v1beta1.MutatingWebhook", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_admissionregistration_v1beta1_MutatingWebhookConfigurationList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of MutatingWebhookConfiguration.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/admissionregistration/v1beta1.MutatingWebhookConfiguration"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/admissionregistration/v1beta1.MutatingWebhookConfiguration", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_admissionregistration_v1beta1_Rule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended to make sure that all the tuple expansions are valid.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "apiGroups": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "apiVersions": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nDepending on the enclosing object, subresources might not be allowed. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "scope": { + SchemaProps: spec.SchemaProps{ + Description: "scope specifies the scope of this rule. Valid values are \"Cluster\", \"Namespaced\", and \"*\" \"Cluster\" means that only cluster-scoped resources will match this rule. Namespace API objects are cluster-scoped. \"Namespaced\" means that only namespaced resources will match this rule. \"*\" means that there are no scope restrictions. Subresources match the scope of their parent resource. Default is \"*\".", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_admissionregistration_v1beta1_RuleWithOperations(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "operations": { + SchemaProps: spec.SchemaProps{ + Description: "Operations is the operations the admission hook cares about - CREATE, UPDATE, DELETE, CONNECT or * for all of those operations and any future admission operations that are added. If '*' is present, the length of the slice must be one. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "apiGroups": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "apiVersions": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nDepending on the enclosing object, subresources might not be allowed. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "scope": { + SchemaProps: spec.SchemaProps{ + Description: "scope specifies the scope of this rule. Valid values are \"Cluster\", \"Namespaced\", and \"*\" \"Cluster\" means that only cluster-scoped resources will match this rule. Namespace API objects are cluster-scoped. \"Namespaced\" means that only namespaced resources will match this rule. \"*\" means that there are no scope restrictions. Subresources match the scope of their parent resource. Default is \"*\".", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_admissionregistration_v1beta1_ServiceReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceReference holds a reference to Service.legacy.k8s.io", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "`namespace` is the namespace of the service. Required", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "`name` is the name of the service. Required", + Type: []string{"string"}, + Format: "", + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Description: "`path` is an optional URL path which will be sent in any request to this service.", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, the port on the service that hosting webhook. Default to 443 for backward compatibility. `port` should be a valid port number (1-65535, inclusive).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"namespace", "name"}, + }, + }, + } +} + +func schema_k8sio_api_admissionregistration_v1beta1_ValidatingWebhook(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ValidatingWebhook describes an admission webhook and the resources and operations it applies to.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + "clientConfig": { + SchemaProps: spec.SchemaProps{ + Description: "ClientConfig defines how to communicate with the hook. Required", + Ref: ref("k8s.io/api/admissionregistration/v1beta1.WebhookClientConfig"), + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/admissionregistration/v1beta1.RuleWithOperations"), + }, + }, + }, + }, + }, + "failurePolicy": { + SchemaProps: spec.SchemaProps{ + Description: "FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.", + Type: []string{"string"}, + Format: "", + }, + }, + "matchPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "matchPolicy defines how the \"rules\" list is used to match incoming requests. Allowed values are \"Exact\" or \"Equivalent\".\n\n- Exact: match a request only if it exactly matches a specified rule. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, but \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would not be sent to the webhook.\n\n- Equivalent: match a request if modifies a resource listed in rules, even via another API group or version. For example, if deployments can be modified via apps/v1, apps/v1beta1, and extensions/v1beta1, and \"rules\" only included `apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]`, a request to apps/v1beta1 or extensions/v1beta1 would be converted to apps/v1 and sent to the webhook.\n\nDefaults to \"Exact\"", + Type: []string{"string"}, + Format: "", + }, + }, + "namespaceSelector": { + SchemaProps: spec.SchemaProps{ + Description: "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "objectSelector": { + SchemaProps: spec.SchemaProps{ + Description: "ObjectSelector decides whether to run the webhook based on if the object has matching labels. objectSelector is evaluated against both the oldObject and newObject that would be sent to the webhook, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. Default to the empty LabelSelector, which matches everything.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "sideEffects": { + SchemaProps: spec.SchemaProps{ + Description: "SideEffects states whether this webhook has side effects. Acceptable values are: Unknown, None, Some, NoneOnDryRun Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some. Defaults to Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "timeoutSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored or the API call will fail based on the failure policy. The timeout value must be between 1 and 30 seconds. Default to 30 seconds.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "admissionReviewVersions": { + SchemaProps: spec.SchemaProps{ + Description: "AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy. Default to `['v1beta1']`.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"name", "clientConfig"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/admissionregistration/v1beta1.RuleWithOperations", "k8s.io/api/admissionregistration/v1beta1.WebhookClientConfig", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_admissionregistration_v1beta1_ValidatingWebhookConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it. Deprecated in v1.16, planned for removal in v1.19. Use admissionregistration.k8s.io/v1 ValidatingWebhookConfiguration instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "webhooks": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Webhooks is a list of webhooks and the affected resources and operations.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/admissionregistration/v1beta1.ValidatingWebhook"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/admissionregistration/v1beta1.ValidatingWebhook", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_admissionregistration_v1beta1_ValidatingWebhookConfigurationList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of ValidatingWebhookConfiguration.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/admissionregistration/v1beta1.ValidatingWebhookConfiguration"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/admissionregistration/v1beta1.ValidatingWebhookConfiguration", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_admissionregistration_v1beta1_WebhookClientConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "WebhookClientConfig contains the information to make a TLS connection with the webhook", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "url": { + SchemaProps: spec.SchemaProps{ + Description: "`url` gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.", + Type: []string{"string"}, + Format: "", + }, + }, + "service": { + SchemaProps: spec.SchemaProps{ + Description: "`service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.", + Ref: ref("k8s.io/api/admissionregistration/v1beta1.ServiceReference"), + }, + }, + "caBundle": { + SchemaProps: spec.SchemaProps{ + Description: "`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.", + Type: []string{"string"}, + Format: "byte", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/admissionregistration/v1beta1.ServiceReference"}, + } +} + +func schema_k8sio_api_apps_v1_ControllerRevision(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "data": { + SchemaProps: spec.SchemaProps{ + Description: "Data is the serialized representation of the state.", + Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), + }, + }, + "revision": { + SchemaProps: spec.SchemaProps{ + Description: "Revision indicates the revision of the state represented by Data.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + Required: []string{"revision"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, + } +} + +func schema_k8sio_api_apps_v1_ControllerRevisionList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ControllerRevisionList is a resource containing a list of ControllerRevision objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of ControllerRevisions", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1.ControllerRevision"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.ControllerRevision", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_apps_v1_DaemonSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSet represents the configuration of a daemon set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/apps/v1.DaemonSetSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/apps/v1.DaemonSetStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.DaemonSetSpec", "k8s.io/api/apps/v1.DaemonSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_apps_v1_DaemonSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetCondition describes the state of a DaemonSet at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of DaemonSet condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_apps_v1_DaemonSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetList is a collection of daemon sets.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "A list of daemon sets.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1.DaemonSet"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.DaemonSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_apps_v1_DaemonSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetSpec is the specification of a daemon set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + "updateStrategy": { + SchemaProps: spec.SchemaProps{ + Description: "An update strategy to replace existing DaemonSet pods with new pods.", + Ref: ref("k8s.io/api/apps/v1.DaemonSetUpdateStrategy"), + }, + }, + "minReadySeconds": { + SchemaProps: spec.SchemaProps{ + Description: "The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "revisionHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"selector", "template"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.DaemonSetUpdateStrategy", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_apps_v1_DaemonSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetStatus represents the current status of a daemon set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "currentNumberScheduled": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "numberMisscheduled": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "desiredNumberScheduled": { + SchemaProps: spec.SchemaProps{ + Description: "The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "numberReady": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "The most recent generation observed by the daemon set controller.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "updatedNumberScheduled": { + SchemaProps: spec.SchemaProps{ + Description: "The total number of nodes that are running updated daemon pod", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "numberAvailable": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "numberUnavailable": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "collisionCount": { + SchemaProps: spec.SchemaProps{ + Description: "Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a DaemonSet's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1.DaemonSetCondition"), + }, + }, + }, + }, + }, + }, + Required: []string{"currentNumberScheduled", "numberMisscheduled", "desiredNumberScheduled", "numberReady"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.DaemonSetCondition"}, + } +} + +func schema_k8sio_api_apps_v1_DaemonSetUpdateStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.", + Type: []string{"string"}, + Format: "", + }, + }, + "rollingUpdate": { + SchemaProps: spec.SchemaProps{ + Description: "Rolling update config params. Present only if type = \"RollingUpdate\".", + Ref: ref("k8s.io/api/apps/v1.RollingUpdateDaemonSet"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.RollingUpdateDaemonSet"}, + } +} + +func schema_k8sio_api_apps_v1_Deployment(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Deployment enables declarative updates for Pods and ReplicaSets.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired behavior of the Deployment.", + Ref: ref("k8s.io/api/apps/v1.DeploymentSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Most recently observed status of the Deployment.", + Ref: ref("k8s.io/api/apps/v1.DeploymentStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.DeploymentSpec", "k8s.io/api/apps/v1.DeploymentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_apps_v1_DeploymentCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentCondition describes the state of a deployment at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of deployment condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastUpdateTime": { + SchemaProps: spec.SchemaProps{ + Description: "The last time this condition was updated.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_apps_v1_DeploymentList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentList is a list of Deployments.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of Deployments.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1.Deployment"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.Deployment", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_apps_v1_DeploymentSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentSpec is the specification of the desired behavior of the Deployment.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "Template describes the pods that will be created.", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + "strategy": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-strategy": "retainKeys", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "The deployment strategy to use to replace existing pods with new ones.", + Ref: ref("k8s.io/api/apps/v1.DeploymentStrategy"), + }, + }, + "minReadySeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "revisionHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "paused": { + SchemaProps: spec.SchemaProps{ + Description: "Indicates that the deployment is paused.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "progressDeadlineSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"selector", "template"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.DeploymentStrategy", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_apps_v1_DeploymentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentStatus is the most recently observed status of the Deployment.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "The generation observed by the deployment controller.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of non-terminated pods targeted by this deployment (their labels match the selector).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "updatedReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of non-terminated pods targeted by this deployment that have the desired template spec.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "readyReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of ready pods targeted by this deployment.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "availableReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "unavailableReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a deployment's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1.DeploymentCondition"), + }, + }, + }, + }, + }, + "collisionCount": { + SchemaProps: spec.SchemaProps{ + Description: "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.DeploymentCondition"}, + } +} + +func schema_k8sio_api_apps_v1_DeploymentStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentStrategy describes how to replace existing pods with new ones.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.", + Type: []string{"string"}, + Format: "", + }, + }, + "rollingUpdate": { + SchemaProps: spec.SchemaProps{ + Description: "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.", + Ref: ref("k8s.io/api/apps/v1.RollingUpdateDeployment"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.RollingUpdateDeployment"}, + } +} + +func schema_k8sio_api_apps_v1_ReplicaSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSet ensures that a specified number of pod replicas are running at any given time.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/apps/v1.ReplicaSetSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/apps/v1.ReplicaSetStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.ReplicaSetSpec", "k8s.io/api/apps/v1.ReplicaSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_apps_v1_ReplicaSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSetCondition describes the state of a replica set at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of replica set condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "The last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_apps_v1_ReplicaSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSetList is a collection of ReplicaSets.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1.ReplicaSet"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.ReplicaSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_apps_v1_ReplicaSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSetSpec is the specification of a ReplicaSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "minReadySeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + }, + Required: []string{"selector"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_apps_v1_ReplicaSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSetStatus represents the current status of a ReplicaSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "fullyLabeledReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "The number of pods that have labels matching the labels of the pod template of the replicaset.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "readyReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "The number of ready replicas for this replica set.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "availableReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "The number of available replicas (ready for at least minReadySeconds) for this replica set.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "ObservedGeneration reflects the generation of the most recently observed ReplicaSet.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a replica set's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1.ReplicaSetCondition"), + }, + }, + }, + }, + }, + }, + Required: []string{"replicas"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.ReplicaSetCondition"}, + } +} + +func schema_k8sio_api_apps_v1_RollingUpdateDaemonSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Spec to control the desired behavior of daemon set rolling update.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "maxUnavailable": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_apps_v1_RollingUpdateDeployment(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Spec to control the desired behavior of rolling update.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "maxUnavailable": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + "maxSurge": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_apps_v1_RollingUpdateStatefulSetStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "partition": { + SchemaProps: spec.SchemaProps{ + Description: "Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_apps_v1_StatefulSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n - Network: A single stable DNS and hostname.\n - Storage: As many VolumeClaims as requested.\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec defines the desired identities of pods in this set.", + Ref: ref("k8s.io/api/apps/v1.StatefulSetSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.", + Ref: ref("k8s.io/api/apps/v1.StatefulSetStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.StatefulSetSpec", "k8s.io/api/apps/v1.StatefulSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_apps_v1_StatefulSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetCondition describes the state of a statefulset at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of statefulset condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_apps_v1_StatefulSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetList is a collection of StatefulSets.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1.StatefulSet"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.StatefulSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_apps_v1_StatefulSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A StatefulSetSpec is the specification of a StatefulSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + "volumeClaimTemplates": { + SchemaProps: spec.SchemaProps{ + Description: "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaim"), + }, + }, + }, + }, + }, + "serviceName": { + SchemaProps: spec.SchemaProps{ + Description: "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", + Type: []string{"string"}, + Format: "", + }, + }, + "podManagementPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", + Type: []string{"string"}, + Format: "", + }, + }, + "updateStrategy": { + SchemaProps: spec.SchemaProps{ + Description: "updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.", + Ref: ref("k8s.io/api/apps/v1.StatefulSetUpdateStrategy"), + }, + }, + "revisionHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"selector", "template", "serviceName"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.StatefulSetUpdateStrategy", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_apps_v1_StatefulSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetStatus represents the current state of a StatefulSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "replicas is the number of Pods created by the StatefulSet controller.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "readyReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "currentReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "updatedReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "currentRevision": { + SchemaProps: spec.SchemaProps{ + Description: "currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).", + Type: []string{"string"}, + Format: "", + }, + }, + "updateRevision": { + SchemaProps: spec.SchemaProps{ + Description: "updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)", + Type: []string{"string"}, + Format: "", + }, + }, + "collisionCount": { + SchemaProps: spec.SchemaProps{ + Description: "collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a statefulset's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1.StatefulSetCondition"), + }, + }, + }, + }, + }, + }, + Required: []string{"replicas"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.StatefulSetCondition"}, + } +} + +func schema_k8sio_api_apps_v1_StatefulSetUpdateStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.", + Type: []string{"string"}, + Format: "", + }, + }, + "rollingUpdate": { + SchemaProps: spec.SchemaProps{ + Description: "RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.", + Ref: ref("k8s.io/api/apps/v1.RollingUpdateStatefulSetStrategy"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1.RollingUpdateStatefulSetStrategy"}, + } +} + +func schema_k8sio_api_apps_v1beta1_ControllerRevision(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1beta2/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "data": { + SchemaProps: spec.SchemaProps{ + Description: "Data is the serialized representation of the state.", + Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), + }, + }, + "revision": { + SchemaProps: spec.SchemaProps{ + Description: "Revision indicates the revision of the state represented by Data.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + Required: []string{"revision"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, + } +} + +func schema_k8sio_api_apps_v1beta1_ControllerRevisionList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ControllerRevisionList is a resource containing a list of ControllerRevision objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of ControllerRevisions", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1beta1.ControllerRevision"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta1.ControllerRevision", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta1_Deployment(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired behavior of the Deployment.", + Ref: ref("k8s.io/api/apps/v1beta1.DeploymentSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Most recently observed status of the Deployment.", + Ref: ref("k8s.io/api/apps/v1beta1.DeploymentStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta1.DeploymentSpec", "k8s.io/api/apps/v1beta1.DeploymentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta1_DeploymentCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentCondition describes the state of a deployment at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of deployment condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastUpdateTime": { + SchemaProps: spec.SchemaProps{ + Description: "The last time this condition was updated.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_apps_v1beta1_DeploymentList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentList is a list of Deployments.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of Deployments.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1beta1.Deployment"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta1.Deployment", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta1_DeploymentRollback(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED. DeploymentRollback stores the information required to rollback a deployment.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Required: This must match the Name of a deployment.", + Type: []string{"string"}, + Format: "", + }, + }, + "updatedAnnotations": { + SchemaProps: spec.SchemaProps{ + Description: "The annotations to be updated to a deployment", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "rollbackTo": { + SchemaProps: spec.SchemaProps{ + Description: "The config of this deployment rollback.", + Ref: ref("k8s.io/api/apps/v1beta1.RollbackConfig"), + }, + }, + }, + Required: []string{"name", "rollbackTo"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta1.RollbackConfig"}, + } +} + +func schema_k8sio_api_apps_v1beta1_DeploymentSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentSpec is the specification of the desired behavior of the Deployment.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "Template describes the pods that will be created.", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + "strategy": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-strategy": "retainKeys", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "The deployment strategy to use to replace existing pods with new ones.", + Ref: ref("k8s.io/api/apps/v1beta1.DeploymentStrategy"), + }, + }, + "minReadySeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "revisionHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "paused": { + SchemaProps: spec.SchemaProps{ + Description: "Indicates that the deployment is paused.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "rollbackTo": { + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.", + Ref: ref("k8s.io/api/apps/v1beta1.RollbackConfig"), + }, + }, + "progressDeadlineSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"template"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta1.DeploymentStrategy", "k8s.io/api/apps/v1beta1.RollbackConfig", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_apps_v1beta1_DeploymentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentStatus is the most recently observed status of the Deployment.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "The generation observed by the deployment controller.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of non-terminated pods targeted by this deployment (their labels match the selector).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "updatedReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of non-terminated pods targeted by this deployment that have the desired template spec.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "readyReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of ready pods targeted by this deployment.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "availableReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "unavailableReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a deployment's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1beta1.DeploymentCondition"), + }, + }, + }, + }, + }, + "collisionCount": { + SchemaProps: spec.SchemaProps{ + Description: "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta1.DeploymentCondition"}, + } +} + +func schema_k8sio_api_apps_v1beta1_DeploymentStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentStrategy describes how to replace existing pods with new ones.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.", + Type: []string{"string"}, + Format: "", + }, + }, + "rollingUpdate": { + SchemaProps: spec.SchemaProps{ + Description: "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.", + Ref: ref("k8s.io/api/apps/v1beta1.RollingUpdateDeployment"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta1.RollingUpdateDeployment"}, + } +} + +func schema_k8sio_api_apps_v1beta1_RollbackConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "revision": { + SchemaProps: spec.SchemaProps{ + Description: "The revision to rollback to. If set to 0, rollback to the last revision.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_apps_v1beta1_RollingUpdateDeployment(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Spec to control the desired behavior of rolling update.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "maxUnavailable": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + "maxSurge": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_apps_v1beta1_RollingUpdateStatefulSetStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "partition": { + SchemaProps: spec.SchemaProps{ + Description: "Partition indicates the ordinal at which the StatefulSet should be partitioned.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_apps_v1beta1_Scale(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Scale represents a scaling request for a resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", + Ref: ref("k8s.io/api/apps/v1beta1.ScaleSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only.", + Ref: ref("k8s.io/api/apps/v1beta1.ScaleStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta1.ScaleSpec", "k8s.io/api/apps/v1beta1.ScaleStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta1_ScaleSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ScaleSpec describes the attributes of a scale subresource", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "desired number of instances for the scaled object.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_apps_v1beta1_ScaleStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ScaleStatus represents the current status of a scale subresource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "actual number of observed instances of the scaled object.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "targetSelector": { + SchemaProps: spec.SchemaProps{ + Description: "label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"replicas"}, + }, + }, + } +} + +func schema_k8sio_api_apps_v1beta1_StatefulSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED - This group version of StatefulSet is deprecated by apps/v1beta2/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n - Network: A single stable DNS and hostname.\n - Storage: As many VolumeClaims as requested.\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec defines the desired identities of pods in this set.", + Ref: ref("k8s.io/api/apps/v1beta1.StatefulSetSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.", + Ref: ref("k8s.io/api/apps/v1beta1.StatefulSetStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta1.StatefulSetSpec", "k8s.io/api/apps/v1beta1.StatefulSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta1_StatefulSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetCondition describes the state of a statefulset at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of statefulset condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_apps_v1beta1_StatefulSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetList is a collection of StatefulSets.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1beta1.StatefulSet"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta1.StatefulSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta1_StatefulSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A StatefulSetSpec is the specification of a StatefulSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + "volumeClaimTemplates": { + SchemaProps: spec.SchemaProps{ + Description: "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaim"), + }, + }, + }, + }, + }, + "serviceName": { + SchemaProps: spec.SchemaProps{ + Description: "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", + Type: []string{"string"}, + Format: "", + }, + }, + "podManagementPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", + Type: []string{"string"}, + Format: "", + }, + }, + "updateStrategy": { + SchemaProps: spec.SchemaProps{ + Description: "updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.", + Ref: ref("k8s.io/api/apps/v1beta1.StatefulSetUpdateStrategy"), + }, + }, + "revisionHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"template", "serviceName"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta1.StatefulSetUpdateStrategy", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_apps_v1beta1_StatefulSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetStatus represents the current state of a StatefulSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "replicas is the number of Pods created by the StatefulSet controller.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "readyReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "currentReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "updatedReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "currentRevision": { + SchemaProps: spec.SchemaProps{ + Description: "currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).", + Type: []string{"string"}, + Format: "", + }, + }, + "updateRevision": { + SchemaProps: spec.SchemaProps{ + Description: "updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)", + Type: []string{"string"}, + Format: "", + }, + }, + "collisionCount": { + SchemaProps: spec.SchemaProps{ + Description: "collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a statefulset's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1beta1.StatefulSetCondition"), + }, + }, + }, + }, + }, + }, + Required: []string{"replicas"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta1.StatefulSetCondition"}, + } +} + +func schema_k8sio_api_apps_v1beta1_StatefulSetUpdateStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type indicates the type of the StatefulSetUpdateStrategy.", + Type: []string{"string"}, + Format: "", + }, + }, + "rollingUpdate": { + SchemaProps: spec.SchemaProps{ + Description: "RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.", + Ref: ref("k8s.io/api/apps/v1beta1.RollingUpdateStatefulSetStrategy"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta1.RollingUpdateStatefulSetStrategy"}, + } +} + +func schema_k8sio_api_apps_v1beta2_ControllerRevision(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "data": { + SchemaProps: spec.SchemaProps{ + Description: "Data is the serialized representation of the state.", + Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), + }, + }, + "revision": { + SchemaProps: spec.SchemaProps{ + Description: "Revision indicates the revision of the state represented by Data.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + Required: []string{"revision"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, + } +} + +func schema_k8sio_api_apps_v1beta2_ControllerRevisionList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ControllerRevisionList is a resource containing a list of ControllerRevision objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of ControllerRevisions", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1beta2.ControllerRevision"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.ControllerRevision", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta2_DaemonSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED - This group version of DaemonSet is deprecated by apps/v1/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/apps/v1beta2.DaemonSetSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/apps/v1beta2.DaemonSetStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.DaemonSetSpec", "k8s.io/api/apps/v1beta2.DaemonSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta2_DaemonSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetCondition describes the state of a DaemonSet at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of DaemonSet condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_apps_v1beta2_DaemonSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetList is a collection of daemon sets.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "A list of daemon sets.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1beta2.DaemonSet"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.DaemonSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta2_DaemonSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetSpec is the specification of a daemon set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + "updateStrategy": { + SchemaProps: spec.SchemaProps{ + Description: "An update strategy to replace existing DaemonSet pods with new pods.", + Ref: ref("k8s.io/api/apps/v1beta2.DaemonSetUpdateStrategy"), + }, + }, + "minReadySeconds": { + SchemaProps: spec.SchemaProps{ + Description: "The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "revisionHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"selector", "template"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.DaemonSetUpdateStrategy", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_apps_v1beta2_DaemonSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetStatus represents the current status of a daemon set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "currentNumberScheduled": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "numberMisscheduled": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "desiredNumberScheduled": { + SchemaProps: spec.SchemaProps{ + Description: "The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "numberReady": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "The most recent generation observed by the daemon set controller.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "updatedNumberScheduled": { + SchemaProps: spec.SchemaProps{ + Description: "The total number of nodes that are running updated daemon pod", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "numberAvailable": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "numberUnavailable": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "collisionCount": { + SchemaProps: spec.SchemaProps{ + Description: "Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a DaemonSet's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1beta2.DaemonSetCondition"), + }, + }, + }, + }, + }, + }, + Required: []string{"currentNumberScheduled", "numberMisscheduled", "desiredNumberScheduled", "numberReady"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.DaemonSetCondition"}, + } +} + +func schema_k8sio_api_apps_v1beta2_DaemonSetUpdateStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.", + Type: []string{"string"}, + Format: "", + }, + }, + "rollingUpdate": { + SchemaProps: spec.SchemaProps{ + Description: "Rolling update config params. Present only if type = \"RollingUpdate\".", + Ref: ref("k8s.io/api/apps/v1beta2.RollingUpdateDaemonSet"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.RollingUpdateDaemonSet"}, + } +} + +func schema_k8sio_api_apps_v1beta2_Deployment(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED - This group version of Deployment is deprecated by apps/v1/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired behavior of the Deployment.", + Ref: ref("k8s.io/api/apps/v1beta2.DeploymentSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Most recently observed status of the Deployment.", + Ref: ref("k8s.io/api/apps/v1beta2.DeploymentStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.DeploymentSpec", "k8s.io/api/apps/v1beta2.DeploymentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta2_DeploymentCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentCondition describes the state of a deployment at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of deployment condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastUpdateTime": { + SchemaProps: spec.SchemaProps{ + Description: "The last time this condition was updated.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_apps_v1beta2_DeploymentList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentList is a list of Deployments.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of Deployments.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1beta2.Deployment"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.Deployment", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta2_DeploymentSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentSpec is the specification of the desired behavior of the Deployment.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "Template describes the pods that will be created.", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + "strategy": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-strategy": "retainKeys", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "The deployment strategy to use to replace existing pods with new ones.", + Ref: ref("k8s.io/api/apps/v1beta2.DeploymentStrategy"), + }, + }, + "minReadySeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "revisionHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "paused": { + SchemaProps: spec.SchemaProps{ + Description: "Indicates that the deployment is paused.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "progressDeadlineSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"selector", "template"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.DeploymentStrategy", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_apps_v1beta2_DeploymentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentStatus is the most recently observed status of the Deployment.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "The generation observed by the deployment controller.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of non-terminated pods targeted by this deployment (their labels match the selector).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "updatedReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of non-terminated pods targeted by this deployment that have the desired template spec.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "readyReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of ready pods targeted by this deployment.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "availableReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "unavailableReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a deployment's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1beta2.DeploymentCondition"), + }, + }, + }, + }, + }, + "collisionCount": { + SchemaProps: spec.SchemaProps{ + Description: "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.DeploymentCondition"}, + } +} + +func schema_k8sio_api_apps_v1beta2_DeploymentStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentStrategy describes how to replace existing pods with new ones.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.", + Type: []string{"string"}, + Format: "", + }, + }, + "rollingUpdate": { + SchemaProps: spec.SchemaProps{ + Description: "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.", + Ref: ref("k8s.io/api/apps/v1beta2.RollingUpdateDeployment"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.RollingUpdateDeployment"}, + } +} + +func schema_k8sio_api_apps_v1beta2_ReplicaSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/apps/v1beta2.ReplicaSetSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/apps/v1beta2.ReplicaSetStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.ReplicaSetSpec", "k8s.io/api/apps/v1beta2.ReplicaSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta2_ReplicaSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSetCondition describes the state of a replica set at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of replica set condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "The last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_apps_v1beta2_ReplicaSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSetList is a collection of ReplicaSets.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1beta2.ReplicaSet"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.ReplicaSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta2_ReplicaSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSetSpec is the specification of a ReplicaSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "minReadySeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + }, + Required: []string{"selector"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_apps_v1beta2_ReplicaSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSetStatus represents the current status of a ReplicaSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "fullyLabeledReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "The number of pods that have labels matching the labels of the pod template of the replicaset.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "readyReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "The number of ready replicas for this replica set.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "availableReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "The number of available replicas (ready for at least minReadySeconds) for this replica set.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "ObservedGeneration reflects the generation of the most recently observed ReplicaSet.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a replica set's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1beta2.ReplicaSetCondition"), + }, + }, + }, + }, + }, + }, + Required: []string{"replicas"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.ReplicaSetCondition"}, + } +} + +func schema_k8sio_api_apps_v1beta2_RollingUpdateDaemonSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Spec to control the desired behavior of daemon set rolling update.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "maxUnavailable": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_apps_v1beta2_RollingUpdateDeployment(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Spec to control the desired behavior of rolling update.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "maxUnavailable": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + "maxSurge": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_apps_v1beta2_RollingUpdateStatefulSetStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "partition": { + SchemaProps: spec.SchemaProps{ + Description: "Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_apps_v1beta2_Scale(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Scale represents a scaling request for a resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", + Ref: ref("k8s.io/api/apps/v1beta2.ScaleSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only.", + Ref: ref("k8s.io/api/apps/v1beta2.ScaleStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.ScaleSpec", "k8s.io/api/apps/v1beta2.ScaleStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta2_ScaleSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ScaleSpec describes the attributes of a scale subresource", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "desired number of instances for the scaled object.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_apps_v1beta2_ScaleStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ScaleStatus represents the current status of a scale subresource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "actual number of observed instances of the scaled object.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "targetSelector": { + SchemaProps: spec.SchemaProps{ + Description: "label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"replicas"}, + }, + }, + } +} + +func schema_k8sio_api_apps_v1beta2_StatefulSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED - This group version of StatefulSet is deprecated by apps/v1/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n - Network: A single stable DNS and hostname.\n - Storage: As many VolumeClaims as requested.\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec defines the desired identities of pods in this set.", + Ref: ref("k8s.io/api/apps/v1beta2.StatefulSetSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.", + Ref: ref("k8s.io/api/apps/v1beta2.StatefulSetStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.StatefulSetSpec", "k8s.io/api/apps/v1beta2.StatefulSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta2_StatefulSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetCondition describes the state of a statefulset at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of statefulset condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_apps_v1beta2_StatefulSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetList is a collection of StatefulSets.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1beta2.StatefulSet"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.StatefulSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_apps_v1beta2_StatefulSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A StatefulSetSpec is the specification of a StatefulSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + "volumeClaimTemplates": { + SchemaProps: spec.SchemaProps{ + Description: "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaim"), + }, + }, + }, + }, + }, + "serviceName": { + SchemaProps: spec.SchemaProps{ + Description: "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", + Type: []string{"string"}, + Format: "", + }, + }, + "podManagementPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", + Type: []string{"string"}, + Format: "", + }, + }, + "updateStrategy": { + SchemaProps: spec.SchemaProps{ + Description: "updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.", + Ref: ref("k8s.io/api/apps/v1beta2.StatefulSetUpdateStrategy"), + }, + }, + "revisionHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"selector", "template", "serviceName"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.StatefulSetUpdateStrategy", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_apps_v1beta2_StatefulSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetStatus represents the current state of a StatefulSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "replicas is the number of Pods created by the StatefulSet controller.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "readyReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "currentReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "updatedReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "currentRevision": { + SchemaProps: spec.SchemaProps{ + Description: "currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).", + Type: []string{"string"}, + Format: "", + }, + }, + "updateRevision": { + SchemaProps: spec.SchemaProps{ + Description: "updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)", + Type: []string{"string"}, + Format: "", + }, + }, + "collisionCount": { + SchemaProps: spec.SchemaProps{ + Description: "collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a statefulset's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/apps/v1beta2.StatefulSetCondition"), + }, + }, + }, + }, + }, + }, + Required: []string{"replicas"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.StatefulSetCondition"}, + } +} + +func schema_k8sio_api_apps_v1beta2_StatefulSetUpdateStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.", + Type: []string{"string"}, + Format: "", + }, + }, + "rollingUpdate": { + SchemaProps: spec.SchemaProps{ + Description: "RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.", + Ref: ref("k8s.io/api/apps/v1beta2.RollingUpdateStatefulSetStrategy"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/apps/v1beta2.RollingUpdateStatefulSetStrategy"}, + } +} + +func schema_k8sio_api_authentication_v1_BoundObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "BoundObjectReference is a reference to an object that a token is bound to.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind of the referent. Valid kinds are 'Pod' and 'Secret'.", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "API version of the referent.", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the referent.", + Type: []string{"string"}, + Format: "", + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "UID of the referent.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_authentication_v1_TokenRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TokenRequest requests a token for a given service account.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/authentication/v1.TokenRequestSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/authentication/v1.TokenRequestStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authentication/v1.TokenRequestSpec", "k8s.io/api/authentication/v1.TokenRequestStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_authentication_v1_TokenRequestSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TokenRequestSpec contains client provided parameters of a token request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "audiences": { + SchemaProps: spec.SchemaProps{ + Description: "Audiences are the intendend audiences of the token. A recipient of a token must identitfy themself with an identifier in the list of audiences of the token, and otherwise should reject the token. A token issued for multiple audiences may be used to authenticate against any of the audiences listed but implies a high degree of trust between the target audiences.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "expirationSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "ExpirationSeconds is the requested duration of validity of the request. The token issuer may return a token with a different validity duration so a client needs to check the 'expiration' field in a response.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "boundObjectRef": { + SchemaProps: spec.SchemaProps{ + Description: "BoundObjectRef is a reference to an object that the token will be bound to. The token will only be valid for as long as the bound object exists. NOTE: The API server's TokenReview endpoint will validate the BoundObjectRef, but other audiences may not. Keep ExpirationSeconds small if you want prompt revocation.", + Ref: ref("k8s.io/api/authentication/v1.BoundObjectReference"), + }, + }, + }, + Required: []string{"audiences"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authentication/v1.BoundObjectReference"}, + } +} + +func schema_k8sio_api_authentication_v1_TokenRequestStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TokenRequestStatus is the result of a token request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "token": { + SchemaProps: spec.SchemaProps{ + Description: "Token is the opaque bearer token.", + Type: []string{"string"}, + Format: "", + }, + }, + "expirationTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "ExpirationTimestamp is the time of expiration of the returned token.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + }, + Required: []string{"token", "expirationTimestamp"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_authentication_v1_TokenReview(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec holds information about the request being evaluated", + Ref: ref("k8s.io/api/authentication/v1.TokenReviewSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is filled in by the server and indicates whether the request can be authenticated.", + Ref: ref("k8s.io/api/authentication/v1.TokenReviewStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authentication/v1.TokenReviewSpec", "k8s.io/api/authentication/v1.TokenReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_authentication_v1_TokenReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TokenReviewSpec is a description of the token authentication request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "token": { + SchemaProps: spec.SchemaProps{ + Description: "Token is the opaque bearer token.", + Type: []string{"string"}, + Format: "", + }, + }, + "audiences": { + SchemaProps: spec.SchemaProps{ + Description: "Audiences is a list of the identifiers that the resource server presented with the token identifies as. Audience-aware token authenticators will verify that the token was intended for at least one of the audiences in this list. If no audiences are provided, the audience will default to the audience of the Kubernetes apiserver.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_authentication_v1_TokenReviewStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TokenReviewStatus is the result of the token authentication request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "authenticated": { + SchemaProps: spec.SchemaProps{ + Description: "Authenticated indicates that the token was associated with a known user.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "user": { + SchemaProps: spec.SchemaProps{ + Description: "User is the UserInfo associated with the provided token.", + Ref: ref("k8s.io/api/authentication/v1.UserInfo"), + }, + }, + "audiences": { + SchemaProps: spec.SchemaProps{ + Description: "Audiences are audience identifiers chosen by the authenticator that are compatible with both the TokenReview and token. An identifier is any identifier in the intersection of the TokenReviewSpec audiences and the token's audiences. A client of the TokenReview API that sets the spec.audiences field should validate that a compatible audience identifier is returned in the status.audiences field to ensure that the TokenReview server is audience aware. If a TokenReview returns an empty status.audience field where status.authenticated is \"true\", the token is valid against the audience of the Kubernetes API server.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "error": { + SchemaProps: spec.SchemaProps{ + Description: "Error indicates that the token couldn't be checked", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/authentication/v1.UserInfo"}, + } +} + +func schema_k8sio_api_authentication_v1_UserInfo(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "UserInfo holds the information about the user needed to implement the user.Info interface.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "username": { + SchemaProps: spec.SchemaProps{ + Description: "The name that uniquely identifies this user among all active users.", + Type: []string{"string"}, + Format: "", + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.", + Type: []string{"string"}, + Format: "", + }, + }, + "groups": { + SchemaProps: spec.SchemaProps{ + Description: "The names of groups this user is a part of.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "extra": { + SchemaProps: spec.SchemaProps{ + Description: "Any additional information provided by the authenticator.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_authentication_v1beta1_TokenReview(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec holds information about the request being evaluated", + Ref: ref("k8s.io/api/authentication/v1beta1.TokenReviewSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is filled in by the server and indicates whether the request can be authenticated.", + Ref: ref("k8s.io/api/authentication/v1beta1.TokenReviewStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authentication/v1beta1.TokenReviewSpec", "k8s.io/api/authentication/v1beta1.TokenReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_authentication_v1beta1_TokenReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TokenReviewSpec is a description of the token authentication request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "token": { + SchemaProps: spec.SchemaProps{ + Description: "Token is the opaque bearer token.", + Type: []string{"string"}, + Format: "", + }, + }, + "audiences": { + SchemaProps: spec.SchemaProps{ + Description: "Audiences is a list of the identifiers that the resource server presented with the token identifies as. Audience-aware token authenticators will verify that the token was intended for at least one of the audiences in this list. If no audiences are provided, the audience will default to the audience of the Kubernetes apiserver.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_authentication_v1beta1_TokenReviewStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TokenReviewStatus is the result of the token authentication request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "authenticated": { + SchemaProps: spec.SchemaProps{ + Description: "Authenticated indicates that the token was associated with a known user.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "user": { + SchemaProps: spec.SchemaProps{ + Description: "User is the UserInfo associated with the provided token.", + Ref: ref("k8s.io/api/authentication/v1beta1.UserInfo"), + }, + }, + "audiences": { + SchemaProps: spec.SchemaProps{ + Description: "Audiences are audience identifiers chosen by the authenticator that are compatible with both the TokenReview and token. An identifier is any identifier in the intersection of the TokenReviewSpec audiences and the token's audiences. A client of the TokenReview API that sets the spec.audiences field should validate that a compatible audience identifier is returned in the status.audiences field to ensure that the TokenReview server is audience aware. If a TokenReview returns an empty status.audience field where status.authenticated is \"true\", the token is valid against the audience of the Kubernetes API server.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "error": { + SchemaProps: spec.SchemaProps{ + Description: "Error indicates that the token couldn't be checked", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/authentication/v1beta1.UserInfo"}, + } +} + +func schema_k8sio_api_authentication_v1beta1_UserInfo(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "UserInfo holds the information about the user needed to implement the user.Info interface.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "username": { + SchemaProps: spec.SchemaProps{ + Description: "The name that uniquely identifies this user among all active users.", + Type: []string{"string"}, + Format: "", + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.", + Type: []string{"string"}, + Format: "", + }, + }, + "groups": { + SchemaProps: spec.SchemaProps{ + Description: "The names of groups this user is a part of.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "extra": { + SchemaProps: spec.SchemaProps{ + Description: "Any additional information provided by the authenticator.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_authorization_v1_LocalSubjectAccessReview(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace you made the request against. If empty, it is defaulted.", + Ref: ref("k8s.io/api/authorization/v1.SubjectAccessReviewSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is filled in by the server and indicates whether the request is allowed or not", + Ref: ref("k8s.io/api/authorization/v1.SubjectAccessReviewStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authorization/v1.SubjectAccessReviewSpec", "k8s.io/api/authorization/v1.SubjectAccessReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_authorization_v1_NonResourceAttributes(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Path is the URL path of the request", + Type: []string{"string"}, + Format: "", + }, + }, + "verb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb is the standard HTTP verb", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_authorization_v1_NonResourceRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NonResourceRule holds information that describes a rule for the non-resource", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "verbs": { + SchemaProps: spec.SchemaProps{ + Description: "Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options. \"*\" means all.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "nonResourceURLs": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path. \"*\" means all.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"verbs"}, + }, + }, + } +} + +func schema_k8sio_api_authorization_v1_ResourceAttributes(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview", + Type: []string{"string"}, + Format: "", + }, + }, + "verb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. \"*\" means all.", + Type: []string{"string"}, + Format: "", + }, + }, + "group": { + SchemaProps: spec.SchemaProps{ + Description: "Group is the API Group of the Resource. \"*\" means all.", + Type: []string{"string"}, + Format: "", + }, + }, + "version": { + SchemaProps: spec.SchemaProps{ + Description: "Version is the API Version of the Resource. \"*\" means all.", + Type: []string{"string"}, + Format: "", + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "Resource is one of the existing resource types. \"*\" means all.", + Type: []string{"string"}, + Format: "", + }, + }, + "subresource": { + SchemaProps: spec.SchemaProps{ + Description: "Subresource is one of the existing resource types. \"\" means none.", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_authorization_v1_ResourceRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "verbs": { + SchemaProps: spec.SchemaProps{ + Description: "Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy. \"*\" means all.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "apiGroups": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. \"*\" means all.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources is a list of resources this rule applies to. \"*\" means all in the specified apiGroups.\n \"*/foo\" represents the subresource 'foo' for all resources in the specified apiGroups.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resourceNames": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. \"*\" means all.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"verbs"}, + }, + }, + } +} + +func schema_k8sio_api_authorization_v1_SelfSubjectAccessReview(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SelfSubjectAccessReview checks whether or the current user can perform an action. Not filling in a spec.namespace means \"in all namespaces\". Self is a special case, because users should always be able to check whether they can perform an action", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec holds information about the request being evaluated. user and groups must be empty", + Ref: ref("k8s.io/api/authorization/v1.SelfSubjectAccessReviewSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is filled in by the server and indicates whether the request is allowed or not", + Ref: ref("k8s.io/api/authorization/v1.SubjectAccessReviewStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authorization/v1.SelfSubjectAccessReviewSpec", "k8s.io/api/authorization/v1.SubjectAccessReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_authorization_v1_SelfSubjectAccessReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "resourceAttributes": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceAuthorizationAttributes describes information for a resource access request", + Ref: ref("k8s.io/api/authorization/v1.ResourceAttributes"), + }, + }, + "nonResourceAttributes": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourceAttributes describes information for a non-resource access request", + Ref: ref("k8s.io/api/authorization/v1.NonResourceAttributes"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/authorization/v1.NonResourceAttributes", "k8s.io/api/authorization/v1.ResourceAttributes"}, + } +} + +func schema_k8sio_api_authorization_v1_SelfSubjectRulesReview(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec holds information about the request being evaluated.", + Ref: ref("k8s.io/api/authorization/v1.SelfSubjectRulesReviewSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is filled in by the server and indicates the set of actions a user can perform.", + Ref: ref("k8s.io/api/authorization/v1.SubjectRulesReviewStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authorization/v1.SelfSubjectRulesReviewSpec", "k8s.io/api/authorization/v1.SubjectRulesReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_authorization_v1_SelfSubjectRulesReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace to evaluate rules for. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_authorization_v1_SubjectAccessReview(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SubjectAccessReview checks whether or not a user or group can perform an action.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec holds information about the request being evaluated", + Ref: ref("k8s.io/api/authorization/v1.SubjectAccessReviewSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is filled in by the server and indicates whether the request is allowed or not", + Ref: ref("k8s.io/api/authorization/v1.SubjectAccessReviewStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authorization/v1.SubjectAccessReviewSpec", "k8s.io/api/authorization/v1.SubjectAccessReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_authorization_v1_SubjectAccessReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "resourceAttributes": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceAuthorizationAttributes describes information for a resource access request", + Ref: ref("k8s.io/api/authorization/v1.ResourceAttributes"), + }, + }, + "nonResourceAttributes": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourceAttributes describes information for a non-resource access request", + Ref: ref("k8s.io/api/authorization/v1.NonResourceAttributes"), + }, + }, + "user": { + SchemaProps: spec.SchemaProps{ + Description: "User is the user you're testing for. If you specify \"User\" but not \"Groups\", then is it interpreted as \"What if User were not a member of any groups", + Type: []string{"string"}, + Format: "", + }, + }, + "groups": { + SchemaProps: spec.SchemaProps{ + Description: "Groups is the groups you're testing for.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "extra": { + SchemaProps: spec.SchemaProps{ + Description: "Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "UID information about the requesting user.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/authorization/v1.NonResourceAttributes", "k8s.io/api/authorization/v1.ResourceAttributes"}, + } +} + +func schema_k8sio_api_authorization_v1_SubjectAccessReviewStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SubjectAccessReviewStatus", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "allowed": { + SchemaProps: spec.SchemaProps{ + Description: "Allowed is required. True if the action would be allowed, false otherwise.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "denied": { + SchemaProps: spec.SchemaProps{ + Description: "Denied is optional. True if the action would be denied, otherwise false. If both allowed is false and denied is false, then the authorizer has no opinion on whether to authorize the action. Denied may not be true if Allowed is true.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "Reason is optional. It indicates why a request was allowed or denied.", + Type: []string{"string"}, + Format: "", + }, + }, + "evaluationError": { + SchemaProps: spec.SchemaProps{ + Description: "EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"allowed"}, + }, + }, + } +} + +func schema_k8sio_api_authorization_v1_SubjectRulesReviewStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on the set of authorizers the server is configured with and any errors experienced during evaluation. Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission, even if that list is incomplete.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "resourceRules": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/authorization/v1.ResourceRule"), + }, + }, + }, + }, + }, + "nonResourceRules": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/authorization/v1.NonResourceRule"), + }, + }, + }, + }, + }, + "incomplete": { + SchemaProps: spec.SchemaProps{ + Description: "Incomplete is true when the rules returned by this call are incomplete. This is most commonly encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "evaluationError": { + SchemaProps: spec.SchemaProps{ + Description: "EvaluationError can appear in combination with Rules. It indicates an error occurred during rule evaluation, such as an authorizer that doesn't support rule evaluation, and that ResourceRules and/or NonResourceRules may be incomplete.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"resourceRules", "nonResourceRules", "incomplete"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authorization/v1.NonResourceRule", "k8s.io/api/authorization/v1.ResourceRule"}, + } +} + +func schema_k8sio_api_authorization_v1beta1_LocalSubjectAccessReview(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace you made the request against. If empty, it is defaulted.", + Ref: ref("k8s.io/api/authorization/v1beta1.SubjectAccessReviewSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is filled in by the server and indicates whether the request is allowed or not", + Ref: ref("k8s.io/api/authorization/v1beta1.SubjectAccessReviewStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authorization/v1beta1.SubjectAccessReviewSpec", "k8s.io/api/authorization/v1beta1.SubjectAccessReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_authorization_v1beta1_NonResourceAttributes(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Path is the URL path of the request", + Type: []string{"string"}, + Format: "", + }, + }, + "verb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb is the standard HTTP verb", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_authorization_v1beta1_NonResourceRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NonResourceRule holds information that describes a rule for the non-resource", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "verbs": { + SchemaProps: spec.SchemaProps{ + Description: "Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options. \"*\" means all.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "nonResourceURLs": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path. \"*\" means all.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"verbs"}, + }, + }, + } +} + +func schema_k8sio_api_authorization_v1beta1_ResourceAttributes(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview", + Type: []string{"string"}, + Format: "", + }, + }, + "verb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. \"*\" means all.", + Type: []string{"string"}, + Format: "", + }, + }, + "group": { + SchemaProps: spec.SchemaProps{ + Description: "Group is the API Group of the Resource. \"*\" means all.", + Type: []string{"string"}, + Format: "", + }, + }, + "version": { + SchemaProps: spec.SchemaProps{ + Description: "Version is the API Version of the Resource. \"*\" means all.", + Type: []string{"string"}, + Format: "", + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "Resource is one of the existing resource types. \"*\" means all.", + Type: []string{"string"}, + Format: "", + }, + }, + "subresource": { + SchemaProps: spec.SchemaProps{ + Description: "Subresource is one of the existing resource types. \"\" means none.", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_authorization_v1beta1_ResourceRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "verbs": { + SchemaProps: spec.SchemaProps{ + Description: "Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy. \"*\" means all.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "apiGroups": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. \"*\" means all.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources is a list of resources this rule applies to. \"*\" means all in the specified apiGroups.\n \"*/foo\" represents the subresource 'foo' for all resources in the specified apiGroups.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resourceNames": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. \"*\" means all.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"verbs"}, + }, + }, + } +} + +func schema_k8sio_api_authorization_v1beta1_SelfSubjectAccessReview(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SelfSubjectAccessReview checks whether or the current user can perform an action. Not filling in a spec.namespace means \"in all namespaces\". Self is a special case, because users should always be able to check whether they can perform an action", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec holds information about the request being evaluated. user and groups must be empty", + Ref: ref("k8s.io/api/authorization/v1beta1.SelfSubjectAccessReviewSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is filled in by the server and indicates whether the request is allowed or not", + Ref: ref("k8s.io/api/authorization/v1beta1.SubjectAccessReviewStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authorization/v1beta1.SelfSubjectAccessReviewSpec", "k8s.io/api/authorization/v1beta1.SubjectAccessReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_authorization_v1beta1_SelfSubjectAccessReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "resourceAttributes": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceAuthorizationAttributes describes information for a resource access request", + Ref: ref("k8s.io/api/authorization/v1beta1.ResourceAttributes"), + }, + }, + "nonResourceAttributes": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourceAttributes describes information for a non-resource access request", + Ref: ref("k8s.io/api/authorization/v1beta1.NonResourceAttributes"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/authorization/v1beta1.NonResourceAttributes", "k8s.io/api/authorization/v1beta1.ResourceAttributes"}, + } +} + +func schema_k8sio_api_authorization_v1beta1_SelfSubjectRulesReview(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec holds information about the request being evaluated.", + Ref: ref("k8s.io/api/authorization/v1beta1.SelfSubjectRulesReviewSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is filled in by the server and indicates the set of actions a user can perform.", + Ref: ref("k8s.io/api/authorization/v1beta1.SubjectRulesReviewStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authorization/v1beta1.SelfSubjectRulesReviewSpec", "k8s.io/api/authorization/v1beta1.SubjectRulesReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_authorization_v1beta1_SelfSubjectRulesReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace to evaluate rules for. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_authorization_v1beta1_SubjectAccessReview(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SubjectAccessReview checks whether or not a user or group can perform an action.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec holds information about the request being evaluated", + Ref: ref("k8s.io/api/authorization/v1beta1.SubjectAccessReviewSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is filled in by the server and indicates whether the request is allowed or not", + Ref: ref("k8s.io/api/authorization/v1beta1.SubjectAccessReviewStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authorization/v1beta1.SubjectAccessReviewSpec", "k8s.io/api/authorization/v1beta1.SubjectAccessReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_authorization_v1beta1_SubjectAccessReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "resourceAttributes": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceAuthorizationAttributes describes information for a resource access request", + Ref: ref("k8s.io/api/authorization/v1beta1.ResourceAttributes"), + }, + }, + "nonResourceAttributes": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourceAttributes describes information for a non-resource access request", + Ref: ref("k8s.io/api/authorization/v1beta1.NonResourceAttributes"), + }, + }, + "user": { + SchemaProps: spec.SchemaProps{ + Description: "User is the user you're testing for. If you specify \"User\" but not \"Group\", then is it interpreted as \"What if User were not a member of any groups", + Type: []string{"string"}, + Format: "", + }, + }, + "group": { + SchemaProps: spec.SchemaProps{ + Description: "Groups is the groups you're testing for.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "extra": { + SchemaProps: spec.SchemaProps{ + Description: "Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "UID information about the requesting user.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/authorization/v1beta1.NonResourceAttributes", "k8s.io/api/authorization/v1beta1.ResourceAttributes"}, + } +} + +func schema_k8sio_api_authorization_v1beta1_SubjectAccessReviewStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SubjectAccessReviewStatus", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "allowed": { + SchemaProps: spec.SchemaProps{ + Description: "Allowed is required. True if the action would be allowed, false otherwise.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "denied": { + SchemaProps: spec.SchemaProps{ + Description: "Denied is optional. True if the action would be denied, otherwise false. If both allowed is false and denied is false, then the authorizer has no opinion on whether to authorize the action. Denied may not be true if Allowed is true.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "Reason is optional. It indicates why a request was allowed or denied.", + Type: []string{"string"}, + Format: "", + }, + }, + "evaluationError": { + SchemaProps: spec.SchemaProps{ + Description: "EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"allowed"}, + }, + }, + } +} + +func schema_k8sio_api_authorization_v1beta1_SubjectRulesReviewStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on the set of authorizers the server is configured with and any errors experienced during evaluation. Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission, even if that list is incomplete.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "resourceRules": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/authorization/v1beta1.ResourceRule"), + }, + }, + }, + }, + }, + "nonResourceRules": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/authorization/v1beta1.NonResourceRule"), + }, + }, + }, + }, + }, + "incomplete": { + SchemaProps: spec.SchemaProps{ + Description: "Incomplete is true when the rules returned by this call are incomplete. This is most commonly encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "evaluationError": { + SchemaProps: spec.SchemaProps{ + Description: "EvaluationError can appear in combination with Rules. It indicates an error occurred during rule evaluation, such as an authorizer that doesn't support rule evaluation, and that ResourceRules and/or NonResourceRules may be incomplete.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"resourceRules", "nonResourceRules", "incomplete"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authorization/v1beta1.NonResourceRule", "k8s.io/api/authorization/v1beta1.ResourceRule"}, + } +} + +func schema_k8sio_api_autoscaling_v1_CrossVersionObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CrossVersionObjectReference contains enough information to let you identify the referred resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\"", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "API version of the referent", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"kind", "name"}, + }, + }, + } +} + +func schema_k8sio_api_autoscaling_v1_ExternalMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metricName": { + SchemaProps: spec.SchemaProps{ + Description: "metricName is the name of the metric in question.", + Type: []string{"string"}, + Format: "", + }, + }, + "metricSelector": { + SchemaProps: spec.SchemaProps{ + Description: "metricSelector is used to identify a specific time series within a given metric.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "targetValue": { + SchemaProps: spec.SchemaProps{ + Description: "targetValue is the target value of the metric (as a quantity). Mutually exclusive with TargetAverageValue.", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "targetAverageValue": { + SchemaProps: spec.SchemaProps{ + Description: "targetAverageValue is the target per-pod value of global metric (as a quantity). Mutually exclusive with TargetValue.", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"metricName"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_autoscaling_v1_ExternalMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metricName": { + SchemaProps: spec.SchemaProps{ + Description: "metricName is the name of a metric used for autoscaling in metric system.", + Type: []string{"string"}, + Format: "", + }, + }, + "metricSelector": { + SchemaProps: spec.SchemaProps{ + Description: "metricSelector is used to identify a specific time series within a given metric.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "currentValue": { + SchemaProps: spec.SchemaProps{ + Description: "currentValue is the current value of the metric (as a quantity)", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "currentAverageValue": { + SchemaProps: spec.SchemaProps{ + Description: "currentAverageValue is the current value of metric averaged over autoscaled pods.", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"metricName", "currentValue"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscaler(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "configuration of a horizontal pod autoscaler.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", + Ref: ref("k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "current information about the autoscaler.", + Ref: ref("k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerSpec", "k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type describes the current condition", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status is the status of the condition (True, False, Unknown)", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "lastTransitionTime is the last time the condition transitioned from one status to another", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "reason is the reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "message is a human-readable explanation containing details about the transition", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "list of horizontal pod autoscaler objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "list of horizontal pod autoscaler objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/autoscaling/v1.HorizontalPodAutoscaler"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v1.HorizontalPodAutoscaler", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "specification of a horizontal pod autoscaler.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "scaleTargetRef": { + SchemaProps: spec.SchemaProps{ + Description: "reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource.", + Ref: ref("k8s.io/api/autoscaling/v1.CrossVersionObjectReference"), + }, + }, + "minReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod. minReplicas is allowed to be 0 if the alpha feature gate HPAScaleToZero is enabled and at least one Object or External metric is configured. Scaling is active as long as at least one metric value is available.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "maxReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "targetCPUUtilizationPercentage": { + SchemaProps: spec.SchemaProps{ + Description: "target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"scaleTargetRef", "maxReplicas"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v1.CrossVersionObjectReference"}, + } +} + +func schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "current status of a horizontal pod autoscaler", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "most recent generation observed by this autoscaler.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "lastScaleTime": { + SchemaProps: spec.SchemaProps{ + Description: "last time the HorizontalPodAutoscaler scaled the number of pods; used by the autoscaler to control how often the number of pods is changed.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "currentReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "current number of replicas of pods managed by this autoscaler.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "desiredReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "desired number of replicas of pods managed by this autoscaler.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "currentCPUUtilizationPercentage": { + SchemaProps: spec.SchemaProps{ + Description: "current average CPU utilization over all pods, represented as a percentage of requested CPU, e.g. 70 means that an average pod is using now 70% of its requested CPU.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"currentReplicas", "desiredReplicas"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_autoscaling_v1_MetricSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is the type of metric source. It should be one of \"Object\", \"Pods\" or \"Resource\", each mapping to a matching field in the object.", + Type: []string{"string"}, + Format: "", + }, + }, + "object": { + SchemaProps: spec.SchemaProps{ + Description: "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", + Ref: ref("k8s.io/api/autoscaling/v1.ObjectMetricSource"), + }, + }, + "pods": { + SchemaProps: spec.SchemaProps{ + Description: "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + Ref: ref("k8s.io/api/autoscaling/v1.PodsMetricSource"), + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + Ref: ref("k8s.io/api/autoscaling/v1.ResourceMetricSource"), + }, + }, + "external": { + SchemaProps: spec.SchemaProps{ + Description: "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", + Ref: ref("k8s.io/api/autoscaling/v1.ExternalMetricSource"), + }, + }, + }, + Required: []string{"type"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v1.ExternalMetricSource", "k8s.io/api/autoscaling/v1.ObjectMetricSource", "k8s.io/api/autoscaling/v1.PodsMetricSource", "k8s.io/api/autoscaling/v1.ResourceMetricSource"}, + } +} + +func schema_k8sio_api_autoscaling_v1_MetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricStatus describes the last-read state of a single metric.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is the type of metric source. It will be one of \"Object\", \"Pods\" or \"Resource\", each corresponds to a matching field in the object.", + Type: []string{"string"}, + Format: "", + }, + }, + "object": { + SchemaProps: spec.SchemaProps{ + Description: "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", + Ref: ref("k8s.io/api/autoscaling/v1.ObjectMetricStatus"), + }, + }, + "pods": { + SchemaProps: spec.SchemaProps{ + Description: "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + Ref: ref("k8s.io/api/autoscaling/v1.PodsMetricStatus"), + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + Ref: ref("k8s.io/api/autoscaling/v1.ResourceMetricStatus"), + }, + }, + "external": { + SchemaProps: spec.SchemaProps{ + Description: "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", + Ref: ref("k8s.io/api/autoscaling/v1.ExternalMetricStatus"), + }, + }, + }, + Required: []string{"type"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v1.ExternalMetricStatus", "k8s.io/api/autoscaling/v1.ObjectMetricStatus", "k8s.io/api/autoscaling/v1.PodsMetricStatus", "k8s.io/api/autoscaling/v1.ResourceMetricStatus"}, + } +} + +func schema_k8sio_api_autoscaling_v1_ObjectMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "target": { + SchemaProps: spec.SchemaProps{ + Description: "target is the described Kubernetes object.", + Ref: ref("k8s.io/api/autoscaling/v1.CrossVersionObjectReference"), + }, + }, + "metricName": { + SchemaProps: spec.SchemaProps{ + Description: "metricName is the name of the metric in question.", + Type: []string{"string"}, + Format: "", + }, + }, + "targetValue": { + SchemaProps: spec.SchemaProps{ + Description: "targetValue is the target value of the metric (as a quantity).", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric. When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "averageValue": { + SchemaProps: spec.SchemaProps{ + Description: "averageValue is the target value of the average of the metric across all relevant pods (as a quantity)", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"target", "metricName", "targetValue"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v1.CrossVersionObjectReference", "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_autoscaling_v1_ObjectMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "target": { + SchemaProps: spec.SchemaProps{ + Description: "target is the described Kubernetes object.", + Ref: ref("k8s.io/api/autoscaling/v1.CrossVersionObjectReference"), + }, + }, + "metricName": { + SchemaProps: spec.SchemaProps{ + Description: "metricName is the name of the metric in question.", + Type: []string{"string"}, + Format: "", + }, + }, + "currentValue": { + SchemaProps: spec.SchemaProps{ + Description: "currentValue is the current value of the metric (as a quantity).", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "averageValue": { + SchemaProps: spec.SchemaProps{ + Description: "averageValue is the current value of the average of the metric across all relevant pods (as a quantity)", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"target", "metricName", "currentValue"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v1.CrossVersionObjectReference", "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_autoscaling_v1_PodsMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metricName": { + SchemaProps: spec.SchemaProps{ + Description: "metricName is the name of the metric in question", + Type: []string{"string"}, + Format: "", + }, + }, + "targetAverageValue": { + SchemaProps: spec.SchemaProps{ + Description: "targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + }, + Required: []string{"metricName", "targetAverageValue"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_autoscaling_v1_PodsMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metricName": { + SchemaProps: spec.SchemaProps{ + Description: "metricName is the name of the metric in question", + Type: []string{"string"}, + Format: "", + }, + }, + "currentAverageValue": { + SchemaProps: spec.SchemaProps{ + Description: "currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + }, + Required: []string{"metricName", "currentAverageValue"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_autoscaling_v1_ResourceMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the resource in question.", + Type: []string{"string"}, + Format: "", + }, + }, + "targetAverageUtilization": { + SchemaProps: spec.SchemaProps{ + Description: "targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "targetAverageValue": { + SchemaProps: spec.SchemaProps{ + Description: "targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type.", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"name"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_autoscaling_v1_ResourceMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the resource in question.", + Type: []string{"string"}, + Format: "", + }, + }, + "currentAverageUtilization": { + SchemaProps: spec.SchemaProps{ + Description: "currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. It will only be present if `targetAverageValue` was set in the corresponding metric specification.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "currentAverageValue": { + SchemaProps: spec.SchemaProps{ + Description: "currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type. It will always be set, regardless of the corresponding metric specification.", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"name", "currentAverageValue"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_autoscaling_v1_Scale(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Scale represents a scaling request for a resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", + Ref: ref("k8s.io/api/autoscaling/v1.ScaleSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only.", + Ref: ref("k8s.io/api/autoscaling/v1.ScaleStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v1.ScaleSpec", "k8s.io/api/autoscaling/v1.ScaleStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_autoscaling_v1_ScaleSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ScaleSpec describes the attributes of a scale subresource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "desired number of instances for the scaled object.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_autoscaling_v1_ScaleStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ScaleStatus represents the current status of a scale subresource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "actual number of observed instances of the scaled object.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "label query over pods that should match the replicas count. This is same as the label selector but in the string format to avoid introspection by clients. The string will be in the same format as the query-param syntax. More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"replicas"}, + }, + }, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_CrossVersionObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CrossVersionObjectReference contains enough information to let you identify the referred resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\"", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "API version of the referent", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"kind", "name"}, + }, + }, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_ExternalMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster). Exactly one \"target\" type should be set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metricName": { + SchemaProps: spec.SchemaProps{ + Description: "metricName is the name of the metric in question.", + Type: []string{"string"}, + Format: "", + }, + }, + "metricSelector": { + SchemaProps: spec.SchemaProps{ + Description: "metricSelector is used to identify a specific time series within a given metric.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "targetValue": { + SchemaProps: spec.SchemaProps{ + Description: "targetValue is the target value of the metric (as a quantity). Mutually exclusive with TargetAverageValue.", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "targetAverageValue": { + SchemaProps: spec.SchemaProps{ + Description: "targetAverageValue is the target per-pod value of global metric (as a quantity). Mutually exclusive with TargetValue.", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"metricName"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_ExternalMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metricName": { + SchemaProps: spec.SchemaProps{ + Description: "metricName is the name of a metric used for autoscaling in metric system.", + Type: []string{"string"}, + Format: "", + }, + }, + "metricSelector": { + SchemaProps: spec.SchemaProps{ + Description: "metricSelector is used to identify a specific time series within a given metric.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "currentValue": { + SchemaProps: spec.SchemaProps{ + Description: "currentValue is the current value of the metric (as a quantity)", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "currentAverageValue": { + SchemaProps: spec.SchemaProps{ + Description: "currentAverageValue is the current value of metric averaged over autoscaled pods.", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"metricName", "currentValue"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscaler(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", + Ref: ref("k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status is the current information about the autoscaler.", + Ref: ref("k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerSpec", "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type describes the current condition", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status is the status of the condition (True, False, Unknown)", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "lastTransitionTime is the last time the condition transitioned from one status to another", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "reason is the reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "message is a human-readable explanation containing details about the transition", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscaler is a list of horizontal pod autoscaler objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "metadata is the standard list metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is the list of horizontal pod autoscaler objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscaler"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscaler", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "scaleTargetRef": { + SchemaProps: spec.SchemaProps{ + Description: "scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.", + Ref: ref("k8s.io/api/autoscaling/v2beta1.CrossVersionObjectReference"), + }, + }, + "minReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod. minReplicas is allowed to be 0 if the alpha feature gate HPAScaleToZero is enabled and at least one Object or External metric is configured. Scaling is active as long as at least one metric value is available.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "maxReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "metrics": { + SchemaProps: spec.SchemaProps{ + Description: "metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/autoscaling/v2beta1.MetricSpec"), + }, + }, + }, + }, + }, + }, + Required: []string{"scaleTargetRef", "maxReplicas"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta1.CrossVersionObjectReference", "k8s.io/api/autoscaling/v2beta1.MetricSpec"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "observedGeneration is the most recent generation observed by this autoscaler.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "lastScaleTime": { + SchemaProps: spec.SchemaProps{ + Description: "lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "currentReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "desiredReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "currentMetrics": { + SchemaProps: spec.SchemaProps{ + Description: "currentMetrics is the last read state of the metrics used by this autoscaler.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/autoscaling/v2beta1.MetricStatus"), + }, + }, + }, + }, + }, + "conditions": { + SchemaProps: spec.SchemaProps{ + Description: "conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerCondition"), + }, + }, + }, + }, + }, + }, + Required: []string{"currentReplicas", "desiredReplicas", "conditions"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerCondition", "k8s.io/api/autoscaling/v2beta1.MetricStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_MetricSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is the type of metric source. It should be one of \"Object\", \"Pods\" or \"Resource\", each mapping to a matching field in the object.", + Type: []string{"string"}, + Format: "", + }, + }, + "object": { + SchemaProps: spec.SchemaProps{ + Description: "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", + Ref: ref("k8s.io/api/autoscaling/v2beta1.ObjectMetricSource"), + }, + }, + "pods": { + SchemaProps: spec.SchemaProps{ + Description: "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + Ref: ref("k8s.io/api/autoscaling/v2beta1.PodsMetricSource"), + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + Ref: ref("k8s.io/api/autoscaling/v2beta1.ResourceMetricSource"), + }, + }, + "external": { + SchemaProps: spec.SchemaProps{ + Description: "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", + Ref: ref("k8s.io/api/autoscaling/v2beta1.ExternalMetricSource"), + }, + }, + }, + Required: []string{"type"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta1.ExternalMetricSource", "k8s.io/api/autoscaling/v2beta1.ObjectMetricSource", "k8s.io/api/autoscaling/v2beta1.PodsMetricSource", "k8s.io/api/autoscaling/v2beta1.ResourceMetricSource"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_MetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricStatus describes the last-read state of a single metric.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is the type of metric source. It will be one of \"Object\", \"Pods\" or \"Resource\", each corresponds to a matching field in the object.", + Type: []string{"string"}, + Format: "", + }, + }, + "object": { + SchemaProps: spec.SchemaProps{ + Description: "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", + Ref: ref("k8s.io/api/autoscaling/v2beta1.ObjectMetricStatus"), + }, + }, + "pods": { + SchemaProps: spec.SchemaProps{ + Description: "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + Ref: ref("k8s.io/api/autoscaling/v2beta1.PodsMetricStatus"), + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + Ref: ref("k8s.io/api/autoscaling/v2beta1.ResourceMetricStatus"), + }, + }, + "external": { + SchemaProps: spec.SchemaProps{ + Description: "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", + Ref: ref("k8s.io/api/autoscaling/v2beta1.ExternalMetricStatus"), + }, + }, + }, + Required: []string{"type"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta1.ExternalMetricStatus", "k8s.io/api/autoscaling/v2beta1.ObjectMetricStatus", "k8s.io/api/autoscaling/v2beta1.PodsMetricStatus", "k8s.io/api/autoscaling/v2beta1.ResourceMetricStatus"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_ObjectMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "target": { + SchemaProps: spec.SchemaProps{ + Description: "target is the described Kubernetes object.", + Ref: ref("k8s.io/api/autoscaling/v2beta1.CrossVersionObjectReference"), + }, + }, + "metricName": { + SchemaProps: spec.SchemaProps{ + Description: "metricName is the name of the metric in question.", + Type: []string{"string"}, + Format: "", + }, + }, + "targetValue": { + SchemaProps: spec.SchemaProps{ + Description: "targetValue is the target value of the metric (as a quantity).", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "averageValue": { + SchemaProps: spec.SchemaProps{ + Description: "averageValue is the target value of the average of the metric across all relevant pods (as a quantity)", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"target", "metricName", "targetValue"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta1.CrossVersionObjectReference", "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_ObjectMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "target": { + SchemaProps: spec.SchemaProps{ + Description: "target is the described Kubernetes object.", + Ref: ref("k8s.io/api/autoscaling/v2beta1.CrossVersionObjectReference"), + }, + }, + "metricName": { + SchemaProps: spec.SchemaProps{ + Description: "metricName is the name of the metric in question.", + Type: []string{"string"}, + Format: "", + }, + }, + "currentValue": { + SchemaProps: spec.SchemaProps{ + Description: "currentValue is the current value of the metric (as a quantity).", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "averageValue": { + SchemaProps: spec.SchemaProps{ + Description: "averageValue is the current value of the average of the metric across all relevant pods (as a quantity)", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"target", "metricName", "currentValue"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta1.CrossVersionObjectReference", "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_PodsMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metricName": { + SchemaProps: spec.SchemaProps{ + Description: "metricName is the name of the metric in question", + Type: []string{"string"}, + Format: "", + }, + }, + "targetAverageValue": { + SchemaProps: spec.SchemaProps{ + Description: "targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + }, + Required: []string{"metricName", "targetAverageValue"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_PodsMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metricName": { + SchemaProps: spec.SchemaProps{ + Description: "metricName is the name of the metric in question", + Type: []string{"string"}, + Format: "", + }, + }, + "currentAverageValue": { + SchemaProps: spec.SchemaProps{ + Description: "currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + }, + Required: []string{"metricName", "currentAverageValue"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_ResourceMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the resource in question.", + Type: []string{"string"}, + Format: "", + }, + }, + "targetAverageUtilization": { + SchemaProps: spec.SchemaProps{ + Description: "targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "targetAverageValue": { + SchemaProps: spec.SchemaProps{ + Description: "targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type.", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"name"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta1_ResourceMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the resource in question.", + Type: []string{"string"}, + Format: "", + }, + }, + "currentAverageUtilization": { + SchemaProps: spec.SchemaProps{ + Description: "currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. It will only be present if `targetAverageValue` was set in the corresponding metric specification.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "currentAverageValue": { + SchemaProps: spec.SchemaProps{ + Description: "currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type. It will always be set, regardless of the corresponding metric specification.", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"name", "currentAverageValue"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_CrossVersionObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CrossVersionObjectReference contains enough information to let you identify the referred resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\"", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "API version of the referent", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"kind", "name"}, + }, + }, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_ExternalMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metric": { + SchemaProps: spec.SchemaProps{ + Description: "metric identifies the target metric by name and selector", + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricIdentifier"), + }, + }, + "target": { + SchemaProps: spec.SchemaProps{ + Description: "target specifies the target value for the given metric", + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricTarget"), + }, + }, + }, + Required: []string{"metric", "target"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.MetricIdentifier", "k8s.io/api/autoscaling/v2beta2.MetricTarget"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_ExternalMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metric": { + SchemaProps: spec.SchemaProps{ + Description: "metric identifies the target metric by name and selector", + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricIdentifier"), + }, + }, + "current": { + SchemaProps: spec.SchemaProps{ + Description: "current contains the current value for the given metric", + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricValueStatus"), + }, + }, + }, + Required: []string{"metric", "current"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.MetricIdentifier", "k8s.io/api/autoscaling/v2beta2.MetricValueStatus"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_HPAScalingPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HPAScalingPolicy is a single policy which must hold true for a specified past interval.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type is used to specify the scaling policy.", + Type: []string{"string"}, + Format: "", + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Description: "Value contains the amount of change which is permitted by the policy. It must be greater than zero", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "periodSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "PeriodSeconds specifies the window of time for which the policy should hold true. PeriodSeconds must be greater than zero and less than or equal to 1800 (30 min).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"type", "value", "periodSeconds"}, + }, + }, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_HPAScalingRules(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HPAScalingRules configures the scaling behavior for one direction. These Rules are applied after calculating DesiredReplicas from metrics for the HPA. They can limit the scaling velocity by specifying scaling policies. They can prevent flapping by specifying the stabilization window, so that the number of replicas is not set instantly, instead, the safest value from the stabilization window is chosen.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "stabilizationWindowSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "StabilizationWindowSeconds is the number of seconds for which past recommendations should be considered while scaling up or scaling down. StabilizationWindowSeconds must be greater than or equal to zero and less than or equal to 3600 (one hour). If not set, use the default values: - For scale up: 0 (i.e. no stabilization is done). - For scale down: 300 (i.e. the stabilization window is 300 seconds long).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selectPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "selectPolicy is used to specify which policy should be used. If not set, the default value MaxPolicySelect is used.", + Type: []string{"string"}, + Format: "", + }, + }, + "policies": { + SchemaProps: spec.SchemaProps{ + Description: "policies is a list of potential scaling polices which can be used during scaling. At least one policy must be specified, otherwise the HPAScalingRules will be discarded as invalid", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/autoscaling/v2beta2.HPAScalingPolicy"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.HPAScalingPolicy"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscaler(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", + Ref: ref("k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status is the current information about the autoscaler.", + Ref: ref("k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerSpec", "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerBehavior(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerBehavior configures the scaling behavior of the target in both Up and Down directions (scaleUp and scaleDown fields respectively).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "scaleUp": { + SchemaProps: spec.SchemaProps{ + Description: "scaleUp is scaling policy for scaling Up. If not set, the default value is the higher of:\n * increase no more than 4 pods per 60 seconds\n * double the number of pods per 60 seconds\nNo stabilization is used.", + Ref: ref("k8s.io/api/autoscaling/v2beta2.HPAScalingRules"), + }, + }, + "scaleDown": { + SchemaProps: spec.SchemaProps{ + Description: "scaleDown is scaling policy for scaling Down. If not set, the default value is to allow to scale down to minReplicas pods, with a 300 second stabilization window (i.e., the highest recommendation for the last 300sec is used).", + Ref: ref("k8s.io/api/autoscaling/v2beta2.HPAScalingRules"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.HPAScalingRules"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type describes the current condition", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status is the status of the condition (True, False, Unknown)", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "lastTransitionTime is the last time the condition transitioned from one status to another", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "reason is the reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "message is a human-readable explanation containing details about the transition", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerList is a list of horizontal pod autoscaler objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "metadata is the standard list metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is the list of horizontal pod autoscaler objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscaler"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscaler", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "scaleTargetRef": { + SchemaProps: spec.SchemaProps{ + Description: "scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.", + Ref: ref("k8s.io/api/autoscaling/v2beta2.CrossVersionObjectReference"), + }, + }, + "minReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod. minReplicas is allowed to be 0 if the alpha feature gate HPAScaleToZero is enabled and at least one Object or External metric is configured. Scaling is active as long as at least one metric value is available.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "maxReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "metrics": { + SchemaProps: spec.SchemaProps{ + Description: "metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the default metric will be set to 80% average CPU utilization.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricSpec"), + }, + }, + }, + }, + }, + "behavior": { + SchemaProps: spec.SchemaProps{ + Description: "behavior configures the scaling behavior of the target in both Up and Down directions (scaleUp and scaleDown fields respectively). If not set, the default HPAScalingRules for scale up and scale down are used.", + Ref: ref("k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerBehavior"), + }, + }, + }, + Required: []string{"scaleTargetRef", "maxReplicas"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.CrossVersionObjectReference", "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerBehavior", "k8s.io/api/autoscaling/v2beta2.MetricSpec"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "observedGeneration is the most recent generation observed by this autoscaler.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "lastScaleTime": { + SchemaProps: spec.SchemaProps{ + Description: "lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "currentReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "desiredReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "currentMetrics": { + SchemaProps: spec.SchemaProps{ + Description: "currentMetrics is the last read state of the metrics used by this autoscaler.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricStatus"), + }, + }, + }, + }, + }, + "conditions": { + SchemaProps: spec.SchemaProps{ + Description: "conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerCondition"), + }, + }, + }, + }, + }, + }, + Required: []string{"currentReplicas", "desiredReplicas", "conditions"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerCondition", "k8s.io/api/autoscaling/v2beta2.MetricStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_MetricIdentifier(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricIdentifier defines the name and optionally selector for a metric", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the given metric", + Type: []string{"string"}, + Format: "", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + }, + Required: []string{"name"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_MetricSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is the type of metric source. It should be one of \"Object\", \"Pods\" or \"Resource\", each mapping to a matching field in the object.", + Type: []string{"string"}, + Format: "", + }, + }, + "object": { + SchemaProps: spec.SchemaProps{ + Description: "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", + Ref: ref("k8s.io/api/autoscaling/v2beta2.ObjectMetricSource"), + }, + }, + "pods": { + SchemaProps: spec.SchemaProps{ + Description: "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + Ref: ref("k8s.io/api/autoscaling/v2beta2.PodsMetricSource"), + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + Ref: ref("k8s.io/api/autoscaling/v2beta2.ResourceMetricSource"), + }, + }, + "external": { + SchemaProps: spec.SchemaProps{ + Description: "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", + Ref: ref("k8s.io/api/autoscaling/v2beta2.ExternalMetricSource"), + }, + }, + }, + Required: []string{"type"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.ExternalMetricSource", "k8s.io/api/autoscaling/v2beta2.ObjectMetricSource", "k8s.io/api/autoscaling/v2beta2.PodsMetricSource", "k8s.io/api/autoscaling/v2beta2.ResourceMetricSource"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_MetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricStatus describes the last-read state of a single metric.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is the type of metric source. It will be one of \"Object\", \"Pods\" or \"Resource\", each corresponds to a matching field in the object.", + Type: []string{"string"}, + Format: "", + }, + }, + "object": { + SchemaProps: spec.SchemaProps{ + Description: "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", + Ref: ref("k8s.io/api/autoscaling/v2beta2.ObjectMetricStatus"), + }, + }, + "pods": { + SchemaProps: spec.SchemaProps{ + Description: "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + Ref: ref("k8s.io/api/autoscaling/v2beta2.PodsMetricStatus"), + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + Ref: ref("k8s.io/api/autoscaling/v2beta2.ResourceMetricStatus"), + }, + }, + "external": { + SchemaProps: spec.SchemaProps{ + Description: "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", + Ref: ref("k8s.io/api/autoscaling/v2beta2.ExternalMetricStatus"), + }, + }, + }, + Required: []string{"type"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.ExternalMetricStatus", "k8s.io/api/autoscaling/v2beta2.ObjectMetricStatus", "k8s.io/api/autoscaling/v2beta2.PodsMetricStatus", "k8s.io/api/autoscaling/v2beta2.ResourceMetricStatus"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_MetricTarget(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricTarget defines the target value, average value, or average utilization of a specific metric", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type represents whether the metric type is Utilization, Value, or AverageValue", + Type: []string{"string"}, + Format: "", + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Description: "value is the target value of the metric (as a quantity).", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "averageValue": { + SchemaProps: spec.SchemaProps{ + Description: "averageValue is the target value of the average of the metric across all relevant pods (as a quantity)", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "averageUtilization": { + SchemaProps: spec.SchemaProps{ + Description: "averageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. Currently only valid for Resource metric source type", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"type"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_MetricValueStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricValueStatus holds the current value for a metric", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "value": { + SchemaProps: spec.SchemaProps{ + Description: "value is the current value of the metric (as a quantity).", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "averageValue": { + SchemaProps: spec.SchemaProps{ + Description: "averageValue is the current value of the average of the metric across all relevant pods (as a quantity)", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "averageUtilization": { + SchemaProps: spec.SchemaProps{ + Description: "currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_ObjectMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "describedObject": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/autoscaling/v2beta2.CrossVersionObjectReference"), + }, + }, + "target": { + SchemaProps: spec.SchemaProps{ + Description: "target specifies the target value for the given metric", + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricTarget"), + }, + }, + "metric": { + SchemaProps: spec.SchemaProps{ + Description: "metric identifies the target metric by name and selector", + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricIdentifier"), + }, + }, + }, + Required: []string{"describedObject", "target", "metric"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.CrossVersionObjectReference", "k8s.io/api/autoscaling/v2beta2.MetricIdentifier", "k8s.io/api/autoscaling/v2beta2.MetricTarget"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_ObjectMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metric": { + SchemaProps: spec.SchemaProps{ + Description: "metric identifies the target metric by name and selector", + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricIdentifier"), + }, + }, + "current": { + SchemaProps: spec.SchemaProps{ + Description: "current contains the current value for the given metric", + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricValueStatus"), + }, + }, + "describedObject": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/autoscaling/v2beta2.CrossVersionObjectReference"), + }, + }, + }, + Required: []string{"metric", "current", "describedObject"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.CrossVersionObjectReference", "k8s.io/api/autoscaling/v2beta2.MetricIdentifier", "k8s.io/api/autoscaling/v2beta2.MetricValueStatus"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_PodsMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metric": { + SchemaProps: spec.SchemaProps{ + Description: "metric identifies the target metric by name and selector", + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricIdentifier"), + }, + }, + "target": { + SchemaProps: spec.SchemaProps{ + Description: "target specifies the target value for the given metric", + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricTarget"), + }, + }, + }, + Required: []string{"metric", "target"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.MetricIdentifier", "k8s.io/api/autoscaling/v2beta2.MetricTarget"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_PodsMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metric": { + SchemaProps: spec.SchemaProps{ + Description: "metric identifies the target metric by name and selector", + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricIdentifier"), + }, + }, + "current": { + SchemaProps: spec.SchemaProps{ + Description: "current contains the current value for the given metric", + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricValueStatus"), + }, + }, + }, + Required: []string{"metric", "current"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.MetricIdentifier", "k8s.io/api/autoscaling/v2beta2.MetricValueStatus"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_ResourceMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the resource in question.", + Type: []string{"string"}, + Format: "", + }, + }, + "target": { + SchemaProps: spec.SchemaProps{ + Description: "target specifies the target value for the given metric", + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricTarget"), + }, + }, + }, + Required: []string{"name", "target"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.MetricTarget"}, + } +} + +func schema_k8sio_api_autoscaling_v2beta2_ResourceMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the name of the resource in question.", + Type: []string{"string"}, + Format: "", + }, + }, + "current": { + SchemaProps: spec.SchemaProps{ + Description: "current contains the current value for the given metric", + Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricValueStatus"), + }, + }, + }, + Required: []string{"name", "current"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/autoscaling/v2beta2.MetricValueStatus"}, + } +} + +func schema_k8sio_api_batch_v1_Job(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Job represents the configuration of a single job.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/batch/v1.JobSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Current status of a job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/batch/v1.JobStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/batch/v1.JobSpec", "k8s.io/api/batch/v1.JobStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_batch_v1_JobCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JobCondition describes current state of a job.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of job condition, Complete or Failed.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastProbeTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition was checked.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transit from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "(brief) reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "Human readable message indicating details about last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_batch_v1_JobList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JobList is a collection of jobs.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is the list of Jobs.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/batch/v1.Job"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/batch/v1.Job", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_batch_v1_JobSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JobSpec describes how the job execution will look like.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "parallelism": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "completions": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "activeDeadlineSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "backoffLimit": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the number of retries before marking this job failed. Defaults to 6", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "manualSelector": { + SchemaProps: spec.SchemaProps{ + Description: "manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector", + Type: []string{"boolean"}, + Format: "", + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + "ttlSecondsAfterFinished": { + SchemaProps: spec.SchemaProps{ + Description: "ttlSecondsAfterFinished limits the lifetime of a Job that has finished execution (either Complete or Failed). If this field is set, ttlSecondsAfterFinished after the Job finishes, it is eligible to be automatically deleted. When the Job is being deleted, its lifecycle guarantees (e.g. finalizers) will be honored. If this field is unset, the Job won't be automatically deleted. If this field is set to zero, the Job becomes eligible to be deleted immediately after it finishes. This field is alpha-level and is only honored by servers that enable the TTLAfterFinished feature.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"template"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_batch_v1_JobStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JobStatus represents the current state of a Job.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "The latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/batch/v1.JobCondition"), + }, + }, + }, + }, + }, + "startTime": { + SchemaProps: spec.SchemaProps{ + Description: "Represents time when the job was acknowledged by the job controller. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "completionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "active": { + SchemaProps: spec.SchemaProps{ + Description: "The number of actively running pods.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "succeeded": { + SchemaProps: spec.SchemaProps{ + Description: "The number of pods which reached phase Succeeded.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "failed": { + SchemaProps: spec.SchemaProps{ + Description: "The number of pods which reached phase Failed.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/batch/v1.JobCondition", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_batch_v1beta1_CronJob(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CronJob represents the configuration of a single cron job.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/batch/v1beta1.CronJobSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/batch/v1beta1.CronJobStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/batch/v1beta1.CronJobSpec", "k8s.io/api/batch/v1beta1.CronJobStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_batch_v1beta1_CronJobList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CronJobList is a collection of cron jobs.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is the list of CronJobs.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/batch/v1beta1.CronJob"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/batch/v1beta1.CronJob", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_batch_v1beta1_CronJobSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CronJobSpec describes how the job execution will look like and when it will actually run.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "schedule": { + SchemaProps: spec.SchemaProps{ + Description: "The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.", + Type: []string{"string"}, + Format: "", + }, + }, + "startingDeadlineSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "concurrencyPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies how to treat concurrent executions of a Job. Valid values are: - \"Allow\" (default): allows CronJobs to run concurrently; - \"Forbid\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \"Replace\": cancels currently running job and replaces it with a new one", + Type: []string{"string"}, + Format: "", + }, + }, + "suspend": { + SchemaProps: spec.SchemaProps{ + Description: "This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "jobTemplate": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the job that will be created when executing a CronJob.", + Ref: ref("k8s.io/api/batch/v1beta1.JobTemplateSpec"), + }, + }, + "successfulJobsHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "failedJobsHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"schedule", "jobTemplate"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/batch/v1beta1.JobTemplateSpec"}, + } +} + +func schema_k8sio_api_batch_v1beta1_CronJobStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CronJobStatus represents the current state of a cron job.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "active": { + SchemaProps: spec.SchemaProps{ + Description: "A list of pointers to currently running jobs.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + }, + }, + }, + "lastScheduleTime": { + SchemaProps: spec.SchemaProps{ + Description: "Information when was the last time the job was successfully scheduled.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_batch_v1beta1_JobTemplate(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JobTemplate describes a template for creating copies of a predefined pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "Defines jobs that will be created from this template. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/batch/v1beta1.JobTemplateSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/batch/v1beta1.JobTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_batch_v1beta1_JobTemplateSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JobTemplateSpec describes the data a Job should have when created from a template", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/batch/v1.JobSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/batch/v1.JobSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_batch_v2alpha1_CronJob(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CronJob represents the configuration of a single cron job.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/batch/v2alpha1.CronJobSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/batch/v2alpha1.CronJobStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/batch/v2alpha1.CronJobSpec", "k8s.io/api/batch/v2alpha1.CronJobStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_batch_v2alpha1_CronJobList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CronJobList is a collection of cron jobs.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is the list of CronJobs.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/batch/v2alpha1.CronJob"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/batch/v2alpha1.CronJob", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_batch_v2alpha1_CronJobSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CronJobSpec describes how the job execution will look like and when it will actually run.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "schedule": { + SchemaProps: spec.SchemaProps{ + Description: "The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.", + Type: []string{"string"}, + Format: "", + }, + }, + "startingDeadlineSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "concurrencyPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies how to treat concurrent executions of a Job. Valid values are: - \"Allow\" (default): allows CronJobs to run concurrently; - \"Forbid\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \"Replace\": cancels currently running job and replaces it with a new one", + Type: []string{"string"}, + Format: "", + }, + }, + "suspend": { + SchemaProps: spec.SchemaProps{ + Description: "This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "jobTemplate": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the job that will be created when executing a CronJob.", + Ref: ref("k8s.io/api/batch/v2alpha1.JobTemplateSpec"), + }, + }, + "successfulJobsHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "failedJobsHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"schedule", "jobTemplate"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/batch/v2alpha1.JobTemplateSpec"}, + } +} + +func schema_k8sio_api_batch_v2alpha1_CronJobStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CronJobStatus represents the current state of a cron job.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "active": { + SchemaProps: spec.SchemaProps{ + Description: "A list of pointers to currently running jobs.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + }, + }, + }, + "lastScheduleTime": { + SchemaProps: spec.SchemaProps{ + Description: "Information when was the last time the job was successfully scheduled.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_batch_v2alpha1_JobTemplate(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JobTemplate describes a template for creating copies of a predefined pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "Defines jobs that will be created from this template. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/batch/v2alpha1.JobTemplateSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/batch/v2alpha1.JobTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_batch_v2alpha1_JobTemplateSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JobTemplateSpec describes the data a Job should have when created from a template", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/batch/v1.JobSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/batch/v1.JobSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_certificates_v1_CertificateSigningRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CertificateSigningRequest objects provide a mechanism to obtain x509 certificates by submitting a certificate signing request, and having it asynchronously approved and issued.\n\nKubelets use this API to obtain:\n 1. client certificates to authenticate to kube-apiserver (with the \"kubernetes.io/kube-apiserver-client-kubelet\" signerName).\n 2. serving certificates for TLS endpoints kube-apiserver can connect to securely (with the \"kubernetes.io/kubelet-serving\" signerName).\n\nThis API can be used to request client certificates to authenticate to kube-apiserver (with the \"kubernetes.io/kube-apiserver-client\" signerName), or to obtain certificates from custom non-Kubernetes signers.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "spec contains the certificate request, and is immutable after creation. Only the request, signerName, and usages fields can be set on creation. Other fields are derived by Kubernetes and cannot be modified by users.", + Ref: ref("k8s.io/api/certificates/v1.CertificateSigningRequestSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status contains information about whether the request is approved or denied, and the certificate issued by the signer, or the failure condition indicating signer failure.", + Ref: ref("k8s.io/api/certificates/v1.CertificateSigningRequestStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/certificates/v1.CertificateSigningRequestSpec", "k8s.io/api/certificates/v1.CertificateSigningRequestStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_certificates_v1_CertificateSigningRequestCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CertificateSigningRequestCondition describes a condition of a CertificateSigningRequest object", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type of the condition. Known conditions are \"Approved\", \"Denied\", and \"Failed\".\n\nAn \"Approved\" condition is added via the /approval subresource, indicating the request was approved and should be issued by the signer.\n\nA \"Denied\" condition is added via the /approval subresource, indicating the request was denied and should not be issued by the signer.\n\nA \"Failed\" condition is added via the /status subresource, indicating the signer failed to issue the certificate.\n\nApproved and Denied conditions are mutually exclusive. Approved, Denied, and Failed conditions cannot be removed once added.\n\nOnly one condition of a given type is allowed.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status of the condition, one of True, False, Unknown. Approved, Denied, and Failed conditions may not be \"False\" or \"Unknown\".", + Type: []string{"string"}, + Format: "", + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "reason indicates a brief reason for the request state", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "message contains a human readable message with details about the request state", + Type: []string{"string"}, + Format: "", + }, + }, + "lastUpdateTime": { + SchemaProps: spec.SchemaProps{ + Description: "lastUpdateTime is the time of the last update to this condition", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "lastTransitionTime is the time the condition last transitioned from one status to another. If unset, when a new condition type is added or an existing condition's status is changed, the server defaults this to the current time.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_certificates_v1_CertificateSigningRequestList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CertificateSigningRequestList is a collection of CertificateSigningRequest objects", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is a collection of CertificateSigningRequest objects", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/certificates/v1.CertificateSigningRequest"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/certificates/v1.CertificateSigningRequest", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_certificates_v1_CertificateSigningRequestSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CertificateSigningRequestSpec contains the certificate request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "request": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "request contains an x509 certificate signing request encoded in a \"CERTIFICATE REQUEST\" PEM block. When serialized as JSON or YAML, the data is additionally base64-encoded.", + Type: []string{"string"}, + Format: "byte", + }, + }, + "signerName": { + SchemaProps: spec.SchemaProps{ + Description: "signerName indicates the requested signer, and is a qualified name.\n\nList/watch requests for CertificateSigningRequests can filter on this field using a \"spec.signerName=NAME\" fieldSelector.\n\nWell-known Kubernetes signers are:\n 1. \"kubernetes.io/kube-apiserver-client\": issues client certificates that can be used to authenticate to kube-apiserver.\n Requests for this signer are never auto-approved by kube-controller-manager, can be issued by the \"csrsigning\" controller in kube-controller-manager.\n 2. \"kubernetes.io/kube-apiserver-client-kubelet\": issues client certificates that kubelets use to authenticate to kube-apiserver.\n Requests for this signer can be auto-approved by the \"csrapproving\" controller in kube-controller-manager, and can be issued by the \"csrsigning\" controller in kube-controller-manager.\n 3. \"kubernetes.io/kubelet-serving\" issues serving certificates that kubelets use to serve TLS endpoints, which kube-apiserver can connect to securely.\n Requests for this signer are never auto-approved by kube-controller-manager, and can be issued by the \"csrsigning\" controller in kube-controller-manager.\n\nMore details are available at https://k8s.io/docs/reference/access-authn-authz/certificate-signing-requests/#kubernetes-signers\n\nCustom signerNames can also be specified. The signer defines:\n 1. Trust distribution: how trust (CA bundles) are distributed.\n 2. Permitted subjects: and behavior when a disallowed subject is requested.\n 3. Required, permitted, or forbidden x509 extensions in the request (including whether subjectAltNames are allowed, which types, restrictions on allowed values) and behavior when a disallowed extension is requested.\n 4. Required, permitted, or forbidden key usages / extended key usages.\n 5. Expiration/certificate lifetime: whether it is fixed by the signer, configurable by the admin.\n 6. Whether or not requests for CA certificates are allowed.", + Type: []string{"string"}, + Format: "", + }, + }, + "usages": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "usages specifies a set of key usages requested in the issued certificate.\n\nRequests for TLS client certificates typically request: \"digital signature\", \"key encipherment\", \"client auth\".\n\nRequests for TLS serving certificates typically request: \"key encipherment\", \"digital signature\", \"server auth\".\n\nValid values are:\n \"signing\", \"digital signature\", \"content commitment\",\n \"key encipherment\", \"key agreement\", \"data encipherment\",\n \"cert sign\", \"crl sign\", \"encipher only\", \"decipher only\", \"any\",\n \"server auth\", \"client auth\",\n \"code signing\", \"email protection\", \"s/mime\",\n \"ipsec end system\", \"ipsec tunnel\", \"ipsec user\",\n \"timestamping\", \"ocsp signing\", \"microsoft sgc\", \"netscape sgc\"", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "username": { + SchemaProps: spec.SchemaProps{ + Description: "username contains the name of the user that created the CertificateSigningRequest. Populated by the API server on creation and immutable.", + Type: []string{"string"}, + Format: "", + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "uid contains the uid of the user that created the CertificateSigningRequest. Populated by the API server on creation and immutable.", + Type: []string{"string"}, + Format: "", + }, + }, + "groups": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "groups contains group membership of the user that created the CertificateSigningRequest. Populated by the API server on creation and immutable.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "extra": { + SchemaProps: spec.SchemaProps{ + Description: "extra contains extra attributes of the user that created the CertificateSigningRequest. Populated by the API server on creation and immutable.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + }, + Required: []string{"request", "signerName"}, + }, + }, + } +} + +func schema_k8sio_api_certificates_v1_CertificateSigningRequestStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CertificateSigningRequestStatus contains conditions used to indicate approved/denied/failed status of the request, and the issued certificate.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "conditions applied to the request. Known conditions are \"Approved\", \"Denied\", and \"Failed\".", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/certificates/v1.CertificateSigningRequestCondition"), + }, + }, + }, + }, + }, + "certificate": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "certificate is populated with an issued certificate by the signer after an Approved condition is present. This field is set via the /status subresource. Once populated, this field is immutable.\n\nIf the certificate signing request is denied, a condition of type \"Denied\" is added and this field remains empty. If the signer cannot issue the certificate, a condition of type \"Failed\" is added and this field remains empty.\n\nValidation requirements:\n 1. certificate must contain one or more PEM blocks.\n 2. All PEM blocks must have the \"CERTIFICATE\" label, contain no headers, and the encoded data\n must be a BER-encoded ASN.1 Certificate structure as described in section 4 of RFC5280.\n 3. Non-PEM content may appear before or after the \"CERTIFICATE\" PEM blocks and is unvalidated,\n to allow for explanatory text as described in section 5.2 of RFC7468.\n\nIf more than one PEM block is present, and the definition of the requested spec.signerName does not indicate otherwise, the first block is the issued certificate, and subsequent blocks should be treated as intermediate certificates and presented in TLS handshakes.\n\nThe certificate is encoded in PEM format.\n\nWhen serialized as JSON or YAML, the data is additionally base64-encoded, so it consists of:\n\n base64(\n -----BEGIN CERTIFICATE-----\n ...\n -----END CERTIFICATE-----\n )", + Type: []string{"string"}, + Format: "byte", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/certificates/v1.CertificateSigningRequestCondition"}, + } +} + +func schema_k8sio_api_certificates_v1beta1_CertificateSigningRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Describes a certificate signing request", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "The certificate request itself and any additional information.", + Ref: ref("k8s.io/api/certificates/v1beta1.CertificateSigningRequestSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Derived information about the request.", + Ref: ref("k8s.io/api/certificates/v1beta1.CertificateSigningRequestStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/certificates/v1beta1.CertificateSigningRequestSpec", "k8s.io/api/certificates/v1beta1.CertificateSigningRequestStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type of the condition. Known conditions include \"Approved\", \"Denied\", and \"Failed\".", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown. Approved, Denied, and Failed conditions may not be \"False\" or \"Unknown\". Defaults to \"True\". If unset, should be treated as \"True\".", + Type: []string{"string"}, + Format: "", + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "brief reason for the request state", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "human readable message with details about the request state", + Type: []string{"string"}, + Format: "", + }, + }, + "lastUpdateTime": { + SchemaProps: spec.SchemaProps{ + Description: "timestamp for the last update to this condition", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "lastTransitionTime is the time the condition last transitioned from one status to another. If unset, when a new condition type is added or an existing condition's status is changed, the server defaults this to the current time.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + }, + Required: []string{"type"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/certificates/v1beta1.CertificateSigningRequest"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/certificates/v1beta1.CertificateSigningRequest", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "This information is immutable after the request is created. Only the Request and Usages fields can be set on creation, other fields are derived by Kubernetes and cannot be modified by users.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "request": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Base64-encoded PKCS#10 CSR data", + Type: []string{"string"}, + Format: "byte", + }, + }, + "signerName": { + SchemaProps: spec.SchemaProps{ + Description: "Requested signer for the request. It is a qualified name in the form: `scope-hostname.io/name`. If empty, it will be defaulted:\n 1. If it's a kubelet client certificate, it is assigned\n \"kubernetes.io/kube-apiserver-client-kubelet\".\n 2. If it's a kubelet serving certificate, it is assigned\n \"kubernetes.io/kubelet-serving\".\n 3. Otherwise, it is assigned \"kubernetes.io/legacy-unknown\".\nDistribution of trust for signers happens out of band. You can select on this field using `spec.signerName`.", + Type: []string{"string"}, + Format: "", + }, + }, + "usages": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\n https://tools.ietf.org/html/rfc5280#section-4.2.1.12\nValid values are:\n \"signing\",\n \"digital signature\",\n \"content commitment\",\n \"key encipherment\",\n \"key agreement\",\n \"data encipherment\",\n \"cert sign\",\n \"crl sign\",\n \"encipher only\",\n \"decipher only\",\n \"any\",\n \"server auth\",\n \"client auth\",\n \"code signing\",\n \"email protection\",\n \"s/mime\",\n \"ipsec end system\",\n \"ipsec tunnel\",\n \"ipsec user\",\n \"timestamping\",\n \"ocsp signing\",\n \"microsoft sgc\",\n \"netscape sgc\"", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "username": { + SchemaProps: spec.SchemaProps{ + Description: "Information about the requesting user. See user.Info interface for details.", + Type: []string{"string"}, + Format: "", + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "UID information about the requesting user. See user.Info interface for details.", + Type: []string{"string"}, + Format: "", + }, + }, + "groups": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Group information about the requesting user. See user.Info interface for details.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "extra": { + SchemaProps: spec.SchemaProps{ + Description: "Extra information about the requesting user. See user.Info interface for details.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + }, + Required: []string{"request"}, + }, + }, + } +} + +func schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Conditions applied to the request, such as approval or denial.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/certificates/v1beta1.CertificateSigningRequestCondition"), + }, + }, + }, + }, + }, + "certificate": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "If request was approved, the controller will place the issued certificate here.", + Type: []string{"string"}, + Format: "byte", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/certificates/v1beta1.CertificateSigningRequestCondition"}, + } +} + +func schema_k8sio_api_coordination_v1_Lease(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Lease defines a lease concept.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the Lease. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/coordination/v1.LeaseSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/coordination/v1.LeaseSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_coordination_v1_LeaseList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LeaseList is a list of Lease objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of schema objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/coordination/v1.Lease"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/coordination/v1.Lease", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_coordination_v1_LeaseSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LeaseSpec is a specification of a Lease.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "holderIdentity": { + SchemaProps: spec.SchemaProps{ + Description: "holderIdentity contains the identity of the holder of a current lease.", + Type: []string{"string"}, + Format: "", + }, + }, + "leaseDurationSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "leaseDurationSeconds is a duration that candidates for a lease need to wait to force acquire it. This is measure against time of last observed RenewTime.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "acquireTime": { + SchemaProps: spec.SchemaProps{ + Description: "acquireTime is a time when the current lease was acquired.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + "renewTime": { + SchemaProps: spec.SchemaProps{ + Description: "renewTime is a time when the current holder of a lease has last updated the lease.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + "leaseTransitions": { + SchemaProps: spec.SchemaProps{ + Description: "leaseTransitions is the number of transitions of a lease between holders.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"}, + } +} + +func schema_k8sio_api_coordination_v1beta1_Lease(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Lease defines a lease concept.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the Lease. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/coordination/v1beta1.LeaseSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/coordination/v1beta1.LeaseSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_coordination_v1beta1_LeaseList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LeaseList is a list of Lease objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of schema objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/coordination/v1beta1.Lease"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/coordination/v1beta1.Lease", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_coordination_v1beta1_LeaseSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LeaseSpec is a specification of a Lease.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "holderIdentity": { + SchemaProps: spec.SchemaProps{ + Description: "holderIdentity contains the identity of the holder of a current lease.", + Type: []string{"string"}, + Format: "", + }, + }, + "leaseDurationSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "leaseDurationSeconds is a duration that candidates for a lease need to wait to force acquire it. This is measure against time of last observed RenewTime.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "acquireTime": { + SchemaProps: spec.SchemaProps{ + Description: "acquireTime is a time when the current lease was acquired.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + "renewTime": { + SchemaProps: spec.SchemaProps{ + Description: "renewTime is a time when the current holder of a lease has last updated the lease.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + "leaseTransitions": { + SchemaProps: spec.SchemaProps{ + Description: "leaseTransitions is the number of transitions of a lease between holders.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"}, + } +} + +func schema_k8sio_api_core_v1_AWSElasticBlockStoreVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a Persistent Disk resource in AWS.\n\nAn AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "volumeID": { + SchemaProps: spec.SchemaProps{ + Description: "Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", + Type: []string{"string"}, + Format: "", + }, + }, + "partition": { + SchemaProps: spec.SchemaProps{ + Description: "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"volumeID"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_Affinity(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Affinity is a group of affinity scheduling rules.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "nodeAffinity": { + SchemaProps: spec.SchemaProps{ + Description: "Describes node affinity scheduling rules for the pod.", + Ref: ref("k8s.io/api/core/v1.NodeAffinity"), + }, + }, + "podAffinity": { + SchemaProps: spec.SchemaProps{ + Description: "Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).", + Ref: ref("k8s.io/api/core/v1.PodAffinity"), + }, + }, + "podAntiAffinity": { + SchemaProps: spec.SchemaProps{ + Description: "Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).", + Ref: ref("k8s.io/api/core/v1.PodAntiAffinity"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.NodeAffinity", "k8s.io/api/core/v1.PodAffinity", "k8s.io/api/core/v1.PodAntiAffinity"}, + } +} + +func schema_k8sio_api_core_v1_AttachedVolume(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AttachedVolume describes a volume attached to a node", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the attached volume", + Type: []string{"string"}, + Format: "", + }, + }, + "devicePath": { + SchemaProps: spec.SchemaProps{ + Description: "DevicePath represents the device path where the volume should be available", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name", "devicePath"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_AvoidPods(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AvoidPods describes pods that should avoid this node. This is the value for a Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and will eventually become a field of NodeStatus.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "preferAvoidPods": { + SchemaProps: spec.SchemaProps{ + Description: "Bounded-sized list of signatures of pods that should avoid this node, sorted in timestamp order from oldest to newest. Size of the slice is unspecified.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PreferAvoidPodsEntry"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PreferAvoidPodsEntry"}, + } +} + +func schema_k8sio_api_core_v1_AzureDiskVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "diskName": { + SchemaProps: spec.SchemaProps{ + Description: "The Name of the data disk in the blob storage", + Type: []string{"string"}, + Format: "", + }, + }, + "diskURI": { + SchemaProps: spec.SchemaProps{ + Description: "The URI the data disk in the blob storage", + Type: []string{"string"}, + Format: "", + }, + }, + "cachingMode": { + SchemaProps: spec.SchemaProps{ + Description: "Host Caching mode: None, Read Only, Read Write.", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"diskName", "diskURI"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_AzureFilePersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "secretName": { + SchemaProps: spec.SchemaProps{ + Description: "the name of secret that contains Azure Storage Account Name and Key", + Type: []string{"string"}, + Format: "", + }, + }, + "shareName": { + SchemaProps: spec.SchemaProps{ + Description: "Share Name", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "secretNamespace": { + SchemaProps: spec.SchemaProps{ + Description: "the namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"secretName", "shareName"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_AzureFileVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "secretName": { + SchemaProps: spec.SchemaProps{ + Description: "the name of secret that contains Azure Storage Account Name and Key", + Type: []string{"string"}, + Format: "", + }, + }, + "shareName": { + SchemaProps: spec.SchemaProps{ + Description: "Share Name", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"secretName", "shareName"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_Binding(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Binding ties one object to another; for example, a pod is bound to a node by a scheduler. Deprecated in 1.7, please use the bindings subresource of pods instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "target": { + SchemaProps: spec.SchemaProps{ + Description: "The target object that you want to bind to the standard object.", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + }, + Required: []string{"target"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_CSIPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents storage that is managed by an external CSI volume driver (Beta feature)", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "driver": { + SchemaProps: spec.SchemaProps{ + Description: "Driver is the name of the driver to use for this volume. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + "volumeHandle": { + SchemaProps: spec.SchemaProps{ + Description: "VolumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).", + Type: []string{"boolean"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\".", + Type: []string{"string"}, + Format: "", + }, + }, + "volumeAttributes": { + SchemaProps: spec.SchemaProps{ + Description: "Attributes of the volume to publish.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "controllerPublishSecretRef": { + SchemaProps: spec.SchemaProps{ + Description: "ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", + Ref: ref("k8s.io/api/core/v1.SecretReference"), + }, + }, + "nodeStageSecretRef": { + SchemaProps: spec.SchemaProps{ + Description: "NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", + Ref: ref("k8s.io/api/core/v1.SecretReference"), + }, + }, + "nodePublishSecretRef": { + SchemaProps: spec.SchemaProps{ + Description: "NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", + Ref: ref("k8s.io/api/core/v1.SecretReference"), + }, + }, + "controllerExpandSecretRef": { + SchemaProps: spec.SchemaProps{ + Description: "ControllerExpandSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerExpandVolume call. This is an alpha field and requires enabling ExpandCSIVolumes feature gate. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", + Ref: ref("k8s.io/api/core/v1.SecretReference"), + }, + }, + }, + Required: []string{"driver", "volumeHandle"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.SecretReference"}, + } +} + +func schema_k8sio_api_core_v1_CSIVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a source location of a volume to mount, managed by an external CSI driver", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "driver": { + SchemaProps: spec.SchemaProps{ + Description: "Driver is the name of the CSI driver that handles this volume. Consult with your admin for the correct name as registered in the cluster.", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies a read-only configuration for the volume. Defaults to false (read/write).", + Type: []string{"boolean"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. Ex. \"ext4\", \"xfs\", \"ntfs\". If not provided, the empty value is passed to the associated CSI driver which will determine the default filesystem to apply.", + Type: []string{"string"}, + Format: "", + }, + }, + "volumeAttributes": { + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttributes stores driver-specific properties that are passed to the CSI driver. Consult your driver's documentation for supported values.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "nodePublishSecretRef": { + SchemaProps: spec.SchemaProps{ + Description: "NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secret references are passed.", + Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), + }, + }, + }, + Required: []string{"driver"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LocalObjectReference"}, + } +} + +func schema_k8sio_api_core_v1_Capabilities(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Adds and removes POSIX capabilities from running containers.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "add": { + SchemaProps: spec.SchemaProps{ + Description: "Added capabilities", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "drop": { + SchemaProps: spec.SchemaProps{ + Description: "Removed capabilities", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_CephFSPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "monitors": { + SchemaProps: spec.SchemaProps{ + Description: "Required: Monitors is a collection of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Used as the mounted root, rather than the full Ceph tree, default is /", + Type: []string{"string"}, + Format: "", + }, + }, + "user": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: User is the rados user name, default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + Type: []string{"string"}, + Format: "", + }, + }, + "secretFile": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + Type: []string{"string"}, + Format: "", + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + Ref: ref("k8s.io/api/core/v1.SecretReference"), + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"monitors"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.SecretReference"}, + } +} + +func schema_k8sio_api_core_v1_CephFSVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "monitors": { + SchemaProps: spec.SchemaProps{ + Description: "Required: Monitors is a collection of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Used as the mounted root, rather than the full Ceph tree, default is /", + Type: []string{"string"}, + Format: "", + }, + }, + "user": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: User is the rados user name, default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + Type: []string{"string"}, + Format: "", + }, + }, + "secretFile": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + Type: []string{"string"}, + Format: "", + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"monitors"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LocalObjectReference"}, + } +} + +func schema_k8sio_api_core_v1_CinderPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "volumeID": { + SchemaProps: spec.SchemaProps{ + Description: "volume id used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + Type: []string{"boolean"}, + Format: "", + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: points to a secret object containing parameters used to connect to OpenStack.", + Ref: ref("k8s.io/api/core/v1.SecretReference"), + }, + }, + }, + Required: []string{"volumeID"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.SecretReference"}, + } +} + +func schema_k8sio_api_core_v1_CinderVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "volumeID": { + SchemaProps: spec.SchemaProps{ + Description: "volume id used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + Type: []string{"boolean"}, + Format: "", + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: points to a secret object containing parameters used to connect to OpenStack.", + Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), + }, + }, + }, + Required: []string{"volumeID"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LocalObjectReference"}, + } +} + +func schema_k8sio_api_core_v1_ClientIPConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClientIPConfig represents the configurations of Client IP based session affinity.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "timeoutSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == \"ClientIP\". Default value is 10800(for 3 hours).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ComponentCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Information about the condition of a component.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of condition for a component. Valid value: \"Healthy\"", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition for a component. Valid values for \"Healthy\": \"True\", \"False\", or \"Unknown\".", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "Message about the condition for a component. For example, information about a health check.", + Type: []string{"string"}, + Format: "", + }, + }, + "error": { + SchemaProps: spec.SchemaProps{ + Description: "Condition error code for a component. For example, a health check error code.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ComponentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ComponentStatus (and ComponentStatusList) holds the cluster validation info. Deprecated: This API is deprecated in v1.19+", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "List of component conditions observed", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ComponentCondition"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ComponentCondition", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_ComponentStatusList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Status of all the conditions for the component as a list of ComponentStatus objects. Deprecated: This API is deprecated in v1.19+", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of ComponentStatus objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ComponentStatus"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ComponentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_ConfigMap(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ConfigMap holds configuration data for pods to consume.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "immutable": { + SchemaProps: spec.SchemaProps{ + Description: "Immutable, if set to true, ensures that data stored in the ConfigMap cannot be updated (only object metadata can be modified). If not set to true, the field can be modified at any time. Defaulted to nil. This is a beta field enabled by ImmutableEphemeralVolumes feature gate.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "data": { + SchemaProps: spec.SchemaProps{ + Description: "Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use the BinaryData field. The keys stored in Data must not overlap with the keys in the BinaryData field, this is enforced during validation process.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "binaryData": { + SchemaProps: spec.SchemaProps{ + Description: "BinaryData contains the binary data. Each key must consist of alphanumeric characters, '-', '_' or '.'. BinaryData can contain byte sequences that are not in the UTF-8 range. The keys stored in BinaryData must not overlap with the ones in the Data field, this is enforced during validation process. Using this field will require 1.10+ apiserver and kubelet.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "byte", + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_ConfigMapEnvSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.\n\nThe contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + Type: []string{"string"}, + Format: "", + }, + }, + "optional": { + SchemaProps: spec.SchemaProps{ + Description: "Specify whether the ConfigMap must be defined", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ConfigMapKeySelector(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Selects a key from a ConfigMap.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + Type: []string{"string"}, + Format: "", + }, + }, + "key": { + SchemaProps: spec.SchemaProps{ + Description: "The key to select.", + Type: []string{"string"}, + Format: "", + }, + }, + "optional": { + SchemaProps: spec.SchemaProps{ + Description: "Specify whether the ConfigMap or its key must be defined", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"key"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ConfigMapList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ConfigMapList is a resource containing a list of ConfigMap objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of ConfigMaps.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ConfigMap"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ConfigMap", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_ConfigMapNodeConfigSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.", + Type: []string{"string"}, + Format: "", + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.", + Type: []string{"string"}, + Format: "", + }, + }, + "resourceVersion": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.", + Type: []string{"string"}, + Format: "", + }, + }, + "kubeletConfigKey": { + SchemaProps: spec.SchemaProps{ + Description: "KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"namespace", "name", "kubeletConfigKey"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ConfigMapProjection(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Adapts a ConfigMap into a projected volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + Type: []string{"string"}, + Format: "", + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.KeyToPath"), + }, + }, + }, + }, + }, + "optional": { + SchemaProps: spec.SchemaProps{ + Description: "Specify whether the ConfigMap or its keys must be defined", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.KeyToPath"}, + } +} + +func schema_k8sio_api_core_v1_ConfigMapVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Adapts a ConfigMap into a volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + Type: []string{"string"}, + Format: "", + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.KeyToPath"), + }, + }, + }, + }, + }, + "defaultMode": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "optional": { + SchemaProps: spec.SchemaProps{ + Description: "Specify whether the ConfigMap or its keys must be defined", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.KeyToPath"}, + } +} + +func schema_k8sio_api_core_v1_Container(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A single application container that you want to run within a pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.", + Type: []string{"string"}, + Format: "", + }, + }, + "image": { + SchemaProps: spec.SchemaProps{ + Description: "Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.", + Type: []string{"string"}, + Format: "", + }, + }, + "command": { + SchemaProps: spec.SchemaProps{ + Description: "Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "args": { + SchemaProps: spec.SchemaProps{ + Description: "Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "workingDir": { + SchemaProps: spec.SchemaProps{ + Description: "Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.", + Type: []string{"string"}, + Format: "", + }, + }, + "ports": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "containerPort", + "protocol", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "containerPort", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \"0.0.0.0\" address inside a container will be accessible from the network. Cannot be updated.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ContainerPort"), + }, + }, + }, + }, + }, + "envFrom": { + SchemaProps: spec.SchemaProps{ + Description: "List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.EnvFromSource"), + }, + }, + }, + }, + }, + "env": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "List of environment variables to set in the container. Cannot be updated.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.EnvVar"), + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", + Ref: ref("k8s.io/api/core/v1.ResourceRequirements"), + }, + }, + "volumeMounts": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "mountPath", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Pod volumes to mount into the container's filesystem. Cannot be updated.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.VolumeMount"), + }, + }, + }, + }, + }, + "volumeDevices": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "devicePath", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "volumeDevices is the list of block devices to be used by the container.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.VolumeDevice"), + }, + }, + }, + }, + }, + "livenessProbe": { + SchemaProps: spec.SchemaProps{ + Description: "Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + Ref: ref("k8s.io/api/core/v1.Probe"), + }, + }, + "readinessProbe": { + SchemaProps: spec.SchemaProps{ + Description: "Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + Ref: ref("k8s.io/api/core/v1.Probe"), + }, + }, + "startupProbe": { + SchemaProps: spec.SchemaProps{ + Description: "StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. If this probe fails, the Pod will be restarted, just as if the livenessProbe failed. This can be used to provide different probe parameters at the beginning of a Pod's lifecycle, when it might take a long time to load data or warm a cache, than during steady-state operation. This cannot be updated. This is a beta feature enabled by the StartupProbe feature flag. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + Ref: ref("k8s.io/api/core/v1.Probe"), + }, + }, + "lifecycle": { + SchemaProps: spec.SchemaProps{ + Description: "Actions that the management system should take in response to container lifecycle events. Cannot be updated.", + Ref: ref("k8s.io/api/core/v1.Lifecycle"), + }, + }, + "terminationMessagePath": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.", + Type: []string{"string"}, + Format: "", + }, + }, + "terminationMessagePolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.", + Type: []string{"string"}, + Format: "", + }, + }, + "imagePullPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + Type: []string{"string"}, + Format: "", + }, + }, + "securityContext": { + SchemaProps: spec.SchemaProps{ + Description: "Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/", + Ref: ref("k8s.io/api/core/v1.SecurityContext"), + }, + }, + "stdin": { + SchemaProps: spec.SchemaProps{ + Description: "Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "stdinOnce": { + SchemaProps: spec.SchemaProps{ + Description: "Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false", + Type: []string{"boolean"}, + Format: "", + }, + }, + "tty": { + SchemaProps: spec.SchemaProps{ + Description: "Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"name"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ContainerPort", "k8s.io/api/core/v1.EnvFromSource", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.VolumeDevice", "k8s.io/api/core/v1.VolumeMount"}, + } +} + +func schema_k8sio_api_core_v1_ContainerImage(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Describe a container image", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "names": { + SchemaProps: spec.SchemaProps{ + Description: "Names by which this image is known. e.g. [\"k8s.gcr.io/hyperkube:v1.0.7\", \"dockerhub.io/google_containers/hyperkube:v1.0.7\"]", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "sizeBytes": { + SchemaProps: spec.SchemaProps{ + Description: "The size of the image in bytes.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + Required: []string{"names"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ContainerPort(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ContainerPort represents a network port in a single container.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + Type: []string{"string"}, + Format: "", + }, + }, + "hostPort": { + SchemaProps: spec.SchemaProps{ + Description: "Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "containerPort": { + SchemaProps: spec.SchemaProps{ + Description: "Number of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "protocol": { + SchemaProps: spec.SchemaProps{ + Description: "Protocol for port. Must be UDP, TCP, or SCTP. Defaults to \"TCP\".", + Type: []string{"string"}, + Format: "", + }, + }, + "hostIP": { + SchemaProps: spec.SchemaProps{ + Description: "What host IP to bind the external port to.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"containerPort"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ContainerState(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "waiting": { + SchemaProps: spec.SchemaProps{ + Description: "Details about a waiting container", + Ref: ref("k8s.io/api/core/v1.ContainerStateWaiting"), + }, + }, + "running": { + SchemaProps: spec.SchemaProps{ + Description: "Details about a running container", + Ref: ref("k8s.io/api/core/v1.ContainerStateRunning"), + }, + }, + "terminated": { + SchemaProps: spec.SchemaProps{ + Description: "Details about a terminated container", + Ref: ref("k8s.io/api/core/v1.ContainerStateTerminated"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ContainerStateRunning", "k8s.io/api/core/v1.ContainerStateTerminated", "k8s.io/api/core/v1.ContainerStateWaiting"}, + } +} + +func schema_k8sio_api_core_v1_ContainerStateRunning(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ContainerStateRunning is a running state of a container.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "startedAt": { + SchemaProps: spec.SchemaProps{ + Description: "Time at which the container was last (re-)started", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_core_v1_ContainerStateTerminated(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ContainerStateTerminated is a terminated state of a container.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "exitCode": { + SchemaProps: spec.SchemaProps{ + Description: "Exit status from the last termination of the container", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "signal": { + SchemaProps: spec.SchemaProps{ + Description: "Signal from the last termination of the container", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "(brief) reason from the last termination of the container", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "Message regarding the last termination of the container", + Type: []string{"string"}, + Format: "", + }, + }, + "startedAt": { + SchemaProps: spec.SchemaProps{ + Description: "Time at which previous execution of the container started", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "finishedAt": { + SchemaProps: spec.SchemaProps{ + Description: "Time at which the container last terminated", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "containerID": { + SchemaProps: spec.SchemaProps{ + Description: "Container's ID in the format 'docker://'", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"exitCode"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_core_v1_ContainerStateWaiting(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ContainerStateWaiting is a waiting state of a container.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "(brief) reason the container is not yet running.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "Message regarding why the container is not yet running.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ContainerStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ContainerStatus contains details for the current status of this container.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "This must be a DNS_LABEL. Each container in a pod must have a unique name. Cannot be updated.", + Type: []string{"string"}, + Format: "", + }, + }, + "state": { + SchemaProps: spec.SchemaProps{ + Description: "Details about the container's current condition.", + Ref: ref("k8s.io/api/core/v1.ContainerState"), + }, + }, + "lastState": { + SchemaProps: spec.SchemaProps{ + Description: "Details about the container's last termination condition.", + Ref: ref("k8s.io/api/core/v1.ContainerState"), + }, + }, + "ready": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies whether the container has passed its readiness probe.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "restartCount": { + SchemaProps: spec.SchemaProps{ + Description: "The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "image": { + SchemaProps: spec.SchemaProps{ + Description: "The image the container is running. More info: https://kubernetes.io/docs/concepts/containers/images", + Type: []string{"string"}, + Format: "", + }, + }, + "imageID": { + SchemaProps: spec.SchemaProps{ + Description: "ImageID of the container's image.", + Type: []string{"string"}, + Format: "", + }, + }, + "containerID": { + SchemaProps: spec.SchemaProps{ + Description: "Container's ID in the format 'docker://'.", + Type: []string{"string"}, + Format: "", + }, + }, + "started": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies whether the container has passed its startup probe. Initialized as false, becomes true after startupProbe is considered successful. Resets to false when the container is restarted, or if kubelet loses state temporarily. Is always true when no startupProbe is defined.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"name", "ready", "restartCount", "image", "imageID"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ContainerState"}, + } +} + +func schema_k8sio_api_core_v1_DaemonEndpoint(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonEndpoint contains information about a single Daemon endpoint.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "Port": { + SchemaProps: spec.SchemaProps{ + Description: "Port number of the given endpoint.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"Port"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_DownwardAPIProjection(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of DownwardAPIVolume file", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.DownwardAPIVolumeFile"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.DownwardAPIVolumeFile"}, + } +} + +func schema_k8sio_api_core_v1_DownwardAPIVolumeFile(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DownwardAPIVolumeFile represents information to create the file containing the pod field", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + Type: []string{"string"}, + Format: "", + }, + }, + "fieldRef": { + SchemaProps: spec.SchemaProps{ + Description: "Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.", + Ref: ref("k8s.io/api/core/v1.ObjectFieldSelector"), + }, + }, + "resourceFieldRef": { + SchemaProps: spec.SchemaProps{ + Description: "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.", + Ref: ref("k8s.io/api/core/v1.ResourceFieldSelector"), + }, + }, + "mode": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"path"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ObjectFieldSelector", "k8s.io/api/core/v1.ResourceFieldSelector"}, + } +} + +func schema_k8sio_api_core_v1_DownwardAPIVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of downward API volume file", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.DownwardAPIVolumeFile"), + }, + }, + }, + }, + }, + "defaultMode": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: mode bits to use on created files by default. Must be a Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.DownwardAPIVolumeFile"}, + } +} + +func schema_k8sio_api_core_v1_EmptyDirVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "medium": { + SchemaProps: spec.SchemaProps{ + Description: "What type of storage medium should back this directory. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir", + Type: []string{"string"}, + Format: "", + }, + }, + "sizeLimit": { + SchemaProps: spec.SchemaProps{ + Description: "Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_core_v1_EndpointAddress(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointAddress is a tuple that describes single IP address.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ip": { + SchemaProps: spec.SchemaProps{ + Description: "The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready.", + Type: []string{"string"}, + Format: "", + }, + }, + "hostname": { + SchemaProps: spec.SchemaProps{ + Description: "The Hostname of this endpoint", + Type: []string{"string"}, + Format: "", + }, + }, + "nodeName": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.", + Type: []string{"string"}, + Format: "", + }, + }, + "targetRef": { + SchemaProps: spec.SchemaProps{ + Description: "Reference to object providing the endpoint.", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + }, + Required: []string{"ip"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ObjectReference"}, + } +} + +func schema_k8sio_api_core_v1_EndpointPort(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointPort is a tuple that describes a single port.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "The name of this port. This must match the 'name' field in the corresponding ServicePort. Must be a DNS_LABEL. Optional only if one port is defined.", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "The port number of the endpoint.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "protocol": { + SchemaProps: spec.SchemaProps{ + Description: "The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.", + Type: []string{"string"}, + Format: "", + }, + }, + "appProtocol": { + SchemaProps: spec.SchemaProps{ + Description: "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol. This is a beta field that is guarded by the ServiceAppProtocol feature gate and enabled by default.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"port"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_EndpointSubset(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given:\n {\n Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n }\nThe resulting set of endpoints can be viewed as:\n a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],\n b: [ 10.10.1.1:309, 10.10.2.2:309 ]", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "addresses": { + SchemaProps: spec.SchemaProps{ + Description: "IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.EndpointAddress"), + }, + }, + }, + }, + }, + "notReadyAddresses": { + SchemaProps: spec.SchemaProps{ + Description: "IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.EndpointAddress"), + }, + }, + }, + }, + }, + "ports": { + SchemaProps: spec.SchemaProps{ + Description: "Port numbers available on the related IP addresses.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.EndpointPort"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.EndpointAddress", "k8s.io/api/core/v1.EndpointPort"}, + } +} + +func schema_k8sio_api_core_v1_Endpoints(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Endpoints is a collection of endpoints that implement the actual service. Example:\n Name: \"mysvc\",\n Subsets: [\n {\n Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n },\n {\n Addresses: [{\"ip\": \"10.10.3.3\"}],\n Ports: [{\"name\": \"a\", \"port\": 93}, {\"name\": \"b\", \"port\": 76}]\n },\n ]", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "subsets": { + SchemaProps: spec.SchemaProps{ + Description: "The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.EndpointSubset"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.EndpointSubset", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_EndpointsList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointsList is a list of endpoints.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of endpoints.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Endpoints"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.Endpoints", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_EnvFromSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EnvFromSource represents the source of a set of ConfigMaps", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "prefix": { + SchemaProps: spec.SchemaProps{ + Description: "An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.", + Type: []string{"string"}, + Format: "", + }, + }, + "configMapRef": { + SchemaProps: spec.SchemaProps{ + Description: "The ConfigMap to select from", + Ref: ref("k8s.io/api/core/v1.ConfigMapEnvSource"), + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "The Secret to select from", + Ref: ref("k8s.io/api/core/v1.SecretEnvSource"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ConfigMapEnvSource", "k8s.io/api/core/v1.SecretEnvSource"}, + } +} + +func schema_k8sio_api_core_v1_EnvVar(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EnvVar represents an environment variable present in a Container.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the environment variable. Must be a C_IDENTIFIER.", + Type: []string{"string"}, + Format: "", + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Description: "Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to \"\".", + Type: []string{"string"}, + Format: "", + }, + }, + "valueFrom": { + SchemaProps: spec.SchemaProps{ + Description: "Source for the environment variable's value. Cannot be used if value is not empty.", + Ref: ref("k8s.io/api/core/v1.EnvVarSource"), + }, + }, + }, + Required: []string{"name"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.EnvVarSource"}, + } +} + +func schema_k8sio_api_core_v1_EnvVarSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EnvVarSource represents a source for the value of an EnvVar.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "fieldRef": { + SchemaProps: spec.SchemaProps{ + Description: "Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.", + Ref: ref("k8s.io/api/core/v1.ObjectFieldSelector"), + }, + }, + "resourceFieldRef": { + SchemaProps: spec.SchemaProps{ + Description: "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.", + Ref: ref("k8s.io/api/core/v1.ResourceFieldSelector"), + }, + }, + "configMapKeyRef": { + SchemaProps: spec.SchemaProps{ + Description: "Selects a key of a ConfigMap.", + Ref: ref("k8s.io/api/core/v1.ConfigMapKeySelector"), + }, + }, + "secretKeyRef": { + SchemaProps: spec.SchemaProps{ + Description: "Selects a key of a secret in the pod's namespace", + Ref: ref("k8s.io/api/core/v1.SecretKeySelector"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ConfigMapKeySelector", "k8s.io/api/core/v1.ObjectFieldSelector", "k8s.io/api/core/v1.ResourceFieldSelector", "k8s.io/api/core/v1.SecretKeySelector"}, + } +} + +func schema_k8sio_api_core_v1_EphemeralContainer(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "An EphemeralContainer is a container that may be added temporarily to an existing pod for user-initiated activities such as debugging. Ephemeral containers have no resource or scheduling guarantees, and they will not be restarted when they exit or when a pod is removed or restarted. If an ephemeral container causes a pod to exceed its resource allocation, the pod may be evicted. Ephemeral containers may not be added by directly updating the pod spec. They must be added via the pod's ephemeralcontainers subresource, and they will appear in the pod spec once added. This is an alpha feature enabled by the EphemeralContainers feature flag.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the ephemeral container specified as a DNS_LABEL. This name must be unique among all containers, init containers and ephemeral containers.", + Type: []string{"string"}, + Format: "", + }, + }, + "image": { + SchemaProps: spec.SchemaProps{ + Description: "Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images", + Type: []string{"string"}, + Format: "", + }, + }, + "command": { + SchemaProps: spec.SchemaProps{ + Description: "Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "args": { + SchemaProps: spec.SchemaProps{ + Description: "Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "workingDir": { + SchemaProps: spec.SchemaProps{ + Description: "Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.", + Type: []string{"string"}, + Format: "", + }, + }, + "ports": { + SchemaProps: spec.SchemaProps{ + Description: "Ports are not allowed for ephemeral containers.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ContainerPort"), + }, + }, + }, + }, + }, + "envFrom": { + SchemaProps: spec.SchemaProps{ + Description: "List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.EnvFromSource"), + }, + }, + }, + }, + }, + "env": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "List of environment variables to set in the container. Cannot be updated.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.EnvVar"), + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources are not allowed for ephemeral containers. Ephemeral containers use spare resources already allocated to the pod.", + Ref: ref("k8s.io/api/core/v1.ResourceRequirements"), + }, + }, + "volumeMounts": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "mountPath", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Pod volumes to mount into the container's filesystem. Cannot be updated.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.VolumeMount"), + }, + }, + }, + }, + }, + "volumeDevices": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "devicePath", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "volumeDevices is the list of block devices to be used by the container.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.VolumeDevice"), + }, + }, + }, + }, + }, + "livenessProbe": { + SchemaProps: spec.SchemaProps{ + Description: "Probes are not allowed for ephemeral containers.", + Ref: ref("k8s.io/api/core/v1.Probe"), + }, + }, + "readinessProbe": { + SchemaProps: spec.SchemaProps{ + Description: "Probes are not allowed for ephemeral containers.", + Ref: ref("k8s.io/api/core/v1.Probe"), + }, + }, + "startupProbe": { + SchemaProps: spec.SchemaProps{ + Description: "Probes are not allowed for ephemeral containers.", + Ref: ref("k8s.io/api/core/v1.Probe"), + }, + }, + "lifecycle": { + SchemaProps: spec.SchemaProps{ + Description: "Lifecycle is not allowed for ephemeral containers.", + Ref: ref("k8s.io/api/core/v1.Lifecycle"), + }, + }, + "terminationMessagePath": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.", + Type: []string{"string"}, + Format: "", + }, + }, + "terminationMessagePolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.", + Type: []string{"string"}, + Format: "", + }, + }, + "imagePullPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + Type: []string{"string"}, + Format: "", + }, + }, + "securityContext": { + SchemaProps: spec.SchemaProps{ + Description: "SecurityContext is not allowed for ephemeral containers.", + Ref: ref("k8s.io/api/core/v1.SecurityContext"), + }, + }, + "stdin": { + SchemaProps: spec.SchemaProps{ + Description: "Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "stdinOnce": { + SchemaProps: spec.SchemaProps{ + Description: "Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false", + Type: []string{"boolean"}, + Format: "", + }, + }, + "tty": { + SchemaProps: spec.SchemaProps{ + Description: "Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "targetContainerName": { + SchemaProps: spec.SchemaProps{ + Description: "If set, the name of the container from PodSpec that this ephemeral container targets. The ephemeral container will be run in the namespaces (IPC, PID, etc) of this container. If not set then the ephemeral container is run in whatever namespaces are shared for the pod. Note that the container runtime must support this feature.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ContainerPort", "k8s.io/api/core/v1.EnvFromSource", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.VolumeDevice", "k8s.io/api/core/v1.VolumeMount"}, + } +} + +func schema_k8sio_api_core_v1_EphemeralContainerCommon(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EphemeralContainerCommon is a copy of all fields in Container to be inlined in EphemeralContainer. This separate type allows easy conversion from EphemeralContainer to Container and allows separate documentation for the fields of EphemeralContainer. When a new field is added to Container it must be added here as well.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the ephemeral container specified as a DNS_LABEL. This name must be unique among all containers, init containers and ephemeral containers.", + Type: []string{"string"}, + Format: "", + }, + }, + "image": { + SchemaProps: spec.SchemaProps{ + Description: "Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images", + Type: []string{"string"}, + Format: "", + }, + }, + "command": { + SchemaProps: spec.SchemaProps{ + Description: "Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "args": { + SchemaProps: spec.SchemaProps{ + Description: "Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "workingDir": { + SchemaProps: spec.SchemaProps{ + Description: "Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.", + Type: []string{"string"}, + Format: "", + }, + }, + "ports": { + SchemaProps: spec.SchemaProps{ + Description: "Ports are not allowed for ephemeral containers.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ContainerPort"), + }, + }, + }, + }, + }, + "envFrom": { + SchemaProps: spec.SchemaProps{ + Description: "List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.EnvFromSource"), + }, + }, + }, + }, + }, + "env": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "List of environment variables to set in the container. Cannot be updated.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.EnvVar"), + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources are not allowed for ephemeral containers. Ephemeral containers use spare resources already allocated to the pod.", + Ref: ref("k8s.io/api/core/v1.ResourceRequirements"), + }, + }, + "volumeMounts": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "mountPath", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Pod volumes to mount into the container's filesystem. Cannot be updated.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.VolumeMount"), + }, + }, + }, + }, + }, + "volumeDevices": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "devicePath", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "volumeDevices is the list of block devices to be used by the container.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.VolumeDevice"), + }, + }, + }, + }, + }, + "livenessProbe": { + SchemaProps: spec.SchemaProps{ + Description: "Probes are not allowed for ephemeral containers.", + Ref: ref("k8s.io/api/core/v1.Probe"), + }, + }, + "readinessProbe": { + SchemaProps: spec.SchemaProps{ + Description: "Probes are not allowed for ephemeral containers.", + Ref: ref("k8s.io/api/core/v1.Probe"), + }, + }, + "startupProbe": { + SchemaProps: spec.SchemaProps{ + Description: "Probes are not allowed for ephemeral containers.", + Ref: ref("k8s.io/api/core/v1.Probe"), + }, + }, + "lifecycle": { + SchemaProps: spec.SchemaProps{ + Description: "Lifecycle is not allowed for ephemeral containers.", + Ref: ref("k8s.io/api/core/v1.Lifecycle"), + }, + }, + "terminationMessagePath": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.", + Type: []string{"string"}, + Format: "", + }, + }, + "terminationMessagePolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.", + Type: []string{"string"}, + Format: "", + }, + }, + "imagePullPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + Type: []string{"string"}, + Format: "", + }, + }, + "securityContext": { + SchemaProps: spec.SchemaProps{ + Description: "SecurityContext is not allowed for ephemeral containers.", + Ref: ref("k8s.io/api/core/v1.SecurityContext"), + }, + }, + "stdin": { + SchemaProps: spec.SchemaProps{ + Description: "Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "stdinOnce": { + SchemaProps: spec.SchemaProps{ + Description: "Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false", + Type: []string{"boolean"}, + Format: "", + }, + }, + "tty": { + SchemaProps: spec.SchemaProps{ + Description: "Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"name"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ContainerPort", "k8s.io/api/core/v1.EnvFromSource", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.VolumeDevice", "k8s.io/api/core/v1.VolumeMount"}, + } +} + +func schema_k8sio_api_core_v1_EphemeralContainers(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A list of ephemeral containers used with the Pod ephemeralcontainers subresource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "ephemeralContainers": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "A list of ephemeral containers associated with this pod. New ephemeral containers may be appended to this list, but existing ephemeral containers may not be removed or modified.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.EphemeralContainer"), + }, + }, + }, + }, + }, + }, + Required: []string{"ephemeralContainers"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.EphemeralContainer", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_EphemeralVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents an ephemeral volume that is handled by a normal storage driver.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "volumeClaimTemplate": { + SchemaProps: spec.SchemaProps{ + Description: "Will be used to create a stand-alone PVC to provision the volume. The pod in which this EphemeralVolumeSource is embedded will be the owner of the PVC, i.e. the PVC will be deleted together with the pod. The name of the PVC will be `-` where `` is the name from the `PodSpec.Volumes` array entry. Pod validation will reject the pod if the concatenated name is not valid for a PVC (for example, too long).\n\nAn existing PVC with that name that is not owned by the pod will *not* be used for the pod to avoid using an unrelated volume by mistake. Starting the pod is then blocked until the unrelated PVC is removed. If such a pre-created PVC is meant to be used by the pod, the PVC has to updated with an owner reference to the pod once the pod exists. Normally this should not be necessary, but it may be useful when manually reconstructing a broken cluster.\n\nThis field is read-only and no changes will be made by Kubernetes to the PVC after it has been created.\n\nRequired, must not be nil.", + Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaimTemplate"), + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies a read-only configuration for the volume. Defaults to false (read/write).", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PersistentVolumeClaimTemplate"}, + } +} + +func schema_k8sio_api_core_v1_Event(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Event is a report of an event somewhere in the cluster.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "involvedObject": { + SchemaProps: spec.SchemaProps{ + Description: "The object that this event is about.", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "This should be a short, machine understandable string that gives the reason for the transition into the object's current status.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human-readable description of the status of this operation.", + Type: []string{"string"}, + Format: "", + }, + }, + "source": { + SchemaProps: spec.SchemaProps{ + Description: "The component reporting this event. Should be a short machine understandable string.", + Ref: ref("k8s.io/api/core/v1.EventSource"), + }, + }, + "firstTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "lastTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "The time at which the most recent occurrence of this event was recorded.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "count": { + SchemaProps: spec.SchemaProps{ + Description: "The number of times this event has occurred.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of this event (Normal, Warning), new types could be added in the future", + Type: []string{"string"}, + Format: "", + }, + }, + "eventTime": { + SchemaProps: spec.SchemaProps{ + Description: "Time when this Event was first observed.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + "series": { + SchemaProps: spec.SchemaProps{ + Description: "Data about the Event series this event represents or nil if it's a singleton Event.", + Ref: ref("k8s.io/api/core/v1.EventSeries"), + }, + }, + "action": { + SchemaProps: spec.SchemaProps{ + Description: "What action was taken/failed regarding to the Regarding object.", + Type: []string{"string"}, + Format: "", + }, + }, + "related": { + SchemaProps: spec.SchemaProps{ + Description: "Optional secondary object for more complex actions.", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + "reportingComponent": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.", + Type: []string{"string"}, + Format: "", + }, + }, + "reportingInstance": { + SchemaProps: spec.SchemaProps{ + Description: "ID of the controller instance, e.g. `kubelet-xyzf`.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"metadata", "involvedObject"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.EventSeries", "k8s.io/api/core/v1.EventSource", "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_core_v1_EventList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EventList is a list of events.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of events", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Event"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.Event", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_EventSeries(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "count": { + SchemaProps: spec.SchemaProps{ + Description: "Number of occurrences in this series up to the last heartbeat time", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "lastObservedTime": { + SchemaProps: spec.SchemaProps{ + Description: "Time of the last occurrence observed", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"}, + } +} + +func schema_k8sio_api_core_v1_EventSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EventSource contains information for an event.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "component": { + SchemaProps: spec.SchemaProps{ + Description: "Component from which the event is generated.", + Type: []string{"string"}, + Format: "", + }, + }, + "host": { + SchemaProps: spec.SchemaProps{ + Description: "Node name on which the event is generated.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ExecAction(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExecAction describes a \"run in container\" action.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "command": { + SchemaProps: spec.SchemaProps{ + Description: "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_FCVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "targetWWNs": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: FC target worldwide names (WWNs)", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "lun": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: FC target lun number", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "wwids": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_FlexPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "FlexPersistentVolumeSource represents a generic persistent volume resource that is provisioned/attached using an exec based plugin.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "driver": { + SchemaProps: spec.SchemaProps{ + Description: "Driver is the name of the driver to use for this volume.", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.", + Type: []string{"string"}, + Format: "", + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.", + Ref: ref("k8s.io/api/core/v1.SecretReference"), + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "options": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Extra command options if any.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"driver"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.SecretReference"}, + } +} + +func schema_k8sio_api_core_v1_FlexVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "driver": { + SchemaProps: spec.SchemaProps{ + Description: "Driver is the name of the driver to use for this volume.", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.", + Type: []string{"string"}, + Format: "", + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.", + Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "options": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Extra command options if any.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"driver"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LocalObjectReference"}, + } +} + +func schema_k8sio_api_core_v1_FlockerVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "datasetName": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated", + Type: []string{"string"}, + Format: "", + }, + }, + "datasetUUID": { + SchemaProps: spec.SchemaProps{ + Description: "UUID of the dataset. This is unique identifier of a Flocker dataset", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_GCEPersistentDiskVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a Persistent Disk resource in Google Compute Engine.\n\nA GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "pdName": { + SchemaProps: spec.SchemaProps{ + Description: "Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", + Type: []string{"string"}, + Format: "", + }, + }, + "partition": { + SchemaProps: spec.SchemaProps{ + Description: "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"pdName"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_GitRepoVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.\n\nDEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "repository": { + SchemaProps: spec.SchemaProps{ + Description: "Repository URL", + Type: []string{"string"}, + Format: "", + }, + }, + "revision": { + SchemaProps: spec.SchemaProps{ + Description: "Commit hash for the specified revision.", + Type: []string{"string"}, + Format: "", + }, + }, + "directory": { + SchemaProps: spec.SchemaProps{ + Description: "Target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"repository"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_GlusterfsPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "endpoints": { + SchemaProps: spec.SchemaProps{ + Description: "EndpointsName is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod", + Type: []string{"string"}, + Format: "", + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Path is the Glusterfs volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod", + Type: []string{"boolean"}, + Format: "", + }, + }, + "endpointsNamespace": { + SchemaProps: spec.SchemaProps{ + Description: "EndpointsNamespace is the namespace that contains Glusterfs endpoint. If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"endpoints", "path"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_GlusterfsVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "endpoints": { + SchemaProps: spec.SchemaProps{ + Description: "EndpointsName is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod", + Type: []string{"string"}, + Format: "", + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Path is the Glusterfs volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"endpoints", "path"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_HTTPGetAction(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HTTPGetAction describes an action based on HTTP Get requests.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Path to access on the HTTP server.", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + "host": { + SchemaProps: spec.SchemaProps{ + Description: "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + Type: []string{"string"}, + Format: "", + }, + }, + "scheme": { + SchemaProps: spec.SchemaProps{ + Description: "Scheme to use for connecting to the host. Defaults to HTTP.", + Type: []string{"string"}, + Format: "", + }, + }, + "httpHeaders": { + SchemaProps: spec.SchemaProps{ + Description: "Custom headers to set in the request. HTTP allows repeated headers.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.HTTPHeader"), + }, + }, + }, + }, + }, + }, + Required: []string{"port"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.HTTPHeader", "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_core_v1_HTTPHeader(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HTTPHeader describes a custom header to be used in HTTP probes", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "The header field name", + Type: []string{"string"}, + Format: "", + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Description: "The header field value", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name", "value"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_Handler(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Handler defines a specific action that should be taken", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "exec": { + SchemaProps: spec.SchemaProps{ + Description: "One and only one of the following should be specified. Exec specifies the action to take.", + Ref: ref("k8s.io/api/core/v1.ExecAction"), + }, + }, + "httpGet": { + SchemaProps: spec.SchemaProps{ + Description: "HTTPGet specifies the http request to perform.", + Ref: ref("k8s.io/api/core/v1.HTTPGetAction"), + }, + }, + "tcpSocket": { + SchemaProps: spec.SchemaProps{ + Description: "TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported", + Ref: ref("k8s.io/api/core/v1.TCPSocketAction"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ExecAction", "k8s.io/api/core/v1.HTTPGetAction", "k8s.io/api/core/v1.TCPSocketAction"}, + } +} + +func schema_k8sio_api_core_v1_HostAlias(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ip": { + SchemaProps: spec.SchemaProps{ + Description: "IP address of the host file entry.", + Type: []string{"string"}, + Format: "", + }, + }, + "hostnames": { + SchemaProps: spec.SchemaProps{ + Description: "Hostnames for the above IP address.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_HostPathVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", + Type: []string{"string"}, + Format: "", + }, + }, + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"path"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ISCSIPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ISCSIPersistentVolumeSource represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "targetPortal": { + SchemaProps: spec.SchemaProps{ + Description: "iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", + Type: []string{"string"}, + Format: "", + }, + }, + "iqn": { + SchemaProps: spec.SchemaProps{ + Description: "Target iSCSI Qualified Name.", + Type: []string{"string"}, + Format: "", + }, + }, + "lun": { + SchemaProps: spec.SchemaProps{ + Description: "iSCSI Target Lun number.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "iscsiInterface": { + SchemaProps: spec.SchemaProps{ + Description: "iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "portals": { + SchemaProps: spec.SchemaProps{ + Description: "iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "chapAuthDiscovery": { + SchemaProps: spec.SchemaProps{ + Description: "whether support iSCSI Discovery CHAP authentication", + Type: []string{"boolean"}, + Format: "", + }, + }, + "chapAuthSession": { + SchemaProps: spec.SchemaProps{ + Description: "whether support iSCSI Session CHAP authentication", + Type: []string{"boolean"}, + Format: "", + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "CHAP Secret for iSCSI target and initiator authentication", + Ref: ref("k8s.io/api/core/v1.SecretReference"), + }, + }, + "initiatorName": { + SchemaProps: spec.SchemaProps{ + Description: "Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface : will be created for the connection.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"targetPortal", "iqn", "lun"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.SecretReference"}, + } +} + +func schema_k8sio_api_core_v1_ISCSIVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "targetPortal": { + SchemaProps: spec.SchemaProps{ + Description: "iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", + Type: []string{"string"}, + Format: "", + }, + }, + "iqn": { + SchemaProps: spec.SchemaProps{ + Description: "Target iSCSI Qualified Name.", + Type: []string{"string"}, + Format: "", + }, + }, + "lun": { + SchemaProps: spec.SchemaProps{ + Description: "iSCSI Target Lun number.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "iscsiInterface": { + SchemaProps: spec.SchemaProps{ + Description: "iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "portals": { + SchemaProps: spec.SchemaProps{ + Description: "iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "chapAuthDiscovery": { + SchemaProps: spec.SchemaProps{ + Description: "whether support iSCSI Discovery CHAP authentication", + Type: []string{"boolean"}, + Format: "", + }, + }, + "chapAuthSession": { + SchemaProps: spec.SchemaProps{ + Description: "whether support iSCSI Session CHAP authentication", + Type: []string{"boolean"}, + Format: "", + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "CHAP Secret for iSCSI target and initiator authentication", + Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), + }, + }, + "initiatorName": { + SchemaProps: spec.SchemaProps{ + Description: "Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface : will be created for the connection.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"targetPortal", "iqn", "lun"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LocalObjectReference"}, + } +} + +func schema_k8sio_api_core_v1_KeyToPath(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Maps a string key to a path within a volume.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "key": { + SchemaProps: spec.SchemaProps{ + Description: "The key to project.", + Type: []string{"string"}, + Format: "", + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Description: "The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.", + Type: []string{"string"}, + Format: "", + }, + }, + "mode": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: mode bits used to set permissions on this file. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"key", "path"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_Lifecycle(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "postStart": { + SchemaProps: spec.SchemaProps{ + Description: "PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks", + Ref: ref("k8s.io/api/core/v1.Handler"), + }, + }, + "preStop": { + SchemaProps: spec.SchemaProps{ + Description: "PreStop is called immediately before a container is terminated due to an API request or management event such as liveness/startup probe failure, preemption, resource contention, etc. The handler is not called if the container crashes or exits. The reason for termination is passed to the handler. The Pod's termination grace period countdown begins before the PreStop hooked is executed. Regardless of the outcome of the handler, the container will eventually terminate within the Pod's termination grace period. Other management of the container blocks until the hook completes or until the termination grace period is reached. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks", + Ref: ref("k8s.io/api/core/v1.Handler"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.Handler"}, + } +} + +func schema_k8sio_api_core_v1_LimitRange(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LimitRange sets resource usage limits for each kind of resource in a Namespace.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec defines the limits enforced. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.LimitRangeSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LimitRangeSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_LimitRangeItem(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LimitRangeItem defines a min/max usage limit for any resource that matches on kind.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of resource that this limit applies to.", + Type: []string{"string"}, + Format: "", + }, + }, + "max": { + SchemaProps: spec.SchemaProps{ + Description: "Max usage constraints on this kind by resource name.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + "min": { + SchemaProps: spec.SchemaProps{ + Description: "Min usage constraints on this kind by resource name.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + "default": { + SchemaProps: spec.SchemaProps{ + Description: "Default resource requirement limit value by resource name if resource limit is omitted.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + "defaultRequest": { + SchemaProps: spec.SchemaProps{ + Description: "DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + "maxLimitRequestRatio": { + SchemaProps: spec.SchemaProps{ + Description: "MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + }, + Required: []string{"type"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_core_v1_LimitRangeList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LimitRangeList is a list of LimitRange items.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of LimitRange objects. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.LimitRange"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LimitRange", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_LimitRangeSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LimitRangeSpec defines a min/max usage limit for resources that match on kind.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "limits": { + SchemaProps: spec.SchemaProps{ + Description: "Limits is the list of LimitRangeItem objects that are enforced.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.LimitRangeItem"), + }, + }, + }, + }, + }, + }, + Required: []string{"limits"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LimitRangeItem"}, + } +} + +func schema_k8sio_api_core_v1_List(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "List holds a list of objects, which may not be known by the server.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of objects", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, + } +} + +func schema_k8sio_api_core_v1_LoadBalancerIngress(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ip": { + SchemaProps: spec.SchemaProps{ + Description: "IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)", + Type: []string{"string"}, + Format: "", + }, + }, + "hostname": { + SchemaProps: spec.SchemaProps{ + Description: "Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_LoadBalancerStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LoadBalancerStatus represents the status of a load-balancer.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ingress": { + SchemaProps: spec.SchemaProps{ + Description: "Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.LoadBalancerIngress"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LoadBalancerIngress"}, + } +} + +func schema_k8sio_api_core_v1_LocalObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_LocalVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Local represents directly-attached storage with node affinity (Beta feature)", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "path": { + SchemaProps: spec.SchemaProps{ + Description: "The full path to the volume on the node. It can be either a directory or block device (disk, partition, ...).", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. It applies only when the Path is a block device. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default value is to auto-select a fileystem if unspecified.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"path"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_NFSVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "server": { + SchemaProps: spec.SchemaProps{ + Description: "Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", + Type: []string{"string"}, + Format: "", + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"server", "path"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_Namespace(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Namespace provides a scope for Names. Use of multiple namespaces is optional.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.NamespaceSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status describes the current status of a Namespace. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.NamespaceStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.NamespaceSpec", "k8s.io/api/core/v1.NamespaceStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_NamespaceCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NamespaceCondition contains details about state of namespace.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of namespace controller condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_core_v1_NamespaceList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NamespaceList is a list of Namespaces.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Namespace"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.Namespace", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_NamespaceSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NamespaceSpec describes the attributes on a Namespace.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "finalizers": { + SchemaProps: spec.SchemaProps{ + Description: "Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_NamespaceStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NamespaceStatus is information about the current status of a Namespace.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "phase": { + SchemaProps: spec.SchemaProps{ + Description: "Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/", + Type: []string{"string"}, + Format: "", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a namespace's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.NamespaceCondition"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.NamespaceCondition"}, + } +} + +func schema_k8sio_api_core_v1_Node(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Node is a worker node in Kubernetes. Each node will have a unique identifier in the cache (i.e. in etcd).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec defines the behavior of a node. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.NodeSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Most recently observed status of the node. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.NodeStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.NodeSpec", "k8s.io/api/core/v1.NodeStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_NodeAddress(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeAddress contains information for the node's address.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Node address type, one of Hostname, ExternalIP or InternalIP.", + Type: []string{"string"}, + Format: "", + }, + }, + "address": { + SchemaProps: spec.SchemaProps{ + Description: "The node address.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "address"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_NodeAffinity(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Node affinity is a group of node affinity scheduling rules.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "requiredDuringSchedulingIgnoredDuringExecution": { + SchemaProps: spec.SchemaProps{ + Description: "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.", + Ref: ref("k8s.io/api/core/v1.NodeSelector"), + }, + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + SchemaProps: spec.SchemaProps{ + Description: "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PreferredSchedulingTerm"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.NodeSelector", "k8s.io/api/core/v1.PreferredSchedulingTerm"}, + } +} + +func schema_k8sio_api_core_v1_NodeCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeCondition contains condition information for a node.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of node condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastHeartbeatTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time we got an update on a given condition.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transit from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "(brief) reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "Human readable message indicating details about last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_core_v1_NodeConfigSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "configMap": { + SchemaProps: spec.SchemaProps{ + Description: "ConfigMap is a reference to a Node's ConfigMap", + Ref: ref("k8s.io/api/core/v1.ConfigMapNodeConfigSource"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ConfigMapNodeConfigSource"}, + } +} + +func schema_k8sio_api_core_v1_NodeConfigStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeConfigStatus describes the status of the config assigned by Node.Spec.ConfigSource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "assigned": { + SchemaProps: spec.SchemaProps{ + Description: "Assigned reports the checkpointed config the node will try to use. When Node.Spec.ConfigSource is updated, the node checkpoints the associated config payload to local disk, along with a record indicating intended config. The node refers to this record to choose its config checkpoint, and reports this record in Assigned. Assigned only updates in the status after the record has been checkpointed to disk. When the Kubelet is restarted, it tries to make the Assigned config the Active config by loading and validating the checkpointed payload identified by Assigned.", + Ref: ref("k8s.io/api/core/v1.NodeConfigSource"), + }, + }, + "active": { + SchemaProps: spec.SchemaProps{ + Description: "Active reports the checkpointed config the node is actively using. Active will represent either the current version of the Assigned config, or the current LastKnownGood config, depending on whether attempting to use the Assigned config results in an error.", + Ref: ref("k8s.io/api/core/v1.NodeConfigSource"), + }, + }, + "lastKnownGood": { + SchemaProps: spec.SchemaProps{ + Description: "LastKnownGood reports the checkpointed config the node will fall back to when it encounters an error attempting to use the Assigned config. The Assigned config becomes the LastKnownGood config when the node determines that the Assigned config is stable and correct. This is currently implemented as a 10-minute soak period starting when the local record of Assigned config is updated. If the Assigned config is Active at the end of this period, it becomes the LastKnownGood. Note that if Spec.ConfigSource is reset to nil (use local defaults), the LastKnownGood is also immediately reset to nil, because the local default config is always assumed good. You should not make assumptions about the node's method of determining config stability and correctness, as this may change or become configurable in the future.", + Ref: ref("k8s.io/api/core/v1.NodeConfigSource"), + }, + }, + "error": { + SchemaProps: spec.SchemaProps{ + Description: "Error describes any problems reconciling the Spec.ConfigSource to the Active config. Errors may occur, for example, attempting to checkpoint Spec.ConfigSource to the local Assigned record, attempting to checkpoint the payload associated with Spec.ConfigSource, attempting to load or validate the Assigned config, etc. Errors may occur at different points while syncing config. Earlier errors (e.g. download or checkpointing errors) will not result in a rollback to LastKnownGood, and may resolve across Kubelet retries. Later errors (e.g. loading or validating a checkpointed config) will result in a rollback to LastKnownGood. In the latter case, it is usually possible to resolve the error by fixing the config assigned in Spec.ConfigSource. You can find additional information for debugging by searching the error message in the Kubelet log. Error is a human-readable description of the error state; machines can check whether or not Error is empty, but should not rely on the stability of the Error text across Kubelet versions.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.NodeConfigSource"}, + } +} + +func schema_k8sio_api_core_v1_NodeDaemonEndpoints(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeDaemonEndpoints lists ports opened by daemons running on the Node.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kubeletEndpoint": { + SchemaProps: spec.SchemaProps{ + Description: "Endpoint on which Kubelet is listening.", + Ref: ref("k8s.io/api/core/v1.DaemonEndpoint"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.DaemonEndpoint"}, + } +} + +func schema_k8sio_api_core_v1_NodeList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeList is the whole list of all Nodes which have been registered with master.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of nodes", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Node"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.Node", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_NodeProxyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeProxyOptions is the query options to a Node's proxy call.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Path is the URL path to use for the current proxy request to node.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_NodeResources(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeResources is an object for conveying resource information about a node. see https://kubernetes.io/docs/concepts/architecture/nodes/#capacity for more details.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "Capacity": { + SchemaProps: spec.SchemaProps{ + Description: "Capacity represents the available resources of a node", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + }, + Required: []string{"Capacity"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_core_v1_NodeSelector(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "nodeSelectorTerms": { + SchemaProps: spec.SchemaProps{ + Description: "Required. A list of node selector terms. The terms are ORed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.NodeSelectorTerm"), + }, + }, + }, + }, + }, + }, + Required: []string{"nodeSelectorTerms"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.NodeSelectorTerm"}, + } +} + +func schema_k8sio_api_core_v1_NodeSelectorRequirement(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "key": { + SchemaProps: spec.SchemaProps{ + Description: "The label key that the selector applies to.", + Type: []string{"string"}, + Format: "", + }, + }, + "operator": { + SchemaProps: spec.SchemaProps{ + Description: "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + Type: []string{"string"}, + Format: "", + }, + }, + "values": { + SchemaProps: spec.SchemaProps{ + Description: "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"key", "operator"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_NodeSelectorTerm(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "matchExpressions": { + SchemaProps: spec.SchemaProps{ + Description: "A list of node selector requirements by node's labels.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.NodeSelectorRequirement"), + }, + }, + }, + }, + }, + "matchFields": { + SchemaProps: spec.SchemaProps{ + Description: "A list of node selector requirements by node's fields.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.NodeSelectorRequirement"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.NodeSelectorRequirement"}, + } +} + +func schema_k8sio_api_core_v1_NodeSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeSpec describes the attributes that a node is created with.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "podCIDR": { + SchemaProps: spec.SchemaProps{ + Description: "PodCIDR represents the pod IP range assigned to the node.", + Type: []string{"string"}, + Format: "", + }, + }, + "podCIDRs": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "podCIDRs represents the IP ranges assigned to the node for usage by Pods on that node. If this field is specified, the 0th entry must match the podCIDR field. It may contain at most 1 value for each of IPv4 and IPv6.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "providerID": { + SchemaProps: spec.SchemaProps{ + Description: "ID of the node assigned by the cloud provider in the format: ://", + Type: []string{"string"}, + Format: "", + }, + }, + "unschedulable": { + SchemaProps: spec.SchemaProps{ + Description: "Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration", + Type: []string{"boolean"}, + Format: "", + }, + }, + "taints": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, the node's taints.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Taint"), + }, + }, + }, + }, + }, + "configSource": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, the source to get node configuration from The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field", + Ref: ref("k8s.io/api/core/v1.NodeConfigSource"), + }, + }, + "externalID": { + SchemaProps: spec.SchemaProps{ + Description: "Deprecated. Not all kubelets will set this field. Remove field after 1.13. see: https://issues.k8s.io/61966", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.NodeConfigSource", "k8s.io/api/core/v1.Taint"}, + } +} + +func schema_k8sio_api_core_v1_NodeStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeStatus is information about the current status of a node.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "capacity": { + SchemaProps: spec.SchemaProps{ + Description: "Capacity represents the total resources of a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + "allocatable": { + SchemaProps: spec.SchemaProps{ + Description: "Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + "phase": { + SchemaProps: spec.SchemaProps{ + Description: "NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.", + Type: []string{"string"}, + Format: "", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.NodeCondition"), + }, + }, + }, + }, + }, + "addresses": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses Note: This field is declared as mergeable, but the merge key is not sufficiently unique, which can cause data corruption when it is merged. Callers should instead use a full-replacement patch. See http://pr.k8s.io/79391 for an example.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.NodeAddress"), + }, + }, + }, + }, + }, + "daemonEndpoints": { + SchemaProps: spec.SchemaProps{ + Description: "Endpoints of daemons running on the Node.", + Ref: ref("k8s.io/api/core/v1.NodeDaemonEndpoints"), + }, + }, + "nodeInfo": { + SchemaProps: spec.SchemaProps{ + Description: "Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info", + Ref: ref("k8s.io/api/core/v1.NodeSystemInfo"), + }, + }, + "images": { + SchemaProps: spec.SchemaProps{ + Description: "List of container images on this node", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ContainerImage"), + }, + }, + }, + }, + }, + "volumesInUse": { + SchemaProps: spec.SchemaProps{ + Description: "List of attachable volumes in use (mounted) by the node.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "volumesAttached": { + SchemaProps: spec.SchemaProps{ + Description: "List of volumes that are attached to the node.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.AttachedVolume"), + }, + }, + }, + }, + }, + "config": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the config assigned to the node via the dynamic Kubelet config feature.", + Ref: ref("k8s.io/api/core/v1.NodeConfigStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.AttachedVolume", "k8s.io/api/core/v1.ContainerImage", "k8s.io/api/core/v1.NodeAddress", "k8s.io/api/core/v1.NodeCondition", "k8s.io/api/core/v1.NodeConfigStatus", "k8s.io/api/core/v1.NodeDaemonEndpoints", "k8s.io/api/core/v1.NodeSystemInfo", "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_core_v1_NodeSystemInfo(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeSystemInfo is a set of ids/uuids to uniquely identify the node.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "machineID": { + SchemaProps: spec.SchemaProps{ + Description: "MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html", + Type: []string{"string"}, + Format: "", + }, + }, + "systemUUID": { + SchemaProps: spec.SchemaProps{ + Description: "SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-us/red_hat_subscription_management/1/html/rhsm/uuid", + Type: []string{"string"}, + Format: "", + }, + }, + "bootID": { + SchemaProps: spec.SchemaProps{ + Description: "Boot ID reported by the node.", + Type: []string{"string"}, + Format: "", + }, + }, + "kernelVersion": { + SchemaProps: spec.SchemaProps{ + Description: "Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).", + Type: []string{"string"}, + Format: "", + }, + }, + "osImage": { + SchemaProps: spec.SchemaProps{ + Description: "OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).", + Type: []string{"string"}, + Format: "", + }, + }, + "containerRuntimeVersion": { + SchemaProps: spec.SchemaProps{ + Description: "ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).", + Type: []string{"string"}, + Format: "", + }, + }, + "kubeletVersion": { + SchemaProps: spec.SchemaProps{ + Description: "Kubelet Version reported by the node.", + Type: []string{"string"}, + Format: "", + }, + }, + "kubeProxyVersion": { + SchemaProps: spec.SchemaProps{ + Description: "KubeProxy Version reported by the node.", + Type: []string{"string"}, + Format: "", + }, + }, + "operatingSystem": { + SchemaProps: spec.SchemaProps{ + Description: "The Operating System reported by the node", + Type: []string{"string"}, + Format: "", + }, + }, + "architecture": { + SchemaProps: spec.SchemaProps{ + Description: "The Architecture reported by the node", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"machineID", "systemUUID", "bootID", "kernelVersion", "osImage", "containerRuntimeVersion", "kubeletVersion", "kubeProxyVersion", "operatingSystem", "architecture"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ObjectFieldSelector(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ObjectFieldSelector selects an APIVersioned field of an object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + Type: []string{"string"}, + Format: "", + }, + }, + "fieldPath": { + SchemaProps: spec.SchemaProps{ + Description: "Path of the field to select in the specified API version.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"fieldPath"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ObjectReference contains enough information to let you inspect or modify the referred object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + Type: []string{"string"}, + Format: "", + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "API version of the referent.", + Type: []string{"string"}, + Format: "", + }, + }, + "resourceVersion": { + SchemaProps: spec.SchemaProps{ + Description: "Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency", + Type: []string{"string"}, + Format: "", + }, + }, + "fieldPath": { + SchemaProps: spec.SchemaProps{ + Description: "If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_PersistentVolume(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes", + Ref: ref("k8s.io/api/core/v1.PersistentVolumeSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes", + Ref: ref("k8s.io/api/core/v1.PersistentVolumeStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PersistentVolumeSpec", "k8s.io/api/core/v1.PersistentVolumeStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_PersistentVolumeClaim(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeClaim is a user's request for and claim to a persistent volume", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaimSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaimStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PersistentVolumeClaimSpec", "k8s.io/api/core/v1.PersistentVolumeClaimStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_PersistentVolumeClaimCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeClaimCondition contails details about state of pvc", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "lastProbeTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time we probed the condition.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "Unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \"ResizeStarted\" that means the underlying persistent volume is being resized.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "Human-readable message indicating details about last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_core_v1_PersistentVolumeClaimList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeClaimList is a list of PersistentVolumeClaim items.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaim"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_PersistentVolumeClaimSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "accessModes": { + SchemaProps: spec.SchemaProps{ + Description: "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "A label query over volumes to consider for binding.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources", + Ref: ref("k8s.io/api/core/v1.ResourceRequirements"), + }, + }, + "volumeName": { + SchemaProps: spec.SchemaProps{ + Description: "VolumeName is the binding reference to the PersistentVolume backing this claim.", + Type: []string{"string"}, + Format: "", + }, + }, + "storageClassName": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + Type: []string{"string"}, + Format: "", + }, + }, + "volumeMode": { + SchemaProps: spec.SchemaProps{ + Description: "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + Type: []string{"string"}, + Format: "", + }, + }, + "dataSource": { + SchemaProps: spec.SchemaProps{ + Description: "This field can be used to specify either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot - Beta) * An existing PVC (PersistentVolumeClaim) * An existing custom resource/object that implements data population (Alpha) In order to use VolumeSnapshot object types, the appropriate feature gate must be enabled (VolumeSnapshotDataSource or AnyVolumeDataSource) If the provisioner or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data source. If the specified data source is not supported, the volume will not be created and the failure will be reported as an event. In the future, we plan to support more data source types and the behavior of the provisioner may change.", + Ref: ref("k8s.io/api/core/v1.TypedLocalObjectReference"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.TypedLocalObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_core_v1_PersistentVolumeClaimStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeClaimStatus is the current status of a persistent volume claim.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "phase": { + SchemaProps: spec.SchemaProps{ + Description: "Phase represents the current phase of PersistentVolumeClaim.", + Type: []string{"string"}, + Format: "", + }, + }, + "accessModes": { + SchemaProps: spec.SchemaProps{ + Description: "AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "capacity": { + SchemaProps: spec.SchemaProps{ + Description: "Represents the actual resources of the underlying volume.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaimCondition"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PersistentVolumeClaimCondition", "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_core_v1_PersistentVolumeClaimTemplate(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeClaimTemplate is used to produce PersistentVolumeClaim objects as part of an EphemeralVolumeSource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "May contain labels and annotations that will be copied into the PVC when creating it. No other fields are allowed and will be rejected during validation.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "The specification for the PersistentVolumeClaim. The entire content is copied unchanged into the PVC that gets created from this template. The same fields as in a PersistentVolumeClaim are also valid here.", + Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaimSpec"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PersistentVolumeClaimSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_PersistentVolumeClaimVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "claimName": { + SchemaProps: spec.SchemaProps{ + Description: "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Will force the ReadOnly setting in VolumeMounts. Default false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"claimName"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_PersistentVolumeList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeList is a list of PersistentVolume items.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PersistentVolume"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PersistentVolume", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_PersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeSource is similar to VolumeSource but meant for the administrator who creates PVs. Exactly one of its members must be set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "gcePersistentDisk": { + SchemaProps: spec.SchemaProps{ + Description: "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", + Ref: ref("k8s.io/api/core/v1.GCEPersistentDiskVolumeSource"), + }, + }, + "awsElasticBlockStore": { + SchemaProps: spec.SchemaProps{ + Description: "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", + Ref: ref("k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource"), + }, + }, + "hostPath": { + SchemaProps: spec.SchemaProps{ + Description: "HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", + Ref: ref("k8s.io/api/core/v1.HostPathVolumeSource"), + }, + }, + "glusterfs": { + SchemaProps: spec.SchemaProps{ + Description: "Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://examples.k8s.io/volumes/glusterfs/README.md", + Ref: ref("k8s.io/api/core/v1.GlusterfsPersistentVolumeSource"), + }, + }, + "nfs": { + SchemaProps: spec.SchemaProps{ + Description: "NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", + Ref: ref("k8s.io/api/core/v1.NFSVolumeSource"), + }, + }, + "rbd": { + SchemaProps: spec.SchemaProps{ + Description: "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md", + Ref: ref("k8s.io/api/core/v1.RBDPersistentVolumeSource"), + }, + }, + "iscsi": { + SchemaProps: spec.SchemaProps{ + Description: "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.", + Ref: ref("k8s.io/api/core/v1.ISCSIPersistentVolumeSource"), + }, + }, + "cinder": { + SchemaProps: spec.SchemaProps{ + Description: "Cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + Ref: ref("k8s.io/api/core/v1.CinderPersistentVolumeSource"), + }, + }, + "cephfs": { + SchemaProps: spec.SchemaProps{ + Description: "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", + Ref: ref("k8s.io/api/core/v1.CephFSPersistentVolumeSource"), + }, + }, + "fc": { + SchemaProps: spec.SchemaProps{ + Description: "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", + Ref: ref("k8s.io/api/core/v1.FCVolumeSource"), + }, + }, + "flocker": { + SchemaProps: spec.SchemaProps{ + Description: "Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running", + Ref: ref("k8s.io/api/core/v1.FlockerVolumeSource"), + }, + }, + "flexVolume": { + SchemaProps: spec.SchemaProps{ + Description: "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", + Ref: ref("k8s.io/api/core/v1.FlexPersistentVolumeSource"), + }, + }, + "azureFile": { + SchemaProps: spec.SchemaProps{ + Description: "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", + Ref: ref("k8s.io/api/core/v1.AzureFilePersistentVolumeSource"), + }, + }, + "vsphereVolume": { + SchemaProps: spec.SchemaProps{ + Description: "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", + Ref: ref("k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource"), + }, + }, + "quobyte": { + SchemaProps: spec.SchemaProps{ + Description: "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", + Ref: ref("k8s.io/api/core/v1.QuobyteVolumeSource"), + }, + }, + "azureDisk": { + SchemaProps: spec.SchemaProps{ + Description: "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", + Ref: ref("k8s.io/api/core/v1.AzureDiskVolumeSource"), + }, + }, + "photonPersistentDisk": { + SchemaProps: spec.SchemaProps{ + Description: "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", + Ref: ref("k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource"), + }, + }, + "portworxVolume": { + SchemaProps: spec.SchemaProps{ + Description: "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", + Ref: ref("k8s.io/api/core/v1.PortworxVolumeSource"), + }, + }, + "scaleIO": { + SchemaProps: spec.SchemaProps{ + Description: "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", + Ref: ref("k8s.io/api/core/v1.ScaleIOPersistentVolumeSource"), + }, + }, + "local": { + SchemaProps: spec.SchemaProps{ + Description: "Local represents directly-attached storage with node affinity", + Ref: ref("k8s.io/api/core/v1.LocalVolumeSource"), + }, + }, + "storageos": { + SchemaProps: spec.SchemaProps{ + Description: "StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://examples.k8s.io/volumes/storageos/README.md", + Ref: ref("k8s.io/api/core/v1.StorageOSPersistentVolumeSource"), + }, + }, + "csi": { + SchemaProps: spec.SchemaProps{ + Description: "CSI represents storage that is handled by an external CSI driver (Beta feature).", + Ref: ref("k8s.io/api/core/v1.CSIPersistentVolumeSource"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/api/core/v1.AzureDiskVolumeSource", "k8s.io/api/core/v1.AzureFilePersistentVolumeSource", "k8s.io/api/core/v1.CSIPersistentVolumeSource", "k8s.io/api/core/v1.CephFSPersistentVolumeSource", "k8s.io/api/core/v1.CinderPersistentVolumeSource", "k8s.io/api/core/v1.FCVolumeSource", "k8s.io/api/core/v1.FlexPersistentVolumeSource", "k8s.io/api/core/v1.FlockerVolumeSource", "k8s.io/api/core/v1.GCEPersistentDiskVolumeSource", "k8s.io/api/core/v1.GlusterfsPersistentVolumeSource", "k8s.io/api/core/v1.HostPathVolumeSource", "k8s.io/api/core/v1.ISCSIPersistentVolumeSource", "k8s.io/api/core/v1.LocalVolumeSource", "k8s.io/api/core/v1.NFSVolumeSource", "k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource", "k8s.io/api/core/v1.PortworxVolumeSource", "k8s.io/api/core/v1.QuobyteVolumeSource", "k8s.io/api/core/v1.RBDPersistentVolumeSource", "k8s.io/api/core/v1.ScaleIOPersistentVolumeSource", "k8s.io/api/core/v1.StorageOSPersistentVolumeSource", "k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource"}, + } +} + +func schema_k8sio_api_core_v1_PersistentVolumeSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeSpec is the specification of a persistent volume.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "capacity": { + SchemaProps: spec.SchemaProps{ + Description: "A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + "gcePersistentDisk": { + SchemaProps: spec.SchemaProps{ + Description: "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", + Ref: ref("k8s.io/api/core/v1.GCEPersistentDiskVolumeSource"), + }, + }, + "awsElasticBlockStore": { + SchemaProps: spec.SchemaProps{ + Description: "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", + Ref: ref("k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource"), + }, + }, + "hostPath": { + SchemaProps: spec.SchemaProps{ + Description: "HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", + Ref: ref("k8s.io/api/core/v1.HostPathVolumeSource"), + }, + }, + "glusterfs": { + SchemaProps: spec.SchemaProps{ + Description: "Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://examples.k8s.io/volumes/glusterfs/README.md", + Ref: ref("k8s.io/api/core/v1.GlusterfsPersistentVolumeSource"), + }, + }, + "nfs": { + SchemaProps: spec.SchemaProps{ + Description: "NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", + Ref: ref("k8s.io/api/core/v1.NFSVolumeSource"), + }, + }, + "rbd": { + SchemaProps: spec.SchemaProps{ + Description: "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md", + Ref: ref("k8s.io/api/core/v1.RBDPersistentVolumeSource"), + }, + }, + "iscsi": { + SchemaProps: spec.SchemaProps{ + Description: "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.", + Ref: ref("k8s.io/api/core/v1.ISCSIPersistentVolumeSource"), + }, + }, + "cinder": { + SchemaProps: spec.SchemaProps{ + Description: "Cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + Ref: ref("k8s.io/api/core/v1.CinderPersistentVolumeSource"), + }, + }, + "cephfs": { + SchemaProps: spec.SchemaProps{ + Description: "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", + Ref: ref("k8s.io/api/core/v1.CephFSPersistentVolumeSource"), + }, + }, + "fc": { + SchemaProps: spec.SchemaProps{ + Description: "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", + Ref: ref("k8s.io/api/core/v1.FCVolumeSource"), + }, + }, + "flocker": { + SchemaProps: spec.SchemaProps{ + Description: "Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running", + Ref: ref("k8s.io/api/core/v1.FlockerVolumeSource"), + }, + }, + "flexVolume": { + SchemaProps: spec.SchemaProps{ + Description: "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", + Ref: ref("k8s.io/api/core/v1.FlexPersistentVolumeSource"), + }, + }, + "azureFile": { + SchemaProps: spec.SchemaProps{ + Description: "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", + Ref: ref("k8s.io/api/core/v1.AzureFilePersistentVolumeSource"), + }, + }, + "vsphereVolume": { + SchemaProps: spec.SchemaProps{ + Description: "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", + Ref: ref("k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource"), + }, + }, + "quobyte": { + SchemaProps: spec.SchemaProps{ + Description: "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", + Ref: ref("k8s.io/api/core/v1.QuobyteVolumeSource"), + }, + }, + "azureDisk": { + SchemaProps: spec.SchemaProps{ + Description: "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", + Ref: ref("k8s.io/api/core/v1.AzureDiskVolumeSource"), + }, + }, + "photonPersistentDisk": { + SchemaProps: spec.SchemaProps{ + Description: "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", + Ref: ref("k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource"), + }, + }, + "portworxVolume": { + SchemaProps: spec.SchemaProps{ + Description: "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", + Ref: ref("k8s.io/api/core/v1.PortworxVolumeSource"), + }, + }, + "scaleIO": { + SchemaProps: spec.SchemaProps{ + Description: "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", + Ref: ref("k8s.io/api/core/v1.ScaleIOPersistentVolumeSource"), + }, + }, + "local": { + SchemaProps: spec.SchemaProps{ + Description: "Local represents directly-attached storage with node affinity", + Ref: ref("k8s.io/api/core/v1.LocalVolumeSource"), + }, + }, + "storageos": { + SchemaProps: spec.SchemaProps{ + Description: "StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://examples.k8s.io/volumes/storageos/README.md", + Ref: ref("k8s.io/api/core/v1.StorageOSPersistentVolumeSource"), + }, + }, + "csi": { + SchemaProps: spec.SchemaProps{ + Description: "CSI represents storage that is handled by an external CSI driver (Beta feature).", + Ref: ref("k8s.io/api/core/v1.CSIPersistentVolumeSource"), + }, + }, + "accessModes": { + SchemaProps: spec.SchemaProps{ + Description: "AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "claimRef": { + SchemaProps: spec.SchemaProps{ + Description: "ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + "persistentVolumeReclaimPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "What happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming", + Type: []string{"string"}, + Format: "", + }, + }, + "storageClassName": { + SchemaProps: spec.SchemaProps{ + Description: "Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.", + Type: []string{"string"}, + Format: "", + }, + }, + "mountOptions": { + SchemaProps: spec.SchemaProps{ + Description: "A list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "volumeMode": { + SchemaProps: spec.SchemaProps{ + Description: "volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec.", + Type: []string{"string"}, + Format: "", + }, + }, + "nodeAffinity": { + SchemaProps: spec.SchemaProps{ + Description: "NodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume.", + Ref: ref("k8s.io/api/core/v1.VolumeNodeAffinity"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/api/core/v1.AzureDiskVolumeSource", "k8s.io/api/core/v1.AzureFilePersistentVolumeSource", "k8s.io/api/core/v1.CSIPersistentVolumeSource", "k8s.io/api/core/v1.CephFSPersistentVolumeSource", "k8s.io/api/core/v1.CinderPersistentVolumeSource", "k8s.io/api/core/v1.FCVolumeSource", "k8s.io/api/core/v1.FlexPersistentVolumeSource", "k8s.io/api/core/v1.FlockerVolumeSource", "k8s.io/api/core/v1.GCEPersistentDiskVolumeSource", "k8s.io/api/core/v1.GlusterfsPersistentVolumeSource", "k8s.io/api/core/v1.HostPathVolumeSource", "k8s.io/api/core/v1.ISCSIPersistentVolumeSource", "k8s.io/api/core/v1.LocalVolumeSource", "k8s.io/api/core/v1.NFSVolumeSource", "k8s.io/api/core/v1.ObjectReference", "k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource", "k8s.io/api/core/v1.PortworxVolumeSource", "k8s.io/api/core/v1.QuobyteVolumeSource", "k8s.io/api/core/v1.RBDPersistentVolumeSource", "k8s.io/api/core/v1.ScaleIOPersistentVolumeSource", "k8s.io/api/core/v1.StorageOSPersistentVolumeSource", "k8s.io/api/core/v1.VolumeNodeAffinity", "k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource", "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_core_v1_PersistentVolumeStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeStatus is the current status of a persistent volume.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "phase": { + SchemaProps: spec.SchemaProps{ + Description: "Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human-readable message indicating details about why the volume is in this state.", + Type: []string{"string"}, + Format: "", + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_PhotonPersistentDiskVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a Photon Controller persistent disk resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "pdID": { + SchemaProps: spec.SchemaProps{ + Description: "ID that identifies Photon Controller persistent disk", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"pdID"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_Pod(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.PodSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.PodStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodSpec", "k8s.io/api/core/v1.PodStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_PodAffinity(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Pod affinity is a group of inter pod affinity scheduling rules.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "requiredDuringSchedulingIgnoredDuringExecution": { + SchemaProps: spec.SchemaProps{ + Description: "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PodAffinityTerm"), + }, + }, + }, + }, + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + SchemaProps: spec.SchemaProps{ + Description: "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.WeightedPodAffinityTerm"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodAffinityTerm", "k8s.io/api/core/v1.WeightedPodAffinityTerm"}, + } +} + +func schema_k8sio_api_core_v1_PodAffinityTerm(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key matches that of any node on which a pod of the set of pods is running", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "labelSelector": { + SchemaProps: spec.SchemaProps{ + Description: "A label query over a set of resources, in this case pods.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "namespaces": { + SchemaProps: spec.SchemaProps{ + Description: "namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "topologyKey": { + SchemaProps: spec.SchemaProps{ + Description: "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"topologyKey"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_core_v1_PodAntiAffinity(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "requiredDuringSchedulingIgnoredDuringExecution": { + SchemaProps: spec.SchemaProps{ + Description: "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PodAffinityTerm"), + }, + }, + }, + }, + }, + "preferredDuringSchedulingIgnoredDuringExecution": { + SchemaProps: spec.SchemaProps{ + Description: "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.WeightedPodAffinityTerm"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodAffinityTerm", "k8s.io/api/core/v1.WeightedPodAffinityTerm"}, + } +} + +func schema_k8sio_api_core_v1_PodAttachOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodAttachOptions is the query options to a Pod's remote attach call.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "stdin": { + SchemaProps: spec.SchemaProps{ + Description: "Stdin if true, redirects the standard input stream of the pod for this call. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "stdout": { + SchemaProps: spec.SchemaProps{ + Description: "Stdout if true indicates that stdout is to be redirected for the attach call. Defaults to true.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "stderr": { + SchemaProps: spec.SchemaProps{ + Description: "Stderr if true indicates that stderr is to be redirected for the attach call. Defaults to true.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "tty": { + SchemaProps: spec.SchemaProps{ + Description: "TTY if true indicates that a tty will be allocated for the attach call. This is passed through the container runtime so the tty is allocated on the worker node by the container runtime. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "container": { + SchemaProps: spec.SchemaProps{ + Description: "The container in which to execute the command. Defaults to only container if there is only one container in the pod.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_PodCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodCondition contains details for the current condition of this pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the status of the condition. Can be True, False, Unknown. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions", + Type: []string{"string"}, + Format: "", + }, + }, + "lastProbeTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time we probed the condition.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "Unique, one-word, CamelCase reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "Human-readable message indicating details about last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_core_v1_PodDNSConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "nameservers": { + SchemaProps: spec.SchemaProps{ + Description: "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "searches": { + SchemaProps: spec.SchemaProps{ + Description: "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "options": { + SchemaProps: spec.SchemaProps{ + Description: "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PodDNSConfigOption"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodDNSConfigOption"}, + } +} + +func schema_k8sio_api_core_v1_PodDNSConfigOption(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodDNSConfigOption defines DNS resolver options of a pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Required.", + Type: []string{"string"}, + Format: "", + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_PodExecOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodExecOptions is the query options to a Pod's remote exec call.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "stdin": { + SchemaProps: spec.SchemaProps{ + Description: "Redirect the standard input stream of the pod for this call. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "stdout": { + SchemaProps: spec.SchemaProps{ + Description: "Redirect the standard output stream of the pod for this call. Defaults to true.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "stderr": { + SchemaProps: spec.SchemaProps{ + Description: "Redirect the standard error stream of the pod for this call. Defaults to true.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "tty": { + SchemaProps: spec.SchemaProps{ + Description: "TTY if true indicates that a tty will be allocated for the exec call. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "container": { + SchemaProps: spec.SchemaProps{ + Description: "Container in which to execute the command. Defaults to only container if there is only one container in the pod.", + Type: []string{"string"}, + Format: "", + }, + }, + "command": { + SchemaProps: spec.SchemaProps{ + Description: "Command is the remote command to execute. argv array. Not executed within a shell.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"command"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_PodIP(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IP address information for entries in the (plural) PodIPs field. Each entry includes:\n IP: An IP address allocated to the pod. Routable at least within the cluster.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ip": { + SchemaProps: spec.SchemaProps{ + Description: "ip is an IP address (IPv4 or IPv6) assigned to the pod", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_PodList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodList is a list of Pods.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of pods. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Pod"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.Pod", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_PodLogOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodLogOptions is the query options for a Pod's logs REST call.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "container": { + SchemaProps: spec.SchemaProps{ + Description: "The container for which to stream logs. Defaults to only container if there is one container in the pod.", + Type: []string{"string"}, + Format: "", + }, + }, + "follow": { + SchemaProps: spec.SchemaProps{ + Description: "Follow the log stream of the pod. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "previous": { + SchemaProps: spec.SchemaProps{ + Description: "Return previous terminated container logs. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "sinceSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "A relative time in seconds before the current time from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "sinceTime": { + SchemaProps: spec.SchemaProps{ + Description: "An RFC3339 timestamp from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "timestamps": { + SchemaProps: spec.SchemaProps{ + Description: "If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "tailLines": { + SchemaProps: spec.SchemaProps{ + Description: "If set, the number of lines from the end of the logs to show. If not specified, logs are shown from the creation of the container or sinceSeconds or sinceTime", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "limitBytes": { + SchemaProps: spec.SchemaProps{ + Description: "If set, the number of bytes to read from the server before terminating the log output. This may not display a complete final line of logging, and may return slightly more or slightly less than the specified limit.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "insecureSkipTLSVerifyBackend": { + SchemaProps: spec.SchemaProps{ + Description: "insecureSkipTLSVerifyBackend indicates that the apiserver should not confirm the validity of the serving certificate of the backend it is connecting to. This will make the HTTPS connection between the apiserver and the backend insecure. This means the apiserver cannot verify the log data it is receiving came from the real kubelet. If the kubelet is configured to verify the apiserver's TLS credentials, it does not mean the connection to the real kubelet is vulnerable to a man in the middle attack (e.g. an attacker could not intercept the actual log data coming from the real kubelet).", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_core_v1_PodPortForwardOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodPortForwardOptions is the query options to a Pod's port forward call when using WebSockets. The `port` query parameter must specify the port or ports (comma separated) to forward over. Port forwarding over SPDY does not use these options. It requires the port to be passed in the `port` header as part of request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "ports": { + SchemaProps: spec.SchemaProps{ + Description: "List of ports to forward Required when using WebSockets", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_PodProxyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodProxyOptions is the query options to a Pod's proxy call.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Path is the URL path to use for the current proxy request to pod.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_PodReadinessGate(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodReadinessGate contains the reference to a pod condition", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditionType": { + SchemaProps: spec.SchemaProps{ + Description: "ConditionType refers to a condition in the pod's condition list with matching type.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"conditionType"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_PodSecurityContext(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "seLinuxOptions": { + SchemaProps: spec.SchemaProps{ + Description: "The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", + Ref: ref("k8s.io/api/core/v1.SELinuxOptions"), + }, + }, + "windowsOptions": { + SchemaProps: spec.SchemaProps{ + Description: "The Windows specific settings applied to all containers. If unspecified, the options within a container's SecurityContext will be used. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + Ref: ref("k8s.io/api/core/v1.WindowsSecurityContextOptions"), + }, + }, + "runAsUser": { + SchemaProps: spec.SchemaProps{ + Description: "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "runAsGroup": { + SchemaProps: spec.SchemaProps{ + Description: "The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "runAsNonRoot": { + SchemaProps: spec.SchemaProps{ + Description: "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "supplementalGroups": { + SchemaProps: spec.SchemaProps{ + Description: "A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + }, + }, + "fsGroup": { + SchemaProps: spec.SchemaProps{ + Description: "A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n\nIf unset, the Kubelet will not modify the ownership and permissions of any volume.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "sysctls": { + SchemaProps: spec.SchemaProps{ + Description: "Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Sysctl"), + }, + }, + }, + }, + }, + "fsGroupChangePolicy": { + SchemaProps: spec.SchemaProps{ + Description: "fsGroupChangePolicy defines behavior of changing ownership and permission of the volume before being exposed inside Pod. This field will only apply to volume types which support fsGroup based ownership(and permissions). It will have no effect on ephemeral volume types such as: secret, configmaps and emptydir. Valid values are \"OnRootMismatch\" and \"Always\". If not specified defaults to \"Always\".", + Type: []string{"string"}, + Format: "", + }, + }, + "seccompProfile": { + SchemaProps: spec.SchemaProps{ + Description: "The seccomp options to use by the containers in this pod.", + Ref: ref("k8s.io/api/core/v1.SeccompProfile"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.SELinuxOptions", "k8s.io/api/core/v1.SeccompProfile", "k8s.io/api/core/v1.Sysctl", "k8s.io/api/core/v1.WindowsSecurityContextOptions"}, + } +} + +func schema_k8sio_api_core_v1_PodSignature(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Describes the class of pods that should avoid this node. Exactly one field should be set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "podController": { + SchemaProps: spec.SchemaProps{ + Description: "Reference to controller whose pods should avoid this node.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference"}, + } +} + +func schema_k8sio_api_core_v1_PodSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodSpec is a description of a pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "volumes": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge,retainKeys", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Volume"), + }, + }, + }, + }, + }, + "initContainers": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Container"), + }, + }, + }, + }, + }, + "containers": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Container"), + }, + }, + }, + }, + }, + "ephemeralContainers": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing pod to perform user-initiated actions such as debugging. This list cannot be specified when creating a pod, and it cannot be modified by updating the pod spec. In order to add an ephemeral container to an existing pod, use the pod's ephemeralcontainers subresource. This field is alpha-level and is only honored by servers that enable the EphemeralContainers feature.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.EphemeralContainer"), + }, + }, + }, + }, + }, + "restartPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy", + Type: []string{"string"}, + Format: "", + }, + }, + "terminationGracePeriodSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "activeDeadlineSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "dnsPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", + Type: []string{"string"}, + Format: "", + }, + }, + "nodeSelector": { + SchemaProps: spec.SchemaProps{ + Description: "NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "serviceAccountName": { + SchemaProps: spec.SchemaProps{ + Description: "ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + Type: []string{"string"}, + Format: "", + }, + }, + "serviceAccount": { + SchemaProps: spec.SchemaProps{ + Description: "DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.", + Type: []string{"string"}, + Format: "", + }, + }, + "automountServiceAccountToken": { + SchemaProps: spec.SchemaProps{ + Description: "AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "nodeName": { + SchemaProps: spec.SchemaProps{ + Description: "NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.", + Type: []string{"string"}, + Format: "", + }, + }, + "hostNetwork": { + SchemaProps: spec.SchemaProps{ + Description: "Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "hostPID": { + SchemaProps: spec.SchemaProps{ + Description: "Use the host's pid namespace. Optional: Default to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "hostIPC": { + SchemaProps: spec.SchemaProps{ + Description: "Use the host's ipc namespace. Optional: Default to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "shareProcessNamespace": { + SchemaProps: spec.SchemaProps{ + Description: "Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "securityContext": { + SchemaProps: spec.SchemaProps{ + Description: "SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.", + Ref: ref("k8s.io/api/core/v1.PodSecurityContext"), + }, + }, + "imagePullSecrets": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), + }, + }, + }, + }, + }, + "hostname": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.", + Type: []string{"string"}, + Format: "", + }, + }, + "subdomain": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, the fully qualified Pod hostname will be \"...svc.\". If not specified, the pod will not have a domainname at all.", + Type: []string{"string"}, + Format: "", + }, + }, + "affinity": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, the pod's scheduling constraints", + Ref: ref("k8s.io/api/core/v1.Affinity"), + }, + }, + "schedulerName": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.", + Type: []string{"string"}, + Format: "", + }, + }, + "tolerations": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, the pod's tolerations.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Toleration"), + }, + }, + }, + }, + }, + "hostAliases": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "ip", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.HostAlias"), + }, + }, + }, + }, + }, + "priorityClassName": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.", + Type: []string{"string"}, + Format: "", + }, + }, + "priority": { + SchemaProps: spec.SchemaProps{ + Description: "The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "dnsConfig": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.", + Ref: ref("k8s.io/api/core/v1.PodDNSConfig"), + }, + }, + "readinessGates": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PodReadinessGate"), + }, + }, + }, + }, + }, + "runtimeClassName": { + SchemaProps: spec.SchemaProps{ + Description: "RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the \"legacy\" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md This is a beta feature as of Kubernetes v1.14.", + Type: []string{"string"}, + Format: "", + }, + }, + "enableServiceLinks": { + SchemaProps: spec.SchemaProps{ + Description: "EnableServiceLinks indicates whether information about services should be injected into pod's environment variables, matching the syntax of Docker links. Optional: Defaults to true.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "preemptionPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is beta-level, gated by the NonPreemptingPriority feature-gate.", + Type: []string{"string"}, + Format: "", + }, + }, + "overhead": { + SchemaProps: spec.SchemaProps{ + Description: "Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. This field will be autopopulated at admission time by the RuntimeClass admission controller. If the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests. The RuntimeClass admission controller will reject Pod create requests which have the overhead already set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero. More info: https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md This field is alpha-level as of Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + "topologySpreadConstraints": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "topologyKey", + "whenUnsatisfiable", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.TopologySpreadConstraint"), + }, + }, + }, + }, + }, + "setHostnameAsFQDN": { + SchemaProps: spec.SchemaProps{ + Description: "If true the pod's hostname will be configured as the pod's FQDN, rather than the leaf name (the default). In Linux containers, this means setting the FQDN in the hostname field of the kernel (the nodename field of struct utsname). In Windows containers, this means setting the registry value of hostname for the registry key HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters to FQDN. If a pod does not have FQDN, this has no effect. Default to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"containers"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.Container", "k8s.io/api/core/v1.EphemeralContainer", "k8s.io/api/core/v1.HostAlias", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodReadinessGate", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.TopologySpreadConstraint", "k8s.io/api/core/v1.Volume", "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_core_v1_PodStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodStatus represents information about the status of a pod. Status may trail the actual state of a system, especially if the node that hosts the pod cannot contact the control plane.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "phase": { + SchemaProps: spec.SchemaProps{ + Description: "The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle. The conditions array, the reason and message fields, and the individual container status arrays contain more detail about the pod's status. There are five possible phase values:\n\nPending: The pod has been accepted by the Kubernetes system, but one or more of the container images has not been created. This includes time before being scheduled as well as time spent downloading images over the network, which could take a while. Running: The pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Succeeded: All containers in the pod have terminated in success, and will not be restarted. Failed: All containers in the pod have terminated, and at least one container has terminated in failure. The container either exited with non-zero status or was terminated by the system. Unknown: For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod.\n\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase", + Type: []string{"string"}, + Format: "", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PodCondition"), + }, + }, + }, + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about why the pod is in this condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "A brief CamelCase message indicating details about why the pod is in this state. e.g. 'Evicted'", + Type: []string{"string"}, + Format: "", + }, + }, + "nominatedNodeName": { + SchemaProps: spec.SchemaProps{ + Description: "nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be scheduled right away as preemption victims receive their graceful termination periods. This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to give the resources on this node to a higher priority pod that is created after preemption. As a result, this field may be different than PodSpec.nodeName when the pod is scheduled.", + Type: []string{"string"}, + Format: "", + }, + }, + "hostIP": { + SchemaProps: spec.SchemaProps{ + Description: "IP address of the host to which the pod is assigned. Empty if not yet scheduled.", + Type: []string{"string"}, + Format: "", + }, + }, + "podIP": { + SchemaProps: spec.SchemaProps{ + Description: "IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.", + Type: []string{"string"}, + Format: "", + }, + }, + "podIPs": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "ip", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must match the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list is empty if no IPs have been allocated yet.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PodIP"), + }, + }, + }, + }, + }, + "startTime": { + SchemaProps: spec.SchemaProps{ + Description: "RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "initContainerStatuses": { + SchemaProps: spec.SchemaProps{ + Description: "The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ContainerStatus"), + }, + }, + }, + }, + }, + "containerStatuses": { + SchemaProps: spec.SchemaProps{ + Description: "The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ContainerStatus"), + }, + }, + }, + }, + }, + "qosClass": { + SchemaProps: spec.SchemaProps{ + Description: "The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md", + Type: []string{"string"}, + Format: "", + }, + }, + "ephemeralContainerStatuses": { + SchemaProps: spec.SchemaProps{ + Description: "Status for any ephemeral containers that have run in this pod. This field is alpha-level and is only populated by servers that enable the EphemeralContainers feature.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ContainerStatus"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ContainerStatus", "k8s.io/api/core/v1.PodCondition", "k8s.io/api/core/v1.PodIP", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_core_v1_PodStatusResult(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.PodStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_PodTemplate(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodTemplate describes a template for creating copies of a predefined pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_PodTemplateList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodTemplateList is a list of PodTemplates.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of pod templates", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PodTemplate"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodTemplate", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_PodTemplateSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodTemplateSpec describes the data a pod should have when created from a template", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.PodSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_PortworxVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PortworxVolumeSource represents a Portworx volume resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "volumeID": { + SchemaProps: spec.SchemaProps{ + Description: "VolumeID uniquely identifies a Portworx volume", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"volumeID"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_PreferAvoidPodsEntry(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Describes a class of pods that should avoid this node.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "podSignature": { + SchemaProps: spec.SchemaProps{ + Description: "The class of pods.", + Ref: ref("k8s.io/api/core/v1.PodSignature"), + }, + }, + "evictionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Time at which this entry was added to the list.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "(brief) reason why this entry was added to the list.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "Human readable message indicating why this entry was added to the list.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"podSignature"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodSignature", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_core_v1_PreferredSchedulingTerm(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "weight": { + SchemaProps: spec.SchemaProps{ + Description: "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "preference": { + SchemaProps: spec.SchemaProps{ + Description: "A node selector term, associated with the corresponding weight.", + Ref: ref("k8s.io/api/core/v1.NodeSelectorTerm"), + }, + }, + }, + Required: []string{"weight", "preference"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.NodeSelectorTerm"}, + } +} + +func schema_k8sio_api_core_v1_Probe(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "exec": { + SchemaProps: spec.SchemaProps{ + Description: "One and only one of the following should be specified. Exec specifies the action to take.", + Ref: ref("k8s.io/api/core/v1.ExecAction"), + }, + }, + "httpGet": { + SchemaProps: spec.SchemaProps{ + Description: "HTTPGet specifies the http request to perform.", + Ref: ref("k8s.io/api/core/v1.HTTPGetAction"), + }, + }, + "tcpSocket": { + SchemaProps: spec.SchemaProps{ + Description: "TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported", + Ref: ref("k8s.io/api/core/v1.TCPSocketAction"), + }, + }, + "initialDelaySeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "timeoutSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "periodSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "successThreshold": { + SchemaProps: spec.SchemaProps{ + Description: "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "failureThreshold": { + SchemaProps: spec.SchemaProps{ + Description: "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ExecAction", "k8s.io/api/core/v1.HTTPGetAction", "k8s.io/api/core/v1.TCPSocketAction"}, + } +} + +func schema_k8sio_api_core_v1_ProjectedVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a projected volume source", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "sources": { + SchemaProps: spec.SchemaProps{ + Description: "list of volume projections", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.VolumeProjection"), + }, + }, + }, + }, + }, + "defaultMode": { + SchemaProps: spec.SchemaProps{ + Description: "Mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"sources"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.VolumeProjection"}, + } +} + +func schema_k8sio_api_core_v1_QuobyteVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "registry": { + SchemaProps: spec.SchemaProps{ + Description: "Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes", + Type: []string{"string"}, + Format: "", + }, + }, + "volume": { + SchemaProps: spec.SchemaProps{ + Description: "Volume is a string that references an already created Quobyte volume by name.", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "user": { + SchemaProps: spec.SchemaProps{ + Description: "User to map volume access to Defaults to serivceaccount user", + Type: []string{"string"}, + Format: "", + }, + }, + "group": { + SchemaProps: spec.SchemaProps{ + Description: "Group to map volume access to Default is no group", + Type: []string{"string"}, + Format: "", + }, + }, + "tenant": { + SchemaProps: spec.SchemaProps{ + Description: "Tenant owning the given Quobyte volume in the Backend Used with dynamically provisioned Quobyte volumes, value is set by the plugin", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"registry", "volume"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_RBDPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "monitors": { + SchemaProps: spec.SchemaProps{ + Description: "A collection of Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "image": { + SchemaProps: spec.SchemaProps{ + Description: "The rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd", + Type: []string{"string"}, + Format: "", + }, + }, + "pool": { + SchemaProps: spec.SchemaProps{ + Description: "The rados pool name. Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + Type: []string{"string"}, + Format: "", + }, + }, + "user": { + SchemaProps: spec.SchemaProps{ + Description: "The rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + Type: []string{"string"}, + Format: "", + }, + }, + "keyring": { + SchemaProps: spec.SchemaProps{ + Description: "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + Type: []string{"string"}, + Format: "", + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + Ref: ref("k8s.io/api/core/v1.SecretReference"), + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"monitors", "image"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.SecretReference"}, + } +} + +func schema_k8sio_api_core_v1_RBDVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "monitors": { + SchemaProps: spec.SchemaProps{ + Description: "A collection of Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "image": { + SchemaProps: spec.SchemaProps{ + Description: "The rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd", + Type: []string{"string"}, + Format: "", + }, + }, + "pool": { + SchemaProps: spec.SchemaProps{ + Description: "The rados pool name. Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + Type: []string{"string"}, + Format: "", + }, + }, + "user": { + SchemaProps: spec.SchemaProps{ + Description: "The rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + Type: []string{"string"}, + Format: "", + }, + }, + "keyring": { + SchemaProps: spec.SchemaProps{ + Description: "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + Type: []string{"string"}, + Format: "", + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"monitors", "image"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LocalObjectReference"}, + } +} + +func schema_k8sio_api_core_v1_RangeAllocation(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RangeAllocation is not a public type.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "range": { + SchemaProps: spec.SchemaProps{ + Description: "Range is string that identifies the range represented by 'data'.", + Type: []string{"string"}, + Format: "", + }, + }, + "data": { + SchemaProps: spec.SchemaProps{ + Description: "Data is a bit array containing all allocated addresses in the previous segment.", + Type: []string{"string"}, + Format: "byte", + }, + }, + }, + Required: []string{"range", "data"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_ReplicationController(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicationController represents the configuration of a replication controller.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec defines the specification of the desired behavior of the replication controller. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.ReplicationControllerSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the most recently observed status of the replication controller. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.ReplicationControllerStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ReplicationControllerSpec", "k8s.io/api/core/v1.ReplicationControllerStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_ReplicationControllerCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicationControllerCondition describes the state of a replication controller at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of replication controller condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "The last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_core_v1_ReplicationControllerList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicationControllerList is a collection of replication controllers.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ReplicationController"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ReplicationController", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_ReplicationControllerSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicationControllerSpec is the specification of a replication controller.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "minReadySeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodTemplateSpec"}, + } +} + +func schema_k8sio_api_core_v1_ReplicationControllerStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicationControllerStatus represents the current status of a replication controller.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "fullyLabeledReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "The number of pods that have labels matching the labels of the pod template of the replication controller.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "readyReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "The number of ready replicas for this replication controller.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "availableReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "The number of available replicas (ready for at least minReadySeconds) for this replication controller.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "ObservedGeneration reflects the generation of the most recently observed replication controller.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a replication controller's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ReplicationControllerCondition"), + }, + }, + }, + }, + }, + }, + Required: []string{"replicas"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ReplicationControllerCondition"}, + } +} + +func schema_k8sio_api_core_v1_ResourceFieldSelector(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "containerName": { + SchemaProps: spec.SchemaProps{ + Description: "Container name: required for volumes, optional for env vars", + Type: []string{"string"}, + Format: "", + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "Required: resource to select", + Type: []string{"string"}, + Format: "", + }, + }, + "divisor": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the output format of the exposed resources, defaults to \"1\"", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"resource"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_core_v1_ResourceQuota(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceQuota sets aggregate quota restrictions enforced per namespace", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec defines the desired quota. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.ResourceQuotaSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status defines the actual enforced quota and its current usage. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.ResourceQuotaStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ResourceQuotaSpec", "k8s.io/api/core/v1.ResourceQuotaStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_ResourceQuotaList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceQuotaList is a list of ResourceQuota items.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of ResourceQuota objects. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ResourceQuota"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ResourceQuota", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_ResourceQuotaSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceQuotaSpec defines the desired hard limits to enforce for Quota.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "hard": { + SchemaProps: spec.SchemaProps{ + Description: "hard is the set of desired hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + "scopes": { + SchemaProps: spec.SchemaProps{ + Description: "A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "scopeSelector": { + SchemaProps: spec.SchemaProps{ + Description: "scopeSelector is also a collection of filters like scopes that must match each object tracked by a quota but expressed using ScopeSelectorOperator in combination with possible values. For a resource to match, both scopes AND scopeSelector (if specified in spec), must be matched.", + Ref: ref("k8s.io/api/core/v1.ScopeSelector"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ScopeSelector", "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_core_v1_ResourceQuotaStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceQuotaStatus defines the enforced hard limits and observed use.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "hard": { + SchemaProps: spec.SchemaProps{ + Description: "Hard is the set of enforced hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + "used": { + SchemaProps: spec.SchemaProps{ + Description: "Used is the current observed total usage of the resource in the namespace.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_core_v1_ResourceRequirements(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceRequirements describes the compute resource requirements.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "limits": { + SchemaProps: spec.SchemaProps{ + Description: "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + "requests": { + SchemaProps: spec.SchemaProps{ + Description: "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_core_v1_SELinuxOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SELinuxOptions are the labels to be applied to the container", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "user": { + SchemaProps: spec.SchemaProps{ + Description: "User is a SELinux user label that applies to the container.", + Type: []string{"string"}, + Format: "", + }, + }, + "role": { + SchemaProps: spec.SchemaProps{ + Description: "Role is a SELinux role label that applies to the container.", + Type: []string{"string"}, + Format: "", + }, + }, + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type is a SELinux type label that applies to the container.", + Type: []string{"string"}, + Format: "", + }, + }, + "level": { + SchemaProps: spec.SchemaProps{ + Description: "Level is SELinux level label that applies to the container.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ScaleIOPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "gateway": { + SchemaProps: spec.SchemaProps{ + Description: "The host address of the ScaleIO API Gateway.", + Type: []string{"string"}, + Format: "", + }, + }, + "system": { + SchemaProps: spec.SchemaProps{ + Description: "The name of the storage system as configured in ScaleIO.", + Type: []string{"string"}, + Format: "", + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.", + Ref: ref("k8s.io/api/core/v1.SecretReference"), + }, + }, + "sslEnabled": { + SchemaProps: spec.SchemaProps{ + Description: "Flag to enable/disable SSL communication with Gateway, default false", + Type: []string{"boolean"}, + Format: "", + }, + }, + "protectionDomain": { + SchemaProps: spec.SchemaProps{ + Description: "The name of the ScaleIO Protection Domain for the configured storage.", + Type: []string{"string"}, + Format: "", + }, + }, + "storagePool": { + SchemaProps: spec.SchemaProps{ + Description: "The ScaleIO Storage Pool associated with the protection domain.", + Type: []string{"string"}, + Format: "", + }, + }, + "storageMode": { + SchemaProps: spec.SchemaProps{ + Description: "Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.", + Type: []string{"string"}, + Format: "", + }, + }, + "volumeName": { + SchemaProps: spec.SchemaProps{ + Description: "The name of a volume already created in the ScaleIO system that is associated with this volume source.", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Default is \"xfs\"", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"gateway", "system", "secretRef"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.SecretReference"}, + } +} + +func schema_k8sio_api_core_v1_ScaleIOVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ScaleIOVolumeSource represents a persistent ScaleIO volume", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "gateway": { + SchemaProps: spec.SchemaProps{ + Description: "The host address of the ScaleIO API Gateway.", + Type: []string{"string"}, + Format: "", + }, + }, + "system": { + SchemaProps: spec.SchemaProps{ + Description: "The name of the storage system as configured in ScaleIO.", + Type: []string{"string"}, + Format: "", + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.", + Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), + }, + }, + "sslEnabled": { + SchemaProps: spec.SchemaProps{ + Description: "Flag to enable/disable SSL communication with Gateway, default false", + Type: []string{"boolean"}, + Format: "", + }, + }, + "protectionDomain": { + SchemaProps: spec.SchemaProps{ + Description: "The name of the ScaleIO Protection Domain for the configured storage.", + Type: []string{"string"}, + Format: "", + }, + }, + "storagePool": { + SchemaProps: spec.SchemaProps{ + Description: "The ScaleIO Storage Pool associated with the protection domain.", + Type: []string{"string"}, + Format: "", + }, + }, + "storageMode": { + SchemaProps: spec.SchemaProps{ + Description: "Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.", + Type: []string{"string"}, + Format: "", + }, + }, + "volumeName": { + SchemaProps: spec.SchemaProps{ + Description: "The name of a volume already created in the ScaleIO system that is associated with this volume source.", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Default is \"xfs\".", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"gateway", "system", "secretRef"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LocalObjectReference"}, + } +} + +func schema_k8sio_api_core_v1_ScopeSelector(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A scope selector represents the AND of the selectors represented by the scoped-resource selector requirements.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "matchExpressions": { + SchemaProps: spec.SchemaProps{ + Description: "A list of scope selector requirements by scope of the resources.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ScopedResourceSelectorRequirement"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ScopedResourceSelectorRequirement"}, + } +} + +func schema_k8sio_api_core_v1_ScopedResourceSelectorRequirement(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A scoped-resource selector requirement is a selector that contains values, a scope name, and an operator that relates the scope name and values.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "scopeName": { + SchemaProps: spec.SchemaProps{ + Description: "The name of the scope that the selector applies to.", + Type: []string{"string"}, + Format: "", + }, + }, + "operator": { + SchemaProps: spec.SchemaProps{ + Description: "Represents a scope's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist.", + Type: []string{"string"}, + Format: "", + }, + }, + "values": { + SchemaProps: spec.SchemaProps{ + Description: "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"scopeName", "operator"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_SeccompProfile(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type indicates which kind of seccomp profile will be applied. Valid options are:\n\nLocalhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied.", + Type: []string{"string"}, + Format: "", + }, + }, + "localhostProfile": { + SchemaProps: spec.SchemaProps{ + Description: "localhostProfile indicates a profile defined in a file on the node should be used. The profile must be preconfigured on the node to work. Must be a descending path, relative to the kubelet's configured seccomp profile location. Must only be set if type is \"Localhost\".", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type"}, + }, + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-unions": []interface{}{ + map[string]interface{}{ + "discriminator": "type", + "fields-to-discriminateBy": map[string]interface{}{ + "localhostProfile": "LocalhostProfile", + }, + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_Secret(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "immutable": { + SchemaProps: spec.SchemaProps{ + Description: "Immutable, if set to true, ensures that data stored in the Secret cannot be updated (only object metadata can be modified). If not set to true, the field can be modified at any time. Defaulted to nil. This is a beta field enabled by ImmutableEphemeralVolumes feature gate.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "data": { + SchemaProps: spec.SchemaProps{ + Description: "Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "byte", + }, + }, + }, + }, + }, + "stringData": { + SchemaProps: spec.SchemaProps{ + Description: "stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Used to facilitate programmatic handling of secret data.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_SecretEnvSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SecretEnvSource selects a Secret to populate the environment variables with.\n\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + Type: []string{"string"}, + Format: "", + }, + }, + "optional": { + SchemaProps: spec.SchemaProps{ + Description: "Specify whether the Secret must be defined", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_SecretKeySelector(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SecretKeySelector selects a key of a Secret.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + Type: []string{"string"}, + Format: "", + }, + }, + "key": { + SchemaProps: spec.SchemaProps{ + Description: "The key of the secret to select from. Must be a valid secret key.", + Type: []string{"string"}, + Format: "", + }, + }, + "optional": { + SchemaProps: spec.SchemaProps{ + Description: "Specify whether the Secret or its key must be defined", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"key"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_SecretList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SecretList is a list of Secret.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Secret"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.Secret", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_SecretProjection(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Adapts a secret into a projected volume.\n\nThe contents of the target Secret's Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + Type: []string{"string"}, + Format: "", + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.KeyToPath"), + }, + }, + }, + }, + }, + "optional": { + SchemaProps: spec.SchemaProps{ + Description: "Specify whether the Secret or its key must be defined", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.KeyToPath"}, + } +} + +func schema_k8sio_api_core_v1_SecretReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is unique within a namespace to reference a secret resource.", + Type: []string{"string"}, + Format: "", + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace defines the space within which the secret name must be unique.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_SecretVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Adapts a Secret into a volume.\n\nThe contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "secretName": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + Type: []string{"string"}, + Format: "", + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.KeyToPath"), + }, + }, + }, + }, + }, + "defaultMode": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "optional": { + SchemaProps: spec.SchemaProps{ + Description: "Specify whether the Secret or its keys must be defined", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.KeyToPath"}, + } +} + +func schema_k8sio_api_core_v1_SecurityContext(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext. When both are set, the values in SecurityContext take precedence.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "capabilities": { + SchemaProps: spec.SchemaProps{ + Description: "The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.", + Ref: ref("k8s.io/api/core/v1.Capabilities"), + }, + }, + "privileged": { + SchemaProps: spec.SchemaProps{ + Description: "Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "seLinuxOptions": { + SchemaProps: spec.SchemaProps{ + Description: "The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + Ref: ref("k8s.io/api/core/v1.SELinuxOptions"), + }, + }, + "windowsOptions": { + SchemaProps: spec.SchemaProps{ + Description: "The Windows specific settings applied to all containers. If unspecified, the options from the PodSecurityContext will be used. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + Ref: ref("k8s.io/api/core/v1.WindowsSecurityContextOptions"), + }, + }, + "runAsUser": { + SchemaProps: spec.SchemaProps{ + Description: "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "runAsGroup": { + SchemaProps: spec.SchemaProps{ + Description: "The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "runAsNonRoot": { + SchemaProps: spec.SchemaProps{ + Description: "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "readOnlyRootFilesystem": { + SchemaProps: spec.SchemaProps{ + Description: "Whether this container has a read-only root filesystem. Default is false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "allowPrivilegeEscalation": { + SchemaProps: spec.SchemaProps{ + Description: "AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN", + Type: []string{"boolean"}, + Format: "", + }, + }, + "procMount": { + SchemaProps: spec.SchemaProps{ + Description: "procMount denotes the type of proc mount to use for the containers. The default is DefaultProcMount which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled.", + Type: []string{"string"}, + Format: "", + }, + }, + "seccompProfile": { + SchemaProps: spec.SchemaProps{ + Description: "The seccomp options to use by this container. If seccomp options are provided at both the pod & container level, the container options override the pod options.", + Ref: ref("k8s.io/api/core/v1.SeccompProfile"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.Capabilities", "k8s.io/api/core/v1.SELinuxOptions", "k8s.io/api/core/v1.SeccompProfile", "k8s.io/api/core/v1.WindowsSecurityContextOptions"}, + } +} + +func schema_k8sio_api_core_v1_SerializedReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SerializedReference is a reference to serialized object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "reference": { + SchemaProps: spec.SchemaProps{ + Description: "The reference to an object in the system.", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ObjectReference"}, + } +} + +func schema_k8sio_api_core_v1_Service(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.ServiceSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Most recently observed status of the service. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/core/v1.ServiceStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ServiceSpec", "k8s.io/api/core/v1.ServiceStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_ServiceAccount(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "secrets": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + }, + }, + }, + "imagePullSecrets": { + SchemaProps: spec.SchemaProps{ + Description: "ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), + }, + }, + }, + }, + }, + "automountServiceAccountToken": { + SchemaProps: spec.SchemaProps{ + Description: "AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted. Can be overridden at the pod level.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_core_v1_ServiceAccountList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceAccountList is a list of ServiceAccount objects", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ServiceAccount"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ServiceAccount", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_ServiceAccountTokenProjection(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceAccountTokenProjection represents a projected service account token volume. This projection can be used to insert a service account token into the pods runtime filesystem for use against APIs (Kubernetes API Server or otherwise).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "audience": { + SchemaProps: spec.SchemaProps{ + Description: "Audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver.", + Type: []string{"string"}, + Format: "", + }, + }, + "expirationSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "ExpirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Path is the path relative to the mount point of the file to project the token into.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"path"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ServiceList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceList holds a list of services.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of services", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Service"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.Service", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_core_v1_ServicePort(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServicePort contains information on service's port.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. When considering the endpoints for a Service, this must match the 'name' field in the EndpointPort. Optional if only one ServicePort is defined on this service.", + Type: []string{"string"}, + Format: "", + }, + }, + "protocol": { + SchemaProps: spec.SchemaProps{ + Description: "The IP protocol for this port. Supports \"TCP\", \"UDP\", and \"SCTP\". Default is TCP.", + Type: []string{"string"}, + Format: "", + }, + }, + "appProtocol": { + SchemaProps: spec.SchemaProps{ + Description: "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol. This is a beta field that is guarded by the ServiceAppProtocol feature gate and enabled by default.", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "The port that will be exposed by this service.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "targetPort": { + SchemaProps: spec.SchemaProps{ + Description: "Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + "nodePort": { + SchemaProps: spec.SchemaProps{ + Description: "The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"port"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_core_v1_ServiceProxyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceProxyOptions is the query options to a Service's proxy call.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_ServiceSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceSpec describes the attributes that a user creates on a service.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ports": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "port", + "protocol", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "port", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.ServicePort"), + }, + }, + }, + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "clusterIP": { + SchemaProps: spec.SchemaProps{ + Description: "clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are \"None\", empty string (\"\"), or a valid IP address. \"None\" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", + Type: []string{"string"}, + Format: "", + }, + }, + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ExternalName\" maps to the specified externalName. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types", + Type: []string{"string"}, + Format: "", + }, + }, + "externalIPs": { + SchemaProps: spec.SchemaProps{ + Description: "externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "sessionAffinity": { + SchemaProps: spec.SchemaProps{ + Description: "Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", + Type: []string{"string"}, + Format: "", + }, + }, + "loadBalancerIP": { + SchemaProps: spec.SchemaProps{ + Description: "Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.", + Type: []string{"string"}, + Format: "", + }, + }, + "loadBalancerSourceRanges": { + SchemaProps: spec.SchemaProps{ + Description: "If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "externalName": { + SchemaProps: spec.SchemaProps{ + Description: "externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires Type to be ExternalName.", + Type: []string{"string"}, + Format: "", + }, + }, + "externalTrafficPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. \"Local\" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. \"Cluster\" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.", + Type: []string{"string"}, + Format: "", + }, + }, + "healthCheckNodePort": { + SchemaProps: spec.SchemaProps{ + Description: "healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "publishNotReadyAddresses": { + SchemaProps: spec.SchemaProps{ + Description: "publishNotReadyAddresses indicates that any agent which deals with endpoints for this Service should disregard any indications of ready/not-ready. The primary use case for setting this field is for a StatefulSet's Headless Service to propagate SRV DNS records for its Pods for the purpose of peer discovery. The Kubernetes controllers that generate Endpoints and EndpointSlice resources for Services interpret this to mean that all endpoints are considered \"ready\" even if the Pods themselves are not. Agents which consume only Kubernetes generated endpoints through the Endpoints or EndpointSlice resources can safely assume this behavior.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "sessionAffinityConfig": { + SchemaProps: spec.SchemaProps{ + Description: "sessionAffinityConfig contains the configurations of session affinity.", + Ref: ref("k8s.io/api/core/v1.SessionAffinityConfig"), + }, + }, + "ipFamily": { + SchemaProps: spec.SchemaProps{ + Description: "ipFamily specifies whether this Service has a preference for a particular IP family (e.g. IPv4 vs. IPv6) when the IPv6DualStack feature gate is enabled. In a dual-stack cluster, you can specify ipFamily when creating a ClusterIP Service to determine whether the controller will allocate an IPv4 or IPv6 IP for it, and you can specify ipFamily when creating a headless Service to determine whether it will have IPv4 or IPv6 Endpoints. In either case, if you do not specify an ipFamily explicitly, it will default to the cluster's primary IP family. This field is part of an alpha feature, and you should not make any assumptions about its semantics other than those described above. In particular, you should not assume that it can (or cannot) be changed after creation time; that it can only have the values \"IPv4\" and \"IPv6\"; or that its current value on a given Service correctly reflects the current state of that Service. (For ClusterIP Services, look at clusterIP to see if the Service is IPv4 or IPv6. For headless Services, look at the endpoints, which may be dual-stack in the future. For ExternalName Services, ipFamily has no meaning, but it may be set to an irrelevant value anyway.)", + Type: []string{"string"}, + Format: "", + }, + }, + "topologyKeys": { + SchemaProps: spec.SchemaProps{ + Description: "topologyKeys is a preference-order list of topology keys which implementations of services should use to preferentially sort endpoints when accessing this Service, it can not be used at the same time as externalTrafficPolicy=Local. Topology keys must be valid label keys and at most 16 keys may be specified. Endpoints are chosen based on the first topology key with available backends. If this field is specified and all entries have no backends that match the topology of the client, the service has no backends for that client and connections should fail. The special value \"*\" may be used to mean \"any topology\". This catch-all value, if used, only makes sense as the last value in the list. If this is not specified or empty, no topology constraints will be applied.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ServicePort", "k8s.io/api/core/v1.SessionAffinityConfig"}, + } +} + +func schema_k8sio_api_core_v1_ServiceStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceStatus represents the current status of a service.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "loadBalancer": { + SchemaProps: spec.SchemaProps{ + Description: "LoadBalancer contains the current status of the load-balancer, if one is present.", + Ref: ref("k8s.io/api/core/v1.LoadBalancerStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LoadBalancerStatus"}, + } +} + +func schema_k8sio_api_core_v1_SessionAffinityConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SessionAffinityConfig represents the configurations of session affinity.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "clientIP": { + SchemaProps: spec.SchemaProps{ + Description: "clientIP contains the configurations of Client IP based session affinity.", + Ref: ref("k8s.io/api/core/v1.ClientIPConfig"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ClientIPConfig"}, + } +} + +func schema_k8sio_api_core_v1_StorageOSPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a StorageOS persistent volume resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "volumeName": { + SchemaProps: spec.SchemaProps{ + Description: "VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.", + Type: []string{"string"}, + Format: "", + }, + }, + "volumeNamespace": { + SchemaProps: spec.SchemaProps{ + Description: "VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ObjectReference"}, + } +} + +func schema_k8sio_api_core_v1_StorageOSVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a StorageOS persistent volume resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "volumeName": { + SchemaProps: spec.SchemaProps{ + Description: "VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.", + Type: []string{"string"}, + Format: "", + }, + }, + "volumeNamespace": { + SchemaProps: spec.SchemaProps{ + Description: "VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "secretRef": { + SchemaProps: spec.SchemaProps{ + Description: "SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.", + Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LocalObjectReference"}, + } +} + +func schema_k8sio_api_core_v1_Sysctl(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Sysctl defines a kernel parameter to be set", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of a property to set", + Type: []string{"string"}, + Format: "", + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Description: "Value of a property to set", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name", "value"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_TCPSocketAction(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TCPSocketAction describes an action based on opening a socket", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "port": { + SchemaProps: spec.SchemaProps{ + Description: "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + "host": { + SchemaProps: spec.SchemaProps{ + Description: "Optional: Host name to connect to, defaults to the pod IP.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"port"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_core_v1_Taint(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "The node this Taint is attached to has the \"effect\" on any pod that does not tolerate the Taint.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "key": { + SchemaProps: spec.SchemaProps{ + Description: "Required. The taint key to be applied to a node.", + Type: []string{"string"}, + Format: "", + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Description: "The taint value corresponding to the taint key.", + Type: []string{"string"}, + Format: "", + }, + }, + "effect": { + SchemaProps: spec.SchemaProps{ + Description: "Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.", + Type: []string{"string"}, + Format: "", + }, + }, + "timeAdded": { + SchemaProps: spec.SchemaProps{ + Description: "TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + }, + Required: []string{"key", "effect"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_core_v1_Toleration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator .", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "key": { + SchemaProps: spec.SchemaProps{ + Description: "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + Type: []string{"string"}, + Format: "", + }, + }, + "operator": { + SchemaProps: spec.SchemaProps{ + Description: "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + Type: []string{"string"}, + Format: "", + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Description: "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + Type: []string{"string"}, + Format: "", + }, + }, + "effect": { + SchemaProps: spec.SchemaProps{ + Description: "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + Type: []string{"string"}, + Format: "", + }, + }, + "tolerationSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_core_v1_TopologySelectorLabelRequirement(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A topology selector requirement is a selector that matches given label. This is an alpha feature and may change in the future.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "key": { + SchemaProps: spec.SchemaProps{ + Description: "The label key that the selector applies to.", + Type: []string{"string"}, + Format: "", + }, + }, + "values": { + SchemaProps: spec.SchemaProps{ + Description: "An array of string values. One value must match the label to be selected. Each entry in Values is ORed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"key", "values"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_TopologySelectorTerm(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A topology selector term represents the result of label queries. A null or empty topology selector term matches no objects. The requirements of them are ANDed. It provides a subset of functionality as NodeSelectorTerm. This is an alpha feature and may change in the future.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "matchLabelExpressions": { + SchemaProps: spec.SchemaProps{ + Description: "A list of topology selector requirements by labels.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.TopologySelectorLabelRequirement"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.TopologySelectorLabelRequirement"}, + } +} + +func schema_k8sio_api_core_v1_TopologySpreadConstraint(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "maxSkew": { + SchemaProps: spec.SchemaProps{ + Description: "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "topologyKey": { + SchemaProps: spec.SchemaProps{ + Description: "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + Type: []string{"string"}, + Format: "", + }, + }, + "whenUnsatisfiable": { + SchemaProps: spec.SchemaProps{ + Description: "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assigment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + Type: []string{"string"}, + Format: "", + }, + }, + "labelSelector": { + SchemaProps: spec.SchemaProps{ + Description: "LabelSelector is used to find matching pods. Pods that match this label selector are counted to determine the number of pods in their corresponding topology domain.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + }, + Required: []string{"maxSkew", "topologyKey", "whenUnsatisfiable"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_core_v1_TypedLocalObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "apiGroup": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + Type: []string{"string"}, + Format: "", + }, + }, + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is the type of resource being referenced", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the name of resource being referenced", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"kind", "name"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_Volume(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Volume represents a named volume in a pod that may be accessed by any container in the pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + Type: []string{"string"}, + Format: "", + }, + }, + "hostPath": { + SchemaProps: spec.SchemaProps{ + Description: "HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", + Ref: ref("k8s.io/api/core/v1.HostPathVolumeSource"), + }, + }, + "emptyDir": { + SchemaProps: spec.SchemaProps{ + Description: "EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir", + Ref: ref("k8s.io/api/core/v1.EmptyDirVolumeSource"), + }, + }, + "gcePersistentDisk": { + SchemaProps: spec.SchemaProps{ + Description: "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", + Ref: ref("k8s.io/api/core/v1.GCEPersistentDiskVolumeSource"), + }, + }, + "awsElasticBlockStore": { + SchemaProps: spec.SchemaProps{ + Description: "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", + Ref: ref("k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource"), + }, + }, + "gitRepo": { + SchemaProps: spec.SchemaProps{ + Description: "GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.", + Ref: ref("k8s.io/api/core/v1.GitRepoVolumeSource"), + }, + }, + "secret": { + SchemaProps: spec.SchemaProps{ + Description: "Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + Ref: ref("k8s.io/api/core/v1.SecretVolumeSource"), + }, + }, + "nfs": { + SchemaProps: spec.SchemaProps{ + Description: "NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", + Ref: ref("k8s.io/api/core/v1.NFSVolumeSource"), + }, + }, + "iscsi": { + SchemaProps: spec.SchemaProps{ + Description: "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md", + Ref: ref("k8s.io/api/core/v1.ISCSIVolumeSource"), + }, + }, + "glusterfs": { + SchemaProps: spec.SchemaProps{ + Description: "Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md", + Ref: ref("k8s.io/api/core/v1.GlusterfsVolumeSource"), + }, + }, + "persistentVolumeClaim": { + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaimVolumeSource"), + }, + }, + "rbd": { + SchemaProps: spec.SchemaProps{ + Description: "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md", + Ref: ref("k8s.io/api/core/v1.RBDVolumeSource"), + }, + }, + "flexVolume": { + SchemaProps: spec.SchemaProps{ + Description: "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", + Ref: ref("k8s.io/api/core/v1.FlexVolumeSource"), + }, + }, + "cinder": { + SchemaProps: spec.SchemaProps{ + Description: "Cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + Ref: ref("k8s.io/api/core/v1.CinderVolumeSource"), + }, + }, + "cephfs": { + SchemaProps: spec.SchemaProps{ + Description: "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", + Ref: ref("k8s.io/api/core/v1.CephFSVolumeSource"), + }, + }, + "flocker": { + SchemaProps: spec.SchemaProps{ + Description: "Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running", + Ref: ref("k8s.io/api/core/v1.FlockerVolumeSource"), + }, + }, + "downwardAPI": { + SchemaProps: spec.SchemaProps{ + Description: "DownwardAPI represents downward API about the pod that should populate this volume", + Ref: ref("k8s.io/api/core/v1.DownwardAPIVolumeSource"), + }, + }, + "fc": { + SchemaProps: spec.SchemaProps{ + Description: "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", + Ref: ref("k8s.io/api/core/v1.FCVolumeSource"), + }, + }, + "azureFile": { + SchemaProps: spec.SchemaProps{ + Description: "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", + Ref: ref("k8s.io/api/core/v1.AzureFileVolumeSource"), + }, + }, + "configMap": { + SchemaProps: spec.SchemaProps{ + Description: "ConfigMap represents a configMap that should populate this volume", + Ref: ref("k8s.io/api/core/v1.ConfigMapVolumeSource"), + }, + }, + "vsphereVolume": { + SchemaProps: spec.SchemaProps{ + Description: "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", + Ref: ref("k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource"), + }, + }, + "quobyte": { + SchemaProps: spec.SchemaProps{ + Description: "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", + Ref: ref("k8s.io/api/core/v1.QuobyteVolumeSource"), + }, + }, + "azureDisk": { + SchemaProps: spec.SchemaProps{ + Description: "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", + Ref: ref("k8s.io/api/core/v1.AzureDiskVolumeSource"), + }, + }, + "photonPersistentDisk": { + SchemaProps: spec.SchemaProps{ + Description: "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", + Ref: ref("k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource"), + }, + }, + "projected": { + SchemaProps: spec.SchemaProps{ + Description: "Items for all in one resources secrets, configmaps, and downward API", + Ref: ref("k8s.io/api/core/v1.ProjectedVolumeSource"), + }, + }, + "portworxVolume": { + SchemaProps: spec.SchemaProps{ + Description: "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", + Ref: ref("k8s.io/api/core/v1.PortworxVolumeSource"), + }, + }, + "scaleIO": { + SchemaProps: spec.SchemaProps{ + Description: "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", + Ref: ref("k8s.io/api/core/v1.ScaleIOVolumeSource"), + }, + }, + "storageos": { + SchemaProps: spec.SchemaProps{ + Description: "StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.", + Ref: ref("k8s.io/api/core/v1.StorageOSVolumeSource"), + }, + }, + "csi": { + SchemaProps: spec.SchemaProps{ + Description: "CSI (Container Storage Interface) represents ephemeral storage that is handled by certain external CSI drivers (Beta feature).", + Ref: ref("k8s.io/api/core/v1.CSIVolumeSource"), + }, + }, + "ephemeral": { + SchemaProps: spec.SchemaProps{ + Description: "Ephemeral represents a volume that is handled by a cluster storage driver (Alpha feature). The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts, and deleted when the pod is removed.\n\nUse this if: a) the volume is only needed while the pod runs, b) features of normal volumes like restoring from snapshot or capacity\n tracking are needed,\nc) the storage driver is specified through a storage class, and d) the storage driver supports dynamic volume provisioning through\n a PersistentVolumeClaim (see EphemeralVolumeSource for more\n information on the connection between this volume type\n and PersistentVolumeClaim).\n\nUse PersistentVolumeClaim or one of the vendor-specific APIs for volumes that persist for longer than the lifecycle of an individual pod.\n\nUse CSI for light-weight local ephemeral volumes if the CSI driver is meant to be used that way - see the documentation of the driver for more information.\n\nA pod can use both types of ephemeral volumes and persistent volumes at the same time.", + Ref: ref("k8s.io/api/core/v1.EphemeralVolumeSource"), + }, + }, + }, + Required: []string{"name"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/api/core/v1.AzureDiskVolumeSource", "k8s.io/api/core/v1.AzureFileVolumeSource", "k8s.io/api/core/v1.CSIVolumeSource", "k8s.io/api/core/v1.CephFSVolumeSource", "k8s.io/api/core/v1.CinderVolumeSource", "k8s.io/api/core/v1.ConfigMapVolumeSource", "k8s.io/api/core/v1.DownwardAPIVolumeSource", "k8s.io/api/core/v1.EmptyDirVolumeSource", "k8s.io/api/core/v1.EphemeralVolumeSource", "k8s.io/api/core/v1.FCVolumeSource", "k8s.io/api/core/v1.FlexVolumeSource", "k8s.io/api/core/v1.FlockerVolumeSource", "k8s.io/api/core/v1.GCEPersistentDiskVolumeSource", "k8s.io/api/core/v1.GitRepoVolumeSource", "k8s.io/api/core/v1.GlusterfsVolumeSource", "k8s.io/api/core/v1.HostPathVolumeSource", "k8s.io/api/core/v1.ISCSIVolumeSource", "k8s.io/api/core/v1.NFSVolumeSource", "k8s.io/api/core/v1.PersistentVolumeClaimVolumeSource", "k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource", "k8s.io/api/core/v1.PortworxVolumeSource", "k8s.io/api/core/v1.ProjectedVolumeSource", "k8s.io/api/core/v1.QuobyteVolumeSource", "k8s.io/api/core/v1.RBDVolumeSource", "k8s.io/api/core/v1.ScaleIOVolumeSource", "k8s.io/api/core/v1.SecretVolumeSource", "k8s.io/api/core/v1.StorageOSVolumeSource", "k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource"}, + } +} + +func schema_k8sio_api_core_v1_VolumeDevice(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "volumeDevice describes a mapping of a raw block device within a container.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name must match the name of a persistentVolumeClaim in the pod", + Type: []string{"string"}, + Format: "", + }, + }, + "devicePath": { + SchemaProps: spec.SchemaProps{ + Description: "devicePath is the path inside of the container that the device will be mapped to.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name", "devicePath"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_VolumeMount(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeMount describes a mounting of a Volume within a container.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "This must match the Name of a Volume.", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "mountPath": { + SchemaProps: spec.SchemaProps{ + Description: "Path within the container at which the volume should be mounted. Must not contain ':'.", + Type: []string{"string"}, + Format: "", + }, + }, + "subPath": { + SchemaProps: spec.SchemaProps{ + Description: "Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).", + Type: []string{"string"}, + Format: "", + }, + }, + "mountPropagation": { + SchemaProps: spec.SchemaProps{ + Description: "mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.", + Type: []string{"string"}, + Format: "", + }, + }, + "subPathExpr": { + SchemaProps: spec.SchemaProps{ + Description: "Expanded path within the volume from which the container's volume should be mounted. Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. Defaults to \"\" (volume's root). SubPathExpr and SubPath are mutually exclusive.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name", "mountPath"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_VolumeNodeAffinity(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "required": { + SchemaProps: spec.SchemaProps{ + Description: "Required specifies hard node constraints that must be met.", + Ref: ref("k8s.io/api/core/v1.NodeSelector"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.NodeSelector"}, + } +} + +func schema_k8sio_api_core_v1_VolumeProjection(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Projection that may be projected along with other supported volume types", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "secret": { + SchemaProps: spec.SchemaProps{ + Description: "information about the secret data to project", + Ref: ref("k8s.io/api/core/v1.SecretProjection"), + }, + }, + "downwardAPI": { + SchemaProps: spec.SchemaProps{ + Description: "information about the downwardAPI data to project", + Ref: ref("k8s.io/api/core/v1.DownwardAPIProjection"), + }, + }, + "configMap": { + SchemaProps: spec.SchemaProps{ + Description: "information about the configMap data to project", + Ref: ref("k8s.io/api/core/v1.ConfigMapProjection"), + }, + }, + "serviceAccountToken": { + SchemaProps: spec.SchemaProps{ + Description: "information about the serviceAccountToken data to project", + Ref: ref("k8s.io/api/core/v1.ServiceAccountTokenProjection"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ConfigMapProjection", "k8s.io/api/core/v1.DownwardAPIProjection", "k8s.io/api/core/v1.SecretProjection", "k8s.io/api/core/v1.ServiceAccountTokenProjection"}, + } +} + +func schema_k8sio_api_core_v1_VolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents the source of a volume to mount. Only one of its members may be specified.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "hostPath": { + SchemaProps: spec.SchemaProps{ + Description: "HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", + Ref: ref("k8s.io/api/core/v1.HostPathVolumeSource"), + }, + }, + "emptyDir": { + SchemaProps: spec.SchemaProps{ + Description: "EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir", + Ref: ref("k8s.io/api/core/v1.EmptyDirVolumeSource"), + }, + }, + "gcePersistentDisk": { + SchemaProps: spec.SchemaProps{ + Description: "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", + Ref: ref("k8s.io/api/core/v1.GCEPersistentDiskVolumeSource"), + }, + }, + "awsElasticBlockStore": { + SchemaProps: spec.SchemaProps{ + Description: "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", + Ref: ref("k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource"), + }, + }, + "gitRepo": { + SchemaProps: spec.SchemaProps{ + Description: "GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.", + Ref: ref("k8s.io/api/core/v1.GitRepoVolumeSource"), + }, + }, + "secret": { + SchemaProps: spec.SchemaProps{ + Description: "Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + Ref: ref("k8s.io/api/core/v1.SecretVolumeSource"), + }, + }, + "nfs": { + SchemaProps: spec.SchemaProps{ + Description: "NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", + Ref: ref("k8s.io/api/core/v1.NFSVolumeSource"), + }, + }, + "iscsi": { + SchemaProps: spec.SchemaProps{ + Description: "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md", + Ref: ref("k8s.io/api/core/v1.ISCSIVolumeSource"), + }, + }, + "glusterfs": { + SchemaProps: spec.SchemaProps{ + Description: "Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md", + Ref: ref("k8s.io/api/core/v1.GlusterfsVolumeSource"), + }, + }, + "persistentVolumeClaim": { + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaimVolumeSource"), + }, + }, + "rbd": { + SchemaProps: spec.SchemaProps{ + Description: "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md", + Ref: ref("k8s.io/api/core/v1.RBDVolumeSource"), + }, + }, + "flexVolume": { + SchemaProps: spec.SchemaProps{ + Description: "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", + Ref: ref("k8s.io/api/core/v1.FlexVolumeSource"), + }, + }, + "cinder": { + SchemaProps: spec.SchemaProps{ + Description: "Cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md", + Ref: ref("k8s.io/api/core/v1.CinderVolumeSource"), + }, + }, + "cephfs": { + SchemaProps: spec.SchemaProps{ + Description: "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", + Ref: ref("k8s.io/api/core/v1.CephFSVolumeSource"), + }, + }, + "flocker": { + SchemaProps: spec.SchemaProps{ + Description: "Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running", + Ref: ref("k8s.io/api/core/v1.FlockerVolumeSource"), + }, + }, + "downwardAPI": { + SchemaProps: spec.SchemaProps{ + Description: "DownwardAPI represents downward API about the pod that should populate this volume", + Ref: ref("k8s.io/api/core/v1.DownwardAPIVolumeSource"), + }, + }, + "fc": { + SchemaProps: spec.SchemaProps{ + Description: "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", + Ref: ref("k8s.io/api/core/v1.FCVolumeSource"), + }, + }, + "azureFile": { + SchemaProps: spec.SchemaProps{ + Description: "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", + Ref: ref("k8s.io/api/core/v1.AzureFileVolumeSource"), + }, + }, + "configMap": { + SchemaProps: spec.SchemaProps{ + Description: "ConfigMap represents a configMap that should populate this volume", + Ref: ref("k8s.io/api/core/v1.ConfigMapVolumeSource"), + }, + }, + "vsphereVolume": { + SchemaProps: spec.SchemaProps{ + Description: "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", + Ref: ref("k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource"), + }, + }, + "quobyte": { + SchemaProps: spec.SchemaProps{ + Description: "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", + Ref: ref("k8s.io/api/core/v1.QuobyteVolumeSource"), + }, + }, + "azureDisk": { + SchemaProps: spec.SchemaProps{ + Description: "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", + Ref: ref("k8s.io/api/core/v1.AzureDiskVolumeSource"), + }, + }, + "photonPersistentDisk": { + SchemaProps: spec.SchemaProps{ + Description: "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", + Ref: ref("k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource"), + }, + }, + "projected": { + SchemaProps: spec.SchemaProps{ + Description: "Items for all in one resources secrets, configmaps, and downward API", + Ref: ref("k8s.io/api/core/v1.ProjectedVolumeSource"), + }, + }, + "portworxVolume": { + SchemaProps: spec.SchemaProps{ + Description: "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", + Ref: ref("k8s.io/api/core/v1.PortworxVolumeSource"), + }, + }, + "scaleIO": { + SchemaProps: spec.SchemaProps{ + Description: "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", + Ref: ref("k8s.io/api/core/v1.ScaleIOVolumeSource"), + }, + }, + "storageos": { + SchemaProps: spec.SchemaProps{ + Description: "StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.", + Ref: ref("k8s.io/api/core/v1.StorageOSVolumeSource"), + }, + }, + "csi": { + SchemaProps: spec.SchemaProps{ + Description: "CSI (Container Storage Interface) represents ephemeral storage that is handled by certain external CSI drivers (Beta feature).", + Ref: ref("k8s.io/api/core/v1.CSIVolumeSource"), + }, + }, + "ephemeral": { + SchemaProps: spec.SchemaProps{ + Description: "Ephemeral represents a volume that is handled by a cluster storage driver (Alpha feature). The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts, and deleted when the pod is removed.\n\nUse this if: a) the volume is only needed while the pod runs, b) features of normal volumes like restoring from snapshot or capacity\n tracking are needed,\nc) the storage driver is specified through a storage class, and d) the storage driver supports dynamic volume provisioning through\n a PersistentVolumeClaim (see EphemeralVolumeSource for more\n information on the connection between this volume type\n and PersistentVolumeClaim).\n\nUse PersistentVolumeClaim or one of the vendor-specific APIs for volumes that persist for longer than the lifecycle of an individual pod.\n\nUse CSI for light-weight local ephemeral volumes if the CSI driver is meant to be used that way - see the documentation of the driver for more information.\n\nA pod can use both types of ephemeral volumes and persistent volumes at the same time.", + Ref: ref("k8s.io/api/core/v1.EphemeralVolumeSource"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/api/core/v1.AzureDiskVolumeSource", "k8s.io/api/core/v1.AzureFileVolumeSource", "k8s.io/api/core/v1.CSIVolumeSource", "k8s.io/api/core/v1.CephFSVolumeSource", "k8s.io/api/core/v1.CinderVolumeSource", "k8s.io/api/core/v1.ConfigMapVolumeSource", "k8s.io/api/core/v1.DownwardAPIVolumeSource", "k8s.io/api/core/v1.EmptyDirVolumeSource", "k8s.io/api/core/v1.EphemeralVolumeSource", "k8s.io/api/core/v1.FCVolumeSource", "k8s.io/api/core/v1.FlexVolumeSource", "k8s.io/api/core/v1.FlockerVolumeSource", "k8s.io/api/core/v1.GCEPersistentDiskVolumeSource", "k8s.io/api/core/v1.GitRepoVolumeSource", "k8s.io/api/core/v1.GlusterfsVolumeSource", "k8s.io/api/core/v1.HostPathVolumeSource", "k8s.io/api/core/v1.ISCSIVolumeSource", "k8s.io/api/core/v1.NFSVolumeSource", "k8s.io/api/core/v1.PersistentVolumeClaimVolumeSource", "k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource", "k8s.io/api/core/v1.PortworxVolumeSource", "k8s.io/api/core/v1.ProjectedVolumeSource", "k8s.io/api/core/v1.QuobyteVolumeSource", "k8s.io/api/core/v1.RBDVolumeSource", "k8s.io/api/core/v1.ScaleIOVolumeSource", "k8s.io/api/core/v1.SecretVolumeSource", "k8s.io/api/core/v1.StorageOSVolumeSource", "k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource"}, + } +} + +func schema_k8sio_api_core_v1_VsphereVirtualDiskVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Represents a vSphere volume resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "volumePath": { + SchemaProps: spec.SchemaProps{ + Description: "Path that identifies vSphere volume vmdk", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", + Type: []string{"string"}, + Format: "", + }, + }, + "storagePolicyName": { + SchemaProps: spec.SchemaProps{ + Description: "Storage Policy Based Management (SPBM) profile name.", + Type: []string{"string"}, + Format: "", + }, + }, + "storagePolicyID": { + SchemaProps: spec.SchemaProps{ + Description: "Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"volumePath"}, + }, + }, + } +} + +func schema_k8sio_api_core_v1_WeightedPodAffinityTerm(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "weight": { + SchemaProps: spec.SchemaProps{ + Description: "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "podAffinityTerm": { + SchemaProps: spec.SchemaProps{ + Description: "Required. A pod affinity term, associated with the corresponding weight.", + Ref: ref("k8s.io/api/core/v1.PodAffinityTerm"), + }, + }, + }, + Required: []string{"weight", "podAffinityTerm"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodAffinityTerm"}, + } +} + +func schema_k8sio_api_core_v1_WindowsSecurityContextOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "WindowsSecurityContextOptions contain Windows-specific options and credentials.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "gmsaCredentialSpecName": { + SchemaProps: spec.SchemaProps{ + Description: "GMSACredentialSpecName is the name of the GMSA credential spec to use.", + Type: []string{"string"}, + Format: "", + }, + }, + "gmsaCredentialSpec": { + SchemaProps: spec.SchemaProps{ + Description: "GMSACredentialSpec is where the GMSA admission webhook (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the GMSA credential spec named by the GMSACredentialSpecName field.", + Type: []string{"string"}, + Format: "", + }, + }, + "runAsUserName": { + SchemaProps: spec.SchemaProps{ + Description: "The UserName in Windows to run the entrypoint of the container process. Defaults to the user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_discovery_v1alpha1_Endpoint(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Endpoint represents a single logical \"backend\" implementing a service.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "addresses": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "set", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "addresses of this endpoint. The contents of this field are interpreted according to the corresponding EndpointSlice addressType field. Consumers must handle different types of addresses in the context of their own capabilities. This must contain at least one address but no more than 100.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "conditions": { + SchemaProps: spec.SchemaProps{ + Description: "conditions contains information about the current status of the endpoint.", + Ref: ref("k8s.io/api/discovery/v1alpha1.EndpointConditions"), + }, + }, + "hostname": { + SchemaProps: spec.SchemaProps{ + Description: "hostname of this endpoint. This field may be used by consumers of endpoints to distinguish endpoints from each other (e.g. in DNS names). Multiple endpoints which use the same hostname should be considered fungible (e.g. multiple A values in DNS). Must pass DNS Label (RFC 1123) validation.", + Type: []string{"string"}, + Format: "", + }, + }, + "targetRef": { + SchemaProps: spec.SchemaProps{ + Description: "targetRef is a reference to a Kubernetes object that represents this endpoint.", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + "topology": { + SchemaProps: spec.SchemaProps{ + Description: "topology contains arbitrary topology information associated with the endpoint. These key/value pairs must conform with the label format. https://kubernetes.io/docs/concepts/overview/working-with-objects/labels Topology may include a maximum of 16 key/value pairs. This includes, but is not limited to the following well known keys: * kubernetes.io/hostname: the value indicates the hostname of the node\n where the endpoint is located. This should match the corresponding\n node label.\n* topology.kubernetes.io/zone: the value indicates the zone where the\n endpoint is located. This should match the corresponding node label.\n* topology.kubernetes.io/region: the value indicates the region where the\n endpoint is located. This should match the corresponding node label.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"addresses"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ObjectReference", "k8s.io/api/discovery/v1alpha1.EndpointConditions"}, + } +} + +func schema_k8sio_api_discovery_v1alpha1_EndpointConditions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointConditions represents the current condition of an endpoint.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ready": { + SchemaProps: spec.SchemaProps{ + Description: "ready indicates that this endpoint is prepared to receive traffic, according to whatever system is managing the endpoint. A nil value indicates an unknown state. In most cases consumers should interpret this unknown state as ready.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_discovery_v1alpha1_EndpointPort(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointPort represents a Port used by an EndpointSlice", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "The name of this port. All ports in an EndpointSlice must have a unique name. If the EndpointSlice is dervied from a Kubernetes service, this corresponds to the Service.ports[].name. Name must either be an empty string or pass DNS_LABEL validation: * must be no more than 63 characters long. * must consist of lower case alphanumeric characters or '-'. * must start and end with an alphanumeric character. Default is empty string.", + Type: []string{"string"}, + Format: "", + }, + }, + "protocol": { + SchemaProps: spec.SchemaProps{ + Description: "The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "The port number of the endpoint. If this is not specified, ports are not restricted and must be interpreted in the context of the specific consumer.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "appProtocol": { + SchemaProps: spec.SchemaProps{ + Description: "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names. Default is empty string.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_discovery_v1alpha1_EndpointSlice(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointSlice represents a subset of the endpoints that implement a service. For a given service there may be multiple EndpointSlice objects, selected by labels, which must be joined to produce the full set of endpoints.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "addressType": { + SchemaProps: spec.SchemaProps{ + Description: "addressType specifies the type of address carried by this EndpointSlice. All addresses in this slice must be the same type. This field is immutable after creation. The following address types are currently supported: * IPv4: Represents an IPv4 Address. * IPv6: Represents an IPv6 Address. * FQDN: Represents a Fully Qualified Domain Name.", + Type: []string{"string"}, + Format: "", + }, + }, + "endpoints": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "endpoints is a list of unique endpoints in this slice. Each slice may include a maximum of 1000 endpoints.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/discovery/v1alpha1.Endpoint"), + }, + }, + }, + }, + }, + "ports": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "ports specifies the list of network ports exposed by each endpoint in this slice. Each port must have a unique name. When ports is empty, it indicates that there are no defined ports. When a port is defined with a nil port value, it indicates \"all ports\". Each slice may include a maximum of 100 ports.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/discovery/v1alpha1.EndpointPort"), + }, + }, + }, + }, + }, + }, + Required: []string{"addressType", "endpoints"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/discovery/v1alpha1.Endpoint", "k8s.io/api/discovery/v1alpha1.EndpointPort", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_discovery_v1alpha1_EndpointSliceList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointSliceList represents a list of endpoint slices", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of endpoint slices", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/discovery/v1alpha1.EndpointSlice"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/discovery/v1alpha1.EndpointSlice", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_discovery_v1beta1_Endpoint(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Endpoint represents a single logical \"backend\" implementing a service.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "addresses": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "set", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "addresses of this endpoint. The contents of this field are interpreted according to the corresponding EndpointSlice addressType field. Consumers must handle different types of addresses in the context of their own capabilities. This must contain at least one address but no more than 100.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "conditions": { + SchemaProps: spec.SchemaProps{ + Description: "conditions contains information about the current status of the endpoint.", + Ref: ref("k8s.io/api/discovery/v1beta1.EndpointConditions"), + }, + }, + "hostname": { + SchemaProps: spec.SchemaProps{ + Description: "hostname of this endpoint. This field may be used by consumers of endpoints to distinguish endpoints from each other (e.g. in DNS names). Multiple endpoints which use the same hostname should be considered fungible (e.g. multiple A values in DNS). Must pass DNS Label (RFC 1123) validation.", + Type: []string{"string"}, + Format: "", + }, + }, + "targetRef": { + SchemaProps: spec.SchemaProps{ + Description: "targetRef is a reference to a Kubernetes object that represents this endpoint.", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + "topology": { + SchemaProps: spec.SchemaProps{ + Description: "topology contains arbitrary topology information associated with the endpoint. These key/value pairs must conform with the label format. https://kubernetes.io/docs/concepts/overview/working-with-objects/labels Topology may include a maximum of 16 key/value pairs. This includes, but is not limited to the following well known keys: * kubernetes.io/hostname: the value indicates the hostname of the node\n where the endpoint is located. This should match the corresponding\n node label.\n* topology.kubernetes.io/zone: the value indicates the zone where the\n endpoint is located. This should match the corresponding node label.\n* topology.kubernetes.io/region: the value indicates the region where the\n endpoint is located. This should match the corresponding node label.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"addresses"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ObjectReference", "k8s.io/api/discovery/v1beta1.EndpointConditions"}, + } +} + +func schema_k8sio_api_discovery_v1beta1_EndpointConditions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointConditions represents the current condition of an endpoint.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ready": { + SchemaProps: spec.SchemaProps{ + Description: "ready indicates that this endpoint is prepared to receive traffic, according to whatever system is managing the endpoint. A nil value indicates an unknown state. In most cases consumers should interpret this unknown state as ready.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_discovery_v1beta1_EndpointPort(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointPort represents a Port used by an EndpointSlice", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "The name of this port. All ports in an EndpointSlice must have a unique name. If the EndpointSlice is dervied from a Kubernetes service, this corresponds to the Service.ports[].name. Name must either be an empty string or pass DNS_LABEL validation: * must be no more than 63 characters long. * must consist of lower case alphanumeric characters or '-'. * must start and end with an alphanumeric character. Default is empty string.", + Type: []string{"string"}, + Format: "", + }, + }, + "protocol": { + SchemaProps: spec.SchemaProps{ + Description: "The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "The port number of the endpoint. If this is not specified, ports are not restricted and must be interpreted in the context of the specific consumer.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "appProtocol": { + SchemaProps: spec.SchemaProps{ + Description: "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_discovery_v1beta1_EndpointSlice(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointSlice represents a subset of the endpoints that implement a service. For a given service there may be multiple EndpointSlice objects, selected by labels, which must be joined to produce the full set of endpoints.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "addressType": { + SchemaProps: spec.SchemaProps{ + Description: "addressType specifies the type of address carried by this EndpointSlice. All addresses in this slice must be the same type. This field is immutable after creation. The following address types are currently supported: * IPv4: Represents an IPv4 Address. * IPv6: Represents an IPv6 Address. * FQDN: Represents a Fully Qualified Domain Name.", + Type: []string{"string"}, + Format: "", + }, + }, + "endpoints": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "endpoints is a list of unique endpoints in this slice. Each slice may include a maximum of 1000 endpoints.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/discovery/v1beta1.Endpoint"), + }, + }, + }, + }, + }, + "ports": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "ports specifies the list of network ports exposed by each endpoint in this slice. Each port must have a unique name. When ports is empty, it indicates that there are no defined ports. When a port is defined with a nil port value, it indicates \"all ports\". Each slice may include a maximum of 100 ports.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/discovery/v1beta1.EndpointPort"), + }, + }, + }, + }, + }, + }, + Required: []string{"addressType", "endpoints"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/discovery/v1beta1.Endpoint", "k8s.io/api/discovery/v1beta1.EndpointPort", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_discovery_v1beta1_EndpointSliceList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointSliceList represents a list of endpoint slices", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of endpoint slices", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/discovery/v1beta1.EndpointSlice"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/discovery/v1beta1.EndpointSlice", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_events_v1_Event(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Event is a report of an event somewhere in the cluster. It generally denotes some state change in the system.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "eventTime": { + SchemaProps: spec.SchemaProps{ + Description: "eventTime is the time when this Event was first observed. It is required.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + "series": { + SchemaProps: spec.SchemaProps{ + Description: "series is data about the Event series this event represents or nil if it's a singleton Event.", + Ref: ref("k8s.io/api/events/v1.EventSeries"), + }, + }, + "reportingController": { + SchemaProps: spec.SchemaProps{ + Description: "reportingController is the name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`. This field cannot be empty for new Events.", + Type: []string{"string"}, + Format: "", + }, + }, + "reportingInstance": { + SchemaProps: spec.SchemaProps{ + Description: "reportingInstance is the ID of the controller instance, e.g. `kubelet-xyzf`. This field cannot be empty for new Events and it can have at most 128 characters.", + Type: []string{"string"}, + Format: "", + }, + }, + "action": { + SchemaProps: spec.SchemaProps{ + Description: "action is what action was taken/failed regarding to the regarding object. It is machine-readable. This field can have at most 128 characters.", + Type: []string{"string"}, + Format: "", + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "reason is why the action was taken. It is human-readable. This field can have at most 128 characters.", + Type: []string{"string"}, + Format: "", + }, + }, + "regarding": { + SchemaProps: spec.SchemaProps{ + Description: "regarding contains the object this Event is about. In most cases it's an Object reporting controller implements, e.g. ReplicaSetController implements ReplicaSets and this event is emitted because it acts on some changes in a ReplicaSet object.", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + "related": { + SchemaProps: spec.SchemaProps{ + Description: "related is the optional secondary object for more complex actions. E.g. when regarding object triggers a creation or deletion of related object.", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + "note": { + SchemaProps: spec.SchemaProps{ + Description: "note is a human-readable description of the status of this operation. Maximal length of the note is 1kB, but libraries should be prepared to handle values up to 64kB.", + Type: []string{"string"}, + Format: "", + }, + }, + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is the type of this event (Normal, Warning), new types could be added in the future. It is machine-readable.", + Type: []string{"string"}, + Format: "", + }, + }, + "deprecatedSource": { + SchemaProps: spec.SchemaProps{ + Description: "deprecatedSource is the deprecated field assuring backward compatibility with core.v1 Event type.", + Ref: ref("k8s.io/api/core/v1.EventSource"), + }, + }, + "deprecatedFirstTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "deprecatedFirstTimestamp is the deprecated field assuring backward compatibility with core.v1 Event type.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "deprecatedLastTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "deprecatedLastTimestamp is the deprecated field assuring backward compatibility with core.v1 Event type.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "deprecatedCount": { + SchemaProps: spec.SchemaProps{ + Description: "deprecatedCount is the deprecated field assuring backward compatibility with core.v1 Event type.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"eventTime"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.EventSource", "k8s.io/api/core/v1.ObjectReference", "k8s.io/api/events/v1.EventSeries", "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_events_v1_EventList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EventList is a list of Event objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is a list of schema objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/events/v1.Event"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/events/v1.Event", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_events_v1_EventSeries(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time. How often to update the EventSeries is up to the event reporters. The default event reporter in \"k8s.io/client-go/tools/events/event_broadcaster.go\" shows how this struct is updated on heartbeats and can guide customized reporter implementations.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "count": { + SchemaProps: spec.SchemaProps{ + Description: "count is the number of occurrences in this series up to the last heartbeat time.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "lastObservedTime": { + SchemaProps: spec.SchemaProps{ + Description: "lastObservedTime is the time when last Event from the series was seen before last heartbeat.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + }, + Required: []string{"count", "lastObservedTime"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"}, + } +} + +func schema_k8sio_api_events_v1beta1_Event(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Event is a report of an event somewhere in the cluster. It generally denotes some state change in the system.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "eventTime": { + SchemaProps: spec.SchemaProps{ + Description: "eventTime is the time when this Event was first observed. It is required.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + "series": { + SchemaProps: spec.SchemaProps{ + Description: "series is data about the Event series this event represents or nil if it's a singleton Event.", + Ref: ref("k8s.io/api/events/v1beta1.EventSeries"), + }, + }, + "reportingController": { + SchemaProps: spec.SchemaProps{ + Description: "reportingController is the name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`. This field cannot be empty for new Events.", + Type: []string{"string"}, + Format: "", + }, + }, + "reportingInstance": { + SchemaProps: spec.SchemaProps{ + Description: "reportingInstance is the ID of the controller instance, e.g. `kubelet-xyzf`. This field cannot be empty for new Events and it can have at most 128 characters.", + Type: []string{"string"}, + Format: "", + }, + }, + "action": { + SchemaProps: spec.SchemaProps{ + Description: "action is what action was taken/failed regarding to the regarding object. It is machine-readable. This field can have at most 128 characters.", + Type: []string{"string"}, + Format: "", + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "reason is why the action was taken. It is human-readable. This field can have at most 128 characters.", + Type: []string{"string"}, + Format: "", + }, + }, + "regarding": { + SchemaProps: spec.SchemaProps{ + Description: "regarding contains the object this Event is about. In most cases it's an Object reporting controller implements, e.g. ReplicaSetController implements ReplicaSets and this event is emitted because it acts on some changes in a ReplicaSet object.", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + "related": { + SchemaProps: spec.SchemaProps{ + Description: "related is the optional secondary object for more complex actions. E.g. when regarding object triggers a creation or deletion of related object.", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + "note": { + SchemaProps: spec.SchemaProps{ + Description: "note is a human-readable description of the status of this operation. Maximal length of the note is 1kB, but libraries should be prepared to handle values up to 64kB.", + Type: []string{"string"}, + Format: "", + }, + }, + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is the type of this event (Normal, Warning), new types could be added in the future. It is machine-readable.", + Type: []string{"string"}, + Format: "", + }, + }, + "deprecatedSource": { + SchemaProps: spec.SchemaProps{ + Description: "deprecatedSource is the deprecated field assuring backward compatibility with core.v1 Event type.", + Ref: ref("k8s.io/api/core/v1.EventSource"), + }, + }, + "deprecatedFirstTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "deprecatedFirstTimestamp is the deprecated field assuring backward compatibility with core.v1 Event type.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "deprecatedLastTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "deprecatedLastTimestamp is the deprecated field assuring backward compatibility with core.v1 Event type.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "deprecatedCount": { + SchemaProps: spec.SchemaProps{ + Description: "deprecatedCount is the deprecated field assuring backward compatibility with core.v1 Event type.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"eventTime"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.EventSource", "k8s.io/api/core/v1.ObjectReference", "k8s.io/api/events/v1beta1.EventSeries", "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_events_v1beta1_EventList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EventList is a list of Event objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is a list of schema objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/events/v1beta1.Event"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/events/v1beta1.Event", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_events_v1beta1_EventSeries(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "count": { + SchemaProps: spec.SchemaProps{ + Description: "count is the number of occurrences in this series up to the last heartbeat time.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "lastObservedTime": { + SchemaProps: spec.SchemaProps{ + Description: "lastObservedTime is the time when last Event from the series was seen before last heartbeat.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + }, + Required: []string{"count", "lastObservedTime"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_AllowedCSIDriver(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the registered name of the CSI driver", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name"}, + }, + }, + } +} + +func schema_k8sio_api_extensions_v1beta1_AllowedFlexVolume(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AllowedFlexVolume represents a single Flexvolume that is allowed to be used. Deprecated: use AllowedFlexVolume from policy API Group instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "driver": { + SchemaProps: spec.SchemaProps{ + Description: "driver is the name of the Flexvolume driver.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"driver"}, + }, + }, + } +} + +func schema_k8sio_api_extensions_v1beta1_AllowedHostPath(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined. Deprecated: use AllowedHostPath from policy API Group instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "pathPrefix": { + SchemaProps: spec.SchemaProps{ + Description: "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_extensions_v1beta1_DaemonSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED - This group version of DaemonSet is deprecated by apps/v1beta2/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/extensions/v1beta1.DaemonSetSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/extensions/v1beta1.DaemonSetStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.DaemonSetSpec", "k8s.io/api/extensions/v1beta1.DaemonSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_DaemonSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetCondition describes the state of a DaemonSet at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of DaemonSet condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_DaemonSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetList is a collection of daemon sets.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "A list of daemon sets.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.DaemonSet"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.DaemonSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_DaemonSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetSpec is the specification of a daemon set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + "updateStrategy": { + SchemaProps: spec.SchemaProps{ + Description: "An update strategy to replace existing DaemonSet pods with new pods.", + Ref: ref("k8s.io/api/extensions/v1beta1.DaemonSetUpdateStrategy"), + }, + }, + "minReadySeconds": { + SchemaProps: spec.SchemaProps{ + Description: "The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "templateGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED. A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "revisionHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"template"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/api/extensions/v1beta1.DaemonSetUpdateStrategy", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_DaemonSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetStatus represents the current status of a daemon set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "currentNumberScheduled": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "numberMisscheduled": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "desiredNumberScheduled": { + SchemaProps: spec.SchemaProps{ + Description: "The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "numberReady": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "The most recent generation observed by the daemon set controller.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "updatedNumberScheduled": { + SchemaProps: spec.SchemaProps{ + Description: "The total number of nodes that are running updated daemon pod", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "numberAvailable": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "numberUnavailable": { + SchemaProps: spec.SchemaProps{ + Description: "The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "collisionCount": { + SchemaProps: spec.SchemaProps{ + Description: "Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a DaemonSet's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.DaemonSetCondition"), + }, + }, + }, + }, + }, + }, + Required: []string{"currentNumberScheduled", "numberMisscheduled", "desiredNumberScheduled", "numberReady"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.DaemonSetCondition"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_DaemonSetUpdateStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is OnDelete.", + Type: []string{"string"}, + Format: "", + }, + }, + "rollingUpdate": { + SchemaProps: spec.SchemaProps{ + Description: "Rolling update config params. Present only if type = \"RollingUpdate\".", + Ref: ref("k8s.io/api/extensions/v1beta1.RollingUpdateDaemonSet"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.RollingUpdateDaemonSet"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_Deployment(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired behavior of the Deployment.", + Ref: ref("k8s.io/api/extensions/v1beta1.DeploymentSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Most recently observed status of the Deployment.", + Ref: ref("k8s.io/api/extensions/v1beta1.DeploymentStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.DeploymentSpec", "k8s.io/api/extensions/v1beta1.DeploymentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_DeploymentCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentCondition describes the state of a deployment at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of deployment condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastUpdateTime": { + SchemaProps: spec.SchemaProps{ + Description: "The last time this condition was updated.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_DeploymentList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentList is a list of Deployments.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of Deployments.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.Deployment"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.Deployment", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_DeploymentRollback(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED. DeploymentRollback stores the information required to rollback a deployment.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Required: This must match the Name of a deployment.", + Type: []string{"string"}, + Format: "", + }, + }, + "updatedAnnotations": { + SchemaProps: spec.SchemaProps{ + Description: "The annotations to be updated to a deployment", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "rollbackTo": { + SchemaProps: spec.SchemaProps{ + Description: "The config of this deployment rollback.", + Ref: ref("k8s.io/api/extensions/v1beta1.RollbackConfig"), + }, + }, + }, + Required: []string{"name", "rollbackTo"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.RollbackConfig"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_DeploymentSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentSpec is the specification of the desired behavior of the Deployment.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "Template describes the pods that will be created.", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + "strategy": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-strategy": "retainKeys", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "The deployment strategy to use to replace existing pods with new ones.", + Ref: ref("k8s.io/api/extensions/v1beta1.DeploymentStrategy"), + }, + }, + "minReadySeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "revisionHistoryLimit": { + SchemaProps: spec.SchemaProps{ + Description: "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. This is set to the max value of int32 (i.e. 2147483647) by default, which means \"retaining all old ReplicaSets\".", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "paused": { + SchemaProps: spec.SchemaProps{ + Description: "Indicates that the deployment is paused and will not be processed by the deployment controller.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "rollbackTo": { + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.", + Ref: ref("k8s.io/api/extensions/v1beta1.RollbackConfig"), + }, + }, + "progressDeadlineSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. This is set to the max value of int32 (i.e. 2147483647) by default, which means \"no deadline\".", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"template"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/api/extensions/v1beta1.DeploymentStrategy", "k8s.io/api/extensions/v1beta1.RollbackConfig", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_DeploymentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentStatus is the most recently observed status of the Deployment.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "The generation observed by the deployment controller.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of non-terminated pods targeted by this deployment (their labels match the selector).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "updatedReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of non-terminated pods targeted by this deployment that have the desired template spec.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "readyReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of ready pods targeted by this deployment.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "availableReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "unavailableReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a deployment's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.DeploymentCondition"), + }, + }, + }, + }, + }, + "collisionCount": { + SchemaProps: spec.SchemaProps{ + Description: "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.DeploymentCondition"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_DeploymentStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentStrategy describes how to replace existing pods with new ones.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.", + Type: []string{"string"}, + Format: "", + }, + }, + "rollingUpdate": { + SchemaProps: spec.SchemaProps{ + Description: "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.", + Ref: ref("k8s.io/api/extensions/v1beta1.RollingUpdateDeployment"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.RollingUpdateDeployment"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_FSGroupStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "FSGroupStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use FSGroupStrategyOptions from policy API Group instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "rule": { + SchemaProps: spec.SchemaProps{ + Description: "rule is the strategy that will dictate what FSGroup is used in the SecurityContext.", + Type: []string{"string"}, + Format: "", + }, + }, + "ranges": { + SchemaProps: spec.SchemaProps{ + Description: "ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.IDRange"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.IDRange"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_HTTPIngressPath(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HTTPIngressPath associates a path with a backend. Incoming urls matching the path are forwarded to the backend.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Path is matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. When unspecified, all paths from incoming requests are matched.", + Type: []string{"string"}, + Format: "", + }, + }, + "pathType": { + SchemaProps: spec.SchemaProps{ + Description: "PathType determines the interpretation of the Path matching. PathType can be one of the following values: * Exact: Matches the URL path exactly. * Prefix: Matches based on a URL path prefix split by '/'. Matching is\n done on a path element by element basis. A path element refers is the\n list of labels in the path split by the '/' separator. A request is a\n match for path p if every p is an element-wise prefix of p of the\n request path. Note that if the last element of the path is a substring\n of the last element in request path, it is not a match (e.g. /foo/bar\n matches /foo/bar/baz, but does not match /foo/barbaz).\n* ImplementationSpecific: Interpretation of the Path matching is up to\n the IngressClass. Implementations can treat this as a separate PathType\n or treat it identically to Prefix or Exact path types.\nImplementations are required to support all path types. Defaults to ImplementationSpecific.", + Type: []string{"string"}, + Format: "", + }, + }, + "backend": { + SchemaProps: spec.SchemaProps{ + Description: "Backend defines the referenced service endpoint to which the traffic will be forwarded to.", + Ref: ref("k8s.io/api/extensions/v1beta1.IngressBackend"), + }, + }, + }, + Required: []string{"backend"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.IngressBackend"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_HTTPIngressRuleValue(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http:///? -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "paths": { + SchemaProps: spec.SchemaProps{ + Description: "A collection of paths that map requests to backends.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.HTTPIngressPath"), + }, + }, + }, + }, + }, + }, + Required: []string{"paths"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.HTTPIngressPath"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_HostPortRange(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HostPortRange defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined. Deprecated: use HostPortRange from policy API Group instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "min": { + SchemaProps: spec.SchemaProps{ + Description: "min is the start of the range, inclusive.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "max": { + SchemaProps: spec.SchemaProps{ + Description: "max is the end of the range, inclusive.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"min", "max"}, + }, + }, + } +} + +func schema_k8sio_api_extensions_v1beta1_IDRange(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IDRange provides a min/max of an allowed range of IDs. Deprecated: use IDRange from policy API Group instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "min": { + SchemaProps: spec.SchemaProps{ + Description: "min is the start of the range, inclusive.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "max": { + SchemaProps: spec.SchemaProps{ + Description: "max is the end of the range, inclusive.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + Required: []string{"min", "max"}, + }, + }, + } +} + +func schema_k8sio_api_extensions_v1beta1_IPBlock(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED 1.9 - This group version of IPBlock is deprecated by networking/v1/IPBlock. IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\",\"2001:db9::/64\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "cidr": { + SchemaProps: spec.SchemaProps{ + Description: "CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\" or \"2001:db9::/64\"", + Type: []string{"string"}, + Format: "", + }, + }, + "except": { + SchemaProps: spec.SchemaProps{ + Description: "Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" or \"2001:db9::/64\" Except values will be rejected if they are outside the CIDR range", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"cidr"}, + }, + }, + } +} + +func schema_k8sio_api_extensions_v1beta1_Ingress(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc. DEPRECATED - This group version of Ingress is deprecated by networking.k8s.io/v1beta1 Ingress. See the release notes for more information.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/extensions/v1beta1.IngressSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/extensions/v1beta1.IngressStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.IngressSpec", "k8s.io/api/extensions/v1beta1.IngressStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_IngressBackend(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressBackend describes all endpoints for a given service and port.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "serviceName": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the name of the referenced service.", + Type: []string{"string"}, + Format: "", + }, + }, + "servicePort": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the port of the referenced service.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "Resource is an ObjectRef to another Kubernetes resource in the namespace of the Ingress object. If resource is specified, serviceName and servicePort must not be specified.", + Ref: ref("k8s.io/api/core/v1.TypedLocalObjectReference"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.TypedLocalObjectReference", "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_IngressList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressList is a collection of Ingress.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of Ingress.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.Ingress"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.Ingress", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_IngressRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "host": { + SchemaProps: spec.SchemaProps{ + Description: "Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in RFC 3986: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to\n the IP in the Spec of the parent Ingress.\n2. The `:` delimiter is not respected because ports are not allowed.\n\t Currently the port of an Ingress is implicitly :80 for http and\n\t :443 for https.\nBoth these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.\n\nHost can be \"precise\" which is a domain name without the terminating dot of a network host (e.g. \"foo.bar.com\") or \"wildcard\", which is a domain name prefixed with a single wildcard label (e.g. \"*.foo.com\"). The wildcard character '*' must appear by itself as the first DNS label and matches only a single label. You cannot have a wildcard label by itself (e.g. Host == \"*\"). Requests will be matched against the Host field in the following way: 1. If Host is precise, the request matches this rule if the http host header is equal to Host. 2. If Host is a wildcard, then the request matches this rule if the http host header is to equal to the suffix (removing the first label) of the wildcard rule.", + Type: []string{"string"}, + Format: "", + }, + }, + "http": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.HTTPIngressRuleValue"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.HTTPIngressRuleValue"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_IngressRuleValue(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressRuleValue represents a rule to apply against incoming requests. If the rule is satisfied, the request is routed to the specified backend. Currently mixing different types of rules in a single Ingress is disallowed, so exactly one of the following must be set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "http": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.HTTPIngressRuleValue"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.HTTPIngressRuleValue"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_IngressSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressSpec describes the Ingress the user wishes to exist.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ingressClassName": { + SchemaProps: spec.SchemaProps{ + Description: "IngressClassName is the name of the IngressClass cluster resource. The associated IngressClass defines which controller will implement the resource. This replaces the deprecated `kubernetes.io/ingress.class` annotation. For backwards compatibility, when that annotation is set, it must be given precedence over this field. The controller may emit a warning if the field and annotation have different values. Implementations of this API should ignore Ingresses without a class specified. An IngressClass resource may be marked as default, which can be used to set a default value for this field. For more information, refer to the IngressClass documentation.", + Type: []string{"string"}, + Format: "", + }, + }, + "backend": { + SchemaProps: spec.SchemaProps{ + Description: "A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.", + Ref: ref("k8s.io/api/extensions/v1beta1.IngressBackend"), + }, + }, + "tls": { + SchemaProps: spec.SchemaProps{ + Description: "TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.IngressTLS"), + }, + }, + }, + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.IngressRule"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.IngressBackend", "k8s.io/api/extensions/v1beta1.IngressRule", "k8s.io/api/extensions/v1beta1.IngressTLS"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_IngressStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressStatus describe the current state of the Ingress.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "loadBalancer": { + SchemaProps: spec.SchemaProps{ + Description: "LoadBalancer contains the current status of the load-balancer.", + Ref: ref("k8s.io/api/core/v1.LoadBalancerStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LoadBalancerStatus"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_IngressTLS(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressTLS describes the transport layer security associated with an Ingress.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "hosts": { + SchemaProps: spec.SchemaProps{ + Description: "Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "secretName": { + SchemaProps: spec.SchemaProps{ + Description: "SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_extensions_v1beta1_NetworkPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED 1.9 - This group version of NetworkPolicy is deprecated by networking/v1/NetworkPolicy. NetworkPolicy describes what network traffic is allowed for a set of Pods", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired behavior for this NetworkPolicy.", + Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicySpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.NetworkPolicySpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_NetworkPolicyEgressRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED 1.9 - This group version of NetworkPolicyEgressRule is deprecated by networking/v1/NetworkPolicyEgressRule. NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ports": { + SchemaProps: spec.SchemaProps{ + Description: "List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicyPort"), + }, + }, + }, + }, + }, + "to": { + SchemaProps: spec.SchemaProps{ + Description: "List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicyPeer"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.NetworkPolicyPeer", "k8s.io/api/extensions/v1beta1.NetworkPolicyPort"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_NetworkPolicyIngressRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED 1.9 - This group version of NetworkPolicyIngressRule is deprecated by networking/v1/NetworkPolicyIngressRule. This NetworkPolicyIngressRule matches traffic if and only if the traffic matches both ports AND from.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ports": { + SchemaProps: spec.SchemaProps{ + Description: "List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicyPort"), + }, + }, + }, + }, + }, + "from": { + SchemaProps: spec.SchemaProps{ + Description: "List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the from list.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicyPeer"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.NetworkPolicyPeer", "k8s.io/api/extensions/v1beta1.NetworkPolicyPort"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_NetworkPolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED 1.9 - This group version of NetworkPolicyList is deprecated by networking/v1/NetworkPolicyList. Network Policy List is a list of NetworkPolicy objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of schema objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicy"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.NetworkPolicy", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_NetworkPolicyPeer(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED 1.9 - This group version of NetworkPolicyPeer is deprecated by networking/v1/NetworkPolicyPeer.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "podSelector": { + SchemaProps: spec.SchemaProps{ + Description: "This is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods.\n\nIf NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "namespaceSelector": { + SchemaProps: spec.SchemaProps{ + Description: "Selects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces.\n\nIf PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "ipBlock": { + SchemaProps: spec.SchemaProps{ + Description: "IPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be.", + Ref: ref("k8s.io/api/extensions/v1beta1.IPBlock"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.IPBlock", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_NetworkPolicyPort(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED 1.9 - This group version of NetworkPolicyPort is deprecated by networking/v1/NetworkPolicyPort.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "protocol": { + SchemaProps: spec.SchemaProps{ + Description: "Optional. The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, the port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_NetworkPolicySpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED 1.9 - This group version of NetworkPolicySpec is deprecated by networking/v1/NetworkPolicySpec.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "podSelector": { + SchemaProps: spec.SchemaProps{ + Description: "Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "ingress": { + SchemaProps: spec.SchemaProps{ + Description: "List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicyIngressRule"), + }, + }, + }, + }, + }, + "egress": { + SchemaProps: spec.SchemaProps{ + Description: "List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicyEgressRule"), + }, + }, + }, + }, + }, + "policyTypes": { + SchemaProps: spec.SchemaProps{ + Description: "List of rule types that the NetworkPolicy relates to. Valid options are \"Ingress\", \"Egress\", or \"Ingress,Egress\". If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"podSelector"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.NetworkPolicyEgressRule", "k8s.io/api/extensions/v1beta1.NetworkPolicyIngressRule", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_PodSecurityPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container. Deprecated: use PodSecurityPolicy from policy API Group instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "spec defines the policy enforced.", + Ref: ref("k8s.io/api/extensions/v1beta1.PodSecurityPolicySpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.PodSecurityPolicySpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_PodSecurityPolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodSecurityPolicyList is a list of PodSecurityPolicy objects. Deprecated: use PodSecurityPolicyList from policy API Group instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is a list of schema objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.PodSecurityPolicy"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.PodSecurityPolicy", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_PodSecurityPolicySpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodSecurityPolicySpec defines the policy enforced. Deprecated: use PodSecurityPolicySpec from policy API Group instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "privileged": { + SchemaProps: spec.SchemaProps{ + Description: "privileged determines if a pod can request to be run as privileged.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "defaultAddCapabilities": { + SchemaProps: spec.SchemaProps{ + Description: "defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "requiredDropCapabilities": { + SchemaProps: spec.SchemaProps{ + Description: "requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "allowedCapabilities": { + SchemaProps: spec.SchemaProps{ + Description: "allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "volumes": { + SchemaProps: spec.SchemaProps{ + Description: "volumes is an allowlist of volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "hostNetwork": { + SchemaProps: spec.SchemaProps{ + Description: "hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "hostPorts": { + SchemaProps: spec.SchemaProps{ + Description: "hostPorts determines which host port ranges are allowed to be exposed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.HostPortRange"), + }, + }, + }, + }, + }, + "hostPID": { + SchemaProps: spec.SchemaProps{ + Description: "hostPID determines if the policy allows the use of HostPID in the pod spec.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "hostIPC": { + SchemaProps: spec.SchemaProps{ + Description: "hostIPC determines if the policy allows the use of HostIPC in the pod spec.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "seLinux": { + SchemaProps: spec.SchemaProps{ + Description: "seLinux is the strategy that will dictate the allowable labels that may be set.", + Ref: ref("k8s.io/api/extensions/v1beta1.SELinuxStrategyOptions"), + }, + }, + "runAsUser": { + SchemaProps: spec.SchemaProps{ + Description: "runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.", + Ref: ref("k8s.io/api/extensions/v1beta1.RunAsUserStrategyOptions"), + }, + }, + "runAsGroup": { + SchemaProps: spec.SchemaProps{ + Description: "RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled.", + Ref: ref("k8s.io/api/extensions/v1beta1.RunAsGroupStrategyOptions"), + }, + }, + "supplementalGroups": { + SchemaProps: spec.SchemaProps{ + Description: "supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.", + Ref: ref("k8s.io/api/extensions/v1beta1.SupplementalGroupsStrategyOptions"), + }, + }, + "fsGroup": { + SchemaProps: spec.SchemaProps{ + Description: "fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.", + Ref: ref("k8s.io/api/extensions/v1beta1.FSGroupStrategyOptions"), + }, + }, + "readOnlyRootFilesystem": { + SchemaProps: spec.SchemaProps{ + Description: "readOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "defaultAllowPrivilegeEscalation": { + SchemaProps: spec.SchemaProps{ + Description: "defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "allowPrivilegeEscalation": { + SchemaProps: spec.SchemaProps{ + Description: "allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "allowedHostPaths": { + SchemaProps: spec.SchemaProps{ + Description: "allowedHostPaths is an allowlist of host paths. Empty indicates that all host paths may be used.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.AllowedHostPath"), + }, + }, + }, + }, + }, + "allowedFlexVolumes": { + SchemaProps: spec.SchemaProps{ + Description: "allowedFlexVolumes is an allowlist of Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.AllowedFlexVolume"), + }, + }, + }, + }, + }, + "allowedCSIDrivers": { + SchemaProps: spec.SchemaProps{ + Description: "AllowedCSIDrivers is an allowlist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. An empty value indicates that any CSI driver can be used for inline ephemeral volumes.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.AllowedCSIDriver"), + }, + }, + }, + }, + }, + "allowedUnsafeSysctls": { + SchemaProps: spec.SchemaProps{ + Description: "allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to allowlist all unsafe sysctls explicitly to avoid rejection.\n\nExamples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "forbiddenSysctls": { + SchemaProps: spec.SchemaProps{ + Description: "forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n\nExamples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "allowedProcMountTypes": { + SchemaProps: spec.SchemaProps{ + Description: "AllowedProcMountTypes is an allowlist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "runtimeClass": { + SchemaProps: spec.SchemaProps{ + Description: "runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod. If this field is omitted, the pod's runtimeClassName field is unrestricted. Enforcement of this field depends on the RuntimeClass feature gate being enabled.", + Ref: ref("k8s.io/api/extensions/v1beta1.RuntimeClassStrategyOptions"), + }, + }, + }, + Required: []string{"seLinux", "runAsUser", "supplementalGroups", "fsGroup"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.AllowedCSIDriver", "k8s.io/api/extensions/v1beta1.AllowedFlexVolume", "k8s.io/api/extensions/v1beta1.AllowedHostPath", "k8s.io/api/extensions/v1beta1.FSGroupStrategyOptions", "k8s.io/api/extensions/v1beta1.HostPortRange", "k8s.io/api/extensions/v1beta1.RunAsGroupStrategyOptions", "k8s.io/api/extensions/v1beta1.RunAsUserStrategyOptions", "k8s.io/api/extensions/v1beta1.RuntimeClassStrategyOptions", "k8s.io/api/extensions/v1beta1.SELinuxStrategyOptions", "k8s.io/api/extensions/v1beta1.SupplementalGroupsStrategyOptions"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_ReplicaSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/extensions/v1beta1.ReplicaSetSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/extensions/v1beta1.ReplicaSetStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.ReplicaSetSpec", "k8s.io/api/extensions/v1beta1.ReplicaSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_ReplicaSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSetCondition describes the state of a replica set at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of replica set condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "The last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_ReplicaSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSetList is a collection of ReplicaSets.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.ReplicaSet"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.ReplicaSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_ReplicaSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSetSpec is the specification of a ReplicaSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "minReadySeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Description: "Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", + Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_ReplicaSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSetStatus represents the current status of a ReplicaSet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "fullyLabeledReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "The number of pods that have labels matching the labels of the pod template of the replicaset.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "readyReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "The number of ready replicas for this replica set.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "availableReplicas": { + SchemaProps: spec.SchemaProps{ + Description: "The number of available replicas (ready for at least minReadySeconds) for this replica set.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "ObservedGeneration reflects the generation of the most recently observed ReplicaSet.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Represents the latest available observations of a replica set's current state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.ReplicaSetCondition"), + }, + }, + }, + }, + }, + }, + Required: []string{"replicas"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.ReplicaSetCondition"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_RollbackConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "revision": { + SchemaProps: spec.SchemaProps{ + Description: "The revision to rollback to. If set to 0, rollback to the last revision.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_extensions_v1beta1_RollingUpdateDaemonSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Spec to control the desired behavior of daemon set rolling update.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "maxUnavailable": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_RollingUpdateDeployment(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Spec to control the desired behavior of rolling update.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "maxUnavailable": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + "maxSurge": { + SchemaProps: spec.SchemaProps{ + Description: "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_RunAsGroupStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsGroupStrategyOptions from policy API Group instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "rule": { + SchemaProps: spec.SchemaProps{ + Description: "rule is the strategy that will dictate the allowable RunAsGroup values that may be set.", + Type: []string{"string"}, + Format: "", + }, + }, + "ranges": { + SchemaProps: spec.SchemaProps{ + Description: "ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.IDRange"), + }, + }, + }, + }, + }, + }, + Required: []string{"rule"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.IDRange"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_RunAsUserStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsUserStrategyOptions from policy API Group instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "rule": { + SchemaProps: spec.SchemaProps{ + Description: "rule is the strategy that will dictate the allowable RunAsUser values that may be set.", + Type: []string{"string"}, + Format: "", + }, + }, + "ranges": { + SchemaProps: spec.SchemaProps{ + Description: "ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.IDRange"), + }, + }, + }, + }, + }, + }, + Required: []string{"rule"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.IDRange"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_RuntimeClassStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses for a pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "allowedRuntimeClassNames": { + SchemaProps: spec.SchemaProps{ + Description: "allowedRuntimeClassNames is an allowlist of RuntimeClass names that may be specified on a pod. A value of \"*\" means that any RuntimeClass name is allowed, and must be the only item in the list. An empty list requires the RuntimeClassName field to be unset.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "defaultRuntimeClassName": { + SchemaProps: spec.SchemaProps{ + Description: "defaultRuntimeClassName is the default RuntimeClassName to set on the pod. The default MUST be allowed by the allowedRuntimeClassNames list. A value of nil does not mutate the Pod.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"allowedRuntimeClassNames"}, + }, + }, + } +} + +func schema_k8sio_api_extensions_v1beta1_SELinuxStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use SELinuxStrategyOptions from policy API Group instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "rule": { + SchemaProps: spec.SchemaProps{ + Description: "rule is the strategy that will dictate the allowable labels that may be set.", + Type: []string{"string"}, + Format: "", + }, + }, + "seLinuxOptions": { + SchemaProps: spec.SchemaProps{ + Description: "seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/", + Ref: ref("k8s.io/api/core/v1.SELinuxOptions"), + }, + }, + }, + Required: []string{"rule"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.SELinuxOptions"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_Scale(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "represents a scaling request for a resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", + Ref: ref("k8s.io/api/extensions/v1beta1.ScaleSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only.", + Ref: ref("k8s.io/api/extensions/v1beta1.ScaleStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.ScaleSpec", "k8s.io/api/extensions/v1beta1.ScaleStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_extensions_v1beta1_ScaleSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "describes the attributes of a scale subresource", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "desired number of instances for the scaled object.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_extensions_v1beta1_ScaleStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "represents the current status of a scale subresource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "actual number of observed instances of the scaled object.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "targetSelector": { + SchemaProps: spec.SchemaProps{ + Description: "label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"replicas"}, + }, + }, + } +} + +func schema_k8sio_api_extensions_v1beta1_SupplementalGroupsStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use SupplementalGroupsStrategyOptions from policy API Group instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "rule": { + SchemaProps: spec.SchemaProps{ + Description: "rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.", + Type: []string{"string"}, + Format: "", + }, + }, + "ranges": { + SchemaProps: spec.SchemaProps{ + Description: "ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/extensions/v1beta1.IDRange"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/extensions/v1beta1.IDRange"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_FlowDistinguisherMethod(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "FlowDistinguisherMethod specifies the method of a flow distinguisher.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "`type` is the type of flow distinguisher method The supported types are \"ByUser\" and \"ByNamespace\". Required.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type"}, + }, + }, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_FlowSchema(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "FlowSchema defines the schema of a group of flows. Note that a flow is made up of a set of inbound API requests with similar attributes and is identified by a pair of strings: the name of the FlowSchema and a \"flow distinguisher\".", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "`metadata` is the standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "`spec` is the specification of the desired behavior of a FlowSchema. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.FlowSchemaSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "`status` is the current status of a FlowSchema. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.FlowSchemaStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/flowcontrol/v1alpha1.FlowSchemaSpec", "k8s.io/api/flowcontrol/v1alpha1.FlowSchemaStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_FlowSchemaCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "FlowSchemaCondition describes conditions for a FlowSchema.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "`type` is the type of the condition. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "`status` is the status of the condition. Can be True, False, Unknown. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "`lastTransitionTime` is the last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "`reason` is a unique, one-word, CamelCase reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "`message` is a human-readable message indicating details about last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_FlowSchemaList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "FlowSchemaList is a list of FlowSchema objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "`metadata` is the standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "`items` is a list of FlowSchemas.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.FlowSchema"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/flowcontrol/v1alpha1.FlowSchema", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_FlowSchemaSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "FlowSchemaSpec describes how the FlowSchema's specification looks like.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "priorityLevelConfiguration": { + SchemaProps: spec.SchemaProps{ + Description: "`priorityLevelConfiguration` should reference a PriorityLevelConfiguration in the cluster. If the reference cannot be resolved, the FlowSchema will be ignored and marked as invalid in its status. Required.", + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfigurationReference"), + }, + }, + "matchingPrecedence": { + SchemaProps: spec.SchemaProps{ + Description: "`matchingPrecedence` is used to choose among the FlowSchemas that match a given request. The chosen FlowSchema is among those with the numerically lowest (which we take to be logically highest) MatchingPrecedence. Each MatchingPrecedence value must be ranged in [1,10000]. Note that if the precedence is not specified, it will be set to 1000 as default.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "distinguisherMethod": { + SchemaProps: spec.SchemaProps{ + Description: "`distinguisherMethod` defines how to compute the flow distinguisher for requests that match this schema. `nil` specifies that the distinguisher is disabled and thus will always be the empty string.", + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.FlowDistinguisherMethod"), + }, + }, + "rules": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "`rules` describes which requests will match this flow schema. This FlowSchema matches a request if and only if at least one member of rules matches the request. if it is an empty slice, there will be no requests matching the FlowSchema.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.PolicyRulesWithSubjects"), + }, + }, + }, + }, + }, + }, + Required: []string{"priorityLevelConfiguration"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/flowcontrol/v1alpha1.FlowDistinguisherMethod", "k8s.io/api/flowcontrol/v1alpha1.PolicyRulesWithSubjects", "k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfigurationReference"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_FlowSchemaStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "FlowSchemaStatus represents the current state of a FlowSchema.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "`conditions` is a list of the current states of FlowSchema.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.FlowSchemaCondition"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/flowcontrol/v1alpha1.FlowSchemaCondition"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_GroupSubject(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "GroupSubject holds detailed information for group-kind subject.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the user group that matches, or \"*\" to match all user groups. See https://github.com/kubernetes/apiserver/blob/master/pkg/authentication/user/user.go for some well-known group names. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name"}, + }, + }, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_LimitResponse(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LimitResponse defines how to handle requests that can not be executed right now.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "`type` is \"Queue\" or \"Reject\". \"Queue\" means that requests that can not be executed upon arrival are held in a queue until they can be executed or a queuing limit is reached. \"Reject\" means that requests that can not be executed upon arrival are rejected. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + "queuing": { + SchemaProps: spec.SchemaProps{ + Description: "`queuing` holds the configuration parameters for queuing. This field may be non-empty only if `type` is `\"Queue\"`.", + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.QueuingConfiguration"), + }, + }, + }, + Required: []string{"type"}, + }, + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-unions": []interface{}{ + map[string]interface{}{ + "discriminator": "type", + "fields-to-discriminateBy": map[string]interface{}{ + "queuing": "Queuing", + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/flowcontrol/v1alpha1.QueuingConfiguration"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_LimitedPriorityLevelConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LimitedPriorityLevelConfiguration specifies how to handle requests that are subject to limits. It addresses two issues:\n * How are requests for this priority level limited?\n * What should be done with requests that exceed the limit?", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "assuredConcurrencyShares": { + SchemaProps: spec.SchemaProps{ + Description: "`assuredConcurrencyShares` (ACS) configures the execution limit, which is a limit on the number of requests of this priority level that may be exeucting at a given time. ACS must be a positive number. The server's concurrency limit (SCL) is divided among the concurrency-controlled priority levels in proportion to their assured concurrency shares. This produces the assured concurrency value (ACV) --- the number of requests that may be executing at a time --- for each such priority level:\n\n ACV(l) = ceil( SCL * ACS(l) / ( sum[priority levels k] ACS(k) ) )\n\nbigger numbers of ACS mean more reserved concurrent requests (at the expense of every other PL). This field has a default value of 30.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "limitResponse": { + SchemaProps: spec.SchemaProps{ + Description: "`limitResponse` indicates what to do with requests that can not be executed right now", + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.LimitResponse"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/flowcontrol/v1alpha1.LimitResponse"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_NonResourcePolicyRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NonResourcePolicyRule is a predicate that matches non-resource requests according to their verb and the target non-resource URL. A NonResourcePolicyRule matches a request if and only if both (a) at least one member of verbs matches the request and (b) at least one member of nonResourceURLs matches the request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "verbs": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "set", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "`verbs` is a list of matching verbs and may not be empty. \"*\" matches all verbs. If it is present, it must be the only entry. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "nonResourceURLs": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "set", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "`nonResourceURLs` is a set of url prefixes that a user should have access to and may not be empty. For example:\n - \"/healthz\" is legal\n - \"/hea*\" is illegal\n - \"/hea\" is legal but matches nothing\n - \"/hea/*\" also matches nothing\n - \"/healthz/*\" matches all per-component health checks.\n\"*\" matches all non-resource urls. if it is present, it must be the only entry. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"verbs", "nonResourceURLs"}, + }, + }, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_PolicyRulesWithSubjects(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PolicyRulesWithSubjects prescribes a test that applies to a request to an apiserver. The test considers the subject making the request, the verb being requested, and the resource to be acted upon. This PolicyRulesWithSubjects matches a request if and only if both (a) at least one member of subjects matches the request and (b) at least one member of resourceRules or nonResourceRules matches the request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "subjects": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "subjects is the list of normal user, serviceaccount, or group that this rule cares about. There must be at least one member in this slice. A slice that includes both the system:authenticated and system:unauthenticated user groups matches every request. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.Subject"), + }, + }, + }, + }, + }, + "resourceRules": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "`resourceRules` is a slice of ResourcePolicyRules that identify matching requests according to their verb and the target resource. At least one of `resourceRules` and `nonResourceRules` has to be non-empty.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.ResourcePolicyRule"), + }, + }, + }, + }, + }, + "nonResourceRules": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "`nonResourceRules` is a list of NonResourcePolicyRules that identify matching requests according to their verb and the target non-resource URL.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.NonResourcePolicyRule"), + }, + }, + }, + }, + }, + }, + Required: []string{"subjects"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/flowcontrol/v1alpha1.NonResourcePolicyRule", "k8s.io/api/flowcontrol/v1alpha1.ResourcePolicyRule", "k8s.io/api/flowcontrol/v1alpha1.Subject"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_PriorityLevelConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PriorityLevelConfiguration represents the configuration of a priority level.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "`metadata` is the standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "`spec` is the specification of the desired behavior of a \"request-priority\". More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfigurationSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "`status` is the current status of a \"request-priority\". More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfigurationStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfigurationSpec", "k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfigurationStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_PriorityLevelConfigurationCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PriorityLevelConfigurationCondition defines the condition of priority level.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "`type` is the type of the condition. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "`status` is the status of the condition. Can be True, False, Unknown. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "`lastTransitionTime` is the last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "`reason` is a unique, one-word, CamelCase reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "`message` is a human-readable message indicating details about last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_PriorityLevelConfigurationList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PriorityLevelConfigurationList is a list of PriorityLevelConfiguration objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "`metadata` is the standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "`items` is a list of request-priorities.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfiguration"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfiguration", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_PriorityLevelConfigurationReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PriorityLevelConfigurationReference contains information that points to the \"request-priority\" being used.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "`name` is the name of the priority level configuration being referenced Required.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name"}, + }, + }, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_PriorityLevelConfigurationSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PriorityLevelConfigurationSpec specifies the configuration of a priority level.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "`type` indicates whether this priority level is subject to limitation on request execution. A value of `\"Exempt\"` means that requests of this priority level are not subject to a limit (and thus are never queued) and do not detract from the capacity made available to other priority levels. A value of `\"Limited\"` means that (a) requests of this priority level _are_ subject to limits and (b) some of the server's limited capacity is made available exclusively to this priority level. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + "limited": { + SchemaProps: spec.SchemaProps{ + Description: "`limited` specifies how requests are handled for a Limited priority level. This field must be non-empty if and only if `type` is `\"Limited\"`.", + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.LimitedPriorityLevelConfiguration"), + }, + }, + }, + Required: []string{"type"}, + }, + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-unions": []interface{}{ + map[string]interface{}{ + "discriminator": "type", + "fields-to-discriminateBy": map[string]interface{}{ + "limited": "Limited", + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/flowcontrol/v1alpha1.LimitedPriorityLevelConfiguration"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_PriorityLevelConfigurationStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PriorityLevelConfigurationStatus represents the current state of a \"request-priority\".", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "`conditions` is the current state of \"request-priority\".", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfigurationCondition"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/flowcontrol/v1alpha1.PriorityLevelConfigurationCondition"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_QueuingConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "QueuingConfiguration holds the configuration parameters for queuing", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "queues": { + SchemaProps: spec.SchemaProps{ + Description: "`queues` is the number of queues for this priority level. The queues exist independently at each apiserver. The value must be positive. Setting it to 1 effectively precludes shufflesharding and thus makes the distinguisher method of associated flow schemas irrelevant. This field has a default value of 64.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "handSize": { + SchemaProps: spec.SchemaProps{ + Description: "`handSize` is a small positive number that configures the shuffle sharding of requests into queues. When enqueuing a request at this priority level the request's flow identifier (a string pair) is hashed and the hash value is used to shuffle the list of queues and deal a hand of the size specified here. The request is put into one of the shortest queues in that hand. `handSize` must be no larger than `queues`, and should be significantly smaller (so that a few heavy flows do not saturate most of the queues). See the user-facing documentation for more extensive guidance on setting this field. This field has a default value of 8.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "queueLengthLimit": { + SchemaProps: spec.SchemaProps{ + Description: "`queueLengthLimit` is the maximum number of requests allowed to be waiting in a given queue of this priority level at a time; excess requests are rejected. This value must be positive. If not specified, it will be defaulted to 50.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_ResourcePolicyRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourcePolicyRule is a predicate that matches some resource requests, testing the request's verb and the target resource. A ResourcePolicyRule matches a resource request if and only if: (a) at least one member of verbs matches the request, (b) at least one member of apiGroups matches the request, (c) at least one member of resources matches the request, and (d) least one member of namespaces matches the request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "verbs": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "set", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "`verbs` is a list of matching verbs and may not be empty. \"*\" matches all verbs and, if present, must be the only entry. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "apiGroups": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "set", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "`apiGroups` is a list of matching API groups and may not be empty. \"*\" matches all API groups and, if present, must be the only entry. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resources": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "set", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "`resources` is a list of matching resources (i.e., lowercase and plural) with, if desired, subresource. For example, [ \"services\", \"nodes/status\" ]. This list may not be empty. \"*\" matches all resources and, if present, must be the only entry. Required.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "clusterScope": { + SchemaProps: spec.SchemaProps{ + Description: "`clusterScope` indicates whether to match requests that do not specify a namespace (which happens either because the resource is not namespaced or the request targets all namespaces). If this field is omitted or false then the `namespaces` field must contain a non-empty list.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "namespaces": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "set", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "`namespaces` is a list of target namespaces that restricts matches. A request that specifies a target namespace matches only if either (a) this list contains that target namespace or (b) this list contains \"*\". Note that \"*\" matches any specified namespace but does not match a request that _does not specify_ a namespace (see the `clusterScope` field for that). This list may be empty, but only if `clusterScope` is true.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"verbs", "apiGroups", "resources"}, + }, + }, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_ServiceAccountSubject(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceAccountSubject holds detailed information for service-account-kind subject.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "`namespace` is the namespace of matching ServiceAccount objects. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "`name` is the name of matching ServiceAccount objects, or \"*\" to match regardless of name. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"namespace", "name"}, + }, + }, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_Subject(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Subject matches the originator of a request, as identified by the request authentication system. There are three ways of matching an originator; by user, group, or service account.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Required", + Type: []string{"string"}, + Format: "", + }, + }, + "user": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.UserSubject"), + }, + }, + "group": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.GroupSubject"), + }, + }, + "serviceAccount": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/flowcontrol/v1alpha1.ServiceAccountSubject"), + }, + }, + }, + Required: []string{"kind"}, + }, + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-unions": []interface{}{ + map[string]interface{}{ + "discriminator": "kind", + "fields-to-discriminateBy": map[string]interface{}{ + "group": "Group", + "serviceAccount": "ServiceAccount", + "user": "User", + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/flowcontrol/v1alpha1.GroupSubject", "k8s.io/api/flowcontrol/v1alpha1.ServiceAccountSubject", "k8s.io/api/flowcontrol/v1alpha1.UserSubject"}, + } +} + +func schema_k8sio_api_flowcontrol_v1alpha1_UserSubject(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "UserSubject holds detailed information for user-kind subject.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "`name` is the username that matches, or \"*\" to match all usernames. Required.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name"}, + }, + }, + } +} + +func schema_k8sio_api_imagepolicy_v1alpha1_ImageReview(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ImageReview checks if the set of images in a pod are allowed.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec holds information about the pod being evaluated", + Ref: ref("k8s.io/api/imagepolicy/v1alpha1.ImageReviewSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is filled in by the backend and indicates whether the pod should be allowed.", + Ref: ref("k8s.io/api/imagepolicy/v1alpha1.ImageReviewStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/imagepolicy/v1alpha1.ImageReviewSpec", "k8s.io/api/imagepolicy/v1alpha1.ImageReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_imagepolicy_v1alpha1_ImageReviewContainerSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ImageReviewContainerSpec is a description of a container within the pod creation request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "image": { + SchemaProps: spec.SchemaProps{ + Description: "This can be in the form image:tag or image@SHA:012345679abcdef.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_imagepolicy_v1alpha1_ImageReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ImageReviewSpec is a description of the pod creation request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "containers": { + SchemaProps: spec.SchemaProps{ + Description: "Containers is a list of a subset of the information in each container of the Pod being created.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/imagepolicy/v1alpha1.ImageReviewContainerSpec"), + }, + }, + }, + }, + }, + "annotations": { + SchemaProps: spec.SchemaProps{ + Description: "Annotations is a list of key-value pairs extracted from the Pod's annotations. It only includes keys which match the pattern `*.image-policy.k8s.io/*`. It is up to each webhook backend to determine how to interpret these annotations, if at all.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace is the namespace the pod is being created in.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/imagepolicy/v1alpha1.ImageReviewContainerSpec"}, + } +} + +func schema_k8sio_api_imagepolicy_v1alpha1_ImageReviewStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ImageReviewStatus is the result of the review for the pod creation request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "allowed": { + SchemaProps: spec.SchemaProps{ + Description: "Allowed indicates that all images were allowed to be run.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "Reason should be empty unless Allowed is false in which case it may contain a short description of what is wrong. Kubernetes may truncate excessively long errors when displaying to the user.", + Type: []string{"string"}, + Format: "", + }, + }, + "auditAnnotations": { + SchemaProps: spec.SchemaProps{ + Description: "AuditAnnotations will be added to the attributes object of the admission controller request using 'AddAnnotation'. The keys should be prefix-less (i.e., the admission controller will add an appropriate prefix).", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"allowed"}, + }, + }, + } +} + +func schema_k8sio_api_networking_v1_HTTPIngressPath(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HTTPIngressPath associates a path with a backend. Incoming urls matching the path are forwarded to the backend.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Path is matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. When unspecified, all paths from incoming requests are matched.", + Type: []string{"string"}, + Format: "", + }, + }, + "pathType": { + SchemaProps: spec.SchemaProps{ + Description: "PathType determines the interpretation of the Path matching. PathType can be one of the following values: * Exact: Matches the URL path exactly. * Prefix: Matches based on a URL path prefix split by '/'. Matching is\n done on a path element by element basis. A path element refers is the\n list of labels in the path split by the '/' separator. A request is a\n match for path p if every p is an element-wise prefix of p of the\n request path. Note that if the last element of the path is a substring\n of the last element in request path, it is not a match (e.g. /foo/bar\n matches /foo/bar/baz, but does not match /foo/barbaz).\n* ImplementationSpecific: Interpretation of the Path matching is up to\n the IngressClass. Implementations can treat this as a separate PathType\n or treat it identically to Prefix or Exact path types.\nImplementations are required to support all path types.", + Type: []string{"string"}, + Format: "", + }, + }, + "backend": { + SchemaProps: spec.SchemaProps{ + Description: "Backend defines the referenced service endpoint to which the traffic will be forwarded to.", + Ref: ref("k8s.io/api/networking/v1.IngressBackend"), + }, + }, + }, + Required: []string{"backend"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.IngressBackend"}, + } +} + +func schema_k8sio_api_networking_v1_HTTPIngressRuleValue(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http:///? -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "paths": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "A collection of paths that map requests to backends.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1.HTTPIngressPath"), + }, + }, + }, + }, + }, + }, + Required: []string{"paths"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.HTTPIngressPath"}, + } +} + +func schema_k8sio_api_networking_v1_IPBlock(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\",\"2001:db9::/64\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "cidr": { + SchemaProps: spec.SchemaProps{ + Description: "CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\" or \"2001:db9::/64\"", + Type: []string{"string"}, + Format: "", + }, + }, + "except": { + SchemaProps: spec.SchemaProps{ + Description: "Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" or \"2001:db9::/64\" Except values will be rejected if they are outside the CIDR range", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"cidr"}, + }, + }, + } +} + +func schema_k8sio_api_networking_v1_Ingress(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/networking/v1.IngressSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/networking/v1.IngressStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.IngressSpec", "k8s.io/api/networking/v1.IngressStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_networking_v1_IngressBackend(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressBackend describes all endpoints for a given service and port.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "service": { + SchemaProps: spec.SchemaProps{ + Description: "Service references a Service as a Backend. This is a mutually exclusive setting with \"Resource\".", + Ref: ref("k8s.io/api/networking/v1.IngressServiceBackend"), + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "Resource is an ObjectRef to another Kubernetes resource in the namespace of the Ingress object. If resource is specified, a service.Name and service.Port must not be specified. This is a mutually exclusive setting with \"Service\".", + Ref: ref("k8s.io/api/core/v1.TypedLocalObjectReference"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.TypedLocalObjectReference", "k8s.io/api/networking/v1.IngressServiceBackend"}, + } +} + +func schema_k8sio_api_networking_v1_IngressClass(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressClass represents the class of the Ingress, referenced by the Ingress Spec. The `ingressclass.kubernetes.io/is-default-class` annotation can be used to indicate that an IngressClass should be considered default. When a single IngressClass resource has this annotation set to true, new Ingress resources without a class specified will be assigned this default class.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec is the desired state of the IngressClass. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/networking/v1.IngressClassSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.IngressClassSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_networking_v1_IngressClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressClassList is a collection of IngressClasses.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of IngressClasses.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1.IngressClass"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.IngressClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_networking_v1_IngressClassSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressClassSpec provides information about the class of an Ingress.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "controller": { + SchemaProps: spec.SchemaProps{ + Description: "Controller refers to the name of the controller that should handle this class. This allows for different \"flavors\" that are controlled by the same controller. For example, you may have different Parameters for the same implementing controller. This should be specified as a domain-prefixed path no more than 250 characters in length, e.g. \"acme.io/ingress-controller\". This field is immutable.", + Type: []string{"string"}, + Format: "", + }, + }, + "parameters": { + SchemaProps: spec.SchemaProps{ + Description: "Parameters is a link to a custom resource containing additional configuration for the controller. This is optional if the controller does not require extra parameters.", + Ref: ref("k8s.io/api/core/v1.TypedLocalObjectReference"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.TypedLocalObjectReference"}, + } +} + +func schema_k8sio_api_networking_v1_IngressList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressList is a collection of Ingress.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of Ingress.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1.Ingress"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.Ingress", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_networking_v1_IngressRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "host": { + SchemaProps: spec.SchemaProps{ + Description: "Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in RFC 3986: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to\n the IP in the Spec of the parent Ingress.\n2. The `:` delimiter is not respected because ports are not allowed.\n\t Currently the port of an Ingress is implicitly :80 for http and\n\t :443 for https.\nBoth these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.\n\nHost can be \"precise\" which is a domain name without the terminating dot of a network host (e.g. \"foo.bar.com\") or \"wildcard\", which is a domain name prefixed with a single wildcard label (e.g. \"*.foo.com\"). The wildcard character '*' must appear by itself as the first DNS label and matches only a single label. You cannot have a wildcard label by itself (e.g. Host == \"*\"). Requests will be matched against the Host field in the following way: 1. If Host is precise, the request matches this rule if the http host header is equal to Host. 2. If Host is a wildcard, then the request matches this rule if the http host header is to equal to the suffix (removing the first label) of the wildcard rule.", + Type: []string{"string"}, + Format: "", + }, + }, + "http": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1.HTTPIngressRuleValue"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.HTTPIngressRuleValue"}, + } +} + +func schema_k8sio_api_networking_v1_IngressRuleValue(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressRuleValue represents a rule to apply against incoming requests. If the rule is satisfied, the request is routed to the specified backend. Currently mixing different types of rules in a single Ingress is disallowed, so exactly one of the following must be set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "http": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1.HTTPIngressRuleValue"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.HTTPIngressRuleValue"}, + } +} + +func schema_k8sio_api_networking_v1_IngressServiceBackend(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressServiceBackend references a Kubernetes Service as a Backend.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the referenced service. The service must exist in the same namespace as the Ingress object.", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "Port of the referenced service. A port name or port number is required for a IngressServiceBackend.", + Ref: ref("k8s.io/api/networking/v1.ServiceBackendPort"), + }, + }, + }, + Required: []string{"name"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.ServiceBackendPort"}, + } +} + +func schema_k8sio_api_networking_v1_IngressSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressSpec describes the Ingress the user wishes to exist.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ingressClassName": { + SchemaProps: spec.SchemaProps{ + Description: "IngressClassName is the name of the IngressClass cluster resource. The associated IngressClass defines which controller will implement the resource. This replaces the deprecated `kubernetes.io/ingress.class` annotation. For backwards compatibility, when that annotation is set, it must be given precedence over this field. The controller may emit a warning if the field and annotation have different values. Implementations of this API should ignore Ingresses without a class specified. An IngressClass resource may be marked as default, which can be used to set a default value for this field. For more information, refer to the IngressClass documentation.", + Type: []string{"string"}, + Format: "", + }, + }, + "defaultBackend": { + SchemaProps: spec.SchemaProps{ + Description: "DefaultBackend is the backend that should handle requests that don't match any rule. If Rules are not specified, DefaultBackend must be specified. If DefaultBackend is not set, the handling of requests that do not match any of the rules will be up to the Ingress controller.", + Ref: ref("k8s.io/api/networking/v1.IngressBackend"), + }, + }, + "tls": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1.IngressTLS"), + }, + }, + }, + }, + }, + "rules": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1.IngressRule"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.IngressBackend", "k8s.io/api/networking/v1.IngressRule", "k8s.io/api/networking/v1.IngressTLS"}, + } +} + +func schema_k8sio_api_networking_v1_IngressStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressStatus describe the current state of the Ingress.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "loadBalancer": { + SchemaProps: spec.SchemaProps{ + Description: "LoadBalancer contains the current status of the load-balancer.", + Ref: ref("k8s.io/api/core/v1.LoadBalancerStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LoadBalancerStatus"}, + } +} + +func schema_k8sio_api_networking_v1_IngressTLS(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressTLS describes the transport layer security associated with an Ingress.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "hosts": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "secretName": { + SchemaProps: spec.SchemaProps{ + Description: "SecretName is the name of the secret used to terminate TLS traffic on port 443. Field is left optional to allow TLS routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_networking_v1_NetworkPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NetworkPolicy describes what network traffic is allowed for a set of Pods", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired behavior for this NetworkPolicy.", + Ref: ref("k8s.io/api/networking/v1.NetworkPolicySpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.NetworkPolicySpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_networking_v1_NetworkPolicyEgressRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ports": { + SchemaProps: spec.SchemaProps{ + Description: "List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1.NetworkPolicyPort"), + }, + }, + }, + }, + }, + "to": { + SchemaProps: spec.SchemaProps{ + Description: "List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1.NetworkPolicyPeer"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.NetworkPolicyPeer", "k8s.io/api/networking/v1.NetworkPolicyPort"}, + } +} + +func schema_k8sio_api_networking_v1_NetworkPolicyIngressRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ports": { + SchemaProps: spec.SchemaProps{ + Description: "List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1.NetworkPolicyPort"), + }, + }, + }, + }, + }, + "from": { + SchemaProps: spec.SchemaProps{ + Description: "List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the from list.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1.NetworkPolicyPeer"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.NetworkPolicyPeer", "k8s.io/api/networking/v1.NetworkPolicyPort"}, + } +} + +func schema_k8sio_api_networking_v1_NetworkPolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NetworkPolicyList is a list of NetworkPolicy objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of schema objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1.NetworkPolicy"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.NetworkPolicy", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_networking_v1_NetworkPolicyPeer(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NetworkPolicyPeer describes a peer to allow traffic to/from. Only certain combinations of fields are allowed", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "podSelector": { + SchemaProps: spec.SchemaProps{ + Description: "This is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods.\n\nIf NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "namespaceSelector": { + SchemaProps: spec.SchemaProps{ + Description: "Selects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces.\n\nIf PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "ipBlock": { + SchemaProps: spec.SchemaProps{ + Description: "IPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be.", + Ref: ref("k8s.io/api/networking/v1.IPBlock"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.IPBlock", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_networking_v1_NetworkPolicyPort(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NetworkPolicyPort describes a port to allow traffic on", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "protocol": { + SchemaProps: spec.SchemaProps{ + Description: "The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_networking_v1_NetworkPolicySpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NetworkPolicySpec provides the specification of a NetworkPolicy", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "podSelector": { + SchemaProps: spec.SchemaProps{ + Description: "Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "ingress": { + SchemaProps: spec.SchemaProps{ + Description: "List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1.NetworkPolicyIngressRule"), + }, + }, + }, + }, + }, + "egress": { + SchemaProps: spec.SchemaProps{ + Description: "List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1.NetworkPolicyEgressRule"), + }, + }, + }, + }, + }, + "policyTypes": { + SchemaProps: spec.SchemaProps{ + Description: "List of rule types that the NetworkPolicy relates to. Valid options are \"Ingress\", \"Egress\", or \"Ingress,Egress\". If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"podSelector"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1.NetworkPolicyEgressRule", "k8s.io/api/networking/v1.NetworkPolicyIngressRule", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_networking_v1_ServiceBackendPort(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceBackendPort is the service port being referenced.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the name of the port on the Service. This is a mutually exclusive setting with \"Number\".", + Type: []string{"string"}, + Format: "", + }, + }, + "number": { + SchemaProps: spec.SchemaProps{ + Description: "Number is the numerical port number (e.g. 80) on the Service. This is a mutually exclusive setting with \"Name\".", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_networking_v1beta1_HTTPIngressPath(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HTTPIngressPath associates a path with a backend. Incoming urls matching the path are forwarded to the backend.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "path": { + SchemaProps: spec.SchemaProps{ + Description: "Path is matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. When unspecified, all paths from incoming requests are matched.", + Type: []string{"string"}, + Format: "", + }, + }, + "pathType": { + SchemaProps: spec.SchemaProps{ + Description: "PathType determines the interpretation of the Path matching. PathType can be one of the following values: * Exact: Matches the URL path exactly. * Prefix: Matches based on a URL path prefix split by '/'. Matching is\n done on a path element by element basis. A path element refers is the\n list of labels in the path split by the '/' separator. A request is a\n match for path p if every p is an element-wise prefix of p of the\n request path. Note that if the last element of the path is a substring\n of the last element in request path, it is not a match (e.g. /foo/bar\n matches /foo/bar/baz, but does not match /foo/barbaz).\n* ImplementationSpecific: Interpretation of the Path matching is up to\n the IngressClass. Implementations can treat this as a separate PathType\n or treat it identically to Prefix or Exact path types.\nImplementations are required to support all path types. Defaults to ImplementationSpecific.", + Type: []string{"string"}, + Format: "", + }, + }, + "backend": { + SchemaProps: spec.SchemaProps{ + Description: "Backend defines the referenced service endpoint to which the traffic will be forwarded to.", + Ref: ref("k8s.io/api/networking/v1beta1.IngressBackend"), + }, + }, + }, + Required: []string{"backend"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1beta1.IngressBackend"}, + } +} + +func schema_k8sio_api_networking_v1beta1_HTTPIngressRuleValue(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http:///? -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "paths": { + SchemaProps: spec.SchemaProps{ + Description: "A collection of paths that map requests to backends.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1beta1.HTTPIngressPath"), + }, + }, + }, + }, + }, + }, + Required: []string{"paths"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1beta1.HTTPIngressPath"}, + } +} + +func schema_k8sio_api_networking_v1beta1_Ingress(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/networking/v1beta1.IngressSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/networking/v1beta1.IngressStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1beta1.IngressSpec", "k8s.io/api/networking/v1beta1.IngressStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_networking_v1beta1_IngressBackend(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressBackend describes all endpoints for a given service and port.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "serviceName": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the name of the referenced service.", + Type: []string{"string"}, + Format: "", + }, + }, + "servicePort": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the port of the referenced service.", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "Resource is an ObjectRef to another Kubernetes resource in the namespace of the Ingress object. If resource is specified, serviceName and servicePort must not be specified.", + Ref: ref("k8s.io/api/core/v1.TypedLocalObjectReference"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.TypedLocalObjectReference", "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_networking_v1beta1_IngressClass(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressClass represents the class of the Ingress, referenced by the Ingress Spec. The `ingressclass.kubernetes.io/is-default-class` annotation can be used to indicate that an IngressClass should be considered default. When a single IngressClass resource has this annotation set to true, new Ingress resources without a class specified will be assigned this default class.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec is the desired state of the IngressClass. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/networking/v1beta1.IngressClassSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1beta1.IngressClassSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_networking_v1beta1_IngressClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressClassList is a collection of IngressClasses.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of IngressClasses.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1beta1.IngressClass"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1beta1.IngressClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_networking_v1beta1_IngressClassSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressClassSpec provides information about the class of an Ingress.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "controller": { + SchemaProps: spec.SchemaProps{ + Description: "Controller refers to the name of the controller that should handle this class. This allows for different \"flavors\" that are controlled by the same controller. For example, you may have different Parameters for the same implementing controller. This should be specified as a domain-prefixed path no more than 250 characters in length, e.g. \"acme.io/ingress-controller\". This field is immutable.", + Type: []string{"string"}, + Format: "", + }, + }, + "parameters": { + SchemaProps: spec.SchemaProps{ + Description: "Parameters is a link to a custom resource containing additional configuration for the controller. This is optional if the controller does not require extra parameters.", + Ref: ref("k8s.io/api/core/v1.TypedLocalObjectReference"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.TypedLocalObjectReference"}, + } +} + +func schema_k8sio_api_networking_v1beta1_IngressList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressList is a collection of Ingress.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of Ingress.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1beta1.Ingress"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1beta1.Ingress", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_networking_v1beta1_IngressRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "host": { + SchemaProps: spec.SchemaProps{ + Description: "Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in RFC 3986: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to\n the IP in the Spec of the parent Ingress.\n2. The `:` delimiter is not respected because ports are not allowed.\n\t Currently the port of an Ingress is implicitly :80 for http and\n\t :443 for https.\nBoth these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.\n\nHost can be \"precise\" which is a domain name without the terminating dot of a network host (e.g. \"foo.bar.com\") or \"wildcard\", which is a domain name prefixed with a single wildcard label (e.g. \"*.foo.com\"). The wildcard character '*' must appear by itself as the first DNS label and matches only a single label. You cannot have a wildcard label by itself (e.g. Host == \"*\"). Requests will be matched against the Host field in the following way: 1. If Host is precise, the request matches this rule if the http host header is equal to Host. 2. If Host is a wildcard, then the request matches this rule if the http host header is to equal to the suffix (removing the first label) of the wildcard rule.", + Type: []string{"string"}, + Format: "", + }, + }, + "http": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1beta1.HTTPIngressRuleValue"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1beta1.HTTPIngressRuleValue"}, + } +} + +func schema_k8sio_api_networking_v1beta1_IngressRuleValue(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressRuleValue represents a rule to apply against incoming requests. If the rule is satisfied, the request is routed to the specified backend. Currently mixing different types of rules in a single Ingress is disallowed, so exactly one of the following must be set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "http": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1beta1.HTTPIngressRuleValue"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1beta1.HTTPIngressRuleValue"}, + } +} + +func schema_k8sio_api_networking_v1beta1_IngressSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressSpec describes the Ingress the user wishes to exist.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ingressClassName": { + SchemaProps: spec.SchemaProps{ + Description: "IngressClassName is the name of the IngressClass cluster resource. The associated IngressClass defines which controller will implement the resource. This replaces the deprecated `kubernetes.io/ingress.class` annotation. For backwards compatibility, when that annotation is set, it must be given precedence over this field. The controller may emit a warning if the field and annotation have different values. Implementations of this API should ignore Ingresses without a class specified. An IngressClass resource may be marked as default, which can be used to set a default value for this field. For more information, refer to the IngressClass documentation.", + Type: []string{"string"}, + Format: "", + }, + }, + "backend": { + SchemaProps: spec.SchemaProps{ + Description: "A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.", + Ref: ref("k8s.io/api/networking/v1beta1.IngressBackend"), + }, + }, + "tls": { + SchemaProps: spec.SchemaProps{ + Description: "TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1beta1.IngressTLS"), + }, + }, + }, + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/networking/v1beta1.IngressRule"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/networking/v1beta1.IngressBackend", "k8s.io/api/networking/v1beta1.IngressRule", "k8s.io/api/networking/v1beta1.IngressTLS"}, + } +} + +func schema_k8sio_api_networking_v1beta1_IngressStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressStatus describe the current state of the Ingress.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "loadBalancer": { + SchemaProps: spec.SchemaProps{ + Description: "LoadBalancer contains the current status of the load-balancer.", + Ref: ref("k8s.io/api/core/v1.LoadBalancerStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.LoadBalancerStatus"}, + } +} + +func schema_k8sio_api_networking_v1beta1_IngressTLS(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IngressTLS describes the transport layer security associated with an Ingress.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "hosts": { + SchemaProps: spec.SchemaProps{ + Description: "Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "secretName": { + SchemaProps: spec.SchemaProps{ + Description: "SecretName is the name of the secret used to terminate TLS traffic on port 443. Field is left optional to allow TLS routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_node_v1alpha1_Overhead(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Overhead structure represents the resource overhead associated with running a pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "podFixed": { + SchemaProps: spec.SchemaProps{ + Description: "PodFixed represents the fixed resource overhead associated with running a pod.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_node_v1alpha1_RuntimeClass(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RuntimeClass defines a class of container runtime supported in the cluster. The RuntimeClass is used to determine which container runtime is used to run all containers in a pod. RuntimeClasses are (currently) manually defined by a user or cluster provisioner, and referenced in the PodSpec. The Kubelet is responsible for resolving the RuntimeClassName reference before running the pod. For more details, see https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the RuntimeClass More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Ref: ref("k8s.io/api/node/v1alpha1.RuntimeClassSpec"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/node/v1alpha1.RuntimeClassSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_node_v1alpha1_RuntimeClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RuntimeClassList is a list of RuntimeClass objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of schema objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/node/v1alpha1.RuntimeClass"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/node/v1alpha1.RuntimeClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_node_v1alpha1_RuntimeClassSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RuntimeClassSpec is a specification of a RuntimeClass. It contains parameters that are required to describe the RuntimeClass to the Container Runtime Interface (CRI) implementation, as well as any other components that need to understand how the pod will be run. The RuntimeClassSpec is immutable.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "runtimeHandler": { + SchemaProps: spec.SchemaProps{ + Description: "RuntimeHandler specifies the underlying runtime and configuration that the CRI implementation will use to handle pods of this class. The possible values are specific to the node & CRI configuration. It is assumed that all handlers are available on every node, and handlers of the same name are equivalent on every node. For example, a handler called \"runc\" might specify that the runc OCI runtime (using native Linux containers) will be used to run the containers in a pod. The RuntimeHandler must conform to the DNS Label (RFC 1123) requirements and is immutable.", + Type: []string{"string"}, + Format: "", + }, + }, + "overhead": { + SchemaProps: spec.SchemaProps{ + Description: "Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. For more details, see https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature.", + Ref: ref("k8s.io/api/node/v1alpha1.Overhead"), + }, + }, + "scheduling": { + SchemaProps: spec.SchemaProps{ + Description: "Scheduling holds the scheduling constraints to ensure that pods running with this RuntimeClass are scheduled to nodes that support it. If scheduling is nil, this RuntimeClass is assumed to be supported by all nodes.", + Ref: ref("k8s.io/api/node/v1alpha1.Scheduling"), + }, + }, + }, + Required: []string{"runtimeHandler"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/node/v1alpha1.Overhead", "k8s.io/api/node/v1alpha1.Scheduling"}, + } +} + +func schema_k8sio_api_node_v1alpha1_Scheduling(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Scheduling specifies the scheduling constraints for nodes supporting a RuntimeClass.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "nodeSelector": { + SchemaProps: spec.SchemaProps{ + Description: "nodeSelector lists labels that must be present on nodes that support this RuntimeClass. Pods using this RuntimeClass can only be scheduled to a node matched by this selector. The RuntimeClass nodeSelector is merged with a pod's existing nodeSelector. Any conflicts will cause the pod to be rejected in admission.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "tolerations": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "tolerations are appended (excluding duplicates) to pods running with this RuntimeClass during admission, effectively unioning the set of nodes tolerated by the pod and the RuntimeClass.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Toleration"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.Toleration"}, + } +} + +func schema_k8sio_api_node_v1beta1_Overhead(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Overhead structure represents the resource overhead associated with running a pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "podFixed": { + SchemaProps: spec.SchemaProps{ + Description: "PodFixed represents the fixed resource overhead associated with running a pod.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_k8sio_api_node_v1beta1_RuntimeClass(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RuntimeClass defines a class of container runtime supported in the cluster. The RuntimeClass is used to determine which container runtime is used to run all containers in a pod. RuntimeClasses are (currently) manually defined by a user or cluster provisioner, and referenced in the PodSpec. The Kubelet is responsible for resolving the RuntimeClassName reference before running the pod. For more details, see https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "handler": { + SchemaProps: spec.SchemaProps{ + Description: "Handler specifies the underlying runtime and configuration that the CRI implementation will use to handle pods of this class. The possible values are specific to the node & CRI configuration. It is assumed that all handlers are available on every node, and handlers of the same name are equivalent on every node. For example, a handler called \"runc\" might specify that the runc OCI runtime (using native Linux containers) will be used to run the containers in a pod. The Handler must conform to the DNS Label (RFC 1123) requirements, and is immutable.", + Type: []string{"string"}, + Format: "", + }, + }, + "overhead": { + SchemaProps: spec.SchemaProps{ + Description: "Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. For more details, see https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature.", + Ref: ref("k8s.io/api/node/v1beta1.Overhead"), + }, + }, + "scheduling": { + SchemaProps: spec.SchemaProps{ + Description: "Scheduling holds the scheduling constraints to ensure that pods running with this RuntimeClass are scheduled to nodes that support it. If scheduling is nil, this RuntimeClass is assumed to be supported by all nodes.", + Ref: ref("k8s.io/api/node/v1beta1.Scheduling"), + }, + }, + }, + Required: []string{"handler"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/node/v1beta1.Overhead", "k8s.io/api/node/v1beta1.Scheduling", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_node_v1beta1_RuntimeClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RuntimeClassList is a list of RuntimeClass objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of schema objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/node/v1beta1.RuntimeClass"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/node/v1beta1.RuntimeClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_node_v1beta1_Scheduling(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Scheduling specifies the scheduling constraints for nodes supporting a RuntimeClass.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "nodeSelector": { + SchemaProps: spec.SchemaProps{ + Description: "nodeSelector lists labels that must be present on nodes that support this RuntimeClass. Pods using this RuntimeClass can only be scheduled to a node matched by this selector. The RuntimeClass nodeSelector is merged with a pod's existing nodeSelector. Any conflicts will cause the pod to be rejected in admission.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "tolerations": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "tolerations are appended (excluding duplicates) to pods running with this RuntimeClass during admission, effectively unioning the set of nodes tolerated by the pod and the RuntimeClass.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Toleration"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.Toleration"}, + } +} + +func schema_k8sio_api_policy_v1beta1_AllowedCSIDriver(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the registered name of the CSI driver", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name"}, + }, + }, + } +} + +func schema_k8sio_api_policy_v1beta1_AllowedFlexVolume(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AllowedFlexVolume represents a single Flexvolume that is allowed to be used.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "driver": { + SchemaProps: spec.SchemaProps{ + Description: "driver is the name of the Flexvolume driver.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"driver"}, + }, + }, + } +} + +func schema_k8sio_api_policy_v1beta1_AllowedHostPath(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "pathPrefix": { + SchemaProps: spec.SchemaProps{ + Description: "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_policy_v1beta1_Eviction(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod. A request to cause such an eviction is created by POSTing to .../pods//evictions.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "ObjectMeta describes the pod that is being evicted.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "deleteOptions": { + SchemaProps: spec.SchemaProps{ + Description: "DeleteOptions may be provided", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.DeleteOptions"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.DeleteOptions", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_policy_v1beta1_FSGroupStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "FSGroupStrategyOptions defines the strategy type and options used to create the strategy.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "rule": { + SchemaProps: spec.SchemaProps{ + Description: "rule is the strategy that will dictate what FSGroup is used in the SecurityContext.", + Type: []string{"string"}, + Format: "", + }, + }, + "ranges": { + SchemaProps: spec.SchemaProps{ + Description: "ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/policy/v1beta1.IDRange"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/policy/v1beta1.IDRange"}, + } +} + +func schema_k8sio_api_policy_v1beta1_HostPortRange(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HostPortRange defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "min": { + SchemaProps: spec.SchemaProps{ + Description: "min is the start of the range, inclusive.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "max": { + SchemaProps: spec.SchemaProps{ + Description: "max is the end of the range, inclusive.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"min", "max"}, + }, + }, + } +} + +func schema_k8sio_api_policy_v1beta1_IDRange(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IDRange provides a min/max of an allowed range of IDs.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "min": { + SchemaProps: spec.SchemaProps{ + Description: "min is the start of the range, inclusive.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "max": { + SchemaProps: spec.SchemaProps{ + Description: "max is the end of the range, inclusive.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + Required: []string{"min", "max"}, + }, + }, + } +} + +func schema_k8sio_api_policy_v1beta1_PodDisruptionBudget(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired behavior of the PodDisruptionBudget.", + Ref: ref("k8s.io/api/policy/v1beta1.PodDisruptionBudgetSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Most recently observed status of the PodDisruptionBudget.", + Ref: ref("k8s.io/api/policy/v1beta1.PodDisruptionBudgetStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/policy/v1beta1.PodDisruptionBudgetSpec", "k8s.io/api/policy/v1beta1.PodDisruptionBudgetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_policy_v1beta1_PodDisruptionBudgetList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodDisruptionBudgetList is a collection of PodDisruptionBudgets.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/policy/v1beta1.PodDisruptionBudget"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/policy/v1beta1.PodDisruptionBudget", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_policy_v1beta1_PodDisruptionBudgetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodDisruptionBudgetSpec is a description of a PodDisruptionBudget.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "minAvailable": { + SchemaProps: spec.SchemaProps{ + Description: "An eviction is allowed if at least \"minAvailable\" pods selected by \"selector\" will still be available after the eviction, i.e. even in the absence of the evicted pod. So for example you can prevent all voluntary evictions by specifying \"100%\".", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "Label query over pods whose evictions are managed by the disruption budget.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "maxUnavailable": { + SchemaProps: spec.SchemaProps{ + Description: "An eviction is allowed if at most \"maxUnavailable\" pods selected by \"selector\" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with \"minAvailable\".", + Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector", "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, + } +} + +func schema_k8sio_api_policy_v1beta1_PodDisruptionBudgetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodDisruptionBudgetStatus represents information about the status of a PodDisruptionBudget. Status may trail the actual state of a system.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "Most recent generation observed when updating this PDB status. DisruptionsAllowed and other status information is valid only if observedGeneration equals to PDB's object generation.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "disruptedPods": { + SchemaProps: spec.SchemaProps{ + Description: "DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + }, + }, + }, + "disruptionsAllowed": { + SchemaProps: spec.SchemaProps{ + Description: "Number of pod disruptions that are currently allowed.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "currentHealthy": { + SchemaProps: spec.SchemaProps{ + Description: "current number of healthy pods", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "desiredHealthy": { + SchemaProps: spec.SchemaProps{ + Description: "minimum desired number of healthy pods", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "expectedPods": { + SchemaProps: spec.SchemaProps{ + Description: "total number of pods counted by this disruption budget", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"disruptionsAllowed", "currentHealthy", "desiredHealthy", "expectedPods"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_policy_v1beta1_PodSecurityPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "spec defines the policy enforced.", + Ref: ref("k8s.io/api/policy/v1beta1.PodSecurityPolicySpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/policy/v1beta1.PodSecurityPolicySpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_policy_v1beta1_PodSecurityPolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodSecurityPolicyList is a list of PodSecurityPolicy objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is a list of schema objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/policy/v1beta1.PodSecurityPolicy"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/policy/v1beta1.PodSecurityPolicy", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_policy_v1beta1_PodSecurityPolicySpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodSecurityPolicySpec defines the policy enforced.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "privileged": { + SchemaProps: spec.SchemaProps{ + Description: "privileged determines if a pod can request to be run as privileged.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "defaultAddCapabilities": { + SchemaProps: spec.SchemaProps{ + Description: "defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "requiredDropCapabilities": { + SchemaProps: spec.SchemaProps{ + Description: "requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "allowedCapabilities": { + SchemaProps: spec.SchemaProps{ + Description: "allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "volumes": { + SchemaProps: spec.SchemaProps{ + Description: "volumes is an allowlist of volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "hostNetwork": { + SchemaProps: spec.SchemaProps{ + Description: "hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "hostPorts": { + SchemaProps: spec.SchemaProps{ + Description: "hostPorts determines which host port ranges are allowed to be exposed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/policy/v1beta1.HostPortRange"), + }, + }, + }, + }, + }, + "hostPID": { + SchemaProps: spec.SchemaProps{ + Description: "hostPID determines if the policy allows the use of HostPID in the pod spec.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "hostIPC": { + SchemaProps: spec.SchemaProps{ + Description: "hostIPC determines if the policy allows the use of HostIPC in the pod spec.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "seLinux": { + SchemaProps: spec.SchemaProps{ + Description: "seLinux is the strategy that will dictate the allowable labels that may be set.", + Ref: ref("k8s.io/api/policy/v1beta1.SELinuxStrategyOptions"), + }, + }, + "runAsUser": { + SchemaProps: spec.SchemaProps{ + Description: "runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.", + Ref: ref("k8s.io/api/policy/v1beta1.RunAsUserStrategyOptions"), + }, + }, + "runAsGroup": { + SchemaProps: spec.SchemaProps{ + Description: "RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled.", + Ref: ref("k8s.io/api/policy/v1beta1.RunAsGroupStrategyOptions"), + }, + }, + "supplementalGroups": { + SchemaProps: spec.SchemaProps{ + Description: "supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.", + Ref: ref("k8s.io/api/policy/v1beta1.SupplementalGroupsStrategyOptions"), + }, + }, + "fsGroup": { + SchemaProps: spec.SchemaProps{ + Description: "fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.", + Ref: ref("k8s.io/api/policy/v1beta1.FSGroupStrategyOptions"), + }, + }, + "readOnlyRootFilesystem": { + SchemaProps: spec.SchemaProps{ + Description: "readOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "defaultAllowPrivilegeEscalation": { + SchemaProps: spec.SchemaProps{ + Description: "defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "allowPrivilegeEscalation": { + SchemaProps: spec.SchemaProps{ + Description: "allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "allowedHostPaths": { + SchemaProps: spec.SchemaProps{ + Description: "allowedHostPaths is an allowlist of host paths. Empty indicates that all host paths may be used.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/policy/v1beta1.AllowedHostPath"), + }, + }, + }, + }, + }, + "allowedFlexVolumes": { + SchemaProps: spec.SchemaProps{ + Description: "allowedFlexVolumes is an allowlist of Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/policy/v1beta1.AllowedFlexVolume"), + }, + }, + }, + }, + }, + "allowedCSIDrivers": { + SchemaProps: spec.SchemaProps{ + Description: "AllowedCSIDrivers is an allowlist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. An empty value indicates that any CSI driver can be used for inline ephemeral volumes. This is a beta field, and is only honored if the API server enables the CSIInlineVolume feature gate.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/policy/v1beta1.AllowedCSIDriver"), + }, + }, + }, + }, + }, + "allowedUnsafeSysctls": { + SchemaProps: spec.SchemaProps{ + Description: "allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to allowlist all allowed unsafe sysctls explicitly to avoid rejection.\n\nExamples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "forbiddenSysctls": { + SchemaProps: spec.SchemaProps{ + Description: "forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n\nExamples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "allowedProcMountTypes": { + SchemaProps: spec.SchemaProps{ + Description: "AllowedProcMountTypes is an allowlist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "runtimeClass": { + SchemaProps: spec.SchemaProps{ + Description: "runtimeClass is the strategy that will dictate the allowable RuntimeClasses for a pod. If this field is omitted, the pod's runtimeClassName field is unrestricted. Enforcement of this field depends on the RuntimeClass feature gate being enabled.", + Ref: ref("k8s.io/api/policy/v1beta1.RuntimeClassStrategyOptions"), + }, + }, + }, + Required: []string{"seLinux", "runAsUser", "supplementalGroups", "fsGroup"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/policy/v1beta1.AllowedCSIDriver", "k8s.io/api/policy/v1beta1.AllowedFlexVolume", "k8s.io/api/policy/v1beta1.AllowedHostPath", "k8s.io/api/policy/v1beta1.FSGroupStrategyOptions", "k8s.io/api/policy/v1beta1.HostPortRange", "k8s.io/api/policy/v1beta1.RunAsGroupStrategyOptions", "k8s.io/api/policy/v1beta1.RunAsUserStrategyOptions", "k8s.io/api/policy/v1beta1.RuntimeClassStrategyOptions", "k8s.io/api/policy/v1beta1.SELinuxStrategyOptions", "k8s.io/api/policy/v1beta1.SupplementalGroupsStrategyOptions"}, + } +} + +func schema_k8sio_api_policy_v1beta1_RunAsGroupStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "rule": { + SchemaProps: spec.SchemaProps{ + Description: "rule is the strategy that will dictate the allowable RunAsGroup values that may be set.", + Type: []string{"string"}, + Format: "", + }, + }, + "ranges": { + SchemaProps: spec.SchemaProps{ + Description: "ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/policy/v1beta1.IDRange"), + }, + }, + }, + }, + }, + }, + Required: []string{"rule"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/policy/v1beta1.IDRange"}, + } +} + +func schema_k8sio_api_policy_v1beta1_RunAsUserStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "rule": { + SchemaProps: spec.SchemaProps{ + Description: "rule is the strategy that will dictate the allowable RunAsUser values that may be set.", + Type: []string{"string"}, + Format: "", + }, + }, + "ranges": { + SchemaProps: spec.SchemaProps{ + Description: "ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/policy/v1beta1.IDRange"), + }, + }, + }, + }, + }, + }, + Required: []string{"rule"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/policy/v1beta1.IDRange"}, + } +} + +func schema_k8sio_api_policy_v1beta1_RuntimeClassStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RuntimeClassStrategyOptions define the strategy that will dictate the allowable RuntimeClasses for a pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "allowedRuntimeClassNames": { + SchemaProps: spec.SchemaProps{ + Description: "allowedRuntimeClassNames is an allowlist of RuntimeClass names that may be specified on a pod. A value of \"*\" means that any RuntimeClass name is allowed, and must be the only item in the list. An empty list requires the RuntimeClassName field to be unset.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "defaultRuntimeClassName": { + SchemaProps: spec.SchemaProps{ + Description: "defaultRuntimeClassName is the default RuntimeClassName to set on the pod. The default MUST be allowed by the allowedRuntimeClassNames list. A value of nil does not mutate the Pod.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"allowedRuntimeClassNames"}, + }, + }, + } +} + +func schema_k8sio_api_policy_v1beta1_SELinuxStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SELinuxStrategyOptions defines the strategy type and any options used to create the strategy.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "rule": { + SchemaProps: spec.SchemaProps{ + Description: "rule is the strategy that will dictate the allowable labels that may be set.", + Type: []string{"string"}, + Format: "", + }, + }, + "seLinuxOptions": { + SchemaProps: spec.SchemaProps{ + Description: "seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/", + Ref: ref("k8s.io/api/core/v1.SELinuxOptions"), + }, + }, + }, + Required: []string{"rule"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.SELinuxOptions"}, + } +} + +func schema_k8sio_api_policy_v1beta1_SupplementalGroupsStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "rule": { + SchemaProps: spec.SchemaProps{ + Description: "rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.", + Type: []string{"string"}, + Format: "", + }, + }, + "ranges": { + SchemaProps: spec.SchemaProps{ + Description: "ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/policy/v1beta1.IDRange"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/policy/v1beta1.IDRange"}, + } +} + +func schema_k8sio_api_rbac_v1_AggregationRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "clusterRoleSelectors": { + SchemaProps: spec.SchemaProps{ + Description: "ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_rbac_v1_ClusterRole(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "Rules holds all the PolicyRules for this ClusterRole", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1.PolicyRule"), + }, + }, + }, + }, + }, + "aggregationRule": { + SchemaProps: spec.SchemaProps{ + Description: "AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.", + Ref: ref("k8s.io/api/rbac/v1.AggregationRule"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1.AggregationRule", "k8s.io/api/rbac/v1.PolicyRule", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_rbac_v1_ClusterRoleBinding(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "subjects": { + SchemaProps: spec.SchemaProps{ + Description: "Subjects holds references to the objects the role applies to.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1.Subject"), + }, + }, + }, + }, + }, + "roleRef": { + SchemaProps: spec.SchemaProps{ + Description: "RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", + Ref: ref("k8s.io/api/rbac/v1.RoleRef"), + }, + }, + }, + Required: []string{"roleRef"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1.RoleRef", "k8s.io/api/rbac/v1.Subject", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_rbac_v1_ClusterRoleBindingList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterRoleBindingList is a collection of ClusterRoleBindings", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of ClusterRoleBindings", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1.ClusterRoleBinding"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1.ClusterRoleBinding", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_rbac_v1_ClusterRoleList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterRoleList is a collection of ClusterRoles", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of ClusterRoles", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1.ClusterRole"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1.ClusterRole", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_rbac_v1_PolicyRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "verbs": { + SchemaProps: spec.SchemaProps{ + Description: "Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "apiGroups": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources is a list of resources this rule applies to. ResourceAll represents all resources.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resourceNames": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "nonResourceURLs": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"verbs"}, + }, + }, + } +} + +func schema_k8sio_api_rbac_v1_Role(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "Rules holds all the PolicyRules for this Role", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1.PolicyRule"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1.PolicyRule", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_rbac_v1_RoleBinding(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "subjects": { + SchemaProps: spec.SchemaProps{ + Description: "Subjects holds references to the objects the role applies to.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1.Subject"), + }, + }, + }, + }, + }, + "roleRef": { + SchemaProps: spec.SchemaProps{ + Description: "RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", + Ref: ref("k8s.io/api/rbac/v1.RoleRef"), + }, + }, + }, + Required: []string{"roleRef"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1.RoleRef", "k8s.io/api/rbac/v1.Subject", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_rbac_v1_RoleBindingList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RoleBindingList is a collection of RoleBindings", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of RoleBindings", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1.RoleBinding"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1.RoleBinding", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_rbac_v1_RoleList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RoleList is a collection of Roles", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of Roles", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1.Role"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1.Role", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_rbac_v1_RoleRef(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RoleRef contains information that points to the role being used", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "apiGroup": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroup is the group for the resource being referenced", + Type: []string{"string"}, + Format: "", + }, + }, + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is the type of resource being referenced", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the name of resource being referenced", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"apiGroup", "kind", "name"}, + }, + }, + } +} + +func schema_k8sio_api_rbac_v1_Subject(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.", + Type: []string{"string"}, + Format: "", + }, + }, + "apiGroup": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroup holds the API group of the referenced subject. Defaults to \"\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io\" for User and Group subjects.", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the object being referenced.", + Type: []string{"string"}, + Format: "", + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace of the referenced object. If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"kind", "name"}, + }, + }, + } +} + +func schema_k8sio_api_rbac_v1alpha1_AggregationRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "clusterRoleSelectors": { + SchemaProps: spec.SchemaProps{ + Description: "ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_rbac_v1alpha1_ClusterRole(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding. Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 ClusterRole, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "Rules holds all the PolicyRules for this ClusterRole", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1alpha1.PolicyRule"), + }, + }, + }, + }, + }, + "aggregationRule": { + SchemaProps: spec.SchemaProps{ + Description: "AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.", + Ref: ref("k8s.io/api/rbac/v1alpha1.AggregationRule"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1alpha1.AggregationRule", "k8s.io/api/rbac/v1alpha1.PolicyRule", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_rbac_v1alpha1_ClusterRoleBinding(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject. Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 ClusterRoleBinding, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "subjects": { + SchemaProps: spec.SchemaProps{ + Description: "Subjects holds references to the objects the role applies to.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1alpha1.Subject"), + }, + }, + }, + }, + }, + "roleRef": { + SchemaProps: spec.SchemaProps{ + Description: "RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", + Ref: ref("k8s.io/api/rbac/v1alpha1.RoleRef"), + }, + }, + }, + Required: []string{"roleRef"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1alpha1.RoleRef", "k8s.io/api/rbac/v1alpha1.Subject", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_rbac_v1alpha1_ClusterRoleBindingList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterRoleBindingList is a collection of ClusterRoleBindings. Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 ClusterRoleBindings, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of ClusterRoleBindings", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1alpha1.ClusterRoleBinding"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1alpha1.ClusterRoleBinding", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_rbac_v1alpha1_ClusterRoleList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterRoleList is a collection of ClusterRoles. Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 ClusterRoles, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of ClusterRoles", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1alpha1.ClusterRole"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1alpha1.ClusterRole", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_rbac_v1alpha1_PolicyRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "verbs": { + SchemaProps: spec.SchemaProps{ + Description: "Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "apiGroups": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources is a list of resources this rule applies to. ResourceAll represents all resources.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resourceNames": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "nonResourceURLs": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"verbs"}, + }, + }, + } +} + +func schema_k8sio_api_rbac_v1alpha1_Role(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding. Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 Role, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "Rules holds all the PolicyRules for this Role", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1alpha1.PolicyRule"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1alpha1.PolicyRule", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_rbac_v1alpha1_RoleBinding(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace. Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 RoleBinding, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "subjects": { + SchemaProps: spec.SchemaProps{ + Description: "Subjects holds references to the objects the role applies to.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1alpha1.Subject"), + }, + }, + }, + }, + }, + "roleRef": { + SchemaProps: spec.SchemaProps{ + Description: "RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", + Ref: ref("k8s.io/api/rbac/v1alpha1.RoleRef"), + }, + }, + }, + Required: []string{"roleRef"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1alpha1.RoleRef", "k8s.io/api/rbac/v1alpha1.Subject", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_rbac_v1alpha1_RoleBindingList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RoleBindingList is a collection of RoleBindings Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 RoleBindingList, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of RoleBindings", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1alpha1.RoleBinding"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1alpha1.RoleBinding", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_rbac_v1alpha1_RoleList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RoleList is a collection of Roles. Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 RoleList, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of Roles", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1alpha1.Role"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1alpha1.Role", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_rbac_v1alpha1_RoleRef(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RoleRef contains information that points to the role being used", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "apiGroup": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroup is the group for the resource being referenced", + Type: []string{"string"}, + Format: "", + }, + }, + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is the type of resource being referenced", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the name of resource being referenced", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"apiGroup", "kind", "name"}, + }, + }, + } +} + +func schema_k8sio_api_rbac_v1alpha1_Subject(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion holds the API group and version of the referenced subject. Defaults to \"v1\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io/v1alpha1\" for User and Group subjects.", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the object being referenced.", + Type: []string{"string"}, + Format: "", + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace of the referenced object. If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"kind", "name"}, + }, + }, + } +} + +func schema_k8sio_api_rbac_v1beta1_AggregationRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "clusterRoleSelectors": { + SchemaProps: spec.SchemaProps{ + Description: "ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_rbac_v1beta1_ClusterRole(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding. Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 ClusterRole, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "Rules holds all the PolicyRules for this ClusterRole", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1beta1.PolicyRule"), + }, + }, + }, + }, + }, + "aggregationRule": { + SchemaProps: spec.SchemaProps{ + Description: "AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.", + Ref: ref("k8s.io/api/rbac/v1beta1.AggregationRule"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1beta1.AggregationRule", "k8s.io/api/rbac/v1beta1.PolicyRule", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_rbac_v1beta1_ClusterRoleBinding(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject. Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 ClusterRoleBinding, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "subjects": { + SchemaProps: spec.SchemaProps{ + Description: "Subjects holds references to the objects the role applies to.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1beta1.Subject"), + }, + }, + }, + }, + }, + "roleRef": { + SchemaProps: spec.SchemaProps{ + Description: "RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", + Ref: ref("k8s.io/api/rbac/v1beta1.RoleRef"), + }, + }, + }, + Required: []string{"roleRef"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1beta1.RoleRef", "k8s.io/api/rbac/v1beta1.Subject", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_rbac_v1beta1_ClusterRoleBindingList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterRoleBindingList is a collection of ClusterRoleBindings. Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 ClusterRoleBindingList, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of ClusterRoleBindings", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1beta1.ClusterRoleBinding"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1beta1.ClusterRoleBinding", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_rbac_v1beta1_ClusterRoleList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterRoleList is a collection of ClusterRoles. Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 ClusterRoles, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of ClusterRoles", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1beta1.ClusterRole"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1beta1.ClusterRole", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_rbac_v1beta1_PolicyRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "verbs": { + SchemaProps: spec.SchemaProps{ + Description: "Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "apiGroups": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources is a list of resources this rule applies to. '*' represents all resources in the specified apiGroups. '*/foo' represents the subresource 'foo' for all resources in the specified apiGroups.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resourceNames": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "nonResourceURLs": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"verbs"}, + }, + }, + } +} + +func schema_k8sio_api_rbac_v1beta1_Role(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding. Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 Role, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "Rules holds all the PolicyRules for this Role", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1beta1.PolicyRule"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1beta1.PolicyRule", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_rbac_v1beta1_RoleBinding(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace. Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 RoleBinding, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "subjects": { + SchemaProps: spec.SchemaProps{ + Description: "Subjects holds references to the objects the role applies to.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1beta1.Subject"), + }, + }, + }, + }, + }, + "roleRef": { + SchemaProps: spec.SchemaProps{ + Description: "RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", + Ref: ref("k8s.io/api/rbac/v1beta1.RoleRef"), + }, + }, + }, + Required: []string{"roleRef"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1beta1.RoleRef", "k8s.io/api/rbac/v1beta1.Subject", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_rbac_v1beta1_RoleBindingList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RoleBindingList is a collection of RoleBindings Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 RoleBindingList, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of RoleBindings", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1beta1.RoleBinding"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1beta1.RoleBinding", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_rbac_v1beta1_RoleList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RoleList is a collection of Roles Deprecated in v1.17 in favor of rbac.authorization.k8s.io/v1 RoleList, and will no longer be served in v1.22.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of Roles", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/rbac/v1beta1.Role"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/rbac/v1beta1.Role", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_rbac_v1beta1_RoleRef(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RoleRef contains information that points to the role being used", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "apiGroup": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroup is the group for the resource being referenced", + Type: []string{"string"}, + Format: "", + }, + }, + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is the type of resource being referenced", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the name of resource being referenced", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"apiGroup", "kind", "name"}, + }, + }, + } +} + +func schema_k8sio_api_rbac_v1beta1_Subject(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.", + Type: []string{"string"}, + Format: "", + }, + }, + "apiGroup": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroup holds the API group of the referenced subject. Defaults to \"\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io\" for User and Group subjects.", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the object being referenced.", + Type: []string{"string"}, + Format: "", + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace of the referenced object. If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"kind", "name"}, + }, + }, + } +} + +func schema_k8sio_api_scheduling_v1_PriorityClass(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Description: "The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "globalDefault": { + SchemaProps: spec.SchemaProps{ + Description: "globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "description": { + SchemaProps: spec.SchemaProps{ + Description: "description is an arbitrary string that usually provides guidelines on when this priority class should be used.", + Type: []string{"string"}, + Format: "", + }, + }, + "preemptionPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is beta-level, gated by the NonPreemptingPriority feature-gate.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"value"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_scheduling_v1_PriorityClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PriorityClassList is a collection of priority classes.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is the list of PriorityClasses", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/scheduling/v1.PriorityClass"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/scheduling/v1.PriorityClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_scheduling_v1alpha1_PriorityClass(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Description: "The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "globalDefault": { + SchemaProps: spec.SchemaProps{ + Description: "globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "description": { + SchemaProps: spec.SchemaProps{ + Description: "description is an arbitrary string that usually provides guidelines on when this priority class should be used.", + Type: []string{"string"}, + Format: "", + }, + }, + "preemptionPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is beta-level, gated by the NonPreemptingPriority feature-gate.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"value"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_scheduling_v1alpha1_PriorityClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PriorityClassList is a collection of priority classes.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is the list of PriorityClasses", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/scheduling/v1alpha1.PriorityClass"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/scheduling/v1alpha1.PriorityClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_scheduling_v1beta1_PriorityClass(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Description: "The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "globalDefault": { + SchemaProps: spec.SchemaProps{ + Description: "globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "description": { + SchemaProps: spec.SchemaProps{ + Description: "description is an arbitrary string that usually provides guidelines on when this priority class should be used.", + Type: []string{"string"}, + Format: "", + }, + }, + "preemptionPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is beta-level, gated by the NonPreemptingPriority feature-gate.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"value"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_scheduling_v1beta1_PriorityClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PriorityClassList is a collection of priority classes.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is the list of PriorityClasses", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/scheduling/v1beta1.PriorityClass"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/scheduling/v1beta1.PriorityClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_settings_v1alpha1_PodPreset(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodPreset is a policy resource that defines additional runtime requirements for a Pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/settings/v1alpha1.PodPresetSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/settings/v1alpha1.PodPresetSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_settings_v1alpha1_PodPresetList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodPresetList is a list of PodPreset objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is a list of schema objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/settings/v1alpha1.PodPreset"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/settings/v1alpha1.PodPreset", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_settings_v1alpha1_PodPresetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodPresetSpec is a description of a pod preset.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "Selector is a label query over a set of resources, in this case pods. Required.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "env": { + SchemaProps: spec.SchemaProps{ + Description: "Env defines the collection of EnvVar to inject into containers.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.EnvVar"), + }, + }, + }, + }, + }, + "envFrom": { + SchemaProps: spec.SchemaProps{ + Description: "EnvFrom defines the collection of EnvFromSource to inject into containers.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.EnvFromSource"), + }, + }, + }, + }, + }, + "volumes": { + SchemaProps: spec.SchemaProps{ + Description: "Volumes defines the collection of Volume to inject into the pod.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Volume"), + }, + }, + }, + }, + }, + "volumeMounts": { + SchemaProps: spec.SchemaProps{ + Description: "VolumeMounts defines the collection of VolumeMount to inject into containers.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.VolumeMount"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.EnvFromSource", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Volume", "k8s.io/api/core/v1.VolumeMount", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_k8sio_api_storage_v1_CSIDriver(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSIDriver captures information about a Container Storage Interface (CSI) volume driver deployed on the cluster. Kubernetes attach detach controller uses this object to determine whether attach is required. Kubelet uses this object to determine whether pod information needs to be passed on mount. CSIDriver objects are non-namespaced.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata. metadata.Name indicates the name of the CSI driver that this object refers to; it MUST be the same name returned by the CSI GetPluginName() call for that driver. The driver name must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), dots (.), and alphanumerics between. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the CSI Driver.", + Ref: ref("k8s.io/api/storage/v1.CSIDriverSpec"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1.CSIDriverSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_storage_v1_CSIDriverList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSIDriverList is a collection of CSIDriver objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is the list of CSIDriver", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/storage/v1.CSIDriver"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1.CSIDriver", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_storage_v1_CSIDriverSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSIDriverSpec is the specification of a CSIDriver.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "attachRequired": { + SchemaProps: spec.SchemaProps{ + Description: "attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that the Kubernetes attach detach controller should call the attach volume interface which checks the volumeattachment status and waits until the volume is attached before proceeding to mounting. The CSI external-attacher coordinates with CSI volume driver and updates the volumeattachment status when the attach operation is complete. If the CSIDriverRegistry feature gate is enabled and the value is specified to false, the attach operation will be skipped. Otherwise the attach operation will be called.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "podInfoOnMount": { + SchemaProps: spec.SchemaProps{ + Description: "If set to true, podInfoOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations. If set to false, pod information will not be passed on mount. Default is false. The CSI driver specifies podInfoOnMount as part of driver deployment. If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls. The CSI driver is responsible for parsing and validating the information passed in as VolumeContext. The following VolumeConext will be passed if podInfoOnMount is set to true. This list might grow, but the prefix will be used. \"csi.storage.k8s.io/pod.name\": pod.Name \"csi.storage.k8s.io/pod.namespace\": pod.Namespace \"csi.storage.k8s.io/pod.uid\": string(pod.UID) \"csi.storage.k8s.io/ephemeral\": \"true\" iff the volume is an ephemeral inline volume\n defined by a CSIVolumeSource, otherwise \"false\"\n\n\"csi.storage.k8s.io/ephemeral\" is a new feature in Kubernetes 1.16. It is only required for drivers which support both the \"Persistent\" and \"Ephemeral\" VolumeLifecycleMode. Other drivers can leave pod info disabled and/or ignore this field. As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when deployed on such a cluster and the deployment determines which mode that is, for example via a command line parameter of the driver.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "volumeLifecycleModes": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "set", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "volumeLifecycleModes defines what kind of volumes this CSI volume driver supports. The default if the list is empty is \"Persistent\", which is the usage defined by the CSI specification and implemented in Kubernetes via the usual PV/PVC mechanism. The other mode is \"Ephemeral\". In this mode, volumes are defined inline inside the pod spec with CSIVolumeSource and their lifecycle is tied to the lifecycle of that pod. A driver has to be aware of this because it is only going to get a NodePublishVolume call for such a volume. For more information about implementing this mode, see https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html A driver can support one or more of these modes and more modes may be added in the future. This field is beta.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "storageCapacity": { + SchemaProps: spec.SchemaProps{ + Description: "If set to true, storageCapacity indicates that the CSI volume driver wants pod scheduling to consider the storage capacity that the driver deployment will report by creating CSIStorageCapacity objects with capacity information.\n\nThe check can be enabled immediately when deploying a driver. In that case, provisioning new volumes with late binding will pause until the driver deployment has published some suitable CSIStorageCapacity object.\n\nAlternatively, the driver can be deployed with the field unset or false and it can be flipped later when storage capacity information has been published.\n\nThis is an alpha field and only available when the CSIStorageCapacity feature is enabled. The default is false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "fsGroupPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Defines if the underlying volume supports changing ownership and permission of the volume before being mounted. Refer to the specific FSGroupPolicy values for additional details. This field is alpha-level, and is only honored by servers that enable the CSIVolumeFSGroupPolicy feature gate.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_storage_v1_CSINode(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSINode holds information about all CSI drivers installed on a node. CSI drivers do not need to create the CSINode object directly. As long as they use the node-driver-registrar sidecar container, the kubelet will automatically populate the CSINode object for the CSI driver as part of kubelet plugin registration. CSINode has the same name as a node. If the object is missing, it means either there are no CSI Drivers available on the node, or the Kubelet version is low enough that it doesn't create this object. CSINode has an OwnerReference that points to the corresponding node object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "metadata.name must be the Kubernetes node name.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "spec is the specification of CSINode", + Ref: ref("k8s.io/api/storage/v1.CSINodeSpec"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1.CSINodeSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_storage_v1_CSINodeDriver(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSINodeDriver holds information about the specification of one CSI driver installed on a node", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "This is the name of the CSI driver that this object refers to. This MUST be the same name returned by the CSI GetPluginName() call for that driver.", + Type: []string{"string"}, + Format: "", + }, + }, + "nodeID": { + SchemaProps: spec.SchemaProps{ + Description: "nodeID of the node from the driver point of view. This field enables Kubernetes to communicate with storage systems that do not share the same nomenclature for nodes. For example, Kubernetes may refer to a given node as \"node1\", but the storage system may refer to the same node as \"nodeA\". When Kubernetes issues a command to the storage system to attach a volume to a specific node, it can use this field to refer to the node name using the ID that the storage system will understand, e.g. \"nodeA\" instead of \"node1\". This field is required.", + Type: []string{"string"}, + Format: "", + }, + }, + "topologyKeys": { + SchemaProps: spec.SchemaProps{ + Description: "topologyKeys is the list of keys supported by the driver. When a driver is initialized on a cluster, it provides a set of topology keys that it understands (e.g. \"company.com/zone\", \"company.com/region\"). When a driver is initialized on a node, it provides the same topology keys along with values. Kubelet will expose these topology keys as labels on its own node object. When Kubernetes does topology aware provisioning, it can use this list to determine which labels it should retrieve from the node object and pass back to the driver. It is possible for different nodes to use different topology keys. This can be empty if driver does not support topology.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "allocatable": { + SchemaProps: spec.SchemaProps{ + Description: "allocatable represents the volume resources of a node that are available for scheduling. This field is beta.", + Ref: ref("k8s.io/api/storage/v1.VolumeNodeResources"), + }, + }, + }, + Required: []string{"name", "nodeID"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1.VolumeNodeResources"}, + } +} + +func schema_k8sio_api_storage_v1_CSINodeList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSINodeList is a collection of CSINode objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is the list of CSINode", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/storage/v1.CSINode"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1.CSINode", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_storage_v1_CSINodeSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSINodeSpec holds information about the specification of all CSI drivers installed on a node", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "drivers": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "drivers is a list of information of all CSI Drivers existing on a node. If all drivers in the list are uninstalled, this can become empty.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/storage/v1.CSINodeDriver"), + }, + }, + }, + }, + }, + }, + Required: []string{"drivers"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1.CSINodeDriver"}, + } +} + +func schema_k8sio_api_storage_v1_StorageClass(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "provisioner": { + SchemaProps: spec.SchemaProps{ + Description: "Provisioner indicates the type of the provisioner.", + Type: []string{"string"}, + Format: "", + }, + }, + "parameters": { + SchemaProps: spec.SchemaProps{ + Description: "Parameters holds the parameters for the provisioner that should create volumes of this storage class.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "reclaimPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.", + Type: []string{"string"}, + Format: "", + }, + }, + "mountOptions": { + SchemaProps: spec.SchemaProps{ + Description: "Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "allowVolumeExpansion": { + SchemaProps: spec.SchemaProps{ + Description: "AllowVolumeExpansion shows whether the storage class allow volume expand", + Type: []string{"boolean"}, + Format: "", + }, + }, + "volumeBindingMode": { + SchemaProps: spec.SchemaProps{ + Description: "VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.", + Type: []string{"string"}, + Format: "", + }, + }, + "allowedTopologies": { + SchemaProps: spec.SchemaProps{ + Description: "Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.TopologySelectorTerm"), + }, + }, + }, + }, + }, + }, + Required: []string{"provisioner"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.TopologySelectorTerm", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_storage_v1_StorageClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StorageClassList is a collection of storage classes.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of StorageClasses", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/storage/v1.StorageClass"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1.StorageClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_storage_v1_VolumeAttachment(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n\nVolumeAttachment objects are non-namespaced.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.", + Ref: ref("k8s.io/api/storage/v1.VolumeAttachmentSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.", + Ref: ref("k8s.io/api/storage/v1.VolumeAttachmentStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1.VolumeAttachmentSpec", "k8s.io/api/storage/v1.VolumeAttachmentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_storage_v1_VolumeAttachmentList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachmentList is a collection of VolumeAttachment objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of VolumeAttachments", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/storage/v1.VolumeAttachment"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1.VolumeAttachment", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_storage_v1_VolumeAttachmentSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "persistentVolumeName": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the persistent volume to attach.", + Type: []string{"string"}, + Format: "", + }, + }, + "inlineVolumeSpec": { + SchemaProps: spec.SchemaProps{ + Description: "inlineVolumeSpec contains all the information necessary to attach a persistent volume defined by a pod's inline VolumeSource. This field is populated only for the CSIMigration feature. It contains translated fields from a pod's inline VolumeSource to a PersistentVolumeSpec. This field is alpha-level and is only honored by servers that enabled the CSIMigration feature.", + Ref: ref("k8s.io/api/core/v1.PersistentVolumeSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PersistentVolumeSpec"}, + } +} + +func schema_k8sio_api_storage_v1_VolumeAttachmentSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachmentSpec is the specification of a VolumeAttachment request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "attacher": { + SchemaProps: spec.SchemaProps{ + Description: "Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().", + Type: []string{"string"}, + Format: "", + }, + }, + "source": { + SchemaProps: spec.SchemaProps{ + Description: "Source represents the volume that should be attached.", + Ref: ref("k8s.io/api/storage/v1.VolumeAttachmentSource"), + }, + }, + "nodeName": { + SchemaProps: spec.SchemaProps{ + Description: "The node that the volume should be attached to.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"attacher", "source", "nodeName"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1.VolumeAttachmentSource"}, + } +} + +func schema_k8sio_api_storage_v1_VolumeAttachmentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachmentStatus is the status of a VolumeAttachment request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "attached": { + SchemaProps: spec.SchemaProps{ + Description: "Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "attachmentMetadata": { + SchemaProps: spec.SchemaProps{ + Description: "Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "attachError": { + SchemaProps: spec.SchemaProps{ + Description: "The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", + Ref: ref("k8s.io/api/storage/v1.VolumeError"), + }, + }, + "detachError": { + SchemaProps: spec.SchemaProps{ + Description: "The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.", + Ref: ref("k8s.io/api/storage/v1.VolumeError"), + }, + }, + }, + Required: []string{"attached"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1.VolumeError"}, + } +} + +func schema_k8sio_api_storage_v1_VolumeError(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeError captures an error encountered during a volume operation.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "time": { + SchemaProps: spec.SchemaProps{ + Description: "Time the error was encountered.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "String detailing the error encountered during Attach or Detach operation. This string may be logged, so it should not contain sensitive information.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_storage_v1_VolumeNodeResources(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeNodeResources is a set of resource limits for scheduling of volumes.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "count": { + SchemaProps: spec.SchemaProps{ + Description: "Maximum number of unique volumes managed by the CSI driver that can be used on a node. A volume that is both attached and mounted on a node is considered to be used once, not twice. The same rule applies for a unique volume that is shared among multiple pods on the same node. If this field is not specified, then the supported number of volumes on this node is unbounded.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_storage_v1alpha1_CSIStorageCapacity(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSIStorageCapacity stores the result of one CSI GetCapacity call. For a given StorageClass, this describes the available capacity in a particular topology segment. This can be used when considering where to instantiate new PersistentVolumes.\n\nFor example this can express things like: - StorageClass \"standard\" has \"1234 GiB\" available in \"topology.kubernetes.io/zone=us-east1\" - StorageClass \"localssd\" has \"10 GiB\" available in \"kubernetes.io/hostname=knode-abc123\"\n\nThe following three cases all imply that no capacity is available for a certain combination: - no object exists with suitable topology and storage class name - such an object exists, but the capacity is unset - such an object exists, but the capacity is zero\n\nThe producer of these objects can decide which approach is more suitable.\n\nThis is an alpha feature and only available when the CSIStorageCapacity feature is enabled.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. The name has no particular meaning. It must be be a DNS subdomain (dots allowed, 253 characters). To ensure that there are no conflicts with other CSI drivers on the cluster, the recommendation is to use csisc-, a generated name, or a reverse-domain name which ends with the unique CSI driver name.\n\nObjects are namespaced.\n\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "nodeTopology": { + SchemaProps: spec.SchemaProps{ + Description: "NodeTopology defines which nodes have access to the storage for which capacity was reported. If not set, the storage is not accessible from any node in the cluster. If empty, the storage is accessible from all nodes. This field is immutable.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + "storageClassName": { + SchemaProps: spec.SchemaProps{ + Description: "The name of the StorageClass that the reported capacity applies to. It must meet the same requirements as the name of a StorageClass object (non-empty, DNS subdomain). If that object no longer exists, the CSIStorageCapacity object is obsolete and should be removed by its creator. This field is immutable.", + Type: []string{"string"}, + Format: "", + }, + }, + "capacity": { + SchemaProps: spec.SchemaProps{ + Description: "Capacity is the value reported by the CSI driver in its GetCapacityResponse for a GetCapacityRequest with topology and parameters that match the previous fields.\n\nThe semantic is currently (CSI spec 1.2) defined as: The available capacity, in bytes, of the storage that can be used to provision volumes. If not set, that information is currently unavailable and treated like zero capacity.", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"storageClassName"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_storage_v1alpha1_CSIStorageCapacityList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSIStorageCapacityList is a collection of CSIStorageCapacity objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "name", + }, + "x-kubernetes-list-type": "map", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of CSIStorageCapacity objects.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/storage/v1alpha1.CSIStorageCapacity"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1alpha1.CSIStorageCapacity", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_storage_v1alpha1_VolumeAttachment(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n\nVolumeAttachment objects are non-namespaced.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.", + Ref: ref("k8s.io/api/storage/v1alpha1.VolumeAttachmentSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.", + Ref: ref("k8s.io/api/storage/v1alpha1.VolumeAttachmentStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1alpha1.VolumeAttachmentSpec", "k8s.io/api/storage/v1alpha1.VolumeAttachmentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_storage_v1alpha1_VolumeAttachmentList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachmentList is a collection of VolumeAttachment objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of VolumeAttachments", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/storage/v1alpha1.VolumeAttachment"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1alpha1.VolumeAttachment", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_storage_v1alpha1_VolumeAttachmentSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "persistentVolumeName": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the persistent volume to attach.", + Type: []string{"string"}, + Format: "", + }, + }, + "inlineVolumeSpec": { + SchemaProps: spec.SchemaProps{ + Description: "inlineVolumeSpec contains all the information necessary to attach a persistent volume defined by a pod's inline VolumeSource. This field is populated only for the CSIMigration feature. It contains translated fields from a pod's inline VolumeSource to a PersistentVolumeSpec. This field is alpha-level and is only honored by servers that enabled the CSIMigration feature.", + Ref: ref("k8s.io/api/core/v1.PersistentVolumeSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PersistentVolumeSpec"}, + } +} + +func schema_k8sio_api_storage_v1alpha1_VolumeAttachmentSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachmentSpec is the specification of a VolumeAttachment request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "attacher": { + SchemaProps: spec.SchemaProps{ + Description: "Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().", + Type: []string{"string"}, + Format: "", + }, + }, + "source": { + SchemaProps: spec.SchemaProps{ + Description: "Source represents the volume that should be attached.", + Ref: ref("k8s.io/api/storage/v1alpha1.VolumeAttachmentSource"), + }, + }, + "nodeName": { + SchemaProps: spec.SchemaProps{ + Description: "The node that the volume should be attached to.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"attacher", "source", "nodeName"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1alpha1.VolumeAttachmentSource"}, + } +} + +func schema_k8sio_api_storage_v1alpha1_VolumeAttachmentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachmentStatus is the status of a VolumeAttachment request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "attached": { + SchemaProps: spec.SchemaProps{ + Description: "Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "attachmentMetadata": { + SchemaProps: spec.SchemaProps{ + Description: "Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "attachError": { + SchemaProps: spec.SchemaProps{ + Description: "The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", + Ref: ref("k8s.io/api/storage/v1alpha1.VolumeError"), + }, + }, + "detachError": { + SchemaProps: spec.SchemaProps{ + Description: "The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.", + Ref: ref("k8s.io/api/storage/v1alpha1.VolumeError"), + }, + }, + }, + Required: []string{"attached"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1alpha1.VolumeError"}, + } +} + +func schema_k8sio_api_storage_v1alpha1_VolumeError(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeError captures an error encountered during a volume operation.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "time": { + SchemaProps: spec.SchemaProps{ + Description: "Time the error was encountered.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_storage_v1beta1_CSIDriver(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSIDriver captures information about a Container Storage Interface (CSI) volume driver deployed on the cluster. CSI drivers do not need to create the CSIDriver object directly. Instead they may use the cluster-driver-registrar sidecar container. When deployed with a CSI driver it automatically creates a CSIDriver object representing the driver. Kubernetes attach detach controller uses this object to determine whether attach is required. Kubelet uses this object to determine whether pod information needs to be passed on mount. CSIDriver objects are non-namespaced.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata. metadata.Name indicates the name of the CSI driver that this object refers to; it MUST be the same name returned by the CSI GetPluginName() call for that driver. The driver name must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), dots (.), and alphanumerics between. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the CSI Driver.", + Ref: ref("k8s.io/api/storage/v1beta1.CSIDriverSpec"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1beta1.CSIDriverSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_storage_v1beta1_CSIDriverList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSIDriverList is a collection of CSIDriver objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is the list of CSIDriver", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/storage/v1beta1.CSIDriver"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1beta1.CSIDriver", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_storage_v1beta1_CSIDriverSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSIDriverSpec is the specification of a CSIDriver.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "attachRequired": { + SchemaProps: spec.SchemaProps{ + Description: "attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that the Kubernetes attach detach controller should call the attach volume interface which checks the volumeattachment status and waits until the volume is attached before proceeding to mounting. The CSI external-attacher coordinates with CSI volume driver and updates the volumeattachment status when the attach operation is complete. If the CSIDriverRegistry feature gate is enabled and the value is specified to false, the attach operation will be skipped. Otherwise the attach operation will be called.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "podInfoOnMount": { + SchemaProps: spec.SchemaProps{ + Description: "If set to true, podInfoOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations. If set to false, pod information will not be passed on mount. Default is false. The CSI driver specifies podInfoOnMount as part of driver deployment. If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls. The CSI driver is responsible for parsing and validating the information passed in as VolumeContext. The following VolumeConext will be passed if podInfoOnMount is set to true. This list might grow, but the prefix will be used. \"csi.storage.k8s.io/pod.name\": pod.Name \"csi.storage.k8s.io/pod.namespace\": pod.Namespace \"csi.storage.k8s.io/pod.uid\": string(pod.UID) \"csi.storage.k8s.io/ephemeral\": \"true\" iff the volume is an ephemeral inline volume\n defined by a CSIVolumeSource, otherwise \"false\"\n\n\"csi.storage.k8s.io/ephemeral\" is a new feature in Kubernetes 1.16. It is only required for drivers which support both the \"Persistent\" and \"Ephemeral\" VolumeLifecycleMode. Other drivers can leave pod info disabled and/or ignore this field. As Kubernetes 1.15 doesn't support this field, drivers can only support one mode when deployed on such a cluster and the deployment determines which mode that is, for example via a command line parameter of the driver.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "volumeLifecycleModes": { + SchemaProps: spec.SchemaProps{ + Description: "VolumeLifecycleModes defines what kind of volumes this CSI volume driver supports. The default if the list is empty is \"Persistent\", which is the usage defined by the CSI specification and implemented in Kubernetes via the usual PV/PVC mechanism. The other mode is \"Ephemeral\". In this mode, volumes are defined inline inside the pod spec with CSIVolumeSource and their lifecycle is tied to the lifecycle of that pod. A driver has to be aware of this because it is only going to get a NodePublishVolume call for such a volume. For more information about implementing this mode, see https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html A driver can support one or more of these modes and more modes may be added in the future.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "storageCapacity": { + SchemaProps: spec.SchemaProps{ + Description: "If set to true, storageCapacity indicates that the CSI volume driver wants pod scheduling to consider the storage capacity that the driver deployment will report by creating CSIStorageCapacity objects with capacity information.\n\nThe check can be enabled immediately when deploying a driver. In that case, provisioning new volumes with late binding will pause until the driver deployment has published some suitable CSIStorageCapacity object.\n\nAlternatively, the driver can be deployed with the field unset or false and it can be flipped later when storage capacity information has been published.\n\nThis is an alpha field and only available when the CSIStorageCapacity feature is enabled. The default is false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "fsGroupPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Defines if the underlying volume supports changing ownership and permission of the volume before being mounted. Refer to the specific FSGroupPolicy values for additional details. This field is alpha-level, and is only honored by servers that enable the CSIVolumeFSGroupPolicy feature gate.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_api_storage_v1beta1_CSINode(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED - This group version of CSINode is deprecated by storage/v1/CSINode. See the release notes for more information. CSINode holds information about all CSI drivers installed on a node. CSI drivers do not need to create the CSINode object directly. As long as they use the node-driver-registrar sidecar container, the kubelet will automatically populate the CSINode object for the CSI driver as part of kubelet plugin registration. CSINode has the same name as a node. If the object is missing, it means either there are no CSI Drivers available on the node, or the Kubelet version is low enough that it doesn't create this object. CSINode has an OwnerReference that points to the corresponding node object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "metadata.name must be the Kubernetes node name.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "spec is the specification of CSINode", + Ref: ref("k8s.io/api/storage/v1beta1.CSINodeSpec"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1beta1.CSINodeSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_storage_v1beta1_CSINodeDriver(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSINodeDriver holds information about the specification of one CSI driver installed on a node", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "This is the name of the CSI driver that this object refers to. This MUST be the same name returned by the CSI GetPluginName() call for that driver.", + Type: []string{"string"}, + Format: "", + }, + }, + "nodeID": { + SchemaProps: spec.SchemaProps{ + Description: "nodeID of the node from the driver point of view. This field enables Kubernetes to communicate with storage systems that do not share the same nomenclature for nodes. For example, Kubernetes may refer to a given node as \"node1\", but the storage system may refer to the same node as \"nodeA\". When Kubernetes issues a command to the storage system to attach a volume to a specific node, it can use this field to refer to the node name using the ID that the storage system will understand, e.g. \"nodeA\" instead of \"node1\". This field is required.", + Type: []string{"string"}, + Format: "", + }, + }, + "topologyKeys": { + SchemaProps: spec.SchemaProps{ + Description: "topologyKeys is the list of keys supported by the driver. When a driver is initialized on a cluster, it provides a set of topology keys that it understands (e.g. \"company.com/zone\", \"company.com/region\"). When a driver is initialized on a node, it provides the same topology keys along with values. Kubelet will expose these topology keys as labels on its own node object. When Kubernetes does topology aware provisioning, it can use this list to determine which labels it should retrieve from the node object and pass back to the driver. It is possible for different nodes to use different topology keys. This can be empty if driver does not support topology.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "allocatable": { + SchemaProps: spec.SchemaProps{ + Description: "allocatable represents the volume resources of a node that are available for scheduling.", + Ref: ref("k8s.io/api/storage/v1beta1.VolumeNodeResources"), + }, + }, + }, + Required: []string{"name", "nodeID"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1beta1.VolumeNodeResources"}, + } +} + +func schema_k8sio_api_storage_v1beta1_CSINodeList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSINodeList is a collection of CSINode objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is the list of CSINode", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/storage/v1beta1.CSINode"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1beta1.CSINode", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_storage_v1beta1_CSINodeSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSINodeSpec holds information about the specification of all CSI drivers installed on a node", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "drivers": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "drivers is a list of information of all CSI Drivers existing on a node. If all drivers in the list are uninstalled, this can become empty.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/storage/v1beta1.CSINodeDriver"), + }, + }, + }, + }, + }, + }, + Required: []string{"drivers"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1beta1.CSINodeDriver"}, + } +} + +func schema_k8sio_api_storage_v1beta1_StorageClass(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "provisioner": { + SchemaProps: spec.SchemaProps{ + Description: "Provisioner indicates the type of the provisioner.", + Type: []string{"string"}, + Format: "", + }, + }, + "parameters": { + SchemaProps: spec.SchemaProps{ + Description: "Parameters holds the parameters for the provisioner that should create volumes of this storage class.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "reclaimPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.", + Type: []string{"string"}, + Format: "", + }, + }, + "mountOptions": { + SchemaProps: spec.SchemaProps{ + Description: "Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "allowVolumeExpansion": { + SchemaProps: spec.SchemaProps{ + Description: "AllowVolumeExpansion shows whether the storage class allow volume expand", + Type: []string{"boolean"}, + Format: "", + }, + }, + "volumeBindingMode": { + SchemaProps: spec.SchemaProps{ + Description: "VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.", + Type: []string{"string"}, + Format: "", + }, + }, + "allowedTopologies": { + SchemaProps: spec.SchemaProps{ + Description: "Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.TopologySelectorTerm"), + }, + }, + }, + }, + }, + }, + Required: []string{"provisioner"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.TopologySelectorTerm", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_storage_v1beta1_StorageClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StorageClassList is a collection of storage classes.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of StorageClasses", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/storage/v1beta1.StorageClass"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1beta1.StorageClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_storage_v1beta1_VolumeAttachment(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n\nVolumeAttachment objects are non-namespaced.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.", + Ref: ref("k8s.io/api/storage/v1beta1.VolumeAttachmentSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.", + Ref: ref("k8s.io/api/storage/v1beta1.VolumeAttachmentStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1beta1.VolumeAttachmentSpec", "k8s.io/api/storage/v1beta1.VolumeAttachmentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_k8sio_api_storage_v1beta1_VolumeAttachmentList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachmentList is a collection of VolumeAttachment objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "Items is the list of VolumeAttachments", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/storage/v1beta1.VolumeAttachment"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1beta1.VolumeAttachment", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_k8sio_api_storage_v1beta1_VolumeAttachmentSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "persistentVolumeName": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the persistent volume to attach.", + Type: []string{"string"}, + Format: "", + }, + }, + "inlineVolumeSpec": { + SchemaProps: spec.SchemaProps{ + Description: "inlineVolumeSpec contains all the information necessary to attach a persistent volume defined by a pod's inline VolumeSource. This field is populated only for the CSIMigration feature. It contains translated fields from a pod's inline VolumeSource to a PersistentVolumeSpec. This field is alpha-level and is only honored by servers that enabled the CSIMigration feature.", + Ref: ref("k8s.io/api/core/v1.PersistentVolumeSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PersistentVolumeSpec"}, + } +} + +func schema_k8sio_api_storage_v1beta1_VolumeAttachmentSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachmentSpec is the specification of a VolumeAttachment request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "attacher": { + SchemaProps: spec.SchemaProps{ + Description: "Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().", + Type: []string{"string"}, + Format: "", + }, + }, + "source": { + SchemaProps: spec.SchemaProps{ + Description: "Source represents the volume that should be attached.", + Ref: ref("k8s.io/api/storage/v1beta1.VolumeAttachmentSource"), + }, + }, + "nodeName": { + SchemaProps: spec.SchemaProps{ + Description: "The node that the volume should be attached to.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"attacher", "source", "nodeName"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1beta1.VolumeAttachmentSource"}, + } +} + +func schema_k8sio_api_storage_v1beta1_VolumeAttachmentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeAttachmentStatus is the status of a VolumeAttachment request.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "attached": { + SchemaProps: spec.SchemaProps{ + Description: "Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "attachmentMetadata": { + SchemaProps: spec.SchemaProps{ + Description: "Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "attachError": { + SchemaProps: spec.SchemaProps{ + Description: "The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", + Ref: ref("k8s.io/api/storage/v1beta1.VolumeError"), + }, + }, + "detachError": { + SchemaProps: spec.SchemaProps{ + Description: "The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.", + Ref: ref("k8s.io/api/storage/v1beta1.VolumeError"), + }, + }, + }, + Required: []string{"attached"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/storage/v1beta1.VolumeError"}, + } +} + +func schema_k8sio_api_storage_v1beta1_VolumeError(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeError captures an error encountered during a volume operation.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "time": { + SchemaProps: spec.SchemaProps{ + Description: "Time the error was encountered.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "String detailing the error encountered during Attach or Detach operation. This string may be logged, so it should not contain sensitive information.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_k8sio_api_storage_v1beta1_VolumeNodeResources(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeNodeResources is a set of resource limits for scheduling of volumes.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "count": { + SchemaProps: spec.SchemaProps{ + Description: "Maximum number of unique volumes managed by the CSI driver that can be used on a node. A volume that is both attached and mounted on a node is considered to be used once, not twice. The same rule applies for a unique volume that is shared among multiple pods on the same node. If this field is nil, then the supported number of volumes on this node is unbounded.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1_ConversionRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ConversionRequest describes the conversion request parameters.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "uid is an identifier for the individual request/response. It allows distinguishing instances of requests which are otherwise identical (parallel requests, etc). The UID is meant to track the round trip (request/response) between the Kubernetes API server and the webhook, not the user request. It is suitable for correlating log entries between the webhook and apiserver, for either auditing or debugging.", + Type: []string{"string"}, + Format: "", + }, + }, + "desiredAPIVersion": { + SchemaProps: spec.SchemaProps{ + Description: "desiredAPIVersion is the version to convert given objects to. e.g. \"myapi.example.com/v1\"", + Type: []string{"string"}, + Format: "", + }, + }, + "objects": { + SchemaProps: spec.SchemaProps{ + Description: "objects is the list of custom resource objects to be converted.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), + }, + }, + }, + }, + }, + }, + Required: []string{"uid", "desiredAPIVersion", "objects"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/runtime.RawExtension"}, + } +} + +func schema_pkg_apis_apiextensions_v1_ConversionResponse(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ConversionResponse describes a conversion response.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "uid is an identifier for the individual request/response. This should be copied over from the corresponding `request.uid`.", + Type: []string{"string"}, + Format: "", + }, + }, + "convertedObjects": { + SchemaProps: spec.SchemaProps{ + Description: "convertedObjects is the list of converted version of `request.objects` if the `result` is successful, otherwise empty. The webhook is expected to set `apiVersion` of these objects to the `request.desiredAPIVersion`. The list must also have the same size as the input list with the same objects in the same order (equal kind, metadata.uid, metadata.name and metadata.namespace). The webhook is allowed to mutate labels and annotations. Any other change to the metadata is silently ignored.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), + }, + }, + }, + }, + }, + "result": { + SchemaProps: spec.SchemaProps{ + Description: "result contains the result of conversion with extra details if the conversion failed. `result.status` determines if the conversion failed or succeeded. The `result.status` field is required and represents the success or failure of the conversion. A successful conversion must set `result.status` to `Success`. A failed conversion must set `result.status` to `Failure` and provide more details in `result.message` and return http status 200. The `result.message` will be used to construct an error message for the end user.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Status"), + }, + }, + }, + Required: []string{"uid", "convertedObjects", "result"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Status", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, + } +} + +func schema_pkg_apis_apiextensions_v1_ConversionReview(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ConversionReview describes a conversion request/response.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "request": { + SchemaProps: spec.SchemaProps{ + Description: "request describes the attributes for the conversion request.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.ConversionRequest"), + }, + }, + "response": { + SchemaProps: spec.SchemaProps{ + Description: "response describes the attributes for the conversion response.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.ConversionResponse"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.ConversionRequest", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.ConversionResponse"}, + } +} + +func schema_pkg_apis_apiextensions_v1_CustomResourceColumnDefinition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceColumnDefinition specifies a column for server side printing.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is a human readable name for the column.", + Type: []string{"string"}, + Format: "", + }, + }, + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is an OpenAPI type definition for this column. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for details.", + Type: []string{"string"}, + Format: "", + }, + }, + "format": { + SchemaProps: spec.SchemaProps{ + Description: "format is an optional OpenAPI type definition for this column. The 'name' format is applied to the primary identifier column to assist in clients identifying column is the resource name. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for details.", + Type: []string{"string"}, + Format: "", + }, + }, + "description": { + SchemaProps: spec.SchemaProps{ + Description: "description is a human readable description of this column.", + Type: []string{"string"}, + Format: "", + }, + }, + "priority": { + SchemaProps: spec.SchemaProps{ + Description: "priority is an integer defining the relative importance of this column compared to others. Lower numbers are considered higher priority. Columns that may be omitted in limited space scenarios should be given a priority greater than 0.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "jsonPath": { + SchemaProps: spec.SchemaProps{ + Description: "jsonPath is a simple JSON path (i.e. with array notation) which is evaluated against each custom resource to produce the value for this column.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name", "type", "jsonPath"}, + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1_CustomResourceConversion(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceConversion describes how to convert different versions of a CR.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "strategy": { + SchemaProps: spec.SchemaProps{ + Description: "strategy specifies how custom resources are converted between versions. Allowed values are: - `None`: The converter only change the apiVersion and would not touch any other field in the custom resource. - `Webhook`: API Server will call to an external webhook to do the conversion. Additional information\n is needed for this option. This requires spec.preserveUnknownFields to be false, and spec.conversion.webhook to be set.", + Type: []string{"string"}, + Format: "", + }, + }, + "webhook": { + SchemaProps: spec.SchemaProps{ + Description: "webhook describes how to call the conversion webhook. Required when `strategy` is set to `Webhook`.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.WebhookConversion"), + }, + }, + }, + Required: []string{"strategy"}, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.WebhookConversion"}, + } +} + +func schema_pkg_apis_apiextensions_v1_CustomResourceDefinition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceDefinition represents a resource that should be exposed on the API server. Its name MUST be in the format <.spec.name>.<.spec.group>.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "spec describes how the user wants the resources to appear", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status indicates the actual state of the CustomResourceDefinition", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionSpec", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_pkg_apis_apiextensions_v1_CustomResourceDefinitionCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceDefinitionCondition contains details for the current condition of this pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is the type of the condition. Types include Established, NamesAccepted and Terminating.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status is the status of the condition. Can be True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "lastTransitionTime last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "reason is a unique, one-word, CamelCase reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "message is a human-readable message indicating details about last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_pkg_apis_apiextensions_v1_CustomResourceDefinitionList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceDefinitionList is a list of CustomResourceDefinition objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items list individual CustomResourceDefinition objects", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinition"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinition", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_pkg_apis_apiextensions_v1_CustomResourceDefinitionNames(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceDefinitionNames indicates the names to serve this CustomResourceDefinition", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "plural": { + SchemaProps: spec.SchemaProps{ + Description: "plural is the plural name of the resource to serve. The custom resources are served under `/apis///.../`. Must match the name of the CustomResourceDefinition (in the form `.`). Must be all lowercase.", + Type: []string{"string"}, + Format: "", + }, + }, + "singular": { + SchemaProps: spec.SchemaProps{ + Description: "singular is the singular name of the resource. It must be all lowercase. Defaults to lowercased `kind`.", + Type: []string{"string"}, + Format: "", + }, + }, + "shortNames": { + SchemaProps: spec.SchemaProps{ + Description: "shortNames are short names for the resource, exposed in API discovery documents, and used by clients to support invocations like `kubectl get `. It must be all lowercase.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "kind is the serialized kind of the resource. It is normally CamelCase and singular. Custom resource instances will use this value as the `kind` attribute in API calls.", + Type: []string{"string"}, + Format: "", + }, + }, + "listKind": { + SchemaProps: spec.SchemaProps{ + Description: "listKind is the serialized kind of the list for this resource. Defaults to \"`kind`List\".", + Type: []string{"string"}, + Format: "", + }, + }, + "categories": { + SchemaProps: spec.SchemaProps{ + Description: "categories is a list of grouped resources this custom resource belongs to (e.g. 'all'). This is published in API discovery documents, and used by clients to support invocations like `kubectl get all`.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"plural", "kind"}, + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1_CustomResourceDefinitionSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceDefinitionSpec describes how a user wants their resource to appear", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "group": { + SchemaProps: spec.SchemaProps{ + Description: "group is the API group of the defined custom resource. The custom resources are served under `/apis//...`. Must match the name of the CustomResourceDefinition (in the form `.`).", + Type: []string{"string"}, + Format: "", + }, + }, + "names": { + SchemaProps: spec.SchemaProps{ + Description: "names specify the resource and kind names for the custom resource.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionNames"), + }, + }, + "scope": { + SchemaProps: spec.SchemaProps{ + Description: "scope indicates whether the defined custom resource is cluster- or namespace-scoped. Allowed values are `Cluster` and `Namespaced`.", + Type: []string{"string"}, + Format: "", + }, + }, + "versions": { + SchemaProps: spec.SchemaProps{ + Description: "versions is the list of all API versions of the defined custom resource. Version names are used to compute the order in which served versions are listed in API discovery. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionVersion"), + }, + }, + }, + }, + }, + "conversion": { + SchemaProps: spec.SchemaProps{ + Description: "conversion defines conversion settings for the CRD.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceConversion"), + }, + }, + "preserveUnknownFields": { + SchemaProps: spec.SchemaProps{ + Description: "preserveUnknownFields indicates that object fields which are not specified in the OpenAPI schema should be preserved when persisting to storage. apiVersion, kind, metadata and known fields inside metadata are always preserved. This field is deprecated in favor of setting `x-preserve-unknown-fields` to true in `spec.versions[*].schema.openAPIV3Schema`. See https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#pruning-versus-preserving-unknown-fields for details.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"group", "names", "scope", "versions"}, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceConversion", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionNames", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionVersion"}, + } +} + +func schema_pkg_apis_apiextensions_v1_CustomResourceDefinitionStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceDefinitionStatus indicates the state of the CustomResourceDefinition", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + SchemaProps: spec.SchemaProps{ + Description: "conditions indicate state for particular aspects of a CustomResourceDefinition", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionCondition"), + }, + }, + }, + }, + }, + "acceptedNames": { + SchemaProps: spec.SchemaProps{ + Description: "acceptedNames are the names that are actually being used to serve discovery. They may be different than the names in spec.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionNames"), + }, + }, + "storedVersions": { + SchemaProps: spec.SchemaProps{ + Description: "storedVersions lists all versions of CustomResources that were ever persisted. Tracking these versions allows a migration path for stored versions in etcd. The field is mutable so a migration controller can finish a migration to another version (ensuring no old objects are left in storage), and then remove the rest of the versions from this list. Versions may not be removed from `spec.versions` while they exist in this list.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionCondition", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceDefinitionNames"}, + } +} + +func schema_pkg_apis_apiextensions_v1_CustomResourceDefinitionVersion(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceDefinitionVersion describes a version for CRD.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the version name, e.g. “v1”, “v2beta1”, etc. The custom resources are served under this version at `/apis///...` if `served` is true.", + Type: []string{"string"}, + Format: "", + }, + }, + "served": { + SchemaProps: spec.SchemaProps{ + Description: "served is a flag enabling/disabling this version from being served via REST APIs", + Type: []string{"boolean"}, + Format: "", + }, + }, + "storage": { + SchemaProps: spec.SchemaProps{ + Description: "storage indicates this version should be used when persisting custom resources to storage. There must be exactly one version with storage=true.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "deprecated": { + SchemaProps: spec.SchemaProps{ + Description: "deprecated indicates this version of the custom resource API is deprecated. When set to true, API requests to this version receive a warning header in the server response. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "deprecationWarning": { + SchemaProps: spec.SchemaProps{ + Description: "deprecationWarning overrides the default warning returned to API clients. May only be set when `deprecated` is true. The default warning indicates this version is deprecated and recommends use of the newest served version of equal or greater stability, if one exists.", + Type: []string{"string"}, + Format: "", + }, + }, + "schema": { + SchemaProps: spec.SchemaProps{ + Description: "schema describes the schema used for validation, pruning, and defaulting of this version of the custom resource.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceValidation"), + }, + }, + "subresources": { + SchemaProps: spec.SchemaProps{ + Description: "subresources specify what subresources this version of the defined custom resource have.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceSubresources"), + }, + }, + "additionalPrinterColumns": { + SchemaProps: spec.SchemaProps{ + Description: "additionalPrinterColumns specifies additional columns returned in Table output. See https://kubernetes.io/docs/reference/using-api/api-concepts/#receiving-resources-as-tables for details. If no columns are specified, a single column displaying the age of the custom resource is used.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceColumnDefinition"), + }, + }, + }, + }, + }, + }, + Required: []string{"name", "served", "storage"}, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceColumnDefinition", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceSubresources", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceValidation"}, + } +} + +func schema_pkg_apis_apiextensions_v1_CustomResourceSubresourceScale(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceSubresourceScale defines how to serve the scale subresource for CustomResources.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "specReplicasPath": { + SchemaProps: spec.SchemaProps{ + Description: "specReplicasPath defines the JSON path inside of a custom resource that corresponds to Scale `spec.replicas`. Only JSON paths without the array notation are allowed. Must be a JSON Path under `.spec`. If there is no value under the given path in the custom resource, the `/scale` subresource will return an error on GET.", + Type: []string{"string"}, + Format: "", + }, + }, + "statusReplicasPath": { + SchemaProps: spec.SchemaProps{ + Description: "statusReplicasPath defines the JSON path inside of a custom resource that corresponds to Scale `status.replicas`. Only JSON paths without the array notation are allowed. Must be a JSON Path under `.status`. If there is no value under the given path in the custom resource, the `status.replicas` value in the `/scale` subresource will default to 0.", + Type: []string{"string"}, + Format: "", + }, + }, + "labelSelectorPath": { + SchemaProps: spec.SchemaProps{ + Description: "labelSelectorPath defines the JSON path inside of a custom resource that corresponds to Scale `status.selector`. Only JSON paths without the array notation are allowed. Must be a JSON Path under `.status` or `.spec`. Must be set to work with HorizontalPodAutoscaler. The field pointed by this JSON path must be a string field (not a complex selector struct) which contains a serialized label selector in string form. More info: https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions#scale-subresource If there is no value under the given path in the custom resource, the `status.selector` value in the `/scale` subresource will default to the empty string.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"specReplicasPath", "statusReplicasPath"}, + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1_CustomResourceSubresourceStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceSubresourceStatus defines how to serve the status subresource for CustomResources. Status is represented by the `.status` JSON path inside of a CustomResource. When set, * exposes a /status subresource for the custom resource * PUT requests to the /status subresource take a custom resource object, and ignore changes to anything except the status stanza * PUT/POST/PATCH requests to the custom resource ignore changes to the status stanza", + Type: []string{"object"}, + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1_CustomResourceSubresources(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceSubresources defines the status and scale subresources for CustomResources.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status indicates the custom resource should serve a `/status` subresource. When enabled: 1. requests to the custom resource primary endpoint ignore changes to the `status` stanza of the object. 2. requests to the custom resource `/status` subresource ignore changes to anything other than the `status` stanza of the object.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceSubresourceStatus"), + }, + }, + "scale": { + SchemaProps: spec.SchemaProps{ + Description: "scale indicates the custom resource should serve a `/scale` subresource that returns an `autoscaling/v1` Scale object.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceSubresourceScale"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceSubresourceScale", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.CustomResourceSubresourceStatus"}, + } +} + +func schema_pkg_apis_apiextensions_v1_CustomResourceValidation(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceValidation is a list of validation methods for CustomResources.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "openAPIV3Schema": { + SchemaProps: spec.SchemaProps{ + Description: "openAPIV3Schema is the OpenAPI v3 schema to use for validation and pruning.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaProps"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaProps"}, + } +} + +func schema_pkg_apis_apiextensions_v1_ExternalDocumentation(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExternalDocumentation allows referencing an external resource for extended documentation.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "description": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "url": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1_JSON(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JSON represents any valid JSON value. These types are supported: bool, int64, float64, string, []interface{}, map[string]interface{} and nil.", + Type: v1.JSON{}.OpenAPISchemaType(), + Format: v1.JSON{}.OpenAPISchemaFormat(), + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1_JSONSchemaProps(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "id": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "$schema": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "$ref": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "description": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "type": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "format": { + SchemaProps: spec.SchemaProps{ + Description: "format is an OpenAPI v3 format string. Unknown formats are ignored. The following formats are validated:\n\n- bsonobjectid: a bson object ID, i.e. a 24 characters hex string - uri: an URI as parsed by Golang net/url.ParseRequestURI - email: an email address as parsed by Golang net/mail.ParseAddress - hostname: a valid representation for an Internet host name, as defined by RFC 1034, section 3.1 [RFC1034]. - ipv4: an IPv4 IP as parsed by Golang net.ParseIP - ipv6: an IPv6 IP as parsed by Golang net.ParseIP - cidr: a CIDR as parsed by Golang net.ParseCIDR - mac: a MAC address as parsed by Golang net.ParseMAC - uuid: an UUID that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$ - uuid3: an UUID3 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$ - uuid4: an UUID4 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$ - uuid5: an UUID5 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$ - isbn: an ISBN10 or ISBN13 number string like \"0321751043\" or \"978-0321751041\" - isbn10: an ISBN10 number string like \"0321751043\" - isbn13: an ISBN13 number string like \"978-0321751041\" - creditcard: a credit card number defined by the regex ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$ with any non digit characters mixed in - ssn: a U.S. social security number following the regex ^\\d{3}[- ]?\\d{2}[- ]?\\d{4}$ - hexcolor: an hexadecimal color code like \"#FFFFFF: following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$ - rgbcolor: an RGB color code like rgb like \"rgb(255,255,2559\" - byte: base64 encoded binary data - password: any kind of string - date: a date string like \"2006-01-02\" as defined by full-date in RFC3339 - duration: a duration string like \"22 ns\" as parsed by Golang time.ParseDuration or compatible with Scala duration format - datetime: a date time string like \"2014-12-15T19:30:20.000Z\" as defined by date-time in RFC3339.", + Type: []string{"string"}, + Format: "", + }, + }, + "title": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "default": { + SchemaProps: spec.SchemaProps{ + Description: "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. Defaulting requires spec.preserveUnknownFields to be false.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON"), + }, + }, + "maximum": { + SchemaProps: spec.SchemaProps{ + Type: []string{"number"}, + Format: "double", + }, + }, + "exclusiveMaximum": { + SchemaProps: spec.SchemaProps{ + Type: []string{"boolean"}, + Format: "", + }, + }, + "minimum": { + SchemaProps: spec.SchemaProps{ + Type: []string{"number"}, + Format: "double", + }, + }, + "exclusiveMinimum": { + SchemaProps: spec.SchemaProps{ + Type: []string{"boolean"}, + Format: "", + }, + }, + "maxLength": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int64", + }, + }, + "minLength": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int64", + }, + }, + "pattern": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "maxItems": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int64", + }, + }, + "minItems": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int64", + }, + }, + "uniqueItems": { + SchemaProps: spec.SchemaProps{ + Type: []string{"boolean"}, + Format: "", + }, + }, + "multipleOf": { + SchemaProps: spec.SchemaProps{ + Type: []string{"number"}, + Format: "double", + }, + }, + "enum": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON"), + }, + }, + }, + }, + }, + "maxProperties": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int64", + }, + }, + "minProperties": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int64", + }, + }, + "required": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaPropsOrArray"), + }, + }, + "allOf": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaProps"), + }, + }, + }, + }, + }, + "oneOf": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaProps"), + }, + }, + }, + }, + }, + "anyOf": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaProps"), + }, + }, + }, + }, + }, + "not": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaProps"), + }, + }, + "properties": { + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaProps"), + }, + }, + }, + }, + }, + "additionalProperties": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaPropsOrBool"), + }, + }, + "patternProperties": { + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaProps"), + }, + }, + }, + }, + }, + "dependencies": { + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaPropsOrStringArray"), + }, + }, + }, + }, + }, + "additionalItems": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaPropsOrBool"), + }, + }, + "definitions": { + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaProps"), + }, + }, + }, + }, + }, + "externalDocs": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.ExternalDocumentation"), + }, + }, + "example": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON"), + }, + }, + "nullable": { + SchemaProps: spec.SchemaProps{ + Type: []string{"boolean"}, + Format: "", + }, + }, + "x-kubernetes-preserve-unknown-fields": { + SchemaProps: spec.SchemaProps{ + Description: "x-kubernetes-preserve-unknown-fields stops the API server decoding step from pruning fields which are not specified in the validation schema. This affects fields recursively, but switches back to normal pruning behaviour if nested properties or additionalProperties are specified in the schema. This can either be true or undefined. False is forbidden.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "x-kubernetes-embedded-resource": { + SchemaProps: spec.SchemaProps{ + Description: "x-kubernetes-embedded-resource defines that the value is an embedded Kubernetes runtime.Object, with TypeMeta and ObjectMeta. The type must be object. It is allowed to further restrict the embedded object. kind, apiVersion and metadata are validated automatically. x-kubernetes-preserve-unknown-fields is allowed to be true, but does not have to be if the object is fully specified (up to kind, apiVersion, metadata).", + Type: []string{"boolean"}, + Format: "", + }, + }, + "x-kubernetes-int-or-string": { + SchemaProps: spec.SchemaProps{ + Description: "x-kubernetes-int-or-string specifies that this value is either an integer or a string. If this is true, an empty type is allowed and type as child of anyOf is permitted if following one of the following patterns:\n\n1) anyOf:\n - type: integer\n - type: string\n2) allOf:\n - anyOf:\n - type: integer\n - type: string\n - ... zero or more", + Type: []string{"boolean"}, + Format: "", + }, + }, + "x-kubernetes-list-map-keys": { + SchemaProps: spec.SchemaProps{ + Description: "x-kubernetes-list-map-keys annotates an array with the x-kubernetes-list-type `map` by specifying the keys used as the index of the map.\n\nThis tag MUST only be used on lists that have the \"x-kubernetes-list-type\" extension set to \"map\". Also, the values specified for this attribute must be a scalar typed field of the child structure (no nesting is supported).\n\nThe properties specified must either be required or have a default value, to ensure those properties are present for all list items.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "x-kubernetes-list-type": { + SchemaProps: spec.SchemaProps{ + Description: "x-kubernetes-list-type annotates an array to further describe its topology. This extension must only be used on lists and may have 3 possible values:\n\n1) `atomic`: the list is treated as a single entity, like a scalar.\n Atomic lists will be entirely replaced when updated. This extension\n may be used on any type of list (struct, scalar, ...).\n2) `set`:\n Sets are lists that must not have multiple items with the same value. Each\n value must be a scalar, an object with x-kubernetes-map-type `atomic` or an\n array with x-kubernetes-list-type `atomic`.\n3) `map`:\n These lists are like maps in that their elements have a non-index key\n used to identify them. Order is preserved upon merge. The map tag\n must only be used on a list with elements of type object.\nDefaults to atomic for arrays.", + Type: []string{"string"}, + Format: "", + }, + }, + "x-kubernetes-map-type": { + SchemaProps: spec.SchemaProps{ + Description: "x-kubernetes-map-type annotates an object to further describe its topology. This extension must only be used when type is object and may have 2 possible values:\n\n1) `granular`:\n These maps are actual maps (key-value pairs) and each fields are independent\n from each other (they can each be manipulated by separate actors). This is\n the default behaviour for all maps.\n2) `atomic`: the list is treated as a single entity, like a scalar.\n Atomic maps will be entirely replaced when updated.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.ExternalDocumentation", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaProps", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaPropsOrArray", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaPropsOrBool", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSONSchemaPropsOrStringArray"}, + } +} + +func schema_pkg_apis_apiextensions_v1_JSONSchemaPropsOrArray(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JSONSchemaPropsOrArray represents a value that can either be a JSONSchemaProps or an array of JSONSchemaProps. Mainly here for serialization purposes.", + Type: v1.JSONSchemaPropsOrArray{}.OpenAPISchemaType(), + Format: v1.JSONSchemaPropsOrArray{}.OpenAPISchemaFormat(), + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1_JSONSchemaPropsOrBool(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JSONSchemaPropsOrBool represents JSONSchemaProps or a boolean value. Defaults to true for the boolean property.", + Type: v1.JSONSchemaPropsOrBool{}.OpenAPISchemaType(), + Format: v1.JSONSchemaPropsOrBool{}.OpenAPISchemaFormat(), + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1_JSONSchemaPropsOrStringArray(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JSONSchemaPropsOrStringArray represents a JSONSchemaProps or a string array.", + Type: v1.JSONSchemaPropsOrStringArray{}.OpenAPISchemaType(), + Format: v1.JSONSchemaPropsOrStringArray{}.OpenAPISchemaFormat(), + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1_ServiceReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceReference holds a reference to Service.legacy.k8s.io", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "namespace is the namespace of the service. Required", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the service. Required", + Type: []string{"string"}, + Format: "", + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Description: "path is an optional URL path at which the webhook will be contacted.", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "port is an optional service port at which the webhook will be contacted. `port` should be a valid port number (1-65535, inclusive). Defaults to 443 for backward compatibility.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"namespace", "name"}, + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1_WebhookClientConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "WebhookClientConfig contains the information to make a TLS connection with the webhook.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "url": { + SchemaProps: spec.SchemaProps{ + Description: "url gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.", + Type: []string{"string"}, + Format: "", + }, + }, + "service": { + SchemaProps: spec.SchemaProps{ + Description: "service is a reference to the service for this webhook. Either service or url must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.ServiceReference"), + }, + }, + "caBundle": { + SchemaProps: spec.SchemaProps{ + Description: "caBundle is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.", + Type: []string{"string"}, + Format: "byte", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.ServiceReference"}, + } +} + +func schema_pkg_apis_apiextensions_v1_WebhookConversion(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "WebhookConversion describes how to call a conversion webhook", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "clientConfig": { + SchemaProps: spec.SchemaProps{ + Description: "clientConfig is the instructions for how to call the webhook if strategy is `Webhook`.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.WebhookClientConfig"), + }, + }, + "conversionReviewVersions": { + SchemaProps: spec.SchemaProps{ + Description: "conversionReviewVersions is an ordered list of preferred `ConversionReview` versions the Webhook expects. The API server will use the first version in the list which it supports. If none of the versions specified in this list are supported by API server, conversion will fail for the custom resource. If a persisted Webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"conversionReviewVersions"}, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.WebhookClientConfig"}, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_ConversionRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ConversionRequest describes the conversion request parameters.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "uid is an identifier for the individual request/response. It allows distinguishing instances of requests which are otherwise identical (parallel requests, etc). The UID is meant to track the round trip (request/response) between the Kubernetes API server and the webhook, not the user request. It is suitable for correlating log entries between the webhook and apiserver, for either auditing or debugging.", + Type: []string{"string"}, + Format: "", + }, + }, + "desiredAPIVersion": { + SchemaProps: spec.SchemaProps{ + Description: "desiredAPIVersion is the version to convert given objects to. e.g. \"myapi.example.com/v1\"", + Type: []string{"string"}, + Format: "", + }, + }, + "objects": { + SchemaProps: spec.SchemaProps{ + Description: "objects is the list of custom resource objects to be converted.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), + }, + }, + }, + }, + }, + }, + Required: []string{"uid", "desiredAPIVersion", "objects"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/runtime.RawExtension"}, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_ConversionResponse(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ConversionResponse describes a conversion response.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "uid is an identifier for the individual request/response. This should be copied over from the corresponding `request.uid`.", + Type: []string{"string"}, + Format: "", + }, + }, + "convertedObjects": { + SchemaProps: spec.SchemaProps{ + Description: "convertedObjects is the list of converted version of `request.objects` if the `result` is successful, otherwise empty. The webhook is expected to set `apiVersion` of these objects to the `request.desiredAPIVersion`. The list must also have the same size as the input list with the same objects in the same order (equal kind, metadata.uid, metadata.name and metadata.namespace). The webhook is allowed to mutate labels and annotations. Any other change to the metadata is silently ignored.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), + }, + }, + }, + }, + }, + "result": { + SchemaProps: spec.SchemaProps{ + Description: "result contains the result of conversion with extra details if the conversion failed. `result.status` determines if the conversion failed or succeeded. The `result.status` field is required and represents the success or failure of the conversion. A successful conversion must set `result.status` to `Success`. A failed conversion must set `result.status` to `Failure` and provide more details in `result.message` and return http status 200. The `result.message` will be used to construct an error message for the end user.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Status"), + }, + }, + }, + Required: []string{"uid", "convertedObjects", "result"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Status", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_ConversionReview(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ConversionReview describes a conversion request/response.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "request": { + SchemaProps: spec.SchemaProps{ + Description: "request describes the attributes for the conversion request.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ConversionRequest"), + }, + }, + "response": { + SchemaProps: spec.SchemaProps{ + Description: "response describes the attributes for the conversion response.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ConversionResponse"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ConversionRequest", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ConversionResponse"}, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_CustomResourceColumnDefinition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceColumnDefinition specifies a column for server side printing.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is a human readable name for the column.", + Type: []string{"string"}, + Format: "", + }, + }, + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is an OpenAPI type definition for this column. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for details.", + Type: []string{"string"}, + Format: "", + }, + }, + "format": { + SchemaProps: spec.SchemaProps{ + Description: "format is an optional OpenAPI type definition for this column. The 'name' format is applied to the primary identifier column to assist in clients identifying column is the resource name. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for details.", + Type: []string{"string"}, + Format: "", + }, + }, + "description": { + SchemaProps: spec.SchemaProps{ + Description: "description is a human readable description of this column.", + Type: []string{"string"}, + Format: "", + }, + }, + "priority": { + SchemaProps: spec.SchemaProps{ + Description: "priority is an integer defining the relative importance of this column compared to others. Lower numbers are considered higher priority. Columns that may be omitted in limited space scenarios should be given a priority greater than 0.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "JSONPath": { + SchemaProps: spec.SchemaProps{ + Description: "JSONPath is a simple JSON path (i.e. with array notation) which is evaluated against each custom resource to produce the value for this column.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name", "type", "JSONPath"}, + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_CustomResourceConversion(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceConversion describes how to convert different versions of a CR.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "strategy": { + SchemaProps: spec.SchemaProps{ + Description: "strategy specifies how custom resources are converted between versions. Allowed values are: - `None`: The converter only change the apiVersion and would not touch any other field in the custom resource. - `Webhook`: API Server will call to an external webhook to do the conversion. Additional information\n is needed for this option. This requires spec.preserveUnknownFields to be false, and spec.conversion.webhookClientConfig to be set.", + Type: []string{"string"}, + Format: "", + }, + }, + "webhookClientConfig": { + SchemaProps: spec.SchemaProps{ + Description: "webhookClientConfig is the instructions for how to call the webhook if strategy is `Webhook`. Required when `strategy` is set to `Webhook`.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.WebhookClientConfig"), + }, + }, + "conversionReviewVersions": { + SchemaProps: spec.SchemaProps{ + Description: "conversionReviewVersions is an ordered list of preferred `ConversionReview` versions the Webhook expects. The API server will use the first version in the list which it supports. If none of the versions specified in this list are supported by API server, conversion will fail for the custom resource. If a persisted Webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail. Defaults to `[\"v1beta1\"]`.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"strategy"}, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.WebhookClientConfig"}, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceDefinition represents a resource that should be exposed on the API server. Its name MUST be in the format <.spec.name>.<.spec.group>. Deprecated in v1.16, planned for removal in v1.22. Use apiextensions.k8s.io/v1 CustomResourceDefinition instead.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "spec describes how the user wants the resources to appear", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status indicates the actual state of the CustomResourceDefinition", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionSpec", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceDefinitionCondition contains details for the current condition of this pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is the type of the condition. Types include Established, NamesAccepted and Terminating.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status is the status of the condition. Can be True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "lastTransitionTime last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "reason is a unique, one-word, CamelCase reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "message is a human-readable message indicating details about last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceDefinitionList is a list of CustomResourceDefinition objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items list individual CustomResourceDefinition objects", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinition"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinition", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionNames(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceDefinitionNames indicates the names to serve this CustomResourceDefinition", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "plural": { + SchemaProps: spec.SchemaProps{ + Description: "plural is the plural name of the resource to serve. The custom resources are served under `/apis///.../`. Must match the name of the CustomResourceDefinition (in the form `.`). Must be all lowercase.", + Type: []string{"string"}, + Format: "", + }, + }, + "singular": { + SchemaProps: spec.SchemaProps{ + Description: "singular is the singular name of the resource. It must be all lowercase. Defaults to lowercased `kind`.", + Type: []string{"string"}, + Format: "", + }, + }, + "shortNames": { + SchemaProps: spec.SchemaProps{ + Description: "shortNames are short names for the resource, exposed in API discovery documents, and used by clients to support invocations like `kubectl get `. It must be all lowercase.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "kind is the serialized kind of the resource. It is normally CamelCase and singular. Custom resource instances will use this value as the `kind` attribute in API calls.", + Type: []string{"string"}, + Format: "", + }, + }, + "listKind": { + SchemaProps: spec.SchemaProps{ + Description: "listKind is the serialized kind of the list for this resource. Defaults to \"`kind`List\".", + Type: []string{"string"}, + Format: "", + }, + }, + "categories": { + SchemaProps: spec.SchemaProps{ + Description: "categories is a list of grouped resources this custom resource belongs to (e.g. 'all'). This is published in API discovery documents, and used by clients to support invocations like `kubectl get all`.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"plural", "kind"}, + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceDefinitionSpec describes how a user wants their resource to appear", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "group": { + SchemaProps: spec.SchemaProps{ + Description: "group is the API group of the defined custom resource. The custom resources are served under `/apis//...`. Must match the name of the CustomResourceDefinition (in the form `.`).", + Type: []string{"string"}, + Format: "", + }, + }, + "version": { + SchemaProps: spec.SchemaProps{ + Description: "version is the API version of the defined custom resource. The custom resources are served under `/apis///...`. Must match the name of the first item in the `versions` list if `version` and `versions` are both specified. Optional if `versions` is specified. Deprecated: use `versions` instead.", + Type: []string{"string"}, + Format: "", + }, + }, + "names": { + SchemaProps: spec.SchemaProps{ + Description: "names specify the resource and kind names for the custom resource.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionNames"), + }, + }, + "scope": { + SchemaProps: spec.SchemaProps{ + Description: "scope indicates whether the defined custom resource is cluster- or namespace-scoped. Allowed values are `Cluster` and `Namespaced`. Default is `Namespaced`.", + Type: []string{"string"}, + Format: "", + }, + }, + "validation": { + SchemaProps: spec.SchemaProps{ + Description: "validation describes the schema used for validation and pruning of the custom resource. If present, this validation schema is used to validate all versions. Top-level and per-version schemas are mutually exclusive.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceValidation"), + }, + }, + "subresources": { + SchemaProps: spec.SchemaProps{ + Description: "subresources specify what subresources the defined custom resource has. If present, this field configures subresources for all versions. Top-level and per-version subresources are mutually exclusive.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresources"), + }, + }, + "versions": { + SchemaProps: spec.SchemaProps{ + Description: "versions is the list of all API versions of the defined custom resource. Optional if `version` is specified. The name of the first item in the `versions` list must match the `version` field if `version` and `versions` are both specified. Version names are used to compute the order in which served versions are listed in API discovery. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionVersion"), + }, + }, + }, + }, + }, + "additionalPrinterColumns": { + SchemaProps: spec.SchemaProps{ + Description: "additionalPrinterColumns specifies additional columns returned in Table output. See https://kubernetes.io/docs/reference/using-api/api-concepts/#receiving-resources-as-tables for details. If present, this field configures columns for all versions. Top-level and per-version columns are mutually exclusive. If no top-level or per-version columns are specified, a single column displaying the age of the custom resource is used.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceColumnDefinition"), + }, + }, + }, + }, + }, + "conversion": { + SchemaProps: spec.SchemaProps{ + Description: "conversion defines conversion settings for the CRD.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceConversion"), + }, + }, + "preserveUnknownFields": { + SchemaProps: spec.SchemaProps{ + Description: "preserveUnknownFields indicates that object fields which are not specified in the OpenAPI schema should be preserved when persisting to storage. apiVersion, kind, metadata and known fields inside metadata are always preserved. If false, schemas must be defined for all versions. Defaults to true in v1beta for backwards compatibility. Deprecated: will be required to be false in v1. Preservation of unknown fields can be specified in the validation schema using the `x-kubernetes-preserve-unknown-fields: true` extension. See https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#pruning-versus-preserving-unknown-fields for details.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"group", "names", "scope"}, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceColumnDefinition", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceConversion", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionNames", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionVersion", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresources", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceValidation"}, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceDefinitionStatus indicates the state of the CustomResourceDefinition", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + SchemaProps: spec.SchemaProps{ + Description: "conditions indicate state for particular aspects of a CustomResourceDefinition", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionCondition"), + }, + }, + }, + }, + }, + "acceptedNames": { + SchemaProps: spec.SchemaProps{ + Description: "acceptedNames are the names that are actually being used to serve discovery. They may be different than the names in spec.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionNames"), + }, + }, + "storedVersions": { + SchemaProps: spec.SchemaProps{ + Description: "storedVersions lists all versions of CustomResources that were ever persisted. Tracking these versions allows a migration path for stored versions in etcd. The field is mutable so a migration controller can finish a migration to another version (ensuring no old objects are left in storage), and then remove the rest of the versions from this list. Versions may not be removed from `spec.versions` while they exist in this list.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionCondition", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionNames"}, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionVersion(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceDefinitionVersion describes a version for CRD.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the version name, e.g. “v1”, “v2beta1”, etc. The custom resources are served under this version at `/apis///...` if `served` is true.", + Type: []string{"string"}, + Format: "", + }, + }, + "served": { + SchemaProps: spec.SchemaProps{ + Description: "served is a flag enabling/disabling this version from being served via REST APIs", + Type: []string{"boolean"}, + Format: "", + }, + }, + "storage": { + SchemaProps: spec.SchemaProps{ + Description: "storage indicates this version should be used when persisting custom resources to storage. There must be exactly one version with storage=true.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "deprecated": { + SchemaProps: spec.SchemaProps{ + Description: "deprecated indicates this version of the custom resource API is deprecated. When set to true, API requests to this version receive a warning header in the server response. Defaults to false.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "deprecationWarning": { + SchemaProps: spec.SchemaProps{ + Description: "deprecationWarning overrides the default warning returned to API clients. May only be set when `deprecated` is true. The default warning indicates this version is deprecated and recommends use of the newest served version of equal or greater stability, if one exists.", + Type: []string{"string"}, + Format: "", + }, + }, + "schema": { + SchemaProps: spec.SchemaProps{ + Description: "schema describes the schema used for validation and pruning of this version of the custom resource. Top-level and per-version schemas are mutually exclusive. Per-version schemas must not all be set to identical values (top-level validation schema should be used instead).", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceValidation"), + }, + }, + "subresources": { + SchemaProps: spec.SchemaProps{ + Description: "subresources specify what subresources this version of the defined custom resource have. Top-level and per-version subresources are mutually exclusive. Per-version subresources must not all be set to identical values (top-level subresources should be used instead).", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresources"), + }, + }, + "additionalPrinterColumns": { + SchemaProps: spec.SchemaProps{ + Description: "additionalPrinterColumns specifies additional columns returned in Table output. See https://kubernetes.io/docs/reference/using-api/api-concepts/#receiving-resources-as-tables for details. Top-level and per-version columns are mutually exclusive. Per-version columns must not all be set to identical values (top-level columns should be used instead). If no top-level or per-version columns are specified, a single column displaying the age of the custom resource is used.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceColumnDefinition"), + }, + }, + }, + }, + }, + }, + Required: []string{"name", "served", "storage"}, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceColumnDefinition", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresources", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceValidation"}, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_CustomResourceSubresourceScale(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceSubresourceScale defines how to serve the scale subresource for CustomResources.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "specReplicasPath": { + SchemaProps: spec.SchemaProps{ + Description: "specReplicasPath defines the JSON path inside of a custom resource that corresponds to Scale `spec.replicas`. Only JSON paths without the array notation are allowed. Must be a JSON Path under `.spec`. If there is no value under the given path in the custom resource, the `/scale` subresource will return an error on GET.", + Type: []string{"string"}, + Format: "", + }, + }, + "statusReplicasPath": { + SchemaProps: spec.SchemaProps{ + Description: "statusReplicasPath defines the JSON path inside of a custom resource that corresponds to Scale `status.replicas`. Only JSON paths without the array notation are allowed. Must be a JSON Path under `.status`. If there is no value under the given path in the custom resource, the `status.replicas` value in the `/scale` subresource will default to 0.", + Type: []string{"string"}, + Format: "", + }, + }, + "labelSelectorPath": { + SchemaProps: spec.SchemaProps{ + Description: "labelSelectorPath defines the JSON path inside of a custom resource that corresponds to Scale `status.selector`. Only JSON paths without the array notation are allowed. Must be a JSON Path under `.status` or `.spec`. Must be set to work with HorizontalPodAutoscaler. The field pointed by this JSON path must be a string field (not a complex selector struct) which contains a serialized label selector in string form. More info: https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions#scale-subresource If there is no value under the given path in the custom resource, the `status.selector` value in the `/scale` subresource will default to the empty string.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"specReplicasPath", "statusReplicasPath"}, + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_CustomResourceSubresourceStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceSubresourceStatus defines how to serve the status subresource for CustomResources. Status is represented by the `.status` JSON path inside of a CustomResource. When set, * exposes a /status subresource for the custom resource * PUT requests to the /status subresource take a custom resource object, and ignore changes to anything except the status stanza * PUT/POST/PATCH requests to the custom resource ignore changes to the status stanza", + Type: []string{"object"}, + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_CustomResourceSubresources(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceSubresources defines the status and scale subresources for CustomResources.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status indicates the custom resource should serve a `/status` subresource. When enabled: 1. requests to the custom resource primary endpoint ignore changes to the `status` stanza of the object. 2. requests to the custom resource `/status` subresource ignore changes to anything other than the `status` stanza of the object.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresourceStatus"), + }, + }, + "scale": { + SchemaProps: spec.SchemaProps{ + Description: "scale indicates the custom resource should serve a `/scale` subresource that returns an `autoscaling/v1` Scale object.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresourceScale"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresourceScale", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresourceStatus"}, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_CustomResourceValidation(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CustomResourceValidation is a list of validation methods for CustomResources.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "openAPIV3Schema": { + SchemaProps: spec.SchemaProps{ + Description: "openAPIV3Schema is the OpenAPI v3 schema to use for validation and pruning.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"}, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_ExternalDocumentation(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExternalDocumentation allows referencing an external resource for extended documentation.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "description": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "url": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_JSON(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JSON represents any valid JSON value. These types are supported: bool, int64, float64, string, []interface{}, map[string]interface{} and nil.", + Type: v1beta1.JSON{}.OpenAPISchemaType(), + Format: v1beta1.JSON{}.OpenAPISchemaFormat(), + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_JSONSchemaProps(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "id": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "$schema": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "$ref": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "description": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "type": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "format": { + SchemaProps: spec.SchemaProps{ + Description: "format is an OpenAPI v3 format string. Unknown formats are ignored. The following formats are validated:\n\n- bsonobjectid: a bson object ID, i.e. a 24 characters hex string - uri: an URI as parsed by Golang net/url.ParseRequestURI - email: an email address as parsed by Golang net/mail.ParseAddress - hostname: a valid representation for an Internet host name, as defined by RFC 1034, section 3.1 [RFC1034]. - ipv4: an IPv4 IP as parsed by Golang net.ParseIP - ipv6: an IPv6 IP as parsed by Golang net.ParseIP - cidr: a CIDR as parsed by Golang net.ParseCIDR - mac: a MAC address as parsed by Golang net.ParseMAC - uuid: an UUID that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$ - uuid3: an UUID3 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$ - uuid4: an UUID4 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$ - uuid5: an UUID5 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$ - isbn: an ISBN10 or ISBN13 number string like \"0321751043\" or \"978-0321751041\" - isbn10: an ISBN10 number string like \"0321751043\" - isbn13: an ISBN13 number string like \"978-0321751041\" - creditcard: a credit card number defined by the regex ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$ with any non digit characters mixed in - ssn: a U.S. social security number following the regex ^\\d{3}[- ]?\\d{2}[- ]?\\d{4}$ - hexcolor: an hexadecimal color code like \"#FFFFFF: following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$ - rgbcolor: an RGB color code like rgb like \"rgb(255,255,2559\" - byte: base64 encoded binary data - password: any kind of string - date: a date string like \"2006-01-02\" as defined by full-date in RFC3339 - duration: a duration string like \"22 ns\" as parsed by Golang time.ParseDuration or compatible with Scala duration format - datetime: a date time string like \"2014-12-15T19:30:20.000Z\" as defined by date-time in RFC3339.", + Type: []string{"string"}, + Format: "", + }, + }, + "title": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "default": { + SchemaProps: spec.SchemaProps{ + Description: "default is a default value for undefined object fields. Defaulting is a beta feature under the CustomResourceDefaulting feature gate. CustomResourceDefinitions with defaults must be created using the v1 (or newer) CustomResourceDefinition API.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSON"), + }, + }, + "maximum": { + SchemaProps: spec.SchemaProps{ + Type: []string{"number"}, + Format: "double", + }, + }, + "exclusiveMaximum": { + SchemaProps: spec.SchemaProps{ + Type: []string{"boolean"}, + Format: "", + }, + }, + "minimum": { + SchemaProps: spec.SchemaProps{ + Type: []string{"number"}, + Format: "double", + }, + }, + "exclusiveMinimum": { + SchemaProps: spec.SchemaProps{ + Type: []string{"boolean"}, + Format: "", + }, + }, + "maxLength": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int64", + }, + }, + "minLength": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int64", + }, + }, + "pattern": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "maxItems": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int64", + }, + }, + "minItems": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int64", + }, + }, + "uniqueItems": { + SchemaProps: spec.SchemaProps{ + Type: []string{"boolean"}, + Format: "", + }, + }, + "multipleOf": { + SchemaProps: spec.SchemaProps{ + Type: []string{"number"}, + Format: "double", + }, + }, + "enum": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSON"), + }, + }, + }, + }, + }, + "maxProperties": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int64", + }, + }, + "minProperties": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int64", + }, + }, + "required": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrArray"), + }, + }, + "allOf": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), + }, + }, + }, + }, + }, + "oneOf": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), + }, + }, + }, + }, + }, + "anyOf": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), + }, + }, + }, + }, + }, + "not": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), + }, + }, + "properties": { + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), + }, + }, + }, + }, + }, + "additionalProperties": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrBool"), + }, + }, + "patternProperties": { + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), + }, + }, + }, + }, + }, + "dependencies": { + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrStringArray"), + }, + }, + }, + }, + }, + "additionalItems": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrBool"), + }, + }, + "definitions": { + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), + }, + }, + }, + }, + }, + "externalDocs": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ExternalDocumentation"), + }, + }, + "example": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSON"), + }, + }, + "nullable": { + SchemaProps: spec.SchemaProps{ + Type: []string{"boolean"}, + Format: "", + }, + }, + "x-kubernetes-preserve-unknown-fields": { + SchemaProps: spec.SchemaProps{ + Description: "x-kubernetes-preserve-unknown-fields stops the API server decoding step from pruning fields which are not specified in the validation schema. This affects fields recursively, but switches back to normal pruning behaviour if nested properties or additionalProperties are specified in the schema. This can either be true or undefined. False is forbidden.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "x-kubernetes-embedded-resource": { + SchemaProps: spec.SchemaProps{ + Description: "x-kubernetes-embedded-resource defines that the value is an embedded Kubernetes runtime.Object, with TypeMeta and ObjectMeta. The type must be object. It is allowed to further restrict the embedded object. kind, apiVersion and metadata are validated automatically. x-kubernetes-preserve-unknown-fields is allowed to be true, but does not have to be if the object is fully specified (up to kind, apiVersion, metadata).", + Type: []string{"boolean"}, + Format: "", + }, + }, + "x-kubernetes-int-or-string": { + SchemaProps: spec.SchemaProps{ + Description: "x-kubernetes-int-or-string specifies that this value is either an integer or a string. If this is true, an empty type is allowed and type as child of anyOf is permitted if following one of the following patterns:\n\n1) anyOf:\n - type: integer\n - type: string\n2) allOf:\n - anyOf:\n - type: integer\n - type: string\n - ... zero or more", + Type: []string{"boolean"}, + Format: "", + }, + }, + "x-kubernetes-list-map-keys": { + SchemaProps: spec.SchemaProps{ + Description: "x-kubernetes-list-map-keys annotates an array with the x-kubernetes-list-type `map` by specifying the keys used as the index of the map.\n\nThis tag MUST only be used on lists that have the \"x-kubernetes-list-type\" extension set to \"map\". Also, the values specified for this attribute must be a scalar typed field of the child structure (no nesting is supported).\n\nThe properties specified must either be required or have a default value, to ensure those properties are present for all list items.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "x-kubernetes-list-type": { + SchemaProps: spec.SchemaProps{ + Description: "x-kubernetes-list-type annotates an array to further describe its topology. This extension must only be used on lists and may have 3 possible values:\n\n1) `atomic`: the list is treated as a single entity, like a scalar.\n Atomic lists will be entirely replaced when updated. This extension\n may be used on any type of list (struct, scalar, ...).\n2) `set`:\n Sets are lists that must not have multiple items with the same value. Each\n value must be a scalar, an object with x-kubernetes-map-type `atomic` or an\n array with x-kubernetes-list-type `atomic`.\n3) `map`:\n These lists are like maps in that their elements have a non-index key\n used to identify them. Order is preserved upon merge. The map tag\n must only be used on a list with elements of type object.\nDefaults to atomic for arrays.", + Type: []string{"string"}, + Format: "", + }, + }, + "x-kubernetes-map-type": { + SchemaProps: spec.SchemaProps{ + Description: "x-kubernetes-map-type annotates an object to further describe its topology. This extension must only be used when type is object and may have 2 possible values:\n\n1) `granular`:\n These maps are actual maps (key-value pairs) and each fields are independent\n from each other (they can each be manipulated by separate actors). This is\n the default behaviour for all maps.\n2) `atomic`: the list is treated as a single entity, like a scalar.\n Atomic maps will be entirely replaced when updated.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ExternalDocumentation", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSON", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrArray", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrBool", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrStringArray"}, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_JSONSchemaPropsOrArray(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JSONSchemaPropsOrArray represents a value that can either be a JSONSchemaProps or an array of JSONSchemaProps. Mainly here for serialization purposes.", + Type: v1beta1.JSONSchemaPropsOrArray{}.OpenAPISchemaType(), + Format: v1beta1.JSONSchemaPropsOrArray{}.OpenAPISchemaFormat(), + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_JSONSchemaPropsOrBool(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JSONSchemaPropsOrBool represents JSONSchemaProps or a boolean value. Defaults to true for the boolean property.", + Type: v1beta1.JSONSchemaPropsOrBool{}.OpenAPISchemaType(), + Format: v1beta1.JSONSchemaPropsOrBool{}.OpenAPISchemaFormat(), + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_JSONSchemaPropsOrStringArray(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JSONSchemaPropsOrStringArray represents a JSONSchemaProps or a string array.", + Type: v1beta1.JSONSchemaPropsOrStringArray{}.OpenAPISchemaType(), + Format: v1beta1.JSONSchemaPropsOrStringArray{}.OpenAPISchemaFormat(), + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_ServiceReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceReference holds a reference to Service.legacy.k8s.io", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "namespace is the namespace of the service. Required", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the service. Required", + Type: []string{"string"}, + Format: "", + }, + }, + "path": { + SchemaProps: spec.SchemaProps{ + Description: "path is an optional URL path at which the webhook will be contacted.", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "port is an optional service port at which the webhook will be contacted. `port` should be a valid port number (1-65535, inclusive). Defaults to 443 for backward compatibility.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"namespace", "name"}, + }, + }, + } +} + +func schema_pkg_apis_apiextensions_v1beta1_WebhookClientConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "WebhookClientConfig contains the information to make a TLS connection with the webhook.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "url": { + SchemaProps: spec.SchemaProps{ + Description: "url gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.", + Type: []string{"string"}, + Format: "", + }, + }, + "service": { + SchemaProps: spec.SchemaProps{ + Description: "service is a reference to the service for this webhook. Either service or url must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.", + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ServiceReference"), + }, + }, + "caBundle": { + SchemaProps: spec.SchemaProps{ + Description: "caBundle is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.", + Type: []string{"string"}, + Format: "byte", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ServiceReference"}, + } +} + +func schema_apimachinery_pkg_api_resource_Quantity(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n ::= \n (Note that may be empty, from the \"\" case in .)\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n ::= \"e\" | \"E\" \n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + Type: resource.Quantity{}.OpenAPISchemaType(), + Format: resource.Quantity{}.OpenAPISchemaFormat(), + }, + }, + } +} + +func schema_apimachinery_pkg_api_resource_int64Amount(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "int64Amount represents a fixed precision numerator and arbitrary scale exponent. It is faster than operations on inf.Dec for values that can be represented as int64.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "value": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int64", + }, + }, + "scale": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"value", "scale"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_APIGroup(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIGroup contains the name, the supported versions, and the preferred version of a group.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the group.", + Type: []string{"string"}, + Format: "", + }, + }, + "versions": { + SchemaProps: spec.SchemaProps{ + Description: "versions are the versions supported in this group.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionForDiscovery"), + }, + }, + }, + }, + }, + "preferredVersion": { + SchemaProps: spec.SchemaProps{ + Description: "preferredVersion is the version preferred by the API server, which probably is the storage version.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionForDiscovery"), + }, + }, + "serverAddressByClientCIDRs": { + SchemaProps: spec.SchemaProps{ + Description: "a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ServerAddressByClientCIDR"), + }, + }, + }, + }, + }, + }, + Required: []string{"name", "versions"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionForDiscovery", "k8s.io/apimachinery/pkg/apis/meta/v1.ServerAddressByClientCIDR"}, + } +} + +func schema_pkg_apis_meta_v1_APIGroupList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIGroupList is a list of APIGroup, to allow clients to discover the API at /apis.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "groups": { + SchemaProps: spec.SchemaProps{ + Description: "groups is a list of APIGroup.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.APIGroup"), + }, + }, + }, + }, + }, + }, + Required: []string{"groups"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.APIGroup"}, + } +} + +func schema_pkg_apis_meta_v1_APIResource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIResource specifies the name of a resource and whether it is namespaced.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the plural name of the resource.", + Type: []string{"string"}, + Format: "", + }, + }, + "singularName": { + SchemaProps: spec.SchemaProps{ + Description: "singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.", + Type: []string{"string"}, + Format: "", + }, + }, + "namespaced": { + SchemaProps: spec.SchemaProps{ + Description: "namespaced indicates if a resource is namespaced or not.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "group": { + SchemaProps: spec.SchemaProps{ + Description: "group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\".", + Type: []string{"string"}, + Format: "", + }, + }, + "version": { + SchemaProps: spec.SchemaProps{ + Description: "version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\".", + Type: []string{"string"}, + Format: "", + }, + }, + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')", + Type: []string{"string"}, + Format: "", + }, + }, + "verbs": { + SchemaProps: spec.SchemaProps{ + Description: "verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "shortNames": { + SchemaProps: spec.SchemaProps{ + Description: "shortNames is a list of suggested short names of the resource.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "categories": { + SchemaProps: spec.SchemaProps{ + Description: "categories is a list of the grouped resources this resource belongs to (e.g. 'all')", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "storageVersionHash": { + SchemaProps: spec.SchemaProps{ + Description: "The hash value of the storage version, the version this resource is converted to when written to the data store. Value must be treated as opaque by clients. Only equality comparison on the value is valid. This is an alpha feature and may change or be removed in the future. The field is populated by the apiserver only if the StorageVersionHash feature gate is enabled. This field will remain optional even if it graduates.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name", "singularName", "namespaced", "kind", "verbs"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_APIResourceList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "groupVersion": { + SchemaProps: spec.SchemaProps{ + Description: "groupVersion is the group and version this APIResourceList is for.", + Type: []string{"string"}, + Format: "", + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "resources contains the name of the resources and if they are namespaced.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.APIResource"), + }, + }, + }, + }, + }, + }, + Required: []string{"groupVersion", "resources"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.APIResource"}, + } +} + +func schema_pkg_apis_meta_v1_APIVersions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "versions": { + SchemaProps: spec.SchemaProps{ + Description: "versions are the api versions that are available.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "serverAddressByClientCIDRs": { + SchemaProps: spec.SchemaProps{ + Description: "a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ServerAddressByClientCIDR"), + }, + }, + }, + }, + }, + }, + Required: []string{"versions", "serverAddressByClientCIDRs"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ServerAddressByClientCIDR"}, + } +} + +func schema_pkg_apis_meta_v1_Condition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Condition contains details for one aspect of the current state of this API Resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type of condition in CamelCase or in foo.example.com/CamelCase.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "message is a human readable message indicating details about the transition. This may be an empty string.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status", "lastTransitionTime", "reason", "message"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_pkg_apis_meta_v1_CreateOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CreateOptions may be provided when creating an API object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "dryRun": { + SchemaProps: spec.SchemaProps{ + Description: "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "fieldManager": { + SchemaProps: spec.SchemaProps{ + Description: "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_DeleteOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeleteOptions may be provided when deleting an API object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "gracePeriodSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "preconditions": { + SchemaProps: spec.SchemaProps{ + Description: "Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Preconditions"), + }, + }, + "orphanDependents": { + SchemaProps: spec.SchemaProps{ + Description: "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "propagationPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", + Type: []string{"string"}, + Format: "", + }, + }, + "dryRun": { + SchemaProps: spec.SchemaProps{ + Description: "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Preconditions"}, + } +} + +func schema_pkg_apis_meta_v1_Duration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Duration is a wrapper around time.Duration which supports correct marshaling to YAML and JSON. In particular, it marshals into strings, which can be used as map keys in json.", + Type: metav1.Duration{}.OpenAPISchemaType(), + Format: metav1.Duration{}.OpenAPISchemaFormat(), + }, + }, + } +} + +func schema_pkg_apis_meta_v1_ExportOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExportOptions is the query options to the standard REST get call. Deprecated. Planned for removal in 1.18.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "export": { + SchemaProps: spec.SchemaProps{ + Description: "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "exact": { + SchemaProps: spec.SchemaProps{ + Description: "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"export", "exact"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_FieldsV1(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:', where is the name of a field in a struct, or key in a map 'v:', where is the exact json formatted value of a list item 'i:', where is position of a item in a list 'k:', where is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + Type: []string{"object"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_GetOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "GetOptions is the standard query options to the standard REST get call.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "resourceVersion": { + SchemaProps: spec.SchemaProps{ + Description: "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_GroupKind(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "GroupKind specifies a Group and a Kind, but does not force a version. This is useful for identifying concepts during lookup stages without having partially valid types", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "group": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "kind": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"group", "kind"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_GroupResource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "GroupResource specifies a Group and a Resource, but does not force a version. This is useful for identifying concepts during lookup stages without having partially valid types", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "group": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"group", "resource"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_GroupVersion(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "GroupVersion contains the \"group\" and the \"version\", which uniquely identifies the API.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "group": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "version": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"group", "version"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_GroupVersionForDiscovery(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "GroupVersion contains the \"group/version\" and \"version\" string of a version. It is made a struct to keep extensibility.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "groupVersion": { + SchemaProps: spec.SchemaProps{ + Description: "groupVersion specifies the API group and version in the form \"group/version\"", + Type: []string{"string"}, + Format: "", + }, + }, + "version": { + SchemaProps: spec.SchemaProps{ + Description: "version specifies the version in the form of \"version\". This is to save the clients the trouble of splitting the GroupVersion.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"groupVersion", "version"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_GroupVersionKind(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "GroupVersionKind unambiguously identifies a kind. It doesn't anonymously include GroupVersion to avoid automatic coersion. It doesn't use a GroupVersion to avoid custom marshalling", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "group": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "version": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "kind": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"group", "version", "kind"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_GroupVersionResource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "GroupVersionResource unambiguously identifies a resource. It doesn't anonymously include GroupVersion to avoid automatic coersion. It doesn't use a GroupVersion to avoid custom marshalling", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "group": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "version": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"group", "version", "resource"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_InternalEvent(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "InternalEvent makes watch.Event versioned", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "Type": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "Object": { + SchemaProps: spec.SchemaProps{ + Description: "Object is:\n * If Type is Added or Modified: the new state of the object.\n * If Type is Deleted: the state of the object immediately before deletion.\n * If Type is Bookmark: the object (instance of a type being watched) where\n only ResourceVersion field is set. On successful restart of watch from a\n bookmark resourceVersion, client is guaranteed to not get repeat event\n nor miss any events.\n * If Type is Error: *api.Status is recommended; other types may make sense\n depending on context.", + Ref: ref("k8s.io/apimachinery/pkg/runtime.Object"), + }, + }, + }, + Required: []string{"Type", "Object"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/runtime.Object"}, + } +} + +func schema_pkg_apis_meta_v1_LabelSelector(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "matchLabels": { + SchemaProps: spec.SchemaProps{ + Description: "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "matchExpressions": { + SchemaProps: spec.SchemaProps{ + Description: "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelectorRequirement"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelectorRequirement"}, + } +} + +func schema_pkg_apis_meta_v1_LabelSelectorRequirement(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "key": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "key is the label key that the selector applies to.", + Type: []string{"string"}, + Format: "", + }, + }, + "operator": { + SchemaProps: spec.SchemaProps{ + Description: "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + Type: []string{"string"}, + Format: "", + }, + }, + "values": { + SchemaProps: spec.SchemaProps{ + Description: "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"key", "operator"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_List(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "List holds a list of objects, which may not be known by the server.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of objects", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, + } +} + +func schema_pkg_apis_meta_v1_ListMeta(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "selfLink": { + SchemaProps: spec.SchemaProps{ + Description: "selfLink is a URL representing this object. Populated by the system. Read-only.\n\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + Type: []string{"string"}, + Format: "", + }, + }, + "resourceVersion": { + SchemaProps: spec.SchemaProps{ + Description: "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency", + Type: []string{"string"}, + Format: "", + }, + }, + "continue": { + SchemaProps: spec.SchemaProps{ + Description: "continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.", + Type: []string{"string"}, + Format: "", + }, + }, + "remainingItemCount": { + SchemaProps: spec.SchemaProps{ + Description: "remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_ListOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ListOptions is the query options to a standard REST list call.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "labelSelector": { + SchemaProps: spec.SchemaProps{ + Description: "A selector to restrict the list of returned objects by their labels. Defaults to everything.", + Type: []string{"string"}, + Format: "", + }, + }, + "fieldSelector": { + SchemaProps: spec.SchemaProps{ + Description: "A selector to restrict the list of returned objects by their fields. Defaults to everything.", + Type: []string{"string"}, + Format: "", + }, + }, + "watch": { + SchemaProps: spec.SchemaProps{ + Description: "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "allowWatchBookmarks": { + SchemaProps: spec.SchemaProps{ + Description: "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "resourceVersion": { + SchemaProps: spec.SchemaProps{ + Description: "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset", + Type: []string{"string"}, + Format: "", + }, + }, + "resourceVersionMatch": { + SchemaProps: spec.SchemaProps{ + Description: "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset", + Type: []string{"string"}, + Format: "", + }, + }, + "timeoutSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "limit": { + SchemaProps: spec.SchemaProps{ + Description: "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "continue": { + SchemaProps: spec.SchemaProps{ + Description: "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_ManagedFieldsEntry(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "manager": { + SchemaProps: spec.SchemaProps{ + Description: "Manager is an identifier of the workflow managing these fields.", + Type: []string{"string"}, + Format: "", + }, + }, + "operation": { + SchemaProps: spec.SchemaProps{ + Description: "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + Type: []string{"string"}, + Format: "", + }, + }, + "time": { + SchemaProps: spec.SchemaProps{ + Description: "Time is timestamp of when these fields were set. It should always be empty if Operation is 'Apply'", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "fieldsType": { + SchemaProps: spec.SchemaProps{ + Description: "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + Type: []string{"string"}, + Format: "", + }, + }, + "fieldsV1": { + SchemaProps: spec.SchemaProps{ + Description: "FieldsV1 holds the first JSON version format as described in the \"FieldsV1\" type.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.FieldsV1"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.FieldsV1", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_pkg_apis_meta_v1_MicroTime(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MicroTime is version of Time with microsecond level precision.", + Type: metav1.MicroTime{}.OpenAPISchemaType(), + Format: metav1.MicroTime{}.OpenAPISchemaFormat(), + }, + }, + } +} + +func schema_pkg_apis_meta_v1_ObjectMeta(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + Type: []string{"string"}, + Format: "", + }, + }, + "generateName": { + SchemaProps: spec.SchemaProps{ + Description: "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency", + Type: []string{"string"}, + Format: "", + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces", + Type: []string{"string"}, + Format: "", + }, + }, + "selfLink": { + SchemaProps: spec.SchemaProps{ + Description: "SelfLink is a URL representing this object. Populated by the system. Read-only.\n\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + Type: []string{"string"}, + Format: "", + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + Type: []string{"string"}, + Format: "", + }, + }, + "resourceVersion": { + SchemaProps: spec.SchemaProps{ + Description: "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency", + Type: []string{"string"}, + Format: "", + }, + }, + "generation": { + SchemaProps: spec.SchemaProps{ + Description: "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "creationTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "deletionTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "deletionGracePeriodSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "labels": { + SchemaProps: spec.SchemaProps{ + Description: "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "annotations": { + SchemaProps: spec.SchemaProps{ + Description: "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "ownerReferences": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference"), + }, + }, + }, + }, + }, + "finalizers": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "clusterName": { + SchemaProps: spec.SchemaProps{ + Description: "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + Type: []string{"string"}, + Format: "", + }, + }, + "managedFields": { + SchemaProps: spec.SchemaProps{ + Description: "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry", "k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_pkg_apis_meta_v1_OwnerReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "API version of the referent.", + Type: []string{"string"}, + Format: "", + }, + }, + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + Type: []string{"string"}, + Format: "", + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + Type: []string{"string"}, + Format: "", + }, + }, + "controller": { + SchemaProps: spec.SchemaProps{ + Description: "If true, this reference points to the managing controller.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "blockOwnerDeletion": { + SchemaProps: spec.SchemaProps{ + Description: "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"apiVersion", "kind", "name", "uid"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_PartialObjectMetadata(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PartialObjectMetadata is a generic representation of any object with ObjectMeta. It allows clients to get access to a particular ObjectMeta schema without knowing the details of the version.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_pkg_apis_meta_v1_PartialObjectMetadataList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PartialObjectMetadataList contains a list of objects containing only their metadata", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items contains each of the included items.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.PartialObjectMetadata"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.PartialObjectMetadata"}, + } +} + +func schema_pkg_apis_meta_v1_Patch(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.", + Type: []string{"object"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_PatchOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PatchOptions may be provided when patching an API object. PatchOptions is meant to be a superset of UpdateOptions.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "dryRun": { + SchemaProps: spec.SchemaProps{ + Description: "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "force": { + SchemaProps: spec.SchemaProps{ + Description: "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "fieldManager": { + SchemaProps: spec.SchemaProps{ + Description: "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_Preconditions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the target UID.", + Type: []string{"string"}, + Format: "", + }, + }, + "resourceVersion": { + SchemaProps: spec.SchemaProps{ + Description: "Specifies the target ResourceVersion", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_RootPaths(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RootPaths lists the paths available at root. For example: \"/healthz\", \"/apis\".", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "paths": { + SchemaProps: spec.SchemaProps{ + Description: "paths are the paths available at root.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"paths"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_ServerAddressByClientCIDR(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "clientCIDR": { + SchemaProps: spec.SchemaProps{ + Description: "The CIDR with which clients can match their IP to figure out the server address that they should use.", + Type: []string{"string"}, + Format: "", + }, + }, + "serverAddress": { + SchemaProps: spec.SchemaProps{ + Description: "Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"clientCIDR", "serverAddress"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_Status(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Status is a return value for calls that don't return other objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the operation. One of: \"Success\" or \"Failure\". More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human-readable description of the status of this operation.", + Type: []string{"string"}, + Format: "", + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.", + Type: []string{"string"}, + Format: "", + }, + }, + "details": { + SchemaProps: spec.SchemaProps{ + Description: "Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.StatusDetails"), + }, + }, + "code": { + SchemaProps: spec.SchemaProps{ + Description: "Suggested HTTP return code for this status, 0 if not set.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.StatusDetails"}, + } +} + +func schema_pkg_apis_meta_v1_StatusCause(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "A machine-readable description of the cause of the error. If this value is empty there is no information available.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human-readable description of the cause of the error. This field may be presented as-is to a reader.", + Type: []string{"string"}, + Format: "", + }, + }, + "field": { + SchemaProps: spec.SchemaProps{ + Description: "The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n\nExamples:\n \"name\" - the field \"name\" on the current resource\n \"items[0].name\" - the field \"name\" on the first array entry in \"items\"", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_StatusDetails(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).", + Type: []string{"string"}, + Format: "", + }, + }, + "group": { + SchemaProps: spec.SchemaProps{ + Description: "The group attribute of the resource associated with the status StatusReason.", + Type: []string{"string"}, + Format: "", + }, + }, + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + Type: []string{"string"}, + Format: "", + }, + }, + "causes": { + SchemaProps: spec.SchemaProps{ + Description: "The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.StatusCause"), + }, + }, + }, + }, + }, + "retryAfterSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.StatusCause"}, + } +} + +func schema_pkg_apis_meta_v1_Table(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Table is a tabular representation of a set of API resources. The server transforms the object into a set of preferred columns for quickly reviewing the objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "columnDefinitions": { + SchemaProps: spec.SchemaProps{ + Description: "columnDefinitions describes each column in the returned items array. The number of cells per row will always match the number of column definitions.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.TableColumnDefinition"), + }, + }, + }, + }, + }, + "rows": { + SchemaProps: spec.SchemaProps{ + Description: "rows is the list of items in the table.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.TableRow"), + }, + }, + }, + }, + }, + }, + Required: []string{"columnDefinitions", "rows"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.TableColumnDefinition", "k8s.io/apimachinery/pkg/apis/meta/v1.TableRow"}, + } +} + +func schema_pkg_apis_meta_v1_TableColumnDefinition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TableColumnDefinition contains information about a column returned in the Table.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is a human readable name for the column.", + Type: []string{"string"}, + Format: "", + }, + }, + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is an OpenAPI type definition for this column, such as number, integer, string, or array. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.", + Type: []string{"string"}, + Format: "", + }, + }, + "format": { + SchemaProps: spec.SchemaProps{ + Description: "format is an optional OpenAPI type modifier for this column. A format modifies the type and imposes additional rules, like date or time formatting for a string. The 'name' format is applied to the primary identifier column which has type 'string' to assist in clients identifying column is the resource name. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.", + Type: []string{"string"}, + Format: "", + }, + }, + "description": { + SchemaProps: spec.SchemaProps{ + Description: "description is a human readable description of this column.", + Type: []string{"string"}, + Format: "", + }, + }, + "priority": { + SchemaProps: spec.SchemaProps{ + Description: "priority is an integer defining the relative importance of this column compared to others. Lower numbers are considered higher priority. Columns that may be omitted in limited space scenarios should be given a higher priority.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"name", "type", "format", "description", "priority"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_TableOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TableOptions are used when a Table is requested by the caller.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "includeObject": { + SchemaProps: spec.SchemaProps{ + Description: "includeObject decides whether to include each object along with its columnar information. Specifying \"None\" will return no object, specifying \"Object\" will return the full object contents, and specifying \"Metadata\" (the default) will return the object's metadata in the PartialObjectMetadata kind in version v1beta1 of the meta.k8s.io API group.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_TableRow(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TableRow is an individual row in a table.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "cells": { + SchemaProps: spec.SchemaProps{ + Description: "cells will be as wide as the column definitions array and may contain strings, numbers (float64 or int64), booleans, simple maps, lists, or null. See the type field of the column definition for a more detailed description.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Format: "", + }, + }, + }, + }, + }, + "conditions": { + SchemaProps: spec.SchemaProps{ + Description: "conditions describe additional status of a row that are relevant for a human user. These conditions apply to the row, not to the object, and will be specific to table output. The only defined condition type is 'Completed', for a row that indicates a resource that has run to completion and can be given less visual priority.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.TableRowCondition"), + }, + }, + }, + }, + }, + "object": { + SchemaProps: spec.SchemaProps{ + Description: "This field contains the requested additional information about each object based on the includeObject policy when requesting the Table. If \"None\", this field is empty, if \"Object\" this will be the default serialization of the object for the current API version, and if \"Metadata\" (the default) will contain the object metadata. Check the returned kind and apiVersion of the object before parsing. The media type of the object will always match the enclosing list - if this as a JSON table, these will be JSON encoded objects.", + Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), + }, + }, + }, + Required: []string{"cells"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.TableRowCondition", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, + } +} + +func schema_pkg_apis_meta_v1_TableRowCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TableRowCondition allows a row to be marked with additional information.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of row condition. The only defined value is 'Completed' indicating that the object this row represents has reached a completed state and may be given less visual priority than other rows. Clients are not required to honor any conditions but should be consistent where possible about handling the conditions.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "(brief) machine readable reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "Human readable message indicating details about last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_Time(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + Type: metav1.Time{}.OpenAPISchemaType(), + Format: metav1.Time{}.OpenAPISchemaFormat(), + }, + }, + } +} + +func schema_pkg_apis_meta_v1_Timestamp(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Timestamp is a struct that is equivalent to Time, but intended for protobuf marshalling/unmarshalling. It is generated into a serialization that matches Time. Do not use in Go structs.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "seconds": { + SchemaProps: spec.SchemaProps{ + Description: "Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "nanos": { + SchemaProps: spec.SchemaProps{ + Description: "Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive. This field may be limited in precision depending on context.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"seconds", "nanos"}, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_TypeMeta(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TypeMeta describes an individual object in an API response or request with strings representing the type of the object and its API schema version. Structures that are versioned or persisted should inline TypeMeta.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_UpdateOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "UpdateOptions may be provided when updating an API object. All fields in UpdateOptions should also be present in PatchOptions.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "dryRun": { + SchemaProps: spec.SchemaProps{ + Description: "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "fieldManager": { + SchemaProps: spec.SchemaProps{ + Description: "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_meta_v1_WatchEvent(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Event represents a single event to a watched resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "object": { + SchemaProps: spec.SchemaProps{ + Description: "Object is:\n * If Type is Added or Modified: the new state of the object.\n * If Type is Deleted: the state of the object immediately before deletion.\n * If Type is Error: *Status is recommended; other types may make sense\n depending on context.", + Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), + }, + }, + }, + Required: []string{"type", "object"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/runtime.RawExtension"}, + } +} + +func schema_pkg_apis_meta_v1beta1_PartialObjectMetadataList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PartialObjectMetadataList contains a list of objects containing only their metadata.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items contains each of the included items.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.PartialObjectMetadata"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.PartialObjectMetadata"}, + } +} + +func schema_k8sio_apimachinery_pkg_runtime_RawExtension(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RawExtension is used to hold extensions in external versions.\n\nTo use this, make a field which has RawExtension as its type in your external, versioned struct, and Object in your internal struct. You also need to register your various plugin types.\n\n// Internal package: type MyAPIObject struct {\n\truntime.TypeMeta `json:\",inline\"`\n\tMyPlugin runtime.Object `json:\"myPlugin\"`\n} type PluginA struct {\n\tAOption string `json:\"aOption\"`\n}\n\n// External package: type MyAPIObject struct {\n\truntime.TypeMeta `json:\",inline\"`\n\tMyPlugin runtime.RawExtension `json:\"myPlugin\"`\n} type PluginA struct {\n\tAOption string `json:\"aOption\"`\n}\n\n// On the wire, the JSON will look something like this: {\n\t\"kind\":\"MyAPIObject\",\n\t\"apiVersion\":\"v1\",\n\t\"myPlugin\": {\n\t\t\"kind\":\"PluginA\",\n\t\t\"aOption\":\"foo\",\n\t},\n}\n\nSo what happens? Decode first uses json or yaml to unmarshal the serialized data into your external MyAPIObject. That causes the raw JSON to be stored, but not unpacked. The next step is to copy (using pkg/conversion) into the internal struct. The runtime package's DefaultScheme has conversion functions installed which will unpack the JSON stored in RawExtension, turning it into the correct object type, and storing it in the Object. (TODO: In the case where the object is of an unknown type, a runtime.Unknown object will be created and stored.)", + Type: []string{"object"}, + }, + }, + } +} + +func schema_k8sio_apimachinery_pkg_runtime_TypeMeta(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TypeMeta is shared by all top level objects. The proper way to use it is to inline it in your type, like this: type MyAwesomeAPIObject struct {\n runtime.TypeMeta `json:\",inline\"`\n ... // other fields\n} func (obj *MyAwesomeAPIObject) SetGroupVersionKind(gvk *metav1.GroupVersionKind) { metav1.UpdateTypeMeta(obj,gvk) }; GroupVersionKind() *GroupVersionKind\n\nTypeMeta is provided here for convenience. You may use it directly from this package or define your own with the same fields.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "kind": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_apimachinery_pkg_runtime_Unknown(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Unknown allows api objects with unknown types to be passed-through. This can be used to deal with the API objects from a plug-in. Unknown objects still have functioning TypeMeta features-- kind, version, etc. metadata and field mutatation.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "kind": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "Raw": { + SchemaProps: spec.SchemaProps{ + Description: "Raw will hold the complete serialized object which couldn't be matched with a registered type. Most likely, nothing should be done with this except for passing it through the system.", + Type: []string{"string"}, + Format: "byte", + }, + }, + "ContentEncoding": { + SchemaProps: spec.SchemaProps{ + Description: "ContentEncoding is encoding used to encode 'Raw' data. Unspecified means no encoding.", + Type: []string{"string"}, + Format: "", + }, + }, + "ContentType": { + SchemaProps: spec.SchemaProps{ + Description: "ContentType is serialization method used to serialize 'Raw'. Unspecified means ContentTypeJSON.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"Raw", "ContentEncoding", "ContentType"}, + }, + }, + } +} + +func schema_apimachinery_pkg_util_intstr_IntOrString(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "IntOrString is a type that can hold an int32 or a string. When used in JSON or YAML marshalling and unmarshalling, it produces or consumes the inner type. This allows you to have, for example, a JSON field that can accept a name or number.", + Type: intstr.IntOrString{}.OpenAPISchemaType(), + Format: intstr.IntOrString{}.OpenAPISchemaFormat(), + }, + }, + } +} + +func schema_k8sio_apimachinery_pkg_version_Info(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Info contains versioning information. how we'll want to distribute that information.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "major": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "minor": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "gitVersion": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "gitCommit": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "gitTreeState": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "buildDate": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "goVersion": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "compiler": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "platform": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"major", "minor", "gitVersion", "gitCommit", "gitTreeState", "buildDate", "goVersion", "compiler", "platform"}, + }, + }, + } +} + +func schema_pkg_apis_apiserverinternal_v1alpha1_ServerStorageVersion(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "An API server instance reports the version it can decode and the version it encodes objects to when persisting objects in the backend.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "apiServerID": { + SchemaProps: spec.SchemaProps{ + Description: "The ID of the reporting API server.", + Type: []string{"string"}, + Format: "", + }, + }, + "encodingVersion": { + SchemaProps: spec.SchemaProps{ + Description: "The API server encodes the object to this version when persisting it in the backend (e.g., etcd).", + Type: []string{"string"}, + Format: "", + }, + }, + "decodableVersions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "set", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "The API server can decode objects encoded in these versions. The encodingVersion must be included in the decodableVersions.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_apiserverinternal_v1alpha1_StorageVersion(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "\n Storage version of a specific resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "The name is ..", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec is an empty spec. It is here to comply with Kubernetes API style.", + Ref: ref("k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.StorageVersionSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "API server instances report the version they can decode and the version they encode objects to when persisting objects in the backend.", + Ref: ref("k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.StorageVersionStatus"), + }, + }, + }, + Required: []string{"spec", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.StorageVersionSpec", "k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.StorageVersionStatus"}, + } +} + +func schema_pkg_apis_apiserverinternal_v1alpha1_StorageVersionCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Describes the state of the storageVersion at a certain point.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type of the condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status of the condition, one of True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "observedGeneration": { + SchemaProps: spec.SchemaProps{ + Description: "If set, this represents the .metadata.generation that the condition was set based upon.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "The reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "A human readable message indicating details about the transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status", "reason"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_pkg_apis_apiserverinternal_v1alpha1_StorageVersionList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "A list of StorageVersions.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.StorageVersion"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.StorageVersion"}, + } +} + +func schema_pkg_apis_apiserverinternal_v1alpha1_StorageVersionSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StorageVersionSpec is an empty spec.", + Type: []string{"object"}, + }, + }, + } +} + +func schema_pkg_apis_apiserverinternal_v1alpha1_StorageVersionStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "API server instances report the versions they can decode and the version they encode objects to when persisting objects in the backend.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "storageVersions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "apiserverID", + }, + "x-kubernetes-list-type": "map", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "The reported versions per API server instance.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.ServerStorageVersion"), + }, + }, + }, + }, + }, + "commonEncodingVersion": { + SchemaProps: spec.SchemaProps{ + Description: "If all API server instances agree on the same encoding storage version, then this field is set to that version. Otherwise this field is left empty. API servers should finish updating its storageVersionStatus entry before serving write operations, so that this field will be in sync with the reality.", + Type: []string{"string"}, + Format: "", + }, + }, + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "The latest available observations of the storageVersion's state.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.StorageVersionCondition"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.ServerStorageVersion", "k8s.io/apiserver/pkg/apis/apiserverinternal/v1alpha1.StorageVersionCondition"}, + } +} + +func schema_pkg_apis_audit_v1_Event(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Event captures all the information that can be included in an API audit log.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "level": { + SchemaProps: spec.SchemaProps{ + Description: "AuditLevel at which event was generated", + Type: []string{"string"}, + Format: "", + }, + }, + "auditID": { + SchemaProps: spec.SchemaProps{ + Description: "Unique audit ID, generated for each request.", + Type: []string{"string"}, + Format: "", + }, + }, + "stage": { + SchemaProps: spec.SchemaProps{ + Description: "Stage of the request handling when this event instance was generated.", + Type: []string{"string"}, + Format: "", + }, + }, + "requestURI": { + SchemaProps: spec.SchemaProps{ + Description: "RequestURI is the request URI as sent by the client to a server.", + Type: []string{"string"}, + Format: "", + }, + }, + "verb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb is the kubernetes verb associated with the request. For non-resource requests, this is the lower-cased HTTP method.", + Type: []string{"string"}, + Format: "", + }, + }, + "user": { + SchemaProps: spec.SchemaProps{ + Description: "Authenticated user information.", + Ref: ref("k8s.io/api/authentication/v1.UserInfo"), + }, + }, + "impersonatedUser": { + SchemaProps: spec.SchemaProps{ + Description: "Impersonated user information.", + Ref: ref("k8s.io/api/authentication/v1.UserInfo"), + }, + }, + "sourceIPs": { + SchemaProps: spec.SchemaProps{ + Description: "Source IPs, from where the request originated and intermediate proxies.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "userAgent": { + SchemaProps: spec.SchemaProps{ + Description: "UserAgent records the user agent string reported by the client. Note that the UserAgent is provided by the client, and must not be trusted.", + Type: []string{"string"}, + Format: "", + }, + }, + "objectRef": { + SchemaProps: spec.SchemaProps{ + Description: "Object reference this request is targeted at. Does not apply for List-type requests, or non-resource requests.", + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1.ObjectReference"), + }, + }, + "responseStatus": { + SchemaProps: spec.SchemaProps{ + Description: "The response status, populated even when the ResponseObject is not a Status type. For successful responses, this will only include the Code and StatusSuccess. For non-status type error responses, this will be auto-populated with the error Message.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Status"), + }, + }, + "requestObject": { + SchemaProps: spec.SchemaProps{ + Description: "API object from the request, in JSON format. The RequestObject is recorded as-is in the request (possibly re-encoded as JSON), prior to version conversion, defaulting, admission or merging. It is an external versioned object type, and may not be a valid object on its own. Omitted for non-resource requests. Only logged at Request Level and higher.", + Ref: ref("k8s.io/apimachinery/pkg/runtime.Unknown"), + }, + }, + "responseObject": { + SchemaProps: spec.SchemaProps{ + Description: "API object returned in the response, in JSON. The ResponseObject is recorded after conversion to the external type, and serialized as JSON. Omitted for non-resource requests. Only logged at Response Level.", + Ref: ref("k8s.io/apimachinery/pkg/runtime.Unknown"), + }, + }, + "requestReceivedTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "Time the request reached the apiserver.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + "stageTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "Time the request reached current audit stage.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + "annotations": { + SchemaProps: spec.SchemaProps{ + Description: "Annotations is an unstructured key value map stored with an audit event that may be set by plugins invoked in the request serving chain, including authentication, authorization and admission plugins. Note that these annotations are for the audit event, and do not correspond to the metadata.annotations of the submitted object. Keys should uniquely identify the informing component to avoid name collisions (e.g. podsecuritypolicy.admission.k8s.io/policy). Values should be short. Annotations are included in the Metadata level.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"level", "auditID", "stage", "requestURI", "verb", "user"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authentication/v1.UserInfo", "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime", "k8s.io/apimachinery/pkg/apis/meta/v1.Status", "k8s.io/apimachinery/pkg/runtime.Unknown", "k8s.io/apiserver/pkg/apis/audit/v1.ObjectReference"}, + } +} + +func schema_pkg_apis_audit_v1_EventList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EventList is a list of audit Events.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1.Event"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apiserver/pkg/apis/audit/v1.Event"}, + } +} + +func schema_pkg_apis_audit_v1_GroupResources(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "GroupResources represents resource kinds in an API group.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "group": { + SchemaProps: spec.SchemaProps{ + Description: "Group is the name of the API group that contains the resources. The empty string represents the core API group.", + Type: []string{"string"}, + Format: "", + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' matches pods. 'pods/log' matches the log subresource of pods. '*' matches all resources and their subresources. 'pods/*' matches all subresources of pods. '*/scale' matches all scale subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nAn empty list implies all resources and subresources in this API groups apply.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resourceNames": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceNames is a list of resource instance names that the policy matches. Using this field requires Resources to be specified. An empty list implies that every instance of the resource is matched.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_audit_v1_ObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ObjectReference contains enough information to let you inspect or modify the referred object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "resource": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "apiGroup": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroup is the name of the API group that contains the referred object. The empty string represents the core API group.", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion is the version of the API group that contains the referred object.", + Type: []string{"string"}, + Format: "", + }, + }, + "resourceVersion": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "subresource": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_audit_v1_Policy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Policy defines the configuration of audit logging, and the rules for how different request categories are logged.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "ObjectMeta is included for interoperability with API infrastructure.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "Rules specify the audit Level a request should be recorded at. A request may match multiple rules, in which case the FIRST matching rule is used. The default audit level is None, but can be overridden by a catch-all rule at the end of the list. PolicyRules are strictly ordered.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1.PolicyRule"), + }, + }, + }, + }, + }, + "omitStages": { + SchemaProps: spec.SchemaProps{ + Description: "OmitStages is a list of stages for which no events are created. Note that this can also be specified per rule in which case the union of both are omitted.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"rules"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apiserver/pkg/apis/audit/v1.PolicyRule"}, + } +} + +func schema_pkg_apis_audit_v1_PolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PolicyList is a list of audit Policies.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1.Policy"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apiserver/pkg/apis/audit/v1.Policy"}, + } +} + +func schema_pkg_apis_audit_v1_PolicyRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PolicyRule maps requests based off metadata to an audit Level. Requests must match the rules of every field (an intersection of rules).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "level": { + SchemaProps: spec.SchemaProps{ + Description: "The Level that requests matching this rule are recorded at.", + Type: []string{"string"}, + Format: "", + }, + }, + "users": { + SchemaProps: spec.SchemaProps{ + Description: "The users (by authenticated user name) this rule applies to. An empty list implies every user.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "userGroups": { + SchemaProps: spec.SchemaProps{ + Description: "The user groups this rule applies to. A user is considered matching if it is a member of any of the UserGroups. An empty list implies every user group.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "verbs": { + SchemaProps: spec.SchemaProps{ + Description: "The verbs that match this rule. An empty list implies every verb.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources that this rule matches. An empty list implies all kinds in all API groups.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1.GroupResources"), + }, + }, + }, + }, + }, + "namespaces": { + SchemaProps: spec.SchemaProps{ + Description: "Namespaces that this rule matches. The empty string \"\" matches non-namespaced resources. An empty list implies every namespace.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "nonResourceURLs": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourceURLs is a set of URL paths that should be audited. *s are allowed, but only as the full, final step in the path. Examples:\n \"/metrics\" - Log requests for apiserver metrics\n \"/healthz*\" - Log all health checks", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "omitStages": { + SchemaProps: spec.SchemaProps{ + Description: "OmitStages is a list of stages for which no events are created. Note that this can also be specified policy wide in which case the union of both are omitted. An empty list means no restrictions will apply.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"level"}, + }, + }, + Dependencies: []string{ + "k8s.io/apiserver/pkg/apis/audit/v1.GroupResources"}, + } +} + +func schema_pkg_apis_audit_v1alpha1_Event(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Event captures all the information that can be included in an API audit log.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "ObjectMeta is included for interoperability with API infrastructure.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "level": { + SchemaProps: spec.SchemaProps{ + Description: "AuditLevel at which event was generated", + Type: []string{"string"}, + Format: "", + }, + }, + "timestamp": { + SchemaProps: spec.SchemaProps{ + Description: "Time the request reached the apiserver.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "auditID": { + SchemaProps: spec.SchemaProps{ + Description: "Unique audit ID, generated for each request.", + Type: []string{"string"}, + Format: "", + }, + }, + "stage": { + SchemaProps: spec.SchemaProps{ + Description: "Stage of the request handling when this event instance was generated.", + Type: []string{"string"}, + Format: "", + }, + }, + "requestURI": { + SchemaProps: spec.SchemaProps{ + Description: "RequestURI is the request URI as sent by the client to a server.", + Type: []string{"string"}, + Format: "", + }, + }, + "verb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb is the kubernetes verb associated with the request. For non-resource requests, this is the lower-cased HTTP method.", + Type: []string{"string"}, + Format: "", + }, + }, + "user": { + SchemaProps: spec.SchemaProps{ + Description: "Authenticated user information.", + Ref: ref("k8s.io/api/authentication/v1.UserInfo"), + }, + }, + "impersonatedUser": { + SchemaProps: spec.SchemaProps{ + Description: "Impersonated user information.", + Ref: ref("k8s.io/api/authentication/v1.UserInfo"), + }, + }, + "sourceIPs": { + SchemaProps: spec.SchemaProps{ + Description: "Source IPs, from where the request originated and intermediate proxies.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "userAgent": { + SchemaProps: spec.SchemaProps{ + Description: "UserAgent records the user agent string reported by the client. Note that the UserAgent is provided by the client, and must not be trusted.", + Type: []string{"string"}, + Format: "", + }, + }, + "objectRef": { + SchemaProps: spec.SchemaProps{ + Description: "Object reference this request is targeted at. Does not apply for List-type requests, or non-resource requests.", + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1alpha1.ObjectReference"), + }, + }, + "responseStatus": { + SchemaProps: spec.SchemaProps{ + Description: "The response status, populated even when the ResponseObject is not a Status type. For successful responses, this will only include the Code and StatusSuccess. For non-status type error responses, this will be auto-populated with the error Message.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Status"), + }, + }, + "requestObject": { + SchemaProps: spec.SchemaProps{ + Description: "API object from the request, in JSON format. The RequestObject is recorded as-is in the request (possibly re-encoded as JSON), prior to version conversion, defaulting, admission or merging. It is an external versioned object type, and may not be a valid object on its own. Omitted for non-resource requests. Only logged at Request Level and higher.", + Ref: ref("k8s.io/apimachinery/pkg/runtime.Unknown"), + }, + }, + "responseObject": { + SchemaProps: spec.SchemaProps{ + Description: "API object returned in the response, in JSON. The ResponseObject is recorded after conversion to the external type, and serialized as JSON. Omitted for non-resource requests. Only logged at Response Level.", + Ref: ref("k8s.io/apimachinery/pkg/runtime.Unknown"), + }, + }, + "requestReceivedTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "Time the request reached the apiserver.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + "stageTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "Time the request reached current audit stage.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + "annotations": { + SchemaProps: spec.SchemaProps{ + Description: "Annotations is an unstructured key value map stored with an audit event that may be set by plugins invoked in the request serving chain, including authentication, authorization and admission plugins. Note that these annotations are for the audit event, and do not correspond to the metadata.annotations of the submitted object. Keys should uniquely identify the informing component to avoid name collisions (e.g. podsecuritypolicy.admission.k8s.io/policy). Values should be short. Annotations are included in the Metadata level.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"level", "timestamp", "auditID", "stage", "requestURI", "verb", "user"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authentication/v1.UserInfo", "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Status", "k8s.io/apimachinery/pkg/apis/meta/v1.Time", "k8s.io/apimachinery/pkg/runtime.Unknown", "k8s.io/apiserver/pkg/apis/audit/v1alpha1.ObjectReference"}, + } +} + +func schema_pkg_apis_audit_v1alpha1_EventList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EventList is a list of audit Events.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1alpha1.Event"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apiserver/pkg/apis/audit/v1alpha1.Event"}, + } +} + +func schema_pkg_apis_audit_v1alpha1_GroupResources(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "GroupResources represents resource kinds in an API group.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "group": { + SchemaProps: spec.SchemaProps{ + Description: "Group is the name of the API group that contains the resources. The empty string represents the core API group.", + Type: []string{"string"}, + Format: "", + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' matches pods. 'pods/log' matches the log subresource of pods. '*' matches all resources and their subresources. 'pods/*' matches all subresources of pods. '*/scale' matches all scale subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nAn empty list implies all resources and subresources in this API groups apply.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resourceNames": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceNames is a list of resource instance names that the policy matches. Using this field requires Resources to be specified. An empty list implies that every instance of the resource is matched.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_audit_v1alpha1_ObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ObjectReference contains enough information to let you inspect or modify the referred object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "resource": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "resourceVersion": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "subresource": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_audit_v1alpha1_Policy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Policy defines the configuration of audit logging, and the rules for how different request categories are logged.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "ObjectMeta is included for interoperability with API infrastructure.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "Rules specify the audit Level a request should be recorded at. A request may match multiple rules, in which case the FIRST matching rule is used. The default audit level is None, but can be overridden by a catch-all rule at the end of the list. PolicyRules are strictly ordered.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1alpha1.PolicyRule"), + }, + }, + }, + }, + }, + "omitStages": { + SchemaProps: spec.SchemaProps{ + Description: "OmitStages is a list of stages for which no events are created. Note that this can also be specified per rule in which case the union of both are omitted.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"rules"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apiserver/pkg/apis/audit/v1alpha1.PolicyRule"}, + } +} + +func schema_pkg_apis_audit_v1alpha1_PolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PolicyList is a list of audit Policies.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1alpha1.Policy"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apiserver/pkg/apis/audit/v1alpha1.Policy"}, + } +} + +func schema_pkg_apis_audit_v1alpha1_PolicyRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PolicyRule maps requests based off metadata to an audit Level. Requests must match the rules of every field (an intersection of rules).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "level": { + SchemaProps: spec.SchemaProps{ + Description: "The Level that requests matching this rule are recorded at.", + Type: []string{"string"}, + Format: "", + }, + }, + "users": { + SchemaProps: spec.SchemaProps{ + Description: "The users (by authenticated user name) this rule applies to. An empty list implies every user.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "userGroups": { + SchemaProps: spec.SchemaProps{ + Description: "The user groups this rule applies to. A user is considered matching if it is a member of any of the UserGroups. An empty list implies every user group.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "verbs": { + SchemaProps: spec.SchemaProps{ + Description: "The verbs that match this rule. An empty list implies every verb.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources that this rule matches. An empty list implies all kinds in all API groups.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1alpha1.GroupResources"), + }, + }, + }, + }, + }, + "namespaces": { + SchemaProps: spec.SchemaProps{ + Description: "Namespaces that this rule matches. The empty string \"\" matches non-namespaced resources. An empty list implies every namespace.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "nonResourceURLs": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourceURLs is a set of URL paths that should be audited. *s are allowed, but only as the full, final step in the path. Examples:\n \"/metrics\" - Log requests for apiserver metrics\n \"/healthz*\" - Log all health checks", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "omitStages": { + SchemaProps: spec.SchemaProps{ + Description: "OmitStages is a list of stages for which no events are created. Note that this can also be specified policy wide in which case the union of both are omitted. An empty list means no restrictions will apply.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"level"}, + }, + }, + Dependencies: []string{ + "k8s.io/apiserver/pkg/apis/audit/v1alpha1.GroupResources"}, + } +} + +func schema_pkg_apis_audit_v1beta1_Event(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Event captures all the information that can be included in an API audit log.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "ObjectMeta is included for interoperability with API infrastructure. DEPRECATED: Use StageTimestamp which supports micro second instead of ObjectMeta.CreateTimestamp and the rest of the object is not used", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "level": { + SchemaProps: spec.SchemaProps{ + Description: "AuditLevel at which event was generated", + Type: []string{"string"}, + Format: "", + }, + }, + "timestamp": { + SchemaProps: spec.SchemaProps{ + Description: "Time the request reached the apiserver. DEPRECATED: Use RequestReceivedTimestamp which supports micro second instead.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "auditID": { + SchemaProps: spec.SchemaProps{ + Description: "Unique audit ID, generated for each request.", + Type: []string{"string"}, + Format: "", + }, + }, + "stage": { + SchemaProps: spec.SchemaProps{ + Description: "Stage of the request handling when this event instance was generated.", + Type: []string{"string"}, + Format: "", + }, + }, + "requestURI": { + SchemaProps: spec.SchemaProps{ + Description: "RequestURI is the request URI as sent by the client to a server.", + Type: []string{"string"}, + Format: "", + }, + }, + "verb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb is the kubernetes verb associated with the request. For non-resource requests, this is the lower-cased HTTP method.", + Type: []string{"string"}, + Format: "", + }, + }, + "user": { + SchemaProps: spec.SchemaProps{ + Description: "Authenticated user information.", + Ref: ref("k8s.io/api/authentication/v1.UserInfo"), + }, + }, + "impersonatedUser": { + SchemaProps: spec.SchemaProps{ + Description: "Impersonated user information.", + Ref: ref("k8s.io/api/authentication/v1.UserInfo"), + }, + }, + "sourceIPs": { + SchemaProps: spec.SchemaProps{ + Description: "Source IPs, from where the request originated and intermediate proxies.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "userAgent": { + SchemaProps: spec.SchemaProps{ + Description: "UserAgent records the user agent string reported by the client. Note that the UserAgent is provided by the client, and must not be trusted.", + Type: []string{"string"}, + Format: "", + }, + }, + "objectRef": { + SchemaProps: spec.SchemaProps{ + Description: "Object reference this request is targeted at. Does not apply for List-type requests, or non-resource requests.", + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1beta1.ObjectReference"), + }, + }, + "responseStatus": { + SchemaProps: spec.SchemaProps{ + Description: "The response status, populated even when the ResponseObject is not a Status type. For successful responses, this will only include the Code and StatusSuccess. For non-status type error responses, this will be auto-populated with the error Message.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Status"), + }, + }, + "requestObject": { + SchemaProps: spec.SchemaProps{ + Description: "API object from the request, in JSON format. The RequestObject is recorded as-is in the request (possibly re-encoded as JSON), prior to version conversion, defaulting, admission or merging. It is an external versioned object type, and may not be a valid object on its own. Omitted for non-resource requests. Only logged at Request Level and higher.", + Ref: ref("k8s.io/apimachinery/pkg/runtime.Unknown"), + }, + }, + "responseObject": { + SchemaProps: spec.SchemaProps{ + Description: "API object returned in the response, in JSON. The ResponseObject is recorded after conversion to the external type, and serialized as JSON. Omitted for non-resource requests. Only logged at Response Level.", + Ref: ref("k8s.io/apimachinery/pkg/runtime.Unknown"), + }, + }, + "requestReceivedTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "Time the request reached the apiserver.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + "stageTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "Time the request reached current audit stage.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), + }, + }, + "annotations": { + SchemaProps: spec.SchemaProps{ + Description: "Annotations is an unstructured key value map stored with an audit event that may be set by plugins invoked in the request serving chain, including authentication, authorization and admission plugins. Note that these annotations are for the audit event, and do not correspond to the metadata.annotations of the submitted object. Keys should uniquely identify the informing component to avoid name collisions (e.g. podsecuritypolicy.admission.k8s.io/policy). Values should be short. Annotations are included in the Metadata level.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"level", "timestamp", "auditID", "stage", "requestURI", "verb", "user"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/authentication/v1.UserInfo", "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Status", "k8s.io/apimachinery/pkg/apis/meta/v1.Time", "k8s.io/apimachinery/pkg/runtime.Unknown", "k8s.io/apiserver/pkg/apis/audit/v1beta1.ObjectReference"}, + } +} + +func schema_pkg_apis_audit_v1beta1_EventList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EventList is a list of audit Events.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1beta1.Event"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apiserver/pkg/apis/audit/v1beta1.Event"}, + } +} + +func schema_pkg_apis_audit_v1beta1_GroupResources(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "GroupResources represents resource kinds in an API group.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "group": { + SchemaProps: spec.SchemaProps{ + Description: "Group is the name of the API group that contains the resources. The empty string represents the core API group.", + Type: []string{"string"}, + Format: "", + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' matches pods. 'pods/log' matches the log subresource of pods. '*' matches all resources and their subresources. 'pods/*' matches all subresources of pods. '*/scale' matches all scale subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nAn empty list implies all resources and subresources in this API groups apply.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resourceNames": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceNames is a list of resource instance names that the policy matches. Using this field requires Resources to be specified. An empty list implies that every instance of the resource is matched.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_audit_v1beta1_ObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ObjectReference contains enough information to let you inspect or modify the referred object.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "resource": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "uid": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "apiGroup": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroup is the name of the API group that contains the referred object. The empty string represents the core API group.", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion is the version of the API group that contains the referred object.", + Type: []string{"string"}, + Format: "", + }, + }, + "resourceVersion": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + "subresource": { + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_audit_v1beta1_Policy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Policy defines the configuration of audit logging, and the rules for how different request categories are logged.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "ObjectMeta is included for interoperability with API infrastructure.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "rules": { + SchemaProps: spec.SchemaProps{ + Description: "Rules specify the audit Level a request should be recorded at. A request may match multiple rules, in which case the FIRST matching rule is used. The default audit level is None, but can be overridden by a catch-all rule at the end of the list. PolicyRules are strictly ordered.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1beta1.PolicyRule"), + }, + }, + }, + }, + }, + "omitStages": { + SchemaProps: spec.SchemaProps{ + Description: "OmitStages is a list of stages for which no events are created. Note that this can also be specified per rule in which case the union of both are omitted.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"rules"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apiserver/pkg/apis/audit/v1beta1.PolicyRule"}, + } +} + +func schema_pkg_apis_audit_v1beta1_PolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PolicyList is a list of audit Policies.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1beta1.Policy"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apiserver/pkg/apis/audit/v1beta1.Policy"}, + } +} + +func schema_pkg_apis_audit_v1beta1_PolicyRule(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PolicyRule maps requests based off metadata to an audit Level. Requests must match the rules of every field (an intersection of rules).", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "level": { + SchemaProps: spec.SchemaProps{ + Description: "The Level that requests matching this rule are recorded at.", + Type: []string{"string"}, + Format: "", + }, + }, + "users": { + SchemaProps: spec.SchemaProps{ + Description: "The users (by authenticated user name) this rule applies to. An empty list implies every user.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "userGroups": { + SchemaProps: spec.SchemaProps{ + Description: "The user groups this rule applies to. A user is considered matching if it is a member of any of the UserGroups. An empty list implies every user group.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "verbs": { + SchemaProps: spec.SchemaProps{ + Description: "The verbs that match this rule. An empty list implies every verb.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Description: "Resources that this rule matches. An empty list implies all kinds in all API groups.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1beta1.GroupResources"), + }, + }, + }, + }, + }, + "namespaces": { + SchemaProps: spec.SchemaProps{ + Description: "Namespaces that this rule matches. The empty string \"\" matches non-namespaced resources. An empty list implies every namespace.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "nonResourceURLs": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourceURLs is a set of URL paths that should be audited. *s are allowed, but only as the full, final step in the path. Examples:\n \"/metrics\" - Log requests for apiserver metrics\n \"/healthz*\" - Log all health checks", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "omitStages": { + SchemaProps: spec.SchemaProps{ + Description: "OmitStages is a list of stages for which no events are created. Note that this can also be specified policy wide in which case the union of both are omitted. An empty list means no restrictions will apply.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"level"}, + }, + }, + Dependencies: []string{ + "k8s.io/apiserver/pkg/apis/audit/v1beta1.GroupResources"}, + } +} + +func schema_pkg_apis_clientauthentication_v1alpha1_ExecCredential(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExecCredential is used by exec-based plugins to communicate credentials to HTTP transports.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec holds information passed to the plugin by the transport. This contains request and runtime specific information, such as if the session is interactive.", + Ref: ref("k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.ExecCredentialSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is filled in by the plugin and holds the credentials that the transport should use to contact the API.", + Ref: ref("k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.ExecCredentialStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.ExecCredentialSpec", "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.ExecCredentialStatus"}, + } +} + +func schema_pkg_apis_clientauthentication_v1alpha1_ExecCredentialSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExecCredenitalSpec holds request and runtime specific information provided by the transport.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "response": { + SchemaProps: spec.SchemaProps{ + Description: "Response is populated when the transport encounters HTTP status codes, such as 401, suggesting previous credentials were invalid.", + Ref: ref("k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.Response"), + }, + }, + "interactive": { + SchemaProps: spec.SchemaProps{ + Description: "Interactive is true when the transport detects the command is being called from an interactive prompt.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.Response"}, + } +} + +func schema_pkg_apis_clientauthentication_v1alpha1_ExecCredentialStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExecCredentialStatus holds credentials for the transport to use.\n\nToken and ClientKeyData are sensitive fields. This data should only be transmitted in-memory between client and exec plugin process. Exec plugin itself should at least be protected via file permissions.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "expirationTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "ExpirationTimestamp indicates a time when the provided credentials expire.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "token": { + SchemaProps: spec.SchemaProps{ + Description: "Token is a bearer token used by the client for request authentication.", + Type: []string{"string"}, + Format: "", + }, + }, + "clientCertificateData": { + SchemaProps: spec.SchemaProps{ + Description: "PEM-encoded client TLS certificates (including intermediates, if any).", + Type: []string{"string"}, + Format: "", + }, + }, + "clientKeyData": { + SchemaProps: spec.SchemaProps{ + Description: "PEM-encoded private key for the above certificate.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_pkg_apis_clientauthentication_v1alpha1_Response(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Response defines metadata about a failed request, including HTTP status code and response headers.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "header": { + SchemaProps: spec.SchemaProps{ + Description: "Header holds HTTP headers returned by the server.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + "code": { + SchemaProps: spec.SchemaProps{ + Description: "Code is the HTTP status code returned by the server.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_clientauthentication_v1beta1_ExecCredential(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExecCredentials is used by exec-based plugins to communicate credentials to HTTP transports.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec holds information passed to the plugin by the transport. This contains request and runtime specific information, such as if the session is interactive.", + Ref: ref("k8s.io/client-go/pkg/apis/clientauthentication/v1beta1.ExecCredentialSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is filled in by the plugin and holds the credentials that the transport should use to contact the API.", + Ref: ref("k8s.io/client-go/pkg/apis/clientauthentication/v1beta1.ExecCredentialStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1.ExecCredentialSpec", "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1.ExecCredentialStatus"}, + } +} + +func schema_pkg_apis_clientauthentication_v1beta1_ExecCredentialSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExecCredenitalSpec holds request and runtime specific information provided by the transport.", + Type: []string{"object"}, + }, + }, + } +} + +func schema_pkg_apis_clientauthentication_v1beta1_ExecCredentialStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExecCredentialStatus holds credentials for the transport to use.\n\nToken and ClientKeyData are sensitive fields. This data should only be transmitted in-memory between client and exec plugin process. Exec plugin itself should at least be protected via file permissions.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "expirationTimestamp": { + SchemaProps: spec.SchemaProps{ + Description: "ExpirationTimestamp indicates a time when the provided credentials expire.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "token": { + SchemaProps: spec.SchemaProps{ + Description: "Token is a bearer token used by the client for request authentication.", + Type: []string{"string"}, + Format: "", + }, + }, + "clientCertificateData": { + SchemaProps: spec.SchemaProps{ + Description: "PEM-encoded client TLS certificates (including intermediates, if any).", + Type: []string{"string"}, + Format: "", + }, + }, + "clientKeyData": { + SchemaProps: spec.SchemaProps{ + Description: "PEM-encoded private key for the above certificate.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_pkg_apis_apiregistration_v1_APIService(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIService represents a server for a particular GroupVersion. Name must be \"version.group\".", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec contains information for locating and communicating with a server", + Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status contains derived information about an API server", + Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceSpec", "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceStatus"}, + } +} + +func schema_pkg_apis_apiregistration_v1_APIServiceCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIServiceCondition describes the state of an APIService at a particular point", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type is the type of the condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the status of the condition. Can be True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "Unique, one-word, CamelCase reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "Human-readable message indicating details about last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_pkg_apis_apiregistration_v1_APIServiceList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIServiceList is a list of APIService objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIService"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIService"}, + } +} + +func schema_pkg_apis_apiregistration_v1_APIServiceSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "service": { + SchemaProps: spec.SchemaProps{ + Description: "Service is a reference to the service for this API server. It must communicate on port 443. If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.", + Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.ServiceReference"), + }, + }, + "group": { + SchemaProps: spec.SchemaProps{ + Description: "Group is the API group name this server hosts", + Type: []string{"string"}, + Format: "", + }, + }, + "version": { + SchemaProps: spec.SchemaProps{ + Description: "Version is the API version this server hosts. For example, \"v1\"", + Type: []string{"string"}, + Format: "", + }, + }, + "insecureSkipTLSVerify": { + SchemaProps: spec.SchemaProps{ + Description: "InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "caBundle": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate. If unspecified, system trust roots on the apiserver are used.", + Type: []string{"string"}, + Format: "byte", + }, + }, + "groupPriorityMinimum": { + SchemaProps: spec.SchemaProps{ + Description: "GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "versionPriority": { + SchemaProps: spec.SchemaProps{ + Description: "VersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"groupPriorityMinimum", "versionPriority"}, + }, + }, + Dependencies: []string{ + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.ServiceReference"}, + } +} + +func schema_pkg_apis_apiregistration_v1_APIServiceStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIServiceStatus contains derived information about an API server", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Current service state of apiService.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceCondition"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceCondition"}, + } +} + +func schema_pkg_apis_apiregistration_v1_ServiceReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceReference holds a reference to Service.legacy.k8s.io", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace is the namespace of the service", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the name of the service", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, the port on the service that hosting webhook. Default to 443 for backward compatibility. `port` should be a valid port number (1-65535, inclusive).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_apiregistration_v1beta1_APIService(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIService represents a server for a particular GroupVersion. Name must be \"version.group\".", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec contains information for locating and communicating with a server", + Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status contains derived information about an API server", + Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceSpec", "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceStatus"}, + } +} + +func schema_pkg_apis_apiregistration_v1beta1_APIServiceCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIServiceCondition describes the state of an APIService at a particular point", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "Type is the type of the condition.", + Type: []string{"string"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the status of the condition. Can be True, False, Unknown.", + Type: []string{"string"}, + Format: "", + }, + }, + "lastTransitionTime": { + SchemaProps: spec.SchemaProps{ + Description: "Last time the condition transitioned from one status to another.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "reason": { + SchemaProps: spec.SchemaProps{ + Description: "Unique, one-word, CamelCase reason for the condition's last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "Human-readable message indicating details about last transition.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"type", "status"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_pkg_apis_apiregistration_v1beta1_APIServiceList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIServiceList is a list of APIService objects.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIService"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIService"}, + } +} + +func schema_pkg_apis_apiregistration_v1beta1_APIServiceSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "service": { + SchemaProps: spec.SchemaProps{ + Description: "Service is a reference to the service for this API server. It must communicate on port 443. If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.", + Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.ServiceReference"), + }, + }, + "group": { + SchemaProps: spec.SchemaProps{ + Description: "Group is the API group name this server hosts", + Type: []string{"string"}, + Format: "", + }, + }, + "version": { + SchemaProps: spec.SchemaProps{ + Description: "Version is the API version this server hosts. For example, \"v1\"", + Type: []string{"string"}, + Format: "", + }, + }, + "insecureSkipTLSVerify": { + SchemaProps: spec.SchemaProps{ + Description: "InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "caBundle": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate. If unspecified, system trust roots on the apiserver are used.", + Type: []string{"string"}, + Format: "byte", + }, + }, + "groupPriorityMinimum": { + SchemaProps: spec.SchemaProps{ + Description: "GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "versionPriority": { + SchemaProps: spec.SchemaProps{ + Description: "VersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"groupPriorityMinimum", "versionPriority"}, + }, + }, + Dependencies: []string{ + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.ServiceReference"}, + } +} + +func schema_pkg_apis_apiregistration_v1beta1_APIServiceStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "APIServiceStatus contains derived information about an API server", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Current service state of apiService.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceCondition"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceCondition"}, + } +} + +func schema_pkg_apis_apiregistration_v1beta1_ServiceReference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceReference holds a reference to Service.legacy.k8s.io", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace is the namespace of the service", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the name of the service", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "If specified, the port on the service that hosting webhook. Default to 443 for backward compatibility. `port` should be a valid port number (1-65535, inclusive).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_AttachDetachControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "AttachDetachControllerConfiguration contains elements describing AttachDetachController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "DisableAttachDetachReconcilerSync": { + SchemaProps: spec.SchemaProps{ + Description: "Reconciler runs a periodic loop to reconcile the desired state of the with the actual state of the world by triggering attach detach operations. This flag enables or disables reconcile. Is false by default, and thus enabled.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "ReconcilerSyncLoopPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "ReconcilerSyncLoopPeriod is the amount of time the reconciler sync states loop wait between successive executions. Is set to 5 sec by default.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + }, + Required: []string{"DisableAttachDetachReconcilerSync", "ReconcilerSyncLoopPeriod"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_CSRSigningConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSRSigningConfiguration holds information about a particular CSR signer", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "CertFile": { + SchemaProps: spec.SchemaProps{ + Description: "certFile is the filename containing a PEM-encoded X509 CA certificate used to issue certificates", + Type: []string{"string"}, + Format: "", + }, + }, + "KeyFile": { + SchemaProps: spec.SchemaProps{ + Description: "keyFile is the filename containing a PEM-encoded RSA or ECDSA private key used to issue certificates", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"CertFile", "KeyFile"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_CSRSigningControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CSRSigningControllerConfiguration contains elements describing CSRSigningController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ClusterSigningCertFile": { + SchemaProps: spec.SchemaProps{ + Description: "clusterSigningCertFile is the filename containing a PEM-encoded X509 CA certificate used to issue cluster-scoped certificates", + Type: []string{"string"}, + Format: "", + }, + }, + "ClusterSigningKeyFile": { + SchemaProps: spec.SchemaProps{ + Description: "clusterSigningCertFile is the filename containing a PEM-encoded RSA or ECDSA private key used to issue cluster-scoped certificates", + Type: []string{"string"}, + Format: "", + }, + }, + "KubeletServingSignerConfiguration": { + SchemaProps: spec.SchemaProps{ + Description: "kubeletServingSignerConfiguration holds the certificate and key used to issue certificates for the kubernetes.io/kubelet-serving signer", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.CSRSigningConfiguration"), + }, + }, + "KubeletClientSignerConfiguration": { + SchemaProps: spec.SchemaProps{ + Description: "kubeletClientSignerConfiguration holds the certificate and key used to issue certificates for the kubernetes.io/kube-apiserver-client-kubelet", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.CSRSigningConfiguration"), + }, + }, + "KubeAPIServerClientSignerConfiguration": { + SchemaProps: spec.SchemaProps{ + Description: "kubeAPIServerClientSignerConfiguration holds the certificate and key used to issue certificates for the kubernetes.io/kube-apiserver-client", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.CSRSigningConfiguration"), + }, + }, + "LegacyUnknownSignerConfiguration": { + SchemaProps: spec.SchemaProps{ + Description: "legacyUnknownSignerConfiguration holds the certificate and key used to issue certificates for the kubernetes.io/legacy-unknown", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.CSRSigningConfiguration"), + }, + }, + "ClusterSigningDuration": { + SchemaProps: spec.SchemaProps{ + Description: "clusterSigningDuration is the length of duration signed certificates will be given.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + }, + Required: []string{"ClusterSigningCertFile", "ClusterSigningKeyFile", "KubeletServingSignerConfiguration", "KubeletClientSignerConfiguration", "KubeAPIServerClientSignerConfiguration", "LegacyUnknownSignerConfiguration", "ClusterSigningDuration"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/kube-controller-manager/config/v1alpha1.CSRSigningConfiguration"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_CloudProviderConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CloudProviderConfiguration contains basically elements about cloud provider.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "Name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the provider for cloud services.", + Type: []string{"string"}, + Format: "", + }, + }, + "CloudConfigFile": { + SchemaProps: spec.SchemaProps{ + Description: "cloudConfigFile is the path to the cloud provider configuration file.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"Name", "CloudConfigFile"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_DaemonSetControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetControllerConfiguration contains elements describing DaemonSetController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ConcurrentDaemonSetSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "concurrentDaemonSetSyncs is the number of daemonset objects that are allowed to sync concurrently. Larger number = more responsive daemonset, but more CPU (and network) load.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"ConcurrentDaemonSetSyncs"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_DeploymentControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeploymentControllerConfiguration contains elements describing DeploymentController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ConcurrentDeploymentSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "concurrentDeploymentSyncs is the number of deployment objects that are allowed to sync concurrently. Larger number = more responsive deployments, but more CPU (and network) load.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "DeploymentControllerSyncPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "deploymentControllerSyncPeriod is the period for syncing the deployments.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + }, + Required: []string{"ConcurrentDeploymentSyncs", "DeploymentControllerSyncPeriod"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_DeprecatedControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "DeprecatedControllerConfiguration contains elements be deprecated.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "DeletingPodsQPS": { + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED: deletingPodsQps is the number of nodes per second on which pods are deleted in case of node failure.", + Type: []string{"number"}, + Format: "float", + }, + }, + "DeletingPodsBurst": { + SchemaProps: spec.SchemaProps{ + Description: "DEPRECATED: deletingPodsBurst is the number of nodes on which pods are bursty deleted in case of node failure. For more details look into RateLimiter.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "RegisterRetryCount": { + SchemaProps: spec.SchemaProps{ + Description: "registerRetryCount is the number of retries for initial node registration. Retry interval equals node-sync-period.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"DeletingPodsQPS", "DeletingPodsBurst", "RegisterRetryCount"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_EndpointControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointControllerConfiguration contains elements describing EndpointController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ConcurrentEndpointSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "concurrentEndpointSyncs is the number of endpoint syncing operations that will be done concurrently. Larger number = faster endpoint updating, but more CPU (and network) load.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "EndpointUpdatesBatchPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "EndpointUpdatesBatchPeriod describes the length of endpoint updates batching period. Processing of pod changes will be delayed by this duration to join them with potential upcoming updates and reduce the overall number of endpoints updates.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + }, + Required: []string{"ConcurrentEndpointSyncs", "EndpointUpdatesBatchPeriod"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_EndpointSliceControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointSliceControllerConfiguration contains elements describing EndpointSliceController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ConcurrentServiceEndpointSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "concurrentServiceEndpointSyncs is the number of service endpoint syncing operations that will be done concurrently. Larger number = faster endpoint slice updating, but more CPU (and network) load.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "MaxEndpointsPerSlice": { + SchemaProps: spec.SchemaProps{ + Description: "maxEndpointsPerSlice is the maximum number of endpoints that will be added to an EndpointSlice. More endpoints per slice will result in fewer and larger endpoint slices, but larger resources.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "EndpointUpdatesBatchPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "EndpointUpdatesBatchPeriod describes the length of endpoint updates batching period. Processing of pod changes will be delayed by this duration to join them with potential upcoming updates and reduce the overall number of endpoints updates.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + }, + Required: []string{"ConcurrentServiceEndpointSyncs", "MaxEndpointsPerSlice", "EndpointUpdatesBatchPeriod"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_EndpointSliceMirroringControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "EndpointSliceMirroringControllerConfiguration contains elements describing EndpointSliceMirroringController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "MirroringConcurrentServiceEndpointSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "mirroringConcurrentServiceEndpointSyncs is the number of service endpoint syncing operations that will be done concurrently. Larger number = faster endpoint slice updating, but more CPU (and network) load.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "MirroringMaxEndpointsPerSubset": { + SchemaProps: spec.SchemaProps{ + Description: "mirroringMaxEndpointsPerSubset is the maximum number of endpoints that will be mirrored to an EndpointSlice for an EndpointSubset.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "MirroringEndpointUpdatesBatchPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "mirroringEndpointUpdatesBatchPeriod can be used to batch EndpointSlice updates. All updates triggered by EndpointSlice changes will be delayed by up to 'mirroringEndpointUpdatesBatchPeriod'. If other addresses in the same Endpoints resource change in that period, they will be batched to a single EndpointSlice update. Default 0 value means that each Endpoints update triggers an EndpointSlice update.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + }, + Required: []string{"MirroringConcurrentServiceEndpointSyncs", "MirroringMaxEndpointsPerSubset", "MirroringEndpointUpdatesBatchPeriod"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_GarbageCollectorControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "GarbageCollectorControllerConfiguration contains elements describing GarbageCollectorController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "EnableGarbageCollector": { + SchemaProps: spec.SchemaProps{ + Description: "enables the generic garbage collector. MUST be synced with the corresponding flag of the kube-apiserver. WARNING: the generic garbage collector is an alpha feature.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "ConcurrentGCSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "concurrentGCSyncs is the number of garbage collector workers that are allowed to sync concurrently.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "GCIgnoredResources": { + SchemaProps: spec.SchemaProps{ + Description: "gcIgnoredResources is the list of GroupResources that garbage collection should ignore.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.GroupResource"), + }, + }, + }, + }, + }, + }, + Required: []string{"EnableGarbageCollector", "ConcurrentGCSyncs", "GCIgnoredResources"}, + }, + }, + Dependencies: []string{ + "k8s.io/kube-controller-manager/config/v1alpha1.GroupResource"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_GenericControllerManagerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "GenericControllerManagerConfiguration holds configuration for a generic controller-manager.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "Port": { + SchemaProps: spec.SchemaProps{ + Description: "port is the port that the controller-manager's http service runs on.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "Address": { + SchemaProps: spec.SchemaProps{ + Description: "address is the IP address to serve on (set to 0.0.0.0 for all interfaces).", + Type: []string{"string"}, + Format: "", + }, + }, + "MinResyncPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "minResyncPeriod is the resync period in reflectors; will be random between minResyncPeriod and 2*minResyncPeriod.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "ClientConnection": { + SchemaProps: spec.SchemaProps{ + Description: "ClientConnection specifies the kubeconfig file and client connection settings for the proxy server to use when communicating with the apiserver.", + Ref: ref("k8s.io/component-base/config/v1alpha1.ClientConnectionConfiguration"), + }, + }, + "ControllerStartInterval": { + SchemaProps: spec.SchemaProps{ + Description: "How long to wait between starting controller managers", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "LeaderElection": { + SchemaProps: spec.SchemaProps{ + Description: "leaderElection defines the configuration of leader election client.", + Ref: ref("k8s.io/component-base/config/v1alpha1.LeaderElectionConfiguration"), + }, + }, + "Controllers": { + SchemaProps: spec.SchemaProps{ + Description: "Controllers is the list of controllers to enable or disable '*' means \"all enabled by default controllers\" 'foo' means \"enable 'foo'\" '-foo' means \"disable 'foo'\" first item for a particular name wins", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "Debugging": { + SchemaProps: spec.SchemaProps{ + Description: "DebuggingConfiguration holds configuration for Debugging related features.", + Ref: ref("k8s.io/component-base/config/v1alpha1.DebuggingConfiguration"), + }, + }, + }, + Required: []string{"Port", "Address", "MinResyncPeriod", "ClientConnection", "ControllerStartInterval", "LeaderElection", "Controllers", "Debugging"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/component-base/config/v1alpha1.ClientConnectionConfiguration", "k8s.io/component-base/config/v1alpha1.DebuggingConfiguration", "k8s.io/component-base/config/v1alpha1.LeaderElectionConfiguration"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_GroupResource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "GroupResource describes an group resource.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "Group": { + SchemaProps: spec.SchemaProps{ + Description: "group is the group portion of the GroupResource.", + Type: []string{"string"}, + Format: "", + }, + }, + "Resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource is the resource portion of the GroupResource.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"Group", "Resource"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_HPAControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HPAControllerConfiguration contains elements describing HPAController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "HorizontalPodAutoscalerSyncPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerSyncPeriod is the period for syncing the number of pods in horizontal pod autoscaler.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "HorizontalPodAutoscalerUpscaleForbiddenWindow": { + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerUpscaleForbiddenWindow is a period after which next upscale allowed.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "HorizontalPodAutoscalerDownscaleStabilizationWindow": { + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerDowncaleStabilizationWindow is a period for which autoscaler will look backwards and not scale down below any recommendation it made during that period.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "HorizontalPodAutoscalerDownscaleForbiddenWindow": { + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerDownscaleForbiddenWindow is a period after which next downscale allowed.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "HorizontalPodAutoscalerTolerance": { + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerTolerance is the tolerance for when resource usage suggests upscaling/downscaling", + Type: []string{"number"}, + Format: "double", + }, + }, + "HorizontalPodAutoscalerUseRESTClients": { + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerUseRESTClients causes the HPA controller to use REST clients through the kube-aggregator when enabled, instead of using the legacy metrics client through the API server proxy.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "HorizontalPodAutoscalerCPUInitializationPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerCPUInitializationPeriod is the period after pod start when CPU samples might be skipped.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "HorizontalPodAutoscalerInitialReadinessDelay": { + SchemaProps: spec.SchemaProps{ + Description: "HorizontalPodAutoscalerInitialReadinessDelay is period after pod start during which readiness changes are treated as readiness being set for the first time. The only effect of this is that HPA will disregard CPU samples from unready pods that had last readiness change during that period.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + }, + Required: []string{"HorizontalPodAutoscalerSyncPeriod", "HorizontalPodAutoscalerUpscaleForbiddenWindow", "HorizontalPodAutoscalerDownscaleStabilizationWindow", "HorizontalPodAutoscalerDownscaleForbiddenWindow", "HorizontalPodAutoscalerTolerance", "HorizontalPodAutoscalerUseRESTClients", "HorizontalPodAutoscalerCPUInitializationPeriod", "HorizontalPodAutoscalerInitialReadinessDelay"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_JobControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "JobControllerConfiguration contains elements describing JobController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ConcurrentJobSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "concurrentJobSyncs is the number of job objects that are allowed to sync concurrently. Larger number = more responsive jobs, but more CPU (and network) load.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"ConcurrentJobSyncs"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_KubeCloudSharedConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "KubeCloudSharedConfiguration contains elements shared by both kube-controller manager and cloud-controller manager, but not genericconfig.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "CloudProvider": { + SchemaProps: spec.SchemaProps{ + Description: "CloudProviderConfiguration holds configuration for CloudProvider related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.CloudProviderConfiguration"), + }, + }, + "ExternalCloudVolumePlugin": { + SchemaProps: spec.SchemaProps{ + Description: "externalCloudVolumePlugin specifies the plugin to use when cloudProvider is \"external\". It is currently used by the in repo cloud providers to handle node and volume control in the KCM.", + Type: []string{"string"}, + Format: "", + }, + }, + "UseServiceAccountCredentials": { + SchemaProps: spec.SchemaProps{ + Description: "useServiceAccountCredentials indicates whether controllers should be run with individual service account credentials.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "AllowUntaggedCloud": { + SchemaProps: spec.SchemaProps{ + Description: "run with untagged cloud instances", + Type: []string{"boolean"}, + Format: "", + }, + }, + "RouteReconciliationPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "routeReconciliationPeriod is the period for reconciling routes created for Nodes by cloud provider..", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "NodeMonitorPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "nodeMonitorPeriod is the period for syncing NodeStatus in NodeController.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "ClusterName": { + SchemaProps: spec.SchemaProps{ + Description: "clusterName is the instance prefix for the cluster.", + Type: []string{"string"}, + Format: "", + }, + }, + "ClusterCIDR": { + SchemaProps: spec.SchemaProps{ + Description: "clusterCIDR is CIDR Range for Pods in cluster.", + Type: []string{"string"}, + Format: "", + }, + }, + "AllocateNodeCIDRs": { + SchemaProps: spec.SchemaProps{ + Description: "AllocateNodeCIDRs enables CIDRs for Pods to be allocated and, if ConfigureCloudRoutes is true, to be set on the cloud provider.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "CIDRAllocatorType": { + SchemaProps: spec.SchemaProps{ + Description: "CIDRAllocatorType determines what kind of pod CIDR allocator will be used.", + Type: []string{"string"}, + Format: "", + }, + }, + "ConfigureCloudRoutes": { + SchemaProps: spec.SchemaProps{ + Description: "configureCloudRoutes enables CIDRs allocated with allocateNodeCIDRs to be configured on the cloud provider.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "NodeSyncPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "nodeSyncPeriod is the period for syncing nodes from cloudprovider. Longer periods will result in fewer calls to cloud provider, but may delay addition of new nodes to cluster.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + }, + Required: []string{"CloudProvider", "ExternalCloudVolumePlugin", "UseServiceAccountCredentials", "AllowUntaggedCloud", "RouteReconciliationPeriod", "NodeMonitorPeriod", "ClusterName", "ClusterCIDR", "AllocateNodeCIDRs", "CIDRAllocatorType", "ConfigureCloudRoutes", "NodeSyncPeriod"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/kube-controller-manager/config/v1alpha1.CloudProviderConfiguration"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_KubeControllerManagerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "KubeControllerManagerConfiguration contains elements describing kube-controller manager.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "Generic": { + SchemaProps: spec.SchemaProps{ + Description: "Generic holds configuration for a generic controller-manager", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.GenericControllerManagerConfiguration"), + }, + }, + "KubeCloudShared": { + SchemaProps: spec.SchemaProps{ + Description: "KubeCloudSharedConfiguration holds configuration for shared related features both in cloud controller manager and kube-controller manager.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.KubeCloudSharedConfiguration"), + }, + }, + "AttachDetachController": { + SchemaProps: spec.SchemaProps{ + Description: "AttachDetachControllerConfiguration holds configuration for AttachDetachController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.AttachDetachControllerConfiguration"), + }, + }, + "CSRSigningController": { + SchemaProps: spec.SchemaProps{ + Description: "CSRSigningControllerConfiguration holds configuration for CSRSigningController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.CSRSigningControllerConfiguration"), + }, + }, + "DaemonSetController": { + SchemaProps: spec.SchemaProps{ + Description: "DaemonSetControllerConfiguration holds configuration for DaemonSetController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.DaemonSetControllerConfiguration"), + }, + }, + "DeploymentController": { + SchemaProps: spec.SchemaProps{ + Description: "DeploymentControllerConfiguration holds configuration for DeploymentController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.DeploymentControllerConfiguration"), + }, + }, + "StatefulSetController": { + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetControllerConfiguration holds configuration for StatefulSetController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.StatefulSetControllerConfiguration"), + }, + }, + "DeprecatedController": { + SchemaProps: spec.SchemaProps{ + Description: "DeprecatedControllerConfiguration holds configuration for some deprecated features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.DeprecatedControllerConfiguration"), + }, + }, + "EndpointController": { + SchemaProps: spec.SchemaProps{ + Description: "EndpointControllerConfiguration holds configuration for EndpointController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.EndpointControllerConfiguration"), + }, + }, + "EndpointSliceController": { + SchemaProps: spec.SchemaProps{ + Description: "EndpointSliceControllerConfiguration holds configuration for EndpointSliceController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.EndpointSliceControllerConfiguration"), + }, + }, + "EndpointSliceMirroringController": { + SchemaProps: spec.SchemaProps{ + Description: "EndpointSliceMirroringControllerConfiguration holds configuration for EndpointSliceMirroringController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.EndpointSliceMirroringControllerConfiguration"), + }, + }, + "GarbageCollectorController": { + SchemaProps: spec.SchemaProps{ + Description: "GarbageCollectorControllerConfiguration holds configuration for GarbageCollectorController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.GarbageCollectorControllerConfiguration"), + }, + }, + "HPAController": { + SchemaProps: spec.SchemaProps{ + Description: "HPAControllerConfiguration holds configuration for HPAController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.HPAControllerConfiguration"), + }, + }, + "JobController": { + SchemaProps: spec.SchemaProps{ + Description: "JobControllerConfiguration holds configuration for JobController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.JobControllerConfiguration"), + }, + }, + "NamespaceController": { + SchemaProps: spec.SchemaProps{ + Description: "NamespaceControllerConfiguration holds configuration for NamespaceController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.NamespaceControllerConfiguration"), + }, + }, + "NodeIPAMController": { + SchemaProps: spec.SchemaProps{ + Description: "NodeIPAMControllerConfiguration holds configuration for NodeIPAMController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.NodeIPAMControllerConfiguration"), + }, + }, + "NodeLifecycleController": { + SchemaProps: spec.SchemaProps{ + Description: "NodeLifecycleControllerConfiguration holds configuration for NodeLifecycleController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.NodeLifecycleControllerConfiguration"), + }, + }, + "PersistentVolumeBinderController": { + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeBinderControllerConfiguration holds configuration for PersistentVolumeBinderController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.PersistentVolumeBinderControllerConfiguration"), + }, + }, + "PodGCController": { + SchemaProps: spec.SchemaProps{ + Description: "PodGCControllerConfiguration holds configuration for PodGCController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.PodGCControllerConfiguration"), + }, + }, + "ReplicaSetController": { + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSetControllerConfiguration holds configuration for ReplicaSet related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.ReplicaSetControllerConfiguration"), + }, + }, + "ReplicationController": { + SchemaProps: spec.SchemaProps{ + Description: "ReplicationControllerConfiguration holds configuration for ReplicationController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.ReplicationControllerConfiguration"), + }, + }, + "ResourceQuotaController": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceQuotaControllerConfiguration holds configuration for ResourceQuotaController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.ResourceQuotaControllerConfiguration"), + }, + }, + "SAController": { + SchemaProps: spec.SchemaProps{ + Description: "SAControllerConfiguration holds configuration for ServiceAccountController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.SAControllerConfiguration"), + }, + }, + "ServiceController": { + SchemaProps: spec.SchemaProps{ + Description: "ServiceControllerConfiguration holds configuration for ServiceController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.ServiceControllerConfiguration"), + }, + }, + "TTLAfterFinishedController": { + SchemaProps: spec.SchemaProps{ + Description: "TTLAfterFinishedControllerConfiguration holds configuration for TTLAfterFinishedController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.TTLAfterFinishedControllerConfiguration"), + }, + }, + }, + Required: []string{"Generic", "KubeCloudShared", "AttachDetachController", "CSRSigningController", "DaemonSetController", "DeploymentController", "StatefulSetController", "DeprecatedController", "EndpointController", "EndpointSliceController", "EndpointSliceMirroringController", "GarbageCollectorController", "HPAController", "JobController", "NamespaceController", "NodeIPAMController", "NodeLifecycleController", "PersistentVolumeBinderController", "PodGCController", "ReplicaSetController", "ReplicationController", "ResourceQuotaController", "SAController", "ServiceController", "TTLAfterFinishedController"}, + }, + }, + Dependencies: []string{ + "k8s.io/kube-controller-manager/config/v1alpha1.AttachDetachControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.CSRSigningControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.DaemonSetControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.DeploymentControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.DeprecatedControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.EndpointControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.EndpointSliceControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.EndpointSliceMirroringControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.GarbageCollectorControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.GenericControllerManagerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.HPAControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.JobControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.KubeCloudSharedConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.NamespaceControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.NodeIPAMControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.NodeLifecycleControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.PersistentVolumeBinderControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.PodGCControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.ReplicaSetControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.ReplicationControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.ResourceQuotaControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.SAControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.ServiceControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.StatefulSetControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.TTLAfterFinishedControllerConfiguration"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_NamespaceControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NamespaceControllerConfiguration contains elements describing NamespaceController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "NamespaceSyncPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "namespaceSyncPeriod is the period for syncing namespace life-cycle updates.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "ConcurrentNamespaceSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "concurrentNamespaceSyncs is the number of namespace objects that are allowed to sync concurrently.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"NamespaceSyncPeriod", "ConcurrentNamespaceSyncs"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_NodeIPAMControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeIPAMControllerConfiguration contains elements describing NodeIpamController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ServiceCIDR": { + SchemaProps: spec.SchemaProps{ + Description: "serviceCIDR is CIDR Range for Services in cluster.", + Type: []string{"string"}, + Format: "", + }, + }, + "SecondaryServiceCIDR": { + SchemaProps: spec.SchemaProps{ + Description: "secondaryServiceCIDR is CIDR Range for Services in cluster. This is used in dual stack clusters. SecondaryServiceCIDR must be of different IP family than ServiceCIDR", + Type: []string{"string"}, + Format: "", + }, + }, + "NodeCIDRMaskSize": { + SchemaProps: spec.SchemaProps{ + Description: "NodeCIDRMaskSize is the mask size for node cidr in cluster.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "NodeCIDRMaskSizeIPv4": { + SchemaProps: spec.SchemaProps{ + Description: "NodeCIDRMaskSizeIPv4 is the mask size for node cidr in dual-stack cluster.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "NodeCIDRMaskSizeIPv6": { + SchemaProps: spec.SchemaProps{ + Description: "NodeCIDRMaskSizeIPv6 is the mask size for node cidr in dual-stack cluster.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"ServiceCIDR", "SecondaryServiceCIDR", "NodeCIDRMaskSize", "NodeCIDRMaskSizeIPv4", "NodeCIDRMaskSizeIPv6"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_NodeLifecycleControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeLifecycleControllerConfiguration contains elements describing NodeLifecycleController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "EnableTaintManager": { + SchemaProps: spec.SchemaProps{ + Description: "If set to true enables NoExecute Taints and will evict all not-tolerating Pod running on Nodes tainted with this kind of Taints.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "NodeEvictionRate": { + SchemaProps: spec.SchemaProps{ + Description: "nodeEvictionRate is the number of nodes per second on which pods are deleted in case of node failure when a zone is healthy", + Type: []string{"number"}, + Format: "float", + }, + }, + "SecondaryNodeEvictionRate": { + SchemaProps: spec.SchemaProps{ + Description: "secondaryNodeEvictionRate is the number of nodes per second on which pods are deleted in case of node failure when a zone is unhealthy", + Type: []string{"number"}, + Format: "float", + }, + }, + "NodeStartupGracePeriod": { + SchemaProps: spec.SchemaProps{ + Description: "nodeStartupGracePeriod is the amount of time which we allow starting a node to be unresponsive before marking it unhealthy.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "NodeMonitorGracePeriod": { + SchemaProps: spec.SchemaProps{ + Description: "nodeMontiorGracePeriod is the amount of time which we allow a running node to be unresponsive before marking it unhealthy. Must be N times more than kubelet's nodeStatusUpdateFrequency, where N means number of retries allowed for kubelet to post node status.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "PodEvictionTimeout": { + SchemaProps: spec.SchemaProps{ + Description: "podEvictionTimeout is the grace period for deleting pods on failed nodes.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "LargeClusterSizeThreshold": { + SchemaProps: spec.SchemaProps{ + Description: "secondaryNodeEvictionRate is implicitly overridden to 0 for clusters smaller than or equal to largeClusterSizeThreshold", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "UnhealthyZoneThreshold": { + SchemaProps: spec.SchemaProps{ + Description: "Zone is treated as unhealthy in nodeEvictionRate and secondaryNodeEvictionRate when at least unhealthyZoneThreshold (no less than 3) of Nodes in the zone are NotReady", + Type: []string{"number"}, + Format: "float", + }, + }, + }, + Required: []string{"EnableTaintManager", "NodeEvictionRate", "SecondaryNodeEvictionRate", "NodeStartupGracePeriod", "NodeMonitorGracePeriod", "PodEvictionTimeout", "LargeClusterSizeThreshold", "UnhealthyZoneThreshold"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_PersistentVolumeBinderControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeBinderControllerConfiguration contains elements describing PersistentVolumeBinderController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "PVClaimBinderSyncPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "pvClaimBinderSyncPeriod is the period for syncing persistent volumes and persistent volume claims.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "VolumeConfiguration": { + SchemaProps: spec.SchemaProps{ + Description: "volumeConfiguration holds configuration for volume related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.VolumeConfiguration"), + }, + }, + }, + Required: []string{"PVClaimBinderSyncPeriod", "VolumeConfiguration"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/kube-controller-manager/config/v1alpha1.VolumeConfiguration"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_PersistentVolumeRecyclerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PersistentVolumeRecyclerConfiguration contains elements describing persistent volume plugins.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "MaximumRetry": { + SchemaProps: spec.SchemaProps{ + Description: "maximumRetry is number of retries the PV recycler will execute on failure to recycle PV.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "MinimumTimeoutNFS": { + SchemaProps: spec.SchemaProps{ + Description: "minimumTimeoutNFS is the minimum ActiveDeadlineSeconds to use for an NFS Recycler pod.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "PodTemplateFilePathNFS": { + SchemaProps: spec.SchemaProps{ + Description: "podTemplateFilePathNFS is the file path to a pod definition used as a template for NFS persistent volume recycling", + Type: []string{"string"}, + Format: "", + }, + }, + "IncrementTimeoutNFS": { + SchemaProps: spec.SchemaProps{ + Description: "incrementTimeoutNFS is the increment of time added per Gi to ActiveDeadlineSeconds for an NFS scrubber pod.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "PodTemplateFilePathHostPath": { + SchemaProps: spec.SchemaProps{ + Description: "podTemplateFilePathHostPath is the file path to a pod definition used as a template for HostPath persistent volume recycling. This is for development and testing only and will not work in a multi-node cluster.", + Type: []string{"string"}, + Format: "", + }, + }, + "MinimumTimeoutHostPath": { + SchemaProps: spec.SchemaProps{ + Description: "minimumTimeoutHostPath is the minimum ActiveDeadlineSeconds to use for a HostPath Recycler pod. This is for development and testing only and will not work in a multi-node cluster.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "IncrementTimeoutHostPath": { + SchemaProps: spec.SchemaProps{ + Description: "incrementTimeoutHostPath is the increment of time added per Gi to ActiveDeadlineSeconds for a HostPath scrubber pod. This is for development and testing only and will not work in a multi-node cluster.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"MaximumRetry", "MinimumTimeoutNFS", "PodTemplateFilePathNFS", "IncrementTimeoutNFS", "PodTemplateFilePathHostPath", "MinimumTimeoutHostPath", "IncrementTimeoutHostPath"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_PodGCControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodGCControllerConfiguration contains elements describing PodGCController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "TerminatedPodGCThreshold": { + SchemaProps: spec.SchemaProps{ + Description: "terminatedPodGCThreshold is the number of terminated pods that can exist before the terminated pod garbage collector starts deleting terminated pods. If <= 0, the terminated pod garbage collector is disabled.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"TerminatedPodGCThreshold"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_ReplicaSetControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicaSetControllerConfiguration contains elements describing ReplicaSetController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ConcurrentRSSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "concurrentRSSyncs is the number of replica sets that are allowed to sync concurrently. Larger number = more responsive replica management, but more CPU (and network) load.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"ConcurrentRSSyncs"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_ReplicationControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ReplicationControllerConfiguration contains elements describing ReplicationController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ConcurrentRCSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "concurrentRCSyncs is the number of replication controllers that are allowed to sync concurrently. Larger number = more responsive replica management, but more CPU (and network) load.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"ConcurrentRCSyncs"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_ResourceQuotaControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceQuotaControllerConfiguration contains elements describing ResourceQuotaController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ResourceQuotaSyncPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "resourceQuotaSyncPeriod is the period for syncing quota usage status in the system.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "ConcurrentResourceQuotaSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "concurrentResourceQuotaSyncs is the number of resource quotas that are allowed to sync concurrently. Larger number = more responsive quota management, but more CPU (and network) load.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"ResourceQuotaSyncPeriod", "ConcurrentResourceQuotaSyncs"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_SAControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SAControllerConfiguration contains elements describing ServiceAccountController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ServiceAccountKeyFile": { + SchemaProps: spec.SchemaProps{ + Description: "serviceAccountKeyFile is the filename containing a PEM-encoded private RSA key used to sign service account tokens.", + Type: []string{"string"}, + Format: "", + }, + }, + "ConcurrentSATokenSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "concurrentSATokenSyncs is the number of service account token syncing operations that will be done concurrently.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "RootCAFile": { + SchemaProps: spec.SchemaProps{ + Description: "rootCAFile is the root certificate authority will be included in service account's token secret. This must be a valid PEM-encoded CA bundle.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"ServiceAccountKeyFile", "ConcurrentSATokenSyncs", "RootCAFile"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_ServiceControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceControllerConfiguration contains elements describing ServiceController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ConcurrentServiceSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "concurrentServiceSyncs is the number of services that are allowed to sync concurrently. Larger number = more responsive service management, but more CPU (and network) load.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"ConcurrentServiceSyncs"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_StatefulSetControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "StatefulSetControllerConfiguration contains elements describing StatefulSetController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ConcurrentStatefulSetSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "concurrentStatefulSetSyncs is the number of statefulset objects that are allowed to sync concurrently. Larger number = more responsive statefulsets, but more CPU (and network) load.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"ConcurrentStatefulSetSyncs"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_TTLAfterFinishedControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "TTLAfterFinishedControllerConfiguration contains elements describing TTLAfterFinishedController.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "ConcurrentTTLSyncs": { + SchemaProps: spec.SchemaProps{ + Description: "concurrentTTLSyncs is the number of TTL-after-finished collector workers that are allowed to sync concurrently.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"ConcurrentTTLSyncs"}, + }, + }, + } +} + +func schema_k8sio_kube_controller_manager_config_v1alpha1_VolumeConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeConfiguration contains *all* enumerated flags meant to configure all volume plugins. From this config, the controller-manager binary will create many instances of volume.VolumeConfig, each containing only the configuration needed for that plugin which are then passed to the appropriate plugin. The ControllerManager binary is the only part of the code which knows what plugins are supported and which flags correspond to each plugin.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "EnableHostPathProvisioning": { + SchemaProps: spec.SchemaProps{ + Description: "enableHostPathProvisioning enables HostPath PV provisioning when running without a cloud provider. This allows testing and development of provisioning features. HostPath provisioning is not supported in any way, won't work in a multi-node cluster, and should not be used for anything other than testing or development.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "EnableDynamicProvisioning": { + SchemaProps: spec.SchemaProps{ + Description: "enableDynamicProvisioning enables the provisioning of volumes when running within an environment that supports dynamic provisioning. Defaults to true.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "PersistentVolumeRecyclerConfiguration": { + SchemaProps: spec.SchemaProps{ + Description: "persistentVolumeRecyclerConfiguration holds configuration for persistent volume plugins.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.PersistentVolumeRecyclerConfiguration"), + }, + }, + "FlexVolumePluginDir": { + SchemaProps: spec.SchemaProps{ + Description: "volumePluginDir is the full path of the directory in which the flex volume plugin should search for additional third party volume plugins", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"EnableHostPathProvisioning", "EnableDynamicProvisioning", "PersistentVolumeRecyclerConfiguration", "FlexVolumePluginDir"}, + }, + }, + Dependencies: []string{ + "k8s.io/kube-controller-manager/config/v1alpha1.PersistentVolumeRecyclerConfiguration"}, + } +} + +func schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "KubeProxyConfiguration contains everything necessary to configure the Kubernetes proxy server.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "featureGates": { + SchemaProps: spec.SchemaProps{ + Description: "featureGates is a map of feature names to bools that enable or disable alpha/experimental features.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + "bindAddress": { + SchemaProps: spec.SchemaProps{ + Description: "bindAddress is the IP address for the proxy server to serve on (set to 0.0.0.0 for all interfaces)", + Type: []string{"string"}, + Format: "", + }, + }, + "healthzBindAddress": { + SchemaProps: spec.SchemaProps{ + Description: "healthzBindAddress is the IP address and port for the health check server to serve on, defaulting to 0.0.0.0:10256", + Type: []string{"string"}, + Format: "", + }, + }, + "metricsBindAddress": { + SchemaProps: spec.SchemaProps{ + Description: "metricsBindAddress is the IP address and port for the metrics server to serve on, defaulting to 127.0.0.1:10249 (set to 0.0.0.0 for all interfaces)", + Type: []string{"string"}, + Format: "", + }, + }, + "bindAddressHardFail": { + SchemaProps: spec.SchemaProps{ + Description: "bindAddressHardFail, if true, kube-proxy will treat failure to bind to a port as fatal and exit", + Type: []string{"boolean"}, + Format: "", + }, + }, + "enableProfiling": { + SchemaProps: spec.SchemaProps{ + Description: "enableProfiling enables profiling via web interface on /debug/pprof handler. Profiling handlers will be handled by metrics server.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "clusterCIDR": { + SchemaProps: spec.SchemaProps{ + Description: "clusterCIDR is the CIDR range of the pods in the cluster. It is used to bridge traffic coming from outside of the cluster. If not provided, no off-cluster bridging will be performed.", + Type: []string{"string"}, + Format: "", + }, + }, + "hostnameOverride": { + SchemaProps: spec.SchemaProps{ + Description: "hostnameOverride, if non-empty, will be used as the identity instead of the actual hostname.", + Type: []string{"string"}, + Format: "", + }, + }, + "clientConnection": { + SchemaProps: spec.SchemaProps{ + Description: "clientConnection specifies the kubeconfig file and client connection settings for the proxy server to use when communicating with the apiserver.", + Ref: ref("k8s.io/component-base/config/v1alpha1.ClientConnectionConfiguration"), + }, + }, + "iptables": { + SchemaProps: spec.SchemaProps{ + Description: "iptables contains iptables-related configuration options.", + Ref: ref("k8s.io/kube-proxy/config/v1alpha1.KubeProxyIPTablesConfiguration"), + }, + }, + "ipvs": { + SchemaProps: spec.SchemaProps{ + Description: "ipvs contains ipvs-related configuration options.", + Ref: ref("k8s.io/kube-proxy/config/v1alpha1.KubeProxyIPVSConfiguration"), + }, + }, + "oomScoreAdj": { + SchemaProps: spec.SchemaProps{ + Description: "oomScoreAdj is the oom-score-adj value for kube-proxy process. Values must be within the range [-1000, 1000]", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "mode": { + SchemaProps: spec.SchemaProps{ + Description: "mode specifies which proxy mode to use.", + Type: []string{"string"}, + Format: "", + }, + }, + "portRange": { + SchemaProps: spec.SchemaProps{ + Description: "portRange is the range of host ports (beginPort-endPort, inclusive) that may be consumed in order to proxy service traffic. If unspecified (0-0) then ports will be randomly chosen.", + Type: []string{"string"}, + Format: "", + }, + }, + "udpIdleTimeout": { + SchemaProps: spec.SchemaProps{ + Description: "udpIdleTimeout is how long an idle UDP connection will be kept open (e.g. '250ms', '2s'). Must be greater than 0. Only applicable for proxyMode=userspace.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "conntrack": { + SchemaProps: spec.SchemaProps{ + Description: "conntrack contains conntrack-related configuration options.", + Ref: ref("k8s.io/kube-proxy/config/v1alpha1.KubeProxyConntrackConfiguration"), + }, + }, + "configSyncPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "configSyncPeriod is how often configuration from the apiserver is refreshed. Must be greater than 0.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "nodePortAddresses": { + SchemaProps: spec.SchemaProps{ + Description: "nodePortAddresses is the --nodeport-addresses value for kube-proxy process. Values must be valid IP blocks. These values are as a parameter to select the interfaces where nodeport works. In case someone would like to expose a service on localhost for local visit and some other interfaces for particular purpose, a list of IP blocks would do that. If set it to \"127.0.0.0/8\", kube-proxy will only select the loopback interface for NodePort. If set it to a non-zero IP block, kube-proxy will filter that down to just the IPs that applied to the node. An empty string slice is meant to select all network interfaces.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "winkernel": { + SchemaProps: spec.SchemaProps{ + Description: "winkernel contains winkernel-related configuration options.", + Ref: ref("k8s.io/kube-proxy/config/v1alpha1.KubeProxyWinkernelConfiguration"), + }, + }, + "showHiddenMetricsForVersion": { + SchemaProps: spec.SchemaProps{ + Description: "ShowHiddenMetricsForVersion is the version for which you want to show hidden metrics.", + Type: []string{"string"}, + Format: "", + }, + }, + "detectLocalMode": { + SchemaProps: spec.SchemaProps{ + Description: "DetectLocalMode determines mode to use for detecting local traffic, defaults to LocalModeClusterCIDR", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"bindAddress", "healthzBindAddress", "metricsBindAddress", "bindAddressHardFail", "enableProfiling", "clusterCIDR", "hostnameOverride", "clientConnection", "iptables", "ipvs", "oomScoreAdj", "mode", "portRange", "udpIdleTimeout", "conntrack", "configSyncPeriod", "nodePortAddresses", "winkernel", "showHiddenMetricsForVersion", "detectLocalMode"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/component-base/config/v1alpha1.ClientConnectionConfiguration", "k8s.io/kube-proxy/config/v1alpha1.KubeProxyConntrackConfiguration", "k8s.io/kube-proxy/config/v1alpha1.KubeProxyIPTablesConfiguration", "k8s.io/kube-proxy/config/v1alpha1.KubeProxyIPVSConfiguration", "k8s.io/kube-proxy/config/v1alpha1.KubeProxyWinkernelConfiguration"}, + } +} + +func schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyConntrackConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "KubeProxyConntrackConfiguration contains conntrack settings for the Kubernetes proxy server.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "maxPerCore": { + SchemaProps: spec.SchemaProps{ + Description: "maxPerCore is the maximum number of NAT connections to track per CPU core (0 to leave the limit as-is and ignore min).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "min": { + SchemaProps: spec.SchemaProps{ + Description: "min is the minimum value of connect-tracking records to allocate, regardless of conntrackMaxPerCore (set maxPerCore=0 to leave the limit as-is).", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "tcpEstablishedTimeout": { + SchemaProps: spec.SchemaProps{ + Description: "tcpEstablishedTimeout is how long an idle TCP connection will be kept open (e.g. '2s'). Must be greater than 0 to set.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "tcpCloseWaitTimeout": { + SchemaProps: spec.SchemaProps{ + Description: "tcpCloseWaitTimeout is how long an idle conntrack entry in CLOSE_WAIT state will remain in the conntrack table. (e.g. '60s'). Must be greater than 0 to set.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + }, + Required: []string{"maxPerCore", "min", "tcpEstablishedTimeout", "tcpCloseWaitTimeout"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyIPTablesConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "KubeProxyIPTablesConfiguration contains iptables-related configuration details for the Kubernetes proxy server.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "masqueradeBit": { + SchemaProps: spec.SchemaProps{ + Description: "masqueradeBit is the bit of the iptables fwmark space to use for SNAT if using the pure iptables proxy mode. Values must be within the range [0, 31].", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "masqueradeAll": { + SchemaProps: spec.SchemaProps{ + Description: "masqueradeAll tells kube-proxy to SNAT everything if using the pure iptables proxy mode.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "syncPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "syncPeriod is the period that iptables rules are refreshed (e.g. '5s', '1m', '2h22m'). Must be greater than 0.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "minSyncPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "minSyncPeriod is the minimum period that iptables rules are refreshed (e.g. '5s', '1m', '2h22m').", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + }, + Required: []string{"masqueradeBit", "masqueradeAll", "syncPeriod", "minSyncPeriod"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyIPVSConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "KubeProxyIPVSConfiguration contains ipvs-related configuration details for the Kubernetes proxy server.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "syncPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "syncPeriod is the period that ipvs rules are refreshed (e.g. '5s', '1m', '2h22m'). Must be greater than 0.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "minSyncPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "minSyncPeriod is the minimum period that ipvs rules are refreshed (e.g. '5s', '1m', '2h22m').", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "scheduler": { + SchemaProps: spec.SchemaProps{ + Description: "ipvs scheduler", + Type: []string{"string"}, + Format: "", + }, + }, + "excludeCIDRs": { + SchemaProps: spec.SchemaProps{ + Description: "excludeCIDRs is a list of CIDR's which the ipvs proxier should not touch when cleaning up ipvs services.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "strictARP": { + SchemaProps: spec.SchemaProps{ + Description: "strict ARP configure arp_ignore and arp_announce to avoid answering ARP queries from kube-ipvs0 interface", + Type: []string{"boolean"}, + Format: "", + }, + }, + "tcpTimeout": { + SchemaProps: spec.SchemaProps{ + Description: "tcpTimeout is the timeout value used for idle IPVS TCP sessions. The default value is 0, which preserves the current timeout value on the system.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "tcpFinTimeout": { + SchemaProps: spec.SchemaProps{ + Description: "tcpFinTimeout is the timeout value used for IPVS TCP sessions after receiving a FIN. The default value is 0, which preserves the current timeout value on the system.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "udpTimeout": { + SchemaProps: spec.SchemaProps{ + Description: "udpTimeout is the timeout value used for IPVS UDP packets. The default value is 0, which preserves the current timeout value on the system.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + }, + Required: []string{"syncPeriod", "minSyncPeriod", "scheduler", "excludeCIDRs", "strictARP", "tcpTimeout", "tcpFinTimeout", "udpTimeout"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyWinkernelConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "KubeProxyWinkernelConfiguration contains Windows/HNS settings for the Kubernetes proxy server.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "networkName": { + SchemaProps: spec.SchemaProps{ + Description: "networkName is the name of the network kube-proxy will use to create endpoints and policies", + Type: []string{"string"}, + Format: "", + }, + }, + "sourceVip": { + SchemaProps: spec.SchemaProps{ + Description: "sourceVip is the IP address of the source VIP endoint used for NAT when loadbalancing", + Type: []string{"string"}, + Format: "", + }, + }, + "enableDSR": { + SchemaProps: spec.SchemaProps{ + Description: "enableDSR tells kube-proxy whether HNS policies should be created with DSR", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"networkName", "sourceVip", "enableDSR"}, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1_ExtenderManagedResource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExtenderManagedResource describes the arguments of extended resources managed by an extender.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name is the extended resource name.", + Type: []string{"string"}, + Format: "", + }, + }, + "ignoredByScheduler": { + SchemaProps: spec.SchemaProps{ + Description: "IgnoredByScheduler indicates whether kube-scheduler should ignore this resource when applying predicates.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"name"}, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1_ExtenderTLSConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExtenderTLSConfig contains settings to enable TLS with extender", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "insecure": { + SchemaProps: spec.SchemaProps{ + Description: "Server should be accessed without verifying the TLS certificate. For testing only.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "serverName": { + SchemaProps: spec.SchemaProps{ + Description: "ServerName is passed to the server for SNI and is used in the client to check server certificates against. If ServerName is empty, the hostname used to contact the server is used.", + Type: []string{"string"}, + Format: "", + }, + }, + "certFile": { + SchemaProps: spec.SchemaProps{ + Description: "Server requires TLS client certificate authentication", + Type: []string{"string"}, + Format: "", + }, + }, + "keyFile": { + SchemaProps: spec.SchemaProps{ + Description: "Server requires TLS client certificate authentication", + Type: []string{"string"}, + Format: "", + }, + }, + "caFile": { + SchemaProps: spec.SchemaProps{ + Description: "Trusted root certificates for server", + Type: []string{"string"}, + Format: "", + }, + }, + "certData": { + SchemaProps: spec.SchemaProps{ + Description: "CertData holds PEM-encoded bytes (typically read from a client certificate file). CertData takes precedence over CertFile", + Type: []string{"string"}, + Format: "byte", + }, + }, + "keyData": { + SchemaProps: spec.SchemaProps{ + Description: "KeyData holds PEM-encoded bytes (typically read from a client certificate key file). KeyData takes precedence over KeyFile", + Type: []string{"string"}, + Format: "byte", + }, + }, + "caData": { + SchemaProps: spec.SchemaProps{ + Description: "CAData holds PEM-encoded bytes (typically read from a root certificates bundle). CAData takes precedence over CAFile", + Type: []string{"string"}, + Format: "byte", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1_LabelPreference(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LabelPreference holds the parameters that are used to configure the corresponding priority function", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "label": { + SchemaProps: spec.SchemaProps{ + Description: "Used to identify node \"groups\"", + Type: []string{"string"}, + Format: "", + }, + }, + "presence": { + SchemaProps: spec.SchemaProps{ + Description: "This is a boolean flag If true, higher priority is given to nodes that have the label If false, higher priority is given to nodes that do not have the label", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"label", "presence"}, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1_LabelsPresence(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LabelsPresence holds the parameters that are used to configure the corresponding predicate in scheduler policy configuration.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "labels": { + SchemaProps: spec.SchemaProps{ + Description: "The list of labels that identify node \"groups\" All of the labels should be either present (or absent) for the node to be considered a fit for hosting the pod", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "presence": { + SchemaProps: spec.SchemaProps{ + Description: "The boolean flag that indicates whether the labels should be present or absent from the node", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"labels", "presence"}, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1_LegacyExtender(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LegacyExtender holds the parameters used to communicate with the extender. If a verb is unspecified/empty, it is assumed that the extender chose not to provide that extension.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "urlPrefix": { + SchemaProps: spec.SchemaProps{ + Description: "URLPrefix at which the extender is available", + Type: []string{"string"}, + Format: "", + }, + }, + "filterVerb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb for the filter call, empty if not supported. This verb is appended to the URLPrefix when issuing the filter call to extender.", + Type: []string{"string"}, + Format: "", + }, + }, + "preemptVerb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb for the preempt call, empty if not supported. This verb is appended to the URLPrefix when issuing the preempt call to extender.", + Type: []string{"string"}, + Format: "", + }, + }, + "prioritizeVerb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb for the prioritize call, empty if not supported. This verb is appended to the URLPrefix when issuing the prioritize call to extender.", + Type: []string{"string"}, + Format: "", + }, + }, + "weight": { + SchemaProps: spec.SchemaProps{ + Description: "The numeric multiplier for the node scores that the prioritize call generates. The weight should be a positive integer", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "bindVerb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb for the bind call, empty if not supported. This verb is appended to the URLPrefix when issuing the bind call to extender. If this method is implemented by the extender, it is the extender's responsibility to bind the pod to apiserver. Only one extender can implement this function.", + Type: []string{"string"}, + Format: "", + }, + }, + "enableHttps": { + SchemaProps: spec.SchemaProps{ + Description: "EnableHTTPS specifies whether https should be used to communicate with the extender", + Type: []string{"boolean"}, + Format: "", + }, + }, + "tlsConfig": { + SchemaProps: spec.SchemaProps{ + Description: "TLSConfig specifies the transport layer security config", + Ref: ref("k8s.io/kube-scheduler/config/v1.ExtenderTLSConfig"), + }, + }, + "httpTimeout": { + SchemaProps: spec.SchemaProps{ + Description: "HTTPTimeout specifies the timeout duration for a call to the extender. Filter timeout fails the scheduling of the pod. Prioritize timeout is ignored, k8s/other extenders priorities are used to select the node.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "nodeCacheCapable": { + SchemaProps: spec.SchemaProps{ + Description: "NodeCacheCapable specifies that the extender is capable of caching node information, so the scheduler should only send minimal information about the eligible nodes assuming that the extender already cached full details of all nodes in the cluster", + Type: []string{"boolean"}, + Format: "", + }, + }, + "managedResources": { + SchemaProps: spec.SchemaProps{ + Description: "ManagedResources is a list of extended resources that are managed by this extender. - A pod will be sent to the extender on the Filter, Prioritize and Bind\n (if the extender is the binder) phases iff the pod requests at least\n one of the extended resources in this list. If empty or unspecified,\n all pods will be sent to this extender.\n- If IgnoredByScheduler is set to true for a resource, kube-scheduler\n will skip checking the resource in predicates.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1.ExtenderManagedResource"), + }, + }, + }, + }, + }, + "ignorable": { + SchemaProps: spec.SchemaProps{ + Description: "Ignorable specifies if the extender is ignorable, i.e. scheduling should not fail when the extender returns an error or is not reachable.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"urlPrefix"}, + }, + }, + Dependencies: []string{ + "k8s.io/kube-scheduler/config/v1.ExtenderManagedResource", "k8s.io/kube-scheduler/config/v1.ExtenderTLSConfig"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1_Policy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Policy describes a struct for a policy resource used in api.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "predicates": { + SchemaProps: spec.SchemaProps{ + Description: "Holds the information to configure the fit predicate functions", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1.PredicatePolicy"), + }, + }, + }, + }, + }, + "priorities": { + SchemaProps: spec.SchemaProps{ + Description: "Holds the information to configure the priority functions", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1.PriorityPolicy"), + }, + }, + }, + }, + }, + "extenders": { + SchemaProps: spec.SchemaProps{ + Description: "Holds the information to communicate with the extender(s)", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1.LegacyExtender"), + }, + }, + }, + }, + }, + "hardPodAffinitySymmetricWeight": { + SchemaProps: spec.SchemaProps{ + Description: "RequiredDuringScheduling affinity is not symmetric, but there is an implicit PreferredDuringScheduling affinity rule corresponding to every RequiredDuringScheduling affinity rule. HardPodAffinitySymmetricWeight represents the weight of implicit PreferredDuringScheduling affinity rule, in the range 1-100.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "alwaysCheckAllPredicates": { + SchemaProps: spec.SchemaProps{ + Description: "When AlwaysCheckAllPredicates is set to true, scheduler checks all the configured predicates even after one or more of them fails. When the flag is set to false, scheduler skips checking the rest of the predicates after it finds one predicate that failed.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"predicates", "priorities", "extenders", "hardPodAffinitySymmetricWeight", "alwaysCheckAllPredicates"}, + }, + }, + Dependencies: []string{ + "k8s.io/kube-scheduler/config/v1.LegacyExtender", "k8s.io/kube-scheduler/config/v1.PredicatePolicy", "k8s.io/kube-scheduler/config/v1.PriorityPolicy"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1_PredicateArgument(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PredicateArgument represents the arguments to configure predicate functions in scheduler policy configuration. Only one of its members may be specified", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "serviceAffinity": { + SchemaProps: spec.SchemaProps{ + Description: "The predicate that provides affinity for pods belonging to a service It uses a label to identify nodes that belong to the same \"group\"", + Ref: ref("k8s.io/kube-scheduler/config/v1.ServiceAffinity"), + }, + }, + "labelsPresence": { + SchemaProps: spec.SchemaProps{ + Description: "The predicate that checks whether a particular node has a certain label defined or not, regardless of value", + Ref: ref("k8s.io/kube-scheduler/config/v1.LabelsPresence"), + }, + }, + }, + Required: []string{"serviceAffinity", "labelsPresence"}, + }, + }, + Dependencies: []string{ + "k8s.io/kube-scheduler/config/v1.LabelsPresence", "k8s.io/kube-scheduler/config/v1.ServiceAffinity"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1_PredicatePolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PredicatePolicy describes a struct of a predicate policy.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Identifier of the predicate policy For a custom predicate, the name can be user-defined For the Kubernetes provided predicates, the name is the identifier of the pre-defined predicate", + Type: []string{"string"}, + Format: "", + }, + }, + "argument": { + SchemaProps: spec.SchemaProps{ + Description: "Holds the parameters to configure the given predicate", + Ref: ref("k8s.io/kube-scheduler/config/v1.PredicateArgument"), + }, + }, + }, + Required: []string{"name", "argument"}, + }, + }, + Dependencies: []string{ + "k8s.io/kube-scheduler/config/v1.PredicateArgument"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1_PriorityArgument(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PriorityArgument represents the arguments to configure priority functions in scheduler policy configuration. Only one of its members may be specified", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "serviceAntiAffinity": { + SchemaProps: spec.SchemaProps{ + Description: "The priority function that ensures a good spread (anti-affinity) for pods belonging to a service It uses a label to identify nodes that belong to the same \"group\"", + Ref: ref("k8s.io/kube-scheduler/config/v1.ServiceAntiAffinity"), + }, + }, + "labelPreference": { + SchemaProps: spec.SchemaProps{ + Description: "The priority function that checks whether a particular node has a certain label defined or not, regardless of value", + Ref: ref("k8s.io/kube-scheduler/config/v1.LabelPreference"), + }, + }, + "requestedToCapacityRatioArguments": { + SchemaProps: spec.SchemaProps{ + Description: "The RequestedToCapacityRatio priority function is parametrized with function shape.", + Ref: ref("k8s.io/kube-scheduler/config/v1.RequestedToCapacityRatioArguments"), + }, + }, + }, + Required: []string{"serviceAntiAffinity", "labelPreference", "requestedToCapacityRatioArguments"}, + }, + }, + Dependencies: []string{ + "k8s.io/kube-scheduler/config/v1.LabelPreference", "k8s.io/kube-scheduler/config/v1.RequestedToCapacityRatioArguments", "k8s.io/kube-scheduler/config/v1.ServiceAntiAffinity"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1_PriorityPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PriorityPolicy describes a struct of a priority policy.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Identifier of the priority policy For a custom priority, the name can be user-defined For the Kubernetes provided priority functions, the name is the identifier of the pre-defined priority function", + Type: []string{"string"}, + Format: "", + }, + }, + "weight": { + SchemaProps: spec.SchemaProps{ + Description: "The numeric multiplier for the node scores that the priority function generates The weight should be non-zero and can be a positive or a negative integer", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "argument": { + SchemaProps: spec.SchemaProps{ + Description: "Holds the parameters to configure the given priority function", + Ref: ref("k8s.io/kube-scheduler/config/v1.PriorityArgument"), + }, + }, + }, + Required: []string{"name", "weight", "argument"}, + }, + }, + Dependencies: []string{ + "k8s.io/kube-scheduler/config/v1.PriorityArgument"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1_RequestedToCapacityRatioArguments(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RequestedToCapacityRatioArguments holds arguments specific to RequestedToCapacityRatio priority function.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "shape": { + SchemaProps: spec.SchemaProps{ + Description: "Array of point defining priority function shape.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1.UtilizationShapePoint"), + }, + }, + }, + }, + }, + "resources": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1.ResourceSpec"), + }, + }, + }, + }, + }, + }, + Required: []string{"shape"}, + }, + }, + Dependencies: []string{ + "k8s.io/kube-scheduler/config/v1.ResourceSpec", "k8s.io/kube-scheduler/config/v1.UtilizationShapePoint"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1_ResourceSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceSpec represents single resource and weight for bin packing of priority RequestedToCapacityRatioArguments.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the resource to be managed by RequestedToCapacityRatio function.", + Type: []string{"string"}, + Format: "", + }, + }, + "weight": { + SchemaProps: spec.SchemaProps{ + Description: "Weight of the resource.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + Required: []string{"name"}, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1_ServiceAffinity(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceAffinity holds the parameters that are used to configure the corresponding predicate in scheduler policy configuration.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "labels": { + SchemaProps: spec.SchemaProps{ + Description: "The list of labels that identify node \"groups\" All of the labels should match for the node to be considered a fit for hosting the pod", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"labels"}, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1_ServiceAntiAffinity(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceAntiAffinity holds the parameters that are used to configure the corresponding priority function", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "label": { + SchemaProps: spec.SchemaProps{ + Description: "Used to identify node \"groups\"", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"label"}, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1_UtilizationShapePoint(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "UtilizationShapePoint represents single point of priority function shape.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "utilization": { + SchemaProps: spec.SchemaProps{ + Description: "Utilization (x axis). Valid values are 0 to 100. Fully utilized node maps to 100.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "score": { + SchemaProps: spec.SchemaProps{ + Description: "Score assigned to given utilization (y axis). Valid values are 0 to 10.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"utilization", "score"}, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_Extender(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Extender holds the parameters used to communicate with the extender. If a verb is unspecified/empty, it is assumed that the extender chose not to provide that extension.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "urlPrefix": { + SchemaProps: spec.SchemaProps{ + Description: "URLPrefix at which the extender is available", + Type: []string{"string"}, + Format: "", + }, + }, + "filterVerb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb for the filter call, empty if not supported. This verb is appended to the URLPrefix when issuing the filter call to extender.", + Type: []string{"string"}, + Format: "", + }, + }, + "preemptVerb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb for the preempt call, empty if not supported. This verb is appended to the URLPrefix when issuing the preempt call to extender.", + Type: []string{"string"}, + Format: "", + }, + }, + "prioritizeVerb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb for the prioritize call, empty if not supported. This verb is appended to the URLPrefix when issuing the prioritize call to extender.", + Type: []string{"string"}, + Format: "", + }, + }, + "weight": { + SchemaProps: spec.SchemaProps{ + Description: "The numeric multiplier for the node scores that the prioritize call generates. The weight should be a positive integer", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "bindVerb": { + SchemaProps: spec.SchemaProps{ + Description: "Verb for the bind call, empty if not supported. This verb is appended to the URLPrefix when issuing the bind call to extender. If this method is implemented by the extender, it is the extender's responsibility to bind the pod to apiserver. Only one extender can implement this function.", + Type: []string{"string"}, + Format: "", + }, + }, + "enableHTTPS": { + SchemaProps: spec.SchemaProps{ + Description: "EnableHTTPS specifies whether https should be used to communicate with the extender", + Type: []string{"boolean"}, + Format: "", + }, + }, + "tlsConfig": { + SchemaProps: spec.SchemaProps{ + Description: "TLSConfig specifies the transport layer security config", + Ref: ref("k8s.io/kube-scheduler/config/v1.ExtenderTLSConfig"), + }, + }, + "httpTimeout": { + SchemaProps: spec.SchemaProps{ + Description: "HTTPTimeout specifies the timeout duration for a call to the extender. Filter timeout fails the scheduling of the pod. Prioritize timeout is ignored, k8s/other extenders priorities are used to select the node.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "nodeCacheCapable": { + SchemaProps: spec.SchemaProps{ + Description: "NodeCacheCapable specifies that the extender is capable of caching node information, so the scheduler should only send minimal information about the eligible nodes assuming that the extender already cached full details of all nodes in the cluster", + Type: []string{"boolean"}, + Format: "", + }, + }, + "managedResources": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "ManagedResources is a list of extended resources that are managed by this extender. - A pod will be sent to the extender on the Filter, Prioritize and Bind\n (if the extender is the binder) phases iff the pod requests at least\n one of the extended resources in this list. If empty or unspecified,\n all pods will be sent to this extender.\n- If IgnoredByScheduler is set to true for a resource, kube-scheduler\n will skip checking the resource in predicates.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1.ExtenderManagedResource"), + }, + }, + }, + }, + }, + "ignorable": { + SchemaProps: spec.SchemaProps{ + Description: "Ignorable specifies if the extender is ignorable, i.e. scheduling should not fail when the extender returns an error or is not reachable.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"urlPrefix"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/kube-scheduler/config/v1.ExtenderManagedResource", "k8s.io/kube-scheduler/config/v1.ExtenderTLSConfig"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_InterPodAffinityArgs(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "InterPodAffinityArgs holds arguments used to configure the InterPodAffinity plugin.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "hardPodAffinityWeight": { + SchemaProps: spec.SchemaProps{ + Description: "HardPodAffinityWeight is the scoring weight for existing pods with a matching hard affinity to the incoming pod.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_KubeSchedulerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "KubeSchedulerConfiguration configures a scheduler", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "leaderElection": { + SchemaProps: spec.SchemaProps{ + Description: "LeaderElection defines the configuration of leader election client.", + Ref: ref("k8s.io/component-base/config/v1alpha1.LeaderElectionConfiguration"), + }, + }, + "clientConnection": { + SchemaProps: spec.SchemaProps{ + Description: "ClientConnection specifies the kubeconfig file and client connection settings for the proxy server to use when communicating with the apiserver.", + Ref: ref("k8s.io/component-base/config/v1alpha1.ClientConnectionConfiguration"), + }, + }, + "healthzBindAddress": { + SchemaProps: spec.SchemaProps{ + Description: "HealthzBindAddress is the IP address and port for the health check server to serve on, defaulting to 0.0.0.0:10251", + Type: []string{"string"}, + Format: "", + }, + }, + "metricsBindAddress": { + SchemaProps: spec.SchemaProps{ + Description: "MetricsBindAddress is the IP address and port for the metrics server to serve on, defaulting to 0.0.0.0:10251.", + Type: []string{"string"}, + Format: "", + }, + }, + "enableProfiling": { + SchemaProps: spec.SchemaProps{ + Description: "enableProfiling enables profiling via web interface host:port/debug/pprof/", + Type: []string{"boolean"}, + Format: "", + }, + }, + "enableContentionProfiling": { + SchemaProps: spec.SchemaProps{ + Description: "enableContentionProfiling enables lock contention profiling, if enableProfiling is true.", + Type: []string{"boolean"}, + Format: "", + }, + }, + "percentageOfNodesToScore": { + SchemaProps: spec.SchemaProps{ + Description: "PercentageOfNodesToScore is the percentage of all nodes that once found feasible for running a pod, the scheduler stops its search for more feasible nodes in the cluster. This helps improve scheduler's performance. Scheduler always tries to find at least \"minFeasibleNodesToFind\" feasible nodes no matter what the value of this flag is. Example: if the cluster size is 500 nodes and the value of this flag is 30, then scheduler stops finding further feasible nodes once it finds 150 feasible ones. When the value is 0, default percentage (5%--50% based on the size of the cluster) of the nodes will be scored.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "podInitialBackoffSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "PodInitialBackoffSeconds is the initial backoff for unschedulable pods. If specified, it must be greater than 0. If this value is null, the default value (1s) will be used.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "podMaxBackoffSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "PodMaxBackoffSeconds is the max backoff for unschedulable pods. If specified, it must be greater than podInitialBackoffSeconds. If this value is null, the default value (10s) will be used.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "profiles": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "schedulerName", + }, + "x-kubernetes-list-type": "map", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Profiles are scheduling profiles that kube-scheduler supports. Pods can choose to be scheduled under a particular profile by setting its associated scheduler name. Pods that don't specify any scheduler name are scheduled with the \"default-scheduler\" profile, if present here.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.KubeSchedulerProfile"), + }, + }, + }, + }, + }, + "extenders": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "set", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Extenders are the list of scheduler extenders, each holding the values of how to communicate with the extender. These extenders are shared by all scheduler profiles.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.Extender"), + }, + }, + }, + }, + }, + }, + Required: []string{"leaderElection", "clientConnection"}, + }, + }, + Dependencies: []string{ + "k8s.io/component-base/config/v1alpha1.ClientConnectionConfiguration", "k8s.io/component-base/config/v1alpha1.LeaderElectionConfiguration", "k8s.io/kube-scheduler/config/v1beta1.Extender", "k8s.io/kube-scheduler/config/v1beta1.KubeSchedulerProfile"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_KubeSchedulerProfile(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "KubeSchedulerProfile is a scheduling profile.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "schedulerName": { + SchemaProps: spec.SchemaProps{ + Description: "SchedulerName is the name of the scheduler associated to this profile. If SchedulerName matches with the pod's \"spec.schedulerName\", then the pod is scheduled with this profile.", + Type: []string{"string"}, + Format: "", + }, + }, + "plugins": { + SchemaProps: spec.SchemaProps{ + Description: "Plugins specify the set of plugins that should be enabled or disabled. Enabled plugins are the ones that should be enabled in addition to the default plugins. Disabled plugins are any of the default plugins that should be disabled. When no enabled or disabled plugin is specified for an extension point, default plugins for that extension point will be used if there is any. If a QueueSort plugin is specified, the same QueueSort Plugin and PluginConfig must be specified for all profiles.", + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.Plugins"), + }, + }, + "pluginConfig": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "name", + }, + "x-kubernetes-list-type": "map", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "PluginConfig is an optional set of custom plugin arguments for each plugin. Omitting config args for a plugin is equivalent to using the default config for that plugin.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.PluginConfig"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/kube-scheduler/config/v1beta1.PluginConfig", "k8s.io/kube-scheduler/config/v1beta1.Plugins"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_NodeLabelArgs(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeLabelArgs holds arguments used to configure the NodeLabel plugin.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "presentLabels": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "PresentLabels should be present for the node to be considered a fit for hosting the pod", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "absentLabels": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "AbsentLabels should be absent for the node to be considered a fit for hosting the pod", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "presentLabelsPreference": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Nodes that have labels in the list will get a higher score.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "absentLabelsPreference": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Nodes that don't have labels in the list will get a higher score.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_NodeResourcesFitArgs(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeResourcesFitArgs holds arguments used to configure the NodeResourcesFit plugin.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "ignoredResources": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "IgnoredResources is the list of resources that NodeResources fit filter should ignore.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "ignoredResourceGroups": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "IgnoredResourceGroups defines the list of resource groups that NodeResources fit filter should ignore. e.g. if group is [\"example.com\"], it will ignore all resource names that begin with \"example.com\", such as \"example.com/aaa\" and \"example.com/bbb\". A resource group name can't contain '/'.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_NodeResourcesLeastAllocatedArgs(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeResourcesLeastAllocatedArgs holds arguments used to configure NodeResourcesLeastAllocated plugin.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "resources": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Resources to be managed, if no resource is provided, default resource set with both the weight of \"cpu\" and \"memory\" set to \"1\" will be applied. Resource with \"0\" weight will not accountable for the final score.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.ResourceSpec"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/kube-scheduler/config/v1beta1.ResourceSpec"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_NodeResourcesMostAllocatedArgs(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeResourcesMostAllocatedArgs holds arguments used to configure NodeResourcesMostAllocated plugin.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "resources": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Resources to be managed, if no resource is provided, default resource set with both the weight of \"cpu\" and \"memory\" set to \"1\" will be applied. Resource with \"0\" weight will not accountable for the final score.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.ResourceSpec"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/kube-scheduler/config/v1beta1.ResourceSpec"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_Plugin(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Plugin specifies a plugin name and its weight when applicable. Weight is used only for Score plugins.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name defines the name of plugin", + Type: []string{"string"}, + Format: "", + }, + }, + "weight": { + SchemaProps: spec.SchemaProps{ + Description: "Weight defines the weight of plugin, only used for Score plugins.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"name"}, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_PluginConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PluginConfig specifies arguments that should be passed to a plugin at the time of initialization. A plugin that is invoked at multiple extension points is initialized once. Args can have arbitrary structure. It is up to the plugin to process these Args.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name defines the name of plugin being configured", + Type: []string{"string"}, + Format: "", + }, + }, + "args": { + SchemaProps: spec.SchemaProps{ + Description: "Args defines the arguments passed to the plugins at the time of initialization. Args can have arbitrary structure.", + Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), + }, + }, + }, + Required: []string{"name"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/runtime.RawExtension"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_PluginSet(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PluginSet specifies enabled and disabled plugins for an extension point. If an array is empty, missing, or nil, default plugins at that extension point will be used.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "enabled": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Enabled specifies plugins that should be enabled in addition to default plugins. These are called after default plugins and in the same order specified here.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.Plugin"), + }, + }, + }, + }, + }, + "disabled": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "name", + }, + "x-kubernetes-list-type": "map", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Disabled specifies default plugins that should be disabled. When all default plugins need to be disabled, an array containing only one \"*\" should be provided.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.Plugin"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/kube-scheduler/config/v1beta1.Plugin"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_Plugins(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Plugins include multiple extension points. When specified, the list of plugins for a particular extension point are the only ones enabled. If an extension point is omitted from the config, then the default set of plugins is used for that extension point. Enabled plugins are called in the order specified here, after default plugins. If they need to be invoked before default plugins, default plugins must be disabled and re-enabled here in desired order.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "queueSort": { + SchemaProps: spec.SchemaProps{ + Description: "QueueSort is a list of plugins that should be invoked when sorting pods in the scheduling queue.", + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.PluginSet"), + }, + }, + "preFilter": { + SchemaProps: spec.SchemaProps{ + Description: "PreFilter is a list of plugins that should be invoked at \"PreFilter\" extension point of the scheduling framework.", + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.PluginSet"), + }, + }, + "filter": { + SchemaProps: spec.SchemaProps{ + Description: "Filter is a list of plugins that should be invoked when filtering out nodes that cannot run the Pod.", + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.PluginSet"), + }, + }, + "postFilter": { + SchemaProps: spec.SchemaProps{ + Description: "PostFilter is a list of plugins that are invoked after filtering phase, no matter whether filtering succeeds or not.", + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.PluginSet"), + }, + }, + "preScore": { + SchemaProps: spec.SchemaProps{ + Description: "PreScore is a list of plugins that are invoked before scoring.", + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.PluginSet"), + }, + }, + "score": { + SchemaProps: spec.SchemaProps{ + Description: "Score is a list of plugins that should be invoked when ranking nodes that have passed the filtering phase.", + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.PluginSet"), + }, + }, + "reserve": { + SchemaProps: spec.SchemaProps{ + Description: "Reserve is a list of plugins invoked when reserving/unreserving resources after a node is assigned to run the pod.", + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.PluginSet"), + }, + }, + "permit": { + SchemaProps: spec.SchemaProps{ + Description: "Permit is a list of plugins that control binding of a Pod. These plugins can prevent or delay binding of a Pod.", + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.PluginSet"), + }, + }, + "preBind": { + SchemaProps: spec.SchemaProps{ + Description: "PreBind is a list of plugins that should be invoked before a pod is bound.", + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.PluginSet"), + }, + }, + "bind": { + SchemaProps: spec.SchemaProps{ + Description: "Bind is a list of plugins that should be invoked at \"Bind\" extension point of the scheduling framework. The scheduler call these plugins in order. Scheduler skips the rest of these plugins as soon as one returns success.", + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.PluginSet"), + }, + }, + "postBind": { + SchemaProps: spec.SchemaProps{ + Description: "PostBind is a list of plugins that should be invoked after a pod is successfully bound.", + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.PluginSet"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/kube-scheduler/config/v1beta1.PluginSet"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_PodTopologySpreadArgs(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodTopologySpreadArgs holds arguments used to configure the PodTopologySpread plugin.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "defaultConstraints": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "DefaultConstraints defines topology spread constraints to be applied to pods that don't define any in `pod.spec.topologySpreadConstraints`. `topologySpreadConstraint.labelSelectors` must be empty, as they are deduced the pods' membership to Services, Replication Controllers, Replica Sets or Stateful Sets. Empty by default.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.TopologySpreadConstraint"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.TopologySpreadConstraint"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_RequestedToCapacityRatioArgs(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "RequestedToCapacityRatioArgs holds arguments used to configure RequestedToCapacityRatio plugin.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "shape": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Points defining priority function shape", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.UtilizationShapePoint"), + }, + }, + }, + }, + }, + "resources": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Resources to be managed", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/kube-scheduler/config/v1beta1.ResourceSpec"), + }, + }, + }, + }, + }, + }, + Required: []string{"shape"}, + }, + }, + Dependencies: []string{ + "k8s.io/kube-scheduler/config/v1beta1.ResourceSpec", "k8s.io/kube-scheduler/config/v1beta1.UtilizationShapePoint"}, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_ResourceSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceSpec represents single resource and weight for bin packing of priority RequestedToCapacityRatioArguments.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the resource to be managed by RequestedToCapacityRatio function.", + Type: []string{"string"}, + Format: "", + }, + }, + "weight": { + SchemaProps: spec.SchemaProps{ + Description: "Weight of the resource.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + Required: []string{"name"}, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_ServiceAffinityArgs(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ServiceAffinityArgs holds arguments used to configure the ServiceAffinity plugin.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "affinityLabels": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "AffinityLabels are homogeneous for pods that are scheduled to a node. (i.e. it returns true IFF this pod can be added to this node such that all other pods in the same service are running on nodes with the exact same values for Labels).", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "antiAffinityLabelsPreference": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "AntiAffinityLabelsPreference are the labels to consider for service anti affinity scoring.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_UtilizationShapePoint(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "UtilizationShapePoint represents single point of priority function shape.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "utilization": { + SchemaProps: spec.SchemaProps{ + Description: "Utilization (x axis). Valid values are 0 to 100. Fully utilized node maps to 100.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "score": { + SchemaProps: spec.SchemaProps{ + Description: "Score assigned to given utilization (y axis). Valid values are 0 to 10.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"utilization", "score"}, + }, + }, + } +} + +func schema_k8sio_kube_scheduler_config_v1beta1_VolumeBindingArgs(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VolumeBindingArgs holds arguments used to configure the VolumeBinding plugin.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "bindTimeoutSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "BindTimeoutSeconds is the timeout in seconds in volume binding operation. Value must be non-negative integer. The value zero indicates no waiting. If this value is nil, the default value (600) will be used.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_kubelet_config_v1beta1_KubeletAnonymousAuthentication(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "enabled": { + SchemaProps: spec.SchemaProps{ + Description: "enabled allows anonymous requests to the kubelet server. Requests that are not rejected by another authentication method are treated as anonymous requests. Anonymous requests have a username of system:anonymous, and a group name of system:unauthenticated.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_kubelet_config_v1beta1_KubeletAuthentication(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "x509": { + SchemaProps: spec.SchemaProps{ + Description: "x509 contains settings related to x509 client certificate authentication", + Ref: ref("k8s.io/kubelet/config/v1beta1.KubeletX509Authentication"), + }, + }, + "webhook": { + SchemaProps: spec.SchemaProps{ + Description: "webhook contains settings related to webhook bearer token authentication", + Ref: ref("k8s.io/kubelet/config/v1beta1.KubeletWebhookAuthentication"), + }, + }, + "anonymous": { + SchemaProps: spec.SchemaProps{ + Description: "anonymous contains settings related to anonymous authentication", + Ref: ref("k8s.io/kubelet/config/v1beta1.KubeletAnonymousAuthentication"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/kubelet/config/v1beta1.KubeletAnonymousAuthentication", "k8s.io/kubelet/config/v1beta1.KubeletWebhookAuthentication", "k8s.io/kubelet/config/v1beta1.KubeletX509Authentication"}, + } +} + +func schema_k8sio_kubelet_config_v1beta1_KubeletAuthorization(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "mode": { + SchemaProps: spec.SchemaProps{ + Description: "mode is the authorization mode to apply to requests to the kubelet server. Valid values are AlwaysAllow and Webhook. Webhook mode uses the SubjectAccessReview API to determine authorization.", + Type: []string{"string"}, + Format: "", + }, + }, + "webhook": { + SchemaProps: spec.SchemaProps{ + Description: "webhook contains settings related to Webhook authorization.", + Ref: ref("k8s.io/kubelet/config/v1beta1.KubeletWebhookAuthorization"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/kubelet/config/v1beta1.KubeletWebhookAuthorization"}, + } +} + +func schema_k8sio_kubelet_config_v1beta1_KubeletConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "KubeletConfiguration contains the configuration for the Kubelet", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "enableServer": { + SchemaProps: spec.SchemaProps{ + Description: "enableServer enables Kubelet's secured server. Note: Kubelet's insecure port is controlled by the readOnlyPort option. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: true", + Type: []string{"boolean"}, + Format: "", + }, + }, + "staticPodPath": { + SchemaProps: spec.SchemaProps{ + Description: "staticPodPath is the path to the directory containing local (static) pods to run, or the path to a single static pod file. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that the set of static pods specified at the new path may be different than the ones the Kubelet initially started with, and this may disrupt your node. Default: \"\"", + Type: []string{"string"}, + Format: "", + }, + }, + "syncFrequency": { + SchemaProps: spec.SchemaProps{ + Description: "syncFrequency is the max period between synchronizing running containers and config. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that shortening this duration may have a negative performance impact, especially as the number of Pods on the node increases. Alternatively, increasing this duration will result in longer refresh times for ConfigMaps and Secrets. Default: \"1m\"", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "fileCheckFrequency": { + SchemaProps: spec.SchemaProps{ + Description: "fileCheckFrequency is the duration between checking config files for new data Dynamic Kubelet Config (beta): If dynamically updating this field, consider that shortening the duration will cause the Kubelet to reload local Static Pod configurations more frequently, which may have a negative performance impact. Default: \"20s\"", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "httpCheckFrequency": { + SchemaProps: spec.SchemaProps{ + Description: "httpCheckFrequency is the duration between checking http for new data Dynamic Kubelet Config (beta): If dynamically updating this field, consider that shortening the duration will cause the Kubelet to poll staticPodURL more frequently, which may have a negative performance impact. Default: \"20s\"", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "staticPodURL": { + SchemaProps: spec.SchemaProps{ + Description: "staticPodURL is the URL for accessing static pods to run Dynamic Kubelet Config (beta): If dynamically updating this field, consider that the set of static pods specified at the new URL may be different than the ones the Kubelet initially started with, and this may disrupt your node. Default: \"\"", + Type: []string{"string"}, + Format: "", + }, + }, + "staticPodURLHeader": { + SchemaProps: spec.SchemaProps{ + Description: "staticPodURLHeader is a map of slices with HTTP headers to use when accessing the podURL Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt the ability to read the latest set of static pods from StaticPodURL. Default: nil", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + "address": { + SchemaProps: spec.SchemaProps{ + Description: "address is the IP address for the Kubelet to serve on (set to 0.0.0.0 for all interfaces). Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: \"0.0.0.0\"", + Type: []string{"string"}, + Format: "", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "port is the port for the Kubelet to serve on. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: 10250", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "readOnlyPort": { + SchemaProps: spec.SchemaProps{ + Description: "readOnlyPort is the read-only port for the Kubelet to serve on with no authentication/authorization. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: 0 (disabled)", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "tlsCertFile": { + SchemaProps: spec.SchemaProps{ + Description: "tlsCertFile is the file containing x509 Certificate for HTTPS. (CA cert, if any, concatenated after server cert). If tlsCertFile and tlsPrivateKeyFile are not provided, a self-signed certificate and key are generated for the public address and saved to the directory passed to the Kubelet's --cert-dir flag. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: \"\"", + Type: []string{"string"}, + Format: "", + }, + }, + "tlsPrivateKeyFile": { + SchemaProps: spec.SchemaProps{ + Description: "tlsPrivateKeyFile is the file containing x509 private key matching tlsCertFile Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: \"\"", + Type: []string{"string"}, + Format: "", + }, + }, + "tlsCipherSuites": { + SchemaProps: spec.SchemaProps{ + Description: "TLSCipherSuites is the list of allowed cipher suites for the server. Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants). Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: nil", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "tlsMinVersion": { + SchemaProps: spec.SchemaProps{ + Description: "TLSMinVersion is the minimum TLS version supported. Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants). Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: \"\"", + Type: []string{"string"}, + Format: "", + }, + }, + "rotateCertificates": { + SchemaProps: spec.SchemaProps{ + Description: "rotateCertificates enables client certificate rotation. The Kubelet will request a new certificate from the certificates.k8s.io API. This requires an approver to approve the certificate signing requests. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that disabling it may disrupt the Kubelet's ability to authenticate with the API server after the current certificate expires. Default: false", + Type: []string{"boolean"}, + Format: "", + }, + }, + "serverTLSBootstrap": { + SchemaProps: spec.SchemaProps{ + Description: "serverTLSBootstrap enables server certificate bootstrap. Instead of self signing a serving certificate, the Kubelet will request a certificate from the certificates.k8s.io API. This requires an approver to approve the certificate signing requests. The RotateKubeletServerCertificate feature must be enabled. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that disabling it will stop the renewal of Kubelet server certificates, which can disrupt components that interact with the Kubelet server in the long term, due to certificate expiration. Default: false", + Type: []string{"boolean"}, + Format: "", + }, + }, + "authentication": { + SchemaProps: spec.SchemaProps{ + Description: "authentication specifies how requests to the Kubelet's server are authenticated Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Defaults:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n cacheTTL: \"2m\"", + Ref: ref("k8s.io/kubelet/config/v1beta1.KubeletAuthentication"), + }, + }, + "authorization": { + SchemaProps: spec.SchemaProps{ + Description: "authorization specifies how requests to the Kubelet's server are authorized Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Defaults:\n mode: Webhook\n webhook:\n cacheAuthorizedTTL: \"5m\"\n cacheUnauthorizedTTL: \"30s\"", + Ref: ref("k8s.io/kubelet/config/v1beta1.KubeletAuthorization"), + }, + }, + "registryPullQPS": { + SchemaProps: spec.SchemaProps{ + Description: "registryPullQPS is the limit of registry pulls per second. Set to 0 for no limit. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact scalability by changing the amount of traffic produced by image pulls. Default: 5", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "registryBurst": { + SchemaProps: spec.SchemaProps{ + Description: "registryBurst is the maximum size of bursty pulls, temporarily allows pulls to burst to this number, while still not exceeding registryPullQPS. Only used if registryPullQPS > 0. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact scalability by changing the amount of traffic produced by image pulls. Default: 10", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "eventRecordQPS": { + SchemaProps: spec.SchemaProps{ + Description: "eventRecordQPS is the maximum event creations per second. If 0, there is no limit enforced. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact scalability by changing the amount of traffic produced by event creations. Default: 5", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "eventBurst": { + SchemaProps: spec.SchemaProps{ + Description: "eventBurst is the maximum size of a burst of event creations, temporarily allows event creations to burst to this number, while still not exceeding eventRecordQPS. Only used if eventRecordQPS > 0. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact scalability by changing the amount of traffic produced by event creations. Default: 10", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "enableDebuggingHandlers": { + SchemaProps: spec.SchemaProps{ + Description: "enableDebuggingHandlers enables server endpoints for log access and local running of containers and commands, including the exec, attach, logs, and portforward features. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that disabling it may disrupt components that interact with the Kubelet server. Default: true", + Type: []string{"boolean"}, + Format: "", + }, + }, + "enableContentionProfiling": { + SchemaProps: spec.SchemaProps{ + Description: "enableContentionProfiling enables lock contention profiling, if enableDebuggingHandlers is true. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that enabling it may carry a performance impact. Default: false", + Type: []string{"boolean"}, + Format: "", + }, + }, + "healthzPort": { + SchemaProps: spec.SchemaProps{ + Description: "healthzPort is the port of the localhost healthz endpoint (set to 0 to disable) Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that monitor Kubelet health. Default: 10248", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "healthzBindAddress": { + SchemaProps: spec.SchemaProps{ + Description: "healthzBindAddress is the IP address for the healthz server to serve on Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that monitor Kubelet health. Default: \"127.0.0.1\"", + Type: []string{"string"}, + Format: "", + }, + }, + "oomScoreAdj": { + SchemaProps: spec.SchemaProps{ + Description: "oomScoreAdj is The oom-score-adj value for kubelet process. Values must be within the range [-1000, 1000]. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact the stability of nodes under memory pressure. Default: -999", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "clusterDomain": { + SchemaProps: spec.SchemaProps{ + Description: "clusterDomain is the DNS domain for this cluster. If set, kubelet will configure all containers to search this domain in addition to the host's search domains. Dynamic Kubelet Config (beta): Dynamically updating this field is not recommended, as it should be kept in sync with the rest of the cluster. Default: \"\"", + Type: []string{"string"}, + Format: "", + }, + }, + "clusterDNS": { + SchemaProps: spec.SchemaProps{ + Description: "clusterDNS is a list of IP addresses for the cluster DNS server. If set, kubelet will configure all containers to use this for DNS resolution instead of the host's DNS servers. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that changes will only take effect on Pods created after the update. Draining the node is recommended before changing this field. Default: nil", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "streamingConnectionIdleTimeout": { + SchemaProps: spec.SchemaProps{ + Description: "streamingConnectionIdleTimeout is the maximum time a streaming connection can be idle before the connection is automatically closed. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact components that rely on infrequent updates over streaming connections to the Kubelet server. Default: \"4h\"", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "nodeStatusUpdateFrequency": { + SchemaProps: spec.SchemaProps{ + Description: "nodeStatusUpdateFrequency is the frequency that kubelet computes node status. If node lease feature is not enabled, it is also the frequency that kubelet posts node status to master. Note: When node lease feature is not enabled, be cautious when changing the constant, it must work with nodeMonitorGracePeriod in nodecontroller. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact node scalability, and also that the node controller's nodeMonitorGracePeriod must be set to N*NodeStatusUpdateFrequency, where N is the number of retries before the node controller marks the node unhealthy. Default: \"10s\"", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "nodeStatusReportFrequency": { + SchemaProps: spec.SchemaProps{ + Description: "nodeStatusReportFrequency is the frequency that kubelet posts node status to master if node status does not change. Kubelet will ignore this frequency and post node status immediately if any change is detected. It is only used when node lease feature is enabled. nodeStatusReportFrequency's default value is 1m. But if nodeStatusUpdateFrequency is set explicitly, nodeStatusReportFrequency's default value will be set to nodeStatusUpdateFrequency for backward compatibility. Default: \"1m\"", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "nodeLeaseDurationSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "nodeLeaseDurationSeconds is the duration the Kubelet will set on its corresponding Lease, when the NodeLease feature is enabled. This feature provides an indicator of node health by having the Kubelet create and periodically renew a lease, named after the node, in the kube-node-lease namespace. If the lease expires, the node can be considered unhealthy. The lease is currently renewed every 10s, per KEP-0009. In the future, the lease renewal interval may be set based on the lease duration. Requires the NodeLease feature gate to be enabled. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that decreasing the duration may reduce tolerance for issues that temporarily prevent the Kubelet from renewing the lease (e.g. a short-lived network issue). Default: 40", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "imageMinimumGCAge": { + SchemaProps: spec.SchemaProps{ + Description: "imageMinimumGCAge is the minimum age for an unused image before it is garbage collected. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may trigger or delay garbage collection, and may change the image overhead on the node. Default: \"2m\"", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "imageGCHighThresholdPercent": { + SchemaProps: spec.SchemaProps{ + Description: "imageGCHighThresholdPercent is the percent of disk usage after which image garbage collection is always run. The percent is calculated as this field value out of 100. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may trigger or delay garbage collection, and may change the image overhead on the node. Default: 85", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "imageGCLowThresholdPercent": { + SchemaProps: spec.SchemaProps{ + Description: "imageGCLowThresholdPercent is the percent of disk usage before which image garbage collection is never run. Lowest disk usage to garbage collect to. The percent is calculated as this field value out of 100. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may trigger or delay garbage collection, and may change the image overhead on the node. Default: 80", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "volumeStatsAggPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "How frequently to calculate and cache volume disk usage for all pods Dynamic Kubelet Config (beta): If dynamically updating this field, consider that shortening the period may carry a performance impact. Default: \"1m\"", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "kubeletCgroups": { + SchemaProps: spec.SchemaProps{ + Description: "kubeletCgroups is the absolute name of cgroups to isolate the kubelet in Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"\"", + Type: []string{"string"}, + Format: "", + }, + }, + "systemCgroups": { + SchemaProps: spec.SchemaProps{ + Description: "systemCgroups is absolute name of cgroups in which to place all non-kernel processes that are not already in a container. Empty for no container. Rolling back the flag requires a reboot. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"\"", + Type: []string{"string"}, + Format: "", + }, + }, + "cgroupRoot": { + SchemaProps: spec.SchemaProps{ + Description: "cgroupRoot is the root cgroup to use for pods. This is handled by the container runtime on a best effort basis. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"\"", + Type: []string{"string"}, + Format: "", + }, + }, + "cgroupsPerQOS": { + SchemaProps: spec.SchemaProps{ + Description: "Enable QoS based Cgroup hierarchy: top level cgroups for QoS Classes And all Burstable and BestEffort pods are brought up under their specific top level QoS cgroup. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: true", + Type: []string{"boolean"}, + Format: "", + }, + }, + "cgroupDriver": { + SchemaProps: spec.SchemaProps{ + Description: "driver that the kubelet uses to manipulate cgroups on the host (cgroupfs or systemd) Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"cgroupfs\"", + Type: []string{"string"}, + Format: "", + }, + }, + "cpuManagerPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "CPUManagerPolicy is the name of the policy to use. Requires the CPUManager feature gate to be enabled. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"none\"", + Type: []string{"string"}, + Format: "", + }, + }, + "cpuManagerReconcilePeriod": { + SchemaProps: spec.SchemaProps{ + Description: "CPU Manager reconciliation period. Requires the CPUManager feature gate to be enabled. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that shortening the period may carry a performance impact. Default: \"10s\"", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "topologyManagerPolicy": { + SchemaProps: spec.SchemaProps{ + Description: "TopologyManagerPolicy is the name of the policy to use. Policies other than \"none\" require the TopologyManager feature gate to be enabled. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"none\"", + Type: []string{"string"}, + Format: "", + }, + }, + "qosReserved": { + SchemaProps: spec.SchemaProps{ + Description: "qosReserved is a set of resource name to percentage pairs that specify the minimum percentage of a resource reserved for exclusive use by the guaranteed QoS tier. Currently supported resources: \"memory\" Requires the QOSReserved feature gate to be enabled. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: nil", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "runtimeRequestTimeout": { + SchemaProps: spec.SchemaProps{ + Description: "runtimeRequestTimeout is the timeout for all runtime requests except long running requests - pull, logs, exec and attach. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: \"2m\"", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "hairpinMode": { + SchemaProps: spec.SchemaProps{ + Description: "hairpinMode specifies how the Kubelet should configure the container bridge for hairpin packets. Setting this flag allows endpoints in a Service to loadbalance back to themselves if they should try to access their own Service. Values:\n \"promiscuous-bridge\": make the container bridge promiscuous.\n \"hairpin-veth\": set the hairpin flag on container veth interfaces.\n \"none\": do nothing.\nGenerally, one must set --hairpin-mode=hairpin-veth to achieve hairpin NAT, because promiscuous-bridge assumes the existence of a container bridge named cbr0. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may require a node reboot, depending on the network plugin. Default: \"promiscuous-bridge\"", + Type: []string{"string"}, + Format: "", + }, + }, + "maxPods": { + SchemaProps: spec.SchemaProps{ + Description: "maxPods is the number of pods that can run on this Kubelet. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that changes may cause Pods to fail admission on Kubelet restart, and may change the value reported in Node.Status.Capacity[v1.ResourcePods], thus affecting future scheduling decisions. Increasing this value may also decrease performance, as more Pods can be packed into a single node. Default: 110", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "podCIDR": { + SchemaProps: spec.SchemaProps{ + Description: "The CIDR to use for pod IP addresses, only used in standalone mode. In cluster mode, this is obtained from the master. Dynamic Kubelet Config (beta): This field should always be set to the empty default. It should only set for standalone Kubelets, which cannot use Dynamic Kubelet Config. Default: \"\"", + Type: []string{"string"}, + Format: "", + }, + }, + "podPidsLimit": { + SchemaProps: spec.SchemaProps{ + Description: "PodPidsLimit is the maximum number of pids in any pod. Requires the SupportPodPidsLimit feature gate to be enabled. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that lowering it may prevent container processes from forking after the change. Default: -1", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "resolvConf": { + SchemaProps: spec.SchemaProps{ + Description: "ResolverConfig is the resolver configuration file used as the basis for the container DNS resolution configuration. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that changes will only take effect on Pods created after the update. Draining the node is recommended before changing this field. Default: \"/etc/resolv.conf\"", + Type: []string{"string"}, + Format: "", + }, + }, + "runOnce": { + SchemaProps: spec.SchemaProps{ + Description: "RunOnce causes the Kubelet to check the API server once for pods, run those in addition to the pods specified by static pod files, and exit. Default: false", + Type: []string{"boolean"}, + Format: "", + }, + }, + "cpuCFSQuota": { + SchemaProps: spec.SchemaProps{ + Description: "cpuCFSQuota enables CPU CFS quota enforcement for containers that specify CPU limits. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that disabling it may reduce node stability. Default: true", + Type: []string{"boolean"}, + Format: "", + }, + }, + "cpuCFSQuotaPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "CPUCFSQuotaPeriod is the CPU CFS quota period value, cpu.cfs_period_us. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that limits set for containers will result in different cpu.cfs_quota settings. This will trigger container restarts on the node being reconfigured. Default: \"100ms\"", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "nodeStatusMaxImages": { + SchemaProps: spec.SchemaProps{ + Description: "nodeStatusMaxImages caps the number of images reported in Node.Status.Images. Note: If -1 is specified, no cap will be applied. If 0 is specified, no image is returned. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that different values can be reported on node status. Default: 50", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "maxOpenFiles": { + SchemaProps: spec.SchemaProps{ + Description: "maxOpenFiles is Number of files that can be opened by Kubelet process. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact the ability of the Kubelet to interact with the node's filesystem. Default: 1000000", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "contentType": { + SchemaProps: spec.SchemaProps{ + Description: "contentType is contentType of requests sent to apiserver. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact the ability for the Kubelet to communicate with the API server. If the Kubelet loses contact with the API server due to a change to this field, the change cannot be reverted via dynamic Kubelet config. Default: \"application/vnd.kubernetes.protobuf\"", + Type: []string{"string"}, + Format: "", + }, + }, + "kubeAPIQPS": { + SchemaProps: spec.SchemaProps{ + Description: "kubeAPIQPS is the QPS to use while talking with kubernetes apiserver Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact scalability by changing the amount of traffic the Kubelet sends to the API server. Default: 5", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "kubeAPIBurst": { + SchemaProps: spec.SchemaProps{ + Description: "kubeAPIBurst is the burst to allow while talking with kubernetes apiserver Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact scalability by changing the amount of traffic the Kubelet sends to the API server. Default: 10", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "serializeImagePulls": { + SchemaProps: spec.SchemaProps{ + Description: "serializeImagePulls when enabled, tells the Kubelet to pull images one at a time. We recommend *not* changing the default value on nodes that run docker daemon with version < 1.9 or an Aufs storage backend. Issue #10959 has more details. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact the performance of image pulls. Default: true", + Type: []string{"boolean"}, + Format: "", + }, + }, + "evictionHard": { + SchemaProps: spec.SchemaProps{ + Description: "Map of signal names to quantities that defines hard eviction thresholds. For example: {\"memory.available\": \"300Mi\"}. To explicitly disable, pass a 0% or 100% threshold on an arbitrary resource. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may trigger or delay Pod evictions. Default:\n memory.available: \"100Mi\"\n nodefs.available: \"10%\"\n nodefs.inodesFree: \"5%\"\n imagefs.available: \"15%\"", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "evictionSoft": { + SchemaProps: spec.SchemaProps{ + Description: "Map of signal names to quantities that defines soft eviction thresholds. For example: {\"memory.available\": \"300Mi\"}. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may trigger or delay Pod evictions, and may change the allocatable reported by the node. Default: nil", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "evictionSoftGracePeriod": { + SchemaProps: spec.SchemaProps{ + Description: "Map of signal names to quantities that defines grace periods for each soft eviction signal. For example: {\"memory.available\": \"30s\"}. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may trigger or delay Pod evictions. Default: nil", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "evictionPressureTransitionPeriod": { + SchemaProps: spec.SchemaProps{ + Description: "Duration for which the kubelet has to wait before transitioning out of an eviction pressure condition. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that lowering it may decrease the stability of the node when the node is overcommitted. Default: \"5m\"", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "evictionMaxPodGracePeriod": { + SchemaProps: spec.SchemaProps{ + Description: "Maximum allowed grace period (in seconds) to use when terminating pods in response to a soft eviction threshold being met. This value effectively caps the Pod's TerminationGracePeriodSeconds value during soft evictions. Note: Due to issue #64530, the behavior has a bug where this value currently just overrides the grace period during soft eviction, which can increase the grace period from what is set on the Pod. This bug will be fixed in a future release. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that lowering it decreases the amount of time Pods will have to gracefully clean up before being killed during a soft eviction. Default: 0", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "evictionMinimumReclaim": { + SchemaProps: spec.SchemaProps{ + Description: "Map of signal names to quantities that defines minimum reclaims, which describe the minimum amount of a given resource the kubelet will reclaim when performing a pod eviction while that resource is under pressure. For example: {\"imagefs.available\": \"2Gi\"} Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may change how well eviction can manage resource pressure. Default: nil", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "podsPerCore": { + SchemaProps: spec.SchemaProps{ + Description: "podsPerCore is the maximum number of pods per core. Cannot exceed MaxPods. If 0, this field is ignored. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that changes may cause Pods to fail admission on Kubelet restart, and may change the value reported in Node.Status.Capacity[v1.ResourcePods], thus affecting future scheduling decisions. Increasing this value may also decrease performance, as more Pods can be packed into a single node. Default: 0", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "enableControllerAttachDetach": { + SchemaProps: spec.SchemaProps{ + Description: "enableControllerAttachDetach enables the Attach/Detach controller to manage attachment/detachment of volumes scheduled to this node, and disables kubelet from executing any attach/detach operations Dynamic Kubelet Config (beta): If dynamically updating this field, consider that changing which component is responsible for volume management on a live node may result in volumes refusing to detach if the node is not drained prior to the update, and if Pods are scheduled to the node before the volumes.kubernetes.io/controller-managed-attach-detach annotation is updated by the Kubelet. In general, it is safest to leave this value set the same as local config. Default: true", + Type: []string{"boolean"}, + Format: "", + }, + }, + "protectKernelDefaults": { + SchemaProps: spec.SchemaProps{ + Description: "protectKernelDefaults, if true, causes the Kubelet to error if kernel flags are not as it expects. Otherwise the Kubelet will attempt to modify kernel flags to match its expectation. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that enabling it may cause the Kubelet to crash-loop if the Kernel is not configured as Kubelet expects. Default: false", + Type: []string{"boolean"}, + Format: "", + }, + }, + "makeIPTablesUtilChains": { + SchemaProps: spec.SchemaProps{ + Description: "If true, Kubelet ensures a set of iptables rules are present on host. These rules will serve as utility rules for various components, e.g. KubeProxy. The rules will be created based on IPTablesMasqueradeBit and IPTablesDropBit. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that disabling it will prevent the Kubelet from healing locally misconfigured iptables rules. Default: true", + Type: []string{"boolean"}, + Format: "", + }, + }, + "iptablesMasqueradeBit": { + SchemaProps: spec.SchemaProps{ + Description: "iptablesMasqueradeBit is the bit of the iptables fwmark space to mark for SNAT Values must be within the range [0, 31]. Must be different from other mark bits. Warning: Please match the value of the corresponding parameter in kube-proxy. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it needs to be coordinated with other components, like kube-proxy, and the update will only be effective if MakeIPTablesUtilChains is enabled. Default: 14", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "iptablesDropBit": { + SchemaProps: spec.SchemaProps{ + Description: "iptablesDropBit is the bit of the iptables fwmark space to mark for dropping packets. Values must be within the range [0, 31]. Must be different from other mark bits. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it needs to be coordinated with other components, like kube-proxy, and the update will only be effective if MakeIPTablesUtilChains is enabled. Default: 15", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "featureGates": { + SchemaProps: spec.SchemaProps{ + Description: "featureGates is a map of feature names to bools that enable or disable alpha/experimental features. This field modifies piecemeal the built-in default values from \"k8s.io/kubernetes/pkg/features/kube_features.go\". Dynamic Kubelet Config (beta): If dynamically updating this field, consider the documentation for the features you are enabling or disabling. While we encourage feature developers to make it possible to dynamically enable and disable features, some changes may require node reboots, and some features may require careful coordination to retroactively disable. Default: nil", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + "failSwapOn": { + SchemaProps: spec.SchemaProps{ + Description: "failSwapOn tells the Kubelet to fail to start if swap is enabled on the node. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that setting it to true will cause the Kubelet to crash-loop if swap is enabled. Default: true", + Type: []string{"boolean"}, + Format: "", + }, + }, + "containerLogMaxSize": { + SchemaProps: spec.SchemaProps{ + Description: "A quantity defines the maximum size of the container log file before it is rotated. For example: \"5Mi\" or \"256Ki\". Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may trigger log rotation. Default: \"10Mi\"", + Type: []string{"string"}, + Format: "", + }, + }, + "containerLogMaxFiles": { + SchemaProps: spec.SchemaProps{ + Description: "Maximum number of container log files that can be present for a container. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that lowering it may cause log files to be deleted. Default: 5", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "configMapAndSecretChangeDetectionStrategy": { + SchemaProps: spec.SchemaProps{ + Description: "ConfigMapAndSecretChangeDetectionStrategy is a mode in which config map and secret managers are running. Default: \"Watch\"", + Type: []string{"string"}, + Format: "", + }, + }, + "systemReserved": { + SchemaProps: spec.SchemaProps{ + Description: "systemReserved is a set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=150G) pairs that describe resources reserved for non-kubernetes components. Currently only cpu and memory are supported. See http://kubernetes.io/docs/user-guide/compute-resources for more detail. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may not be possible to increase the reserved resources, because this requires resizing cgroups. Always look for a NodeAllocatableEnforced event after updating this field to ensure that the update was successful. Default: nil", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "kubeReserved": { + SchemaProps: spec.SchemaProps{ + Description: "A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=150G) pairs that describe resources reserved for kubernetes system components. Currently cpu, memory and local storage for root file system are supported. See http://kubernetes.io/docs/user-guide/compute-resources for more detail. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may not be possible to increase the reserved resources, because this requires resizing cgroups. Always look for a NodeAllocatableEnforced event after updating this field to ensure that the update was successful. Default: nil", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "reservedSystemCPUs": { + SchemaProps: spec.SchemaProps{ + Description: "This ReservedSystemCPUs option specifies the cpu list reserved for the host level system threads and kubernetes related threads. This provide a \"static\" CPU list rather than the \"dynamic\" list by system-reserved and kube-reserved. This option overwrites CPUs provided by system-reserved and kube-reserved.", + Type: []string{"string"}, + Format: "", + }, + }, + "showHiddenMetricsForVersion": { + SchemaProps: spec.SchemaProps{ + Description: "The previous version for which you want to show hidden metrics. Only the previous minor version is meaningful, other values will not be allowed. The format is ., e.g.: '1.16'. The purpose of this format is make sure you have the opportunity to notice if the next release hides additional metrics, rather than being surprised when they are permanently removed in the release after that. Default: \"\"", + Type: []string{"string"}, + Format: "", + }, + }, + "systemReservedCgroup": { + SchemaProps: spec.SchemaProps{ + Description: "This flag helps kubelet identify absolute name of top level cgroup used to enforce `SystemReserved` compute resource reservation for OS system daemons. Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md) doc for more information. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"\"", + Type: []string{"string"}, + Format: "", + }, + }, + "kubeReservedCgroup": { + SchemaProps: spec.SchemaProps{ + Description: "This flag helps kubelet identify absolute name of top level cgroup used to enforce `KubeReserved` compute resource reservation for Kubernetes node system daemons. Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md) doc for more information. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"\"", + Type: []string{"string"}, + Format: "", + }, + }, + "enforceNodeAllocatable": { + SchemaProps: spec.SchemaProps{ + Description: "This flag specifies the various Node Allocatable enforcements that Kubelet needs to perform. This flag accepts a list of options. Acceptable options are `none`, `pods`, `system-reserved` & `kube-reserved`. If `none` is specified, no other options may be specified. Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md) doc for more information. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that removing enforcements may reduce the stability of the node. Alternatively, adding enforcements may reduce the stability of components which were using more than the reserved amount of resources; for example, enforcing kube-reserved may cause Kubelets to OOM if it uses more than the reserved resources, and enforcing system-reserved may cause system daemons to OOM if they use more than the reserved resources. Default: [\"pods\"]", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "allowedUnsafeSysctls": { + SchemaProps: spec.SchemaProps{ + Description: "A comma separated whitelist of unsafe sysctls or sysctl patterns (ending in *). Unsafe sysctl groups are kernel.shm*, kernel.msg*, kernel.sem, fs.mqueue.*, and net.*. These sysctls are namespaced but not allowed by default. For example: \"kernel.msg*,net.ipv4.route.min_pmtu\" Default: []", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "volumePluginDir": { + SchemaProps: spec.SchemaProps{ + Description: "volumePluginDir is the full path of the directory in which to search for additional third party volume plugins. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that changing the volumePluginDir may disrupt workloads relying on third party volume plugins. Default: \"/usr/libexec/kubernetes/kubelet-plugins/volume/exec/\"", + Type: []string{"string"}, + Format: "", + }, + }, + "providerID": { + SchemaProps: spec.SchemaProps{ + Description: "providerID, if set, sets the unique id of the instance that an external provider (i.e. cloudprovider) can use to identify a specific node. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact the ability of the Kubelet to interact with cloud providers. Default: \"\"", + Type: []string{"string"}, + Format: "", + }, + }, + "kernelMemcgNotification": { + SchemaProps: spec.SchemaProps{ + Description: "kernelMemcgNotification, if set, the kubelet will integrate with the kernel memcg notification to determine if memory eviction thresholds are crossed rather than polling. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact the way Kubelet interacts with the kernel. Default: false", + Type: []string{"boolean"}, + Format: "", + }, + }, + "logging": { + SchemaProps: spec.SchemaProps{ + Description: "Logging specifies the options of logging. Refer [Logs Options](https://github.com/kubernetes/component-base/blob/master/logs/options.go) for more information. Defaults:\n Format: text", + Ref: ref("k8s.io/component-base/config/v1alpha1.LoggingConfiguration"), + }, + }, + "enableSystemLogHandler": { + SchemaProps: spec.SchemaProps{ + Description: "enableSystemLogHandler enables system logs via web interface host:port/logs/ Default: true", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/component-base/config/v1alpha1.LoggingConfiguration", "k8s.io/kubelet/config/v1beta1.KubeletAuthentication", "k8s.io/kubelet/config/v1beta1.KubeletAuthorization"}, + } +} + +func schema_k8sio_kubelet_config_v1beta1_KubeletWebhookAuthentication(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "enabled": { + SchemaProps: spec.SchemaProps{ + Description: "enabled allows bearer token authentication backed by the tokenreviews.authentication.k8s.io API", + Type: []string{"boolean"}, + Format: "", + }, + }, + "cacheTTL": { + SchemaProps: spec.SchemaProps{ + Description: "cacheTTL enables caching of authentication results", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_k8sio_kubelet_config_v1beta1_KubeletWebhookAuthorization(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "cacheAuthorizedTTL": { + SchemaProps: spec.SchemaProps{ + Description: "cacheAuthorizedTTL is the duration to cache 'authorized' responses from the webhook authorizer.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "cacheUnauthorizedTTL": { + SchemaProps: spec.SchemaProps{ + Description: "cacheUnauthorizedTTL is the duration to cache 'unauthorized' responses from the webhook authorizer.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_k8sio_kubelet_config_v1beta1_KubeletX509Authentication(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "clientCAFile": { + SchemaProps: spec.SchemaProps{ + Description: "clientCAFile is the path to a PEM-encoded certificate bundle. If set, any request presenting a client certificate signed by one of the authorities in the bundle is authenticated with a username corresponding to the CommonName, and groups corresponding to the Organization in the client certificate.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_k8sio_kubelet_config_v1beta1_SerializedNodeConfigSource(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "SerializedNodeConfigSource allows us to serialize v1.NodeConfigSource. This type is used internally by the Kubelet for tracking checkpointed dynamic configs. It exists in the kubeletconfig API group because it is classified as a versioned input to the Kubelet.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "source": { + SchemaProps: spec.SchemaProps{ + Description: "Source is the source that we are serializing", + Ref: ref("k8s.io/api/core/v1.NodeConfigSource"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.NodeConfigSource"}, + } +} + +func schema_app_apis_config_v1alpha1_CloudControllerManagerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "Generic": { + SchemaProps: spec.SchemaProps{ + Description: "Generic holds configuration for a generic controller-manager", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.GenericControllerManagerConfiguration"), + }, + }, + "KubeCloudShared": { + SchemaProps: spec.SchemaProps{ + Description: "KubeCloudSharedConfiguration holds configuration for shared related features both in cloud controller manager and kube-controller manager.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.KubeCloudSharedConfiguration"), + }, + }, + "ServiceController": { + SchemaProps: spec.SchemaProps{ + Description: "ServiceControllerConfiguration holds configuration for ServiceController related features.", + Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.ServiceControllerConfiguration"), + }, + }, + "NodeStatusUpdateFrequency": { + SchemaProps: spec.SchemaProps{ + Description: "NodeStatusUpdateFrequency is the frequency at which the controller updates nodes' status", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + }, + Required: []string{"Generic", "KubeCloudShared", "ServiceController", "NodeStatusUpdateFrequency"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/kube-controller-manager/config/v1alpha1.GenericControllerManagerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.KubeCloudSharedConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.ServiceControllerConfiguration"}, + } +} + +func schema_pkg_apis_abac_v1beta1_Policy(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Policy contains a single ABAC policy rule", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "Spec describes the policy rule", + Ref: ref("k8s.io/kubernetes/pkg/apis/abac/v1beta1.PolicySpec"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "k8s.io/kubernetes/pkg/apis/abac/v1beta1.PolicySpec"}, + } +} + +func schema_pkg_apis_abac_v1beta1_PolicySpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PolicySpec contains the attributes for a policy rule", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "user": { + SchemaProps: spec.SchemaProps{ + Description: "User is the username this rule applies to. Either user or group is required to match the request. \"*\" matches all users.", + Type: []string{"string"}, + Format: "", + }, + }, + "group": { + SchemaProps: spec.SchemaProps{ + Description: "Group is the group this rule applies to. Either user or group is required to match the request. \"*\" matches all groups.", + Type: []string{"string"}, + Format: "", + }, + }, + "readonly": { + SchemaProps: spec.SchemaProps{ + Description: "Readonly matches readonly requests when true, and all requests when false", + Type: []string{"boolean"}, + Format: "", + }, + }, + "apiGroup": { + SchemaProps: spec.SchemaProps{ + Description: "APIGroup is the name of an API group. APIGroup, Resource, and Namespace are required to match resource requests. \"*\" matches all API groups", + Type: []string{"string"}, + Format: "", + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "Resource is the name of a resource. APIGroup, Resource, and Namespace are required to match resource requests. \"*\" matches all resources", + Type: []string{"string"}, + Format: "", + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "Namespace is the name of a namespace. APIGroup, Resource, and Namespace are required to match resource requests. \"*\" matches all namespaces (including unnamespaced requests)", + Type: []string{"string"}, + Format: "", + }, + }, + "nonResourcePath": { + SchemaProps: spec.SchemaProps{ + Description: "NonResourcePath matches non-resource request paths. \"*\" matches all paths \"/foo/*\" matches all subpaths of foo", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_custom_metrics_v1beta1_MetricListOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricListOptions is used to select metrics by their label selectors", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "labelSelector": { + SchemaProps: spec.SchemaProps{ + Description: "A selector to restrict the list of returned objects by their labels. Defaults to everything.", + Type: []string{"string"}, + Format: "", + }, + }, + "metricLabelSelector": { + SchemaProps: spec.SchemaProps{ + Description: "A selector to restrict the list of returned metrics by their labels", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_custom_metrics_v1beta1_MetricValue(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricValue is a metric value for some object", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "describedObject": { + SchemaProps: spec.SchemaProps{ + Description: "a reference to the described object", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + "metricName": { + SchemaProps: spec.SchemaProps{ + Description: "the name of the metric", + Type: []string{"string"}, + Format: "", + }, + }, + "timestamp": { + SchemaProps: spec.SchemaProps{ + Description: "indicates the time at which the metrics were produced", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "window": { + SchemaProps: spec.SchemaProps{ + Description: "indicates the window ([Timestamp-Window, Timestamp]) from which these metrics were calculated, when returning rate metrics calculated from cumulative metrics (or zero for non-calculated instantaneous metrics).", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Description: "the value of the metric for this", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "selector represents the label selector that could be used to select this metric, and will generally just be the selector passed in to the query used to fetch this metric. When left blank, only the metric's Name will be used to gather metrics.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + }, + Required: []string{"describedObject", "metricName", "timestamp", "value"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_pkg_apis_custom_metrics_v1beta1_MetricValueList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricValueList is a list of values for a given metric for some set of objects", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "the value of the metric across the described objects", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/metrics/pkg/apis/custom_metrics/v1beta1.MetricValue"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/metrics/pkg/apis/custom_metrics/v1beta1.MetricValue"}, + } +} + +func schema_pkg_apis_custom_metrics_v1beta2_MetricIdentifier(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricIdentifier identifies a metric by name and, optionally, selector", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the given metric", + Type: []string{"string"}, + Format: "", + }, + }, + "selector": { + SchemaProps: spec.SchemaProps{ + Description: "selector represents the label selector that could be used to select this metric, and will generally just be the selector passed in to the query used to fetch this metric. When left blank, only the metric's Name will be used to gather metrics.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + }, + Required: []string{"name"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_pkg_apis_custom_metrics_v1beta2_MetricListOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricListOptions is used to select metrics by their label selectors", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "labelSelector": { + SchemaProps: spec.SchemaProps{ + Description: "A selector to restrict the list of returned objects by their labels. Defaults to everything.", + Type: []string{"string"}, + Format: "", + }, + }, + "metricLabelSelector": { + SchemaProps: spec.SchemaProps{ + Description: "A selector to restrict the list of returned metrics by their labels", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_custom_metrics_v1beta2_MetricValue(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricValue is the metric value for some object", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "describedObject": { + SchemaProps: spec.SchemaProps{ + Description: "a reference to the described object", + Ref: ref("k8s.io/api/core/v1.ObjectReference"), + }, + }, + "metric": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricIdentifier"), + }, + }, + "timestamp": { + SchemaProps: spec.SchemaProps{ + Description: "indicates the time at which the metrics were produced", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "windowSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "indicates the window ([Timestamp-Window, Timestamp]) from which these metrics were calculated, when returning rate metrics calculated from cumulative metrics (or zero for non-calculated instantaneous metrics).", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Description: "the value of the metric for this", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"describedObject", "metric", "timestamp", "value"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.Time", "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricIdentifier"}, + } +} + +func schema_pkg_apis_custom_metrics_v1beta2_MetricValueList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MetricValueList is a list of values for a given metric for some set of objects", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "the value of the metric across the described objects", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricValue"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricValue"}, + } +} + +func schema_pkg_apis_external_metrics_v1beta1_ExternalMetricValue(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExternalMetricValue is a metric value for external metric A single metric value is identified by metric name and a set of string labels. For one metric there can be multiple values with different sets of labels.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metricName": { + SchemaProps: spec.SchemaProps{ + Description: "the name of the metric", + Type: []string{"string"}, + Format: "", + }, + }, + "metricLabels": { + SchemaProps: spec.SchemaProps{ + Description: "a set of labels that identify a single time series for the metric", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "timestamp": { + SchemaProps: spec.SchemaProps{ + Description: "indicates the time at which the metrics were produced", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "window": { + SchemaProps: spec.SchemaProps{ + Description: "indicates the window ([Timestamp-Window, Timestamp]) from which these metrics were calculated, when returning rate metrics calculated from cumulative metrics (or zero for non-calculated instantaneous metrics).", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Description: "the value of the metric", + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + Required: []string{"metricName", "metricLabels", "timestamp", "value"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_pkg_apis_external_metrics_v1beta1_ExternalMetricValueList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExternalMetricValueList is a list of values for a given metric for some set labels", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "value of the metric matching a given set of labels", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/metrics/pkg/apis/external_metrics/v1beta1.ExternalMetricValue"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/metrics/pkg/apis/external_metrics/v1beta1.ExternalMetricValue"}, + } +} + +func schema_pkg_apis_metrics_v1alpha1_ContainerMetrics(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ContainerMetrics sets resource usage metrics of a container.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Container name corresponding to the one from pod.spec.containers.", + Type: []string{"string"}, + Format: "", + }, + }, + "usage": { + SchemaProps: spec.SchemaProps{ + Description: "The memory usage is the memory working set.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + }, + Required: []string{"name", "usage"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_pkg_apis_metrics_v1alpha1_NodeMetrics(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeMetrics sets resource usage metrics of a node.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "timestamp": { + SchemaProps: spec.SchemaProps{ + Description: "The following fields define time interval from which metrics were collected from the interval [Timestamp-Window, Timestamp].", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "window": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "usage": { + SchemaProps: spec.SchemaProps{ + Description: "The memory usage is the memory working set.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + }, + Required: []string{"timestamp", "window", "usage"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_pkg_apis_metrics_v1alpha1_NodeMetricsList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeMetricsList is a list of NodeMetrics.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of node metrics.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/metrics/pkg/apis/metrics/v1alpha1.NodeMetrics"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/metrics/pkg/apis/metrics/v1alpha1.NodeMetrics"}, + } +} + +func schema_pkg_apis_metrics_v1alpha1_PodMetrics(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodMetrics sets resource usage metrics of a pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "timestamp": { + SchemaProps: spec.SchemaProps{ + Description: "The following fields define time interval from which metrics were collected from the interval [Timestamp-Window, Timestamp].", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "window": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "containers": { + SchemaProps: spec.SchemaProps{ + Description: "Metrics for all containers are collected within the same time window.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/metrics/pkg/apis/metrics/v1alpha1.ContainerMetrics"), + }, + }, + }, + }, + }, + }, + Required: []string{"timestamp", "window", "containers"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Time", "k8s.io/metrics/pkg/apis/metrics/v1alpha1.ContainerMetrics"}, + } +} + +func schema_pkg_apis_metrics_v1alpha1_PodMetricsList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodMetricsList is a list of PodMetrics.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of pod metrics.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/metrics/pkg/apis/metrics/v1alpha1.PodMetrics"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/metrics/pkg/apis/metrics/v1alpha1.PodMetrics"}, + } +} + +func schema_pkg_apis_metrics_v1beta1_ContainerMetrics(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ContainerMetrics sets resource usage metrics of a container.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Container name corresponding to the one from pod.spec.containers.", + Type: []string{"string"}, + Format: "", + }, + }, + "usage": { + SchemaProps: spec.SchemaProps{ + Description: "The memory usage is the memory working set.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + }, + Required: []string{"name", "usage"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + } +} + +func schema_pkg_apis_metrics_v1beta1_NodeMetrics(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeMetrics sets resource usage metrics of a node.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "timestamp": { + SchemaProps: spec.SchemaProps{ + Description: "The following fields define time interval from which metrics were collected from the interval [Timestamp-Window, Timestamp].", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "window": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "usage": { + SchemaProps: spec.SchemaProps{ + Description: "The memory usage is the memory working set.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), + }, + }, + }, + }, + }, + }, + Required: []string{"timestamp", "window", "usage"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_pkg_apis_metrics_v1beta1_NodeMetricsList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeMetricsList is a list of NodeMetrics.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of node metrics.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/metrics/pkg/apis/metrics/v1beta1.NodeMetrics"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/metrics/pkg/apis/metrics/v1beta1.NodeMetrics"}, + } +} + +func schema_pkg_apis_metrics_v1beta1_PodMetrics(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodMetrics sets resource usage metrics of a pod.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "timestamp": { + SchemaProps: spec.SchemaProps{ + Description: "The following fields define time interval from which metrics were collected from the interval [Timestamp-Window, Timestamp].", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "window": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "containers": { + SchemaProps: spec.SchemaProps{ + Description: "Metrics for all containers are collected within the same time window.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/metrics/pkg/apis/metrics/v1beta1.ContainerMetrics"), + }, + }, + }, + }, + }, + }, + Required: []string{"timestamp", "window", "containers"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Time", "k8s.io/metrics/pkg/apis/metrics/v1beta1.ContainerMetrics"}, + } +} + +func schema_pkg_apis_metrics_v1beta1_PodMetricsList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodMetricsList is a list of PodMetrics.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "List of pod metrics.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/metrics/pkg/apis/metrics/v1beta1.PodMetrics"), + }, + }, + }, + }, + }, + }, + Required: []string{"items"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/metrics/pkg/apis/metrics/v1beta1.PodMetrics"}, + } +} diff --git a/test/e2e/generated/bindata.go b/test/e2e/generated/bindata.go new file mode 100644 index 0000000000000..ef9523b0a9470 --- /dev/null +++ b/test/e2e/generated/bindata.go @@ -0,0 +1,8978 @@ +// Package generated Code generated by go-bindata. (@generated) DO NOT EDIT. +// sources: +// test/conformance/testdata/OWNERS +// test/conformance/testdata/conformance.yaml +// test/e2e/testing-manifests/flexvolume/attachable-with-long-mount +// test/e2e/testing-manifests/flexvolume/dummy +// test/e2e/testing-manifests/flexvolume/dummy-attachable +// test/e2e/testing-manifests/guestbook/agnhost-primary-deployment.yaml.in +// test/e2e/testing-manifests/guestbook/agnhost-primary-service.yaml +// test/e2e/testing-manifests/guestbook/agnhost-replica-deployment.yaml.in +// test/e2e/testing-manifests/guestbook/agnhost-replica-service.yaml +// test/e2e/testing-manifests/guestbook/frontend-deployment.yaml.in +// test/e2e/testing-manifests/guestbook/frontend-service.yaml +// test/e2e/testing-manifests/guestbook/legacy/frontend-controller.yaml +// test/e2e/testing-manifests/guestbook/legacy/redis-master-controller.yaml +// test/e2e/testing-manifests/guestbook/legacy/redis-slave-controller.yaml +// test/e2e/testing-manifests/guestbook/redis-master-deployment.yaml.in +// test/e2e/testing-manifests/guestbook/redis-master-service.yaml +// test/e2e/testing-manifests/guestbook/redis-slave-deployment.yaml.in +// test/e2e/testing-manifests/guestbook/redis-slave-service.yaml +// test/e2e/testing-manifests/ingress/gce/static-ip-2/ing.yaml +// test/e2e/testing-manifests/ingress/gce/static-ip-2/rc.yaml +// test/e2e/testing-manifests/ingress/gce/static-ip-2/svc.yaml +// test/e2e/testing-manifests/ingress/http/ing.yaml +// test/e2e/testing-manifests/ingress/http/rc.yaml +// test/e2e/testing-manifests/ingress/http/svc.yaml +// test/e2e/testing-manifests/ingress/http2/ing.yaml +// test/e2e/testing-manifests/ingress/http2/rc.yaml +// test/e2e/testing-manifests/ingress/http2/svc.yaml +// test/e2e/testing-manifests/ingress/multiple-certs/ing.yaml +// test/e2e/testing-manifests/ingress/multiple-certs/rc.yaml +// test/e2e/testing-manifests/ingress/multiple-certs/svc.yaml +// test/e2e/testing-manifests/ingress/neg/ing.yaml +// test/e2e/testing-manifests/ingress/neg/rc.yaml +// test/e2e/testing-manifests/ingress/neg/svc.yaml +// test/e2e/testing-manifests/ingress/neg-clusterip/ing.yaml +// test/e2e/testing-manifests/ingress/neg-clusterip/rc.yaml +// test/e2e/testing-manifests/ingress/neg-clusterip/svc.yaml +// test/e2e/testing-manifests/ingress/neg-exposed/ing.yaml +// test/e2e/testing-manifests/ingress/neg-exposed/rc.yaml +// test/e2e/testing-manifests/ingress/neg-exposed/svc.yaml +// test/e2e/testing-manifests/ingress/nginx/rc.yaml +// test/e2e/testing-manifests/ingress/pre-shared-cert/ing.yaml +// test/e2e/testing-manifests/ingress/pre-shared-cert/rc.yaml +// test/e2e/testing-manifests/ingress/pre-shared-cert/svc.yaml +// test/e2e/testing-manifests/ingress/static-ip/ing.yaml +// test/e2e/testing-manifests/ingress/static-ip/rc.yaml +// test/e2e/testing-manifests/ingress/static-ip/secret.yaml +// test/e2e/testing-manifests/ingress/static-ip/svc.yaml +// test/e2e/testing-manifests/kubectl/agnhost-primary-controller.json.in +// test/e2e/testing-manifests/kubectl/agnhost-primary-pod.yaml +// test/e2e/testing-manifests/kubectl/agnhost-primary-service.json +// test/e2e/testing-manifests/kubectl/busybox-cronjob.yaml +// test/e2e/testing-manifests/kubectl/busybox-pod.yaml +// test/e2e/testing-manifests/kubectl/httpd-deployment1.yaml.in +// test/e2e/testing-manifests/kubectl/httpd-deployment2.yaml.in +// test/e2e/testing-manifests/kubectl/httpd-deployment3.yaml.in +// test/e2e/testing-manifests/kubectl/httpd-rc.yaml.in +// test/e2e/testing-manifests/kubectl/pause-pod.yaml.in +// test/e2e/testing-manifests/kubectl/pod-with-readiness-probe.yaml.in +// test/e2e/testing-manifests/pod +// test/e2e/testing-manifests/rbd-storage-class.yaml +// test/e2e/testing-manifests/sample-device-plugin.yaml +// test/e2e/testing-manifests/scheduling/nvidia-driver-installer.yaml +// test/e2e/testing-manifests/serviceloadbalancer/haproxyrc.yaml +// test/e2e/testing-manifests/serviceloadbalancer/netexecrc.yaml +// test/e2e/testing-manifests/serviceloadbalancer/netexecsvc.yaml +// test/e2e/testing-manifests/serviceloadbalancer/nginxrc.yaml +// test/e2e/testing-manifests/serviceloadbalancer/nginxsvc.yaml +// test/e2e/testing-manifests/statefulset/cassandra/controller.yaml +// test/e2e/testing-manifests/statefulset/cassandra/pdb.yaml +// test/e2e/testing-manifests/statefulset/cassandra/service.yaml +// test/e2e/testing-manifests/statefulset/cassandra/statefulset.yaml +// test/e2e/testing-manifests/statefulset/cassandra/tester.yaml +// test/e2e/testing-manifests/statefulset/cockroachdb/service.yaml +// test/e2e/testing-manifests/statefulset/cockroachdb/statefulset.yaml +// test/e2e/testing-manifests/statefulset/etcd/pdb.yaml +// test/e2e/testing-manifests/statefulset/etcd/service.yaml +// test/e2e/testing-manifests/statefulset/etcd/statefulset.yaml +// test/e2e/testing-manifests/statefulset/etcd/tester.yaml +// test/e2e/testing-manifests/statefulset/mysql-galera/service.yaml +// test/e2e/testing-manifests/statefulset/mysql-galera/statefulset.yaml +// test/e2e/testing-manifests/statefulset/mysql-upgrade/configmap.yaml +// test/e2e/testing-manifests/statefulset/mysql-upgrade/service.yaml +// test/e2e/testing-manifests/statefulset/mysql-upgrade/statefulset.yaml +// test/e2e/testing-manifests/statefulset/mysql-upgrade/tester.yaml +// test/e2e/testing-manifests/statefulset/nginx/service.yaml +// test/e2e/testing-manifests/statefulset/nginx/statefulset.yaml +// test/e2e/testing-manifests/statefulset/redis/service.yaml +// test/e2e/testing-manifests/statefulset/redis/statefulset.yaml +// test/e2e/testing-manifests/statefulset/zookeeper/service.yaml +// test/e2e/testing-manifests/statefulset/zookeeper/statefulset.yaml +// test/e2e/testing-manifests/storage-csi/OWNERS +// test/e2e/testing-manifests/storage-csi/controller-role.yaml +// test/e2e/testing-manifests/storage-csi/external-attacher/rbac.yaml +// test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml +// test/e2e/testing-manifests/storage-csi/external-resizer/rbac.yaml +// test/e2e/testing-manifests/storage-csi/external-snapshotter/rbac.yaml +// test/e2e/testing-manifests/storage-csi/gce-pd/controller_ss.yaml +// test/e2e/testing-manifests/storage-csi/gce-pd/csi-controller-rbac.yaml +// test/e2e/testing-manifests/storage-csi/gce-pd/node_ds.yaml +// test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-attacher.yaml +// test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-driverinfo.yaml +// test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-plugin.yaml +// test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-provisioner.yaml +// test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-resizer.yaml +// test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-snapshotter.yaml +// test/e2e/testing-manifests/storage-csi/hostpath/hostpath/e2e-test-rbac.yaml +// test/e2e/testing-manifests/storage-csi/hostpath/usage/csi-storageclass.yaml +// test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-attacher.yaml +// test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-resizer.yaml +// test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver.yaml +// test/e2e/testing-manifests/storage-csi/mock/csi-mock-driverinfo.yaml +// test/e2e/testing-manifests/storage-csi/mock/csi-mock-rbac.yaml +// test/e2e/testing-manifests/storage-csi/mock/csi-storageclass.yaml +// test/e2e_node/testing-manifests/sriovdp-cm.yaml +// test/e2e_node/testing-manifests/sriovdp-ds.yaml +// test/e2e_node/testing-manifests/sriovdp-sa.yaml +// test/images/Makefile +// test/images/OWNERS +// test/images/agnhost/.gitignore +// test/images/agnhost/BASEIMAGE +// test/images/agnhost/Dockerfile +// test/images/agnhost/Dockerfile_windows +// test/images/agnhost/Makefile +// test/images/agnhost/OWNERS +// test/images/agnhost/VERSION +// test/images/agnhost/agnhost.go +// test/images/agnhost/audit-proxy/main.go +// test/images/agnhost/connect/connect.go +// test/images/agnhost/crd-conversion-webhook/config.go +// test/images/agnhost/crd-conversion-webhook/converter/converter_test.go +// test/images/agnhost/crd-conversion-webhook/converter/example_converter.go +// test/images/agnhost/crd-conversion-webhook/converter/framework.go +// test/images/agnhost/crd-conversion-webhook/main.go +// test/images/agnhost/dns/common.go +// test/images/agnhost/dns/dns.go +// test/images/agnhost/dns/dns_windows.go +// test/images/agnhost/entrypoint-tester/ep.go +// test/images/agnhost/fakegitserver/gitserver.go +// test/images/agnhost/guestbook/guestbook.go +// test/images/agnhost/inclusterclient/main.go +// test/images/agnhost/liveness/server.go +// test/images/agnhost/logs-generator/logs_generator.go +// test/images/agnhost/mounttest/filePermissions.ps1 +// test/images/agnhost/mounttest/mt.go +// test/images/agnhost/mounttest/mt_utils.go +// test/images/agnhost/mounttest/mt_utils_windows.go +// test/images/agnhost/net/common/common.go +// test/images/agnhost/net/main.go +// test/images/agnhost/net/nat/closewait.go +// test/images/agnhost/netexec/netexec.go +// test/images/agnhost/nettest/nettest.go +// test/images/agnhost/no-snat-test/main.go +// test/images/agnhost/no-snat-test-proxy/main.go +// test/images/agnhost/openidmetadata/openidmetadata.go +// test/images/agnhost/pause/pause.go +// test/images/agnhost/port-forward-tester/portforwardtester.go +// test/images/agnhost/porter/localhost.crt +// test/images/agnhost/porter/localhost.key +// test/images/agnhost/porter/porter.go +// test/images/agnhost/resource-consumer-controller/controller.go +// test/images/agnhost/serve-hostname/serve_hostname.go +// test/images/agnhost/test-webserver/test-webserver.go +// test/images/agnhost/webhook/addlabel.go +// test/images/agnhost/webhook/addlabel_test.go +// test/images/agnhost/webhook/alwaysallow.go +// test/images/agnhost/webhook/alwaysdeny.go +// test/images/agnhost/webhook/config.go +// test/images/agnhost/webhook/configmap.go +// test/images/agnhost/webhook/convert.go +// test/images/agnhost/webhook/convert_test.go +// test/images/agnhost/webhook/crd.go +// test/images/agnhost/webhook/customresource.go +// test/images/agnhost/webhook/main.go +// test/images/agnhost/webhook/patch_test.go +// test/images/agnhost/webhook/pods.go +// test/images/agnhost/webhook/scheme.go +// test/images/apparmor-loader/BASEIMAGE +// test/images/apparmor-loader/Dockerfile +// test/images/apparmor-loader/Makefile +// test/images/apparmor-loader/OWNERS +// test/images/apparmor-loader/VERSION +// test/images/apparmor-loader/example-configmap.yaml +// test/images/apparmor-loader/example-daemon.yaml +// test/images/apparmor-loader/example-namespace.yaml +// test/images/apparmor-loader/example-pod.yaml +// test/images/apparmor-loader/loader.go +// test/images/busybox/BASEIMAGE +// test/images/busybox/Dockerfile_windows +// test/images/busybox/Makefile +// test/images/busybox/OWNERS +// test/images/busybox/VERSION +// test/images/busybox/hostname.go +// test/images/cloudbuild.yaml +// test/images/cuda-vector-add/BASEIMAGE +// test/images/cuda-vector-add/Dockerfile +// test/images/cuda-vector-add/OWNERS +// test/images/cuda-vector-add/VERSION +// test/images/echoserver/BASEIMAGE +// test/images/echoserver/Dockerfile +// test/images/echoserver/OWNERS +// test/images/echoserver/VERSION +// test/images/echoserver/nginx.conf +// test/images/echoserver/run.sh +// test/images/echoserver/template.lua +// test/images/image-util.sh +// test/images/ipc-utils/BASEIMAGE +// test/images/ipc-utils/Dockerfile +// test/images/ipc-utils/VERSION +// test/images/jessie-dnsutils/BASEIMAGE +// test/images/jessie-dnsutils/Dockerfile +// test/images/jessie-dnsutils/OWNERS +// test/images/jessie-dnsutils/VERSION +// test/images/jessie-dnsutils/fixup-apt-list.sh +// test/images/kitten/BASEIMAGE +// test/images/kitten/Dockerfile +// test/images/kitten/OWNERS +// test/images/kitten/VERSION +// test/images/kitten/html/data.json +// test/images/metadata-concealment/Dockerfile +// test/images/metadata-concealment/Makefile +// test/images/metadata-concealment/OWNERS +// test/images/metadata-concealment/VERSION +// test/images/metadata-concealment/check_metadata_concealment.go +// test/images/nautilus/BASEIMAGE +// test/images/nautilus/Dockerfile +// test/images/nautilus/OWNERS +// test/images/nautilus/VERSION +// test/images/nautilus/html/data.json +// test/images/node-perf/npb-ep/BASEIMAGE +// test/images/node-perf/npb-ep/Dockerfile +// test/images/node-perf/npb-ep/VERSION +// test/images/node-perf/npb-is/BASEIMAGE +// test/images/node-perf/npb-is/Dockerfile +// test/images/node-perf/npb-is/VERSION +// test/images/node-perf/tf-wide-deep/BASEIMAGE +// test/images/node-perf/tf-wide-deep/Dockerfile +// test/images/node-perf/tf-wide-deep/VERSION +// test/images/nonewprivs/.gitignore +// test/images/nonewprivs/BASEIMAGE +// test/images/nonewprivs/Dockerfile +// test/images/nonewprivs/Makefile +// test/images/nonewprivs/OWNERS +// test/images/nonewprivs/VERSION +// test/images/nonewprivs/nnp.go +// test/images/nonroot/BASEIMAGE +// test/images/nonroot/Dockerfile +// test/images/nonroot/OWNERS +// test/images/nonroot/VERSION +// test/images/pets/OWNERS +// test/images/pets/peer-finder/BASEIMAGE +// test/images/pets/peer-finder/Dockerfile +// test/images/pets/peer-finder/Makefile +// test/images/pets/peer-finder/VERSION +// test/images/pets/peer-finder/peer-finder.go +// test/images/pets/redis-installer/BASEIMAGE +// test/images/pets/redis-installer/Dockerfile +// test/images/pets/redis-installer/Makefile +// test/images/pets/redis-installer/VERSION +// test/images/pets/redis-installer/install.sh +// test/images/pets/redis-installer/on-start.sh +// test/images/pets/zookeeper-installer/BASEIMAGE +// test/images/pets/zookeeper-installer/Dockerfile +// test/images/pets/zookeeper-installer/Makefile +// test/images/pets/zookeeper-installer/VERSION +// test/images/pets/zookeeper-installer/install.sh +// test/images/pets/zookeeper-installer/on-start.sh +// test/images/redis/BASEIMAGE +// test/images/redis/Dockerfile +// test/images/redis/OWNERS +// test/images/redis/VERSION +// test/images/redis/redis.conf +// test/images/regression-issue-74839/.gitignore +// test/images/regression-issue-74839/Dockerfile +// test/images/regression-issue-74839/Makefile +// test/images/regression-issue-74839/OWNERS +// test/images/regression-issue-74839/VERSION +// test/images/regression-issue-74839/main.go +// test/images/regression-issue-74839/tcp.go +// test/images/resource-consumer/.gitignore +// test/images/resource-consumer/BASEIMAGE +// test/images/resource-consumer/Dockerfile +// test/images/resource-consumer/Makefile +// test/images/resource-consumer/VERSION +// test/images/resource-consumer/common/common.go +// test/images/resource-consumer/consume-cpu/consume_cpu.go +// test/images/resource-consumer/resource_consumer.go +// test/images/resource-consumer/resource_consumer_handler.go +// test/images/resource-consumer/utils.go +// test/images/sample-apiserver/BASEIMAGE +// test/images/sample-apiserver/Dockerfile +// test/images/sample-apiserver/OWNERS +// test/images/sample-apiserver/VERSION +// test/images/sample-device-plugin/BASEIMAGE +// test/images/sample-device-plugin/Dockerfile +// test/images/sample-device-plugin/Makefile +// test/images/sample-device-plugin/VERSION +// test/images/sample-device-plugin/sampledeviceplugin.go +// test/images/volume/OWNERS +// test/images/volume/gluster/BASEIMAGE +// test/images/volume/gluster/Dockerfile +// test/images/volume/gluster/VERSION +// test/images/volume/gluster/glusterd.vol +// test/images/volume/gluster/index.html +// test/images/volume/gluster/run_gluster.sh +// test/images/volume/iscsi/BASEIMAGE +// test/images/volume/iscsi/Dockerfile +// test/images/volume/iscsi/VERSION +// test/images/volume/iscsi/block.tar.gz +// test/images/volume/iscsi/create_block.sh +// test/images/volume/iscsi/run_iscsi_target.sh +// test/images/volume/nfs/BASEIMAGE +// test/images/volume/nfs/Dockerfile +// test/images/volume/nfs/VERSION +// test/images/volume/nfs/index.html +// test/images/volume/nfs/run_nfs.sh +// test/images/volume/rbd/BASEIMAGE +// test/images/volume/rbd/Dockerfile +// test/images/volume/rbd/VERSION +// test/images/volume/rbd/block.tar.gz +// test/images/volume/rbd/bootstrap.sh +// test/images/volume/rbd/ceph.conf.sh +// test/images/volume/rbd/create_block.sh +// test/images/volume/rbd/keyring +// test/images/volume/rbd/mon.sh +// test/images/volume/rbd/osd.sh +// test/fixtures/doc-yaml/admin/daemon.yaml +// test/fixtures/doc-yaml/admin/high-availability/etcd.yaml +// test/fixtures/doc-yaml/admin/high-availability/kube-apiserver.yaml +// test/fixtures/doc-yaml/admin/high-availability/kube-controller-manager.yaml +// test/fixtures/doc-yaml/admin/high-availability/kube-scheduler.yaml +// test/fixtures/doc-yaml/admin/limitrange/invalid-pod.yaml +// test/fixtures/doc-yaml/admin/limitrange/limits.yaml +// test/fixtures/doc-yaml/admin/limitrange/namespace.yaml +// test/fixtures/doc-yaml/admin/limitrange/valid-pod.yaml +// test/fixtures/doc-yaml/admin/namespaces/namespace-dev.json +// test/fixtures/doc-yaml/admin/namespaces/namespace-prod.json +// test/fixtures/doc-yaml/admin/resourcequota/limits.yaml +// test/fixtures/doc-yaml/admin/resourcequota/namespace.yaml +// test/fixtures/doc-yaml/admin/resourcequota/quota.yaml +// test/fixtures/doc-yaml/user-guide/configmap/configmap.yaml +// test/fixtures/doc-yaml/user-guide/deployment.yaml +// test/fixtures/doc-yaml/user-guide/downward-api/dapi-pod.yaml.in +// test/fixtures/doc-yaml/user-guide/job.yaml +// test/fixtures/doc-yaml/user-guide/liveness/exec-liveness.yaml.in +// test/fixtures/doc-yaml/user-guide/liveness/http-liveness.yaml.in +// test/fixtures/doc-yaml/user-guide/multi-pod.yaml +// test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-01.yaml +// test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-02.yaml +// test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-03.json +// test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/gce.yaml +// test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-01.yaml +// test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-02.yaml +// test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/nfs.yaml +// test/fixtures/doc-yaml/user-guide/pod.yaml +// test/fixtures/doc-yaml/user-guide/replicaset/redis-slave.yaml +// test/fixtures/doc-yaml/user-guide/replication.yaml +// test/fixtures/doc-yaml/user-guide/secrets/secret-env-pod.yaml +// test/fixtures/doc-yaml/user-guide/secrets/secret-pod.yaml.in +// test/fixtures/doc-yaml/user-guide/secrets/secret.yaml +// test/fixtures/doc-yaml/user-guide/update-demo/images/kitten/html/data.json +// test/fixtures/doc-yaml/user-guide/update-demo/images/nautilus/html/data.json +// test/fixtures/doc-yaml/user-guide/update-demo/kitten-rc.yaml.in +// test/fixtures/doc-yaml/user-guide/update-demo/nautilus-rc.yaml.in +// test/fixtures/doc-yaml/user-guide/walkthrough/podtemplate.json +// test/fixtures/pkg/kubectl/OWNERS +// test/fixtures/pkg/kubectl/plugins/bar/kubectl-bar +// test/fixtures/pkg/kubectl/plugins/foo/kubectl-foo +// test/fixtures/pkg/kubectl/plugins/kubectl-foo +// test/fixtures/pkg/kubectl/plugins/version/kubectl-version +package generated + +import ( + "bytes" + "compress/gzip" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + "time" +) + +func bindataRead(data []byte, name string) ([]byte, error) { + gz, err := gzip.NewReader(bytes.NewBuffer(data)) + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + + var buf bytes.Buffer + _, err = io.Copy(&buf, gz) + clErr := gz.Close() + + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + if clErr != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +type asset struct { + bytes []byte + info os.FileInfo +} + +type bindataFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time +} + +// Name return file name +func (fi bindataFileInfo) Name() string { + return fi.name +} + +// Size return file size +func (fi bindataFileInfo) Size() int64 { + return fi.size +} + +// Mode return file mode +func (fi bindataFileInfo) Mode() os.FileMode { + return fi.mode +} + +// Mode return file modify time +func (fi bindataFileInfo) ModTime() time.Time { + return fi.modTime +} + +// IsDir return file whether a directory +func (fi bindataFileInfo) IsDir() bool { + return fi.mode&os.ModeDir != 0 +} + +// Sys return file is sys mode +func (fi bindataFileInfo) Sys() interface{} { + return nil +} + +var _testConformanceTestdataOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8f\xb1\x6a\xc3\x40\x0c\x86\xf7\x7b\x0a\x41\x66\xdb\x6b\xf1\xde\xb5\x85\xa6\xd0\x31\xc8\x67\xd9\xa7\xd6\x77\x3a\x24\xd5\xa9\xdf\xbe\xc4\x0e\x21\xdb\xff\x7f\x7c\x92\xd0\x09\xce\x44\xe0\x89\xe0\xfd\xeb\xed\xf5\xe3\x0c\xa3\x44\x03\x74\x48\xee\xd5\xfa\xae\x9b\xa5\xfd\x79\xb1\x96\xa5\x93\x6b\x21\xb5\x10\x4e\xf0\x29\x30\x10\xdc\xfa\x08\xc3\x06\xc6\x73\x83\x1a\x13\x3b\x45\xff\x55\x6a\x83\x54\x67\x29\xd6\x07\x80\x22\x97\x8a\x4a\xc5\x2f\xc7\x7c\x0f\x13\x2e\x46\x41\x69\x65\xba\xde\x40\x00\x68\xc0\x32\xaa\x93\xc6\x05\x37\x97\x72\xa0\xca\xd3\xf4\x57\xf7\xec\x9c\xc5\xd3\x66\x71\x6f\x23\x67\xdb\xc3\xb7\xa4\x32\xd0\x82\x19\x95\x63\xc0\x5a\x55\xd6\xc7\xca\x28\x65\x12\xcd\x58\x22\x35\x03\x25\x5c\x59\xb4\x79\x38\x61\xc1\x81\x96\xbb\x8a\x4a\xd8\x3d\xf9\xc7\x7d\x9e\xbb\xe7\xb7\xc2\x7f\x00\x00\x00\xff\xff\xe7\x3c\xed\xdc\x2c\x01\x00\x00") + +func testConformanceTestdataOwnersBytes() ([]byte, error) { + return bindataRead( + _testConformanceTestdataOwners, + "test/conformance/testdata/OWNERS", + ) +} + +func testConformanceTestdataOwners() (*asset, error) { + bytes, err := testConformanceTestdataOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/conformance/testdata/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testConformanceTestdataConformanceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x5b\x73\x1c\x37\x92\x30\x0c\xdf\xcf\xaf\x40\xf8\x86\xe3\x27\x9a\x2d\x4a\x3e\xcd\x78\x3e\x7f\x11\x32\x25\xdb\xda\xb5\x25\x8e\x28\xdb\x17\x5e\x87\x1e\x74\x15\x9a\x8d\x61\x75\xa1\xa6\x80\x22\xd5\xfb\xc6\xfb\xdf\xdf\x40\x66\xe2\x54\x87\xee\xea\x23\x29\x8f\x77\x27\x66\xc4\xae\xaa\x44\x22\x33\x91\x48\x24\xf2\x70\xce\x8c\xd0\xa6\xe4\x4b\xf1\x35\xbb\x52\x39\xfb\x51\xce\x45\xb6\xca\x0a\x31\x61\x95\xd2\x86\x69\xc3\x6b\xc3\xc4\x07\x91\xb1\x85\x52\xb7\x7f\x61\x2c\x53\xb9\xc0\xf7\xcf\x7e\xbb\xfd\x9b\x9e\x4a\xf5\x3b\xbb\x54\xa5\xe1\xb2\x14\x75\xf8\x9e\xfd\xa0\xd4\x2d\xbb\x5f\x88\x92\x65\xb5\xe0\x46\x30\xce\x2a\x95\xb3\x7b\x69\x16\xac\xf0\x6f\x11\x50\xc6\xf4\x42\x35\x45\x0e\x23\x35\x46\xc0\xe0\xad\xb1\x59\x55\xab\x4a\xd4\xc5\x8a\xfd\xf6\x5a\xe5\xe2\x52\x95\x73\x55\x2f\x79\x99\x89\xdf\xd9\x6f\xf1\x5f\x67\x7f\x61\x2c\x17\x3a\xab\x65\x65\xa4\x2a\xbf\x66\xbf\x5a\x2c\x78\x3c\xa1\x05\x2f\xf3\x42\xd4\x4c\x6a\xa6\x2b\x91\xc9\xb9\x14\x39\x93\x25\x33\x0b\xc1\x32\x3f\x99\x80\x66\xa3\x65\x79\x03\x78\x72\x76\xf6\xf2\x83\xc8\xce\x18\xcf\x2c\xf0\x89\xfd\x04\xbf\x73\x30\x7f\xfa\xf9\xfa\x1d\x9b\x09\x26\xcb\x3b\x75\x2b\x72\xc6\xe7\x46\xd4\xf0\x06\x8e\xad\xe6\xe9\x30\x53\x80\xfb\x9c\x69\x51\xdf\x89\x1a\x88\x24\x35\x11\x2d\x67\x66\xc1\x0d\xbb\x97\x45\x81\xcf\xd9\xc2\x98\x8a\xd5\xe2\xdf\x8d\xd0\x46\x4f\x02\x6d\xb5\xc8\x54\x99\x7b\x12\x13\xae\x7d\x73\xc1\x09\xaf\x64\x79\x93\xd2\x04\x46\x42\xa4\x35\xa2\x1b\x10\x0a\xf3\xb7\x93\x7f\x0e\x53\x67\x46\xb1\x3b\x5e\xc8\xdc\x22\x00\x1f\xdb\x8f\x22\x80\x52\x3b\x76\xe6\x76\x8e\xb5\x28\x04\xd7\xe2\x6b\x76\xf7\x74\xfa\xf7\xbf\x30\x36\x97\x85\xf8\x1a\xc4\xef\x89\x78\x26\x9e\x64\x6a\xb9\x54\xe5\x13\x8f\xe7\x7b\xcb\xf3\xe9\x8d\xfa\xcb\x38\x11\x05\xba\x3c\x90\x88\xfa\xb1\x1f\x8b\x88\xfe\x60\x4c\xf5\xbd\x30\xff\x59\x32\x1a\x89\x23\x40\x7e\x20\x91\xac\x85\x36\xaa\x7a\x08\x95\xd9\x1e\x79\x7f\x69\xac\xc5\x39\x80\x3c\xa5\xba\x9c\x89\xb9\xaa\x45\x0b\xb4\xd4\xcc\x88\x7a\x29\x4b\x4e\x9c\x7b\x38\x61\x74\x34\x39\x90\xba\x74\xe0\x4e\x27\x99\x0f\xa0\x29\xdb\x23\x3f\x12\xc9\x24\x35\xf9\x1f\x26\x9c\xc3\x7a\xf2\x88\xb2\x18\x84\xea\x6d\x53\x1a\xb9\x14\x13\xf6\x8e\x68\x26\x55\xf9\x93\xd0\x9a\xdf\x88\x09\x9b\xd7\x6a\xc9\x0a\x75\xc3\x54\x63\xaa\x06\xf6\x21\xdd\x64\x99\x10\xb9\x9d\xa0\x9f\xff\x46\xc9\xa5\x41\xd8\xac\xe0\xd9\xed\x4c\x7d\x00\x4c\x98\x5d\x84\x9e\x51\x11\x35\x51\x5c\x81\x18\xb5\xa8\x94\xdd\x67\x02\x6e\x6c\x89\xc8\xb1\xdf\x7e\x94\x65\xf3\xe1\x4d\x59\xac\x7e\x67\x5c\x33\xb1\xac\xcc\x0a\xd7\x84\xa5\x2a\xa1\xa9\x19\x2f\xf3\x9e\xa9\x5d\xa9\x42\x66\x2b\x18\xe2\x3b\x5e\x14\x33\x9e\xdd\xbe\x53\x3f\xaa\x1b\xfd\xa6\x7c\x59\xd7\x0a\x05\x58\x98\xad\xd7\xc3\xd9\x65\x67\x3d\xf2\x32\xda\xb7\x03\x4d\xce\xce\xb4\xa3\xaa\xd4\xac\x16\x99\xaa\x73\x58\x2b\x80\x94\xa5\xb9\xc5\x3c\x10\x45\x7c\x90\x46\xe3\xb4\xb4\x9e\x37\x45\xb1\x02\xf0\xaa\x31\x76\x04\x61\x91\x9e\xe2\x72\x1c\x58\x09\x13\x94\xae\x0e\x29\x70\x51\x2d\xf8\x9d\x60\xa5\x82\x8f\x45\x69\x2c\x45\x23\x86\x20\x31\xa7\x31\xcd\xbf\x66\x97\xbc\x2c\x95\x01\xa8\x4b\xd5\x94\x06\x04\x51\xdb\xd5\xfe\xab\x2c\x73\x75\xaf\xc3\x64\xf5\xf4\xac\x25\xb8\x4f\xbf\x18\x94\xdc\x1a\x85\x65\x1f\x91\xb5\x80\x1f\xad\xb0\x06\x0c\xff\x28\xd2\xca\x71\x3a\x16\xf9\x54\x15\xef\x26\xb4\x89\xa0\x8a\x7c\x32\x28\xb4\x4b\x6e\xb2\x05\xe2\xed\xc6\xb5\xb2\xeb\x09\x9c\x0a\x2c\x80\x45\xa1\x7d\x74\x02\xeb\xa7\x7f\xa6\x53\x7d\x0b\x48\xcf\xb9\x2c\x1e\xa1\x0c\x47\x88\xca\xf9\x47\x28\xb6\x43\x4a\xd6\x41\x1c\xa3\x54\x63\x4a\xa1\x2a\xec\x0a\xa8\x95\x4d\xf1\xa1\x12\x99\xa5\x3a\xa1\xe3\x71\x69\xb1\x1f\xf9\xff\x11\x08\xee\x15\x37\x8b\x09\x2b\x55\x79\x5e\x2b\x65\x58\xa3\x45\x0d\xc4\xb4\xbf\xe4\x62\xce\x9b\x02\xb7\x86\x8a\x83\xbd\xf4\xb0\xe2\xda\x2f\x9e\xdc\x2c\x9c\x08\x72\xed\xa7\x02\x70\xfd\x74\xb8\x61\x3c\x9e\x13\xcc\xe7\x20\x12\x1b\x4d\xc8\x28\x56\x37\x25\x93\x80\x07\x6f\x11\x15\xdf\x06\xac\xb2\x46\x1b\xb5\x1c\x9a\x8a\x16\x66\x0a\x87\x8c\x5a\xe4\xb2\x16\x99\x41\x53\x93\x04\xce\x28\x32\x2a\xd5\x9d\xb4\x72\x47\x7c\x61\x89\x76\x26\x61\x5f\x63\x4f\x83\x51\xde\x4b\xef\x20\xf0\x64\xc6\x76\x85\xbe\x50\x37\x37\xe1\x3c\xe0\x51\xa1\x69\x59\x8c\x5a\x26\xc6\x3b\x0e\x1f\xf8\x9f\x00\x72\xde\x08\x3b\x9b\x46\xc3\x16\x7f\x76\xd6\xc8\xfc\xec\x0c\x98\xd5\x94\x7c\x56\xc0\xc3\x07\x5a\x26\x6f\x05\xfa\x35\x50\xf3\x4d\x80\x1b\x57\x0b\xae\x85\xde\x71\x09\x80\x85\x00\x30\xf1\x44\x11\xc9\xcc\x82\xa3\xa8\xd2\x1e\x8b\x47\x3c\x2b\x46\x7e\x3f\xf4\xe4\xd7\x86\x9b\x46\x6f\x2d\xb5\xaf\xd0\xeb\x54\xd3\xa4\x2a\x98\x94\x5b\x31\x46\xb1\xb3\xe7\xc5\x3d\x5f\xe9\x33\x9c\xa7\x3b\x9b\xd1\xeb\x22\x07\xe4\x3b\x7b\xf9\xab\x79\x0f\xc0\xb3\x37\xe5\x77\x5c\x16\x4d\x2d\x5a\xc0\x1c\x28\x55\x16\x2b\xbb\x8a\xa5\xe9\xda\x07\x38\x61\xbb\x68\xfe\x57\xd4\x0a\xe8\x01\xb4\x9e\x0e\x4f\xe0\xec\xb5\xb8\x13\x75\x34\x16\x80\x2c\xed\x8f\xc9\x14\xa6\xec\x79\x51\x58\x18\xda\x1e\x32\x6b\x21\x90\x2b\x99\xe5\x28\xe2\x78\x27\x6a\x39\x5f\x25\xc3\x64\x56\xf6\x10\x49\x9e\x59\x2d\x2f\xcb\x9b\x62\xd5\x3e\xb9\x3d\xfd\x6c\x5b\x79\x7b\xa1\xb2\x5b\x51\x07\x11\xd0\x13\xd2\x0d\xf5\x4d\xb3\x14\x38\x64\x9f\x8c\xd1\x77\x41\xf6\x9d\xb0\xcc\x04\x73\xeb\x45\xdd\x89\xba\x96\x39\x1e\xa5\xe5\x92\xdf\x08\xbb\x13\xc5\x7a\xdc\x8f\xc2\xfe\x9a\x13\x22\xcb\xfc\xd3\xad\x65\xea\x05\xa9\x51\x3b\x55\xd0\xaf\x65\xce\x70\x0f\xb4\x23\x13\x64\x40\x80\x89\xd2\xd4\xab\x4a\xc9\xd2\x78\x71\x68\xb4\x40\xbd\x0f\xeb\xc2\x32\x2f\x57\xc2\xaa\x6e\xe3\x0e\xde\x2d\xdd\xe5\x86\x99\x35\x78\xa6\x0e\xb3\x80\x31\x2d\x04\xfb\x21\xc0\x84\x41\x3c\x21\x70\xe5\x39\x1f\xc6\xf8\x73\x37\x4e\xe1\x7d\xe0\xd2\x58\x36\x12\xaa\x47\x65\xa2\x23\x87\x63\x61\x20\xf1\xfe\x9c\x1c\xc7\xc4\xd7\x6f\x3c\x23\x83\x7e\x70\x6c\xb0\xa4\xd6\xfd\x1c\x9c\x32\x76\x19\x0f\xe4\x3e\x69\x71\xcd\x2c\x44\x32\x51\xda\x6a\x00\x97\xd3\xf1\x10\x2d\x87\x93\x2c\xcb\xde\x11\x0f\xb2\x2a\x5b\x4b\x65\x13\x67\x01\x9b\x36\x77\xc7\x70\x36\x1d\x2c\xe2\x33\x2e\x06\x36\xb4\x66\xbb\x9c\x1f\x40\xff\xb4\x32\x60\xcf\xb6\x07\x11\x83\x46\x47\x6c\x77\x3c\xd7\x76\x13\xcc\xba\x04\xd2\x8c\xd7\x60\x3b\x94\xb7\x0f\xc6\xfc\x0e\xe3\xc7\xe9\xe6\xc3\x71\x44\x96\xd2\x9c\xfb\xc7\xe7\xb0\x1b\xeb\x73\x5e\x55\xe7\xb4\x35\x73\xb0\x57\xce\x2b\x35\xa4\x65\x5f\x95\xd2\x04\x93\xac\x4b\x48\x62\x0d\x7a\x72\x61\xbc\x88\xff\x40\x04\x55\x32\xee\xcc\x40\x34\x8f\xc0\xe4\x5f\xcf\x81\x97\xa5\x6e\x6a\xba\x85\xe0\x45\x91\xa2\x81\xac\x75\x86\x10\x30\xa7\x28\xa2\x61\xad\x7c\xe3\x8c\x58\xfa\x96\x61\x96\xaa\xf6\x18\xd5\xb2\xe6\xb5\x91\x45\x61\x4d\xc5\xd2\x1a\x95\x78\x0e\x0f\x36\xb9\x3d\x0c\x58\xc3\x7a\x26\x9c\x6b\x3e\xb5\xe8\x80\xb5\x0b\xae\xdb\x66\x15\xd7\xe9\xbc\x3b\x06\xcf\xb3\x41\xce\x5a\x42\x06\xbe\x6e\xcd\x56\xb0\xdb\x4e\xc6\x55\x30\x1d\x4f\xc9\x54\xfb\xe6\x9d\x2a\x9a\xd2\xf0\x5a\x16\xab\x8e\xe5\x0b\x06\x2f\x99\xf8\x17\x13\xef\x85\xd3\x2b\x6d\xc4\xd2\xf2\xd6\x2e\xc1\x1b\x65\x79\x6d\x54\xcc\x50\xc6\xcb\x15\x5d\x2d\x6b\x11\x0f\x3e\x8e\xcd\x40\x88\x63\x71\x79\xce\x65\xa1\xe1\xfa\xe3\x18\xac\x06\xa5\x84\x24\xa8\xaa\x36\xb3\xc1\xc6\xe0\xb2\xa0\xcb\xea\x1c\xce\x1d\xa9\x50\xe0\xf3\xbd\xa5\x22\x1e\xdb\x31\x2a\x59\x6a\xc9\x1a\x4e\xe6\xe6\xfd\x82\xda\xda\x09\x8e\x9d\xf9\xe3\xe4\xda\xa1\xf4\xee\x5a\xb6\x8d\xe1\xd2\x6e\x1a\x79\x33\x9b\xba\xcb\xdb\x0e\x4d\x67\x95\x75\xfc\x11\x39\x9b\xab\x9a\xcd\xc5\x3d\x53\x59\xd6\xd4\xb5\x28\x33\x81\xd7\x00\x55\x2f\x27\x51\x42\x8f\xa5\x6a\xff\xbb\x99\x89\x42\x98\x09\x5b\x28\x6d\x9e\x17\x72\x8d\xe7\x82\x5e\xa5\x73\x52\xb6\x10\x79\x53\xa0\x8f\x62\xd6\xe8\xd5\x4c\x7d\x80\xa9\x82\x82\x8a\x80\xc5\xbe\xbb\xfb\x5a\x1a\xb4\x24\xc0\x36\x54\xec\x89\x30\xd9\x13\xfb\xb2\x4e\x9c\x77\xdb\xda\x33\xde\xd7\xd6\x8b\x00\xe8\xda\x88\x9f\x89\xdd\x6e\x4d\x6e\x70\x55\x01\x82\x11\x3e\x84\x25\xf8\xd7\xd0\x45\xab\xa3\x7b\x33\xf0\x7a\xd9\xc9\xbb\xc9\xa8\x79\x74\xfd\x9d\xd2\x92\x39\x4f\x5c\xb8\x52\xed\x1b\xc7\x92\xb7\x2e\x85\x11\x1a\x7d\x59\x68\x3c\x47\x6f\xc2\x8d\x8b\x2c\x49\xa3\x4b\xa3\x13\x4b\x74\xa1\xee\xed\x3a\x9f\xe0\xc7\x16\x35\x59\xe6\xf2\x4e\xe6\x0d\x2f\x9c\x5b\x8c\x04\xb9\xa9\x2a\x45\x3e\x16\xe7\x27\x43\x87\x73\xb0\xb3\xd8\x77\xaa\x66\x66\x01\x2e\x74\xae\xf1\x66\x1e\xbc\x82\x1a\xfc\xea\x4b\x5e\xdf\xc6\x5e\xba\x2d\x5c\x1d\xb7\x28\x45\x83\x72\x18\xae\x18\x26\xd1\xb1\x67\x37\x79\x8c\xce\x84\xe8\x87\x25\xad\x52\xd5\xb2\x34\xde\x67\x19\xdc\xa5\xc0\xe4\x6d\x85\xef\xdb\x95\xc3\x93\xc2\xb7\x72\xbc\xec\xca\xed\x3f\x45\x5d\x07\x7b\xda\x99\x5a\x60\x67\xf9\x0b\xfe\x70\xa5\x56\xc5\x6e\x30\x51\x06\x0f\xae\x97\xc0\x03\xd2\x19\xd5\x95\x85\x6d\xe9\x5c\x08\x88\x45\xd8\x8f\xcc\x64\xf8\x80\xc2\x85\x7d\x01\x05\xb5\x45\xfc\x19\xc4\x83\x69\x49\x07\x5e\x1c\xfb\x00\x4b\x3e\x32\x92\xac\x69\x24\xa6\xec\xdd\x22\x71\x64\x27\xf4\xb5\xe7\x6d\xb7\x36\x67\x82\xb0\xe8\x38\x7d\x0e\x44\xdf\x08\x07\x5c\x4e\x27\x22\x35\xa8\x2a\x5e\x76\xc7\x3f\x0a\xb9\xbd\x17\x17\x86\x05\xff\x6d\x72\x10\x99\xa6\x4a\x26\x0a\xed\xe9\x00\x83\xe5\x13\x60\xf5\x4d\xe1\x80\xac\xf2\x37\x34\xb5\xe0\xe4\x78\x86\xcb\x18\x50\xb8\x68\x54\x6f\xcd\xb0\x00\x2a\xb0\xae\xe7\x36\xcb\xea\x63\xdc\x15\x8d\x0a\x83\x92\x21\x7f\xd8\x2d\x51\x8b\xac\xa9\xa5\x59\xe1\xa5\xf9\x07\x03\x3e\x7d\x78\xf2\x56\xf0\xdc\x8e\xf2\x56\x29\xf3\x9d\x2c\xc4\xb5\x9b\x32\x73\x7e\x7f\x53\x37\xb0\x9e\x04\x80\xc3\x20\x2d\xb7\x87\x7b\xf4\x61\xbb\xc2\x38\x0c\x3c\x5a\xda\xf9\x4c\xe8\xb9\xaa\x44\x1d\xae\x4c\xe9\xed\xf6\x84\x81\xe3\x60\xc2\x71\xed\xef\x32\xfc\x3a\xee\xdf\x7a\x98\x96\x65\x86\x4b\xd9\xdd\xf9\x04\x2f\x04\xee\x74\x18\xd5\x95\x5c\xa7\xeb\xc0\xf0\x73\xe0\x12\x87\x2b\xb1\x03\x0a\xd5\x92\x97\xfc\x46\xe4\x4c\x98\x0c\xec\x81\x0d\x56\xd5\x4f\xf8\xfa\x4b\x93\xfd\x00\x9b\x3d\xad\x60\x98\x35\x0d\xe5\x41\x06\x9b\x00\xcf\x04\x96\xe4\x87\x95\x95\x36\x9d\xec\x60\xaf\x85\xb9\x57\xf5\xad\x13\x89\x39\x2f\xb4\x98\xc0\x0a\xa7\x98\x85\xc4\xd7\xb3\xd6\x88\xb1\xa8\x60\x94\x9f\xd2\x66\x1a\xc6\xa7\xa0\xbb\xab\x38\xe8\xae\x67\x68\x94\xc6\xa7\x41\x20\xdb\x38\x7e\x03\xc8\x45\x0a\xa4\x45\x31\x35\x4f\x10\x25\xb2\xce\xd0\x5d\x45\x0c\x99\xb2\x67\x1b\x07\xa0\x3b\x06\x72\xcb\xba\xe5\x4d\x13\xef\x4c\xda\x99\x01\x38\xe9\x77\x3d\x74\x01\x84\xad\xe0\xce\x10\xe6\x10\x66\x9f\xad\xc1\xcc\x12\x87\x4d\x7a\x41\x7b\x8d\x33\x13\x83\xa0\x47\xac\x35\xbf\xce\xb2\x76\x38\x58\xd7\xe2\x2c\x63\xa3\x72\xb4\xdf\x8f\x04\xfe\xbd\x30\xd9\x7b\x98\x43\x7b\x95\x01\x10\xf6\xfc\xea\x55\xec\x41\xbf\xe3\xb2\xa0\x6d\xbd\x6f\xa1\xfd\x08\xdf\xac\xfd\x72\xc3\x3a\xf9\x84\x04\x15\x21\xa9\xd9\xbf\x44\x66\xd0\xfb\x72\x23\x0c\x93\xe6\x1f\x3e\x7c\x94\x7e\xf2\xc6\x9c\xbf\x70\xf7\xee\x86\xeb\x4a\x64\x2e\xc8\x1f\xf6\x0a\x04\x1a\xc5\x90\xb8\x37\x54\x2d\x6f\x64\xc9\x0b\x7c\x63\xca\x7e\xae\x28\x80\x99\x10\xf1\x20\x1d\x12\x0d\xbe\x30\x8c\xc4\xff\x98\x0d\x18\x90\xf0\xc5\x58\x20\xd0\xdc\x21\x71\xe5\xc3\x5c\xf0\xab\x78\xfc\x0a\x9e\xb5\x86\x6f\x05\x1e\x6c\x49\x03\x00\x19\x46\x47\x3e\x90\xd5\x4c\x4a\x03\xbf\xc5\x78\x68\x3e\x13\x05\x9e\xfb\x0a\xa9\x0d\x3e\xd2\x09\x77\xe0\xf7\x35\xec\x09\xcf\x6b\x61\x9a\xba\x64\x33\x65\x01\x03\xa0\x29\x7b\x81\x36\xab\xc5\x9b\xc6\x42\xb1\xba\x93\xdc\xd9\xb3\x99\x2a\x0a\x01\x41\xcd\xff\xf0\xca\x91\x1e\x75\x87\x0d\xe6\x0e\xbd\x02\x5b\x52\x1b\xfc\x94\xfd\x68\xb1\x42\x24\x10\xea\xc0\x34\x02\x3c\xc2\xfe\x5f\x8d\x36\x44\xe6\x25\x97\xe0\x04\x26\x90\xf1\x54\xec\x2f\x08\x77\x10\xd3\x29\xfb\x5e\x98\xe8\xed\xc0\x62\x1a\xc9\xaa\x97\xb9\x6a\xca\x9c\x62\xa9\x3e\x69\xef\xa8\x5f\x0d\xc7\x2f\x03\x46\xdd\x10\x7a\x3d\x61\xcf\x33\x23\xef\xc4\x0b\xc1\xf3\x42\x96\xe2\x1a\x38\x3e\xb4\xa1\xda\x2f\xdc\xe2\xe6\x45\xa1\xee\x21\xb8\xbc\xf3\x35\x19\xfe\x4e\xae\x3b\x7b\x26\xd0\x61\xdb\x7d\x93\xb3\xa6\x94\xff\x6e\x88\x6f\x53\xf6\xcf\x46\xd4\x2b\xf0\xf7\x98\x58\x5f\x7b\xce\x3a\xdf\x8e\x16\x56\x58\x54\xdd\x4b\x71\xa7\xea\xa5\xf6\xd8\x02\x94\x21\xa2\xa0\xd5\x46\x36\x98\xbb\x3b\x8b\xcc\x73\x6f\x4a\xbb\xb5\x17\x1c\x17\x10\x8f\x22\x0a\x5e\x59\x31\x1f\xad\xae\x2b\x95\x77\x34\x34\xf2\xcd\x87\xa4\x8f\xe0\x15\xcc\x7a\xb6\x94\xc6\xf9\xc7\x6b\xb1\x54\x77\x7d\xac\xd9\xc0\x96\xe7\x8e\x5a\x2e\xe6\xbf\x97\x35\x71\xcc\x09\x1a\x7f\x70\x22\x05\x4b\xfe\xdf\x8d\xa8\x25\xf9\xf2\x20\x5f\x21\x70\x2c\xb0\xaa\xa9\x14\x25\x63\x48\x55\x4e\xd9\xf3\x3c\x67\x9c\xdd\x5b\x45\x35\x61\xd9\x42\x64\xb7\x4c\xce\x3d\x0b\xa4\x76\xb7\x2f\x53\x7f\xff\x0d\x66\x34\x1d\x3c\x27\xc0\x65\x7b\x10\x81\x1f\x20\x5b\x45\x2e\x85\x36\x7c\x09\xd9\x00\x6a\x06\xf9\x03\x39\x4a\x03\x8c\x12\x2f\x3b\xaf\x62\x3c\x04\x6b\x79\xde\x89\xd2\x38\x19\xf4\x72\xe7\xb7\x13\x3f\x91\x58\x3c\xdb\x30\x31\xc6\xde\xaa\x99\x43\x88\x03\x8a\xef\x38\x59\x18\x5c\x98\x8f\x63\x51\x46\xbb\x30\xa5\x74\x64\x0b\x5e\xde\xe0\x2f\x77\xbc\x68\xfc\xea\xfa\x11\x46\x05\xa0\x6b\x46\x2e\xc5\x3d\x7d\xe6\x1e\xa3\xb8\xf5\x8c\xbd\x35\x23\x18\x9b\x89\x05\xbf\x93\xaa\xd6\x5f\xff\x85\xb1\x73\x8b\xf1\x13\xbb\xe8\x9f\xc0\x18\x4f\x32\xb7\x9d\x76\x9e\xc0\xbe\xdb\xc3\x48\x2b\x8c\x32\x13\x4c\x94\x77\xb2\x56\xe5\x52\x94\x86\xdd\xf1\x5a\x5a\x23\x6a\x8c\x5e\x26\x63\xb9\xff\x7b\xa0\x00\x8d\xd0\xe3\x8e\xdb\x46\x31\x53\xd2\x8d\xa5\xb4\x95\x61\x81\xd7\x9f\x25\x83\x53\xe1\xdf\x3f\xfb\xea\xcb\x29\x7b\xce\xae\x69\x32\x19\x2f\x0a\xf0\xce\x2b\x1a\x1c\x7d\x2a\x41\x8f\x38\xce\xac\x85\xfa\xb7\xaf\xbe\xfc\x82\x19\x5e\xdf\x08\x38\x71\xe2\x6f\x17\x7f\xbb\x80\xd8\x34\x4e\x51\x67\xf7\x6d\x15\xe5\x12\xa6\x8a\x46\x53\x1e\x68\x99\xae\x49\x38\xc6\xd8\x5f\x02\x7a\x31\xf5\x00\x6e\xa0\x60\xb0\x68\xe9\xd4\x21\xb5\x1b\x15\x35\x88\xfd\x83\xcc\xa1\x74\x88\x61\x98\xba\xb1\x56\x9d\x66\xdf\xbd\x79\x73\xfd\xf2\xed\x2f\xaf\x2e\x5f\xbe\x77\xff\xfb\xc3\x9b\xeb\x77\x93\xbe\x07\x57\x6f\xde\xa6\x0f\xe0\x07\x8c\x0f\x4f\x7f\x7c\x6f\xe9\xf6\xfe\xdd\xe5\x55\xff\x37\xd1\xe3\xb7\x6f\xde\xbd\x19\x7e\xee\x2d\xb8\x41\x00\xcf\x5f\xbc\x78\x4b\xfe\xb3\xda\x2e\xde\xaa\x29\xc2\x2e\x81\x69\x71\xb8\x12\x0f\xb2\x03\x92\x25\xc5\x23\x83\x70\xc4\xfa\xe8\xf9\x0a\xcc\x60\xfb\xca\xa6\xcd\x0f\x36\x7f\x7a\xb7\xbb\x09\xb6\x36\xb1\xfb\x85\x74\x3b\xc9\x4c\xa0\xe1\x16\xa2\xed\x40\xb8\x49\x60\x5a\x50\xdd\x1e\xe3\x0d\xcd\xd7\x6f\xde\x59\xe4\xef\x59\x53\xc5\x1f\xdb\xf3\xa5\xa4\x53\x77\x3a\x74\xc7\xd5\xb2\x0b\x75\xb9\xd6\xf2\xa6\xa4\x1b\x17\x59\x8d\xa0\xac\xb5\x57\x39\xbc\xce\x5e\x5d\xed\xb5\xb9\xa0\x09\x41\xb7\xf0\xb1\x09\x9c\x24\xbf\x44\xd9\x06\x9a\x71\xcc\xfb\x03\x6a\xbc\xba\x62\x3c\xcf\xeb\x1e\xa7\xd3\x2e\x84\xb0\xb6\x92\x09\xe1\x50\x78\xb7\x00\x52\x63\x35\xd5\xbd\x98\x69\x95\xdd\x8a\xa1\x9b\x94\x98\x40\xce\x67\x36\x12\x22\xb2\x76\x5f\x13\x6d\xca\x7e\x75\x00\x93\x64\x4d\x65\x69\x5a\x4b\x61\x15\xd3\x07\x91\x79\x6c\xa2\x2b\xbb\xa0\xe0\x2a\xcb\x13\x97\x2d\xe4\xbe\xcb\xd1\xd9\x14\xc0\xb7\xd3\x88\x7c\xc8\xb4\x1d\x20\x09\xb0\xc3\x41\xb6\x70\x09\xae\xb1\x83\xd5\x0d\xc5\x55\x25\x84\x1b\xcf\x0b\x98\x0c\x1c\xdb\x3c\xa4\x34\xb4\xca\x72\x05\x57\xae\x1f\xe0\x14\x5c\x81\xdb\xba\x79\x7c\xbd\x7a\x10\xa6\xc4\xc9\x51\x87\x62\x03\x2b\xe4\x9d\x28\x85\xd6\x56\xc9\xcf\xc4\x84\x2c\x7b\x48\x00\x16\x65\x0e\xa1\x6d\x78\x6d\xd3\xd4\x83\x36\x6a\xad\x66\x89\x1f\xd9\x71\xea\xff\x94\xca\xfc\x9f\x56\x2c\x3c\x2a\xdc\x27\x0b\xc1\x0b\xb3\xf8\x5f\x74\x66\xda\xc1\x52\x3c\x0e\x74\xbc\x69\x01\x55\x65\x3a\x31\x76\xf6\xe4\x6c\xca\x7e\xa4\x97\x30\x4d\xc7\xbd\x08\x7c\xf2\x2f\x42\x6e\x34\x9c\xe2\xb9\x2c\x28\x3b\xa4\x05\xdc\xfb\xd7\x5d\xcc\x4c\xe9\xbd\xa0\x49\x44\xbc\xd3\x8a\x4b\x6b\xea\xfd\xaf\xa8\xd5\x78\x4d\xe7\x09\xfc\x1e\x86\x1c\xcf\xce\x42\x65\xe4\x7d\x9c\xb0\x52\x39\x7c\x0e\xc7\x4e\x50\x43\x9f\x64\x94\x89\xf1\xc4\x2c\x2b\x62\xf0\x27\xfb\xf2\x75\x04\x57\xc1\x6a\x69\xb4\xd0\xec\x4c\x40\x4d\x87\x28\x8a\x21\xa0\x24\x3c\x4e\x94\x12\xf9\x63\x0a\xc5\x7b\x99\x91\x7d\x8a\x4e\xab\xf4\x89\x0b\x26\x0b\x94\x63\xc4\x4d\x97\x70\x82\xfc\xbc\x38\x01\x33\x4d\x56\x31\xd4\x10\xc7\x61\xa6\xc9\xaa\xaf\xad\x6d\x4e\xbe\xb4\x93\x2c\xcb\x30\x27\x3a\x16\x58\xeb\x0a\xeb\x32\x60\xc9\x03\x17\x7e\xe8\x4f\x0e\xb8\x24\xc9\xb8\xc0\x55\x5d\xd7\xaa\xd6\x54\x33\xe6\xe9\x05\xb9\x40\xf5\xc4\x27\x3d\xd0\x00\xf4\xa1\xe5\x17\x42\xad\x44\xb9\x9f\x38\x24\xa2\x40\x2b\xbe\x5f\x1c\x9e\xfe\xed\xf0\xf2\xd0\xd2\xd5\x3b\xca\xc3\x3a\x2d\x9d\x6a\xe8\x48\x4f\x9e\x46\x4b\x3b\x34\x40\x2a\xc2\x8e\xe1\x8a\x61\x90\x4f\xcf\x23\x1b\x0b\x06\x8f\x44\xa3\x23\x19\x74\x71\xe3\xb4\x34\xa1\xe6\x53\x9e\xe0\xd2\x87\x94\xb5\x6e\x0a\x63\x8f\xa3\x1e\x55\x14\x07\xda\x17\x83\x37\x92\xc4\xe6\xde\xf9\xf6\x6f\x25\x9c\x9e\xd1\x71\xe7\xa8\x2b\xcb\xac\x16\xf6\x2c\x69\x19\x91\x8a\x90\x51\xec\xe9\x89\xf7\x83\x03\xca\x8b\xdf\x06\x92\x2d\xe0\x10\x7a\xa4\xeb\xbf\x1a\xdc\x04\xa2\xd2\x36\x4e\x42\xd6\x6f\x04\x96\x77\x21\xfe\x02\xcf\x70\x78\x43\x0b\x77\x84\xc9\x17\x2d\x11\xa2\x5a\x12\xb5\xbc\xb9\x11\x35\x10\xb6\x85\x95\x22\x83\xa1\x47\x3e\x36\xcb\x46\x8f\xed\x70\x22\xf9\x68\xa9\x94\x65\x53\x18\x59\x15\x9e\xe3\x9a\xfd\x55\x17\xea\xfe\xd3\x6d\x65\x06\x83\x04\x55\xa9\x8c\x2a\x65\xc6\xed\x49\x10\xe6\xcb\x75\xb4\x12\xa2\xbd\xf5\x4f\xf5\x72\x0c\xf5\x02\xd0\x5a\x44\x59\x36\xda\xf8\x50\x6a\xc6\x6f\xec\xe6\x85\xf3\x71\x00\x14\xcd\x25\x25\xce\x5c\xd5\x81\x32\xa2\xb4\x04\xcd\xa3\x4b\x16\x92\x60\x4b\x2b\xcd\x78\xb9\x96\x5a\xfe\xf8\x06\xe3\x4d\x7d\x0e\x31\xa6\x91\xe2\xd4\xfd\xd4\xd0\x0d\x7f\x27\xea\x15\x5c\xce\xd0\xea\x0c\x54\xd3\x13\xb6\x14\x1c\x62\x97\x9b\xca\x28\xf6\x85\x9b\xc7\x41\x17\x4f\x2d\x78\x2e\xe3\xd5\x03\xf2\x26\x4b\x69\x24\x2f\xac\x26\xe1\xab\xd1\x4b\xc4\x47\xde\x44\x00\xe3\x78\xef\x19\xde\x06\xaf\xa8\xd6\x13\x45\xb6\x45\x23\x61\xd5\x01\x08\xbf\x77\x3c\xdb\x4b\xcb\x62\xad\x26\x08\xa7\x9d\xcb\x9b\xa6\x0e\x6a\x3e\x1d\x36\xba\x56\xf3\xe8\x07\x13\x61\xca\x2e\x81\x29\xce\x6d\x7b\x8d\xf5\xf2\x2c\xd3\xac\x56\x56\xcb\x8a\xd7\x3e\x4e\x2a\x01\x9c\x4a\xbd\xcb\xac\x42\x1a\x60\x70\x52\x28\x0e\x18\x95\xd8\x8a\x21\x1c\x95\xd7\xdb\x9e\x89\x7b\x19\x0c\x44\xc6\xf4\x05\xc7\x6b\xe1\x7c\x16\x7e\xb6\x07\x66\x2c\x71\x71\x0d\x2a\x99\x2a\x35\xb8\xf0\x4d\x54\x0a\x81\xf2\xcd\x53\x0d\x3b\xe9\x71\xca\x47\xe9\xe3\x3c\x5f\x4d\xa2\xbf\x29\xd3\x2a\x52\x57\x91\xb2\x77\xee\xd6\x83\x1e\x89\xaf\x5d\x78\xdf\x25\x86\xf7\x4d\x2c\x12\xcf\xf5\xcf\x5a\xd4\xdf\x7c\xf9\xc5\x17\x9f\x7d\x3e\xc0\xbe\xf6\x77\x54\xfc\xc4\x45\xcc\x75\x02\xe7\x3d\xd4\xe4\x10\xd0\xb4\x4b\x48\xc0\xbb\x8d\xcc\x19\x8c\xbd\x57\x78\xda\xd9\x65\x9c\x8a\x91\x6c\x78\x01\x19\x05\x2f\xb3\xd9\x8a\x55\x5c\xc3\x26\x1b\x06\x77\x39\x50\x4d\xc9\xb8\x66\x4d\x59\xd5\xf2\x4e\x16\x22\xbf\x11\x90\x73\x59\xa7\x97\xc1\xb2\x64\xd7\x58\x9c\x49\xe4\xac\x5a\x40\x94\x44\x5a\xa2\xc2\x85\x48\xb9\xfb\x21\x0a\x93\xe2\x7a\x30\x52\xaa\x13\x91\xe8\x05\x44\xb3\x9f\x5f\xbd\x60\x4f\xd8\xf7\xaf\x5e\x6c\x53\xa0\xc2\x05\x73\xbe\xa7\x60\xce\xcd\xd2\x40\x93\xbe\x11\x39\x06\xaf\x4d\x77\x95\x07\x1f\x2d\x1b\x20\xae\x17\x85\x98\xe6\x37\x2e\x81\x06\x03\xe8\xf6\x13\x0b\xb7\xd4\xbb\x65\x55\xca\x74\xc4\xa5\xca\x85\x15\x0d\x2d\x0c\x5d\xca\xe5\x67\x67\xda\x4f\x95\x66\x8a\x8b\x3e\x7c\x45\x22\xc5\x35\x22\xbb\x83\x94\x50\xd9\x8a\x24\x98\xae\x47\x4a\x24\xc8\x83\x66\x1c\x9f\x9c\x93\x92\xf7\xee\xee\xe3\x0a\x46\xdd\x8a\xfe\xc5\x58\xdc\x43\x09\x49\x3f\x74\x8c\x52\x09\x05\x4c\x7a\x74\xc7\x7d\x2d\x0d\xdc\x60\xd6\x4a\x99\x39\x65\x28\xae\xc3\x75\xa7\x8b\x88\x54\xb5\x84\xfd\x9f\x04\x69\xcd\x14\x7c\x0c\x2c\x5e\xed\xff\x9a\x46\x39\x87\xd0\x92\xa2\x50\xf7\x64\xb8\x0e\xca\x0f\x06\xd0\x1f\x93\xc9\x80\x86\x97\xed\x97\x3a\xe3\x05\xe0\xb9\x25\x9b\xef\x13\x36\xb7\xa3\x84\x9f\x0f\x0c\x12\x73\xdb\x2a\x41\x8c\xca\xf2\xeb\x93\x09\xff\xe6\x68\xdd\x30\x22\x08\xc0\x6e\x1b\xc0\x4e\x17\xbf\x33\x44\x83\x28\x9a\xd9\xeb\x69\x78\x37\x44\xd5\xf4\xa1\xea\x79\x3d\x65\xcf\xd3\x6c\xc1\x8e\x1d\xb9\x96\xf8\xfe\xc6\x9a\xb3\x1b\x7b\x54\x81\x8d\xeb\xaf\x4f\x2f\x2e\x2e\x3e\xa5\xeb\x59\xca\xdb\xba\x18\xaa\xd5\x54\x37\xe5\x24\x29\x28\x86\xce\x3e\x4c\x6b\x1a\xbc\xef\xa2\xe7\x58\xce\x26\x35\xe0\x6a\x4e\xa2\xef\x11\xc2\xad\x6e\x2a\xa6\xf6\x8f\x6f\x2c\x72\x43\x9b\xe2\x88\xb8\x61\x47\x65\x8a\x09\x1d\xde\x11\x27\x4c\xd5\xbd\xc4\x3f\xa4\x46\x7c\xd9\x17\x83\x32\xb1\x74\xe2\xa5\x1e\xbe\xae\xff\x85\x5e\x65\x2f\xdd\x8b\x69\xd0\xa1\x35\xf8\x95\xc6\x14\xc1\x3b\x0b\x58\x43\xee\x1e\x2b\x05\xca\x95\xff\x75\x7f\x0b\xb7\x37\x8a\x66\xda\x3f\x31\x96\x8b\xb9\x2c\x93\xd8\xb6\xaa\x16\x77\x52\x35\xba\x58\xb9\x87\x03\x71\x39\x20\x4a\x40\x17\x50\x90\x3b\xc6\x4a\x78\xc2\x8e\x64\x84\x2f\x52\x41\x05\x2a\xf6\xe6\x8c\x6e\x66\xda\x48\xd3\x80\x0e\x43\xec\x31\x73\xaa\xb3\x84\xa0\xcc\xc6\x91\xf8\xd3\xaa\x43\xd8\x9e\xa5\x4e\x83\x0f\x97\x51\x89\xc3\xee\xbb\x51\x90\xe2\x7a\x16\x86\xaa\x47\x0f\xc6\xc6\xd3\x71\xcf\x8d\x78\x5a\x06\x86\xfa\xd6\x43\x6c\x1b\xcb\xac\x16\xa3\x9c\xa7\xe1\xa0\xcc\xfa\x45\x15\xcd\x52\x5c\x37\xb3\x8a\x9b\xc5\xcb\xf2\xce\x13\x7d\x62\x09\x0d\x95\x0f\x8f\xc6\xb0\x3b\x18\x9b\x36\x01\x1c\xeb\x37\x2d\x6f\xce\xb5\x51\x35\xbf\xd9\xc8\xa6\x9f\xf8\xad\x60\xe0\xf7\xe2\x49\xbc\x80\x83\x95\xf1\x12\x13\x69\x0d\x51\x9c\x97\x61\x2e\x4c\xcd\x87\x43\xdd\xb6\x08\x4d\xda\x87\xb0\x68\x1b\xcc\xb4\x2a\xa0\x44\xfb\x70\xd5\xcc\x61\x0a\x83\x0f\x73\x1b\x02\x77\xc7\x4c\x69\xfe\xdb\x75\xa1\xee\x0f\x41\x79\x72\xe4\x0d\x52\xdf\xed\x81\x3d\x62\x8f\x05\x16\x12\x1c\xa5\x06\x3b\xa1\xe8\xa9\xcb\x76\x4c\xe6\xcc\x78\x76\x6b\x64\x76\x3b\x14\xab\x73\x68\xc6\xf8\xf1\x1e\x29\x53\x02\x7e\x50\xcb\xe6\xb4\x1c\xc1\xea\x98\xf6\x98\xb5\x3d\x3b\xa8\xda\xb6\xa5\xbe\x85\x60\xa7\x4e\x60\x81\x23\x69\xf0\xd2\xf6\xb4\xff\xe4\x17\x57\x13\x12\x8a\xc7\x76\x34\xa7\xd3\x45\x50\x2c\xcb\xa7\xcc\xba\x14\x39\xa3\x3c\x32\x78\x96\x7c\x3a\xfd\x1f\x03\x81\x82\xee\x77\xf1\xa1\xaa\x19\xdd\x47\xc5\xee\x0e\x67\x33\x3f\x9b\xfe\x8f\x01\xf2\xcc\x55\xcd\x92\x2f\x03\xc1\x18\xfb\x6c\xfa\x3f\x26\xca\x11\x4a\x74\x21\xf8\x96\xa3\xc1\xa4\x2e\xcf\x0c\xf4\x45\x90\x35\x45\x3e\xa3\xd0\xb2\xac\x10\xbc\x6c\xaa\x4e\x5e\xcf\x71\x98\x8e\x6e\x61\x2c\xef\x8d\x09\xf5\x70\x56\xde\x5a\x00\xee\x12\x06\xb9\xea\xda\x7d\x5b\x1c\x73\xcc\x5a\xaa\x1c\x3d\xed\x79\x38\x42\x86\xae\x0f\x69\xd0\xdb\x0e\x32\xf3\xcb\x38\x8c\xd6\x60\x43\xb7\xcd\xfd\x18\x1d\x62\x51\x5a\xfb\x07\x92\x48\xf4\xc4\x11\x10\xfe\x44\x7e\x5c\x63\xba\x3b\x55\x4d\xa6\x04\xd2\x01\xc6\x00\x79\x4a\x95\x8b\xdf\xd9\x4b\x00\x18\x27\xfd\x58\x88\xb3\x95\xcb\x72\xd6\xa1\x9c\x95\x1b\x00\x6d\xf1\x99\x6a\x0c\xc6\x1f\xc7\x89\xf6\x65\xee\x57\xc1\x16\x66\xdd\x84\x2d\xbd\xba\xf4\xdd\x37\xec\x74\x89\xda\x94\x00\x14\xa5\x26\xc3\xc4\x29\xb9\xaa\x95\x37\x73\x2b\xcb\xfc\x1b\xfb\xb1\x47\x5c\x35\x75\x26\xa0\x8a\xf2\x42\x04\x3a\x51\xfe\x1e\xad\x36\x24\x6c\x30\xc8\x67\x22\xa9\xfd\xd4\x1e\x3a\x1d\x76\xfd\x90\x00\xd4\x67\xf4\x76\x07\x1d\x18\xf0\x5b\x65\x16\xfd\x5c\x0d\xf7\x52\x5a\x94\x4e\x26\xba\x45\x0f\x22\x5e\x60\x84\xf4\x66\xfb\xd4\xca\xc4\x13\x84\xd7\x27\x7d\x2f\xef\x24\x35\x86\x79\xa7\x0a\xe7\x5a\x2b\xe4\x52\x0e\x86\xcf\x46\x92\xf6\x5a\xbd\xc4\x12\x2b\xef\xb8\x2c\x29\xc1\xbe\x66\x3f\xb9\x1b\x7e\x08\xb4\xfd\xed\x5a\xd4\x92\x17\xbf\x33\x61\x47\xa2\xdb\x3c\xfb\x00\xf6\xe3\xa5\x2c\xc3\xb8\x2e\x6f\xf0\xb7\x17\x52\xd7\x4d\x65\xe4\xdd\xe6\x72\xca\x76\xb3\x87\x90\x82\x73\x12\x5c\x51\xf2\x5a\x2a\x4a\xfb\x69\x83\x9e\xb8\x74\xa2\xc0\x21\x40\x8b\x4e\xeb\x5c\xb3\x8a\xae\x01\xc3\xa7\x78\xc1\x08\x24\xe9\x2c\xf9\x2f\x07\xe8\x6d\x35\x44\x97\xde\x40\xa5\x49\x42\x76\xb8\xed\xb4\x3f\x63\x2e\x1e\x2f\x76\x25\xfa\xb5\x2c\x6f\x90\xe4\x81\xe2\x00\xd2\x9f\x95\x60\x94\xcc\x92\xb1\xd0\x38\x6b\x3b\xfe\x16\xb4\x4e\x12\xe2\x5b\xf4\xb1\x9a\xc3\x69\x93\x1c\xcb\x83\xc1\x80\x22\x67\xf6\x6c\xe8\x43\xe0\xdc\x65\x24\x51\xdd\x25\xf0\x21\x72\x50\x0b\x09\x33\x12\x5d\x13\xa2\x16\x17\x44\x99\x77\xcf\x0e\xdb\x31\x01\xc3\xc5\xff\xf9\xe6\x7a\x33\xa5\x41\x7e\x5f\x7e\x30\xa2\xcc\x45\xce\xd2\xf8\xf1\x6b\x61\x2c\x10\x76\x59\x70\x9d\x54\xe0\x22\xeb\x4f\x95\xf8\x1e\x4a\xb9\xab\x65\x55\x0b\x52\x23\xae\x1f\x12\xa5\x42\xdb\xe5\x06\x6a\x67\x29\x96\xaa\xa6\x9c\x86\xaa\xd9\xfa\x18\x7d\x79\xf5\x33\x26\x8c\x20\x18\x1a\x25\x1a\xa4\x93\x52\x81\x31\x2a\xfc\x4e\xd8\xd9\xd0\x64\xb0\x06\xc4\x95\xca\xff\xf9\xe6\xfa\xfb\x86\xd7\xbc\x34\x62\x54\xb9\x66\x20\xfb\xe6\x9c\x38\xbf\x85\x3e\x71\xf4\xd0\x3d\x2c\xf2\x1d\xb5\x86\xdb\x78\xc5\xbc\xaa\xc5\xb5\x7d\xdb\xa5\xbf\xf1\xa2\xf0\x10\x40\x8d\xde\xca\xa2\x08\x37\x27\x5b\xa6\xb7\x55\xf1\x55\xb7\x36\x71\xd0\x37\x98\x7f\x67\xb8\xc7\x61\x82\xa2\xa6\xdb\x86\xb7\x22\x13\xf2\x8e\x54\xcb\x5c\x8a\x22\xde\xed\xa2\xcb\xf3\x56\xa3\x2f\x04\x05\x9d\x17\x7d\xcd\x17\x57\xd6\x8d\x46\x55\x21\x1d\x35\x64\xca\x4d\x13\x83\x27\x49\x7f\x0c\x23\x28\x75\x1b\x67\xca\x46\xc9\xe9\xfe\x42\xde\x27\x4c\x26\x5f\x4d\xd9\xb7\xa1\x2f\x18\xdd\xdb\xfb\xcc\xda\x4e\xab\xb2\xb8\x24\x01\x25\xfd\xdd\x53\xc7\x0f\xf2\xdb\xf7\x63\xdb\xca\x7b\xe2\xc8\x47\x70\xa1\x25\xc2\x00\x97\xc2\x60\x30\x49\xcc\x80\x82\x68\x1d\x67\x43\x92\x78\xd7\x44\x7f\x17\x51\x12\x91\x6a\xac\x28\xd7\xe2\xbd\x1d\xb6\xad\x43\x9e\xe7\x4b\xa9\xc1\x76\xbc\x17\x33\x8b\xd2\x04\xeb\x04\x2c\x1b\x83\xf7\x36\xf4\x73\x7b\x0b\xb5\xe2\xca\x2b\x79\xbe\xe4\x56\x1d\x88\x7a\xf5\x7b\x00\xf5\x2b\x7e\xc2\x7e\x0b\xf7\xa3\x5f\x5f\x62\xb2\xa2\x7d\xa7\xfc\x1d\x86\x70\xda\xbc\x33\x92\x13\x7c\xa8\xe2\x32\x4a\xb8\x9f\x5e\x74\xa0\x78\xfe\x80\xca\xd5\x70\xa9\x95\xa4\xb5\x4d\xd9\x73\x63\xc4\xb2\x32\xae\xc6\x10\x4c\xdb\x12\xb7\x1f\x42\xd0\x7c\x3e\xdf\xf6\x1f\x00\x14\x6e\x58\x5c\x9c\x01\x7e\xea\x6a\xbc\xc4\x9f\xbb\x4d\xda\xb2\x1f\x52\xad\x69\x78\x88\xf7\x71\xb5\x26\xa8\x4e\xc8\x3f\x30\xf9\x1a\xfe\x9d\x08\x20\xcc\x12\xfa\x0e\x84\x8f\x71\x9f\xd9\x0e\xf3\x50\x31\x07\x65\x34\x2a\x40\x81\x84\xea\x07\xe4\xe6\xe0\x0a\xa0\x75\xe7\x40\xf7\x53\x83\xf3\xa0\x0a\xe0\x6e\x1e\x23\xf6\x3f\x5e\x49\x2f\x63\x4f\x08\xaf\xb1\x42\x4c\x8d\xf3\x4e\x22\xc6\x3d\x63\xed\x24\xc8\x5d\x38\x7f\x00\x51\xa6\x5f\x63\x51\xce\x45\x29\x0f\x25\xc9\x5d\x29\x46\x39\xdc\x47\x92\xfb\xa7\x10\x8e\x60\x24\xc9\x34\x8d\xe3\x09\x32\x15\xe8\x69\xeb\xb7\x83\xca\x71\x45\x64\x7d\x02\x83\x85\x96\x9b\x1d\xa5\x3a\x5e\xa0\xdf\x8a\x1b\x09\xd9\xe9\x11\x14\xde\x9e\x5d\xca\x95\xa4\x4e\x42\x2c\x7e\x46\xe1\x35\x7b\x55\x15\x2b\x67\x47\x10\x93\x42\x0c\x05\xd6\x34\xdf\xc0\xc4\x18\xaa\xe7\x22\x2a\xa3\x48\x55\xc5\x15\x8b\x1c\xa6\x46\xad\x1f\x1f\x29\x86\x01\xc2\x5b\x60\x42\x37\xee\x1d\x0c\x8e\x2e\x4f\x5d\x35\x73\x12\x89\xea\xd1\x6e\x3b\xc9\x54\x04\xe7\x91\x4a\x55\x2e\xca\x55\x04\x73\x17\x99\x42\x79\x0a\x21\x1f\x5b\xc9\x54\x7b\xfc\xe3\x49\x14\x8c\xc4\x8d\xe1\x59\xfb\x4e\x6a\x3f\x19\x4a\x4f\xa2\xdc\x97\x80\xf5\xa3\x51\x74\xde\x68\xa9\x29\x37\xc9\x0a\x5a\xf0\xa0\xd2\x21\x30\xa7\xb4\xbb\x89\x73\x3a\x28\x3c\x6f\x9d\x69\x1a\x9d\xe9\x66\x76\xee\x4e\x7d\x7e\x03\x81\x83\x0e\xbd\x10\x36\x99\x23\xef\x11\x40\x13\x6a\x93\xe6\xcf\xe5\x51\x01\xb3\xde\x92\xbd\x47\x63\x4e\x2f\x22\xe0\x97\x8b\x8a\xcd\xf9\xca\x45\x47\x62\x5e\x6b\x4c\xbf\x88\xfc\xb8\x6a\xde\x46\x54\xa7\x4c\x44\xfa\x75\x91\x16\xf4\x9d\x4b\x43\xc2\x6f\x4f\xcd\x6c\x67\x8d\x9c\x84\xa3\x15\x39\x8f\x91\xde\x4b\x5e\x79\xfa\x1e\x9a\x7d\xf6\x25\xa3\xbb\x03\x52\x9f\xee\x0e\x7b\xa0\xaf\x5b\xa6\x96\x55\x21\x79\x49\x1e\xff\xe4\x43\x0d\x61\x61\xc8\x43\xac\x50\xc4\xfc\xeb\xc1\x81\x9b\x7e\x42\xd5\xde\x52\xd0\x2d\xfe\xb2\xe7\x65\x9f\x42\x76\x20\xc9\x89\xc2\x21\xf5\x8e\xc7\x1a\x7f\xc1\xcb\x9b\x76\x7e\x53\xf4\x02\x39\x20\x21\x19\x68\xe2\x5b\xf8\xb8\xca\x51\x9e\xec\xe3\xb0\x69\x4d\xc1\xcf\x90\xb2\x64\xec\xb8\x0b\x69\x04\x55\x5f\xb1\x62\xa4\x2b\x9e\x09\x36\xe3\x3a\xf8\x1a\x1c\x6a\xe1\x71\xa7\xd6\x15\xc5\xad\x9e\x5a\xc3\x41\x40\x8c\xec\xa9\x92\x73\xb0\x85\x40\x6b\x2d\xdf\x5e\xde\x03\x47\x63\xad\x34\x38\x01\x6f\x25\xb4\x4e\x72\x9e\x93\xc3\x9f\x26\x27\x2c\xe7\x26\x3d\x99\x36\x5a\xa8\x52\xd5\x4e\x6c\x8f\xc5\x86\x64\x90\x0d\x2c\xf8\x19\x63\x15\x52\xfa\xdf\x73\xab\x55\xbe\xf0\x49\x75\xe4\x93\x07\x6d\x03\x46\x24\x9a\x51\x10\x79\x46\x6e\x3d\xbf\xee\x1c\x20\xd7\x09\x62\x46\x9d\x4d\xa1\x8d\x03\xe1\xa4\x7d\x57\x98\x06\xca\x44\x41\x53\x15\x8a\xbb\x8a\x8e\x96\x78\x98\x8e\x32\x11\xe6\xf2\x86\x59\x75\x8a\x81\x63\x3c\x4b\x06\x98\xb2\xb7\xce\xb5\x8e\xa5\x18\x69\xfe\x74\xd1\x10\x1c\x90\xae\x94\x4b\xa2\x41\xa4\x66\x85\xd0\xda\xce\xbf\x8c\x66\xde\x83\xa7\xd4\x94\x8d\xeb\x87\xf3\x69\x8f\xd6\x40\x6e\x0d\xdb\xfd\x58\xde\x94\xaa\x16\x6d\x6c\xad\x0d\x1c\x7d\xba\x19\xdb\x28\xe7\xf1\xaf\xcb\x26\x5b\xb0\x42\x95\x37\xd8\xc9\x34\x55\x44\x96\x99\x2c\xa7\x6d\xe3\xd3\x63\x2a\x1d\xa9\x33\x75\x27\xea\x15\xcb\x55\xd6\x50\xe8\xd7\x51\x04\x5c\x96\x59\xd1\xe4\x61\x8a\xc1\xac\x90\x65\x0f\x1a\x9b\xea\x7a\xbd\x5b\x88\xb0\xdd\xd6\xa0\x93\xe8\x30\x84\xd7\x0d\x50\xd2\xf8\xa6\x56\x4d\xe5\xc2\x06\xa5\x0e\x9d\xf0\x2c\xb9\xf0\x72\xb3\x3b\xf2\x74\x23\xec\x27\x77\x4f\x03\xf8\x27\x77\xa2\xd6\x6e\xbf\xc2\x80\xa1\xee\x50\x83\xc3\x38\xc7\x01\x51\xa5\xe5\xc2\x71\x7b\x63\x38\x0a\xf6\xbf\xd7\x32\xd1\x00\x81\x64\xfc\x27\x1b\xa6\x33\x44\x8a\xe3\x09\x9e\xaa\x73\x51\x8b\x9c\x08\x70\xbc\xed\x8d\xfc\x0e\xc1\xac\xdb\xde\xa7\xd3\x6f\xcb\xe1\xc5\xcb\xbd\x0a\xae\xd0\x60\xdd\x45\x1e\x45\xb2\xcf\x4a\xd7\x49\x29\xb7\x0a\x8a\xe5\xdc\x70\x76\x2b\x56\xa9\xa2\xb3\xe8\xf1\x02\x43\x7c\x16\xd0\x07\xdb\x67\x3e\xdd\x8a\xd5\x24\x9c\x92\x4b\x65\x16\xd4\x00\xd9\x41\x8c\x80\xd9\x7f\xf2\x3c\x0f\xc5\xcc\xe7\xb2\xd6\xc6\x4f\x43\x6a\xef\xd5\x8c\x2d\xce\x74\x2b\xf6\x7a\xfb\x1f\x58\xe9\xf9\x56\xac\xa2\x30\x09\x00\xee\x4e\xf4\xfe\xd5\x23\x4a\x8b\xe3\x62\x6a\x21\x1c\x5b\x66\x5a\xf6\xc8\x6e\x76\x11\x02\xd3\x5d\xfb\x66\xe8\x6a\xa1\x3d\x6c\xe2\xa1\x6d\x3d\x73\x1c\x39\xfe\x65\xc3\x00\x4d\xd0\x35\x2d\xe7\x73\x51\x43\x50\x8e\x51\x76\x51\x93\x4a\x3c\x31\x7f\xd6\xe2\xb2\x27\xf7\xda\xe7\x68\xe6\xed\x59\x6c\xbb\x0e\x87\x2f\x5c\x4f\x11\xa8\x35\xc6\x30\xc6\x9b\xde\x3d\x85\xc2\xba\x09\xa6\xd1\xb5\x73\xcf\x29\x3c\x76\xb2\xad\x01\x4f\xdd\xe1\xef\x9e\x59\xf8\x78\xcb\x9a\x8c\xd1\x5e\xf9\xd5\x20\x50\xba\x85\x29\xc5\x3d\xde\x8a\xc3\x7c\xc1\xee\x43\x91\xac\x7c\xed\x65\x7f\xae\xc6\x30\xd8\xb4\xad\xfe\xc3\x48\x66\x55\x37\x25\x7a\xb7\x4e\x2e\x88\x34\xf4\x58\xb9\xeb\x5e\x11\x07\xed\x0e\x74\x47\x8f\x00\x8e\x44\xa6\xfc\xd4\x7f\x4e\xae\xe7\x35\x02\x41\x6c\xd4\xd9\x42\x2c\x39\x55\x78\x40\x8b\x4c\x87\xd6\x44\x14\x15\x67\x77\x27\x2c\x32\x62\xb5\x7e\xb2\x95\x38\xec\x12\xe5\xd5\x19\xf8\x1f\xb4\xed\x00\xda\x34\x8c\xb3\x02\x7d\x28\xe3\x92\xb7\x6f\xd9\xd0\x72\x07\x21\xb3\x56\xb9\xfb\xb0\xef\x23\xbc\x9a\xa2\x14\x10\xbf\x99\x1d\x53\xc2\x3c\x11\xa9\xb9\xd9\xf1\xc5\xca\x79\x88\xd0\x81\xee\xdb\x1f\x63\xf1\x0b\x8f\xd3\xee\xf6\x4c\x64\x3e\x94\xad\xfe\x93\x56\x23\xa8\x5c\x0f\x9f\xd5\x2b\x95\x23\x93\xd3\xef\x5a\x16\xc2\x42\xb0\x77\x54\x5c\x5f\xaa\x92\xaa\x5e\x5e\x85\x2e\x8e\xe1\x08\x0f\x73\x3b\xea\x06\x16\x7c\x73\x99\x2a\x4d\xad\x8a\x90\xd7\x8a\x8e\xa0\x5e\x33\x0f\x33\x47\x71\xb9\x1d\x8b\xdd\x94\x85\xe0\xdc\x91\xc4\x7d\xc8\xf4\xc4\x50\xd7\xd8\xa1\xdb\x6f\x8c\x12\x86\x63\x85\x21\xd5\x31\x34\x20\x7a\x7f\xcb\xd5\xe6\xe1\x62\xa2\xf4\x5f\x2b\x47\x15\x9b\xd7\x21\x4c\xc6\xa5\xbf\x0d\x6a\x85\xff\x46\xa9\xe2\x83\x17\xe6\x6b\x42\x2f\x52\x85\x75\x3c\xc9\x82\xdc\x96\xac\x50\x5a\xb4\x9b\xbb\x1e\x4c\x44\x9a\x32\x53\x65\x0e\x9a\x1c\x6a\x67\xd5\x02\x26\x1d\x08\x67\x05\x38\xc2\xc3\xd3\x6a\x6b\xab\x87\xf6\x89\x18\x96\x6b\xa0\x5b\xe6\xbe\xbd\xfb\xe5\x73\x36\x6b\xca\x9c\x5a\x06\x6a\x45\x1b\x8a\xa1\x16\x48\x96\x09\x18\x48\x16\xc4\x23\xc2\x15\x5e\xa6\x5c\x0a\xcc\x44\x6f\x13\x35\x04\x37\x1c\xc7\xcb\xc7\x6f\x6e\x6a\x71\xc3\x8d\xaa\xcf\x29\xdf\x5a\x9f\x9b\x85\x38\xd7\x7c\x59\x15\xc2\xf2\x0c\xc3\xcf\x46\xf0\xd3\x43\x62\xd7\xa1\x81\x12\x2d\x65\x97\xcb\x6d\xe7\xf8\x74\xfa\xf4\x2b\x76\x0d\xf0\xd1\xf8\xba\x7a\x05\x95\xf6\x45\x1d\x25\x40\x62\xff\x5b\x13\x43\x1d\xdf\xa5\x17\xf6\xc8\xd6\x04\x00\x7d\xcc\x4f\x00\x04\xf0\x16\x60\x59\x41\xea\x08\xdc\xbd\x92\x1b\x0c\x9e\x42\x81\x33\xb8\xa5\x26\xc7\x78\x17\x9f\x27\xcf\xaf\x5e\x9d\x23\xde\x1d\x66\xf4\xb4\xb2\x49\x98\x11\xa8\xde\xe6\xc7\x25\xda\x0f\x6f\x9d\xe1\xf2\x22\x18\x2e\x97\xaa\x74\x26\xfc\xaf\x6e\xc5\x65\xf0\x9b\x61\x4b\xf9\x21\xb2\xf0\x0b\xa9\x47\x78\xaf\x70\x28\x37\x52\x80\xbe\x71\x3d\xc6\x55\x1b\x22\x1e\x3b\x5c\xe0\x26\x82\x2d\xd4\x52\xdd\x88\x52\xa8\x46\x63\x88\x92\x9a\xb3\xcb\xb7\xa3\x15\x33\x27\x70\xc9\x1d\x12\xc5\x56\x0e\xda\x76\xad\xfe\x4f\xed\x17\xc9\xf2\xe7\xc6\xf2\x88\x5d\x86\xae\x1c\x6b\xac\x45\xca\xdc\x71\xdb\xfe\xdd\xb3\xce\xa1\xa4\x17\xfe\xb3\x64\x37\xf0\x21\x5a\xed\xc3\x13\x22\x6a\xdf\xff\x07\x65\x11\x69\xe3\xae\x8a\x60\xbd\xbb\x76\x18\xb0\x3b\x74\x8e\x5e\x38\xd2\xb6\x9a\x20\xab\xf3\xf7\x81\xb8\xef\x07\x14\xc3\x4e\x82\x88\x56\xc5\xb6\xbe\x89\x63\x09\x22\x2c\xf6\xcb\xb7\xf6\x6c\x69\x14\xfc\xe3\xd9\x29\xc5\xef\xee\xe9\xa0\xa3\x43\x63\x04\x1c\xcf\xed\x4e\x01\x5c\x44\x76\x53\x36\xe2\xc9\x59\x3a\xc1\xc6\x41\xdb\xb2\x2a\x92\x89\x5f\xe1\xf0\xbb\x9e\x53\x1b\x3e\xc6\xde\x45\x5d\x01\x8a\x97\xe3\x38\xf3\xce\xaf\xd0\xe1\x19\x27\xeb\x13\x47\x96\x2e\xb2\x86\x48\x41\xf6\x17\x35\x58\xf2\x21\x02\x90\x6f\xb7\x8a\x4d\x3b\xca\x52\xda\x85\x69\x30\xd6\x36\x7c\x1a\x1b\x0b\x30\x48\xeb\xa0\x3d\xd6\x33\xeb\x5a\xda\xfd\x73\x18\x8e\xab\xf5\xf3\x04\x8d\xe4\xf2\x66\x04\xdb\xf0\x36\x48\xd5\xb7\x7a\x74\x22\x83\x35\x0e\xc4\x07\x23\x28\xe5\xb1\x90\xee\x74\x8c\x05\x12\x18\x67\x35\x2f\x73\xb5\x5c\xb7\x2c\x51\xf8\x10\xe2\x06\x75\x4f\x16\xb6\xeb\xbe\xc5\x24\xdd\x4e\xf8\x2b\xe1\x38\xac\x24\xb1\xd1\xb7\x6a\xc3\x94\xca\x01\xa0\xf3\xde\xa1\xf3\x3e\xc2\x7c\x0b\xc1\xa0\xe4\x81\x38\x4e\xe9\x11\x48\xc9\x0d\xd6\x55\xf3\x91\x81\x4f\x5c\xac\xe0\xfa\xfb\x7d\xd6\x37\x9d\x2d\x25\x67\x9d\x9e\x4e\xe2\x90\x79\x9e\xc4\xfd\x54\x7e\xf9\x4b\xa3\xfb\xf0\xc0\xf0\x69\xef\x44\x48\x50\x8c\x6c\x7b\x27\x18\x77\x12\xfa\xc7\x39\x0b\x42\x37\x33\x2d\xfe\xdd\x08\x48\x9d\xe3\xe3\xd2\xc2\x8e\x20\x2e\xbb\x98\x88\x47\x90\x0f\x0a\xaa\x1f\xa3\xf2\xf7\xd7\x1b\x13\xa7\x34\x9e\x5e\x60\x3c\xb9\xc8\xd7\x0c\xac\xfd\x2d\x93\x33\xdf\x96\xae\x36\x42\xab\x61\xd1\x06\xdb\x2d\x6d\xd9\x49\xee\xbf\x35\xe3\x76\xbb\x88\xae\xc7\x93\xdd\x49\x1e\xa5\x77\xc4\x0d\x46\xd1\x89\xb9\x63\x73\xd1\x11\x98\x3e\x8c\xec\x6e\xe3\x77\xdc\x5b\x82\x7b\xa6\x4f\x83\x43\xe2\x63\x92\x10\x09\x06\x27\x9d\x18\x0e\xa6\xad\xbc\xab\x81\x46\xf6\x07\x90\xcb\xb7\xd0\x5b\x92\x58\x0f\xcf\xa8\xac\x2c\xcf\xad\xb5\xdb\x94\x06\x9b\xb0\xf8\xa7\x52\xbb\x2b\x89\x70\x8a\xa1\x1b\x54\x0b\xec\x2d\xa6\x64\xd0\xdb\x74\xcb\x9a\xe7\xfe\x73\x3b\x5f\xf7\x7e\xb8\x01\x49\x87\x0b\xb7\x23\x90\x13\x47\xde\x4c\xec\x3f\xa1\x8a\x14\x59\x6d\xf8\xaa\x2b\x43\x9b\xce\xce\x07\x92\x21\x77\xc5\x7f\x02\x11\xa2\x13\x8a\x8b\xfb\x58\xc3\xea\x3d\x43\x41\xbe\x13\xd6\x8e\x85\x38\x87\x89\x0b\x77\xa8\xa4\x57\x83\x9a\xc2\x1c\xb0\x33\xf5\xf0\xf3\xe1\x30\x08\x8d\x9f\x0a\xe7\x6b\x11\x2b\xe8\xec\x9d\x81\x38\x0e\x91\x69\xdd\x10\xd1\x59\xb6\x8e\xda\x6d\x9f\x50\xb1\xbc\xa9\x44\x69\x37\x8b\xab\x66\x56\x48\xbd\xb0\x86\x94\xaa\xb0\xc9\x64\x79\x33\xfe\xfe\x36\x9d\x3d\x01\x73\xb0\xd7\x8b\x07\x66\x42\xe9\x58\x0e\x50\x91\x54\x22\xc3\xf4\x53\x55\x0a\xef\xdb\xb9\x11\x46\x53\xc2\x6e\xee\xd2\x1a\x66\x94\x24\x3a\x3e\x3a\x7e\xe3\x05\x99\x6f\x77\x40\xe3\xea\xa9\xa3\x94\x5b\xc2\x7e\xfb\xf1\x77\x57\x38\x69\x2a\x0a\xb3\x76\x83\x8b\xb2\x34\x7a\x6e\x76\x5b\xd7\xb7\x50\x1d\x19\x8e\x60\xd1\xcd\x5c\x07\xad\x0e\x4a\xee\x12\xd6\xb5\x8b\x25\x48\x6e\x57\x8e\x80\xf8\x32\xef\xa5\x72\x71\x68\xd4\x53\x77\x97\x23\x1d\x91\xe1\xbd\xaa\x44\xc9\x2b\xb9\xb5\xfc\x39\xa4\x6a\x10\xb7\xa3\x4a\x1e\x92\x06\xaf\xc5\x03\xf7\xd6\xc8\x1d\xe2\x74\x4c\x31\xfb\xc7\x21\xc5\xec\x2d\xa0\x1b\x89\x0d\xc6\x90\xd1\x50\x4e\x94\xd6\xe0\x78\x27\x39\xe3\x78\x22\xf8\xc7\x7a\x41\xa3\x03\x04\x1c\x28\xe6\xd6\xfc\xa2\x66\x00\x16\x81\x07\x11\x23\x20\xef\x87\x73\xb8\x13\xae\xef\xc4\x79\x53\xde\x96\xea\xbe\x3c\xa7\xbb\x68\x6e\xa0\x7c\xf2\x51\xc5\x0b\x2d\x20\xcb\xa5\xcb\xb7\x2f\x18\x61\x02\x05\xd8\x11\x17\x16\x70\x89\x6e\xb5\x2d\x5a\x87\x13\xb0\x41\x0a\xf4\x5c\xc2\xdb\x91\x87\x6e\xf1\xf0\xea\x99\xbb\x5e\xce\x9d\x81\x27\xde\x0a\xbf\x6d\x66\x22\x33\xc5\x3f\xe8\xd0\x71\xae\x65\x1e\x32\xf0\x5c\x34\x3f\xcf\x32\x51\x19\x4f\x08\x2c\xde\x68\x64\x1c\x41\x4c\x70\x28\x90\xb2\x2a\xb8\x24\x7b\x3e\x2e\xdf\x0b\x8d\x55\xfb\x84\xf8\xbf\x5f\xbd\x7e\xf1\x18\xe5\x4e\x96\x4c\x2c\x67\x22\x77\x61\x10\x78\xba\x7b\x14\x62\x08\xd9\x9c\x1e\x3b\x77\x9d\x7a\x3a\x49\xec\x0e\xbe\xb3\x30\xa2\x9e\x93\xfc\x41\x84\x91\x9b\xbe\xb9\x06\xa8\x76\xa7\x6d\x42\xce\x09\xde\xfc\x0b\xc8\x4a\xc1\x6a\x23\x0f\x26\xb6\x11\x61\x50\x25\x9c\x50\x2e\xfb\x11\x38\x9c\xf8\x25\x69\xb4\x04\x9c\x7a\x9c\xb8\xac\x47\x35\x0f\xa9\x11\xbc\xae\xf9\x0a\x4f\xb5\x55\x2d\x97\xd2\xc8\x3b\x31\x18\xe2\x30\x20\x8f\xa9\x51\x47\x71\x7e\x50\x83\x30\x08\xc3\x64\xbc\x98\x56\x5c\xeb\x34\x5c\xaf\x15\x33\x41\xad\x45\x3a\x62\x9c\x5c\xd8\xfb\xca\x85\xe1\x39\xde\xb1\xaf\x1b\x9a\xa2\x0c\x40\xe0\xfd\x70\x9d\xd5\x91\xac\x0c\xa4\x68\xb4\x3a\xe8\x61\xaf\xb6\x5e\xb3\xe4\xfc\x77\xae\x06\xe1\xe0\xa7\xdd\x05\x19\x0f\x49\x2b\xac\x7b\x39\xc7\xe2\xd1\x1f\xe7\x8e\x71\xf2\x4d\xc2\x09\xcb\x11\xd7\xe3\x28\xc3\xc4\x1e\x45\x0b\x71\x27\x8a\x8f\x73\x43\x70\x67\x2d\xd2\x3d\xec\xc5\xcb\xeb\xcb\xb7\xaf\xae\xde\xbd\x7a\xf3\x9a\x69\xc3\xcb\xff\xe5\x0f\x73\xc2\xe2\x35\xb4\x35\x80\xac\x95\x11\xc1\x6c\x07\x11\x2b\x7f\xd2\xb9\x7c\xfb\x02\x8e\x1e\x21\x3e\x1b\xf1\x18\x1f\x1f\x4b\x80\xd6\xb9\x84\x75\xc5\xb1\xdc\x62\x7b\x14\xef\xd4\xee\x1c\xb8\xf6\x3c\x6c\x3d\x24\x23\x6f\x65\x99\x3f\x18\x1f\xb5\x3d\x62\x62\x7e\x55\x44\x57\x70\x78\x06\xe2\x03\x86\x07\xe5\xb0\x3b\xba\x24\xa3\xc7\xe7\x5b\xc0\xa0\x47\x0e\x00\x95\x2d\xb8\x7e\xf8\x4b\x80\x03\x72\xde\x49\xf1\x23\x60\x7e\xca\x70\xef\x64\xf8\x38\x5c\x25\x47\xe0\xe1\x0b\xe7\x3d\xa6\x3c\xdb\x1a\x3b\x5b\x5e\xd5\x62\x2e\xea\x5a\xe4\xbf\x90\x98\x5a\xd4\x20\x1b\x96\x57\x12\x49\xb9\x99\x99\x1e\xb6\xaf\xe2\x8c\x3b\xd8\x1a\xf0\x2e\xd4\xf0\x7b\x60\xd6\xf8\x58\x42\xee\xa3\xd7\x20\x7d\x11\x6a\x7d\x9a\x5a\x8a\x3b\x91\x4f\xd9\xcb\x04\x6f\x36\x57\x4d\x19\xb5\x6a\xf4\x0d\x52\x71\xf7\xeb\xa0\xd6\x94\x94\xb4\xeb\x44\x48\x37\xf3\xb9\xfc\x60\xc7\x10\x1f\x20\x7c\x71\x9a\xa9\xe5\x98\x7a\xcd\x09\x6f\xbc\xdb\xbe\xd3\x7f\xe3\x8e\x2e\x41\x29\x20\x39\x5c\x14\x6e\xa6\x78\x5a\x9c\xb9\x07\x04\xf4\x4d\xb8\x1b\x71\x49\xf1\x1c\xeb\x8c\xfa\xb7\xdb\x9d\xfb\xda\xb7\xab\xd4\xea\xc8\xc9\x34\xd0\x18\x97\xe5\x42\xe0\x05\x32\x76\x92\x15\x5d\xb8\x71\x4d\x46\x1f\x16\x0d\xa7\xd4\xa6\x8a\x3f\x67\xb3\x95\xbf\xf0\x4f\x07\xdf\x9a\xf8\xfd\x15\x8b\x81\x7a\x61\xe5\xf9\xd2\xdc\xdb\xd2\x5d\xc4\x82\x59\x52\xfd\x67\xaa\x4c\x3d\x17\x26\x5b\x08\x6a\xc7\x0c\x2e\x4b\x91\x4f\x42\xad\x4b\x77\x91\xbd\xd1\x7b\xeb\x2f\x06\x11\xfc\x24\x94\x87\x8e\x72\x6a\x91\xe0\xf8\xab\xd4\x6e\x38\x62\x20\x9d\xe8\xef\xd9\x12\xf3\x1c\x10\x04\x36\xa6\x05\x10\x50\xb7\xd5\xfe\xe6\xea\x9d\xe1\x7b\x2d\xa0\x11\xf7\xd2\x6a\x4b\x1d\x0e\xc2\xa5\x7c\x51\x0c\x05\x62\xed\xc6\xb3\xef\x79\x3d\xe3\x37\x82\x5d\xa2\x88\xab\xda\xaf\x9c\x5c\x54\x85\x5a\x2d\x81\x38\x60\x1c\xf3\x1b\x34\x9e\x29\x3e\x7c\xc6\xb3\x5b\xbb\xa0\xcb\x11\x51\xf0\x6e\x94\xcc\x8d\xd2\x5a\x62\x6f\xaf\xfd\xea\x98\xad\xa2\x91\xc3\x0a\x28\x95\x61\xaa\xae\x16\x7c\x44\x92\x95\xbf\x6e\x0e\x80\x42\x7d\xd8\xaa\x90\x19\xd7\xc2\x4c\xd9\x9b\x12\x4a\xfd\xba\x1f\xe2\x25\x3a\x89\x23\x0d\xf0\x6e\xd9\x43\x8a\xcb\xf3\xbd\xa9\x70\x63\xb9\x0a\xe4\xc1\x74\x17\x57\xa6\xf7\x5b\x4f\x24\x3c\xd3\xbf\x70\x61\x64\x2d\xa0\x71\x7c\x02\xba\xd4\x3d\x5a\x11\x61\x5a\x1f\x39\x91\xe1\x85\x56\xae\x48\x2b\x45\xdb\xcf\x44\xa1\xec\x28\xaa\xf5\x4d\xb7\x4c\xe0\x96\x61\x5c\x37\xc8\xc9\xf7\x9e\x93\xe3\x05\x8a\xe6\x64\xa2\x9c\x9c\x42\xd4\x93\x63\xcb\x16\x54\xc3\x89\x88\x58\x67\x7b\x4a\x55\xff\x3c\x50\x2c\x9e\x01\x0f\x48\xb6\xde\x5e\xc6\x32\x15\x17\xbe\xc1\x0c\xed\x76\x83\x5d\xb7\x18\x2e\xb7\x11\x31\x80\x19\x89\x59\x2a\x62\x6f\x23\x5c\x2f\x03\xae\x78\x6e\xe5\x8d\xee\x92\xc7\x8a\x0f\xe6\xb5\x5e\x52\xd1\xa0\xc7\x23\x29\x98\x0a\xa7\xee\x4b\xc8\x52\x19\x73\x18\x1a\x14\x8e\x5b\x21\x2a\x5c\x69\x19\xe3\x40\x39\x0c\xed\xf0\x89\x28\x54\xb3\x09\xaf\xec\x9d\x92\xa6\x8c\xfb\x84\x33\x4c\xf3\x95\x66\x5a\x1d\x42\x7c\x96\xfc\x83\x5c\x36\x4b\x48\x85\xca\x38\xf6\xff\x84\x45\x3d\x13\xe6\x5e\x08\xf4\x8d\x3d\xbd\x80\x6d\xee\xe9\xc5\x85\x57\x13\x43\x02\x87\xd9\x36\x45\x81\x40\xec\x4c\xba\xc2\x86\xab\x61\x0b\x9d\xf6\x9d\xaa\xc5\x26\x61\xc3\x60\xd4\xd1\x02\xd7\x11\x36\x5f\x62\x7e\xe1\x66\x75\x52\x29\xac\x44\x99\x8b\x32\x5b\xb1\x91\xf6\xcb\xa0\x98\x51\xdc\xc2\xac\x50\xd9\xad\xdf\xdc\x08\x38\x1e\x39\x65\x9d\x15\x9b\x6a\x0d\xf8\xa8\xde\x5a\x20\xfd\x26\x21\x81\x7b\x89\xbc\x7b\x73\x0f\x0d\x71\x04\x1c\xcc\x32\xa1\x99\x6e\xe0\x39\x14\x2b\xcf\x31\x0c\x65\xc1\x41\xa4\x3f\x9b\xd8\xff\x7e\xe6\xfe\x7c\x8a\xee\x6f\x95\x7f\xe6\x7e\x81\x24\x72\xd5\x06\x58\x0b\x5d\x59\x23\xf8\x4e\x14\x2b\x17\xbc\x87\x56\x98\x85\x11\x6f\x60\x50\xdd\x1d\xd4\xe0\x3b\xdc\x7c\x12\x6a\xfa\x6e\x03\x48\x15\x3c\x18\xa4\xf4\xa3\x70\xe6\x63\xf3\xd9\x9f\x35\x61\xae\xfb\x68\x13\x3b\x9b\x60\x36\xc1\x74\x8d\x0e\xaa\x14\x2c\x41\x70\xe3\xe3\x19\x09\x69\x6b\xc9\x8e\xff\xb2\x2f\x9e\x9d\x69\x28\x03\xe4\x42\xee\x62\x38\xc9\xca\xd8\x4f\xcd\xbc\xbd\x7c\x3a\x59\xaf\x6b\x28\xa2\x04\xf4\x4d\xbf\xae\xa1\x31\xb0\xb4\xd1\xf0\x40\xcf\xe0\x53\x2d\xdc\x76\x12\x89\x95\x9d\xe0\x82\x17\x73\x0c\x4e\x50\x5a\x74\x35\xd9\xd3\x75\xaa\x0c\xb5\x74\xaf\x3a\x7b\xba\xab\x2e\x03\x98\x3f\x78\xa4\x62\x6b\xca\xae\x8b\x04\xff\x20\xc2\x91\xc6\x6a\x0c\x32\x9a\xa7\xa1\xf3\x46\x2e\x85\x36\x7c\x59\x6d\xb1\x35\x47\xf2\x14\xb0\xb0\xf3\x85\xbd\x0f\x39\xb4\x0a\xf2\xdb\xcf\x82\x31\xfd\x11\x0f\xb5\x63\xc7\x87\x85\x1e\x7b\x0e\x6d\xac\x3d\x16\x18\x02\x18\x71\x4e\xd8\xc4\x77\xa9\xd9\x1b\x84\xf5\xd1\x9c\x21\x10\xdf\x20\x3d\xde\x8a\x6c\x9f\x1f\x70\x7f\x1d\x7d\x7c\x40\xb5\x82\x94\x75\x27\xea\xf4\x28\x31\xf8\x6d\x38\x46\xb8\xcf\x1f\x81\x75\x78\x44\xb9\x1b\x38\x43\xc8\xb9\x8f\x29\x0f\xb6\xe0\x7f\x92\x29\xd8\x16\xcd\x35\x8a\x2d\x38\x37\xc6\x98\x81\x47\x13\x2b\x5f\xf2\xf3\xdc\x29\xe9\x73\x8a\x4c\x3d\x1f\x77\xa2\x78\xed\x00\x44\xcd\xb3\xfa\xfc\x56\x64\x03\x59\x4a\x47\xf1\xaf\xd4\x69\x85\x47\xa5\x47\x23\x1f\xd0\x78\x7f\xad\x9c\x0f\xc1\x80\xbc\xae\x78\x74\x3f\xf2\xbc\xa6\x60\x05\x80\xe0\x3f\xee\x38\x92\x9e\x6e\xa0\x71\xf8\x72\x3c\x6d\x21\x18\x29\xeb\x74\xae\xdc\x8f\xbe\x11\x50\x96\xcc\xf4\x64\x34\x76\x18\xc4\xa3\x03\x36\x10\xda\x7c\x2c\x3a\x7b\x12\xf9\x9a\xf4\x7b\x91\x15\x8f\x12\x3c\x02\xbb\xc9\xb5\xfd\x3a\x26\x0a\xad\x61\x34\xf6\x93\x27\xe4\x2f\x6d\x3f\x49\x3c\x9d\xa5\xba\xf7\x29\x03\x18\xc0\x71\xcf\x7e\x84\x0e\x20\x6d\x72\xfd\x6d\x57\x72\xb9\xdb\xb0\x7f\x36\xca\xf0\x9e\xe2\xd7\x9b\x89\x97\x40\xe8\x49\xc5\xee\x03\xc9\xd2\xaf\xa6\x63\xf7\x84\x74\x2c\x08\xd5\x48\xdb\x86\xfd\x1b\x1e\xb8\x86\x61\x97\x71\xf9\x64\x17\x0c\x1e\x65\x69\xb2\x5f\xad\xac\xa6\x40\xa5\x8e\xc3\xc5\x29\xd3\x77\xcd\x28\x93\x38\xf6\x37\xce\xe0\xa6\x50\x24\x82\x45\x1d\x7e\x7b\x50\x76\xc8\x76\x71\xc1\x6d\x34\x6a\x56\x25\x4d\x62\x5c\xfb\x5c\x09\x77\x13\x3c\xbc\x9c\x36\x5d\xe6\xf9\xac\x09\x98\xda\x06\x21\xa1\xb0\xc8\x4c\x35\xa5\x41\x5a\x4c\x92\x5a\xd3\xbb\x08\x4c\xd6\xcf\x62\x28\xd1\xc1\x2b\x13\x17\xe8\x2d\xe4\x3c\x34\x34\x9d\xcb\x9b\x9f\x78\xb5\x9b\x00\xb5\x04\xa4\x27\x33\x4e\x1a\x9d\x7e\x72\x0d\xb9\xa0\x61\x85\x2e\xd1\xd3\xa0\x98\xf8\x60\xcf\xff\x22\xc7\xb0\x46\x6c\xca\x6e\x78\xe1\xeb\xf6\xf8\x8b\x1f\x94\x1d\xa4\x9d\x95\x10\x59\xa6\x6c\x63\x51\xea\x7a\x98\xde\x2b\xa3\xbb\xc5\xc0\x5b\xc8\x46\x61\x76\x68\xae\xd9\x21\xe2\xb2\x26\x96\x78\x1e\x66\xab\xdd\x94\xa3\x32\x14\x18\xeb\x99\xb2\x3b\xf7\xa5\x04\x0c\x6e\x7b\x91\x42\x77\x56\x8f\xc3\xd6\xad\x89\x4d\x78\xfa\xb0\xb9\x41\x3c\x49\xac\x29\xd3\x6e\x1b\x4c\x4f\xbb\x20\x2a\x35\xc2\x3d\x7f\xb8\xa5\x50\xa9\xfc\x8f\xb9\x08\x7c\x5f\xbf\x76\x03\x4a\xfa\x9c\x34\xea\x84\xd4\xe9\x84\xbd\xac\x16\x62\x29\x6a\x5e\x5c\x53\x16\xa6\xdb\x52\x5d\x3b\x4c\x37\x17\xbb\xe9\x62\x53\xc9\x11\x2b\x8b\xbc\x7b\x69\xd4\x64\x2c\xc0\x7b\xad\xa3\xa4\x6a\x08\xa5\x57\x0e\x4f\x5c\x7c\xb0\x6b\x09\x9b\x72\x2e\xb9\x84\xeb\x19\x14\xd3\xee\x6c\xd0\xe0\xe2\xb2\x70\xb5\x2f\x53\x20\x2d\xce\xfa\xcd\x28\xca\xce\x8a\x2b\x57\x3a\x7b\xc6\xb9\x36\xcf\x74\xb7\x2f\x28\x7d\xec\xc9\xe9\x06\xe7\xbe\x87\x32\x38\x70\x56\x25\x5f\xca\x0c\x0a\x78\x45\x2d\x3b\xa4\x69\x41\x94\xb5\x80\x33\x75\x92\x11\xdd\x87\x12\xf6\x91\xb4\x43\x24\x9a\xc7\xef\xfa\x59\x5b\xa8\x5d\x58\x2f\x28\x05\x77\x00\xb4\xa7\xc9\x58\x50\x81\xb7\x7a\x50\xd7\xb8\x98\xe9\x47\xa0\x6f\xe8\x88\x7b\xdd\x69\xb3\x7d\x54\xb5\x43\xa3\x32\xf0\xf7\xfc\x11\xd5\xcf\x5b\x4f\xd6\xdd\x37\x61\x5c\xd6\x61\x83\x8b\x80\x1e\x65\x17\x8e\x71\xde\x6d\x1b\xf6\x9c\x1e\xc6\xf4\x63\xd9\x87\x23\x37\x52\xe2\x6f\x39\xf5\x12\x69\xf9\xb1\xfe\xd0\xab\x25\x25\xf6\x2e\x0b\x07\xaf\xff\xda\x96\x61\x3f\xfc\x2d\xd7\xd0\xb0\xce\xee\x59\x43\xed\x99\xf4\x2e\x27\x1f\x50\xbd\xc9\xb2\x1d\x87\xbf\x5b\x59\xc1\x57\xf2\x78\x57\x97\x16\x59\x7d\xda\x1d\x07\x47\xfc\x63\x2e\x9f\x6b\x9a\xdb\xc1\x4e\x7b\x08\xd0\x71\x2e\xfe\x0c\x49\x7d\x8c\x95\xe3\x26\x31\x76\xe7\x19\x58\xea\x29\xea\xdb\xee\x3a\x3d\x3e\xa6\x07\x58\x1b\xe0\xff\x3c\xed\xe2\x80\x21\xff\xa8\xab\x83\x26\x77\xc0\xe5\x01\x10\x4f\xbd\x3e\x68\x1a\x7b\x2f\x90\x04\xf9\x6d\x56\x48\x64\xde\x3d\xb0\x6d\x86\xaf\xc0\x9f\x23\xae\x3f\xb6\x5d\x28\x78\x27\xe2\x0f\x96\x54\xc8\x0d\x7a\xbe\xa8\x65\x65\xec\xe1\x91\x17\x59\x53\xa0\x8b\xfe\x0f\xb3\x66\x8e\xc7\x44\x1c\x59\x67\xaa\x12\x13\xf6\xad\xd0\xe6\xe5\x7c\xae\x6a\x5c\x39\xaf\x95\x89\x7e\x81\x77\x76\xe4\xe8\x9d\xa8\xe5\x7c\xd5\x7a\x06\xae\x90\x99\xa0\xd5\x2b\xa2\x51\x46\x72\xce\xdc\xab\x14\x24\xb5\x22\x02\xc0\x67\x01\xf5\x33\x84\x1a\x37\x17\x0a\x57\xbf\x67\xc9\x2c\xcf\x1c\x02\x9b\x84\xc0\x2c\x84\xac\x1f\x50\x75\x26\xd3\xbb\x52\x70\xa7\x5c\x2a\x03\x69\x9b\x32\x93\x76\x25\x60\x77\xa5\x15\x7a\x95\x7c\x92\x02\x74\xe7\x44\x95\x44\xde\x1d\x00\x3c\xc6\x69\xb6\x83\x73\xcc\x29\xd0\x2e\x37\xf2\x96\x34\xcc\x9a\xa8\xca\xbd\x2c\xfb\xf9\x92\x6f\x38\x27\x7b\x8f\x51\x3e\xa8\x89\xed\xd3\xde\xad\x24\x6e\x6d\x3f\xca\x28\xd9\x38\xa7\x56\xe9\xe0\xf6\x8c\x88\x6b\x3b\x70\xcc\x7e\x8a\x7b\xc8\x11\x39\x36\x82\xfe\x5d\xa6\x3d\x72\x8e\x8d\x94\xa9\x13\xa9\x5b\xdf\x3c\xa4\xbc\x71\xfa\x36\xfe\xe9\x38\x0a\xd7\x84\x11\x80\x70\x30\x8a\x3e\x88\xc6\x8d\x90\x1f\x52\xb9\x67\xe9\x1c\xbd\xba\xa5\xce\x93\x3e\x72\x07\xa4\xde\xfb\x6a\xbb\x57\xac\xad\x62\xeb\x35\xe6\x89\xd9\x17\x87\x5c\xf1\x8f\x58\x97\xfb\x7b\x01\xea\x87\x27\xf2\xf6\x74\x1d\x6e\x6f\x23\xff\x39\x9b\xf3\xa2\x70\xa0\xff\xed\x6f\x97\x9d\xbf\xff\xd8\x0a\xbd\x97\x91\x1b\xf5\x43\xcf\x27\x7d\xc1\x03\xfb\x2a\x88\xc8\xc0\xde\xea\x9c\x39\x6a\x56\x2d\xee\x55\x5d\xee\x71\xb8\x59\x7a\x21\x78\x5e\xc8\x52\x5c\x47\x8d\x5b\xeb\x5e\x46\x52\x3e\x76\x8b\xe9\x1d\xfe\x6e\xcf\xdb\x1e\x3a\x8c\xf0\x47\xf7\x71\xa9\x27\x8e\xa1\x6f\xc7\xde\x4c\xbc\xb5\xbc\x0d\x0b\x6e\x9b\x0d\x60\x33\x6f\xbd\xd4\x8e\x62\xee\x01\xd5\x3f\xfa\x3c\x34\x5c\x1e\x33\x51\xde\xc9\x5a\x95\x10\x8d\x0a\x65\x41\x36\x2b\x77\xfa\x3e\x0a\xc2\xc9\x54\xa9\x9b\x25\xc4\x88\xc0\x6c\x21\xee\x4d\x96\x16\x38\xbb\xe3\x35\x4e\xf5\xb7\xd7\x2a\x17\xb1\x42\x1f\x7b\x14\x72\xbe\xb8\xae\x6e\x8a\xba\x67\x61\x3f\xec\xac\xe0\x35\x34\x7e\x8c\xa6\x85\xa5\x0a\x78\x2d\x01\x3f\xcc\xf1\x8d\x72\x2a\xe0\xa6\x0f\xbd\x40\xee\x8e\x0f\x54\xaa\xa9\xb9\x3d\xac\x43\x6b\x4f\x08\xab\x71\x01\x65\xee\xf5\x60\xa3\xa6\xa9\xa6\x31\x45\xfd\xb0\xd8\xb8\x1d\xd1\xd5\x54\xe7\xc4\x81\xa5\x0d\xe2\x56\x60\x3a\x0a\x25\x0c\x86\x41\x36\x04\x5f\x66\x6a\xb9\x54\xe5\x13\x7c\xbf\x93\x5c\x3a\xcc\x6c\xa8\xfc\xe9\x6e\x99\xf7\x61\xf9\x9d\xe4\xed\x89\x3f\x22\x86\x63\x35\xa8\xb3\x97\xe5\xdd\x77\xb5\x5a\x9e\xed\x24\x00\x04\xb1\x4f\x08\xf6\x11\x80\x18\x6c\x10\x82\x63\x09\x00\x76\x03\x5f\x56\x66\x75\x8e\x53\xda\x8e\xe7\x70\xc1\x1e\x8a\x01\x11\xc5\xf2\x06\xa2\xef\x00\x2c\x9a\x6e\xf8\xbb\x9d\xc7\x86\x10\xc6\x9e\x1e\xb8\xe4\x8d\xc5\x20\xff\x12\xa1\x5a\x50\xad\xd6\x08\xfe\xc2\xbf\xa3\x18\xbf\xd8\x8d\x3a\x5b\x04\x71\xb6\xa8\xe2\x02\x37\x69\xda\x9b\xa2\x36\x69\xb8\x38\x64\xf3\xc7\x28\xad\xdc\x01\xa7\x98\x01\x2c\xea\xe0\xe8\x50\x48\x4d\x3a\xe7\x7b\x79\x27\x30\x14\xcf\x37\x39\x80\xa2\xe0\x82\xfe\x20\xe7\x20\x42\x9b\xb0\xa8\x31\x24\xe6\xd5\xff\xbb\xe1\x85\x8f\xf4\xa4\x7e\xf2\x00\xf8\x5d\xf0\x88\x47\xa1\xb6\xb3\x15\x93\xe6\x0c\x1d\x5b\x32\xa3\xd0\x50\x8f\xab\xb5\x73\x29\xdd\x7f\x2e\xa1\x55\xda\xc4\x57\xa9\x4f\xb3\xe9\xe3\x18\x53\x55\xcb\x1b\x7c\xdb\x2f\xba\xeb\x5e\x79\xef\x8b\x39\x5d\xcf\xd2\xe7\x57\xaf\xd8\x52\x18\x0e\x0d\x9f\x7f\x78\xf7\xee\x8a\x28\x39\x86\xb7\xf5\x9d\xa8\xa9\xba\x9b\x6b\x24\x66\x57\xe6\x3b\x5c\xc2\x35\x2f\x35\x70\x17\xeb\x74\x85\x5e\x71\xbe\xfe\xc6\xe7\x17\x5f\x62\xf1\x72\x48\x9f\x16\x65\x4e\xea\x26\x57\x42\x63\x83\xcd\x65\x55\x80\x85\x15\x50\x5c\x2f\x33\xaf\xb4\x6e\xec\xd2\xa0\x89\xe0\x89\x84\x34\xc4\xf3\xab\x57\xd3\xf4\x41\x22\x38\xf8\x48\x07\x63\x03\x1a\x93\xa9\xb9\xc5\x72\x6b\x93\x02\xb2\x1f\xa2\xd6\x3f\x6d\xaa\x43\x7f\x99\xf3\xd0\x80\xfb\x1c\x3b\xd9\x9d\xf3\x32\x3f\xaf\x85\x36\xbc\x36\x63\x7a\xf5\x41\x83\x1e\xcb\x83\x6e\x84\x2f\x41\xc1\x91\x20\x45\x2f\x04\xd3\x0b\x56\x70\x1d\xd5\xbd\x70\x95\x89\xa8\xa5\x8e\x4f\x9f\xa9\x6a\x71\x27\x55\xa3\xa9\x11\xcf\x36\xc5\x59\xf0\x0b\x2a\x81\x51\x0b\x55\x89\xd2\x19\x77\x83\xe3\xa3\x89\xb7\x16\x87\x89\x8b\x13\x82\x46\x70\x76\x83\x90\x65\x03\x19\x6d\xd2\x9e\x97\xcb\x1b\x2b\x36\x72\x4e\xd7\xb9\xba\x15\xd9\x5e\x29\x59\x62\xdb\x79\xd9\x53\xfd\x77\x53\x74\x7b\x6f\x4f\xa0\x0e\x23\xed\x68\xbe\xef\xc8\xf9\xe8\x3a\xe5\x6b\x38\xd9\xc3\x47\xaa\xe5\xe1\x9b\xaf\x77\x38\xb9\x33\xab\x62\x46\x71\x56\xf1\xda\xc8\xac\x29\x78\xdd\xcf\x2c\xe9\xf4\x2a\x9d\xfb\xa1\x51\x45\xc2\x01\xb6\xe0\x55\x25\x20\x1a\x0e\x73\xe1\xa9\xb5\x62\x0b\x5f\xc8\x14\x9c\x0d\x54\xf7\x3e\x0c\x63\xac\x9a\x3a\x77\x09\x88\xe7\xf7\x44\xef\xed\x39\xe3\xfa\x4e\xf1\xdc\xf7\xa7\x99\xc4\x5d\xa7\x42\x9b\xaa\x94\x10\x18\x69\x42\xd8\x6c\xc1\x20\x9f\x33\xe9\x50\xc6\x92\xfc\x7e\x99\x67\x42\xde\x61\x9e\x54\x8c\x91\x0f\x7f\x20\xac\xd6\xe1\x82\xc3\xd0\xd6\xdc\x2a\xf2\x03\x20\xa0\x42\x3b\xa9\x6e\x1c\x2e\x05\x07\x55\xac\x02\x3c\xa7\xc4\x41\x85\x93\xdb\xc5\x0e\xb1\xa1\x84\xcf\x61\xd8\x0c\x83\x9c\x53\x21\xfe\x3d\xb8\xeb\xfb\xb6\x7a\xa7\x85\x9c\x33\x89\x54\xd0\x46\x55\x9a\x2d\x45\xc8\x20\x8b\xa3\x22\x9d\x41\xe1\x69\xb8\xf5\x62\x0c\x55\x8e\x37\x8f\x44\x9f\x9c\x69\xb2\x27\x5d\xea\xa1\xef\x98\x86\xaa\xd2\xcf\x8b\x04\x62\x42\xc5\x57\x0b\xec\x32\xec\x1e\xf7\x68\x4f\x45\x6b\x96\x30\xc2\x76\x22\xd2\x00\x52\x3a\x99\x28\x04\x9e\x46\xd8\xc1\xc5\xe8\x81\xd9\xac\xad\xed\x84\xa5\x08\xb6\xe4\xac\x13\x5d\x2a\x43\x85\x4b\xc0\xb5\x0f\x45\xb2\xfb\x1a\x9f\x50\x3e\x4e\xd5\xb9\xd8\x86\x79\x5d\x70\x98\xb4\xe8\x90\x26\x4b\x1d\x6a\xaa\x61\x34\xb1\x35\x15\x4b\x69\x64\x70\xe5\xf2\xd2\xae\x62\x6a\xa3\x4b\xfc\x83\x4a\x69\x88\x34\xcd\x21\xda\x48\xb1\x2e\x0b\xed\x8d\x04\x0c\x7b\x5d\xba\x80\x8b\xee\x2e\x3f\x0f\xa5\xa3\x50\x0c\xa0\x04\x14\x0a\x18\x25\xaa\xb5\x3f\x42\x51\x2b\xa8\xae\x28\x22\x03\x2b\x7b\xea\x2a\x61\xd9\xa9\x56\xb5\xca\x9b\xcc\xa1\x77\x5f\x4b\x03\xbd\xdb\xc9\xbe\xc3\xac\x75\x76\xa3\x6a\xd5\x18\x59\x76\x37\xe0\x9e\xe3\xc8\x66\xc9\xb8\xa4\x1a\x76\x18\x67\x21\xea\xf1\xad\x41\xd2\xf7\xfd\xc1\x4d\x92\xff\xba\xf5\x78\x8b\x45\x5c\x82\x51\xdd\xfa\xde\x9b\x42\xbe\x48\xdd\xb7\xca\x40\x3d\x0c\xb6\xe4\xff\x22\xf7\xa1\x65\xc6\x52\x96\xaa\x0e\x74\xc7\x5e\x87\x76\x5f\x9d\x81\x56\x92\xa5\x11\x37\x3d\xad\x6d\x37\xe5\x99\x22\x3a\xef\x07\xec\xd1\x17\x5c\x2c\x55\x79\x2d\xcc\xf9\x77\x5c\x16\x22\xbf\x52\xb9\x73\xb9\xf7\x12\xb2\xd2\xbf\xd3\x37\xe0\xb5\x6f\x27\xe8\xd9\x59\xae\x7c\x2b\x42\x38\x7c\x8a\x9c\xe5\xf8\x41\xe5\xca\x21\x6c\x3a\xfe\x65\xee\xb1\x61\xff\xdd\xcc\x44\x5d\x0a\x2b\x4f\xb9\xd4\xa6\x96\xb3\x26\x9c\x6d\xe9\x40\x6c\x8f\x67\x7e\x1e\xa1\xe8\x02\xa4\x56\x42\x4b\x9c\xde\x33\xf0\x45\x1f\xdd\x2a\xfd\x04\x91\x7d\xaf\x85\x19\xa6\xd5\x5b\x55\x14\x56\xb2\x77\x22\x11\x7d\xeb\x6b\x1a\x37\x65\x29\x32\xa1\x35\xc7\xbb\x11\x6b\xf4\x1d\x96\x4c\xee\x88\xc6\x1b\xa3\x96\x98\x47\xbd\x94\xa5\x5c\xda\x63\x25\x66\xfe\x4b\x5d\x37\x15\x66\x54\x38\xec\xd4\x3c\x74\x23\x51\x8c\x87\xc9\x1f\x94\x90\xaf\x55\x2e\xae\xc5\xba\xa2\x87\x9b\xa8\xd9\x60\x0b\x48\x68\x12\x94\x29\x7b\x6c\xfc\xe0\xe4\xed\xd0\xf4\x4b\x64\x8c\x95\x2a\x17\xd1\xd6\xeb\xba\x93\xa4\xb6\x4e\xb7\xf6\xdd\x3e\xd4\xda\x6b\x65\xc6\x84\xd2\xd8\x05\xf0\x48\x74\x32\xb1\x13\x4a\xcd\xc3\x04\xc8\x7d\xf2\x2b\xe6\x3c\xa7\xe4\x8c\x33\x2b\x2d\x80\xf0\x34\x6b\xd7\x66\x8a\x6b\x12\xf0\x4c\x78\x5f\xe6\x95\xea\x1e\x21\xf6\x5d\xe5\xb2\xbc\xf9\xd9\x25\xc4\x6c\x4d\x73\xca\x43\x85\x5b\x26\x3b\x67\x6c\xe4\xc3\x7d\x4e\xab\x57\xfd\xf4\xa2\x36\x35\x37\xe2\x06\x4a\x7f\x24\x83\x1f\x51\x94\x93\x71\x0e\x22\xae\xa1\x6c\xc7\x5b\xb1\xa6\x3b\x2e\xd0\xae\xfb\x6e\xf4\x53\x5a\x1c\x4f\x15\x39\x15\x0a\x28\xf3\xd0\x75\x17\xeb\x5a\xaa\x52\x6c\xae\x72\xba\x8b\x18\xbf\x48\x4b\xaa\xd0\x7d\xa7\xf3\xed\x12\xbb\x3a\x44\x7b\x36\x44\x34\x0f\x6d\x1d\xd1\xc6\x49\xdd\xc0\x07\x1b\xc9\xe7\x65\x2e\xda\x3c\x4f\x4b\xbe\x44\xb0\x8f\x44\x43\x71\x27\xad\xb5\xf3\x83\xd4\x46\xd5\xab\x1f\xe5\x52\xf6\x87\xc5\xb7\x48\x99\xaf\xa3\x5e\x94\x5d\x75\x38\x6a\x65\x85\xe0\x25\x6b\xaa\x08\x8b\x33\x1d\x25\xfa\x50\x8d\x2b\x1e\xda\xb3\xa4\x6f\xfe\xdf\xa9\x55\x2a\xd3\xba\x67\xc2\xff\xf7\xb0\x34\xbd\xaa\x95\xe5\x2b\x1e\x50\xae\x33\x5e\x0c\xdd\x03\x6c\xa4\xa9\x93\x90\x2a\x86\xa8\x3d\xc4\xc3\x1b\x3e\x11\x36\xf1\x98\x14\x43\x03\xe3\x4e\x98\x9c\x8a\x69\xf2\xb8\x58\xc1\x43\xbb\xd3\x0c\x31\xc7\x95\xef\x78\x91\x96\x77\x92\x1a\xbf\xec\x6e\x47\x7b\x6b\x06\x75\x37\x90\x2f\x35\x9a\xea\x35\x41\x39\x26\x95\xdd\x18\xe8\x8d\x02\xca\x42\x90\x0d\xe3\xf5\x4c\x9a\xda\x5a\xba\x65\xb3\x9c\x89\xda\x9a\x07\xe8\xb2\x01\x33\x33\x17\x1a\x5a\xc1\x68\x63\x75\x43\xde\x80\x63\xb7\x46\x85\x11\x27\xa6\x46\x25\x17\x61\xa8\xc6\xd8\xe3\x9b\xd4\x8b\x9e\x1d\x6c\x7b\x92\xff\x97\x9a\xe9\x49\x5c\x4f\x69\xc2\x6a\x71\xce\x73\xac\x9c\x34\x48\xfd\xff\x52\x33\x47\x6b\x78\x17\xcf\xc9\x70\xd1\x04\xa0\x5c\x14\x09\xa6\xb8\x96\xaa\x3c\x5f\x86\xeb\x34\x86\x7b\xdb\xc8\x9b\xdf\x8a\xd7\xbc\x28\x44\xc1\xfe\xa5\x66\x78\xe9\x17\xc8\x09\x45\x93\x5a\x17\x58\xd4\xb2\x64\xee\x3f\x94\x7a\x89\xb6\x18\x55\x18\xe3\x2e\xa2\x11\x4b\x6c\x58\xa4\xa5\xe9\x54\x56\xc4\xa1\xec\x3c\xe9\x02\x05\x89\x42\x37\x55\x54\xbf\x8a\x61\xf6\xfb\x4f\x58\xab\xc3\xb8\xe6\xc5\xe0\x48\x88\xfa\x45\xfe\x97\x9a\x9d\x69\x2a\x41\xdb\x82\x1a\x72\x80\xfb\x2c\xba\xde\x1b\x98\x4a\x3f\xb1\xa4\xe8\x65\x24\x46\xf4\x10\x23\x6f\x6a\x9e\x89\x79\x53\x84\x58\xba\x71\x1c\xf5\x05\xd6\xff\xa5\x66\x63\xb9\x04\xcc\xf1\x0e\x02\x11\x23\xe2\x9b\x12\x02\x43\x44\x61\x19\xd2\xa9\x1b\xd2\x76\xe5\xda\x87\x00\xd3\xd3\x2a\xaa\xe9\x17\x67\x61\x8f\x73\xb0\xac\xa3\x19\x9e\xa4\x60\x8d\x93\xf7\x9e\xeb\x5b\x38\x47\x63\x08\xff\x46\x7a\xc1\x71\x03\x88\x65\x54\x0c\x0d\x0f\xe5\x5c\xdf\x6a\xa6\xd5\x52\x40\xc5\x41\x80\xeb\x27\x0b\x17\xa5\x0a\x73\xd1\xfd\x8d\xd8\x26\x2f\x4c\x88\xc3\x0d\x95\xe5\x70\x14\xa3\xf0\x4a\x5e\x95\x99\x20\x3f\x99\xa5\x10\x7b\x0e\xd3\xa2\x01\xec\x06\xe0\xaf\xc8\x3c\x75\xc5\x07\x91\x35\xd8\x43\x32\xcc\x60\x1f\x79\xa4\x9d\x83\x5d\x0b\x33\x69\xeb\x08\x6f\xda\x46\x0a\x22\x7d\x3a\x48\xf6\x28\x2d\xb8\x5f\xff\x00\x6c\x55\x86\x43\x59\x34\x0e\x5d\x58\xb8\x3e\xab\xe9\x37\x9b\xb6\x88\x76\x59\x68\xac\x36\x15\xcf\x93\xfd\xf5\xed\xf5\xa7\xec\x1e\x0a\x67\xb6\xdb\x08\x48\x72\x2b\xba\x9b\x02\x0a\x2a\xb3\xda\xe0\xed\x35\xb1\x40\x82\xbf\x34\xa8\x19\x3b\x22\x94\x1c\xc5\xe5\x48\x45\x3d\xa1\x8a\x53\x64\x63\x72\x30\x6b\x01\xda\xaf\xe4\x05\xf2\x5a\xa8\x8c\xb5\x10\x28\x4b\xac\xd2\x4c\xd7\x8e\x6f\xaf\x5d\xd3\x26\xe8\x4f\x4b\x74\x69\xe1\xf9\xf6\xfa\xac\xdd\x98\x60\xe2\xbe\xee\x53\x62\xf1\x21\x8f\x7e\x22\xbf\x7d\xbb\x76\x6d\x5b\xba\x3e\x1b\x90\x2e\x32\x46\xfb\x0e\x60\x89\x94\xd9\x75\x38\xe3\x5a\x66\x4c\x2e\x31\xa8\x70\xac\x0c\xb9\x6b\x83\xe8\x6b\x4b\x3c\xf0\x62\x3b\x53\x38\x22\x38\x34\x1f\x71\xef\x8d\xcf\xde\xf1\xa3\x52\xc5\x4a\x47\x2c\xce\xb4\x2c\x6f\x0a\x11\x42\x99\xa6\xec\x27\x7e\x2b\x98\x77\xb7\xfa\xf5\x4a\x42\x58\x37\xd0\x58\x07\x23\x8d\xae\x7f\x78\xf3\xf3\x8f\x2f\x98\x16\x00\x0a\x4b\xd9\xd6\x42\x57\xaa\xd4\x02\x75\xd0\xbf\x1b\x51\xcb\x91\x55\xfb\x46\xd1\xbb\x55\x44\xb0\x77\x81\x6f\x22\x7f\x2b\x15\x79\xdc\x6a\x1e\x63\x32\x97\x28\x68\xd0\xde\x64\xfd\xa2\x6d\x4d\x83\xfd\xf5\xed\xe5\xa7\x4c\xea\x90\xb2\x00\x45\xeb\x06\x96\x73\xef\x52\xbe\xec\x5f\xca\x3e\x2c\x70\xed\x72\x0e\x4b\x79\xf4\xca\xc8\xc6\x32\xc8\x2d\xd2\xdd\x39\x13\x74\x75\xaf\xfe\x1c\x75\x98\x59\x4f\xf7\xc0\x26\x97\xbe\xd6\x2e\x8a\x19\xf9\xd4\xd6\xab\xb9\x1e\xb5\x16\xab\xb4\xcb\xae\x4a\x0b\x99\x89\x97\xe3\xd5\x5a\x47\xa5\x75\x76\xcc\x03\x70\x6e\x3b\xad\xd6\xcf\xbc\x11\x0a\x2e\xa4\x9a\x6d\xa7\xe0\xd6\xf6\x32\xe8\x44\x6b\x7e\x0b\x08\xbc\x5a\x52\x79\xa4\xa8\x5f\x51\x53\xfa\x1b\x29\x99\x51\xaa\x06\xc6\xc6\xa8\x3b\x99\x8b\x1c\xb1\x99\xd2\xb7\xce\x24\x34\x42\xbb\xb2\xc3\x12\x0e\xb7\x4c\x96\xd4\x7d\x21\x86\x06\xd1\x68\x25\xde\xfe\xd5\xaa\xb9\x59\xb0\x77\x97\x57\x13\xf6\xf3\x8b\x2b\xc0\xe2\x87\x77\xef\xae\x46\x6b\xc7\xd1\x9c\xc3\xa6\x33\x73\x55\x33\xa9\x75\x23\x34\x2b\xe4\xad\x88\x6a\x28\x85\xaa\x3f\x2e\x2d\x62\x17\xce\x36\xf5\x1c\xca\x37\x3a\x8b\xd5\x9e\x65\xf1\x72\xd5\x75\xed\xe4\x0c\xa3\xe3\x10\x8d\x18\x0b\x37\xf4\x0e\x71\x99\x03\x6c\x07\xb6\x81\xd6\x0e\xf3\xf4\x7d\x76\x7d\xad\x49\xaa\x19\xd5\x1f\xc1\x39\xd6\xa0\xef\x32\xe2\xda\x1e\xa5\xe7\x4d\x01\xd6\xc0\xb7\x4d\xad\xcd\x46\xe7\x4d\xf4\x09\xfb\xed\xf6\x6f\x7a\x2a\xd5\xef\x24\xa4\xf1\xa3\x79\x53\x66\xe8\x29\x91\x66\xc5\x7e\x8b\x1e\xc1\xbb\xd8\xaa\x0d\x47\x24\x27\x4b\x7c\x38\x48\x8f\x05\xe2\x4e\x94\xae\x5b\xec\x42\xf0\xc2\x2c\x56\x64\x81\x5e\x17\xea\x7e\x53\x44\x74\x8c\x55\xc7\x07\x79\xe5\xce\xca\x57\x2a\xff\x89\x97\xfc\x06\x2e\x0c\xa8\x38\xb0\x15\xc4\x99\x45\x31\xf6\x05\x59\x26\x48\x0d\x34\x0c\x11\x89\x58\xe4\x1e\x2f\xb5\xab\x5a\x40\xd3\x25\xe8\xe3\x27\xe6\xbc\x29\x0c\xa3\xfa\x66\x97\x05\xd7\xda\x6e\x69\xa8\x3b\xa8\xb0\x16\x2e\x58\x2d\x55\xd9\xbd\xc0\x1d\x5a\x53\x9a\x26\xd5\x63\x71\x24\x3c\x3d\x25\x37\xaf\x53\x3e\x62\x88\x97\x3d\xb7\x56\xb5\xc8\x65\x86\xa5\x9f\x31\x7c\xc2\xaa\x90\x05\x2f\xb0\x36\x6d\xb9\x62\x6e\x3a\x70\x1b\x22\x75\xe0\x33\x6e\x92\x3b\xb1\x99\x16\xde\x15\xa5\x51\x70\x9d\x89\x32\x47\x87\x4b\x8e\x51\x16\xaa\xce\x65\xc9\x0b\x26\xcb\x5c\x7c\x00\xc3\x2f\x66\x34\x6b\xaa\x24\x82\xcb\x01\xb2\xa3\x26\x90\xf0\xf6\x86\x3e\xca\xd5\x7d\x39\xf5\xa4\x80\xee\x78\x0c\x8c\x18\x75\xef\x1b\x23\xdb\x33\x28\x4d\x9c\x2a\x61\xdb\x0d\x57\x86\x3e\x47\xf1\x5c\xec\x66\xee\xc9\x81\xc2\x87\xca\x7a\x3f\x01\x3c\x85\xf0\xf9\xbb\x10\x8c\x1e\x20\x3b\xed\x04\x82\xe8\x43\x7b\x70\x78\x71\x27\x21\xb3\x2f\xc2\x7b\x5b\x61\x4a\x6c\xd0\x44\xb2\x8c\x35\x69\x28\x5a\xee\x46\xc1\x66\xca\x38\xcd\x98\xc2\xc2\x20\x16\x10\xfa\x98\x70\x1d\x05\x1e\x60\xad\xe5\x7f\x61\xd6\x21\x44\xf3\x20\x9a\xb3\x15\xe3\xec\xb5\xca\x45\x9f\xaa\x41\xc5\xf1\xf8\xb8\x1d\x62\x83\xdc\x09\x53\x9f\x50\xf5\x78\x95\x03\x36\xdb\xbd\xaa\x6f\x31\xcf\x96\x17\xf6\x4c\x38\xf3\xb8\x8d\x3c\x79\xf6\xcd\x6b\xca\x5e\x8b\xfb\x38\xd2\xbe\x6f\xee\xde\x38\x23\x4c\x10\x03\xf4\x6d\x4e\xd9\xb7\xb5\x0b\xd7\xf3\xbf\xb7\x57\x7b\xc8\x86\xab\x40\x19\xdc\xab\x69\xfc\xdc\xeb\xa7\x60\xcf\x71\x03\xc9\xbb\xbe\x6c\xfe\x58\x0f\xd4\xe8\x45\x4c\x0e\x76\xba\x92\x83\x6d\xf8\x8a\xd7\x46\xae\x75\x8e\x1e\x81\xb9\x95\xa8\x2d\xeb\x58\xc6\x4b\x5e\xaf\x7c\xfc\x09\x34\xfd\x59\xc0\x15\x58\x7a\x17\x80\x11\x97\x62\x59\x15\xd0\xb4\x50\xe5\xad\x10\xc6\xd1\x1a\xe0\xac\x7d\xdf\xee\x6f\xe2\xfb\xcc\x09\x24\x0c\xb8\x6e\x97\xc2\x90\x73\x08\x42\x61\x2d\xde\xb2\x8b\xb1\x6a\x8c\x9e\xb2\x57\x73\x32\xfa\xa3\x9c\x91\xfb\x85\x84\x0b\xa6\x74\x5e\xee\xbc\x0d\x1b\xab\xba\xa9\x85\xd6\x93\xae\xc2\xaa\x85\x36\xee\x16\xc4\x9d\x25\xa0\x47\xba\x54\x05\xf7\x61\xa3\x1e\x5f\x97\xba\xb2\xbf\x65\x73\x92\x8d\x25\x91\xc9\x87\x10\xc2\xb6\xa8\xc1\xc6\xa0\x8a\x02\x42\x1a\xd7\x48\xde\x3e\xb6\xea\x80\x10\xda\xfd\x06\x63\xb7\xb0\x46\x2b\x85\x77\xa2\xa3\x04\x5d\x98\x25\xa8\x09\x0e\x09\x0e\x7e\x03\x02\xb1\xf0\x58\xd2\x3d\x1b\x1e\x31\x52\xe1\xd7\xad\x94\x79\x59\xe6\x76\x3a\x54\x46\x1a\x63\x5b\xdd\x9d\x3a\x10\x02\x31\x74\x3f\x81\x6c\x83\xcb\xdd\x8d\x25\x9d\xbb\x21\x77\xb9\x9a\x2e\xcc\xbc\xaa\xa5\xaa\x99\xbb\xaf\xee\x11\xeb\x5c\x18\x91\x59\x72\x48\x8d\x85\x6a\x7d\x48\x9a\x2c\xb5\x11\x3c\x77\x09\xc1\x3e\xca\x10\x5d\x44\xb5\x47\x66\x7b\x19\x47\x9b\xe2\x44\x72\x7e\x29\x6a\x8a\xb5\x16\xd7\xf2\xc6\x1e\xc0\x5d\x05\x05\x6c\x1d\xdd\x91\xf4\xc6\x2c\x7e\x8f\xbf\xd2\x6c\x6d\x8b\xec\xd6\x85\x2f\xa6\xa7\x5f\xbf\x85\x8f\x54\x25\xea\x51\x62\x7a\x86\x07\xd1\x68\xd0\x29\x2e\x2f\x00\x83\xdd\x91\x43\xf7\x59\xdf\xfd\xfc\x09\xf4\x64\xf6\x0d\x8f\xd1\x94\x51\x59\x03\xd7\xac\x43\x20\x9f\xdc\x3d\x0d\x50\x9f\xb8\xb8\xd9\x00\x3d\x01\xfe\xa4\x07\x80\x0b\x62\xa4\x16\xd4\xc3\x03\x22\xb9\x5d\x2d\x96\xc9\x9a\x67\x96\x8b\xb5\xba\xe3\x45\x48\xa8\x58\xf3\x32\xd5\xb2\xf2\x95\x2d\xb6\x41\xfe\xc9\xdd\xd3\x1d\xf1\x0f\xa6\xc4\xb2\xb1\x87\x6c\x52\x24\x68\xbe\x20\xde\x37\x56\x97\x16\x52\x9b\x89\x0b\x15\x77\x89\x2b\x15\xfe\x19\x27\x05\xe0\xbf\xa3\xc6\x76\x1b\xc6\xf7\x34\x4a\xc3\xcd\x13\x64\x00\x81\x64\xcc\x8d\x50\x23\x65\x34\x1a\xe6\xd9\x98\xa8\xe8\xc6\x2c\x52\x06\x74\x92\x5c\xd1\x31\xc6\x33\x2c\x51\x60\xd4\xad\x28\x35\xa8\x5e\xb6\x84\x5f\x30\x02\x80\x54\x70\xff\x3a\x25\x20\xcf\x33\x2a\x80\xe2\x7c\xf8\x10\xfe\x60\xbf\xb7\x87\xca\x06\xfa\x62\x5b\x99\x87\x31\x50\xbb\xc3\x08\x5b\x84\x9b\x3b\x74\x69\x28\x76\x2b\x56\xe8\x18\x06\x48\x50\x25\xc2\xa8\x70\x69\x56\x16\xab\x70\x00\x7e\xde\x18\xf5\x93\x7d\x8d\x80\xbc\x03\x34\x24\x2a\x4b\xea\x98\x34\xe7\x85\x16\x53\xf6\x2b\x3a\x14\x31\xe9\xc0\x1a\x33\xf7\x68\x78\x0b\x6b\xeb\x28\xcd\x16\xa2\xa6\xa2\x28\x4f\x7d\x2a\xfa\x95\xca\x27\x78\x0f\x53\x89\x0c\x7a\xd2\x3d\x77\x33\x4c\xe9\x83\xe3\xd2\x80\xa5\x2c\x18\xff\xd4\xcd\x0b\xf1\xcc\x42\x15\x16\x6f\x90\x40\x2a\xee\x84\xcd\x3e\xed\x90\xc0\x6e\x19\x2e\xc3\x09\x0a\x65\xac\x1b\x96\x82\x77\x31\x4d\xb4\xb6\x10\xb3\x03\x42\x04\xea\xb1\x67\x7b\x92\xc4\xe2\x85\x0a\xa8\x8b\xda\x78\x9a\x44\xe8\xc3\x47\x87\xa0\xca\xae\x30\x91\x2e\x9f\xed\x49\x17\x80\xf2\x47\x24\xcc\xbb\x45\x74\xe5\xe9\x2f\x35\x69\x13\x71\xbd\xc8\x60\x77\xa1\x32\x51\xa0\x0a\xa2\x0a\x94\x00\xf7\x17\x55\x34\x4b\x6a\x79\xca\xcd\x02\xa4\xd8\x6b\x31\x11\x29\x83\x2d\x28\x4f\x9a\xc1\xd9\x73\x88\xae\xdd\x36\xd2\x97\x5d\xba\xd8\x58\x78\xae\x2f\x34\xc0\x9b\xa0\xd9\xe7\x33\xe0\xa1\xb1\x04\xd7\x42\xb3\xa7\x7c\xf2\x74\x36\x79\xc6\x27\xcf\x66\x30\xe8\xb3\x6c\xca\x5e\x95\x64\x74\x86\xb7\xb2\xc9\x67\x7c\xf2\xd9\xcc\xef\xd9\x9f\x65\x03\xb4\x49\x5b\xf7\x44\xb4\x19\x63\xe0\xd9\x8d\x84\x6e\x51\xde\xd3\x66\x31\xb8\x99\x38\xb2\xbc\xc3\xcd\xe4\x27\xbb\x91\x79\xed\xbb\xed\x2e\x82\x7b\x04\xe5\x19\xe1\xd6\x01\x4a\x1e\xa4\xe2\x28\x5b\x47\x74\xfd\xee\x0b\xd7\xb9\xea\x1c\xd8\xe4\x37\x0b\xd2\x0a\x57\x67\x70\x0f\x5c\x0b\x9e\x77\x46\x01\x84\x27\xac\x56\xca\xb0\xcb\xe7\x64\x72\x04\xfb\x3b\x5c\x85\xc4\xfd\x7b\x43\xc6\x9b\x5b\xd1\x76\xee\x28\x42\x40\x43\x90\xf0\x29\x7b\x5e\x14\xb4\x44\x00\x2d\x94\x29\x59\xa4\xb6\x98\x2b\x51\xd6\xc6\x6c\xe9\x01\x05\xa7\x4b\xbc\x5e\x90\x18\x68\x49\x7b\x82\x1c\x56\x50\x1c\x2a\x85\x9c\x0b\x6c\x3e\x6c\xb0\xbc\xe6\x56\x02\x82\x37\x86\x78\x9b\xe7\x8a\x11\x23\x34\xc8\x18\x4d\xbf\x1a\xe1\x23\x41\x25\xad\x3b\x9f\xba\x4b\xd1\xb8\xd6\x45\x20\x5d\x9e\x8b\xdc\x9e\xdd\xf4\x42\xdd\xfb\x7c\x71\xcc\x69\x84\x14\xc2\x29\xbb\x72\xd7\xe4\x11\x37\x1c\xe8\xb8\x38\x03\x14\xd4\xb0\xa7\x3b\xac\x04\x63\x56\xbe\x10\x88\xbf\xce\x6c\x53\x22\xfe\xdc\xab\x87\x3e\xec\x01\x36\x35\x7e\x4b\xca\x7b\x74\x5e\xb6\x87\xfe\x10\x69\xe7\xae\x68\x31\x63\x90\x07\x5f\x4e\x34\xc1\xb1\xe6\xe8\x26\xe1\xf8\xef\x66\x26\x32\x53\x4c\xd8\x8d\xb5\x8d\x67\x4a\xdd\x32\x5e\xc5\xad\xcb\xdb\xd2\x91\x15\xf2\x77\xf7\x15\xcb\x0a\x29\x4a\xc3\xbe\xef\xfb\xb6\x5d\xb0\x97\x52\x83\xe8\x72\xd4\xf9\x57\xe3\x0f\xc6\xb9\x56\xfb\x07\x4b\xcb\xfa\xf0\x92\xf1\x9b\x72\xa1\xb4\x61\x55\x2d\x97\xbc\x5e\x51\xd2\x24\x1e\x5a\x9e\xf9\xa7\xce\xe5\x39\xb1\x5a\xa0\x34\x10\xcd\x13\xa0\x46\xbf\xba\x3b\x6d\x08\x1d\x4a\x41\xd3\x1e\xdb\x7d\x1e\xe2\xf9\xa9\x04\xf4\xcf\x9a\xca\x2c\x24\x30\x27\x41\x8a\x40\x12\x20\xbb\xd5\xe5\xec\x8a\xd2\xd4\xab\xa0\x2d\x7b\xb9\x44\x69\xf1\xf0\x71\xf0\xd8\xb5\xbe\xa4\x3a\x28\x08\x97\x10\x84\x97\xa7\xec\x79\x04\x6a\x6e\x4f\x11\x20\x7c\x96\x43\x76\x8d\xf9\xa2\x86\x4e\xb7\x41\xb1\x14\x8b\xa4\x11\x69\xd3\x9d\xd0\xa0\x0e\xca\x07\xf0\x31\x5b\xdd\x2d\x4a\x92\xfb\xdf\x41\xf1\xc4\x6b\x7d\x77\x74\x87\x13\xed\x18\xc9\x74\x7f\xf2\x4a\x9e\xfb\xc4\x57\x27\x98\x00\x52\xce\xd9\x1d\xf4\xd7\x96\x74\x6f\xef\x27\xc1\x2b\x19\x92\x65\x37\xc5\x63\x34\x25\xa3\x29\xd8\xc9\xdf\x08\x93\x7c\x3e\xb1\x27\xb2\xca\x95\xc4\x23\x31\x25\x1d\x22\x72\xff\x5a\x88\x06\x39\xbb\x7b\x7a\x46\xd5\x7c\x0e\x49\x44\xf4\xe2\x30\x59\xce\xd5\x96\x04\xa4\x4f\xcf\xed\xa7\x1d\x02\x86\xe8\x7d\x0a\x63\x84\x51\x7c\x43\xd0\x60\x70\x41\x61\xc1\x04\xd4\xa6\x35\xcf\x8b\xa2\x4d\xd8\xf8\xfb\x7e\xc2\xc6\x6f\x44\x75\x81\x48\x86\xa3\x5c\x83\x9f\x10\x53\x0a\xe6\x9b\x09\x1f\xe3\x77\x38\x9a\xe3\x74\x66\x98\xa4\xa7\x6a\x6c\x97\xbc\x0d\xe5\x3d\x80\x36\xd5\x6f\x5b\x2f\xa0\x35\x5e\x4b\x4c\xe7\x2f\xc4\x1d\x87\x92\x34\xa1\x50\xd2\x1c\x86\xc7\xbb\x83\x11\xf6\x1c\xa6\x5b\xc4\xba\x34\x4a\x94\xc4\xda\xad\x41\x93\x38\x15\xd7\xc6\x3a\x64\x1e\x10\x91\xa3\x8d\xd3\x52\x60\x12\xac\xb2\x09\x85\x96\x4d\x28\x3b\x03\xca\xbe\x40\x48\x5f\x3c\x09\x8e\x32\xe6\xb4\x52\x77\x44\xa6\x4a\x56\x67\x93\xa0\x5d\x4b\x95\x23\xb0\x60\xff\x11\x2e\xd0\xe1\xdb\x17\xa5\x62\xae\x1c\x60\x34\xdc\x21\x05\x41\xce\xe7\x69\x1e\xcf\x56\x52\x60\xbf\x1e\x94\x00\xfb\xd0\x1a\x0b\x94\x7c\x07\x3f\x60\x70\x1c\x30\xfd\x45\xd4\xac\x7c\xe4\xf5\x65\x2b\xb1\x8e\x2d\x8c\xa9\x7c\x34\xd8\x0b\x2c\xf7\x87\xd7\x90\x7c\xd9\x9f\x86\x17\xb0\x30\xf8\xdd\x84\xcd\x1a\xbd\x9a\xa9\x0f\x53\xf6\xc2\x22\xac\xe6\xac\x90\x77\x9d\x8f\x5d\x31\xc1\x3c\x7e\xe0\xb7\x99\xb8\x76\x59\x34\x4b\x6a\x04\x8e\x00\xd1\xee\x27\x20\x88\xf2\x08\x73\x69\xb4\x12\x75\x75\xf7\x48\xbc\xfa\x1b\x3e\x6d\xc9\x5e\xf1\xa1\x52\x5a\xb4\x4c\x26\xaf\x40\x69\xe1\x8e\xe5\x1d\x94\x44\xa5\x73\xbd\x5b\xa0\x51\x2c\x9e\x3d\xcd\xd5\x86\x7d\xf9\xd9\x57\x7f\x77\x26\x09\xcd\xd9\xad\x2c\xe5\x3a\xe4\xb5\x6c\xa8\xfe\xa9\x6a\x06\x05\xb0\x6a\xc3\x9e\x3e\xfb\xec\xf3\x29\xfb\x85\x17\x92\x22\x36\xa3\x20\xea\x81\xfe\xee\x52\x47\xa8\x41\x09\x07\x82\xe3\xcd\x0d\xc3\x6b\xab\xf5\xe1\x81\xd4\xb1\x87\xc0\xce\x60\xc2\xe8\x6e\x8b\x9b\x0e\xba\x31\xec\xd6\x4c\x7b\x66\xe9\xd4\x27\x7c\x0a\xf7\x42\xde\xa6\xa3\xd1\x9f\x7d\xf6\xf9\x17\xe8\x5c\x76\x4f\xdc\x81\xa4\x3b\x05\xfb\xae\x77\x12\xf4\x4f\x63\xeb\x29\x1c\x4e\x17\x61\x18\x6e\x33\x74\xf5\xb9\x4e\x52\x29\x82\x37\xc9\x3f\xf7\x61\xc1\x78\xff\xe5\x9d\xea\x1b\x04\x96\xd2\xf4\xd3\xf0\xfa\xd0\x94\x9a\x0e\x7d\x54\x37\xf4\x36\x1e\xff\x0c\x82\x2b\x79\x99\x87\x72\x89\x45\x72\x42\x74\x11\x16\xb2\x0c\xb1\xe2\xcf\x03\x10\xe4\x44\x7e\x86\x0a\xe7\xbc\x20\xbf\x3b\x25\xc0\xc6\x4e\x08\x17\x54\xdb\x76\x86\xe1\x70\xbe\xf4\x0a\xcf\xc1\xc0\xb6\x52\x26\x5a\xb8\xe2\x7f\x9f\x9f\x39\xa9\xc5\xd6\xe8\x01\xc8\x74\x33\x5a\xb4\x5d\x95\x0a\xd7\x31\x39\x2b\xe0\x50\x08\x50\x71\x1c\xea\xf8\x89\x7f\x58\x82\x62\x0f\xf6\x43\x8a\x8d\xba\xe9\x8b\x63\x5f\x2b\x2e\xea\xa6\xbf\x86\x20\x16\xab\xf1\xdd\x5a\xe7\xb2\xb0\x96\x18\xbc\xbe\x8b\xd8\x60\x92\x81\x6b\xf3\x79\x23\x4a\x51\x5b\x21\xb2\xf0\x20\xfa\xa5\xa6\x8b\x5c\xfb\x55\x54\x30\x92\x62\x6c\xfc\x19\xa7\x50\x37\xac\x90\xa5\x3d\x14\x59\xdb\xc0\xfe\x49\x92\x46\xbc\xd0\x6b\x0e\x47\xce\x02\xc9\xe9\x40\x54\xa8\xfb\x88\xb9\x30\xb5\x73\xc3\x65\xf1\xcd\xd3\x33\x47\x12\x8f\x28\x77\x86\x2c\x25\x31\x5a\x24\x26\xa1\xa0\xa1\xfd\xd3\xf9\x39\xe0\x47\x75\x13\x81\x3e\x3f\x87\xe2\xdf\xe7\xb3\x95\x11\xba\x1f\x3a\x25\xbb\xd8\x37\x68\xa4\xf0\x3d\x00\x3e\x27\xd4\xec\x3f\xe4\x52\x68\xc3\x97\x55\x07\x8e\xc3\x8c\x02\xc5\xfd\x7b\xb2\x64\x6f\xbf\xbb\xfc\xec\xb3\xcf\xfe\xce\xd0\x74\x02\x90\x11\x7e\x5a\x96\x99\xf8\xe6\xa9\xf6\xa8\xd1\x6c\x81\x28\xa8\xf9\x6a\x81\x5e\xe3\xa7\x4c\x43\x4d\x74\xa6\x8a\x5c\xd4\xe8\x9d\x2b\xd5\x7d\x3f\xc4\x67\x9f\x2f\x46\x81\xcc\xf9\xaa\x0b\xef\x40\xab\xa2\x72\xe5\xff\x79\x59\x2a\xb3\xbd\x46\xc5\xef\x7d\x2a\x4e\xee\xe0\xf8\x02\x78\x3e\xd3\xc3\x9e\x19\x37\x9a\x01\x20\xec\x9d\xfd\x1f\x53\x9e\x86\x9a\x53\xfa\xe4\x0e\x8c\x9d\x75\xb9\x01\xa4\x8f\x53\x05\x0c\xe8\x7a\x05\xdc\x46\x18\xf7\xc7\xf0\x43\xd2\x87\x03\xfd\x76\x76\xf9\x13\x76\x3e\x27\x31\x9c\xc0\x62\xff\x81\x73\xf4\xc5\xf4\xb0\xec\xc3\x42\x67\xf3\x38\x41\x2b\x28\x82\xa6\xcc\x45\xbd\xc6\xe4\x38\xa0\x3e\xa4\x08\x99\x2d\xf9\xed\xe2\x6a\xd2\x3d\xd4\x2d\xd1\x73\xbf\xf1\xb8\xa3\xd3\xd9\x99\x1e\x99\xf5\x46\x2c\xf1\xac\xa2\x91\xce\x70\x5b\xf6\x31\x29\x3e\x2f\x04\xe3\x5a\xa0\x68\x0c\xb0\x29\x4a\x80\xb7\xf4\xa3\x8c\x15\x8c\xbc\x09\xfb\x61\x7a\x65\xe4\xf6\xd6\xf3\xb9\xdb\xad\x8c\xea\x62\x80\x6e\x4f\x64\xf2\x5c\x59\xdb\x00\x58\x7c\x4e\x96\x2e\x72\xcb\x05\x49\xbe\xa3\x8a\xc8\x51\x9e\x9d\xaf\xe9\x9d\x52\x07\x66\x61\x5f\x0d\xa9\x47\x1e\xf1\x43\xf2\xb9\x29\x07\x1a\xbc\xaf\xe5\x33\x7e\xd5\x69\x5c\x66\x7f\xc3\x2a\xa8\xe4\xba\x06\x32\xc3\x65\x99\x2b\xad\x2b\x35\x7b\x2d\xee\x44\xbd\x3d\xc7\x9b\xf2\xac\x95\x05\x54\xa9\x7c\xe2\xca\x48\xe0\x50\x76\x02\x60\x83\xba\x9e\x14\xf1\xce\x62\xb1\x76\xc6\x15\xe5\x30\xb7\x7e\xb6\x7f\xd7\x22\x5e\xb2\x30\x25\x50\xb9\x34\x57\x10\xb5\xc0\x21\xbb\x6d\x74\xe5\x07\x4e\x8f\xbe\x2d\xc6\xa1\x79\x86\xfe\xde\x73\x2d\x73\xc1\xf2\x7a\x75\x6e\x27\xd0\x1f\x3c\xbe\x8e\x87\x7d\x50\x5a\xa7\x70\x98\xa6\xa3\xbf\x35\x08\xdd\x7b\xb4\xb0\xaf\x36\xe7\x39\x43\xbc\x4a\x2f\x2b\x21\x2c\x25\xeb\x74\x13\xe9\x21\x9d\xbf\xe1\x22\xae\x4d\x68\xb9\xf4\xab\x04\x76\x7e\x4e\x68\x7e\x83\x53\x3c\xeb\x9a\xf4\x3e\x7f\xd2\x0f\x69\x57\x5a\x24\x42\x9c\x7c\xd8\x6d\x02\x89\xd2\x2a\x71\xca\xce\x8c\xde\xb7\x93\xa1\x6c\x70\x43\x2b\xf6\x90\x07\xf3\xe1\xf2\x8c\xeb\x38\xdc\x2a\xd2\x48\x5c\xd5\x50\xab\x12\x3c\xdd\xb4\x1d\x82\x63\x4d\xe4\x9b\x56\x64\x2f\x2b\x69\x8c\xb3\xce\xd5\x11\xd4\x67\x9c\xb4\x0a\x33\x4e\x18\xfb\x5e\x1a\xbb\xb4\xa5\xc1\xfb\x0a\x61\x32\xa7\x86\x2f\x11\xfb\xf8\x9e\xd1\x95\x3e\x86\xb6\x05\x34\x62\x1a\x26\x00\xa9\x50\x65\x09\x51\x8f\xea\x80\x6b\xac\xaa\xd5\x87\x15\xd3\x2a\xbb\xed\x6d\x0a\xdc\x47\xf6\x2b\xfc\x04\xd1\x6e\x15\x8e\x39\x3f\x6f\x4a\xf9\xe1\x1c\xe1\x7d\xf3\x04\x6e\x4b\x47\x19\x3b\xdc\x61\x82\x60\x55\xc9\x66\x2b\xaf\x66\x82\xe1\x62\xdf\x71\x67\xab\x64\xa8\xff\x9f\x56\x51\x30\xc3\xff\x7f\x8a\x6e\x67\xca\x83\x0c\x70\x2d\x50\x8c\x21\xc3\x9b\xab\xe8\x7a\x00\xf4\x39\x38\xc9\xbe\x7e\xf2\xa4\x50\x19\xb7\x46\xd7\xd7\x17\x4f\x78\x25\xc3\x11\x35\x01\x86\x79\x3c\x98\x66\xc9\xb8\x61\x96\x21\x06\x34\xa5\x97\x48\x53\xe3\x35\xe4\x41\xb9\x05\x94\xfe\x5f\x51\x8f\xbd\x00\x58\xc7\x30\x84\x48\x04\xf5\xa1\xa0\x17\xbb\x32\xcd\xa3\x36\x82\x7d\xf6\xdd\x6f\x2e\xa8\xdb\xd2\x4e\xdc\xb2\x02\x40\xb2\x3b\xed\xb0\x27\x44\x2a\x8f\x60\xd1\x81\x2d\xca\x9d\x9d\x89\x14\xd5\xfd\x42\x2c\xd5\xc0\xe5\x6b\x7a\x04\xf0\x7e\x0e\xf2\xc5\x6d\xe3\x5f\xc4\xf3\x44\xd8\xd4\xc9\x9e\xbc\x81\x8e\x18\xe4\x26\xbe\x74\x1a\x68\xdd\xa0\x78\x1a\x60\xcf\x42\xf6\x49\xab\xdc\x50\x30\x37\xb5\xe1\xd0\x28\x26\xe4\x9c\x07\xbf\x70\xd4\x4b\x23\x7c\x49\x10\xc1\xd9\x46\xb5\xcd\x06\xdc\x90\x78\x83\x2a\x35\x7b\x76\x48\x13\x04\x92\x6c\x0e\xcd\x52\x57\x32\x6c\x60\x26\x7f\x32\xd1\x32\x31\xa4\x75\x24\xde\x67\xf2\xba\x3e\x9d\xb2\xd7\xe3\x51\xb3\x26\xee\xd3\x0d\x10\x9f\x6d\x0d\xf1\x00\x82\xf6\x5a\xdc\x63\x8d\xec\xb8\x21\x28\x85\xe3\x4c\xe0\x3d\xf4\x79\x81\xcf\x50\xcd\xa9\xba\x76\x8f\xe4\x59\x44\x6b\x88\x08\x07\x9a\xfe\xee\x2a\x6f\x43\xb1\xe9\x56\x79\xaa\x10\xbd\x9d\x80\x1c\x2d\x77\x29\x32\x68\xa5\x52\xd9\xef\x10\x47\x85\xe2\x23\x42\xfd\xef\xd8\xdb\xe9\xc3\x63\x5e\xbf\x79\x07\x11\x40\xac\xa9\xf0\x80\x53\x44\x2d\x7c\xf0\xe3\x31\xf6\x65\x6b\xf6\x4f\xe8\xcb\x1d\x89\x4d\x8e\x36\x00\xb2\x1b\xa9\x45\x5a\xf1\x1b\x20\x39\x4f\x33\xb4\x16\x12\xf9\xc4\x19\x2b\xf0\x47\xa8\x6b\x6b\x49\x43\x3d\x80\xc6\xb1\xa3\x74\xc5\xda\x3d\x1b\xfa\xb9\x00\x5d\xb4\x29\x92\x09\xb5\x04\x1a\xf2\xe2\xde\x1a\xf3\xe4\xa9\x44\xdb\x39\xed\xc1\x45\xc7\x09\xfb\x52\x0b\x1c\x95\xa8\x8d\x3c\x11\x2e\x90\x46\x0a\xbd\x11\x20\xbe\xd6\x02\xd9\x09\xa0\x7a\xfd\xe6\x9d\xcb\xbc\x3a\x8d\x94\xbc\x78\x7d\xed\xc3\x2c\x7a\xb8\x5f\x0a\x73\xaf\xea\xdb\xdf\xed\x7b\x3e\x1d\x8c\x0c\x8c\x27\xc2\x64\x4f\xac\xd9\xa8\x21\x74\x47\xd2\xbd\x1f\xd0\x81\xe2\x36\x7e\xfb\x51\x96\xcd\x87\x37\x65\xb1\xfa\x7d\xc4\x92\x4b\xfd\xe4\x71\x35\x1e\x38\x48\xfa\x60\xba\xd0\xd6\x47\x15\x77\x61\xb0\x9c\xe2\x51\x1c\x32\x2e\xf9\xf8\xd6\x87\x4f\x4c\x7d\x08\xb4\xe4\x11\xfa\x1d\x6a\x7e\xde\xa5\x26\x11\xe2\x49\x5e\xf6\x93\xd0\xce\xfc\xe5\x07\x23\xea\x92\x17\xaf\xed\xd9\x91\x42\xe6\xfa\xb4\xd7\x3a\xa2\xda\x9f\x3a\xb0\xfc\xbd\xea\xe8\x36\x78\x51\x75\x14\x11\x41\x9a\x26\x1a\xbd\x4d\x48\x77\x84\xe6\x79\x5e\x0b\xed\xb8\x09\x77\x7f\x08\xcf\x92\xed\xf2\xf5\xf3\x9f\x5e\x92\x03\x36\x06\x8d\x5b\x46\xf4\x72\x48\x78\x9b\xf8\x83\xb9\xcb\xd2\xc4\xe1\x14\xd6\xa9\x7f\x7d\x4d\xa1\x5f\x4e\x7a\x7c\x6c\xc6\x25\x39\xc9\xa2\x0b\x4c\xb3\xaa\x44\xe8\xdf\x94\x20\x60\x14\xa3\xac\xaf\x57\x57\x93\xee\x70\x76\x1c\xdf\x20\x0f\x81\xcd\xd0\x7a\xb6\x6b\xeb\x39\xab\x45\xa6\xea\xbc\x2b\x0c\x3d\x85\x45\x36\x09\x43\x44\x50\x66\x25\xcc\x3e\xda\x51\x0e\xc0\xe1\x6c\xff\xf1\x03\xc1\xd9\x72\x4d\x79\x99\x58\x08\x9e\x43\xb1\xab\x44\x38\xe8\x42\xaf\xdb\x2f\x11\x2f\xe5\x5c\x96\x62\x1c\x31\xe8\x8a\x22\x51\x5f\x40\x37\x3f\x57\xa3\xac\x99\xe5\x6a\xc9\x5d\xe3\x10\x1e\xc6\x2b\x13\xf9\xf3\x21\x78\x2d\x19\x94\x46\x33\xa8\xd8\xc8\xac\x69\x85\xee\x22\x02\x58\x12\xc0\x7b\x51\xc0\xdd\xa1\x1f\x39\xb0\xd1\x05\x21\x3a\x6e\x62\xf3\x0f\x6e\x70\xf0\x03\x73\xd6\x4f\x75\x5f\xd6\x5e\x7b\x9a\xfd\xc7\xf2\x32\x0c\x75\x42\x66\xea\xfd\x54\xb4\xd7\xca\xe3\xb6\xb5\x0e\xd3\xda\x7b\x5c\x3b\x46\xa3\x45\x4e\x24\x07\x39\x0e\xa8\xb9\x50\x08\xf3\x15\x65\x0e\x2d\xdd\x74\x74\x37\xd6\x37\x10\x2f\x57\x78\x67\x16\x02\x07\x80\xb9\x21\xd4\x0c\x3c\xb8\xfd\xbb\x43\xac\x38\x2d\x26\xae\x7d\x8e\xbb\x53\x7e\xf1\xfa\x3a\xe4\x2d\x8c\x38\x2e\x6c\x62\xd0\x6e\x76\x89\xe3\x4f\x6c\x88\x3c\x2a\xcb\xe3\xc5\xeb\xeb\x03\x10\xe7\xea\x9f\x2f\x5e\x27\x72\x38\x92\x4c\xf1\x7e\x88\xf5\x8f\x8d\xe4\x45\xb4\x44\x81\x7b\x6d\xc8\x2c\xde\x77\x36\x65\x4a\x0f\x2b\x2a\x88\x6a\xb4\x1f\x16\x61\x97\xf7\xcd\x7f\xfc\x82\x5a\xa7\x54\xba\xf8\x3a\x03\x42\xfa\x73\xab\xac\xbb\xeb\x82\xcd\xa2\xb8\xf7\x78\xc3\xc7\xeb\xdc\xb7\xbf\x78\x03\x20\x9e\xe9\xd7\xec\xb9\x66\xbf\xca\x32\x57\xf7\x9a\x51\x4b\xab\x62\x95\x16\xa6\xf1\x65\xc4\x01\x43\xb8\xaf\xfc\xe7\x8b\xd7\xba\x9b\x81\xfb\xd5\x0e\x2b\xa0\xd1\x46\x2d\xad\x80\xa1\x5b\x63\x24\x8f\x7d\xe2\x33\xf9\x42\x80\x88\x56\x92\xed\x3b\xc0\x5f\x6a\x58\xba\x85\xef\x05\x76\x88\x17\xaf\xaf\xa9\x4e\x18\xd7\xec\x35\xd4\x58\x28\x73\x87\xa5\x05\xee\x47\xc4\x74\x04\xbc\xf3\x59\x39\x6d\x1e\x0f\x8d\x97\x31\xbc\xce\x16\x98\x66\x44\x2c\x1c\xd7\x0f\xde\x95\xfb\x03\xa8\x9d\x71\x43\x54\x55\xb8\x52\x88\x2e\x7f\xf7\xe3\xcb\xab\x12\xca\x8f\x0c\x94\x26\xf0\xdc\x88\x5e\xeb\x70\xc5\x95\x69\x88\xdf\x09\x75\x08\x46\x58\x75\x67\x74\xe5\x6c\x28\x2b\x65\x5d\x25\x82\xf1\x85\x08\x3a\xf0\xb6\x2b\x43\xd0\xf9\x7c\x6d\x12\xbf\xc4\xb9\x8b\x31\x35\x02\xfa\x10\xdb\x12\x78\x6f\x41\x80\x6e\x31\x00\x80\xba\x75\x41\x00\x3f\x5c\xbb\xec\x41\xb8\x41\x74\x23\xbb\xe0\x89\x92\x3a\x40\x8f\x49\xd3\x77\xc2\x48\xc3\x0c\x08\x24\x56\xe9\x18\x27\x95\xfe\x5d\xb6\x49\x36\xe1\x4d\x4c\x3c\xdf\xae\x58\xc6\xf9\xc1\x45\x74\x00\xe2\xb1\x84\xf4\x3c\x66\x6d\x66\xc9\x10\x8b\xd3\x41\x44\xb5\x3b\xc4\x68\x79\xc5\x58\x85\xed\x0b\x58\xec\x20\x6f\x80\x58\xd7\xbb\xe8\xe6\x39\x61\xb2\x34\x35\xde\xf5\x2f\x8c\xa9\xd6\x89\x5f\xf8\x8a\x7d\x5f\xf3\x12\xba\xe9\x5e\x2e\x44\x76\xab\xbf\xc6\xb0\x03\xd7\x79\x90\xaa\x13\x61\x59\x54\x0b\xfe\xbc\xf2\xb9\xb6\xcb\x65\x53\x92\x33\xfd\x6b\x18\x91\xfd\xf6\x5a\xe5\x22\x96\xc7\xd1\x07\x29\xa5\x8d\xf8\x20\xb2\x10\x0f\x62\xcd\x3f\x5e\x61\xd5\xc6\xb9\xdd\xf1\x0b\xf4\x53\x98\x0c\xd2\xf5\xe0\x9e\x5c\xbb\x43\x16\xa5\x0d\x40\x26\xdc\x95\x83\x00\x59\x6d\x3c\x33\x18\x92\x7d\x2f\x66\x74\xbd\x07\x59\x74\xd6\x1e\xc1\x50\x6e\x8c\x26\xab\x8d\x66\x7f\xbb\xf8\xdb\x05\x1a\xac\x59\xe5\xfd\xc5\x7f\xbb\xf8\xdb\x53\xf8\xb1\xc9\x2b\xaf\x9d\xdd\xa5\x26\xd9\x36\x55\xad\x3e\x48\x91\x94\x3e\x66\xaa\x8c\xe2\x2c\xf0\x52\x02\x60\xaa\x39\xa4\x95\x90\x03\x32\x04\x95\x8b\xcc\xdd\x51\x04\x4c\x5b\x91\xc4\x35\x44\xaf\x71\x24\x35\x88\x23\xdd\xa7\x80\xed\x8f\x91\x6d\x09\x4e\xab\xc8\xea\xa2\xc5\xe1\x2c\x65\x17\x06\x90\xb4\x1d\x4f\xb6\xf7\x69\x9a\x53\x8c\xe4\x74\x7d\x07\x80\x1f\x3e\xaa\x47\x11\x6a\xf1\xc9\x04\xf0\xb3\xa6\x8a\x2c\x5b\xe1\x42\x4b\xfe\x81\x9a\x31\x42\xec\x69\xf0\xb9\xd6\x42\x5b\xcb\x1c\xf2\xdb\xa0\xd5\x0d\xc4\xe4\xc9\x7f\x37\xc1\x79\xd3\x3d\xcc\x4c\x36\xb4\x98\x8f\xf4\xc0\xa8\x95\xd3\xe4\x27\x5e\x38\x4d\xfe\xe7\xba\x39\xcd\xba\xb1\x94\xfe\x73\xd9\x1c\x67\xd9\x58\x9d\x34\x71\x21\xd2\xf9\x5a\x27\xeb\x4e\x4b\xc8\x02\x5d\xbf\xf5\xc4\xa7\xe2\x3f\x97\xd3\x47\xb2\x0d\x61\x84\xb8\x87\xa5\xcd\x5f\xab\x5a\x19\x95\xa9\xe2\x1b\x93\x55\x9f\x32\x9f\xe5\xb1\x61\xd1\x6d\xbd\xe0\x92\xd4\xfb\xde\x45\xb7\xcb\x82\xc3\xcc\x10\xbf\xe8\xa2\x72\x7f\x52\xb3\x25\xaf\x6f\x45\xce\xbc\x9c\x32\x48\x44\x80\xfb\x04\x5a\x12\xbe\xca\x15\x5a\x9b\xc0\x3e\xe4\x16\x24\xb3\x56\x05\x37\x56\x88\xa9\x32\x3d\x79\x43\x46\x78\xb0\x3e\xc2\x35\x0d\xbb\xe2\x9f\x4b\xfa\x8f\xb5\xa4\x9b\xfc\xcf\x25\x7d\xaa\x25\x0d\xd1\x97\x13\xca\xa2\x6b\xf9\x60\xd7\xad\x64\x8c\xda\x0c\xe5\x32\x22\xa7\xfe\x87\x95\x2f\xe0\xc3\xd3\xb2\x25\xb0\xb8\x36\xc5\x6e\x42\xeb\x16\xb8\xf7\x80\xbc\xfa\x96\xd8\x18\xc5\x64\x79\xa7\x6e\x05\x63\x4f\x00\x69\x87\x2c\x23\x89\x72\x1c\x7e\x02\x42\xfe\x84\x62\x2e\xa3\xf2\xda\xbe\x1a\x93\x15\xfd\x82\x32\x66\x89\x61\x1e\x98\x13\x34\x90\x1a\xab\x03\xb6\xb8\x00\x80\x21\x87\x8a\x69\xf9\x11\x0a\x6e\x44\x99\xad\x26\x50\xec\x49\x2f\x54\xd1\xdb\xc1\xc7\xd3\xbb\xfd\xbd\x76\x00\x1c\xe1\xa9\x10\x18\x78\x2c\x16\xf2\x66\x63\x60\xf3\xdb\xa6\x64\x4f\x2f\x2e\x98\x34\xde\x45\xe4\x2a\xd2\xf6\xb4\x6b\x89\x33\xbe\xe1\x96\x85\x37\x54\xbd\x8e\x32\xef\x97\x82\xfb\x2e\x81\x50\xc1\x57\x1a\x66\xf8\x2d\x5d\x4c\x78\x2f\x55\x6c\xc3\x3a\x23\xd9\x93\xc4\x67\xf6\xc7\x6f\xb9\x5c\x12\x5f\x36\x05\xf4\x96\x86\xde\x9a\x84\x37\x68\x3d\x5e\x19\xf0\x1b\xdb\xe1\xd2\x79\xf9\x26\x40\x28\x49\xe9\x77\x1a\x57\x1b\xf5\xf2\xb0\x8a\xe3\x8b\x0b\xb3\x98\xb0\xbf\x5f\x98\x05\x60\xf8\xf7\xbf\x9b\x05\xab\x44\x9d\x89\xd2\x48\x1a\x9d\x62\xb0\xbc\x26\x11\xb5\xe7\x86\x2f\xca\x86\x8d\x52\x58\x21\x67\xa2\xc6\x4e\xac\xc2\x44\xbc\xb6\xc4\x7e\x76\x81\xd4\xb1\x23\x46\x43\x78\xcd\xff\xc5\x45\x88\xd0\xf9\x7b\xfa\xce\x16\xe2\xe8\x0a\x34\x11\x86\x03\x82\x39\xf1\x19\x4e\xab\x4a\x4c\x42\x60\x86\xa5\x4c\x1c\xdb\x32\x42\x46\xfb\xd2\x71\xb3\x10\x19\xe2\x23\x42\xc2\x20\x2e\x73\x39\x09\xa2\xd9\x32\x76\x46\xcd\x11\xb2\x07\x3a\xf5\x6b\x66\xcd\xe5\x04\xde\x5a\xad\x18\xd7\x54\xc3\x35\x9d\x79\x12\xdd\xf2\xb3\x0f\x0c\x4b\x23\x5b\xd6\x12\x8b\xe1\x05\xb9\x01\xe9\x87\x58\x1c\x0a\x9e\x81\xdc\xde\x38\xd2\xc7\x61\x4b\x1e\xe7\xfe\x8b\x94\x64\xf3\xf2\xb2\xb6\xb0\x06\x86\xd6\x2a\x93\xb0\xf3\xf7\x90\x60\x30\x84\x08\xfd\xa9\xaf\xae\x7c\x10\x11\x44\xb5\x9b\xa6\x2e\xd3\x4b\x37\x88\x19\x84\xb2\xa9\xe1\x92\x1a\x56\xad\xab\xf8\xe0\xfa\x39\x25\x93\x1a\x51\xe7\xbf\x25\xa6\xe3\xc4\xf3\xe5\x50\x1c\xd1\x21\xc5\xb3\xc3\xc9\x78\xa0\x5d\xc5\x33\x06\x3a\x49\x28\xe8\x08\x07\xd7\xcd\xad\xb5\x91\x94\x7a\x04\x51\xf5\x25\xfd\x3a\xf2\x19\x2b\xcf\xce\x3c\xda\xc4\x62\xc8\xef\xa5\x82\x7b\xd0\xe4\x4d\x10\xd3\x49\xb4\x32\xc0\x56\xfa\xdb\x45\x1c\x57\x02\x3f\x59\x55\xf5\xee\xf2\xca\xfe\xee\x4c\xb8\xa4\x0a\xdd\x1a\x89\x1e\xb5\xf2\xa8\x6f\x5c\x20\x44\xbc\x2f\x33\x15\xd9\xc1\xaf\x5d\x2c\x4c\x00\xa5\xca\x20\x9a\x31\xd6\x27\x13\x4d\x7b\x20\xb9\xc2\xcc\x95\xa3\x4a\xa6\x1b\xe7\x23\x16\x4c\x37\x05\x2a\x58\x3e\x46\xf0\x26\x1d\xc9\xf3\xaf\xa4\x52\x47\x97\x7a\xb1\xe4\xf9\xc3\x97\x27\x05\x04\x2b\xd7\x68\x78\x9e\x69\x86\xe2\x43\x25\xf4\x61\x0f\xf7\x53\x8c\xb8\xca\x10\x8f\x20\x72\x5e\xd7\x46\xf4\xa8\x55\x13\x6d\x1d\xae\x50\x78\x57\x3f\x7b\xb9\x46\xe3\xbf\x4f\xb6\x31\x49\x2f\x92\x6f\x7a\xe1\x0a\xcc\xd8\x04\x20\x94\x9f\xea\x87\x9a\x4c\xd1\xcd\xe6\x68\x8b\xc2\x0b\xe7\x11\xad\x89\x84\x25\x07\x32\x26\x3c\x61\xb6\xb1\x25\x0e\x21\x57\x2d\x99\x4a\x74\xdf\x18\xb9\xea\x59\x72\x23\x29\xb5\x9f\xb9\xd2\x5e\x66\x30\x8d\xc4\x4e\x09\xa2\x1b\x59\x2c\x21\xe7\x38\xa8\xfc\x49\xe8\xa4\x08\x50\x3d\x69\xc2\x5a\x01\x49\xcd\xc7\x58\x39\x43\x16\x0e\xde\x94\x3f\x1e\x2b\xc7\x4f\x32\x94\x90\xdf\x69\x81\x38\x81\x76\x8e\x34\x8b\x7f\xc2\x76\x37\xc1\x91\x0b\xc3\x6a\x59\x8f\x9b\xaf\x4c\x06\xea\x48\x40\x21\x52\x50\x30\x12\x9a\xd3\x60\xe9\x01\x4a\x30\x73\xa1\xe4\xd4\x33\x81\x52\x3e\x7b\x62\xf4\x38\xc8\x0c\x08\x41\x7b\x20\x1f\x63\x4a\xc7\x41\x7f\x40\x72\x4e\x01\x5c\x50\xed\xfb\x11\xc4\x4f\x95\xe8\xee\x3a\x63\xb2\xa4\x7d\x8c\x97\x81\x81\xec\xd5\x95\x8e\xbd\x58\xc7\x50\x85\x41\xfb\x81\x32\xd4\x42\x63\x17\x9a\xf9\x5c\x96\x96\x60\xb0\xf5\x95\xbb\xf2\x5a\xdf\x4b\x28\xef\xd2\x86\x3a\x57\x75\xba\x6e\x3c\xcb\x77\x08\x0c\x6c\x2b\xc6\x4f\x1c\xd4\x4f\xe2\xf0\xae\xae\x5d\xd8\x6b\x10\x9e\x9d\x69\x87\xee\x73\x87\x6d\xa8\x58\xf6\x09\x66\xa0\xbf\xba\xfa\x64\xc7\x13\x1c\xb7\x20\x48\xc9\x7c\xd2\x67\x4b\x92\x5e\x89\xd7\x04\x14\x30\xa1\x58\x5d\xf4\x8e\xe2\xfd\xdc\x86\xbe\xa8\xd6\x3a\x8a\x92\xa9\x3e\xa3\x7a\x33\xb5\x08\xe5\x71\xec\x78\xb5\xab\xce\xe6\x2a\x37\xad\x52\xcd\xac\xa8\x93\xaf\x8f\xe7\xa6\x40\x5d\x28\xc7\x80\x65\x3b\xa8\x5f\x0a\xb8\x2c\x44\x69\xda\x36\x56\x82\x6d\x49\x4e\x43\x95\x63\x10\xf9\x6d\xd8\x19\x46\xd8\x66\x3d\xdc\x71\x1b\xc5\x27\x56\x4c\x3f\x19\x71\x54\x9d\xba\x08\xdd\x04\xf1\x25\xcf\x45\x5c\x88\x3c\xda\x1f\x61\x67\xc4\xad\xd1\x52\xcc\x5b\x82\xfd\x41\xd6\x48\xad\x38\x5b\x23\xa4\x98\xb8\x80\x69\x22\x21\x65\x51\x12\x42\x43\x53\x2c\x56\x71\xc2\x18\xb4\x6a\x4a\x24\x71\xd2\x3d\x77\x0f\xe0\xc0\x7c\xc9\xca\x2e\x12\xe0\xcc\xb1\x52\x96\xa9\x52\x8b\xac\x31\x92\xa2\xc4\x47\xd8\x83\x3b\xd8\x82\xc9\x19\xac\xdf\x1e\x8c\x6c\xc1\xae\x31\x98\xc6\xd5\x92\xcf\x99\x62\xbc\x44\xe2\xae\xee\x28\x9f\xad\xc2\x96\x36\xa9\xcf\xe8\x5c\xf8\x10\xfa\x33\xf5\x85\x5a\xe5\x97\x05\x27\xc0\x21\x54\x69\x50\x56\xd3\xf5\x1a\x92\xd0\xd9\x45\x4b\xa6\x1a\x32\x1a\xd2\x2d\xed\x34\x8f\x6b\x5f\xb5\xe7\x77\xe8\x58\xf5\xed\xa7\xf6\x68\xf2\x5d\xd5\xb7\x87\xda\x6b\x3b\x9b\xfb\xc8\xbe\xbd\xda\xa3\xbb\xc0\x21\xd5\x17\xcc\x27\x69\x46\xa9\x35\xab\xd2\x30\x1d\xf7\x4f\xb5\xe6\xd4\x5a\x9f\x6a\x3a\x8d\x5a\xfa\x4e\xa6\x15\xbe\xdd\xd4\xa0\xe9\x32\xe6\x8c\xbc\x76\xb9\x39\xdb\x68\x24\x6a\xc5\x90\x38\x48\xe2\x44\x62\x9f\xf0\x33\x26\xde\xfc\x47\x68\x15\x52\x14\x61\x14\x89\xf6\x8d\x47\x4d\x43\x6e\x5c\x65\x39\xe6\x1a\x26\x62\xdd\x63\x9e\x74\xaf\xb2\xa3\x26\xd3\xf5\x27\x35\x0f\xc9\x4a\x03\xcd\xbc\x63\x34\xf7\x04\x0e\x1d\xd0\x68\x76\x72\x1c\x8a\x45\xaa\x66\x2b\x3f\x1b\xe4\x7c\x77\x21\x23\x20\x2c\xc1\xf9\xf1\x5b\xd1\x94\xb8\x31\x30\xc9\xb0\xab\xec\xb0\x8f\x74\x2c\x6d\x1d\x89\xce\x06\x4b\x9b\x62\x10\x46\x6f\x35\xa4\xab\xc7\x59\xd9\x63\xb7\x1a\xaf\x56\xc7\x59\xd9\x63\xb6\x9a\x9e\x0d\x75\x8d\x81\xdb\x52\x8d\xeb\x0c\xdb\x2d\x35\x70\x98\x4d\x53\x1a\x59\x38\x86\x53\xf1\x36\x84\x88\x3f\x4d\xc2\xab\x9e\xe1\x16\x0f\x2a\x22\x18\x8a\xac\x03\xd9\xdb\x1b\x50\x8c\xbf\xcb\x01\xdb\x47\xbd\x77\x2d\xd6\x01\xa8\xdb\x58\xad\x9d\xad\x81\x84\xfe\x81\xad\xd6\x53\x2a\xb0\xc7\x6e\xc6\x6e\x52\x53\xeb\x55\x54\x8f\x7b\xbf\xd7\xdc\xdd\xd6\xd4\x75\xab\x79\xcb\x53\xfe\x46\xfd\xe3\x22\xb1\xb6\x3b\xe5\xef\xa8\x7f\xc6\x29\x99\x75\x0a\x06\x80\x8e\x57\x32\x4c\x7c\xa8\x64\x6d\xd5\x3b\xd5\xf7\xec\x55\x34\x6e\x5d\xef\xa8\x6c\xd6\x2b\x1a\xbf\x05\xad\x57\x36\x5b\xd9\x91\x08\xf3\x18\xca\x62\x0b\x63\x67\x7f\xf5\xe0\xd4\xc2\x80\x43\xf8\x63\xb1\x6b\x0e\xe5\x1d\x1c\xe9\x19\x4c\xec\x15\x3a\xe2\x1d\xcc\x2b\xe8\x92\x9d\xb7\x3b\x1e\xf3\xa3\xf9\x05\xd7\x59\x2c\x5d\xb7\xd2\x47\x72\x66\xfc\x0f\x71\x85\x1d\x41\x51\xc4\x66\xfd\x63\xb5\x1f\xfe\x74\x83\xed\xe0\x06\x8b\x8f\xfa\x87\x5c\xca\x61\x19\x77\x57\xde\xbe\xe7\x83\x78\x29\x02\xf4\x93\xba\x7f\xba\x9e\x9f\x6d\xd6\x59\xd8\x09\xb3\x06\xbc\x82\x71\x1f\xbb\x4d\x4e\x9d\x6f\x57\xde\xc3\x44\xea\x3f\xd4\x2b\x09\x9d\xf7\x92\x86\x25\x75\x74\x71\x82\x85\x6e\xf1\xf5\xb3\x64\xcb\x6f\xd5\xdb\x27\x50\xdb\x87\x98\x0e\xaa\x2d\x1f\xb4\xbc\x0d\xad\x50\x14\x39\x9b\x71\x2d\xb3\x10\x24\x0c\xe2\x38\xa6\xbb\x5c\x7f\x75\x35\x9e\x86\x1b\x5b\x63\x95\x97\x2b\x48\x3e\xe9\x56\xf5\xc1\x1d\xa9\x29\xf1\x6c\xb2\x50\xf7\x4c\x2c\x2b\xb3\x8a\x8b\xf7\x3c\xcf\x5d\x5c\x7b\xcf\x45\x63\xa7\x4a\xd0\x1d\x75\xae\x72\xea\x06\x60\xba\x7b\xc7\x10\xda\xed\x82\x7e\x31\x2b\x04\x3b\x49\x79\xbd\x81\xed\x10\xa0\x29\x06\xae\x74\xcc\x37\x11\xe1\x0e\xdb\x55\xc0\xb4\x80\xaf\xda\x20\x66\x2a\x84\x74\x87\x03\x3f\x20\x06\x38\xc3\x56\x90\xa9\x1a\xbd\x83\xb9\xd3\x62\x6e\x1a\x0e\xc9\x29\x7b\x53\x66\xee\xde\x10\xba\xa9\x50\x31\x1e\x57\x22\xd1\x2c\xa8\xd7\xb9\x9a\x77\xc2\xea\x01\xa2\xa3\x45\xee\x09\x01\xad\x54\x70\xce\x5e\xe9\xcc\x65\xad\x4d\x94\x87\xe2\xfb\xae\xd0\x94\x08\x0f\x3b\x2b\xe7\xcc\x49\x0a\x7a\xb6\x29\xeb\x95\x59\x4b\x25\x01\x63\x8f\x21\xf2\x28\x76\xcb\xa6\x30\xb2\x2a\x88\xa5\xdb\x2f\x03\xfc\xde\x2a\xb5\xd6\x5c\x76\x5f\x09\xe6\x5e\x11\xb1\x67\x8d\x61\xa5\x42\x81\xb0\xa4\xf3\x5d\x54\x22\x42\x01\x71\x57\xf6\x08\xde\xed\x4f\xd6\xb3\x42\x5a\x8c\xf7\x0b\xe5\x2a\x2c\x14\xe0\x2c\xf1\xac\x73\xd3\x8b\x22\x5c\x46\xc9\x01\x6e\x4d\x58\x08\xae\x1d\x2f\x66\x6e\xb4\xd6\x42\xba\x95\x83\x68\x0e\x0d\xe0\xd7\x42\x84\xe7\x0b\xac\x43\x1b\x64\xcf\x81\xec\x5d\xd0\x84\x67\xb1\x4a\x33\x19\xd2\xe1\x61\xc5\x46\x70\xf1\x67\x17\x19\xd3\x01\x0c\x95\x24\x4a\x75\x8f\x4b\x71\x80\x9e\x7b\x4b\xea\x4b\x87\x6b\xb7\xda\xec\x36\xe2\x09\xe1\x3f\xa6\xd3\xa7\xbb\x0c\xf0\x47\xd7\x89\xa5\x0f\x26\x29\x29\x3b\xd5\x62\xdd\x83\x70\xb3\x15\xec\x52\xec\x37\x43\x25\xf2\x38\x95\x77\xe5\xbe\xc7\x48\x7c\x71\x07\xf7\x2d\xb0\xdd\x41\x30\xa1\x4e\xa1\x63\x6a\x8b\x46\x2d\x96\xd6\xa5\x85\x21\x5e\x5d\xdd\x7d\xee\x03\xca\xb8\x17\xb1\xee\x90\xd8\x7b\xc9\x6f\x26\x83\x03\xc6\xaa\x73\xb6\xc2\xce\xde\x7e\x1e\xd8\x97\x1b\xfb\xf4\x85\xdd\x21\x2e\x59\xbc\x65\xe7\xee\x0d\xb2\x81\xb5\xab\x7e\xe2\x2e\xad\x53\x94\x77\xb2\x56\x25\x34\xca\x9c\x4b\x51\xf4\x35\x39\xb1\x27\xa7\xdf\xc3\x97\xd1\x45\xbb\xb5\x0b\x9b\x25\x98\x7b\x77\x92\x27\xc0\xee\x78\x2d\xe1\x41\x27\x6f\x73\xc4\x25\x57\xb7\xda\x15\x48\x51\x0f\x74\x68\x8d\x0e\x6b\xc8\x65\x1d\xe2\x2f\xde\xb7\xee\xd1\x9e\xb2\xe7\xd1\x1c\xf0\x2d\x6f\x41\xc1\x29\x42\x5a\x80\xce\x52\xf2\xdb\x52\x34\xec\xf8\xac\x3c\xac\x76\xb5\xe4\xd5\x36\xf4\x77\x93\xea\xdd\x44\xc6\xf2\x00\x57\x58\x00\x7a\x20\xf2\x27\x30\xe3\x74\xbb\x98\xbe\x45\x11\xfe\x74\x86\x40\x23\x82\x29\x12\xf5\xc7\xd6\xfd\x33\xef\x90\xff\xb0\x24\xc7\x2a\xbc\x56\xed\x9e\xdf\x8a\xd5\x78\x32\xcf\xb9\x2c\xa2\xe0\xcb\xf0\x3c\x00\x64\xb7\x62\xb5\x81\xac\xcf\x8d\xb1\xaf\x26\x51\x9c\x2d\x50\x56\xcc\x1d\x34\x8a\xab\x8c\x8f\xbc\xe8\xac\xe5\xb2\x18\x53\x27\x79\x34\x5d\xd6\x6f\x0f\xfd\x14\xb1\x86\x41\x48\x05\xed\x01\xb5\x0f\x2d\xa6\xec\x0a\xfb\xe2\x2d\x42\xce\x73\xf4\xf0\x3b\x61\xb2\x85\xb3\x5e\xe1\x44\xe9\x87\xa7\x54\xde\x39\x24\x9a\x7a\x6d\xfc\xed\x0a\x8b\x9f\xbb\x0b\xf7\xe4\x1b\x0d\xcb\x86\x3a\x86\x92\x41\x6c\x3f\x57\xb5\x8f\xe2\xf0\x1b\x4a\x18\xc8\x29\x72\x6d\xb8\x91\x99\xeb\xa2\x59\xe6\x3e\x24\x03\x44\x1f\x58\x98\xaa\x21\x5f\xd4\x33\xda\x12\x2e\x43\x51\xa8\x11\x1a\x7e\x13\x5f\x5f\xa8\xfb\xf2\x9e\xd7\xf9\xf3\xab\x57\x93\x54\xbf\xab\x9a\x5d\x5e\xfd\x0c\x68\x2e\xc5\x52\xb9\x24\x68\xdc\xe6\xa2\x5b\x86\x7e\x19\x70\x70\xe3\x3a\x7a\xee\xd4\xeb\xd7\xeb\x99\xdd\xdc\x00\xe8\x34\xab\x9a\x27\x38\x8c\x37\xb2\xbc\xef\x20\x3c\x23\x55\x60\x55\x80\xde\x3a\xc7\x3f\x41\x89\xcc\x09\xe8\xcd\x6b\xa7\xe9\x32\xcb\x21\xc5\x1b\xc7\x72\x3f\x51\xc2\xa6\x95\x5e\xc0\xad\x5f\x17\x71\x68\x85\x88\x29\xaf\x3b\xab\xa5\x9c\x50\x7c\xcf\x2b\xb9\x15\xa7\x9c\x43\xe0\x48\x1c\x73\xe0\x3b\xcc\x0a\x5b\x27\x36\x3f\x47\xbf\x79\xff\x56\x7e\x60\xf6\xd0\xdc\x3e\x06\xee\x40\x63\x4c\xd9\x5b\x28\x6a\x23\xe9\xe1\x5b\xc8\x92\x20\xb3\xc6\xce\x6a\xa7\x8d\x7a\x90\xc0\xee\xf0\x11\x2a\x28\x80\x71\xa7\x07\x37\x5e\xf2\xe6\x61\x8d\xd0\x18\xc3\x5e\xab\x2b\x54\xf0\x84\x4f\xe0\x68\x79\x27\xd1\x80\x0a\x7c\x41\x4b\xfb\xf4\xbc\xb1\x68\xfd\xfc\xea\xc5\x4e\xbc\xa9\xf0\xdb\xf5\x5a\x69\x5f\xce\xd8\x01\x22\x21\x1f\x34\x02\xd9\x03\x0b\x79\x09\x09\x83\xa1\x1e\x35\x64\x6b\xee\x26\xf3\x96\xae\x7d\xe0\x42\xf2\x0e\x65\x06\x1e\x61\x33\xd8\x73\x31\xd8\xcf\x5f\x0f\xa0\x3e\x7e\x7d\xa0\x3d\xdc\x59\x23\x47\x62\xeb\x95\xca\xdf\x89\x65\x55\x40\x31\xca\x9e\xfe\x3b\x83\x3c\x8c\x3e\xd4\x1b\xfa\xf7\x80\x67\xd4\xbf\xbb\xc1\xdc\x73\x6e\x0e\x4b\x92\x30\x40\xa8\xf0\xed\x8e\x19\xd4\x22\xde\x59\x60\xd8\x96\x29\x0e\x29\x98\xab\xa6\xcc\x43\x33\x16\xd7\x2a\x72\x08\x7c\x5f\x5b\x17\xd7\xd2\x05\x8f\xd7\x01\x12\x1a\x75\xba\x85\xc3\x16\x26\x59\xa5\x72\x4f\x90\x35\x1c\x19\x61\x6f\xf7\xb1\x01\x4d\xee\x96\x3b\x26\x79\x71\x7b\x93\x3b\xfa\xbc\xcf\xe8\x4e\x1e\x77\xcc\xee\x78\x4a\xe3\x0d\xef\x04\xe3\xf1\xa6\x77\x3c\xd8\x48\xe3\x1b\x20\xbe\x6b\x7d\xdb\x32\xbf\x0f\xc4\xdd\x1f\xad\xe5\xf2\xd6\xce\x7a\x12\x8a\x28\xf7\x70\x57\x67\x0b\x91\x37\x85\x2c\x6f\x7e\x8f\xbe\xe9\xb4\xf9\x8d\x1e\xc1\xba\x20\x63\x4d\x7b\x43\x9a\x2e\x27\xa1\x46\x17\xf4\xee\xb7\x7a\xce\xbd\xc5\x78\x55\x15\xd2\xae\x8c\x11\xc7\x7c\x74\x9a\xc0\x80\x35\x0c\x68\xc1\xdf\x89\x1a\x4b\x85\x07\x69\xa0\x45\x1f\x5e\xa4\x62\xb7\xb1\x40\xb4\xa1\xe0\x35\x80\x03\x13\x9e\x4e\xc3\xd0\xe0\x99\x86\x39\x86\xda\xd3\xae\x18\x86\xbb\x46\xf0\x57\xa6\xd1\x2b\xb5\x70\xb3\x74\x1e\xd9\x00\x7e\x44\xa8\x72\xe0\xc3\x13\x30\x3a\xdf\x23\x5e\x6d\x97\x3f\xbe\x25\xea\x49\xec\x4a\xb5\x36\xea\x06\xd6\xfa\x0f\xaf\x6a\x91\xcb\x0c\x17\xe7\xb5\xa8\x25\x2f\x7e\xf7\xd3\xd2\x3d\x40\x19\x29\xd6\xa8\x0b\xbd\x35\xc0\xef\x7d\xeb\xf3\x8d\x35\x96\x3c\x16\xd1\x2d\x10\xb8\x2f\xa4\xbb\xda\xa5\x31\xfd\xcd\x31\x95\xb3\xf9\x89\xdb\x75\x0a\xe5\x76\x78\x26\x47\xdd\x98\x44\x54\xac\xfc\x44\xd7\x10\x11\x0e\x14\x7e\x89\x43\x0b\x14\x14\x9f\x03\xd0\x12\xe8\x65\x2d\x86\x6b\x82\xef\xfc\xbc\xb5\xd0\xd4\x13\x43\xce\xfd\x98\x1b\xab\xba\x87\x9e\x73\xa0\x5c\x28\x07\x15\x26\xf0\xff\xdc\x7e\xcd\xee\xfe\x5f\xd8\x76\xca\x44\x93\xba\x3d\xac\x83\x05\x45\x34\xb8\x0f\xa1\x2c\x1e\x06\x07\x08\xc7\x16\xba\x62\xa3\x89\xdb\xb5\xeb\x7b\x87\xc4\xe0\x70\x02\x64\x1c\x82\x07\x3b\x4e\xb8\xf5\x5f\xfb\x6b\x14\x8b\x70\xe7\x6e\xfc\xe0\x9c\x2c\x95\x79\x10\x6e\xc6\xe3\xee\xe2\xd3\x4c\x28\x4b\x4c\x72\x0e\x64\xc0\xc0\xc7\x1d\x84\x76\x3d\xbc\xaf\x76\xd9\x94\x5d\x4b\xba\x33\xb5\x2b\xb6\xb6\x92\x82\x61\x65\x01\x3f\xd4\xa4\xd2\xd8\xb9\x3a\x96\x87\xe8\x0c\x2a\xb4\x11\xf8\x7f\x58\x9e\x41\x5d\xc7\x1f\x94\x36\xae\x02\x01\xbb\xa2\x00\x3d\x44\x10\x1f\xbe\xba\xd2\x51\x98\xe6\xac\xc1\x7b\x3a\x0a\xcb\x71\x0e\x03\x7c\x91\xfd\xf5\x62\x0a\xff\xff\xe9\x01\x19\x8e\xe4\x83\x1b\x21\x1c\x33\x53\xe5\xbc\x90\x99\x25\x8d\xb9\x17\xa2\x44\xd5\x08\xdc\x83\x90\x95\x45\x3c\x23\x17\x72\xe8\x11\xc7\x1b\x01\xc2\x13\xde\xa5\x72\x0b\xeb\x25\x25\x6c\x49\x3e\x34\xa6\x97\x72\x13\x18\x28\xd0\x8b\x28\x38\x09\xe6\x2a\xd8\x9a\x34\x7f\x7f\x71\x08\x2d\x7e\x40\x84\xe6\x80\x25\x84\xdc\xd8\xed\xdb\x52\x1f\xef\xa5\xda\xb4\x56\x73\x37\x0b\x2a\x36\x0f\x56\x71\x2d\xaa\x5a\x68\x6c\x73\x59\xb8\x6c\x77\x1f\xe0\x33\x26\xcb\x7d\x77\x09\xf2\x52\x6d\x09\x42\x58\x26\x52\x55\x2a\x73\x7e\x04\x95\x80\x12\x42\x12\x59\xaa\xf1\x02\x92\xb2\x6a\x11\x30\x76\x52\xb3\xa7\x60\xb4\xee\x93\x28\x01\x35\xd1\xc9\x71\x7a\x74\x2c\x04\x16\x98\x63\x74\x1d\x28\x28\xa3\xb5\x78\x30\x66\x5a\xe5\x57\xd5\xc2\x9e\x03\xa0\xb8\xa3\xb5\xf3\x42\x5f\xde\xb1\x5c\x72\x9f\x7b\x2e\x85\xdf\x5e\x42\x8d\x4e\xa9\xca\x2b\x4e\x61\x1b\x75\x53\x6a\x17\x66\x77\x2d\x30\x52\x0d\xed\xcb\x18\x13\x17\xa8\x04\xfd\x67\xd6\xb3\xe1\x3b\xd5\xd4\xac\x10\x77\xa2\xd0\x74\x02\x82\x6b\xa3\x78\x08\x34\x9a\x3d\xbb\xa3\x97\x6b\xa9\x6a\x69\x56\x13\x8a\x48\xd5\xa6\x96\x19\x1d\xfd\xb0\x75\xf1\xe5\xd5\xcf\xce\x0f\x89\x61\x00\xbc\x29\xb3\xc5\xd4\x7f\xc9\x9e\xb2\x73\xf6\x59\x64\x5c\xe9\x8a\xdf\x97\x51\xc8\xc3\x5c\x91\xc1\x36\x5b\x85\x8f\x3e\x0f\x85\x32\x3a\x78\xbe\x75\x5d\x8a\x01\x1c\x39\x02\xf0\x1e\x8f\xba\x79\xa1\xb4\xfb\x1e\xc1\xee\x83\x31\x67\x97\x54\x2a\x88\xda\x6b\x36\xf6\x6f\x21\x24\x2b\xf0\x73\x1f\xa9\x08\x6b\x17\x03\xbd\xaa\x18\x2a\x83\x18\xd4\x4d\x67\x56\xd7\xb0\x4d\xde\x40\xe0\xa3\x23\x67\x95\x74\x07\xa3\x56\x56\xb8\xa0\xf0\x46\xae\x04\xbf\x5a\x7c\x12\x03\xeb\x01\x9c\x07\x14\x0c\xe6\x30\x77\xad\xda\x01\x37\x6b\xf0\xa9\xfb\xf6\x50\x10\x01\xe3\xf5\xb8\x55\xb0\x92\x5c\xd3\xf1\x6b\xc7\x60\x47\x44\x56\x2c\xb6\x29\x8d\xcc\x78\xc1\xb0\x66\xf2\x01\x38\x93\xce\xd6\x27\xcd\x45\x2b\x73\xb6\x4a\x86\x1d\xc7\xb0\xe4\x8b\x6d\x38\xe5\x74\xfb\x8e\x9c\xb2\x46\x75\xcc\x28\x87\x87\x9b\xd8\xc1\x78\x14\xee\xf3\x7e\x51\x45\xb3\x84\x36\xce\x1f\x0c\xcb\xb9\xe1\x13\x36\x93\x25\xaf\x57\xf0\x47\x1f\x97\x8c\xaa\xf9\x4d\x72\xa9\x1a\x7d\x10\xdd\xec\x93\x3b\x05\x3b\x66\xdd\xc1\x30\x3b\xf9\xa2\xdf\x25\x37\x97\xbe\x02\x76\xec\x78\xf3\xc8\x03\x87\x62\x74\xe2\xb8\xbe\x28\x4c\x02\xcb\x2e\xe7\x21\xea\xae\x14\xf7\xc5\x2a\x76\x1c\x85\xa2\xbd\x0e\xf7\xa5\x6a\x4a\xe3\xc7\x5f\xf2\xaa\x12\x3e\xa4\x8b\xfa\x96\x81\xfa\x8f\xfa\x83\x05\xbc\xcf\xf4\x66\x24\x69\x3f\x0b\xa5\x58\x2c\x8a\xde\xf6\x56\xa5\x11\x2e\xca\xd4\xfe\x00\xe8\x88\x1c\xd8\xaf\xd7\x35\x25\x7b\xb6\xf9\x0e\xf6\x3d\x4e\x71\xb3\x94\xb8\xf6\x41\x51\xf3\x29\xf4\x44\x8d\x13\x14\x05\x2c\xe5\x05\x7d\xaf\xd7\x4b\x0b\xca\xc6\x96\x6e\xf4\xf5\xd2\xd2\x13\x31\xd3\x2f\x0a\x68\xbf\x6f\x2b\x0e\xeb\x44\xe1\xd7\x38\x10\x16\x29\x6f\xbf\x8a\xeb\x20\x84\x18\x2c\x67\x6e\x47\xef\xb5\x85\x24\x12\x90\x18\xec\xb0\x90\x24\xd8\x3c\x2f\xb4\x42\xe7\xb1\xfd\x49\x1a\xb1\xfc\xab\x7d\xe7\xd3\xc8\xe9\x8c\x8a\xcc\x43\x72\xd4\x6c\x95\x1b\xe7\x4c\xd4\xb5\xaa\x23\x59\xb5\x04\xf1\xf0\x76\x08\x80\x19\x2d\x8c\x2e\x4c\xda\xd2\x7e\xc0\x4e\xef\x8a\x60\x6f\xe4\x51\x08\x58\xdd\x4f\x55\x5d\x76\x62\x41\x26\xa9\x8b\x05\xa8\x03\x4c\xd1\xf6\xa8\x8e\x23\x61\x94\x5e\xd5\x80\x6b\xd6\xf3\x92\x1e\xa2\x2d\x08\x9a\xd5\xa8\xa8\xfd\x60\x14\x50\xb2\x59\xe4\xdd\xed\xc3\x21\x34\x20\x8e\x47\x9b\x03\xf3\x22\x47\xa9\x17\x20\x68\x51\x36\x45\x8e\xf1\x52\xce\x29\x2b\x69\x13\x85\xd7\x96\xe0\x61\x80\x97\xe9\xc4\xe8\xd4\xe9\xc5\x87\x2f\x3f\xff\xfc\x84\xa2\x33\x61\xa5\x2a\xcf\x6b\xa5\x0c\x6b\x74\x6f\x9b\xd8\x7d\x24\x89\x6b\x0f\x7e\x27\x95\xf6\x30\x52\x45\x2e\x3d\x08\xa1\xd6\xe0\x37\x8a\x28\x14\x2a\xa2\x37\x32\xff\xe6\xe9\xc5\xc5\xc5\x18\x31\x3c\xa4\xe6\xc5\xf1\x40\x8e\xc8\x6d\x40\x4f\x61\x20\x08\x50\xf6\x42\x16\x7b\x31\x7d\xfb\x5c\x38\xf1\xaa\xf9\x03\xc8\x9a\x9f\x06\x38\x21\xfb\xd2\xea\xf7\x91\x36\xcf\x19\x9a\xe9\x4f\x34\xcc\x61\xba\x91\x9c\x54\x04\xbf\x73\x0c\x04\x41\x82\x8d\x31\x47\x27\x27\x6e\xb2\x21\x48\xd3\x32\xf2\xec\xe2\xc3\xe7\x17\x17\x67\x7b\x0a\xa2\x47\x73\x7b\x7d\x38\xa8\x0b\xa3\x3a\x11\x23\xf5\xe1\x4c\x38\x79\x85\x6d\x1d\x4d\x8a\xf6\x4c\xe9\x82\x70\x73\x3b\x8f\x35\x79\x68\x58\x4f\x95\x1a\x8c\x64\xb8\xe5\x5b\x5c\x2a\x51\x2f\x25\x24\xa9\x6d\xd1\xcc\x63\xb7\xb5\x71\xa4\xfd\xdb\xaf\x03\x02\xbf\x7d\x44\xc6\xc3\x09\xbd\x2b\xcd\xe5\x6c\x4a\x1e\x9b\x93\x28\xf5\x48\xe0\x07\x51\xba\x6b\x65\x3d\x96\x73\x7f\xdf\x3b\x66\xef\x3f\xd9\xbe\x7f\x72\x45\xec\x05\x10\xc2\x6e\x8c\x58\xfa\x11\x3f\x52\x9d\x3c\x5e\x3c\x37\x69\xf0\x51\xda\xdb\xb9\xbf\xb6\x96\xea\xb5\x12\x8d\xac\xd9\x41\xaa\xd7\x49\x74\xb8\x11\x1b\xa5\xc1\xc7\x68\xef\x4d\x99\xc4\xa9\x06\x7f\x30\xed\x7d\x5c\x13\xba\x67\x2d\x05\xa3\xfa\x0f\xb9\x72\x36\x9b\xdf\x63\x4d\xef\x44\x26\x0f\x72\x02\xf4\x91\x49\xe3\xcc\xef\x87\x33\xbd\x7d\x72\xab\x43\x9f\x57\xbd\xb1\x2f\x23\x25\x53\x96\x6d\x88\x3a\x66\x9d\x2f\x43\xf0\xd1\xf9\xac\x42\x12\x30\x37\x8b\xb6\x33\x11\x59\xed\x34\x63\x0f\x36\x58\x0a\x94\xe2\xe3\x08\x68\x3c\xe0\x51\x75\x50\xe3\xea\xa5\x8e\x60\xea\x28\xaf\xe3\x11\x7c\xd4\x8f\xc5\xeb\x18\x30\x7c\x10\xa7\xe3\xc1\xa4\x20\x8a\xfa\x26\xba\x4c\xa2\x8b\xcf\x75\xb2\x90\x04\x59\x13\x49\xd7\xe5\x02\x65\x55\x83\x50\x77\x72\xdc\x3c\x77\x5a\x1c\x27\x04\x5d\xe0\x40\x73\x47\x13\x40\x39\xbe\xc6\xa0\x36\xbb\xc5\x74\x9e\xc1\xbe\xe1\x7d\x6d\x5c\x96\x76\x3b\x90\xd6\x8c\x74\xf9\xb6\x61\xee\x53\xbf\x56\x31\x52\xdc\x85\x69\xf7\xf7\x34\xc0\xd4\xae\x70\x63\x1c\x6a\x10\xf8\x86\x93\x20\x50\xa4\xe1\x1d\x5f\x89\x29\x5b\x47\x7a\xf3\x4a\x6e\xc9\x50\x0a\xf2\x3b\x34\x47\x03\xd8\xc7\xcd\x53\xc2\x73\x47\xa6\xba\x0c\xa5\x47\xc5\xd5\x24\x0d\xec\x90\x7c\x8d\x52\xf5\xb0\x35\xea\x63\x65\x6c\x42\x81\x1d\x58\x9b\x26\xd2\x3d\x46\xe6\x1e\x61\xd5\x46\xdc\x75\x62\xfd\xc8\xf9\xbb\xdd\xda\x8d\xee\xa7\x5b\x00\x1e\x17\x87\xfd\x66\x31\xf1\xd6\x7c\x3b\xcd\x72\x4f\xb6\x77\xb2\x36\xff\x9a\x55\xcd\xa7\x2e\xbb\xca\x0d\xea\xf7\x65\x17\x81\x46\x7f\xd0\xe1\x58\x3c\x5e\xf1\x88\xf7\xea\x68\xeb\x75\x98\x7b\x1e\xbb\xf7\x93\xcc\x2a\xb6\x95\xba\x18\xb1\xb5\x63\xcc\x7e\x9f\x24\xf9\xe2\x2f\x69\x68\xe0\x10\xd7\x4f\xb9\x6f\x9c\x50\xf6\x70\xd8\x8e\xf8\xc5\xd8\x7c\x74\x12\xd8\xda\x80\xd2\xfd\x64\x48\x0e\x63\x88\xa2\xde\x6e\xdb\x1a\xd8\xb2\xf0\xcc\x3c\x42\xa9\x3d\x32\x51\x74\xb9\xa0\x7b\x0a\x5b\xa5\x72\xac\xa9\x58\x16\xab\x9d\xce\x9c\xa7\x92\x97\x2b\x9a\xef\x0e\xb6\x8a\xfb\xf4\x71\x6d\x62\xb1\xdb\xff\xe2\xf3\x8b\x8b\x1d\x19\x69\xd7\xf8\x8b\xe8\x8e\x55\x95\x14\x8b\x15\x39\xf5\x4f\x73\xc4\xf0\x41\xdd\xe4\x94\x82\x5f\xc9\xbf\x1d\xdc\x6f\xe7\xf5\x39\xfd\xdf\x1a\x49\x58\x27\x05\x18\xc7\xbb\xb5\x24\xac\x93\x02\x0c\x6c\x1c\x96\x84\x9d\xae\x37\x51\xb1\x1c\xde\x41\xbe\x9b\xb4\x05\x37\xe8\x9e\xb2\xb6\x24\x21\x43\xb6\x58\xa8\x27\x17\xb4\x3d\x35\x48\x10\xd4\x8e\x6f\x38\x08\x67\x4b\xb8\x5c\x10\xfe\x8e\x02\xd6\x27\x5c\xad\x0b\xd4\xc7\x73\x7f\xbe\x9b\x80\xf9\x58\xcc\x52\x19\x48\x85\xd8\xf5\x5c\xdd\x05\x64\x09\xb7\x54\x79\x9c\x64\xf1\x88\xa4\xcc\x55\x13\xb5\xb2\x86\xc5\xe7\x04\xcf\x16\xee\xee\x0e\xcb\x26\xf8\xa9\x0c\xe8\xac\xf4\x72\xa4\x2b\x56\x31\x31\x76\x90\xae\xa8\x89\x61\x0c\x69\xb6\x62\x3c\xcf\x31\x77\xb9\x14\xf7\xd1\x33\xe7\x83\x75\x09\x25\x89\x0f\xbe\xf5\x6a\xb7\x2e\x59\xc7\x05\x7b\x9a\x0d\x95\x04\xa7\xa0\x3c\xf8\x3d\x64\x0f\x40\x7c\xf4\x62\x87\xb3\x58\xb7\x4b\xfa\x80\xcc\xae\xc4\x11\x09\xb6\xb3\x98\xda\x6d\xe3\x08\x48\x5b\xce\x30\x1b\xb8\x47\xc4\xbc\x78\xe1\x1b\x1d\xc9\x6a\xc5\x02\x1f\x4d\xba\x5e\x2e\x2b\xb3\x7a\x21\xeb\x09\xbb\x5e\xf0\xda\x0f\xa1\x7d\x82\x9c\x27\xe7\x5a\x25\xe7\xc0\xf8\xcf\xad\xcd\xee\xb6\x52\xa7\xbb\x7b\x07\x48\xcf\x39\x9b\xeb\x82\x58\x8e\xa5\x35\x40\x4a\x76\x26\x68\xf8\x33\x7f\x4b\xe5\xc6\x5e\x40\xa9\xa1\x9e\x21\x93\xa3\x7e\x88\xe7\xaf\x1c\x6f\xcc\xbd\x62\xb3\x46\xaf\x66\xea\x03\x93\x4b\x7e\x23\x62\x24\x2d\x74\x07\x3c\x32\x03\x43\x84\x43\x28\x33\xe0\x01\x2e\xb9\x8c\xa8\x49\x20\xee\xb9\x34\xae\x61\x8a\x15\xbd\x66\x16\xbd\x92\xd7\xaa\xa2\x12\x0e\xc0\x5f\xec\x62\xdc\x82\xc3\x7d\xaf\x64\xa2\x6f\xce\x0d\xef\xa4\x24\x7c\x31\x28\x22\x40\xba\xf7\xb9\xac\x87\x25\x63\x29\x72\xd9\x2c\xdd\xf1\xaf\x65\xce\x7f\xf9\xf9\xe7\x5b\x09\x46\x4b\x28\xfe\xea\xae\xd9\x27\x16\xd2\x84\xc6\xc0\xf3\xff\x3e\xb1\x3a\xa3\x05\x25\xb9\xea\x0b\xe6\xd1\x05\x5d\x94\x33\x7a\x11\x8c\x15\xe2\xac\x2c\xc3\xbd\x1d\x71\xe1\x1e\xf2\x4c\xc3\xdf\x83\x81\x04\x61\x6f\xe9\x5c\xdf\xc3\xf0\xe7\xf5\xbd\xb5\xcc\x6a\x3a\x33\xd0\xed\xe3\xaa\x0a\xc1\x2d\xcb\x6a\xae\xfd\x01\x9d\xae\x02\xd3\x30\x18\x17\x37\xb3\x9f\xad\xe5\x62\x78\xd7\x1b\xf3\x13\xa6\xea\xd0\xcb\x44\x43\xa9\xaa\x27\xec\xfb\x57\x2f\xc6\x2b\xa9\xf1\x12\x88\x6e\x8d\xae\x00\x6e\x11\x0a\xb3\xa5\x3c\x02\xb5\x3f\x3d\x90\xdd\xbf\x51\x1a\x81\xad\x67\x38\xd9\x33\x4b\xcd\x33\x2c\x74\x77\x36\x69\x45\xab\x74\x45\x75\x27\x31\xf5\x45\x12\xfa\x45\x75\x17\x31\x8d\x23\xbf\xfb\x45\x75\x5b\x31\x45\x88\xdb\x1d\x0b\x36\x89\x29\xc0\xf4\xa2\x0a\x0f\xd1\x51\x07\x62\xf6\x8d\xa7\xfb\x31\x84\x78\x40\x8d\x7e\xf9\xe5\xa1\xc4\xf6\xcb\x2f\x1f\x93\x1a\xfd\xf2\xcb\x07\x53\xa3\xf0\x9f\x3f\xd5\xe8\x48\x35\xfa\xe5\x97\x93\x23\xe9\xd1\x2f\xbf\xfc\x48\xf4\xe8\x97\x5f\x3e\x88\x1e\xed\x93\xd3\x3f\xf5\xe8\x6e\x7a\xf4\xab\xaf\xbe\x3a\x90\xd8\x7e\xf5\xd5\x57\x8f\x48\x8f\x7e\xf5\xd5\x57\x0f\xa4\x47\x3f\xe0\x7f\xfe\xd4\xa3\xe3\xf4\xa8\x15\x9b\xa3\xa8\x51\x0b\xf8\xa3\x50\xa3\x56\x54\x4f\xaf\x46\xfb\xc5\xf4\x4f\x35\xfa\x30\xa7\xfa\xee\x89\xfe\x54\x42\x3b\xe2\x44\xff\xe7\xe9\xfb\xa0\xa7\xef\x03\x09\xca\x47\xa1\xdb\xe0\xa8\xbd\xa3\xfc\xb8\x5c\xfb\xc3\xe8\xa1\x83\xe4\x2a\xf5\xc8\x0f\x40\x7c\x3c\x7a\x68\xcf\x63\x71\xf7\x48\xfc\x08\xf4\x90\x3b\x12\xff\x79\x7c\x3d\xe8\xf1\xf5\x40\x82\xf2\x71\xe8\x21\x7b\x54\xdd\x51\x7e\xfe\xd4\x43\xa7\x3f\x56\x76\x8f\x94\x0f\xaf\x87\xc0\x4e\xf7\x0d\x87\xfa\x05\xc9\xbe\xcb\xf5\x9f\xc7\xc0\x5d\x8e\x81\x07\x12\x98\x8f\x42\x1f\x79\x59\xda\x5e\x8e\x50\x1d\x6d\x94\xa5\x3f\xcf\x69\x3d\x7a\x29\x54\x71\x1a\x2f\x69\xf4\xbd\x2a\xa3\xe0\x6a\x18\x21\x6e\x00\x1f\x02\x90\xeb\x5a\x64\x14\x0a\x77\x6a\x07\x58\x2a\x43\xfe\x28\x3f\x5a\x1f\x9d\x62\xe7\x3a\x95\x42\xd9\x8f\xd3\xb8\xa4\x5a\x0c\x76\xcc\x0d\x71\xab\x27\x60\xf0\x78\xfd\xb2\xcf\x4e\x14\x71\xde\x39\x95\xf6\x8d\x34\xec\xea\x06\x4c\xe5\x38\xbe\x0a\x60\xbf\xd6\xbc\xaa\x44\xed\x97\x48\xc8\x2a\x26\x4e\x4f\x58\xa9\x58\xcd\x7b\x1b\xd0\x77\xc5\xe3\x9e\xc0\xb5\xb6\x1e\x3b\xf9\x8c\x37\x5a\x00\x24\xab\x77\x73\x19\x6a\xef\x2e\x44\xc9\x1a\x4d\xe9\x09\x3e\x5d\x38\x2a\xbc\x3d\xaa\x00\xc4\x17\x17\x71\x1f\xc5\x5f\x08\x01\xcb\xc8\x2f\x58\xed\xca\x1a\x53\xab\x20\x17\xba\xaa\xa3\x34\xea\x9e\x38\x9b\x69\xe8\x68\xf0\xfa\x0d\xb5\xae\xb8\xe7\x12\x78\x67\x71\xa5\x41\x3a\x11\x31\x9f\xf5\x14\x72\x45\x52\x05\x8e\xbc\x27\x52\x8d\xe6\xcc\xb5\xc8\x6a\x61\x5c\xf3\xa8\x1e\x26\xb9\xfa\xe3\x7b\x33\xca\xd5\x31\xdf\xd0\xdd\x03\xf1\x89\xb2\x3a\xda\x68\x75\x2a\xbb\x42\xf8\x50\xdc\x25\x02\x03\x90\x28\x6c\x4e\x1b\x5e\x63\xbb\xfc\xb5\x73\x5d\xe3\xf4\x3d\x28\x23\xae\x6a\xf5\x2f\xac\x26\xd0\x29\x40\x51\xe1\xa3\x4d\xd1\xb9\x01\x42\xa6\x96\x33\x59\x8a\x3c\x4a\x1b\xb1\x4f\xa0\xce\x42\xa6\x96\x95\x2a\xc1\x0c\xc1\x4a\x25\xfc\x16\xe9\xd2\x54\x18\xe4\xe5\x07\x83\x48\xcb\xdf\xae\xfc\xdf\xbf\xef\x1e\x45\x99\x36\xba\xaa\x3c\xa2\x2e\x8e\x93\x9a\xea\x42\x2b\x0a\xcb\x0a\x3d\xa1\x85\xe9\xba\xe9\x42\xb1\xd8\x28\x7a\x14\x20\x85\xc6\x6a\x59\xd5\x0c\x34\x8a\x6c\x3d\xf1\x5d\x38\x7d\x8a\x49\x3b\x7e\x17\x2a\x2b\x18\xec\x67\xde\xc2\xc4\xf5\xf4\xf5\xf6\x5c\x02\x3b\xa4\x0f\x43\x81\x99\x7b\x51\x14\xf6\x7f\x07\x10\xe8\x06\x44\xf6\x87\x8f\x8e\x57\xbe\x9e\xaa\xef\x1d\xfb\x37\x8b\x58\xa7\x86\xcd\x96\xd5\x79\x63\x91\xdb\xa6\x4e\x2f\xee\x64\xc3\x55\x33\xb6\x6e\x68\x62\x16\xb5\x48\xc2\x1a\xe1\xd7\x48\x41\x5b\xf4\x8b\x15\x94\xe7\x86\x79\x92\xc8\xb7\xe6\x1a\x67\xa9\x5d\xfa\x86\xc7\xe1\x8a\xa7\x44\xad\xe1\xca\x72\x58\xf5\x05\xdb\xba\x9f\xfd\x46\xb8\xc1\xf8\x6f\x2d\x8a\xcb\x56\x7f\x6e\x6b\x4f\xc0\xbf\xce\x9f\x9e\xa1\xb4\xfa\x59\x07\x5a\xbb\x56\x2c\xf8\xc4\x0f\x32\xf1\xd1\xc4\x83\xd2\x9d\x2e\x2f\x2f\x8c\x6d\x48\x49\x14\x7a\x67\x5c\x9a\x67\x34\xae\x1b\xb3\x1d\xa3\xec\xc7\x75\x95\x43\x5a\x8b\x6a\xca\x5e\x20\xa1\x7a\xc7\xf1\x82\x98\xa4\x11\xfa\xf9\xb9\x16\xd5\xdd\xc9\x85\x89\x75\xf8\xbb\xd3\xba\x1a\x68\x3b\xbc\x76\x61\x6d\x69\xfa\xf6\x2d\xa9\xb1\xa5\xae\xf6\x8c\x75\x8f\x05\x72\x48\x47\x9f\x85\xaa\xe4\xb8\x89\x2a\xea\xef\x18\x8b\x65\xdc\xb8\x2d\xb2\x33\x81\x06\xd3\x8d\x72\x69\xcf\xc8\x68\x90\xce\x5b\x95\x67\x74\x03\xa1\xee\xf3\xa6\xb0\x4b\x99\xb4\xb0\x4b\x6d\x6a\x9f\xb6\x66\xf1\x1d\xc6\xe9\xd8\x3d\xfa\xbe\x7c\x6f\x46\xef\x53\xc5\xec\x08\x4c\x8f\xd1\x49\xea\x8c\x31\xac\x33\xf6\xc7\x66\xfb\x36\x79\xa1\x7b\x73\x3e\x5e\x5f\x07\x29\xd1\x7b\x2c\x1d\xd0\x5a\xfb\xde\xc7\xf6\xf9\xa9\x05\x22\x4e\x10\xa4\x36\x1b\x87\xca\xdb\x03\x81\xc2\x5c\xd4\x5d\x7c\x29\xfb\x0a\x9e\xef\x25\x71\x64\x71\xdb\xb9\x12\xee\xc9\xf7\x97\x77\xed\x6a\x65\xbc\xd0\x2a\xa9\x9b\x18\x55\x80\xae\xb8\x59\x8c\x13\xc5\xae\x18\x06\xab\x09\x0b\xa8\x41\x15\x01\xe7\x66\xf8\x18\x94\x16\xd2\xe4\x21\x94\xd7\x91\xca\xda\x3e\x88\x1e\xdb\x20\x6f\x0e\x62\x28\xb2\xb7\xaf\xbc\xa1\x21\x9c\xca\xdc\x4e\x3a\x91\xe4\xed\x0f\xaa\x13\x4f\x69\x8b\xb5\x84\xfa\xe3\xb2\xcc\x36\x2a\xcc\x58\xe0\x0e\xa8\x30\xd1\x63\x72\x00\x01\x3e\x9d\x60\xb5\x6a\xc2\x42\xc9\xd3\x83\x08\x56\x4f\x79\x58\xe7\x24\x31\xae\xe3\xe2\x2e\xe5\x61\xb7\xf5\xc1\x8d\x11\x28\x9f\x9c\x1c\x24\x26\x08\x8b\xb9\x57\x51\xfb\x41\xbf\xb3\x40\x29\xd7\xcd\xee\x81\x96\xe8\x64\xfd\x26\x9f\x97\x23\x3b\x58\xb4\x0a\xb7\xad\x18\xbb\xaf\x38\x6c\xae\x1f\xdb\xc7\xff\xe3\xf5\xaf\x3a\x86\xee\x28\x73\xab\xc3\xed\x98\xda\x7b\xcf\xa2\x86\xf3\xf6\xcb\x52\xdc\x3b\x2f\x4e\x8f\x5e\x40\xe5\x81\xdf\xa5\x3c\x05\xec\xc8\xc7\xd5\xaf\x52\x9a\xe0\x7c\x42\xaf\x58\x54\x31\xd9\xc2\xb9\x91\x50\x32\x57\x11\x94\x67\x47\x66\x7d\xe4\xa2\x1d\x5b\x34\x36\x00\x89\xdd\xd7\xa7\x28\x1b\x3b\xde\xe7\xde\x76\xac\xe3\xc6\xbd\x87\x73\xbd\xc3\x4b\x17\xa7\x15\xd6\xb9\x9b\xe4\x51\x1d\xe1\x51\xcd\x80\x1d\x98\x3b\xa2\x14\xe5\x6e\xdc\x3d\x4c\x09\xd9\x47\xcf\xdf\x4e\x11\xca\xc7\xc4\xe0\xd1\xb5\x64\xb7\x67\xf1\x01\xab\xc9\x3e\x6a\x1e\x0f\x14\x93\x7d\x84\x5c\x3e\xca\x4a\x3e\x68\x59\xd9\x8f\x81\xd1\x8f\x7a\x3d\x47\xc5\x65\xb7\x29\xec\x39\x8a\xed\x0f\x5f\x56\xf6\x21\xc5\x03\x8f\x87\x57\x3f\xb7\xaf\xba\x43\xdf\xe2\x39\xb4\xf0\xa4\x7b\x6d\xfb\x96\x03\x5b\x0b\x08\x64\x59\x57\x98\x76\xf3\x91\xa0\x43\xdf\xc7\xad\x6b\x4e\x27\x84\x0f\x53\x5f\xf6\x4f\x51\x34\x1f\xc3\xce\x37\xa6\xd0\xec\x28\xb9\x3b\x60\xa9\xd9\x47\xbd\xc9\x55\x9d\x3a\x90\x8f\x89\x9d\xbb\x79\xe8\x7b\xd8\x7a\x82\xc2\xb3\x0f\xc9\xe6\x77\xf1\x2a\x75\x91\xd6\x6e\xa9\xc7\xce\x28\x8b\xe9\xf8\xdb\xc8\x44\x38\x50\x74\x36\x0a\x48\xa8\x3c\x1d\xf1\x6e\xd9\x68\xf3\xf1\xdc\x48\x3e\x12\x79\x3d\x66\xf1\xda\x3f\x85\xf5\x4f\x61\xed\xd4\xae\xdd\x59\x5a\x8f\x5e\x05\xf7\xe1\xc4\x15\x7e\x8b\x0a\xc8\x42\x05\xd3\x11\x61\xb4\xbd\x45\x70\x37\x6f\xad\x8c\x3d\x8f\x3e\xa4\xe2\x94\xa5\x0b\x1f\xdc\xb0\x02\x5c\x90\x21\xc5\xeb\xce\x55\xed\x97\x41\x04\xf5\x41\x84\x0c\x8b\xab\xee\x2b\x60\x47\x29\x75\xfb\xc0\xb2\x85\xd5\x63\x51\xac\x7c\xc5\xf8\x41\x16\xb7\x2b\xdd\x6e\x90\x28\xf6\xa3\xa3\x3b\xdb\x5f\x98\xe0\x67\x04\x78\x74\x19\xba\xf6\x51\xe8\x69\x7c\xf6\x36\xb1\xd9\x18\xc9\x3e\x2a\x30\x9b\xc9\x32\x4e\x5c\x3a\x56\x60\x36\xc5\xd6\x77\xa2\xb2\xc3\x8d\x1a\xdb\x27\x2a\x1b\x83\xb2\x39\x0d\xb3\x11\xea\x60\x4c\x36\x11\x8e\xee\xb6\xfc\xe4\xe8\x67\x19\x55\xdf\xdd\x3e\x00\x9b\x80\xb4\x22\xaf\xdb\x31\xce\x51\xf4\xb5\x1f\x75\x43\xe8\x75\x7b\x34\x8f\xa4\x13\xe4\x74\x56\x51\xdc\x75\x3a\x42\x97\xf6\xc9\xf9\xb8\x13\x74\xdd\x9e\xd0\x21\x22\xae\x11\xe6\x16\xab\x64\xe7\x60\x6b\xc2\xfe\x01\x22\xad\xd7\xdc\xc5\x23\x52\xe1\x76\x96\x22\x31\x08\x57\x27\xa4\xde\xa5\x71\x2b\x56\xdb\x87\x5e\x93\x03\xa5\xff\xfe\xdd\x42\x1c\x8e\xcb\xe8\x86\xae\xb1\xd9\xca\x0d\x7e\x70\x76\x77\x99\xed\x0b\x8a\xb9\xd8\x94\xb9\xfe\xbe\x56\x4d\x75\x3c\x8e\xc7\x91\x34\x9d\x20\x5c\xe8\xe6\x8d\x18\x1c\x29\x90\xed\xa0\xa2\x92\x14\xdd\x58\x70\x3d\x1c\xe4\xf6\xf9\xc5\x84\xcd\xf5\x0d\x91\xd6\x17\x21\x7b\x7a\x71\xf1\x14\x23\x01\xb4\xa8\xdd\x8f\x21\xd0\x48\xe6\x56\x8a\x36\xc7\x7e\x7b\x95\xb7\x83\xdc\x9d\xd3\xd1\x24\x4d\x8f\xc6\x58\x90\xa3\x25\xc9\xee\x57\x8c\xe1\x40\xca\x6d\xfc\xa1\x7a\x17\x39\x3f\x51\x80\xf9\x11\x54\xdf\x90\x10\x7f\xf8\xfc\xe2\xc2\x05\x92\x41\xd3\x82\x8d\x16\xe6\x2e\x22\x09\x10\xdb\xc7\xe5\x7d\x8f\xca\x38\xf1\xfd\xb3\xf6\xf7\x90\xbc\x6d\x82\xcc\x77\x96\xb7\x03\x47\x98\x9f\x72\x5f\x7d\x17\x59\x4f\x49\xf8\xa4\x73\x33\xef\x11\xff\xdb\x16\x3c\x6f\xc6\xf6\xea\x43\xfc\x3f\xd7\xe8\x23\xee\xa7\x7e\x42\x41\x39\xb9\xaa\xea\x86\x93\xff\x31\xb4\x96\x8f\x2f\x4f\x85\x8b\x36\xb8\x90\xd0\xe0\xb5\x03\x76\x58\x3b\xb6\x78\xb1\x5e\xf9\x3a\x41\x11\x9b\x93\xca\x70\xc8\xbf\x1f\x1f\xe5\xbb\x4e\x82\xd7\x84\xf8\xf2\xd3\xc4\xf6\xee\x6a\x24\x06\xe9\x1b\x17\xe7\xbb\xd9\x2b\xb8\x69\x73\x5d\x1f\xe1\xbb\x93\x7c\x1e\x50\x78\x48\x54\xbc\xe8\xec\x94\x3b\xef\x80\x8c\x74\xcb\xec\x73\xf0\xdc\xd6\x2d\x93\x88\x8d\xf3\xd2\xb8\xd0\xe0\xa1\xb9\x6e\x9f\x3b\x0f\x10\xc1\x55\x93\x3a\x6a\xf6\x70\xd2\xa4\x89\xf2\xa9\x43\x63\x67\x27\xcd\x16\x29\xf2\x63\x9d\x34\x1b\xf3\xe3\x77\x75\xd2\xa4\x4b\xef\x88\x4e\x1a\x92\x95\x81\x5e\x5c\xed\x15\xd2\xe3\x97\x99\x24\x7a\x07\x12\x1c\xe0\xd6\x4a\x96\x41\xaf\xc0\x6c\xec\xaf\xba\xda\x50\x12\xc8\x0d\x18\x16\x8f\x23\x2d\xdd\xa0\x59\x25\x4b\x58\xd4\xe2\x86\xd7\x79\xe1\x1a\xcd\xaa\x39\xe3\x91\x2a\x23\xac\xc4\x07\xa9\x61\x33\x5a\x83\x5e\x40\x6d\xa7\xc8\x88\xb6\x9c\x76\x47\xb2\xda\xcf\x8f\xa1\xa7\xdd\x85\x1c\xeb\xef\x54\xd9\x47\x9d\xeb\x7a\x2a\xd7\x6c\x3e\x91\x3b\x5d\x30\xd0\xb8\x2d\x5a\x0f\x9d\x26\x75\x76\xf9\x42\xb8\x88\x83\x71\xbf\x90\xd9\xc2\xfb\xde\xb9\xd6\x2a\x93\x61\x09\x07\x22\x62\x11\xf5\x2a\xd9\xd4\x70\x07\x0a\x3d\x3f\x69\xc7\x88\x56\xe6\x56\x6e\xa8\xa7\xcf\x0e\x24\xd1\x23\xbc\x8b\x5d\x99\x5c\x6f\xcf\x1e\x42\x88\x7a\x64\x64\x93\x7c\x90\x11\xb2\x9d\x8c\x74\x34\x49\x2a\x1e\x2d\x95\xd9\x2b\x22\x66\x98\xaf\x3d\x3c\x45\x8d\xb9\x83\x7b\x71\x77\x45\xe5\x3c\x5f\xe8\xd2\x0b\xee\x2e\x4a\x9c\x3b\x28\xeb\x23\xcf\x62\xbf\x07\xe6\x90\xde\xc5\xa3\xc9\x0c\x7e\xdb\x69\xd0\x7b\xf1\xe1\xf3\xcf\x2f\x7a\xfa\x20\xa4\x89\x88\xfe\xe4\xe1\xa6\x89\xbf\x0f\xa4\x06\x9d\x5c\x10\x9d\xaf\x71\x86\x96\x90\x93\xc3\x13\xb8\x78\x0e\x50\x02\x76\x9f\x45\x70\x60\x49\x6f\x4b\xb6\x77\x29\x7f\x64\x12\xbd\x31\x0e\xa7\xcf\x78\xdc\x6e\x13\x5d\x23\x98\xad\x9d\xcf\x9f\x7c\x22\x0d\xb9\xb5\x64\xa2\xb5\x75\x9c\xf3\xf8\x76\x02\x48\xfe\x9c\xc3\xcb\x9d\x73\x14\xed\x77\x8c\x3a\x8e\x90\x6d\xe3\x23\x8c\x94\x5e\x27\xc2\xab\x2d\x5b\xe1\x40\x9f\xc0\x3f\xa8\x59\x75\x60\xc6\x9f\x42\x05\x25\xa2\x70\x58\xbf\xe1\x29\x05\x05\x77\xcc\xcd\xfa\x09\xa7\xb9\xdd\xe6\xb9\x49\x86\x00\xe6\x1a\x39\x1a\x2c\x36\xf1\x58\xbc\x84\x3b\x09\xe7\xf6\x55\x00\xd6\x0a\x68\x8f\x5b\xd0\xbb\x04\x8f\xa5\xa6\xec\xb9\xb2\x4f\x02\xf5\x08\x11\x94\x65\xd7\xfd\x17\x09\x45\x4f\xac\x7d\x27\x12\xa5\x2d\x75\x33\x85\xf5\x71\x5b\xe2\xa7\x53\x37\x60\xaf\x0c\x1e\x8c\xd9\x67\xd7\xcd\xec\x8a\x9b\xc5\xd7\xec\xad\xe0\xd0\xf6\xdc\xf9\x28\x01\x09\x1e\x2a\x05\x3b\x7f\xf7\xd9\x5a\x96\x37\x33\x58\x9d\xcf\x8d\x5a\xca\x8c\xdd\xd7\xd2\x74\xcb\xdf\x7a\x89\xc6\x97\x75\x38\xd2\x87\xc1\xc0\x31\x1c\xeb\xa2\xf5\xbc\x0f\xee\x32\xef\x56\xce\x78\x89\x0b\x7e\x70\x42\x3d\x26\x33\x1c\xd9\xd9\x3d\xef\xb6\xc0\xe7\x0e\xdd\xad\x0c\x0c\x9c\x15\x04\x83\x7a\x8f\x4c\x2e\xef\x64\xde\xf0\x82\x32\x10\x64\x19\xa1\x3f\xe6\xdc\xee\x6a\xeb\x3a\x7c\x3e\x22\x8e\xe2\x0e\x64\xe9\x70\x05\x8d\xf9\xe7\xc1\xdf\xd4\x0e\x70\x7f\x44\x1c\xc7\x18\xe0\x42\x2b\xd6\x68\x38\x8b\x20\x1c\x78\x04\xc5\x84\xa5\x8e\x2e\xa3\xd0\xf2\x95\xdb\xb6\xc9\x58\x2b\x24\xee\xc2\xe4\xb4\x82\x12\xc7\xbb\x9e\x40\x54\xdc\x70\x47\x5c\xfb\xf1\x8c\xfe\x43\x57\x7f\xfb\x96\xec\xa8\x2c\x0d\x83\x1d\x8f\xa7\x61\x8c\xff\x50\x8e\x26\x16\xcd\x51\xd9\x49\x23\x1d\x8f\x97\x34\x40\xcb\x1c\x0f\x7e\xf4\xc3\x31\x92\x98\x18\x6e\x57\x8f\xc3\xc8\xbf\xfc\x7f\x01\x00\x00\xff\xff\x97\x8f\xf3\x10\xa5\x9f\x02\x00") + +func testConformanceTestdataConformanceYamlBytes() ([]byte, error) { + return bindataRead( + _testConformanceTestdataConformanceYaml, + "test/conformance/testdata/conformance.yaml", + ) +} + +func testConformanceTestdataConformanceYaml() (*asset, error) { + bytes, err := testConformanceTestdataConformanceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/conformance/testdata/conformance.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsFlexvolumeAttachableWithLongMount = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x56\x6f\x6f\xda\xc8\x13\x7e\xef\x4f\x31\x5d\xd0\x4f\x4d\x45\x20\xe1\x57\xa9\x52\xa2\x54\xc7\x85\xe4\x8a\x4a\xa0\x0a\x34\xbd\xea\x38\x45\x8b\x3d\xb6\x47\xb7\xde\x75\x77\xd7\x21\x5c\xc4\x77\x3f\xad\x6d\x08\xe6\x5f\x93\x3b\xbf\x63\x77\xe6\x99\x67\x9e\xf9\xb3\xd4\xde\xb4\xa6\x24\x5b\x26\xf6\xbc\x1a\x5c\xaa\x74\xae\x29\x8a\x2d\xb4\x4f\x4e\x3f\xc0\x38\x46\xf8\x9c\x4d\x51\x4b\xb4\x68\xa0\x93\xd9\x58\x69\xd3\xf4\x6a\x5e\x0d\xfa\xe4\xa3\x34\x18\x40\x26\x03\xd4\x60\x63\x84\x4e\xca\xfd\x18\x97\x37\x0d\xb8\x43\x6d\x48\x49\x68\x37\x4f\xe0\xad\x33\x60\xe5\x15\x3b\x3a\xf7\x6a\x30\x57\x19\x24\x7c\x0e\x52\x59\xc8\x0c\x82\x8d\xc9\x40\x48\x02\x01\x1f\x7d\x4c\x2d\x90\x04\x5f\x25\xa9\x20\x2e\x7d\x84\x19\xd9\x38\x0f\x53\x82\x34\xbd\x1a\x7c\x2f\x21\xd4\xd4\x72\x92\xc0\xc1\x57\xe9\x1c\x54\xb8\x6e\x07\xdc\xe6\x84\xdd\x17\x5b\x9b\x9e\xb5\x5a\xb3\xd9\xac\xc9\x73\xb2\x4d\xa5\xa3\x96\x28\x0c\x4d\xab\xdf\xbb\xbc\x1a\x8c\xae\x8e\xdb\xcd\x93\xdc\xe5\xab\x14\x68\x0c\x68\xfc\x91\x91\xc6\x00\xa6\x73\xe0\x69\x2a\xc8\xe7\x53\x81\x20\xf8\x0c\x94\x06\x1e\x69\xc4\x00\xac\x72\x7c\x67\x9a\x2c\xc9\xa8\x01\x46\x85\x76\xc6\x35\x7a\x35\x08\xc8\x58\x4d\xd3\xcc\x56\xc4\x5a\xb2\x23\x53\x31\x50\x12\xb8\x04\xd6\x19\x41\x6f\xc4\xe0\xd7\xce\xa8\x37\x6a\x78\x35\xf8\xd6\x1b\x7f\x1a\x7e\x1d\xc3\xb7\xce\xed\x6d\x67\x30\xee\x5d\x8d\x60\x78\x0b\x97\xc3\x41\xb7\x37\xee\x0d\x07\x23\x18\x5e\x43\x67\xf0\x1d\x3e\xf7\x06\xdd\x06\x20\xd9\x18\x35\xe0\x63\xaa\x1d\x7f\xa5\x81\x9c\x8c\x18\x38\xcd\x46\x88\x15\x02\xa1\x2a\x08\x99\x14\x7d\x0a\xc9\x07\xc1\x65\x94\xf1\x08\x21\x52\x0f\xa8\x25\xc9\x08\x52\xd4\x09\x19\x57\x4c\x03\x5c\x06\x5e\x0d\x04\x25\x64\xb9\xcd\x4f\xb6\x92\x6a\xba\x5e\x1a\xbb\x72\x06\x9a\x1e\x50\xbb\x24\x31\xc7\xe7\x42\xcc\x21\x40\x43\x91\x2c\x34\xb3\x68\x2c\x70\x10\x4a\x46\x90\xa8\x4c\x3a\xf5\xc0\xf8\x28\xb9\x26\xe5\xd5\x60\x16\x93\x1f\x83\xcf\x25\xf8\xdc\x35\x09\x87\x07\x25\xb2\x04\x9d\xef\x14\x21\x40\xeb\xca\x18\x38\x3b\x81\x05\x82\x8b\x46\x12\x52\xad\x22\x97\x7e\xd3\xf3\xbc\xeb\xfe\xd5\xef\xf7\xdd\xaf\x37\x37\xdf\xef\xfb\xc3\xdf\x2e\xea\x4f\xd5\x83\xb3\x63\xd6\xb2\x49\xda\x0a\x05\x3e\x1e\x07\x59\x92\xcc\x9b\x42\x45\x6c\xe1\x79\x77\x9d\x7e\xaf\x7b\x7f\x33\x18\x77\xaf\xee\x7a\x97\x57\x17\xa1\x52\x2e\x37\x6e\x5d\x58\xe0\x62\xc6\xe7\xae\x3f\x6c\xa6\xa5\x01\x25\x11\x1e\xb8\xa0\xa0\xe4\x11\xe0\x03\xf9\x08\x46\x01\x87\x80\xc2\x10\x35\xae\x4e\xbd\x1a\x98\x58\xcd\x5c\xb6\x59\x0a\x79\xef\x9a\x6c\x6a\xf0\x47\x96\xdb\x14\xb2\xf9\x5c\x88\xb2\x74\x06\x38\x4c\xb3\xc8\xcb\xf1\xb9\xc5\x1b\x17\xa1\x9b\x43\x0d\x75\x97\xf0\xed\x11\x3c\x79\x50\x7e\xcf\x7c\xeb\xa7\xab\xc3\xcb\x4e\xbf\x7f\x51\x6f\xaf\x7e\x53\x08\x7f\x00\xab\xaf\x6c\x19\xbc\xb9\x00\x56\xdf\xc8\x98\xc1\x9f\xe7\xae\xb4\x72\xe5\xb7\xfc\x84\x8a\x80\x3d\x4d\x98\xb1\xdc\x66\x66\xc2\xce\x26\xec\x9a\x93\xc8\x34\x4e\x58\x63\xc2\x12\x34\x86\x47\x98\x9f\xe7\x79\xb0\xfa\x93\xa3\xb0\x60\xae\x2f\xd1\x77\xcd\x5e\x0a\xc4\xea\x4f\x1b\x51\x17\xac\x01\x91\xb2\x6b\x06\x6b\x57\x13\xb6\x60\x5b\x6c\xf0\x91\x2c\x9c\xac\x8e\x43\xf2\x16\x9e\x27\x54\x54\xd1\x25\xd5\x24\x6d\x08\xac\xfe\x8e\xc1\xc7\xff\x9d\x3a\x93\x00\xa7\x59\xd5\x08\xfd\x58\x01\xab\xbf\x75\x2a\x1f\x41\x6e\xfa\xd1\x31\xa8\xb6\xcc\x82\x39\xef\xa2\x0f\x2a\xee\x39\x20\xb0\xb2\x43\xea\xbf\x3c\x53\xdd\x21\xd8\x28\xf3\x7d\x34\x26\x17\xac\xc8\x35\x3f\xde\x25\x48\x25\xeb\x32\xdb\x9c\xff\x3e\x06\xc5\x4d\x85\x41\x0d\xc6\xc3\xee\x10\xc8\x98\x0c\xe1\xfd\xfb\x0f\xff\xff\x50\x0e\x90\x1b\x99\x94\x1b\xb7\xce\xbf\xdc\x81\xe4\x09\x36\xf2\xb5\xbc\xde\xc7\x2f\xca\x63\x27\xc7\x19\x27\x1b\x2a\xbd\x5f\xac\x8a\x41\x85\xf1\xce\x4e\xde\x37\x03\xd5\x6e\xae\xa2\xfe\xcb\x32\xfc\xbc\x00\x64\x8a\x00\x18\xec\xca\xec\xf9\xf6\x35\xad\xb0\xf4\x99\xb0\x33\xab\x33\xdc\x5d\x78\x95\x17\xa7\xa0\xbb\xb3\xfe\xeb\x06\xfb\x44\x6d\xbf\x56\xd4\x0a\x6a\x05\xf2\x4b\x67\xfc\x69\xbd\x4a\xc9\x5f\x01\x69\x38\x4e\x21\x57\xd1\xdd\x2e\xe0\x63\x2b\xc0\x87\x96\xcc\x84\x80\xb6\x1b\xc0\x95\x6d\xde\x67\xc7\x16\x6c\x92\x86\x06\xa4\xdb\xa4\x2f\x70\x33\x02\x31\x85\xd3\xf6\xc9\xc6\xf0\x7e\x42\x21\x14\x84\x5a\x25\xe0\x56\x7a\xf1\x62\xbc\x59\x0e\xf2\x12\xb6\x45\x32\xc0\xc7\x66\x6c\x13\xf1\xb2\xca\xec\xac\x43\x26\x7f\x52\x87\x8a\xc1\x66\x1d\x36\x45\xd3\xc9\x3e\x86\x7b\x45\xc8\x0a\xf1\x5e\x20\xd7\xab\x73\xc3\xc7\x94\xcb\xa0\x90\x6f\x57\x6a\xeb\xf7\x2f\xee\xef\x03\x91\x42\xb3\x3f\x4a\x68\xfe\x5b\x04\x95\x3a\x9d\xbd\xf2\xd5\x53\x29\x83\x0b\x60\x24\xc9\x6e\xbf\x70\xcb\xd9\x95\x64\x5f\x33\xb5\x3e\x4f\xf9\x94\x04\x59\x42\x77\xf9\xb4\x9c\xe3\x72\x8a\x1b\x30\x61\xe5\x3f\x49\x73\x3d\xba\x45\x43\x7f\xe3\x72\xc0\xb7\x19\x87\xe4\x79\x26\xa6\xd0\x7a\x9e\xcf\x0d\x96\x94\xe9\x99\x64\x81\x7d\xb4\xf5\x10\x2e\x97\xe8\xbb\xad\x9b\xf3\xf3\xb5\x0c\x77\x3b\x2f\xdf\x8c\x83\xce\x95\xbd\xba\x8d\xb1\xb1\xcc\x0f\x42\x3d\xaf\xc7\x6d\x9c\xf5\xd5\x79\x10\x64\x6d\xbc\x76\x64\x54\xdd\x82\x07\x81\x2a\x93\xba\x0d\xb5\x31\xc8\x07\xa1\xd6\x27\x63\x1b\xa9\x3a\x37\x2f\x00\x0a\xcd\x3e\x10\x37\x16\x07\x01\xde\x6d\x7b\xee\xe8\xe3\x81\xb2\x60\xb2\x34\x55\xda\xba\x67\x67\xff\x1f\x2c\x34\xdc\x77\xe3\x4a\x16\x4e\xbd\x7f\x02\x00\x00\xff\xff\x9b\x84\xf0\xd3\x3c\x0e\x00\x00") + +func testE2eTestingManifestsFlexvolumeAttachableWithLongMountBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsFlexvolumeAttachableWithLongMount, + "test/e2e/testing-manifests/flexvolume/attachable-with-long-mount", + ) +} + +func testE2eTestingManifestsFlexvolumeAttachableWithLongMount() (*asset, error) { + bytes, err := testE2eTestingManifestsFlexvolumeAttachableWithLongMountBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/flexvolume/attachable-with-long-mount", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsFlexvolumeDummy = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x92\x5f\x4f\xe3\x46\x14\xc5\x9f\x3d\x9f\xe2\xec\x24\xaa\x16\x44\x6c\xe0\xa5\x12\x08\xd4\x14\xd8\x12\x2d\x24\x15\x09\xdd\xa2\xa6\x5a\x4d\xec\x6b\x7b\xd4\xf1\xcc\x74\x66\x4c\x12\x45\xf9\xee\x95\x1d\x87\x2e\x65\x85\xea\x37\xdf\xbf\xbf\x73\xee\xf4\x3e\x24\x0b\xa9\x13\x5f\x32\xd6\xc3\x95\xb1\x6b\x27\x8b\x32\xe0\xf4\xf8\xe4\x47\xcc\x4a\xc2\xe7\x7a\x41\x4e\x53\x20\x8f\x61\x1d\x4a\xe3\x7c\xcc\x7a\xac\x87\x3b\x99\x92\xf6\x94\xa1\xd6\x19\x39\x84\x92\x30\xb4\x22\x2d\x69\x9f\x39\xc2\x6f\xe4\xbc\x34\x1a\xa7\xf1\x31\x3e\x36\x05\xbc\x4b\xf1\x83\x73\xd6\xc3\xda\xd4\xa8\xc4\x1a\xda\x04\xd4\x9e\x10\x4a\xe9\x91\x4b\x45\xa0\x55\x4a\x36\x40\x6a\xa4\xa6\xb2\x4a\x0a\x9d\x12\x96\x32\x94\xed\x9a\x6e\x48\xcc\x7a\x78\xea\x46\x98\x45\x10\x52\x43\x20\x35\x76\x0d\x93\x7f\x5b\x07\x11\x5a\xe0\xe6\x2b\x43\xb0\x67\x49\xb2\x5c\x2e\x63\xd1\xc2\xc6\xc6\x15\x89\xda\x15\xfa\xe4\x6e\x74\x75\x33\x9e\xde\x0c\x4e\xe3\xe3\xb6\xe5\x51\x2b\xf2\x1e\x8e\xfe\xae\xa5\xa3\x0c\x8b\x35\x84\xb5\x4a\xa6\x62\xa1\x08\x4a\x2c\x61\x1c\x44\xe1\x88\x32\x04\xd3\xf0\x2e\x9d\x0c\x52\x17\x47\xf0\x26\x0f\x4b\xe1\x88\xf5\x90\x49\x1f\x9c\x5c\xd4\xe1\x95\x59\x7b\x3a\xe9\x5f\x15\x18\x0d\xa1\xc1\x87\x53\x8c\xa6\x1c\x3f\x0f\xa7\xa3\xe9\x11\xeb\xe1\xcb\x68\x76\x3b\x79\x9c\xe1\xcb\xf0\xe1\x61\x38\x9e\x8d\x6e\xa6\x98\x3c\xe0\x6a\x32\xbe\x1e\xcd\x46\x93\xf1\x14\x93\x4f\x18\x8e\x9f\xf0\x79\x34\xbe\x3e\x02\xc9\x50\x92\x03\xad\xac\x6b\xf8\x8d\x83\x6c\x6c\xa4\xac\xf1\x6c\x4a\xf4\x0a\x20\x37\x3b\x20\x6f\x29\x95\xb9\x4c\xa1\x84\x2e\x6a\x51\x10\x0a\xf3\x4c\x4e\x4b\x5d\xc0\x92\xab\xa4\x6f\x8e\xe9\x21\x74\xc6\x7a\x50\xb2\x92\x41\x84\x36\xf2\x46\x54\xdc\xbc\xa5\x59\x73\xce\xcc\xc9\x67\xda\xad\xa7\x8a\x74\xf0\x10\x08\x95\xcd\xfd\xee\x9c\x02\xd6\xd1\xc0\x1a\x5b\x2b\xd1\xa8\x6f\xaf\x2f\x75\x46\xab\xb8\x0c\x95\x8a\x19\xfb\x74\x77\xf3\xfb\xd7\xeb\xc7\xfb\xfb\xa7\xaf\x77\x93\x5f\x2e\xfa\x9b\xd7\x81\xb3\x01\x4f\x42\x65\x93\x5c\xd1\x6a\x90\xd5\x55\xb5\x8e\x95\x29\xf8\x96\x31\x65\x8a\x8f\x07\xd8\xb0\xc8\x3a\xa9\x43\x0e\xde\x3f\xe4\xb8\xfc\xe1\x84\x6d\x19\xcb\x68\x51\x77\x59\x4a\x4b\x03\xde\xff\x98\x89\x40\x07\x68\x6b\x2e\xc1\xff\xbb\x66\xcb\xdb\x36\x53\x99\x5a\x87\x5d\x63\x3b\x03\xbc\x8b\xa1\xff\x13\x67\xd1\xfd\x78\xf6\xeb\x70\x76\x7b\xd1\x3f\x61\x51\xf5\x57\x26\x1d\x06\x16\xfd\x4d\x17\xde\xe2\x32\xc9\xe8\x39\xd1\xb5\x52\x38\x6d\x50\xa2\x5d\xef\x20\x74\x9e\x68\xa3\xe9\xdd\xfa\x1d\xed\x2d\x29\x65\x90\x3b\x53\xa1\xd1\xfd\x6c\x54\x5d\xd1\x87\x3d\xf9\xbe\x3b\xf9\xd7\x47\xce\x22\x65\x0a\xf0\xcd\x9c\xfb\x20\x42\xed\xe7\xfc\x6c\xce\xa7\x75\x9a\x92\xf7\x73\xbe\xe5\x2c\xa2\x95\x0c\x38\x6e\x54\xd6\xfa\xad\xca\x2e\xf6\x56\xa5\xab\xf0\xdd\x8d\x6f\xd1\xeb\x6e\xc2\x3b\xea\xfe\x3f\xa3\xb1\xcd\x76\x26\x73\xfc\x01\xde\x37\x96\xe3\x02\x5c\x6a\x19\x38\xfe\x3c\x6f\x5e\xa2\x7e\x41\x6f\xa2\x3b\xee\xf7\xc6\x1f\xcd\x79\x2a\xac\x58\x48\x25\x83\xa4\x26\xb9\x99\x73\x11\x82\x48\xcb\x39\x3f\xcb\x85\xf2\xb4\xfd\x06\x21\x97\x8c\xf9\x52\xe6\x81\xb1\x54\x78\xea\x18\xa4\xee\x2e\x7a\xc0\xa2\xe8\xe5\x61\x1c\xb2\x28\x3a\x3f\x67\x51\xe7\x61\x93\x7b\xb1\x73\x9f\x3b\x6c\xa2\xdf\xe1\x1b\x9b\x00\x5f\x5b\x6b\x5c\xa0\x6c\x67\xc2\x1e\x81\xbc\x48\x19\x6b\x7f\x4e\xd8\x3f\x01\x00\x00\xff\xff\x5b\x74\xc1\x62\xc5\x05\x00\x00") + +func testE2eTestingManifestsFlexvolumeDummyBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsFlexvolumeDummy, + "test/e2e/testing-manifests/flexvolume/dummy", + ) +} + +func testE2eTestingManifestsFlexvolumeDummy() (*asset, error) { + bytes, err := testE2eTestingManifestsFlexvolumeDummyBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/flexvolume/dummy", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsFlexvolumeDummyAttachable = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x55\x7d\x4f\xdb\xc8\x13\xfe\xdb\xfb\x29\xa6\x9b\xe8\xa7\x52\xe5\x05\xf8\x55\xaa\x04\xa2\xba\x1c\x81\x6b\xd4\x90\x54\x24\xa5\x57\x5d\x4e\xd5\xc6\x1e\xdb\xab\xb3\x77\xb7\xfb\x42\xc8\xa1\x7c\xf7\xd3\xfa\x05\x6c\xa0\x94\xfa\xcf\x99\xc7\x33\xcf\x3c\xf3\xb2\x9d\x57\xc3\x35\x17\x43\x93\x12\xd2\x81\x53\xa9\xb6\x9a\x27\xa9\x85\xc3\xfd\x83\x77\xb0\x4c\x11\x3e\xba\x35\x6a\x81\x16\x0d\x8c\x9c\x4d\xa5\x36\x03\xd2\x21\x1d\x98\xf2\x10\x85\xc1\x08\x9c\x88\x50\x83\x4d\x11\x46\x8a\x85\x29\xd6\x9e\x1e\x5c\xa1\x36\x5c\x0a\x38\x1c\xec\xc3\x6b\x0f\xa0\x95\x8b\xee\x1d\x93\x0e\x6c\xa5\x83\x9c\x6d\x41\x48\x0b\xce\x20\xd8\x94\x1b\x88\x79\x86\x80\x37\x21\x2a\x0b\x5c\x40\x28\x73\x95\x71\x26\x42\x84\x0d\xb7\x69\x91\xa6\x0a\x32\x20\x1d\xf8\x5a\x85\x90\x6b\xcb\xb8\x00\x06\xa1\x54\x5b\x90\x71\x13\x07\xcc\x16\x84\xfd\x97\x5a\xab\x8e\x86\xc3\xcd\x66\x33\x60\x05\xd9\x81\xd4\xc9\x30\x2b\x81\x66\x38\x9d\x9c\x9e\xcd\x16\x67\xfd\xc3\xc1\x7e\xf1\xcb\x67\x91\xa1\x31\xa0\xf1\xbb\xe3\x1a\x23\x58\x6f\x81\x29\x95\xf1\x90\xad\x33\x84\x8c\x6d\x40\x6a\x60\x89\x46\x8c\xc0\x4a\xcf\x77\xa3\xb9\xe5\x22\xe9\x81\x91\xb1\xdd\x30\x8d\xa4\x03\x11\x37\x56\xf3\xb5\xb3\x2d\xb1\x6a\x76\xdc\xb4\x00\x52\x00\x13\x40\x47\x0b\x98\x2c\x28\xfc\x3e\x5a\x4c\x16\x3d\xd2\x81\x2f\x93\xe5\x87\xf9\xe7\x25\x7c\x19\x5d\x5e\x8e\x66\xcb\xc9\xd9\x02\xe6\x97\x70\x3a\x9f\x8d\x27\xcb\xc9\x7c\xb6\x80\xf9\x39\x8c\x66\x5f\xe1\xe3\x64\x36\xee\x01\x72\x9b\xa2\x06\xbc\x51\xda\xf3\x97\x1a\xb8\x97\x11\x23\xaf\xd9\x02\xb1\x45\x20\x96\x25\x21\xa3\x30\xe4\x31\x0f\x21\x63\x22\x71\x2c\x41\x48\xe4\x35\x6a\xc1\x45\x02\x0a\x75\xce\x8d\x6f\xa6\x01\x26\x22\xd2\x81\x8c\xe7\xdc\x32\x5b\x58\x1e\x15\x35\xf0\xb3\xb4\xf4\xed\x8c\x34\xbf\xc6\x32\x3d\xe6\x28\xac\x01\x06\x36\x57\xb1\x29\xdb\xc9\x40\x69\xec\x2b\xa9\x5c\xc6\x7c\xf5\x45\xf7\xb9\x88\xf0\x66\x90\xda\x3c\xf3\x74\x47\xd6\xb2\x30\xf5\x32\xd5\x6d\xe8\xc1\xda\x59\xe0\xd6\xdb\x18\x08\xd9\x97\x0a\x6c\xca\x2c\xb0\x6c\xc3\xb6\x1e\x67\x9d\x16\x06\x8c\x0b\x43\x34\x66\x40\xc8\xf9\xf4\xec\xcf\x6f\xe3\xcf\x17\x17\x5f\xbf\x4d\xe7\x7f\x9c\x74\x6f\xdb\x86\xa3\x3e\x1d\xda\x5c\x0d\xe3\x0c\x6f\xfa\x91\xcb\xf3\xed\x20\x93\x09\xdd\x11\x72\x35\x9a\x4e\xc6\xdf\x2e\x66\xcb\xf1\xd9\xd5\xe4\xf4\xec\x24\x96\xd2\x97\xc6\x4a\x4e\x0f\xf2\x49\x81\x70\xcd\x32\x1e\x41\x2e\x9d\xb0\x10\xe1\x35\x0f\x11\x8c\x04\x06\x11\x8f\x63\xd4\x78\x67\x25\x1d\x30\xa9\xdc\x78\x6d\x9d\x82\x62\x74\x8d\x5b\x1b\xfc\xee\x0a\x4c\xa9\x5a\xc8\xb2\xac\xea\x9c\xaf\x74\xed\x12\x52\xc4\x67\x16\x2f\x7c\x86\x71\x11\x6a\xae\xc7\x1c\x5f\xef\xc1\x2d\x09\xee\x89\x76\x0f\x48\x70\x3a\x9a\x4e\x4f\xba\x87\x24\xe0\x31\xfc\x05\xb4\x7b\xe7\xa5\xf0\xea\x04\x68\xf7\x41\x71\x14\xfe\x3e\xf6\x4d\x14\x24\x08\x32\x99\x00\xbd\x5d\x51\x63\x99\x75\x66\x45\x8f\x56\xf4\x9c\xf1\xcc\x69\x5c\xd1\xde\x8a\xe6\x68\x0c\x4b\xb0\xb0\x17\x24\x69\xf7\xd6\x67\xdb\x51\x3f\x73\x18\xfa\x56\x56\xd5\xd3\xee\xed\x83\x3c\x3b\xda\x83\x44\xda\x06\xa0\xe1\x5a\xd1\x1d\x25\x41\x80\x37\xdc\xc2\x3e\x09\x62\x4e\x76\x84\x64\x32\x29\xeb\x53\x9a\x0b\x1b\x03\xed\xbe\xa1\xf0\xfe\x7f\x07\xde\x17\xe1\xda\x55\x5e\x0c\x53\x09\xb4\xfb\xda\xeb\xb3\x07\x05\xe6\xbd\x0f\xdf\x6e\xf6\x8e\xfa\xdf\xca\x0e\x96\xff\x15\x21\x80\x56\x4d\xed\xfe\x46\xc9\x53\xf5\x2f\xca\x69\x2a\xea\x2f\xa9\x17\xe6\xa7\xea\x2b\x8b\xa8\x6a\x28\x38\x3e\x4a\x56\x9a\xca\x64\x1d\x58\xce\xc7\x73\xe0\xc6\x38\x84\xb7\x6f\xdf\xfd\xff\x1d\x54\x6e\x6e\x40\x31\xe3\x8f\xec\xa7\x2b\x10\x2c\xc7\x5e\x71\x2c\x9b\xe3\xf5\x3c\xd7\x36\x8f\x0d\xe3\x36\x96\xfa\x89\xda\x5b\x9e\x92\x55\x7b\x96\x7e\x34\x77\xed\xb1\x6a\xc7\xf9\x55\x1d\x9f\x51\x90\x9b\x32\x24\x46\x2d\xda\xf7\xe6\x17\xb5\xad\x06\xaf\xe8\x91\xd5\x0e\x1f\x34\x49\x16\xb2\x96\x94\xda\xbd\x6a\x7a\x1e\x89\x73\xf8\x62\x71\x5a\x71\xca\x20\x9f\x46\xcb\x0f\x85\xbe\xf9\x3f\x11\xd7\xd0\x57\x50\xc8\xe0\xcd\x3b\x78\x3f\x8c\xf0\x7a\x28\x5c\x96\xc1\xa1\x9f\xf6\xa0\xec\x7b\xdf\x56\x17\x54\xf8\x83\xf3\x1c\xbe\x5c\x88\x0f\x98\x65\x12\x62\x2d\x73\xf0\x07\xee\x5a\x66\x2e\xc7\x57\xf5\x72\xd4\x7f\x0f\xef\xaf\xee\x4f\x84\x6c\xcb\xe6\xc4\x8f\x64\x6b\x79\xee\x64\xbb\xab\x58\xe7\x3f\x4a\xff\xb8\x10\x57\x56\xfe\x5c\xad\x2f\x67\x8c\x37\x8a\x89\xa8\x94\xa1\x45\xb8\xe9\xf8\xf9\x3c\x3d\x15\x34\x36\x4f\x04\x8c\xcd\xaf\x06\x93\xca\x2b\x44\xaa\xb3\x2d\x15\x85\x13\xa0\x5c\x70\xdb\x38\xd1\xf5\x06\x08\x6e\x5f\x34\xfb\x21\x53\x6c\xcd\x33\x6e\x39\x7a\xe7\x6d\xbd\x0d\xd5\x2e\xf4\x60\x45\xab\xf7\xd5\x9c\x2f\x2e\xd1\xf0\x7f\xb1\x5e\x93\x06\xb9\x98\x13\x62\x52\x1e\x5b\x42\x42\x66\xb0\x62\xc7\x05\x09\xca\x68\x7b\x24\x08\xea\x23\xf2\x86\x04\xc1\xf1\xb1\x67\x5a\x7b\xea\xa3\x57\x7b\x5a\xd7\xc2\x03\x1e\x9c\xa1\x1a\x77\xbf\xe6\x1e\xd4\x5c\xfa\x1a\xd1\x98\xb4\x22\x51\x7b\x63\x6b\x54\x6b\x22\x3d\xee\xc1\x88\xd6\xb8\xe6\x20\xec\x15\xaf\x51\x73\x30\xda\xa8\xd8\xdc\x23\x7c\xa7\x6b\xef\x9b\xbd\xa7\x9f\xd1\x99\xb4\x60\x9c\x52\x52\x5b\x7f\x88\x9a\xaf\x1d\x1a\x16\xfa\x49\xe2\x16\x0e\xc8\x7f\x01\x00\x00\xff\xff\xae\x82\x6a\x82\x97\x0b\x00\x00") + +func testE2eTestingManifestsFlexvolumeDummyAttachableBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsFlexvolumeDummyAttachable, + "test/e2e/testing-manifests/flexvolume/dummy-attachable", + ) +} + +func testE2eTestingManifestsFlexvolumeDummyAttachable() (*asset, error) { + bytes, err := testE2eTestingManifestsFlexvolumeDummyAttachableBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/flexvolume/dummy-attachable", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsGuestbookAgnhostPrimaryDeploymentYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\xcb\x4a\x03\x41\x10\x45\xf7\xfd\x15\x97\x59\x3b\x9a\x20\x28\xf6\x4e\x70\x23\x28\xb8\x72\x23\x2e\x2a\x9d\x62\xd2\xa4\x5f\x56\x57\x84\x10\xf2\xef\xd2\xe6\x39\x9a\xda\xcd\x29\xe6\x9e\x5b\x4d\xc5\xbf\xb3\x54\x9f\x93\x05\x95\x52\x6f\xbe\xa7\x66\xe9\xd3\xdc\xe2\x89\x4b\xc8\xeb\xc8\x49\x4d\x64\xa5\x39\x29\x59\x03\x24\x8a\x6c\x41\x43\x5a\xe4\xaa\x7d\x11\x1f\x49\xd6\xa6\x16\x76\x6d\x2b\x5c\x82\x77\x54\x2d\xa6\x06\xa8\x1c\xd8\x69\x96\xb6\x01\x22\xa9\x5b\xbc\xd0\x8c\x43\xdd\x01\x34\xe3\x31\x6b\x8f\x24\x07\xb6\x38\xe4\xee\x98\x7a\x16\x8b\x19\xb9\x25\xa7\xb9\x01\x94\x63\x09\xa4\xbc\xcf\x3d\x6b\xd7\x26\x8c\x14\x17\x25\x97\x35\xff\x45\xc0\xe1\xb0\x36\x2e\x27\x25\x9f\x58\x8e\xe1\xfd\xfe\x39\xfe\xe6\xf8\x48\x03\x5b\x6c\x36\xd7\x8f\x3b\xef\x73\x03\xdb\xed\xa9\x93\x0c\xd5\xe2\x03\xdd\xb0\xe2\xaa\xb3\x9c\x97\xdd\x15\xba\xbe\x5f\xa8\x96\xbe\x64\xd1\xf6\x79\x77\x7b\xff\xd0\xe1\xf3\xd4\x99\x6b\x5e\x89\xe3\xb3\xdb\x1a\xfc\x6a\x11\x23\x06\xb8\xb2\xb2\x98\x4e\x26\x71\x44\x23\xc7\x2c\xeb\xdf\xc5\xab\x3f\x6e\x9a\xee\xec\xf7\xfe\x74\xe7\x5b\x16\xb5\x68\x35\xcc\x4f\x00\x00\x00\xff\xff\xa6\xad\xbd\xcc\x28\x02\x00\x00") + +func testE2eTestingManifestsGuestbookAgnhostPrimaryDeploymentYamlInBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsGuestbookAgnhostPrimaryDeploymentYamlIn, + "test/e2e/testing-manifests/guestbook/agnhost-primary-deployment.yaml.in", + ) +} + +func testE2eTestingManifestsGuestbookAgnhostPrimaryDeploymentYamlIn() (*asset, error) { + bytes, err := testE2eTestingManifestsGuestbookAgnhostPrimaryDeploymentYamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/agnhost-primary-deployment.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsGuestbookAgnhostPrimaryServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\xcd\x41\x8a\xc3\x30\x0c\x85\xe1\xbd\x4f\xf1\x2e\x90\xc5\x30\x30\x43\x75\x8a\x42\xa1\x7b\xc5\x79\xa4\x26\x8e\x6d\x64\x11\xe8\xed\x4b\x52\x68\xbb\xee\x4e\xfc\x7c\x92\xb4\xa5\x2b\xad\xa7\x5a\x04\xdb\x4f\x58\x52\x99\x04\x17\xda\x96\x22\xc3\x4a\xd7\x49\x5d\x25\x00\x45\x57\x0a\x74\x2e\xb7\xda\x7d\x68\x96\x56\xb5\x7b\x00\xb2\x8e\xcc\x7d\x17\x80\xb6\xf6\x22\x47\xb0\x9a\x29\x78\x63\xc0\x13\x4d\x30\x6a\x5c\x58\xa6\xd0\x1b\xe3\xbe\xda\xaa\xf9\x71\x63\x38\x46\xc1\xdf\xef\xff\xe9\xe9\xd5\x66\xfa\xf9\x33\x76\x66\x46\xaf\xf6\xe5\xcf\x47\x00\x00\x00\xff\xff\x31\x9c\x65\x89\xf2\x00\x00\x00") + +func testE2eTestingManifestsGuestbookAgnhostPrimaryServiceYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsGuestbookAgnhostPrimaryServiceYaml, + "test/e2e/testing-manifests/guestbook/agnhost-primary-service.yaml", + ) +} + +func testE2eTestingManifestsGuestbookAgnhostPrimaryServiceYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsGuestbookAgnhostPrimaryServiceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/agnhost-primary-service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsGuestbookAgnhostReplicaDeploymentYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\x41\x4f\xc3\x30\x0c\x85\xef\xf9\x15\x56\xcf\x14\x36\x90\x40\xe4\x86\xc4\x05\x09\x24\x4e\x5c\x10\x07\x2f\x33\x5d\xb4\x24\x0e\x8e\x87\x34\x4d\xfb\xef\x28\xac\xdd\x5a\x58\x6e\x7e\xaf\x7d\x9f\xfd\x30\xfb\x37\x92\xe2\x39\x59\xc0\x9c\xcb\xd5\xf7\xdc\xac\x7d\x5a\x5a\x78\xa4\x1c\x78\x1b\x29\xa9\x89\xa4\xb8\x44\x45\x6b\x00\x12\x46\xb2\x80\x5d\x5a\x71\xd1\x56\x28\x07\xef\xd0\x94\x4c\xae\xba\xfd\x5c\x2c\x5c\x1b\x80\x42\x81\x9c\xb2\x54\x07\x20\xa2\xba\xd5\x33\x2e\x28\x94\x83\x00\x95\x78\xcc\xea\x25\xe1\x40\x76\xc8\xe9\x35\xf5\x24\x16\x16\xe8\xd6\x94\x96\x06\x40\x29\xe6\x80\x4a\x7d\xee\x68\xbb\xfa\xc2\x04\x71\x16\x72\x1e\xf3\x1f\x04\x30\x1c\x56\x9f\xe3\xa4\xe8\x13\xc9\x31\xbc\xed\xeb\xf8\x9b\xe3\x23\x76\x64\x61\xb7\xbb\x7c\x38\x70\x9f\xaa\xb0\xdf\x9f\x76\x92\xae\x58\x78\x87\xa6\xdb\x50\xd1\x05\xf3\xba\xb9\x80\xa6\x1d\xfa\xe4\xcf\x3a\x0e\x25\x67\xf1\x11\x65\x7b\xf8\x62\xa5\x9a\xdb\xcc\xa2\x75\xbc\xbd\xb9\xbb\x6f\xe0\xe3\x74\x15\x15\xde\x88\xa3\xd1\xf5\x55\xfc\xaa\x90\x89\x06\xe0\xf2\xc6\xc2\x7c\x36\x8b\x13\x35\x52\x64\xd9\xfe\x1a\x2f\xfe\xe8\x54\xdc\xe8\xf7\xf6\xd4\xc4\x2b\x8b\x5a\xa8\x6b\x98\x9f\x00\x00\x00\xff\xff\x15\xa2\x0c\xb6\x4a\x02\x00\x00") + +func testE2eTestingManifestsGuestbookAgnhostReplicaDeploymentYamlInBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsGuestbookAgnhostReplicaDeploymentYamlIn, + "test/e2e/testing-manifests/guestbook/agnhost-replica-deployment.yaml.in", + ) +} + +func testE2eTestingManifestsGuestbookAgnhostReplicaDeploymentYamlIn() (*asset, error) { + bytes, err := testE2eTestingManifestsGuestbookAgnhostReplicaDeploymentYamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/agnhost-replica-deployment.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsGuestbookAgnhostReplicaServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\xcc\x41\xaa\xc3\x30\x0c\x84\xe1\xbd\x4f\x31\x17\xc8\xe2\xf1\xa0\xa5\xba\x46\xa1\x7b\xc5\x19\x5a\x13\xc7\x16\xb2\xc8\xf9\x4b\xb2\x68\xf7\xdd\x09\xf1\xcd\xaf\x56\x1e\xf4\x51\x7a\x13\xec\x7f\x69\x2d\x6d\x11\xdc\xe9\x7b\xc9\x4c\x1b\x43\x17\x0d\x95\x04\x34\xdd\x28\xd0\x67\x7b\xf5\x11\x93\xd3\x6a\xc9\x9a\x80\xaa\x33\xeb\x38\x04\xa0\x66\x1f\x72\x3e\xbc\x57\x0a\xbe\x18\x88\x42\x17\xcc\x9a\x57\xb6\x25\x0d\x63\x3e\xa6\xd6\x3d\xce\xc6\x74\x9e\x82\xcb\xff\xf5\x96\x80\xc1\xca\x1c\xdd\x7f\xcc\xbf\x03\x00\x00\xff\xff\xa5\xe8\x39\x6d\xdd\x00\x00\x00") + +func testE2eTestingManifestsGuestbookAgnhostReplicaServiceYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsGuestbookAgnhostReplicaServiceYaml, + "test/e2e/testing-manifests/guestbook/agnhost-replica-service.yaml", + ) +} + +func testE2eTestingManifestsGuestbookAgnhostReplicaServiceYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsGuestbookAgnhostReplicaServiceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/agnhost-replica-service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsGuestbookFrontendDeploymentYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8f\xcb\x4a\x33\x41\x10\x85\xf7\xf3\x14\x87\x59\xff\xf3\x9b\x10\xf0\xd2\x3b\xc1\x8d\xa0\xe0\xca\x8d\xb8\xa8\xf4\x94\x93\x26\x7d\xb3\xba\x22\x84\x90\x77\x97\xd6\x38\x99\x01\xad\xe5\x57\xd4\x57\xe7\x50\x76\xcf\x2c\xc5\xa5\x68\x40\x39\x97\x8b\x8f\x65\xb3\x75\xb1\x37\xb8\xe3\xec\xd3\x3e\x70\xd4\x26\xb0\x52\x4f\x4a\xa6\x01\x22\x05\x36\x78\x93\x14\x95\x63\xdf\x94\xcc\xb6\x62\xe1\xec\x9d\xa5\x62\xb0\x6a\x80\xc2\x9e\xad\x26\xa9\x1b\x20\x90\xda\xcd\x03\xad\xd9\x97\x6f\x80\xfa\xca\x60\xd8\x71\xd1\x75\x4a\xdb\x13\x54\xc7\x32\x51\x03\xca\x21\x7b\x52\x3e\x69\x26\x29\xea\xf8\x99\xf1\x0f\xe7\x2f\x56\xe0\x27\x74\x1d\x9b\xa2\x92\x8b\x2c\xa3\xa9\x3b\x75\x1c\x55\xdd\xec\xb8\x8e\x0b\x34\xb0\xc1\xe1\xf0\xff\x76\x88\x9b\x54\xf4\xbe\x82\xe3\xf1\x9c\x45\x86\x62\xf0\x82\x76\x94\xb4\xff\xd0\x76\xdd\x9a\xec\x96\x63\xdf\xe5\x24\x5a\xc9\xe5\xea\xea\xa6\xc5\xeb\x78\x27\x5c\xd2\x4e\x2c\x4f\x6a\x55\xf8\x5e\x2d\x33\x06\xd8\xbc\x33\x58\x2e\x16\x61\x46\x03\x87\x24\xfb\xaf\xc5\xa3\x1b\x37\xf5\xdd\xe4\xbc\x3b\xb7\x7e\x4a\xa2\x06\xd7\x8b\xe6\x33\x00\x00\xff\xff\xbd\x10\x5c\xb3\x09\x02\x00\x00") + +func testE2eTestingManifestsGuestbookFrontendDeploymentYamlInBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsGuestbookFrontendDeploymentYamlIn, + "test/e2e/testing-manifests/guestbook/frontend-deployment.yaml.in", + ) +} + +func testE2eTestingManifestsGuestbookFrontendDeploymentYamlIn() (*asset, error) { + bytes, err := testE2eTestingManifestsGuestbookFrontendDeploymentYamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/frontend-deployment.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsGuestbookFrontendServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x8f\x3f\x4b\x04\x31\x10\xc5\xfb\x7c\x8a\x07\xb6\x9e\x68\x27\x29\xed\x04\x0b\x41\xb0\x9f\x4d\x66\xcf\x70\xd9\x99\x30\x99\x9c\xee\xb7\x97\xdd\xb5\xb0\xbc\x6e\x98\xf7\x87\xdf\xa3\x56\x3e\xd9\x7a\x51\x89\xb8\x3e\x85\x4b\x91\x1c\xf1\xc1\x76\x2d\x89\xc3\xc2\x4e\x99\x9c\x62\x00\x84\x16\x8e\x98\x4d\xc5\x59\x72\x00\x2a\x4d\x5c\xfb\x26\x01\xd4\x5a\xc4\x79\x70\xf7\x49\xf5\xb2\xbf\xbc\xb0\xfd\xf3\xf7\xc6\x69\xf3\xde\xa1\xcc\x58\x75\x18\x52\x1d\xdd\xd9\xd0\x47\x6b\x6a\xde\x51\xfc\x1e\x43\x92\x2e\x0b\x8b\xc3\xbf\x18\xb3\xd6\xaa\xdf\x45\xce\x70\x05\x0d\xd7\x85\xbc\x24\xaa\x75\x45\x32\x26\xe7\xbd\x90\x04\xfc\xe3\x6c\x42\x15\x55\x29\x9f\x26\xaa\x24\x89\x33\x5e\xdf\x31\xab\x1d\x55\x7f\x20\xe8\xc7\xb6\x87\x3d\xea\x6b\xe3\x88\x37\xa5\xfc\x72\x64\x2c\x00\x3b\xcd\xc6\x7a\xda\xcf\x88\xe7\xc7\x00\x74\xae\x9c\x5c\xed\xd6\xc1\xbf\x01\x00\x00\xff\xff\xc5\xce\xd2\xc0\x59\x01\x00\x00") + +func testE2eTestingManifestsGuestbookFrontendServiceYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsGuestbookFrontendServiceYaml, + "test/e2e/testing-manifests/guestbook/frontend-service.yaml", + ) +} + +func testE2eTestingManifestsGuestbookFrontendServiceYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsGuestbookFrontendServiceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/frontend-service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsGuestbookLegacyFrontendControllerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x92\x3f\x6f\xdb\x30\x10\xc5\x77\x7d\x8a\x07\x74\xc8\x62\x37\x0e\xda\xa1\xe0\x5a\xf4\xdf\x10\xa4\x48\x82\xae\xc6\x89\x3a\xcb\x44\xa8\x3b\x96\x3c\xa9\xc8\xb7\x2f\xe8\x46\xb2\x54\x6e\xfa\x1d\xdf\xef\x1e\x24\x51\x0a\xbf\x38\x97\xa0\xe2\x30\xdd\x35\x2f\x41\x3a\x87\x47\x4e\x31\x78\xb2\xa0\xf2\x59\xc5\xb2\xc6\xc8\xb9\x19\xd8\xa8\x23\x23\xd7\x00\x42\x03\x3b\x9c\xb2\x8a\xb1\x74\x4d\x49\xec\x2b\xce\xff\x82\xc5\xe1\x43\x03\x18\x0f\x29\x92\x71\x9d\x00\xeb\x78\x3d\x91\x5a\x8e\x65\x7e\x02\x28\x25\x87\x7e\xe4\x62\xad\xea\xcb\x82\x2d\x70\x5e\x6d\xaa\x68\xde\x56\x8f\x57\x31\x0a\xc2\x79\x31\xed\xdf\xca\xa5\x73\xda\x67\xee\x42\x59\x54\x61\xa0\x9e\x1d\x7a\x9f\xdf\x07\xbd\xed\x55\xfb\xc8\xc7\x42\x43\x8a\x5c\x6e\xfb\x76\x3f\x2f\x71\xd3\xc7\x25\x93\xb9\xe8\x98\x3d\xaf\x8a\x56\xf8\xbb\xf6\xdc\x30\xc0\xa7\xd1\xe1\xee\x70\x18\x36\x74\xe0\x41\xf3\xeb\x65\x70\x1f\x96\x09\xcb\x74\x0d\xcf\x8d\xbf\x7d\x79\x3e\x7e\x7f\x78\x7a\x7e\x3a\x7e\x7d\x7c\xb8\x5f\x59\x26\x8a\x23\x3b\x74\x52\x56\xf0\x1d\x7e\x9c\xf0\xaa\x63\x86\x8f\x63\x31\xce\xf5\x5d\x9c\x42\x8f\x4e\xb9\x40\xd4\x10\xc4\xc7\xb1\x63\x50\x4d\xa2\x70\x9e\x82\xe7\x1d\xec\xcc\x02\xd3\x8d\x2a\x48\x31\xa6\x0e\xe4\x3d\x97\x52\xeb\x85\xac\x32\xb0\x18\x26\xca\x81\xda\xc8\x05\xa6\x38\x05\xe9\x66\x13\xce\x5a\xec\x3f\xcb\x49\x77\xf0\x3a\x5c\x82\x3a\x5a\xdd\x85\x9b\x6b\xfd\x1b\xc4\x20\x0c\x6a\x75\xe2\x1d\x48\x3a\x8c\x32\x5f\xb7\x33\x6f\x64\x97\x9b\x2d\x47\xfd\xe3\x36\xfc\xcd\xc6\x32\x2d\x38\x69\x5e\x7f\x8c\xfd\xf5\xaf\xf8\xa9\xd9\x1c\x3e\x1d\x9a\xbf\x01\x00\x00\xff\xff\x1c\xa9\xd8\xd7\xe8\x02\x00\x00") + +func testE2eTestingManifestsGuestbookLegacyFrontendControllerYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsGuestbookLegacyFrontendControllerYaml, + "test/e2e/testing-manifests/guestbook/legacy/frontend-controller.yaml", + ) +} + +func testE2eTestingManifestsGuestbookLegacyFrontendControllerYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsGuestbookLegacyFrontendControllerYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/legacy/frontend-controller.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsGuestbookLegacyRedisMasterControllerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\x41\x4f\xc3\x30\x0c\x85\xef\xf9\x15\xfe\x03\xdd\x56\xa1\x81\xc8\x95\x33\x12\xe2\xc0\xdd\x4d\x2d\x64\x35\x89\x83\xe3\x22\xed\xdf\xa3\x74\xa3\xeb\x60\xbe\xe5\xbd\xf8\x7d\xcf\x58\xf8\x83\xb4\xb2\x64\x0f\xdf\xbd\x9b\x38\x8f\x1e\xde\xa9\x44\x0e\x68\x2c\xf9\x45\xb2\xa9\xc4\x48\xea\x12\x19\x8e\x68\xe8\x1d\x40\xc6\x44\x1e\x94\x46\xae\x5d\xc2\x6a\xa4\x0e\x20\xe2\x40\xb1\x36\x1b\x00\x4b\xb9\xf8\xcb\x53\x25\x92\x87\xf5\x27\x80\x31\xa9\x87\x01\xc3\x44\x79\x74\xb5\x50\x68\x7b\x7a\x06\x57\x0f\xbd\x03\x30\x4a\x25\xa2\xd1\x39\x71\x8b\x6f\xb3\xa5\xdd\x21\xde\xa5\xfe\x27\x37\xe5\x97\xde\x26\x48\x36\xe4\x4c\xba\x26\x77\x97\x63\xff\xc4\x70\xc2\x4f\xf2\x30\x4a\x98\x48\x77\x2c\xfb\xc8\x83\xa2\x9e\xf6\x4b\x05\x7f\xdc\x1d\x76\xc7\x0e\x63\xe1\x4c\xd7\x3e\x54\x65\xd6\x40\x9b\xd6\x4d\xfc\x9a\xa9\xda\x8d\x06\x10\xca\xec\xa1\x3f\x1c\xd2\x8d\x9a\x28\x89\x9e\x16\xe3\x95\x57\xa7\x88\x6e\xd7\xbb\xeb\x11\x6f\xa2\xe6\xe1\xf1\xe1\xe9\xd9\xfd\x04\x00\x00\xff\xff\xab\x8c\xb0\x65\xe9\x01\x00\x00") + +func testE2eTestingManifestsGuestbookLegacyRedisMasterControllerYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsGuestbookLegacyRedisMasterControllerYaml, + "test/e2e/testing-manifests/guestbook/legacy/redis-master-controller.yaml", + ) +} + +func testE2eTestingManifestsGuestbookLegacyRedisMasterControllerYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsGuestbookLegacyRedisMasterControllerYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/legacy/redis-master-controller.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsGuestbookLegacyRedisSlaveControllerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x53\xcd\x6e\xdb\x3c\x10\xbc\xeb\x29\x16\xce\x21\x17\xdb\x72\x9c\xc8\xfe\xcc\xeb\x87\xfe\x1d\x82\x14\x49\xd0\x1e\x8a\x22\x58\x52\x6b\x9b\x30\xb9\xab\x92\x94\x5a\xbf\x7d\x41\xf9\x4f\x46\xa3\x1b\x77\x76\x66\x96\x9c\x15\x36\xf6\x1b\x85\x68\x85\x15\x74\x77\xc5\xce\x72\xad\xe0\x99\x1a\x67\x0d\x26\x2b\xfc\xbf\x70\x0a\xe2\x1c\x85\xc2\x53\xc2\x1a\x13\xaa\x02\x80\xd1\x93\x82\x40\xb5\x8d\x93\xe8\xb0\xa3\x02\xc0\xa1\x26\x17\x33\x0a\x80\x4d\x73\x84\xfb\x63\x10\x47\x0a\x4e\x8d\x00\xc9\x52\x50\xa0\xd1\xec\x88\xeb\x22\x36\x64\x32\x2d\x1c\x6c\xa3\x82\x79\x01\x90\xc8\x37\x0e\x13\x1d\x04\x87\xe6\xf9\x1b\x9a\xbd\x63\xf8\x9e\xe9\xbf\xc6\xb9\x72\x32\xcf\x9f\x11\x4e\x68\x99\xc2\x59\x78\x72\xbc\xe9\xb5\x8a\xf5\xb8\x21\x05\xb5\x98\x1d\x85\xa9\x95\xd2\x59\x1d\x30\xec\xcb\x7e\x00\x55\x4d\x67\xd3\x6a\x82\xae\xb1\x7c\xe1\xdc\xc0\x77\x02\x0c\x04\xc2\x6e\x0f\xd6\x37\x8e\x3c\x71\xb2\xbc\x81\xb4\x25\xa8\x39\x82\x34\xf9\xc5\x41\xd6\x6a\xc0\xda\xa6\xd4\x44\x55\x96\x1b\x9b\xb6\xad\x9e\x1a\xf1\xe5\xae\xd5\x14\x98\x12\xc5\x92\xfe\x60\x56\x8a\xa5\x76\xa2\xcb\xd5\xd2\x2c\xa9\x9e\x91\x5e\x54\x55\x85\x0f\x7a\xb1\x58\xd6\xf3\xff\x96\xcb\xf5\x6a\x51\xd5\xf7\xab\x39\xcd\x66\xa8\xcd\x43\x55\x6e\x5a\x8a\x49\x8b\xec\xca\x41\x84\x65\x68\x79\x1a\xb7\x67\x6f\x23\xde\x63\x5e\x87\x1f\x30\x3a\xb6\x51\xe8\x28\x8c\xc6\x30\x9a\x1c\x28\xb2\xce\x87\x03\xe8\x31\xa6\x03\xb8\xb8\x5f\xae\x46\xf0\xf3\x12\x04\x45\x69\x83\xa1\x41\x5c\xb9\xf8\x2b\x0f\x71\x55\x03\x30\x4d\xab\xe0\x6e\x36\xf3\x57\x55\x4f\x5e\xc2\xbe\x07\x1e\xed\x19\x21\xee\x2e\xe4\x53\x50\x9f\x3e\xbc\xbe\x7d\x7e\x7a\x79\x7d\x79\xfb\xf8\xfc\xf4\x38\x50\xe9\xd0\xb5\x39\x33\x8e\x83\xe2\x0d\x7c\x59\xc3\x5e\xda\x00\xc6\xb5\x79\xfc\xbc\x02\x6b\xbb\x81\x5a\x28\x02\x4b\x02\xcb\xc6\xb5\x35\x01\xf6\x09\xe5\x07\xb0\x86\xc6\x39\x32\x86\x24\x57\x52\x96\x63\x22\xac\x01\x8d\xa1\x18\x01\x39\x4f\x68\x83\x70\xce\x19\x3a\x0c\x16\xb5\x23\x48\x02\x6b\xcb\x75\x9f\xfa\xe1\xcd\xae\x54\x8e\x16\xb7\x11\xb6\x12\xd3\xb8\x4f\x21\xf3\xa5\x4d\x3d\xe5\xf6\x72\x91\x5b\x70\x96\x09\x50\x4b\x47\x63\xc0\xe3\x42\x9f\x84\x5a\x3e\x51\x33\xad\xef\xd4\xe4\xe4\xb7\xba\xea\x3a\xaa\x11\x77\xe7\x72\x23\x61\x18\xcb\xe4\xf2\x5b\x7c\x95\x90\x14\xe4\x78\x8b\xbf\x01\x00\x00\xff\xff\xb9\x3d\x32\x31\x38\x04\x00\x00") + +func testE2eTestingManifestsGuestbookLegacyRedisSlaveControllerYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsGuestbookLegacyRedisSlaveControllerYaml, + "test/e2e/testing-manifests/guestbook/legacy/redis-slave-controller.yaml", + ) +} + +func testE2eTestingManifestsGuestbookLegacyRedisSlaveControllerYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsGuestbookLegacyRedisSlaveControllerYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/legacy/redis-slave-controller.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsGuestbookRedisMasterDeploymentYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\xcd\x4a\x43\x31\x10\x85\xf7\x79\x8a\x79\x81\x6a\x2f\x82\x62\xd6\x6e\x04\x05\x71\xe1\x7e\x9a\x7b\xd0\xd0\xfc\x39\x99\x2b\x94\xd2\x77\x97\xd8\xd8\xde\xab\x9d\x5d\xce\x21\xdf\x37\x09\x17\xff\x06\xa9\x3e\x27\x4b\x5c\x4a\xbd\xfe\x1a\xcc\xd6\xa7\xd1\xd2\x03\x4a\xc8\xbb\x88\xa4\x26\x42\x79\x64\x65\x6b\x88\x12\x47\x58\x12\x8c\xbe\xae\x22\x57\x85\x98\x5a\xe0\x5a\x25\x28\xc1\x3b\xae\x96\x06\x43\x54\x11\xe0\x34\x4b\x6b\x88\x22\xab\xfb\x78\xe2\x0d\x42\x3d\x06\xd4\x74\x1d\xd4\x03\xc9\x01\x96\x3a\xf4\x18\xa9\x87\x58\xda\xb0\xdb\x22\x8d\x86\x48\x11\x4b\x60\x45\x87\xce\xf6\x6a\x13\x16\xfc\x0b\x86\x8b\x8e\xff\x16\xa2\xdf\x27\xb5\x71\x39\x29\xfb\x04\x39\x91\x57\xfd\x17\xfe\x60\x7c\xe4\x77\x58\xda\xef\xaf\x5e\x9b\xf3\xb1\x1d\x0f\x87\xb3\x1a\x35\x4f\xe2\x30\x5b\xb0\x85\x9f\x13\xaa\x2e\x32\x22\x57\x26\x4b\xc3\x7a\x1d\x17\x69\x44\xcc\xb2\xfb\x29\x9e\xfd\xa9\x29\x59\xe6\xd7\x57\xe7\x7d\x5f\xb2\xa8\xa5\xdb\x9b\xbb\x7b\xf3\x1d\x00\x00\xff\xff\x2d\xdf\x6e\xe2\xe7\x01\x00\x00") + +func testE2eTestingManifestsGuestbookRedisMasterDeploymentYamlInBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsGuestbookRedisMasterDeploymentYamlIn, + "test/e2e/testing-manifests/guestbook/redis-master-deployment.yaml.in", + ) +} + +func testE2eTestingManifestsGuestbookRedisMasterDeploymentYamlIn() (*asset, error) { + bytes, err := testE2eTestingManifestsGuestbookRedisMasterDeploymentYamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/redis-master-deployment.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsGuestbookRedisMasterServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x8d\x41\xaa\xc3\x30\x0c\x44\xf7\x3e\xc5\x5c\x20\x8b\xcf\x87\x96\xea\x14\x85\x42\xf7\x8a\x3d\x14\x13\xc7\x36\xb2\xc8\xf9\x4b\xd2\x52\xba\xee\x4e\xd2\x7b\x9a\xd1\x9e\xef\xb4\x91\x5b\x15\x6c\x7f\x61\xc9\x35\x09\x6e\xb4\x2d\x47\x86\x95\xae\x49\x5d\x25\x00\x55\x57\x0a\x8c\x29\x8f\x69\xd5\xe1\xb4\x00\x14\x9d\x59\xc6\x8e\x01\xed\xfd\xcd\x8f\xd5\x5a\xa1\xe0\x63\x02\x9e\x69\x82\x59\xe3\xc2\x9a\xc2\xe8\x8c\xfb\x5f\x6f\xe6\x47\xc0\x74\x8c\x82\xd3\xff\xf9\xf2\xf2\xd5\x1e\xf4\xeb\xf7\x71\xb0\x30\x7a\xb3\x5f\x0a\x9f\x01\x00\x00\xff\xff\x35\x30\xd5\x6a\xe9\x00\x00\x00") + +func testE2eTestingManifestsGuestbookRedisMasterServiceYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsGuestbookRedisMasterServiceYaml, + "test/e2e/testing-manifests/guestbook/redis-master-service.yaml", + ) +} + +func testE2eTestingManifestsGuestbookRedisMasterServiceYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsGuestbookRedisMasterServiceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/redis-master-service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsGuestbookRedisSlaveDeploymentYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x53\xcd\x6e\xdb\x3c\x10\xbc\xeb\x29\x16\xce\x21\x17\x3b\x72\x9c\xd8\xfe\xcc\xf3\xd7\x9f\x00\x0d\x52\x24\x41\x7b\x28\x8a\x60\x49\xad\x6d\xc2\x24\x57\xe5\x8f\x5a\x23\xc8\xbb\x17\xb4\x64\x5b\x42\xa3\x9b\x66\x38\x33\xab\x1d\x0a\x6b\xfd\x8d\x7c\xd0\xec\x04\x60\x5d\x87\xb2\xb9\x2e\x76\xda\x55\x02\xfe\xa7\xda\xf0\xde\x92\x8b\x85\xa5\x88\x15\x46\x14\x05\x80\x43\x4b\x02\x3c\x55\x3a\x4c\x82\xc1\x86\x8a\x50\x93\xca\x8c\xa7\xda\x68\x85\x41\xc0\xac\x00\x08\x64\x48\x45\xf6\x99\x01\xb0\x18\xd5\xf6\x0b\x4a\x32\xa1\x05\x20\xa7\x75\x3e\x1d\xe0\xd9\x90\x80\xd6\xb3\x45\xa2\x26\x2f\x40\xa2\xda\x91\xab\x0a\x80\x48\xb6\x36\x18\xa9\xf3\xec\x4d\x95\x1f\x33\xb0\x7f\x27\xe0\xbd\x88\x7f\x43\x00\x8e\x1f\x94\x1f\xc5\x2e\xa2\x76\xe4\x4f\xc6\x93\x6e\x05\x43\x17\x6d\x71\x43\x02\x5e\x5f\xaf\x1e\x73\xe2\x5d\x7e\x7d\x7b\x3b\xd1\x17\xf0\x9d\x00\x3d\x01\x3b\xb3\x07\x6d\x6b\x43\x79\xb3\xda\x6d\x20\x6e\x09\x2a\x17\x80\xeb\xa8\xd9\x01\xaf\x45\x4f\xb5\x8d\xb1\x0e\xa2\x2c\x37\x3a\x6e\x93\xbc\x52\x6c\xcb\x5d\x92\xe4\x1d\x45\x0a\x25\xfd\xc1\xec\x14\x4a\x69\x58\x96\xab\xa5\x5a\x52\x35\x25\xb9\x98\xcf\xe7\x78\x2b\x17\x8b\x65\x35\xfb\x6f\xb9\x5c\xaf\x16\xf3\xea\x66\x35\xa3\xe9\x14\xa5\xba\x9d\x97\x9b\x44\x21\x4a\xe6\x5d\xd9\xab\xb1\xf4\xc9\x5d\x85\xed\x29\x5b\xb1\xb5\x98\xef\xc1\x0f\x18\x75\xc7\xc8\x37\xe4\x47\x63\x18\x4d\x5a\x09\xaf\xf3\x4b\x4b\x5a\x0c\xb1\x25\x17\x37\xcb\xd5\x08\x7e\x9e\x77\x4e\x81\x93\x57\xd4\x6b\x26\x83\xbf\xf2\x10\x03\x0c\x40\xd5\x49\xc0\xf5\x74\x6a\x07\xa8\x25\xcb\x7e\x7f\x20\xee\xf5\x89\x21\xd7\x9c\xc5\xc7\x4e\x3e\x7d\x78\x7e\xf9\xfc\xf0\xf4\xfc\xf4\xf2\xf1\xf1\xe1\xbe\xe7\xd2\xa0\x49\x24\xf2\x9e\x7b\xe0\x05\xdc\xad\x61\xcf\xc9\x83\x32\x29\x8f\x9f\xdb\x5e\xeb\x0d\x54\x4c\x01\x1c\x47\xd0\x4e\x99\x54\x11\xe0\xa1\xa1\xbc\x00\xad\x68\x9c\x2b\x73\x10\x79\x60\xa5\x5d\x88\x84\x15\xa0\x52\x14\x02\xa0\xcb\x13\x6a\xcf\x2e\xf7\x0c\x0d\x7a\x8d\xd2\x10\x44\x86\xb5\x76\xd5\xa1\xf5\x76\x67\x03\x97\x2e\xe2\x32\xc0\x96\x43\x1c\x1f\x5a\xc8\x7a\x4e\xf1\x20\xb9\x3c\x7f\xc8\x25\x18\xed\x08\x50\x72\x43\x63\xc0\xee\xee\x1e\x8d\x92\x3b\x4a\xb3\xec\x70\x52\x92\xe1\xdf\x62\x70\xaa\x73\x23\xd7\x9c\xe0\x9a\x7d\xbf\x96\xc9\xf9\x0f\xf8\xca\x3e\x0a\xc8\xf5\x16\x7f\x03\x00\x00\xff\xff\x36\xf6\xf3\x52\x36\x04\x00\x00") + +func testE2eTestingManifestsGuestbookRedisSlaveDeploymentYamlInBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsGuestbookRedisSlaveDeploymentYamlIn, + "test/e2e/testing-manifests/guestbook/redis-slave-deployment.yaml.in", + ) +} + +func testE2eTestingManifestsGuestbookRedisSlaveDeploymentYamlIn() (*asset, error) { + bytes, err := testE2eTestingManifestsGuestbookRedisSlaveDeploymentYamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/redis-slave-deployment.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsGuestbookRedisSlaveServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x8c\x41\xaa\xc3\x30\x10\x43\xf7\x3e\x85\x2e\x90\xc5\xe7\x43\x4b\xe7\x1a\x85\xee\x27\xb6\x16\x43\x1c\xdb\xcc\x98\x9c\xbf\x24\xb4\x17\xe8\x4e\xe2\xe9\x49\x87\xbd\xe8\x61\xbd\x09\x8e\xbf\xb4\x59\x2b\x82\x27\xfd\xb0\xcc\xb4\x73\x6a\xd1\xa9\x92\x80\xa6\x3b\x05\xce\x62\xb1\x44\xd5\x83\x09\xa8\xba\xb2\xc6\x49\x01\x1d\xe3\x83\xaf\xea\xbd\x52\xf0\x1d\x02\xd3\xe8\x82\x55\xf3\xc6\x56\x52\x0c\xe6\x53\x1b\xdd\xe7\xe5\x2f\x57\x14\xdc\xfe\xef\x8f\x04\x04\x2b\xf3\xec\xfe\xc3\xf5\x3b\x00\x00\xff\xff\x51\x66\x08\x5a\xd1\x00\x00\x00") + +func testE2eTestingManifestsGuestbookRedisSlaveServiceYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsGuestbookRedisSlaveServiceYaml, + "test/e2e/testing-manifests/guestbook/redis-slave-service.yaml", + ) +} + +func testE2eTestingManifestsGuestbookRedisSlaveServiceYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsGuestbookRedisSlaveServiceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/redis-slave-service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressGceStaticIp2IngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8e\xb1\x6e\xeb\x30\x0c\x45\x77\x7d\xc5\x45\xde\x6c\xe7\x65\x0b\xf4\x07\x5d\x8a\x0e\x45\x77\x5a\x62\x2d\xc1\x8e\x28\x88\x4c\x8a\xfe\x7d\x61\x25\x4e\x87\x6e\xba\x07\xe2\xc1\xa1\x9a\x3f\xb8\x69\x96\xe2\x51\xd8\xbe\xa4\x2d\xb9\xcc\xe3\x72\xd6\x31\xcb\xf1\x76\x9a\xd8\xe8\xe4\x96\x5c\xa2\xc7\x4b\x99\x1b\xab\xba\x0b\x1b\x45\x32\xf2\x0e\x28\x74\x61\x0f\x35\xb2\x1c\x86\x5c\x1d\xf0\x0f\xef\x29\x2b\xa8\x14\xd9\xa8\x14\x6c\x2b\x46\x8e\x98\xbe\x61\x89\x61\xac\x86\x6b\x95\x02\x5a\x57\x09\x64\xb9\xcc\xa0\x87\x24\xd7\xb1\x4b\x7e\xef\xd5\x77\x80\xe5\x3a\x71\x2b\x6c\xdc\xd3\xf2\x3d\x66\x9c\x57\x99\x68\x1d\x9e\x05\xc3\xbd\xe8\xb0\xdb\x0e\x4e\x2b\x87\x4d\xd1\xae\x2b\x77\xd7\x80\x24\x6a\x1e\xbb\x62\xeb\x19\x83\x5c\x1c\x00\x24\xb3\xea\xfb\x0b\xa8\x64\x49\xf7\x31\xf4\xe9\x71\xfc\x14\x79\x20\x60\xa2\xb0\x70\x89\xfe\x09\x00\xe5\x76\xcb\x81\x5f\x7b\x06\x87\x24\x89\x29\x72\xd3\x61\x33\xeb\xdf\x8f\x6f\xd2\xcc\xe3\xfc\xdf\xfd\x04\x00\x00\xff\xff\xcf\xe6\xa4\x9a\x8b\x01\x00\x00") + +func testE2eTestingManifestsIngressGceStaticIp2IngYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressGceStaticIp2IngYaml, + "test/e2e/testing-manifests/ingress/gce/static-ip-2/ing.yaml", + ) +} + +func testE2eTestingManifestsIngressGceStaticIp2IngYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressGceStaticIp2IngYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/gce/static-ip-2/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressGceStaticIp2RcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8e\x31\x6e\x03\x31\x0c\x04\x7b\xbd\x82\x1f\x90\xed\x5c\x65\xa8\xcd\x07\x82\x14\xe9\x69\xdd\xc2\x27\x58\x12\x05\x92\xf1\xfb\x03\x25\x38\xc7\x45\xb2\x1d\xb1\xdc\xc1\xf0\x28\x1f\x50\x2b\xd2\x13\xdd\x5f\xc2\xad\xf4\x35\xd1\x3b\x46\x2d\x99\xbd\x48\x7f\x95\xee\x2a\xb5\x42\x43\x83\xf3\xca\xce\x29\x10\x75\x6e\x48\x84\xbc\xc9\x06\x5e\xa1\x16\x37\xf7\x61\xc1\x06\xf2\xec\xf5\x87\x60\x89\x96\x40\xe4\x68\xa3\xb2\x63\x36\x44\xcf\x9c\x99\xca\x17\x54\xdb\x2f\x22\x1e\xe3\x2f\xf4\xac\x76\xfc\x4c\x96\xee\x5c\x3a\xf4\x31\x8d\xff\x6a\xed\xe8\xd2\xf8\x8a\x44\xd7\xac\x87\x22\xc7\xdb\xe7\x05\xda\xe1\xb0\x88\x05\xd1\x61\x1e\xbf\x3f\xec\x38\x11\x06\xbd\x43\xd3\x72\x58\x1e\xfb\x21\xea\x4f\xa6\xf1\x57\xe2\x4d\xd4\x13\x9d\x4f\xe7\x53\xf8\x0a\x00\x00\xff\xff\xa9\x29\xab\x0c\x53\x01\x00\x00") + +func testE2eTestingManifestsIngressGceStaticIp2RcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressGceStaticIp2RcYaml, + "test/e2e/testing-manifests/ingress/gce/static-ip-2/rc.yaml", + ) +} + +func testE2eTestingManifestsIngressGceStaticIp2RcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressGceStaticIp2RcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/gce/static-ip-2/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressGceStaticIp2SvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8e\xc1\x0a\xc2\x30\x0c\x86\xef\x7d\x8a\xff\x05\x06\x7a\x93\x5e\xbd\xcb\x40\xf1\x1e\xdb\xe0\x8a\xdd\x12\xd2\x30\xf0\xed\x65\x75\x47\xf1\x16\x3e\xbe\x24\x1f\x69\xb9\xb3\xb5\x22\x4b\xc4\x7a\x0c\xaf\xb2\xe4\x88\x2b\xdb\x5a\x12\x87\x99\x9d\x32\x39\xc5\x00\x2c\x34\x73\x04\xa7\x49\x26\xa6\xcc\xd6\x86\xc9\x5d\x5b\x00\x2a\x3d\xb8\xb6\xcd\x01\x48\xf5\x97\xd4\x94\xd3\x26\xf8\x5b\x39\xe2\x22\x99\x47\x31\x0f\x80\x8a\x79\x5f\x1d\xfa\x18\x71\x3a\xf4\x3b\x4e\xf6\x64\x1f\x77\xb4\x43\x35\x71\x49\x52\x23\x6e\xe7\xb1\x93\x6f\xd4\xf6\x23\x00\x8d\x2b\x27\x17\xfb\x5b\xf2\x09\x00\x00\xff\xff\x0d\x93\xec\x7c\xf0\x00\x00\x00") + +func testE2eTestingManifestsIngressGceStaticIp2SvcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressGceStaticIp2SvcYaml, + "test/e2e/testing-manifests/ingress/gce/static-ip-2/svc.yaml", + ) +} + +func testE2eTestingManifestsIngressGceStaticIp2SvcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressGceStaticIp2SvcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/gce/static-ip-2/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressHttpIngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\xcf\xbd\x6e\xeb\x30\x0c\x05\xe0\x5d\x4f\x71\x80\x3b\xc7\xb9\xd9\x02\xbd\x41\x97\xa2\x53\x77\x4a\xa6\x63\xc1\xb1\xe8\x92\x74\xfa\xf3\xf4\x85\x93\xba\x48\x3b\x04\x68\x81\x6a\x12\x29\x1d\xe2\x23\x4d\xe5\x91\xd5\x8a\xd4\x88\xca\xfe\x2c\x3a\x94\x7a\x68\x86\xbd\x35\x45\xb6\xa7\x5d\x62\xa7\x5d\x18\x4a\x6d\x23\xee\xea\x41\xd9\x2c\x8c\xec\xd4\x92\x53\x0c\x40\xa5\x91\x23\x38\xf7\x32\xd2\x14\x6c\xe2\xbc\x74\xff\x61\x98\x13\x8f\xb9\x40\xf9\x69\x2e\xca\x06\x42\xcb\x1d\xcd\x47\x47\xa2\x3c\x70\x6d\x9b\x80\xf5\xba\x44\x00\x63\x3d\x95\xcc\xf7\x9f\x13\x7b\xa6\x96\xd5\x5e\xae\x5f\x1f\x44\x3d\x62\xff\x3f\x00\x3a\x1f\xd9\x96\xe8\x06\xbd\x98\x47\x74\x22\x4d\x22\x6d\xb2\x8c\xe7\x48\xef\x3e\x5d\x46\x03\x13\x79\x6f\x6b\xb1\x39\x97\x11\xdb\x4e\xe4\xa3\xf5\xcd\x72\x39\xb7\x45\x5f\xfe\x5c\xb9\x56\xce\x42\x49\xf4\xf6\x03\x4e\x22\xfd\x0d\xe7\xf5\x26\xe7\xaf\x17\x7e\x0f\x00\x00\xff\xff\xab\x26\x24\xc4\x42\x02\x00\x00") + +func testE2eTestingManifestsIngressHttpIngYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressHttpIngYaml, + "test/e2e/testing-manifests/ingress/http/ing.yaml", + ) +} + +func testE2eTestingManifestsIngressHttpIngYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressHttpIngYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/http/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressHttpRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\x3d\x8e\xe3\x30\x0c\x85\x7b\x9f\x82\x17\x70\xfe\xaa\x40\xed\x16\xdb\x06\xbb\x8b\xed\x19\xf9\x4d\x24\x44\x16\x05\x92\x4e\x31\xa7\x1f\x78\x66\x9c\x38\x98\xbc\x4e\xfc\xf4\x3e\x11\xe2\x96\xff\x43\x2d\x4b\x0d\x74\xdb\x77\xd7\x5c\x87\x40\x7f\xd0\x4a\x8e\xec\x59\xea\x2f\xa9\xae\x52\x0a\xb4\x1b\xe1\x3c\xb0\x73\xe8\x88\x2a\x8f\x08\x84\x98\x24\x81\x07\xa8\x75\xd6\x10\x67\xa2\x5f\x5d\x0b\xb4\xef\x88\x1c\x63\x2b\xec\x98\x09\xd1\xda\x30\xa7\xf0\x19\xc5\x96\x13\x11\xb7\xf6\x2c\x9d\x87\x8b\x78\x4e\x94\xea\x9c\x2b\xf4\x5e\xea\x5f\xac\xb2\xe8\xf2\xc8\x17\x04\xba\x44\xdd\x64\xd9\x5e\xa7\x33\xb4\xc2\x61\x3d\x0e\xe8\x1d\xe6\xfd\xe7\x0d\xdb\xce\x65\x83\xde\xa0\xe1\xb0\x39\xdc\xfb\x4d\xd4\x57\xdb\xf5\x8f\xe7\x4f\xa2\x1e\xe8\xb8\x3b\xee\xee\x54\xc1\x43\xae\x30\x3b\xa9\x9c\xf1\x68\x11\x25\xf7\xf6\x1b\xbe\x1e\x11\x35\xf6\x14\x68\x9b\xc0\xc5\xd3\xfb\x33\xfa\x29\x27\x6a\xd0\x2c\xc3\x5f\x44\xa9\xc3\xf7\xdf\x2e\xf1\x3c\x42\x26\x7f\xc9\x6c\x8a\x11\x66\xff\x92\xc2\x92\x94\xe1\x99\xbe\x71\x2e\x93\x62\x4d\x77\xdd\x47\x00\x00\x00\xff\xff\xb8\x09\xcb\x33\x12\x02\x00\x00") + +func testE2eTestingManifestsIngressHttpRcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressHttpRcYaml, + "test/e2e/testing-manifests/ingress/http/rc.yaml", + ) +} + +func testE2eTestingManifestsIngressHttpRcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressHttpRcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/http/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressHttpSvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x8f\xb1\x4a\x06\x41\x0c\x84\xfb\x3c\xc5\xbc\xc0\x82\x76\xb2\xad\xbd\x1c\x28\xf6\x71\x37\x78\x8b\xfb\x5f\x42\x36\x1c\xde\xdb\xcb\xad\xd7\x58\xd8\xd8\xd9\x85\xef\x23\xc3\x0c\x5b\x7b\x15\x1f\x4d\xb7\x8c\xfd\x9e\x3e\xda\x56\x33\x9e\xc5\xf7\x56\x84\x6e\x12\x5c\x39\x38\x13\xb0\xf1\x4d\x32\xa4\xac\xba\x0a\x57\xf1\xf1\x49\x40\xe7\x37\xe9\xe3\xd4\x00\x9b\xfd\xf0\x34\x4c\xca\xa9\xe2\x30\xc9\x78\xd2\x2a\x8b\x7a\x10\x60\xea\x31\x9f\xd2\x3c\x33\x1e\xee\x66\x42\xb0\xbf\x4b\x2c\x17\xba\xa0\xb9\x86\x16\xed\x19\x2f\x8f\xcb\x24\xdf\x4d\xd6\x08\x23\x60\x48\x97\x12\xea\xbf\x74\x48\x29\xd1\xdf\x27\x1e\xff\x61\x22\x7d\x05\x00\x00\xff\xff\xb7\x97\x1c\xfe\xc3\x01\x00\x00") + +func testE2eTestingManifestsIngressHttpSvcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressHttpSvcYaml, + "test/e2e/testing-manifests/ingress/http/svc.yaml", + ) +} + +func testE2eTestingManifestsIngressHttpSvcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressHttpSvcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/http/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressHttp2IngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8c\x31\x0e\xc2\x30\x10\x04\x7b\xbf\xe2\x24\xfa\xa0\x88\x14\xc8\x3f\xa0\x41\x54\xf4\x17\x7b\x49\x4e\xc6\x76\xb8\x73\xc2\xf7\x51\x0a\x10\xdd\x6a\x47\x33\xbc\xc8\x1d\x6a\x52\x8b\xa7\x82\xf6\xae\x9a\xa4\x4c\x5d\x3a\x5b\x27\xf5\xb8\xf5\x23\x1a\xf7\x2e\x49\x89\x9e\x2e\x65\x52\x98\xb9\x8c\xc6\x91\x1b\x7b\x47\x54\x38\xc3\x13\xc2\x5c\x33\x2f\xce\x16\x84\xfd\x3d\x50\x5a\x47\xe4\x20\xa4\x78\xad\xa2\x30\x62\x8a\x78\xf0\xfa\x6c\x34\x72\x48\x28\xb1\x73\xf4\x9d\xbb\x42\x64\xd0\x4d\x02\xae\xbf\xe2\x0c\x8e\x50\xfb\x87\xb7\xaa\xcd\xd3\x30\x9c\xdc\x27\x00\x00\xff\xff\xb1\x2e\x00\xda\xb9\x00\x00\x00") + +func testE2eTestingManifestsIngressHttp2IngYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressHttp2IngYaml, + "test/e2e/testing-manifests/ingress/http2/ing.yaml", + ) +} + +func testE2eTestingManifestsIngressHttp2IngYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressHttp2IngYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/http2/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressHttp2RcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8e\xbd\x6e\x03\x31\x0c\x83\x77\x3f\x85\x5e\xc0\x39\xe4\x9a\xa1\xf0\xdc\xb1\x43\xa7\xee\x8a\x8f\xc8\x19\xf1\x1f\x24\x35\x40\xdf\xbe\x70\xdb\xfc\x01\xc7\x51\xd4\x47\x92\x7b\xfa\x84\x68\x6a\x35\x10\xf7\xae\xd3\x65\xef\xce\xa9\x2e\x81\xde\xd0\x73\xfb\x2e\xa8\xe6\x0a\x8c\x17\x36\x0e\x8e\xa8\x72\x41\x20\xc4\xb5\xad\xe0\x05\xa2\x4e\x3b\xe2\x70\x04\x3d\xa7\xc8\x1a\x68\xef\x88\x14\x19\xd1\x9a\x0c\x87\xa8\xb0\xc5\xf5\x9d\x8f\xc8\xfa\x77\xa0\xd1\xf6\x9c\x43\x64\x28\x3d\xb3\xe1\x9f\x79\x68\x1d\xca\x4f\xf8\x66\x00\xd1\x75\xcc\x50\x6c\xd5\x38\x55\xc8\x0d\xf2\x1b\xf3\xaf\x71\xa9\xf0\x09\x81\x4e\x51\x76\xa9\x4d\xe7\xaf\x23\xa4\xc2\xa0\x1e\x33\xbc\x41\xcd\xff\x7e\xe8\x34\x60\x85\x5c\x20\x61\xde\xcd\x37\xbe\x37\xb1\x87\x75\xfe\x5e\xff\xd1\xc4\x02\xbd\x1e\x0e\x2f\xee\x27\x00\x00\xff\xff\x5a\xc7\xda\xaa\x6f\x01\x00\x00") + +func testE2eTestingManifestsIngressHttp2RcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressHttp2RcYaml, + "test/e2e/testing-manifests/ingress/http2/rc.yaml", + ) +} + +func testE2eTestingManifestsIngressHttp2RcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressHttp2RcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/http2/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressHttp2SvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8f\xbf\x4e\x03\x31\x0c\xc6\xf7\x3c\x85\x75\x4b\xa7\x1e\xa2\x74\x40\x5e\x59\x98\xd0\x49\x9c\xd8\xdd\x9c\xc5\x45\x4d\x63\xcb\x31\x95\x10\xe2\xdd\x51\x52\x6e\x60\xc0\x93\xfd\x7d\xfe\xf3\x33\x69\x7a\x63\xab\x49\x0a\xc2\xf5\x3e\x9c\x53\x59\x10\x5e\xd9\xae\x29\x72\xb8\xb0\xd3\x42\x4e\x18\x00\xa8\x14\x71\xf2\x24\xa5\xb6\xb2\x45\xbd\xb5\x8d\x94\x75\xa5\xf1\xfc\x71\x62\x2b\xec\x5c\xc7\x24\x77\xa4\xba\x57\x13\x97\x28\xb9\x22\xec\xbe\x86\xd5\x5d\x0f\x03\x0e\xcf\xf3\x3c\x1d\x86\xef\x5d\x00\x28\x74\x61\x04\x8e\xab\xac\x4c\x0b\x5b\x0d\x00\x99\x4e\x9c\x7f\x4f\x90\xea\x5f\xbb\x2a\xc7\x66\xf9\xa7\x32\xc2\x8b\x2c\x3c\x89\x79\x00\x50\x31\xef\x43\xfb\x9e\x22\x1c\x8f\x0f\x7d\x85\x93\xbd\xb3\x4f\x5d\x7b\xdc\xc4\x0d\x0c\x61\x7e\x9a\xba\x72\x23\xe9\x88\xa1\x3d\x96\x39\xba\xd8\x3f\x14\x3f\x01\x00\x00\xff\xff\x9d\xf4\x34\x9b\x34\x01\x00\x00") + +func testE2eTestingManifestsIngressHttp2SvcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressHttp2SvcYaml, + "test/e2e/testing-manifests/ingress/http2/svc.yaml", + ) +} + +func testE2eTestingManifestsIngressHttp2SvcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressHttp2SvcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/http2/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressMultipleCertsIngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x8e\x3b\x6e\xc4\x30\x10\x43\x7b\x9f\x82\x17\xb0\x37\x4e\x52\x2c\xe6\x06\x69\x82\x54\xe9\x67\x65\x62\x25\xd8\x96\x04\xcd\xec\xe6\xfa\x81\x9d\x4f\x91\x5c\xc0\x1d\xc9\x19\x12\x4f\x6b\x7a\x67\xb3\x54\xb2\x20\xd3\x3f\x4a\x9b\x53\xbe\x0e\xf3\xd9\x86\x54\x4e\xf7\xf1\x42\xd7\xb1\x9b\x53\x9e\x04\x2f\xf9\xda\x68\xd6\xad\x74\x9d\xd4\x55\x3a\x20\xeb\x4a\xc1\x7a\x5b\x3c\xd5\x85\x7d\x60\x73\xeb\xac\x32\x6c\xc7\x76\x5b\x68\x9b\xe8\x11\x8b\xb9\xc0\x69\x3e\x0e\xe9\x6b\x67\x08\x65\xed\x00\x20\xba\x57\xd9\x15\x50\xd5\xa3\xfd\x98\x7e\xb7\x82\xd3\xd6\xfb\xce\x80\x8b\x86\x99\x79\x92\xdf\x00\x30\xb6\x7b\x0a\x7c\xdd\x61\x18\x62\x89\xd4\x89\xcd\xfa\x6d\xda\xfe\x3f\xbe\x95\xe6\x82\xf3\xc3\x1f\xb4\xc7\xe3\xa2\x3d\x1d\x17\xed\xf9\x48\x68\x9f\x01\x00\x00\xff\xff\x1f\x41\x6c\x08\xd0\x02\x00\x00") + +func testE2eTestingManifestsIngressMultipleCertsIngYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressMultipleCertsIngYaml, + "test/e2e/testing-manifests/ingress/multiple-certs/ing.yaml", + ) +} + +func testE2eTestingManifestsIngressMultipleCertsIngYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressMultipleCertsIngYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/multiple-certs/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressMultipleCertsRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8e\x31\x6e\x03\x31\x0c\x04\x7b\xbd\x82\x1f\x90\xed\x5c\x65\xa8\xcd\x07\x82\x14\xe9\x69\xdd\xc2\x27\x58\x12\x05\x92\xf1\xfb\x03\x25\x38\xc7\x45\xb2\x1d\xb1\xdc\xc1\xf0\x28\x1f\x50\x2b\xd2\x13\xdd\x5f\xc2\xad\xf4\x35\xd1\x3b\x46\x2d\x99\xbd\x48\x7f\x95\xee\x2a\xb5\x42\x43\x83\xf3\xca\xce\x29\x10\x75\x6e\x48\x84\xbc\xc9\x06\x5e\xa1\x16\x37\xf7\x61\xc1\x06\xf2\xec\xf5\x87\x60\x89\x96\x40\xe4\x68\xa3\xb2\x63\x36\x44\xcf\x9c\x99\xca\x17\x54\xdb\x2f\x22\x1e\xe3\x2f\xf4\xac\x76\xfc\x4c\x96\xee\x5c\x3a\xf4\x31\x8d\xff\x6a\xed\xe8\xd2\xf8\x8a\x44\xd7\xac\x87\x22\xc7\xdb\xe7\x05\xda\xe1\xb0\x88\x05\xd1\x61\x1e\xbf\x3f\xec\x38\x11\x06\xbd\x43\xd3\x72\x58\x1e\xfb\x21\xea\x4f\xa6\xf1\x57\xe2\x4d\xd4\x13\x9d\x4f\xe7\x53\xf8\x0a\x00\x00\xff\xff\xa9\x29\xab\x0c\x53\x01\x00\x00") + +func testE2eTestingManifestsIngressMultipleCertsRcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressMultipleCertsRcYaml, + "test/e2e/testing-manifests/ingress/multiple-certs/rc.yaml", + ) +} + +func testE2eTestingManifestsIngressMultipleCertsRcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressMultipleCertsRcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/multiple-certs/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressMultipleCertsSvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8e\xc1\x0a\xc2\x30\x0c\x86\xef\x7d\x8a\xff\x05\x06\x7a\x93\x5e\xbd\xcb\x40\xf1\x1e\xdb\xe0\x8a\xdd\x12\xd2\x30\xf0\xed\x65\x75\x47\xf1\x16\x3e\xbe\x24\x1f\x69\xb9\xb3\xb5\x22\x4b\xc4\x7a\x0c\xaf\xb2\xe4\x88\x2b\xdb\x5a\x12\x87\x99\x9d\x32\x39\xc5\x00\x2c\x34\x73\x04\xa7\x49\x26\xa6\xcc\xd6\x86\xc9\x5d\x5b\x00\x2a\x3d\xb8\xb6\xcd\x01\x48\xf5\x97\xd4\x94\xd3\x26\xf8\x5b\x39\xe2\x22\x99\x47\x31\x0f\x80\x8a\x79\x5f\x1d\xfa\x18\x71\x3a\xf4\x3b\x4e\xf6\x64\x1f\x77\xb4\x43\x35\x71\x49\x52\x23\x6e\xe7\xb1\x93\x6f\xd4\xf6\x23\x00\x8d\x2b\x27\x17\xfb\x5b\xf2\x09\x00\x00\xff\xff\x0d\x93\xec\x7c\xf0\x00\x00\x00") + +func testE2eTestingManifestsIngressMultipleCertsSvcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressMultipleCertsSvcYaml, + "test/e2e/testing-manifests/ingress/multiple-certs/svc.yaml", + ) +} + +func testE2eTestingManifestsIngressMultipleCertsSvcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressMultipleCertsSvcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/multiple-certs/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressNegIngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xca\x31\x0e\xc2\x30\x0c\x85\xe1\x3d\xa7\xf0\x09\x0a\xdd\xaa\xdc\x80\x05\x31\xb1\xbb\xc9\x53\xb1\xa2\x3a\x95\x6d\x95\xeb\xa3\x6c\x74\xfb\xf4\xde\xcf\x87\xbc\x61\x2e\x5d\x33\x29\xe2\xdb\xad\x89\x6e\x53\x5b\x7c\x92\x7e\x3b\xe7\x15\xc1\x73\x6a\xa2\x35\xd3\x43\x37\x83\x7b\xda\x11\x5c\x39\x38\x27\x22\xe5\x1d\x99\x3e\xdd\x63\x28\xf9\x81\x32\xe6\x95\x4b\x83\xd6\x41\x22\x87\x9d\x52\xf0\xbc\xa6\x7f\xcf\xab\x5b\x64\x5a\xee\xe9\x17\x00\x00\xff\xff\xf6\xf7\x9b\x37\x8e\x00\x00\x00") + +func testE2eTestingManifestsIngressNegIngYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressNegIngYaml, + "test/e2e/testing-manifests/ingress/neg/ing.yaml", + ) +} + +func testE2eTestingManifestsIngressNegIngYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressNegIngYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressNegRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x90\x41\x6b\x42\x31\x10\x84\xef\xf9\x15\xfb\x07\x9e\xfa\x3c\xf4\x90\x73\xa1\x14\x4a\x79\xb4\xd0\xfb\x9a\x37\xd5\x60\xb2\x09\xd9\x55\xf0\xdf\x97\x68\x15\x5b\xf7\x92\xb0\xcc\x7c\x3b\x0c\xd7\xf8\x85\xa6\xb1\x88\x27\xae\x55\x97\xc7\xd1\xed\xa3\xcc\x9e\x9e\x51\x53\x39\x65\x88\xb9\x0c\xe3\x99\x8d\xbd\x23\x4a\xbc\x41\xd2\xfe\x23\x6a\x07\xf1\xb4\x2b\x6a\xc2\x19\x8e\xa8\x3f\x77\x0b\xad\x08\x5d\x98\xa3\x7c\x80\xe7\xd3\x27\x42\x91\x59\x3d\x3d\xad\x1c\x91\x22\x21\x58\x69\x17\x54\x66\x0b\xbb\xb7\x3b\xf6\x23\xdd\x90\x6b\x62\xc3\xaf\xe1\x2e\x53\x9f\xf4\xc7\xfb\xe8\x26\xba\xc6\xe9\x13\x8a\x18\x47\x41\xbb\x39\x06\x8a\x99\xb7\xf0\xb4\x0d\x6d\x11\xcb\x72\x7f\xd8\xa0\x09\x0c\x3a\x60\x8d\xc1\xa0\x36\x9c\x15\xba\x54\xb4\x23\x86\x2b\xdb\x8f\x8b\xf1\x76\xf5\xac\x98\x0e\x29\x4d\x25\xc5\x70\xf2\xf4\xfa\xfd\x5e\x6c\x6a\xd0\xde\xe3\x55\xf5\xaf\xa7\xcb\xd2\xd0\x72\x14\xb6\x58\xe4\xa5\x71\xc0\x84\x16\xcb\x7c\xeb\x6c\x5c\xaf\xdc\x4f\x00\x00\x00\xff\xff\xed\xb6\x7e\xf0\xad\x01\x00\x00") + +func testE2eTestingManifestsIngressNegRcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressNegRcYaml, + "test/e2e/testing-manifests/ingress/neg/rc.yaml", + ) +} + +func testE2eTestingManifestsIngressNegRcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressNegRcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressNegSvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x8f\xbd\x4a\x44\x41\x0c\x85\xfb\x79\x8a\xb0\xcd\x56\xae\x8a\xe0\x4f\x3a\xb1\x97\x05\xc5\x7e\x98\x9b\x1d\x83\x73\x93\x21\xc9\x5d\x58\xc4\x77\x97\x19\x2b\xbb\x93\x93\x9c\x2f\x49\xee\xfc\x41\xe6\xac\x82\x70\xbe\x4d\x5f\x2c\x0b\xc2\x1b\xd9\x99\x0b\xa5\x95\x22\x2f\x39\x32\x26\x00\xc9\x2b\x21\x7c\xaa\xc7\x50\x09\x20\x8b\x68\xe4\x60\x15\x1f\x7d\x80\xd2\x74\x5b\x0e\x55\xb5\x36\x3a\x14\x5d\xaf\x85\x2a\xc2\xfe\x7b\xc7\x52\x8d\xdc\x77\x18\xb6\xd1\xcf\x3e\x79\xa7\x32\x22\x5d\x2d\x66\xf6\x6a\x4a\x84\xc7\x9b\x09\xea\xa6\xa1\x45\x1b\xc2\xfb\xcb\x71\x3a\x91\xad\x52\x1c\xe7\xd0\xd3\xdd\xc3\x7d\x02\x70\x6a\x54\x42\xed\x6f\xb7\x6d\xf2\xef\x38\x27\x1f\x3f\x3d\x9f\x4e\x2c\x1c\x17\x84\x57\x95\xe1\xc7\xa5\xd3\x28\x16\x1a\xb0\xf4\x1b\x00\x00\xff\xff\xf5\x31\x62\x40\xfe\x00\x00\x00") + +func testE2eTestingManifestsIngressNegSvcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressNegSvcYaml, + "test/e2e/testing-manifests/ingress/neg/svc.yaml", + ) +} + +func testE2eTestingManifestsIngressNegSvcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressNegSvcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressNegClusteripIngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xca\x31\x0e\xc2\x30\x0c\x85\xe1\x3d\xa7\xf0\x09\x0a\xdd\xaa\xdc\x80\x05\x31\xb1\xbb\xc9\x53\xb1\xa2\x3a\x95\x6d\x95\xeb\xa3\x6c\x74\xfb\xf4\xde\xcf\x87\xbc\x61\x2e\x5d\x33\x29\xe2\xdb\xad\x89\x6e\x53\x5b\x7c\x92\x7e\x3b\xe7\x15\xc1\x73\x6a\xa2\x35\xd3\x43\x37\x83\x7b\xda\x11\x5c\x39\x38\x27\x22\xe5\x1d\x99\x3e\xdd\x63\x28\xf9\x81\x32\xe6\x95\x4b\x83\xd6\x41\x22\x87\x9d\x52\xf0\xbc\xa6\x7f\xcf\xab\x5b\x64\x5a\xee\xe9\x17\x00\x00\xff\xff\xf6\xf7\x9b\x37\x8e\x00\x00\x00") + +func testE2eTestingManifestsIngressNegClusteripIngYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressNegClusteripIngYaml, + "test/e2e/testing-manifests/ingress/neg-clusterip/ing.yaml", + ) +} + +func testE2eTestingManifestsIngressNegClusteripIngYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressNegClusteripIngYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg-clusterip/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressNegClusteripRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x90\x41\x6b\x42\x31\x10\x84\xef\xf9\x15\xfb\x07\x9e\xfa\x3c\xf4\x90\x73\xa1\x14\x4a\x79\xb4\xd0\xfb\x9a\x37\xd5\x60\xb2\x09\xd9\x55\xf0\xdf\x97\x68\x15\x5b\xf7\x92\xb0\xcc\x7c\x3b\x0c\xd7\xf8\x85\xa6\xb1\x88\x27\xae\x55\x97\xc7\xd1\xed\xa3\xcc\x9e\x9e\x51\x53\x39\x65\x88\xb9\x0c\xe3\x99\x8d\xbd\x23\x4a\xbc\x41\xd2\xfe\x23\x6a\x07\xf1\xb4\x2b\x6a\xc2\x19\x8e\xa8\x3f\x77\x0b\xad\x08\x5d\x98\xa3\x7c\x80\xe7\xd3\x27\x42\x91\x59\x3d\x3d\xad\x1c\x91\x22\x21\x58\x69\x17\x54\x66\x0b\xbb\xb7\x3b\xf6\x23\xdd\x90\x6b\x62\xc3\xaf\xe1\x2e\x53\x9f\xf4\xc7\xfb\xe8\x26\xba\xc6\xe9\x13\x8a\x18\x47\x41\xbb\x39\x06\x8a\x99\xb7\xf0\xb4\x0d\x6d\x11\xcb\x72\x7f\xd8\xa0\x09\x0c\x3a\x60\x8d\xc1\xa0\x36\x9c\x15\xba\x54\xb4\x23\x86\x2b\xdb\x8f\x8b\xf1\x76\xf5\xac\x98\x0e\x29\x4d\x25\xc5\x70\xf2\xf4\xfa\xfd\x5e\x6c\x6a\xd0\xde\xe3\x55\xf5\xaf\xa7\xcb\xd2\xd0\x72\x14\xb6\x58\xe4\xa5\x71\xc0\x84\x16\xcb\x7c\xeb\x6c\x5c\xaf\xdc\x4f\x00\x00\x00\xff\xff\xed\xb6\x7e\xf0\xad\x01\x00\x00") + +func testE2eTestingManifestsIngressNegClusteripRcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressNegClusteripRcYaml, + "test/e2e/testing-manifests/ingress/neg-clusterip/rc.yaml", + ) +} + +func testE2eTestingManifestsIngressNegClusteripRcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressNegClusteripRcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg-clusterip/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressNegClusteripSvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x8f\xcb\x4a\x44\x31\x0c\x86\xf7\x7d\x8a\x30\x9b\x59\x39\x2a\x82\x97\xec\x64\x56\x6e\xe4\x80\xe2\xbe\xf4\x64\x6a\xb1\x27\x29\x49\x3a\x30\x88\xef\x2e\xad\x2b\x77\x3f\x5f\xf2\xe5\x12\x5b\xf9\x20\xb5\x22\x8c\x70\xbe\x0d\x5f\x85\x57\x84\x37\xd2\x73\x49\x14\x36\xf2\xb8\x46\x8f\x18\x00\x38\x6e\x84\xf0\x29\xe6\x23\x05\x80\xc8\x2c\x1e\xbd\x08\xdb\xa8\x03\xa4\x2a\x7d\x3d\x64\x91\x5c\xe9\x90\x64\xbb\x66\xca\x08\xfb\xef\x5d\xe1\xac\x64\xb6\x43\xd7\x4e\x3f\xfb\x60\x8d\xd2\x50\x9a\xa8\x4f\xf7\x6a\x46\x84\xc7\x9b\x39\xa8\xa9\xb8\x24\xa9\x08\xef\xc7\x65\x12\x8f\x9a\xc9\x97\xd9\xf4\x74\xf7\x70\x1f\x00\x8c\x2a\x25\x17\xfd\xdb\xad\x9d\xff\x1d\x67\x64\xe3\xa7\xe7\xd3\xa9\x70\xf1\x0b\xc2\xab\xf0\xe0\x7e\x69\x84\x70\xac\xdd\x9c\xf4\x65\x09\xbf\x01\x00\x00\xff\xff\x99\xd1\x46\x3d\xff\x00\x00\x00") + +func testE2eTestingManifestsIngressNegClusteripSvcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressNegClusteripSvcYaml, + "test/e2e/testing-manifests/ingress/neg-clusterip/svc.yaml", + ) +} + +func testE2eTestingManifestsIngressNegClusteripSvcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressNegClusteripSvcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg-clusterip/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressNegExposedIngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xca\x31\x0e\xc2\x30\x0c\x85\xe1\x3d\xa7\xf0\x09\x0a\xdd\xaa\xdc\x80\x05\x31\xb1\xbb\xc9\x53\xb1\xa2\x3a\x95\x6d\x95\xeb\xa3\x6c\x74\xfb\xf4\xde\xcf\x87\xbc\x61\x2e\x5d\x33\x29\xe2\xdb\xad\x89\x6e\x53\x5b\x7c\x92\x7e\x3b\xe7\x15\xc1\x73\x6a\xa2\x35\xd3\x43\x37\x83\x7b\xda\x11\x5c\x39\x38\x27\x22\xe5\x1d\x99\x3e\xdd\x63\x28\xf9\x81\x32\xe6\x95\x4b\x83\xd6\x41\x22\x87\x9d\x52\xf0\xbc\xa6\x7f\xcf\xab\x5b\x64\x5a\xee\xe9\x17\x00\x00\xff\xff\xf6\xf7\x9b\x37\x8e\x00\x00\x00") + +func testE2eTestingManifestsIngressNegExposedIngYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressNegExposedIngYaml, + "test/e2e/testing-manifests/ingress/neg-exposed/ing.yaml", + ) +} + +func testE2eTestingManifestsIngressNegExposedIngYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressNegExposedIngYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg-exposed/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressNegExposedRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x90\x31\x6e\xf3\x30\x0c\x85\x77\x9f\x82\x17\x50\xec\x64\x0a\x04\x64\xfa\xff\xb1\x43\x86\xa2\x6b\xc1\xc8\x6c\x2c\x44\x12\x05\x91\x0e\xd0\xdb\x17\x4a\x1b\x5b\x45\xd6\xa0\x5c\x24\x3c\xf1\xbd\x4f\x24\x66\xff\x46\x45\x3c\x27\x0b\x98\xb3\xf4\xd7\x6d\x77\xf1\x69\xb4\xf0\x9f\x72\xe0\xcf\x48\x49\xbb\x48\x8a\x23\x2a\xda\x0e\x20\xe0\x89\x82\xd4\x1b\x40\x99\x93\x85\x89\x45\x13\x46\xea\x00\xea\xd1\x08\x92\xc9\xd5\x46\xa1\x40\x4e\xb9\x7c\x9b\x22\xaa\x9b\x5e\x9a\x94\xc7\x1c\xa5\x98\x03\x2a\xfd\x18\x1a\x7a\xad\xf0\xcb\xfb\xe8\x06\xb8\x83\x6b\x39\x4e\x8a\x3e\x51\x59\x1c\x06\x7c\xc4\x33\x59\x38\xbb\xb2\xf1\xdc\x5f\xe6\x13\x95\x44\x4a\x62\x68\x47\x46\x49\xd4\xdc\x3a\xa4\x17\x2a\x57\x32\xf7\x6c\xbb\xdd\x6c\x17\xea\x3a\xeb\xaa\x39\x8e\x11\xd3\xb8\x7e\xcd\x40\x7f\xf2\xa9\x97\xa9\x51\x8c\x6b\x9f\x6f\x84\xf7\x3b\x01\xcc\xa4\x9a\x0f\x5a\x66\x02\x33\x8f\xf9\xf0\x81\x41\x08\x4c\xe6\xa2\x87\xfd\x30\x0c\x8b\xb5\x2a\xd2\x82\x72\x61\x65\xc7\xc1\xc2\xeb\xbf\xe3\xa2\x37\xf3\x1f\xb9\xa8\x85\x26\xe4\xd9\x7b\xd8\xfd\xd9\x1e\xf6\xcf\xd8\xc3\x7e\xe8\xbe\x02\x00\x00\xff\xff\x7c\x23\xde\xdf\xfd\x02\x00\x00") + +func testE2eTestingManifestsIngressNegExposedRcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressNegExposedRcYaml, + "test/e2e/testing-manifests/ingress/neg-exposed/rc.yaml", + ) +} + +func testE2eTestingManifestsIngressNegExposedRcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressNegExposedRcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg-exposed/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressNegExposedSvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x90\x3f\x6b\xf3\x30\x10\xc6\x77\x7d\x8a\x43\x4b\x96\xbc\x79\x9d\xc6\x43\xb8\xad\x64\xea\x52\x0c\x2d\x5d\x8b\x90\x2f\xae\xa8\xad\x13\xba\x73\x68\x30\xfe\xee\x45\x6a\xa1\x7f\xa6\x6e\x3f\x9d\xa4\xdf\x23\x3d\x2e\x85\x27\xca\x12\x38\x22\x5c\xf6\xe6\x35\xc4\x1e\xe1\x81\xf2\x25\x78\x32\x13\xa9\xeb\x9d\x3a\x34\x00\xd1\x4d\x84\xf0\xc2\xa2\x85\x0c\x80\x8b\x91\xd5\x69\xe0\x28\x65\x1f\xc0\x8f\x3c\xf7\xbb\x81\x79\x18\x69\xe7\x79\xfa\x1f\x69\x40\xd8\x2c\x36\xc4\x21\x93\x88\x45\xcd\x33\x6d\x2d\xbd\x25\x16\xea\x9f\x13\x67\x15\x8b\x8b\x3d\x36\x16\x97\x75\x6b\xdb\xf6\x50\x60\x5d\x37\x46\x12\xf9\x62\xad\x67\x0a\xfc\xab\x88\x70\x6c\x6a\xd6\xd7\x6b\xf6\x75\x9d\x32\x2b\x7b\x1e\x11\x1e\x4f\x5d\x9d\xa8\xcb\x03\x69\xf7\x79\xa9\x69\xbe\x39\xda\xf6\xf0\x4b\x72\xf3\x27\x49\xcd\x16\x1a\xc9\x2b\xe7\x8f\x3f\xe7\x39\xfe\x28\x45\x48\x4a\x97\xb7\xe7\x73\x88\x41\xaf\x08\xf7\x1c\xcb\x5c\xaf\x89\x10\x4e\xe3\x2c\x4a\xf9\xae\x33\xef\x01\x00\x00\xff\xff\xab\x60\x86\x5b\x77\x01\x00\x00") + +func testE2eTestingManifestsIngressNegExposedSvcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressNegExposedSvcYaml, + "test/e2e/testing-manifests/ingress/neg-exposed/svc.yaml", + ) +} + +func testE2eTestingManifestsIngressNegExposedSvcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressNegExposedSvcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg-exposed/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressNginxRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x54\x4d\x6f\xdb\x30\x0c\xbd\xfb\x57\x10\xe8\x0e\xdb\x41\x89\xb3\xb6\x40\x66\x60\x87\xa2\xdd\xba\x1d\xb6\x19\x6d\xb1\xeb\x40\xcb\x6c\x2c\x44\x96\x04\x91\x4e\xdb\xfd\xfa\x41\x89\xe3\xd8\xfd\x58\x77\x19\x8f\xe4\xe3\xe3\xe3\x33\xe5\x23\x70\x2b\xe3\xee\xc1\xb8\x55\x24\x66\xd0\xde\x49\xf4\xd6\x52\x84\xab\xf3\x0c\x83\xf9\x49\x91\x8d\x77\x05\x6c\x16\xd9\xda\xb8\xba\x80\x2b\x0a\xd6\x68\x14\xe3\xdd\xf9\x80\xce\x5a\x12\xac\x51\xb0\xc8\x00\x1c\xb6\x54\xec\x88\x55\x4f\xac\x0e\xc4\x19\x80\xc5\x8a\x2c\x27\x28\xc0\x7a\xc9\x0a\x43\x78\x8c\xb7\x55\xc6\x81\x74\xc2\xc4\xdd\x40\x2e\x60\x91\x01\x30\x59\xd2\xe2\xe3\x6b\xdd\x00\x42\x6d\xb0\x28\xb4\x43\x8e\x05\xa6\x18\x6b\x78\x8d\x69\x17\xcf\xad\xd5\x97\xf7\x52\x53\x08\xc5\xd6\xb8\xad\x3f\x97\x11\x35\x95\x14\x8d\xaf\xaf\x49\x7b\x57\x73\x01\x79\x0f\x4b\x86\xa0\x71\x14\x07\x0d\x0a\x4c\x8b\x2b\x2a\x92\x94\xd9\x4a\xc7\x99\xf1\xf3\x97\x4c\x2c\xf2\xd9\x87\x59\xae\x2a\x12\x9c\x2d\x06\x85\xd6\x6c\xc8\x11\x73\x19\x7d\x45\x87\xd5\x00\x1a\x91\x70\x49\x32\x4e\x01\x04\x94\xa6\x80\x79\x43\x68\xa5\xf9\x3d\x2d\xf9\x28\x05\x2c\xf2\xf7\xa7\x27\x93\x3c\xeb\x86\x92\x09\x5f\x6e\x6e\xca\x51\xc1\x38\x23\x06\xed\x05\x59\x7c\x18\x16\x3d\xce\x47\x08\x31\x2d\xf9\x4e\x86\xe2\xe9\xbf\xb8\x9a\xe2\x08\x3a\x26\xa8\xfd\x9d\xbb\xc3\x58\xc3\x59\xf9\x75\x28\x91\xdb\x8c\x17\x52\x3d\x55\xf9\xe3\xe2\xd7\xf7\xb3\x6f\x9f\x26\xc2\x37\x68\x3b\xfa\x1c\x7d\x3b\xb5\x00\xe0\xd6\x90\xad\xaf\xe8\xf6\x71\xbe\xaf\x94\x5b\x8f\xf6\xb7\x33\x4b\x13\xfe\x32\xf2\xba\x3c\x3b\xff\x6f\x73\x39\xa0\x3e\x0c\x4f\x5f\x68\x74\xbd\xea\x70\x4f\xe5\xf6\xdb\x2d\xc7\xee\x37\x9e\xe5\x49\xfa\x49\xcb\xc9\xc9\xf1\xb3\x3d\xe3\xfc\x11\xdc\x11\xd0\x7d\xf0\x4c\xb0\x58\xe6\xcb\x1c\xc4\x03\x6a\x9d\xfe\x1d\xbb\x3f\x09\x0b\x0a\x83\x71\xd0\x45\x0b\xfd\xfd\xa6\x5c\xc7\x23\x12\x69\x0c\x83\x61\xf0\x21\x3d\x13\xb4\x2f\x8b\xda\x0e\x79\x56\xd6\xb4\x82\x71\x35\xb1\xe3\xc5\x97\x33\xc2\x28\x55\xd3\x2d\x76\x56\x54\x85\x7a\x4d\xae\x56\x4c\x71\x63\x34\x7d\x5c\x77\x15\x29\x7e\x60\xa1\x76\xbe\xc7\xa4\x37\xb4\x07\x4e\x48\x42\x57\x59\xc3\xcd\xd0\xfc\xe6\xed\xe4\x1e\xde\xcd\x9f\x1c\xf7\x9f\x00\x00\x00\xff\xff\x25\x26\x79\xe6\x76\x05\x00\x00") + +func testE2eTestingManifestsIngressNginxRcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressNginxRcYaml, + "test/e2e/testing-manifests/ingress/nginx/rc.yaml", + ) +} + +func testE2eTestingManifestsIngressNginxRcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressNginxRcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/nginx/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressPreSharedCertIngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x8f\xbd\x72\xe3\x30\x0c\x84\x7b\x3d\xc5\x8e\xaf\x96\x7c\xee\x3c\x2c\xaf\xbb\x26\x93\x2a\x3d\x44\x6e\x2c\x8e\x24\x52\x21\x20\xfb\xf5\x33\xa2\xe2\xfc\xb8\x0a\x2b\x02\xb3\x8b\xfd\x56\x96\xf8\xc2\xa2\x31\x27\x87\x44\xbb\xe5\x32\xc6\x74\xe9\xc6\xb3\x76\x31\x1f\xaf\xa7\x9e\x26\xa7\x66\x8c\x29\x38\xfc\x4f\x97\x42\xd5\x66\xa6\x49\x10\x13\xd7\x00\x49\x66\x3a\x2c\x85\xad\x0e\x52\x18\x5a\xcf\x62\x0d\xf0\x07\xff\x38\xe5\x1b\x24\xa5\x6c\x62\x31\x27\xdc\xe2\x34\xa1\x27\x24\x04\x06\xac\x4b\x4e\x30\xaa\xb9\xaa\xfe\xd2\xe9\xbe\x40\xdc\xd3\xba\x8b\x5f\xba\x71\xed\x59\x12\x8d\x95\xea\x21\xcd\xe1\xb0\xdd\x69\x1f\xd6\x87\x46\x17\xfa\xfd\xd8\xe6\x9f\x7d\x44\xe1\xdb\x1a\x0b\x15\x82\xc0\x57\x59\x27\x43\x2f\x7e\x64\x0a\x5d\x83\xfb\x77\xb3\x00\xca\x72\x8d\x9e\x4f\xb5\x1f\xfd\x90\x07\x4a\x60\xd1\x76\x30\x5b\xf4\xbb\xe4\x39\x6f\x0c\xe7\xbf\x0d\x50\xd6\x89\x95\xbf\xc5\x90\xd5\x5c\x2d\xd8\xdd\x9b\xf8\x3c\x57\xdf\x76\x61\x0f\x01\x16\xb1\x41\xef\x43\x5b\x47\x87\xe3\x66\xfb\xd8\x3d\x60\xed\xef\x17\x70\x3f\x84\x9f\x88\xef\x01\x00\x00\xff\xff\x7d\xdc\xd4\xbb\xef\x01\x00\x00") + +func testE2eTestingManifestsIngressPreSharedCertIngYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressPreSharedCertIngYaml, + "test/e2e/testing-manifests/ingress/pre-shared-cert/ing.yaml", + ) +} + +func testE2eTestingManifestsIngressPreSharedCertIngYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressPreSharedCertIngYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/pre-shared-cert/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressPreSharedCertRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8e\x31\x6e\x03\x31\x0c\x04\x7b\xbd\x82\x1f\x90\xed\x5c\x65\xa8\xcd\x07\x82\x14\xe9\x69\xdd\xc2\x27\x58\x12\x05\x92\xf1\xfb\x03\x25\x38\xc7\x45\xb2\x1d\xb1\xdc\xc1\xf0\x28\x1f\x50\x2b\xd2\x13\xdd\x5f\xc2\xad\xf4\x35\xd1\x3b\x46\x2d\x99\xbd\x48\x7f\x95\xee\x2a\xb5\x42\x43\x83\xf3\xca\xce\x29\x10\x75\x6e\x48\x84\xbc\xc9\x06\x5e\xa1\x16\x37\xf7\x61\xc1\x06\xf2\xec\xf5\x87\x60\x89\x96\x40\xe4\x68\xa3\xb2\x63\x36\x44\xcf\x9c\x99\xca\x17\x54\xdb\x2f\x22\x1e\xe3\x2f\xf4\xac\x76\xfc\x4c\x96\xee\x5c\x3a\xf4\x31\x8d\xff\x6a\xed\xe8\xd2\xf8\x8a\x44\xd7\xac\x87\x22\xc7\xdb\xe7\x05\xda\xe1\xb0\x88\x05\xd1\x61\x1e\xbf\x3f\xec\x38\x11\x06\xbd\x43\xd3\x72\x58\x1e\xfb\x21\xea\x4f\xa6\xf1\x57\xe2\x4d\xd4\x13\x9d\x4f\xe7\x53\xf8\x0a\x00\x00\xff\xff\xa9\x29\xab\x0c\x53\x01\x00\x00") + +func testE2eTestingManifestsIngressPreSharedCertRcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressPreSharedCertRcYaml, + "test/e2e/testing-manifests/ingress/pre-shared-cert/rc.yaml", + ) +} + +func testE2eTestingManifestsIngressPreSharedCertRcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressPreSharedCertRcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/pre-shared-cert/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressPreSharedCertSvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8e\xc1\x0a\xc2\x30\x0c\x86\xef\x7d\x8a\xff\x05\x06\x7a\x93\x5e\xbd\xcb\x40\xf1\x1e\xdb\xe0\x8a\xdd\x12\xd2\x30\xf0\xed\x65\x75\x47\xf1\x16\x3e\xbe\x24\x1f\x69\xb9\xb3\xb5\x22\x4b\xc4\x7a\x0c\xaf\xb2\xe4\x88\x2b\xdb\x5a\x12\x87\x99\x9d\x32\x39\xc5\x00\x2c\x34\x73\x04\xa7\x49\x26\xa6\xcc\xd6\x86\xc9\x5d\x5b\x00\x2a\x3d\xb8\xb6\xcd\x01\x48\xf5\x97\xd4\x94\xd3\x26\xf8\x5b\x39\xe2\x22\x99\x47\x31\x0f\x80\x8a\x79\x5f\x1d\xfa\x18\x71\x3a\xf4\x3b\x4e\xf6\x64\x1f\x77\xb4\x43\x35\x71\x49\x52\x23\x6e\xe7\xb1\x93\x6f\xd4\xf6\x23\x00\x8d\x2b\x27\x17\xfb\x5b\xf2\x09\x00\x00\xff\xff\x0d\x93\xec\x7c\xf0\x00\x00\x00") + +func testE2eTestingManifestsIngressPreSharedCertSvcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressPreSharedCertSvcYaml, + "test/e2e/testing-manifests/ingress/pre-shared-cert/svc.yaml", + ) +} + +func testE2eTestingManifestsIngressPreSharedCertSvcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressPreSharedCertSvcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/pre-shared-cert/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressStaticIpIngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8e\xb1\x6e\xf3\x30\x0c\x84\x77\x3d\xc5\x21\xff\x6c\xff\xcd\x16\xf8\x0d\xba\x14\x1d\x82\xee\xb4\x44\xd8\x84\x6d\xca\x10\xe9\xb4\x79\xfb\x42\x76\xda\x74\x93\x0e\xbc\xef\x3e\x5a\xe5\x83\x8b\x49\xd6\x0e\xca\xfe\x99\xcb\x24\x3a\xb4\xd3\xc5\x5a\xc9\xff\x6f\xe7\x9e\x9d\xce\x61\x12\x4d\x1d\x5e\x75\x28\x6c\x16\x16\x76\x4a\xe4\xd4\x05\x40\x69\xe1\x0e\xe6\xe4\x12\x1b\x59\x03\xf0\x0f\xd7\x51\x0c\xa4\x9a\x6b\x9a\x15\xf5\x97\x12\x27\xf4\x77\xf8\xc8\x70\x36\xc7\xb6\x66\x05\xcd\x73\x8e\xe4\xa2\x03\xe8\x01\x91\xb5\xdd\x21\xcf\xbe\x75\x7b\x80\x69\xeb\xb9\x28\x3b\xef\x6a\x72\xc8\xb4\xc3\x9c\x7b\x9a\x9b\x5f\x83\xe6\x30\x3a\xfd\xd0\x4e\xc1\x56\x8e\x15\xe1\xf3\x83\x74\xf8\x99\x6d\x0b\x5b\x4d\x1b\xe3\x58\xd8\xc1\x5f\x62\x6e\xc7\xfc\x35\x63\x60\xe5\x42\xce\x10\x47\xd9\x74\x57\x5f\x68\x62\x48\x7d\x8b\x21\x49\xe1\xe8\xb9\xdc\x6b\xa5\xc1\x41\x79\xdb\xe7\x9f\xd4\x00\xf4\x14\x27\xd6\x54\xc7\x01\xe3\x72\x93\xc8\xc7\x19\xc7\x31\x8f\x4c\x89\x8b\x35\xa3\xfb\x6a\x7f\x4f\xde\x73\xf1\x0e\x97\x97\xf0\x1d\x00\x00\xff\xff\xa2\x3f\xa5\xf9\xa4\x01\x00\x00") + +func testE2eTestingManifestsIngressStaticIpIngYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressStaticIpIngYaml, + "test/e2e/testing-manifests/ingress/static-ip/ing.yaml", + ) +} + +func testE2eTestingManifestsIngressStaticIpIngYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressStaticIpIngYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/static-ip/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressStaticIpRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8e\x31\x6e\x03\x31\x0c\x04\x7b\xbd\x82\x1f\x90\xed\x5c\x65\xa8\xcd\x07\x82\x14\xe9\x69\xdd\xc2\x27\x58\x12\x05\x92\xf1\xfb\x03\x25\x38\xc7\x45\xb2\x1d\xb1\xdc\xc1\xf0\x28\x1f\x50\x2b\xd2\x13\xdd\x5f\xc2\xad\xf4\x35\xd1\x3b\x46\x2d\x99\xbd\x48\x7f\x95\xee\x2a\xb5\x42\x43\x83\xf3\xca\xce\x29\x10\x75\x6e\x48\x84\xbc\xc9\x06\x5e\xa1\x16\x37\xf7\x61\xc1\x06\xf2\xec\xf5\x87\x60\x89\x96\x40\xe4\x68\xa3\xb2\x63\x36\x44\xcf\x9c\x99\xca\x17\x54\xdb\x2f\x22\x1e\xe3\x2f\xf4\xac\x76\xfc\x4c\x96\xee\x5c\x3a\xf4\x31\x8d\xff\x6a\xed\xe8\xd2\xf8\x8a\x44\xd7\xac\x87\x22\xc7\xdb\xe7\x05\xda\xe1\xb0\x88\x05\xd1\x61\x1e\xbf\x3f\xec\x38\x11\x06\xbd\x43\xd3\x72\x58\x1e\xfb\x21\xea\x4f\xa6\xf1\x57\xe2\x4d\xd4\x13\x9d\x4f\xe7\x53\xf8\x0a\x00\x00\xff\xff\xa9\x29\xab\x0c\x53\x01\x00\x00") + +func testE2eTestingManifestsIngressStaticIpRcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressStaticIpRcYaml, + "test/e2e/testing-manifests/ingress/static-ip/rc.yaml", + ) +} + +func testE2eTestingManifestsIngressStaticIpRcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressStaticIpRcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/static-ip/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressStaticIpSecretYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x97\xdd\x8e\xa3\xbc\x9a\x85\xcf\xfb\x2a\xfa\x06\x66\x64\x43\x28\x75\x5a\xda\x07\x05\xb1\x21\x24\x76\x82\xf1\x6b\x83\xcf\x08\x46\x45\xc5\x86\xd0\x29\x2a\x3f\x5c\xfd\x28\xdf\xb7\xf7\x48\xf3\xa7\x39\x5e\x7a\x25\x84\xd6\xb3\xd6\x72\x33\x7d\xaa\xee\xfa\xf5\x79\x19\x7f\xff\xbc\xe1\x1f\xb6\x99\x9b\xdf\x3f\x7e\xfe\x9c\xfd\xd7\xbf\xb7\xd7\xf9\xf7\xcf\x7d\x89\xe6\x7d\x89\x13\x01\x36\x97\x9f\xf1\x46\xa8\x1c\x4a\x30\x79\x81\x28\x88\xbf\x34\x34\x27\x0e\xe7\x25\x88\x7d\xe7\xf8\xa6\xd0\xfd\xd1\x20\x1a\x96\x90\xc7\x06\xf9\x5d\x01\xeb\x88\x3b\x1c\x9b\x30\xae\xb5\xe3\xb5\x04\x72\x17\x88\xcb\x16\xac\x2c\xf5\x76\x11\x94\xd2\xc2\xf1\x50\x01\xe5\x45\x68\x57\xc2\x89\x18\x50\x3e\x4a\x5f\xef\x0a\x47\xb9\x04\xf6\x54\x67\x61\xd4\x42\xc3\xda\x59\x65\x95\x7b\x1e\x2a\xc1\xc1\xd3\x50\x68\x6b\x04\x35\x02\x60\x26\x45\x25\xbe\x0c\xd8\xd4\xa6\x3c\xeb\xd2\x07\x3b\x41\x14\xd4\x5e\xc4\x06\x4c\xc8\xb2\xfe\xd0\x38\xf2\x90\x4a\x9c\xbb\xf7\xe9\x28\x08\x0d\x25\x08\x5d\xff\x53\xeb\xfe\xa5\x91\x35\x29\x2a\xcb\x05\x35\xbd\x04\x1e\x76\xc4\x90\x42\xf1\xc4\xa0\x48\xff\x7f\xdf\x92\x38\x35\x6a\x10\x1a\x14\xdd\x0b\x42\xd1\x29\x55\x99\x18\xc5\x59\x84\xfd\x97\x4c\xf1\xc1\x0e\x39\x14\x88\xc7\x80\x7c\x28\x28\x35\xa5\x9b\x6f\xda\xf9\x8b\x1d\xf8\xa1\x50\xaf\x7f\x90\x8b\x02\xc4\x68\x90\x2a\x0a\x10\x9b\x02\x51\x71\x42\x6c\x67\x02\x4b\x0b\x47\xf7\xcc\x3d\x52\xb3\xd0\x51\x60\xcb\x58\xc0\x9e\x06\x6c\x0f\x1b\xb1\xed\xdc\x7a\x6c\x25\xd7\xa5\xc6\xf7\x96\xb6\x48\x29\x43\x0e\x80\x07\xd0\x8f\x27\x04\x62\xd0\x1b\xbb\x11\xe7\x1c\x33\x14\xcd\x4d\x25\x32\x3e\x52\xd7\xdc\xa7\xcf\xc6\x15\x91\xa8\x68\x29\xdd\xf4\x79\x22\xbe\x34\x32\x66\x2d\xc1\xcd\x3e\x20\x2b\x73\xf6\xb7\x6e\xf8\x0a\x59\xa0\xbe\x25\xea\xbf\x19\xca\x17\x8b\xdf\x23\x21\x73\x5f\x9e\xfb\xe1\xb0\xe9\x93\xee\xec\x30\x4b\xcd\x91\x85\xb6\x6a\x75\xf4\xa7\x19\xd9\x92\x38\x84\xb9\x7e\x54\xcc\x51\x6d\xd0\x74\x53\x5a\x49\x19\xe6\x65\xe3\xcd\xa6\x71\x13\x96\x4b\x9f\xeb\x8c\xc6\xa7\x8d\x2d\x98\x37\x73\x33\xf8\x1b\xa4\x96\x36\x99\x42\x1c\xd6\xb3\x92\x7d\x53\x06\x38\x16\x92\xf7\x6d\xea\x73\x11\xda\xdc\x0c\xbf\x76\xdd\x68\x6a\x7e\x7e\xbf\x2b\x64\x66\x9b\xf6\xae\x08\xb7\x57\x46\x63\x06\xa1\x29\x44\xb0\x3e\x37\xcf\xf5\xb3\xdc\xb4\xb7\x93\xce\x6f\xa7\x94\xef\x55\x26\x9c\x1d\x56\xf8\x94\x92\xa0\x81\x1a\x77\xa3\x9a\x4c\x25\xf4\x49\xbd\x07\x0c\xdd\x97\xce\x29\x03\xef\x13\x02\xc5\x2f\x6c\xe4\xa2\x4c\x1f\xea\xe4\x3d\x31\xa3\x5f\x35\x78\x9a\x20\x80\x6b\x31\x90\xc8\xe8\x5f\x77\x71\x8e\x3d\x5f\x5a\xc4\xbc\xe9\x0b\x70\x0b\x10\xb1\x91\x9b\x9e\x1b\x6c\x22\xa5\xdc\xf3\x44\x6c\x65\xaa\x7e\x7f\xa2\x3c\x92\xf4\x63\x49\xdc\x94\xea\x0d\x8b\xf8\xd9\x57\x65\x6a\xc2\xee\xcc\xcf\x75\xd5\x3f\x4f\xe9\xea\x0e\x84\x4e\x7c\xa0\x7f\x14\xf0\xd8\x22\x15\x17\x9a\x1e\x00\x30\xe5\x99\xdd\x82\xf2\x44\xf9\xed\x5d\xa2\x3c\xd1\xa0\x52\x81\x66\x72\x82\x48\x31\x9d\xe7\x4d\x4a\x76\x4c\xd3\x46\x6e\xd4\x5c\x3b\x91\xa8\x60\xba\x69\x29\x0e\x0c\x70\x72\x20\x36\x66\x4a\xb9\xb2\xb2\x42\x03\x4e\x6a\xa0\xff\xfd\xf6\x51\xab\x89\x71\x8d\x3f\x05\xc9\xab\x66\x58\x1b\x4e\x56\x0f\x09\x34\x14\xf7\xe9\xaf\x5b\x51\x59\x21\x1c\x8e\xe5\x8b\xd9\x73\xff\xbf\xfa\x53\x92\xff\xf4\x67\x52\xc0\x25\xd4\x1b\x86\xa1\x9a\x70\x33\x5a\x52\x54\x79\x26\xe1\x72\x3d\x54\xf4\x5b\x2c\x86\x24\xae\x77\x35\xf0\xb8\x90\x4a\x9d\x02\x6b\xac\x9e\x64\x3d\x58\xde\x84\x9c\x02\x56\x8b\x59\xf2\x91\x6d\xec\x4d\xa4\x2b\x2c\x03\xfe\x56\x52\xba\x2a\x87\x22\xea\xf4\x5c\xab\x45\x39\x31\x14\xb7\xce\x4f\x8d\x5c\x4c\x26\xc0\x1f\xcd\x48\xa1\x40\xed\xee\x00\x13\x14\xc1\xba\x6f\x49\xfe\x30\x63\x1f\x76\x99\xe8\x1b\xe9\x91\x05\x7b\x68\x86\xfa\x5e\x56\x93\xda\x07\xfc\x22\xc3\xbc\x6e\x86\xcb\xbd\xc4\x35\xae\x83\xa9\x51\x83\x30\x36\xa4\x61\xa1\x14\x34\x48\x91\x46\x91\x95\xf5\x34\xac\xcf\x8a\x9a\x62\xba\xca\x4c\x55\xbc\xfa\xb8\x17\x9e\x56\x12\xd7\x77\x0b\xf8\xde\x8d\x1f\xf7\x1a\xf0\xb1\x74\x1f\x0f\x3b\xd8\xf4\xa0\xf3\xa3\x49\xa7\xe3\xe9\x39\x63\x70\x53\xcc\xc8\x3a\x2a\xf5\xd7\x52\x0f\x82\xb6\xc3\x1c\x31\xfd\x11\x14\x03\x77\x2d\x4c\x47\x90\xef\x38\x71\x82\xef\x97\x8f\x67\x49\xec\x1f\x96\xcc\x13\x4f\xc5\x78\x48\xa7\xb9\x18\xfd\x28\x86\x69\xa8\xa5\x0b\x6b\xd7\x2e\xdd\xa8\x0e\x72\xc0\xa0\x5c\x7f\xdc\x85\xfd\xe3\x94\xe5\x2f\xb6\x8f\x45\xa8\x06\xf1\xb9\x4e\x34\x50\xda\x62\xf3\x3c\x6c\xac\xd7\x23\xdb\xd9\x80\x61\xa0\x53\xde\x0c\xe2\xd6\x39\x5e\x0a\xcf\x93\x6e\x58\xd7\xfb\xc5\x97\x2c\x9d\x8b\x42\x6f\x43\x35\x7c\xad\x4e\xe9\x94\x03\x59\x3f\x3b\xa8\x97\xae\x12\x21\x23\xe2\xb3\x18\xa7\x9d\xd1\x82\x95\x9a\x3e\x35\x89\x8a\x5a\xab\xb0\x80\x89\x1f\x8b\xcb\x5f\x39\xbe\x07\x75\x10\xc9\xff\x91\xf1\x1f\xff\xf8\xc7\x3f\x7b\xc1\x75\xcf\xff\xd1\x0b\x05\x38\xaf\x0b\x25\xe8\x96\xcc\x54\xff\x97\x5e\x50\x41\x01\x3e\x29\x40\xc4\xd2\xe5\x63\x13\xd2\x4b\x13\xf8\xec\x50\xb5\xf7\xc2\x51\x21\xc0\xc4\x85\xe2\x9b\xc2\xcd\xc6\x06\x76\x84\xc0\xc7\xe6\x2f\x36\xd6\xf9\x4b\x2f\x42\x31\x75\xd4\x1f\x34\xe4\x5f\x8d\x74\x8b\x1c\x56\xbb\x26\xc5\x7f\x76\x68\xbb\xea\x86\xf5\xde\x6e\xa8\x2c\x47\xda\xab\x51\xa5\xc2\x93\x9b\x22\x1f\xf7\x72\x20\xf7\x93\xff\x78\xec\x42\x7b\x31\x59\x8e\x3a\x3f\xdd\x5a\x9f\xe3\x56\x47\x8d\x58\x44\xb8\xc7\xf9\xbe\xc1\x42\xaa\x45\x49\xa1\x7a\x54\x2c\x06\xc4\x7d\x1a\xd8\x68\xb6\xfb\x80\x72\x0e\xbf\x22\x16\xc6\x6f\xcd\x06\x22\x1b\xe4\x5c\x24\xeb\x52\x0e\xd1\x64\xdc\xc7\x0d\x08\x3d\xef\x03\xe5\xca\x6c\x42\x07\x62\x1e\xed\xa6\x40\x1c\x45\x6f\x32\x50\x8d\x1a\xc5\x28\xbc\xdf\xd4\x60\xb6\x4d\x30\x3d\x18\x75\x8f\xc4\xd3\x5b\xa7\xf3\x3f\xd6\xf1\x94\x0f\x76\x67\xaa\x4b\x74\xa2\xd3\x8d\x67\x94\x70\x92\xe7\xf5\x98\x7b\x95\xc5\x5f\x40\xac\x6c\x53\x9b\xc8\x73\xfe\xd0\xda\x27\x2d\xe2\x5b\xee\x50\xc8\xca\x19\x49\x67\x2e\x7a\xcc\x8d\xa6\xf4\xb1\x0f\x05\xe9\xe4\xfb\xae\x1d\xa7\x55\x0b\xfd\x0e\x36\x66\xb5\x7b\xfe\xc2\x27\x69\x76\x9a\xf0\x2b\xc7\xfd\x27\x2f\xe7\x46\x85\xea\xd6\xa4\xea\xcc\x83\xf5\x77\xeb\x4d\xd3\x7c\xce\xa8\x93\x6e\xd5\x11\x4b\x38\x56\xf4\x14\x88\xa7\x80\x2d\x56\xee\xf2\x2c\x24\x5b\xb5\x78\xca\x74\x31\x5d\x4f\xa3\x19\x55\x68\xea\x16\xa2\xc4\x90\x1e\xef\x9e\xf3\xe1\x44\xed\x58\xa0\xe8\xcd\x86\x76\xda\x23\x91\x8b\x81\x7f\x09\x14\xdd\x61\x78\x7c\xb7\x98\xdf\x55\xc5\x27\x26\x7d\x04\xbe\x8e\xf6\x81\x0a\xd4\xf0\xb1\x1c\x08\x8a\x18\xb2\x4b\x2d\x55\x93\x9c\x3d\xb1\xc8\xe3\x93\xfe\xf5\x28\xb4\xe5\x85\xa3\xb1\x00\xfe\xca\x92\xb8\xa4\x6d\xc4\x64\x7f\xa9\xbd\x45\x6c\x31\x0d\xbc\xfa\x66\xe1\x05\x1f\x04\xb2\x24\xc2\xf5\x98\x47\x2c\x98\x98\xc2\x1c\x29\xff\xb1\x62\x61\x7f\x61\x1b\xf1\x07\x9e\xbf\x76\x22\x98\x6b\xfd\x39\x6f\x21\x9d\xd8\xa9\xaa\x57\xdc\x6f\xaf\x2a\xb3\x52\x8e\x79\x68\x42\x4a\x98\x14\x9a\x8d\x02\x9d\x9e\x73\x50\x8e\xfd\x0d\x36\xc6\xf3\xaa\x0d\x0f\x95\x89\x4a\xba\xc5\xa7\xb3\x60\x0c\xe7\x7f\x4e\x23\x7d\x2b\x83\xf9\x20\x33\x35\xab\xf7\xe9\x06\x98\x9f\xcd\x73\x36\xad\xeb\x53\x83\x5e\x5c\xda\xb4\xc0\xe6\x0d\x32\x83\x8b\x01\x47\x3c\x54\x5f\x00\xfd\x11\x34\x16\x05\xe0\x45\xe1\x7e\xa5\x52\xab\xf7\xc8\x56\x0c\xc7\xe1\x1e\xf1\x54\xe9\x9e\x74\x83\xd5\x7a\xe8\xbd\x0a\xa7\x63\x32\xa8\x50\x4b\xff\x14\xd4\xe2\xa2\x9a\xde\x4a\xcc\x9d\xd4\x04\x09\x17\x0d\x8d\x9e\xb4\xf0\x5e\xb7\x1b\x12\x8a\x05\xee\xc6\xcd\x47\xb5\xf0\x46\x3a\xfc\x3c\x68\x73\x2e\x11\x4e\x4a\x67\x27\x0b\xbf\x56\x80\x7b\x90\xc8\xa7\x80\xa6\x09\xe8\xfb\xae\xc6\xb0\x28\x35\xbd\xb2\x7d\xdf\x9d\xcd\x81\x55\xdb\xc8\x2e\x14\x2b\x45\xae\x8d\x57\xea\xb4\x89\x63\x13\xf0\xf2\x90\x89\x15\x0c\x8f\x55\x2d\x63\x80\x85\x6f\x21\xe5\x48\x8e\xdb\xdb\x0e\xc7\x4b\x0d\x1f\xc8\x50\x1b\xc9\x85\xe3\x3a\x14\x09\xbc\x5f\xa2\x5d\xe0\x1f\x4a\xf7\x91\xf5\x71\xd6\xf9\x18\xea\x85\x7e\xcb\x8a\xaf\xb4\x5b\x2b\x41\xee\xd7\xae\xca\x3f\xb9\xe7\xdf\x2a\x7b\x0f\xf7\x61\xfc\x59\x2f\xe2\x60\x30\xdd\x17\x83\x15\x82\x9a\xf8\x90\x59\xb4\x0b\xcc\x56\x9e\xcd\xb5\xc4\xea\x53\xa1\x7a\x49\x06\xee\x0f\xc9\x3a\x61\x67\x7e\x6b\xdc\x76\xd9\x3f\x67\x5f\x6e\xf2\xab\x24\x8f\x03\x77\xaf\x0e\xcb\x03\x49\xf9\x51\xfa\x8f\x45\x50\x76\xfb\x2b\x0f\x1d\xf5\x07\x4a\x96\x66\x63\x1a\x3b\x4c\x65\x99\xda\x74\xf7\x9c\x33\xe3\x58\x08\xc1\x3d\x3a\x95\xbf\x76\x2c\x35\x52\xea\xcb\x0d\x90\xda\xd5\x61\xac\xed\x12\x13\x7b\x8e\xa3\xd6\x01\x36\x0b\x8d\x55\x10\xc5\x2f\xe6\x24\x22\xc8\xe8\x17\xaf\x7e\x3c\x85\xe6\x6b\xff\xfc\x0a\xcd\xd9\xa6\x36\xf4\x82\x0d\x6b\xcf\x9c\xc9\xcb\x61\x5e\x14\xe1\x71\xf9\x3e\x31\x81\xbd\x02\x78\x6d\x4c\x58\x95\xae\x97\x45\xc5\xee\x9d\xbe\x5f\x9b\xe1\x12\x70\xaa\x8e\x00\x73\x62\x30\x25\xa0\x67\x62\xc8\x7a\x3a\x6d\x18\x2a\xb1\x2f\x2c\x88\xb8\xa9\x62\x2d\xb3\xfe\xed\x04\xfe\x2a\xa8\xa8\x4b\x14\x2d\x9d\xcf\xcf\x89\x7b\x34\x05\xe6\x47\x80\x69\xc7\xa4\xda\xb4\x67\x51\x36\xe0\x9f\xbb\xc0\x3c\x6d\xe5\xee\x0d\xc9\x8b\xf6\x1c\x1b\x3b\xd8\x40\x6c\x2c\x98\x2c\xfe\x6e\xc0\x7f\x36\xd4\x1f\xf8\x98\x8b\x76\xec\x2b\xa1\xed\x1e\x1c\xff\x34\xa3\x7f\xed\xe8\x41\x04\xf5\x8e\xa3\xed\xbd\xc4\x31\x97\x9a\xbf\x09\x07\x81\xad\x44\xcc\xa5\x08\x9a\xd1\x7e\x75\xf4\x7d\xa5\x94\x59\x01\xf6\x84\xfb\xf8\xdb\x02\x97\xc5\x30\xcd\x87\x64\xee\x4f\xca\xde\x85\xeb\x27\xe6\x26\xc4\x16\xb5\xe3\xe7\x36\xaa\x91\x7b\xb6\x68\xce\xe0\x7e\x79\xb2\xa5\x8f\x34\xb5\x91\xd9\x70\x51\xa2\x7c\x2c\xc0\x32\x20\x7e\x53\x87\xd3\x54\x0f\x24\x68\x17\xe3\x4f\x60\x74\xa1\x78\x54\x6b\xf5\x56\x04\xeb\x49\x69\xf1\xa5\xa1\xbd\xf3\x2c\xe6\xc2\xcd\x60\x65\x3e\x95\x5a\x24\xa0\x3e\xae\x4c\xc6\x59\xe2\xf8\xb6\x04\x23\xcb\x41\x05\xcd\x60\x2a\xe1\x54\xd4\x49\xff\x66\xd0\x74\xee\xb4\x8d\x9a\x00\x56\x7a\xf8\xba\xaa\xf1\xd5\xeb\x6b\xde\x29\x76\x6d\xd2\x87\xac\x87\xf9\x4f\x0d\xdc\x28\x49\x9f\x16\xd4\xcc\xd4\x47\x28\xb4\xe0\x22\x9d\xff\x94\x63\xb1\x3b\x90\xc7\x43\x56\x71\x0a\xc9\xba\x54\xd9\x64\xba\x6c\x1b\x76\x80\xa7\x32\x59\x17\x2f\xde\x9b\xd1\xee\x4f\xf0\xb8\x37\xcf\x19\x35\x30\xaf\x6a\x84\x03\x4d\xfd\xae\x54\xd3\x52\x3a\xdc\x6b\xb0\x4a\x81\xb9\x41\x16\xc7\x27\x64\x63\x08\x72\xd2\x7e\x4c\x59\x8d\xd4\x65\x17\xe6\x14\xb4\xcd\x8c\xf2\xe9\xa1\xea\x97\x4e\x4d\x0b\x0b\xf3\xb1\x46\x0f\xdd\x4a\xee\x79\x30\xb3\xda\x45\xe3\x81\xda\xeb\x8b\x9d\x13\x36\x49\xe3\xc5\xd2\x6c\x84\xd3\x1b\x71\x97\xc9\x5c\x89\xe0\x71\x69\xc7\x8f\x9b\x59\x6c\x9f\x8c\xb1\xd0\x9e\x46\x02\x7e\x45\x3a\xf3\xba\xd3\x0e\x43\xa8\xe2\x17\xeb\xdd\xe8\x22\xed\x55\x29\xd2\xfe\x66\x69\x5c\xe9\x4c\xe1\x86\x44\x47\x53\xf1\xe3\x21\xb5\x47\x51\xd1\xba\x1b\x8b\x27\xaf\x28\x51\xc3\x74\xd9\x05\xea\x6a\x47\xde\xd7\x8b\xdb\x41\x20\x16\xf0\x04\x99\x60\x7a\xf9\xa5\x38\x11\x8a\xea\xd0\xbe\xd9\xd1\xee\x1b\x62\xbe\x9b\x40\x1c\x80\x10\xd4\x54\xfe\x5e\x62\x95\xb2\xc5\xd2\x22\xb0\xa6\x00\xf1\xad\x86\xf9\x8d\x8d\xf4\xc9\x36\xe2\xc1\xf5\xbc\x34\xa9\xe0\xed\xb0\x5d\x89\x8f\x29\x06\x95\xf7\xa5\xef\x59\x5b\xc5\x57\x23\xfb\x5b\x01\xf6\xab\x40\x13\x67\x83\x7a\x31\x60\xec\xd9\x13\xa6\xe1\xd1\x54\xb6\x34\xd4\x5f\x4b\xa4\x40\x0f\xf3\xb6\xad\x54\x23\x36\x5c\x75\xaa\xdf\xef\x70\x7e\x14\x10\x7d\xeb\x73\x9e\x59\xd7\xde\x93\x81\xe6\xb5\xef\xb3\x83\xac\x57\x86\xf6\x93\xf9\x9c\xdf\xca\x85\x86\x7c\x78\x38\xa3\x45\x62\x53\xb3\x6d\x70\x2c\x6b\x69\x93\x02\x99\x44\x83\x78\x36\xd0\x62\x9e\xac\xbf\xe5\xd9\x7c\x6a\xa0\x53\x37\x60\x5e\x07\xc6\x6b\xf2\xf0\x25\x9a\x8e\x22\xfd\xb5\x93\x59\x2f\x4f\x78\x7b\xef\x5c\xc4\xbb\xc1\x70\x95\xd1\x7b\x3d\xf6\x67\x9b\x99\x1c\x24\x5a\x27\x9f\x7f\xef\x13\x01\x11\xd9\xd2\xb8\x2c\x95\x89\x15\x81\x8f\x12\x29\xf3\xf7\xae\x41\xbb\x1f\xee\x73\xb4\xbf\x7f\x96\x5d\x7b\xed\xe6\x1f\x43\x37\x37\xff\x7a\x1a\x8f\xcd\xd0\xfd\x7e\x0d\xa1\x7f\xfb\xfa\x5b\x9c\x9f\x53\xf7\xfb\xe7\x61\x6a\xfe\x7c\x77\x3f\x7e\xfc\x47\x00\x00\x00\xff\xff\x16\x44\xcf\x58\x51\x0f\x00\x00") + +func testE2eTestingManifestsIngressStaticIpSecretYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressStaticIpSecretYaml, + "test/e2e/testing-manifests/ingress/static-ip/secret.yaml", + ) +} + +func testE2eTestingManifestsIngressStaticIpSecretYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressStaticIpSecretYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/static-ip/secret.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsIngressStaticIpSvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8e\xc1\x0a\xc2\x30\x0c\x86\xef\x7d\x8a\xff\x05\x06\x7a\x93\x5e\xbd\xcb\x40\xf1\x1e\xdb\xe0\x8a\xdd\x12\xd2\x30\xf0\xed\x65\x75\x47\xf1\x16\x3e\xbe\x24\x1f\x69\xb9\xb3\xb5\x22\x4b\xc4\x7a\x0c\xaf\xb2\xe4\x88\x2b\xdb\x5a\x12\x87\x99\x9d\x32\x39\xc5\x00\x2c\x34\x73\x04\xa7\x49\x26\xa6\xcc\xd6\x86\xc9\x5d\x5b\x00\x2a\x3d\xb8\xb6\xcd\x01\x48\xf5\x97\xd4\x94\xd3\x26\xf8\x5b\x39\xe2\x22\x99\x47\x31\x0f\x80\x8a\x79\x5f\x1d\xfa\x18\x71\x3a\xf4\x3b\x4e\xf6\x64\x1f\x77\xb4\x43\x35\x71\x49\x52\x23\x6e\xe7\xb1\x93\x6f\xd4\xf6\x23\x00\x8d\x2b\x27\x17\xfb\x5b\xf2\x09\x00\x00\xff\xff\x0d\x93\xec\x7c\xf0\x00\x00\x00") + +func testE2eTestingManifestsIngressStaticIpSvcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsIngressStaticIpSvcYaml, + "test/e2e/testing-manifests/ingress/static-ip/svc.yaml", + ) +} + +func testE2eTestingManifestsIngressStaticIpSvcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsIngressStaticIpSvcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/static-ip/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsKubectlAgnhostPrimaryControllerJsonIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x92\x4f\x4b\xc4\x40\x0c\xc5\xef\xfd\x14\x25\x67\x15\x16\x41\x71\x6e\xe2\xc9\x9b\x78\xf0\x22\x1e\x62\x37\xac\x83\xd3\xc9\x90\x09\x0b\x52\xe6\xbb\xcb\x6c\xbb\xdd\xfe\x99\x55\xc1\x53\xe1\xe5\xe5\xe5\x97\x74\xba\xaa\xae\x6b\xf8\xb4\x7e\x0b\x06\x9e\x29\x38\xdb\xa0\x5a\xf6\x0f\xec\x55\xd8\x39\x12\xb8\x38\x58\x30\xd8\x17\x92\x68\xd9\x83\x81\xfd\x66\x50\x5b\x52\xdc\xa2\x22\x98\x43\x50\x96\x3c\xb6\x04\x06\x70\xe7\x3f\x38\xea\x65\x10\xdb\xa2\x7c\xf5\xfe\x5c\x77\xf8\x4e\x2e\x9e\x1a\xfa\xf0\x70\x6a\x19\xad\xb9\x22\xec\x72\xda\x31\x65\xa8\xa4\xfc\x4d\x3d\x42\x0c\xd4\x4c\xc6\x4b\xbf\x43\x04\xb3\x19\x47\x46\x72\xd4\x28\xcb\x3f\x87\x8e\x79\x4a\x6d\x70\xa8\x34\xcf\x5b\xdf\xe2\xfc\xc6\xbf\x21\xfc\x08\x32\xb9\xc1\x82\x6c\x7d\x8f\x41\x6c\xd8\x2b\x5a\x4f\x12\xc1\xbc\x2e\xc7\xac\xb8\xfe\xf0\x1b\x67\x5e\xdb\xe2\x8e\xc0\xd4\xd0\x75\x57\xf7\x7d\xc3\x63\x96\x52\x2a\xfb\x03\x8b\x96\x40\xce\xe3\x94\xa1\x22\xc9\xfe\xf8\x40\xcb\x0d\xe3\xde\x4f\x2c\x0a\xe6\xe6\xfa\xf6\xae\x6c\x4e\x05\xf9\x6d\xa9\xcd\x4d\x93\x72\x9a\xbd\xcb\x2a\x55\xdf\x01\x00\x00\xff\xff\x96\x5f\x1a\xbe\x57\x03\x00\x00") + +func testE2eTestingManifestsKubectlAgnhostPrimaryControllerJsonInBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsKubectlAgnhostPrimaryControllerJsonIn, + "test/e2e/testing-manifests/kubectl/agnhost-primary-controller.json.in", + ) +} + +func testE2eTestingManifestsKubectlAgnhostPrimaryControllerJsonIn() (*asset, error) { + bytes, err := testE2eTestingManifestsKubectlAgnhostPrimaryControllerJsonInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/agnhost-primary-controller.json.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsKubectlAgnhostPrimaryPodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x52\xcd\x6a\xf3\x30\x10\xbc\xfb\x29\x96\xdc\x9d\xbf\x0f\xbe\xd2\xbd\x15\x9a\x43\xa0\x09\x26\x2d\x85\x1e\x37\xce\x92\x88\xe8\xc7\xac\x56\x86\x50\xfa\xee\xc5\x89\x92\xb8\xbe\x96\xfa\xb4\x8c\x67\x66\x35\x23\x51\x63\xde\x59\xa2\x09\x1e\xa1\x9d\x15\x47\xe3\x77\x08\x55\xd8\x15\x8e\x95\x76\xa4\x84\x05\x80\xa5\x2d\xdb\xd8\x4d\x00\x9e\x1c\x23\xd0\xde\x1f\x42\xd4\x33\x22\xc1\x32\x42\x23\xc6\x91\x9c\x8a\x01\xa3\xbc\xe2\xb1\xe1\xba\x73\xa8\x83\x57\x32\x9e\x25\xfb\x95\x99\x7f\xd7\x77\x9f\x71\xb4\x67\x84\x7d\x2d\x63\x13\x26\xc7\xb4\x65\xf1\xac\x1c\x4b\x9e\x73\xa9\x1c\xb5\x3c\x33\xe2\x24\xaf\xc1\xd9\x78\x9a\xa5\xec\x5b\xcc\xe3\xdd\xbd\xda\x2c\x57\x4f\x9b\x8f\x1b\x0e\xd0\x92\x4d\x8c\x30\x52\x49\x3c\xca\x78\x13\x44\x63\x5f\x7c\x3b\x6c\x15\x44\x11\xfe\xff\x7b\x78\xcc\x7f\x85\x63\x48\x52\x73\x8f\x6e\x8d\x33\x7d\x39\x40\xdd\x24\x84\xd1\x74\x3c\xbb\x2e\x68\x83\x4d\x8e\x57\x21\xf9\x9f\x7b\x5c\x87\x54\xa4\x07\x84\xc9\xa0\xb8\xb2\xbb\x84\x9e\xe7\x25\xcf\x0d\xbc\x06\x8c\xec\xd5\x78\xb6\x7f\xd4\xdf\xeb\x62\xfd\xb6\x5c\x2f\x5e\x7e\x59\xe0\x3c\x37\x78\xe9\x61\xf0\x02\x7a\x41\xd9\x35\x7a\x7a\x36\x82\xf0\xf9\x55\x7c\x07\x00\x00\xff\xff\xc6\x0a\xed\xba\xa3\x02\x00\x00") + +func testE2eTestingManifestsKubectlAgnhostPrimaryPodYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsKubectlAgnhostPrimaryPodYaml, + "test/e2e/testing-manifests/kubectl/agnhost-primary-pod.yaml", + ) +} + +func testE2eTestingManifestsKubectlAgnhostPrimaryPodYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsKubectlAgnhostPrimaryPodYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/agnhost-primary-pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsKubectlAgnhostPrimaryServiceJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x4f\xcb\xaa\xc2\x30\x10\xdd\xf7\x2b\x42\xd6\xbd\x8b\x8b\xa0\xd8\xaf\x10\x04\x37\xe2\x62\x6c\x87\x1a\x4c\x93\x30\x19\x0a\x22\xf9\x77\x99\xa6\x8f\xb8\x77\x95\x70\x9e\x73\xde\x95\x52\x4a\x3f\x8d\xeb\x74\xa3\xf4\x19\x69\x34\x2d\xea\x7a\x42\x21\x98\x0b\x52\x34\xde\x09\x37\xfe\xcf\xf0\x80\x0c\x1d\x30\xe8\x46\x4d\x6e\xc1\x1c\x0c\x28\x22\xe8\xdd\xc3\x47\xfe\x0b\x64\x06\xa0\x57\x76\x88\xc0\xc2\x1d\x6d\x2c\x2c\xb9\x20\x14\xa6\x55\x2c\x14\x79\x3b\x05\x2e\x41\x33\x95\xe4\x4d\xf9\x8e\x18\xb0\x2d\x6f\x08\x9e\x58\x1a\xae\x5b\x4c\x51\xb6\x28\x74\xa3\xf6\xbb\xc3\xb1\xfe\x66\x18\xa8\x47\x3e\x65\x7e\x5d\x11\x91\x46\x24\xbd\x49\xd3\xfc\xbd\xad\xbb\x22\x5a\x6c\xd9\xd3\x8f\x96\x55\xe9\x13\x00\x00\xff\xff\xd0\xfb\x54\xf4\x91\x01\x00\x00") + +func testE2eTestingManifestsKubectlAgnhostPrimaryServiceJsonBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsKubectlAgnhostPrimaryServiceJson, + "test/e2e/testing-manifests/kubectl/agnhost-primary-service.json", + ) +} + +func testE2eTestingManifestsKubectlAgnhostPrimaryServiceJson() (*asset, error) { + bytes, err := testE2eTestingManifestsKubectlAgnhostPrimaryServiceJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/agnhost-primary-service.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsKubectlBusyboxCronjobYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x90\x41\x4b\x33\x31\x10\x86\xef\xf9\x15\xc3\x1e\x0b\x65\xbf\xa5\xb7\xdc\x3e\x14\x91\x22\x28\x28\xde\x27\xd9\x69\x3b\x35\x3b\xb3\x24\x13\x75\xff\xbd\xa4\x5a\x68\xf5\xcd\x6d\x9e\x64\xf2\xf2\xe0\xcc\xaf\x94\x0b\xab\x78\x08\x68\xf1\xd0\xbf\x0f\x81\x0c\x07\xf7\xc6\x32\x7a\xb8\xc9\x2a\x5b\x0d\x6e\x22\xc3\x11\x0d\xbd\x03\x10\x9c\xc8\x43\xcc\x2a\x47\x0d\x6b\xa3\x62\xae\xcc\x14\x1b\x2a\xf1\x40\x63\x4d\xe4\xa1\x5b\xf5\x03\xac\xbe\x4f\xe7\x00\xa2\x4a\xac\x39\x93\xc4\xe5\x49\x13\xc7\xc5\xc3\xff\x94\xf4\xa3\x3d\xaa\x65\xa6\xf6\xd9\x0e\x53\xa1\x36\x30\xcc\xc6\xb2\xbf\x25\x1c\x13\x0b\x3d\x53\x54\x19\x8b\x87\xcd\xbf\xd3\xf5\x18\xa9\x94\x5d\x4d\x5b\x0d\xe5\x9e\x8b\x69\x5e\x1e\x78\x62\xf3\xb0\x71\x00\x3b\xe4\x44\xe3\x5f\x36\x38\x80\xa3\x86\x17\x9a\xe6\x84\x46\xad\x2e\xc0\xb9\x78\x8b\x5d\x91\xdf\xb4\x25\xaa\x18\xb2\x50\x2e\x97\xd3\xf5\x8f\x91\x93\x09\xb8\x08\x4f\xb8\x27\x0f\xa1\x96\x25\xe8\xe7\x15\xc2\xbc\xbf\xda\xd1\xb6\x74\x7d\x60\xe9\x2d\x57\xea\x2e\x48\xa6\x93\x8e\xb3\xb4\x47\xb9\x43\x4e\x35\x93\xfb\x0a\x00\x00\xff\xff\x92\xe8\x92\xc0\xbb\x01\x00\x00") + +func testE2eTestingManifestsKubectlBusyboxCronjobYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsKubectlBusyboxCronjobYaml, + "test/e2e/testing-manifests/kubectl/busybox-cronjob.yaml", + ) +} + +func testE2eTestingManifestsKubectlBusyboxCronjobYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsKubectlBusyboxCronjobYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/busybox-cronjob.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsKubectlBusyboxPodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x8f\x31\x4f\x03\x31\x0c\x85\xf7\xfc\x8a\xa7\x1b\xda\x85\xe3\x5a\x21\x31\x64\x40\x62\x64\x41\x37\xb1\x20\x06\x27\xe7\xa3\x51\x93\x38\x4a\x52\xe0\xfe\x3d\x4a\x04\x82\x2e\xb6\xe4\xf7\xd9\xcf\x8f\x92\x7b\xe1\x5c\x9c\x44\x8d\x8f\xa3\x3a\xbb\xb8\x68\xcc\xb2\xa8\xc0\x95\x16\xaa\xa4\x15\x10\x29\xb0\x86\xb9\x94\xcd\xc8\xd7\x51\x01\x9e\x0c\xfb\xd2\x24\x80\x52\xfa\xa7\x95\xc4\xb6\xcd\xad\xc4\x4a\x2e\x72\xee\xd4\x08\x17\xe8\xfd\xef\x46\x5f\xb4\x12\x02\x35\xbb\xd7\x61\x32\x2e\x4e\xe5\x34\xdc\x60\x18\x6d\xab\xe1\xbc\xb8\x8c\x31\x61\xca\x22\x75\x5a\x45\x26\x43\x19\xbb\x1d\xd8\x9e\x04\xfb\x55\xc4\x50\xde\xe3\xe1\x1a\x68\xfd\xf6\x07\x2c\x9e\x39\xe1\xee\xfe\x70\x18\xde\xba\x5f\x7f\x61\xbe\x78\x3f\x8b\x77\x76\xd3\x78\x5a\x9f\xa5\xce\x99\x0b\xc7\xda\x89\xab\x9c\x0a\xc8\x5c\x2a\xe5\xfa\xcb\x3f\xfa\x4f\xda\x8a\xfa\x0e\x00\x00\xff\xff\x4e\x0c\x6d\xc8\x33\x01\x00\x00") + +func testE2eTestingManifestsKubectlBusyboxPodYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsKubectlBusyboxPodYaml, + "test/e2e/testing-manifests/kubectl/busybox-pod.yaml", + ) +} + +func testE2eTestingManifestsKubectlBusyboxPodYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsKubectlBusyboxPodYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/busybox-pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsKubectlHttpdDeployment1YamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8e\xcb\x6a\xc3\x30\x10\x45\xf7\xfa\x8a\xfb\x03\xee\x6b\x55\xb4\xee\xa2\x85\x52\xba\xea\x7e\x2a\x0d\xb5\xa8\x1e\x83\x34\x24\x04\xe3\x7f\x0f\x22\x8e\xed\x64\x96\x77\xce\x7d\x90\x84\x1f\xae\x2d\x94\x6c\x41\x22\xed\xf1\xf0\x6c\xfe\x43\xf6\x16\x6f\x2c\xb1\x9c\x12\x67\x35\x89\x95\x3c\x29\x59\x03\x64\x4a\x6c\x31\xaa\x8a\x1f\xfc\x86\x34\x61\xd7\xdf\x95\x25\x06\x47\xcd\xe2\xc5\x00\x8d\x23\x3b\x2d\xb5\x7f\x80\x44\xea\xc6\x4f\xfa\xe5\xd8\x2e\x02\x7a\xe5\x12\x66\x00\xe5\x24\x91\x94\x17\x7a\x57\xda\x2f\xde\x18\xef\xac\xc0\x75\x40\x3f\x57\xb2\x52\xc8\x5c\x57\x7c\xd8\xef\x5e\x23\x42\xa2\x3f\xb6\x98\xa6\x87\xf7\xae\x7f\xf1\xf1\xa3\x2b\xf3\xbc\x12\x52\xaa\xee\x3a\x87\x2d\xfa\xbb\x54\xb5\x78\x7d\x32\xe7\x00\x00\x00\xff\xff\xda\xd6\x43\x63\x42\x01\x00\x00") + +func testE2eTestingManifestsKubectlHttpdDeployment1YamlInBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsKubectlHttpdDeployment1YamlIn, + "test/e2e/testing-manifests/kubectl/httpd-deployment1.yaml.in", + ) +} + +func testE2eTestingManifestsKubectlHttpdDeployment1YamlIn() (*asset, error) { + bytes, err := testE2eTestingManifestsKubectlHttpdDeployment1YamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/httpd-deployment1.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsKubectlHttpdDeployment2YamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8e\xcb\xaa\x02\x31\x0c\x86\xf7\x7d\x8a\xbc\xc0\x9c\xcb\xee\xd0\xf5\x59\x28\x88\xb8\x72\x1f\xdb\xe0\x14\x7b\x09\x6d\x50\x64\x98\x77\x97\xe0\x38\x33\x9a\x55\xf9\xfb\xfd\xf9\x82\x1c\x8e\x54\x5b\x28\xd9\x02\x32\xb7\xef\xeb\xaf\xb9\x84\xec\x2d\xfc\x13\xc7\x72\x4f\x94\xc5\x24\x12\xf4\x28\x68\x0d\x40\xc6\x44\x16\x7a\x11\xf6\x9d\x5f\x90\xc6\xe4\xf4\xbb\x51\x24\x27\xa5\xea\x1b\x20\xa1\xb8\x7e\x87\x27\x8a\xed\x19\x80\x4a\xa6\xba\x01\x10\x4a\x1c\x51\x68\xa2\x57\x1a\x9d\xf8\x56\xfc\xa8\x02\xbc\x94\x3a\xae\x64\xc1\x90\xa9\xce\x78\xb7\xbe\x74\x5e\x11\x12\x9e\xc9\xc2\x30\x7c\x6d\x34\xdf\xd3\x6d\xab\xc9\x38\xce\x04\x97\x2a\x2b\x67\xb7\xac\x3e\x94\x2a\x16\xfe\x7e\xcc\x23\x00\x00\xff\xff\xbb\xc5\xc3\x6b\x34\x01\x00\x00") + +func testE2eTestingManifestsKubectlHttpdDeployment2YamlInBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsKubectlHttpdDeployment2YamlIn, + "test/e2e/testing-manifests/kubectl/httpd-deployment2.yaml.in", + ) +} + +func testE2eTestingManifestsKubectlHttpdDeployment2YamlIn() (*asset, error) { + bytes, err := testE2eTestingManifestsKubectlHttpdDeployment2YamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/httpd-deployment2.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsKubectlHttpdDeployment3YamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8e\xbb\xae\xc2\x30\x0c\x86\xf7\x3c\x85\x5f\xa0\xe7\xc0\x86\x32\x33\x80\xc4\xc0\xc4\x6e\x12\x8b\x46\xe4\x62\x25\x16\x12\xaa\xfa\xee\xc8\xa2\xb4\x05\x4f\x89\xff\xcb\x67\xe4\x70\xa1\xda\x42\xc9\x16\x90\xb9\xfd\x3f\xb6\xe6\x1e\xb2\xb7\xb0\x27\x8e\xe5\x99\x28\x8b\x49\x24\xe8\x51\xd0\x1a\x80\x8c\x89\x2c\xf4\x22\xec\x3b\xbf\x58\x1a\x93\x53\xb9\x51\x24\x27\xa5\xea\x1b\x20\xa1\xb8\xfe\x84\x57\x8a\xed\xbd\x00\x85\x4c\x71\x03\x20\x94\x38\xa2\xd0\xe4\x5e\x61\x74\xe2\x57\xf0\x27\x0a\xf0\x41\xea\xb8\x92\x05\x43\xa6\x3a\xdb\xbb\xf5\xa5\x73\x45\x48\x78\x23\x0b\xc3\xf0\x77\xd0\xfd\x51\xbf\xe3\x38\xcb\x5c\xaa\xac\x80\xdd\xd2\x7b\x2e\x55\x2c\xec\x36\xe6\x15\x00\x00\xff\xff\x2d\xb9\xc2\x0f\x31\x01\x00\x00") + +func testE2eTestingManifestsKubectlHttpdDeployment3YamlInBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsKubectlHttpdDeployment3YamlIn, + "test/e2e/testing-manifests/kubectl/httpd-deployment3.yaml.in", + ) +} + +func testE2eTestingManifestsKubectlHttpdDeployment3YamlIn() (*asset, error) { + bytes, err := testE2eTestingManifestsKubectlHttpdDeployment3YamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/httpd-deployment3.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsKubectlHttpdRcYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8f\xb1\x8a\xc3\x30\x10\x44\x7b\x7d\xc5\xfc\x80\x0f\xdc\xaa\xbd\xe6\xae\xb9\xe2\x8a\xf4\x1b\x79\x49\x44\xa4\x95\x58\x6d\x92\xc2\xf8\xdf\x83\x30\x36\x26\x99\x6e\x67\x78\xb3\x0c\xd5\x78\x62\x6d\xb1\x88\xc7\x63\x74\xb7\x28\x93\xc7\x3f\xd7\x14\x03\x59\x2c\xf2\x5d\xc4\xb4\xa4\xc4\xea\x32\x1b\x4d\x64\xe4\x1d\x20\x94\xd9\xe3\x6a\x56\xa7\x41\x83\x6b\x95\x43\xb7\x75\x05\x9b\xc7\xe8\x80\xc6\x89\x83\x15\xed\x09\xa0\x77\x39\x10\x80\x71\xae\x89\x8c\xd7\xf4\x58\xde\x95\xe8\xcc\xa9\x6d\xd7\x27\x0d\x6c\x3f\xbb\x42\x11\xa3\x28\xac\x3b\x31\x20\x66\xba\xb0\xc7\x3c\x7f\xfd\x74\xec\x8f\x9f\xbf\xdd\x59\x96\xbd\xf3\x6d\xc4\x2b\x00\x00\xff\xff\x5c\xf5\x77\xda\x0b\x01\x00\x00") + +func testE2eTestingManifestsKubectlHttpdRcYamlInBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsKubectlHttpdRcYamlIn, + "test/e2e/testing-manifests/kubectl/httpd-rc.yaml.in", + ) +} + +func testE2eTestingManifestsKubectlHttpdRcYamlIn() (*asset, error) { + bytes, err := testE2eTestingManifestsKubectlHttpdRcYamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/httpd-rc.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsKubectlPausePodYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8c\x31\x0e\xc2\x30\x0c\x45\xf7\x9c\xe2\x5f\xa0\x08\x36\xe4\x1b\xb0\x65\x62\x37\x8d\x85\x22\x1a\x3b\x4a\x0c\x4b\xd5\xbb\xa3\x54\x48\x08\x46\xbf\xe7\xff\xb8\xe6\xab\xb4\x9e\x4d\x09\xaf\x53\x78\x64\x4d\x84\x68\x29\x14\x71\x4e\xec\x4c\x01\x50\x2e\x42\xa8\xfc\xec\x12\x80\x85\x6f\xb2\xf4\xc1\x7f\x4d\xaf\x32\x0f\x3a\x9b\x3a\x67\x95\xb6\xff\x4c\x7f\x6b\x20\x17\xbe\x0b\x61\x5d\x0f\x71\xb0\xcb\x38\xb7\x6d\x57\xd5\x9a\x7f\xca\xd3\xb7\x13\xad\x39\xe1\x7c\x0c\xef\x00\x00\x00\xff\xff\x04\xec\xd3\x24\xad\x00\x00\x00") + +func testE2eTestingManifestsKubectlPausePodYamlInBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsKubectlPausePodYamlIn, + "test/e2e/testing-manifests/kubectl/pause-pod.yaml.in", + ) +} + +func testE2eTestingManifestsKubectlPausePodYamlIn() (*asset, error) { + bytes, err := testE2eTestingManifestsKubectlPausePodYamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/pause-pod.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsKubectlPodWithReadinessProbeYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8c\x4d\x4a\x04\x41\x0c\x46\xf7\x7d\x8a\xef\x02\xe3\xcf\x42\x90\xac\x05\x75\xd7\x20\xb8\xcf\x74\x05\x27\xd8\x95\x14\x55\x51\x90\x61\xee\x2e\x55\x8e\x4c\xeb\xf2\x7b\x2f\x79\x5c\xf4\x55\x6a\x53\x37\xc2\xe7\xed\xf4\xae\x96\x08\xb3\xa7\x29\x4b\x70\xe2\x60\x9a\x00\xe3\x2c\x84\x43\x44\x49\x13\xb0\xf2\x5e\xd6\xd6\xf9\x5f\xd3\x8a\x2c\x9d\x2e\x6e\xc1\x6a\x52\xc7\xcd\xee\xdf\x37\xa0\x99\xdf\x84\x70\x3c\x5e\x3d\x75\xf6\xdc\xe7\xe9\x34\x54\xf1\x1a\xe7\xf2\xee\xd2\x99\xbd\x06\xe1\xfe\x66\xf0\x2a\x9c\xd4\xa4\xb5\xb9\xfa\x5e\x7e\x6e\x31\xea\x8f\x12\xbf\x13\x28\x1c\x07\xc2\xf5\x65\x6f\x1b\x80\x9a\x86\xf2\xfa\x20\x2b\x7f\xbd\xc8\xe2\x96\x1a\xe1\xee\x2c\x43\xb3\xf8\x47\x6c\xf8\x77\x00\x00\x00\xff\xff\xe7\xf2\x7c\x22\x26\x01\x00\x00") + +func testE2eTestingManifestsKubectlPodWithReadinessProbeYamlInBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsKubectlPodWithReadinessProbeYamlIn, + "test/e2e/testing-manifests/kubectl/pod-with-readiness-probe.yaml.in", + ) +} + +func testE2eTestingManifestsKubectlPodWithReadinessProbeYamlIn() (*asset, error) { + bytes, err := testE2eTestingManifestsKubectlPodWithReadinessProbeYamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/pod-with-readiness-probe.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsPod = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\xcc\x31\x6e\xc3\x30\x0c\x85\xe1\x5d\xa7\x78\x40\x67\x17\xed\x56\x68\xed\x05\x3c\x75\x67\x2d\xda\x21\x22\x91\x82\xc4\x24\xf6\xed\x03\x07\x01\x02\x67\xfd\xc8\xff\x7d\xe0\xd7\xea\x06\x9b\x51\x2d\x7d\x6e\x54\x32\x6e\xe2\x27\xbb\x38\x66\xc9\x0c\x5e\x9d\xb5\x8b\x29\x66\x6b\x70\xee\x1e\xa8\xca\x1f\xb7\xdd\x22\xae\xdf\xe1\x2c\x9a\x22\x46\x4b\xa1\xb0\x53\x22\xa7\x18\x00\xa5\xc2\x11\xba\x88\xae\x01\xc8\xf4\xcf\xb9\xef\x7e\xbc\xf4\xca\xd3\xae\x93\xa9\x93\x28\xb7\xc7\xcf\xf0\x56\x03\x52\x68\x39\x40\xb5\xe6\xcf\xbd\xe1\x55\x8f\xd6\x3c\xe2\xe7\x2b\xdc\x03\x00\x00\xff\xff\xaf\xc0\x71\x4d\xd6\x00\x00\x00") + +func testE2eTestingManifestsPodBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsPod, + "test/e2e/testing-manifests/pod", + ) +} + +func testE2eTestingManifestsPod() (*asset, error) { + bytes, err := testE2eTestingManifestsPodBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/pod", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsRbdStorageClassYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8e\xb1\x6e\xc3\x30\x0c\x44\x77\x7d\x05\x91\xdd\x6a\xdc\xa1\x49\xb9\x76\xea\xd2\x25\x40\x77\xc6\x22\x5a\xc1\x96\x28\x90\x4c\x8a\xfe\x7d\x61\x79\x28\x32\x78\x93\xde\x1d\xef\x8e\x5a\xfe\x64\xb5\x2c\x15\xc1\x5c\x94\xbe\x38\xce\x67\x8b\x59\x9e\xee\x63\x98\x73\x4d\x08\x97\x8d\xbf\x2d\x64\x16\x0a\x3b\x25\x72\xc2\x00\x00\x95\x0a\x23\xd8\x22\x3f\xa1\xa9\xdc\xf3\x9a\xc3\x8a\x30\xdf\xae\xac\x95\x9d\x7b\x90\x5e\x53\x68\xa4\x54\xd8\x59\xad\x1f\x42\x91\x9a\x5d\xd4\x10\xc6\xe7\x53\x3c\xc6\x63\x1c\xf1\xe5\x74\x7e\xed\x22\xa5\x92\xeb\x7b\xc2\xed\xf1\x8f\x2e\x3c\x29\xfb\x47\x2f\x9d\xb8\x7d\x0f\xd6\xc1\xb0\x6b\xb3\x46\x13\x23\x1c\xd6\x3d\x83\xfd\x9a\x73\x39\x74\x5f\x13\x59\xb6\x99\xfd\x7b\x33\xd6\xb5\xef\x01\xec\xb5\xad\x5a\x08\x7f\x01\x00\x00\xff\xff\x71\x84\xc8\x20\x39\x01\x00\x00") + +func testE2eTestingManifestsRbdStorageClassYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsRbdStorageClassYaml, + "test/e2e/testing-manifests/rbd-storage-class.yaml", + ) +} + +func testE2eTestingManifestsRbdStorageClassYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsRbdStorageClassYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/rbd-storage-class.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsSampleDevicePluginYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x93\x41\x6f\xdb\x30\x0c\x85\xef\xfe\x15\x44\xee\xaa\xd7\x9d\x06\x5d\xdb\x62\x28\xd6\x75\x45\x83\xee\x5a\x30\xf2\xab\x23\x54\x96\x04\x89\x36\x92\x7f\x3f\x38\x76\x62\xb7\x4d\x97\x65\xba\x45\x79\xfa\xc8\x47\x3e\x73\xb4\xbf\x91\xb2\x0d\x5e\x13\xc7\x98\xcb\xee\xb2\x78\xb5\xbe\xd2\x74\xcd\x68\x82\x5f\x42\x8a\x06\xc2\x15\x0b\xeb\x82\xc8\x73\x03\x4d\x99\x9b\xe8\xa0\x2a\x74\xd6\x40\x45\xd7\xd6\xd6\xab\x15\x84\x47\x45\x8e\x6c\xa0\xe9\xb5\x5d\x41\xe5\x6d\x16\x34\x05\x91\xe3\x15\x5c\xee\x21\x44\xaf\xdf\xb2\xe2\x18\x8f\x93\x8a\x1c\x61\x7a\x5d\x86\x83\x91\x90\x86\x37\x0d\x8b\x59\xdf\xcd\x20\xa7\x30\x44\x82\x26\x3a\x16\x8c\x80\x99\x8f\xfe\xb8\x37\xac\xd3\xb4\xfe\xb0\xf7\x41\x58\x6c\xf0\xe3\xc3\x7d\xaf\xfd\x89\xc9\x86\x64\x65\x7b\xe5\x38\xe7\xfb\x61\x52\x3b\xf7\xca\x87\x0a\xca\x24\x2b\xd6\xb0\x1b\xd5\x12\x1c\xd2\x1c\x45\xa4\x28\xc4\xfe\x2e\x24\x4d\x8b\x9b\x8d\xcd\x92\x17\x87\xf6\xf0\xf2\x02\x23\x9a\x16\xf7\xe1\x66\x03\xd3\x0a\x16\x67\x3e\x5b\x9a\x35\xaa\xd6\x1d\xde\x75\xc1\xb5\x0d\x66\xd5\x87\xed\x1e\xf3\x4d\xb4\x0e\x59\x1e\x58\xd6\xd3\xbc\x88\x62\xff\x9b\xca\x8e\x53\xe9\xec\xaa\xec\xf7\xed\x20\xe5\x1b\x40\x7e\x47\x1f\x6f\x55\x42\x6d\xb3\xa4\xad\x8a\x29\xac\xa0\x9a\x50\xe1\x7f\x6a\x8d\xb8\xe7\x3d\x8e\x3e\x9a\xf9\x17\xec\x24\x33\xc1\x0b\x5b\x8f\x34\x9b\x8b\x6d\xb8\x86\xa6\xda\xa4\x0b\x1b\x76\xa5\x93\x87\x20\x2b\x7c\x85\x12\x64\x51\x3b\x45\x2e\x8f\x25\x47\x5f\x5e\x7c\xa1\x43\xc5\xcf\x3f\xa0\x69\x63\xbe\x9b\x3a\xdc\xfb\x78\xb8\x7b\xfa\x7e\x7b\xff\xbc\xfc\x75\xf5\xe3\xf9\xfa\xf6\x71\xe6\xa0\x63\xd7\x42\xd3\xe2\xc4\x1a\xa6\x44\x64\x98\x76\x17\xd3\xe0\x05\x1b\x99\x4f\xa3\x8f\x70\x67\x1d\x6a\x54\x9a\x24\xb5\xd3\x4a\x86\xac\xfc\x0c\xad\x97\xfc\xb1\xbb\xe3\x46\x88\x9a\x5e\xff\x70\x46\x4a\xce\xcb\xc9\xdf\x0b\xbc\x8f\xc6\xb1\xae\x3f\x41\x0d\xff\xb4\xb1\x62\xc1\x52\x12\x0b\xea\xed\xe0\x5a\xb6\x11\x9a\x1e\x83\x73\xd6\xd7\x4f\x3b\x41\xf1\x27\x00\x00\xff\xff\x4f\x53\x11\xfc\x45\x05\x00\x00") + +func testE2eTestingManifestsSampleDevicePluginYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsSampleDevicePluginYaml, + "test/e2e/testing-manifests/sample-device-plugin.yaml", + ) +} + +func testE2eTestingManifestsSampleDevicePluginYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsSampleDevicePluginYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/sample-device-plugin.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsSchedulingNvidiaDriverInstallerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x54\x4d\x6f\xe3\x36\x10\xbd\xeb\x57\x0c\xb2\x67\x59\x49\x8a\xa2\x0b\xdd\x8c\x38\x68\x8d\x66\xed\x20\x76\x72\x35\x68\x72\x2c\x11\xa2\x48\x75\x38\xd4\xc6\xff\xbe\xa0\xe4\x78\x25\x6f\x9c\x78\x5b\xdd\x34\x1f\x6f\x3e\xf8\xde\x7c\x81\x75\xa9\x3d\xcc\x04\xd6\xce\xae\x90\xe1\xbb\xf0\xe0\x48\x17\xda\x0a\x63\xf6\x40\xb8\x43\x42\x2b\x51\xc1\x8e\x5c\x9d\x7c\x81\x92\xb9\xf1\x79\x96\x15\x9a\xcb\xb0\x9d\x48\x57\x67\x7f\x3a\x57\x18\xbc\x33\x2e\xa8\x47\x23\x78\xe7\xa8\xce\xa4\xb3\x2c\xb4\x45\x4a\xd1\x16\xda\x62\x2a\xa4\x44\x83\x24\xd8\x91\xcf\xb6\xc6\x6d\xb3\x5a\x78\x46\xca\x54\x57\xdb\x23\x4f\xf6\xa2\x36\x49\x12\x5b\x42\x98\x39\x59\x21\xed\xb4\x41\x10\x56\x81\xe3\x12\x09\xbc\x0b\x24\x11\x76\x8e\x80\x63\xdb\xc7\x54\x10\x84\xa0\xed\xaf\xb4\xe7\xd3\xa2\x09\xa9\xb6\x9e\x85\x31\x48\x49\x22\x1a\xfd\x82\xe4\xb5\xb3\x39\x88\xa6\xf1\x59\x7b\x93\x54\xda\xaa\xfc\xc7\x76\x92\x1a\x59\x28\xc1\x22\x4f\x00\xac\xa8\x31\x07\xdb\x6a\xa5\x45\xaa\x48\xb7\x48\x03\xb8\xde\xef\x1b\x21\x31\x87\x2a\x6c\x31\xf5\x7b\xcf\x58\x27\x00\x46\x6c\xd1\xf8\x08\x01\x50\x7d\xf5\xa9\x68\x9a\xf3\x38\xbe\x41\x19\x43\x3d\x1a\x94\xec\xa8\x4f\xab\x05\xcb\xf2\x61\x80\x73\x01\x12\x40\x68\x94\x60\x5c\x31\x09\xc6\x62\xdf\x27\xf2\xbe\xc1\x1c\x9e\x9c\x31\xda\x16\xcf\x5d\x40\x02\xc0\x58\x37\x46\x30\x1e\xaa\x0d\xa6\x8e\x9f\x19\x15\xfe\x7c\x13\x17\x37\x08\xf0\x36\x6e\xfc\xc4\x6e\xa7\xad\xe6\xfd\xa0\x90\x53\x38\xfd\xc9\x0a\x40\xf8\x4f\xd0\x84\x6a\x16\x48\xdb\x62\x25\x4b\x54\x21\xce\x33\x2f\xac\x3b\x9a\xef\x5f\x51\x06\x8e\xcf\x3b\xc8\xec\x31\x57\x87\xe5\xae\x91\x6a\x3f\x76\xa7\xfd\xae\xef\x5f\x1b\x42\x1f\xc9\x71\xe2\x8f\x11\x15\xee\x73\x90\x91\x5f\x93\xa2\xe3\x5a\x47\xbb\xa2\x1a\x91\xfe\x24\x0b\xc0\x35\xbd\x23\x87\xfb\x57\xed\xd9\x1f\x02\xd8\x75\x09\xc3\x4a\xe9\x20\xf6\xaa\x0f\xbe\x3a\xb8\x4a\xe7\x79\x81\xfc\xdd\x51\x95\x03\x53\xc0\x81\xfd\x71\x3e\x1b\xd9\x5a\x67\x42\x8d\x03\xd4\xfe\xdd\x14\xb6\xc7\xde\xba\x34\xc1\xe5\x70\xc6\x26\xfe\x43\xf6\x23\xec\x2d\xb1\x0d\xa6\x12\x36\xd5\x52\xa5\xb5\x0b\x96\x2f\x41\x29\x5d\x8d\x59\x94\x03\x59\x64\xf4\xd9\x56\xdb\xac\xe7\x43\xd6\xc3\x65\x5a\xaa\x89\x3a\xa9\x74\x60\xcc\x81\x2a\xa9\xd2\x94\xc6\x1a\xff\xaf\xe0\x49\x0d\x72\x8e\x2f\x9f\xe3\x60\x89\x4c\xbc\x7b\xbb\x74\x83\xcd\xea\x5a\x14\x98\x43\x21\x69\xa2\x5d\x77\x6c\x3a\x7a\xfc\x7c\x76\xf2\xf6\xf6\xfa\xf6\xfa\xfa\x8f\xeb\x9b\x5f\x54\x13\x61\x7f\x0c\xfd\xa9\x0e\xd0\xf3\x09\x45\x65\x13\x72\xb8\x9e\xdc\xfc\x7e\xb4\x7a\x94\x81\x34\xef\x63\xeb\xf8\xca\xa3\xf9\x48\xb7\xda\x60\x81\x6a\xc4\x1d\x00\xb4\xed\x30\xee\x6d\x6d\x8b\x97\xf9\x6c\x3e\xdd\xcc\x17\xab\xf5\xf4\xe1\x61\x33\x9b\x3f\x6d\xfe\x5a\xae\xd6\xa3\x06\x5a\x61\x02\x5e\xf2\x16\x9f\x00\xdf\x2d\x17\xeb\xe9\x7c\x71\xff\xf4\x2e\x7a\xf0\x94\x19\x27\x85\x39\x8f\xf9\xf2\xfc\xf0\xf7\x74\xb1\x99\xdf\xcd\xfe\x6b\xa3\xef\xb1\xf4\x83\x0a\x1f\x77\x8c\x2c\x3f\xc3\x7b\x5a\x2e\xd7\x9b\x6f\xcb\xe7\xc5\x3a\xe2\xbd\x8b\x12\x89\x7b\x74\xf4\x1a\xff\x16\x69\x3c\x60\xc1\xa5\x3a\x02\xe8\x04\xf0\xd8\x73\xfc\xec\x42\x3f\x3d\x00\x63\x9c\xb3\x63\xbe\x77\x81\xc6\xa9\x43\xcf\x07\x42\x1d\x27\x0d\x16\x22\xcf\x6b\xf3\xaa\xfa\xea\x27\x07\x81\x36\x22\x78\xcc\x7f\x9b\xdc\x5e\x9d\xa8\xb0\x73\xfc\x1b\x00\x00\xff\xff\x7e\x84\x27\x2d\x24\x09\x00\x00") + +func testE2eTestingManifestsSchedulingNvidiaDriverInstallerYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsSchedulingNvidiaDriverInstallerYaml, + "test/e2e/testing-manifests/scheduling/nvidia-driver-installer.yaml", + ) +} + +func testE2eTestingManifestsSchedulingNvidiaDriverInstallerYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsSchedulingNvidiaDriverInstallerYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/scheduling/nvidia-driver-installer.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsServiceloadbalancerHaproxyrcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x53\xcd\x8e\xd3\x30\x10\xbe\xe7\x29\x46\xe2\x4a\xba\x8d\xb2\xa0\x62\x89\xc3\x6a\x91\xe0\x18\x41\xc5\x7d\xea\x8e\x1a\x6b\x27\x1e\x63\x4f\xc3\x06\xc4\xbb\xa3\xa4\x6d\xea\x5d\xda\x05\x7c\xf4\x37\xfe\xfe\x26\x79\x70\x7e\x6b\xe0\x33\x05\x76\x16\xd5\x89\xbf\x17\xaf\x51\x98\x29\x16\x18\xdc\x57\x8a\xc9\x89\x37\xd0\x57\x45\x47\x8a\x5b\x54\x34\x05\x80\xc7\x8e\x0c\x24\x8a\xbd\xb3\x54\xb2\xe0\x76\x83\x8c\xde\x52\x2c\x00\x18\x37\xc4\x69\x1c\x03\xc0\x10\xae\xce\x01\xf4\x19\x7d\x0a\x64\xc7\x37\xf1\xe0\x25\x19\xa8\x0a\x80\x44\x4c\x56\x25\xfe\x2f\x1b\x80\x52\x17\x18\x95\x0e\x2f\x73\xf3\xe3\xc9\x3d\xfe\x9d\xf9\x4f\x76\x80\x93\xdf\xf1\x58\xf1\x8a\xce\x53\x9c\x19\x4b\x70\x1d\xee\xc8\xc0\xc3\x2a\x2d\x76\x36\x2e\x9c\xdc\x1c\xe9\x79\x63\x96\x8b\x6a\xe6\x9d\xe6\x9a\x3d\x73\x23\xec\xec\x60\xe0\x8e\xbf\xe3\x90\x66\x9c\x5d\x4f\x9e\x52\x6a\xa2\x6c\xe8\x6c\x18\xa0\x55\x0d\x1f\x49\xf3\x2b\x80\x80\xda\x1a\xb8\x69\x09\x59\xdb\x1f\x4f\x21\x89\x6a\x60\xb5\x5c\x55\x4f\xae\x93\x6d\x69\x5c\xe6\xa7\xf5\xba\xc9\x00\xe7\x9d\x3a\xe4\x0f\xc4\x38\x7c\x21\x2b\x7e\x9b\x0c\xd4\xcb\x6c\x42\x5d\x47\xb2\xd7\x19\x7c\x33\x63\x87\xaf\xa3\xc5\x10\xe5\x71\x28\x72\xfd\xac\xf1\x57\x70\xc7\x3c\x85\x38\xf5\x7e\xce\x5c\x9e\x1b\x6d\x8e\xae\xf3\xe0\x92\xf4\xc2\x75\x88\xa2\x62\x85\x0d\xac\xef\x9b\x4c\xc6\xef\x9c\x7f\x9c\x84\x5e\x10\xb8\xbd\xad\xaf\x28\xfc\x93\x46\x37\xa4\x6f\x7c\x9d\xbd\xae\x97\x6f\x2f\xd2\x3f\x03\xae\xd1\x1f\xab\x84\xa4\xa8\x2f\x84\xa8\xde\xd5\x97\x65\x9e\x01\x97\x65\x22\x25\xd9\x47\x4b\xc9\xc0\xcf\x5f\xe7\x1f\x23\xee\xb2\xa5\x95\x50\x96\x6a\x43\x79\xda\xd8\xfb\x29\xb8\x19\x63\xbc\x9e\x7a\x4e\xbd\x35\x63\x97\xbf\x03\x00\x00\xff\xff\x95\xb6\xdf\x12\x58\x04\x00\x00") + +func testE2eTestingManifestsServiceloadbalancerHaproxyrcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsServiceloadbalancerHaproxyrcYaml, + "test/e2e/testing-manifests/serviceloadbalancer/haproxyrc.yaml", + ) +} + +func testE2eTestingManifestsServiceloadbalancerHaproxyrcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsServiceloadbalancerHaproxyrcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/serviceloadbalancer/haproxyrc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsServiceloadbalancerNetexecrcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x90\xcd\xee\xd3\x30\x10\xc4\xef\x79\x8a\x91\x38\x27\x6d\xe9\xa5\xf2\x0d\xc1\xbd\x08\x21\xee\xdb\x78\xdb\x58\x75\x76\x2d\xef\xa6\x85\xb7\x47\x2e\xfd\xe2\xbf\xb7\x8c\xe6\x37\x33\x31\x95\xf4\x8b\xab\x25\x95\x80\xcb\xa6\x3b\x27\x89\x01\x3f\xb8\xe4\x34\x92\x27\x95\xaf\x2a\x5e\x35\x67\xae\xdd\xcc\x4e\x91\x9c\x42\x07\x08\xcd\x1c\x20\xec\xfc\x9b\xc7\xce\x0a\x8f\x4d\xfd\x84\x2f\x66\xcb\xcc\x86\x3f\xba\x60\xa2\x0b\x63\x0b\xd1\xc8\x86\x24\x4d\xab\x18\xf3\x62\xce\x75\xe8\x80\xfa\xaf\xc5\x02\xb6\x1d\xe0\x3c\x97\x4c\xce\x2d\x07\x78\xef\x6a\x97\xe9\xc0\xd9\x1e\x5f\x00\x95\xf2\xaa\x6f\xc2\x63\x42\xbb\x51\xc5\x29\x09\xd7\x27\xd0\x7f\x18\xfc\x88\x49\x33\x9d\x38\xe0\x34\xd6\x21\xe9\xea\xbc\x1c\xb8\x36\x8b\xf5\xfc\x99\x7b\x67\xf3\xfe\xe6\xb0\xd5\x1d\x0c\x9b\x61\xfd\x84\x8b\x56\x7f\x9b\xd4\xbf\x7a\xbf\x6b\xf5\x80\xdd\x7a\xf7\x32\xb7\xc7\xf9\x39\x25\x43\x32\xb8\xe2\xa8\x75\x64\xf8\xc4\xc6\x28\x1a\x6f\x5a\x26\x89\x50\x41\x4c\xc7\x23\x57\x16\xc7\xa4\xe6\x36\xfc\x9f\xb1\xff\xb6\x0f\x58\xec\x06\x23\xea\x55\xae\x54\x23\xa8\x24\x34\xfc\xc4\xde\xf2\xda\xdf\x22\x89\x39\x53\x7c\xe7\x5b\xe0\x7d\xdc\xa6\xfb\x1b\x00\x00\xff\xff\x4a\x68\xfa\x6c\xfb\x01\x00\x00") + +func testE2eTestingManifestsServiceloadbalancerNetexecrcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsServiceloadbalancerNetexecrcYaml, + "test/e2e/testing-manifests/serviceloadbalancer/netexecrc.yaml", + ) +} + +func testE2eTestingManifestsServiceloadbalancerNetexecrcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsServiceloadbalancerNetexecrcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/serviceloadbalancer/netexecrc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsServiceloadbalancerNetexecsvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xce\xb1\x6a\x03\x31\x10\x04\xd0\x5e\x5f\x31\x3f\x10\x48\xba\xa0\x36\x7d\x38\xc8\x91\x7e\xad\x1b\x6c\x61\x9d\x76\x91\x96\xc3\xfe\x7b\x73\xf2\x81\x1b\x77\xcb\x1b\x86\x1d\xb1\xfc\xcf\xd6\xb3\xd6\x88\xed\x2b\x5c\x73\x5d\x22\xfe\xd8\xb6\x9c\x18\x56\xba\x2c\xe2\x12\x03\x50\x65\x65\x44\xa5\xf3\xc6\x14\x80\x22\x27\x96\xbe\x27\x80\x98\xbd\xa2\x6e\x4c\x3b\xcf\x77\x63\xc4\xaf\x2e\x9c\xb4\x79\x00\x4c\x9b\x8f\xc2\xc7\x38\x23\xbe\x3f\x47\xdb\xa5\x9d\xe9\xd3\x41\x07\x5a\x53\xd7\xa4\x25\x62\xfe\x99\x86\x3c\x07\x5c\xdc\x2d\x00\x9d\x85\xc9\xb5\xbd\xf9\xff\x08\x00\x00\xff\xff\x99\xb6\xda\xa2\xd2\x00\x00\x00") + +func testE2eTestingManifestsServiceloadbalancerNetexecsvcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsServiceloadbalancerNetexecsvcYaml, + "test/e2e/testing-manifests/serviceloadbalancer/netexecsvc.yaml", + ) +} + +func testE2eTestingManifestsServiceloadbalancerNetexecsvcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsServiceloadbalancerNetexecsvcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/serviceloadbalancer/netexecsvc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsServiceloadbalancerNginxrcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8e\x4b\x4e\xc6\x30\x0c\x84\xf7\x39\x85\x2f\x50\xf8\xbb\x43\xde\x72\x01\xc4\x82\xbd\xdb\x5a\xad\x45\xe2\x58\x8e\x85\xe0\xf6\x28\x94\x3e\x66\x37\xc9\x37\x33\x26\x93\x0f\xf6\x26\x55\x11\xbe\xc6\xf4\x29\xba\x20\xbc\xb3\x65\x99\x29\xa4\xea\x6b\xd5\xf0\x9a\x33\x7b\x2a\x1c\xb4\x50\x10\x26\x00\xa5\xc2\x08\xe5\x67\xd0\x55\xf4\x3b\x35\xe3\xb9\x3f\xfb\x1e\x6c\x08\x63\x02\x08\x2e\x96\x29\xb8\xff\x00\xdc\xe3\x5d\x99\x26\xce\xed\x70\x00\x64\x86\xb0\xd7\x75\x7b\x54\x76\xcd\x55\x83\x44\xd9\x4f\x7c\xf8\xbf\xe0\x8f\xdf\x22\xac\x9d\x3d\x52\x68\x65\x84\xc9\x9c\xda\x46\x1a\xdb\xf3\x05\xe1\xf8\xf4\x38\x41\xab\x1e\xb7\xfd\xe1\x9a\x79\xab\x1e\x08\x2f\x8f\xf4\x1b\x00\x00\xff\xff\xdc\xf9\xe9\xab\x1e\x01\x00\x00") + +func testE2eTestingManifestsServiceloadbalancerNginxrcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsServiceloadbalancerNginxrcYaml, + "test/e2e/testing-manifests/serviceloadbalancer/nginxrc.yaml", + ) +} + +func testE2eTestingManifestsServiceloadbalancerNginxrcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsServiceloadbalancerNginxrcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/serviceloadbalancer/nginxrc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsServiceloadbalancerNginxsvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8c\x41\x0a\x02\x31\x0c\x45\xf7\x39\xc5\xbf\x80\xa0\x3b\xc9\xd6\x0b\x08\x8a\xfb\xd8\x09\x5a\xec\x34\xa1\x0d\xc5\xe3\xcb\x54\x77\xee\x3e\xef\x7d\x9e\x78\xbe\x69\xeb\xd9\x2a\x63\x1c\xe8\x95\xeb\xc2\xb8\x68\x1b\x39\x29\xad\x1a\xb2\x48\x08\x13\x50\x65\x55\x46\x7d\xe4\xfa\xee\x23\x11\x50\xe4\xae\xa5\x6f\x0a\x10\xf7\x9f\xa3\xee\x9a\x36\xe8\xd6\x62\xda\xdd\x9c\x8c\xe3\x7e\x5e\xbd\x59\x58\xb2\xc2\xb8\x9e\xce\x93\x7c\xcb\xcf\x08\x27\xa0\x6b\xd1\x14\xd6\xfe\xba\xf4\x09\x00\x00\xff\xff\x55\x0d\xe9\x5c\xaa\x00\x00\x00") + +func testE2eTestingManifestsServiceloadbalancerNginxsvcYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsServiceloadbalancerNginxsvcYaml, + "test/e2e/testing-manifests/serviceloadbalancer/nginxsvc.yaml", + ) +} + +func testE2eTestingManifestsServiceloadbalancerNginxsvcYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsServiceloadbalancerNginxsvcYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/serviceloadbalancer/nginxsvc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetCassandraControllerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x54\x41\x6f\xd3\x4c\x10\xbd\xe7\x57\x8c\xfa\x5d\xbf\xb8\x4e\xa1\x82\xee\xcd\x6a\x8c\xa8\x50\x5a\x2b\x41\x05\x71\x89\xa6\xeb\x49\xba\x74\x77\x67\xd9\x5d\x1b\x2a\xc4\x7f\x47\x8e\x69\xe2\xd8\x2e\xe2\xd0\xb9\xf9\xcd\xbc\x37\xcf\xcf\x23\xa3\x53\xb7\xe4\x83\x62\x2b\xa0\x9e\x4d\x1e\x94\x2d\x05\x2c\xc9\x69\x25\x31\x2a\xb6\x97\x6c\xa3\x67\xad\xc9\x4f\x0c\x45\x2c\x31\xa2\x98\x00\x58\x34\x24\x40\x62\x08\x68\x4b\x8f\x13\x80\xff\xe0\xe3\x3d\x81\xc6\x3b\xd2\x01\xbe\x2b\xad\xe1\x8e\x00\x9d\xd3\x8a\x4a\xc0\x2a\xb2\xc1\xa8\x24\x6a\xfd\xb8\x1b\xde\x78\x36\x10\x0f\x0c\x65\x77\x4f\x8e\x4b\x88\x64\x9c\xc6\x48\xff\x83\xda\x80\xe5\x08\x81\xe2\x8e\xd3\x8e\x36\xeb\x9b\x27\x74\xae\xeb\x20\x38\x92\x4d\xcb\xb7\xde\x83\x80\xb3\xbd\xab\x40\x9a\x64\x64\xff\xf2\xbe\x92\x1d\xe9\x49\xbf\xb5\x36\x62\x0e\xf6\xe4\x76\xa4\x1b\x65\x53\xdd\x37\x6b\x6a\x40\x07\x78\x7a\xbf\xa6\x24\xdb\x88\xca\x92\xef\x50\xa6\x20\xd9\x18\xb4\xe5\x01\x6a\xe1\x53\x5f\xd9\x24\xdc\x77\x50\x4f\x81\x2b\x2f\x29\x1c\x8f\x6a\x65\x54\xec\x61\x00\xd2\x55\x02\xd2\xe4\xbc\x03\x93\xad\xfb\x4b\xda\x7b\x58\x64\x9f\xd7\xef\xf3\xac\x58\xaf\xae\xbe\xe4\x3d\x9d\x1a\x75\x45\x02\xce\x67\x67\x8b\x51\xee\x8e\x77\x9d\x7f\x7a\x9e\x3a\x4b\xd3\x71\xea\x65\xb6\x5a\x65\xd7\xf3\x65\xb6\x5e\xe5\xf9\x7c\x5d\x2c\x6f\x6e\xaf\xe6\xf9\x72\x5c\xe5\x44\x71\xf2\xf0\x36\x24\xfb\x74\x93\x0f\xd5\x1d\x79\x4b\x91\xc2\x8a\xa8\x2c\x3c\xd7\xaa\x24\x7f\x32\xba\xaa\xb8\x99\xaf\xaf\xb3\x45\xbe\x2a\xb2\xcb\x51\x9b\xef\x3c\x9b\x7e\x84\x00\x1b\x45\xba\x5c\xd2\x66\xd8\xf9\xd3\x2b\x30\xde\x8b\xfd\x59\x24\xcd\xb2\xe0\x50\xd2\xb3\x26\xae\x8a\x17\xdf\x1e\x22\xc6\x2a\x24\x8e\xcb\x23\x71\x65\x70\x4b\x02\xb6\xd2\x27\x8a\x4f\xb7\xcc\x5b\x4d\xd3\x80\xc6\x69\x0a\xa7\xfb\x14\x45\x3d\x7b\xd5\x21\x0d\xff\x0f\x4f\xe5\xd8\xf7\x8f\x6c\x7a\x38\xe8\x82\x7d\x14\xf0\x26\x4d\xd3\x9e\xd7\x56\x50\xd9\xe8\x71\x6a\xb9\xec\x07\x33\x14\x98\x8d\x0a\x44\x1d\xa6\xff\x2c\x32\xbb\xb8\x18\x15\xf9\x6a\x7e\xfc\x9d\x79\x91\xbe\x3e\x1b\x65\xca\x6f\xba\x83\xd7\xac\x2b\x43\x0b\xae\xec\x30\x11\xd3\xa0\xed\x77\x39\x84\xbc\x6e\x8e\x63\x54\xb8\xd3\x68\x55\x8f\xfe\x0c\x83\x99\xa6\xc8\xb8\xf8\x38\x57\x5e\xc0\xcf\x5f\x93\xc9\xef\x00\x00\x00\xff\xff\xa4\xa9\x50\x3c\x08\x06\x00\x00") + +func testE2eTestingManifestsStatefulsetCassandraControllerYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetCassandraControllerYaml, + "test/e2e/testing-manifests/statefulset/cassandra/controller.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetCassandraControllerYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetCassandraControllerYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/cassandra/controller.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetCassandraPdbYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\xcc\x3d\xae\xc2\x30\x10\xc4\xf1\xde\xa7\x98\x0b\x3c\x3d\x85\xd2\x1d\x88\x92\x82\x8a\x7e\x6c\xaf\x60\x85\x3f\x56\xb6\x13\x89\xdb\xa3\x88\x26\xf5\x7f\xe6\x47\xd3\x87\xf4\xa1\xad\x7a\x58\xcb\x1a\x3f\xff\xdb\x12\x64\x72\x71\x6f\xad\xc9\xe3\xde\xd2\x55\x47\x5f\x6d\x6a\xab\x97\x35\x3d\x65\xba\x22\x93\x89\x93\xde\x01\x95\x45\x3c\x22\xc7\x60\x4d\x9d\x7f\x96\x82\x03\x32\x83\xe4\xb1\x77\xc0\x52\x38\x0c\xdc\x30\x89\x7b\x28\x5a\xcf\x1b\x35\x33\x64\xf1\x38\x39\x60\x48\x96\x38\x5b\xff\xdd\x0a\x67\x7c\xdd\x0e\x0e\x40\xb3\xa3\xf4\x0d\x00\x00\xff\xff\x20\x15\x65\x49\xbc\x00\x00\x00") + +func testE2eTestingManifestsStatefulsetCassandraPdbYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetCassandraPdbYaml, + "test/e2e/testing-manifests/statefulset/cassandra/pdb.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetCassandraPdbYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetCassandraPdbYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/cassandra/pdb.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetCassandraServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8d\x31\xca\x42\x31\x10\x84\xfb\x3d\xc5\x5c\xe0\x87\x5f\xb1\x71\x6f\x60\x23\x82\x60\xbf\x26\x53\x04\xf3\x92\xb0\x1b\xdf\xf9\xe5\x89\x85\x85\xdd\xcc\x30\x7c\x9f\x8d\x72\xa3\x47\xe9\x4d\xb1\xee\xe4\x51\x5a\x56\x5c\xe9\x6b\x49\x94\x85\xd3\xb2\x4d\x53\x01\xaa\xdd\x59\x63\x4b\x80\x8d\xa1\x48\x16\x61\x2d\xbb\x09\xd0\x6c\xe1\xf7\x12\x83\x69\xbb\xa6\xfa\x8c\x49\x3f\x5d\x14\xe7\xde\x28\xc0\xe8\x3e\x3f\x94\xbf\x77\x51\x1c\xff\x0f\x7b\x01\x82\x95\x69\x76\xff\xa9\x78\x05\x00\x00\xff\xff\x9d\xcf\x54\x9b\xa7\x00\x00\x00") + +func testE2eTestingManifestsStatefulsetCassandraServiceYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetCassandraServiceYaml, + "test/e2e/testing-manifests/statefulset/cassandra/service.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetCassandraServiceYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetCassandraServiceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/cassandra/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetCassandraStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x56\xdf\x6f\xe3\x36\x0c\x7e\xcf\x5f\x41\x64\x7b\xd8\x80\xd9\x49\xee\x76\xd8\xea\xb7\x20\xc9\x6e\xc5\xf5\x47\x10\x77\xbb\x61\xc3\x10\x30\x12\xdb\x68\x95\x25\x9f\x48\x67\xcd\x7f\x3f\xc8\x49\x5c\xbb\x71\x8b\x7b\x98\x9f\x8c\x8f\xfc\xc8\x8f\x94\x08\x0a\x4b\xf3\x3b\x05\x36\xde\x65\x80\x65\xc9\xa3\xdd\x64\xf0\x68\x9c\xce\x20\x17\x14\xba\xaf\x6c\x4e\x32\x28\x48\x50\xa3\x60\x36\x00\x70\x58\x50\x06\x0a\x99\xd1\xe9\x80\x03\x2e\x49\x45\x9c\x29\xec\x8c\xa2\x9b\x17\x66\x80\x40\xa5\x35\x0a\x39\x83\xf7\xb5\x9b\x25\x25\x3e\x44\x0a\x40\x81\xa2\xb6\x57\xb8\x21\xcb\x07\x00\xa2\x8a\x2e\x5f\xa8\x28\x2d\x0a\x1d\x19\x2d\x29\xf1\xb3\x1d\x72\x0f\x1d\xe0\xa4\x30\x7e\xca\x3b\x41\xe3\x28\x34\x94\xe4\xac\xa2\x53\x28\x53\xe0\x03\x65\xf0\xa0\x42\x6a\xfc\xe8\xc1\xfb\x07\x4b\x09\x63\x51\x5a\xe2\x51\xe3\x9e\xed\x26\xef\xbb\x94\x65\x65\xed\xd2\x5b\xa3\xf6\x19\x4c\xed\xbf\xb8\xe7\xc6\x5e\xfa\x20\x2d\xb1\xc9\xb3\x9e\xa5\x0f\x92\xc1\x4f\xe3\xf1\xb8\xb1\x9e\x7a\x6d\x9c\x04\x4c\x9c\xd7\xf4\x26\x71\x72\x46\x14\xcb\xc9\x57\x91\x27\x17\x17\x67\xe4\x7f\x8a\xa7\xd7\x19\x17\xe3\x1f\xdf\x9d\x31\xd4\x17\xdb\x60\x81\xd8\x57\x41\x51\xab\xd8\x08\x7e\xa9\x88\xa5\x83\x81\x2a\xab\x0c\x86\xef\xc7\xe3\x62\xd8\x86\x0b\x2a\x7c\xd8\x67\x30\xf9\x68\x1a\x98\x49\x55\xc1\xc8\x7e\xe6\x9d\xd0\x93\xb4\xc3\x28\x2c\x71\x63\xac\x11\xd3\x4d\x09\x80\x5a\x77\x81\x58\xce\xe5\x72\xb6\xbe\xba\x9d\x7d\x6a\x0c\xd6\xdc\x93\xda\x2b\x4b\x6d\xdf\x32\x50\x2e\xbe\xec\xd2\xe9\xe9\xf9\x36\x35\xd9\x7d\x51\xa0\xeb\xc9\x33\xda\x18\x37\xe2\xed\x19\x9e\xa8\x33\x28\x1e\x91\x78\x6f\x41\x07\x34\xae\x31\x93\xdb\xb5\xc3\x9e\x6e\xeb\xf5\xf4\x8f\xf5\xaf\x8b\xe9\x72\x9d\x5f\xfe\xb9\xe8\xc4\xda\xa1\xad\x28\x83\x0f\x93\x77\xd7\x3d\xbc\x9a\x73\xb3\xf8\xfc\x1a\x6d\x32\x1e\xf7\xd1\x96\xb7\xf3\xf5\xcd\xf4\x7a\x91\x2f\xa7\xb3\x1e\xde\x2f\xc1\x17\x2f\x8b\xbf\x37\x64\xf5\x8a\xee\x5f\xe2\x47\xcb\x12\x65\x9b\x35\xd3\x9c\xc6\x34\x5c\xa2\xa2\x9e\xe4\xb3\x69\x9e\x4f\x6f\xe6\xab\xe9\x3a\x5f\x2c\xe6\x79\x9f\xec\x61\x33\x8e\xc9\x38\x6d\xfe\xd3\x6f\xbf\xeb\x08\xff\x3e\xe5\x9d\x4a\x95\xad\x58\x28\xa4\xd6\x2b\xb4\xc3\x37\xf3\xcd\xae\x7e\xcb\xef\x16\xab\x3a\x42\x6f\xda\x4f\x3f\xcf\xa9\xf0\x6f\x07\x99\xcf\x7a\xa9\xf3\xd9\x24\xf9\x1a\xfa\x6a\xda\xba\xa6\xed\x00\x2b\x54\x8f\x6f\x85\x88\xa5\x5f\x2e\xff\xc7\xc3\x62\x41\xa9\x38\x2d\xbd\x6e\x85\x0d\x84\xda\x38\x62\x5e\x06\xbf\xe9\x4c\xcf\xf9\xa0\xf4\x8e\xc9\x71\x48\x36\xf8\x62\x4c\xce\x86\x24\x81\x51\x4c\xb6\x4f\xca\x98\x29\xed\xb8\x1b\x67\xc4\xa0\x9d\x93\xc5\x7d\x4e\xca\x3b\xcd\x19\x4c\x3e\xb4\x3c\xc4\x14\xe4\x2b\x69\x8c\xcf\xb6\x6f\xe0\x6e\x4b\x4c\xb0\xf3\xb6\x2a\x08\x0a\x5f\x39\x61\xc0\x40\x50\xc6\xcd\xc8\x42\x4e\xd2\xe8\xb3\xaf\x41\x6b\x1e\x09\x8c\xb3\xc6\x11\x28\x8b\xa6\xe0\x1f\x5a\xa1\x36\x95\x80\xf3\x02\xf4\x84\x4a\xec\x1e\x36\xa4\xb0\x62\x02\xd9\x52\x7d\x2c\x0c\x8e\x48\x83\xf8\xc3\xea\x6b\xfc\xbc\x23\xf0\xf7\xad\x40\x91\xc0\xc7\x15\x0c\xa5\xd7\x47\x79\x9c\x36\x3e\x07\xe0\xba\x96\xdb\x5e\x29\x2f\xd6\x59\x12\xe7\xab\xd5\x88\xba\xbe\xc3\x81\x3e\x2f\xb1\xf5\xd1\xe9\xd4\x8b\x58\xa8\xf2\x6e\x47\x41\x0e\x6a\x8f\xcd\x39\x14\x0c\x9b\x7d\xad\x2f\x2e\x85\xe0\xad\xa5\x50\x53\xd1\xe9\x43\x74\xd2\x80\x52\x7b\x94\x28\x5b\x86\x82\x9c\x18\xef\x22\xbc\xf1\x3b\x4a\x6b\x6f\xed\xeb\x46\x1d\x9b\xc3\xb1\xa7\x50\x06\xaf\x2b\x15\x7d\xa1\x72\x62\x2c\x30\x6b\xf8\x38\x5b\x2c\x9b\x83\x98\x1b\x7e\x04\x1f\xc0\xcb\x96\x42\x6d\x2e\xf5\xe0\xd4\x8b\x59\x54\x77\x77\x7c\x2e\xd4\x3d\x49\xce\xde\x0b\xaf\x76\xa7\xfd\x4a\x40\xa5\x88\xf9\xda\x6b\xe2\x0c\xfe\x82\xe1\x8a\x50\x7f\x0e\x46\xe8\xd6\x29\x1a\xc2\xdf\x83\xd3\xdd\x3f\x5b\x72\x7d\x2b\x8e\xc5\x87\xfa\x25\x11\x77\xd9\xe0\xbf\x00\x00\x00\xff\xff\xe4\xd5\x43\x1f\x72\x09\x00\x00") + +func testE2eTestingManifestsStatefulsetCassandraStatefulsetYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetCassandraStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/cassandra/statefulset.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetCassandraStatefulsetYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetCassandraStatefulsetYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/cassandra/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetCassandraTesterYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x52\xbb\x6e\x1b\x31\x10\xec\xef\x2b\xf6\x07\xa8\x87\xd3\x08\xec\x6c\x08\x48\xe3\x42\x80\x81\xf4\x7b\xe4\x40\xb7\x30\x8f\x24\xc8\xd5\x05\x97\xaf\x0f\xce\xb1\x24\x9e\xad\x2a\x5b\x72\x38\xcb\x19\xce\x70\x96\x5f\x28\x55\x52\xb4\xc4\x39\xd7\xed\xb4\xef\xde\x25\x7a\x4b\x47\xe4\x90\xe6\x11\x51\xbb\x11\xca\x9e\x95\x6d\x47\x14\x79\x84\x25\xc7\xb5\x72\xf4\x85\x8d\xa2\xaa\xa9\x28\x13\x4a\x57\x33\xdc\x72\xa7\x20\x07\x71\x5c\x2d\xfd\xe8\x88\x2a\x02\x9c\xa6\xb2\x20\x44\x23\xab\x1b\x5e\xb9\x47\xa8\xff\x0e\x68\x79\xd7\x52\xbb\x87\x48\x31\xe6\xc0\x8a\x4f\x4e\xf3\xfe\x32\x61\x45\x7f\xb8\x80\xe8\x2a\x66\x19\x97\xa2\xb2\x44\x94\x1b\xc9\x7c\x1a\xf9\xca\x5a\x46\x46\x3e\xc3\xd2\xfb\xa1\x6e\xce\xae\x6c\x24\x6d\xef\x76\xf1\x84\x0f\xcb\x76\xb7\xd9\xaf\x09\xa7\x4b\x08\xa7\x14\xc4\xcd\x96\x9e\xc3\x6f\x9e\xeb\x0d\xcf\xa9\x68\x23\xd7\xdc\xf5\x9c\x52\x51\x4b\x87\xdd\x61\x77\x43\x0b\xd8\x4b\x44\xad\xa7\x92\x7a\xdc\x59\x44\x83\x6a\xfe\x09\x6d\x8f\x88\x32\xeb\x60\x69\x3b\x80\x83\x0e\x7f\xd6\xd0\xf7\xe5\x44\x12\x45\x85\xc3\x11\x81\xe7\x37\xb8\x14\x7d\xb5\xf4\xd4\x5c\xc8\x28\x92\x7c\x03\x19\x63\xba\xb6\x26\xf9\xc3\xe4\x76\xda\xf7\x50\xbe\xb6\xe5\x94\xfc\x51\x6a\xb9\x64\x95\x14\x5f\x2e\xfe\x8c\x47\xb5\x59\x7e\x0e\xc5\x64\xdf\x77\xeb\x14\xb3\xef\xd7\x59\x5c\xd3\x1b\x25\x3e\x4f\x2c\x81\xfb\x00\x4b\xfb\xff\xaa\xd3\x57\x03\xb7\x8a\xbf\xa1\x4c\xe2\xb0\x12\xda\xaa\x7a\xd0\xab\xef\xad\xb9\x2a\x6d\x42\x36\xeb\xaf\x5f\x2b\x7e\xd4\xf6\x39\xc3\xd2\x6b\x62\xff\xc2\x81\xa3\x43\xe9\xfe\x06\x00\x00\xff\xff\x6a\x4a\xab\x39\x98\x03\x00\x00") + +func testE2eTestingManifestsStatefulsetCassandraTesterYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetCassandraTesterYaml, + "test/e2e/testing-manifests/statefulset/cassandra/tester.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetCassandraTesterYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetCassandraTesterYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/cassandra/tester.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetCockroachdbServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x94\x41\x6f\x24\x45\x0c\x85\xef\xfd\x2b\x9e\x66\x0f\x7b\xd9\xcc\x86\x95\x80\x55\xdf\x10\x70\xc8\x25\x8a\x08\xe2\x8a\xdc\x55\x9e\xa9\x22\xd5\x76\xab\xec\x9e\x61\xfe\x3d\xaa\xea\x99\x80\x42\xf6\xda\xf6\xfb\x5c\xb6\x9f\x9b\x96\xfc\x07\x57\xcb\x2a\x23\x4e\xdf\x0d\x2f\x59\xe2\x88\x67\xae\xa7\x1c\x78\x98\xd9\x29\x92\xd3\x38\x00\x1f\xf0\x7b\xca\x06\xdb\x42\x50\x29\x17\xf0\xdf\xd9\xdc\xe0\x8a\x50\x99\x9c\xf1\xcb\xe3\x33\x58\xbc\x66\x36\x1c\xb4\x82\x29\x24\x2c\x1a\x91\x05\x9e\x18\xe6\xe4\x7c\x58\x4b\xe7\x19\x3b\x6c\x0d\x09\x9e\xc8\x5b\xf8\x82\x40\x82\xca\xa6\xe5\xc4\x9b\x56\x3d\x71\xfd\x68\x78\x78\x02\xc5\x58\xd9\x8c\x6d\x8f\x07\x47\x54\x36\x88\x7a\x27\x5d\xab\x13\x8a\x52\xbc\x9b\xa8\x90\x04\x8e\xf8\xb9\xac\xe6\x5c\x9b\x56\x22\x2c\xe9\x5a\x62\xd3\x60\x62\xac\xc6\x11\x31\x57\x0e\x5e\x2e\x98\x2e\x08\x25\xb3\xb8\x75\x5e\x16\xcc\x6a\x8e\x90\x6b\x58\x67\xf3\x86\xb3\xfd\x00\x08\xcd\x3c\x22\x68\x78\xa9\x4a\x21\xc5\x69\x00\x0a\x4d\x5c\xac\x8d\x08\xa0\x65\x79\x1b\x26\x11\x75\xf2\xac\x72\xcd\xf9\x80\x5f\x85\xa6\xc2\xa0\xd5\x75\x26\xcf\x01\xb3\x4a\x76\xad\x59\x8e\xd0\x03\xa8\x14\x64\xb9\x56\xc5\x39\xb1\xe0\xa9\xea\xcc\x9e\x78\x35\x64\x43\x5d\x45\x5a\xee\x75\xa8\x61\x6b\x73\xdf\xe9\xcb\x6b\xe6\x3e\xeb\x67\x0b\x95\x16\x1e\xb1\xf3\xba\xf2\xee\x9d\x84\x85\x3c\x8d\xd8\xfd\xd9\x16\xb3\xda\xe7\x13\x55\x7b\x37\x4d\xab\x8f\xd8\x7d\xbd\xff\x7a\xbf\x1b\x6c\xe1\xd0\x5a\x69\x1f\x7b\x4f\x77\xd8\xe2\x5f\x7e\xf8\xf2\xfd\x8f\x5d\xed\x54\x8f\xec\x4f\x6f\xbe\x6e\xd3\x3b\xd6\x25\xfc\x47\xd4\x98\xff\xd3\xbc\x7e\xdc\x24\xc9\x7d\x19\x70\x6b\xf4\xe1\x69\xc4\xa3\x0a\x0f\x80\x71\xe1\xe0\x5a\xbf\x39\xfd\xab\x6b\xb3\x41\x98\x23\xc7\xe6\xd5\x99\x5e\xb8\x0f\x6e\x61\xae\x77\x87\x2c\x91\x2b\xce\x5a\x5f\x5a\xd3\x0b\xd7\x72\xe9\x7e\x71\x45\xe2\xb2\x80\x4e\x9a\x63\x47\x71\x3c\x32\x02\xd9\xb6\x95\xca\xaf\x5b\xc2\x3d\x82\xce\x6c\x58\x17\xd0\xc1\xb9\xa2\xa8\xf5\x0d\xb9\xa1\x1d\x50\x07\xb6\x17\xb4\x63\xe9\xac\xc8\x21\x47\x6e\x9c\xe6\x70\x64\xbf\xf9\xf3\xd5\xcb\xc2\xe7\x5b\xc7\xd0\x0a\xaf\x97\xf6\xa4\xbf\x34\x0b\x48\xb6\xd3\xcb\x72\xec\x30\x15\xde\xe3\xe1\xd0\x28\x9b\xdc\xde\xe8\xbb\x89\xfe\xad\x91\xe8\xc4\x9d\xc4\xf1\x3d\xd6\x27\x9c\xf9\x63\x04\x4b\x6c\x0d\x9d\xb3\x27\xf8\x59\x61\xbc\x50\x6d\x6f\xbb\x52\x0d\x25\x9b\x73\xb7\xe2\x76\xc0\x30\x9a\xf9\xf6\x8b\xd8\x46\x26\x71\xd1\x2c\xfe\x09\xe7\x94\x43\xc2\xb9\xd7\x9f\x18\x27\xae\x17\x4c\x14\x9b\x6b\x97\x75\x2a\xd9\xd2\xa3\xfa\x6f\x4c\xf1\xf2\xd3\xed\xd0\x47\x34\xdb\x0e\xff\x04\x00\x00\xff\xff\x6a\xf0\xa9\x28\xa3\x04\x00\x00") + +func testE2eTestingManifestsStatefulsetCockroachdbServiceYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetCockroachdbServiceYaml, + "test/e2e/testing-manifests/statefulset/cockroachdb/service.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetCockroachdbServiceYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetCockroachdbServiceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/cockroachdb/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetCockroachdbStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x57\xdf\x6f\xdb\xc8\xf1\x7f\xf7\x5f\x31\x5f\x7d\x0f\xb0\xdd\x9a\x92\x9c\xe2\xd2\x54\x80\x1f\x5c\xc7\x0d\x8c\x36\x8e\x61\x05\x77\x0f\x69\x90\x5b\xed\x0e\xc5\xad\x96\x3b\xbc\xdd\xa1\x14\xb5\xe9\xff\x5e\xcc\x92\xa2\x48\xca\x39\xa0\x40\xe5\x17\x93\x3b\xf3\xd9\x99\xcf\xfc\xa4\xaa\xec\x4f\x18\xa2\x25\xbf\x00\x55\x55\x71\xb6\xbd\x3e\xdb\x58\x6f\x16\xb0\x64\xc5\x98\xd7\x6e\x89\x7c\x56\x22\x2b\xa3\x58\x2d\xce\x00\xbc\x2a\x71\x01\x9a\xf4\x26\x90\xd2\x85\x59\x9d\xc5\x0a\xb5\x9c\x44\x0c\x5b\xab\xf1\x31\x09\x4c\x7a\x12\x93\x33\x80\x80\x95\xb3\x5a\xc5\x05\xfc\x21\x89\x3a\xd4\x4c\x41\xd4\x00\x4a\xc5\xba\xf8\x9b\x5a\xa1\x8b\xcd\x0b\x10\x5b\x86\x97\x00\x30\x96\x95\x53\x8c\xad\x4e\xcf\x24\xf9\xb9\x81\xfa\x8b\x00\x00\x07\x4b\xe5\xf7\xff\xf0\xe0\x2d\x83\x26\xcf\xca\x7a\x0c\x11\x54\x40\x08\xb5\x07\xf2\x6e\x0f\xe4\x35\x82\xf5\xc0\x05\x82\xb3\x39\xb2\x2d\x11\x28\x07\x05\x15\x99\x2b\x58\x61\x4e\x01\x3b\x28\xcb\xe7\x11\x22\xab\xc0\x68\xa0\xae\x20\xa7\x90\x34\x73\x1b\x22\x83\xe8\x4e\xe1\x81\xa1\x50\x11\x98\x00\xbf\x5a\x86\x58\x6b\x8d\x31\xe6\xb5\x73\xfb\x0e\xa7\x81\x4d\xaa\x15\x99\xf3\x08\xa5\xb2\x7e\x6c\xa3\x72\x8e\x76\x68\x04\x29\x5d\x39\xed\xd4\x3f\x16\x36\x42\xa5\x02\x5b\x5d\x3b\x15\xc0\x0e\x3c\x04\x43\x18\x41\xc1\xdb\xc7\x25\x38\xa2\x4d\x6b\x27\x71\x81\x41\xae\x8b\x60\x7d\x07\x25\x26\x44\x64\xb9\xa4\x40\x57\x81\x41\xc6\x50\x5a\x8f\xb0\x2b\x30\x69\x50\x00\x4f\x0c\x0a\xb4\xab\x23\x63\x00\xe5\x02\x2a\xb3\x17\xf7\x22\xc7\xa3\x55\x0f\x39\x28\xbf\xef\xdf\x93\x24\xae\x40\x8c\x0b\xa8\x38\x59\x95\x5b\xd7\x11\xde\xc5\x2d\x93\x10\x77\x40\xc6\x86\x94\x35\x7b\xb1\xaa\x52\x31\x02\x17\x8a\xc1\xfa\x9c\x42\xa9\xd8\x92\x07\xe5\xc8\xaf\xe5\x38\x51\x18\x6c\xa9\xc2\xbe\xc7\x80\xc8\x77\x70\x6d\x34\x0c\x6a\x6b\xc4\x2d\x25\x5c\x95\xa5\xf2\x26\x73\xe2\x68\xee\xd4\x3a\x49\xd4\x31\x79\xed\x1b\xba\xad\x5f\xc3\xdd\xc1\xc0\xb7\x7f\x1e\xb1\x9f\x92\xa7\x54\xcc\x12\xad\xa4\xa4\xda\x50\x56\x52\x67\x91\xd1\x33\x6c\xc9\xd5\x25\x82\x8d\x80\x65\xc5\x7b\xc8\xc0\xe6\xc2\x46\xa1\xe2\xd1\x59\xc5\x0a\xf2\x40\xa5\x00\x04\xdc\x5a\xaa\x85\x38\xd4\xb5\x38\x7a\xd5\xb8\x9e\x84\x76\xd6\x39\x50\x6e\xa7\xf6\x11\x56\x28\xd6\x9a\x83\x51\x92\x00\x77\x5d\xf6\x1c\x52\x3f\x6b\x8b\x78\x45\xc4\x91\x83\xaa\xba\xaa\xb1\xa5\x5a\x0f\xab\x7b\x76\x8c\xc5\xe6\x4d\xcc\x04\x70\x31\x9f\x5e\x0f\x35\x9e\x6a\xe7\x9e\xc8\x59\xbd\x5f\xc0\x43\xfe\x48\xfc\x14\x30\xa2\xe7\x63\x35\x86\x75\xaf\x36\x33\x98\x64\xe4\xb3\xc4\xe6\xcd\xec\xf0\xdf\x34\x16\x93\x81\x48\xdb\x4f\x6e\x46\x9d\xa4\xf9\xa1\xdf\xf6\x01\x1b\x87\x9e\x3e\xbc\xfd\xf2\x78\xfb\xfe\x7e\xf9\x74\x7b\x77\xdf\x9d\x02\x6c\x95\xab\xf1\x2f\x81\xca\x45\xef\x25\x40\x6e\xd1\x99\x67\xcc\x87\x6f\xdb\xf7\x4f\x8a\x8b\x45\xd7\x66\xa6\x72\x41\xac\x94\xc6\x4e\xb6\x09\xe2\x7b\xaa\x3d\xc7\x53\x53\x44\xc9\xd8\xd0\x43\x2e\x45\xb2\x41\x9d\x1c\x59\x9d\x0d\x73\xfd\xe0\xa0\xca\x73\xa1\x7a\x7f\x04\xae\xc8\xdc\x7a\xb6\xb7\x27\x07\x20\xe9\x91\x63\x08\x68\xde\xd6\xc1\xfa\xf5\x52\x17\x68\x6a\x67\xfd\xfa\x61\xed\xa9\x7b\x7d\x7f\xc8\x9d\xbe\x6a\x06\x3b\xb4\xeb\x82\x17\x70\x3d\x9f\x0f\x68\x90\xfb\xda\xbb\x3e\x62\x28\xc7\x1c\xa5\x7e\xbb\x1c\xb4\xf1\xfe\x2f\xb5\xf4\xfb\xaf\x55\xc0\x28\xc3\x25\x9e\x4a\x64\xb0\xc1\x7d\x1a\x3a\x27\x47\x00\x54\x61\x50\x02\x0c\x0f\xfe\x85\xe3\x14\xcf\x17\x30\x05\x75\xdc\xf3\x8f\x3f\xa6\x8a\x1c\xad\xf7\x7f\x95\x7b\x37\xf5\x0a\x83\x47\xc6\x38\xb5\x34\x2b\x28\xb2\xc4\xad\xd5\xd0\xdf\x2d\x99\x97\xd0\x7f\xab\x68\x16\xdb\xeb\xe9\xfc\xbf\x2c\x96\x8a\xc2\x30\xa3\x3a\x73\x9e\x28\xf0\x02\x5e\xbd\x7e\xf5\xe3\x1f\x7b\xbe\x35\x96\xad\x43\xa5\xbf\xaf\xf3\x66\xfe\x66\x7e\xa2\x52\x30\x57\xff\x8b\x74\xfe\x6e\x36\x77\xe2\x6d\x5f\x1d\x66\xde\x64\xb6\xb2\x7e\xb6\x52\xfd\xba\x6f\x2a\x1f\xf5\xd7\xe1\xab\x6f\x83\x50\x4a\xab\x4d\x7d\x4e\x06\xf2\xaf\xb5\x72\x36\xb7\x68\xe0\x97\x43\x14\x21\xcb\x7f\x91\xe6\xaa\x43\xad\xad\x72\x8b\x91\xf2\x87\x34\x88\x3c\x19\x4c\xf3\xd4\x9f\x33\xa8\x95\x43\xe9\xf4\x32\x16\x65\x7e\xcb\xf4\xa8\xfd\x11\xfa\x80\x3c\x1d\x40\xdd\x3d\xdf\x3e\xbf\x5b\xde\x5c\x4c\x52\xff\x9a\xc0\x24\xcb\x1c\xad\x99\x22\x1b\x0c\x21\x3d\x5b\x1f\x51\xd7\x01\xd3\x83\xa0\x4c\x60\xf2\xc3\x45\xcf\xd0\xcb\xe6\x84\xb9\x3a\x1c\xcf\xa7\xe9\x6f\x72\x39\x32\xfb\x67\x6c\x86\xcb\x4e\xf9\x34\x96\xa5\x34\xad\x72\xf6\x9f\x08\x0a\x3c\xee\xba\x39\x7c\xb1\xda\x03\x95\x96\xd3\xa4\x12\x4f\xfe\x41\xd6\xa7\x69\x36\x86\xb4\x39\xec\xf0\x3c\x20\xc4\x3a\x6d\x1d\x8a\xdb\xe7\xe3\xee\x22\x34\xc1\x85\x9d\xe2\x14\xac\x37\xf8\x15\xe6\x97\xa0\xbc\xe9\x4f\xd2\x03\x9a\xd0\x8a\x1d\xa3\xdd\xc4\x6f\x88\x0e\xb5\xf7\x62\x8f\x6a\x16\x14\x89\x5c\x9a\xf4\xad\xcd\x2f\xc2\xd9\x28\x51\x8c\x75\x55\x51\x6c\xf6\x9d\x95\xf8\x7a\xd0\xbf\xd8\x15\x56\x17\x62\x96\xd5\x69\x89\x48\x0e\x74\xfb\xc8\x08\x6e\xb8\x9d\x24\x1f\x76\x08\xb1\xa0\xda\x19\x28\xd5\xa6\x25\x41\x56\x1a\xa6\x76\x2f\x69\x89\x25\x8f\x97\xd3\x11\xdc\x83\x6c\x7c\xb9\xac\x09\x4c\x69\x6b\xdc\x59\x2e\xa8\x66\xc8\xb2\x44\xb7\xec\x22\x10\x30\x65\x86\xf0\x3c\x26\x67\x04\xd7\xa3\x6a\x78\x93\xcd\xe1\x13\xfc\x5f\x3f\x69\x2e\x27\x70\x73\x33\xd8\xaf\xb3\xf9\x04\x3e\xc3\xb7\x6f\xf0\xf7\x71\x47\xfc\x04\x19\xfe\xc6\xb4\x99\xb5\x54\x7d\x69\x48\xf9\x52\xaa\xb0\xc1\x30\x81\xcf\x03\x1c\x2e\x70\xdc\x84\x53\x36\x1a\x12\x5f\x92\xb7\x3d\x63\x64\x87\xa3\x60\x24\xa6\x04\x6a\x4b\xd6\x08\x8b\x92\x45\xb2\x14\x95\x95\x64\xe5\x09\x1a\x53\x83\x63\x39\xa2\xcb\xaf\xa0\x89\xac\xae\x43\x40\xcf\x6e\x9f\x36\x57\xb9\x6c\x47\x61\x73\xa2\x7c\x21\xd5\x13\x17\xb3\xd9\xda\x72\x51\xaf\xa6\x9a\xca\xd9\x8b\xcd\x78\x66\x63\xac\x31\xce\xfe\xf4\xfa\xd5\x8f\xa3\x80\x1e\x8a\xf9\xf7\x37\x17\x93\x26\x82\x93\x11\xc5\xd3\xde\xd3\x55\xff\xe4\xfa\xbb\x27\xaf\xfa\x27\xa3\x7a\xce\xed\xe0\x51\x16\xbb\x17\xfb\x28\xfc\xf0\xaf\xc6\xb2\x4f\xbf\xfb\xfc\xef\x6e\x39\x7c\x24\x19\xfa\x59\x64\xaa\xa0\x90\x9e\x65\x23\x04\xfc\xb5\xb6\x01\xcd\x15\x28\x58\x3e\xbc\xfb\x78\xff\xfc\x1e\x2a\x57\x47\x88\x54\x62\xfa\x06\x11\x29\xe5\x5c\xaa\x93\xf3\xe3\xa6\xe9\x11\x0d\x9a\xf4\x2d\xb0\x0e\x4a\xcb\x47\x1f\xc4\xa2\x66\x43\x3b\xdf\x7c\xf2\x48\xf8\x0e\x7c\x35\x9f\x01\x69\xdb\x7e\x27\xd2\x4f\x18\x2c\x99\x25\x6a\xf2\x26\x2e\xe0\xf5\x61\xcc\x34\xf3\xe4\x64\x80\x8e\x07\xc9\x71\x2b\xfe\x29\x29\xdc\x39\x65\x07\xcb\x86\x96\x17\x8f\x23\xdd\xed\x51\xf6\x63\xfb\x59\x98\x6e\xca\x4e\xbe\x0b\x4f\x6f\xed\x7f\x04\xaa\xf4\x0d\xf6\x5e\xca\x6e\xb0\x9e\x3e\xa3\x32\x3f\x07\xcb\xf8\xc1\x6b\x3c\x8c\xa2\x80\x91\xea\xa0\xfb\xa2\xc2\x39\x46\x1e\xac\x22\x91\x29\xa4\x85\xe0\xfa\x9d\x3d\xfb\x4f\x00\x00\x00\xff\xff\x35\xe0\x44\xba\x60\x0f\x00\x00") + +func testE2eTestingManifestsStatefulsetCockroachdbStatefulsetYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetCockroachdbStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/cockroachdb/statefulset.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetCockroachdbStatefulsetYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetCockroachdbStatefulsetYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/cockroachdb/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetEtcdPdbYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\xcc\x3d\x0e\xc2\x30\x0c\xc5\xf1\x3d\xa7\x78\x17\x40\xa8\x8c\xd9\x40\x8c\x0c\x4c\xec\x4e\x6c\x81\x45\x3e\xac\xc6\xad\xc4\xed\x51\x55\x06\xd6\xf7\xd7\xfb\x91\xe9\x43\xe6\xa1\xbd\x45\x58\x2f\x9a\x3f\xc7\x75\x4a\xe2\x34\x85\xb7\x36\x8e\xb8\x77\xbe\xea\x98\x17\x73\xed\xed\xb2\xf0\x53\x3c\x54\x71\x62\x72\x8a\x01\x68\x54\x25\x42\x3c\xf3\xc1\x38\x05\xa0\x50\x92\x32\xb6\x04\x18\xa7\xbd\x85\x61\x92\xb7\xad\x6a\x3b\xaf\xa4\x85\x52\x91\x88\x53\x00\x86\x14\xc9\xde\xe7\xfd\x51\xc9\xf3\xeb\xf6\x47\x00\x64\xf6\x43\xbe\x01\x00\x00\xff\xff\x37\xe7\x80\xf7\xad\x00\x00\x00") + +func testE2eTestingManifestsStatefulsetEtcdPdbYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetEtcdPdbYaml, + "test/e2e/testing-manifests/statefulset/etcd/pdb.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetEtcdPdbYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetEtcdPdbYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/etcd/pdb.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetEtcdServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8e\xcd\x4a\xc0\x30\x10\x84\xef\x79\x8a\x79\x81\x82\x3f\x07\x35\x37\x8f\x5e\x8a\x28\x78\xdf\x26\x03\x06\xd3\x24\xec\x6e\x0b\xbe\xbd\xb4\x08\x62\x6f\xc3\x37\x1f\xc3\xc8\x28\x1f\x54\x2b\xbd\x45\xec\xb7\xe1\xab\xb4\x1c\xf1\x4e\xdd\x4b\x62\x58\xe9\x92\xc5\x25\x06\xa0\xc9\xca\x08\x7a\xca\x01\xa8\xb2\xb0\xda\x81\x01\x19\xe3\x97\xdb\x60\x3a\xd8\xe8\xea\x67\x39\x9d\x31\xe2\xee\xfe\xf1\xe6\x74\xff\x46\x26\xa3\xee\xd4\x7f\xd2\xc3\xd3\x55\x4a\xb5\xb0\x79\x00\x52\xdd\xcc\xa9\x2f\xaf\x11\x73\x6f\x0c\x80\xb1\x32\x79\xd7\xeb\x09\x60\x6c\x4b\x2d\xf6\x39\x77\x7f\xa3\xe4\xef\xe7\x9c\x95\x66\xb4\x08\xd7\x8d\xe1\x27\x00\x00\xff\xff\x50\x82\x1d\x25\xf2\x00\x00\x00") + +func testE2eTestingManifestsStatefulsetEtcdServiceYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetEtcdServiceYaml, + "test/e2e/testing-manifests/statefulset/etcd/service.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetEtcdServiceYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetEtcdServiceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/etcd/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetEtcdStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x58\x6d\x6f\xdb\xb6\x13\x7f\x9f\x4f\x71\x7f\xc7\x48\xed\xff\x2a\x3f\x24\x2b\x92\xaa\x48\x8b\x2c\x31\xd6\x00\x49\x6a\xc4\x5e\x0b\xac\xdb\x0c\x46\x3a\xc7\x5c\x28\x52\x25\x29\x27\x81\xeb\xef\x3e\x50\x92\x65\x3d\x50\x8e\x0b\x24\x7b\x35\xbf\xd8\x1a\xea\xf8\xbb\xe3\x3d\xfc\xee\x48\x12\xd2\xcf\x28\x15\x15\xdc\x05\x12\x86\xaa\x3b\xef\xef\xdc\x51\xee\xbb\x30\xd2\x44\xe3\x34\x62\x23\xd4\x3b\x01\x6a\xe2\x13\x4d\xdc\x1d\x00\x4e\x02\x74\x01\xb5\xe7\xef\x00\x30\x72\x83\x4c\x99\x65\x30\xdb\xd3\x75\x15\xa2\x67\xd6\x14\xca\x39\xf5\xf0\x2a\xbf\x43\x62\xc8\xa8\x47\x94\x0b\x07\xb1\x04\x43\x4f\x0b\x99\x20\x04\x44\x7b\xb3\x8b\x1c\x64\x1e\x14\x40\x63\x10\x32\xa2\x31\x15\xce\xd9\x64\x7e\x05\xbb\xcc\x8f\x15\x80\x8a\x50\x00\x2b\x1b\xcd\xcf\x13\x5c\x13\xca\x51\x66\xd2\x4e\x15\x0e\x80\x06\xe4\x16\x5d\xb8\x3b\x52\x9d\x5b\x4f\x76\xa8\xe8\x9a\xcf\xee\x41\x67\xbf\xb3\xff\x73\x51\x6a\x18\x31\x36\x14\x8c\x7a\x8f\x2e\x9c\xb0\x7b\xf2\xa8\xb2\xef\xa1\x90\x3a\x67\x95\xb3\xd6\x3e\x14\x52\xbb\xb0\x7f\x70\xd4\xcb\xbe\xae\x8e\x15\x22\xca\x4d\x5b\x0e\xdf\x56\xb6\x78\x8c\x22\xd7\xd9\xb2\x44\x25\x22\xe9\x61\x4e\xb5\x59\xfc\x16\xa1\xd2\x85\x35\x00\x2f\x8c\x5c\xe8\xf7\x7a\x41\x61\x35\xc0\x40\xc8\x47\x17\xde\xf4\xf7\x2f\x69\xf6\x05\xf9\x3c\x7f\x96\x44\xf5\xf9\xd5\xf9\xf8\xfc\xe4\x62\x72\x7a\xf1\xdb\x68\x3c\xb8\x9e\x8c\xce\x7f\x1f\xe4\xb0\xe6\x84\x45\xe8\x42\xe3\xa0\x51\xd9\x39\x1a\x8c\x27\x57\x27\x97\x16\xe9\x42\x24\xe6\x82\x45\x01\x5e\x8a\x88\x17\x5d\x99\x80\x98\xac\xf0\xa9\xcc\x61\x04\x46\x72\x48\xf4\xcc\x85\xee\x9c\xc8\xae\x8c\x78\xb7\x00\xc8\xe8\x14\xbd\x47\x8f\x61\xde\x13\xa1\xc4\x91\x16\x61\xd1\x39\xf8\xb0\xce\x9b\xcc\x61\x22\x08\x08\xf7\xcb\xcb\xc6\xa2\x46\xf7\x86\xf2\xae\x9a\x35\x6c\xdf\x1c\xf4\x6c\xeb\xdf\x2b\x6b\x00\x83\xe1\xe8\xb8\x51\x15\x06\x98\x0a\x09\x14\x28\x87\x66\x4b\xe1\x37\xe8\x41\xb3\xd5\x6a\x2e\x6c\x11\x58\x82\x03\xfd\x76\xbb\xfd\x0e\x7c\x61\x01\xca\xb4\x34\x17\x83\xe1\x68\x19\xff\xd7\xfd\xe9\xf5\x72\xa6\x75\xe8\x76\xbb\xcd\xc5\x2a\x36\x4b\xa7\xb9\xa0\xcb\x4e\x6e\xc1\x35\x09\x68\x33\xce\x17\x1c\x77\x2c\xeb\x1f\x3f\x8d\xc6\x66\xe7\x71\xb3\x35\x13\x4a\x9b\xb0\xb5\x6d\x72\x01\x06\x37\x28\x27\x33\xa2\x66\xad\x36\x2c\x6a\xac\x36\x91\xf4\x34\x4b\xa5\x81\x51\xa5\xe1\x3b\xdc\x4a\x0c\x21\x33\x7e\xa5\xb1\x6c\xf7\x51\x0f\xbe\x83\x17\x69\x70\xfc\x57\xee\x2b\x70\xa6\xfd\xf5\xdf\x5f\xe3\xbf\x2d\x4a\x97\x36\x5b\xd1\x9b\x09\x68\x5c\x63\x20\xe6\x94\xdf\x42\x4e\x25\x4c\xa5\x08\x62\x2b\xc1\x63\x91\xd2\x28\x1b\x36\x80\xc1\xf8\xf4\xec\x74\x7c\x31\x19\x5c\x9d\x0d\x3f\x9d\x5f\x8d\x8f\x93\x40\x94\x8f\x27\x8d\x06\x84\x66\x2b\xe7\x9c\xb6\x05\x8e\x4e\xe1\x2b\x34\x3f\x80\x13\x67\xc5\x9f\xef\x40\xcf\x90\xd7\x78\x70\x17\xae\x13\x54\x9c\xa3\x7c\xd4\x33\x73\x00\xa1\x67\x28\xef\xa9\x42\xb3\x71\x65\x38\xdc\x53\xc6\x80\x0b\x60\x82\xdf\xa2\x04\xe5\x11\x86\x4e\x14\xd6\xe0\xca\x00\x1c\x39\x2d\xd6\x5c\xf7\xff\xb6\x2c\x5e\x33\x8a\xa5\x98\xec\x65\x54\x2d\xa0\x72\xe9\x3c\x9d\x66\xbb\xa0\xb4\x90\xb8\xf2\x2d\xf5\x81\x72\x2d\x60\xf8\xf9\x34\x2e\x2c\xd3\x6d\xe4\xda\xf1\x21\x23\x1e\x06\x79\x56\x4d\x0c\x66\xa6\x89\x4d\x12\x31\x6b\x9e\xde\xcf\x28\x43\xf8\x9f\x35\x53\xf7\xde\x77\x7d\x9c\x77\x79\xc4\x98\xa9\x4c\x50\x0c\x31\x84\xfe\xbb\xa4\x78\xca\x48\x2f\x9b\xeb\xf0\xbe\x14\xab\x34\xc7\xa8\x5f\x35\xe4\x81\x6a\xe8\x15\x96\x4b\x65\x81\xa1\xb2\x3a\xa3\x86\xca\x9e\x91\xc8\x9e\x97\xc6\xec\x71\x30\xd5\x9e\xa8\xd8\xe4\x83\xa7\x08\xec\x5f\xa4\xae\x65\x39\xf3\x25\x3a\x7f\x0b\xca\x4d\xad\x93\xa9\xc9\xf3\x29\xa1\x2c\x92\xf8\xa1\x20\x17\xd3\x88\x83\xa5\xbc\xf0\x71\x4a\x22\xa6\x3b\x31\xa9\xd5\x71\xcb\x8a\x11\x33\x35\xb1\x74\x72\xd4\xaa\x9b\xb3\x54\x3b\x6e\xb6\x3c\xa2\xeb\x12\xd1\xd2\x27\xb2\xa3\xa4\x18\xd5\x8c\xab\x30\x6b\x0b\x43\xd5\x2e\x7b\x3f\x0a\x7d\xa2\x11\x9a\x8b\x4c\xd9\x72\x9b\x28\x58\x4a\x03\xbd\xe4\xac\x8e\x63\x38\xa7\xd0\x0b\xfe\xb0\x66\xac\xe3\x98\xd0\x23\x77\xcc\xa0\xe7\x44\x92\xa9\xad\xe2\xff\x04\x58\x32\x02\x6e\x09\x77\xf8\xf6\x75\x2a\xd3\xdf\x3f\xec\xf4\x3a\xbd\x4e\x3f\x5e\xad\x55\x42\xfc\x39\x4a\x4d\x15\xfe\xa8\x9e\x5a\x44\x33\xb8\x39\x3e\x95\x1b\x92\xad\xb0\x73\x4a\xcb\x39\x6d\x44\x1c\xa3\xed\xfc\xac\xf0\x25\x59\x3a\x5e\x5b\xe5\xbe\x71\x9b\x8b\xdd\xcc\xc6\x4a\x71\x10\xdf\x8f\x0b\x03\x38\xde\xaf\xf2\x43\x0b\xc3\x7a\x4a\x9b\x0f\xab\x7e\xd8\x22\x4a\x45\x41\x2c\xca\x18\x50\x4e\x35\x25\x0c\x42\xe1\x2b\x20\x12\x81\xcc\x09\x65\xe4\x86\x61\xbb\x5a\x54\x8d\xc4\x2f\xe7\x67\xcb\x06\x38\xb7\x26\x4b\xec\x64\x57\x5b\x5e\x0f\xe6\x2a\x51\x97\xdc\xb6\x32\x49\xcf\x41\x98\x44\xe2\x3f\x9a\x33\xa2\xff\xa1\x22\x77\x39\xb8\xfc\x65\x70\x3d\xf9\x78\x32\xfa\x78\xfc\xc4\x94\x91\x90\x03\x37\x47\xc9\xed\x5a\x36\x36\x8e\x1b\xbb\xf1\x40\x91\xda\x62\x70\x13\xaf\x2a\xb8\x89\x74\xdc\x05\x94\x08\x10\x24\x12\x25\x78\x52\x46\x86\x98\xb0\xda\x82\xd2\x48\xa9\x18\x2f\x1d\xfa\x0d\x20\x70\xa1\xe1\x06\xc1\x93\x48\x34\xfa\xaf\xe1\x1e\xc1\x23\x7c\x35\x39\xad\xb5\xd7\x21\x72\x1f\x24\x6a\x49\x71\x8e\x71\xfc\x8d\x91\x56\xd9\x9a\xd1\xac\xe0\x8c\x6a\xa3\xa3\xd5\xd8\x24\x54\x79\x92\x24\xdd\x3a\xe5\xaa\x2c\x59\xd2\x48\x7c\xbf\xc0\x2e\xdb\x35\x8d\xb8\xbf\x34\xfe\x32\x99\x33\x69\x54\x7a\x3e\xc7\xfb\x74\x96\x99\x20\x9f\xab\xaa\xb1\xd9\x64\xc9\xf1\x89\xc9\x32\x39\xd6\xe0\x81\x9a\x9a\xb1\x5d\x10\x92\x11\xb1\x3c\x21\x96\x2d\xb0\x42\x9b\xf9\xa3\x3a\x9c\xdb\x9c\x5b\xed\x26\x4f\x29\x48\xae\xca\x3f\xea\x97\xe2\x20\x08\x7b\x96\x30\xff\xd7\x19\x5e\xac\x33\xd4\xee\x4d\x49\x39\x67\xd5\xf3\xb8\x72\x85\xbb\x6a\x05\xcd\x45\x5c\x50\x25\x12\xaf\x8f\x6b\x69\xbf\xa3\x74\x32\x7d\xd8\x50\x26\xa3\xf1\xc9\x78\xb0\xdc\xd8\xfd\x9e\x69\x80\x4e\xee\x2a\x5a\x46\x58\x3b\x5f\x27\x65\xfd\x85\xc4\x65\x1d\xeb\xdd\x34\x56\x9b\xbe\xe9\x19\x4a\x8f\x42\x3b\x05\x84\x06\xc5\xf9\x02\x7d\x70\x3c\xe8\x6f\xc6\x7a\x0f\xd9\x6d\x09\xf6\xf6\xe0\x46\x22\xb9\xb3\x82\xa6\xd7\xa8\x6a\x6d\x57\xc6\xf9\xea\x23\xc5\x70\x30\xb8\xae\xdc\x51\x9e\xc9\xbd\x29\x76\x73\x11\xff\x63\x99\xfe\xdf\xdc\x50\xca\xe7\x3e\xde\xee\xca\x72\xd4\x6b\x3c\x71\x9c\xcd\xbc\xb4\x0b\x75\xa3\xf3\x0f\xb2\xd5\x4b\x54\xda\xb3\xb1\xdf\x8b\x33\xdf\xf3\xb2\x5e\x95\x1d\xb4\xb8\xc3\x64\x1c\xca\x96\xfa\xdb\x6c\x84\x55\xa6\x6d\xa5\x25\xe1\x20\x33\x80\xd8\xa4\xb7\x9b\xcf\x93\xc7\xd9\x53\x46\x68\x30\x4e\x5f\xec\xe3\x47\x5a\xa7\xe6\xc9\x3e\xff\x5c\x9b\x7f\x95\x27\x9e\x87\x4a\x5d\x0a\x1f\x0b\x6f\xbc\x8d\x6b\x24\xfe\x17\x49\x35\x7e\xe2\x1e\xae\x72\xdf\xf2\xbc\x6d\x7b\xdc\xde\x85\x28\x54\x5a\x22\x09\x40\xa2\x27\x82\x00\xb9\x8f\x3e\x04\xe4\x01\xa8\x82\xc3\x5e\xef\x32\x27\xac\xb4\x90\xf1\x8b\x7f\xff\x57\xba\xf3\x4f\x00\x00\x00\xff\xff\x47\x5f\x27\x5d\x29\x19\x00\x00") + +func testE2eTestingManifestsStatefulsetEtcdStatefulsetYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetEtcdStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/etcd/statefulset.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetEtcdStatefulsetYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetEtcdStatefulsetYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/etcd/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetEtcdTesterYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\xc1\x4e\xc3\x30\x10\x44\xef\xf9\x8a\xfd\x81\xb4\xa5\x5c\x2a\xdf\x90\x2a\x71\xe1\x10\x09\x89\xfb\xd6\x19\x1a\xab\x1b\xdb\xf2\x6e\x8b\xc2\xd7\xa3\x94\xd2\xba\xc0\x1c\x3d\x7e\xb3\x33\x9c\xc3\x1b\x8a\x86\x14\x1d\x71\xce\xba\x3c\x3d\x34\x87\x10\x7b\x47\x5b\x64\x49\xd3\x88\x68\xcd\x08\xe3\x9e\x8d\x5d\x43\x14\x79\x84\x23\x98\xef\x5b\x83\x5a\xab\x28\x27\x94\x46\x33\xfc\x6c\x17\x64\x09\x9e\xd5\xd1\x63\x43\xa4\x10\x78\x4b\x65\x76\x88\x46\x36\x3f\xbc\xf0\x0e\xa2\xdf\x0f\x34\x9f\x74\x54\xe7\x10\x19\xc6\x2c\x6c\xb8\x30\xd5\xe9\x59\x72\x87\xff\x1b\x40\xf4\x53\x66\x96\x4f\xd1\x38\x44\x94\x2b\xd4\x5e\x36\xfc\xa6\x66\x85\x91\xf7\x70\x74\xd8\xe8\x62\xef\xcb\x22\xa4\xe5\x79\xa9\x1a\x1b\xde\x8f\xa2\xb0\x16\x6b\x9c\x97\xbb\xd5\x62\x75\xcf\x75\x47\x91\x2e\x49\xf0\x93\xa3\x27\xf9\xe0\x49\xaf\x7e\x4e\xc5\xaa\xd6\xed\xad\x56\x97\x8a\x39\xda\xac\x36\xb7\xb0\x02\xee\x43\x84\x6a\x57\xd2\x0e\x37\x8a\x68\x30\xcb\xcf\xb0\xfa\x89\x28\xb3\x0d\x8e\x96\x03\x58\x6c\xf8\xbc\xb7\xfe\x86\x13\x85\x18\x2c\xb0\x6c\x21\x3c\xbd\xc2\xa7\xd8\xab\xa3\x75\xf5\x21\xa3\x84\xd4\x57\x56\xf3\x15\x00\x00\xff\xff\x5f\xc9\x70\x5d\x26\x02\x00\x00") + +func testE2eTestingManifestsStatefulsetEtcdTesterYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetEtcdTesterYaml, + "test/e2e/testing-manifests/statefulset/etcd/tester.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetEtcdTesterYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetEtcdTesterYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/etcd/tester.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetMysqlGaleraServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8e\x31\x4b\xc4\x40\x10\x85\xfb\xfd\x15\x0f\xae\x13\x0c\xca\x81\xc5\x76\x07\x36\x36\x41\x3c\xb0\x9f\xdb\x7d\x7a\xc1\x4d\x76\x9d\x99\x04\xee\xdf\x4b\x12\xbb\xeb\x66\xe6\x7d\xf3\xf1\x0e\x38\xe1\x4a\xc9\x85\x66\x30\xea\x32\x24\xc2\x2b\x92\x52\x9c\x78\xed\xcf\x50\xa6\xaa\xd9\x82\xb4\xe1\x93\x6a\x43\x9d\x22\x96\xe7\xf0\x33\x4c\x39\xe2\xbc\xbf\x84\x91\x2e\x59\x5c\x62\x00\x26\x19\x19\xf1\x2d\x85\x2a\x01\x28\x72\x61\xb1\x35\x00\xa4\xb5\x88\xf1\x66\xbf\x25\x58\x63\x5a\x8f\xad\xaa\x6f\xe9\xe3\x36\x46\x1c\x8f\x4f\x2f\x1b\xbc\x7b\x76\x1a\x38\xe0\xa1\x5b\x9d\xa2\x5d\xe6\x97\xcc\xc5\x3b\x5b\x52\x97\xca\x6c\x4e\xed\x4a\x4d\xb2\x62\xff\xfb\xdb\x7b\x44\x5f\x27\x06\xc0\x58\x98\xbc\xea\x5d\x03\xa0\xcd\x97\x32\xd8\xb5\xaf\xfe\x41\xc9\xb7\x53\xce\x4a\x33\x5a\x84\xeb\xcc\xf0\x17\x00\x00\xff\xff\xf3\xa7\x43\xb4\x1d\x01\x00\x00") + +func testE2eTestingManifestsStatefulsetMysqlGaleraServiceYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetMysqlGaleraServiceYaml, + "test/e2e/testing-manifests/statefulset/mysql-galera/service.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetMysqlGaleraServiceYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetMysqlGaleraServiceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/mysql-galera/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetMysqlGaleraStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x55\x51\x6f\xe3\x36\x0c\x7e\xcf\xaf\x20\xbc\x87\x7b\x52\xdc\x5c\x7b\xb7\x83\x86\x3c\x14\xed\x6d\x18\xb0\x5e\x83\x6b\xb1\x3d\x0c\xc3\xc0\xc8\x74\xac\x8b\x2c\xf9\x44\x39\x5d\x36\xec\xbf\x0f\x76\x1c\x5b\xb6\xdb\x62\x7b\x9b\x9f\x0c\x92\x1f\xf9\xf1\x13\x29\x61\xa5\x7f\x26\xcf\xda\x59\x09\x58\x55\x9c\x1e\x56\x8b\xbd\xb6\x99\x84\x87\x80\x81\xf2\xda\x3c\x50\x58\x94\x14\x30\xc3\x80\x72\x01\x60\xb1\x24\x09\xe5\x91\xbf\x9a\x05\x57\xa4\x1a\x1b\x93\x3f\x68\x45\x9f\x5a\x57\xb2\x43\x43\x1e\x93\x05\x80\xa7\xca\x68\x85\x2c\xe1\xb2\x8d\x32\xa4\x82\xf3\x0d\x02\xa0\xc4\xa0\x8a\x9f\x70\x4b\x86\x4f\x06\x68\x08\x9c\x33\x03\x04\x2a\x2b\x83\x81\xba\xe8\x88\x41\xf3\x99\x11\x70\x02\x05\x38\x13\x6b\x3e\x6d\x75\xb8\x71\x36\xa0\xb6\xe4\x7b\x88\xe8\x1a\xd1\x96\x03\x1a\xd3\x27\xd2\x25\xee\x48\xc2\xfe\x03\x2f\x77\xca\x2f\xb5\x4b\x4f\xed\x88\x2e\x50\x5e\x2c\x57\xe3\xe0\x4d\x6d\xcc\xc6\x19\xad\x8e\x12\xae\xcd\x13\x1e\x79\x60\xe5\x77\x11\x47\x01\x89\x10\x4f\xce\xef\x45\xa6\xfd\x3a\x3d\xff\x25\x7d\xc0\xc1\x99\xba\xa4\x3b\x57\xdb\x30\x82\x9d\x98\x36\xf1\x99\xf6\xbd\x1d\xa0\x6c\x22\x37\x18\x0a\x09\xc9\x33\xe9\xce\x40\xe5\x6c\xae\x77\x2f\xe1\x28\xa8\xb4\x15\x2e\x99\x28\xb3\x75\x2e\x70\xf0\x58\x4d\xb5\xc9\x68\xab\xd1\xca\x2f\xc4\xac\xa9\x77\x2a\x57\x96\x68\xb3\x51\xbb\x3d\xa9\xb4\x22\xf2\x22\xd7\x36\xa3\x88\xe0\x54\x1e\xe1\xac\xe0\x80\x3e\xac\x23\xe4\xd9\xb6\xe4\x22\x19\x49\xd9\x0d\xdd\x7a\x18\xb7\xd3\x47\xf6\x30\x17\x6f\x73\x7f\xfb\xfb\xa7\xeb\xbb\x8f\x0f\x9b\xeb\x9b\x8f\x91\x14\x07\x34\x35\x7d\xef\x5d\x29\x23\x23\x40\xae\xc9\x64\x9f\x29\x1f\x5b\x9b\x31\x1b\xd6\xe5\xb0\x9a\x38\x5b\xd0\x49\xd6\xf3\xb8\x2e\x9b\xea\x5c\xa1\xa2\xff\xd9\x21\xab\x17\x17\x62\x58\x22\x78\x76\x1d\x5a\xbf\x38\x89\x2e\xe9\xed\xd0\x58\xe5\xfc\xb8\xa3\xbe\xc6\xc6\xf9\x20\xe1\xf2\xf2\xe2\x7d\xc4\xef\xb9\x6a\x33\xcc\xd5\xd5\xd5\xd5\x0c\xc3\x1c\x5e\x41\xbc\x7b\xff\xed\x0c\xd1\xdd\x43\x41\x3b\xfb\x2a\xf2\xc3\x0c\xa9\xa3\x5a\xb3\x71\x15\x19\xe5\x58\x9b\xc0\x22\xd7\x86\xd6\x83\xca\x69\x79\xec\x14\x5a\x2a\x9b\x8f\x20\x35\x93\x5f\x7b\xe7\x86\xb4\x9e\x30\xd3\x96\x98\x37\xde\x6d\x29\x9e\xb8\x6f\xe0\xf1\xfe\xf6\x5e\xc2\x8f\x39\x64\x4e\xed\xc9\x03\xfd\x41\x0a\x34\xc3\xb6\xde\xed\x8e\xf0\xa5\xe6\x00\x35\xd3\xfc\x78\x0a\x42\x13\x8a\x3f\xe5\x6a\x79\x11\xe5\x6b\xd0\xe3\x89\x9e\x2d\xed\x89\x26\x17\x13\x83\x50\x13\x43\xd2\xd6\x01\x51\x43\xd3\x0b\x08\x82\x37\x5c\xb8\x27\x68\x86\x7e\x8b\x4c\xfc\xdd\x9b\x24\x82\x34\x77\xb0\x46\x73\x4b\x06\x8f\x0f\xa4\x9c\xcd\x58\xc2\xea\x5d\x14\x11\x74\x49\xae\x0e\xbd\x33\xf6\x71\xad\x14\x31\x3f\x16\x9e\xb8\x70\x26\x93\xf0\xf6\x5f\xae\x53\x43\xe7\xc5\x75\x4a\x0f\xe8\x53\xa3\xb7\xe9\x7f\x5a\xa6\xe1\x94\x17\x31\x83\xd9\x1e\x4d\x72\x50\x59\x85\xe3\xad\xf6\x12\xfe\xfa\x7b\x12\x39\xdd\xf9\x49\xe8\x29\xff\x8d\x41\x5d\x3e\x76\x6f\x62\x5b\x4c\xcc\x1e\xc5\x79\xcf\xf1\x3b\x88\xad\x88\x77\x2e\x23\x96\xf0\x2b\x24\x9f\x09\xb3\x5f\xbc\x0e\x74\x6f\x15\x25\xf0\x5b\x17\xe6\x89\x5d\xed\x15\x45\x6a\x7a\xfa\x5a\x13\xc7\xfa\x02\x70\x70\xbe\xbd\x1a\x56\x3f\xe8\xc5\x3f\x01\x00\x00\xff\xff\x3c\xf4\xc8\x50\x46\x08\x00\x00") + +func testE2eTestingManifestsStatefulsetMysqlGaleraStatefulsetYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetMysqlGaleraStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/mysql-galera/statefulset.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetMysqlGaleraStatefulsetYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetMysqlGaleraStatefulsetYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/mysql-galera/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetMysqlUpgradeConfigmapYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xca\xb1\xae\xc2\x30\x0c\x85\xe1\xdd\x4f\x71\x5e\xa0\x57\xba\x6b\x56\x66\x56\x16\xc4\xe0\x12\xb7\x8a\x70\x9c\x10\x87\x4a\x95\x78\x78\x44\xa4\x8e\x8c\xe7\xfc\x1f\xd7\x74\x91\xe6\xa9\x58\xc0\xf6\x4f\x8f\x64\x31\xe0\x54\x6c\x49\xeb\x99\x2b\x65\xe9\x1c\xb9\x73\x20\xc0\x38\x4b\x40\xde\xfd\xa9\x04\x28\xcf\xa2\xfe\xfd\x01\xae\xf5\x08\x07\xce\xec\x5d\xda\xdf\xdd\x96\x80\xf7\x40\xd7\x01\xe2\x6d\x0c\x2d\xeb\x34\x27\x23\xc0\x95\x37\xf9\xe9\xfc\x55\xa5\x4d\x4d\x38\x4e\xc5\x74\xa7\x4f\x00\x00\x00\xff\xff\xd1\x8c\x7f\x5b\xaf\x00\x00\x00") + +func testE2eTestingManifestsStatefulsetMysqlUpgradeConfigmapYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetMysqlUpgradeConfigmapYaml, + "test/e2e/testing-manifests/statefulset/mysql-upgrade/configmap.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetMysqlUpgradeConfigmapYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetMysqlUpgradeConfigmapYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/mysql-upgrade/configmap.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetMysqlUpgradeServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x8e\xb1\x8a\x02\x31\x14\x45\xfb\xf7\x15\xf7\x07\x02\xbb\x0c\x6c\x91\x72\x3b\x41\x44\x10\xec\x9f\xc9\x2d\x82\x99\x24\x26\x71\x60\xfe\x5e\x46\xb1\x18\xed\xc4\xf6\x1e\xee\xe1\x68\x09\x47\xd6\x16\x72\xb2\x98\x7e\xe5\x1c\x92\xb7\x38\xb0\x4e\xc1\x51\x46\x76\xf5\xda\xd5\x0a\x90\x74\xa4\xc5\x38\xb7\x4b\x14\x20\xea\x89\xb1\x2d\x3b\xa0\xa5\x3c\x41\x2b\x74\xcb\x58\x72\xed\x77\x6a\x5e\x7e\x0f\x64\x31\x0c\x3f\x7f\x02\xb8\x78\x6d\x9d\x75\xb3\xb7\xd8\xe5\x44\x01\x1a\x23\x5d\xcf\xf5\x4d\x6d\x8c\x91\x4f\x62\x4d\xa5\xfa\xef\x15\xaf\xfb\x56\x2a\xa0\xcf\x85\x16\xdb\xac\xfe\x5f\xa3\x26\xc7\x2a\xb7\x00\x00\x00\xff\xff\x8b\xeb\xb7\xc6\x60\x01\x00\x00") + +func testE2eTestingManifestsStatefulsetMysqlUpgradeServiceYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetMysqlUpgradeServiceYaml, + "test/e2e/testing-manifests/statefulset/mysql-upgrade/service.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetMysqlUpgradeServiceYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetMysqlUpgradeServiceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/mysql-upgrade/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetMysqlUpgradeStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x58\xef\x6e\xdb\x36\x10\xff\xee\xa7\x38\x18\x41\x63\xaf\xa5\x6d\xb5\xc8\x8a\xa9\x75\x07\xd7\x71\x93\x02\x76\x9c\xd9\x5e\x83\xc2\xf3\x5c\x5a\x3a\xdb\x44\x29\x52\x21\x29\x23\x59\xd3\x3d\xfb\x40\xc9\x7f\x28\x47\x4e\x8a\x0d\x1d\xb0\xe9\x83\x20\x1d\xef\x8e\xbf\x3b\x1e\xef\x8e\xa4\x31\xfb\x80\x4a\x33\x29\x7c\xa0\x71\xac\xeb\x2b\xaf\xf4\x99\x89\xd0\x87\xa1\xa1\x06\xe7\x09\x1f\xa2\x29\x45\x68\x68\x48\x0d\xf5\x4b\x00\x82\x46\xe8\x43\x74\xab\xaf\x79\x49\xc7\x18\x58\x9a\x46\xb5\x62\x01\x5e\x38\x43\x00\x0a\x63\xce\x02\xaa\x7d\x78\x91\xb2\x70\x0c\x8c\x54\x96\x1d\x20\xa2\x26\x58\x76\xe9\x0c\xb9\xce\x08\x60\x67\xdf\xc9\x1a\x8c\x62\x4e\x0d\xae\xb9\x9d\xe9\xed\xc3\x73\x82\x7b\xa2\x00\x1b\x54\xf6\x61\x82\x99\xb6\x14\x86\x32\x81\x6a\x2b\x42\xd6\x56\xd8\x51\xb2\x13\x4c\x05\x22\xba\xd8\x18\xe1\x9f\xd4\x5e\x6e\x07\x02\x19\x45\x54\x84\xbb\x59\x09\xcc\xa8\x5e\x3a\xbf\x65\x12\x94\x9d\xdf\xbb\xed\xb7\xb5\xde\x00\xc1\x1b\x87\x32\x1e\xc3\xa7\xa5\xd4\xc6\x02\xf9\x04\xcd\x3f\x81\x54\xc6\x0d\xf2\xd3\xe4\x69\xf5\x08\x26\x13\xb8\xbb\x03\xbc\x61\x06\x3c\x47\x44\xaa\x90\x09\xca\x9b\x47\x5f\xde\xb6\x86\xe7\xd3\x41\xa7\xd7\x1a\xb5\xcf\xc7\xde\xe4\xab\xc3\x84\xc1\x52\xc2\x38\x85\x1f\x4e\xe0\x0d\xd4\x23\x61\xea\x81\x14\xf3\x5a\x58\xb7\xcb\x84\x8a\xb0\xb0\x16\x88\xf9\xbe\xcc\x76\xb0\x79\x54\xa9\x78\x8d\x06\x3c\x85\xa3\xf5\x8c\xd5\x2a\xbc\xf9\x36\x4d\x6c\x6e\x0d\xdb\xc8\x01\xc1\x6b\x68\xc0\x64\xf2\x0a\xcc\x12\x85\xc3\x07\x10\xc4\x3b\x85\x6c\x41\x22\x1a\xd7\x23\xaa\x0d\x2a\xab\x31\x37\x97\x0b\x94\x6b\x7c\x4c\x8b\xe6\x74\x85\x0f\x29\x99\xb3\xed\xcf\x4a\xf2\x24\xc2\x9e\x4c\x84\xd1\xee\xc2\x66\xd1\x61\x45\x1d\xb9\xc8\xb2\x5d\x52\xb3\xf4\x5d\xcd\x85\x52\x19\x94\x47\x64\x73\x4c\x5b\x69\x2e\x05\x16\x87\xe4\x22\x50\x35\x26\xeb\x0b\x29\x17\x1c\x89\xa6\x51\xcc\x51\xd7\x6f\x8c\xa2\x33\x1a\x7c\x4e\x62\xdf\xab\x35\xbe\x63\xb4\x92\x10\xea\x2b\xaa\xea\x9c\xcd\xea\x29\xbe\xec\x6d\x83\xf5\xc9\x93\x2c\x58\x1b\xff\x42\x7c\x17\x85\x57\x21\x00\x11\x50\x03\x84\x28\x0c\x56\x44\x0a\x7e\x9b\x6d\x69\x72\x54\xa9\x6c\xe4\x89\x57\xad\xd6\x32\x23\x5e\xbc\x68\xbc\x84\x3b\xb8\x99\x69\xa3\x90\x46\x40\x6e\x80\xb4\xf7\xec\x75\x74\xef\x9c\x0e\x84\xc4\x0a\x63\xaa\x10\x08\x31\x54\x2d\xd0\x90\x90\xa9\xe6\x01\xd1\x87\x03\xce\xe6\xb8\x03\x41\x73\x08\x89\x4e\x66\x19\x47\x7e\xe0\x1b\x42\x18\x4d\xb0\x5e\xc7\x5c\x20\x07\x07\x93\xe5\xc3\x79\xb2\xe6\x9d\x6c\xc7\x50\xac\xee\x1b\xd7\xfb\x38\xfc\xa5\x3b\x6d\x75\xbb\xfd\xab\x69\xa7\x77\x39\xfa\x38\xbd\x6c\x0d\x87\x57\xfd\xc1\xa9\x03\x70\x45\x79\x82\x3e\x94\xbd\x5d\x68\xc6\x52\x15\xf9\x6a\xdf\x11\x5b\xdc\x97\x52\x19\xdf\x2e\xe8\x8f\xff\x21\xaf\xdb\x6a\xa9\x65\xa2\x02\x74\x00\x5a\xe2\x75\x82\xda\xe4\x68\x36\xe9\x25\x7e\x6e\xe3\xd8\x0a\x19\x49\x75\xeb\x83\x77\xb6\x4b\x6e\x9c\xad\x50\xa0\xd6\x97\x4a\xce\xd0\xd5\x80\x37\xbb\xfa\xb8\x71\x5e\x96\x2d\x60\x5c\x4e\xc1\xd1\x30\x62\xa2\xfc\x0c\xca\x31\x13\x8b\xf2\xc4\x4d\xf0\x82\x19\x46\xf9\x29\x72\x7a\x3b\xc4\x40\x8a\xd0\xd6\x77\x77\xdf\x19\x16\xa1\x4c\xcc\x76\xf0\xc4\x31\x91\x86\xec\x6f\x22\xb2\x60\xc8\xd2\xbe\xbd\xe7\x2f\x6b\x8d\x5a\xa3\xe6\xa5\x24\xb4\xef\x61\xa7\xdb\x69\x8f\xc0\x7b\x1c\xe9\xc9\x03\x40\xbd\xbd\x78\xdf\x6d\xf2\x7f\x94\x89\x0f\xc4\x6f\x81\xf6\xa2\x20\xfe\x6e\xfd\x47\xb0\x9f\xce\x4b\xf7\xca\x38\x99\x3b\x28\xa7\x69\x5d\x9d\x32\x31\x97\xc5\x05\x3d\x5a\x1d\xe0\x0e\x96\x54\x2c\x70\x9a\x55\xf7\xa9\x91\x35\x7d\xcd\x6b\x2c\x2f\xac\xa2\xbd\xd9\x66\x4c\x70\xb9\x48\x15\xe4\xea\x7f\x11\x32\x87\xb7\x18\x9a\xad\x45\xb6\x1a\x14\xcb\xa4\xd5\xe9\xf7\x4a\xed\x87\x9f\xab\xe3\xb1\xaf\x63\x1a\xa0\x3f\x99\x3c\x4d\x09\x07\x6b\x55\x0a\xf9\x51\xbc\xeb\xd6\xaa\xdc\x3e\x6f\x5d\x9c\x75\xa0\xd7\x1a\x8e\x3a\x03\x18\xf5\xd7\x5f\xd3\x6e\xff\x6c\xfa\xee\x7d\xb7\xd3\x3c\xbe\x5f\xf3\x8e\x9f\xfd\x96\xd3\x94\x3d\x8e\xe0\x65\x7f\xb8\x5f\x2a\x9f\x4f\xbe\x96\xe1\xcd\x37\x78\x7c\xce\x0a\x97\xfb\x80\x60\xb1\x57\x33\xd3\xae\x28\x33\x4c\x2c\x60\x2e\x55\x96\x0d\x43\x30\x12\x66\x98\xee\xf6\x5b\xa8\xd0\x20\xc0\x38\xe5\x08\xa4\x10\x18\x18\x26\x85\xae\x96\x73\x9a\x12\x61\x18\xcf\xa4\x81\x2c\x61\xbb\xc3\x81\xa0\xb3\xb9\x5f\x41\x28\x41\x73\xc4\x18\x3c\xfb\x2d\xb0\x54\x80\xe7\x7d\xb6\xed\xd9\x1f\x76\xca\xf5\x11\xc4\xce\x09\x73\x25\xa3\xac\xbd\x82\x58\x6a\x66\x69\xe5\xfd\x00\x3e\x64\x7f\x21\x5d\x2a\xb6\xc8\x2b\xb8\x6f\xc0\xeb\xd7\x9d\xfe\x3b\x87\xe9\xa8\xf2\xfa\xa0\xae\xea\xb3\x52\xc1\x4a\x9f\xf7\x87\xa3\xe6\x71\xd6\xbb\x34\xb2\x6e\xe5\xb8\x90\xf1\xd7\x61\x67\xd0\x3c\x56\x52\x9a\xe2\xf1\x4d\xb5\x6d\x1e\x17\x8f\xb7\xfb\x17\x17\x9d\xf6\x68\x3a\xe8\x8c\x06\x1f\x9b\x5e\xe3\x95\xc3\x34\x1c\xb5\x06\x23\x18\x76\x5b\x1f\x3a\x2e\x39\x6f\x5b\x3e\xa6\x6c\x4a\xdf\xf4\x60\x9c\x69\x83\x02\x08\xf9\x8c\x18\x13\x19\xa7\xdf\x1a\x45\x98\x35\x66\x84\x44\xf4\x86\xd8\xf0\xd0\x4d\x2f\x6b\xc5\x48\x00\xf9\xe8\x2f\xe7\x5a\xae\xed\x47\x9a\x66\x48\xba\xf3\x09\xc9\x7a\xb7\xe6\xae\x89\x23\xb6\x01\x6d\x3a\xe1\x44\x12\x8d\xaa\x69\x7d\x54\xfe\x7f\x37\x07\x8d\x46\x54\xdc\x1f\x34\x1a\xbd\x4d\x87\x90\x19\x7e\xaf\xcd\xcb\xe1\xc3\x28\x36\xb7\xa7\x4c\xf9\xf0\xe5\x6b\x01\xdf\xde\x39\x27\x23\xf5\x68\xec\x42\xca\xb7\x6b\xd9\xa4\x6d\x4e\x59\x34\x5a\x9f\xf1\x53\x04\xe4\xde\x21\x7f\xcf\xff\xee\xa1\xde\xe6\x14\xad\x7b\x32\x44\x6d\x1b\x84\x01\xd2\xf0\x4a\x31\x83\x7d\x11\xe0\xb6\x07\xd0\x46\x2a\xba\xb0\x53\x69\x9d\x5d\x4c\x84\x38\xa7\x09\x37\xa5\x83\x3e\x2d\xf2\xe8\x5a\x8d\x75\xdd\x19\x2b\x11\x42\x4a\xee\x95\x49\x2c\x39\x0b\x6e\xeb\x2b\x6f\x86\x86\x6e\x6e\x4e\x2e\x65\x78\xca\xb4\x4a\x62\x9b\x63\xde\x26\xe1\x22\x7f\x83\xe2\x38\x84\xc4\xe1\xac\xe4\x5e\x67\xc4\xe1\x6c\xef\x6e\x25\x62\xa2\xb5\xa2\x8c\xd3\x19\x47\x1f\x9e\x97\xf2\x17\x29\xf7\xef\x51\x9c\xbb\x90\xbf\x02\x00\x00\xff\xff\x48\xaa\x29\x27\xdc\x11\x00\x00") + +func testE2eTestingManifestsStatefulsetMysqlUpgradeStatefulsetYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetMysqlUpgradeStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/mysql-upgrade/statefulset.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetMysqlUpgradeStatefulsetYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetMysqlUpgradeStatefulsetYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/mysql-upgrade/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetMysqlUpgradeTesterYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x52\xbb\x6e\x1b\x31\x10\xec\xef\x2b\xf6\x07\xa8\x87\xd3\x08\xec\x6c\x08\x48\xe3\x42\x80\x81\xf4\x7b\xe4\x40\xb7\x30\x8f\x64\xc8\xd5\x05\x97\xaf\x0f\xce\xb6\x64\x9e\xad\x2a\x5b\x72\x38\xcb\x19\xce\x70\x96\x5f\x28\x55\x52\xb4\xc4\x39\xd7\xed\xb4\xef\x5e\x25\x7a\x4b\x47\xe4\x90\xe6\x11\x51\xbb\x11\xca\x9e\x95\x6d\x47\x14\x79\x84\xa5\x71\xae\xbf\x83\x51\x54\x35\x15\x65\x42\xe9\x6a\x86\x5b\xf0\x82\x1c\xc4\x71\xb5\xf4\xa3\x23\xaa\x08\x70\x9a\xca\x82\x10\x8d\xac\x6e\x78\xe6\x1e\xa1\xbe\x1f\xd0\xf2\xa6\xa5\x76\x0f\x91\x62\xcc\x81\x15\x1f\x9c\xe6\xed\x65\xc2\x8a\x7e\x77\x01\xd1\x55\xcc\x32\x2e\x45\x65\x89\x28\x37\x92\xf9\x30\xf1\x95\xb5\x8c\x8c\x7c\x86\xa5\xd7\x43\xdd\x9c\x5d\xd9\x48\xda\xbe\x5b\xc5\x03\xde\xec\xda\xdd\x66\xbf\xbe\x7c\xba\x84\x70\x4a\x41\xdc\x6c\xe9\x31\xfc\xe1\xb9\xde\xf0\x9c\x8a\x36\x52\xcd\xa7\x96\x53\x2a\x6a\xe9\xb0\x3b\xec\x6e\x68\x01\x7b\x89\xa8\xf5\x54\x52\x8f\x4f\x16\xd1\xa0\x9a\x7f\x42\xdb\x23\xa2\xcc\x3a\x58\xda\x0e\xe0\xa0\xc3\xdf\x35\xf4\x7d\x39\x91\x44\x51\xe1\x70\x44\xe0\xf9\x05\x2e\x45\x5f\x2d\x3d\x34\x17\x32\x8a\x24\xdf\x40\xc6\x98\xae\xad\x47\x7e\x33\xb9\x9d\xf6\x3d\x94\xaf\x2d\x39\x25\x7f\x94\x5a\x2e\x59\x25\xc5\xa7\x8b\x3f\xe3\x5e\x5d\x96\x9f\x43\x31\xd9\xf7\xdd\x3a\xc1\xec\xfb\x75\x0e\xd7\xe4\x46\x89\x8f\x13\x4b\xe0\x3e\xc0\xd2\xfe\xbf\xaa\xf4\xd5\xc0\xad\xda\x2f\x28\x93\x38\xac\x84\xb6\xaa\xee\x74\xea\x7b\x63\xae\x4a\x9b\x90\xcd\xfa\xeb\xd7\x8a\xef\x35\x7d\xce\xb0\xf4\x9c\xd8\x3f\x71\xe0\xe8\x50\xba\x7f\x01\x00\x00\xff\xff\xb1\x05\xcf\x25\x90\x03\x00\x00") + +func testE2eTestingManifestsStatefulsetMysqlUpgradeTesterYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetMysqlUpgradeTesterYaml, + "test/e2e/testing-manifests/statefulset/mysql-upgrade/tester.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetMysqlUpgradeTesterYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetMysqlUpgradeTesterYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/mysql-upgrade/tester.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetNginxServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8c\x41\x0a\x02\x31\x10\x04\xef\xf3\x8a\xfe\x80\xa0\x37\x99\x1f\x78\x11\x41\xf0\x3e\x9b\x6d\x24\x98\x9d\x84\x24\xae\x3e\x5f\x36\xe2\xc5\x5b\x53\xd5\x94\x95\x78\x63\x6d\x31\xbb\x62\x3d\xc8\x23\xfa\xac\xb8\xb2\xae\x31\x50\x16\x76\x9b\xad\x9b\x0a\xe0\xb6\x50\xe1\xf7\xe8\x6f\x01\x92\x4d\x4c\x6d\xe3\x80\x95\xf2\x13\xad\x30\x6c\xb0\xe4\xda\x87\xdd\x8d\xa9\x38\xee\xc7\xf5\x1b\x79\x71\x12\x20\xa4\x67\xeb\xac\xa7\x8b\xe2\x9c\x9d\x02\x34\x26\x86\x9e\xeb\x7f\xf6\x13\x00\x00\xff\xff\x5f\xaa\x8f\x5a\xa4\x00\x00\x00") + +func testE2eTestingManifestsStatefulsetNginxServiceYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetNginxServiceYaml, + "test/e2e/testing-manifests/statefulset/nginx/service.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetNginxServiceYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetNginxServiceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/nginx/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetNginxStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xcd\x8e\xd3\x40\x10\x84\xef\xf3\x14\xad\xdc\x1d\x13\x10\x12\x9a\x2b\x07\x2e\x2c\xac\x58\x04\x07\xc4\xa1\x33\x2e\xe2\xd1\xce\x1f\xd3\xed\x84\xc7\x47\xe3\xb5\xb3\xde\x4d\x1f\x7b\xbe\xaa\x6a\x97\xb9\xf8\x1f\xa8\xe2\x73\xb2\xc4\xa5\x48\x7f\x3e\x1c\xa1\xfc\xd6\x3c\xfa\x34\x58\x7a\x50\x56\xfc\x99\xc2\x03\xd4\x44\x28\x0f\xac\x6c\x0d\x51\xe2\x08\x4b\x17\x1c\x8d\x14\xb8\xb6\x11\xd4\xb3\x77\xf8\x32\x3f\xec\xd2\xc9\xa7\x7f\x3b\x43\x54\x51\x82\x77\x2c\x96\xde\xcd\x50\x80\xd3\x5c\x9b\x80\x28\xb2\xba\xf1\x33\x1f\x11\xe4\x69\x41\xed\x04\x4b\xb3\xd8\x10\x29\x62\x09\xac\x58\xe8\x4d\x7c\x9b\xf0\x42\xf8\x4a\x4a\xb4\xde\xd5\xc6\xe5\xa4\xec\x13\xea\x15\xef\x96\x2f\x78\xe6\xdb\xf8\xc8\xa7\x75\x69\x0f\xfb\xc3\xfb\x8e\x43\xf1\x09\x57\xa0\xe4\xaa\x9b\xc8\xee\xd9\xf9\x3e\x57\xb5\xf4\xe1\xcd\xf5\x6d\xdb\xd1\xba\x39\xe7\x30\x45\xdc\xe5\x29\xbd\x74\x59\xc8\xcb\x65\xa3\x8e\x8d\xba\x67\x1d\x2d\xf5\x93\xd4\x5e\x46\xae\xe8\xe7\xd3\xfa\x51\x63\x30\xab\xdd\xc7\xc0\x3e\x7e\x5f\xaa\x9a\x6d\xbb\x9b\xae\x5e\x07\x70\x4a\x59\x59\x7d\x4e\x9b\x3b\x9e\xec\xf6\xed\xf7\xef\x1f\xa7\x23\x6a\x82\x42\xf6\x3e\xf7\xa2\xb9\xf2\x09\x9d\x0b\x2c\xb2\xf4\xd3\x89\xbb\xe9\x99\x9d\x83\xc8\x5d\x1e\x20\x96\x7e\xd1\xee\x1b\x78\xf8\x59\xbd\xe2\x6b\x72\xd8\xd1\xef\x05\xab\x90\x3c\x55\x87\x4d\x76\xc5\xdf\x09\xb2\x6d\x85\x68\x49\xb5\x74\xf8\xe4\xcd\xff\x00\x00\x00\xff\xff\x27\x2f\xbe\x99\xa8\x02\x00\x00") + +func testE2eTestingManifestsStatefulsetNginxStatefulsetYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetNginxStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/nginx/statefulset.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetNginxStatefulsetYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetNginxStatefulsetYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/nginx/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetRedisServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8d\x41\x4b\x03\x31\x10\x85\xef\xf9\x15\x0f\x7a\x13\x0c\x88\xa0\x98\x5b\xc1\x8b\x97\x45\x2c\x78\x9f\x26\x4f\x1a\x4c\x37\x61\x66\x76\xc1\x7f\x2f\xdd\xea\xa9\xb7\x99\xf7\xcd\x37\x6f\x87\x3d\x4e\x94\xd2\x68\x06\xa3\xae\x35\x13\xde\x91\x95\xe2\xc4\xeb\x74\x80\x32\x77\x2d\x16\x64\xd4\x4f\xaa\xd5\x3e\x27\xac\x0f\xe1\xbb\xce\x25\xe1\x70\x55\xc2\x99\x2e\x45\x5c\x52\x00\x66\x39\x33\x41\x59\xaa\x05\xa0\xc9\x91\xcd\x2e\x39\x20\x63\xfc\x03\x1b\xcc\x97\x70\x74\xf5\x8d\xde\x6f\x63\xc2\xd3\xe3\xf3\xcb\x76\x7c\x7d\x33\x48\x0d\xc0\x0e\x77\x71\x13\x63\xe1\x97\x2c\xcd\xa3\xad\x39\xe6\xb6\x98\x53\x63\xeb\x59\x5a\x00\xfe\xf6\xb7\xf7\x84\xa9\xcf\x0c\x80\xb1\x31\x7b\xd7\x9b\x7e\x60\x2c\xc7\x56\xed\x34\x75\xff\xa0\x94\x9f\x7d\x29\x4a\x33\x5a\x82\xeb\xc2\xf0\x1b\x00\x00\xff\xff\x74\x30\x5a\xc0\x1a\x01\x00\x00") + +func testE2eTestingManifestsStatefulsetRedisServiceYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetRedisServiceYaml, + "test/e2e/testing-manifests/statefulset/redis/service.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetRedisServiceYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetRedisServiceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/redis/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetRedisStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x55\x4d\x6f\xdb\x38\x10\xbd\xeb\x57\x0c\x84\x3d\xec\x1e\x64\xc1\x09\xb2\x8b\x25\xe0\x43\x90\x64\xf7\xd2\x24\x46\x5c\xb4\x87\xa2\x28\x68\x6a\x6c\xb3\xa1\x48\x96\x33\x72\x6a\x14\xfd\xef\x05\x25\x5b\xa6\x64\xb8\xcd\xb1\x3c\x09\x33\xf3\xde\x7c\xf0\x8d\x28\xbd\x7e\x87\x81\xb4\xb3\x02\xa4\xf7\x54\x6e\xa7\xd9\xb3\xb6\x95\x80\x05\x4b\xc6\x55\x63\x16\xc8\x59\x8d\x2c\x2b\xc9\x52\x64\x00\x56\xd6\x28\x20\x54\x19\x79\x54\xd1\x40\x18\xb6\x5a\xe1\x43\x6b\xcf\x03\x56\x9a\xf2\x0c\x20\xa0\x37\x5a\x49\x12\x70\xd9\x06\x19\x54\xec\x42\x04\x00\xd4\x92\xd5\xe6\x8d\x5c\xa2\xa1\xce\x00\x31\xb9\x80\x16\x9c\x01\x30\xd6\xde\x48\xc6\x7d\x74\x92\x3d\x1e\x33\x00\x8e\xa0\x00\x87\xba\xe2\xd1\x56\xf3\x8d\xb3\x2c\xb5\xc5\xd0\x43\x8a\x7d\x13\xda\x12\x4b\x63\x7a\x22\x5d\xcb\x35\x0a\x58\xab\x30\xd1\xae\x7c\x6e\x96\x18\x2c\x32\x52\x81\x17\x58\x30\x12\x17\x6d\x04\x95\x1e\x99\xca\x36\x63\xb1\xe7\xc0\x20\xa6\x93\x8b\x21\xd3\xbc\x31\x66\xee\x8c\x56\x3b\x01\xd7\xe6\x45\xee\xe8\x58\x72\x58\x27\x0d\x14\x90\x17\x07\xa2\x42\x5b\x76\xb3\xd2\x79\xce\x87\xfe\x17\x17\x9e\x8b\x4a\x87\x59\x79\xf8\x3a\x06\x6c\x9d\x69\x6a\xbc\x77\x8d\xe5\x01\x6d\xd7\xa6\xf3\xdc\xdb\x00\xea\x18\x35\x97\xbc\x11\x90\x8f\xd3\x74\xf1\x91\xbf\xd2\xe1\x1c\x66\x9c\xfe\x00\x5b\x3a\xc7\xc4\x41\xfa\xf1\x3c\x2b\x5c\x6a\x69\xc5\x67\x24\xd2\xd8\x3b\x95\xab\x6b\x69\xab\xc1\x14\x7a\xee\xd2\x23\x86\x62\xa5\x6d\x85\x49\x9b\xe3\xa9\x15\xce\x16\xc4\x32\xf0\x2c\x41\x1e\x6c\x13\xda\x0c\x27\xb8\xd7\xe9\xac\x57\x68\x77\xd0\x6e\x4f\x47\x36\x7f\xbc\xfd\xf4\x70\x7d\x7f\xb7\x98\x5f\xdf\xdc\x25\x83\xd8\x4a\xd3\xe0\x7f\xc1\xd5\x22\x31\x02\xac\x34\x9a\xea\x09\x57\x43\x6b\x54\xe6\x71\xbb\xb6\xd3\x91\xb3\x05\x75\x43\x3d\x28\x7c\x12\xb3\x93\x97\x0a\x7f\x8f\xab\x55\x67\x57\xe7\xb8\x6e\xbf\xbc\x68\xef\xc2\xb0\xf4\x9e\x75\xee\x02\x0b\xf8\xfb\xf2\x9f\x7f\x93\x82\x3a\xfe\x78\xff\x3f\x93\x4a\x6c\xaf\xdb\xc0\xfd\x1e\xc6\xdb\x4d\x20\x63\xa9\x8c\xe3\x27\xca\xd9\x55\xef\x0f\x28\x2b\x6d\x91\x68\x1e\xdc\x12\xd3\x5b\xc4\xaf\xc7\x9f\xc9\x99\x62\xba\x04\xb4\x19\x19\x0a\x35\x32\xe4\x27\x35\x2b\xa3\xa1\xd8\xc0\x1f\x7f\x6e\x1c\x71\xec\xfb\x2f\xf0\xda\xae\xf3\x04\x18\x7f\x60\x5a\x9a\x5b\x34\x72\xb7\x40\xe5\x6c\x45\x02\xa6\x57\x49\x04\xeb\x1a\x5d\xc3\xbd\xf3\xea\x95\xd2\x89\x7a\x3b\x2b\x85\x32\x7a\x5f\xaf\xb6\xf2\xe8\xe9\x92\x9e\xe8\x25\x85\x62\xed\x79\x77\xab\x83\x80\x6f\xdf\x47\x61\x63\x7d\x8e\x42\x3b\xf2\x1b\x23\x75\xfd\x76\xff\x44\xb4\x99\x8a\x93\x37\xe2\xb4\xc7\xf4\x59\x90\x4a\x21\xd1\xbd\xab\x90\x04\x7c\x80\xfc\x09\x65\xf5\x3e\x68\xc6\x47\xab\x30\x87\x8f\xd9\x41\x16\xe4\x9a\xa0\x30\x99\x5e\xc0\x2f\x0d\x52\x3a\x4f\x00\x62\x17\x5a\xfd\x4f\xff\xd7\xd9\x8f\x00\x00\x00\xff\xff\x4e\x22\x9b\xab\x51\x07\x00\x00") + +func testE2eTestingManifestsStatefulsetRedisStatefulsetYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetRedisStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/redis/statefulset.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetRedisStatefulsetYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetRedisStatefulsetYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/redis/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetZookeeperServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x8e\xb1\x6a\x03\x31\x10\x44\x7b\x7d\xc5\x80\xbb\x80\x0f\x92\x34\x87\x3a\x43\x9a\x34\x47\x88\x21\xfd\x5a\x9a\x60\x71\xf2\x49\xec\xea\x0e\xe2\xaf\x0f\x96\x53\xc4\xdd\xee\x7b\xbb\xc3\xec\x70\xc0\x99\x12\x33\xcd\x60\xd4\x2d\x05\xa2\x15\x04\xa5\x34\xe2\x6d\x3a\x42\x19\x8a\x46\x73\x52\xd3\x17\xd5\x52\x59\x3c\xb6\x67\x37\xa7\x25\x7a\x1c\xef\x2f\xee\xc2\x26\x51\x9a\x78\x07\x2c\x72\xa1\xc7\x75\x76\x40\x96\x13\xb3\xdd\x20\x20\xb5\x76\x6a\x95\xe1\x46\x6a\xd1\xd6\xd5\xbe\x8f\x1e\x2f\xe3\x38\xf6\xcb\x7b\x40\x25\xf5\x9f\x7d\x7d\xb4\x99\x12\xa9\x7b\x66\x86\x96\xca\xe2\x80\x1d\x9e\x86\xeb\x3c\x44\x7e\xcb\x9a\xdb\x60\x5b\x18\x42\x5e\xad\x51\x87\x5c\x82\x64\x07\xfc\xed\xef\x1f\x1e\x53\x59\xe8\x00\xeb\x01\x45\x1f\x2b\x02\x75\x3d\xe5\x64\xe7\xa9\xb4\x4f\x4a\xfc\x39\xc4\xa8\x34\xa3\x79\x34\x5d\xe9\x7e\x03\x00\x00\xff\xff\xf5\xf5\x6e\xd6\x37\x01\x00\x00") + +func testE2eTestingManifestsStatefulsetZookeeperServiceYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetZookeeperServiceYaml, + "test/e2e/testing-manifests/statefulset/zookeeper/service.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetZookeeperServiceYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetZookeeperServiceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/zookeeper/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStatefulsetZookeeperStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x55\x4d\x8f\xdb\x36\x10\xbd\xeb\x57\x0c\xd4\x33\x2d\x38\x8b\x00\x0b\x02\x7b\x58\xec\xa6\xbd\x74\x13\x23\x2e\xda\x43\x51\x14\xb4\x34\xb6\xb9\xa6\x38\xec\x70\xe4\x74\x5d\xf4\xbf\x17\x92\x25\x99\xb2\x63\x23\x45\xab\x93\x30\xf3\xde\x7c\xf1\x0d\x69\x82\xfd\x19\x39\x5a\xf2\x1a\x4c\x08\xb1\xd8\xcf\xb3\x9d\xf5\x95\x86\xa5\x18\xc1\x75\xe3\x96\x28\x59\x8d\x62\x2a\x23\x46\x67\x00\xde\xd4\xa8\xe1\x40\x94\xc5\x80\x65\x6b\x89\xc8\x7b\x5b\xe2\xc7\xce\x91\x1f\x76\x79\x06\xc0\x18\x9c\x2d\x4d\xd4\x70\xd7\x21\x1c\x96\x42\xdc\xa2\x01\x6a\x23\xe5\xf6\x47\xb3\x42\x17\x8f\x06\x68\x53\x6b\x38\xec\x32\x00\xc1\x3a\x38\x23\xd8\x43\x93\xc4\xed\xe7\x26\xac\x94\x07\x30\x94\xd3\x7e\xd6\x5b\x79\x22\x2f\xc6\x7a\xe4\x11\xaf\xfa\xe2\xad\x8f\x62\x9c\x1b\xa3\xd8\xda\x6c\x50\xc3\xa6\xe4\x99\xa5\x62\xd7\xac\x90\x3d\x0a\x46\x85\xef\x50\x09\x46\x51\x1d\x22\x16\x01\x25\x16\x07\xa2\x1d\x62\x40\x56\x7d\x1c\x64\x3d\x9f\xdd\x4d\xa3\x2d\x1a\xe7\x16\xe4\x6c\xf9\xa6\xe1\xd1\x7d\x31\x6f\xf1\x54\x33\x6f\x92\x0e\x14\xe4\x6a\x08\xa4\xac\x17\x7a\x28\x28\x48\x3e\xf5\x7f\x21\xde\xa9\xca\xf2\x43\x31\xfc\x9d\x00\x7b\x72\x4d\x8d\x2f\xd4\x78\x99\x84\x3d\xb6\x4a\x41\x46\x1b\x40\xdd\xa2\x16\x46\xb6\x1a\xf2\x36\x4d\x91\x5f\x10\xda\x04\x95\xe5\x6b\xa4\xf3\xfc\x03\x6d\x45\x24\x51\xd8\x84\xf3\xa1\xbe\x9a\xbd\xd1\x14\xd0\xbf\x56\x3b\x75\xaf\x5e\x19\x47\x44\x49\x75\x6d\x7c\x35\x99\xc5\x98\xa0\x08\x88\xac\xd6\xd6\x57\x98\x34\x7b\x3e\x3b\x45\x5e\x45\x31\x2c\x0f\x09\x73\xb0\xcd\xe2\x76\x3a\xc7\x5e\xa8\x0f\x47\x89\x1e\x3f\xf4\xfb\xcb\xa9\x2d\x3e\x3d\xff\xfe\xf1\xf1\xe5\xc3\x72\xf1\xf8\xf4\x21\x19\xc5\xde\xb8\x06\xbf\x67\xaa\x75\x62\x04\x58\x5b\x74\xd5\x67\x5c\x4f\xad\xad\x3a\x4f\xcb\xb5\x9f\x9f\x39\x3b\xd2\x71\xac\x83\xca\x67\x6d\xf6\x18\x4c\x89\xff\xcb\xe9\xfe\xe7\xc3\x3d\x11\xdb\xea\x6e\x10\xa5\x0e\xa7\xb5\x18\xd8\xe5\xd5\xfd\xeb\x17\x36\x51\x49\x2f\x10\x3d\x15\x48\x20\x9e\x76\x3d\x86\x5c\x10\x8b\x86\x77\xf7\xf7\xf7\x49\x49\xc7\xe0\xad\x6e\xae\x53\xee\xbe\x46\x71\x68\x2a\x64\xd5\x5d\x52\x96\xfc\x2d\x81\x76\x5b\x33\xb6\x5a\xac\xac\x2f\x0e\xbb\x25\xf2\x1e\x79\x16\xb7\x57\x75\xda\xe9\x51\xad\x89\x71\xc3\xd4\xf8\x6a\x74\x31\x9a\xca\x7a\x8c\x71\xc1\xb4\xc2\x54\x40\xf8\xe7\xe9\x3a\xbb\x52\x4e\x1f\x7b\x7b\x66\x50\xe5\x99\x21\xff\x6a\xd5\x4f\xce\xce\xe2\x16\x5c\x84\xe4\x1a\x38\x5e\x9d\xd6\xb8\x67\x74\xe6\x6d\x89\x25\xf9\x2a\x6a\x98\xbf\x4f\x10\x62\x6b\xa4\x46\x46\xe7\xfb\x6f\x54\xeb\x4d\x11\x4d\x35\xf4\xed\x4a\x2f\x52\xcf\x77\xd0\xe5\x06\xd9\x22\x0c\x62\x86\xd7\x26\x0a\xac\x89\xa1\xc2\x55\xb3\xd9\x58\xbf\xf9\x77\x7b\x31\xae\x45\x96\x36\x79\x21\xea\xb4\x0e\xac\x83\xbc\x3d\x5b\xd6\xf0\xd7\xdf\xd9\xed\x54\x67\xd0\x63\xf0\x27\x67\x6c\xfd\x53\xff\x12\x76\x99\xd4\xc5\x53\x78\x39\xd3\xf4\x01\x34\x65\x89\x31\xbe\x50\x85\x51\xc3\xaf\x90\x7f\x46\x53\xfd\xc2\x56\xf0\x93\x2f\x31\x87\xdf\x7a\x18\x63\xa4\x86\x4b\x4c\x4e\x8b\xf1\x8f\x06\x63\x7a\x7e\x00\x51\x88\xbb\x3d\x9d\xff\x60\xb3\x7f\x02\x00\x00\xff\xff\x73\x38\x7a\x58\x33\x08\x00\x00") + +func testE2eTestingManifestsStatefulsetZookeeperStatefulsetYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStatefulsetZookeeperStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/zookeeper/statefulset.yaml", + ) +} + +func testE2eTestingManifestsStatefulsetZookeeperStatefulsetYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStatefulsetZookeeperStatefulsetYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/zookeeper/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x8d\xb1\x4e\xc5\x30\x0c\x00\x77\x7f\x85\x25\x66\xb7\x52\x85\x28\x74\x67\x05\x89\x0e\xcc\x56\xe3\xb4\x29\x25\x8e\xe2\x24\x45\x7c\xfd\x53\xc7\xb7\xbf\xed\x74\xc3\xdd\x13\xce\x22\x58\x36\xc1\xcf\xef\x8f\xf7\xaf\x19\x9d\x2e\x86\x5c\x70\x2b\x25\xd9\xd4\xf7\xab\x76\x3f\xaf\xd6\x05\xed\xf5\x8c\x92\x0d\x80\x53\xca\xda\x24\xdb\x04\x84\xc6\xec\x88\x8f\x00\x84\x59\xb5\x78\x03\xc2\x35\x56\x1f\xc4\x01\xe1\x1e\xe2\xfa\x57\xdf\xc6\x0b\x8d\x7d\xe6\x28\x40\xf8\x6b\x5c\x9f\x07\x20\x74\xdc\x82\xfb\x7f\x19\x46\xc8\xd2\x82\x9c\x8f\x68\xee\xe2\x7d\xe3\xb8\x5c\x72\xd1\x24\xbb\x46\x20\x6c\x92\xeb\x51\xee\x96\xb7\x00\x00\x00\xff\xff\xc7\x4a\x9f\xf8\xfa\x00\x00\x00") + +func testE2eTestingManifestsStorageCsiOwnersBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiOwners, + "test/e2e/testing-manifests/storage-csi/OWNERS", + ) +} + +func testE2eTestingManifestsStorageCsiOwners() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiControllerRoleYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x8f\xb1\x0e\xc2\x30\x0c\x44\x77\xbe\xc2\x52\x57\x5a\xef\xfd\x0c\xfe\xc0\x49\x0c\x89\x48\xe3\xc8\x76\x2b\xfa\xf7\x8c\xad\xc4\x02\x03\xeb\x9d\xee\xde\xdd\x00\x37\xee\x95\x22\x27\x08\x3b\x94\x96\xca\x56\xd2\x4a\x15\x54\x2a\x1b\xdc\x45\x81\x5f\xce\xda\xa8\x8e\xe4\x4e\x31\xb3\x5e\x0f\xa9\xab\x6c\xc5\x8a\x34\x56\xa0\x96\x0e\xc3\x1a\x75\xcb\xe2\xce\x3a\x5f\x06\x18\x21\xbb\x77\x9b\x11\x1f\xc5\xf3\x1a\xa6\x28\x0b\x3e\xd7\xc0\xda\xd8\xd9\xc6\x68\x05\x3f\x38\x18\xaa\x04\x5c\xc8\x9c\x15\x13\xf7\x2a\xfb\x29\x83\x1a\x28\x4e\x3b\x2d\xf5\xd7\xfe\xd3\xe8\x7f\x21\x4e\xf7\xbf\x45\xbc\x03\x00\x00\xff\xff\x7b\xf7\xef\xf6\x8a\x01\x00\x00") + +func testE2eTestingManifestsStorageCsiControllerRoleYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiControllerRoleYaml, + "test/e2e/testing-manifests/storage-csi/controller-role.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiControllerRoleYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiControllerRoleYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/controller-role.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiExternalAttacherRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x55\xdf\x8b\x1b\x47\x0c\x7e\xdf\xbf\x42\xdc\xbe\xb4\xe0\xb5\xc9\x5b\x71\x9f\x2e\x47\x5b\x02\x2d\x94\x5c\x09\x94\x12\x88\x3c\xa3\xf5\xaa\x9e\x9d\x59\x24\x8d\x9d\xcb\x5f\x5f\x66\xd6\xbe\x1f\x39\xa7\xb9\xe4\x1a\xe8\x93\x07\x59\xab\x4f\xfa\x24\x7d\x6a\xe1\x8f\x81\x15\xfe\xbc\xfc\xed\x57\xe8\x39\x10\xb8\x14\x0d\x39\x2a\x60\x08\xf0\xfa\xe5\xe5\x15\xa4\xcd\xdf\xe4\x4c\xc1\x06\x34\x40\x21\x88\xe4\x48\x15\xe5\x06\x2c\x81\xe4\x08\xf4\xde\x48\x22\x86\xa6\x85\xab\xeb\x57\x80\x66\xe8\x06\x92\x65\xd3\x36\x2d\xbc\x8a\x30\x49\xf2\xd9\x19\xa7\xb8\x00\x42\x37\x54\x2f\x2f\xbc\x27\x01\x4f\x53\x48\x37\x23\x45\x83\x01\xb5\x44\xdc\x10\xb8\xac\x96\x46\xfe\x40\x7e\xdd\xb4\xd0\x15\x2b\xee\x13\xfb\x92\x5d\x1f\xd8\x99\x2e\x20\x2b\x41\x4c\xb1\xf3\xd4\x63\x0e\x06\x11\x47\xd2\x09\x1d\x01\x46\x0f\x9e\xfb\x9e\xa4\x44\xad\xf6\xa6\x05\x80\x3e\x49\xfd\xe2\xd6\xd3\x03\x45\x63\x63\x52\x08\xbc\x23\xb0\x81\xe0\x2a\x64\x35\x92\xd7\x29\x50\x85\xf6\xe4\xd8\x13\x1c\x06\xb2\x81\xa4\xba\xdc\x4b\x59\x68\x0a\xec\xd0\x48\xeb\x3f\x27\x22\x4a\x81\x15\xf2\x44\xc5\x02\x38\xc2\x61\x60\x37\x80\x43\x25\x08\x84\x9e\x44\x07\x9e\x80\x02\x55\x6a\x60\xcc\x6a\xa5\x78\x8a\xb8\x09\xe4\x7f\xac\x01\xac\x74\x87\x63\x1f\x32\x45\x77\x44\xa9\x5d\x51\xb2\x3c\x2d\x40\x89\x60\x43\x21\x1d\x9a\x06\x27\x7e\x43\xa2\x9c\xe2\x1a\xf6\x2f\x9a\x1d\x47\xbf\x86\x6b\x92\x3d\x3b\xba\x74\x2e\xe5\x68\xcd\x48\x86\x1e\x0d\xd7\x0d\x54\x62\xd6\xe0\x94\xbb\x53\x96\x0d\x40\x5b\x4b\x2a\x2c\x1e\xd8\x86\x4f\x10\x5c\x5e\xc7\x00\xd5\xb0\x86\xa3\x4f\xd3\x74\x5d\xd7\xb4\x70\x79\x0c\x78\x5b\x53\xa9\xa8\x74\xf1\x90\x64\x37\x47\xfe\xfd\x8d\x2e\x20\x26\x4f\x5a\xfb\xf5\x26\x85\x3c\xd2\xfc\x5d\x61\x56\x8f\xf9\xdf\x6f\xc7\xfd\x02\x65\x83\x6e\x89\xd9\x86\x24\xfc\x01\x0b\x7f\xcb\xdd\x0f\xba\xe4\xb4\xda\xbf\x38\x53\xe5\xa9\x31\xb7\xa5\x76\x92\x63\x24\x69\x24\x07\xd2\xe2\xd7\x01\x4e\xfc\x8b\xa4\x3c\xe9\x1a\xfe\xba\xb8\x78\xdb\x00\x00\x08\x69\xca\xe2\xa8\xda\xa6\x02\xae\x46\xd1\xf6\x35\x5b\x3d\x3a\xed\x49\x36\xd5\x61\x4b\x76\xb1\x80\x8b\xc0\x5a\x7f\x0f\x68\x6e\x28\x8f\x3c\x79\x34\x2a\xaf\xa9\x9a\xde\x3e\x0d\xaf\xb2\xf3\x24\x8c\x33\x01\xd5\x92\xe0\x96\x8e\xac\x9c\x0b\xef\x94\xbf\x31\xc2\x4c\x13\xde\x35\xf5\x3f\x24\xec\x2b\xd0\x57\x6a\x68\xf9\x51\x12\x27\x88\xf6\x9a\x9c\x90\xc1\x44\x32\xb2\x96\x31\x03\x56\x48\x53\x19\x2e\x0c\xcb\xa6\xfd\xa9\x2e\x26\xb0\x01\xf7\x70\x93\x32\x44\x22\x0f\x7b\x0c\x99\xa0\x97\x34\x82\xd6\x00\xcb\xa6\xfd\x39\x09\xd0\x7b\x1c\xa7\x40\x8b\xea\x39\xe0\x9e\x60\x47\x37\xf0\xce\x29\x2f\x1f\xe6\xbe\x2a\x92\x2b\x29\x04\x92\x6e\xca\x9b\xc0\x3a\x74\x73\xa4\xaa\x54\xef\x8a\x74\x5c\xcf\x5f\x5c\x05\x54\x5d\x4e\x28\x38\x92\x91\x68\xd3\x96\xfd\x1f\xcc\x26\x5d\xaf\x56\xbb\xbc\x21\x89\x64\xa4\x5d\x41\xd9\xb2\x0d\x79\x53\x00\x7c\x72\xba\x9a\x43\x6a\x87\xd1\x77\x4e\xc8\x17\xe9\xc3\xa0\xcb\xc1\xc6\x22\xdc\x67\x06\xb2\x7d\x44\xe9\x31\xc6\xe9\xbf\xb3\x7d\x7c\x3b\x8b\xc0\xa3\xf5\x7d\xc9\xd1\x73\xdc\x3e\x67\x8b\xef\x6b\x55\x27\x45\x12\x34\xcf\xc7\x69\xde\xe0\xb3\x92\x57\x12\x3d\x2b\x75\x5f\x26\x76\x67\xe5\xae\xe4\xf0\x9a\xfa\x82\xfe\x58\xae\x3e\xab\x3d\x70\xcb\xf8\xbf\x30\xf1\x05\x92\x5a\x8e\x23\x6f\x47\x9c\x14\x92\x94\x13\xa3\x54\x6e\x47\xbd\x19\x2e\xcb\xdd\x35\x2c\x45\x34\x6d\x99\xe2\xef\x8a\xf6\xa6\x18\x6e\x80\xfb\xef\xcf\x5e\x25\xd6\xd3\x41\x3a\xb6\xf4\xeb\xa5\xf8\x99\xb7\xe5\xd3\x7c\xba\x7e\x7b\x12\xf2\x8f\xa6\xd8\xa5\x24\x9e\xe3\xfd\xac\xea\xfa\x3f\x98\xea\x99\xa9\x6a\xff\x78\xa2\x6f\x15\xe9\x24\x51\x9e\x02\xcd\xca\x74\xa7\x51\x4e\xa8\xbc\x1e\x0c\xfe\xb7\x9a\xf8\x5a\xeb\xb3\xa9\xfc\xbf\xad\xcd\x67\xf6\x65\xae\xf9\x29\xcb\xf2\x4f\x00\x00\x00\xff\xff\x80\xf5\x0a\x99\xcf\x0a\x00\x00") + +func testE2eTestingManifestsStorageCsiExternalAttacherRbacYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiExternalAttacherRbacYaml, + "test/e2e/testing-manifests/storage-csi/external-attacher/rbac.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiExternalAttacherRbacYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiExternalAttacherRbacYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/external-attacher/rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiExternalProvisionerRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x56\x41\x6f\xe3\x36\x13\xbd\xeb\x57\x0c\xac\xcb\xf7\x01\x96\x8b\xbd\x15\xea\x29\x1b\x14\xc5\x02\x5b\xb4\xc8\x2e\x0a\x14\xc5\x02\x4b\x93\x23\x6b\x1a\x9a\x54\x39\x43\xb9\xd9\x5f\x5f\x0c\x2d\x3b\x4e\xa2\x24\xde\x4d\x0a\xf4\x26\x90\xd4\xbc\x79\x6f\xa8\xf7\x54\xc3\xc7\x9e\x18\x7e\xbf\xf8\xf9\x3d\x74\xe4\x11\x6c\x0c\x62\x28\x30\x18\xef\xe1\xea\xed\xc5\x25\xc4\xf5\x9f\x68\x85\x41\x7a\x23\x60\x12\x42\x40\x8b\xcc\x26\xdd\x80\x44\x48\x39\x00\xfe\x2d\x98\x82\xf1\x55\x0d\x97\x1f\xde\xc1\x90\xe2\x48\x4c\x31\x60\x5a\x55\x75\x55\xc3\xbb\xa0\x6b\x2e\x5b\xa1\x18\x96\x80\xc6\xf6\xe5\xa0\x4b\x34\x62\x02\x87\x83\x8f\x37\x5b\x0c\x02\xbd\x61\x2d\xba\x46\xb0\x99\x25\x6e\xe9\x0b\xba\xb6\xaa\xa1\xd1\x55\x33\x46\x72\xda\x60\xe7\xc9\x0a\x2f\x21\x33\x42\x88\xa1\x71\xd8\x99\xec\x05\x82\xd9\x22\x0f\xc6\x22\x98\xe0\xc0\x51\xd7\x61\xd2\xaa\x65\xbd\xaa\x01\xa0\x8b\xa9\xbc\x71\x3c\xe9\x00\x83\x90\x10\x32\x78\xba\x46\x90\x1e\xe1\xd2\x67\x16\x4c\x57\xd1\x63\x81\x76\x68\xc9\x21\xec\x7a\x94\x1e\x53\x39\x72\xd2\x72\xc2\xc1\x93\x35\x82\x5c\x76\x0e\x5a\x28\xc1\x02\x79\xa2\xc6\x12\x28\xc0\xae\x27\xdb\x83\x35\x8c\xe0\xd1\x38\x4c\xdc\xd3\x00\xe8\xb1\xa8\x03\xdb\xcc\xa2\xfc\x31\x98\xb5\x47\xf7\x43\xa9\x21\x3a\x23\x0a\x9d\xcf\x18\xec\x04\x54\x66\xc3\x28\x79\x58\x02\x23\xc2\x1a\x7d\xdc\x55\x95\x19\xe8\x37\x4c\x8a\xd7\xc2\xf8\xa6\xba\xa6\xe0\x5a\xf8\x80\x69\x24\x8b\x17\xd6\xc6\x1c\xa4\xda\xa2\x18\x67\xc4\xb4\x15\x14\x6d\x5a\xb0\x4c\xcd\x49\xa3\x15\x40\x5d\x88\xa9\x96\x3b\x92\xfe\x11\x99\xf5\x69\xaa\x51\x16\x5a\x98\xce\x54\x55\xd3\x34\x13\xf8\xa9\x9c\xa7\xdd\xa5\xb5\xb1\x2b\x93\xa5\x8f\x89\xbe\x18\x25\xbf\xba\xfe\x9e\x57\x14\xbf\x1b\xdf\xcc\xb4\x78\x10\xf6\xb4\xcf\x26\xe5\xa0\xed\xa6\xec\x91\xdb\xd2\xf5\xc7\x1e\xa1\x8b\xde\xc7\x1d\x85\x0d\xe8\x06\x70\x1f\xb3\x77\x2a\x6a\x0e\x36\x6e\x75\x6a\xe8\xca\x55\x18\x7c\xde\xe8\x5d\x2f\x57\x3b\xe1\x5f\x99\x12\x02\xa3\x4d\x28\x5c\xaa\x95\x43\x07\x3c\x0a\x9b\x55\x59\x6d\xc0\x0c\xf4\x53\x8a\x79\xe0\x16\xfe\x58\x2c\x3e\x95\x55\x80\x84\x1c\x73\xb2\x58\x56\xa7\x32\xc7\xcd\x11\xd3\xba\x6c\x6c\x50\x16\x4b\x58\x78\x62\x29\x9b\x73\xd5\xee\xd5\x1a\x54\x33\x16\x0c\x32\x46\x9f\xb7\xc8\xd3\xa1\xd9\x9a\x4b\x58\xec\x8c\xd8\x5e\x1f\x6c\x42\x23\xa8\x4f\x0e\x3d\x0a\x7e\x2b\xa0\xf5\x86\xb6\x67\xa3\xe6\xc1\x99\x79\x2c\x96\x98\xcc\x06\xa7\x41\xcf\x21\x4f\x27\xac\x37\xcc\x67\xf2\x3c\x93\x13\x8e\x18\xe4\x41\xc5\x27\x24\x9b\x68\x2c\x61\x31\x3c\x86\xc3\xc1\x0c\xdc\x47\x59\x3d\x4f\x6c\x9a\xdc\xf4\xc2\x93\xcc\x5e\x13\x48\xfd\x7c\x8e\xf7\x73\x78\xcf\xc2\x58\xa6\x10\xdd\xeb\x8e\xe8\x6b\x0a\xce\x3b\xcc\x5b\x0a\x8e\xc2\xe6\x25\x46\x73\xcf\x0b\x9b\xa4\xc6\xc5\x79\x9f\x82\x6d\x21\x32\xeb\xaa\xda\xf4\x63\x6e\xfa\x75\x7e\x3a\xeb\xa8\xda\xc6\x15\x76\xda\xc0\x43\x5f\x3d\xc7\x24\xe1\xa8\xff\x13\x92\xec\x65\xad\xe1\xd7\xdb\xf7\x8f\x91\xa4\x81\xa4\x39\xbc\x8b\xe9\x7a\xcf\x02\x83\x1b\x22\x05\xd1\x70\x02\x9b\xd3\x6d\xda\x6a\xef\x55\x0d\xd4\xc1\xff\x34\x8b\x63\xf0\x37\x40\xdd\xff\x67\x23\x8f\xf8\x90\x76\xd3\x3c\xbf\x3d\x2a\x5e\x98\x5a\x4f\xca\x68\xbb\xcd\x21\x68\x6a\xf8\x45\x09\xc5\x80\x10\xbb\x92\xc6\x77\x23\x87\x4b\x70\xdc\xaa\x13\x93\x12\x67\x64\xe5\x3a\xe5\x8c\x83\xb5\x61\x54\x69\xaa\x1a\x76\x1a\x40\xc4\x9a\xe7\xe5\xd5\xcf\x4d\xb3\x57\xaa\x39\xa8\xd4\xc8\xcd\x80\x9f\x57\xf0\xe3\xb1\xa8\xfe\x8a\x39\x1c\x12\xea\xcf\x87\xd3\x09\x74\x66\x8c\x49\x3b\x7a\x5f\xc0\x56\xd5\xdc\x27\x77\xd7\x13\x0f\xd5\xca\xd6\xfd\x4f\xee\xe8\x89\x87\x6f\x6f\x0a\x91\x3b\xde\x38\xf9\xe5\xa7\xfb\x60\x36\xc6\xe4\x28\x9c\x4e\xeb\x21\xfe\x5e\x95\x57\x00\x3f\x71\x83\x7f\xd1\x06\xca\x1d\x78\xf1\x2d\xfb\x0f\x7a\xc9\xf3\x26\xb2\x67\x7e\x8e\x83\xfc\x13\x00\x00\xff\xff\xd9\x60\x5c\x55\x53\x0c\x00\x00") + +func testE2eTestingManifestsStorageCsiExternalProvisionerRbacYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiExternalProvisionerRbacYaml, + "test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiExternalProvisionerRbacYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiExternalProvisionerRbacYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiExternalResizerRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x55\x41\x8b\x23\x37\x13\xbd\xf7\xaf\x28\xec\xcb\xf7\x81\xed\x65\x6f\xa1\x73\x9a\xf5\x21\x2c\x24\xb0\xcc\x2c\x03\x21\xe4\x20\x4b\xaf\xdd\x95\x91\xa5\x8e\xaa\xd4\xce\xcc\xaf\x0f\xd2\xb4\x1d\xef\xd8\x3b\x99\xac\x09\xe4\xe4\x46\x2a\x55\xd5\x7b\xf5\x5e\x79\x4e\x9f\x7b\x16\xfa\xf9\xe6\xa7\x1f\xa9\x63\x0f\xb2\x31\xa8\xe1\x20\x64\xbc\xa7\xdb\x0f\x37\x6b\x8a\x9b\xdf\x60\x55\x48\x7b\xa3\x64\x12\x28\xc0\x42\xc4\xa4\x47\xd2\x48\x29\x07\xc2\x1f\x8a\x14\x8c\x6f\xe6\xb4\xbe\xfb\x48\x09\xc2\x4f\x48\xab\x66\xde\xcc\xe9\x63\xa0\x21\x45\x97\xad\x72\x0c\x0b\x82\xb1\x7d\x0d\x72\x89\x47\x24\x72\x18\x7c\x7c\xdc\x21\x28\xf5\x46\x4a\xc2\x0d\xc8\x66\xd1\xb8\xe3\x27\xb8\xb6\x99\xd3\xb2\x9c\x9a\x31\xb2\x2b\xcd\x75\x9e\xad\xca\x82\xb2\x80\x42\x0c\x4b\x87\xce\x64\xaf\x14\xcc\x0e\x32\x18\x0b\x32\xc1\x91\xe3\xae\x43\x2a\x59\xeb\x79\x33\x27\xa2\x2e\xa6\xfa\xe2\x18\xe9\x08\x41\x59\x19\x42\x9e\x1f\x40\xda\x83\xd6\x3e\x8b\x22\xdd\x46\x8f\x5a\xda\xc1\xb2\x03\xed\x7b\x68\x8f\x54\x43\x4e\x5a\x4e\x18\x3c\x5b\xa3\x90\x7a\x73\xe0\xa1\x00\xac\x25\x27\x26\x16\xc4\x81\xf6\x3d\xdb\x9e\xac\x11\x90\x87\x71\x48\xd2\xf3\x40\xf0\xa8\xcc\xd0\x2e\x8b\x16\xec\x08\x66\xe3\xe1\xbe\xaf\xef\xb5\xcc\x86\x43\xe7\x33\x82\x9d\x8a\xd4\x99\x08\x34\x0f\x0b\x12\x80\x36\xf0\x71\xdf\x34\x66\xe0\x7b\x24\xe1\x18\x5a\x1a\xdf\x37\x0f\x1c\x5c\x4b\x77\x48\x23\x5b\xdc\x58\x1b\x73\xd0\x66\x07\x35\xce\xa8\x69\x1b\xaa\xbc\xb4\x64\x85\x97\x53\x93\x0d\xd1\xbc\x02\x2a\x1c\xee\x59\xfb\xaf\xd0\x5b\xbe\xa6\xf7\xf5\xa0\xa5\x29\xa6\x69\x96\xcb\x65\x33\xa7\xdb\xe7\x7c\x47\x44\x05\x4f\x19\xe1\x3e\xa6\x87\xe7\xc4\x9f\xee\xd7\xb2\xa0\x4f\xf7\xb2\xa0\xbb\xb5\xac\xa6\x66\x4f\xa9\x3f\x45\x93\x36\xc6\xae\x4c\xd6\x3e\x26\x7e\x32\x85\xac\xd5\xc3\x77\xb2\xe2\xf8\x6e\x7c\x7f\x01\xd2\x61\x08\x07\x5c\xcb\x94\x43\x40\x6a\x52\xf6\x90\xb6\xa2\xfc\xdc\x83\xba\xe8\x7d\xdc\x73\xd8\x52\xb9\x20\xe9\x63\xf6\xae\xb4\x9b\x83\x8d\xbb\x32\x5d\xb8\x2a\x99\xc1\xe7\x6d\xf1\x43\x95\x7f\xc2\xef\x99\x13\x48\x60\x13\x54\x6a\xb6\x1a\x94\xe2\xc8\xa5\x5d\x0e\xdb\x55\x3d\x5d\x92\x19\xf8\x87\x14\xf3\x20\x2d\xfd\x32\x9b\xfd\x5a\x4f\xab\x24\x62\x4e\x16\xf5\x74\x4a\x73\xbc\x1c\x91\x36\xf5\x62\x0b\x9d\x2d\x68\xe6\x59\xea\xef\xde\xa8\xed\x6b\xd4\xa5\xb4\x2f\x92\x0e\x85\x38\x51\x04\x1d\xa3\xcf\x3b\xc8\x14\xf4\x7a\xf2\x05\xcd\xf2\xe0\x8c\xa2\x7c\x0d\xd7\xd4\xb3\xde\xf0\xee\x6d\x45\xaf\xaa\xf0\x4e\xd4\x68\x3e\x2b\xf4\x8d\x28\x30\x22\xe8\x59\xb2\x33\x8e\x6c\xc2\x94\xfd\xbc\x4e\xd5\xff\x99\x96\x3f\x70\x70\x1c\xb6\xd7\x48\xfa\xc4\xa5\xcb\x54\xec\x21\xf9\x79\x27\xb7\x15\xdb\x45\xaf\x17\x18\x97\x3c\xfe\xcf\x5c\x7e\xd1\xe7\xa5\x85\x5b\x74\xa5\xf8\xb9\x73\xff\xce\x86\x74\x1c\xc5\x2b\x34\xbc\x7d\x95\x20\x38\x1a\x22\x07\x2d\x2b\xd6\xe6\xf4\xd7\xce\x2f\x3d\x37\x73\xe2\x8e\xfe\x57\xfe\x11\x62\xf0\x8f\xc4\xdd\xff\x2f\x2e\x5f\x96\xc3\xde\x9d\xe6\xf7\xed\x4b\xe8\xca\x1d\xfa\x55\xfa\x6c\xb7\x3d\xac\xb0\x17\x6a\xb6\x31\x26\xc7\xe1\xb4\xa9\x2a\xe3\x2f\xe4\xed\x61\x64\xda\x04\x2f\x2d\x79\xd4\xf6\x41\xec\x0e\x1e\x2f\x35\x3e\xe9\xfe\x0b\x91\xff\x4b\xea\xae\x50\xaf\x26\xf2\x3f\x66\x91\xd7\xbd\xf1\x8c\xf8\x2d\xc6\xf8\x33\x00\x00\xff\xff\x47\xf8\xe7\x76\xb0\x09\x00\x00") + +func testE2eTestingManifestsStorageCsiExternalResizerRbacYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiExternalResizerRbacYaml, + "test/e2e/testing-manifests/storage-csi/external-resizer/rbac.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiExternalResizerRbacYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiExternalResizerRbacYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/external-resizer/rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiExternalSnapshotterRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x55\x4d\x8f\xdb\x36\x10\xbd\xf3\x57\x0c\x56\x57\xcb\x41\x6e\x85\x6e\x9b\x2d\x50\x04\x68\x11\x60\x13\x14\x28\x0a\x1f\xc6\xe4\xc8\x62\x97\x26\x85\xe1\x50\x5b\xe7\xd7\x17\xa4\x25\xc5\x1f\xea\xc2\x4d\x9d\x1b\x41\x0d\x67\xde\x7b\x33\x6f\x54\xc1\x97\xb0\x23\xe9\x88\xe1\xd5\x4a\x07\xd2\x11\x3c\x7f\x78\x7c\x82\xd6\x3a\x82\x36\x30\xd0\xdf\x42\xec\xd1\xd5\x3d\x87\xc1\x46\x1b\x3c\xf1\x0a\xa4\xb3\x11\xfe\x78\xfc\xed\xd7\x12\xa8\x2a\xd0\xc1\x0b\x5a\x1f\x01\x9d\x3b\x66\x08\xdb\xbf\x48\x4b\x04\xe9\x50\x00\x99\xc0\x93\xa6\x18\x91\x0f\x20\x01\x38\xf9\x39\x35\x3c\x7d\xfe\xa8\x2a\x88\x1e\xfb\xd8\x05\x11\xe2\xb5\xaa\x54\x05\x1f\x3d\xf4\x1c\x4c\xd2\x62\x83\x5f\x01\xa1\xee\x72\x28\x18\xb6\x03\x31\x18\xea\x5d\x38\xec\xc9\x0b\x74\x18\x73\xd2\x2d\x81\x4e\x51\xc2\xde\x7e\x25\xd3\xa8\x0a\xea\x7c\x8b\x43\xb0\x26\x03\x6c\x9d\xd5\x12\x57\x90\x22\x81\x0f\xbe\x36\xd4\x62\x72\x02\x1e\xf7\x14\x7b\xd4\x04\xe8\x0d\x18\xdb\xb6\xc4\x39\x6b\xb9\x57\x15\x40\x11\x22\xbf\x98\x23\x0d\x90\x17\x2b\x96\x22\x38\xfb\x42\x45\xb7\x27\x97\xa2\x10\x3f\x87\x22\x48\x0d\xa1\xcf\xb8\xd1\xb9\x03\x30\xe5\x97\x25\xea\x22\xcd\xc9\x23\xb0\x6d\x8e\x60\x2a\x25\xb3\x62\x33\xe6\x63\x73\x42\xe9\xd3\x37\xda\x51\x29\xec\xed\xef\xc4\xb9\x2b\x0d\x0c\xef\xd5\x8b\xf5\xa6\x81\xcf\xc4\x83\xd5\xf4\xa8\x75\x48\x5e\xd4\x9e\x04\x0d\x0a\x36\x0a\x0a\xa5\x06\x74\xb4\xf5\x89\xda\x4a\xd5\x75\x3d\xbe\x3d\x25\x71\x9a\x9c\xb7\xa8\xd7\x98\xa4\x0b\x6c\xbf\x62\x26\xb6\x7e\xf9\x29\xae\x6d\x78\x37\xbc\x3f\xab\x50\x4d\x64\x27\x36\xe7\x4c\x66\x0c\xf3\x5c\x9d\x00\xa9\x39\x79\x4f\xac\x38\x39\x8a\x39\x59\x0d\xd8\xdb\x5f\x38\xa4\x3e\x36\xf0\xe7\xc3\xc3\x46\x01\x00\x30\xc5\x90\x58\x53\xb9\xa3\x21\x2b\x31\x7e\x19\x88\xb7\xe5\xd6\xd9\x28\x0f\x2b\x78\x78\x45\xd1\x5d\x3e\x68\x26\x14\xca\xa7\xd4\x9b\xf1\xd4\x97\x8f\x9b\xdb\xea\x44\xd2\x4c\xd7\x85\x76\x54\xea\x94\x7a\x0b\x99\x26\x72\xeb\x28\x81\x71\x47\xa3\x68\x4b\x05\x86\xe0\xd2\x9e\xa6\x07\xda\x61\x8c\xf4\x66\xb9\x99\xde\x5d\xeb\x06\x2f\x4b\x82\x7e\xd3\x6f\x11\xc2\x99\xae\x86\x1c\x09\xfd\x10\x58\xef\xa2\xa0\xa4\x2b\x74\x63\xed\xcd\xbf\x4c\xf2\x07\xeb\x8d\xf5\xbb\xef\x1b\xe8\x45\xcb\xd4\x9c\x0d\x12\xd3\x71\xc7\x1d\x47\x75\xd1\x7c\x19\xe6\xb2\xe9\xf2\x97\x6c\x96\xde\xe5\xcd\x53\x0c\xbe\xbc\x94\xf2\x69\xce\x53\xae\x1a\x18\xa3\x54\x86\xf1\x4c\x6d\x06\x70\xed\xdf\x9c\x5f\x77\xe8\x77\xe3\xe6\xc9\xae\x44\x17\x03\x14\x5b\x1e\xfd\x79\xb6\x80\x76\x24\x71\xb4\xaf\xb9\xc9\xa8\x30\xb7\xf7\x0d\x41\x4f\x9b\xf2\xfd\x7b\xe5\x9a\x3c\x54\xf0\xe5\xd3\xcf\x9f\x9a\x73\x0d\x27\xa6\x47\xed\x0e\x21\xc1\x2b\x7a\x29\x1b\xfc\x10\x12\x43\xb4\x86\x34\xf2\xdb\xf4\x1c\xa1\x21\x26\x47\xe5\xd7\x33\xed\xa3\x8b\x61\xd6\x21\xb0\xb1\xfe\x14\x74\x99\xcb\xb3\x31\x76\x84\x93\x8d\x2f\x4d\x3c\x3b\x67\xb2\xd2\xe8\x9b\x33\x2f\x8d\xbe\xdb\x5c\x8a\x78\x87\x91\xbe\x85\xf9\xfd\x75\xff\xdf\x9e\xb9\x37\xa0\x2b\x0b\x8d\xde\xf9\x2f\x22\xdd\xe4\x82\x7f\x02\x00\x00\xff\xff\x99\x98\x92\xb6\x6c\x09\x00\x00") + +func testE2eTestingManifestsStorageCsiExternalSnapshotterRbacYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiExternalSnapshotterRbacYaml, + "test/e2e/testing-manifests/storage-csi/external-snapshotter/rbac.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiExternalSnapshotterRbacYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiExternalSnapshotterRbacYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/external-snapshotter/rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiGcePdController_ssYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x95\x51\x6b\xe3\x46\x10\xc7\xdf\xfd\x29\x06\xf7\x59\x72\x7c\x70\x2d\x08\xfc\x60\x72\xc6\x0d\x97\x73\xcc\x25\xb4\x8f\xc7\x64\x35\xb6\xb6\x5e\xed\x6e\x67\x46\xca\xb9\xa5\xdf\xbd\x6c\x24\xa7\x72\xe2\xd0\x9a\x72\x81\x13\x18\xcc\xec\xcc\x7f\x66\x7e\x33\xd2\xee\xac\x2f\x0b\xb8\x55\x54\xda\x34\xee\x96\x74\x84\xd1\xfe\x42\x2c\x36\xf8\x02\x30\x46\x99\xb4\xd3\x51\x4d\x8a\x25\x2a\x16\x23\x00\x8f\x35\x15\x60\xc4\x66\x5b\x43\x59\x2c\x33\x13\xbc\x72\x70\x8e\x78\x24\x91\x4c\xf2\x11\xe2\xd6\x1a\x5a\x3d\xba\x8e\xff\xf1\x1d\x8f\x00\x98\xa2\xb3\x06\xa5\x80\xe9\xa3\xa7\x23\xa3\x81\x53\x14\x40\x8d\x6a\xaa\x6b\xbc\x27\x27\x9d\x01\x52\x09\x05\x6c\x4d\xcc\x4c\xa8\x63\xa3\x94\xc5\x54\x9c\x28\x79\xcd\x4a\x2b\xbb\x2c\xa9\x97\x6c\x5b\xe2\x11\x80\x52\x1d\x1d\x2a\xf5\x72\x83\xb2\xd3\xe3\x8e\x94\xcf\xd5\x06\x38\xb4\x97\x9e\x1f\xe0\xe7\x20\x0a\x9e\xf4\x21\xf0\x0e\xea\x46\x14\xee\x09\x1a\xa1\x12\x36\x81\xc1\x7a\x25\x46\xa3\x36\x78\x78\xb0\x5a\xc1\xaf\x81\x77\x2e\x60\x09\x57\x25\x79\xb5\xba\x07\xeb\x61\xf9\x71\xf1\xa4\x27\xd6\x1b\x02\xab\x8f\x84\xd0\x90\xc0\xf2\x72\x01\x9f\xfa\x1e\xe0\x96\xb8\x25\xee\xb4\x96\x1f\x5f\x1c\xe4\xf0\x99\xea\xd0\xd2\x93\x9c\x56\x56\x80\xe9\xf7\xc6\x32\xd5\xe4\x15\x1e\x2a\xf2\x60\x45\x1a\x82\xc7\x13\x09\xae\xa5\x12\xd0\x97\x70\x4f\x9b\xc0\x04\xe8\xf7\x40\x5f\x63\x90\x86\x09\xc2\xe6\x49\xaa\x26\x65\x6b\x04\x62\x60\x95\xde\x5a\x05\xd1\x55\xd7\x7c\x01\xca\xcd\x21\x71\x3f\xfa\xb9\x31\xa1\xf1\xba\x7a\x7d\x59\x32\xc1\x3e\x24\xd9\xd0\x7a\xe2\xc1\x68\xb2\xc1\x9e\x89\xc7\x28\x55\x50\xed\xc7\xd0\x3d\xb6\xc6\x2d\xa5\xf1\x71\x6e\xc3\x64\xbb\xa3\x8c\xc9\x11\x0a\x4d\x9e\xc5\x14\xed\xbb\x7c\x9a\x4f\xb3\xed\x8e\xf2\x8b\x81\x00\xf2\x76\x90\xb0\x4b\x3a\xce\xb2\x76\xf6\x7e\xfc\xd2\x9a\x34\xb1\x2c\x99\x44\x66\x29\x41\xfa\xe5\x12\xcc\x6e\xfc\xbc\xa4\x75\xe3\xdc\x3a\x38\x6b\xf6\x05\xcc\xdd\x03\xee\x65\xe0\xd1\x06\xd7\xd4\xf4\x29\xa1\x79\x91\xbb\x6b\x38\x69\x52\x5a\x3f\x3e\x3a\x06\xa8\x53\xd0\x1a\xb5\x2a\x20\x25\x3f\x49\x2a\x72\x68\x6d\x7a\x75\xcf\x20\x35\x88\x29\xda\x69\xfe\x63\x7e\xf1\x06\xa4\x7a\xdf\x0d\xa1\x36\x4c\xd9\x16\x95\x64\x76\x17\x62\x70\x61\xbb\x9f\xa5\x75\x1a\xbf\x1d\x35\x54\x45\x53\x9d\x81\xec\x10\x90\x36\xeb\xdd\x9b\xf0\xfa\xc6\x04\x98\xc4\xfe\x71\x06\x80\xde\xbf\x68\x2f\xf2\xf7\xdf\x7b\xff\xfd\x87\x69\xf0\x99\xff\x37\x02\xff\xed\xc6\x48\x70\x7e\xfa\xbf\x70\xc8\x97\x31\x58\xaf\xb3\xc6\xdb\xaf\xc5\xab\x78\xc8\xb7\xa7\xa9\x2c\x6f\x6e\x96\xd7\x8b\x2f\xf3\xf5\xfa\xfa\xea\x72\x7e\x77\x75\xb3\xfa\x72\xf9\x79\xf1\x61\xb1\xba\xbb\x9a\x5f\xdf\x3e\x23\xd5\xa2\x6b\xd2\x7d\x3d\x21\x35\x13\xe3\x42\x53\x66\x82\x4f\x7f\xf2\xdf\x24\xf8\x6f\x3c\x93\x61\xf0\x21\x6f\xd6\xe5\x79\xa6\xc0\x84\xe5\x8d\x77\xfb\xa3\xbb\xe7\x84\xfc\x71\x33\x87\xf2\x3b\xc9\x13\xd7\xcd\xc9\x8a\xa9\x8e\xba\xff\x60\xb9\x80\x3f\xff\x7a\xf9\xfa\xbc\x5a\xa6\x90\x61\xd2\x63\x32\x9d\x6d\x75\x14\x39\xfa\x3b\x00\x00\xff\xff\x5f\x2e\x46\x37\x84\x09\x00\x00") + +func testE2eTestingManifestsStorageCsiGcePdController_ssYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiGcePdController_ssYaml, + "test/e2e/testing-manifests/storage-csi/gce-pd/controller_ss.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiGcePdController_ssYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiGcePdController_ssYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/gce-pd/controller_ss.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiGcePdCsiControllerRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x57\xc1\x8e\xe2\x38\x10\xbd\xe7\x2b\x4a\xf4\x65\x57\x22\x44\xbd\xa7\x15\xb7\x5d\x0e\x7b\x45\xcd\xaa\x2f\xa3\x39\x38\x4e\x75\xf0\xe0\xd8\x96\xab\x9c\x6e\xfa\xeb\x47\x0e\x01\x85\x81\x81\x34\x10\xba\xb9\x10\x45\x65\xbf\x7a\xe5\x7a\xcf\x95\x87\xf8\x83\x99\x35\xec\xad\xd6\xe8\x61\x81\xbe\x56\x12\xe1\x1f\x29\x6d\x30\x3c\x86\x27\xab\x91\x36\x7f\xb9\x32\x85\x32\x25\x25\xc2\xa9\x67\xf4\xa4\xac\x99\x42\xfd\x98\xac\x94\x29\xa6\xdb\x95\xed\xc2\xa4\x42\x16\x85\x60\x31\x4d\x00\x8c\xa8\x70\x0a\x92\x54\x5a\x4a\x4c\x5d\x91\xca\x1d\x60\x4a\x22\x49\xd2\x34\x4d\x1e\xe0\xcd\xe3\xcb\x14\x96\xcc\x8e\xa6\x59\x56\x2a\x5e\x86\x7c\x22\x6d\x95\xad\x42\x8e\xde\x20\x23\xa5\x92\x54\x86\x6f\x8c\xde\x08\x9d\x3a\x6f\x6b\x15\xb3\x40\x9f\xe5\xda\xe6\x59\x25\x88\xd1\x67\x05\x3a\x6d\xd7\x9d\x65\x99\xcf\x85\x9c\xac\x45\xa5\xdb\x5c\x67\x3a\xc4\xc8\x48\x6a\x8f\x4c\x13\x27\x02\x2f\xad\x57\xef\x82\x95\x35\x93\xd5\xdf\x34\x51\x36\xab\x1f\x4f\x33\xea\xe4\x92\xfa\xb8\xad\x0f\x1a\x29\x86\xa6\x20\x9c\xfa\xcf\xdb\xe0\x68\x0a\xdf\x46\xa3\xef\x09\x00\x80\x47\xb2\xc1\x4b\x6c\xde\xb9\x88\x4f\x8c\x86\x6b\xab\x43\x85\xd4\x06\xd5\xe8\xf3\x26\xa0\x44\x1e\x8d\x61\xa4\x15\x35\xff\xaf\x82\xe5\x32\x3e\x48\x8f\x82\x31\x3e\x15\xa8\x91\xb1\x59\x77\x01\xa0\xd4\x42\x55\xbd\x51\x83\x2b\xc4\x71\x2c\x62\xeb\x45\x89\x6d\xd1\x8e\x21\xb7\x11\x52\x0b\xa2\x9e\x3c\x7b\x72\xc2\x1a\x0d\x1f\xec\x78\xa2\x64\x2d\x8d\x31\x8c\xdc\xef\x70\xce\xf3\x91\xa4\x8c\x2d\x6e\xcb\xe4\xaa\x0d\xc9\x08\x47\x4b\xcb\x93\xf3\xb9\xb7\xcd\xd6\x2e\x38\x89\x78\x4b\xa0\x28\xfe\x63\x47\xb5\x8f\xd7\x98\xc2\xa1\x5c\xff\xdd\x78\xd0\x8d\x54\xdb\xf1\xa1\xae\x80\x5b\xa3\x4b\x28\xe4\x3f\x50\x72\x2b\xe3\xa3\x36\x17\x19\x9c\xb1\xb7\x68\x07\x4f\xf8\x12\x37\x39\x74\x9f\x3e\x56\x02\xbb\xc2\x9f\xe0\x9a\x00\x5c\xea\xa3\x82\x59\xc8\xe5\x17\x30\xd1\x6d\x22\x77\x74\xd0\x1e\x26\x70\x7b\x89\x0e\xee\x2a\x7d\x25\xb9\x29\x78\x75\x4e\x8d\xa7\x0b\x76\x6f\xa5\xee\xba\xe4\x73\x65\xba\xdf\xac\xfd\x34\xba\x29\xd5\x03\x3c\x21\xa9\x77\xf4\x50\x05\x62\xc8\x11\x44\xae\x11\xd8\xc2\xab\xf5\x2b\x78\x55\xbc\x84\xf9\xf3\x8c\xc6\x30\x7f\xa6\x31\x2c\x66\x34\x19\x4c\x72\x7e\x93\xc9\xd7\x57\xdc\x15\x23\xcb\x55\x08\x19\xb1\xe0\x70\x00\x74\x21\x8b\x1b\x0c\x29\x4d\x0f\x0d\xac\xb6\x6d\x57\x7c\xae\xc2\xf6\x7a\xf3\x03\x02\xbb\xe0\x0a\xdc\xce\x26\x7c\xf6\x16\x8c\xf9\x75\xa3\x63\x2e\xe9\x2f\x2f\x87\xbd\x25\x3b\x40\x1f\x97\xed\x20\x53\xf2\xc5\x93\xe0\x75\x5f\x01\x83\x4e\xa0\xc7\x2d\xab\xfd\xcc\x1a\xa6\x1a\x6d\x56\xbd\x1d\xe7\x1e\x4e\xd0\x55\x70\xa7\xef\x3e\xd7\x18\x0e\x14\xf0\x21\x73\x70\x5e\xd5\x4a\x63\x51\x62\x01\x73\x5b\xc0\x02\x65\xf0\x8a\xd7\x30\xb7\x5a\xc9\xf5\x18\x9c\xc7\x5a\xd9\x40\x7a\x0d\x05\xbe\x28\x83\x05\xd4\x4a\xc0\x7c\xb3\xae\xc4\xe2\x7f\x24\x9e\x2f\xe6\x87\x45\xff\xe3\xcf\x41\xce\xc3\x91\x6b\x2c\xa6\x53\xb5\xc2\xab\x3a\xb2\xc7\x52\x11\x7b\xd1\xd6\xe1\x8e\xc7\x81\x7f\x61\xca\x48\x9c\xba\x5d\x59\x52\x47\xae\xe7\x51\xfc\x0c\x00\x00\xff\xff\x9f\xb0\xc3\xe5\x78\x12\x00\x00") + +func testE2eTestingManifestsStorageCsiGcePdCsiControllerRbacYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiGcePdCsiControllerRbacYaml, + "test/e2e/testing-manifests/storage-csi/gce-pd/csi-controller-rbac.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiGcePdCsiControllerRbacYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiGcePdCsiControllerRbacYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/gce-pd/csi-controller-rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiGcePdNode_dsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x57\x5f\x6f\xe3\xb6\x13\x7c\xf7\xa7\x58\xf8\x5e\x7f\x92\xee\xf0\x43\x51\x40\x40\x1e\x7a\x17\x37\x2d\xd2\xe4\x8a\xcb\xb5\x7d\x28\x8a\x80\x26\xc7\x12\x61\x8a\x64\xc9\x95\x62\x7f\xfb\x82\x96\xed\xf8\x8f\xac\x24\xed\x11\x48\x60\x90\xdc\xd9\x21\x77\x66\x4d\x2f\xb5\x55\x25\x5d\x0b\x34\xce\x3e\x80\x27\xc2\xeb\xdf\x11\xa2\x76\xb6\x24\xe1\x7d\x2c\xba\x0f\x93\x06\x2c\x94\x60\x51\x4e\x88\xac\x68\x50\x92\x8c\x3a\xab\x24\x32\xaf\x32\xeb\x14\x26\xd1\x43\xa6\xd5\x08\x03\xc9\x2e\xa4\xcf\x44\x8d\x60\x59\xff\x22\xe6\x30\xb1\x9f\xa0\x04\x59\x52\x25\x7d\x26\x5d\xe3\x5b\x46\xe6\x53\xb2\xc8\xb0\x9c\x29\x1d\x97\x59\x42\x56\x41\x77\x08\x13\x22\x46\xe3\x8d\x60\x6c\xe1\x0e\x68\xa4\x61\x8e\x90\xdf\x8a\x4d\xb4\x23\x9d\xc6\x3b\xfa\xc9\x45\x26\x0b\x7e\x72\x61\x49\x4d\x1b\x99\xe6\xa0\x36\x42\xd1\xc2\x05\xd2\x96\x11\x84\x64\xed\x2c\x3d\x69\xae\xe9\x0f\x17\x96\xc6\x09\x45\x3f\x2b\x58\xd6\xbc\x26\x6d\xe9\xe6\x76\xb6\xc7\x8b\xda\x4a\x90\x66\x0a\xf0\x46\x48\x44\xba\xf9\x34\xa3\xbb\xed\x19\xe8\x01\xa1\x43\xe8\xb1\x6e\x6e\xcf\x16\x72\xfa\x82\xc6\x75\xd8\xc3\x71\xad\x23\x05\xfc\xdd\xea\x80\x06\x96\xe9\xa9\x86\x25\x1d\x63\x0b\xda\xac\x44\x67\x3a\x28\x12\x56\xd1\x1c\x0b\x17\x40\xc2\xae\x09\x2b\xef\x62\x1b\x40\x6e\xb1\x87\x6a\xc0\x41\xcb\x48\xde\x05\x8e\xf9\x76\xba\x76\x91\xef\xfb\xd3\x97\xc4\xa1\xdd\x65\x96\xce\xb2\xd0\x16\xe1\xe0\xa2\xb3\x03\x15\xf4\xf7\x99\x05\x54\x3a\x72\x10\x61\xbf\x89\x48\x37\xa2\x42\xaa\x48\xc8\xb5\x2b\xaa\x25\xb2\x00\x03\x11\x51\xa4\xc0\xa4\x9b\xb3\xe8\xb2\xfb\x90\xff\x3f\x7f\x9f\x55\x4b\xe4\xef\x0f\xa0\x44\xa8\x0e\xf2\xf7\x1c\xa6\x59\xd6\x5d\x7d\x37\x3d\x9f\x4d\xe8\x42\xa9\x80\x18\xaf\x52\xaa\xf4\x97\x47\x27\x97\x03\x7b\x97\xed\x1c\x06\xbc\x67\x90\x0a\x9c\x79\xc1\xf5\x55\xd1\x89\x50\x18\x3d\x2f\xb6\x5b\x0a\x6f\xda\x4a\xdb\x58\x78\x95\x6f\x00\xd9\x05\x51\x21\x4f\x54\xb5\x1b\xcc\x61\xf4\x02\x72\x2d\x0d\x8e\xa9\xfb\x80\x07\x76\xfe\x78\x92\x08\xab\x67\x39\x3e\x0f\xe9\x9a\x46\x24\x8b\xfe\x39\x2d\xe6\xda\x16\xb1\x9e\xfe\x8f\xa6\x99\x4c\xff\x43\x43\x59\x58\x50\x71\x48\x7e\x98\xde\x6b\xf6\xa4\x3b\xe8\x8f\xf0\xd7\x01\x0b\xd8\xee\xf4\xe2\xfb\xe2\xdf\xfe\xf6\x71\xf6\x78\xff\xf9\x7a\xf6\x78\xff\xc3\xdd\xec\x84\x77\x27\x4c\x8b\x1f\x83\x6b\xce\x0f\xb4\xd0\x30\xea\x0b\x16\xe7\x2b\xdb\xb5\x5f\x05\xd7\xe5\xc6\x9c\x79\xd2\xc8\xbd\x68\x70\xb0\xb5\x73\xa6\x6d\x70\xe7\x5a\xcb\x67\x8a\xe8\x89\xf5\x75\xca\x94\x0e\x27\x19\x9a\x14\xd4\xa3\xa7\x72\x0d\x06\x1f\xe9\x60\x1c\xe2\x70\xeb\x99\x35\xb6\xcd\xf1\xa0\xdb\xf4\x23\x42\xb6\x41\xf3\xfa\x93\xb3\x8c\x15\x9f\x0a\x43\x77\xda\xa0\x82\x3a\xb2\x20\x8d\x7a\xe9\x75\x0d\xaf\xec\xde\xe7\xdf\xff\x57\x63\xc1\x2a\xef\xb4\xe5\xab\xd6\xea\x55\x79\xd1\x5a\x2f\x97\x68\xe7\xba\xf1\x0b\x3e\x31\xe0\xe0\xce\xe0\xbc\xa8\x36\x25\x28\x69\xfa\x51\x2b\x1d\xb0\x69\xd2\xc2\x9c\xf2\xff\x06\xe2\x50\xe8\xb4\xc4\x0b\xc1\x0a\xdd\xd1\xea\x3b\xfa\x5a\x83\x16\xce\x18\xf7\xa4\x6d\xd5\xef\x8d\x24\x02\x76\xed\x5c\x11\x3b\xe2\xa0\xab\x0a\x61\xd3\x87\xa9\x55\xe8\x84\x6a\x68\x11\x5c\x73\x02\xb6\xef\xc7\x83\x0c\x53\x60\x16\x5a\x83\x98\x81\xe5\x08\x4b\xb0\x2c\xda\x53\xaa\x03\x28\x46\xcf\x47\x50\x52\x75\xc6\x51\x92\x36\x2e\x94\x6e\xeb\xa2\xd6\x5e\x86\x88\xeb\x38\x12\xfa\xbc\xda\x2b\x6e\xe0\x1b\x6a\xc4\xce\xe9\xa2\x37\x40\xc7\x16\x1c\x94\xde\xae\xf7\x3f\x6e\xf1\xd6\xc5\x51\x10\xaf\x3d\x4a\xba\xde\x68\xcf\x85\xf5\x19\x8b\x61\xb9\xbf\x85\xc0\x9b\xd2\x0d\x6a\xfc\xdf\x1c\xf7\xc2\x57\xdd\x18\x99\xcf\xe1\x53\x80\x60\x9c\x91\x1a\xf4\xce\x28\xa9\x53\x51\x5c\x3a\xf6\x37\x33\xd8\x90\xb9\x5e\x34\xd6\xe8\x11\x06\x5d\xf6\x52\xf9\x2e\xba\x6f\x34\xd5\xa0\x15\x5f\x95\xea\xcc\xa2\xa3\x79\x06\xfd\xfa\x52\x9e\x63\x1f\x8f\xe2\x9f\x5a\x7e\x18\xfa\x1d\xd5\xcc\x3e\x96\xc5\x46\xb2\xc1\x82\x11\x93\x34\x95\x93\xb1\x90\xce\x4a\x78\xde\x7c\x58\xe8\xaa\xdd\x3e\x7a\x52\x65\x39\x13\x56\x65\xec\x0c\xb6\x93\x7b\xbc\x07\x80\xa6\xe9\xd1\xa1\x85\x21\x29\x22\xa6\x39\x7d\x4d\x6f\xee\x27\x6d\x0c\x6d\x23\x40\xe8\x10\xd6\x5c\x6b\x5b\xe5\x74\xef\x14\xd2\xfb\xcc\x3b\x9b\x1e\xe4\xb1\x76\xad\x51\x7b\xc0\x39\x28\xca\x1a\xaa\x35\x50\xe4\x2c\x09\x63\x28\xbd\x67\xf6\x2f\xee\x67\x16\xfb\xc6\x95\x91\xf3\x69\xce\x85\x92\x66\x2b\x1d\x79\x77\x17\x29\xf0\xe1\xe8\xb7\x55\x1a\xc7\x67\x77\xb1\x24\xa3\x6d\xbb\x9a\xfc\x13\x00\x00\xff\xff\xd3\x16\xd5\xf9\xd4\x0d\x00\x00") + +func testE2eTestingManifestsStorageCsiGcePdNode_dsYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiGcePdNode_dsYaml, + "test/e2e/testing-manifests/storage-csi/gce-pd/node_ds.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiGcePdNode_dsYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiGcePdNode_dsYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/gce-pd/node_ds.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathAttacherYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x53\xc1\x6e\xdb\x3a\x10\xbc\xeb\x2b\x16\x79\xd7\x47\xbb\x49\x1b\xa0\x10\x90\x43\x90\xe4\x10\x34\x4d\x0b\xb8\xe8\x7d\x4d\xad\xa5\x85\x29\x92\x25\x97\x8a\xf5\xf7\x05\x65\x37\xa6\xec\xb6\x41\x05\xf8\xb2\x9c\x19\xce\x0e\xc7\x5b\xb6\x4d\x0d\x2b\x0a\x03\x6b\xaa\xd0\xf3\x77\x0a\x91\x9d\xad\x61\xb8\xac\x7a\x12\x6c\x50\xb0\xae\x00\x2c\xf6\x54\x83\x8e\xac\x3a\x17\xc5\xa3\x74\x0a\x45\x50\x77\x14\x2a\x00\x83\x6b\x32\x31\xe3\x00\xd0\xfb\x3f\x01\xa3\x27\x9d\x41\x91\x0c\x69\x71\xe1\x4d\x02\x80\x77\x41\x0e\xc2\xea\x60\xa2\x49\x7d\x3f\x4e\x93\xfd\x71\x0d\x97\x57\xef\x3f\x5c\x57\x95\x52\xaa\x3a\x2c\x24\x28\xb4\x49\x66\x45\x32\x5b\x0a\xbd\x8f\xcb\x7f\xd8\xec\x68\x78\x0a\xe8\x79\x82\x5e\xfc\x16\x7b\x51\x01\x04\xf2\x86\x35\xc6\x1a\x2e\xcf\xb6\xec\x51\x74\xf7\x54\xe4\xf4\xc6\xe2\x42\xbd\x37\x28\x74\x60\x17\x86\xf3\x67\x66\x42\x6f\x48\x01\xfc\xda\x63\x82\x6e\x36\x6c\x59\xc6\x23\xd9\xbb\xe6\xf6\x6c\x98\xb7\xf9\x91\x38\x50\x73\x9f\x02\xdb\x76\xa5\x3b\x6a\x92\x61\xdb\x3e\xb6\xd6\xbd\x8e\x1f\x76\xa4\x93\xe4\x70\x0b\xa6\xda\xfb\x5b\xcd\x02\x38\x7e\x53\x14\x0f\x3b\x1f\x28\xe6\x67\x89\xa7\xe7\x0a\xb6\x34\x4e\x8f\x75\x72\x00\xe0\x3c\x05\xcc\x92\xf0\x68\xcf\x0e\x07\x34\x89\xce\xd4\xb2\x5e\x99\x8c\x37\xa9\xe5\x39\x59\x9c\x77\xc6\xb5\xe3\xa7\x7c\xed\x36\xad\x29\x58\x12\x8a\x0b\x76\xcb\xcc\xca\x0d\x39\xe0\x0f\x45\xb8\xd5\xda\x25\x2b\xcf\xaf\xd5\x99\xa5\x0d\xa0\x9d\x15\x64\x4b\xa1\x70\xa3\x8a\xa6\x9d\xc0\xf3\xc7\x3d\xb6\x54\xc3\xf6\x63\x5c\xb4\x3a\xe4\xab\x23\xb7\x2a\x8a\x0b\xd8\xd2\xb2\x24\xd5\xc3\xd5\xe2\x6a\xf1\xae\xe0\x62\x68\x4f\xd6\x56\xa0\xd4\x70\x73\x7d\x36\x9b\x74\x9a\x26\x27\x7f\x93\x45\xf3\x6f\x11\x9d\xde\x16\xc8\x48\x3a\x05\x96\xf1\xce\x59\xa1\x9d\xcc\x85\xff\x83\x6f\x1d\x47\xe0\x08\x96\x34\xc5\x88\x61\x04\x67\xcd\x08\x1b\x17\x20\x8e\x51\xa8\x8f\xf0\xc2\xd2\xc1\xea\xe1\x89\x6d\xda\xfd\x0f\x2f\x1d\x05\x3a\x11\xb1\xce\x2a\x1f\x78\x60\x43\x2d\x35\x10\xb9\x21\x8d\xa1\xc8\x0d\x34\x5a\xeb\x04\x50\xe7\x5b\x20\x59\xde\x41\xe3\x7a\x64\x0b\xd9\x2e\xc9\x89\xa0\x0e\x84\x42\x0d\xac\x47\x28\x74\xef\x56\x8f\xd0\x04\x1e\xa8\x90\x5e\xcc\x98\x47\x70\x0d\x12\x52\xe9\x73\x70\x26\xf5\xf4\x39\x3f\x74\x9c\xb7\xbb\xcf\xb3\xaf\x28\x5d\x0d\x39\xc0\x99\xe0\xfe\x91\xf7\x1e\x55\xc3\xa1\xaa\x4a\xb5\x59\x1f\x72\xb7\x26\x95\xb9\xa3\xbd\xee\x80\x61\x69\x78\xbd\xcc\x75\x34\x24\xcb\x7d\x6d\xe3\xb2\xac\xf2\xbc\xc4\xa3\xa7\x1a\xee\x39\x4c\xff\xb9\xf1\x4b\xb8\x9b\x22\xa9\xfe\x62\xed\x67\x00\x00\x00\xff\xff\x6b\x30\xa8\x26\xfe\x05\x00\x00") + +func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathAttacherYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathAttacherYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-attacher.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathAttacherYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathAttacherYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-attacher.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathDriverinfoYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x90\x41\x6b\xe3\x40\x0c\x85\xef\xfe\x15\x8f\xec\x75\xd7\xcb\xde\x16\x5f\xdb\x1e\x02\x0d\x2d\xa4\xf4\x3e\x78\x5e\x6a\x11\x8f\x34\x8c\xe4\x94\xfc\xfb\x62\x93\xe6\xd0\x9b\x04\xd2\xf7\x3e\x29\x55\x79\x67\x73\x31\x1d\xe0\x61\x2d\x7d\xb0\x3f\xff\xf7\x5e\xec\xef\xe5\x5f\x77\x16\xcd\x03\x1e\x8e\xfb\xc7\x26\x17\xb6\xae\x30\x52\x4e\x91\x86\x0e\xd0\x54\x38\x60\x32\x8f\x9a\x62\xea\x47\x97\xdb\x62\xe7\x95\xe3\x3a\xf1\x0b\xc7\xa5\x56\x6b\xe1\xa8\x6b\x86\x07\x35\x90\x34\x83\x75\x62\x61\x4b\x33\x44\x67\x51\xe2\x62\xf3\x52\xe8\x7d\x87\x5b\xf9\x2c\x27\x8e\xd7\x71\xe6\xc1\x32\x7d\xa5\xfd\xc1\xeb\x1d\xb2\xb5\x4f\xdf\x90\x2d\xea\xcd\x90\x19\x6c\x65\xc5\xa5\x40\x5b\x34\xa4\x10\x9f\x93\x8c\x13\x8a\x65\x22\xdd\xd8\x58\x9c\xfe\x1b\xd5\x32\x44\x4f\xb6\x19\x49\xf8\x86\xd9\xad\x77\xfc\x78\xc4\xdd\x76\x07\x6a\xb4\x2b\x52\x23\x94\xcc\xcc\xab\x70\xb5\xbc\xd7\x93\xbd\xe8\xc1\x16\x8d\x01\xd1\x16\x76\x5f\x01\x00\x00\xff\xff\x6e\x73\xb4\xce\x58\x01\x00\x00") + +func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathDriverinfoYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathDriverinfoYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-driverinfo.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathDriverinfoYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathDriverinfoYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-driverinfo.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathPluginYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x58\x6d\x6f\xdb\x36\x10\xfe\xee\x5f\x71\x48\x0a\xb4\x03\x2a\x2b\xe9\x1b\x52\x01\xfe\xb0\x26\xd9\x56\xac\x4d\x82\x25\xeb\x3e\x06\xb4\x78\xb6\x0e\xa1\x48\x81\x3c\x29\xf1\x7e\xfd\x70\x94\xed\x48\xb6\xe2\xb8\xc5\x06\xcc\x40\x81\x96\xbc\x37\xde\xdd\xf3\xdc\xa9\x87\x70\x8d\xbe\xa1\x1c\x41\xe3\x8c\x2c\x6a\x28\xd0\xe3\x6b\xa8\x4c\x1d\x20\xb4\x57\x17\xaa\x44\x98\xa2\x71\xf7\x40\x16\xae\x59\x31\xce\x6a\x73\x8d\xfc\x7a\x74\x08\xca\x23\x58\x44\x8d\x1a\x9c\x35\x0b\x98\x62\xae\xea\x80\xe0\x66\x90\x3b\xab\x89\xc9\x59\xc0\x87\xca\xa8\x68\x9d\xec\xe8\x10\x0a\xe6\x2a\x64\x69\x3a\x27\x2e\xea\xe9\x38\x77\x65\x7a\x57\x4f\xd1\x5b\x64\x0c\xdd\xbf\x52\x08\x35\x86\xf4\xc3\xc7\x0f\x47\x27\xa3\xd1\x1d\x59\x9d\xad\xe2\x1d\xa9\x8a\xbe\xa1\x0f\xe4\x6c\x06\xcd\xf1\xa8\x44\x56\x5a\xb1\xca\x46\x00\x56\x95\x98\x41\x1e\x28\x29\x5c\xe0\x4a\x71\x51\x99\x7a\x4e\x76\x04\x60\xd4\x14\x4d\x10\x21\x00\x55\x55\x83\x52\xa1\xc2\x5c\x24\x02\x1a\xcc\xd9\xf9\xdd\xd2\x00\x95\xf3\xbc\x34\x99\x2c\x7d\xeb\xba\x2c\x17\xf1\xa4\xbd\xce\xe0\xf8\xcd\xdb\x77\xef\x47\x49\x92\xac\x9e\xf1\x98\xc6\xde\x53\x54\x55\x85\x74\xdf\xf7\x3c\x46\xba\x2e\x54\x06\x07\xdb\x82\x07\x23\x80\x43\xb8\xb4\x08\x1e\x2b\x43\xb9\x8a\xb5\xca\xe2\xe9\x6f\x2e\x30\x88\x28\x68\x4f\x0d\xfa\xb6\x8c\xf7\xce\xdf\x05\xb8\x2f\xd0\x02\x36\xe8\x17\x5c\x90\x9d\x83\xaf\x6d\x88\x4a\xce\x82\x82\x40\x76\x6e\x10\xac\xd3\x38\x86\xbf\x10\x54\x5e\x10\x36\x08\x5c\x28\x86\xe9\x02\x02\x2b\xcf\xa2\x46\x0c\xce\xe6\x08\xca\x6a\xe0\x02\x6d\x34\x91\xbb\xc4\xb8\x5c\x31\x82\x32\x06\x1c\x17\xe8\xa1\x72\x3a\x40\x43\x0a\xc8\x32\xfa\xa4\x72\x1a\xd4\x6c\x46\x96\x58\x92\xb9\x8c\x3d\x64\x70\xbc\x55\x9d\x52\x71\x5e\x7c\xe9\x14\x77\x57\xc1\x18\xcb\xca\x28\xc6\xa5\x6a\x27\xd3\xf2\x33\x3d\x2b\xbb\xec\x00\xac\x0a\x20\xbf\xdc\x59\x96\x26\xf7\x1d\xdd\x55\x3f\x48\x8e\x92\x36\xbf\x89\xc7\x39\x05\xf6\xca\xaf\xa5\x00\xa8\x54\x73\xcc\xe0\xee\x24\x8c\xe7\xb9\x1f\x93\x4b\x03\xcd\x93\xc0\xce\xab\x39\xa6\xe2\x7c\xd0\x42\xd6\x1c\x8f\xdf\x8e\x8f\x3a\x86\x94\x9f\x77\xdc\xb7\x21\x24\x49\x33\x79\xbf\x75\x26\x46\x95\xd6\x1e\x43\x98\x88\x07\xf9\x33\x0e\x2e\xbf\xdb\x92\x14\x40\x1a\xe4\xb5\x5b\x81\x74\x22\x89\x98\xa4\x8d\xf2\xa9\xa1\x69\xba\x14\x49\xdb\xd4\x84\xb4\x9b\xae\x21\xc3\x01\xf3\xda\x13\x2f\x4e\x9d\x65\x7c\xe0\x7e\xc4\x87\x70\x53\x50\x00\x0a\x60\x31\xc7\x10\x94\x5f\xb4\x4d\x39\x73\x1e\xc2\x22\x30\x96\x01\xee\x89\x0b\xb8\x3e\xff\x42\xb6\x7e\x78\x2d\x8d\xea\x71\xc3\x88\x95\x28\x3d\x35\x64\x70\x8e\x1a\x02\x69\xcc\x95\xef\x94\x09\x72\x65\xad\x63\x50\xb9\x78\x81\xda\xd2\x03\x68\x57\x2a\xb2\x20\xe1\x22\x6f\x18\xcc\x3d\x2a\x46\x2d\xad\xdd\xb1\x7b\x7a\xfd\x79\x85\x9c\xb5\xe9\x71\x4f\xf3\x51\x38\x03\xf6\x75\x37\x4e\xb4\xcd\x66\xb5\xda\x86\xf9\xfd\xcf\x4f\xe7\xb7\x17\x97\x67\xe7\xb7\x17\x3f\x7f\x3d\xef\x89\x00\x34\xca\xd4\xf8\x8b\x77\x65\xb6\x71\x01\x30\x23\x34\xfa\x0f\x9c\x6d\xdf\x48\x23\xf7\x18\x73\x5b\x20\x2a\x5f\x29\x2e\xb2\xd8\xd8\x63\xe9\x39\xe1\x94\x8e\x68\xe3\x4c\x5d\xe2\x57\x57\x5b\xee\xf5\x59\x02\xa5\x9c\xb5\xca\x52\xf1\x9e\xf9\xf6\x4d\x6d\x52\x13\x4d\xfe\x49\xc5\x6e\x8b\x0d\x58\xe8\x75\xe0\x2e\x3b\xd2\x7f\x82\xe9\x0d\xa1\x2e\x95\xae\xaf\xb7\xc0\xba\x6a\xdc\xbd\xf1\xd9\x27\x06\x01\xe5\xbb\x67\x41\x79\x90\x2c\xd1\x2c\x3e\x27\x2b\x0b\x63\xc1\x8a\x78\x21\x77\xb0\xad\xd0\x4c\xde\x0f\x9c\xa2\xd5\x95\x23\xcb\x93\x17\xaf\x4e\xaf\x3f\xdf\x9e\x5f\x9c\x5d\x5d\x7e\xbe\xb8\xf9\x69\x40\x54\x0a\x4a\x7a\xf2\xe2\x55\xbf\xbd\x36\x44\x05\x7f\xd8\x22\x4e\xd3\x6c\x86\x1e\x85\xbc\xd9\xc1\xe0\xbc\x4e\x96\xdc\xb1\x22\x27\x79\x4a\x64\x87\x54\x63\x65\xdc\x62\xc3\x74\x02\xf7\x08\x85\x6a\x10\x14\x30\x06\x0e\xed\xb8\xc8\x0b\xcc\xef\x42\xe4\x49\x30\x54\x12\x87\xf1\x76\xf8\xa5\x7a\x68\xfb\x2f\x54\xe8\x45\x74\x72\x7c\x74\xb0\x0f\x9a\xba\x79\x19\xc2\x52\x16\xc1\x9f\xa5\xe9\x2e\x22\xfc\x7f\x03\x73\x27\xa3\xee\x60\xa0\xce\xf2\xb2\x7a\xe8\x9a\xc6\xae\xe2\xe6\xf2\xf1\xe4\xe3\xc9\x00\x86\x0a\x54\x86\x8b\xbf\x37\xfc\x38\x76\xb9\x33\x19\xdc\x9c\x5e\x75\x6e\x0c\x35\x68\x31\x84\x2b\xef\xa6\xd8\x0f\x6d\xa6\xc8\xd4\x1e\x6f\x0a\x8f\xa1\x70\x46\x67\xd0\x1f\x55\xb2\x2b\xfe\x8a\xbc\x99\xb6\xaa\xc5\xf9\x50\x10\xab\x8d\x6b\xe8\x4e\x56\x09\x52\xe6\x0c\x8d\x5a\x5c\xa3\x2c\xa8\xb2\x4d\x1c\xf5\x64\x98\x4a\x74\x35\xaf\xaf\xdf\xf6\x9f\x88\x9e\x9c\x5e\x5f\xbe\xd9\x83\x1b\x9f\x63\xc7\x9d\xfc\xb8\xa9\xbc\x35\x71\x9d\x0e\x1b\xd6\x5a\x71\xef\x2a\x35\x8f\x4c\x99\xc1\x27\xd2\xe4\x31\x97\x7f\x28\x33\xe8\x3b\xea\x44\x1a\xf9\x5e\xff\xed\xc4\xff\x17\x42\x58\x5a\x7a\xc6\xff\x93\xcc\x3e\xc8\xed\x4f\xdb\xd1\xd8\x0c\xaa\x6b\x6c\x7a\x9a\x2b\xdc\xaf\x5a\x38\xa9\xa4\x87\xff\xcb\x89\xb8\x7b\xd6\xac\xe2\x88\x61\xc8\xa8\x39\xde\x39\x6a\xf6\xdd\xf4\x44\xae\x05\x4c\x22\xe8\x99\x44\xd0\x8f\xba\x2f\xec\x6d\xb5\x42\xf2\xf1\x65\x7d\x6c\xec\x6c\x91\xde\x52\xd8\x47\xdc\xa2\xc2\x0c\xce\x62\x7f\x38\xbf\xb8\xf4\xa7\x71\xd3\x1a\xed\x91\xae\xef\x0d\x65\x13\x2d\xfb\xba\x7e\x02\x1f\x3f\x96\x89\xdb\xe5\x1e\xb3\xd8\x15\xca\x56\x08\x4f\x2e\x3f\x3f\x16\xc4\x77\xf9\x1e\xc2\xe6\x53\x6e\x0f\xe1\xa5\x78\x7e\x29\x0b\x7c\xdc\xcb\xe1\xea\x1b\x08\x22\xe5\xa0\x92\x39\x17\x38\xfe\x6f\x41\xd4\x1f\x6f\xe8\xd6\xf2\x55\x09\x29\x97\x95\x88\x2b\x13\x1c\x54\x2e\x04\x9a\x1a\x84\xfb\x82\x8c\x7c\x5e\x8a\x45\xf9\x02\x30\x06\xe2\xfe\xde\x28\x32\x4a\x04\xd4\x8c\xe5\x2b\x32\x06\xfb\x38\xc6\xc0\x63\x5c\xdd\xc9\x59\x70\x3e\x7a\x05\x8f\x53\xe7\x78\x57\xba\xba\xdd\x1a\x09\x25\xfd\xa1\xc6\x19\xa4\xa3\x67\x2a\xb6\xc9\x4d\xcf\x55\x67\xc5\x59\xff\x04\x00\x00\xff\xff\xb0\xb8\x68\x07\xcd\x11\x00\x00") + +func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathPluginYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathPluginYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-plugin.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathPluginYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathPluginYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-plugin.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathProvisionerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x53\xc1\x6e\xdb\x3a\x10\xbc\xeb\x2b\x16\x79\xd7\x47\xfb\xf9\xb5\x29\x0a\x01\x3e\x04\x49\x0e\x41\xd3\xb4\x80\x83\xde\xd7\xd4\x5a\x5a\x98\x22\x59\x72\xa9\x58\x7f\x5f\x50\x76\x12\x49\x46\x93\x96\x80\x2e\xe4\xcc\x70\x76\x38\xda\xb3\xad\x4a\xd8\x50\xe8\x58\x53\x81\x9e\x7f\x50\x88\xec\x6c\x09\xdd\xaa\x68\x49\xb0\x42\xc1\xb2\x00\xb0\xd8\x52\x09\x3a\xb2\x6a\x5c\x14\x8f\xd2\x28\x1f\x5c\xc7\x19\x4c\x01\x0a\x00\x83\x5b\x32\x31\x63\x01\xd0\xfb\xb7\xc0\xd1\x93\xce\xc0\x48\x86\xb4\xb8\xf0\x47\x24\x00\xef\x82\x9c\x2e\x50\x27\x43\x55\x6a\xdb\x7e\xd8\x39\x1e\x97\xb0\xfa\xff\xc3\xc7\xcb\xa2\x50\x4a\x15\xa7\xe1\x04\x85\x76\xc9\x6c\x48\x26\x03\xa2\xf7\x71\xf9\x57\x53\x8e\x7c\x0f\x79\x3d\x0c\xe8\x8b\xdf\xc1\x2f\x0a\x80\x40\xde\xb0\xc6\x58\xc2\xea\x6c\xde\x16\x45\x37\xf7\xa3\xd4\xde\x89\xa0\x00\x10\x6a\xbd\x41\xa1\x93\xc0\xc8\x79\x5e\x66\xa2\xf5\xbe\x1a\xc0\xf3\x40\x03\x7a\xb7\x63\xcb\xd2\xbf\xf2\xbd\xab\xae\xce\x36\xf3\x4c\x3f\x13\x07\xaa\x6e\x52\x60\x5b\x6f\x74\x43\x55\x32\x6c\xeb\xbb\xda\xba\x97\xed\xdb\x03\xe9\x24\x39\xe8\x11\x53\x1d\x2d\x6e\x26\x31\xbc\xae\x21\x90\xdb\x83\x0f\x14\xb3\xc7\x38\x3f\x57\xb0\xa7\x7e\x78\xb8\xd9\x01\x80\xf3\x14\x30\x4b\xc2\x9d\x3d\x3b\xec\xd0\x24\x3a\x53\xcb\x7a\xe3\x70\xbc\x49\x35\x4f\xc9\xe2\xbc\x33\xae\xee\xbf\xe4\x6b\xf7\x69\x4b\xc1\x92\x50\x5c\xb0\x5b\x66\x56\x6e\xcb\x09\x7f\x6a\xc4\x95\xd6\x2e\x59\x79\x78\xa9\xd1\x3c\x70\x00\xed\xac\x20\x5b\x0a\x23\x43\x6a\x54\xbc\x73\x46\x5e\xdc\x62\x4d\x25\xec\x3f\xc7\x45\xad\x43\x36\x10\xb9\x56\x51\x5c\xc0\x9a\x96\x33\x5e\xd9\xad\x16\x9f\x16\xff\x8d\xe8\x18\xea\xd9\xfc\x0a\x54\xb7\xbe\x9c\x6f\xa9\xac\x84\x55\x95\x5f\x60\x9d\x65\xf3\xb7\x88\x4e\xef\xcf\x90\x3b\x42\x49\x81\x54\x8d\x42\x71\xfd\x78\x4a\x6a\x2d\x21\xd1\x08\x1b\x49\xa7\xc0\xd2\x5f\x3b\x2b\x74\x90\xa9\x87\x7f\xe0\xb1\xe1\x08\x1c\xc1\x92\xa6\x18\x31\xf4\xe0\xac\xe9\x61\xe7\x02\xc4\x3e\x0a\xb5\x11\x9e\x58\x1a\xd8\xdc\xde\xb3\x4d\x87\x7f\xe1\xa9\xa1\x40\x33\x11\xeb\xac\xf2\x81\x3b\x36\x54\x53\x05\x91\x2b\xd2\x18\x46\x41\x83\x46\x6b\x9d\x00\xea\x7c\x0b\x24\xcb\x07\xa8\x5c\x8b\x6c\x21\x8f\x46\x32\x13\xd4\x81\x50\xa8\x82\x6d\x0f\x23\xdd\xeb\xcd\x1d\x54\x81\x3b\x1a\x49\x2f\x26\xcc\x57\x70\x09\xb3\x1c\x3a\x67\x52\x4b\x5f\x73\x39\xce\x1e\xa2\xcd\xbb\xdf\x51\x9a\x12\x72\xdc\xb3\x9a\x1e\x9b\x71\xf4\xa9\x2a\x7e\x2e\xc5\x51\x70\xd2\xa1\x5c\xc9\x41\x66\x6a\xea\x28\xdc\x61\x58\x1a\xde\x2e\x73\x8b\x0d\xc9\xf2\xd8\xf6\xb8\x1c\xff\x01\xd3\xee\xf7\x9e\x4a\xb8\xe1\x30\xfc\xaa\xfd\xb7\x70\x3d\xa4\x52\xbc\xe1\xec\x57\x00\x00\x00\xff\xff\x01\x46\xee\x3e\x4d\x06\x00\x00") + +func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathProvisionerYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathProvisionerYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-provisioner.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathProvisionerYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathProvisionerYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-provisioner.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathResizerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x53\xc1\x6e\xdb\x38\x10\xbd\xeb\x2b\x06\xd9\xeb\xca\x4e\x76\x37\xc0\x42\x40\x0e\x41\x92\x43\xd0\x34\x2d\xe0\xa2\x77\x9a\x1c\x4b\x03\x53\x24\x3b\x1c\x2a\x56\xbf\xbe\xa0\xec\xc4\x94\xdd\xa6\x25\xa0\xcb\xf0\xcd\xe3\x9b\x37\x4f\x5b\x72\xa6\x81\x15\xf2\x40\x1a\x2b\x15\xe8\x2b\x72\x24\xef\x1a\x18\xae\xaa\x1e\x45\x19\x25\xaa\xa9\x00\x9c\xea\xb1\x01\x1d\xa9\xee\x7c\x94\xa0\xa4\xab\x19\x23\x7d\x47\xae\x00\xac\x5a\xa3\x8d\x19\x06\xa0\x42\xf8\x05\x2e\x06\xd4\x19\x13\xd1\xa2\x16\xcf\xbf\xc3\x03\x04\xcf\x72\xa0\xad\x0f\x0a\x4c\xea\xfb\x71\xaa\xec\xaf\x1b\xb8\xfa\xe7\xdf\xff\xae\xab\xaa\xae\xeb\xea\x30\x8d\x28\xc1\x4d\xb2\x2b\x94\xd9\x44\x2a\x84\xb8\xfc\xf3\xb1\x8e\x72\x27\x73\x9e\x27\xe4\xc5\xcf\xa0\x17\x15\x00\x63\xb0\xa4\x55\x6c\xe0\xea\x6c\xc4\x5e\x89\xee\x9e\x0a\x8f\xde\x9f\x5a\xb0\x0f\x56\x09\x1e\x9a\x0b\xb5\xf9\xd8\x19\xcf\xfb\x4c\x00\xaf\x43\x4c\xc8\xcd\x86\x1c\xc9\x78\xec\x0d\xde\xdc\x9e\x15\xf3\x2c\xdf\x12\x31\x9a\xfb\xc4\xe4\xda\x95\xee\xd0\x24\x4b\xae\x7d\x6c\x9d\x7f\x2b\x3f\xec\x50\x27\xc9\xc6\x16\x9d\xf5\x5e\xde\x6a\x36\xfe\xf1\x4c\x46\x3c\xec\x02\x63\xcc\x2b\x89\xa7\xf7\x35\x6c\x71\x9c\x16\x75\x72\x01\xe0\x03\xb2\xca\x94\xf0\xe8\xce\x2e\x07\x65\x13\x9e\xb1\x65\xbe\xd2\x98\x60\x53\x4b\xf3\x66\xf1\xc1\x5b\xdf\x8e\x1f\xf2\xb3\xdb\xb4\x46\x76\x28\x18\x17\xe4\x97\xb9\x2b\xa7\xe3\x80\x3f\xa4\xe0\x56\x6b\x9f\x9c\x3c\xbf\xc5\xa6\x34\x1b\x40\x7b\x27\x8a\x1c\x72\x21\xa6\x2e\x42\x36\x47\xe7\x43\xbd\x6a\xb1\x81\xed\xff\x71\xd1\x6a\xce\x0f\x47\x6a\xeb\x28\x9e\x55\x8b\xcb\xa2\xa7\x19\x2e\x17\xd7\x8b\xcb\xa2\x55\x71\x7b\x32\x73\x0d\xf5\x70\x73\x7d\x5a\xca\x24\xca\x98\x6c\xfa\x4d\x66\xcc\xdf\x22\x7a\xbd\x2d\x80\x11\x75\x62\x92\xf1\xce\x3b\xc1\x9d\xcc\x69\xff\x82\x2f\x1d\x45\xa0\x08\x0e\x35\xc6\xa8\x78\x04\xef\xec\x08\x1b\xcf\x10\xc7\x28\xd8\x47\x78\x21\xe9\x60\xf5\xf0\x44\x2e\xed\xfe\x86\x97\x0e\x19\x4f\x48\x9c\x77\x75\x60\x1a\xc8\x62\x8b\x06\x22\x19\xd4\x8a\x0b\xcf\x40\x2b\xe7\xbc\x80\xd2\xf9\x15\x48\x8e\x76\x60\x7c\xaf\xc8\x41\x96\x8b\x72\x42\xa8\x19\x95\xa0\x81\xf5\x08\x05\xef\xdd\xea\x11\x0c\xd3\x80\x05\xf5\x62\xd6\x79\x04\x37\x20\x9c\x4a\x9d\x83\xb7\xa9\xc7\x8f\x79\xc7\x67\xde\xf6\xb9\xfa\x59\x49\xd7\x40\xb6\xf0\x24\x6d\xfb\x25\xef\x75\xd6\x86\x5e\x77\xbc\x27\x9c\xc5\x21\x27\x6b\xa2\x99\x8b\xda\x13\x0f\x8a\x97\x96\xd6\xcb\x1c\x46\x8b\xb2\xdc\x87\x36\x2e\xcb\x20\xcf\x23\x3c\x06\x6c\xe0\x9e\x78\xfa\xe3\xc6\x4f\x7c\x37\xb9\x52\xbd\xa3\xec\x47\x00\x00\x00\xff\xff\xb7\x8c\xb0\xd9\xf5\x05\x00\x00") + +func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathResizerYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathResizerYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-resizer.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathResizerYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathResizerYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-resizer.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathSnapshotterYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x53\x4d\x6f\xdb\x38\x10\xbd\xeb\x57\x0c\xb2\xd7\xa5\xbd\xce\x6e\x80\x85\x80\x1c\x82\x24\x87\xa0\xe9\x07\xe0\xa2\xf7\x31\x35\x96\x06\xa6\x48\x96\x1c\x2a\xd6\xbf\x2f\x28\x39\xb5\x24\xa3\x49\x4b\x40\x97\xe1\xbc\xc7\x37\x6f\x9e\x0e\x6c\xab\x12\xb6\x14\x3a\xd6\x54\xa0\xe7\x6f\x14\x22\x3b\x5b\x42\xb7\x29\x5a\x12\xac\x50\xb0\x2c\x00\x2c\xb6\x54\x82\x8e\xac\x1a\x17\xc5\xa3\x34\x2a\x5a\xf4\xb1\x71\x22\x14\x0a\x00\x83\x3b\x32\x31\xb7\x02\xa0\xf7\x6f\xf4\x46\x4f\x3a\xf7\x45\x32\xa4\xc5\x85\xdf\xc1\x00\x78\x17\xe4\x44\xaf\x4e\x6a\xaa\xd4\xb6\xfd\x50\x19\xaf\x4b\xd8\x5c\xff\xfb\xdf\x4d\x51\x28\xa5\x8a\xd3\x64\x82\x42\xfb\x64\xb6\x24\xb3\xe9\xd0\xfb\xb8\xfe\xb3\x11\xcf\xb2\x07\xb3\x3e\x0d\xdd\x57\xbf\x6a\xbf\x2a\x00\x02\x79\xc3\x1a\x63\x09\x9b\x8b\x71\x5b\x14\xdd\x3c\x4f\x3c\x7b\xdf\x01\xa1\xd6\x1b\x14\x3a\x11\x4c\x94\xe7\x63\x66\x5c\xef\xb3\x01\xbc\x0e\x34\x74\xef\xf7\x6c\x59\xfa\x33\xde\xbb\xea\xee\xa2\x98\x67\xfa\x9e\x38\x50\xf5\x90\x02\xdb\x7a\xab\x1b\xaa\x92\x61\x5b\x3f\xd5\xd6\xfd\x2c\x3f\x1e\x49\x27\xc9\x46\x4f\x90\x6a\x94\xb8\x9d\xd9\x70\x3e\x83\x21\x8f\x47\x1f\x28\xe6\x15\xc5\xe5\xbd\x82\x03\xf5\xc3\xe2\x16\x17\x00\xce\x53\xc0\x4c\x09\x4f\xf6\xe2\xb2\x43\x93\xe8\x82\x2d\xf3\x4d\xcd\xf1\x26\xd5\x3c\x07\x8b\xf3\xce\xb8\xba\xff\x90\x9f\x3d\xa4\x1d\x05\x4b\x42\x71\xc5\x6e\x9d\x51\x39\x2d\xa7\xfe\x53\x22\xee\xb4\x76\xc9\xca\xe8\xfa\xd2\x6c\x00\xed\xac\x20\x5b\x0a\x13\x31\x6a\x12\xba\x4b\x44\x3e\xdc\x62\x4d\x25\x1c\xfe\x8f\xab\x5a\x87\xfc\x78\xe4\x5a\x45\x71\x01\x6b\x5a\x2f\x70\x65\x77\xbd\xda\xac\xfe\x99\xc0\x31\xd4\x8b\xd9\x15\xa8\xee\xf6\x66\x59\x52\x99\x09\xab\x2a\xbb\x7f\x9b\x69\xf3\xb7\x8a\x4e\x1f\x26\x9d\x91\x74\x0a\x2c\xfd\xbd\xb3\x42\x47\x99\xf3\xfe\x05\x5f\x1b\x8e\xc0\x11\x2c\x69\x8a\x11\x43\x0f\xce\x9a\x1e\xf6\x2e\x40\xec\xa3\x50\x1b\xe1\x85\xa5\x81\xed\xe3\x33\xdb\x74\xfc\x1b\x5e\x1a\x0a\xb4\x20\xb1\xce\x2a\x1f\xb8\x63\x43\x35\x55\x10\xb9\x22\x8d\x61\x62\x1e\x68\xb4\xd6\x09\xa0\xce\xaf\x40\xb2\x7c\x84\xca\xb5\xc8\x16\xb2\x5c\x92\x05\xa1\x0e\x84\x42\x15\xec\x7a\x98\xf0\xde\x6f\x9f\xa0\x0a\xdc\xd1\x84\x7a\x35\x43\x9e\x9b\x4b\x90\x90\xa6\x3a\x3b\x67\x52\x4b\x1f\xf3\xb2\x2f\xcc\x6d\x73\xf5\x0b\x4a\x53\x42\xb6\x70\x11\xbb\x71\xdb\xa3\x4e\x55\xf1\xeb\xa2\x47\xc2\x59\x2e\x72\xc4\x06\x9a\xb9\xa8\x91\xb8\xc3\xb0\x36\xbc\x5b\xe7\x54\x1a\x92\xf5\x98\xde\xb8\x9e\x26\x7a\x9e\xe5\xde\x53\x09\x0f\x1c\x86\x5f\xaf\xff\x1c\xee\x07\x57\x8a\x37\x94\xfd\x08\x00\x00\xff\xff\x1c\xac\x57\x2e\x1a\x06\x00\x00") + +func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathSnapshotterYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathSnapshotterYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-snapshotter.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathSnapshotterYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathSnapshotterYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-snapshotter.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiHostpathHostpathE2eTestRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x91\x4d\x4b\x03\x41\x0c\x86\xef\xf3\x2b\x02\x5e\x14\xdc\x8a\x9e\x64\x6f\x7e\x80\xd7\xa5\x15\xef\xe9\x4c\xba\x9b\x76\x3b\x19\x92\xcc\x42\xfb\xeb\x65\x29\xf6\x52\x14\xa1\xd7\x99\xe4\x09\xef\xfb\xdc\x40\x51\x9e\x78\xa4\xd4\x53\x82\x4e\x12\xac\x28\x56\x65\x3f\x40\x27\x23\xc7\xc3\x3d\x14\xa5\x89\xa5\xda\x78\x80\x44\x1b\xce\x94\x60\x5b\xcd\x61\x23\x0a\x7d\xa4\xee\x1d\x26\x46\xe8\x4e\x98\x9e\xd2\x27\x99\x77\xab\xee\x6d\xac\xe6\xa4\x4b\x19\xe9\x95\x73\xe2\xdc\xdf\xde\x85\x1d\xe7\xd4\xc2\xe5\x57\xc0\xc2\x5f\xa4\xc6\x92\x5b\xd0\x35\xc6\x05\x56\x1f\x44\xf9\x88\xce\x92\x17\xbb\x67\x5b\xb0\x3c\x4c\x8f\x61\x4f\x8e\x09\x1d\xdb\x00\x90\x71\x4f\x2d\x14\x2b\x4d\x34\x6e\x06\x31\x2f\xe8\x43\xa3\x32\x52\xb0\xba\xde\x52\x74\x9b\xe7\x1a\x38\xdd\x5d\x91\x4e\x1c\xe9\x25\x46\xa9\xd9\x03\xc0\x0f\x62\x5e\x47\x77\x8c\x03\xe9\xf9\xd9\x0a\x46\x6a\xe7\xcc\x58\x47\xff\x2f\xa6\xa8\x4c\x3c\xe7\xb8\x9a\x64\x19\x8b\x0d\xe2\x7e\x35\x49\xc9\xf8\xf8\x3b\x65\xee\x6b\x49\x9b\xb9\xa9\x0b\x3f\xe7\x96\xe9\x89\x1a\x27\xf3\xa6\x9c\x45\x37\xc5\x4a\x00\xc0\xc2\x1f\x2a\xb5\xfc\x21\x2e\x7c\x07\x00\x00\xff\xff\x37\xc6\x5c\x16\x67\x02\x00\x00") + +func testE2eTestingManifestsStorageCsiHostpathHostpathE2eTestRbacYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiHostpathHostpathE2eTestRbacYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/e2e-test-rbac.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiHostpathHostpathE2eTestRbacYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathE2eTestRbacYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/e2e-test-rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiHostpathUsageCsiStorageclassYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xcc\xb1\x8a\xc3\x30\x0c\x87\xf1\x5d\x4f\xa1\x17\x48\x8e\xdb\x0e\x8f\x77\xb7\x74\x28\x14\x0a\xdd\x85\xfd\x27\x11\xb1\xad\x60\xa9\x81\xbe\x7d\x29\x9d\xba\x7e\x1f\xfc\x64\xd7\x1b\x86\xab\xf5\xc4\x1e\x36\x64\xc1\xbc\xfd\xf8\xac\xf6\x75\x7c\xd3\xa6\xbd\x24\xbe\xbe\xfb\x5f\x15\x77\x6a\x08\x29\x12\x92\x88\xb9\x4b\x43\xe2\xec\x3a\xad\xe6\xb1\x4b\xac\x93\x67\xda\x87\x1d\xfa\x12\x31\x3e\x27\x0d\xe4\x2a\xda\x2e\x56\x35\x3f\x12\xff\xa3\x22\x40\x87\xd5\x7b\xc3\xaf\xf6\xa2\x7d\x39\x5b\x41\xe2\x53\x6b\x28\x2a\x01\x7a\x06\x00\x00\xff\xff\x20\x58\xb7\x12\xa0\x00\x00\x00") + +func testE2eTestingManifestsStorageCsiHostpathUsageCsiStorageclassYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiHostpathUsageCsiStorageclassYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/usage/csi-storageclass.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiHostpathUsageCsiStorageclassYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiHostpathUsageCsiStorageclassYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/usage/csi-storageclass.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiMockCsiMockDriverAttacherYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x92\xcf\x8a\x1b\x31\x0c\xc6\xef\xf3\x14\x3a\xf4\xd0\x1e\x26\xd3\x5d\x28\x14\xc3\x1e\x96\x4d\x6f\xfd\x47\x03\xbd\x2b\x1e\x75\x22\xe2\xb1\x8d\xac\x31\xcd\xdb\x17\xc7\x59\x6a\xef\x52\x2a\x30\x18\x59\xfe\xe9\xd3\x67\x9f\xd9\xcf\x06\x0e\x8a\x4a\xbf\x36\x77\x20\x1d\x30\xf2\x4f\x92\xc4\xc1\x1b\xc0\x18\xd3\x94\xef\x86\x95\x14\x67\x54\x34\x03\x80\xc7\x95\x0c\xd8\xc4\xe3\x1a\xec\x39\xba\x6d\x61\x3f\xa2\x2a\xda\x13\xc9\x90\x22\xd9\x52\x95\xc8\x91\xd5\x20\x65\x0f\xb0\xa2\xda\xd3\x67\x3c\x92\x4b\x35\x01\x05\xfd\x6f\x0a\x80\x50\x74\x6c\x31\x19\xb8\x1b\x00\x94\xd6\xe8\x50\xe9\x46\x6b\xd4\x94\x70\x1d\xf8\xbf\x68\x80\x67\x91\xd7\x3d\x49\x66\x4b\x8f\xd6\x86\xcd\xeb\xd7\x6e\xb8\x5b\x89\x0d\x5e\x91\x3d\x49\xd3\x63\x6c\x7c\xe8\xd8\x35\x78\xc5\x85\x0c\x9c\x3f\xa6\xdd\x62\x65\xc7\x61\x4a\xbc\x8c\x49\x83\xe0\x42\x53\x7b\xc9\xe4\xfb\xdd\xfd\xee\x7d\x73\x17\x65\x69\x1a\xd5\x66\xe3\x98\x1f\x3e\xbc\xca\x5d\x39\xf3\x2c\x94\xd2\xc3\x9b\xb7\x8f\xfb\xfd\x8f\x4f\x87\xc3\xbb\xa6\x8c\x7c\x7e\x49\xaa\xb2\x6f\xb5\xdd\x19\x40\x46\xb7\x91\x81\xa2\xaf\xac\x5d\xfa\xeb\x41\xb5\xca\x6e\xc2\x7a\x79\x0a\x5e\xe9\xb7\xf6\xe4\x28\x9c\xd9\xd1\x42\xb3\x01\x95\x8d\x9a\xc3\x1c\xdc\xb6\xd2\x97\xe2\x6f\x37\xd8\x08\x6b\xc9\x7d\x47\x3d\xd5\xa6\x1d\xb0\x0a\x2d\x12\x48\xc7\x99\x9f\xdd\xad\xb0\xee\x25\x4e\x21\x55\x48\x2f\xa8\x62\x33\xca\xe4\xf8\x38\x9d\xb7\x23\x39\xd2\xa9\xfe\x87\x34\xbd\x78\xe3\x1a\x7a\x89\x64\x60\xcf\x72\xfd\xbb\x97\x6f\xf2\x24\x84\xda\xce\xf2\x4a\xd5\xf0\x27\x00\x00\xff\xff\x92\x6d\x20\x00\x42\x03\x00\x00") + +func testE2eTestingManifestsStorageCsiMockCsiMockDriverAttacherYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiMockCsiMockDriverAttacherYaml, + "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-attacher.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiMockCsiMockDriverAttacherYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiMockCsiMockDriverAttacherYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-attacher.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiMockCsiMockDriverResizerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x92\xcf\x6a\x1c\x31\x0c\xc6\xef\xf3\x14\x22\xf4\xd0\x1e\x66\x26\x39\x04\x8a\x21\x87\x90\xed\xad\xff\xe8\x42\xef\x5a\x8f\x3a\x2b\xd6\x63\x1b\x59\x63\xba\x7d\xfa\xe2\x78\x43\x3d\x59\x4a\x04\x06\x23\xcb\x3f\x7d\xfa\xec\x13\xfb\xc9\xc0\x5e\x51\xe9\xd7\xea\xf6\xa4\x1d\x46\xfe\x49\x92\x38\x78\x03\x18\x63\x1a\xf3\x5d\xb7\x90\xe2\x84\x8a\xa6\x03\xf0\xb8\x90\x01\x9b\xb8\x5f\x82\x3d\x45\xb7\xce\xec\x7b\xa1\xc4\x7f\x48\xba\x14\xc9\x96\xa2\x44\x8e\xac\x06\x29\x7b\x80\x05\xd5\x1e\x3f\xe3\x81\x5c\xaa\x09\x28\xe4\xff\x42\x00\x84\xa2\x63\x8b\xc9\xc0\x5d\x07\xa0\xb4\x44\x87\x4a\x17\x58\xa3\xa5\x84\xdb\x70\xdf\x22\x03\xbc\x48\x7c\xde\x93\x64\xb6\xf4\x68\x6d\x58\xbd\x7e\xdd\x4c\x76\x29\xb1\xc1\x2b\xb2\x27\x69\x5a\xf4\x8d\x09\x2d\xba\x06\x2f\x38\x93\x81\xd3\xc7\x34\xcc\x56\x06\x0e\x63\xe2\xb9\x4f\x1a\x04\x67\x1a\x9b\x3b\x26\xdf\x0e\xf7\xc3\x6d\x73\x15\x65\x6e\xda\xd4\x56\x37\x7d\x9f\x1f\xee\x6f\xae\xb3\x85\x84\xd3\x24\x94\xd2\xc3\xbb\xf7\x8f\xbb\xdd\x8f\x4f\xfb\xfd\x87\xb6\x90\x7c\x7e\x4d\xab\xc2\x2f\xc5\x9b\x33\x80\x8c\x6e\x25\x03\x45\x62\x59\x43\xfa\xe7\x42\x35\xcb\xae\xc2\x7a\x7e\x0a\x5e\xe9\xb7\x6e\xc9\x51\x38\xb3\xa3\x99\x26\x03\x2a\x2b\x35\x87\x39\xb8\x75\xa1\x2f\xc5\xe1\xcd\x70\x3d\x2c\x25\xf7\x1d\xf5\x58\x9b\x6e\x80\x55\x68\x91\x40\xda\x4f\xfc\x62\x70\x85\x6d\xde\xe2\x18\x52\x85\x6c\x05\x55\x6c\x46\x19\x1d\x1f\xc6\xd3\x7a\x20\x47\x3a\xd6\x0f\x91\xc6\x57\xaf\x5c\x43\xcf\x91\x0c\xec\x58\x9e\xff\xee\xf9\x9b\x3c\x09\xa1\xb6\xb3\x5c\xa9\xfa\x1b\x00\x00\xff\xff\xf1\x9d\x6f\x4c\x40\x03\x00\x00") + +func testE2eTestingManifestsStorageCsiMockCsiMockDriverResizerYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiMockCsiMockDriverResizerYaml, + "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-resizer.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiMockCsiMockDriverResizerYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiMockCsiMockDriverResizerYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-resizer.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiMockCsiMockDriverYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x55\x4d\x8f\xdb\x46\x0c\xbd\xfb\x57\x10\x4e\x0f\xc9\x41\x52\x8d\xc5\xb6\x85\x00\x1f\x36\x6b\x17\x08\xda\xf5\x06\x71\xda\xab\x31\x1e\xd1\x32\x61\x69\x66\xc0\xa1\x84\xfa\xdf\x17\x23\x79\x13\x7d\x79\x3f\xda\x63\x16\x58\x60\x3c\x43\x3e\x92\x8f\x8f\xd4\x89\x4c\x96\xc2\x56\x94\xe0\xa1\x2a\xb6\x28\x33\xe5\xe8\x6f\x64\x4f\xd6\xa4\xa0\x9c\xf3\x49\xbd\x98\x95\x28\x2a\x53\xa2\xd2\x19\x80\x51\x25\xa6\xa0\x3d\x45\xa5\xd5\x27\x57\x54\x39\x99\x99\x77\xa8\xc3\xa3\xc7\x02\xb5\x58\x0e\x67\x80\x52\x89\x3e\xfe\xa9\xf6\x58\xf8\xf6\x02\x02\xe2\xc8\x19\x80\xd1\x15\xa4\x95\x4f\x61\x31\x03\x10\x2c\x5d\xa1\x04\x2f\x20\x9d\xd8\xe1\xaf\xe8\xe1\x5d\x43\x04\x78\x4a\xa9\x39\x23\xd7\xa4\xf1\x4e\x6b\x5b\x19\xd9\xf4\x2a\xb8\x98\x68\x6b\x44\x91\x41\xee\x40\x47\x9d\x62\x1d\xdb\x9a\x02\x2b\xc8\xdf\xde\x01\xa8\x54\x39\xa6\x70\xfa\xcd\xc7\xb9\xe6\x98\x6c\xe2\x29\x8f\xbc\x58\x56\x39\x26\x03\xbf\xb4\x5e\xc4\xbf\xc4\x3f\x77\xdc\x15\xe7\x9d\x70\x6d\xc8\x79\x14\x05\x3f\x95\x65\x8c\xde\x2f\x7f\x7a\x7f\xb7\x5a\x7d\x59\x6f\xb7\x1f\xe6\x3d\xc3\x77\xf0\xd5\x3a\x5b\xd8\xfc\x0c\xbe\x72\xce\xb2\x00\x79\x30\x88\x19\x66\x70\xb0\x0c\x72\x44\x70\x36\x03\x46\xaf\x8f\x98\x55\x05\x99\x1c\x04\xbd\x0c\x60\xde\xcf\x2f\xe9\x82\x56\x4e\x69\x92\xf3\x1c\xc8\x84\x9a\x77\x81\x9e\x5d\x6d\x8b\xaa\xc4\x38\xb7\x1f\xe2\x71\xa6\x07\x54\x52\x31\x46\xb9\x12\xf4\xcb\xa7\x8c\x96\xc2\x15\xce\x47\xd6\xf5\xf2\xb6\x7b\x89\xa6\x1e\xd6\xde\xd2\x7d\x29\xb8\xf7\x06\x50\xab\xa2\xc2\x14\x02\xa9\xe1\x3f\xf6\xdf\x7b\xd7\x3c\x37\x69\x3e\x84\xfe\x8e\x28\x2d\xc3\xed\x67\x25\xc7\xd6\x7d\x00\xdc\x06\x0d\x70\x28\x51\x46\x3c\x6a\x7f\xc6\x54\x23\x47\x8c\x39\x79\x61\xf5\xb6\xfe\x1b\x9b\x61\x34\x44\x08\x4a\xb8\x79\x51\x09\x51\x60\x6c\x74\xd7\x15\xc7\x35\x32\x5a\xcb\x53\xb5\xc7\x02\xe5\x5b\x58\x21\x6b\x22\xa7\xe4\xb8\x4c\x6a\xc5\x49\x41\xfb\xe4\x62\x92\xb4\x73\xe3\x93\xa7\xa1\x98\x02\xbd\xda\xaf\x3f\xfe\xfa\xb8\xde\x6d\x1e\x57\xeb\xdd\xe6\xee\x61\x3d\xd5\xb6\xdf\xd9\x96\xe9\xe0\x01\xe0\x40\x58\x64\x5f\xf0\x30\x7e\x09\x53\xfd\x7d\x0b\xd5\x8b\x09\x83\xc6\xb9\xed\x69\x98\xf4\x38\xf0\x1c\x06\xbb\x63\xea\x51\x57\x4c\x72\xbe\xb7\x46\xf0\x1f\xe9\x87\x71\x4c\x35\x15\x98\x63\x96\x42\x90\xeb\x2b\xa4\xf4\xbc\x90\xae\xca\x68\xe8\xd8\x6d\xc7\x04\x42\xaf\x5b\x53\x72\x2c\xfb\x6d\x79\x5e\x82\xc1\xf8\x22\xbf\xb4\xbe\x89\x17\xaf\x59\x3f\x21\xcc\x32\x38\xc6\x17\x94\x38\x80\x93\x1d\x4f\x74\xe4\x90\x4b\xf2\x9e\x6a\x8c\x44\x71\x8e\xd2\xe8\x6b\x0e\xef\x60\x8f\x5a\x55\x1e\xc1\x1e\xe0\x28\xe2\x7c\x9a\x24\x39\xc9\xb1\xda\xc7\xda\x96\x8d\xee\xd8\xa0\xa0\xef\x1e\xc9\xfb\x0a\x7d\xf2\xeb\xed\xed\xcd\xed\x6b\x84\x77\xbf\xfd\xb4\x5b\x6f\x56\x9f\x1f\x3f\x6d\xbe\xbe\x6d\x5b\xfc\x78\xe2\xfd\x1f\x7b\x70\xec\x3c\x5a\x1f\x36\xf3\x03\xb4\xd6\x9c\xad\x53\x79\x23\xe5\x14\x3e\x52\x46\x8c\x3a\xfc\x50\xc5\x64\xec\xc6\xc7\x59\x32\x53\xf1\x5b\x93\xa3\xb5\xa7\xe9\x50\x6d\x66\x28\x3a\xe9\xda\xb4\x74\xf4\xbe\xe9\x47\xeb\x5b\xeb\x3e\xa5\x57\x2a\x1b\x2c\xc6\x9e\x8f\x9c\x1d\xa6\xb0\x6a\xaa\xb2\x7c\x7e\xe4\x7b\x46\x25\xdd\x6e\x3c\xf3\x6d\x79\x5b\x1a\x43\x82\x5f\x1b\xfa\x0a\xa5\xff\x8d\x85\xdd\x65\x37\x9d\x9f\x4b\x65\x94\xc2\x8b\x0b\x6d\xd8\x53\x6d\xcd\x81\xf2\x07\xe5\xd2\x89\xf5\xd8\x59\x68\x51\xeb\xf8\x6f\x00\x00\x00\xff\xff\xbb\x35\xe0\x36\xc3\x0a\x00\x00") + +func testE2eTestingManifestsStorageCsiMockCsiMockDriverYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiMockCsiMockDriverYaml, + "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiMockCsiMockDriverYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiMockCsiMockDriverYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiMockCsiMockDriverinfoYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x8e\x31\x4b\x04\x31\x10\x85\xfb\xfc\x8a\x81\x6d\xb4\x49\xd0\x4a\xb6\x13\x6d\xae\x13\x04\xfb\xb9\xcd\xe3\x6e\xd8\xc9\x64\x49\xe6\x56\xf2\xef\xc5\x45\x84\xab\xdf\xfb\x3e\x3e\xde\xe4\x0b\xad\x4b\xb5\x99\xba\xd7\xc6\x17\xc4\xf5\xa5\x47\xa9\x69\x7f\x0a\xab\x58\x9e\xe9\xed\xf3\xf4\xde\x64\x47\x0b\x05\xce\x99\x9d\xe7\x40\x64\x5c\x30\x53\xa9\xcb\x1a\xef\xc1\x30\xd1\xc9\x1c\xe6\x52\x8d\x55\x07\x59\xa5\xbe\x61\x89\xf4\xaa\x4a\x3b\xeb\x0d\x9d\xc4\xc8\xaf\x08\xd3\xb1\xd0\xb7\xa8\xd2\x19\x24\xd6\xd1\x1c\x99\xf2\x30\x2e\xb2\x1c\xf8\x79\xd0\x07\xfb\x72\xfd\xcd\xc0\xa6\x75\x14\x98\x3f\x3c\x86\xe9\x90\xa0\x7b\xc2\x33\xd2\x5f\x43\xba\xb9\x68\x4f\xf9\xff\x18\x2f\x35\x86\x9f\x00\x00\x00\xff\xff\xa1\x6b\xcd\x59\xe6\x00\x00\x00") + +func testE2eTestingManifestsStorageCsiMockCsiMockDriverinfoYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiMockCsiMockDriverinfoYaml, + "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driverinfo.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiMockCsiMockDriverinfoYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiMockCsiMockDriverinfoYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driverinfo.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiMockCsiMockRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x93\xb1\x8e\x13\x31\x10\x86\x7b\x3f\xc5\x48\x34\x20\xe1\xa0\x50\xa1\xed\x80\x82\x76\x95\x20\xfa\x89\x3d\xd9\x0c\x71\x6c\x6b\x3c\xb6\x48\x9e\x1e\xad\x02\x51\xee\x72\x39\x5d\x8a\xcb\x6d\xbb\xda\xf9\xf7\x9b\xef\x9f\xc5\xcc\xbf\x48\x0a\xa7\xd8\x41\x9b\x9b\x2d\x47\xdf\xc1\x92\xa4\xb1\xa3\xaf\xce\xa5\x1a\xd5\xec\x48\xd1\xa3\x62\x67\x00\x22\xee\xa8\x03\x57\xd8\xee\x92\xdb\x1a\x63\xad\xfd\x37\xf4\x3d\xd4\xa2\x24\x8b\x14\xe8\x1b\x47\xcf\x71\x30\xe7\xe1\xb2\x42\x37\xc3\xaa\x9b\x24\x7c\x40\xe5\x14\x67\xdb\x2f\x65\xc6\xe9\x53\x9b\x5f\xf9\x82\x4b\x51\x25\x85\x40\x62\x51\x15\xdd\x86\xc4\x4a\x0a\x64\x4a\x5d\xfd\x26\xa7\x65\x7c\xdd\xc2\x93\xcc\x00\x17\xac\xff\x1f\x95\x8c\x8e\x3a\xf0\xb4\xc6\x1a\xd4\x8c\x89\x0b\x5a\x8f\x59\x17\x8b\x9c\x70\xe8\x8f\x92\x44\x0c\x67\x20\x35\x46\x12\x03\x80\x99\x7f\x48\xaa\xf9\x99\x15\xef\xa6\x29\x4b\x6a\x3c\x06\x4d\xc0\xd4\x03\x96\x29\xca\x72\xc7\x70\xeb\x85\xdb\xc8\x48\x03\x17\x15\x7c\x33\x73\xd7\x79\x6e\xb6\xf7\x0e\xb2\x70\xe3\x40\x7e\x20\x0f\x7d\xf2\xb0\x24\x57\x85\x75\x0f\x7d\x0a\xec\xf6\x1f\x21\x0b\x35\x4e\xb5\x84\xfd\x48\xc9\x91\x3c\x34\x46\xe8\x8f\x73\x03\xf9\x9f\x54\xb4\x5f\xf6\x97\x15\xbc\xff\xf0\x2a\xed\xe4\x92\xed\xa3\x86\xa6\xd2\x0c\x7d\x26\xab\x54\xd4\xe6\x93\x1d\x9b\x4b\x7e\x61\x23\x77\x3a\x67\xa1\xc2\x87\x09\xfc\xf7\x27\x8e\x5b\xae\xf6\x6f\x00\x00\x00\xff\xff\xc8\x91\x6e\x9c\x87\x06\x00\x00") + +func testE2eTestingManifestsStorageCsiMockCsiMockRbacYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiMockCsiMockRbacYaml, + "test/e2e/testing-manifests/storage-csi/mock/csi-mock-rbac.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiMockCsiMockRbacYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiMockCsiMockRbacYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/mock/csi-mock-rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2eTestingManifestsStorageCsiMockCsiStorageclassYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x44\xcc\xb1\xaa\x02\x31\x10\x46\xe1\x7e\x9e\x62\x5e\x60\xf7\x72\x3b\x49\xa9\x36\x16\x82\x20\xd8\x0f\xc9\xcf\x32\x6c\x26\xb3\x64\xe2\x82\x6f\x2f\x62\x61\x7b\x0e\x7c\xb2\xe9\x03\x3d\xd4\x5b\xe2\x18\xde\x65\xc1\xbc\x1e\x62\x56\xff\xdb\xff\x69\xd5\x56\x12\xdf\xbf\xfd\x54\x25\x82\x0c\x43\x8a\x0c\x49\xc4\xdc\xc4\x90\x38\x87\x4e\xe6\x79\x9d\x22\xd3\xd6\x7d\xd7\x8f\x86\xfe\x1b\xd4\x91\xab\xa8\xdd\xbc\x6a\x7e\x25\x3e\xa3\x62\x80\x76\xaf\x4f\xc3\x51\x5b\xd1\xb6\x5c\xbd\x20\xf1\xc5\x0c\x45\x65\x80\xde\x01\x00\x00\xff\xff\x5a\x2e\xc6\x9d\x98\x00\x00\x00") + +func testE2eTestingManifestsStorageCsiMockCsiStorageclassYamlBytes() ([]byte, error) { + return bindataRead( + _testE2eTestingManifestsStorageCsiMockCsiStorageclassYaml, + "test/e2e/testing-manifests/storage-csi/mock/csi-storageclass.yaml", + ) +} + +func testE2eTestingManifestsStorageCsiMockCsiStorageclassYaml() (*asset, error) { + bytes, err := testE2eTestingManifestsStorageCsiMockCsiStorageclassYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/mock/csi-storageclass.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2e_nodeTestingManifestsSriovdpCmYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x90\xc1\x4b\xfb\x30\x14\xc7\xef\xfd\x2b\x1e\x39\x6f\x3f\xd2\xfd\x36\x19\xb9\x7a\x55\x0f\x1e\xbc\x8c\x31\xd2\xe4\x75\x3c\xd7\xa4\x21\xc9\xc2\x44\xf7\xbf\x4b\xda\xaa\x8c\x3a\x9c\x88\x60\x0f\x25\x4d\x3e\xdf\xef\x6b\x3e\xd2\xd1\x03\xfa\x40\xad\x15\x90\xca\x62\x47\x56\x0b\xb8\x6e\x6d\x4d\xdb\x5b\xe9\x0a\x83\x51\x6a\x19\xa5\x28\x00\xac\x34\x28\x20\x78\x6a\x93\x76\x53\xd5\x31\xc3\x76\x70\x52\xa1\x80\xdd\xbe\xc2\x69\x78\x0a\x11\x4d\xf1\x96\xea\xb9\x7f\x8f\x21\x4f\x78\x29\x00\x00\x9e\xbb\x77\x7e\x98\xc7\xd0\xee\xbd\xc2\x1b\x0a\x91\x09\x58\x7d\x1c\x8d\x90\x3b\x69\x90\x09\x60\x64\x23\x36\x9b\xee\x37\x36\x16\xa3\xc6\x44\x0a\xd9\x64\x1c\x0c\xd8\xa0\x8a\xad\x0f\x4c\xc0\xb8\xb7\x43\x12\x5a\xdd\x03\x2b\xb6\xe4\xcb\x2b\xb6\x1e\xf7\x74\x60\x3f\xa5\x07\xcb\xc5\x5c\xb1\x09\xb0\x92\xa3\x3e\x1f\xf0\x94\x70\x68\xa6\x39\xc7\x54\xe7\x08\x1d\xb6\x55\x5e\xae\x47\xa1\xe3\xc9\xce\xf1\xb4\xf5\x9b\x56\xb4\xd3\xbb\x3f\x2d\x24\xd5\xd4\x4e\x9d\xa2\xb3\xb0\xab\xf3\xbd\x7a\x18\xad\xe3\x81\xd7\x9c\x4d\xf2\x72\x16\x66\x75\xf9\x0b\xfe\x4c\x63\x0f\x83\x3e\xaf\x8d\xfc\x4c\x1f\x85\xfb\x7c\x22\x20\xfa\x3d\xfe\x5c\x6f\xb9\xa8\xfe\x5f\xa6\x97\x97\xcb\x8b\xb4\x9a\xe6\xb0\xd8\x50\xf5\xb5\x9d\xf7\xaf\x9e\x3c\x16\xaf\x01\x00\x00\xff\xff\x2a\x5e\x3a\xd9\x06\x04\x00\x00") + +func testE2e_nodeTestingManifestsSriovdpCmYamlBytes() ([]byte, error) { + return bindataRead( + _testE2e_nodeTestingManifestsSriovdpCmYaml, + "test/e2e_node/testing-manifests/sriovdp-cm.yaml", + ) +} + +func testE2e_nodeTestingManifestsSriovdpCmYaml() (*asset, error) { + bytes, err := testE2e_nodeTestingManifestsSriovdpCmYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e_node/testing-manifests/sriovdp-cm.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2e_nodeTestingManifestsSriovdpDsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x54\xc1\x6e\x13\x31\x10\xbd\xe7\x2b\xe6\x07\x9c\xa5\x02\x71\xb0\xd4\x03\xa2\x1c\x90\x68\x88\x54\x89\xfb\xd4\x9e\x6c\x4c\x6c\x8f\x65\xcf\x2e\xcd\xdf\x23\x67\xb3\xc1\xdb\x96\x06\xe6\x96\x99\x37\xcf\xef\x3d\x3b\x8b\xc9\xfd\xa0\x5c\x1c\x47\x0d\x98\x52\xe9\xc6\x9b\xd5\xc1\x45\xab\xe1\x0e\x29\x70\x7c\x20\x59\x05\x12\xb4\x28\xa8\x57\x00\x11\x03\x69\x38\x0c\x8f\xa4\x4a\x76\x3c\x2a\x4b\xa3\x33\xa4\x92\x1f\x7a\x17\x15\x06\xfb\xf1\xc3\x19\x56\x12\x9a\x0b\xf6\x58\x84\xc2\x0a\xc0\xe3\x23\xf9\x52\x99\x00\xc4\x51\xd6\x10\xd9\xd2\xe9\x27\xa6\xa4\xe1\x44\x6a\xd3\xaa\x24\x32\x15\x55\xc8\x93\x11\xce\xd3\x46\x40\x31\xfb\x6f\x0d\xc5\x2c\xe8\x15\x2d\x2b\x00\xa1\x90\x3c\x0a\x9d\x97\x1b\x1b\xb5\xfc\x82\xe7\x6d\xa6\xa9\x9e\x09\x7e\x21\xba\x36\x66\xe1\xb5\xf6\x5c\x64\x43\xf2\x8b\xf3\x41\x83\xe4\x81\x9a\xfe\xf6\xeb\xdd\xa2\x57\x59\x1f\x16\x66\x6b\xd5\xf0\x72\x24\xa1\xb2\x76\xdc\x61\x36\x7b\x0d\x73\xc6\x27\x45\xec\x29\xa3\x38\x8e\x17\x23\x0a\x0e\x74\x9c\x54\xaa\xcc\x9e\xd6\x4b\x8e\x80\x45\x28\x5f\x0e\xe0\x54\xf7\x39\x6b\xf8\xf2\xe4\x8a\x94\xcb\x80\x76\x3b\x32\xa2\x61\xc3\x0f\x66\x4f\x76\xf0\xb3\xd0\x42\xb9\x66\xf3\xc9\x18\x1e\xa2\x6c\xae\x84\x66\x38\x0a\xba\x48\xb9\xd1\xf7\xfc\x0d\x9d\x93\xab\xe5\x02\xf6\xa4\xc1\xb2\x39\x50\xae\x72\xe3\x6e\x4c\xd4\xbd\xc2\xaf\xc7\xf7\xeb\x9b\xe5\xde\x76\xf0\x7e\xcb\xde\x99\xa3\x86\x0d\x8d\x8d\x4b\xcc\x7d\x73\xd1\x0a\x94\xf2\xdc\x2b\xeb\xf2\xed\x73\x01\xf3\xcc\xd3\x48\xfe\xf6\xe6\xdd\x65\x50\xc8\x0c\xd9\xc9\xf1\x33\x47\xa1\x27\xf9\xc3\x06\x90\xb2\x1b\x9d\xa7\x9e\xec\xe2\x46\x01\x46\xf6\x43\xa0\xfb\x9a\xd3\xe2\xf8\x29\x80\xc9\x4e\x61\x73\x68\xb8\x42\x05\x6f\x51\xf6\x1a\xba\x11\x73\xe7\xdd\x63\x57\x93\xf2\x24\x5d\x03\xcb\x84\xf6\x7b\xf4\x47\x0d\x3b\xf4\x85\x5e\x70\x7b\xee\xdf\x22\x6d\xa6\xf3\x86\xe1\xb8\x73\xbd\x9a\x24\xff\x65\x97\xc4\x74\xc9\xb8\x4b\x5c\x13\xf8\x5f\xad\x9d\x5e\x7d\x25\x6a\x7a\x00\xe9\x8a\xd7\xd7\x1d\x5d\xe7\xfa\x0f\x8b\x53\xff\x1e\xd3\x92\xad\xf9\x1e\xd8\xa4\x26\xd0\x02\xe0\x84\x42\x59\xee\x9c\xff\x7c\x13\x78\xfd\xb3\x70\x5c\x8c\x67\x89\xed\xfc\x77\x00\x00\x00\xff\xff\x3b\xbd\xca\x89\x82\x05\x00\x00") + +func testE2e_nodeTestingManifestsSriovdpDsYamlBytes() ([]byte, error) { + return bindataRead( + _testE2e_nodeTestingManifestsSriovdpDsYaml, + "test/e2e_node/testing-manifests/sriovdp-ds.yaml", + ) +} + +func testE2e_nodeTestingManifestsSriovdpDsYaml() (*asset, error) { + bytes, err := testE2e_nodeTestingManifestsSriovdpDsYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e_node/testing-manifests/sriovdp-ds.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testE2e_nodeTestingManifestsSriovdpSaYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\xca\x31\x0a\x83\x21\x0c\x06\xd0\xdd\x53\xe4\x02\x0e\x5d\xb3\xf5\x0c\x85\xee\xa9\x7e\x94\x60\x8d\x62\xa2\xd0\xdb\x97\xc2\x3f\xbf\x27\x53\x9f\x58\xae\xc3\x98\xce\x2d\x35\xb5\xca\xf4\xc0\x3a\x5a\x70\x2f\x65\x6c\x8b\xd4\x11\x52\x25\x84\x13\x91\x49\x07\x93\x2f\x1d\x27\x57\xfc\x57\x9e\x9f\xfd\x56\xbb\xcc\xa7\x14\x30\xb5\xfd\x42\xf6\xaf\x07\x7a\xfa\x05\x00\x00\xff\xff\x29\x9c\xaa\x31\x63\x00\x00\x00") + +func testE2e_nodeTestingManifestsSriovdpSaYamlBytes() ([]byte, error) { + return bindataRead( + _testE2e_nodeTestingManifestsSriovdpSaYaml, + "test/e2e_node/testing-manifests/sriovdp-sa.yaml", + ) +} + +func testE2e_nodeTestingManifestsSriovdpSaYaml() (*asset, error) { + bytes, err := testE2e_nodeTestingManifestsSriovdpSaYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/e2e_node/testing-manifests/sriovdp-sa.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x53\xd1\x6e\xe3\x36\x10\x7c\x2e\xbf\x62\x10\xdd\x43\x02\xd8\x72\x62\xa0\x38\xd4\x45\x70\x50\x1c\x35\x11\x92\x93\xae\x92\x72\x41\x9e\x0c\x5a\x5a\x4b\xc4\xd1\xa4\x4a\x52\xb1\x8d\xa2\xff\x5e\x50\x8a\xdb\x3a\x41\xf5\x46\xee\xcc\xec\x68\x76\x19\x60\xa9\xbb\x83\x11\x4d\xeb\x30\xbf\xbc\xfa\x8c\xb2\x25\x3c\xf4\x6b\x32\x8a\x1c\x59\x44\xbd\x6b\xb5\xb1\x21\x0b\x58\x80\x47\x51\x91\xb2\x54\xa3\x57\x35\x19\xb8\x96\x10\x75\xbc\x6a\xe9\x58\x99\xe0\x3b\x19\x2b\xb4\xc2\x3c\xbc\xc4\xb9\x07\x9c\xbd\x95\xce\x2e\x7e\x65\x01\x0e\xba\xc7\x96\x1f\xa0\xb4\x43\x6f\x09\xae\x15\x16\x1b\x21\x09\xb4\xaf\xa8\x73\x10\x0a\x95\xde\x76\x52\x70\x55\x11\x76\xc2\xb5\x43\x9b\x37\x91\x90\x05\x78\x79\x93\xd0\x6b\xc7\x85\x02\x47\xa5\xbb\x03\xf4\xe6\xbf\x38\x70\x37\x18\xf6\x5f\xeb\x5c\xb7\x98\xcd\x76\xbb\x5d\xc8\x07\xb3\xa1\x36\xcd\x4c\x8e\x40\x3b\x7b\x4c\x96\x71\x5a\xc4\xd3\x79\x78\x39\x50\x9e\x94\x24\x6b\x61\xe8\x8f\x5e\x18\xaa\xb1\x3e\x80\x77\x9d\x14\x15\x5f\x4b\x82\xe4\x3b\x68\x03\xde\x18\xa2\x1a\x4e\x7b\xbf\x3b\x23\x9c\x50\xcd\x04\x56\x6f\xdc\x8e\x1b\x62\x01\x6a\x61\x9d\x11\xeb\xde\x9d\x84\x75\x74\x27\xec\x09\x40\x2b\x70\x85\xb3\xa8\x40\x52\x9c\xe1\x26\x2a\x92\x62\xc2\x02\x3c\x27\xe5\x7d\xf6\x54\xe2\x39\xca\xf3\x28\x2d\x93\xb8\x40\x96\x63\x99\xa5\xb7\x49\x99\x64\x69\x81\xec\x37\x44\xe9\x0b\x1e\x92\xf4\x76\x02\x12\xae\x25\x03\xda\x77\xc6\xfb\xd7\x06\xc2\xc7\x48\xb5\xcf\xac\x20\x3a\x31\xb0\xd1\xa3\x21\xdb\x51\x25\x36\xa2\x82\xe4\xaa\xe9\x79\x43\x68\xf4\x2b\x19\x25\x54\x83\x8e\xcc\x56\x58\x3f\x4c\x0b\xae\x6a\x16\x40\x8a\xad\x70\xdc\x0d\x37\x1f\x7e\x2a\x64\x2c\x8f\xef\x92\xa2\xcc\x5f\xf0\xe5\x1a\x4d\x65\x42\xa1\x67\x3f\xfe\xd9\xa4\x29\xcd\x69\xea\xc8\xba\xa9\xd8\xf2\x86\x2c\xbb\xcb\xa2\xfc\xab\x87\x7e\x66\xb7\xd9\xf2\x21\xce\x57\xcb\x38\x2f\x57\x37\x51\x11\xaf\xbe\x45\xe5\x3d\xbe\x5c\xb3\xdf\xe3\xaf\x4f\xdf\xe3\xbc\x48\xb2\xf4\xfa\x75\x1e\xfe\x12\x5e\xb1\xbb\xec\x31\x4a\xef\x56\xc7\xdb\xab\xf0\xea\xe7\xf0\x92\xd1\xbe\xd3\xc6\x31\x26\x36\xaa\xa6\x0d\x9e\xef\xa3\x92\x7d\x3a\x27\x63\xb4\x19\x0e\x3e\x72\xfe\xef\x50\x5f\xb9\x11\x7e\x9e\x13\xd0\x7e\x81\x2d\xff\x41\xe0\x52\x0e\xc8\x6b\x45\xee\x82\x91\xaa\xc5\x86\xb1\x00\x37\xbd\x90\x35\x2a\x5d\xd3\xf8\x04\x22\xd3\xd8\xc5\xb0\x59\x1e\xbc\xc0\xad\x30\x54\x39\x6d\x0e\x50\x7c\x4b\xd6\xaf\xc4\xda\x53\x46\x74\xbc\xe7\xdb\x4e\xd2\x48\x38\x6d\x53\xc9\xde\x3a\x32\xbc\x13\x43\x2a\x64\x18\x97\x72\xe1\xeb\xd3\x4a\x2b\xbf\xda\x64\x18\x3b\x39\x2e\xd8\x4f\xe1\x6c\x48\x6f\xda\x3b\x21\x43\xdb\x8e\xbd\xf0\xe9\xdc\x4b\x5e\x8c\xf0\xae\xb7\xed\x7b\x9d\x0f\x3c\x0f\x3a\xa5\x0d\x4a\x53\xae\xea\x51\xe0\x7f\x5a\xad\xb8\xaa\x57\x23\xf9\x4f\x4f\xfe\x8b\xb1\xf0\xdb\x7d\x96\xbe\x0c\x1d\xf1\x51\x08\x47\x4b\xef\x1c\xfd\x1d\x00\x00\xff\xff\x3b\x8d\xfd\x02\x78\x04\x00\x00") + +func testImagesMakefileBytes() ([]byte, error) { + return bindataRead( + _testImagesMakefile, + "test/images/Makefile", + ) +} + +func testImagesMakefile() (*asset, error) { + bytes, err := testImagesMakefileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\xca\xb1\x0a\xc2\x40\x0c\x00\xd0\x3d\x5f\x11\x70\xb6\xb7\x4a\x77\x57\x05\x3b\x38\x4a\xb0\xa1\x0d\xf5\xcc\x91\xe4\xda\xf3\xef\x05\xdd\x1c\x1c\x1f\xbc\x1d\x0e\xcc\x18\x33\xe3\xf9\x7a\x3a\x5e\x06\x1c\xf5\xee\x48\x81\x73\x44\xf1\x3e\xa5\x49\xbb\xe5\xe0\x9d\x68\xd2\xed\xc9\xe6\x00\xc6\xab\xf0\xc6\xe6\x3d\x20\xee\x31\x2f\x35\x53\xd0\xf4\xc1\x43\x3c\x1a\x50\x29\xa6\xeb\xbf\xc1\x99\x4d\xa2\xfa\xed\xa7\x4a\x1b\x5f\xdf\x56\x1b\x39\xbc\x03\x00\x00\xff\xff\xa6\x54\xe2\x88\x9e\x00\x00\x00") + +func testImagesOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesOwners, + "test/images/OWNERS", + ) +} + +func testImagesOwners() (*asset, error) { + bytes, err := testImagesOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostGitignore = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x4c\xcf\xcb\xc8\x2f\x2e\xe1\x02\x04\x00\x00\xff\xff\x31\x3b\xba\x32\x08\x00\x00\x00") + +func testImagesAgnhostGitignoreBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostGitignore, + "test/images/agnhost/.gitignore", + ) +} + +func testImagesAgnhostGitignore() (*asset, error) { + bytes, err := testImagesAgnhostGitignoreBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/.gitignore", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\x33\xe3\x82\x0a\x17\xe5\xda\x26\x16\xe5\x1a\x1b\x95\x99\xe9\x63\x93\x04\xe9\x01\x91\x65\x16\x98\xd2\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x53\x41\xb1\xb1\xa5\x41\x85\x2d\x98\x44\x96\x2c\xcf\xcc\x4b\xc9\x2f\x2f\x86\x38\x49\xdf\xd0\xc2\xc0\xd2\x36\xc8\xd5\xdd\x33\x38\x24\x28\x52\x3f\xa9\xb4\xb8\x32\x29\xbf\xc2\xca\x50\xcf\xc8\x52\x17\xaa\x50\x17\xac\x50\x17\xa4\x10\x5d\xaf\xa5\x81\x31\x71\x7a\x2d\x0d\x8c\x31\xf5\x12\x69\xaf\xa5\x81\x25\x17\x20\x00\x00\xff\xff\xa0\x4d\x41\x80\x45\x01\x00\x00") + +func testImagesAgnhostBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostBaseimage, + "test/images/agnhost/BASEIMAGE", + ) +} + +func testImagesAgnhostBaseimage() (*asset, error) { + bytes, err := testImagesAgnhostBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x55\x6f\x6f\xdb\xb6\x13\x7e\xcf\x4f\xf1\xc0\xfe\xa1\xbf\x6d\xb0\xac\xd4\x03\xba\xd5\x7b\xe5\xda\x6e\x6b\xb4\xb1\x33\xcb\x59\x17\x74\x45\x40\x53\x67\x89\x08\x45\xaa\x47\x2a\x8e\xfb\xe9\x07\xca\x7f\x12\x6f\x01\x56\xbd\x11\x8f\xf7\xdc\xf1\xe1\xfd\x63\x17\x63\x57\xef\x58\x17\x65\xc0\xe0\xe2\xe5\x6b\xac\x4a\xc2\x87\x66\x4d\x6c\x29\x90\xc7\xa8\x09\xa5\x63\xdf\x17\x5d\xd1\xc5\x47\xad\xc8\x7a\xca\xd1\xd8\x9c\x18\xa1\x24\x8c\x6a\xa9\x4a\x3a\x6a\x7a\xf8\x83\xd8\x6b\x67\x31\xe8\x5f\xe0\x87\x08\xe8\x1c\x54\x9d\x1f\x7f\x13\x5d\xec\x5c\x83\x4a\xee\x60\x5d\x40\xe3\x09\xa1\xd4\x1e\x1b\x6d\x08\xf4\xa0\xa8\x0e\xd0\x16\xca\x55\xb5\xd1\xd2\x2a\xc2\x56\x87\xb2\x3d\xe6\xe0\xa4\x2f\xba\xb8\x39\xb8\x70\xeb\x20\xb5\x85\x84\x72\xf5\x0e\x6e\xf3\x14\x07\x19\x5a\xc2\xf1\x2b\x43\xa8\x87\x69\xba\xdd\x6e\xfb\xb2\x25\xdb\x77\x5c\xa4\x66\x0f\xf4\xe9\xc7\xd9\x78\x3a\xcf\xa6\xc9\xa0\x7f\xd1\x9a\x5c\x5b\x43\xde\x83\xe9\x6b\xa3\x99\x72\xac\x77\x90\x75\x6d\xb4\x92\x6b\x43\x30\x72\x0b\xc7\x90\x05\x13\xe5\x08\x2e\xf2\xdd\xb2\x0e\xda\x16\x3d\x78\xb7\x09\x5b\xc9\x24\xba\xc8\xb5\x0f\xac\xd7\x4d\x38\x0b\xd6\x91\x9d\xf6\x67\x00\x67\x21\x2d\x3a\xa3\x0c\xb3\xac\x83\x37\xa3\x6c\x96\xf5\x44\x17\x9f\x66\xab\xf7\x8b\xeb\x15\x3e\x8d\x96\xcb\xd1\x7c\x35\x9b\x66\x58\x2c\x31\x5e\xcc\x27\xb3\xd5\x6c\x31\xcf\xb0\x78\x8b\xd1\xfc\x06\x1f\x66\xf3\x49\x0f\xa4\x43\x49\x0c\x7a\xa8\x39\xf2\x77\x0c\x1d\xc3\x48\x79\x8c\x59\x46\x74\x46\x60\xe3\xf6\x84\x7c\x4d\x4a\x6f\xb4\x82\x91\xb6\x68\x64\x41\x28\xdc\x3d\xb1\xd5\xb6\x40\x4d\x5c\x69\x1f\x93\xe9\x21\x6d\x2e\xba\x30\xba\xd2\x41\x86\x76\xe7\x5f\x97\xea\x0b\x31\x5a\xbe\x8b\xec\xa7\xb3\xcb\xd1\xbb\xa9\x78\xbb\x5c\x5c\xe2\x7f\x8f\xb2\x18\x2f\x17\x59\x76\xfb\xe6\x7a\xf6\x71\x72\x3b\x5e\x5c\xdd\xe0\x2b\x55\x4d\xf2\xfb\xf4\xf2\x7a\xb4\x1c\xbf\x4f\x7c\x74\xad\x90\x36\x9e\xd3\xb5\xb6\xa9\x10\x5d\x6c\xd8\x55\xc8\xad\x6f\x82\x36\x1e\xba\x92\x45\x0c\xae\xb6\x3e\x48\x63\x60\x49\x91\xf7\x92\x77\xa8\xa5\xba\x93\x05\xf9\xa1\xe8\x22\xc1\x5a\xdb\x3c\x09\xce\x19\x3f\x84\x72\x36\x96\x49\x0c\x78\xd1\xc3\xb6\xd4\xaa\x84\x92\x36\x16\x5f\x1e\x93\x37\x99\x67\x08\xe4\x43\xac\x70\x24\x18\x3b\xa6\xc9\x3c\x1b\x9e\xf4\xde\x55\x74\x0e\x6a\x39\x95\xce\x07\x7a\x20\xf5\xdd\x9c\x54\xc3\xa6\x07\xab\x0e\x9e\x63\x55\xc1\xb8\x10\xeb\x96\x06\xb4\xf7\xde\x02\x75\xcd\xae\x09\x34\x18\x42\x5b\x65\x9a\x9c\x3c\xbc\x3f\xd1\x99\xbb\x9c\xae\x1c\x87\x93\x41\xcb\x46\xd7\xc4\x9b\xef\xa1\xb2\x47\xf6\xb0\x96\xbe\x14\xcb\xeb\x39\x64\x7d\x87\x24\x69\xea\x5c\x06\x82\xcc\xf3\x27\xb1\x6b\x29\xc3\x52\x50\x32\x24\xae\x26\xbb\xf6\xf9\x89\xdd\xe1\xc8\xe8\x07\x2f\x5e\x80\x2b\x24\xbc\x41\x7a\x2f\x39\x55\xb1\xc7\x52\x59\xdf\xa5\x3f\xe1\x2f\x81\xa8\x36\x16\x89\x7f\xcc\xec\xde\xb6\x15\x8d\x53\xd2\x3c\xd9\x3c\x1a\x78\x24\xd2\x04\x2e\x9f\x45\x09\x31\x9a\x4c\xda\xbe\xf6\xc3\x34\x2d\x74\x28\x9b\x75\x5f\xb9\x2a\x55\x8e\x29\xb7\xfe\xf4\x67\x32\x24\x63\x93\xe7\x6e\x6b\x8d\x93\x79\x7a\xff\xb2\xff\xaa\x3f\x38\x02\x6e\x5b\xe9\xd6\x68\xdb\x3c\xdc\xc6\x4a\x8d\x85\xd8\x0f\xc5\x37\x1c\x11\x51\x68\x03\x15\x24\x23\x79\xf8\x76\xbf\x39\x53\x1d\xef\x7e\xbe\x1b\x2b\xf7\x6a\xb1\x5c\xe1\xd7\x0b\x58\xa2\xbc\xcd\xf7\xb0\x4d\x59\xb2\xa5\xb5\x27\xbe\x27\x7e\xc4\x9c\xa3\xe2\xd8\x7d\x20\xd5\x8b\x8b\x68\xd1\x03\x93\x77\x0d\x2b\x4a\x94\xb3\xbe\xa9\x88\x9f\xd9\x8a\x8b\xc0\xce\x98\x33\xc7\x2f\x9f\x71\x7c\x54\xbf\xfe\xf9\x97\x57\x4f\xd5\x2d\xab\x24\xd6\xb5\x95\x15\x89\xe9\x9f\x57\x8b\x6c\x1a\x6f\xd0\x12\x6c\x9d\x45\x93\x53\x57\x1e\xdd\xc5\xe0\x54\x77\xb9\x66\xa4\x4d\x1d\x63\xec\x4f\x90\xda\x71\x20\x6e\x93\xb5\x5f\xee\x13\x19\xcf\xe8\x2b\x0e\x38\x93\x9e\x87\xdd\xd1\x0e\x67\xd2\x3e\xf7\xb2\xb0\x71\xe3\xf8\x8f\x27\x1e\xae\x72\x9c\x6c\x64\x03\xef\x6a\xa7\x6d\x48\x62\x14\x89\xc1\x64\x64\x9c\xb6\xfb\x46\x46\x16\x1b\xfb\xf0\x6a\xfc\x07\x58\x74\x11\xa7\x22\xeb\xd8\x8c\xed\x8b\xd5\xb6\xda\xff\xfd\x13\xc3\xfd\x53\x75\xe0\x93\x0c\x62\x1f\x49\xde\xf5\xe2\xe4\xc4\x56\x1b\x83\x7b\x62\xbd\xd9\x21\x94\x32\xb4\x67\x2a\xc7\x4c\x2a\x88\xee\x53\x27\xda\x9f\xc6\xc3\x1e\xd3\x0e\x2f\x8a\xef\x6f\x8c\xf3\xbe\x8f\xfe\x71\xf9\x64\x20\xc4\x74\xbe\x5a\xde\x5c\x2d\x66\xf3\x15\x3e\x77\xd2\x83\xa2\xf3\x45\x8c\x2f\x27\xf8\xdc\xa9\x65\xe3\xa9\xf3\x45\xfc\x1d\x00\x00\xff\xff\xf1\xb8\x4b\xc7\xec\x07\x00\x00") + +func testImagesAgnhostDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostDockerfile, + "test/images/agnhost/Dockerfile", + ) +} + +func testImagesAgnhostDockerfile() (*asset, error) { + bytes, err := testImagesAgnhostDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostDockerfile_windows = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x56\x5f\x73\xda\xb8\x17\x7d\xf7\xa7\x38\x03\xbf\x99\x24\x33\xd8\x90\xb4\xbf\xee\x96\x3e\xb1\x40\xba\x4c\x5b\xc8\x00\x69\xb7\xd3\x76\x32\x42\xbe\xd8\xda\xc8\x92\x57\x92\x31\xce\xa7\xdf\x91\x6d\x48\x68\xb3\xd3\x9d\xcd\x0b\x96\xee\xd1\xbd\xe7\xfe\x4f\x17\x63\x9d\x57\x46\x24\xa9\xc3\xd5\xe0\x6a\x80\x75\x4a\x78\x57\x6c\xc8\x28\x72\x64\x31\x2a\x5c\xaa\x8d\x8d\x82\x6e\xd0\xc5\x7b\xc1\x49\x59\x8a\x51\xa8\x98\x0c\x5c\x4a\x18\xe5\x8c\xa7\x74\x90\xf4\xf0\x91\x8c\x15\x5a\xe1\x2a\x1a\xe0\xdc\x03\x3a\xad\xa8\x73\xf1\x26\xe8\xa2\xd2\x05\x32\x56\x41\x69\x87\xc2\x12\x5c\x2a\x2c\xb6\x42\x12\x68\xcf\x29\x77\x10\x0a\x5c\x67\xb9\x14\x4c\x71\x42\x29\x5c\x5a\x9b\x69\x95\x44\x41\x17\x9f\x5b\x15\x7a\xe3\x98\x50\x60\xe0\x3a\xaf\xa0\xb7\x4f\x71\x60\xae\x26\xec\xff\x52\xe7\xf2\x61\xbf\x5f\x96\x65\xc4\x6a\xb2\x91\x36\x49\x5f\x36\x40\xdb\x7f\x3f\x1b\x4f\xe7\xab\x69\x78\x15\x0d\xea\x27\xb7\x4a\x92\xb5\x30\xf4\x57\x21\x0c\xc5\xd8\x54\x60\x79\x2e\x05\x67\x1b\x49\x90\xac\x84\x36\x60\x89\x21\x8a\xe1\xb4\xe7\x5b\x1a\xe1\x84\x4a\x7a\xb0\x7a\xeb\x4a\x66\x28\xe8\x22\x16\xd6\x19\xb1\x29\xdc\x49\xb0\x0e\xec\x84\x3d\x01\x68\x05\xa6\xd0\x19\xad\x30\x5b\x75\xf0\xdb\x68\x35\x5b\xf5\x82\x2e\x3e\xcd\xd6\xbf\x2f\x6e\xd7\xf8\x34\x5a\x2e\x47\xf3\xf5\x6c\xba\xc2\x62\x89\xf1\x62\x3e\x99\xad\x67\x8b\xf9\x0a\x8b\x6b\x8c\xe6\x9f\xf1\x6e\x36\x9f\xf4\x40\xc2\xa5\x64\x40\xfb\xdc\x78\xfe\xda\x40\xf8\x30\x52\xec\x63\xb6\x22\x3a\x21\xb0\xd5\x0d\x21\x9b\x13\x17\x5b\xc1\x21\x99\x4a\x0a\x96\x10\x12\xbd\x23\xa3\x84\x4a\x90\x93\xc9\x84\xf5\xc9\xb4\x60\x2a\x0e\xba\x90\x22\x13\x8e\xb9\xfa\xe6\x07\xa7\xa2\x20\x18\x2d\xdf\x7a\xf6\xd3\xd9\x87\xd1\xdb\x69\x70\xbd\x5c\x7c\xc0\xff\x1e\xcf\x41\x17\x5b\xa3\x33\xc4\xca\x16\x4e\x48\x0b\x91\xb1\xc4\xc7\x4a\x28\xeb\x98\x94\x50\xc4\xc9\x5a\x66\x2a\xe4\x8c\xdf\xb3\x84\xec\x30\xe8\x22\xc4\x46\xa8\x38\x74\x5a\x4b\x3b\x04\xd7\xca\x67\xdd\xc7\x2f\xe9\xa1\x4c\x05\x4f\xc1\x99\xf2\xb5\x14\xfb\x5c\x4c\xe6\x2b\x38\xb2\xce\x17\x2c\x42\x8c\xb5\xa1\xc9\x7c\x35\x3c\xca\xad\xce\xe8\x14\x54\x73\x4a\xb5\x75\xb4\x27\xfe\x3d\x27\x8a\xff\x91\x15\x2f\x8c\xec\x41\xf1\x56\xb7\x2f\x13\x48\xed\x7c\x21\xd2\x15\x35\xfa\x71\x2e\x54\x4a\x46\xf8\x24\xd7\x76\x8e\xd1\xb8\x38\x58\x16\x39\x99\xed\xbf\x09\x45\x83\x0c\xa6\xf3\x8f\xe0\xa9\xe6\x5a\x32\x47\xd5\xad\xa5\x4f\x42\xc5\xba\xb4\x63\x9d\xd5\x89\xf7\xbd\xb7\x65\xd2\x52\xb0\xbc\x9d\x23\xd7\x25\x19\x9b\x92\x94\x08\xc7\x3a\xcb\x98\x8a\xd1\xf9\x1a\xf8\xb6\x10\xb4\xc7\xf9\xb9\xa2\x32\xd4\x9b\x3f\x89\x3b\x28\x72\x51\x49\x1b\x2e\x05\x29\x77\x11\x4d\x74\xa9\xa4\x66\xf1\xca\x19\xa1\x92\xf3\x33\xdf\x46\x76\xd8\xef\x3f\x1a\xaf\xfb\xa8\x65\x1c\xe5\xf6\xf2\xec\xe2\xe2\x0d\x1a\xe5\x35\x08\x5b\x62\xae\x30\xe4\x6b\xbd\x6e\x9e\x30\x54\x2c\x23\xd8\x54\x97\x07\xed\x37\x46\x27\x9e\xf6\xe9\xc3\x43\x18\x1e\x33\xaf\x95\xac\x10\x86\xbb\x76\xba\xbc\x8e\x2e\x07\xd1\x0b\x84\xd5\xcf\xbc\x2c\x13\x72\x08\x0b\x23\x70\x74\x20\x11\x2e\x2d\x36\x11\xd7\x59\x9f\x6b\x43\xb1\xb2\xc7\x5f\x43\x92\x98\x1f\x0a\x71\x4b\xaf\xbf\xbb\x8c\xfe\x1f\x0d\x0e\x80\xbb\xfa\x74\x57\x36\x21\xbf\x63\x59\xfc\xea\x65\xe4\x92\x87\x33\x84\x8b\xc2\x5d\xfb\x31\x36\x1e\x7e\x6d\xc1\x5e\xf0\xa6\x61\xe1\x98\x41\xb8\x7f\xd8\x6d\x9f\x17\x2f\x29\xd3\x3b\x0a\x67\x8e\xb2\xef\x00\x9d\xe0\x3f\x38\x58\x17\x4a\xb4\x35\x8f\x5e\xb4\x84\x1b\x89\x9f\x74\xd1\xeb\xb0\x14\xea\xd5\xcb\xe8\x41\xe4\xa7\xe4\x9b\xc7\x0f\x22\x6f\xb9\x4d\xf7\x39\x53\x71\x38\x32\x3c\x15\x3b\x42\x78\xc3\x5c\x7a\x82\x43\x38\x21\xeb\x84\xaa\xe7\xc2\x41\x8a\xf0\x5a\x1b\x4e\x47\xff\x7c\xde\x8f\xfe\xfd\xc0\xe2\x78\xf9\x7c\x3c\x8e\xa6\x3a\x7e\x86\xdc\x2c\x96\x6b\xfc\x3a\x80\x22\x8a\xeb\xbe\x1b\xd6\xbd\x16\x96\xb4\xb1\x64\x76\x64\x1e\x31\xa7\x28\xbf\xcf\xf6\xc4\x7b\xfe\xc3\xbf\x78\x82\xbb\x7c\x06\x77\x10\xbf\x7e\xf1\xcb\xab\xa7\xe2\xda\x48\xe8\x07\x86\x77\x2a\x98\xfe\x71\xb3\x58\x4d\x3d\xa1\xda\x5e\xad\xcc\x3f\x39\x8e\xbb\x83\x3a\x9f\xc7\xec\x3e\x16\xc6\xbb\x54\xe4\x3e\x2f\xf6\x08\xca\xb5\x71\x64\x82\xd1\x64\xd2\x7e\xf6\xa5\xe6\x4c\x7a\x2b\x11\x37\x0e\x27\xa7\xe7\x61\xf7\x54\xe1\xe4\x14\xd4\x38\x96\x28\x7f\x71\xf8\xf5\x16\x5b\x67\x0e\x3b\x80\x94\x33\x55\xae\x85\x72\xa1\x0f\x0b\x19\x18\xf2\xfd\x1d\xb7\x33\x12\x2b\x3f\x33\xdb\xfd\xfa\x13\x70\xd0\x85\xdf\x1f\x46\xc4\x64\x9b\xdd\x5e\x4f\xb6\x33\xfb\xe4\x61\xb3\xd4\x5b\x3e\xe1\x95\x6f\x72\x66\xaa\x9e\xdf\x31\x28\x85\x94\xd8\x91\x11\xdb\x0a\x2e\x65\xae\xb6\xc9\xb5\x31\xc4\x7d\xbe\x9e\x28\x11\xf6\x38\x77\x1b\x4c\xbd\x17\xc8\xff\xa7\xd2\x44\x5a\x0a\x75\xff\xc4\xca\xd1\xff\xe9\x7c\xbd\xfc\x7c\xb3\x98\xcd\xd7\xf8\xd2\xe9\xb7\xd7\x9d\x6f\xc1\xf8\xc3\x04\x5f\x3a\x39\x2b\x2c\x75\xbe\x05\x7f\x07\x00\x00\xff\xff\x8e\x57\xaf\x4a\x17\x09\x00\x00") + +func testImagesAgnhostDockerfile_windowsBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostDockerfile_windows, + "test/images/agnhost/Dockerfile_windows", + ) +} + +func testImagesAgnhostDockerfile_windows() (*asset, error) { + bytes, err := testImagesAgnhostDockerfile_windowsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/Dockerfile_windows", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6b\xdb\x3e\x14\xc5\x9f\xff\xfa\x14\x87\xb8\x0f\x09\xa4\x4e\xff\x65\x6c\xac\xa3\x0c\x2f\xc9\x52\xd3\xce\x1e\x76\xda\xd2\xa7\x22\xdb\x37\xf6\x05\x47\xd2\x24\x79\x4e\xbe\xfd\x50\xda\xc2\xca\xf4\x76\xef\x3d\xf7\xe8\xa7\xa3\x08\x4b\x6d\x8e\x96\xdb\xce\xe3\xf2\xe2\xff\xcf\xd8\x76\x84\xdb\xa1\x22\xab\xc8\x93\x43\x32\xf8\x4e\x5b\x17\x8b\x48\x44\xb8\xe3\x9a\x94\xa3\x06\x83\x6a\xc8\xc2\x77\x84\xc4\xc8\xba\xa3\xb7\xc9\x1c\x0f\x64\x1d\x6b\x85\xcb\xf8\x02\xd3\x20\x98\xbc\x8e\x26\xb3\x2f\x22\xc2\x51\x0f\xd8\xcb\x23\x94\xf6\x18\x1c\xc1\x77\xec\xb0\xe3\x9e\x40\x87\x9a\x8c\x07\x2b\xd4\x7a\x6f\x7a\x96\xaa\x26\x8c\xec\xbb\xd3\x35\xaf\x26\xb1\x88\xf0\xf4\x6a\xa1\x2b\x2f\x59\x41\xa2\xd6\xe6\x08\xbd\xfb\x5b\x07\xe9\x4f\xc0\xe1\x74\xde\x9b\xab\xc5\x62\x1c\xc7\x58\x9e\x60\x63\x6d\xdb\x45\xff\x22\x74\x8b\xbb\x74\xb9\xce\xca\xf5\xf9\x65\x7c\x71\x5a\xb9\x57\x3d\x39\x07\x4b\xbf\x06\xb6\xd4\xa0\x3a\x42\x1a\xd3\x73\x2d\xab\x9e\xd0\xcb\x11\xda\x42\xb6\x96\xa8\x81\xd7\x81\x77\xb4\xec\x59\xb5\x73\x38\xbd\xf3\xa3\xb4\x24\x22\x34\xec\xbc\xe5\x6a\xf0\xef\xc2\x7a\xa3\x63\xf7\x4e\xa0\x15\xa4\xc2\x24\x29\x91\x96\x13\x7c\x4b\xca\xb4\x9c\x8b\x08\x8f\xe9\xf6\x26\xbf\xdf\xe2\x31\x29\x8a\x24\xdb\xa6\xeb\x12\x79\x81\x65\x9e\xad\xd2\x6d\x9a\x67\x25\xf2\xef\x48\xb2\x27\xdc\xa6\xd9\x6a\x0e\x62\xdf\x91\x05\x1d\x8c\x0d\xfc\xda\x82\x43\x8c\xd4\x84\xcc\x4a\xa2\x77\x00\x3b\xfd\x02\xe4\x0c\xd5\xbc\xe3\x1a\xbd\x54\xed\x20\x5b\x42\xab\x7f\x93\x55\xac\x5a\x18\xb2\x7b\x76\xe1\x33\x1d\xa4\x6a\x44\x84\x9e\xf7\xec\xa5\x3f\x75\xfe\x79\x54\x2c\x44\x59\x2c\xcb\x6b\xd9\xaa\x4e\x3b\x2f\xf2\x12\x5f\xaf\xd1\xb3\x1a\x0e\x22\x29\x96\x37\xa1\x92\xfb\xe6\xe3\x07\xb1\x4d\x8a\xcd\x7a\x1b\xea\xb3\xe9\xf2\xbe\x58\xa5\xc5\x4c\x6c\xf2\xa4\xf8\x11\x5a\x9f\xc4\x26\xbf\x4b\xb2\xcd\xf3\xc3\xba\x28\xd3\x3c\x3b\x99\x48\x4f\xce\x07\xfb\xe7\x55\x5a\x20\xec\x29\xed\x1b\xb6\x38\x9b\xba\x8e\xfa\x1e\x66\x6c\x66\x33\x41\x07\xa3\xad\x17\xa2\x62\x75\x25\xfe\x8b\xe3\x05\xef\x65\x4b\xe7\x83\xe7\x3e\x76\x1d\x2a\x56\x38\x9b\x06\xc8\x99\x10\xf1\xcf\x9b\x3c\x7b\xba\x0a\x4d\xf1\x27\x00\x00\xff\xff\x95\x12\x72\xa6\x04\x03\x00\x00") + +func testImagesAgnhostMakefileBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostMakefile, + "test/images/agnhost/Makefile", + ) +} + +func testImagesAgnhostMakefile() (*asset, error) { + bytes, err := testImagesAgnhostMakefileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\x48\xce\x49\x2c\x4d\xc9\x2c\x4d\x4a\xcd\x29\xe5\x02\x04\x00\x00\xff\xff\x9b\x12\xb6\xf7\x1b\x00\x00\x00") + +func testImagesAgnhostOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostOwners, + "test/images/agnhost/OWNERS", + ) +} + +func testImagesAgnhostOwners() (*asset, error) { + bytes, err := testImagesAgnhostOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd2\x33\x32\xe2\x02\x04\x00\x00\xff\xff\x67\x48\x64\x77\x05\x00\x00\x00") + +func testImagesAgnhostVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostVersion, + "test/images/agnhost/VERSION", + ) +} + +func testImagesAgnhostVersion() (*asset, error) { + bytes, err := testImagesAgnhostVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostAgnhostGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x97\x4f\x93\xda\x38\x13\xc6\xcf\xd6\xa7\xe8\xf2\xe1\x2d\x48\x0d\x76\xc2\x7b\xd9\x9d\xad\x3d\xb0\xcc\x9f\x50\x99\x65\x52\x63\xb2\x53\x39\x0a\xb9\xb1\x55\x23\x4b\x5e\x49\x1e\x86\x4a\xe5\xbb\x6f\xb5\x30\x04\xb2\x86\x35\x27\x2c\xe9\xf7\x74\x37\xb2\xf4\x58\x4a\xdf\xb1\xa9\xa9\x37\x56\x16\xa5\x87\xf1\xfb\x0f\xbf\xc2\xa2\x44\xf8\xd4\x2c\xd1\x6a\xf4\xe8\x60\xd2\xf8\xd2\x58\x97\x30\xf6\x20\x05\x6a\x87\x39\x34\x3a\x47\x0b\xbe\x44\x98\xd4\x5c\x94\x08\xed\xc8\x15\xfc\x85\xd6\x49\xa3\x61\x9c\xbc\x87\x01\x01\x71\x3b\x14\x0f\x7f\x63\x1b\xd3\x40\xc5\x37\xa0\x8d\x87\xc6\x21\xf8\x52\x3a\x58\x49\x85\x80\x6f\x02\x6b\x0f\x52\x83\x30\x55\xad\x24\xd7\x02\x61\x2d\x7d\x19\x92\xb4\x21\x12\xf6\xb5\x0d\x60\x96\x9e\x4b\x0d\x1c\x84\xa9\x37\x60\x56\x87\x14\x70\xcf\x18\x00\x40\xe9\x7d\x7d\x9d\xa6\xeb\xf5\x3a\xe1\xa1\xca\xc4\xd8\x22\x55\x5b\xca\xa5\x0f\xb3\xe9\xed\x3c\xbb\x1d\x8d\x93\xf7\x8c\x7d\xd1\x0a\x9d\x03\x8b\x7f\x37\xd2\x62\x0e\xcb\x0d\xf0\xba\x56\x52\xf0\xa5\x42\x50\x7c\x0d\xc6\x02\x2f\x2c\x62\x0e\xde\x50\x9d\x6b\x2b\xbd\xd4\xc5\x15\x38\xb3\xf2\x6b\x6e\x91\xe5\xd2\x79\x2b\x97\x8d\x3f\x9a\xa0\x5d\x55\xd2\xc1\x21\x60\x34\x70\x0d\xf1\x24\x83\x59\x16\xc3\x1f\x93\x6c\x96\x5d\xb1\xe7\xd9\xe2\xe3\xe3\x97\x05\x3c\x4f\x9e\x9e\x26\xf3\xc5\xec\x36\x83\xc7\x27\x98\x3e\xce\x6f\x66\x8b\xd9\xe3\x3c\x83\xc7\x3b\x98\xcc\xbf\xc2\xa7\xd9\xfc\xe6\x0a\x50\xfa\x12\x2d\xe0\x5b\x6d\xa9\x76\x63\x41\xd2\xd4\x61\x9e\xb0\x0c\xf1\x28\xf9\xca\x6c\x8b\x71\x35\x0a\xb9\x92\x02\x14\xd7\x45\xc3\x0b\x84\xc2\xbc\xa2\xd5\x52\x17\x50\xa3\xad\xa4\xa3\x97\xe7\x80\xeb\x9c\x29\x59\x49\xcf\x7d\x68\xff\xeb\xef\x24\xec\x5d\xca\x58\xcd\xc5\x0b\x05\xa9\xb8\xd4\x8c\xc9\xaa\x36\xd6\xc3\x80\x45\xf1\x4a\xf1\x22\x66\x2c\x8a\x0b\xe9\xcb\x66\x99\x08\x53\xa5\xae\x5e\x7d\xf8\x7f\x2a\xcc\xd2\xf2\x30\xf4\xf2\x8b\x4b\xa4\x49\x5f\x94\x29\xd2\xd7\x71\xcc\x22\xde\xe4\xd2\xd7\xd6\xbc\x6d\x60\x3f\xb8\x5f\x85\xa9\x47\xe7\x53\x59\xf1\x02\x5d\xca\x0b\x5d\x1a\xe7\xd3\xa0\x18\x05\x49\x7c\x10\xf1\xbc\x48\x18\xad\x51\xf8\x98\x45\xc2\xe6\xc2\xe8\xd7\x35\x2e\x4b\x63\x5e\xfa\x26\x15\x36\x1f\x91\x6c\xbb\xd0\x47\xad\xba\x7f\xfe\x5c\xbb\xfe\x30\x6a\x6f\x37\xb5\x91\xda\x8f\x68\x18\x6d\x7f\xe9\x8a\xbf\x60\x21\xbd\x43\xfb\x7a\x89\xac\x68\xd0\xf9\xe5\x45\xff\x48\x6a\xa1\x1a\x2a\x4e\x28\x89\xda\xf7\x17\x2a\xf9\x8a\x1a\x1d\xcd\x87\x32\x85\x2b\x50\xf7\x7d\x09\x84\x8f\x0a\xd4\x68\xb9\x37\x17\xfc\xbb\xca\x34\xda\xd3\x40\x7f\x89\xc6\xcb\x60\x7c\x43\x71\x91\xa0\x2d\x47\x1b\xa7\xb9\xef\x3b\x01\xda\x8c\x08\x1f\x1d\x89\x2f\xda\x3c\x87\x11\x2e\xdd\x43\xa6\x46\x2d\xf3\x0a\x3d\xcf\xb9\xe7\xfd\x75\x35\x6f\x1c\xc6\x2c\x22\xa3\x58\x19\xbb\xe6\x36\xdf\x2e\xeb\xbe\x45\x93\x70\xd4\x2a\x2f\xde\x11\x24\x0e\xbc\x45\x27\x8c\x76\x4d\x85\x56\x78\xab\xfa\x26\xb7\xe8\x4c\x63\x05\x8e\x76\x62\x7a\xf0\xd6\x28\x15\xa2\x86\x9d\x46\xa0\xe6\x15\xf6\x8d\x19\x44\xa3\x9d\x2a\x66\x11\x41\x6b\x5c\x6e\xb7\x6d\xdf\x28\xe1\x1d\xee\x55\xfd\x67\x64\x6f\x5e\x43\xc6\x56\x8d\x16\xc1\xc9\x07\x43\xf8\xc6\x22\x6b\x8c\x9f\x56\x39\x5c\xff\x0e\xff\x0b\xa6\x9d\x4c\x4d\x55\x71\x9d\x7f\x63\x51\xf4\xc5\xe1\x35\x7d\x62\x21\xe6\x75\x1d\x5f\xb1\x28\x6a\xbf\xfb\xd7\x10\x8f\x93\xf1\x98\xba\xbe\xb3\x7d\x90\x64\x92\xe7\xad\x7a\xf0\xc3\xe5\x93\x69\x95\x4f\xa8\xf5\x99\x5a\xc3\x4e\xba\x35\x6b\x42\xa7\xdb\xc7\x13\xdc\x91\x95\x07\xdc\x92\xa2\x75\xe9\xe7\x6d\x7f\xb7\x36\xd7\x8e\x04\x37\xf3\x2c\x6b\x56\x2b\xf9\xf6\x9f\x54\x98\xe4\x07\xe9\x4e\xd4\xd2\x92\xb7\x5e\x7c\x34\xce\xbb\x6e\xe8\x87\xb1\x07\x76\xdf\x5a\x84\x35\xdd\xad\x39\x72\x74\x92\xdd\xf1\x17\xbc\x97\x7e\x5b\x50\xb7\x66\x6f\xe7\xc4\xdf\xef\x1a\xdd\xec\x4f\x3e\x4e\x8a\x99\x9e\x6e\xbb\xa6\xa1\xab\x5b\xb7\xb3\x71\x12\x3c\xb4\xcf\x27\xc8\xad\xcb\x07\xd0\x14\xee\x7e\x67\xe0\xdd\xf4\xde\xac\x89\xff\x73\xd7\xe8\x66\x35\x06\x6a\x8e\xa7\xc7\xc9\x98\x5b\x86\x1e\x4f\x72\xbb\x8c\x73\x3c\x97\x2f\x18\x6e\xc0\x4c\xa6\x79\x78\x6f\xe7\xc8\xfd\x8a\xff\x81\x9f\x59\xf6\xc1\x27\x89\xfe\x4c\x0f\x27\x98\xe0\x66\x01\x0a\x4f\xa7\xa9\x23\xa7\xdd\x09\xee\xb6\x9d\xe7\xd6\xdb\x4f\x36\x49\xca\xa7\xd6\x02\xa7\x6d\xff\x74\x6f\x80\xdd\x21\x8e\x3c\x91\x02\x84\xb5\xfa\xb1\xed\xe8\xd6\x1c\x39\x20\x69\xa8\xc6\xe7\x5d\x47\xb7\xe6\x60\xe3\x9f\xdd\xeb\xc7\x1f\xae\x5d\x70\x2a\x4a\x0a\x9c\x08\x41\x8b\x6c\xe6\x5c\x83\xf6\x46\x3a\x41\x67\xe3\xcd\x90\xb1\x28\x4d\x61\xfe\xb8\xb8\x1d\x08\x45\xf6\xd5\x2c\x87\xd7\x90\x99\x0a\x81\x4a\x75\xc0\x2d\x42\xcd\x9d\xa3\x53\xb4\x32\x45\x41\xbf\x16\x15\xa7\x73\x3e\x9d\x84\x1d\x5d\x12\x60\x8d\xa0\xdb\xeb\xc3\x12\x21\xdc\x2b\xbc\x09\xa1\xb9\x08\x97\x1f\x5f\x62\x95\xc0\x82\xee\x44\x6b\xa9\x14\x70\xe5\xe8\xa6\x21\x54\x93\x87\xd3\x7c\x45\xd7\x0e\x3a\x83\xd7\x56\x6a\x8a\x5d\xa2\xaa\x93\x70\x74\xa2\x94\x77\x94\x29\xd8\x35\xe5\x4c\xa8\x99\xa1\xff\xf6\x9d\x45\x74\xc4\x4e\x66\x5a\xfa\x80\x0c\x0e\xf9\x83\x59\xfa\x4c\x56\xe9\x3c\xea\x16\x1b\xd2\xbc\xdd\x9b\x36\xce\x29\xd5\xed\x1b\x8a\xc6\xe3\x60\xc8\xbe\xb3\x7f\x02\x00\x00\xff\xff\x53\x84\x76\xca\x4a\x0e\x00\x00") + +func testImagesAgnhostAgnhostGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostAgnhostGo, + "test/images/agnhost/agnhost.go", + ) +} + +func testImagesAgnhostAgnhostGo() (*asset, error) { + bytes, err := testImagesAgnhostAgnhostGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/agnhost.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostAuditProxyMainGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x55\x5d\x6f\xdb\xb8\x12\x7d\x16\x7f\xc5\x5c\x01\x2d\xe4\x40\xa5\x92\xde\x97\x5e\x17\x79\x70\x9d\xe4\xd6\x68\xeb\x14\x71\xb2\x45\xb1\x58\x2c\x68\x69\x24\x71\x4b\x91\x2a\x3f\xec\x78\x8b\xfc\xf7\xc5\x50\x72\x12\xb7\x68\x8b\x62\x9f\x64\x92\x33\xc3\x33\xe7\x9c\xa1\x8b\x23\x36\x37\xfd\xce\xca\xa6\xf5\xf0\xfc\xf8\xe4\x7f\x70\xdd\x22\xbc\x09\x6b\xb4\x1a\x3d\x3a\x98\x05\xdf\x1a\xeb\x38\x63\x6f\x65\x89\xda\x61\x05\x41\x57\x68\xc1\xb7\x08\xb3\x5e\x94\x2d\xc2\x78\x92\xc3\x6f\x68\x9d\x34\x1a\x9e\xf3\x63\xc8\x28\x20\x1d\x8f\xd2\xc9\x4b\xb6\x33\x01\x3a\xb1\x03\x6d\x3c\x04\x87\xe0\x5b\xe9\xa0\x96\x0a\x01\x6f\x4b\xec\x3d\x48\x0d\xa5\xe9\x7a\x25\x85\x2e\x11\xb6\xd2\xb7\xf1\x92\xb1\x04\x67\x1f\xc7\x02\x66\xed\x85\xd4\x20\xa0\x34\xfd\x0e\x4c\xfd\x38\x0a\x84\x67\x0c\x00\xa0\xf5\xbe\x9f\x16\xc5\x76\xbb\xe5\x22\xa2\xe4\xc6\x36\x85\x1a\xa2\x5c\xf1\x76\x31\x3f\x5f\xae\xce\x9f\x3d\xe7\xc7\x8c\xdd\x68\x85\xce\x81\xc5\xcf\x41\x5a\xac\x60\xbd\x03\xd1\xf7\x4a\x96\x62\xad\x10\x94\xd8\x82\xb1\x20\x1a\x8b\x58\x81\x37\x84\x73\x6b\xa5\x97\xba\xc9\xc1\x99\xda\x6f\x85\x45\x56\x49\xe7\xad\x5c\x07\x7f\x40\xd0\x1e\x95\x74\xf0\x38\xc0\x68\x10\x1a\xd2\xd9\x0a\x16\xab\x14\x5e\xcd\x56\x8b\x55\xce\x3e\x2c\xae\x5f\x5f\xde\x5c\xc3\x87\xd9\xd5\xd5\x6c\x79\xbd\x38\x5f\xc1\xe5\x15\xcc\x2f\x97\x67\x8b\xeb\xc5\xe5\x72\x05\x97\x17\x30\x5b\x7e\x84\x37\x8b\xe5\x59\x0e\x28\x7d\x8b\x16\xf0\xb6\xb7\x84\xdd\x58\x90\x44\x1d\x56\x9c\xad\x10\x0f\x2e\xaf\xcd\x00\xc6\xf5\x58\xca\x5a\x96\xa0\x84\x6e\x82\x68\x10\x1a\xb3\x41\xab\xa5\x6e\xa0\x47\xdb\x49\x47\xe2\x39\x10\xba\x62\x4a\x76\xd2\x0b\x1f\xd7\xdf\xb4\xc3\xd9\x51\xc1\x58\x2f\xca\x4f\x54\x44\x84\x4a\xfa\xde\x9a\xdb\x1d\x63\xb2\xeb\x8d\xf5\x90\xb1\x24\x95\xa6\x90\x26\x78\xa9\x52\x96\xa4\xca\x34\xf4\xd1\xe8\x0b\x12\x86\x7e\x1b\x97\x32\x96\xa4\x8d\xf4\x6d\x58\xf3\xd2\x74\x85\xeb\xeb\x93\xff\x16\xa5\x59\x5b\x11\x8f\x3e\xbd\x70\x5c\x9a\x42\xf4\xb2\x13\x65\x2b\x35\xda\x5d\xd1\x7f\x6a\x0a\x1b\xb4\x97\x1d\xa6\x3f\x0f\x29\x1c\x5a\x29\x94\xfc\x1b\x6d\xf1\x97\x33\x3a\x65\x49\x44\x2b\xb5\xf3\x42\x29\x78\x94\xef\xd0\x6e\xd0\xc6\x64\x5a\x15\x31\xae\x18\x03\xf7\x79\x9b\x93\x9f\xa7\x6c\x4e\x0e\x81\x3d\x8e\xa2\x80\x94\x4d\x18\x2b\x0a\x98\x77\xd5\x8c\xd6\xef\x89\x39\x32\x48\x70\xa3\xf5\x1a\xdd\x1a\xe7\x61\x4e\x44\x70\xb6\x11\xf6\xab\xd8\x53\x78\x1a\x49\xe2\x73\xd3\x75\x42\x57\x5f\x58\x72\xe3\x70\x0a\x00\x69\xbc\xe1\x59\x14\x23\xcd\x59\xb2\x6a\x8d\xf5\x53\x9a\x42\xe7\x51\x3b\xf2\x5d\xd4\xe7\xc5\xf1\x8b\xe3\x68\x0b\xa9\x4b\xd3\x91\xfe\x31\x11\x70\x83\xda\x3b\xca\x7c\x6b\x74\x33\x05\x48\x6f\xdc\xe0\x79\x8f\xce\x43\xb5\xd3\xa2\x93\x25\x8c\x1c\x36\x1c\x16\x1e\xd4\x2f\xd5\x26\x73\xc5\xe9\x41\x47\x8e\xea\x20\x0e\x72\xd0\xb2\x36\xb6\x83\x4e\x68\x4d\x56\x33\xe0\x7c\x65\x82\xe7\x04\x65\x66\x1b\x37\x05\x18\x5a\x7e\x27\x6e\x65\x17\xba\x25\x6d\x66\xc7\x93\x9c\x25\x57\x41\x53\xeb\x9d\x90\x3a\x67\x77\x2c\xf2\x95\xb1\x04\x75\x69\xc8\xb6\xa3\x13\xf8\xf9\xb0\x66\x49\x85\x87\x07\x67\xc3\x9a\x54\xa9\x83\x2e\x63\xa1\xac\xec\x2a\x38\x3a\x20\x39\x07\x61\x1b\x07\xbf\xff\x41\x53\xac\x9b\x09\x7c\x61\x89\x2b\x5b\xec\x10\xa6\xa7\xf7\xc5\x96\xb8\x5d\xc5\xcd\x6c\x72\x68\x35\xbe\x18\xbe\xd9\x90\x33\x61\xc9\x83\x35\xa9\x00\xb9\x33\x66\xdf\xef\x66\x71\xeb\x0c\x6b\x11\x94\x7f\x87\x5e\x5c\x88\xd2\x1b\xbb\xcb\x61\x28\xf1\xf0\xad\x85\x72\x54\x71\xdf\xf2\xe9\xc0\x38\x9f\x9b\x0a\x4b\xb7\xef\xfc\xc2\xd8\xf1\x79\xce\x1e\xae\xce\x61\xf4\x35\x1f\x60\xff\xdf\x9a\xd0\x8f\x61\x93\x07\xae\xbe\xaa\x78\xa3\xe5\x06\xad\x13\x6a\xe4\x2e\xfb\x51\x11\x96\xd0\xc4\xf3\xd7\x42\x57\x0a\x2f\x82\x2e\xb3\xb4\x48\x73\x68\xe3\xda\x4e\x58\xa2\x4c\xc3\x2f\x84\x17\x2a\x8b\x81\x83\x57\x67\xba\x5a\xd1\xe0\x64\xe9\x94\x0c\x95\xe6\xa0\xa5\x9a\x4c\x48\xe0\xa8\xd2\x98\x9e\x6d\xe3\x43\xcf\xaf\xd0\xf5\x46\x3b\xfc\x40\xce\xb2\x39\x3d\xe5\x70\x34\x9e\x7c\x0e\xe8\x7c\xd4\x6b\x6d\xaa\x5d\x0e\x68\x23\xe3\xc3\xe3\xc4\xaf\x50\x54\x33\xa5\x32\x8b\x9f\xf9\x2b\x53\xed\x26\x2c\x91\x75\x8c\xf9\xcf\x29\xdd\x49\x79\x11\xe2\x7b\x2b\xb5\xaf\xb3\xb4\x34\x41\x55\xf1\x4f\xcc\xa2\xa8\xe2\x9f\x06\xcd\x06\xd5\x9e\xc2\x93\x4d\x1a\x2f\x98\xb0\x24\xd9\xf2\x88\xe6\x35\x0a\xa2\x28\x82\x59\x79\xe1\x83\x5b\x68\x8f\x56\x0b\x15\x1b\xb4\xe7\xd6\x9a\x18\x6f\xd1\x07\xab\x59\x72\xc7\x12\x54\x84\xf0\xe9\x9e\xd6\x73\x1a\x1d\xe2\xe5\xcb\x1d\xbb\x87\xf7\xc8\x75\x83\x0c\x0b\xed\x4d\x36\x2a\x96\xc3\xd8\xab\x9a\xbc\xfc\x51\x33\xb5\x90\x0a\x2b\x88\x59\x34\xaa\xeb\x50\x4f\xe1\xc9\x3a\x07\xd1\xcb\x51\xc1\x29\x3c\x71\xe9\xbe\xde\x0f\xdd\xf2\x6f\x3a\xae\xb0\xa6\x99\x1c\x45\xe0\x73\x65\x1c\xcd\x10\x4b\x8a\x62\x78\x2e\xf6\xef\xc7\xfd\xdb\xc0\x12\x7a\x64\xfe\xcc\x87\x83\x48\x87\xd0\x0d\x02\x2a\xbe\xf0\xd8\xb9\xd8\xeb\x48\xd4\x38\x19\xe3\x28\x64\x4f\x63\x4a\x0e\xc6\xf1\x55\xac\x45\x60\xbe\x55\xfd\x3b\xb2\x0f\xc5\x1e\xbf\x6a\x87\xba\xff\x32\x0d\xf7\x3c\x10\x11\x77\xec\xfb\xf9\x97\x6f\x68\x00\xfe\x09\x00\x00\xff\xff\x2b\xc6\xc5\xa5\xb3\x09\x00\x00") + +func testImagesAgnhostAuditProxyMainGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostAuditProxyMainGo, + "test/images/agnhost/audit-proxy/main.go", + ) +} + +func testImagesAgnhostAuditProxyMainGo() (*asset, error) { + bytes, err := testImagesAgnhostAuditProxyMainGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/audit-proxy/main.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostConnectConnectGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x56\xef\x6f\xdb\xc8\x11\xfd\xcc\xfd\x2b\xa6\x04\x7a\x25\x05\x8a\xb2\xd3\x4f\x55\xe2\x0f\xaa\x2c\x37\x42\x72\x92\x21\xca\x17\x1c\x72\x41\x6f\x45\x0e\xc9\x85\xc9\x5d\x76\x77\x69\xd9\x08\xfc\xbf\x17\xb3\x24\xf5\xc3\x89\x83\x06\x28\x90\x58\x12\x77\x76\xde\x9b\x37\x6f\x46\x9a\x8c\xd8\x5c\x35\x4f\x5a\x14\xa5\x85\x37\x17\x97\xff\x80\x6d\x89\xf0\xa1\xdd\xa1\x96\x68\xd1\xc0\xac\xb5\xa5\xd2\x26\x66\xec\xa3\x48\x51\x1a\xcc\xa0\x95\x19\x6a\xb0\x25\xc2\xac\xe1\x69\x89\xd0\x9f\x44\xf0\x1b\x6a\x23\x94\x84\x37\xf1\x05\x04\x14\xe0\xf7\x47\x7e\xf8\x96\x3d\xa9\x16\x6a\xfe\x04\x52\x59\x68\x0d\x82\x2d\x85\x81\x5c\x54\x08\xf8\x98\x62\x63\x41\x48\x48\x55\xdd\x54\x82\xcb\x14\x61\x2f\x6c\xe9\x40\xfa\x14\x31\xfb\xbd\x4f\xa0\x76\x96\x0b\x09\x1c\x52\xd5\x3c\x81\xca\x4f\xa3\x80\x5b\xc6\x00\x00\x4a\x6b\x9b\xe9\x64\xb2\xdf\xef\x63\xee\x58\xc6\x4a\x17\x93\xaa\x8b\x32\x93\x8f\xcb\xf9\x62\x95\x2c\xc6\x6f\xe2\x0b\xc6\xee\x64\x85\xc6\x80\xc6\xff\xb4\x42\x63\x06\xbb\x27\xe0\x4d\x53\x89\x94\xef\x2a\x84\x8a\xef\x41\x69\xe0\x85\x46\xcc\xc0\x2a\xe2\xb9\xd7\xc2\x0a\x59\x44\x60\x54\x6e\xf7\x5c\x23\xcb\x84\xb1\x5a\xec\x5a\x7b\x26\xd0\xc0\x4a\x18\x38\x0d\x50\x12\xb8\x04\x7f\x96\xc0\x32\xf1\xe1\x9f\xb3\x64\x99\x44\xec\xd3\x72\xfb\x7e\x7d\xb7\x85\x4f\xb3\xcd\x66\xb6\xda\x2e\x17\x09\xac\x37\x30\x5f\xaf\xae\x97\xdb\xe5\x7a\x95\xc0\xfa\x06\x66\xab\xdf\xe1\xc3\x72\x75\x1d\x01\x0a\x5b\xa2\x06\x7c\x6c\x34\x71\x57\x1a\x04\x49\x87\x59\xcc\x12\xc4\x33\xf0\x5c\x75\x64\x4c\x83\xa9\xc8\x45\x0a\x15\x97\x45\xcb\x0b\x84\x42\x3d\xa0\x96\x42\x16\xd0\xa0\xae\x85\xa1\xe6\x19\xe0\x32\x63\x95\xa8\x85\xe5\xd6\x7d\xfe\xa6\x9c\x98\x8d\x26\x8c\x35\x3c\xbd\xa7\x24\xa9\x92\x12\x53\xcb\x98\xa8\x1b\xa5\x2d\x04\xcc\xf3\xf3\xda\xfa\xcc\xf3\x25\xba\x17\x65\xe8\xaf\x79\x32\x29\xaf\x2a\x7a\x6b\x45\x8d\x3e\x63\x9e\x5f\x08\x5b\xb6\xbb\x38\x55\xf5\x44\x98\x52\x64\x7c\xcf\x2d\xd7\xed\xc4\xa4\xb6\xf1\xcf\xcf\x4d\x93\x5f\xfe\x7d\x92\xaa\x9d\xe6\x3e\x0b\x19\x9b\x4c\x60\x5e\x67\xf3\x0e\x9c\x04\x6e\x4d\xdf\xba\x42\x96\xca\x58\x98\x53\x68\xcc\x1e\xb8\x3e\x0d\xbc\x82\x5f\x5c\x8e\x78\xae\xea\x9a\xcb\xec\x2b\xf3\xee\x0c\x4e\x01\xc0\xef\x0b\x81\xcf\x74\x7d\x4a\xb5\x7c\xf1\x23\xe6\x25\xa5\xd2\x76\x0a\xfe\xcc\x5a\xac\x1b\x6b\x80\xc3\x76\x7e\x4b\x8a\x27\xf3\xed\xed\x50\xbe\x70\x3d\xcd\x40\xa3\x6d\xb5\x74\x6c\xf2\xb6\x02\xd4\x5a\x69\x43\x69\x3e\x2a\x59\x4c\xe1\xcf\xad\x16\x68\xc8\x45\xaa\x41\xf9\x7a\x2a\xab\x9c\xe0\x85\x78\x40\x09\xae\x1c\x4a\x4e\x9c\x62\x58\xcb\x2e\x2d\x08\x0b\x8d\x16\x92\x28\x0d\x8f\x6a\x34\x86\x9a\xd2\x68\xcc\xc5\x23\x66\xdd\x18\xf1\x63\xef\xbb\xa7\x64\x45\x59\x80\x2d\xb9\x05\x8b\xc6\x42\xca\x0d\x1a\x48\xb9\x84\xb4\xc4\xf4\x9e\x3c\x33\x65\x6c\x04\x77\xab\x0f\xab\xf5\xa7\x15\x8c\xe1\x5f\x28\x51\x8b\x74\xd2\xca\x7b\xa9\xf6\x12\x02\xa9\xe4\x58\xa2\xdd\x2b\x7d\x1f\xf6\xe8\x01\x16\x11\xec\x78\x06\x5c\x17\x6d\x8d\xd2\x9a\x90\x8d\x60\xbb\xfc\x75\x41\xc6\x1e\xbb\xdd\x72\xaa\x57\xa7\x28\x90\x1d\x32\x50\xad\x65\x23\xb8\x5e\x25\x30\x86\xd9\xa1\x44\xe9\x9e\x68\x34\xaa\x6a\xe9\x12\x1b\xc1\x66\x71\x73\x97\x2c\xae\x61\x0c\xf3\x63\x2e\x8d\x39\x19\x80\x8d\x60\xbd\x7d\xbf\xd8\xc0\x18\xd6\x6e\x40\x7a\x86\x54\xed\x09\x47\x5f\x2a\xd0\xaa\xb5\x48\x42\x93\xbc\x7e\xf8\x67\xc4\xbc\x99\x2e\xcc\x14\x3a\x7f\x2c\x1e\x79\x6a\xe9\x41\x70\x19\x46\xcc\xdb\xb4\x72\x0a\x50\x73\x21\x23\xf6\xcc\x9c\xab\x88\xb6\x6a\x3b\xfa\xf1\x75\xab\xdd\xb8\xb8\x93\x46\x2b\xab\x52\x55\xf5\x3a\x33\x96\xb7\x32\x05\x21\x85\x0d\x42\xf8\xca\xbc\xa3\x1f\xe3\x9b\x8a\x17\x26\x08\x0f\xf7\x7f\xe3\x3a\xf8\xa5\xcf\x1c\x81\xdf\xbf\xf3\xa3\x73\x94\xe0\x22\x8c\xc0\xff\x95\x3f\x8a\xba\xad\xdd\x11\xec\x30\x57\x1a\x7b\xff\x51\xb9\x83\x27\xfc\xf0\xbb\x80\x89\xa3\xe6\xe0\x06\xba\x11\xf8\xc3\x5b\x9f\xb0\xd3\x86\x5e\xa8\x69\x87\x82\xac\xea\x76\xb7\xa2\x8d\x91\x2b\x5d\x3b\x9b\x1e\x7b\x1a\x39\x0f\xed\x10\x6c\xda\x90\xaf\xdd\x20\x87\xa4\x98\x93\x80\xf4\x0b\xd2\x3a\x83\xd1\xd9\x10\x46\x64\x18\x03\x9f\xbf\x74\x7a\x39\x8d\x32\xb2\xe5\xf4\xca\x9d\x7c\xbe\xf8\xc2\x3c\xb3\x17\x36\x2d\x8f\x54\xbe\x32\x8f\x5c\x0b\xfe\xc0\x75\xca\x3c\xaf\x67\xb2\x9d\xdf\x06\x94\x20\x1a\x9a\x14\x0e\xc1\x8e\xd0\x49\x24\x0d\xde\x37\xa1\x19\xe6\xbc\xad\x2c\x85\xe5\xb5\x8d\x6f\xdc\x94\x05\xca\xc4\x89\xcd\x50\xeb\x08\xfc\x3b\x69\xda\x86\xc6\x11\xb3\x03\xa3\x3f\xa4\x1f\x1d\x3e\x84\xcc\xf3\x94\x89\x17\x8f\xc2\x06\x97\x21\xf3\x9e\x0f\x1a\xbc\xa0\xd8\x7b\x24\xfa\xbe\x9d\x9c\x14\x93\x09\x6c\x30\x6b\x65\xc6\xa5\xad\x9e\xa0\xe1\x9a\xbe\xe8\xdc\xb2\x31\xaa\x7a\xe8\xb6\x3d\xe5\x12\xd2\x5d\x02\xa3\x60\x8f\xae\x13\x9d\x1d\xfa\x26\x69\x4d\x7b\x9a\xd2\x75\x6b\x09\x84\xfb\xee\xd4\xf8\x37\x5a\x6a\x8d\x56\xbb\x0a\xeb\x98\x79\x22\x87\x7f\x47\xf4\x0f\xb5\xa6\x16\x48\xb4\x71\xd2\x54\xc2\xbe\x57\xc6\xde\x2a\x6d\x1d\xf1\xf0\xad\x3b\xff\xcb\x15\x48\xe1\xba\x71\xa2\x55\x7e\x2e\x56\xb7\x44\xa6\xf0\xd7\x07\xa7\x11\x6a\xfd\xad\x3c\x3d\xea\x09\xe4\xa6\xab\x6e\x3b\xbf\x9d\x65\x99\x0e\x7a\x3f\xfe\x1c\xf4\xf5\x2a\xf9\x31\x2c\x73\x46\x38\xc3\xbd\x16\xbc\xda\x76\xcd\x38\x05\x3d\x35\x88\xc8\xdd\x85\xab\x23\x01\xca\x12\xcf\x2b\x65\x30\x38\x05\xb9\x38\xd4\xa6\x9a\x05\x31\x52\xf7\x04\x83\x5a\xc7\xc1\x88\xc0\xd6\xf4\x58\xe9\xf0\x2d\x9d\x50\xa2\x21\x34\x1e\x28\x38\x0b\xbc\x5e\x61\xbf\x5d\xff\x90\x34\xe7\xe7\xd5\x79\xcf\x80\x15\xfd\xfa\xc8\xa1\xff\xf2\x3d\xa1\xd0\x81\x2c\x1c\x11\xca\x77\x08\x38\x25\xe3\x9d\x5d\xa5\x68\xaa\xb9\x7f\x12\x2f\xe6\xeb\xd5\x6a\xd8\xc6\x2e\xfc\x55\x96\x7d\xd4\xc0\xf2\x9c\x26\x29\x44\xff\xa9\x1b\xaf\x25\x70\x5b\xfd\x45\x2b\x4f\x92\xbc\x18\xae\xc3\x54\xff\x0f\xd3\xc5\xb3\x4c\x1f\xfa\x4f\xeb\x61\x30\x1e\x25\xe9\x9c\xe7\x96\x46\x6f\xbd\x43\xf3\xff\x3f\xee\xeb\x79\xcd\x4b\x42\x77\xe4\x66\xb9\x45\x1d\x1c\xbd\x86\x5a\x77\xa7\x35\xbf\xc7\x20\x2d\xb9\x84\xc0\xcd\x6f\x18\x32\xe6\x15\x0a\xa8\xf0\xde\x25\x67\x5e\x76\xb5\x90\x99\x9d\x1a\x43\x11\x52\x54\x11\x50\xcd\x61\x67\xb6\x17\x3e\x7e\x69\x64\x6a\x4d\xc7\xe0\xdd\x98\x62\x99\xf7\x1c\x10\xae\xc1\x8a\x7e\x2b\x0d\x4b\xb8\x87\x7c\x37\x76\xb1\xd3\x63\xea\x13\x95\x7e\xaa\xb7\x2f\x9d\xdc\xe3\xbc\x1b\x1f\x04\xfb\xc1\x76\x3e\x9f\x89\x97\x6b\xf8\xbf\x01\x00\x00\xff\xff\x54\x07\xa6\x63\xf4\x0c\x00\x00") + +func testImagesAgnhostConnectConnectGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostConnectConnectGo, + "test/images/agnhost/connect/connect.go", + ) +} + +func testImagesAgnhostConnectConnectGo() (*asset, error) { + bytes, err := testImagesAgnhostConnectConnectGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/connect/connect.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostCrdConversionWebhookConfigGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x54\x5d\x6f\xdb\x36\x14\x7d\x36\x7f\xc5\x99\x1f\x06\x3b\x70\xa5\x2c\xc0\x80\xce\x43\x1f\x3c\x27\xd9\x84\x04\xf6\x10\xb9\xed\x8a\x61\x0f\x34\x75\x25\x11\xa6\x49\x8d\xbc\x8a\x2a\x14\xf9\xef\x03\x25\x27\x4e\xb1\x3e\x6c\x8f\xf2\x39\x3c\x1f\xd7\x97\x4c\x2f\xc4\xda\x35\xbd\xd7\x55\xcd\xb8\xba\xfc\xe1\x2d\x76\x35\xe1\xae\xdd\x93\xb7\xc4\x14\xb0\x6a\xb9\x76\x3e\x24\x42\xdc\x6b\x45\x36\x50\x81\xd6\x16\xe4\xc1\x35\x61\xd5\x48\x55\x13\x4e\xc8\x02\x1f\xc8\x07\xed\x2c\xae\x92\x4b\xcc\x22\x61\x7a\x82\xa6\xf3\x9f\x45\xef\x5a\x1c\x65\x0f\xeb\x18\x6d\x20\x70\xad\x03\x4a\x6d\x08\xf4\x59\x51\xc3\xd0\x16\xca\x1d\x1b\xa3\xa5\x55\x84\x4e\x73\x3d\x98\x9c\x24\x12\xf1\xe9\x24\xe0\xf6\x2c\xb5\x85\x84\x72\x4d\x0f\x57\xbe\x66\x41\xb2\x10\x00\x50\x33\x37\xcb\x34\xed\xba\x2e\x91\x43\xca\xc4\xf9\x2a\x35\x23\x2b\xa4\xf7\xd9\xfa\x66\x93\xdf\xbc\xb9\x4a\x2e\x85\x78\x6f\x0d\x85\x00\x4f\x7f\xb7\xda\x53\x81\x7d\x0f\xd9\x34\x46\x2b\xb9\x37\x04\x23\x3b\x38\x0f\x59\x79\xa2\x02\xec\x62\xce\xce\x6b\xd6\xb6\x5a\x20\xb8\x92\x3b\xe9\x49\x14\x3a\xb0\xd7\xfb\x96\xbf\x1a\xd0\x73\x2a\x1d\xf0\x9a\xe0\x2c\xa4\xc5\x74\x95\x23\xcb\xa7\xf8\x65\x95\x67\xf9\x42\x7c\xcc\x76\xbf\x6d\xdf\xef\xf0\x71\xf5\xf0\xb0\xda\xec\xb2\x9b\x1c\xdb\x07\xac\xb7\x9b\xeb\x6c\x97\x6d\x37\x39\xb6\xb7\x58\x6d\x3e\xe1\x2e\xdb\x5c\x2f\x40\x9a\x6b\xf2\xa0\xcf\x8d\x8f\xd9\x9d\x87\x8e\xa3\xa3\x22\x11\x39\xd1\x57\xe6\xa5\x1b\xc3\x84\x86\x94\x2e\xb5\x82\x91\xb6\x6a\x65\x45\xa8\xdc\x23\x79\xab\x6d\x85\x86\xfc\x51\x87\xf8\xe7\x05\x48\x5b\x08\xa3\x8f\x9a\x25\x0f\xdf\xff\xaa\x93\x88\x8b\x54\x88\x46\xaa\x43\x14\x51\xbe\x50\xce\x3e\x76\xb4\xaf\x9d\x3b\x08\xa1\x8f\x8d\xf3\x8c\x99\x98\x4c\x95\xef\x1b\x76\x29\x9b\x30\x15\x62\x32\x3d\xbc\x0d\x89\x76\xa9\x32\x9a\x2c\xbf\xa9\x5c\x7a\x78\xd9\xb3\xe9\xb7\x60\x4f\x81\x5f\x01\x07\xe3\xaa\xf4\xf1\x6a\x2a\xe6\x42\xa4\x29\x7e\x25\x8e\x3b\x30\xb0\x03\xf1\xb8\x30\xda\xbe\x51\xa6\x0d\x4c\x1e\xca\xd9\x52\x57\x89\x28\x5b\xab\x50\x11\xaf\x07\xe6\x6c\x8e\x8b\xb3\x6d\xb2\x7e\x39\xfe\x45\x4c\xc6\x13\x0b\x90\xf7\x58\xbe\x43\xb4\x4f\x32\xbb\x1e\xf5\xd6\x03\x38\x9b\x8b\x89\x2e\x07\xc6\x77\xef\x60\xb5\x89\xe7\x26\x31\x59\x72\x2b\x59\x9a\x19\x79\x3f\x17\x93\x27\x31\x79\x09\xf6\xa2\xf7\xca\x76\x43\xdd\xad\x7b\x96\x1c\x6d\xff\xb3\xb0\x27\x6e\xbd\x3d\x17\x17\x4f\x62\xec\x38\xea\xec\xee\xf3\x93\x22\xd6\xa7\x3e\xe7\x19\x7d\xb3\xfa\x1c\x17\x6c\x42\x32\xb2\xa3\x6d\x58\x93\x3f\xc7\x8e\xd8\xbd\x93\xc5\x1f\x3f\x5e\xfe\x74\x47\xfd\xef\x52\xfb\x93\x41\x12\x79\xb7\xda\xd0\xe2\x79\xd8\x77\xd4\xc7\xef\xff\xdb\xe5\xfb\xb3\x7f\x64\x46\xd9\xb8\xa8\x92\x29\x2c\xf1\xe7\x5f\x03\x7a\xfe\xed\xcb\x90\xef\x69\x21\x26\x93\x34\xc5\x6e\x7b\xbd\x5d\xc6\x07\x25\xe0\xd8\x72\x2b\x4d\x0c\x0c\x59\xc6\x15\xe8\x68\xbc\xb6\xf1\xc2\x75\xb5\x64\x28\xf2\x3c\x6c\xb2\x6c\x74\x20\xff\x48\x1e\xa1\x76\xad\x29\xa2\x40\x32\x0a\x8e\x73\x89\xef\xde\x12\x18\xda\x3f\x8c\x0f\xc3\xca\x16\x1f\xc8\xeb\xb2\x1f\x19\xc3\x90\x62\x8b\x27\xf1\x4f\x00\x00\x00\xff\xff\xbd\x43\x72\xb5\x46\x05\x00\x00") + +func testImagesAgnhostCrdConversionWebhookConfigGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostCrdConversionWebhookConfigGo, + "test/images/agnhost/crd-conversion-webhook/config.go", + ) +} + +func testImagesAgnhostCrdConversionWebhookConfigGo() (*asset, error) { + bytes, err := testImagesAgnhostCrdConversionWebhookConfigGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/crd-conversion-webhook/config.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostCrdConversionWebhookConverterConverter_testGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x56\x6d\x6f\xdb\x46\x12\xfe\xac\xfd\x15\x53\x02\xbe\x52\x29\x4d\xca\xc1\x1d\x5a\xb0\xf0\x01\x8a\xe3\x5c\x85\xa6\x76\x20\x2a\x57\x04\x69\xd0\xae\x96\x23\x69\x13\x72\x97\xb7\x3b\x94\xac\x0b\xfc\xdf\x0f\xb3\xa4\xde\x1c\x27\x68\x80\x02\xe7\x17\x4a\x9c\x9d\x7d\x66\xe6\x99\xd9\x99\xcd\x9e\x88\x2b\xdb\x6c\x9d\x5e\xae\x08\x9e\x8e\x2e\x7e\x80\xd9\x0a\xe1\xe7\x76\x8e\xce\x20\xa1\x87\x71\x4b\x2b\xeb\x7c\x2a\xc4\x4b\xad\xd0\x78\x2c\xa1\x35\x25\x3a\xa0\x15\xc2\xb8\x91\x6a\x85\xd0\xaf\x24\xf0\x6f\x74\x5e\x5b\x03\x4f\xd3\x11\xc4\xac\x10\xf5\x4b\xd1\xf0\x47\xb1\xb5\x2d\xd4\x72\x0b\xc6\x12\xb4\x1e\x81\x56\xda\xc3\x42\x57\x08\x78\xa7\xb0\x21\xd0\x06\x94\xad\x9b\x4a\x4b\xa3\x10\x36\x9a\x56\xc1\x48\x0f\x91\x8a\x37\x3d\x80\x9d\x93\xd4\x06\x24\x28\xdb\x6c\xc1\x2e\x8e\xb5\x40\x92\x10\x00\x00\x2b\xa2\x26\xcf\xb2\xcd\x66\x93\xca\xe0\x65\x6a\xdd\x32\xab\x3a\x2d\x9f\xbd\x9c\x5c\x5d\xdf\x14\xd7\xe7\x4f\xd3\x91\x10\xaf\x4d\x85\xde\x83\xc3\xff\xb4\xda\x61\x09\xf3\x2d\xc8\xa6\xa9\xb4\x92\xf3\x0a\xa1\x92\x1b\xb0\x0e\xe4\xd2\x21\x96\x40\x96\xfd\xdc\x38\x4d\xda\x2c\x13\xf0\x76\x41\x1b\xe9\x50\x94\xda\x93\xd3\xf3\x96\x4e\x08\xda\x79\xa5\x3d\x1c\x2b\x58\x03\xd2\x40\x34\x2e\x60\x52\x44\xf0\x6c\x5c\x4c\x8a\x44\xfc\x3a\x99\xfd\x74\xfb\x7a\x06\xbf\x8e\xa7\xd3\xf1\xcd\x6c\x72\x5d\xc0\xed\x14\xae\x6e\x6f\x9e\x4f\x66\x93\xdb\x9b\x02\x6e\x5f\xc0\xf8\xe6\x0d\xfc\x3c\xb9\x79\x9e\x00\x6a\x5a\xa1\x03\xbc\x6b\x1c\xfb\x6e\x1d\x68\xa6\x0e\xcb\x54\x14\x88\x27\xc6\x17\xb6\x73\xc6\x37\xa8\xf4\x42\x2b\xa8\xa4\x59\xb6\x72\x89\xb0\xb4\x6b\x74\x46\x9b\x25\x34\xe8\x6a\xed\x39\x79\x1e\xa4\x29\x45\xa5\x6b\x4d\x92\xc2\xfb\x27\xe1\xa4\xe2\x49\x26\x44\x23\xd5\x07\x06\x51\xd6\xac\xd1\x11\x3a\x21\x74\xdd\x58\x47\x10\x8b\x41\x34\xdf\x12\xfa\x48\x0c\xa2\x45\x4d\xfc\x61\x90\x32\xce\xc9\xf1\xf7\xf0\x20\xf4\x41\x81\xd9\x31\xcb\xb0\x85\x45\xda\x2c\x23\x21\x06\xb2\xd1\x78\x47\x68\x82\x67\xeb\x0b\x88\x3e\xfc\xe0\x53\x6d\xb3\x13\xf9\xb9\x6c\xb4\x47\xb7\x46\x97\x35\x1f\x96\xbc\xe6\x4f\x15\xb2\xf5\x05\xe3\x1e\xf6\xd6\x52\xad\xb4\x41\xb7\x3d\x6c\xa8\x91\xe4\x57\xe8\x65\xad\xf1\xe4\x5a\x45\xad\xc3\xf2\x4b\x9b\x5c\x6b\x48\xd7\xf8\x27\x54\x32\x8f\x4e\xcb\x4a\xff\x17\x5d\xf6\xde\x5b\x13\x89\xa1\x10\x8b\xd6\x28\x98\xa1\xa7\xab\x1d\xcd\x6f\xc6\xbf\xbc\x8c\x09\x9e\xf4\x2c\xa5\xb3\x21\x7c\x14\x03\x25\x3d\x7a\xc8\x2f\xe1\xed\xbb\xce\x2f\x16\x32\x7d\xbb\x33\xc9\x3f\x1d\xc7\x62\x30\x50\xd6\x10\x1a\x9a\x6d\x1b\x3c\x91\xe3\x5d\x83\x8a\xb0\xfc\xfb\x68\x74\xed\xdc\x5e\x7e\xcf\x58\xfc\x7f\x04\x98\x07\xc4\xe8\x84\xe7\xb4\x8f\x70\x7d\x31\x47\x92\x17\x51\xc2\x5b\x8e\x6c\xe5\xfd\x96\x70\xb6\xb8\xb8\xba\x38\x83\xda\xa9\xe9\x1c\x22\x5e\x82\x46\x3a\x8f\x80\xce\x59\x17\xd4\xee\x93\x47\x3d\xf9\x5a\x37\x4e\x7c\xd8\xca\xba\xfa\x12\xf8\x17\xc2\xfc\xff\x47\xf8\x55\xc1\xdd\x8b\x81\x97\x75\x53\xe1\xed\xfc\xfd\x0c\xeb\xa6\x92\x84\x5c\x33\x7f\x7c\xd0\xa6\xcc\xa1\x2b\x31\x36\x30\xc5\xb5\xc6\x8d\x38\xf6\xe0\xcc\x0b\x6e\x90\xe8\x29\x17\x00\xad\x2e\x73\x18\x8d\x46\xa3\xf3\xd3\x87\x00\x28\xd1\x73\x17\x1d\xbf\x9a\xec\xf7\x7a\xe2\x4e\x9a\xe2\x5d\x30\x9e\x2a\x5b\x67\xeb\xa7\x02\xc0\xce\xdf\xa3\x22\x9f\x87\x8e\x7d\x0e\xc7\xe6\x1e\xdb\x72\x11\xf4\x00\x7a\x6f\x9d\x35\x33\x39\xef\x65\x7c\x2c\x4b\x49\x32\xef\xdf\x01\x8c\xac\x31\x87\x7a\x7b\x6e\x70\x73\xae\x9c\x35\xe7\x9d\xb9\x5e\x81\xbb\xe1\x41\x99\xd7\x0b\x96\x40\xf4\x04\xfa\xdf\xec\x1f\xd1\x7e\x5d\xd7\x72\xd9\xa1\xc9\x0d\x7a\x5b\x63\x87\x18\xc4\xbd\xd2\xca\x7a\x7a\x65\x1d\xe5\x10\x55\x56\xc9\x8a\xdf\xf3\xef\x47\xdf\x8f\x22\xf1\x87\x18\x70\x13\xfe\x3d\x01\x52\xcc\xb7\x93\x86\x1b\x67\x38\xb2\x9c\x6a\x4a\xa7\xad\x89\x49\xa5\x07\x06\xbe\x8b\x20\xfa\x8e\x54\x7a\x94\xd9\x04\xb8\x19\x7c\x7a\xf4\x07\x87\xa4\x32\xf8\xa2\xa6\xb4\x68\x9c\x36\xb4\x88\x3f\xc9\x36\x7b\x70\x64\x65\xc8\xbb\xb3\x0c\x5e\x68\xe7\x09\xc8\x6d\x81\x6b\x32\x01\x4d\xe0\x57\xb6\xad\x4a\x58\x48\x5d\x81\xf4\xa1\xfd\x33\xbf\x3c\xca\x48\xd6\x15\x6f\x74\xe8\x1b\xcb\x13\x26\xbf\x84\x5d\x2b\x4f\x6f\x70\x33\x45\x65\x5d\x89\x2e\x1e\x76\x5a\xa1\x6a\x12\xae\xf1\x9d\x66\xa7\x15\xe4\x71\xf4\xea\xb6\x98\x45\x09\x44\x59\x3f\x49\xa2\xa4\x6f\x3c\xbe\x53\x93\x0c\xb5\x8f\x64\x18\x40\xf5\x22\xc0\x7d\x73\x09\x46\x57\x1d\x09\x03\x4a\x5f\x48\x92\x55\x8c\xce\x05\x9d\xfb\x23\xeb\xe9\x4f\x01\x26\x1d\x97\x65\x1c\x5d\x75\x9c\x9e\x33\xa9\x51\x60\xe4\x88\xe5\xb0\xb5\xe0\x69\x72\xdd\xd5\x5e\xdf\x78\xe3\x5d\xb4\x09\xf4\x98\xc3\xfe\xe4\xf1\x6a\x77\x60\x38\xbc\x07\x13\x2b\x7d\x78\xa8\x3e\x06\xb7\xbc\x5a\x61\x1d\x88\xeb\x9b\x3f\x87\x5a\x04\x61\xbc\x0b\xb0\xc2\x50\x13\xa7\x6d\x63\x08\xff\x84\x51\x1f\xf0\xdc\x96\xdb\x00\xd1\x7b\x96\x3e\xb3\xe5\x36\x7d\xc6\x93\xb7\x03\x61\x94\x6f\xc2\x24\x66\x37\xf8\xd6\xe4\x63\xde\x94\xc0\xdb\x77\x2c\x7e\x04\xbe\xaf\xa8\x3d\x9b\x8b\x38\xda\x69\xf0\xdd\x27\x94\x83\x35\xf0\xed\x99\xff\x36\x81\x79\x4b\x5c\x2a\x2c\xc4\x32\xdc\xd8\xb8\x4f\x74\x94\x9e\xe2\xee\x52\x1a\xcc\x77\x29\xec\xf2\x33\x70\x48\xad\x33\x5d\xbe\xf8\xc9\x0d\xab\xd8\x0f\x42\x0e\x8f\x4b\x92\xe9\xe1\xc1\x77\x58\x89\x83\xf8\x39\x2e\x64\x5b\xd1\x2f\x48\xf2\x85\x54\x64\xdd\x36\x81\x8e\xdb\xdd\xe7\x8e\xcd\xdf\x13\xfe\xeb\x6b\xf0\xd4\x48\xfa\x1c\x95\x2d\x31\x7e\x94\xc7\x84\x2b\x2c\x81\xbf\x9d\x24\x7a\xf8\xe3\x67\xcb\x6f\x11\x47\x4a\x1a\xbe\xe4\x96\x01\x35\x9c\x9a\x1c\x7e\x33\x70\xb6\xfe\xcd\xc0\x35\x37\xfa\x1c\xce\xd6\x51\x72\x9a\xb7\xe0\xdb\xa1\x6e\xf5\x02\x4e\x2c\xa6\xd3\x9d\xf2\x14\x7d\x5b\x51\x5a\x90\xa4\xd6\xb3\x0b\xeb\x8b\xfe\xa5\x68\x95\xe2\xcb\xe0\x27\xfe\xb8\x1e\x2b\x5c\x04\xba\x6c\xf5\x2e\x3c\x6e\xe3\xe0\xc6\xee\x72\x57\xf6\xcd\xe5\xf8\xd6\x93\xbe\x3e\x7a\xf9\x78\xff\xe7\x79\xfe\x4c\x60\x57\x47\xb6\x78\x2c\xbc\x1d\xbd\x4b\xa7\x72\xf3\x20\x01\x61\xf9\x0b\xfc\xc7\x0f\x69\xc4\x04\x24\xfb\x12\x3d\x3a\x85\x0e\x1c\x04\xe0\xf4\x5f\x48\x87\xc9\x15\xb3\x1d\xb6\x22\xf7\x36\x42\xfe\x8e\x0e\xc5\x25\x9c\xad\x13\x90\x8a\x5a\x59\x5d\x76\x9c\xb2\xc1\xc7\x3d\xd8\xcf\x85\x87\x56\xbb\x88\xdf\x46\x61\xed\xdd\x5f\x6b\x34\x8c\xa0\xcf\xd8\xe3\xeb\xfa\x5f\x60\xef\x7e\xc8\x77\x8b\x7b\xf1\xbf\x00\x00\x00\xff\xff\xc6\xc7\x36\xae\x4e\x0e\x00\x00") + +func testImagesAgnhostCrdConversionWebhookConverterConverter_testGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostCrdConversionWebhookConverterConverter_testGo, + "test/images/agnhost/crd-conversion-webhook/converter/converter_test.go", + ) +} + +func testImagesAgnhostCrdConversionWebhookConverterConverter_testGo() (*asset, error) { + bytes, err := testImagesAgnhostCrdConversionWebhookConverterConverter_testGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/crd-conversion-webhook/converter/converter_test.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostCrdConversionWebhookConverterExample_converterGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x54\x51\x6f\xdb\x36\x17\x7d\x16\x7f\xc5\x2d\x81\x00\x72\xe1\x4f\x4a\xfc\x54\xf8\x83\x1f\xbc\x24\x5b\x8d\x76\x76\x11\xa5\x0d\x8a\x22\x40\x69\xe9\x4a\xe2\x2c\x91\x2c\x79\x65\xc7\x48\xf3\xdf\x07\xca\x52\xa2\x66\x6b\x92\x01\xc3\x5e\x2c\x8b\x3c\xe7\x9e\x73\x2f\x0f\x15\xbf\x66\xa7\xda\xec\xad\x2c\x4a\x82\xc9\xf1\xc9\x1b\xb8\x2c\x11\xde\x35\x6b\xb4\x0a\x09\x1d\xcc\x1b\x2a\xb5\x75\x11\x63\xef\x65\x8a\xca\x61\x06\x8d\xca\xd0\x02\x95\x08\x73\x23\xd2\x12\xa1\xdb\x19\xc3\x27\xb4\x4e\x6a\x05\x93\xe8\x18\x42\x0f\xe0\xdd\x16\x1f\xfd\x9f\xed\x75\x03\xb5\xd8\x83\xd2\x04\x8d\x43\xa0\x52\x3a\xc8\x65\x85\x80\x37\x29\x1a\x02\xa9\x20\xd5\xb5\xa9\xa4\x50\x29\xc2\x4e\x52\xd9\x8a\x74\x25\x22\xf6\xb9\x2b\xa0\xd7\x24\xa4\x02\x01\xa9\x36\x7b\xd0\xf9\x10\x05\x82\x18\x03\x00\x28\x89\xcc\x34\x8e\x77\xbb\x5d\x24\x5a\x97\x91\xb6\x45\x5c\x1d\x50\x2e\x7e\xbf\x38\x3d\x5f\x26\xe7\xff\x9b\x44\xc7\x8c\x7d\x54\x15\x3a\x07\x16\xbf\x35\xd2\x62\x06\xeb\x3d\x08\x63\x2a\x99\x8a\x75\x85\x50\x89\x1d\x68\x0b\xa2\xb0\x88\x19\x90\xf6\x3e\x77\x56\x92\x54\xc5\x18\x9c\xce\x69\x27\x2c\xb2\x4c\x3a\xb2\x72\xdd\xd0\x0f\x03\xea\x5d\x49\x07\x43\x80\x56\x20\x14\xf0\x79\x02\x8b\x84\xc3\x2f\xf3\x64\x91\x8c\xd9\xd5\xe2\xf2\xed\xea\xe3\x25\x5c\xcd\x2f\x2e\xe6\xcb\xcb\xc5\x79\x02\xab\x0b\x38\x5d\x2d\xcf\x16\x97\x8b\xd5\x32\x81\xd5\xaf\x30\x5f\x7e\x86\x77\x8b\xe5\xd9\x18\x50\x52\x89\x16\xf0\xc6\x58\xef\x5d\x5b\x90\x7e\x74\x98\x45\x2c\x41\xfc\x41\x3c\xd7\x07\x33\xce\x60\x2a\x73\x99\x42\x25\x54\xd1\x88\x02\xa1\xd0\x5b\xb4\x4a\xaa\x02\x0c\xda\x5a\x3a\x7f\x78\x0e\x84\xca\x58\x25\x6b\x49\x82\xda\xf7\xbf\xb4\x13\xb1\xd7\x31\x63\x46\xa4\x1b\x5f\x24\xd5\x6a\x8b\x96\xd0\x32\x26\x6b\xa3\x2d\x41\xc8\x02\x9e\xd7\xc4\x59\xc0\x7d\xcf\xaa\x70\x9c\xb1\x80\x6f\xde\xb8\x48\xea\x78\x53\xe9\x22\xde\x4e\xfc\x52\x8d\x24\xb6\x27\xd0\xef\x08\x23\x6b\x91\x96\x52\xa1\xdd\xc7\x66\x53\xf8\x05\x17\x7b\x50\xbc\x3d\xe1\x0f\x15\x9e\xc4\xc5\x8d\x72\x64\x9b\x94\x1a\x8b\x19\x67\x23\xc6\xf2\x46\xa5\xbd\xcb\xf3\x1b\x51\x9b\x0a\x4f\x2f\xce\xc2\xd5\xfa\x0f\x4c\x09\x5e\x0f\xf1\xd1\xc7\xc1\xcb\x18\x48\xf7\x89\x3e\xf4\x31\x82\xf0\x29\xf8\xa1\x9d\x28\x21\x41\x8d\x1b\xc1\x2d\x0b\x7c\xaf\xd1\xa7\x70\x32\x8a\x16\x2a\xd7\x21\xef\x5c\xf8\x89\xa7\x36\xe3\x23\xc6\x82\x7e\x7c\x59\xe7\x67\x3a\x83\xc3\xbf\xe8\x0c\xd1\xf8\xcb\x19\x8e\x58\x90\x5b\x5d\xf7\x5e\x1e\x10\xbf\x21\xcd\x3f\x2c\xba\xf5\xd0\x57\x93\xf9\xc0\xf4\x6c\x06\x43\xde\x2d\x0b\x02\x8b\xd4\x58\x05\x4a\x56\x63\x70\xad\xcf\x73\x6b\xb5\xbd\x92\x54\xfe\x8e\xce\x89\x02\x7b\x93\x2d\xc5\xd3\x41\x40\xff\xea\xc3\x4f\x0e\xab\x1c\x5c\xa9\x9b\x2a\x6b\xef\x72\x2a\xaa\xaa\x4d\xc7\x0e\xd7\xa5\xd6\x9b\x29\x1c\x39\x3e\x98\xdd\x88\x05\x77\x8c\x05\x6e\x27\x29\x2d\x7f\xe2\xdc\x7b\x4b\x85\x43\xe0\x8e\xfc\xa5\x8b\xf0\x70\x4e\x51\xaa\x6b\x7f\xf6\x53\x16\xf4\x05\x1e\xda\xf3\xfd\xfc\x9c\x34\x69\x49\x41\xa9\x1d\x7d\xd0\x96\xc6\xa0\x37\x7e\x72\x8f\xc6\x1d\x1d\x1e\x5f\x78\x8f\xe3\xd7\x9e\x25\x73\x0f\xf7\x02\x41\x90\x61\x85\x84\xe1\xdf\x13\xc7\xf0\xc0\x1c\xb5\x70\x23\x2c\x39\xaf\xd4\x45\x3f\x4a\x4c\x25\x29\xec\x51\x51\xd8\x45\x69\x0c\x7c\xda\x51\x64\x0e\x15\xaa\xb0\x65\x8e\xe0\xd5\x0c\x26\x9d\xf4\x8b\x8e\x4b\xaa\xad\xa8\x64\x06\xbd\x02\x6c\x45\xd5\x20\x7c\x3d\xda\x7e\xe5\xe3\xfb\xd5\x83\xd2\x5d\xfb\xfb\xd4\x0c\xf8\x35\xcc\xa0\x75\xf2\xe5\xf8\xfa\x49\xb4\x69\xa7\x75\x8f\x3e\x69\xd1\x5e\x20\xc3\x5c\x34\x15\xb5\xe3\x7f\x49\x03\x8d\xc2\x1b\x83\xa9\xff\x30\x0e\xa2\xd7\x3f\x8f\xbe\x3d\x0a\x93\xd7\x78\xee\xd8\xff\x61\x56\x4e\x1e\xb2\x32\x86\x52\xb8\xb7\xda\xd1\x73\x61\x39\x04\xc5\xb4\xd1\x2a\x85\x6b\x27\xff\x04\xc5\x0c\xb3\xd5\x4b\x7c\xff\x7e\x4f\xbd\xed\x93\xf0\xaa\xdf\xec\x22\xe0\xb5\x60\x06\x9c\x0f\x0e\xb0\x83\x0d\x88\xad\x91\xc7\xb0\xe7\xb3\x0e\x33\xc8\x6b\x8a\x12\x63\xa5\xa2\x3c\xe4\x47\x6e\xda\x5e\xde\xc3\x24\xcc\x7d\x6e\x5e\x72\x07\xf8\xcb\xa0\xe6\xfe\xaa\xfc\x47\x59\x19\x48\xfc\x4b\x0a\x83\x8f\x6a\xfb\x71\xeb\xeb\x3e\xea\xb9\xd7\x48\x9a\x34\x45\xcc\xc2\x11\xbb\x63\x7f\x06\x00\x00\xff\xff\xe4\x22\x8f\xbf\x70\x09\x00\x00") + +func testImagesAgnhostCrdConversionWebhookConverterExample_converterGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostCrdConversionWebhookConverterExample_converterGo, + "test/images/agnhost/crd-conversion-webhook/converter/example_converter.go", + ) +} + +func testImagesAgnhostCrdConversionWebhookConverterExample_converterGo() (*asset, error) { + bytes, err := testImagesAgnhostCrdConversionWebhookConverterExample_converterGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/crd-conversion-webhook/converter/example_converter.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostCrdConversionWebhookConverterFrameworkGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x59\x5f\x6f\xdb\x46\x12\x7f\x26\x3f\xc5\x94\x40\x03\xd2\x60\xc9\xc4\x4f\x85\x0a\x3d\xa8\xb6\xd3\xea\xda\xd8\x85\x65\x27\x08\x02\xe3\xba\x22\x47\xd4\x46\xd4\x92\xb7\xbb\x94\xa2\x1a\xfe\xee\x87\xd9\x5d\x52\x94\x25\x25\x4e\x1a\x14\x77\xd7\x0b\x10\x8b\xdc\x9d\x99\x9d\xbf\xbf\x9d\x5d\xa6\x27\xfe\x59\x55\x6f\x24\x2f\xe6\x1a\x4e\x9f\xbf\xf8\x1e\x6e\xe6\x08\xbf\x34\x53\x94\x02\x35\x2a\x18\x35\x7a\x5e\x49\x95\xf8\xfe\xaf\x3c\x43\xa1\x30\x87\x46\xe4\x28\x41\xcf\x11\x46\x35\xcb\xe6\x08\x6e\x26\x86\xd7\x28\x15\xaf\x04\x9c\x26\xcf\x21\x24\x82\xc0\x4d\x05\xd1\x0f\xfe\xa6\x6a\x60\xc9\x36\x20\x2a\x0d\x8d\x42\xd0\x73\xae\x60\xc6\x4b\x04\xfc\x90\x61\xad\x81\x0b\xc8\xaa\x65\x5d\x72\x26\x32\x84\x35\xd7\x73\xb3\x88\x13\x91\xf8\x6f\x9d\x80\x6a\xaa\x19\x17\xc0\x20\xab\xea\x0d\x54\xb3\x3e\x15\x30\xed\xfb\x00\x00\x73\xad\xeb\x41\x9a\xae\xd7\xeb\x84\x19\x2d\x93\x4a\x16\x69\x69\xa9\x54\xfa\xeb\xf8\xec\xe2\x72\x72\xf1\xdd\x69\xf2\xdc\xf7\x6f\x45\x89\x4a\x81\xc4\x7f\x35\x5c\x62\x0e\xd3\x0d\xb0\xba\x2e\x79\xc6\xa6\x25\x42\xc9\xd6\x50\x49\x60\x85\x44\xcc\x41\x57\xa4\xe7\x5a\x72\xcd\x45\x11\x83\xaa\x66\x7a\xcd\x24\xfa\x39\x57\x5a\xf2\x69\xa3\x77\x1c\xd4\x6a\xc5\x15\xf4\x09\x2a\x01\x4c\x40\x30\x9a\xc0\x78\x12\xc0\x8f\xa3\xc9\x78\x12\xfb\x6f\xc6\x37\x3f\x5f\xdd\xde\xc0\x9b\xd1\xf5\xf5\xe8\xf2\x66\x7c\x31\x81\xab\x6b\x38\xbb\xba\x3c\x1f\xdf\x8c\xaf\x2e\x27\x70\xf5\x12\x46\x97\x6f\xe1\x97\xf1\xe5\x79\x0c\xc8\xf5\x1c\x25\xe0\x87\x5a\x92\xee\x95\x04\x4e\xae\xc3\x3c\xf1\x27\x88\x3b\x8b\xcf\x2a\xab\x8c\xaa\x31\xe3\x33\x9e\x41\xc9\x44\xd1\xb0\x02\xa1\xa8\x56\x28\x05\x17\x05\xd4\x28\x97\x5c\x51\xf0\x14\x30\x91\xfb\x25\x5f\x72\xcd\xb4\x79\xdf\x33\x27\xf1\x4f\x52\xdf\xaf\x59\xb6\x20\x21\x59\x25\x56\x28\x35\x4a\xdf\xe7\xcb\xba\x92\x1a\x42\xdf\x0b\x66\x4b\x1d\xf8\x5e\xc0\xab\x94\x57\x8d\xe6\x25\xbd\x08\xd4\x29\xc5\x85\x9e\xc9\x19\xa2\x50\x81\xef\x7b\x41\xc1\xf5\xbc\x99\x26\x59\xb5\x4c\x97\x8d\x10\x28\xff\x48\x8b\x8a\x35\xba\x12\x58\x18\x82\xc5\xf7\x2a\xe1\x55\xba\x28\xab\x22\x5d\x9d\xf6\x87\x58\xcd\xf1\x83\x46\x61\x34\xff\x8e\xd5\x5c\xa1\x5c\xa1\x4c\xeb\x45\x41\x73\x6a\x97\x20\x5d\xbd\x08\xfe\x04\xef\x14\x35\x23\x01\x4b\xd4\x6c\xf5\x02\x7a\x72\x96\x2c\x9b\x73\x81\x72\xb3\x65\x26\xa2\xbd\xf5\x8e\xd3\xa5\x8d\x50\x5a\x36\x99\x6e\x24\xe6\x1f\x63\x92\x8d\xd0\x7c\x89\x4f\x20\x49\x15\x4a\xce\x4a\xfe\x07\xca\xf4\xbd\xaa\x44\xe0\x7b\x14\x09\x37\x7b\x5c\x7d\x22\xda\x2e\x13\xf9\x7e\x9a\xb6\x41\x7e\xd9\x88\x8c\x92\x99\x92\xa1\x51\x28\x21\xc7\x19\x17\x98\xc3\xac\x11\x19\x65\x8b\x49\x36\x26\x36\x8e\x81\x3c\x97\x18\x48\xc9\xaa\x1c\xa9\x72\xb6\x55\xcf\x15\x30\x12\xad\x71\x59\x97\x4c\x53\xce\x32\x0d\x19\x13\x30\x35\xc2\x3b\x51\x67\xd7\x3d\x69\x50\xf0\x15\xb6\x62\xdc\xa2\x89\xaf\x37\x35\xee\xe8\x48\x53\xe1\xd5\xf4\x3d\x66\x1a\x4e\xfa\xae\x4d\x6e\x7b\x2f\x31\xb4\x52\x6d\x3a\x46\x10\x7e\x8c\xd8\xc6\x3d\x99\x68\xa6\x1b\x15\xf9\x3e\x2d\x02\xca\xbc\x5d\x48\x59\xc9\x37\x5c\xcf\x5f\xa1\x52\xac\xc0\x70\xa9\x0a\x27\x34\x86\x9a\x49\xb6\x54\x90\x24\x09\x17\x1a\xe5\x8c\x65\x78\xff\x10\xed\x8a\x83\x7b\xdf\x93\xa8\x1b\x29\x76\xc7\xef\x7d\xcf\x73\x32\x07\x30\x5b\xea\x64\x52\x4b\x2e\xf4\x8c\x16\x68\x25\x27\x49\x12\xc5\xbe\xe7\x59\x8e\x01\xec\x4a\x78\xc9\x78\xd9\x48\x8c\x7d\xef\xc1\x7f\xd8\x51\x7a\xd2\x64\x19\x62\x1e\x7e\x86\x2a\xed\x12\x3b\x13\x46\x8e\x52\xed\x0a\x69\x0a\x79\x75\xd6\x45\xec\xb5\xad\x9b\x36\x3c\x36\x79\x08\x6b\x51\x19\x2c\x34\x41\x52\x36\x37\x10\x5c\x95\xc1\x96\xff\xda\x92\x42\xa3\x08\xa8\x88\xc6\xa6\x40\x2f\x27\xba\xec\x23\xe8\x4a\x53\xb0\xda\x2b\xb3\x45\x74\x44\x12\x55\x5d\x11\x7a\x81\xf3\x88\x02\x26\x49\x13\xc2\x2c\xcc\xb7\x1b\xce\x35\x32\x55\x89\x56\xa1\x43\x12\xac\x13\x0f\x18\x19\x3a\x23\x5b\x9d\x4f\x9c\x39\xc9\x9e\x39\x71\xeb\x8f\x7e\xda\x46\x87\x19\xec\xaa\x14\x96\x15\x93\x1d\xde\xe6\x57\xce\x73\xef\xee\x5c\xb1\x26\xd7\x6c\x7d\xd1\x02\x96\xef\x51\xfd\xfc\x33\x26\x07\xc3\x60\x08\x92\x89\x2d\x58\x3b\x25\x92\x56\x04\x85\x36\x93\x44\x76\x34\xfd\xef\x1f\x7c\xcf\xe3\x33\x40\x69\xe8\x32\x99\xdc\x8a\x25\x93\x6a\xce\xca\x7f\x4c\xae\x2e\xc3\x6a\xfa\x9e\xd6\x8f\x7e\x30\x14\xdf\x0c\x41\xf0\xd2\xc8\xf5\x08\xb6\x13\x53\x20\x21\x4a\x19\xd1\x90\x4b\xaf\x67\xc7\xad\x35\x9c\xde\x35\xaa\xa6\xd4\x83\xfd\x3c\xf4\x8e\x54\x45\x30\x63\xbc\xb4\xdb\x74\xd3\xaa\x57\xba\x1c\x83\xf0\xdb\x55\x64\xc3\x8c\xa4\xcd\x00\xbe\x5d\x05\xb1\xab\xd2\x4e\xff\x98\x26\x4d\x39\x79\x9f\xae\x28\xcf\xf3\x1e\xcc\x0f\x39\x87\xfe\x77\xc1\x39\xbb\x8e\x5d\x95\x19\x6f\xd9\xe1\xf0\x59\x26\xe3\xc7\x31\x38\x47\x45\x5d\xc7\xe8\xb7\xb1\x6b\x9f\x22\xeb\x68\xcb\xdd\xd6\xe4\x37\xc3\x83\x35\xb7\xe7\xe1\x8e\xcb\x18\x15\x7d\x91\xb7\xad\x8c\x63\x76\x25\x13\xd4\x5b\x65\xc3\xa7\x58\xb3\x97\xb2\x43\x6a\xb0\x50\xe4\xe1\xe3\x99\x18\x0e\xe5\xf2\xbd\x9d\x1d\x40\x4f\x8d\x87\x88\xe0\xe6\x89\xb6\x9d\x3d\x5a\x66\xb0\x57\x45\x64\x6d\x6b\xff\xf6\xdf\x23\x9c\x3c\x8a\x70\x4f\x06\xb7\xff\x3e\x5c\x3b\x00\x69\x9f\x83\x66\x7f\x1b\x20\xfb\x3f\x86\xfd\x45\x18\xf6\x3f\x0a\x5f\x7f\x0d\x72\xd9\xee\x8f\xce\x39\xe1\xda\x9c\x91\x93\x76\xb1\x37\x92\x6b\x94\x31\x48\x38\x71\xe3\x1f\xab\x6c\x57\xc2\xd3\x2a\xdf\xc0\xbb\xbb\xe9\x46\xa3\x4f\xf1\x96\xc9\x8f\x34\xd2\x2b\x1a\x3e\x83\x9c\x69\x16\xb7\xe5\x66\x4f\x83\xc9\x35\xb2\x7c\x54\x96\xa1\x65\x70\xb5\x36\xec\xd5\x9a\x91\x3c\x34\xbc\x36\x86\x0f\xbe\x4f\x81\xd0\x28\xf4\x0d\x75\xfb\x84\x04\xc9\xcf\xc8\x72\x94\xc9\x4f\xa8\xc3\xe0\xcc\x4e\x7e\x47\xb3\x41\xe4\x7b\xdb\xd3\x0f\xd1\x16\xa8\xc7\xa2\x6e\xf4\xa4\x1b\x0d\x7b\xd2\x22\xa3\x7d\x8f\xa3\xa7\x0a\x75\xf2\x83\xe1\x6e\x85\x72\xb1\x62\x25\xcf\xa1\xbf\x26\xcc\x8d\x32\xf0\xfb\xb7\xea\xf7\xc0\xb8\xad\x27\xbd\x97\xde\xa6\x75\xa7\x21\xe3\x66\x9b\xf1\xeb\x18\x4c\x3f\x6f\x86\x6c\x71\xfc\xc8\x72\x17\x02\xa2\xb5\x79\x62\xbd\x60\x44\xbd\x0e\x4f\xa3\x64\x2c\x66\xd5\x2c\x0c\xe6\x4c\xe4\x25\x6d\x22\x6e\xe3\x71\xa0\x40\x2e\x8c\x7c\xaf\x9a\xbe\x8f\xa1\x58\x2d\xba\x10\x6c\xcd\x4c\xce\x91\xce\x65\x21\x51\xc6\x64\xb0\xf9\x63\x9d\xf1\x08\xfc\x0e\x79\x61\x8b\x53\x39\x76\x42\x6d\x4e\x3c\x82\xa9\x1d\x94\x32\x7a\x59\x88\xf2\x0f\x81\xea\x97\xfa\x85\x12\xb2\xdd\xca\xae\xa6\xef\xbb\x52\xb4\x75\xe2\x7b\x6a\xcd\x75\x36\x87\x93\x62\xb5\x20\x93\x32\xa6\xba\xe3\x46\x32\xc9\xe6\xb8\xc4\x9f\x64\xd5\xd4\xae\xf0\x13\x3a\xcd\xfd\xc2\x45\x6e\x32\xab\xab\xcc\x15\xc7\x75\x10\x0d\xb6\xa8\x60\x87\x62\xa8\x16\xe4\x1f\x42\xe0\xf0\x60\x13\x4f\x54\x0e\x15\xbf\xa9\x16\x36\xc9\x0f\x39\xf5\xe2\x43\x8d\x19\xed\xdb\xc7\x84\xc0\xb4\xd1\x50\x54\x14\xe5\x9b\xc0\xec\x8a\xd1\x2e\x7e\x76\x09\xf6\x59\x9e\xec\x5c\xd9\x07\x4c\xbb\x62\x87\x11\x54\x90\x1f\x3b\xf4\x38\xe2\x5d\xe0\x88\x8e\x8a\x4b\x6e\xc7\xe7\x30\x84\x83\xec\x34\xd7\x66\x47\x97\xeb\xe1\x8e\xa7\x14\x8a\xdc\x66\xbd\x15\xe7\xd2\xfe\xf0\x5a\x51\xe4\xfb\x9e\x67\x7a\x28\x85\xba\xdf\xa6\xc5\xc0\x35\x70\x65\xee\x25\x05\x62\x8e\x39\x98\xdb\xc5\x6d\x57\xb4\xaf\xbf\x6d\x85\x86\x87\xdb\x4e\x33\x69\xba\x8c\x7e\x36\x3e\xb2\xb3\xcb\xbf\xaf\x9e\x7a\x7f\x36\xeb\xfe\xa3\x13\xee\xef\x9d\x6b\x5f\x92\x66\x39\xce\x18\xf5\x06\x47\x30\xfc\x56\xa8\xa6\x76\x27\x85\x82\x72\xb0\xbb\x12\x5b\x70\x91\x3b\x33\x8b\xd5\xe2\xeb\x42\x35\xcb\xcc\x8d\xff\xde\x1e\x3e\x32\xe3\xb4\x7b\x57\xfd\xad\xda\x6d\xe0\x57\x8d\xde\xdd\xc1\xad\x18\xbb\x5f\xed\x32\x3c\x71\xff\x76\x7a\xec\xee\xdc\x9d\xd4\xaf\xb7\x69\x7b\xa6\xbd\xd9\xd5\x31\xb9\x10\x66\xf3\xed\x45\x2f\x86\xf5\xc1\xcd\xf7\x53\x8e\x47\x29\xdd\x4b\xb4\xa3\xce\x58\x68\x94\x82\x95\x13\x73\xb1\x6d\x28\x76\xf5\xb2\x67\x59\x33\x7d\xf1\x81\x2d\xeb\x12\x5d\xbf\x69\x7b\x44\xa9\x00\x45\x5e\x57\x5c\xe8\xee\x2b\x02\x5a\xba\xed\xb5\x7f\x77\x07\xcc\x54\x3b\xd8\xca\xba\x3e\xef\xdd\xd1\x9a\xd6\xf3\xc0\x52\x4f\x6c\x44\x4d\xcf\xe9\x3a\xd7\x18\xb6\x47\x90\xed\x5a\x11\x99\x63\x6e\x82\x97\x98\x73\x66\x7a\x32\x7b\xec\x23\x56\x7a\x8d\x61\xd2\x4c\xdb\x71\x2e\x0a\x62\xa0\xae\x41\x19\x08\x86\x61\xd7\x32\x5c\xe2\xda\xc2\x72\xd8\x5e\xf3\x72\xc1\x75\x68\x74\x60\x79\x7e\x53\xb9\x59\xcb\x18\x75\x9d\xf5\xfe\x1c\x9c\xb4\x32\xed\xb0\x11\xd1\xbb\x86\x4f\x5e\x35\x4a\x87\xab\x17\xc9\x68\x5f\x6c\x74\x90\xd2\x6e\x38\x07\xc9\x5b\x73\xba\x1c\xa3\xa3\xca\x92\xd5\xef\x3a\x87\x74\x27\xec\x6d\x1e\xde\xfb\xde\x7d\xe0\xbe\x77\x51\xa4\x82\x18\x02\xf3\xb9\xe0\x61\x00\xf4\x6b\x9c\xb1\xad\x39\x33\x74\x6e\x41\xe5\x15\x6a\xf6\x92\x65\xba\x92\x9b\xd8\x39\x71\xfb\x3b\x63\xa5\x42\x3a\x78\xec\x49\xdf\xb0\x65\xd9\x97\xfe\x76\xf4\xea\xd7\xcf\x5f\x21\x8a\x3b\xb7\x7f\xbc\xb9\xef\x2e\xf7\xf7\x6d\xa7\x60\xd4\x4c\x6a\x73\xc0\x75\x9f\xa4\x92\x49\x5d\x72\x7d\xd9\x97\x10\x43\x90\x06\x31\x9c\xda\xe2\x2c\x51\x84\x86\x29\xa2\x1a\x3d\x35\x15\xea\xce\x71\x82\x97\xfd\x63\x5d\x2f\x10\xdb\x10\xdc\x1b\xde\x77\xcf\xef\xcc\xf5\xbd\x56\xef\x5e\xdc\x3d\xdc\xf5\x4d\x39\x02\x73\x9f\x30\xc3\x29\xe6\xc0\x8b\x00\xf0\x79\x5f\xb3\xc3\xaa\x1c\x8e\xfb\x9d\x3b\x6d\x95\xac\x51\x68\x5c\xd3\x7d\x8e\x4b\x7e\x63\x52\xa1\x85\xe9\x2d\xfc\xba\x0b\x1a\xcb\xd0\xbb\xa3\x71\x02\x48\x0d\x22\x59\xc4\xb0\xda\xce\xf6\xb3\xd4\xf4\x25\xae\x3f\x37\xcf\xa6\x39\xb2\xfc\x89\x89\xe1\x70\x08\x0b\xfb\xf4\xec\x59\x3b\xd1\x16\xb3\x99\x73\x2f\xf6\x42\xe3\x33\x38\x83\x93\xe0\x20\x4f\x70\x12\x1c\x65\x18\x18\x06\xe7\xd9\x55\xef\xa2\x81\xdc\xd6\x4b\x85\x07\xff\xdf\x01\x00\x00\xff\xff\x95\xe8\xaf\x08\x60\x1f\x00\x00") + +func testImagesAgnhostCrdConversionWebhookConverterFrameworkGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostCrdConversionWebhookConverterFrameworkGo, + "test/images/agnhost/crd-conversion-webhook/converter/framework.go", + ) +} + +func testImagesAgnhostCrdConversionWebhookConverterFrameworkGo() (*asset, error) { + bytes, err := testImagesAgnhostCrdConversionWebhookConverterFrameworkGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/crd-conversion-webhook/converter/framework.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostCrdConversionWebhookMainGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x55\x5d\x6f\xdb\x3a\x12\x7d\x16\x7f\xc5\x2c\x81\x2d\xa4\xac\x2c\xa5\x1f\x0b\x74\xbd\xc8\x83\xd7\x4d\x50\xa3\xd9\x64\x11\xb9\x0d\x8a\xa2\x40\x69\x69\x2c\x13\x96\x48\x95\x1c\xc5\xf1\x06\xf9\xef\x17\x43\xc9\x69\xd2\x0f\xdc\xdb\xbc\x28\x12\x87\x73\xce\xcc\x9c\x39\xce\x8f\xc4\xdc\x76\x7b\xa7\xeb\x0d\xc1\x8b\xe3\xe7\xaf\x61\xb9\x41\x78\xd7\xaf\xd0\x19\x24\xf4\x30\xeb\x69\x63\x9d\xcf\x84\x38\xd7\x25\x1a\x8f\x15\xf4\xa6\x42\x07\xb4\x41\x98\x75\xaa\xdc\x20\x8c\x27\x29\x7c\x40\xe7\xb5\x35\xf0\x22\x3b\x86\x98\x03\xe4\x78\x24\x93\x7f\x8b\xbd\xed\xa1\x55\x7b\x30\x96\xa0\xf7\x08\xb4\xd1\x1e\xd6\xba\x41\xc0\xdb\x12\x3b\x02\x6d\xa0\xb4\x6d\xd7\x68\x65\x4a\x84\x9d\xa6\x4d\x00\x19\x53\x64\xe2\xe3\x98\xc0\xae\x48\x69\x03\x0a\x4a\xdb\xed\xc1\xae\x1f\x47\x81\x22\x21\x00\x00\x36\x44\xdd\x34\xcf\x77\xbb\x5d\xa6\x02\xcb\xcc\xba\x3a\x6f\x86\x28\x9f\x9f\x2f\xe6\xa7\x17\xc5\xe9\xe4\x45\x76\x2c\xc4\x7b\xd3\xa0\xf7\xe0\xf0\x6b\xaf\x1d\x56\xb0\xda\x83\xea\xba\x46\x97\x6a\xd5\x20\x34\x6a\x07\xd6\x81\xaa\x1d\x62\x05\x64\x99\xe7\xce\x69\xd2\xa6\x4e\xc1\xdb\x35\xed\x94\x43\x51\x69\x4f\x4e\xaf\x7a\x7a\xd2\xa0\x03\x2b\xed\xe1\x71\x80\x35\xa0\x0c\xc8\x59\x01\x8b\x42\xc2\x7f\x66\xc5\xa2\x48\xc5\xf5\x62\xf9\xf6\xf2\xfd\x12\xae\x67\x57\x57\xb3\x8b\xe5\xe2\xb4\x80\xcb\x2b\x98\x5f\x5e\xbc\x59\x2c\x17\x97\x17\x05\x5c\x9e\xc1\xec\xe2\x23\xbc\x5b\x5c\xbc\x49\x01\x35\x6d\xd0\x01\xde\x76\x8e\xb9\x5b\x07\x9a\x5b\x87\x55\x26\x0a\xc4\x27\xe0\x6b\x3b\x90\xf1\x1d\x96\x7a\xad\x4b\x68\x94\xa9\x7b\x55\x23\xd4\xf6\x06\x9d\xd1\xa6\x86\x0e\x5d\xab\x3d\x0f\xcf\x83\x32\x95\x68\x74\xab\x49\x51\x78\xff\xa1\x9c\x4c\x1c\xe5\x42\x74\xaa\xdc\x72\x92\xd2\x55\xa5\x35\x37\x3b\x5c\x6d\xac\xdd\x0a\xa1\xdb\xce\x3a\x82\x58\x44\x72\xdd\x92\x14\x91\x34\x48\x39\xcf\x43\x0a\x11\xc9\x5a\xd3\xa6\x5f\x65\xa5\x6d\x73\xdf\xad\x9f\xbf\xcc\x4b\xbb\x72\x2a\x1c\x6d\x5f\xfb\x4c\xdb\x7c\xfb\xa0\xbe\x9c\xd0\x53\xae\x5b\x55\xa3\xcf\x55\x6d\x36\xd6\x53\x5e\xba\x6a\xc2\x80\x83\xd6\x26\x23\x6e\x3e\x7c\x22\x74\x52\x24\x42\xdc\x28\xc7\x0c\x4a\x74\x74\xc6\x12\xe3\xde\x9b\x5a\x44\x5b\xdc\x87\xf7\x87\x0f\x81\x2b\xff\x69\x43\x7c\x31\xcf\x61\xde\x56\x73\x57\xcd\x1f\x20\xae\x07\x04\x1e\x62\xef\x47\x79\x0c\x5c\x60\xce\xdc\xb3\x80\xf6\xab\x5b\x27\xf0\x2c\x54\x98\xcd\x6d\xdb\x2a\x53\xdd\x89\xe8\xbd\xc7\x29\x00\xc8\x9f\x57\x22\x53\x11\x15\x1b\xeb\x68\x0a\xb2\x20\xe5\xc8\xc3\xdb\xe5\xf2\x7f\xe0\xd1\xdd\xa0\x63\xed\x04\xce\xaf\x5e\xbd\x1c\x26\x8b\x9e\xa5\x08\xf3\xde\x93\x6d\xaf\xd0\xdb\xde\x95\xf8\x03\x0f\xce\x7a\x6e\x4d\x3d\x85\x2f\xbc\xe1\xbe\x5f\x95\x03\x9f\x90\xc0\x83\xfc\xb3\xfb\x99\x10\xb3\x35\xa1\x83\x0a\xbb\xc6\xee\x19\x52\x13\xaf\xc3\x23\xb3\x28\x9b\xde\x13\xba\x34\x88\x45\x55\xad\x36\x2c\x7a\x45\xd6\x81\x41\xac\x3c\x87\x97\x0e\x15\x21\xa8\x5f\x23\x66\x07\x48\xde\xb4\x1f\xb3\x73\x12\xf6\x0f\x87\xad\x25\x84\xb1\x6b\xa1\x17\xdf\x9a\xc9\x86\xf5\x5d\x9d\x7e\xe8\xa5\x7a\xdc\xcd\x14\x1a\xed\x09\xc3\x0a\x3c\x6a\x6c\xca\x3b\x30\x30\xe5\x93\xe0\x64\xf9\xa8\x73\x74\x24\x01\x4d\xd5\x59\x6d\x28\xfb\x92\x8a\x68\xe6\x6a\x3f\x85\x61\xc8\xff\x55\xb7\xba\xed\xdb\x0b\xfe\x16\x1f\x27\xa9\x88\xae\x7a\x33\x05\x68\x95\x36\xa9\xb8\x17\x62\xdd\x9b\x12\xb4\xd1\x14\x27\x70\x27\xa2\x5f\xa8\x26\x3b\x6b\x54\xed\xe3\x24\x2b\x82\x4c\x3f\x28\x17\x3f\x3b\x68\x39\x05\x49\x8d\x9f\xf0\xeb\x84\xed\x53\xa6\x20\x79\xba\x91\x0c\xca\x2e\xad\x61\x7b\x3c\xf0\xae\x70\xad\xfa\x86\xe0\xf6\x9f\xc7\xff\x82\x39\x3a\x62\x07\xe0\x01\x70\xbf\xb8\x13\x45\x06\xf1\x7c\x06\x9c\x2e\x05\xbd\x06\x65\xf6\x29\x27\xe1\x20\xa3\xd8\xad\xe4\x3f\x44\x14\x45\x52\x85\xe9\x8f\x2a\xe4\xf0\x4c\x26\xbf\x55\xc0\xb8\x7b\x23\xff\xce\xe9\x1b\x45\x38\xd9\xe2\xfe\x77\xcb\x18\xaf\xc2\x16\xf7\xd0\x2a\x2a\x37\x1c\x35\x99\x3c\xe9\xca\x5f\x22\xb7\x30\x14\x98\xf1\xdc\x53\x90\xfc\x90\x69\x10\x00\xf3\x28\xb0\xec\x1d\x0e\xa2\xa0\x8d\xa2\x40\xe4\x20\xb7\x41\x37\x1e\xac\x91\x09\xcf\x95\x7d\xc3\x9a\xb5\xae\x0f\xcc\xfd\xe0\xb9\x43\xbb\xe2\x47\x57\x93\xd0\xbc\xa0\xb0\x2d\xee\x33\x41\xfb\x0e\x0f\x77\x3d\xb9\xbe\xa4\x20\x8c\xef\x9d\xeb\xdd\x77\xce\x75\xd0\x12\x2b\x2b\x2e\xdb\x0a\x8e\x9e\xd8\x4c\x0a\xca\xd5\x1e\x3e\x7d\x1e\xc2\x83\xd8\xca\x01\x64\x7a\x32\xc2\xdd\x1d\x40\xa6\xf0\x4d\x5c\x23\xce\x14\xc6\x71\xdd\x0b\x11\xb1\x79\x67\x6f\x95\xa9\x1a\x3c\xeb\x4d\x19\x3f\x59\x86\x14\x1e\xac\x37\x2b\xb8\xdc\xd3\x5b\xd5\x76\xcd\xb8\xd0\x94\xfc\xec\xba\x43\x55\xed\xff\x2f\x53\xe0\x12\xe2\x5d\xf8\xb5\xce\xae\xd0\x77\xd6\x78\xbc\x76\x3a\x98\x88\xc3\xaf\x70\x34\x9e\x7c\xed\xd1\x53\x02\x77\xb0\xcb\xc2\x71\xfc\xe9\xf3\x6a\x4f\x18\x4b\xbb\x95\x49\x02\xf7\x89\x88\xca\x46\xa3\x21\x8f\xc4\x05\xd6\x48\xf3\xf0\x1e\x27\x22\x1a\x87\x30\x3d\x81\x67\x21\x5d\x60\xe9\xee\x44\x14\xcd\xaa\xca\x4d\x83\xfd\xc3\xba\xa5\xac\xe8\x9c\x36\xb4\x8e\xe5\xf4\xef\x95\x4c\xc3\xe4\x79\x85\xa3\xe5\x79\x31\x74\x8c\xd7\x9c\x9f\xcb\xf3\x22\x1e\xfe\x4b\xe1\x01\x97\x43\xef\x45\x84\x2e\x40\x0d\xa0\xd9\x79\xd0\xc9\xcc\x54\x01\x94\xef\xc9\xa0\xf4\x44\x44\x7a\x0d\x1c\xfb\xb7\x13\x30\xba\xe1\xf9\x44\x9d\x32\xba\x8c\xd1\xb9\x84\x33\xdd\x8b\x3f\x02\x00\x00\xff\xff\xd8\x5a\xb9\x49\x9e\x09\x00\x00") + +func testImagesAgnhostCrdConversionWebhookMainGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostCrdConversionWebhookMainGo, + "test/images/agnhost/crd-conversion-webhook/main.go", + ) +} + +func testImagesAgnhostCrdConversionWebhookMainGo() (*asset, error) { + bytes, err := testImagesAgnhostCrdConversionWebhookMainGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/crd-conversion-webhook/main.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostDnsCommonGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x54\x5d\x6f\xdb\x36\x14\x7d\x16\x7f\xc5\x99\x1e\x36\xbb\x50\xa4\x34\x7b\x9a\x87\x3c\x78\x4e\x8a\x7a\xcd\x94\x21\x4a\x56\x14\xc3\x80\xd2\xd2\x95\x74\x31\x89\xd4\x48\x2a\x8e\x51\xf4\xbf\x0f\x94\x1c\x7f\xb4\x5d\xd2\x62\x4f\x02\xc5\x73\x0f\xcf\x39\xf7\x92\xc9\x0b\xb1\xd0\xdd\xc6\x70\x55\x3b\x9c\x9d\xbe\xfc\x09\xb7\x35\xe1\x4d\xbf\x22\xa3\xc8\x91\xc5\xbc\x77\xb5\x36\x36\x16\xe2\x8a\x73\x52\x96\x0a\xf4\xaa\x20\x03\x57\x13\xe6\x9d\xcc\x6b\xc2\x76\x27\xc2\x1f\x64\x2c\x6b\x85\xb3\xf8\x14\x13\x0f\x08\xb7\x5b\xe1\xf4\x67\xb1\xd1\x3d\x5a\xb9\x81\xd2\x0e\xbd\x25\xb8\x9a\x2d\x4a\x6e\x08\xf4\x90\x53\xe7\xc0\x0a\xb9\x6e\xbb\x86\xa5\xca\x09\x6b\x76\xf5\x70\xc8\x96\x22\x16\xef\xb6\x04\x7a\xe5\x24\x2b\x48\xe4\xba\xdb\x40\x97\x87\x28\x48\x27\x04\x00\xd4\xce\x75\xb3\x24\x59\xaf\xd7\xb1\x1c\x54\xc6\xda\x54\x49\x33\xa2\x6c\x72\xb5\x5c\x5c\xa6\xd9\xe5\xc9\x59\x7c\x2a\xc4\x9d\x6a\xc8\x5a\x18\xfa\xa7\x67\x43\x05\x56\x1b\xc8\xae\x6b\x38\x97\xab\x86\xd0\xc8\x35\xb4\x81\xac\x0c\x51\x01\xa7\xbd\xce\xb5\x61\xc7\xaa\x8a\x60\x75\xe9\xd6\xd2\x90\x28\xd8\x3a\xc3\xab\xde\x1d\x05\xf4\xa8\x8a\x2d\x0e\x01\x5a\x41\x2a\x84\xf3\x0c\xcb\x2c\xc4\x2f\xf3\x6c\x99\x45\xe2\xed\xf2\xf6\xf5\xf5\xdd\x2d\xde\xce\x6f\x6e\xe6\xe9\xed\xf2\x32\xc3\xf5\x0d\x16\xd7\xe9\xc5\xf2\x76\x79\x9d\x66\xb8\x7e\x85\x79\xfa\x0e\x6f\x96\xe9\x45\x04\x62\x57\x93\x01\x3d\x74\xc6\x6b\xd7\x06\xec\xa3\xa3\x22\x16\x19\xd1\xd1\xe1\xa5\x1e\xc5\xd8\x8e\x72\x2e\x39\x47\x23\x55\xd5\xcb\x8a\x50\xe9\x7b\x32\x8a\x55\x85\x8e\x4c\xcb\xd6\x37\xcf\x42\xaa\x42\x34\xdc\xb2\x93\x6e\x58\x7f\x66\x27\x16\x2f\x12\x21\x3a\x99\xff\xed\x49\x0a\x65\x85\xe0\xb6\xd3\xc6\x61\x22\x82\xb0\x6c\x5d\x28\x82\x90\x75\xc2\xba\x77\xdc\xf8\x85\xb7\xae\x2a\x1b\x0a\x11\x84\x15\xbb\xba\x5f\xc5\xb9\x6e\x13\xdb\x95\x2f\x7f\x4c\x72\xbd\x32\x32\x14\x53\x21\x92\x04\x8b\xb6\xb8\x48\xb3\xac\x2f\x4b\x7e\xf0\xb1\xf5\x76\xdb\x90\x4a\xd5\xda\x3a\x2c\x3c\x38\x16\xf7\xd2\x1c\x43\xcf\xf1\xfd\xc0\x13\x2f\x74\xdb\x4a\x55\x7c\x10\xc1\x9d\xa5\x19\x80\xb0\x50\xf6\xc4\x0e\xa8\x30\x12\x41\x56\x6b\xe3\x66\x08\x7f\x37\xac\x9c\x1d\x6c\x79\xe2\x1f\x2c\x2e\xd2\x0c\x23\x0e\x0d\x5b\xe7\xc1\x57\x5a\x55\x33\xe0\xfd\x01\x78\x8f\x22\x3b\x0e\x1f\xdb\x81\x21\x7e\x1f\x89\x60\x6e\x2a\x3b\x03\x46\x29\xbf\xc9\x07\x6e\xfb\x36\xf5\x3f\x27\xa7\xd3\x48\x04\x37\xbd\xf2\x92\x3a\x4f\xb7\xd3\x7e\xc5\xd6\x45\xe2\xe3\xa1\x7d\x32\xf7\x64\xfc\xff\xaf\x8b\x60\x0f\x7f\x2e\x86\x01\x79\xf2\x68\xef\xe9\x2c\x46\xda\xe7\xb2\x38\x40\xfd\xef\x38\x76\x3e\x0e\xe2\xb8\x74\xf9\x6b\x6d\x9d\x7d\x3e\x89\x1d\xf2\x89\x10\xc8\xe5\x27\xbe\xd4\x3e\x6d\x3f\x21\x97\x27\x03\x6e\x78\xa1\xfe\xc3\x7e\x38\x32\x8d\x8f\xd8\x91\xf7\xf0\x1b\xcd\x0f\xba\x5f\x71\x43\x83\xf1\xb2\x57\xf9\x17\x66\x64\x92\xb7\x05\x5e\x1c\x39\x8b\x20\x4d\x65\xf1\xe7\x5f\xe3\x05\x9b\xe2\x83\x08\x0a\x65\xf7\x35\x98\x9d\xa3\xa2\x4f\x78\xa6\x22\x28\x5b\x17\x0f\x4e\x1a\x35\xd9\x5e\xce\xf8\x57\xcd\x6a\x72\x54\x1d\x21\x8c\xc2\xe9\xf4\x73\x4d\xbb\x46\x7d\x83\xa6\xfd\x90\xee\x35\xed\x79\x9e\xd3\xb4\x1f\x8d\x2f\x69\xda\xe5\xf7\x95\x7a\x0e\x8f\x32\x24\x8b\xa1\x94\xb6\xf3\xe3\x17\x07\x07\xec\xf6\x7d\x9b\x53\xd9\x12\x1e\x89\xc6\xef\xc0\xc7\x0d\x5d\x48\x27\x23\x90\x31\xde\xdf\xf8\xf4\xc5\x37\x9f\xd6\x4e\x45\xc0\xe5\x00\xfa\xee\x1c\x8a\x1b\x5f\x1c\x74\x52\x71\x3e\x21\x63\xa6\x22\xf8\x28\x44\x60\xc8\xf5\x46\x6d\xe9\x27\x8f\xdc\x5e\xd1\xbf\x01\x00\x00\xff\xff\x61\x62\x94\x60\xaf\x07\x00\x00") + +func testImagesAgnhostDnsCommonGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostDnsCommonGo, + "test/images/agnhost/dns/common.go", + ) +} + +func testImagesAgnhostDnsCommonGo() (*asset, error) { + bytes, err := testImagesAgnhostDnsCommonGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/dns/common.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostDnsDnsGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x94\x41\x6f\xdb\xb8\x13\xc5\xcf\xe2\xa7\x98\xea\x64\xf7\xef\x4a\x69\x8a\x1c\xfe\x5e\xf4\xe0\xb5\x53\xc4\x68\x60\x17\x91\xb3\x45\xd1\x2d\x82\x31\x35\x92\x06\xa6\x49\x85\x1c\xc5\x36\x8a\x7c\xf7\x05\x2d\xa7\x9b\xb4\xc0\xde\x16\xd8\xa3\x38\x8f\x8f\x33\xbf\x37\x50\x9e\xc3\xff\xd6\x1d\x9b\x12\x5e\xed\xd8\x96\x6e\x17\x94\xca\x5f\xab\xa9\x6b\x0f\x9e\xeb\x46\xe0\xfc\xec\xed\xff\x61\xd5\x10\x7c\xec\xd6\xe4\x2d\x09\x05\x98\x74\xd2\x38\x1f\x32\xa5\xae\x59\x93\x0d\x54\x42\x67\x4b\xf2\x20\x0d\xc1\xa4\x45\xdd\x10\x9c\x2a\x23\xf8\x83\x7c\x60\x67\xe1\x3c\x3b\x83\x41\x14\xa4\xa7\x52\x3a\xfc\x4d\x1d\x5c\x07\x5b\x3c\x80\x75\x02\x5d\x20\x90\x86\x03\x54\x6c\x08\x68\xaf\xa9\x15\x60\x0b\xda\x6d\x5b\xc3\x68\x35\xc1\x8e\xa5\x39\x3e\x72\xb2\xc8\xd4\x97\x93\x81\x5b\x0b\xb2\x05\x04\xed\xda\x03\xb8\xea\xb9\x0a\x50\x94\x02\x00\x68\x44\xda\x71\x9e\xef\x76\xbb\x0c\x8f\x5d\x66\xce\xd7\xb9\xe9\x55\x21\xbf\x9e\x4f\x2f\x17\xc5\xe5\x9b\xf3\xec\x4c\xa9\x5b\x6b\x28\x04\xf0\x74\xdf\xb1\xa7\x12\xd6\x07\xc0\xb6\x35\xac\x71\x6d\x08\x0c\xee\xc0\x79\xc0\xda\x13\x95\x20\x2e\xf6\xb9\xf3\x2c\x6c\xeb\x11\x04\x57\xc9\x0e\x3d\xa9\x92\x83\x78\x5e\x77\xf2\x02\xd0\x53\x57\x1c\xe0\xb9\xc0\x59\x40\x0b\xe9\xa4\x80\x79\x91\xc2\xef\x93\x62\x5e\x8c\xd4\xe7\xf9\xea\x6a\x79\xbb\x82\xcf\x93\x9b\x9b\xc9\x62\x35\xbf\x2c\x60\x79\x03\xd3\xe5\x62\x36\x5f\xcd\x97\x8b\x02\x96\x1f\x60\xb2\xf8\x02\x1f\xe7\x8b\xd9\x08\x88\xa5\x21\x0f\xb4\x6f\x7d\xec\xdd\x79\xe0\x88\x8e\xca\x4c\x15\x44\x2f\x1e\xaf\x5c\xdf\x4c\x68\x49\x73\xc5\x1a\x0c\xda\xba\xc3\x9a\xa0\x76\x0f\xe4\x2d\xdb\x1a\x5a\xf2\x5b\x0e\x31\xbc\x00\x68\x4b\x65\x78\xcb\x82\x72\xfc\xfe\x65\x9c\x4c\xbd\xce\x95\x6a\x51\x6f\xa2\x49\x69\x83\x52\xbc\x6d\x9d\x17\x18\xa8\x24\x8d\x63\xda\x3a\xa4\x6a\xa8\x94\x76\x36\x08\x90\xe8\x2b\x17\x24\x7c\x88\x61\xbf\x87\x34\x27\xd1\x79\x13\x4f\x52\xa5\xf2\x1c\x26\x70\x3c\xf1\x14\x9c\x79\xc8\xb4\xb3\x55\xbf\x17\x5b\xb4\x58\xf7\x79\x6c\xba\x35\x19\x12\x30\xce\x6d\x02\x18\xde\xf4\xfb\x33\x8e\xd7\x2d\x6e\x29\x90\x7f\x20\x0f\xb3\x45\x71\x37\xbd\xbe\x2d\x56\x97\x37\x77\xf3\x4f\xb1\x18\x08\xbd\x6e\x40\x28\xc8\x9b\xd2\x86\x2c\x3c\xe8\x4c\x9b\x2e\x08\xf9\xcc\x38\x8d\x06\x7e\x3d\x79\xf9\x75\x7f\xf1\x0e\xb1\x41\xde\xdc\x23\x35\x1a\xf9\xdd\xc1\x54\xf7\xa5\xe8\x8b\x75\xb6\xde\x67\x6c\x85\xbc\x45\x93\x69\xe3\xba\x12\xdb\x36\xb3\x24\xf1\x61\xd7\xf6\xf4\x6c\xe9\x24\x8c\x2f\x54\xd5\x59\x0d\x35\xc9\x6c\x51\x14\x5d\x55\xf1\xfe\x9a\x83\x0c\x86\xf0\xf5\x5b\x0f\x0c\xbe\xab\x24\x4e\x3d\x43\x41\x18\xbf\x07\x4f\x58\x46\x60\x83\xf4\x67\x38\xe9\x50\x25\x86\x2d\x85\x28\x3b\xd1\xce\x8a\xd6\xb0\x0c\x9e\x0c\x46\x90\xfe\x69\xa3\x2e\x66\x7f\x37\x82\x28\x3f\x9a\xa2\xad\x09\xfa\xcb\xdf\x55\x92\x70\xf5\xc3\xe0\x0a\xc3\x27\x4f\x15\xef\x07\xb1\x3c\x82\xb4\x27\x97\x0e\x8f\xc2\x24\x4e\xb4\x65\xe9\x17\x49\xd0\xc7\xf5\xff\xa1\xc9\xa2\xc2\x93\x74\xde\xfe\xd4\xd0\xc9\x0b\xd2\xe1\xd7\xb7\xe3\x6f\x2a\x49\x1e\x55\xf2\xa8\x54\xd2\xa2\x65\x3d\x48\xa7\xae\x33\xe5\xf1\x8f\x50\xb1\x2d\x63\x7c\x4f\x81\x19\x0e\xf2\x2a\x1d\xaa\x47\xf5\x82\xdc\x31\xe6\xff\x3a\xb9\xbf\x17\xf2\x9f\xe9\x3d\xd3\xfd\xab\x04\xff\x0a\x00\x00\xff\xff\x17\xe8\x51\x08\xf9\x05\x00\x00") + +func testImagesAgnhostDnsDnsGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostDnsDnsGo, + "test/images/agnhost/dns/dns.go", + ) +} + +func testImagesAgnhostDnsDnsGo() (*asset, error) { + bytes, err := testImagesAgnhostDnsDnsGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/dns/dns.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostDnsDns_windowsGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x53\xd1\x6e\xdb\x36\x14\x7d\x36\xbf\xe2\x54\x0f\x83\x55\x38\x54\x96\x3d\x2d\x43\x06\xb8\x76\xba\x1a\x0d\x6c\x20\x72\x17\x14\x6d\x1f\x68\xea\x4a\x22\x26\x91\x1a\x79\x19\xc7\x18\xfa\xef\x03\x25\x0f\x4b\xd6\xd7\xf5\x8d\xe4\x3d\xf7\x9c\x7b\x8e\xae\x8a\xd7\x62\xe5\x86\x93\x37\x4d\xcb\xb8\xba\xfc\xf1\x67\xec\x5b\xc2\xfb\x78\x20\x6f\x89\x29\x60\x19\xb9\x75\x3e\x48\x21\xee\x8c\x26\x1b\xa8\x42\xb4\x15\x79\x70\x4b\x58\x0e\x4a\xb7\x84\x73\x65\x81\xdf\xc9\x07\xe3\x2c\xae\xe4\x25\xe6\x09\x90\x9d\x4b\x59\xfe\x8b\x38\xb9\x88\x5e\x9d\x60\x1d\x23\x06\x02\xb7\x26\xa0\x36\x1d\x81\x9e\x34\x0d\x0c\x63\xa1\x5d\x3f\x74\x46\x59\x4d\x38\x1a\x6e\x47\x91\x33\x85\x14\x1f\xcf\x04\xee\xc0\xca\x58\x28\x68\x37\x9c\xe0\xea\xe7\x28\x28\x16\x02\x00\x5a\xe6\xe1\xba\x28\x8e\xc7\xa3\x54\xe3\x94\xd2\xf9\xa6\xe8\x26\x54\x28\xee\x36\xab\xdb\x6d\x79\x7b\x71\x25\x2f\x85\xf8\x60\x3b\x0a\x01\x9e\xfe\x8c\xc6\x53\x85\xc3\x09\x6a\x18\x3a\xa3\xd5\xa1\x23\x74\xea\x08\xe7\xa1\x1a\x4f\x54\x81\x5d\x9a\xf3\xe8\x0d\x1b\xdb\x2c\x10\x5c\xcd\x47\xe5\x49\x54\x26\xb0\x37\x87\xc8\x2f\x02\xfa\x67\x2a\x13\xf0\x1c\xe0\x2c\x94\x45\xb6\x2c\xb1\x29\x33\xbc\x59\x96\x9b\x72\x21\x1e\x36\xfb\x77\xbb\x0f\x7b\x3c\x2c\xef\xef\x97\xdb\xfd\xe6\xb6\xc4\xee\x1e\xab\xdd\x76\xbd\xd9\x6f\x76\xdb\x12\xbb\xb7\x58\x6e\x3f\xe2\xfd\x66\xbb\x5e\x80\x0c\xb7\xe4\x41\x4f\x83\x4f\xb3\x3b\x0f\x93\xa2\xa3\x4a\x8a\x92\xe8\x85\x78\xed\xa6\x61\xc2\x40\xda\xd4\x46\xa3\x53\xb6\x89\xaa\x21\x34\xee\x91\xbc\x35\xb6\xc1\x40\xbe\x37\x21\x7d\xbc\x00\x65\x2b\xd1\x99\xde\xb0\xe2\xf1\xfe\x8d\x1d\x29\x5e\x17\x42\x0c\x4a\xff\x91\x48\x2a\x1b\x84\x30\xfd\xe0\x3c\x63\x2e\x66\xd9\xe1\xc4\x14\x32\x31\xcb\x5c\x28\xe8\x89\x74\x3a\x26\xeb\xb6\x09\x99\xc8\x85\xd0\xce\x06\x06\xb1\x7e\xe7\x02\x87\xb7\x69\x01\x6e\x90\xad\xae\x8b\x07\x63\x2b\x77\x0c\x45\x79\x0a\x4c\xfd\x4f\x57\x45\xe5\xcd\x23\xf9\x50\x10\xeb\xa2\x4d\xe0\x4c\x88\x3a\x5a\x8d\x86\x78\xbd\x2d\xcb\x58\xd7\xe6\xe9\xce\x04\x9e\xe7\xf8\xf4\x65\xd2\xc0\x5f\x62\xe6\x22\x0f\x91\x71\x7d\x03\x1f\xed\xca\xf5\xbd\xb2\xd5\x3c\x1b\xdc\x91\x7c\x68\xa9\xeb\xb2\x05\xb2\x8b\xf3\x7b\x3a\xcf\x7f\x23\xbe\x58\xdb\xb0\xea\x0c\x59\xce\x3f\x5d\x7e\x91\x13\x77\x49\xca\xeb\x36\x29\x64\xb9\x98\x99\x1a\x1d\xd9\xf9\xc4\x9e\xe3\x57\x5c\x26\xb1\x99\x27\x8e\xde\xe2\x6c\x51\x96\x43\x67\xf8\x0c\x5a\x20\xfb\xec\x3f\xdb\xd4\xfc\x55\x88\xd9\xa0\xac\xd1\xf3\x6c\xe5\x62\x57\x8d\xbf\x41\x6d\x6c\x85\xf5\xb6\x44\x18\x85\xd0\x99\xc0\xaf\xb2\x5c\x7c\x7d\xe9\x93\xfc\x23\xf9\xff\xdd\xe7\x44\xbb\xac\xaa\xb4\x40\xb9\x7c\x71\xa5\xf0\x9d\x0d\x4f\x6a\xdf\x18\x7e\xe6\xc3\xaa\x9e\xce\x1a\x0b\x28\xdf\x40\x4a\x39\x5d\x73\xfc\x1b\xc1\xa3\xf2\x70\x91\x31\x2e\x9d\x7c\x13\xeb\x9a\xbc\x98\xe9\xbe\x4a\xa9\xa4\xed\x93\xcf\xf9\x46\x22\x29\x65\x3e\x42\x64\xc9\x55\xea\xbd\xc1\x0f\x2e\xb2\x10\x33\xf2\x3e\xb5\xa5\xd2\x7d\xb4\xf3\x29\x81\xf4\xf8\xea\x06\xd6\x74\xa3\xf9\xc9\x12\x79\x7f\xb6\xf8\x9f\x30\xf6\xde\xf4\xe5\xa0\x34\xa5\x40\x64\x39\xbe\xce\xf3\x64\xf0\xef\x00\x00\x00\xff\xff\x8e\xa4\x0f\xbb\x6a\x05\x00\x00") + +func testImagesAgnhostDnsDns_windowsGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostDnsDns_windowsGo, + "test/images/agnhost/dns/dns_windows.go", + ) +} + +func testImagesAgnhostDnsDns_windowsGo() (*asset, error) { + bytes, err := testImagesAgnhostDnsDns_windowsGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/dns/dns_windows.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostEntrypointTesterEpGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x53\xc1\x6e\xe3\x36\x10\x3d\x9b\x5f\xf1\x20\xa0\x8d\x1d\x68\xa5\x6c\x8a\x5e\x52\xf4\xe0\x7a\x5d\xd4\xd8\xc0\x2e\x22\xa7\x8b\x45\xdb\x03\x25\x8d\x24\xa2\x14\xa9\x92\xc3\xc8\xc6\x62\xff\xbd\xa0\x6c\xa7\x09\xd2\x43\x8f\x04\xdf\xbc\x79\xf3\xe6\x4d\x7e\x2d\x56\x76\x38\x3a\xd5\x76\x8c\xdb\x9b\xf7\xdf\x63\xdf\x11\x3e\x86\x92\x9c\x21\x26\x8f\x65\xe0\xce\x3a\x9f\x09\x71\xaf\x2a\x32\x9e\x6a\x04\x53\x93\x03\x77\x84\xe5\x20\xab\x8e\x70\xfe\x49\xf1\x1b\x39\xaf\xac\xc1\x6d\x76\x83\x79\x04\x24\xe7\xaf\x64\xf1\x83\x38\xda\x80\x5e\x1e\x61\x2c\x23\x78\x02\x77\xca\xa3\x51\x9a\x40\x87\x8a\x06\x86\x32\xa8\x6c\x3f\x68\x25\x4d\x45\x18\x15\x77\x53\x93\x33\x45\x26\x3e\x9f\x09\x6c\xc9\x52\x19\x48\x54\x76\x38\xc2\x36\x2f\x51\x90\x2c\x04\x00\x74\xcc\xc3\x5d\x9e\x8f\xe3\x98\xc9\x49\x65\x66\x5d\x9b\xeb\x13\xca\xe7\xf7\x9b\xd5\x7a\x5b\xac\xdf\xdd\x66\x37\x42\x3c\x1a\x4d\xde\xc3\xd1\xdf\x41\x39\xaa\x51\x1e\x21\x87\x41\xab\x4a\x96\x9a\xa0\xe5\x08\xeb\x20\x5b\x47\x54\x83\x6d\xd4\x39\x3a\xc5\xca\xb4\x29\xbc\x6d\x78\x94\x8e\x44\xad\x3c\x3b\x55\x06\x7e\x65\xd0\x45\x95\xf2\x78\x09\xb0\x06\xd2\x20\x59\x16\xd8\x14\x09\x7e\x5a\x16\x9b\x22\x15\x9f\x36\xfb\x5f\x76\x8f\x7b\x7c\x5a\x3e\x3c\x2c\xb7\xfb\xcd\xba\xc0\xee\x01\xab\xdd\xf6\xc3\x66\xbf\xd9\x6d\x0b\xec\x7e\xc6\x72\xfb\x19\x1f\x37\xdb\x0f\x29\x48\x71\x47\x0e\x74\x18\x5c\xd4\x6e\x1d\x54\xb4\x8e\xea\x4c\x14\x44\xaf\x9a\x37\xf6\x24\xc6\x0f\x54\xa9\x46\x55\xd0\xd2\xb4\x41\xb6\x84\xd6\x3e\x91\x33\xca\xb4\x18\xc8\xf5\xca\xc7\xe5\x79\x48\x53\x0b\xad\x7a\xc5\x92\xa7\xf7\x9b\x71\x32\x71\x9d\x0b\x31\xc8\xea\xaf\x48\x42\x86\xdd\x71\xb0\xca\xb0\x10\xaa\x1f\xac\x63\xcc\xc5\x2c\x69\x7a\x4e\xc4\x2c\xb1\x3e\x11\x62\x96\xb4\x8a\xbb\x50\x66\x95\xed\x73\x3f\x34\xef\xbf\xcb\x2b\x5b\x3a\x99\x88\x85\x10\x79\x8e\x55\x5f\xaf\x9f\x59\xf6\xe4\x99\x5c\xb4\x2c\xf8\xf3\x32\x5a\xd3\x59\xcf\x58\xc5\x9a\x4c\x3c\x49\xf7\x9f\x15\x3f\xe2\xdb\x89\x35\x5b\xd9\xbe\x97\xa6\xfe\x22\x66\x8f\x9e\xee\x00\x24\xff\x6a\x7c\xc7\x13\x38\x49\xc5\xac\xe8\xac\xe3\x3b\x24\xbf\x3a\x65\xd8\x4f\x03\x4a\xd7\x7a\x28\xbe\xf2\x18\xa4\x8f\xdd\xa5\xa9\x41\x07\xc5\x3e\x16\xdc\x5b\xd3\xde\xe1\x7f\x16\x64\xb1\xe2\x21\x98\xd8\xbf\x97\xca\xa4\xe2\xeb\x34\xeb\x3e\xc6\x7e\x70\xb6\x75\xb2\xc7\x70\x62\x92\x5a\x4f\x6c\x74\xa0\x2a\x70\x4c\xdd\x95\x8f\xd4\xa1\xa7\xe9\xfb\x99\x53\x34\xc1\x54\x13\xdd\xbc\xea\x6b\x5c\xbf\x9a\x37\x3d\xa9\xf9\xfd\xcf\x18\x34\xd3\x2e\xf0\x45\xcc\xf2\x1c\x85\xed\xe9\x72\x25\x6f\x7c\x80\x23\x2d\x63\x24\xe3\xd3\x23\xe6\xc1\xa9\x9a\xfc\xc5\xf3\x2b\x8f\x9a\x1a\x19\x34\xbf\xdc\x73\xa4\x9d\xee\xf3\x8c\x7a\x77\x9b\x4e\x22\x4f\x27\x1d\x4c\x15\x83\x73\x1a\xc1\x63\x54\x5a\xc3\x1a\x7d\x44\x65\xcd\x74\xb9\x53\x18\x43\x59\x9d\x64\x5f\xf9\x89\x6f\xc2\xce\xb3\xfc\xb2\xec\xb7\x52\xb9\x23\x7f\x72\x7c\x91\xa2\x0c\x8c\x91\x60\xce\x37\x39\x19\x89\x6b\xa9\xf5\x75\xc4\x3d\x33\xa6\x18\x3b\x55\x75\x31\x4d\x63\x77\x84\xf5\xd9\x32\xf6\xf1\x9d\x0d\xba\x46\x49\xa7\x42\xaa\xa1\x8c\x67\x92\x75\x26\x66\x4d\xcf\xd9\xb4\xe1\x66\x9e\x7c\xf3\xf4\x87\x49\xd2\x4b\xd9\x42\xcc\xac\xcf\xd6\x07\xc5\xf3\x9b\x85\xf8\x2a\xfe\x09\x00\x00\xff\xff\x08\xed\x42\xe3\x3d\x05\x00\x00") + +func testImagesAgnhostEntrypointTesterEpGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostEntrypointTesterEpGo, + "test/images/agnhost/entrypoint-tester/ep.go", + ) +} + +func testImagesAgnhostEntrypointTesterEpGo() (*asset, error) { + bytes, err := testImagesAgnhostEntrypointTesterEpGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/entrypoint-tester/ep.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostFakegitserverGitserverGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x93\x51\x6b\xe3\xc6\x17\xc5\x9f\x3d\x9f\xe2\x30\x0f\x7f\xec\xa0\x48\xde\xfc\xa1\x14\x97\x3e\xb8\xde\xa4\x6b\x36\x75\x20\x72\x1a\x96\x52\xf0\x58\xba\x96\x2e\x19\xcd\x68\x67\x46\x51\xcc\xb2\xdf\xbd\x8c\xec\xec\xda\xa4\xa5\x7d\xb3\x74\xaf\xce\x3d\xf7\x77\x8f\xb3\x0b\xb1\xb0\xed\xde\x71\x55\x07\x5c\x4d\xdf\xfd\x80\x75\x4d\xf8\xd8\x6d\xc9\x19\x0a\xe4\x31\xef\x42\x6d\x9d\x4f\x85\xb8\xe5\x82\x8c\xa7\x12\x9d\x29\xc9\x21\xd4\x84\x79\xab\x8a\x9a\x70\xac\x24\xf8\x9d\x9c\x67\x6b\x70\x95\x4e\x31\x8e\x0d\xf2\x58\x92\x93\x9f\xc4\xde\x76\x68\xd4\x1e\xc6\x06\x74\x9e\x10\x6a\xf6\xd8\xb1\x26\xd0\x4b\x41\x6d\x00\x1b\x14\xb6\x69\x35\x2b\x53\x10\x7a\x0e\xf5\x30\xe4\x28\x91\x8a\x4f\x47\x01\xbb\x0d\x8a\x0d\x14\x0a\xdb\xee\x61\x77\xa7\x5d\x50\x41\x08\x00\xa8\x43\x68\x67\x59\xd6\xf7\x7d\xaa\x06\x97\xa9\x75\x55\xa6\x0f\x5d\x3e\xbb\x5d\x2e\xae\x57\xf9\xf5\xe5\x55\x3a\x15\xe2\xc1\x68\xf2\x1e\x8e\x3e\x77\xec\xa8\xc4\x76\x0f\xd5\xb6\x9a\x0b\xb5\xd5\x04\xad\x7a\x58\x07\x55\x39\xa2\x12\xc1\x46\x9f\xbd\xe3\xc0\xa6\x4a\xe0\xed\x2e\xf4\xca\x91\x28\xd9\x07\xc7\xdb\x2e\x9c\x01\x7a\x75\xc5\x1e\xa7\x0d\xd6\x40\x19\xc8\x79\x8e\x65\x2e\xf1\xcb\x3c\x5f\xe6\x89\x78\x5c\xae\x3f\xdc\x3d\xac\xf1\x38\xbf\xbf\x9f\xaf\xd6\xcb\xeb\x1c\x77\xf7\x58\xdc\xad\xde\x2f\xd7\xcb\xbb\x55\x8e\xbb\x1b\xcc\x57\x9f\xf0\x71\xb9\x7a\x9f\x80\x38\xd4\xe4\x40\x2f\xad\x8b\xde\xad\x03\x47\x74\x54\xa6\x22\x27\x3a\x1b\xbe\xb3\x07\x33\xbe\xa5\x82\x77\x5c\x40\x2b\x53\x75\xaa\x22\x54\xf6\x99\x9c\x61\x53\xa1\x25\xd7\xb0\x8f\xc7\xf3\x50\xa6\x14\x9a\x1b\x0e\x2a\x0c\xcf\x6f\xd6\x49\xc5\x45\x26\x44\xab\x8a\xa7\x28\xb2\x53\x4f\x54\x71\xf0\xe4\x9e\xc9\x09\xc1\x4d\x6b\x5d\xc0\x58\x8c\x24\x5b\x29\x46\xd2\x50\xc8\xe2\x35\xa4\x10\x23\x59\x71\xa8\xbb\x6d\x5a\xd8\x26\xf3\xed\xee\xdd\xff\xb3\xc2\x6e\x9d\x92\x62\x22\x44\x96\x61\xd1\x94\x37\xea\x89\x7e\xe5\x90\x0f\x6a\x91\x5b\xe7\x8f\x17\xa9\x4c\x6d\x7d\xc0\x22\x7e\x90\x8a\x67\xe5\xde\xb6\xff\x8c\xff\x0d\x7a\xe9\xc2\x36\x8d\x32\xe5\x17\x31\x7a\xf0\x34\x03\x20\xa3\xcb\xcb\x6f\x36\x65\x22\x46\x79\x6d\x5d\x98\x41\x46\x09\x0f\x85\x8a\x03\xbe\x57\x6f\xad\xa9\x66\xd8\x3c\xd6\x64\x50\xda\x88\x28\x7a\x47\xa1\xad\xa1\xd7\x70\x69\x5b\x28\x1d\x4d\xcd\x7e\x9c\x4e\xa7\x32\x41\x8c\x78\xcf\x5a\x1f\xdb\x94\x01\x35\x6d\xd8\x0f\xd2\x8e\x5a\x0b\xa3\x1a\x2a\x21\xbf\x7d\x28\x63\x14\x86\xa7\x43\xbc\x0b\x65\xa0\xb4\xb7\xc3\x1f\xe4\xdf\x06\xa2\xd9\x5f\x46\xd5\xcb\xa8\x2a\x63\x32\x1d\xc5\x9f\x08\xb5\x3a\xcc\x4b\x37\x89\x18\xcd\x5d\xe5\x67\x38\x70\xf9\x4d\xbd\x70\xd3\x35\xab\xf8\x6e\x3c\x9d\x24\x62\x74\xdf\x99\x19\xd0\x28\x36\x89\xf8\x2a\xc4\xae\x33\x05\x6a\xd2\xda\x8e\xfb\x61\x6a\x7a\x4f\xbe\xb5\xc6\xd3\xa3\xe3\x40\x2e\x81\xc3\xc5\xf1\xfd\xe7\x8e\x7c\x98\xe0\x8b\x18\xb1\x4d\x87\x72\x1e\x1c\x9b\x6a\xdc\x27\x90\x4b\xa8\x06\x6a\x08\xc7\x29\xd9\x89\x88\x53\xb2\x0c\x27\x60\x37\xdf\xf7\x3c\x5f\x70\xf3\xdf\x89\x0e\x07\x38\x81\x99\x65\x78\xc3\xf3\x1f\xe7\x9c\x81\xdc\xfc\x2d\xc8\x03\x98\x88\x69\x5c\x34\x25\x2e\xce\x62\x96\x40\xb9\xca\xe3\x8f\x3f\xfd\xb0\xff\x80\x64\x60\xf4\x41\x99\x52\xd3\x4d\x67\x8a\xb1\xcc\x64\x72\x00\x3b\x39\x16\x6f\xd9\x07\x32\x73\x53\x0e\xe1\x1d\xcb\xd7\x10\x19\xd6\x13\xf1\x55\xfc\x15\x00\x00\xff\xff\x26\x09\x87\x2c\x9a\x05\x00\x00") + +func testImagesAgnhostFakegitserverGitserverGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostFakegitserverGitserverGo, + "test/images/agnhost/fakegitserver/gitserver.go", + ) +} + +func testImagesAgnhostFakegitserverGitserverGo() (*asset, error) { + bytes, err := testImagesAgnhostFakegitserverGitserverGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/fakegitserver/gitserver.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostGuestbookGuestbookGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x5a\x7b\x6f\xdb\x46\x12\xff\x9b\xfc\x14\x53\x02\xb6\xa9\x80\xa6\xd2\x16\xbd\x6b\x75\x27\x14\x8e\x93\x34\x6e\x5d\xdb\x67\xc9\x0d\x8a\x20\x68\x57\xe4\x88\xda\x13\xb9\xcb\xdb\x5d\x5a\xd1\x19\xfe\xee\x87\xd9\xe5\x4b\xb2\xfc\x6a\xd1\x03\xda\x00\x89\xa4\xe5\xec\xbc\xe7\x37\x3b\xcb\x0c\x5f\xf8\xc7\xb2\x5c\x2b\x9e\x2d\x0c\x7c\xf1\xf2\xf3\x6f\x60\xba\x40\xf8\xa1\x9a\xa1\x12\x68\x50\xc3\x51\x65\x16\x52\xe9\xd8\xf7\x4f\x79\x82\x42\x63\x0a\x95\x48\x51\x81\x59\x20\x1c\x95\x2c\x59\x20\xd4\x4f\x22\xf8\x09\x95\xe6\x52\xc0\x17\xf1\x4b\x08\x89\x20\xa8\x1f\x05\x83\x7f\xf8\x6b\x59\x41\xc1\xd6\x20\xa4\x81\x4a\x23\x98\x05\xd7\x30\xe7\x39\x02\x7e\x4a\xb0\x34\xc0\x05\x24\xb2\x28\x73\xce\x44\x82\xb0\xe2\x66\x61\x85\xd4\x2c\x62\xff\xe7\x9a\x81\x9c\x19\xc6\x05\x30\x48\x64\xb9\x06\x39\xef\x53\x01\x33\xbe\x0f\x00\xb0\x30\xa6\x1c\x0d\x87\xab\xd5\x2a\x66\x56\xcb\x58\xaa\x6c\x98\x3b\x2a\x3d\x3c\x3d\x39\x7e\x73\x36\x79\x73\xf8\x45\xfc\xd2\xf7\xaf\x44\x8e\x5a\x83\xc2\xff\x54\x5c\x61\x0a\xb3\x35\xb0\xb2\xcc\x79\xc2\x66\x39\x42\xce\x56\x20\x15\xb0\x4c\x21\xa6\x60\x24\xe9\xb9\x52\xdc\x70\x91\x45\xa0\xe5\xdc\xac\x98\x42\x3f\xe5\xda\x28\x3e\xab\xcc\x86\x83\x1a\xad\xb8\x86\x3e\x81\x14\xc0\x04\x04\x47\x13\x38\x99\x04\xf0\xea\x68\x72\x32\x89\xfc\xf7\x27\xd3\x77\xe7\x57\x53\x78\x7f\x74\x79\x79\x74\x36\x3d\x79\x33\x81\xf3\x4b\x38\x3e\x3f\x7b\x7d\x32\x3d\x39\x3f\x9b\xc0\xf9\x5b\x38\x3a\xfb\x19\x7e\x38\x39\x7b\x1d\x01\x72\xb3\x40\x05\xf8\xa9\x54\xa4\xbb\x54\xc0\xc9\x75\x98\xc6\xfe\x04\x71\x43\xf8\x5c\x3a\x65\x74\x89\x09\x9f\xf3\x04\x72\x26\xb2\x8a\x65\x08\x99\xbc\x46\x25\xb8\xc8\xa0\x44\x55\x70\x4d\xc1\xd3\xc0\x44\xea\xe7\xbc\xe0\x86\x19\xfb\xfb\x8e\x39\xb1\xff\x62\xe8\xfb\x25\x4b\x96\x96\x49\x85\xda\xcc\xa4\x5c\xfa\x3e\x2f\x4a\xa9\x0c\x84\xbe\x17\xa0\x48\x64\xca\x45\x36\xfc\xb7\x96\x22\xf0\xbd\x60\x5e\x18\xfa\xe0\x72\xc8\x65\x65\x78\x4e\x3f\x72\x99\xd1\x87\x40\x53\x7f\x0c\x29\x6c\xcd\xf7\x4a\x59\x22\x72\x9b\xc8\x34\x7d\x35\xbc\xc0\xc0\xf7\xbd\x20\xe3\x66\x51\xcd\xe2\x44\x16\x43\x5d\xce\x3f\xff\x72\x98\xc8\x99\x62\xf4\x88\x58\x0b\x34\x10\x2c\xbf\xd6\x31\x97\x43\x56\xf2\x82\x25\x0b\x2e\x50\xad\x87\xe5\x32\x1b\x12\xc1\xd0\x4a\x1c\xf8\xfe\x70\x08\xc7\x45\xfa\x5d\x63\x01\xc5\xa9\xd2\x75\x06\x64\x62\x21\xb5\x81\x63\xe2\x1c\xfb\xd7\x4c\x6d\x92\x8e\x61\xdf\x0a\x8d\x8f\x65\x51\x30\x91\xde\xf8\xde\x95\xc6\x11\x00\x04\xad\x47\x82\xc8\xf7\x26\x0b\xa9\xcc\x08\x82\x63\x85\x8c\x0a\x8a\xc1\xbb\xe9\xf4\x02\x34\xaa\x6b\x54\x2e\xcb\xaf\x99\xe2\xb2\xd2\x80\x22\x2d\x25\x17\x86\x52\x91\xc2\x8a\x82\x92\x0c\x58\xe7\x62\xca\x4b\x62\x7a\x2a\x45\x36\x82\x5f\x27\x86\x29\xb3\xcd\x52\x0a\x1b\xab\x8c\x5f\xa3\x80\xc3\x43\xf2\xe8\xa1\x0b\x4b\x8a\x73\x56\xe5\x66\x04\x5f\xbf\x1c\x44\x96\x9c\xd8\x3f\x4f\x7a\x6c\x01\xa2\xa3\x65\x22\x25\x71\x5c\x41\x59\xa9\x52\x52\x05\x2a\x1c\xf9\xfe\x21\x0c\x15\x66\x5c\x1b\x54\x23\x38\xea\xf1\x50\x68\x2b\x0b\x56\x3c\xcf\x41\x57\x33\x9d\x28\x3e\x43\xaa\x2b\x06\xa5\xe2\x05\x53\xeb\xc8\x56\x99\xd1\xad\x0d\xf5\x1e\x39\x6f\x05\x3b\x35\x6a\x7a\xc7\xcb\x2c\x50\x40\x59\xe9\x05\x30\xb1\x86\xaa\x4c\xad\xbb\xb9\x01\x85\x09\xf2\x6b\xd4\x0d\xd7\x46\x2f\x4c\x1b\x65\x34\x98\x85\x92\x55\xe6\x00\xe7\xf0\x70\xc6\x92\x25\x8a\xd4\xba\x2d\x26\x53\x32\x34\x23\xb8\x44\x53\x29\xa1\xe1\xe0\x26\x48\x99\x61\xc1\x08\xae\x59\x5e\xe1\xed\x41\x04\xab\x05\x2a\x57\x74\x76\x89\xf2\xc8\x56\x9c\x91\x24\xc5\xad\x35\x65\xe8\x8c\x5a\xe2\x1a\xf8\x1c\x84\x14\x87\x58\x94\x66\x1d\x41\xfd\x98\xdc\xae\xea\xad\x56\xb6\x26\xd9\xef\xad\xb7\xd0\x6c\x72\x38\x74\x9c\x4b\xc6\x15\xa1\x12\x19\x27\x57\xc2\xed\xb5\x91\x29\x95\x2c\x59\xc6\x0c\x92\x1f\x5a\xf3\x9d\xcd\x11\xc9\x67\x62\x1d\x3b\xe6\xca\x5a\xd7\x33\x2e\xb8\xb2\x2e\x4c\x83\xdb\x03\xda\x4a\x82\x13\x96\xe7\x2e\xc3\x74\x95\x24\xa8\xb5\x73\x4e\x13\xdb\x5a\xcd\x52\xc9\x4f\x6b\x4b\x4f\x88\x8a\xda\x4a\xae\xcb\xe9\xb0\x09\x19\x9f\xf7\x4c\x49\x8a\x94\x5c\x76\xa0\xd1\x1c\x44\x0e\x6c\x1d\x75\x93\x2c\x3b\xa9\x33\x34\x07\xf1\xaf\x91\xef\x1d\xa9\x4c\x8f\xc0\x55\xe3\x8f\xec\x13\x2f\xaa\xe2\x8c\xd6\xc2\x97\x83\xc8\xf7\x2e\x2b\x31\x02\x28\x18\x17\x91\x7f\xeb\xdb\x42\x0e\x7d\x8f\xca\xe2\x82\xaa\x02\x00\x1c\xc2\xf8\x5e\x1d\x76\xbb\xdc\xac\xd5\x1a\x9c\xcf\x7b\x74\x6d\xd6\x00\xc0\x87\x8f\xcd\xaa\xf3\xba\xfb\x53\xb0\xf2\x83\x5b\xff\xc8\x85\x41\x35\x67\x09\xde\xdc\x12\xe2\x24\x52\x68\x8b\x90\x84\x65\xb2\x32\x30\x06\xfa\x16\xbf\xae\x94\x85\xdb\xf0\xf3\xaf\x06\xf0\xc2\xad\x4d\x30\x91\x22\xf5\x3d\x9d\x23\x96\x00\x77\x49\xb7\x29\x07\xbe\x3f\xaf\x44\x02\x5c\x70\x13\x0e\xe0\xc6\xf7\xfa\x90\x15\xbf\xcd\x59\xa6\xc3\x41\x3c\xb1\x9a\xfd\xc4\x54\xb8\xdf\xb8\x21\x82\xa0\x05\x8a\x20\x82\xe0\xeb\x97\xf4\xaf\x85\x95\x53\x2a\x16\x01\x44\x15\x0c\x1e\xe7\xd8\x73\x62\x04\x41\xbf\x92\x88\xe3\xdf\xbe\xfc\xfb\x37\xf4\xf9\xca\xad\x1f\x68\xf8\x2d\x32\xda\xa0\x44\x10\xb4\xd8\x40\x6c\xe9\x2f\x01\x03\x25\xcf\x81\x06\xc1\x0a\x8b\x2c\x4d\xc5\x83\x91\xc4\xde\x45\x6a\x0c\x05\x5b\x62\xb8\x3b\x54\x03\x4a\x15\xeb\x4b\x4a\x9c\x90\x52\xee\xc5\x06\xdc\x47\xc0\x54\xa6\xdb\xf0\x5b\x67\x67\x9d\xa4\x33\x99\x62\xd8\x53\xb3\xe7\x15\xab\x00\x53\x86\x0c\x9f\x58\xc8\x0e\x9b\x28\x74\x52\xb7\xf8\xb8\x1f\x53\x19\x41\xd9\x25\xa7\x95\xc9\xe7\xd0\x3d\x86\xf1\x18\x82\x80\x96\x3d\x57\xce\xbe\x77\xeb\xfb\x1e\x79\xc3\x26\xf5\x68\x0c\x02\x4d\xfc\xbd\xe4\xe2\x5d\xbd\xb6\xc1\x7c\x43\xcb\x5a\x4d\xda\x64\x73\xec\x4c\xae\xc2\x81\xef\x59\x18\xb3\x39\xc7\x45\x82\xa1\xa5\x19\xc0\x3f\xa1\xc9\x67\x12\x4e\x02\x23\x40\xa5\x68\x73\x86\xe6\xe4\x22\x6c\x74\x18\xf8\x1e\xe9\x4c\xcf\x3e\x1b\x83\xe0\xb9\xdd\xe0\xe5\x32\x8b\x2f\x14\x17\x66\x1e\x06\x95\xb0\xe7\x2e\x23\x69\x2b\x9c\x5c\xc0\x9e\x1e\xc1\xde\x75\x4c\x00\xac\xd6\xd4\x93\xb8\x80\x3d\x1d\x07\x11\x34\x5c\xad\xb0\x08\x6c\xa1\x90\x04\xcf\x69\x48\x3f\xc3\x6e\x31\x91\xd4\xd2\x2a\xf4\x3d\xeb\x16\xaf\x81\xa7\xd1\x18\xe6\x85\x89\x27\x65\xad\x40\xe3\x92\x6f\x89\xfd\x78\x4f\xd7\x82\xea\x0c\x0c\x07\xc4\xac\xaf\xf0\x65\x4d\x4f\xaa\x19\xd9\x74\xa5\x11\xec\xe9\x61\xbb\xd9\x69\x59\x4b\x24\x06\xbf\x38\x07\xb9\x88\x5c\xa2\x96\xf9\x35\x4e\x8f\x2f\x8e\xd2\x54\x85\x81\x49\xca\xde\xbe\x67\xf9\x4c\x39\x56\xb0\xa7\xa3\x8d\xce\x59\x32\xc5\x0a\x6a\x0a\x43\xa9\xb6\x5a\x5c\xf3\x4c\x21\x70\x71\xcd\x72\x9e\xfe\x51\xfe\xd6\xa5\xb4\x83\x42\x9d\x1a\x29\x67\x39\x95\x41\x58\xfb\xe5\x59\x26\xd3\x09\xb3\x12\xae\x8f\xa3\x52\x52\xc1\x6a\x41\xd3\x84\xba\x2f\x1a\x3b\x2d\xfa\x3d\x76\x7c\x3f\x39\x3f\x23\x33\x1e\xc4\x11\xcf\x73\x61\xa6\x73\x70\x7c\x25\x0a\xa6\xf4\x82\xe5\xe1\x87\x8f\xb3\xb5\xa1\xd2\x76\xac\x06\x11\xec\xf7\xd9\x3e\x60\xff\x5b\x66\x58\x3e\x0f\x83\x37\x3d\x9b\xab\x86\xaf\x3d\xcb\x3b\x8b\x0f\xa8\xd5\x3b\x8e\x64\xbc\xb3\x75\xd0\xd8\x40\x6d\x50\x2e\x61\x26\x65\xee\x7b\x0e\x11\x23\xb0\xc7\xda\xbe\x1a\x1f\xdc\x61\xe0\x63\xfc\x80\x79\x7c\x0e\x9f\xc9\xe5\x5d\xfd\x8e\x65\x95\xa7\x76\xda\x4b\x98\x36\x1b\x6c\xa9\x34\x82\x68\xa7\x24\xa7\xe0\xee\xfa\x72\xe3\x97\x90\x29\xb6\x0c\x1a\xec\x1a\x6c\x41\x5e\xab\x48\x18\x4c\x79\x41\x23\x57\x65\x1e\xcc\x8f\x38\xe8\xc0\x77\x1b\x9e\xb7\x31\x97\xe0\x3a\x7e\xc7\x44\x9a\xe3\xdb\x4a\x24\x61\xd0\x1e\x75\x7b\x3a\xb9\xe7\xe4\xf0\xbb\xe4\x19\x52\x33\xcc\xd0\x3c\x44\xa4\x2d\x91\x7e\x98\xa8\x37\x6a\x74\x67\xec\x6e\x43\xe7\x06\xbb\xd5\xb5\xd9\x23\x91\x5a\xc3\xc2\x0d\xd0\x1b\x59\x8f\x92\xa9\x83\x88\x12\x6e\x60\xfd\x31\x1c\x6e\x1b\xe4\x0e\xdb\x5d\x47\xed\x8e\x85\x5c\xb8\x99\xde\xcd\x21\x07\x1a\x72\xae\x0d\xcd\xe7\xcd\x79\x29\x26\x76\x64\x57\x83\x83\xda\x31\x9b\x61\x77\x50\x4d\x1d\x86\x6d\x1d\x51\x37\x9b\x62\xad\x49\xb8\xb2\x53\x3e\x81\xa7\x4d\xa3\xf7\x8a\x1b\x54\x11\x28\x78\x51\xaf\x3b\xb0\xa5\x90\xd9\x83\xb2\x6e\x81\xa7\x52\x79\x7c\xc1\x94\xc6\x50\xc5\x57\x97\xa7\x0d\xe9\xd5\xe5\x89\x45\xf7\xbb\x95\x67\x19\xda\x8a\x0b\x57\xd1\x66\xb7\x68\x4b\x2b\x72\xea\x4c\x0c\x33\x95\x7e\xc5\xd2\xcb\x0e\xec\xfb\xa9\xc9\x4b\xd2\xc0\x29\x14\xff\xab\x42\xb5\x0e\x07\xf1\x77\x68\xc2\x80\xc0\x2f\xa8\xa3\xd6\xe4\xfe\x77\x6f\xa6\xdd\x24\xd5\x6b\x48\xbc\xa4\x0e\x3d\x1c\x82\x46\x91\x02\x73\xf3\x4f\x7d\xf2\xaf\x4f\xeb\xcd\xe1\x99\x69\x58\x61\x9e\xc7\xbe\x27\x2b\x53\x56\xe6\x71\xc8\x72\x74\x4d\x49\xc2\xd8\xf1\xf5\x3d\x82\xac\xce\x89\x16\xd1\x7e\xac\xf1\xcc\x6d\x79\xae\xef\x1a\x04\x80\xa4\x05\x8b\x19\x52\x02\x71\x96\xf3\xff\x62\x1a\xc3\x6e\xef\xbe\xf9\x54\x62\xe2\xee\x27\xde\x32\x9e\x63\xba\xe9\x64\x8f\x84\xbc\xb5\x42\x48\xa4\xb3\x31\xb4\xda\x53\x78\xdb\xf3\xfb\x98\x26\x5a\x14\x69\xd8\x4b\xb8\x72\x2b\x00\x74\x02\x83\x83\x3d\x7d\xd0\x9b\x1b\xe3\x3a\x00\xae\x40\xba\x3a\x6e\x6a\x63\x6b\x92\xda\x1a\x13\x1f\x1c\x11\x89\xe1\x23\x53\xe2\xe6\x84\x68\x2b\xa3\x53\xe1\x4f\x5a\x14\x64\xe8\x3d\x55\xb1\xc4\x75\x30\xf0\x77\x54\x45\x86\xe6\xdb\x25\xae\x5d\x3d\x2c\x71\x4d\x44\x4f\xcd\x70\x3e\xb7\xbe\xed\xce\xcb\xf7\xa5\xfc\x2d\x60\xae\xd1\x92\x58\xe5\x22\x98\xcb\x4a\xa4\x24\xc1\x52\x7c\x58\xe2\xfa\x63\xdd\x05\xdd\x13\xdb\x08\x5d\x3c\x89\x7b\xdd\xcf\xee\xf0\xb7\x14\xce\xf8\x67\x94\xd5\xb8\xf3\xfe\xc3\x39\xde\xd3\xfb\xff\x54\x7f\xb7\x75\x39\xe8\xad\x72\xf8\x1d\xb7\x16\xc4\xee\x19\x17\x17\x05\x6a\xcd\x32\x7c\xf2\xdd\x85\x6b\xf6\x7f\xf9\xd2\xa9\x93\xf1\x1e\x1a\xbb\xb6\xbb\xc0\x74\x5b\x60\xfb\x96\xaa\xad\xb4\xc8\x71\xa2\x4d\x77\x0a\x69\xd3\xb2\x20\x61\x82\xb2\x8a\x92\xc0\xde\x75\x5a\x18\xa3\x2d\x76\x9c\x78\x8a\x7d\x5d\x99\x75\x55\x73\xdf\xe4\xf6\xb8\xc6\x76\x7e\xfd\x25\x6a\x9b\xe3\x68\x0c\x8a\x89\x0c\xbb\xab\xc0\x66\x80\x7d\x60\x62\xb6\x94\xdb\x43\x7d\x37\xd1\x3d\x7b\xac\x79\x20\x1b\xee\x9b\x72\x9a\x1a\xa9\x4f\xb1\x8d\x39\xd4\xa8\xea\xd3\x7e\xab\xe6\xd3\xba\x67\xeb\x73\x82\xab\xdb\x2d\x28\x6d\x51\xd4\x7d\xdc\xdc\x76\x67\x84\xa6\xe8\x28\x3a\x6d\xd9\xfd\xd5\x30\x6d\xfb\x68\xed\x90\xed\xb7\x5e\x74\x12\x47\x7b\xd7\xf9\xbc\xab\xce\xba\xd5\x6f\xa9\xf2\x27\x45\x2d\xb2\xcc\xf6\x50\xfb\x72\x27\x9e\xca\x53\xb9\x42\x15\xee\x42\xa8\xa4\x48\x03\xd2\xe7\x8f\x03\xba\xd6\xa7\xdf\x26\x45\x4a\xe0\x71\x17\x43\x92\x22\xdd\x01\x7d\x64\xc5\x67\x63\x08\x68\xa0\x83\xfd\xfd\xf6\x37\xcd\x6e\x8f\x79\xac\x12\xba\x2a\x69\xde\xc2\x94\xf6\x8d\x6c\xed\x3a\x49\x4f\x73\x62\xa3\xc0\xb8\x11\xb8\xbf\xff\x47\x63\xb1\x7d\x23\x36\x1a\x43\xb0\x95\xe5\xc1\x86\x32\x59\x6b\x3d\x91\xf7\xa8\xeb\x1c\x0f\x9e\x70\x2d\xe9\xae\x10\x37\x11\xf6\x79\x57\x66\xcf\x4a\x5f\xab\x69\x7d\x39\xb6\xfb\x4a\xec\x3e\xd8\xb8\xdf\x59\xf7\x35\xa9\x3d\xbd\xa3\x47\xdd\xc9\xaf\x67\xde\x96\x3d\x86\xa5\xed\x45\xd3\x53\x61\xf4\x4e\xe3\x19\x3d\x17\x37\x2d\x5c\xdd\xaf\x74\x7b\xa3\x12\xba\x2f\x91\x13\x63\x81\xca\x28\x26\x74\x59\xe7\x46\xfd\x4a\x37\x9e\xa0\x99\x36\xeb\xaf\xdd\xab\x4c\xed\xde\x60\xc4\xed\xba\x3d\xdc\xd3\xd2\x71\xce\x51\xd8\xed\x89\x7d\xf1\x4a\x3a\xb8\xb5\xb0\x65\x5e\x3b\xb9\x75\x70\xb7\xcf\x22\xc6\x66\x82\xb8\xff\x4f\x70\xff\x95\xee\xc0\xf7\x52\x9c\xa3\x82\x96\x7d\x7c\x9c\x4b\x8d\x27\x69\x8e\xc7\x52\x08\x4c\xec\xdb\xf4\x70\x67\xac\xdc\x4e\x52\x26\x7e\x25\xd3\xb5\xdb\x49\xa4\xde\x4c\xa6\xeb\x56\x41\xf7\xe6\x3c\xbe\x44\x96\x1e\xe5\x79\xd8\xd2\xf7\x8e\x15\x3d\xa6\x75\x32\xb6\x6d\x94\x08\xed\xd5\x4e\xd3\xe3\x1b\x82\xc0\x85\xb5\x8d\xd9\xfd\x1e\xab\x7b\x4a\xeb\xee\x41\xbd\x50\x7b\xfb\xc6\xf7\x92\xd6\xef\xfb\xbd\x27\xa4\x4e\xbb\x69\xd4\xb9\x28\xa2\x75\xf7\xe2\x60\x04\x00\x5f\x6d\xbe\xcf\x8a\xfa\x4a\x3a\xc6\xad\x8e\x9b\x6f\x15\xba\x5c\xa2\x44\x39\xb9\xe8\xe7\x52\x22\x85\x68\x3d\x48\x8f\x5f\x73\x96\x87\x41\x95\x3e\x8a\x17\xb5\x64\x77\x55\x7b\x73\xeb\x9c\x44\x2a\xb9\x70\x11\xe3\x36\x52\xd4\x55\x12\x96\x13\x16\xd9\xa4\xa3\x67\xa7\xcd\x4a\x38\x88\xc3\x17\x24\xfa\xea\xb5\x45\xab\x41\x6b\x55\xbb\xc9\x2a\x4d\xb1\xb9\xf5\xff\x17\x00\x00\xff\xff\x64\x37\x6c\x48\x94\x23\x00\x00") + +func testImagesAgnhostGuestbookGuestbookGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostGuestbookGuestbookGo, + "test/images/agnhost/guestbook/guestbook.go", + ) +} + +func testImagesAgnhostGuestbookGuestbookGo() (*asset, error) { + bytes, err := testImagesAgnhostGuestbookGuestbookGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/guestbook/guestbook.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostInclusterclientMainGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x56\x7f\x6f\xdb\x38\x12\xfd\x5b\xfc\x14\x73\x02\x5a\x48\x81\x42\xa5\xd9\x6b\x71\xe7\xdb\x1c\xe0\xcd\x8f\x5b\x63\x73\xf1\xc2\x76\xb7\x58\xb4\xc5\x95\x96\x46\x12\x11\x89\x54\xc9\x51\x5c\xb7\x97\xef\x7e\x18\xca\x71\x9c\x36\xf7\x97\xc5\x21\x67\xf8\x38\xef\x3d\xd2\xf9\x91\x38\xb7\xfd\xd6\xe9\xba\x21\x38\x3d\x79\xf5\x77\x58\x35\x08\xbf\x0d\x6b\x74\x06\x09\x3d\x4c\x07\x6a\xac\xf3\x52\x88\x6b\x5d\xa0\xf1\x58\xc2\x60\x4a\x74\x40\x0d\xc2\xb4\x57\x45\x83\xb0\x9b\xc9\xe0\x0f\x74\x5e\x5b\x03\xa7\xf2\x04\x12\x5e\x10\xef\xa6\xe2\xf4\x1f\x62\x6b\x07\xe8\xd4\x16\x8c\x25\x18\x3c\x02\x35\xda\x43\xa5\x5b\x04\xfc\x52\x60\x4f\xa0\x0d\x14\xb6\xeb\x5b\xad\x4c\x81\xb0\xd1\xd4\x84\x4d\x76\x25\xa4\xf8\x73\x57\xc0\xae\x49\x69\x03\x0a\x0a\xdb\x6f\xc1\x56\x87\xab\x40\x91\x10\x00\x00\x0d\x51\x3f\xc9\xf3\xcd\x66\x23\x55\x40\x29\xad\xab\xf3\x76\x5c\xe5\xf3\xeb\xd9\xf9\xe5\xcd\xf2\xf2\xf8\x54\x9e\x08\xf1\xd6\xb4\xe8\x3d\x38\xfc\x3c\x68\x87\x25\xac\xb7\xa0\xfa\xbe\xd5\x85\x5a\xb7\x08\xad\xda\x80\x75\xa0\x6a\x87\x58\x02\x59\xc6\xb9\x71\x9a\xb4\xa9\x33\xf0\xb6\xa2\x8d\x72\x28\x4a\xed\xc9\xe9\xf5\x40\x4f\x1a\xf4\x80\x4a\x7b\x38\x5c\x60\x0d\x28\x03\xf1\x74\x09\xb3\x65\x0c\xbf\x4c\x97\xb3\x65\x26\xde\xcd\x56\xbf\xce\xdf\xae\xe0\xdd\x74\xb1\x98\xde\xac\x66\x97\x4b\x98\x2f\xe0\x7c\x7e\x73\x31\x5b\xcd\xe6\x37\x4b\x98\x5f\xc1\xf4\xe6\x4f\xf8\x6d\x76\x73\x91\x01\x6a\x6a\xd0\x01\x7e\xe9\x1d\x63\xb7\x0e\x34\xb7\x0e\x4b\x29\x96\x88\x4f\x36\xaf\xec\x08\xc6\xf7\x58\xe8\x4a\x17\xd0\x2a\x53\x0f\xaa\x46\xa8\xed\x1d\x3a\xa3\x4d\x0d\x3d\xba\x4e\x7b\x26\xcf\x83\x32\xa5\x68\x75\xa7\x49\x51\x18\xff\x70\x1c\x29\x8e\x72\x21\x7a\x55\xdc\x72\x11\x6d\x8a\x76\xf0\x84\xae\x68\x35\x1a\x12\x42\x77\xbd\x75\x04\x89\x88\xe2\xc2\x1a\xc2\x2f\x14\xf3\xa7\xdb\xf6\x64\x73\xdf\xa8\xd3\xd7\x6f\x38\x80\xa6\xb0\xa5\x36\x75\xbe\x56\x1e\xdf\xfc\x95\x43\x55\xab\xea\xf0\xdb\x85\x94\xd6\x86\x91\x41\xca\x99\x4e\xfe\x26\xdd\x61\x2c\x44\x14\xd7\x9a\x9a\x61\x2d\x0b\xdb\xe5\xbe\xaf\x5e\xfd\x94\x17\x76\xed\x54\x98\xba\xfd\x9b\x97\xda\xe6\x23\x9c\xe3\xda\xe6\xb7\x7b\x39\xc7\xcf\x4d\x3b\xf4\x74\x38\x61\xbb\xde\x1a\x9e\x63\x60\x79\x6b\xeb\xc3\xb4\xdb\xd6\xd6\xf9\xdd\x69\x2c\x52\x21\xee\x94\x83\xde\xb6\xed\xcc\x10\xba\x3b\xd5\x82\xe6\xe3\xe7\x39\x9c\x77\xe5\xcc\x9c\x8f\x5d\x39\x0f\xfb\xb0\x02\x06\xbf\xd3\x56\x6d\x1a\xeb\x09\xce\x19\xb1\x0c\x55\x9e\x49\x38\x83\x97\xe1\x48\xf2\xdc\x76\x9d\x32\xe5\x37\x11\xbd\xf5\x38\x01\x80\xf8\xbb\x8e\xc7\x99\x88\x96\x8d\x75\x34\x81\xf8\x77\x74\xda\x96\xba\x50\x6d\xbb\x0d\xd8\x02\x6f\x07\x7e\xfe\x10\xe7\x0d\xaa\x96\x9a\xaf\x1f\x62\x40\x53\xf6\x56\x8f\x15\xae\xad\xa9\x27\xf0\xe9\x87\x02\xfe\xfb\x0a\xfb\x02\x8f\xf9\x30\x78\x16\x11\x2f\xd4\xe6\x78\x07\x0e\x0a\x6b\x2a\x5d\x4b\xf8\x05\x0b\xc5\x86\x0f\x4e\xd5\x3e\x1b\x9d\xef\x87\x75\x31\x9e\x8c\x7b\xd3\xa1\x32\xc4\xe6\x5a\x23\xb8\xc1\x80\x36\x5e\x97\x21\x45\x1d\xee\xdd\xdb\x52\x0a\xb1\xfa\x2e\xbf\x50\x06\x54\xeb\x43\x72\x68\x32\x59\xb8\x53\xad\x2e\x15\x21\x90\xbd\x45\x03\xce\x8e\x6a\x96\x9f\x32\x11\x4d\x5d\xed\x27\x30\x76\xf7\xdf\xea\x8b\xee\x86\xee\x86\x63\xc9\x49\x9a\x89\x68\x31\x98\x09\x40\xa7\xb4\xc9\xc4\xbd\x10\xd5\x60\x0a\xd0\x46\x53\x92\xc2\x37\x11\xfd\xc8\x94\xbc\x6a\x55\xed\x93\x54\xce\x0c\xfd\xa1\x5c\xf2\xf2\x50\x12\x19\xc4\x3c\x3c\xd6\xbb\x71\x9c\xc1\x4f\x27\x99\x88\xa2\x10\x86\x87\x30\x1f\x94\x5b\xce\xc8\x1f\xda\xcb\xf7\x8c\xc7\xc2\x9a\xd2\xc7\xe9\x1e\x09\xe3\x4a\x8a\xae\x84\xa3\x27\xea\xc8\x40\xb9\xda\xc3\xfb\x8f\x7c\xc9\x98\x3a\x40\x65\xe5\xca\x99\xd1\x74\x6d\x19\x9f\x88\x4a\xac\xd0\x41\x08\x5f\xb5\x83\x6f\x76\x71\x11\xb1\xef\xe4\x12\x29\x61\xcb\x91\xf5\x54\xa2\x73\x71\x06\x31\xb9\x01\x63\x5e\xc1\xb2\x97\x33\x53\xd9\x2a\x89\x3d\x29\x47\x58\x86\x78\x51\xd5\x19\xa0\x73\x30\x39\x03\xf6\x91\x7c\x6c\x4e\x60\x9f\xb7\xd5\x55\x58\xf1\x97\x33\x30\xba\x65\x60\x8c\x4c\x5e\x29\x52\x6d\x95\xc4\xe8\xdc\x04\x5e\xdc\xc5\xa1\x4c\x2a\xa2\xfb\xb1\xaa\x7c\xe7\x54\x9f\xf0\x91\x13\x47\xe1\x36\x97\x0b\x3b\x98\x72\xe5\x74\xdf\xa3\x4b\x7f\x0c\x85\xca\x0e\x69\x70\x06\x5e\x96\xb8\x1e\xea\x05\x71\x28\x62\x63\x38\xe2\xa6\xdf\x8b\xe8\x3e\xa0\x66\xb8\x8f\xb7\x82\xbc\xc1\xcd\x95\xdd\x21\x9e\xbb\x0b\x8d\x49\x51\xd5\xa9\x5c\x5c\x2e\x57\x23\xc7\xa1\x4b\x79\xde\x6a\x43\x13\x5d\x1b\xeb\x10\x96\xd3\x57\x27\xaf\x5e\x83\xb1\xda\xb3\x51\xbc\x26\x7d\x87\x19\x7c\xe2\x1b\x4a\xae\x74\x71\xfb\x69\xef\xf9\xf0\x58\x31\x71\xc0\xe7\x61\x19\xc2\xa6\xd1\x45\x03\xe1\x01\x34\x28\x22\x62\x40\xfb\xcc\x24\x7c\x5d\x0c\x2e\x48\x36\x39\xd4\x53\x0a\x47\xe3\xba\x65\x50\x46\x2a\x22\xbe\xdd\xf9\x98\x3f\x1f\x93\x88\x9e\xf0\xc4\x82\x62\x5b\xee\xfd\x9a\x8a\x28\x5a\xef\xe9\x2a\xe4\xbf\x90\x92\x54\x4e\xd7\xfe\x77\x45\x4d\xf2\xe8\xeb\x54\x5e\xd8\x64\x77\x75\xcb\xd5\xfc\x62\x9e\xa4\xa9\x5c\xa8\x0d\x93\xf9\x0c\x9b\xe3\xa6\x97\xce\x59\x37\xaa\x83\x06\x7f\x56\x29\xdd\x06\x8d\x7c\x3f\x8f\xfc\x0b\x45\x83\xc5\xed\x21\x38\xd6\xc0\x07\xf3\xc2\x7f\x30\xa3\x12\x32\x18\x95\x9c\xac\xd3\x74\xc7\x1c\x7b\x80\xb6\x3d\xc2\x8e\x5c\x5e\x31\x14\xc4\x18\x9e\x93\xc8\xde\x32\x2c\xa0\xa3\x5d\x4e\x0a\xfb\x25\x89\xc3\xcf\x70\x34\xa6\xe1\xe7\x01\x3d\xa5\x90\x3c\x8c\x7d\x6f\xc3\x3f\x9a\x80\x36\xb8\x49\x0d\xd4\xfc\x8a\x8a\x9f\xc2\xa0\xf5\xcf\x72\x1c\x85\x2e\xc6\xe3\xdf\x24\xfd\x35\x30\x16\x8f\xa2\x6f\xd1\x24\x8f\x59\x29\xb7\xec\x24\x34\x2c\x04\x95\x6f\xb8\xd0\xf8\x1e\xca\xe5\xd0\x9d\xbe\x7e\x93\xbc\xff\xb8\xde\x12\x26\x55\x47\x72\xd9\x3b\x6d\xa8\x4a\xe2\x17\xfe\xbf\x2f\x3c\x9b\xd1\xab\x96\xe2\x0c\x0e\x4a\x86\xd6\x1c\x52\xce\x73\x5f\xff\xd3\x84\xd9\xb3\x90\x35\x3e\xae\xcc\xde\xdb\xc5\xf5\xe5\xee\xc9\x95\xe1\x03\x57\x76\x39\xf6\xf8\x01\xd0\xfb\xc9\x47\x2e\x79\x0f\xd8\x7a\x0c\x50\x9f\x50\xf7\xa4\xfa\xcf\xd8\xf5\xb4\xfd\x67\x1c\x2c\xfb\xe0\x3b\x47\xd2\x91\x7c\xd2\xe2\xf4\xff\xf0\xc0\xfe\xee\xb1\x3c\x64\x2c\x79\xd6\xd5\x70\x58\x1b\xee\xc5\xff\x02\x00\x00\xff\xff\xef\x41\xba\xf3\xb3\x0a\x00\x00") + +func testImagesAgnhostInclusterclientMainGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostInclusterclientMainGo, + "test/images/agnhost/inclusterclient/main.go", + ) +} + +func testImagesAgnhostInclusterclientMainGo() (*asset, error) { + bytes, err := testImagesAgnhostInclusterclientMainGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/inclusterclient/main.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostLivenessServerGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x54\x5d\x6f\xdb\x36\x17\xbe\x16\x7f\xc5\x79\x09\xf4\x85\x14\x68\x92\x9b\x6d\x40\xe1\xa1\x03\x5c\x37\x59\x8c\x7a\x0e\x66\x25\x0b\x8a\xa2\x17\xb4\x74\x24\x11\xa5\x48\xe5\x90\xb4\xe3\x15\xf9\xef\x03\x25\x7b\x88\xbb\x14\xd8\x8a\x5d\x59\x1f\xcf\x79\xbe\x8e\xe8\xfc\x8c\xcd\x4d\xbf\x27\xd9\xb4\x0e\xce\x27\x2f\x7f\x80\x9b\x16\xe1\x9d\xdf\x20\x69\x74\x68\x61\xe6\x5d\x6b\xc8\x66\x8c\x2d\x65\x89\xda\x62\x05\x5e\x57\x48\xe0\x5a\x84\x59\x2f\xca\x16\xe1\xf0\x26\x85\xdf\x91\xac\x34\x1a\xce\xb3\x09\xc4\x01\xc0\x0f\xaf\x78\xf2\x13\xdb\x1b\x0f\x9d\xd8\x83\x36\x0e\xbc\x45\x70\xad\xb4\x50\x4b\x85\x80\x0f\x25\xf6\x0e\xa4\x86\xd2\x74\xbd\x92\x42\x97\x08\x3b\xe9\xda\x41\xe4\x40\x91\xb1\xf7\x07\x02\xb3\x71\x42\x6a\x10\x50\x9a\x7e\x0f\xa6\x7e\x8a\x02\xe1\x18\x03\x00\x68\x9d\xeb\xa7\x79\xbe\xdb\xed\x32\x31\xb8\xcc\x0c\x35\xb9\x1a\x51\x36\x5f\x2e\xe6\x17\xab\xe2\xe2\xbb\xf3\x6c\xc2\xd8\xad\x56\x68\x2d\x10\xde\x7b\x49\x58\xc1\x66\x0f\xa2\xef\x95\x2c\xc5\x46\x21\x28\xb1\x03\x43\x20\x1a\x42\xac\xc0\x99\xe0\x73\x47\xd2\x49\xdd\xa4\x60\x4d\xed\x76\x82\x90\x55\xd2\x3a\x92\x1b\xef\x4e\x0a\x3a\xba\x92\x16\x9e\x02\x8c\x06\xa1\x81\xcf\x0a\x58\x14\x1c\xde\xcc\x8a\x45\x91\xb2\xbb\xc5\xcd\xd5\xf5\xed\x0d\xdc\xcd\xd6\xeb\xd9\xea\x66\x71\x51\xc0\xf5\x1a\xe6\xd7\xab\xb7\x8b\x9b\xc5\xf5\xaa\x80\xeb\x4b\x98\xad\xde\xc3\xbb\xc5\xea\x6d\x0a\x28\x5d\x8b\x04\xf8\xd0\x53\xf0\x6e\x08\x64\xa8\x0e\xab\x8c\x15\x88\x27\xe2\xb5\x19\xcd\xd8\x1e\x4b\x59\xcb\x12\x94\xd0\x8d\x17\x0d\x42\x63\xb6\x48\x5a\xea\x06\x7a\xa4\x4e\xda\xb0\x3c\x0b\x42\x57\x4c\xc9\x4e\x3a\xe1\x86\xfb\xbf\xc5\xc9\xd8\x59\xce\x58\x9e\xc3\x0c\x6c\x50\x45\xb0\x48\xdb\x01\x23\x5c\xc8\x2a\x94\xdc\x8e\xba\x2f\x27\x60\xb1\x34\xba\xb2\x69\x60\xd0\x40\xd8\x1b\x72\x81\xb4\x45\xa1\x5c\xbb\x0f\xb0\xc0\x15\xf8\x09\xad\x0b\x0b\x95\xce\x42\xdc\x9a\x1e\x6b\xaf\xd4\x3e\x01\xdb\x1a\x72\x80\x0f\xd2\x3a\xd4\x25\x66\x8c\xf5\xa2\xfc\x14\x12\x04\x21\x8d\xd6\x32\x26\xbb\x40\x0c\x31\x8b\x78\xdd\x39\xce\x22\xae\x4c\x13\x7e\x34\xba\x3c\x7c\x0d\xc7\x6b\x4f\x2a\x5c\x3a\xd9\x21\x67\x2c\xe2\x8d\x74\xad\xdf\x64\xa5\xe9\x72\xdb\xd7\x2f\xbf\xcf\x4b\xb3\x21\xc1\x59\x32\x44\x9c\x77\xd5\xf2\xa0\x11\x92\x79\x7b\xf8\x3e\x1a\xdd\x1a\xeb\x60\x1e\xb0\x19\xdb\x0a\x3a\x41\xbe\x86\xff\x0f\x2c\xd9\xdc\x74\x9d\xd0\xd5\x67\x16\xdd\x5a\x9c\x02\x00\x3f\x3a\xe6\x29\x8b\x8a\x90\x6b\x0a\xbc\x70\x22\x74\x22\xfe\x49\x8f\x61\x6e\x69\x74\x33\x05\xe0\xff\x55\xff\xff\xa6\xfc\xa0\x3f\xa3\xc6\x4e\x01\xc6\x88\xbf\x8a\x07\xd9\xf9\x6e\x15\x1e\xc6\x93\x24\x65\xd1\xda\xeb\x10\xb5\x13\x52\xa7\xec\x91\xb1\xda\xeb\x72\xb8\x8b\xcb\xae\x82\xb3\x93\x66\x52\x10\xd4\x58\xf8\xf0\x31\x9c\x0e\xdd\x24\xf0\x99\x45\x36\xd4\x81\x15\x4c\x5f\x43\xd8\x52\xb6\x32\xbb\x38\x61\x51\x58\x62\x76\x25\x74\xa5\xf0\xd2\xeb\x32\xe6\xf9\x01\xc8\x53\x08\x12\xf1\x6e\x38\xf5\xd9\x1a\x6d\x6f\xb4\xc5\x3b\x92\x0e\x29\x05\x82\xb3\xc3\xf3\x7b\x8f\xd6\x0d\x12\xd1\x2e\x1b\x5e\x5f\xa1\xa8\x90\xe2\xf3\xc9\x24\x61\x51\x54\x09\x27\x82\x6a\x3c\xc8\x16\x52\x97\x18\x1f\x34\x92\x24\x2b\x06\x87\xc1\xc9\x71\x3a\xfe\xf0\x71\xb3\x77\x18\x87\xb9\x24\x61\xd1\xe3\xb3\x2e\xc7\xa2\xff\xf8\x16\x97\x95\xa7\xe1\x10\xfe\x55\xc5\xa9\x27\x16\x45\xb2\x86\x23\x28\x2b\xc6\x4d\xc7\x09\xfc\x1c\x16\x1f\x08\xbe\xc8\xf9\xe3\x98\xf3\x4b\xff\x75\xe7\xb2\xa2\x27\xa9\x5d\x1d\x73\x24\x32\x34\x85\x17\x5b\x9e\x3e\x43\x9d\x84\x9c\xd1\x23\xa0\xb2\xf8\x9c\xc2\xf9\xf3\x0a\xdc\x7c\xe2\xe3\xe4\xd7\x5a\x22\xac\x24\x61\xe9\xbe\xa5\x26\x65\xca\x14\x90\x28\xd4\xe4\x49\x65\xbf\x79\xa4\xfd\xad\x46\x5b\x8a\x1e\x63\xca\x6e\xd7\xcb\xf1\x59\x9c\x64\xbf\xa0\x8b\xb9\x32\xe5\x68\x47\xd6\xc3\xdc\xff\x5e\x83\x96\x6a\xcc\x33\xd0\x5f\x84\x12\xe2\x5d\x0a\x27\xd5\x48\xbd\x15\x4a\x56\x70\xf4\x3a\x85\x17\xf7\x3c\x85\xaf\x0a\xa4\x63\x86\xc2\x09\xe7\xed\x1b\x51\x1d\x4d\x07\x19\x42\xe7\x49\x8f\x8d\x44\x87\x48\x23\x6b\x90\xa5\x14\x86\x50\x4f\xe6\x2f\x8d\xd7\xd5\xe1\x23\x53\xa6\xc9\x2e\x85\x13\x2a\x1e\x00\xcb\xe1\x6c\xce\x74\x55\x84\xff\x81\x98\x4f\x5f\x4d\x5e\x4d\x78\x1a\x32\x25\x09\x7b\x64\x7f\x06\x00\x00\xff\xff\xdc\x7c\x35\xe8\xe6\x07\x00\x00") + +func testImagesAgnhostLivenessServerGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostLivenessServerGo, + "test/images/agnhost/liveness/server.go", + ) +} + +func testImagesAgnhostLivenessServerGo() (*asset, error) { + bytes, err := testImagesAgnhostLivenessServerGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/liveness/server.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostLogsGeneratorLogs_generatorGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x55\x6b\x6f\xd3\xcc\x12\xfe\xec\xfd\x15\x23\x4b\x45\x36\x38\x76\x5a\x74\xd0\x51\x68\x91\x72\x4a\xe1\x44\x94\x04\x35\x29\x08\x21\x3e\x6c\xec\xb1\xbd\x8a\xbd\xeb\x77\x2f\x09\x11\xe2\xbf\xbf\x9a\x75\xae\x54\x02\x29\x52\xf6\x32\xf3\xcc\x33\xcf\xcc\x8e\xb3\xe7\xec\x56\x75\x5b\x2d\xaa\xda\xc2\xd5\xf0\xf2\x15\x2c\x6a\x84\x0f\x6e\x89\x5a\xa2\x45\x03\x63\x67\x6b\xa5\x4d\xca\xd8\xbd\xc8\x51\x1a\x2c\xc0\xc9\x02\x35\xd8\x1a\x61\xdc\xf1\xbc\x46\xd8\xdd\x24\xf0\x19\xb5\x11\x4a\xc2\x55\x3a\x84\x88\x0c\xc2\xdd\x55\x18\xbf\x66\x5b\xe5\xa0\xe5\x5b\x90\xca\x82\x33\x08\xb6\x16\x06\x4a\xd1\x20\xe0\x8f\x1c\x3b\x0b\x42\x42\xae\xda\xae\x11\x5c\xe6\x08\x1b\x61\x6b\x1f\x64\x07\x91\xb2\xaf\x3b\x00\xb5\xb4\x5c\x48\xe0\x90\xab\x6e\x0b\xaa\x3c\xb5\x02\x6e\x19\x03\x00\xa8\xad\xed\x46\x59\xb6\xd9\x6c\x52\xee\x59\xa6\x4a\x57\x59\xd3\x5b\x99\xec\x7e\x72\x7b\x37\x9d\xdf\x0d\xae\xd2\x21\x63\x8f\xb2\x41\x63\x40\xe3\x3f\x4e\x68\x2c\x60\xb9\x05\xde\x75\x8d\xc8\xf9\xb2\x41\x68\xf8\x06\x94\x06\x5e\x69\xc4\x02\xac\x22\x9e\x1b\x2d\xac\x90\x55\x02\x46\x95\x76\xc3\x35\xb2\x42\x18\xab\xc5\xd2\xd9\x33\x81\xf6\xac\x84\x81\x53\x03\x25\x81\x4b\x08\xc7\x73\x98\xcc\x43\xf8\xdf\x78\x3e\x99\x27\xec\xcb\x64\xf1\xff\xd9\xe3\x02\xbe\x8c\x1f\x1e\xc6\xd3\xc5\xe4\x6e\x0e\xb3\x07\xb8\x9d\x4d\xdf\x4e\x16\x93\xd9\x74\x0e\xb3\x77\x30\x9e\x7e\x85\x0f\x93\xe9\xdb\x04\x50\xd8\x1a\x35\xe0\x8f\x4e\x13\x77\xa5\x41\x90\x74\x58\xa4\x6c\x8e\x78\x16\xbc\x54\x3d\x19\xd3\x61\x2e\x4a\x91\x43\xc3\x65\xe5\x78\x85\x50\xa9\x35\x6a\x29\x64\x05\x1d\xea\x56\x18\x2a\x9e\x01\x2e\x0b\xd6\x88\x56\x58\x6e\xfd\xfe\x49\x3a\x29\x7b\x9e\x31\xd6\xf1\x7c\x45\x20\x8d\xaa\x4c\x85\x92\x31\xd1\x76\x4a\x5b\x88\x58\x10\x96\xad\x0d\x59\x10\x5a\xd1\x62\xc8\x58\x10\x56\xc2\xd6\x6e\x99\xe6\xaa\xcd\x4c\x57\x5e\xbe\xcc\x72\xb5\xd4\xdc\x5f\xad\xfe\x6b\x52\xa1\x32\xde\x89\x96\xe7\xb5\x90\xa8\xb7\x59\xb7\xaa\x32\x67\x45\x93\x69\x2e\x8b\xf0\x68\xb4\x6a\x54\x95\xad\xaf\x42\x16\x33\xb6\xe6\x9a\x42\x51\x9d\x3f\xa2\xad\x55\x61\xe0\x06\xbe\x7d\x27\x91\x65\xf5\x93\x05\x41\xf8\xfe\x6e\x11\x26\xb4\xf8\x34\x9b\xef\x57\x8f\x7e\xf1\x8b\x05\x92\xb7\x68\x3a\x9e\xe3\x13\xb7\x95\x5b\xe2\xc0\x6c\x8d\xc5\xb6\x77\x2a\xb0\xe4\xae\xb1\xfd\x46\x9a\x1e\x20\x66\x2c\xcb\xe0\xb6\x2d\xee\x55\x65\xde\xa3\x44\xcd\x2d\x15\xc1\x50\x6f\xf7\x2d\x54\xc9\x5a\x19\x0b\xb7\x94\x6a\xea\xf9\x3e\x31\xbf\x81\x67\x5e\x89\xf4\x56\xb5\x2d\x97\xc5\x4f\x16\x3c\x1a\x1c\x01\x40\x48\xb2\x0e\xaa\xbd\x25\x05\x9d\xd7\x4a\xdb\x11\x84\x33\x67\x3b\x67\x0d\x34\x42\xa2\xa1\xfe\x27\x53\x6a\x4c\x63\x0b\xe5\x2c\x38\x29\x4a\xa5\xdb\x66\x4b\x4e\xf7\x4a\x56\x23\x38\x3a\x5d\x7b\xaf\x85\xb2\xbc\x79\xf3\x77\x04\xdf\x3b\xd7\x85\xd3\xbe\x15\xde\x10\xe0\x58\x57\x66\x04\xd0\xd3\xfe\xc8\x7f\x88\xd6\xb5\x53\x3a\x8c\x86\x71\xc2\x82\x07\x27\x89\xfe\x8e\x38\x52\xba\x09\xfb\x75\x28\xd7\x31\x3a\x08\x69\x59\xb0\x87\x06\x00\x6a\x96\xf4\xed\x6e\x4f\xfa\x96\x4e\xe6\x20\xa4\xb0\x51\x0c\x3f\x59\xf0\xbb\x78\xe9\xbb\x86\x57\x26\x8a\xd3\x89\xb4\x9f\xb9\xfe\x14\x3d\x3b\x82\x27\x5e\xbf\x81\x3f\x18\x58\x3a\x09\x13\x08\x6d\x98\xc0\x30\x81\xb0\x8f\xdf\x27\x6f\x6b\x6e\xc1\xd4\xca\x35\x05\x2c\xf1\xc0\xdb\x57\x90\x5a\x1e\x65\xb1\x1f\x31\xda\xc9\x30\xfe\x03\x8f\x3d\xf7\x9e\xcc\x3e\xb3\x04\x42\xed\xe4\x60\xbf\x25\x1e\xc5\x19\x8f\x83\x04\x67\x61\x7e\xf9\xfe\x3a\x2b\xf5\x29\xed\xbf\xd5\x6c\x0f\xda\x8b\x78\x5a\x8d\x28\x6f\x0b\x78\x7e\xd6\x75\x09\x70\x5d\x99\xc3\x2b\xf0\x6a\x8b\xf2\x34\xe8\xf5\x0d\x0c\xe9\x34\xa0\x17\x98\xbe\xe3\x96\x37\x65\x14\x4e\xe4\x9a\x37\x82\x66\x22\xd9\x48\xd7\x2e\x51\x7b\x66\xe4\x38\x82\x0b\xca\xf3\x08\x12\xd3\xb3\xf1\xc0\x87\x8c\xff\x0c\xbb\x37\x1b\xc1\xc5\x3a\x4c\x0e\xdb\x1d\x4e\x81\x0d\xdf\xc2\xe8\xe6\x88\x96\x9d\xb7\x50\x74\x1a\x9a\x05\x56\xe4\x2b\xd4\xe4\xe0\xad\xa6\xb8\x59\xf8\x93\xc8\x03\xc5\x04\x58\xd2\x98\xf3\x87\xe9\xdc\xaa\x2e\x8a\x59\x40\x5a\x8a\x82\xbc\x86\xaf\x69\x71\x7d\x92\x10\x1d\xbc\x78\x71\xe4\x3f\x91\xa5\x8a\x4e\xa4\xbe\x17\x12\x23\x51\xc4\x31\x0b\x82\xeb\xc1\x0e\xf8\x96\xd8\xf7\xc5\xdd\x75\x10\x1a\xe0\x9d\x30\xa8\xd7\xa8\x07\x8d\x58\xa1\x0f\xd1\x7f\xff\xf8\x1a\xb5\x9f\xb1\x28\x2b\x5b\x93\xb6\x97\xc3\x21\x98\x6d\xbb\x54\x8d\x79\x52\xdb\x5d\x40\x7a\x59\x31\xf4\xb5\x24\x76\xad\x1f\x8f\x94\xc3\xc9\xb0\xfc\x46\xa3\x95\x9e\x8e\x8c\x1a\x94\xd1\xc9\x4d\x1c\x7f\x3f\x19\x8f\xe4\x76\x9c\x95\xbf\x79\x1d\x2f\xc8\x89\x05\x9d\x2a\xa6\xbc\xf5\x3e\xde\x70\xee\x39\x44\x07\xa7\x07\x2e\x2b\x8c\x5e\x26\xf0\x1f\x12\xc5\xe9\x86\x2c\xcb\xd6\xa6\xf3\x4e\x0b\x69\xcb\x28\xa4\xef\x40\xb6\xbe\xcc\x8e\xc8\xd9\x85\xc9\x3a\x55\xd0\x7f\x98\x1c\xa9\x24\xb0\x0b\x16\xb3\xc0\x58\x6e\x9d\x39\x44\x3d\x46\xba\x1a\x0e\x13\x78\x35\x1c\x52\xfd\x35\x5a\xa7\xe5\x79\xb4\x8b\x02\x2e\x8c\xff\x51\xab\x8a\x22\x81\x5e\xab\x04\x9c\x6e\x12\xe8\x71\xe9\x2d\xfe\x1b\x00\x00\xff\xff\x27\x3f\x55\xc6\x27\x09\x00\x00") + +func testImagesAgnhostLogsGeneratorLogs_generatorGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostLogsGeneratorLogs_generatorGo, + "test/images/agnhost/logs-generator/logs_generator.go", + ) +} + +func testImagesAgnhostLogsGeneratorLogs_generatorGo() (*asset, error) { + bytes, err := testImagesAgnhostLogsGeneratorLogs_generatorGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/logs-generator/logs_generator.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostMounttestFilepermissionsPs1 = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x56\xff\x8f\xda\x36\x14\xff\xdd\x7f\xc5\x53\x40\x2a\x48\x24\x97\x63\xfd\x61\xeb\x74\x9b\x32\xa0\x1d\xea\x95\x3b\x11\xda\x5b\x35\x4d\x95\x71\x1e\xc4\xbb\x60\xa7\xb6\x73\xc0\xb6\xfe\xef\x93\xed\x10\x42\x61\xd5\x8d\x5f\xe2\xd8\xef\x7d\x3e\x9f\xf7\xc5\x8f\x74\x60\x24\xcb\xbd\xe2\xeb\xdc\xc0\x30\xbe\xfe\x01\x16\x39\xc2\xdb\x6a\x89\x4a\xa0\x41\x0d\x49\x65\x72\xa9\x74\x44\x3a\xa4\x03\xb7\x9c\xa1\xd0\x98\x41\x25\x32\x54\x60\x72\x84\xa4\xa4\x2c\xc7\xc3\xc9\x00\x3e\xa0\xd2\x5c\x0a\x18\x46\x31\xf4\xac\x41\x50\x1f\x05\xfd\x1f\x49\x07\xf6\xb2\x82\x0d\xdd\x83\x90\x06\x2a\x8d\x60\x72\xae\x61\xc5\x0b\x04\xdc\x31\x2c\x0d\x70\x01\x4c\x6e\xca\x82\x53\xc1\x10\xb6\xdc\xe4\x8e\xa6\x06\x89\x48\x07\x3e\xd6\x10\x72\x69\x28\x17\x40\x81\xc9\x72\x0f\x72\xd5\xb6\x03\x6a\x9c\x60\xfb\xcb\x8d\x29\x5f\x5d\x5d\x6d\xb7\xdb\x88\x3a\xb1\x91\x54\xeb\xab\xc2\x1b\xea\xab\xdb\xe9\x68\x32\x4b\x27\xe1\x30\x8a\x9d\xcb\x7b\x51\xa0\xd6\xa0\xf0\x73\xc5\x15\x66\xb0\xdc\x03\x2d\xcb\x82\x33\xba\x2c\x10\x0a\xba\x05\xa9\x80\xae\x15\x62\x06\x46\x5a\xbd\x5b\xc5\x0d\x17\xeb\x01\x68\xb9\x32\x5b\xaa\x90\x74\x20\xe3\xda\x28\xbe\xac\xcc\x49\xb2\x0e\xea\xb8\x3e\x31\x90\x02\xa8\x80\x20\x49\x61\x9a\x06\xf0\x4b\x92\x4e\xd3\x01\xe9\xc0\xc3\x74\xf1\xeb\xdd\xfb\x05\x3c\x24\xf3\x79\x32\x5b\x4c\x27\x29\xdc\xcd\x61\x74\x37\x1b\x4f\x17\xd3\xbb\x59\x0a\x77\xaf\x21\x99\x7d\x84\xb7\xd3\xd9\x78\x00\xc8\x4d\x8e\x0a\x70\x57\x2a\xab\x5f\x2a\xe0\x36\x8d\x98\xd9\x9c\xa5\x88\x27\x02\x56\xd2\x0b\xd2\x25\x32\xbe\xe2\x0c\x0a\x2a\xd6\x15\x5d\x23\xac\xe5\x13\x2a\xc1\xc5\x1a\x4a\x54\x1b\xae\x6d\x31\x35\x50\x91\x91\x0e\x14\x7c\xc3\x0d\x35\x6e\xe7\x2c\xa8\x88\x90\x7b\xaa\xe8\xa6\x47\x00\x7e\xb7\xb1\x89\xf5\x1f\xdd\xd7\xbc\xc0\x19\xdd\x20\xdc\x40\xb7\x67\x72\x25\xb7\x10\x84\xcd\x26\x3f\xa6\x39\x0a\xfa\x04\xfa\x84\x90\x0e\x28\xa4\x19\xdc\xf8\x47\x46\x0d\x85\x7f\xfc\x9a\x9a\x3a\x61\x9a\x74\xe7\x93\x64\xfc\xe9\x7e\x32\x7f\x37\x4d\x53\x97\x8a\x1b\x88\x77\x71\x1c\x5f\x43\xb8\x94\xca\xad\xbf\x8f\x2d\x98\xad\x8d\x65\xf7\xcf\x1a\x8e\x96\x25\x8a\x06\xdc\x1f\x1d\xd1\x9b\xad\x49\x42\xba\x0f\xf3\xe9\x62\x72\x89\x69\x78\x64\x8a\x5f\x36\xeb\xeb\x38\xf6\x6b\x77\x70\xed\x24\xe0\x0e\x59\xe5\x44\xb4\x43\xaa\x7b\xde\x1d\x91\xee\xe4\xb7\xc9\xe8\xfd\x65\xa2\x56\x48\xc3\x98\x10\xb2\xaa\x04\xb3\x25\x80\x37\x68\x6c\x26\xef\x8f\x65\xea\x75\x4b\x6a\xf2\x3e\xfc\x4d\x6c\xdf\x77\xe5\xf2\xcf\x7b\x6a\x72\xb8\x81\xe0\x81\x8b\xef\x86\x9f\x6e\xe5\x9a\x33\x5a\x58\xaf\x14\x59\xa5\xb8\xd9\xa7\x68\x6c\xef\xde\xbc\x70\xae\x2f\x82\xda\xb3\x32\x65\x65\xe0\x06\xa6\xe2\x49\x3e\x62\xf8\xb0\xe1\xef\xd0\xe4\x32\x83\xd0\x16\x4e\x97\x94\x21\x28\x29\xcd\x15\xe3\x9b\xa7\x21\x84\x8e\xa7\x21\x74\x46\x56\xdf\x81\x65\x8c\x9a\x29\x5e\x1a\xa9\x88\x23\xe0\x2b\xe8\xd5\x24\xd1\x1c\x4d\xa5\xc4\x07\x5a\x54\x08\xa1\x40\x88\x0f\xfa\x9d\x12\x85\xe6\x03\x2d\x6c\xfb\x9c\x9b\x37\x56\x0f\xb6\x5c\xe1\x44\x29\xa9\x20\xb8\x48\x0b\x5c\x3c\x49\xe6\x5a\x17\x56\x94\x17\x98\xf9\xd1\xc2\x64\x86\xaf\x0e\x2c\x41\x03\x88\x3b\x6e\xe0\xda\xbd\x7e\xf1\x8a\xbb\xb6\x5e\xe9\xb8\x25\xa4\x15\x53\x63\x70\xb7\x15\xa8\xde\x28\x59\x95\xd6\xd0\xbb\x44\xee\xfd\x2b\x9b\xd6\xb1\x7b\x6f\xa5\xe5\x14\x27\x72\xa9\x0c\xf1\x33\x74\x45\x55\x14\x10\x52\x91\x7d\xcd\x15\x8d\xe5\xc6\x4e\xc2\xc6\xaa\x9d\xc1\x8e\xbb\xa3\xae\xdb\xa4\xf5\x78\xa1\x61\xed\x04\x72\xed\x86\xb0\x42\x26\xd7\x82\xff\x85\x59\x04\xa3\x1c\xd9\xa3\x55\x61\x5d\xbc\x4e\x6e\x34\x16\x2b\xe0\xba\x05\x48\x3d\xc2\xc0\x4e\x05\x6b\xad\xe5\x00\x32\x5c\xd1\xaa\x30\xce\xd3\xe3\xdb\xd9\x68\xa2\xc6\x4d\xa0\x1b\xf8\xaa\x25\xde\xc7\xf6\x53\x1d\xd9\xb0\x5e\x34\x1e\x36\x1b\xa1\x95\xd8\xfd\xb9\x1d\xd0\x37\x92\xed\x53\x79\x30\xaa\x2b\x77\x28\xa0\x25\x7f\x47\xf5\xa3\xbd\x57\x7e\xc7\xe9\x3c\xdd\x92\x76\x86\x36\x5b\x6e\x6f\x25\x15\x52\x96\x43\xaf\x6b\x9b\x9e\x8b\xa6\x70\xe3\x64\x74\x7b\xd2\xab\x9b\x36\x54\x53\x4f\xca\x30\x4a\x18\x2e\xf6\xe5\x85\xfe\xf6\x09\xb5\x41\x52\x01\x49\x51\xc8\x2d\x24\xa3\xc9\x00\xf4\x23\x2f\xa3\x13\x2b\x26\x85\xe1\xa2\xd5\xf4\x75\x5c\x1e\x81\x49\xf1\x84\xca\x80\x95\x10\x9d\xf0\x37\x0a\x18\x6a\xed\x22\x0b\x97\xae\x87\xbe\x1e\xa1\x7d\xdf\x3f\x67\x93\xf5\x2c\xf7\x75\x98\xfe\xe9\x66\xd3\xcb\x96\xa8\x67\x71\x9f\x4d\xd5\x9a\xfc\x7c\xda\x3e\x83\x7d\xf8\x7f\xd9\x2f\x0c\xdb\x9a\xff\xd2\x18\x7e\x86\x82\xeb\xcb\x45\xc9\xd0\x20\xf3\x35\x01\xb3\x2f\x31\x3a\x6f\x8c\x85\xaa\xb4\x41\x8c\x26\x9f\x2b\x5a\xe8\xd6\xe5\xef\x9f\xd1\xb6\xfa\xd7\x51\xff\x47\xd4\xdf\x86\x75\xd7\xe5\x1c\xbb\x7d\x13\x9e\x0d\x6e\x6f\x6f\xb4\x90\xb7\x72\x8b\xaa\xe7\x13\x18\x58\x91\x3a\x38\xc3\x6f\x5f\xab\x4b\xf8\x75\xda\x94\x9b\xed\x10\x34\xb1\x1e\x85\x1d\x21\x02\xf2\x85\x90\x43\x11\x2e\xfd\x07\x1e\x3e\x2f\xfa\xe4\xc2\x04\xa9\x27\xfb\x17\xfb\xc7\x5c\x2a\x2e\xfc\xc4\x3a\x7e\xea\xf8\x6a\xdd\x72\x51\xed\x42\x6d\xf6\x05\x46\x04\x59\x2e\x21\x88\x1d\x65\x40\xfe\x0d\x00\x00\xff\xff\xd5\xb7\xd8\x1a\x30\x0b\x00\x00") + +func testImagesAgnhostMounttestFilepermissionsPs1Bytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostMounttestFilepermissionsPs1, + "test/images/agnhost/mounttest/filePermissions.ps1", + ) +} + +func testImagesAgnhostMounttestFilepermissionsPs1() (*asset, error) { + bytes, err := testImagesAgnhostMounttestFilepermissionsPs1Bytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/mounttest/filePermissions.ps1", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostMounttestMtGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x58\x6d\x6f\xdb\x38\x12\xfe\x6c\xfe\x8a\x39\x01\xdd\x93\x0b\x55\x76\xb3\x7b\xc9\xc1\x7b\xf9\x90\x3a\xc9\x9d\xb1\xad\x53\xc4\xc9\x16\x8b\x6e\x11\xd0\xf2\x48\x22\x2a\x91\x5a\x92\x8a\x62\x14\xf9\xef\x87\xa1\x24\x47\x56\x9c\x5c\x92\x5e\x0b\xac\xb1\x14\x87\xcf\x33\x6f\x9c\x19\x66\xf4\x9a\x4d\x55\xb1\xd6\x22\x49\x2d\xec\x8d\xdf\xfe\x03\x2e\x52\x84\xdf\xca\x25\x6a\x89\x16\x0d\x1c\x95\x36\x55\xda\x84\x8c\xbd\x17\x11\x4a\x83\x2b\x28\xe5\x0a\x35\xd8\x14\xe1\xa8\xe0\x51\x8a\xd0\xec\x04\xf0\x3b\x6a\x23\x94\x84\xbd\x70\x0c\x3e\x09\x78\xcd\x96\x37\xfc\x95\xad\x55\x09\x39\x5f\x83\x54\x16\x4a\x83\x60\x53\x61\x20\x16\x19\x02\xde\x44\x58\x58\x10\x12\x22\x95\x17\x99\xe0\x32\x42\xa8\x84\x4d\x1d\x49\x03\x11\xb2\x3f\x1a\x00\xb5\xb4\x5c\x48\xe0\x10\xa9\x62\x0d\x2a\xee\x4a\x01\xb7\x8c\x01\x00\xa4\xd6\x16\x93\xd1\xa8\xaa\xaa\x90\x3b\x2d\x43\xa5\x93\x51\x56\x4b\x99\xd1\xfb\xd9\xf4\x64\xbe\x38\x79\xb3\x17\x8e\x19\xbb\x94\x19\x1a\x03\x1a\xff\x2a\x85\xc6\x15\x2c\xd7\xc0\x8b\x22\x13\x11\x5f\x66\x08\x19\xaf\x40\x69\xe0\x89\x46\x5c\x81\x55\xa4\x67\xa5\x85\x15\x32\x09\xc0\xa8\xd8\x56\x5c\x23\x5b\x09\x63\xb5\x58\x96\x76\xcb\x41\xad\x56\xc2\x40\x57\x40\x49\xe0\x12\xbc\xa3\x05\xcc\x16\x1e\xbc\x3b\x5a\xcc\x16\x01\xfb\x34\xbb\xf8\xcf\xd9\xe5\x05\x7c\x3a\x3a\x3f\x3f\x9a\x5f\xcc\x4e\x16\x70\x76\x0e\xd3\xb3\xf9\xf1\xec\x62\x76\x36\x5f\xc0\xd9\x29\x1c\xcd\xff\x80\xdf\x66\xf3\xe3\x00\x50\xd8\x14\x35\xe0\x4d\xa1\x49\x77\xa5\x41\x90\xeb\x70\x15\xb2\x05\xe2\x16\x79\xac\x6a\x65\x4c\x81\x91\x88\x45\x04\x19\x97\x49\xc9\x13\x84\x44\x5d\xa3\x96\x42\x26\x50\xa0\xce\x85\xa1\xe0\x19\xe0\x72\xc5\x32\x91\x0b\xcb\xad\x5b\xdf\x33\x27\x64\xaf\x47\x8c\x15\x3c\xfa\x4a\x20\xb9\x2a\xa5\xb5\x68\x2c\x63\x22\x2f\x94\xb6\xe0\xb3\x81\x17\xe7\xd6\x63\x03\x4f\xa8\x91\x50\xa5\x15\x19\x2d\x94\xa1\x5f\x2b\x72\xf4\x18\x1b\x78\x89\xb0\x69\xb9\x0c\x23\x95\x8f\x4c\x11\xbf\xfd\x79\x14\xa9\xa5\xe6\x1e\x1b\x32\x36\x1a\xc1\x34\x5f\x7d\x68\x91\xc9\x7f\xa5\x69\x22\x93\xc8\x54\x19\x0b\x53\x12\x0e\xd9\x35\xd7\xdb\xa2\x87\xf0\x93\xc3\x09\xa7\x2a\xcf\xb9\x5c\x7d\x63\x83\x4b\x83\x13\x00\xf0\x36\x9a\x7a\x01\x1b\x2c\x52\xa5\xed\x04\xbc\xa9\x46\x4e\x89\x4e\x99\x68\xea\xac\x4b\xc4\x35\xca\xbe\x4b\x40\x95\xb6\x28\xad\x81\xd3\x05\xd8\x75\x81\x01\xa8\x4a\xa2\x0e\x20\x57\x2b\x0c\xba\xd2\x01\x44\x4a\x5a\x94\xd6\x50\x72\x3a\x5c\x22\x7c\xaf\x64\x32\x81\x9d\x84\x9b\xc8\xb8\xeb\xb0\x05\xd5\x65\xa6\x10\xb8\x53\x6b\x63\x31\x7f\xaa\x16\xed\x0d\xa9\xad\x72\xe7\x03\x10\xee\xdb\x1a\xf0\x46\x18\x1b\x92\x7a\x47\x3a\x31\x13\x80\xda\x77\x1f\xf8\x8d\xc8\xcb\x7c\x4e\x1f\xfd\xf1\x30\x60\x83\xf3\x52\x92\x0f\x73\x2e\x64\xc0\x6e\x99\xf3\xbb\xcf\x06\xb1\xb9\x58\x17\xf8\x91\xdb\x14\x7a\xff\x0e\xc1\xf3\xd8\x80\xe8\x3e\xa8\xd5\x0e\x89\xbb\xfd\x8f\xa8\xf3\xc7\xf6\xcf\xc8\xc2\x7b\x02\xf5\xbe\xc4\xea\x94\x20\xb8\x4d\xc7\xfb\xbf\xfc\xf2\xf8\xfe\xfe\xfe\xff\xd8\x1f\x3f\xba\x7f\x70\x70\x70\x6f\x5f\x23\x5f\x91\xc0\xb4\xf6\x75\x47\xcb\x9d\xfb\x33\xf9\x5e\xa9\xc2\x49\xb5\xfb\x56\xaf\x8f\x4b\xed\xae\x5a\xcf\xbe\xb7\xff\x1c\xb3\xc1\x52\x23\xff\x7a\x26\x4f\x6e\x0a\x8c\x2c\xae\x1a\x9c\x5a\xc0\xea\x12\xe9\xb6\xc4\xa5\x8c\x40\x48\x61\xfd\x21\x7c\x63\x83\xee\x75\x08\x4f\x33\x9e\x18\x7f\x18\x2e\xac\x16\x32\xf9\x9d\x6b\xff\xa7\xbb\x98\x05\xe0\xc5\xe6\x8a\xf2\xc8\x0b\xc0\xa3\xff\x9c\x6a\x56\x41\xa1\x85\xb4\x75\xc2\x19\x97\x68\x54\x45\xbc\xe1\x13\xc0\x3b\x01\x27\x78\x91\xe1\x15\xe5\xe6\xc3\x04\xb4\x0b\x4b\xe1\x6e\xcb\x53\x19\xda\x94\x69\x19\x28\xef\x1f\x66\xa0\xdd\xe7\xa0\x6f\x12\xae\x85\x77\x77\xec\x61\x7c\x55\xb9\x1a\x7a\x39\x3b\x76\xd7\xf5\xdf\xb3\xe3\x27\x92\xf5\xb2\x37\x00\x4f\x62\x75\xe5\x28\x69\xdd\x67\xa4\xae\x83\xf4\x3f\xc4\x42\x99\x05\xb1\x56\x79\x5d\x42\xc8\x46\x70\x87\x9e\xcb\xbb\xbf\xbf\xcd\xbb\xbf\xff\x02\xde\xfd\xfd\xe7\xf3\x8e\x7b\xbc\xe3\x97\xf0\x8e\x9f\xcb\x7b\x70\x70\xb0\xc5\x7b\x70\x70\xf0\x7c\x5e\x3a\xf4\x04\xde\x1d\xd5\xa1\x4d\xa9\xa6\x38\xf7\xa9\x1d\x5b\x5b\xe7\x37\x15\x9c\xe8\x5f\xc0\x77\x57\x6d\x7a\xac\x57\x42\x5e\x65\x4a\x15\x4f\x63\x17\x12\x48\xf8\x71\x2d\x66\xd2\x36\x2a\x74\x0a\x5a\x00\x9e\x5b\x5f\xb9\x9e\x1f\x50\x45\x0b\xc0\x3b\xa7\x4f\x40\x9f\x60\x55\x92\xee\x8e\xd2\xe9\xf3\x10\xfa\x3b\xa5\x32\x07\xbf\xbb\x1c\x06\xe0\xb9\x8d\x2b\x25\xaf\xb0\xd9\xea\x78\x98\xea\x64\x00\xde\x3b\x12\xa1\x66\x4a\x1d\xd1\x59\xa4\x24\xb4\xe2\xad\xb5\x01\xf8\x34\x9c\xba\x58\xbf\x79\xb3\xcb\x69\x10\x67\x3c\x01\x25\xb3\xf5\xd0\x1b\x52\x2b\x1c\x8d\xe0\x82\x66\xd9\x42\xab\x44\xf3\x9c\x52\x24\x56\x54\x71\x8c\xca\x11\xc8\x0e\x43\x4c\xbd\xee\xcd\x69\x24\x8c\x2c\xb7\xf5\x58\x63\x53\x24\x20\xc2\x36\x50\x70\x63\x36\x9f\x69\xf2\xd1\x61\x5d\xe4\xa9\xfd\xfa\x51\xbe\x82\xd7\x5b\x33\x4e\x00\x5c\x27\x06\x3e\x7f\x31\x2e\x17\x5c\x17\x68\x1a\xf4\x00\xb5\x06\x40\xad\x95\xae\x17\x06\x0e\xe1\xf3\x17\xf7\xe1\xdb\x2d\x1b\x0c\x19\x1b\xd0\xb4\x95\x21\xaf\x67\xbc\x32\xe7\xe6\x2b\x18\x05\x15\x42\xc4\x25\x18\xb4\xc0\xe5\xba\x53\xa6\x2b\x84\x8a\x4b\x1b\xb2\x81\x93\xf5\xc7\xe3\xf1\xb8\x81\x99\x9f\x5d\x9c\x4c\xea\x9a\xa8\x57\xe8\x62\xab\x62\xc0\x1b\x8c\x4a\xd7\xe0\x9a\x51\xe4\x9a\x6b\xa1\x4a\x43\xe3\x3e\xa9\x0f\x99\x90\xe8\xce\xd7\xe6\x0b\x03\xc2\xb9\x5c\x28\xc9\x33\x77\x0b\x79\x96\xa9\xca\x00\x07\x23\x64\xe2\x72\xb3\x3e\x69\xd5\x84\x0e\xba\xc3\x6f\x43\x80\x69\x8a\xd1\xd7\xa6\x6f\xb9\xb6\xa5\x62\xe0\x50\x70\x9b\x3a\x91\xbd\x10\xe0\x93\xbb\xdd\x1c\x24\x56\x75\x9e\x53\xac\x05\xc5\x87\xdb\x3b\xc9\x9f\x3b\x60\xdc\x6e\x82\xf7\x77\xb3\xb9\x16\xe4\x9c\x25\xba\x3b\xb3\x51\x61\x9a\x72\x99\xb4\x19\xdd\x75\x81\x3b\xaf\xc8\x08\xfa\x10\x91\x2f\x2b\x91\x65\xe0\xd2\xb6\xce\x91\x90\x31\x17\xac\x43\xa8\x1b\xb4\x7f\xd7\xa7\x87\x6c\x20\x62\x0a\x22\xfc\xed\x10\xa4\xc8\x28\xbe\x6d\x2c\x79\x51\xa0\x5c\xf9\xb4\x0a\x48\x64\xc8\x06\xb7\x1b\x24\x52\xce\xd9\x3b\xaf\x2b\xa0\x7f\xaf\xe3\xd0\xef\x0f\x82\xa7\xc6\x42\xbf\x3f\x0a\x7e\xec\xe0\xc7\x3f\x06\xde\xb5\x09\xfa\x7d\x31\x7c\x3b\x09\xf9\xdd\x91\xe8\xbb\xd0\x68\xea\xf1\xbb\xe3\xcf\x77\xa1\xb9\x29\xc7\xdf\x9a\x77\xbe\xcb\x95\x9d\xc6\xe3\xef\x68\x7c\xff\x2f\xec\xba\xa9\xf5\x19\xba\xad\xae\xd7\x82\x76\xb7\x8c\x17\xa8\x23\x62\xc8\x50\xba\xcf\x43\x3a\x35\x76\x67\x94\x09\x4f\x6e\x84\xf5\xdf\x36\x52\xed\x7a\xec\x7a\x83\xab\xda\x7d\xef\x50\x91\x81\xb6\x54\xbb\x4a\x4c\x48\x22\x76\xd5\x07\x0e\xe9\x65\xe0\xa0\x35\xda\x52\x4b\xd2\xae\x86\x6e\x2a\xcf\xbb\xb5\xc5\x5a\x31\x98\x1c\x42\xfd\xbc\x0e\xcf\x1b\x0e\x07\xbe\xd3\xb8\x38\xb7\xe1\x47\x9a\x59\x63\xdf\xab\x49\x49\x2f\x2a\x47\xdb\xb3\x86\xd2\xf0\xea\xaf\x09\xbc\xba\xfe\x53\x7a\x81\x53\xa9\x75\x42\xab\x10\x6a\x5d\x2b\xd4\x85\xec\xbc\x36\x1d\xde\x3d\x8c\xda\x60\xbf\x6b\xc4\x90\xda\x46\xc7\xca\x5b\xc6\x22\x25\xe9\xbd\x2f\x85\x15\x3c\x6b\x5f\x3b\xf5\x51\x7a\x32\xb9\x27\xfc\x1b\xaa\x97\xa8\x37\x15\xfc\x4f\xe9\x75\x3c\xbd\x75\xa5\x3b\xae\xae\x5f\xc7\xa0\x4c\x78\xda\x5c\xc8\x67\x39\x7f\xdb\xdd\x8e\x64\xc3\x10\xc0\xe7\x2f\xcb\xb5\x45\x7f\x5b\xef\x61\x4d\xf9\xc4\x68\x34\x7f\x53\xba\xeb\x4b\x4f\x8d\x42\xb3\xde\x95\x65\x0f\xe6\x60\x73\x8b\xb6\xdc\xb3\xfd\x16\x15\x34\x0b\x3d\xf0\xfa\x5c\x2a\x95\x3d\xc3\x79\xed\x92\xc2\xd6\xd7\xf0\xc9\xd7\xb5\x35\xa4\x0f\x12\x37\x15\xfb\xfb\xcd\x68\x27\xa6\x6e\x86\x36\x81\x6d\xe7\xa8\xf6\x5f\x33\x4f\x35\xe9\xab\xd7\x17\x34\xcc\x4e\x0e\xdd\x50\x1b\x2e\x30\x52\x72\x05\xaf\xeb\x55\xab\x89\xbf\xa5\xd7\x90\x0d\xe8\xa2\x19\xcb\xb5\xdd\x1c\x9c\xab\xca\x1f\xfe\xda\x80\x08\x19\xa1\xef\xf6\x87\xf0\x2f\xd8\xb0\xb4\xdb\x19\x62\xe1\xef\xb5\x24\x35\xa5\x9b\xfb\x76\x54\x89\xfb\x45\xa2\x75\x1a\xa5\xd3\xfd\xdc\xdc\x4a\xce\x93\xfb\xa5\xe2\x95\xa1\xc4\x6c\x3c\x2d\x64\xe2\x52\xb4\x85\xdc\xa4\xa9\x53\x44\xc8\x92\x9c\x77\xdb\xcb\xf8\x47\x8a\xc5\x1d\xce\xee\x82\xe1\x14\x7e\x20\xa0\x4e\x79\x11\xef\x3c\x49\x06\xf6\xca\x8a\x13\xdf\xd2\xeb\x52\xf6\xdf\x03\x21\xb4\x24\x13\x78\x65\x42\x38\x6f\x6c\xf6\x82\x1e\x9a\x33\xb9\x6b\xb3\x33\xba\xfe\xfb\x4d\xed\x81\xbb\x8b\x40\x57\xf7\x96\xfd\x37\x00\x00\xff\xff\xd7\x2d\x2f\xd6\x7c\x17\x00\x00") + +func testImagesAgnhostMounttestMtGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostMounttestMtGo, + "test/images/agnhost/mounttest/mt.go", + ) +} + +func testImagesAgnhostMounttestMtGo() (*asset, error) { + bytes, err := testImagesAgnhostMounttestMtGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/mounttest/mt.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostMounttestMt_utilsGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x94\xdf\x6e\xdb\x36\x14\x87\xaf\xcd\xa7\xf8\x55\x40\x06\xab\x73\x25\x27\xd8\x4d\x52\xf8\xc2\x4b\xb2\xce\x68\x6a\x17\xb1\xbd\xa2\xc0\x80\x81\x92\x0e\x25\xa2\x12\xa9\x90\x54\x15\xa3\xf0\xbb\x0f\x94\xec\x2c\x6e\x96\x2c\x08\x76\xd3\x1b\x02\x36\xcf\x9f\xef\x7c\x07\x54\x1c\xe3\xe7\xa4\x91\x65\x86\x57\xad\x54\x99\x6e\x2d\x63\xf1\x6b\x76\xae\xeb\x8d\x91\x79\xe1\x70\x32\x3e\x3e\xc5\xaa\x20\xbc\x6f\x12\x32\x8a\x1c\x59\x4c\x1b\x57\x68\x63\x23\xc6\xae\x64\x4a\xca\x52\x86\x46\x65\x64\xe0\x0a\xc2\xb4\xe6\x69\x41\xd8\xdd\x8c\xf0\x07\x19\x2b\xb5\xc2\x49\x34\xc6\xd0\x07\x04\xbb\xab\x20\x7c\xcb\x36\xba\x41\xc5\x37\x50\xda\xa1\xb1\x04\x57\x48\x0b\x21\x4b\x02\xdd\xa6\x54\x3b\x48\x85\x54\x57\x75\x29\xb9\x4a\x09\xad\x74\x45\xd7\x64\x57\x22\x62\x9f\x77\x05\x74\xe2\xb8\x54\xe0\x48\x75\xbd\x81\x16\xf7\xa3\xc0\x1d\x63\x00\x50\x38\x57\x9f\xc5\x71\xdb\xb6\x11\xef\x28\x23\x6d\xf2\xb8\xec\xa3\x6c\x7c\x35\x3b\xbf\x9c\x2f\x2f\xdf\x9c\x44\x63\xc6\xd6\xaa\x24\x6b\x61\xe8\xa6\x91\x86\x32\x24\x1b\xf0\xba\x2e\x65\xca\x93\x92\x50\xf2\x16\xda\x80\xe7\x86\x28\x83\xd3\x9e\xb3\x35\xd2\x49\x95\x8f\x60\xb5\x70\x2d\x37\xc4\x32\x69\x9d\x91\x49\xe3\x0e\x04\xed\xa9\xa4\xc5\xfd\x00\xad\xc0\x15\x82\xe9\x12\xb3\x65\x80\x5f\xa7\xcb\xd9\x72\xc4\x3e\xcd\x56\xbf\x2f\xd6\x2b\x7c\x9a\x5e\x5f\x4f\xe7\xab\xd9\xe5\x12\x8b\x6b\x9c\x2f\xe6\x17\xb3\xd5\x6c\x31\x5f\x62\xf1\x1b\xa6\xf3\xcf\x78\x3f\x9b\x5f\x8c\x40\xd2\x15\x64\x40\xb7\xb5\xf1\xec\xda\x40\x7a\x75\x94\x45\x6c\x49\x74\xd0\x5c\xe8\x1e\xc6\xd6\x94\x4a\x21\x53\x94\x5c\xe5\x0d\xcf\x09\xb9\xfe\x4a\x46\x49\x95\xa3\x26\x53\x49\xeb\x97\x67\xc1\x55\xc6\x4a\x59\x49\xc7\x5d\xf7\xfb\xc1\x38\x11\x7b\x1d\x33\x56\xf3\xf4\x8b\x2f\x52\xe9\x46\x39\x47\xd6\x31\x26\xab\x5a\x1b\x87\x21\x1b\x04\xa2\x72\x01\x1b\x04\xda\xfa\xd3\x6e\x6c\xca\xcb\x32\x60\x21\x63\xa2\x51\x29\x9a\x8a\xdb\x2f\x43\x7f\x40\x2a\x17\xfa\x03\xdf\xd8\xc0\x90\x6b\x8c\xc2\x2e\x3c\x5a\xdf\x45\x85\x6c\xcb\x58\x1c\xe3\x82\x84\x54\xfd\x86\xae\xa4\x6a\x6e\x31\xb4\x1b\x1b\x5b\xc7\x9d\xb0\x51\x11\xe2\x4d\x87\xe9\x36\x35\x41\x35\x55\x42\xa6\x1f\xbe\xaa\x85\xed\x39\x6d\xc4\x52\xad\xac\x43\xe9\xd3\x57\xfe\xe2\x03\xcf\x65\x8a\x09\xc6\xb7\xe3\xe3\xf1\xc9\xf1\xe9\xe9\x2f\x3b\x48\x61\x57\x9b\x9a\x86\x35\x77\x05\xfc\xee\x54\x1e\x82\x8c\xd1\xc6\xa3\x4a\x81\xee\x62\x32\x41\x10\xf8\x3f\xf6\xf0\x4a\x96\x6c\xb0\x65\x6c\x90\x34\x02\x67\x93\xbb\x61\x96\x1d\xe4\x5f\xee\xdb\xb6\x4b\x26\x63\x1e\xde\x76\xbd\x46\xf8\x29\x69\x44\xf8\xb6\x0b\x79\x35\xf1\x05\xbb\xfa\xa2\x72\xd1\x47\x23\x95\x13\xc3\xa0\xc7\x10\x46\x57\xe8\x87\x1f\x1e\xdd\x84\x67\x38\xfa\xfa\xa7\x0a\x46\xe8\xab\x90\x31\xe1\x3f\x58\x64\x4c\x8f\x25\x05\x92\x46\x44\x7e\x34\x0f\xff\xbd\x87\xef\x3b\x75\xd6\x7a\xa3\x5a\xe0\xe8\xe6\xac\xb7\x79\xd7\x27\x64\x83\x2d\xa8\xb4\xf4\x8c\xcc\x03\xbc\x3d\x44\xd8\x63\xdd\xb3\xb7\xdd\xfb\x97\x25\x7d\xd0\xd9\xcb\x37\xe0\x0b\x48\x25\xf4\x68\x6f\x5b\xdb\x4e\xf4\x70\x07\xbe\x5b\xc3\x7f\x3b\xee\x92\x9e\x6d\xf8\x50\x42\xd6\x8d\xdf\x7d\xe7\x1e\x38\xd8\x03\x46\xdd\x98\x61\xf8\xa8\x86\x8f\x64\xaa\x1f\x59\x83\xff\xbc\xd8\x67\x7b\x88\xba\x71\x9f\xd0\xb1\x68\x15\x99\xff\xf3\x61\x3e\xf5\x2c\x5f\xfa\x28\x5f\x66\x4a\xfb\xd1\xb0\x9e\x5d\x3c\xfa\x68\xd6\x32\x0b\xff\x2d\xe7\xdd\x13\x39\xef\xba\x9c\x03\x9b\x7f\x07\x00\x00\xff\xff\xd4\x95\x84\xc5\x0e\x08\x00\x00") + +func testImagesAgnhostMounttestMt_utilsGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostMounttestMt_utilsGo, + "test/images/agnhost/mounttest/mt_utils.go", + ) +} + +func testImagesAgnhostMounttestMt_utilsGo() (*asset, error) { + bytes, err := testImagesAgnhostMounttestMt_utilsGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/mounttest/mt_utils.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostMounttestMt_utils_windowsGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x55\x4d\x6f\xdb\x46\x13\x3e\x73\x7f\xc5\xbc\x04\x92\x90\x79\x69\xd2\x71\x2f\xad\x0b\x1d\x14\x7f\x34\x44\x52\xc9\x30\xe5\x1a\x01\x7a\x59\x91\x43\x71\x11\x72\x97\x99\x9d\x15\x2d\x14\xf9\xef\xc5\x52\xb4\x2d\xdb\xf5\xad\x87\x5e\xd6\xf4\xce\xcc\xb3\xcf\x33\x5f\xca\x32\xf8\xff\xda\xa9\xb6\x82\x41\xe9\xca\x0c\x56\x88\xec\xbd\x38\x33\xfd\x8e\xd4\xa6\x61\x38\x39\xfe\xf0\x0b\xac\x1a\x84\xcf\x6e\x8d\xa4\x91\xd1\xc2\xdc\x71\x63\xc8\xa6\x42\x7c\x51\x25\x6a\x8b\x15\x38\x5d\x21\x01\x37\x08\xf3\x5e\x96\x0d\xc2\x64\x49\xe0\x0f\x24\xab\x8c\x86\x93\xf4\x18\x22\xef\x10\x4e\xa6\x30\xfe\x55\xec\x8c\x83\x4e\xee\x40\x1b\x06\x67\x11\xb8\x51\x16\x6a\xd5\x22\xe0\x5d\x89\x3d\x83\xd2\x50\x9a\xae\x6f\x95\xd4\x25\xc2\xa0\xb8\x19\x1f\x99\x20\x52\xf1\x75\x02\x30\x6b\x96\x4a\x83\x84\xd2\xf4\x3b\x30\xf5\xa1\x17\x48\x16\x02\x00\xa0\x61\xee\x4f\xb3\x6c\x18\x86\x54\x8e\x2c\x53\x43\x9b\xac\xdd\x7b\xd9\xec\x4b\x7e\x76\xb1\x28\x2e\x8e\x4e\xd2\x63\x21\x6e\x74\x8b\xd6\x02\xe1\x77\xa7\x08\x2b\x58\xef\x40\xf6\x7d\xab\x4a\xb9\x6e\x11\x5a\x39\x80\x21\x90\x1b\x42\xac\x80\x8d\xe7\x39\x90\x62\xa5\x37\x09\x58\x53\xf3\x20\x09\x45\xa5\x2c\x93\x5a\x3b\x7e\x92\xa0\x7b\x56\xca\xc2\xa1\x83\xd1\x20\x35\x84\xf3\x02\xf2\x22\x84\x8f\xf3\x22\x2f\x12\x71\x9b\xaf\x3e\x2d\x6f\x56\x70\x3b\xbf\xbe\x9e\x2f\x56\xf9\x45\x01\xcb\x6b\x38\x5b\x2e\xce\xf3\x55\xbe\x5c\x14\xb0\xbc\x84\xf9\xe2\x2b\x7c\xce\x17\xe7\x09\xa0\xe2\x06\x09\xf0\xae\x27\xcf\xdd\x10\x28\x9f\x3a\xac\x52\x51\x20\x3e\x79\xbc\x36\x7b\x32\xb6\xc7\x52\xd5\xaa\x84\x56\xea\x8d\x93\x1b\x84\x8d\xd9\x22\x69\xa5\x37\xd0\x23\x75\xca\xfa\xe2\x59\x90\xba\x12\xad\xea\x14\x4b\x1e\xff\x7f\x21\x27\x15\xef\x33\x21\x7a\x59\x7e\xf3\x20\x9d\x71\x9a\x19\x2d\x0b\xa1\xba\xde\x10\x43\x24\x82\x70\xbd\x63\xb4\xa1\x08\xc2\xba\x63\xff\xc7\xd8\xfd\x99\xe1\x1d\x96\xfe\xd3\x32\x95\x46\x6f\xa7\x4f\xa5\x37\x36\x14\xb1\x10\xb5\xd3\x25\xb8\x4e\xda\x6f\x91\x3f\x40\x69\x8e\xfd\x01\x7f\x89\x20\xcb\x40\x1b\xd3\x8f\x82\x6e\xf7\x1d\x9c\x8a\x80\x90\x1d\x69\x38\x16\x3f\xa6\x68\xdf\x53\xcb\x41\x23\x45\xbd\xe4\x06\xf6\xe8\x31\x20\x91\xa1\x09\x66\x8a\x86\xca\xa0\x1d\x1b\xb2\x91\x5b\x04\xe3\x83\xe0\x26\x3f\x87\x0c\x7e\xcb\xcf\x53\xf8\x64\x06\xdc\x22\x25\xa0\xbc\x87\x9d\x1c\x8a\xfc\x3c\x9d\xc8\x30\x94\x8e\x08\x35\xb7\xbb\x31\xff\xd8\xa1\xf6\x05\x56\xfa\x60\x86\x7c\x97\x8c\xc4\x1f\xc9\x6a\xd5\x3e\xa1\xfb\xbb\xa9\xf0\x15\xb6\xaa\x86\xd1\x30\x9b\x41\x18\xfa\x8b\x43\x8c\xe0\x87\x10\xc1\x41\xed\x12\x1f\x07\xa7\x33\xd8\x20\x5f\xaa\x16\xaf\x90\xba\x11\x37\x1e\x81\xbc\xf1\x7f\x33\x1f\x79\x08\x84\x44\x7b\xa0\xba\xe3\xf4\x8a\x94\xe6\x3a\x0a\x3b\x53\xa1\x9f\xad\xfb\x4c\x8d\x83\xfa\xe6\xfb\x29\xbc\xd9\xfe\xa9\xc3\x64\xe4\x94\x1c\xb6\x4d\xfc\xaa\xb8\x07\x12\xff\x19\x71\x1e\xd4\xfe\x0b\xea\x9e\x13\x79\x10\x18\x19\x9b\x5e\x4e\x75\x4d\xf6\x72\x63\xcf\x6a\x2b\xc9\x4f\x47\x60\x1c\xfb\x25\x35\x0e\x49\xfa\xd1\xd5\x35\x92\x08\x02\x24\x5a\x3a\x7e\x76\x1b\x0b\x11\x94\x5d\xe5\x75\xfb\xd1\x49\xcf\x4c\xd7\x49\x5d\x45\x61\x6f\x06\x24\xdb\x60\xdb\xa6\x78\x87\x61\x02\xe1\xd1\xc2\xe8\x5c\x33\x92\x2c\x59\x6d\xc7\xab\x34\xbb\xaf\xc0\x24\x24\xed\xed\x87\x30\x11\x41\x10\x1e\x79\x82\x0b\xd9\xe1\xa4\x37\x1e\xdf\x49\x0b\xae\x3c\xbb\x19\xbc\x35\x8e\x1f\xae\x7c\x72\x67\xf0\x76\xcf\x50\x04\x53\x21\xbc\xf1\xda\xe9\xc8\x73\x7c\x59\x81\xc3\x8c\xef\x2b\x5e\x93\xe9\xe0\xca\xf3\x2e\x3c\x6f\x28\x4a\x52\x3d\xfb\xac\x27\xf7\x99\x47\xa2\xf1\x58\x3a\x4e\x8b\x31\x9b\x51\x1c\x3f\x96\xf3\x38\x79\xac\xa8\x71\xdc\x3b\xf6\x3c\xa6\x05\x92\xae\x48\x75\x45\x2f\x4b\x8c\xcc\xd3\xf0\xad\x6c\x1f\xba\x67\x5a\x3c\xe9\x95\x24\x8b\xb9\xe6\x68\x8f\x93\xc0\xcf\x09\xfc\x74\xf2\x8f\xbd\xf4\x52\x49\x2f\xc9\xfa\xbd\xb9\x7f\x19\xde\xbd\xb1\xef\x40\x5a\xbf\xa8\x1e\x7a\xe8\x1e\x16\x89\x5e\x11\x30\x5d\x1d\xf4\x4a\xb4\x95\x6d\x9c\x3c\x9d\x20\xbb\xda\xf5\xaf\x2d\x87\x2c\x03\xa3\xdb\x1d\x2c\x56\x97\x85\xff\x91\xb1\xae\xf7\x1b\x18\x2b\x90\x3c\x6e\xec\xce\xf8\x8d\xf4\x7c\xf1\xfc\x1d\x00\x00\xff\xff\xe2\x4e\xea\x18\x09\x08\x00\x00") + +func testImagesAgnhostMounttestMt_utils_windowsGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostMounttestMt_utils_windowsGo, + "test/images/agnhost/mounttest/mt_utils_windows.go", + ) +} + +func testImagesAgnhostMounttestMt_utils_windowsGo() (*asset, error) { + bytes, err := testImagesAgnhostMounttestMt_utils_windowsGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/mounttest/mt_utils_windows.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostNetCommonCommonGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\x4f\x4f\xf4\x36\x10\xc6\xcf\xf8\x53\x3c\xda\x13\xa0\x25\xa1\xa8\xa7\xf6\xb4\x05\xaa\xa6\xa0\xac\xb4\x59\x8a\x38\x7a\x9d\xd9\xc4\x22\xb1\xdd\xf1\x98\x10\x21\xbe\xfb\xab\x84\xe5\xdf\xfb\xde\x12\xcd\xe3\xdf\xfc\x66\xec\xfc\x54\x5d\xfa\x30\xb2\x6d\x5a\xc1\xc5\xf9\x6f\xbf\x63\xdb\x12\x6e\xd2\x8e\xd8\x91\x50\xc4\x2a\x49\xeb\x39\x66\x4a\xdd\x5a\x43\x2e\x52\x8d\xe4\x6a\x62\x48\x4b\x58\x05\x6d\x5a\xc2\xa1\xb2\xc4\x7f\xc4\xd1\x7a\x87\x8b\xec\x1c\xc7\x53\x60\x71\x28\x2d\x4e\xfe\x54\xa3\x4f\xe8\xf5\x08\xe7\x05\x29\x12\xa4\xb5\x11\x7b\xdb\x11\xe8\xd9\x50\x10\x58\x07\xe3\xfb\xd0\x59\xed\x0c\x61\xb0\xd2\xce\x4d\x0e\x88\x4c\x3d\x1c\x00\x7e\x27\xda\x3a\x68\x18\x1f\x46\xf8\xfd\xd7\x14\xb4\x28\x05\x00\xad\x48\xf8\x23\xcf\x87\x61\xc8\xf4\x6c\x99\x79\x6e\xf2\xee\x2d\x15\xf3\xdb\xe2\xf2\xba\xac\xae\xcf\x2e\xb2\x73\xa5\xee\x5c\x47\x31\x82\xe9\xff\x64\x99\x6a\xec\x46\xe8\x10\x3a\x6b\xf4\xae\x23\x74\x7a\x80\x67\xe8\x86\x89\x6a\x88\x9f\x3c\x07\xb6\x62\x5d\xb3\x44\xf4\x7b\x19\x34\x93\xaa\x6d\x14\xb6\xbb\x24\xdf\x16\xf4\x6e\x65\x23\xbe\x06\xbc\x83\x76\x58\xac\x2a\x14\xd5\x02\x7f\xad\xaa\xa2\x5a\xaa\xfb\x62\xfb\xcf\xfa\x6e\x8b\xfb\xd5\x66\xb3\x2a\xb7\xc5\x75\x85\xf5\x06\x97\xeb\xf2\xaa\xd8\x16\xeb\xb2\xc2\xfa\x6f\xac\xca\x07\xdc\x14\xe5\xd5\x12\x64\xa5\x25\x06\x3d\x07\x9e\xdc\x3d\xc3\x4e\xab\xa3\x3a\x53\x15\xd1\xb7\xe6\x7b\xff\x26\x13\x03\x19\xbb\xb7\x06\x9d\x76\x4d\xd2\x0d\xa1\xf1\x4f\xc4\xce\xba\x06\x81\xb8\xb7\x71\xba\xbc\x08\xed\x6a\xd5\xd9\xde\x8a\x96\xf9\xff\x97\x71\x32\x75\x9a\x2b\x15\xb4\x79\x9c\x20\xc6\xf7\xbd\x77\x4a\xd9\x3e\x78\x16\x2c\x3a\xdf\x2c\x94\xca\x73\x6c\x92\x73\xc4\xd3\xec\x1a\xa6\xb3\xe4\x64\xd2\x8c\xc4\x4f\x13\xce\x83\x93\xcb\x94\x8c\x81\x3e\x92\x4e\x88\xf7\xda\x10\x5e\xd4\x51\x9e\xa3\xa4\x61\x1d\xde\x1c\x98\x24\xf1\xe4\x06\x47\x03\xa8\x0f\x32\xc2\x1f\x6a\x51\x38\x19\x49\x4c\x13\x74\x47\x08\x3e\xa4\x4e\x0b\xd5\x33\x64\x37\x62\xcf\xbe\x9f\xfd\xff\xad\xd6\x25\xce\xde\xcf\x69\x6e\x52\x4f\x4e\x32\x75\xf4\xd9\xe9\xf8\xe4\x53\xe3\xe5\x75\x26\x6c\x92\x9b\x4f\xff\x3c\xc3\x12\xa2\x1f\xa7\xe5\x59\xf7\xee\x92\x61\x3b\xbd\x6a\x7a\x26\x93\x64\xbe\x85\x99\x20\x14\x05\xc6\xd7\x94\xa9\xa3\x4d\x72\xc7\x9d\x6f\x1a\x62\x9c\x76\xbe\xc9\x6e\xe7\xef\xe5\xc7\x34\x5f\xba\x9f\x80\x98\x3d\xab\x57\xf5\x23\x00\x00\xff\xff\xb0\x3a\x4e\xbc\xa7\x03\x00\x00") + +func testImagesAgnhostNetCommonCommonGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostNetCommonCommonGo, + "test/images/agnhost/net/common/common.go", + ) +} + +func testImagesAgnhostNetCommonCommonGo() (*asset, error) { + bytes, err := testImagesAgnhostNetCommonCommonGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/net/common/common.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostNetMainGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x57\x6d\x6f\xdc\xb8\x11\xfe\x2c\xfe\x8a\x29\x8b\x24\x52\x2c\x4b\x4e\xee\x8a\x3a\x7b\xe7\x03\xf6\x7c\x0e\xe2\x9e\x63\x07\xbb\xce\xa5\x87\x24\xc0\x71\xa5\x59\x2d\x6b\x89\x54\x49\xca\x6b\x23\xf5\x7f\x2f\x86\x94\xd6\x52\xec\xb6\x01\xfa\x69\x57\x7c\x99\x97\x67\x9e\x79\x48\xe6\xcf\xd9\xb1\x6e\x6f\x8d\xac\x36\x0e\x5e\x1e\xbc\xf8\x1e\x2e\x37\x08\xbf\x76\x2b\x34\x0a\x1d\x5a\x98\x77\x6e\xa3\x8d\xcd\x18\x3b\x93\x05\x2a\x8b\x25\x74\xaa\x44\x03\x6e\x83\x30\x6f\x45\xb1\x41\xe8\x67\x52\xf8\x0d\x8d\x95\x5a\xc1\xcb\xec\x00\x62\x5a\xc0\xfb\x29\x9e\xfc\xc0\x6e\x75\x07\x8d\xb8\x05\xa5\x1d\x74\x16\xc1\x6d\xa4\x85\xb5\xac\x11\xf0\xa6\xc0\xd6\x81\x54\x50\xe8\xa6\xad\xa5\x50\x05\xc2\x56\xba\x8d\x77\xd2\x9b\xc8\xd8\xef\xbd\x01\xbd\x72\x42\x2a\x10\x50\xe8\xf6\x16\xf4\x7a\xbc\x0a\x84\x63\x0c\x00\x60\xe3\x5c\x3b\xcb\xf3\xed\x76\x9b\x09\x1f\x65\xa6\x4d\x95\xd7\x61\x95\xcd\xcf\x4e\x8f\x4f\xce\x97\x27\xfb\x2f\xb3\x03\xc6\xde\xab\x1a\xad\x05\x83\xff\xec\xa4\xc1\x12\x56\xb7\x20\xda\xb6\x96\x85\x58\xd5\x08\xb5\xd8\x82\x36\x20\x2a\x83\x58\x82\xd3\x14\xe7\xd6\x48\x27\x55\x95\x82\xd5\x6b\xb7\x15\x06\x59\x29\xad\x33\x72\xd5\xb9\x09\x40\x43\x54\xd2\xc2\x78\x81\x56\x20\x14\xf0\xf9\x12\x4e\x97\x1c\x7e\x9e\x2f\x4f\x97\x29\xfb\x70\x7a\xf9\xe6\xe2\xfd\x25\x7c\x98\x2f\x16\xf3\xf3\xcb\xd3\x93\x25\x5c\x2c\xe0\xf8\xe2\xfc\x97\xd3\xcb\xd3\x8b\xf3\x25\x5c\xbc\x86\xf9\xf9\xef\xf0\xeb\xe9\xf9\x2f\x29\xa0\x74\x1b\x34\x80\x37\xad\xa1\xd8\xb5\x01\x49\xd0\x61\x99\xb1\x25\xe2\xc4\xf9\x5a\x87\x60\x6c\x8b\x85\x5c\xcb\x02\x6a\xa1\xaa\x4e\x54\x08\x95\xbe\x46\xa3\xa4\xaa\xa0\x45\xd3\x48\x4b\xc5\xb3\x20\x54\xc9\x6a\xd9\x48\x27\x9c\xff\x7e\x90\x4e\xc6\x9e\xe7\x8c\xb5\xa2\xb8\x22\x23\x0a\x1d\x63\xb2\x69\xb5\x71\x10\xb3\x88\xaf\x6e\x1d\x5a\xce\x22\x8e\xaa\xd0\xa5\x54\x55\xfe\x0f\xab\x15\x0d\xac\x1b\x47\x3f\x52\xe7\x52\x77\x4e\xd6\xf4\x51\xeb\x8a\x7e\x14\xba\x9c\x4a\x46\xff\xb5\xdf\x4d\x68\xa9\xca\x72\xc6\x22\x5e\x49\xb7\xe9\x56\x59\xa1\x9b\xdc\xb6\xeb\x17\xdf\xe5\x85\x5e\x19\xe1\xa7\xae\x0e\x6d\x26\x75\x7e\xb5\x63\x6c\xee\xd0\xba\x5c\x36\xa2\x42\x9b\x8b\x4a\x6d\xb4\x75\x39\x99\x2f\x74\xd3\x84\x38\xbe\x7d\x8f\x12\x8e\xb3\x84\x31\x77\xdb\x22\x98\x4e\x29\x34\x6f\x45\x0b\x8d\x68\x3f\x86\xf8\x3e\x07\xab\xd9\xc2\xcf\x31\x76\x2d\x0c\x81\x90\xe7\xb0\xae\x45\x65\x77\xd8\xd3\x32\xa1\x4a\xa8\xa5\xc2\x0c\xa8\x42\x9d\x25\xf0\x84\xa9\x2c\xac\xb0\xd6\x5b\x5a\xea\x37\x96\x68\x0b\x23\x5b\x8f\x7d\xc6\xa2\x60\xc7\x3a\xd3\x15\x0e\xbe\xb0\x28\x5a\xa2\xb9\x46\x00\x08\x01\xb0\x28\x0a\xbe\x47\x03\x17\x61\xf3\x6e\xe0\xce\xdb\x0d\xe1\x5b\xe2\xa2\xa0\x0c\x60\x6d\x74\xd3\x8f\x82\x12\x0d\x12\xb7\xfb\x4f\xa9\xac\xa3\x2e\xcc\x58\x34\x6c\x3b\x82\x46\x5c\xe1\x62\xc0\x20\x4e\x76\xb8\xd4\xba\xba\xe8\x5c\xdb\xb9\x51\x94\x2b\xf0\x34\xc8\x7e\xee\xd6\x6b\x34\xec\x8e\xb1\x3c\x87\xe3\xa6\x3c\x47\x47\x01\x74\xb6\x6f\xb3\x80\x35\x1c\x53\x3d\x33\x8f\x5e\xbf\xe8\x08\x9e\xfa\x22\x67\xc7\x01\xb9\x2f\x2c\x7a\x6f\x71\x06\x00\xc4\x15\x9e\xb2\x68\xb9\xd1\xc6\xcd\x80\x1f\x1b\x14\xa4\x54\x5b\x5c\x59\x82\xc6\x50\x33\xf4\x79\x10\xfc\xd7\xc2\x48\xdd\x59\xe2\xe9\x56\x9b\x2b\x62\x3b\x95\xdb\x92\x8d\x33\xad\xaa\x19\xfc\x41\x9a\x67\xbb\xd5\x50\xa4\xad\xac\x6b\xb2\xe0\x2b\xd7\x6f\xf3\x7b\x3c\x32\xd0\x7b\x69\x74\x89\x20\x83\xfa\xf0\xfd\x7d\x3f\xca\x7d\xd9\x29\xc3\x4a\x5e\xa3\x4a\xa9\x97\xfc\x82\x01\x45\x61\x10\x9c\x91\x55\x85\x24\x34\x6e\x63\x74\x57\x6d\xe0\xcd\xe5\xe5\x3b\x2f\x3f\x14\x57\xc6\xd8\xbc\x76\x68\x94\x70\xf2\x1a\xeb\xdb\x74\xe4\x24\x98\x79\xe0\x45\xba\x10\x33\xde\x60\xd1\xb9\xd0\xfd\x7e\x6a\xc0\xa1\x94\x06\x0b\x57\xdf\x66\x70\xae\xfd\xbc\x70\x63\x73\x14\xe5\x34\x05\x0b\x85\x50\xa4\xd4\xab\xc1\x92\x70\x41\x44\x3c\x51\x64\x83\x19\x63\x27\x37\xa2\x69\x6b\xb4\xb3\x20\xb9\x43\x31\x15\x3a\x18\x6c\x83\x12\x6e\xbf\xa8\xb5\xc5\xad\x90\xf4\x4f\xa2\xa2\x59\xdd\x53\xf4\xd9\x17\xbe\xc0\x46\x3b\x9c\x97\xa5\xe1\x33\xfe\xe2\xe5\x5f\xb3\x83\xec\x20\x7b\x31\x7b\xf5\xea\xd5\x2b\x7e\xf7\xec\x31\xd3\x3e\x4e\x98\x1d\x1e\x1e\xbe\x82\xa7\x4f\xa1\xe8\x4c\x0d\xfb\xd7\xb0\xff\x77\x78\x77\xb1\xbc\x84\x5a\x17\xa2\xa6\xe5\x7e\x45\x6e\x3a\x95\x4f\xa3\xe8\x0b\xb8\x5f\x92\xfb\x33\x5a\xfd\x1f\xbd\xff\x91\xb2\x68\x6e\x2a\x3b\x83\xc0\xc6\xb7\xe2\x46\x36\x5d\x73\x4e\x63\xf1\x41\x92\x32\xea\xbe\x19\x40\x23\xa4\x4a\x89\xe6\xeb\x4e\x15\x20\x95\x74\x71\x42\x7d\x50\x63\x25\xea\x45\x5f\xfc\xd9\x11\x70\xce\x22\x22\xe5\x15\x7d\x18\xa1\xaa\x7b\x6a\x50\x6f\x4f\x96\xef\x1d\x01\x07\x0e\x7b\x70\xe5\x5b\x38\x34\x46\xf6\x9a\xaa\x13\x27\xd9\xd2\x37\xf7\x6f\xc2\xc4\x4f\x7d\xc1\x32\xaf\x0b\x29\xf0\x50\xc5\x14\x38\x11\x3c\xe2\x94\x1a\x9d\x10\x54\x63\xaf\xd1\x4e\xc3\x4a\x2a\x7f\x92\xc5\x98\x55\x19\xdc\x67\x7d\x78\x70\x78\x90\x90\x3c\x39\xe7\xdb\x84\x4e\x68\x4f\x2c\xbe\xc7\xa2\x28\xe2\xdf\xd6\x13\x7d\xe5\x1f\xa7\x7a\x6f\x69\xca\x78\x9e\xfc\xef\xf4\x02\x2a\x29\xf0\x9e\xb4\x3e\x41\xe0\xbd\xf8\x39\xbd\x23\x7f\x2c\xae\x85\xac\xe9\xe8\x9e\xf1\xbd\x31\xa0\x7b\x3c\xf9\x16\x47\xbd\x7a\xa6\xc0\x7b\x92\x0e\xae\xfe\xb6\xbc\x38\x87\x81\xb8\x4e\x7b\x24\x82\x69\x9e\xec\x4a\x4f\x44\x88\x8b\xa6\x84\xe7\x13\xf9\x4a\x83\xd2\x7f\xfc\x1c\x34\xd9\x73\x43\xae\x61\x9c\x1a\x1c\x11\x3d\x88\xd0\xa3\x7a\xf6\x83\x9e\x1b\xba\xca\x5e\x0b\x27\xea\x75\xcc\xdf\x76\xd6\x81\x45\x37\x5c\x03\x76\xed\xa6\xcd\xd0\x1f\x29\x58\x44\xd8\xdf\xdf\x60\xdd\x52\xda\x77\x8c\x79\x13\x4b\x74\x21\x75\x6f\x2f\x80\x00\xff\x22\x11\xcf\xce\x2c\x49\x2a\x5d\xc9\x12\x36\x0a\xef\xeb\x40\xb4\x17\xfb\x14\xd0\x18\x62\x71\x8f\x7b\x48\x22\x9e\x16\x6b\x82\x68\xc2\x22\x32\x4a\xdb\x8e\x8e\x40\xc9\xda\x5b\x8b\xd6\x8d\xcb\xde\x19\xa9\x5c\xcc\x83\xe5\xd9\x27\xf5\x49\x11\xef\xc3\x67\xb6\xea\x6b\x14\x27\x64\x21\xd2\x36\x3b\xb9\x91\x2e\x3e\xa0\xaf\x3b\xc0\xda\x62\x30\x44\x29\x78\x43\xeb\x98\x9f\x18\xa3\xcd\x0c\x9e\x5c\x73\x1f\x67\xf2\xff\x38\x7a\xe1\x1d\xb1\xb1\x2f\xba\xaa\x64\x6f\x84\x2a\x6b\x7c\xdd\xa9\x22\xe6\x5e\x65\x78\x0a\x1b\x3f\xb6\xe8\xd4\x22\x70\x3b\x61\xd3\xb8\x08\x18\x6a\xad\xe1\xa4\x52\x21\xc4\x11\xd0\xc9\xb8\xd4\xb1\x77\x74\x26\xad\x43\x35\x57\xa5\x5f\x10\x4f\xda\x5d\xc9\x3a\xf1\xd5\xbd\x27\xe0\xe4\x94\x1e\xdd\x5a\xbe\x8c\xae\x01\xe1\xc0\x97\x16\x7e\x6c\xaf\xaa\x9f\xf6\x7f\xa4\xa2\xff\xb4\xff\xe3\x70\x45\xfc\x89\x0e\x7e\x74\x9d\x51\xf7\xfb\x29\x6f\xfe\x98\x9c\xf3\x19\xa9\x7c\x76\x8e\xdb\x63\x9a\xf9\x20\xa4\x3b\xf6\x13\x71\x92\x3e\xdc\x13\x32\x7f\x64\x8f\x4f\xc8\xf8\x3d\xf7\xd9\x4c\xc9\xe5\x83\x0e\x1d\x94\x82\x11\xdb\xe9\x45\x27\x81\x78\x77\x15\xf1\x55\xd7\xc6\xf7\x99\xe9\xc9\xa8\x83\xe8\x06\x31\xf8\x48\xb6\x3e\x7b\x96\xeb\xab\x40\xeb\xde\xd8\x6e\x0d\x45\xd7\x7b\x88\x47\xdc\x9d\x1d\x01\x5d\x68\xb3\xf7\xaa\x11\xc6\x6e\x44\x1d\x7f\xfc\x4c\x97\x9d\xf8\x3e\xa0\x24\x1d\x74\x22\xf9\xc1\xef\xf9\xd3\x88\xef\x3d\xae\xbb\x50\xbf\xdc\xa5\x40\xd4\xf4\x94\x5d\xc7\xfc\x54\x5d\x8b\x5a\x96\x3b\xa5\x21\xd9\x99\x32\x99\x5a\x79\xc2\xaa\xde\xed\x0c\x9e\xec\xd1\xb2\xc1\x37\xdb\x35\x2b\x05\x3d\x72\x18\xb6\x57\x68\xfa\x71\xca\x34\x7e\x3a\x74\x41\x0a\xfc\xcf\xc0\xd3\x47\x24\x61\x88\x7d\x50\x80\x1e\xa7\x45\xa7\xe2\x60\x6f\xe4\xdb\x47\xf9\xad\xb9\x06\x43\x33\x78\xf6\xe4\xfa\xd9\x44\xb8\x06\x1f\x49\x7f\x85\xfc\xba\xbf\xfa\x01\xba\xd2\xf6\xa7\x89\xc7\x6b\x90\xe7\xe9\x41\x95\x05\x4e\x7d\x6d\x23\xde\xfa\xd7\x62\xb6\x40\xdb\x6a\x65\xf1\x83\x91\x8e\x52\x31\xf0\xbc\x1f\x0f\xad\xec\xcf\xf3\x11\xea\x0f\x62\xf1\x35\x7a\x6e\x08\xa9\xce\xd4\xef\x84\x71\x9e\x4d\xfd\x4b\x26\x5b\xb6\xb5\x74\xb1\xc9\xde\x2f\xce\xb2\x77\xc2\x6d\x52\xe0\x39\x29\xb3\x5c\x43\x8d\x2a\x1e\xb6\x24\xc4\x96\xef\xee\x65\xc6\x63\x15\x6f\x03\x70\xcb\xb6\x77\x2e\x07\xe4\x7a\xdf\xe1\xee\xde\xf3\x64\x67\x2a\x85\xef\x0f\xbc\x4e\x86\x42\xf4\x45\x09\x0a\x30\x3b\xda\xad\xfb\xf8\x32\x74\x82\xc9\x7e\xd6\xe5\xed\x58\x9d\xa7\x11\xf0\xb7\xf4\x46\x54\xd5\xce\xeb\x4a\x97\xb7\xfc\x51\x27\x34\xb3\x3b\x22\xc2\x73\x2f\x5b\xa0\x28\xe7\x75\x1d\x07\x37\x21\xf3\xaf\xba\xe3\xbf\x64\xec\x1b\x1a\x0c\x0a\x7a\x53\x7a\xcf\xa3\xae\x78\x34\x06\x7a\x4e\xf4\xfc\xdf\x31\x30\x74\xfc\xe8\x04\xfb\xfa\x00\x1b\xd4\x22\x54\x2d\x26\x3f\xc9\xc3\x2e\x2e\xb4\x72\xa8\x42\x7d\x27\x51\xfa\xd8\xc7\x4f\x2b\x0a\xf2\x93\x1a\x1d\x38\x4f\xfc\xcb\x23\x8a\xd0\x50\xbb\x3c\x76\xf2\x4c\x41\x18\x5c\xa5\xf0\x97\x87\x29\x92\xef\xd7\xbd\x6f\x2a\x90\xbe\x9a\xf8\xe2\x7b\x8f\x38\xb8\x63\xff\x0e\x00\x00\xff\xff\xbe\x8b\x61\x8e\xf6\x11\x00\x00") + +func testImagesAgnhostNetMainGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostNetMainGo, + "test/images/agnhost/net/main.go", + ) +} + +func testImagesAgnhostNetMainGo() (*asset, error) { + bytes, err := testImagesAgnhostNetMainGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/net/main.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostNetNatClosewaitGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x57\x6d\x6f\xdb\xc8\x11\xfe\xcc\xfd\x15\x73\x02\x2e\xa0\x0c\x89\x74\xf2\xa1\x28\x92\x4b\x00\x55\xb6\x7b\xea\x19\x52\x60\x29\x35\x0e\x45\x51\xac\xc8\x21\xb9\xf0\x6a\x97\xdd\x5d\x4a\xa7\x26\xfe\xef\xc5\x2c\x49\x99\x94\x64\xc7\x87\xf6\xfc\xc1\x92\xb8\xf3\xf2\xcc\xcb\xce\x33\x8c\x2f\xd8\x54\x97\x7b\x23\xf2\xc2\xc1\xbb\xcb\xb7\x7f\x82\x55\x81\xf0\x4b\xb5\x46\xa3\xd0\xa1\x85\x49\xe5\x0a\x6d\x6c\xc4\xd8\xad\x48\x50\x59\x4c\xa1\x52\x29\x1a\x70\x05\xc2\xa4\xe4\x49\x81\xd0\x9c\x8c\xe0\xef\x68\xac\xd0\x0a\xde\x45\x97\x10\x92\xc0\xa0\x39\x1a\x0c\x3f\xb0\xbd\xae\x60\xc3\xf7\xa0\xb4\x83\xca\x22\xb8\x42\x58\xc8\x84\x44\xc0\xdf\x12\x2c\x1d\x08\x05\x89\xde\x94\x52\x70\x95\x20\xec\x84\x2b\xbc\x93\xc6\x44\xc4\x7e\x6d\x0c\xe8\xb5\xe3\x42\x01\x87\x44\x97\x7b\xd0\x59\x57\x0a\xb8\x63\x0c\x00\xa0\x70\xae\x7c\x1f\xc7\xbb\xdd\x2e\xe2\x1e\x65\xa4\x4d\x1e\xcb\x5a\xca\xc6\xb7\xb3\xe9\xf5\x7c\x79\x3d\x7e\x17\x5d\x32\xf6\x45\x49\xb4\x16\x0c\xfe\xbb\x12\x06\x53\x58\xef\x81\x97\xa5\x14\x09\x5f\x4b\x04\xc9\x77\xa0\x0d\xf0\xdc\x20\xa6\xe0\x34\xe1\xdc\x19\xe1\x84\xca\x47\x60\x75\xe6\x76\xdc\x20\x4b\x85\x75\x46\xac\x2b\xd7\x4b\x50\x8b\x4a\x58\xe8\x0a\x68\x05\x5c\xc1\x60\xb2\x84\xd9\x72\x00\x7f\x99\x2c\x67\xcb\x11\xbb\x9f\xad\x7e\x5e\x7c\x59\xc1\xfd\xe4\xee\x6e\x32\x5f\xcd\xae\x97\xb0\xb8\x83\xe9\x62\x7e\x35\x5b\xcd\x16\xf3\x25\x2c\x6e\x60\x32\xff\x15\x7e\x99\xcd\xaf\x46\x80\xc2\x15\x68\x00\x7f\x2b\x0d\x61\xd7\x06\x04\xa5\x0e\xd3\x88\x2d\x11\x7b\xce\x33\x5d\x83\xb1\x25\x26\x22\x13\x09\x48\xae\xf2\x8a\xe7\x08\xb9\xde\xa2\x51\x42\xe5\x50\xa2\xd9\x08\x4b\xc5\xb3\xc0\x55\xca\xa4\xd8\x08\xc7\x9d\xff\x7d\x12\x4e\xc4\x2e\x62\xc6\x4a\x9e\x3c\x90\x11\x45\x29\x8f\x2f\x58\x22\x05\x2a\x17\x5b\x34\x5b\x34\xb5\x53\xb4\x94\x25\x98\xde\x2e\x96\xd7\xff\xba\x9f\xcc\x56\xe0\xc4\x06\x75\xe5\x20\xd1\x2a\x15\x64\x9e\xb2\x29\x4a\x47\x99\xb6\x30\x9f\xac\x22\xd6\x18\x82\xde\x5f\x6d\x95\x01\x7c\x83\xd3\xbf\x6f\xf4\xfc\xa7\xf1\xd8\x25\x25\x14\x5c\xa5\xb6\xe0\x0f\x38\x1e\x7f\x6a\x9f\xfb\xbf\x4c\xa8\xe6\xdb\xf8\x1b\x14\x5c\x66\xe3\x44\x6a\xca\x8e\xd1\x9b\xef\x98\x87\x06\x91\xb0\x84\xf6\x29\x1a\x9f\x06\xb1\x29\xb5\x71\x10\xb2\x60\x80\xc6\x68\x63\x07\x2c\x18\x08\x4d\xff\xa5\xce\xe9\x43\xa1\xa3\x0f\x0a\x7d\xc0\x58\x30\x78\xf8\xb3\x8d\x84\x8e\x1f\x0e\x97\x2c\xa6\x44\xc5\x62\xc3\x73\xb4\x31\xcf\x55\xa1\xad\x8b\x15\xba\x38\xd1\x9b\x8d\x56\x03\x36\x64\x2c\x8e\x41\x22\x7f\xc0\x74\xaa\x95\xc2\xa4\x4e\x9d\x05\x0e\xb9\xd4\x6b\x2e\x61\xcb\x8d\xf0\xed\xea\x0a\xee\xc0\x16\xba\x92\xa9\xd7\xf0\x85\xe3\x89\x13\x5b\x24\x23\xc9\x93\x3a\xb7\x56\xe4\x0a\x53\x28\xd0\x60\xc4\xe2\x58\x0a\xe5\xde\x8b\x5c\x69\x83\xf0\xe5\xed\xe5\xe5\x25\x08\xe5\x50\x91\x30\x97\x50\xa9\x8a\x6e\x7f\xeb\x88\x6d\xb9\x39\x85\x74\xa1\xd0\x45\xab\xe9\x67\x7a\xe4\x41\x4f\x29\xc9\xf7\x5c\xb8\xa5\x4f\xf1\xa2\xac\x7b\xaa\xd0\x32\xb5\x4d\xda\xe1\x6f\xcb\xc5\x1c\x74\x7d\x12\x31\xb7\x2f\xf1\x39\x35\xeb\x4c\x95\x38\xf8\xca\x82\x38\x86\x49\x9a\xfa\xde\x77\x1a\xd6\x42\xa5\x87\x3e\xa7\x6c\xb2\xe0\x56\x27\x5c\x92\x08\x29\x09\x95\x7b\x95\x55\xd3\x7e\x4e\xc3\x8e\x0b\x07\x3c\x73\x68\xc0\xa2\x4a\xa9\x4f\x49\xf9\x66\x36\x8f\x58\xf0\x59\x5b\x77\x23\x54\x23\xbe\x44\x6a\x57\x2a\xbe\x63\x8f\xac\x06\x98\xf4\x01\x76\x90\x35\x81\xc0\xc5\xf9\x18\xc8\x42\x1c\xc3\x1c\x77\x47\xe7\x60\xd0\x55\x86\xee\x1f\x28\xdc\xc1\x5d\xa5\x14\x9a\x88\x65\x95\x4a\xce\x48\x87\x43\xa8\xbb\x23\xaa\x05\xc9\x73\x6d\x00\xde\x1c\x61\xfb\xfa\xf8\xe4\xb3\x4d\x24\x97\x52\x27\x9c\x06\x3c\xf9\xd2\xbd\xf4\x56\xd4\x0d\xde\x6d\xd8\x14\xe8\xe2\xc8\xe2\xb0\x63\x2a\x1c\xfa\x2e\x31\x19\x4f\xf0\xeb\x63\x17\xc6\xf9\xf8\x0f\x68\xee\x2a\x55\x8f\x25\x7f\x3a\xb6\x22\xc5\x76\x98\x53\x05\xbf\x0b\xe1\xae\x52\xa1\xd4\x79\x4e\x87\x52\xe7\xd1\xad\xff\x3e\x02\xc3\x0f\x51\x76\x80\x0d\xc1\xdf\x4e\xc2\x27\xb2\x36\xe0\x11\xe8\x07\x78\xff\xb1\xa3\x12\x85\xcf\x94\x6d\xf8\x81\x64\xbf\xb2\x20\xa8\x01\x45\x6d\xce\x3e\xb6\xc6\x58\xf0\x08\x28\x2d\x7a\xa1\x26\x07\xf5\x44\x88\xe6\xb8\x0b\x07\x42\x6d\xb9\x14\x29\x50\xfb\x0c\x86\x2c\x78\x64\x2c\xa8\xf1\x47\x9f\x8d\x50\x2e\x0b\x07\x94\x92\x1f\xb7\x83\x11\xf4\x7d\x0c\x19\x0b\x78\x9a\x9a\x11\xd9\x23\xbc\x74\xc9\xee\xd0\x6a\xb9\xc5\xd5\xf4\x33\x35\x79\x38\x70\x49\x79\xa2\x18\x1d\x2e\xc1\xd0\x87\x4d\xea\x3f\x7c\x04\x25\xe4\x11\xc8\x06\x8d\xb0\x0e\x15\xf6\xfd\xdc\xfa\x87\xab\xe9\xe7\xd6\x05\x7f\x9d\xb9\x20\xc5\x0c\x0d\xb4\x36\x23\x9f\xd6\x70\x78\x1a\x74\xd3\xfd\xb5\x20\x5d\x43\xdd\x24\xa1\x76\xc4\x02\x1a\x59\x07\x48\x07\x7b\x93\x84\x96\x06\xc2\xf5\x7a\x30\x64\xe9\x79\x20\xd3\x7a\xca\x37\x13\x12\xd3\x01\xc9\xc4\x31\x2c\x51\xa5\x2d\x05\x74\x88\xe3\x66\x36\x07\xab\x3b\xdc\xa0\xf4\xae\xcf\x0f\x11\xdc\x23\x3c\x20\x96\xde\x0c\x35\x76\x23\x3c\xfe\xd4\x8e\xbe\x52\x94\x08\xba\x44\x45\x23\x69\x8b\x46\x64\x7b\xd8\x15\xe8\xb9\x5d\x1b\xbf\x2b\x91\xde\x7c\xb2\xf2\x36\x52\xa3\xcb\x92\x16\x88\xca\x74\x26\x79\x74\x48\xc0\xfb\x8f\x9d\x18\xef\x8d\x70\x18\x0e\x3f\x7c\xb7\xec\x67\xeb\x61\x09\xe8\xcd\x6c\x3e\xf2\x93\x92\xea\xf2\xe3\x16\x6c\x3d\x09\x07\xa3\x93\x7b\x10\x9d\x1d\x99\x94\xc1\x9f\xc6\xc4\x7c\xd1\x84\x46\x6d\xe8\xbf\x5e\x55\xc6\xaf\x16\xe1\xab\x4c\xc0\x85\xdf\x1a\xa2\xfa\xf7\x99\xba\x5d\x69\x85\xbe\x56\x4d\x60\x4a\xc8\x66\xc4\x1c\xae\x72\x5d\xda\x3e\xf9\x34\xb5\x78\x89\x7c\xfa\x6a\x3d\xf2\xb9\xc3\x8d\x76\xe8\xf9\xa5\x19\x5a\x4d\x45\x9d\x6e\x2b\x03\x4e\x47\x2c\xe8\x08\x9e\x12\x51\xcb\x2c\x5a\xc1\x2c\x5e\x3c\xed\xbc\x4d\x62\x58\x70\x86\x81\x48\xfd\xe7\xa7\x36\x6c\x37\xaa\xd0\x69\xc8\xc5\x16\x0f\x03\xd4\x9f\x78\x38\x05\x26\xf5\x1a\x60\x1d\x77\x95\x6d\x00\x7b\x43\x04\xd5\x19\x4e\xe7\x7e\x7b\x40\xe5\xcc\xfe\x45\x02\x24\xad\x5b\xda\x2b\x3a\x9b\x44\x58\xaf\x12\xe4\xec\x78\x1d\xb1\xba\x2b\x58\xd2\x0b\x82\x75\xd6\x5b\xe1\x16\xa4\x56\x39\x7d\x12\xb8\xd2\xe8\xa4\x5e\xc3\x37\x5c\x50\x2d\x02\x72\xd3\xd9\x2d\xd6\x5a\xcb\x53\xfe\x6d\x6e\xed\x4b\xfc\xdb\x2b\xe3\x19\xfe\x6d\x2f\xbe\x41\xcf\x88\x35\xff\x1a\x4f\xab\xa7\xf4\x5b\x0b\xbf\x8a\x7e\x6b\xd1\xff\x81\x7e\x9b\x16\xbd\x38\xb2\xf8\x3b\xe9\xb7\x17\xfe\x09\xfd\xd6\x3e\xa2\xcd\xf7\x5c\xfe\xe1\x74\xdb\x83\xf9\x44\xb7\x0d\xbe\x3f\x94\x6e\xfb\x3e\x7e\x07\xdd\xf6\x15\xa3\xa7\xbb\xfe\x2a\xbe\xed\x11\x1b\x39\xb9\x12\x5c\x76\x98\x56\x09\xf9\x7a\xba\x15\x19\xfc\x70\x04\xe7\xe8\xfe\x90\xd2\x19\x1e\x3c\x97\x99\x69\xcb\x81\x74\xa5\xeb\x61\xe4\x27\xac\xc8\x8e\x43\x3e\x9a\x10\x9f\xe0\xb2\xf1\x23\xf9\x9e\xc2\xea\x0f\xfc\x17\x95\x8f\x26\x3d\xd5\x9e\x70\x2e\xd1\xdd\x21\x4f\xaf\x90\xa7\x52\x28\xac\x29\x64\xae\x77\xe1\x30\x9a\xa4\x69\xe8\x3d\x0d\x9b\x30\xd6\x55\x46\x4e\x37\xfc\x01\xc3\x7f\xfc\x73\xbd\x77\x38\x82\xb7\x23\x78\x3b\x64\x81\x15\xff\xc1\x51\x8f\x24\xc9\x6a\xb8\xae\xb2\x26\xb0\x4e\x7a\xdf\xbc\x69\x7f\x09\x1d\x5d\x2f\x6e\xce\x56\x4f\x64\x40\x36\x49\xea\xf2\xb9\x26\xfc\xab\x76\x90\x72\xc7\x61\x5d\x39\x7a\x57\xaf\x73\x7a\xbd\xb8\x79\xa6\x23\x1b\xee\x2d\xb8\xed\x6c\x1a\x69\x7d\x4f\x0f\x85\x7c\x96\x91\x8f\xb2\xfb\x2c\x23\x9f\x56\xf1\x4c\xa7\x1c\x21\x23\x09\x72\x99\xf4\x96\xa4\xce\xf0\xf7\x2f\x50\x27\xf3\x7f\x48\x81\x06\x27\xaf\x89\x75\x05\xea\x14\xf4\xf6\x03\x16\x04\x2f\x76\xcc\xff\x75\x45\xf8\x6f\x00\x00\x00\xff\xff\x46\x2e\x84\x9e\xfd\x12\x00\x00") + +func testImagesAgnhostNetNatClosewaitGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostNetNatClosewaitGo, + "test/images/agnhost/net/nat/closewait.go", + ) +} + +func testImagesAgnhostNetNatClosewaitGo() (*asset, error) { + bytes, err := testImagesAgnhostNetNatClosewaitGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/net/nat/closewait.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostNetexecNetexecGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7b\x6b\x73\xdb\xb8\xd5\xf0\x67\xf2\x57\x9c\x72\x26\x09\x95\xd2\x94\xec\x6e\xa7\xfb\x6a\xd7\xdd\xf1\xda\x49\xe3\x6e\xea\xf8\xb5\xec\xee\x74\xf2\x64\x5a\x98\x84\x24\x34\x14\xa0\x05\x40\x5f\x9a\xe6\xbf\x3f\x73\x0e\x00\x5e\x74\x8b\x9d\xa4\xf3\xdc\xfa\x61\x37\x32\x79\x70\x70\xee\x37\x80\xc3\xe7\xf1\xb1\x5a\xde\x6b\x31\x9b\x5b\x38\x18\xed\x7f\x03\x97\x73\x0e\x3f\xd5\xd7\x5c\x4b\x6e\xb9\x81\xa3\xda\xce\x95\x36\x79\x1c\xbf\x16\x05\x97\x86\x97\x50\xcb\x92\x6b\xb0\x73\x0e\x47\x4b\x56\xcc\x39\xf8\x37\x19\xfc\x99\x6b\x23\x94\x84\x83\x7c\x04\x29\x02\x24\xfe\x55\x32\xf8\x2e\xbe\x57\x35\x2c\xd8\x3d\x48\x65\xa1\x36\x1c\xec\x5c\x18\x98\x8a\x8a\x03\xbf\x2b\xf8\xd2\x82\x90\x50\xa8\xc5\xb2\x12\x4c\x16\x1c\x6e\x85\x9d\xd3\x26\x1e\x45\x1e\xff\xc5\x23\x50\xd7\x96\x09\x09\x0c\x0a\xb5\xbc\x07\x35\xed\x42\x01\xb3\x71\x0c\x00\x30\xb7\x76\x39\x1e\x0e\x6f\x6f\x6f\x73\x46\x54\xe6\x4a\xcf\x86\x95\x83\x32\xc3\xd7\xa7\xc7\x2f\xce\x26\x2f\xf6\x0e\xf2\x51\x1c\x5f\xc9\x8a\x1b\x03\x9a\xff\x52\x0b\xcd\x4b\xb8\xbe\x07\xb6\x5c\x56\xa2\x60\xd7\x15\x87\x8a\xdd\x82\xd2\xc0\x66\x9a\xf3\x12\xac\x42\x3a\x6f\xb5\xb0\x42\xce\x32\x30\x6a\x6a\x6f\x99\xe6\x71\x29\x8c\xd5\xe2\xba\xb6\x3d\x01\x05\xaa\x84\x81\x2e\x80\x92\xc0\x24\x24\x47\x13\x38\x9d\x24\xf0\xe3\xd1\xe4\x74\x92\xc5\x3f\x9f\x5e\xbe\x7a\x73\x75\x09\x3f\x1f\x5d\x5c\x1c\x9d\x5d\x9e\xbe\x98\xc0\x9b\x0b\x38\x7e\x73\x76\x72\x7a\x79\xfa\xe6\x6c\x02\x6f\x5e\xc2\xd1\xd9\x5f\xe0\xa7\xd3\xb3\x93\x0c\xb8\xb0\x73\xae\x81\xdf\x2d\x35\xd2\xae\x34\x08\x14\x1d\x2f\xf3\x78\xc2\x79\x6f\xf3\xa9\x72\xc4\x98\x25\x2f\xc4\x54\x14\x50\x31\x39\xab\xd9\x8c\xc3\x4c\xdd\x70\x2d\x85\x9c\xc1\x92\xeb\x85\x30\xa8\x3c\x03\x4c\x96\x71\x25\x16\xc2\x32\x4b\x7f\xaf\xb1\x93\xc7\xcf\x87\x71\xbc\x64\xc5\x7b\x44\x82\x76\x72\xc7\x8b\x38\x16\x8b\xa5\xd2\x16\xd2\x38\x4a\x0a\x25\x2d\xbf\xb3\x49\x1c\x25\x5c\x16\xaa\x14\x72\x36\xfc\xbb\x51\x12\x1f\x4c\x17\xf4\x5c\x28\xf7\xff\xa1\x50\xb5\x15\x15\xfe\x51\xa9\x19\xfe\x23\xb9\xf5\xff\x0c\x51\x8b\xe1\x77\xad\x09\x48\x19\xf7\xff\x21\x6e\x8a\x3f\x8d\xd5\x85\x92\x37\xfe\xa7\x90\x33\x02\x30\xf7\xb2\x18\x32\xab\x16\x82\x80\xac\x58\xf0\x24\x8e\xa3\x64\x26\xec\xbc\xbe\xce\x0b\xb5\x18\x0a\x33\x17\x25\xbb\x65\x96\xe9\x7a\x68\x0a\xb7\x53\xe7\xbd\x59\x4e\xf7\x7f\x33\x2c\xd4\xb5\x66\xb8\x14\xa9\x94\xdc\x42\xf2\xfe\x5b\x93\x0b\x35\x64\x4b\xb1\x60\xc5\x5c\x48\xae\xef\x87\xcb\xf7\xb3\x21\x02\x0c\x89\xf8\x41\x1c\xdf\x30\x8d\x92\x40\x06\xce\x51\x2a\x00\x70\x08\xdf\x8e\xbe\x1d\xc5\x51\x5d\x36\x8f\xdc\xb3\xfd\x38\xc2\xed\x5b\xb8\x3d\x7c\x32\xe7\x55\x75\xce\xec\x9c\x9e\x24\xc3\x6b\x21\x87\x66\x9e\xc4\x91\xe1\xfa\x86\xeb\x0b\xce\xca\x7b\x38\x84\xa7\x8e\xc7\x1f\x95\xaa\x3e\x8c\x3e\xc6\x51\xc1\xb5\x7d\x89\x4e\xe5\x96\x25\x71\xb4\xd4\xe2\xe6\x27\x7e\x4f\x0f\xe9\xc9\x20\x8e\x87\x43\x38\x5e\x94\x67\x4e\x73\x68\x9d\xb5\xf1\x76\x3f\x93\x73\x65\x2c\x1c\x23\xd7\x39\x71\xd1\x01\x3c\x84\xa7\x24\x8e\xfc\x58\x2d\x16\x4c\x96\x1f\xe2\xe8\xca\xf0\x31\x00\x24\xde\x0a\x92\x2c\x8e\x26\x73\xa5\xed\x18\x92\x63\xcd\x19\x86\x90\x57\x97\x97\xe7\xe9\x64\x90\xc1\xd5\xc9\x79\x86\xd6\x05\xa9\x5a\xa2\x69\xb1\xaa\xba\x1f\xc0\xe4\xf8\xf2\x1c\x1c\x53\xc6\x79\xfd\x0d\xd3\x42\xd5\x06\xb8\x2c\x97\x4a\x48\x6b\x10\xeb\x6b\x25\x67\x63\xf8\xdb\xc4\x32\x6d\x0d\xb0\x80\xd5\xaf\x44\x97\x9a\x89\x1b\x2e\x81\x6c\xb0\x09\x1e\x53\x55\x55\xea\x16\x2d\xbc\x41\x36\x8e\xe3\x3d\x18\x8e\xe1\x82\xdb\x5a\x4b\x43\x60\xe8\xfa\xdc\xd8\x67\x06\xd0\x50\x8c\x65\x8b\x65\x8e\x50\x45\x25\xb8\xb4\x62\xb9\x0d\xfa\xf4\x1c\x58\x59\xa2\x07\x12\x78\x29\x58\x35\x86\xc0\x37\xf3\x14\xc9\x7a\x71\x8d\x14\x4e\xc3\x42\x83\x51\x04\x11\xb9\xf7\x24\x70\x14\x0b\x91\x5e\x1b\xa4\xb6\x7d\xbb\xd4\xca\xaa\x42\x55\x59\x0c\x04\xa4\x3d\x21\x0c\xfe\x38\x79\x73\xd6\xe1\x54\xf0\xaa\x34\x90\x68\x6e\x96\x0a\x63\x5c\x02\xa9\xa9\x8b\x82\x1b\x33\xad\xab\xb0\x35\x34\xaf\x07\x84\x2d\xe1\x5a\x2b\x8d\xb0\x31\xc0\x94\x89\x8a\x97\x1b\x40\xf3\x86\xfd\xe4\x60\x34\x82\x37\x3f\x25\x60\x2c\xb3\xb5\x81\x42\x95\x1c\x84\x0b\xc1\x15\xa3\x45\x6e\x31\x6d\xcd\x4b\x5e\x22\xdd\xc9\x37\xfb\xbf\x83\x17\x77\x4b\x5e\xb8\x98\x02\x2f\x69\xa7\x04\x57\x0a\x0b\xa5\x28\x31\x2b\x64\x18\xc5\x92\x6f\x46\x23\xf8\x91\x95\x70\xe1\x10\x11\x0c\x93\x4d\x9c\x0f\x6a\x7c\x66\x60\xc9\x34\x5b\x70\xcb\xb5\x89\x01\x6d\x58\xc8\x1b\x56\x89\x32\xa7\x14\xb6\x11\x0e\x98\xe6\xe3\x18\x60\x0f\x12\x14\x7a\x32\x26\x50\x92\xbf\x9d\x33\x34\x9b\xaa\x82\x6b\x0e\xa8\x47\x8c\xa4\x04\x89\x5a\xf1\x90\xa4\xa0\xed\x90\x9e\x77\x0f\x8c\x06\xda\x90\x81\xac\x95\xcc\x32\xd4\xfc\x35\x07\xc3\x25\x22\xd2\xaa\x9e\xcd\xd1\x2d\x72\x38\x9d\x52\x62\xf4\x31\x9a\x97\x19\x0a\x86\x76\xd1\xdc\xd4\x95\xa5\xa4\x46\x59\x6f\x5d\x42\x5d\x5d\x5c\x73\x34\x1f\x67\x24\x2d\x0b\xde\x86\x02\x1b\xfe\x4f\xb8\x9d\x8b\x62\xde\xf0\x42\x31\xe0\x76\xce\x25\x2c\xd8\xfb\x60\x84\x9e\xa7\x1c\x4e\xf8\x94\xd5\x95\x85\x1b\x56\xd5\x7c\x0c\x09\x85\xe6\x9c\xc8\x3a\x2a\x30\x7f\x53\xb2\xa4\xb7\x26\xbc\xce\x20\xa9\x4b\xfa\x87\xc2\xab\xa7\xc6\x6a\xc1\x8d\x27\xa5\xf5\x0d\x72\xbc\xee\x96\x0d\x5d\x4b\xae\xa7\x4a\x2f\x78\xb9\x4e\xc4\x7e\x82\x7e\x97\x0c\x79\x31\x57\x49\xdf\x49\x9d\xf7\x24\x0b\x33\x4b\x20\x75\x10\x3f\x2c\xcc\xec\x10\x7f\xf0\xf2\xaf\xf8\x7c\xe0\xd6\xde\x09\x54\xd9\x71\xa5\x8c\x27\xc0\x87\x94\xc6\xb5\x1c\x2a\x12\x2f\xfa\xcc\x4c\xb3\x82\xa3\x4f\x99\x79\x6d\x4b\x75\x2b\x77\x58\x5c\x1c\x91\xc9\x45\x7b\x90\xe0\x7a\xcf\x35\x6e\xe9\xf0\x85\xdc\xbc\xd4\x0a\x3d\x75\x8d\xc3\x51\x0e\x47\x18\xc1\x30\x2b\x83\x90\x96\xcf\xb8\x86\xb7\xa3\xbd\xfd\x83\xdf\xbd\xcb\x09\x2d\xca\x4d\xd5\xc1\xe8\xd8\x42\xd5\x68\x6d\x4e\x9e\x68\x6d\xb7\x4c\x58\xda\xa6\x50\x52\xf2\xc2\xa5\x74\xab\xa0\x40\x7e\xe1\x9a\x4f\x95\xe6\xc4\x09\x16\x34\x40\xec\xc4\x51\xb4\xa6\x52\x74\x1d\x98\x29\x2c\x1d\xa0\xac\xb5\x2b\x0d\xc8\x6c\x47\x5d\x06\x9c\xd2\x88\x3f\xb1\x58\xf0\x52\x30\xcb\xab\x7b\x12\xa5\xaa\x6d\x1c\x45\x8d\xcc\x88\x78\x24\x6e\x37\xe5\x81\x40\x0c\xfb\x48\x60\x2b\xf3\x8d\x24\xc6\x11\x3c\x98\x4a\xc2\xd9\x20\xec\xd2\xeb\x8c\x6a\xce\x59\x65\xe7\xff\xe8\xd8\x55\x13\xfd\x7c\xc4\xf3\x86\x22\xb0\x76\x64\xe5\x7d\x86\x81\xee\x00\x26\xce\x1d\xcf\x35\x2f\x94\x2c\x45\x37\xe0\xc5\x00\x0a\xeb\xb6\x5b\x61\xb8\xb3\x9a\x16\x45\xa1\xa4\x11\x25\xc7\x02\x14\x23\x01\x61\x0c\x1b\x5d\x9d\x84\x14\x19\x82\xa5\xa7\xfe\x9e\x63\x68\xc1\xf8\x67\x49\xea\xe8\xf2\x44\xbb\x32\x56\xb2\x05\x5f\x71\x0a\x87\xe3\x99\x81\xf0\xbe\x85\x3e\x7b\x30\x34\x55\x26\xc9\x18\x5e\xdc\xf1\xa2\xb6\xbc\xe7\x6e\xf4\xce\x57\x07\x09\xc5\xf3\x62\x51\x92\x03\xd2\x9b\x1f\x8a\x45\x79\x68\xd4\x82\xef\x15\x1e\x86\xd2\x50\x0c\xab\x69\x0d\x0b\x48\x26\x64\x88\x42\x21\xb9\xa9\xda\x2e\x6b\x9b\x40\xea\x97\x3f\x33\xe0\x1e\x75\xb3\x59\xf7\x75\x0c\x40\xcf\x60\xc1\x8d\x61\x33\xbe\x29\x95\x79\x19\xfb\x35\x9d\xcc\xb5\x33\x6f\x49\x65\x83\x38\x9c\x01\xed\x8e\x21\xad\xcb\x8f\xdc\xb2\x7a\x59\x29\x56\x26\x63\x6f\xc7\xc8\x39\x35\x43\x2e\x41\xb8\xb7\x48\x83\x6f\x35\x50\xc1\x42\x12\xaa\xb0\xd6\x24\x58\xde\x94\xae\xf8\xb1\x3e\x91\x61\x8c\xbd\xf8\x44\x89\xd0\x91\xe2\x8a\x94\x2b\xfe\xcc\x00\x6a\x3a\xa0\x74\x6c\x04\x25\x05\xf9\x76\xd6\x61\x6a\x5e\x2a\x8b\x55\x12\xab\x02\xd7\x68\xc7\x4e\xee\xd8\x38\x9e\xfa\x50\xce\x2a\xa3\xbc\xd9\xb2\xae\x45\xfb\xad\x84\x2c\x45\xc1\xb0\x3d\xc2\x77\x6d\xaa\x75\x65\x48\xd9\x14\x4d\x6d\x49\xe7\x35\xe6\x2a\xba\xe4\xa1\x26\x8f\xb0\x98\x04\xe0\xfb\x85\x99\xfd\x7e\x63\xd6\xa0\x37\x08\x17\xea\xbf\xe4\xd3\x05\x60\x1c\x1f\x95\xce\xd9\xb1\xac\xcd\xd0\x44\x52\x34\x27\x25\x2b\x74\xe3\x01\xec\xed\x61\x12\xdc\x23\xc6\x04\xe6\x08\x63\xba\x69\xde\x0b\x46\x76\xeb\x61\x27\x1a\x66\x49\x1a\x59\xec\x25\x41\xea\x72\xb2\x30\xa8\xaa\x20\x06\x60\x66\x25\x58\xe4\xf1\xdf\xb2\x38\x3a\xd2\x33\x33\x06\x57\xb8\xff\x89\xdd\x89\x45\xbd\x38\xc3\x67\xe9\x68\x90\xc5\xd1\x45\x2d\xc7\x00\x0b\x26\x64\x16\x7f\x8c\xe3\x69\x2d\x0b\x10\x52\xd8\x74\x00\x1f\xe2\xa8\x2d\xfe\xf3\x97\x15\x9b\x99\x74\x90\x9f\x4a\xfb\x67\xa6\xd3\xa7\xa1\xb5\xc9\x5c\xb2\x27\xc6\x92\x8c\x7a\x9c\x0c\x12\xaa\x7e\x5e\x0b\x63\xb9\x04\x84\x4a\x06\x1b\x91\x4d\xa8\x63\x23\x7c\xa1\x73\xc9\x20\xb1\x95\xd9\xc3\x3f\xf7\xd0\x22\xb1\x7c\xc0\x06\x20\x4a\xa8\x85\xe9\xd9\x1e\xdc\xfd\x76\xf4\xff\x00\x41\xb1\xb1\x65\xd6\x25\x54\xdc\x7b\x92\x43\x7a\x7c\x44\xaf\x32\x5f\x42\x66\xb8\x16\x81\x24\x59\x19\x9b\x5a\x34\x55\x27\x68\x84\x1b\x7c\x9a\xc6\x4e\x2f\xe5\xc9\xc4\x27\xcc\xf2\xbd\xf7\xfc\xfe\x81\xd4\xfa\x15\xf0\x9e\xdf\xc3\x82\x59\xec\x20\x67\xb0\xb7\xd7\xe7\x79\x33\x25\x41\xf4\xbe\x83\x74\xe5\x55\x47\xf0\xfb\x19\x24\xa8\xfd\x4f\xcb\x3d\x60\x0a\x7d\xa7\x2f\xd1\x02\xae\x3d\xc4\x44\x86\xd8\x47\xf5\x91\x5a\xc7\xb6\xe5\xc4\x9a\xd1\x00\x06\xa3\xa1\xb1\x98\xa7\xd5\x92\xfb\xac\xeb\x87\x1c\x42\xda\xdf\x1c\xa0\xb9\x1a\xb1\xa8\x2b\xe4\x9b\x49\x8f\x00\xae\x95\xaa\x38\x93\x79\x6c\xef\x97\xbc\x8b\xd5\x58\x5d\x17\x16\xed\xef\xc6\x21\xf0\x1b\x1b\x6e\xf1\x3f\xe3\xe3\x85\xc7\xdc\xfa\x6d\x83\x90\xac\x38\x65\xf0\xbc\x45\x8a\x9d\xa2\x4d\xa9\x52\x20\x38\x32\x6f\x31\x75\xb5\x03\xfe\x8e\x1c\x6c\x3e\x41\x46\x4e\x11\x79\xfa\x94\xe5\x37\x19\xec\x0f\xe2\x28\x72\xf9\x29\x8e\x3e\xc6\x5b\xe1\x46\x41\x3e\x33\x6e\x9b\x7c\x66\x75\xdd\x34\x48\x8e\xe2\xc3\x43\xd8\xdf\x4c\xe0\x8c\xa3\xd7\x21\x71\x48\x8f\xc3\xe0\xc5\x92\xbf\x56\xac\x6c\x37\x1b\x38\x2c\xc1\x5f\xd1\x7b\xd3\x62\x51\xc2\xf3\x5e\x7b\x9e\x01\xd3\x33\x03\x6f\xdf\xb9\xb9\x08\x71\x8c\x79\xe8\x78\x0e\xe3\x43\x2c\xf2\x79\x5a\xcc\x99\x6c\x4a\x20\xdf\x50\x0c\xe2\x88\x95\xe5\x85\xc2\xdc\x9e\x3a\xf8\x41\x1c\x47\x33\x1f\xbc\xaf\x4e\xce\x27\xe4\x34\xa9\x37\xc3\x01\xc9\xb1\x99\x60\xfc\xea\x10\xf6\xf6\x49\xa0\x61\x05\x1a\x92\x5f\x12\xa0\x06\x28\xc9\x30\xcb\x40\x6a\x28\x9c\xe4\x0e\xea\xc3\x51\x59\xea\x31\x4c\x17\x36\x9f\x2c\xb5\x90\x76\x9a\x26\xe3\x27\x65\x92\x41\x88\x39\x83\x8f\xb4\x67\xc5\x65\x1a\xc2\xc6\x00\x7e\x0f\x23\xda\xd6\xed\xe9\xf7\xa3\x7f\x32\x70\x6c\x64\x80\xe2\x4a\x07\xbe\x26\xf8\xe0\xb5\x14\xa2\xa5\xb3\xf5\x23\x59\xd2\xe2\xcb\xd7\x93\xb4\x8d\x49\x1d\xcf\x1f\xc0\x47\x24\x1f\x78\x65\xf8\x27\x37\xdc\x88\x9a\xb8\x0f\xca\x5b\x95\x35\x6c\xd4\x09\x6e\x44\x22\x7a\xc5\x64\x59\xf1\x97\xc8\x47\x32\x4c\x32\xd0\x4a\x59\xf7\x4c\x0f\x36\x81\x34\x29\x2c\x03\xf7\xf3\xf4\x7c\x17\x38\x75\x52\x19\xe0\x3f\x3b\xc1\xb0\x69\xf2\xe2\xbc\x25\xb5\xe4\x17\x7e\x5c\xf0\xb3\x16\x16\x25\xa0\xf9\x2f\xf0\xdc\xbf\x09\x3c\x90\x58\x3c\xde\xf4\x96\x60\x82\xa8\x9c\x54\xd7\x77\x6a\xd2\x7a\xd6\x64\xf0\x5d\x84\xb9\xe2\x34\x03\xfa\x77\x17\xa0\xaf\xbf\x32\x5f\x6a\xed\x02\xc5\x26\x3f\xc9\xa8\xd7\xdf\x05\x16\xfa\x85\x0c\xfc\xaf\x16\x78\x38\x04\x57\xa9\xcd\xdd\x23\xb3\x8d\xd3\xb3\x96\xd3\xb3\x4f\x72\xea\xeb\xce\xac\x31\x96\x06\x3c\xd8\xd6\xba\x65\x7a\x95\x4c\x7a\x66\xba\xd1\xe4\x32\x98\xca\x9e\xbf\x90\x0d\xce\x54\x78\xf6\x81\xa2\x22\xfa\xee\xf7\x7b\x0e\x4d\x1c\x45\x85\xbd\xcb\xa0\x60\xb2\xe0\xd5\x4b\x89\xef\xfc\x24\x38\xff\x59\xd8\xf9\xa5\x6b\x55\xd3\xf0\xec\x47\x56\xbc\x9f\x69\x55\xcb\x32\x1d\xa0\x2d\xe4\xbe\x97\xc5\x78\x5b\xf2\x29\xa6\x65\x8f\x29\xc5\x47\x5c\x53\xa4\xf0\x1e\x35\xf1\xd4\xa6\x85\xbd\xc3\xb7\x95\x9a\xe5\xe7\x3e\x58\xfc\x61\xb5\x43\x77\x07\x0b\x1c\xd3\x3e\x56\xc3\x63\x78\x72\x83\x46\xae\x51\xb2\x91\x32\xf9\x8b\x3b\x61\x53\xcd\x73\x2c\xd0\xd1\x39\x53\x0c\x78\x62\x0a\x7e\xcb\xa9\x4c\x07\xdf\xd1\x1f\xbf\x3a\x04\x29\x28\x3c\x87\xd7\x87\x87\xce\xfc\x5f\x68\xed\x84\x4a\x4d\x40\x49\x20\xa8\x77\xea\x62\x6b\x69\x45\xe5\x12\x95\xd2\xaa\xb6\x42\x72\x28\x58\x55\x19\x08\x9b\x23\x21\x91\xe1\x15\xc7\xbc\xf7\x31\x8e\x30\xd1\x10\x4f\x2f\x99\x65\x55\xea\x48\x6d\x83\x46\xc7\xeb\xb7\xfa\xdf\x9a\xf7\xc5\x7d\x21\xbd\xb8\x84\x21\x96\x07\x18\x67\x5f\xfa\x38\x7b\x9b\x41\x72\xf6\xe6\x67\x2f\x20\xd4\x47\x7e\xa6\x6e\xd3\x41\x6b\x52\x9d\xc8\xf0\x45\x3b\x37\x03\x99\x27\x06\xa3\x58\xfe\x52\xe9\xc5\x9f\x31\x17\xa7\x34\xb3\x19\x6c\x20\x6c\x2b\x64\xa0\x6d\x25\xc0\x7d\x11\x7d\x4d\xdc\x5c\x27\x44\xe7\x17\x7c\xa1\x2c\xc7\x34\x45\x9b\x53\xfd\xb2\xe2\x3e\x9d\x22\x86\xda\x3e\x1a\xdf\xd9\x38\xf2\x36\xee\x64\x7b\xe2\x67\x14\xad\x74\xbb\xf1\xf1\x41\xd4\xf7\x7c\xf8\xfb\xbd\x8d\x89\x03\x6d\xd0\x55\xb1\x68\xcd\x3d\x09\xd2\x04\x66\xd0\x90\xb5\x05\x2a\x0c\x99\x06\x8e\x99\x2d\x50\x34\xe1\x1a\x6c\xd2\xf5\x9d\xb0\x3f\xe0\xdb\xc3\x27\xe6\xa9\xc7\x85\x3f\x71\x73\xa7\xff\x16\xab\xb3\xba\x86\x94\x0c\x5a\xe2\x5b\x32\xb3\xe0\x99\x24\xc5\x73\xa6\x0d\x0f\xa2\x4c\x7b\xcb\x07\x8d\x1b\x7b\xcf\x7d\xfa\xb4\x8f\x1f\x9f\x27\x09\x79\xeb\xaa\xb9\x31\x3d\xab\x17\x5c\x5a\x78\xe6\x57\x3c\x83\x45\x6d\x2c\xb6\xe7\x0c\x68\xd4\xbc\x3a\x6a\x02\xa5\x81\x2f\x96\xf6\x3e\x83\x99\xb2\xf0\xe4\x97\xff\x90\xc9\x0a\x3f\x2b\xb5\x24\x32\xb7\x8b\x99\x1e\xf3\x6b\x9c\x74\xf4\xfa\x10\x36\x10\xfc\x33\x79\xe8\xd1\xd1\x65\x00\x15\xd7\x30\xe0\x8f\xe2\xf2\x23\xab\x44\xda\xaa\x74\x13\xe9\x1d\x33\x7a\x08\xe9\x08\xde\x21\x7d\x6d\x16\xba\x99\xea\x1e\x09\x5d\xaa\xbb\x16\xfa\xb3\x1b\x33\xcf\x84\xec\xcc\x02\x25\x3c\x31\x19\xb0\x30\x69\x78\x62\xb6\x8e\x50\x33\x0c\xeb\xb2\x33\xf7\xa4\x71\x0b\x55\xab\x4e\xb9\x8d\xc9\xfa\xe4\x42\x5a\x9e\x54\x9c\x2f\x49\xbb\x4e\x38\x21\x2a\x1c\x1e\xfa\x22\x36\xe4\x85\x90\x91\x9a\xca\x7d\xdd\xc5\x3f\x20\xcc\x18\x9c\x26\x3c\xa2\x71\xf8\xd1\xa6\x8c\x95\xea\xe9\x8b\x82\x63\x53\x94\xf5\x82\x23\xea\x6c\xc6\xed\x2b\x5f\xbc\xf8\xac\x31\x1c\xfa\x7a\xc8\x6f\xdc\x9c\x2b\x39\x49\x31\x38\x18\x8d\x36\xcc\x39\xc3\x50\x35\x87\x53\xeb\x47\x47\xf8\xc2\x50\x03\x6a\x80\x79\xa4\x50\xcc\x79\xf1\x3e\x9c\x0e\xd1\xd4\xc1\x23\xb8\xbe\x87\x1b\xa1\x6d\xcd\xf1\xa5\x3b\x16\x71\xa7\x86\xa1\x08\xf3\x6d\x62\xbf\x58\xfb\x32\xb1\xf8\x0a\xd0\x77\x44\xed\x41\x6d\xee\x5a\x3b\x54\xec\x6d\x4e\x28\x5f\x71\x56\x72\x9d\x1e\x8c\x46\xab\x11\xa1\xf7\xde\x15\x6b\x34\x50\xee\xce\x93\xdd\x1c\xb2\x53\xe7\xf5\x0b\xc0\x2f\x62\xa2\xa9\x2b\x07\x71\x63\x85\xa3\x76\xab\x4e\x15\xfc\x98\x6d\xdc\x88\xbe\x89\x14\xb5\xae\x5c\xa4\x4b\x75\x7e\x75\xf1\x3a\x80\x5e\x5d\x9c\xa2\xd5\xac\x84\x0b\x14\x5b\xa8\xb1\x14\xf5\x0d\xbd\xd6\xb0\xa9\xe5\x5c\x7f\xe8\xc5\xf5\x23\x2b\xdb\x7e\xb6\x23\xe0\x38\xa2\xf3\xbe\xf1\xa1\x3f\x35\xc8\xff\x7f\xcd\xf5\x7d\x3a\xc8\xff\xc0\x6d\xea\x8e\x05\x07\x71\x44\x53\xba\x2d\x30\x4b\x3f\x56\x09\xe7\x54\x5b\xc0\xc2\x69\xe0\x00\xd0\x03\xbc\x4f\xc4\x51\x73\xf8\xb6\x0d\x7b\x38\xab\xc3\x50\xa1\xef\xcf\x99\x66\x8b\x6d\xb0\xee\x24\x6d\x53\xc6\x45\x2d\xfd\x80\x9b\x62\x9a\x0d\x28\xe9\xb7\xd2\xf4\xcc\x53\x47\x09\x19\xb1\xb8\x34\x8c\x2b\xb2\xf6\xc8\xd9\xcd\x1d\xc3\xb8\x33\x83\x40\x0f\x91\x26\xb8\x41\xba\xf6\x9b\x4e\xbc\x79\xdb\x74\xe2\x04\xe4\x74\xbe\x92\x1c\x3a\x98\x3e\x3e\x52\xdd\x6e\xe7\xe6\x88\xad\x77\xf2\xfb\x38\x53\x08\x84\xeb\x60\xa7\x4d\xf4\xdd\xb1\x7d\xd0\x7a\x4b\x40\xef\xdc\xf6\xb1\x34\x38\x73\x3c\xf7\xe6\x26\xb9\xcd\xff\xa8\x84\x7c\xe5\x9f\xa5\x5e\x21\x6e\x62\x72\xc3\x34\x4d\x9b\x09\x0c\x8b\x4f\xf7\x88\xce\xa0\xb5\x6b\xcb\x8c\x2f\x9a\x02\xc4\x00\x9a\x47\xae\x87\x8b\x23\x73\x2b\x6c\x31\x07\x7f\x57\x26\xbf\x54\xaf\xd5\x2d\xd7\x69\x50\x3a\x79\x6b\xc1\x0c\x87\x24\xf1\xa3\xdd\x64\x1c\x47\xad\xdd\x1e\xfa\x87\xd8\xa4\xb9\x9d\x0f\x5d\x50\xb8\xbc\x3c\x8f\xa3\x08\x09\x0c\x2a\x47\x2a\x2e\xb8\x51\xd5\x0d\xbf\x3c\x3e\x47\x7a\xd2\xc4\x16\x4b\x6f\x68\x7e\x0e\xe4\xf6\xaa\xcb\xf5\x6d\xf0\xd9\xea\x2e\x57\x27\x3b\x36\xb9\x3a\xf1\x9b\xb8\x53\xe7\xb5\x4d\xe8\x14\x7a\x75\x17\x7f\xf3\xa7\xbf\xcd\xe4\x78\x8d\x19\x84\x0b\x1b\xe1\x6b\xb7\x13\xad\xee\x6d\x55\xba\x13\xdc\xf1\x6e\x33\xaa\xa5\xa9\x97\xa8\x57\x5e\x36\xfe\x96\x03\x39\x61\xa3\x89\x07\x1b\xf1\xc3\x9d\x27\xdc\x35\x19\x2a\xed\x8e\x58\xc8\x8c\xe9\x70\xf7\x33\x9d\x28\x8e\xdc\x41\x4f\x33\x52\x0c\xe3\x46\x1a\x88\x46\xcd\x25\x92\x2d\xef\xd1\x80\x9b\x82\xc0\xbd\x88\x23\xac\xb5\x04\x2e\x18\x7d\x07\x02\xbe\x07\x72\xf9\xef\x40\xfc\xfa\xd7\x7e\xea\xe0\xe0\x83\x66\x9c\xe6\xd2\x26\x4c\x31\xea\xcb\xa2\x0d\x92\x09\xb4\x1e\x02\x5b\x2e\xb9\x2c\x53\xf7\xf7\xb6\x84\x82\x48\x3a\x73\xbe\x0e\x33\x0d\x82\xe6\x51\xd6\xb0\x31\x70\xdd\xfb\xc7\x38\x72\x07\x6d\x8e\xf3\xe5\x5b\xc7\xdd\xbb\xc0\xff\x87\x6e\x00\xf2\x2b\x9b\xc8\xe9\x56\xbe\xed\xdc\xe6\x79\x07\x87\xed\x8d\x9c\x6e\xf4\x72\x2c\xac\x2f\xf5\x37\x7b\x70\x9d\xfb\x49\x8b\xae\xef\x6d\x27\x0d\xff\xdd\x28\x99\xff\x89\x69\x33\x67\x55\xea\x4f\x52\xe3\xce\x64\x23\xc8\xad\x5f\xe3\x39\xfa\x53\x42\x35\xe8\x8f\x42\x77\x06\x4e\xaf\xe5\x42\xd5\x95\x3b\xc3\xa6\x9b\x30\x5a\xb0\x4a\xfc\x63\x7b\xe4\xec\x9c\xbf\x86\xb2\xa7\x33\x08\x09\x91\x27\xd5\x6d\xdb\x4d\xc6\xd5\x0b\x94\x6b\x61\x10\x89\xb5\x9a\x49\x13\x12\xbd\xbf\xdd\x97\x4f\xb8\xbd\x0c\xcf\xfd\x5d\x0c\xe3\xce\xba\xf2\xe6\xf9\x87\x30\xa9\x3c\xa6\x19\x01\x8d\xb9\xe8\xce\x17\x12\xe2\x9e\xa5\x0d\x72\xef\x03\x8d\xc8\xdb\x75\x94\xc3\xfb\xde\xe9\x2e\xad\x3e\x31\x43\x0a\x04\xc8\x82\x3f\x7d\x72\x03\x32\xe7\x7e\x2e\xc6\x70\x0d\xcd\x1e\x39\xcd\x9c\x4e\xcb\x8a\x1f\xb7\x1d\x4a\xba\x51\x93\x6e\x25\x52\x94\xff\xa8\xca\x7b\xb7\x92\xa6\x4f\xd7\xaa\xbc\x6f\xa8\x74\x97\x32\x73\x2c\x5e\x8f\xaa\x2a\x6d\xe0\x07\xbd\xc1\x57\xe3\x56\x61\x8e\xee\x0d\x03\x01\x33\x7c\xdb\x78\x82\x07\x48\x9c\x82\xdb\x81\xcd\x56\xb1\xf9\x12\xb2\x91\xf9\xc0\x3f\xf0\x22\xc7\x1c\xd5\x08\xff\x69\xe7\x0d\x92\xd3\x2c\x1a\xb7\x22\xca\xf0\x79\xe8\x8d\x00\x7e\x0b\xcf\x5d\xbb\x3d\xa1\xa2\x3a\xeb\x12\xe9\x10\xf7\x2c\xec\xea\xe4\x73\x0c\x0c\x95\xd1\x48\x14\x21\x4f\x3c\x2a\x9f\x9f\xa4\xa8\xbc\x92\xd3\xe7\xf8\xda\xa7\xaf\xcd\x05\x70\x47\x82\x68\x33\xe4\x63\x53\xc2\x44\x14\xfa\xcb\x7b\x39\x2e\x1b\x77\xa6\x9b\x18\xa0\x9d\xce\x91\x9a\x56\xdd\xd7\xf5\x14\xa9\x7a\xfb\x0e\xbd\xb8\xa9\x80\xe2\xe8\xaf\x21\xa8\x12\x38\x55\xf4\xe9\x75\x3d\x7d\x2c\x49\x6d\xa7\x4c\x17\x18\xf8\x76\xf2\xa2\xba\x5c\x86\x06\xa2\x93\x23\x90\xac\x0c\x0e\x46\xdf\x7c\x3b\x70\x82\x44\xcf\x44\x73\x3c\xe1\xac\xac\x84\xe4\x69\x3b\x9c\x44\x0d\xa4\x2b\x1a\x1d\xd0\xa8\xaa\x96\xed\x74\x85\x90\x20\x86\xb4\xb3\xe3\x1a\x5f\xff\xfc\x27\xd0\xb2\xb6\x16\xdc\xc2\x25\x36\xa7\xd8\x53\x4e\xb5\x5a\xc0\x0a\xcb\x5d\x66\x9f\x3d\xb9\x79\xd6\x65\xb7\xef\x2a\x1d\x52\xde\x8e\xc6\xb4\xf3\x3b\xef\x3a\x5d\xfb\xc3\x7a\xe3\x4b\x0d\x90\xea\x97\x93\x80\x2c\x14\x2e\x5d\x1b\x24\x88\x50\xda\x3c\xca\x0a\x71\xe5\x7f\x37\x33\x24\x9a\x1e\x61\x87\x08\xbf\xd5\x10\xf7\x47\x07\xdf\x7c\x7d\x43\xec\x6e\xf9\x95\x2c\x71\x95\xeb\x87\x9b\x62\x97\x98\x6d\xb6\xd8\x3d\x55\x7b\x4c\xf7\x5f\x2c\xca\xb5\x69\x71\xef\xaa\x98\xe3\x1e\xc1\x0e\x9b\x69\x20\xfd\xb5\x32\x61\x5e\x10\xe8\xc7\x8d\x63\x8b\x70\xbf\xcc\x0d\x94\x17\x58\x27\x14\x8b\xf2\x4d\x67\x5a\x4c\x57\x20\xfc\x96\x69\x73\xc1\x3e\x83\x64\xaf\xf0\x4b\xf0\xed\xb5\x90\x1c\x97\x2d\x6b\x3a\x96\xd9\x58\xc4\xad\x95\x70\x6e\xa7\xf5\x2a\xcc\xdf\xb5\x7a\xe7\x1a\x60\x94\xb3\x87\xdc\x52\xbb\xf7\xaa\x37\x5a\xb6\xb9\x34\x5d\x13\x82\x23\x78\xec\x5a\x88\xa6\x94\xfb\xdf\x56\xee\xf5\x0e\x6b\xbf\x68\xcc\xe5\xcf\x7f\x5d\x79\x56\x57\xdb\x15\x3c\xa5\xf3\xff\xbf\x36\x42\x74\x06\xf9\x52\x54\x3c\x4d\xc2\x5d\x9d\x4d\x41\x09\x91\x76\xf5\x98\x5c\x49\xba\xac\x6a\x95\xe7\x82\xee\xdb\xe5\xd8\x7a\xee\xd0\x92\xc3\xb3\xa5\xec\xda\xad\xa7\x5e\xeb\xb2\x6b\x7e\x66\x72\x38\xaa\x8c\x82\xba\x21\xb0\x51\x93\xb7\x24\xaf\xac\x15\xa6\x36\x68\xef\x54\x5a\xae\x25\xab\xdc\x51\xe8\x0b\x3f\x72\x68\x0e\x33\x83\x06\x36\x8a\xc2\xdb\xae\x3f\x95\xed\x74\xb8\x2e\x71\x90\xb4\x42\xe2\x88\xa3\xe9\x6a\xad\x7a\xc9\x17\x4b\xa7\x95\xe6\x7e\x64\x06\x49\xab\xe6\x47\xea\x48\x2d\xb9\x74\x37\x32\xb1\x1b\xa5\xe4\xf1\x7f\x5c\x55\x1b\x24\xf2\x29\x95\xb5\x89\x5e\x4c\xa1\xc9\xe9\x42\xe5\xc7\x6a\x79\x9f\x4e\x33\x42\xb7\x7e\xb4\xbe\x53\x31\x3e\x8f\xff\xdb\x77\x3a\x92\xd8\xa6\x87\x38\xba\x22\xfb\xa7\xbb\x88\xe3\x43\x98\xe6\xee\x60\xa6\x7b\xb9\x41\x99\xfc\x78\xbe\x50\x65\xda\x82\x66\x30\xfa\xdd\x68\xf4\x48\xbd\x14\x88\xe4\xdf\x7a\xe9\x49\x62\xab\x7f\xf4\x0e\x20\xb5\xb2\xe1\xc6\x37\x2e\xa7\x25\xad\x32\x9a\x0c\xd5\x2b\x26\xda\xf7\x3b\x8e\x8c\xdc\x97\x68\xe5\xee\x3a\xa0\xd1\xc6\xe3\x0e\x5d\xfe\xf5\x02\xee\x88\x6b\xa7\x51\x74\x0f\x38\xcf\xbe\xe2\x01\xe7\xd9\xc3\x0f\x38\xb1\xff\x0b\x77\xdf\xdd\x58\xd7\x34\x37\xf2\x11\xd2\x5d\xa8\xa3\x6f\x14\xc2\x1d\x95\xe6\xda\x76\xde\xb9\xaa\xb5\x76\xb7\x12\x84\x74\x14\x3a\xec\x47\xee\xae\x79\x6f\xa8\xb0\x79\xf6\xbd\xe1\xf2\x64\xb8\xae\x39\x88\x23\x66\x0c\xd7\xf6\x4c\x39\xdd\x72\xad\x57\x16\xf8\x2f\x01\xad\x42\xed\x21\x76\x3a\x99\xf5\x37\xdd\x29\xfc\xd3\x8c\x86\xd0\x36\x57\x3a\x07\x81\xca\xb5\xb9\x87\xbb\xfd\xd8\x99\x7c\xf4\xb8\x79\x14\x3d\x6e\x62\x04\x15\x61\xc4\x14\xa3\x74\x8f\x36\x32\xb9\x3e\xfa\x66\x5e\xd6\x52\xb7\xd6\x80\x6e\x98\x3a\xf4\xad\x82\xbe\x3b\xf5\xdf\x26\x38\x3c\x89\xbb\xd7\x47\x2f\xa0\x7f\x35\xdf\x75\x64\x48\xce\x52\xab\x6b\x6e\xf2\xde\x57\xbb\xb9\xe1\x36\xb5\xba\xe6\x0d\x61\x9d\x1b\x75\xbd\x88\xd2\x9e\x86\xbb\x6f\x7b\x70\xcb\x35\x4c\x53\x56\x99\x70\x69\x8d\x26\xe7\x88\x46\x86\xdb\x9e\xab\x16\xd3\x91\x01\xa2\x78\xa9\xd5\x02\xf5\xe2\x7a\xeb\x87\xea\x81\xd1\x27\x2b\xc8\x2c\x92\xd8\xb9\x15\x41\xd7\xb6\x22\xcd\x0b\x2e\x6e\x78\x79\xc9\xef\xac\xbf\x16\xd2\x3b\x6a\x6a\xfe\xd6\x62\x31\x59\xb2\x82\xa7\xc1\xa3\xeb\xe9\xdb\xd1\x58\xbe\x1b\x0c\x7c\x72\xe8\x61\xc2\xce\xb0\xb9\x78\xe0\x32\x40\x23\xad\x4a\xa6\xc9\x84\x3b\x05\xa0\x33\x06\xc7\x6b\x46\xe6\x24\xba\x76\xac\xd0\x11\x03\xc5\x85\x4b\x85\x52\xf0\x63\x88\xbe\x8b\xaf\x48\x92\xf0\x3c\xdc\x5e\x5d\x8e\x0e\x64\xe3\x13\x12\x99\x9b\x5d\xba\x4e\xb5\x87\xbd\x93\xe3\xc4\xb4\x91\xdc\x2b\x66\xce\x35\x9f\x8a\xbb\xb4\x2b\x91\xcc\x7f\xc8\x92\x38\xd3\x89\x96\xf4\x69\x74\x47\xe0\x93\x65\x25\xec\xd9\xea\x1a\x48\x32\x38\x18\x84\xf3\x0c\x84\x4f\x30\x61\x87\x4e\x96\xb0\xd0\x59\xe8\x81\x43\xeb\xc0\x0e\x81\x5e\xbc\xdd\x7f\x87\xcf\x3e\xf6\xa4\x3f\x4d\x93\x17\xc5\x5c\xd1\x4d\x99\x9b\x35\x1e\xe9\x2a\x8e\x9b\x81\xaf\x4b\xf2\x61\x1a\xc1\xd5\x5f\xa8\x08\x92\xd4\x23\xc5\xbf\x66\x7e\xcd\xa5\xc0\x15\xf3\x9b\xb6\xd6\x17\x40\xe0\x9a\x15\xef\x37\xcb\xe2\x73\xa5\xd0\x5b\xd7\x1c\x0c\x7c\x15\x03\x6d\xa8\x7e\xa4\x84\xdc\xe9\x55\x2b\xa5\x76\x00\xb2\x52\x1b\xbd\x97\xea\x56\xfa\x70\xe1\xbe\xb3\x0b\xcb\xdc\xdc\xea\x89\x19\xc3\x93\x9b\x75\xf1\x64\x3d\x25\x34\x47\x6b\xfe\x7b\x90\xc2\x7e\x9d\xbc\xbb\xe1\x0b\x85\x4f\x64\xde\x9d\xa7\xc1\x1b\x92\x6f\x37\x4b\x3e\x3e\xfb\xd2\xa7\x38\x9f\x4e\xbf\x21\x2b\xf6\xa9\x74\xd9\xb7\x37\xf5\xfd\xba\xf9\xb7\x47\xdd\xae\x04\x1c\x56\xed\x4e\xbf\x6e\xd6\xba\x39\xfd\x76\x3e\x8e\xfb\xd7\xe7\xdf\xee\x97\x78\x8f\x4d\xc0\x45\xb7\x06\x6a\xf8\x76\xdf\x7a\x92\x2a\x3e\x2b\xdd\x12\x45\x6b\xf9\xb6\xe7\x30\xfe\xd2\xbd\xec\xdc\x51\x6e\xbe\x61\xa3\x4d\x5b\xb2\x8a\x66\x10\xfd\xb8\xf4\xef\x25\xec\x1c\xd7\x91\xb4\x33\x5c\xfc\x17\xd7\x03\x44\xe1\xa7\x0a\x82\xa2\x3d\x67\xd8\x58\x05\x7c\x71\xda\x7f\x80\x9c\xfe\xe7\xe7\xfd\x3e\x93\x0f\x4b\xfc\xeb\x92\xa7\x6c\xff\x99\xe9\xfd\x51\x62\xfe\x2a\xf9\x7d\x03\xcf\x8f\xe2\x76\x9d\xc0\x2f\xca\xde\x8f\x12\xc0\x23\xd3\xb7\x0f\x3f\x5f\x9c\xbf\x29\x3a\xb6\x49\xa0\x1d\xef\xf7\x7c\xce\x9b\x33\x7d\xf9\xd6\xe6\xf3\x66\x68\xf5\xca\x3b\x57\xba\x39\x7f\x75\x84\x34\xe3\x16\xba\x37\x96\xfd\xb9\x57\x73\x27\xb3\xf9\x12\x6f\x15\x8b\x3b\x4a\xcd\xa0\xe4\x96\x89\x0a\x3a\x9f\x51\xae\xcf\x4a\x9a\x6f\x75\xd0\x29\xe8\xf3\x42\x55\x14\xb5\xd6\xbc\x1c\xa3\x70\x28\x2d\x3a\x3c\xed\x01\xce\xc7\xf8\x3f\x03\x00\x00\xff\xff\xeb\xa4\x00\xb2\x80\x4d\x00\x00") + +func testImagesAgnhostNetexecNetexecGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostNetexecNetexecGo, + "test/images/agnhost/netexec/netexec.go", + ) +} + +func testImagesAgnhostNetexecNetexecGo() (*asset, error) { + bytes, err := testImagesAgnhostNetexecNetexecGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/netexec/netexec.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostNettestNettestGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x5a\xff\x6f\xdb\x46\xb2\xff\x59\xfc\x2b\xe6\xf1\xc1\x09\x99\xca\x94\xdd\xf7\x0a\x14\x4a\x5d\xc0\x67\x27\x8d\x5f\x1d\x3b\x88\x9c\x06\x87\x5c\x71\xb7\x22\x47\xd4\x9e\xc9\x5d\x76\x77\x29\x45\x30\xfc\xbf\x3f\xcc\xec\x92\xa2\x6c\x39\x6d\x7a\xd5\x0f\xb6\x44\xee\xce\xcc\xce\x97\xcf\x7c\x21\x27\x2f\xa2\x33\xdd\x6c\x8c\x2c\x97\x0e\xbe\x3d\x3a\xfe\x5f\xb8\x59\x22\xfc\xdc\xce\xd1\x28\x74\x68\xe1\xb4\x75\x4b\x6d\x6c\x16\x45\x97\x32\x47\x65\xb1\x80\x56\x15\x68\xc0\x2d\x11\x4e\x1b\x91\x2f\x11\xc2\x9d\x31\xfc\x82\xc6\x4a\xad\xe0\xdb\xec\x08\x12\x5a\x10\x87\x5b\x71\xfa\x32\xda\xe8\x16\x6a\xb1\x01\xa5\x1d\xb4\x16\xc1\x2d\xa5\x85\x85\xac\x10\xf0\x73\x8e\x8d\x03\xa9\x20\xd7\x75\x53\x49\xa1\x72\x84\xb5\x74\x4b\x66\x12\x48\x64\xd1\xdf\x03\x01\x3d\x77\x42\x2a\x10\x90\xeb\x66\x03\x7a\x31\x5c\x05\xc2\x45\x11\x00\xc0\xd2\xb9\x66\x3a\x99\xac\xd7\xeb\x4c\xb0\x94\x99\x36\xe5\xa4\xf2\xab\xec\xe4\xf2\xe2\xec\xd5\xd5\xec\xd5\xe1\xb7\xd9\x51\x14\x7d\x50\x15\x5a\x0b\x06\x7f\x6b\xa5\xc1\x02\xe6\x1b\x10\x4d\x53\xc9\x5c\xcc\x2b\x84\x4a\xac\x41\x1b\x10\xa5\x41\x2c\xc0\x69\x92\x73\x6d\xa4\x93\xaa\x1c\x83\xd5\x0b\xb7\x16\x06\xa3\x42\x5a\x67\xe4\xbc\x75\x3b\x0a\xea\xa4\x92\x16\x86\x0b\xb4\x02\xa1\x20\x3e\x9d\xc1\xc5\x2c\x86\xbf\x9d\xce\x2e\x66\xe3\xe8\xe3\xc5\xcd\x9b\xeb\x0f\x37\xf0\xf1\xf4\xfd\xfb\xd3\xab\x9b\x8b\x57\x33\xb8\x7e\x0f\x67\xd7\x57\xe7\x17\x37\x17\xd7\x57\x33\xb8\x7e\x0d\xa7\x57\x7f\x87\x9f\x2f\xae\xce\xc7\x80\xd2\x2d\xd1\x00\x7e\x6e\x0c\xc9\xae\x0d\x48\x52\x1d\x16\x59\x34\x43\xdc\x61\xbe\xd0\x5e\x18\xdb\x60\x2e\x17\x32\x87\x4a\xa8\xb2\x15\x25\x42\xa9\x57\x68\x94\x54\x25\x34\x68\x6a\x69\xc9\x78\x16\x84\x2a\xa2\x4a\xd6\xd2\x09\xc7\xbf\x1f\x1d\x27\x8b\x5e\x4c\xa2\x68\x32\x81\x53\x70\x52\x6d\x60\x8d\x73\xb0\x68\x56\x68\x98\x57\xbe\xc4\xfc\x96\x88\x2a\x74\x6b\x6d\xf8\x6b\xae\x95\xc2\xdc\xc9\x95\x74\x9b\x2c\x9a\x4c\x68\xf7\x47\x59\x55\x50\x48\x51\x81\x6e\x1d\x38\x3d\x26\xce\x74\x22\xcc\xe9\x27\x2c\x51\x18\x58\x18\x5d\x8f\x01\x57\x68\x36\xd0\xe8\x02\xdc\x52\x38\x52\xa7\x80\x1a\xeb\x39\x1a\xd0\x0b\xa2\xc5\xe7\x43\xb3\x92\x39\x42\x23\x2c\xb9\xa9\x54\x7c\x75\x51\x89\x12\x0e\xc3\xbd\x1d\xd6\x2c\x32\x08\x12\x3f\x48\xaf\x15\x94\x72\x85\x0a\x0e\x1b\x6d\x5c\xb7\xf8\x17\x69\xa5\x83\x89\x41\xc1\xe6\xb7\x41\xbd\x79\x6b\x0c\x2a\x07\xd6\x09\x87\x63\xb2\xc0\xe4\xb7\x56\xb2\xe4\x76\xd9\x3a\x28\xf4\x5a\x3d\x20\x41\x4b\x5b\xdb\x11\x21\x39\x27\xa6\x55\x64\x80\xc9\x42\xc8\x0a\x0a\x74\x64\x07\xc5\x8a\xcf\x20\xa9\xa4\x43\x23\xaa\x6a\x33\x06\xe9\x60\x2d\xab\x8a\x88\x19\x74\xad\x51\xa0\x15\x7a\xe7\xd7\x16\x61\xad\x4d\x61\xb3\x34\xb0\x9b\x90\x7f\xb2\xd7\xb5\xd6\xfb\xb3\x66\x6f\x09\x06\x01\x87\xd6\x91\x36\x59\x14\x83\xa5\xb4\x0e\xcd\x03\x1b\x45\x8d\xc8\x6f\xc9\x49\x14\x3a\x5a\x1f\x45\xb2\x26\xad\x40\x12\x8d\xe2\xf9\xc6\xa1\x8d\xa3\x51\x9c\x6b\xe5\xf0\xb3\xa3\xaf\xa8\x72\x5d\xd0\x51\xfe\x6d\xb5\xa2\x0b\x8b\x9a\xaf\x4b\x3d\x91\xba\x75\xb2\xa2\x1f\x95\x2e\xe9\x9f\x42\x17\xfe\x4d\x28\x50\xe9\xbb\xb6\xfe\xef\xc4\xca\x52\x09\x5e\x6c\x37\x2a\xf7\xff\x6d\x2e\x2a\xbe\xe4\x64\x8d\x71\x14\x8d\xe2\x52\xba\x65\x3b\xcf\x72\x5d\x4f\x6c\xb3\x38\xfe\x9f\x49\xae\xe7\x46\xd0\xad\xd5\x31\xc4\xb7\xdf\xdb\x4c\xea\x89\x68\x64\x2d\xf2\xa5\x54\x68\x36\x93\xe6\xb6\xa4\x0b\x76\x52\xa3\x13\x93\xd5\x31\x91\x7b\x6a\x1d\x89\x3b\xb1\xe8\xec\x97\x16\xad\x3c\xda\xc5\xd1\x28\xaf\x24\x2a\x67\xd1\xf5\x9c\xfd\x95\xc3\x52\x4f\x6e\x7b\x2c\x8d\xa3\x91\x41\xeb\xfc\xad\x3d\x2b\xe9\x66\x1c\xa5\x51\xb4\x12\x86\xb4\xcc\xda\xee\x3f\x52\xb9\x68\xd4\x20\x9a\x33\xdd\x2a\xb7\xbd\xd4\x79\xbd\xff\x10\xc6\xa8\x32\x1a\x29\x51\xa3\x6d\x44\xb8\xde\x5d\x2d\xb0\x12\x9b\xd9\xb2\x75\xe4\x9b\xbc\x3d\xe5\x38\x3e\xab\x8b\x2b\x6f\xe5\xa1\xcf\x88\x52\x2d\xb5\x75\x70\x46\x9a\xcd\x58\xaa\xc1\xc2\x13\x78\xc6\x2a\xcf\xce\x74\x5d\x0b\x55\xdc\x45\xa3\x0f\x16\xa7\x00\x10\x07\x8f\x89\xc7\xd1\x68\xb6\xd4\xc6\x4d\x21\x9e\x39\x61\x1c\x45\xed\x9f\x01\x0c\x22\x74\xa9\x55\x39\x85\x7f\xf5\x74\xbe\x92\x04\x85\x36\x05\xad\x0f\xef\xf8\x90\x03\x3c\xce\xa2\xe8\xaf\x02\xa1\x21\x02\x45\x7b\x10\x28\x3e\xec\x30\x88\xb8\x52\x92\x1d\x9c\x80\x22\x1b\x96\x62\xe5\x81\x65\xa1\xab\x4a\xaf\xe9\x04\xa8\x8a\x46\x4b\xe5\xec\x34\x8a\x0e\x21\x66\x08\x8a\xa7\x5f\x06\xa1\x98\x51\x28\x7e\x00\x43\xbc\xdd\xc3\xcf\x96\x40\xfc\x08\x81\xe2\x3f\x00\x41\x01\x7f\xa2\xbd\xf8\xc3\x7c\x18\x7d\xe2\xe9\x7f\x84\x3f\xff\x1a\x47\xa3\x53\x53\xda\x29\x78\x2f\x7b\x2b\x3e\xcb\xba\xad\xaf\xe8\x5a\x72\x94\x8e\xa3\xd1\xfb\x56\x4d\x01\x6a\x21\xd5\x38\xba\x8f\xa2\x45\xab\x72\x90\x4a\xba\x24\x85\xbb\x68\xb4\xf5\xd4\xec\x75\x25\x4a\x9b\xa4\xd9\x85\x72\xbf\x08\x93\x3c\x23\xd3\x8f\x21\x66\x0f\x18\xc3\xf7\x47\xdf\x1f\x8d\x21\x7e\x47\xc1\xa6\x5a\xb6\x26\xab\x87\x73\x83\xcb\xe2\xf4\xcb\xb4\xba\x80\x24\x82\x88\xc6\x12\xc5\x31\xc4\x6f\x5b\xeb\x60\x21\x55\x01\xc2\x41\x85\xc2\x3a\x5f\xef\xd4\x42\x6d\x80\x17\xf6\x69\x99\x95\xe1\x34\xa7\x83\xa7\xd8\xcd\x38\x80\x99\x63\xf0\xa2\x31\xc4\x9d\x3f\x8d\x07\x11\x07\xf1\x2c\xe0\x81\xd3\x9e\xff\x53\x9a\x97\xea\x0f\x30\xeb\x61\x84\x78\x74\xdf\x89\x4b\x81\x0b\xd1\x56\xcc\xf0\xaa\x87\x1a\xf6\x06\x69\x89\x7e\x06\x37\xd7\xe7\xd7\x53\xd8\xa2\x1f\xd8\xa5\x6e\xab\x02\x6a\x71\x1b\x6a\xbf\x42\xda\x9c\x0a\x10\xaa\xb2\x7e\x4f\xcf\x3b\xc8\xc5\xfc\x2b\xb1\x39\xb4\xe1\x42\x3c\x06\xb2\xe1\x55\xdb\x05\xa3\xc5\x5c\x2b\xef\x5e\xbc\x12\xba\x95\xb0\x5e\xa2\x02\x83\x39\xca\x15\x45\xd8\xec\xe2\xa7\x9b\x57\xef\xdf\x12\xfb\x7b\x86\xc2\x19\x05\x12\x38\x23\xf2\x5b\xcb\xe6\x91\xca\xa1\x51\xa2\xf2\x21\x46\xc4\x75\x6b\xa0\x92\xce\x55\xc8\x55\x66\x08\x62\x4a\xf5\x70\xe1\x9e\xdb\x10\x1f\x58\xc0\x0a\xcd\x5c\x38\x59\x03\x9d\x92\x89\xf9\x22\xa2\x0b\xeb\x2c\x72\x9b\x06\x03\x4b\xeb\x4c\x9b\x3b\x72\xdd\xc9\x04\xde\x68\xeb\x48\xdf\x14\x42\x94\x56\x34\x55\xc4\x04\x4c\x8a\x40\x08\xf2\xa5\x50\x25\x16\x87\x87\x20\x89\xa1\xa8\xd6\x62\x63\xc1\x8a\x05\xfa\x80\x12\x45\x16\x8d\x7a\x1a\x01\xfd\x99\x30\x01\xcf\x1c\x2b\xbd\x86\x85\xc4\xaa\xe8\x8b\x5e\x0f\x69\x95\xce\x6f\x89\xe5\x12\xab\x02\xe6\xb8\xd0\x06\x99\x1a\x69\x4a\x9b\xae\xea\xcd\xa2\xd1\x0c\xd5\x20\x35\x85\x4f\x2d\x9a\x4f\x9e\xd7\xaf\x9c\x99\xde\xb3\x96\xb1\xf8\xe2\xa2\x57\xc6\x68\x63\x1f\x50\xfa\xf4\x6b\x97\xb1\x2e\x75\xf9\x88\xcf\xe0\xf6\xcc\xc9\xaa\x3a\xd3\xca\x89\x9c\x24\x7b\xc7\x81\x35\xd7\xba\x8a\xa2\x11\x1f\x86\x4a\x88\xec\x6d\xeb\xf0\x73\x8f\x11\x89\x85\x17\xac\xf2\x14\x0a\xad\xf0\xc1\x6e\x8f\x1e\x36\xa3\xdd\xd9\xa5\xce\x6f\x93\x94\xf2\xe6\x02\x0d\x84\x8b\x1f\x54\x15\x2e\xdb\x6c\x2f\xff\x13\x58\x88\xca\x62\x70\x28\xf6\x8e\x99\x2f\xfc\xbc\x67\x58\x0f\xbc\x14\x3b\x01\x7b\x63\x8f\xdc\x8c\xc0\xd9\x23\x29\x07\x14\x92\x35\xbb\x5c\xf6\x1e\x6d\xa3\x95\xc5\x8f\x84\xb4\x66\x0c\x06\x5e\x84\xeb\xbf\xb5\x68\xdd\x57\x9c\x41\x2e\xa0\x42\x95\xd8\x8c\x4c\x9a\xc2\x8f\x27\xb0\xad\x31\x9e\x3d\x0b\xf7\x3a\x4b\x3e\xb8\x7f\x17\x8d\x46\x8b\xda\x65\xaf\x1b\x23\x95\x5b\x24\xeb\x71\x38\x59\x1a\x8d\x46\x21\x4b\x8c\xee\x99\xc7\x13\xaa\xda\x47\xa1\xd3\xc9\x03\x22\x93\x09\x5c\xea\x72\x01\xb9\x50\xcf\x1d\xcc\x11\xa8\x24\xc4\x02\xd6\x4b\x6a\x21\x97\xba\x62\x2f\xa5\x20\xa3\xa3\x51\x67\x06\xfe\xc8\xad\xa5\x1b\x02\x4a\x6d\xa8\x0c\x55\x18\x8d\x4a\x0d\x36\x23\x6a\x49\x7c\x8e\x79\x25\xc8\x99\x80\xb4\xdf\x1a\xdf\x2e\x1d\xd8\xc9\x81\xf5\x2d\xe8\x41\x01\x96\xbc\x9d\xa2\xef\xa0\x08\xd0\x81\x45\xf7\xbb\x03\xfd\x01\x52\xf6\x08\x3d\x50\xec\xf8\xa1\x26\xc7\x5b\x3d\xa6\xd1\x23\x1d\xb0\x27\xa4\x43\x0f\x7a\x4f\xc0\xc1\x89\xd5\x32\x00\x51\x91\x0d\x5c\x72\x63\xe1\xa1\x69\xbf\xdf\xd0\xbe\xbf\xde\x6b\xd6\x19\xd3\x78\x83\xa2\x40\x93\x30\x11\xef\xa0\xd7\x3f\xa7\xd1\x68\x3e\x06\x34\x06\xa6\x27\x2c\x65\xf6\x56\x18\xbb\x14\xd5\x85\x2a\x50\xb9\xc4\x8e\x21\x26\xd7\xff\x87\x8b\x39\x84\x44\xd3\xa0\x2a\x5e\x19\x93\xa0\x31\x69\x34\xfa\xa7\xdf\x7c\x02\x81\x47\x32\xdf\xb7\xcc\x6b\x86\x17\xbc\xd3\xbe\x6c\xf5\xa5\x93\xa9\x85\xf3\x60\x96\x0c\x55\x94\x32\xd0\xa1\x75\x9c\x13\x18\x8a\x7d\x8f\xb4\x14\xaa\xa8\xe8\x88\x3e\x3b\x39\x71\x8b\x01\x96\xb7\xc4\xb7\xd0\x3c\xd3\xad\xc9\x7b\x44\x1d\x9d\x53\x36\xed\xcb\xeb\x81\x4c\xa4\x69\x92\xa9\x4f\x05\xf3\x4d\x60\x38\xa0\xcd\x8b\xb6\xb4\x1f\xe2\xf5\xc0\xf8\xbc\x9c\x5c\x8f\xaa\x2c\x5f\xf7\xf9\x40\xa2\x12\x93\xbc\x81\x1d\xe0\x09\xe4\xf0\x5a\xfc\x0a\x17\xf0\x36\x37\xd9\xdf\x74\xb1\xc9\xce\x2a\x6d\xd1\x83\xdd\x7f\xee\x18\xd4\x42\xac\x9b\xad\x66\x77\x0d\xcb\xce\x72\x85\xeb\x73\x24\x93\x99\xc4\x4b\x90\x66\xfe\x77\xf2\x6c\xdd\xa4\x1e\xb0\xd6\x4d\x16\x0c\x71\x72\x02\x71\xcc\x28\x32\x24\x44\xd1\xc4\x79\x65\x91\xc4\x07\xab\x29\xfc\xa4\x5d\x67\x7e\x1f\xd3\x4a\x83\x65\x02\xf1\x18\x6c\xd6\x29\x9e\xa8\xdf\x03\x56\x16\x99\x22\xa3\x56\x9f\xc3\x4e\x4e\x40\xc9\x8a\x6f\x8c\x86\x97\x1f\x24\xb4\xbb\xfb\x68\x44\x68\x35\x58\xf3\xa9\x17\xf7\xd7\x6f\xbe\x61\x28\xdb\x77\xe8\x57\xca\x1f\x7a\x9d\x66\xfe\x6b\xf2\xac\x77\x92\xbb\x4e\xc2\xe9\x40\xda\xfb\xb4\x8b\x82\x9e\x18\x88\xa2\xb0\x1c\x3d\xc1\xc7\x2b\x69\xdd\x18\xe4\x82\xaf\x49\xcb\xa3\x37\x25\xab\x0c\x2c\xd4\x54\xa0\xce\x3d\x58\x62\xf1\xd8\x75\x76\xe2\x8d\xf6\x6b\xc3\xce\x11\x88\xfd\xd7\x56\x1d\x36\x0b\x39\xfc\x24\x6c\x4a\xba\x2b\x1c\xc9\xfe\x7b\xc2\xca\x0d\x02\x33\x8e\x07\x2c\xeb\x24\xd5\x25\xd4\x68\xad\x28\xbd\xd4\xbd\x88\x24\xf2\x40\x4c\x8a\x88\xe7\x96\x28\x74\xad\x17\xb7\x24\x85\xd1\x0d\x08\x05\x9a\x0a\xcc\x40\x46\x2e\xb8\x63\xe1\xb0\xe6\x22\x78\x2d\x2d\x12\x81\x39\xe6\xba\x26\x92\xaa\xe4\xb2\x4c\x28\xf8\xee\xe8\xa8\xdb\x67\x1f\xeb\x82\x33\x45\x80\x16\x6f\xea\x31\x08\x53\x5a\xc8\xb2\x8c\xcb\xc3\x85\xc8\xf1\xee\xfe\xab\x2a\x07\x3a\xc1\x40\x61\x97\xba\x1c\x03\xf9\xed\x2c\x64\x01\xcf\xce\xf3\xc9\xb2\x2c\x1d\xa6\xea\x4b\x5d\xa6\xf0\x23\x0b\xed\x0d\xe0\x89\xf1\xff\x4f\xc7\xd3\x5f\xb7\x9a\xde\xa7\xc4\x27\x4c\x3d\x6b\xf3\x1c\xad\x5d\xb4\xd5\x8c\x44\x72\xfa\x01\x1e\x7d\x5d\x4d\xe1\xd3\xde\x30\x6a\xba\x2b\x7b\x02\x86\x43\x82\xee\x7e\xda\x72\xa5\x58\xb9\xef\x47\x21\x93\x09\x5c\xb7\x86\x47\x5e\x94\x77\xb5\xaa\x36\x5d\x3d\x3e\xff\x37\xe6\x04\x24\xfc\x8b\x4f\x14\xa5\xa1\xd2\xa3\xde\x30\xc9\xeb\x02\x5e\xec\x4c\x2a\x82\xf1\xba\x2a\xb2\x73\xeb\x6e\x90\xb2\xc5\x94\x4a\x97\xd9\x6b\xe1\x44\x95\xf8\x7e\xae\x31\x7a\x25\x0b\xec\xa7\x89\xdc\xd9\x73\xe7\x72\x1f\x45\xa3\x65\x90\xbc\x4f\x7e\x7a\x1b\xac\x41\x2b\x0f\x22\xa7\xa7\xbf\x48\x62\x8e\x12\x28\xd1\x51\x71\x04\xcb\x3e\xe0\x0f\x56\x31\x13\x0c\x4c\xe4\x02\x76\x87\x38\x3f\x82\x77\x02\xea\xda\xcf\x96\xc4\x96\x1a\xac\x84\x3a\x04\x12\x60\xc6\xc3\x34\x2a\xa5\xfc\x58\x2d\xbb\xd2\x4e\x2e\x36\x89\x5f\x3e\x86\x30\x5a\xcb\x42\x1f\x44\x0b\x4b\x0d\xa4\x3d\x5f\x08\x8f\x46\x3f\x1c\xfa\xb5\xf4\x9d\x04\x7e\xe7\xfd\x33\x9e\x55\x88\x0d\xc9\xca\x05\x92\x6f\xb7\x42\xcb\x80\x9f\xa5\xa3\xd8\x88\xc7\xbb\xc2\x12\xf5\x91\x93\x35\x66\xbc\x39\xe1\xaf\xe7\xad\xe1\x59\x43\xb2\xbb\x14\x5e\x80\x5f\xc9\xa4\x79\xa7\xb6\xd9\xab\xcf\xd2\x25\x47\xf4\xeb\x3e\x09\x1a\xf1\x86\x9f\x9e\x78\xdb\x93\xc8\x5b\xb4\x1c\x7e\x7a\xf3\x44\xa3\xbd\x6d\xc3\x14\x9c\x69\xe9\x2e\x11\x2d\x75\x97\x61\xaf\x09\x39\x6c\xf2\x8c\xd9\xa4\x64\x66\xca\x69\x6f\xb8\x6a\x78\x4d\x6a\x0a\xf3\x96\xb1\x57\xda\x57\xa4\xd9\x9d\xf3\xdc\xef\x27\xcd\x03\x9f\x71\x48\xef\x7d\x3d\x97\xee\x5b\xea\x87\x2e\x3b\x6b\x99\xfb\xde\xc5\x61\x12\xb4\xb3\xda\xe7\xe9\xd4\x9f\x7e\xeb\xfa\xbc\xf9\x52\x5a\x87\xea\x54\x15\x33\x5a\x99\x0c\x81\x2a\x9e\x1e\x90\x88\x8d\x36\x54\xe5\x2a\x59\xa5\x44\xc2\x62\x85\x54\xd6\x74\x40\xf4\x9a\x47\x21\x55\x05\x56\xce\x2b\x7e\xe0\xe0\x67\x10\x3b\x83\x7b\x0a\xed\x46\xfb\x69\x88\x5b\xa2\x34\x0f\x8a\xb4\x80\xcc\xbb\x96\xf1\xf6\xef\xb0\xec\xce\x17\x19\x49\x34\x1a\x85\xf1\xec\x85\x5a\x68\x78\x11\x7e\x64\xf4\x2b\x1a\x8d\x28\x10\xbb\x0f\xe7\xb6\x68\x44\xa8\x4c\x5e\x79\x23\x6b\x76\xa7\xef\x76\x3d\x90\x31\xe8\x42\x41\x25\x4c\x89\x90\x57\x2d\x8f\xac\xba\x78\xa5\x93\xf5\xc3\x3a\xca\xb4\x8d\x41\xe7\x36\x3c\x47\x54\x56\xae\x30\x0b\xdd\x77\x6b\xc7\xb0\x46\x9f\xb4\xf8\x19\x0b\x95\x6f\x16\xab\x15\x86\xc7\x02\xca\x3f\x1d\x5a\xa1\xa1\x1c\x26\x1c\xd4\xa4\x90\xe3\x23\xb0\x6d\xbe\x64\x22\x7d\x21\xdb\x10\xf6\x06\xe1\x08\xbf\x7a\xe9\x7f\x80\xdd\xc8\xea\x3b\x8d\xc9\xf1\x51\xfa\x62\x70\x28\x0f\xcc\xfd\xbe\x93\x2f\xed\x7b\xa8\x8e\xfb\x88\x43\x59\xb7\x6e\x47\x5b\x6f\xa5\x6a\x1d\xb2\xa0\x33\x59\xcb\x4a\x98\x6a\x43\x27\x56\xe1\xe1\xd9\xbc\xad\x1b\xe8\x36\x5a\x1d\x46\xa9\xce\x17\xcb\xc2\x6a\xc5\xcf\xdc\x64\x50\x34\xd3\x09\xca\xb6\x19\x1f\xb3\xdb\xfb\xe4\x21\x1f\x9f\xb0\xdb\xf2\xe4\xf9\xf6\x1d\x2e\xe4\x36\x8e\x8f\xbd\x73\x82\x28\x1a\xe5\x5a\x2d\x64\xd9\x03\xfe\x76\xba\x9f\x5d\xa8\x33\x2f\xf5\x19\x2f\xf9\x7d\xfc\xff\xe0\x0f\xee\x34\xe4\x06\xc9\xa3\x3d\xed\x97\xde\x3d\x29\x0f\xfc\x43\x0d\x32\x41\x60\x9d\x91\x54\xa8\xdc\x0d\x35\x15\x27\x10\x87\xc7\x96\x74\xba\xc9\x4a\x15\xd9\x76\xfc\x96\x35\x46\x3b\x3d\x6f\x17\xfd\xe3\x8a\x5e\xec\xfe\xe9\x05\xd5\xa1\xaf\x75\x27\xb2\xe7\xf0\x27\x04\x67\x72\x4f\x09\xee\xe3\xc0\x6c\x68\x43\x89\xae\x8f\x7f\x34\x10\x62\x14\x5a\xe5\x64\x05\x3f\x04\xab\xfd\xf8\x92\xdc\xa7\xb5\xc8\x0f\x0f\xbc\x21\xe7\x98\x8b\xd6\x7a\xef\x20\x02\x8d\x2e\xa0\xe6\x47\xd8\x54\xe9\xf0\x20\x5d\xd6\x35\x16\x92\xe4\xe9\x46\x9f\xbb\x8f\xb7\x46\xd4\xe6\x5b\x27\x0c\xbb\x2f\x1b\xff\x4a\xaf\x93\xf4\x65\x70\x04\xa9\x72\x4c\xf8\x7e\x1a\x5c\x4d\xb7\xae\xbb\xc9\xd9\xab\x8f\x1b\x8f\xe6\x93\x09\x9c\xeb\x96\x54\xc1\xcf\x22\xbc\x63\x13\x63\xdf\xfd\x75\x48\xf1\xf8\xbc\x99\xef\x35\x06\x70\xd5\x75\xc0\xc1\x97\xce\xc3\x9c\x74\x93\xa4\x19\xe3\xaf\x09\xcf\xd9\x49\xda\x07\x96\xd9\x49\xd1\x5b\xd3\x90\xa6\x77\xb9\x92\x61\x5e\x52\x7f\x6a\x36\x52\x95\xd9\xc0\x46\xc3\x1e\x68\x37\xe3\x3f\x24\xf0\xdf\xde\xb4\x03\xc9\x39\x4f\xcf\x0d\x8a\xdb\xd0\x06\x0d\xf4\x75\xfc\x28\xa5\x87\x82\xe6\x8f\x39\x57\x68\x78\xb7\xaf\x26\xec\x71\xad\xbf\xda\xa6\xd8\x58\xa2\x54\xa2\xfb\xd8\x3d\x23\x7e\xd5\xa1\x7c\xe2\xad\x93\x7a\xeb\x61\x63\xb3\x4b\x54\xc9\x9e\x09\xd9\x8e\x3e\x3c\x9e\xf8\xd1\xd3\xc1\x6a\x72\xb0\x82\xa5\xb0\x70\xb0\x1a\x64\x8f\xe4\x60\x95\x8e\x61\xbd\x94\xf9\x92\x50\x91\x5f\x4d\xe0\x26\xe5\x60\x05\xc2\x86\x47\x53\x58\x64\xf0\x51\xf0\x38\x96\x07\x56\xbb\x09\x88\xf5\x55\x23\xb4\x4d\xf6\x85\xd1\x14\x36\x36\x1d\x7b\xc9\xa5\x75\xc9\x83\x91\x54\x08\xd5\x73\xed\x87\xf5\x06\x1b\x8a\xee\x82\x1f\x04\x29\xc8\x05\xbf\xc1\x81\x06\x9f\x5b\xb0\xc4\xab\x31\xba\x11\x25\x43\x4f\x98\xb9\x73\xab\x1d\xfc\x9e\x69\x29\x5c\xfb\xba\xdd\x38\x2c\xba\x0a\x20\x34\x80\x5b\xe1\xb9\xfd\xf3\xb6\x94\xa4\xfd\xa3\x97\x20\xe1\x07\x38\xfe\xee\x25\xc8\x6f\xbe\xf9\x1a\xbb\x10\x09\x6c\x18\x99\x85\x2a\x91\x8e\x1a\x1a\xf8\x81\x15\x4e\x9d\xc3\xba\xf1\xb1\xb9\x75\xb3\x03\x2a\x8e\xb0\x61\x7f\x0e\xd7\x66\x52\x95\x15\x26\xd8\x84\xaa\x29\x7d\xec\xe2\x5b\xf7\xe9\x5b\xb0\xbd\x32\xf6\x83\x60\xe7\x9f\x03\x86\xd0\xdc\xea\x40\x58\x10\x7e\xf0\xbf\x80\x59\xe8\x38\x51\x90\x43\xa8\xe1\x9c\xab\x92\xb7\x08\x71\x78\xd5\xe5\x4e\x36\xf7\xd3\x3b\xaa\xc3\xee\x63\x5f\x28\x7d\x49\x3f\x03\xd4\xbf\xe8\x5a\xd8\x94\x58\xda\xf0\xfc\x87\x34\xd5\x0b\xf4\x20\x57\x64\x67\xda\xe0\x2f\xc7\x49\x9a\x6d\xc9\xf6\x5e\x96\x66\x3f\xa1\x4b\xc2\x8b\x01\xd9\xcd\xf5\xf9\x35\xb9\x56\xef\x79\xab\x63\xba\x7f\xdd\xf0\xbb\x25\x77\xf7\x69\xd4\x59\x73\xc0\xfb\xee\x7e\xef\xa0\x61\x60\xb5\x2d\x30\xf8\xd7\x32\x76\x3c\x88\x27\xb8\x14\x5c\x04\x11\x4f\x45\x40\x00\xbb\xf0\x32\x05\x36\x96\xd3\x2a\x6d\xfd\xe7\x18\xac\x1d\x78\x4d\x47\x37\x9b\xb5\x73\x12\xd2\x4f\xad\xfd\x42\xb1\x5d\x67\x6d\x76\x5a\x14\x06\xad\xc5\xe0\x66\x61\x4d\xb3\xb3\xe6\x9d\x36\x81\xc4\x68\x24\x1b\x7e\xec\x38\x3d\xa1\x24\x95\xfd\x9f\x96\x8a\x7a\x17\xba\x96\x88\xec\xe2\xdd\x70\x22\x90\x34\xbc\x33\x65\x8f\x24\x95\x65\x17\xca\xa2\x71\xbb\xb5\x78\x70\x05\xf6\x5e\x4f\xdc\x6f\x08\x53\xa9\xfb\x68\x78\x5e\x5f\x99\xef\x78\x37\x3f\x09\xf7\x6e\x29\xfc\x59\xe0\x39\x3e\xe7\xc2\xdc\x19\xe9\x6b\xd4\x77\xd7\xb3\x1b\x7e\x0d\xca\xd9\xae\x3e\x0f\x6b\x77\xeb\xf3\x2e\x5e\xfa\x91\xc9\xa3\x4a\x7d\xae\x8b\xcd\xde\x51\x71\x98\x7d\xbd\xd3\xd6\x91\xa2\xce\xd1\x3a\x6a\xe6\x7c\xef\xc6\xa3\xb4\x69\xa8\xcc\xde\x6c\xbb\xba\xfb\xdf\x2d\x55\x78\x20\x5c\x7b\x16\xdb\xf2\x64\x58\x55\x19\xb4\x4d\x2f\x11\x77\x3e\x24\x43\x82\xdf\x6c\xfb\xab\x9d\x1a\x8b\x5f\x75\x19\x03\xbf\x0e\x43\xd5\xd3\x7b\x3f\xf7\xa4\x83\xa5\x7b\xc5\x19\xfa\xf0\x47\xc1\xef\x5e\x4d\xa1\x7d\x94\xe5\x86\xfe\x0c\x07\xbf\x75\x62\x3e\xf0\xda\x41\x9d\x4a\x82\xef\x0e\x6c\x87\xea\x3d\x01\xff\x06\x4e\x46\xf2\x9d\x56\x55\xd2\x2f\xff\x33\x42\x72\xc4\x99\xd0\xe1\xf2\xbb\x11\xf0\xfc\x60\xf5\x7c\xca\x7f\x9f\x12\x93\x47\xbf\x66\x3b\xf8\x8e\x46\x5e\x30\x36\xfb\x07\x15\xac\x92\x78\x99\x9f\xad\xcd\x9f\x11\xac\xed\xc8\x6c\xa5\xa3\x64\xba\x47\x44\xef\x92\xde\x4e\x4f\x08\xec\x79\xed\x9d\x8d\xad\xcd\x76\x66\x1c\xdd\x47\xff\x1f\x00\x00\xff\xff\x3a\x5e\xd9\x5a\x44\x29\x00\x00") + +func testImagesAgnhostNettestNettestGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostNettestNettestGo, + "test/images/agnhost/nettest/nettest.go", + ) +} + +func testImagesAgnhostNettestNettestGo() (*asset, error) { + bytes, err := testImagesAgnhostNettestNettestGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/nettest/nettest.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostNoSnatTestMainGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x57\x6d\x6f\xdb\xc8\x11\xfe\xcc\xfd\x15\x13\x02\xce\x91\x29\x4d\x29\x2e\x0e\x0d\x7c\x50\x0b\xc5\x71\x1a\xf5\x5c\xd9\xb5\x9c\x0b\x0e\x69\x70\xb7\x22\x87\xd2\xd4\xe4\x2e\xbd\xbb\x94\x22\xf8\xfc\xdf\x8b\x59\x92\x7a\x71\x1c\x5c\xf2\x21\x91\xb9\x9c\xd7\x67\x9e\x99\x59\x0e\x5e\x88\x33\x5d\x6f\x0c\x2d\x96\x0e\x4e\x86\x2f\xff\x06\x37\x4b\x84\x9f\x9b\x39\x1a\x85\x0e\x2d\x8c\x1b\xb7\xd4\xc6\xa6\x42\x5c\x50\x86\xca\x62\x0e\x8d\xca\xd1\x80\x5b\x22\x8c\x6b\x99\x2d\x11\xba\x37\x09\xfc\x82\xc6\x92\x56\x70\x92\x0e\x21\x62\x81\xb0\x7b\x15\xc6\x3f\x89\x8d\x6e\xa0\x92\x1b\x50\xda\x41\x63\x11\xdc\x92\x2c\x14\x54\x22\xe0\xe7\x0c\x6b\x07\xa4\x20\xd3\x55\x5d\x92\x54\x19\xc2\x9a\xdc\xd2\x3b\xe9\x4c\xa4\xe2\xd7\xce\x80\x9e\x3b\x49\x0a\x24\x64\xba\xde\x80\x2e\xf6\xa5\x40\x3a\x21\x00\x00\x96\xce\xd5\xa7\x83\xc1\x7a\xbd\x4e\xa5\x8f\x32\xd5\x66\x31\x28\x5b\x29\x3b\xb8\x98\x9c\x9d\x4f\x67\xe7\xc7\x27\xe9\x50\x88\xf7\xaa\x44\x6b\xc1\xe0\x5d\x43\x06\x73\x98\x6f\x40\xd6\x75\x49\x99\x9c\x97\x08\xa5\x5c\x83\x36\x20\x17\x06\x31\x07\xa7\x39\xce\xb5\x21\x47\x6a\x91\x80\xd5\x85\x5b\x4b\x83\x22\x27\xeb\x0c\xcd\x1b\x77\x00\x50\x1f\x15\x59\xd8\x17\xd0\x0a\xa4\x82\x70\x3c\x83\xc9\x2c\x84\xd7\xe3\xd9\x64\x96\x88\x0f\x93\x9b\x77\x97\xef\x6f\xe0\xc3\xf8\xfa\x7a\x3c\xbd\x99\x9c\xcf\xe0\xf2\x1a\xce\x2e\xa7\x6f\x26\x37\x93\xcb\xe9\x0c\x2e\xdf\xc2\x78\xfa\x2b\xfc\x3c\x99\xbe\x49\x00\xc9\x2d\xd1\x00\x7e\xae\x0d\xc7\xae\x0d\x10\x43\x87\x79\x2a\x66\x88\x07\xce\x0b\xdd\x06\x63\x6b\xcc\xa8\xa0\x0c\x4a\xa9\x16\x8d\x5c\x20\x2c\xf4\x0a\x8d\x22\xb5\x80\x1a\x4d\x45\x96\x8b\x67\x41\xaa\x5c\x94\x54\x91\x93\xce\x3f\x7f\x91\x4e\x2a\x5e\x0c\x84\xa8\x65\x76\xcb\x46\x94\xb6\x8a\x51\xa7\xaa\xd6\xc6\x41\x24\x82\xb0\xa8\x5c\x28\x82\x90\xf4\x80\x74\xe3\xa8\xe4\x07\x85\xae\xfb\x19\x70\x6d\xf8\x6f\x6d\xf9\x7f\x86\x45\x2d\x6c\x28\x44\x10\x2e\xc8\x2d\x9b\x79\x9a\xe9\x6a\x60\xeb\xe2\xe5\x5f\x07\x99\x9e\x1b\xc9\x52\xb7\xaf\x6c\x4a\x7a\xc0\x04\xd1\x0a\x95\x3b\x9e\x4b\x8b\x83\x52\xb3\x62\x2c\xc4\x60\x00\x67\x55\x3e\xd5\x33\x25\xdd\x0d\x5a\xc7\x88\x37\xb6\xab\xe5\x42\x2d\xb5\x75\x70\xc6\xb6\x52\xb1\x92\xe6\x91\xec\x08\x9e\x7b\x3f\xe9\x99\xae\x2a\xa9\xf2\x7b\x11\xbc\xb7\x78\x0a\x00\xa1\xd2\xc7\x9c\xdd\xb1\x43\xeb\xc2\x44\x04\xb3\xa5\x36\xee\x14\xc2\x33\x83\x92\xdb\x83\x51\x19\x64\x4b\xcc\x6e\x5b\x18\x18\x3c\x18\xac\x97\x5a\x56\x04\xa8\xf2\x5a\x93\x72\x96\x35\x2f\xb4\x5a\x9c\xc2\xef\x33\x34\xab\x4e\xaf\xd0\x65\xa9\xd7\x8c\xfe\x56\x90\x99\xc1\xaf\x16\xb4\x42\x05\x2d\x9e\x39\x16\xb2\x29\x9d\x65\xea\x85\xaf\x86\xaf\x86\x61\x9c\x0a\x71\xbc\xf5\x72\x0c\x06\x5d\x63\x54\x6b\x94\x49\x8c\xd6\xfd\x60\x61\x72\x05\x32\xcf\x99\x1d\x29\x4b\xef\x07\x79\x0c\x77\x0d\x1a\x42\x0b\x10\x52\xdd\x19\x0a\x3d\x51\x50\x66\x4b\xa8\x8d\x5e\x51\x8e\x39\xdb\x88\xc2\x7d\xd5\x7f\x50\x6d\x47\x54\xbf\x4c\xa8\x3e\x09\xe3\x44\x80\x4f\x98\x0a\x90\x65\xd9\xf9\xb7\xb5\x66\xd6\xcd\x75\xce\x0e\x2a\xe9\xb2\xb6\x8f\xc3\xab\xcb\x37\xbf\x4d\xae\x42\x40\xb5\x22\xa3\x55\x85\xca\xc1\x4a\x1a\xe2\x2e\x4b\x80\x1c\xac\xa9\x2c\xbb\x64\x40\xc2\xc9\x70\xb8\xb5\x96\xc0\x8f\xc3\x21\x68\xa6\xfc\x9a\x2c\xa6\xbf\x27\x22\x18\x9b\x85\x3d\x85\xb6\x70\xff\x96\x9f\xa9\x6a\xaa\x29\x9f\x45\xc3\x38\x11\xc1\x75\xa3\x4e\x01\x2a\x49\x2a\x11\x0f\xc2\x17\xdd\xc3\xd9\xb2\x4d\x88\xa2\x51\x19\x90\x22\x17\xc5\x70\x2f\x82\x03\x42\xa4\x6f\x4b\xb9\xb0\x51\x9c\xce\xbc\xf0\x2f\xd2\x44\xcf\x59\x39\x81\x90\x7f\xc2\xa4\xab\x43\x02\x21\x4f\x4b\x6f\xd7\x69\xb0\x5c\xda\x6f\x60\x03\x68\x95\x86\x31\x47\x35\x18\x00\xd5\x30\x02\x27\xcd\x02\x9d\xc7\xbf\x97\xe6\x02\x6d\x58\xc0\x78\x89\x16\x15\xcc\x81\x6a\x3e\xac\x5b\x35\x9e\xa0\xb5\xce\x7f\xb0\xdd\xb1\xda\x1d\x2b\x9d\x63\x7b\x2e\xdc\xa6\x46\xa8\xa4\xbd\xe3\xdc\xd0\x30\x04\x4d\xe6\x38\xeb\xab\x3d\x44\x1e\x3a\x4c\x18\xb2\x28\xab\x72\x78\x71\xd0\x13\x09\x48\xb3\xb0\xf0\xf1\x53\x2b\xee\x41\xab\xe0\x74\x04\xcf\x77\x96\xef\x45\xe0\x4d\x9e\x7a\x48\x12\x11\x3c\x08\x11\x70\x8b\xa6\x13\x45\xee\x42\x33\xa6\x22\xc8\xb1\x40\x03\xfe\xf8\x6d\xd9\xd8\x65\x77\x2e\x02\x2a\x00\x8d\x61\x9b\x55\x7a\xdd\xa8\x28\xfe\xc9\x3f\x3f\x1b\x81\xa2\x92\xfd\x05\x45\xe5\xd2\xb7\xb5\x21\xe5\x8a\x48\xdb\x74\xe6\x72\x34\x26\x81\xf0\x68\xf5\x5f\x15\x26\x2c\x1d\x8b\x20\xd0\x36\x3d\xff\x4c\x2e\x7a\x19\x73\x04\x7d\x5e\x51\x05\x2f\x76\xa1\xc6\xe0\x3d\xb0\x8a\x36\x6c\xbb\x03\x95\xda\x2e\xca\x1a\x63\x98\x9e\x2d\xb8\xdc\x49\x2a\xf7\xe8\x3e\x7a\xdf\xa1\x3c\xb9\x6a\x0d\x34\x5d\x13\xb0\xa5\x5e\x43\x37\xae\xdf\x51\xa8\x56\x22\xa8\xa9\x4e\x40\xdf\x72\x9a\xda\xa6\x17\x5a\xdf\x36\xf5\xb9\x5a\x45\x7d\x7b\xc4\x1e\x88\x67\xfa\xd6\x67\xdc\x75\x03\x27\x7e\xce\xa1\x16\xbd\x1c\x1b\xe3\xee\x81\xb5\xb4\x7e\xa5\xf2\x1e\xe0\x90\x48\xf5\xbe\xfa\x26\x0b\x3d\x0e\x81\xfa\x9a\xe3\xe9\xe5\x9b\xf3\x6f\xf2\xdc\x09\x7e\xb7\x6b\x0f\xce\x4a\x96\x94\x4b\xc7\xab\x49\xba\x03\x84\xa4\x41\x6e\x83\x6e\x58\xa1\x4d\x7d\x1c\x0a\x5d\x7a\x25\x8d\xc5\xc9\x55\x54\x53\x1d\xc3\x68\xc7\x83\x3f\x47\x25\xd3\x8a\x2f\x09\x98\xc3\xd1\x5d\x02\xeb\x25\x65\x4b\xa0\x36\x5a\xa9\xf6\x46\x63\x98\x70\x28\x2d\x40\x8f\x9c\xaa\x3f\x77\xfa\x18\x90\xef\xf0\xaa\x3a\xaf\x1e\x1b\x83\x0b\xf2\xad\xb9\x94\x2a\x2f\xd1\x58\x11\xf0\x8e\x4c\xdf\xf9\xc7\xb7\x8d\xca\xa2\xb0\x9f\xd2\x6c\x97\xff\x88\x9f\x92\xd9\x9b\x3d\x61\x02\xd5\xed\xd9\xee\x39\xf2\xc4\x63\xb7\x71\xeb\xd4\xd6\xa4\xa0\xa9\xdb\xab\x01\x8f\x2e\x23\xfa\x1c\xbd\xe1\x0b\x0e\x49\x8d\x55\xee\x57\x56\x14\x9e\x86\x7f\xa9\xd2\x2b\x3f\x06\x15\x95\x7e\x7e\xf9\xc9\xd2\xc5\x0c\xdc\x65\x91\xd7\xbc\xee\xa6\xf6\x07\x43\x0e\x4d\x02\x2f\xba\x53\xbf\x99\xe2\xae\x1f\xff\xa7\x49\x79\x1c\x6d\x84\xc6\xf0\x64\xf1\xbd\x98\x80\xc5\x1a\xfa\x21\xd3\xfe\x32\xfc\xd6\x19\xeb\x47\x83\xbc\xc5\xa8\x9f\x42\x09\x94\xa8\xbc\x7a\x1c\x8b\x80\xc7\x27\x25\xfd\x0c\x31\x52\x2d\x10\xbc\x69\xae\x1e\xeb\x7f\xa4\x4f\x30\xe2\xa3\xb6\x80\x51\x5b\xf6\x2e\xe7\xee\x1a\x92\xfe\x4b\x93\x8a\x58\xda\x47\xd2\x8f\xe9\xd7\x0d\x95\xb9\x85\xfd\xd9\xde\xe5\x9d\x40\x63\xfd\x0d\x4a\xe7\x2d\xa3\x75\xee\xe9\xac\x8b\xed\x94\x28\x75\xe6\xaf\x52\xdd\x80\x7d\x5c\x15\xe8\x93\x51\xb4\xcb\xbc\x47\xb5\x1d\x4d\xff\xe9\xd6\x75\xbf\x1d\xbe\xdc\xd4\x5c\x5c\xde\x96\x7e\x6d\x76\xfb\xd8\x3f\x3f\xda\xc3\x64\xe1\xaa\xdb\x18\x8f\x96\xea\x16\x09\x5f\xc8\x35\x3c\x59\x4a\x83\x77\x8f\xca\xe9\xd1\xf5\x30\x9f\x8e\xfa\x22\xde\x3f\x88\x20\xa0\xda\x1f\xf5\xb8\xce\xea\x92\x5c\x64\xf0\x2e\x7d\x7f\x7d\x91\x72\x42\x9b\x28\x4e\xff\x89\x2e\x0a\xa9\xb6\x61\x9c\x40\x98\xf0\xb8\xf0\x65\xfc\x2d\x61\x08\xb7\x55\x64\x53\xec\x66\x6f\x45\xf8\x4a\x44\x9c\xc4\x96\xd7\x5f\xac\x8b\x2e\xae\x11\xdf\xe6\x51\xe5\x9e\x28\xdb\x2d\xc1\xa5\xf7\xff\xa8\xd8\xb1\x08\xfe\x0e\xc3\x56\x75\x9d\xfa\x94\xdf\xa1\xcc\xd1\x44\x3f\x0e\x87\x5e\x67\x7f\x01\xad\x79\xf1\x70\x2b\x3f\x62\x32\x27\x02\x61\xec\xe5\x5b\x44\x3b\x47\x87\x26\x4f\xbc\xc9\x87\x8e\x5f\xfe\xcd\xf6\x06\x97\x5e\x63\xa5\x1d\x8e\xf3\xdc\x00\x29\xa7\x0f\x6e\x56\xc9\x17\x12\xad\x5e\x37\x5b\xfa\x65\x43\x2a\xd3\x15\x13\x33\xd3\x4a\x61\xb6\xe3\x5f\x4b\xa1\xef\x2b\xf0\x93\x79\x1f\x86\xd1\x77\x4a\x4f\xd5\xed\xbd\xd2\x77\x05\xdf\xdb\xa5\x41\xbb\xbb\x1f\x3a\xdd\x56\xae\xb1\x68\x3d\xf3\x9d\x86\x9c\x8a\x02\xb9\x65\x88\x17\xc5\x6c\x3a\xbe\x81\xc2\xe8\xaa\xe5\x28\xd4\xda\xf9\x57\x25\x14\x92\xca\xc6\x20\x54\x3a\x47\xdb\x66\xd5\xf3\x61\xdb\x4c\x5f\x6b\xac\xed\xc6\x6f\x4c\xc9\x44\xe2\xd4\x66\x5d\x6a\x61\xf7\xd5\x78\x64\x77\xd3\xd6\xcf\x69\x8e\x7a\x3b\x59\x3c\x3a\x4c\xdc\xc6\x94\xf1\xf6\xda\xf2\xec\x8b\x4d\x81\xc6\xf8\x01\xd3\x5e\x78\xd8\x44\xfa\x5a\xe7\x9b\xf4\xac\xd4\x16\x79\xf8\xcc\x75\xbe\xd9\x5a\x6d\xbf\x94\xd2\x6b\x94\xf9\xb8\x2c\xa3\xad\xf8\xb7\x78\x30\x4f\xf6\x5a\xfb\x14\xb1\x17\xee\xae\xd3\x6e\xc1\x7b\xe1\x6e\xaf\xfd\xf1\x87\xe7\x3e\x1f\xf9\x5d\x37\xfc\xda\xa6\x9b\x28\xbf\xbf\xf7\xef\xa1\x70\x74\xd7\x56\xe7\xe8\x2e\x4c\xe0\xd0\x59\x8b\x4c\x1b\x99\x6f\x63\xaa\xed\xc7\xe1\xa7\xde\x3f\xa7\xc2\xf5\xb9\x6f\xdb\xcf\x5f\x71\x47\xbe\x4a\xf7\xbb\xae\x39\xf0\x7f\x7d\xe8\xf7\xd9\x08\xaa\x0d\x0f\xb2\xf6\x39\x61\xf5\x6a\x03\xd3\x6e\xf6\x1e\xdd\xc1\xb1\xa7\x0f\xb3\xf4\x60\x46\x74\xad\xf8\xdd\x1e\xf8\x03\xfb\x29\x07\xcc\xda\x46\xe1\xe7\x1a\x33\xd7\xea\x46\xb5\xb6\x96\xe6\x65\xc7\x5f\xb7\x34\xba\x59\x2c\x0f\x84\x94\x43\x53\xc8\x0c\xfb\xaf\xbd\xb5\xdc\xb4\x6d\x2e\x55\xcb\x74\xde\x21\xf1\x13\xb1\xef\xb6\x95\xa2\x52\x3c\x88\xff\x07\x00\x00\xff\xff\x96\x06\x59\x4a\xbe\x11\x00\x00") + +func testImagesAgnhostNoSnatTestMainGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostNoSnatTestMainGo, + "test/images/agnhost/no-snat-test/main.go", + ) +} + +func testImagesAgnhostNoSnatTestMainGo() (*asset, error) { + bytes, err := testImagesAgnhostNoSnatTestMainGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/no-snat-test/main.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostNoSnatTestProxyMainGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x56\x71\x4f\xe3\x3e\x12\xfd\x3b\xfe\x14\x73\x91\xe0\x12\x2e\x38\x85\xd5\xea\x4e\x5d\xa1\x53\xb7\x0b\xb7\xd5\x72\x85\x6b\x60\x57\xab\xbb\xd3\xe1\x26\xd3\xc4\x22\xb1\x8d\xed\x50\x2a\xc4\x77\x3f\x8d\x53\xf8\x95\x65\xf9\x2b\xb5\x3d\x79\xf3\xe6\xcd\xf3\xa4\xf9\x01\x9b\x6a\xb3\xb1\xb2\x6e\x3c\x1c\x8f\x8e\xfe\x0a\x57\x0d\xc2\xb7\x7e\x89\x56\xa1\x47\x07\x93\xde\x37\xda\x3a\xce\xd8\xb9\x2c\x51\x39\xac\xa0\x57\x15\x5a\xf0\x0d\xc2\xc4\x88\xb2\x41\xd8\x9e\x64\xf0\x1d\xad\x93\x5a\xc1\x31\x1f\x41\x42\x01\xf1\xf6\x28\x4e\x3f\xb1\x8d\xee\xa1\x13\x1b\x50\xda\x43\xef\x10\x7c\x23\x1d\xac\x64\x8b\x80\x0f\x25\x1a\x0f\x52\x41\xa9\x3b\xd3\x4a\xa1\x4a\x84\xb5\xf4\x4d\x48\xb2\x85\xe0\xec\xe7\x16\x40\x2f\xbd\x90\x0a\x04\x94\xda\x6c\x40\xaf\x76\xa3\x40\x78\xc6\x00\x00\x1a\xef\xcd\x38\xcf\xd7\xeb\x35\x17\x81\x25\xd7\xb6\xce\xdb\x21\xca\xe5\xe7\xb3\xe9\xe9\xbc\x38\x3d\x3c\xe6\x23\xc6\xae\x55\x8b\xce\x81\xc5\xbb\x5e\x5a\xac\x60\xb9\x01\x61\x4c\x2b\x4b\xb1\x6c\x11\x5a\xb1\x06\x6d\x41\xd4\x16\xb1\x02\xaf\x89\xe7\xda\x4a\x2f\x55\x9d\x81\xd3\x2b\xbf\x16\x16\x59\x25\x9d\xb7\x72\xd9\xfb\x57\x02\x3d\xb3\x92\x0e\x76\x03\xb4\x02\xa1\x20\x9e\x14\x30\x2b\x62\xf8\x3c\x29\x66\x45\xc6\x7e\xcc\xae\xbe\x5e\x5c\x5f\xc1\x8f\xc9\x62\x31\x99\x5f\xcd\x4e\x0b\xb8\x58\xc0\xf4\x62\xfe\x65\x76\x35\xbb\x98\x17\x70\x71\x06\x93\xf9\x4f\xf8\x36\x9b\x7f\xc9\x00\xa5\x6f\xd0\x02\x3e\x18\x4b\xdc\xb5\x05\x49\xd2\x61\xc5\x59\x81\xf8\x2a\xf9\x4a\x0f\x64\x9c\xc1\x52\xae\x64\x09\xad\x50\x75\x2f\x6a\x84\x5a\xdf\xa3\x55\x52\xd5\x60\xd0\x76\xd2\x51\xf3\x1c\x08\x55\xb1\x56\x76\xd2\x0b\x1f\xd6\x6f\xca\xe1\xec\x20\x67\xcc\x88\xf2\x96\x40\x94\x76\x4a\x78\x63\xf5\xc3\x86\x31\xd9\x19\x6d\x3d\x24\x2c\x8a\x57\x9d\x8f\x59\x14\x4b\x9d\x4b\xdd\x7b\xd9\xd2\x42\xa1\xcf\xa9\x33\xf4\x5b\xbb\x98\xb1\x28\xae\xa5\x6f\xfa\x25\x2f\x75\x97\x3b\xb3\x3a\xfa\x90\x97\x7a\x69\x05\x05\xdc\xfe\xcd\x71\xa9\x73\xf2\x84\x56\xa8\xfc\xe1\x52\x38\xcc\x5b\x5d\xbb\x98\xa5\x8c\xe5\x39\x4c\xbb\x6a\xae\x0b\x25\xfc\x15\x3a\x7f\x49\x0c\x48\xe9\xde\x6d\x7b\x58\xab\x46\x3b\x0f\x53\x02\xe4\xec\x5e\xd8\xdf\xbd\x70\x02\xfb\x21\x23\x9f\xea\xae\x13\xaa\x7a\x64\xd1\xb5\xc3\x31\x00\xc4\x4a\x1f\x52\x69\x87\x1e\x9d\x3f\x0c\x05\xc6\x19\x8b\x8a\x46\x5b\x3f\x86\x78\x6a\x51\xd0\x0d\x11\x10\x8e\x5e\x64\xce\xcb\x06\xcb\xdb\x41\x15\x40\x55\x19\x2d\x95\xa7\x17\xcf\xb5\xaa\xc7\x00\x37\xcf\x2f\xbe\x1b\x0c\xeb\x46\x96\x4d\x80\x95\xdb\x38\xf2\x26\x3a\x4f\xf6\xa3\x65\x2d\xef\x51\x81\x17\xb6\x46\x0f\xc9\x2e\xc8\xdf\x87\xcd\x93\xe1\xf1\x3f\x69\xf6\xa5\x71\x27\xd2\x1c\x65\xd2\x1c\xa7\xd4\x5b\xb0\xe8\x7b\xab\x1c\x48\x4f\x9e\x77\x46\x87\xbb\x4b\x16\x87\x8f\xa3\xd1\xcb\x16\xb9\x14\xad\xd5\x96\xdf\x64\x2c\x9a\xd8\xda\x8d\x01\x06\xa9\xfe\x29\x1e\x64\xd7\x77\x73\xda\x4c\x46\x69\xc6\xa2\x45\xaf\x48\xb2\x4e\x48\x95\xb1\x27\x16\xc4\x0e\x4e\x20\xd3\xab\x9a\xb1\x55\xaf\x4a\x90\x4a\xfa\x24\x85\x47\x16\xbd\x6d\x04\x3f\x6b\x45\xed\x92\x94\x17\xe1\x8d\xef\xc2\x26\xfb\x84\x90\x41\x4c\x8f\x38\x83\xf8\xc3\xd1\xf1\x87\x8f\xf4\x83\x66\x54\x40\xf7\x1a\x1c\xda\xfb\xf7\x74\xd4\x8a\xc7\x29\xd1\xc9\x73\xb8\xa2\x71\x73\xa9\xab\x3f\xbb\xd7\xc1\x5e\xdc\xa2\x83\x9b\x41\xaf\x9b\x20\xd0\x8d\x34\xee\x06\x84\xad\xfb\x0e\x95\x77\x59\xd8\xbc\xeb\xd1\x52\x37\x1e\x87\xc8\xa7\x57\xa2\x93\xc6\x8f\xd2\xb8\x27\xc6\xfc\xc6\x20\x74\xc2\xdd\xfd\x61\x31\xe7\x6d\x5f\x7a\x2a\xfb\x72\x47\x92\xa7\xad\x28\xa4\x59\x52\x76\x15\x1c\xbc\xf2\x61\x46\x04\x1c\xfc\xfb\xbf\x43\x78\x50\xad\x83\xf1\x09\xec\xbf\x02\x7f\x64\x51\x40\x1d\x07\x41\x32\x16\x3d\x31\x16\xd1\x1d\xe1\x33\x25\xfd\xb9\x26\x49\x59\x54\xe1\x0a\x2d\x84\xed\xb3\xb6\x77\xcd\x76\x9f\x45\x72\x45\x3d\x26\xd8\x8e\x2f\x7a\x95\xa4\x9f\xc2\xfa\x4f\x27\xa0\x64\x4b\x29\xa3\x55\xe7\xf9\x99\xb1\x52\xf9\x55\xa2\x1d\x2f\x7c\x85\xd6\x66\x10\xef\xdd\xff\x47\xc5\x19\x45\xa7\x2c\x8a\xb4\xe3\xa7\x0f\xd2\x27\x47\x29\x31\x78\x2e\x2d\xe9\xe0\xe0\x15\xdb\x14\x42\x92\xc1\x57\x04\x9f\xe7\x60\xb1\x96\xce\xa3\x85\x46\xa8\xaa\x45\xcb\x22\x9a\x10\xfc\x6b\x58\x9d\xf5\xaa\x4c\xe2\x5d\xad\xe3\x0c\x76\x56\x54\x43\x9e\x83\x33\x52\x41\x6f\x86\x31\x47\x86\xb0\x2c\x1a\x6c\x1e\x3e\x04\xfc\x9c\x32\xa8\x89\xaa\x0a\x3a\x4c\xe2\x71\xfc\x97\x8e\x5f\x06\x77\x29\xd9\xa6\x2f\x84\x77\x90\xaf\x17\xe7\x89\x91\x26\x03\x69\x1c\x3c\xf7\x60\x78\x12\xf1\x2d\x3a\xa9\x53\x6c\xd5\x89\xb7\xdf\x9c\x3d\xf7\xc6\x1b\x7b\x2e\xce\xe0\x19\xed\xb7\xe9\x92\xf5\xc0\x74\xb1\xbd\x7d\x3f\xac\xf4\x68\x33\xba\xf8\x70\xb0\x3d\x09\x23\x20\x18\xa1\xb7\x2d\xf5\xec\x17\xba\x16\xef\xf8\xf5\xe2\x9c\xff\xab\x47\xbb\x49\x52\xfe\x0f\xf4\x49\x3c\xd8\x35\x4e\x03\xd4\xdb\x63\x69\x5c\x9c\xa6\x54\x8f\x33\xd9\xb3\x17\x42\x3e\x3a\xee\x6d\x9b\xbe\x98\x64\xc7\x14\x6b\x1e\xf8\x7d\x45\x51\xa1\x4d\x3e\x8e\x46\xe9\x2f\x4e\x59\x67\x10\x0f\x4d\xa6\x7b\xb3\x21\xd1\xf6\xee\x02\xfe\x18\xf6\xee\xe3\x0c\x7a\xdb\x3e\x9b\xe7\x09\xb0\x75\x18\x70\x97\xba\xda\xbc\xb0\x18\x3e\x1b\x7c\x81\xa2\x9a\xb4\x6d\x42\x0c\xf9\x67\x5d\x6d\x28\xd7\x5b\x4a\xbf\xe7\xf4\x0e\x29\x8b\xa2\x22\x4e\x94\x8f\xfe\x41\xbc\xcc\xbc\x95\xd5\xdd\xfb\x4c\x77\xa9\x92\xed\x86\x66\x55\x83\xed\x44\x87\xe0\xbc\xf0\xbd\x83\x52\x57\x18\x86\x46\xc0\x17\xbf\x4c\x1c\xad\xc2\x0b\x52\x79\xb4\x4a\xb4\x34\x94\xde\xf2\x0f\xd5\x16\x01\x6e\xaa\x2b\x4c\x77\x22\x92\xe5\x56\x84\x27\xba\x6b\xd1\x8b\x2e\x7c\xda\x6a\x87\x09\xd9\xeb\xff\x01\x00\x00\xff\xff\x3d\xc5\xcc\xbc\xd7\x09\x00\x00") + +func testImagesAgnhostNoSnatTestProxyMainGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostNoSnatTestProxyMainGo, + "test/images/agnhost/no-snat-test-proxy/main.go", + ) +} + +func testImagesAgnhostNoSnatTestProxyMainGo() (*asset, error) { + bytes, err := testImagesAgnhostNoSnatTestProxyMainGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/no-snat-test-proxy/main.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostOpenidmetadataOpenidmetadataGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x58\x6f\x6f\xdb\x38\xf2\x7e\x2d\x7e\x8a\x59\xfd\xd0\x54\xee\x4f\x96\x7a\xb9\x37\x07\x17\x7d\x91\x3a\xcd\xad\xaf\xbd\x24\xa8\x9d\x16\x8b\xbb\x03\x4a\x4b\x23\x89\xb5\x44\x6a\x49\x2a\x8e\x51\xf4\xbb\x1f\x86\x94\x64\x3b\xf1\x2e\xd2\x2b\x50\x38\x96\x38\x0f\xe7\xcf\xc3\x67\x86\x4e\x5f\xb1\xb9\x6a\x77\x5a\x94\x95\x85\xf3\xd7\xe7\xaf\x61\x55\x21\x7c\xe8\xd6\xa8\x25\x5a\x34\x70\xd1\xd9\x4a\x69\x93\x30\xf6\x51\x64\x28\x0d\xe6\xd0\xc9\x1c\x35\xd8\x0a\xe1\xa2\xe5\x59\x85\xd0\xbf\x89\xe1\x33\x6a\x23\x94\x84\xf3\xe4\x35\x44\xb4\x20\xec\x5f\x85\x93\x37\x6c\xa7\x3a\x68\xf8\x0e\xa4\xb2\xd0\x19\x04\x5b\x09\x03\x85\xa8\x11\xf0\x21\xc3\xd6\x82\x90\x90\xa9\xa6\xad\x05\x97\x19\xc2\x56\xd8\xca\x6d\xd2\x43\x24\xec\xb7\x1e\x40\xad\x2d\x17\x12\x38\x64\xaa\xdd\x81\x2a\x0e\x57\x01\xb7\x8c\x01\x00\x54\xd6\xb6\xb3\x34\xdd\x6e\xb7\x09\x77\x5e\x26\x4a\x97\x69\xed\x57\x99\xf4\xe3\x62\xfe\xfe\x7a\xf9\x7e\x7a\x9e\xbc\x66\xec\x4e\xd6\x68\x0c\x68\xfc\xbd\x13\x1a\x73\x58\xef\x80\xb7\x6d\x2d\x32\xbe\xae\x11\x6a\xbe\x05\xa5\x81\x97\x1a\x31\x07\xab\xc8\xcf\xad\x16\x56\xc8\x32\x06\xa3\x0a\xbb\xe5\x1a\x59\x2e\x8c\xd5\x62\xdd\xd9\xa3\x04\x0d\x5e\x09\x03\x87\x0b\x94\x04\x2e\x21\xbc\x58\xc2\x62\x19\xc2\xbb\x8b\xe5\x62\x19\xb3\x2f\x8b\xd5\xaf\x37\x77\x2b\xf8\x72\xf1\xe9\xd3\xc5\xf5\x6a\xf1\x7e\x09\x37\x9f\x60\x7e\x73\x7d\xb9\x58\x2d\x6e\xae\x97\x70\x73\x05\x17\xd7\xbf\xc1\x87\xc5\xf5\x65\x0c\x28\x6c\x85\x1a\xf0\xa1\xd5\xe4\xbb\xd2\x20\x28\x75\x98\x27\x6c\x89\x78\xb4\x79\xa1\xbc\x33\xa6\xc5\x4c\x14\x22\x83\x9a\xcb\xb2\xe3\x25\x42\xa9\xee\x51\x4b\x21\x4b\x68\x51\x37\xc2\x50\xf1\x0c\x70\x99\xb3\x5a\x34\xc2\x72\xeb\xbe\x3f\x09\x27\x61\xaf\x52\xc6\xd2\x14\x6e\x79\xb6\x21\x1c\xd5\xa2\x14\x79\x83\x96\xe7\xdc\x72\xb0\x68\xac\x71\x06\x37\x8b\xcb\x39\x45\x9e\xd1\x46\x3b\x40\x99\xb7\x4a\x48\x6b\x60\x5b\x89\xac\x02\xae\x11\x5a\xae\x2d\xa8\x82\xe0\xc8\x62\x89\xfa\x5e\x64\x78\x91\x65\xaa\x93\x76\x61\x4c\x87\xfa\x72\x04\x28\x90\xdb\x4e\x63\xc2\xda\x93\x3b\x33\x26\x9a\x56\x69\x0b\x11\x0b\xc2\x4c\x49\x8b\x0f\x36\x64\x41\x58\x34\xee\x43\xa8\x54\xa8\xce\x8a\x9a\xbe\xd4\xaa\xa4\x0f\x89\x36\x25\xae\x84\x8c\x05\x4a\xe4\x19\x84\xa5\xb0\x55\xb7\x4e\x32\xd5\xa4\x99\xd2\xa8\x4c\x5a\xaa\x29\xbd\xa2\xe5\x07\x2f\x4d\x5b\xfc\xe5\xaf\x69\xa6\xd6\x9a\xbb\x37\x8a\xd2\xea\x58\xf6\x90\x2a\xde\xd9\xea\xdc\x3f\x6e\x37\x65\x22\x64\x6a\x7e\xef\xb8\x46\xc2\xfa\xa6\x0c\x26\xf7\xe7\xe9\xb7\xad\xf3\x6a\xf3\x37\x93\x08\x95\x66\xb5\x40\x69\xa7\xa5\x4a\x35\x1a\x1b\xb2\x89\xcb\xf0\xbc\xc9\x57\x68\xec\x9f\x67\x45\x18\x3a\x50\x9e\xb7\xa5\xac\x94\xb1\x30\x27\xb7\x12\x76\xcf\xf5\xf3\x20\xde\xc2\x99\x8b\x24\x99\xab\xa6\xe1\x32\xff\xce\x82\x3b\x83\x33\x00\x08\xa9\x9a\x53\xe3\xad\xa7\xdc\x9b\x4f\x85\xb3\x9f\x8e\xa5\x0d\x63\x16\x2c\x2b\xa5\xed\x0c\xc2\xd5\x58\xfe\x67\x15\x93\x4c\x3f\x2a\x59\xce\x20\xfc\x84\x3c\x37\xe0\xce\x76\x43\x16\xee\xbc\x6d\x90\x4e\x4b\x0e\xdc\x5a\x6c\x5a\x42\x56\x70\x8f\x5a\x14\x3b\x10\x16\x78\xc9\x85\x34\xd6\xcb\xd1\xed\x02\xc8\x51\xd4\x2f\x0d\x84\xf0\xff\x2c\x08\x42\xc7\xc0\x91\x77\x31\x74\x86\xe8\xce\x49\x7d\x74\x3e\x25\xf2\xed\x3c\x4b\xe9\xf8\x60\x83\xd2\xb3\x3e\x21\xaf\x2e\x74\x69\x66\xe0\xf3\xf2\x4f\xfe\x20\x9a\xae\xb9\xa6\x67\xd1\xeb\x49\xcc\x82\x4f\x9d\x9c\x01\x34\x5c\xc8\x98\xfd\x60\x2e\xd5\x11\x0b\x9c\xbf\xb7\xdc\x56\x30\xfe\xa3\x73\x2f\x4b\x16\xf0\x2e\x17\x48\xd2\xf6\xf4\x95\x90\xf3\xba\x33\xf6\x30\x3b\x6b\xa5\x6a\x22\x41\xd1\xc9\x0c\x84\x14\x36\x9a\xc0\x77\x16\x14\x06\x66\x6f\x9f\x55\xd3\xe4\xaa\xe6\xa5\x89\x26\x64\x93\x2c\xdd\x46\x9f\xb9\x8e\xce\x46\x0f\x63\x08\xdd\xdf\xd3\x96\xdb\x2a\x8c\x21\xa4\xff\xce\x75\xab\x40\x23\xcf\xa1\xaf\x3a\xf4\x55\xef\x8b\x51\x68\xd5\x24\xe1\x13\xdc\x21\xbc\x18\xc2\xe1\xcf\x01\xf4\x62\x88\xdc\x2a\xc8\x2a\xcc\x36\xa4\x80\x1a\x33\x14\xf7\x43\x89\x07\xc0\x77\x4a\xd5\x0e\xee\x69\x4a\x62\x08\x85\x9c\x66\xfe\xe9\x21\xf5\xa0\xe0\xb5\xc1\x98\xca\xbd\x90\x59\xdd\xe5\xe8\xe9\xb7\x5f\x0d\x6b\xe4\x9a\x44\xcc\x05\x20\xa4\xd3\x7a\x34\x16\x2a\xe4\x39\x6a\x93\x40\x48\x6c\x09\xc2\x3b\x83\xb0\xad\x50\xc2\x3d\xaf\x45\xce\xad\x23\x4b\x4f\xb1\x23\x7a\x9d\x10\xb5\x78\x00\xf1\xe2\xd6\xb7\x13\x20\x29\x40\x69\x45\xd6\x13\x6b\x42\x6c\x71\x55\x25\xee\x44\x59\x93\xc3\xab\xa3\xb3\x17\x03\xd7\xa5\x81\x7f\xfd\xc7\xb3\xc3\x95\x3d\xb3\x0f\x31\xa0\xd6\x54\x7c\xea\x8c\x37\xd4\x97\xcf\xe7\x4e\x33\xa2\x5e\xe9\x92\x77\x3c\xdb\x94\x5a\x75\x32\x8f\x26\x13\x16\x88\xc2\x59\xfc\xf2\x16\xa4\xa8\x09\x24\xa8\x55\x99\x5c\x71\xcb\xeb\x08\xb5\x9e\xb0\xe0\x07\x63\x81\xe6\xdb\x11\xb9\x44\xeb\x32\x14\x3d\xd3\xda\x3d\xba\xd5\x42\xda\x28\xbc\xf9\x30\x83\xbf\xab\x9e\x23\x54\x4c\xab\x36\x23\xf0\xb7\xad\x4d\x6e\xb9\x36\xb8\x14\xa5\xc4\x3c\xd2\x7c\xfb\xdc\x2d\xe8\x5c\x75\xd2\xf0\x02\xe7\x35\x17\x8d\x81\xcc\x7d\x8c\xd6\xb3\xb7\xb4\x65\x72\x77\xb0\xe4\x8b\xb0\x95\xea\xec\x67\x12\x89\x3e\xed\xd1\xd9\x21\xc6\xe4\xcd\xcf\xc4\x56\xf8\xe0\x4a\x65\xc1\xcb\x1e\xbc\x30\x61\x7c\xe4\x54\xe2\xcf\xde\xe4\xd8\xea\xaa\xab\xeb\x98\xe6\x9d\x69\xcf\x26\xcc\x7b\xef\x67\xf0\x6f\xf9\xe2\xff\xee\x1f\xa1\x4c\x18\x0b\x84\x31\x63\xd6\xa8\xe9\x24\xd7\xb8\xbd\xd5\xea\x5e\xe4\xa8\x23\xc7\x82\xd3\xfb\xfe\x5c\xb9\xfa\x90\xe6\x4a\x1a\xab\xbb\x8c\x1c\x73\x22\xd8\xf6\x3b\xb9\x99\x61\x08\xf6\xb1\x9b\xe3\xa6\x54\x9c\x5a\xe4\xab\x83\x42\x0b\x63\x12\x9f\x77\xd4\xd1\x99\x0b\x60\xae\x64\x21\xca\xef\x9e\xab\x8b\xcb\x19\x0c\xea\xf0\x63\xe2\x97\xee\x7c\x5c\x3f\xc1\x89\x47\xb4\xfb\x3c\x66\xd7\x88\x52\xba\xa6\x42\x02\xf3\x8f\x2f\xab\xd0\x3b\xa9\xe1\x4f\xf9\x33\x44\x91\xf8\x15\xd1\xd9\xff\xca\x94\xfd\x29\x70\x90\xfd\x56\x4e\x30\xfd\xb9\xf8\x25\x3c\x49\x91\x3f\xa6\xc7\xa1\x2b\xa4\x1b\x76\xd7\x22\x6c\xba\x35\x5e\xf3\x06\xc1\x17\x8f\xdc\x1a\xbe\x92\x5e\x7d\xfd\x66\x94\x9c\x85\x92\x37\x18\x7e\x65\xc1\xdd\xe2\x12\x1e\xbd\xea\x44\x1e\x7e\x3d\x82\xeb\x73\x73\x0c\x68\x5a\x3e\x74\xab\xde\x1e\x0e\xc1\xdd\x6b\xda\xe1\xb8\x0d\xed\xdd\xeb\xd7\xf6\x5d\xa4\x6f\x22\x07\x1b\x67\x8f\x37\x25\x99\xf0\x9e\x30\x16\x1c\x5c\x42\x0e\x3c\xec\x31\x37\xe3\xcb\x44\x28\x0f\xe9\x24\x35\xda\xc0\x2b\x0f\x3b\x01\xdf\x9b\xa2\xc9\xe0\xfc\x77\x16\x68\xb4\x9d\x96\x50\x34\x36\x59\xb6\x7d\x09\x5e\x98\xf4\x85\x71\x84\x77\xc7\x7a\x93\xec\x37\x4e\xc6\x2c\x3c\x7a\x7e\x1c\xb1\x5b\x46\x2b\x86\x3e\xb7\x97\xf8\xbd\xa2\x42\xe4\xdd\x70\x47\x45\x69\xa7\xea\xeb\xfd\xb9\x71\x73\x69\x42\x03\xd0\x95\xa8\x31\x1a\x9b\xf4\x64\x74\xda\x9b\x47\xeb\x89\x33\xa2\x1d\xd2\xf4\x49\x2f\x00\xbf\xd8\xb8\xdb\x91\xeb\x0a\x60\x2b\x4e\x77\xab\xbe\x2f\x72\x09\xbf\xae\x56\xb7\xe0\x97\xc7\xfb\xe1\x9e\xd0\xfc\xd8\x9a\xd0\x82\x1e\x6e\x83\xbb\x04\x16\x05\xc0\x74\x7a\xaa\xf7\xd2\xe8\x69\x75\x87\xb1\xeb\xb7\x7e\x84\x85\xad\xa8\x6b\x42\xf3\x97\xbc\xa3\xdb\xe4\x62\x68\xea\x5e\x14\x12\xb8\xa1\x5b\xcc\x56\xd0\x15\xc9\x1b\x92\x15\x19\xd3\x4c\x9e\x5c\x62\xc1\xbb\xda\xae\x34\x97\x86\xe6\xfa\x84\xde\xd0\x05\xf5\x2b\x29\xcb\x57\xa8\xc5\x5a\x73\xbd\x03\x8d\x74\xb7\xe9\x87\xce\xa7\x41\x0c\x99\xd8\xe0\xee\x0d\x88\x82\xb6\x12\x06\x0c\xda\x78\xb8\x75\x0c\x40\x83\x07\xee\x61\x2f\x86\xb9\xf7\x65\xc8\x2f\x77\xf7\x2e\x5b\x71\xe9\x16\xe5\xde\x45\x02\x72\x79\xf5\x39\xe8\x1d\x15\x06\x78\x5d\xab\x2d\xcd\xe7\x34\xfb\xa0\x34\xa4\x4d\xfd\xf0\x61\x88\x1d\xa0\x55\xe7\xe7\xdc\x47\x23\x2c\x31\x92\x50\x4e\x27\x3e\xf6\x53\x72\x36\x06\x58\x88\xb2\xa3\xbb\xeb\x78\x6d\xe6\x6d\xab\x55\xab\x05\xb7\x08\xf3\x8b\xc4\xd3\xf1\x0f\x47\x87\xb9\xff\x9c\xc0\xe3\x27\x87\x74\xa5\x98\x6e\x2e\x6f\xa2\xc6\xf2\xae\x40\x39\x99\xc1\x52\x35\x98\xf3\x5d\x0c\x8d\xfb\x01\x61\xcb\xdd\x90\x08\x59\xc5\x65\xd9\xdf\xf0\x8d\xf2\x0c\xdc\x22\x64\x94\x33\x34\xd6\x23\x39\x86\x6b\xf5\x0d\x33\x6a\xd0\xde\x71\x2e\x5d\x06\xc6\x49\xd9\xa0\x1d\x32\x83\x0f\x16\xb5\xe4\xf5\xbe\x47\x91\x85\x83\x1a\xf3\x39\x4c\x6a\xe3\xda\xfd\x85\x33\xa2\x5b\xbb\x9b\xcb\x32\x4e\x33\x1e\xbe\xa4\xf1\x56\xe6\x0e\x80\x43\x2e\x8a\x02\x35\x8e\x33\xae\xf7\x06\xa4\x92\xd3\x03\xfa\x0e\x7e\x4d\x12\xe6\xec\xde\xed\x86\xfa\xc7\x23\x6b\xfa\x07\x8e\x34\x60\x07\xe6\xee\xeb\x62\x76\xc6\x62\x03\x5a\x29\x0b\xeb\x4e\xe6\x35\x0d\xae\x69\x0a\x46\x50\xc0\xc2\xbe\x34\xa7\x66\xcf\xa3\x0c\x08\x69\x9d\x47\x09\x0b\xb4\x25\xf5\x38\x79\x58\x5c\x87\x3b\x71\xb1\xa0\x26\x96\xa6\x74\xa8\x0f\xe6\xe3\x03\x62\xd1\xb4\x3a\x46\x73\xb0\xc4\x93\x8c\xea\xe9\x4b\xe9\x61\x0e\xa6\xdb\x83\xdf\x6c\xf6\x34\x4e\x58\x10\x64\x45\x39\x0a\x1d\x5d\x6e\x93\x47\x32\x40\xe3\xe6\x89\xc6\x3f\x08\x9f\x14\xb5\x97\xbc\x80\x9a\x6d\xa0\x3d\x27\xa1\xc7\x1a\xe3\xbd\x52\x3a\xca\x8a\xf2\x19\x58\x24\xff\xef\x89\xd5\x45\x14\x66\xaa\xab\x73\xf7\x9b\x54\x7f\x18\x65\x6e\xb5\x68\x5b\xd4\x33\x3f\xf9\xf8\x2e\x4f\x3b\xd3\xb4\x9c\xd9\x07\x8a\x62\x38\x24\x34\x69\x7e\xe6\x75\x87\x27\x67\x70\xba\x91\x3c\x51\xa3\x18\xce\x0e\xf4\xc4\xf9\x36\x86\x30\x03\x6d\xc9\xe8\xc7\x5e\xf5\xdd\x68\x24\x45\xcd\x7e\xb0\xff\x06\x00\x00\xff\xff\xb4\x88\x6d\x9a\xac\x13\x00\x00") + +func testImagesAgnhostOpenidmetadataOpenidmetadataGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostOpenidmetadataOpenidmetadataGo, + "test/images/agnhost/openidmetadata/openidmetadata.go", + ) +} + +func testImagesAgnhostOpenidmetadataOpenidmetadataGo() (*asset, error) { + bytes, err := testImagesAgnhostOpenidmetadataOpenidmetadataGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/openidmetadata/openidmetadata.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostPausePauseGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x93\x41\x6f\xdb\xc6\x13\xc5\xcf\x9c\x4f\xf1\x40\xe0\xff\x07\x65\xd0\xa4\xed\x9e\xaa\x26\x07\x55\x71\x5b\x22\x8e\x1c\x98\x72\x83\xa0\x2d\x90\xd5\x72\x48\x2e\x4c\xee\xb2\xbb\xcb\x48\x42\xe0\xef\x5e\x2c\xa9\xa0\x56\xd3\x43\x2f\x04\x76\xe7\xbd\x99\xdf\xcc\x2c\xf3\x0b\x5a\x9b\xe1\x68\x55\xd3\x7a\xdc\x5c\x5d\x7f\x8f\x6d\xcb\x78\x3b\xee\xd8\x6a\xf6\xec\xb0\x1a\x7d\x6b\xac\xcb\x88\xee\x94\x64\xed\xb8\xc2\xa8\x2b\xb6\xf0\x2d\x63\x35\x08\xd9\x32\x4e\x91\x14\xbf\xb2\x75\xca\x68\xdc\x64\x57\x48\x82\x20\x3e\x85\xe2\xc5\x0f\x74\x34\x23\x7a\x71\x84\x36\x1e\xa3\x63\xf8\x56\x39\xd4\xaa\x63\xf0\x41\xf2\xe0\xa1\x34\xa4\xe9\x87\x4e\x09\x2d\x19\x7b\xe5\xdb\xa9\xc8\x29\x45\x46\x1f\x4f\x09\xcc\xce\x0b\xa5\x21\x20\xcd\x70\x84\xa9\x5f\xaa\x20\x3c\x11\x00\xb4\xde\x0f\xcb\x3c\xdf\xef\xf7\x99\x98\x28\x33\x63\x9b\xbc\x9b\x55\x2e\xbf\x2b\xd6\xb7\x9b\xf2\xf6\xf2\x26\xbb\x22\x7a\xd4\x1d\x3b\x07\xcb\x7f\x8e\xca\x72\x85\xdd\x11\x62\x18\x3a\x25\xc5\xae\x63\x74\x62\x0f\x63\x21\x1a\xcb\x5c\xc1\x9b\xc0\xb9\xb7\xca\x2b\xdd\xa4\x70\xa6\xf6\x7b\x61\x99\x2a\xe5\xbc\x55\xbb\xd1\x9f\x0d\xe8\x2b\x95\x72\x78\x29\x30\x1a\x42\x23\x5e\x95\x28\xca\x18\x3f\xae\xca\xa2\x4c\xe9\x43\xb1\xfd\xe5\xfe\x71\x8b\x0f\xab\x87\x87\xd5\x66\x5b\xdc\x96\xb8\x7f\xc0\xfa\x7e\xf3\xa6\xd8\x16\xf7\x9b\x12\xf7\x3f\x61\xb5\xf9\x88\xb7\xc5\xe6\x4d\x0a\x56\xbe\x65\x0b\x3e\x0c\x36\xb0\x1b\x0b\x15\x46\xc7\x55\x46\x25\xf3\x59\xf1\xda\xcc\x30\x6e\x60\xa9\x6a\x25\xd1\x09\xdd\x8c\xa2\x61\x34\xe6\x33\x5b\xad\x74\x83\x81\x6d\xaf\x5c\x58\x9e\x83\xd0\x15\x75\xaa\x57\x5e\xf8\xe9\xfc\x4d\x3b\x19\x5d\xe4\x44\x83\x90\x4f\x21\xc9\x20\x46\xc7\x44\xaa\x1f\x8c\xf5\x48\x28\x8a\xeb\xde\xc7\x14\xc5\xc6\xcd\xdf\xdc\xa9\x46\x8b\x2e\x1c\xdc\xd1\x49\xd1\x75\x31\x51\x14\x37\xca\xb7\xe3\x2e\x93\xa6\xcf\xdd\x50\x5f\x7f\x97\x4b\xb3\xb3\x22\xa6\x05\x51\x9e\x63\xdd\x57\xef\x43\xe2\x30\xba\xd1\x9d\x96\xd2\xe8\xd6\x38\x8f\x75\x10\x66\xf4\x59\xd8\xbf\x65\xaf\xf1\xff\xc9\x9f\xad\x4d\xdf\x0b\x5d\x7d\xa1\xe8\xd1\xf1\x12\x40\x3c\x01\xc6\x29\x45\x65\x6b\xac\x5f\x22\x9e\x1c\x6e\xea\x88\x0f\x2c\xc7\xd0\x66\x88\xdf\x19\xdd\x2c\x81\x4f\xff\x16\xcf\xf0\xe8\xb8\x1e\xbb\x69\x9a\x4f\xcc\x43\x98\x5a\x50\x48\xa3\xc3\x73\x64\xeb\x60\x47\xad\x4f\xaf\x02\x66\x5a\x8f\x9c\x61\x1c\xa4\xd0\xd8\x7d\x4d\xc7\x55\xf6\x29\xa5\x68\x65\x1b\xb7\x04\x66\xec\x77\xe2\xa0\xfa\xb1\xdf\x84\xcb\xe4\x6a\x91\x52\xf4\x30\xea\x80\x3f\xd1\xa7\xf4\x4c\x54\x8f\x5a\xce\xc7\x44\xf6\x15\x2e\xce\xfa\x4d\x21\x6c\xe3\xf0\xdb\x1f\xe1\x95\xe9\x66\x81\x2f\x14\xd5\xbd\xcf\xde\x5b\xa5\x7d\xa7\x93\xb9\xe9\x2a\x5e\x50\xe4\x54\xb3\x6e\xb1\x7c\x8d\x5e\x3c\x71\x22\x5b\xa1\x61\x5c\x56\x4e\x4b\x5a\x50\x54\x19\xcd\xe7\x51\xa5\x7d\x8a\xeb\xd9\xa9\x45\x97\x6d\x8c\x57\xf5\x31\x99\xf2\xa4\x38\xed\x34\x2b\x8b\x9f\x8b\xcd\xf6\x3f\xa8\xb6\xb7\x0f\xef\x16\x14\x35\x06\xa1\xa3\x64\x42\x0d\xa6\x50\xf4\xd5\xe5\xa4\x0f\x17\x7b\xe5\x65\x8b\x70\x1f\xe2\x52\x38\xfe\x47\xa9\x25\x45\xd1\x4c\xfb\xea\x12\xd7\xe1\x60\x5c\x76\x7b\x50\x3e\x09\xac\xdf\x38\x42\xd9\x33\xcb\xcd\x4b\xcb\x4d\xb0\x3c\x53\xf4\x9c\x2c\x28\xb2\xec\xc6\xce\xcf\x3c\x41\xfd\x62\x94\x75\x12\xf3\x61\xfa\xf9\xf1\xbf\xea\x77\x1d\xa7\x98\xc5\x0b\x7a\xa6\xbf\x02\x00\x00\xff\xff\x2b\x3f\x3c\x77\x4d\x05\x00\x00") + +func testImagesAgnhostPausePauseGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostPausePauseGo, + "test/images/agnhost/pause/pause.go", + ) +} + +func testImagesAgnhostPausePauseGo() (*asset, error) { + bytes, err := testImagesAgnhostPausePauseGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/pause/pause.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostPortForwardTesterPortforwardtesterGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x58\x6f\x73\x1b\xb7\xf1\x7e\x4d\x7c\x8a\xf5\xcd\xf8\xf7\x23\x1d\xf2\x28\xc9\xc9\x4c\x43\x57\xed\xd0\x94\x5c\xb3\x51\x64\x8d\x48\xc7\x4d\xd3\x8c\x03\xe2\xf6\xee\x30\xc2\x01\x67\x00\x47\x8a\xf5\xb8\x9f\xbd\xb3\xc0\x1d\xff\xd8\x52\xe2\xe9\x1b\x5b\x24\x80\x67\x17\x8b\x67\xf7\xd9\xe5\xf8\x19\x9b\x99\x7a\x6b\x65\x51\x7a\x38\x3b\x39\xfd\x0e\x96\x25\xc2\x0f\xcd\x0a\xad\x46\x8f\x0e\xa6\x8d\x2f\x8d\x75\x29\x63\x57\x52\xa0\x76\x98\x41\xa3\x33\xb4\xe0\x4b\x84\x69\xcd\x45\x89\xd0\xae\x0c\xe1\x27\xb4\x4e\x1a\x0d\x67\xe9\x09\xf4\x69\x43\xd2\x2e\x25\x83\x17\x6c\x6b\x1a\xa8\xf8\x16\xb4\xf1\xd0\x38\x04\x5f\x4a\x07\xb9\x54\x08\x78\x2f\xb0\xf6\x20\x35\x08\x53\xd5\x4a\x72\x2d\x10\x36\xd2\x97\xc1\x48\x0b\x91\xb2\x9f\x5b\x00\xb3\xf2\x5c\x6a\xe0\x20\x4c\xbd\x05\x93\x1f\xee\x02\xee\x19\x03\x00\x28\xbd\xaf\x27\xe3\xf1\x66\xb3\x49\x79\xf0\x32\x35\xb6\x18\xab\xb8\xcb\x8d\xaf\xe6\xb3\xcb\xeb\xc5\xe5\xe8\x2c\x3d\x61\xec\xad\x56\xe8\x1c\x58\xfc\xd0\x48\x8b\x19\xac\xb6\xc0\xeb\x5a\x49\xc1\x57\x0a\x41\xf1\x0d\x18\x0b\xbc\xb0\x88\x19\x78\x43\x7e\x6e\xac\xf4\x52\x17\x43\x70\x26\xf7\x1b\x6e\x91\x65\xd2\x79\x2b\x57\x8d\x3f\x0a\x50\xe7\x95\x74\x70\xb8\xc1\x68\xe0\x1a\x92\xe9\x02\xe6\x8b\x04\x5e\x4e\x17\xf3\xc5\x90\xbd\x9b\x2f\x5f\xbf\x79\xbb\x84\x77\xd3\xdb\xdb\xe9\xf5\x72\x7e\xb9\x80\x37\xb7\x30\x7b\x73\x7d\x31\x5f\xce\xdf\x5c\x2f\xe0\xcd\x2b\x98\x5e\xff\x0c\x3f\xcc\xaf\x2f\x86\x80\xd2\x97\x68\x01\xef\x6b\x4b\xbe\x1b\x0b\x92\x42\x87\x59\xca\x16\x88\x47\xc6\x73\x13\x9d\x71\x35\x0a\x99\x4b\x01\x8a\xeb\xa2\xe1\x05\x42\x61\xd6\x68\xb5\xd4\x05\xd4\x68\x2b\xe9\xe8\xf1\x1c\x70\x9d\x31\x25\x2b\xe9\xb9\x0f\x9f\xbf\xb8\x4e\xca\x9e\x8d\x19\x1b\x8f\x61\x0a\x5e\xea\x2d\xac\xa4\xe6\x76\x1b\xed\xa0\xf3\x01\xcf\x58\x4f\x5f\x6c\xb8\xcd\xa4\x2e\xd2\x40\xab\xdc\x28\x65\x36\xb4\x8c\x7a\x2d\xad\xd1\x15\x6a\x0f\x6b\x6e\x25\x05\xda\x11\xa2\x30\xda\x5b\xa3\x82\xb5\x08\xfb\xff\x0e\x94\x29\xa4\x98\xb0\xf1\x98\x76\xbc\x9c\x5f\x5f\xbc\xbf\x79\x73\xbb\x84\x51\xd8\xb5\x9c\xdd\x44\x6b\xde\x04\x5a\x75\xb7\x55\xd2\x79\xd4\x68\xe9\xcc\xe5\x3f\x6e\x2e\x67\xcb\xcb\x8b\xf7\xb3\xab\xf9\xe5\xf5\xf2\xfd\xc5\x74\x39\x85\x11\x64\xdc\x73\xf0\x25\xf7\xb0\x21\x12\xd6\x28\x02\x8a\x45\x81\x72\x8d\x90\x5b\x53\x05\x28\xa1\x24\x6a\xff\x22\x90\x6f\x85\x90\x24\x29\x81\xce\x5e\xbf\xbd\xfe\x61\x01\x23\x28\xcd\x06\x2a\xae\xb7\x20\xca\x46\xdf\x39\x62\x64\x40\xde\x20\xb8\xd2\x34\x2a\x03\x87\x3a\x30\x67\x0f\xb6\x03\x78\xbf\x98\xff\xf3\xb2\x05\x51\xdc\x16\x08\xc8\x45\x19\xa1\xba\xe3\x2b\xdc\x6f\x9f\x5f\x2f\x2f\x6f\x7f\x9a\x5e\xb5\xb7\xcf\x50\xf1\x2d\x31\x72\x85\x7e\x83\xa8\x83\xa9\x10\xe1\x1d\x4a\x1b\xb7\x2b\x53\x40\x85\xce\xf1\x02\x1d\x70\x8b\x81\xc3\x1e\x35\xf9\xe5\x7c\x66\x1a\x0f\x3c\x3e\x86\x69\x1c\x38\x1f\xf6\xb5\xc9\xb5\x7b\x09\xbc\x47\xd1\x10\x2b\x42\x04\x96\xe8\x3c\x08\x93\x21\x08\xae\xc1\xa2\xb7\x12\xd7\x6d\x62\xd3\x43\x72\xa9\xd1\xc6\xf7\x23\x52\xc1\x9a\x2b\x99\x71\x8f\x31\xe6\x04\x1c\x83\x8e\x19\xa1\xad\xb0\xe4\x6b\x49\x44\x76\xe0\xf9\x5d\x60\x91\xe2\x02\x53\xc6\x6a\x2e\xee\x88\xaf\xf4\xce\x2d\xa9\x88\x68\x68\x19\x93\x55\x78\xfc\x3e\xeb\x25\x79\xe5\x13\xd6\x4b\x34\x86\xff\x8c\xa3\x7f\x9d\xb7\xc2\xe8\x75\xfb\xa7\xd4\x45\xf8\xd6\xcb\x0a\x13\xc6\x7a\x49\x21\x7d\xd9\xac\x52\x61\xaa\xb1\xab\xf3\xd3\xe7\x63\x61\x56\x96\x27\x6c\xc0\x58\xde\x68\x01\x05\xfa\x4b\xbd\x9e\x6b\xdf\xd7\xbc\x42\x88\x10\x03\x90\xda\xc3\x47\xd6\x73\x30\x39\x07\xe3\xd2\xbf\xa1\x47\xbd\x0e\x5b\x06\xac\xb7\xe6\xaa\xc1\x21\xa0\xb5\xb4\xdc\x3a\x90\x4e\xbd\x91\x7d\x37\x60\x3d\x99\x87\xa5\x27\xe7\xa0\xa5\x22\x94\x5e\x5e\xf9\xf4\xc6\x4a\xed\xf3\x7e\x72\x69\xad\xb1\x50\x73\xeb\xe8\xfe\x4f\x1d\x3c\xfd\x30\x81\xa7\xeb\x7f\xe9\x64\x08\x84\x3f\x04\x17\xa0\x07\xac\xd7\x33\x2e\xbd\xbc\x97\xbe\x7f\x3a\x60\xbd\x4f\xac\x67\xd1\x37\x56\x43\x30\xcf\x3e\x85\xfc\xf4\xfc\x0e\x75\xe4\xb1\x46\x3f\xa6\x9a\x38\x76\x68\xd7\x68\xd3\xc2\x74\x09\x65\x9d\x9f\xae\x8d\xcc\xa8\xea\x5e\x44\x3a\xb9\xf0\x38\xbc\x32\x8d\xf6\x81\x03\xb2\xc2\x40\x67\x85\x58\x03\xcf\x3d\x5a\x10\xca\x04\x1f\x7d\x19\xd8\x49\x6c\x42\x70\x32\x43\x3a\xc0\x43\x5a\x0a\xa3\x35\x0a\xa2\x0b\xac\x30\x37\x16\x0f\x0f\x01\x6a\x2f\x2d\x82\x33\xe2\x0e\x7d\xe0\xd3\xcb\x6d\xb4\x10\x2a\xeb\x06\x41\x6a\x61\x91\xbb\x58\xcd\x44\x49\x0e\xba\x3d\x77\x62\x22\x81\x43\xe2\x69\x63\xe1\xd5\xfc\x9a\x40\x88\x68\xb5\x35\x02\x9d\x43\x07\xd2\x93\xc6\x68\xae\x62\x4a\xb6\x6e\xf8\x12\xb7\xdd\xa6\x58\x1a\x9b\x95\xc3\x0f\x0d\xe1\xdd\x2e\x96\x04\x13\x82\xd6\xb9\xcb\x0f\xaf\x12\x84\xe9\x4e\x9b\x8d\x86\x46\x5b\xe4\x59\x80\x8e\x09\x41\xcc\xbf\x5d\x2c\xc9\xa9\xca\x51\x66\x19\x21\x1a\x0b\x95\x71\x5e\x6d\xa9\xec\xbf\x5c\x5c\x80\xdb\x3a\x8f\x95\x4b\xa1\x3f\xd5\x19\xbc\x93\x3a\x33\x1b\xf7\xd7\xc1\x0e\x80\xa2\x4d\xe9\x28\x1d\x38\x53\xe1\x86\x2e\xcc\xed\x4a\x7a\x4b\x55\xb6\xff\x1f\xc5\x3d\x6a\xb1\x05\x6e\x4d\x43\x75\xa5\x44\x4a\x14\x8d\x7e\x90\x32\x61\xb4\xf3\x0f\x3c\xe9\x39\x7c\x77\x72\x02\xcf\x02\x76\xfa\xa3\x54\x4a\x3a\x14\x46\x67\x81\x26\xb3\x2a\xbb\x31\xd6\xbf\x8a\x99\xb5\x0c\x99\x45\xd6\x1b\xd7\x8a\x61\xa1\x4b\xe3\x3c\xcc\x28\x39\x52\xb6\xe6\xf6\xe1\x23\xe7\xf0\x7f\x21\x7f\xd2\x99\xa9\x2a\xae\xb3\x8f\xac\xf7\xd6\xe1\x04\x00\x12\x4a\xd2\x51\x9b\xba\xa3\x98\xbb\xc9\x90\xf5\x16\xa5\xb1\x7e\x02\xc9\xcc\x22\xa7\x6e\x23\xf2\x26\x52\x34\xbe\x34\xd5\x33\xf7\x59\x65\xa5\x93\x57\x46\x17\x13\xf8\xed\x2a\x54\x79\x17\xaa\xfe\x31\xe5\x5c\x50\x59\x28\xe4\x1a\x35\xf0\x2c\x0b\x32\x19\xc8\x61\xac\x1f\x82\xa9\x69\x13\x57\x8a\xca\x36\x8a\xbb\xc8\x83\x40\x92\xb6\xfe\x67\x43\x46\xdb\xa3\x03\x81\x01\xb9\x2c\x1a\x1b\x7a\x02\xdd\x54\x2b\xb4\xbb\x4a\x1f\xdd\x1b\x46\x6a\x7c\xb6\x55\x6a\x8f\x76\xcd\xd5\xae\x42\xc7\xcd\x29\x63\xcb\x48\x3c\x11\x83\x15\x03\xde\x25\xc7\x1f\x48\xe5\x84\xb1\x51\x54\xc2\xe9\xc5\xc5\xed\xe5\x62\x01\xfd\xee\x42\x83\x49\xd0\xda\xee\xc6\x44\xd8\x52\x8a\x12\xa4\x87\x8d\x54\x8a\x2a\xbb\xf5\xad\x3a\x12\xfe\x43\x91\xeb\x67\x98\xf3\x46\xf9\x58\x4c\x26\xa0\x8c\xe0\x8a\x28\x30\xe8\xcc\x92\x00\x47\x43\xa1\xfc\xfe\x2f\x56\x52\x36\x7a\x58\x98\x0f\xaf\x32\xcf\xc1\xa1\x1f\xee\x70\xc3\x5b\xed\x6b\x00\xb5\x6c\x24\x42\xf1\x91\x42\x26\x53\x9d\xc6\x7b\x2e\x7c\x9b\x96\xa3\x56\xa8\x27\xf0\xfa\x11\x9d\xf6\xa6\xad\x5e\x52\xb7\xa0\xae\x36\xa1\xcd\x19\x1d\x68\x74\xbc\x6d\x27\x58\xe0\xe4\xbf\x43\xa5\x0b\x3a\xdb\x49\x69\x54\xed\x16\x37\x25\xe7\xa5\x87\xcc\xa0\x0b\x4d\x6f\xc5\xbd\x88\x2d\x2d\x17\xbe\xe1\x6a\x87\x41\x5f\x75\x10\x74\x72\x7f\x5d\xbc\x0f\x7f\xb5\x9d\x70\xf8\x14\xf4\xf6\xdb\xbd\x6f\x5d\x43\xd0\x3e\xfb\x71\xcd\xa6\xab\x71\xe9\x0f\x1b\x84\x96\x7e\xbf\x0d\x59\x6f\x6a\x0b\x37\x81\x98\xb2\x3f\xf2\x7b\x59\x35\xd5\x35\x7d\xd7\x3f\x19\x0c\x59\xef\xb6\xd1\x13\x80\x8a\x4b\x3d\x24\x39\x09\x7a\x48\x9f\xfa\xa2\xca\xe0\xd9\x51\xa2\x0f\x81\xdb\xc2\xc1\x2f\xbf\x76\x02\xf9\x91\xf5\x56\x52\x67\xd3\x96\x84\x47\x32\x99\x1c\xf2\x36\x89\x8a\x78\xb8\xf9\xfc\x1c\x92\x24\x08\xe3\xd1\xb7\x90\xec\x58\x98\x04\xbd\xa3\x55\xaa\x41\x0f\xa1\x13\x3d\x09\x9a\xb2\x60\x27\xc5\x1a\x7d\x7a\x8b\xce\xa8\x35\x2e\x67\x37\x04\xdc\x4f\xbc\xa8\x49\x59\xd1\xa7\x7f\x37\x52\xbf\x36\xce\x13\x64\xff\xc0\xf2\x10\x3a\x43\x83\xaf\x54\x6f\x1b\x6c\x48\xaa\x4f\xad\x72\x3f\x2c\xd8\x5d\x87\x7a\xe4\x60\x2c\x68\xcb\xd9\x4d\xe7\x1b\x5d\xe1\x2b\x0d\xef\xd2\xed\xf7\x0d\xb3\x1e\x65\xe1\xce\x6a\xe7\x46\x3a\x15\x34\x86\x91\xe9\xaf\xb4\xc7\xc3\x01\x4a\xef\x7d\x5a\xff\x91\xe9\x1d\x8a\xd2\xfd\x24\x5a\xc4\xac\xd3\xf2\x3d\x4c\x32\x60\xac\xd7\x25\xdb\x2c\xac\x5e\x50\xae\x1e\xbf\xf5\x43\xe5\xa3\x65\x94\x42\xdd\xff\xf2\xfc\x00\xfe\x02\x27\x91\x5b\x4d\x4e\x60\x15\xbf\xc3\xfe\x2f\xbf\xae\xb6\x1e\x87\x8f\x9d\xa1\x6b\x90\xce\xef\x22\x46\x6e\xa6\xb7\xc8\xb3\xfe\xaa\xc9\x69\x55\xe6\x10\x1a\x81\x27\xe7\x8f\xda\x25\x9b\xc7\x21\xec\x2a\x49\x98\x38\x78\x06\x4f\x49\x6b\x49\x04\xdb\xd6\x83\xce\x0e\x61\xd5\x78\x28\x8c\xa7\x55\xa9\x9d\x47\x9e\xa5\xe4\xc6\x79\x1b\xe5\x47\xcc\x0d\x61\xe7\x30\xf9\xb7\x7b\x85\x33\xfa\xf4\x29\x7a\xfc\x40\x74\x9f\x9c\xb7\x2d\x6e\xb8\xd8\x63\x3e\xef\x3d\xfe\x70\xe0\xdf\x87\x23\xbf\xbe\x04\x1f\x1e\x42\x7f\xe9\xd9\xf3\x43\xcf\x8e\x89\x77\xe4\x02\x85\x9d\x36\x7c\xce\xb3\x4f\x87\x0c\x25\x6e\xdd\xb6\x2a\xbe\x2f\xd9\x2d\xc9\x42\x07\xd1\x25\x42\x54\x82\xc9\xf9\x41\xa7\x9f\x44\xbd\xa0\x2d\x61\x79\x41\x55\xfa\x81\x1d\x41\x15\x76\xbb\xe6\x9d\xcc\x3f\xb4\xb3\xab\xd1\x81\xd5\x31\x0c\x1d\x9b\xdb\xa9\x24\xbd\xc5\x1a\xb9\xef\x27\xf7\xc9\x10\x76\x66\x07\xac\x97\xb5\xfb\x22\x47\xfb\xfb\xc3\x04\x45\xaa\x2a\x69\xf5\xe4\x05\x48\xf8\x73\x5b\xdb\x5f\x80\xfc\xe6\x9b\x10\xb9\x56\x54\x8e\x89\xfb\x8e\xb4\xae\x9f\x05\x88\x10\xee\x4e\x7a\x9e\x9c\xef\x2d\xff\x3e\x5f\xa3\x5c\x3e\x4e\xd8\x8d\x35\x71\xfd\x21\xca\xee\x6c\x0c\xe1\xd0\xbf\x23\x36\x7c\xfb\x95\x6c\x08\x77\x79\x8c\x0e\x32\x07\xf9\xcd\xe9\x2e\x2c\xf1\x74\x68\x80\x17\x34\x65\xf4\xc3\x9f\x17\x8d\x0d\x3f\x73\xf4\x8f\x5e\x71\xf0\x40\xab\xdc\xc2\x7e\x51\xc4\x16\x65\xe3\x43\x11\xcc\x68\x24\xf8\xac\x84\x8d\xc7\xd4\xbf\x80\x92\xba\xa0\x8e\xb6\xed\xec\xbd\x81\x5c\x35\xae\x84\x55\x93\xe7\x68\x5d\x1a\x1b\xff\x76\xee\x32\x79\x2e\x85\xe4\x0a\x36\x7c\x4b\x35\xd6\x84\x9f\x50\xba\xdf\x0f\x0a\x03\xbc\x96\x90\x19\xe1\x52\x78\xd9\xf8\x60\xc3\x97\x68\x31\x4c\xf5\xf1\x07\x94\x35\x5a\x47\x08\x99\x74\xa2\x69\x7f\xd6\xd9\x94\x18\x7e\x32\x0a\xe3\x79\x68\xec\xa0\xe4\xd4\x12\x6f\x41\x56\x35\x35\x4c\x46\x87\x49\x85\xa6\x09\x1a\xb3\x2b\x17\xb0\xfb\xc2\x54\x35\x41\xd3\xf8\xe8\x26\xe3\x31\x75\x20\x16\xd7\x12\x37\x29\xaf\x6b\x57\x1b\x1f\x06\xe8\xef\xbf\x7b\x7e\x76\x72\xf2\xed\xf3\x41\x1a\x05\x26\x5d\xa0\xbf\x0a\xf7\xee\x8f\x4e\xdb\x58\xbc\x0a\xb7\x0e\xd3\xdb\x7e\xa0\x12\x0a\xb9\x56\xdb\xe1\x41\xd3\xdb\x99\x5a\x29\x53\xa4\x3a\xf8\xad\xf8\xca\xa5\x5a\x8d\xb9\xf5\x52\x28\x74\xe3\xb3\x93\x93\xef\xc7\x27\xa7\xe3\xd3\x3f\x8d\x7d\x89\xa3\x46\x79\x59\x71\x8f\x23\x67\xde\xc7\x70\x8f\x6a\x5e\xe0\xc8\xd8\xd1\xa6\xdc\x8e\xa4\x1b\x55\xdb\x91\x17\xf5\x48\x1b\x3f\xb2\xa8\x42\x23\x3d\x09\x5e\x9d\xa6\x61\xd2\xc3\x96\xd7\x25\x57\x39\x75\x50\x87\x33\x5f\x68\x6e\xbb\x51\xe0\xd5\xfc\x1a\x6a\x4e\x63\x6b\x38\x7e\x96\x86\x29\x63\x37\x90\x1a\x6a\xbc\xda\xee\xab\xfb\x2d\x89\xae\x4c\x03\x2a\xed\x7f\xde\x99\x8b\x71\xa8\x6a\x85\xfe\x30\x20\x6d\xf8\x66\xb4\x27\x26\xeb\x80\x1d\xf2\xf6\x8b\xe9\x6e\x70\x78\xa2\x3f\xf8\x9c\xa0\x17\x46\x63\x32\x60\x9f\xd8\x7f\x03\x00\x00\xff\xff\xaa\xaf\xdd\xd7\xed\x15\x00\x00") + +func testImagesAgnhostPortForwardTesterPortforwardtesterGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostPortForwardTesterPortforwardtesterGo, + "test/images/agnhost/port-forward-tester/portforwardtester.go", + ) +} + +func testImagesAgnhostPortForwardTesterPortforwardtesterGo() (*asset, error) { + bytes, err := testImagesAgnhostPortForwardTesterPortforwardtesterGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/port-forward-tester/portforwardtester.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostPorterLocalhostCrt = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x94\x4b\xaf\xba\x48\x1b\xc4\xf7\x7c\x8a\x77\x6f\xde\x78\x01\x01\x17\xb3\x78\x9a\x6e\x6e\xd2\x4a\x23\x08\xb2\xa3\x3d\x02\xc2\x01\x14\x90\x56\x3e\xfd\xe4\x7f\x26\x99\x4c\xe6\x52\xcb\xa7\x92\x7a\x16\xf5\x4b\xfd\xff\x97\x10\xb1\x9c\xc3\xff\x0c\x12\x84\x8e\xe9\x18\x10\x92\x9f\xab\x44\x1d\x07\x5b\xa1\x61\x40\x61\x15\x20\x1c\x04\x85\x13\xc0\x11\xe0\xb5\xd9\xbe\xf1\xf0\xc9\xca\x43\x8a\x4e\xc9\x10\xc5\xe5\x20\x30\xbb\xb8\xfb\x2e\x75\xca\xe9\x7a\x00\x46\x3c\xc4\x40\x48\xa4\x22\x8c\x82\x62\xc1\x3a\x22\x46\x49\x6d\x16\x1f\xc6\xf4\x84\x30\x9f\xa1\x30\xc5\x4a\xa6\x18\xde\x14\x13\x41\x31\x08\x8a\x51\x66\x81\xfe\xa1\xb8\x58\x51\x4c\x3e\xc7\x90\x6c\xa4\x1f\xc3\xec\xc4\x7f\x07\x19\x06\x9c\x9c\xbf\x7f\x47\x88\x01\x2e\x0a\xe2\x4b\x80\x0d\x03\x58\x67\x14\x05\x41\xe0\xca\xbc\x6b\xf4\xd8\xb6\xcc\xd0\xe2\x64\xb8\x6d\x6a\x95\x97\xc0\xde\x55\xfb\x76\xa7\xef\x95\xbc\xc0\x6d\xd1\xb7\x3d\x0f\xa3\xe4\xa5\xce\x62\x5d\x2f\xb9\xd4\xd6\xeb\x75\x6a\xe7\x4e\xea\x3f\x5a\xab\xfb\x9c\x48\x7c\xf1\x9e\x36\xba\x07\x77\x3a\x59\x22\x28\x2c\x78\xc9\x56\x3f\xe6\x72\x93\xdf\x9c\xb6\x1a\xd6\xd9\x2d\x31\x6f\x8f\x2c\xb9\x6a\xfb\xa0\x51\xb8\x34\x2f\x73\x21\x03\x12\x93\xcb\x76\xbd\x2b\x76\x8b\x84\xeb\x73\xfa\x44\xd1\xa3\xf3\xd2\xb9\xaa\x22\x1c\xd6\x9b\xcd\xe3\x00\xa7\x5d\x42\xab\xe0\x74\x8c\x46\x6f\xf6\xc9\xc5\xde\xe6\x9e\xba\x26\x93\xe4\x6a\x26\xd6\x46\x71\x6f\xb3\x88\xa7\x10\xb1\xa9\x58\xb7\x83\x47\xbc\x51\xd7\xc6\x05\xef\x76\xaa\xf2\x50\x1f\x8b\x59\xd3\x0a\x35\x44\x99\xea\xfb\xb7\xf9\xdc\x7e\xcd\x4d\x20\x9b\xab\xb3\x6f\x9f\xa5\xc0\xf3\x8f\x5f\xbb\xe2\x29\x78\x67\x5e\xcb\xb2\x93\x67\x55\x4f\x0f\x5c\xe9\xdb\x7d\xb1\xce\x3f\xfc\x95\x1d\xfd\xa4\x11\x68\x8f\x83\x3a\x63\x14\xe6\xef\x16\x9f\x6f\x1b\x45\xed\xdf\xea\x51\x15\x85\xc4\xdd\xfd\xf4\xce\x92\xe9\x7e\xab\xae\x7b\xea\xbf\xd2\x15\xc1\xd5\x7b\xee\x62\xbb\x6a\x4b\xb5\xeb\xee\xc7\xc8\x00\x41\x00\xb2\x43\x47\xad\x8b\xc0\xc5\x05\x9f\x83\x95\x0f\xcc\x5e\x22\x60\x58\x82\x62\x5f\x53\x44\x7f\xd5\xf7\xe5\x32\x46\x29\x74\x96\x61\x0c\x16\xb0\xc8\x44\x82\x22\x0a\xfa\x8f\x47\x04\x41\x4b\xc1\x4c\x0a\x14\x41\xae\x0b\xef\x8f\xa0\x40\x42\xc6\x55\xb8\x17\xc7\x4b\x93\xb2\xe4\x09\x1a\xd2\xd3\xb6\xe2\x9b\x8d\x8d\x6c\x1d\x00\x2c\x9b\xc0\xbf\x89\xfc\xc9\x85\xf4\x17\x2c\xf1\x0f\x0b\x56\x22\xda\xe5\x34\x31\x58\xd9\x98\xc7\x7a\xdc\x86\x10\x3f\xa6\x19\xf2\xec\xa8\x56\xaa\x80\x01\x0b\x75\xa0\xe3\x95\xe1\x6e\xfa\xbc\x6a\x89\xc9\xa6\x51\xa7\x2e\x62\x7a\xb6\x6e\x8c\x6f\x64\x25\xd3\x2d\xce\x70\x2f\xf3\x48\x97\x65\xe7\xcc\x1c\x14\x4e\x83\xd7\x78\x0d\xdb\x8d\x9b\x4b\xdf\x8f\x9c\xc4\x9f\xbc\x18\xe6\xa7\xb5\x57\x0c\x4d\xaa\x1d\xfe\x89\x92\x9b\x46\xcc\xbb\x1b\xfb\x1a\xac\xe2\xa7\xb8\xdb\xe3\x91\xf2\x5a\xaf\x74\x45\x5f\x1a\xcd\x7d\xef\x28\x78\xfb\x58\x5c\x8a\xe4\x5c\xbc\x7a\x7f\xed\xb0\xed\xa8\xed\xd8\x32\xc5\x1f\x2c\x11\x77\x5c\xd8\xa3\x3b\xf5\x46\xb7\x4b\xed\xec\xda\x18\xba\xba\xbd\x75\x6e\x6a\xa9\x83\xb5\x89\xbe\x55\xc5\x71\xc6\xe0\x82\x53\xde\x6f\xb7\xd1\xfe\x7c\x77\xf5\x5e\x5f\x33\x55\x6b\x0f\xc6\xb4\xd4\xb1\x94\x2b\xcb\xfd\x26\x5f\x34\x77\xff\x9c\x85\xd4\x83\xef\x6f\x75\x36\x42\x4d\x77\x16\xf2\xfd\xe4\xfb\x47\xf9\x63\x34\xde\x72\x13\x7d\x3d\x94\x6c\xbd\x72\x9f\x7d\x3e\x2d\x4a\x9e\xeb\xa3\x82\xa3\xeb\xf3\x7b\x96\x94\xc4\xec\x23\x7b\x78\x04\x38\xbd\x5a\x89\xe9\x78\x2d\x0c\x87\xe3\x23\xdf\x6b\x51\x13\x45\x2b\x51\x73\xb3\x28\x6b\xe7\x37\xe9\x67\x3e\xc8\x01\xff\x73\x52\x7e\x0f\x00\x00\xff\xff\x75\xaa\xd9\x75\x6f\x04\x00\x00") + +func testImagesAgnhostPorterLocalhostCrtBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostPorterLocalhostCrt, + "test/images/agnhost/porter/localhost.crt", + ) +} + +func testImagesAgnhostPorterLocalhostCrt() (*asset, error) { + bytes, err := testImagesAgnhostPorterLocalhostCrtBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/porter/localhost.crt", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostPorterLocalhostKey = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xd5\xa7\x12\xa4\x00\x02\x04\x50\xcf\x57\xac\xa7\xae\xc8\x49\x9c\x20\xc3\x90\x33\x8c\x23\x0f\x39\xc7\xaf\xbf\xda\xd5\xd7\xb6\x4d\x8b\xae\x7a\xff\xf9\x1b\x4e\x94\x55\xf3\x8f\xeb\xb1\x7f\x6c\x57\x0d\x59\x5f\xfc\xa3\x89\xc9\xbf\x06\x30\x54\x55\x9c\x6a\x95\x63\x59\x8d\x67\x1d\x91\x1d\x8b\xa3\xc9\xee\x24\x4f\x42\xe3\xbb\x79\x37\x95\xfa\xf3\x21\x72\x82\x6c\x55\xe2\x00\xc6\x7e\x85\x5b\x25\x7f\x94\xfb\x6e\xba\x25\xb5\xda\x42\x04\xf8\xcc\x51\xfa\x71\xd8\x15\xf4\xaf\x03\x87\x3c\x6d\x3f\xaa\xfb\xad\x8f\x29\x97\x3f\xb2\xfa\xd0\x19\x27\xb3\x09\x4f\xe5\xe9\x81\x40\xe5\x97\xc1\x9b\xd2\x7a\xc3\x99\xc8\x43\xb2\x9f\x8b\x77\x9b\x65\x20\xfb\x9d\x36\x03\x09\x39\xab\xf0\x74\x2f\xa0\xdb\x28\x60\x44\x71\xbe\xe6\x30\x49\xde\x50\xef\xa3\x65\x99\x8e\x69\xf9\x59\xda\xc1\x9c\x8e\xe4\x8f\x29\xa9\x84\x07\x9f\x06\xed\xd6\x55\x4f\x9f\x2b\x10\x78\xf4\xb8\x05\xf6\x81\xf1\x5a\x31\xbb\x7b\xc7\xb9\x3c\x28\x44\xe5\xb5\x39\x07\xf6\x1e\x18\x71\xb4\xd8\xda\x8c\xcb\x48\xd9\xe7\x21\xcc\x86\xb4\x4e\x34\x43\x99\x51\x81\x59\x5f\x25\x8f\xdd\x00\xa0\x8b\x50\xdc\x68\x02\x43\xf9\x95\x3b\xea\xf0\x91\xe5\xb6\xb2\xd7\xbb\x43\xce\xe6\xc8\x17\x21\x84\x3e\x07\x31\xe1\x4c\x99\xb1\xe2\x64\xca\xee\xcc\x5e\x82\x15\xe5\x66\x48\x65\xed\x72\x2a\x13\x05\xac\x3c\xb7\x75\x0b\x24\xcd\x25\xf8\x21\xcd\x6b\xba\x40\x62\x74\x1c\xcb\x56\xac\x5f\x52\x5a\xa5\xb2\x34\x8d\x4a\x38\xaa\xc0\x3a\x2c\xc7\x4e\x2a\xc7\xca\xc8\xe5\x0e\x91\xef\x90\xc7\xdc\xb2\x85\x0e\xa0\x43\xfe\xb4\x55\x7f\x86\x24\x86\x10\xe6\x6c\xbd\xa4\xc9\x55\xe1\x5b\x9c\xb9\x74\x69\xd9\x10\xe0\x1d\x63\x10\xe4\x81\xec\xcd\xaf\xa6\xd7\xe6\xc1\x05\xd5\x0b\x1b\xcb\xa7\xb1\xe3\x28\xea\xd2\x01\xf2\x0c\xb4\x9f\xf7\xcc\xa0\xb9\x1f\xf6\x81\x42\x85\x79\x2a\x6c\xf4\xab\xf4\x71\x46\x8e\xc1\x7d\x90\xb1\x61\xad\x77\xb3\x74\xfc\x7e\x43\xee\x96\x5f\x3b\xfc\x0a\x35\xed\x11\xd3\x81\xca\x53\x17\x03\xb1\x21\x3b\xe7\x6f\x2f\x9a\xee\xfe\x71\x0a\xa7\x0e\x92\xf6\x2e\xc3\xba\x69\xaf\xc2\x58\xd8\x94\xf6\x73\xcc\x2b\xbe\xaa\x14\x68\x2a\x18\xdd\xb0\x1a\x59\xd1\x7a\xa0\xe7\xd9\x5c\x4f\x3e\xed\xf4\x02\x4c\x9a\x8d\xe9\xbb\x5b\x78\x06\x77\x14\x19\x8c\x10\x89\xd3\x2f\x42\x7d\x19\x17\xb4\xce\x25\x38\x23\x9d\xbf\x79\x9d\x8e\xb9\x4a\x2e\x88\x4e\x54\x3d\x2c\xd6\x39\xd4\xec\xd5\x5d\x9b\x37\xc3\xbe\x00\xce\xcf\x92\x19\x27\xcc\xd4\x6e\x1c\xab\xaf\x73\xb3\x2c\xf5\xef\x6d\xa7\xbb\xf7\xa5\xa3\x80\x83\x50\xba\x38\xa3\xb7\x90\x73\x74\x84\x9e\xec\x2b\x7d\x7b\xed\x96\x61\xf5\x1c\x5a\xee\x52\x19\x2a\x05\xce\xce\xf0\x7a\x3a\xe0\xeb\x44\x64\xe1\xc8\x94\x7e\x4c\x3b\xbf\xd8\xa8\x8d\x75\xb6\x5a\xca\x8d\x9d\x0f\xa9\x74\x2a\xd5\x4e\xfb\x86\x75\x11\xad\xe7\x43\x8f\x1c\xae\x3a\x5a\x96\x4c\x8e\xe5\xda\x03\x03\xec\x79\x36\xb4\x73\x03\x7e\x1a\x1a\xdc\xbf\x57\x2f\x54\xa9\x6f\xdb\x64\xb0\x9c\xca\xc8\xe1\x9a\xca\x14\x35\xf6\xf7\x45\xfe\xd6\xdd\x3c\x62\xac\x83\x08\x7d\xe3\x6d\x0e\x14\x53\xea\xf9\x14\xf0\x89\xe0\x5b\xc7\x57\x41\x6a\xc1\x09\x67\x39\xc8\x60\x9a\xca\x26\x90\xd3\xac\x4d\x32\x88\xb0\x50\x6a\xe4\x19\x80\x89\xc0\xd5\x2c\x3e\x2f\xf9\x73\x3d\xd3\xae\xe1\xdb\xbf\xc5\x97\x0d\x42\x80\xc5\xa5\xed\x62\x7e\x96\x6d\x6e\xb4\x89\x0c\xce\x52\xe3\x95\x09\x06\x75\x12\x5c\x57\xa7\x11\xb1\x8b\xd5\x14\x8c\x52\x19\x18\x31\x25\x47\xe7\x5e\x8d\xdb\x63\x99\x03\x85\x5f\xb1\x2e\xce\x91\xfc\x80\x10\x14\xaa\x26\xee\xf6\xae\xc2\xaa\xc5\x7b\xf1\x5e\x23\xca\x69\x50\xd7\x0b\x6c\x6f\x3b\xac\x6a\x55\x50\x5a\x3b\xf0\x3e\xd3\x93\xd2\xdb\x6d\x07\x27\x21\x12\xe1\x41\x15\x27\x29\xe6\xcd\x28\x22\x40\xb5\x6d\x86\x2c\xbc\x1b\xde\xe7\x21\x2a\xfb\x58\x36\xd6\x84\xcf\x64\xb5\x86\xac\x6d\x8e\x30\x48\xc3\x5b\x67\x0a\xd3\x7c\x9d\x70\x0f\x23\xf5\x19\x83\x93\xd2\x9d\x1c\xed\x3a\xf3\x34\xd3\x36\x31\x00\x47\x95\xf0\x44\x54\xa2\xfc\xa6\x11\xfe\x6d\xcb\xe1\x9a\x41\x4d\x53\xf9\x49\x09\xec\xf1\x93\x8c\xd4\x85\x5d\x14\x31\xf7\xf1\xf7\x65\xec\x70\xa2\x2d\x51\x3d\x73\x92\x0c\x87\x22\xe7\xbb\xc7\xeb\x80\x13\x12\x74\x69\x64\xe6\xb0\xf3\xa9\xe6\xe3\x3d\x8e\x02\x1d\xa4\x7e\x43\x42\x01\x47\xd5\xab\xe0\xfb\x9d\x49\x0b\xb8\xd8\xcb\x25\xb8\xc8\xcf\xb7\x57\x2f\x8c\xa4\x66\xc9\xce\xd6\x9b\x1a\x9d\xa1\x80\x4f\x7d\x0b\x3b\x5a\x12\x3f\x12\xf5\x72\x47\xe0\x2a\x67\x56\x4a\x47\xe3\x6a\xe5\x3b\xe5\x45\x3b\x36\x87\x88\xef\x08\x42\x45\xae\xb5\x17\xc6\x87\xb1\xd6\x79\x74\x50\x71\xc9\xe8\xd3\xdb\x63\x59\x05\x64\xc8\xf3\xc2\xf1\xaa\x9f\xe9\x42\xf6\x58\x0c\x11\xa7\x1f\x5f\x61\x10\xbe\xc5\x57\x2a\x27\x06\x42\xc8\xf0\x72\xee\xa0\x3c\xad\x11\xb4\x03\x97\x64\x46\xef\x43\x0c\x10\xb5\x4c\x89\x6a\x80\x83\x01\x6c\x25\x1e\x50\xf3\x43\x86\xe8\x2e\x53\x28\x94\x0c\x51\x68\xfc\x08\x28\xd5\xf4\x46\x89\xa5\x05\x94\x25\x54\xae\x71\xfa\x0b\xad\x70\xb0\xdb\x03\xb7\x78\x55\x33\x3a\x31\x9d\x79\xa0\xde\x25\x9c\x08\x10\xea\xfa\x63\x27\x99\xb5\xaa\x71\x64\x2d\xb6\xf5\x16\xcd\xff\x4a\x84\x4e\xf1\x9f\x8f\xc2\x25\xc9\x74\xed\x79\x51\x6b\x05\x57\x89\x7a\x64\x83\x65\xe4\xd6\xb1\x1d\x79\xd4\x16\x1d\xac\x48\x52\x30\xe0\xf9\x42\xb5\xc2\xda\x3d\x76\xab\x61\xc9\x27\xec\xd9\xb3\x49\x2d\xe1\x8f\x79\xed\x55\xda\xab\xf8\xd5\xbb\x96\xa4\x6a\xea\x29\xee\x40\x35\x09\x22\xaf\x85\xc9\x96\xf4\x99\x0f\xdd\x98\xa6\x94\x00\x18\xb3\xf0\xca\xb3\x3b\x6c\x4b\x6e\x71\x10\xfe\x31\x31\x94\x49\x0b\x53\x45\xf4\x6d\xb4\x97\x87\x60\xf4\x97\xbb\x05\x03\xfa\x44\x29\x4e\xb1\x64\x42\x85\xf9\x7f\x81\x7f\xa4\x88\xa6\xf0\xff\xa9\xf9\x5f\x00\x00\x00\xff\xff\x45\x85\x28\xa6\x8b\x06\x00\x00") + +func testImagesAgnhostPorterLocalhostKeyBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostPorterLocalhostKey, + "test/images/agnhost/porter/localhost.key", + ) +} + +func testImagesAgnhostPorterLocalhostKey() (*asset, error) { + bytes, err := testImagesAgnhostPorterLocalhostKeyBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/porter/localhost.key", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostPorterPorterGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x57\x5d\x6f\xdb\x38\xd6\xbe\x16\x7f\xc5\x79\x05\x74\x5e\x39\xa3\xca\x4e\xba\x8b\xdd\x7a\xe0\x0b\xaf\xc7\xd9\x66\x9b\x71\x82\xc8\x6d\xa7\x28\x82\x0c\x2d\x1d\x4b\x44\x24\x52\x25\x29\x3b\x46\x91\xff\xbe\x38\xa4\xfc\xd5\x78\x77\x66\x2e\xf7\xa6\x8d\xc4\x73\x9e\xf3\x9c\xaf\x87\x72\xff\x8c\x4d\x54\xb3\xd1\xa2\x28\x2d\x5c\x0c\xce\xff\x0a\xf3\x12\xe1\x7d\xbb\x40\x2d\xd1\xa2\x81\x71\x6b\x4b\xa5\x4d\xc2\xd8\xb5\xc8\x50\x1a\xcc\xa1\x95\x39\x6a\xb0\x25\xc2\xb8\xe1\x59\x89\xd0\x9d\xc4\xf0\x11\xb5\x11\x4a\xc2\x45\x32\x80\x88\x0c\xc2\xee\x28\xec\xfd\xc4\x36\xaa\x85\x9a\x6f\x40\x2a\x0b\xad\x41\xb0\xa5\x30\xb0\x14\x15\x02\x3e\x65\xd8\x58\x10\x12\x32\x55\x37\x95\xe0\x32\x43\x58\x0b\x5b\xba\x20\x1d\x44\xc2\x3e\x77\x00\x6a\x61\xb9\x90\xc0\x21\x53\xcd\x06\xd4\xf2\xd0\x0a\xb8\x65\x0c\x00\xa0\xb4\xb6\x19\xf6\xfb\xeb\xf5\x3a\xe1\x8e\x65\xa2\x74\xd1\xaf\xbc\x95\xe9\x5f\x5f\x4d\xa6\xb3\x74\xfa\xfa\x22\x19\x30\xf6\x41\x56\x68\x0c\x68\xfc\xda\x0a\x8d\x39\x2c\x36\xc0\x9b\xa6\x12\x19\x5f\x54\x08\x15\x5f\x83\xd2\xc0\x0b\x8d\x98\x83\x55\xc4\x73\xad\x85\x15\xb2\x88\xc1\xa8\xa5\x5d\x73\x8d\x2c\x17\xc6\x6a\xb1\x68\xed\x51\x81\xb6\xac\x84\x81\x43\x03\x25\x81\x4b\x08\xc7\x29\x5c\xa5\x21\xfc\x63\x9c\x5e\xa5\x31\xfb\x74\x35\x7f\x77\xf3\x61\x0e\x9f\xc6\x77\x77\xe3\xd9\xfc\x6a\x9a\xc2\xcd\x1d\x4c\x6e\x66\x3f\x5f\xcd\xaf\x6e\x66\x29\xdc\x5c\xc2\x78\xf6\x19\xde\x5f\xcd\x7e\x8e\x01\x85\x2d\x51\x03\x3e\x35\x9a\xb8\x2b\x0d\x82\x4a\x87\x79\xc2\x52\xc4\xa3\xe0\x4b\xe5\xc9\x98\x06\x33\xb1\x14\x19\x54\x5c\x16\x2d\x2f\x10\x0a\xb5\x42\x2d\x85\x2c\xa0\x41\x5d\x0b\x43\xcd\x33\xc0\x65\xce\x2a\x51\x0b\xcb\xad\x7b\x7e\x91\x4e\xc2\xce\xfa\x8c\xf5\xfb\x30\x06\x2b\xe4\x06\x16\x42\x72\xbd\xf1\x71\xd0\x58\x87\xa7\xb4\x35\x09\xeb\xf7\xc9\xec\x0e\x79\x6e\x00\xe5\x0a\x56\x5c\x9b\x9f\x9c\x21\xae\x50\x6f\xe8\x79\xdb\xc0\xa5\xd2\x35\xa4\xd3\xbb\x8f\xd3\x87\xdb\x9b\xbb\xf9\xc3\xaf\x31\xac\x4b\xd4\x08\xbf\x52\xf5\x38\xac\x78\x25\x72\x42\x23\x68\x90\x6d\xbd\x40\x1d\xbb\x07\xd4\x60\x2c\xd7\x96\x98\xc3\xbb\xf9\xfc\x16\x0c\xea\x15\x6a\x58\x97\x22\x2b\xfd\x83\x71\x31\x3a\x0a\xff\x6f\x08\xad\x45\x42\x13\x12\x34\x9a\x46\x51\xa1\xac\x02\x2e\x37\xf0\xb5\x45\xbd\x49\x18\x6b\x78\xf6\x48\x55\xf2\x31\x18\x13\xb5\x0b\x1d\xb1\x20\x5c\xd6\x36\x64\x41\x58\xa9\x82\xfe\x93\x68\xfb\x34\x6f\xf4\xb7\x32\xf4\x2f\xb5\x5a\x16\x26\x64\x2c\x08\x0b\x61\xcb\x76\x91\x64\xaa\xee\x0b\x53\x8a\x9c\xaf\xb9\xe5\xba\xed\x9b\xcc\x7b\x1c\x9c\x9b\x66\x79\xfe\xa6\x9f\xa9\x85\xe6\x21\xeb\x31\x96\x29\x69\x2c\xd8\xac\xb9\xd5\xb8\x14\x4f\x30\x82\xf0\xa0\x42\x61\x77\x4e\x40\xdf\x1b\xa4\x93\xf9\xed\xb1\x95\xad\xcc\xf7\x46\xf3\xeb\x74\x6b\x43\xa5\x98\xd4\xf9\xad\x2f\xa7\x30\xb4\xa1\x7e\x11\x0a\x59\x2a\x63\x61\x42\xa4\x12\x46\x0d\xdb\xdb\x8d\xe0\x07\x47\x36\x99\xa8\xba\xe6\x32\xff\xc6\x82\x0f\x06\x87\x00\x10\xfa\xa2\x85\x31\x0b\xd2\x52\x69\x3b\x84\x30\xf5\x7d\xa0\x2d\x43\x43\x5b\x90\x73\xcb\x69\x15\xdc\xac\x6c\xa7\x13\x73\x6a\xc9\x74\xf6\x91\x1a\x25\x68\x01\x0d\x81\x5c\x2b\x59\x0c\xe1\xb7\x3f\x83\x81\x72\x25\xb4\x92\x35\x4a\xbb\xc7\x3a\x31\x6d\xdf\xa8\x04\xf1\xb6\x16\xf1\xae\x72\xcf\x0f\x5f\x66\xb3\xd9\xec\x3e\x01\x16\x30\x2c\x86\xec\xec\x70\x3c\xdf\x0e\x06\xe7\xf0\xda\x0f\x17\xcc\x27\xb7\x90\x29\x29\x31\xf3\x1b\xd3\x11\x02\x32\xda\xb9\xed\xaa\xfd\x76\x30\xb8\xd8\xbb\x5e\xa7\xaf\x51\x66\x7a\xd3\x50\x3a\xff\x05\xe8\x62\x07\xb4\xef\xed\xdb\xc1\xe0\xcd\x0e\x89\x5e\xff\x27\xe7\x37\x8c\x91\xae\x0b\x99\x55\x6d\x8e\x39\x84\x95\xca\x78\x45\x8d\x4d\x32\x6d\x43\xbf\x61\xb7\xd3\x5f\x88\x8a\x22\x83\xf9\x75\x0a\x19\x6a\xeb\x65\x38\x1d\xcf\xe0\xea\xd6\x40\x78\x7e\xf1\xb7\x64\x90\x0c\x92\xf3\x90\x54\x02\xc2\x2f\xc3\xe1\xf9\x7d\x18\x93\x0c\x09\x9a\x78\xaa\xfb\xbf\xb8\x6c\x49\x0e\x2e\x06\x7f\xff\x4b\x0c\x05\x4a\xd4\x9c\x72\x5b\x6a\x55\x43\x68\x74\xd6\x77\xd9\xaa\xbe\xad\x4c\x98\x30\x36\x57\xee\x3a\xe0\x90\x8b\xe5\x12\x35\xb5\x8b\x22\xf7\x1f\x71\x13\x43\xad\x5a\x69\xa9\x63\x35\x08\x69\x95\xeb\x5d\xa3\x72\x17\xdd\xa0\x3b\x81\x70\x32\xbd\x9b\x3f\x5c\x5e\x5d\x4f\x3b\x56\xef\xa7\x9f\xbb\xc7\xd3\x33\xd0\xe1\xe4\x68\x9c\xdc\x37\xdc\x96\x26\xf9\x2d\x66\xc1\x58\x17\x66\x08\x7e\xa4\x7f\xe1\x4f\xa2\x6e\xeb\x19\xbd\x8b\x06\xbd\x98\x05\x77\xad\x1c\x02\xd4\x5c\xc8\x98\x3d\x33\xb6\x6c\x65\xe6\x9e\xa2\xac\xce\xe1\xec\x68\x11\x62\xe0\xba\x30\xf0\xe5\xde\x0b\x41\x0f\xbe\xb1\x80\x54\xef\x21\x86\xd5\x23\x0c\x47\xa0\xb9\x2c\x10\x94\x49\xa6\x9e\x61\xe4\x4c\x82\x7e\x1f\x6e\x5b\xeb\xc5\xd1\x96\x54\xd0\x05\x2e\x95\xf6\x7a\xbe\x14\xda\x58\x18\x81\x11\x85\xa4\x42\x37\xa4\x79\x5f\x06\xf7\xb1\x53\x6c\xe7\x7c\xe0\x88\x15\xdd\x3b\x5b\xab\xf3\x7b\x88\x70\x85\x12\x84\x9b\x7f\x8d\xc0\x35\x42\xdd\x56\x56\x34\x15\xc2\xc8\xbb\x67\x25\xd7\x3c\xb3\xa8\x4d\x2f\x61\x41\xe0\x5c\x89\x6d\x27\x67\x49\xda\x54\xc2\xce\xa2\xd5\x63\x0c\xe1\x28\x8c\xe1\xa2\xc7\x82\xe0\x11\x37\x64\xb3\x65\xc3\x82\xc0\x89\xeb\xfe\xdd\xf9\x3d\x63\x41\x60\xd6\xc2\x66\xa5\xcb\x32\xe3\x06\x77\x98\xef\x78\xa7\x4b\x91\x6b\xf8\x4e\xec\x7a\x43\x16\x04\x81\x1b\xe0\x03\x06\x73\x2d\xea\xd3\xe6\x64\x5d\x28\xbf\x0b\x24\x4f\x11\xb9\xc6\x5e\xe8\x7b\xbf\x13\x74\xaf\xa0\x7f\x2c\xea\x81\xfd\x61\x58\xda\xc0\x3f\x1b\x7a\x27\xcb\x7f\x30\xdf\x9d\xf9\x61\xe0\xf9\x75\x7a\x2a\xee\x33\x0b\x9e\x19\x0b\x0c\x56\x98\x59\xf8\xf6\xbc\x9b\xda\x93\x45\x82\x83\x59\x75\x5d\xff\x81\xee\xb4\xc4\x49\xae\xa6\xb6\x8d\xf3\x5c\x0f\x21\x1c\x38\x05\x18\x0c\x43\xf8\xd1\xe9\x4b\xcc\x82\xe0\x1d\x97\x79\x85\x7a\xe8\x3e\xbb\x92\xee\xe9\xb2\x95\x59\x44\xf1\xa2\xb5\x7f\x7f\xd7\x5d\xb4\x9f\xb4\xb0\x74\x79\x6b\x38\xeb\xde\x3b\x39\xf7\x2b\x10\x2c\x6b\x9b\x5c\x36\x5a\x48\x1b\xad\x0f\x93\xa1\x15\x7c\x66\x41\xa5\x8a\xe4\x96\x4e\x97\x51\xd8\xdd\xf3\x5b\xa1\x7b\xf5\x15\x96\x5c\x54\x98\x0f\xe1\xd5\x2a\xf4\x1f\x07\x31\x98\xe4\x5a\x18\x8b\x72\x2c\x73\x97\x4b\xd4\xeb\x1d\x17\xe2\x44\xf5\xfe\x47\x6a\x41\x3a\x79\x49\x5f\xd0\xc3\x11\x69\xc9\x3f\xd1\xa2\x5c\x45\x07\x7a\xd8\x63\x81\x58\x42\x85\x32\xda\x9a\xf6\x60\x34\x82\x81\x5f\xc3\xad\xf7\xe8\xfb\xfb\xc0\x81\x3f\xe2\xe6\x04\xf6\x4e\x5b\xf7\xd0\x9d\xe1\x01\xf2\xd6\xf5\x08\xf8\x11\x37\xe1\x8b\x0e\xda\xca\xc0\xcb\x2e\xba\x4b\x67\x4b\x6f\xf4\xea\x6b\x0c\x1d\xe2\xe8\x74\x8b\xb7\xa6\x3b\xbb\x97\x5d\x9f\x5f\xa7\xd1\x0b\xb3\xef\x27\xe1\xd4\x02\x1f\x8d\x82\x63\x4a\xbd\x47\x63\x62\x40\xad\xdd\xae\x66\xbe\x9f\xaa\xf2\x08\x74\x1e\x85\xee\xf3\x2e\x3e\x18\x91\x1f\x09\xd4\x57\x8d\x1c\xff\x6f\x04\x52\x54\xae\x5c\x54\x90\x4b\x6e\x79\x15\x85\x69\x66\x9b\x61\x97\x22\xdd\x53\xda\xc3\x02\xf7\x31\x13\x72\x55\x7a\x18\xba\xe0\x3d\xbf\xdf\x95\x4b\x94\x86\xe8\x90\x90\x4f\x9f\xf8\xec\xb8\x1c\xd1\xff\x3d\x26\x97\x3b\x0e\x1e\xdf\x7d\x5f\x9c\x88\x7f\xd4\xce\x94\xbe\xc3\x31\xf7\xdf\x22\x3e\x5c\xd8\x63\x2c\xc8\x71\x89\x1a\xb6\x44\x93\x49\xa5\x0c\x46\xbd\xed\x7b\xb7\x17\xbd\x1d\x81\x1d\xd8\x1e\x04\xf0\x49\x58\xcc\x69\xe8\x9e\x23\x02\xa4\xcb\xd4\xcd\xb0\x92\x72\x97\xf7\x0e\x7f\x9c\xd1\x0f\x4a\x97\x3b\xad\xcb\xcb\x3c\x4f\x27\xca\x9d\xdb\xe9\x44\x29\x53\xd2\x5b\xc7\x95\xa2\xc2\x99\x2b\x33\x19\x4f\x94\x94\xdd\xc2\xfa\x84\xe8\x7c\x9f\xe4\x41\x56\x95\x8c\xc2\x14\x65\x4e\x17\xf4\xf6\x67\x47\xe8\x4c\x1e\x7c\x16\x23\xef\xeb\x54\x21\xfa\x72\xbf\xd8\x58\x8c\xfc\xda\x3b\xab\x13\x99\x1c\x83\xef\x93\x31\x28\xf3\x7d\x8c\x5d\x1a\x41\xa0\xd1\xb6\x5a\xd2\x9f\xcf\x2f\xb8\x6d\x55\x89\xbc\xad\x23\xf6\xec\x92\x75\x9d\x7e\x66\xff\x0e\x00\x00\xff\xff\x1c\x06\xe4\x0d\x2e\x10\x00\x00") + +func testImagesAgnhostPorterPorterGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostPorterPorterGo, + "test/images/agnhost/porter/porter.go", + ) +} + +func testImagesAgnhostPorterPorterGo() (*asset, error) { + bytes, err := testImagesAgnhostPorterPorterGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/porter/porter.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostResourceConsumerControllerControllerGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\x6d\x6f\xdb\x46\xf2\x7f\x2d\x7e\x8a\x29\x01\x17\x64\xca\x90\x4e\xff\xc0\x1f\x85\x52\x1f\xa0\x28\x71\x2b\xd4\xb2\x7d\x92\xdd\xa0\xb8\x1e\x0e\x2b\x72\x44\x2d\x42\xee\xb2\xbb\x4b\x2b\x3e\xd7\xdf\xfd\xb0\xcb\x07\x91\x12\x29\x29\xb6\xdb\xbb\xc3\xf9\x45\x24\x71\x66\xe7\xf1\xc7\xdf\x2c\x97\x09\x5e\x59\x63\x9e\xdd\x0b\x1a\xaf\x14\x7c\x7b\xfa\xe6\xff\xe1\x66\x85\xf0\x53\xbe\x40\xc1\x50\xa1\x84\x51\xae\x56\x5c\x48\xdf\xb2\x2e\x68\x88\x4c\x62\x04\x39\x8b\x50\x80\x5a\x21\x8c\x32\x12\xae\x10\x4a\x89\x07\x3f\xa3\x90\x94\x33\xf8\xd6\x3f\x05\x47\x2b\xd8\xa5\xc8\x76\xdf\x5a\xf7\x3c\x87\x94\xdc\x03\xe3\x0a\x72\x89\xa0\x56\x54\xc2\x92\x26\x08\xf8\x39\xc4\x4c\x01\x65\x10\xf2\x34\x4b\x28\x61\x21\xc2\x9a\xaa\x95\x71\x52\x9a\xf0\xad\x5f\x4a\x03\x7c\xa1\x08\x65\x40\x20\xe4\xd9\x3d\xf0\x65\x53\x0b\x88\xb2\x2c\x00\x80\x95\x52\xd9\x30\x08\xd6\xeb\xb5\x4f\x4c\x94\x3e\x17\x71\x90\x14\x5a\x32\xb8\x98\x8c\x3f\x5c\xce\x3f\xbc\xfe\xd6\x3f\xb5\xac\x5b\x96\xa0\x94\x20\xf0\xb7\x9c\x0a\x8c\x60\x71\x0f\x24\xcb\x12\x1a\x92\x45\x82\x90\x90\x35\x70\x01\x24\x16\x88\x11\x28\xae\xe3\x5c\x0b\xaa\x28\x8b\x3d\x90\x7c\xa9\xd6\x44\xa0\x15\x51\xa9\x04\x5d\xe4\xaa\x55\xa0\x2a\x2a\x2a\xa1\xa9\xc0\x19\x10\x06\xf6\x68\x0e\x93\xb9\x0d\xef\x46\xf3\xc9\xdc\xb3\x3e\x4e\x6e\x7e\xbc\xba\xbd\x81\x8f\xa3\xd9\x6c\x74\x79\x33\xf9\x30\x87\xab\x19\x8c\xaf\x2e\xdf\x4f\x6e\x26\x57\x97\x73\xb8\x3a\x87\xd1\xe5\x2f\xf0\xd3\xe4\xf2\xbd\x07\x48\xd5\x0a\x05\xe0\xe7\x4c\xe8\xd8\xb9\x00\xaa\x4b\x87\x91\x6f\xcd\x11\x5b\xce\x97\xbc\x08\x46\x66\x18\xd2\x25\x0d\x21\x21\x2c\xce\x49\x8c\x10\xf3\x3b\x14\x8c\xb2\x18\x32\x14\x29\x95\xba\x79\x12\x08\x8b\xac\x84\xa6\x54\x11\x65\x7e\xef\xa4\xe3\x5b\xaf\x02\xcb\xca\x48\xf8\x49\x1b\x11\x28\x43\xce\x64\x9e\xa2\x08\x95\x48\x2c\x8b\xa6\x19\x17\x0a\x1c\x6b\x60\x2f\x53\x65\x5b\x03\x3b\xe1\xb1\xfe\x60\xa8\x02\xdd\x97\xea\x7b\x2e\x12\xfd\x55\x2a\x11\x72\x76\x67\xbe\xde\xb3\xd0\xb6\xac\x81\x1d\x53\xb5\xca\x17\x7e\xc8\xd3\x40\x66\xcb\x37\xff\x17\x84\x7c\x21\x88\x11\x7d\xfa\x4e\xfa\x94\x07\x9f\x6a\x8c\x06\x0a\xa5\x0a\x68\x4a\x62\x94\x81\x40\xc9\x73\x11\xe2\xeb\x2a\xa6\x20\xe4\x69\xca\x99\x6d\xb9\x96\x15\x04\x30\x4e\xa3\x59\xa9\x32\x2e\x35\xc6\x9c\x29\xc1\x93\x04\x85\xee\x53\x2e\x4b\x04\xc4\x6c\xc5\xa5\x82\xb1\x76\xec\x5b\x77\x44\x1c\x58\x7b\x06\x5f\x9b\x20\xfd\x31\x4f\x53\xc2\xa2\x07\x6b\x70\x2b\x71\x08\x00\xf6\x4e\x50\xfa\x4b\xb9\xce\xf6\xac\xc1\x7c\xc5\x85\x1a\x82\x3d\x57\x44\x28\x09\x04\x7e\xbc\xb9\xb9\x06\x89\xe2\xce\x14\x9e\x28\x90\x99\x40\x12\x15\x18\x45\xa9\x75\x04\xcf\x59\x04\x95\x65\xa8\x2c\x4b\x6d\xef\x82\xb3\x78\x08\x2f\x63\xcf\x37\x8c\xd0\x34\xb0\x22\xb2\xc0\x13\x49\x11\x90\x45\x19\xa7\x4c\x19\xd8\x40\x2e\x35\x22\x4a\x39\x67\x1a\x73\x64\xcd\x8a\x82\xea\x4b\xbf\xee\x96\xe2\x57\x1b\x64\xbe\x08\x8b\x9a\xf9\x3a\xfa\x91\x88\xe5\x10\xa0\x28\xe6\x94\x7c\xa6\x69\x9e\x5e\xea\x8b\xce\xa9\xeb\x59\x83\x59\xce\x74\x51\x53\x42\x99\x67\x3d\x5a\xa6\x33\x8e\x35\x30\x98\xeb\xfa\xa3\x4c\x59\x83\xca\xdb\xf5\xb6\x56\x4b\x3a\x47\x71\x47\x43\xbc\xd4\x89\x99\x3f\x7d\xcb\xb2\xb8\x53\x41\x66\x24\xc4\x4a\xc1\xb5\xac\x65\xce\x42\xa0\x8c\x2a\xc7\x85\x07\x6b\xb0\x17\x2b\xfe\x79\x42\x62\xe9\xb8\xfe\x84\xa9\x9f\x89\x70\xbe\xd6\xc1\x7b\x60\xeb\x0f\xdb\x83\xef\x4e\xbf\x3b\xf5\xc0\x36\xb1\xb2\x3c\x5d\xa0\xf0\x6d\xf7\x4b\x4d\x36\x33\xf6\xc0\xae\x91\xd7\xeb\x43\x33\xe9\xa6\xeb\xc7\x3b\x9c\x9b\x12\xb4\x7c\x36\xca\xd4\x74\x2d\x8b\xcb\xaf\x19\x49\xd1\xf6\x3a\x6e\x0b\x7d\xd1\x14\x9f\x2f\xa1\x54\xd6\x21\x69\xba\xd7\x24\xd5\x01\xce\x97\x0a\xd3\x74\xb3\x2f\x56\x23\xd4\xb1\x45\xb8\x24\x79\xa2\xaa\x30\x0b\x08\x7c\x49\xac\x8f\x25\x4e\x34\x78\x9d\x30\x8d\xe0\x55\x8b\x32\x3c\x20\x22\x96\xf0\xb7\xbf\x17\xb0\x32\x40\x4a\x63\x01\xc3\x33\x60\xb8\xde\x24\xe5\xb8\xd6\x20\xe1\xb1\x7f\x4e\x14\x49\x1c\x4d\xa9\xfe\x05\x95\x0a\xd9\x88\x45\x3a\x29\x74\x96\xa9\xf2\xe7\x99\xa0\x4c\x2d\x1d\x7b\x78\x12\xd9\x1e\xe8\xc6\xbb\x1e\xa4\xb1\x70\x4d\x20\xea\x3e\x2b\x22\x2e\xf9\x4b\x2a\x91\x87\x4a\xbb\x14\x28\x33\xce\x24\x7e\x14\x54\xa1\xb8\xe0\xe1\x27\xd0\xc4\xec\x4f\x73\x85\x9f\xad\xc1\x9a\x50\xf5\x83\xe0\x79\xb6\xb9\x8b\x8c\xf8\x63\x75\xbd\x4e\x73\x2b\x68\x9d\x6d\xed\xee\xc1\x1a\x84\x3a\xb1\xaf\x37\xd7\x1e\x1e\xb5\x6f\x95\x0b\x06\x61\x6d\xc3\x09\x9b\xcb\x5c\x30\xf9\x69\x3a\x72\xd6\x66\xc8\xfb\xb3\x56\xb4\x9e\xa6\x34\x78\x55\x4a\x0c\xb9\x99\x32\xd2\xa5\x16\xf8\x53\x54\x2b\x1e\xc1\x57\x67\x60\x5f\x5f\xcd\x6f\x6c\x2d\x1a\x18\xe5\x0f\x42\x70\xe1\xac\x3d\x28\xe6\x85\xff\x8e\x44\xe5\x7a\xaf\xf0\x33\x57\x44\xe5\x72\x73\xd9\xb5\x06\x65\xb4\xd6\xe0\xd1\x1a\x04\x01\x64\x44\x48\xdd\x7b\x6d\xb9\x62\x56\x88\x88\x22\x86\x1b\x6f\x67\x17\xe6\x87\x89\x05\x85\xe9\xaa\x0e\xe9\x9a\x08\x89\xe7\x5c\xa4\x8e\xfb\xd6\x5c\xff\xea\x0c\x18\x4d\x3a\x22\x43\x21\xca\x1f\xee\xd1\x31\xad\x08\x8b\x92\x1a\x85\xe3\xeb\xdb\xba\x14\xb7\xb3\x0b\xff\x9a\xa8\x15\x9c\x9d\x55\x39\x8f\x6b\xad\x51\x14\x99\x7d\x85\x0e\x22\xf4\x0b\x23\x1b\xa9\x0e\x46\x9b\xd0\x51\x1f\x72\x39\xc5\xf4\x08\x97\x53\x4c\xf7\xb8\x9c\x62\x7a\x94\xcb\x45\x9e\x66\x53\x54\x82\x86\xfb\x5c\xbe\xab\xb5\xba\x5c\x6e\xa4\x7b\x5c\x76\x22\xe6\x96\x7d\x62\x7c\xcd\xce\x73\x16\xea\x8d\x53\xab\x45\x97\x5c\x9d\xeb\x01\xeb\xf6\xe2\x7a\xb7\xc6\xdd\xf0\xfe\x2d\x47\x71\x0f\xb9\x48\xfc\x9f\x49\x92\xa3\x34\xe8\x0e\x02\x88\x51\xe9\x2d\x69\x39\x91\x0a\xd8\xe9\x9d\x5f\xb3\xf3\x51\x2e\xcc\x9e\x6e\x8e\x61\x41\x87\x1a\x83\xc6\xa0\xff\x03\x2a\xa7\xcc\xe3\xfd\x46\xeb\xaf\x5a\xe6\x5a\x83\x94\x26\x09\x0d\xb9\x40\xb9\x67\xdd\xb4\x56\xaa\x96\x95\xf7\xc0\x9c\xfe\x13\x27\x6c\x7a\x8c\x8d\x59\xf7\x8a\xca\x20\x5d\xc2\x6e\x0e\x67\x67\x60\xdb\xf0\xfb\xef\xb0\x13\x65\x2d\xd9\x1f\x48\xa1\xd6\xcb\x04\x97\x5c\xfd\x40\xef\xb0\x6e\xec\x48\xc4\x79\x8a\xec\x38\x5e\x30\xbd\xd1\xdb\x5b\x14\x25\x17\x38\x45\x87\x64\xf1\x28\xa1\xa4\xbb\xaf\x4d\x5e\x33\x5f\x13\x98\x2e\x5b\xb9\x63\xf6\x47\x8a\x53\x67\xa7\x20\xad\x7e\x79\x8d\xaa\x74\xaf\xdf\xae\x5a\x7f\xdf\xbc\xbe\x3a\x76\x1b\xde\x5b\xf4\x9d\x66\x16\x36\x4a\xee\x6b\x35\x73\x5b\xb2\x37\x88\x83\x6a\xf0\xfd\x19\x9c\xf6\x37\x7b\xc2\x42\x2e\x04\x86\xea\x89\xdd\x0e\x79\xce\x94\x2e\xc5\x26\x7e\x08\xfa\x62\x31\xa3\x76\x5b\xfb\x35\x18\x1b\xaf\x7a\xd7\xe8\xd9\x7e\x5e\xce\xf6\xb5\x07\xf6\x6c\x0c\x29\x61\x24\x46\x31\x04\x89\x2c\xd2\x90\x3e\xb9\xdb\x6c\xed\x15\xaf\xd0\xa5\x2f\x37\x3c\x21\x09\x57\x66\x34\xbd\xa9\xa7\x55\x9f\xee\xaf\xcc\xf6\x8a\xb8\x7a\x41\xa0\x05\xa6\x1e\x74\x59\x68\xc2\x5f\xca\x42\x87\x7e\xbd\x65\xf0\x47\x51\xe4\x18\xa9\x6b\x04\x3a\xde\x0d\xe7\x95\x35\x95\x45\x3f\xf6\x3b\x6b\x40\xc7\x35\x9c\x6c\x08\x5f\xf6\x7b\x7d\xa3\x3d\xc6\x1c\x0a\xa7\x57\x0c\x77\xfc\x16\x84\xaf\x07\xfe\x8e\xf1\xa6\x31\xbd\xcf\x71\x8e\x24\x72\x33\xb9\x5e\x94\xc8\xcd\x3c\x7d\x3a\x91\x63\x4c\x16\xf7\x6a\x3f\x8f\x57\x3a\xdd\x34\x7e\x84\x85\x59\xe7\x82\x23\x49\x7c\xcb\x7e\x0f\x87\x77\x6a\xfd\x47\x50\xf8\x76\x83\x9e\x4a\xe1\x55\x86\xde\xa6\x24\x3d\x04\xde\xae\x45\x6f\xc3\xb6\x6f\xa6\xfd\x56\xf7\x95\xfb\x30\x79\xb7\x6d\xf7\x91\xf2\x97\x69\xfd\x69\xcc\x5d\x3b\xdc\x26\xee\x4a\xd0\xe0\xed\x5a\xb7\x9b\xb6\x37\x2b\x9e\xc7\xda\xd3\x77\x87\xd9\x7a\xfa\xae\x9f\xa5\x9b\x18\x78\x0e\x49\x4f\x31\x3d\x48\xd2\x1b\x5f\x2f\xc6\xd1\x1b\xb7\x2f\xc9\xd1\xcd\xad\xfe\xcb\x70\xf4\xb6\x5d\x7d\x1b\xeb\xcf\x1e\x9e\xd5\xa2\x4b\x92\x62\xc5\x8c\x11\x26\x8a\xec\x23\x74\x2d\xaf\x95\x9f\x3a\x03\x1a\xdd\x1a\xe7\x52\xf1\xb4\x08\xe4\x38\x3e\x6f\xae\x38\x96\xd0\x4d\x05\xea\xdf\xcd\x24\xbb\xc8\xbd\x23\xa6\x7f\x2f\xbb\x07\xcb\x84\x93\x8a\xe4\x77\x3b\xfc\x7c\xaa\x37\x15\xf1\x8a\xc2\xf4\xac\xda\xd4\xac\xbf\x81\x5e\x5f\x15\x0f\x12\xfc\x6e\xc9\x0f\x32\x7c\x23\xd8\x4e\xde\xde\xf5\x7f\x50\xed\xcf\xe2\x77\x13\x7a\x9b\xdb\x9b\x61\x6c\xc8\xbd\x50\xec\x20\xf6\xb6\xfa\x13\x98\x7d\x91\xa7\x19\x84\xc6\x4a\x75\x7f\x2c\xee\xb5\x52\x37\xc9\x1b\x75\xa3\xd0\xc3\xf0\xdb\x30\x78\xd6\x3e\xbc\x61\x4b\xe7\x93\x96\x56\x0f\x79\x7d\xb9\x0d\x79\x4f\x00\xcf\xa7\xfd\xbe\xa7\x8d\xde\x83\x44\x23\x6f\x3e\x42\xb7\xfc\x6b\x76\x30\x13\x41\x13\x03\xd5\x88\x39\x7d\x0b\x14\xbe\xaf\x57\xbe\x05\xfa\xcd\x37\x26\xf7\x83\xcf\x1d\x3d\x2e\x4c\x8a\x47\xa4\xd3\x9a\xcb\x07\xd3\xe9\x9c\xd0\xcf\xcb\xa6\x3d\xa1\xbb\x3d\x1c\x9b\x4c\x1b\x00\xdd\xd9\x94\x77\x4d\x41\xd5\xcd\xe4\x2a\x32\x7d\xb1\x36\xf5\xa0\x71\xd7\x4f\x2b\xbd\x50\x20\x51\xf5\xfb\x88\xdb\xd9\x85\x23\xf3\xe5\x92\x7e\x86\xea\x68\xbf\xdc\x3a\x3c\xd4\x47\xde\xad\x23\xfb\xf2\xf5\xf5\x89\xf4\x4f\xa4\x2f\xef\x42\x3f\x4c\x72\xa9\x50\xf8\x09\x0f\x49\x32\x3c\x89\x4e\xa4\x21\x82\x8e\xf7\x2d\xfd\x6f\x37\xda\xaf\x84\x8a\x78\xcc\xcd\x12\x04\xd0\x87\x4d\x23\x90\xed\x23\x6d\xf3\xb0\x93\xe5\xa5\xbd\x4c\xa7\xdf\xdf\xd3\x6e\xc0\xf7\x34\x75\x73\x36\x41\x99\xea\x6e\x62\x84\x4b\x14\xd0\xbc\xe9\xdf\x73\x86\x8e\x6b\x0d\x8a\xcd\xda\xf0\xac\xa3\xf6\x7d\xe7\xdb\xae\x35\xf8\x87\x57\x1d\xc6\x9b\x90\xae\xb9\x54\xe6\x30\xde\x58\xf3\x1a\x7b\xbf\x87\xee\x63\xce\x21\x3c\x54\x63\x75\xa2\x38\x69\x1c\xa7\xb9\x8f\xf5\xec\xda\xde\x85\x6d\x2f\x6a\xa2\xe8\xf1\xd1\xd5\xa4\xb6\xfb\x12\xc6\xd7\xff\x38\xee\xa6\x04\x1d\x2a\xb7\x2c\x29\x95\xca\x97\x0c\x8d\x97\x09\xdb\x73\xea\x9c\xd0\xa4\xf8\x1f\x0d\x21\x67\x0c\xc3\xe6\xf3\x84\x18\x56\xc3\x06\x85\xd8\x3a\xfc\xde\xb6\x53\x56\x35\x82\x93\x68\xfb\xc4\xa8\x51\x8c\x4e\x9c\x6d\x58\xa3\x0f\x67\x29\xa6\x5c\xdc\x7f\x29\xd4\x9a\x6c\xd4\xc7\x1f\xd5\x83\xdb\x1f\x89\xb4\xcd\x6b\x8d\x27\x21\xad\x75\x72\xb2\x03\xb4\x4a\xfa\x3f\x89\xb3\x2a\xf9\x02\x66\x75\x29\xba\xd9\xac\xb9\xc9\xec\xe3\xb3\xd6\x66\xec\x4b\x99\xed\x88\x81\x15\x36\x74\xcc\x3b\xee\x6a\x74\x15\xbb\xcc\x3f\x04\x85\x3b\x6f\xba\x0e\xa2\xd0\x1a\x0c\xba\x70\xd8\x7a\x50\x1d\xc2\xc3\x76\x32\x4f\x44\xe0\x66\x55\xfd\x60\xbb\xa3\xaf\x25\xff\x7d\x58\xd5\x95\xc7\xa8\x82\xd3\x89\x34\xbb\xf7\xa8\xd8\xbd\x6f\xd5\xae\x44\x80\x86\xee\xbf\x02\x00\x00\xff\xff\x15\xfe\x98\x61\x8e\x27\x00\x00") + +func testImagesAgnhostResourceConsumerControllerControllerGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostResourceConsumerControllerControllerGo, + "test/images/agnhost/resource-consumer-controller/controller.go", + ) +} + +func testImagesAgnhostResourceConsumerControllerControllerGo() (*asset, error) { + bytes, err := testImagesAgnhostResourceConsumerControllerControllerGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/resource-consumer-controller/controller.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostServeHostnameServe_hostnameGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x57\xdf\x73\xdb\xb8\x11\x7e\x26\xfe\x8a\x2d\x67\x92\x92\x1e\x06\x74\x72\x9d\x74\xaa\x36\x0f\x3a\xd9\xae\x35\x97\xb3\x3d\x92\x7c\x99\x9b\x34\xd3\x83\xc8\x15\x89\x86\x04\x58\x00\xb4\xa2\xb9\xf3\xff\xde\x59\x80\x54\xa4\xd8\xb9\x3a\x33\xf7\x62\x11\xe4\xfe\xf8\xf6\xdb\x0f\x0b\x38\x3f\x61\x33\xdd\xed\x8c\xac\x6a\x07\xaf\x4e\x5f\xfe\x05\x56\x35\xc2\x0f\xfd\x1a\x8d\x42\x87\x16\xa6\xbd\xab\xb5\xb1\x9c\xb1\xb7\xb2\x40\x65\xb1\x84\x5e\x95\x68\xc0\xd5\x08\xd3\x4e\x14\x35\xc2\xf0\x25\x83\x9f\xd0\x58\xa9\x15\xbc\xe2\xa7\x90\x90\x41\x3c\x7c\x8a\xd3\xbf\xb3\x9d\xee\xa1\x15\x3b\x50\xda\x41\x6f\x11\x5c\x2d\x2d\x6c\x64\x83\x80\x9f\x0a\xec\x1c\x48\x05\x85\x6e\xbb\x46\x0a\x55\x20\x6c\xa5\xab\x7d\x92\x21\x04\x67\x3f\x0f\x01\xf4\xda\x09\xa9\x40\x40\xa1\xbb\x1d\xe8\xcd\xa1\x15\x08\xc7\x18\x00\x40\xed\x5c\x37\xc9\xf3\xed\x76\xcb\x85\x47\xc9\xb5\xa9\xf2\x26\x58\xd9\xfc\xed\x7c\x76\x7e\xb5\x3c\x7f\xf1\x8a\x9f\x32\x76\xab\x1a\xb4\x16\x0c\xfe\xb7\x97\x06\x4b\x58\xef\x40\x74\x5d\x23\x0b\xb1\x6e\x10\x1a\xb1\x05\x6d\x40\x54\x06\xb1\x04\xa7\x09\xe7\xd6\x48\x27\x55\x95\x81\xd5\x1b\xb7\x15\x06\x59\x29\xad\x33\x72\xdd\xbb\x23\x82\x46\x54\xd2\xc2\xa1\x81\x56\x20\x14\xc4\xd3\x25\xcc\x97\x31\x7c\x3f\x5d\xce\x97\x19\x7b\x37\x5f\x5d\x5e\xdf\xae\xe0\xdd\x74\xb1\x98\x5e\xad\xe6\xe7\x4b\xb8\x5e\xc0\xec\xfa\xea\x6c\xbe\x9a\x5f\x5f\x2d\xe1\xfa\x02\xa6\x57\x3f\xc3\x0f\xf3\xab\xb3\x0c\x50\xba\x1a\x0d\xe0\xa7\xce\x10\x76\x6d\x40\x12\x75\x58\x72\xb6\x44\x3c\x4a\xbe\xd1\x01\x8c\xed\xb0\x90\x1b\x59\x40\x23\x54\xd5\x8b\x0a\xa1\xd2\x77\x68\x94\x54\x15\x74\x68\x5a\x69\xa9\x79\x16\x84\x2a\x59\x23\x5b\xe9\x84\xf3\xeb\x07\xe5\x70\x76\x92\x33\x96\xe7\x30\x05\xdb\x8a\xa6\x81\xde\xc9\x46\xba\x1d\x91\xf3\x9f\xde\x3a\xb0\x68\xee\x02\x86\x5a\x5b\xa7\x44\x8b\x54\xf2\x6a\x76\x43\xb1\x73\x6d\xe0\xf6\xec\x86\x33\xd6\x89\xe2\x23\xc1\xf0\xe6\xa3\x25\x63\xb2\xed\xb4\x71\x90\xb0\x28\xde\xb4\x2e\x66\x51\xdc\xe8\x8a\x7e\x14\xba\xe1\x27\xa7\xf6\xd2\xb3\xb6\xe1\x6f\x6e\x65\xa5\x44\x43\x0b\xbb\xb3\x85\x68\xfc\xa3\x93\x2d\xc6\x8c\x45\x71\x25\x5d\xdd\xaf\x79\xa1\xdb\xdc\x76\x9b\x97\xdf\xe5\x85\x5e\x1b\x11\xb3\xd4\x97\x31\x6b\xcb\x25\x41\xb8\x1c\xc1\x4a\x4b\x0a\x0d\x42\xa8\x14\x21\x83\x19\x39\x70\x76\x27\xcc\x43\xf3\x37\xf0\xdc\xc7\xe3\x33\xdd\xb6\x42\x95\xbf\xb2\xe8\xd6\xe2\x04\x00\x62\x5f\xda\x8b\xb1\xb6\x38\x63\xd1\xb2\xd6\xc6\x4d\x20\xf6\x21\xec\x11\x49\xf4\xf9\xad\x56\xd5\x04\xe0\x97\x47\x3e\x83\xab\x8d\xee\xab\x1a\x2e\x57\xab\x1b\xc8\x3d\x9f\x39\x51\x49\xe4\x92\x61\x25\xef\x50\x01\x91\xc7\x7f\xc9\x58\x34\x35\x95\x9d\x00\x04\x68\x3f\x8a\x4f\xb2\xed\xdb\x2b\x7a\x99\x9c\xa6\x19\x8b\x16\xbd\x22\x88\xad\x90\x2a\x63\xf7\xcc\x97\x96\xb0\xa8\xd4\x14\x17\x60\xad\x75\x43\x2b\x8a\xff\x79\xe5\x53\xef\x57\xb3\x46\x5b\x1c\x56\xbe\x67\x00\x20\x95\x23\x5a\x37\xbd\x2a\x40\x2a\xe9\x92\x14\x7e\x65\xd1\x97\x9c\xf1\x8b\x46\x54\x36\x49\xf9\xf7\x5a\x37\x3f\x09\x93\x3c\xf7\x79\x33\x88\x5d\xd1\xc5\x19\x6c\x44\x43\x03\x25\xb0\x04\x86\xb6\xe0\x1d\x1a\x2a\x99\xc7\xe9\xd3\xc2\xdd\x9e\x51\xb8\xbe\xfc\x9d\x70\x24\xc3\xa7\x86\xa3\xca\x33\x88\xbd\xf0\x32\x70\xa6\xff\x1c\x8f\x3e\x3d\x39\x8e\xe7\x2c\x83\xb8\xa0\xdf\x03\x68\x81\xcb\x42\x2b\x85\x05\xed\x3b\xda\x92\x80\xa2\x18\xda\x4d\xc3\x09\xad\xfb\xfd\x34\x73\xe5\x7c\x16\xea\x45\x06\x31\xfd\xc4\x19\xfc\xed\xbb\xbf\xbe\xce\x20\xbe\xa1\x06\xa9\xbe\x5d\xa3\xa1\x28\xf7\x43\x8f\xa8\xff\x49\xd1\x96\x70\x72\xa4\xe1\x0c\x84\xa9\x2c\xbc\xff\x40\x53\x4b\x55\xbe\x89\x72\x03\x83\x02\x9e\x3f\x87\x24\x08\xe5\xb7\xdf\xc0\x53\xed\x0d\xa2\x46\x57\xfc\x42\x38\xd1\x6c\x92\x78\x26\xd4\x9f\x87\x51\xe0\x1b\x97\x93\x92\x5a\x5d\x22\x0d\x81\x50\x54\x58\xb9\x30\x9d\xbc\xc2\x69\xc3\xa6\x2c\xba\x67\x2c\x1a\x65\x9f\x01\x1a\x03\x93\x37\xa0\x2d\x1f\x2b\x4e\x52\x8f\x86\x3e\xfc\xe9\x0d\x28\xd9\x3c\xc8\x7e\x6e\x8c\x36\xb0\x31\xba\x3d\xf6\x9b\xc0\x33\x1b\xfb\x90\x43\x1a\x5f\x14\x55\xe2\x23\x48\xeb\x50\xa1\xd9\xe7\x54\xe8\xf8\x5b\xff\x32\x19\x95\xd9\x3a\xbe\xec\x8c\x54\x6e\x93\xc4\x93\x67\x65\x9c\xf9\x1d\x97\xa6\x2c\x7a\x04\xd2\xd7\x30\x1d\xc4\x3d\x86\x14\xdd\xb3\x28\xaa\x34\x50\x6f\xc2\xd6\x89\x22\x1a\xe0\xfe\x21\x22\x79\xec\xb1\x8d\x60\xf9\xb4\xa0\xf3\x93\x38\x89\x1e\xc5\xf0\x55\x14\xa3\xe3\x31\x82\x80\x21\x38\xdd\x0c\x85\x12\x41\x83\x04\x83\xab\x77\x20\x38\x7c\x81\xad\x76\x38\x2d\x4b\x93\xa4\x7c\xe9\xd5\x92\xa4\xe9\x1e\x2e\x7f\x67\xa4\xc3\xe4\xfd\x87\xf5\xce\x61\x32\x36\xf5\xd0\xc0\x2b\x3f\xa0\xa7\xc4\xf7\x89\xef\x4c\x68\x0c\x69\x86\x6a\x10\x65\x79\xdc\x94\x05\x5a\xdd\xdc\xe1\xed\xd9\x8d\xcf\x3c\xee\xf3\x3f\xac\x39\x5f\xc4\x7f\xa4\x49\x56\x17\x1f\x1f\xd1\xc9\xed\xd9\xcd\x88\x86\x40\x7f\x5b\xe6\xcf\x21\xfe\xbf\x2a\x68\x5e\xaf\xfb\xcd\x06\x0d\xbc\x7f\xf9\xda\xd3\x7b\x2c\x96\x7f\x67\x50\x34\x72\x7a\xc8\x1c\x61\xe6\x0b\x14\xe5\x85\xd1\x6d\x12\xbc\xdf\x9f\x4e\x3e\x7c\xbb\x74\xf6\x41\x9e\x20\x1e\x6a\xe2\x23\xe2\x09\xd8\xbe\x90\x8c\x47\xe8\x25\xb3\xd2\x0f\x44\xb3\x77\x7a\x5c\x2c\x7e\xa6\x10\x6c\x1a\xd2\xfc\x52\xa8\xb2\xc1\x0b\x62\x2c\xce\x49\x1b\xf4\xb4\xf5\x17\x43\xea\x6e\xa7\x95\x45\x9f\xc8\x64\x60\xe0\x64\x78\xef\x51\xa6\x9f\x9b\x34\xd6\x70\x38\x84\x0f\x8a\x30\x07\xf2\x4f\x19\x0b\x24\x8e\x07\x63\x60\x90\xee\x49\x65\x19\xae\xbb\x35\x0a\x7f\x97\xd2\x74\x29\x2b\x90\x1e\xfc\x39\xe0\x27\xe0\xc1\xec\x17\x1b\x87\xc6\xcf\x4e\xba\x9c\xd1\xc7\x71\xfe\xfb\x90\x5b\x7e\xe9\x03\x25\x29\x9f\x96\x65\x12\xcf\xf6\x9e\xf1\xfe\x64\x19\x28\xf2\x92\x68\x1d\xbf\x18\x76\xc5\x36\x83\xd8\x23\xdf\x93\x4a\x2c\xa6\x0f\xe5\x95\xe7\xb0\xe8\x15\x84\x8b\x76\xa3\x6d\x6f\x10\xac\x0e\xf4\x05\x99\x4e\x55\x38\x86\xa0\xd4\x68\x69\xd6\xaf\x1b\x5d\x7c\x3c\x52\x77\xf2\x88\x79\xf2\xb5\x4d\x9a\x91\xec\xbc\x0c\xc6\xae\x1e\x36\x60\x39\x90\xa1\xc3\x0d\x07\x9e\x95\xfc\x5f\x6a\x74\x65\x51\xb8\xff\x59\x12\x79\x2b\x3e\x62\x52\xd4\x42\xd1\xe4\x5f\xfa\xf7\x19\xbc\xdc\xdb\xf0\x2b\xed\xe4\x66\x97\x0c\x1e\x19\x0c\x17\x46\xbe\x9c\xff\x73\x75\xbe\xf8\x31\x18\x52\xa0\x7f\xbc\x18\x6c\xbe\x40\x52\xf7\x8e\x6e\xff\x50\xea\xed\xd8\x2a\x83\x05\x4a\x8f\x2f\xb8\xd0\xa6\x08\xf8\xac\xac\xd2\x63\xff\xe9\x56\xf8\xff\x1e\xa0\xd3\x25\x94\xd8\x20\x35\x8e\x8c\x53\x16\xd1\x01\xc8\x97\x0d\x62\x97\xbc\x3e\x85\x13\x08\x6b\x2c\xb4\x2a\xe9\xc8\xfe\x5f\x00\x00\x00\xff\xff\xfe\x9a\xce\x0f\xaf\x0d\x00\x00") + +func testImagesAgnhostServeHostnameServe_hostnameGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostServeHostnameServe_hostnameGo, + "test/images/agnhost/serve-hostname/serve_hostname.go", + ) +} + +func testImagesAgnhostServeHostnameServe_hostnameGo() (*asset, error) { + bytes, err := testImagesAgnhostServeHostnameServe_hostnameGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/serve-hostname/serve_hostname.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostTestWebserverTestWebserverGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x55\x4b\x6f\xdb\x46\x10\x3e\x73\x7f\xc5\x80\x40\x53\xca\xe0\xc3\x79\x1c\x0a\x15\x39\xa8\xb2\x5d\x0b\xb1\x25\x41\x94\xe3\x04\x45\x0f\x2b\x72\x48\x0e\x42\xee\x32\xbb\x43\x53\x42\xe0\xff\x5e\xec\x4a\x71\xe3\x26\x40\x73\x5a\x71\x77\x66\xbe\x6f\xbe\x79\x28\x3b\x13\x73\xdd\x1f\x0c\xd5\x0d\xc3\xab\xf3\x97\x6f\x60\xdb\x20\xbc\x1b\x76\x68\x14\x32\x5a\x98\x0d\xdc\x68\x63\x53\x21\x6e\xa8\x40\x65\xb1\x84\x41\x95\x68\x80\x1b\x84\x59\x2f\x8b\x06\xe1\xf4\x12\xc3\x7b\x34\x96\xb4\x82\x57\xe9\x39\x44\xce\x20\x3c\x3d\x85\x93\xdf\xc5\x41\x0f\xd0\xc9\x03\x28\xcd\x30\x58\x04\x6e\xc8\x42\x45\x2d\x02\xee\x0b\xec\x19\x48\x41\xa1\xbb\xbe\x25\xa9\x0a\x84\x91\xb8\xf1\x20\xa7\x10\xa9\xf8\x78\x0a\xa0\x77\x2c\x49\x81\x84\x42\xf7\x07\xd0\xd5\xb7\x56\x20\x59\x08\x00\x80\x86\xb9\x9f\x66\xd9\x38\x8e\xa9\xf4\x2c\x53\x6d\xea\xac\x3d\x5a\xd9\xec\x66\x31\xbf\x5c\xe6\x97\xc9\xab\xf4\x5c\x88\x3b\xd5\xa2\xb5\x60\xf0\xf3\x40\x06\x4b\xd8\x1d\x40\xf6\x7d\x4b\x85\xdc\xb5\x08\xad\x1c\x41\x1b\x90\xb5\x41\x2c\x81\xb5\xe3\x39\x1a\x62\x52\x75\x0c\x56\x57\x3c\x4a\x83\xa2\x24\xcb\x86\x76\x03\x3f\x13\xe8\x2b\x2b\xb2\xf0\xad\x81\x56\x20\x15\x84\xb3\x1c\x16\x79\x08\x7f\xcc\xf2\x45\x1e\x8b\xfb\xc5\xf6\x7a\x75\xb7\x85\xfb\xd9\x66\x33\x5b\x6e\x17\x97\x39\xac\x36\x30\x5f\x2d\x2f\x16\xdb\xc5\x6a\x99\xc3\xea\x0a\x66\xcb\x8f\xf0\x6e\xb1\xbc\x88\x01\x89\x1b\x34\x80\xfb\xde\x38\xee\xda\x00\x39\xe9\xb0\x4c\x45\x8e\xf8\x0c\xbc\xd2\x47\x32\xb6\xc7\x82\x2a\x2a\xa0\x95\xaa\x1e\x64\x8d\x50\xeb\x07\x34\x8a\x54\x0d\x3d\x9a\x8e\xac\x2b\x9e\x05\xa9\x4a\xd1\x52\x47\x2c\xd9\x7f\x7f\x97\x4e\x2a\xce\x32\x21\xb2\x0c\xd6\xb2\xf8\xe4\xe2\x30\x5a\x1e\x71\x67\xd1\x3c\xa0\x01\x5d\x55\x68\x2c\x48\x60\x52\x07\x18\x71\x07\xa7\x07\x6e\x24\x1f\x7f\xbb\x57\xeb\xe2\x17\xbe\x03\x52\xd1\xff\x28\x92\x10\xd4\xf5\xda\x30\x44\x22\x08\xab\x8e\x43\x11\x84\xad\xae\xdd\xa1\x90\x33\x57\xe2\x50\x88\x20\xac\x89\x9b\x61\x97\x16\xba\xcb\x6c\x5f\xbd\x7c\x9d\x15\x7a\x67\x64\x28\x26\x9e\xe4\xbc\x2b\xb7\x68\xf9\xfe\x89\x1f\x59\xd7\x7f\xc7\x32\xd7\xaa\xd1\x96\x61\xee\x1c\x52\xf1\x20\xcd\xf7\xe6\x6f\xe1\x85\x8f\x97\xce\x75\xd7\x49\x55\x7e\x11\xc1\x9d\xc5\x29\x00\x84\x8e\x6d\xf2\x44\x37\x8c\x45\x90\x37\xda\xf0\x14\xc2\x9c\xa5\x61\x9f\xa5\x2b\x0b\xc2\xf5\x76\xbb\xf6\xa9\xfe\x6b\x7a\xa3\x55\x3d\x85\xff\x35\x75\xcd\xe2\xb4\xaf\xe9\x01\x15\x24\x89\x13\x24\x86\xb1\xa1\xa2\x79\xd2\x52\x1d\x8e\x83\x74\xaa\x30\x96\xae\x47\x9d\xd3\xdd\xe6\x06\x7a\xc9\x4d\x0c\x54\x01\x31\xe0\x9e\x2c\xdb\xd4\xc1\xcf\x4c\x6d\xa7\x00\xc7\xd4\x6e\xe5\x9e\xba\xa1\x5b\xba\xcb\xe8\x7c\x12\x8b\x60\x33\x28\x97\x62\x27\x49\xc5\xe2\x51\x78\x69\x22\x11\xf8\x72\x90\x62\xa7\x6d\x35\xa8\x02\x48\x11\x47\x13\xf8\x22\x82\xff\x0a\x97\x5e\xb5\xb2\xb6\xd1\x24\x5d\x28\x7e\x2f\x4d\xf4\xe2\xc8\x3c\x74\x47\x18\xc3\x6f\xe7\x31\x84\x6b\x17\x4e\x0d\xdd\x0e\x4d\x1a\x4e\x1c\x8e\x0f\xea\x50\xa3\xa2\x2b\xe1\xec\x99\xf2\x31\x48\x53\x5b\xf8\xeb\x6f\x37\x49\xaa\xf6\xa8\x95\x85\xe9\x5b\x3f\xed\x69\xce\x86\xfa\xb5\xc1\x8a\xf6\x51\x98\x85\xf1\xf1\xf6\x8a\x5a\xcc\x3d\xa1\xc8\x7f\x5f\x90\x71\xaf\x93\xc9\x44\x88\xc0\xdf\x5c\x4b\x55\xb6\x78\x35\xa8\xe2\xe8\xe6\x28\x44\xe3\xd1\x7b\x83\xb6\xd7\xca\xe2\xbd\x21\x46\x13\x83\x81\xb3\xd3\xfd\xe7\x01\x2d\x7b\x0a\xc1\x98\x5e\xa3\x2c\xd1\x44\x93\x34\x47\x8e\xc2\xb9\xdb\x37\xc9\x5c\x2b\x36\xba\x0d\x5d\xca\x86\x1e\x24\x63\x38\x11\x41\x90\x65\xb0\x44\x2c\xb1\xf4\x73\xd9\xea\x42\xb6\xd0\x1b\xbd\x3f\xb8\xd5\xf2\xed\xe2\x5d\x2f\x9e\xe6\x46\xc3\xa8\xcd\xa7\xf4\x07\x50\xb3\xa2\x40\x6b\xbf\x62\x25\xb3\xb6\xd5\x63\xb2\x32\x54\x93\x72\xc0\x67\x1e\xf2\xa7\x9c\xe6\x06\x4b\x54\x4c\xb2\xb5\xce\x93\xcd\x80\x3f\xef\x7c\x8b\xdc\xe8\xd2\x3b\xfe\x79\xb9\x8d\x61\xbd\xca\xb7\x31\xac\xd6\x7e\x71\xfd\x7c\x98\xa3\x89\x0f\x73\xb1\xdc\xc6\x1f\x92\xdb\x7d\xb2\xc1\xcf\x5b\xfd\x09\x55\xfc\x0e\xb1\x4f\x66\x2d\x3d\x60\x7c\x67\xd1\x24\xb3\x1a\x15\xc7\x1f\x92\x53\x29\xb0\x4c\xee\x89\x9b\xf8\x99\xf8\xb1\x3b\x51\x71\xb2\x3d\xf4\x4f\xf2\x5f\x90\xf5\x8b\x7d\x51\x25\xb7\xba\xf4\xf3\x92\xe4\xe4\xfe\x73\xac\x86\xa1\x2f\x25\x63\x52\x62\xa7\x81\xac\xfa\x95\x61\x67\x1c\xbc\xdb\x16\xaf\xcf\xdf\x58\x11\x04\xe6\x94\x4a\x7a\x81\x6d\x14\x7e\x17\xc5\xc3\x54\x36\xf5\x4d\xe7\x86\x39\x1a\x63\x30\x13\x11\x3c\xba\x8e\xab\x35\xb4\xba\x4e\xaf\x24\xcb\xf6\xd8\x90\x37\x64\x19\xd5\x4c\x95\xde\x21\xaa\x3a\x4e\xf3\xde\x90\xe2\x2a\x0a\xa7\xbf\x94\x61\x0c\x6e\x62\x26\x31\x28\x6a\x7d\xd3\x5a\x6c\xb1\x60\xf8\xf2\x28\x1e\xc5\x3f\x01\x00\x00\xff\xff\xbc\x81\x8d\x15\xc0\x07\x00\x00") + +func testImagesAgnhostTestWebserverTestWebserverGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostTestWebserverTestWebserverGo, + "test/images/agnhost/test-webserver/test-webserver.go", + ) +} + +func testImagesAgnhostTestWebserverTestWebserverGo() (*asset, error) { + bytes, err := testImagesAgnhostTestWebserverTestWebserverGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/test-webserver/test-webserver.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostWebhookAddlabelGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x53\x41\x6f\xdb\x38\x13\x3d\x8b\xbf\x62\xaa\x43\x61\x07\xae\x94\xe4\x54\xf8\x83\x0f\xfe\xd2\x14\xeb\x6d\xd6\x5e\xd8\x4e\x8a\x22\x08\x90\x91\x38\x96\x98\xd0\x24\x4b\x52\x56\x85\xc0\xff\x7d\x41\xc6\xde\xb5\x37\x29\x36\x87\xea\x26\xf2\xcd\xbc\x37\x6f\x1e\xf3\x13\x76\xa1\x4d\x67\x45\x55\x7b\x38\x3f\x3d\xfb\x08\xcb\x9a\xe0\x4b\x53\x90\x55\xe4\xc9\xc1\xb8\xf1\xb5\xb6\x2e\x63\xec\x4a\x94\xa4\x1c\x71\x68\x14\x27\x0b\xbe\x26\x18\x1b\x2c\x6b\x82\xdd\xcd\x00\x6e\xc8\x3a\xa1\x15\x9c\x67\xa7\xd0\x0b\x80\x74\x77\x95\xf6\xff\xc7\x3a\xdd\xc0\x1a\x3b\x50\xda\x43\xe3\x08\x7c\x2d\x1c\xac\x84\x24\xa0\x1f\x25\x19\x0f\x42\x41\xa9\xd7\x46\x0a\x54\x25\x41\x2b\x7c\x1d\x49\x76\x2d\x32\xf6\x6d\xd7\x40\x17\x1e\x85\x02\x84\x52\x9b\x0e\xf4\xea\x10\x05\xe8\x19\x03\x00\xa8\xbd\x37\xc3\x3c\x6f\xdb\x36\xc3\xa8\x32\xd3\xb6\xca\xe5\x33\xca\xe5\x57\x93\x8b\xcb\xe9\xe2\xf2\xc3\x79\x76\xca\xd8\xb5\x92\xe4\x1c\x58\xfa\xde\x08\x4b\x1c\x8a\x0e\xd0\x18\x29\x4a\x2c\x24\x81\xc4\x16\xb4\x05\xac\x2c\x11\x07\xaf\x83\xce\xd6\x0a\x2f\x54\x35\x00\xa7\x57\xbe\x45\x4b\x8c\x0b\xe7\xad\x28\x1a\x7f\x64\xd0\x5e\x95\x70\x70\x08\xd0\x0a\x50\x41\x3a\x5e\xc0\x64\x91\xc2\xff\xc7\x8b\xc9\x62\xc0\xbe\x4e\x96\xbf\xcd\xae\x97\xf0\x75\x3c\x9f\x8f\xa7\xcb\xc9\xe5\x02\x66\x73\xb8\x98\x4d\x3f\x4d\x96\x93\xd9\x74\x01\xb3\xcf\x30\x9e\x7e\x83\x2f\x93\xe9\xa7\x01\x90\xf0\x35\x59\xa0\x1f\xc6\x06\xed\xda\x82\x08\xd6\x11\xcf\xd8\x82\xe8\x88\x7c\xa5\x9f\xc5\x38\x43\xa5\x58\x89\x12\x24\xaa\xaa\xc1\x8a\xa0\xd2\x1b\xb2\x4a\xa8\x0a\x0c\xd9\xb5\x70\x61\x79\x0e\x50\x71\x26\xc5\x5a\x78\xf4\xf1\xff\xc5\x38\x19\x3b\xc9\x19\x33\x58\x3e\x86\x26\x2d\x15\xb5\xd6\x8f\x8c\x89\xb5\xd1\xd6\x43\x8f\x25\x29\xa9\x52\x73\xa1\xaa\xfc\xc1\x69\x95\x32\x96\xa4\x8f\x1f\x5d\x26\x74\x8e\x46\xe4\xc8\x77\x54\xf9\xe6\x2c\x65\xc9\x9a\x3c\x6e\xce\xe0\x00\xb1\xc6\xb2\x16\x8a\x6c\x97\x9b\xc7\x2a\x1c\xb8\x3c\x80\x9e\xe1\x7b\xdc\xa3\xd4\x55\xbe\x39\x4f\x59\x9f\xb1\x52\x2b\x17\x89\x91\xf3\xcf\xc2\x3a\x7f\x85\x05\xc9\x3f\xd1\x97\x35\x04\xd7\x55\x05\x23\xb8\xbf\x8d\xc1\x88\xdf\x13\xa4\xda\xa4\x43\x48\x91\xf3\x74\x00\xa9\x41\x5f\x87\xdf\xc8\xc3\xd1\x63\x2e\x43\x07\x17\xee\x36\x28\x1b\x4a\x87\xf0\x14\xc0\xc4\x3f\xc4\x9b\x00\xee\xc8\xa5\xdb\xed\x73\xd3\xbb\xfb\x48\x3e\xe6\x5c\x04\xd3\x50\xfe\x2a\x05\xf9\x21\xe9\x81\x9a\xc8\x0e\x07\xec\x8d\xe1\xe8\xe9\xcd\xb4\x96\x8c\xc4\x92\x7e\x05\x75\x9f\xb1\x3c\x87\x31\xe7\x80\x10\xc1\x3f\xb1\x2a\xbc\x9d\x90\x22\x5d\x3c\x50\xe9\xd9\xaa\x51\x25\x20\xe7\x51\x72\x0f\x2d\x6c\xce\xb2\xf1\x3e\x1a\x73\xda\x08\x6a\xfb\x70\x72\x7c\xe8\x8c\x0e\x89\x7e\x62\x49\x58\x7f\x76\xd3\x3b\xef\x67\x13\xb5\xd2\xbd\xb4\x44\x29\xc3\xb8\xc8\xf7\xb4\x7d\x96\xe8\xe2\x01\x86\xa3\xe0\x44\x53\xfa\x50\xb5\x0b\x5b\x36\x8b\x12\xfe\x20\x8f\x70\x1f\x22\x3a\x4c\xf7\xb3\x0f\xf4\x5a\x78\x5a\x1b\xdf\xa5\xf7\x2c\xd9\x3e\x6d\x59\x62\xb1\x0d\x5d\xd0\x66\x73\xfa\xde\x90\xf3\xbb\xf2\x6c\x8e\x2d\x4b\xc8\xda\x70\x1b\xba\x64\xd7\x6a\x8d\xd6\xd5\x28\x7b\x16\xdb\x01\xbc\xd7\xc5\x43\x9f\x25\x62\x05\x01\xf4\x6e\x04\x4a\xc8\xa8\x22\x8a\xbf\xb4\x56\xdb\x1e\x59\xdb\x67\x49\x62\xc9\x37\x56\x81\xd7\x37\x67\x2f\xc6\xdd\x61\xb6\x8c\x25\x36\xda\xf2\xb7\x0f\xc3\x11\xbc\xe6\x4f\x14\x7d\x84\xcc\xc6\x52\xea\x96\x38\x8c\xc0\xdb\x86\x18\x4b\x8c\xdf\x55\xc7\xb0\x2c\x3b\x43\xbf\x2f\x66\xd3\xf8\xc3\x92\x68\xe0\x4d\x58\xf7\x00\x6a\x74\x71\x43\x01\xae\x8b\x87\x03\xeb\xb2\x78\xee\x6e\x8f\x96\x7d\xc7\x12\xd7\x8a\x90\xbf\x27\x96\x94\xe8\x08\x24\xa9\xde\xab\x85\x7d\x18\x8d\xe0\x74\x18\xa7\x3f\x12\xfb\x9c\xdf\x11\xdc\xde\x15\x9d\xa7\xde\xcb\x47\xdd\xff\x49\x4d\x18\x03\x46\xf0\xde\xf8\x1d\xf7\xbb\xbd\xfa\x37\xb1\xbc\xf6\x7a\xdf\x4c\xf5\x8f\x67\x61\xd3\x31\xf1\xff\x4d\xfa\xef\x47\xfb\x16\x36\x4e\x2b\x6c\xa4\x0f\xcd\xf3\x1c\x50\x5a\x42\xde\x81\x23\x1f\x22\xb2\x0f\xd2\xfb\xe3\x2e\x6c\xcb\xfe\x0a\x00\x00\xff\xff\x2a\xc0\xc9\x38\xea\x07\x00\x00") + +func testImagesAgnhostWebhookAddlabelGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostWebhookAddlabelGo, + "test/images/agnhost/webhook/addlabel.go", + ) +} + +func testImagesAgnhostWebhookAddlabelGo() (*asset, error) { + bytes, err := testImagesAgnhostWebhookAddlabelGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/webhook/addlabel.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostWebhookAddlabel_testGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x54\x61\x6f\xdb\x36\x10\xfd\x2c\xfe\x8a\xab\x86\x0e\x72\xe0\x52\x4d\x3f\x6d\x1e\xf2\xc1\x4b\x52\xcc\x68\x6b\x0f\xb6\xbb\xa2\xe8\x8a\x81\xa6\x4e\x12\x13\x89\x64\xc9\x93\x15\x23\xf0\x7f\x1f\x28\xc9\x4d\xbc\xa4\xdb\xb2\x05\x88\x21\xf1\xde\xbd\xf7\xee\x74\xc7\xf4\x84\x9d\x1b\xbb\x73\xaa\x28\x09\x5e\xbd\x3c\xfd\x11\xd6\x25\xc2\x9b\x66\x83\x4e\x23\xa1\x87\x69\x43\xa5\x71\x9e\x33\xf6\x56\x49\xd4\x1e\x33\x68\x74\x86\x0e\xa8\x44\x98\x5a\x21\x4b\x84\x21\x32\x86\xdf\xd0\x79\x65\x34\xbc\xe2\x2f\x21\x09\x80\x78\x08\xc5\xa3\x9f\xd8\xce\x34\x50\x8b\x1d\x68\x43\xd0\x78\x04\x2a\x95\x87\x5c\x55\x08\x78\x23\xd1\x12\x28\x0d\xd2\xd4\xb6\x52\x42\x4b\x84\x56\x51\xd9\x89\x0c\x14\x9c\x7d\x1c\x08\xcc\x86\x84\xd2\x20\x40\x1a\xbb\x03\x93\xdf\x47\x81\x20\xc6\x00\x00\x4a\x22\x3b\x49\xd3\xb6\x6d\xb9\xe8\x5c\x72\xe3\x8a\xb4\xea\x51\x3e\x7d\x3b\x3b\xbf\x9c\xaf\x2e\x5f\xbc\xe2\x2f\x19\x7b\xaf\x2b\xf4\x1e\x1c\x7e\x69\x94\xc3\x0c\x36\x3b\x10\xd6\x56\x4a\x8a\x4d\x85\x50\x89\x16\x8c\x03\x51\x38\xc4\x0c\xc8\x04\x9f\xad\x53\xa4\x74\x31\x06\x6f\x72\x6a\x85\x43\x96\x29\x4f\x4e\x6d\x1a\x3a\x6a\xd0\xc1\x95\xf2\x70\x1f\x60\x34\x08\x0d\xf1\x74\x05\xb3\x55\x0c\x3f\x4f\x57\xb3\xd5\x98\x7d\x98\xad\x7f\x59\xbc\x5f\xc3\x87\xe9\x72\x39\x9d\xaf\x67\x97\x2b\x58\x2c\xe1\x7c\x31\xbf\x98\xad\x67\x8b\xf9\x0a\x16\xaf\x61\x3a\xff\x08\x6f\x66\xf3\x8b\x31\xa0\xa2\x12\x1d\xe0\x8d\x75\xc1\xbb\x71\xa0\x42\xeb\x30\xe3\x6c\x85\x78\x24\x9e\x9b\xde\x8c\xb7\x28\x55\xae\x24\x54\x42\x17\x8d\x28\x10\x0a\xb3\x45\xa7\x95\x2e\xc0\xa2\xab\x95\x0f\x1f\xcf\x83\xd0\x19\xab\x54\xad\x48\x50\xf7\xfe\xa0\x1c\xce\x4e\x52\xc6\xac\x90\xd7\x81\xa4\xc5\x4d\x69\xcc\x35\x63\xaa\xb6\xc6\x11\x24\x2c\x8a\x51\x4b\x93\x29\x5d\xa4\x57\xde\xe8\x98\x45\xb1\xc3\xbc\x42\x49\xe1\x91\xd0\x87\xde\xc5\x8c\x45\x21\x6a\x05\xc9\x12\xe2\x42\x51\xd9\x6c\xb8\x34\x75\x8a\x5b\xa1\x6d\x79\xd3\xe5\xbe\xe8\xc2\x21\xed\xfa\x07\xcf\x95\x49\x85\x55\xa9\xc8\x06\xaf\xe9\xf6\x34\x66\x91\x34\x0e\xb7\xa7\x70\x1f\x11\x8e\xfa\x60\x8d\x24\x8e\x83\xb5\x90\xa5\xd2\xe8\x76\xa9\xbd\x2e\xc2\x81\x4f\x03\xa8\x87\x7f\x13\xe7\x1a\x4d\xaa\xc6\x98\x8d\x18\xcb\x1b\x2d\x61\x8d\x9e\xa6\x59\xf6\x56\x6c\xb0\x4a\x08\x4e\x86\xb2\xf8\x7a\x04\xb7\x2c\x0a\x6f\xe7\xc2\xa3\x87\xc9\x19\x7c\xfa\xec\xc9\x35\x92\x42\x20\xd2\xa2\x46\xb8\xfb\x0b\x43\xa1\x0b\x16\x45\x4a\x2b\x52\xa2\xea\xf8\x3c\x40\x2d\xec\xa7\x3e\xf6\xf9\x2b\x04\x6f\x2c\x4a\xc2\x6c\xc0\x3c\x02\xd9\x07\x85\xf0\xdf\xc9\x4c\xee\xe9\xc4\x22\xcb\x20\x57\xce\x13\x54\x21\x3d\x1e\x07\xd4\x91\xe8\x04\x40\xab\xaa\x3b\x3f\x56\x9a\x3c\x94\xba\x0d\x7c\x98\xbd\xe8\xb9\x26\x10\xef\xd0\xc7\xfb\x90\xdb\xfd\x7c\xdb\x82\x47\x69\x74\xf6\x77\x1e\x1e\xd1\x32\x61\xd6\x1f\xd1\xfa\x37\x3e\x1f\xc9\x1d\xc3\x7f\x71\xaf\x32\xac\xad\x21\xd4\x04\x8d\xcd\x04\xe1\x13\x8b\xf8\x96\xe4\xff\x6d\xf6\x9e\xb1\x28\xac\xf8\x1f\x63\x20\x19\xc6\xcd\x09\x5d\x20\xdc\x4d\x60\x28\x87\xf8\xb2\xd1\x09\x49\x1e\xca\x1a\x43\x98\xe0\x87\x43\x1b\x45\xe1\x0a\x44\x4f\x81\xa5\xdf\x2a\x7e\x6e\x74\xae\x8a\x77\xc2\xde\x2e\x36\x57\x28\xe9\x1d\x92\x98\x40\xbf\x55\xfc\xee\xe8\xf6\x60\x9e\x24\x3f\xea\xc5\x7e\xdf\xf1\x8a\x76\x0c\xe8\x5c\x20\x0e\x6b\xcd\xdf\x09\xe7\x4b\x51\x25\x83\xe0\xa8\xeb\x61\xde\x41\x9e\x9d\x85\x31\xec\xfd\x44\xc4\x5f\x0b\x12\x55\x82\xce\x75\x98\x9e\x0d\xb7\x0a\xdb\xc0\xb5\x3d\xe5\xd3\xc3\x65\xb0\xec\x4e\x6f\x97\x3d\xe3\x04\xbe\x3f\x0e\x76\xa7\x43\x11\x13\x18\xd6\x99\x2f\x45\x7b\x79\x43\xa8\x03\xe6\x76\x29\xda\x09\x38\xd1\xee\x07\xd3\xe8\xad\x09\x17\xe8\xe4\x0c\xc4\x61\xd3\x7b\xed\x83\xdf\x03\x84\xff\xda\xdd\x62\x47\xd6\xbb\x9b\x6b\xb1\xb9\x3a\x2a\xbc\x3b\xe4\x17\x28\x4d\x86\x5d\x4e\xf2\xe9\xf3\x66\x47\x98\x1c\x33\x8d\x3a\x81\x47\x3b\xf2\xa0\x25\x7d\x4f\xee\x5a\x7c\x06\x07\x65\x3e\xb5\xb6\xda\x25\x4e\xb4\x4f\xa6\x0b\x43\x15\x45\x66\x73\xb5\xde\xd9\xae\x01\xc3\x05\xce\xc3\xfb\x22\x3f\xfa\x6e\x01\x35\x0c\xcd\x01\x35\xc7\x36\x19\x92\x47\x7c\xa6\x09\x5d\x2e\x24\x26\x1d\xbc\xf7\xd8\x4d\xc1\x7b\x5d\x1f\xe6\x20\xb8\x1f\x88\x9e\x36\x0c\x42\x52\x23\xaa\x20\x3e\xa4\xf3\xe4\xe4\xaf\xb3\x7b\x60\x7c\x76\xf0\x77\x81\x68\x2f\xbf\x34\xa2\x4a\xfa\x74\xde\x0f\x6b\xd8\x20\x7e\xbc\x8e\xa3\xaf\xda\x97\xce\x19\x97\x27\xf1\xef\xfa\x80\x80\xe7\xdf\x6d\xc7\x50\x18\xea\x1f\xba\xb6\x4f\xe0\xf9\x36\x1e\xc3\x3f\xd1\x8e\x87\x8b\xff\xd1\xef\x1e\xea\xda\x8f\xc2\x66\xef\xd9\x9f\x01\x00\x00\xff\xff\xdd\x8c\x48\xdf\xa1\x09\x00\x00") + +func testImagesAgnhostWebhookAddlabel_testGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostWebhookAddlabel_testGo, + "test/images/agnhost/webhook/addlabel_test.go", + ) +} + +func testImagesAgnhostWebhookAddlabel_testGo() (*asset, error) { + bytes, err := testImagesAgnhostWebhookAddlabel_testGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/webhook/addlabel_test.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostWebhookAlwaysallowGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x52\x5d\x6f\xdb\x36\x14\x7d\x36\x7f\xc5\x81\x1e\x0a\x3b\x48\xa4\xc4\x40\x81\x2d\x43\x1e\xb4\x24\xc5\x84\x76\x36\x60\xb9\x2d\xfa\x48\x4b\xd7\xd2\x85\x29\x92\x23\x29\xab\x46\xd0\xff\x3e\x50\x72\x86\x64\x29\xfa\x64\x93\xf7\xe8\x7c\xdc\xc3\xec\x42\xdc\x1b\x7b\x72\xdc\xb4\x01\xcb\xeb\x9b\xdf\xb1\x6d\x09\x1f\xfb\x1d\x39\x4d\x81\x3c\xf2\x3e\xb4\xc6\xf9\x54\x88\x4f\x5c\x91\xf6\x54\xa3\xd7\x35\x39\x84\x96\x90\x5b\x59\xb5\x84\xf3\xe4\x12\x5f\xc8\x79\x36\x1a\xcb\xf4\x1a\xf3\x08\x48\xce\xa3\x64\xf1\x87\x38\x99\x1e\x9d\x3c\x41\x9b\x80\xde\x13\x42\xcb\x1e\x7b\x56\x04\xfa\x5e\x91\x0d\x60\x8d\xca\x74\x56\xb1\xd4\x15\x61\xe0\xd0\x8e\x22\x67\x8a\x54\x7c\x3b\x13\x98\x5d\x90\xac\x21\x51\x19\x7b\x82\xd9\xbf\x44\x41\x06\x21\x00\xa0\x0d\xc1\xde\x66\xd9\x30\x0c\xa9\x1c\x5d\xa6\xc6\x35\x99\x9a\x50\x3e\xfb\x54\xdc\x3f\xae\xca\xc7\xab\x65\x7a\x2d\xc4\x67\xad\xc8\x7b\x38\xfa\xa7\x67\x47\x35\x76\x27\x48\x6b\x15\x57\x72\xa7\x08\x4a\x0e\x30\x0e\xb2\x71\x44\x35\x82\x89\x3e\x07\xc7\x81\x75\x73\x09\x6f\xf6\x61\x90\x8e\x44\xcd\x3e\x38\xde\xf5\xe1\xd5\x82\x9e\x5d\xb1\xc7\x4b\x80\xd1\x90\x1a\x49\x5e\xa2\x28\x13\xfc\x99\x97\x45\x79\x29\xbe\x16\xdb\xbf\xd6\x9f\xb7\xf8\x9a\x6f\x36\xf9\x6a\x5b\x3c\x96\x58\x6f\x70\xbf\x5e\x3d\x14\xdb\x62\xbd\x2a\xb1\xfe\x80\x7c\xf5\x0d\x1f\x8b\xd5\xc3\x25\x88\x43\x4b\x0e\xf4\xdd\xba\xe8\xdd\x38\x70\x5c\x1d\xd5\xa9\x28\x89\x5e\x89\xef\xcd\x64\xc6\x5b\xaa\x78\xcf\x15\x94\xd4\x4d\x2f\x1b\x42\x63\x8e\xe4\x34\xeb\x06\x96\x5c\xc7\x3e\x96\xe7\x21\x75\x2d\x14\x77\x1c\x64\x18\xcf\x6f\xe2\xa4\xe2\x22\x13\xc2\xca\xea\x10\x49\x06\xda\xb5\xc6\x1c\x84\xe0\xce\x1a\x17\x30\x17\xb3\x24\x70\x47\x89\x10\xb3\xe4\xf0\x9b\x4f\xd9\x64\xd2\x72\x26\xeb\xb3\x42\x76\xbc\x49\xc4\xac\xa3\x20\x8f\x37\x78\x81\xe8\x64\xd5\xb2\x26\x77\xca\xec\xa1\x89\x17\x3e\x8b\xa0\x09\xfe\x8c\x3b\x28\xd3\x64\xc7\x65\x22\x16\x42\x64\x19\xa4\x1a\xe4\xc9\xe7\x4a\x99\xe1\x81\x94\x3c\x7d\xe0\x23\x95\x54\x19\x5d\x7b\x78\x45\x64\xfd\x18\x7f\xcf\x47\x82\x3f\xdf\x4b\x5d\x43\xc6\x2f\x7c\xfc\x19\x6b\x27\x1f\x3c\x3a\x59\x53\xec\x77\x7a\x98\xbd\xae\x62\xfc\x54\xc4\x7f\xbf\xd2\x99\x4b\x87\xe3\x4d\x9a\x3f\xc7\xdb\xd0\x91\x69\x58\xe0\xe2\xf5\xa5\xb7\x26\x96\xf1\x24\x66\x31\x42\xfa\x65\xbe\x5c\xa4\x85\xde\x9b\x79\x32\x71\x5f\x8d\x96\xae\xe2\xb3\xbf\xaa\xa3\xc4\xe4\x3f\x96\x13\x13\xbc\x7f\xb6\x9f\x2c\xc4\x2c\xae\x37\x2d\xe3\x78\xfe\x1e\x17\x98\x8e\xe3\x78\xf1\x96\xbe\x92\x4a\x45\x96\x97\x32\x91\xc4\x8d\x3e\xff\x33\x76\x7b\x87\x9f\x19\x7e\xfa\xf1\x7f\x64\x3a\x6e\x81\x6a\xdc\x21\xb8\x9e\xde\x8c\x37\xe4\x7b\x15\x70\x87\x77\x53\xc5\x69\x19\x64\xe8\xfd\xd3\xdf\xe4\xbd\x6c\xe8\x16\xc9\xb8\xe0\xf3\xb3\xf9\x59\x13\xc9\xa8\x19\x7a\xa7\xf1\xee\x35\xb9\xf8\x21\xfe\x0d\x00\x00\xff\xff\xf1\xee\x8b\x02\xb2\x04\x00\x00") + +func testImagesAgnhostWebhookAlwaysallowGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostWebhookAlwaysallowGo, + "test/images/agnhost/webhook/alwaysallow.go", + ) +} + +func testImagesAgnhostWebhookAlwaysallowGo() (*asset, error) { + bytes, err := testImagesAgnhostWebhookAlwaysallowGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/webhook/alwaysallow.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostWebhookAlwaysdenyGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x92\x41\x6f\xeb\x36\x10\x84\xcf\xe6\xaf\x18\xe8\xf0\x60\x07\x7e\x52\xec\xd3\x43\x8a\x1c\xd4\x24\x45\x85\xa4\x36\x60\x39\x09\x72\x5c\x4b\x6b\x89\x30\x45\xb2\x24\x65\x45\x08\xf2\xdf\x0b\xd9\x4e\x61\x37\xbd\x49\xdc\x8f\xb3\xb3\xb3\x4c\xae\xc4\x9d\xb1\xbd\x93\x55\x1d\x30\xbf\x9e\xfd\xc2\xba\x66\x3c\xb6\x1b\x76\x9a\x03\x7b\xa4\x6d\xa8\x8d\xf3\xb1\x10\x4f\xb2\x60\xed\xb9\x44\xab\x4b\x76\x08\x35\x23\xb5\x54\xd4\x8c\x53\x65\x8a\x17\x76\x5e\x1a\x8d\x79\x7c\x8d\xf1\x00\x44\xa7\x52\x34\xf9\x4d\xf4\xa6\x45\x43\x3d\xb4\x09\x68\x3d\x23\xd4\xd2\x63\x2b\x15\x83\xdf\x0b\xb6\x01\x52\xa3\x30\x8d\x55\x92\x74\xc1\xe8\x64\xa8\x0f\x4d\x4e\x12\xb1\x78\x3b\x09\x98\x4d\x20\xa9\x41\x28\x8c\xed\x61\xb6\xe7\x14\x28\x08\x01\x00\x75\x08\xf6\x26\x49\xba\xae\x8b\xe9\xe0\x32\x36\xae\x4a\xd4\x91\xf2\xc9\x53\x76\xf7\xb0\xc8\x1f\x7e\xce\xe3\x6b\x21\x9e\xb5\x62\xef\xe1\xf8\xef\x56\x3a\x2e\xb1\xe9\x41\xd6\x2a\x59\xd0\x46\x31\x14\x75\x30\x0e\x54\x39\xe6\x12\xc1\x0c\x3e\x3b\x27\x83\xd4\xd5\x14\xde\x6c\x43\x47\x8e\x45\x29\x7d\x70\x72\xd3\x86\x8b\x80\xbe\x5c\x49\x8f\x73\xc0\x68\x90\x46\x94\xe6\xc8\xf2\x08\xbf\xa7\x79\x96\x4f\xc5\x6b\xb6\xfe\x73\xf9\xbc\xc6\x6b\xba\x5a\xa5\x8b\x75\xf6\x90\x63\xb9\xc2\xdd\x72\x71\x9f\xad\xb3\xe5\x22\xc7\xf2\x0f\xa4\x8b\x37\x3c\x66\x8b\xfb\x29\x58\x86\x9a\x1d\xf8\xdd\xba\xc1\xbb\x71\x90\x43\x74\x5c\xc6\x22\x67\xbe\x68\xbe\x35\x47\x33\xde\x72\x21\xb7\xb2\x80\x22\x5d\xb5\x54\x31\x2a\xb3\x67\xa7\xa5\xae\x60\xd9\x35\xd2\x0f\xcb\xf3\x20\x5d\x0a\x25\x1b\x19\x28\x1c\xfe\xbf\x8d\x13\x8b\xab\x44\x08\x4b\xc5\x6e\x10\xe9\x78\x53\x1b\xb3\x13\x42\x36\xd6\xb8\x80\xb1\x18\x45\xbb\x5f\x3e\x96\x26\x21\x2b\x13\x2a\x4f\xc2\xc9\x7e\x16\x89\x51\xc3\x81\xf6\x33\x9c\x11\x0d\x15\xb5\xd4\xec\xfa\xc4\xee\xaa\xe1\xc0\x27\x03\x74\xc4\xbf\xb8\x9d\x32\x55\xb2\x9f\x47\x62\x22\x44\x92\x80\x54\x47\xbd\xbf\x67\xdd\x83\x94\x3a\x6c\x8e\x7d\xf0\x68\xa8\xe4\x61\x45\xc7\xb7\xd5\xea\x62\x98\x20\x16\xc3\xd7\xd9\x9d\x31\x39\xec\x67\x71\xfa\xe5\x6c\xc5\x7b\xc9\xdd\x04\x57\x97\x87\xde\x9a\x21\xbe\x0f\x31\x1a\xba\xc7\x2f\xe3\xf9\x24\xce\xf4\xd6\x8c\xa3\x82\x94\x1a\x52\x3b\x4a\xfe\x2c\x59\xf7\xd1\x44\x8c\xdc\x41\xe7\xdf\x8b\x37\xb7\xf8\x3f\xc1\x8f\xcf\xff\x92\x71\xaa\x94\xe9\xb8\xc4\x2d\xb6\xa4\x3c\x7f\xab\xaf\xd8\xb7\x2a\xe0\x16\x3f\x8e\xf1\xc5\x79\xa0\xd0\xfa\x8f\xbf\xd8\x7b\xaa\xf8\x06\xd1\x61\xe0\xd3\x26\x50\xb2\x96\xec\x2f\x92\x89\x0e\x4d\x43\xeb\x34\x7e\x5c\x8a\x8b\x4f\xf1\x4f\x00\x00\x00\xff\xff\x4c\x4c\xc1\x4f\x05\x04\x00\x00") + +func testImagesAgnhostWebhookAlwaysdenyGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostWebhookAlwaysdenyGo, + "test/images/agnhost/webhook/alwaysdeny.go", + ) +} + +func testImagesAgnhostWebhookAlwaysdenyGo() (*asset, error) { + bytes, err := testImagesAgnhostWebhookAlwaysdenyGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/webhook/alwaysdeny.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostWebhookConfigGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x93\x41\x6f\xe3\x36\x10\x85\xcf\x9a\x5f\xf1\xea\x43\x11\x07\xae\x94\x06\x28\xb0\x4d\xb1\x07\xd7\x49\x50\x23\x81\x5d\x44\xde\xdd\x2e\x8a\x1e\x68\x69\x24\x11\xa6\x49\x95\x1c\x45\x2b\x04\xf9\xef\x05\x25\x05\xbb\x8b\xde\x24\xce\xf0\x7b\x8f\x8f\xc3\xec\x92\x36\xae\x1d\xbc\xae\x1b\xc1\xf5\xd5\xcf\xef\x70\x68\x18\x0f\xdd\x91\xbd\x65\xe1\x80\x75\x27\x8d\xf3\x21\x25\x7a\xd4\x05\xdb\xc0\x25\x3a\x5b\xb2\x87\x34\x8c\x75\xab\x8a\x86\x31\x57\x56\xf8\xc8\x3e\x68\x67\x71\x9d\x5e\xe1\x22\x36\x2c\xe6\xd2\x62\xf9\x1b\x0d\xae\xc3\x59\x0d\xb0\x4e\xd0\x05\x86\x34\x3a\xa0\xd2\x86\xc1\x5f\x0a\x6e\x05\xda\xa2\x70\xe7\xd6\x68\x65\x0b\x46\xaf\xa5\x19\x45\x66\x44\x4a\x9f\x67\x80\x3b\x8a\xd2\x16\x0a\x85\x6b\x07\xb8\xea\xdb\x2e\x28\x21\x02\x80\x46\xa4\xbd\xc9\xb2\xbe\xef\x53\x35\xba\x4c\x9d\xaf\x33\x33\x75\x85\xec\x71\xbb\xb9\xdb\xe5\x77\x3f\x5d\xa7\x57\x44\x1f\xac\xe1\x10\xe0\xf9\xdf\x4e\x7b\x2e\x71\x1c\xa0\xda\xd6\xe8\x42\x1d\x0d\xc3\xa8\x1e\xce\x43\xd5\x9e\xb9\x84\xb8\xe8\xb3\xf7\x5a\xb4\xad\x57\x08\xae\x92\x5e\x79\xa6\x52\x07\xf1\xfa\xd8\xc9\x77\x01\xbd\xb9\xd2\x01\xdf\x36\x38\x0b\x65\xb1\x58\xe7\xd8\xe6\x0b\xfc\xbe\xce\xb7\xf9\x8a\x3e\x6d\x0f\x7f\xec\x3f\x1c\xf0\x69\xfd\xf4\xb4\xde\x1d\xb6\x77\x39\xf6\x4f\xd8\xec\x77\xb7\xdb\xc3\x76\xbf\xcb\xb1\xbf\xc7\x7a\xf7\x19\x0f\xdb\xdd\xed\x0a\xac\xa5\x61\x0f\xfe\xd2\xfa\xe8\xdd\x79\xe8\x18\x1d\x97\x29\xe5\xcc\xdf\x89\x57\x6e\x32\x13\x5a\x2e\x74\xa5\x0b\x18\x65\xeb\x4e\xd5\x8c\xda\x3d\xb3\xb7\xda\xd6\x68\xd9\x9f\x75\x88\x97\x17\xa0\x6c\x49\x46\x9f\xb5\x28\x19\xff\xff\x77\x9c\x94\x2e\x33\xa2\x56\x15\xa7\x08\xe9\xf9\xd8\x38\x77\x22\xd2\xe7\xd6\x79\xc1\x05\x25\x8b\xc2\x0f\xad\xb8\x4c\x4c\x58\x10\x25\x8b\xd3\xbb\x90\x6a\x97\x9d\x8c\xab\xb3\xe7\xeb\x05\x2d\x89\xb2\x0c\x1b\x67\x2b\x5d\xa3\x70\x36\xde\x67\x98\x3c\xb2\x7f\x66\x3f\x0d\xcf\x0c\x5e\xa2\x60\x2f\xd1\x15\x4e\x3c\xa4\x24\x43\xcb\x6f\x7b\x83\xf8\xae\x10\xbc\x50\xb2\x61\x2f\xf7\x71\x98\x62\xca\xb6\xa6\xe4\x81\x87\xf1\xff\x6d\xe1\x95\xa8\xea\x6c\x11\xe5\x2a\x5d\x1f\x1e\xf3\x8b\xe9\x6b\x46\x2d\x71\x29\x26\xa4\x33\xf7\x85\x92\x10\x89\x2b\xb0\xf7\xb8\x79\x8f\x58\x7b\x74\xaa\xfc\xeb\x97\xab\x5f\x1f\x78\xf8\x53\x69\x3f\xef\x4f\xdf\x94\x57\x33\x3a\x9d\x95\x97\x94\xe8\x6a\xdc\xff\xc3\x7b\x58\x6d\x22\x34\x89\x11\xa4\xf7\x4a\x94\xb9\x60\xef\x97\x94\xbc\x52\xe2\x59\x3a\x6f\xf1\xe3\x57\xfd\xd8\x19\xb1\xf1\xb6\x94\x70\xb8\xc1\xdf\xff\x8c\xd5\xaf\x6b\x2f\xa3\xbf\xd7\x15\x25\x49\x96\xe1\xb0\xbf\xdd\xdf\xc4\x57\x15\x70\xee\xa4\x53\x26\x1a\x86\xaa\x84\x3d\x7a\x9e\x66\x37\x4e\x5d\xdf\x28\x99\xe2\x8c\x01\xab\x56\xcf\x79\x87\xc6\x75\xa6\x8c\x80\x74\x02\x6e\x8c\x66\x2b\xf1\xf1\xdf\x00\xe3\xe9\x9f\xa6\xd7\xb1\xb6\xe5\x47\xf6\xba\x1a\xa6\x8e\x31\xa4\x78\x8a\x57\xfa\x2f\x00\x00\xff\xff\x32\xc2\xa5\x30\x4b\x04\x00\x00") + +func testImagesAgnhostWebhookConfigGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostWebhookConfigGo, + "test/images/agnhost/webhook/config.go", + ) +} + +func testImagesAgnhostWebhookConfigGo() (*asset, error) { + bytes, err := testImagesAgnhostWebhookConfigGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/webhook/config.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostWebhookConfigmapGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x56\x51\x6f\xdb\x36\x10\x7e\x16\x7f\xc5\x55\xc0\x02\xbb\x70\xa4\xd8\x4f\x85\x0b\x3f\x78\x49\xb6\x79\xed\xec\xc1\x4e\x5a\x14\x45\xb1\x9e\xa5\x93\xc4\x59\x26\x59\x92\xb2\xea\xa5\xfe\xef\x03\x29\xdb\xb5\x93\x3a\x5b\xd1\x61\x2f\x5b\x10\x3f\x48\xf7\xf1\xee\xd3\x77\xc7\x8f\x8c\x9f\xb2\x4b\xa9\xd6\x9a\xe7\x85\x85\xde\x45\xf7\x19\xdc\x14\x04\x2f\xaa\x39\x69\x41\x96\x0c\x0c\x2b\x5b\x48\x6d\x22\xc6\x5e\xf2\x84\x84\xa1\x14\x2a\x91\x92\x06\x5b\x10\x0c\x15\x26\x05\xc1\x36\xd2\x81\x57\xa4\x0d\x97\x02\x7a\xd1\x05\xb4\x1c\x20\xdc\x86\xc2\xf6\x73\xb6\x96\x15\x2c\x71\x0d\x42\x5a\xa8\x0c\x81\x2d\xb8\x81\x8c\x97\x04\xf4\x31\x21\x65\x81\x0b\x48\xe4\x52\x95\x1c\x45\x42\x50\x73\x5b\xf8\x22\xdb\x14\x11\x7b\xb3\x4d\x20\xe7\x16\xb9\x00\x84\x44\xaa\x35\xc8\xec\x10\x05\x68\x19\x03\x00\x28\xac\x55\xfd\x38\xae\xeb\x3a\x42\xcf\x32\x92\x3a\x8f\xcb\x06\x65\xe2\x97\xa3\xcb\xeb\xf1\xec\xfa\xbc\x17\x5d\x30\x76\x2b\x4a\x32\x06\x34\x7d\xa8\xb8\xa6\x14\xe6\x6b\x40\xa5\x4a\x9e\xe0\xbc\x24\x28\xb1\x06\xa9\x01\x73\x4d\x94\x82\x95\x8e\x67\xad\xb9\xe5\x22\xef\x80\x91\x99\xad\x51\x13\x4b\xb9\xb1\x9a\xcf\x2b\x7b\x24\xd0\x8e\x15\x37\x70\x08\x90\x02\x50\x40\x38\x9c\xc1\x68\x16\xc2\xf7\xc3\xd9\x68\xd6\x61\xaf\x47\x37\x3f\x4d\x6e\x6f\xe0\xf5\x70\x3a\x1d\x8e\x6f\x46\xd7\x33\x98\x4c\xe1\x72\x32\xbe\x1a\xdd\x8c\x26\xe3\x19\x4c\x7e\x80\xe1\xf8\x0d\xbc\x18\x8d\xaf\x3a\x40\xdc\x16\xa4\x81\x3e\x2a\xed\xb8\x4b\x0d\xdc\x49\x47\x69\xc4\x66\x44\x47\xc5\x33\xd9\x90\x31\x8a\x12\x9e\xf1\x04\x4a\x14\x79\x85\x39\x41\x2e\x57\xa4\x05\x17\x39\x28\xd2\x4b\x6e\x5c\xf3\x0c\xa0\x48\x59\xc9\x97\xdc\xa2\xf5\xcf\x0f\x3e\x27\x62\x4f\x63\xc6\x14\x26\x0b\x97\xa4\xa6\x79\x21\xe5\x82\x31\xbe\x54\x52\x5b\x68\xb1\x60\xd5\x85\x70\xf1\xcc\x44\x5c\xc6\xa8\x78\x8c\xe9\x36\x77\xbc\xea\x86\x2c\x48\xa4\xa6\x7b\x08\xf7\xaa\x09\x2e\xc9\xe2\x71\x70\x89\x49\xc1\x05\xe9\x75\xac\x16\xb9\x7b\x61\x62\x07\x6a\xe0\x3b\xdc\xa2\x94\x79\xbc\xea\x85\xac\xcd\x58\x22\x85\xf1\x34\x12\x29\x32\x9e\xff\x82\xea\x57\xb4\x49\xd1\x05\xd7\x00\x91\xc3\x00\xde\xbf\xf5\x33\xe2\xff\xee\x20\x94\x2a\xec\x43\x88\x69\x1a\x76\x20\x54\x68\x0b\xf7\x18\xa7\x68\x31\x5e\x56\x8d\x0a\xe7\xc6\x62\x4e\xe7\x5d\x87\x58\x61\x59\x91\x83\xac\xc9\x84\xb0\x69\x52\xbd\x7b\x7f\xbf\x5e\xef\x1f\xa8\xd7\x7b\xac\x5e\x9b\xb1\x38\x86\x94\xc4\x1a\x9a\xca\x4b\x54\xa6\xd9\x37\xfb\x56\x2f\x68\x7d\xee\xd7\x83\x42\xae\x23\x96\x55\x22\x01\xd7\x0f\x7b\xb9\x23\x6b\x5a\xa8\x61\xd5\x8d\x86\xbb\x2e\x4d\x69\xc5\xa9\x6e\xc3\xd3\xe3\x97\x46\x49\x37\x4d\x77\x2c\x70\x62\x47\xaf\x5a\xbd\x76\x34\x12\x99\x6c\x85\x3e\x9f\xdb\x0f\x07\x3c\xc2\xf6\x81\x1e\x53\x32\xb2\xd2\x09\x41\x7f\x00\x4d\x83\xa3\x1f\xb5\xac\xd4\xd6\x2f\x76\xe1\x3b\xff\xb2\x0f\x61\xb8\xb7\x92\x3e\x84\x2b\x27\xfa\x0e\xd2\x87\xf0\xa0\xc6\x86\x05\x3c\x03\xd4\xd1\x94\x3e\x54\x64\x6c\xb4\x2f\xf4\x64\x00\x0f\xab\xdf\xb1\xa0\xe1\x7e\xad\xb5\xd4\x59\x2b\xa4\x8f\x8a\x12\x0b\x7a\x07\xb0\x12\xe6\x04\xdf\x99\xb0\xf3\x70\x75\x9b\x05\x81\x26\x5b\x69\x01\x82\x97\x2c\xd8\x30\x16\xac\x50\x83\xc6\x1a\xde\xbe\x9b\xaf\x2d\xdd\x27\x33\x51\xa4\x7d\x33\x61\x30\x70\x02\x5f\x51\x49\xb6\x61\xe1\x16\x0d\x8e\xb0\x65\x3a\x99\xff\x4e\x89\x8d\xa6\x58\xb3\x60\x03\x54\x9a\x53\xd0\x43\xdc\x4e\xe4\x25\x2a\x27\x6e\xb3\xb5\xa2\x7d\x6f\xef\x36\x2c\x48\xc9\x90\xe6\x58\xf2\x3f\x48\x37\x98\x94\x12\x13\xdd\x0a\xbe\x22\x6d\xb0\xbc\x3a\x88\xb7\xda\xfe\x23\x7e\xeb\xb8\x7f\xd2\x1e\x7f\xb8\x3e\xba\x22\xb7\xbc\xa5\xb1\xee\x38\x19\x3a\x70\xb6\xaf\xdf\x7e\xee\x57\x3c\x19\xb8\xc0\x3d\xad\x5b\xa4\xf5\x81\x80\x56\xbe\xea\x3e\x98\xac\x2d\x66\xc3\x02\xed\x07\x70\x3f\x71\xfd\x01\x7c\x69\x12\xef\x1e\x20\xa3\x61\x59\xca\x9a\x52\x18\x80\xd5\x15\xb1\xc0\x39\xdf\xa2\x03\x2b\x97\x42\xa3\xc8\xe9\xf3\x80\x46\x57\x68\xd1\xb3\xe4\x19\x2c\x5c\x87\xc2\xad\x91\x9d\x53\x8f\xce\x2d\x19\x1b\xc2\xd9\x19\xac\x8e\x42\x29\x37\xe8\x6a\xb8\x10\x0b\x82\xa0\xf5\x48\xbb\x2f\x35\xa1\x25\xf8\xf4\xe9\xb1\x99\xb8\x55\x29\x5a\x6a\x7b\x22\xa7\xbf\x26\xc3\xd2\xd0\x17\x10\x53\x32\x55\x69\x61\x00\x67\xdb\x5d\x35\xb3\x68\x2b\xe3\x93\x05\x53\x42\xe3\x37\x90\x73\xee\xcf\x53\x92\x48\xe1\x8e\x4f\x67\xeb\x35\x0a\x77\x1a\x2d\x68\xed\x3c\x1f\x1a\x9f\xe9\xb8\xc5\x1b\xd6\xfc\xbe\x46\x1b\x21\x45\xea\x26\xdc\x1d\x9a\x3e\xfc\xf7\xb6\xc2\xbf\xf4\xd5\x28\xdc\xbd\x63\x4e\xe0\x39\xba\x43\x9e\x12\x74\xd7\x10\x6e\xbf\x4a\x12\x3f\x74\x7e\x88\xcf\x8e\x69\xb1\x0d\x6b\xdc\xd5\x5b\x38\x5d\xee\x5d\xea\x9b\xed\xb5\x39\x13\xfe\x7b\xee\xea\x9c\xaf\x7f\xd2\xfa\xfe\xf7\xbd\xd3\xbe\xc7\xb3\x7b\x46\xf7\x36\x3c\xbc\x58\x68\x1b\xbe\xf3\x5b\xd7\x5f\x28\xfc\x21\x73\x9c\xcf\xdf\x5f\x60\xb0\x3d\xd7\x5a\xf7\xee\x51\x0d\xd9\xbf\xa8\xe1\x2f\x4b\xdf\x50\xa5\xd7\x6e\x86\x80\x67\x50\x92\x68\x7d\x69\x69\xdb\x69\x7e\xe1\x33\x2b\xbb\x55\xcb\x07\x6e\xd6\x8a\x7e\x9e\x4d\xc6\xfe\xe1\x44\x5d\x87\x71\x16\xa2\xec\x76\xd8\x4e\x6d\xea\x3f\x03\x00\x00\xff\xff\xdb\xd6\x49\x67\x22\x0d\x00\x00") + +func testImagesAgnhostWebhookConfigmapGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostWebhookConfigmapGo, + "test/images/agnhost/webhook/configmap.go", + ) +} + +func testImagesAgnhostWebhookConfigmapGo() (*asset, error) { + bytes, err := testImagesAgnhostWebhookConfigmapGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/webhook/configmap.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostWebhookConvertGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x56\xc1\x6e\xe3\x36\x10\x3d\x8b\x5f\x31\xf5\x21\x70\x02\x57\x8a\x73\x6a\x5d\xe4\xa0\x26\x29\x2a\x64\x6b\x17\x96\x93\x60\x8f\xb4\x34\x96\xd8\xc8\x24\x77\x48\xd9\x6b\x04\xf9\xf7\x82\x92\xac\x48\x76\xbc\xbb\x3d\x15\x2d\x36\xa7\xf8\xbd\xe7\x99\x37\x9c\x27\xca\xc1\x05\xbb\x51\x7a\x47\x22\xcb\x2d\x5c\x5d\x8e\x7f\x86\x45\x8e\x70\x5f\x2e\x91\x24\x5a\x34\x10\x96\x36\x57\x64\x7c\xc6\x3e\x88\x04\xa5\xc1\x14\x4a\x99\x22\x81\xcd\x11\x42\xcd\x93\x1c\xa1\x61\x46\xf0\x88\x64\x84\x92\x70\xe5\x5f\xc2\xd0\x09\x06\x0d\x35\x38\xff\x85\xed\x54\x09\x6b\xbe\x03\xa9\x2c\x94\x06\xc1\xe6\xc2\xc0\x4a\x14\x08\xf8\x39\x41\x6d\x41\x48\x48\xd4\x5a\x17\x82\xcb\x04\x61\x2b\x6c\x5e\x35\x69\x4a\xf8\xec\x63\x53\x40\x2d\x2d\x17\x12\x38\x24\x4a\xef\x40\xad\xba\x2a\xe0\x96\x31\x00\x80\xdc\x5a\x3d\x09\x82\xed\x76\xeb\xf3\xca\xa5\xaf\x28\x0b\x8a\x5a\x65\x82\x0f\xd1\xcd\xdd\x34\xbe\xfb\xf1\xca\xbf\x64\xec\x41\x16\x68\x0c\x10\x7e\x2a\x05\x61\x0a\xcb\x1d\x70\xad\x0b\x91\xf0\x65\x81\x50\xf0\x2d\x28\x02\x9e\x11\x62\x0a\x56\x39\x9f\x5b\x12\x56\xc8\x6c\x04\x46\xad\xec\x96\x13\xb2\x54\x18\x4b\x62\x59\xda\xde\x01\xed\x5d\x09\x03\x5d\x81\x92\xc0\x25\x0c\xc2\x18\xa2\x78\x00\xbf\x86\x71\x14\x8f\xd8\x53\xb4\xf8\x7d\xf6\xb0\x80\xa7\x70\x3e\x0f\xa7\x8b\xe8\x2e\x86\xd9\x1c\x6e\x66\xd3\xdb\x68\x11\xcd\xa6\x31\xcc\x7e\x83\x70\xfa\x11\xee\xa3\xe9\xed\x08\x50\xd8\x1c\x09\xf0\xb3\x26\xe7\x5d\x11\x08\x77\x74\x98\xfa\x2c\x46\xec\x35\x5f\xa9\xda\x8c\xd1\x98\x88\x95\x48\xa0\xe0\x32\x2b\x79\x86\x90\xa9\x0d\x92\x14\x32\x03\x8d\xb4\x16\xc6\x2d\xcf\x00\x97\x29\x2b\xc4\x5a\x58\x6e\xab\xcf\x47\xe3\xf8\xec\x22\x60\x4c\xf3\xe4\xd9\x15\xd9\xe2\x32\x57\xea\x99\x31\xb1\xd6\x8a\x2c\x0c\x99\xb7\x19\xc3\xe0\xf9\x27\xe3\x0b\x15\x70\x2d\x02\x9e\x36\xb5\x83\xcd\x78\xc0\xbc\x53\xd4\x12\x2d\x77\xfc\x1a\x2d\xef\x57\x58\xf3\x24\x17\x12\x69\x17\xe8\xe7\xcc\x01\x26\x70\xa2\xaa\xdc\x39\x63\xab\x52\x26\x90\x28\xb9\x41\xb2\xe1\xbe\xe0\x1c\x3f\x95\x68\xec\x42\x3d\x8e\x87\x04\x17\x4d\x79\xff\x90\x3f\x77\xd4\x11\x0a\x2f\xcc\x23\xb4\x25\x49\x38\x7b\x87\x7e\x61\x9e\x77\x2f\x64\x3a\x81\xfe\x1f\xf9\x0e\x1d\x31\xcf\x9b\xf2\x35\x1a\xcd\x13\x9c\x74\xd9\x16\xdd\x4b\x8e\x0b\x38\xd4\xb1\xb3\xe5\x5f\x98\xd8\xc9\x01\x5b\xa3\x8e\x9f\xa3\x51\x25\xf5\xea\x03\xf9\x7b\xb4\xaa\xa0\x91\xaa\x0d\x76\x24\x9b\xb1\xdf\xc2\x43\x7a\xfb\xff\xdc\x7d\xe1\x21\xba\x3d\xf4\x03\xe4\x3f\x44\xb7\x8e\xbc\xa5\xdd\xbc\x94\x87\x7e\x6a\xb4\xea\x56\xa4\x47\x96\xc9\x6f\xd1\xda\x50\x95\xa7\xc9\xc1\x48\x35\x5a\xcf\x54\x9d\x6e\xef\x64\xdd\x4c\x2d\xda\x11\xf5\xe6\x6f\x45\xdd\xf9\x1b\x28\x2e\x97\x6f\xda\x56\xd8\x41\x9d\xb6\x27\x6a\x3b\x1f\x88\x1e\x0c\x52\x24\x57\xaa\x7f\xe4\x7b\x74\xc4\xbc\x57\xf6\xfa\xf5\x30\x56\x31\xac\x13\xf9\x7e\x18\xdf\xcf\x69\x3f\x91\xef\x6b\xfe\xc3\xb1\xac\x07\xfa\x9e\xcd\x7f\x25\x9b\x46\x2b\x69\xf0\x0b\x37\x65\x2d\x38\xba\x2a\x6b\xd8\x25\x73\xc3\x09\xb4\xad\xf8\x3f\xb9\x4d\xf2\xc5\x4e\x23\xf3\xc4\x0a\xe8\xed\x33\xfc\x70\x0d\x52\x14\x4e\xee\x59\x98\x5c\x43\x57\x3c\xbc\xe8\x28\xcf\x99\xe7\x69\x0b\xd7\x70\x66\x9d\xf1\x13\x37\x71\xdd\xfd\xe5\xdd\x70\xb4\xd1\x08\x8b\x42\x6d\x31\xed\x2d\xbe\xc1\x2a\xba\x4c\x85\x0d\xa5\x54\xcd\xbb\xce\x6d\xe1\x10\x73\xba\xca\xda\x41\x38\x2a\xac\x25\x9d\xef\x56\xa0\xf7\xcf\x42\x59\xd8\xa3\x27\xa1\x2c\x2a\xf6\x89\x57\x6f\xde\x4e\xe4\xc8\xdf\x63\xdf\xbc\xaf\x13\x97\x49\x67\x5f\x27\x76\xd9\x5f\x5a\x2d\xfa\x27\x9b\x3b\xf8\xc6\x37\xae\xef\x84\x99\xff\xff\x0e\xad\x7a\x1c\x1f\x8d\x3d\x44\x22\x40\x22\x45\x5f\x78\xb2\xbe\x96\xfd\xbd\xc1\xb3\xfa\x57\x93\x1f\x5b\x6e\x4b\xe3\x18\xef\x0f\x34\x86\x67\x38\x71\x3d\xfc\x3b\xd7\x67\x58\xdd\xa5\xaf\x8d\xb5\xbf\x03\x00\x00\xff\xff\x37\xa3\xe3\x05\xfc\x0b\x00\x00") + +func testImagesAgnhostWebhookConvertGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostWebhookConvertGo, + "test/images/agnhost/webhook/convert.go", + ) +} + +func testImagesAgnhostWebhookConvertGo() (*asset, error) { + bytes, err := testImagesAgnhostWebhookConvertGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/webhook/convert.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostWebhookConvert_testGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x54\xdd\x6e\xdb\x46\x13\xbd\xe6\x3e\xc5\x7c\x04\xf2\x81\x4c\x54\x52\x4a\x81\xa2\x75\xda\x0b\xd5\x3f\xa8\x90\x40\x02\x24\x25\x41\x80\xde\x2c\x97\x43\x72\x6a\x72\x97\xde\x9d\xb5\xac\x04\x7e\xf7\x62\x29\xfa\x27\x36\x62\x17\x45\x51\xf4\x4a\x1c\xcd\x99\xd9\x73\x0e\x0f\x37\x7f\x29\x8e\x4d\xbf\xb7\x54\x37\x0c\xaf\xa7\xb3\x9f\x60\xdb\x20\xbc\xf5\x05\x5a\x8d\x8c\x0e\xe6\x9e\x1b\x63\x5d\x26\xc4\x3b\x52\xa8\x1d\x96\xe0\x75\x89\x16\xb8\x41\x98\xf7\x52\x35\x08\x63\x67\x02\x1f\xd0\x3a\x32\x1a\x5e\x67\x53\x48\x02\x20\x1e\x5b\x71\xfa\x46\xec\x8d\x87\x4e\xee\x41\x1b\x06\xef\x10\xb8\x21\x07\x15\xb5\x08\x78\xa5\xb0\x67\x20\x0d\xca\x74\x7d\x4b\x52\x2b\x84\x1d\x71\x33\x1c\x32\xae\xc8\xc4\xa7\x71\x81\x29\x58\x92\x06\x09\xca\xf4\x7b\x30\xd5\x7d\x14\x48\x16\x02\x00\xa0\x61\xee\x8f\xf2\x7c\xb7\xdb\x65\x72\x60\x99\x19\x5b\xe7\xed\x01\xe5\xf2\x77\x8b\xe3\xd3\xe5\xe6\xf4\xbb\xd7\xd9\x54\x88\xf7\xba\x45\xe7\xc0\xe2\x85\x27\x8b\x25\x14\x7b\x90\x7d\xdf\x92\x92\x45\x8b\xd0\xca\x1d\x18\x0b\xb2\xb6\x88\x25\xb0\x09\x3c\x77\x96\x98\x74\x3d\x01\x67\x2a\xde\x49\x8b\xa2\x24\xc7\x96\x0a\xcf\x5f\x19\x74\xc3\x8a\x1c\xdc\x07\x18\x0d\x52\x43\x3c\xdf\xc0\x62\x13\xc3\xaf\xf3\xcd\x62\x33\x11\x1f\x17\xdb\xdf\x56\xef\xb7\xf0\x71\xbe\x5e\xcf\x97\xdb\xc5\xe9\x06\x56\x6b\x38\x5e\x2d\x4f\x16\xdb\xc5\x6a\xb9\x81\xd5\x19\xcc\x97\x9f\xe0\xed\x62\x79\x32\x01\x24\x6e\xd0\x02\x5e\xf5\x36\x70\x37\x16\x28\x58\x87\x65\x26\x36\x88\x5f\x1d\x5e\x99\x03\x19\xd7\xa3\xa2\x8a\x14\xb4\x52\xd7\x5e\xd6\x08\xb5\xb9\x44\xab\x49\xd7\xd0\xa3\xed\xc8\x85\x97\xe7\x40\xea\x52\xb4\xd4\x11\x4b\x1e\xea\x47\x72\x32\xf1\x32\x17\xa2\x97\xea\x3c\x2c\xd9\x61\xd1\x18\x73\x2e\x04\x75\xbd\xb1\x0c\x89\x88\xe2\xaa\xe3\x58\x44\x71\x27\xb9\xc9\xad\xd4\x65\x28\x2c\x56\x2d\xaa\xe1\x7f\x46\x17\xec\x8b\x85\x88\x2a\xff\xf9\x33\xc4\x35\x71\xe3\x8b\x4c\x99\x2e\xaf\x8d\xa9\x5b\xcc\x6b\x13\x3a\x01\x71\x39\x83\xf8\xfc\x47\x97\x91\xc9\x65\x4f\xb9\x2c\x47\xa2\xf9\xe5\x2c\xec\xfa\x46\xab\x40\x96\x0f\xfa\x9d\x54\x0d\x69\xb4\xfb\xbc\x3f\xaf\x0f\x03\x3d\x8d\x54\xf2\x70\x1a\xda\xa7\x06\xac\xd7\x4c\x1d\xfe\x05\x48\xee\xd0\x92\x6c\xe9\x99\x85\x9e\xa9\xcd\x4b\xaa\xaa\x58\x44\xb7\xd4\x0f\x3c\x6e\x15\x9f\xdf\x7e\x89\x37\xa4\xdd\x3d\x99\x37\xa4\x53\x21\x2a\xaf\x15\x6c\xd1\xf1\xb1\xd1\x97\x68\x79\x7e\x03\x5a\xe3\x85\x47\xc7\x5b\xf3\x61\x96\x30\xbc\x1c\xf5\x66\xdb\x14\xbe\x88\xa8\x82\xa3\x5f\xe0\xb0\x25\x3b\x1b\x7e\xce\x8c\x4d\x1e\x90\xc9\xce\xbc\x56\x6e\x02\xe1\x45\x66\x4b\xdc\x6d\x8c\xb7\x0a\x93\xa1\x5c\x68\xfe\xe1\xfb\x24\x4d\x27\x70\xa7\x39\x60\x8e\x4d\x89\xea\x4c\x2a\x36\x76\x9f\x8c\xb6\x0c\xb3\xaa\xc1\x0e\x93\x34\x4d\x45\x14\x72\x49\x81\xc0\xf4\x0d\x10\xfc\x0c\xb3\x69\x78\x78\xf5\x2a\x10\x8b\x38\x5b\x7b\x9d\x54\x1d\x67\x9b\xde\x92\xe6\x2a\x89\xd7\x5e\xc3\x8b\x32\x9f\x4d\xa7\xf1\x04\x28\x9d\x40\xd0\xfc\x58\x53\x14\x19\x4b\x75\xd8\xfb\xff\x31\x06\xd9\x43\x33\xbe\x5c\x07\x58\x35\x48\x4e\x02\x3a\x0d\xb5\x3a\x38\x87\x65\x98\x55\x4f\xd8\x78\x3b\x61\xf9\x19\xe8\x70\x7c\x72\xbb\x78\x18\xa2\x0a\xfe\x37\x7e\x0b\xd9\x09\x62\x7f\x7a\xe1\x65\x3b\xec\x9c\x80\xe5\x51\x42\xc4\xd9\xa9\xb5\xc6\x56\x49\x8c\x57\x3d\xaa\xc0\x4a\xb6\xed\x70\x47\xa1\x63\xa8\x08\xdb\xd2\x85\xdb\xa8\xc0\xc3\xc5\x79\xc3\xdd\x14\x7f\xa0\x62\x28\x3c\x43\x65\xbc\x0e\xb7\x91\x54\xca\x78\x1d\x9a\xc1\xf2\x90\x38\xb4\xa8\x15\xba\xc9\x50\x1c\xfd\xae\x5f\xb8\xf8\xf0\x9c\xad\x86\xf1\xf5\x81\xdf\x09\x55\xd5\xc8\xec\x4e\xc3\x20\x22\x18\x78\x9d\x8a\xe8\x5a\x5c\x3f\x99\x3d\xd7\x1b\xed\xf0\xce\x8a\x6f\x27\x30\xa4\x23\xf9\x97\x52\x91\x3d\x62\xf8\xb7\x12\xf1\x50\xdc\xb3\xb9\xb8\x1b\xf8\x27\x33\xf1\x5f\xca\xc2\x9f\x01\x00\x00\xff\xff\x0e\x52\xf0\x28\x50\x08\x00\x00") + +func testImagesAgnhostWebhookConvert_testGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostWebhookConvert_testGo, + "test/images/agnhost/webhook/convert_test.go", + ) +} + +func testImagesAgnhostWebhookConvert_testGo() (*asset, error) { + bytes, err := testImagesAgnhostWebhookConvert_testGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/webhook/convert_test.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostWebhookCrdGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x56\xdd\x6e\xe3\x36\x13\xbd\x16\x9f\x62\x3e\x01\x1b\xd8\x81\x22\x25\xbe\x5a\x38\xf0\x85\x3f\x3b\xdd\x1a\x9b\xda\x80\xed\x64\xb1\x08\x82\x82\xa2\x46\x12\x6b\x89\xd4\x92\x94\x14\x37\xc8\xbb\x17\xd4\x4f\x62\x37\x4e\x51\xb4\x97\x05\x0c\x1b\x22\xcf\x9c\x39\x3c\x33\x1a\x3a\x38\x27\x33\x59\xec\x15\x4f\x52\x03\xa3\xcb\xab\xcf\xb0\x4d\x11\xbe\x96\x21\x2a\x81\x06\x35\x4c\x4b\x93\x4a\xa5\x7d\x42\x6e\x39\x43\xa1\x31\x82\x52\x44\xa8\xc0\xa4\x08\xd3\x82\xb2\x14\xa1\xdb\xf1\xe0\x1e\x95\xe6\x52\xc0\xc8\xbf\x84\x81\x05\xb8\xdd\x96\x3b\xbc\x26\x7b\x59\x42\x4e\xf7\x20\xa4\x81\x52\x23\x98\x94\x6b\x88\x79\x86\x80\x4f\x0c\x0b\x03\x5c\x00\x93\x79\x91\x71\x2a\x18\x42\xcd\x4d\xda\x24\xe9\x28\x7c\xf2\xbd\x23\x90\xa1\xa1\x5c\x00\x05\x26\x8b\x3d\xc8\xf8\x10\x05\xd4\x10\x02\x00\x90\x1a\x53\x8c\x83\xa0\xae\x6b\x9f\x36\x2a\x7d\xa9\x92\x20\x6b\x51\x3a\xb8\x5d\xcc\x6e\x96\x9b\x9b\x8b\x91\x7f\x49\xc8\x9d\xc8\x50\x6b\x50\xf8\xa3\xe4\x0a\x23\x08\xf7\x40\x8b\x22\xe3\x8c\x86\x19\x42\x46\x6b\x90\x0a\x68\xa2\x10\x23\x30\xd2\xea\xac\x15\x37\x5c\x24\x1e\x68\x19\x9b\x9a\x2a\x24\x11\xd7\x46\xf1\xb0\x34\x47\x06\xf5\xaa\xb8\x86\x43\x80\x14\x40\x05\xb8\xd3\x0d\x2c\x36\x2e\xfc\x7f\xba\x59\x6c\x3c\xf2\x6d\xb1\xfd\x79\x75\xb7\x85\x6f\xd3\xf5\x7a\xba\xdc\x2e\x6e\x36\xb0\x5a\xc3\x6c\xb5\x9c\x2f\xb6\x8b\xd5\x72\x03\xab\x9f\x60\xba\xfc\x0e\x5f\x17\xcb\xb9\x07\xc8\x4d\x8a\x0a\xf0\xa9\x50\x56\xbb\x54\xc0\xad\x75\x18\xf9\x64\x83\x78\x94\x3c\x96\xad\x18\x5d\x20\xe3\x31\x67\x90\x51\x91\x94\x34\x41\x48\x64\x85\x4a\x70\x91\x40\x81\x2a\xe7\xda\x16\x4f\x03\x15\x11\xc9\x78\xce\x0d\x35\xcd\xf3\xbb\xe3\xf8\xe4\x3c\x20\xa4\xa0\x6c\x67\x49\x6a\x0c\x53\x29\x77\x84\xf0\xbc\x90\xca\xc0\x80\x38\x6e\x9c\x1b\x97\x10\xc7\xdd\x7d\xd6\x3e\x97\x01\x2d\x78\x40\xa3\x2e\x41\x50\x5d\xb9\xc4\xa1\x05\xc7\x27\x83\xa2\x49\x59\x5d\xc1\x01\xf4\x6d\xfd\x82\x16\x5c\xa3\xaa\x50\x05\xc5\x2e\xb1\x7b\xfa\x18\x70\x92\x2b\x44\x43\xff\x05\x61\x13\xee\x12\x27\x47\x43\x8f\x85\xe5\x94\xa5\x5c\xa0\xda\xbf\x05\x5b\x50\x2b\xa2\xc7\xed\x32\x99\x04\xd5\xc8\x25\x43\x42\x82\x00\xb6\x4d\x97\x97\x82\x59\x2f\x6d\xb9\x90\x19\x0d\x34\xcb\x60\xb6\x9e\x6b\xd0\x65\x98\x73\x63\xba\xc6\x32\xf6\x3b\x44\x38\x92\xe4\x77\xc4\xfd\xc1\x6c\x2f\x9e\xde\xf7\x89\x4d\x04\xd6\x69\x33\x5b\xcf\x07\x54\x41\x75\xe5\x4f\x7b\xe3\xd7\x58\x71\xac\x87\x70\x7e\xbc\xa8\x0b\x69\xbb\xe4\x99\x38\x56\xba\x7f\x3f\x18\x0d\xfd\x85\x88\xe5\xc0\x6d\x88\x6c\x9f\x03\x53\x91\x3b\x24\xc4\x51\xa8\x65\xa9\x18\xc2\x78\x02\x2e\x2b\xb5\x91\x79\xbf\x14\x61\xcc\x05\x6f\x3a\xc6\x25\x4e\x27\xf6\xcb\xfd\xda\x42\x5b\x2b\xfd\x2f\x4a\x96\x45\x37\x23\xd6\x5d\xd8\x73\xb3\x38\x86\x53\x35\x6c\x03\x96\x34\x7f\x1b\x2d\x63\x70\xfb\x0a\x79\xd0\x73\x8c\xa1\x17\xf1\x62\x33\xff\xe3\xa4\x1f\xe5\xfb\x20\x95\xb5\xc3\x3a\xfa\x6a\xe1\x78\x02\xa7\xac\x7d\x7e\xf9\x33\xd2\x9f\x66\x99\xac\x31\x82\x09\x18\x55\xa2\x65\xa2\xb5\x0d\xa7\xca\x5f\xe3\x8f\x12\xb5\xf1\x57\xe1\x6f\xc8\x8c\xbf\xa6\x35\x71\x2a\xaa\x20\xa3\x21\x66\x1a\x72\x5a\x3c\xd8\x41\x22\x92\xc7\xf6\x87\x10\x47\xd7\xdc\xb0\xf4\x30\xb8\x97\x6b\xab\xca\xa8\x46\x78\xab\xc7\x98\x38\x0e\x53\x51\x93\xed\x94\xe7\xb3\xa6\xaa\x3d\xc1\xfc\xb5\xaa\xf6\x14\x4e\x84\x1a\x15\xa7\x19\xff\x1d\x95\x65\x60\x32\x42\xa6\xfd\x3b\xc1\x2b\x54\x9a\x66\xf3\x83\xfd\xc1\x90\x38\x0e\x8f\xe1\x57\xcf\x7e\x50\x35\x01\x87\x04\xfe\x1c\x6d\xfc\x40\xd1\xda\x03\xc1\x33\x0f\xce\x98\x8a\x86\xd7\x0d\xf6\x7f\x13\xbb\x64\xf5\x3b\x6d\x5f\xde\x28\x25\xd5\x00\x95\xb2\xb4\x8e\x42\x53\x2a\x01\x46\xde\x5f\xbd\xf3\xbb\x07\x59\xc1\x9d\x6b\x13\xdb\xc1\xfe\x6d\xf3\xf0\xea\xc8\x5f\x9a\xf1\x5f\xf0\x21\xc2\x98\x96\x99\xb1\x26\x74\xb2\xe2\xdc\xb4\x09\xe2\x81\xdb\xce\xaa\xd7\x7e\xef\x46\x93\x14\x68\xaf\xdc\x87\x4f\x95\x07\x9f\xaa\x47\x08\x4b\x03\x89\x34\xf0\xa9\x72\xbd\x83\x2e\xf3\x5a\x7f\xbd\x53\x4d\x69\x35\xbd\x3f\xca\xdf\x38\x89\x7d\xe5\x78\x0c\x95\x07\x72\x67\xd5\xb6\x87\x7a\x70\xbb\x1b\xe8\x02\x47\x78\x61\x50\x1b\xf7\xf1\xda\x22\x9e\x5b\xdf\x2b\x98\x4c\xe0\x15\x13\x71\x4d\xed\xcb\xe7\xb6\x96\x7e\xf8\x5e\xc6\x34\xd3\x78\x02\xb1\x46\x5d\x66\x06\x26\x70\xd6\xcd\x97\x8d\xa1\xa6\xd4\xcf\xbf\xa0\xd6\x34\xc1\x31\xb8\xf6\xa2\xb4\x3d\xc5\xa4\xb0\xff\x53\xec\xfd\x59\x53\x61\x47\x7c\xa3\xd7\x7d\x69\x4b\xd2\x0c\x85\xe6\xc8\x67\xc7\x29\x08\x79\x21\x7f\x04\x00\x00\xff\xff\x70\x6d\x73\x5e\x97\x09\x00\x00") + +func testImagesAgnhostWebhookCrdGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostWebhookCrdGo, + "test/images/agnhost/webhook/crd.go", + ) +} + +func testImagesAgnhostWebhookCrdGo() (*asset, error) { + bytes, err := testImagesAgnhostWebhookCrdGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/webhook/crd.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostWebhookCustomresourceGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x56\xd1\x6f\xdb\xb6\x13\x7e\x16\xff\x8a\xfb\xe9\x21\xb0\x0b\x47\x8a\xfd\x54\xe4\x07\x3f\x78\x49\x86\x79\xed\xec\xc1\x76\x52\x14\x41\x80\x9e\xa5\xb3\xc4\x5a\x26\x55\xf2\x64\xd5\x48\xfd\xbf\x0f\xa4\x94\xc2\x6e\x9d\x60\xc3\xba\x01\x0b\x10\x18\x12\x3f\xde\x7d\xf7\xdd\x47\xf1\xe2\x57\xe2\x4a\x97\x3b\x23\xb3\x9c\x61\x70\xd1\x7f\x0d\x8b\x9c\xe0\x4d\xb5\x24\xa3\x88\xc9\xc2\xa8\xe2\x5c\x1b\x1b\x09\xf1\x56\x26\xa4\x2c\xa5\x50\xa9\x94\x0c\x70\x4e\x30\x2a\x31\xc9\x09\xda\x95\x1e\xdc\x91\xb1\x52\x2b\x18\x44\x17\xd0\x71\x80\xb0\x5d\x0a\xbb\xff\x17\x3b\x5d\xc1\x06\x77\xa0\x34\x43\x65\x09\x38\x97\x16\x56\xb2\x20\xa0\xcf\x09\x95\x0c\x52\x41\xa2\x37\x65\x21\x51\x25\x04\xb5\xe4\xdc\x27\x69\x43\x44\xe2\x7d\x1b\x40\x2f\x19\xa5\x02\x84\x44\x97\x3b\xd0\xab\x43\x14\x20\x0b\x01\x00\x90\x33\x97\x97\x71\x5c\xd7\x75\x84\x9e\x65\xa4\x4d\x16\x17\x0d\xca\xc6\x6f\xc7\x57\x37\x93\xf9\xcd\xf9\x20\xba\x10\xe2\x56\x15\x64\x2d\x18\xfa\x54\x49\x43\x29\x2c\x77\x80\x65\x59\xc8\x04\x97\x05\x41\x81\x35\x68\x03\x98\x19\xa2\x14\x58\x3b\x9e\xb5\x91\x2c\x55\xd6\x03\xab\x57\x5c\xa3\x21\x91\x4a\xcb\x46\x2e\x2b\x3e\x12\xe8\x89\x95\xb4\x70\x08\xd0\x0a\x50\x41\x38\x9a\xc3\x78\x1e\xc2\x4f\xa3\xf9\x78\xde\x13\xef\xc6\x8b\x5f\xa6\xb7\x0b\x78\x37\x9a\xcd\x46\x93\xc5\xf8\x66\x0e\xd3\x19\x5c\x4d\x27\xd7\xe3\xc5\x78\x3a\x99\xc3\xf4\x67\x18\x4d\xde\xc3\x9b\xf1\xe4\xba\x07\x24\x39\x27\x03\xf4\xb9\x34\x8e\xbb\x36\x20\x9d\x74\x94\x46\x62\x4e\x74\x94\x7c\xa5\x1b\x32\xb6\xa4\x44\xae\x64\x02\x05\xaa\xac\xc2\x8c\x20\xd3\x5b\x32\x4a\xaa\x0c\x4a\x32\x1b\x69\x5d\xf3\x2c\xa0\x4a\x45\x21\x37\x92\x91\xfd\xf3\x77\xe5\x44\xe2\x55\x2c\x44\x89\xc9\xda\x05\xa9\x69\x99\x6b\xbd\x16\x42\x6e\x4a\x6d\x18\x3a\x22\x08\x49\x25\x3a\x95\x2a\x8b\x3f\x5a\xad\x42\x21\x82\x6d\x1f\xc2\xf5\x6b\x1b\x49\x1d\x63\x29\x63\x4c\xdb\x6c\xf1\xb6\x1f\x8a\x60\x43\x8c\xc7\x88\x0d\x26\xb9\x54\x64\x76\x71\xb9\xce\xdc\x0b\x1b\x3b\x50\x03\x7f\xc2\xad\x0b\x9d\xc5\xdb\x41\x28\xba\x42\x24\x5a\x59\x9f\x3b\xa9\x2c\xeb\xcd\x8c\xac\xae\x4c\x42\xbf\x23\x27\x79\x1f\x9c\xf4\x2a\x83\x21\x7c\xb8\xf7\xee\xf0\x7f\x8f\x10\xea\x32\xbc\x84\x10\xd3\x34\xec\x41\x58\x22\xe7\xee\x31\x4e\x91\x31\xde\x54\x4d\xfd\xe7\x96\x31\xa3\xf3\xbe\x43\x6c\xb1\xa8\xc8\x41\x76\x64\x43\xd8\x37\xa1\x1e\x3e\x9c\x4c\x3a\xf8\x01\x49\x07\x2f\x25\xed\x0a\xb1\xaa\x54\x02\x7e\x0f\x5d\x1d\x31\xe8\xa0\x81\x6d\x3f\x1a\x3d\xc9\x3c\xa3\xad\xa4\xba\x0b\xaf\x8e\x5f\xda\x52\x3b\x83\x3c\x8a\xc0\x49\x19\xdd\x75\x06\xdd\x68\xac\x56\xba\x13\x36\x44\x54\x06\x4d\x65\x60\xda\xc0\x61\x57\x04\x89\x81\xcb\xa1\xab\xae\x4a\xd8\xed\x6d\xdb\x17\x4d\x97\x1f\x29\xe1\xdf\x88\x51\x04\xc1\x35\x32\xc2\x06\xcb\xfb\x46\x85\x87\xe6\x47\x04\xfb\xc7\xbd\x10\x81\xc1\xda\xc5\x40\x13\xcd\xe8\x53\x45\x96\xdb\xcd\xd1\x0c\x6b\x11\x90\xf1\x19\x9c\x77\xa2\x5b\xb5\x41\x63\x73\x2c\x3a\x06\xeb\x1e\x9c\x25\xa6\x2b\x02\xb9\x02\x87\xf9\xdf\x10\x94\x2c\x3c\x05\xcf\xff\xc6\x18\x6d\x3a\x64\x1c\x24\x30\xc4\x95\x51\xc0\xfa\xae\xff\x5d\xc5\x2d\xc6\x33\xf1\xca\x7c\x95\xe2\x72\x08\xa7\x24\x7a\xdc\x7f\x8b\x8c\x46\x45\xa1\x6b\x4a\x61\x08\x6c\x2a\x12\x9e\x54\x62\x22\x57\xf7\x7d\x78\xd8\x47\xc3\xe1\x03\x0c\x87\x6d\xff\x1e\x3d\xb5\xa3\x48\xde\x2e\x30\x84\xfb\x87\xe5\x8e\xa9\x73\xca\xc0\x9e\xec\xb3\x19\xbc\x3d\xff\x6e\x8e\xc1\xd7\x1c\x05\xa9\xce\xa9\xed\x5d\x27\xf8\x85\x8f\x5e\x72\xab\x94\x5f\x58\xec\x4a\xfa\x75\x3e\x9d\xf8\x87\x67\x72\x3b\x0c\x0c\xe1\xac\x64\x9f\xa6\xed\xce\xd9\x31\x54\xec\x5b\x4f\xbb\xef\x03\xff\x60\x4b\xfb\x98\xff\xa0\xa7\xb7\x68\xc0\xf9\xba\x91\xd8\x2b\x79\xe8\xef\x92\x8c\x6f\x98\x6b\xd3\xb6\x1f\x5d\x53\x41\x4c\x4d\xab\xb0\x86\xe3\xb3\x50\xa4\x87\xc7\x61\x0f\x54\xd8\xe7\xa0\x87\xb8\xff\xe6\xc9\x09\xdc\xfd\xb4\xee\xc1\xd6\x85\x30\xa8\x32\x7a\x72\xb9\xe7\x27\x57\xb0\xf6\xd6\x6e\xef\x99\x73\x1a\xd0\x39\x93\xe5\x10\xce\xce\x60\x7b\xb4\x94\x4a\x8b\x2e\xb8\x5b\x12\x41\x10\x74\x5e\x68\xc0\x95\x21\x64\x82\x2f\x5f\x5e\xea\xd2\x6d\x99\x22\x53\xd7\x13\x79\xbe\x8c\x15\x16\x96\x4e\x20\x66\x64\xab\x82\x9d\xeb\x5b\x37\xcd\x19\xb9\xb2\x3e\x58\x30\x23\xb4\x5a\x5d\x42\xe8\x2e\xd6\x6f\x1c\x09\x89\x56\x6e\xc6\x71\x77\x6f\x8d\xca\x8d\x0c\xee\x7a\x08\x7b\x6e\xe7\x5e\x34\xff\x7f\x45\x18\xa5\x55\xea\x0c\xe7\x06\x1a\xbf\xfc\xe7\x9c\xf9\xaf\x96\x8c\xca\x4d\x86\x4b\x02\xcf\xd4\x8d\x61\x94\xa0\x1b\x14\x25\x9f\xd0\x63\x4d\x3b\x37\xa8\x40\x73\x3b\x1e\x0a\xf3\xd2\xd7\xe5\x8f\x00\x00\x00\xff\xff\x0f\x5b\x65\x7b\xef\x0a\x00\x00") + +func testImagesAgnhostWebhookCustomresourceGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostWebhookCustomresourceGo, + "test/images/agnhost/webhook/customresource.go", + ) +} + +func testImagesAgnhostWebhookCustomresourceGo() (*asset, error) { + bytes, err := testImagesAgnhostWebhookCustomresourceGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/webhook/customresource.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostWebhookMainGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x58\x5f\x6f\xdb\x36\xf7\xbe\x16\x3f\xc5\x99\x80\x16\x52\x20\x4b\x6d\xb7\x01\xfb\x79\xc8\x85\x9b\xb4\x6b\xd0\x34\x19\x62\xb7\xc5\x30\x0c\xbf\xd1\xd2\x91\xcc\x5a\x22\x35\x92\xb2\xeb\x05\xfd\xee\x2f\x0e\x25\x2b\x72\x6c\xa7\xdb\xb0\xe0\x7d\x7d\xd1\x46\x22\xf9\x3c\x87\xe7\xcf\xc3\x23\x26\x27\xec\x4c\xd5\x1b\x2d\x8a\x85\x85\x17\xcf\x9e\xff\x00\xb3\x05\xc2\xdb\x66\x8e\x5a\xa2\x45\x03\x93\xc6\x2e\x94\x36\x31\x63\x97\x22\x45\x69\x30\x83\x46\x66\xa8\xc1\x2e\x10\x26\x35\x4f\x17\x08\xdd\x48\x04\x1f\x50\x1b\xa1\x24\xbc\x88\x9f\x41\x40\x13\xfc\x6e\xc8\x0f\x7f\x64\x1b\xd5\x40\xc5\x37\x20\x95\x85\xc6\x20\xd8\x85\x30\x90\x8b\x12\x01\x3f\xa7\x58\x5b\x10\x12\x52\x55\xd5\xa5\xe0\x32\x45\x58\x0b\xbb\x70\x24\x1d\x44\xcc\x7e\xe9\x00\xd4\xdc\x72\x21\x81\x43\xaa\xea\x0d\xa8\x7c\x38\x0b\xb8\x65\x0c\x00\x60\x61\x6d\x3d\x4e\x92\xf5\x7a\x1d\x73\x67\x65\xac\x74\x91\x94\xed\x2c\x93\x5c\x5e\x9c\xbd\xba\x9a\xbe\x1a\xbd\x88\x9f\x31\xf6\x5e\x96\x68\x0c\x68\xfc\xa3\x11\x1a\x33\x98\x6f\x80\xd7\x75\x29\x52\x3e\x2f\x11\x4a\xbe\x06\xa5\x81\x17\x1a\x31\x03\xab\xc8\xce\xb5\x16\x56\xc8\x22\x02\xa3\x72\xbb\xe6\x1a\x59\x26\x8c\xd5\x62\xde\xd8\x1d\x07\x6d\xad\x12\x06\x86\x13\x94\x04\x2e\xc1\x9f\x4c\xe1\x62\xea\xc3\xcb\xc9\xf4\x62\x1a\xb1\x8f\x17\xb3\x37\xd7\xef\x67\xf0\x71\x72\x73\x33\xb9\x9a\x5d\xbc\x9a\xc2\xf5\x0d\x9c\x5d\x5f\x9d\x5f\xcc\x2e\xae\xaf\xa6\x70\xfd\x1a\x26\x57\xbf\xc0\xdb\x8b\xab\xf3\x08\x50\xd8\x05\x6a\xc0\xcf\xb5\x26\xdb\x95\x06\x41\xae\xc3\x2c\x66\x53\xc4\x1d\xf2\x5c\xb5\xc6\x98\x1a\x53\x91\x8b\x14\x4a\x2e\x8b\x86\x17\x08\x85\x5a\xa1\x96\x42\x16\x50\xa3\xae\x84\xa1\xe0\x19\xe0\x32\x63\xa5\xa8\x84\xe5\xd6\x3d\xef\x6d\x27\x66\x27\x09\x63\x35\x4f\x97\x04\xb2\xc6\xf9\x42\xa9\x25\x63\xa2\xaa\x95\xb6\x10\x30\xcf\x47\x99\xaa\x4c\xc8\x22\xf9\x64\x94\xf4\x99\xe7\xe7\x95\xa5\xff\x84\x4a\x84\x6a\xac\x28\xe9\x41\xa2\x4d\x28\x4c\x3e\x63\x9e\x5f\x08\xbb\x68\xe6\x71\xaa\xaa\xc4\xd4\xf9\xf3\x6f\x93\x54\xcd\x35\xa7\xa1\xd5\x73\xf0\x97\x3f\x98\x58\xa8\x84\xd7\x22\xe1\x59\x67\x68\xb2\x7a\x4e\x28\x47\x86\xe6\x68\xf9\xbd\xf1\x8a\xa7\x0b\x21\x51\x6f\x92\x7a\x59\x24\xba\x91\x56\x54\x38\x98\xb2\x2c\x55\x91\xac\x5e\xf8\xcc\x4b\x12\x98\x5d\x9f\x5f\x8f\xc1\xea\x4d\x9b\xa7\xa5\x98\x6b\x4e\x0f\x0a\x0c\x22\x88\x1c\x84\x85\x02\x25\x6a\x4e\x55\x92\x2a\xad\x31\xb5\x40\xdb\x85\x9a\xdb\x74\xe1\x40\x68\x77\x66\x9c\x24\x83\xcd\x55\xdc\xda\x39\x17\x3a\x73\xae\x69\xa7\x86\x8c\xad\xb8\x26\xc7\xa5\xa8\xed\x6b\x2a\x09\xfa\x51\xbe\xc8\x82\x79\x4b\xdc\xf4\xef\xfa\x97\xce\xd5\xdb\x9f\x90\x96\x79\x46\x64\x98\x72\x7d\x51\x51\x50\xba\x69\x21\x63\x49\x02\x67\x55\xf6\xb1\x0d\x12\x25\x62\x63\xba\x14\x2f\xe4\x42\x19\x0b\x67\xe4\xe8\xd8\x59\x30\x98\x78\x0a\x4f\x5d\x04\xe2\x33\x55\x55\x5c\x66\xb7\xcc\x7b\x6f\x70\x0c\x00\x7e\x17\x70\x3f\x62\xde\x74\xa1\xb4\x1d\x83\x3f\xb5\x5c\x5b\x03\x1c\xde\xcc\x66\x3f\x83\x41\xbd\x42\x1d\x11\x53\xde\x94\x6d\xfe\xa1\xa1\x82\x81\x77\x0d\x65\x95\x2c\x26\xdb\x50\x6d\xf9\xb8\xcc\xe0\x03\x2f\x45\x76\x70\x98\xb8\x2e\x95\x2c\xc6\xf0\xfb\x63\x53\xc5\x6c\x92\x5b\xd4\x90\x61\x5d\xaa\x0d\x01\x09\x4b\x61\x1f\x68\x62\x5a\x36\xc6\x12\xab\xd3\xc0\xac\x12\x92\x6a\x9b\x5b\xa5\x41\x22\x66\x86\xa6\xa7\x1a\xb9\x45\xe0\x03\xa6\x8e\xe0\x4c\xc9\x5c\x14\x8d\x76\xd5\xc5\x84\x74\x28\xfb\xe8\x04\xa2\xb1\x10\xee\x6f\x8d\x95\xb2\x7d\xa9\x41\x9f\xe8\x90\x2a\x69\xb5\x2a\x4b\xd4\x26\xfe\x3d\x62\xde\x44\x17\x66\x0c\x6d\xe4\xde\xf1\xcf\xa2\x6a\xaa\x2b\x7a\x17\x3c\x0b\x23\xe6\xdd\x34\x72\x0c\x50\x71\x21\x23\xf6\x85\xb1\xbc\x91\x29\x08\x29\x6c\x10\xc2\x2d\xf3\xee\xa2\x1f\xbf\x2e\x79\x61\x82\x30\x9e\xba\x34\xfa\xc0\x75\xf0\x74\x9b\x9a\x11\xf8\xb6\x34\x23\x7a\x1c\x91\x7a\xfb\x11\xf8\x14\x1e\xcf\x77\x49\x4a\x06\x71\xe1\x34\x85\xf6\x95\x61\xce\x9b\xd2\xc2\xe7\xef\x9f\xfd\x1f\x9c\xa1\xb6\x24\x40\xe4\x18\x8a\x14\x45\x70\x1a\x43\x70\x36\x01\x82\x8b\xa8\xac\xb8\xdc\x44\x04\x42\x93\x24\x27\xb1\xe4\x2e\x1c\x6d\xa0\xdd\xbc\x30\xf6\xc3\xaf\x59\xdb\xd5\x4c\x67\x6c\xad\xc5\x8a\x5b\x1c\x2d\x71\xf3\x77\x6d\xee\x96\xc2\x12\x37\x50\x51\xb5\xd2\xac\xd1\x68\xc7\x05\xc7\xec\xb9\x90\xd6\x19\x43\xb5\x1a\x81\x4f\xff\xf9\x11\x7c\xf7\xdd\xb7\x8e\x7a\x8a\x69\xa3\x11\x5c\x21\xdb\x05\xb7\x8e\x7b\x1b\xe1\x92\xe2\x2e\x0d\x28\xf9\xf5\xbd\x0e\x0b\x3f\x02\xbf\x7b\x1c\x09\x7a\xbe\xdb\x69\xab\x0b\x56\xc1\x1c\x5b\x09\xe0\xc6\x31\x0a\xf9\x09\x53\xf2\x73\xb7\xce\x0f\x29\x35\x92\xc4\x25\x99\xed\x84\xf4\x35\x65\xca\x82\xcb\xac\x44\x2a\xbd\xee\xed\x5d\x1e\x32\xbb\xa9\x71\x7f\x05\x25\x58\xd0\xbd\x88\xfb\x42\xbb\xc1\x95\xc0\x75\x08\x27\x07\x46\x4c\xad\xa4\xc1\xaf\xf3\x1f\xa1\x1e\xb2\x1e\x24\x7c\x88\xeb\x8d\xc3\xd7\xa4\x91\xbc\x23\xd3\x91\x4b\xd4\xb9\xb2\x0b\x58\xb5\x85\xac\xb4\x3b\x21\xa1\x22\x79\x51\xda\x44\x6d\xf0\x4c\x53\x53\x24\x0d\x54\x4d\x69\x45\x5d\xe2\xa0\x48\xb5\xe3\x87\x55\xdb\x1d\x99\x81\xc5\x5b\x4a\x63\x75\x93\x5a\x2a\xc2\xa1\x6b\x87\xbb\x77\xe7\xa0\xfb\x0d\xb6\xda\x17\xb1\xc4\xf5\x39\x96\x58\x70\x8b\x33\xf5\xe1\xf9\x64\x80\x1d\xe4\xc3\x15\xe1\x2e\xef\x2d\xf3\x34\xda\x46\xcb\x9d\xd7\xb7\xcc\xdb\xda\x31\x86\xac\xc3\xfd\xd0\xbe\x70\xd0\xc4\x11\xe4\xa4\x28\xde\xea\xf9\xb8\x35\x2b\x8f\x98\xf7\xa5\x37\xe8\xf8\xaa\x03\xd6\x0c\x83\x7c\x67\x91\x0b\xe3\xd6\x75\x7f\x3f\x87\x08\xc9\x13\x12\xc6\xa7\xb0\x9f\x0b\xb7\x37\xf8\x47\x83\xc6\x92\x54\xca\x15\x6a\x3b\x18\x77\x03\xce\xd6\x96\x3c\xee\x5e\x85\x5f\x98\xe7\xa9\xc6\x12\x62\x1e\x08\x19\x32\x6f\x6b\xea\x3e\x48\x6b\x03\xa1\x38\xf3\x02\xd5\xd8\xb0\xf3\x4f\x92\xb4\x62\xd6\xe7\x33\x55\x21\x75\x0a\x4e\x0a\x28\x5f\x54\x0e\xdc\x75\xa3\x68\x2c\x09\x90\x72\x87\x01\x4d\x77\x12\xa5\xa8\x79\x74\x8e\x23\x2c\x72\x93\x3b\x49\x9c\xdf\x1d\x72\xb0\x76\x78\xf1\xd6\x8c\x8f\x5a\xb8\xe3\x4a\xc3\x49\xf7\xde\x41\x47\x2d\xc8\x4e\xe8\xdd\x41\x40\xad\xc0\x5c\x65\x1b\xf8\xf5\xb7\xf9\xc6\x22\xf3\x44\x0e\x3a\x7e\x49\x6f\xbe\x39\x05\x29\xca\xd6\xb7\x39\x64\xdc\xf2\x08\x50\x6b\xf2\x49\xdb\xd8\xc5\x37\xc8\xb3\x49\x59\x06\xed\x82\xf0\x47\x37\x7c\x7a\xb7\xcc\x73\xc8\xa7\x6e\x2d\xf3\xbc\x2f\xe4\x15\xd7\x2c\xad\x50\x8b\x7c\xe3\xbc\x41\x82\x8c\xd2\x82\x2b\x14\x2a\xc7\x34\xa5\xf3\x12\x99\xd7\x8d\xcc\x68\x60\x7c\x0a\x3a\x7e\x83\x3c\x43\x1d\xff\x84\x36\xf0\xcf\xda\xc1\x11\x8d\x92\x6c\x8a\x1c\x86\xf3\xbf\x39\x05\xbf\xeb\xeb\xc9\x61\x6d\x6f\xea\x6c\xa2\xce\x2f\x7e\xa5\xb5\xd2\x79\xe0\x0f\x96\x9c\x3e\x31\x11\xb5\xd8\xd4\xda\xed\xad\x8c\x86\xe0\x77\xc9\xd0\xee\xc7\x21\x7e\x08\x5e\xd0\x21\x90\xab\x20\xaf\x6c\x3c\xad\xb5\x90\x36\x0f\x7c\x17\x77\x8a\xa4\xde\x26\xe1\x13\xe3\x47\xce\xe3\x61\xc8\x98\x97\xa1\x41\x2d\x78\x29\xfe\x44\xe7\xd8\x54\x65\x98\x9a\xf8\xbd\x14\xa4\x20\xbc\x3c\x1f\x8c\x07\x21\xf3\xd4\xfc\x53\x04\xc5\x6a\xd9\x47\x62\x08\x10\x9f\x23\xad\x0f\x08\x3d\xa2\x20\xb8\x7f\x5a\xe7\xd0\xf4\x41\x40\x2b\x53\xb8\xdc\x1e\xda\xda\xa5\x0a\xa4\xaa\x29\x33\xf7\xe9\x36\xa7\x03\x92\x20\xb3\x31\x3c\x59\xf9\x8e\x34\xdc\xf1\x61\x50\x99\x82\xde\xb8\x5c\x6b\xdf\xac\x23\xa8\x4c\x11\xb5\x69\x39\xb5\xdc\x36\xe6\x25\xcf\xb6\x85\x75\xcf\x77\x94\x7e\xba\x4b\xdd\xeb\xf9\x27\xe8\x3a\xf5\xf8\x7a\x4e\x27\x15\xf3\xcc\x5a\xd8\x74\x01\x27\xc5\x6a\x49\x76\xa7\xdc\x60\x2f\x10\xd3\x74\x81\x15\xfe\xa4\x55\x53\x77\x1f\xa3\xf1\x47\x61\x17\x6f\x85\xcc\x02\xff\x9e\x08\xf8\xe1\xd8\x31\x3b\x23\x30\xbb\x37\x1a\x81\x5a\x92\x3b\xd4\xfc\x53\x1c\x1c\x92\x19\x27\x40\x6d\x1d\x7c\xa3\x96\x6d\x6e\xef\x24\xd2\x2b\x97\x38\x98\x1d\x53\x2f\x98\x37\x16\x0a\x45\xf1\x9f\xf9\x11\x11\x11\x5c\xef\x0a\x2a\x0d\x6f\xeb\x87\xfb\x4b\xc7\xa7\xf0\xf4\x08\xec\xed\x03\xeb\xe2\x29\xda\xa1\x73\x9c\x5f\xc8\x91\xe1\x03\x6b\x7a\x45\x3d\x6d\xa5\x22\xee\x88\x83\x93\x63\xbe\xfb\x2b\x68\xf1\xfb\x8b\x73\x38\x85\x63\x10\x5b\x91\xa2\x69\x03\x34\xca\x87\x53\x38\x82\xdd\xe7\xc2\x23\xa6\xc1\x3f\xcd\x80\x7f\x3f\xf8\xff\x8d\xb8\xff\x0f\x86\xbc\xeb\xd6\xc7\x47\x04\xec\xbd\xec\x3a\x33\xcc\xa0\x20\x0f\x6c\xdb\x30\x58\x0a\xb9\x95\xb0\xce\x11\xff\x9e\x84\x3d\x24\xff\x06\xdb\x73\x7c\xbb\xa3\xce\x86\xc1\x76\xc3\x90\xb9\xdd\xbf\xdc\x58\x34\xbd\xaa\xd3\xa1\x13\xbf\xe3\xda\x2c\x78\x19\x0c\x67\x1f\xd2\xf2\xc1\x56\x3a\x7d\xde\xdd\x0a\x6a\xdd\x3d\x84\x3b\x5b\xba\x90\x16\xb5\xe4\xe5\xd4\x7d\x6e\xb9\x19\xbb\x7b\xf3\xd6\xdd\x91\x4b\xdf\x20\x7b\x87\x6e\x74\xe0\x84\x6d\xed\xfb\xff\x7e\x1f\xeb\xd8\xf5\x23\x41\xbf\xc3\xae\x47\x78\xc8\xfa\xbb\xc6\xd2\x35\x38\x93\x72\xcd\x37\x66\x52\x96\x8a\xda\x5e\xbe\x79\x2d\x56\x38\xc5\x54\xc9\xcc\xfc\xc5\xde\xc7\xf5\x39\x5d\xb3\x14\x81\x8e\x1e\xec\xa0\xf9\x71\xba\x30\x3c\x64\xd9\x39\xca\xcd\xe3\x19\x42\xe8\x7b\xbc\x59\x76\xc9\xe7\x58\x3e\x0a\x6b\x87\x7d\x9f\xf3\x67\xf5\x48\xee\xa6\x07\x02\xdf\xdb\xa4\xb5\xee\x0a\xaf\x78\x2c\xe6\x0c\xe5\x66\xda\xdd\x92\xb6\x64\x15\x4a\x7b\xdf\x0c\x77\xb1\xf4\x68\xbb\xaf\x7a\xf4\xe3\xbc\xd3\xf6\x53\xfd\x71\xe9\x3b\x92\xfb\x56\xb4\xd7\x57\x15\xaf\x1f\x2f\xf6\x2d\xc5\x3b\x5e\x1f\x71\xc1\xe3\x9a\x50\xdd\xe3\xd8\x73\x40\x63\xac\xaa\x6e\xd0\xa8\x46\xa7\x7f\xf5\x5b\xeb\x1f\x38\x61\x87\xe6\x88\x23\x1e\xdd\x94\xea\x00\xcf\x9e\x43\x6e\xce\x1f\xcf\x0b\x37\xe7\x03\xba\x8a\x0b\x19\xa4\x55\x06\x27\x3b\x77\xd3\x11\x70\x5d\x18\xf8\xf5\xb7\xf6\xd6\xdb\xb1\xa4\x2e\x7e\x74\xde\xb4\x91\xa4\x63\xe5\xac\xbb\xc2\x1c\x43\x7f\x99\xc9\x3c\xef\x6d\x7b\x55\x38\x06\xd8\x5e\x1a\xb6\x67\xb8\x33\xbc\x35\xe6\x75\x23\xd3\xc0\x4f\x5a\xf9\x1d\x71\x3a\x08\x46\x19\x9d\x04\xa3\xef\xe9\xcb\xed\x6b\x67\x52\xf8\x00\x18\x49\xce\x2e\x84\x93\xf7\x83\x2b\xb2\x6c\x54\x92\x10\xf7\xf3\xb7\xc2\x7c\x68\x76\xad\xb2\xde\x36\xa7\x26\xc7\x26\x25\xdc\x29\x5d\x0f\x3a\x14\xd9\x83\x8b\xaa\xee\x62\x7d\x34\xa4\xb8\x13\xa7\xaf\xaf\x19\x6d\xaf\x1a\xf7\xd6\x6e\x35\xe7\x10\x44\xda\x57\xe4\x76\xdd\xa0\x46\x1f\xe4\xdc\x5f\x79\x5f\x47\x0e\x13\xba\xac\x1f\xe9\x2e\xed\x7b\xd6\xdd\x62\x78\x98\xf9\x30\xc4\xa1\xea\x3d\x6c\x82\xce\x7a\xda\x9b\xf3\x83\x53\x34\xf2\x6c\xf3\xa7\x1f\xb5\xf7\x65\xc7\xea\x10\xff\xd8\xab\xc4\xbe\x11\x6b\x6f\x79\x02\x5f\x2d\xfd\x30\x84\x2f\x61\x57\xa2\xae\x59\x7b\xda\xf6\x86\xee\x99\x4a\x68\x92\x65\x7a\x7b\xe1\x37\x6c\x6a\xc7\x4f\xc8\x50\xea\xb3\xdd\xad\xe0\xec\x72\xda\x3a\xd7\x5d\xb0\xe5\xa2\x98\x5d\x4e\x83\xf6\xaf\xd0\x95\x97\xd7\x35\x83\x2d\x53\x7c\xe9\xae\xbb\x27\x32\x73\x4c\x34\xd9\x77\x37\xd7\x07\x7b\xdb\x9a\x4b\x91\x0e\x1a\xc3\xff\x04\x00\x00\xff\xff\xb5\xee\xc0\x8c\xc4\x1e\x00\x00") + +func testImagesAgnhostWebhookMainGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostWebhookMainGo, + "test/images/agnhost/webhook/main.go", + ) +} + +func testImagesAgnhostWebhookMainGo() (*asset, error) { + bytes, err := testImagesAgnhostWebhookMainGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/webhook/main.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostWebhookPatch_testGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x57\x4d\x6f\xdb\x38\x13\x3e\x8b\xbf\x62\xaa\x17\x6f\x61\x17\x8e\x54\xe7\x54\x78\xd1\x83\x37\x49\xb1\xee\x87\x5d\x44\xce\x16\x45\x1a\x2c\x28\x6a\x24\x31\x91\x48\x96\xa4\xe2\x18\x85\xff\xfb\x82\xfa\x88\xe5\xe6\xa3\x6e\xb7\x3d\xec\x1e\x62\x89\xe4\x70\xe6\x99\x67\x66\x34\x93\xf0\x19\x39\x92\x6a\xad\x79\x96\x5b\x38\x7c\x3e\x7e\x01\xcb\x1c\xe1\x4d\x15\xa3\x16\x68\xd1\xc0\xb4\xb2\xb9\xd4\x26\x20\xe4\x2d\x67\x28\x0c\x26\x50\x89\x04\x35\xd8\x1c\x61\xaa\x28\xcb\x11\xda\x93\x11\xfc\x89\xda\x70\x29\xe0\x30\x78\x0e\x03\x27\xe0\xb7\x47\xfe\xf0\x37\xb2\x96\x15\x94\x74\x0d\x42\x5a\xa8\x0c\x82\xcd\xb9\x81\x94\x17\x08\x78\xc3\x50\x59\xe0\x02\x98\x2c\x55\xc1\xa9\x60\x08\x2b\x6e\xf3\xda\x48\xab\x22\x20\x1f\x5b\x05\x32\xb6\x94\x0b\xa0\xc0\xa4\x5a\x83\x4c\xfb\x52\x40\x2d\x21\x00\x00\xb9\xb5\x6a\x12\x86\xab\xd5\x2a\xa0\x35\xca\x40\xea\x2c\x2c\x1a\x29\x13\xbe\x9d\x1d\x9d\xcc\xa3\x93\x83\xc3\xe0\x39\x21\x67\xa2\x40\x63\x40\xe3\xe7\x8a\x6b\x4c\x20\x5e\x03\x55\xaa\xe0\x8c\xc6\x05\x42\x41\x57\x20\x35\xd0\x4c\x23\x26\x60\xa5\xc3\xb9\xd2\xdc\x72\x91\x8d\xc0\xc8\xd4\xae\xa8\x46\x92\x70\x63\x35\x8f\x2b\xbb\x43\x50\x87\x8a\x1b\xe8\x0b\x48\x01\x54\x80\x3f\x8d\x60\x16\xf9\xf0\xfb\x34\x9a\x45\x23\xf2\x61\xb6\xfc\x63\x71\xb6\x84\x0f\xd3\xd3\xd3\xe9\x7c\x39\x3b\x89\x60\x71\x0a\x47\x8b\xf9\xf1\x6c\x39\x5b\xcc\x23\x58\xbc\x82\xe9\xfc\x23\xbc\x99\xcd\x8f\x47\x80\xdc\xe6\xa8\x01\x6f\x94\x76\xd8\xa5\x06\xee\xa8\xc3\x24\x20\x11\xe2\x8e\xf1\x54\x36\x60\x8c\x42\xc6\x53\xce\xa0\xa0\x22\xab\x68\x86\x90\xc9\x6b\xd4\x82\x8b\x0c\x14\xea\x92\x1b\x17\x3c\x03\x54\x24\xa4\xe0\x25\xb7\xd4\xd6\xeb\x3b\xee\x04\xe4\x59\x48\x88\xa2\xec\xca\x29\x59\x61\x9c\x4b\x79\x45\x08\x2f\x95\xd4\x16\x06\xc4\xf3\x51\x30\x99\x70\x91\x85\x97\x46\x0a\x9f\x78\x7e\x5a\x5a\xf7\xd0\x98\x16\xc8\xea\x57\x8b\xc6\x51\xe8\x13\xe2\x39\x21\x45\x2d\xcb\xc1\xcf\xb8\xcd\xab\x38\x60\xb2\x0c\xf1\x9a\x0a\x95\xdf\xd4\x2a\x0e\xea\x63\x9f\x78\x4c\x6a\xbc\x1e\x83\x7f\xf5\xc2\x04\x5c\x86\x54\xf1\xd0\x6d\x85\xd7\x63\xa7\x73\xbb\x5b\x52\x96\x73\x81\x7a\x1d\xaa\xab\xcc\x6d\x98\xb0\x44\x4b\xc3\xeb\x71\x58\x09\x63\x75\xc5\x6c\xa5\x31\xf1\xc9\x90\x90\xb4\x12\x0c\x96\x68\xec\x7b\x67\x04\xcd\xc0\xc2\xb3\x16\x5d\xb0\x1c\xc2\x17\xe2\x19\x9e\x20\xa3\x7a\x56\x3a\x7f\x5f\x42\x8d\xfd\x80\xbb\x95\x4f\x3c\xb7\x38\xa2\x06\x0d\x4c\x5e\xc2\xf9\x45\xa3\xdc\xdd\xf2\x1a\x9f\x00\xc0\x45\x5e\x64\xc4\xf3\xb8\xe0\x96\xd3\x02\x80\x0b\x8b\x3a\xa5\x0c\xbf\x6c\x88\xe7\xe1\x8d\x42\xe6\x12\x63\x77\xdb\x4a\x87\x0a\xbe\x92\xde\x38\xd5\xee\xaf\xd1\x3f\x01\x26\x45\xca\xb3\x77\x54\xd5\xf8\xc7\x23\x77\xd4\x1a\x72\x87\x8e\xb0\xe0\xa8\x93\xa9\x2f\x7a\xc7\xd4\xd2\x09\x94\x54\x9d\x37\xd0\x2e\x9a\x47\x73\xe8\xf9\x65\xd5\xc4\xfe\xc0\x58\xaa\xad\x3f\x01\x7f\x8d\xc6\xaf\x15\x7b\x9b\xfa\xd1\xfc\x76\xb8\x27\xf0\xf4\xe7\xd8\x81\xbe\xa5\xdd\xf3\x0c\x0f\xc6\x0f\x22\xa9\x7f\x1e\xe6\xe4\xf0\xbf\xcb\xc9\xe1\x63\x9c\x7c\x45\x8a\x92\x89\x99\x09\x6e\x8f\xa4\x70\x5f\x50\xd4\x35\x39\xf7\x72\xf3\x5e\x26\x0d\xa0\x48\x21\xeb\xef\xba\x75\x0b\x75\x47\x95\x99\xc0\xf9\xc5\xd6\xe1\x66\xf3\xcb\x66\x1f\x7e\x7e\x92\xad\x46\xd0\xeb\x9e\x5e\x5d\xad\x8e\x3e\x00\xbf\xfd\x46\x1d\xd0\x24\xc1\xa4\xad\xdc\x51\x27\x38\xa7\x65\x2b\x77\x47\x50\x70\x7b\xc0\x3a\x0b\xdb\x1b\xa7\x68\x64\xa5\x19\x9a\x5b\xb4\xdd\xce\x69\xd3\x43\x4a\x14\xd6\x74\xde\x77\x9e\xdf\x3e\x1f\x4b\xdc\xb4\xb4\x41\xa4\x34\x17\x36\x1d\xb8\x78\x45\xcd\xa7\xa7\x89\x14\xf4\x3f\x44\xc3\x1f\x0e\xdc\x3f\x20\xb2\xa6\x6e\x7c\x3f\x77\xb7\x44\x8d\x7f\x05\x53\x3f\x98\x38\xff\x02\x5f\xef\xb5\xde\x8f\xf4\x1e\x99\xda\x8a\xff\xaa\x14\xdd\x10\xcf\x4d\x11\x7f\x8d\xc0\x75\x3b\x46\x0d\xba\x66\xa7\xa9\xc8\x10\xb6\xfd\xcf\xf9\x21\xe3\xcb\xd7\xd1\x08\x50\x6b\x27\xe1\x7a\x77\xf0\x8e\x6a\x93\xd3\x62\xd0\x5d\x0d\xda\x9c\x1d\xba\x86\x98\xd6\xa2\x4f\x5e\x82\xe0\x45\xad\xc0\xb3\xc1\x2b\x6a\x69\x31\x40\xad\x9d\xc4\xa6\x6b\xa4\x8b\xf8\x72\x47\x6f\xbd\x19\x1c\x23\x93\x09\xd6\xe5\x31\x38\xbf\x88\xd7\x16\xb7\x76\x6a\x89\xe1\xbe\x66\x3a\x3b\x98\xf4\x1c\xe8\x2c\x07\x53\xa5\x8a\xf5\xa0\xf6\x6e\x7f\xdc\x32\xbe\x5c\xae\x55\xc3\x55\x33\xf9\x04\x6e\xbd\x48\xef\xe5\xc2\x49\xbb\x7e\xdf\x93\x9e\xe3\x6a\xd0\x2a\x19\x06\xb3\x6e\x0a\x18\x38\x69\x67\xbe\x25\xf8\x4c\x94\x2d\xc5\x3d\x07\x5a\x6d\xfb\x83\xe5\x29\x3c\xe9\xec\x1e\x23\xaa\x93\xcf\x15\x2d\x06\xad\x9a\x6d\xe0\x83\xae\x0e\x87\x9d\xa6\x13\xad\xa5\x4e\x07\xfe\x27\x71\x3b\xc7\xfc\xff\x7f\xd7\x9f\xc4\x08\x32\x69\xdd\xab\x7f\xcf\xed\x1d\x80\x6e\xaa\x21\x64\xd3\x1b\xc5\x5e\x47\x8b\x79\x1d\xd4\x57\x52\x9f\xf5\x06\xb6\xbb\xb3\x19\xab\xe3\xf4\xb4\x3f\xd5\x05\xfd\x1b\x0e\xe4\x22\xbe\x44\x66\x77\x9a\x6e\x6f\xa4\xaa\xdd\xf0\xaf\xb8\x48\xfc\xb6\xb8\xc0\x8f\x64\x89\x36\x77\xf3\x69\x5d\x08\x3e\x55\xbc\xfd\xe7\xc6\xf5\x5b\x23\x4b\xcc\xb4\xac\x94\x9b\x3b\x1b\x81\x84\x5a\xea\x3f\x6a\xe1\xd1\x11\xa2\x5f\x69\x4c\x3f\x54\x41\xcc\x05\xeb\x6e\x34\x77\x83\xe9\x32\xf9\xfb\x0a\xe6\xab\x01\x72\xb8\x97\x91\x6f\x17\x8b\xf3\xe3\xbb\x54\x2d\xe2\x4b\xa7\xe6\xe1\x50\x6e\xc8\x37\xd3\xfe\xe9\x56\xd7\x7e\xb6\xbb\x84\x74\x63\x99\xb3\xfe\x70\x04\x1f\x1d\xcd\x1e\x9b\x55\x5d\x44\xee\xaf\xae\x2d\xd8\xa0\xc9\xd1\xf3\x26\x91\x2e\x46\xd0\xc7\x35\x6c\xa1\xef\x53\x69\xfd\x7b\x23\x78\xd0\x40\xed\xfc\x86\xfc\x1d\x00\x00\xff\xff\x4a\xcc\x89\x60\x00\x10\x00\x00") + +func testImagesAgnhostWebhookPatch_testGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostWebhookPatch_testGo, + "test/images/agnhost/webhook/patch_test.go", + ) +} + +func testImagesAgnhostWebhookPatch_testGo() (*asset, error) { + bytes, err := testImagesAgnhostWebhookPatch_testGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/webhook/patch_test.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostWebhookPodsGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x58\x5f\x6f\xe3\xb8\x11\x7f\x16\x3f\xc5\x84\xc5\xee\xd9\x5b\x59\x4a\x02\x14\x38\x38\xf5\x83\x9b\xdd\x6b\xdd\xdb\x3a\x41\x9c\xdd\xc3\x21\x0d\x6e\x69\x69\x6c\xb3\x91\x48\x2d\x49\xd9\xeb\xfa\xfc\xdd\x0b\x92\xb2\x2c\xc5\xce\xde\x65\xf7\xae\xe8\x43\x81\x00\x89\x38\xc3\x99\xdf\xfc\x1f\x26\x7e\x45\x2e\x65\xb1\x56\x7c\xbe\x30\x70\x7e\x7a\xf6\x2d\xdc\x2e\x10\xbe\x2f\xa7\xa8\x04\x1a\xd4\x30\x2c\xcd\x42\x2a\x1d\x11\xf2\x96\x27\x28\x34\xa6\x50\x8a\x14\x15\x98\x05\xc2\xb0\x60\xc9\x02\xa1\xa2\x84\xf0\x1e\x95\xe6\x52\xc0\x79\x74\x0a\x1d\xcb\x40\x2b\x12\xed\x5e\x90\xb5\x2c\x21\x67\x6b\x10\xd2\x40\xa9\x11\xcc\x82\x6b\x98\xf1\x0c\x01\x3f\x25\x58\x18\xe0\x02\x12\x99\x17\x19\x67\x22\x41\x58\x71\xb3\x70\x4a\x2a\x11\x11\xf9\xb1\x12\x20\xa7\x86\x71\x01\x0c\x12\x59\xac\x41\xce\x9a\x5c\xc0\x0c\x21\x00\x00\x0b\x63\x8a\x7e\x1c\xaf\x56\xab\x88\x39\x94\x91\x54\xf3\x38\xf3\x5c\x3a\x7e\x3b\xba\x7c\x33\x9e\xbc\xe9\x9d\x47\xa7\x84\xbc\x13\x19\x6a\x0d\x0a\x3f\x96\x5c\x61\x0a\xd3\x35\xb0\xa2\xc8\x78\xc2\xa6\x19\x42\xc6\x56\x20\x15\xb0\xb9\x42\x4c\xc1\x48\x8b\x73\xa5\xb8\xe1\x62\x1e\x82\x96\x33\xb3\x62\x0a\x49\xca\xb5\x51\x7c\x5a\x9a\x96\x83\x76\xa8\xb8\x86\x26\x83\x14\xc0\x04\xd0\xe1\x04\x46\x13\x0a\x7f\x19\x4e\x46\x93\x90\xfc\x30\xba\xfd\xdb\xd5\xbb\x5b\xf8\x61\x78\x73\x33\x1c\xdf\x8e\xde\x4c\xe0\xea\x06\x2e\xaf\xc6\xaf\x47\xb7\xa3\xab\xf1\x04\xae\xbe\x83\xe1\xf8\x47\xf8\x7e\x34\x7e\x1d\x02\x72\xb3\x40\x05\xf8\xa9\x50\x16\xbb\x54\xc0\xad\xeb\x30\x8d\xc8\x04\xb1\xa5\x7c\x26\x3d\x18\x5d\x60\xc2\x67\x3c\x81\x8c\x89\x79\xc9\xe6\x08\x73\xb9\x44\x25\xb8\x98\x43\x81\x2a\xe7\xda\x06\x4f\x03\x13\x29\xc9\x78\xce\x0d\x33\xee\xfb\xc0\x9c\x88\xbc\x8a\x09\x29\x58\xf2\x60\x85\xac\x70\xba\x90\xf2\x81\x10\x9e\x17\x52\x19\xe8\x90\x80\xce\x72\x43\x49\x40\xad\xc5\x62\xae\x29\x21\x01\x7d\xf8\x56\x47\x5c\xc6\xac\xe0\x31\x4b\x2b\x5d\xf1\xf2\x8c\x92\x20\x91\x0a\x97\x67\xd0\xe4\xb0\x47\x9e\x98\xa3\x61\x6d\x62\xce\x92\x05\x17\xa8\xd6\x71\xf1\x30\xb7\x07\x3a\xb6\x4c\x9e\x7d\xc7\xf7\x90\xc9\x79\xbc\x3c\xa7\xa4\x4b\x48\x22\x85\x76\xb0\x0a\x99\xea\x91\xe0\xe6\x52\x0a\x9b\x41\xa8\xae\x99\x49\x16\xe0\x51\xc2\x00\x3e\xdc\x91\x20\x80\x0d\x95\x05\xed\x53\x96\xa6\x34\xa4\x05\x33\x0b\xda\xa7\xb1\xf5\x5d\xcc\x9b\x77\x35\x0d\xe9\x92\x65\x25\xd2\xfe\xdd\x86\xf2\x9c\xcd\x91\xf6\x69\xe5\x8c\x1e\x4b\x53\x4c\x7b\xfe\x34\xa4\x82\xe5\x47\x88\x82\x9b\x5e\xb2\x13\x47\x43\xaa\x50\xcb\x52\x25\xa8\x69\x7f\xb3\xdd\xde\x6f\x49\x70\xff\xc1\x83\x9e\xf0\x14\x13\x76\x14\x6e\x13\x2d\xb4\xe1\xd6\xb2\x75\xdc\xdb\x83\xdd\x63\x7d\xb1\x7c\x0a\x9a\xf6\xfa\x0e\x30\x79\x48\x5d\x42\xe2\x18\xa4\xc8\xd6\xc0\xb2\x4c\xae\xc0\x42\xb4\x85\x51\x94\x59\x06\x4e\xba\x86\x99\x92\xf9\x3e\xe3\x14\xce\x6d\xfa\xaf\x23\x32\x2b\x45\x02\x36\x01\xcc\xb5\x4c\x75\x87\x29\x58\x9e\x45\xc3\x5d\x42\xdc\xe0\x92\xe3\xaa\x0b\xaf\xda\x87\xba\x90\x36\x91\x37\x24\xb0\x71\x8d\xde\x77\xce\xbb\xd1\x48\xcc\x64\x87\x3a\x49\xc6\x65\xb0\x4c\x35\xed\x3a\x7f\xdd\x54\xa0\xa1\x3f\x00\x9f\x3f\xd1\x5f\x95\x2c\x8b\xaa\x3d\xed\xc8\x1b\x77\xd8\x07\x4a\xeb\xce\xd5\x07\xba\x3c\xa3\x21\xec\x58\xfa\x40\x9d\xdc\x2d\x09\xf8\x0c\x98\x8a\x6e\xf0\x63\x89\xda\x44\xb5\x8a\x93\x01\x34\x35\x6e\x48\x10\xa0\x52\x56\xf3\x2c\x37\xd1\x1b\xa5\xa4\x9a\x75\x28\x7e\x2a\x30\x31\xb0\xf3\xa6\x75\xd6\x14\xe1\x85\xa6\x61\xf3\x76\x97\x04\xde\x40\x77\xad\x83\x4a\xd9\x13\x85\xa6\x54\x02\x8c\x7c\x7f\x76\xe0\x92\x8a\x67\x4b\x48\xa0\xd8\xca\x6a\x6d\x60\xbc\x9a\xfe\x0b\x13\x13\xdd\xb0\x95\xf3\x8a\xa5\xfa\x52\x8b\xae\x65\xba\xd9\x92\x20\x45\x8d\x8a\xb3\x8c\xff\x1b\x95\xa7\xa6\x98\xe8\xe8\x9d\xe0\x4b\x54\x9a\x65\xaf\x1b\xf4\x4e\xd7\xb9\xe0\xa7\xd0\xfe\x54\x16\x36\xef\x47\xaf\xd1\x5e\xef\x28\xb6\x0a\x41\xf0\x2c\x84\x97\x85\x4c\xbb\x17\x8e\xf7\x64\x60\x8f\x9c\x73\xbe\xd0\xbe\x40\xb9\xcc\xa8\x53\xa1\x3f\x80\x63\x29\xb2\x39\xe0\x8c\x86\x36\x45\x31\x85\x01\x18\x55\x22\x21\xc1\x92\x29\xc8\xf5\xbc\xaa\x23\x67\xd5\x32\x04\xf9\x60\x65\x16\x32\x8d\xde\xb2\x29\x66\xfa\xae\x2e\x09\x3c\xc7\x9e\x41\x6d\xe8\xfd\x85\xe5\xb2\x46\xd8\x2b\x30\x18\x40\xcd\x93\x72\xed\x4a\x81\x3a\xf2\xd3\x10\x66\x2c\xd3\x68\x39\x2c\x80\x81\x83\xf1\x47\xa0\xb6\xb5\xda\x00\x55\x05\x6b\x3b\xee\x8a\x09\x3b\x28\x32\x8b\xe5\x02\x28\x09\xac\x0f\x1a\x7a\x19\x37\xbd\x99\x0d\x26\xaa\xaf\xd3\xa9\x76\x1e\xd5\x0b\x59\x66\xa9\x9b\xce\x53\x04\x8d\xc2\x78\xbd\xc1\x9f\x7b\x39\x7b\xc0\x4e\xb2\x60\x02\xb8\x30\x5d\x88\x63\x98\x64\x88\x05\x54\x00\xa0\x07\x42\x82\x14\xee\x96\xef\x04\x6e\xb6\xdb\x1b\x02\x33\x8f\x7d\x4b\x02\x3b\x87\x7e\x0a\xa1\x6e\x4b\xd6\xe1\x8a\x89\xb9\x03\x12\x4d\x0a\x4c\xa2\x7d\x77\xdd\xf9\xb9\x1a\x21\x3b\x8a\xee\xd4\xd7\xa3\x31\xcb\x31\x3c\x12\x83\xee\x6f\x1c\x84\x3d\x60\xdb\x2c\xeb\x68\xf8\x9e\x70\xf2\x84\x9a\x0d\x39\x40\x70\x83\xba\xcc\x0c\x0c\xe0\x65\xd5\x94\x26\x86\x99\x52\x6f\xfe\x81\x5a\xb3\x39\xf6\x6b\x5b\x6f\x15\xcf\x27\x05\x4b\xb0\x93\xeb\x79\x77\x5b\xe5\xbf\xab\x92\x97\x6d\x99\x64\x4b\x7c\x47\xcd\x4b\xc3\x0c\x7e\x51\x4b\xf5\x81\x77\xb3\xe5\xda\x77\x09\x2b\xb1\x63\x7d\xf1\x6a\xdf\x2f\xba\x30\x95\x32\xdb\x45\xc5\x06\xcc\xba\xdf\x56\x76\x1d\x00\x23\x7b\x53\xec\x79\x24\x69\x9d\x95\x0e\xf6\xce\xe5\xdb\x7d\xbd\x9f\x2c\x98\xae\xc3\xdd\xa9\x33\xa0\x35\x9f\x75\x23\xbc\x47\x87\x66\xb7\xe9\x1b\xbb\xb3\xad\xaf\xa5\x37\xa5\xc3\x54\x08\x6d\xd3\x5c\xaf\x3d\xb2\x00\x74\x8f\x78\xb1\x9a\xb8\xcf\x76\xa6\xcd\x58\x7f\x75\x64\xe7\xa0\x2b\x56\x5a\x25\x83\x0f\xe0\xd1\xb6\x65\x5d\x55\x65\x4e\xdf\x3b\x2b\xb4\x47\x3e\x63\xfa\x8f\x13\xc6\x92\x02\xff\x77\x1f\x80\x7e\xc7\x78\x56\x2a\xa4\xee\x4a\x50\x67\x13\x1d\x4b\x3f\x8c\x77\x63\xd8\x6f\xb6\x6e\x13\xf4\x10\xfd\x7e\x02\x05\x53\x2c\x47\x63\x77\x10\x27\xe1\x52\xa6\xd8\xb7\x3b\xf4\x9f\x4e\x4f\xdd\xc9\x36\xac\x33\xfe\xd9\xc9\xf2\xf9\x68\x7f\x26\xd2\xbb\x1d\xe4\x99\x21\xb6\x53\x77\x52\x28\x2e\xcc\xac\xf3\x78\x75\x0a\x5b\xb1\xe9\xee\xe3\xde\x02\xb7\x5f\x9b\xe0\xee\xbe\xb2\xa9\xa6\x36\xda\x97\xcb\x7f\x5f\xb2\x7b\x7b\x9f\xee\x71\xc9\x41\x6b\x6b\x77\x32\x9b\x2a\x6d\xd9\xcd\x02\x72\xb3\x6b\x17\x84\x56\x51\xed\x6c\x78\xec\x9a\x23\x79\xfb\xd8\x5b\x3e\x76\x07\x71\x0b\xa1\x68\x2c\x9a\xcf\x58\xc6\x5c\xf9\xfc\x6f\xed\x62\xfb\x75\xe3\x59\x5b\x58\xe5\x61\xc1\xb3\xff\x2f\x57\xcf\x58\xae\x5c\xfb\x6b\xa5\x58\xc7\x01\x3d\x36\x0d\xfd\x63\x66\x00\x77\xf7\xd3\xb5\xc1\x4e\xe1\x3b\x71\x10\x14\xa6\xd2\xef\x18\x6e\xd7\x05\xfe\x7d\x72\x35\x76\x1f\x4f\x08\xb1\x3c\x76\xaa\x16\xe6\x17\x26\x65\x1c\x43\x8a\x62\x3d\xa9\x5e\x25\x43\x63\x58\xb2\xc8\x51\x18\x7b\xcc\x51\xc3\x87\x87\x72\x8a\x89\xc9\x80\x39\x12\xf8\x89\xe6\x3f\x30\xed\xd9\x38\xf7\x38\xf4\x92\x41\x5d\xa8\x67\xd4\xbd\x85\x14\xe0\xc7\x92\x2f\x59\x66\x85\x25\x19\xb7\xbf\x94\xcf\x14\x5d\xbd\x79\x8e\x6b\xfe\xea\x07\xd0\x82\x89\x34\xb3\x35\xe7\x51\x36\xab\xaf\x5d\x25\xf5\xb8\x3e\x34\xea\x57\x0c\xa8\x7a\x38\xd9\x38\xfb\x2e\xf4\x3b\x16\x37\x86\xc0\xaa\x75\x7c\xc7\x10\x1e\xab\xf8\x0b\x70\x26\xb1\xe7\x3e\xbb\x42\x98\x4b\xe3\x0b\xdf\x0a\xfe\x8a\x77\x57\x13\x2d\xf5\x3e\xa5\x2d\xa8\x93\x72\xfa\x4c\xb4\xba\x9c\xfe\x8e\x80\x7f\x45\x2f\xf3\xd9\x79\x55\xf8\xff\xfe\xb4\x1a\x5b\x8b\xf4\xdf\xe9\x72\x2d\x95\xbf\x5d\xcb\x7b\x54\x47\xcd\xb5\x81\x3e\xd6\x3a\x78\xf1\x87\xe5\x3f\x85\x9f\x12\x6d\x38\xde\xa2\x93\xc7\xe7\xd1\xc4\xa4\x5c\xc0\xcf\x3f\x1f\xdc\xd8\x6f\x12\xae\x16\x1b\x7d\xe4\x8b\x6a\xf0\x97\x96\xca\xc3\x9d\xf2\x33\x2b\xe5\x7e\x73\xdc\xf7\x12\x23\xdd\xa3\xe8\x9b\xc3\xa6\xf1\x0d\x70\xed\x5e\x8b\xcc\xeb\x70\xcb\xa3\xdd\x14\xb7\x64\x4b\xfe\x13\x00\x00\xff\xff\x16\xa1\xb8\xcd\x57\x16\x00\x00") + +func testImagesAgnhostWebhookPodsGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostWebhookPodsGo, + "test/images/agnhost/webhook/pods.go", + ) +} + +func testImagesAgnhostWebhookPodsGo() (*asset, error) { + bytes, err := testImagesAgnhostWebhookPodsGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/webhook/pods.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesAgnhostWebhookSchemeGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x92\x4f\x4f\xeb\x46\x14\xc5\xd7\xcc\xa7\x38\xca\x2a\x41\xa9\x0d\xac\x50\x2b\x16\x6e\x00\xd5\x82\x26\x12\x0e\x45\x2c\x27\xe3\x1b\xfb\x2a\xf6\x8c\x3b\x33\x8e\x49\x2b\xbe\xfb\x93\x1d\xe7\x91\x04\x78\x7a\x7f\x96\xb9\xe7\x77\xcf\x39\xbe\x99\xf0\x54\x4c\x4c\xb5\xb1\x9c\xe5\x1e\x17\x67\xe7\x97\x98\xe7\x84\xbb\x7a\x41\x56\x93\x27\x87\xa8\xf6\xb9\xb1\x2e\x10\xe2\x9e\x15\x69\x47\x29\x6a\x9d\x92\x85\xcf\x09\x51\x25\x55\x4e\xe8\x95\x31\xfe\x21\xeb\xd8\x68\x5c\x04\x67\x18\xb6\xc0\xa0\x97\x06\xa3\x3f\xc4\xc6\xd4\x28\xe5\x06\xda\x78\xd4\x8e\xe0\x73\x76\x58\x72\x41\xa0\x17\x45\x95\x07\x6b\x28\x53\x56\x05\x4b\xad\x08\x0d\xfb\xbc\x0b\xe9\x2d\x02\xf1\xdc\x1b\x98\x85\x97\xac\x21\xa1\x4c\xb5\x81\x59\xee\x53\x90\x5e\x08\x00\xc8\xbd\xaf\x7e\x0f\xc3\xa6\x69\x02\xd9\xb5\x0c\x8c\xcd\xc2\x62\x4b\xb9\xf0\x3e\x9e\xdc\x4c\x93\x9b\xdf\x2e\x82\x33\x21\x1e\x75\x41\xce\xc1\xd2\xbf\x35\x5b\x4a\xb1\xd8\x40\x56\x55\xc1\x4a\x2e\x0a\x42\x21\x1b\x18\x0b\x99\x59\xa2\x14\xde\xb4\x3d\x1b\xcb\x9e\x75\x36\x86\x33\x4b\xdf\x48\x4b\x22\x65\xe7\x2d\x2f\x6a\x7f\x70\xa0\x5d\x2b\x76\xd8\x07\x8c\x86\xd4\x18\x44\x09\xe2\x64\x80\x3f\xa3\x24\x4e\xc6\xe2\x29\x9e\xff\x35\x7b\x9c\xe3\x29\x7a\x78\x88\xa6\xf3\xf8\x26\xc1\xec\x01\x93\xd9\xf4\x3a\x9e\xc7\xb3\x69\x82\xd9\x2d\xa2\xe9\x33\xee\xe2\xe9\xf5\x18\xc4\x3e\x27\x0b\x7a\xa9\x6c\xdb\xdd\x58\x70\x7b\x3a\x4a\x03\x91\x10\x1d\x84\x2f\xcd\xb6\x8c\xab\x48\xf1\x92\x15\x0a\xa9\xb3\x5a\x66\x84\xcc\xac\xc9\x6a\xd6\x19\x2a\xb2\x25\xbb\xf6\xcf\x73\x90\x3a\x15\x05\x97\xec\xa5\xef\x7e\xbf\xfb\x9c\x40\x9c\x86\x42\x54\x52\xad\x5a\x93\x86\x16\xb9\x31\x2b\x21\xb8\xac\x8c\xf5\x18\x8a\x13\x99\xf6\x66\xeb\x73\x0c\x56\x97\x2e\x60\x13\xca\x8a\xc3\xaf\xf3\x70\x7d\x3e\x38\xc0\x16\xe4\xe5\xe7\x6c\xa7\xee\x2f\x58\xca\xda\x73\x76\x05\x3f\xcb\xd8\x67\x8e\xf2\x0e\xd7\xbf\x91\x7d\xe4\xb1\xeb\xa1\x8c\xa5\xa3\xd8\x76\xb4\x4d\xd9\x9b\x96\x52\xe5\xac\xc9\x6e\xc2\x6a\x95\x85\xb6\xd6\x9e\x4b\xfa\x0e\x24\x74\x64\x59\x16\xfc\x1f\xd9\x81\x38\xa9\x3d\x17\xbd\x80\x4f\x37\x5b\xe8\x2d\x61\x24\xc4\x5a\x5a\x38\x95\x53\x49\xb8\x42\x2f\x04\x53\x6a\x92\x6e\x36\x1c\x75\x80\x32\x29\x29\x87\x2b\xbc\x05\xb6\xcc\xa4\x1d\xdf\x4a\xe5\x8d\xdd\x0c\xb7\x26\x23\x21\x96\xb5\x56\x60\xcd\x7e\x38\xc2\xff\xed\x35\xd3\xb9\xe9\xdd\x76\xcc\x6b\x4f\xbd\xd7\x70\xba\xeb\xb0\x1d\x77\x16\x7b\x5f\x16\xfc\x5d\x3b\x3f\xdc\x1e\x36\x88\xde\x5b\x8f\x3e\xa0\x8f\xdf\xcf\x0f\xef\x7d\xf0\x0e\x7e\x22\xfb\x17\x63\x3f\x5e\x7f\x15\x5f\x02\x00\x00\xff\xff\xff\xeb\x6a\xaa\x9b\x05\x00\x00") + +func testImagesAgnhostWebhookSchemeGoBytes() ([]byte, error) { + return bindataRead( + _testImagesAgnhostWebhookSchemeGo, + "test/images/agnhost/webhook/scheme.go", + ) +} + +func testImagesAgnhostWebhookSchemeGo() (*asset, error) { + bytes, err := testImagesAgnhostWebhookSchemeGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/agnhost/webhook/scheme.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesApparmorLoaderBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\xb3\xe0\x82\x0a\x17\xe5\xda\x26\x16\xe5\x1a\x1b\x95\x99\xe9\x63\x93\x04\xe9\x01\x91\x65\x16\x98\xd2\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\x01\x20\x00\x00\xff\xff\x60\x32\x37\xfb\x74\x00\x00\x00") + +func testImagesApparmorLoaderBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesApparmorLoaderBaseimage, + "test/images/apparmor-loader/BASEIMAGE", + ) +} + +func testImagesApparmorLoaderBaseimage() (*asset, error) { + bytes, err := testImagesApparmorLoaderBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/apparmor-loader/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesApparmorLoaderDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x93\x41\x73\xab\x36\x14\x85\xf7\xfa\x15\x67\xa0\x8b\x76\xc6\x40\xea\x45\x17\xed\x74\xc1\xb3\xfd\xde\x63\x5e\x0c\x29\xd8\xcd\x78\x3a\x99\x8c\x8c\xae\x41\x53\x59\x52\x24\x11\xe2\x7f\xdf\x01\x27\x69\xd3\xc7\x8a\xcb\x3d\x1c\xbe\x7b\x0f\x8a\xb1\x32\xf6\xe2\x64\xd7\x07\x2c\x6f\x7e\xfe\x05\xbb\x9e\xf0\x6d\x38\x92\xd3\x14\xc8\x23\x1f\x42\x6f\x9c\x4f\x59\xcc\x62\xdc\xca\x96\xb4\x27\x81\x41\x0b\x72\x08\x3d\x21\xb7\xbc\xed\xe9\xad\xb3\xc0\x9f\xe4\xbc\x34\x1a\xcb\xf4\x06\x3f\x4e\x82\xe8\xb5\x15\xfd\xf4\x1b\x8b\x71\x31\x03\xce\xfc\x02\x6d\x02\x06\x4f\x08\xbd\xf4\x38\x49\x45\xa0\x97\x96\x6c\x80\xd4\x68\xcd\xd9\x2a\xc9\x75\x4b\x18\x65\xe8\xe7\xcf\xbc\x9a\xa4\x2c\xc6\xe1\xd5\xc2\x1c\x03\x97\x1a\x1c\xad\xb1\x17\x98\xd3\x7f\x75\xe0\x61\x06\x9e\xae\x3e\x04\xfb\x6b\x96\x8d\xe3\x98\xf2\x19\x36\x35\xae\xcb\xd4\x55\xe8\xb3\xdb\x62\xb5\x29\x9b\x4d\xb2\x4c\x6f\xe6\x57\xf6\x5a\x91\xf7\x70\xf4\x34\x48\x47\x02\xc7\x0b\xb8\xb5\x4a\xb6\xfc\xa8\x08\x8a\x8f\x30\x0e\xbc\x73\x44\x02\xc1\x4c\xbc\xa3\x93\x41\xea\x6e\x01\x6f\x4e\x61\xe4\x8e\x58\x0c\x21\x7d\x70\xf2\x38\x84\x0f\xcb\x7a\xa3\x93\xfe\x83\xc0\x68\x70\x8d\x28\x6f\x50\x34\x11\x3e\xe5\x4d\xd1\x2c\x58\x8c\xfb\x62\xf7\xb5\xda\xef\x70\x9f\xd7\x75\x5e\xee\x8a\x4d\x83\xaa\xc6\xaa\x2a\xd7\xc5\xae\xa8\xca\x06\xd5\x67\xe4\xe5\x01\xdf\x8a\x72\xbd\x00\xc9\xd0\x93\x03\xbd\x58\x37\xf1\x1b\x07\x39\xad\x91\xc4\xb4\xb3\x86\xe8\x03\xc0\xc9\x5c\x81\xbc\xa5\x56\x9e\x64\x0b\xc5\x75\x37\xf0\x8e\xd0\x99\x67\x72\x5a\xea\x0e\x96\xdc\x59\xfa\x29\x4c\x0f\xae\x05\x8b\xa1\xe4\x59\x06\x1e\xe6\x27\xdf\x0d\x95\x32\x96\xd7\x5f\x26\xfa\x4d\xb1\xcd\xbf\x6c\xd8\xe7\xba\xda\xe2\x87\x7f\x6b\xb6\xaa\xab\xa6\x79\xfc\xb4\x2f\x6e\xd7\x8f\xab\xea\xee\x80\x27\x3a\x0f\xc9\x1f\x9b\xed\x3e\xaf\x57\x5f\x13\x3f\x59\xb7\xc8\x06\xef\xb2\xa3\xd4\x19\x63\xf5\xbe\x04\xb7\x7f\x83\x0b\x31\x65\xc0\xdd\xd9\x38\x28\x79\x7c\xbf\x4f\x92\xc1\x0a\x1e\x28\x69\xe7\x9f\x30\x49\x1c\x59\xe3\x65\x30\xee\xf2\x16\xbb\x50\x49\x2b\x74\xca\x95\x95\x9a\x94\xd4\xc3\xcb\x1c\xff\xb5\xce\x48\x74\x94\x05\xf2\x53\x7e\x19\x92\x84\x2b\x65\xc6\x64\xd0\xc1\x0d\x3e\x90\x60\x2c\x5f\xaf\xa1\x0c\x9f\x66\x7d\x07\xbb\xd6\x8c\x6d\xca\x5d\x7d\xb8\xab\x8a\x72\x87\xbf\xa2\xff\x75\xa3\x05\xa2\x44\x99\x2e\x18\x1f\x04\xb9\x6b\xfd\xfc\xfb\x32\x7a\x60\x2c\xc6\x9a\x4e\x7c\x50\x01\x42\x3a\x6a\x67\xda\x60\x30\xf2\xd0\xf6\x29\x5b\x6d\xd7\x93\x9d\x75\x66\x3a\x16\x3e\x7a\x60\xff\x04\x00\x00\xff\xff\x50\x23\xa2\xf6\xa3\x03\x00\x00") + +func testImagesApparmorLoaderDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesApparmorLoaderDockerfile, + "test/images/apparmor-loader/Dockerfile", + ) +} + +func testImagesApparmorLoaderDockerfile() (*asset, error) { + bytes, err := testImagesApparmorLoaderDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/apparmor-loader/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesApparmorLoaderMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6b\xdb\x3e\x14\xc5\x9f\xff\xfa\x14\x87\xb8\x0f\x09\xa4\x4e\xff\x65\x74\xd0\x51\x86\x97\x64\xa9\x69\x67\x0f\x3b\x6d\xe9\x53\x91\xed\x1b\xfb\x82\x22\x79\x92\x3c\x27\xdf\x7e\x28\x6d\x61\x65\x7a\xbb\xf7\x9e\x7b\xf4\xd3\x51\x84\xa5\xe9\x8f\x96\xdb\xce\xe3\xf2\xe2\xff\x2b\x6c\x3b\xc2\xdd\x50\x91\xd5\xe4\xc9\x21\x19\x7c\x67\xac\x8b\x45\x24\x22\xdc\x73\x4d\xda\x51\x83\x41\x37\x64\xe1\x3b\x42\xd2\xcb\xba\xa3\xf7\xc9\x1c\x8f\x64\x1d\x1b\x8d\xcb\xf8\x02\xd3\x20\x98\xbc\x8d\x26\xb3\x2f\x22\xc2\xd1\x0c\xd8\xcb\x23\xb4\xf1\x18\x1c\xc1\x77\xec\xb0\x63\x45\xa0\x43\x4d\xbd\x07\x6b\xd4\x66\xdf\x2b\x96\xba\x26\x8c\xec\xbb\xd3\x35\x6f\x26\xb1\x88\xf0\xfc\x66\x61\x2a\x2f\x59\x43\xa2\x36\xfd\x11\x66\xf7\xb7\x0e\xd2\x9f\x80\xc3\xe9\xbc\xef\xaf\x17\x8b\x71\x1c\x63\x79\x82\x8d\x8d\x6d\x17\xea\x55\xe8\x16\xf7\xe9\x72\x9d\x95\xeb\xf3\xcb\xf8\xe2\xb4\xf2\xa0\x15\x39\x07\x4b\xbf\x06\xb6\xd4\xa0\x3a\x42\xf6\xbd\xe2\x5a\x56\x8a\xa0\xe4\x08\x63\x21\x5b\x4b\xd4\xc0\x9b\xc0\x3b\x5a\xf6\xac\xdb\x39\x9c\xd9\xf9\x51\x5a\x12\x11\x1a\x76\xde\x72\x35\xf8\x0f\x61\xbd\xd3\xb1\xfb\x20\x30\x1a\x52\x63\x92\x94\x48\xcb\x09\xbe\x25\x65\x5a\xce\x45\x84\xa7\x74\x7b\x9b\x3f\x6c\xf1\x94\x14\x45\x92\x6d\xd3\x75\x89\xbc\xc0\x32\xcf\x56\xe9\x36\xcd\xb3\x12\xf9\x77\x24\xd9\x33\xee\xd2\x6c\x35\x07\xb1\xef\xc8\x82\x0e\xbd\x0d\xfc\xc6\x82\x43\x8c\xd4\x84\xcc\x4a\xa2\x0f\x00\x3b\xf3\x0a\xe4\x7a\xaa\x79\xc7\x35\x94\xd4\xed\x20\x5b\x42\x6b\x7e\x93\xd5\xac\x5b\xf4\x64\xf7\xec\xc2\x67\x3a\x48\xdd\x88\x08\x8a\xf7\xec\xa5\x3f\x75\xfe\x79\x54\x2c\x44\x59\x2c\xcb\x1b\x65\x64\x43\x56\xe4\x25\xbe\xde\x40\xb1\x1e\x0e\x22\x29\x96\xb7\xa1\x92\xfb\xe6\xea\x93\xd8\x26\xc5\x66\xbd\x0d\xf5\xd9\x74\xf9\x50\xac\xd2\x62\x26\x36\x79\x52\xfc\x08\xad\xcf\x62\x93\xdf\x27\xd9\xe6\xe5\x71\x5d\x94\x69\x9e\x9d\x4c\xa4\x27\xe7\x83\xfb\xcb\x2a\x2d\x10\xf6\xb4\xf1\x0d\x5b\x9c\x4d\x5d\x47\x4a\xa1\x1f\x9b\xd9\x4c\xd0\xa1\x37\xd6\x0b\x51\xb1\xbe\x16\xff\xc5\xf1\x82\xf7\xb2\xa5\xf3\xc1\xb3\x8a\x5d\x87\x8a\x35\xce\xa6\x81\x71\x26\x44\xfc\xf3\x36\xcf\x9e\xaf\x43\x53\xfc\x09\x00\x00\xff\xff\xc9\x5a\xa2\x25\x03\x03\x00\x00") + +func testImagesApparmorLoaderMakefileBytes() ([]byte, error) { + return bindataRead( + _testImagesApparmorLoaderMakefile, + "test/images/apparmor-loader/Makefile", + ) +} + +func testImagesApparmorLoaderMakefile() (*asset, error) { + bytes, err := testImagesApparmorLoaderMakefileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/apparmor-loader/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesApparmorLoaderOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\x48\xc9\xcc\x2d\xe6\x02\x04\x00\x00\xff\xff\xe2\x68\x65\xd7\x14\x00\x00\x00") + +func testImagesApparmorLoaderOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesApparmorLoaderOwners, + "test/images/apparmor-loader/OWNERS", + ) +} + +func testImagesApparmorLoaderOwners() (*asset, error) { + bytes, err := testImagesApparmorLoaderOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/apparmor-loader/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesApparmorLoaderVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") + +func testImagesApparmorLoaderVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesApparmorLoaderVersion, + "test/images/apparmor-loader/VERSION", + ) +} + +func testImagesApparmorLoaderVersion() (*asset, error) { + bytes, err := testImagesApparmorLoaderVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/apparmor-loader/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesApparmorLoaderExampleConfigmapYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x94\x5f\x6f\xeb\x44\x10\xc5\xdf\xfd\x29\x46\xea\x0b\x44\x4e\x17\x24\x84\x20\x02\x04\xba\xe8\xbe\x20\x04\x02\x89\x97\xe8\x26\x1a\xef\x8e\xed\xbd\xde\x7f\xcc\x8e\xe3\x86\xd2\xef\x7e\x65\x37\x69\xd3\xdb\x6d\xfb\x90\x97\xf3\x9b\x3d\x7b\x66\x67\xe2\x2b\xf8\x25\x00\xdd\xa0\x4f\x8e\xe0\x5d\x0c\xad\xed\x7e\xc7\x04\x86\x7c\x0c\x59\x18\xc5\x86\x0e\xfa\x38\x41\xe2\xd8\x5a\x47\x19\x34\x06\x68\x08\xb2\x44\x26\x03\x98\xe1\xb7\xb1\x21\x0e\x24\x94\x21\x36\x1f\x49\x4b\xae\x01\x83\x01\x17\xd1\x90\x81\xe6\x58\x5d\x81\xf4\x04\x98\x12\xb2\x8f\xbc\x5e\x00\xc3\xaf\x38\x5f\xf2\x37\xc9\x75\x55\x61\xb2\xff\x10\x67\x1b\xc3\x06\x0e\x5f\x57\x83\x0d\x66\xf3\x18\xa7\xf2\x24\x68\x50\x70\x53\x01\x04\xf4\xb4\x79\x34\x3b\xe7\x3a\x91\x9c\x50\x5f\xe0\xea\x7c\xea\x0a\xde\x5b\x47\x73\x05\x0c\xdf\xe5\x75\xe8\x6c\xb8\x01\x8f\x29\x83\xc4\x25\x9d\xa1\xd6\x06\x2b\x36\x06\x88\xed\xa2\xdc\xd7\x9c\xfc\xaf\x2b\x78\x3c\xb8\x81\xff\xd7\x15\x00\xc0\x95\x0d\xda\x8d\x86\xe0\x07\x19\x03\x36\x8e\xb2\xea\x5c\x6c\xd0\xfd\x54\xdd\x73\x78\xcf\xd1\x43\x2f\x92\xf2\x46\xa9\xce\x4a\x3f\x36\xd7\x3a\x7a\xf5\xb1\x65\xfc\x8f\x9c\x23\xd5\x60\x20\xd5\xb8\xd8\x28\x8f\x59\x88\x95\x89\x7a\x20\xbe\xbf\x69\x9d\x97\xc9\x2c\x66\xa7\x24\x17\xf9\x5b\x87\x5d\xfe\xf1\x0b\x14\x41\xdd\xef\x8d\xcd\x3a\x86\x40\x5a\xc8\xd4\x9e\x8c\x45\xa1\xbd\x21\x47\x42\xe6\x4b\xb8\x5d\x3c\x2e\x23\x63\x33\x0f\x58\xcf\x2d\x67\xd5\x60\xa6\x53\x68\x80\x40\x32\x45\x1e\xc0\x06\x12\x10\x9d\xea\x92\x3e\x9a\xb2\x6e\xb5\x4f\xf5\xd9\xc9\x50\x38\x3e\x60\xc6\xa9\x0c\x12\xea\x81\xe4\x81\xcd\x5d\x9e\xad\x47\x1f\xc7\x20\x4f\x8f\xa9\xc6\x06\xb5\x5a\xc1\xe4\xea\xa7\x72\x8c\x52\xd2\x0d\x1d\x4a\x32\x89\x2e\xc9\x7d\xf4\x54\xd2\x9d\x6d\x5e\x90\xbf\xfd\xa6\x04\x96\x09\x14\x41\x28\xa6\x8c\xa9\x28\x27\x8e\xc5\x98\xfc\x42\xb3\xf9\x85\xc7\xc9\x5c\x7c\x04\xf1\xa9\x58\x7d\xcc\x25\x79\xcc\x7c\x96\x4f\x3a\x8e\xc6\x0a\x2c\xe2\x83\xa6\x0e\xc8\x8a\xc7\xa0\x96\x2d\xbd\x4e\xd6\x5c\xc2\xd9\x63\x09\x79\xbf\xc3\xf6\xa6\x30\x5c\x83\xb9\x07\xcf\xd3\xe0\x6e\xea\x67\xf0\x05\x34\xfb\xce\x58\x62\x7a\xe0\xa7\x02\x8d\x09\x1b\xeb\xac\x1c\x41\xf7\x71\x0a\xf5\x73\xdd\xa0\xde\xc7\x03\x31\x5b\x43\x05\x9c\x49\x46\x6b\xca\xa0\x2b\x82\x40\xb2\x6f\x6c\x30\xfb\x4c\x7c\xb0\x9a\x9e\x76\xf9\xf3\xed\x9f\x7f\xfd\xf1\xee\x4e\xdd\xae\xea\xd5\x6a\xb7\xfd\x6a\xfd\xfd\xea\x43\x3d\x3f\xfa\x30\x7f\x4a\x9d\xca\xbd\x5f\xdd\xc1\x34\x3c\xed\xf1\x7c\x2a\x1f\x33\xff\xbb\x16\xb6\x5d\x47\x0c\xcf\xdf\xe2\x5c\xe7\xc9\xbf\x42\x87\x37\xb0\x8e\x4c\x05\x7e\xfa\x43\x7e\xbe\x2d\xdb\x5d\xfb\x61\xb5\xec\xc1\xb3\xc9\xcc\xb8\xdd\xee\xf2\xab\x7c\x76\xd0\x6f\x54\xe8\xed\xae\x7b\xab\xa4\xdb\xee\xf8\xd5\x1a\xcb\x7e\x42\x26\x45\xad\x9d\x7f\x07\xe4\x65\xd5\x0b\x1b\x75\x39\x0f\xd2\x23\x5b\x39\x7e\x56\x79\x57\x7d\x0a\x00\x00\xff\xff\x7e\x92\x58\xad\x40\x07\x00\x00") + +func testImagesApparmorLoaderExampleConfigmapYamlBytes() ([]byte, error) { + return bindataRead( + _testImagesApparmorLoaderExampleConfigmapYaml, + "test/images/apparmor-loader/example-configmap.yaml", + ) +} + +func testImagesApparmorLoaderExampleConfigmapYaml() (*asset, error) { + bytes, err := testImagesApparmorLoaderExampleConfigmapYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/apparmor-loader/example-configmap.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesApparmorLoaderExampleDaemonYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x54\xc1\x6e\xdb\x3a\x10\xbc\xeb\x2b\x06\xf0\xd9\x76\x1e\x72\xf3\x2d\xc8\x3b\xbe\xbc\x16\x68\xd0\xfb\x86\x5c\x5b\x44\x49\x2e\x4b\xae\x9c\xf8\xef\x0b\x4a\xb6\x2c\xc9\x71\x50\x9d\x6c\x72\x39\x33\x3b\xb3\xe4\x0a\xaf\x2d\x83\x3f\x28\x24\xcf\xf8\x97\x38\x48\xfc\xc1\x0a\x5b\x7f\x14\xcd\xa4\x2e\x1e\xd0\xca\x3b\xb4\x65\xa4\x2c\x7b\xe7\x19\x5e\xc8\x72\x86\xa1\x88\x37\x86\xe5\xe4\xe5\xc4\x16\x12\x55\x40\x30\xbe\x2b\xca\x19\x2a\xcd\x0a\xd4\xa9\x04\x52\x67\xc8\xfb\x53\x7f\x10\x4f\x29\x3d\xe5\x20\xf9\x02\x57\xb0\xcf\x12\x40\x78\x96\xb8\x77\x87\x17\x4a\x9b\xa6\xa1\xe4\x7e\x72\x2e\x4e\xe2\x0e\x94\x52\xd9\x1e\xff\x69\x7e\xb9\x68\x77\x57\x91\x4d\x60\x25\x4b\x4a\xbb\x06\x88\x14\xb8\xaf\xa4\x0a\xbd\x1e\x14\x36\xc0\x0a\xff\x53\xe0\x92\xc8\x30\x42\x57\x14\x81\xd4\xb4\xd0\x96\x14\xb2\xef\xbb\x9a\xd0\x0e\x38\x7d\xf5\x15\xac\x01\x3c\xbd\xb1\x2f\x95\x07\xb0\x3d\xff\x2d\x57\x49\x6c\x6a\x45\x61\xcf\x46\x25\x0f\xd5\x3d\xdd\x7f\x93\xe3\xf7\x01\x00\xe5\x90\x3c\x29\x9f\x8f\x4e\xda\xab\xdf\xbd\x16\xeb\xe7\x67\x0c\x5f\x71\x00\x17\xa1\xf5\x33\x12\x95\x5c\xe4\x3c\x9e\x5d\x7f\xc9\x03\xb8\x40\x07\xde\xe1\x20\x72\xf0\xbc\x5d\x54\xed\xaa\xfa\xa2\x63\x31\xe5\xc3\x44\x54\x4d\xe3\x95\xbd\xef\x5d\x3f\xcf\x90\x0a\x52\x77\x5e\xda\x8e\x03\x61\x5d\xee\x3d\x3c\x81\x8f\x9c\x4f\x78\x7c\x40\x61\x23\xd1\x96\xcd\x04\x6d\x8d\x75\x12\xef\x67\x2b\x8f\x0f\x65\xf6\x7f\xc4\x1c\x57\x0b\x9b\x2e\x3b\x3d\x3d\x4b\x54\xfe\xd0\x85\xbc\xab\xb2\xcc\xbf\x3b\x97\xb9\x20\x8b\x28\x12\xe7\xe0\x4a\x9d\xc7\x52\x35\x93\xd1\xee\x3a\xd1\x93\xbb\x31\x13\x98\xb2\x3b\x3a\xcf\x07\xb6\x3b\x68\xee\x78\xdc\x3a\x8a\xef\x02\xbf\x48\x17\x75\xe2\xcf\xc5\xfa\x72\x9a\xf6\x10\x6a\xd5\x77\xd2\x76\x87\xed\x7c\x27\x33\xd9\x6f\xd1\x9f\x16\xe0\x37\x09\xba\x68\x7c\x67\xf9\x1e\x28\xab\x19\x73\xdc\xd8\xbf\xc7\xbf\x71\x76\x0e\xfb\xc9\xf6\xa7\x80\x83\x17\xa3\x0d\x43\x06\xb5\xd3\xc9\x14\xf4\x37\xf7\x8d\x07\x7c\xb6\x35\x01\x17\x95\x33\x19\xc5\xbb\xd3\xb6\x4f\x60\x7c\x57\x82\xd8\xce\xf3\xa6\xb9\xef\x6a\x2b\x65\x90\x39\x0d\x6b\x69\xf1\x59\xc9\xdc\x9e\x89\x28\x57\x2e\x33\x62\xb1\xef\x69\x8b\x8e\xa6\xe3\x6c\xfa\x78\xa7\xcb\x52\xcf\xfd\x78\xbe\x50\xf7\x69\x56\x2b\xbc\x50\x82\x8b\xb3\x37\xba\xbe\x1c\x4b\xca\x9b\x48\xcc\xe5\xe9\x9b\x52\x2d\xe4\x8d\x87\xfe\x04\x00\x00\xff\xff\x7d\xc7\xad\x50\x2c\x06\x00\x00") + +func testImagesApparmorLoaderExampleDaemonYamlBytes() ([]byte, error) { + return bindataRead( + _testImagesApparmorLoaderExampleDaemonYaml, + "test/images/apparmor-loader/example-daemon.yaml", + ) +} + +func testImagesApparmorLoaderExampleDaemonYaml() (*asset, error) { + bytes, err := testImagesApparmorLoaderExampleDaemonYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/apparmor-loader/example-daemon.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesApparmorLoaderExampleNamespaceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x44\xcb\x31\x0a\x42\x31\x10\x04\xd0\x7e\x4f\x31\x60\x2f\xd8\xe6\x10\x56\x62\x3f\xff\x67\x20\x51\x37\x59\x92\x28\x7a\x7b\x3b\xad\x1f\xef\x80\x4b\x11\xf4\xa6\xc7\x43\x38\xd3\x35\x83\xbb\xf0\x9c\xca\xd8\x3e\xe8\xab\x68\xfc\xbc\x6f\x37\xed\x6b\x1e\xcd\x18\xf5\xaa\x31\x6b\x6f\x09\xaf\x93\xdd\x6b\xcb\xe9\xdf\xcd\xb5\x98\xb9\x98\x0c\x68\x74\x25\x30\x82\xc3\xfb\xb0\x6f\x00\x00\x00\xff\xff\xc3\x16\x28\x79\x72\x00\x00\x00") + +func testImagesApparmorLoaderExampleNamespaceYamlBytes() ([]byte, error) { + return bindataRead( + _testImagesApparmorLoaderExampleNamespaceYaml, + "test/images/apparmor-loader/example-namespace.yaml", + ) +} + +func testImagesApparmorLoaderExampleNamespaceYaml() (*asset, error) { + bytes, err := testImagesApparmorLoaderExampleNamespaceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/apparmor-loader/example-namespace.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesApparmorLoaderExamplePodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x91\x3d\x6f\x1b\x31\x0c\x86\x77\xfd\x8a\x17\xf1\x6c\xa5\x01\x3a\x04\xb7\x65\x2e\x50\x64\x08\xba\xf3\x4e\xcc\x99\xb0\x8e\x14\x24\x3a\x48\xfa\xeb\x0b\xc9\x1f\x75\x00\x4d\x14\xf5\xbc\x1f\xda\xe1\xed\xc0\xe0\x4f\xda\x4a\x66\xbc\x5a\xc2\xc9\x25\xcb\x5f\xd1\x15\x7e\x60\x94\x6a\xef\x92\x19\xd9\x28\x71\xc2\xfc\x35\xa6\xed\xbc\x9e\x88\x37\xd3\x18\x02\x15\xf9\xc3\xb5\x89\xe9\x84\x8f\xa7\x70\x14\x4d\x53\x87\x85\x8d\x9d\x12\x39\x4d\x01\x50\xda\x78\x82\xae\xa2\x9f\x7b\x2a\x85\xea\x66\x35\x00\x3b\xfc\x36\x67\xf8\x81\x7c\xb0\xbb\x87\x64\xdc\xa0\xe6\x50\xe6\x04\x37\xcc\x0c\xd1\xab\x34\x0f\x54\x2b\xb4\x30\xa8\x8d\xe9\xb0\x57\x63\x00\x32\xcd\x9c\x5b\xd7\x03\xa8\x94\x8b\x60\x00\x48\xd5\x9c\x5c\x4c\x2f\xb7\x3b\xbc\x71\xce\xf8\x75\x9a\xb9\x2a\x3b\xb7\x2e\x44\xa5\xe4\x73\xc6\x97\x52\x5e\xba\xc5\x5b\x05\x0f\xc7\xe7\xb6\x1f\xb4\x87\x78\x01\xdc\x3b\x97\x86\x7e\x56\xb5\xca\x09\xf2\x3e\x20\x77\x70\xb5\xc4\x7d\xa3\xc7\xaa\x27\xd5\xde\xf0\xc7\xb9\x34\x3c\xc5\x9f\xb0\x8a\xb5\x32\xf9\x39\x06\xb0\x98\x3a\x89\x72\x8d\xd7\xb2\x62\xe3\xe5\x54\xc5\xbf\xe2\xcc\x4e\xf1\x78\x63\x47\xb1\xc7\x61\x6c\x42\xb6\x85\xf2\xc1\x9a\x3f\xde\xdc\x86\x56\x78\xe9\x91\x6f\xc4\x51\xc0\xfe\xfe\x43\x86\xa2\x6c\xb4\x7e\x1b\x14\xab\x7e\x29\x6b\xff\xff\xf5\xab\x55\x9f\xf0\xfc\x23\xfc\x0b\x00\x00\xff\xff\x39\xce\x35\xa3\x3c\x02\x00\x00") + +func testImagesApparmorLoaderExamplePodYamlBytes() ([]byte, error) { + return bindataRead( + _testImagesApparmorLoaderExamplePodYaml, + "test/images/apparmor-loader/example-pod.yaml", + ) +} + +func testImagesApparmorLoaderExamplePodYaml() (*asset, error) { + bytes, err := testImagesApparmorLoaderExamplePodYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/apparmor-loader/example-pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesApparmorLoaderLoaderGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x59\x6d\x6f\x1b\x37\x12\xfe\xac\xfd\x15\xd3\x05\xd2\xae\x8a\xcd\x6e\x1a\xdc\x01\x07\xb7\x3e\xc0\xf5\xcb\x55\x57\xd7\x36\x2c\x27\x41\xe1\x04\x01\xbd\x3b\x2b\x11\xa2\xc8\x3d\x92\x6b\x59\x08\xfc\xdf\x0f\x43\x72\xdf\x24\x25\x69\x0b\x34\x1f\x62\x69\x77\x38\x7c\x38\xf3\xcc\xf0\x21\x95\x7f\x1f\x9d\xaa\x7a\xab\xf9\x62\x69\xe1\xf5\xab\x1f\xfe\x09\x77\x4b\x84\x5f\x9b\x07\xd4\x12\x2d\x1a\x38\x69\xec\x52\x69\x93\x45\xd1\x25\x2f\x50\x1a\x2c\xa1\x91\x25\x6a\xb0\x4b\x84\x93\x9a\x15\x4b\x84\xf0\x26\x85\xb7\xa8\x0d\x57\x12\x5e\x67\xaf\x20\x21\x83\x38\xbc\x8a\xa7\x3f\x46\x5b\xd5\xc0\x9a\x6d\x41\x2a\x0b\x8d\x41\xb0\x4b\x6e\xa0\xe2\x02\x01\x9f\x0a\xac\x2d\x70\x09\x85\x5a\xd7\x82\x33\x59\x20\x6c\xb8\x5d\xba\x49\x82\x8b\x2c\xfa\x3d\x38\x50\x0f\x96\x71\x09\x0c\x0a\x55\x6f\x41\x55\x43\x2b\x60\x36\x8a\x00\x00\x96\xd6\xd6\x47\x79\xbe\xd9\x6c\x32\xe6\x50\x66\x4a\x2f\x72\xe1\xad\x4c\x7e\x39\x3b\x3d\xbf\x9a\x9f\xbf\x7c\x9d\xbd\x8a\xa2\x37\x52\xa0\x31\xa0\xf1\x7f\x0d\xd7\x58\xc2\xc3\x16\x58\x5d\x0b\x5e\xb0\x07\x81\x20\xd8\x06\x94\x06\xb6\xd0\x88\x25\x58\x45\x38\x37\x9a\x5b\x2e\x17\x29\x18\x55\xd9\x0d\xd3\x18\x95\xdc\x58\xcd\x1f\x1a\x3b\x0a\x50\x8b\x8a\x1b\x18\x1a\x28\x09\x4c\x42\x7c\x32\x87\xd9\x3c\x86\x9f\x4f\xe6\xb3\x79\x1a\xbd\x9b\xdd\xfd\x72\xfd\xe6\x0e\xde\x9d\xdc\xde\x9e\x5c\xdd\xcd\xce\xe7\x70\x7d\x0b\xa7\xd7\x57\x67\xb3\xbb\xd9\xf5\xd5\x1c\xae\x2f\xe0\xe4\xea\x77\xf8\x75\x76\x75\x96\x02\x72\xbb\x44\x0d\xf8\x54\x6b\xc2\xae\x34\x70\x0a\x1d\x96\x59\x34\x47\x1c\x4d\x5e\x29\x0f\xc6\xd4\x58\xf0\x8a\x17\x20\x98\x5c\x34\x6c\x81\xb0\x50\x8f\xa8\x25\x97\x0b\xa8\x51\xaf\xb9\xa1\xe4\x19\x60\xb2\x8c\x04\x5f\x73\xcb\xac\xfb\xbe\xb7\x9c\x2c\xfa\x3e\x8f\xa2\x9a\x15\x2b\x72\xb2\x66\x5c\x46\x11\x5f\xd7\x4a\x5b\x48\xa2\x49\xfc\xd0\x54\x5c\xc5\xf4\x61\x6b\xd1\xd0\x87\x4a\xb0\x85\xfb\xbb\xb6\xf4\x87\xab\x9c\xab\xc6\x72\x41\x5f\x94\xf1\xff\xe7\xf8\x84\x05\x7d\xac\x99\x5d\xb6\x7f\x73\xe2\x47\xfb\x80\xe2\x27\x17\xce\xdc\xf2\x35\xc6\x51\x34\x89\x57\xff\x32\x19\x57\xf9\x4a\xa8\x45\xfe\xf8\x3a\x8e\xa6\x51\xf4\xc8\x34\xc1\xc8\x73\x47\xe5\x92\x6b\x2c\xac\xd2\x1c\x0d\xe5\x4e\x28\x56\x42\xad\x15\xf9\x35\x50\x69\xb5\xce\xa2\x49\xc9\xb5\x81\xfb\x0f\xde\x7f\x34\xa9\x95\x10\x70\x0c\x04\x3a\x3b\x6b\xb4\x8b\x42\x12\xd3\xd3\x38\x85\x97\x3f\xa4\x10\xdf\x90\x85\xdd\xf1\x4e\x61\x96\xb8\xe9\xbd\x07\x06\x73\x03\x5c\x5a\xd4\x8f\x4c\x64\xf0\x96\x89\x06\x0d\xfc\x04\xaf\x88\x10\x8e\x5f\xe4\xd8\x71\x89\xc9\x12\xf0\x89\x5b\x60\x95\x45\xed\xa0\x52\x6a\x68\x9e\xd6\x67\x16\x4f\x69\x89\x85\x92\xc6\xc5\xba\x66\xda\xa0\x26\xbe\xc3\x31\xc4\xac\xae\x99\x5e\x2b\xfd\xd1\x3f\x8e\xa3\x49\xfb\xa4\x32\xf4\x3e\x37\x5b\x93\xaf\xa8\xb2\x45\x6e\xb0\x68\x34\xb7\xdb\xbc\x35\x71\xb1\xab\x1a\x59\xb8\x84\x26\x53\xf8\x14\x4d\x28\xac\xd9\x4c\x72\x7b\x21\xd8\xc2\x24\x92\x8b\x69\x34\x71\x71\x79\x63\x28\xf5\xc7\x40\x03\xbc\xed\xa4\x5a\xdb\xec\xa2\xd6\x5c\xda\x2a\x51\x26\x9b\xdb\x12\xb5\x4e\x21\x76\xa6\x47\xf0\xc2\xc0\xfd\xc5\xe5\xc9\x7f\x3e\x64\x59\x06\xf7\x37\xb7\xd7\x17\xb3\xcb\xf3\x8f\x67\xb3\x5b\x7a\xf0\x5e\xc6\x29\x28\x93\x9d\xe8\x85\xb9\x7f\xf5\x61\xfa\x05\x77\x97\x94\x41\xdf\x7c\xea\x13\x02\xde\x07\x3c\x10\x1c\x4b\x2a\x51\x32\x19\xcc\x32\x4c\x15\x4d\xe7\xa6\xa0\x95\xdc\xd0\x14\x67\x58\xb1\x46\x58\x93\x4c\xa3\xc9\x73\x58\xe2\x0d\x05\x31\x99\x46\x81\x1f\x81\x10\x84\x90\xac\x78\x05\x02\x65\x42\xaf\xa6\x70\x7c\x0c\xaf\x5c\x0c\x5c\xc0\xce\xb5\x56\xba\x4a\xe2\xdf\x1a\x63\x03\xa6\x2d\x30\x0b\x02\x99\xb1\xa0\x64\x4f\x9b\x6d\xd6\xe3\x70\x61\x22\xcf\x13\x65\xb2\xf3\x27\x6e\x93\x1f\x1c\x18\xc7\xe4\xd3\x25\x16\x2b\xb0\x4b\x66\xdd\xba\xba\x4e\x15\xf2\xff\xc0\x25\xd3\x5b\xea\x32\x95\x6a\x64\x99\x39\x78\x1f\x53\x40\xad\xe1\xe8\x18\xa8\xb2\xb2\x4b\xa5\x56\x37\xcc\x2e\x13\x3f\x66\xfa\xa3\x7b\xfb\xcd\x31\x48\x2e\x06\xd8\x9f\xb8\xad\x92\xf8\xb6\x6b\x85\xde\xf3\x0b\xe3\xda\xb6\xf3\x4e\xc1\xbd\x39\xb9\xfb\x25\x4e\xc3\xf4\x07\x61\x12\x7b\x71\x50\x6a\x05\x93\xf0\x40\xc8\xd9\x1e\xbc\x05\xda\x4b\x67\x7d\x13\x8c\x93\x2f\x83\x7b\x23\x5d\xdd\x58\x05\xac\x28\xa8\xf9\xb5\x14\xee\x66\x3b\x82\x17\x8f\xb1\xf3\x1f\xb0\xf1\x0a\xbe\x77\x65\xfd\x53\x48\x94\x6e\xe4\xb5\x2c\x5c\xbc\x9f\x01\x85\x41\xf7\x94\x4c\x2e\x94\xc6\x47\xd4\x9e\x09\xcf\x51\x94\xe7\x70\xa5\xda\x22\x3d\x02\xdd\x48\x50\xb4\x3f\xb5\xd5\x9a\xf9\xa2\xe9\x1c\x92\x23\x5e\x81\x69\x1c\xb6\x94\x5a\x42\xbb\x2e\x5a\x2c\xc5\xe5\xaa\x7f\x44\x4b\xfd\x26\xd8\x3a\x08\x81\x57\x83\x51\x53\xf8\x77\x00\x3d\x8a\xc2\x95\xb2\xc0\x84\x18\xb4\x1b\xd4\xd8\x4e\x5b\x35\x42\x6c\x43\x0e\x32\xf0\xd1\x0d\x41\x19\x7a\x8e\x26\xc3\xd5\xf7\xee\x93\xd8\x71\xb8\x6b\x41\xc3\xf6\x33\xa1\x02\x19\x8c\xfa\x3a\xe0\x99\xac\x54\x95\xc4\xf3\x7d\x68\xbb\x09\xfb\x1a\xb6\x77\xcc\xed\x56\xb4\xf8\x71\xab\xf5\xb4\xef\xd0\x85\xbc\x1d\x6c\xd3\x5c\x96\x58\x71\xc9\x2d\x8a\x6d\xc8\xdd\x28\xed\x5d\xdf\x7b\x9b\xbc\x9e\xb6\xd8\x6f\x7c\xfa\xa9\x0e\xc8\x8a\x0a\x22\x4e\x21\x6c\x48\xd9\x7f\x15\xf7\x9d\x20\x85\x38\x85\x78\x9a\x3a\x8f\xd9\xdc\xbd\x4e\xa6\x53\xbf\xa5\x5c\x48\xca\xff\xa0\x61\x7e\xfc\x3a\x39\xfe\x50\x7c\x87\x40\xff\x42\x90\x5d\xc7\xf3\x00\x93\x29\xe4\x39\xdc\x36\x12\xf8\x7a\x8d\x25\x67\x3e\x48\x13\xcb\x8b\x15\xba\x5a\xa5\x8d\x37\xbb\xc2\xcd\x9d\x7b\x92\xb8\xa2\xa2\x3d\x41\x69\xd0\x4c\x2e\x10\xbc\x69\x76\xda\xd7\x93\xec\x4a\xc9\x05\x7b\x6f\x8d\x90\xb4\xfc\x7f\x50\x4a\x8c\x63\xd2\x6e\xca\x2e\x60\x62\xd4\x24\xbe\xd4\x3e\x5c\x05\x1e\xec\x20\xa1\x35\x7b\x7a\x53\x33\xa2\xac\x1e\x8e\x93\xef\x1e\x13\x8d\xb6\xd1\x12\x2a\x26\x48\xe1\x4a\x2e\x7c\x47\x69\x31\x1f\x83\xd5\x0d\xfa\x08\x7c\x4c\x89\x69\x84\xc9\xc7\xc2\xed\x1b\xae\x46\x64\xa5\x7a\xc0\x5e\xfb\x64\xb7\xc8\xca\x33\xae\x89\x38\x21\xcf\x3b\x88\x47\x9c\xdf\x03\xfd\xa2\xc5\x59\x72\xdd\x81\x1d\xc0\x72\x80\xe9\x51\xa1\xa4\xe5\x92\x30\x3a\xe0\x2d\x52\xc2\xd4\x43\x75\x08\xfd\xac\x24\xb7\x1c\x53\x83\xf4\xea\xe8\xed\xc7\x64\x57\x6c\x8d\x8e\xd4\x13\x6a\xf9\xb3\xaa\xdf\xcd\x52\x92\xa1\x66\xbb\x16\x5c\xae\x5c\x7b\x1e\xbe\x32\x2b\x5e\x03\xb5\xcb\x09\xc5\xd4\x28\xf1\x88\x25\x91\xb6\x0b\x4b\x78\x38\xf7\xe3\xfb\x09\xdd\x4c\x07\xa2\xf3\xb9\xf0\x90\x17\x0a\x50\x00\x32\xce\xe6\x28\x1c\x44\x7c\xe7\x7a\x88\x27\x9b\x19\xca\xca\x34\x4c\x92\xe7\x70\xd6\x2e\x02\x04\x37\x24\xfb\x69\xa3\x35\x4b\x26\x84\xda\x64\x3d\x92\xb7\xc9\x3f\xfa\x32\x5c\xf1\xba\x26\xcb\x2e\x00\xbe\x63\x50\x3c\x0f\xc1\x88\x0e\x3a\x29\x98\x94\xa1\xeb\xec\x8a\xcb\xa1\xaf\xfa\x40\x45\x84\x5a\xa0\x5c\x99\xa4\xb3\xfc\x13\x51\xdc\x21\x19\xb9\x18\x04\xf1\x00\xcd\x0e\xac\x88\x57\xd0\xc8\x71\xd5\x26\xbb\x45\x5c\x77\x4d\xcd\xc3\x09\x10\x43\x33\xec\x86\xb9\x25\xec\xa9\x82\xc9\x4e\x59\x9f\xaa\x46\x94\x4e\xa9\x8c\x74\xfe\x2e\x05\x0e\xc2\x1f\xe1\xf7\xcc\xa0\xe4\x9f\x94\xe5\x78\xab\xa1\x43\x04\x27\x1d\x57\xed\xf6\x0d\xcf\x85\x61\xfb\x3a\x26\x69\x82\xb2\x1c\x76\xef\x7e\xc9\x59\x96\x79\x3c\xa1\x22\xc3\xf3\xbe\x28\xbb\x39\xc3\x5a\xc7\xb1\xbb\x0f\xaf\x3f\x74\x3d\xa8\xc5\xfd\xdc\xb6\xf5\xa8\xed\x5e\x87\xd4\x48\xd7\x91\x0f\xd1\x05\xda\xbe\x9b\xb4\x2d\xd8\xc5\x4f\x69\x97\xa7\x62\x5d\x76\xba\xf2\x54\xad\xd7\x4c\x96\x41\x56\xa6\x10\xbf\x7c\x29\xc9\x4d\xcf\x50\xe3\xa4\x3b\x0d\xf8\xd6\x9d\x08\xb3\x9f\x9b\xaa\x42\xfd\xe9\xd9\x39\x0a\xca\x1e\x8e\xc1\xdb\x45\x13\xd5\xd8\x8e\xca\x64\x70\xdd\xd8\xba\xb1\x87\xbb\x3a\x29\x2d\x37\x2c\xbb\x44\xda\xbe\xc6\x3b\x63\xab\x17\x82\xc9\x60\x43\x76\x31\x0a\xc1\x91\x5c\xa4\x40\xc7\x8d\x96\x46\x38\xaa\x81\xd1\x69\xf1\x70\x45\x50\xa4\xad\x76\x7b\x26\x81\x6e\x75\xc1\x9d\xe6\xeb\x79\xcd\x0a\x4c\xfc\x93\x44\x35\x76\xea\xb7\x58\x5c\xab\x47\x04\xab\x19\x77\xba\xe2\xbd\xec\x53\x15\x06\xcf\x6b\xc1\x6d\x12\xbc\xa6\x10\xd3\x99\xc5\xef\x3f\x6d\xde\xbe\x52\x5b\xb0\x66\xf5\xbd\xf7\xf6\xc1\xef\xac\xf5\xfe\xb6\x4a\x2f\x28\x60\x7f\x88\x82\xbc\x82\x6f\x3e\xc7\xc1\x4f\xbe\xaf\xbb\x25\x04\x36\x7a\x65\x31\xdc\x3f\x47\x22\x60\x54\xdb\x1d\xdf\x7c\xec\xbf\xce\xb1\x47\xd4\x0f\xca\xe0\xdf\xc1\xb2\x3d\x51\x75\xa9\x3e\xc3\x84\xf7\xb2\xeb\xea\x29\x50\x72\xff\x2e\x8a\xee\xb3\x73\x57\x9a\x7f\x91\x9d\x03\xa6\x07\x69\x3c\xf3\xb7\x66\x0b\xfe\x88\xd2\xed\xf4\x4e\x0e\x70\x03\xac\xdd\x37\x53\x68\xb3\xb9\x44\xb8\xe0\x02\x29\x18\xed\x6d\x9b\x65\x7a\x81\x36\x83\x6b\xbb\x44\xbd\xe1\xa4\x8c\x7a\x6b\xf2\x3f\x76\xdc\x9e\x91\xc6\x3b\xfc\x03\x33\x78\xd3\xe7\x3e\x48\x12\x65\xb2\x76\xb6\x29\x24\x83\x6f\xc3\x06\xc4\x2b\xaf\x45\x7e\x53\x25\x26\xd3\x6f\x95\x71\x9f\x82\xe3\xfe\x38\xee\xce\x6e\xb6\x5f\x53\xd6\x47\x94\x3b\x8f\x41\xce\x4d\xaa\xc3\xa2\xa7\x45\xb8\xab\x7c\x5a\xbd\x40\x0f\x3a\x12\x75\x43\xcf\x1f\x99\x08\x50\x4c\x52\x05\x7a\xee\xf3\xe2\x6b\xdd\x67\x47\xc7\xf4\xb9\xad\xf6\x92\x7b\x40\x4d\xb9\x2b\x13\x66\x93\x21\xd4\xbf\x00\xa3\x60\xfe\xe0\x63\x2c\xb3\xa0\x64\x0f\x62\x2f\x04\x23\xa2\x8d\x21\xf5\xb4\xbb\xbb\x3e\xbb\x3e\x82\x3b\x77\x27\x66\xa0\x50\x35\xc7\xd2\x33\xb7\xbd\xc8\xeb\x6e\x9e\xf3\x7a\xb5\xd8\xbf\xa5\xca\xf6\xd4\x7e\x46\x7e\xfd\xbf\x5b\xac\x18\x89\x2d\x7f\x03\xb1\x46\xbb\x54\xee\xc2\x16\x9f\x6a\x65\x10\xb8\xbb\x62\x66\xa0\xb1\xf1\x37\x6f\x1b\xb6\xf5\xb7\x6e\x25\x0a\xb4\xe1\x46\xfa\xd1\xdf\x61\x67\xdd\xde\xb8\x7b\xb8\x80\x64\xaf\xb1\xf6\xc4\x6c\xcb\xf1\x26\xf0\xa9\xe7\x52\x7f\x15\x97\x42\xdc\xc9\xb8\x69\x3f\x84\x78\x3e\x4c\xdf\x75\x8d\x32\x19\xfa\xfb\x53\xe9\xab\x18\x17\xfe\xba\x5a\xd5\x38\xc8\xdb\xd0\xe1\x20\x6f\x25\x56\xd8\xdf\x9f\x10\x94\xec\x54\xa8\x70\xff\x55\x0f\x8e\xa8\x3b\x6b\xa7\xf6\x6a\x48\xa7\xfa\xe3\xa1\xbb\xfa\xa5\xf3\xe1\xdc\x3f\x4b\x86\x1e\xc3\x39\x31\x98\x67\x64\x12\x64\x76\xdd\xcb\x0f\x1f\x34\x6d\x70\x20\x49\x92\x76\xc8\x1d\x3e\x59\xdf\x1b\x79\x05\xc3\x41\xc7\xc7\x10\xc7\xbe\xab\xe6\x39\xbc\x91\x2b\xa9\x36\x12\x04\x97\xee\xf6\x7b\xcd\xec\x8f\xa3\xf3\xc7\xe8\x48\xd4\x0b\xe8\xfb\x81\xcb\x5e\x55\xf5\xac\xee\x85\xf6\x80\xd1\x83\xdb\x59\xff\x6b\x86\xbb\x85\xa3\x39\x2d\x96\xfe\x0e\x58\xc9\xce\x06\x6a\xd4\x0e\x57\x0a\x6b\x66\x8b\x25\xd5\x16\x73\xf6\x47\x9e\xc7\x4e\x3b\x91\x66\x38\xca\xf3\x30\xc6\xe9\x29\x48\xd6\xaa\xc4\xa9\x37\xfa\xcc\x8b\x77\x4b\xd4\x08\xf4\x95\x40\x7c\x42\x59\x29\x5d\x60\xea\x7f\x55\x61\x5c\xa6\xb0\xe2\x42\x3c\x67\x0e\x74\x3c\x9c\x29\xa6\x01\x4a\x8a\x2d\x70\x59\x88\x86\x54\xad\x3b\x71\xb4\x26\x25\xb9\xef\x74\x2b\x5c\x84\x5f\x14\xea\x46\x53\x65\x19\xda\x16\xfa\xdf\x8c\x52\xd8\x20\x14\x4a\x1a\xde\xfe\x6e\xd0\xf9\xa1\xd4\xda\x76\x13\x69\x43\x42\x6f\xdb\x9b\x98\xdd\xcc\x07\x9b\x4b\xca\x64\x2b\x11\xfc\x5f\xca\x36\x2d\x75\x26\x4b\x7c\x1a\xaa\x2e\xf7\xe0\xb6\x91\xa3\xc1\x29\x7c\x97\x7c\xe7\x0b\xa8\x1f\xd4\x5d\x06\xfa\xf4\xc6\xf1\x30\xd9\xfb\x22\x6e\xe0\xee\xfe\xa8\xf3\xf2\x61\x1a\x3d\x47\xff\x0f\x00\x00\xff\xff\x15\xdb\x22\x43\x47\x1b\x00\x00") + +func testImagesApparmorLoaderLoaderGoBytes() ([]byte, error) { + return bindataRead( + _testImagesApparmorLoaderLoaderGo, + "test/images/apparmor-loader/loader.go", + ) +} + +func testImagesApparmorLoaderLoaderGo() (*asset, error) { + bytes, err := testImagesApparmorLoaderLoaderGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/apparmor-loader/loader.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesBusyboxBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xcf\xcc\x4b\xc9\x2f\x2f\xd6\x4f\xcc\x4d\x31\x33\xd1\x37\xb4\x30\xb0\xb4\xcd\x4d\x2e\xd2\xcb\xcd\x4c\x2e\xca\x2f\xce\x4f\x2b\xd1\x4b\xce\xcf\xd5\x87\x29\x2a\x4e\x2d\x2a\x4b\x2d\x4a\xce\x2f\x4a\xb5\xca\x29\x29\x4e\x36\x32\x30\xb4\xe4\x42\x33\xc0\xd2\xc0\x98\x38\x03\x40\x2a\x31\x35\x13\x69\x3b\x48\x25\x17\x20\x00\x00\xff\xff\x39\x77\x4e\x50\xbb\x00\x00\x00") + +func testImagesBusyboxBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesBusyboxBaseimage, + "test/images/busybox/BASEIMAGE", + ) +} + +func testImagesBusyboxBaseimage() (*asset, error) { + bytes, err := testImagesBusyboxBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/busybox/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesBusyboxDockerfile_windows = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x94\xdd\x6e\xe3\x36\x10\x85\xef\xf9\x14\x07\xf2\xa6\xfb\x83\x58\x0c\x82\xb6\x0b\x64\xb1\x17\xaa\xed\xec\x0a\x49\xa4\x40\x72\x12\x04\x4d\x51\x50\xd2\x58\x22\x2c\x91\x2a\x49\x55\xf1\xdb\x17\x94\x9d\xd4\x41\xbb\xbe\xb0\xc9\x99\xc3\x33\x1f\x87\xa4\x67\x58\xe8\x7e\x67\x64\xdd\x38\x9c\x9f\x9d\x9f\x61\xdd\x10\xae\x86\x82\x8c\x22\x47\x16\xd1\xe0\x1a\x6d\x6c\xc8\x66\x6c\x86\x6b\x59\x92\xb2\x54\x61\x50\x15\x19\xb8\x86\x10\xf5\xa2\x6c\xe8\x25\x73\x8a\x7b\x32\x56\x6a\x85\xf3\xf0\x0c\x1f\xbc\x20\x38\xa4\x82\x8f\x5f\xd8\x0c\x3b\x3d\xa0\x13\x3b\x28\xed\x30\x58\x82\x6b\xa4\xc5\x46\xb6\x04\x7a\x2e\xa9\x77\x90\x0a\xa5\xee\xfa\x56\x0a\x55\x12\x46\xe9\x9a\xa9\xcc\xc1\x24\x64\x33\x3c\x1e\x2c\x74\xe1\x84\x54\x10\x28\x75\xbf\x83\xde\x1c\xeb\x20\xdc\x04\xec\x3f\x8d\x73\xfd\x05\xe7\xe3\x38\x86\x62\x82\x0d\xb5\xa9\x79\xbb\x17\x5a\x7e\x1d\x2f\x56\x49\xbe\x9a\x9f\x87\x67\xd3\x92\x3b\xd5\x92\xb5\x30\xf4\xd7\x20\x0d\x55\x28\x76\x10\x7d\xdf\xca\x52\x14\x2d\xa1\x15\x23\xb4\x81\xa8\x0d\x51\x05\xa7\x3d\xef\x68\xa4\x93\xaa\x3e\x85\xd5\x1b\x37\x0a\x43\x6c\x86\x4a\x5a\x67\x64\x31\xb8\x37\xcd\x7a\xa1\x93\xf6\x8d\x40\x2b\x08\x85\x20\xca\x11\xe7\x01\x7e\x8b\xf2\x38\x3f\x65\x33\x3c\xc4\xeb\xef\xe9\xdd\x1a\x0f\x51\x96\x45\xc9\x3a\x5e\xe5\x48\x33\x2c\xd2\x64\x19\xaf\xe3\x34\xc9\x91\x5e\x22\x4a\x1e\x71\x15\x27\xcb\x53\x90\x74\x0d\x19\xd0\x73\x6f\x3c\xbf\x36\x90\xbe\x8d\x54\xf9\x9e\xe5\x44\x6f\x00\x36\x7a\x0f\x64\x7b\x2a\xe5\x46\x96\x68\x85\xaa\x07\x51\x13\x6a\xfd\x37\x19\x25\x55\x8d\x9e\x4c\x27\xad\x3f\x4c\x0b\xa1\x2a\x36\x43\x2b\x3b\xe9\x84\x9b\x22\xff\xd9\x54\xc8\x58\x94\x7d\xf3\xf4\xab\xf8\x26\xfa\xb6\x62\x1b\xa3\x3b\xbc\x7b\x9d\x43\x58\xf4\x86\x7a\xc6\x56\xc9\x3d\x16\x77\xd9\xf5\x9f\xf7\xab\x2c\x8f\xd3\x04\x9f\xc3\x5f\x3e\x87\x67\xec\x21\xcd\xae\x96\x71\x06\x5e\x0e\xa6\x65\xd1\x72\x39\x1d\x9d\xbd\xe0\xdc\x6e\x85\x72\x8d\xd8\x86\x8d\xee\xa8\x17\x35\x85\x6e\xae\x55\x2b\x15\x85\x15\xf1\x4a\x8f\xaa\xd5\xa2\x9a\xd6\xcd\xdf\x1d\x5b\x87\xa5\x28\xe0\xc3\x7e\xc0\xb2\xbb\xc4\xf7\x47\xa8\x0a\x3c\x7b\x0d\x83\x5f\x5e\x7c\x42\xc8\xd8\x65\x96\xde\x1c\x01\x33\xb6\x48\x6f\x1f\x31\x9f\xfb\x8d\x7c\xf5\xe8\x7b\x32\x1e\xdd\x2c\x7f\xfd\xf9\x40\xf9\x03\x89\x67\x08\xaf\xe3\xc5\xff\xec\xa5\x96\xae\x19\x8a\xb0\xd4\x1d\xdf\xbe\x3e\xb3\xb9\x95\xb5\xe5\xa3\x54\x95\x1e\xed\xdc\x91\xf5\x17\x8a\x1b\x31\xf2\x4e\x58\x47\x86\xcb\x4e\xd4\x64\x79\x31\xd8\x5d\xa1\x9f\x5f\x7e\x43\x7a\x26\xf0\x42\xaa\xe3\xc0\x8f\xaa\x55\x92\x6a\x5d\x1a\xae\xc8\x95\xc2\x1d\x9b\xab\xf2\x5f\xa3\xfd\x78\xef\xa1\xad\x53\xa2\x3b\x24\x5e\x66\x53\xfa\x2e\x5f\x65\x58\x68\xe5\x5f\x20\x99\xa8\xea\xa4\xf2\xf7\x59\x38\x6d\xa6\x2e\x5f\xa6\x19\xf8\x06\x81\xd3\x5b\x52\xf6\xeb\xa7\x00\x27\x12\x71\x82\x0f\xef\x17\x17\x4f\x85\x54\x4f\x07\x5e\xcc\xe7\xad\xb4\xee\xfd\x47\x2c\x53\x74\xdb\x56\xaa\x2d\x0e\x8a\x13\x39\x41\xbd\xd5\x4f\xc5\x7d\x01\x4b\xee\x19\xfc\x06\xb7\xd1\xfa\x3b\x82\xbd\xe8\xcb\xe2\xe2\xc9\xb7\xfb\xe9\xcb\x89\x0f\x9f\x04\xf8\xe9\x89\xf9\x7f\x80\x6e\x5b\x49\xe3\x9d\x5c\xd7\xb3\x55\xb2\xce\x1e\x6f\xd3\x38\x59\xe3\xf7\xa0\xec\x2a\x6f\x19\x9c\x22\xe0\x76\xfa\x2e\x83\x3f\xd8\x3f\x01\x00\x00\xff\xff\xbc\xfc\xf5\x49\x14\x05\x00\x00") + +func testImagesBusyboxDockerfile_windowsBytes() ([]byte, error) { + return bindataRead( + _testImagesBusyboxDockerfile_windows, + "test/images/busybox/Dockerfile_windows", + ) +} + +func testImagesBusyboxDockerfile_windows() (*asset, error) { + bytes, err := testImagesBusyboxDockerfile_windowsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/busybox/Dockerfile_windows", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesBusyboxMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6b\xe3\x38\x14\x85\x9f\x57\xbf\xe2\x10\xf7\x21\x81\xd4\x09\x61\xd9\x85\x2e\x65\xf1\x24\x99\xd4\xb4\x63\x0f\xb6\xdb\xd2\xa7\x22\xdb\x37\xf6\x05\x5b\xf2\x48\xf2\x38\xf9\xf7\x83\xd2\x16\xa6\x8c\xde\xee\xbd\xe7\x1e\x7d\x3a\x0a\xb0\xd5\xc3\xd9\x70\xd3\x3a\x6c\xd6\x9b\x35\x8a\x96\x70\x3f\x96\x64\x14\x39\xb2\x88\x46\xd7\x6a\x63\x43\x11\x88\x00\x0f\x5c\x91\xb2\x54\x63\x54\x35\x19\xb8\x96\x10\x0d\xb2\x6a\xe9\x63\xb2\xc4\x13\x19\xcb\x5a\x61\x13\xae\x31\xf7\x82\xd9\xfb\x68\xb6\xf8\x4f\x04\x38\xeb\x11\xbd\x3c\x43\x69\x87\xd1\x12\x5c\xcb\x16\x47\xee\x08\x74\xaa\x68\x70\x60\x85\x4a\xf7\x43\xc7\x52\x55\x84\x89\x5d\x7b\xb9\xe6\xdd\x24\x14\x01\x5e\xde\x2d\x74\xe9\x24\x2b\x48\x54\x7a\x38\x43\x1f\x7f\xd7\x41\xba\x0b\xb0\x3f\xad\x73\xc3\xcd\x6a\x35\x4d\x53\x28\x2f\xb0\xa1\x36\xcd\xaa\x7b\x13\xda\xd5\x43\xbc\xdd\x27\xf9\xfe\x7a\x13\xae\x2f\x2b\x8f\xaa\x23\x6b\x61\xe8\xc7\xc8\x86\x6a\x94\x67\xc8\x61\xe8\xb8\x92\x65\x47\xe8\xe4\x04\x6d\x20\x1b\x43\x54\xc3\x69\xcf\x3b\x19\x76\xac\x9a\x25\xac\x3e\xba\x49\x1a\x12\x01\x6a\xb6\xce\x70\x39\xba\x4f\x61\x7d\xd0\xb1\xfd\x24\xd0\x0a\x52\x61\x16\xe5\x88\xf3\x19\xbe\x44\x79\x9c\x2f\x45\x80\xe7\xb8\xb8\x4b\x1f\x0b\x3c\x47\x59\x16\x25\x45\xbc\xcf\x91\x66\xd8\xa6\xc9\x2e\x2e\xe2\x34\xc9\x91\x7e\x45\x94\xbc\xe0\x3e\x4e\x76\x4b\x10\xbb\x96\x0c\xe8\x34\x18\xcf\xaf\x0d\xd8\xc7\x48\xb5\xcf\x2c\x27\xfa\x04\x70\xd4\x6f\x40\x76\xa0\x8a\x8f\x5c\xa1\x93\xaa\x19\x65\x43\x68\xf4\x4f\x32\x8a\x55\x83\x81\x4c\xcf\xd6\x7f\xa6\x85\x54\xb5\x08\xd0\x71\xcf\x4e\xba\x4b\xe7\x8f\x47\x85\x42\xe4\xd9\x36\xbf\x6d\xb5\x75\x4a\xf6\x24\xd2\x1c\xff\xdf\xa2\x63\x35\x9e\x44\x94\x6d\xef\x7c\x25\xfb\xfa\x9f\xbf\x45\x11\x65\x87\x7d\xe1\xeb\xab\xf9\xf6\x31\xdb\xc5\xd9\x42\x1c\xd2\x28\xfb\x86\x5b\xfc\x2b\x0e\xe9\x43\x94\x1c\x5e\x9f\xf6\x59\x1e\xa7\xc9\xc5\x43\x3a\xb2\xce\xdb\xbf\xee\xe2\x0c\x7e\x4d\x69\x57\xb3\xc1\xd5\xdc\xb6\xd4\x75\x18\xa6\x7a\xb1\x10\x74\x1a\xb4\x71\x42\x94\xac\x6e\xc4\x5f\x61\xb8\xe2\x5e\x36\x74\x3d\x3a\xee\x42\xdb\xa2\x64\x85\xab\xb9\x87\x5c\x08\x11\x7e\xbf\x4b\x93\x97\x1b\xdf\x14\xbf\x02\x00\x00\xff\xff\x0a\xe0\x85\x2e\x04\x03\x00\x00") + +func testImagesBusyboxMakefileBytes() ([]byte, error) { + return bindataRead( + _testImagesBusyboxMakefile, + "test/images/busybox/Makefile", + ) +} + +func testImagesBusyboxMakefile() (*asset, error) { + bytes, err := testImagesBusyboxMakefileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/busybox/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesBusyboxOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\x48\xce\x49\x2c\x4d\xc9\x2c\x4d\x4a\xcd\x29\xe5\x02\x04\x00\x00\xff\xff\x9b\x12\xb6\xf7\x1b\x00\x00\x00") + +func testImagesBusyboxOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesBusyboxOwners, + "test/images/busybox/OWNERS", + ) +} + +func testImagesBusyboxOwners() (*asset, error) { + bytes, err := testImagesBusyboxOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/busybox/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesBusyboxVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xb2\xe4\x02\x04\x00\x00\xff\xff\x7c\xeb\x30\xd3\x05\x00\x00\x00") + +func testImagesBusyboxVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesBusyboxVersion, + "test/images/busybox/VERSION", + ) +} + +func testImagesBusyboxVersion() (*asset, error) { + bytes, err := testImagesBusyboxVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/busybox/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesBusyboxHostnameGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x53\xc1\x6e\xdb\x38\x10\x3d\x8b\x5f\xf1\x56\x27\x29\xf0\xd2\x46\x4e\x45\x16\x3d\xa8\x49\x8a\x0a\x0d\x6c\x23\x72\xb6\xe8\x91\x96\x46\xd2\x60\x29\x92\x4b\x52\xeb\x1a\x8b\xfc\xfb\x82\x8a\x53\xa4\x1b\xf8\x40\x0f\xe7\xcd\x7b\x6f\x9e\xa4\xf5\x95\xb8\xb5\xee\xec\x79\x18\x23\xae\x37\xd7\x1b\x1c\x46\xc2\xd7\xf9\x48\xde\x50\xa4\x80\x6a\x8e\xa3\xf5\x41\x0a\xf1\xc0\x2d\x99\x40\x1d\x66\xd3\x91\x47\x1c\x09\x95\x53\xed\x48\xb8\x74\x56\xf8\x93\x7c\x60\x6b\x70\x2d\x37\x28\x12\x20\xbf\xb4\xf2\xf2\x0f\x71\xb6\x33\x26\x75\x86\xb1\x11\x73\x20\xc4\x91\x03\x7a\xd6\x04\xfa\xd1\x92\x8b\x60\x83\xd6\x4e\x4e\xb3\x32\x2d\xe1\xc4\x71\x5c\x44\x2e\x14\x52\x7c\xbf\x10\xd8\x63\x54\x6c\xa0\xd0\x5a\x77\x86\xed\xdf\xa2\xa0\xa2\x10\x00\x30\xc6\xe8\x6e\xd6\xeb\xd3\xe9\x24\xd5\xe2\x52\x5a\x3f\xac\xf5\x0b\x2a\xac\x1f\xea\xdb\xfb\x6d\x73\xff\xfb\xb5\xdc\x08\xf1\x64\x34\x85\x00\x4f\x7f\xcf\xec\xa9\xc3\xf1\x0c\xe5\x9c\xe6\x56\x1d\x35\x41\xab\x13\xac\x87\x1a\x3c\x51\x87\x68\x93\xcf\x93\xe7\xc8\x66\x58\x21\xd8\x3e\x9e\x94\x27\xd1\x71\x88\x9e\x8f\x73\xfc\x25\xa0\x57\x57\x1c\xf0\x16\x60\x0d\x94\x41\x5e\x35\xa8\x9b\x1c\x9f\xaa\xa6\x6e\x56\xe2\x5b\x7d\xf8\xb2\x7b\x3a\xe0\x5b\xf5\xf8\x58\x6d\x0f\xf5\x7d\x83\xdd\x23\x6e\x77\xdb\xbb\xfa\x50\xef\xb6\x0d\x76\x9f\x51\x6d\xbf\xe3\x6b\xbd\xbd\x5b\x81\x38\x8e\xe4\x41\x3f\x9c\x4f\xde\xad\x07\xa7\xe8\xa8\x93\xa2\x21\xfa\x45\xbc\xb7\x2f\x66\x82\xa3\x96\x7b\x6e\xa1\x95\x19\x66\x35\x10\x06\xfb\x0f\x79\xc3\x66\x80\x23\x3f\x71\x48\x0f\x2f\x40\x99\x4e\x68\x9e\x38\xaa\xb8\xd4\xef\xd6\x91\xe2\x6a\x2d\x84\x53\xed\x5f\x89\x64\x52\x6c\x84\xe0\xc9\x59\x1f\x51\x88\x2c\xef\xb5\x1a\xf2\x74\x4e\x31\x1d\xda\x2e\x95\xa1\xa5\xb2\x21\x17\xa5\x10\xfd\x6c\x5a\x0c\x14\x77\x73\x3c\xda\xd9\x74\xf5\xbe\x28\x61\x28\xca\x7a\x8f\x7f\x45\xd6\x5a\x63\x56\x20\xef\x71\xf3\x71\xb9\xbe\x63\xa5\x8b\x7c\xee\x5c\xbe\x42\xfe\x41\x2e\xbf\x9b\x0f\x9b\xbc\x14\x19\xf7\x0b\xf0\xb7\x8f\x30\xac\xd3\x70\xa6\xed\x20\x3f\xab\xa8\x74\x41\xde\x97\x22\x7b\x16\x59\x47\x3d\x79\x24\x5a\x79\xab\x6d\xa0\xa2\x14\x99\xb6\xad\xd2\x55\xd7\x2d\x22\x4b\xeb\xe1\xf5\xa6\x28\x65\x71\x95\x74\x9f\xee\xf6\xa9\x2e\x45\xe6\x29\xce\xde\xe0\xe7\x90\xac\xf7\xe2\xf9\xb2\x48\x8a\xa0\x28\x93\x76\xda\xbd\xde\x27\xc2\xf4\x4f\x7e\xb2\x56\x17\x39\xe7\x2b\xf4\x4a\xa7\x2f\x24\x57\x48\xaf\x81\x19\x92\xf3\x05\xb2\x57\xfe\xc5\x0e\xf7\xb8\xba\x8c\xa7\x25\xd8\x25\x96\xff\x45\x24\xb2\xac\x9f\xa2\xdc\x7b\x36\xb1\x60\x27\x9b\x85\xab\x28\xd3\x92\x20\x1d\x68\x19\x1d\x6d\x88\x46\x4d\xf4\x33\x41\x1b\xe4\x97\xcb\xdd\xc2\xf1\x3e\xb2\x77\x99\xa5\xd0\xde\x68\xbd\x52\x2e\x69\x3e\x8b\xff\x02\x00\x00\xff\xff\xff\xa0\xe4\x9c\x37\x04\x00\x00") + +func testImagesBusyboxHostnameGoBytes() ([]byte, error) { + return bindataRead( + _testImagesBusyboxHostnameGo, + "test/images/busybox/hostname.go", + ) +} + +func testImagesBusyboxHostnameGo() (*asset, error) { + bytes, err := testImagesBusyboxHostnameGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/busybox/hostname.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesCloudbuildYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x56\x6f\x8b\xdb\xb8\x13\x7e\x9f\x4f\x31\xb0\x05\xb7\x10\xd9\xde\x3f\xfd\x13\x43\x7e\x90\x5f\x9b\xdb\x5d\x2e\xdb\x2c\xd9\x94\xde\xbe\x32\xb2\x34\xb6\x75\xb1\x25\x23\xc9\x09\x39\xee\xc3\x1f\x92\x9c\x5c\xd3\xdd\x85\xeb\xdd\x8b\x42\xc0\xca\x78\xfc\xcc\xa3\x47\xa3\x99\x39\x83\x07\x44\xa8\xad\xed\x4c\x96\x24\xac\x51\x3d\x8f\x2b\xa5\xaa\x06\x63\xa6\xda\x60\x20\x45\x2f\x1a\x9e\x70\xc5\x4c\xe2\x97\x84\x29\x59\x8a\x6a\x34\x3a\x03\x5b\x0b\x03\x6d\x6f\x2c\x14\x08\xa6\x43\x26\x4a\x81\x1c\x84\x04\x83\x4c\x49\x6e\x62\xb8\x2d\x41\xb5\xc2\x5a\xe4\x63\xe0\x58\xd2\xbe\xb1\x06\xac\x82\x77\x69\x6a\xe0\xf5\x79\x0a\xad\x90\xe6\x8d\xc7\x42\xb0\xa2\x45\xd5\x5b\xd8\x51\x03\x42\x32\x8d\xd4\x20\x87\x02\x19\xed\x0d\x82\x51\x2d\x82\x68\x69\x85\x06\x5a\x51\xd5\x16\x2c\xdd\x20\x34\x4a\x56\xa8\x1d\xa6\xa7\x07\xaf\x31\xae\xe2\x0c\x0c\x6d\xbb\x06\x09\xed\x84\x41\xbd\x45\x3d\x86\x0e\xad\x49\x34\x72\x61\x88\x90\xc6\xd2\xa6\x41\xfd\x66\x34\xc4\xcc\xe0\xed\x55\x9a\x9a\xc3\xa6\x3a\x8d\x5b\x94\xd6\x00\x6a\xad\xb4\x01\x51\xc2\x5e\xf5\xc0\x95\x8c\x2c\x38\x32\x85\xb2\x35\xe4\xd7\xb7\xeb\x7c\x3d\xbb\x06\x2a\x39\xe4\xf7\x5f\x16\x8b\xfc\xff\xb3\x87\x79\xbe\x9a\xff\x32\x1e\x9d\x81\xd2\x40\xe5\x1e\x24\xee\xc0\xf4\x85\xb1\xc2\xf6\x56\x28\x69\x80\x72\x1e\x64\x72\x9b\x2e\x7b\xdb\x6b\x8c\x47\xaa\xf3\x2f\xb3\x11\x9c\x78\xe7\xc1\x9e\xc1\x6c\xb1\x58\x7e\xcd\x17\xcb\xe5\xc3\x7c\x04\xd0\x52\x56\x0b\x89\xeb\x7d\x87\x19\x44\x9f\xcf\xf3\x9b\xdb\xeb\x9b\x8f\xf7\x5f\xf2\x0f\xd1\xc8\x58\xec\x3c\x0e\x01\x49\x5b\xcc\xa0\x62\x3a\x16\xea\xdb\xf3\x44\x6d\x92\xca\xff\x1f\x01\x00\xa0\xb4\x7a\xdf\x29\x21\x6d\x06\x51\x41\x4d\x1d\x79\xf3\x19\x7c\x5e\xae\xe7\xaf\x59\x43\x7b\x2e\xfa\xe2\x4d\x06\x5f\x11\x24\x22\x77\x6a\x57\x68\x3d\x7f\x46\xe3\x0e\xdb\x31\x30\xd4\x36\xac\x36\xb8\x77\x0b\x28\x45\x83\xc6\x6b\xd3\xf5\x16\xdc\x71\x5a\x74\x9f\x0c\xd8\x89\xfb\xc2\x24\x31\x57\x6c\x83\x9a\x9c\x7f\x48\x27\xc9\xf8\x89\x75\x92\x5e\x3e\x6b\x9d\x24\x50\x2a\xbf\x91\x31\xec\x6a\xc1\x6a\xd8\x89\xa6\x01\xa6\xa4\xa5\x07\x65\x5d\xfc\xd8\x47\xa3\xba\xf2\x8a\x38\x4d\x08\x1b\x16\x7f\xfa\x27\x40\xbb\xe1\x42\x03\xe9\xe0\x00\xbf\x13\x92\xab\x9d\x19\x5e\x07\x9d\x5c\x4a\x6b\xb4\x06\xb6\xa8\x4d\x38\x45\xc6\xd0\x18\x68\xa8\x45\x63\x81\x90\x4e\xab\xdf\x91\xd9\xe9\xe6\x83\x4b\xb0\x52\x53\x67\xd9\x05\xbd\x89\xd5\xbd\xb1\xc8\x81\x90\x80\x33\x1d\x62\x10\x8d\xad\xb2\x48\x42\xe4\x9c\x51\xe2\x94\xfb\xdf\xf7\x54\x92\xa0\xf2\xcf\x60\x84\xda\xbe\xc4\x69\x38\xf1\x9f\xc0\x6a\x83\xfb\x17\x48\x0d\xc9\x37\x70\x62\x1d\x10\xfd\xbd\xcf\x73\x99\xf7\x43\xfe\x93\xf4\xf2\x07\xfd\x03\xfe\x56\x35\x7d\x8b\xc7\x44\x0c\x97\x33\xf2\xce\xd1\x00\xd8\x51\x5b\x67\x10\x25\x47\xe3\xd1\x6d\xb8\xc4\x4e\x35\x27\x64\x28\x84\x49\xc5\x8a\x41\x13\x12\xf4\xcf\xb6\x17\xa9\x0b\x98\xbe\x23\xef\xaf\xde\x96\xc8\xaf\xa2\x27\x57\xbc\xa5\x9b\x70\x09\xb9\xd0\x19\xc4\x89\xc3\x4b\x06\xc0\xc1\x79\x7b\x20\xf9\x69\xf9\xf1\xd7\xf9\x2a\xff\xb8\xb8\xcd\xe7\xbf\xdd\xcf\x57\xb7\x77\xf3\xcf\xeb\xd9\x62\x8a\x92\x16\x0d\xf2\xc1\x6b\x3d\xbb\x9e\xbe\x3a\x94\xc3\xc1\x76\x28\x85\xd3\x57\xa7\xa5\x71\x78\xfd\xf5\x66\xb6\x9e\xbe\xca\xdd\x63\xb0\xac\xe6\xd7\xb7\x0f\xeb\xd5\xe3\xf4\x9b\xad\x1a\x4b\x2b\x21\x2b\x82\x17\xe8\xb7\x4d\x02\xcd\xef\xc8\xcd\x57\xeb\x00\x7f\x3f\x5b\xdf\x4c\x83\x78\x47\xd0\xbb\xe5\x7a\x9e\x0f\x9e\x5f\x56\x8b\xdc\x1d\xf7\xd4\xb2\x2e\x4b\x12\xd1\x56\x2e\xf9\x5c\x66\x85\x34\x88\x91\x1a\xdb\x9b\xd8\x4b\x49\xbb\x2e\xa6\x7f\xb8\xe2\xcc\x54\x9b\x5d\x5c\xbe\x7f\xf7\x32\xe6\x24\xbd\x7c\x16\x73\x92\x5e\xfe\x07\xcc\xe7\x79\x4e\xfe\x19\xcf\x6f\x6b\x1e\x6d\x9a\xe1\x82\x51\xc9\x49\xd7\x9b\xfa\x5f\x26\xe4\x49\x23\x73\xdf\x9d\xfd\xdd\x05\x7d\x01\x2e\x7c\xdd\x6d\x90\xc3\x4e\xd8\x1a\x28\x54\xc2\x92\xc2\x37\x72\x4b\x2b\x28\x95\xf6\xb5\xd9\x1f\xe3\x18\x54\x19\x2a\xb5\xd2\x2d\x6c\x1f\x1f\x1f\x1f\xef\xee\x3e\x7d\x22\x35\x35\xf5\xd8\x35\x0e\x8f\xcf\xa8\x74\xa8\xbd\x83\xa0\x06\xe8\x49\x7b\x1c\xc1\x31\x7e\x06\xd1\xf9\xc5\xe5\xd5\xdb\x28\xb0\x3a\xc9\xb9\xa7\xcd\x41\xa3\x0b\x4d\xc3\xb0\xe1\x04\x09\x5d\xcd\xfd\xb4\xa8\xfc\x44\xe1\x06\x81\x30\x53\x10\x0f\x49\xa1\xd0\x54\xb2\x1a\x1a\xb1\x41\x88\x5a\x6a\x2c\xea\xc8\xb5\xf9\x48\x63\xe3\x86\x15\x92\xc6\x17\xd1\xd8\x37\x7e\xbf\xdb\xe0\xb8\x75\x56\xd7\x87\x4e\x39\x65\x47\x88\x40\xd8\xdd\x84\xa7\x3c\xbd\x50\xfe\x64\xfc\x88\x83\x9e\x91\x1d\xba\x6a\xd1\x88\x23\xf1\x1a\x61\xb8\x2c\xa0\xb1\x12\xc6\xea\xbd\x8f\xe9\x60\x33\x88\x5c\x06\xb8\xc9\x4d\xe9\x96\x4a\x86\xd1\xe8\xaf\x00\x00\x00\xff\xff\xfe\xae\x61\xa7\xfd\x09\x00\x00") + +func testImagesCloudbuildYamlBytes() ([]byte, error) { + return bindataRead( + _testImagesCloudbuildYaml, + "test/images/cloudbuild.yaml", + ) +} + +func testImagesCloudbuildYaml() (*asset, error) { + bytes, err := testImagesCloudbuildYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/cloudbuild.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesCudaVectorAddBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\xcd\x2b\xcb\x4c\xc9\x4c\xd4\x4f\x2e\x4d\x49\xb4\x32\x34\xd0\x33\xd0\x4d\x49\x2d\x4b\xcd\xd1\x2d\x4d\x2a\xcd\x2b\x29\x35\xb4\xd0\x33\x30\xe1\x82\x28\x2f\x28\x48\x36\x33\xc9\x49\x45\xd6\xa0\x0b\x15\xc3\xa5\x11\x10\x00\x00\xff\xff\x54\xd9\xcc\x89\x68\x00\x00\x00") + +func testImagesCudaVectorAddBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesCudaVectorAddBaseimage, + "test/images/cuda-vector-add/BASEIMAGE", + ) +} + +func testImagesCudaVectorAddBaseimage() (*asset, error) { + bytes, err := testImagesCudaVectorAddBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/cuda-vector-add/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesCudaVectorAddDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6f\xbb\x36\x14\xc5\xdf\xfd\x29\x8e\xc2\x5f\xd5\x36\x05\x9c\xf5\x65\xd2\xf6\x44\x49\xda\xa2\x34\xd0\x41\xd2\xaa\xd2\xa4\xc8\x81\x1b\xb0\x66\x6c\x6a\x9b\xa4\xf9\xf6\x13\x49\xba\xb5\x9a\xdf\xee\xbd\x87\x73\x7f\xf7\x10\x20\x31\xfd\xc9\xca\xa6\xf5\xb8\x9d\xfd\xfa\x1b\xd6\x2d\x61\x39\xec\xc8\x6a\xf2\xe4\x10\x0f\xbe\x35\xd6\x45\x2c\x60\x01\x9e\x64\x45\xda\x51\x8d\x41\xd7\x64\xe1\x5b\x42\xdc\x8b\xaa\xa5\xcf\xc9\x14\x2f\x64\x9d\x34\x1a\xb7\xd1\x0c\x3f\x8d\x82\xc9\x75\x34\xf9\xf9\x0f\x16\xe0\x64\x06\x74\xe2\x04\x6d\x3c\x06\x47\xf0\xad\x74\xd8\x4b\x45\xa0\x8f\x8a\x7a\x0f\xa9\x51\x99\xae\x57\x52\xe8\x8a\x70\x94\xbe\x3d\xaf\xb9\x9a\x44\x2c\xc0\xdb\xd5\xc2\xec\xbc\x90\x1a\x02\x95\xe9\x4f\x30\xfb\xaf\x3a\x08\x7f\x06\x1e\x5f\xeb\x7d\xff\x3b\xe7\xc7\xe3\x31\x12\x67\xd8\xc8\xd8\x86\xab\x8b\xd0\xf1\xa7\x34\x59\x64\xe5\x22\xbc\x8d\x66\xe7\x4f\x36\x5a\x91\x73\xb0\xf4\x3e\x48\x4b\x35\x76\x27\x88\xbe\x57\xb2\x12\x3b\x45\x50\xe2\x08\x63\x21\x1a\x4b\x54\xc3\x9b\x91\xf7\x68\xa5\x97\xba\x99\xc2\x99\xbd\x3f\x0a\x4b\x2c\x40\x2d\x9d\xb7\x72\x37\xf8\x6f\x61\x7d\xd2\x49\xf7\x4d\x60\x34\x84\xc6\x24\x2e\x91\x96\x13\xdc\xc5\x65\x5a\x4e\x59\x80\xd7\x74\xfd\x98\x6f\xd6\x78\x8d\x8b\x22\xce\xd6\xe9\xa2\x44\x5e\x20\xc9\xb3\x79\xba\x4e\xf3\xac\x44\x7e\x8f\x38\x7b\xc3\x32\xcd\xe6\x53\x90\xf4\x2d\x59\xd0\x47\x6f\x47\x7e\x63\x21\xc7\x18\xa9\x1e\x33\x2b\x89\xbe\x01\xec\xcd\x05\xc8\xf5\x54\xc9\xbd\xac\xa0\x84\x6e\x06\xd1\x10\x1a\x73\x20\xab\xa5\x6e\xd0\x93\xed\xa4\x1b\x7f\xa6\x83\xd0\x35\x0b\xa0\x64\x27\xbd\xf0\xe7\xce\xff\x8e\x8a\x18\x8b\x8b\x87\x91\x7e\x91\xae\xe2\x87\x05\xbb\x2f\xf2\x15\x7e\xfc\x57\xb3\xa4\xc8\xcb\x72\x7b\xb7\x49\x9f\xe6\xdb\x24\x7f\x7e\xc3\x3b\x75\x43\xf8\xe7\x62\xb5\x89\x8b\xe4\x31\x74\xa3\x75\x05\x3e\x38\xcb\x77\x52\x73\xc6\x8a\x4d\x06\xd1\xfb\xb0\x21\x8f\xa1\xaf\x85\x27\xdc\xdc\xfc\xdb\x91\xda\x79\xa1\x14\xc2\x13\xc2\x50\x9b\xf0\x5a\x87\x96\x2a\xd3\x75\xa4\x6b\x87\xbf\x18\xae\xaf\x1a\x6a\x11\x3a\xd1\xf5\x8a\x5c\xf8\x23\xd9\xcc\xe3\xed\xf3\xf2\x61\xfb\xb2\x28\xca\x34\xcf\x46\xdb\x8b\xd6\x76\x08\xed\x1e\xfc\x20\x2c\x57\x72\xc7\x45\xef\xb9\x92\xce\x3b\xfe\x0b\x63\xaf\x79\xb1\x9c\xa7\xc5\x05\x51\x99\x4a\x28\x3e\xfa\xf2\xab\x2f\x9f\x6d\xcb\x31\x73\xe2\x07\xaa\xbc\xb1\x71\x5d\x9f\x4f\xe8\xc4\xdf\xc4\x58\xb2\x9a\x43\x1f\x64\x2d\x45\xe8\x3a\x39\x6e\x8c\xbe\xe8\xfe\x09\x00\x00\xff\xff\xf1\x72\x29\x14\x87\x03\x00\x00") + +func testImagesCudaVectorAddDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesCudaVectorAddDockerfile, + "test/images/cuda-vector-add/Dockerfile", + ) +} + +func testImagesCudaVectorAddDockerfile() (*asset, error) { + bytes, err := testImagesCudaVectorAddDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/cuda-vector-add/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesCudaVectorAddOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\xc8\xca\x4c\xac\xcc\xcc\x4b\xaf\x02\x73\x72\xb3\x4b\x73\x13\x4b\x12\xd3\xb9\x00\x01\x00\x00\xff\xff\xa1\xc6\xdb\x43\x25\x00\x00\x00") + +func testImagesCudaVectorAddOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesCudaVectorAddOwners, + "test/images/cuda-vector-add/OWNERS", + ) +} + +func testImagesCudaVectorAddOwners() (*asset, error) { + bytes, err := testImagesCudaVectorAddOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/cuda-vector-add/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesCudaVectorAddVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd2\x33\xe4\x02\x04\x00\x00\xff\xff\x70\x6a\x3d\x6f\x04\x00\x00\x00") + +func testImagesCudaVectorAddVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesCudaVectorAddVersion, + "test/images/cuda-vector-add/VERSION", + ) +} + +func testImagesCudaVectorAddVersion() (*asset, error) { + bytes, err := testImagesCudaVectorAddVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/cuda-vector-add/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesEchoserverBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\xcd\x4b\xcf\xcc\xab\xb0\x32\xd4\x33\x34\xd5\x4d\xcc\x29\xc8\xcc\x4b\xe5\x82\xca\x16\xe5\xda\x26\x16\xe5\x1a\x1b\x95\x99\xe9\xe3\x51\x63\x66\x62\x0b\x26\xcb\x2c\x70\xaa\x2a\x28\x48\x36\x33\xc9\x49\xb5\x85\xd2\x38\xd5\x15\x1b\x5b\x1a\x54\xd8\x82\x49\x2c\x6a\x00\x01\x00\x00\xff\xff\xc4\xff\xf5\xf6\xb4\x00\x00\x00") + +func testImagesEchoserverBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesEchoserverBaseimage, + "test/images/echoserver/BASEIMAGE", + ) +} + +func testImagesEchoserverBaseimage() (*asset, error) { + bytes, err := testImagesEchoserverBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/echoserver/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesEchoserverDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x92\xd1\x6e\x9b\x30\x14\x86\xef\xfd\x14\xbf\xc2\x2e\x36\x2d\x40\x5b\x69\x9a\xb4\x5d\xd1\x84\xb6\xa8\x0d\x74\x90\xac\x8a\xa6\xa9\x72\xe0\x04\xac\x82\xed\xda\x66\x49\xde\x7e\x82\xb4\x6a\xab\x75\x5c\xc1\xef\xef\x1c\x7f\x3e\xc6\xc3\x4c\xe9\x83\x11\x75\xe3\x70\x76\x72\xfa\x15\xcb\x86\x70\xdd\x6f\xc8\x48\x72\x64\x11\xf5\xae\x51\xc6\x06\xcc\x63\x1e\x6e\x44\x49\xd2\x52\x85\x5e\x56\x64\xe0\x1a\x42\xa4\x79\xd9\xd0\xf3\xca\x14\x3f\xc9\x58\xa1\x24\xce\x82\x13\x7c\x1c\x80\xc9\xd3\xd2\xe4\xd3\x77\xe6\xe1\xa0\x7a\x74\xfc\x00\xa9\x1c\x7a\x4b\x70\x8d\xb0\xd8\x8a\x96\x40\xfb\x92\xb4\x83\x90\x28\x55\xa7\x5b\xc1\x65\x49\xd8\x09\xd7\x8c\xdb\x3c\x35\x09\x98\x87\xf5\x53\x0b\xb5\x71\x5c\x48\x70\x94\x4a\x1f\xa0\xb6\xaf\x39\x70\x37\x0a\x0f\x4f\xe3\x9c\xfe\x16\x86\xbb\xdd\x2e\xe0\xa3\x6c\xa0\x4c\x1d\xb6\x47\xd0\x86\x37\xc9\x2c\x4e\x8b\xd8\x3f\x0b\x4e\xc6\x92\x95\x6c\xc9\x5a\x18\x7a\xec\x85\xa1\x0a\x9b\x03\xb8\xd6\xad\x28\xf9\xa6\x25\xb4\x7c\x07\x65\xc0\x6b\x43\x54\xc1\xa9\xc1\x77\x67\x84\x13\xb2\x9e\xc2\xaa\xad\xdb\x71\x43\xcc\x43\x25\xac\x33\x62\xd3\xbb\x37\xc3\x7a\xb6\x13\xf6\x0d\xa0\x24\xb8\xc4\x24\x2a\x90\x14\x13\x9c\x47\x45\x52\x4c\x99\x87\xbb\x64\x79\x95\xad\x96\xb8\x8b\xf2\x3c\x4a\x97\x49\x5c\x20\xcb\x31\xcb\xd2\x79\xb2\x4c\xb2\xb4\x40\x76\x81\x28\x5d\xe3\x3a\x49\xe7\x53\x90\x70\x0d\x19\xd0\x5e\x9b\xc1\x5f\x19\x88\x61\x8c\x54\x0d\x33\x2b\x88\xde\x08\x6c\xd5\x51\xc8\x6a\x2a\xc5\x56\x94\x68\xb9\xac\x7b\x5e\x13\x6a\xf5\x87\x8c\x14\xb2\x86\x26\xd3\x09\x3b\x5c\xa6\x05\x97\x15\xf3\xd0\x8a\x4e\x38\xee\xc6\xe4\x9f\x43\x05\x8c\x45\xf9\xe5\x60\x1f\x27\x8b\xe8\x32\x66\x17\x79\xb6\xc0\x87\x97\x6f\x36\xcb\xb3\xa2\xb8\x3f\x5f\x25\x37\xf3\xfb\x59\x76\xbb\xc6\x23\x75\xbd\xff\x23\x5e\xac\xa2\x7c\x76\xe5\xdb\xa1\x75\x89\xb0\xb7\x26\xdc\x08\x19\x32\x96\xaf\x52\x70\xfd\x00\x5e\x55\xf0\x7d\xa9\xfc\x72\xfc\xd7\x94\x26\x69\x6d\x0b\x59\x0b\xb9\xf7\x3b\x55\xf9\xc3\x15\xfb\x6d\xcf\xdf\x89\xfc\x5e\x5b\x67\x88\x77\x63\xb7\xee\xa1\x12\x06\xbe\x46\x68\x7a\x19\x8e\x34\x63\xd1\x7c\x7e\x2c\x0c\x4a\x25\xb7\x08\xc9\x95\xc7\xa5\xf0\x25\x1d\x21\x47\x9d\x6e\xb9\xa3\x60\xd8\x6a\xf4\x6c\x55\xc9\xdb\xd0\x36\xdc\x50\xd8\xf6\x3c\xfc\x12\x9c\x86\x23\x9a\xc7\xd1\x7c\x11\x07\x5d\xf5\xf2\x36\xe6\xa6\x97\x81\x6d\x5e\x17\x0f\x47\x3d\xa6\xa3\x61\xd9\x74\xaa\xc2\xe7\xfd\x7f\x90\x38\x5d\xe6\xeb\xdb\x2c\x49\x97\xf8\x35\x79\x17\x99\xfc\x66\x7f\x03\x00\x00\xff\xff\x95\xfc\xf7\xf7\xd4\x03\x00\x00") + +func testImagesEchoserverDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesEchoserverDockerfile, + "test/images/echoserver/Dockerfile", + ) +} + +func testImagesEchoserverDockerfile() (*asset, error) { + bytes, err := testImagesEchoserverDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/echoserver/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesEchoserverOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\x48\xc9\xcc\x2d\xe6\x02\x04\x00\x00\xff\xff\xe2\x68\x65\xd7\x14\x00\x00\x00") + +func testImagesEchoserverOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesEchoserverOwners, + "test/images/echoserver/OWNERS", + ) +} + +func testImagesEchoserverOwners() (*asset, error) { + bytes, err := testImagesEchoserverOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/echoserver/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesEchoserverVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd2\x33\xe6\x02\x04\x00\x00\xff\xff\xf2\x08\x0b\x5d\x04\x00\x00\x00") + +func testImagesEchoserverVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesEchoserverVersion, + "test/images/echoserver/VERSION", + ) +} + +func testImagesEchoserverVersion() (*asset, error) { + bytes, err := testImagesEchoserverVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/echoserver/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesEchoserverNginxConf = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x56\x41\x6f\xdb\x3a\x12\x3e\x8b\xbf\x62\xa0\x20\x88\x0d\xc4\x52\xd2\x06\x8b\xae\x03\x1f\xd2\x6d\x80\x06\x8b\x36\x41\xd2\x3d\x05\x81\x40\x53\x63\x8b\x30\x45\xaa\x24\x65\x5b\x6b\xf8\xbf\x3f\x0c\x25\xd9\x72\x93\x77\x78\x27\x81\xc3\x6f\x66\xc8\xe1\x37\xdf\x48\x19\x9e\x67\xa5\xc9\x6b\x85\xd0\x7e\x5c\xaa\xf3\x55\x56\x78\x5f\x75\xf6\xc4\x99\x5b\xf6\x21\x6e\xb9\x6d\x71\xaa\xe6\xff\x08\x5b\x57\xce\x5b\xe4\xe5\xd0\x89\xe1\x1a\xb5\x77\xb0\x63\xd1\xc6\xd8\x15\xda\x4c\x18\xad\x51\x78\x69\xb4\x83\xeb\xab\x4f\x37\xb7\x6c\xcf\x18\xea\x35\x7c\x7f\x7c\xf9\xf5\xf3\xee\xc7\xfd\x6d\x58\xfd\x7c\xfc\x76\x9f\x1d\x97\x4f\x8f\xdf\x3e\x58\xbd\x3c\xdd\xfd\x67\x60\x7a\x78\xba\x65\x8c\x8e\x43\xe9\x72\x5c\xf0\x5a\xf9\xcc\x37\x15\xc2\x85\xc7\xad\x4f\x2b\xc5\xa5\xbe\xb8\x65\xd1\x19\x94\x7c\x2b\xcb\xba\x04\xae\x94\xd9\x60\x0e\x4e\xfe\x1f\xc1\x2c\xc0\x17\x08\x42\x49\xd4\x1e\x2c\xfe\xae\xd1\x79\x98\x9b\xbc\x49\xe0\x6b\x03\x5d\x44\xf0\x85\x74\x20\x1d\x5c\x97\x09\x85\x7a\xee\x70\x1b\xe9\x0b\x98\xcb\xe5\x12\x2d\xf9\x48\x74\xa0\x97\x52\x6f\x61\x23\x95\x02\x8b\xbe\xb6\x1a\xd0\x5a\x63\x41\x98\x1c\xe1\xe6\xfa\x73\xf0\xa7\x03\x4f\xd3\x34\x60\x13\x63\x97\x29\xea\x34\x37\xc2\xa5\xb4\x71\xac\xb0\x30\x16\xfb\xca\x16\xbe\x54\x67\xed\x31\xb3\x92\x6f\x33\x3a\x62\x46\x57\x60\xd1\x47\x56\xb8\xbe\x2a\x6f\x19\x8b\xa4\x96\x3e\x9b\x37\xe1\xb1\xe6\xca\x88\x15\xd5\x29\x52\x46\x70\x05\x1e\xcb\x4a\x71\x8f\x30\x0b\x17\x97\x16\x47\x71\x6f\x8b\xc7\x2c\x8a\x26\x93\x23\xc6\x35\xda\xf3\x2d\xe4\x46\xd4\x25\x6a\x8f\x39\x14\x68\x71\xda\xa2\xe8\xb4\x6e\x9a\xa6\x4b\xe9\x8b\x7a\x9e\x08\x53\xa6\xf3\x5a\x2f\x15\xa6\xaa\xe6\x13\x8b\xce\x37\x93\x3e\x52\x3a\x57\x66\x9e\x96\xdc\x79\xb4\xe9\xf3\xfd\xdd\xb7\x1f\xf7\x49\x99\xb3\x28\xf2\x65\xa5\x60\x76\xc8\x48\x51\x2a\xa9\x70\xf4\xfa\xca\x18\xfb\x6e\x9c\xd7\xbc\xc4\x29\xec\x76\xc6\x25\x4b\xf4\xa8\xd7\xa3\xb8\x27\x50\x3c\x06\x63\x21\xfe\x99\xde\xc5\xfb\x3d\x63\x4f\x26\x87\x07\xbd\x30\xb6\xe4\xc4\xba\x29\xdb\x9d\x83\x5c\xc0\xc0\xb1\xa7\x53\x3c\xa6\xf7\xd7\x70\xbe\x67\x91\xa6\x27\x0a\x49\xa2\x93\x24\x07\x5e\x9e\x66\x89\x2a\x93\x7f\x04\x1f\x84\xfe\x08\xed\x2a\x2e\xfe\xce\x25\x90\xfb\x03\xbf\x87\xa7\x0f\x1c\x1e\x9e\x4e\x91\xbb\x73\x40\xe5\x30\x5c\x65\xa2\x0d\x90\xa3\x3c\x16\x01\xf8\x9a\x4b\xc5\xe7\x0a\x27\x01\xaa\x73\x42\xb2\x17\xb4\x6b\xb4\xb0\xe6\xaa\x46\x37\x65\x91\x0b\xeb\x6c\x8d\xd6\x49\xa3\x67\x81\xa2\x54\x74\xbd\xdc\x26\x6b\x6e\x93\x60\xe8\xb7\xf7\x7b\x98\x80\xaa\x79\x0f\x10\x46\x2f\xe4\x32\x21\x02\x13\xe1\x0e\x28\xc6\xfa\x8e\x39\x79\x95\x9e\xb9\x3c\xcf\x2d\x3a\x37\x3b\x66\xb1\x58\x1a\x8f\x61\x83\x6a\x50\xa2\x2f\x4c\xde\xed\x5b\xfc\x4d\x75\xc8\x5a\xe3\x68\x4c\x00\x8b\x5c\x41\xc5\x7d\x71\x12\x23\xa4\xcc\x6a\x2b\x09\xf2\xbb\x46\xdb\x0c\xb6\xc3\x3a\x73\xde\x4a\xbd\x0c\x65\x8c\xdb\x40\xad\x53\x7f\xff\x63\xca\xd0\x91\x9d\xb9\x4f\xda\x62\x9d\x28\xb0\xc4\x41\xe8\xd6\x30\x84\xd4\x56\xbe\xdb\x4f\x92\x78\x9a\xa6\x71\x92\xf4\xe6\xc2\x38\x4f\xc6\x81\xa9\x7b\x8d\xca\x58\x7f\x34\x9e\x5e\xec\x50\xda\xef\xc8\x73\xb4\x2e\x90\x7d\x61\x2c\xc8\x4b\x58\x61\x03\x52\x83\xac\xb8\xb4\x6e\xb4\xc2\xc6\x8d\x21\x37\x81\x21\xbb\x73\x68\x55\x60\xcd\xa9\xeb\x8a\xd6\xf9\x75\x85\xcd\x5b\xbf\x2f\x17\x40\x4a\x3a\x5a\x73\x35\x86\xd9\x0c\x62\x4f\xec\x89\x8f\x0d\x13\xf5\x99\x60\x06\xd7\x97\x67\x14\xa9\x8f\xbe\x5b\x61\xb3\xdf\xcf\x76\xbb\x35\x57\xaf\xf2\x6d\xdf\xa1\x3b\xd6\x45\x43\xae\x9e\x60\xf7\xdd\x66\x8b\x1b\xf0\xb4\xbf\xe5\x57\x93\x37\x53\xf6\xfe\x95\x49\xf9\xc2\x33\x06\xee\x87\x95\xd4\xbd\xa0\x4f\xe8\x6d\xdf\xde\xc6\x2c\xda\xb3\x9e\xe2\x41\x08\xcf\xa0\x52\xc8\x1d\x82\x28\x50\xac\xc2\x28\x98\xa3\xc6\x85\xf4\x8e\x46\x83\xc5\xda\x21\x15\xff\xa0\x70\x9b\xcd\xa6\x6d\x81\x56\xe4\x94\x59\xa6\xce\x88\x15\xfa\x89\x2b\xb8\xcd\xa5\x5e\x4e\xc2\xf6\xc4\x62\x08\x3c\xb9\x9e\xfc\x7b\x72\x1d\x32\xcd\xb9\x93\x82\x2b\x45\x07\x73\xde\xd6\xc2\x3b\xf0\x06\x84\x45\xd2\x57\xae\x41\xea\x5c\xae\x65\x5e\x73\x05\x4a\x3a\x8f\x9a\x98\xd9\x46\x0f\x65\x46\x2e\x0a\x68\x47\x2a\x54\xd6\x08\x74\x0e\x46\xb5\x23\x14\x1d\xfc\xe5\x31\x7b\xbe\xff\xdf\xcb\xfd\xd3\xe3\xf3\xaf\x90\xb0\x73\x35\x15\x75\xdb\xf8\xb2\x1d\x7c\x84\xe6\xb0\x42\xab\x51\x51\xfa\x5c\x52\x0b\xcc\x6b\x8f\x20\xb5\x30\x25\xed\x0f\xe7\xf5\x1c\xfd\x06\x51\xff\x91\x17\x5d\x42\x63\x24\x9c\x12\xbe\x5c\x7d\xb9\xea\x27\x65\xd6\x15\xf7\x50\xb9\xdb\x01\xee\xe6\xe6\xf3\x9f\x38\xe7\x54\xa8\xed\xa7\xa1\x07\x8b\x22\xe7\x54\x26\xd0\x7a\xb9\x90\x82\xca\x93\xd2\xc2\xa5\x03\x53\x22\xda\xe0\x7f\x20\x33\xe2\x7c\x87\xae\xac\x5c\x73\x8f\xff\xc5\x26\x59\x61\x13\xe2\xd2\xec\xae\x14\x17\x08\x17\xd9\x45\x3b\xbf\x1b\x53\x5b\x28\xba\xf9\x42\xd7\xea\x9a\x8e\x96\x90\x75\x5e\x0e\x3d\x28\xa3\x97\xb0\x42\xac\xb8\x92\x6b\xcc\xbc\x2c\xd1\xd4\x1e\xe6\x28\x78\xed\x10\x9c\x29\x11\xe8\x8f\x69\xce\x15\xd7\xa2\x2d\xd6\x96\xfe\x09\x70\x5b\xa1\xf0\xed\x8f\xc6\xa1\xb4\x21\xac\x37\x60\xb1\xe4\x52\x83\xa9\x50\x87\x57\xe6\x1e\x88\x39\x1e\xa8\x64\xa5\xd4\xb5\x6f\x8b\xfd\x3e\xf1\xbf\x3e\x5d\xb9\x70\x3c\x6a\xe4\x20\xf1\x69\x20\x75\x44\xda\xab\x11\xf3\xec\xb4\x39\x34\x95\x2b\x12\x46\x7b\x12\xdd\x77\x3f\x05\x51\x44\x3d\xd5\x0a\xc1\x6b\xdc\xce\x85\xf8\x0d\x66\x10\xa3\x28\x4c\x5b\x94\x98\x05\x60\xab\x1c\x9d\x66\xc0\x0c\x86\xb2\xdc\x59\x47\xe3\x01\x92\x94\x07\x66\xb0\xdb\x07\x1b\xdd\x72\x85\xcd\x65\x90\x1e\xa9\xa1\x55\xa7\xce\x8f\x04\x2a\xa0\xa2\xa0\x36\x89\xd4\x0e\xad\x0f\xda\x15\xf4\xac\x0d\x8b\x3a\x67\x47\x8c\x33\x1d\x62\xcc\x0e\xf7\x70\xbc\x19\xd1\x1f\xc5\x68\x67\xdc\xcc\xb8\x4b\x3a\xe3\x4c\x2f\xb7\x21\x88\x9b\xb5\xf1\xba\x9c\xb3\xee\xbb\x1f\x87\xe8\x74\xca\x3d\x49\xc5\x9e\xfd\x15\x00\x00\xff\xff\x6d\xfd\xc1\xd0\x55\x0b\x00\x00") + +func testImagesEchoserverNginxConfBytes() ([]byte, error) { + return bindataRead( + _testImagesEchoserverNginxConf, + "test/images/echoserver/nginx.conf", + ) +} + +func testImagesEchoserverNginxConf() (*asset, error) { + bytes, err := testImagesEchoserverNginxConfBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/echoserver/nginx.conf", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesEchoserverRunSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xd1\x6f\xab\x36\x14\xc6\xdf\xfd\x57\x7c\x83\x97\x4d\x0a\x90\x65\xeb\xd5\xdd\xbd\xca\x43\x96\x76\x1b\x4a\x04\x52\x49\x56\x55\xea\x8b\x03\x07\x38\x0b\xd8\x9e\x6d\x4a\xf8\xef\x27\xd2\x54\x6a\x35\x3f\xd8\xb2\xbf\xcf\xc7\xdf\xf9\x39\xfc\x21\x39\xb1\x4a\x5c\x2b\x44\x88\xad\x36\x93\xe5\xa6\xf5\x58\x2d\x7f\xfe\x8a\x43\x4b\xd8\x0d\x27\xb2\x8a\x3c\x39\x6c\x06\xdf\x6a\xeb\x62\x11\x8a\x10\x7b\x2e\x49\x39\xaa\x30\xa8\x8a\x2c\x7c\x4b\xd8\x18\x59\xb6\xf4\xae\x2c\xf0\x37\x59\xc7\x5a\x61\x15\x2f\xf1\xe3\x6c\x08\x6e\x52\xf0\xd3\x77\x11\x62\xd2\x03\x7a\x39\x41\x69\x8f\xc1\x11\x7c\xcb\x0e\x35\x77\x04\xba\x94\x64\x3c\x58\xa1\xd4\xbd\xe9\x58\xaa\x92\x30\xb2\x6f\xaf\xcf\xdc\x8a\xc4\x22\xc4\xf3\xad\x84\x3e\x79\xc9\x0a\x12\xa5\x36\x13\x74\xfd\xd1\x07\xe9\xaf\x81\xe7\xd1\x7a\x6f\xbe\x25\xc9\x38\x8e\xb1\xbc\x86\x8d\xb5\x6d\x92\xee\xcd\xe8\x92\x7d\xba\x7d\xc8\x8a\x87\x68\x15\x2f\xaf\x57\x8e\xaa\x23\xe7\x60\xe9\xdf\x81\x2d\x55\x38\x4d\x90\xc6\x74\x5c\xca\x53\x47\xe8\xe4\x08\x6d\x21\x1b\x4b\x54\xc1\xeb\x39\xef\x68\xd9\xb3\x6a\x16\x70\xba\xf6\xa3\xb4\x24\x42\x54\xec\xbc\xe5\xd3\xe0\x3f\xc1\x7a\x4f\xc7\xee\x93\x41\x2b\x48\x85\x60\x53\x20\x2d\x02\xfc\xbe\x29\xd2\x62\x21\x42\x3c\xa5\x87\xbf\xf2\xe3\x01\x4f\x9b\xc7\xc7\x4d\x76\x48\x1f\x0a\xe4\x8f\xd8\xe6\xd9\x7d\x7a\x48\xf3\xac\x40\xfe\x07\x36\xd9\x33\x76\x69\x76\xbf\x00\xb1\x6f\xc9\x82\x2e\xc6\xce\xf9\xb5\x05\xcf\x18\xa9\x9a\x99\x15\x44\x9f\x02\xd4\xfa\x2d\x90\x33\x54\x72\xcd\x25\x3a\xa9\x9a\x41\x36\x84\x46\xbf\x92\x55\xac\x1a\x18\xb2\x3d\xbb\xf9\x33\x1d\xa4\xaa\x44\x88\x8e\x7b\xf6\xd2\x5f\x4f\xfe\xd7\x54\x2c\x04\x95\xad\x46\xf0\x27\x29\xb2\x72\x26\x02\x47\x5d\x1d\x39\x6e\x14\x55\x28\xc9\xfa\x40\xf4\xe7\x8a\x2d\x22\x83\x64\xde\x3b\xa1\x0d\x29\xe7\xba\x19\x37\xa2\xcb\xdd\xf2\x37\x44\xae\x95\xab\xbb\x2f\x88\x94\xae\xc8\x21\xaa\xe4\xe4\xf0\xcb\x97\x3b\x44\x8a\xc6\x33\x4d\xb0\x4e\x7e\x5b\x2d\x7f\xfd\x8a\x17\x11\x9d\x69\xd2\x83\xbf\x15\x4b\x8c\xe5\x57\xe9\x69\x47\x53\x3c\x1b\x5f\x44\xf4\x41\x9c\xe7\xb9\x55\xe9\x29\x2e\xad\x9f\x55\x37\x9c\xfe\x41\x90\x6c\xd7\xc7\x5d\x52\x1c\xd6\x4f\xd2\x8e\x5c\x9e\x5d\xcb\x96\x92\xfd\x7a\x4f\xb2\x67\xd5\x78\xad\x92\x7c\x9d\xdb\x26\x93\x3d\x25\xf9\x71\x9d\x1e\x70\x4f\x46\x5a\xdf\x93\xf2\xc9\x36\x5b\xd3\x45\xf6\xa6\xa3\xb8\xd4\x7d\xf0\x0e\xa1\xf0\xd2\x5e\x11\xa8\x86\xd5\x25\x10\xd7\x05\x51\x83\xa0\x92\xd4\x6b\x05\x5d\xd7\xdf\x03\xf1\x5f\x00\x00\x00\xff\xff\x0b\x85\xf1\xac\x89\x03\x00\x00") + +func testImagesEchoserverRunShBytes() ([]byte, error) { + return bindataRead( + _testImagesEchoserverRunSh, + "test/images/echoserver/run.sh", + ) +} + +func testImagesEchoserverRunSh() (*asset, error) { + bytes, err := testImagesEchoserverRunShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/echoserver/run.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesEchoserverTemplateLua = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\x7b\x73\xda\xc8\x96\xff\x9f\x4f\x71\x4a\xb3\x33\x16\x13\x19\x1b\x27\xd9\x4c\x32\xc3\x54\x61\x50\x6c\x55\x61\xf0\x4a\xb2\x73\x53\xc4\x4b\x09\xd1\x60\xc5\x42\xd2\xd5\xc3\x86\x71\x79\x3f\xfb\xd6\xe9\x87\xde\x60\xf0\x9d\x57\xa5\x46\x55\x09\x52\x77\x9f\x67\xff\xfa\xf4\x39\x2d\xf9\xf0\x10\xee\x89\x37\xf3\x43\x32\x83\x79\xe8\x2f\xe1\x36\x8e\x83\xe8\xc3\xd1\x51\x68\x3d\xb4\x16\x4e\x7c\x9b\x4c\x93\x88\x84\xb6\xef\xc5\xc4\x8b\x5b\xb6\xbf\x3c\x9a\x26\xde\xc2\x25\x47\x6e\x62\x1d\x86\x24\x8a\xd7\x87\x31\x59\x06\xae\x15\x93\xa3\xf6\xfc\xbd\xf5\xd6\x3e\x79\x33\xb7\xdf\xbd\x7d\x77\x32\x9b\xce\xdf\x4e\xc9\xf1\xf4\xfd\xfc\xa7\xf6\x7f\xff\x64\xdb\xaf\xdf\xff\xf4\x66\x7a\xfc\x7a\x76\xf2\xe6\xc8\x75\xa6\x47\x94\xf6\x48\xd0\xb6\xdc\xc4\x6a\x1c\x1e\x82\xef\xb9\x6b\x58\xfa\x33\x67\xee\xd8\x56\xec\xf8\xde\x07\x08\xc9\xd2\xbf\x27\x70\xc4\xf4\x3b\x37\x2f\x06\x13\x75\x68\x6a\xa6\xa6\x1a\x10\xfb\xe0\xf9\x31\x90\xc8\xb6\x02\x02\x4e\xac\x80\xe5\xcd\x60\xee\xac\x20\xbe\x25\x60\x05\x41\xe8\x07\xa1\x63\xc5\x04\x42\xb2\x20\xab\x56\xe3\xf0\x70\x3c\x6e\xf4\xfc\x60\x1d\x3a\x8b\xdb\x18\x64\xbb\x09\x27\xc7\xed\x37\x70\x88\x3f\xef\xa0\x6b\x05\x3e\x98\x96\x7b\x4f\xbc\xc8\xb2\x42\xa7\xd1\x75\x5d\xa0\x43\x23\x08\x49\x44\xc2\x7b\x32\x6b\x35\x1a\x3a\x99\x39\x51\x1c\x3a\xd3\x04\x55\xa4\x32\x93\x88\x80\xe3\x41\xe4\x27\xa1\x4d\x68\xcb\xd4\xf1\xac\x70\x0d\x73\x3f\x5c\x46\x0a\x3c\x38\xf1\x2d\xf8\x21\xfd\xf5\x93\xb8\x60\xa3\xd2\xb0\x42\x02\x01\x09\x97\x4e\x1c\x93\x19\x04\xa1\x7f\xef\xcc\xc8\x0c\xe2\x5b\x2b\xa6\x96\xcc\x7d\xd7\xf5\x1f\x1c\x6f\x01\xb6\xef\xcd\x1c\x24\x8a\x00\x89\x96\x24\xfe\xd0\x68\xfc\x08\x45\x8d\x22\xf0\xe7\x42\x15\xdb\x9f\x11\x58\x26\x51\x0c\x21\x89\x2d\xc7\x63\x9e\x99\xa2\x4b\xed\xd4\x0f\x9e\x1f\x3b\x36\x51\x20\xbe\x75\xa2\x06\x80\xeb\x44\x31\xb2\xc8\x0b\xf3\x66\x25\x4d\x66\x4e\x64\xbb\x96\xb3\x24\x61\xab\x4e\x03\xc7\xcb\x7b\x40\x68\x10\x84\xfe\x2c\xb1\xc9\x1f\xa0\x04\x70\xd3\x66\xbe\x9d\x2c\x89\x17\x5b\x62\x6a\x8e\xfc\xb0\x01\xe0\xc7\xb7\x24\x84\xa5\x15\x93\xd0\xb1\xdc\x28\xf3\x31\x9d\x18\x4a\x98\x53\x9f\x5a\x34\x24\x0e\x25\xc2\x4e\xcf\x5a\x12\x54\x06\xef\x1f\xfd\x70\x61\x79\xce\x6f\x54\xc2\x13\x78\x7e\x36\x84\x3a\xde\x89\x51\x7d\x5c\x32\x94\x9d\x1f\x46\xb0\xb4\xd6\x30\x25\x08\x92\x19\x62\x96\xae\xb8\x88\x20\x1e\x82\xd0\x5f\xfa\x31\x01\xe6\x98\x38\x82\x19\x09\x9d\x7b\xbe\x1a\x1b\x40\x9d\x01\x91\x3f\x8f\x1f\x70\xba\x05\x7a\xa2\x80\xd8\x08\x1f\x08\x42\x07\x41\x15\x22\x70\x3c\x06\xa1\x28\x62\x06\x98\xe7\x9a\x01\xc6\xe8\xa3\xf9\xa9\xab\xab\xa0\x19\x70\xa9\x8f\xae\xb5\xbe\xda\x87\xd3\xcf\x60\x9e\xab\xd0\x1b\x5d\x7e\xd6\xb5\xb3\x73\x13\xce\x47\x83\xbe\xaa\x1b\xd0\x1d\xf6\xa1\x37\x1a\x9a\xba\x76\x7a\x65\x8e\x74\x03\xa4\xae\x01\x9a\x21\x61\x47\xa3\x3b\xfc\x0c\xea\xbf\x2e\x75\xd5\x30\x60\xa4\x83\x76\x71\x39\xd0\xd4\x3e\x7c\xea\xea\x7a\x77\x88\xab\x51\x01\x6d\xd8\x1b\x5c\xf5\xb5\xe1\x99\x02\xa7\x57\x26\x0c\x47\x26\x0c\xb4\x0b\xcd\x54\xfb\x60\x8e\x14\x2a\x94\x93\x35\x32\x32\x18\x7d\x84\x0b\x55\xef\x9d\x77\x87\x66\xf7\x54\x1b\x68\xe6\x67\xaa\xc8\x47\xcd\x1c\xa2\xac\x8f\x23\x1d\xba\x70\xd9\xd5\x4d\xad\x77\x35\xe8\xea\x70\x79\xa5\x5f\x8e\x0c\x15\xba\xba\xda\xe8\x6b\x46\x6f\xd0\xd5\x2e\xd4\x7e\x0b\xb4\x21\x0c\x47\xa0\x5e\xab\x43\x13\x8c\xf3\xee\x60\x50\x6b\x25\xea\x5e\xb0\xf1\x54\x85\x81\xd6\x3d\x1d\xa8\x28\x89\x5a\xd9\xd7\x74\xb5\x67\xa2\x39\xd9\x5d\x4f\xeb\xab\x43\xb3\x3b\x50\xc0\xb8\x54\x7b\x1a\xde\xa8\xff\x52\x2f\x2e\x07\x5d\xfd\xb3\xc2\x79\x1a\xea\xff\x5c\x61\x68\xea\x0e\xa0\xdf\xbd\xe8\x9e\xa9\x46\x43\x7e\xc6\x25\x97\xfa\xa8\x77\xa5\xab\x17\xa8\xf3\xe8\x23\x18\x57\xa7\x86\xa9\x99\x57\xa6\x0a\x67\xa3\x51\x9f\x3a\xda\x50\xf5\x6b\xad\xa7\x1a\x3f\x37\x06\x23\x83\x7a\xeb\xca\x50\x15\xe8\x77\xcd\x2e\x15\x7c\xa9\x8f\x3e\x6a\xa6\xf1\x33\xde\x9f\x5e\x19\x1a\x75\x9a\x36\x34\x55\x5d\xbf\xba\x34\xb5\xd1\xb0\x09\xe7\xa3\x4f\xea\xb5\xaa\x43\xaf\x7b\x65\xa8\x7d\xea\xdd\xd1\x90\x9a\x6a\x9e\xab\x23\xfd\x33\x32\x45\x1f\x50\xe7\x2b\xf0\xe9\x5c\x35\xcf\x55\x1d\x1d\x4a\x3d\xd5\x45\x17\x18\xa6\xae\xf5\xcc\xfc\xb0\x91\x0e\xe6\x48\x37\x73\x36\xc2\x50\x3d\x1b\x68\x67\xea\xb0\xa7\x62\xef\x08\xb9\x7c\xd2\x0c\xb5\x09\x5d\x5d\x33\x70\x80\x36\x04\x14\xfb\xa9\xfb\x19\x46\x57\xd4\x64\x9c\xa3\x2b\x43\x65\xb7\x9a\xd1\x10\x88\x55\xe8\x4c\x82\xf6\x11\xba\xfd\x6b\x0d\xd5\xe6\x83\x2f\x47\x86\xa1\x71\x9c\x50\x97\xf5\xce\xb9\xbb\x31\xbc\xdf\xdc\x34\x1a\xae\x6f\x5b\x2e\x44\x24\x5e\x92\xd8\x8a\xad\xa9\x4b\xa0\x53\x78\xe4\x23\x5c\xdf\x9a\xe1\x9a\xf7\x16\xd0\xc9\x3d\xe4\x7a\xed\xdb\xc4\xbb\xe3\xcf\xb1\x9f\x8e\x15\xb7\x99\xa4\x39\xf1\xee\x99\x10\xbc\xe3\xed\x21\xf9\x77\xe2\x84\x28\x9c\xdf\xf1\x76\xdb\x0a\xe2\x24\x7b\xf2\x3d\xdb\x8a\x91\x2b\xaa\xd6\x62\x8f\xbc\xcf\x8a\x22\x12\x62\x1f\xbb\xe1\xad\x41\x48\xe6\xce\x8a\x3f\xe0\xda\x47\x11\x8e\xdf\xa2\xb7\x62\x8c\x6d\xb9\x2e\x74\xd8\xaf\x68\xbb\xb5\x22\xd1\xef\x07\xc4\x63\x54\x78\x97\x33\x99\xbb\x42\x18\xbd\x0e\x90\x39\xfe\xf0\x96\x59\xb2\x0c\xd0\x52\xea\x80\x16\x3e\xf1\x8e\xb9\xe3\xcd\xb2\x0e\x7c\xe2\x1d\x8b\x28\x99\x66\x1d\xf8\xc4\x3b\xa6\x6b\xaa\x39\xef\xc0\x27\xde\xe1\x25\xa9\xce\x05\xda\x8c\xd4\x5b\xac\xa0\x83\xff\xf3\xe7\xaf\x0e\x7a\xe9\xab\x23\x5c\x74\x6f\x85\x02\x07\x93\x6b\x55\x37\xb4\xd1\x10\x3a\xe9\xad\xe8\x51\x87\xd7\xd8\xaa\x0e\xaf\x45\xcb\x19\x3e\x9f\x09\xd2\x62\xb2\xd1\x81\xc7\x06\x00\xc0\x58\xfa\x41\xba\x81\x0e\x48\x3f\x58\xcb\xe0\x67\x49\xe1\x8d\xbf\xf0\x46\x37\xce\xda\x7e\xe5\x6d\x8b\xac\xed\x40\x3a\x60\x6d\xff\x4e\xfc\xdc\xc8\x03\x3e\xf2\xbb\xd7\xef\xb1\xf1\x49\xa8\xd0\x1b\xf5\xd5\x3a\x15\x1e\xc5\xf8\xf6\xc9\xeb\x8c\xcb\x53\xd6\xfa\x36\x6b\xfd\xe3\xd5\x65\x8d\x47\xa2\xf1\xcd\xbb\x9f\xa5\xcc\x84\xeb\xae\x3e\xb9\x3c\xef\x1a\xaa\x21\x5a\xfc\x3b\x05\x3c\xf2\x10\x5b\x53\x81\x50\x99\xaf\x10\x05\x24\xb6\x0c\x3c\xf2\x20\x35\x1b\xce\x9c\xe6\x77\xfe\x1d\xee\xb0\x5e\x46\x33\x4f\x3c\x1b\x77\x5f\xb9\x89\x59\x4d\x12\x7a\xf0\xf8\x84\xbb\x2a\xfe\x6b\xa4\xab\xcc\xbe\xe5\xcb\x35\x4c\x04\xb2\x44\xbe\x89\xe0\xa1\xcc\xe4\x63\x05\xda\x27\xcd\x46\x23\xcd\x44\x73\x78\x91\xda\xad\xf7\x52\xd6\x83\x1c\x09\x9a\xda\x81\xc7\xd4\x3a\xa1\x0a\x10\x0f\x15\x9f\xc9\xf7\x96\xdb\xa4\x0e\x71\xe6\x70\x6f\xb9\xd0\xe9\x80\xe7\xb8\xcc\x00\xae\x2c\x2a\x44\x55\xc5\x61\xbc\x8d\x0f\xa5\x5d\x7e\x08\x32\x7f\x96\xda\x12\x3e\x8a\x27\xec\x2e\x34\xf8\x9e\xd4\x6c\xe4\xac\x4e\xd5\x89\x43\x67\x29\x47\xcd\xbc\x08\x5c\x7a\x32\xfd\x2f\x52\x40\xfa\xdf\xef\xa3\x57\x92\x02\x92\xd4\x54\x40\xfa\x3e\x7a\xf5\x5f\xec\xa1\x96\x59\x18\xf8\x91\x7c\xef\x90\x07\x05\x38\xcb\x87\x5b\xc7\x25\x10\xc1\xaf\x70\x0c\x33\x9f\x36\xe1\xc5\x5d\x8f\x4b\x36\x99\x0a\x8a\x94\x88\x7b\xc5\xa6\x9a\x03\xb5\x83\xdd\x7f\x89\xf3\x0f\xc7\xf9\x87\xd5\xf1\xa9\x44\x9d\x97\x72\xc0\x2b\x42\x09\x70\x08\xed\xb4\x95\xb8\x11\x29\x0c\x99\x86\xc4\xba\xcb\xba\xb9\xb7\x4b\x5e\x8f\x6a\xcd\x65\xf5\xc4\xac\x68\xb1\x33\xa7\xe6\xb6\x69\x16\x9a\xb3\x0e\xb5\xe0\x3f\x4d\xa6\xf2\x97\x92\xc2\x9c\xf2\xa4\x86\xf2\x84\xff\x6c\xa0\xcc\x69\x3a\xb7\xdc\x88\x28\xdb\x0c\xce\x81\xab\x30\xae\xde\x72\xce\xef\xb8\x7e\xbe\x89\x35\x9b\x3b\x2e\x91\x03\x2b\xbe\x65\xe6\x8b\x20\x4f\x37\x53\xdc\x33\x68\x9f\x02\x52\x38\x95\x52\x07\xe1\x62\xa5\x43\xf2\x68\x47\xf4\x0b\xe1\xe9\x96\x87\xe5\x24\x2e\x64\xc7\x25\x1f\x50\x1a\x48\x3f\x5a\x12\x1d\x42\x9b\x6c\xd7\x8f\x88\x5c\x40\x2f\x27\xaa\xd5\x17\x77\x2c\x37\xb1\x72\xea\x72\xa2\xa2\x21\x34\xe1\xb6\xe2\xdb\x8d\x3c\xbc\xc5\xaa\x62\xf2\xbd\x15\x22\xda\xb2\x28\x36\xa6\xfb\xa8\xdc\xbc\x29\xf9\x45\xa1\xf7\x94\x57\x07\x98\x73\x28\x2d\xce\xfa\xbd\x15\xb6\x44\x1c\x99\x88\x61\x29\xac\x92\xa9\xcc\x18\xb4\x9b\x40\x81\x70\xc4\x70\x20\xdc\x9d\x0d\x38\x69\xa6\xae\x74\xe6\x99\x3c\x14\x91\x3e\xfc\x5f\x07\xa4\x1a\x04\x26\x53\x59\x0c\x51\xe0\x90\x63\x55\x08\xca\x69\x5e\x1c\xd8\x56\xe0\x30\x27\x34\xb3\x38\x24\xe8\x15\x9e\xca\xc8\x2c\x6b\x79\x84\x8c\xf0\xe0\xe8\x40\xa1\xfa\x3f\x15\xd6\x7e\x48\xa2\x56\x14\x5b\x71\x12\xa1\xfc\x93\xe3\xe3\x02\x54\xb0\x77\xea\xcf\xd6\x15\xd0\x72\x99\xbe\x8f\xa0\x49\xbd\x2a\x17\xdc\x4a\x7b\x69\x68\x0c\x5b\xa2\x0a\xa4\x8d\x6c\xde\x59\xd2\x94\xf3\x06\x76\x55\x3d\xc1\x65\x64\x03\x4a\x1e\x28\x03\x4b\x58\xce\x06\x4b\x47\x12\xb3\x1a\x9e\x4a\x68\xe3\x41\x12\x17\xc9\x62\x55\x9c\x9d\x0c\x5a\xe9\x06\x9f\xc6\x39\x12\xe7\x9e\xd8\xf6\xa0\x94\x56\x3d\xcb\x00\x37\x8f\xb0\x6c\x9b\x44\xd1\x36\x1e\x62\x3d\x6e\x1e\x71\x4b\xac\x19\x09\x27\x73\xc7\x8d\x49\x58\x3b\x02\xa7\x4d\xf4\xd7\xf3\x70\xfd\x45\xc5\x96\x74\xc0\x53\x7a\x97\x6e\xb7\x41\xe8\xd0\x18\xe1\x2d\x56\xfc\x9e\x97\xba\xa4\x3a\x96\x66\xae\x3c\x75\xc5\xac\x50\x0c\x60\xb3\x4e\x17\xa2\x22\xc0\xaa\xd0\xfc\x52\x61\xe9\x30\xe7\x6f\xfb\xde\xdc\x59\xb4\xd8\x70\xb9\xa9\xd0\x46\x4a\x84\x37\x02\xd5\xad\x8c\xc3\x62\xd5\x62\x5c\xf0\x6e\x41\xe2\x09\x4b\xae\x73\x48\xaf\x09\x18\xd5\xe0\x9e\x25\x29\x59\xfa\x90\x83\x34\xcd\x38\x9a\xd5\x50\x9e\x0f\xfd\x15\x7f\xed\xe0\x22\x37\xb1\x0a\xcb\xcb\x99\xe7\xd2\xe4\x0e\x48\x83\xc4\x82\xb7\xad\x76\x29\x8a\xe4\x82\xf7\x0a\x05\x3d\xc2\x64\xe2\x78\x33\xb2\xca\x67\x64\xb1\x02\x77\xcd\xda\x7d\xa9\xc5\x29\xc7\x77\x37\x38\x93\x71\x6a\x26\x6f\x98\x9c\x8d\xef\x6e\xf2\xb6\xe6\x40\xe1\xcc\x69\x8a\x5f\xf1\x5f\x5a\xa4\xe5\x55\xc0\xed\xb5\xa8\x42\x4e\x0d\x56\x49\xc9\x48\xc8\xf7\x61\xcf\x71\xf9\x7f\xf9\x1a\x51\x7e\xcc\x27\x8b\xe9\xed\x93\x22\x1c\xd0\x6c\x16\x65\xe4\x43\x64\x65\x6f\xde\x43\xcf\x6c\x5b\x4a\xeb\x3e\x39\x2b\x4e\x19\x51\x95\x8a\x57\x9e\x32\xd2\xed\x6d\xc8\x26\x5f\x21\xb3\xcd\x36\xd6\x81\xf1\x8f\x86\x88\x3a\xbc\xde\x0c\x92\x1d\x9d\xfc\x47\x02\x21\xbf\x6f\xd1\xb0\x9f\xe5\xe3\xf9\x2a\x02\x27\x92\x2d\xf8\x34\x75\x62\x8f\xb8\x79\xa7\xd5\x42\x39\x38\xa4\xf5\x41\x69\x2f\xe2\xe3\x36\x09\xf4\x93\x38\x48\x62\x39\x9f\xc6\xf2\x9a\xc4\x0f\xf9\x7d\xe2\x16\x0b\x14\x49\xca\x87\x06\xac\xfe\xe5\x88\x6d\x93\x82\xbd\x54\x2c\x68\xca\xb2\xe4\x66\x65\xc7\x14\x87\x26\xa8\xc8\x06\x4d\x59\xde\x8d\xd5\x89\xdd\xac\x13\xce\x18\x54\x73\x1b\xbb\xa0\x4c\x5a\xe1\x8c\x9f\x1e\xbf\x48\xbf\x1e\xfd\x72\xf0\xc3\x8d\xa4\x14\x2b\xe9\x62\x46\x53\x21\xfc\x22\xfd\xca\xa9\x0a\x47\x00\xcd\xba\x44\xba\xc6\xcf\x1b\xcc\xf3\xc8\x03\x47\x9a\x6b\xad\xfd\x24\x66\xec\x38\x0e\x59\x87\x84\x3f\xf0\x60\x45\x34\x95\x4e\x0f\xa9\xe7\xb8\x18\x36\xb2\x69\x49\xf9\x7c\x35\x24\xde\x8c\xe0\x6e\xe7\x2f\x03\x96\x3e\xa6\x94\xa2\x2b\xc3\x22\x1b\x93\xe6\x93\x94\x5f\xc5\xbd\x74\x0a\xb8\x2c\x56\x85\x22\x1a\x37\x97\x2a\xa5\xd5\xc3\xa4\xe6\xd7\x64\x44\xdc\x79\xb6\x7c\x36\x44\xc0\x2c\x88\x88\x3b\x84\x2b\x71\xe7\x95\xf1\xbc\xbf\x35\x75\x7d\xfb\x2e\xca\x08\x44\x83\x1f\x62\xbd\xbe\x89\x8a\x7a\xbc\x23\xdc\xc5\xe2\x85\xbc\x59\x37\xea\x86\x3d\x45\x71\xa2\x54\x52\x4e\xb0\x1f\x82\x24\x6d\x8a\xbf\x8c\xee\x03\x73\xa0\x5c\xd9\x6e\x30\x06\x61\x80\xcd\x9d\x4c\x16\x5c\xfc\xbc\x67\xbf\x35\x77\x6e\x72\x64\x1a\x7b\xf2\x0b\xaf\xe0\xc9\xe6\xb3\x75\xf5\xb7\x8c\xea\xb4\xa8\xa1\x40\x63\x4e\xda\x60\xca\xb7\x81\xbb\xf4\x4c\x81\x8d\xe6\xb0\xa8\x1f\x5f\xc6\xc7\x86\x93\xa4\x17\xc2\xa3\xe8\x7a\x16\xd7\x4b\xd0\x48\xb7\x9d\xdd\x1d\x5f\xb2\x8f\x79\xa3\xc4\x6b\xe3\x3e\x15\x84\x24\x4f\xa8\xf0\xc3\x0c\x94\x19\xe4\x77\x1a\x91\x6b\xcd\x92\x65\x20\x97\xf7\x14\x26\x93\x53\x61\x5a\x43\x0f\x9c\xd2\x6d\x1d\x59\xd6\x55\x17\x35\x07\x4c\x0f\xe2\x80\x09\xc4\xe9\x10\xad\x70\x64\x2a\xbe\xd4\x93\x3f\x37\x2a\x67\x49\xf4\x5d\xce\xa6\xa4\xac\x60\xef\x1d\x59\x2b\x10\xb8\x96\xe3\xbd\x70\x8b\xde\xc8\xae\x95\x9d\x95\xdd\x91\x35\xdd\x4c\x3d\xff\x90\x96\x79\xa5\xfd\x54\x6c\x01\x22\xa7\xcd\x1c\x1c\x58\x61\x94\xce\x0c\xe5\xda\x54\x98\x77\x0b\x66\x53\xfe\xf4\x7f\x3f\x84\x34\x38\x66\x67\xe3\x85\xcc\x80\x36\x08\xcd\xe8\xc3\xf8\x8e\xac\x6f\x0a\x79\x55\xd6\xac\x14\xd3\xd0\x42\xc5\xb2\x9b\xc2\x79\x51\x08\xe4\x34\xdf\xe5\x72\x19\xb0\x2b\x67\x96\xb4\xb8\x61\xa6\x6e\xc2\x6e\x45\xd6\xcb\x66\xb0\xca\xa7\x55\x3c\xe6\xa4\x8d\xc5\x29\xe3\x21\xa8\x50\x71\x97\xea\x0f\x67\x4e\xdf\x7a\x71\xc6\x6d\x85\x9f\x19\x9f\xbc\x2b\x78\x9a\x32\xaa\x3f\x02\xfb\x0a\x1d\x38\xc9\xcf\x24\x16\x59\xe3\x71\x83\x87\x8c\x4e\xab\xd5\xe2\x81\xb2\x74\xbc\xe9\x78\xb6\x9b\xcc\x88\x7c\x8f\xc9\x75\x25\x77\x4d\x01\xdb\x94\x6d\x7a\xf8\xce\xc3\x14\x95\xce\xdf\x8d\x4d\x26\x0a\x8b\xc4\x0a\x0b\x97\x9d\xc7\x27\xa5\x10\x9a\x6f\x6e\x78\x31\xc6\x08\x1c\x85\x1e\xd3\xb7\x15\xfa\x6a\x50\xf8\xfe\x51\xa2\x76\x23\x80\x8a\x6f\x12\x2a\x6f\x11\x62\x05\x82\xe2\x8b\x04\x78\xc5\x8e\xda\x5f\x41\xbb\xc9\x7e\x4f\x0a\x79\x2a\x5d\x4f\x8f\x35\x89\x29\x63\x48\xe8\x81\x73\xa6\xca\xd3\x93\xa4\x40\x90\xd7\x25\xc7\x8c\x54\xb9\x64\x9c\x7e\x53\x00\x67\xba\xf6\x3d\x41\x89\x8f\x03\xbf\xd0\x23\xfe\x87\x7a\x7e\x78\xd9\xe3\xaf\xf4\xc5\xd9\x64\x32\x19\x7f\x37\x99\x4c\x5e\xb5\x6f\x3a\xe3\xce\xf8\x8b\x57\x4d\x0c\xf9\xf0\x57\xed\x9b\x82\x67\x1c\xfe\x02\x02\xe5\x54\xb5\x10\x44\x27\x54\xca\x4d\xe7\x66\x13\xe7\xaf\x9d\xaf\xaf\x5e\x57\x7a\xf2\x95\x52\xce\xb0\xdf\x36\x1b\xe4\xa0\x72\x55\x3e\xe5\xc4\x6a\x9b\xfd\xe5\x9a\xf0\x19\x57\xb0\xb7\x5d\xa9\x3f\x02\x05\x08\x7d\x21\xf3\x9c\x33\x9a\xfb\xb9\x02\xaf\x48\xa1\xf6\x11\x06\x46\x52\x00\x61\x6a\x6a\xc9\x65\xe5\xb3\xa1\x14\xac\x3f\xee\x0c\xd6\x1f\xff\x01\x6b\xf1\xfa\x3b\x82\x95\x1f\x01\x7c\xa3\x60\xfd\x7e\x67\xb0\x7e\xff\x67\x80\x75\xdb\x9c\xee\x04\x65\xd8\x1f\xce\xf0\x52\x48\xc3\xae\xb0\x86\xad\xf3\x59\x07\x6f\xd8\x1f\xc4\xfc\x23\x1a\x8e\x8c\x2a\x24\x20\x7b\x4b\xc6\x8f\x46\x15\xf0\xf8\x3b\x6a\xaf\x06\x05\xf9\x0b\xb9\x7a\x88\xb7\xbd\x0c\xe0\x67\x57\xd0\x29\x7c\x6b\x40\x97\xc5\x96\x19\xee\x40\xf8\x27\x4d\x6f\xf8\x97\x4c\x2b\x57\x7f\xff\x80\x41\x0d\x90\xb6\xc5\x8b\xfa\x49\xe7\xf1\xc2\x63\x1f\x35\x54\xfd\xba\x73\xac\x90\x77\x8e\x15\xcd\x7f\x36\xb6\xe2\xf5\x17\x6d\x6c\xbc\x5e\x28\x58\x94\x22\x6d\x0b\xc5\x4a\xcc\xe7\x5c\x01\x49\x91\x14\x38\xa9\x9b\xcb\x9c\xca\xab\xfd\x97\xac\x28\x5e\xc6\x9d\xf1\x0e\x0b\x37\x5d\x2e\x73\x5a\x6a\xac\xb6\xac\x15\x28\x4f\x8a\xb2\x9d\xff\xeb\x32\xff\x15\x2d\x46\xb6\x33\x7f\xb3\x7d\xf7\x06\x3e\xe7\x6f\xeb\x43\xc3\xa6\xf9\x82\xdf\xcf\x57\x35\x27\x76\xf9\x81\xa9\x73\x9e\x35\x61\xbf\xe8\xf6\xbb\x26\x27\xe3\x9d\x03\xce\xcd\x3f\x01\xa7\x78\xfd\x8d\x32\x69\x01\xde\x6f\x34\x83\x3e\xdc\x19\xa4\x87\x2f\x06\xe9\x4a\x81\x75\x91\x59\xe1\x53\x4c\xc2\x4f\x4f\xa8\x25\x9b\x22\xf5\xf6\x28\xbd\xdf\x62\x80\x67\x71\x03\x7b\x65\xec\xf0\xb2\xb4\x0e\xfe\x93\xcc\x1d\xf6\x49\xf3\x60\x2b\x9e\x60\x4b\x40\x84\x8d\x8b\x08\x9e\xdb\x09\x70\xca\xd7\x1b\xb3\x6e\xbc\x70\x9f\x5e\x15\x3e\x99\xad\x88\xce\x67\xfc\x6b\x05\xd6\x3b\x66\xfc\xbb\xc9\xdf\x66\x34\xff\x7b\x80\xbd\x57\x36\xd7\x7a\x4a\xf5\xbc\x27\xe1\xd4\x8a\x9d\x25\xfd\x7a\x98\x35\x85\xd6\xc3\x0e\xba\xef\x87\x3d\x78\x39\xfe\xe0\x3f\xc5\x20\xec\x8b\x43\x78\x16\x8b\xf0\xcc\xd4\xc0\x66\x73\xf7\x5e\x6c\x3c\xe6\xac\xfe\xbc\x85\xb6\x6d\xc9\x40\x19\xf2\x2b\x54\x6d\x77\xc8\xc3\x4e\x8b\x0a\x76\xf0\xef\xbe\xc5\x6f\x4e\xfb\x5d\x8a\x60\x71\xfd\xee\xa8\xdd\x52\x14\xe7\x09\xff\x1a\xb4\x1e\xb0\x77\x13\x63\xe9\x60\x37\x98\x4e\x77\x03\xe5\x81\x94\x66\x29\xe3\xce\xf8\x79\xde\xaf\x5f\xba\x04\xde\xec\xb3\x04\xea\x6b\x07\x78\xc6\x5b\x3c\xb7\x59\xb3\x6a\x7f\xbd\x73\xf2\xbe\x73\xbe\xf3\xdd\xce\xf9\xce\x77\xff\x24\xe5\xc5\xeb\x2f\x4a\xca\xc9\xee\x67\x82\x44\x01\xb2\x63\xb8\x14\x5c\xf7\x3b\x13\x4c\x53\x6f\x0a\xcf\xaa\xbe\x5b\x61\x98\xbb\x8f\x4a\x58\x7b\x94\xd2\x77\x89\x19\xdc\x04\x41\x54\x9c\xcc\xdc\x47\x93\xf4\xaf\x77\xea\xfe\xba\x62\x07\xcc\x64\x38\x29\x34\xd5\xa2\x20\x9b\x79\xa1\x93\x10\x50\xf8\x2c\x8c\xea\x23\xea\x25\xfe\xc9\x4e\xf1\x23\x14\x34\xa1\x93\xff\xab\x52\x79\x32\x99\x34\xf9\x3b\xdb\x0e\xfb\x79\x52\x1e\xf9\x17\xba\x1d\xfe\xce\xf7\xa9\x49\xff\x72\xa1\x42\xc7\x14\xcc\xfe\x18\x07\xdb\xed\x8d\xdf\x90\xd4\x7d\xcf\xf2\x3b\x7c\x58\xf1\x2c\x5b\xf1\x96\xbe\xfc\x82\x9b\x7e\x1c\x5f\xff\x91\x4a\x81\x5e\xce\x3e\x8a\xa6\x96\x95\xf8\xfc\x7f\x00\x00\x00\xff\xff\x47\xf1\xfa\x92\x30\x43\x00\x00") + +func testImagesEchoserverTemplateLuaBytes() ([]byte, error) { + return bindataRead( + _testImagesEchoserverTemplateLua, + "test/images/echoserver/template.lua", + ) +} + +func testImagesEchoserverTemplateLua() (*asset, error) { + bytes, err := testImagesEchoserverTemplateLuaBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/echoserver/template.lua", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesImageUtilSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\x7d\x73\xdb\x36\x93\xff\x5f\x9f\x62\x1f\x5a\x57\xdb\x39\x93\xb4\xd3\x36\x49\x9d\x6a\xa6\x8a\xad\x3a\x9e\x38\x56\x1f\x49\x69\xd2\x27\xc9\x69\x20\x72\x25\xa2\x26\x09\x16\x00\x2d\xab\xb6\xf2\xd9\x6f\x16\x00\x29\xea\x25\x69\x9f\x5e\xe7\x66\x6e\xe6\x32\x9d\x5a\x22\xf1\xb2\xd8\x97\xdf\x6f\x77\xa1\xbd\x7f\x84\xa5\x92\xe1\x84\xe7\x21\xe6\xb7\x30\x61\x2a\x69\xb5\xf6\xe0\x4c\x14\x0b\xc9\x67\x89\x86\xc7\xc7\x27\x4f\x61\x94\x20\xbc\x2a\x27\x28\x73\xd4\xa8\xa0\x5b\xea\x44\x48\x15\xb4\xf6\x5a\x7b\x70\xc5\x23\xcc\x15\xc6\x50\xe6\x31\x4a\xd0\x09\x42\xb7\x60\x51\x82\xd5\x9b\x23\xf8\x19\xa5\xe2\x22\x87\xc7\xc1\x31\x1c\xd0\x00\xcf\xbd\xf2\x0e\x9f\xb7\xf6\x60\x21\x4a\xc8\xd8\x02\x72\xa1\xa1\x54\x08\x3a\xe1\x0a\xa6\x3c\x45\xc0\xbb\x08\x0b\x0d\x3c\x87\x48\x64\x45\xca\x59\x1e\x21\xcc\xb9\x4e\xcc\x36\x6e\x91\xa0\xb5\x07\xbf\xb8\x25\xc4\x44\x33\x9e\x03\x83\x48\x14\x0b\x10\xd3\xe6\x38\x60\xda\x08\x4c\xff\x12\xad\x8b\xd3\x30\x9c\xcf\xe7\x01\x33\xc2\x06\x42\xce\xc2\xd4\x0e\x54\xe1\xd5\xe5\x59\xef\x7a\xd8\xf3\x1f\x07\xc7\x66\xca\x9b\x3c\x45\xa5\x40\xe2\x6f\x25\x97\x18\xc3\x64\x01\xac\x28\x52\x1e\xb1\x49\x8a\x90\xb2\x39\x08\x09\x6c\x26\x11\x63\xd0\x82\xe4\x9d\x4b\xae\x79\x3e\x3b\x02\x25\xa6\x7a\xce\x24\xb6\xf6\x20\xe6\x4a\x4b\x3e\x29\xf5\x9a\xb2\x2a\xe9\xb8\x5a\x1b\x20\x72\x60\x39\x78\xdd\x21\x5c\x0e\x3d\x78\xd1\x1d\x5e\x0e\x8f\x5a\x7b\xf0\xf6\x72\xf4\xb2\xff\x66\x04\x6f\xbb\x83\x41\xf7\x7a\x74\xd9\x1b\x42\x7f\x00\x67\xfd\xeb\xf3\xcb\xd1\x65\xff\x7a\x08\xfd\x1f\xa1\x7b\xfd\x0b\xbc\xba\xbc\x3e\x3f\x02\xe4\x3a\x41\x09\x78\x57\x48\x92\x5f\x48\xe0\xa4\x46\x8c\x49\x67\x43\xc4\x35\x01\xa6\xc2\x0a\xa4\x0a\x8c\xf8\x94\x47\x90\xb2\x7c\x56\xb2\x19\xc2\x4c\xdc\xa2\xcc\x79\x3e\x83\x02\x65\xc6\x15\x19\x53\x01\xcb\xe3\xd6\x1e\xa4\x3c\xe3\x9a\x69\xf3\x64\xeb\x50\x41\xab\xa5\x50\x83\x2f\x00\xa5\xc4\x3b\xae\xab\xaf\xb9\x28\x73\x85\xf5\xd7\x82\x17\x38\x65\x3c\x6d\xb5\x46\xdd\xe1\xab\x4e\xfb\xa4\xf5\xf6\x65\x77\xd4\x69\x3f\xb6\xbe\x98\xe7\x18\x91\x36\x49\xb7\x0c\x06\x98\x09\x8d\x70\x2e\xa2\x1b\x94\x95\x4d\x14\x44\x28\x35\x89\xcd\xc8\x43\xe9\x2c\xac\xd4\x09\xe6\x9a\x9e\x70\x91\x1f\xc1\x3c\xe1\x51\x02\x11\xcb\x61\x42\x87\x2d\x8d\xf8\x4c\x5b\x77\x2b\x98\x4e\x02\x78\xb1\x80\x18\xa7\xac\x4c\xf5\x11\x1d\x63\xb1\x36\x9a\xcc\x4a\x67\x6b\xdf\xbf\xec\xbf\xee\x2d\x61\x2a\xd2\x18\x65\x00\x6f\x71\x5f\x92\xab\x16\x2b\x21\xa7\xdc\x2c\x9e\xa0\x44\xf0\x82\xd8\x48\xea\xb7\xef\x85\x1a\xdf\xda\x50\x58\x7a\x6e\xba\xaa\xc4\x12\x39\x79\xae\x32\x3b\xe4\x18\xa1\x52\x4c\x2e\xd6\x0e\x15\xb4\xce\xfb\x67\xaf\x7a\x83\xf1\x59\x6f\x30\x1a\xbf\xe8\x0e\x7b\xe3\x9f\xba\xa3\x97\x1d\xaf\x7d\xbf\xf3\xc5\xa9\xef\x24\x5d\x7a\xad\xd6\xab\x37\x2f\x7a\xe3\x41\xbf\x3f\xea\x78\xed\x83\x28\x06\xaf\x7d\x10\x73\x99\xb3\x0c\xc1\x6b\xdf\xbf\xe8\x0e\x5f\x8e\x87\xfd\x37\x83\xb3\xde\xfb\xe3\x8f\x4b\xef\x30\x0c\x82\x30\x08\x3c\xf8\xea\x2b\x28\xe6\x31\xf8\x3f\x1d\x7a\x2d\x25\x4a\x19\x99\xe1\xf5\x62\xcb\x30\x61\xd1\x4d\x98\xf2\x49\x98\x8a\xd9\x8c\xe7\xb3\x40\x25\x7f\x34\xb2\xd4\x3c\x35\xc3\x5a\x7b\xf0\x9a\x15\x05\xe9\x4c\x4c\x61\x26\xa0\x3b\x38\x7b\x69\x6c\x1c\xe9\x92\xa5\xc0\x64\x94\x70\x8d\x91\x2e\xc9\xbe\x2a\xe1\x45\x81\x31\x14\x4c\x6a\x1a\x9f\x95\xa9\xe6\x34\x24\xfc\x0d\xb3\xd2\x2f\x15\x4a\x5f\x91\x27\x46\x50\x48\xf1\x2b\x46\xba\x15\x63\x94\x32\x89\xe0\x77\xe1\x9f\xbd\xd7\x6f\x68\xf9\x61\xe7\x00\xde\x7b\x2c\x8b\x9f\x7c\xe3\x7d\xec\x78\x77\xcf\x9e\x8c\x9f\x7c\xe3\xd1\x23\x99\xd1\x03\xfa\x63\xbf\xd9\x01\x8c\x76\xb0\x23\x8a\x22\x7a\xf2\x4d\x8a\xf4\xb4\xfa\x08\xef\x3d\xf5\xf5\x77\xc7\x77\xf4\xcc\x7e\x80\x43\x3a\xd6\x00\x75\x29\x73\x05\x29\x57\x46\x56\x96\xa6\xa0\xca\xa2\x10\x92\x42\x7b\xfd\x5c\x53\x29\x32\x8a\xef\xde\xe5\xeb\xee\x45\xcf\xe0\x5e\x8b\xe6\xf5\x55\x57\x46\x89\x3a\x38\x84\xfb\x16\x00\xcf\xd8\x0c\x29\x30\x00\xa2\x52\x83\x1f\x83\xd7\xf1\xc0\x9f\xc2\x09\xa9\xd9\xbc\x5d\x7a\x61\xbd\x4c\x6b\xd9\x6a\xa9\x22\xe5\x6e\x15\xb7\xc8\xda\x32\x00\x42\x8d\x49\x14\x13\x66\xe6\xe5\x14\xde\xbf\x87\xb6\x7b\x0c\x9d\x4f\x10\x3c\x0a\xcd\x7f\xf0\xf1\xe3\x73\xf2\xcc\xdc\x8c\x03\xd8\x33\x01\xf6\x96\xe7\xb1\x98\xab\x23\x98\x23\x24\xec\x16\xc9\x74\xee\x94\x30\x11\x3a\x81\xab\xd1\x90\x50\x02\x86\xdd\x33\x88\x12\x96\xe7\x98\x2a\x42\x44\x98\x9b\x90\x99\x94\x3c\x8d\xc9\xfa\xc6\x94\x45\x8a\xd5\x8a\x56\x4c\x15\xd4\xbb\x51\x50\x4c\x85\xcc\x98\x76\x28\xc5\x15\x44\xcc\x80\xe6\x29\xf4\x87\x21\x59\x36\xec\x0f\xc7\x3f\xf7\x06\xc3\xcb\xfe\x75\x35\x51\xa8\x31\x79\x78\xa7\x7d\x80\x51\x22\xc0\xab\x8e\xe6\xc1\x43\xad\xc5\xd0\x6a\xf1\xd0\x4d\xb1\x0a\xf9\xc3\xf1\x8f\x0f\x57\x5b\xb8\x90\xfe\x13\xb3\xbe\xae\x66\xa9\x72\x3a\xe5\x77\x1d\x33\x94\x24\xf4\xdb\x34\xc1\x6f\xaf\x56\xf3\x5a\xf5\xe1\xa3\x52\x4a\xcc\x75\xba\x38\x82\x8b\xb3\x1e\xc4\x02\x95\xa1\x4a\xa3\xf2\x97\x8b\x02\xa5\xff\x73\xa5\xf7\x0a\xe5\x32\x64\x06\x4b\x0c\xbc\x21\x28\x8a\xf3\x5c\xc4\x48\x80\x46\x73\x27\x48\x4c\x6b\xc8\xca\x58\xa1\xde\xac\x36\x85\x93\x43\x91\xfb\x6e\x98\x05\xde\x9a\x3d\x38\x61\xd7\xa2\x36\x7e\x7b\xd0\x7b\xdd\x1f\xf5\xc6\x0e\x8b\xde\x0c\xae\xc6\x8d\xf3\xc0\x9b\xc1\x95\x22\x94\x9b\xf2\x59\x29\x89\x80\xaa\x1d\x47\xfd\xf3\xfe\x41\x94\xb2\x32\xe6\xe5\xe4\xf0\x14\x04\x71\xfc\xc6\xb1\x20\x61\x0a\x26\x88\x39\xb0\x38\xb6\x62\x5f\x9c\xf5\x8e\x40\xe2\x2d\x4a\x87\xe0\x5a\xc0\xaf\xa5\xd2\x3b\xe4\xa8\xf6\x92\x86\x38\xc6\x16\x8e\xc7\xa5\x4c\xad\x77\x78\x5f\x14\xdc\x73\x93\xb7\x06\x91\xbd\x6f\x59\x0a\xd6\xe8\x1f\xda\xf7\xed\xfb\xdd\x1b\x2c\x4f\xfd\xa5\x67\x2d\x8f\xe9\x67\x62\x6c\x33\xc0\xfe\x17\x3c\x77\xb7\x0f\x7a\x4e\x4e\x85\x6e\x98\x5d\x8f\x12\xc0\x75\x8c\xaa\xd3\x85\x0a\x7d\xac\x77\x90\x57\x90\x83\x15\x52\x14\x28\xd3\x85\x0b\x5b\x8d\x71\x00\x3d\x43\x91\x18\x03\xe6\x5a\x72\x34\x26\x53\x9a\xe0\xdc\xa4\x74\xfb\x42\x85\x24\xc2\xfe\x91\xe3\xdb\x7d\xc3\x98\xf4\x68\xb9\x0f\x3c\x57\x1a\x59\x1c\x54\xf6\xa0\x6c\x02\x2c\x8e\x4d\x39\xc1\xdd\x0a\x75\x27\x4c\xa1\x15\x26\x77\x09\x99\xf1\x75\x9e\xbb\x9c\xa1\x16\x9f\xe5\x0b\x98\xf1\x5b\x72\xab\x06\x24\xb7\x66\xa8\x5f\x30\x85\x97\xb4\x84\x43\xce\x1a\x2a\x69\xc7\x99\xc4\x82\x50\xb7\x12\xae\xe3\x35\x74\x53\xe9\xbb\x03\xfe\xf4\xb1\x95\x6b\x64\xf2\xd9\x32\x8f\x28\x0f\x81\x39\x4f\x53\x1b\x74\xa0\x51\x69\xa7\x36\x23\x4e\x9a\x1a\x8d\xae\xf1\x43\x6b\x0f\x32\xca\x62\x44\x6e\x8f\xb0\x6e\x85\x00\x2e\x6d\x52\xc2\x26\x0a\x29\x70\xc4\x74\x63\x04\x25\x8d\x5c\x37\x77\x6d\x6e\xb5\x4e\x4a\x96\xaf\x7c\x30\xf4\x78\x04\x4c\x66\x34\xdb\x70\xe1\x11\x38\xce\x3b\x02\x43\x74\x2d\xb3\xd6\x36\x39\x59\xff\xf6\xa7\xb5\x5b\xac\x38\x69\xdd\xc7\x9d\xf2\x54\xa7\x7d\xd0\x60\x3b\xf0\xda\x66\x9a\x89\x97\xda\x0b\xf7\xa0\x90\x58\x60\x1e\x43\xca\xf3\xf2\x2e\x24\x93\x92\xf4\x35\xa9\x03\xd7\x98\x39\xbe\x68\x2c\x5c\x48\x9e\xeb\x29\xec\xdb\x59\xff\xa1\x3e\xe4\xfb\x64\xb7\x7f\xd4\xf3\xde\x3f\xfa\x68\x43\x73\xca\x09\x6f\x6f\xca\x09\x9e\x9e\x52\x7e\x72\x7a\x8a\xb9\x2a\x25\xfa\xb3\xbc\xf4\x15\xc6\xf4\x96\xf4\x56\xc5\x2d\xcf\xa1\xb6\xbf\x5a\x3e\x87\x58\x98\xbd\x1b\x94\xdb\xa0\xe5\xa6\xaf\x78\x0d\xa6\xb5\x8f\x0d\x44\x78\xd0\xe9\x80\x37\xb7\x38\x6b\xd2\x2e\xff\x77\x7a\xbf\x85\x3a\x4b\x6f\x9b\x8b\x2f\xa7\x35\x08\xb3\x1a\xab\x2b\x49\x29\xd6\x16\x30\x29\x35\xe4\x62\x23\x75\x3e\x67\x98\x89\xdc\x9c\x8b\xeb\xa3\x7a\xb9\x39\x82\x4a\x44\x99\xc6\xa0\x6e\x78\x41\xaf\x2c\x65\x43\x2c\xf2\x7d\x5d\x33\xbd\x75\x26\x0a\xa1\x09\xcf\x99\x89\x67\xbb\x52\xb0\x86\x1c\x67\x8e\x70\xac\xc3\x27\xe8\xfc\x7d\xbf\xd2\xce\xbe\x99\xb5\x52\x50\xb0\x8d\xb4\x6b\x3c\xe2\x44\x9b\x20\x28\xd4\x47\x55\xde\x6c\xf2\xee\x04\x89\x65\x6c\x91\x50\xa9\xc1\x62\x31\xc4\xe6\xa8\x35\x78\xd0\x2c\x9e\x97\x58\xc1\x47\x6b\x25\xef\x8b\x2a\x29\x59\xc5\x65\x8d\x70\x2e\xd3\x38\x6d\x8a\x1b\x04\x8e\xaa\xf7\xe0\x4c\x22\xd3\x64\x03\x8d\x59\x21\x24\xe5\xef\x31\x97\x18\x69\x21\x0d\x0e\x02\xb1\xd5\x62\x2d\xbc\x4d\x7a\x64\x6a\xd5\x95\x6a\x48\x38\xcc\xb5\x5b\x94\x06\x6c\x2a\xcf\xa4\x8c\x3b\x36\x31\x53\xb2\x9b\x98\x4b\xf0\x8b\xf5\xf4\xdb\x0b\xc7\x3a\x2b\xcc\x00\x9a\x38\x8e\xb9\xec\xb4\x0f\xb2\x1b\xfa\x62\xd8\x61\x7b\x70\x48\xf0\xe4\x5b\xce\xf7\x8d\x08\xc1\x3b\xf3\xcf\x32\x48\x33\x58\xb4\x64\xc5\x98\xc5\x31\x78\x32\x03\x5f\x52\xf4\x57\xbb\x2c\x3d\xe8\xbd\xbb\x1c\x59\x1d\x45\x05\xf8\xb2\x99\xb0\x3e\xa2\x2f\xab\xa1\x8d\xe0\x68\x42\xc8\x6b\x76\x83\x06\xb4\xb7\x5c\x3f\x63\x37\x48\xfe\x67\xf1\x4d\xd3\xb7\x88\x32\x7e\x97\x73\x93\xca\x0a\x89\xa6\x46\x54\x9c\x0a\x43\x62\x04\x8c\xd7\xd2\xd8\x3a\x0d\xa5\xd1\xce\x5f\xcc\xc6\x6e\x94\xd9\xc3\x3f\x6b\x06\x34\xed\xd8\x1f\x76\xd6\x02\x98\x3c\x83\x9e\xd8\x30\x87\x51\x77\x70\xd1\xa3\x6a\x6b\xf3\x78\x53\x6e\xfe\x14\xa5\x4a\xe2\x1d\xa7\xdf\x73\x36\xd6\x6c\x66\xbe\x8f\xba\x17\x9d\xf6\xc1\xf7\x2e\xb3\x3d\x6c\xad\xab\xe8\x33\xe0\x0a\xab\x17\x9d\xf6\x41\x93\xcf\xd6\xb0\x08\x1e\xa0\x7d\x3f\xec\x9d\x2f\xc1\x53\x0f\x83\xde\xc5\xe5\x70\x34\xf8\xe5\x81\x50\xc7\x7e\x5c\x3e\xcc\xbc\xc3\x55\x22\x7a\xdd\x1f\xf5\x9a\x99\xda\x50\x64\x9b\x29\x3b\x64\xa6\x69\xe4\x8a\x72\x12\x88\x4b\x10\xf3\x26\xf3\xae\x70\x26\x21\x93\x2a\x9e\x15\x29\x4a\x10\x39\x2a\x6b\xc5\x5c\xe8\xc0\x62\xda\x5a\x91\xb0\x56\x71\x44\x09\x46\x37\xc0\xa7\xf5\x62\xde\x6a\x83\x71\x0d\xa3\x78\xc7\x95\x36\x6d\x0f\x5a\xd3\x8d\x8d\x57\x03\x6d\xfa\xb7\x9a\x59\xc1\x43\x05\xcf\xce\xb8\x1e\x6c\x62\xf3\x74\xf7\x7e\x1b\x36\xf8\xe2\x5e\xf5\x2c\x37\xb8\x42\x21\xa8\x4c\xe2\x73\xb2\x0a\xd9\x91\x3c\xeb\xc1\x39\xd6\xc3\xcc\x83\xf6\xc6\xb2\x6b\x28\xb6\xb7\x82\x13\x53\x17\x3f\xaa\x8a\x62\x83\xd2\x0b\x42\xc7\xa6\x8f\xaf\x90\x9c\x66\x98\xec\x7f\x1d\xa0\xec\x28\x91\xc3\xdd\xb3\x27\x50\xa4\x4c\x53\x42\x57\x39\xa1\xc9\x84\xfc\xdf\xc0\x3b\x1b\xf4\x87\xc3\xf1\x8b\x37\x97\x57\xe7\x63\xaf\x61\xec\x35\x7d\xd4\xac\xe7\xbc\x8f\x28\xcf\x56\xe2\xdb\x9a\x6b\x28\x21\x6c\x2e\x1e\xc6\xde\xb6\x2f\x35\xd2\xd5\x0d\xf5\x55\x4c\xff\xd0\xbe\x5f\x91\xbe\x49\x74\x3f\x1a\x55\x6e\x2d\x45\x0a\x1c\xe0\x8c\x2b\x8d\x72\x43\x81\x55\xde\xb4\xca\x99\x0a\x29\x22\x54\x4a\x48\x55\x75\x2a\x49\x89\xae\x5e\x23\x8f\xae\x17\xb5\xdc\x52\x2d\x4c\xee\xbc\xc3\x38\x44\xa1\xae\xc7\x74\x83\x32\xc7\xd4\xab\xe7\xa7\x22\x62\xb4\x73\x2c\x3a\xde\xea\xa9\x2b\x26\x0e\x78\x0c\x7e\x79\x08\xff\xe8\xc0\xf1\xb6\x26\xc1\x4e\xa3\xff\xd5\xcf\x1c\x06\x59\x75\xd1\x9b\xe5\x46\xb3\x46\x27\x5c\xc6\xe3\x82\x49\xbd\x08\x3f\xdf\x68\x09\xa5\x3b\x50\xfd\x21\x50\x89\x07\xbe\x2f\x51\xa1\xae\xb7\x88\x4a\x99\x82\xaf\x86\x57\xa6\xed\xaa\x4e\xc3\x70\xc6\x75\x52\x4e\x82\x48\x64\x5f\x5e\x3d\x45\xa6\x50\x85\xb1\x98\xe7\xa9\x60\x71\xe8\x59\x33\x3a\x30\x5c\x7a\xa1\xed\xdf\x8c\xcd\x54\x6f\x87\x8d\x3d\xb7\x56\xa0\x99\x0c\x66\xbf\xc3\x03\x68\x26\xc1\xbf\xfb\xdd\x01\xfa\x06\xf8\x5a\xfb\xf7\x4c\xea\xb7\xca\x78\x66\xa8\x41\x95\xb2\x90\x5c\xd9\xde\x6f\x99\x31\x75\x43\xf9\x87\xe6\xf9\x4c\xad\xce\x99\x64\x22\x86\xe3\xa7\xdf\x7e\xbb\xb6\xb4\x3d\xd8\x0e\xe1\x9c\x6c\xde\x4e\xd7\x5d\xf7\xfa\x70\x97\xaf\x3a\x2b\x56\x91\xbf\x0b\xb5\x4c\xe6\xbb\x15\x5e\x0e\x00\x6c\xdc\xfb\x7e\x51\xa6\x29\xf8\xda\xe6\x9b\x0e\xf9\xc3\x8a\xec\x4e\xdb\xf7\xa3\xee\xc5\xd2\x5f\x51\x9d\x5f\x07\xb0\x6f\xd3\x02\x9f\xc9\x59\x83\x70\x6c\x3f\xd1\x7e\x59\x7a\x10\xac\x55\xbe\x7e\xbe\x33\xad\xa5\x12\x79\x9b\xdd\x37\x09\xc7\x76\x5a\x4b\x45\xf1\xc3\x5c\x39\x5f\x13\x90\x69\x6f\xac\xa1\x59\xf5\xe6\xbc\x81\x77\x8d\xa6\x12\xd5\xb4\x66\x52\xdd\x42\x1e\x5d\x0d\xb7\xba\xc6\x94\x7f\xe9\xa4\x54\x54\x44\x71\xe5\xda\xbc\x54\x55\xba\xde\xca\xaa\x4d\xc3\x82\x02\xb3\x23\xd3\xb2\xb5\x9f\x6e\x70\x41\x1f\x4c\x19\xa6\xbe\xd4\x4a\x0e\x77\xb6\x88\xab\x06\xf3\x67\x3b\x25\x26\xe1\xaa\x8c\xc8\x95\x48\x8d\xc8\x9d\x64\x51\xa0\xbc\xf5\x6c\x23\xe5\xe2\xac\x07\x3c\xd7\x52\xc4\x65\x84\x6a\xb3\xaf\xb2\xce\x89\xe0\xfb\x3a\x55\xb7\x28\xf9\x74\x61\x3f\x47\x8c\x4e\x03\x9f\xeb\x30\x7f\x46\xf0\xd0\xaa\xc2\x83\x0f\xb5\x67\xdb\xd5\xfe\xd2\x5a\x4e\x9d\x9e\x5d\xe3\x06\x17\xff\xf6\x12\xce\x0e\x6b\xf2\xbc\xfc\x5c\x75\xf5\x3f\x0c\x8a\xcd\x2e\x7f\x53\x05\x7f\x22\x58\x28\xeb\xdd\x60\x77\x17\x40\x55\xda\x28\x0a\xca\x5e\x63\x22\x97\x65\xab\xe5\x5a\x4d\x6e\xbf\xb1\x49\x8b\x5c\x51\x6e\x1d\x5c\x22\x53\xae\xc6\x33\x5d\xb2\xaa\x8c\x72\x09\x94\xa2\x9a\x84\x7c\x51\x94\xb3\x04\x3c\xe7\x07\x19\xcb\xf9\x14\x95\xf6\x20\x12\x59\x46\x11\xc0\x15\xb0\x5b\xc6\x53\x73\xdf\xc5\x73\x38\x79\x16\x1c\x7f\x7d\x44\x31\x11\x0b\x54\x66\x37\xaa\xf2\xe6\x42\xde\xac\x5a\x3f\xc6\xc9\x99\xae\xf6\x0c\x60\x68\xca\x48\x9e\x2b\xd3\x16\xb7\xab\x3c\x09\x8e\x29\x41\x4b\xf8\x2c\xb1\xbe\xbe\x7e\xa4\x4e\xfb\xc0\x09\x55\x49\xee\xfb\xae\x13\xbc\x7f\x7f\x1f\x9c\xa5\x1c\x73\x1d\xb8\x0b\xc6\xe5\x72\xbf\xee\xbf\x78\x3e\x69\xd3\x74\xc7\x1c\x4d\xde\xaf\xaf\xbc\x24\xbe\xac\x24\xf8\xea\xab\x1d\xef\xbf\xaf\x5f\xaf\x21\x93\xe5\xf2\xd7\x3c\xe7\x59\x99\xc1\x86\x74\xd5\x0c\xde\xb8\x2d\x24\xe5\x47\x54\x1b\x1a\xdc\xca\x63\x93\xfb\x9b\xbe\xb7\xd3\xb3\x83\xa6\xf7\x06\x1b\x4e\xb7\x25\xf9\xe8\xba\x72\x55\xcb\xab\x6a\x78\xed\x68\x2c\xd1\xd2\x5b\x85\x8c\x6a\xd1\xe3\xed\x66\xcd\x2e\xef\x69\xd5\x25\x47\xa3\x4c\xab\xab\x8f\xff\xcb\x0d\x9e\xbf\xad\x83\xf3\xd7\xd8\xd6\x58\xe6\xdf\xa5\xd8\xbf\x9b\x3b\x2b\xcf\x5b\xf5\x12\xe6\xb6\xc4\x32\xf1\xa8\x0d\x60\x6c\xb1\xea\xff\xb3\xc4\x16\x4b\xfc\x15\x63\x6e\x50\xc3\xee\x46\xbb\x6b\x97\xd5\x61\xfc\x57\xba\x65\x6b\x49\xc4\xdf\xd2\x2f\x6b\x36\x05\xf1\x2e\x4a\xcb\xd8\xfd\x4a\xa3\xd9\x8f\xa2\xfa\xb1\x02\x34\xd3\x48\x66\x0a\xe6\x98\xa6\xe6\x7e\x30\xa2\xb9\x94\x4c\x5b\x7e\x0d\xed\x09\x57\xcd\xc2\xed\xa0\xf6\x28\x9c\xbd\xd5\x55\x86\xf2\xe0\xc1\x15\x9c\xb7\x6b\x17\x1c\x0f\xa0\x65\x89\x87\x2b\x96\x34\xe4\x68\xa1\xca\x74\xd8\x6d\x2b\xb5\x8e\x75\xaf\x11\x29\x7b\xd5\x5d\x62\x0e\x09\x2b\x0a\xcc\x9b\x6d\x06\x5f\xe4\xc4\x62\xb6\xb1\xc1\xa7\xf6\x17\x01\xa6\xfd\x69\xae\xa2\xd4\x8d\xbd\x90\xa6\x6c\x51\x62\xba\x08\x1a\xec\x70\x2d\x1a\xfd\xc3\x2d\xcd\x04\x30\xa4\xb9\x64\x84\xca\xb0\x4e\xd5\xd2\x5c\x61\xfc\xc9\x86\xb4\x65\xf8\x7a\xe5\x06\x57\x2b\x4d\x5c\x40\xb9\xaa\xe4\x19\xe6\x9a\xa5\x64\x0c\x31\xad\x52\x61\x62\xa9\xef\x82\xc7\x04\xc1\x77\xe6\x7e\xad\x8a\x94\xab\xcb\x71\xef\xdd\x4f\xbd\xc1\xe5\xeb\xde\xf5\xa8\x7b\xd5\xf1\x30\x27\xca\x8f\x3d\xb3\x9d\x29\xeb\xd6\x8f\xf2\xdc\x75\xd4\xcc\x6f\x74\x98\xc2\xd5\x05\xa2\xd3\x1b\x93\xa4\x2e\x3a\xaa\x85\x19\x6b\x79\x7b\x01\x58\xad\xd4\x39\x38\x34\xeb\xbf\x66\x37\x58\x7b\x82\xf5\x21\x9e\xeb\x4a\x95\xd5\xe8\x00\x7a\xb3\xd3\x0a\xf3\x4d\xff\xc0\xb1\x86\xbb\xa1\xd8\x27\x8f\xde\xff\x52\x6c\x9a\xe1\xbe\x9d\xfa\xc7\xe3\xaa\x65\x5b\xe0\x5a\x56\x97\x3f\x0e\x3b\xfb\xfb\x94\x5a\xc5\xe0\x4b\xda\x1c\x89\x3f\x6a\x01\xff\xb3\x73\xe0\xb5\xe9\xa9\x77\xf8\xdc\x38\x23\x7c\x0f\xdf\x6f\x5c\xcc\xa9\xb5\xe6\xdb\xa7\x0f\xe1\x27\xff\xd3\xac\xf1\xcc\x47\x7a\xfc\xfe\xbf\xe0\xe3\xa3\x4f\xed\x4a\xc2\x0f\xa1\x25\xcf\xd3\xf6\xa8\x7b\xf1\xc1\xff\xea\xd3\xcc\x70\xdb\x46\xd6\x66\x73\x0d\x04\xdf\x67\x19\x51\xea\x97\x60\xca\x30\x5b\x35\xf1\xfd\x0f\x1f\x0d\x2c\xfd\x8d\x17\x1d\x9b\xa2\x19\x74\xb3\xc2\x09\xb5\x7e\x01\xe2\xfb\xcc\xad\xe6\xaa\xcb\x3f\x94\xfb\x4b\xe0\x6b\x6f\x37\x8d\x14\xb1\x6d\xc4\x6c\x8a\x62\x00\x88\xf2\x7c\x69\xbb\xa2\x9f\xdf\x6b\x57\xb2\xc5\xd5\x7a\xef\xb8\x7b\x7d\x5e\x93\x6b\x75\x4d\xfe\x46\xe1\xb4\x4c\x09\x39\xda\xf7\x6f\x5f\x76\x47\x4b\x9a\xe5\xb1\x34\xf5\x23\x91\x9b\x24\x36\x8f\xd0\x0b\xaa\xb5\x4d\xfe\xc6\xd2\x54\xcc\xab\xd8\xa1\x6a\x16\x5d\xbc\x00\xcf\x32\x8c\x39\xd3\x98\x2e\x80\x4d\xb5\xfd\xa1\xd5\x62\xbf\x42\x23\x13\x5d\x81\xbd\x96\x1b\xb3\x3c\x1e\xef\x4e\xf9\x2c\xfc\xae\x4c\xd6\x82\x9a\xcb\xaa\x27\x7f\xe2\xb4\x84\x68\x33\x01\x91\x88\xb1\x35\xe1\xb9\xdb\xc6\x36\xa9\xc8\x7a\xe3\x42\xa2\xb9\x5c\xf6\x5a\x8d\xb6\x9f\xb9\x3b\xf1\xab\xc6\x9f\xcc\x36\xb2\x96\xb5\x89\x17\xfd\xee\xe0\x75\xa7\x7d\x6f\xfe\x9e\xfa\x4f\xad\x63\x56\x49\xdc\x70\x70\x46\x9e\xe9\xb5\x7f\xf0\x9e\x1b\xd3\xae\xec\x2b\x4b\x2a\x11\x64\x66\x59\xe2\xde\xb6\xe1\xad\x29\xed\xa7\x7f\x79\xee\x55\xe3\xbe\xe3\x34\x9c\x89\x50\xc9\x28\xbc\x79\xa6\x02\x2e\xc2\x9b\xfa\xb7\x8e\xa7\xff\x6a\xe4\x03\x33\x91\xb2\x7c\x76\xea\x91\x58\x57\xdd\xeb\x8b\x71\xdd\x88\x6a\x0c\x32\xbf\xa5\x9c\x30\x72\xae\x08\xbc\x0f\x8d\x3e\x9c\xeb\x12\xc5\xf0\xd9\xdd\xcc\x95\x4b\x68\xad\x1f\xb6\xef\x87\x83\xb3\xf1\xf9\xe5\x60\x49\xe5\xc9\xf6\x42\x67\x17\xfd\x71\xef\xba\xfb\xe2\xaa\x77\xde\x39\x06\x1b\x36\x4e\x7f\x4b\xb8\xe8\xf7\x87\x9d\xf6\x7d\x7f\x48\x1f\xcd\xd5\x84\xd5\xff\x92\xec\xe6\x6a\x5c\x06\x3e\xcf\x95\x66\x69\x6a\xa3\x05\xa2\x99\x00\xdf\x4f\xe3\x69\xca\x66\x0a\xf6\xfd\xf9\x3e\xf8\x02\x6a\xd5\x59\x89\x96\x10\x84\x6b\x3f\x1e\xa3\x67\xde\xa1\xd7\xa8\x4a\x55\xc2\xa7\xba\xd5\xaa\x0d\x6f\x9c\xdf\x99\x7d\xc3\xfb\x9b\x2e\xb0\x9d\xb4\xd6\x97\x71\x8f\xba\x57\x57\x8f\x56\x09\x51\xf3\xa7\x86\xbb\xb5\xe7\x9a\x27\xe6\x4a\x48\x01\xcb\x01\xef\xb4\xc4\x0c\xd3\x85\xd9\x28\x15\xe4\xc5\x3c\x43\x38\x40\xf3\x7b\x47\x96\xa6\x0b\x50\x22\xab\x36\x38\xb4\x9d\x9f\xc6\x13\xc3\x64\x92\x11\xd3\xdb\xdf\x13\xd0\xfb\xea\x7b\x11\x33\x8d\xb1\xb9\x28\xd5\x09\x4a\xdc\xaf\x6a\x62\x28\x04\xcf\xcd\x2f\x58\x25\xd6\xe1\xc3\xd2\xd4\xfd\x36\x35\x73\x77\x82\x24\x4a\xd0\x80\x01\x93\x79\xac\x3a\x59\x67\x2b\x8d\xf9\x12\x53\xda\xab\xd1\xce\xda\x83\x73\xae\xa2\x52\x91\x50\x71\x69\xba\xcb\x8d\x09\xd0\x9f\x4e\x79\x84\xf0\x52\x94\x52\xc1\x6b\x44\x53\x86\x1e\x3c\x3e\x3e\xf9\x2e\x38\x79\x1c\x9c\x3c\x3d\x3c\x35\x6b\x54\xbd\xd9\x58\x44\x2a\x98\x09\x31\x4b\xd1\x34\x68\x63\x11\x95\x94\x43\x84\x71\x78\xf2\xf6\xeb\x93\xfc\x5d\xf2\xdd\xe0\x97\xee\x64\xfc\x33\xfb\xe5\x66\x5e\xfe\x74\x15\x9f\x24\x3f\xde\x95\x83\x77\x5f\xf3\x37\xc7\xe7\x19\xfb\xe7\x37\xe9\xcd\x99\x7a\xf7\x2c\xc4\x98\xeb\xbd\x04\x19\x9d\xb8\x93\x04\xe9\xb3\xa7\x69\x79\xf2\xf4\x2e\xfb\x6e\x92\x98\xfd\x88\x0f\x15\xca\xdb\xfa\x26\x82\xf2\x5e\x9e\x9b\xe4\x32\x3e\xdd\xd5\x2a\x6e\x58\xba\xf1\x91\x2b\x55\xa2\x0a\x9f\x7d\x73\xf2\xed\xb3\x96\xb9\xda\xad\x4e\x3e\xb6\x2a\xea\x1c\x78\x93\x52\x2d\x26\xe2\xce\x03\x8f\xcd\xf2\x44\x28\xed\x81\xf7\x2b\x2a\xc5\xd1\x8f\x73\x45\xf9\x95\xf2\xc0\xbb\xe1\x5a\x23\xa5\x9c\x39\xa3\x47\x25\x3d\xcb\x45\x8e\xf3\x42\xf2\x5b\xfa\x22\xd1\xfe\xb2\x91\x3c\x58\x95\x19\x4a\x0f\x3c\xc5\xb2\x22\x45\x9f\x15\xdc\x1e\xc6\x56\x9b\xa2\x3a\x94\x41\xa9\xfb\x6d\xa1\x0c\xd7\xd6\x74\x6a\x7e\x48\x64\xd0\x6a\xf8\xca\x72\xdb\x0a\x9e\x4d\x50\xb9\x3a\x61\x6b\xdc\x0f\x5e\x6b\xca\x5b\xff\x1d\x00\x00\xff\xff\xa1\xf2\xd3\x29\xc5\x2d\x00\x00") + +func testImagesImageUtilShBytes() ([]byte, error) { + return bindataRead( + _testImagesImageUtilSh, + "test/images/image-util.sh", + ) +} + +func testImagesImageUtilSh() (*asset, error) { + bytes, err := testImagesImageUtilShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/image-util.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesIpcUtilsBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\x33\xe3\x82\x0a\x17\xe5\xda\x26\x16\xe5\x1a\x1b\x95\x99\xe9\x63\x93\x04\xe9\x01\x91\x65\x16\x98\xd2\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\x01\x20\x00\x00\xff\xff\xeb\x4c\x33\x25\x74\x00\x00\x00") + +func testImagesIpcUtilsBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesIpcUtilsBaseimage, + "test/images/ipc-utils/BASEIMAGE", + ) +} + +func testImagesIpcUtilsBaseimage() (*asset, error) { + bytes, err := testImagesIpcUtilsBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/ipc-utils/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesIpcUtilsDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\xcf\x4f\xdb\x30\x1c\xc5\xef\xfe\x2b\x9e\x9a\x1d\x36\xa9\x49\x18\xa7\x69\x3b\x85\x52\x20\x02\x92\x2d\x69\x87\x38\x21\x37\xf9\x36\xf9\x6a\xa9\x6d\xfc\x63\xa1\xff\xfd\x94\x00\xda\xaa\xf9\x66\xbf\xe7\xe7\x8f\x9f\x1d\x61\xa5\xcd\xd1\x72\xd7\x7b\x9c\x9f\x7d\xfe\x82\x4d\x4f\xb8\x0d\x3b\xb2\x8a\x3c\x39\x64\xc1\xf7\xda\xba\x44\x44\x22\xc2\x1d\x37\xa4\x1c\xb5\x08\xaa\x25\x0b\xdf\x13\x32\x23\x9b\x9e\xde\x95\x25\x7e\x92\x75\xac\x15\xce\x93\x33\x7c\x9c\x0c\x8b\x37\x69\xf1\xe9\x9b\x88\x70\xd4\x01\x07\x79\x84\xd2\x1e\xc1\x11\x7c\xcf\x0e\x7b\x1e\x08\xf4\xd2\x90\xf1\x60\x85\x46\x1f\xcc\xc0\x52\x35\x84\x91\x7d\x3f\x1f\xf3\x16\x92\x88\x08\x8f\x6f\x11\x7a\xe7\x25\x2b\x48\x34\xda\x1c\xa1\xf7\xff\xfa\x20\xfd\x0c\x3c\x8d\xde\x7b\xf3\x35\x4d\xc7\x71\x4c\xe4\x0c\x9b\x68\xdb\xa5\xc3\xab\xd1\xa5\x77\xf9\x6a\x5d\xd4\xeb\xf8\x3c\x39\x9b\xb7\x6c\xd5\x40\xce\xc1\xd2\x73\x60\x4b\x2d\x76\x47\x48\x63\x06\x6e\xe4\x6e\x20\x0c\x72\x84\xb6\x90\x9d\x25\x6a\xe1\xf5\xc4\x3b\x5a\xf6\xac\xba\x25\x9c\xde\xfb\x51\x5a\x12\x11\x5a\x76\xde\xf2\x2e\xf8\x93\xb2\xde\xe9\xd8\x9d\x18\xb4\x82\x54\x58\x64\x35\xf2\x7a\x81\x8b\xac\xce\xeb\xa5\x88\xf0\x90\x6f\x6e\xca\xed\x06\x0f\x59\x55\x65\xc5\x26\x5f\xd7\x28\x2b\xac\xca\xe2\x32\xdf\xe4\x65\x51\xa3\xbc\x42\x56\x3c\xe2\x36\x2f\x2e\x97\x20\xf6\x3d\x59\xd0\x8b\xb1\x13\xbf\xb6\xe0\xa9\x46\x6a\xa7\xce\x6a\xa2\x13\x80\xbd\x7e\x05\x72\x86\x1a\xde\x73\x83\x41\xaa\x2e\xc8\x8e\xd0\xe9\xdf\x64\x15\xab\x0e\x86\xec\x81\xdd\xf4\x98\x0e\x52\xb5\x22\xc2\xc0\x07\xf6\xd2\xcf\x2b\xff\x5d\x2a\x11\x22\xab\xae\x27\xfa\x75\x7e\x9f\x5d\xaf\xc5\x55\x55\xde\xe3\xc3\xdf\xb9\x58\x55\x65\x5d\x3f\x5d\x6c\xf3\xbb\xcb\xa7\x55\xf9\xfd\x11\xcf\x74\x08\xf1\x8f\xf5\xfd\x36\xab\x56\x37\xb1\x9b\xa2\x1b\xa4\xc1\xd9\x74\xc7\x2a\x15\xa2\xda\x16\x90\xe6\x17\x64\xdb\x22\x8e\x95\x8e\x9b\xf9\xaf\x05\xcf\x43\x3c\xb0\x0a\x2f\xe2\x4f\x00\x00\x00\xff\xff\xf5\x16\x2c\x14\xbe\x02\x00\x00") + +func testImagesIpcUtilsDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesIpcUtilsDockerfile, + "test/images/ipc-utils/Dockerfile", + ) +} + +func testImagesIpcUtilsDockerfile() (*asset, error) { + bytes, err := testImagesIpcUtilsDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/ipc-utils/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesIpcUtilsVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") + +func testImagesIpcUtilsVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesIpcUtilsVersion, + "test/images/ipc-utils/VERSION", + ) +} + +func testImagesIpcUtilsVersion() (*asset, error) { + bytes, err := testImagesIpcUtilsVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/ipc-utils/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesJessieDnsutilsBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x4d\x49\x4d\xca\x4c\xcc\xb3\xca\x4a\x2d\x2e\xce\x4c\xe5\x82\xca\x14\xe5\xda\x26\x16\xe5\x1a\x1b\x95\x99\xeb\xe3\x90\x37\x33\xb1\x05\x93\x65\x16\x58\x55\x14\x14\x24\x9b\x99\xe4\xa4\xda\x42\x69\xac\x6a\x8a\x8d\x2d\x0d\x2a\x6c\xc1\x24\x9a\x3c\x20\x00\x00\xff\xff\x77\xe6\x98\x0c\xa0\x00\x00\x00") + +func testImagesJessieDnsutilsBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesJessieDnsutilsBaseimage, + "test/images/jessie-dnsutils/BASEIMAGE", + ) +} + +func testImagesJessieDnsutilsBaseimage() (*asset, error) { + bytes, err := testImagesJessieDnsutilsBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/jessie-dnsutils/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesJessieDnsutilsDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x53\x51\x6f\xdc\x36\x13\x7c\xe7\xaf\x18\x9c\x3e\x04\x5f\x01\x4b\x72\x8c\xd4\x0f\xee\x93\x72\xbe\x38\x42\xec\xbb\xf4\x64\x37\x30\xda\xc2\xe0\x51\x7b\xd2\xa6\x12\x49\x93\x94\x75\xca\xaf\x2f\x28\xfb\xda\x1a\xd6\x8b\xb0\x9c\xdd\xe5\xec\x70\x36\xc1\xd2\xd8\xc9\x71\xd3\x06\x9c\x9d\xbe\x3f\xc7\x6d\x4b\xf8\x32\xec\xc8\x69\x0a\xe4\x51\x0c\xa1\x35\xce\x67\x22\x11\x09\xae\x59\x91\xf6\x54\x63\xd0\x35\x39\x84\x96\x50\x58\xa9\x5a\x3a\x22\x27\xf8\x8d\x9c\x67\xa3\x71\x96\x9d\xe2\xff\x31\x61\xf1\x02\x2d\x7e\xfa\x45\x24\x98\xcc\x80\x5e\x4e\xd0\x26\x60\xf0\x84\xd0\xb2\xc7\x9e\x3b\x02\x1d\x14\xd9\x00\xd6\x50\xa6\xb7\x1d\x4b\xad\x08\x23\x87\x76\xbe\xe6\xa5\x49\x26\x12\xdc\xbf\xb4\x30\xbb\x20\x59\x43\x42\x19\x3b\xc1\xec\xff\x9b\x07\x19\x66\xc2\xf1\x6b\x43\xb0\x17\x79\x3e\x8e\x63\x26\x67\xb2\x99\x71\x4d\xde\x3d\x27\xfa\xfc\xba\x5c\xae\xd6\xd5\x2a\x3d\xcb\x4e\xe7\x92\x3b\xdd\x91\xf7\x70\xf4\x38\xb0\xa3\x1a\xbb\x09\xd2\xda\x8e\x95\xdc\x75\x84\x4e\x8e\x30\x0e\xb2\x71\x44\x35\x82\x89\x7c\x47\xc7\x81\x75\x73\x02\x6f\xf6\x61\x94\x8e\x44\x82\x9a\x7d\x70\xbc\x1b\xc2\x2b\xb1\x8e\xec\xd8\xbf\x4a\x30\x1a\x52\x63\x51\x54\x28\xab\x05\x3e\x16\x55\x59\x9d\x88\x04\xdf\xca\xdb\xcf\x9b\xbb\x5b\x7c\x2b\xb6\xdb\x62\x7d\x5b\xae\x2a\x6c\xb6\x58\x6e\xd6\x97\xe5\x6d\xb9\x59\x57\xd8\x7c\x42\xb1\xbe\xc7\x97\x72\x7d\x79\x02\xe2\xd0\x92\x03\x1d\xac\x8b\xfc\x8d\x03\x47\x19\xa9\x8e\x9a\x55\x44\xaf\x08\xec\xcd\x33\x21\x6f\x49\xf1\x9e\x15\x3a\xa9\x9b\x41\x36\x84\xc6\x3c\x91\xd3\xac\x1b\x58\x72\x3d\xfb\xf8\x98\x1e\x52\xd7\x22\x41\xc7\x3d\x07\x19\xe6\x93\x37\x43\x65\x42\x14\xdb\xab\xc8\x7e\x55\xde\x14\x57\x2b\xf1\x69\xbb\xb9\xc1\xff\xfe\x8d\xc5\x72\xbb\xa9\xaa\x87\x8f\x77\xe5\xf5\xe5\xc3\x72\xf3\xf5\x1e\x8f\xd4\x0f\xe9\xaf\xab\x9b\xbb\x62\xbb\xfc\x9c\xfa\xd8\x5a\x21\x1f\xbc\xcb\x77\xac\x73\x11\x25\x28\xb6\xeb\x72\x7d\x75\x81\xaf\x1d\x49\x4f\xd1\x36\x71\x10\x19\x9e\xd9\x2b\xc7\x36\x60\x47\x9d\x19\xe1\xa8\x37\x4f\xe4\x9f\x01\x52\x83\xe3\x30\xc1\x4a\xf5\x97\x6c\xc8\x63\xef\x4c\x0f\xe9\xfa\xf3\x0f\x71\x16\x58\xab\xce\x3f\x50\x07\xee\x23\x2a\x12\xc8\xb9\x70\x42\x6d\x66\x6b\xd2\x81\x7d\x80\xd4\x53\x6f\x1c\xc5\x37\x8e\x5d\x6b\xda\xb1\xd4\x70\x64\x8d\xe7\x60\x1c\xc7\xbe\xc6\xe1\x3b\x79\xcf\x94\xa1\x32\x18\xe9\xd8\xc1\x91\x32\x7d\x4f\xba\xc6\xe0\xa3\x9a\xd1\xe8\x22\x79\xbe\x70\xae\x92\x7a\x82\x75\xa6\x1e\x54\x14\x74\x5e\x86\xc8\x6c\xd6\x78\x8e\x66\x47\xb3\x7f\x29\x09\x06\xdf\x07\x1f\x10\xc8\x07\x78\x45\x5a\x3a\x36\x3e\x13\x62\x56\x72\xcf\x87\xc1\xa6\xd2\x86\xb4\x63\x1f\x32\xdf\x22\x17\xdb\xbb\x35\x7e\x5f\xe4\x6f\xa0\xc5\x9f\x62\xc6\xe2\x51\x43\x01\xe9\x23\x06\x5b\xcb\x40\x78\xf7\x0e\x7f\x88\xb8\x32\x47\x88\xb5\x0f\xb2\xeb\x90\x4e\x48\xd3\xbd\x71\x8a\xd2\x89\x3c\x6a\xed\x87\xc0\x9d\x7f\x5b\xa0\x3a\x92\x5a\x88\xe2\xf2\x72\x5e\x3b\x7f\x91\xe7\x0d\x87\x76\xd8\x65\xca\xf4\xb9\x32\x8e\x6a\xed\xff\xf9\x3b\x9a\x5f\xd5\xe7\xb5\x19\x75\x67\x64\x9d\x3f\xbd\xcf\x7e\xce\x4e\x8f\x09\x0f\x73\xf4\xd0\xb1\x1e\x0e\x0f\xd1\x48\xd1\x27\x59\x68\x7e\xe0\x98\x11\x83\x79\x98\x20\x1d\xd2\xc3\x8f\xa7\xfd\x2b\x28\x12\x74\x3d\xd2\xd7\xa7\xe2\xef\x00\x00\x00\xff\xff\x02\x98\x43\x49\xf4\x04\x00\x00") + +func testImagesJessieDnsutilsDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesJessieDnsutilsDockerfile, + "test/images/jessie-dnsutils/Dockerfile", + ) +} + +func testImagesJessieDnsutilsDockerfile() (*asset, error) { + bytes, err := testImagesJessieDnsutilsDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/jessie-dnsutils/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesJessieDnsutilsOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\x48\xc9\xcc\x2d\x06\x33\x72\xb3\x4b\x73\x13\x4b\x12\xd3\xb9\x00\x01\x00\x00\xff\xff\x78\x0c\x5f\x33\x21\x00\x00\x00") + +func testImagesJessieDnsutilsOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesJessieDnsutilsOwners, + "test/images/jessie-dnsutils/OWNERS", + ) +} + +func testImagesJessieDnsutilsOwners() (*asset, error) { + bytes, err := testImagesJessieDnsutilsOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/jessie-dnsutils/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesJessieDnsutilsVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe6\x02\x04\x00\x00\xff\xff\x1c\xa7\xbe\x4f\x04\x00\x00\x00") + +func testImagesJessieDnsutilsVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesJessieDnsutilsVersion, + "test/images/jessie-dnsutils/VERSION", + ) +} + +func testImagesJessieDnsutilsVersion() (*asset, error) { + bytes, err := testImagesJessieDnsutilsVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/jessie-dnsutils/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesJessieDnsutilsFixupAptListSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x93\x51\x6f\xdb\x36\x14\x85\xdf\xf9\x2b\xce\xac\x3e\x34\x40\x24\xaa\x69\x91\xa1\x09\xf6\xe0\x26\x19\x6a\xb4\xb0\x01\xdb\x5d\xd1\xa7\x81\xa2\xae\xa5\xdb\x49\x24\x47\x52\x76\x8c\x65\xff\x7d\xa0\x6c\x6f\x33\x12\xec\x69\x7c\x32\x7c\xaf\xee\xf9\xce\xb9\x64\xf6\x83\x1c\x82\x97\x15\x1b\x49\x66\x8b\x4a\x85\x56\x88\x0c\x77\xd6\xed\x3d\x37\x6d\xc4\x55\xf9\xe6\x47\xac\x5b\xc2\xa7\xa1\x22\x6f\x28\x52\xc0\x74\x88\xad\xf5\xa1\x10\x99\xc8\xf0\x99\x35\x99\x40\x35\x06\x53\x93\x47\x6c\x09\x53\xa7\x74\x4b\xa7\xca\x25\x7e\x21\x1f\xd8\x1a\x5c\x15\x25\x5e\xa7\x86\xc9\xb1\x34\xb9\xb8\x15\x19\xf6\x76\x40\xaf\xf6\x30\x36\x62\x08\x84\xd8\x72\xc0\x86\x3b\x02\x3d\x6a\x72\x11\x6c\xa0\x6d\xef\x3a\x56\x46\x13\x76\x1c\xdb\x51\xe6\x38\xa4\x10\x19\xbe\x1d\x47\xd8\x2a\x2a\x36\x50\xd0\xd6\xed\x61\x37\xff\xee\x83\x8a\x23\x70\x3a\x6d\x8c\xee\x46\xca\xdd\x6e\x57\xa8\x11\xb6\xb0\xbe\x91\xdd\xa1\x31\xc8\xcf\xb3\xbb\x87\xf9\xea\x21\xbf\x2a\xca\xf1\x93\x2f\xa6\xa3\x10\xe0\xe9\xf7\x81\x3d\xd5\xa8\xf6\x50\xce\x75\xac\x55\xd5\x11\x3a\xb5\x83\xf5\x50\x8d\x27\xaa\x11\x6d\xe2\xdd\x79\x8e\x6c\x9a\x4b\x04\xbb\x89\x3b\xe5\x49\x64\xa8\x39\x44\xcf\xd5\x10\xcf\xc2\x3a\xd1\x71\x38\x6b\xb0\x06\xca\x60\x32\x5d\x61\xb6\x9a\xe0\xc3\x74\x35\x5b\x5d\x8a\x0c\x5f\x67\xeb\x8f\x8b\x2f\x6b\x7c\x9d\x2e\x97\xd3\xf9\x7a\xf6\xb0\xc2\x62\x89\xbb\xc5\xfc\x7e\xb6\x9e\x2d\xe6\x2b\x2c\x7e\xc6\x74\xfe\x0d\x9f\x66\xf3\xfb\x4b\x10\xc7\x96\x3c\xe8\xd1\xf9\xc4\x6f\x3d\x38\xc5\x48\x75\xca\x6c\x45\x74\x06\xb0\xb1\x07\xa0\xe0\x48\xf3\x86\x35\x3a\x65\x9a\x41\x35\x84\xc6\x6e\xc9\x1b\x36\x0d\x1c\xf9\x9e\x43\x5a\x66\x80\x32\xb5\xc8\xd0\x71\xcf\x51\xc5\xf1\x9f\x67\xa6\x0a\x21\xee\x1f\x3e\xfc\x3a\x5d\xde\x7d\xfc\xe9\xd5\xeb\xda\xfd\xd6\x20\xcf\x9d\x67\x13\x73\xe5\x75\xcb\x91\x74\x1c\x3c\x5d\xa4\x2b\x77\x5c\x49\x20\x3d\x78\x8e\xfb\xa2\xa6\x8a\x95\x19\xf7\x72\xf8\x99\x9f\x4a\x32\xe5\x14\xe4\x77\x0a\x81\x49\x0e\xae\x56\x91\x82\x9c\x99\x25\x75\xa4\x0e\x49\x8e\x90\xa6\x11\x19\xc8\x44\xcf\x14\x46\x77\xc1\xf6\x04\xd7\xa9\xb8\xb1\xbe\x0f\x69\x37\xd8\x11\xbe\x0f\x21\xc2\x53\x6f\xb7\x87\x3c\x3a\x15\x22\x3a\x36\x94\xf6\x18\xec\xe0\x35\x85\xa2\xe3\x90\xee\xa1\xc8\x20\x29\x6a\xa9\x5c\x94\x67\xa5\x5d\xcb\xba\x4d\xca\x93\x9a\xaa\x93\x97\x9a\xaa\xe7\x36\x70\xe0\xce\x8f\xdc\xe8\x15\x9b\x89\x10\x3a\x91\xbf\xfa\xe3\x14\xd7\x9f\x49\x2c\xdd\xd4\xf0\xf6\x7d\xf9\xf8\xa4\x7c\x7f\xfd\xee\xc9\x39\x7d\xfd\x8e\xba\x8b\xb1\x90\x4e\x96\xf8\x5b\x95\xc0\xed\xf1\xe9\x10\xc6\x64\xb7\x84\x9e\xbd\x1f\x5f\xe9\x3f\xdd\x2b\xa2\x9b\x11\x2e\xdc\x48\x99\xb8\xc3\x0b\x31\xd7\xb4\xa5\x2e\x57\xc6\xd8\xc1\x68\x92\x57\xe5\x9b\xf7\xb2\x7c\x2b\xfb\xd0\x94\x65\x59\x5e\x17\x6d\xec\xbb\xbf\x67\x92\x6e\xed\x99\xe7\xa3\xfa\xf3\xb9\xf2\x68\x7c\x34\x0c\x6d\xd3\x5e\x2a\x18\x6b\xf2\x8d\x27\x9a\xe0\x09\x91\xe8\xe5\x74\x9f\xab\xe5\xc1\xeb\xff\x49\x31\x57\xff\x2d\x7a\x7b\x2b\x28\x28\x2d\x04\x3d\x72\x44\x29\xfe\x0a\x00\x00\xff\xff\x89\x46\xbb\xca\x32\x05\x00\x00") + +func testImagesJessieDnsutilsFixupAptListShBytes() ([]byte, error) { + return bindataRead( + _testImagesJessieDnsutilsFixupAptListSh, + "test/images/jessie-dnsutils/fixup-apt-list.sh", + ) +} + +func testImagesJessieDnsutilsFixupAptListSh() (*asset, error) { + bytes, err := testImagesJessieDnsutilsFixupAptListShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/jessie-dnsutils/fixup-apt-list.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesKittenBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x0d\x72\x75\xf7\x0c\x0e\x09\x8a\xd4\x4f\x4c\xcf\xcb\xc8\x2f\x2e\xb1\x32\xd2\x33\x32\xd4\x05\xab\xd0\x05\xab\xe0\x82\xaa\x2e\xca\xc5\xaf\xb6\x28\x17\xa1\x92\x90\xb9\x20\x15\x50\xd5\x05\x05\xc9\x66\x26\x39\xa9\x78\xd5\x43\xd5\x40\x75\x14\x1b\x5b\x1a\x54\xe0\x55\x0f\x56\xc1\x55\x9e\x99\x97\x92\x5f\x5e\x0c\xf1\xa7\xbe\xa1\x85\x81\x25\x0e\x4d\x50\x85\x10\xef\xea\x82\x14\xa2\xeb\xb5\x34\x30\x26\x4e\xaf\xa5\x81\x31\xa6\x5e\x22\xed\xb5\x34\xb0\xe4\x02\x04\x00\x00\xff\xff\x3f\x6b\x27\xe4\x9a\x01\x00\x00") + +func testImagesKittenBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesKittenBaseimage, + "test/images/kitten/BASEIMAGE", + ) +} + +func testImagesKittenBaseimage() (*asset, error) { + bytes, err := testImagesKittenBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/kitten/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesKittenDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x53\xdb\x30\x10\x85\xef\xfa\x15\x6f\xec\x1e\xda\x99\xe0\x50\x0e\x3d\xb4\x27\x37\x04\xea\x01\xec\x4e\x1c\xca\x30\x9d\x1e\x64\x7b\x63\x2f\x75\x24\x55\x5a\x63\xf2\xef\x3b\x0e\xa1\x90\xa9\x4e\x2b\xbd\xa7\xd5\xa7\xb7\x31\x16\xd6\xed\x3c\xb7\x9d\xe0\xec\xf4\xe3\x27\xac\x3b\xc2\xd5\x50\x91\x37\x24\x14\x90\x0e\xd2\x59\x1f\x12\x15\xab\x18\xd7\x5c\x93\x09\xd4\x60\x30\x0d\x79\x48\x47\x48\x9d\xae\x3b\x7a\x51\x66\xf8\x41\x3e\xb0\x35\x38\x4b\x4e\xf1\x7e\x32\x44\x07\x29\xfa\xf0\x45\xc5\xd8\xd9\x01\x5b\xbd\x83\xb1\x82\x21\x10\xa4\xe3\x80\x0d\xf7\x04\x7a\xaa\xc9\x09\xd8\xa0\xb6\x5b\xd7\xb3\x36\x35\x61\x64\xe9\xf6\xcf\x1c\x9a\x24\x2a\xc6\xfd\xa1\x85\xad\x44\xb3\x81\x46\x6d\xdd\x0e\x76\xf3\xd6\x07\x2d\x7b\xe0\x69\x75\x22\xee\xf3\x7c\x3e\x8e\x63\xa2\xf7\xb0\x89\xf5\xed\xbc\x7f\x36\x86\xf9\x75\xb6\x58\xe6\xe5\xf2\xe4\x2c\x39\xdd\x5f\xb9\x35\x3d\x85\x00\x4f\x7f\x06\xf6\xd4\xa0\xda\x41\x3b\xd7\x73\xad\xab\x9e\xd0\xeb\x11\xd6\x43\xb7\x9e\xa8\x81\xd8\x89\x77\xf4\x2c\x6c\xda\x19\x82\xdd\xc8\xa8\x3d\xa9\x18\x0d\x07\xf1\x5c\x0d\x72\x14\xd6\x0b\x1d\x87\x23\x83\x35\xd0\x06\x51\x5a\x22\x2b\x23\x7c\x4d\xcb\xac\x9c\xa9\x18\x77\xd9\xfa\x5b\x71\xbb\xc6\x5d\xba\x5a\xa5\xf9\x3a\x5b\x96\x28\x56\x58\x14\xf9\x79\xb6\xce\x8a\xbc\x44\x71\x81\x34\xbf\xc7\x55\x96\x9f\xcf\x40\x2c\x1d\x79\xd0\x93\xf3\x13\xbf\xf5\xe0\x29\x46\x6a\xa6\xcc\x4a\xa2\x23\x80\x8d\x7d\x06\x0a\x8e\x6a\xde\x70\x8d\x5e\x9b\x76\xd0\x2d\xa1\xb5\x8f\xe4\x0d\x9b\x16\x8e\xfc\x96\xc3\x34\xcc\x00\x6d\x1a\x15\xa3\xe7\x2d\x8b\x96\xfd\xc9\x7f\x9f\x4a\x94\x4a\x57\x97\x13\xfd\x32\xbb\x49\x2f\x97\xea\x62\x55\xdc\xe0\xdd\xeb\x7e\x51\x7c\xbf\x47\x27\xdb\x7e\xfe\x9b\x45\xc8\x24\x0f\xae\xc5\x6b\xf9\x46\x6f\xb4\xe8\xe4\x21\x58\x83\x7f\x95\x5a\xdc\x9c\xe3\x67\x24\x14\xe4\x64\xa4\x2a\x90\x7f\x24\x1f\xfd\x52\x7f\x03\x00\x00\xff\xff\xe4\xdf\x68\x02\xbf\x02\x00\x00") + +func testImagesKittenDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesKittenDockerfile, + "test/images/kitten/Dockerfile", + ) +} + +func testImagesKittenDockerfile() (*asset, error) { + bytes, err := testImagesKittenDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/kitten/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesKittenOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\x48\xce\x49\x2c\x4d\xc9\x2c\x4d\x4a\xcd\x29\x05\xf3\x73\xb3\x4b\x73\x13\x4b\x12\xd3\xb9\x00\x01\x00\x00\xff\xff\xeb\x9e\xa3\x19\x28\x00\x00\x00") + +func testImagesKittenOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesKittenOwners, + "test/images/kitten/OWNERS", + ) +} + +func testImagesKittenOwners() (*asset, error) { + bytes, err := testImagesKittenOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/kitten/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesKittenVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe1\x02\x04\x00\x00\xff\xff\xdb\x31\xff\x00\x04\x00\x00\x00") + +func testImagesKittenVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesKittenVersion, + "test/images/kitten/VERSION", + ) +} + +func testImagesKittenVersion() (*asset, error) { + bytes, err := testImagesKittenVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/kitten/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesKittenHtmlDataJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xe6\x52\x50\x50\xca\xcc\x4d\x4c\x4f\x55\xb2\x52\x50\xca\xce\x2c\x29\x49\xcd\xd3\xcb\x2a\x48\x57\xe2\xaa\xe5\x02\x04\x00\x00\xff\xff\x27\x07\xd0\xf9\x1c\x00\x00\x00") + +func testImagesKittenHtmlDataJsonBytes() ([]byte, error) { + return bindataRead( + _testImagesKittenHtmlDataJson, + "test/images/kitten/html/data.json", + ) +} + +func testImagesKittenHtmlDataJson() (*asset, error) { + bytes, err := testImagesKittenHtmlDataJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/kitten/html/data.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesMetadataConcealmentDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x91\x51\x6f\xd3\x30\x14\x85\xdf\xfd\x2b\x8e\x92\x17\x90\x4a\x32\xf6\xc0\x03\x3c\x85\xae\x13\xd1\x46\x32\x35\x19\x53\x85\xd0\xe4\x3a\xb7\xc9\x15\x89\x1d\xec\x1b\xb2\xfe\x7b\x94\x6e\x93\xa8\x10\x7e\xf4\xfd\x7c\xfc\xf9\x38\xc6\xda\x8d\x47\xcf\x6d\x27\xb8\xbc\x78\xff\x01\x75\x47\xb8\x99\xf6\xe4\x2d\x09\x05\x64\x93\x74\xce\x87\x44\xc5\x2a\xc6\x2d\x1b\xb2\x81\x1a\x4c\xb6\x21\x0f\xe9\x08\xd9\xa8\x4d\x47\xaf\x93\x15\xbe\x91\x0f\xec\x2c\x2e\x93\x0b\xbc\x59\x80\xe8\x65\x14\xbd\xfd\xa4\x62\x1c\xdd\x84\x41\x1f\x61\x9d\x60\x0a\x04\xe9\x38\xe0\xc0\x3d\x81\x9e\x0c\x8d\x02\xb6\x30\x6e\x18\x7b\xd6\xd6\x10\x66\x96\xee\x74\xcd\x4b\x48\xa2\x62\xec\x5e\x22\xdc\x5e\x34\x5b\x68\x18\x37\x1e\xe1\x0e\x7f\x73\xd0\x72\x12\x5e\x56\x27\x32\x7e\x4c\xd3\x79\x9e\x13\x7d\x92\x4d\x9c\x6f\xd3\xfe\x19\x0c\xe9\x6d\xbe\xde\x14\xd5\xe6\xdd\x65\x72\x71\x3a\x72\x6f\x7b\x0a\x01\x9e\x7e\x4d\xec\xa9\xc1\xfe\x08\x3d\x8e\x3d\x1b\xbd\xef\x09\xbd\x9e\xe1\x3c\x74\xeb\x89\x1a\x88\x5b\x7c\x67\xcf\xc2\xb6\x5d\x21\xb8\x83\xcc\xda\x93\x8a\xd1\x70\x10\xcf\xfb\x49\xce\xca\x7a\xb5\xe3\x70\x06\x38\x0b\x6d\x11\x65\x15\xf2\x2a\xc2\xe7\xac\xca\xab\x95\x8a\xf1\x90\xd7\x5f\xca\xfb\x1a\x0f\xd9\x76\x9b\x15\x75\xbe\xa9\x50\x6e\xb1\x2e\x8b\xab\xbc\xce\xcb\xa2\x42\x79\x8d\xac\xd8\xe1\x26\x2f\xae\x56\x20\x96\x8e\x3c\xe8\x69\xf4\x8b\xbf\xf3\xe0\xa5\x46\x6a\x96\xce\x2a\xa2\x33\x81\x83\x7b\x16\x0a\x23\x19\x3e\xb0\x41\xaf\x6d\x3b\xe9\x96\xd0\xba\xdf\xe4\x2d\xdb\x16\x23\xf9\x81\xc3\xf2\x99\x01\xda\x36\x2a\x46\xcf\x03\x8b\x96\xd3\xce\x3f\x8f\x4a\x94\xba\xde\x96\x5f\x11\x8c\xd7\x62\x3a\xa5\xd6\xe5\xdd\x0e\xa6\x23\xf3\xf3\x71\x20\xd1\x8d\x16\xfd\x68\x9c\x35\xa4\xfb\x81\xac\x20\x55\x6a\x53\xd4\xdb\xdd\x5d\x99\x17\x35\xbe\x47\xe9\xff\xd9\xe8\x87\xfa\x13\x00\x00\xff\xff\x3e\xaf\x22\x2c\xa8\x02\x00\x00") + +func testImagesMetadataConcealmentDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesMetadataConcealmentDockerfile, + "test/images/metadata-concealment/Dockerfile", + ) +} + +func testImagesMetadataConcealmentDockerfile() (*asset, error) { + bytes, err := testImagesMetadataConcealmentDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/metadata-concealment/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesMetadataConcealmentMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x6f\x9b\x40\x10\x85\xcf\xdd\x5f\xf1\x64\x72\xb0\x25\x07\xa7\x51\x95\x4a\xa9\xa2\x8a\xda\xae\x83\x92\x42\x05\x4e\xa2\x9c\xac\x05\xc6\x30\x2a\xec\xd2\xdd\xa5\xd8\xff\xbe\x5a\x27\x91\x1a\x95\xdb\xcc\xbc\x79\xf3\xf1\x36\xc0\x52\xf7\x47\xc3\x75\xe3\x70\x79\xf1\xf1\x0a\xdb\x86\x70\x37\x14\x64\x14\x39\xb2\x88\x06\xd7\x68\x63\x43\x11\x88\x00\xf7\x5c\x92\xb2\x54\x61\x50\x15\x19\xb8\x86\x10\xf5\xb2\x6c\xe8\x6d\x32\xc7\x23\x19\xcb\x5a\xe1\x32\xbc\xc0\xd4\x0b\x26\xaf\xa3\xc9\xec\x8b\x08\x70\xd4\x03\x3a\x79\x84\xd2\x0e\x83\x25\xb8\x86\x2d\xf6\xdc\x12\xe8\x50\x52\xef\xc0\x0a\xa5\xee\xfa\x96\xa5\x2a\x09\x23\xbb\xe6\x74\xe6\xd5\x24\x14\x01\x9e\x5f\x2d\x74\xe1\x24\x2b\x48\x94\xba\x3f\x42\xef\xff\xd5\x41\xba\x13\xb0\xff\x1a\xe7\xfa\xeb\xc5\x62\x1c\xc7\x50\x9e\x60\x43\x6d\xea\x45\xfb\x22\xb4\x8b\xfb\x78\xb9\x4e\xf2\xf5\xf9\x65\x78\x71\x5a\x79\x50\x2d\x59\x0b\x43\xbf\x07\x36\x54\xa1\x38\x42\xf6\x7d\xcb\xa5\x2c\x5a\x42\x2b\x47\x68\x03\x59\x1b\xa2\x0a\x4e\x7b\xde\xd1\xb0\x63\x55\xcf\x61\xf5\xde\x8d\xd2\x90\x08\x50\xb1\x75\x86\x8b\xc1\xbd\x0b\xeb\x8d\x8e\xed\x3b\x81\x56\x90\x0a\x93\x28\x47\x9c\x4f\xf0\x2d\xca\xe3\x7c\x2e\x02\x3c\xc5\xdb\xdb\xf4\x61\x8b\xa7\x28\xcb\xa2\x64\x1b\xaf\x73\xa4\x19\x96\x69\xb2\x8a\xb7\x71\x9a\xe4\x48\xbf\x23\x4a\x9e\x71\x17\x27\xab\x39\x88\x5d\x43\x06\x74\xe8\x8d\xe7\xd7\x06\xec\x63\xa4\xca\x67\x96\x13\xbd\x03\xd8\xeb\x17\x20\xdb\x53\xc9\x7b\x2e\xd1\x4a\x55\x0f\xb2\x26\xd4\xfa\x0f\x19\xc5\xaa\x46\x4f\xa6\x63\xeb\x1f\xd3\x42\xaa\x4a\x04\x68\xb9\x63\x27\xdd\xa9\xf3\xdf\x4f\x85\x42\xe4\xd9\x32\xbf\x29\x1b\x2a\x7f\xed\x3a\x72\xb2\x92\x4e\xee\x4a\xad\x4a\x92\x6d\x47\xca\x89\x34\xc7\xd7\x1b\xb4\xac\x86\x83\x88\xb2\xe5\xad\xaf\x64\x57\x5d\x7d\x12\xdb\x28\xdb\xac\xb7\xbe\x3e\x9b\x2e\x1f\xb2\x55\x9c\xcd\xc4\x26\x8d\xb2\x1f\xbe\xf5\x59\x6c\xd2\xfb\x28\xd9\xec\x1e\xd7\x59\x1e\xa7\xc9\xc9\x44\x3a\xb2\xce\x5f\xdc\xad\xe2\x0c\x7e\x4f\x69\x57\xb1\xc1\xd9\xd4\x36\xd4\xb6\xe8\xc7\x6a\x36\x13\x74\xe8\xb5\x71\x42\x14\xac\xae\xc5\x87\x30\x5c\x70\x27\x6b\x3a\x1f\x1c\xb7\xa1\x6d\x50\xb0\xc2\xd9\xd4\x73\xcf\x84\x08\x7f\xde\xa6\xc9\xf3\xb5\x6f\x8a\xbf\x01\x00\x00\xff\xff\xf0\x72\x29\x8b\x17\x03\x00\x00") + +func testImagesMetadataConcealmentMakefileBytes() ([]byte, error) { + return bindataRead( + _testImagesMetadataConcealmentMakefile, + "test/images/metadata-concealment/Makefile", + ) +} + +func testImagesMetadataConcealmentMakefile() (*asset, error) { + bytes, err := testImagesMetadataConcealmentMakefileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/metadata-concealment/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesMetadataConcealmentOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\x48\xc9\xcc\x2d\xe6\x02\x04\x00\x00\xff\xff\xe2\x68\x65\xd7\x14\x00\x00\x00") + +func testImagesMetadataConcealmentOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesMetadataConcealmentOwners, + "test/images/metadata-concealment/OWNERS", + ) +} + +func testImagesMetadataConcealmentOwners() (*asset, error) { + bytes, err := testImagesMetadataConcealmentOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/metadata-concealment/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesMetadataConcealmentVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe6\x02\x04\x00\x00\xff\xff\x1c\xa7\xbe\x4f\x04\x00\x00\x00") + +func testImagesMetadataConcealmentVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesMetadataConcealmentVersion, + "test/images/metadata-concealment/VERSION", + ) +} + +func testImagesMetadataConcealmentVersion() (*asset, error) { + bytes, err := testImagesMetadataConcealmentVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/metadata-concealment/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesMetadataConcealmentCheck_metadata_concealmentGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x58\x6d\x4f\xe3\xb8\x16\xfe\x5c\xff\x8a\x33\x91\xba\xb7\x5d\xa5\x49\x07\x66\xe0\x2e\xab\x6a\xd4\xe5\x65\xb7\x9a\x19\x18\x51\xd8\xb9\xab\xd5\x8a\x71\x93\x93\xc4\xc2\xb5\x83\xed\xb4\x54\x23\xfe\xfb\x95\xf3\x46\x29\xa5\x5b\x5a\x98\x0f\xd0\x36\x39\x7e\xce\x73\x5e\x7d\x6c\xff\x67\x72\x28\xd3\x99\x62\x71\x62\x60\xa7\xfb\x76\x1f\x2e\x12\x84\x8f\xd9\x08\x95\x40\x83\x1a\xfa\x99\x49\xa4\xd2\x1e\x21\x9f\x58\x80\x42\x63\x08\x99\x08\x51\x81\x49\x10\xfa\x29\x0d\x12\x84\xf2\x8d\x0b\x7f\xa2\xd2\x4c\x0a\xd8\xf1\xba\xd0\xb2\x02\x4e\xf9\xca\x69\xff\x4a\x66\x32\x83\x31\x9d\x81\x90\x06\x32\x8d\x60\x12\xa6\x21\x62\x1c\x01\x6f\x03\x4c\x0d\x30\x01\x81\x1c\xa7\x9c\x51\x11\x20\x4c\x99\x49\x72\x25\x25\x84\x47\xfe\x2a\x01\xe4\xc8\x50\x26\x80\x42\x20\xd3\x19\xc8\x68\x5e\x0a\xa8\x21\x04\x00\x20\x31\x26\x3d\xf0\xfd\xe9\x74\xea\xd1\x9c\xa5\x27\x55\xec\xf3\x42\x4a\xfb\x9f\x06\x87\xc7\xa7\xc3\xe3\xce\x8e\xd7\x25\xe4\x52\x70\xd4\x1a\x14\xde\x64\x4c\x61\x08\xa3\x19\xd0\x34\xe5\x2c\xa0\x23\x8e\xc0\xe9\x14\xa4\x02\x1a\x2b\xc4\x10\x8c\xb4\x3c\xa7\x8a\x19\x26\x62\x17\xb4\x8c\xcc\x94\x2a\x24\x21\xd3\x46\xb1\x51\x66\x1e\x38\xa8\x62\xc5\x34\xcc\x0b\x48\x01\x54\x80\xd3\x1f\xc2\x60\xe8\xc0\x6f\xfd\xe1\x60\xe8\x92\xaf\x83\x8b\x3f\xce\x2e\x2f\xe0\x6b\xff\xfc\xbc\x7f\x7a\x31\x38\x1e\xc2\xd9\x39\x1c\x9e\x9d\x1e\x0d\x2e\x06\x67\xa7\x43\x38\x3b\x81\xfe\xe9\x5f\xf0\x71\x70\x7a\xe4\x02\x32\x93\xa0\x02\xbc\x4d\x95\xe5\x2e\x15\x30\xeb\x3a\x0c\x3d\x32\x44\x7c\xa0\x3c\x92\x05\x19\x9d\x62\xc0\x22\x16\x00\xa7\x22\xce\x68\x8c\x10\xcb\x09\x2a\xc1\x44\x0c\x29\xaa\x31\xd3\x36\x78\x1a\xa8\x08\x09\x67\x63\x66\xa8\xc9\x7f\x3f\x32\xc7\x23\x3f\xfb\x84\xa4\x34\xb8\xb6\x20\x63\xca\x04\x21\x6c\x9c\x4a\x65\xa0\x45\x1a\x4e\x34\x36\x0e\x69\x38\x4c\xfa\x4c\x66\x86\x71\xfb\x83\xcb\xd8\x7e\x08\x34\xbe\x8d\x8c\xfd\x2e\xb5\xfd\xaf\x30\xc6\xdb\xd4\x21\x6d\x42\x26\x54\xd9\xf5\x3a\x0b\x02\xd4\xfa\x58\x84\xa9\x64\xc2\x68\xe8\xc1\xdf\xff\x58\xdf\x89\xf8\x3b\x69\x34\x7c\x1f\x8e\x98\x0e\x2c\xf3\x19\x69\x34\x9c\x32\xd0\x6f\xf7\x7e\xf1\x76\xde\xbf\xf3\xca\x4f\xc7\x9d\x7b\x37\x46\x43\x43\x6a\xa8\x17\x4b\x19\x73\xf4\x98\x30\xa8\x04\xe5\x0f\x84\x16\x00\xfc\xb5\x10\xd6\x94\xea\x7a\x6f\xd7\x16\x5c\x13\xd2\x56\x4a\x66\xf0\x73\xf9\x7e\xa3\x45\xfe\xa4\xa0\xe5\xfb\xd0\xe7\x5c\x4e\x31\x84\xfe\x97\x01\x4c\x8a\x2a\xd6\xde\x66\x90\x7e\x85\x39\x44\x35\x61\x01\x02\x0d\x02\x99\x09\x03\x46\x5e\xa3\x00\xac\xe2\xba\x29\x3c\x13\xda\xd8\x0e\xe1\xeb\x02\xbf\x53\xe2\x6b\x3f\xc4\x88\x66\xdc\xf8\xb9\xa2\x8a\xc5\x17\x9b\xd9\xc6\x56\x9d\xc2\x20\x53\x9a\x4d\x10\x6e\x32\x54\x33\x5b\xca\xc3\x7e\xcd\xe7\xf5\xe8\x7c\xa8\x15\xf7\x8c\xca\xb0\x22\xf6\x51\xc8\xa9\x28\xa9\xa4\x54\xd1\xf1\xf6\x1e\x31\x34\xd6\x1f\x28\x37\x3d\x83\xb7\x66\xd3\x94\x58\x80\x9b\x52\x66\xae\x22\xa9\xae\x82\x84\x8a\x18\x7b\x11\xe5\x1a\x5f\x09\xdb\xba\xe7\x27\xc3\xc6\x28\x33\x73\xa5\x31\xe8\x75\x5f\x53\x11\xa7\xda\x5c\xa1\xa1\x71\x2f\xdc\x7d\x17\x8e\x76\x77\x23\xab\xed\x8e\x34\x38\xc6\x34\x98\x0d\x37\xea\x43\x2b\x4b\xdb\xbe\xec\x6c\x53\xae\x23\x34\x74\xfb\x9a\x7d\x40\x65\xb3\x7e\x53\x71\x79\xd1\x62\x7f\xc8\xeb\xc9\x7a\xa2\x41\xbe\x4f\x6f\xc7\xfb\x99\x5d\x64\xc3\x62\x7d\x9e\x45\x1f\x74\x20\x53\xd4\x65\x16\x0a\x69\xc7\xb0\x63\x31\x59\x91\x81\x87\x09\x06\xd7\x60\x12\x6a\xec\xfe\xac\x11\x42\x29\xfe\x63\x20\x46\x03\x74\xae\xdf\x29\xd4\x19\xdf\xbe\xc3\xdd\x37\xb2\xe6\xee\x51\xd1\xca\x00\xc0\xf7\x21\x53\x1c\x45\x20\x43\x0c\x5f\x40\x45\xb3\xfb\xdf\x85\x7e\x69\x55\x8c\x68\x70\xad\x53\x1a\x58\x15\x77\xa4\x11\x51\xc6\x33\x85\x2b\x5c\x73\x96\xcf\x47\x1b\xd4\xc6\xce\xa6\x15\xb1\x53\x17\xc3\x75\x36\xc2\x0e\x8a\xc9\x06\x39\x42\x4d\x39\x25\x6a\xbf\x42\x79\xa1\x44\x7f\x41\xe4\x7f\x07\xf5\x7d\xf8\xf3\x33\xb0\x10\x85\x61\x66\xf6\x92\xb5\x52\x61\xbe\x76\xf9\x6f\xab\xe7\xb9\x2a\x7c\x1f\x4e\xa4\x1a\xb1\x30\x44\xb1\x30\xaa\x30\xdc\x7e\x34\x58\x36\x84\x6c\x07\xd8\xdc\xdf\x69\xee\xbd\x6f\xee\xed\x36\xf7\xdf\xdb\xef\xfb\xbb\xcd\xbd\x5f\x9a\xfb\x7b\xcd\xbd\xf7\x73\x75\x9b\x29\xde\xb9\xef\x0d\xbe\x0f\x97\xe2\x7a\xb1\x97\xc2\x35\xae\x97\x22\x2b\xf9\x68\x39\x46\x93\x30\x11\xf7\xf0\x45\x26\x94\x0f\x59\xc1\xb4\x8a\x4e\xde\x50\xb6\xa6\x39\x57\x30\xaf\x53\x86\x9e\xf7\x3a\x95\xfe\x28\x8b\x7f\x44\xa5\x78\xde\x7a\xd5\x73\x67\xcf\x8f\x51\x26\x82\xfc\x34\xda\x6a\xc3\xf7\xfa\x1c\x09\x07\x3d\xe8\x92\x46\x62\x3f\xc7\x34\xfd\xbb\xd8\x24\xfe\x99\xdf\x2d\x9c\x8a\x4c\xe7\x84\xd3\x89\x54\xce\x01\x7c\x77\x7e\xcf\x79\x3b\x77\xc5\x66\x6c\xcf\xd0\x57\x2e\xa0\x45\x51\x76\x84\x84\x47\xc7\x54\x8b\xc4\x22\x40\xa5\xac\x50\x60\x77\xe6\xcb\xf3\x4f\x2d\x74\x21\x71\x61\xa7\xdb\x75\xc1\x71\xec\x5f\xfb\xd7\x5c\xe6\x4d\x0f\x04\xe3\xf9\xaa\x06\x97\xb1\xf7\x45\x31\x61\xa2\x96\xf3\x55\x49\x11\xdb\x1d\x3b\x95\xd5\xe1\xbd\x39\x39\x80\xe6\xc4\x71\x01\x5d\xbb\xb4\x6d\x97\x54\xd6\xf5\xe0\x2d\x69\x58\x86\x4b\x49\x2e\x99\x21\x56\xd2\x7c\xd7\xdd\x2d\x69\xd6\x89\xf3\x23\xe9\x3e\xda\xd5\xd7\x24\xfb\x7a\x24\xab\xc3\x40\x45\xe9\xf8\x36\xc5\xc0\x60\x38\x34\xd4\x64\x79\x6e\xed\x74\xbb\x64\x19\xc7\x97\xaa\xe7\x90\x69\x3a\xe2\xd8\x29\x78\x74\xea\x89\xda\x99\xcb\xab\xb2\xdd\xd6\x7e\xe8\xdd\xfb\xc1\xf7\x61\x10\xc1\xb7\xa7\x50\xbe\x01\xd3\xa0\xd1\xce\xeb\x60\x51\xdc\x6a\xc3\xb1\x0f\x32\x11\x48\x11\x20\xe5\x18\x42\xb1\xf0\x7e\xa0\x87\x29\xe3\x1c\x14\x9a\x4c\x09\xa0\x36\x16\xb6\x35\xae\x74\x56\xcf\x4a\x3d\x11\xf9\x27\x8e\x5c\x2b\xe3\xbf\x4a\xd9\x0f\x48\x8c\xdb\x13\xa9\xa6\x54\x85\x18\x9e\x48\xf5\x07\xd2\x10\xd5\xaa\x1e\xf3\xbf\x4e\x2d\x6f\xbf\xe5\x3d\x66\x28\xc7\x38\x92\xe1\xac\x63\xf7\xae\x69\x82\xaa\xee\x37\x0f\x67\xfb\x4a\xff\xbd\xf7\x6d\xa5\x00\x8b\x60\x01\xd5\x46\x33\x55\xa8\x31\xbf\xcf\xd8\xaa\x69\x2d\x31\x6f\xeb\x92\x2b\x2e\x75\x17\x38\xaf\xd7\x2c\xa4\xf6\x8e\x6f\x99\x69\x95\xef\xda\xe4\x8e\x90\xca\x49\xba\xf0\x12\x85\xcb\xf3\x4f\xf7\xf7\xc6\x31\x9b\xa0\x80\x24\x67\xae\xcb\x4c\xd5\xf9\x9b\xe2\xb6\xdb\xce\x24\x1e\x29\xea\x03\xcb\xe4\xb9\x90\x87\x52\xe4\xb7\xcb\x4c\x83\x90\xa2\x83\xe3\xd4\xcc\xdc\xc2\x31\xba\x3e\x68\x81\x0d\x1a\x04\x85\xa8\x7e\xbc\x3a\x87\x1d\xb2\x31\xe3\x54\xf1\x99\x6b\x03\x75\x2f\x73\x2a\xcd\x33\x94\x84\x12\xb5\x3d\xd2\x95\xca\x96\xe2\x78\xc5\xd6\x57\x47\x2f\x53\x1c\x8a\xcc\x73\x4b\xfb\xf3\xeb\x70\xaf\x8a\x22\x3e\xac\x4b\x26\x8c\xfb\xd8\x06\x77\x39\xe5\x02\xb7\x6d\x63\x25\x95\x0d\x7b\xc0\x19\x0a\x63\xb3\xe7\xa7\x5c\xc9\x61\xfe\xfb\xfb\x1d\x69\x28\xbc\x71\xab\xcc\xca\x5f\x9d\xe2\xf4\x1c\x6f\x32\xd4\xa6\xe5\xfc\x7e\x7c\xe1\xb8\x76\x3a\x74\x6d\xfe\xb4\xeb\x16\x3a\x97\x4f\x65\x73\x41\xa5\xf2\x0c\x50\x78\x53\x5a\x00\xbd\xd2\x2c\xfb\x50\xa7\xb5\x92\x82\x8a\x77\x24\x5b\x0a\x6f\xd6\x81\x0c\x31\x42\x95\x27\xa9\xf7\x9b\x0c\x67\xde\x21\x97\x1a\x5b\xc5\xca\xfc\x69\xe1\xa1\x43\x19\xa2\x45\x59\xf0\xdb\x1c\x60\x34\x36\xde\xb1\xf5\x48\xd4\x72\x32\x51\xc9\xd5\xe9\x7f\x00\xb1\x34\xd0\x0c\x5d\x98\x52\x61\xbf\x38\xee\x22\xfe\x62\x54\xda\x39\x41\x9b\x02\xb5\x79\xc5\x6d\xba\x77\x8e\x34\xec\x73\xde\xaa\x69\xaf\x63\x29\x5b\x96\xe3\x6f\x7a\xe0\x38\xb9\xf4\x98\x9a\x20\xc1\xb0\x56\x55\xdc\xca\x7b\x9f\xed\xe3\xd6\x92\xd4\x18\x15\x6a\x97\xe8\x7d\xa0\xd8\x6a\xb6\x32\x6f\x4a\xfc\x07\x12\xf3\x3e\x2b\x52\x9d\x85\xf3\x99\xde\xbc\x29\xdd\x96\x77\x87\xc7\x1c\x8a\x4c\x6c\xe5\x54\xda\x75\x9f\x78\xaa\xd4\x9e\x6d\xeb\xfd\xda\x67\x9b\xbb\x96\xb5\x4c\x04\x52\x29\x0c\x0c\xaf\x3b\x09\x86\x4f\x19\x3d\x4f\x66\xb9\xdd\xa5\x1a\xc1\x38\xb9\x23\xff\x0f\x00\x00\xff\xff\x6b\xf2\x86\x74\xd6\x1b\x00\x00") + +func testImagesMetadataConcealmentCheck_metadata_concealmentGoBytes() ([]byte, error) { + return bindataRead( + _testImagesMetadataConcealmentCheck_metadata_concealmentGo, + "test/images/metadata-concealment/check_metadata_concealment.go", + ) +} + +func testImagesMetadataConcealmentCheck_metadata_concealmentGo() (*asset, error) { + bytes, err := testImagesMetadataConcealmentCheck_metadata_concealmentGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/metadata-concealment/check_metadata_concealment.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNautilusBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x0d\x72\x75\xf7\x0c\x0e\x09\x8a\xd4\x4f\x4c\xcf\xcb\xc8\x2f\x2e\xb1\x32\xd2\x33\x32\xd4\x05\xab\xd0\x05\xab\xe0\x82\xaa\x2e\xca\xc5\xaf\xb6\x28\x17\xa1\x92\x90\xb9\x20\x15\x50\xd5\x05\x05\xc9\x66\x26\x39\xa9\x78\xd5\x43\xd5\x40\x75\x14\x1b\x5b\x1a\x54\xe0\x55\x0f\x56\xc1\x55\x9e\x99\x97\x92\x5f\x5e\x0c\xf1\xa7\xbe\xa1\x85\x81\x25\x0e\x4d\x50\x85\x10\xef\xea\x82\x14\xa2\xeb\xb5\x34\x30\x26\x4e\xaf\xa5\x81\x31\xa6\x5e\x22\xed\xb5\x34\xb0\xe4\x02\x04\x00\x00\xff\xff\x3f\x6b\x27\xe4\x9a\x01\x00\x00") + +func testImagesNautilusBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesNautilusBaseimage, + "test/images/nautilus/BASEIMAGE", + ) +} + +func testImagesNautilusBaseimage() (*asset, error) { + bytes, err := testImagesNautilusBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nautilus/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNautilusDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xc1\x72\x9b\x30\x10\x86\xef\x7a\x8a\x7f\xa0\x87\x76\xc6\xc1\x69\x0e\x3d\xb4\x27\xea\x38\x29\x93\x04\x3a\xc6\x69\x26\xd3\xe9\x41\xc0\x1a\x36\x83\x25\x55\x5a\x42\xfc\xf6\x1d\x1c\xa7\xb5\xa7\x9c\x58\xed\xa7\xd5\xa7\x5f\x31\x16\xd6\xed\x3c\xb7\x9d\xe0\xe2\xfc\xe3\x27\xac\x3b\xc2\xcd\x50\x91\x37\x24\x14\x90\x0e\xd2\x59\x1f\x12\x15\xab\x18\xb7\x5c\x93\x09\xd4\x60\x30\x0d\x79\x48\x47\x48\x9d\xae\x3b\x7a\xeb\xcc\xf0\x83\x7c\x60\x6b\x70\x91\x9c\xe3\xfd\x04\x44\x87\x56\xf4\xe1\x8b\x8a\xb1\xb3\x03\xb6\x7a\x07\x63\x05\x43\x20\x48\xc7\x01\x1b\xee\x09\xf4\x52\x93\x13\xb0\x41\x6d\xb7\xae\x67\x6d\x6a\xc2\xc8\xd2\xed\x8f\x39\x0c\x49\x54\x8c\xc7\xc3\x08\x5b\x89\x66\x03\x8d\xda\xba\x1d\xec\xe6\x98\x83\x96\xbd\xf0\xf4\x75\x22\xee\xf3\x7c\x3e\x8e\x63\xa2\xf7\xb2\x89\xf5\xed\xbc\x7f\x05\xc3\xfc\x36\x5b\x2c\xf3\x72\x79\x76\x91\x9c\xef\xb7\xdc\x9b\x9e\x42\x80\xa7\xdf\x03\x7b\x6a\x50\xed\xa0\x9d\xeb\xb9\xd6\x55\x4f\xe8\xf5\x08\xeb\xa1\x5b\x4f\xd4\x40\xec\xe4\x3b\x7a\x16\x36\xed\x0c\xc1\x6e\x64\xd4\x9e\x54\x8c\x86\x83\x78\xae\x06\x39\x09\xeb\xcd\x8e\xc3\x09\x60\x0d\xb4\x41\x94\x96\xc8\xca\x08\x5f\xd3\x32\x2b\x67\x2a\xc6\x43\xb6\xfe\x56\xdc\xaf\xf1\x90\xae\x56\x69\xbe\xce\x96\x25\x8a\x15\x16\x45\x7e\x99\xad\xb3\x22\x2f\x51\x5c\x21\xcd\x1f\x71\x93\xe5\x97\x33\x10\x4b\x47\x1e\xf4\xe2\xfc\xe4\x6f\x3d\x78\x8a\x91\x9a\x29\xb3\x92\xe8\x44\x60\x63\x5f\x85\x82\xa3\x9a\x37\x5c\xa3\xd7\xa6\x1d\x74\x4b\x68\xed\x33\x79\xc3\xa6\x85\x23\xbf\xe5\x30\x3d\x66\x80\x36\x8d\x8a\xd1\xf3\x96\x45\xcb\x7e\xe5\xbf\x4b\x25\x4a\xa5\xab\xeb\xc9\x7e\x99\xdd\xa5\xd7\x4b\x75\xb5\x2a\xee\xf0\xee\x5f\xbd\x28\xbe\x3f\xa2\x93\x6d\x3f\x37\x7a\x10\xee\x87\x90\x3c\xb9\x16\xc7\xc5\x11\xd3\x68\xd1\xc9\x53\xb0\x06\x7f\xff\xd4\xe2\xee\x12\x3f\x23\xa1\x20\x67\x23\x55\x81\xfc\x33\xf9\xe8\x97\xfa\x13\x00\x00\xff\xff\x3d\xe3\xd5\x42\xc3\x02\x00\x00") + +func testImagesNautilusDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesNautilusDockerfile, + "test/images/nautilus/Dockerfile", + ) +} + +func testImagesNautilusDockerfile() (*asset, error) { + bytes, err := testImagesNautilusDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nautilus/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNautilusOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\x48\xce\x49\x2c\x4d\xc9\x2c\x4d\x4a\xcd\x29\x05\xf3\x73\xb3\x4b\x73\x13\x4b\x12\xd3\xb9\x00\x01\x00\x00\xff\xff\xeb\x9e\xa3\x19\x28\x00\x00\x00") + +func testImagesNautilusOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesNautilusOwners, + "test/images/nautilus/OWNERS", + ) +} + +func testImagesNautilusOwners() (*asset, error) { + bytes, err := testImagesNautilusOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nautilus/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNautilusVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe1\x02\x04\x00\x00\xff\xff\xdb\x31\xff\x00\x04\x00\x00\x00") + +func testImagesNautilusVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesNautilusVersion, + "test/images/nautilus/VERSION", + ) +} + +func testImagesNautilusVersion() (*asset, error) { + bytes, err := testImagesNautilusVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nautilus/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNautilusHtmlDataJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xe6\x52\x50\x50\xca\xcc\x4d\x4c\x4f\x55\xb2\x52\x50\xca\x4b\x2c\x2d\xc9\xcc\x29\x2d\xd6\xcb\x2a\x48\x57\xe2\xaa\xe5\x02\x04\x00\x00\xff\xff\xbe\x2a\xe3\xd9\x1e\x00\x00\x00") + +func testImagesNautilusHtmlDataJsonBytes() ([]byte, error) { + return bindataRead( + _testImagesNautilusHtmlDataJson, + "test/images/nautilus/html/data.json", + ) +} + +func testImagesNautilusHtmlDataJson() (*asset, error) { + bytes, err := testImagesNautilusHtmlDataJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nautilus/html/data.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNodePerfNpbEpBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x4d\x49\x4d\xca\x4c\xcc\xb3\x2a\x2e\x29\x4a\x2d\x49\xce\xd0\x2d\xce\xc9\xcc\xe5\x82\xca\x17\xe5\x9a\x99\xd8\x82\xc9\x32\x0b\x7d\xdc\xea\x0a\x0a\x92\xcd\x4c\x72\x52\x6d\xa1\x34\x56\x95\x80\x00\x00\x00\xff\xff\x23\xf1\xf9\x99\x72\x00\x00\x00") + +func testImagesNodePerfNpbEpBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesNodePerfNpbEpBaseimage, + "test/images/node-perf/npb-ep/BASEIMAGE", + ) +} + +func testImagesNodePerfNpbEpBaseimage() (*asset, error) { + bytes, err := testImagesNodePerfNpbEpBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/node-perf/npb-ep/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNodePerfNpbEpDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x54\x6d\x6f\xd3\x48\x17\xfd\x3e\xbf\xe2\x3c\x09\xaa\x00\xd5\x36\x2f\x8f\x10\xa2\xea\x4a\x6e\x12\xc0\x22\x75\xb2\x76\x0a\xaa\x96\x55\x34\xb6\xaf\xed\x59\xec\x19\x33\x33\x6e\x12\x10\xff\x7d\x35\x4e\x1a\xb5\xdd\x7e\x20\x52\xa4\xf1\x7d\x3d\x73\xe7\x9c\x3b\xc6\x44\x75\x3b\x2d\xaa\xda\xe2\xd5\x8b\x97\x6f\xb1\xaa\x09\x9f\xfa\x8c\xb4\x24\x4b\x06\x61\x6f\x6b\xa5\x8d\xcf\xc6\x6c\x8c\xb9\xc8\x49\x1a\x2a\xd0\xcb\x82\x34\x6c\x4d\x08\x3b\x9e\xd7\x74\xeb\x39\xc5\x67\xd2\x46\x28\x89\x57\xfe\x0b\x3c\x75\x01\xa3\x83\x6b\xf4\xec\x8c\x8d\xb1\x53\x3d\x5a\xbe\x83\x54\x16\xbd\x21\xd8\x5a\x18\x94\xa2\x21\xd0\x36\xa7\xce\x42\x48\xe4\xaa\xed\x1a\xc1\x65\x4e\xd8\x08\x5b\x0f\x6d\x0e\x45\x7c\x36\xc6\xf5\xa1\x84\xca\x2c\x17\x12\x1c\xb9\xea\x76\x50\xe5\xdd\x38\x70\x3b\x00\x76\xbf\xda\xda\xee\x5d\x10\x6c\x36\x1b\x9f\x0f\x60\x7d\xa5\xab\xa0\xd9\x07\x9a\x60\x1e\x4d\x66\x71\x3a\xf3\x5e\xf9\x2f\x86\x94\x2b\xd9\x90\x31\xd0\xf4\xbd\x17\x9a\x0a\x64\x3b\xf0\xae\x6b\x44\xce\xb3\x86\xd0\xf0\x0d\x94\x06\xaf\x34\x51\x01\xab\x1c\xde\x8d\x16\x56\xc8\xea\x14\x46\x95\x76\xc3\x35\xb1\x31\x0a\x61\xac\x16\x59\x6f\xef\x0d\xeb\x16\x9d\x30\xf7\x02\x94\x04\x97\x18\x85\x29\xa2\x74\x84\x8b\x30\x8d\xd2\x53\x36\xc6\x97\x68\xf5\x71\x71\xb5\xc2\x97\x30\x49\xc2\x78\x15\xcd\x52\x2c\x12\x4c\x16\xf1\x34\x5a\x45\x8b\x38\xc5\xe2\x3d\xc2\xf8\x1a\x9f\xa2\x78\x7a\x0a\x12\xb6\x26\x0d\xda\x76\xda\xe1\x57\x1a\xc2\x8d\x91\x0a\x37\xb3\x94\xe8\x1e\x80\x52\xed\x01\x99\x8e\x72\x51\x8a\x1c\x0d\x97\x55\xcf\x2b\x42\xa5\x6e\x48\x4b\x21\x2b\x74\xa4\x5b\x61\xdc\x63\x1a\x70\x59\xb0\x31\x1a\xd1\x0a\xcb\xed\x60\xf9\xcf\xa5\x7c\xc6\xc2\xe4\x83\x43\x3f\x8b\x2e\xc3\x0f\x33\xf6\x3e\x59\x5c\xe2\xc9\xf1\x1b\xdc\x20\xeb\x45\x53\xac\xa5\x2a\x68\xdd\x91\x2e\xd7\xb2\xcb\xd6\xd4\x31\x36\x49\x16\x69\xba\xbe\xb8\x8a\xe6\xd3\xf5\x64\xb1\xbc\xc6\x77\x6a\x7b\xef\xcf\xd9\xe5\x55\x98\x4c\x3e\x7a\xc6\x35\xcd\x11\xf4\x46\x07\x99\x90\x01\x63\xc9\x55\x0c\xde\x59\xaf\x22\x8b\xbe\x2b\xb8\x25\x9c\x9c\x1c\x2d\x42\x1a\xcb\x9b\x06\xde\x6e\xdf\xd1\x23\x63\x48\x5a\xc1\x1b\x54\xa5\xd2\x56\x73\xc9\x58\x38\x9d\xde\xa5\x86\xe4\xc6\xfd\xb9\x5f\xa9\x9b\x80\x1b\x43\xd6\x04\xb2\xcb\x82\x78\x79\xf1\xda\x7f\xed\xbf\xf4\x2d\xd7\x7e\xf5\x03\xfe\xd0\xdb\x72\x8d\xed\x8f\x12\x0f\xbc\x8c\x7d\x59\x24\x9f\xa6\x51\x02\xff\x98\x78\x38\x78\x8b\xcb\xe5\x90\x2a\x4a\xfc\x85\x27\x4f\xb9\xce\xeb\x67\xf8\xdf\x39\x46\xdb\xb7\x6f\xd6\x6f\xfe\x3f\xc2\xdf\x67\x6e\x9c\x12\x5f\x99\x63\xad\x53\x99\x09\xbc\x36\x6f\x55\x41\xcd\x79\x4b\x85\xe8\xdb\x20\xa8\x90\x2b\x59\x8a\x2a\x88\xc3\xd4\x37\xbc\xed\x1a\x32\x41\xcb\xbf\x91\x5f\x50\xe9\x57\x79\xbe\xde\xbe\x7d\x83\x3f\x6e\xa3\x6e\x3d\x67\xf8\xca\xa8\x31\x74\x28\x9e\x77\xbf\x55\xe6\x91\x22\xa5\x18\x2e\xe1\x4c\x98\x2d\x31\x99\x87\x69\x7a\x3e\x65\x6c\xbf\x46\x1c\x6d\x1c\x25\x8e\xe2\x69\x44\xa6\xb9\x16\x64\xf0\xd4\xd4\xdc\x59\x54\xf6\x0f\xe5\x76\x90\xbc\x79\xe6\x04\xe4\xf4\x2b\x6f\x48\x0a\x92\x16\x8d\xca\x07\x7e\xc1\x28\xd8\x9a\x5b\x08\x8b\x9c\x4b\x64\xe4\x54\x2e\xa8\x80\x90\xd6\xb9\x9c\xc6\x5a\x3e\x2c\x0b\xe9\xd6\x00\x69\xa7\xc4\x81\xd2\x94\x2b\x59\xec\x1f\x1e\xc6\xf2\x8a\xf6\x4f\xd6\x7e\x2b\x84\x86\xd7\x21\x68\x44\xe6\x0d\x3b\xe3\xe4\x04\xa5\x90\xc5\x9e\x58\x8d\xc8\xe0\x49\xde\x12\x46\xcf\x7d\xa3\xfc\xe7\x23\x78\xb4\xa5\xdc\x0d\xeb\xe7\xaf\x3b\x59\x5f\xcf\xd8\x43\x6e\x33\x36\xb0\xd6\xf3\x4a\xad\xda\xf3\xc7\x59\x8e\xc7\x18\x31\xd0\x99\x3a\x7f\xea\x6f\x11\xfc\x56\x91\x23\x8c\xe3\x89\xcd\xe2\xcf\x98\x4f\xd7\xf3\xe8\x22\x09\x93\xeb\xf5\x32\x5c\x7d\x3c\x1f\x3d\xf9\xf9\xc0\xf4\xeb\xdd\x31\x63\xc4\xd8\x2c\x5e\x25\xd7\xcb\x45\x14\xaf\x70\xe8\xcf\xfe\x0d\x00\x00\xff\xff\xc8\xdd\xe0\xa9\x0a\x06\x00\x00") + +func testImagesNodePerfNpbEpDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesNodePerfNpbEpDockerfile, + "test/images/node-perf/npb-ep/Dockerfile", + ) +} + +func testImagesNodePerfNpbEpDockerfile() (*asset, error) { + bytes, err := testImagesNodePerfNpbEpDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/node-perf/npb-ep/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNodePerfNpbEpVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") + +func testImagesNodePerfNpbEpVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesNodePerfNpbEpVersion, + "test/images/node-perf/npb-ep/VERSION", + ) +} + +func testImagesNodePerfNpbEpVersion() (*asset, error) { + bytes, err := testImagesNodePerfNpbEpVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/node-perf/npb-ep/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNodePerfNpbIsBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x4d\x49\x4d\xca\x4c\xcc\xb3\x2a\x2e\x29\x4a\x2d\x49\xce\xd0\x2d\xce\xc9\xcc\xe5\x82\xca\x17\xe5\x9a\x99\xd8\x82\xc9\x32\x0b\x7d\xdc\xea\x0a\x0a\x92\xcd\x4c\x72\x52\x6d\xa1\x34\x56\x95\x80\x00\x00\x00\xff\xff\x23\xf1\xf9\x99\x72\x00\x00\x00") + +func testImagesNodePerfNpbIsBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesNodePerfNpbIsBaseimage, + "test/images/node-perf/npb-is/BASEIMAGE", + ) +} + +func testImagesNodePerfNpbIsBaseimage() (*asset, error) { + bytes, err := testImagesNodePerfNpbIsBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/node-perf/npb-is/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNodePerfNpbIsDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x54\x6d\x6f\xdb\x38\x13\xfc\xce\x5f\x31\x8f\x5d\x04\x6d\x11\x49\x7d\x79\x50\x14\x0d\x72\x80\x62\xbb\xad\x50\x47\xce\x49\x4e\x8b\xe0\x72\x30\x28\x69\x25\xf1\x22\x91\x2a\x49\xc5\x76\x8b\xfe\xf7\x03\x65\xc7\x48\x72\xf9\x50\x03\x06\xe8\xdd\xe5\xee\x70\x3c\xb3\x63\x4c\x54\xb7\xd5\xa2\xaa\x2d\xde\xbc\x7a\xfd\x1e\xcb\x9a\xf0\xa5\xcf\x48\x4b\xb2\x64\x10\xf6\xb6\x56\xda\xf8\x6c\xcc\xc6\x98\x8b\x9c\xa4\xa1\x02\xbd\x2c\x48\xc3\xd6\x84\xb0\xe3\x79\x4d\x77\x99\x63\x7c\x25\x6d\x84\x92\x78\xe3\xbf\xc2\x73\x57\x30\xda\xa7\x46\x2f\x4e\xd8\x18\x5b\xd5\xa3\xe5\x5b\x48\x65\xd1\x1b\x82\xad\x85\x41\x29\x1a\x02\x6d\x72\xea\x2c\x84\x44\xae\xda\xae\x11\x5c\xe6\x84\xb5\xb0\xf5\x30\x66\xdf\xc4\x67\x63\x5c\xed\x5b\xa8\xcc\x72\x21\xc1\x91\xab\x6e\x0b\x55\xde\xaf\x03\xb7\x03\x60\xf7\xa9\xad\xed\x3e\x04\xc1\x7a\xbd\xf6\xf9\x00\xd6\x57\xba\x0a\x9a\x5d\xa1\x09\xe6\xd1\x64\x16\xa7\x33\xef\x8d\xff\x6a\xb8\x72\x29\x1b\x32\x06\x9a\xbe\xf7\x42\x53\x81\x6c\x0b\xde\x75\x8d\xc8\x79\xd6\x10\x1a\xbe\x86\xd2\xe0\x95\x26\x2a\x60\x95\xc3\xbb\xd6\xc2\x0a\x59\x1d\xc3\xa8\xd2\xae\xb9\x26\x36\x46\x21\x8c\xd5\x22\xeb\xed\x03\xb2\xee\xd0\x09\xf3\xa0\x40\x49\x70\x89\x51\x98\x22\x4a\x47\x38\x0b\xd3\x28\x3d\x66\x63\x7c\x8b\x96\x9f\x17\x97\x4b\x7c\x0b\x93\x24\x8c\x97\xd1\x2c\xc5\x22\xc1\x64\x11\x4f\xa3\x65\xb4\x88\x53\x2c\x3e\x22\x8c\xaf\xf0\x25\x8a\xa7\xc7\x20\x61\x6b\xd2\xa0\x4d\xa7\x1d\x7e\xa5\x21\x1c\x8d\x54\x38\xce\x52\xa2\x07\x00\x4a\xb5\x03\x64\x3a\xca\x45\x29\x72\x34\x5c\x56\x3d\xaf\x08\x95\xba\x25\x2d\x85\xac\xd0\x91\x6e\x85\x71\x7f\xa6\x01\x97\x05\x1b\xa3\x11\xad\xb0\xdc\x0e\x91\xff\x3c\xca\x67\x2c\x4c\x3e\x39\xf4\xb3\xe8\x3c\xfc\x34\x63\x1f\x93\xc5\x39\x9e\x1d\x7e\x83\x1b\x64\xbd\x68\x8a\x95\x54\x05\xad\x3a\xd2\xe5\x4a\x76\xd9\x4a\x18\xc6\x26\xc9\x22\x4d\x57\x67\x97\xd1\x7c\xba\x9a\x2c\x2e\xae\xf0\x9d\xda\xde\xfb\x73\x76\x7e\x19\x26\x93\xcf\x9e\x71\x43\x73\x04\xbd\xd1\x41\x26\x64\xc0\x58\x72\x19\x83\x77\xd6\xab\xc8\xa2\xef\x0a\x6e\x09\x47\x47\x87\x88\x90\xc6\xf2\xa6\x81\xb7\xdd\x4d\xf4\xc8\x18\x92\x56\xf0\x06\x55\xa9\xb4\xd5\x5c\x32\x16\x4e\xa7\xf7\xa5\x21\xb9\x71\x5f\xee\x57\xea\x36\xe0\xc6\x90\x35\x81\xec\xb2\x20\xbe\x38\x7b\xeb\xbf\xf5\x5f\xfb\x96\x6b\xbf\xfa\x01\x7f\x98\x6d\xb9\xc6\xe6\x47\x89\x47\x59\xc6\xbe\x2d\x92\x2f\xd3\x28\x81\x7f\xb8\xb8\x3f\x78\x8b\xf3\x0b\xc6\xc6\x98\x68\x72\x68\x07\x5c\xc8\x95\x2c\x45\x85\x8c\x9b\x9d\x0a\x1c\x9d\x5c\xe7\xb5\xb0\x94\xdb\x5e\x93\xe3\x7d\x5f\xea\x52\x6b\xa5\x6f\x1a\xc5\x8b\x1d\x06\x51\xe2\x2f\x3c\x7b\xee\xea\x5f\xe0\x7f\xa7\x18\x6d\xde\xbf\x5b\xbd\xfb\xff\x08\x7f\x9f\xb8\x6a\x89\x6b\xe6\xe4\xef\x5a\x9b\xc0\x6b\xf3\x56\x15\xd4\x9c\xb6\x54\x88\xbe\x0d\x82\x6a\x3f\x3c\x88\xc3\xd4\x37\xbc\xed\x1a\x32\x41\xcb\x6f\xc8\x2f\xa8\xf4\xab\x3c\x5f\x6d\xde\xbf\xc3\x1f\x77\x55\x77\x99\x13\x5c\x33\x6a\x0c\xed\x9b\xe7\xdd\x6f\xb5\x79\xa2\x49\x29\x86\x47\xb8\x10\xa2\x14\x93\x79\x98\xa6\xa7\xd3\x81\x21\xd5\x6d\x9d\xfe\xdc\x8b\x0f\x2e\x6c\x44\xa6\xb9\x16\x64\xf0\xdc\xd4\xdc\x45\x54\xf6\x0f\xe5\x76\xd8\x1d\xe6\x85\x73\xa2\x5b\x04\xf2\x96\xa4\x20\x69\xd1\xa8\x7c\x10\x2a\x8c\x82\xad\xb9\x85\xb0\xc8\xb9\x44\x46\x6e\x5d\x08\x2a\x20\xa4\x75\x29\x67\xd6\x96\x0f\x5b\x47\xba\x7d\x42\xda\x59\x7a\xf0\x06\xe5\xea\x40\xbf\xb1\xbc\xa2\x1d\xef\xed\x4d\x21\x34\xbc\x0e\x41\x23\x32\x6f\x58\x3e\x47\x47\x28\x85\x2c\x76\x0a\x6d\x44\x06\x4f\xf2\x96\x30\x7a\xe9\x1b\xe5\xbf\x1c\xc1\xa3\x0d\xe5\x8e\xac\x9f\xbf\xee\xdd\xba\x3e\x61\x8f\x4d\xc2\xd8\x20\x7f\xcf\x2b\xb5\x6a\x4f\x9f\xb6\x0b\x9e\x92\xd6\xe0\x0b\x61\xfc\xa9\xbf\x41\xf0\x5b\x4d\x0e\x30\x0e\x27\x36\x8b\xbf\x62\x3e\x5d\xcd\xa3\xb3\x24\x4c\xae\x56\x17\xe1\xf2\xf3\xe9\xe8\xd9\xcf\x47\xa1\x5f\x1f\x0e\x37\x46\x8c\xcd\xe2\x65\x72\x75\xb1\x88\xe2\x25\xf6\xf3\xd9\xbf\x01\x00\x00\xff\xff\xde\x2a\x2d\x70\x53\x06\x00\x00") + +func testImagesNodePerfNpbIsDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesNodePerfNpbIsDockerfile, + "test/images/node-perf/npb-is/Dockerfile", + ) +} + +func testImagesNodePerfNpbIsDockerfile() (*asset, error) { + bytes, err := testImagesNodePerfNpbIsDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/node-perf/npb-is/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNodePerfNpbIsVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") + +func testImagesNodePerfNpbIsVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesNodePerfNpbIsVersion, + "test/images/node-perf/npb-is/VERSION", + ) +} + +func testImagesNodePerfNpbIsVersion() (*asset, error) { + bytes, err := testImagesNodePerfNpbIsVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/node-perf/npb-is/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNodePerfTfWideDeepBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x2d\xa8\x2c\xc9\xc8\xcf\xb3\x32\xd6\x33\xd3\x2d\xce\xc9\xcc\xd5\x2d\x2e\x29\x4a\x2d\x49\xce\xe0\x82\xaa\x29\xca\x35\x33\xb1\x05\x93\x65\x16\xfa\xb8\xd4\x02\x02\x00\x00\xff\xff\xea\xf7\x16\x80\x50\x00\x00\x00") + +func testImagesNodePerfTfWideDeepBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesNodePerfTfWideDeepBaseimage, + "test/images/node-perf/tf-wide-deep/BASEIMAGE", + ) +} + +func testImagesNodePerfTfWideDeepBaseimage() (*asset, error) { + bytes, err := testImagesNodePerfTfWideDeepBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/node-perf/tf-wide-deep/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNodePerfTfWideDeepDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x92\x51\x6f\x9c\x38\x14\x85\xdf\xfd\x2b\x8e\x32\x51\xd4\xac\x02\xa4\xd1\x6a\xb5\x9b\x3c\xd1\x09\xed\xa0\x24\x90\x05\xa6\xd1\x48\x95\x22\x0f\x5c\xc0\x12\xd8\xae\x6d\x42\xe8\xaf\x5f\x31\x99\x64\x36\xdb\x4a\xcb\x93\xaf\xef\x39\x87\xcf\xd7\x5e\x60\xa9\xf4\x64\x44\xd3\x3a\x5c\x9c\x7f\xfc\x13\x45\x4b\xb8\x19\xb6\x64\x24\x39\xb2\x08\x07\xd7\x2a\x63\x7d\xb6\x60\x0b\xdc\x8a\x92\xa4\xa5\x0a\x83\xac\xc8\xc0\xb5\x84\x50\xf3\xb2\xa5\xd7\xce\x19\xbe\x92\xb1\x42\x49\x5c\xf8\xe7\xf8\x30\x0b\x8e\xf6\xad\xa3\xd3\x2b\xb6\xc0\xa4\x06\xf4\x7c\x82\x54\x0e\x83\x25\xb8\x56\x58\xd4\xa2\x23\xd0\x73\x49\xda\x41\x48\x94\xaa\xd7\x9d\xe0\xb2\x24\x8c\xc2\xb5\xbb\xdf\xec\x43\x7c\xb6\xc0\x66\x1f\xa1\xb6\x8e\x0b\x09\x8e\x52\xe9\x09\xaa\xfe\xb7\x0e\xdc\xed\x80\xe7\xaf\x75\x4e\x5f\x06\xc1\x38\x8e\x3e\xdf\xc1\xfa\xca\x34\x41\xf7\x22\xb4\xc1\x6d\xbc\x8c\x92\x3c\xf2\x2e\xfc\xf3\x9d\x65\x2d\x3b\xb2\x16\x86\xbe\x0f\xc2\x50\x85\xed\x04\xae\x75\x27\x4a\xbe\xed\x08\x1d\x1f\xa1\x0c\x78\x63\x88\x2a\x38\x35\xf3\x8e\x46\x38\x21\x9b\x33\x58\x55\xbb\x91\x1b\x62\x0b\x54\xc2\x3a\x23\xb6\x83\x7b\x37\xac\x57\x3a\x61\xdf\x09\x94\x04\x97\x38\x0a\x73\xc4\xf9\x11\x3e\x85\x79\x9c\x9f\xb1\x05\x1e\xe2\x62\x95\xae\x0b\x3c\x84\x59\x16\x26\x45\x1c\xe5\x48\x33\x2c\xd3\xe4\x3a\x2e\xe2\x34\xc9\x91\x7e\x46\x98\x6c\x70\x13\x27\xd7\x67\x20\xe1\x5a\x32\xa0\x67\x6d\x66\x7e\x65\x20\xe6\x31\x52\x35\xcf\x2c\x27\x7a\x07\x50\xab\x17\x20\xab\xa9\x14\xb5\x28\xd1\x71\xd9\x0c\xbc\x21\x34\xea\x89\x8c\x14\xb2\x81\x26\xd3\x0b\x3b\x5f\xa6\x05\x97\x15\x5b\xa0\x13\xbd\x70\xdc\xed\x76\x7e\x3a\x94\xcf\x58\x98\x7d\x99\xe9\xa3\xf8\x2e\xfc\x12\xb1\xcf\x59\x7a\x87\xe3\x43\xcd\x96\x59\x9a\xe7\x8f\x9f\xd6\xf1\xed\xf5\xe3\x32\xbd\xdf\xe0\x3b\xf5\x83\xf7\x77\x74\xb7\x0e\xb3\xe5\xca\xb3\x73\x74\x89\x60\xb0\x26\xd8\x0a\x19\x30\x96\xad\x13\x70\xed\xbc\x86\x1c\x06\x5d\x71\x47\x38\x39\x79\xdb\x11\xd2\x3a\xde\x75\xf0\x26\x8c\x73\xed\x44\x4f\x2f\x9e\x92\x5b\xc2\xf1\x87\x41\xf2\x9e\xe0\xf5\xa7\xf3\x25\x7d\x63\xf3\x5b\xe0\xdc\x94\xed\x1f\xbf\x9f\xee\x4b\x40\x0b\xfd\x16\xe4\x48\x5a\x65\xea\x4e\x8d\xde\x5e\x77\xf5\xa6\xbb\x7a\x5d\xfe\xf6\x7f\xde\x5f\x78\xc8\xf2\xf2\x85\x6c\x07\x3a\x3f\x48\x7b\x19\x04\x8d\x70\xed\xb0\xf5\x4b\xd5\x07\x07\x7b\xd0\xab\x8a\x3a\x1b\xcc\x00\xe2\x89\x82\xa7\x8f\xfe\x5f\xfe\xb9\xef\xb8\xf1\x9b\x1f\xf8\xc6\x4e\x4e\xe0\xb8\xc1\xf3\x8f\x1a\xbf\x68\x99\x1e\xde\x7f\x1a\x8c\x3d\xa4\xd9\xcd\x75\x9c\xe1\x78\x95\xde\x45\xfb\x7c\x6f\x27\x09\x54\x5d\x8b\x52\xf0\x2e\x18\x45\x45\x8f\x15\x91\x66\x51\xf2\x15\xf7\x9b\x62\x95\x26\xf7\x61\xb1\xc2\xf1\x61\x7d\xf9\x73\x00\x63\x51\x52\x64\x9b\xfb\x34\x4e\x0a\xe8\xc9\xb5\x4a\xc2\x3f\x84\xf9\x7a\x62\xff\x04\x00\x00\xff\xff\xcb\x15\x24\x20\x61\x04\x00\x00") + +func testImagesNodePerfTfWideDeepDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesNodePerfTfWideDeepDockerfile, + "test/images/node-perf/tf-wide-deep/Dockerfile", + ) +} + +func testImagesNodePerfTfWideDeepDockerfile() (*asset, error) { + bytes, err := testImagesNodePerfTfWideDeepDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/node-perf/tf-wide-deep/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNodePerfTfWideDeepVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") + +func testImagesNodePerfTfWideDeepVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesNodePerfTfWideDeepVersion, + "test/images/node-perf/tf-wide-deep/VERSION", + ) +} + +func testImagesNodePerfTfWideDeepVersion() (*asset, error) { + bytes, err := testImagesNodePerfTfWideDeepVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/node-perf/tf-wide-deep/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNonewprivsGitignore = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xcb\x2b\xe0\x02\x04\x00\x00\xff\xff\xee\x29\x1e\x77\x04\x00\x00\x00") + +func testImagesNonewprivsGitignoreBytes() ([]byte, error) { + return bindataRead( + _testImagesNonewprivsGitignore, + "test/images/nonewprivs/.gitignore", + ) +} + +func testImagesNonewprivsGitignore() (*asset, error) { + bytes, err := testImagesNonewprivsGitignoreBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nonewprivs/.gitignore", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNonewprivsBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\x33\xe3\x82\x0a\x17\xe5\xda\x26\x16\xe5\x1a\x1b\x95\x99\xe9\x63\x93\x04\xe9\x01\x91\x65\x16\x98\xd2\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\x01\x20\x00\x00\xff\xff\xeb\x4c\x33\x25\x74\x00\x00\x00") + +func testImagesNonewprivsBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesNonewprivsBaseimage, + "test/images/nonewprivs/BASEIMAGE", + ) +} + +func testImagesNonewprivsBaseimage() (*asset, error) { + bytes, err := testImagesNonewprivsBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nonewprivs/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNonewprivsDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x91\x51\x6f\x9b\x3e\x14\xc5\xdf\xfd\x29\x8e\xc2\xff\xe1\x3f\x2d\x85\xae\x2f\x93\xb6\x27\x4a\xd2\x16\xb5\x81\x0d\x92\x55\xd5\x34\x55\x0e\xdc\xc0\x95\xc0\x76\x6d\x33\x9a\x6f\x3f\x41\x5b\x6d\xd1\xe6\x37\xdf\x73\x7c\xfc\xf3\x71\x80\x44\x9b\xa3\xe5\xa6\xf5\xb8\x38\xff\xf0\x11\xdb\x96\x70\x3b\xec\xc9\x2a\xf2\xe4\x10\x0f\xbe\xd5\xd6\x85\x22\x10\x01\xee\xb8\x22\xe5\xa8\xc6\xa0\x6a\xb2\xf0\x2d\x21\x36\xb2\x6a\xe9\x4d\x59\xe2\x1b\x59\xc7\x5a\xe1\x22\x3c\xc7\xff\x93\x61\xf1\x2a\x2d\xde\x7d\x16\x01\x8e\x7a\x40\x2f\x8f\x50\xda\x63\x70\x04\xdf\xb2\xc3\x81\x3b\x02\x3d\x57\x64\x3c\x58\xa1\xd2\xbd\xe9\x58\xaa\x8a\x30\xb2\x6f\xe7\x6b\x5e\x43\x42\x11\xe0\xe1\x35\x42\xef\xbd\x64\x05\x89\x4a\x9b\x23\xf4\xe1\x4f\x1f\xa4\x9f\x81\xa7\xd5\x7a\x6f\x3e\x45\xd1\x38\x8e\xa1\x9c\x61\x43\x6d\x9b\xa8\x7b\x31\xba\xe8\x2e\x4d\xd6\x59\xb9\x3e\xbb\x08\xcf\xe7\x23\x3b\xd5\x91\x73\xb0\xf4\x34\xb0\xa5\x1a\xfb\x23\xa4\x31\x1d\x57\x72\xdf\x11\x3a\x39\x42\x5b\xc8\xc6\x12\xd5\xf0\x7a\xe2\x1d\x2d\x7b\x56\xcd\x12\x4e\x1f\xfc\x28\x2d\x89\x00\x35\x3b\x6f\x79\x3f\xf8\x93\xb2\xde\xe8\xd8\x9d\x18\xb4\x82\x54\x58\xc4\x25\xd2\x72\x81\xcb\xb8\x4c\xcb\xa5\x08\x70\x9f\x6e\x6f\xf2\xdd\x16\xf7\x71\x51\xc4\xd9\x36\x5d\x97\xc8\x0b\x24\x79\xb6\x4a\xb7\x69\x9e\x95\xc8\xaf\x10\x67\x0f\xb8\x4d\xb3\xd5\x12\xc4\xbe\x25\x0b\x7a\x36\x76\xe2\xd7\x16\x3c\xd5\x48\xf5\xd4\x59\x49\x74\x02\x70\xd0\x2f\x40\xce\x50\xc5\x07\xae\xd0\x49\xd5\x0c\xb2\x21\x34\xfa\x27\x59\xc5\xaa\x81\x21\xdb\xb3\x9b\x3e\xd3\x41\xaa\x5a\x04\xe8\xb8\x67\x2f\xfd\x3c\xf9\xeb\x51\xa1\x10\x71\x71\x3d\xd1\xaf\xd3\x4d\x7c\xbd\x16\x57\x45\xbe\xc1\x7f\xbf\xf7\x22\x29\xf2\xb2\x7c\xbc\xdc\xa5\x77\xab\xc7\x24\xff\xf2\x80\x27\xea\x87\xb3\xaf\xeb\xcd\x2e\x2e\x92\x9b\x33\x37\x45\x57\x88\x06\x67\xa3\x3d\xab\x48\x88\xd9\xa4\x94\x79\x99\x75\xba\x92\xdd\xac\x28\x65\x44\xb1\xcb\x50\xb5\xbd\xae\xf1\xde\xfd\x4b\x17\xc9\x66\x85\xef\x0b\xa5\xcc\xe2\x87\xf8\x15\x00\x00\xff\xff\x6f\x34\x51\x3e\xe5\x02\x00\x00") + +func testImagesNonewprivsDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesNonewprivsDockerfile, + "test/images/nonewprivs/Dockerfile", + ) +} + +func testImagesNonewprivsDockerfile() (*asset, error) { + bytes, err := testImagesNonewprivsDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nonewprivs/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNonewprivsMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6b\xdb\x3e\x14\xc5\x9f\xff\xfa\x14\x87\xb8\x0f\x09\xa4\x4e\xff\x65\xac\xd0\x51\x86\x97\x64\xa9\x69\x67\x0f\x3b\x6d\xe9\x53\x91\xed\x1b\xfb\x82\x23\x69\x92\x3c\x27\xdf\x7e\x28\x6d\x61\x65\x7a\xbb\xf7\x9e\x7b\xf4\xd3\x51\x84\xa5\x36\x47\xcb\x6d\xe7\x71\x79\xf1\xff\x15\xb6\x1d\xe1\x6e\xa8\xc8\x2a\xf2\xe4\x90\x0c\xbe\xd3\xd6\xc5\x22\x12\x11\xee\xb9\x26\xe5\xa8\xc1\xa0\x1a\xb2\xf0\x1d\x21\x31\xb2\xee\xe8\x7d\x32\xc7\x23\x59\xc7\x5a\xe1\x32\xbe\xc0\x34\x08\x26\x6f\xa3\xc9\xec\x8b\x88\x70\xd4\x03\xf6\xf2\x08\xa5\x3d\x06\x47\xf0\x1d\x3b\xec\xb8\x27\xd0\xa1\x26\xe3\xc1\x0a\xb5\xde\x9b\x9e\xa5\xaa\x09\x23\xfb\xee\x74\xcd\x9b\x49\x2c\x22\x3c\xbf\x59\xe8\xca\x4b\x56\x90\xa8\xb5\x39\x42\xef\xfe\xd6\x41\xfa\x13\x70\x38\x9d\xf7\xe6\x7a\xb1\x18\xc7\x31\x96\x27\xd8\x58\xdb\x76\xd1\xbf\x0a\xdd\xe2\x3e\x5d\xae\xb3\x72\x7d\x7e\x19\x5f\x9c\x56\x1e\x54\x4f\xce\xc1\xd2\xaf\x81\x2d\x35\xa8\x8e\x90\xc6\xf4\x5c\xcb\xaa\x27\xf4\x72\x84\xb6\x90\xad\x25\x6a\xe0\x75\xe0\x1d\x2d\x7b\x56\xed\x1c\x4e\xef\xfc\x28\x2d\x89\x08\x0d\x3b\x6f\xb9\x1a\xfc\x87\xb0\xde\xe9\xd8\x7d\x10\x68\x05\xa9\x30\x49\x4a\xa4\xe5\x04\xdf\x92\x32\x2d\xe7\x22\xc2\x53\xba\xbd\xcd\x1f\xb6\x78\x4a\x8a\x22\xc9\xb6\xe9\xba\x44\x5e\x60\x99\x67\xab\x74\x9b\xe6\x59\x89\xfc\x3b\x92\xec\x19\x77\x69\xb6\x9a\x83\xd8\x77\x64\x41\x07\x63\x03\xbf\xb6\xe0\x10\x23\x35\x21\xb3\x92\xe8\x03\xc0\x4e\xbf\x02\x39\x43\x35\xef\xb8\x46\x2f\x55\x3b\xc8\x96\xd0\xea\xdf\x64\x15\xab\x16\x86\xec\x9e\x5d\xf8\x4c\x07\xa9\x1a\x11\xa1\xe7\x3d\x7b\xe9\x4f\x9d\x7f\x1e\x15\x0b\x51\x16\xcb\x12\x37\x50\xca\x88\xbc\xc4\xd7\x1b\xf4\xac\x86\x83\x48\x8a\xe5\x6d\xa8\xe4\xbe\xf9\xfc\x49\x6c\x93\x62\xb3\xde\x86\xfa\x6c\xba\x7c\x28\x56\x69\x31\x13\x9b\x3c\x29\x7e\x84\xd6\x95\xd8\xe4\xf7\x49\xb6\x79\x79\x5c\x17\x65\x9a\x67\x27\x13\xe9\xc9\xf9\x60\xfe\xb2\x4a\x0b\x84\x3d\xa5\x7d\xc3\x16\x67\x53\xd7\x51\xdf\xc3\x8c\xcd\x6c\x26\xe8\x60\xb4\xf5\x42\x54\xac\xae\xc5\x7f\x71\xbc\xe0\xbd\x6c\xe9\x7c\xf0\xdc\xc7\xae\x43\xc5\x0a\x67\xd3\x80\x38\x13\x22\xfe\x79\x9b\x67\xcf\xd7\xa1\x29\xfe\x04\x00\x00\xff\xff\x9e\x9e\xea\x79\x02\x03\x00\x00") + +func testImagesNonewprivsMakefileBytes() ([]byte, error) { + return bindataRead( + _testImagesNonewprivsMakefile, + "test/images/nonewprivs/Makefile", + ) +} + +func testImagesNonewprivsMakefile() (*asset, error) { + bytes, err := testImagesNonewprivsMakefileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nonewprivs/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNonewprivsOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\xc8\x4a\x2d\x2e\x4e\x2b\x4a\xac\x02\x73\x72\xb3\x4b\x73\x13\x4b\x12\xd3\xb9\x00\x01\x00\x00\xff\xff\x11\x31\x6a\x04\x25\x00\x00\x00") + +func testImagesNonewprivsOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesNonewprivsOwners, + "test/images/nonewprivs/OWNERS", + ) +} + +func testImagesNonewprivsOwners() (*asset, error) { + bytes, err := testImagesNonewprivsOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nonewprivs/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNonewprivsVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe2\x02\x04\x00\x00\xff\xff\x5d\x96\xa5\x56\x04\x00\x00\x00") + +func testImagesNonewprivsVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesNonewprivsVersion, + "test/images/nonewprivs/VERSION", + ) +} + +func testImagesNonewprivsVersion() (*asset, error) { + bytes, err := testImagesNonewprivsVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nonewprivs/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNonewprivsNnpGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x6b\xdb\x4c\x10\x86\xcf\x99\x5f\xf1\x22\xf8\xc0\x0e\xfe\xe4\x34\x97\x42\x7a\x52\x13\xb7\x15\x09\x76\xb1\x9c\x86\x40\x2f\x6b\x69\x24\x0d\x95\x76\xb7\xbb\xa3\x28\xa6\xf4\xbf\x17\x39\x2e\x24\xf4\xb8\xcc\xc3\x3b\xcf\xbe\xb3\x3c\xa7\x6b\xe7\x0f\x41\x9a\x56\x71\x79\xf1\xee\x3d\x76\x2d\xe3\x76\xd8\x73\xb0\xac\x1c\x91\x0d\xda\xba\x10\x53\xa2\x3b\x29\xd9\x46\xae\x30\xd8\x8a\x03\xb4\x65\x64\xde\x94\x2d\xe3\x34\x59\xe0\x1b\x87\x28\xce\xe2\x32\xbd\xc0\x6c\x02\x92\xd3\x28\x99\x7f\xa0\x83\x1b\xd0\x9b\x03\xac\x53\x0c\x91\xa1\xad\x44\xd4\xd2\x31\xf8\xb9\x64\xaf\x10\x8b\xd2\xf5\xbe\x13\x63\x4b\xc6\x28\xda\x1e\x97\x9c\x22\x52\x7a\x3c\x05\xb8\xbd\x1a\xb1\x30\x28\x9d\x3f\xc0\xd5\xaf\x29\x18\x25\x02\x80\x56\xd5\x5f\x2d\x97\xe3\x38\xa6\xe6\x68\x99\xba\xd0\x2c\xbb\x17\x2a\x2e\xef\xf2\xeb\xd5\xba\x58\xfd\x7f\x99\x5e\x10\xdd\xdb\x8e\x63\x44\xe0\x9f\x83\x04\xae\xb0\x3f\xc0\x78\xdf\x49\x69\xf6\x1d\xa3\x33\x23\x5c\x80\x69\x02\x73\x05\x75\x93\xe7\x18\x44\xc5\x36\x0b\x44\x57\xeb\x68\x02\x53\x25\x51\x83\xec\x07\x7d\x53\xd0\x5f\x2b\x89\x78\x0d\x38\x0b\x63\x91\x64\x05\xf2\x22\xc1\xc7\xac\xc8\x8b\x05\x3d\xe4\xbb\x2f\x9b\xfb\x1d\x1e\xb2\xed\x36\x5b\xef\xf2\x55\x81\xcd\x16\xd7\x9b\xf5\x4d\xbe\xcb\x37\xeb\x02\x9b\x4f\xc8\xd6\x8f\xb8\xcd\xd7\x37\x0b\xb0\x68\xcb\x01\xfc\xec\xc3\xe4\xee\x02\x64\xaa\x8e\xab\x94\x0a\xe6\x37\xcb\x6b\xf7\x22\x13\x3d\x97\x52\x4b\x89\xce\xd8\x66\x30\x0d\xa3\x71\x4f\x1c\xac\xd8\x06\x9e\x43\x2f\x71\x3a\x5e\x84\xb1\x15\x75\xd2\x8b\x1a\x3d\xbe\xff\xf9\x4e\x4a\xe7\x4b\x22\x6f\xca\x1f\x53\x48\x6f\xc4\x12\x49\xef\x5d\x50\xcc\xe8\x2c\xa9\x7b\x4d\xe8\x2c\x71\x31\xa1\x39\x51\x3d\xd8\xf2\xc8\xcc\xe6\xf8\x45\x67\x75\xaf\xe9\xd7\x20\x56\xeb\x59\xb2\xaa\x6b\x2e\x55\x9e\x18\x83\x54\x57\xf8\xaf\xfa\x6e\x93\x05\x5c\x4c\x3f\xb3\xf2\x20\xd5\x6c\x3e\xa7\xdf\xf4\x27\x00\x00\xff\xff\x1d\x9d\xa7\x78\xa3\x02\x00\x00") + +func testImagesNonewprivsNnpGoBytes() ([]byte, error) { + return bindataRead( + _testImagesNonewprivsNnpGo, + "test/images/nonewprivs/nnp.go", + ) +} + +func testImagesNonewprivsNnpGo() (*asset, error) { + bytes, err := testImagesNonewprivsNnpGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nonewprivs/nnp.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNonrootBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\xcd\xb6\x28\xd6\x4b\x4f\x2e\xd2\xcb\xcc\xd7\x4f\x49\x4d\xca\x4c\xcc\xd3\x4d\x4a\x2c\x4e\xd5\x05\x4b\x5a\x95\x19\xea\x19\xe8\x19\x70\x41\xd5\x17\xe5\xe2\x54\x5d\x94\x8b\xa1\x16\x8f\xd9\x20\x49\x54\xf5\x05\x05\xc9\x66\x26\x39\xa9\xb8\x74\x40\xa5\x51\xf5\x14\x1b\x5b\x1a\x54\xe0\xd2\x01\x96\x84\xa9\x07\x04\x00\x00\xff\xff\xd5\x7f\xdd\x2c\xf0\x00\x00\x00") + +func testImagesNonrootBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesNonrootBaseimage, + "test/images/nonroot/BASEIMAGE", + ) +} + +func testImagesNonrootBaseimage() (*asset, error) { + bytes, err := testImagesNonrootBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nonroot/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNonrootDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x6f\xd3\x30\x14\xc7\xef\xfe\x14\x7f\x35\x1c\x40\x2a\xe9\x56\xb8\x00\xa7\xd0\x65\x23\xda\x96\x48\x49\xcb\xb4\xa3\x9b\xbc\x26\x4f\x4a\x6d\x63\xbf\x90\xf5\xdb\xa3\x64\x9d\xa0\xc2\x37\xfb\xfd\xfc\xfc\xf3\xff\x45\xd8\x58\x77\xf2\xdc\x76\x82\xf5\xd5\xf5\x17\x6c\x3b\xc2\xfd\xb0\x27\x6f\x48\x28\x20\x19\xa4\xb3\x3e\xc4\x2a\x52\x11\x1e\xb8\x26\x13\xa8\xc1\x60\x1a\xf2\x90\x8e\x90\x38\x5d\x77\xf4\x56\x59\xe2\x27\xf9\xc0\xd6\x60\x1d\x5f\xe1\xfd\x04\x2c\xce\xa5\xc5\x87\x6f\x2a\xc2\xc9\x0e\x38\xea\x13\x8c\x15\x0c\x81\x20\x1d\x07\x1c\xb8\x27\xd0\x4b\x4d\x4e\xc0\x06\xb5\x3d\xba\x9e\xb5\xa9\x09\x23\x4b\x37\x3f\x73\x6e\x12\xab\x08\xcf\xe7\x16\x76\x2f\x9a\x0d\x34\x6a\xeb\x4e\xb0\x87\x7f\x39\x68\x99\x85\xa7\xd5\x89\xb8\xaf\xab\xd5\x38\x8e\xb1\x9e\x65\x63\xeb\xdb\x55\xff\x0a\x86\xd5\x43\xb6\x49\xf3\x2a\xfd\xb8\x8e\xaf\xe6\x2b\x3b\xd3\x53\x08\xf0\xf4\x6b\x60\x4f\x0d\xf6\x27\x68\xe7\x7a\xae\xf5\xbe\x27\xf4\x7a\x84\xf5\xd0\xad\x27\x6a\x20\x76\xf2\x1d\x3d\x0b\x9b\x76\x89\x60\x0f\x32\x6a\x4f\x2a\x42\xc3\x41\x3c\xef\x07\xb9\x08\xeb\xcd\x8e\xc3\x05\x60\x0d\xb4\xc1\x22\xa9\x90\x55\x0b\x7c\x4f\xaa\xac\x5a\xaa\x08\x4f\xd9\xf6\x47\xb1\xdb\xe2\x29\x29\xcb\x24\xdf\x66\x69\x85\xa2\xc4\xa6\xc8\x6f\xb2\x6d\x56\xe4\x15\x8a\x5b\x24\xf9\x33\xee\xb3\xfc\x66\x09\x62\xe9\xc8\x83\x5e\x9c\x9f\xfc\xad\x07\x4f\x31\x52\x33\x65\x56\x11\x5d\x08\x1c\xec\xab\x50\x70\x54\xf3\x81\x6b\xf4\xda\xb4\x83\x6e\x09\xad\xfd\x4d\xde\xb0\x69\xe1\xc8\x1f\x39\x4c\xc3\x0c\xd0\xa6\x51\x11\x7a\x3e\xb2\x68\x99\x4f\xfe\xfb\x54\xac\x54\x52\xde\x4d\xf6\x69\xf6\x98\xdc\xa5\xea\xb6\x2c\x1e\xf1\xee\xef\x5e\xed\xaa\xb4\xc4\xf5\xfa\xd3\x67\xf5\x27\x00\x00\xff\xff\xd2\x2c\xe2\xef\x75\x02\x00\x00") + +func testImagesNonrootDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesNonrootDockerfile, + "test/images/nonroot/Dockerfile", + ) +} + +func testImagesNonrootDockerfile() (*asset, error) { + bytes, err := testImagesNonrootDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nonroot/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNonrootOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\x28\x49\xcc\xc9\x49\xce\x49\xcc\x2c\xe2\x02\x04\x00\x00\xff\xff\x69\x7f\xf2\x61\x19\x00\x00\x00") + +func testImagesNonrootOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesNonrootOwners, + "test/images/nonroot/OWNERS", + ) +} + +func testImagesNonrootOwners() (*asset, error) { + bytes, err := testImagesNonrootOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nonroot/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesNonrootVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") + +func testImagesNonrootVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesNonrootVersion, + "test/images/nonroot/VERSION", + ) +} + +func testImagesNonrootVersion() (*asset, error) { + bytes, err := testImagesNonrootVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/nonroot/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\xc8\xcd\x2e\xcd\x4d\x2c\x49\x4c\x07\x73\x92\x0a\x8a\x12\x8b\x33\x12\xf3\x4a\x32\xb8\x00\x01\x00\x00\xff\xff\x9e\x5b\xa3\x99\x27\x00\x00\x00") + +func testImagesPetsOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsOwners, + "test/images/pets/OWNERS", + ) +} + +func testImagesPetsOwners() (*asset, error) { + bytes, err := testImagesPetsOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsPeerFinderBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\xcd\xb6\x28\xd6\x4b\x4f\x2e\xd2\xcb\xcc\xd7\x4f\x49\x4d\xca\x4c\xcc\xd3\x4d\x4a\x2c\x4e\xd5\x05\x4b\x5a\x19\xe8\x99\xe8\x19\x72\x25\x16\xe5\xe2\x54\x56\x94\x8b\x50\x84\xc7\x34\x90\x24\x54\x61\x41\x41\xb2\x99\x49\x4e\x2a\x2e\xa5\x50\x69\xa8\xe2\x62\x63\x4b\x83\x0a\x5c\x4a\xc1\x92\x50\x85\x80\x00\x00\x00\xff\xff\x82\x15\xeb\x61\xcd\x00\x00\x00") + +func testImagesPetsPeerFinderBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsPeerFinderBaseimage, + "test/images/pets/peer-finder/BASEIMAGE", + ) +} + +func testImagesPetsPeerFinderBaseimage() (*asset, error) { + bytes, err := testImagesPetsPeerFinderBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/peer-finder/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsPeerFinderDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\x9c\x40\x14\x85\xdf\xe7\x57\x9c\x2c\x7d\x68\x93\x5d\xb0\x36\xb1\x69\xfb\x84\x2b\x2a\x51\xc1\x02\x5b\xbb\x69\x1a\x33\xc0\x5d\xb8\x09\x3b\x83\x33\x43\x71\xff\x7d\x03\x6a\xaa\x29\x6f\xcc\xfd\xe6\xcc\x37\x67\x3c\xac\x75\x7f\x30\xdc\xb4\x0e\xc7\x47\x1f\x4f\x50\xb4\x84\xab\xa1\x24\xa3\xc8\x91\x45\x38\xb8\x56\x1b\xeb\x0b\x4f\x78\xb8\xe6\x8a\x94\xa5\x1a\x83\xaa\xc9\xc0\xb5\x84\xb0\x97\x55\x4b\x2f\x93\x25\x7e\x90\xb1\xac\x15\x8e\xfd\x23\xbc\x9f\x80\xc5\xf3\x68\xf1\xe1\x9b\xf0\x70\xd0\x03\xf6\xf2\x00\xa5\x1d\x06\x4b\x70\x2d\x5b\xec\xb8\x23\xd0\x63\x45\xbd\x03\x2b\x54\x7a\xdf\x77\x2c\x55\x45\x18\xd9\xb5\xf3\x31\xcf\x21\xbe\xf0\xb0\x7d\x8e\xd0\xa5\x93\xac\x20\x51\xe9\xfe\x00\xbd\x7b\xcd\x41\xba\x59\x78\xfa\x5a\xe7\xfa\xaf\x41\x30\x8e\xa3\x2f\x67\x59\x5f\x9b\x26\xe8\x9e\x40\x1b\x5c\xc7\xeb\x28\xc9\xa3\xd5\xb1\x7f\x34\x6f\xd9\xa8\x8e\xac\x85\xa1\x87\x81\x0d\xd5\x28\x0f\x90\x7d\xdf\x71\x25\xcb\x8e\xd0\xc9\x11\xda\x40\x36\x86\xa8\x86\xd3\x93\xef\x68\xd8\xb1\x6a\x96\xb0\x7a\xe7\x46\x69\x48\x78\xa8\xd9\x3a\xc3\xe5\xe0\xde\x94\xf5\x62\xc7\xf6\x0d\xa0\x15\xa4\xc2\x22\xcc\x11\xe7\x0b\x9c\x86\x79\x9c\x2f\x85\x87\xbb\xb8\xb8\x4c\x37\x05\xee\xc2\x2c\x0b\x93\x22\x8e\x72\xa4\x19\xd6\x69\x72\x16\x17\x71\x9a\xe4\x48\xcf\x11\x26\x5b\x5c\xc5\xc9\xd9\x12\xc4\xae\x25\x03\x7a\xec\xcd\xe4\xaf\x0d\x78\xaa\x91\xea\xa9\xb3\x9c\xe8\x8d\xc0\x4e\x3f\x09\xd9\x9e\x2a\xde\x71\x85\x4e\xaa\x66\x90\x0d\xa1\xd1\x7f\xc8\x28\x56\x0d\x7a\x32\x7b\xb6\xd3\x63\x5a\x48\x55\x0b\x0f\x1d\xef\xd9\x49\x37\xaf\xfc\x77\x29\x5f\x88\x30\xbb\x98\xec\xa3\xf8\x26\xbc\x88\xc4\x79\x96\xde\xe0\xdd\xbf\x7f\xb1\xce\xd2\x3c\xbf\x3f\xdd\xc4\xd7\x67\xf7\xeb\xf4\x76\x8b\x07\xda\x0f\xab\xef\xd1\xcd\x26\xcc\xd6\x97\x2b\x3b\x45\x57\x08\x06\x6b\x82\x92\x55\x20\x44\xb6\x49\x50\x75\x24\xd5\x8a\x95\x75\xb2\xeb\x30\x36\xe4\x50\x4a\xdb\xa2\x56\x76\x70\xdc\x59\x21\xe6\xa8\x9e\xc8\xac\x76\x3c\x4b\x05\x42\x44\x3f\x6f\xd3\x3c\xc2\x97\x4f\x9f\x4f\x44\x94\x14\xd9\xf6\x36\x8d\x93\x02\xbf\x16\xc1\x2b\x70\xf1\x5b\xfc\x0d\x00\x00\xff\xff\x89\xa7\xb5\xbd\xfe\x02\x00\x00") + +func testImagesPetsPeerFinderDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsPeerFinderDockerfile, + "test/images/pets/peer-finder/Dockerfile", + ) +} + +func testImagesPetsPeerFinderDockerfile() (*asset, error) { + bytes, err := testImagesPetsPeerFinderDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/peer-finder/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsPeerFinderMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdc\x3a\x10\x85\x9f\xaf\x7f\xc5\xd1\x86\x07\x90\x96\x84\x8b\xae\xb8\x12\x15\xaa\xd2\xdd\xed\x12\x41\x93\x2a\x09\x20\x9e\x90\x93\xcc\x26\x23\x65\xed\xd4\x76\x9a\xdd\x7f\x5f\x39\x80\x04\xaa\xdf\x66\xe6\x78\xce\xe7\xe3\x00\x2b\x3d\x1c\x0d\xb7\x9d\xc3\xe5\xc5\xbf\x57\x28\x3b\xc2\xdd\x58\x91\x51\xe4\xc8\x22\x1e\x5d\xa7\x8d\x0d\x45\x20\x02\xdc\x73\x4d\xca\x52\x83\x51\x35\x64\xe0\x3a\x42\x3c\xc8\xba\xa3\xf7\xc9\x12\x8f\x64\x2c\x6b\x85\xcb\xf0\x02\xa7\x5e\xb0\x78\x1b\x2d\xce\xbe\x88\x00\x47\x3d\x62\x2f\x8f\x50\xda\x61\xb4\x04\xd7\xb1\xc5\x8e\x7b\x02\x1d\x6a\x1a\x1c\x58\xa1\xd6\xfb\xa1\x67\xa9\x6a\xc2\xc4\xae\x9b\x6d\xde\x96\x84\x22\xc0\xf3\xdb\x0a\x5d\x39\xc9\x0a\x12\xb5\x1e\x8e\xd0\xbb\x8f\x3a\x48\x37\x03\xfb\xd3\x39\x37\x5c\x47\xd1\x34\x4d\xa1\x9c\x61\x43\x6d\xda\xa8\x7f\x15\xda\xe8\x3e\x59\x6d\xd2\x62\x73\x7e\x19\x5e\xcc\x57\x1e\x54\x4f\xd6\xc2\xd0\xaf\x91\x0d\x35\xa8\x8e\x90\xc3\xd0\x73\x2d\xab\x9e\xd0\xcb\x09\xda\x40\xb6\x86\xa8\x81\xd3\x9e\x77\x32\xec\x58\xb5\x4b\x58\xbd\x73\x93\x34\x24\x02\x34\x6c\x9d\xe1\x6a\x74\x9f\xc2\x7a\xa7\x63\xfb\x49\xa0\x15\xa4\xc2\x22\x2e\x90\x14\x0b\x7c\x8b\x8b\xa4\x58\x8a\x00\x4f\x49\x79\x9b\x3d\x94\x78\x8a\xf3\x3c\x4e\xcb\x64\x53\x20\xcb\xb1\xca\xd2\x75\x52\x26\x59\x5a\x20\xfb\x8e\x38\x7d\xc6\x5d\x92\xae\x97\x20\x76\x1d\x19\xd0\x61\x30\x9e\x5f\x1b\xb0\x8f\x91\x1a\x9f\x59\x41\xf4\x09\x60\xa7\x5f\x81\xec\x40\x35\xef\xb8\x46\x2f\x55\x3b\xca\x96\xd0\xea\xdf\x64\x14\xab\x16\x03\x99\x3d\x5b\xff\x99\x16\x52\x35\x22\x40\xcf\x7b\x76\xd2\xcd\x9d\xbf\x1e\x15\x0a\x51\xe4\xab\x02\x37\x18\x88\xcc\xf9\x8e\xbd\x40\x64\x05\xbe\xde\xa0\x67\x35\x1e\x44\x9c\xaf\x6e\x7d\x25\xf7\xcd\xd5\x7f\xa2\x8c\xf3\xed\xa6\xf4\xf5\xc9\xe9\xea\x21\x5f\x27\xf9\x99\xd8\x66\x71\xfe\xc3\xb7\xfe\x17\xdb\xec\x3e\x4e\xb7\x2f\x8f\x9b\xbc\x48\xb2\x74\x5e\x22\x1d\x59\xe7\x4d\x5e\xd6\x49\x3e\xfb\x38\x1b\x7d\x34\xa3\xc3\xa0\x8d\x13\xa2\x62\x75\x2d\xfe\x09\xc3\x28\x0c\x23\xde\xcb\x96\xce\x47\xc7\x7d\x68\x3b\x54\xac\x70\x72\xea\x39\xcf\x84\x08\x7f\xde\x66\xe9\xf3\xb5\x6f\x8a\x3f\x01\x00\x00\xff\xff\x11\x9d\x3d\x9a\x07\x03\x00\x00") + +func testImagesPetsPeerFinderMakefileBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsPeerFinderMakefile, + "test/images/pets/peer-finder/Makefile", + ) +} + +func testImagesPetsPeerFinderMakefile() (*asset, error) { + bytes, err := testImagesPetsPeerFinderMakefileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/peer-finder/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsPeerFinderVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe1\x02\x04\x00\x00\xff\xff\xdb\x31\xff\x00\x04\x00\x00\x00") + +func testImagesPetsPeerFinderVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsPeerFinderVersion, + "test/images/pets/peer-finder/VERSION", + ) +} + +func testImagesPetsPeerFinderVersion() (*asset, error) { + bytes, err := testImagesPetsPeerFinderVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/peer-finder/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsPeerFinderPeerFinderGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x58\x6f\x73\xdb\xb8\xd1\x7f\x2d\x7e\x8a\x0d\x67\x72\x0f\xa9\xa3\xa9\x24\x4f\xa7\xd3\x3a\x75\x6f\x74\xb6\x73\x51\x2f\x27\x7b\x2c\x27\x99\x6b\xec\xb9\x83\xc9\x25\x85\x31\x09\xf0\x00\x50\xb2\xea\xf8\xbb\x77\x16\x00\x29\x5a\x72\xda\xc9\xb5\x6f\x9a\x99\x58\x02\xb0\xd8\xfd\xed\xff\x85\x26\xe3\xe0\x58\x36\x1b\xc5\xcb\xa5\x81\x57\x2f\x5e\xfe\x01\x2e\x97\x08\x3f\xb6\x37\xa8\x04\x1a\xd4\x30\x6d\xcd\x52\x2a\x9d\x06\xc1\x3b\x9e\xa1\xd0\x98\x43\x2b\x72\x54\x60\x96\x08\xd3\x86\x65\x4b\x04\x7f\x92\xc0\x07\x54\x9a\x4b\x01\xaf\xd2\x17\x10\x11\x41\xe8\x8f\xc2\xf8\x75\xb0\x91\x2d\xd4\x6c\x03\x42\x1a\x68\x35\x82\x59\x72\x0d\x05\xaf\x10\xf0\x2e\xc3\xc6\x00\x17\x90\xc9\xba\xa9\x38\x13\x19\xc2\x9a\x9b\xa5\x15\xe2\x59\xa4\xc1\xcf\x9e\x81\xbc\x31\x8c\x0b\x60\x90\xc9\x66\x03\xb2\x18\x52\x01\x33\x41\x00\x00\xb0\x34\xa6\x39\x9c\x4c\xd6\xeb\x75\xca\x2c\xca\x54\xaa\x72\x52\x39\x2a\x3d\x79\x37\x3b\x3e\x9d\x2f\x4e\x0f\x5e\xa5\x2f\x82\xe0\xbd\xa8\x50\x6b\x50\xf8\x5b\xcb\x15\xe6\x70\xb3\x01\xd6\x34\x15\xcf\xd8\x4d\x85\x50\xb1\x35\x48\x05\xac\x54\x88\x39\x18\x49\x38\xd7\x8a\x1b\x2e\xca\x04\xb4\x2c\xcc\x9a\x29\x0c\x72\xae\x8d\xe2\x37\xad\x79\x64\xa0\x0e\x15\xd7\x30\x24\x90\x02\x98\x80\x70\xba\x80\xd9\x22\x84\xef\xa7\x8b\xd9\x22\x09\x3e\xce\x2e\xdf\x9e\xbd\xbf\x84\x8f\xd3\x8b\x8b\xe9\xfc\x72\x76\xba\x80\xb3\x0b\x38\x3e\x9b\x9f\xcc\x2e\x67\x67\xf3\x05\x9c\xbd\x81\xe9\xfc\x67\xf8\x71\x36\x3f\x49\x00\xb9\x59\xa2\x02\xbc\x6b\x14\x61\x97\x0a\x38\x99\x0e\xf3\x34\x58\x20\x3e\x12\x5e\x48\x07\x46\x37\x98\xf1\x82\x67\x50\x31\x51\xb6\xac\x44\x28\xe5\x0a\x95\xe0\xa2\x84\x06\x55\xcd\x35\x39\x4f\x03\x13\x79\x50\xf1\x9a\x1b\x66\xec\x7a\x4f\x9d\x34\x18\x4f\x82\x60\x32\x81\x29\xe8\x9a\x55\x15\xb4\x86\x57\xdc\x6c\xa0\x51\xb2\x54\xac\x26\x23\x55\x52\xde\xb6\x0d\x2c\xa5\x36\x82\xd5\xa8\xc9\x4f\x28\xf2\x46\x72\x61\x34\x58\xf7\x69\x54\x2b\x9e\x61\x1a\x34\x2c\xbb\x25\x38\x35\xe3\x22\x08\x78\xdd\x48\x65\x20\x0a\x46\x61\x51\xb1\x32\xa4\xcf\xda\xd0\x07\x97\x13\x2e\x49\x16\x2d\x2a\x69\x8f\x04\xda\x23\xa9\xdd\xdf\x09\xde\x61\x46\x5f\x15\x96\x78\xd7\xd0\x37\x2d\x95\x25\x21\xf3\x8b\xd2\xd2\x19\x5e\x63\x18\x04\xa3\xf0\xf6\x4f\x3a\xe5\x72\xc2\x1a\x5e\xb3\x6c\xc9\x05\xaa\xcd\xa4\xb9\x2d\x27\x24\x64\xa2\xd1\xe8\x30\x88\x83\x20\x93\x42\x5b\x40\x8d\xac\xaa\x73\x54\x5c\xe6\x70\x04\x2f\x61\x0c\xc4\x28\x5d\x60\x26\x45\x4e\x84\x2b\xa6\x88\x4c\x8a\xe3\x25\x13\x25\x02\x1c\x01\xa9\x90\x2e\xac\xe8\x28\x94\xe2\x20\xb3\x27\x61\x02\x21\xfd\x5f\x64\x8a\x37\x86\xec\xa5\x5a\x41\x61\xe1\x8e\x13\xa8\x5b\x6d\x80\x65\x36\x2f\x18\x08\x5c\x43\xc5\x05\x82\xc6\x86\x29\x46\x21\x54\x71\x6d\xc8\xa6\x0d\xa2\xd2\xb0\xe2\x0c\xb4\xc9\xb9\x48\xc3\x98\xe4\x2f\x0c\x53\x06\x9e\x92\xaf\xe9\xe4\x8b\xe2\xed\xe9\x7f\x28\x5d\xaf\x32\x70\xff\x76\xa4\x7b\x7f\x77\xc2\x7f\xe8\x83\xcf\x1f\x80\x42\xdd\x48\xa1\x39\x65\x5d\x17\xb4\x27\xf3\x05\x28\xcc\xa4\xca\x75\x97\xea\xb9\xa4\x40\x71\xf5\xa3\x91\x39\x25\x97\x17\x6d\x23\xad\x61\x19\xee\x8a\x16\xba\x93\x4a\xe5\x6d\x4b\x36\xe4\xa1\x5a\x61\xd1\x70\x91\xc2\xac\x80\x56\xf8\x7c\xc1\x3c\xb1\x62\xcf\xcf\x4e\x7e\x99\x4f\x7f\x3a\x5d\x9c\x4f\x8f\x4f\x01\xc5\x0a\xc8\xdd\x5c\x53\x31\xcb\xad\x78\x0f\x6c\x5f\x73\x77\x30\x84\x70\x5c\xb5\xda\xa0\x82\x13\x77\x65\xbd\xe4\xd9\xb2\xe3\x45\xf5\xc7\x6c\x69\x12\xe0\x85\x2d\x9a\x1a\x0d\x18\xc5\x51\x93\xc3\x72\x34\x94\xb2\x02\x81\x1b\x28\x94\xac\x61\x82\x26\x9b\x28\xd4\xb2\x5a\xa5\x99\x14\x85\xad\xad\x84\x2b\x0e\x82\xa2\x15\x99\x4f\xc9\x48\xaf\xb2\x39\xab\x11\x5c\x3e\xc4\x10\x51\x9c\x7b\xa8\x09\xa0\x52\x52\xc5\x70\x1f\x8c\xb6\xd9\x7a\x78\x04\x96\x66\x8e\x6b\xaf\x51\x1c\x8c\x7e\x49\x40\xab\xd5\x85\x73\x8d\xbd\x47\x74\x02\x4d\xfa\xce\xca\x59\x5c\x7c\x88\x42\xaf\xb2\x17\x19\x07\x23\x5e\x58\xca\x67\x47\x20\x78\x45\x52\x46\x0a\x4d\xab\xc4\xb6\x36\x58\x56\xc1\xe8\x21\x18\x51\x08\x0c\xa5\x10\x7f\x65\xf3\x6a\x2b\xd8\xb2\x98\x4c\x6c\xd7\x5a\x5c\x7c\xe8\x43\x05\x45\xee\xab\x4c\x98\x86\x7d\x30\x29\x29\x8d\x0f\x9f\x60\x34\xc2\x86\x38\x16\xb5\x49\x17\x8d\xe2\xc2\x14\x51\xf8\x7c\x15\x0e\x04\xa6\x97\x4c\x95\x68\x3e\x1d\x56\x28\xa2\xdd\xdd\xf8\xe0\xe5\x75\x4c\x5c\x3a\xe0\xe9\x4c\x68\x54\x26\xc2\x26\xb6\xf0\xf7\x15\x13\xbc\x0a\x1e\xbc\x33\xf4\x12\xab\xea\xac\x35\x91\x46\x91\x2f\x28\x79\x12\xd0\x2e\x1d\x3b\xc7\xdc\x07\xa3\x4a\x96\xe9\xb9\xc7\x46\x95\x8d\x8b\xf2\x10\x9e\xaf\x5c\x73\xb4\x29\x47\xcb\xb0\xbb\x9a\x40\xcf\x2d\x0e\x82\x51\x56\x5b\x9b\xd1\xc5\xf4\x58\xd6\x35\x13\x79\xe4\x08\x29\x4d\x9d\x4c\xef\xb7\xac\xce\x53\x7b\xef\x9c\x37\x18\x3d\xe9\x28\xc2\xf2\x86\x19\x56\x15\x51\xf8\x86\xf1\xca\x35\xc3\x12\x8d\x03\x02\x0d\x6f\xd0\xa3\x41\xa5\x9c\x0d\xb4\xc9\x65\x6b\x76\xa5\xc8\xd6\xfc\x4e\x31\xb2\x35\x4f\xc9\xb1\xaa\xa6\xb6\xe8\x45\xa4\xb8\x2b\x46\x1f\x15\x37\x18\x7d\xba\xbe\xd9\x18\xdc\x9a\x39\xee\x74\x4f\x8f\x2b\xa9\xd1\xd2\x0f\x31\xba\x0e\x93\x5e\x20\xcb\xa7\x55\x15\x39\xa1\x5f\x81\x94\xac\xdd\x1a\x84\xe7\x2b\x02\x69\xd9\xee\xfa\xc8\xe5\x10\xb1\x1d\xaa\xd0\xfb\x3a\x1a\x10\xc4\x7d\xc0\x50\xd0\x46\x36\x28\x6c\x69\x39\x67\xca\x83\x17\x36\x41\xc7\x7d\x51\xb3\x50\x85\x86\xa3\x23\x08\x43\x0b\x94\x16\x20\x75\xfa\x03\x1a\x14\xab\x28\x7c\x54\xc9\x42\xe7\x29\x5e\xc0\x98\x2a\xb7\xbb\xf5\xf9\xf3\x96\xc3\xe7\xcf\x10\x8d\xfb\x96\xe6\xf6\xbe\xf9\x06\xc6\x5d\x97\xb1\x3b\xf1\x9e\x45\x66\xc2\x0e\x73\x68\x10\x98\x2a\x75\xd2\x8d\x57\x70\xd0\x77\x41\x9a\x34\x26\x52\xd9\x1d\xdf\x79\x0e\xba\x5e\xc0\x44\x0e\x07\xc2\x0e\x36\x4c\xf4\xd5\x96\x12\xf9\x11\xfa\x34\xf4\xd6\xeb\x06\x8d\xde\x8f\x52\xa7\x6f\xfd\xde\xd7\x06\x5a\xc7\xeb\x10\x9e\xeb\x61\x34\x13\x02\x57\x3d\x06\x05\x34\x08\xa8\xfe\xcc\x8a\xae\x2d\x71\x6d\x8b\x75\xa3\xe4\x8a\xe7\xb6\x77\xa8\x4d\xc7\xb8\x2b\xd5\x83\x2a\xed\x2c\xef\xef\x6e\x5d\xe6\x28\x8e\xa5\x28\xbe\xdf\x18\xd4\x4f\x45\xe7\x1b\x5e\x61\x14\xee\x56\x7d\xb2\xc7\xe0\xb6\xad\xdd\x2e\x9c\x76\x58\x12\xdd\xbe\x51\xb6\x56\x89\xc2\xf7\xc2\xce\xbf\x34\x1d\x20\xcb\xf7\xfa\x8b\x95\x44\xa6\xb7\x76\x51\x08\x63\x37\x73\xa5\x17\xf6\xc3\xb1\x7f\x14\x87\x64\x28\x6a\x0e\xd4\x65\xc9\x93\x6c\xdb\xca\x99\xb1\xed\x49\x43\xc5\x6f\xfd\xec\x3f\x4e\xf5\x2a\x4b\xc7\x63\xba\xa8\xbc\x5f\x8f\xc0\xcb\x38\x96\x75\x43\xfa\xff\x7a\x35\x8d\xd2\xf1\x95\x88\xc7\x1a\x99\xca\x96\x57\xfa\xfe\x65\xf2\x40\x5b\xf6\x4b\x3c\x8e\xbe\x3b\xff\x4b\x29\x59\xf5\xd7\x4f\xec\xe0\x1f\xd3\x83\xbf\xbf\x38\xf8\xf3\xc1\xf5\xfd\xcb\xe4\x8f\xff\xff\x60\xf9\x47\xfb\xfb\x57\x69\x3c\xde\xee\x5e\xdf\xbf\xa2\xcd\xf8\x57\xab\x2e\x60\xa5\xf1\xeb\x94\xf9\xaf\x6a\xf1\x3b\x20\xff\x1b\x3f\x3f\x8a\xfe\x4c\x21\x33\x34\x88\x95\x6d\xc5\xfa\xd7\x05\x97\xe2\x51\xc1\x75\x5e\x2f\x95\x6c\x9b\xb9\x9d\xed\xa9\x31\x63\xba\x68\x6f\xf0\xce\xed\x44\x3e\x0a\xdb\xca\xf8\xc3\x37\x9c\xea\x2f\x05\xe2\xa2\xbd\xa9\x99\xc9\x96\x83\x80\x24\x6a\xb2\xe1\x6d\x02\xab\x6d\x97\xf7\xf7\x2d\x5c\x5e\xc0\x56\xde\xa7\xdb\x6b\x1b\x55\x64\x11\x1f\x59\xfb\xb1\x66\x1d\x74\xd2\xe7\x64\x5f\x8c\x1c\x21\xd7\x80\x75\x63\x36\x8e\x72\x90\xd4\x47\xb0\xb2\x7b\x43\x4f\x5b\x56\x73\xff\xfa\xcb\xa4\x58\xa1\x32\xde\xad\xc0\x85\x91\x20\xf4\x20\x56\x77\xd8\x09\x0d\xdf\xda\x21\xe4\xdb\x8e\xb3\xfd\x7b\xa3\x90\xdd\x06\x7e\xf9\xe0\xcb\x51\xd7\xea\x4f\xba\xe1\x2e\xef\x34\x30\x12\x6e\xd0\x95\xa3\x2d\x77\xaa\xfe\x03\x9c\x8f\xc4\xfa\xd7\x4e\xfa\x37\xc9\x45\xf4\xe9\xda\x2d\xef\x85\x4e\x20\xd4\xab\x2c\x4c\xba\x9a\xf3\x90\x10\x38\x5f\x44\xf7\x9a\xc0\x90\xe5\xff\x50\x33\xa8\x37\x16\xf2\xe1\x97\xcc\xb0\x6d\x16\xa4\xee\xd0\xa4\xbd\x39\xfc\x2c\x46\x9d\xd5\xeb\x66\xcd\xe3\xb7\xb7\x71\xd6\x6d\x40\x6f\x95\x1d\x5f\xce\x25\x74\x1a\x81\x6e\x1b\xfb\x46\x4f\x60\xab\xb6\x9d\xe6\xaa\x8a\xdc\xcb\xdc\x69\xff\x10\x4b\xfb\xa1\x21\xee\x07\x62\xf7\xe2\x7a\x62\x22\x7f\xdd\x61\x7b\x46\xd8\x5e\xfb\xa7\x69\x85\xd8\x44\xdb\x67\xab\xf3\x8c\xc0\xf5\x39\xb1\xe9\xbb\x8a\x7f\x19\x90\x31\xfe\x45\x5b\x38\x1f\x0e\xc9\xbe\x12\x8c\x32\x29\x0c\x17\x2d\x6e\x2b\x4d\xc7\x3d\x3d\xfd\xad\x65\x55\x64\x01\xc7\x14\x38\xcf\xfa\x93\xb7\x4c\x47\xce\x47\xf1\x3e\xfb\xb7\x6c\x85\xb6\x85\x16\xb2\x15\x39\xd4\x1b\x8d\x55\x41\xb3\xbc\x7d\x74\x6e\xd0\xa4\x57\xe2\xa7\x0d\xbc\x1d\x34\xe9\x2b\x41\x2b\xdd\x11\xf9\xbe\xed\x24\x24\x8f\x63\xa0\xc7\xf0\x8e\x6b\x13\xc5\x09\xd0\x13\x25\x7e\x4a\x15\x02\x4e\x44\xee\x59\xf3\xe8\x16\xf9\x5d\x2a\xe3\x1f\x4d\x3a\xea\x48\xe3\x1d\xdf\xd3\x1d\x07\xbb\x6d\x72\x7a\x38\x5f\x89\x35\xd3\xf0\x7c\x75\x25\x84\x5c\xbb\x92\xda\x3c\x42\xb3\x23\xc8\x4a\xea\x5f\x0a\x43\x3d\x3a\x91\x09\x84\x57\x22\x8c\x07\x81\x32\x72\x21\xb2\x05\xfd\x85\x28\x7d\xb0\x83\xcb\xe5\xd9\xc9\xd9\x21\x9c\xde\x71\x43\x95\xd1\x2c\x51\xe1\xff\xd1\x04\xb3\x8d\xd0\xef\x82\x7d\x9d\x0a\x6e\x7f\x13\xc2\x3b\xfb\x33\x58\x48\x53\xea\x3f\x03\x00\x00\xff\xff\xb9\xe2\x7f\x68\x4a\x14\x00\x00") + +func testImagesPetsPeerFinderPeerFinderGoBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsPeerFinderPeerFinderGo, + "test/images/pets/peer-finder/peer-finder.go", + ) +} + +func testImagesPetsPeerFinderPeerFinderGo() (*asset, error) { + bytes, err := testImagesPetsPeerFinderPeerFinderGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/peer-finder/peer-finder.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsRedisInstallerBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\xcd\xb6\x28\xd6\x4b\x4f\x2e\xd2\xcb\xcc\xd7\x4f\x49\x4d\xca\x4c\xcc\xd3\x4d\x4a\x2c\x4e\xd5\x05\x4b\x5a\x19\xe8\x99\xe8\x19\x72\x41\x95\x17\xe5\xe2\x54\x5c\x94\x8b\xae\x14\x8f\xc9\x20\x49\x14\xe5\x05\x05\xc9\x66\x26\x39\xa9\xb8\x34\x40\xa5\xa1\x5a\x00\x01\x00\x00\xff\xff\x2a\x1e\xc7\x42\xbc\x00\x00\x00") + +func testImagesPetsRedisInstallerBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsRedisInstallerBaseimage, + "test/images/pets/redis-installer/BASEIMAGE", + ) +} + +func testImagesPetsRedisInstallerBaseimage() (*asset, error) { + bytes, err := testImagesPetsRedisInstallerBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/redis-installer/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsRedisInstallerDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x93\xd1\x6e\xe3\x36\x13\x85\xef\xf9\x14\x07\xf6\x8f\xfd\x5b\x20\x92\x52\x17\xdb\x05\x52\xf4\x42\xb1\xbd\xbb\xc2\x26\xd2\xd6\x72\xba\x08\xda\x22\xa0\xa4\xb1\xc4\xae\x44\x2a\x24\x15\xc5\x79\xfa\x82\x94\xdd\x38\x48\x7c\x65\x91\x67\x66\xce\x7c\x33\x9c\x63\xa9\xfa\xbd\x16\x75\x63\xb1\x38\xff\xe9\x17\x6c\x1b\xc2\x97\xa1\x20\x2d\xc9\x92\x41\x3c\xd8\x46\x69\x13\xb2\x39\x9b\xe3\x4a\x94\x24\x0d\x55\x18\x64\x45\x1a\xb6\x21\xc4\x3d\x2f\x1b\x3a\xde\x9c\xe1\x0f\xd2\x46\x28\x89\x45\x78\x8e\x1f\x9c\x60\x76\xb8\x9a\xfd\xf8\x2b\x9b\x63\xaf\x06\x74\x7c\x0f\xa9\x2c\x06\x43\xb0\x8d\x30\xd8\x89\x96\x40\x8f\x25\xf5\x16\x42\xa2\x54\x5d\xdf\x0a\x2e\x4b\xc2\x28\x6c\xe3\xcb\x1c\x92\x84\x6c\x8e\xdb\x43\x0a\x55\x58\x2e\x24\x38\x4a\xd5\xef\xa1\x76\xa7\x3a\x70\xeb\x0d\xbb\x5f\x63\x6d\x7f\x11\x45\xe3\x38\x86\xdc\x9b\x0d\x95\xae\xa3\x76\x12\x9a\xe8\x2a\x59\xae\xd3\x7c\x1d\x2c\xc2\x73\x1f\x72\x23\x5b\x32\x06\x9a\xee\x07\xa1\xa9\x42\xb1\x07\xef\xfb\x56\x94\xbc\x68\x09\x2d\x1f\xa1\x34\x78\xad\x89\x2a\x58\xe5\xfc\x8e\x5a\x58\x21\xeb\x33\x18\xb5\xb3\x23\xd7\xc4\xe6\xa8\x84\xb1\x5a\x14\x83\x7d\x01\xeb\xe8\x4e\x98\x17\x02\x25\xc1\x25\x66\x71\x8e\x24\x9f\xe1\x32\xce\x93\xfc\x8c\xcd\xf1\x2d\xd9\x7e\xce\x6e\xb6\xf8\x16\x6f\x36\x71\xba\x4d\xd6\x39\xb2\x0d\x96\x59\xba\x4a\xb6\x49\x96\xe6\xc8\x3e\x22\x4e\x6f\xf1\x25\x49\x57\x67\x20\x61\x1b\xd2\xa0\xc7\x5e\x3b\xff\x4a\x43\x38\x8c\x54\x39\x66\x39\xd1\x0b\x03\x3b\x35\x19\x32\x3d\x95\x62\x27\x4a\xb4\x5c\xd6\x03\xaf\x09\xb5\x7a\x20\x2d\x85\xac\xd1\x93\xee\x84\x71\xc3\x34\xe0\xb2\x62\x73\xb4\xa2\x13\x96\x5b\x7f\xf2\xaa\xa9\x90\xb1\x39\xb6\xd9\x2a\xbb\x40\x4d\x16\x5a\x54\x6e\x26\x05\x37\x0d\x2a\xea\x49\x56\x24\xcb\xbd\x4b\x04\x33\x0a\x5b\x36\x0e\x5e\xdf\xba\x09\x16\x83\xd9\x17\xea\xd1\xf9\x74\xcb\x67\xb9\xc6\xf3\x29\x78\x6b\x14\x2a\x45\x46\xfe\xdf\xc2\x10\x75\x2e\xd0\x57\x37\xd6\x65\x73\xdb\xe2\x3a\x16\x4a\x86\x2c\xde\x7c\x72\xfc\xd6\xc9\x75\xfc\x69\xcd\x3e\x6e\xb2\x6b\xfc\xef\xf9\x9b\x2d\x37\x59\x9e\xdf\x5d\xde\x24\x57\xab\xbb\x65\xf6\xf5\x16\xf7\xd4\x0d\xc1\xef\xeb\xeb\x9b\x78\xb3\xfc\x1c\x18\xd7\x5c\x89\x68\x30\x3a\x2a\x84\x8c\x9e\x3b\xfa\x67\x30\xd3\xbe\xfa\x9a\x5c\x57\xd0\x54\x09\x83\xb1\x21\xe9\x20\x68\x3f\x53\x25\x27\xb2\x3f\x87\x8b\xf0\x3c\x64\x9b\x9b\x14\x65\x4b\x5c\x06\x42\x1a\xcb\xdb\x16\xa3\x23\xd3\xf1\xef\x84\xba\x2c\xd1\x8a\xa2\x0c\x2a\x7a\xf0\x90\xd8\x61\x4a\x9b\x75\xbc\xba\x5e\x87\x5d\xe5\xc3\x7d\x40\x70\x9f\x21\xf2\xf5\x82\x29\xb3\xe5\x3a\xac\x9f\x8e\x8b\x5d\xa9\x51\xb6\x8a\x57\xa1\x97\x84\x42\x45\x9a\x5a\xe2\x6e\xb7\xdf\x08\x7a\xf7\x0e\x7f\x31\xf7\x2c\x1c\xe6\xe0\xf1\x69\xf7\x66\xea\x60\x89\xc8\x76\x7d\xe4\xe4\xba\x7b\x4b\xe2\xfc\x2e\x5d\x73\x50\x83\x05\x3d\x0a\xe3\xde\x80\x1b\xb5\x41\x41\x3b\xe5\x88\x4c\x5d\xfb\x85\x61\x73\x37\x3b\x6f\xd9\x5c\x44\x51\x2d\x6c\x33\x14\x61\xa9\xba\x88\x4b\x2b\x34\x3d\x4d\x25\x22\x61\xcc\x40\x26\xfa\xb0\x58\x4c\xf8\xaa\xc9\xc7\x49\x7d\x67\xc9\x23\x74\x2f\xc8\xe3\xf5\x27\xdf\x2b\xa1\x11\xf4\x07\xab\xcf\x6d\x7a\xe9\x91\x7f\x92\xe6\xdb\xf8\xea\xea\xee\x32\x49\x7f\x7b\x25\x7c\x78\x55\x6a\xfa\x1f\x96\x4a\x1e\x29\x9d\x9e\xfc\x17\xa9\x3b\x04\x7a\xf7\x2a\x9a\xb1\x78\xb5\x82\x92\x6e\xad\xb4\x0d\x4d\x83\x88\x31\xbf\x75\x3d\x91\x0e\x76\xc2\xbf\xa0\xc8\xab\x0e\x06\x27\x91\x6f\xbc\xe9\x54\x85\xa0\xc4\x87\xf7\xef\x11\x9d\x5e\xbf\x48\x78\x92\x89\xad\xd3\xed\xe6\xf6\x6b\x96\xa4\x5b\xfc\x39\x3b\x09\x99\xfd\xcd\xfe\x0d\x00\x00\xff\xff\x83\x12\xc0\xa9\xe5\x05\x00\x00") + +func testImagesPetsRedisInstallerDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsRedisInstallerDockerfile, + "test/images/pets/redis-installer/Dockerfile", + ) +} + +func testImagesPetsRedisInstallerDockerfile() (*asset, error) { + bytes, err := testImagesPetsRedisInstallerDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/redis-installer/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsRedisInstallerMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdc\x3a\x10\x85\x9f\xaf\x7f\xc5\xd1\x86\x07\x90\x96\x84\x8b\xae\xb8\x12\x15\xaa\xd2\xdd\xed\x12\x41\x93\x2a\x09\x20\x9e\x90\x93\xcc\x26\x23\x65\xed\xd4\x76\x9a\xdd\x7f\x5f\x39\x80\x04\xaa\xdf\x66\xe6\x78\xce\xe7\xe3\x00\x2b\x3d\x1c\x0d\xb7\x9d\xc3\xe5\xc5\xbf\x57\x28\x3b\xc2\xdd\x58\x91\x51\xe4\xc8\x22\x1e\x5d\xa7\x8d\x0d\x45\x20\x02\xdc\x73\x4d\xca\x52\x83\x51\x35\x64\xe0\x3a\x42\x3c\xc8\xba\xa3\xf7\xc9\x12\x8f\x64\x2c\x6b\x85\xcb\xf0\x02\xa7\x5e\xb0\x78\x1b\x2d\xce\xbe\x88\x00\x47\x3d\x62\x2f\x8f\x50\xda\x61\xb4\x04\xd7\xb1\xc5\x8e\x7b\x02\x1d\x6a\x1a\x1c\x58\xa1\xd6\xfb\xa1\x67\xa9\x6a\xc2\xc4\xae\x9b\x6d\xde\x96\x84\x22\xc0\xf3\xdb\x0a\x5d\x39\xc9\x0a\x12\xb5\x1e\x8e\xd0\xbb\x8f\x3a\x48\x37\x03\xfb\xd3\x39\x37\x5c\x47\xd1\x34\x4d\xa1\x9c\x61\x43\x6d\xda\xa8\x7f\x15\xda\xe8\x3e\x59\x6d\xd2\x62\x73\x7e\x19\x5e\xcc\x57\x1e\x54\x4f\xd6\xc2\xd0\xaf\x91\x0d\x35\xa8\x8e\x90\xc3\xd0\x73\x2d\xab\x9e\xd0\xcb\x09\xda\x40\xb6\x86\xa8\x81\xd3\x9e\x77\x32\xec\x58\xb5\x4b\x58\xbd\x73\x93\x34\x24\x02\x34\x6c\x9d\xe1\x6a\x74\x9f\xc2\x7a\xa7\x63\xfb\x49\xa0\x15\xa4\xc2\x22\x2e\x90\x14\x0b\x7c\x8b\x8b\xa4\x58\x8a\x00\x4f\x49\x79\x9b\x3d\x94\x78\x8a\xf3\x3c\x4e\xcb\x64\x53\x20\xcb\xb1\xca\xd2\x75\x52\x26\x59\x5a\x20\xfb\x8e\x38\x7d\xc6\x5d\x92\xae\x97\x20\x76\x1d\x19\xd0\x61\x30\x9e\x5f\x1b\xb0\x8f\x91\x1a\x9f\x59\x41\xf4\x09\x60\xa7\x5f\x81\xec\x40\x35\xef\xb8\x46\x2f\x55\x3b\xca\x96\xd0\xea\xdf\x64\x14\xab\x16\x03\x99\x3d\x5b\xff\x99\x16\x52\x35\x22\x40\xcf\x7b\x76\xd2\xcd\x9d\xbf\x1e\x15\x0a\x51\xe4\xab\x02\x37\x18\x88\xcc\xf9\x8e\xbd\x40\x64\x05\xbe\xde\xa0\x67\x35\x1e\x44\x9c\xaf\x6e\x7d\x25\xf7\xcd\xd5\x7f\xa2\x8c\xf3\xed\xa6\xf4\xf5\xc9\xe9\xea\x21\x5f\x27\xf9\x99\xd8\x66\x71\xfe\xc3\xb7\xfe\x17\xdb\xec\x3e\x4e\xb7\x2f\x8f\x9b\xbc\x48\xb2\x74\x5e\x22\x1d\x59\xe7\x4d\x5e\xd6\x49\x3e\xfb\x38\x1b\x7d\x34\xa3\xc3\xa0\x8d\x13\xa2\x62\x75\x2d\xfe\x09\xc3\x28\x0c\x23\xde\xcb\x96\xce\x47\xc7\x7d\x68\x3b\x54\xac\x70\x72\xea\x39\xcf\x84\x08\x7f\xde\x66\xe9\xf3\xb5\x6f\x8a\x3f\x01\x00\x00\xff\xff\x11\x9d\x3d\x9a\x07\x03\x00\x00") + +func testImagesPetsRedisInstallerMakefileBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsRedisInstallerMakefile, + "test/images/pets/redis-installer/Makefile", + ) +} + +func testImagesPetsRedisInstallerMakefile() (*asset, error) { + bytes, err := testImagesPetsRedisInstallerMakefileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/redis-installer/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsRedisInstallerVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe1\x02\x04\x00\x00\xff\xff\xdb\x31\xff\x00\x04\x00\x00\x00") + +func testImagesPetsRedisInstallerVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsRedisInstallerVersion, + "test/images/pets/redis-installer/VERSION", + ) +} + +func testImagesPetsRedisInstallerVersion() (*asset, error) { + bytes, err := testImagesPetsRedisInstallerVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/redis-installer/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsRedisInstallerInstallSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x92\x41\x6f\xe3\x36\x10\x85\xef\xfc\x15\xaf\x52\x0e\xdd\x20\x92\xd2\x14\xe8\xa1\x81\x81\xba\x89\x8b\x0a\x71\x6d\xc0\x72\x12\xec\x69\x41\x4b\x63\x69\x10\x99\x64\x49\x2a\x8a\x91\xe6\xbf\x17\x94\xad\x76\x9d\xb4\x3d\xd4\x27\x8b\x6f\x38\xfc\xe6\xbd\x89\xbf\xc9\x36\xac\xb2\x8d\x74\x8d\x10\x31\x6e\xb4\xd9\x5b\xae\x1b\x8f\xab\xcb\xef\x7e\xc0\xba\x21\xdc\x75\x1b\xb2\x8a\x3c\x39\x4c\x3b\xdf\x68\xeb\x52\x11\x8b\x18\x73\x2e\x49\x39\xaa\xd0\xa9\x8a\x2c\x7c\x43\x98\x1a\x59\x36\x34\x2a\x17\x78\x20\xeb\x58\x2b\x5c\xa5\x97\xf8\x36\x14\x44\x47\x29\xfa\x74\x2d\x62\xec\x75\x87\x9d\xdc\x43\x69\x8f\xce\x11\x7c\xc3\x0e\x5b\x6e\x09\xf4\x52\x92\xf1\x60\x85\x52\xef\x4c\xcb\x52\x95\x84\x9e\x7d\x33\x3c\x73\x6c\x92\x8a\x18\x9f\x8f\x2d\xf4\xc6\x4b\x56\x90\x28\xb5\xd9\x43\x6f\xbf\xae\x83\xf4\x03\x70\xf8\x35\xde\x9b\x1f\xb3\xac\xef\xfb\x54\x0e\xb0\xa9\xb6\x75\xd6\x1e\x0a\x5d\x36\xcf\x6f\x66\x8b\x62\x96\x5c\xa5\x97\xc3\x95\x7b\xd5\x92\x73\xb0\xf4\x7b\xc7\x96\x2a\x6c\xf6\x90\xc6\xb4\x5c\xca\x4d\x4b\x68\x65\x0f\x6d\x21\x6b\x4b\x54\xc1\xeb\xc0\xdb\x5b\xf6\xac\xea\x0b\x38\xbd\xf5\xbd\xb4\x24\x62\x54\xec\xbc\xe5\x4d\xe7\x4f\xcc\x1a\xe9\xd8\x9d\x14\x68\x05\xa9\x10\x4d\x0b\xe4\x45\x84\x9f\xa7\x45\x5e\x5c\x88\x18\x8f\xf9\xfa\xd7\xe5\xfd\x1a\x8f\xd3\xd5\x6a\xba\x58\xe7\xb3\x02\xcb\x15\x6e\x96\x8b\xdb\x7c\x9d\x2f\x17\x05\x96\xbf\x60\xba\xf8\x8c\xbb\x7c\x71\x7b\x01\x62\xdf\x90\x05\xbd\x18\x1b\xf8\xb5\x05\x07\x1b\xa9\x0a\x9e\x15\x44\x27\x00\x5b\x7d\x00\x72\x86\x4a\xde\x72\x89\x56\xaa\xba\x93\x35\xa1\xd6\xcf\x64\x15\xab\x1a\x86\xec\x8e\x5d\x08\xd3\x41\xaa\x4a\xc4\x68\x79\xc7\x5e\xfa\xe1\xe4\xc3\x50\x69\xd8\xa5\x75\x88\xf3\x59\xb7\xdd\x6e\x18\x52\x3a\xd7\xed\x0e\x3e\xd1\x0b\x3b\x1f\xfa\x84\x73\xd7\xc8\x60\xed\x90\xae\x91\x96\x94\x1f\xf3\x63\xc5\x5e\xc4\x28\xb5\x0a\xe1\x92\x4d\x91\xfb\xf1\xcb\x0d\x15\x96\x2a\x76\x60\xe5\xbc\x6c\xdb\x01\x26\x15\xf9\xa2\x58\x4f\xe7\xf3\x2f\x0f\xcb\xf9\xfd\x6f\xb3\x49\x94\x69\xe3\xa3\xff\xc9\x13\xde\x30\x44\x36\xd9\x72\x18\x51\xc4\x03\xd3\xbf\x11\x69\x95\x38\x2f\xad\xcf\xca\x46\xaa\x9a\x82\xb0\xe5\xba\xb3\x03\x18\x5c\x69\xd9\x78\x97\x8a\xc7\xe5\xea\xee\xcb\x6d\xbe\x9a\x44\x59\xaf\xed\x53\x52\xb1\x8d\x84\x78\x98\xad\x8a\x7c\xb9\x98\x44\xdf\xa7\x57\xe9\x65\x24\x44\x88\x85\xc3\x4a\x45\x67\x3f\x45\xa2\xd2\xa2\x94\x8e\x70\x16\x8e\x44\x58\xe5\x84\x27\xe7\x7f\x24\xc9\x71\xf8\x84\x95\xd7\x93\xf3\x4f\x83\xf4\xde\x82\xb3\x57\x8e\xcf\x27\x6f\xd1\x20\xba\x86\xb7\x7e\xf8\x77\x7d\x7d\x68\xd4\x0f\x8d\x46\x96\xb1\xc9\xdf\x98\xff\x7d\xfd\x58\x1e\xa3\x53\x4f\x4a\xf7\x0a\xda\x84\x79\xc7\x12\x72\xb2\x14\x95\x56\x24\x04\x95\x8d\x1e\xc3\x0a\x4b\x75\xf0\x67\x34\x06\x61\x02\x44\x67\xaf\xe3\xc3\x6f\x91\xd8\x3d\x55\x6c\x91\x98\x77\xc7\xa5\x41\x36\x9a\x9d\xba\xe6\x54\xcd\x06\xf9\xab\xd4\xde\xcb\x1f\x38\x86\x2d\x4a\xa2\xb3\xd7\x63\x06\x6f\xd1\x5f\x2c\xa7\x4e\xbe\x23\xfa\x28\x3e\x23\x3b\xac\xe4\x3f\xa8\x07\x45\xfc\x19\x00\x00\xff\xff\xce\xa7\x2e\xcb\x71\x05\x00\x00") + +func testImagesPetsRedisInstallerInstallShBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsRedisInstallerInstallSh, + "test/images/pets/redis-installer/install.sh", + ) +} + +func testImagesPetsRedisInstallerInstallSh() (*asset, error) { + bytes, err := testImagesPetsRedisInstallerInstallShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/redis-installer/install.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsRedisInstallerOnStartSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x54\x61\x6f\xdb\x36\x14\xfc\xce\x5f\x71\x93\x0c\xa4\x0d\x6c\x39\xeb\x80\x0e\x6b\x61\x0c\x5e\xe2\xb6\x46\x5b\x3b\x88\xdd\x15\x45\xd7\x01\xb4\xf4\x24\x71\xa0\x49\x8d\xa4\xa2\x0a\x49\xfe\xfb\xf0\x28\x67\x8d\xd3\xcd\x1f\x6c\x8b\xe2\xe3\xbb\xbb\x77\xbc\xf4\x87\x69\xeb\xdd\x74\xa7\xcc\x94\xcc\x35\x76\xd2\xd7\x42\xa4\x38\xb7\x4d\xef\x54\x55\x07\x3c\x3b\xfb\xf1\x39\xb6\x35\xe1\x6d\xbb\x23\x67\x28\x90\xc7\xbc\x0d\xb5\x75\x3e\x13\xa9\x48\xf1\x4e\xe5\x64\x3c\x15\x68\x4d\x41\x0e\xa1\x26\xcc\x1b\x99\xd7\x74\xff\x66\x8c\xdf\xc9\x79\x65\x0d\x9e\x65\x67\x78\xc2\x1b\x92\xc3\xab\xe4\xe9\x4b\x91\xa2\xb7\x2d\xf6\xb2\x87\xb1\x01\xad\x27\x84\x5a\x79\x94\x4a\x13\xe8\x6b\x4e\x4d\x80\x32\xc8\xed\xbe\xd1\x4a\x9a\x9c\xd0\xa9\x50\xc7\x36\x87\x43\x32\x91\xe2\xd3\xe1\x08\xbb\x0b\x52\x19\x48\xe4\xb6\xe9\x61\xcb\x87\xfb\x20\x43\x04\xcc\x9f\x3a\x84\xe6\xc5\x74\xda\x75\x5d\x26\x23\xd8\xcc\xba\x6a\xaa\x87\x8d\x7e\xfa\x6e\x79\xbe\x58\x6d\x16\x93\x67\xd9\x59\x2c\xf9\x60\x34\x79\x0f\x47\x7f\xb7\xca\x51\x81\x5d\x0f\xd9\x34\x5a\xe5\x72\xa7\x09\x5a\x76\xb0\x0e\xb2\x72\x44\x05\x82\x65\xbc\x9d\x53\x41\x99\x6a\x0c\x6f\xcb\xd0\x49\x47\x22\x45\xa1\x7c\x70\x6a\xd7\x86\x23\xb1\xee\xd1\x29\x7f\xb4\xc1\x1a\x48\x83\x64\xbe\xc1\x72\x93\xe0\xb7\xf9\x66\xb9\x19\x8b\x14\x1f\x97\xdb\x37\xeb\x0f\x5b\x7c\x9c\x5f\x5d\xcd\x57\xdb\xe5\x62\x83\xf5\x15\xce\xd7\xab\x8b\xe5\x76\xb9\x5e\x6d\xb0\x7e\x85\xf9\xea\x13\xde\x2e\x57\x17\x63\x90\x0a\x35\x39\xd0\xd7\xc6\x31\x7e\xeb\xa0\x58\x46\x2a\x58\xb3\x0d\xd1\x11\x80\xd2\x0e\x80\x7c\x43\xb9\x2a\x55\x0e\x2d\x4d\xd5\xca\x8a\x50\xd9\x6b\x72\x46\x99\x0a\x0d\xb9\xbd\xf2\x3c\x4c\x0f\x69\x0a\x91\x42\xab\xbd\x0a\x32\xc4\x95\xef\x48\x65\x42\x78\x0a\x98\x90\x10\xe7\xaf\x5e\xcf\xa6\xb6\x09\x53\x47\x85\xf2\xc3\x77\x96\x5b\x53\x8a\x37\xeb\xcd\x76\x35\x7f\xbf\x98\x8d\x9e\xd4\xd6\x07\x23\xf7\xf4\x54\x5c\xcc\xb7\xf3\x8b\xe5\xd5\x2c\x99\x16\x32\xc8\x44\xa4\xb8\xb4\x2e\xb0\x2a\x5d\xad\xf2\x1a\xb1\x1e\x5a\xf9\x40\xc6\x47\xe8\xb9\x35\x86\xf2\x08\x24\x13\x97\xeb\xab\xed\xec\xf9\x4f\x3f\xff\xc2\x66\xbe\x64\xe4\x74\x4d\xae\xb7\x86\xb0\x6b\x03\x6c\xeb\x3c\xe9\x92\x67\xe5\x89\xa0\xa2\x4f\x1c\x9d\x78\x48\xec\xa5\x0f\xe4\x32\xac\x8d\xee\xc1\x05\x0d\x05\xf8\x20\x5d\xf0\xd1\x41\x90\x08\x6a\x4f\x3c\x59\x2e\xec\x08\x85\x35\x27\x21\x1e\x74\x5f\xcd\xab\xb9\x34\x90\xde\xb7\xfb\x41\xe5\xc6\x7a\xc5\xe0\x78\xce\xdc\x3e\x13\x5d\xcd\x16\x77\x24\x0b\x4c\x9c\xc4\xbb\xe5\x6a\xf1\x12\x85\x15\xec\x4f\x55\xe2\xf3\x67\x24\xa3\x1b\x5e\xfd\x7c\xf6\xe5\x2e\xc1\x6c\x86\xd3\x64\x74\x73\xaf\xd6\x5d\x72\x8a\x2f\x5f\x5e\xf2\xd9\x26\x96\xf0\x87\xaf\xe1\x44\x61\x42\x48\xfc\xed\x9f\x3b\x65\x8a\xec\x74\x74\xcb\xbf\xf8\x76\xd4\x6d\x82\xd1\xcd\xf9\xab\xd7\x77\xb1\x8c\x34\xf7\x42\x32\x7a\xf2\x78\x3a\x93\x5c\x2b\x4c\xea\x63\x14\xca\x94\x16\xb7\xa8\x1c\x35\x70\x56\x13\x6e\x63\xd3\x13\x3f\xfe\xc3\x8d\xc6\xe3\x93\xa7\x09\x66\x48\xf8\xcd\x8b\x41\x8a\x04\x8f\x41\xa6\xd8\xae\x2f\xd6\x2f\xf0\xde\x3a\xa6\xcf\x96\xcf\x83\xba\xe6\xff\x15\x7d\xfd\xf5\x7f\xc8\xa4\xf0\x5a\x5e\x93\x2d\x99\xd1\xe1\xef\x03\x52\x18\xdd\xf0\xcc\x1f\x91\x2b\x95\x28\xac\x21\x11\xdd\x1e\xe2\x1c\xd8\x4e\x28\x94\xa3\x3c\x58\xd7\x47\xe7\xc8\xa6\x21\xc3\x37\x4e\xf7\xd0\xb6\x62\x63\xc3\x1b\xd9\xf8\xda\x86\x98\x43\x3e\xc3\x96\x33\xc9\xd7\xb6\xd5\x6c\xfa\x1d\x8f\xba\xe1\x54\x63\xff\x05\x5c\x5b\xcd\x73\x3e\xd8\x70\x58\xcd\xfb\x4c\x1c\x53\xc8\x4e\x0b\xe5\xc0\xf8\xf9\x77\x74\x73\xf0\xf8\x03\xcc\x22\x8d\x51\xfb\x18\x90\xf2\x31\x4f\x02\x99\xd8\x22\x5a\x19\x9b\xc5\x16\xb6\x21\x17\xef\x5e\x86\x8f\x2a\xd4\xb6\x0d\x43\x78\x7a\x0a\x31\x7d\x44\x7a\xb8\x28\x7f\xb5\x3e\xfc\xcb\xc9\x33\x74\x65\x0b\x95\x4b\xad\xfb\xc3\x85\x62\x5b\x72\x3f\x2f\xcb\x81\x88\x44\x1e\x83\x71\xa0\xde\x29\xad\x45\x8a\xc6\xd9\xa2\xcd\x89\xa3\x69\x00\xc9\x35\x99\xb4\xe5\x90\xd7\xca\x44\x8d\xf9\x5a\xab\xaa\xe5\xa4\xbc\x97\xfb\xb1\x16\xdf\xaa\xa3\x20\x0f\x1e\x7b\xf2\x47\x82\x2c\x22\x5b\xe6\x4f\x08\x4e\x55\x15\x39\xce\x1e\x94\xbe\x37\x79\x86\x2b\xca\xed\x7e\x4f\xa6\xe0\x66\x54\xca\x56\x07\xe6\x92\x44\x91\x3c\xe5\xc9\x78\x20\x28\xd2\xef\x29\xce\x2f\xef\x63\xfc\x10\x1b\xff\x85\x31\xf6\x79\x00\x72\x78\x96\xba\x93\xfd\x43\xa0\xe2\x9f\x00\x00\x00\xff\xff\xce\x83\xcb\x23\x4a\x07\x00\x00") + +func testImagesPetsRedisInstallerOnStartShBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsRedisInstallerOnStartSh, + "test/images/pets/redis-installer/on-start.sh", + ) +} + +func testImagesPetsRedisInstallerOnStartSh() (*asset, error) { + bytes, err := testImagesPetsRedisInstallerOnStartShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/redis-installer/on-start.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsZookeeperInstallerBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\xcd\xb6\x28\xd6\x4b\x4f\x2e\xd2\xcb\xcc\xd7\x4f\x49\x4d\xca\x4c\xcc\xd3\x4d\x4a\x2c\x4e\xd5\x05\x4b\x5a\x19\xe8\x99\xe8\x19\x72\x41\x95\x17\xe5\xe2\x54\x5c\x94\x8b\xae\x14\x8f\xc9\x20\x49\x14\xe5\x05\x05\xc9\x66\x26\x39\xa9\xb8\x34\x40\xa5\xa1\x5a\x00\x01\x00\x00\xff\xff\x2a\x1e\xc7\x42\xbc\x00\x00\x00") + +func testImagesPetsZookeeperInstallerBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsZookeeperInstallerBaseimage, + "test/images/pets/zookeeper-installer/BASEIMAGE", + ) +} + +func testImagesPetsZookeeperInstallerBaseimage() (*asset, error) { + bytes, err := testImagesPetsZookeeperInstallerBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/zookeeper-installer/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsZookeeperInstallerDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x93\x51\x6f\xdb\x36\x14\x85\xdf\xf9\x2b\x0e\xac\xa1\xdb\x80\x48\xca\x3a\x64\x03\xba\x27\xd5\x56\x5b\xa1\x89\xd4\x49\xf6\x8a\x60\x1b\x0a\x4a\xba\x96\x88\x49\x24\x43\x52\x51\x9c\x5f\x3f\x50\x76\x10\x07\x2b\x3a\x3f\xd9\xe4\x3d\x87\xe7\x7e\xf7\x3a\xc0\x5a\xe9\x83\x11\x5d\xef\xf0\xfa\xf2\xa7\x5f\xb0\xed\x09\x1f\xa7\x9a\x8c\x24\x47\x16\xc9\xe4\x7a\x65\x6c\xc4\x02\x16\xe0\x5a\x34\x24\x2d\xb5\x98\x64\x4b\x06\xae\x27\x24\x9a\x37\x3d\x3d\xdd\x5c\xe0\x0f\x32\x56\x28\x89\xd7\xd1\x25\x7e\xf0\x05\xab\xd3\xd5\xea\xc7\xdf\x58\x80\x83\x9a\x30\xf2\x03\xa4\x72\x98\x2c\xc1\xf5\xc2\x62\x2f\x06\x02\x3d\x34\xa4\x1d\x84\x44\xa3\x46\x3d\x08\x2e\x1b\xc2\x2c\x5c\xbf\x3c\x73\x32\x89\x58\x80\xdb\x93\x85\xaa\x1d\x17\x12\x1c\x8d\xd2\x07\xa8\xfd\x79\x1d\xb8\x5b\x02\xfb\x4f\xef\x9c\x7e\x13\xc7\xf3\x3c\x47\x7c\x09\x1b\x29\xd3\xc5\xc3\xb1\xd0\xc6\xd7\xd9\x3a\xcd\xab\x34\x7c\x1d\x5d\x2e\x92\x9d\x1c\xc8\x5a\x18\xba\x9b\x84\xa1\x16\xf5\x01\x5c\xeb\x41\x34\xbc\x1e\x08\x03\x9f\xa1\x0c\x78\x67\x88\x5a\x38\xe5\xf3\xce\x46\x38\x21\xbb\x0b\x58\xb5\x77\x33\x37\xc4\x02\xb4\xc2\x3a\x23\xea\xc9\xbd\x80\xf5\x94\x4e\xd8\x17\x05\x4a\x82\x4b\xac\x92\x0a\x59\xb5\xc2\xdb\xa4\xca\xaa\x0b\x16\xe0\x73\xb6\xfd\x50\xec\xb6\xf8\x9c\x94\x65\x92\x6f\xb3\xb4\x42\x51\x62\x5d\xe4\x9b\x6c\x9b\x15\x79\x85\xe2\x1d\x92\xfc\x16\x1f\xb3\x7c\x73\x01\x12\xae\x27\x03\x7a\xd0\xc6\xe7\x57\x06\xc2\x63\xa4\xd6\x33\xab\x88\x5e\x04\xd8\xab\x63\x20\xab\xa9\x11\x7b\xd1\x60\xe0\xb2\x9b\x78\x47\xe8\xd4\x3d\x19\x29\x64\x07\x4d\x66\x14\xd6\x0f\xd3\x82\xcb\x96\x05\x18\xc4\x28\x1c\x77\xcb\xc9\x7f\x9a\x8a\x18\x0b\xb0\x2d\x36\xc5\x1b\x74\xe4\x60\x44\xeb\x67\x52\x73\xdb\xa3\x25\x4d\xb2\x25\xd9\x1c\xbc\x11\xec\x2c\x5c\xd3\x7b\x78\x7a\xf0\x13\xac\x27\x7b\xa8\xd5\x83\xcf\xe9\x97\xcf\x71\x83\xe7\x53\xf0\xc1\x2a\xb4\x8a\xac\xfc\xde\xc1\x12\x8d\x5e\xb8\xbc\x6e\x9d\x77\xf3\xdb\xe2\x3b\x16\x4a\x46\x2c\x29\xdf\x7b\x7e\x69\x76\x93\xbc\x4f\xd9\xbb\xb2\xb8\xc1\x77\xcf\xbf\xd9\xba\x2c\xaa\xea\xcb\xdb\x5d\x76\xbd\xf9\xb2\x2e\x3e\xdd\xe2\x8e\xc6\x29\xfc\x3d\xbd\xd9\x25\xe5\xfa\x43\x68\x7d\x73\x0d\xe2\xc9\x9a\xb8\x16\x32\x66\xac\xdc\xe5\x68\x06\xe2\x32\x14\xd2\x3a\x3e\x0c\x98\x7d\x73\x4b\x57\x92\x5c\xc3\x1d\x63\xc9\x66\x03\x25\xbd\xd8\xb8\xc8\xf6\x88\x19\x5b\xbc\x35\x91\x09\xf7\x62\xe1\x14\xb3\xd3\x10\xca\x34\xd9\xdc\xa4\xd1\xd8\x2e\xd6\x8b\x59\x78\x87\xb0\x40\xfc\xa8\xd4\x3f\x44\x9a\x4c\xf8\x73\x74\x15\x5d\x86\x7c\xd0\x3d\x8f\x1c\x37\x51\xf7\xf8\xb4\xc3\xdc\x34\xbd\xb8\xa7\xf3\x3d\xf6\x7b\xf4\xac\xfd\xba\xcb\xb7\xbd\x5f\xbd\xc2\x5f\xcc\xff\x51\x3c\xf8\xf0\xe1\x71\xff\x3f\x59\xc2\x35\x62\x37\xea\xd8\x0b\xc7\xfb\xe3\xf7\xaf\x0a\xce\x7c\x7c\xad\x19\xbf\x6d\x7c\x24\x79\xe2\x7c\x04\xb9\xe0\xef\x47\xd5\x22\x6c\xf0\xeb\xd5\x15\xe2\xf3\xeb\x17\xd0\xcf\x68\xb3\x34\xdf\x96\xb7\x9f\x8a\x2c\xdf\xe2\xcf\xd5\x99\x64\xf5\x37\xfb\x37\x00\x00\xff\xff\xde\x7f\x41\x2e\xef\x04\x00\x00") + +func testImagesPetsZookeeperInstallerDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsZookeeperInstallerDockerfile, + "test/images/pets/zookeeper-installer/Dockerfile", + ) +} + +func testImagesPetsZookeeperInstallerDockerfile() (*asset, error) { + bytes, err := testImagesPetsZookeeperInstallerDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/zookeeper-installer/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsZookeeperInstallerMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdc\x3a\x10\x85\x9f\xaf\x7f\xc5\xd1\x86\x07\x90\x96\x84\x8b\xae\xb8\x12\x15\xaa\xd2\xdd\xed\x12\x41\x93\x2a\x09\x20\x9e\x90\x93\xcc\x26\x23\x65\xed\xd4\x76\x9a\xdd\x7f\x5f\x39\x80\x04\xaa\xdf\x66\xe6\x78\xce\xe7\xe3\x00\x2b\x3d\x1c\x0d\xb7\x9d\xc3\xe5\xc5\xbf\x57\x28\x3b\xc2\xdd\x58\x91\x51\xe4\xc8\x22\x1e\x5d\xa7\x8d\x0d\x45\x20\x02\xdc\x73\x4d\xca\x52\x83\x51\x35\x64\xe0\x3a\x42\x3c\xc8\xba\xa3\xf7\xc9\x12\x8f\x64\x2c\x6b\x85\xcb\xf0\x02\xa7\x5e\xb0\x78\x1b\x2d\xce\xbe\x88\x00\x47\x3d\x62\x2f\x8f\x50\xda\x61\xb4\x04\xd7\xb1\xc5\x8e\x7b\x02\x1d\x6a\x1a\x1c\x58\xa1\xd6\xfb\xa1\x67\xa9\x6a\xc2\xc4\xae\x9b\x6d\xde\x96\x84\x22\xc0\xf3\xdb\x0a\x5d\x39\xc9\x0a\x12\xb5\x1e\x8e\xd0\xbb\x8f\x3a\x48\x37\x03\xfb\xd3\x39\x37\x5c\x47\xd1\x34\x4d\xa1\x9c\x61\x43\x6d\xda\xa8\x7f\x15\xda\xe8\x3e\x59\x6d\xd2\x62\x73\x7e\x19\x5e\xcc\x57\x1e\x54\x4f\xd6\xc2\xd0\xaf\x91\x0d\x35\xa8\x8e\x90\xc3\xd0\x73\x2d\xab\x9e\xd0\xcb\x09\xda\x40\xb6\x86\xa8\x81\xd3\x9e\x77\x32\xec\x58\xb5\x4b\x58\xbd\x73\x93\x34\x24\x02\x34\x6c\x9d\xe1\x6a\x74\x9f\xc2\x7a\xa7\x63\xfb\x49\xa0\x15\xa4\xc2\x22\x2e\x90\x14\x0b\x7c\x8b\x8b\xa4\x58\x8a\x00\x4f\x49\x79\x9b\x3d\x94\x78\x8a\xf3\x3c\x4e\xcb\x64\x53\x20\xcb\xb1\xca\xd2\x75\x52\x26\x59\x5a\x20\xfb\x8e\x38\x7d\xc6\x5d\x92\xae\x97\x20\x76\x1d\x19\xd0\x61\x30\x9e\x5f\x1b\xb0\x8f\x91\x1a\x9f\x59\x41\xf4\x09\x60\xa7\x5f\x81\xec\x40\x35\xef\xb8\x46\x2f\x55\x3b\xca\x96\xd0\xea\xdf\x64\x14\xab\x16\x03\x99\x3d\x5b\xff\x99\x16\x52\x35\x22\x40\xcf\x7b\x76\xd2\xcd\x9d\xbf\x1e\x15\x0a\x51\xe4\xab\x02\x37\x18\x88\xcc\xf9\x8e\xbd\x40\x64\x05\xbe\xde\xa0\x67\x35\x1e\x44\x9c\xaf\x6e\x7d\x25\xf7\xcd\xd5\x7f\xa2\x8c\xf3\xed\xa6\xf4\xf5\xc9\xe9\xea\x21\x5f\x27\xf9\x99\xd8\x66\x71\xfe\xc3\xb7\xfe\x17\xdb\xec\x3e\x4e\xb7\x2f\x8f\x9b\xbc\x48\xb2\x74\x5e\x22\x1d\x59\xe7\x4d\x5e\xd6\x49\x3e\xfb\x38\x1b\x7d\x34\xa3\xc3\xa0\x8d\x13\xa2\x62\x75\x2d\xfe\x09\xc3\x28\x0c\x23\xde\xcb\x96\xce\x47\xc7\x7d\x68\x3b\x54\xac\x70\x72\xea\x39\xcf\x84\x08\x7f\xde\x66\xe9\xf3\xb5\x6f\x8a\x3f\x01\x00\x00\xff\xff\x11\x9d\x3d\x9a\x07\x03\x00\x00") + +func testImagesPetsZookeeperInstallerMakefileBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsZookeeperInstallerMakefile, + "test/images/pets/zookeeper-installer/Makefile", + ) +} + +func testImagesPetsZookeeperInstallerMakefile() (*asset, error) { + bytes, err := testImagesPetsZookeeperInstallerMakefileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/zookeeper-installer/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsZookeeperInstallerVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe1\x02\x04\x00\x00\xff\xff\xdb\x31\xff\x00\x04\x00\x00\x00") + +func testImagesPetsZookeeperInstallerVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsZookeeperInstallerVersion, + "test/images/pets/zookeeper-installer/VERSION", + ) +} + +func testImagesPetsZookeeperInstallerVersion() (*asset, error) { + bytes, err := testImagesPetsZookeeperInstallerVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/zookeeper-installer/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsZookeeperInstallerInstallSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x55\xef\x6f\xdb\x36\x10\xfd\xce\xbf\xe2\x95\xf2\x87\xa4\x88\xe4\xb4\xeb\x86\xa1\xa9\xbb\x79\x89\x8b\x09\xcd\x6c\xc0\x72\x5b\x14\x45\x51\xd0\xd2\xd9\xba\x45\x26\x35\x92\xb2\x9a\x65\xf9\xdf\x07\xca\x76\x7e\xa7\x58\xe7\x4f\x96\xee\xf1\xee\xf1\xbd\xbb\x53\xf4\x04\xfd\x39\xeb\xfe\x5c\xb9\x52\x88\x08\xc7\xa6\x3e\xb7\xbc\x2c\x3d\x9e\x1f\x3e\xfb\x09\xb3\x92\xf0\xb6\x99\x93\xd5\xe4\xc9\x61\xd8\xf8\xd2\x58\x97\x88\x48\x44\x38\xe5\x9c\xb4\xa3\x02\x8d\x2e\xc8\xc2\x97\x84\x61\xad\xf2\x92\x76\x91\x03\xbc\x27\xeb\xd8\x68\x3c\x4f\x0e\xb1\x17\x00\x72\x1b\x92\xfb\x47\x22\xc2\xb9\x69\xb0\x52\xe7\xd0\xc6\xa3\x71\x04\x5f\xb2\xc3\x82\x2b\x02\x7d\xcd\xa9\xf6\x60\x8d\xdc\xac\xea\x8a\x95\xce\x09\x2d\xfb\xb2\x2b\xb3\x4d\x92\x88\x08\x1f\xb7\x29\xcc\xdc\x2b\xd6\x50\xc8\x4d\x7d\x0e\xb3\xb8\x89\x83\xf2\x1d\xe1\xf0\x2b\xbd\xaf\x5f\xf6\xfb\x6d\xdb\x26\xaa\x23\x9b\x18\xbb\xec\x57\x1b\xa0\xeb\x9f\xa6\xc7\xa3\x71\x36\x8a\x9f\x27\x87\xdd\x91\x77\xba\x22\xe7\x60\xe9\xaf\x86\x2d\x15\x98\x9f\x43\xd5\x75\xc5\xb9\x9a\x57\x84\x4a\xb5\x30\x16\x6a\x69\x89\x0a\x78\x13\xf8\xb6\x96\x3d\xeb\xe5\x01\x9c\x59\xf8\x56\x59\x12\x11\x0a\x76\xde\xf2\xbc\xf1\xb7\xc4\xda\xb1\x63\x77\x0b\x60\x34\x94\x86\x1c\x66\x48\x33\x89\xdf\x86\x59\x9a\x1d\x88\x08\x1f\xd2\xd9\xef\x93\x77\x33\x7c\x18\x4e\xa7\xc3\xf1\x2c\x1d\x65\x98\x4c\x71\x3c\x19\x9f\xa4\xb3\x74\x32\xce\x30\x79\x83\xe1\xf8\x23\xde\xa6\xe3\x93\x03\x10\xfb\x92\x2c\xe8\x6b\x6d\x03\x7f\x63\xc1\x41\x46\x2a\x82\x66\x19\xd1\x2d\x02\x0b\xb3\x21\xe4\x6a\xca\x79\xc1\x39\x2a\xa5\x97\x8d\x5a\x12\x96\x66\x4d\x56\xb3\x5e\xa2\x26\xbb\x62\x17\xcc\x74\x50\xba\x10\x11\x2a\x5e\xb1\x57\xbe\x7b\x73\xef\x52\x49\xe8\xa5\x59\xb0\x73\x6d\xaa\x66\xd5\x5d\x52\x39\xd7\xac\x36\x3a\xd1\x57\x76\x3e\xe4\x09\xef\x5d\xa9\x82\xb4\x9d\xbb\xb5\xb2\xa4\xfd\xce\x3f\xd6\xec\x45\x84\xdc\xe8\x60\x2e\xd9\x04\xa9\xdf\x3d\xb9\x0e\xf1\xb7\x31\x67\x44\x35\x59\xb0\x76\x5e\x55\x55\x47\x28\x11\xe9\x38\x9b\x0d\x4f\x4f\xbf\xbc\x9f\x9c\xbe\xfb\x63\x34\x90\x7d\x53\x7b\xf9\x3f\x39\x85\x3a\x35\x91\x8d\x17\x1c\xae\x29\xa2\x8e\xd7\x63\xac\x8c\x8e\x9d\x57\xd6\xf7\xf3\x52\xe9\x25\x85\xc0\x82\x97\x8d\xed\x88\xc1\xe5\x96\x6b\xef\x12\xf1\x61\x32\x7d\x7b\x92\x4e\xaf\x09\xb6\xc6\x9e\xc5\x05\xdb\x8e\xe5\xd0\x05\x09\x86\xb5\xe5\x2a\xee\xe6\x90\x1d\x7e\x48\x5e\x24\x3f\x87\x3f\x81\x4f\xa5\x3c\x39\x0f\xe7\x43\x1f\x1e\x60\xde\x78\xac\x37\xb3\x16\x80\x3f\x26\x87\x30\xba\x55\x36\xf8\xa4\xaa\xca\xb4\x28\xce\xb5\x5a\x71\x0e\x4b\xb7\x08\x25\xe2\xfd\x68\x9a\xa5\x93\xf1\x40\x76\xc7\x62\x55\xd5\xa5\x92\x42\x84\x9e\xe0\xd0\xcf\xb2\xf7\xab\x14\x85\x11\xb9\x72\x84\x5e\x78\x25\xc2\x1c\xc5\x3c\x78\xfa\x4f\x1c\x6f\x55\x8f\x59\x7b\x33\x78\xba\xdf\x85\xee\x6a\xdf\xbb\xe0\xe8\xe9\xe0\x52\x76\x41\x57\xf2\xc2\x77\xff\x8e\x8e\x36\x89\xda\x2e\xd1\xee\xfa\xbb\x24\x77\xf5\xf9\x76\x92\xed\xa1\x08\x8d\x3e\xd3\xa6\xd5\x30\x75\xb8\xdd\x0e\x42\x4e\xe5\xa2\x30\x9a\x84\xa0\xbc\x34\xbb\x5e\x09\x7d\xbd\x51\x63\xe7\x0b\xc2\x3d\x20\x7b\x17\xb7\xcb\x5f\x4a\xb1\x3a\x2b\xd8\x22\xae\x1f\x0c\xe6\x35\xfa\x3b\xdf\x13\x57\x3e\x84\xe9\x77\xa0\x1b\x6d\xf4\x30\xe8\x1e\xbf\xab\x06\x8f\x65\xef\x62\xeb\xd5\xa5\xbc\xe2\x79\x5b\xeb\x3b\x3c\xef\x07\xd7\xe8\x5f\x4f\xcc\x03\x88\xeb\x68\xa0\xfb\x4d\x40\x3f\x28\x17\x1e\xbf\x38\xb5\xaa\x2b\x4a\xf2\xc5\xf2\x3f\x9e\x08\xd0\x6e\x16\x27\x27\x93\x97\xc8\x4a\xd3\x54\xc5\x55\x83\x6e\x0d\x99\x13\x3c\x6f\x06\x33\xf4\xfb\xb6\xb9\x7f\x11\xe9\x9b\x6c\x20\x13\x09\x4b\xaa\x40\x6c\x15\xa6\xa3\xd3\xd1\x30\x1b\xe1\xd5\xab\x57\xb8\x29\x91\xe0\x05\x3e\x41\xf6\xf6\xf6\x64\xef\x62\x0b\xfa\xf4\xec\xf3\xa5\xdc\xdf\x97\x88\x97\x1e\x2f\xf0\xf9\x28\xe4\xde\x74\x49\xa7\xfb\x23\x62\xbb\xa6\xae\x8d\xf5\xee\xb1\x21\x3a\x00\x69\x35\xef\xec\x62\x7f\x9d\x4d\x3a\xaf\x74\xa1\x2a\xa3\x69\x14\xe2\x54\x0c\x16\xaa\x72\x24\xf1\xfa\xf5\xf7\x28\x75\x9d\x70\x5b\xff\xb8\x2b\xfe\x86\x2b\x1a\xdc\xcb\xf2\x48\x92\x64\x7b\xf4\x7b\x6b\x2f\xf8\xda\xa8\x6e\x75\x86\x9d\x89\x52\xe5\x67\x07\xd0\xe4\x73\xe5\xc3\x9b\xdc\xe8\x35\x69\x0e\x9b\xdb\x1b\x94\x6a\x1d\x56\xf7\x9d\xfd\x7c\xb5\x2e\x45\x84\x14\xad\xda\x60\xd5\xda\x70\x81\xc6\x05\xed\x14\xf2\xc6\x79\xb3\xba\xb9\xd4\x57\xe1\x2b\xf4\x67\xe3\xfc\xf6\x23\xc5\x2e\x41\x66\x36\x1f\x79\xf6\x89\x18\x1f\x0f\x7a\x7b\x6d\xc9\x79\x09\x9d\xef\xef\x3c\xbf\x18\x1f\x5f\x4a\x3c\x19\x40\xca\xfb\x26\x87\xb3\xa1\x9c\xce\x1f\x9f\xa2\x00\xde\x0c\x40\x97\xe9\x21\xc8\x82\xc5\xbf\x01\x00\x00\xff\xff\xa3\xa5\x09\x26\x3c\x09\x00\x00") + +func testImagesPetsZookeeperInstallerInstallShBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsZookeeperInstallerInstallSh, + "test/images/pets/zookeeper-installer/install.sh", + ) +} + +func testImagesPetsZookeeperInstallerInstallSh() (*asset, error) { + bytes, err := testImagesPetsZookeeperInstallerInstallShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/zookeeper-installer/install.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesPetsZookeeperInstallerOnStartSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x57\x61\x6f\xdb\x38\x12\xfd\xae\x5f\xf1\x56\x36\xd0\xa4\x17\xcb\x49\x7a\x77\x08\xdc\x3a\x38\x37\x71\x77\x8d\xb6\xc9\x22\x4e\xb7\x28\x82\xa0\xa0\xa5\xb1\xc5\x2d\x45\xaa\x24\x15\xc7\xcd\xfa\xbf\x1f\x86\x92\x6c\x27\xb7\xdd\xc3\x02\x4d\xbe\x58\x12\x39\x9c\x79\xf3\xe6\xcd\xb0\xf3\x13\xfa\x33\xa9\xfb\x33\xe1\xf2\x28\xea\xe0\xcc\x94\x2b\x2b\x17\xb9\xc7\xf1\xe1\xd1\xbf\x71\x9d\x13\xde\x56\x33\xb2\x9a\x3c\x39\x8c\x2a\x9f\x1b\xeb\x92\xa8\x13\x75\xf0\x4e\xa6\xa4\x1d\x65\xa8\x74\x46\x16\x3e\x27\x8c\x4a\x91\xe6\xd4\x7e\x39\xc0\x6f\x64\x9d\x34\x1a\xc7\xc9\x21\xf6\x78\x41\xdc\x7c\x8a\xf7\x5f\x46\x1d\xac\x4c\x85\x42\xac\xa0\x8d\x47\xe5\x08\x3e\x97\x0e\x73\xa9\x08\x74\x9f\x52\xe9\x21\x35\x52\x53\x94\x4a\x0a\x9d\x12\x96\xd2\xe7\xe1\x98\xc6\x48\x12\x75\xf0\xa9\x31\x61\x66\x5e\x48\x0d\x81\xd4\x94\x2b\x98\xf9\xee\x3a\x08\x1f\x1c\xe6\xbf\xdc\xfb\x72\xd0\xef\x2f\x97\xcb\x44\x04\x67\x13\x63\x17\x7d\x55\x2f\x74\xfd\x77\x93\xb3\xf1\xc5\x74\xdc\x3b\x4e\x0e\xc3\x96\x0f\x5a\x91\x73\xb0\xf4\xb5\x92\x96\x32\xcc\x56\x10\x65\xa9\x64\x2a\x66\x8a\xa0\xc4\x12\xc6\x42\x2c\x2c\x51\x06\x6f\xd8\xdf\xa5\x95\x5e\xea\xc5\x01\x9c\x99\xfb\xa5\xb0\x14\x75\x90\x49\xe7\xad\x9c\x55\xfe\x11\x58\xad\x77\xd2\x3d\x5a\x60\x34\x84\x46\x3c\x9a\x62\x32\x8d\xf1\x7a\x34\x9d\x4c\x0f\xa2\x0e\x3e\x4e\xae\x7f\xb9\xfc\x70\x8d\x8f\xa3\xab\xab\xd1\xc5\xf5\x64\x3c\xc5\xe5\x15\xce\x2e\x2f\xce\x27\xd7\x93\xcb\x8b\x29\x2e\xdf\x60\x74\xf1\x09\x6f\x27\x17\xe7\x07\x20\xe9\x73\xb2\xa0\xfb\xd2\xb2\xff\xc6\x42\x32\x8c\x94\x31\x66\x53\xa2\x47\x0e\xcc\x4d\xed\x90\x2b\x29\x95\x73\x99\x42\x09\xbd\xa8\xc4\x82\xb0\x30\x77\x64\xb5\xd4\x0b\x94\x64\x0b\xe9\x38\x99\x0e\x42\x67\x51\x07\x4a\x16\xd2\x0b\x1f\xde\xfc\x4f\x50\x49\x14\x39\xf2\xe8\x91\x41\x29\x4b\x9a\x0b\xa9\x98\x5d\xd7\x9c\x60\x97\x5a\x59\x7a\xa4\x46\xcf\xe5\xa2\xb2\xe4\xf0\xcd\x98\x2f\x44\x25\x59\xa4\xaa\x72\x9e\x2c\x0a\x2a\x66\x64\xe1\x72\x59\x06\xf7\xee\x1a\x22\x99\xf9\x76\x71\xd4\xc1\xe9\x10\x2f\x92\x7f\x25\x87\x09\x26\x1e\x2e\x37\x95\xca\x02\x99\x66\xc4\x7c\xca\xb6\x8c\x31\xba\x97\xe6\x42\x2f\x28\x71\x79\xeb\x80\xd4\x35\xe1\xe8\x5e\x14\xa5\x0a\x6c\x1a\x39\x3e\x61\x54\x5a\xa9\x7a\x81\xff\xd2\xe1\x45\xf2\xcf\xe4\x84\x7f\xb0\x1d\x25\x3c\x39\x0f\xe7\x39\xff\x09\x87\xf4\xda\xf8\x1c\x7d\x53\x7a\x86\x05\x7d\x5f\x94\xfd\x6d\x38\xc2\x12\x84\x73\x55\x51\xd3\x63\x46\xb8\x33\xaa\x2a\xc8\xc1\xe5\xc2\xee\x3a\x58\x0a\x4b\xda\x27\x01\xa3\x90\x91\x42\x78\xf6\x85\x44\x9a\x43\x49\x4d\xb5\xbb\x84\x6c\xa5\x45\x21\xd3\x06\xbe\xba\x5a\xa4\x1b\x44\x1d\x38\xb2\x77\x64\x93\x57\x47\x98\x09\x0e\x5e\xea\x8c\xee\x4f\x87\xaf\xea\xf7\xbd\x4c\xbb\x9e\x16\x05\x9d\x0e\x5e\x95\x44\x16\xa5\xb1\xfe\x74\xf0\x8a\x14\xa5\x9c\xc4\xfa\xf9\x66\x60\x8d\xa2\xdb\x97\x37\xaf\x52\x25\x49\xfb\xf0\x16\x22\xcb\x98\x46\xa7\x83\xdb\xdd\xd7\xa7\x51\x07\x4f\x0e\x6b\x61\xaa\x8f\xac\x5f\xc2\xe7\xc2\xa3\x10\x3e\xcd\xa9\xfe\x2a\x79\x39\x32\xe1\x45\x26\x6d\xbf\x58\x49\xa6\xd3\x8e\x53\xad\x95\x70\xb6\xd1\x58\xe6\x32\xcd\xc1\xdf\x1d\xcb\x41\x51\x69\x99\x0a\x4f\x8c\x68\x28\x3d\x5e\x53\x95\x19\xa7\x86\x0d\x3d\x8e\xe8\x91\xb1\x40\x0a\xe6\x93\x22\xc1\x8c\x6d\x97\x46\x1d\x34\x91\x23\x15\x9a\xf3\xc4\xec\xf5\x06\x66\x56\x87\x72\xc0\x09\xf2\x32\x95\xa5\xd0\x9e\x55\x20\xa3\xb9\xa8\x94\xe7\xf3\xfe\x0c\x29\x3e\xd5\x94\x6c\x5a\xa8\x40\x8c\x66\xbd\x63\xa3\x87\x49\xf8\x7f\xb2\xf7\x3b\x61\xef\xc0\x29\x52\x16\x45\x87\x66\x53\x6a\xb4\xae\xdd\x77\x51\x74\xf6\xe6\xe7\x21\xb3\x70\x4b\xbe\x3e\x33\x84\x1f\x93\x74\xbe\x48\x1a\xda\xf0\xba\xcf\xaf\x47\x6f\xff\x72\xed\x4c\x7c\x89\xde\x7f\xfa\x3c\x39\xff\xfc\x66\xf2\x6e\x3c\x7c\xcc\xe9\x3a\x5f\xbf\x5c\x4e\xaf\x2f\x46\xef\xc7\xc3\xee\x5e\x6e\x9c\x67\x5e\xed\x47\xd1\x32\x67\x36\x5a\x12\x19\x7a\x56\xe0\xdd\xe4\x62\xfc\x12\x99\x89\x58\x78\x7f\x1d\x8f\xaf\xa6\xc3\xbd\xb8\xfb\x10\x7e\xdd\xfc\xe7\x76\x1d\x23\xee\x3e\xf0\xa2\x9b\xc3\xdb\x75\xbc\x1f\x65\x46\x13\x97\xd4\xb9\xd1\xcf\x02\x94\x21\xf8\xb9\xb4\xce\xb7\x82\x20\x58\x7d\x36\x59\x89\xe4\x1c\x37\xe8\x3e\x74\x36\x26\xd1\xa3\xaf\x38\xc2\xed\x4b\xde\xaa\xc3\xc1\x1d\x7c\x24\xe8\x46\xa0\x59\x9d\x09\xa6\x6a\xb9\xd9\x6a\x80\x92\x2e\x94\x5b\x6d\xd7\x41\x6a\x6f\xb0\xc5\x20\x69\x2c\x5d\x18\xa6\x1d\xf3\x39\xec\x6a\x7b\x97\x50\x4b\xb1\x62\x6e\x4a\x9d\xca\x6c\xa7\x51\xb5\xd8\x40\x66\xb5\x09\x4a\x73\x83\x23\x9c\x72\xe4\x5b\xf3\xeb\x78\xfb\x31\x6e\xca\xf8\x68\xd8\x22\x75\x78\xbb\x1e\x1c\x9f\x9c\x9c\x0c\x5e\x9c\x9c\x9c\xbc\x3c\x3e\x3a\x39\x8a\x6b\x03\x67\x6f\x7e\x6e\x76\x76\x70\x7d\x79\x7e\x39\xc0\xb7\x2f\xd3\xba\xd8\xa5\x96\x5e\x0a\x25\xbf\xd1\xa6\x24\xc5\x9c\xb0\x14\x2b\x46\x21\x17\x3a\x53\x84\x5a\x11\x03\x25\x9b\x62\x6c\x8c\xcd\x28\x15\xdc\x8f\x1d\x37\x8d\x15\xab\x9d\xe5\x9e\x86\xa5\x54\x0a\xa9\x25\x2e\x3e\x01\x4d\xcb\x76\xdf\x01\x5e\x7f\xb8\x86\xac\xbb\x6e\xe5\x58\xc8\x83\xed\xac\x31\x58\x9a\x0c\x9e\x8a\x52\x85\xb2\xcd\x69\x85\x22\xcc\x18\xa4\x33\x54\x65\x8d\xd7\x71\x6b\x2c\x34\x18\xcc\xac\xa4\x39\x5c\xa9\xa4\xc7\xcc\x0a\xa9\x1b\x00\xef\xa5\x8f\xe6\x92\x69\x32\xbe\x23\xbb\x82\xab\x66\x8e\xbe\x56\x5c\x10\x0d\x47\xa4\x63\xee\x50\xf6\x84\x2c\xc1\x6a\x69\x4d\x61\x7c\xcd\x05\xb1\x5b\xd3\x51\x0d\xfe\x16\x59\xae\x92\x75\x1c\xc9\xe1\x61\xf4\x6e\x3c\x3a\x1f\x5f\x0d\xbb\x2d\xe9\x23\x56\x90\x20\x57\x52\xe3\x11\xa1\x37\x6c\xdf\xdb\x83\x1c\xca\x7f\x1c\x61\x7f\x3f\x3c\x33\x51\x6f\x78\x2d\x6f\x5b\xc7\x18\x0e\xf1\x3c\xee\x3e\xb4\x16\xd7\xf1\x73\xdc\xee\x92\x16\x35\xf9\x86\x5d\xb9\x7d\xac\xeb\xad\xb6\xd0\xbc\x0d\x4e\x77\xe5\x77\xf8\xf4\x84\x51\xdd\x07\xb9\x6e\xf7\x6f\x09\x35\x68\xf1\x69\x99\xf5\x04\x80\x60\x46\x39\x6a\x2c\xd6\x81\x74\xf7\x82\x65\x67\xef\x2c\xfe\x08\xdd\xaf\xaf\xd3\x9d\xf0\xd8\x14\xfe\xc0\xc2\x52\x89\xf7\x26\xa3\x7d\x0c\x11\xf3\x8f\x41\xa3\xbc\xf1\xd3\x70\x81\x06\xe5\x8d\x91\xe6\xc3\x5c\xfe\x8d\x58\x76\x12\xfa\x17\xe1\xcc\xe5\x46\x6a\xb6\xad\x7a\x19\x44\x27\x50\x3d\xf0\xd1\x54\x1e\x2c\x75\x10\x7a\xb5\x14\xab\xa4\x9d\x5e\x0a\x12\xda\x05\x05\xd9\x14\xf7\x52\x38\xde\xdb\x34\xe8\x40\x0c\xd6\x93\xa4\x96\xa7\x9f\xd0\x9b\x3f\x4d\xcf\x8e\x40\x31\xa1\x71\xd4\x50\xfa\x92\xc7\xdc\xef\x77\xf9\x20\x5f\x9e\x34\x64\x3b\xed\xf0\xb9\x33\x42\x61\x32\x39\x97\x94\xf1\xd4\xd9\x88\xa6\x16\x2a\xea\xc0\xd2\x66\xcc\x0a\x1a\xe8\xea\xf2\x2f\x4b\x62\x67\xad\xa9\x16\xb5\x50\xc5\xed\xc2\x38\x74\x58\xa1\xb3\x24\x4a\x4b\x6c\x91\xab\x7f\xae\xc3\x10\xf7\x63\xa4\xe6\x87\xca\xcc\x8f\x92\x98\x27\x6d\x91\x6f\x46\x6d\xa0\x61\x72\x64\x17\xb7\x18\x7c\xa4\x9d\x34\xb4\x2d\xa6\x9e\xa2\x57\xc1\xc7\x66\x1c\x68\xef\x23\x85\x08\xc3\xad\x70\x50\x46\x2f\x20\x78\x5c\xe1\x39\x9d\x9e\x39\x7c\xad\x8c\xad\x8a\x04\xa3\x34\x35\x36\x63\x18\x7c\x9d\xca\xcc\xa4\x35\xac\x0c\x44\x3b\x58\x39\xfc\x5e\x39\xdf\x34\x1f\x65\x96\xe1\xe8\xa8\x83\x3b\xe3\xe9\x00\xd2\x3f\x73\x70\x9e\x61\xdc\x7e\x65\xed\x2b\x8d\xa3\x96\x53\x4d\x4a\x0e\x02\x14\xd2\xe3\x8b\x36\xcb\x70\x50\xd4\x61\x52\xba\x90\x8a\x5a\x52\x37\x01\xf0\x68\x5f\xf0\xcd\x67\x6e\x4d\x81\xe7\xd2\xbb\xe7\x8d\xb9\x24\x1a\x9d\x9f\x7f\x9e\x8e\xaf\x7e\xe3\x1a\x6e\xab\xb4\x11\xb1\x46\xbc\xbe\x53\xa8\xcd\x38\x34\x08\x05\xfb\xe7\x19\x38\x53\x92\xe1\x6f\x49\x8a\x9e\x0b\xa3\x43\x50\x8c\x75\x1c\x76\xa2\xc7\x03\x43\xdc\x7d\xd8\xfa\xb1\x8e\x39\x55\xbf\x5a\x73\xd7\x34\xed\x25\x3d\xbb\x23\x88\xd4\x57\x42\xa9\x15\x7e\x37\x52\x53\x3d\x64\xd8\x4a\x87\x6b\x4e\x73\xff\x88\x26\xd7\xe3\xab\x11\xdf\xab\x86\x87\x51\xa5\xbd\x54\xb5\xfc\x34\xc7\x6f\x25\x4f\x99\x54\x28\x16\x82\x47\x92\xf7\xc4\x0b\x9c\xa2\x9f\xd1\x5d\x5f\x57\x4a\x35\x1d\xa2\x16\xee\xcd\x29\xb7\x58\x8a\x70\x6d\x0c\xc3\x69\x3d\xcb\x66\xed\x69\xcc\xa9\x95\x4e\x31\x13\xe9\x17\x7e\xd8\x9c\x19\x01\x4e\x11\x95\x38\x8a\x42\xc7\xd9\x3a\xbd\xf9\xd5\x76\xa0\x7a\x50\xda\xbc\x0e\x63\xd2\xf1\xe1\xa3\x39\xa9\x11\xa2\x1d\x79\xfc\xbf\xc5\x60\xca\xe8\xbf\x01\x00\x00\xff\xff\xa6\x97\x4d\xe4\x40\x10\x00\x00") + +func testImagesPetsZookeeperInstallerOnStartShBytes() ([]byte, error) { + return bindataRead( + _testImagesPetsZookeeperInstallerOnStartSh, + "test/images/pets/zookeeper-installer/on-start.sh", + ) +} + +func testImagesPetsZookeeperInstallerOnStartSh() (*asset, error) { + bytes, err := testImagesPetsZookeeperInstallerOnStartShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/pets/zookeeper-installer/on-start.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesRedisBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\x33\xe3\x82\x0a\x17\xe5\xda\x26\x16\xe5\x1a\x1b\x95\x99\xe9\x63\x93\x04\xe9\x01\x91\x65\x16\x98\xd2\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x53\x41\xb1\xb1\xa5\x41\x85\x2d\x98\x44\x96\x04\x04\x00\x00\xff\xff\xc8\xfe\x7a\xdd\x91\x00\x00\x00") + +func testImagesRedisBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesRedisBaseimage, + "test/images/redis/BASEIMAGE", + ) +} + +func testImagesRedisBaseimage() (*asset, error) { + bytes, err := testImagesRedisBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/redis/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesRedisDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\x51\x4f\xdb\x30\x14\x85\xdf\xfd\x2b\x8e\x92\x3d\x6c\x52\x9b\x30\x26\x0d\x6d\x7b\x0a\x69\x80\x88\x36\x61\x49\x0b\x43\xd3\x84\x5c\xe7\x36\xb1\x96\xda\xc1\x76\x08\xfd\xf7\x53\x02\x88\xb1\xf9\xc9\xd7\xf7\xf8\xf8\xf3\xb1\x7d\xc4\xba\x3b\x18\x59\x37\x0e\xc7\x47\x1f\x4f\xb0\x6e\x08\x97\xfd\x96\x8c\x22\x47\x16\x51\xef\x1a\x6d\x6c\xc0\x7c\xe6\x63\x29\x05\x29\x4b\x15\x7a\x55\x91\x81\x6b\x08\x51\xc7\x45\x43\x2f\x9d\x19\xae\xc9\x58\xa9\x15\x8e\x83\x23\xbc\x1f\x05\xde\x73\xcb\xfb\xf0\x8d\xf9\x38\xe8\x1e\x7b\x7e\x80\xd2\x0e\xbd\x25\xb8\x46\x5a\xec\x64\x4b\xa0\x47\x41\x9d\x83\x54\x10\x7a\xdf\xb5\x92\x2b\x41\x18\xa4\x6b\xa6\x63\x9e\x4d\x02\xe6\xe3\xf6\xd9\x42\x6f\x1d\x97\x0a\x1c\x42\x77\x07\xe8\xdd\xdf\x3a\x70\x37\x01\x8f\xa3\x71\xae\xfb\x1a\x86\xc3\x30\x04\x7c\x82\x0d\xb4\xa9\xc3\xf6\x49\x68\xc3\x65\x1a\x27\x59\x99\xcc\x8f\x83\xa3\x69\xcb\x46\xb5\x64\x2d\x0c\xdd\xf7\xd2\x50\x85\xed\x01\xbc\xeb\x5a\x29\xf8\xb6\x25\xb4\x7c\x80\x36\xe0\xb5\x21\xaa\xe0\xf4\xc8\x3b\x18\xe9\xa4\xaa\x67\xb0\x7a\xe7\x06\x6e\x88\xf9\xa8\xa4\x75\x46\x6e\x7b\xf7\x26\xac\x17\x3a\x69\xdf\x08\xb4\x02\x57\xf0\xa2\x12\x69\xe9\xe1\x34\x2a\xd3\x72\xc6\x7c\xdc\xa4\xeb\x8b\x7c\xb3\xc6\x4d\x54\x14\x51\xb6\x4e\x93\x12\x79\x81\x38\xcf\x16\xe9\x3a\xcd\xb3\x12\xf9\x19\xa2\xec\x16\x97\x69\xb6\x98\x81\xa4\x6b\xc8\x80\x1e\x3b\x33\xf2\x6b\x03\x39\xc6\x48\xd5\x98\x59\x49\xf4\x06\x60\xa7\x9f\x80\x6c\x47\x42\xee\xa4\x40\xcb\x55\xdd\xf3\x9a\x50\xeb\x07\x32\x4a\xaa\x1a\x1d\x99\xbd\xb4\xe3\x63\x5a\x70\x55\x31\x1f\xad\xdc\x4b\xc7\xdd\xb4\xf2\xdf\xa5\x02\xc6\xa2\xe2\x7c\xa4\x4f\xd2\x55\x74\x9e\xb0\xb3\x22\x5f\xe1\xdd\x6b\xcd\xe2\x22\x2f\xcb\xbb\xd3\x4d\xba\x5c\xdc\xc5\xf9\xd5\x2d\xee\x69\xdf\xcf\xbf\x27\xab\x4d\x54\xc4\x17\x73\x3b\x5a\x0b\x84\xbd\x35\xe1\x56\xaa\x90\xb1\x62\x93\x81\x77\xbf\xc1\xab\x0a\xf3\xb9\xd2\x73\x31\xfd\x35\x43\x95\xb4\x8c\x4d\x16\xd3\x3c\x10\x5a\xed\x10\x92\x13\xe1\x6b\xcd\x58\xf2\xe3\x2a\x2f\x13\x7c\xfe\x74\xf2\x85\x5d\xe7\xcb\xcd\x2a\x41\x58\x71\xc7\x19\x8b\x57\x0b\xfc\xf4\x26\xed\xdc\x92\x79\x20\xe3\xcd\xe0\xfd\x63\xe0\xfd\x62\x7f\x02\x00\x00\xff\xff\x65\x6b\x18\x97\x1d\x03\x00\x00") + +func testImagesRedisDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesRedisDockerfile, + "test/images/redis/Dockerfile", + ) +} + +func testImagesRedisDockerfile() (*asset, error) { + bytes, err := testImagesRedisDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/redis/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesRedisOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\xc8\xcd\x2e\xcd\x4d\x2c\x49\x4c\xe7\x4a\xcd\x4d\x2d\xca\x2c\x29\x2d\x8e\x47\x53\x50\x94\x9b\x9b\x01\x08\x00\x00\xff\xff\x64\x89\x71\xde\x34\x00\x00\x00") + +func testImagesRedisOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesRedisOwners, + "test/images/redis/OWNERS", + ) +} + +func testImagesRedisOwners() (*asset, error) { + bytes, err := testImagesRedisOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/redis/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesRedisVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") + +func testImagesRedisVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesRedisVersion, + "test/images/redis/VERSION", + ) +} + +func testImagesRedisVersion() (*asset, error) { + bytes, err := testImagesRedisVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/redis/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesRedisRedisConf = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xca\xcc\x4b\x51\x30\xd0\x03\x43\xae\x94\xcc\x22\x05\xfd\x94\xc4\x92\x44\x2e\x40\x00\x00\x00\xff\xff\xcd\x81\x31\xc0\x17\x00\x00\x00") + +func testImagesRedisRedisConfBytes() ([]byte, error) { + return bindataRead( + _testImagesRedisRedisConf, + "test/images/redis/redis.conf", + ) +} + +func testImagesRedisRedisConf() (*asset, error) { + bytes, err := testImagesRedisRedisConfBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/redis/redis.conf", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesRegressionIssue74839Gitignore = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd2\x2f\x4a\x4d\x2f\x4a\x2d\x2e\xce\xcc\xcf\xd3\xcd\x2c\x2e\x2e\x4d\xd5\x35\x37\xb1\x30\xb6\xe4\x02\x04\x00\x00\xff\xff\x58\x2f\x20\xa0\x18\x00\x00\x00") + +func testImagesRegressionIssue74839GitignoreBytes() ([]byte, error) { + return bindataRead( + _testImagesRegressionIssue74839Gitignore, + "test/images/regression-issue-74839/.gitignore", + ) +} + +func testImagesRegressionIssue74839Gitignore() (*asset, error) { + bytes, err := testImagesRegressionIssue74839GitignoreBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/regression-issue-74839/.gitignore", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesRegressionIssue74839Dockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x91\x41\x8f\xd3\x3c\x10\x86\xef\xfe\x15\xaf\x92\xcb\xf7\x49\x6d\x52\x0a\x12\x2c\x9c\x42\xdb\x15\xd1\x2e\x09\x6a\xb2\xac\x2a\xc4\xc1\x49\xa6\xc9\x48\xa9\x6d\x6c\x87\x6c\xff\x3d\x4a\xb6\x2b\x51\x01\x3e\xce\x3c\x1e\x3f\xf3\x3a\xc4\x46\x9b\xb3\xe5\xb6\xf3\x58\xaf\x5e\xdd\xa0\xec\x08\x77\x43\x45\x56\x91\x27\x87\x64\xf0\x9d\xb6\x2e\x12\xa1\x08\x71\xcf\x35\x29\x47\x0d\x06\xd5\x90\x85\xef\x08\x89\x91\x75\x47\x2f\x9d\x05\xbe\x92\x75\xac\x15\xd6\xd1\x0a\xff\x4d\x40\x70\x69\x05\xff\x7f\x10\x21\xce\x7a\xc0\x49\x9e\xa1\xb4\xc7\xe0\x08\xbe\x63\x87\x23\xf7\x04\x7a\xaa\xc9\x78\xb0\x42\xad\x4f\xa6\x67\xa9\x6a\xc2\xc8\xbe\x9b\x9f\xb9\x0c\x89\x44\x88\xc3\x65\x84\xae\xbc\x64\x05\x89\x5a\x9b\x33\xf4\xf1\x77\x0e\xd2\xcf\xc2\xd3\xe9\xbc\x37\xef\xe3\x78\x1c\xc7\x48\xce\xb2\x91\xb6\x6d\xdc\x3f\x83\x2e\xbe\x4f\x37\xbb\xac\xd8\x2d\xd7\xd1\x6a\xbe\xf2\xa0\x7a\x72\x0e\x96\x7e\x0c\x6c\xa9\x41\x75\x86\x34\xa6\xe7\x5a\x56\x3d\xa1\x97\x23\xb4\x85\x6c\x2d\x51\x03\xaf\x27\xdf\xd1\xb2\x67\xd5\x2e\xe0\xf4\xd1\x8f\xd2\x92\x08\xd1\xb0\xf3\x96\xab\xc1\x5f\x85\xf5\x62\xc7\xee\x0a\xd0\x0a\x52\x21\x48\x0a\xa4\x45\x80\x8f\x49\x91\x16\x0b\x11\xe2\x31\x2d\x3f\xe5\x0f\x25\x1e\x93\xfd\x3e\xc9\xca\x74\x57\x20\xdf\x63\x93\x67\xdb\xb4\x4c\xf3\xac\x40\x7e\x8b\x24\x3b\xe0\x2e\xcd\xb6\x0b\x10\xfb\x8e\x2c\xe8\xc9\xd8\xc9\x5f\x5b\xf0\x14\x23\x35\x53\x66\x05\xd1\x95\xc0\x51\x3f\x0b\x39\x43\x35\x1f\xb9\x46\x2f\x55\x3b\xc8\x96\xd0\xea\x9f\x64\x15\xab\x16\x86\xec\x89\xdd\xf4\x99\x0e\x52\x35\x22\x44\xcf\x27\xf6\xd2\xcf\x95\x3f\x96\x8a\x84\xb8\xdd\xe7\x9f\xd1\xd6\x36\x62\x1d\xcf\xfb\xe9\x29\xca\xb8\x92\x8e\x84\x48\xb6\x5b\x58\x6a\x27\x39\xd6\x6a\xc9\xce\x0d\xb4\x7c\xfb\xe6\xdd\xeb\x1b\xc4\x7f\xaf\x0b\xb1\xcb\xca\xfd\xe1\x4b\x9e\x66\x25\xbe\x05\xff\xa0\x82\xef\x42\xfc\x0a\x00\x00\xff\xff\x39\x3c\x7b\xcf\xc5\x02\x00\x00") + +func testImagesRegressionIssue74839DockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesRegressionIssue74839Dockerfile, + "test/images/regression-issue-74839/Dockerfile", + ) +} + +func testImagesRegressionIssue74839Dockerfile() (*asset, error) { + bytes, err := testImagesRegressionIssue74839DockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/regression-issue-74839/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesRegressionIssue74839Makefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xd1\x4f\xdb\x30\x10\xc6\x9f\xe7\xbf\xe2\x53\xc3\x43\x2b\xb5\x29\x63\x68\x0c\x26\x34\x65\x6d\x57\x22\x58\x32\x25\x05\xc4\x13\x72\x92\x6b\x72\x52\x6a\x67\xb6\xb3\xb4\xff\xfd\xe4\x02\xd2\xd0\xfc\x76\x77\xdf\xdd\xfd\xee\x73\x80\x85\xee\x0e\x86\xeb\xc6\xe1\xec\xf4\xe3\x25\x36\x0d\xe1\xb6\x2f\xc8\x28\x72\x64\x11\xf5\xae\xd1\xc6\x86\x22\x10\x01\xee\xb8\x24\x65\xa9\x42\xaf\x2a\x32\x70\x0d\x21\xea\x64\xd9\xd0\x5b\x65\x8a\x07\x32\x96\xb5\xc2\x59\x78\x8a\xb1\x17\x8c\x5e\x4b\xa3\xc9\x57\x11\xe0\xa0\x7b\xec\xe4\x01\x4a\x3b\xf4\x96\xe0\x1a\xb6\xd8\x72\x4b\xa0\x7d\x49\x9d\x03\x2b\x94\x7a\xd7\xb5\x2c\x55\x49\x18\xd8\x35\xc7\x35\xaf\x43\x42\x11\xe0\xe9\x75\x84\x2e\x9c\x64\x05\x89\x52\x77\x07\xe8\xed\xbf\x3a\x48\x77\x04\xf6\xaf\x71\xae\xbb\x9a\xcf\x87\x61\x08\xe5\x11\x36\xd4\xa6\x9e\xb7\x2f\x42\x3b\xbf\x8b\x17\xab\x24\x5f\xcd\xce\xc2\xd3\x63\xcb\xbd\x6a\xc9\x5a\x18\xfa\xdd\xb3\xa1\x0a\xc5\x01\xb2\xeb\x5a\x2e\x65\xd1\x12\x5a\x39\x40\x1b\xc8\xda\x10\x55\x70\xda\xf3\x0e\x86\x1d\xab\x7a\x0a\xab\xb7\x6e\x90\x86\x44\x80\x8a\xad\x33\x5c\xf4\xee\x9d\x59\x6f\x74\x6c\xdf\x09\xb4\x82\x54\x18\x45\x39\xe2\x7c\x84\xef\x51\x1e\xe7\x53\x11\xe0\x31\xde\xdc\xa4\xf7\x1b\x3c\x46\x59\x16\x25\x9b\x78\x95\x23\xcd\xb0\x48\x93\x65\xbc\x89\xd3\x24\x47\xfa\x03\x51\xf2\x84\xdb\x38\x59\x4e\x41\xec\x1a\x32\xa0\x7d\x67\x3c\xbf\x36\x60\x6f\x23\x55\xde\xb3\x9c\xe8\x1d\xc0\x56\xbf\x00\xd9\x8e\x4a\xde\x72\x89\x56\xaa\xba\x97\x35\xa1\xd6\x7f\xc8\x28\x56\x35\x3a\x32\x3b\xb6\xfe\x33\x2d\xa4\xaa\x44\x80\x96\x77\xec\xa4\x3b\x66\xfe\x3b\x2a\x14\x22\xcf\x16\xf9\xb5\xa1\xda\x03\xb0\x56\x33\xb6\xb6\xa7\xd9\xc5\xf9\x97\x4f\x97\x22\xcd\xf1\xed\x1a\x2d\xab\x7e\x2f\xa2\x6c\x71\xe3\x23\xb9\xab\x3e\x9f\x8b\x4d\x94\xad\x57\x1b\x1f\x9f\x8c\x17\xf7\xd9\x32\xce\x26\x62\x9d\x46\xd9\x4f\x9f\xba\x10\xeb\xf4\x2e\x4a\xd6\xcf\x0f\xab\x2c\x8f\xd3\xe4\x38\x44\x3a\xb2\xce\x6f\x7b\x5e\xc6\x19\x7c\x9f\xd2\xae\x62\x83\x93\xb1\x6d\xa8\x6d\xd1\x0d\xd5\x64\x22\x04\xed\x3b\x6d\x9c\x10\xe1\xaf\x9b\x34\x79\xba\x42\xc1\x4a\x14\xac\xae\xc4\x87\x30\x9c\xf3\x4e\xd6\x34\xeb\x1d\xb7\xa1\x6d\x7c\x09\x27\x63\x7f\xc0\x44\x88\xbf\x01\x00\x00\xff\xff\x04\x52\x01\x2e\x14\x03\x00\x00") + +func testImagesRegressionIssue74839MakefileBytes() ([]byte, error) { + return bindataRead( + _testImagesRegressionIssue74839Makefile, + "test/images/regression-issue-74839/Makefile", + ) +} + +func testImagesRegressionIssue74839Makefile() (*asset, error) { + bytes, err := testImagesRegressionIssue74839MakefileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/regression-issue-74839/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesRegressionIssue74839Owners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\x48\xcc\x4b\x4b\x2d\xca\x4b\x4d\xe5\x02\x04\x00\x00\xff\xff\x81\xb9\x09\x28\x18\x00\x00\x00") + +func testImagesRegressionIssue74839OwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesRegressionIssue74839Owners, + "test/images/regression-issue-74839/OWNERS", + ) +} + +func testImagesRegressionIssue74839Owners() (*asset, error) { + bytes, err := testImagesRegressionIssue74839OwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/regression-issue-74839/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesRegressionIssue74839Version = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") + +func testImagesRegressionIssue74839VersionBytes() ([]byte, error) { + return bindataRead( + _testImagesRegressionIssue74839Version, + "test/images/regression-issue-74839/VERSION", + ) +} + +func testImagesRegressionIssue74839Version() (*asset, error) { + bytes, err := testImagesRegressionIssue74839VersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/regression-issue-74839/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesRegressionIssue74839MainGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x55\xe1\x4e\xdb\x4a\x13\xfd\xed\x7d\x8a\xc1\x52\x2b\x87\x1a\x27\xd0\xf6\xd3\x57\xb7\xfc\x48\xa1\xa8\x16\x08\x22\x4c\x2f\xaa\x10\xba\xda\xd8\x63\x67\x15\x67\x77\x59\xaf\x49\xb9\x2d\xef\x7e\x35\x6b\x27\x38\x90\x2b\x91\x48\x01\x7b\xcf\x9c\x39\x73\x66\x77\x76\xb8\xcb\x8e\x94\x7e\x30\xa2\x9c\x59\x38\x18\xed\x7f\x82\xab\x19\xc2\x69\x33\x45\x23\xd1\x62\x0d\xe3\xc6\xce\x94\xa9\x23\xc6\xce\x44\x86\xb2\xc6\x1c\x1a\x99\xa3\x01\x3b\x43\x18\x6b\x9e\xcd\x10\xba\x95\x10\xfe\x42\x53\x0b\x25\xe1\x20\x1a\x41\x40\x00\xbf\x5b\xf2\x07\x9f\xd9\x83\x6a\x60\xc1\x1f\x40\x2a\x0b\x4d\x8d\x60\x67\xa2\x86\x42\x54\x08\xf8\x2b\x43\x6d\x41\x48\xc8\xd4\x42\x57\x82\xcb\x0c\x61\x29\xec\xcc\x25\xe9\x28\x22\xf6\xb3\x23\x50\x53\xcb\x85\x04\x0e\x99\xd2\x0f\xa0\x8a\x3e\x0a\xb8\x65\x0c\x00\x60\x66\xad\x8e\x87\xc3\xe5\x72\x19\x71\xa7\x32\x52\xa6\x1c\x56\x2d\xaa\x1e\x9e\x25\x47\xdf\xce\xd3\x6f\x7b\x07\xd1\x88\xb1\x1f\xb2\xc2\xba\x06\x83\x77\x8d\x30\x98\xc3\xf4\x01\xb8\xd6\x95\xc8\xf8\xb4\x42\xa8\xf8\x12\x94\x01\x5e\x1a\xc4\x1c\xac\x22\x9d\x4b\x23\xac\x90\x65\x08\xb5\x2a\xec\x92\x1b\x64\xb9\xa8\xad\x11\xd3\xc6\x6e\x18\xb4\x52\x25\x6a\xe8\x03\x94\x04\x2e\xc1\x1f\xa7\x90\xa4\x3e\x7c\x1d\xa7\x49\x1a\xb2\xeb\xe4\xea\xfb\xc5\x8f\x2b\xb8\x1e\x5f\x5e\x8e\xcf\xaf\x92\x6f\x29\x5c\x5c\xc2\xd1\xc5\xf9\x71\x72\x95\x5c\x9c\xa7\x70\x71\x02\xe3\xf3\x9f\x70\x9a\x9c\x1f\x87\x80\xc2\xce\xd0\x00\xfe\xd2\x86\xb4\x2b\x03\x82\xac\xc3\x3c\x62\x29\xe2\x46\xf2\x42\xb5\x62\x6a\x8d\x99\x28\x44\x06\x15\x97\x65\xc3\x4b\x84\x52\xdd\xa3\x91\x42\x96\xa0\xd1\x2c\x44\x4d\xcd\xab\x81\xcb\x9c\x55\x62\x21\x2c\xb7\xee\xf9\x45\x39\x11\xdb\x1d\x32\xa6\x79\x36\x27\x92\x05\x17\x92\x31\xb1\xd0\xca\x58\x08\x98\xe7\x57\xaa\xf4\x99\xe7\x4b\xb4\xf4\xc7\x8a\x05\xfa\x6c\xc0\x58\xd1\xc8\xcc\x81\x83\x01\xfc\x66\x9e\xd0\x10\x1f\x42\x89\x36\x99\x04\x83\x28\xb5\x46\xc8\x32\x18\x30\xaf\x52\x65\x34\x31\x42\xda\x22\xf0\xf1\x97\x45\x23\x79\x05\x42\xc7\xf0\xe6\xde\x0f\x41\xe8\x01\x63\x5e\xa9\x40\x1b\x35\xc5\xa0\x7d\xec\x87\x54\xa2\xb6\x28\xc9\xe1\x37\xf7\xf1\xa7\xd1\x68\xe4\x87\xe0\x8f\x22\xf7\xf5\x1d\xd8\x01\xd0\x84\x80\xc6\x90\x04\x89\x36\x3a\x73\x2f\x03\xdf\x66\xba\x87\x6f\xe3\x07\xcc\x13\x85\x03\xef\x1c\x82\x14\x15\x89\xf7\x34\x97\x22\x0b\xd0\x98\x01\xf3\x1e\x19\xf3\xc8\x63\x7a\x9f\x29\x29\xd7\xcc\xab\x54\xd1\x38\xa3\x0d\x4e\xd5\x6d\xa1\xda\xe0\x72\x64\x54\x1f\xb9\x15\x10\x9b\xd3\x77\xa4\xa4\x1c\xb4\x68\xf2\x33\x4a\x2b\x44\x1d\xec\x8f\x60\x17\xda\x67\xcc\x94\xcc\x29\xde\x29\x88\x8e\x2a\x55\xa3\xcb\xf7\xe8\x48\x9c\xca\xc7\xae\x07\x2b\xeb\xa0\x76\xa6\x3b\xde\xbe\x85\xb4\x4e\x7b\xa2\x67\xb8\xd0\xe3\x3c\xdf\xb4\xec\x12\x6b\x55\xdd\x63\x32\xa1\x95\xc0\x17\xfa\x43\xdc\xba\x47\x11\xaf\x70\x6c\xc3\xa9\xa7\x1e\x24\x93\x4d\x2e\x62\x7f\x15\x9f\x46\x99\x93\xea\xf8\x10\x16\x7c\x8e\xc1\x82\xeb\x9b\xb6\xc0\xdb\x46\x48\xfb\xfe\x80\xea\xb8\xe7\x06\xa6\x4d\x51\xa0\x81\x9b\x0f\xa3\x4f\xff\xbb\x9d\x3e\x58\x7c\xea\x9e\x0c\x81\xf7\xeb\x74\x5e\x5e\x22\xcf\x4f\x8c\x5a\x04\x6d\xe0\x4d\x7c\xfb\x1f\x7d\xec\x7b\xb8\x19\x39\x20\xac\x32\xdd\x1e\xee\x3a\x4d\x0e\x58\x21\x1b\x5c\x75\x5d\xcf\x2d\x25\x7d\x6b\x33\x3d\xe1\xd9\x1c\xed\xef\x47\xe6\x79\x39\xb7\x7c\x2d\x48\xcf\x6d\x94\x63\xa6\x72\x5c\xab\x91\xaf\x91\x63\x33\x0d\xda\x71\x82\xe6\xa6\xc6\x57\xe9\x11\x85\xcb\x77\x8c\xb5\x9d\xd0\xd9\xde\x39\x04\x3a\x10\x2d\xfb\x73\xf0\xf6\x6c\x31\xbc\x79\x77\x1f\x42\x51\xf1\x92\x92\x85\x40\xd5\xb4\xff\x91\xd1\x9d\x00\x3d\xb7\xee\x27\x3a\xa9\x78\xb9\x9a\x04\x2d\xb6\xc5\x0d\x7a\x72\x08\x53\xbf\x4d\x7f\x9e\x93\x9e\x4e\x4c\xd7\xfb\x1b\xc2\xae\x47\xc9\x2d\xb4\x7e\xa5\x78\x07\xef\x60\xff\x85\xe8\x67\x8c\x97\xe9\x55\x9f\xd1\xed\x2e\x9f\x5e\x1a\xcc\x50\xdc\x63\xee\x0f\xb6\x85\x8d\x8f\x4e\x7b\x61\xa2\x80\x1a\xef\x42\x50\x73\xd7\xad\xad\xb2\x3e\xd3\xaa\x43\x3f\x99\x56\xc9\x76\xcb\x60\x46\x23\x17\xb0\xb6\x7c\x5a\x89\x7a\xd6\x65\xf5\xbc\x1c\x2b\xb4\x18\x74\x8c\xad\x2b\x6b\x4a\x67\x8f\xe7\x4d\x79\x3e\x79\xb1\x85\xdc\x8a\x97\x9a\x8c\x5a\x18\xd3\xcd\xd8\xef\x69\xd8\x2e\xaf\x1e\xe3\x6e\xb9\x83\x77\xab\xe3\x6c\xee\x02\xe9\x43\xd5\x75\x94\x78\xb7\x7e\x4b\x31\xe3\x6c\x0e\x7b\xb0\x3f\xa2\x4f\xd8\xbe\x1e\x0e\xe1\x2b\xcf\x63\x0a\x02\xd5\xd8\x3d\x55\xec\x2d\x85\xcc\xd5\xb2\x65\x70\x06\x76\x1c\xc1\x47\xf8\xf2\x05\xf6\x0f\x06\xf0\x07\x26\xe9\x77\xf8\x03\xe3\xa3\xd3\x90\x18\x2e\x8a\xa2\x46\x4b\x97\x12\xb8\x00\x00\xa5\x94\x1a\x8d\x46\x27\x70\xd2\x7d\x20\x50\xb1\x72\xb0\x10\x4e\x62\xda\x6c\x75\xeb\x9a\x77\xed\xd2\xa5\xe2\x1f\x8c\x9d\xc8\xa7\xe7\xb6\x8a\xc7\xd6\x39\xda\x69\xe4\xdb\x8d\x9b\x07\x81\x3f\x55\x6a\xb1\xb3\xb3\xd3\x79\x6f\x70\xa1\x2c\x26\x93\xd5\xa0\x9a\xd0\x09\x4a\x26\xc1\xb3\x1e\xb4\x0d\xcd\x78\xf5\x12\xe9\xa6\xc1\x19\xad\xb9\x61\x39\x78\x16\xf5\xf7\xe6\xc0\xb9\x36\xc2\xe2\x95\x0a\xda\x7e\x46\x28\xdd\x79\xef\xa8\x43\x58\xc9\x69\x0f\x08\x8d\xa3\xd5\x21\xf1\xbc\xad\x83\x60\xcb\x64\x5a\xa5\xd8\x3e\x98\xdc\x2e\x77\x3f\x8f\xfd\x7b\xa3\xbb\xab\x5d\x65\xc9\x84\xb8\x5f\xcc\xf0\x63\xc1\xab\xc0\x6f\x72\x77\x8b\xfe\x3f\x72\xdf\xf8\xe3\xfb\xed\x77\x28\xa9\x3a\xe1\x96\x57\xeb\x29\xee\xe5\x48\xa3\x79\xe3\x0a\x63\xad\xa9\x64\xdc\xda\xa1\xbe\x95\xc1\x2e\x25\xfe\x71\x3c\x19\x77\x83\xc2\xa0\x6d\x8c\x84\x75\x54\x94\x4c\xd8\x23\xfb\x37\x00\x00\xff\xff\xdc\x2d\xe6\x30\xe9\x0a\x00\x00") + +func testImagesRegressionIssue74839MainGoBytes() ([]byte, error) { + return bindataRead( + _testImagesRegressionIssue74839MainGo, + "test/images/regression-issue-74839/main.go", + ) +} + +func testImagesRegressionIssue74839MainGo() (*asset, error) { + bytes, err := testImagesRegressionIssue74839MainGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/regression-issue-74839/main.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesRegressionIssue74839TcpGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x56\x7d\x6f\xda\xca\xd2\xff\xdb\xfb\x29\xe6\x20\xb5\xb2\x1b\x8e\x0d\x34\xca\x93\x87\x13\x22\x51\x9a\x9e\xa2\x1e\x11\x84\xc9\x8d\xaa\x28\x57\x5a\xec\xc1\xac\x30\xbb\xee\x7a\x5d\x9a\x13\xf5\xbb\x5f\xcd\xda\x18\x07\x37\x8d\x82\xc0\x33\xbf\x9d\x97\xdf\xbc\xac\x83\x77\x6c\xa2\xb2\x27\x2d\x92\x8d\x81\x41\xaf\xff\xff\xb0\xdc\x20\x7c\x29\x56\xa8\x25\x1a\xcc\x61\x5c\x98\x8d\xd2\xb9\xcf\xd8\x3f\x22\x42\x99\x63\x0c\x85\x8c\x51\x83\xd9\x20\x8c\x33\x1e\x6d\x10\x2a\x4d\x17\xfe\x83\x3a\x17\x4a\xc2\xc0\xef\x81\x4b\x80\x4e\xa5\xea\x78\x7f\xb1\x27\x55\xc0\x8e\x3f\x81\x54\x06\x8a\x1c\xc1\x6c\x44\x0e\x6b\x91\x22\xe0\x8f\x08\x33\x03\x42\x42\xa4\x76\x59\x2a\xb8\x8c\x10\xf6\xc2\x6c\xac\x93\xca\x84\xcf\xbe\x56\x06\xd4\xca\x70\x21\x81\x43\xa4\xb2\x27\x50\xeb\x26\x0a\xb8\x61\x0c\x00\x60\x63\x4c\x36\x0c\x82\xfd\x7e\xef\x73\x1b\xa5\xaf\x74\x12\xa4\x25\x2a\x0f\xfe\x99\x4e\x6e\x66\xe1\xcd\x9f\x03\xbf\xc7\xd8\x9d\x4c\x31\xcf\x41\xe3\xb7\x42\x68\x8c\x61\xf5\x04\x3c\xcb\x52\x11\xf1\x55\x8a\x90\xf2\x3d\x28\x0d\x3c\xd1\x88\x31\x18\x45\x71\xee\xb5\x30\x42\x26\x5d\xc8\xd5\xda\xec\xb9\x46\x16\x8b\xdc\x68\xb1\x2a\xcc\x0b\x82\x0e\x51\x89\x1c\x9a\x00\x25\x81\x4b\xe8\x8c\x43\x98\x86\x1d\xf8\x30\x0e\xa7\x61\x97\xdd\x4f\x97\x9f\x6f\xef\x96\x70\x3f\x5e\x2c\xc6\xb3\xe5\xf4\x26\x84\xdb\x05\x4c\x6e\x67\x1f\xa7\xcb\xe9\xed\x2c\x84\xdb\x4f\x30\x9e\x7d\x85\x2f\xd3\xd9\xc7\x2e\xa0\x30\x1b\xd4\x80\x3f\x32\x4d\xb1\x2b\x0d\x82\xa8\xc3\xd8\x67\x21\xe2\x0b\xe7\x6b\x55\x06\x93\x67\x18\x89\xb5\x88\x20\xe5\x32\x29\x78\x82\x90\xa8\xef\xa8\xa5\x90\x09\x64\xa8\x77\x22\xa7\xe2\xe5\xc0\x65\xcc\x52\xb1\x13\x86\x1b\xfb\xdc\x4a\xc7\x67\xef\x02\xc6\x82\x00\xe6\x5c\x1b\xc1\xd3\xf4\x89\x4a\x21\x30\x86\xb5\x56\x3b\x4b\x7d\x3e\x0c\x82\x44\x98\x4d\xb1\xf2\x23\xb5\x0b\x56\x6a\x8f\x22\x48\xa9\xcb\x36\xaa\xc8\x31\x58\xa5\x6a\x15\xec\x78\x6e\x50\x07\xd9\x36\x09\x32\xad\x56\x18\x98\x28\xf3\x13\xc5\x58\xc6\xa3\x2d\xc5\xb7\xe3\x42\x32\x26\x76\x99\xd2\x06\x5c\xe6\x74\x56\x4f\x06\xf3\x0e\x73\x3a\x28\x23\x15\x0b\x99\x04\x2b\x21\xb9\x7e\x22\x51\xaa\x12\xfa\x92\x68\x3a\xcc\x63\x2c\x52\x32\xb7\x87\x4c\x94\x7d\x46\x1e\xa3\x0e\xc5\xbf\x08\x23\x18\xf4\xac\x6c\xae\x95\x51\xb3\x62\x07\x00\x23\xb8\x78\x71\x22\x08\xe0\xd3\x74\x46\x45\xe3\xb0\x9c\xcc\x61\x9d\xf2\x84\x39\x24\x2a\x84\x34\xfd\x0b\x18\x41\x1f\xae\xae\x40\x28\xc3\x2d\x3a\xfc\xda\x42\x87\x5f\x67\x56\xb5\x08\x97\xa7\xaa\x45\xb8\xb4\xaa\x79\xf8\xf9\x54\x35\x0f\x3f\x5b\xd5\x78\xf2\xe5\x54\x35\x9e\x7c\xb1\xaa\xbb\xc5\xdf\xa7\xaa\xbb\xc5\xdf\x56\x75\x33\xb9\x39\x55\xdd\x4c\x6e\xac\x6a\x72\xbf\x38\x55\x4d\xee\x17\x56\x35\x0b\x4f\x35\xb3\x90\xe8\x30\x4f\x19\x02\x11\xc5\xa3\x2d\x1a\xc8\x8d\x2e\x22\x03\xcf\xcc\x09\x75\x34\xa7\x82\x00\x1c\xf8\x08\x02\xe8\x31\xe7\x23\xe6\xa6\x52\x1c\xe5\x03\xe6\x84\xf8\x0d\xaa\x3f\x92\xbf\x1f\x90\xfc\x9c\x39\xe3\x68\xdb\x96\x5f\x32\xe7\x53\xca\x93\xfc\x28\x2f\xed\xf4\xdf\x33\xe7\x5e\xc8\x58\xed\x6d\x19\x1b\x8a\x73\xe6\x4c\x36\x18\x6d\x73\x5b\xcb\x86\xe2\x82\x39\x77\x3a\x41\x69\xe6\x46\xbf\x50\x5c\xda\xbc\x07\x3d\xf6\x93\xb1\x75\x21\x23\x70\x0d\xbc\xab\x33\xf5\x20\xc6\x48\xc5\xe8\x66\x5b\x03\x0f\x8f\xd4\x72\x1e\xb8\xe5\x8f\x2e\xa0\xd6\x4a\x7b\x44\x03\x6a\x0d\xc3\x11\x94\x0d\xe8\x2f\x90\xc7\xae\x6d\x4f\x7f\x86\xfb\x85\x6d\x38\xb2\xe0\x75\x0f\x88\x0f\x22\xb9\x91\xb1\xe0\xb2\x0b\xc6\x63\x8e\x58\x93\x2d\xf8\x63\x04\x52\xa4\x64\xcf\xd1\x68\x0a\x2d\xe9\xd1\xba\x61\xce\x4f\xc6\x0e\xc2\x6c\x6b\x1e\x8c\xff\x91\x1b\x7e\xbb\x5e\xe7\x68\x5c\x6f\xf8\xd8\x25\xe8\x6b\x39\x34\xa1\x20\xa4\x2d\x5c\x65\x4b\x48\xe3\xba\xc6\x2f\x69\xbe\xbe\x86\xfe\xc0\x83\x77\x70\xee\xbd\x66\x8a\x80\xa1\xd1\x42\x26\xae\x47\x6d\x40\xfb\xe2\x99\x39\xaa\x30\x94\x7f\xa7\xc3\x6c\x32\x95\xc1\xb7\x34\x26\x7f\x8c\xa0\x67\x53\x22\xcc\xd9\x08\x3a\x24\xec\x50\x42\x4d\x24\x4d\x4d\x0b\x49\xc2\x16\x92\x86\xa8\x85\x24\x61\x0b\x49\x33\xd5\x42\x92\xb0\x85\xa4\x11\x6b\x21\x49\xd8\x42\xd2\xc4\xb5\x90\x24\x6c\x21\x69\x00\x5b\x48\x12\xb6\x90\x34\x8f\x2d\x24\x09\x5b\xc8\x59\xd8\x06\xce\xc2\x12\x57\x97\x54\x15\xe6\xb5\xea\xd9\x4d\x89\x6e\xae\xa3\x2e\xc4\x98\x1b\x90\x68\xfc\xe9\xbc\x0b\x31\x37\xbc\xee\xef\xf2\x9b\x9c\x50\xd7\x0f\x47\xb0\xe3\x5b\xac\x9b\x7e\xd0\xa3\xcf\x59\x8a\xd2\xa5\x53\x9e\xc7\x98\x53\xda\x6d\x8e\x40\xdd\xe0\xb5\xd2\x9f\x17\xe6\xce\xce\x1d\x8d\x42\x17\x8c\x5f\xed\x0e\xef\x15\xc8\xc3\x80\xda\xda\xf8\x87\x55\xd2\xc6\xbd\x1f\x58\xdc\x79\x89\x0b\xf1\xdb\xab\x90\xcb\x12\x32\x8e\xb6\xaf\x7a\xeb\x57\xee\x2c\xd3\xaf\xa3\x2a\x67\xc7\xf5\xf3\x3a\xb4\x72\x5a\xef\x1d\x62\x2a\x3a\x6c\xa7\xe1\x08\x0e\xbf\x97\x93\xf9\xb1\x24\x5d\x3b\xde\xc3\x17\x17\xd5\x63\x59\x20\xcf\x16\xe4\xa1\x7f\xf1\x08\x23\xbb\xc2\x2e\xdd\xda\xdc\x5b\xe8\xfd\x58\xaf\x0f\x88\xff\xfb\x05\xe2\xfa\x1a\x2e\x29\x02\xaa\xe9\x88\xde\x69\x50\xc6\x65\x25\xc8\xb6\xef\xfb\xde\x8b\x0d\x53\xb7\xd0\x2f\xa3\xac\x1b\xa7\x8e\xf3\xa4\x87\xaa\x0d\xfb\xcc\x9c\x54\x25\xfe\x5c\x0b\x69\xd6\x6e\x27\xe2\x69\x4a\x1b\xa3\x61\x73\x08\x6f\xbe\xd7\xff\x9d\x2e\x34\x88\x38\xb1\xed\x11\x7b\x5b\x22\xee\xad\x89\xb2\xc3\x9a\x47\xfd\x4c\xbd\x4f\x37\x9e\xad\x02\x64\x39\x16\xb1\xda\xd8\x83\xbe\x3d\xe2\xf3\x38\xa6\xd0\xfd\xa5\x3a\x77\x3d\xef\x28\x23\x37\x07\x21\x73\xbe\x73\x5d\x1d\x2e\xbd\xc2\xc3\xb9\x4d\x86\x39\x4d\xe9\x43\x9f\xb8\x6d\xbc\x33\x30\xe7\xb4\xe5\x9b\x7d\xd0\x3c\x69\x1b\xac\x24\xc6\xad\xc7\xc7\x0e\x52\x9d\xa9\xd7\x0c\xef\xc5\xe1\xe1\x63\x43\x73\xc4\x37\x92\xb1\x14\x9d\xf0\x5d\x93\x34\x84\x37\x67\x44\x6f\xb4\xd9\x36\xea\x4c\x67\xd7\x42\xf2\x54\xfc\x8b\xae\xdd\xf9\x87\x8b\xfe\x48\x6f\xe3\xb2\x2f\x6f\xd5\xc3\x0d\xcd\x1c\x15\xc7\x1f\x68\x53\x94\x2c\xa5\x28\x13\xb3\x01\xba\x52\x8e\xfb\x27\xb2\xfb\xe7\x68\xcd\x83\xa3\xbf\x46\x93\x68\xb4\x8b\x26\xf2\x73\x22\x54\xac\x21\xf2\x4b\x73\x6f\x06\x70\x5d\x2d\x3c\xc2\x9c\x8d\x2a\xe7\x6e\xe4\x57\xde\x3d\xbb\x24\xeb\xac\x53\xe9\x76\x34\x9a\x21\x74\xba\xa0\x91\x96\x06\xbd\xf2\x6a\x34\xd7\xd7\xfd\x8b\x17\xb6\x46\x24\x7d\x4b\x63\xb3\x5e\xc3\xd9\x01\xc2\x9c\xdf\xd9\xfa\xbd\xa7\x8a\xd5\xff\x56\x35\xb6\xc2\xdf\x30\x71\xa8\x5a\x3d\x34\xcf\x36\xf5\xba\x35\x60\x34\x3a\x86\x5b\x68\x69\xdd\x6f\xf8\x77\xbc\xad\x78\xb7\x8c\x35\x79\x62\xce\xe1\x99\x98\xaa\x0d\x59\xb3\xcd\x83\x64\xd3\x7a\xae\x17\x41\x19\xc2\x73\xcd\xea\xcf\xc6\x5a\x20\xb7\x44\xa2\x20\x87\xbd\xbf\x40\xc0\xd5\xd1\xf6\x9f\x7d\x12\x9c\x8d\x60\x60\xad\xda\x0a\x36\xca\x44\x98\x07\xf1\xe8\xc1\xd9\x4b\xc9\x59\xff\xd1\xbb\xba\xba\x3c\x5c\x70\xbf\x28\x77\x1d\x0a\x8c\x6c\x28\x0f\x0d\x97\x8f\x74\xee\x27\xfb\x5f\x00\x00\x00\xff\xff\x2a\x67\xe4\x3f\xb1\x0e\x00\x00") + +func testImagesRegressionIssue74839TcpGoBytes() ([]byte, error) { + return bindataRead( + _testImagesRegressionIssue74839TcpGo, + "test/images/regression-issue-74839/tcp.go", + ) +} + +func testImagesRegressionIssue74839TcpGo() (*asset, error) { + bytes, err := testImagesRegressionIssue74839TcpGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/regression-issue-74839/tcp.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesResourceConsumerGitignore = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xce\xcf\x2b\x2e\xcd\x4d\x2d\xe2\x82\x32\x74\x93\x0b\x4a\xf5\x91\xd8\x20\xf1\x92\xa2\xfc\x9c\x9c\xd4\x22\x7d\x04\x93\x0b\x10\x00\x00\xff\xff\x1b\x0f\x16\x78\x37\x00\x00\x00") + +func testImagesResourceConsumerGitignoreBytes() ([]byte, error) { + return bindataRead( + _testImagesResourceConsumerGitignore, + "test/images/resource-consumer/.gitignore", + ) +} + +func testImagesResourceConsumerGitignore() (*asset, error) { + bytes, err := testImagesResourceConsumerGitignoreBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/resource-consumer/.gitignore", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesResourceConsumerBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\xcd\xb6\x28\xd6\x4b\x4f\x2e\xd2\xcb\xcc\xd7\x4f\x49\x4d\xca\x4c\xcc\xd3\x4d\x4a\x2c\x4e\xd5\x05\x4b\x5a\x19\xe8\x99\xe8\x19\x72\x41\x95\x17\xe5\xe2\x54\x5c\x94\x8b\xae\x14\x8f\xc9\x20\x49\x14\xe5\x05\x05\xc9\x66\x26\x39\xa9\xb8\x34\x40\xa5\x51\xb4\x14\x1b\x5b\x1a\x54\xe0\xd2\x00\x96\x84\x2a\x07\x04\x00\x00\xff\xff\x71\x77\xcf\xba\xeb\x00\x00\x00") + +func testImagesResourceConsumerBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesResourceConsumerBaseimage, + "test/images/resource-consumer/BASEIMAGE", + ) +} + +func testImagesResourceConsumerBaseimage() (*asset, error) { + bytes, err := testImagesResourceConsumerBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/resource-consumer/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesResourceConsumerDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x4f\x6f\xdb\x30\x0c\xc5\xef\xfa\x14\x0f\xf1\x0e\x1b\x90\xc4\x59\x0f\x43\xb1\x9d\xdc\xc4\x6d\x8d\xb6\x76\x67\x3b\xeb\x82\x61\x28\x14\x99\xb1\x09\x38\x92\x2b\xc9\x73\xf3\xed\x07\xa7\x7f\xd6\x62\x3a\x89\xe4\x23\xf5\xe3\x53\x80\xa5\xe9\x0e\x96\xeb\xc6\xe3\x64\xf1\xf9\x0b\xca\x86\x70\xd5\x6f\xc9\x6a\xf2\xe4\x10\xf5\xbe\x31\xd6\xcd\x45\x20\x02\x5c\xb3\x22\xed\xa8\x42\xaf\x2b\xb2\xf0\x0d\x21\xea\xa4\x6a\xe8\xa5\x32\xc5\x0f\xb2\x8e\x8d\xc6\xc9\x7c\x81\x8f\xa3\x60\xf2\x5c\x9a\x7c\xfa\x26\x02\x1c\x4c\x8f\xbd\x3c\x40\x1b\x8f\xde\x11\x7c\xc3\x0e\x3b\x6e\x09\xf4\xa8\xa8\xf3\x60\x0d\x65\xf6\x5d\xcb\x52\x2b\xc2\xc0\xbe\x39\x3e\xf3\x3c\x64\x2e\x02\x6c\x9e\x47\x98\xad\x97\xac\x21\xa1\x4c\x77\x80\xd9\xbd\xd5\x41\xfa\x23\xf0\x78\x1a\xef\xbb\xaf\x61\x38\x0c\xc3\x5c\x1e\x61\xe7\xc6\xd6\x61\xfb\x24\x74\xe1\x75\xb2\x8c\xd3\x22\x9e\x9d\xcc\x17\xc7\x96\xb5\x6e\xc9\x39\x58\x7a\xe8\xd9\x52\x85\xed\x01\xb2\xeb\x5a\x56\x72\xdb\x12\x5a\x39\xc0\x58\xc8\xda\x12\x55\xf0\x66\xe4\x1d\x2c\x7b\xd6\xf5\x14\xce\xec\xfc\x20\x2d\x89\x00\x15\x3b\x6f\x79\xdb\xfb\x77\x66\xbd\xd0\xb1\x7b\x27\x30\x1a\x52\x63\x12\x15\x48\x8a\x09\xce\xa2\x22\x29\xa6\x22\xc0\x5d\x52\x5e\x66\xeb\x12\x77\x51\x9e\x47\x69\x99\xc4\x05\xb2\x1c\xcb\x2c\x5d\x25\x65\x92\xa5\x05\xb2\x73\x44\xe9\x06\x57\x49\xba\x9a\x82\xd8\x37\x64\x41\x8f\x9d\x1d\xf9\x8d\x05\x8f\x36\x52\x35\x7a\x56\x10\xbd\x03\xd8\x99\x27\x20\xd7\x91\xe2\x1d\x2b\xb4\x52\xd7\xbd\xac\x09\xb5\xf9\x43\x56\xb3\xae\xd1\x91\xdd\xb3\x1b\x3f\xd3\x41\xea\x4a\x04\x68\x79\xcf\x5e\xfa\x63\xe6\xbf\xa5\xe6\x42\x44\xf9\xc5\x48\x1f\x27\x37\xd1\x45\x2c\xce\xf3\xec\x06\x1f\xfe\xc5\x62\x99\x67\x45\x71\x7f\xb6\x4e\xae\x57\xf7\xcb\xec\x76\x83\x07\xda\xf7\xb3\xef\xf1\xcd\x3a\xca\x97\x97\x33\x37\x8e\x56\x08\x7b\x67\xc3\x2d\xeb\x50\x88\x7c\x9d\x42\xb5\x24\xf5\x8c\xb5\xf3\xb2\x6d\xe1\xfc\xb8\x9c\x10\xd1\x6a\x05\x65\xb4\xeb\xf7\x64\x11\xbe\xdc\xde\xa6\x67\xaa\xeb\x5f\x2b\x63\x20\xe2\x9f\xb7\x59\x11\xe3\x74\x71\xba\x10\x71\x5a\xe6\x9b\xdb\x2c\x49\x4b\xfc\x9a\xbc\xf6\x4f\x7e\x8b\xbf\x01\x00\x00\xff\xff\x1c\xcd\x8d\x79\x0f\x03\x00\x00") + +func testImagesResourceConsumerDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesResourceConsumerDockerfile, + "test/images/resource-consumer/Dockerfile", + ) +} + +func testImagesResourceConsumerDockerfile() (*asset, error) { + bytes, err := testImagesResourceConsumerDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/resource-consumer/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesResourceConsumerMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x5f\x4f\xdb\x4a\x10\xc5\x9f\xef\x7e\x8a\xa3\x98\x87\x44\x0a\x0e\x17\x5d\x71\x25\x2a\x54\xb9\x49\x1a\x2c\xa8\x5d\xd9\x01\xc4\x13\xda\xd8\x13\x7b\x24\x7b\x77\xbb\xbb\xae\x93\x6f\x5f\x6d\x00\x09\x54\x3f\xcd\x9f\x33\x33\x3f\x9f\x8d\xb0\xd4\xe6\x68\xb9\x69\x3d\x2e\x2f\xfe\xbd\xc2\xb6\x25\xdc\x0d\x3b\xb2\x8a\x3c\x39\x24\x83\x6f\xb5\x75\xb1\x88\x44\x84\x7b\xae\x48\x39\xaa\x31\xa8\x9a\x2c\x7c\x4b\x48\x8c\xac\x5a\x7a\xef\xcc\xf1\x48\xd6\xb1\x56\xb8\x8c\x2f\x30\x0d\x82\xc9\x5b\x6b\x32\xfb\x22\x22\x1c\xf5\x80\x5e\x1e\xa1\xb4\xc7\xe0\x08\xbe\x65\x87\x3d\x77\x04\x3a\x54\x64\x3c\x58\xa1\xd2\xbd\xe9\x58\xaa\x8a\x30\xb2\x6f\x4f\x67\xde\x96\xc4\x22\xc2\xf3\xdb\x0a\xbd\xf3\x92\x15\x24\x2a\x6d\x8e\xd0\xfb\x8f\x3a\x48\x7f\x02\x0e\x5f\xeb\xbd\xb9\x5e\x2c\xc6\x71\x8c\xe5\x09\x36\xd6\xb6\x59\x74\xaf\x42\xb7\xb8\x4f\x97\xeb\xac\x5c\x9f\x5f\xc6\x17\xa7\x91\x07\xd5\x91\x73\xb0\xf4\x6b\x60\x4b\x35\x76\x47\x48\x63\x3a\xae\xe4\xae\x23\x74\x72\x84\xb6\x90\x8d\x25\xaa\xe1\x75\xe0\x1d\x2d\x7b\x56\xcd\x1c\x4e\xef\xfd\x28\x2d\x89\x08\x35\x3b\x6f\x79\x37\xf8\x4f\x66\xbd\xd3\xb1\xfb\x24\xd0\x0a\x52\x61\x92\x94\x48\xcb\x09\xbe\x25\x65\x5a\xce\x45\x84\xa7\x74\x7b\x9b\x3f\x6c\xf1\x94\x14\x45\x92\x6d\xd3\x75\x89\xbc\xc0\x32\xcf\x56\xe9\x36\xcd\xb3\x12\xf9\x77\x24\xd9\x33\xee\xd2\x6c\x35\x07\xb1\x6f\xc9\x82\x0e\xc6\x06\x7e\x6d\xc1\xc1\x46\xaa\x83\x67\x25\xd1\x27\x80\xbd\x7e\x05\x72\x86\x2a\xde\x73\x85\x4e\xaa\x66\x90\x0d\xa1\xd1\xbf\xc9\x2a\x56\x0d\x0c\xd9\x9e\x5d\x78\x4c\x07\xa9\x6a\x11\xa1\xe3\x9e\xbd\xf4\xa7\xca\x5f\x3f\x15\x0b\x51\x16\xcb\x12\x37\xa8\xb4\x72\x43\x4f\xf6\x3d\x38\xaf\xcc\xb0\xf8\x10\x8b\xbc\xc4\xd7\x1b\x74\xac\x86\x83\x48\x8a\xe5\x6d\xc8\x64\x5f\x5f\xfd\x27\xb6\x49\xb1\x59\x6f\x43\x7e\x36\x5d\x3e\x14\xab\xb4\x98\x89\x4d\x9e\x14\x3f\x42\xe9\x7f\xb1\xc9\xef\x93\x6c\xf3\xf2\xb8\x2e\xca\x34\xcf\x4e\x4b\xa4\x27\xe7\xc3\xe5\x97\x55\x5a\x20\xcc\x29\xed\x6b\xb6\x38\x9b\xba\x96\xba\x0e\x66\xac\x67\x33\x41\x07\xa3\xad\x17\x62\xc7\xea\x5a\xfc\x13\xc7\x0b\xee\x65\x43\xe7\x83\xe7\x2e\x76\x2d\x76\xac\x70\x36\x0d\xfc\x33\x21\xe2\x9f\xb7\x79\xf6\x7c\x1d\x8a\xe2\x4f\x00\x00\x00\xff\xff\xe6\x5b\xa6\xf0\x1f\x03\x00\x00") + +func testImagesResourceConsumerMakefileBytes() ([]byte, error) { + return bindataRead( + _testImagesResourceConsumerMakefile, + "test/images/resource-consumer/Makefile", + ) +} + +func testImagesResourceConsumerMakefile() (*asset, error) { + bytes, err := testImagesResourceConsumerMakefileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/resource-consumer/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesResourceConsumerVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe7\x02\x04\x00\x00\xff\xff\x18\x62\xd2\x2b\x04\x00\x00\x00") + +func testImagesResourceConsumerVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesResourceConsumerVersion, + "test/images/resource-consumer/VERSION", + ) +} + +func testImagesResourceConsumerVersion() (*asset, error) { + bytes, err := testImagesResourceConsumerVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/resource-consumer/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesResourceConsumerCommonCommonGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x94\x41\x73\xdb\x36\x10\x85\xcf\xc4\xaf\xd8\xc1\x29\xc9\xd8\xa4\xeb\x43\x0f\xed\xf8\x40\xcb\x76\xca\x49\x44\xb9\xa6\xdc\x4c\x8e\x10\xb8\x22\x31\x26\x00\x06\x58\x84\x51\x7e\x7d\x07\x14\x65\x49\x96\xcc\x9b\xf4\xbe\xf7\x76\xdf\x52\xa3\xec\x13\x9b\xd9\x7e\xe3\x54\xd3\x12\x5c\x5f\xfd\xf1\x27\x2c\x5b\x84\x2f\x61\x85\xce\x20\xa1\x87\x3c\x50\x6b\x9d\x4f\x19\xfb\xaa\x24\x1a\x8f\x35\x04\x53\xa3\x03\x6a\x11\xf2\x5e\xc8\x16\x61\x52\x2e\xe0\x3f\x74\x5e\x59\x03\xd7\xe9\x15\x7c\x88\x00\x9f\x24\xfe\xf1\x6f\xb6\xb1\x01\xb4\xd8\x80\xb1\x04\xc1\x23\x50\xab\x3c\xac\x55\x87\x80\xbf\x24\xf6\x04\xca\x80\xb4\xba\xef\x94\x30\x12\x61\x50\xd4\x8e\x43\xa6\x88\x94\x7d\x9f\x02\xec\x8a\x84\x32\x20\x40\xda\x7e\x03\x76\x7d\x48\x81\x20\xc6\x00\x00\x5a\xa2\xfe\xaf\x2c\x1b\x86\x21\x15\xe3\x96\xa9\x75\x4d\xd6\x6d\x29\x9f\x7d\x2d\x66\xf7\x65\x75\x7f\x79\x9d\x5e\x31\xf6\x6c\x3a\xf4\x1e\x1c\xfe\x08\xca\x61\x0d\xab\x0d\x88\xbe\xef\x94\x14\xab\x0e\xa1\x13\x03\x58\x07\xa2\x71\x88\x35\x90\x8d\x7b\x0e\x4e\x91\x32\xcd\x05\x78\xbb\xa6\x41\x38\x64\xb5\xf2\xe4\xd4\x2a\xd0\xd1\x81\x76\x5b\x29\x0f\x87\x80\x35\x20\x0c\xf0\xbc\x82\xa2\xe2\x70\x9b\x57\x45\x75\xc1\xbe\x15\xcb\x7f\x16\xcf\x4b\xf8\x96\x3f\x3d\xe5\xe5\xb2\xb8\xaf\x60\xf1\x04\xb3\x45\x79\x57\x2c\x8b\x45\x59\xc1\xe2\x01\xf2\xf2\x3b\x7c\x29\xca\xbb\x0b\x40\x45\x2d\x3a\xc0\x5f\xbd\x8b\xbb\x5b\x07\x2a\x9e\x0e\xeb\x94\x55\x88\x47\xc3\xd7\x76\xbb\x8c\xef\x51\xaa\xb5\x92\xd0\x09\xd3\x04\xd1\x20\x34\xf6\x27\x3a\xa3\x4c\x03\x3d\x3a\xad\x7c\x7c\x79\x1e\x84\xa9\x59\xa7\xb4\x22\x41\xe3\xe7\x93\x3a\x29\xfb\x94\x31\xd6\x0b\xf9\x12\x43\xa4\xd5\xda\x1a\xc6\xb2\x0c\x66\xd6\x78\x12\x86\xe2\x2d\x3b\x41\xdb\x73\x3d\x3a\xab\x91\x5a\x0c\x1e\x34\x92\x53\xd2\xa7\x4c\x46\x10\x3e\xb0\x24\x3a\x82\xc6\xd9\xe3\x73\x5e\xd7\x63\x93\xed\x73\x03\x3c\xdb\x6b\xfc\x15\x9c\xa3\x7e\x17\x9c\xa3\xe6\x2c\xb9\x0d\xba\x9f\x8f\x73\x4e\xc1\xbd\xc6\x59\xf2\x19\x69\x16\x9c\x43\x43\x15\x09\x0a\x7e\x87\x47\xf0\xad\xc6\x59\xb2\xf5\xf9\xe3\xd0\x29\x77\xea\xc5\x19\x4b\xe6\xaa\xeb\x94\xb4\x0e\xfd\xbf\x01\xdd\x06\x8e\x9e\x1b\xe0\xfa\x55\x1f\x33\x1b\xb1\xda\xd0\x59\x76\x84\x77\xfa\xeb\xfc\x52\x68\x7c\x27\x78\xd7\xeb\x0e\x3b\x12\xe7\x02\x27\xb0\x8e\x7a\xe4\x82\x1b\x5f\x70\x85\xf2\x94\x8e\xdc\x5e\xe7\x2c\x79\xc2\x1f\x01\x3d\x55\xea\x37\x16\xe6\x6d\xc9\x1b\xe0\x6e\xaf\xcf\x0f\x2b\x1e\xfb\xde\xf4\x7d\xe3\x3b\x68\x7b\x60\x9b\x05\x4f\x56\x6f\xeb\x9f\x1d\xb7\x3f\xfe\xad\xa8\x27\xe3\x99\xde\xb7\xa2\x86\xc9\x96\x42\x69\x09\x04\x3c\x2e\xaa\xe5\xee\x3b\xce\x92\x67\xf3\x62\xec\x60\x1e\x82\x91\xb1\xf8\xb1\x3d\x6c\x45\x58\x4f\x2a\x67\x49\x61\xa4\x75\x0e\x25\xed\x1c\xb9\x6b\x82\x46\x43\x91\x57\x3b\xf1\xd5\x01\x62\x92\x39\x4b\x4a\x4b\x9f\xd5\x4f\x34\x27\xce\x68\x8d\xff\x90\x4d\x54\xcf\x59\x59\xf2\xe0\x84\xc6\xc1\xba\x97\xf8\x63\x88\x7c\x6b\x9d\xfa\x6d\x0d\x89\xee\xb2\xb7\xf5\xa5\x08\x64\xbd\x14\x9d\x32\x0d\x67\x1f\xd9\xff\x01\x00\x00\xff\xff\xe1\xe8\xc2\x46\xe3\x05\x00\x00") + +func testImagesResourceConsumerCommonCommonGoBytes() ([]byte, error) { + return bindataRead( + _testImagesResourceConsumerCommonCommonGo, + "test/images/resource-consumer/common/common.go", + ) +} + +func testImagesResourceConsumerCommonCommonGo() (*asset, error) { + bytes, err := testImagesResourceConsumerCommonCommonGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/resource-consumer/common/common.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesResourceConsumerConsumeCpuConsume_cpuGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x52\x5d\x6f\xa3\x46\x14\x7d\x66\x7e\xc5\x11\x4f\x90\x78\xc1\x89\xda\x4a\xdd\x24\x0f\x6e\x92\xb6\xd6\x6e\x9d\x28\x38\x5d\xed\xe3\x78\xb8\xc0\x68\x61\x86\x9d\xb9\xc4\xb1\xaa\xfc\xf7\x6a\xc0\x49\xec\x56\x2d\x2f\xc0\xb9\x5f\xe7\xdc\x73\xf3\x13\x71\x6d\xfb\x9d\xd3\x75\xc3\x38\x9f\x9f\xfd\x88\x75\x43\xf8\x34\x6c\xc8\x19\x62\xf2\x58\x0c\xdc\x58\xe7\x33\x21\x3e\x6b\x45\xc6\x53\x89\xc1\x94\xe4\xc0\x0d\x61\xd1\x4b\xd5\x10\xf6\x91\x19\xfe\x24\xe7\xb5\x35\x38\xcf\xe6\x48\x42\x42\xbc\x0f\xc5\xe9\x85\xd8\xd9\x01\x9d\xdc\xc1\x58\xc6\xe0\x09\xdc\x68\x8f\x4a\xb7\x04\x7a\x56\xd4\x33\xb4\x81\xb2\x5d\xdf\x6a\x69\x14\x61\xab\xb9\x19\x87\xec\x5b\x64\xe2\xeb\xbe\x81\xdd\xb0\xd4\x06\x12\xca\xf6\x3b\xd8\xea\x30\x0b\x92\x85\x00\x80\x86\xb9\xff\x98\xe7\xdb\xed\x36\x93\x23\xcb\xcc\xba\x3a\x6f\xa7\x2c\x9f\x7f\x5e\x5e\xdf\xae\x8a\xdb\x0f\xe7\xd9\x5c\x88\x47\xd3\x92\xf7\x70\xf4\x7d\xd0\x8e\x4a\x6c\x76\x90\x7d\xdf\x6a\x25\x37\x2d\xa1\x95\x5b\x58\x07\x59\x3b\xa2\x12\x6c\x03\xcf\xad\xd3\xac\x4d\x3d\x83\xb7\x15\x6f\xa5\x23\x51\x6a\xcf\x4e\x6f\x06\x3e\x5a\xd0\x2b\x2b\xed\x71\x98\x60\x0d\xa4\x41\xbc\x28\xb0\x2c\x62\xfc\xb2\x28\x96\xc5\x4c\x7c\x59\xae\x7f\xbf\x7b\x5c\xe3\xcb\xe2\xe1\x61\xb1\x5a\x2f\x6f\x0b\xdc\x3d\xe0\xfa\x6e\x75\xb3\x5c\x2f\xef\x56\x05\xee\x7e\xc5\x62\xf5\x15\x9f\x96\xab\x9b\x19\x48\x73\x43\x0e\xf4\xdc\xbb\xc0\xdd\x3a\xe8\xb0\x3a\x2a\x33\x51\x10\x1d\x0d\xaf\xec\x44\xc6\xf7\xa4\x74\xa5\x15\x5a\x69\xea\x41\xd6\x84\xda\x3e\x91\x33\xda\xd4\xe8\xc9\x75\xda\x07\xf3\x3c\xa4\x29\x45\xab\x3b\xcd\x92\xc7\xff\x7f\xc9\xc9\xc4\x49\x2e\x44\x2f\xd5\xb7\xd0\xa4\x93\xda\x08\xa1\xbb\xde\x3a\x46\x22\xa2\xb8\x6a\x65\x1d\x8b\x28\xee\x24\x37\xe1\xcd\xba\xa3\x58\x88\x28\xde\x68\xde\x0c\xea\x1b\xf1\xe8\xc5\x86\x1c\xeb\x6e\xf0\x3f\xe7\x7e\xe7\x99\x3a\xcf\x92\x63\x91\x0a\xa1\xac\xf1\x0c\xdf\x12\xf5\xb8\x42\xa8\xce\x6e\x06\x37\x92\x49\xce\xe6\x29\x4e\x26\xec\x0f\xdd\xb6\xda\x93\xb2\xa6\x14\xa2\x1a\x8c\x42\x69\x0b\xdb\x11\x37\xda\xd4\x49\x8a\xbf\x44\x14\x94\x6b\x7c\xbc\xc2\xd9\x05\x34\x2e\x71\x36\x9f\x9e\x0b\xe8\xd3\xd3\x90\x10\x3d\x87\x68\xd5\x5a\xc9\x3f\xfd\x90\xcc\xd3\x11\x39\xbd\x42\xa0\x9e\x15\xdf\x1d\x8f\xd8\x8b\x78\x11\xe2\x49\xba\xa0\xae\x0b\x53\x95\x75\xe4\x81\x50\x29\xeb\x6c\x69\x38\x89\xdf\xf1\x78\x86\xf9\x0c\x07\x00\xcc\xd0\x6d\xc8\xc5\xa9\x88\xca\xbd\x8e\x82\xd4\x51\xf5\x2b\xfe\xc1\x93\xda\xd7\xbf\x42\xa3\xd8\x70\x73\x93\x54\x1f\xa7\x61\x47\xa3\xde\xb0\xf9\xbd\xd0\xd0\xe9\x5e\x3a\x4f\x49\x2a\xa2\x3c\x87\xb2\xe6\x89\x1c\xe3\x80\x05\xdb\xe0\xb2\x22\xc3\xb2\xa6\x43\x21\xf7\x8a\x0f\xb7\x70\xf2\x1e\x49\x91\xbf\xc1\x67\xf3\x03\xfe\x21\xff\xd8\x98\x93\x03\x69\x6f\x16\x15\x93\x3b\x91\x67\xe9\xf8\xad\x66\x65\xb7\x81\x65\xa5\x9d\x1f\xc1\x77\xfb\xb3\xdf\x88\xef\x9d\x55\xd7\xf7\x8f\x85\xec\xfa\x76\x54\x33\x9e\xef\xd8\x4d\x1b\x45\xc9\xd8\x2b\xc5\x25\xde\xb8\x04\x1f\x55\x3f\xfc\x67\xab\xc5\x13\x39\x59\x53\x32\x0e\x9c\xfd\xff\xb8\x7f\x86\x1f\xfb\x30\x3a\x49\xb3\xe9\x23\x1c\x88\xae\xa0\xfa\x21\x5b\x5b\x96\x6d\x58\xdd\x25\x8e\x57\x19\xe8\x44\x47\xa7\x28\xa2\xe8\x05\xd4\x7a\x9a\x62\x93\x98\x70\xde\xc9\x78\xe4\x63\x7c\xba\xb2\xbf\x03\x00\x00\xff\xff\xa6\x15\x1f\xf2\x8f\x05\x00\x00") + +func testImagesResourceConsumerConsumeCpuConsume_cpuGoBytes() ([]byte, error) { + return bindataRead( + _testImagesResourceConsumerConsumeCpuConsume_cpuGo, + "test/images/resource-consumer/consume-cpu/consume_cpu.go", + ) +} + +func testImagesResourceConsumerConsumeCpuConsume_cpuGo() (*asset, error) { + bytes, err := testImagesResourceConsumerConsumeCpuConsume_cpuGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/resource-consumer/consume-cpu/consume_cpu.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesResourceConsumerResource_consumerGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x91\x51\x6b\xdb\x4a\x10\x85\x9f\xb3\xbf\xe2\x20\xb8\x20\x05\x5d\xd9\x37\x70\x21\xa4\xe4\x41\x75\x12\x22\x12\xec\x60\x39\x0d\x79\x5c\x4b\x23\x69\xa9\xb4\xbb\xdd\x1d\x45\x31\xa5\xff\xbd\xac\xe2\x42\x42\xdb\xa7\x65\x74\xce\xcc\xf9\x34\xb3\x38\x15\x2b\x63\x0f\x4e\xb5\x1d\xe3\x6c\xf9\xdf\xff\xd8\x75\x84\xbb\x71\x4f\x4e\x13\x93\x47\x3e\x72\x67\x9c\xcf\x84\xb8\x57\x15\x69\x4f\x35\x46\x5d\x93\x03\x77\x84\xdc\xca\xaa\x23\x1c\x95\x14\x5f\xc8\x79\x65\x34\xce\xb2\x25\xe2\x60\x88\x8e\x52\x94\x7c\x12\x07\x33\x62\x90\x07\x68\xc3\x18\x3d\x81\x3b\xe5\xd1\xa8\x9e\x40\xaf\x15\x59\x86\xd2\xa8\xcc\x60\x7b\x25\x75\x45\x98\x14\x77\x73\xc8\x71\x44\x26\x9e\x8f\x03\xcc\x9e\xa5\xd2\x90\xa8\x8c\x3d\xc0\x34\xef\x5d\x90\x2c\x04\x00\x74\xcc\xf6\x62\xb1\x98\xa6\x29\x93\x33\x65\x66\x5c\xbb\xe8\xdf\x5c\x7e\x71\x5f\xac\xae\xd7\xe5\xf5\xbf\x67\xd9\x52\x88\x47\xdd\x93\xf7\x70\xf4\x6d\x54\x8e\x6a\xec\x0f\x90\xd6\xf6\xaa\x92\xfb\x9e\xd0\xcb\x09\xc6\x41\xb6\x8e\xa8\x06\x9b\xc0\x39\x39\xc5\x4a\xb7\x29\xbc\x69\x78\x92\x8e\x44\xad\x3c\x3b\xb5\x1f\xf9\xc3\x82\x7e\x51\x29\x8f\xf7\x06\xa3\x21\x35\xa2\xbc\x44\x51\x46\xf8\x9c\x97\x45\x99\x8a\xa7\x62\x77\xbb\x79\xdc\xe1\x29\xdf\x6e\xf3\xf5\xae\xb8\x2e\xb1\xd9\x62\xb5\x59\x5f\x15\xbb\x62\xb3\x2e\xb1\xb9\x41\xbe\x7e\xc6\x5d\xb1\xbe\x4a\x41\x8a\x3b\x72\xa0\x57\xeb\x02\xbb\x71\x50\x61\x75\x54\x67\xa2\x24\xfa\x10\xde\x98\x37\x18\x6f\xa9\x52\x8d\xaa\xd0\x4b\xdd\x8e\xb2\x25\xb4\xe6\x85\x9c\x56\xba\x85\x25\x37\x28\x1f\x8e\xe7\x21\x75\x2d\x7a\x35\x28\x96\x3c\xd7\xbf\xfd\x4e\x26\x4e\x17\x42\x58\x59\x7d\x0d\x43\x06\xa9\xb4\x10\x6a\xb0\xc6\x31\x62\x71\x12\x35\xbd\x6c\xa3\xf0\x0e\x1c\x9e\xde\xcc\x95\x26\x5e\x84\xa3\x44\x22\x11\xe2\x45\x3a\xcc\xfe\x4b\x04\x77\x56\x68\x8e\xa3\xf0\x21\x4a\x71\xbe\x3c\x5f\xa6\x88\x1e\x82\xac\xc7\x61\x4f\x2e\x8b\x12\x21\x9a\x51\x57\x73\x56\x9c\xe0\xbb\x38\x99\xdb\x1e\xa4\xf3\x14\x27\xe2\xc4\x91\x37\xa3\xab\x68\x65\xb4\x1f\x07\x72\xb7\x52\xd7\x3d\x39\x5c\x5c\x62\x4d\xd3\xf6\xcf\x6a\x68\xec\x4d\x9b\xdd\x48\x96\x7d\x1c\xd8\xb2\x7b\xe5\x99\x74\xae\xeb\x92\xdc\x0b\xc5\xcd\xc0\x59\x69\x9d\xd2\xdc\xc4\xd1\xc5\x3f\x75\x94\xe2\x34\x50\x26\x29\xfe\x92\x98\x24\xe2\x87\xf8\x19\x00\x00\xff\xff\x8b\x9d\x03\xcd\x55\x03\x00\x00") + +func testImagesResourceConsumerResource_consumerGoBytes() ([]byte, error) { + return bindataRead( + _testImagesResourceConsumerResource_consumerGo, + "test/images/resource-consumer/resource_consumer.go", + ) +} + +func testImagesResourceConsumerResource_consumerGo() (*asset, error) { + bytes, err := testImagesResourceConsumerResource_consumerGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/resource-consumer/resource_consumer.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesResourceConsumerResource_consumer_handlerGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x58\x6f\x6f\xdb\xbe\x11\x7e\x6d\x7e\x8a\xab\x86\xfc\x60\x65\xaa\xd4\x5f\xd1\x15\x43\x0a\xbf\x70\xd3\xa4\x31\x9a\x38\x5e\xec\x34\x28\xba\x62\xa0\xa5\x93\x4c\x58\x22\x55\x92\x8a\xeb\xa5\xf9\xee\x03\x29\xd9\x96\xff\xc8\xf9\xb3\xa2\x5b\x5f\xd4\x96\x79\xba\xbb\xe7\xe1\x3d\x77\x64\x82\x43\x72\x2c\xf2\xb9\x64\xc9\x44\xc3\xeb\x57\x7f\xfe\x0d\x46\x13\x84\x4f\xc5\x18\x25\x47\x8d\x0a\xba\x85\x9e\x08\xa9\x7c\x42\xce\x59\x88\x5c\x61\x04\x05\x8f\x50\x82\x9e\x20\x74\x73\x1a\x4e\x10\xaa\x15\x0f\x3e\xa3\x54\x4c\x70\x78\xed\xbf\x82\xb6\x31\x70\xaa\x25\xc7\x7d\x47\xe6\xa2\x80\x8c\xce\x81\x0b\x0d\x85\x42\xd0\x13\xa6\x20\x66\x29\x02\xfe\x08\x31\xd7\xc0\x38\x84\x22\xcb\x53\x46\x79\x88\x30\x63\x7a\x62\x83\x54\x2e\x7c\xf2\xa5\x72\x20\xc6\x9a\x32\x0e\x14\x42\x91\xcf\x41\xc4\x75\x2b\xa0\x9a\x10\x00\x80\x89\xd6\xf9\x51\x10\xcc\x66\x33\x9f\xda\x2c\x7d\x21\x93\x20\x2d\xad\x54\x70\xde\x3b\x3e\xe9\x0f\x4f\x5e\xbe\xf6\x5f\x11\x72\xcd\x53\x54\x0a\x24\x7e\x2f\x98\xc4\x08\xc6\x73\xa0\x79\x9e\xb2\x90\x8e\x53\x84\x94\xce\x40\x48\xa0\x89\x44\x8c\x40\x0b\x93\xe7\x4c\x32\xcd\x78\xe2\x81\x12\xb1\x9e\x51\x89\x24\x62\x4a\x4b\x36\x2e\xf4\x1a\x41\x8b\xac\x98\x82\xba\x81\xe0\x40\x39\x38\xdd\x21\xf4\x86\x0e\xbc\xef\x0e\x7b\x43\x8f\xdc\xf4\x46\x67\x97\xd7\x23\xb8\xe9\x5e\x5d\x75\xfb\xa3\xde\xc9\x10\x2e\xaf\xe0\xf8\xb2\xff\xa1\x37\xea\x5d\xf6\x87\x70\x79\x0a\xdd\xfe\x17\xf8\xd4\xeb\x7f\xf0\x00\x99\x9e\xa0\x04\xfc\x91\x4b\x93\xbb\x90\xc0\x0c\x75\x18\xf9\x64\x88\xb8\x16\x3c\x16\x65\x32\x2a\xc7\x90\xc5\x2c\x84\x94\xf2\xa4\xa0\x09\x42\x22\x6e\x51\x72\xc6\x13\xc8\x51\x66\x4c\x99\xcd\x53\x40\x79\x44\x52\x96\x31\x4d\xb5\x7d\xde\x82\xe3\x93\xc3\x80\x90\x9c\x86\x53\xe3\x24\xa3\x8c\x13\xc2\xb2\x5c\x48\x0d\x6d\xd2\x72\xe2\x4c\x3b\xa4\xe5\x70\xd4\x81\xd9\x85\xc5\xf7\x42\xa6\xe6\xab\xd2\x32\x14\xfc\xd6\x7e\x9d\xf3\xd0\x7c\x6a\x96\xa1\x43\x48\xcb\x99\xfe\x5d\xf9\x4c\x04\xd3\x65\xf9\x05\x1a\x95\x0e\x58\x46\x13\x54\x81\x44\x25\x0a\x19\xe2\xcb\x50\x70\x55\x64\x28\x83\x50\x64\x99\xe0\x0e\x71\x09\x09\x02\xb8\xaa\xd6\x8f\xab\xe5\x33\xca\xa3\x14\x25\x4c\x44\x1a\x29\xc8\x50\x4b\x16\x2a\xcb\x06\x85\x85\x2f\x58\xf8\xf2\x89\x9e\xe7\xd8\xe8\x43\x69\x59\x84\x1a\xee\x48\x6b\xe1\xc7\xfc\xcb\x68\xfe\xd5\xec\x2a\x4f\xbe\xc5\xa9\xa0\xfa\xed\x9b\xe5\xfa\xb9\x08\xa7\x60\x00\xfa\x17\x85\xc6\x1f\xe4\xde\xa6\xd8\xc7\x59\x53\x84\x50\x22\x35\x82\xa3\x3c\x02\xc6\x99\x66\x34\x65\xff\x36\xcf\x8d\x39\x69\x01\x11\xc6\xb4\x48\xb5\xf2\x49\x5c\xf0\x70\x8f\xfb\xb6\x0b\x87\x4d\x7e\xee\x48\x4b\xa2\x2e\x24\x87\x3f\x1a\x4c\xee\x2a\x50\x47\x3b\x10\xdf\xdd\xdf\x1b\x70\x36\x7e\x7b\x52\xb9\x6c\x8a\xe5\xc2\x10\xe5\x2d\x9e\x8d\x46\x83\xf6\xcc\x6a\xd4\xbf\x42\x95\x0b\xae\xf0\x46\x32\x8d\xd2\x33\x2a\x84\xc3\x6a\xe5\x7b\x81\x4a\xbb\x26\xc1\x20\x80\xd2\xb7\xa9\x78\xa1\x4c\xc9\x2e\x36\x82\x71\x18\x48\x91\xa1\x9e\x60\x61\xb7\x37\xa3\x1a\xda\x63\xa1\x27\xf0\xf1\x64\x04\x7f\xc0\xe0\x72\x38\x72\x49\x8b\xc5\xc6\xb7\x7f\x7d\x75\xee\x0f\xa8\x9e\x40\xa7\x03\x65\xfd\xf8\x17\xa5\xa7\x6e\x14\x59\x2d\xdd\x91\x56\xab\x02\xe2\x97\x9f\x95\x41\x7b\xe6\x92\x56\xc5\x15\x69\xdd\x2f\x5d\x5e\xa0\x9e\x88\x08\x5e\x74\xc0\x31\xb1\x9c\xd2\x83\x81\x70\x22\xa5\x90\xed\x99\xb7\x88\xf4\x9e\x46\x15\x2a\xaf\x44\x3f\xd4\x54\x17\x6a\xf5\xf3\x46\x80\x20\x80\x9c\x4a\x0b\xd7\x78\xb6\x2d\x0a\x95\x86\x88\x6a\x6a\x2b\xe5\xfa\xea\xdc\x3e\xd8\x5c\x50\x4a\x38\xea\xd8\x94\x06\x54\x2a\x3c\x15\x32\x6b\xbb\xef\xec\xef\x2f\x3a\xc0\x59\xba\x23\x33\x94\xb2\x7a\x70\x1f\x9d\x53\xb5\x15\x95\x76\x8e\x07\xd7\xfb\xd8\x3d\x5e\x5a\x35\x13\xbc\xb2\x31\x29\x19\x47\x26\xf7\x87\x02\x5f\x60\xf6\x88\xc0\x17\x98\x3d\x18\xf8\x02\xb3\x47\x05\x4e\x50\x1f\x17\x52\x22\xd7\x25\x49\xfb\xc2\x7f\xdc\xb0\x6d\x4e\x62\xd3\x72\xab\xce\x56\x09\x8c\x8b\x2c\x2f\xab\x71\x5f\xe8\xf7\x4b\xab\xe6\xa0\x2b\x9b\x3d\xc8\xd7\x4b\x25\xce\xb4\x3f\xcc\x25\xe3\x3a\x6e\x3b\x07\xea\x08\x0e\x94\xb3\x2c\xed\x6b\x3e\xe5\x62\xc6\x4f\x0b\x1e\x9a\xb1\xe1\xad\xe5\xb6\x5e\x5a\x7d\xa1\x4f\x45\xc1\x23\xf7\x29\x8d\x63\xbb\x50\x76\xf7\x8f\xef\x05\xca\x39\x14\x32\xf5\x3f\xd3\xb4\x40\xb5\x68\x1f\x09\x6a\x33\xb2\xa1\xec\x5e\xa5\x82\xcc\x2c\xa8\x17\x71\x54\x48\x3b\xf3\x86\x18\x0e\x4b\xb3\xa3\x4e\xe9\xd0\xec\x66\xbb\x42\xfa\x61\x65\xf5\x0f\xb3\xe6\x92\x56\xc6\xd2\x94\x85\x42\xa2\xda\xf3\xde\xc5\xd2\x68\xf1\x1a\x8b\x61\x3b\x64\xa7\x03\x8e\x03\x3f\x7f\xc2\x96\xd3\x72\xa5\xb1\xb9\xf4\x85\xfe\xc8\x6e\x71\xb9\x05\x5d\x99\x14\x19\xf2\xc7\xb5\x1a\xcb\x91\x19\xcc\x28\xab\xf6\xd2\x2e\x99\x52\xe5\x91\x47\x2b\x77\x1f\x5d\x5e\x1d\x88\x4d\xcc\x50\x50\xcd\x7a\xbf\xab\x05\x6b\x6f\x21\x5d\xe3\xcd\xab\xc1\xdd\xfd\xfe\x26\x1d\x5b\xfc\x95\xaf\x55\x8d\x6e\x8d\xbf\xb5\x95\x46\xfe\x7a\x3c\x14\x52\x62\xa8\x9f\x49\x60\x22\xa0\x56\x9e\x75\x68\xb5\x24\x5d\xd2\x32\x32\x3a\xb5\x32\x4a\x79\x2d\xfc\x56\x9f\xfc\xfa\xe7\xd1\xb7\x1d\xe6\x75\xc7\x8d\x95\xb5\xf9\xd2\xda\x56\x35\xd6\xf1\x73\xe5\x68\xdb\xe7\x2f\x95\xa3\x6d\xed\xcf\x97\x23\x26\x74\x3c\xd7\xfb\xd5\xb8\xb0\x79\xa4\x18\x37\x5c\xfe\x1f\x69\x71\x93\xab\xe7\x6a\x71\x81\xd0\x5b\x81\x6d\x50\xe2\x3a\x17\x0f\x0b\x71\xdd\xdd\xef\xd3\xa1\xa9\xcb\x1a\xac\xa7\xc8\x70\x75\x6a\x68\x92\xe1\xca\x6f\x53\x45\xfd\x26\x11\x6e\x1f\x1f\x76\x49\xd1\x0a\x6f\xcb\x74\x47\x96\xce\x0d\xb5\x77\xc2\x23\x7b\x53\x37\xb7\x4a\x34\xe4\x63\xf4\xc2\x59\xb3\xae\x71\xd6\x70\xd4\x29\x99\x7b\x32\x9e\xe5\x69\xbb\x11\xc6\xe2\x24\x53\xbb\x6b\xf9\xe6\x3f\x03\x27\xc2\xd8\xdc\xf9\x76\x58\x5c\xf3\xb4\xb2\x31\xe2\x99\x7a\x70\x6b\x4f\xcb\x94\x27\xb8\x69\x6f\x8b\x73\x05\x35\xb6\xbc\xfc\x05\xce\x4e\xce\x07\x70\x60\xae\x1c\xb1\x80\x0c\x95\xa2\x09\xfa\xff\xe4\x8e\x07\x53\x77\xe7\x0b\xa3\x2f\x83\x13\xf3\x42\x42\x8b\x04\x9b\x0d\x0f\x14\x1c\xc4\xe5\xb2\x07\xb7\xae\x29\xe3\x27\xb0\xb6\x3a\x13\xb6\xcb\xf4\xab\xa6\xea\x41\x84\xa9\x69\xab\xe5\x45\x6d\x55\x7f\x60\x2e\xdc\xcb\xca\x7b\x90\x51\x16\xc3\xbf\x3c\x10\x53\xc3\xd6\x86\xdd\xd7\xf2\xf3\xdb\x3b\xb3\x5c\x3f\x63\x6e\xac\xc3\x5f\x3b\x65\x32\xa4\x75\x0f\x98\x2a\xdc\x6b\xbc\xb2\xdd\x9d\xd8\x72\x23\x49\xcb\x22\x19\xa6\x88\xf9\xb2\xa7\x99\x9f\xf7\xc1\x69\x8a\xfa\x72\x19\x76\x6f\xcc\x27\x97\x73\xfd\xa0\xfd\x6b\x66\xe4\xa6\xdf\xc5\x1f\x1d\x1a\xe6\x9c\x59\xea\xd3\x0c\x17\x6d\xc9\xa2\xdc\x37\x50\xcd\xfa\xd2\xf8\xb9\x33\xf8\xa1\x71\x6a\x13\x5e\x3e\xd7\x73\xfa\xdf\x8e\xd6\xc0\xca\xa5\x9a\xb0\xdb\x4c\xff\xf7\x73\xd6\x42\xad\xb4\xb9\xf5\x56\x79\x6f\x37\x19\xb4\x6b\x94\x78\xf0\xf6\xcd\x83\x53\xb6\xe6\xf0\x37\x4c\xd8\x85\x46\xb6\x9a\x4f\x85\xcc\x5b\x6f\x32\x75\x26\xdc\xc3\x52\xb5\x18\x0a\x73\x07\x6c\x1a\xc4\x5b\x97\xd8\xc6\x41\x5c\x86\x6d\xac\xf7\xad\x31\x5c\xe6\xb7\xab\xda\x9f\x3b\xb1\xff\x13\x00\x00\xff\xff\x25\xcb\xc3\xb1\x47\x17\x00\x00") + +func testImagesResourceConsumerResource_consumer_handlerGoBytes() ([]byte, error) { + return bindataRead( + _testImagesResourceConsumerResource_consumer_handlerGo, + "test/images/resource-consumer/resource_consumer_handler.go", + ) +} + +func testImagesResourceConsumerResource_consumer_handlerGo() (*asset, error) { + bytes, err := testImagesResourceConsumerResource_consumer_handlerGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/resource-consumer/resource_consumer_handler.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesResourceConsumerUtilsGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x55\x5d\x8f\xda\x46\x14\x7d\x66\x7e\xc5\x91\xa5\x48\x90\x82\xbd\x8b\xd4\x97\xad\xf6\x81\x90\x6d\x8b\x92\x85\x68\xcd\x36\xca\xe3\x30\xbe\xd8\xa3\x7a\x66\xdc\xf9\x80\x45\x55\xfe\x7b\x35\xe6\xcb\xb0\xda\x2a\x79\x31\xc3\xdc\x73\xee\x3d\xf7\x9e\x6b\xc8\xde\xb3\xa9\x69\x76\x56\x96\x95\xc7\xf8\xe6\xf6\x57\x2c\x2b\xc2\xa7\xb0\x22\xab\xc9\x93\xc3\x24\xf8\xca\x58\x97\x32\xf6\x59\x0a\xd2\x8e\x0a\x04\x5d\x90\x85\xaf\x08\x93\x86\x8b\x8a\x70\x88\x0c\xf1\x17\x59\x27\x8d\xc6\x38\xbd\x41\x3f\x02\x92\x43\x28\x19\xfc\xc6\x76\x26\x40\xf1\x1d\xb4\xf1\x08\x8e\xe0\x2b\xe9\xb0\x96\x35\x81\x5e\x04\x35\x1e\x52\x43\x18\xd5\xd4\x92\x6b\x41\xd8\x4a\x5f\xb5\x45\x0e\x29\x52\xf6\xed\x90\xc0\xac\x3c\x97\x1a\x1c\xc2\x34\x3b\x98\x75\x17\x05\xee\x19\x03\x80\xca\xfb\xe6\x2e\xcb\xb6\xdb\x6d\xca\x5b\x95\xa9\xb1\x65\x56\xef\x51\x2e\xfb\x3c\x9b\x3e\xcc\xf3\x87\xd1\x38\xbd\x61\xec\x59\xd7\xe4\x1c\x2c\xfd\x13\xa4\xa5\x02\xab\x1d\x78\xd3\xd4\x52\xf0\x55\x4d\xa8\xf9\x16\xc6\x82\x97\x96\xa8\x80\x37\x51\xe7\xd6\x4a\x2f\x75\x39\x84\x33\x6b\xbf\xe5\x96\x58\x21\x9d\xb7\x72\x15\xfc\xc5\x80\x8e\xaa\xa4\x43\x17\x60\x34\xb8\x46\x32\xc9\x31\xcb\x13\x7c\x98\xe4\xb3\x7c\xc8\xbe\xce\x96\x7f\x2e\x9e\x97\xf8\x3a\x79\x7a\x9a\xcc\x97\xb3\x87\x1c\x8b\x27\x4c\x17\xf3\x8f\xb3\xe5\x6c\x31\xcf\xb1\xf8\x1d\x93\xf9\x37\x7c\x9a\xcd\x3f\x0e\x41\xd2\x57\x64\x41\x2f\x8d\x8d\xda\x8d\x85\x8c\xa3\xa3\x22\x65\x39\xd1\x45\xf1\xb5\xd9\x8b\x71\x0d\x09\xb9\x96\x02\x35\xd7\x65\xe0\x25\xa1\x34\x1b\xb2\x5a\xea\x12\x0d\x59\x25\x5d\x34\xcf\x81\xeb\x82\xd5\x52\x49\xcf\x7d\xfb\xfd\x55\x3b\x29\x7b\x9f\x31\xd6\x70\xf1\x77\x4c\xa2\xb8\xd4\x8c\x49\xd5\x18\xeb\xd1\x67\xbd\x64\xad\x7c\xc2\x7a\x49\x6d\xca\xf8\x61\x5c\x46\x2f\x24\xe2\xd1\x79\x2b\x8c\xde\x24\x6c\xc0\x98\x30\xda\xb5\xf0\x78\x08\x8a\xa6\x5f\x9e\x3f\x48\xcd\xed\x0e\xf7\x48\xd2\xec\x70\x3b\x12\x4d\xe8\x9e\x93\x13\xfe\x91\xd4\x19\xef\x7c\x1c\x42\x9b\x37\xcb\x30\x3d\x65\xc4\x01\xec\xc0\x51\xca\x0d\x69\xe8\xa0\x56\x64\xe3\xd2\x28\x59\xd7\x52\x18\x4b\xee\x7a\x40\x54\xa0\x08\xb6\x6d\x3e\x65\xeb\xa0\x45\x27\x63\xbf\x43\x93\xda\x0f\x4f\xc8\x9c\x44\xbc\x18\xe0\x5f\xd6\xab\x4d\x99\x7e\xb1\x52\xfb\x75\x3f\xe9\x88\x39\x53\xef\xf0\x6e\x73\x41\x8d\x17\xc9\xb0\x83\xb8\x88\x0e\x58\x2f\xcb\x20\x2c\xf1\xb8\x74\xd0\xb4\x3d\x36\x06\xd1\x04\x34\xd6\x08\x72\x8e\xf5\xb8\x2d\x6f\x71\x77\x8f\xb5\xf2\x69\xde\x1c\x04\x8c\xce\x49\xef\xdf\x15\x17\x45\x06\x2d\x65\xfc\x9a\x72\xac\x3d\x72\x24\xf6\xa4\x4b\x35\x67\xcf\x22\x37\xda\x9b\x4e\x8d\x52\x5c\x17\xfd\x6b\x3b\x87\x88\xaa\xda\xe7\xf8\x82\x99\x3e\x05\xdd\x1f\xb0\xef\x5d\xcb\x1e\x49\xfd\xaf\x65\x54\xf2\xd5\xce\xff\x84\x63\x8f\xa4\xfa\x67\xd6\xcf\x18\x16\xa5\x9c\x98\x6f\xfa\x75\x04\x5c\x0f\xe8\x14\xc8\xbd\x8d\x96\xdd\xdd\xe3\xb0\xfc\xe9\xcc\x1b\x7e\xd6\x34\xc0\x2f\x48\x1e\x13\xd6\xeb\xf0\xdf\xe0\xfc\xd8\x42\x28\x52\xc6\xee\xce\x3b\x71\x7e\x5d\xde\xb2\xea\xf4\x26\x0d\x91\x8c\x54\x32\x44\x72\x1b\x1f\xa3\xd1\x46\x8d\x5a\x8d\xdd\x46\xf7\xda\x8e\xe1\x8a\xeb\x32\x62\x6f\x5a\x82\xbf\xdc\x93\x3d\x74\xd0\x95\x70\xe1\xf9\x1f\xe4\xa7\xc1\x5a\xd2\x3e\xf7\xdc\x07\x87\x76\xfd\x1c\x4c\xf0\xe0\xd0\x66\x64\x9a\x83\x99\xd7\xc8\xfe\x2b\xd3\xae\x11\xc9\x7e\x42\xf1\xaf\x26\xfe\x2c\x92\x22\xed\xa9\x60\xdf\xd9\x7f\x01\x00\x00\xff\xff\x36\xd7\xfc\x69\xf0\x06\x00\x00") + +func testImagesResourceConsumerUtilsGoBytes() ([]byte, error) { + return bindataRead( + _testImagesResourceConsumerUtilsGo, + "test/images/resource-consumer/utils.go", + ) +} + +func testImagesResourceConsumerUtilsGo() (*asset, error) { + bytes, err := testImagesResourceConsumerUtilsGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/resource-consumer/utils.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesSampleApiserverBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\xb3\xe0\x82\x0a\x17\xe5\xda\x26\x16\xe5\x1a\x1b\x95\x99\xe9\x63\x93\x04\xe9\x01\x91\x65\x16\x98\xd2\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x53\x41\xb1\xb1\xa5\x41\x85\x2d\x98\x44\x96\x04\x04\x00\x00\xff\xff\xa4\xbc\x38\xda\x91\x00\x00\x00") + +func testImagesSampleApiserverBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesSampleApiserverBaseimage, + "test/images/sample-apiserver/BASEIMAGE", + ) +} + +func testImagesSampleApiserverBaseimage() (*asset, error) { + bytes, err := testImagesSampleApiserverBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/sample-apiserver/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesSampleApiserverDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x54\xef\x4f\xe3\x46\x10\xfd\xee\xbf\xe2\x29\xe6\x43\x2b\x61\x3b\x41\xaa\x0e\x71\x42\xaa\x09\xb9\x60\x1d\xc4\x28\x0e\x77\x42\x6d\x15\x6d\xec\x89\xbd\xc5\xde\x75\xf7\x47\x42\x74\xba\xff\xbd\xda\x35\x70\x50\x2a\x5d\x3e\xc5\xb3\xb3\xf3\xde\xbe\x99\x37\x21\xa6\xb2\x3f\x28\x5e\x37\x06\x27\xe3\xc9\x29\x56\x0d\xe1\xb3\xdd\x90\x12\x64\x48\x23\xb5\xa6\x91\x4a\xc7\x41\x18\x84\xb8\xe6\x25\x09\x4d\x15\xac\xa8\x48\xc1\x34\x84\xb4\x67\x65\x43\xcf\x27\xc7\xf8\x42\x4a\x73\x29\x70\x12\x8f\xf1\x8b\x4b\x18\x3d\x1d\x8d\x7e\xfd\x18\x84\x38\x48\x8b\x8e\x1d\x20\xa4\x81\xd5\x04\xd3\x70\x8d\x2d\x6f\x09\xf4\x58\x52\x6f\xc0\x05\x4a\xd9\xf5\x2d\x67\xa2\x24\xec\xb9\x69\x3c\xcc\x53\x91\x38\x08\x71\xff\x54\x42\x6e\x0c\xe3\x02\x0c\xa5\xec\x0f\x90\xdb\xd7\x79\x60\xc6\x13\x76\xbf\xc6\x98\xfe\x2c\x49\xf6\xfb\x7d\xcc\x3c\xd9\x58\xaa\x3a\x69\x87\x44\x9d\x5c\x67\xd3\xd9\xa2\x98\x45\x27\xf1\xd8\x5f\xb9\x13\x2d\x69\x0d\x45\xff\x58\xae\xa8\xc2\xe6\x00\xd6\xf7\x2d\x2f\xd9\xa6\x25\xb4\x6c\x0f\xa9\xc0\x6a\x45\x54\xc1\x48\xc7\x77\xaf\xb8\xe1\xa2\x3e\x86\x96\x5b\xb3\x67\x8a\x82\x10\x15\xd7\x46\xf1\x8d\x35\x6f\xc4\x7a\x66\xc7\xf5\x9b\x04\x29\xc0\x04\x46\x69\x81\xac\x18\xe1\x22\x2d\xb2\xe2\x38\x08\xf1\x35\x5b\x5d\xe5\x77\x2b\x7c\x4d\x97\xcb\x74\xb1\xca\x66\x05\xf2\x25\xa6\xf9\xe2\x32\x5b\x65\xf9\xa2\x40\xfe\x09\xe9\xe2\x1e\x9f\xb3\xc5\xe5\x31\x88\x9b\x86\x14\xe8\xb1\x57\x8e\xbf\x54\xe0\x4e\x46\xaa\x9c\x66\x05\xd1\x1b\x02\x5b\x39\x10\xd2\x3d\x95\x7c\xcb\x4b\xb4\x4c\xd4\x96\xd5\x84\x5a\xee\x48\x09\x2e\x6a\xf4\xa4\x3a\xae\x5d\x33\x35\x98\xa8\x82\x10\x2d\xef\xb8\x61\xc6\x47\xde\x3d\x2a\x0e\x82\x74\x39\x77\xec\x67\xd9\x4d\x3a\x9f\x05\x9f\x96\xf9\x0d\x1e\x4e\x75\x5c\x97\x2a\xe6\x32\xd9\x58\xde\x56\x11\xef\x58\x4d\xc9\x83\xdd\x50\x54\x2a\xa9\xf5\xd9\x6e\x12\x4f\x7e\x8b\xc7\xd1\x04\x4c\xc3\xe7\xac\x1f\x4e\xf5\x7a\xb2\x9e\x7c\x58\x6b\xd6\xf5\x2d\xad\x59\xcf\x35\xa9\x1d\xa9\x20\x98\x2d\xbe\x60\x9e\xdf\xa6\xab\x2b\x24\xb5\x0c\x96\x77\x0b\x74\x0f\x15\x57\x88\x7a\x1c\x7d\x1b\x4e\xbe\x27\x5a\x95\xaf\xbe\x36\x5c\xf8\x7b\xfe\xd6\xd1\x10\x75\xc1\xb3\x23\xf7\x2f\x08\x82\xd0\x0f\x3d\x9d\x10\x58\x5d\x2b\xaa\x99\x71\xf2\x90\x36\xbe\x51\xa4\x79\x2d\x86\x66\xfb\x18\xdb\xf0\x96\x9b\x83\xfb\x56\x56\x60\xe0\x18\xbd\x70\x74\xcf\x60\xe2\xa5\x12\x55\x18\xe2\xae\x0d\x9a\x06\x18\x5f\x47\xb0\x8e\x2a\x8c\x8a\x46\xda\xb6\xc2\x86\xe0\x07\xcc\x48\x68\xdb\xf7\x52\x19\x2f\xee\x24\x9e\x7c\x40\xe1\x21\x90\xde\x66\x28\x06\x0c\xab\x5d\x87\x5c\x42\x69\x95\x22\x61\x90\xbe\x30\x1f\xb9\x07\x5d\x38\x21\xe1\xb4\xfd\x10\x8f\x5d\x51\x12\xda\x2a\x7a\x73\x45\x51\x4b\x4c\xd3\x33\x9e\x06\x43\xaf\xb8\x54\xd8\x3d\x79\xf8\xc9\x53\xc3\x0b\xf1\xa3\x0b\x21\xe6\x64\xbc\x37\xa5\x35\x43\xcf\x3c\x1d\x89\x5e\xf6\xb6\x65\x86\xd0\xc9\xca\xb6\x84\xd2\xf9\xcd\x77\x69\x9e\x4f\x26\x93\x9b\xfc\xf2\xee\x7a\x76\x2e\x05\x6a\x89\x9a\x0c\xa2\xca\x4f\x08\x97\xc9\x7f\x65\xfc\x7d\x37\xf6\xdc\x5f\x81\x21\x2f\x92\x74\x39\xbd\x8a\x5e\xa6\x96\xc4\xce\xa1\x7a\x06\xff\x87\x32\x9d\xe7\xeb\xd9\x22\xbd\xb8\x9e\x5d\x9e\x8f\x31\xcf\xf3\xe2\xbc\xe5\xc2\x3e\x62\x9e\xbb\x42\xe7\x6e\x58\xdd\x9f\x67\x3a\x3f\xe3\x12\x84\xde\x39\x4c\x75\xc7\xee\x0a\x17\xda\xb0\xb6\x75\x8b\x4c\xa3\x96\x6e\xa6\x12\x5f\x7f\xed\x33\xb4\xc4\xdf\x56\x1b\x6c\xb9\xa8\xbc\x90\x7e\xcf\x31\x51\x0d\x1b\x8b\x1b\x3f\x52\x0d\x41\x49\x69\xa0\x65\x10\x62\xef\x24\x13\x2f\xe7\x4e\xde\xad\x92\xdd\xb0\x26\x4d\xa3\xe4\x1e\x6c\xcf\x0e\x28\xa5\x70\xcb\x8f\x9c\xc9\x9d\x6b\x7d\x12\x83\x36\x4c\x54\x4c\x55\x68\x65\xe9\x7d\xea\x45\xf1\xf8\xc9\xc0\x0f\x91\x1b\xbb\xf7\x43\x1b\xd1\x23\x95\x28\x7b\x7c\xfb\x8e\x04\x7f\x7e\x0c\x06\xfb\x1e\xfd\xb0\xf3\x34\xbf\xbd\x47\x14\x39\xa4\xf3\x9f\xd8\x14\xef\x14\x7c\x1f\x71\x56\x5e\x2d\xef\x6f\xf3\x6c\xb1\xc2\x1f\xa3\x77\xe7\xa3\xbf\x82\x7f\x03\x00\x00\xff\xff\x2b\x22\x73\x84\x9b\x06\x00\x00") + +func testImagesSampleApiserverDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesSampleApiserverDockerfile, + "test/images/sample-apiserver/Dockerfile", + ) +} + +func testImagesSampleApiserverDockerfile() (*asset, error) { + bytes, err := testImagesSampleApiserverDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/sample-apiserver/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesSampleApiserverOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\x48\xc9\xcc\x2d\xe6\x02\x04\x00\x00\xff\xff\xe2\x68\x65\xd7\x14\x00\x00\x00") + +func testImagesSampleApiserverOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesSampleApiserverOwners, + "test/images/sample-apiserver/OWNERS", + ) +} + +func testImagesSampleApiserverOwners() (*asset, error) { + bytes, err := testImagesSampleApiserverOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/sample-apiserver/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesSampleApiserverVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\x34\xd7\x33\xe6\x02\x04\x00\x00\xff\xff\x34\xa3\x0e\x79\x07\x00\x00\x00") + +func testImagesSampleApiserverVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesSampleApiserverVersion, + "test/images/sample-apiserver/VERSION", + ) +} + +func testImagesSampleApiserverVersion() (*asset, error) { + bytes, err := testImagesSampleApiserverVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/sample-apiserver/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesSampleDevicePluginBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\xb3\xe0\x82\x0a\x17\xe5\xda\x26\x16\xe5\x1a\x1b\x95\x99\xe9\x63\x93\x04\xe9\x01\x91\x65\x16\x98\xd2\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x53\x41\xb1\xb1\xa5\x41\x85\x2d\x98\x44\x96\x04\x04\x00\x00\xff\xff\xa4\xbc\x38\xda\x91\x00\x00\x00") + +func testImagesSampleDevicePluginBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesSampleDevicePluginBaseimage, + "test/images/sample-device-plugin/BASEIMAGE", + ) +} + +func testImagesSampleDevicePluginBaseimage() (*asset, error) { + bytes, err := testImagesSampleDevicePluginBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/sample-device-plugin/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesSampleDevicePluginDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x91\x41\x6f\xd3\x30\x14\xc7\xef\xfe\x14\x7f\x25\x1c\x40\xea\xd2\xb1\x13\x82\x53\x68\xb3\x11\x6d\x4b\x50\x92\x31\x55\x88\x83\x9b\xbc\x26\x4f\x72\x6d\x63\x3b\xcb\xfa\xed\x51\xba\x4e\x50\x0d\xdf\xfc\xde\xcf\xcf\x3f\xff\x1d\x63\x65\xec\xc1\x71\x3f\x04\x5c\x5d\x7e\xfc\x84\x66\x20\xdc\x8e\x5b\x72\x9a\x02\x79\xa4\x63\x18\x8c\xf3\x89\x88\x45\x8c\x3b\x6e\x49\x7b\xea\x30\xea\x8e\x1c\xc2\x40\x48\xad\x6c\x07\x7a\xed\x2c\xf0\x83\x9c\x67\xa3\x71\x95\x5c\xe2\xfd\x0c\x44\xa7\x56\xf4\xe1\x8b\x88\x71\x30\x23\xf6\xf2\x00\x6d\x02\x46\x4f\x08\x03\x7b\xec\x58\x11\xe8\xb9\x25\x1b\xc0\x1a\xad\xd9\x5b\xc5\x52\xb7\x84\x89\xc3\x70\xbc\xe6\x34\x24\x11\x31\x36\xa7\x11\x66\x1b\x24\x6b\x48\xb4\xc6\x1e\x60\x76\xff\x72\x90\xe1\x28\x3c\xaf\x21\x04\xfb\x79\xb9\x9c\xa6\x29\x91\x47\xd9\xc4\xb8\x7e\xa9\x5e\x40\xbf\xbc\xcb\x57\x59\x51\x67\x17\x57\xc9\xe5\xf1\xc8\x83\x56\xe4\x3d\x1c\xfd\x1e\xd9\x51\x87\xed\x01\xd2\x5a\xc5\xad\xdc\x2a\x82\x92\x13\x8c\x83\xec\x1d\x51\x87\x60\x66\xdf\xc9\x71\x60\xdd\x2f\xe0\xcd\x2e\x4c\xd2\x91\x88\xd1\xb1\x0f\x8e\xb7\x63\x38\x0b\xeb\xd5\x8e\xfd\x19\x60\x34\xa4\x46\x94\xd6\xc8\xeb\x08\x5f\xd3\x3a\xaf\x17\x22\xc6\x63\xde\x7c\x2b\x1f\x1a\x3c\xa6\x55\x95\x16\x4d\x9e\xd5\x28\x2b\xac\xca\x62\x9d\x37\x79\x59\xd4\x28\xaf\x91\x16\x1b\xdc\xe6\xc5\x7a\x01\xe2\x30\x90\x03\x3d\x5b\x37\xfb\x1b\x07\x9e\x63\xa4\x6e\xce\xac\x26\x3a\x13\xd8\x99\x17\x21\x6f\xa9\xe5\x1d\xb7\x50\x52\xf7\xa3\xec\x09\xbd\x79\x22\xa7\x59\xf7\xb0\xe4\xf6\xec\xe7\xcf\xf4\x90\xba\x13\x31\x14\xef\x39\xc8\x70\xac\xbc\x79\x54\x22\x44\x5a\xdd\xcc\xf6\x59\x7e\x9f\xde\x64\xe2\xba\x2a\xef\xf1\xee\xef\x3e\x5d\xaf\xe1\xe5\xde\x2a\xea\xe8\x89\x5b\xb2\x6a\xec\x59\x63\xf9\xb6\x26\xb2\xa2\xa9\x36\xdf\xcb\xbc\x68\xf0\x33\xfa\x0f\x10\x2d\x10\x5d\x48\xe5\x8d\x32\x7d\x30\x3e\x74\xe4\x5c\xf4\x4b\xfc\x09\x00\x00\xff\xff\x21\xa9\x98\x3a\xcc\x02\x00\x00") + +func testImagesSampleDevicePluginDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesSampleDevicePluginDockerfile, + "test/images/sample-device-plugin/Dockerfile", + ) +} + +func testImagesSampleDevicePluginDockerfile() (*asset, error) { + bytes, err := testImagesSampleDevicePluginDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/sample-device-plugin/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesSampleDevicePluginMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x4a\x10\x85\x9f\xef\xfe\x8a\xa3\x98\x87\x44\x0a\x0e\x17\x5d\xdd\x56\x54\xa8\x72\x93\x34\x58\x50\xbb\xb2\x03\x88\x27\xb4\xb1\x27\xf6\x48\xeb\xdd\xed\xee\x1a\x27\xff\xbe\x72\x00\xa9\xa8\x7e\x9b\x99\x33\x67\x3e\x9f\x8d\xb0\x34\xf6\xe8\xb8\x69\x03\x2e\x2f\xfe\xfd\x8c\x6d\x4b\xb8\xed\x77\xe4\x34\x05\xf2\x48\xfa\xd0\x1a\xe7\x63\x11\x89\x08\x77\x5c\x91\xf6\x54\xa3\xd7\x35\x39\x84\x96\x90\x58\x59\xb5\xf4\x3e\x99\xe3\x81\x9c\x67\xa3\x71\x19\x5f\x60\x3a\x0a\x26\x6f\xa3\xc9\xec\x8b\x88\x70\x34\x3d\x3a\x79\x84\x36\x01\xbd\x27\x84\x96\x3d\xf6\xac\x08\x74\xa8\xc8\x06\xb0\x46\x65\x3a\xab\x58\xea\x8a\x30\x70\x68\x4f\x67\xde\x4c\x62\x11\xe1\xe9\xcd\xc2\xec\x82\x64\x0d\x89\xca\xd8\x23\xcc\xfe\x4f\x1d\x64\x38\x01\x8f\x5f\x1b\x82\xbd\x5a\x2c\x86\x61\x88\xe5\x09\x36\x36\xae\x59\xa8\x57\xa1\x5f\xdc\xa5\xcb\x75\x56\xae\xcf\x2f\xe3\x8b\xd3\xca\xbd\x56\xe4\x3d\x1c\xfd\xea\xd9\x51\x8d\xdd\x11\xd2\x5a\xc5\x95\xdc\x29\x82\x92\x03\x8c\x83\x6c\x1c\x51\x8d\x60\x46\xde\xc1\x71\x60\xdd\xcc\xe1\xcd\x3e\x0c\xd2\x91\x88\x50\xb3\x0f\x8e\x77\x7d\xf8\x10\xd6\x3b\x1d\xfb\x0f\x02\xa3\x21\x35\x26\x49\x89\xb4\x9c\xe0\x5b\x52\xa6\xe5\x5c\x44\x78\x4c\xb7\x37\xf9\xfd\x16\x8f\x49\x51\x24\xd9\x36\x5d\x97\xc8\x0b\x2c\xf3\x6c\x95\x6e\xd3\x3c\x2b\x91\x7f\x47\x92\x3d\xe1\x36\xcd\x56\x73\x10\x87\x96\x1c\xe8\x60\xdd\xc8\x6f\x1c\x78\x8c\x91\xea\x31\xb3\x92\xe8\x03\xc0\xde\xbc\x02\x79\x4b\x15\xef\xb9\x82\x92\xba\xe9\x65\x43\x68\xcc\x0b\x39\xcd\xba\x81\x25\xd7\xb1\x1f\x1f\xd3\x43\xea\x5a\x44\x50\xdc\x71\x90\xe1\xd4\xf9\xeb\xa7\x62\x21\xca\x62\x59\x5e\x7b\xd9\x59\x45\x35\xbd\x70\x45\x56\xf5\x0d\x6b\x91\x97\xf8\x7a\x0d\xc5\xba\x3f\x88\xa4\x58\xde\x8c\x95\xec\xea\xff\xff\x13\xdb\xa4\xd8\xac\xb7\x63\x7d\x36\x5d\xde\x17\xab\xb4\x98\x89\x4d\x9e\x14\x3f\xc6\xd6\x27\xb1\xc9\xef\x92\x6c\xf3\xfc\xb0\x2e\xca\x34\xcf\x4e\x26\x32\x90\x0f\xe3\xa5\xe7\x55\x5a\x60\xdc\xd3\x26\xd4\xec\x70\x36\xf5\x2d\x29\x05\x3b\xd4\xb3\x99\xa0\x83\x35\x2e\x08\xb1\x63\x7d\x25\xfe\x89\xe3\x05\x77\xb2\xa1\xf3\x3e\xb0\x8a\x7d\x8b\x1d\x6b\x9c\x4d\x47\xde\x99\x10\xf1\xcf\x9b\x3c\x7b\xba\x1a\x9b\xe2\x77\x00\x00\x00\xff\xff\x2f\x48\xaa\xda\x0f\x03\x00\x00") + +func testImagesSampleDevicePluginMakefileBytes() ([]byte, error) { + return bindataRead( + _testImagesSampleDevicePluginMakefile, + "test/images/sample-device-plugin/Makefile", + ) +} + +func testImagesSampleDevicePluginMakefile() (*asset, error) { + bytes, err := testImagesSampleDevicePluginMakefileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/sample-device-plugin/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesSampleDevicePluginVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe2\x02\x04\x00\x00\xff\xff\x5d\x96\xa5\x56\x04\x00\x00\x00") + +func testImagesSampleDevicePluginVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesSampleDevicePluginVersion, + "test/images/sample-device-plugin/VERSION", + ) +} + +func testImagesSampleDevicePluginVersion() (*asset, error) { + bytes, err := testImagesSampleDevicePluginVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/sample-device-plugin/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesSampleDevicePluginSampledevicepluginGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x56\x4f\x6f\xdb\x3e\x12\x3d\x9b\x9f\x62\x42\xa0\x81\x9c\xaa\x52\x93\x53\xe1\xc2\x07\xaf\x9d\xb6\xda\x74\x9d\xc0\x4e\xb6\x28\x8a\xa2\xa0\xa5\x91\x4c\x58\x22\x59\x92\xb2\x63\x04\xfe\xee\x0b\x52\xb2\x23\x3b\x29\xba\xc0\x2f\x87\x24\xe6\xcc\xbc\x79\x6f\xfe\x90\x8e\x2f\xc8\x58\xaa\xad\xe6\xc5\xd2\xc2\xd5\xfb\xcb\x0f\x70\xbf\x44\xb8\xa9\x17\xa8\x05\x5a\x34\x30\xaa\xed\x52\x6a\x13\x11\xf2\x95\xa7\x28\x0c\x66\x50\x8b\x0c\x35\xd8\x25\xc2\x48\xb1\x74\x89\xd0\x5a\x42\xf8\x2f\x6a\xc3\xa5\x80\xab\xe8\x3d\x04\xce\x81\xb6\x26\xda\xff\x48\xb6\xb2\x86\x8a\x6d\x41\x48\x0b\xb5\x41\xb0\x4b\x6e\x20\xe7\x25\x02\x3e\xa6\xa8\x2c\x70\x01\xa9\xac\x54\xc9\x99\x48\x11\x36\xdc\x2e\x7d\x92\x16\x22\x22\xdf\x5b\x00\xb9\xb0\x8c\x0b\x60\x90\x4a\xb5\x05\x99\x77\xbd\x80\x59\x42\x00\x00\x96\xd6\xaa\x41\x1c\x6f\x36\x9b\x88\x79\x96\x91\xd4\x45\x5c\x36\x5e\x26\xfe\x9a\x8c\xaf\xa7\xf3\xeb\x77\x57\xd1\x7b\x42\x1e\x44\x89\xc6\x80\xc6\xdf\x35\xd7\x98\xc1\x62\x0b\x4c\xa9\x92\xa7\x6c\x51\x22\x94\x6c\x03\x52\x03\x2b\x34\x62\x06\x56\x3a\x9e\x1b\xcd\x2d\x17\x45\x08\x46\xe6\x76\xc3\x34\x92\x8c\x1b\xab\xf9\xa2\xb6\x47\x05\xda\xb3\xe2\x06\xba\x0e\x52\x00\x13\x40\x47\x73\x48\xe6\x14\xfe\x35\x9a\x27\xf3\x90\x7c\x4b\xee\xbf\xdc\x3e\xdc\xc3\xb7\xd1\x6c\x36\x9a\xde\x27\xd7\x73\xb8\x9d\xc1\xf8\x76\x3a\x49\xee\x93\xdb\xe9\x1c\x6e\x3f\xc1\x68\xfa\x1d\x6e\x92\xe9\x24\x04\xe4\x76\x89\x1a\xf0\x51\x69\xc7\x5d\x6a\xe0\xae\x74\x98\x45\x64\x8e\x78\x94\x3c\x97\x0d\x19\xa3\x30\xe5\x39\x4f\xa1\x64\xa2\xa8\x59\x81\x50\xc8\x35\x6a\xc1\x45\x01\x0a\x75\xc5\x8d\x6b\x9e\x01\x26\x32\x52\xf2\x8a\x5b\x66\xfd\xe7\x17\x72\x22\x72\x11\x13\xa2\x58\xba\x72\x20\x15\xe3\x82\x10\x5e\x29\xa9\x2d\x04\xa4\x47\xf3\xca\x52\xd2\xa3\xd2\xb8\xdf\x8a\xd9\x65\xec\xba\xec\xfe\x71\x07\x96\x57\x48\x09\xe9\xd1\xd5\x07\x13\x71\x19\xaf\x4a\x59\xc4\xeb\x2b\x4a\x7a\xaa\xac\x0b\x2e\x98\xe2\x70\xb0\xd5\x0b\x2c\xd1\xc6\x6a\x55\xc4\x4c\x71\x13\x67\xb8\xe6\x29\x36\x8e\xf1\xfa\x72\x81\x96\x5d\x52\xd2\xcb\xaa\xa3\x90\x66\x74\x7d\xd4\x1e\x21\xad\xda\xd8\x8a\x09\x56\xa0\xa6\xa4\x4f\x48\x2a\x85\xf1\x94\x35\x1a\x59\xeb\x14\xa7\xac\x42\x18\x02\xc5\x47\x56\xa9\x12\xa3\x54\x56\xf1\xde\xe6\x23\xe2\x18\x8c\xad\x17\xa3\xb2\x94\xe9\xa7\x5a\xa4\x90\x6a\x64\x6e\x4d\x98\xc8\x40\xa3\xad\xb5\xab\x9f\xb3\xfa\xda\x81\x46\xa3\x64\xb7\x07\x5c\xa8\xda\xee\x3d\xd0\x8f\x1c\x1a\x4b\x72\x87\x75\x84\x1c\x68\xb8\x38\x14\x24\x1a\xb5\x01\xb3\xc6\x3f\x84\x0c\xd7\x06\x2a\xa6\x7e\xb8\xa1\x12\xc5\xcf\x67\xd7\x89\x97\xd9\x87\xe0\xd5\xf0\x86\x4e\x08\xa8\xb5\xd4\x7d\x78\x22\xbd\x35\xd3\x07\x9a\x06\xfe\x1c\x43\x7a\x4e\xc3\xaf\xd0\x71\x86\xc1\x10\x34\x13\x05\x82\x8e\xc6\x52\xb8\x75\x44\xdd\x72\x33\x0e\xb4\x77\x10\x3e\x18\xc2\xf9\x33\xe8\xc1\xf9\x14\xfd\x69\x47\x7a\x9d\x04\x0e\x28\x99\x74\xd2\xe0\xef\x56\x98\x49\x26\x4d\x86\x5e\x86\xeb\x10\xe4\xca\x39\xb9\x6a\xfc\x38\x84\xfd\x74\x56\x9e\xc3\x99\x5c\x35\x9e\xbd\xa6\x33\x20\x78\x19\x42\x5e\xd9\xe8\xda\xa9\xcf\x03\xca\xc5\x9a\x95\x3c\x3b\xee\x98\x47\x69\xae\x1f\x21\xc5\x3b\x7c\xe4\xc6\xed\x3a\x34\xf3\x03\x6f\x0c\xed\x50\xec\x3b\xfc\x1d\x69\x33\x66\xb8\x8e\xbe\x20\x2b\xed\x12\xce\x86\x9d\x5a\x36\x67\xdb\x7f\xc8\xa6\x16\xcb\x16\xa7\xa1\x32\xf8\x33\x97\x38\x6e\x27\x13\x72\xb6\xc2\x3d\x75\xb7\x86\xce\x9a\xbb\x5d\x74\x75\xdb\xef\x65\xf4\x6f\xc9\x45\x40\x63\x5b\x29\xea\x67\x2b\x72\x68\x7b\xa0\x12\x99\x80\x9c\x6b\x63\x5b\x99\xa8\xb5\x8b\x96\x26\x9a\x61\x25\xd7\x38\x2a\xcb\xc0\x63\xf6\x3f\x7a\xdb\xd9\xd0\x89\xfb\x8b\xda\x9c\xf1\xb2\xb9\x4f\xdb\x04\x27\x44\x21\xd7\xb2\x02\xa5\x71\xcd\x65\x6d\x40\xd7\xa2\xd5\x8b\x5a\x77\x94\xe6\x61\x87\xce\xd8\x6b\x6e\xb9\x74\xc8\xb6\x84\xce\xcf\xe1\x4c\x9a\x28\x31\xd7\xae\xa7\x81\x03\xfa\xff\x49\xbe\x5e\xce\xd7\x39\x45\xe3\x52\x1a\x0c\x9a\x12\xee\x57\x21\xfa\x8f\xac\x85\x35\x30\x74\x8f\x0b\x8a\x2c\x38\x31\x84\xdd\x45\xf1\x47\x0d\xb7\xc3\xce\xdc\x31\xbb\x1c\x80\x17\x17\x7a\xcb\x17\x69\x6c\x73\xe8\x7f\x9e\x2d\x3b\x47\x66\xd7\x59\x43\xd3\x5d\xd3\xfd\xae\xbf\x20\xf2\x9a\x57\x78\xb8\x1c\xfa\xc4\xcb\x6b\x4b\x75\xae\x9f\x3d\x04\x2f\xc9\x8e\x34\x97\x98\x7b\x0d\x02\x5f\x56\x7f\x45\x0d\x86\xf0\xe3\xe7\xc5\xe9\xed\xe4\x84\x3d\x25\x93\x01\xd0\x09\xae\xdf\x5d\xd2\x10\x9a\x0d\x19\xbc\xdc\x99\x5d\x78\xe4\x7b\xf5\x37\x5f\x47\xb1\x31\xcc\x65\xba\x32\x13\xbe\x9f\x8d\xcf\x68\x51\xac\x03\x7a\xf7\xf5\xe1\x73\x32\xfd\x35\xbf\x1d\xdf\xfc\x9a\x24\x33\xda\x27\x3d\xf7\x04\x45\x89\xc8\x65\x1e\xd0\xe3\xd8\xb6\xbd\xc7\x87\x7d\xe2\xe6\xea\x24\xc9\x70\x08\x94\xfa\x69\xf2\x68\xfb\x01\xba\xae\x94\xdd\x9e\xf8\xba\x94\x6d\x19\x1d\xdf\x9e\x91\xe9\x0a\x7d\x23\x1d\xd5\x13\xdc\xb7\x40\xe3\x4c\x45\x14\xde\xfa\xc1\x9c\x2b\xcd\x85\xcd\x03\xfa\x26\xa3\x21\xb8\xb7\x34\x9a\xca\x4d\xd0\x8f\x1e\x04\x7f\x0c\xfa\x6e\xe2\x32\x75\xe9\xef\xc4\x2a\x9a\xe2\xa6\xa9\xf7\x5d\x83\x69\xeb\x45\xe0\xba\xe2\xbe\xb6\xec\x53\xfa\xfe\x1e\x1e\xbf\x10\x72\x56\x9a\xfd\x9f\x46\x68\xbb\x5e\x99\xba\x8c\xe6\x96\x69\x1b\xbc\xdc\x72\xc5\x04\x4f\xfd\x3e\x11\xaf\xc8\xfb\xa2\x7d\x7e\xcc\x8e\x9e\xb6\x17\xb0\x33\x2c\xb8\xb1\xa8\x83\xe7\x8e\xde\x34\xef\xf6\xdc\xf3\x3c\xe5\x78\x3a\x4e\x8d\xbc\xbb\x57\x2f\xa0\x0e\x35\x5f\x6b\x2c\x31\xb5\xf0\xb4\x23\x3b\xf2\xbf\x00\x00\x00\xff\xff\x4f\xbe\x49\x55\xfc\x0a\x00\x00") + +func testImagesSampleDevicePluginSampledevicepluginGoBytes() ([]byte, error) { + return bindataRead( + _testImagesSampleDevicePluginSampledevicepluginGo, + "test/images/sample-device-plugin/sampledeviceplugin.go", + ) +} + +func testImagesSampleDevicePluginSampledevicepluginGo() (*asset, error) { + bytes, err := testImagesSampleDevicePluginSampledevicepluginGoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/sample-device-plugin/sampledeviceplugin.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\x28\x28\xca\x2f\x4b\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\xc8\x2a\x4e\x4c\x2b\x4a\xcc\x4b\x05\x73\x72\xb3\x4b\x73\x13\x4b\x12\xd3\xb9\x00\x01\x00\x00\xff\xff\x2d\x3f\xb3\x41\x25\x00\x00\x00") + +func testImagesVolumeOwnersBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeOwners, + "test/images/volume/OWNERS", + ) +} + +func testImagesVolumeOwners() (*asset, error) { + bytes, err := testImagesVolumeOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeGlusterBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x4d\x4b\x4d\xc9\x2f\x4a\xb4\x32\xb2\xe0\x82\x8a\x16\xe5\x9a\x99\xd8\x82\xc9\x32\x0b\x7d\x74\xd9\x82\x82\x64\x33\x93\x9c\x54\x5b\x28\x8d\x24\x0f\x08\x00\x00\xff\xff\xc6\xfc\xc2\x5e\x54\x00\x00\x00") + +func testImagesVolumeGlusterBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeGlusterBaseimage, + "test/images/volume/gluster/BASEIMAGE", + ) +} + +func testImagesVolumeGlusterBaseimage() (*asset, error) { + bytes, err := testImagesVolumeGlusterBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/gluster/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeGlusterDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x61\x6f\xb3\x36\x10\xc7\xdf\xfb\x53\xfc\x15\xa6\x6a\x93\x12\x48\xa3\xac\xd3\xb6\x57\x34\xa1\x2d\x6a\x0b\x1d\x24\xeb\xa2\x69\xaa\x1c\xb8\x80\x25\x63\x53\xdb\x24\xcd\xb7\x9f\x20\xe9\xba\x3c\x0f\xaf\xf0\xdd\xef\xee\x7e\x3e\x7b\x58\xe8\xf6\x68\x44\x55\x3b\xcc\xa6\xd7\x37\x58\xd5\x84\xc7\x6e\x4b\x46\x91\x23\x8b\xb0\x73\xb5\x36\xd6\x67\x1e\xf3\xf0\x24\x0a\x52\x96\x4a\x74\xaa\x24\x03\x57\x13\xc2\x96\x17\x35\x7d\x66\xc6\xf8\x93\x8c\x15\x5a\x61\xe6\x4f\xf1\x63\x0f\x8c\xce\xa9\xd1\x4f\xbf\x33\x0f\x47\xdd\xa1\xe1\x47\x28\xed\xd0\x59\x82\xab\x85\xc5\x4e\x48\x02\x7d\x14\xd4\x3a\x08\x85\x42\x37\xad\x14\x5c\x15\x84\x83\x70\xf5\x30\xe6\xdc\xc4\x67\x1e\x36\xe7\x16\x7a\xeb\xb8\x50\xe0\x28\x74\x7b\x84\xde\xfd\x9f\x03\x77\x83\x70\xff\xd5\xce\xb5\xbf\x05\xc1\xe1\x70\xf0\xf9\x20\xeb\x6b\x53\x05\xf2\x04\xda\xe0\x29\x5e\x44\x49\x1e\x4d\x66\xfe\x74\x28\x59\x2b\x49\xd6\xc2\xd0\x7b\x27\x0c\x95\xd8\x1e\xc1\xdb\x56\x8a\x82\x6f\x25\x41\xf2\x03\xb4\x01\xaf\x0c\x51\x09\xa7\x7b\xdf\x83\x11\x4e\xa8\x6a\x0c\xab\x77\xee\xc0\x0d\x31\x0f\xa5\xb0\xce\x88\x6d\xe7\x2e\x96\xf5\x69\x27\xec\x05\xa0\x15\xb8\xc2\x28\xcc\x11\xe7\x23\xdc\x86\x79\x9c\x8f\x99\x87\xd7\x78\xf5\x90\xae\x57\x78\x0d\xb3\x2c\x4c\x56\x71\x94\x23\xcd\xb0\x48\x93\x65\xbc\x8a\xd3\x24\x47\x7a\x87\x30\xd9\xe0\x31\x4e\x96\x63\x90\x70\x35\x19\xd0\x47\x6b\x7a\x7f\x6d\x20\xfa\x35\x52\xd9\xef\x2c\x27\xba\x10\xd8\xe9\x93\x90\x6d\xa9\x10\x3b\x51\x40\x72\x55\x75\xbc\x22\x54\x7a\x4f\x46\x09\x55\xa1\x25\xd3\x08\xdb\x3f\xa6\x05\x57\x25\xf3\x20\x45\x23\x1c\x77\x43\xe4\xbb\x4b\xf9\x8c\x85\xd9\x7d\x6f\x1f\xc5\xcf\xe1\x7d\xc4\xee\xb2\xf4\x19\x3f\x7c\x9d\xd9\x22\x4b\xf3\xfc\xed\x76\x1d\x3f\x2d\xdf\x16\xe9\xcb\x06\xef\xd4\x74\x93\x3f\xa2\xe7\x75\x98\x2d\x1e\x26\xb6\x6f\x5d\x20\xe8\xac\x09\xb6\x42\x05\x8c\x65\xeb\x04\xc7\xae\xc1\xe4\x08\xa1\xac\xe3\x52\xa2\xd6\xd6\x29\xde\x10\x2a\xd9\x59\x47\x66\x67\x27\x96\xcc\x9e\x0c\xae\xae\x06\xb6\x90\xc4\x15\xb8\x94\x2c\x5c\x2e\x3f\xa9\xd2\xdf\x6b\x89\x80\x5c\x11\xfc\x57\x17\x0c\x80\xe9\xd4\xdb\x39\xe4\xdb\xfa\x34\x5c\xea\x82\xcb\x93\x42\x8f\x08\x55\xd2\x87\x5f\xbb\x46\x22\xd8\x6b\x19\x0c\x5a\x45\xdd\xe8\x12\x37\xf3\xf9\x29\xf6\xc5\x30\x16\xfd\xf5\x92\xe6\x11\x66\xf3\xe9\xf4\x97\xc0\x15\x2d\xe6\xbf\x5e\xff\x3c\xeb\xff\x18\x8b\x92\x55\xb6\x79\x49\xe3\x64\x85\xbf\x47\xdf\x0c\xbb\x54\x19\xfd\xc3\xfe\x0d\x00\x00\xff\xff\x0d\x00\xfd\xb0\x9b\x03\x00\x00") + +func testImagesVolumeGlusterDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeGlusterDockerfile, + "test/images/volume/gluster/Dockerfile", + ) +} + +func testImagesVolumeGlusterDockerfile() (*asset, error) { + bytes, err := testImagesVolumeGlusterDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/gluster/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeGlusterVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") + +func testImagesVolumeGlusterVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeGlusterVersion, + "test/images/volume/gluster/VERSION", + ) +} + +func testImagesVolumeGlusterVersion() (*asset, error) { + bytes, err := testImagesVolumeGlusterVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/gluster/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeGlusterGlusterdVol = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x90\x41\x4e\xc3\x30\x10\x45\xf7\x3e\xc5\x57\xb3\x01\xa9\x4e\x29\x82\x05\xf7\xe0\x02\xae\x3d\x49\x47\xb5\x3d\xd1\x78\x92\xaa\xb7\x47\x69\x05\x08\xa9\x20\xb6\x5f\x6f\xde\x1f\xfd\x0e\xef\x47\x6e\xe0\x86\x44\x43\x98\xb3\x61\xcc\x73\x33\xd2\xd4\x2f\x92\xf1\xc0\x35\xe6\x1e\x51\x4a\xa1\x6a\x94\x20\xb3\xe1\x10\x1a\xf9\x49\xd4\x1e\xb7\xae\xc3\x99\xed\x88\x90\x12\x25\x6c\x74\x8a\x3e\xcc\x76\xf4\x21\x67\x39\x7b\xae\x8d\xe2\xac\x04\xa9\x1b\x98\xe0\x9a\x22\x4a\xad\x14\x8d\xa5\xba\x0e\x83\x4a\x41\x95\xea\x27\xe5\x85\x33\x8d\x94\xb0\xaa\x5b\xef\xdc\x22\x79\x2e\x84\x12\x6a\x18\x69\xed\x77\x00\x60\x97\x89\x50\xc6\x62\xbb\xcf\x4f\xaf\xb1\x4c\xab\x11\x67\xd1\x13\xd7\xd1\x27\x56\x8a\x26\x7a\xc1\x6e\x09\xba\xcb\x7c\xb8\x8b\x9b\x86\xda\xd6\x3e\x7f\xd5\x36\x89\x27\xb2\xad\xa6\x12\xee\x52\xfd\x0d\xe8\x4f\x44\x53\xc8\xbc\x90\x37\x2e\x84\xfd\xd3\x3f\x69\xae\x46\xba\x84\x8c\xe7\x3f\x0f\x94\x42\xf2\x43\xe0\xec\xb3\x8c\x90\x61\x70\xdd\x37\xfd\xb5\x3e\x5e\xde\xf6\xaf\x3f\x44\xbf\xcf\xef\xa8\x26\x7f\xdb\xd3\x7d\x04\x00\x00\xff\xff\xbe\xa1\x56\x52\xf3\x01\x00\x00") + +func testImagesVolumeGlusterGlusterdVolBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeGlusterGlusterdVol, + "test/images/volume/gluster/glusterd.vol", + ) +} + +func testImagesVolumeGlusterGlusterdVol() (*asset, error) { + bytes, err := testImagesVolumeGlusterGlusterdVolBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/gluster/glusterd.vol", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeGlusterIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xf2\x48\xcd\xc9\xc9\x57\x48\x2b\xca\xcf\x55\x70\xcf\x29\x2d\x2e\x49\x2d\x72\x0b\x56\xe4\x02\x04\x00\x00\xff\xff\xed\xdd\x63\xe1\x16\x00\x00\x00") + +func testImagesVolumeGlusterIndexHtmlBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeGlusterIndexHtml, + "test/images/volume/gluster/index.html", + ) +} + +func testImagesVolumeGlusterIndexHtml() (*asset, error) { + bytes, err := testImagesVolumeGlusterIndexHtmlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/gluster/index.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeGlusterRun_glusterSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x93\x5f\x6f\xdb\x36\x14\xc5\xdf\xf9\x29\xce\xa4\x3c\xc4\x43\x24\x65\x01\x82\x01\x2d\x0a\xcc\x8b\x3d\x4c\x68\x67\x03\x96\xbb\xa2\x4f\x03\x2d\x5d\x49\x44\x25\x92\x23\x2f\xad\x18\xc3\xbe\xfb\x20\xc9\xa9\x63\x64\x7a\x3c\xbc\x7f\x7e\xe7\x90\x8a\x7f\xc8\x82\x77\xd9\x41\xe9\x8c\xf4\x11\x07\xe9\x5b\x21\x62\x3c\x19\x7b\x72\xaa\x69\x19\x0f\xf7\x3f\x3d\x62\xdf\x12\x3e\x86\x03\x39\x4d\x4c\x1e\xcb\xc0\xad\x71\x3e\x15\xb1\x88\xf1\x49\x95\xa4\x3d\x55\x08\xba\x22\x07\x6e\x09\x4b\x2b\xcb\x96\x5e\x4e\xee\xf0\x27\x39\xaf\x8c\xc6\x43\x7a\x8f\xdb\xb1\x20\x3a\x1f\x45\x8b\xf7\x22\xc6\xc9\x04\xf4\xf2\x04\x6d\x18\xc1\x13\xb8\x55\x1e\xb5\xea\x08\xf4\x5c\x92\x65\x28\x8d\xd2\xf4\xb6\x53\x52\x97\x84\x41\x71\x3b\xad\x39\x0f\x49\x45\x8c\xaf\xe7\x11\xe6\xc0\x52\x69\x48\x94\xc6\x9e\x60\xea\xd7\x75\x90\x3c\x01\x8f\x5f\xcb\x6c\xdf\x65\xd9\x30\x0c\xa9\x9c\x60\x53\xe3\x9a\xac\x9b\x0b\x7d\xf6\x29\x7f\x5a\x6f\x8a\x75\xf2\x90\xde\x4f\x2d\x9f\x75\x47\xde\xc3\xd1\xdf\x41\x39\xaa\x70\x38\x41\x5a\xdb\xa9\x52\x1e\x3a\x42\x27\x07\x18\x07\xd9\x38\xa2\x0a\x6c\x46\xde\xc1\x29\x56\xba\xb9\x83\x37\x35\x0f\xd2\x91\x88\x51\x29\xcf\x4e\x1d\x02\x5f\x85\xf5\x42\xa7\xfc\x55\x81\xd1\x90\x1a\xd1\xb2\x40\x5e\x44\xf8\x75\x59\xe4\xc5\x9d\x88\xf1\x25\xdf\xff\xbe\xfd\xbc\xc7\x97\xe5\x6e\xb7\xdc\xec\xf3\x75\x81\xed\x0e\x4f\xdb\xcd\x2a\xdf\xe7\xdb\x4d\x81\xed\x6f\x58\x6e\xbe\xe2\x63\xbe\x59\xdd\x81\x14\xb7\xe4\x40\xcf\xd6\x8d\xfc\xc6\x41\x8d\x31\x52\x35\x66\x56\x10\x5d\x01\xd4\x66\x06\xf2\x96\x4a\x55\xab\x12\x9d\xd4\x4d\x90\x0d\xa1\x31\x47\x72\x5a\xe9\x06\x96\x5c\xaf\xfc\x78\x99\x1e\x52\x57\x22\x46\xa7\x7a\xc5\x92\x27\xe5\x8d\xa9\x54\x88\x55\xbe\xfb\x10\xdd\xdc\xf6\xdf\x98\x7a\x8b\xa4\x5a\x44\x42\xd4\x41\x97\x63\x07\x3c\x4b\xc7\xb7\x0b\xf1\x8f\x18\x2f\xa5\x37\x41\x33\x12\x06\xf7\xb6\xf6\x60\xf2\x8c\xe8\x66\x95\xef\xa2\xe9\xb8\x6c\x7b\x53\xe1\xe7\xc7\xc7\x2b\xd1\x22\x3b\x9a\x2e\xfb\x71\x16\xb3\x59\x9d\xde\xb4\x1f\x1f\x75\xd3\x05\xcf\xe4\x2a\x24\x16\x99\x0b\x17\x21\xb5\xaa\x9a\x6a\xcf\x02\x8e\xa6\x0b\x3d\xa1\x74\x24\x99\xa6\xe5\x7f\x1d\x4d\x87\xe8\xe6\xb6\x35\x9e\xb5\xec\x09\x89\x5a\xbc\x9b\x56\x8f\x59\x95\xf4\x7f\xed\x93\xa3\xef\xdd\xe2\xdf\x2b\xb3\xc6\x7e\xf7\xfa\xd2\x96\x24\xbd\xa9\xe8\x83\x2f\x9d\xb2\x7c\x19\x62\xec\x85\xe0\xb2\xeb\x9b\xea\x26\xa0\x52\xf2\x5b\x33\x8b\xd9\x7a\x98\x53\x7c\x15\x91\xeb\x91\xb8\xfa\xb5\x42\xcf\x8a\x71\x3f\xc2\x09\x76\xd2\xce\xfb\xf6\xeb\xdd\x1f\x42\xcc\xfc\xd1\xcd\x2f\x91\x10\x43\x3b\xfe\x83\xec\x02\xbd\x47\x65\xa6\x4e\xdf\x11\x59\x3c\x8a\xca\x68\x12\xe2\xbf\x00\x00\x00\xff\xff\x0e\x77\xa5\x03\x3d\x04\x00\x00") + +func testImagesVolumeGlusterRun_glusterShBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeGlusterRun_glusterSh, + "test/images/volume/gluster/run_gluster.sh", + ) +} + +func testImagesVolumeGlusterRun_glusterSh() (*asset, error) { + bytes, err := testImagesVolumeGlusterRun_glusterShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/gluster/run_gluster.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeIscsiBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x4d\x4b\x4d\xc9\x2f\x4a\xb4\x32\xb2\xe0\x82\x8a\x16\xe5\x9a\x99\xd8\x82\xc9\x32\x0b\x7d\x74\xd9\x82\x82\x64\x33\x93\x9c\x54\x5b\x28\x8d\x24\x0f\x08\x00\x00\xff\xff\xc6\xfc\xc2\x5e\x54\x00\x00\x00") + +func testImagesVolumeIscsiBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeIscsiBaseimage, + "test/images/volume/iscsi/BASEIMAGE", + ) +} + +func testImagesVolumeIscsiBaseimage() (*asset, error) { + bytes, err := testImagesVolumeIscsiBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/iscsi/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeIscsiDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x91\xc1\x6e\xdb\x38\x10\x86\xef\x7c\x8a\x1f\xd6\x22\xd8\x05\x6c\x29\x9b\x43\x0f\xed\x49\xb1\x9d\x44\x48\x22\xa5\x92\xdd\xc0\x28\x0a\x83\xa6\xc7\xd2\xa0\x34\xa9\x90\x54\x1d\xf5\xe9\x0b\xd9\x09\xda\xb4\xe5\x8d\x9c\x7f\x3e\x7e\x1c\x46\x98\xda\xb6\x77\x5c\x37\x01\x17\xe7\xff\xbf\xc3\xa2\x21\xdc\x76\x1b\x72\x86\x02\x79\xa4\x5d\x68\xac\xf3\xb1\x88\x44\x84\x3b\x56\x64\x3c\x6d\xd1\x99\x2d\x39\x84\x86\x90\xb6\x52\x35\xf4\x5a\x19\xe3\x13\x39\xcf\xd6\xe0\x22\x3e\xc7\xbf\x43\x60\xf4\x52\x1a\xfd\xf7\x41\x44\xe8\x6d\x87\xbd\xec\x61\x6c\x40\xe7\x09\xa1\x61\x8f\x1d\x6b\x02\x3d\x2b\x6a\x03\xd8\x40\xd9\x7d\xab\x59\x1a\x45\x38\x70\x68\x8e\xd7\xbc\x40\x62\x11\x61\xf5\x82\xb0\x9b\x20\xd9\x40\x42\xd9\xb6\x87\xdd\xfd\x9a\x83\x0c\x47\xe1\x61\x35\x21\xb4\xef\x93\xe4\x70\x38\xc4\xf2\x28\x1b\x5b\x57\x27\xfa\x14\xf4\xc9\x5d\x36\x9d\xe7\xd5\x7c\x72\x11\x9f\x1f\x5b\x96\x46\x93\xf7\x70\xf4\xd4\xb1\xa3\x2d\x36\x3d\x64\xdb\x6a\x56\x72\xa3\x09\x5a\x1e\x60\x1d\x64\xed\x88\xb6\x08\x76\xf0\x3d\x38\x0e\x6c\xea\x31\xbc\xdd\x85\x83\x74\x24\x22\x6c\xd9\x07\xc7\x9b\x2e\xbc\x19\xd6\xab\x1d\xfb\x37\x01\x6b\x20\x0d\x46\x69\x85\xac\x1a\xe1\x32\xad\xb2\x6a\x2c\x22\x3c\x66\x8b\x9b\x62\xb9\xc0\x63\x5a\x96\x69\xbe\xc8\xe6\x15\x8a\x12\xd3\x22\x9f\x65\x8b\xac\xc8\x2b\x14\x57\x48\xf3\x15\x6e\xb3\x7c\x36\x06\x71\x68\xc8\x81\x9e\x5b\x37\xf8\x5b\x07\x1e\xc6\x48\xdb\x61\x66\x15\xd1\x1b\x81\x9d\x3d\x09\xf9\x96\x14\xef\x58\x41\x4b\x53\x77\xb2\x26\xd4\xf6\x1b\x39\xc3\xa6\x46\x4b\x6e\xcf\x7e\xf8\x4c\x0f\x69\xb6\x22\x82\xe6\x3d\x07\x19\x8e\x27\x7f\x3c\x2a\x16\x22\x2d\xaf\x07\xfb\x79\x76\x9f\x5e\xcf\xc5\x55\x59\xdc\xe3\x9f\x9f\x7b\x31\x2d\x8b\xaa\x5a\x5f\x2e\xb3\xbb\xd9\x7a\x5a\x3c\xac\xf0\x44\xfb\x6e\xf2\x71\x7e\xbf\x4c\xcb\xe9\xcd\xc4\x0f\x68\x85\xa4\xf3\x2e\xd9\xb0\x49\x84\x28\x97\x39\xfa\x6e\x0f\x36\x3e\x48\xad\x31\xe9\x11\xa4\xab\x29\x28\xcd\x38\x3b\x3b\xd6\x94\x26\x69\x20\xb5\x16\xe9\x6c\x06\xd7\x99\x35\x7b\xe5\x79\x7d\x0a\xc6\xbe\x39\x01\xb5\x55\x52\x9f\xb0\x43\x6e\xa3\xad\xfa\x1a\x07\xe9\xe2\xfa\x3b\x12\x21\xe6\xf9\xa2\x5c\x3d\x14\x59\xbe\xc0\xe7\xd1\x6f\x0d\x7f\x61\x8e\xbe\x88\x1f\x01\x00\x00\xff\xff\x28\x6d\xd2\xab\x38\x03\x00\x00") + +func testImagesVolumeIscsiDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeIscsiDockerfile, + "test/images/volume/iscsi/Dockerfile", + ) +} + +func testImagesVolumeIscsiDockerfile() (*asset, error) { + bytes, err := testImagesVolumeIscsiDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/iscsi/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeIscsiVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd2\x33\xe4\x02\x04\x00\x00\xff\xff\x70\x6a\x3d\x6f\x04\x00\x00\x00") + +func testImagesVolumeIscsiVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeIscsiVersion, + "test/images/volume/iscsi/VERSION", + ) +} + +func testImagesVolumeIscsiVersion() (*asset, error) { + bytes, err := testImagesVolumeIscsiVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/iscsi/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeIscsiBlockTarGz = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xdd\x79\x58\x53\x67\xbe\x07\xf0\x28\x2a\x3a\xb6\xd2\xd6\x8e\xd6\x52\xc5\xd6\x05\x2b\xe2\x52\xab\x28\x08\xb8\x4c\x55\x44\x8c\xcb\x54\x54\x36\xa9\x28\x6a\x59\x5c\x58\x15\x12\x2b\x55\x3a\xb6\xb2\xa5\x82\x82\x24\x76\x0c\x64\x54\x10\x05\x25\xc8\x16\x94\x51\x44\x96\x68\x82\x06\x12\x11\x14\x25\x1e\xd9\x44\x22\x09\x21\xcb\x7d\xea\x5c\xdf\x73\xef\xf3\xdc\x79\x9e\xb9\x73\x6f\x27\x9d\xfa\xfd\xfc\xf9\x3b\xe7\xfd\xfd\x7e\xef\x9b\xf7\x9c\xf3\x8f\xbe\x58\x7d\x3f\x94\x91\x50\x9c\xe0\xc9\x30\x6b\x57\x44\x16\x2b\xbf\xf4\xaa\xe8\x2e\x7a\xeb\xcf\xdf\x9d\xd8\x96\x79\x65\xec\x1e\x57\xdb\x8f\xfc\x3c\xff\xec\x96\x97\xe4\x79\xcb\x71\x4e\x4a\xf9\xd9\xa7\x33\x4f\x57\x6f\xde\xbe\x75\x4a\x50\xc3\xd2\x73\xc9\xb6\xe6\xe1\xb6\x29\xd3\x6c\xab\x0e\x7d\xa6\xc8\xab\xa9\xcb\x6a\x6f\xde\x94\xea\xfa\xc5\x9f\x6c\x4a\x9c\xa7\x38\xae\x1e\x53\x75\x73\x8a\xb8\x87\x6a\x19\xac\xde\x2b\x12\x59\xed\xed\x8a\x89\xf4\xe9\xf3\x8f\x6b\x2c\x51\x17\xc4\x06\x44\x05\x75\xfc\xe0\xd1\x2e\x0f\xbd\xda\xd4\xf2\x09\x5b\xf4\xe4\xbc\x17\x4f\xa3\xf9\x6e\x42\x78\x87\x3c\xf4\xaf\x89\xc2\x82\x86\x9a\x17\x7d\x13\xc2\x1e\xe8\x92\xed\x9a\xb6\x3b\x38\x57\xf8\xc8\x06\xaf\x6a\x14\x1a\x8f\xaf\xdb\xa4\x98\xb7\xb5\xeb\x81\x9e\x47\x85\x1a\x1b\xf6\x1e\x30\x06\x8f\x4b\x7c\x90\x7f\x65\xf7\xe3\xbb\x73\xe7\x72\x0d\xf2\x9a\xa3\x7b\x99\x8a\xfa\xfa\xe2\xa7\x3d\xbd\xdd\xb5\x0b\xe6\x95\xe8\xaa\xfb\xd7\xa7\x59\x2a\x79\x6c\xa1\x3a\xd0\xfb\x79\x61\xe1\x8c\x28\xea\x50\x57\x51\x94\xbd\x63\xe3\xd4\xc0\x8c\x8e\x90\x8a\xf0\x93\xdd\xcf\xac\x17\xa8\x9f\xb6\x39\xb5\x0c\x89\xdf\x5f\x3d\xc6\x7f\xc1\x8b\x30\x9e\x76\xeb\xfd\x10\x63\xa5\x45\xf6\x08\x76\x73\xfa\x38\xd5\x85\xd8\xae\x62\xf1\x9d\xf0\x82\x1e\xb6\xb2\xa8\x41\xb7\xd2\xc2\xea\x72\x77\xd2\xb9\x93\x3d\xad\x8a\x93\x6a\x7e\x4a\xc9\xee\xa6\xb4\x5a\x07\x75\xe3\xcb\x47\x4b\x9c\xbb\xdb\xff\xdc\x54\x61\xe4\x9b\x45\x2f\x8a\x8d\x9a\xce\x9a\xa5\x99\x16\xa8\xb4\x7b\x1a\x17\xb2\x5a\x7b\xfb\xf2\xb8\xfd\xcf\xef\xdd\x88\x63\xb2\x58\x1b\xb8\x82\x18\xc9\xc7\xb2\xf3\xbc\x81\x3c\x5d\x54\xcf\xbd\x86\x08\xf9\xaa\x58\x6f\xa5\x94\x17\x6c\xc5\x11\xf3\x63\xe2\xe6\x97\xf5\x33\xc5\xfd\xd2\x5e\xca\x3c\xc2\xb8\xb1\x6f\xa5\xfd\xd3\x2c\xb3\x62\x63\x7b\xb1\x73\x20\x2f\xfa\x80\x9a\xf7\xf3\x2d\xb5\xf3\xcb\xfa\x7b\x44\xd9\x97\xd2\xa7\xf7\xea\x63\x03\x5b\xfb\x9b\xaa\xd5\xa2\xc8\x03\x5d\xce\x5d\x4c\x85\xb0\x54\xa3\x0e\xee\x5d\xc0\x54\xe8\x19\x62\xa6\xb8\xe7\x52\xb4\x76\x00\x37\x7e\x01\x53\xd1\xc2\x10\x8b\x6b\x7b\x2e\x45\xf7\x0e\xe0\x8a\x17\x30\x15\xd4\x0b\x05\xcf\x70\xf2\x72\xa0\xb0\x4e\xba\x3c\xaf\x53\xac\x61\xff\x54\xa6\x4c\x1c\x6b\xfb\xf2\x73\x49\x96\xc2\xe0\xfb\x7b\xf3\xcb\x3f\xc7\x83\xfa\x63\xbf\xf4\xcc\xcc\xe0\x2e\x4d\x0d\x55\x38\x67\x3d\x6a\x4e\xde\xf7\xe1\x8e\x7b\x81\xc6\x0b\x47\xaa\xf2\xc9\xe5\xf3\xe4\x72\x02\x7d\x59\xf8\xfa\xf2\x47\xf2\xb5\xcc\x09\x35\x85\x1d\x56\xeb\x77\x1f\x22\x97\x67\x6c\x3f\x23\x48\xdc\xd6\xd8\x6b\x71\xae\xe0\x2b\x57\xc7\xa3\x9f\xb7\xe5\xb3\x37\x5c\x1f\x4d\xa7\x3c\x43\x52\xde\x22\x0d\xf9\xd4\x91\x44\xc7\xe8\x44\x41\x24\xd1\x4e\x92\x28\xe5\x12\x49\x94\x4d\x12\x3d\xa3\x13\xd1\x1d\x1d\x25\x89\xbe\xa6\x8b\x9f\x23\x63\xe4\x64\x8c\x6c\xc7\xeb\x3a\xdb\x49\x2c\x96\xac\x50\xd4\x46\x52\x3b\xd4\xe3\xd9\x0e\xfe\x46\xa1\xbe\x7c\xea\x79\x19\x29\xa3\x27\x65\x2c\x49\x6b\xf7\x2f\x90\x32\x55\x64\x4c\x10\x3d\xc7\x16\x32\x26\x8d\x8c\x89\xfa\x82\xd4\x71\x27\xfd\x7e\xf4\x80\x8c\x91\x92\x31\xe9\xa4\xcb\x65\x74\xc5\x2c\x52\xf1\x26\xb9\xd1\x8b\xdc\x68\x17\x4c\x96\x92\x2e\x63\x4b\xb7\x76\xf7\x75\x99\xee\x2f\xe9\xe4\xf4\x12\x84\x92\x31\x32\xba\xdf\x40\x3a\x48\xdf\x19\x4d\x82\xd9\x74\x76\x29\xc9\xfe\x36\xc9\x2e\x0c\x7c\xdd\x91\xe6\x06\x69\x38\x78\x27\x09\xb6\x92\xa0\x82\x64\xff\xa8\x91\x24\xb2\xa5\x13\xd1\x53\x5b\x42\x8a\x8f\x25\xc5\x3b\xc9\xaa\x77\x67\x93\x31\x4d\xf7\xc8\xb2\x2a\x49\x9d\x22\x7a\x31\x2f\x93\xc5\x0c\x22\x63\xc2\xe9\x3a\xcb\x48\x1d\x47\x52\xa7\xb4\x84\x8c\xf1\x26\x63\xd4\xf4\x0e\x66\x92\x31\xe1\x74\x1d\x21\x19\xc3\xa2\xc7\x90\x3a\x11\x0b\x5f\x8f\xf9\x82\xc4\xe6\xd1\xcf\x6b\x3d\xe9\xbc\x65\xd3\xeb\x2e\xe2\xe8\x1b\x7f\x22\x37\xfe\x95\xdc\x68\x4e\x36\xd6\x82\xbf\x90\xcb\x7c\xfa\x32\x79\xb0\x17\xf0\x5f\x5f\xfe\x2a\x9c\x34\x5e\x49\x7a\xdc\x4f\x0a\xf6\xd2\x19\x2f\x91\x8c\xbe\xe4\x46\x01\x99\x6b\xfb\xd7\xaf\x3b\xab\x6f\x22\x8b\x4f\x3f\xd6\xe5\xf4\x42\xe6\x91\x3c\x97\x48\x67\xf4\x46\x5f\x90\x4b\x2e\x17\x91\x2e\x4a\x8b\x48\x90\x6e\x6d\x1c\xbd\xa9\x4b\xe8\x86\xe8\x29\x16\x92\x31\xb3\xc8\x65\x7f\xba\x4e\x3e\xb9\xbc\x9b\x5c\x8e\xa7\x7f\x9b\xc5\xa4\xf5\x91\x74\xeb\x39\x64\x8c\x0b\xbd\xd7\xc8\x74\xbb\xcd\x48\xd0\xb9\x9e\x04\x97\xd0\xc1\xfb\x64\x61\xb6\x91\xec\xf1\xa4\x23\xdd\x76\x3a\x48\x1e\x09\x5d\x04\x09\x32\xe9\x3b\xfd\x48\x90\x43\x9a\xe3\x4a\x48\xc9\x75\x74\x49\xfa\x89\xaa\x23\x8b\xcd\x23\xef\x43\x4d\x03\x1d\x24\xbf\x9f\xa6\x8f\x04\xef\x90\x86\xd7\x93\x8a\x52\xf2\x03\x70\xc9\xcb\xab\xfb\x07\x32\xc4\x9f\xde\x30\xf4\xbb\xb8\x81\x34\x24\x26\xb5\x23\x82\x48\xca\x1e\x92\x92\x45\xef\xea\xd1\xf4\xcc\xe8\x15\x3e\x48\xea\xd0\x1f\x9c\x62\x7a\xab\xa7\x90\x44\xde\x64\xad\xbb\xab\x48\x71\x11\xbd\x44\x49\x24\x51\x0a\x49\xa4\xa3\xb7\x6b\x0e\xf9\x01\x8a\xe9\x17\xaf\x8c\x74\xc4\x3a\x4d\x82\x4f\x48\xf6\x1c\xf2\x5d\x8c\xd8\x4a\x12\x9d\x23\x1d\xd5\x92\x77\x85\xa6\x86\x14\x6f\x22\x2f\xc4\x08\xfa\x1d\x1c\x4c\xf6\x70\x31\xfd\x36\x08\xa7\xd7\x88\x7e\xab\xa8\xe9\xa0\x88\x04\x2d\x48\xd0\x40\x7f\xa6\xe2\xe9\x60\x01\x09\x5e\x26\xbd\xb3\xe9\x95\x11\xd0\x41\xf2\x16\xed\x56\xd2\x41\xb2\x27\xba\x0b\xc9\x34\x44\x01\x64\x1a\xf4\x07\xc2\x92\x94\x7c\x40\x3f\x0d\xee\x24\xd1\x7f\xf9\x16\xb4\xd1\x89\xe8\xad\xa9\x20\x41\x3b\xb2\x1e\x3a\x2f\x92\x9d\x54\x9c\x27\x20\xf3\xa1\x3f\x1a\xc1\xe4\xeb\x13\xe1\x41\x86\x28\xc8\xef\xf7\x80\x9e\x44\x2d\x5d\x9b\x3c\xfc\x9a\x58\x12\x0c\xa7\x37\x02\xfd\x0e\xb2\xa2\x13\xd1\x9f\xbe\x07\x64\x8c\x9a\x1e\x43\xff\x2a\x3c\xfa\x07\xb8\x42\x82\x3e\xf4\xee\xa0\x3f\x97\x32\x92\x88\x4d\x3f\x93\xe4\x53\x71\x3d\x92\x4c\xd2\x8a\xac\x81\x66\x35\xb9\x1c\x4b\x7a\x73\xa2\x7f\xd3\x3b\x24\x25\xfd\x66\x39\xf9\xfa\xa9\x4a\xde\xbd\xc1\x7e\x72\xfa\xb1\xda\x33\x3f\xe7\x4c\x6b\x30\x6e\xeb\x15\x9d\xd0\x07\x73\xd7\xfd\x9c\x23\x3f\xd7\x98\xdd\xce\xb6\xe9\x6f\xb2\x17\xbc\x1a\xc3\x1e\xe6\xa5\x7c\xcf\xa0\x65\xc9\xcb\x32\x94\x3a\x1b\x6f\xb9\xcf\x55\x63\xbe\xab\x76\xa4\x85\x13\xdb\xb3\xe0\xc8\x6c\x1f\x56\x6b\xf4\x8c\x76\xf6\xde\xa3\x5d\x57\xdc\x0c\xb9\x2d\x8f\x58\xfa\x8e\xa3\xd9\xcc\xe2\x4c\x83\xe5\x43\x33\xc3\x92\x6f\xc4\xdf\x48\xad\xd2\x45\xed\xf7\x2f\xb6\x48\xd9\xc6\xc0\xa0\x80\xb1\xfb\x2a\x0d\x0d\x0e\xf9\x86\x1e\xd9\x2e\xca\xbe\x88\x65\x68\x2f\x2e\xe0\x39\x7b\x58\xba\x17\xdd\x6c\xab\xad\x12\xf3\x2c\x32\x2d\x32\x2c\x04\xf1\xfc\xf8\xcc\xf8\x8c\x1e\xbb\x19\x11\x7d\x37\xb6\xc9\x57\x28\x78\xd7\x45\x6a\xff\xc7\xea\xa6\x63\x73\xa7\x77\xca\x9a\xb2\xac\xbe\xe7\x69\xa6\x74\xcc\x2b\x73\x6e\x16\x35\x47\x76\xb1\x6b\xe6\x8c\x78\xb1\xff\x5d\xc6\x9b\xe4\x80\xd1\x3c\x5f\xf2\x93\x65\x9a\x47\xac\xb1\xa2\xc2\xc3\x23\x56\x59\x10\xe5\x54\x7a\xeb\xc6\xc7\x1e\x45\xea\x4e\x05\x9b\x33\x52\xcd\x2d\x54\x6a\xf6\xe5\x5f\xec\x2e\xec\x58\x32\x97\x29\xdf\xab\x1b\x26\x18\x6b\x38\xa5\xb7\xee\x2a\xfd\xa3\x28\xa4\xf9\xbd\xb3\xe9\x3e\x21\x46\x65\x10\x3b\xca\x58\xf6\x49\x98\xa7\xdc\x87\xb1\xeb\xcc\x45\xf6\x86\x14\x7d\x79\x61\xbb\xd5\xbd\xad\xc6\x0b\xd3\xfb\x63\x43\x1b\x9c\xb3\xaa\x0c\xbe\x5e\xbd\x16\x6d\xb9\xaf\x2e\x25\xe5\xcf\xb5\x9b\x9b\x6f\xe7\x64\x98\xd0\x7c\x2a\xe4\x44\xc8\xae\xc2\x80\x42\x4f\x7b\xbf\x96\x6b\xce\x13\x2e\x5c\xdc\x7d\x48\x35\x98\x3a\x42\x0d\x97\x1e\x93\x1c\x93\x8e\x0e\xac\xe3\xfd\x5e\x5e\xaf\x79\x14\x72\x57\x35\x89\xda\x49\x3d\xa3\x5c\xa5\x73\x24\x73\xa4\x97\x25\x97\xa5\xa1\x6b\x5d\x63\x33\x66\xb8\xca\xdc\x64\xae\x32\xa6\xdd\x72\xbb\x95\x3e\xdc\xa0\x1f\x83\x4e\x06\x25\x95\x7e\x12\xbd\xf5\xac\x73\xea\x2e\xe9\xa5\xd9\x63\x13\x83\x92\xe3\x56\x16\x49\x6a\xa4\xb6\x12\x5b\x69\xb6\xc4\x3d\xe3\xb4\xc4\x5d\x90\xe3\xe2\x93\x56\x3a\x3d\x3a\xba\x30\xb4\xd0\x4d\x7b\x38\x44\xa1\x3a\x4a\xa5\x49\xec\x04\x8a\x8c\xd3\x52\x21\x5f\x21\x70\xe0\x3b\x64\x3a\x64\x04\xbb\x35\x25\x77\x9e\xec\x4c\xea\x4c\xed\x4c\xee\xe4\x76\x26\x76\x9e\x28\x75\x6c\xb4\x69\x74\x68\xb4\x8e\x5e\x56\x18\x5c\xe8\x53\xc8\xde\xb7\xf0\x19\x75\x3c\x24\xc0\x7e\xfa\x58\xde\xaa\xe5\xd6\x99\xe6\x99\xe6\x19\x1c\x49\x8c\x74\xc9\x5a\xfd\x9a\x73\x1c\x29\xf7\x92\x9d\xe3\xe7\x8e\xd3\xd2\x93\x7a\x33\xf4\x54\x9d\xea\xb9\x2a\x9d\xba\xa4\xfa\x4e\x75\x53\xe5\x45\x15\x49\xd5\xfc\x65\x19\x5d\x6e\x02\xc1\x32\x41\x05\x7f\xb6\x64\x8b\xb4\x45\xd2\x22\x1d\x29\x19\x29\x55\x67\x58\x67\x74\x31\x9d\x13\x58\x33\xf5\xab\xb5\x0f\x43\xb6\x69\x13\x55\xa7\xa9\x0a\x49\xbc\x80\xb7\xdc\xf9\x04\xf7\x24\x37\x89\x35\x55\x1f\xb2\x6f\xa7\xf6\x84\x2a\x8f\x52\x4a\xc4\x82\xc4\xda\x15\x4c\x57\x26\x53\xbc\x5c\xbc\x52\xbc\x42\xbc\x4a\xec\x22\x76\x13\xbb\x8a\x12\x58\xb3\x1c\x9d\x4b\xc6\x97\xcc\x2c\x99\xa2\x5f\xbb\x6f\xb7\xf6\x89\xca\x86\x9a\x44\x65\x50\xee\xd2\x9c\x8c\x94\x0c\x1f\xa6\x28\xd1\x9b\xeb\x9d\xe8\x7d\xc2\xfb\x58\xed\x2a\xd1\x09\x96\x4d\x89\xbd\x3e\x6c\x9f\x9b\x36\x5d\x55\x44\xa9\x25\x5d\x02\xe7\xe5\xec\xe3\x86\x29\xfa\xdd\xfb\x02\xb5\x1c\x95\x80\x12\x4b\x78\x02\xd1\xf2\x1c\x57\xf6\x09\x6f\xde\x83\x84\x07\xc7\x0d\x53\x4b\x3e\xd5\x87\x6a\xd3\x54\x42\xaa\x86\xea\x92\xac\x54\xf2\x85\x7c\x61\xa6\x30\x43\x28\x08\xe7\x87\x67\x8a\x98\xc6\x84\x07\xc7\x1e\xa4\x1b\x66\x95\x58\x97\xd8\x95\xcc\x28\x71\xd6\xaf\xd3\x2a\x55\x33\xa8\xfb\xaa\x1c\xaa\x49\x62\x2e\x89\xa4\x62\xa8\x25\x54\x39\x35\x81\x3a\x4d\x6d\xa1\x74\x97\x12\x1b\x83\x83\xee\x99\x7b\x74\xc9\x75\x9a\x2b\xdd\x87\x63\x9d\x32\x33\x0d\x2e\x23\x4a\xab\x2d\xdb\x2a\xca\x07\x2b\xb2\x94\xfd\xab\xea\xa3\x25\xdc\x75\xcc\xfe\xba\x94\x01\xc6\xd8\x93\x85\xca\x82\x92\xfd\xab\x16\xec\x10\x0f\xab\x70\x6e\xae\x3b\xdd\x3b\xae\xbf\x79\x64\x9c\xc2\x78\x60\x5d\x9c\x7d\xa8\xb8\x73\x4b\x9c\xa3\x6f\xb8\xd3\x15\xe3\x5f\xa2\x1d\x66\x74\xe4\xbc\x59\x8f\x31\xfc\x27\x8d\x6e\x8f\x6a\x58\x51\x78\x57\xa0\x35\x37\x57\xfd\x38\x4c\x52\xda\xd2\x9b\x1e\x72\x33\x43\x3f\x78\x80\xa9\x3b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xbb\x74\x0e\x0e\x2f\x73\x3e\xfc\xe2\xfd\x65\x03\x22\xb6\x05\x1f\x3e\xe0\xb2\xc3\xb7\x85\x37\x5e\x33\x70\x6e\xd8\x8d\x15\xc3\x1d\x3c\xbe\x7f\x3c\x26\xa0\x6e\xf1\x90\x94\xf1\x1b\x3a\x26\x4c\x3c\x75\xc8\x62\xf3\xc7\x1b\xa6\xd5\x7b\x7c\x7f\xa8\x60\xfc\xdc\x51\x73\x7f\xf7\xe9\xb7\x2f\xbf\x5d\x53\x9f\xe0\xf9\xf1\x20\xaf\x84\x2e\x8f\x11\xe5\x25\xfe\xac\x99\xa3\xc3\x86\x98\x7a\x4a\x00\x26\x73\x80\x13\x99\x10\xb5\x33\xed\x9c\x32\xb5\xb5\x4f\x91\xdf\xc7\x12\xed\x90\x5f\x37\x48\x12\x2a\x9f\x5d\x38\x59\xcc\xbd\x1f\x98\xda\xa7\xab\x95\x3d\x2c\xf5\x75\xd4\x38\x0a\x93\x55\x1b\xbd\xaa\x42\x7f\xfc\xf1\x71\xaf\xb2\x3b\xcd\x7a\x46\x90\x17\x2b\x6c\xab\xb2\x3b\x42\xf7\xbc\xd5\xc7\xde\xad\x5f\xf0\x62\x4d\xcf\x8b\xf6\xf6\xf2\xa3\x7a\x41\xce\x83\xc6\xfd\x22\x63\x47\xd5\xd5\x9a\x36\x51\xe1\xf5\xbd\xba\x3c\xf3\x83\x93\x6c\xfa\x62\xce\x4f\xf4\x7a\xd1\xa2\xab\x7d\xf6\x97\x8d\xf3\xef\x07\xf3\x99\x85\x8f\xab\x0f\xc5\xe4\x94\x3d\x2c\x6d\xac\x76\xe0\xfe\xe8\xa7\x7f\x74\xa7\x34\xc0\xdf\x9a\xca\xb7\xe9\x89\x6e\xe5\x48\xdc\x5b\xd5\xb9\x9c\x90\xfd\xc7\xfa\x76\xb4\x72\x3e\xcb\xae\x16\xe7\x72\x42\xf2\x6e\x45\xb1\x4e\xf3\x27\x56\xd4\x06\x5f\x9a\xcf\x4e\xeb\x11\x1e\xeb\xf1\x77\xfa\x34\xad\x42\x2c\xf4\xa0\x38\xb9\x5f\x52\xfd\x2a\x17\xca\x46\x1f\xa4\xe5\xb7\xaf\xd7\xee\xd0\xf2\x57\xda\xe8\x2b\x54\x2e\x2e\xf7\x6e\xdd\x19\x67\xea\x35\x36\xad\x51\x35\xcc\x27\xda\x5c\x2b\xab\xe6\x41\xab\xd4\xd7\x63\x8c\x95\xb9\x4d\x4b\x4d\xdd\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x8f\x9a\xad\x1d\x42\x57\x9b\x31\x18\xd7\x16\xae\x1c\x68\xb8\x7b\xd0\xcc\x7b\x62\xc2\xed\xa9\x05\x62\xfc\xa3\x06\x78\xc3\x08\xfd\x6c\xf2\x7b\x18\x43\x5e\xc6\x9b\xf3\x02\xf0\x1f\xe0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x37\xe8\x48\xba\xd6\xfd\xe8\x27\x47\x4e\x33\xa2\xfc\xff\xc9\xf3\x12\x7e\x18\xbf\xc8\xfd\x71\xff\xe1\xf2\x99\xea\x6a\x8b\xd6\x6b\xd5\xa6\x9e\x10\xc0\xff\x9a\xf1\xf8\xfe\xca\xd8\x4c\x4f\xa7\x75\xb7\xa4\x32\xb7\xbe\x7d\xc2\x1f\xb7\x5d\x14\xdd\xf6\xcf\x95\xfb\xac\xf2\x5e\x15\x94\xf2\x19\xaf\x49\x7b\xbf\x49\xe6\xa3\x66\xd5\x66\x4f\xf2\x3a\xf3\x64\x45\xed\x69\xfe\x64\x3b\xe7\x38\x1f\xc7\x7d\x61\x2d\x8f\x38\xae\x0e\x16\x15\x2d\xfd\x32\xe3\xed\xa0\x54\x9f\x63\x16\xb7\x7a\xa4\x79\xe1\xb2\x5e\x2b\x51\xc4\x5e\x65\x87\x21\x85\x69\x6e\x97\x63\x7c\x3a\x4a\xdd\x2d\x1b\x37\x34\x39\xab\x75\xb0\x97\x8b\xfc\xb1\xa2\x21\xfd\xee\x9a\xbf\x9d\x72\x20\x7f\x5c\x77\x25\x46\x54\xf6\xb0\xb4\xa1\xda\x8e\x5b\xe7\xa7\xd7\xdd\x29\x0d\xf2\x9f\xb4\x43\x68\xde\x5a\x54\x6d\x7d\xd9\xf2\x78\x53\xd5\x0a\x49\xe7\xdb\xd5\xcc\xd9\xbc\x3a\xaa\x4c\x37\xcd\xc6\xc5\xc1\xf2\xb8\x78\xd6\x8a\x9d\x7b\xda\x75\x4b\x39\x7a\xbb\x06\xf6\xec\x0b\xc6\x6a\xeb\xd0\x1e\x4d\xdf\x36\x9b\xe8\xb5\xc2\x21\xda\xe9\xd1\x6b\x8b\xbe\x61\xd9\x45\xaf\x0d\x37\xd7\xee\xd0\xf2\x57\x99\x6b\xd5\x14\x27\x35\xeb\xee\x69\x47\x53\xaf\xb1\x69\x4d\x4b\xe5\xdd\xbc\xbb\xd5\xd9\xa9\x2c\x78\x5e\x83\x95\x85\xc1\xba\xca\xf0\x21\x4e\xbd\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x6d\x3b\xd0\xd5\x5e\xb7\xe8\x6d\x06\x63\xa8\xd9\xac\x61\x1a\xf7\xe1\x23\x22\x12\x17\x2e\x3e\xd7\xec\x64\x69\xea\xbe\x00\xfe\x21\xf7\x93\xb2\xeb\x6b\xcd\x3e\xa8\x73\x1e\x17\x95\x5b\x82\x93\xfc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xae\x29\x61\xcf\x7c\xe6\x1c\x99\x12\x37\xf0\x79\x7a\xc9\x98\x81\x93\x33\x0e\x1d\x65\x1f\x6c\x1e\x5e\x5f\x3f\xc6\xc6\xb6\x3d\xc0\x36\xc9\xff\xc2\x9a\xe1\x63\x3c\x0f\x6e\xbe\x1c\x9f\x70\x60\x94\xd3\x81\x43\x9b\x2f\x6e\x0e\xb6\x1d\xf5\xe8\x60\xfd\x86\xfa\x29\xfc\x77\xee\x8d\x5c\xea\xbb\xe4\xb3\x83\x83\xbc\x12\xbb\x2c\x47\x94\xdf\x9f\xed\x7c\x7c\xf8\x6c\x33\x53\xcf\x08\xde\x18\xba\x2d\x9d\x93\xac\x52\xf7\xf4\xad\xfc\x94\xe9\x63\xf7\xa4\xad\x71\x6d\xea\x75\xc3\x62\x5e\xe5\x4e\xf6\xfc\xc8\xf9\x57\xbc\x6e\x45\xb1\xda\xf6\xb2\x7d\xd8\x8d\xfd\xf3\x85\xc9\x21\x19\xb6\xee\x7b\xc6\x4d\x9a\x73\xa5\x6f\xb7\xee\xd9\x9d\x3c\xcb\xd1\x3c\x4f\x79\xe4\xbc\x71\x4d\x22\x43\x6c\x98\x54\x77\x36\x6a\x35\x97\xc7\x2d\x29\xca\x37\x6a\xae\xa7\x39\x04\xab\x45\x51\xf6\x05\x91\xfa\x65\xc2\x82\x78\x51\xef\xc2\x0b\x7e\x73\x66\x3c\x5d\x21\x99\xdc\x54\xdb\x99\x15\x77\xeb\xd6\x43\xd6\x84\x68\xc9\x64\x41\xed\x58\xdd\xe0\x11\xea\x9a\x6d\xa5\xdd\xfc\xc9\x6d\xca\xf8\xde\x50\x07\x1b\x97\x22\xc7\x99\x4d\x5b\x9d\xce\x34\x96\xe9\xbc\xd7\x27\x85\x05\x6f\x66\xa5\xf6\xf1\x57\x99\xb7\xfa\x6f\x74\x91\x37\x94\x45\xc5\xad\x59\xcb\xd9\xa2\xb4\x4b\x6d\x17\x55\x1a\xd2\xbe\xd1\xfb\x3b\x9d\x49\xab\x10\xdb\x79\x50\x9c\xc2\x39\xb7\xc3\x29\x8e\xfc\x6d\x55\x11\xc5\x29\x74\xb8\xcd\x94\x5a\x87\xda\xdf\x16\x31\x79\x75\x7e\xd9\xe3\x3a\xde\xec\xff\xd5\xbf\xf9\x8e\xee\x0f\xe7\xa7\xf7\x77\x0f\x60\x95\x57\x1a\x22\x9e\x3b\x6f\xec\x95\x0d\x35\x75\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x6f\x22\xca\x5f\x30\x62\x27\x83\xb1\xf0\x83\xef\x5c\xca\x44\x9b\x76\x95\x7d\x3f\xe8\xbd\x4d\x83\xd5\x0d\xa6\x6e\x0b\x7e\xdb\x9a\x93\x03\xae\x87\x8d\x2b\x3b\x65\xe8\x6e\xe6\x74\xcc\x19\x68\xea\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\xfb\x16\x5e\x5c\x67\x3c\xbb\xe6\x0f\xbb\xdf\x3f\xd0\xd5\x5e\x93\x9b\xc0\xbf\x74\xa1\x9b\xf9\x4e\xd4\x00\x4b\x87\x2d\x19\x87\xd2\xb3\xbf\x78\xf1\xd6\xdc\x9d\x1f\xc7\xb8\xbe\x93\xd5\xfb\xee\x7b\xb7\xaf\x99\x5f\x78\x67\xda\xa8\xf6\xec\xeb\x8b\x3d\xdf\xb1\x1c\x6e\x69\xf6\xe9\xb7\x2f\xbf\x5d\x53\x9f\xf0\xc3\xf8\x45\xee\x8f\xfb\x0f\x97\xcf\x54\x57\x5b\xb4\x5e\xab\x36\xf5\x8c\xe0\x57\xcf\x78\xbc\xbf\xb2\x22\xd3\x73\xbe\xc7\xad\x3c\x3b\xb7\x06\x91\xfb\x8a\xbc\x7a\x9f\xf6\xcf\xc6\x84\xa6\x70\xdc\x39\x0e\x19\xd5\x4a\xa1\x28\x44\x1d\x2a\x4b\xe7\xed\xfd\xda\xc5\x63\xe9\x93\x9d\xb5\x31\xfc\xc9\x42\xa7\xa3\x3e\xce\x2c\x56\x8f\x44\x5a\xe5\x10\x7f\xa3\xc5\xdc\xce\x70\x3b\x28\xd5\xe7\x98\x45\xd5\xf7\xb3\xf3\xd4\x32\x0b\x6e\x71\xd4\x7e\x75\xe3\x55\x99\x38\xd6\x2e\xc7\xf8\x74\x94\xba\x5b\x36\x6e\x68\x72\x56\xeb\x60\x2f\x97\xc3\x95\xc2\xbd\x0e\xa7\x17\x6d\x9c\x2f\x0f\xe6\x33\x0f\x57\x3e\xeb\x2b\x17\x95\xdd\x29\x6d\xa8\xb6\xe3\xd6\xf9\xe9\xaf\x75\x97\x06\xf9\x4f\x1a\x13\xa4\xae\x16\x9e\x60\xee\x54\xcc\x16\xa5\x1c\xf3\x2b\x90\xcd\x76\xae\x89\x5a\x2b\x70\xec\xc9\xcb\x9a\x58\xbe\x51\x1c\x15\xb7\x68\x2d\x67\xe4\xeb\x73\x0e\xb8\xaf\xce\x39\xb0\xfe\xdb\x39\x07\x77\xa5\x42\x8a\x23\xef\x7d\x75\xce\x81\x42\xca\x94\x5a\x87\xca\xa5\xec\xe5\xaf\xce\x39\xe8\x7a\xe3\xcf\x39\xf8\xe3\x79\xdb\x57\xe7\x1c\x50\x38\xe7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x03\x07\x26\xc0\x3f\x0e\xe7\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xbb\x5a\x78\x71\x5d\xc5\xd9\x35\x7f\xf0\x7d\x75\x60\xc2\x7b\x9f\x7f\x6a\x1b\x50\x37\xe8\xea\xe8\x0b\x17\x67\xaf\xdf\x54\xdf\xb0\x69\xa2\x78\xf3\x96\x69\x7e\xbb\x86\x1d\xbc\xeb\xb4\x78\xe0\x26\x0d\x63\xd4\xc1\xeb\x07\x4b\x2e\x6f\xf8\x6e\xf8\x57\x5b\x12\x97\x7e\x7c\xe8\x02\x77\xe6\xef\x2c\x93\xde\x9d\xf8\xf4\x48\x54\xd3\xae\x0f\x5a\xb9\x7d\xbe\xd3\xab\xdf\x32\xf5\x8c\xe0\x17\xf2\x3c\xbe\x61\x95\xd3\xdc\x27\xcf\xfa\xd6\x72\x4b\x76\xdc\x92\xf5\x67\x7c\xde\xa3\xdf\x94\xd2\xbd\x27\x7c\x3e\x6b\x4e\xa9\xc7\xad\x80\x30\x7f\x51\x51\x4e\x51\xa7\xee\xa4\x87\x8b\x7c\x4f\xa6\x67\x55\x64\x42\xdd\xe3\x5e\xc1\x9d\xb6\x0a\x71\xb0\x17\x6b\xdf\x56\xe5\x9d\xed\xaa\xe6\x56\x2b\xb9\x5b\xcf\xb9\x17\xbe\x91\xbb\x83\xb4\x86\x1b\x57\x39\x29\xc1\x5d\x25\x0e\x9a\x17\x7d\xcf\x5b\xef\x5a\x35\xea\x9c\x0c\x72\xb3\xab\x07\xef\x16\x9f\x72\xad\x9c\xd9\x17\xe6\xeb\x1f\xb9\x3a\x39\xae\xb7\x8d\xe2\xf8\xee\xe9\x7d\xf4\xd0\xa7\x79\x7b\x53\xc0\x63\x4b\xe6\xce\xdc\x7d\x54\x84\x8f\x30\x37\xe9\x2d\xe1\xbe\x56\x45\xb5\xf5\xe5\x8e\x13\x4d\x55\x2b\x3e\xbb\xdf\x76\x82\xe7\xe7\x74\x86\xc3\xed\xdb\xb1\x3e\xe9\xe1\x25\x7f\xa7\x8a\xf1\x67\x2a\xff\xd4\xd3\xe6\xd6\xdb\xe4\x67\x74\x13\x1b\x66\xf3\xea\x8e\x72\x94\x69\x35\x2a\x97\xc6\x76\x4a\xa1\x72\x09\xdc\xaf\x6d\x54\xb9\x34\x76\x50\xd6\x14\xc7\x9e\xa2\x9c\xf9\xcc\x9d\xb9\x6b\xe3\xd5\xa6\x5e\x64\xd3\x9a\x19\x1c\x36\x55\x36\x5a\xaf\x61\x88\x1e\x86\xb0\x17\x68\x78\xd3\xb4\x5f\x0f\x32\x75\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xa4\xd2\xbc\x75\xe6\x73\x18\x8c\xf1\x6f\xfd\x75\x62\xb3\x8f\xed\xbc\xe6\x2f\x06\x0e\xcb\x3e\xd8\x1f\x60\xea\xb6\xe0\xff\xd3\x2e\xd7\xfc\xaf\x1c\x2c\x36\xaf\x36\x46\x3c\xaf\xec\xfd\xf0\xcd\xfe\xdb\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xa8\x53\xf5\x67\x62\x3e\x64\x30\xde\x19\xf2\xd5\x7b\xcf\x73\x46\x7d\xf4\xfc\x93\x6f\xbe\x5d\x7f\x35\x7a\xae\xa9\xdb\x82\xff\x0e\x7f\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\x4f\x56\xb7\xd7\x2d\x7a\x9b\xc1\x18\x6a\x36\x6b\x98\xc6\x7d\xf8\x88\x88\xc4\x85\x8b\xcf\x35\x3b\x59\x9a\xba\xad\xdf\x9e\x32\xdb\x86\x23\x1d\x0b\x0e\x2c\xd2\xb7\x5c\xb5\x56\xe0\x98\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xd7\x9a\x12\xf6\xec\xd4\x10\x06\xe3\xdb\x6f\x8e\x0f\xd2\x9d\x1b\x6c\x5e\xbc\x7c\xfc\x4f\x5f\xee\xe2\xbd\x6d\xea\xb6\x7e\x8d\x0e\x78\xe4\xfe\x5e\x11\xc9\x88\xd1\x56\xc4\x30\xf3\x65\x43\x4d\xdd\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x3f\xee\x7d\x87\xd0\xd5\x66\x0c\xc6\xb5\x85\x2b\x07\x1a\xee\x1e\x34\xf3\x9e\x98\x70\x7b\x6a\x81\x78\x88\xa9\xdb\xfa\x85\x08\xfd\x6c\xf2\x7b\x18\x43\x5e\xc6\x9b\xf3\x02\x72\xde\x35\x75\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x2a\x67\xa3\xed\xa7\x0e\x60\x1c\xf6\x9d\x32\xc5\x37\x59\x19\xb5\xf7\xb6\x48\xf2\x7e\xe7\x5b\x0b\x86\xfe\x7a\xcf\xbf\xbf\xf9\x62\x85\xc0\x81\xdd\xe6\x74\xfb\x4c\x7f\x73\x64\xe6\xe8\xd8\x8f\xa4\xc1\xbf\xde\x66\x01\xe0\x97\xb3\x39\xc5\x42\xf2\x62\xe9\x09\xc6\x07\x09\xe6\xff\x11\x00\x00\xff\xff\xc8\xee\xdd\x5b\xe2\xf6\x01\x00") + +func testImagesVolumeIscsiBlockTarGzBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeIscsiBlockTarGz, + "test/images/volume/iscsi/block.tar.gz", + ) +} + +func testImagesVolumeIscsiBlockTarGz() (*asset, error) { + bytes, err := testImagesVolumeIscsiBlockTarGzBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/iscsi/block.tar.gz", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeIscsiCreate_blockSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x93\xdf\x6f\xdb\xb6\x17\xc5\xdf\xf9\x57\x9c\xaf\x94\x87\x04\xdf\x44\xb2\x0d\xec\xa5\x83\x3b\x38\x89\x87\x0a\xad\x1d\xc0\x56\xd7\xf5\x69\xa0\xa5\x2b\x89\x30\x45\x6a\xe4\x95\x7f\x64\xdd\xff\x3e\x50\x72\xda\x66\x7d\x98\x1e\xc5\xc3\x73\x3f\xf7\xf0\xde\xf8\x7f\x69\xef\x5d\xba\x53\x26\x25\x73\xc0\x4e\xfa\x46\x88\x18\x0f\xb6\x3b\x3b\x55\x37\x8c\xd9\x64\xfa\x13\xf2\x86\xf0\xbe\xdf\x91\x33\xc4\xe4\xb1\xe8\xb9\xb1\xce\x27\x22\x16\x31\x3e\xa8\x82\x8c\xa7\x12\xbd\x29\xc9\x81\x1b\xc2\xa2\x93\x45\x43\x2f\x27\xb7\xf8\x8d\x9c\x57\xd6\x60\x96\x4c\x70\x1d\x04\xd1\xe5\x28\xba\xf9\x59\xc4\x38\xdb\x1e\xad\x3c\xc3\x58\x46\xef\x09\xdc\x28\x8f\x4a\x69\x02\x9d\x0a\xea\x18\xca\xa0\xb0\x6d\xa7\x95\x34\x05\xe1\xa8\xb8\x19\xca\x5c\x4c\x12\x11\xe3\xf3\xc5\xc2\xee\x58\x2a\x03\x89\xc2\x76\x67\xd8\xea\x7b\x1d\x24\x0f\xc0\xe1\x6b\x98\xbb\x37\x69\x7a\x3c\x1e\x13\x39\xc0\x26\xd6\xd5\xa9\x1e\x85\x3e\xfd\x90\x3d\x2c\xd7\xdb\xe5\xdd\x2c\x99\x0c\x57\x3e\x1a\x4d\xde\xc3\xd1\x9f\xbd\x72\x54\x62\x77\x86\xec\x3a\xad\x0a\xb9\xd3\x04\x2d\x8f\xb0\x0e\xb2\x76\x44\x25\xd8\x06\xde\xa3\x53\xac\x4c\x7d\x0b\x6f\x2b\x3e\x4a\x47\x22\x46\xa9\x3c\x3b\xb5\xeb\xf9\x55\x58\x2f\x74\xca\xbf\x12\x58\x03\x69\x10\x2d\xb6\xc8\xb6\x11\xee\x17\xdb\x6c\x7b\x2b\x62\x7c\xca\xf2\x77\x4f\x1f\x73\x7c\x5a\x6c\x36\x8b\x75\x9e\x2d\xb7\x78\xda\xe0\xe1\x69\xfd\x98\xe5\xd9\xd3\x7a\x8b\xa7\x5f\xb1\x58\x7f\xc6\xfb\x6c\xfd\x78\x0b\x52\xdc\x90\x03\x9d\x3a\x17\xf8\xad\x83\x0a\x31\x52\x19\x32\xdb\x12\xbd\x02\xa8\xec\x08\xe4\x3b\x2a\x54\xa5\x0a\x68\x69\xea\x5e\xd6\x84\xda\x1e\xc8\x19\x65\x6a\x74\xe4\x5a\xe5\xc3\x63\x7a\x48\x53\x8a\x18\x5a\xb5\x8a\x25\x0f\x7f\x7e\x68\x2a\x09\xb3\xb4\x3c\x29\x0e\xed\x84\xff\x95\x72\x9e\x41\xce\x59\x97\x08\x4f\x8c\x3b\x12\x62\xb5\xce\x1f\xb3\xcd\x3c\xba\xba\x6e\xf7\x4c\x6d\x87\xbb\xf2\x26\x12\xa2\xd0\x24\x4d\xdf\x5d\xdf\x88\xbf\x44\x78\xb3\x18\x2b\xb9\x27\xf8\xde\x11\x8e\x04\x47\xdc\xbb\xd1\x75\x9c\x54\x0a\x75\x0a\x5b\xd2\xa0\xde\x2c\xf3\xf9\xd5\x2f\x97\x8b\x5b\xa5\xc9\xb0\x3e\xc3\x51\x6b\x0f\x04\x3a\x90\x3b\x73\x13\x3a\x92\xa6\x84\xaa\x8d\x75\x34\x62\xf9\xe1\x4a\x40\xfb\xff\x68\x34\xec\x46\xdf\xda\xde\x30\xa2\xab\x91\x35\xc2\xec\x6d\x5a\xd2\x21\x35\xbd\xd6\xdf\x54\xae\x2d\x95\xfb\x6f\x11\x76\xda\x16\xfb\x1f\x4e\x07\xfe\xab\xcd\x32\x17\x7f\x0b\xc1\x4e\x76\xb8\x24\x80\x7c\xb9\x59\x61\xf9\x7b\x96\x0f\xab\xe9\x48\x32\x61\x3a\x9b\xac\xee\x51\xd2\x41\xbd\xac\x04\x9d\x78\x26\x62\x5c\x1f\xac\xee\x5b\xfa\x43\x59\x30\x79\xf6\x30\x61\x2a\x25\x43\x93\xf4\x8c\xe9\x64\xb2\xba\xbf\x11\x65\x09\x55\xcd\x07\x80\x67\x72\x16\xb6\x9a\x8f\x54\x9e\x68\x3f\x9f\xce\x26\x28\x42\xc7\xf3\x29\x76\x7e\x3e\x5d\x89\x76\x5f\xf9\x24\x54\x18\xe1\x03\xc8\x22\x78\x98\x92\x4e\x49\xc3\xad\x1e\xe6\x9e\xc5\x98\xd3\x9d\x85\xb6\xb6\xbb\x34\xfa\x35\x10\x41\x45\x63\x11\xbd\x23\xad\x2d\x2a\x67\x5b\x28\x5f\x78\x15\xe1\xed\x57\x4d\xfa\xcd\x31\x12\xff\x4e\x5d\x88\x97\xf0\x12\x96\x2e\xa9\x9f\xbf\xcf\x10\x5f\xbe\xe0\x8d\x60\xe9\x50\x54\xcf\xaf\x55\x23\xf2\x3f\x01\x00\x00\xff\xff\x2c\xc9\xba\x04\xeb\x04\x00\x00") + +func testImagesVolumeIscsiCreate_blockShBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeIscsiCreate_blockSh, + "test/images/volume/iscsi/create_block.sh", + ) +} + +func testImagesVolumeIscsiCreate_blockSh() (*asset, error) { + bytes, err := testImagesVolumeIscsiCreate_blockShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/iscsi/create_block.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeIscsiRun_iscsi_targetSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x56\x5d\x6f\xdb\x36\x17\xbe\xd7\xaf\x78\x5e\xbb\xc0\x9b\x14\xb1\xe4\xf4\x6a\x58\x91\x0b\x2f\xcd\x50\xa3\xa9\x83\xc4\xce\x8a\x5e\x05\xb4\x74\x2c\x1d\x44\x22\x55\xf2\xd0\xae\x37\xec\xbf\x0f\x24\xe5\xd4\x69\xbb\x0e\xcd\x55\xcc\x8f\x73\x9e\xf3\x7c\x10\x1a\xff\xaf\xf0\xce\x16\x6b\xd6\x05\xe9\x2d\xd6\xca\x35\x59\x36\xc6\xa5\xe9\xf7\x96\xeb\x46\xf0\x6a\x7a\xfe\x0b\x56\x0d\xe1\x9d\x5f\x93\xd5\x24\xe4\x30\xf3\xd2\x18\xeb\xf2\x6c\x9c\x8d\x71\xcd\x25\x69\x47\x15\xbc\xae\xc8\x42\x1a\xc2\xac\x57\x65\x43\x87\x9d\x33\xfc\x41\xd6\xb1\xd1\x78\x95\x4f\x71\x12\x0e\x8c\x86\xad\xd1\xe9\xeb\x6c\x8c\xbd\xf1\xe8\xd4\x1e\xda\x08\xbc\x23\x48\xc3\x0e\x1b\x6e\x09\xf4\xb9\xa4\x5e\xc0\x1a\xa5\xe9\xfa\x96\x95\x2e\x09\x3b\x96\x26\xb6\x19\x8a\xe4\xd9\x18\x1f\x87\x12\x66\x2d\x8a\x35\x14\x4a\xd3\xef\x61\x36\xc7\xe7\xa0\x24\x02\x0e\x7f\x8d\x48\xff\x6b\x51\xec\x76\xbb\x5c\x45\xb0\xb9\xb1\x75\xd1\xa6\x83\xae\xb8\x9e\x5f\x5e\x2d\x96\x57\x93\x57\xf9\x34\x5e\xb9\xd7\x2d\x39\x07\x4b\x9f\x3c\x5b\xaa\xb0\xde\x43\xf5\x7d\xcb\xa5\x5a\xb7\x84\x56\xed\x60\x2c\x54\x6d\x89\x2a\x88\x09\x78\x77\x96\x85\x75\x7d\x06\x67\x36\xb2\x53\x96\xb2\x31\x2a\x76\x62\x79\xed\xe5\x19\x59\x07\x74\xec\x9e\x1d\x30\x1a\x4a\x63\x34\x5b\x62\xbe\x1c\xe1\xb7\xd9\x72\xbe\x3c\xcb\xc6\xf8\x30\x5f\xbd\xbd\xb9\x5f\xe1\xc3\xec\xee\x6e\xb6\x58\xcd\xaf\x96\xb8\xb9\xc3\xe5\xcd\xe2\xcd\x7c\x35\xbf\x59\x2c\x71\xf3\x3b\x66\x8b\x8f\x78\x37\x5f\xbc\x39\x03\xb1\x34\x64\x41\x9f\x7b\x1b\xf0\x1b\x0b\x0e\x34\x52\x15\x38\x5b\x12\x3d\x03\xb0\x31\x09\x90\xeb\xa9\xe4\x0d\x97\x68\x95\xae\xbd\xaa\x09\xb5\xd9\x92\xd5\xac\x6b\xf4\x64\x3b\x76\x41\x4c\x07\xa5\xab\x6c\x8c\x96\x3b\x16\x25\x71\xe5\x9b\xa1\xf2\xe0\xa5\x55\x90\xd3\x95\x96\x7b\x41\x65\xc8\x45\x9d\xad\x0f\xf3\xed\x51\x29\xea\x8c\x3e\x03\x0b\x8c\x6e\xf7\x28\x8d\xde\x70\xed\x2d\x39\xf0\xf2\x72\x39\x87\x28\x5b\x93\xe0\xe4\xc2\x91\xdd\x92\x3d\xcd\xc6\x81\xde\xc7\x60\xc5\x36\xc7\x5c\x02\x6f\xbd\x71\x8e\x83\x12\x62\x62\x61\x39\xea\xd8\xf9\x56\xb8\x0f\x7b\xdc\x91\x8b\xb4\xc2\xb1\xae\xdb\xa0\x88\x36\x15\x9d\x81\x54\xd9\xc4\x7b\x3b\x6e\x5b\x94\x96\x94\x10\x58\x1c\xcc\x4e\x63\x7e\xbb\x08\x93\xe2\xfa\x7e\x11\xa7\x39\x8a\x41\xe7\x9d\xa0\xb7\x66\xcb\x15\xc1\x6b\xfe\xe4\x09\x5a\x75\x94\x67\xf3\xdb\xc5\xc5\x8b\xf3\x70\x3c\xc1\x2f\x5b\x86\xdb\xeb\xb2\xb1\x46\xf3\x9f\x01\xc6\x96\x2c\xaa\xb5\x77\x67\x68\xcc\x8e\xc2\x2f\x3e\x62\x67\x67\xec\x23\x58\x67\xe3\xc0\x47\x70\x34\x59\x97\xe3\x3e\x88\xd4\x9a\x32\x6c\x39\x21\x55\x65\xd7\x37\x97\xef\x2e\x0a\x67\xb7\x05\xbb\xd2\x71\xf1\xd4\x2d\x0f\xc7\xb2\x6c\xe3\x75\x19\xa4\x81\x13\x65\xe5\xe4\x34\xfb\x2b\x0b\xee\x3f\x86\xa5\x83\x67\x03\x92\x48\xe6\x21\x86\x81\x0d\xa3\xa3\x94\x8d\x71\x12\x6c\x9c\x6a\x40\xa1\xb7\xbc\x0d\x0c\x19\x4d\xb1\x5a\xf7\x58\xb1\x45\x61\xbd\x2e\x42\x9d\xb8\x16\xfe\x99\x24\x6d\x81\xc9\xc4\xed\x9d\x50\x97\x0d\xcd\x2f\x13\xc3\x9a\x76\x91\xdd\x93\x24\xf4\xad\x57\x2d\x6f\x98\x2a\x2c\x54\x47\xa7\xf1\x6c\x9a\xf6\x45\x18\xf3\x08\x72\x1a\xf6\x20\xd4\xe8\xc5\xfc\x76\x31\x1a\x4a\xdf\x79\x1d\x88\x64\x8d\x8a\x3a\x83\x2e\xea\xcb\x39\xe5\xd0\x06\xca\x4b\x43\x5a\xb8\x8c\x76\xfd\xcf\x06\x45\xaa\x5c\x48\x5f\x9f\xc3\x91\x40\xc9\x90\xce\xaf\x2a\x5d\x4c\x63\xb7\x87\xd0\xed\x21\x04\x9f\x1e\x7a\x6b\x84\x4a\xb9\x98\xa2\x26\x4d\x56\x09\x3d\x04\xaf\x3d\xa8\xb2\x75\x17\xe7\x28\xc3\x93\xf3\x50\xed\xb5\xea\xb8\x1c\x16\xbf\x62\x67\xf0\xd3\x68\x1d\x11\x6e\x4d\xeb\x3b\x1a\xe1\x24\xce\xb2\x69\x95\xc4\x07\xf2\xf4\x20\xd2\xcb\xa0\xd2\xcb\x7c\x28\xf1\x56\x6d\x43\x58\x13\x11\x61\xfb\xc9\x45\x31\x5f\xde\x91\x1b\x12\x84\x8d\x35\x1d\x9c\xe9\x08\x96\x94\x1b\x58\x19\x47\xc7\xb3\xfc\x3f\xb9\x51\x0d\xd1\x4a\x09\xfc\x92\xa8\xeb\xfb\x85\x4b\x05\x2a\xde\x6c\xc8\x92\x96\xe1\xfa\x91\x6b\x87\x95\x2f\x26\x4d\xb1\x59\x13\xd6\xac\xab\x49\x67\xbc\x96\x54\xe4\x60\xb6\x74\xa5\xec\x51\xa4\xd9\x8f\xfc\x3d\x68\x3d\xd4\x7c\xaf\x1e\xd3\x0b\x76\xcc\x11\xd4\x56\x71\x9b\x20\x37\xd6\xf8\xba\x81\xf1\x36\xc5\xd8\x05\xc8\x98\xfe\x48\xf9\xb5\x2a\x1f\x9d\x18\x4b\xae\x08\x04\xb3\x39\xd8\x2c\xf6\x98\x24\x00\xdf\x81\xf4\x33\x66\x2a\x5a\xaf\xdd\xa1\xee\xb7\x1d\x8b\xe3\x56\x69\x56\x2a\x1b\x83\x51\xa2\x6f\x78\x10\x63\x1a\xa9\x1a\x65\x7f\x3f\x8b\xb9\xe9\x9f\x52\x9e\x2e\x85\xa5\x3e\xba\xe1\xe8\xf6\x53\x5c\xa8\x33\x5b\x0a\xe4\xfc\xfc\x00\x05\x2a\x6a\x49\xe8\xc7\x7c\xa6\xae\xc3\xc9\xe7\x51\x4d\xbd\x93\x76\x15\x6d\xb9\x24\x74\x2a\x62\xfd\x39\x81\x86\xe2\xcf\x58\x0b\x05\xe2\x47\x8d\xed\x30\xd9\xfc\x8b\x5e\xdf\x65\xd5\xf4\x7d\x60\x35\xee\x7f\x66\xc1\x34\x10\x9c\x89\x55\x7d\xdc\xc4\xea\xea\xee\x7d\x16\xc9\xcf\xb2\x5d\x13\x3e\x52\xc4\x7a\x7a\x8d\xca\xc4\x3b\xae\x25\xea\x71\x9e\x55\xe1\x75\xfc\x27\x00\x00\xff\xff\x66\xfb\xb9\xf5\x5d\x09\x00\x00") + +func testImagesVolumeIscsiRun_iscsi_targetShBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeIscsiRun_iscsi_targetSh, + "test/images/volume/iscsi/run_iscsi_target.sh", + ) +} + +func testImagesVolumeIscsiRun_iscsi_targetSh() (*asset, error) { + bytes, err := testImagesVolumeIscsiRun_iscsi_targetShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/iscsi/run_iscsi_target.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeNfsBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x4d\x4e\xcd\x2b\xc9\x2f\xb6\x32\xe7\x82\x0a\x16\xe5\x9a\x99\xd8\x82\xc9\x32\x0b\x7d\x34\xc9\x82\x82\x64\x33\x93\x9c\x54\x5b\x28\x8d\x90\x06\x04\x00\x00\xff\xff\x95\x2b\xa6\xc1\x51\x00\x00\x00") + +func testImagesVolumeNfsBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeNfsBaseimage, + "test/images/volume/nfs/BASEIMAGE", + ) +} + +func testImagesVolumeNfsBaseimage() (*asset, error) { + bytes, err := testImagesVolumeNfsBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/nfs/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeNfsDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x5f\x8f\xdb\x36\x10\xc4\xdf\xf9\x29\x06\x52\x11\xb4\x80\x2d\xb9\x87\x43\xd0\x3f\x4f\x8a\xad\x24\x42\xce\xd2\x55\xb2\x93\x1e\x8a\xe0\x40\x4b\x6b\x8b\x08\x45\x32\x24\x55\x9f\xbf\x7d\x41\xd9\x89\x7b\x39\xbd\xed\xce\x68\xf6\xb7\xcb\x18\x4b\x6d\x4e\x56\x1c\x7a\x8f\x9b\xc5\xaf\xaf\xb1\xe9\x09\x1f\xc6\x1d\x59\x45\x9e\x1c\xb2\xd1\xf7\xda\xba\x84\xc5\x2c\xc6\x9d\x68\x49\x39\xea\x30\xaa\x8e\x2c\x7c\x4f\xc8\x0c\x6f\x7b\xfa\xa6\xcc\xf0\x91\xac\x13\x5a\xe1\x26\x59\xe0\xe7\x60\x88\x2e\x52\xf4\xcb\x9f\x2c\xc6\x49\x8f\x18\xf8\x09\x4a\x7b\x8c\x8e\xe0\x7b\xe1\xb0\x17\x92\x40\x4f\x2d\x19\x0f\xa1\xd0\xea\xc1\x48\xc1\x55\x4b\x38\x0a\xdf\x4f\x63\x2e\x21\x09\x8b\xf1\x70\x89\xd0\x3b\xcf\x85\x02\x47\xab\xcd\x09\x7a\xff\x7f\x1f\xb8\x9f\x80\xc3\xd7\x7b\x6f\xfe\x48\xd3\xe3\xf1\x98\xf0\x09\x36\xd1\xf6\x90\xca\xb3\xd1\xa5\x77\xc5\x32\x2f\x9b\x7c\x7e\x93\x2c\xa6\x5f\xb6\x4a\x92\x73\xb0\xf4\x75\x14\x96\x3a\xec\x4e\xe0\xc6\x48\xd1\xf2\x9d\x24\x48\x7e\x84\xb6\xe0\x07\x4b\xd4\xc1\xeb\xc0\x7b\xb4\xc2\x0b\x75\x98\xc1\xe9\xbd\x3f\x72\x4b\x2c\x46\x27\x9c\xb7\x62\x37\xfa\x67\xc7\xfa\x46\x27\xdc\x33\x83\x56\xe0\x0a\x51\xd6\xa0\x68\x22\xbc\xc9\x9a\xa2\x99\xb1\x18\x9f\x8a\xcd\xfb\x6a\xbb\xc1\xa7\xac\xae\xb3\x72\x53\xe4\x0d\xaa\x1a\xcb\xaa\x5c\x15\x9b\xa2\x2a\x1b\x54\x6f\x91\x95\x0f\xf8\x50\x94\xab\x19\x48\xf8\x9e\x2c\xe8\xc9\xd8\xc0\xaf\x2d\x44\x38\x23\x75\xe1\x66\x0d\xd1\x33\x80\xbd\x3e\x03\x39\x43\xad\xd8\x8b\x16\x92\xab\xc3\xc8\x0f\x84\x83\xfe\x97\xac\x12\xea\x00\x43\x76\x10\x2e\x3c\xa6\x03\x57\x1d\x8b\x21\xc5\x20\x3c\xf7\x53\xe7\xc5\x52\x09\x63\x59\xfd\x2e\xd0\xe7\xc5\x3a\x7b\x97\xb3\xb7\x75\xb5\xc6\x4f\xd7\x9a\x2d\xeb\xaa\x69\x1e\xdf\x6c\x8b\xbb\xd5\xe3\xb2\xba\x7f\xc0\x57\x1a\xc6\xf9\x5f\xf9\x7a\x9b\xd5\xcb\xf7\x73\x17\xa2\x5b\xa4\xa3\xb3\xe9\x4e\xa8\x94\xd5\xdb\x12\xa7\x71\xc0\xfc\x04\xa1\x9c\xe7\x52\x5e\x45\xe3\xa0\xf6\x6e\x3e\x7a\x21\x1d\x5e\xbd\x9a\x7c\xad\x24\xae\xc0\xa5\x9c\xfe\x1c\xbe\x74\xc2\x62\x6e\x90\xd2\x93\xd1\xd6\x3b\x96\xad\x56\xb0\xa3\x7a\x54\x7b\x97\xb8\xfe\x9c\x25\x75\xcb\xe5\x79\x5c\x90\x85\xea\xe8\x29\xe9\xfd\x20\x91\xfa\xc1\xa4\xd7\x7a\xca\x6c\xfb\x41\x77\x78\x7d\x7b\xfb\x42\x65\x31\x06\x6e\xbf\x7c\x1f\x06\xee\xc0\x31\xe8\x51\x79\x18\x2d\x94\x67\x1f\xab\xbb\xed\x3a\xbf\xd2\xc4\xe1\xa9\xb4\xa3\xb3\xa9\xc3\xcd\x62\x71\xfb\x5b\xea\x5b\x13\x8e\x1d\x96\x0b\xad\xdb\xdf\x43\x87\xe5\x7f\xdf\x57\x4d\xfe\xbd\xbe\x7a\x19\xcb\xcb\x4d\xfd\x70\x5f\x15\xe5\x06\xff\x44\x3f\xac\x74\x5d\x36\xfa\xcc\x96\xeb\x55\x70\x5c\xc6\x47\x33\x44\x69\xf4\x99\xfd\x17\x00\x00\xff\xff\xe0\xaf\x66\x45\xff\x03\x00\x00") + +func testImagesVolumeNfsDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeNfsDockerfile, + "test/images/volume/nfs/Dockerfile", + ) +} + +func testImagesVolumeNfsDockerfile() (*asset, error) { + bytes, err := testImagesVolumeNfsDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/nfs/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeNfsVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") + +func testImagesVolumeNfsVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeNfsVersion, + "test/images/volume/nfs/VERSION", + ) +} + +func testImagesVolumeNfsVersion() (*asset, error) { + bytes, err := testImagesVolumeNfsVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/nfs/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeNfsIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xf2\x48\xcd\xc9\xc9\x57\x48\x2b\xca\xcf\x55\xf0\x73\x0b\x56\xe4\x02\x04\x00\x00\xff\xff\x3a\x50\xf2\x93\x10\x00\x00\x00") + +func testImagesVolumeNfsIndexHtmlBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeNfsIndexHtml, + "test/images/volume/nfs/index.html", + ) +} + +func testImagesVolumeNfsIndexHtml() (*asset, error) { + bytes, err := testImagesVolumeNfsIndexHtmlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/nfs/index.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeNfsRun_nfsSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x55\x51\x6f\xdb\x38\x13\x7c\xd7\xaf\x98\x4f\xf6\x43\x5c\xd8\x96\x92\xb6\x5f\x81\x04\xed\x9d\xaf\x4d\x72\x46\x7b\x76\x11\xb9\x2d\x8a\x43\x51\xd0\xe4\x4a\x22\x2a\x93\x2c\x49\xd9\x31\x8a\xfe\xf7\x03\x29\xc7\xb1\x93\x96\x0f\x89\xc4\x1d\x2e\x67\x67\x56\xeb\xde\xff\xb2\xd6\xd9\x6c\x29\x55\x46\x6a\x8d\x25\x73\x75\x92\xf4\xf0\x5a\x9b\xad\x95\x55\xed\x71\x96\x9f\x3e\xc7\xa2\x26\xbc\x6d\x97\x64\x15\x79\x72\x98\xb4\xbe\xd6\xd6\x8d\x93\x5e\xd2\xc3\x3b\xc9\x49\x39\x12\x68\x95\x20\x0b\x5f\x13\x26\x86\xf1\x9a\xee\x22\x43\x7c\x24\xeb\xa4\x56\x38\x1b\xe7\x38\x09\x80\x74\x17\x4a\x07\x17\x49\x0f\x5b\xdd\x62\xc5\xb6\x50\xda\xa3\x75\x04\x5f\x4b\x87\x52\x36\x04\xba\xe5\x64\x3c\xa4\x02\xd7\x2b\xd3\x48\xa6\x38\x61\x23\x7d\x1d\xaf\xd9\x25\x19\x27\x3d\x7c\xde\xa5\xd0\x4b\xcf\xa4\x02\x03\xd7\x66\x0b\x5d\x1e\xe2\xc0\x7c\x24\x1c\x56\xed\xbd\x39\xcf\xb2\xcd\x66\x33\x66\x91\xec\x58\xdb\x2a\x6b\x3a\xa0\xcb\xde\x4d\x5f\x5f\xce\x8a\xcb\xd1\xd9\x38\x8f\x47\x3e\xa8\x86\x9c\x83\xa5\xef\xad\xb4\x24\xb0\xdc\x82\x19\xd3\x48\xce\x96\x0d\xa1\x61\x1b\x68\x0b\x56\x59\x22\x01\xaf\x03\xdf\x8d\x95\x5e\xaa\x6a\x08\xa7\x4b\xbf\x61\x96\x92\x1e\x84\x74\xde\xca\x65\xeb\x8f\xc4\xba\x63\x27\xdd\x11\x40\x2b\x30\x85\x74\x52\x60\x5a\xa4\xf8\x6b\x52\x4c\x8b\x61\xd2\xc3\xa7\xe9\xe2\xef\xf9\x87\x05\x3e\x4d\x6e\x6e\x26\xb3\xc5\xf4\xb2\xc0\xfc\x06\xaf\xe7\xb3\x37\xd3\xc5\x74\x3e\x2b\x30\xbf\xc2\x64\xf6\x19\x6f\xa7\xb3\x37\x43\x90\xf4\x35\x59\xd0\xad\xb1\x81\xbf\xb6\x90\x41\x46\x12\x41\xb3\x82\xe8\x88\x40\xa9\x3b\x42\xce\x10\x97\xa5\xe4\x68\x98\xaa\x5a\x56\x11\x2a\xbd\x26\xab\xa4\xaa\x60\xc8\xae\xa4\x0b\x66\x3a\x30\x25\x92\x1e\x1a\xb9\x92\x9e\xf9\xb8\xf3\xa8\xa8\x71\x92\x94\xad\xe2\x21\x0a\xe7\x99\xf5\x27\x83\xe4\x47\x92\x04\x07\x5a\xe5\xc8\xa3\x92\x22\xbe\xf5\xc0\x78\xb4\x3a\x1d\x5d\x87\xcd\x14\xda\x84\x53\x31\xb8\xa9\x43\x2f\x54\xe4\xb5\xf1\x0e\xe9\xf5\x79\x8c\x5e\x40\xe8\x18\x0e\x8b\x33\x47\xe8\xff\xd0\xc6\xff\x84\x54\xfb\xed\xb0\xae\x07\x21\xe1\xcb\xfe\x8f\xf9\xfb\xc5\xe4\xe6\xfa\xe7\xc5\xc5\x51\xf8\xc9\xe0\xfc\x60\x87\x1c\xe3\xf1\x45\x68\x45\xf1\xc1\xd5\xb2\xf4\xe8\x9f\x9c\xcc\xdf\x2f\xa6\xb3\x37\x18\xe1\x74\x30\x48\x76\xa4\x8d\x25\xc3\x2c\x21\x23\xcf\x33\xba\x35\xda\x7a\x17\x43\x41\x4b\x19\xfa\x20\xed\xff\x99\x1e\x31\xed\xa1\x74\x52\xbc\xcc\xcf\xa1\x88\x04\x89\x08\x9d\x5d\x15\xeb\x67\xf7\x24\x78\xad\x91\xf6\x25\x9e\x9c\xd8\xcd\xb0\x83\x0f\xa5\x72\xc4\x5b\x4b\x43\xa5\xbf\x5a\xad\xfd\x57\xf7\xbd\x65\xae\x1e\xa4\x78\xf5\xea\xf1\xfd\x61\xc9\x12\xff\x62\xb4\x0e\xd5\xe3\x0b\x2e\x82\x2f\xc7\xca\xf0\x7a\xa5\x05\xf2\x17\x79\xb8\x2c\x7d\x10\xaa\xac\x41\xda\x8f\x56\x1c\x45\x4b\x79\x50\xca\x4a\xaf\x09\x52\x09\xba\x1d\xd7\x7e\xd5\x84\xde\xaf\xc9\xd2\x1e\x11\xe7\x0a\x37\xc8\xfc\xca\x64\x07\xb8\xb4\x2f\xb3\xfb\x94\x1d\x8f\xff\x3f\x7b\x16\xf7\xef\x61\xe9\x03\x45\x0a\xb2\xeb\xd0\x84\x77\x74\xa2\x47\x3b\x27\x62\x77\xc1\x1a\xbe\x94\x4a\x84\xd2\xa5\x0f\x5f\x54\x18\x29\x31\x44\x02\x5b\xf2\x11\x1c\x07\x9e\x0b\xcc\xac\xe1\x52\x95\x1a\xa7\x67\x2f\xc6\xf9\x38\x1f\x9f\xe2\x15\x32\x41\xeb\x4c\xb5\x4d\x73\x01\xf7\xb2\xff\x47\xb2\x57\xb2\xef\x30\x52\x84\x1c\x5f\x8e\xa5\xdc\x71\x0b\x97\x04\x72\x3b\x0a\x7b\xee\x47\xb7\x45\x72\xa3\x4d\xb2\x13\x32\xfe\x5f\xe9\x56\x79\x8c\x3c\x54\xe9\x44\xf7\x27\x33\x56\xf3\xac\x74\x59\x78\xbb\xab\x70\xf4\x11\x4f\xcf\x41\x2a\x8e\x9c\xd0\x30\x4f\x1f\x57\x33\x8e\xc9\x04\x46\x33\x9c\xc5\x03\xc9\x03\x4c\xd7\x23\xa5\xc3\xc8\xde\xa5\xbd\xc6\x69\x1e\x8c\xb3\x24\x5a\x4e\xa8\x2c\xe3\x04\x2f\x57\x14\x36\x4f\x73\x38\xe2\x5a\x09\xd7\x0d\xee\x46\x6f\xc8\x79\xb0\x26\x3c\x88\xc1\x2f\x18\xc4\x02\xba\xa4\xf7\x2c\x1e\xc3\x9c\x67\x81\xe7\x48\xe9\x91\xd2\x5e\x96\xdb\xe4\x5e\xcb\xd9\x55\x71\x67\x5a\x9a\xfc\x3c\x1a\x21\xda\xc4\x09\x72\xa8\xbb\x36\x26\xe8\x3e\xbb\x2a\xd2\x87\xd5\xee\xf9\xe4\xbf\x95\x81\xb5\xbf\x0d\x95\x5d\xba\x6f\xb2\x09\x0d\x7b\x02\x23\x85\x2e\x71\xa0\xf2\xa0\x33\xb9\xed\x1c\x3c\x36\x6d\xcf\xf0\x17\x1f\x27\xdd\x4a\x8f\x3c\x54\x96\x78\xcb\x4c\x2c\x0b\x8b\xcb\x9b\x7f\x92\xa4\x6b\xe3\x30\x34\xc2\xaf\xf0\x87\xaa\xd9\xa2\x66\xfc\x5b\xb0\x42\xe8\xd0\xcd\x75\xa8\x95\x29\x81\x0d\x93\x3e\xce\x8e\x62\x7a\x1d\xcf\x76\x53\xd2\xdb\x96\xf6\xf3\xc6\x35\x44\x06\xcf\x93\xf8\xa1\xfc\x17\x00\x00\xff\xff\xef\x3a\x6f\x36\xea\x07\x00\x00") + +func testImagesVolumeNfsRun_nfsShBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeNfsRun_nfsSh, + "test/images/volume/nfs/run_nfs.sh", + ) +} + +func testImagesVolumeNfsRun_nfsSh() (*asset, error) { + bytes, err := testImagesVolumeNfsRun_nfsShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/nfs/run_nfs.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeRbdBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xc9\xcc\x2b\xad\xd0\x4f\xcc\x4d\x31\x33\xb1\x4d\x4b\x4d\xc9\x2f\x4a\xb4\x32\x32\xe3\x82\x8a\x16\xe5\x9a\x99\xd8\x82\xc9\x32\x0b\x7d\x74\xd9\x82\x82\x64\x33\x93\x9c\x54\x5b\x28\x8d\x24\x0f\x08\x00\x00\xff\xff\xdf\x20\xfc\xd2\x54\x00\x00\x00") + +func testImagesVolumeRbdBaseimageBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeRbdBaseimage, + "test/images/volume/rbd/BASEIMAGE", + ) +} + +func testImagesVolumeRbdBaseimage() (*asset, error) { + bytes, err := testImagesVolumeRbdBaseimageBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/rbd/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeRbdDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\x5f\x6f\xdb\x36\x14\xc5\xdf\xf9\x29\x0e\xa2\xa1\xd8\x00\x5b\xca\xf2\xd0\xfd\x7b\x99\x62\xab\x89\xd0\xc4\xca\x24\x7b\x5d\x9e\x0a\x8a\xba\x96\x88\x48\x24\x4b\x52\x75\xd5\x4f\x3f\x50\x96\xb1\x66\xf5\x83\x89\x7b\xee\x21\xef\x8f\x87\x8a\xb0\xd1\x66\xb2\xb2\xed\x3c\x6e\xae\x7f\x7e\x8b\x7d\x47\x78\x3f\xd6\x64\x15\x79\x72\x48\x47\xdf\x69\xeb\x62\x16\xb1\x08\x0f\x52\x90\x72\xd4\x60\x54\x0d\x59\xf8\x8e\x90\x1a\x2e\x3a\xba\x74\x56\xf8\x9b\xac\x93\x5a\xe1\x26\xbe\xc6\x8f\xc1\x70\xb5\xb4\xae\x7e\xfa\x83\x45\x98\xf4\x88\x81\x4f\x50\xda\x63\x74\x04\xdf\x49\x87\xa3\xec\x09\xf4\x45\x90\xf1\x90\x0a\x42\x0f\xa6\x97\x5c\x09\xc2\x49\xfa\x6e\x1e\xb3\x1c\x12\xb3\x08\xcf\xcb\x11\xba\xf6\x5c\x2a\x70\x08\x6d\x26\xe8\xe3\xb7\x3e\x70\x3f\x03\x87\x5f\xe7\xbd\xf9\x3d\x49\x4e\xa7\x53\xcc\x67\xd8\x58\xdb\x36\xe9\xcf\x46\x97\x3c\xe4\x9b\x6c\x57\x65\xeb\x9b\xf8\x7a\xde\x72\x50\x3d\x39\x07\x4b\x9f\x46\x69\xa9\x41\x3d\x81\x1b\xd3\x4b\xc1\xeb\x9e\xd0\xf3\x13\xb4\x05\x6f\x2d\x51\x03\xaf\x03\xef\xc9\x4a\x2f\x55\xbb\x82\xd3\x47\x7f\xe2\x96\x58\x84\x46\x3a\x6f\x65\x3d\xfa\x57\x61\x5d\xe8\xa4\x7b\x65\xd0\x0a\x5c\xe1\x2a\xad\x90\x57\x57\xb8\x4d\xab\xbc\x5a\xb1\x08\x1f\xf2\xfd\x7d\x71\xd8\xe3\x43\x5a\x96\xe9\x6e\x9f\x67\x15\x8a\x12\x9b\x62\xb7\xcd\xf7\x79\xb1\xab\x50\xbc\x43\xba\x7b\xc6\xfb\x7c\xb7\x5d\x81\xa4\xef\xc8\x82\xbe\x18\x1b\xf8\xb5\x85\x0c\x31\x52\x13\x32\xab\x88\x5e\x01\x1c\xf5\x19\xc8\x19\x12\xf2\x28\x05\x7a\xae\xda\x91\xb7\x84\x56\x7f\x26\xab\xa4\x6a\x61\xc8\x0e\xd2\x85\xc7\x74\xe0\xaa\x61\x11\x7a\x39\x48\xcf\xfd\xac\x7c\x77\xa9\x98\xb1\x08\x9b\xec\xe9\x1e\xbc\xef\x43\x2c\x5a\x85\x20\x6e\xb9\x3b\xdf\x50\x0e\xe1\xf8\x7a\x42\x29\x05\xb7\x8d\x46\xa9\x45\xc7\x57\xb0\xe7\xf2\x4f\xc1\x3d\xef\x27\xe7\x63\x45\x3e\x56\x5f\x19\x4b\xcb\xbb\x90\x45\x96\x3f\xa6\x77\x19\x7b\x57\x16\x8f\xf8\xe1\xbf\x9a\x6d\xca\xa2\xaa\x3e\xde\x1e\xf2\x87\xed\xc7\x4d\xf1\xf4\x8c\x4f\x34\x8c\xeb\xbf\xb2\xc7\x43\x5a\x6e\xee\xd7\x2e\x80\x0a\x24\xa3\xb3\x49\x2d\x55\xc2\x16\x16\x3c\x71\xf1\xc2\x5b\x72\xac\x3c\xec\x30\x8d\x03\xa4\x72\x3e\x20\xaf\x27\x9c\x5a\xf2\x70\xde\x72\x41\x30\x6e\x90\x4e\xc0\x58\x2d\x8c\x5b\xab\x16\x82\x4c\x37\xff\xad\x8f\xe1\xcb\x7d\xf3\x66\xde\x2d\x7a\xe2\x2a\x5c\x39\x0c\xb8\x23\x0f\xa3\xad\x77\xe1\x19\xb4\xa3\x86\x65\xff\x3c\x15\x55\x86\xb7\xbf\xfc\xfa\x1b\x63\xe9\x76\x8b\x38\xa9\xb5\xf6\x61\x86\x89\x5d\x87\x57\xd5\x62\x18\xb4\x9a\x5b\xe7\xf5\x22\x36\xee\x2c\xce\xeb\x22\x6a\xd7\xcc\xe2\x79\x5d\xc4\x80\x18\x0b\xad\x8e\x73\xeb\xdb\x6a\x31\xbc\xd0\x64\xc3\x03\x27\x9f\xb9\x4d\x7a\x59\xcf\x9e\x30\xed\xd2\xb9\x80\xf6\x5a\xbc\xc4\x9e\xdb\xb8\xfd\x8a\x84\xb1\xcd\xe3\xf6\x7f\xbc\xff\x06\x00\x00\xff\xff\x67\xf6\x5a\x09\x3d\x04\x00\x00") + +func testImagesVolumeRbdDockerfileBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeRbdDockerfile, + "test/images/volume/rbd/Dockerfile", + ) +} + +func testImagesVolumeRbdDockerfile() (*asset, error) { + bytes, err := testImagesVolumeRbdDockerfileBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/rbd/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeRbdVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xd0\x33\xe2\x02\x04\x00\x00\xff\xff\xea\xca\x48\xcf\x06\x00\x00\x00") + +func testImagesVolumeRbdVersionBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeRbdVersion, + "test/images/volume/rbd/VERSION", + ) +} + +func testImagesVolumeRbdVersion() (*asset, error) { + bytes, err := testImagesVolumeRbdVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/rbd/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeRbdBlockTarGz = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xdd\x79\x54\xd3\x57\xda\x07\xf0\x20\xd6\x68\x6d\xc5\x2e\x0e\x75\x5c\x42\x5b\x15\x2d\xa3\xb6\x15\x0c\x6b\xa2\x32\x55\xc1\x91\xb4\x58\x57\x96\x48\xad\x52\x16\x09\x0a\xb2\x84\x25\xa8\xed\xd8\xd1\xb1\x52\x22\xa2\x22\xc4\x56\x30\x65\x50\xa8\xa2\x2c\x09\x24\xa8\x43\x11\x65\xd1\x04\x45\x0c\x10\xea\x06\x91\x4d\x20\x10\x48\x48\xf2\x9e\xe9\x79\xbd\xbf\xf7\x3d\xe7\x9d\x73\xe6\x3d\x67\x66\xd2\x69\xbf\x9f\x3f\x9f\x5f\x9e\xe7\x3e\xf7\xe6\xde\xfb\xfb\x87\x13\x18\x87\x26\xd2\xe4\x43\x9a\xcd\x34\xeb\x6e\x55\xc2\x98\x4e\xe7\x5f\xdd\xdf\xd7\xa7\x93\xee\x38\xe1\x35\x69\xc1\x05\x5d\xda\xab\x4e\x4d\xe1\x4b\x37\x4c\x7a\x73\xc1\x82\x15\x2f\x26\xf4\x5d\x2f\x8d\x09\x08\x6f\x0a\x7d\x7d\xe5\x5b\xb3\x72\xa3\x77\x77\x7a\x1c\xfd\x78\x4a\x56\x74\xe4\x49\xcf\xc7\x89\x07\x3b\xc7\x02\x7f\x7f\x34\xda\x2e\xb8\x6b\xf4\xb7\x5d\x4b\x9b\x73\xaf\x7d\xf2\x38\x49\xde\x37\x5c\x5a\xa0\xee\xd2\x8f\xc9\xa4\xc9\x72\x55\x72\x83\xba\x40\x50\xf0\x9a\xae\xdb\x4d\xc3\xca\xe4\x9c\x6f\xdd\x55\x7b\x7b\x15\x77\x24\xca\xbf\xbb\x63\xdb\x11\x96\x7e\x1b\x8f\x11\xdf\xf8\x75\x75\xdb\xb3\xef\xb6\xf1\xe2\x6a\x2f\x54\x47\xc4\x30\xca\x0c\xc7\xdf\xe6\x5d\x0a\x91\xb2\xab\x18\x4d\x5f\xd4\xbb\x46\x99\x27\x05\x5f\x2a\x76\xd9\xa6\x96\x19\x45\xdd\x46\x53\x51\x07\xcd\xac\x6e\x61\x57\x6c\x0f\x8b\x6a\xbc\xc3\xcc\xb4\xaf\x08\x0d\x1b\xec\x2d\x62\x66\x9e\x3f\xc4\xe6\x31\x7a\x3e\xa2\xf3\x96\x36\x08\x1a\x54\x7d\x5b\x76\xee\x5c\x54\xda\xfe\x55\xdf\x7d\xc9\x33\xe3\x53\x59\x67\xc0\x62\x7e\xeb\x34\x85\x8b\xe6\x87\x10\xb7\x9e\x1c\x7a\x40\xff\xf9\x58\xa9\x3a\x93\xd7\x24\x1a\xbc\x97\x51\xae\xd7\xd2\xfd\x1f\xee\x34\xf7\x5f\x2b\xbd\x62\x52\xf6\xf9\xcd\xda\xf5\xe8\xfc\x11\x97\xa1\x79\x25\x92\xfe\x9d\x7d\xb1\xf7\xcd\x8f\x8a\x9a\xf5\x9f\xda\x70\xc7\xce\x31\xfd\x87\x1e\x37\xc8\xaa\xd2\xb3\xf9\x8f\xc5\xfe\xa6\x20\xa6\xa0\x36\xe0\x69\x96\x8d\xf1\x5e\xd1\x21\xc1\x6c\x73\xe6\x14\xad\xd5\xac\x81\xbc\x91\xba\x76\x79\x88\x3d\xf7\xb4\x54\xb1\x5c\x63\xdd\x94\x78\xef\x8a\x2a\x33\x80\x61\x1e\x7b\xe6\xce\xa1\xe7\x7a\x16\xac\x57\xbf\xc0\x32\x8d\xde\xad\xbb\xd8\x7f\x49\x38\xc5\xa3\xfb\x35\x51\xdf\xa9\x54\xae\x17\x3d\x2b\x32\xa5\x49\x24\x6c\x12\x67\x45\x4d\x79\xa6\x8f\x1a\x74\xd0\x9c\x8e\xb2\x79\xa6\x1f\x1c\xd0\x5f\x8a\x6a\xb3\x0a\x14\x24\x27\xcf\x9d\x15\x6d\xb2\x0a\x14\x09\x8a\x95\x3e\x92\xbf\x36\x31\x64\xe9\x0d\x02\x07\x91\xf9\xae\x15\xcb\x5c\xce\xea\x69\xe9\x4e\xe3\xca\xef\x0c\xba\xf7\x68\xad\xdd\xd9\xf6\x0d\xca\x7a\x17\x7a\x1c\x6b\xc0\xbd\xe7\xcf\xd6\xee\xec\xc5\x0d\xca\xfa\x78\x7a\x1c\x6b\xd0\xbd\x27\xc7\xa1\x3b\xf1\x41\xd4\xdd\x62\xa5\x2f\xe7\xed\x3a\x09\x5b\x63\x5e\xb1\xb7\xc1\x4e\xba\xe5\x69\x48\xce\xe6\x12\xe3\xb5\x77\xa6\x84\xe6\x89\xbf\xde\xd1\x3a\x6c\x93\x5f\xea\xbf\xc6\xe3\xb0\x63\x57\xb1\x60\x53\xd5\x95\x85\x43\x8e\x8a\x73\x2a\x53\xd0\x34\xd1\x9d\x9f\xd2\x7a\x18\x1b\x76\x8d\x1e\xe3\xff\x36\xe4\xee\x4e\xf3\xf7\x07\x3d\x49\x76\xc1\x2d\xf2\xf8\x33\x92\x3d\xcd\xef\xf9\x63\x96\x34\x37\x7b\xe5\xc9\x3d\x2a\xf6\xb9\x07\xde\x54\x49\xe5\xf3\x9c\xfe\x32\x12\xdc\x18\xf1\xbc\x8d\x91\x72\x32\x4e\xfe\xa5\x46\xe5\xea\xa2\x08\xc3\x81\xf5\xfe\x97\x49\xa1\x50\xaa\x90\x9a\x0c\x3e\x44\x72\x16\x7f\x46\x0a\x5d\x25\xc1\x30\x52\x28\xf1\x23\xd2\xa6\x13\x69\xb3\x80\x9a\xe4\xa6\xe7\x8f\x3f\x08\x7b\x5e\xc7\xb9\x9c\x8c\x7d\x88\x4a\x69\x25\x93\x98\x4b\x1a\x6a\x0a\x21\x63\x2b\xa8\x86\x48\xa1\xd2\x08\x32\x76\x46\x09\x99\x59\x21\xa9\xae\x27\x85\xb8\xb7\x49\xf5\x74\x12\x5c\x45\x26\xd1\x72\xfa\x79\xce\x27\xb1\xa4\xe4\xd7\xe4\x83\xcc\x70\xd2\xfa\x5f\x48\xf1\x4e\xd2\xd0\x8c\xcb\xcf\xeb\xcc\x24\xdf\xc4\xae\x70\x52\xe7\x30\x99\x63\x84\x82\x3c\xa6\xb6\xc6\x46\x92\x9d\xb8\x87\x04\x9b\xa8\xd6\x2e\x91\x11\xc3\xa8\x42\x77\x49\xa1\x41\xd2\x86\x1f\xf5\x9d\x04\x90\x42\x0b\xa9\x1c\xea\x3b\xe9\x22\x39\x85\x3c\xb2\x96\x6b\x49\x0e\x93\x1a\xbc\x98\x0c\x3e\x83\x14\x92\xe5\x91\x60\x0c\x59\x22\x75\x0b\xa9\x6e\x20\xd5\x79\xd4\xd7\x77\x97\x04\xdd\xa8\xea\x17\x48\x21\x15\x39\x00\xbd\x8d\xa4\x50\x07\xc9\x91\x52\x53\x4b\x20\x6d\x06\x50\x1d\x9d\x21\x85\xdc\x48\xb0\x97\x5a\x23\x1d\x29\x94\x40\x0a\xcd\x24\x7b\xfd\x36\x49\xf1\x21\x5b\xdd\x99\x6a\x2d\x87\x24\x0b\xa9\x0f\x92\x89\x39\x53\xe7\x28\x9b\x2c\x86\x8e\x5c\x01\xce\xe7\xc9\xe3\x36\xea\x31\xc9\xbe\x47\xed\x17\x3e\x99\x57\x1b\x19\x30\x89\x4a\xd9\x49\xbe\x27\x2e\xf9\xe0\x74\xf2\x38\xb8\xf8\xf9\xb4\xba\xc9\x17\xea\x9c\x4f\x86\xa6\x2e\x27\x19\x75\x7f\x74\x93\x61\x0c\xe4\xec\xb8\x93\x73\xf0\x20\x81\xca\x29\x21\xc1\xbd\x64\x44\x1b\x32\xc5\xb8\x48\xd2\x90\x0b\xf5\x98\x4c\x31\x8e\xba\xc6\x74\x64\xa7\xbb\x9f\x23\x25\x0d\x64\x51\x67\xb7\x91\x33\xfa\x25\xe9\x8d\x41\xbe\x92\xb8\x4f\x49\x21\x1b\x32\xdd\xb1\x0f\xa9\x20\x99\xc5\xd8\x6a\x12\x3c\x42\x7d\x92\x5c\x44\x55\x67\xc8\xd4\x92\xa9\x9b\xe8\x36\xe9\x9d\x4d\xdd\x15\x42\x12\x3c\x42\x6d\xe5\x3c\xd2\x9c\x88\xba\x63\x4f\x50\x41\xf2\x55\x8d\x94\x91\x60\x35\xe9\xc3\xbd\x80\x0c\xd9\x4f\xaa\x73\xa8\x3b\x96\x7a\x29\x90\x36\x76\x51\xd7\xdc\x6b\x64\xb5\xb2\xc9\x39\xe9\x7f\x44\x52\xb8\x54\x9d\x2a\x12\x14\x93\x3d\x3f\xe6\x4b\x0a\xad\x23\x85\x92\xcb\x48\x43\x1b\xa9\x85\xa1\xb6\x75\x08\xd5\x25\xd9\x5b\x71\x2b\x49\xa1\x25\x54\x21\x6a\xaf\x37\x51\x41\xea\x68\x32\xa9\x20\xb5\x35\x37\x93\xea\x72\xea\x05\xe0\x46\x05\x55\x24\x98\x40\x82\x0d\x64\xd9\xe3\x7c\x48\x1f\x51\xd4\xca\x34\x91\x9c\x31\xb2\x08\x83\x64\x6a\x81\xe4\x0d\xdb\x4f\xbd\xcf\x6c\xc9\xd6\x2c\x2f\x25\xbd\xe9\x48\x49\x13\x75\x2e\x6c\x48\x30\x90\xdc\xe6\xfd\xd4\xcb\x29\x83\x2a\x44\xed\xad\x69\xa4\xf5\x42\xf2\x26\x89\x5b\x4f\x5a\xcf\xa7\x4a\x52\x6f\xf2\xfb\xa4\x64\x13\x29\x39\x46\xbd\x6b\xbb\x48\x4e\x1b\x35\x9f\x6a\x32\x0e\x8f\x1a\x67\x1d\xc9\x11\x51\x1b\x21\x84\x0a\x52\xd5\xe3\x49\x90\x4b\x7d\x72\x3b\x15\x24\x9f\xac\xa5\x96\x95\x5a\x22\x09\x99\x6e\x1d\xd5\x06\x75\x6a\x32\x49\x4e\x09\x39\x0b\xe5\xd4\x8e\xe1\x51\xf3\xa1\xae\x81\xaf\x48\x8e\x9c\xbc\xf3\x47\xa8\xd7\x4b\x2c\x75\xb8\x3d\x49\x97\xd4\x5d\x67\xa2\xee\x70\x11\x15\xa4\x76\x3b\x97\x04\xdb\xa8\xad\x97\x4d\xaa\x0b\xc8\x39\x8e\xe3\x91\xea\x06\x2a\x87\xbc\x3f\xfa\xf7\x92\x1c\xea\x62\x4a\xfc\x8e\x8c\x73\x8d\x2c\x07\x83\x2c\x47\xe9\xf3\x0d\xf5\xbb\x87\xcf\xa2\x57\xb8\x32\xb3\xb8\x7f\xab\x59\x7c\xd1\x7c\xbe\x5b\xe0\x60\x50\xbb\xca\xff\x56\x23\x3c\xd8\xac\x6a\x36\xc7\x0c\xcb\x93\x92\x7f\xca\x69\xf7\x75\xed\xf6\x35\x99\x64\xaa\xca\xed\x1d\xfb\x1c\x02\xee\x32\xae\x88\x55\xb9\xc6\xaf\xe8\x22\x97\x45\x5b\xaa\x06\xd5\x83\xc3\xd2\xc0\x46\x71\xd4\xe1\xbe\xf2\xf8\xe4\x7b\x7b\xbc\xe4\xe6\xfa\x1d\x86\x6d\x7d\xeb\x04\x2b\xe3\x0a\xd9\xf3\x9f\x2d\x88\xac\xf7\x1c\xb8\xd6\x1b\x20\x65\xf5\x77\xf1\xc2\x8a\x92\x3a\x73\x0d\xb1\x7d\xf7\x4d\x0d\xea\x03\x37\xef\xc6\x0f\x19\x83\x75\x73\x93\xcc\xcd\x6d\xfe\xc6\x4f\xfa\x74\xb2\x44\x73\xbc\x40\xbf\x4c\xbf\x55\xff\xa1\x3e\x52\xbf\x5a\xb2\xb5\xeb\x6a\xac\x3a\x3c\xb7\xe7\xd2\xa0\x7a\xa4\xcf\xf4\x28\xd1\x78\x87\x71\x65\x91\xa6\x8b\xd7\xf4\xe4\xdb\x12\x45\x81\xf5\xd8\x64\xd3\xe4\x02\xc3\x80\xf0\x08\xfb\x7a\xd3\x5b\xb4\x5f\x15\xb3\x4d\xb8\xd8\x93\xe9\xa7\x5a\x35\x66\x50\xa9\x54\xab\x1e\x95\xae\x68\x93\xdd\x78\x92\xda\xe3\x61\xa8\x6f\x11\x18\xd7\xe9\xb2\x2e\xeb\x1e\xf1\x8b\x9b\xcb\x93\x3b\x52\xcf\x2b\x87\xb3\x13\x6f\x34\xaf\x6a\x09\x33\x6b\x12\x16\x29\x6d\x66\x95\x1e\x0d\xed\xb0\x55\x9b\xa5\xb1\x2c\x89\x60\xeb\x2b\xd2\x45\x5d\x36\xb4\xd2\xda\x7b\xec\x73\x37\x4d\x41\x01\xc3\x36\x5d\x17\x05\x9b\x32\x8c\xd7\x24\xdd\x8c\xbb\xdb\xcd\xdf\x2f\x32\x1c\xd8\xd3\xfc\xd3\x23\x2f\x95\x5f\x66\x5d\xfd\x93\x33\xea\x71\x53\xbc\x33\xd6\xd0\xc5\x0d\xde\x19\x9c\x03\xe1\x8b\xf4\x6e\xe3\x32\xeb\xa6\x29\x83\xc5\x0e\xb9\x0d\x5e\xa2\xcc\x82\x53\x2c\xde\x3a\xc1\xc6\xcf\x8a\xca\x42\x25\x5b\xf4\x63\xd1\x43\xda\x17\x34\x93\x95\x4e\x0a\xdb\xdc\xb0\xb3\x61\xb9\xd7\x7c\xd7\x1c\x10\x2f\xf6\x69\xf2\xe1\xa6\x15\x08\x65\x8e\x49\x9b\x25\x11\xfa\x81\xe8\x8a\x68\xa3\x76\x9a\xc6\x61\x9d\xf1\xce\xe7\x33\x72\x5a\x35\xd7\xa3\xaf\x45\x7f\xec\xea\xda\x3a\x7f\x96\xf0\xab\xb5\x4c\x1f\xa6\x57\x75\x6e\xa1\x37\x37\x4b\x36\xaf\xd5\x31\x69\xa7\x64\xb3\x24\x5e\xf2\x81\x5e\x12\x7d\x33\x3a\x3f\xba\x4b\x3b\xa4\x59\xaa\x99\xa1\xd8\xa9\x64\x9e\xe5\x79\x97\xac\x51\x9f\x8a\x10\xc9\xe6\x26\x85\x49\x3c\x25\xdb\xf4\xc5\xd1\xe2\xe8\x8e\xe8\x0c\x6d\x8f\xa6\x40\xe3\xa6\x88\x3d\x2b\xcd\x95\x8a\x13\x72\x1e\xae\xe3\xd8\xe7\xbc\xa6\xf4\xd2\x3c\x8a\xf6\x76\x75\x6a\x5d\xd2\xea\x90\x75\xac\x37\xab\x57\xf8\xb4\x70\x4b\x56\xf6\xf0\xd9\x24\x8d\x4c\x93\xac\xf9\x73\xf4\x8e\xfb\xa2\x7a\x6f\x75\xba\xcc\x2d\x2b\xab\x57\x34\x3b\x55\x66\x9f\xc4\xe3\x6f\xe5\x7f\xc8\x8f\x74\xb5\xf7\x98\xe3\xe1\x98\xc4\xe5\x6f\xd2\x9b\xb4\xcf\xb4\x5f\x6a\xad\x35\x5f\x6b\xe8\x4a\x9b\x5c\x86\x0f\x3b\x2d\xd9\xd1\xb8\x89\xff\xb1\xbe\x5f\xdb\xa9\x7d\x4d\x63\xaf\xdc\xa6\xe0\xe4\x8a\x7c\xd8\xc2\xe4\xa5\x46\x7f\x7e\x38\xdf\x9f\x9f\xc8\x5f\xa1\x1f\x75\x54\x94\x69\xfe\xa4\xf1\xd2\xd4\x68\x6c\x15\x8b\xcf\x8a\x73\xb8\xde\x9c\xb5\xf2\x53\xc9\x73\x8d\xa1\xfc\x2d\x7c\x3e\x7f\x25\x7f\x87\xfe\xb2\xb6\x4b\xc3\x54\xf0\xce\xaa\xbd\x1b\xbc\xe5\x59\xc9\xf6\xc6\x08\x7d\x85\xb6\x5b\x7b\x4a\xdb\xa2\x2d\xd7\x8e\x45\x07\xf2\x97\xf3\x83\xf8\x1f\xf1\x77\xe9\x8d\x5a\xba\xc6\x46\xb9\x46\xb1\x46\x79\x53\x71\x53\xe9\xa0\x70\x50\xe6\x2b\xf2\x95\x61\x8a\x30\x65\x97\x82\x91\xdb\x24\x66\xe6\xb0\x7d\x78\x7f\xe0\x79\x0b\xd2\x4c\x8e\xc6\xcd\xfa\x41\xad\xad\x66\xb1\x92\x9b\x7b\xa2\x9e\x23\xc8\x6a\x3b\xd5\x96\x66\x9a\x57\xe1\x54\xb1\xd0\xb8\x93\x9f\xc0\x5f\xa5\x97\x6a\x75\x9a\x2c\x0d\x43\x21\x55\xb0\xcf\x0a\xbc\xcd\xa7\x4c\x73\x2b\xdc\x2a\xec\x8d\x61\x7c\x1e\x9f\xcb\xff\x9f\xa7\xd2\x6e\xe7\x45\xc3\xf9\xf3\xfc\x6d\x86\x59\x7e\x0c\x0f\x26\xaf\xbc\xcf\x33\xec\x29\xa3\xa3\xfd\x66\x45\x9e\xcc\xc3\xbf\xb4\x8e\x9f\xfc\x64\x41\x82\x8f\x2a\xe1\x6e\xb3\xb9\xbf\x35\xc5\xec\x59\x7f\x3f\x41\x21\xab\x10\x67\x17\xeb\x8e\x0a\x8f\xb0\xbb\x4a\x93\xec\xdb\x0c\x47\x85\xc3\x0c\xc1\x0f\xbb\x82\x7b\x5a\xa3\xae\xfe\x49\xdc\x5d\xb3\xb8\x97\xdd\x5b\xdb\x9a\x31\x54\x3d\xd1\xd2\x07\x0b\x2c\x21\x71\x47\x59\xdd\x82\x84\xe1\xee\x30\x71\xf6\x85\x3e\x6d\xcc\x01\xbf\x96\x81\xd4\x9b\xfa\x6b\x56\x96\xee\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xef\x32\x1d\xce\xd2\x6f\x3c\xfc\xd6\xc1\x33\x34\xf7\x22\xa6\xe7\xad\xdf\x8f\x5f\x3e\xf5\xaf\xec\xf8\x09\x33\xdc\xce\x54\xa4\x7f\x31\xf1\x37\x99\xf4\xef\xbf\x5f\x37\xf9\xc4\x8a\x84\x19\x0e\x99\x39\x53\xfb\x5f\x08\x7f\xbd\xe5\xea\x8a\xa9\x97\x2e\x72\x3e\x7c\xdd\x21\x3f\xfa\x2a\xff\xea\xfc\xf0\xd5\x05\x53\xf7\x2d\xba\xae\x5b\x78\xe0\xc7\xb6\x25\xec\xe3\x93\xdd\xac\x2d\x3d\x25\x00\xcb\xa1\xef\x61\x8e\xb6\x2c\xb5\xf5\x71\xaa\x53\xea\x76\x16\x25\x89\x43\xee\x37\x9b\xc6\x52\x57\x1d\xba\x36\x30\x34\x5c\x32\x63\xed\x92\xac\x40\x03\xab\x85\x79\x8e\x2e\xef\x38\x96\xc6\xca\x3f\x54\xf6\x55\x5a\x5a\x0b\x7b\xf8\xf1\x93\x1e\xce\xc6\xea\xc2\xec\x72\x63\x64\x57\x9b\xa6\x50\xa0\x71\xec\x11\xdd\x60\x2e\x66\x65\x27\xea\x06\x6e\xf4\x77\xd8\x67\xcf\x8a\x8f\x1c\xed\x1f\xca\xca\xcc\x10\xec\x29\xea\x18\x09\xb6\x19\x1f\xb5\x61\x80\x1e\xb0\x5a\xf2\xa8\xfa\xc4\x81\x43\x67\x76\x04\xc5\xca\xd3\x58\x9a\xb4\x33\xc1\xb1\xb2\x71\x52\x43\x8c\x53\x5f\x9c\x6f\xda\xe3\xa8\x04\xc3\xc5\x63\x59\x39\x7e\xf9\xb5\xba\x13\x1c\x6f\xee\x09\xf5\x75\x1f\xc5\xce\x8f\x9f\xd8\x9f\xe0\xdc\xc8\x79\x5f\x9e\x9e\x95\xa3\xfa\x4b\x6d\x07\xd3\xdb\xfb\x62\xdf\x98\x77\xe6\x60\x89\x8b\xc0\xcf\x45\xf0\x44\x78\x51\x62\x4e\x74\xf3\x11\x1d\xdd\x95\xdb\xa7\xb4\xcf\x2d\xd4\x76\x69\x84\x17\x03\x35\xf6\x1a\xe1\xfb\x79\xda\x4c\x8d\x30\xed\x77\xe9\x15\x1e\x96\x5e\x64\xcb\xaa\x3d\x39\xfb\x46\x6e\x3c\x9b\x55\x69\x35\xb3\xf7\x10\xdd\x2c\x8c\x97\x1f\xb6\x74\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x7f\x7a\x26\xcc\x72\xfd\xce\x8a\x46\x0b\xb2\x9b\x67\x65\x0e\xbd\x62\xb5\xf8\xd5\xd5\x9f\x4d\x6b\x09\xc6\x9f\x35\xc0\xaf\x4c\x44\xcd\x86\xf0\x0e\xab\x97\x9e\x32\x6c\x58\xcd\x81\x6f\x5b\xba\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x7f\xba\x2a\x1f\x63\xd1\x86\x97\xab\x82\x68\xac\x32\xf1\x37\x9f\x39\xec\xb3\x9b\xf8\x40\x94\x3c\xc1\x96\x99\x2f\x15\xee\x9f\x38\xa5\x84\x51\x79\x65\xed\xac\x39\xfb\x7b\x17\xf9\x2c\xea\xb1\x7b\x60\x1b\xf9\xd1\xb3\x29\x53\xf6\x9d\x16\x26\x1c\xfa\xd6\xd9\x65\xcf\x6b\x05\xbc\x3f\x5d\x5d\xb8\x73\xfc\x02\xfe\x07\xd9\xf6\xe5\x9f\x9f\x62\xb2\xaf\xef\x9d\x63\xe9\x09\x01\xfc\xbf\x99\x8f\xab\x6a\xaa\xcf\x9e\x72\xfb\xe8\xc6\xc3\x92\xb5\xcd\xb2\xf5\xde\x4b\x54\xa2\x9e\xc1\xad\x17\xe4\x89\x65\xc6\xc7\x5b\x16\x28\x35\xe9\x85\xc6\x24\xe3\x9e\xbe\x8e\x16\x5f\x45\xfa\x96\xfa\x0e\x77\xef\xd0\xdd\xba\xeb\xe2\x2e\x26\xdb\x7f\xb6\x3c\x4e\xab\x6f\x3d\xec\x66\xcf\x36\x7f\xd3\xea\x28\x7f\x87\xeb\x91\x20\x18\xab\x1b\x5c\xb3\x4a\x34\x3b\x61\x77\x67\x5b\xd5\x81\x8d\xb1\x11\x81\xa6\xdb\x75\xbd\x0f\x0b\x3d\xa6\xd6\x6e\xae\x9b\x2c\x49\xbd\x54\x53\xb2\x4e\x67\xbb\x6a\xfb\x4f\xbf\x73\x10\x22\xbc\x26\x8e\x35\x8d\x93\x1a\x76\x38\xa9\xe3\x7c\x85\x8f\x97\x24\x18\x24\xc7\xd2\x73\x02\x66\x1c\xef\x7b\x5f\xd4\x18\xb1\x35\xf9\x6d\x07\x2f\xe9\x7b\xef\xb2\x6b\x12\x7d\xed\xad\x07\xfd\x36\x7b\xdd\x3f\xbf\x77\x74\xe6\x99\x9c\x79\x86\xfa\x42\xc7\x66\x81\xd0\xc8\xb4\x36\x34\x24\xfa\x6e\xd4\x89\x78\x3f\x68\x84\xae\xb3\x3b\xa5\x5a\xaf\x9e\x09\xfa\x21\xad\x57\x00\xa3\xd3\x5e\x23\x74\x9d\xde\xc9\x54\xda\x3b\x6d\xfe\x4b\x42\x82\xa5\x57\xd9\xb2\x8e\x3b\x79\xa4\x4e\x1e\x4c\x4e\x4c\x51\x47\x7e\xcf\x9e\x3d\xc6\x79\x62\x74\x1a\x67\xe9\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x5f\xaa\x32\x36\xe6\xe9\xe9\x09\x34\xda\xe7\x7b\x8f\x8f\x1f\xcb\x7f\x81\x5e\xbe\xda\xee\x9b\xf5\x91\xa2\x97\x2d\xdd\x17\xc0\x3f\xa4\x74\xae\xdf\x85\x2c\xfa\xbb\xdf\x09\xdc\x47\x3e\x4d\xc0\x6f\xf9\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x5d\xaf\xbb\x0d\x35\x6c\x71\x7a\xfd\x80\xd5\xc8\xa3\xec\x3f\x7e\x7b\x7e\xe2\x3e\xbb\x2f\x05\xfa\xe9\xfe\x2d\xe7\x7a\x7d\xa6\xbc\xe5\xdc\x92\x4c\xa3\x33\xf7\xa4\xbe\x24\x91\x3a\x97\x5d\xda\xff\x25\xb7\xf2\x83\x2b\x6e\xce\x13\xf7\xf9\xf4\x2e\x3c\xf8\xe0\x51\xe3\xda\x52\xd9\xdc\x17\x4b\x2e\xbd\x92\xd3\x39\x2d\x3e\xfb\xd9\xab\xbb\xdb\xc6\xec\xe8\x69\x96\x9e\x10\xfc\x7a\x8c\x6d\x8b\xb0\x67\x64\xee\xee\xfd\xfd\x82\x23\xea\xa5\xdb\x0d\x1b\x16\xd4\x85\x0b\x8a\x1b\xf6\x57\x99\x06\x1e\x0f\x67\x84\xe5\xfe\x41\xbc\x51\x36\xac\x1b\x6a\xaa\x10\x45\xad\xf1\xda\x78\x7f\x37\xab\xe3\x23\x5f\xa1\x74\x15\x2b\x40\x3e\xfa\xe3\xc0\x48\xd5\x99\xa6\xbe\x88\x16\x97\xd1\x51\x9b\x9e\xb3\xa3\xeb\x47\x9f\x36\x1b\x1e\xf2\xb2\xb9\xae\x7a\xed\x3d\xa1\xa7\x6e\x11\xab\x5c\x12\x35\x38\x70\x24\x22\x86\x21\xe8\xd9\xbb\xb5\x3e\x34\xf0\xd6\x17\x39\x6b\x65\x59\x12\xb9\xf3\x3b\x93\xa5\x86\x74\xad\x57\xe6\x4c\x56\xc5\xa0\xed\xbd\x56\x66\xfe\xe8\x0f\xc2\x93\xbf\x13\x35\xab\x9a\x2e\x9f\x9b\xd3\x73\xbf\x32\x31\x63\x34\x27\xc6\x7a\x70\xc6\x66\xaf\xfb\x87\xf7\x8e\x7a\x3d\x11\xba\x4e\x3f\xae\xbe\xe1\xad\x88\x78\xb9\xb6\xe3\x8d\xb9\x4e\xcd\xb1\xc9\xb9\x35\xa6\xcc\x6e\xf9\xf4\x7b\x82\x27\x42\x89\xc4\x9c\xb8\xc4\x47\xd4\xd8\xbf\x4c\x9d\xcb\x09\x65\xde\x2a\x14\x73\x9e\xea\x97\xb1\xbd\x44\x8d\x35\xcb\xe4\x27\x58\x79\x35\xbe\xad\xaa\x5f\xf7\xbf\x37\xa9\x3c\xa7\xd9\xeb\x7f\x5c\xf7\xd0\x7a\xec\x8f\xfb\x8d\xfd\xed\x82\xf7\xfb\x0a\x5f\xb1\x74\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x1f\x42\x56\xb4\x8e\xee\x44\xa3\xd9\xbd\xf4\xd7\x39\xed\xdc\x85\xce\xed\x1f\x8c\x9b\x74\x7e\x9f\x21\xdc\xd2\x6d\xc1\x2f\x5b\xe5\xc2\xe6\x83\x3d\xee\x29\xcb\x8d\x0f\xaf\xd8\xab\xc2\xc6\x5b\xba\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x5f\xbe\xd3\xf7\xf2\x04\x77\xe6\x7f\xeb\xfc\x62\x65\xec\xf0\x8e\x4d\x8e\xaf\x2c\x9f\x3a\xee\x81\xc8\x7d\xff\xe1\xac\xdb\x6d\x37\x56\x8c\x3f\x54\x67\xbd\xe9\x5e\xde\x17\xe1\xdf\x54\x1c\x4e\x5f\xeb\xfb\xe5\xc8\xb8\xa5\x2f\x46\x04\xbd\x39\x71\x4b\xb3\xfd\xfc\x57\x1c\xf2\xa3\xaf\xf2\xaf\xce\x0f\x5f\xbd\x32\xf5\xb4\xc3\x40\xd2\xb5\xa0\xe3\x09\x4f\xe8\x51\x41\x3b\x2c\x3d\x23\xf8\xd9\x33\xbd\x17\x9b\xc6\x59\xeb\x22\xf7\xbf\x21\x8c\x5d\xdb\x5c\x16\xe0\xbd\x44\x25\xea\x1a\x88\xbc\x17\x20\xbb\x3f\xba\xbb\xe2\xa8\x46\xfb\xb4\xa9\x57\xd6\x2b\x19\x8c\x8a\x78\x6f\x7a\x46\x50\x59\xea\xa0\x5d\x5e\x4d\xc5\x36\x15\x33\x22\xa9\xfc\x7d\xfe\xe8\x48\x9d\x21\x33\x96\x93\x64\xf2\x94\x86\x24\xaf\x97\x25\x9b\x7e\x7c\xa4\xb2\xcd\x38\xc2\x76\xeb\xd7\x5e\x37\xae\x39\x52\xd0\xd3\x56\xae\x3d\x93\xd9\x5a\xcd\x4d\xb0\x3b\x5e\x74\xd2\x36\xfa\xcd\x10\x21\x4f\xcc\x78\x89\xbe\x3d\x88\x27\x4f\x63\x85\x08\xcf\x04\xc7\x98\xc7\x25\x18\x76\x38\xa9\xe3\x7c\x85\xb9\x45\x06\x83\xe4\x58\x7a\x4e\x40\xd7\x09\x46\x30\x2b\xef\x61\xf6\xe8\xe1\x73\x73\x7a\x56\x36\x8c\xcd\x19\xf4\xca\xd2\xd6\xf2\xb6\xcf\x0d\x29\xe1\x3f\x89\x7a\x29\xed\xe4\x4c\x67\xb9\xe2\x53\xf3\xda\x61\xb5\xb6\x9b\x3d\xe8\x15\xe0\x11\x27\x9b\x9e\xcb\x79\xfa\x9d\x98\x21\xe6\x3c\x2d\x15\x73\x39\xa2\xc6\xa1\xec\xe4\x34\x56\x9e\x30\x3b\x79\x49\x92\xaf\xb0\x4a\x22\xa7\x5b\x7a\x99\x2d\x2a\x65\xb3\xd2\xb3\xcc\xb9\xaf\x9a\x3e\xf2\xf2\x01\xc3\xc3\x2b\xe6\x4f\xdb\xb8\x6f\x5b\xba\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xb5\x49\x0c\x16\x4f\x09\xa5\xd1\x96\xbd\xf1\xa5\x57\xa5\x7c\x4b\x64\xe5\xa1\xf1\xaf\x6e\x79\x41\xd7\x6c\xe9\xb6\xe0\x67\x29\xc5\xef\xe2\x34\x55\x3c\x6d\xbf\xbe\x7a\x3f\xa7\xb8\x69\xa2\xa5\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x7f\xd8\xb2\x0b\xeb\xcc\xe7\xd6\x7b\xee\x7a\x23\x85\xd3\x1b\x32\xff\xf2\xb4\xe5\x53\xc7\xf7\x73\xd8\xfb\x0f\x65\xde\x69\xad\x59\x3e\xfe\x80\xca\xa6\xbd\xfd\xec\x94\xb4\xe5\xb1\xb6\xf6\x19\x31\x53\xfb\x27\x97\xce\x8f\xa3\xd3\x97\xdf\xaa\x69\xfd\x76\xbe\x8f\x4f\xeb\xe7\x5d\x7e\xdf\x46\xae\x99\xb1\xfc\x60\xe0\xd7\x1d\x93\x16\xbf\xd9\x51\x67\xb3\xdb\x6e\x92\xa5\x67\x04\xff\x22\x95\xec\x27\x1b\x06\x2e\x2c\x08\x3e\x92\x31\xd0\xb9\x76\x5d\x31\xef\x98\xa2\x76\x38\x58\xdf\xc2\xed\x5e\xcc\x0d\x17\x94\x6d\xb9\x11\xcd\x1f\x0d\x13\x70\x05\xad\x06\x97\x92\x53\xd1\xdb\xf3\x4e\xdd\x8c\x3f\xda\xf8\xa8\xfe\x47\x4e\x53\x44\x62\xa9\x63\xb2\xe9\xd9\x1d\x55\x57\x09\x27\xf1\xbf\x7f\xe9\x20\x51\xdf\x7b\xaf\x2b\xd8\xf6\x88\xbb\x8b\x3e\x4e\xd3\xfb\x05\x7d\x63\x4c\x44\xe0\xe8\xed\xba\xde\x87\x85\x1e\x53\x6b\x37\xd7\x4d\x96\xa4\x5e\xaa\x29\x11\xea\x7e\xb3\x6a\x7b\x50\xac\xfc\x24\x2b\x44\xe8\x29\x8e\x31\x8d\x93\x1a\x76\x2c\x54\xc7\xf9\x0a\xd3\x95\x09\x06\x49\x76\x7a\x4e\x00\xe3\x78\xdf\xfb\xa2\xc6\x88\xad\xc9\x4b\x1c\xbc\xa4\x2e\xef\xb2\x6b\x12\x7d\xed\xad\x07\xfd\x36\x7b\xdd\x3f\xbf\x77\x74\xe6\x99\x9c\x79\x86\xfa\xc2\xa5\xcd\x02\xa1\x91\x69\x6d\x68\x48\xf4\x6d\x1a\x16\xf1\x7e\xd0\x08\x5d\x67\x77\x4a\xb5\x5e\x3d\x13\xf4\x87\xb5\x5e\xad\x6f\x74\xda\x6b\x84\xae\xd3\x3b\xd5\x62\x4e\xe8\x45\x7f\xdd\xb0\xa5\x97\xd9\xb2\xde\x0d\xe3\xdb\x75\x74\x18\x47\x68\xf2\x1f\xb7\x0a\xdc\x47\x44\xb5\x06\xfc\xc3\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x4f\x95\xd2\xd7\xdd\xb8\xfc\x65\x1a\x6d\xa2\xf5\x7b\x93\x46\x36\x4e\x9e\x12\xf7\xf5\xb2\x15\xf9\xed\xac\x19\x96\xee\x0b\xfe\x99\x22\xd7\x14\x7f\xe2\x66\xb3\xf5\x43\x73\xdc\xb3\x9a\xe1\xdf\x5a\x59\xba\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xf7\x9b\x1f\xf3\xf4\xf4\x04\x1a\xed\xf3\xbd\xc7\xc7\x8f\xe5\xbf\x40\x2f\x5f\x6d\xf7\xcd\xfa\x48\xd1\xcb\x96\x6e\x0b\xfe\xb7\xf6\x63\xe1\x55\x31\xb3\x2b\x4f\x9b\xfa\xdb\x85\x3d\x4e\xe3\x2c\xdd\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xa7\x79\xdd\x6d\xcf\x87\xd6\x34\xda\xd5\x65\x7f\x18\x67\xba\xb3\xcf\x3a\x70\x4e\xea\xad\x77\x4a\x1b\x26\x58\xba\xad\x5f\x9e\xca\x85\xcd\x07\x7b\xdc\x53\x96\x1b\x1f\x5e\xb1\x57\xe1\x67\xea\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xdf\xeb\x60\x96\xeb\x77\x56\x34\x5a\x90\xdd\x3c\x2b\x73\xe8\x15\xab\xc5\xaf\xae\xfe\x6c\x5a\x4b\xb0\xb5\xa5\xdb\xfa\x39\x4a\xf1\xbb\x38\x4d\x15\x4f\xdb\xaf\xaf\xde\xcf\x29\x6e\x9a\x68\xe9\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\x71\x55\x3e\xb3\x1a\x69\xb4\x94\x77\xa7\x0a\x53\x04\x97\xdb\x53\x6c\x27\xcd\xb9\xf4\x62\x6f\xd1\x2f\xf5\x5f\xd4\x97\x7c\xea\x50\x3c\x48\x9b\x30\x74\x84\x2e\x0a\x2f\x7c\xc5\xd2\xdd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x9b\xa4\x84\x8a\xbe\xf2\xa6\xa5\x04\xbd\xf1\xa2\xf7\xf1\xc7\x2e\xea\x99\xda\x42\xc7\x2f\xdc\xac\x6d\xc6\xfd\x7c\xff\x40\xe0\xfa\x80\xb7\xd8\x4d\xd0\xc5\xba\x95\x67\x68\x8f\x3f\x6b\x7b\x60\xa6\x92\x87\x1f\xeb\x07\xf8\x35\xda\x9a\x61\xe3\x3a\x33\xa0\x8a\xf6\x46\x2a\xfd\xbf\x02\x00\x00\xff\xff\x0b\x13\x25\x27\xf1\xf6\x01\x00") + +func testImagesVolumeRbdBlockTarGzBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeRbdBlockTarGz, + "test/images/volume/rbd/block.tar.gz", + ) +} + +func testImagesVolumeRbdBlockTarGz() (*asset, error) { + bytes, err := testImagesVolumeRbdBlockTarGzBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/rbd/block.tar.gz", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeRbdBootstrapSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x55\xdb\x8e\xdb\x36\x10\x7d\xd7\x57\x9c\xb5\x0b\x24\x01\x6c\xc9\xbb\x4d\xd3\x36\x01\x0a\x78\x2f\x45\x8c\xa4\x76\xb0\x76\xba\xc8\x53\x41\x89\x23\x8b\x58\x8a\xa3\xf2\x62\xaf\x5e\xfa\xed\x05\x29\x39\xd9\x4d\xd0\x00\xf5\x83\x61\x92\x73\x39\x73\xe6\xcc\x78\x7a\x56\x04\x67\x8b\x52\x99\x82\xcc\x01\xa5\x70\x4d\x96\x4d\x71\xc5\x5d\x6f\xd5\xbe\xf1\xb8\x58\x9c\xff\x84\x5d\x43\x78\x17\x4a\xb2\x86\x3c\x39\x2c\x83\x6f\xd8\xba\x3c\x9b\x66\x53\xbc\x57\x15\x19\x47\x12\xc1\x48\xb2\xf0\x0d\x61\xd9\x89\xaa\xa1\xd3\xcb\x0c\x7f\x92\x75\x8a\x0d\x2e\xf2\x05\x9e\x47\x83\xc9\xf8\x34\x79\xf1\x26\x9b\xa2\xe7\x80\x56\xf4\x30\xec\x11\x1c\xc1\x37\xca\xa1\x56\x9a\x40\x0f\x15\x75\x1e\xca\xa0\xe2\xb6\xd3\x4a\x98\x8a\x70\x54\xbe\x49\x69\xc6\x20\x79\x36\xc5\xa7\x31\x04\x97\x5e\x28\x03\x81\x8a\xbb\x1e\x5c\x3f\xb6\x83\xf0\x09\x70\xfc\x34\xde\x77\xaf\x8b\xe2\x78\x3c\xe6\x22\x81\xcd\xd9\xee\x0b\x3d\x18\xba\xe2\xfd\xea\xea\x66\xbd\xbd\x99\x5f\xe4\x8b\xe4\xf2\xd1\x68\x72\x0e\x96\xfe\x0e\xca\x92\x44\xd9\x43\x74\x9d\x56\x95\x28\x35\x41\x8b\x23\xd8\x42\xec\x2d\x91\x84\xe7\x88\xf7\x68\x95\x57\x66\x3f\x83\xe3\xda\x1f\x85\xa5\x6c\x0a\xa9\x9c\xb7\xaa\x0c\xfe\x09\x59\x27\x74\xca\x3d\x31\x60\x03\x61\x30\x59\x6e\xb1\xda\x4e\x70\xb9\xdc\xae\xb6\xb3\x6c\x8a\xbb\xd5\xee\xed\xe6\xe3\x0e\x77\xcb\xdb\xdb\xe5\x7a\xb7\xba\xd9\x62\x73\x8b\xab\xcd\xfa\x7a\xb5\x5b\x6d\xd6\x5b\x6c\x7e\xc7\x72\xfd\x09\xef\x56\xeb\xeb\x19\x48\xf9\x86\x2c\xe8\xa1\xb3\x11\x3f\x5b\xa8\x48\x23\xc9\xc8\xd9\x96\xe8\x09\x80\x9a\x07\x40\xae\xa3\x4a\xd5\xaa\x82\x16\x66\x1f\xc4\x9e\xb0\xe7\x03\x59\xa3\xcc\x1e\x1d\xd9\x56\xb9\xd8\x4c\x07\x61\x64\x36\x85\x56\xad\xf2\xc2\xa7\x9b\x6f\x8a\xca\xb3\x44\xdf\x25\xb3\x77\xde\x8a\xce\x41\xe0\xea\xe6\xc3\x5b\x38\xb2\x07\xb2\x11\xc5\xca\xa3\xb2\x24\xa2\xac\xfc\x91\xb1\xd9\x5e\xbb\x58\xbb\xe6\x4a\x68\xb4\xa2\x6a\x94\xa1\xd9\x67\x93\xdb\xcb\x6b\x74\xcc\x3a\x26\x49\x9c\x0a\x23\x63\x4d\x6c\xbd\xc3\xb3\x52\x73\x75\xff\x0c\x92\x0e\xaa\xa2\xc1\x64\xd0\xe8\x1d\xa1\x0d\xee\x94\x09\xb5\x25\xd7\x0c\xa9\xa2\x7f\x94\x9a\xeb\x9d\xa7\x16\xd1\x65\x86\x92\x2a\x11\x85\xe8\x1a\xd5\x75\xb1\x6c\xe5\xb3\x29\x46\x5d\x99\xa8\x30\xb2\x38\x72\xd0\x12\xca\xc4\x98\x6e\x60\x52\xb5\x91\xad\xb2\xc7\x3f\x3f\x2e\x16\x7f\x5c\xc6\xdc\x69\x98\x86\xac\x05\xf9\xaa\xa8\xa8\x6b\xd2\x57\x5e\xb1\xa9\x33\xd7\x20\xff\x72\xcc\x5d\x83\xc9\x0f\xcf\x1b\x76\xde\x88\x96\x30\x57\x2f\x26\xc3\x34\x9a\x5a\xed\x83\xa5\x04\xd7\x79\x61\x3d\xa2\xd3\xbc\x65\x33\x84\x68\xd9\xfc\x1f\xe7\x8b\x87\xc1\x9f\x9d\xcc\xda\x7b\xa9\x2c\xe6\x1d\x8a\x83\xb0\x85\x56\xe5\x80\x91\x9d\x4c\x3f\xe6\x8b\xff\x7a\x38\x1f\x52\xb3\x93\x31\xf5\xe2\xc9\xe9\xfc\x7b\xb0\x6b\x87\x96\xbc\x90\xc2\x8b\x51\x08\x63\x11\xd2\xe5\xc3\xfa\xf9\x60\xa9\x13\xd1\x2f\x35\xfc\xc0\x3a\xb4\x84\x49\xcd\x3c\xc1\x73\x36\xba\x1f\x76\x80\x16\x3d\xd9\xd8\x9e\x9a\x84\x0f\xb1\x71\xb1\x09\x1c\xfb\xee\xe2\x36\xc8\xa6\xa7\x89\x85\xa1\x23\x59\x54\x5a\x91\xf1\xee\x45\xd4\xdd\x7a\xb3\xbb\x79\x8d\x63\x7c\x22\x89\x2b\xea\x1a\xdc\xc7\xfd\xa6\xd1\xb2\x0c\x9a\x92\x0a\x63\xbc\x48\x28\x7c\x23\x3c\x6c\x30\x2e\x5d\x0d\x71\xce\x32\x5b\x9e\xc4\x87\xf9\x3c\x35\x7f\x3e\x42\xf9\x82\x2d\x69\x12\x35\xf3\xd3\xba\x46\x1e\x86\xd2\xb2\x78\x02\x3b\x39\x68\x7b\x54\xe9\x60\xf2\x57\xa2\xe9\xe5\x77\x4d\x3e\xb3\x39\x9a\xd5\x2e\x16\x7c\xca\xf1\xb5\xd1\xa3\xb8\x11\x52\x88\xfb\x55\xd2\x43\xde\xf8\x56\x43\x19\xcf\xa9\xc6\x11\x59\x1a\x50\x2f\xee\x29\x8e\xee\xb1\x89\x4b\x39\x18\xaf\xf4\x23\x9b\x11\x8c\x84\x28\xf9\x90\xf6\x58\xcb\xc1\xf8\xb8\x1a\xe3\xc6\x3a\x87\xa3\x8a\xe3\x98\x3a\x04\x17\x84\xd6\x3d\xc8\x70\xd8\x37\x33\x94\xc1\xc3\xdb\x3e\x01\xa8\x95\x21\xaf\x74\x9f\x67\x4e\x13\x75\x38\xcf\x86\x74\x67\x83\x54\xeb\x38\x90\xf3\xf6\x6b\x89\xbf\x7e\xf5\xf3\x2f\xbf\x4e\x50\xb4\xc6\xbf\x81\xe4\x2c\x2e\x77\xaa\x1a\xc6\xe4\x4e\xa4\x0d\x9c\xd6\xda\xc8\x84\x67\x94\x84\xd0\x4d\x92\xd9\x29\x8d\x64\x43\xd9\xe0\xf3\x96\xb4\xe6\x24\x86\xb3\x09\x7e\x4b\x51\x8b\x2f\xe4\x64\x55\xd3\xb2\xc4\xab\x97\x2f\xbf\x79\x09\xa9\xe4\x74\x9d\x8d\xb1\x92\xa4\x54\xfc\xd3\x10\xb2\x4f\x93\x18\x11\x45\x38\x14\x15\x3f\x14\xe7\x6d\xa0\xcf\xb8\x47\x40\x8b\x01\xd1\xbf\x01\x00\x00\xff\xff\x01\x0a\xa4\xfe\x9a\x07\x00\x00") + +func testImagesVolumeRbdBootstrapShBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeRbdBootstrapSh, + "test/images/volume/rbd/bootstrap.sh", + ) +} + +func testImagesVolumeRbdBootstrapSh() (*asset, error) { + bytes, err := testImagesVolumeRbdBootstrapShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/rbd/bootstrap.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeRbdCephConfSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x93\x51\x4f\xe3\x38\x14\x85\xdf\xfd\x2b\xce\x36\xfb\xb0\x2b\x75\x93\x52\x01\x5a\xed\xaa\x23\x75\x0a\xa3\x89\x40\xad\x44\xca\x20\x84\x78\x70\x9c\x9b\xc4\xc8\xf1\xcd\xd8\x0e\x69\xe7\xd7\x8f\x92\x52\x31\x0c\xe4\xd1\xe7\xe4\xe6\xcb\x77\xe5\xe8\x8f\xa4\xf3\x2e\xc9\xb5\x4d\xc8\x3e\x23\x97\xbe\x16\x22\xc2\x8a\xdb\xbd\xd3\x55\x1d\x30\x9f\x9d\x9c\x61\x5b\x13\xae\xba\x9c\x9c\xa5\x40\x1e\xcb\x2e\xd4\xec\x7c\x2c\x22\x11\xe1\x5a\x2b\xb2\x9e\x0a\x74\xb6\x20\x87\x50\x13\x96\xad\x54\x35\x1d\x93\x29\xbe\x91\xf3\x9a\x2d\xe6\xf1\x0c\x7f\x0d\x85\xc9\x4b\x34\xf9\xfb\x7f\x11\x61\xcf\x1d\x1a\xb9\x87\xe5\x80\xce\x13\x42\xad\x3d\x4a\x6d\x08\xb4\x53\xd4\x06\x68\x0b\xc5\x4d\x6b\xb4\xb4\x8a\xd0\xeb\x50\x8f\x9f\x79\x19\x12\x8b\x08\xf7\x2f\x23\x38\x0f\x52\x5b\x48\x28\x6e\xf7\xe0\xf2\xd7\x1e\x64\x18\x81\x87\xa7\x0e\xa1\xfd\x2f\x49\xfa\xbe\x8f\xe5\x08\x1b\xb3\xab\x12\x73\x28\xfa\xe4\x3a\x5d\x5d\xae\xb3\xcb\x7f\xe6\xf1\x6c\x7c\xe5\xd6\x1a\xf2\x1e\x8e\xbe\x77\xda\x51\x81\x7c\x0f\xd9\xb6\x46\x2b\x99\x1b\x82\x91\x3d\xd8\x41\x56\x8e\xa8\x40\xe0\x81\xb7\x77\x3a\x68\x5b\x4d\xe1\xb9\x0c\xbd\x74\x24\x22\x14\xda\x07\xa7\xf3\x2e\xbc\x91\x75\xa4\xd3\xfe\x4d\x81\x2d\xa4\xc5\x64\x99\x21\xcd\x26\xf8\xbc\xcc\xd2\x6c\x2a\x22\xdc\xa5\xdb\xaf\x9b\xdb\x2d\xee\x96\x37\x37\xcb\xf5\x36\xbd\xcc\xb0\xb9\xc1\x6a\xb3\xbe\x48\xb7\xe9\x66\x9d\x61\xf3\x05\xcb\xf5\x3d\xae\xd2\xf5\xc5\x14\xa4\x43\x4d\x0e\xb4\x6b\xdd\xc0\xcf\x0e\x7a\xd0\x48\xc5\xe0\x2c\x23\x7a\x03\x50\xf2\x01\xc8\xb7\xa4\x74\xa9\x15\x8c\xb4\x55\x27\x2b\x42\xc5\xcf\xe4\xac\xb6\x15\x5a\x72\x8d\xf6\xc3\x32\x3d\xa4\x2d\x44\x04\xa3\x1b\x1d\x64\x18\x4f\xde\xfd\x54\x2c\x46\x7d\x2b\xb6\xa5\xae\x3a\x47\x1e\x09\x05\x95\x28\x6a\xeb\x58\xb1\x2d\x51\x3a\x6e\x20\x11\xa8\x69\x8d\x0c\xc3\x2a\x85\x20\x55\x33\x26\xe2\xa1\x32\x9c\x4b\xf3\x28\x64\x17\x6a\x28\xd3\xf9\x40\xee\x75\x05\x0b\x58\xb6\x74\x08\x3d\xb9\x67\xad\xe8\xe3\x50\x19\x4d\x36\xbc\xcb\xc4\x43\xc3\x36\x96\x8f\xa2\x66\x1f\xb0\xc0\xc0\x94\xf3\x4e\x34\x83\xf8\xa2\x70\x58\xe0\xcf\x13\x21\x1e\xd8\x17\x8f\x82\x7d\x81\x27\xee\x9c\x95\x06\x5e\xff\x20\x2c\x70\x32\xff\x57\x1c\x8f\x0a\xcd\x58\xa0\x94\xc6\xd3\x70\x79\xa4\x31\xdc\xc3\x75\x76\x54\xc6\x16\xb4\x0b\xa7\xe3\x8c\x46\xee\xc0\xf9\x13\xa9\x00\x2b\x1b\x82\x21\x8b\x05\xe6\x67\xe7\x1f\xa5\xbe\x95\xea\x58\x39\x3f\x3d\xa0\xc4\xb3\x03\xcc\x6f\xd0\x13\x7c\x7a\x35\xfb\xaa\x57\x88\x9f\x01\x00\x00\xff\xff\x07\xbb\xe8\x40\xdf\x03\x00\x00") + +func testImagesVolumeRbdCephConfShBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeRbdCephConfSh, + "test/images/volume/rbd/ceph.conf.sh", + ) +} + +func testImagesVolumeRbdCephConfSh() (*asset, error) { + bytes, err := testImagesVolumeRbdCephConfShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/rbd/ceph.conf.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeRbdCreate_blockSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x93\x5f\x6f\xdb\x36\x14\xc5\xdf\xf9\x29\x4e\xa5\x00\x4d\xb0\x44\xfe\x03\xec\xa5\x83\x3b\x38\x8d\x87\x0a\xad\x1d\xc0\x56\xd7\xf5\x69\xa0\xa4\x2b\x89\x08\x45\x6a\xe4\x95\x1d\x67\xdd\x77\x1f\x28\xd9\x6d\xb2\x3e\x4c\x8f\xe2\xe1\xe1\xef\x9e\x7b\x6f\xfc\x6a\xd2\x7b\x37\xc9\x95\x99\x90\xd9\x23\x97\xbe\x11\x22\xc6\x3b\xdb\x1d\x9d\xaa\x1b\xc6\x7c\x3a\xfb\x19\x59\x43\xf8\xd0\xe7\xe4\x0c\x31\x79\x2c\x7b\x6e\xac\xf3\x89\x88\x45\x8c\x8f\xaa\x20\xe3\xa9\x44\x6f\x4a\x72\xe0\x86\xb0\xec\x64\xd1\xd0\xf9\xe4\x1a\xbf\x93\xf3\xca\x1a\xcc\x93\x29\x2e\x83\x20\x3a\x1d\x45\x57\xbf\x88\x18\x47\xdb\xa3\x95\x47\x18\xcb\xe8\x3d\x81\x1b\xe5\x51\x29\x4d\xa0\xc7\x82\x3a\x86\x32\x28\x6c\xdb\x69\x25\x4d\x41\x38\x28\x6e\x86\x67\x4e\x26\x89\x88\xf1\xe5\x64\x61\x73\x96\xca\x40\xa2\xb0\xdd\x11\xb6\x7a\xae\x83\xe4\x01\x38\x7c\x0d\x73\xf7\x66\x32\x39\x1c\x0e\x89\x1c\x60\x13\xeb\xea\x89\x1e\x85\x7e\xf2\x31\x7d\xb7\xda\xec\x56\x37\xf3\x64\x3a\x5c\xf9\x64\x34\x79\x0f\x47\x7f\xf5\xca\x51\x89\xfc\x08\xd9\x75\x5a\x15\x32\xd7\x04\x2d\x0f\xb0\x0e\xb2\x76\x44\x25\xd8\x06\xde\x83\x53\xac\x4c\x7d\x0d\x6f\x2b\x3e\x48\x47\x22\x46\xa9\x3c\x3b\x95\xf7\xfc\x22\xac\x33\x9d\xf2\x2f\x04\xd6\x40\x1a\x44\xcb\x1d\xd2\x5d\x84\xdb\xe5\x2e\xdd\x5d\x8b\x18\x9f\xd3\xec\xfd\xfd\xa7\x0c\x9f\x97\xdb\xed\x72\x93\xa5\xab\x1d\xee\xb7\x78\x77\xbf\xb9\x4b\xb3\xf4\x7e\xb3\xc3\xfd\x6f\x58\x6e\xbe\xe0\x43\xba\xb9\xbb\x06\x29\x6e\xc8\x81\x1e\x3b\x17\xf8\xad\x83\x0a\x31\x52\x19\x32\xdb\x11\xbd\x00\xa8\xec\x08\xe4\x3b\x2a\x54\xa5\x0a\x68\x69\xea\x5e\xd6\x84\xda\xee\xc9\x19\x65\x6a\x74\xe4\x5a\xe5\x43\x33\x3d\xa4\x29\x45\x0c\xad\x5a\xc5\x92\x87\x3f\x3f\x14\x95\x0c\xb3\xe4\x48\x32\x21\xd7\xb6\x78\x48\x58\xba\xa4\x7e\x1a\x7b\x28\xe1\x5b\xa9\x35\xe8\x91\xe7\x43\xbf\xfd\xd1\x33\xb5\x81\x2d\x65\xb4\xbd\x67\xe4\x04\xd7\x1b\x48\x0f\x67\x2d\xe3\x92\x2d\x5a\xdb\x1b\x1e\x0d\x5e\xdf\x58\x68\x6b\xbb\xd7\x57\xaf\xc2\x43\xab\x47\xc5\x21\xb7\x00\x50\x29\xe7\x19\xe4\x9c\x75\x89\xf0\xc4\xb8\x21\x21\xd6\x9b\xec\x2e\xdd\x2e\xa2\x8b\xcb\xf6\x81\xa9\xed\x70\x53\x5e\x45\x42\x14\x9a\xa4\xe9\xbb\xcb\x2b\xf1\xb7\x08\xc3\x11\x63\x2d\x1f\x08\xbe\x77\x84\x03\xc1\x11\xf7\x6e\x74\x1d\x57\x82\xc2\x3b\x85\x2d\x69\x50\x6f\x57\xd9\xe2\xe2\xd7\xd3\xc5\x9d\xd2\x64\x58\x1f\xe1\xa8\xb5\x7b\x02\xed\xc9\x1d\xb9\x09\xd1\x49\x53\x42\xd5\xc6\x3a\x1a\xb1\xfc\x70\x25\xa0\xfd\x34\x1a\x0d\x4b\xd8\x8f\xe5\x45\x17\x23\x6b\x84\xf9\xdb\x49\x49\xfb\x89\xe9\xb5\xfe\xae\x72\x6d\xa9\xdc\xff\x8b\xc6\xcc\x7f\x38\x1d\xf8\x2f\xb6\xab\x4c\xfc\x23\x04\x3b\xd9\xe1\x94\x00\xb2\xd5\x76\x8d\xd5\x1f\x69\xf6\xac\x6f\xb3\xf9\x74\x7d\x8b\x92\xf6\xea\xbc\x7b\xa1\x5f\x22\xc6\xe5\xde\xea\xbe\xa5\x3f\x95\x05\x93\x67\x0f\x13\xc6\x5f\x32\x34\x49\xcf\x98\x4d\xa7\xeb\xdb\x2b\x51\x96\x50\xd5\x62\x00\x78\x22\x67\x61\xab\xc5\x48\xe5\x89\x1e\x16\xb3\xf9\x14\x45\xa8\x78\x31\x43\xee\x17\xb3\xb5\x68\x1f\x2a\x9f\x0c\x13\x31\xc8\x02\xc8\x32\x78\x98\x92\x1e\x93\x86\x5b\x3d\x2c\x18\x8b\x31\xa7\xd3\x00\x9c\x0a\xfd\x16\x88\xa0\xa2\xb1\x88\xde\x93\xd6\x16\x95\xb3\x2d\xb6\xb7\x77\x11\xde\x7e\x53\x4c\xbe\xfb\x45\xe2\xbf\x99\x0b\x71\x8e\xee\x3c\xae\xcf\x12\xc4\xd7\xaf\x78\x23\x58\x3a\x14\xd5\xd3\x4b\xd5\x08\xfc\x6f\x00\x00\x00\xff\xff\xfa\xac\xf9\xe3\x52\x05\x00\x00") + +func testImagesVolumeRbdCreate_blockShBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeRbdCreate_blockSh, + "test/images/volume/rbd/create_block.sh", + ) +} + +func testImagesVolumeRbdCreate_blockSh() (*asset, error) { + bytes, err := testImagesVolumeRbdCreate_blockShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/rbd/create_block.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeRbdKeyring = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8a\xce\xcd\xcf\xd3\x8b\xe5\x52\x80\x82\xec\xd4\x4a\x05\x5b\x05\xc7\x40\x97\xa0\x22\x6f\xbf\x30\xb3\x2a\x93\x50\xe7\x0c\x47\x47\xa7\xaa\x00\xc3\xa8\xca\xca\xe2\x90\x50\x93\x82\xac\xf4\x2c\x3f\xff\x34\xfd\x02\x63\x47\x5b\x5b\xae\xe8\xe4\x9c\xcc\xd4\xbc\x12\xbd\xc4\x94\xdc\xcc\x3c\x5c\xa6\x24\xb9\xa6\x96\x81\x4c\x71\xcd\x0d\x72\xd6\x2e\x08\xd7\xf7\x76\x0a\xf3\xa8\x48\x34\x28\xd7\x0f\xf0\xf7\xf4\x01\x99\x02\xd3\x96\x58\x9a\x99\xa2\x60\xab\x60\x00\x17\x48\x4e\x2c\x28\x56\xc8\x4d\x29\x56\xb0\x55\x50\x4a\xcc\xc9\xc9\x2f\x57\xd0\x52\x42\x93\xcc\xcf\xc3\x2d\x99\x5f\x9c\x82\x22\x09\x08\x00\x00\xff\xff\x71\x6c\x55\x44\xec\x00\x00\x00") + +func testImagesVolumeRbdKeyringBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeRbdKeyring, + "test/images/volume/rbd/keyring", + ) +} + +func testImagesVolumeRbdKeyring() (*asset, error) { + bytes, err := testImagesVolumeRbdKeyringBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/rbd/keyring", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeRbdMonSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x94\x5f\x6f\xdb\x36\x14\xc5\xdf\xf9\x29\xce\xac\x02\x4d\x80\xc8\x4a\x03\xec\x5f\xf7\xe4\xa5\x19\x66\xb4\xb3\x81\xd8\x5d\xd1\x47\x8a\xbc\x92\x2e\x22\x91\x1c\x79\x15\x55\x18\xf6\xdd\x07\xc9\x71\x61\x23\x1b\x8a\xf8\x85\x34\xcf\xb9\x87\x3f\x5e\x12\xca\xbe\x2b\xfa\x14\x8b\x92\x5d\x41\xee\x11\xa5\x4e\x8d\x52\x19\x6e\x7d\x18\x23\xd7\x8d\xe0\xe6\xfa\xcd\xf7\xd8\x37\x84\xf7\x7d\x49\xd1\x91\x50\xc2\xaa\x97\xc6\xc7\xb4\x54\x99\xca\xf0\x81\x0d\xb9\x44\x16\xbd\xb3\x14\x21\x0d\x61\x15\xb4\x69\xe8\xa8\x5c\xe1\x4f\x8a\x89\xbd\xc3\xcd\xf2\x1a\x17\x93\x61\xf1\x24\x2d\x2e\x7f\x51\x19\x46\xdf\xa3\xd3\x23\x9c\x17\xf4\x89\x20\x0d\x27\x54\xdc\x12\xe8\x8b\xa1\x20\x60\x07\xe3\xbb\xd0\xb2\x76\x86\x30\xb0\x34\xf3\x36\x4f\x21\x4b\x95\xe1\xf3\x53\x84\x2f\x45\xb3\x83\x86\xf1\x61\x84\xaf\x4e\x7d\xd0\x32\x03\x4f\xbf\x46\x24\xbc\x2d\x8a\x61\x18\x96\x7a\x86\x5d\xfa\x58\x17\xed\xc1\x98\x8a\x0f\xeb\xdb\xbb\xcd\xee\x2e\xbf\x59\x5e\xcf\x25\x1f\x5d\x4b\x29\x21\xd2\x5f\x3d\x47\xb2\x28\x47\xe8\x10\x5a\x36\xba\x6c\x09\xad\x1e\xe0\x23\x74\x1d\x89\x2c\xc4\x4f\xbc\x43\x64\x61\x57\x5f\x21\xf9\x4a\x06\x1d\x49\x65\xb0\x9c\x24\x72\xd9\xcb\x59\xb3\x8e\x74\x9c\xce\x0c\xde\x41\x3b\x2c\x56\x3b\xac\x77\x0b\xfc\xba\xda\xad\x77\x57\x2a\xc3\xa7\xf5\xfe\xf7\xed\xc7\x3d\x3e\xad\xee\xef\x57\x9b\xfd\xfa\x6e\x87\xed\x3d\x6e\xb7\x9b\x77\xeb\xfd\x7a\xbb\xd9\x61\xfb\x1b\x56\x9b\xcf\x78\xbf\xde\xbc\xbb\x02\xb1\x34\x14\x41\x5f\x42\x9c\xf8\x7d\x04\x4f\x6d\x24\x3b\xf5\x6c\x47\x74\x06\x50\xf9\x03\x50\x0a\x64\xb8\x62\x83\x56\xbb\xba\xd7\x35\xa1\xf6\x8f\x14\x1d\xbb\x1a\x81\x62\xc7\x69\xba\xcc\x04\xed\xac\xca\xd0\x72\xc7\xa2\x65\x5e\x79\x76\xa8\xa5\x9a\xdb\x77\xeb\x5d\xc5\x75\x1f\x69\x2e\x42\xab\x7b\x67\x9a\xe9\x0f\x1c\x0d\xf8\x63\xbb\x99\x5e\x92\xca\xd0\x79\xc7\xe2\x23\x12\x49\x1f\x54\xe7\x5d\xa7\x83\x78\xdf\x22\xcf\x4d\x24\x2d\x34\x4d\x5a\x5f\x96\x14\x91\xe7\x55\x62\x8b\xc5\xab\x8b\xbe\x67\x5b\x93\xbb\x5c\x20\xcf\xb5\xb5\xd0\x58\xbc\xfa\xfb\xcd\x3f\x8b\xb7\x3f\xfc\xf8\xd3\xcf\x28\x48\x4c\x61\x28\x34\xc5\x21\x4f\x75\x0f\x96\x23\x8a\x47\x1d\x8b\x96\xcb\xaf\xd2\x3c\xc9\xb5\x9a\x87\xce\x3b\xe4\x0c\x8d\x3c\xef\x1e\xaa\x34\x0d\x73\xf1\xb3\x34\xe4\x0f\xff\x11\xf5\x40\x63\x64\x57\x2b\x13\xfe\x5f\x7c\x01\xc1\x4b\xb6\x3e\x64\x7c\x25\x50\x19\x4c\xcb\xe4\xe4\xd0\x53\x5c\x34\xda\xd9\xf1\xf2\x1b\x64\xc7\x9d\xa6\xf2\xc3\xab\xe0\x04\xa1\x24\x18\x08\x83\x76\x02\xf1\x33\x26\x7c\xb2\xa8\x49\x4c\xec\x53\x33\x33\x79\x14\xd2\x85\x62\x5e\x30\x6a\x1e\x0e\x37\x68\x4f\x85\x73\x9f\x55\xd3\xe7\x23\x67\xbc\x4e\x45\x12\x0a\x30\x8d\xf7\x89\x5a\xd2\x15\x2a\x8e\x49\x1c\xae\x21\x63\x20\x34\x3e\xc9\x37\x2c\x3e\xd9\xe2\xf5\x59\xf8\x09\x84\x39\x15\x9e\xc1\x1e\x0f\x94\x4e\x0f\xc4\x67\x9e\x7f\x03\x00\x00\xff\xff\x24\x3c\x05\xf8\x2f\x05\x00\x00") + +func testImagesVolumeRbdMonShBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeRbdMonSh, + "test/images/volume/rbd/mon.sh", + ) +} + +func testImagesVolumeRbdMonSh() (*asset, error) { + bytes, err := testImagesVolumeRbdMonShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/rbd/mon.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testImagesVolumeRbdOsdSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x92\xcf\x6f\x9b\x4e\x10\xc5\xef\xfc\x15\xef\x0b\x5f\x29\x6d\x65\x43\x12\xa9\x97\x56\x39\xb8\x4e\xaa\xa2\x44\xb6\x14\x9c\x46\x39\x2e\x30\xb0\x23\xaf\x77\xe9\xfe\x08\xb6\xaa\xfe\xef\xd5\x62\x47\x4a\xd4\x1e\xca\x05\x86\x79\x6f\xe6\xc3\x63\xb3\xff\x8a\xe0\x6c\x51\xb3\x2e\x48\x3f\xa3\x16\x4e\x26\x49\x86\xa5\x19\x0e\x96\x7b\xe9\x71\x79\x7e\xf1\x11\x1b\x49\xb8\x0d\x35\x59\x4d\x9e\x1c\x16\xc1\x4b\x63\x5d\x9e\x64\x49\x86\x3b\x6e\x48\x3b\x6a\x11\x74\x4b\x16\x5e\x12\x16\x83\x68\x24\xbd\x74\x66\xf8\x4e\xd6\xb1\xd1\xb8\xcc\xcf\xf1\x2e\x0a\xd2\x53\x2b\x7d\xff\x39\xc9\x70\x30\x01\x3b\x71\x80\x36\x1e\xc1\x11\xbc\x64\x87\x8e\x15\x81\xf6\x0d\x0d\x1e\xac\xd1\x98\xdd\xa0\x58\xe8\x86\x30\xb2\x97\xd3\x9a\xd3\x90\x3c\xc9\xf0\x74\x1a\x61\x6a\x2f\x58\x43\xa0\x31\xc3\x01\xa6\x7b\xad\x83\xf0\x13\x70\xbc\xa4\xf7\xc3\xa7\xa2\x18\xc7\x31\x17\x13\x6c\x6e\x6c\x5f\xa8\xa3\xd0\x15\x77\xe5\xf2\x66\x55\xdd\xcc\x2f\xf3\xf3\xc9\xf2\xa0\x15\x39\x07\x4b\x3f\x02\x5b\x6a\x51\x1f\x20\x86\x41\x71\x23\x6a\x45\x50\x62\x84\xb1\x10\xbd\x25\x6a\xe1\x4d\xe4\x1d\x2d\x7b\xd6\xfd\x0c\xce\x74\x7e\x14\x96\x92\x0c\x2d\x3b\x6f\xb9\x0e\xfe\x4d\x58\x2f\x74\xec\xde\x08\x8c\x86\xd0\x48\x17\x15\xca\x2a\xc5\x97\x45\x55\x56\xb3\x24\xc3\x63\xb9\xf9\xb6\x7e\xd8\xe0\x71\x71\x7f\xbf\x58\x6d\xca\x9b\x0a\xeb\x7b\x2c\xd7\xab\xeb\x72\x53\xae\x57\x15\xd6\x5f\xb1\x58\x3d\xe1\xb6\x5c\x5d\xcf\x40\xec\x25\x59\xd0\x7e\xb0\x91\xdf\x58\x70\x8c\x91\xda\x98\x59\x45\xf4\x06\xa0\x33\x47\x20\x37\x50\xc3\x1d\x37\x50\x42\xf7\x41\xf4\x84\xde\x3c\x93\xd5\xac\x7b\x0c\x64\x77\xec\xe2\xcf\x74\x10\xba\x4d\x32\x28\xde\xb1\x17\x7e\x7a\xf3\xc7\x47\xe5\xc9\x14\xdf\xd2\xe8\x8e\xfb\x60\x69\x32\x41\x89\xa0\x1b\x19\x0b\x68\x1a\xb1\xae\xae\xe3\x49\x4a\x1a\x1a\x24\x8c\x6b\xd1\x58\x12\x9e\xa6\x7a\x1e\xeb\x39\x23\xfd\xff\xe7\xc5\xaf\x14\xf3\xf9\x6e\xdb\xb9\xe9\xb6\xa5\xc3\xd1\x21\x82\x97\x10\x6d\x8b\xd4\xb8\x36\x3f\xea\xa2\xeb\x4c\x28\x65\x46\x7c\x38\xc3\xce\xe8\x97\xca\x8e\xfb\xb3\x69\x5e\xf1\x2c\x6c\xa1\xb8\x2e\xe2\x8c\xc2\xb8\x76\x7a\x98\x47\x7b\xb1\xa5\x83\x65\xdd\xa7\xaf\x89\x82\x3b\x2d\x39\x2e\xb8\x80\x35\xc6\x5f\xb5\xd4\x89\xa0\x3c\xa4\x71\xfe\x2a\xaa\x6b\xb3\xff\x2b\xf7\xf6\x1f\x37\xfe\x0e\x00\x00\xff\xff\x5d\x88\x53\x6c\x8f\x03\x00\x00") + +func testImagesVolumeRbdOsdShBytes() ([]byte, error) { + return bindataRead( + _testImagesVolumeRbdOsdSh, + "test/images/volume/rbd/osd.sh", + ) +} + +func testImagesVolumeRbdOsdSh() (*asset, error) { + bytes, err := testImagesVolumeRbdOsdShBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/images/volume/rbd/osd.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlAdminDaemonYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x8e\x31\x4e\x04\x31\x0c\x45\xfb\x9c\xc2\x17\x18\xed\x52\x6e\x6a\x4a\x0a\x24\x24\x7a\x93\xf9\x62\x22\x26\x71\x64\x9b\x15\xc7\x47\x61\x86\xec\x20\x81\x70\x15\xe5\xdb\xef\x7d\x6e\xf9\x19\x6a\x59\x6a\x24\x6e\xcd\x4e\xd7\xbb\xf0\x96\xeb\x1c\xe9\x9e\x51\xa4\x3e\xc1\x43\x81\xf3\xcc\xce\x31\x10\x55\x2e\x88\xd4\x54\x0a\x7c\xc1\xbb\x4d\x55\x66\x4c\xf8\x68\xa2\x0e\x0d\xd6\x90\xfa\x9a\x61\x45\x72\xd1\xfe\x26\x2a\xec\x69\x79\xe0\x17\xac\xb6\x7d\x10\xcd\x5f\xf4\x8d\x34\x18\x81\xc8\x51\xda\xca\x8e\xfd\xf0\x60\xee\xf3\x8f\x7d\x5b\x5a\x7f\x88\xfe\x56\x11\x7d\xb7\xed\x93\xa4\x3a\xe7\x0a\x1d\x97\xd3\xae\x4b\x83\x94\x0b\xbf\xee\xfe\xd3\xad\xc4\x88\x7b\x8b\x83\x77\xba\x31\x1f\x45\x3d\xd2\xe5\x7c\x39\x8f\x94\x68\x11\xf3\x5f\x83\x4d\x6b\xd0\x2b\xb4\x33\xc3\x67\x00\x00\x00\xff\xff\xb0\x5f\x4e\x5d\xa5\x01\x00\x00") + +func testFixturesDocYamlAdminDaemonYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlAdminDaemonYaml, + "test/fixtures/doc-yaml/admin/daemon.yaml", + ) +} + +func testFixturesDocYamlAdminDaemonYaml() (*asset, error) { + bytes, err := testFixturesDocYamlAdminDaemonYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/daemon.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlAdminHighAvailabilityEtcdYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x94\x3f\x6f\xdb\x3c\x10\x87\x77\x7d\x0a\x0e\xef\x2a\xc9\xf6\x3b\x24\xe1\x56\x34\x1e\x82\x22\xb6\xd1\x16\x01\x3a\x05\x34\x75\x88\x09\x53\xa4\x70\x3c\xa9\x08\x8a\x7c\xf7\x82\x92\x42\xfd\xb3\x65\xa8\xa3\x78\xfc\x3d\x3c\x1f\x1f\x5a\x14\xea\x05\xd0\x29\x6b\x38\xab\xd6\xd1\x59\x99\x8c\xb3\x83\xcd\xa2\x1c\x48\x64\x82\x04\x8f\x18\x33\x22\x07\xce\x80\x64\x16\x3b\xc0\x0a\x30\x72\x05\x48\x5f\x39\x59\x47\x3b\xa0\xdf\x16\xcf\x9c\x11\x96\x10\x31\x26\xad\x21\xa1\x0c\xa0\xf3\x3b\x62\xa6\x72\xf1\x06\x9c\x9d\xef\x5d\xf2\x26\x31\x51\x36\xf5\x24\xbe\x49\x56\xc9\x43\xc4\xd8\x00\x1f\xb2\x75\x41\xda\x3c\x17\x26\xe3\xf5\x47\xcc\xd2\xd2\x61\xaa\xad\x14\x3a\x3d\x2a\x53\x53\xda\x4a\x1c\x7b\x46\xfb\xf1\xdf\x9f\xdd\xfe\x71\xfb\xba\xfb\xf2\xbc\xfd\x08\x75\x65\x14\x29\xa1\x63\x91\x55\x80\xa4\x1c\xc4\x05\x00\xc6\x25\x6a\xd7\xee\x39\x11\x15\x3c\x4d\xdb\xf4\xd3\xe1\x83\x6f\xfe\xbf\x5f\x05\x80\x56\x8e\xc0\x2c\x4d\x75\xc7\x49\xad\xc0\xd0\xad\xe8\xdd\xc3\xf8\xc0\xab\xb9\xf5\xe6\x2e\x59\x25\xab\x64\x3d\x8c\xf9\x3b\x8b\x33\x85\x9f\x33\xab\x04\xd6\x93\x4a\x7d\xa1\xdb\xa5\x9c\xb4\x15\xe0\x7b\x98\xd9\xe3\xd3\x8f\xaf\xfb\x97\xed\xf7\x5f\xaf\x3f\xf7\xdf\xb6\xbb\x66\x72\x85\x45\x72\x9f\xe3\x0f\x77\x73\xb0\x48\x9c\x85\xdf\xd9\x58\x30\x59\x6c\x6e\xb5\xf1\xc5\x73\xae\x51\xda\xde\x87\x94\xb0\xd8\x50\x9a\x21\x04\x4a\x65\x75\x99\xc3\xb3\x2d\x4d\xd7\x5d\xee\xbf\x0e\x82\x4e\xbc\xfb\xcd\x03\x46\x25\xb0\x67\x4c\x7f\x3b\x90\x4c\x9d\xd3\x83\xdd\x40\xb2\x5b\x42\x10\xd9\xde\xe8\xf7\xa0\xf8\x98\xe0\xc5\x74\x27\x81\x30\xe1\x94\x0e\xeb\xc2\x02\x98\xef\x7e\x8c\xa9\x04\x2e\x6d\xe7\x42\x23\xcb\x08\x5a\x1d\x2f\x51\xb4\x3a\x2e\x05\xd5\x4f\xd6\x16\x60\x2e\xe1\x7c\x71\x58\xbb\x09\xf5\x17\x76\x09\x07\x24\xff\x81\x54\x9c\x55\x4a\xed\xeb\xea\x91\x8a\xb3\xea\x56\x27\xa0\x46\xc1\xf6\x1f\xae\x36\xd7\x03\xdb\xdd\xc5\x50\xc3\xee\xe9\x8d\x4d\xbc\x1a\xed\x2b\x39\x12\xf2\x6a\x66\x2a\xe1\x25\x05\x67\xbb\x1d\x06\x83\x74\xf3\x47\x4e\x0e\xbb\x9d\xe9\xab\x35\x15\x6b\x3e\x3a\x91\xe9\x9a\x4a\xb3\xc3\x9d\x02\x06\xf2\xcc\x66\xfb\xc2\x8c\x75\xf9\x1b\x00\x00\xff\xff\xfe\xad\x78\xd0\x50\x07\x00\x00") + +func testFixturesDocYamlAdminHighAvailabilityEtcdYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlAdminHighAvailabilityEtcdYaml, + "test/fixtures/doc-yaml/admin/high-availability/etcd.yaml", + ) +} + +func testFixturesDocYamlAdminHighAvailabilityEtcdYaml() (*asset, error) { + bytes, err := testFixturesDocYamlAdminHighAvailabilityEtcdYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/high-availability/etcd.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlAdminHighAvailabilityKubeApiserverYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x95\xcf\x8e\xdb\x36\x10\xc6\xef\x7e\x0a\x9e\x7a\x32\xf5\xc7\x71\xbd\x5e\x01\x5a\xa0\x48\x91\x53\x9a\x6c\x13\xa0\xd7\x82\xa6\x26\x32\x21\x8a\x14\x66\x46\xda\xfa\xed\x0b\xca\x8e\xd6\x96\x64\x1b\xce\x51\x33\xf3\xfd\x38\x1c\x7e\xa4\x54\x63\xfe\x01\x24\xe3\x5d\x26\xba\x74\x51\x19\x57\x64\xe2\xd5\x17\x8b\x1a\x58\x15\x8a\x55\xb6\x10\xc2\xa9\x1a\x32\x51\xb5\x3b\x90\xaa\x31\x04\xd8\x01\x2e\xa8\x01\x1d\x92\x7b\x4f\xfc\x05\xf8\xcd\x63\x95\x09\xc6\x16\x16\x42\x68\xef\x58\x19\x07\x48\xa1\x42\xce\x03\x84\x10\xc2\xd4\xaa\x0c\x99\x2d\x45\xa5\xc6\xc8\xf8\xf8\xb2\x28\x7b\xde\x6c\x13\x78\xda\xae\x20\xd9\xaa\x54\xa5\xfa\x79\xad\x37\xbf\x6f\xd2\xe7\x24\x49\xd3\x5d\x91\xac\x7a\x8a\xf6\x75\xad\x5c\x91\xf5\x1f\x52\xc4\x3b\xe3\x62\xda\x9f\xbe\xa4\xfe\x19\x6e\x09\x63\xeb\xb5\xb2\x7d\xc1\xe5\x42\x42\x4a\x55\x14\x08\x44\x79\xba\x7a\x8a\x92\x28\x89\x52\x21\x25\xb0\x2e\xe4\xb1\x82\xf2\x3d\x73\x93\xc5\xf1\x90\xcf\xd6\x49\x92\xf6\x70\x21\xa4\xd4\xd6\xb7\x85\x6c\xd0\x77\xa6\x00\xcc\x4b\x0d\x7d\x58\x15\xb5\xa1\x30\x5f\x19\x86\x82\xde\xe6\x5f\x54\x0d\xd4\x28\x0d\x9f\xcd\x0f\xd0\x07\x6d\x61\xf9\xd9\xd4\x86\xbf\x29\x57\x02\x2e\xbf\x83\x6e\xd1\xf0\xe1\xa3\x77\x0c\xff\xf1\x9f\xe0\x0e\xcb\xef\x80\x9d\xd1\xf0\x87\xd6\xbe\x75\xbc\xfc\x06\xe4\x5b\xd4\xf0\x77\xeb\x59\x0d\x0d\xd0\xb1\x48\x6a\xdb\x12\x03\x4a\xd3\x48\x0c\xc8\x3c\x4d\xfa\x7e\x93\x38\xdd\xf4\x7d\x1a\x70\x2c\xb5\x92\x3f\x8c\x85\x3c\x26\xec\xfa\x59\xa0\x03\x06\x8a\xb5\x8a\x34\xf2\xd9\xae\x8e\xb0\x70\x82\x39\xac\x40\x32\x10\xcb\xdd\xae\x45\x47\x43\x11\x5b\x92\x1a\x90\xe7\x89\xc7\xf1\x45\xa1\xe0\x54\xdb\xa0\xe9\x14\x83\xac\xe0\x70\x53\x52\xc1\xe1\x6c\x77\xba\x45\x90\x8d\x47\xce\xd7\xeb\x0f\x81\xe4\x2b\x70\x52\xb5\xbc\x9f\x87\x54\xce\xbf\xb9\x7f\xfb\x2a\x8a\x34\x75\x81\xd2\xe5\xab\x81\xa8\xac\xf5\x6f\x7d\x2f\xc6\x42\x09\x45\xfe\x49\x59\x02\x91\xbe\xbc\xc4\x9d\x0a\x4e\x29\x47\x1e\x89\xac\x2f\xc5\xea\xe5\xb7\xe3\x99\x87\x4e\xe8\xa7\xe5\x06\xc3\xbf\x7a\xe4\x4c\xac\xd7\x1f\x4e\xcb\x84\xdb\x31\x8e\x1d\x6f\x43\x70\x13\xcd\xcb\x9f\x92\x6d\x32\xd1\x9f\x05\xdf\x01\xf3\xfa\xed\x9c\x7e\x3b\xd6\xf7\x57\xa1\x8f\x74\xde\xb6\x35\xfc\x15\xbc\x35\xec\xa8\x0e\x5f\xaf\x8a\xf7\x99\x18\x0d\xf6\x02\x42\xd8\x85\xcc\x29\x86\xa0\x8a\xaf\xce\x1e\x86\x87\x60\x4c\xba\x3e\xd8\x51\x6b\x65\x38\xd2\x19\x00\xb0\x8e\x89\xec\x45\x35\xb0\x7e\x0f\xdd\x6d\x21\xbc\x02\xb4\x57\x08\x13\x4e\x4b\xd8\x27\x1e\x80\x85\xfd\x8c\x31\x9d\xc2\x47\xdb\x99\x69\xe4\x31\x82\x35\xbb\x39\x8a\x35\xbb\x47\x41\xfd\xfb\xe8\x1b\x70\x73\xb8\x90\xbc\xcc\xdd\x85\x86\x03\x9b\xc3\x01\xeb\x5f\x20\x35\x95\x89\xd9\xd2\x98\xd4\x54\xe6\x3d\x3a\x01\x1d\xed\x7d\xfa\x15\xf5\x17\x22\x00\x4f\xd5\xcd\x55\x8b\x8f\x0d\x7e\x55\x7b\xd7\xd4\x7c\x68\x20\x13\x9f\x8c\x85\xaf\xf8\x11\x41\x31\x2c\xe6\xbc\x7e\x75\x81\x73\xd3\x8f\x2c\x7f\x55\x33\xb5\xf9\x9c\xc9\x6f\xee\xe9\x52\x38\xd8\xfa\xf6\x92\x93\xc5\xee\x6b\xce\xcd\x3b\xb5\xee\x6d\xe9\xc4\xae\xd7\xcc\x7a\x73\xb8\x53\xc0\x85\x3d\x6f\x6a\xcf\x2d\x39\x36\xe4\xff\x01\x00\x00\xff\xff\x82\x96\x39\xcc\x5e\x09\x00\x00") + +func testFixturesDocYamlAdminHighAvailabilityKubeApiserverYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlAdminHighAvailabilityKubeApiserverYaml, + "test/fixtures/doc-yaml/admin/high-availability/kube-apiserver.yaml", + ) +} + +func testFixturesDocYamlAdminHighAvailabilityKubeApiserverYaml() (*asset, error) { + bytes, err := testFixturesDocYamlAdminHighAvailabilityKubeApiserverYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/high-availability/kube-apiserver.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlAdminHighAvailabilityKubeControllerManagerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x94\xcd\x6e\xdb\x30\x0c\xc7\xef\x79\x0a\x9d\x76\x93\x1d\x3b\x49\x9b\x19\x48\x2f\x1b\xb6\xd3\xd6\x02\x03\x76\xa7\x25\x36\x11\x22\x4b\x06\x45\x7b\xc8\x9e\x7e\x90\x9b\x36\x71\x6c\xa7\xcd\x8e\xfc\xfa\x91\x32\xff\x34\xd4\xe6\x37\x52\x30\xde\x15\xa2\xcd\x66\x7b\xe3\x74\x21\x9e\xbc\x9e\x55\xc8\xa0\x81\xa1\x98\x09\xe1\xa0\xc2\x42\xec\x9b\x12\xa5\xf2\x8e\xc9\x5b\x8b\x24\x2b\x70\xb0\x45\x9a\x85\x1a\x55\xcc\x8a\x21\x30\x0e\x29\x44\x4b\x0a\xe5\xab\x0a\x9c\x8e\x46\x34\xd3\xd2\xb8\x34\xec\x8e\x96\x54\xaf\xee\x26\x50\x6a\xbd\x02\xdb\x25\x4c\x34\x11\x52\x56\x10\x18\x69\x93\xe5\xf7\xc9\x3c\x99\x27\x59\xb1\x9e\xaf\xe7\x42\x4a\x65\x9b\x18\x90\x71\xc8\x0d\xe6\x28\x19\x03\xcb\xb2\x6c\xc8\x85\xae\x87\x38\x4b\x52\x46\xd3\x26\x9b\x27\xf9\x72\x15\x29\x69\x76\x27\xa4\x04\x1b\xfb\x33\x4a\xe7\x35\x76\x29\x61\xc3\xd4\x60\x57\xe7\x1b\x2d\x6b\xf2\xad\xd1\x48\x9b\xad\xc2\x48\x0b\x48\xad\x51\x28\x41\x29\xdf\x38\x96\x35\x99\x36\xd6\xef\xf1\x20\x9f\x8d\xc5\x4d\x1a\xa8\xed\x9e\x42\x0e\x19\x43\x1a\x0b\x90\x92\x3d\x1e\xde\x26\x6a\x37\xb9\xc8\x1e\x1e\xd2\x16\xe2\xf3\xb7\x53\x0f\x4f\xac\xdf\x0a\x29\x2d\x82\x46\x92\x68\x51\xb1\xc8\x1f\x3e\x65\x1d\xc7\x54\xb0\x8d\x8b\x59\x87\x64\xab\x28\x31\x7e\x8a\x52\x3c\x6b\xc8\x97\x77\x8b\xb5\x5e\x65\xb0\x5c\x97\x00\xd9\x42\x2d\x56\x8b\xc5\xfd\xb3\xd2\xcb\xfb\xcf\x8b\x0e\x67\x4d\x8b\x0e\x43\x78\x22\x5f\x62\x71\x9c\x74\xc7\x5c\x7f\x47\x7e\x35\x85\xa8\x81\x77\x85\x48\x77\x08\x96\x77\x7f\x4f\x6e\x4f\x5c\x88\x6c\x9e\xaf\xf2\xa3\xcf\x38\xc3\x06\xec\x57\xb4\x70\xf8\x85\xca\x3b\x1d\x0a\x91\xad\x8e\x51\x36\x15\xfa\x86\x4f\x81\xce\x7f\x5d\x69\x31\xa3\xf5\xb6\xa9\xf0\x47\xfc\xee\xe1\x55\x5a\x55\xb4\x9e\x5e\xe6\xea\x7f\xf9\x63\xb3\x17\x6c\xa0\x36\x46\x8e\x3e\x42\xd0\x8f\xce\x1e\x0a\x11\x77\x3d\x42\xfa\xc0\x66\x7a\x78\xeb\xb7\x71\xf9\x23\x24\x64\x95\x86\x60\x7b\xd9\xc8\xea\xe4\x7a\x77\x96\x78\x24\x61\x07\x84\x03\x4e\x13\xa8\x0b\xdc\x00\x8b\x0f\xbb\xc4\xb4\x40\xb7\x8e\x33\x32\xc8\x6d\x04\x6b\xca\x31\x8a\x35\xe5\xad\xa0\xee\xf7\xe1\x6b\x74\x63\xb8\x18\xec\xc7\xde\x85\xc6\x85\x8d\xe1\x90\xd5\x7f\x90\xea\xbd\x49\xd9\x86\x4b\x52\xbd\x37\x27\xef\x00\xb4\xf3\x81\x7f\x22\xff\xf1\xb4\x7f\xf3\xbd\x68\xff\xf8\x7b\x8d\x09\x5d\x93\x59\xef\x2e\x47\xf4\x7f\xa9\xfe\xc9\xda\x8f\x2b\x9e\x0f\x35\x16\xe2\x9b\xb1\xf8\x48\x5f\x08\x81\x71\x36\x76\x08\x93\x9d\xce\x2f\xe2\xe2\x1e\x26\x6b\x86\x37\x30\x76\x01\x57\x1f\xd7\x2f\x7c\xd3\xfc\xf5\x96\x83\x66\xef\xd7\x9c\x2b\x7b\xa8\xeb\xeb\xa5\x03\x2d\x4f\x29\xf9\xea\xc7\x1d\x02\x7a\xda\xbd\x5a\x7b\xae\xd7\x4b\xb5\xfe\x0b\x00\x00\xff\xff\x6e\x92\xf3\xcb\x30\x08\x00\x00") + +func testFixturesDocYamlAdminHighAvailabilityKubeControllerManagerYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlAdminHighAvailabilityKubeControllerManagerYaml, + "test/fixtures/doc-yaml/admin/high-availability/kube-controller-manager.yaml", + ) +} + +func testFixturesDocYamlAdminHighAvailabilityKubeControllerManagerYaml() (*asset, error) { + bytes, err := testFixturesDocYamlAdminHighAvailabilityKubeControllerManagerYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/high-availability/kube-controller-manager.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlAdminHighAvailabilityKubeSchedulerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x52\xc1\xae\x9b\x30\x10\xbc\xf3\x15\x7b\xea\xcd\x80\x49\xd3\x10\x4b\x2f\x97\x56\xed\xa9\x7d\x91\x2a\xf5\xbe\xd8\x1b\x70\x63\x6c\x64\x2f\x54\xe9\xd7\x57\x10\xd2\x27\xaa\x3e\xbd\x1b\x33\xb3\xcc\x68\xbc\x8b\x83\xfd\x41\x31\xd9\xe0\x15\x4c\x32\xbb\x5a\x6f\x14\x9c\x83\xc9\x7a\x62\x34\xc8\xa8\x32\x00\x8f\x3d\x29\xb8\x8e\x0d\x89\xa4\x3b\x32\xa3\xa3\x98\xa5\x81\xf4\x2c\x76\x21\xf1\x37\xe2\x5f\x21\x5e\x15\x70\x1c\x29\x03\xd0\xc1\x33\x5a\x4f\x31\xcd\x13\xe2\xff\x06\x00\x00\xb6\xc7\x76\x56\xea\x94\xb7\x3a\xe6\x36\x14\xdb\x21\xb5\x7b\x6f\xca\xa6\xbe\xd4\xcd\x4e\x52\x75\x38\xee\x0e\xbb\xea\x70\xfc\x20\xf7\x55\x7d\xd8\x1d\x1b\x7d\x5c\x5c\x74\xe8\x7b\xf4\x46\x2d\x40\x40\xd1\x58\x5f\xa4\x6e\x45\x42\x3f\xe8\x31\xc5\xc2\x05\x8d\x6e\x19\xd8\x06\x81\x10\x3d\x26\xa6\xf8\x24\xab\x43\x5e\xe6\x65\x2e\x55\x5d\xd6\x25\x08\x31\x3d\x55\x20\x84\x23\x34\x14\x05\x39\xd2\x0c\xf2\x74\x2a\x26\x9c\xdd\xda\x7f\x7c\x72\x17\xda\x25\x0f\xa0\x3a\xbd\x93\xcb\xa7\xb3\x13\x79\x4a\xe9\x1c\x43\x43\x6a\x55\x3b\xe6\xe1\x0b\xf1\x03\x02\x0c\xc8\x9d\x82\xa2\x23\x74\xdc\xfd\x7e\xa1\x43\x64\x05\xb2\xac\xf6\x72\xe5\xac\xb7\x6c\xd1\x7d\x22\x87\xb7\xef\xa4\x83\x37\x49\x81\xdc\xaf\x2a\xdb\x9e\xc2\xc8\x2f\xc2\xc2\x4f\xc1\x8d\x3d\x7d\x0d\xa3\xe7\xf4\x78\xa6\x7e\x46\xe7\x7b\xea\x9b\x65\xee\x1b\x74\xa1\xbd\x58\x47\xaf\x18\xc4\xd1\x17\x89\x74\x24\x4e\x8b\x51\xf4\xc4\x94\xe6\xa5\x26\x8a\x93\xd5\x84\x5a\xcf\xbf\x6c\x2c\x0d\x5d\x70\x74\x2c\x38\x5c\xc9\x8b\x54\xd3\x4f\xb3\xea\x91\xd0\x3c\x7b\x77\xfb\x7b\x55\xf7\x12\xeb\x49\xcd\x67\xb7\x64\x67\x9b\xe7\x7b\xb3\x08\xdf\x06\x52\xf0\xd9\x3a\x7a\x8e\x1f\x23\x21\xdf\xdb\x6c\xfb\xfd\x09\x00\x00\xff\xff\xb8\x36\x00\x0a\x16\x03\x00\x00") + +func testFixturesDocYamlAdminHighAvailabilityKubeSchedulerYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlAdminHighAvailabilityKubeSchedulerYaml, + "test/fixtures/doc-yaml/admin/high-availability/kube-scheduler.yaml", + ) +} + +func testFixturesDocYamlAdminHighAvailabilityKubeSchedulerYaml() (*asset, error) { + bytes, err := testFixturesDocYamlAdminHighAvailabilityKubeSchedulerYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/high-availability/kube-scheduler.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlAdminLimitrangeInvalidPodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xcc\x41\x8a\xc3\x30\x0c\x05\xd0\xbd\x4f\x21\xb2\x77\x26\x61\x36\x83\xef\x30\x30\xab\xd9\x16\xd5\x16\xa9\x48\x6c\x19\xc9\x09\xf4\xf6\xc5\xa1\x04\xaa\xdd\xd7\x7f\x7c\xac\xfc\x4f\x6a\x2c\x25\xc0\x31\xbb\x95\x4b\x0a\xf0\x27\xc9\x65\x6a\x98\xb0\x61\x70\x00\x05\x33\x05\xe0\x72\xe0\xc6\xc9\x57\x49\xce\x2a\xc5\xde\x44\x29\x0d\xb9\x90\x5a\x4f\xfe\x2d\xd7\xfd\x4e\x5a\xa8\x91\x79\x23\x3d\xc8\x3f\xc4\x5a\xaf\x1c\x00\x00\x67\x5c\x3a\xfa\xb1\x71\x89\x3a\xb2\x7c\x9d\xe8\xf6\x81\x94\x4c\x76\x8d\x74\xee\xf6\xdb\x38\x73\xbb\x12\x40\xac\x7b\x80\xe1\x7b\xb8\x1e\x99\xb2\xe8\x33\xc0\x3c\x4d\xbf\xec\x5e\x01\x00\x00\xff\xff\x01\x0f\xba\xef\xd8\x00\x00\x00") + +func testFixturesDocYamlAdminLimitrangeInvalidPodYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlAdminLimitrangeInvalidPodYaml, + "test/fixtures/doc-yaml/admin/limitrange/invalid-pod.yaml", + ) +} + +func testFixturesDocYamlAdminLimitrangeInvalidPodYaml() (*asset, error) { + bytes, err := testFixturesDocYamlAdminLimitrangeInvalidPodYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/limitrange/invalid-pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlAdminLimitrangeLimitsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x8f\x31\x8b\xc3\x30\x0c\x85\x77\xff\x0a\x91\xfd\xc0\x4e\xe0\x06\xaf\x37\xdc\x72\x07\x25\x43\x77\x11\xab\x45\x34\xb2\xdd\xd8\x29\xcd\xbf\x2f\x4e\x42\x21\xcd\x50\xa8\x27\xe9\xf9\x7d\x7a\x3c\x8c\x7c\xa4\x21\x71\xf0\x16\x6e\x46\x5d\xd8\x3b\x0b\x7f\x2c\x9c\x5b\xf4\x67\x52\x42\x19\x1d\x66\xb4\x0a\xc0\xa3\x90\x05\x99\xfa\xf2\x9d\x54\x8a\xd4\x15\x79\x59\xcb\xf4\x05\x82\xf7\x32\x94\xd7\xc5\xd1\x42\x55\x57\xeb\x2a\x24\x61\x98\x2c\x98\x5f\x9e\x15\x61\xbf\x71\xd6\x5a\xcb\x8b\xf5\xfb\x7f\xb1\xe6\x29\x92\x85\x43\x70\x73\x84\xa3\x13\x8e\x7d\xde\xc0\xcd\x1e\xae\xb5\x5e\xf1\x15\x68\xe9\x3a\x52\xca\xef\x42\xcd\x93\xfb\xbc\x8b\xd9\x9f\x6d\x36\x5d\x7e\x82\xcf\xc8\x9e\x06\xf5\x08\x00\x00\xff\xff\xb5\xd3\x47\x59\x80\x01\x00\x00") + +func testFixturesDocYamlAdminLimitrangeLimitsYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlAdminLimitrangeLimitsYaml, + "test/fixtures/doc-yaml/admin/limitrange/limits.yaml", + ) +} + +func testFixturesDocYamlAdminLimitrangeLimitsYaml() (*asset, error) { + bytes, err := testFixturesDocYamlAdminLimitrangeLimitsYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/limitrange/limits.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlAdminLimitrangeNamespaceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\x31\x0e\x84\x40\x08\x05\xd0\x9e\x53\x70\x81\x2d\xb6\xe5\x10\x96\xf6\x3f\xce\x2f\x88\x03\x12\x87\x18\x8f\xef\x43\xf9\xce\x7b\xf9\x95\xa6\xcf\x5f\x4e\xcf\x61\xba\x21\xb8\x0a\x07\x25\xd8\x18\x68\x98\xa8\x26\x82\xa6\xd3\xc3\xfb\xc7\x17\x51\x93\xf2\x05\x00\x00\xff\xff\xa4\x0d\x06\xa4\x3f\x00\x00\x00") + +func testFixturesDocYamlAdminLimitrangeNamespaceYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlAdminLimitrangeNamespaceYaml, + "test/fixtures/doc-yaml/admin/limitrange/namespace.yaml", + ) +} + +func testFixturesDocYamlAdminLimitrangeNamespaceYaml() (*asset, error) { + bytes, err := testFixturesDocYamlAdminLimitrangeNamespaceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/limitrange/namespace.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlAdminLimitrangeValidPodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\xcd\xc1\x4a\xc6\x30\x0c\xc0\xf1\x7b\x9f\x22\x7c\xf7\x4e\x26\x08\xd2\x77\x10\x3c\x79\x95\xac\x0d\x33\xac\x6d\x4a\xd2\x0d\x7c\x7b\xe9\x18\x03\xf9\x8e\xc9\xff\x47\x82\x8d\xbf\x48\x8d\xa5\x06\x38\x66\xb7\x71\x4d\x01\x3e\x25\xb9\x42\x1d\x13\x76\x0c\x0e\xa0\x62\xa1\x00\x07\x66\x4e\xbe\x49\x72\x00\x19\x17\xca\x36\xda\x73\xb5\x46\x71\x94\x28\xb5\x23\x57\xd2\xd3\xf9\xcb\x6d\xfb\x42\x5a\xa9\x93\x79\x23\x3d\xc8\xff\x88\xf5\x91\xce\x5b\x5c\x70\x1d\xe8\xdd\xa6\x35\xea\xc4\xf2\x72\xa2\xef\x7f\x48\xc9\x64\xd7\x48\xd7\x7f\x80\xcc\x85\xfb\x3d\x01\xc4\xb6\x07\x78\xcc\x8f\x7b\x51\xa8\x88\xfe\x06\x78\x9b\x5f\x3f\xd8\xfd\x05\x00\x00\xff\xff\x50\xe8\xe9\x7f\xf4\x00\x00\x00") + +func testFixturesDocYamlAdminLimitrangeValidPodYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlAdminLimitrangeValidPodYaml, + "test/fixtures/doc-yaml/admin/limitrange/valid-pod.yaml", + ) +} + +func testFixturesDocYamlAdminLimitrangeValidPodYaml() (*asset, error) { + bytes, err := testFixturesDocYamlAdminLimitrangeValidPodYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/limitrange/valid-pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlAdminNamespacesNamespaceDevJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xcb\xa1\x0e\x02\x31\x10\x84\x61\xdf\xa7\x98\xac\xc6\x60\xef\x21\x90\xf8\x81\x8e\x68\x68\xf7\x1a\xda\x9c\x21\xf7\xee\x64\x8f\x04\x77\x62\xcd\xfc\xdf\x7e\x12\x60\xaf\xe2\xd9\x16\xd8\x8d\x4d\xa3\xf3\x29\xbb\xc4\xcc\x5e\xee\x7a\x8f\xb2\x7a\xc4\xed\xfa\x5b\x9b\x26\x33\x27\x6d\x41\x3c\x03\xe6\x6c\x0a\x91\xb5\xa9\xae\xbd\xc9\xe7\x41\x01\xab\x7c\xa8\x8e\x3f\x3d\xc1\x47\xdb\x53\xdc\x9e\xbe\x01\x00\x00\xff\xff\x99\xf7\x0a\x5a\x92\x00\x00\x00") + +func testFixturesDocYamlAdminNamespacesNamespaceDevJsonBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlAdminNamespacesNamespaceDevJson, + "test/fixtures/doc-yaml/admin/namespaces/namespace-dev.json", + ) +} + +func testFixturesDocYamlAdminNamespacesNamespaceDevJson() (*asset, error) { + bytes, err := testFixturesDocYamlAdminNamespacesNamespaceDevJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/namespaces/namespace-dev.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlAdminNamespacesNamespaceProdJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xe6\x52\x50\x50\xca\xce\xcc\x4b\x51\xb2\x52\x50\xf2\x4b\xcc\x4d\x2d\x2e\x48\x4c\x4e\x55\xd2\x01\x09\x27\x16\x64\x86\xa5\x16\x15\x67\xe6\xe7\x81\x24\xcb\x0c\x21\xa2\xb9\xa9\x25\x89\x29\x89\x25\x89\x4a\x56\x0a\x20\xcd\x0a\x0a\x4a\x79\x89\xb9\xa9\x20\x15\x05\x45\xf9\x29\xa5\xc9\x25\x20\xf5\x3a\x10\x99\x9c\xc4\xa4\xd4\x9c\x62\xb8\x4a\xec\x6a\xc1\x52\xb5\x5c\x20\x5c\xcb\x05\x08\x00\x00\xff\xff\xa0\x41\x9f\x81\x90\x00\x00\x00") + +func testFixturesDocYamlAdminNamespacesNamespaceProdJsonBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlAdminNamespacesNamespaceProdJson, + "test/fixtures/doc-yaml/admin/namespaces/namespace-prod.json", + ) +} + +func testFixturesDocYamlAdminNamespacesNamespaceProdJson() (*asset, error) { + bytes, err := testFixturesDocYamlAdminNamespacesNamespaceProdJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/namespaces/namespace-prod.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlAdminResourcequotaLimitsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8b\x31\x0e\xc2\x30\x0c\x45\xf7\x9c\xc2\x17\x40\x6a\x2b\x95\xc1\x2b\x2b\x2c\x1d\xd8\xad\xd6\x20\x8b\xda\x0d\x89\x83\xd4\xdb\xa3\x40\x16\x84\x27\xbf\xf7\xf5\x28\xca\x95\x53\x96\xcd\x10\x5e\x7d\x78\x88\x2d\x08\x67\x51\xf1\x89\xec\xce\x41\xd9\x69\x21\x27\x0c\x00\x46\xca\x08\x6b\x1d\x73\xc8\x91\xe7\x2a\xbf\x58\xbf\x03\x2c\x7c\xa3\xb2\x7a\x85\x7a\x73\x2c\x08\x43\xd7\x69\x63\x65\xdd\xd2\x8e\x30\xf6\xc3\x45\x3e\xae\x05\x13\x3f\x0b\xe7\xdf\xae\xff\xef\x86\xf1\xd8\x3a\xdf\x23\x23\x9c\x36\x73\x12\xe3\x14\xde\x01\x00\x00\xff\xff\xc1\xba\xa5\x77\xc6\x00\x00\x00") + +func testFixturesDocYamlAdminResourcequotaLimitsYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlAdminResourcequotaLimitsYaml, + "test/fixtures/doc-yaml/admin/resourcequota/limits.yaml", + ) +} + +func testFixturesDocYamlAdminResourcequotaLimitsYaml() (*asset, error) { + bytes, err := testFixturesDocYamlAdminResourcequotaLimitsYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/resourcequota/limits.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlAdminResourcequotaNamespaceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\xb1\x11\x84\x40\x08\x05\xd0\x9c\x2a\x68\xe0\x82\x4b\x29\xc2\xd0\xfc\x8f\xfb\x83\x1d\x85\x45\x17\x1d\xcb\xf7\x21\xfb\xca\x6b\xf6\x11\xa6\xcf\x5f\xf6\x1e\xcd\x74\x81\x73\x26\x36\x8a\xb3\xd0\x50\x30\x51\x0d\x38\x4d\xcf\x7b\x14\x7e\x7c\xe1\x79\x50\xbe\x00\x00\x00\xff\xff\x4d\x03\x2d\x13\x3f\x00\x00\x00") + +func testFixturesDocYamlAdminResourcequotaNamespaceYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlAdminResourcequotaNamespaceYaml, + "test/fixtures/doc-yaml/admin/resourcequota/namespace.yaml", + ) +} + +func testFixturesDocYamlAdminResourcequotaNamespaceYaml() (*asset, error) { + bytes, err := testFixturesDocYamlAdminResourcequotaNamespaceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/resourcequota/namespace.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlAdminResourcequotaQuotaYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8e\x31\x6a\x05\x31\x0c\x44\xfb\x3d\x85\xf0\x09\xb2\x81\x34\xbe\x40\xea\xa4\x48\x2f\x64\x41\x44\x6c\xcb\x91\xe4\x85\xdc\x3e\xd8\xff\x17\x5b\x89\xf7\x60\x34\x83\x43\xbe\xd8\x5c\xb4\x67\xb8\xce\xe3\x47\x7a\xc9\xf0\xc9\xae\xd3\x88\x3f\xa6\x06\x1e\x8d\x03\x0b\x06\xe6\x03\xa0\x63\xe3\x0c\xbf\xdb\xfb\x60\x5a\xee\x1b\xad\xac\x0b\x40\x63\x66\x48\xaf\x2f\x69\x53\xe3\xa6\xf6\x97\xe1\x7c\x97\xcd\x63\xf5\x78\x70\x8f\x4b\xeb\x6c\x4c\x15\xa5\x79\x86\x74\x3e\x03\x43\xcb\x1d\x8d\x47\x15\xc2\x10\xed\xa4\x3d\x4c\x6b\x65\xf3\x5b\x81\x3d\x67\xee\x39\x3b\xf9\xf0\xce\x64\x1c\xf7\x57\xce\x76\x09\xf1\x52\x6f\xe9\xf8\x0f\x00\x00\xff\xff\x9d\x63\xab\x79\xf4\x00\x00\x00") + +func testFixturesDocYamlAdminResourcequotaQuotaYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlAdminResourcequotaQuotaYaml, + "test/fixtures/doc-yaml/admin/resourcequota/quota.yaml", + ) +} + +func testFixturesDocYamlAdminResourcequotaQuotaYaml() (*asset, error) { + bytes, err := testFixturesDocYamlAdminResourcequotaQuotaYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/resourcequota/quota.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideConfigmapConfigmapYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\xc8\x0c\x4b\x2d\x2a\xce\xcc\xcf\xb3\x52\x28\x33\xe4\xca\xce\xcc\x4b\xb1\x52\x70\xce\xcf\x4b\xcb\x4c\xf7\x4d\x2c\xe0\xca\x4d\x2d\x49\x4c\x49\x2c\x49\xb4\xe2\x52\x50\xc8\x4b\xcc\x4d\xb5\x52\x28\x49\x2d\x2e\xd1\x4d\x06\x2b\xc8\x4d\x2c\xe0\x82\x49\x82\x68\x5d\x43\x2b\x85\xb2\xc4\x9c\xd2\x54\x5d\x43\x98\x88\x11\x4c\xc4\x88\x0b\x10\x00\x00\xff\xff\x21\xcc\x3c\xb6\x6a\x00\x00\x00") + +func testFixturesDocYamlUserGuideConfigmapConfigmapYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideConfigmapConfigmapYaml, + "test/fixtures/doc-yaml/user-guide/configmap/configmap.yaml", + ) +} + +func testFixturesDocYamlUserGuideConfigmapConfigmapYaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideConfigmapConfigmapYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/configmap/configmap.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideDeploymentYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xce\xbd\x6e\xc3\x30\x0c\x04\xe0\x5d\x4f\x71\x2f\x60\xb4\x45\x97\x42\x73\xc7\x0e\x9d\xb2\x33\x32\xe1\x08\x91\x28\x42\x22\x82\xe4\xed\x03\x21\x3f\xb6\x63\xe4\x46\xe1\xbb\x13\x49\xe3\x8e\x6b\x8b\x45\x3c\x48\xb5\x7d\x9c\xbe\xdc\x31\xca\xe8\xf1\xcb\x9a\xca\x25\xb3\x98\xcb\x6c\x34\x92\x91\x77\x80\x50\x66\x0f\x99\xa2\x9c\x87\x71\x26\x40\xa2\x3d\xa7\xd6\xc9\x5b\xd4\x94\x43\x07\x95\x35\xc5\x40\xcd\xe3\xdb\x01\x8d\x13\x07\x2b\xf5\x56\xcd\x64\xe1\xf0\xb7\xd8\x5a\xad\x39\xc0\x38\x6b\x22\xe3\x3b\x5f\x9c\xd6\x93\x56\xcd\xd7\x2e\xf0\x38\xa1\x27\x14\x31\x8a\xc2\xf5\xe9\x87\x8d\xef\x89\x99\xa6\xcd\xa3\x96\x6a\x8b\x7f\x86\x79\xed\xbf\x54\xf3\xf8\xf9\x74\xd7\x00\x00\x00\xff\xff\x93\x04\x6f\x26\x5c\x01\x00\x00") + +func testFixturesDocYamlUserGuideDeploymentYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideDeploymentYaml, + "test/fixtures/doc-yaml/user-guide/deployment.yaml", + ) +} + +func testFixturesDocYamlUserGuideDeploymentYaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideDeploymentYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/deployment.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideDownwardApiDapiPodYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x90\x4d\x4b\xf3\x40\x14\x85\xf7\xf9\x15\x97\xac\xdf\xb4\xbc\xdb\xd9\xb5\x7e\x60\x17\x6d\x07\x2b\x82\x88\x94\xeb\xcc\xad\x19\xcc\x7c\x30\x73\x13\x2c\xa5\xff\x5d\x26\xc4\x1a\x41\xdd\xa8\x9b\x90\x39\xcf\xe1\x3c\xc3\x60\x30\xb7\x14\x93\xf1\x4e\x40\xf7\xbf\x78\x36\x4e\x0b\x90\x5e\x17\x96\x18\x35\x32\x8a\x02\xc0\xa1\x25\x01\x1a\x83\xa9\x98\x12\x57\xc1\xeb\x22\x05\x52\x99\x29\xef\x18\x8d\xa3\x98\xf2\x09\xa0\x1a\xda\x7d\xf1\x04\x7b\x04\x60\x2c\x3e\x91\x80\xc3\x61\x32\x6f\xd3\x7e\xee\x5f\x16\x39\x38\x1e\x07\xac\xbc\xb5\x98\x2f\x70\x0f\xe5\xf4\xd1\xb8\x69\xaa\xcb\x7f\x50\x56\x2a\x7f\xc9\x75\x25\x3c\x0c\x4d\x72\x9d\x18\x7e\xdf\x95\xcb\xbb\xad\x5c\x9f\x6f\x57\xb3\xe5\xc5\x89\x01\x74\xd8\xb4\x74\x19\xbd\x15\xa3\x10\x60\x67\xa8\xd1\xd7\xb4\xfb\x98\x0e\xb9\x44\xae\x05\xbc\x3d\xc1\x24\xcf\x7f\x67\xdb\xc8\xd9\xd9\x1f\x28\x53\x40\xf5\xa5\x77\x21\x7f\x45\x98\x18\xb9\x4d\x93\xe0\xf5\x68\x70\xa4\xba\x5a\x6f\x6e\x7e\xe4\xfa\x44\x56\xfb\xc4\xfd\x64\xa4\xc4\x18\x59\xfa\xc6\xa8\xbd\x80\x15\x75\x14\x8b\xd7\x00\x00\x00\xff\xff\x17\xac\xa1\x83\x92\x02\x00\x00") + +func testFixturesDocYamlUserGuideDownwardApiDapiPodYamlInBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideDownwardApiDapiPodYamlIn, + "test/fixtures/doc-yaml/user-guide/downward-api/dapi-pod.yaml.in", + ) +} + +func testFixturesDocYamlUserGuideDownwardApiDapiPodYamlIn() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideDownwardApiDapiPodYamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/downward-api/dapi-pod.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideJobYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x8e\xcf\x6a\xc3\x30\x0c\x87\xef\x7e\x0a\xe1\xd3\x06\x09\xcb\x76\x34\xec\x05\x06\x1b\x3b\xed\x32\x7a\x90\x1d\x91\x8a\xfa\x1f\xb6\x9a\xd2\xb7\x2f\x82\x26\xb4\xbf\x8b\xa4\x8f\x4f\x42\x58\xf9\x8f\x5a\xe7\x92\x1d\x78\x94\x70\x7c\x5b\xdf\xcd\x89\xf3\xec\xe0\xab\x78\x93\x48\x70\x46\x41\x67\x00\x32\x26\x72\x50\xd9\xf4\x4a\x41\x81\x50\xaa\x11\x85\xb4\x07\x78\x54\x35\xbb\xae\xc3\xb6\xa2\x09\x25\x0b\x72\xa6\xd6\x37\x32\x3e\xcb\x1a\x4e\xb8\x28\xa1\x16\x77\x16\x4a\x4a\xa8\x9f\xfd\x5b\xe5\x76\x00\xb0\xe3\xb7\xe7\x25\x9f\xd3\xa7\xaf\x6c\x07\xb0\xe3\x25\x92\xd6\xda\x38\x0b\xf8\xca\x2f\x1f\xd3\x34\xbd\xda\xc3\xfd\x4a\xa3\x2e\xd8\xe4\xb7\x44\x0e\x57\x07\x3f\xb4\x52\x33\xe6\x16\x00\x00\xff\xff\x88\x8f\xaf\xe9\x06\x01\x00\x00") + +func testFixturesDocYamlUserGuideJobYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideJobYaml, + "test/fixtures/doc-yaml/user-guide/job.yaml", + ) +} + +func testFixturesDocYamlUserGuideJobYaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideJobYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/job.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideLivenessExecLivenessYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\xbf\x6e\xc2\x30\x10\xc6\xf7\x3c\xc5\xf7\x02\x6e\x92\xa1\x1d\x8c\xd4\x01\x75\xe9\x86\x54\xa9\xfb\xc5\xb9\x92\x13\xfe\x13\xd9\x07\x02\x21\xde\xbd\x4a\x08\x0a\x03\xdb\x77\xbf\xcf\x3e\xff\x64\x1a\xe5\x97\x73\x91\x14\x2d\x4e\x6d\x75\x90\xd8\x5b\xec\x52\x5f\x05\x56\xea\x49\xc9\x56\x80\xa7\x8e\x7d\x99\x12\xa0\x5c\xd4\xc2\xcb\x89\x23\x97\x52\x01\x91\x02\xaf\xc0\xf0\x99\x5d\x55\x46\x76\xd3\x71\x97\xa2\x92\x44\xce\xf3\x65\x03\xca\xfb\x65\x8d\x41\xdd\x49\xac\xcb\xb0\x4c\xc6\x2d\x81\xdd\x90\x90\x0e\xf8\x44\xad\x61\xac\x07\x26\xaf\xc3\x06\xc5\x33\x8f\x68\x9b\x0d\x72\x80\xc9\x7f\xaf\xda\x8f\xa6\x99\x97\x48\xa0\x3d\x5b\x5c\xaf\x6f\xdb\x63\xb9\x6c\xd3\xf9\x7b\x02\xb7\xdb\x5c\x3e\x44\x77\x39\x75\x7c\x77\x01\x26\xe9\x47\x9e\xac\x43\xa0\xd8\xaf\xc0\xc0\x91\x3e\x4d\x4f\x6f\x2f\x54\xa2\xa8\x90\xff\x62\x4f\x97\x1f\x76\x29\xf6\xc5\xa2\x7d\x5f\x5a\x95\xc0\xe9\xa8\x6b\x31\xf3\x57\x1f\xf7\x1f\x00\x00\xff\xff\x27\xa4\xbd\xd0\x8f\x01\x00\x00") + +func testFixturesDocYamlUserGuideLivenessExecLivenessYamlInBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideLivenessExecLivenessYamlIn, + "test/fixtures/doc-yaml/user-guide/liveness/exec-liveness.yaml.in", + ) +} + +func testFixturesDocYamlUserGuideLivenessExecLivenessYamlIn() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideLivenessExecLivenessYamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/liveness/exec-liveness.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideLivenessHttpLivenessYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\xbd\x4e\xc3\x30\x14\x85\xf7\x3c\xc5\x79\x01\x43\x3b\x20\x55\xde\x2a\x90\x80\xad\x12\x12\x62\xbd\x6d\x8e\x12\x0b\xff\x44\xf1\x4d\x10\x54\x7d\x77\x94\xd4\x21\x1d\xf0\x64\x7f\xe7\xc7\xf6\x95\xce\xbd\xb3\xcf\x2e\x45\x8b\x71\x5b\x7d\xba\x58\x5b\x1c\x52\x5d\x05\xaa\xd4\xa2\x62\x2b\xc0\xcb\x91\x3e\x4f\x3b\x40\x99\xd5\xc2\xbb\x91\x91\x39\x57\x40\x94\xc0\x15\x98\x56\xb5\xab\x72\xc7\xd3\x64\x3f\xa5\xa8\xe2\x22\xfb\x39\x6c\x20\x7d\x53\x6a\xcc\x6d\x05\xe0\x82\x34\xb4\x38\x9f\xef\xf6\x4d\x6c\x53\xd6\xd7\x09\x5c\x2e\xb3\xb8\x38\x0f\x7d\x3a\xf2\x1a\x07\xa6\x7b\x9e\xa9\xcb\x11\xe8\x44\x5b\x8b\xfb\x96\xe2\xb5\xfd\x59\x71\xea\xd5\x62\xb7\xd9\x6d\xfe\xd0\x14\x7d\xa1\xd4\xe5\x59\xcb\x32\xe5\x2b\x1f\xe6\x71\xc8\x9a\x82\xb9\x7a\x6e\x1c\xc0\x28\x7e\xa0\xc5\xfe\x8b\x39\x05\x16\xc9\x45\xa7\x4e\xfc\x13\xbd\x7c\xbf\xf1\x94\x62\x9d\x2d\xb6\x0f\x45\x55\x17\x98\x06\x5d\x85\x99\xff\x37\xb5\xdf\x00\x00\x00\xff\xff\xc9\xfd\x2a\x58\x8c\x01\x00\x00") + +func testFixturesDocYamlUserGuideLivenessHttpLivenessYamlInBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideLivenessHttpLivenessYamlIn, + "test/fixtures/doc-yaml/user-guide/liveness/http-liveness.yaml.in", + ) +} + +func testFixturesDocYamlUserGuideLivenessHttpLivenessYamlIn() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideLivenessHttpLivenessYamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/liveness/http-liveness.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideMultiPodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x52\x4d\x6b\xc2\x40\x10\xbd\xef\xaf\x18\x72\x5f\x35\x16\x5b\xba\xb7\x42\x3d\x14\xaa\x48\x95\xde\xd7\x64\xd0\xc5\xfd\x08\xbb\x93\x80\x94\xfe\xf7\x92\x4f\x37\xd6\x43\x4b\x69\x4e\x9b\x37\xf3\xe6\xe3\xcd\xe3\x9c\x33\x59\xa8\x77\xf4\x41\x39\x2b\xa0\x4a\xd9\x49\xd9\x5c\xc0\xc6\xe5\xcc\x20\xc9\x5c\x92\x14\x0c\x40\xcb\x3d\xea\x50\xbf\x00\xac\x34\x28\xc0\x63\xae\x42\xf3\xdf\xbc\x78\x40\x4b\xca\xa2\x16\x90\x90\x2f\x31\x69\x43\x4e\xa3\x00\x23\x03\xa1\x67\x23\x26\xef\xc0\x50\x60\x56\x97\xcd\x9c\x25\xa9\x2c\xfa\xae\x09\xef\x92\x07\x6e\xfd\x29\x23\x0f\x28\xe0\x90\xf9\x89\x72\xd3\x53\xb9\x47\x6f\x91\x30\x70\x9c\x23\x27\x0c\xc4\x9b\x8c\x30\x6d\x5a\x88\x74\x32\xeb\x88\x68\x2b\xd1\x3d\x2f\xa5\x57\x4f\xdb\xdd\xf2\x6d\x80\x01\x2a\xa9\x4b\x1c\xcd\x0f\x50\x38\x4f\x21\xe6\x0e\x83\x6e\x9c\x27\x01\xf7\x77\x0f\x8f\x5d\xd4\x63\x70\xa5\xcf\x30\x4a\xd7\xca\xa8\x98\x0e\x90\x15\xa5\x80\x64\x36\x59\xf4\x0d\x2a\xa7\x4b\x83\x2b\x57\xda\x71\x1f\x53\x23\x1b\x49\x47\x01\xd3\x58\x31\x5e\x9f\x24\x2a\xd8\xee\x32\x80\xfd\x72\xfd\x39\xfe\x45\xb9\xed\x72\xbd\x7b\x59\x2f\x5f\xff\xa8\xdd\xbc\x13\xaf\x95\xe0\xea\xf0\xd1\x9a\x68\x0a\x3a\x3f\x2b\x2f\xe0\xe3\x93\xfd\xd8\xb2\x6d\x99\x4a\x6a\x95\xf3\xc2\xe5\x37\x4d\x7c\x89\xde\xf6\x61\x3f\x4c\x24\x58\x40\x5f\x21\x3f\xba\x40\x75\x88\xfd\x4a\xdc\x31\x77\x50\xf9\x9b\x71\xae\x6d\xd3\x9a\x26\x4d\x06\xc0\xa0\x71\xfe\x2c\x60\x91\xce\x57\x8a\x7d\x05\x00\x00\xff\xff\x49\x13\x6b\xed\xc6\x03\x00\x00") + +func testFixturesDocYamlUserGuideMultiPodYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideMultiPodYaml, + "test/fixtures/doc-yaml/user-guide/multi-pod.yaml", + ) +} + +func testFixturesDocYamlUserGuideMultiPodYaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideMultiPodYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/multi-pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim01Yaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xca\xb1\x0a\x02\x31\x10\x84\xe1\x3e\x4f\x31\x2f\x70\xc5\x61\x97\xd6\xc2\x4a\x14\x8b\xb3\x5e\x92\x41\x82\x97\xe4\xdc\xdd\x13\x7c\x7b\x09\x68\xf9\xcf\x7c\xcf\xd2\x72\xc4\x95\x6a\xc5\x9c\xcd\x97\xbe\xee\x95\xc7\x55\x4a\x0d\xb2\x95\x65\x1c\xbd\x45\xbc\xe7\x50\xe9\x92\xc5\x25\x06\xa0\x49\x65\x44\xfd\xa4\x01\xa7\x39\xd8\xc6\x34\x76\x49\x89\x66\xe7\x9e\x69\x23\x81\x09\x37\x4a\xbe\x6b\x71\x5e\x5a\x62\x00\x94\xd6\x77\x4d\x7f\xa0\x7c\xed\x34\xff\x15\x60\xde\x55\x1e\x8c\x38\x9c\x4a\xf8\x06\x00\x00\xff\xff\x87\xb5\xc5\xba\x9e\x00\x00\x00") + +func testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim01YamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim01Yaml, + "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-01.yaml", + ) +} + +func testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim01Yaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim01YamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-01.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim02Yaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xca\xb1\x0a\x02\x31\x10\x84\xe1\x3e\x4f\x31\x2f\x70\x85\x56\x92\xd6\xc2\x4a\x14\x8b\xb3\x5e\x92\x41\x82\x97\xe4\xdc\xdd\x13\x7c\x7b\x09\x68\xf9\xcf\x7c\xcf\xd2\x72\xc4\x95\x6a\xc5\x9c\xcd\xe7\xbe\x6c\x95\xc7\x45\x4a\x0d\xb2\x96\x79\x1c\xbd\x45\xbc\x77\xa1\xd2\x25\x8b\x4b\x0c\x40\x93\xca\x88\xfa\x49\x03\x4e\xfb\x60\x2b\xd3\xd8\x25\x25\x9a\x9d\x7b\xa6\x8d\x04\x26\xdc\x28\xf9\xae\xc5\x79\x69\x89\x01\x50\x5a\xdf\x34\xfd\x81\xf2\xb5\xd1\xfc\x57\x80\x79\x57\x79\x30\xe2\x70\x2a\xe1\x1b\x00\x00\xff\xff\x1e\x84\x80\xc1\x9e\x00\x00\x00") + +func testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim02YamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim02Yaml, + "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-02.yaml", + ) +} + +func testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim02Yaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim02YamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-02.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim03Json = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8f\x31\x4b\xc6\x30\x10\x86\xf7\xfc\x8a\xe3\xe6\x0a\x16\xb7\xae\x0e\x4e\xa5\xe2\x50\x07\x71\x38\x92\x43\x82\x4d\x52\x73\xa9\x50\x4a\xfe\xbb\x24\xd5\x4a\xf8\xb6\xe3\x7d\x9e\x7b\x8f\x3b\x14\x00\x00\x7e\x5a\x6f\x70\x00\x7c\xe6\x28\x56\x12\xfb\x34\x87\x65\x73\xfc\xb8\x90\x75\xd8\x9d\x12\xad\x76\x2e\x3c\xf8\xa2\x7e\xf7\x7f\xb9\xe3\x44\x86\x12\xe1\x00\x67\x5d\x4d\x3d\x39\x2e\x9e\xdb\x75\x29\xb9\x7b\xc0\xca\x72\x07\x28\x2b\xeb\x56\x26\xad\x59\x64\x0c\x86\x05\x07\x78\xbb\x40\x85\x2f\x4c\xe6\x35\xda\xc4\x93\xd7\xfc\x7b\xb4\x81\x93\x5f\xf6\x91\xfc\x8e\x17\x7a\xff\xb7\x30\xb2\x84\x2d\xea\xda\x7c\xb4\xcb\x91\xbf\x36\x96\x74\x4b\x2a\x95\x14\x22\x7d\xd4\x27\xfa\xfb\x27\x6c\x84\xac\xda\x29\xab\xac\x7e\x02\x00\x00\xff\xff\xfa\x56\x3a\xe5\x4c\x01\x00\x00") + +func testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim03JsonBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim03Json, + "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-03.json", + ) +} + +func testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim03Json() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim03JsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-03.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuidePersistentVolumesVolumesGceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\xce\xb1\x6a\xc4\x30\x0c\xc6\xf1\xdd\x4f\x21\xb2\x17\x9c\xa6\x93\xe7\x42\xa7\x34\xa5\x94\x74\xd6\xc9\xba\x60\x92\xd8\x26\xd2\x85\xf3\xdb\x1f\x4e\x86\xbb\x4d\xfc\xd0\x07\xff\x39\x44\xef\xe0\x87\x37\x09\xa2\x1c\x75\x4c\xcb\x6d\x65\x83\x39\x8c\xd5\x52\x74\xb0\xb7\x66\x65\x45\x8f\x8a\xce\x00\x44\x5c\xd9\x41\xde\xad\xb5\x9d\x91\xcc\x54\x91\x30\x23\x05\x2d\xf5\x06\x10\x4d\x1b\x4e\xec\xa0\xb5\x5f\xc1\x00\x20\x11\x8b\xf4\xc9\xb3\x9c\x0f\x6f\xf0\xcb\xe8\xff\xb7\xa0\x3c\x44\xe2\x17\x1b\xe2\x52\x7a\x8c\xc5\x00\x4c\xc4\xcf\xae\xcf\x20\xf3\xb9\xcd\xfe\xfb\x28\x68\xf0\x42\xed\x7b\xd7\x1c\x78\x95\xbf\x92\x2b\xf2\x5d\x3f\x1a\xf3\x08\x00\x00\xff\xff\x23\x32\x13\xb0\xd6\x00\x00\x00") + +func testFixturesDocYamlUserGuidePersistentVolumesVolumesGceYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuidePersistentVolumesVolumesGceYaml, + "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/gce.yaml", + ) +} + +func testFixturesDocYamlUserGuidePersistentVolumesVolumesGceYaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuidePersistentVolumesVolumesGceYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/gce.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal01Yaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8e\x3d\x6a\xc0\x30\x0c\x46\x77\x9d\xe2\x23\x7b\x89\xbd\xfa\x02\x9d\x4a\x43\x87\x74\x56\x6d\xd1\x98\xfa\x8f\x48\x0d\xe4\xf6\xc5\xa4\xdb\xe3\x3d\x21\xbe\x9f\xdc\x52\xc0\x26\xa7\x66\x35\x69\xb6\xf7\xf2\x5b\x85\x78\xe4\x7d\xba\xde\x02\x2e\x4f\x55\x8c\x13\x1b\x07\x02\x1a\x57\x09\x18\x97\x73\xce\x13\x50\xf8\x4b\x8a\xce\x00\xd8\x3d\x24\xa0\xf4\xc8\x85\x74\x48\x9c\x36\xf2\xe0\x98\xed\x7e\x2e\xd4\xfa\xc9\xdf\x12\xe0\xdd\x6b\x26\x80\x63\x14\xd5\xb7\x9e\xe4\xff\xc5\x0b\x3e\x84\xd3\xe7\x99\x4d\xde\x5b\x14\x02\x8e\xae\xb6\xb1\x1d\x4f\x1f\x93\xb0\xac\xda\xab\x4c\x5e\xe7\x2c\xe7\x17\xfa\x0b\x00\x00\xff\xff\xd4\x69\x2f\xa0\xc9\x00\x00\x00") + +func testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal01YamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal01Yaml, + "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-01.yaml", + ) +} + +func testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal01Yaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal01YamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-01.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal02Yaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8f\x31\x6a\x03\x41\x0c\x45\x7b\x9d\xe2\xe3\x3e\x78\xe3\x2a\xcc\x05\x52\x85\x2c\x5b\x38\xb5\xa2\xfd\xc4\x43\x66\x67\x86\x95\x62\xd8\xdb\x87\xc1\xa9\xd2\x3d\xde\x13\x42\xfa\xce\x75\x4d\x98\xb9\x7b\xf6\x60\x8d\x6b\x2b\x3f\x1b\x45\x7b\xbe\x0e\xd7\x6a\xc2\xfd\x59\x36\x86\xae\x1a\x9a\x04\xa8\xba\x31\xa1\xdf\xa7\x69\xba\x08\x50\xf4\x93\xc5\x47\x00\xe2\xe8\x4c\x28\xcd\xb4\x88\x77\xda\xb0\xa6\x5d\x2d\xc7\xf1\x98\xf0\x68\xbb\x7e\x31\xe1\xe5\x35\x0b\xa0\x66\x74\x7f\x6b\x2b\xff\x36\x3c\x61\xa1\xae\x1f\x7b\x0e\xbe\x57\xa3\x00\xb7\xe6\x31\x6b\xdc\x1e\xbd\x0f\xc2\xe9\xec\x6d\xe3\xe0\xf3\xb8\x6a\xba\x9c\x04\xe8\xff\x7e\x58\x68\x45\xf3\x36\xb7\x92\xed\x48\x58\x68\x87\x15\xca\x6f\x00\x00\x00\xff\xff\x1e\x18\x48\xf3\xf1\x00\x00\x00") + +func testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal02YamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal02Yaml, + "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-02.yaml", + ) +} + +func testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal02Yaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal02YamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-02.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuidePersistentVolumesVolumesNfsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8c\x4d\xaa\x02\x31\x10\x06\xf7\x39\x45\x5f\xe0\xcd\xcb\x8c\xc8\x40\x2e\xe0\x4a\x14\x17\xe3\xba\x49\x3e\x35\x68\x7e\x48\xb7\x03\xde\x5e\xc2\xb8\x2b\xaa\xa0\xb8\xc6\x05\x4d\x62\xc9\x8e\xd6\xd1\x3c\x63\x0e\x8e\xce\xdd\x88\x22\xeb\x52\x5e\xef\x04\x93\xa0\x1c\x58\xd9\x19\xa2\xcc\x09\x8e\xea\x6a\xad\xdd\x19\xa9\xf0\x5d\x7a\xae\xec\xa3\x7e\x3a\x13\x89\x96\xc6\x77\x38\xda\x1f\xa2\x21\x62\xef\x21\x72\x2c\x01\xb2\xf5\x3f\xba\x80\xc3\xb5\x45\xc5\x29\x7b\xf4\xe9\xed\x97\x2a\xeb\xc3\xd1\xbf\x94\x84\x8e\xdb\x0e\x6d\x45\x73\x34\xce\xd3\x30\xce\x83\x1d\x26\xf3\x0d\x00\x00\xff\xff\xe0\xa5\xa0\x46\xb7\x00\x00\x00") + +func testFixturesDocYamlUserGuidePersistentVolumesVolumesNfsYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuidePersistentVolumesVolumesNfsYaml, + "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/nfs.yaml", + ) +} + +func testFixturesDocYamlUserGuidePersistentVolumesVolumesNfsYaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuidePersistentVolumesVolumesNfsYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/nfs.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuidePodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\xcc\x41\x0a\xc2\x40\x0c\x85\xe1\xfd\x9c\xe2\x5d\xa0\xa0\x3b\xc9\x29\xba\x72\x1f\x3b\xa1\x04\x3b\x49\x98\x09\xe2\xf1\xa5\xa2\x88\xdd\x7e\xc9\xff\x38\xf4\x2a\x7d\xa8\x1b\xe1\x71\x2e\x77\xb5\x4a\x98\xbd\x96\x26\xc9\x95\x93\xa9\x00\xc6\x4d\x08\xb6\xaa\x3d\x0b\xb0\xf1\x4d\xb6\xb1\x3b\xc0\x11\xdf\xc3\x08\x59\x76\x5c\xdc\x92\xd5\xa4\xbf\x5f\xa6\x43\x0c\x68\xe3\xf5\x0f\xc2\x7b\x7e\xe6\xa6\x5f\x3d\x7b\x4f\xc2\xe5\x54\x5e\x01\x00\x00\xff\xff\x76\xb9\xf1\x84\xa2\x00\x00\x00") + +func testFixturesDocYamlUserGuidePodYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuidePodYaml, + "test/fixtures/doc-yaml/user-guide/pod.yaml", + ) +} + +func testFixturesDocYamlUserGuidePodYaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuidePodYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideReplicasetRedisSlaveYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x53\x4f\x6f\xdb\x3e\x0c\xbd\xe7\x53\x10\xe9\xa1\x97\x24\x4e\xff\x24\xf9\xc5\xf7\xdf\xfe\x00\x2b\x3a\xb4\xc5\x76\x18\x86\x82\x92\xe8\x84\x88\x24\x7a\x92\xec\x2d\xdf\x7e\x90\xe3\x24\xce\x5a\xdf\x44\xf2\x3d\x3e\xf3\x91\x58\xf3\x37\x0a\x91\xc5\x97\x80\x75\x1d\x8b\xf6\x66\xb4\x63\x6f\x4a\x78\xa2\xda\xb2\xc6\x67\x4a\x23\x47\x09\x0d\x26\x2c\x47\x00\x1e\x1d\x95\x10\xc8\x70\x9c\x46\x8b\x2d\x8d\x00\x2c\x2a\xb2\x31\x67\x21\x93\xf4\xe9\xee\x19\xc4\x52\x09\xc7\x42\x80\xc4\x14\x4a\x50\xa8\x77\xe4\xcd\x28\xd6\xa4\x33\xec\x0a\xd2\x96\x23\x84\x43\xcb\x08\x2d\xda\x86\x80\x23\x18\xaa\xb0\xb1\xa9\x2b\x71\x62\xb8\xda\x03\x27\x40\xad\x25\x18\xf6\x1b\x48\x02\x7b\x69\x02\x68\x8c\x99\xff\x48\x50\xc2\xed\x08\x20\x92\x25\x9d\x24\x1c\x84\x39\x4c\x7a\xfb\x65\xa0\xf4\x8d\xd6\xb7\x6a\xff\xd5\x0b\x90\xc8\xd5\x16\x13\xf5\x9c\x83\xc1\xe4\xcf\x5e\xd0\xbf\xd3\xe0\xbd\x16\x6f\x9b\x00\x1c\x07\x93\x3f\x2d\x3e\x21\x7b\x0a\x27\xe2\x69\xef\xc2\x25\x0b\x3b\xdc\x50\x09\x46\xf4\x8e\xc2\x8c\xa5\xb0\xac\x02\x86\x7d\xd1\x09\x28\x17\xb3\xf9\x6c\x31\x45\x5b\xb3\x3f\x63\xae\xe0\x3b\x01\x06\x02\xf1\x76\x0f\xec\x6a\x4b\x8e\x7c\xea\x46\xbb\x25\x30\x3e\x82\xd4\x89\xc5\x83\x54\xe5\x00\xb5\x4d\xa9\x8e\x65\x51\x6c\x38\x6d\x1b\x35\xd3\xe2\x8a\x5d\xa3\x28\x78\x4a\x14\x0b\xfa\x83\x99\x29\x16\xca\x8a\x2a\xd6\x2b\xbd\x22\x33\x27\xb5\x5c\x2c\x16\x78\xaf\x96\xcb\x95\xb9\xfd\x6f\xb5\xaa\xd6\xcb\x85\xb9\x5b\xdf\xd2\x7c\x8e\x4a\xdf\x2f\x8a\x4d\x43\x31\x29\x91\x5d\x31\x58\xaf\x22\x34\x7e\x16\xb7\xa7\xde\x5a\x9c\xc3\xbc\x9f\x3f\x60\xdc\x97\x51\x68\x29\x8c\x27\x30\x9e\x1e\x20\x52\xe5\xc7\x21\xe9\x30\xa6\x43\x72\x79\xb7\x5a\x8f\xe1\xe7\xd9\x08\x8a\xd2\x04\x4d\x03\xbb\x72\xf0\x57\x16\x71\x11\x03\xd0\x75\x53\xc2\xcd\x7c\xee\x2e\xa2\x8e\x9c\x84\x7d\x97\x78\xe0\x53\x86\x7c\x7b\x06\x1f\x8d\xfa\xf8\xff\xcb\xeb\xa7\xc7\xe7\x97\xe7\xd7\x0f\x4f\x8f\x0f\x03\x96\x6e\xd1\xcb\x3c\xe7\x41\xf0\x0a\x3e\x57\xfd\x5a\xdb\x26\xcb\xcf\x2b\x50\xf1\x06\x8c\x50\x04\x2f\x09\xd8\x6b\xdb\x18\x02\xec\x1c\xca\x03\x60\x4d\x93\x6c\x99\x87\x24\x17\x54\xec\x63\x22\x34\xf9\x66\x28\x46\x40\x9f\x15\x72\x10\x9f\x7d\x86\x16\x03\xa3\xb2\x94\x0f\xa9\x62\x6f\x3a\xd7\x0f\x33\xbb\x60\xe9\x5b\x5c\x47\xd8\x4a\x4c\x93\xce\x85\x8c\x97\x26\x75\x90\xeb\xf3\x8f\x5c\x83\x65\x4f\x80\x4a\x5a\x9a\x00\xf6\x0b\x7d\x24\x6a\xfc\x11\x9a\x61\x5d\xa5\x22\x2b\xbf\x67\x17\x55\x3d\x1b\xf9\xf6\x14\xae\x25\x0c\x6d\x99\x9e\xcf\xe2\xab\x84\x54\x42\xb6\x77\xf4\x37\x00\x00\xff\xff\x7c\x90\xda\x81\xce\x04\x00\x00") + +func testFixturesDocYamlUserGuideReplicasetRedisSlaveYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideReplicasetRedisSlaveYaml, + "test/fixtures/doc-yaml/user-guide/replicaset/redis-slave.yaml", + ) +} + +func testFixturesDocYamlUserGuideReplicasetRedisSlaveYaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideReplicasetRedisSlaveYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/replicaset/redis-slave.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideReplicationYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8d\x31\x6a\x04\x31\x0c\x45\x7b\x9f\xe2\x5f\x60\x20\x21\x4d\x70\x9b\x0b\x84\x14\xe9\x15\x8f\x18\x44\x6c\xc9\xc8\x22\xe4\xf8\x8b\x19\x66\x77\xd8\x5d\x95\xff\x7d\xbd\x4f\x5d\xbe\xd9\x87\x98\x66\xfc\xbd\xa6\x5f\xd1\x35\xe3\x8b\x7b\x95\x42\x21\xa6\x1f\xa6\xe1\x56\x2b\x7b\x6a\x1c\xb4\x52\x50\x4e\x80\x52\xe3\x0c\xdd\x44\xff\xd3\xe8\x5c\x66\xe6\xfb\xd7\xc8\x78\x4b\xc0\xe0\xca\x25\xcc\x27\x01\xa8\xf7\xa3\x0e\x04\xb7\x5e\x29\x78\x47\x67\xed\xbc\xb3\x7a\x4f\x2a\xfd\x70\x1d\x07\xbf\x93\x01\xc7\xfe\xbc\x62\x1a\x24\xca\x7e\xad\x2f\x4f\x84\x80\x34\xda\x1e\xc2\x6e\x1e\xa7\x99\xe5\x66\xfb\x34\x8f\x8c\xf7\x97\x74\x09\x00\x00\xff\xff\x61\x99\x01\xcd\x2f\x01\x00\x00") + +func testFixturesDocYamlUserGuideReplicationYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideReplicationYaml, + "test/fixtures/doc-yaml/user-guide/replication.yaml", + ) +} + +func testFixturesDocYamlUserGuideReplicationYaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideReplicationYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/replication.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideSecretsSecretEnvPodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x90\x41\x4b\x03\x31\x10\x85\xef\xf9\x15\x8f\x3d\x1b\x4a\xaf\xb9\x15\xad\x17\x51\x4a\x2d\x82\x88\x94\xd9\xec\x53\x43\x9b\x64\x49\xd2\xe0\xfe\x7b\x59\x0d\xb5\x7a\x19\x66\xde\xf7\xe0\xcd\x8c\x8c\xee\x89\x29\xbb\x18\x0c\xea\x52\x1d\x5c\x18\x0c\x36\x71\x50\x9e\x45\x06\x29\x62\x14\x10\xc4\xd3\x20\xd3\x26\x16\xcd\x50\xf5\x18\x07\x95\x47\xda\x19\xda\x18\x8a\xb8\xc0\x94\xe7\x09\xd0\xcd\x5e\x98\x8b\x3e\xc3\x6f\x04\x38\x2f\xef\x34\xe8\x4f\x79\xea\xe3\x67\x13\x6d\xf4\x5e\xe6\xdc\x17\x74\x8b\xde\x85\x45\xfe\xe8\xae\xd0\x69\x3b\x57\x86\xda\xe1\xb5\x39\x19\xaa\x69\xed\x6f\xd0\xfd\xf3\xfe\x71\x7d\xbd\x5d\xef\xf6\x37\xab\xdd\xea\x8c\x81\x2a\xc7\x13\x6f\x53\xf4\xe6\x42\x44\xbb\xe3\x8e\xd3\x96\x6f\x7f\x09\x2e\x57\xff\xb1\xfd\xe3\x07\x4e\x06\xf3\x5b\xf4\x52\x01\x89\xb9\x48\x2a\x9b\x78\x74\x76\x32\x78\x60\x65\x52\x5f\x01\x00\x00\xff\xff\xab\xfe\x4b\x14\x52\x01\x00\x00") + +func testFixturesDocYamlUserGuideSecretsSecretEnvPodYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideSecretsSecretEnvPodYaml, + "test/fixtures/doc-yaml/user-guide/secrets/secret-env-pod.yaml", + ) +} + +func testFixturesDocYamlUserGuideSecretsSecretEnvPodYaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideSecretsSecretEnvPodYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/secrets/secret-env-pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideSecretsSecretPodYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\xb1\x4e\xc4\x30\x10\x44\x7b\x7f\xc5\x28\xb4\x98\xe8\x5a\x4b\x14\x94\x14\x9c\x52\xd1\x20\x84\x8c\xb3\x24\x16\xb1\x1d\xd9\x9b\x20\x74\xba\x7f\x47\x8e\x0d\x77\xc0\xb9\xdb\x99\xf1\xe8\xed\xea\xd9\x3e\x52\x4c\x36\x78\x85\x75\x27\xde\xad\xef\x15\xba\xd0\x0b\x47\xac\x7b\xcd\x5a\x09\xc0\x6b\x47\x0a\x89\x4c\x24\x96\x4c\x89\xe5\x1c\x7a\x91\x66\x32\xd9\x35\xc1\xb3\xb6\x9e\x62\xca\x13\x20\x6b\x7e\x0b\xfe\x98\x9b\x05\x58\xa7\x07\x52\x38\x1c\x6e\xee\x06\x3f\x86\xc4\xf7\x59\x38\x1e\xab\xad\xe3\x90\x14\x9e\xd0\xb8\xb0\x78\xce\x0d\xcd\x35\x1a\x29\xdf\xec\x44\x2f\xb9\x8b\x3c\xdf\xb6\xc4\xa6\xad\x34\x6b\x98\x16\x47\x6d\x26\x95\xbb\x06\xcf\xb5\xa7\xc8\x0f\xb9\xa4\x52\x95\x77\xb5\xb1\xc1\x2d\x89\xe1\x34\x9b\x11\x3c\x52\x4d\x17\xeb\x95\xa6\xf0\x71\xf6\x43\xfe\xde\xbe\x44\xcf\x7c\x60\x43\xed\x34\x8f\x0a\xff\xc9\xc4\x37\xcb\x9f\xe3\x5c\xaa\x2b\xda\x09\xb7\xcc\xfb\xd3\x31\x8b\x20\x80\x48\x89\x75\xe4\x2e\x4c\xd6\x7c\x2a\xec\x69\xa5\x28\xbe\x02\x00\x00\xff\xff\x36\x60\xeb\x69\xcb\x01\x00\x00") + +func testFixturesDocYamlUserGuideSecretsSecretPodYamlInBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideSecretsSecretPodYamlIn, + "test/fixtures/doc-yaml/user-guide/secrets/secret-pod.yaml.in", + ) +} + +func testFixturesDocYamlUserGuideSecretsSecretPodYamlIn() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideSecretsSecretPodYamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/secrets/secret-pod.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideSecretsSecretYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\xc8\x0c\x4b\x2d\x2a\xce\xcc\xcf\xb3\x52\x28\x33\xe4\xca\xce\xcc\x4b\xb1\x52\x08\x4e\x4d\x2e\x4a\x2d\xe1\xca\x4d\x2d\x49\x4c\x49\x2c\x49\xb4\xe2\x52\x50\xc8\x4b\xcc\x4d\xb5\x52\x28\x49\x2d\x2e\xd1\x2d\x86\xc8\xc2\x64\x40\xb4\xae\xa1\x95\x42\x4a\xae\x5b\x71\x4a\x78\x68\x89\x6f\xa0\x81\x37\x4c\xd8\x08\x49\x38\xdd\xc0\xdb\x25\x30\xdf\x96\x0b\x10\x00\x00\xff\xff\x5d\x68\x23\xda\x72\x00\x00\x00") + +func testFixturesDocYamlUserGuideSecretsSecretYamlBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideSecretsSecretYaml, + "test/fixtures/doc-yaml/user-guide/secrets/secret.yaml", + ) +} + +func testFixturesDocYamlUserGuideSecretsSecretYaml() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideSecretsSecretYamlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/secrets/secret.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideUpdateDemoImagesKittenHtmlDataJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xe6\x52\x50\x50\xca\xcc\x4d\x4c\x4f\x55\xb2\x52\x50\xca\xce\x2c\x29\x49\xcd\xd3\xcb\x2a\x48\x57\xe2\xaa\xe5\x02\x04\x00\x00\xff\xff\x27\x07\xd0\xf9\x1c\x00\x00\x00") + +func testFixturesDocYamlUserGuideUpdateDemoImagesKittenHtmlDataJsonBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideUpdateDemoImagesKittenHtmlDataJson, + "test/fixtures/doc-yaml/user-guide/update-demo/images/kitten/html/data.json", + ) +} + +func testFixturesDocYamlUserGuideUpdateDemoImagesKittenHtmlDataJson() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideUpdateDemoImagesKittenHtmlDataJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/update-demo/images/kitten/html/data.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideUpdateDemoImagesNautilusHtmlDataJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xe6\x52\x50\x50\xca\xcc\x4d\x4c\x4f\x55\xb2\x52\x50\xca\x4b\x2c\x2d\xc9\xcc\x29\x2d\xd6\xcb\x2a\x48\x57\xe2\xaa\xe5\x02\x04\x00\x00\xff\xff\xbe\x2a\xe3\xd9\x1e\x00\x00\x00") + +func testFixturesDocYamlUserGuideUpdateDemoImagesNautilusHtmlDataJsonBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideUpdateDemoImagesNautilusHtmlDataJson, + "test/fixtures/doc-yaml/user-guide/update-demo/images/nautilus/html/data.json", + ) +} + +func testFixturesDocYamlUserGuideUpdateDemoImagesNautilusHtmlDataJson() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideUpdateDemoImagesNautilusHtmlDataJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/update-demo/images/nautilus/html/data.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideUpdateDemoKittenRcYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x8e\x31\x4f\x03\x31\x0c\x85\xf7\xfc\x0a\xff\x81\x43\xb0\xa1\xac\x9d\x10\x4b\x85\x10\xbb\xc9\x3d\xa1\xa8\x8e\x1d\xf9\x4c\x97\xaa\xff\x1d\xa5\x70\xa5\xc3\x21\xe1\x29\x8e\xdf\xfb\xde\xe3\x5e\xdf\xe0\x4b\x35\xcd\x74\x7c\x48\x87\xaa\x73\xa6\x17\x74\xa9\x85\xa3\x9a\xee\x4c\xc3\x4d\x04\x9e\x1a\x82\x67\x0e\xce\x89\x48\xb9\x21\xd3\x67\x9f\x39\x30\xcd\x68\x36\x1d\x6a\x04\x34\x2d\x1d\x65\x08\x16\x08\x4a\x98\x8f\xf7\x86\xfc\xf2\x7b\x5c\x83\x7f\xbc\x44\x81\xd6\x85\x03\xdf\xae\xdb\xc0\x31\xc2\xef\x90\x65\xdd\xfe\xa2\x6e\x93\x89\xd6\x66\x63\x8a\x69\x70\x55\xf8\x95\x36\x51\x6d\xfc\x81\x4c\xa7\xd3\xdd\xf3\xc5\xf4\x34\xf6\xf3\xf9\x1f\x69\xdd\x3c\x6e\x6a\x4d\xbf\xf8\xbd\x79\x64\x7a\xbc\xbf\xde\x88\xba\x5b\x58\x31\xc9\xf4\xba\xdb\xa7\xaf\x00\x00\x00\xff\xff\x67\x96\xe2\x98\x7f\x01\x00\x00") + +func testFixturesDocYamlUserGuideUpdateDemoKittenRcYamlInBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideUpdateDemoKittenRcYamlIn, + "test/fixtures/doc-yaml/user-guide/update-demo/kitten-rc.yaml.in", + ) +} + +func testFixturesDocYamlUserGuideUpdateDemoKittenRcYamlIn() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideUpdateDemoKittenRcYamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/update-demo/kitten-rc.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideUpdateDemoNautilusRcYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x8e\xb1\x4e\x03\x31\x0c\x86\xf7\x3c\xc5\xff\x02\x87\x80\x09\x65\xed\xc4\x82\x2a\x84\xd8\x4d\xce\x42\x11\x4e\x1c\x39\xbe\x2e\x55\xdf\x1d\x85\x72\x47\x07\x2a\xd5\x5b\xec\xfc\xdf\xff\x51\xcb\xef\x6c\x3d\x6b\x8d\x38\x3c\x84\xaf\x5c\xe7\x88\x57\x6e\x92\x13\x79\xd6\xba\xd3\xea\xa6\x22\x6c\xa1\xb0\xd3\x4c\x4e\x31\x00\x95\x0a\x47\x2c\x6d\x26\xe7\x69\xe6\xa2\x53\xa5\xc5\xb3\x2c\x3d\xf4\xc6\x69\x7c\xb1\x33\xa4\x47\x3c\x06\xa0\xb3\x70\x72\xb5\x71\xf9\x27\xfe\xb3\x3d\xac\x22\x1b\x0b\x70\x2e\x4d\xc8\xf9\x9c\xbb\x54\x18\x23\xf4\xc1\xd2\xd7\xd7\x35\xee\x35\x36\xb0\xba\x8e\x49\x5a\x9d\x72\x65\xdb\x78\x13\x72\xa1\x4f\x8e\x38\x1e\xef\x5e\x7e\x63\xcf\x63\x73\x3a\xdd\xd0\xd8\xd4\xfc\x42\x6d\xfa\x2b\xd8\xab\x79\xc4\xd3\xfd\x76\x03\x9a\xa9\x6b\x52\x89\x78\xdb\xed\xc3\x77\x00\x00\x00\xff\xff\x95\x67\x7a\xc0\x95\x01\x00\x00") + +func testFixturesDocYamlUserGuideUpdateDemoNautilusRcYamlInBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideUpdateDemoNautilusRcYamlIn, + "test/fixtures/doc-yaml/user-guide/update-demo/nautilus-rc.yaml.in", + ) +} + +func testFixturesDocYamlUserGuideUpdateDemoNautilusRcYamlIn() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideUpdateDemoNautilusRcYamlInBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/update-demo/nautilus-rc.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesDocYamlUserGuideWalkthroughPodtemplateJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8d\x3d\x8a\xc3\x30\x10\x85\x7b\x9f\x62\x98\xda\x0b\xbb\xdd\xe2\x43\x2c\x2e\x96\x34\x21\xc5\xc4\x1e\x8c\x88\x35\x12\xf2\x10\x02\x41\x77\x0f\xfe\x91\x2d\x07\xa7\x11\xe2\xbd\x6f\xbe\x07\xf0\x2c\x00\x00\x90\xbc\x39\x71\x18\x8c\x13\xac\x00\xef\x3f\x58\xce\xf9\xcd\x48\x3b\x26\xb5\x6b\xff\xd9\xfa\x9e\x94\x53\x65\x59\xa9\x25\x25\xac\x16\x09\x00\x0a\x59\x1e\x71\xe9\x8c\x3c\x70\x4a\xe3\x82\x6b\x3a\xcf\xf0\x03\x05\x00\xf6\x74\xe5\x7e\xd8\x65\xc7\xea\x4c\x3f\x21\x1d\x0b\x07\x52\xfe\xcb\xd1\xaf\xc4\xae\x24\x0e\x9e\x9b\xbd\x1e\x1b\x27\x4a\x46\x38\x8c\xbb\xe7\x7c\xf8\x7d\xb9\xdc\x75\xc6\x52\xf7\xb1\xf4\x2e\xe8\xec\xdb\xfc\xb5\x0b\x8a\x15\xfc\x7e\xc7\xcb\xc6\xae\xff\x58\xa4\x37\x16\xaf\x00\x00\x00\xff\xff\x18\xd3\xb9\x9c\x9c\x01\x00\x00") + +func testFixturesDocYamlUserGuideWalkthroughPodtemplateJsonBytes() ([]byte, error) { + return bindataRead( + _testFixturesDocYamlUserGuideWalkthroughPodtemplateJson, + "test/fixtures/doc-yaml/user-guide/walkthrough/podtemplate.json", + ) +} + +func testFixturesDocYamlUserGuideWalkthroughPodtemplateJson() (*asset, error) { + bytes, err := testFixturesDocYamlUserGuideWalkthroughPodtemplateJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/walkthrough/podtemplate.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesPkgKubectlOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xca\xb1\x0a\x02\x31\x0c\x00\xd0\x3d\x5f\x11\x70\xee\x75\x95\xdb\x5d\x15\xbc\xc1\x39\xd4\xd0\x06\xb5\x29\x49\x68\x7f\x5f\x70\x73\x7f\x27\x3c\x98\x31\x1a\xe3\xed\x71\xbd\xdc\x0f\x7c\x6a\x71\xa4\xc0\x16\x31\x7c\xcf\xb9\xea\xf6\x3a\xfb\x26\x9a\x75\x75\x36\x07\xa0\x31\x4c\x27\x9b\xef\x90\xd0\xa5\xa6\xf2\x96\xf4\x21\xe9\x41\xf2\x13\xc6\x53\x78\xfd\x03\xf8\x06\x00\x00\xff\xff\xf3\x7b\xef\xed\x69\x00\x00\x00") + +func testFixturesPkgKubectlOwnersBytes() ([]byte, error) { + return bindataRead( + _testFixturesPkgKubectlOwners, + "test/fixtures/pkg/kubectl/OWNERS", + ) +} + +func testFixturesPkgKubectlOwners() (*asset, error) { + bytes, err := testFixturesPkgKubectlOwnersBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/pkg/kubectl/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesPkgKubectlPluginsBarKubectlBar = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x52\x56\xd4\x4f\xca\xcc\xd3\x4f\x4a\x2c\xce\xe0\xe2\x4a\x4d\xce\xc8\x57\x50\xf2\x54\x48\xcc\x55\x28\xc8\x29\x4d\xcf\xcc\x53\x48\x4a\x2c\x52\x48\x4e\xcc\xc9\x49\x4d\x51\x28\xcf\x2c\xc9\x50\x48\x2c\x4a\x2f\x56\x50\x31\x50\x50\x71\x50\xe2\x02\x04\x00\x00\xff\xff\xb1\x1b\x02\xcf\x3b\x00\x00\x00") + +func testFixturesPkgKubectlPluginsBarKubectlBarBytes() ([]byte, error) { + return bindataRead( + _testFixturesPkgKubectlPluginsBarKubectlBar, + "test/fixtures/pkg/kubectl/plugins/bar/kubectl-bar", + ) +} + +func testFixturesPkgKubectlPluginsBarKubectlBar() (*asset, error) { + bytes, err := testFixturesPkgKubectlPluginsBarKubectlBarBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/pkg/kubectl/plugins/bar/kubectl-bar", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesPkgKubectlPluginsFooKubectlFoo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x52\x56\xd4\x4f\xca\xcc\xd3\x4f\x4a\x2c\xce\xe0\xe2\x4a\x4d\xce\xc8\x57\x50\xf2\x54\x48\xcc\x55\x28\xc8\x29\x4d\xcf\xcc\x53\x48\xcb\xcf\x57\xe2\x02\x04\x00\x00\xff\xff\xb5\x26\x01\x36\x24\x00\x00\x00") + +func testFixturesPkgKubectlPluginsFooKubectlFooBytes() ([]byte, error) { + return bindataRead( + _testFixturesPkgKubectlPluginsFooKubectlFoo, + "test/fixtures/pkg/kubectl/plugins/foo/kubectl-foo", + ) +} + +func testFixturesPkgKubectlPluginsFooKubectlFoo() (*asset, error) { + bytes, err := testFixturesPkgKubectlPluginsFooKubectlFooBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/pkg/kubectl/plugins/foo/kubectl-foo", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesPkgKubectlPluginsKubectlFoo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x52\x56\xd4\x4f\xca\xcc\xd3\x4f\x4a\x2c\xce\xe0\xe2\x4a\x4d\xce\xc8\x57\x50\xf2\x54\x48\xcc\x55\x28\xc8\x29\x4d\xcf\xcc\x53\x48\xcb\xcf\x57\xe2\x02\x04\x00\x00\xff\xff\xb5\x26\x01\x36\x24\x00\x00\x00") + +func testFixturesPkgKubectlPluginsKubectlFooBytes() ([]byte, error) { + return bindataRead( + _testFixturesPkgKubectlPluginsKubectlFoo, + "test/fixtures/pkg/kubectl/plugins/kubectl-foo", + ) +} + +func testFixturesPkgKubectlPluginsKubectlFoo() (*asset, error) { + bytes, err := testFixturesPkgKubectlPluginsKubectlFooBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/pkg/kubectl/plugins/kubectl-foo", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testFixturesPkgKubectlPluginsVersionKubectlVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xca\xc1\x09\x02\x41\x0c\x05\xd0\x7b\xaa\xf8\x32\x67\xd9\x66\x6c\x20\xcb\x84\x4d\x40\x92\xc5\x9f\x51\xcb\x17\x41\x8f\x0f\xde\xb8\x6c\x7b\xe4\xb6\x2b\x5d\x64\xe0\xe6\x41\x9c\xf7\x75\x44\x22\x08\x45\xd6\xb5\x4e\x68\xce\x2f\x17\x6d\xa2\x0b\x6d\x6c\x19\xd0\xff\x6c\xd7\x46\x3d\xed\x41\xd7\x59\x2f\x42\x13\xf6\x0e\x76\xe4\xf1\x3b\xf2\x09\x00\x00\xff\xff\xa4\x70\x55\x31\x69\x00\x00\x00") + +func testFixturesPkgKubectlPluginsVersionKubectlVersionBytes() ([]byte, error) { + return bindataRead( + _testFixturesPkgKubectlPluginsVersionKubectlVersion, + "test/fixtures/pkg/kubectl/plugins/version/kubectl-version", + ) +} + +func testFixturesPkgKubectlPluginsVersionKubectlVersion() (*asset, error) { + bytes, err := testFixturesPkgKubectlPluginsVersionKubectlVersionBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/fixtures/pkg/kubectl/plugins/version/kubectl-version", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +// Asset loads and returns the asset for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func Asset(name string) ([]byte, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) + } + return a.bytes, nil + } + return nil, fmt.Errorf("Asset %s not found", name) +} + +// MustAsset is like Asset but panics when Asset would return an error. +// It simplifies safe initialization of global variables. +func MustAsset(name string) []byte { + a, err := Asset(name) + if err != nil { + panic("asset: Asset(" + name + "): " + err.Error()) + } + + return a +} + +// AssetInfo loads and returns the asset info for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func AssetInfo(name string) (os.FileInfo, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) + } + return a.info, nil + } + return nil, fmt.Errorf("AssetInfo %s not found", name) +} + +// AssetNames returns the names of the assets. +func AssetNames() []string { + names := make([]string, 0, len(_bindata)) + for name := range _bindata { + names = append(names, name) + } + return names +} + +// _bindata is a table, holding each asset generator, mapped to its name. +var _bindata = map[string]func() (*asset, error){ + "test/conformance/testdata/OWNERS": testConformanceTestdataOwners, + "test/conformance/testdata/conformance.yaml": testConformanceTestdataConformanceYaml, + "test/e2e/testing-manifests/flexvolume/attachable-with-long-mount": testE2eTestingManifestsFlexvolumeAttachableWithLongMount, + "test/e2e/testing-manifests/flexvolume/dummy": testE2eTestingManifestsFlexvolumeDummy, + "test/e2e/testing-manifests/flexvolume/dummy-attachable": testE2eTestingManifestsFlexvolumeDummyAttachable, + "test/e2e/testing-manifests/guestbook/agnhost-primary-deployment.yaml.in": testE2eTestingManifestsGuestbookAgnhostPrimaryDeploymentYamlIn, + "test/e2e/testing-manifests/guestbook/agnhost-primary-service.yaml": testE2eTestingManifestsGuestbookAgnhostPrimaryServiceYaml, + "test/e2e/testing-manifests/guestbook/agnhost-replica-deployment.yaml.in": testE2eTestingManifestsGuestbookAgnhostReplicaDeploymentYamlIn, + "test/e2e/testing-manifests/guestbook/agnhost-replica-service.yaml": testE2eTestingManifestsGuestbookAgnhostReplicaServiceYaml, + "test/e2e/testing-manifests/guestbook/frontend-deployment.yaml.in": testE2eTestingManifestsGuestbookFrontendDeploymentYamlIn, + "test/e2e/testing-manifests/guestbook/frontend-service.yaml": testE2eTestingManifestsGuestbookFrontendServiceYaml, + "test/e2e/testing-manifests/guestbook/legacy/frontend-controller.yaml": testE2eTestingManifestsGuestbookLegacyFrontendControllerYaml, + "test/e2e/testing-manifests/guestbook/legacy/redis-master-controller.yaml": testE2eTestingManifestsGuestbookLegacyRedisMasterControllerYaml, + "test/e2e/testing-manifests/guestbook/legacy/redis-slave-controller.yaml": testE2eTestingManifestsGuestbookLegacyRedisSlaveControllerYaml, + "test/e2e/testing-manifests/guestbook/redis-master-deployment.yaml.in": testE2eTestingManifestsGuestbookRedisMasterDeploymentYamlIn, + "test/e2e/testing-manifests/guestbook/redis-master-service.yaml": testE2eTestingManifestsGuestbookRedisMasterServiceYaml, + "test/e2e/testing-manifests/guestbook/redis-slave-deployment.yaml.in": testE2eTestingManifestsGuestbookRedisSlaveDeploymentYamlIn, + "test/e2e/testing-manifests/guestbook/redis-slave-service.yaml": testE2eTestingManifestsGuestbookRedisSlaveServiceYaml, + "test/e2e/testing-manifests/ingress/gce/static-ip-2/ing.yaml": testE2eTestingManifestsIngressGceStaticIp2IngYaml, + "test/e2e/testing-manifests/ingress/gce/static-ip-2/rc.yaml": testE2eTestingManifestsIngressGceStaticIp2RcYaml, + "test/e2e/testing-manifests/ingress/gce/static-ip-2/svc.yaml": testE2eTestingManifestsIngressGceStaticIp2SvcYaml, + "test/e2e/testing-manifests/ingress/http/ing.yaml": testE2eTestingManifestsIngressHttpIngYaml, + "test/e2e/testing-manifests/ingress/http/rc.yaml": testE2eTestingManifestsIngressHttpRcYaml, + "test/e2e/testing-manifests/ingress/http/svc.yaml": testE2eTestingManifestsIngressHttpSvcYaml, + "test/e2e/testing-manifests/ingress/http2/ing.yaml": testE2eTestingManifestsIngressHttp2IngYaml, + "test/e2e/testing-manifests/ingress/http2/rc.yaml": testE2eTestingManifestsIngressHttp2RcYaml, + "test/e2e/testing-manifests/ingress/http2/svc.yaml": testE2eTestingManifestsIngressHttp2SvcYaml, + "test/e2e/testing-manifests/ingress/multiple-certs/ing.yaml": testE2eTestingManifestsIngressMultipleCertsIngYaml, + "test/e2e/testing-manifests/ingress/multiple-certs/rc.yaml": testE2eTestingManifestsIngressMultipleCertsRcYaml, + "test/e2e/testing-manifests/ingress/multiple-certs/svc.yaml": testE2eTestingManifestsIngressMultipleCertsSvcYaml, + "test/e2e/testing-manifests/ingress/neg/ing.yaml": testE2eTestingManifestsIngressNegIngYaml, + "test/e2e/testing-manifests/ingress/neg/rc.yaml": testE2eTestingManifestsIngressNegRcYaml, + "test/e2e/testing-manifests/ingress/neg/svc.yaml": testE2eTestingManifestsIngressNegSvcYaml, + "test/e2e/testing-manifests/ingress/neg-clusterip/ing.yaml": testE2eTestingManifestsIngressNegClusteripIngYaml, + "test/e2e/testing-manifests/ingress/neg-clusterip/rc.yaml": testE2eTestingManifestsIngressNegClusteripRcYaml, + "test/e2e/testing-manifests/ingress/neg-clusterip/svc.yaml": testE2eTestingManifestsIngressNegClusteripSvcYaml, + "test/e2e/testing-manifests/ingress/neg-exposed/ing.yaml": testE2eTestingManifestsIngressNegExposedIngYaml, + "test/e2e/testing-manifests/ingress/neg-exposed/rc.yaml": testE2eTestingManifestsIngressNegExposedRcYaml, + "test/e2e/testing-manifests/ingress/neg-exposed/svc.yaml": testE2eTestingManifestsIngressNegExposedSvcYaml, + "test/e2e/testing-manifests/ingress/nginx/rc.yaml": testE2eTestingManifestsIngressNginxRcYaml, + "test/e2e/testing-manifests/ingress/pre-shared-cert/ing.yaml": testE2eTestingManifestsIngressPreSharedCertIngYaml, + "test/e2e/testing-manifests/ingress/pre-shared-cert/rc.yaml": testE2eTestingManifestsIngressPreSharedCertRcYaml, + "test/e2e/testing-manifests/ingress/pre-shared-cert/svc.yaml": testE2eTestingManifestsIngressPreSharedCertSvcYaml, + "test/e2e/testing-manifests/ingress/static-ip/ing.yaml": testE2eTestingManifestsIngressStaticIpIngYaml, + "test/e2e/testing-manifests/ingress/static-ip/rc.yaml": testE2eTestingManifestsIngressStaticIpRcYaml, + "test/e2e/testing-manifests/ingress/static-ip/secret.yaml": testE2eTestingManifestsIngressStaticIpSecretYaml, + "test/e2e/testing-manifests/ingress/static-ip/svc.yaml": testE2eTestingManifestsIngressStaticIpSvcYaml, + "test/e2e/testing-manifests/kubectl/agnhost-primary-controller.json.in": testE2eTestingManifestsKubectlAgnhostPrimaryControllerJsonIn, + "test/e2e/testing-manifests/kubectl/agnhost-primary-pod.yaml": testE2eTestingManifestsKubectlAgnhostPrimaryPodYaml, + "test/e2e/testing-manifests/kubectl/agnhost-primary-service.json": testE2eTestingManifestsKubectlAgnhostPrimaryServiceJson, + "test/e2e/testing-manifests/kubectl/busybox-cronjob.yaml": testE2eTestingManifestsKubectlBusyboxCronjobYaml, + "test/e2e/testing-manifests/kubectl/busybox-pod.yaml": testE2eTestingManifestsKubectlBusyboxPodYaml, + "test/e2e/testing-manifests/kubectl/httpd-deployment1.yaml.in": testE2eTestingManifestsKubectlHttpdDeployment1YamlIn, + "test/e2e/testing-manifests/kubectl/httpd-deployment2.yaml.in": testE2eTestingManifestsKubectlHttpdDeployment2YamlIn, + "test/e2e/testing-manifests/kubectl/httpd-deployment3.yaml.in": testE2eTestingManifestsKubectlHttpdDeployment3YamlIn, + "test/e2e/testing-manifests/kubectl/httpd-rc.yaml.in": testE2eTestingManifestsKubectlHttpdRcYamlIn, + "test/e2e/testing-manifests/kubectl/pause-pod.yaml.in": testE2eTestingManifestsKubectlPausePodYamlIn, + "test/e2e/testing-manifests/kubectl/pod-with-readiness-probe.yaml.in": testE2eTestingManifestsKubectlPodWithReadinessProbeYamlIn, + "test/e2e/testing-manifests/pod": testE2eTestingManifestsPod, + "test/e2e/testing-manifests/rbd-storage-class.yaml": testE2eTestingManifestsRbdStorageClassYaml, + "test/e2e/testing-manifests/sample-device-plugin.yaml": testE2eTestingManifestsSampleDevicePluginYaml, + "test/e2e/testing-manifests/scheduling/nvidia-driver-installer.yaml": testE2eTestingManifestsSchedulingNvidiaDriverInstallerYaml, + "test/e2e/testing-manifests/serviceloadbalancer/haproxyrc.yaml": testE2eTestingManifestsServiceloadbalancerHaproxyrcYaml, + "test/e2e/testing-manifests/serviceloadbalancer/netexecrc.yaml": testE2eTestingManifestsServiceloadbalancerNetexecrcYaml, + "test/e2e/testing-manifests/serviceloadbalancer/netexecsvc.yaml": testE2eTestingManifestsServiceloadbalancerNetexecsvcYaml, + "test/e2e/testing-manifests/serviceloadbalancer/nginxrc.yaml": testE2eTestingManifestsServiceloadbalancerNginxrcYaml, + "test/e2e/testing-manifests/serviceloadbalancer/nginxsvc.yaml": testE2eTestingManifestsServiceloadbalancerNginxsvcYaml, + "test/e2e/testing-manifests/statefulset/cassandra/controller.yaml": testE2eTestingManifestsStatefulsetCassandraControllerYaml, + "test/e2e/testing-manifests/statefulset/cassandra/pdb.yaml": testE2eTestingManifestsStatefulsetCassandraPdbYaml, + "test/e2e/testing-manifests/statefulset/cassandra/service.yaml": testE2eTestingManifestsStatefulsetCassandraServiceYaml, + "test/e2e/testing-manifests/statefulset/cassandra/statefulset.yaml": testE2eTestingManifestsStatefulsetCassandraStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/cassandra/tester.yaml": testE2eTestingManifestsStatefulsetCassandraTesterYaml, + "test/e2e/testing-manifests/statefulset/cockroachdb/service.yaml": testE2eTestingManifestsStatefulsetCockroachdbServiceYaml, + "test/e2e/testing-manifests/statefulset/cockroachdb/statefulset.yaml": testE2eTestingManifestsStatefulsetCockroachdbStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/etcd/pdb.yaml": testE2eTestingManifestsStatefulsetEtcdPdbYaml, + "test/e2e/testing-manifests/statefulset/etcd/service.yaml": testE2eTestingManifestsStatefulsetEtcdServiceYaml, + "test/e2e/testing-manifests/statefulset/etcd/statefulset.yaml": testE2eTestingManifestsStatefulsetEtcdStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/etcd/tester.yaml": testE2eTestingManifestsStatefulsetEtcdTesterYaml, + "test/e2e/testing-manifests/statefulset/mysql-galera/service.yaml": testE2eTestingManifestsStatefulsetMysqlGaleraServiceYaml, + "test/e2e/testing-manifests/statefulset/mysql-galera/statefulset.yaml": testE2eTestingManifestsStatefulsetMysqlGaleraStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/mysql-upgrade/configmap.yaml": testE2eTestingManifestsStatefulsetMysqlUpgradeConfigmapYaml, + "test/e2e/testing-manifests/statefulset/mysql-upgrade/service.yaml": testE2eTestingManifestsStatefulsetMysqlUpgradeServiceYaml, + "test/e2e/testing-manifests/statefulset/mysql-upgrade/statefulset.yaml": testE2eTestingManifestsStatefulsetMysqlUpgradeStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/mysql-upgrade/tester.yaml": testE2eTestingManifestsStatefulsetMysqlUpgradeTesterYaml, + "test/e2e/testing-manifests/statefulset/nginx/service.yaml": testE2eTestingManifestsStatefulsetNginxServiceYaml, + "test/e2e/testing-manifests/statefulset/nginx/statefulset.yaml": testE2eTestingManifestsStatefulsetNginxStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/redis/service.yaml": testE2eTestingManifestsStatefulsetRedisServiceYaml, + "test/e2e/testing-manifests/statefulset/redis/statefulset.yaml": testE2eTestingManifestsStatefulsetRedisStatefulsetYaml, + "test/e2e/testing-manifests/statefulset/zookeeper/service.yaml": testE2eTestingManifestsStatefulsetZookeeperServiceYaml, + "test/e2e/testing-manifests/statefulset/zookeeper/statefulset.yaml": testE2eTestingManifestsStatefulsetZookeeperStatefulsetYaml, + "test/e2e/testing-manifests/storage-csi/OWNERS": testE2eTestingManifestsStorageCsiOwners, + "test/e2e/testing-manifests/storage-csi/controller-role.yaml": testE2eTestingManifestsStorageCsiControllerRoleYaml, + "test/e2e/testing-manifests/storage-csi/external-attacher/rbac.yaml": testE2eTestingManifestsStorageCsiExternalAttacherRbacYaml, + "test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml": testE2eTestingManifestsStorageCsiExternalProvisionerRbacYaml, + "test/e2e/testing-manifests/storage-csi/external-resizer/rbac.yaml": testE2eTestingManifestsStorageCsiExternalResizerRbacYaml, + "test/e2e/testing-manifests/storage-csi/external-snapshotter/rbac.yaml": testE2eTestingManifestsStorageCsiExternalSnapshotterRbacYaml, + "test/e2e/testing-manifests/storage-csi/gce-pd/controller_ss.yaml": testE2eTestingManifestsStorageCsiGcePdController_ssYaml, + "test/e2e/testing-manifests/storage-csi/gce-pd/csi-controller-rbac.yaml": testE2eTestingManifestsStorageCsiGcePdCsiControllerRbacYaml, + "test/e2e/testing-manifests/storage-csi/gce-pd/node_ds.yaml": testE2eTestingManifestsStorageCsiGcePdNode_dsYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-attacher.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathAttacherYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-driverinfo.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathDriverinfoYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-plugin.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathPluginYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-provisioner.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathProvisionerYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-resizer.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathResizerYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-snapshotter.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathSnapshotterYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/e2e-test-rbac.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathE2eTestRbacYaml, + "test/e2e/testing-manifests/storage-csi/hostpath/usage/csi-storageclass.yaml": testE2eTestingManifestsStorageCsiHostpathUsageCsiStorageclassYaml, + "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-attacher.yaml": testE2eTestingManifestsStorageCsiMockCsiMockDriverAttacherYaml, + "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-resizer.yaml": testE2eTestingManifestsStorageCsiMockCsiMockDriverResizerYaml, + "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver.yaml": testE2eTestingManifestsStorageCsiMockCsiMockDriverYaml, + "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driverinfo.yaml": testE2eTestingManifestsStorageCsiMockCsiMockDriverinfoYaml, + "test/e2e/testing-manifests/storage-csi/mock/csi-mock-rbac.yaml": testE2eTestingManifestsStorageCsiMockCsiMockRbacYaml, + "test/e2e/testing-manifests/storage-csi/mock/csi-storageclass.yaml": testE2eTestingManifestsStorageCsiMockCsiStorageclassYaml, + "test/e2e_node/testing-manifests/sriovdp-cm.yaml": testE2e_nodeTestingManifestsSriovdpCmYaml, + "test/e2e_node/testing-manifests/sriovdp-ds.yaml": testE2e_nodeTestingManifestsSriovdpDsYaml, + "test/e2e_node/testing-manifests/sriovdp-sa.yaml": testE2e_nodeTestingManifestsSriovdpSaYaml, + "test/images/Makefile": testImagesMakefile, + "test/images/OWNERS": testImagesOwners, + "test/images/agnhost/.gitignore": testImagesAgnhostGitignore, + "test/images/agnhost/BASEIMAGE": testImagesAgnhostBaseimage, + "test/images/agnhost/Dockerfile": testImagesAgnhostDockerfile, + "test/images/agnhost/Dockerfile_windows": testImagesAgnhostDockerfile_windows, + "test/images/agnhost/Makefile": testImagesAgnhostMakefile, + "test/images/agnhost/OWNERS": testImagesAgnhostOwners, + "test/images/agnhost/VERSION": testImagesAgnhostVersion, + "test/images/agnhost/agnhost.go": testImagesAgnhostAgnhostGo, + "test/images/agnhost/audit-proxy/main.go": testImagesAgnhostAuditProxyMainGo, + "test/images/agnhost/connect/connect.go": testImagesAgnhostConnectConnectGo, + "test/images/agnhost/crd-conversion-webhook/config.go": testImagesAgnhostCrdConversionWebhookConfigGo, + "test/images/agnhost/crd-conversion-webhook/converter/converter_test.go": testImagesAgnhostCrdConversionWebhookConverterConverter_testGo, + "test/images/agnhost/crd-conversion-webhook/converter/example_converter.go": testImagesAgnhostCrdConversionWebhookConverterExample_converterGo, + "test/images/agnhost/crd-conversion-webhook/converter/framework.go": testImagesAgnhostCrdConversionWebhookConverterFrameworkGo, + "test/images/agnhost/crd-conversion-webhook/main.go": testImagesAgnhostCrdConversionWebhookMainGo, + "test/images/agnhost/dns/common.go": testImagesAgnhostDnsCommonGo, + "test/images/agnhost/dns/dns.go": testImagesAgnhostDnsDnsGo, + "test/images/agnhost/dns/dns_windows.go": testImagesAgnhostDnsDns_windowsGo, + "test/images/agnhost/entrypoint-tester/ep.go": testImagesAgnhostEntrypointTesterEpGo, + "test/images/agnhost/fakegitserver/gitserver.go": testImagesAgnhostFakegitserverGitserverGo, + "test/images/agnhost/guestbook/guestbook.go": testImagesAgnhostGuestbookGuestbookGo, + "test/images/agnhost/inclusterclient/main.go": testImagesAgnhostInclusterclientMainGo, + "test/images/agnhost/liveness/server.go": testImagesAgnhostLivenessServerGo, + "test/images/agnhost/logs-generator/logs_generator.go": testImagesAgnhostLogsGeneratorLogs_generatorGo, + "test/images/agnhost/mounttest/filePermissions.ps1": testImagesAgnhostMounttestFilepermissionsPs1, + "test/images/agnhost/mounttest/mt.go": testImagesAgnhostMounttestMtGo, + "test/images/agnhost/mounttest/mt_utils.go": testImagesAgnhostMounttestMt_utilsGo, + "test/images/agnhost/mounttest/mt_utils_windows.go": testImagesAgnhostMounttestMt_utils_windowsGo, + "test/images/agnhost/net/common/common.go": testImagesAgnhostNetCommonCommonGo, + "test/images/agnhost/net/main.go": testImagesAgnhostNetMainGo, + "test/images/agnhost/net/nat/closewait.go": testImagesAgnhostNetNatClosewaitGo, + "test/images/agnhost/netexec/netexec.go": testImagesAgnhostNetexecNetexecGo, + "test/images/agnhost/nettest/nettest.go": testImagesAgnhostNettestNettestGo, + "test/images/agnhost/no-snat-test/main.go": testImagesAgnhostNoSnatTestMainGo, + "test/images/agnhost/no-snat-test-proxy/main.go": testImagesAgnhostNoSnatTestProxyMainGo, + "test/images/agnhost/openidmetadata/openidmetadata.go": testImagesAgnhostOpenidmetadataOpenidmetadataGo, + "test/images/agnhost/pause/pause.go": testImagesAgnhostPausePauseGo, + "test/images/agnhost/port-forward-tester/portforwardtester.go": testImagesAgnhostPortForwardTesterPortforwardtesterGo, + "test/images/agnhost/porter/localhost.crt": testImagesAgnhostPorterLocalhostCrt, + "test/images/agnhost/porter/localhost.key": testImagesAgnhostPorterLocalhostKey, + "test/images/agnhost/porter/porter.go": testImagesAgnhostPorterPorterGo, + "test/images/agnhost/resource-consumer-controller/controller.go": testImagesAgnhostResourceConsumerControllerControllerGo, + "test/images/agnhost/serve-hostname/serve_hostname.go": testImagesAgnhostServeHostnameServe_hostnameGo, + "test/images/agnhost/test-webserver/test-webserver.go": testImagesAgnhostTestWebserverTestWebserverGo, + "test/images/agnhost/webhook/addlabel.go": testImagesAgnhostWebhookAddlabelGo, + "test/images/agnhost/webhook/addlabel_test.go": testImagesAgnhostWebhookAddlabel_testGo, + "test/images/agnhost/webhook/alwaysallow.go": testImagesAgnhostWebhookAlwaysallowGo, + "test/images/agnhost/webhook/alwaysdeny.go": testImagesAgnhostWebhookAlwaysdenyGo, + "test/images/agnhost/webhook/config.go": testImagesAgnhostWebhookConfigGo, + "test/images/agnhost/webhook/configmap.go": testImagesAgnhostWebhookConfigmapGo, + "test/images/agnhost/webhook/convert.go": testImagesAgnhostWebhookConvertGo, + "test/images/agnhost/webhook/convert_test.go": testImagesAgnhostWebhookConvert_testGo, + "test/images/agnhost/webhook/crd.go": testImagesAgnhostWebhookCrdGo, + "test/images/agnhost/webhook/customresource.go": testImagesAgnhostWebhookCustomresourceGo, + "test/images/agnhost/webhook/main.go": testImagesAgnhostWebhookMainGo, + "test/images/agnhost/webhook/patch_test.go": testImagesAgnhostWebhookPatch_testGo, + "test/images/agnhost/webhook/pods.go": testImagesAgnhostWebhookPodsGo, + "test/images/agnhost/webhook/scheme.go": testImagesAgnhostWebhookSchemeGo, + "test/images/apparmor-loader/BASEIMAGE": testImagesApparmorLoaderBaseimage, + "test/images/apparmor-loader/Dockerfile": testImagesApparmorLoaderDockerfile, + "test/images/apparmor-loader/Makefile": testImagesApparmorLoaderMakefile, + "test/images/apparmor-loader/OWNERS": testImagesApparmorLoaderOwners, + "test/images/apparmor-loader/VERSION": testImagesApparmorLoaderVersion, + "test/images/apparmor-loader/example-configmap.yaml": testImagesApparmorLoaderExampleConfigmapYaml, + "test/images/apparmor-loader/example-daemon.yaml": testImagesApparmorLoaderExampleDaemonYaml, + "test/images/apparmor-loader/example-namespace.yaml": testImagesApparmorLoaderExampleNamespaceYaml, + "test/images/apparmor-loader/example-pod.yaml": testImagesApparmorLoaderExamplePodYaml, + "test/images/apparmor-loader/loader.go": testImagesApparmorLoaderLoaderGo, + "test/images/busybox/BASEIMAGE": testImagesBusyboxBaseimage, + "test/images/busybox/Dockerfile_windows": testImagesBusyboxDockerfile_windows, + "test/images/busybox/Makefile": testImagesBusyboxMakefile, + "test/images/busybox/OWNERS": testImagesBusyboxOwners, + "test/images/busybox/VERSION": testImagesBusyboxVersion, + "test/images/busybox/hostname.go": testImagesBusyboxHostnameGo, + "test/images/cloudbuild.yaml": testImagesCloudbuildYaml, + "test/images/cuda-vector-add/BASEIMAGE": testImagesCudaVectorAddBaseimage, + "test/images/cuda-vector-add/Dockerfile": testImagesCudaVectorAddDockerfile, + "test/images/cuda-vector-add/OWNERS": testImagesCudaVectorAddOwners, + "test/images/cuda-vector-add/VERSION": testImagesCudaVectorAddVersion, + "test/images/echoserver/BASEIMAGE": testImagesEchoserverBaseimage, + "test/images/echoserver/Dockerfile": testImagesEchoserverDockerfile, + "test/images/echoserver/OWNERS": testImagesEchoserverOwners, + "test/images/echoserver/VERSION": testImagesEchoserverVersion, + "test/images/echoserver/nginx.conf": testImagesEchoserverNginxConf, + "test/images/echoserver/run.sh": testImagesEchoserverRunSh, + "test/images/echoserver/template.lua": testImagesEchoserverTemplateLua, + "test/images/image-util.sh": testImagesImageUtilSh, + "test/images/ipc-utils/BASEIMAGE": testImagesIpcUtilsBaseimage, + "test/images/ipc-utils/Dockerfile": testImagesIpcUtilsDockerfile, + "test/images/ipc-utils/VERSION": testImagesIpcUtilsVersion, + "test/images/jessie-dnsutils/BASEIMAGE": testImagesJessieDnsutilsBaseimage, + "test/images/jessie-dnsutils/Dockerfile": testImagesJessieDnsutilsDockerfile, + "test/images/jessie-dnsutils/OWNERS": testImagesJessieDnsutilsOwners, + "test/images/jessie-dnsutils/VERSION": testImagesJessieDnsutilsVersion, + "test/images/jessie-dnsutils/fixup-apt-list.sh": testImagesJessieDnsutilsFixupAptListSh, + "test/images/kitten/BASEIMAGE": testImagesKittenBaseimage, + "test/images/kitten/Dockerfile": testImagesKittenDockerfile, + "test/images/kitten/OWNERS": testImagesKittenOwners, + "test/images/kitten/VERSION": testImagesKittenVersion, + "test/images/kitten/html/data.json": testImagesKittenHtmlDataJson, + "test/images/metadata-concealment/Dockerfile": testImagesMetadataConcealmentDockerfile, + "test/images/metadata-concealment/Makefile": testImagesMetadataConcealmentMakefile, + "test/images/metadata-concealment/OWNERS": testImagesMetadataConcealmentOwners, + "test/images/metadata-concealment/VERSION": testImagesMetadataConcealmentVersion, + "test/images/metadata-concealment/check_metadata_concealment.go": testImagesMetadataConcealmentCheck_metadata_concealmentGo, + "test/images/nautilus/BASEIMAGE": testImagesNautilusBaseimage, + "test/images/nautilus/Dockerfile": testImagesNautilusDockerfile, + "test/images/nautilus/OWNERS": testImagesNautilusOwners, + "test/images/nautilus/VERSION": testImagesNautilusVersion, + "test/images/nautilus/html/data.json": testImagesNautilusHtmlDataJson, + "test/images/node-perf/npb-ep/BASEIMAGE": testImagesNodePerfNpbEpBaseimage, + "test/images/node-perf/npb-ep/Dockerfile": testImagesNodePerfNpbEpDockerfile, + "test/images/node-perf/npb-ep/VERSION": testImagesNodePerfNpbEpVersion, + "test/images/node-perf/npb-is/BASEIMAGE": testImagesNodePerfNpbIsBaseimage, + "test/images/node-perf/npb-is/Dockerfile": testImagesNodePerfNpbIsDockerfile, + "test/images/node-perf/npb-is/VERSION": testImagesNodePerfNpbIsVersion, + "test/images/node-perf/tf-wide-deep/BASEIMAGE": testImagesNodePerfTfWideDeepBaseimage, + "test/images/node-perf/tf-wide-deep/Dockerfile": testImagesNodePerfTfWideDeepDockerfile, + "test/images/node-perf/tf-wide-deep/VERSION": testImagesNodePerfTfWideDeepVersion, + "test/images/nonewprivs/.gitignore": testImagesNonewprivsGitignore, + "test/images/nonewprivs/BASEIMAGE": testImagesNonewprivsBaseimage, + "test/images/nonewprivs/Dockerfile": testImagesNonewprivsDockerfile, + "test/images/nonewprivs/Makefile": testImagesNonewprivsMakefile, + "test/images/nonewprivs/OWNERS": testImagesNonewprivsOwners, + "test/images/nonewprivs/VERSION": testImagesNonewprivsVersion, + "test/images/nonewprivs/nnp.go": testImagesNonewprivsNnpGo, + "test/images/nonroot/BASEIMAGE": testImagesNonrootBaseimage, + "test/images/nonroot/Dockerfile": testImagesNonrootDockerfile, + "test/images/nonroot/OWNERS": testImagesNonrootOwners, + "test/images/nonroot/VERSION": testImagesNonrootVersion, + "test/images/pets/OWNERS": testImagesPetsOwners, + "test/images/pets/peer-finder/BASEIMAGE": testImagesPetsPeerFinderBaseimage, + "test/images/pets/peer-finder/Dockerfile": testImagesPetsPeerFinderDockerfile, + "test/images/pets/peer-finder/Makefile": testImagesPetsPeerFinderMakefile, + "test/images/pets/peer-finder/VERSION": testImagesPetsPeerFinderVersion, + "test/images/pets/peer-finder/peer-finder.go": testImagesPetsPeerFinderPeerFinderGo, + "test/images/pets/redis-installer/BASEIMAGE": testImagesPetsRedisInstallerBaseimage, + "test/images/pets/redis-installer/Dockerfile": testImagesPetsRedisInstallerDockerfile, + "test/images/pets/redis-installer/Makefile": testImagesPetsRedisInstallerMakefile, + "test/images/pets/redis-installer/VERSION": testImagesPetsRedisInstallerVersion, + "test/images/pets/redis-installer/install.sh": testImagesPetsRedisInstallerInstallSh, + "test/images/pets/redis-installer/on-start.sh": testImagesPetsRedisInstallerOnStartSh, + "test/images/pets/zookeeper-installer/BASEIMAGE": testImagesPetsZookeeperInstallerBaseimage, + "test/images/pets/zookeeper-installer/Dockerfile": testImagesPetsZookeeperInstallerDockerfile, + "test/images/pets/zookeeper-installer/Makefile": testImagesPetsZookeeperInstallerMakefile, + "test/images/pets/zookeeper-installer/VERSION": testImagesPetsZookeeperInstallerVersion, + "test/images/pets/zookeeper-installer/install.sh": testImagesPetsZookeeperInstallerInstallSh, + "test/images/pets/zookeeper-installer/on-start.sh": testImagesPetsZookeeperInstallerOnStartSh, + "test/images/redis/BASEIMAGE": testImagesRedisBaseimage, + "test/images/redis/Dockerfile": testImagesRedisDockerfile, + "test/images/redis/OWNERS": testImagesRedisOwners, + "test/images/redis/VERSION": testImagesRedisVersion, + "test/images/redis/redis.conf": testImagesRedisRedisConf, + "test/images/regression-issue-74839/.gitignore": testImagesRegressionIssue74839Gitignore, + "test/images/regression-issue-74839/Dockerfile": testImagesRegressionIssue74839Dockerfile, + "test/images/regression-issue-74839/Makefile": testImagesRegressionIssue74839Makefile, + "test/images/regression-issue-74839/OWNERS": testImagesRegressionIssue74839Owners, + "test/images/regression-issue-74839/VERSION": testImagesRegressionIssue74839Version, + "test/images/regression-issue-74839/main.go": testImagesRegressionIssue74839MainGo, + "test/images/regression-issue-74839/tcp.go": testImagesRegressionIssue74839TcpGo, + "test/images/resource-consumer/.gitignore": testImagesResourceConsumerGitignore, + "test/images/resource-consumer/BASEIMAGE": testImagesResourceConsumerBaseimage, + "test/images/resource-consumer/Dockerfile": testImagesResourceConsumerDockerfile, + "test/images/resource-consumer/Makefile": testImagesResourceConsumerMakefile, + "test/images/resource-consumer/VERSION": testImagesResourceConsumerVersion, + "test/images/resource-consumer/common/common.go": testImagesResourceConsumerCommonCommonGo, + "test/images/resource-consumer/consume-cpu/consume_cpu.go": testImagesResourceConsumerConsumeCpuConsume_cpuGo, + "test/images/resource-consumer/resource_consumer.go": testImagesResourceConsumerResource_consumerGo, + "test/images/resource-consumer/resource_consumer_handler.go": testImagesResourceConsumerResource_consumer_handlerGo, + "test/images/resource-consumer/utils.go": testImagesResourceConsumerUtilsGo, + "test/images/sample-apiserver/BASEIMAGE": testImagesSampleApiserverBaseimage, + "test/images/sample-apiserver/Dockerfile": testImagesSampleApiserverDockerfile, + "test/images/sample-apiserver/OWNERS": testImagesSampleApiserverOwners, + "test/images/sample-apiserver/VERSION": testImagesSampleApiserverVersion, + "test/images/sample-device-plugin/BASEIMAGE": testImagesSampleDevicePluginBaseimage, + "test/images/sample-device-plugin/Dockerfile": testImagesSampleDevicePluginDockerfile, + "test/images/sample-device-plugin/Makefile": testImagesSampleDevicePluginMakefile, + "test/images/sample-device-plugin/VERSION": testImagesSampleDevicePluginVersion, + "test/images/sample-device-plugin/sampledeviceplugin.go": testImagesSampleDevicePluginSampledevicepluginGo, + "test/images/volume/OWNERS": testImagesVolumeOwners, + "test/images/volume/gluster/BASEIMAGE": testImagesVolumeGlusterBaseimage, + "test/images/volume/gluster/Dockerfile": testImagesVolumeGlusterDockerfile, + "test/images/volume/gluster/VERSION": testImagesVolumeGlusterVersion, + "test/images/volume/gluster/glusterd.vol": testImagesVolumeGlusterGlusterdVol, + "test/images/volume/gluster/index.html": testImagesVolumeGlusterIndexHtml, + "test/images/volume/gluster/run_gluster.sh": testImagesVolumeGlusterRun_glusterSh, + "test/images/volume/iscsi/BASEIMAGE": testImagesVolumeIscsiBaseimage, + "test/images/volume/iscsi/Dockerfile": testImagesVolumeIscsiDockerfile, + "test/images/volume/iscsi/VERSION": testImagesVolumeIscsiVersion, + "test/images/volume/iscsi/block.tar.gz": testImagesVolumeIscsiBlockTarGz, + "test/images/volume/iscsi/create_block.sh": testImagesVolumeIscsiCreate_blockSh, + "test/images/volume/iscsi/run_iscsi_target.sh": testImagesVolumeIscsiRun_iscsi_targetSh, + "test/images/volume/nfs/BASEIMAGE": testImagesVolumeNfsBaseimage, + "test/images/volume/nfs/Dockerfile": testImagesVolumeNfsDockerfile, + "test/images/volume/nfs/VERSION": testImagesVolumeNfsVersion, + "test/images/volume/nfs/index.html": testImagesVolumeNfsIndexHtml, + "test/images/volume/nfs/run_nfs.sh": testImagesVolumeNfsRun_nfsSh, + "test/images/volume/rbd/BASEIMAGE": testImagesVolumeRbdBaseimage, + "test/images/volume/rbd/Dockerfile": testImagesVolumeRbdDockerfile, + "test/images/volume/rbd/VERSION": testImagesVolumeRbdVersion, + "test/images/volume/rbd/block.tar.gz": testImagesVolumeRbdBlockTarGz, + "test/images/volume/rbd/bootstrap.sh": testImagesVolumeRbdBootstrapSh, + "test/images/volume/rbd/ceph.conf.sh": testImagesVolumeRbdCephConfSh, + "test/images/volume/rbd/create_block.sh": testImagesVolumeRbdCreate_blockSh, + "test/images/volume/rbd/keyring": testImagesVolumeRbdKeyring, + "test/images/volume/rbd/mon.sh": testImagesVolumeRbdMonSh, + "test/images/volume/rbd/osd.sh": testImagesVolumeRbdOsdSh, + "test/fixtures/doc-yaml/admin/daemon.yaml": testFixturesDocYamlAdminDaemonYaml, + "test/fixtures/doc-yaml/admin/high-availability/etcd.yaml": testFixturesDocYamlAdminHighAvailabilityEtcdYaml, + "test/fixtures/doc-yaml/admin/high-availability/kube-apiserver.yaml": testFixturesDocYamlAdminHighAvailabilityKubeApiserverYaml, + "test/fixtures/doc-yaml/admin/high-availability/kube-controller-manager.yaml": testFixturesDocYamlAdminHighAvailabilityKubeControllerManagerYaml, + "test/fixtures/doc-yaml/admin/high-availability/kube-scheduler.yaml": testFixturesDocYamlAdminHighAvailabilityKubeSchedulerYaml, + "test/fixtures/doc-yaml/admin/limitrange/invalid-pod.yaml": testFixturesDocYamlAdminLimitrangeInvalidPodYaml, + "test/fixtures/doc-yaml/admin/limitrange/limits.yaml": testFixturesDocYamlAdminLimitrangeLimitsYaml, + "test/fixtures/doc-yaml/admin/limitrange/namespace.yaml": testFixturesDocYamlAdminLimitrangeNamespaceYaml, + "test/fixtures/doc-yaml/admin/limitrange/valid-pod.yaml": testFixturesDocYamlAdminLimitrangeValidPodYaml, + "test/fixtures/doc-yaml/admin/namespaces/namespace-dev.json": testFixturesDocYamlAdminNamespacesNamespaceDevJson, + "test/fixtures/doc-yaml/admin/namespaces/namespace-prod.json": testFixturesDocYamlAdminNamespacesNamespaceProdJson, + "test/fixtures/doc-yaml/admin/resourcequota/limits.yaml": testFixturesDocYamlAdminResourcequotaLimitsYaml, + "test/fixtures/doc-yaml/admin/resourcequota/namespace.yaml": testFixturesDocYamlAdminResourcequotaNamespaceYaml, + "test/fixtures/doc-yaml/admin/resourcequota/quota.yaml": testFixturesDocYamlAdminResourcequotaQuotaYaml, + "test/fixtures/doc-yaml/user-guide/configmap/configmap.yaml": testFixturesDocYamlUserGuideConfigmapConfigmapYaml, + "test/fixtures/doc-yaml/user-guide/deployment.yaml": testFixturesDocYamlUserGuideDeploymentYaml, + "test/fixtures/doc-yaml/user-guide/downward-api/dapi-pod.yaml.in": testFixturesDocYamlUserGuideDownwardApiDapiPodYamlIn, + "test/fixtures/doc-yaml/user-guide/job.yaml": testFixturesDocYamlUserGuideJobYaml, + "test/fixtures/doc-yaml/user-guide/liveness/exec-liveness.yaml.in": testFixturesDocYamlUserGuideLivenessExecLivenessYamlIn, + "test/fixtures/doc-yaml/user-guide/liveness/http-liveness.yaml.in": testFixturesDocYamlUserGuideLivenessHttpLivenessYamlIn, + "test/fixtures/doc-yaml/user-guide/multi-pod.yaml": testFixturesDocYamlUserGuideMultiPodYaml, + "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-01.yaml": testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim01Yaml, + "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-02.yaml": testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim02Yaml, + "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-03.json": testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim03Json, + "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/gce.yaml": testFixturesDocYamlUserGuidePersistentVolumesVolumesGceYaml, + "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-01.yaml": testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal01Yaml, + "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-02.yaml": testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal02Yaml, + "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/nfs.yaml": testFixturesDocYamlUserGuidePersistentVolumesVolumesNfsYaml, + "test/fixtures/doc-yaml/user-guide/pod.yaml": testFixturesDocYamlUserGuidePodYaml, + "test/fixtures/doc-yaml/user-guide/replicaset/redis-slave.yaml": testFixturesDocYamlUserGuideReplicasetRedisSlaveYaml, + "test/fixtures/doc-yaml/user-guide/replication.yaml": testFixturesDocYamlUserGuideReplicationYaml, + "test/fixtures/doc-yaml/user-guide/secrets/secret-env-pod.yaml": testFixturesDocYamlUserGuideSecretsSecretEnvPodYaml, + "test/fixtures/doc-yaml/user-guide/secrets/secret-pod.yaml.in": testFixturesDocYamlUserGuideSecretsSecretPodYamlIn, + "test/fixtures/doc-yaml/user-guide/secrets/secret.yaml": testFixturesDocYamlUserGuideSecretsSecretYaml, + "test/fixtures/doc-yaml/user-guide/update-demo/images/kitten/html/data.json": testFixturesDocYamlUserGuideUpdateDemoImagesKittenHtmlDataJson, + "test/fixtures/doc-yaml/user-guide/update-demo/images/nautilus/html/data.json": testFixturesDocYamlUserGuideUpdateDemoImagesNautilusHtmlDataJson, + "test/fixtures/doc-yaml/user-guide/update-demo/kitten-rc.yaml.in": testFixturesDocYamlUserGuideUpdateDemoKittenRcYamlIn, + "test/fixtures/doc-yaml/user-guide/update-demo/nautilus-rc.yaml.in": testFixturesDocYamlUserGuideUpdateDemoNautilusRcYamlIn, + "test/fixtures/doc-yaml/user-guide/walkthrough/podtemplate.json": testFixturesDocYamlUserGuideWalkthroughPodtemplateJson, + "test/fixtures/pkg/kubectl/OWNERS": testFixturesPkgKubectlOwners, + "test/fixtures/pkg/kubectl/plugins/bar/kubectl-bar": testFixturesPkgKubectlPluginsBarKubectlBar, + "test/fixtures/pkg/kubectl/plugins/foo/kubectl-foo": testFixturesPkgKubectlPluginsFooKubectlFoo, + "test/fixtures/pkg/kubectl/plugins/kubectl-foo": testFixturesPkgKubectlPluginsKubectlFoo, + "test/fixtures/pkg/kubectl/plugins/version/kubectl-version": testFixturesPkgKubectlPluginsVersionKubectlVersion, +} + +// AssetDir returns the file names below a certain +// directory embedded in the file by go-bindata. +// For example if you run go-bindata on data/... and data contains the +// following hierarchy: +// data/ +// foo.txt +// img/ +// a.png +// b.png +// then AssetDir("data") would return []string{"foo.txt", "img"} +// AssetDir("data/img") would return []string{"a.png", "b.png"} +// AssetDir("foo.txt") and AssetDir("notexist") would return an error +// AssetDir("") will return []string{"data"}. +func AssetDir(name string) ([]string, error) { + node := _bintree + if len(name) != 0 { + cannonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(cannonicalName, "/") + for _, p := range pathList { + node = node.Children[p] + if node == nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + } + } + if node.Func != nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + rv := make([]string, 0, len(node.Children)) + for childName := range node.Children { + rv = append(rv, childName) + } + return rv, nil +} + +type bintree struct { + Func func() (*asset, error) + Children map[string]*bintree +} + +var _bintree = &bintree{nil, map[string]*bintree{ + "test": {nil, map[string]*bintree{ + "conformance": {nil, map[string]*bintree{ + "testdata": {nil, map[string]*bintree{ + "OWNERS": {testConformanceTestdataOwners, map[string]*bintree{}}, + "conformance.yaml": {testConformanceTestdataConformanceYaml, map[string]*bintree{}}, + }}, + }}, + "e2e": {nil, map[string]*bintree{ + "testing-manifests": {nil, map[string]*bintree{ + "flexvolume": {nil, map[string]*bintree{ + "attachable-with-long-mount": {testE2eTestingManifestsFlexvolumeAttachableWithLongMount, map[string]*bintree{}}, + "dummy": {testE2eTestingManifestsFlexvolumeDummy, map[string]*bintree{}}, + "dummy-attachable": {testE2eTestingManifestsFlexvolumeDummyAttachable, map[string]*bintree{}}, + }}, + "guestbook": {nil, map[string]*bintree{ + "agnhost-primary-deployment.yaml.in": {testE2eTestingManifestsGuestbookAgnhostPrimaryDeploymentYamlIn, map[string]*bintree{}}, + "agnhost-primary-service.yaml": {testE2eTestingManifestsGuestbookAgnhostPrimaryServiceYaml, map[string]*bintree{}}, + "agnhost-replica-deployment.yaml.in": {testE2eTestingManifestsGuestbookAgnhostReplicaDeploymentYamlIn, map[string]*bintree{}}, + "agnhost-replica-service.yaml": {testE2eTestingManifestsGuestbookAgnhostReplicaServiceYaml, map[string]*bintree{}}, + "frontend-deployment.yaml.in": {testE2eTestingManifestsGuestbookFrontendDeploymentYamlIn, map[string]*bintree{}}, + "frontend-service.yaml": {testE2eTestingManifestsGuestbookFrontendServiceYaml, map[string]*bintree{}}, + "legacy": {nil, map[string]*bintree{ + "frontend-controller.yaml": {testE2eTestingManifestsGuestbookLegacyFrontendControllerYaml, map[string]*bintree{}}, + "redis-master-controller.yaml": {testE2eTestingManifestsGuestbookLegacyRedisMasterControllerYaml, map[string]*bintree{}}, + "redis-slave-controller.yaml": {testE2eTestingManifestsGuestbookLegacyRedisSlaveControllerYaml, map[string]*bintree{}}, + }}, + "redis-master-deployment.yaml.in": {testE2eTestingManifestsGuestbookRedisMasterDeploymentYamlIn, map[string]*bintree{}}, + "redis-master-service.yaml": {testE2eTestingManifestsGuestbookRedisMasterServiceYaml, map[string]*bintree{}}, + "redis-slave-deployment.yaml.in": {testE2eTestingManifestsGuestbookRedisSlaveDeploymentYamlIn, map[string]*bintree{}}, + "redis-slave-service.yaml": {testE2eTestingManifestsGuestbookRedisSlaveServiceYaml, map[string]*bintree{}}, + }}, + "ingress": {nil, map[string]*bintree{ + "gce": {nil, map[string]*bintree{ + "static-ip-2": {nil, map[string]*bintree{ + "ing.yaml": {testE2eTestingManifestsIngressGceStaticIp2IngYaml, map[string]*bintree{}}, + "rc.yaml": {testE2eTestingManifestsIngressGceStaticIp2RcYaml, map[string]*bintree{}}, + "svc.yaml": {testE2eTestingManifestsIngressGceStaticIp2SvcYaml, map[string]*bintree{}}, + }}, + }}, + "http": {nil, map[string]*bintree{ + "ing.yaml": {testE2eTestingManifestsIngressHttpIngYaml, map[string]*bintree{}}, + "rc.yaml": {testE2eTestingManifestsIngressHttpRcYaml, map[string]*bintree{}}, + "svc.yaml": {testE2eTestingManifestsIngressHttpSvcYaml, map[string]*bintree{}}, + }}, + "http2": {nil, map[string]*bintree{ + "ing.yaml": {testE2eTestingManifestsIngressHttp2IngYaml, map[string]*bintree{}}, + "rc.yaml": {testE2eTestingManifestsIngressHttp2RcYaml, map[string]*bintree{}}, + "svc.yaml": {testE2eTestingManifestsIngressHttp2SvcYaml, map[string]*bintree{}}, + }}, + "multiple-certs": {nil, map[string]*bintree{ + "ing.yaml": {testE2eTestingManifestsIngressMultipleCertsIngYaml, map[string]*bintree{}}, + "rc.yaml": {testE2eTestingManifestsIngressMultipleCertsRcYaml, map[string]*bintree{}}, + "svc.yaml": {testE2eTestingManifestsIngressMultipleCertsSvcYaml, map[string]*bintree{}}, + }}, + "neg": {nil, map[string]*bintree{ + "ing.yaml": {testE2eTestingManifestsIngressNegIngYaml, map[string]*bintree{}}, + "rc.yaml": {testE2eTestingManifestsIngressNegRcYaml, map[string]*bintree{}}, + "svc.yaml": {testE2eTestingManifestsIngressNegSvcYaml, map[string]*bintree{}}, + }}, + "neg-clusterip": {nil, map[string]*bintree{ + "ing.yaml": {testE2eTestingManifestsIngressNegClusteripIngYaml, map[string]*bintree{}}, + "rc.yaml": {testE2eTestingManifestsIngressNegClusteripRcYaml, map[string]*bintree{}}, + "svc.yaml": {testE2eTestingManifestsIngressNegClusteripSvcYaml, map[string]*bintree{}}, + }}, + "neg-exposed": {nil, map[string]*bintree{ + "ing.yaml": {testE2eTestingManifestsIngressNegExposedIngYaml, map[string]*bintree{}}, + "rc.yaml": {testE2eTestingManifestsIngressNegExposedRcYaml, map[string]*bintree{}}, + "svc.yaml": {testE2eTestingManifestsIngressNegExposedSvcYaml, map[string]*bintree{}}, + }}, + "nginx": {nil, map[string]*bintree{ + "rc.yaml": {testE2eTestingManifestsIngressNginxRcYaml, map[string]*bintree{}}, + }}, + "pre-shared-cert": {nil, map[string]*bintree{ + "ing.yaml": {testE2eTestingManifestsIngressPreSharedCertIngYaml, map[string]*bintree{}}, + "rc.yaml": {testE2eTestingManifestsIngressPreSharedCertRcYaml, map[string]*bintree{}}, + "svc.yaml": {testE2eTestingManifestsIngressPreSharedCertSvcYaml, map[string]*bintree{}}, + }}, + "static-ip": {nil, map[string]*bintree{ + "ing.yaml": {testE2eTestingManifestsIngressStaticIpIngYaml, map[string]*bintree{}}, + "rc.yaml": {testE2eTestingManifestsIngressStaticIpRcYaml, map[string]*bintree{}}, + "secret.yaml": {testE2eTestingManifestsIngressStaticIpSecretYaml, map[string]*bintree{}}, + "svc.yaml": {testE2eTestingManifestsIngressStaticIpSvcYaml, map[string]*bintree{}}, + }}, + }}, + "kubectl": {nil, map[string]*bintree{ + "agnhost-primary-controller.json.in": {testE2eTestingManifestsKubectlAgnhostPrimaryControllerJsonIn, map[string]*bintree{}}, + "agnhost-primary-pod.yaml": {testE2eTestingManifestsKubectlAgnhostPrimaryPodYaml, map[string]*bintree{}}, + "agnhost-primary-service.json": {testE2eTestingManifestsKubectlAgnhostPrimaryServiceJson, map[string]*bintree{}}, + "busybox-cronjob.yaml": {testE2eTestingManifestsKubectlBusyboxCronjobYaml, map[string]*bintree{}}, + "busybox-pod.yaml": {testE2eTestingManifestsKubectlBusyboxPodYaml, map[string]*bintree{}}, + "httpd-deployment1.yaml.in": {testE2eTestingManifestsKubectlHttpdDeployment1YamlIn, map[string]*bintree{}}, + "httpd-deployment2.yaml.in": {testE2eTestingManifestsKubectlHttpdDeployment2YamlIn, map[string]*bintree{}}, + "httpd-deployment3.yaml.in": {testE2eTestingManifestsKubectlHttpdDeployment3YamlIn, map[string]*bintree{}}, + "httpd-rc.yaml.in": {testE2eTestingManifestsKubectlHttpdRcYamlIn, map[string]*bintree{}}, + "pause-pod.yaml.in": {testE2eTestingManifestsKubectlPausePodYamlIn, map[string]*bintree{}}, + "pod-with-readiness-probe.yaml.in": {testE2eTestingManifestsKubectlPodWithReadinessProbeYamlIn, map[string]*bintree{}}, + }}, + "pod": {testE2eTestingManifestsPod, map[string]*bintree{}}, + "rbd-storage-class.yaml": {testE2eTestingManifestsRbdStorageClassYaml, map[string]*bintree{}}, + "sample-device-plugin.yaml": {testE2eTestingManifestsSampleDevicePluginYaml, map[string]*bintree{}}, + "scheduling": {nil, map[string]*bintree{ + "nvidia-driver-installer.yaml": {testE2eTestingManifestsSchedulingNvidiaDriverInstallerYaml, map[string]*bintree{}}, + }}, + "serviceloadbalancer": {nil, map[string]*bintree{ + "haproxyrc.yaml": {testE2eTestingManifestsServiceloadbalancerHaproxyrcYaml, map[string]*bintree{}}, + "netexecrc.yaml": {testE2eTestingManifestsServiceloadbalancerNetexecrcYaml, map[string]*bintree{}}, + "netexecsvc.yaml": {testE2eTestingManifestsServiceloadbalancerNetexecsvcYaml, map[string]*bintree{}}, + "nginxrc.yaml": {testE2eTestingManifestsServiceloadbalancerNginxrcYaml, map[string]*bintree{}}, + "nginxsvc.yaml": {testE2eTestingManifestsServiceloadbalancerNginxsvcYaml, map[string]*bintree{}}, + }}, + "statefulset": {nil, map[string]*bintree{ + "cassandra": {nil, map[string]*bintree{ + "controller.yaml": {testE2eTestingManifestsStatefulsetCassandraControllerYaml, map[string]*bintree{}}, + "pdb.yaml": {testE2eTestingManifestsStatefulsetCassandraPdbYaml, map[string]*bintree{}}, + "service.yaml": {testE2eTestingManifestsStatefulsetCassandraServiceYaml, map[string]*bintree{}}, + "statefulset.yaml": {testE2eTestingManifestsStatefulsetCassandraStatefulsetYaml, map[string]*bintree{}}, + "tester.yaml": {testE2eTestingManifestsStatefulsetCassandraTesterYaml, map[string]*bintree{}}, + }}, + "cockroachdb": {nil, map[string]*bintree{ + "service.yaml": {testE2eTestingManifestsStatefulsetCockroachdbServiceYaml, map[string]*bintree{}}, + "statefulset.yaml": {testE2eTestingManifestsStatefulsetCockroachdbStatefulsetYaml, map[string]*bintree{}}, + }}, + "etcd": {nil, map[string]*bintree{ + "pdb.yaml": {testE2eTestingManifestsStatefulsetEtcdPdbYaml, map[string]*bintree{}}, + "service.yaml": {testE2eTestingManifestsStatefulsetEtcdServiceYaml, map[string]*bintree{}}, + "statefulset.yaml": {testE2eTestingManifestsStatefulsetEtcdStatefulsetYaml, map[string]*bintree{}}, + "tester.yaml": {testE2eTestingManifestsStatefulsetEtcdTesterYaml, map[string]*bintree{}}, + }}, + "mysql-galera": {nil, map[string]*bintree{ + "service.yaml": {testE2eTestingManifestsStatefulsetMysqlGaleraServiceYaml, map[string]*bintree{}}, + "statefulset.yaml": {testE2eTestingManifestsStatefulsetMysqlGaleraStatefulsetYaml, map[string]*bintree{}}, + }}, + "mysql-upgrade": {nil, map[string]*bintree{ + "configmap.yaml": {testE2eTestingManifestsStatefulsetMysqlUpgradeConfigmapYaml, map[string]*bintree{}}, + "service.yaml": {testE2eTestingManifestsStatefulsetMysqlUpgradeServiceYaml, map[string]*bintree{}}, + "statefulset.yaml": {testE2eTestingManifestsStatefulsetMysqlUpgradeStatefulsetYaml, map[string]*bintree{}}, + "tester.yaml": {testE2eTestingManifestsStatefulsetMysqlUpgradeTesterYaml, map[string]*bintree{}}, + }}, + "nginx": {nil, map[string]*bintree{ + "service.yaml": {testE2eTestingManifestsStatefulsetNginxServiceYaml, map[string]*bintree{}}, + "statefulset.yaml": {testE2eTestingManifestsStatefulsetNginxStatefulsetYaml, map[string]*bintree{}}, + }}, + "redis": {nil, map[string]*bintree{ + "service.yaml": {testE2eTestingManifestsStatefulsetRedisServiceYaml, map[string]*bintree{}}, + "statefulset.yaml": {testE2eTestingManifestsStatefulsetRedisStatefulsetYaml, map[string]*bintree{}}, + }}, + "zookeeper": {nil, map[string]*bintree{ + "service.yaml": {testE2eTestingManifestsStatefulsetZookeeperServiceYaml, map[string]*bintree{}}, + "statefulset.yaml": {testE2eTestingManifestsStatefulsetZookeeperStatefulsetYaml, map[string]*bintree{}}, + }}, + }}, + "storage-csi": {nil, map[string]*bintree{ + "OWNERS": {testE2eTestingManifestsStorageCsiOwners, map[string]*bintree{}}, + "controller-role.yaml": {testE2eTestingManifestsStorageCsiControllerRoleYaml, map[string]*bintree{}}, + "external-attacher": {nil, map[string]*bintree{ + "rbac.yaml": {testE2eTestingManifestsStorageCsiExternalAttacherRbacYaml, map[string]*bintree{}}, + }}, + "external-provisioner": {nil, map[string]*bintree{ + "rbac.yaml": {testE2eTestingManifestsStorageCsiExternalProvisionerRbacYaml, map[string]*bintree{}}, + }}, + "external-resizer": {nil, map[string]*bintree{ + "rbac.yaml": {testE2eTestingManifestsStorageCsiExternalResizerRbacYaml, map[string]*bintree{}}, + }}, + "external-snapshotter": {nil, map[string]*bintree{ + "rbac.yaml": {testE2eTestingManifestsStorageCsiExternalSnapshotterRbacYaml, map[string]*bintree{}}, + }}, + "gce-pd": {nil, map[string]*bintree{ + "controller_ss.yaml": {testE2eTestingManifestsStorageCsiGcePdController_ssYaml, map[string]*bintree{}}, + "csi-controller-rbac.yaml": {testE2eTestingManifestsStorageCsiGcePdCsiControllerRbacYaml, map[string]*bintree{}}, + "node_ds.yaml": {testE2eTestingManifestsStorageCsiGcePdNode_dsYaml, map[string]*bintree{}}, + }}, + "hostpath": {nil, map[string]*bintree{ + "hostpath": {nil, map[string]*bintree{ + "csi-hostpath-attacher.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathAttacherYaml, map[string]*bintree{}}, + "csi-hostpath-driverinfo.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathDriverinfoYaml, map[string]*bintree{}}, + "csi-hostpath-plugin.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathPluginYaml, map[string]*bintree{}}, + "csi-hostpath-provisioner.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathProvisionerYaml, map[string]*bintree{}}, + "csi-hostpath-resizer.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathResizerYaml, map[string]*bintree{}}, + "csi-hostpath-snapshotter.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathSnapshotterYaml, map[string]*bintree{}}, + "e2e-test-rbac.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathE2eTestRbacYaml, map[string]*bintree{}}, + }}, + "usage": {nil, map[string]*bintree{ + "csi-storageclass.yaml": {testE2eTestingManifestsStorageCsiHostpathUsageCsiStorageclassYaml, map[string]*bintree{}}, + }}, + }}, + "mock": {nil, map[string]*bintree{ + "csi-mock-driver-attacher.yaml": {testE2eTestingManifestsStorageCsiMockCsiMockDriverAttacherYaml, map[string]*bintree{}}, + "csi-mock-driver-resizer.yaml": {testE2eTestingManifestsStorageCsiMockCsiMockDriverResizerYaml, map[string]*bintree{}}, + "csi-mock-driver.yaml": {testE2eTestingManifestsStorageCsiMockCsiMockDriverYaml, map[string]*bintree{}}, + "csi-mock-driverinfo.yaml": {testE2eTestingManifestsStorageCsiMockCsiMockDriverinfoYaml, map[string]*bintree{}}, + "csi-mock-rbac.yaml": {testE2eTestingManifestsStorageCsiMockCsiMockRbacYaml, map[string]*bintree{}}, + "csi-storageclass.yaml": {testE2eTestingManifestsStorageCsiMockCsiStorageclassYaml, map[string]*bintree{}}, + }}, + }}, + }}, + }}, + "e2e_node": {nil, map[string]*bintree{ + "testing-manifests": {nil, map[string]*bintree{ + "sriovdp-cm.yaml": {testE2e_nodeTestingManifestsSriovdpCmYaml, map[string]*bintree{}}, + "sriovdp-ds.yaml": {testE2e_nodeTestingManifestsSriovdpDsYaml, map[string]*bintree{}}, + "sriovdp-sa.yaml": {testE2e_nodeTestingManifestsSriovdpSaYaml, map[string]*bintree{}}, + }}, + }}, + "fixtures": {nil, map[string]*bintree{ + "doc-yaml": {nil, map[string]*bintree{ + "admin": {nil, map[string]*bintree{ + "daemon.yaml": {testFixturesDocYamlAdminDaemonYaml, map[string]*bintree{}}, + "high-availability": {nil, map[string]*bintree{ + "etcd.yaml": {testFixturesDocYamlAdminHighAvailabilityEtcdYaml, map[string]*bintree{}}, + "kube-apiserver.yaml": {testFixturesDocYamlAdminHighAvailabilityKubeApiserverYaml, map[string]*bintree{}}, + "kube-controller-manager.yaml": {testFixturesDocYamlAdminHighAvailabilityKubeControllerManagerYaml, map[string]*bintree{}}, + "kube-scheduler.yaml": {testFixturesDocYamlAdminHighAvailabilityKubeSchedulerYaml, map[string]*bintree{}}, + }}, + "limitrange": {nil, map[string]*bintree{ + "invalid-pod.yaml": {testFixturesDocYamlAdminLimitrangeInvalidPodYaml, map[string]*bintree{}}, + "limits.yaml": {testFixturesDocYamlAdminLimitrangeLimitsYaml, map[string]*bintree{}}, + "namespace.yaml": {testFixturesDocYamlAdminLimitrangeNamespaceYaml, map[string]*bintree{}}, + "valid-pod.yaml": {testFixturesDocYamlAdminLimitrangeValidPodYaml, map[string]*bintree{}}, + }}, + "namespaces": {nil, map[string]*bintree{ + "namespace-dev.json": {testFixturesDocYamlAdminNamespacesNamespaceDevJson, map[string]*bintree{}}, + "namespace-prod.json": {testFixturesDocYamlAdminNamespacesNamespaceProdJson, map[string]*bintree{}}, + }}, + "resourcequota": {nil, map[string]*bintree{ + "limits.yaml": {testFixturesDocYamlAdminResourcequotaLimitsYaml, map[string]*bintree{}}, + "namespace.yaml": {testFixturesDocYamlAdminResourcequotaNamespaceYaml, map[string]*bintree{}}, + "quota.yaml": {testFixturesDocYamlAdminResourcequotaQuotaYaml, map[string]*bintree{}}, + }}, + }}, + "user-guide": {nil, map[string]*bintree{ + "configmap": {nil, map[string]*bintree{ + "configmap.yaml": {testFixturesDocYamlUserGuideConfigmapConfigmapYaml, map[string]*bintree{}}, + }}, + "deployment.yaml": {testFixturesDocYamlUserGuideDeploymentYaml, map[string]*bintree{}}, + "downward-api": {nil, map[string]*bintree{ + "dapi-pod.yaml.in": {testFixturesDocYamlUserGuideDownwardApiDapiPodYamlIn, map[string]*bintree{}}, + }}, + "job.yaml": {testFixturesDocYamlUserGuideJobYaml, map[string]*bintree{}}, + "liveness": {nil, map[string]*bintree{ + "exec-liveness.yaml.in": {testFixturesDocYamlUserGuideLivenessExecLivenessYamlIn, map[string]*bintree{}}, + "http-liveness.yaml.in": {testFixturesDocYamlUserGuideLivenessHttpLivenessYamlIn, map[string]*bintree{}}, + }}, + "multi-pod.yaml": {testFixturesDocYamlUserGuideMultiPodYaml, map[string]*bintree{}}, + "persistent-volumes": {nil, map[string]*bintree{ + "claims": {nil, map[string]*bintree{ + "claim-01.yaml": {testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim01Yaml, map[string]*bintree{}}, + "claim-02.yaml": {testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim02Yaml, map[string]*bintree{}}, + "claim-03.json": {testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim03Json, map[string]*bintree{}}, + }}, + "volumes": {nil, map[string]*bintree{ + "gce.yaml": {testFixturesDocYamlUserGuidePersistentVolumesVolumesGceYaml, map[string]*bintree{}}, + "local-01.yaml": {testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal01Yaml, map[string]*bintree{}}, + "local-02.yaml": {testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal02Yaml, map[string]*bintree{}}, + "nfs.yaml": {testFixturesDocYamlUserGuidePersistentVolumesVolumesNfsYaml, map[string]*bintree{}}, + }}, + }}, + "pod.yaml": {testFixturesDocYamlUserGuidePodYaml, map[string]*bintree{}}, + "replicaset": {nil, map[string]*bintree{ + "redis-slave.yaml": {testFixturesDocYamlUserGuideReplicasetRedisSlaveYaml, map[string]*bintree{}}, + }}, + "replication.yaml": {testFixturesDocYamlUserGuideReplicationYaml, map[string]*bintree{}}, + "secrets": {nil, map[string]*bintree{ + "secret-env-pod.yaml": {testFixturesDocYamlUserGuideSecretsSecretEnvPodYaml, map[string]*bintree{}}, + "secret-pod.yaml.in": {testFixturesDocYamlUserGuideSecretsSecretPodYamlIn, map[string]*bintree{}}, + "secret.yaml": {testFixturesDocYamlUserGuideSecretsSecretYaml, map[string]*bintree{}}, + }}, + "update-demo": {nil, map[string]*bintree{ + "images": {nil, map[string]*bintree{ + "kitten": {nil, map[string]*bintree{ + "html": {nil, map[string]*bintree{ + "data.json": {testFixturesDocYamlUserGuideUpdateDemoImagesKittenHtmlDataJson, map[string]*bintree{}}, + }}, + }}, + "nautilus": {nil, map[string]*bintree{ + "html": {nil, map[string]*bintree{ + "data.json": {testFixturesDocYamlUserGuideUpdateDemoImagesNautilusHtmlDataJson, map[string]*bintree{}}, + }}, + }}, + }}, + "kitten-rc.yaml.in": {testFixturesDocYamlUserGuideUpdateDemoKittenRcYamlIn, map[string]*bintree{}}, + "nautilus-rc.yaml.in": {testFixturesDocYamlUserGuideUpdateDemoNautilusRcYamlIn, map[string]*bintree{}}, + }}, + "walkthrough": {nil, map[string]*bintree{ + "podtemplate.json": {testFixturesDocYamlUserGuideWalkthroughPodtemplateJson, map[string]*bintree{}}, + }}, + }}, + }}, + "pkg": {nil, map[string]*bintree{ + "kubectl": {nil, map[string]*bintree{ + "OWNERS": {testFixturesPkgKubectlOwners, map[string]*bintree{}}, + "plugins": {nil, map[string]*bintree{ + "bar": {nil, map[string]*bintree{ + "kubectl-bar": {testFixturesPkgKubectlPluginsBarKubectlBar, map[string]*bintree{}}, + }}, + "foo": {nil, map[string]*bintree{ + "kubectl-foo": {testFixturesPkgKubectlPluginsFooKubectlFoo, map[string]*bintree{}}, + }}, + "kubectl-foo": {testFixturesPkgKubectlPluginsKubectlFoo, map[string]*bintree{}}, + "version": {nil, map[string]*bintree{ + "kubectl-version": {testFixturesPkgKubectlPluginsVersionKubectlVersion, map[string]*bintree{}}, + }}, + }}, + }}, + }}, + }}, + "images": {nil, map[string]*bintree{ + "Makefile": {testImagesMakefile, map[string]*bintree{}}, + "OWNERS": {testImagesOwners, map[string]*bintree{}}, + "agnhost": {nil, map[string]*bintree{ + ".gitignore": {testImagesAgnhostGitignore, map[string]*bintree{}}, + "BASEIMAGE": {testImagesAgnhostBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesAgnhostDockerfile, map[string]*bintree{}}, + "Dockerfile_windows": {testImagesAgnhostDockerfile_windows, map[string]*bintree{}}, + "Makefile": {testImagesAgnhostMakefile, map[string]*bintree{}}, + "OWNERS": {testImagesAgnhostOwners, map[string]*bintree{}}, + "VERSION": {testImagesAgnhostVersion, map[string]*bintree{}}, + "agnhost.go": {testImagesAgnhostAgnhostGo, map[string]*bintree{}}, + "audit-proxy": {nil, map[string]*bintree{ + "main.go": {testImagesAgnhostAuditProxyMainGo, map[string]*bintree{}}, + }}, + "connect": {nil, map[string]*bintree{ + "connect.go": {testImagesAgnhostConnectConnectGo, map[string]*bintree{}}, + }}, + "crd-conversion-webhook": {nil, map[string]*bintree{ + "config.go": {testImagesAgnhostCrdConversionWebhookConfigGo, map[string]*bintree{}}, + "converter": {nil, map[string]*bintree{ + "converter_test.go": {testImagesAgnhostCrdConversionWebhookConverterConverter_testGo, map[string]*bintree{}}, + "example_converter.go": {testImagesAgnhostCrdConversionWebhookConverterExample_converterGo, map[string]*bintree{}}, + "framework.go": {testImagesAgnhostCrdConversionWebhookConverterFrameworkGo, map[string]*bintree{}}, + }}, + "main.go": {testImagesAgnhostCrdConversionWebhookMainGo, map[string]*bintree{}}, + }}, + "dns": {nil, map[string]*bintree{ + "common.go": {testImagesAgnhostDnsCommonGo, map[string]*bintree{}}, + "dns.go": {testImagesAgnhostDnsDnsGo, map[string]*bintree{}}, + "dns_windows.go": {testImagesAgnhostDnsDns_windowsGo, map[string]*bintree{}}, + }}, + "entrypoint-tester": {nil, map[string]*bintree{ + "ep.go": {testImagesAgnhostEntrypointTesterEpGo, map[string]*bintree{}}, + }}, + "fakegitserver": {nil, map[string]*bintree{ + "gitserver.go": {testImagesAgnhostFakegitserverGitserverGo, map[string]*bintree{}}, + }}, + "guestbook": {nil, map[string]*bintree{ + "guestbook.go": {testImagesAgnhostGuestbookGuestbookGo, map[string]*bintree{}}, + }}, + "inclusterclient": {nil, map[string]*bintree{ + "main.go": {testImagesAgnhostInclusterclientMainGo, map[string]*bintree{}}, + }}, + "liveness": {nil, map[string]*bintree{ + "server.go": {testImagesAgnhostLivenessServerGo, map[string]*bintree{}}, + }}, + "logs-generator": {nil, map[string]*bintree{ + "logs_generator.go": {testImagesAgnhostLogsGeneratorLogs_generatorGo, map[string]*bintree{}}, + }}, + "mounttest": {nil, map[string]*bintree{ + "filePermissions.ps1": {testImagesAgnhostMounttestFilepermissionsPs1, map[string]*bintree{}}, + "mt.go": {testImagesAgnhostMounttestMtGo, map[string]*bintree{}}, + "mt_utils.go": {testImagesAgnhostMounttestMt_utilsGo, map[string]*bintree{}}, + "mt_utils_windows.go": {testImagesAgnhostMounttestMt_utils_windowsGo, map[string]*bintree{}}, + }}, + "net": {nil, map[string]*bintree{ + "common": {nil, map[string]*bintree{ + "common.go": {testImagesAgnhostNetCommonCommonGo, map[string]*bintree{}}, + }}, + "main.go": {testImagesAgnhostNetMainGo, map[string]*bintree{}}, + "nat": {nil, map[string]*bintree{ + "closewait.go": {testImagesAgnhostNetNatClosewaitGo, map[string]*bintree{}}, + }}, + }}, + "netexec": {nil, map[string]*bintree{ + "netexec.go": {testImagesAgnhostNetexecNetexecGo, map[string]*bintree{}}, + }}, + "nettest": {nil, map[string]*bintree{ + "nettest.go": {testImagesAgnhostNettestNettestGo, map[string]*bintree{}}, + }}, + "no-snat-test": {nil, map[string]*bintree{ + "main.go": {testImagesAgnhostNoSnatTestMainGo, map[string]*bintree{}}, + }}, + "no-snat-test-proxy": {nil, map[string]*bintree{ + "main.go": {testImagesAgnhostNoSnatTestProxyMainGo, map[string]*bintree{}}, + }}, + "openidmetadata": {nil, map[string]*bintree{ + "openidmetadata.go": {testImagesAgnhostOpenidmetadataOpenidmetadataGo, map[string]*bintree{}}, + }}, + "pause": {nil, map[string]*bintree{ + "pause.go": {testImagesAgnhostPausePauseGo, map[string]*bintree{}}, + }}, + "port-forward-tester": {nil, map[string]*bintree{ + "portforwardtester.go": {testImagesAgnhostPortForwardTesterPortforwardtesterGo, map[string]*bintree{}}, + }}, + "porter": {nil, map[string]*bintree{ + "localhost.crt": {testImagesAgnhostPorterLocalhostCrt, map[string]*bintree{}}, + "localhost.key": {testImagesAgnhostPorterLocalhostKey, map[string]*bintree{}}, + "porter.go": {testImagesAgnhostPorterPorterGo, map[string]*bintree{}}, + }}, + "resource-consumer-controller": {nil, map[string]*bintree{ + "controller.go": {testImagesAgnhostResourceConsumerControllerControllerGo, map[string]*bintree{}}, + }}, + "serve-hostname": {nil, map[string]*bintree{ + "serve_hostname.go": {testImagesAgnhostServeHostnameServe_hostnameGo, map[string]*bintree{}}, + }}, + "test-webserver": {nil, map[string]*bintree{ + "test-webserver.go": {testImagesAgnhostTestWebserverTestWebserverGo, map[string]*bintree{}}, + }}, + "webhook": {nil, map[string]*bintree{ + "addlabel.go": {testImagesAgnhostWebhookAddlabelGo, map[string]*bintree{}}, + "addlabel_test.go": {testImagesAgnhostWebhookAddlabel_testGo, map[string]*bintree{}}, + "alwaysallow.go": {testImagesAgnhostWebhookAlwaysallowGo, map[string]*bintree{}}, + "alwaysdeny.go": {testImagesAgnhostWebhookAlwaysdenyGo, map[string]*bintree{}}, + "config.go": {testImagesAgnhostWebhookConfigGo, map[string]*bintree{}}, + "configmap.go": {testImagesAgnhostWebhookConfigmapGo, map[string]*bintree{}}, + "convert.go": {testImagesAgnhostWebhookConvertGo, map[string]*bintree{}}, + "convert_test.go": {testImagesAgnhostWebhookConvert_testGo, map[string]*bintree{}}, + "crd.go": {testImagesAgnhostWebhookCrdGo, map[string]*bintree{}}, + "customresource.go": {testImagesAgnhostWebhookCustomresourceGo, map[string]*bintree{}}, + "main.go": {testImagesAgnhostWebhookMainGo, map[string]*bintree{}}, + "patch_test.go": {testImagesAgnhostWebhookPatch_testGo, map[string]*bintree{}}, + "pods.go": {testImagesAgnhostWebhookPodsGo, map[string]*bintree{}}, + "scheme.go": {testImagesAgnhostWebhookSchemeGo, map[string]*bintree{}}, + }}, + }}, + "apparmor-loader": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesApparmorLoaderBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesApparmorLoaderDockerfile, map[string]*bintree{}}, + "Makefile": {testImagesApparmorLoaderMakefile, map[string]*bintree{}}, + "OWNERS": {testImagesApparmorLoaderOwners, map[string]*bintree{}}, + "VERSION": {testImagesApparmorLoaderVersion, map[string]*bintree{}}, + "example-configmap.yaml": {testImagesApparmorLoaderExampleConfigmapYaml, map[string]*bintree{}}, + "example-daemon.yaml": {testImagesApparmorLoaderExampleDaemonYaml, map[string]*bintree{}}, + "example-namespace.yaml": {testImagesApparmorLoaderExampleNamespaceYaml, map[string]*bintree{}}, + "example-pod.yaml": {testImagesApparmorLoaderExamplePodYaml, map[string]*bintree{}}, + "loader.go": {testImagesApparmorLoaderLoaderGo, map[string]*bintree{}}, + }}, + "busybox": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesBusyboxBaseimage, map[string]*bintree{}}, + "Dockerfile_windows": {testImagesBusyboxDockerfile_windows, map[string]*bintree{}}, + "Makefile": {testImagesBusyboxMakefile, map[string]*bintree{}}, + "OWNERS": {testImagesBusyboxOwners, map[string]*bintree{}}, + "VERSION": {testImagesBusyboxVersion, map[string]*bintree{}}, + "hostname.go": {testImagesBusyboxHostnameGo, map[string]*bintree{}}, + }}, + "cloudbuild.yaml": {testImagesCloudbuildYaml, map[string]*bintree{}}, + "cuda-vector-add": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesCudaVectorAddBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesCudaVectorAddDockerfile, map[string]*bintree{}}, + "OWNERS": {testImagesCudaVectorAddOwners, map[string]*bintree{}}, + "VERSION": {testImagesCudaVectorAddVersion, map[string]*bintree{}}, + }}, + "echoserver": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesEchoserverBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesEchoserverDockerfile, map[string]*bintree{}}, + "OWNERS": {testImagesEchoserverOwners, map[string]*bintree{}}, + "VERSION": {testImagesEchoserverVersion, map[string]*bintree{}}, + "nginx.conf": {testImagesEchoserverNginxConf, map[string]*bintree{}}, + "run.sh": {testImagesEchoserverRunSh, map[string]*bintree{}}, + "template.lua": {testImagesEchoserverTemplateLua, map[string]*bintree{}}, + }}, + "image-util.sh": {testImagesImageUtilSh, map[string]*bintree{}}, + "ipc-utils": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesIpcUtilsBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesIpcUtilsDockerfile, map[string]*bintree{}}, + "VERSION": {testImagesIpcUtilsVersion, map[string]*bintree{}}, + }}, + "jessie-dnsutils": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesJessieDnsutilsBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesJessieDnsutilsDockerfile, map[string]*bintree{}}, + "OWNERS": {testImagesJessieDnsutilsOwners, map[string]*bintree{}}, + "VERSION": {testImagesJessieDnsutilsVersion, map[string]*bintree{}}, + "fixup-apt-list.sh": {testImagesJessieDnsutilsFixupAptListSh, map[string]*bintree{}}, + }}, + "kitten": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesKittenBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesKittenDockerfile, map[string]*bintree{}}, + "OWNERS": {testImagesKittenOwners, map[string]*bintree{}}, + "VERSION": {testImagesKittenVersion, map[string]*bintree{}}, + "html": {nil, map[string]*bintree{ + "data.json": {testImagesKittenHtmlDataJson, map[string]*bintree{}}, + }}, + }}, + "metadata-concealment": {nil, map[string]*bintree{ + "Dockerfile": {testImagesMetadataConcealmentDockerfile, map[string]*bintree{}}, + "Makefile": {testImagesMetadataConcealmentMakefile, map[string]*bintree{}}, + "OWNERS": {testImagesMetadataConcealmentOwners, map[string]*bintree{}}, + "VERSION": {testImagesMetadataConcealmentVersion, map[string]*bintree{}}, + "check_metadata_concealment.go": {testImagesMetadataConcealmentCheck_metadata_concealmentGo, map[string]*bintree{}}, + }}, + "nautilus": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesNautilusBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesNautilusDockerfile, map[string]*bintree{}}, + "OWNERS": {testImagesNautilusOwners, map[string]*bintree{}}, + "VERSION": {testImagesNautilusVersion, map[string]*bintree{}}, + "html": {nil, map[string]*bintree{ + "data.json": {testImagesNautilusHtmlDataJson, map[string]*bintree{}}, + }}, + }}, + "node-perf": {nil, map[string]*bintree{ + "npb-ep": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesNodePerfNpbEpBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesNodePerfNpbEpDockerfile, map[string]*bintree{}}, + "VERSION": {testImagesNodePerfNpbEpVersion, map[string]*bintree{}}, + }}, + "npb-is": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesNodePerfNpbIsBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesNodePerfNpbIsDockerfile, map[string]*bintree{}}, + "VERSION": {testImagesNodePerfNpbIsVersion, map[string]*bintree{}}, + }}, + "tf-wide-deep": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesNodePerfTfWideDeepBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesNodePerfTfWideDeepDockerfile, map[string]*bintree{}}, + "VERSION": {testImagesNodePerfTfWideDeepVersion, map[string]*bintree{}}, + }}, + }}, + "nonewprivs": {nil, map[string]*bintree{ + ".gitignore": {testImagesNonewprivsGitignore, map[string]*bintree{}}, + "BASEIMAGE": {testImagesNonewprivsBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesNonewprivsDockerfile, map[string]*bintree{}}, + "Makefile": {testImagesNonewprivsMakefile, map[string]*bintree{}}, + "OWNERS": {testImagesNonewprivsOwners, map[string]*bintree{}}, + "VERSION": {testImagesNonewprivsVersion, map[string]*bintree{}}, + "nnp.go": {testImagesNonewprivsNnpGo, map[string]*bintree{}}, + }}, + "nonroot": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesNonrootBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesNonrootDockerfile, map[string]*bintree{}}, + "OWNERS": {testImagesNonrootOwners, map[string]*bintree{}}, + "VERSION": {testImagesNonrootVersion, map[string]*bintree{}}, + }}, + "pets": {nil, map[string]*bintree{ + "OWNERS": {testImagesPetsOwners, map[string]*bintree{}}, + "peer-finder": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesPetsPeerFinderBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesPetsPeerFinderDockerfile, map[string]*bintree{}}, + "Makefile": {testImagesPetsPeerFinderMakefile, map[string]*bintree{}}, + "VERSION": {testImagesPetsPeerFinderVersion, map[string]*bintree{}}, + "peer-finder.go": {testImagesPetsPeerFinderPeerFinderGo, map[string]*bintree{}}, + }}, + "redis-installer": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesPetsRedisInstallerBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesPetsRedisInstallerDockerfile, map[string]*bintree{}}, + "Makefile": {testImagesPetsRedisInstallerMakefile, map[string]*bintree{}}, + "VERSION": {testImagesPetsRedisInstallerVersion, map[string]*bintree{}}, + "install.sh": {testImagesPetsRedisInstallerInstallSh, map[string]*bintree{}}, + "on-start.sh": {testImagesPetsRedisInstallerOnStartSh, map[string]*bintree{}}, + }}, + "zookeeper-installer": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesPetsZookeeperInstallerBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesPetsZookeeperInstallerDockerfile, map[string]*bintree{}}, + "Makefile": {testImagesPetsZookeeperInstallerMakefile, map[string]*bintree{}}, + "VERSION": {testImagesPetsZookeeperInstallerVersion, map[string]*bintree{}}, + "install.sh": {testImagesPetsZookeeperInstallerInstallSh, map[string]*bintree{}}, + "on-start.sh": {testImagesPetsZookeeperInstallerOnStartSh, map[string]*bintree{}}, + }}, + }}, + "redis": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesRedisBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesRedisDockerfile, map[string]*bintree{}}, + "OWNERS": {testImagesRedisOwners, map[string]*bintree{}}, + "VERSION": {testImagesRedisVersion, map[string]*bintree{}}, + "redis.conf": {testImagesRedisRedisConf, map[string]*bintree{}}, + }}, + "regression-issue-74839": {nil, map[string]*bintree{ + ".gitignore": {testImagesRegressionIssue74839Gitignore, map[string]*bintree{}}, + "Dockerfile": {testImagesRegressionIssue74839Dockerfile, map[string]*bintree{}}, + "Makefile": {testImagesRegressionIssue74839Makefile, map[string]*bintree{}}, + "OWNERS": {testImagesRegressionIssue74839Owners, map[string]*bintree{}}, + "VERSION": {testImagesRegressionIssue74839Version, map[string]*bintree{}}, + "main.go": {testImagesRegressionIssue74839MainGo, map[string]*bintree{}}, + "tcp.go": {testImagesRegressionIssue74839TcpGo, map[string]*bintree{}}, + }}, + "resource-consumer": {nil, map[string]*bintree{ + ".gitignore": {testImagesResourceConsumerGitignore, map[string]*bintree{}}, + "BASEIMAGE": {testImagesResourceConsumerBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesResourceConsumerDockerfile, map[string]*bintree{}}, + "Makefile": {testImagesResourceConsumerMakefile, map[string]*bintree{}}, + "VERSION": {testImagesResourceConsumerVersion, map[string]*bintree{}}, + "common": {nil, map[string]*bintree{ + "common.go": {testImagesResourceConsumerCommonCommonGo, map[string]*bintree{}}, + }}, + "consume-cpu": {nil, map[string]*bintree{ + "consume_cpu.go": {testImagesResourceConsumerConsumeCpuConsume_cpuGo, map[string]*bintree{}}, + }}, + "resource_consumer.go": {testImagesResourceConsumerResource_consumerGo, map[string]*bintree{}}, + "resource_consumer_handler.go": {testImagesResourceConsumerResource_consumer_handlerGo, map[string]*bintree{}}, + "utils.go": {testImagesResourceConsumerUtilsGo, map[string]*bintree{}}, + }}, + "sample-apiserver": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesSampleApiserverBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesSampleApiserverDockerfile, map[string]*bintree{}}, + "OWNERS": {testImagesSampleApiserverOwners, map[string]*bintree{}}, + "VERSION": {testImagesSampleApiserverVersion, map[string]*bintree{}}, + }}, + "sample-device-plugin": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesSampleDevicePluginBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesSampleDevicePluginDockerfile, map[string]*bintree{}}, + "Makefile": {testImagesSampleDevicePluginMakefile, map[string]*bintree{}}, + "VERSION": {testImagesSampleDevicePluginVersion, map[string]*bintree{}}, + "sampledeviceplugin.go": {testImagesSampleDevicePluginSampledevicepluginGo, map[string]*bintree{}}, + }}, + "volume": {nil, map[string]*bintree{ + "OWNERS": {testImagesVolumeOwners, map[string]*bintree{}}, + "gluster": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesVolumeGlusterBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesVolumeGlusterDockerfile, map[string]*bintree{}}, + "VERSION": {testImagesVolumeGlusterVersion, map[string]*bintree{}}, + "glusterd.vol": {testImagesVolumeGlusterGlusterdVol, map[string]*bintree{}}, + "index.html": {testImagesVolumeGlusterIndexHtml, map[string]*bintree{}}, + "run_gluster.sh": {testImagesVolumeGlusterRun_glusterSh, map[string]*bintree{}}, + }}, + "iscsi": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesVolumeIscsiBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesVolumeIscsiDockerfile, map[string]*bintree{}}, + "VERSION": {testImagesVolumeIscsiVersion, map[string]*bintree{}}, + "block.tar.gz": {testImagesVolumeIscsiBlockTarGz, map[string]*bintree{}}, + "create_block.sh": {testImagesVolumeIscsiCreate_blockSh, map[string]*bintree{}}, + "run_iscsi_target.sh": {testImagesVolumeIscsiRun_iscsi_targetSh, map[string]*bintree{}}, + }}, + "nfs": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesVolumeNfsBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesVolumeNfsDockerfile, map[string]*bintree{}}, + "VERSION": {testImagesVolumeNfsVersion, map[string]*bintree{}}, + "index.html": {testImagesVolumeNfsIndexHtml, map[string]*bintree{}}, + "run_nfs.sh": {testImagesVolumeNfsRun_nfsSh, map[string]*bintree{}}, + }}, + "rbd": {nil, map[string]*bintree{ + "BASEIMAGE": {testImagesVolumeRbdBaseimage, map[string]*bintree{}}, + "Dockerfile": {testImagesVolumeRbdDockerfile, map[string]*bintree{}}, + "VERSION": {testImagesVolumeRbdVersion, map[string]*bintree{}}, + "block.tar.gz": {testImagesVolumeRbdBlockTarGz, map[string]*bintree{}}, + "bootstrap.sh": {testImagesVolumeRbdBootstrapSh, map[string]*bintree{}}, + "ceph.conf.sh": {testImagesVolumeRbdCephConfSh, map[string]*bintree{}}, + "create_block.sh": {testImagesVolumeRbdCreate_blockSh, map[string]*bintree{}}, + "keyring": {testImagesVolumeRbdKeyring, map[string]*bintree{}}, + "mon.sh": {testImagesVolumeRbdMonSh, map[string]*bintree{}}, + "osd.sh": {testImagesVolumeRbdOsdSh, map[string]*bintree{}}, + }}, + }}, + }}, + }}, +}} + +// RestoreAsset restores an asset under the given directory +func RestoreAsset(dir, name string) error { + data, err := Asset(name) + if err != nil { + return err + } + info, err := AssetInfo(name) + if err != nil { + return err + } + err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755)) + if err != nil { + return err + } + err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + if err != nil { + return err + } + err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + if err != nil { + return err + } + return nil +} + +// RestoreAssets restores an asset under the given directory recursively +func RestoreAssets(dir, name string) error { + children, err := AssetDir(name) + // File + if err != nil { + return RestoreAsset(dir, name) + } + // Dir + for _, child := range children { + err = RestoreAssets(dir, filepath.Join(name, child)) + if err != nil { + return err + } + } + return nil +} + +func _filePath(dir, name string) string { + cannonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) +}

    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 z zl!n&9;o^3YL>l#?1abqN0_6RN6u@R8s3huJP@uZ=kb;uMRwGVl0Ea+$zYt~fG=-Un z^?sM@GLBr(p;&mDV6s@!w!^-|ReNAz_Uc(9q$eSkE7M zQ^~b=@{4(vvz+}NeVD$o3Ff8ph*Q~QjWxp*s~4e?)r%n6>P47r z^&(8RdJ$%~dJ(Q#y$E$$ed64mZuJ7WFDVZbCtxKyxnU7?Y-k?oO|NL zp?q~jRb|ifQhXJRwT}1eHkyihYR-{(o8KvC<48`9CAHGbEEe-Ro|q2RJ!6<&T9FI0 zt@&gQo?V5p_XvxfP|CJzb;s(dBwdTR{2~OrCj)HPX-X;!g9RwsOhJ+=)3>b06d)@x z1;`pq0e1DJKvj1s$VG9_+v$o+nC;?>8hH{rHNteRo-eh*x(o68PxCfaiut;xElnr8 z;U$b)d%jQ_io+XW7G_V;*f``~KS9O0fTgf24h?SLs3hJNq%g)7qo|S^C+U} zBWsx&BdePlW7j)1R#iYXj%ng#>&)ueF*t1ps^Ui1J>V*ivQFA!{-anw_nXcJmyKR& zdA}{@%g+h9^`1C=2kIcr6+7BmHvay4w9#>4wdp=>~UVvi`uCJ6(T}P)TXp2k3`I5+0*wf!k|nN+xLQF)V{B; zYzeU@5Vh~?9W5ckU(#jz-kJ1R@}3s!J#`1l+r6qFe(ak3`FhH1Q{YfBO#`#zMi))M z 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

    *vm{wKx9r9oMfpyh^;(tnT8^UF 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

    hyqe&?KbOB(*a=lk+JFgr76&iS1)XUaS8 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

    <#SX0~ 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%0A{-5 z*Rdg{#DB19m^M!l(6KQnH~}zUZmo>1&snz7SC0Q9uJy=eY^}qX1xiI*%K>t`M*_LM zLxC0!KQ;d^5erCcP1*vgoB>+j&>d$p1*B2_uMNNcqfq!?qF)^VLt#HQ41+J4`sqKV zwOwjv%s{nAPTD29ODre0Aq4Mb?LW+TnEGKWk_ww^ zAV&QEsJzFEpHi|yZU`rTUHWqFHWB+$XOJ46cgWl?GC?LeV3Jaf^{OFgN$B$hvg{pS zu{xr^6Sc~RwiHHX;xi zErUyixid0Ba|Pqissz1j8wX~M#VVv9WPACD@wOf^HIH_pd%}SyV6}Da%FIX6=()LA z+WQ!Ta6A6=Xm=%dB^`$#RPIqHyv?j zoraB?w+J<;OF47|#+cMM?rM~i<|PVtdW4zW{NJ^w+D4>4O*u7~yC$eyo<4KiDGub1*j zmTN|5cKe;n;}831$Q8R{1mGh){QbXJHR%u)momU8``GYIS8AZ=Lx+u%*uA zU3MnP=7bbcR6GRXoR&mrx;xknDRLOVynK=f%-0boMN;E z+-I`b%0r7 zPH(kL@%B!U(1yTVu|~73VW#f^0vO9zWXwf(Tu6k#5t05bqwwBnF-o{>w4^@Og*Byk zcF-v(Osif97Ya;zHs(9@)(~Lp{5tRq40)!S=6@oY z3DZdba;s~U^6tDo=fA4eNlFuCc)!5tHAfY!)NC8I*y@RC@nN)WGygjj6q@x6T)Z2M zpK0#ZT3LEa#u=3g;jKl|5NPQ?d5hy@y85TAL5pCTY1OvIn45S|S%=^M;Y z;6I5M6EO^yAl~^fdo>CY20&!j>YtaTO*1@Ew`Nq@tS>ZuZTgJ&{B#;(i;V;|`HP#Hs=D$hXpMXE34Ra-iZFM|vA`*S_ zMlm;)cI@^jH3%$0E^L)ipV_KnzgOL?pc|-RzcbVJOl1;*UNc5rjpH3VKQksV6;zo} zJJhLFTm7UD>i2&Imu}vt@82~jcwuve2=3eg_x__JMd(+>-6Ku-NjLmliuBwRm12|i zgYeVc>!50J@21y)R?q(2!5pJ%kvrkryR-LySbyQW?utQyU18I0Xy7C$CY_wy(m~?uog3kqes*Pq??=uFWmBg+}a=w)sZvN9VTw4jCF8@M@KX zrN{iR##RX(*Nyxwbrpj~x%I2dw-3#oo^*Mf?wY$J(Q3G*h&~sM@`y+V-MYn#sVl?- zVqbm|r-YO*j<<@!Ik*JL`$aS?i>hN69A&)9O)tP=bo@`x+4eK#iR8pCSjovG$c^#v znI^5U*$>N#qK2+aZqmTK^!ti(Et1sFSEm@WEeLMuFu+v+AJ}Tj8d^!UV%qqq)+HMC zK(4N!5xjzn{y@B-@efkVFMId~#j1!A59zMLQ?r@_;SnvmNSr zXN=R<#8dhf2eG&Mi0#%6O|S)X?D}=V6E3{LJ>kO46ITtpy4dW_jAJI3e#PYUkhZ_Z z*ts8G^l}Z)IQp^iy0ro@C)0GUwtC&O)lPMkmZA`M`r|&kwkK@y0B7VE-@)3!g|2HN z-#?wux&L{1&c@H=hYR)v|Z2i)M+KGd}peb(+#&fA4luI&!XCe zb=<=P`%5vLRI+bnRr!P@XM=sAE59#6Om@S5NM(n)EqS9<%CX;ZQCh3G%R@Mc>$pYe z`>>&RQ(i69D>KdPSmdEKg5$Ua|2EO2?;(^BOqag=BPg4k+p#R0`iAe2is>!A%XOfi z5dv*nufwwy?+E?~$?&a{{-UmY>r2s&;$k`D=$^@?RDXcH7Zh|LNB!MFBnM6S8m>@< z3_5~K$Z6B%&Q2iz5au3oSvaXvZhVtcgPf{A1+O~F&YRiQs(>LdX*VgCdHXdNcO^E_CKufnC$?U zo<`H0wwTM_Y6!HngpUuk*B@ZX;SoCZKJy zz@Ai_`3y3*V13Qh@aw?MdX}kaQ&Ov2$!=eMz`M}p+kS_?iDP$RWdS|mqD%Zp2w<&P zu!hYhGux+1v)*n|w%e!T^?l9Ae57%WQi#u5J$KA_{?;Cu^InP@3AI*T;_@%2OTc?Cv2mKMhC#EHne7v(GOe zA5nElIrbQ*+}N8(4Fsj#J)LJ=8qf;CG4FVF8#L}aRnJjiF7B&(Y5<)alJKlc0#bDj zee0Lq(YPJ6yQqP#4uy0v1L(-QiMIggG)Q)xl;;ztn)$!#z*^@gp*k2-0zPlC9DPyC z{;#&{DGbnc+kL7#FF6mYuF`y}cREapisG4DWv;Az1=JVa4+4ESU4F^k8oI`-H3f7b zjj{OwDo^u0~S#&lQ&Q$EmF zVev(!N$6HDzBjF32C9J*4$H7J<$C8fyVd}m-W69Gc77-hRs&oKlr|NXhfCYS7fp-X z^2)U^o(o(Xbj}wyoPH+JtPR_|X>*4A+TK_jtW*sXm$l{qa+Pssd!P)ax+>4RO8OV* zDl>!2HZr)B?h{rD0r2NGNR|7W5*I0vbj{GT43lS%_~nlDmGW)QXqCyTWY+l0p6ZofH-&TXc7r_6p(lS zPO1)EuTd@{tRVDXi99bHJ083nfb<9S*x5&(tyhKr{qbu2kGhBXKWhCN;dY`jz6TDl zl>--Q>?#2M9jz9(kTY#{#c?;}ilho&H+nWhzPN0;8+mbw@*ly8l}{~zbHs}QYG_ic z_R7BQ(m!wpN@GgeT0C$$G08x2OKO|J`d{5~|08=q|KAPT|FuB8rUfWxRw=kRkgE0p zC$xVCQ&xpIx`#P#Kfa(og1gO_tN_NLPgRA2F#q(tMGQx`2RnAtYN z$9c@sNKyM>(voF98Qb;mk7kd)8MyLtb+Tfj*iE>WPUW<;i@)-SX=T)QbC;E$9=yYglmoJi()oz~(O z9sJDRU6@cf++Rd9q-A&8wQt+}=sl>!P;PK%6`Wb*BVLJLc4CE2@4R7H=%NaRFB=y4 zyx4IcB?n|3^`=PqZ3n1rtY#%g*F$2t1MTV;AE)!mAW+ zKf_MSVB?r7Pbt57O22rYceucR*<-#p=_YCmrj*^LV>7o7d-Gwi0B|a2^(F=+vh%Iu zEkF92A(gTC2uFT=WI*hP4f&$NwDVq`ZGdOe)F&3OPQ4}Tk(>MX#4wv2Xhig2tHE2x zuumsvinUG@lCv7NXM*JAC)-cxbh1JE#;->*s7a@BDM`-*T-h;(T!yG#bj0Z=sjX(3 zL~B>Wt+$&_7G_1^j80#)CjU{##}Kx=q9H1~vs)^58s-E@~-xmXNbD8*VdG5A<+5^NPl8gWCQ^ ze!Wt|kB6$MZ}36oE(P@RCP&VvZ63KR4k5LJll+o!FW-&+;#gy#&0*!CC-z-2sA7> z1+}p$?8T!8mmvnhAaaK8ROlZQFWMv2%RAI)Zx8}+lBnlbE5%lRZn*#np1!C_c+OUb zP}zNnGz%$1l7^bMil!lxO&pRlSjrDLfZcW}Q&3j~1iRqtTp_H&&(*F_ijlBVTNZj- zi77l$j0@<0jU1opQZ-2Vp!r< z32NX z^uyi$wzsQSM)A&A6WsX13%Fb*pDiyg4x}?t<;GhdNT-%T7*M;hmYaD>x6${++%jt0 zb!*nHLI~!|X@Fb3P~K z8sieGwPDk~vhstVR73O_y^_N4~Icqz=DRZdX=TSAj3|W7^E2LP!u0n2ufg z-!2AvN0wD>-Alj=0)(;b^Nm=hqc#aK|HwLPq?N@jL+;ci{zrIXh0#QK)#K{qzOd$~ z<>?b1S0j72^^Hv*G*JEzylRV+97Ko!*x~tK<}*;f+2IU+c}d(G(8LnP6_3r9{yC`w z$8jj;H{j$}`ppCqFZ~OVtLk27p*~6L%OucfR0V-sHId~Rfbm(c;P<` zEu(W#1WB+i2keW;kIgvieLqt{B}>UILY}tEf(bnUOo3` z8z$Vk`s%pE?5}~!5$Vt585u6p-2MK}23-Uu0t3-OQDl_`)$zA4F+nsdR@#kPSV51*-f{fRyguWB+?xpjmR z{dJkwmyk5Kr6g}l=;^TLcKiXE&gm;5{q-wBsc+1--Neg_$#1Mt`wIw>K=dYt2uUl) zN6888MUFvVp$hR4ci?jsX@}@A5PG)&qhJ)+gI&pu zQIIXh)ZW12v*&$AQdFkbu9BHr0(!>ecWreP!9mY5G+-RIzZS{XA})HY|E*}Fif#WVdt^9Y)BP0)x~BHCleusO-m0}x{ZVkD#fEq`N3#X%vsbvZ8Z0F zYE#ffpMCkaS}WXFba!o)e?vLyu#9ly^4<*(x(g5%43RpK*i|&SxkAUO5{L`TN1grm?;AYEJfAJmCD=<8yKssO!%7d zk4~6pSG)rzx9U_mZL4#{v3U*?{n93Tf$ToT7Ug)jLmIcAJ5rCXiQRZtu{dnvs>~)? zmFM0ywmjuiPp>3;_gjOEo*Nz^!8Z`mkzWuPO7f9oE04~wIyKUidJu6Kor|X2bAbyg zQ;O}hVX=vDl0CIQAK~R&5}1NiqL^IQU_H)BTu&ncQV~6NN<4peA*o5?H%>Q`EAzQ|W+>TM zO-4H&($k@wf;~rAEP{0_aa+qWPpi!I2Snpsy>g_Kxh;saW%FrVGH=onf!1?PCi;=+ za)F*}z@@4F{b^c8zGI7G!B+@{e9u}&8#D)l=@8WAsL}`fpuNRH8L-(dtc{eUKsHDr z#Dnm;5u`oX0c^~;HAHW#b1T5IV-#;=33I9Jo`~?>Z-MPijA7y7bfv*hSs!+2|IpF4 z^z1tvf8R-~0UP24P2dOI03rQDK@PCdnelYiSl{=T;ED#E1-pR+mfI zVyKo-DgB=+l_#w+RD2uYe#w9b;)ur;o31RCU?Jrn3*%U#1PH}xh(}ng{mW3ER2pFE zq+?zC*1$B+S%^bRAUCB^KP2lg+0yDf>aQNue#Do-8NP?2uGJ*A%kg1MeeMR#F@`2`~H4L{O zX3Slj4B;PH4)mf>v@|yLm!i7POF~_CXK|aj<6FE_#YD{vcFG?emsl5xuwF$h?Fe(- zP6Ukfq#F=PcE$8B%2-ZW9`H~j`g%O7RgmC-|3!^$# zi7)hpoP+^*S2@`cNu5N32GieD;Z9r46B8NCPif#2cJ#L|Y5)4O5m({5Ccz()31Oy^ zLJpwFKW9H1c2;fiI$~SK4Yx_s)HypQFVXZPfv$4C{8nX0PjZ}8Z5wh)?{;ghD&B(K z%B`?A?%3>EX=t2u_0Fk%+JxVlm!+iYl&l6%=I`8!vx}SKWYx1<;Z+ac_%S-sHmsJQ z4yz!H84{jGo_Rtkgmo-gFZul|g>8eF@k2Y$^6mez^p#O{G)=d-yE_LD?(XjH?(XjH z?oJ>O+}$O(1PSgC+(Yo-cb@mVKW5DgYo^blr@Cub_3m8@TW-BtX61!d#)jYQ&8Ryq zljP0#w%lN}fa@~Mf*h0%h2OEgwkDM4##c+quCGc!qmrT)u!KmT0=Qn3;{$%>eWoh4(OGlmYj2{M=383=Ln z#Gy4BZwF-Ko2AWtp0cJv8l-K^aX)q^MFoBS)d*#6LSIl3|47?3bKaqcPos2KJ3F83jsb3J;eUFES@Ii2Jdq(#&CI-I7SF6dU_!`UOP zr1OP;%cwdaNDZicD;-R3r1*Gxhckt;!fL_Z>s5M4Wwqe#Xu%Ua&OJpiLWsXizF-Hw z*H_}Fjo?KT;*uk|{Ep(4VC_tcyjUPU+`??O_7~9m^eA&G=^B8W?v0+`vDZ>=gbJU( z7mkjlwC-49Y1_MEOoNO9PbZ+(Ng4CXbmAAiHLeP49lAeF;x7>k+oSkBhJbl_5wiCR zlM{m&(x`i2ET@PFC!Spj%-+1!hPdYhw!0?->Mu~;((LiCCw=IMd&IwLvHSFe8|Cve z!>(f*A}SD+`ba#T0*X--dkzyi*VwMrQSQ{jfht3E2*pE9KZbzk1AgOo)L;Rq4fu< z0Dh+6_XIm6Tx-X}%#PMEPf=q-rWwDk54kctwVRHsgRR9L);{PlJO=9pkrPrd5~iCn zT-{5hbp0OPsYxZaLWd2F&j;}G6Bnn&`%GSthpmS7>a35Q z?A)#e_ChKor^-rm(8fGN4nEbe^bYXcvIe{}Avck#QG1_{=cMFJKFRH0byHipm1*e- z>a9-r<2^Pl($e2zqzmexuDKdwy1(3czET@va=ZMQP#z%%Ma#WV0AApPw)^TV512i< z`BxCT`i7g>oam#WcNq)lBdAX(G;t?Vr?zLhsj2xj)^B!!=eg?jrxXzfYc((V2Dc}n z)xsJEa-M98>1n@4s_`))N(L#3DSMUC@g#+t!O1uf(Ey~}Z7G()n-e%{o2+zuUpQi3@HA^*w?&7c(6I)n2EN)wynT%@EVs8n z3l#{NXkVKqCKZP_oL%sX<5Oc^;$-87bq~?_Q@Ee?qSnA~>`hgAv*(xGt6n!`8}S!s zC`&v3XV{oj6vyh;$iF+PS@*BOD~x|+reWgl%4QJ>JKxjHJv-|HMk^~R20BYF_!rj6 z4?;#}+zBN6_q}CIIn%r6S1zFT4DDQVm;T*@0y(pZido|-fF7Q;?XK%>OjYRqbu=O6 zbV5`!%=o-Iba3id<$(egn_toEdT701M=PMTiW3)XEc|uJ6KG8l`n7DG_VlnwE2{V5or?j=y3=G?Hxfn$fahdhMxR*gE6choE7!B*7o_k22w#Cpy}_%? zw?U=;{Z~39Tp~fuQV~^WgudB6oPiV`Q1&lUD-+n9frB{V_kwcG!0j`W!6LU`Uy$}9 z_e)CTOIRK93!Y-b8DW0rWnO<%{%Fk^p*f=!W8h#D)IDo49ZmO5#$=oZl`3B(T@8W~tHs=^2 z(z@$>T#zKn;A!K9j4VNSY->n6N*m^}TT<8#KgDSdFM?VS>=b9e#7C}bx=F21_EGce z=r*RV(PIPXu6RZNfps~f}uR-V6m1*MLfJbcxxD~nS>YGKheq< zg?s6B(hCfQo|a&+b18k;X=+}2QrAp`+{R5x*yQ&R*pyp*{nviy(S13b88%{pdx5pa ze6IJFBvRdCLNQ0A;1fl6iI35@aL=?I^;ev#!eojj>5Hq3--noN%jOfvHVgH8Qh@C4 za?CTjoBWMrC%_ZFK_1Wkvz1lxmq|xI4mupXvpgyE$?_QuY419=0d*OuhnQc4xx?5W zr1V#*>6v%0D6XL>+e-V8|43X<>{&Q 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

    l+lwF=TNp;!%a_p+lRfD>C^*82IQiTzGV}v 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 Bj(BJb%tq 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